From 27625914a9bc7d8db3f1db260591694b20196f8a Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 22 Sep 2024 12:25:39 +0300 Subject: [PATCH 001/259] push to deploy --- .bashrc | 1 - .editorconfig | 18 + .env.example | 65 + .gitattributes | 11 + .github/workflows/php-build-and-deploy.yml | 55 + .github/workflows/terraform.yml | 38 - .gitignore | 19 + .htaccess | 6 + .pre-commit-config.yaml | 17 + Dockerfile | 64 + README.md | 1 + app/Casts/Integer.php | 29 + app/Enums/ConstraintType.php | 61 + app/Enums/RecurrenceType.php | 17 + app/Filament/Auth/Login.php | 49 + app/Filament/Clusters/Constraints.php | 12 + app/Filament/Clusters/Shifts.php | 12 + app/Filament/Widgets/CalendarWidget.php | 158 + app/Filters/NumberFilter.php | 170 + app/Forms/Components/Flatpickr.php | 167 + app/Models/Constraint.php | 161 + app/Models/Department.php | 27 + app/Models/Shift.php | 52 + app/Models/Soldier.php | 83 + app/Models/Task.php | 37 + app/Models/Team.php | 32 + app/Models/User.php | 53 + app/Policies/DepartmentPolicy.php | 13 + app/Policies/SoldierPolicy.php | 13 + app/Policies/TaskPolicy.php | 13 + app/Policies/TeamPolicy.php | 13 + app/Providers/AppServiceProvider.php | 22 + app/Providers/FilamentServiceProvider.php | 73 + app/Resources/ConstraintResource.php | 44 + .../Pages/CreateConstraint.php | 11 + .../Pages/EditConstraint.php | 19 + .../Pages/ListConstraints.php | 30 + app/Resources/DepartmentResource.php | 99 + .../Pages/CreateDepartment.php | 125 + .../Pages/EditDepartment.php | 19 + .../Pages/ListDepartments.php | 19 + app/Resources/MyConstraintResource.php | 39 + .../Pages/CreateMyConstraint.php | 11 + .../Pages/EditMyConstraint.php | 19 + .../Pages/ListMyConstraints.php | 30 + app/Resources/MyShiftResource.php | 36 + .../MyShiftResource/Pages/CreateMyShift.php | 11 + .../MyShiftResource/Pages/EditMyShift.php | 19 + .../MyShiftResource/Pages/ListMyShift.php | 30 + app/Resources/ProfileResource.php | 114 + .../ProfileResource/Pages/CreateProfile.php | 11 + .../ProfileResource/Pages/EditProfile.php | 24 + .../ProfileResource/Pages/ListProfiles.php | 23 + app/Resources/ShiftResource.php | 44 + .../ShiftResource/Pages/CreateShift.php | 11 + .../ShiftResource/Pages/EditShift.php | 19 + .../ShiftResource/Pages/ListShifts.php | 30 + app/Resources/SoldierResource.php | 301 + .../SoldierResource/Pages/CreateSoldier.php | 71 + .../SoldierResource/Pages/EditSoldier.php | 26 + .../SoldierResource/Pages/ListSoldiers.php | 19 + app/Resources/TaskResource.php | 110 + .../TaskResource/Pages/CreateTask.php | 98 + app/Resources/TaskResource/Pages/EditTask.php | 19 + .../TaskResource/Pages/ListTasks.php | 19 + app/Resources/TeamResource.php | 151 + .../TeamResource/Pages/CreateTeam.php | 127 + app/Resources/TeamResource/Pages/EditTeam.php | 19 + .../TeamResource/Pages/ListTeams.php | 19 + app/Services/ReccurenceEvents.php | 122 + artisan | 13 + bootstrap/app.php | 18 + bootstrap/cache/.gitignore | 2 + bootstrap/providers.php | 6 + common/test_db_connection.php | 23 + composer.json | 77 + composer.lock | 13132 ++++++++++++++++ config/app.php | 3 + config/session.php | 214 + database/.gitignore | 1 + database/factories/ConstraintFactory.php | 19 + database/factories/DepartmentFactory.php | 17 + database/factories/ShiftFactory.php | 21 + database/factories/SoldierFactory.php | 29 + database/factories/TaskFactory.php | 23 + database/factories/TeamFactory.php | 19 + database/factories/UserFactory.php | 21 + .../0001_01_01_000000_create_users_table.php | 35 + .../0001_01_01_000001_create_cache_table.php | 29 + .../0001_01_01_000002_create_jobs_table.php | 51 + ...1_01_000003_create_notifications_table.php | 27 + ..._01_01_000003_create_permission_tables.php | 97 + ...2024_05_30_094012_create_soldier_table.php | 38 + .../2024_05_30_100244_create_task_table.php | 30 + ...4_05_30_103745_create_constraint_table.php | 25 + .../2024_05_30_104216_create_shift_table.php | 25 + .../2024_06_25_080650_create_team_table.php | 28 + ...4_06_25_080957_create_department_table.php | 27 + database/seeders/DatabaseSeeder.php | 28 + database/seeders/PermissionSeeder.php | 26 + dev.compose.yaml | 102 + entrypoint.sh | 106 + github-scripts/find-closed-issues.sh | 11 + package-lock.json | 2537 +++ package.json | 19 + php.ini | 99 + php.ini.dev | 2 + phpunit.xml | 33 + pint.json | 3 + postcss.config.js | 7 + public/.htaccess | 21 + .../css/coolsam/flatpickr/flatpickr-css.css | 119 + .../css/coolsam/flatpickr/flatpickr-them.css | 372 + public/css/filament/filament/app.css | 1 + public/css/filament/forms/forms.css | 49 + public/css/filament/support/support.css | 1 + .../filament-fullcalendar-styles.css | 1 + public/favicon.ico | 0 public/index.php | 14 + .../components/flatpickr-component.js | 2212 +++ public/js/filament/filament/app.js | 1 + public/js/filament/filament/echo.js | 13 + .../filament/forms/components/color-picker.js | 1 + .../forms/components/date-time-picker.js | 1 + .../filament/forms/components/file-upload.js | 123 + .../js/filament/forms/components/key-value.js | 1 + .../forms/components/markdown-editor.js | 51 + .../filament/forms/components/rich-editor.js | 144 + public/js/filament/forms/components/select.js | 6 + .../filament/forms/components/tags-input.js | 1 + .../js/filament/forms/components/textarea.js | 1 + .../filament/notifications/notifications.js | 1 + public/js/filament/support/async-alpine.js | 1 + public/js/filament/support/support.js | 46 + public/js/filament/tables/components/table.js | 1 + .../js/filament/widgets/components/chart.js | 37 + .../components/stats-overview/stat/chart.js | 29 + .../filament-fullcalendar-alpine.js | 26 + public/robots.txt | 2 + resources/css/app.css | 3 + resources/js/app.js | 1 + resources/js/bootstrap.js | 4 + .../widgets/calendar-widget.blade.php | 5 + .../forms/components/flatpickr.blade.php | 50 + routes/console.php | 1 + routes/web.php | 3 + services/Dockerfile | 8 - services/administrator/main.tf | 47 - services/administrator/outputs.tf | 11 - services/administrator/variables.tf | 54 - services/emails/main.tf | 96 - services/emails/variables.tf | 59 - services/main-project/main.tf | 70 - services/main-project/variables.tf | 19 - services/storages/main.tf | 160 - services/storages/variables.tf | 87 - services/subscriptions-automation/main.tf | 132 - .../subscriptions-automation/variables.tf | 69 - services/user-disable/main.tf | 93 - services/user-disable/variables.tf | 54 - storage/app/.gitignore | 3 + storage/app/public/.gitignore | 2 + storage/framework/.gitignore | 9 + storage/framework/cache/.gitignore | 3 + storage/framework/cache/data/.gitignore | 2 + storage/framework/sessions/.gitignore | 2 + storage/framework/testing/.gitignore | 2 + storage/framework/views/.gitignore | 2 + storage/logs/.gitignore | 2 + tailwind.config.js | 9 + tests/Feature/CalendarWidgetTest.php | 172 + tests/Feature/ConstraintTest.php | 99 + tests/Feature/CreateDepartmentTest.php | 31 + tests/Feature/CreateSoliderTest.php | 33 + tests/Feature/CreateTeamTest.php | 36 + tests/Feature/ExampleTest.php | 7 + tests/Feature/HierarchyTest.php | 39 + tests/Feature/ListDepartmentTest.php | 41 + tests/Feature/ListSoldierTest.php | 26 + tests/Feature/ListTeamTest.php | 86 + tests/Feature/LoginTest.php | 32 + tests/Feature/PoliciesTest.php | 19 + tests/Feature/ReccurenceEventsTest.php | 91 + tests/Feature/ReplicateSoldierTest.php | 15 + tests/Feature/ReservistsTest.php | 46 + tests/Feature/SoldiersTest.php | 13 + tests/Pest.php | 6 + tests/TestCase.php | 19 + tests/Unit/ExampleTest.php | 5 + vite.config.js | 11 + 190 files changed, 24690 insertions(+), 998 deletions(-) delete mode 100644 .bashrc create mode 100644 .editorconfig create mode 100644 .env.example create mode 100644 .gitattributes create mode 100644 .github/workflows/php-build-and-deploy.yml delete mode 100644 .github/workflows/terraform.yml create mode 100644 .gitignore create mode 100644 .htaccess create mode 100644 .pre-commit-config.yaml create mode 100644 Dockerfile create mode 100644 README.md create mode 100644 app/Casts/Integer.php create mode 100644 app/Enums/ConstraintType.php create mode 100644 app/Enums/RecurrenceType.php create mode 100644 app/Filament/Auth/Login.php create mode 100644 app/Filament/Clusters/Constraints.php create mode 100644 app/Filament/Clusters/Shifts.php create mode 100644 app/Filament/Widgets/CalendarWidget.php create mode 100644 app/Filters/NumberFilter.php create mode 100644 app/Forms/Components/Flatpickr.php create mode 100644 app/Models/Constraint.php create mode 100644 app/Models/Department.php create mode 100644 app/Models/Shift.php create mode 100644 app/Models/Soldier.php create mode 100644 app/Models/Task.php create mode 100644 app/Models/Team.php create mode 100644 app/Models/User.php create mode 100644 app/Policies/DepartmentPolicy.php create mode 100644 app/Policies/SoldierPolicy.php create mode 100644 app/Policies/TaskPolicy.php create mode 100644 app/Policies/TeamPolicy.php create mode 100644 app/Providers/AppServiceProvider.php create mode 100644 app/Providers/FilamentServiceProvider.php create mode 100644 app/Resources/ConstraintResource.php create mode 100644 app/Resources/ConstraintResource/Pages/CreateConstraint.php create mode 100644 app/Resources/ConstraintResource/Pages/EditConstraint.php create mode 100644 app/Resources/ConstraintResource/Pages/ListConstraints.php create mode 100644 app/Resources/DepartmentResource.php create mode 100644 app/Resources/DepartmentResource/Pages/CreateDepartment.php create mode 100644 app/Resources/DepartmentResource/Pages/EditDepartment.php create mode 100644 app/Resources/DepartmentResource/Pages/ListDepartments.php create mode 100644 app/Resources/MyConstraintResource.php create mode 100644 app/Resources/MyConstraintResource/Pages/CreateMyConstraint.php create mode 100644 app/Resources/MyConstraintResource/Pages/EditMyConstraint.php create mode 100644 app/Resources/MyConstraintResource/Pages/ListMyConstraints.php create mode 100644 app/Resources/MyShiftResource.php create mode 100644 app/Resources/MyShiftResource/Pages/CreateMyShift.php create mode 100644 app/Resources/MyShiftResource/Pages/EditMyShift.php create mode 100644 app/Resources/MyShiftResource/Pages/ListMyShift.php create mode 100644 app/Resources/ProfileResource.php create mode 100644 app/Resources/ProfileResource/Pages/CreateProfile.php create mode 100644 app/Resources/ProfileResource/Pages/EditProfile.php create mode 100644 app/Resources/ProfileResource/Pages/ListProfiles.php create mode 100644 app/Resources/ShiftResource.php create mode 100644 app/Resources/ShiftResource/Pages/CreateShift.php create mode 100644 app/Resources/ShiftResource/Pages/EditShift.php create mode 100644 app/Resources/ShiftResource/Pages/ListShifts.php create mode 100644 app/Resources/SoldierResource.php create mode 100644 app/Resources/SoldierResource/Pages/CreateSoldier.php create mode 100644 app/Resources/SoldierResource/Pages/EditSoldier.php create mode 100644 app/Resources/SoldierResource/Pages/ListSoldiers.php create mode 100644 app/Resources/TaskResource.php create mode 100644 app/Resources/TaskResource/Pages/CreateTask.php create mode 100644 app/Resources/TaskResource/Pages/EditTask.php create mode 100644 app/Resources/TaskResource/Pages/ListTasks.php create mode 100644 app/Resources/TeamResource.php create mode 100644 app/Resources/TeamResource/Pages/CreateTeam.php create mode 100644 app/Resources/TeamResource/Pages/EditTeam.php create mode 100644 app/Resources/TeamResource/Pages/ListTeams.php create mode 100644 app/Services/ReccurenceEvents.php create mode 100644 artisan create mode 100644 bootstrap/app.php create mode 100644 bootstrap/cache/.gitignore create mode 100644 bootstrap/providers.php create mode 100644 common/test_db_connection.php create mode 100644 composer.json create mode 100644 composer.lock create mode 100644 config/app.php create mode 100644 config/session.php create mode 100644 database/.gitignore create mode 100644 database/factories/ConstraintFactory.php create mode 100644 database/factories/DepartmentFactory.php create mode 100644 database/factories/ShiftFactory.php create mode 100644 database/factories/SoldierFactory.php create mode 100644 database/factories/TaskFactory.php create mode 100644 database/factories/TeamFactory.php create mode 100644 database/factories/UserFactory.php create mode 100644 database/migrations/0001_01_01_000000_create_users_table.php create mode 100644 database/migrations/0001_01_01_000001_create_cache_table.php create mode 100644 database/migrations/0001_01_01_000002_create_jobs_table.php create mode 100644 database/migrations/0001_01_01_000003_create_notifications_table.php create mode 100644 database/migrations/0001_01_01_000003_create_permission_tables.php create mode 100644 database/migrations/2024_05_30_094012_create_soldier_table.php create mode 100644 database/migrations/2024_05_30_100244_create_task_table.php create mode 100644 database/migrations/2024_05_30_103745_create_constraint_table.php create mode 100644 database/migrations/2024_05_30_104216_create_shift_table.php create mode 100644 database/migrations/2024_06_25_080650_create_team_table.php create mode 100644 database/migrations/2024_06_25_080957_create_department_table.php create mode 100644 database/seeders/DatabaseSeeder.php create mode 100644 database/seeders/PermissionSeeder.php create mode 100644 dev.compose.yaml create mode 100644 entrypoint.sh create mode 100644 github-scripts/find-closed-issues.sh create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 php.ini create mode 100644 php.ini.dev create mode 100644 phpunit.xml create mode 100644 pint.json create mode 100644 postcss.config.js create mode 100644 public/.htaccess create mode 100644 public/css/coolsam/flatpickr/flatpickr-css.css create mode 100644 public/css/coolsam/flatpickr/flatpickr-them.css create mode 100644 public/css/filament/filament/app.css create mode 100644 public/css/filament/forms/forms.css create mode 100644 public/css/filament/support/support.css create mode 100644 public/css/saade/filament-fullcalendar/filament-fullcalendar-styles.css create mode 100644 public/favicon.ico create mode 100644 public/index.php create mode 100644 public/js/coolsam/flatpickr/components/flatpickr-component.js create mode 100644 public/js/filament/filament/app.js create mode 100644 public/js/filament/filament/echo.js create mode 100644 public/js/filament/forms/components/color-picker.js create mode 100644 public/js/filament/forms/components/date-time-picker.js create mode 100644 public/js/filament/forms/components/file-upload.js create mode 100644 public/js/filament/forms/components/key-value.js create mode 100644 public/js/filament/forms/components/markdown-editor.js create mode 100644 public/js/filament/forms/components/rich-editor.js create mode 100644 public/js/filament/forms/components/select.js create mode 100644 public/js/filament/forms/components/tags-input.js create mode 100644 public/js/filament/forms/components/textarea.js create mode 100644 public/js/filament/notifications/notifications.js create mode 100644 public/js/filament/support/async-alpine.js create mode 100644 public/js/filament/support/support.js create mode 100644 public/js/filament/tables/components/table.js create mode 100644 public/js/filament/widgets/components/chart.js create mode 100644 public/js/filament/widgets/components/stats-overview/stat/chart.js create mode 100644 public/js/saade/filament-fullcalendar/components/filament-fullcalendar-alpine.js create mode 100644 public/robots.txt create mode 100644 resources/css/app.css create mode 100644 resources/js/app.js create mode 100644 resources/js/bootstrap.js create mode 100644 resources/views/filament/widgets/calendar-widget.blade.php create mode 100644 resources/views/forms/components/flatpickr.blade.php create mode 100644 routes/console.php create mode 100644 routes/web.php delete mode 100644 services/Dockerfile delete mode 100644 services/administrator/main.tf delete mode 100644 services/administrator/outputs.tf delete mode 100644 services/administrator/variables.tf delete mode 100644 services/emails/main.tf delete mode 100644 services/emails/variables.tf delete mode 100644 services/main-project/main.tf delete mode 100644 services/main-project/variables.tf delete mode 100644 services/storages/main.tf delete mode 100644 services/storages/variables.tf delete mode 100644 services/subscriptions-automation/main.tf delete mode 100644 services/subscriptions-automation/variables.tf delete mode 100644 services/user-disable/main.tf delete mode 100644 services/user-disable/variables.tf create mode 100644 storage/app/.gitignore create mode 100644 storage/app/public/.gitignore create mode 100644 storage/framework/.gitignore create mode 100644 storage/framework/cache/.gitignore create mode 100644 storage/framework/cache/data/.gitignore create mode 100644 storage/framework/sessions/.gitignore create mode 100644 storage/framework/testing/.gitignore create mode 100644 storage/framework/views/.gitignore create mode 100644 storage/logs/.gitignore create mode 100644 tailwind.config.js create mode 100644 tests/Feature/CalendarWidgetTest.php create mode 100644 tests/Feature/ConstraintTest.php create mode 100644 tests/Feature/CreateDepartmentTest.php create mode 100644 tests/Feature/CreateSoliderTest.php create mode 100644 tests/Feature/CreateTeamTest.php create mode 100644 tests/Feature/ExampleTest.php create mode 100644 tests/Feature/HierarchyTest.php create mode 100644 tests/Feature/ListDepartmentTest.php create mode 100644 tests/Feature/ListSoldierTest.php create mode 100644 tests/Feature/ListTeamTest.php create mode 100644 tests/Feature/LoginTest.php create mode 100644 tests/Feature/PoliciesTest.php create mode 100644 tests/Feature/ReccurenceEventsTest.php create mode 100644 tests/Feature/ReplicateSoldierTest.php create mode 100644 tests/Feature/ReservistsTest.php create mode 100644 tests/Feature/SoldiersTest.php create mode 100644 tests/Pest.php create mode 100644 tests/TestCase.php create mode 100644 tests/Unit/ExampleTest.php create mode 100644 vite.config.js diff --git a/.bashrc b/.bashrc deleted file mode 100644 index ef058a3..0000000 --- a/.bashrc +++ /dev/null @@ -1 +0,0 @@ -export NODE_EXTRA_CA_CERTS=/etc/ca-bundle.crt. diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..8f0de65 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,18 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_size = 4 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +trim_trailing_whitespace = false + +[*.{yml,yaml}] +indent_size = 2 + +[docker-compose.yml] +indent_size = 4 diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..a10cf7c --- /dev/null +++ b/.env.example @@ -0,0 +1,65 @@ +APP_NAME=Laravel +APP_ENV=local +APP_KEY= +APP_DEBUG=true +APP_TIMEZONE=UTC +APP_URL=http://localhost +APP_TIMEZONE=Asia/Jerusalem + +APP_LOCALE=en +APP_FALLBACK_LOCALE=en +APP_FAKER_LOCALE=en_US + +APP_MAINTENANCE_DRIVER=file +APP_MAINTENANCE_STORE=database + +BCRYPT_ROUNDS=12 + +LOG_CHANNEL=stack +LOG_STACK=single +LOG_DEPRECATIONS_CHANNEL=null +LOG_LEVEL=debug + +# DB_CONNECTION=sqlite +# DB_HOST=127.0.0.1 +# DB_PORT=3306 +# DB_DATABASE=laravel +# DB_USERNAME=root +# DB_PASSWORD= + +SESSION_DRIVER=database +SESSION_LIFETIME=120 +SESSION_ENCRYPT=false +SESSION_PATH=/ +SESSION_DOMAIN=null + +BROADCAST_CONNECTION=log +FILESYSTEM_DISK=local +QUEUE_CONNECTION=database + +CACHE_STORE=database +CACHE_PREFIX= + +MEMCACHED_HOST=127.0.0.1 + +REDIS_CLIENT=phpredis +REDIS_HOST=127.0.0.1 +REDIS_PASSWORD=null +REDIS_PORT=6379 + +MAIL_MAILER=log +MAIL_HOST=127.0.0.1 +MAIL_PORT=2525 +MAIL_USERNAME=null +MAIL_PASSWORD=null +MAIL_ENCRYPTION=null +MAIL_FROM_ADDRESS="hello@example.com" +MAIL_FROM_NAME="${APP_NAME}" + +AWS_ACCESS_KEY_ID= +AWS_SECRET_ACCESS_KEY= +AWS_DEFAULT_REGION=us-east-1 +AWS_BUCKET= +AWS_USE_PATH_STYLE_ENDPOINT=false + +VITE_APP_NAME="${APP_NAME}" diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..fcb21d3 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,11 @@ +* text=auto eol=lf + +*.blade.php diff=html +*.css diff=css +*.html diff=html +*.md diff=markdown +*.php diff=php + +/.github export-ignore +CHANGELOG.md export-ignore +.styleci.yml export-ignore diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml new file mode 100644 index 0000000..4966132 --- /dev/null +++ b/.github/workflows/php-build-and-deploy.yml @@ -0,0 +1,55 @@ +name: ⚙️ Build and deploy to ACR + +on: + push: + branches: + - feature/deploy-to-web-app + +permissions: + contents: read + packages: write + +jobs: + build: + name: Docker Build + runs-on: ubuntu-latest + + steps: + - name: 📁 Checkout repository + uses: actions/checkout@v4 + + - name: 🔧 Docker QEMU Setup + uses: docker/setup-qemu-action@v3 + + - name: 🛠️ Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: 🗝️ Login to Container Registry + uses: azure/docker-login@v1 + with: + login-server: ${{ secrets.REGISTRY_LOGIN_SERVER }} + username: ${{ secrets.AZ_USERNAME }} + password: ${{ secrets.AZ_PASSWORD }} + + - name: 📃 Docker metadata + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/newspaceMali + flavor: | + latest=false + tags: | + type=raw,value=latest + type=semver,pattern=v{{version}} + type=semver,pattern=v{{major}}.{{minor}} + + - name: 🐳 Docker Build & Push + uses: docker/build-push-action@v5 + id: docker_build + with: + context: ./ + push: true + provenance: false + labels: ${{ steps.meta.outputs.labels }} + tags: ${{ steps.meta.outputs.tags }} + file: ./Dockerfile diff --git a/.github/workflows/terraform.yml b/.github/workflows/terraform.yml deleted file mode 100644 index 3a68cc9..0000000 --- a/.github/workflows/terraform.yml +++ /dev/null @@ -1,38 +0,0 @@ -name: '🌍 Terraform Automation' - -on: - workflow_dispatch: - inputs: - folderName: - description: "folder name" - required: true - -env: - TF_VAR_subscription_id: ${{secrets.SUBSCRIPTION_ID}} - ARM_SUBSCRIPTION_ID: ${{secrets.SUBSCRIPTION_ID}} - ARM_TENANT_ID: ${{secrets.AZURE_TENANT_ID}} - ARM_CLIENT_ID: ${{secrets.AZURE_CLIENT_ID}} - ARM_CLIENT_SECRET: ${{secrets.AZURE_CLIENT_SECRET}} - -jobs: - job1: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - - name: 🧩 HashiCorp - Setup Terraform - uses: hashicorp/setup-terraform@v2.0.0 - - - name: 🔑 Login to Azure - id: az-login - run: az login --service-principal -u $ARM_CLIENT_ID -p $ARM_CLIENT_SECRET --tenant $ARM_TENANT_ID - - - name: 🏗️ Terraform - id: init - run: | - DIRECTORIES=${{ github.event.inputs.folderName }} - cd ${DIRECTORIES} || exit 1 - terraform init -input=false - terraform plan -out=tfplan -input=false - terraform apply -input=false -auto-approve tfplan - cd .. diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7fe978f --- /dev/null +++ b/.gitignore @@ -0,0 +1,19 @@ +/.phpunit.cache +/node_modules +/public/build +/public/hot +/public/storage +/storage/*.key +/vendor +.env +.env.backup +.env.production +.phpunit.result.cache +Homestead.json +Homestead.yaml +auth.json +npm-debug.log +yarn-error.log +/.fleet +/.idea +/.vscode diff --git a/.htaccess b/.htaccess new file mode 100644 index 0000000..5e39499 --- /dev/null +++ b/.htaccess @@ -0,0 +1,6 @@ + + RewriteEngine on + RewriteCond %{REQUEST_URI} !^public + RewriteRule ^$ public/ [L] + RewriteRule ^(.*)$ public/$1 [L] + diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..0cac87b --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,17 @@ +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.4.0 + hooks: + - id: check-added-large-files + - id: check-json + - id: check-yaml + - id: end-of-file-fixer + - id: trailing-whitespace + args: + - --markdown-linebreak-ext=md + + - repo: https://github.com/digitalpulp/pre-commit-php.git + rev: 1.4.0 + hooks: + - id: php-lint + name: php lint diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..0d7c343 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,64 @@ +ARG php_version=8.3 + +FROM dunglas/frankenphp:1.1-php${php_version} AS base + +WORKDIR /laravel +SHELL ["/bin/bash", "-eou", "pipefail", "-c"] + +ENV SERVER_NAME=:80 +ARG user=laravel + +COPY ./ /laravel +COPY --from=composer:latest /usr/bin/composer /usr/bin/composer +COPY --chmod=755 /entrypoint.sh entrypoint.sh +COPY --chmod=755 /common common +COPY --chown=${user}:${user} /artisan artisan +COPY .env.example .env +COPY /php.ini "${PHP_INI_DIR}/php.ini" + +RUN apt-get update \ + && apt-get satisfy -y --no-install-recommends \ + "curl (>=7.88)" \ + "supervisor (>=4.2)" \ + "unzip (>=6.0)" \ + "vim-tiny (>=2)" \ + && apt-get install -y nodejs npm \ + && npm install -g npm@latest \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +RUN useradd \ + --uid 1000 \ + --shell /bin/bash \ + "${user}" \ + && setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/frankenphp \ + && chown -R "${user}:${user}" \ + /laravel \ + /data/caddy \ + /config/caddy \ + /var/{log,run} \ + && chmod -R a+rw \ + /var/{log,run} + +RUN install-php-extensions \ + bcmath \ + bz2 \ + curl \ + exif \ + gd \ + intl \ + pcntl \ + pdo_pgsql \ + opcache \ + redis \ + sockets \ + zip + +RUN composer install +RUN npm install + +USER ${user} + +RUN chmod -R a+rw storage + +ENTRYPOINT ["/laravel/entrypoint.sh"] \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..a22e237 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# newspace-scheduler diff --git a/app/Casts/Integer.php b/app/Casts/Integer.php new file mode 100644 index 0000000..a35374b --- /dev/null +++ b/app/Casts/Integer.php @@ -0,0 +1,29 @@ + $attributes + */ + public function get(Model $model, string $key, mixed $value, array $attributes): mixed + { + return (float) $value / 100; + } + + /** + * Prepare the given value for storage. + * + * @param array $attributes + */ + public function set(Model $model, string $key, mixed $value, array $attributes): mixed + { + return (int) ($value * 100); + } +} diff --git a/app/Enums/ConstraintType.php b/app/Enums/ConstraintType.php new file mode 100644 index 0000000..242f6b0 --- /dev/null +++ b/app/Enums/ConstraintType.php @@ -0,0 +1,61 @@ +value => 1, + self::NOT_THURSDAY_EVENING->value => 1, + self::NOT_WEEKEND->value => 1, + self::LOW_PRIORITY_NOT_WEEKEND->value => 2, + self::VACATION->value => 1, + self::MEDICAL->value => 1, + self::SCHOOL->value => 1, + self::NOT_TASK->value => 1, + self::LOW_PRIORITY_NOT_TASK->value => 2, + ]; + } + + public static function getLimit(): array + { + return [ + self::NOT_EVENING->value => 4, + self::NOT_THURSDAY_EVENING->value => 1, + self::NOT_WEEKEND->value => 1, + self::LOW_PRIORITY_NOT_WEEKEND->value => 1, + self::VACATION->value => 0, + self::MEDICAL->value => 0, + self::SCHOOL->value => 4, + self::NOT_TASK->value => 3, + self::LOW_PRIORITY_NOT_TASK->value => 3, + ]; + } + + public function getColor(): string|array|null + { + return match ($this) { + self::NOT_EVENING => '#FFCBCB', + self::NOT_THURSDAY_EVENING => '#FF9AFF', + self::NOT_WEEKEND => '#D7D7D7', + self::LOW_PRIORITY_NOT_WEEKEND => '#B0CEFF', + self::VACATION => '#B0F8FF', + self::MEDICAL => '#B0FFDD', + self::SCHOOL => '#BBFFB0', + self::NOT_TASK => '#E0FFB0', + self::LOW_PRIORITY_NOT_TASK => '#FFD6B0', + }; + } +} diff --git a/app/Enums/RecurrenceType.php b/app/Enums/RecurrenceType.php new file mode 100644 index 0000000..0fc2d09 --- /dev/null +++ b/app/Enums/RecurrenceType.php @@ -0,0 +1,17 @@ +name; + } +} diff --git a/app/Filament/Auth/Login.php b/app/Filament/Auth/Login.php new file mode 100644 index 0000000..4c8b590 --- /dev/null +++ b/app/Filament/Auth/Login.php @@ -0,0 +1,49 @@ +schema([ + TextInput::make('first_name') + ->label('First name') + ->required() + ->autofocus(), + TextInput::make('last_name') + ->label('Last name') + ->required(), + TextInput::make('password') + ->label('Personal number') + ->password() + ->revealable(filament()->arePasswordsRevealable()) + ->length(7) + ->rule('regex:/^\d{7}$/') + ->required(), + ]) + ->statePath('data'); + } + + protected function getCredentialsFromFormData(array $data): array + { + return [ + 'first_name' => $data['first_name'], + 'last_name' => $data['last_name'], + 'password' => $data['password'], + ]; + } + + protected function throwFailureValidationException(): never + { + throw ValidationException::withMessages([ + 'data.password' => __('filament-panels::pages/auth/login.messages.failed'), + ]); + } +} diff --git a/app/Filament/Clusters/Constraints.php b/app/Filament/Clusters/Constraints.php new file mode 100644 index 0000000..050a384 --- /dev/null +++ b/app/Filament/Clusters/Constraints.php @@ -0,0 +1,12 @@ +model::query(); + $eventsByRole = $this->getEventsByRole(); + $query = $eventsByRole($query); + + $query->where('start_date', '>=', $fetchInfo['start']) + ->where('end_date', '<=', $fetchInfo['end']); + + return $query->get() + ->map(function (Model $event) { + return [ + 'id' => $event[$this->keys[0]], + 'title' => $event[$this->keys[1]], + 'start' => $event[$this->keys[2]], + 'end' => $event[$this->keys[3]], + 'backgroundColor' => $event[$this->keys[4]], + 'borderColor' => $event[$this->keys[4]], + 'textColor' => 'black', + 'display' => 'block', + ]; + }) + ->toArray(); + } + + protected function getEventsByRole() + { + $current_user_id = auth()->user()->userable_id; + + $role = current(array: array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])); + + $tableName = strtolower(class_basename($this->model)).'s'; + + return ($this->type === 'my_soldiers') ? match ($role) { + 'manager' => fn (Builder $query) => $query->where('soldier_id', '!=', $current_user_id), + 'department-commander' => fn (Builder $query) => $query + ->join('soldiers', function ($join) { + $join->on('soldiers.id', '=', 'soldier_id') + ->orWhereNull('soldier_id'); + }) + ->join('teams', 'soldiers.team_id', '=', 'teams.id') + ->where('teams.department_id', '=', Department::where('commander_id', $current_user_id)->value('id')) + ->where(function ($q) use ($current_user_id) { + $q->where('soldier_id', '!=', $current_user_id) + ->orWhereNull('soldier_id'); + }) + ->groupBy("{$tableName}.id") + ->distinct("{$tableName}.id"), + 'team-commander' => fn (Builder $query) => $query + ->join('soldiers', function ($join) { + $join->on('soldiers.id', '=', 'soldier_id') + ->orWhereNull('soldier_id'); + }) + ->where('soldiers.team_id', '=', Team::where('commander_id', $current_user_id)->value('id')) + ->where(function ($q) use ($current_user_id) { + $q->where('soldier_id', '!=', $current_user_id) + ->orWhereNull('soldier_id'); + }) + ->groupBy("{$tableName}.id") + ->distinct("{$tableName}.id"), + } : fn (Builder $query) => $query->where('soldier_id', $current_user_id); + } + + public function getFormSchema(): array + { + return $this->model::getSchema(); + } + + protected function headerActions(): array + { + if ($this->type === 'my') { + if ($this->model === Constraint::class) { + return [ + CreateAction::make() + ->mountUsing( + function (Form $form, array $arguments) { + $form->fill([ + 'start_date' => $arguments['start'] ?? null, + 'end_date' => $arguments['end'] ?? null, + ]); + } + ), + ]; + } + } elseif ($this->model !== Shift::class) { + FilamentFullCalendarPlugin::get()->editable(false); + FilamentFullCalendarPlugin::get()->selectable(false); + + } + + return []; + } + + protected function modalActions(): array + { + if ($this->type === 'my' || ($this->type === 'my_soldiers' && $this->model === Shift::class)) { + return [ + EditAction::make() + ->fillForm(fn (Model $record, array $arguments): array => [ + ...$record->getAttributes(), + 'start_date' => $arguments['event']['start'] ?? $record->start_date, + 'end_date' => $arguments['event']['end'] ?? $record->end_date, + ]) + ->modalCloseButton(false) + ->modalCancelAction(false) + ->modalSubmitAction(false) + ->closeModalByClickingAway(false) + ->extraModalFooterActions(fn (Action $action): array => [ + $action->makeExtraModalAction('save', arguments: ['save' => true])->color('primary'), + $action->makeExtraModalAction('cancel', arguments: ['cancel' => true])->color('primary'), + ]) + ->action(function (array $data, array $arguments, Model $record): void { + if ($arguments['cancel'] ?? false) { + $this->refreshRecords(); + } + if ($arguments['save'] ?? false) { + $this->model::where('id', operator: $record['id'])->update([...$data]); + } + }), + DeleteAction::make(), + ]; + } else { + FilamentFullCalendarPlugin::get()->editable(false); + FilamentFullCalendarPlugin::get()->selectable(false); + + return []; + } + } +} diff --git a/app/Filters/NumberFilter.php b/app/Filters/NumberFilter.php new file mode 100644 index 0000000..762a677 --- /dev/null +++ b/app/Filters/NumberFilter.php @@ -0,0 +1,170 @@ +form([ + Forms\Components\Fieldset::make($this->getlabel()) + ->schema([ + Forms\Components\Select::make('range_condition') + ->hiddenLabel() + ->placeholder('Select condition') + ->live() + ->options([ + 'equal' => 'equal', + 'not_equal' => 'not_equal', + 'between' => 'between', + 'greater_than' => 'greater_than', + 'greater_than_equal' => 'greater_than_equal', + 'less_than' => 'less_than', + 'less_than_equal' => 'less_than_equal', + ]), + Forms\Components\TextInput::make('range_equal') + ->hiddenLabel() + ->numeric() + ->visible(fn (Get $get): bool => $get('range_condition') === 'equal'), + Forms\Components\TextInput::make('range_not_equal') + ->hiddenLabel() + ->numeric() + ->visible(fn (Get $get): bool => $get('range_condition') === 'not_equal'), + Forms\Components\Grid::make([ + 'default' => 1, + 'sm' => 2, + ]) + ->schema([ + Forms\Components\TextInput::make('range_between_from') + ->hiddenLabel() + ->numeric(), + Forms\Components\TextInput::make('range_between_to') + ->hiddenLabel() + ->numeric(), + ]) + ->visible(fn (Get $get): bool => $get('range_condition') === 'between'), + Forms\Components\TextInput::make('range_greater_than') + ->hiddenLabel() + ->numeric() + ->visible(fn (Get $get): bool => $get('range_condition') === 'greater_than'), + Forms\Components\TextInput::make('range_greater_than_equal') + ->hiddenLabel() + ->numeric() + ->visible(fn (Get $get): bool => $get('range_condition') === 'greater_than_equal'), + Forms\Components\TextInput::make('range_less_than') + ->hiddenLabel() + ->numeric() + ->visible(fn (Get $get): bool => $get('range_condition') === 'less_than'), + Forms\Components\TextInput::make('range_less_than_equal') + ->hiddenLabel() + ->numeric() + ->visible(fn (Get $get): bool => $get('range_condition') === 'less_than_equal'), + ]) + ->columns(1), + ]) + ->query(function (Builder $query, array $data): Builder { + return $query + ->when( + $data['range_equal'], + fn (Builder $query, $value): Builder => $query->where($this->getName(), '=', $value), + ) + ->when( + $data['range_not_equal'], + fn (Builder $query, $value): Builder => $query->where($this->getName(), '!=', $value), + ) + ->when( + $data['range_between_from'] && $data['range_between_to'], + function (Builder $query, $value) use ($data) { + $query->where($this->getName(), '>=', $data['range_between_from'])->where($this->getName(), '<=', $data['range_between_to']); + }, + ) + ->when( + $data['range_greater_than'], + fn (Builder $query, $value): Builder => $query->where($this->getName(), '>', $value), + ) + ->when( + $data['range_greater_than_equal'], + fn (Builder $query, $value): Builder => $query->where($this->getName(), '>=', $value), + ) + ->when( + $data['range_less_than'], + fn (Builder $query, $value): Builder => $query->where($this->getName(), '<', $value), + ) + ->when( + $data['range_less_than_equal'], + fn (Builder $query, $value): Builder => $query->where($this->getName(), '<=', $value), + ); + }) + ->indicateUsing(function (array $data): array { + $indicators = []; + + if ($data['range_between_from'] || $data['range_between_to']) { + $indicators[] = Indicator::make(__(':label is between :fromValue and :toValue', [ + 'label' => $this->getLabel(), + 'fromValue' => $data['range_between_from'], + 'toValue' => $data['range_between_to'], + ])) + ->removeField('range_between_from') + ->removeField('range_between_to'); + } + + if ($data['range_equal']) { + $indicators[] = Indicator::make(__(':label is equal to :value', [ + 'label' => $this->getLabel(), + 'value' => $data['range_equal'], + ])) + ->removeField('range_equal'); + } + + if ($data['range_not_equal']) { + $indicators[] = Indicator::make(__(':label is not equal to :value', [ + 'label' => $this->getLabel(), + 'value' => $data['range_not_equal'], + ])) + ->removeField('range_not_equal'); + } + + if ($data['range_greater_than']) { + $indicators[] = Indicator::make(__(':label is greater than :value', [ + 'label' => $this->getLabel(), + 'value' => $data['range_greater_than'], + ])) + ->removeField('range_greater_than'); + } + + if ($data['range_greater_than_equal']) { + $indicators[] = Indicator::make(__(':label is greater than or equal to :value', [ + 'label' => $this->getLabel(), + 'value' => $data['range_greater_than_equal'], + ])) + ->removeField('range_greater_than_equal'); + } + + if ($data['range_less_than']) { + $indicators[] = Indicator::make(__(':label is less than :value', [ + 'label' => $this->getLabel(), + 'value' => $data['range_less_than'], + ])) + ->removeField('range_less_than'); + } + + if ($data['range_less_than_equal']) { + $indicators[] = Indicator::make(__(':label is less than or equal to :value', [ + 'label' => $this->getLabel(), + 'value' => $data['range_less_than_equal'], + ])) + ->removeField('range_less_than_equal'); + } + + return $indicators; + }); + } +} diff --git a/app/Forms/Components/Flatpickr.php b/app/Forms/Components/Flatpickr.php new file mode 100644 index 0000000..6adc02c --- /dev/null +++ b/app/Forms/Components/Flatpickr.php @@ -0,0 +1,167 @@ + $this->dateFormat, + 'conjunction' => $this->conjunction, + 'minDate' => $this->minDate, + 'maxDate' => $this->maxDate, + ]; + } + + protected function setUp(): void + { + parent::setUp(); + $this->prefixIcon('heroicon-o-calendar-days'); + + if (! $this->dehydrateStateUsing) { + $this->dehydrateStateUsing(static function (Flatpickr $component, $state) { + return self::dehydratePickerState($component, $state); + }); + } + } + + public static function dehydratePickerState($component, $state) + { + if (blank($state)) { + return null; + } + if (! $state instanceof CarbonInterface) { + if ($component->isMultiplePicker()) { + $stateAsString = is_array($state) ? implode(', ', $state) : $state; + $range = \Str::of($stateAsString)->explode($component->getConjunction()); + $state = collect($range)->map(fn ($date) => Carbon::parse($date) + ->setTimezone(config('app.timezone'))->format($component->getDateFormat())) + ->toArray(); + } + } + + return $state; + } + + public function default(mixed $state): static + { + $this->defaultState = $state; + $this->hasDefaultState = true; + + return $this; + } + + public function getMode(): string + { + return $this->mode; + } + + public function getConjunction(): ?string + { + return $this->conjunction; + } + + public function conjunction(?string $conjunction): static + { + $this->conjunction = $conjunction; + + return $this; + } + + public function getMaxDate(): Carbon|string|null + { + return $this->maxDate; + } + + public function maxDate(Carbon|string|null|Closure $maxDate = 'now'): static + { + $this->maxDate = $maxDate ? Carbon::parse($maxDate) : $maxDate; + + return $this; + } + + public function getMinDate(): Carbon|string|null + { + return $this->minDate; + } + + public function minDate(Carbon|string|null|Closure $minDate): static + { + $this->minDate = $minDate ? Carbon::parse($minDate) : $minDate; + + return $this; + } + + public function range(bool $rangePicker = true): static + { + $this->rangePicker = $rangePicker; + + return $this; + } + + public function isRangePicker(): bool + { + return $this->rangePicker; + } + + public function multiple(bool $multiplePicker = true): static + { + $this->multiplePicker = $multiplePicker; + + return $this; + } + + public function isMultiplePicker(): bool + { + return $this->multiplePicker; + } + + public function dateFormat(string $dateFormat): static + { + $this->dateFormat = $dateFormat; + + return $this; + } + + public function getDateFormat(): ?string + { + return $this->dateFormat; + } + + public function getThemeAsset(): string + { + return asset('css/coolsam/flatpickr/flatpickr-them.css'); + } +} diff --git a/app/Models/Constraint.php b/app/Models/Constraint.php new file mode 100644 index 0000000..d0971d2 --- /dev/null +++ b/app/Models/Constraint.php @@ -0,0 +1,161 @@ + 'datetime:Y-m-d', + 'end_date' => 'datetime:Y-m-d', + ]; + + public function soldiers(): BelongsTo + { + return $this->belongsTo(Soldier::class); + } + + public static function getSchema(): array + { + return [ + Placeholder::make('') + ->content(content: fn (Constraint $constraint) => $constraint->soldier_name) + ->inlineLabel(), + Select::make('constraint_type') + ->required() + ->label('Constraint Name') + ->reactive() + ->live() + ->options(fn (Get $get) => self::availableOptions($get)) + ->afterStateUpdated(fn (callable $set, $state, Get $get) => self::updateDates($set, $state, $get)), + Hidden::make('start_date')->required(), + Hidden::make('end_date')->required(), + Grid::make() + ->visible(fn ($get) => in_array($get('constraint_type'), ['Medical', 'Vacation', 'School', 'Not task', 'Low priority not task'])) + ->schema([ + DateTimePicker::make('start_date')->required(), + DateTimePicker::make('end_date')->required(), + ]), + ]; + } + + private static function updateDates(callable $set, $state, Get $get): void + { + $dateRange = self::getDateForConstraint($state, $get); + $set('start_date', $dateRange['start_date']); + $set('end_date', $dateRange['end_date']); + } + + private static function availableOptions($get): array + { + $start_date = Carbon::parse($get('start_date')); + $options = array_combine(array_map(fn ($enum) => $enum->value, ConstraintType::cases()), array_map(fn ($enum) => $enum->value, ConstraintType::cases())); + + if ($start_date->isFriday() || $start_date->isSaturday()) { + unset($options[ConstraintType::NOT_THURSDAY_EVENING->value]); + } elseif ($start_date->isThursday()) { + } else { + unset($options[ConstraintType::NOT_THURSDAY_EVENING->value]); + unset($options[ConstraintType::NOT_WEEKEND->value]); + unset($options[ConstraintType::LOW_PRIORITY_NOT_WEEKEND->value]); + } + $usedCounts = self::getUsedCountsForCurrentMonth($get('start_date'), $get('end_date')); + $limits = ConstraintType::getLimit(); + + return array_filter($options, fn ($option) => ($limits[$option] ?? 0) === 0 || ($usedCounts[$option] ?? 0) < ($limits[$option] ?? 0)); + } + + private static function getUsedCountsForCurrentMonth($startDate, $endDate): array + { + $currentUserId = auth()->user()->userable_id; + + foreach (ConstraintType::cases() as $enum) { + $usedCount = DB::table('constraints') + ->where('soldier_id', $currentUserId) + ->where('constraint_type', $enum->value) + ->whereBetween('start_date', [ + Carbon::parse($startDate)->startOfMonth(), + Carbon::parse($endDate)->endOfMonth(), + ]) + ->count(); + $usedCounts[$enum->value] = $usedCount; + } + + return $usedCounts; + } + + private static function getDateForConstraint($constraintType, $get) + { + $startDate = Carbon::parse($get('start_date')); + $endDate = Carbon::parse($get('end_date')); + + return match ($constraintType) { + 'Not evening', 'Not Thursday evening' => [ + 'start_date' => $startDate->setTimeFromTimeString('18:00:00'), + 'end_date' => $endDate->setTimeFromTimeString('23:59:00'), + ], + 'Not weekend', 'Low priority not weekend' => [ + 'start_date' => $startDate->startOfWeek(Carbon::THURSDAY), + 'end_date' => $endDate->next(modifier: Carbon::SUNDAY)->startOfDay(), + ], + 'Medical', 'Vacation', 'School', 'Not task', 'Low priority not task' => [ + 'start_date' => $get('start_date'), + 'end_date' => $get('end_date'), + ], + }; + } + + protected static function booted() + { + static::creating(function ($constraint) { + $constraint->soldier_id = $constraint->soldier_id ?: ($constraint->getCurrentUserSoldier() ? $constraint->getCurrentUserSoldier()->id : null); + }); + } + + private function getCurrentUserSoldier(): ?Soldier + { + $user = auth()->user(); + if ($user && $user->userable instanceof Soldier) { + return $user->userable; + } + + return null; + } + + public function getSoldierNameAttribute() + { + $user_name = User::where('userable_id', $this->soldier_id)->get(['first_name', 'last_name']); + + return $user_name->first()?->first_name.' '.$user_name->first()?->last_name; + } + + public function getConstraintNameAttribute() + { + return $this->constraint_type.' - '.$this->soldier_name; + } + + public function getConstraintColorAttribute() + { + return ConstraintType::from($this->constraint_type)->getColor(); + } +} diff --git a/app/Models/Department.php b/app/Models/Department.php new file mode 100644 index 0000000..d9500a8 --- /dev/null +++ b/app/Models/Department.php @@ -0,0 +1,27 @@ +belongsTo(Soldier::class); + } + + public function teams(): HasMany + { + return $this->hasMany(Team::class); + } +} diff --git a/app/Models/Shift.php b/app/Models/Shift.php new file mode 100644 index 0000000..1d768c6 --- /dev/null +++ b/app/Models/Shift.php @@ -0,0 +1,52 @@ + 'datetime:Y-m-d', + 'end_date' => 'datetime:Y-m-d', + ]; + + public function task(): BelongsTo + { + return $this->belongsTo(Task::class); + } + + public function getTaskNameAttribute() + { + $user_name = User::where('userable_id', $this->soldier_id)->get(['first_name', 'last_name']); + + return $this->task?->name.' - '.$user_name->first()?->first_name.' '.$user_name->first()?->last_name; + } + + public function getTaskColorAttribute() + { + return $this->task?->color; + } + + public static function getSchema(): array + { + return [ + Placeholder::make('') + ->content(content: fn (Shift $shift) => $shift->task_name) + ->inlineLabel(), + DateTimePicker::make('start_date')->required(), + DateTimePicker::make('end_date')->required(), + ]; + } +} diff --git a/app/Models/Soldier.php b/app/Models/Soldier.php new file mode 100644 index 0000000..948193f --- /dev/null +++ b/app/Models/Soldier.php @@ -0,0 +1,83 @@ + 'boolean', + 'is_permanent' => 'boolean', + 'enlist_date' => 'datetime:Y-m-d', + 'has_exemption' => 'boolean', + 'is_trainee' => 'boolean', + 'is_mabat' => 'boolean', + 'capacity' => Integer::class, + 'capacity_hold' => Integer::class, + 'qualifications' => 'array', + 'is_reservist' => 'boolean', + 'reserve_dates' => 'array', + 'next_reserve_dates' => 'array', + ]; + + public function user(): MorphOne + { + return $this->morphOne(User::class, 'userable'); + } + + public function department(): HasOneThrough + { + return $this->hasOneThrough(Department::class, Team::class); + } + + public function department_commander(): HasOne + { + return $this->hasOne(Department::class); + } + + public function team_commander(): HasOne + { + return $this->hasOne(Team::class); + } + + public function constraints(): HasMany + { + return $this->hasMany(Constraint::class); + } + + public static function boot() + { + parent::boot(); + static::deleting(function ($record) { + $record->user()->delete(); + }); + } +} diff --git a/app/Models/Task.php b/app/Models/Task.php new file mode 100644 index 0000000..eeeb18c --- /dev/null +++ b/app/Models/Task.php @@ -0,0 +1,37 @@ + 'boolean', + 'parallel_weight' => Integer::class, + 'recurrence' => 'array', + 'duration' => Integer::class, + ]; + + public function shifts(): HasMany + { + return $this->hasMany(Shift::class); + } +} diff --git a/app/Models/Team.php b/app/Models/Team.php new file mode 100644 index 0000000..3711a99 --- /dev/null +++ b/app/Models/Team.php @@ -0,0 +1,32 @@ +belongsTo(Soldier::class); + } + + public function department(): BelongsTo + { + return $this->belongsTo(Department::class); + } + + public function soldiers(): HasMany + { + return $this->hasMany(Soldier::class); + } +} diff --git a/app/Models/User.php b/app/Models/User.php new file mode 100644 index 0000000..08e8f9b --- /dev/null +++ b/app/Models/User.php @@ -0,0 +1,53 @@ + 'hashed', + ]; + + public function userable(): MorphTo + { + return $this->morphTo(); + } + + public function displayName(): Attribute + { + return Attribute::get(fn () => $this->last_name.', '.$this->first_name); + } + + public function getFilamentName(): string + { + return $this->displayName; + } + + public function canAccessPanel(Panel $panel): bool + { + return true; + } +} diff --git a/app/Policies/DepartmentPolicy.php b/app/Policies/DepartmentPolicy.php new file mode 100644 index 0000000..677fd24 --- /dev/null +++ b/app/Policies/DepartmentPolicy.php @@ -0,0 +1,13 @@ +hasRole('manager'); + } +} diff --git a/app/Policies/SoldierPolicy.php b/app/Policies/SoldierPolicy.php new file mode 100644 index 0000000..0e5ab04 --- /dev/null +++ b/app/Policies/SoldierPolicy.php @@ -0,0 +1,13 @@ +hasRole(['manager', 'department-commander', 'team-commander']); + } +} diff --git a/app/Policies/TaskPolicy.php b/app/Policies/TaskPolicy.php new file mode 100644 index 0000000..ab5cf6c --- /dev/null +++ b/app/Policies/TaskPolicy.php @@ -0,0 +1,13 @@ +hasRole(['manager', 'department-commander', 'team-commander']); + } +} diff --git a/app/Policies/TeamPolicy.php b/app/Policies/TeamPolicy.php new file mode 100644 index 0000000..e396755 --- /dev/null +++ b/app/Policies/TeamPolicy.php @@ -0,0 +1,13 @@ +hasRole(['manager', 'department-commander']); + } +} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php new file mode 100644 index 0000000..dc43ef3 --- /dev/null +++ b/app/Providers/AppServiceProvider.php @@ -0,0 +1,22 @@ +id('app') + ->default() + ->authMiddleware([ + Authenticate::class, + ]) + ->databaseNotifications() + ->databaseNotificationsPolling('60s') + ->discoverResources(in: app_path('Resources'), for: 'App\\Resources') + ->discoverClusters(in: app_path('Filament/Clusters'), for: 'App\\Filament\\Clusters') + ->login(Login::class) + ->middleware([ + EncryptCookies::class, + AddQueuedCookiesToResponse::class, + StartSession::class, + AuthenticateSession::class, + ShareErrorsFromSession::class, + VerifyCsrfToken::class, + SubstituteBindings::class, + DisableBladeIconComponents::class, + DispatchServingFilamentEvent::class, + ]) + ->navigationGroups([]) + ->passwordReset() + ->path('/') + ->plugins([ + FilamentFullCalendarPlugin::make() + ->selectable() + ->editable() + ->timezone(config('app.timezone')) + ->locale(config('app.locale')) + ->plugins(['dayGrid', 'timeGrid']) + ->config([]), + ]) + ->pages([ + \App\Resources\ProfileResource\Pages\ListProfiles::class, + ]) + ->viteTheme('resources/css/app.css') + ->widgets([ + \App\Filament\Widgets\CalendarWidget::class, + ]); + } + + public function register(): void + { + parent::register(); + } + + public function boot() {} +} diff --git a/app/Resources/ConstraintResource.php b/app/Resources/ConstraintResource.php new file mode 100644 index 0000000..6ea32d6 --- /dev/null +++ b/app/Resources/ConstraintResource.php @@ -0,0 +1,44 @@ +user()->getRoleNames())->toArray(), ['soldier'])) ? true : false; + } + + public static function canCreate(): bool + { + return false; + } + + public static function table(Table $table): Table + { + return $table->paginated(false); + } + + public static function getPages(): array + { + return [ + 'index' => Pages\ListConstraints::route('/'), + ]; + } +} diff --git a/app/Resources/ConstraintResource/Pages/CreateConstraint.php b/app/Resources/ConstraintResource/Pages/CreateConstraint.php new file mode 100644 index 0000000..0a9673f --- /dev/null +++ b/app/Resources/ConstraintResource/Pages/CreateConstraint.php @@ -0,0 +1,11 @@ + Constraint::class, + 'keys' => collect([ + 'id', + 'constraint_name', + 'start_date', + 'end_date', + 'constraint_color', + ]), + 'type' => 'my_soldiers', + ]), + ]; + } +} diff --git a/app/Resources/DepartmentResource.php b/app/Resources/DepartmentResource.php new file mode 100644 index 0000000..cdc3423 --- /dev/null +++ b/app/Resources/DepartmentResource.php @@ -0,0 +1,99 @@ +schema([ + TextInput::make('name') + ->required(), + Select::make('commander_id') + ->relationship('commander', 'id') + ->options( + fn () => Cache::remember('users', 30 * 60, function () { + return User::all(); + })->mapWithKeys(function ($user) { + return [$user->userable_id => $user->displayName]; + }) + ) + ->searchable(), + ]); + } + + public static function table(Table $table): Table + { + return $table + ->columns([ + TextColumn::make('name') + ->searchable() + ->sortable(), + TextColumn::make('commander.user') + ->formatStateUsing(function ($state) { + return $state->last_name.', '.$state->first_name; + }) + ->label('Commander') + ->searchable() + ->sortable(), + ]) + ->modifyQueryUsing(function (Builder $query) { + if (request()->input('commander_id')) { + return $query->where('commander_id', request()->input('commander_id')); + } + if (request()->input('department_id')) { + return $query->where('id', request()->input('department_id')); + } + }) + ->filters([ + // + ]) + ->actions([ + ActionGroup::make([ + Action::make('teams') + ->label('Add team') + ->color('primary') + ->icon('heroicon-o-users') + ->url(fn (Department $record): string => route('filament.app.resources.teams.create', ['department_id' => $record->id])), + Action::make('View teams') + ->color('success') + ->icon('heroicon-o-users') + ->badge(fn ($record) => Team::where('department_id', $record->id)->count()) + ->url(fn (Department $record): string => route('filament.app.resources.teams.index', ['department_id' => $record->id])), + Tables\Actions\EditAction::make(), + Tables\Actions\DeleteAction::make(), + ]), + ]) + ->bulkActions([ + ]); + } + + public static function getPages(): array + { + return [ + 'index' => Pages\ListDepartments::route('/'), + 'create' => Pages\CreateDepartment::route('/create'), + ]; + } +} diff --git a/app/Resources/DepartmentResource/Pages/CreateDepartment.php b/app/Resources/DepartmentResource/Pages/CreateDepartment.php new file mode 100644 index 0000000..61f6c67 --- /dev/null +++ b/app/Resources/DepartmentResource/Pages/CreateDepartment.php @@ -0,0 +1,125 @@ +teams = Team::where('commander_id', $this->data['commander_id'])->get(); + $this->departments = Department::where('commander_id', $this->data['commander_id'])->get(); + if ($this->teams->isNotEmpty() || $this->departments->isNotEmpty()) { + Notification::make() + ->title('Save department') + ->persistent() + ->body('The commander you selected is already registered as a commander. His selection will leave the '.($this->teams->isNotEmpty() ? 'team' : 'department').' without a commander. Are you sure?') + ->actions([ + Action::make('view '.($this->teams->isNotEmpty() ? 'team' : 'department')) + ->button() + ->url( + fn () => $this->teams->isNotEmpty() ? + route('filament.app.resources.teams.index', ['commander_id' => $this->data['commander_id']]) : + route('filament.app.resources.departments.index', ['commander_id' => $this->data['commander_id']]) + + ), + Action::make('confirm') + ->button() + ->emit('confirmCreate'), + Action::make('cancel') + ->button() + ->close(), + ]) + ->send(); + $this->halt(); + } + } + + public function confirmCreate(): void + { + try { + if ($this->teams->isNotEmpty()) { + $this->updateRole(); + $this->unAssignTeamCommander(); + } + if ($this->departments->isNotEmpty()) { + $this->unAssignDepartmentCommander(); + } + $this->beginDatabaseTransaction(); + $data = $this->form->getState(); + $this->record = $this->handleRecordCreation($data); + $this->form->model($this->getRecord())->saveRelationships(); + $this->callHook('afterCreate'); + $this->commitDatabaseTransaction(); + $this->rememberData(); + $this->getCreatedNotification()?->send(); + $redirectUrl = $this->getRedirectUrl(); + $this->redirect($redirectUrl); + } catch (Halt $exception) { + $exception->shouldRollbackDatabaseTransaction() ? + $this->rollBackDatabaseTransaction() : + $this->commitDatabaseTransaction(); + + return; + } catch (Throwable $exception) { + $this->rollBackDatabaseTransaction(); + throw $exception; + } + } + + protected function updateRole(): void + { + $user = User::where('userable_id', $this->data['commander_id'])->first(); + $user->assignRole('department-commander'); + } + + protected function unAssignTeamCommander(): void + { + Team::where('commander_id', $this->data['commander_id']) + ->update(['commander_id' => null]); + } + + protected function unAssignDepartmentCommander(): void + { + Department::where('commander_id', $this->data['commander_id']) + ->update(['commander_id' => null]); + } + + protected $listeners = [ + 'confirmCreate' => 'confirmCreate', + ]; + + protected function getRedirectUrl(): string + { + $resource = static::getResource(); + + return $resource::getUrl('index'); + } + + protected function afterCreate() + { + $this->assignRoles(); + } + + protected function assignRoles() + { + $user = User::where('userable_id', $this->record->commander_id)->first(); + $user->assignRole('department-commander'); + } +} diff --git a/app/Resources/DepartmentResource/Pages/EditDepartment.php b/app/Resources/DepartmentResource/Pages/EditDepartment.php new file mode 100644 index 0000000..1a0122b --- /dev/null +++ b/app/Resources/DepartmentResource/Pages/EditDepartment.php @@ -0,0 +1,19 @@ +paginated(false); + } + + public static function getPages(): array + { + return [ + 'index' => Pages\ListMyConstraints::route('/'), + ]; + } +} diff --git a/app/Resources/MyConstraintResource/Pages/CreateMyConstraint.php b/app/Resources/MyConstraintResource/Pages/CreateMyConstraint.php new file mode 100644 index 0000000..b151712 --- /dev/null +++ b/app/Resources/MyConstraintResource/Pages/CreateMyConstraint.php @@ -0,0 +1,11 @@ + Constraint::class, + 'keys' => collect([ + 'id', + 'constraint_name', + 'start_date', + 'end_date', + 'constraint_color', + ]), + 'type' => 'my', + ]), + ]; + } +} diff --git a/app/Resources/MyShiftResource.php b/app/Resources/MyShiftResource.php new file mode 100644 index 0000000..46ddd94 --- /dev/null +++ b/app/Resources/MyShiftResource.php @@ -0,0 +1,36 @@ +paginated(false); + } + + public static function getPages(): array + { + return [ + 'index' => Pages\ListMyShift::route('/'), + 'create' => Pages\CreateMyShift::route('/create'), + 'edit' => Pages\EditMyShift::route('/{record}/edit'), + ]; + } +} diff --git a/app/Resources/MyShiftResource/Pages/CreateMyShift.php b/app/Resources/MyShiftResource/Pages/CreateMyShift.php new file mode 100644 index 0000000..6eda11e --- /dev/null +++ b/app/Resources/MyShiftResource/Pages/CreateMyShift.php @@ -0,0 +1,11 @@ + Shift::class, + 'keys' => collect([ + 'id', + 'task_name', + 'start_date', + 'end_date', + 'task_color', + ]), + 'type' => 'my', + ]), + ]; + } +} diff --git a/app/Resources/ProfileResource.php b/app/Resources/ProfileResource.php new file mode 100644 index 0000000..ec3384a --- /dev/null +++ b/app/Resources/ProfileResource.php @@ -0,0 +1,114 @@ +schema([ + Fieldset::make('') + ->schema([ + Fieldset::make('Personal Information') + ->relationship('user') + ->schema([ + TextInput::make('first_name') + ->required(), + TextInput::make('last_name') + ->required(), + ]), + Checkbox::make('is_permanent'), + DatePicker::make('enlist_date') + ->seconds(false), + Checkbox::make('has_exemption'), + Checkbox::make('is_trainee'), + Checkbox::make('is_mabat'), + Select::make('qualifications') + ->placeholder('select qualification') + ->options(Task::all()->pluck('name', 'name')), + ]), + + ]); + + } + + public static function table(Table $table): Table + { + + return $table + ->columns([ + split::make([ + Stack::make([ + TextColumn::make('user.first_name')->description('First name', position: 'above')->size(TextColumn\TextColumnSize::Large), + TextColumn::make('user.last_name')->description('Last name', position: 'above')->size(TextColumn\TextColumnSize::Large), + TextColumn::make('enlist_date')->description('Enlist date', position: 'above')->size(TextColumn\TextColumnSize::Large), + ]), + Stack::make([ + TextColumn::make('course')->description('Course', position: 'above')->size(TextColumn\TextColumnSize::Large), + TextColumn::make('max_shift')->description('Max shift', position: 'above')->size(TextColumn\TextColumnSize::Large), + TextColumn::make('max_night')->description('Max night', position: 'above')->size(TextColumn\TextColumnSize::Large), + TextColumn::make('max_weekend')->description('Max weekend', position: 'above')->size(TextColumn\TextColumnSize::Large), + ]), + Stack::make([ + TextColumn::make('capacity')->description('Capacity', position: 'above')->size(TextColumn\TextColumnSize::Large), + TextColumn::make('capacity_hold')->description('Capacity hold', position: 'above')->size(TextColumn\TextColumnSize::Large), + TextColumn::make('qualifications')->description('Qualifications', position: 'above')->size(TextColumn\TextColumnSize::Large), + ]), + ]), + ]) + ->searchable(false) + ->paginated(false) + ->filters([ + ]) + ->actions([ + Tables\Actions\EditAction::make(), + ]); + } + + public static function getEloquentQuery(): Builder + { + return Soldier::query()->where('id', auth()->user()->userable->id); + } + + public static function getPages(): array + { + return [ + 'index' => Pages\ListProfiles::route('/'), + 'edit' => Pages\EditProfile::route('/{record}/edit'), + ]; + } + + public static function canViewAny(): bool + { + return true; + } +} diff --git a/app/Resources/ProfileResource/Pages/CreateProfile.php b/app/Resources/ProfileResource/Pages/CreateProfile.php new file mode 100644 index 0000000..8c3201e --- /dev/null +++ b/app/Resources/ProfileResource/Pages/CreateProfile.php @@ -0,0 +1,11 @@ +getResource()::getUrl('index'); + } +} diff --git a/app/Resources/ProfileResource/Pages/ListProfiles.php b/app/Resources/ProfileResource/Pages/ListProfiles.php new file mode 100644 index 0000000..b8dacd1 --- /dev/null +++ b/app/Resources/ProfileResource/Pages/ListProfiles.php @@ -0,0 +1,23 @@ +user()->getRoleNames())->toArray(), ['soldier'])) ? true : false; + } + + public static function canCreate(): bool + { + return false; + } + + public static function table(Table $table): Table + { + return $table->paginated(false); + } + + public static function getPages(): array + { + return [ + 'index' => Pages\ListShifts::route('/'), + ]; + } +} diff --git a/app/Resources/ShiftResource/Pages/CreateShift.php b/app/Resources/ShiftResource/Pages/CreateShift.php new file mode 100644 index 0000000..e1085c7 --- /dev/null +++ b/app/Resources/ShiftResource/Pages/CreateShift.php @@ -0,0 +1,11 @@ + Shift::class, + 'keys' => collect([ + 'id', + 'task_name', + 'start_date', + 'end_date', + 'task_color', + ]), + 'type' => 'my_soldiers', + ]), + ]; + } +} diff --git a/app/Resources/SoldierResource.php b/app/Resources/SoldierResource.php new file mode 100644 index 0000000..4d4282f --- /dev/null +++ b/app/Resources/SoldierResource.php @@ -0,0 +1,301 @@ +schema([ + Section::make()->schema([SoldierResource::personalDetails()])->columns(), + Section::make()->schema(SoldierResource::soldierDetails())->columns(), + Section::make()->schema(SoldierResource::reserveDays())->columns()->visible(fn (Get $get) => $get('is_reservist')), + Section::make()->schema(SoldierResource::constraints())->columns(), + ]); + } + + public static function table(Table $table): Table + { + return $table + + ->columns([ + TextColumn::make('user.first_name') + ->label('Name') + ->formatStateUsing(function ($record) { + return $record->user->last_name.' '.$record->user->first_name; + }) + ->searchable(['user->first_name', 'user->last_name']) + ->sortable(), + BadgeColumn::make('gender') + ->formatStateUsing(fn ($state) => $state ? 'Male' : 'Female') + ->badge() + ->color(fn ($state) => $state ? 'primary' : 'info') + ->sortable(), + BooleanColumn::make('is_reservist'), + TextColumn::make('reserve_dates')->listWithLineBreaks()->limitList(1)->expandableLimitedList()->placeholder('---')->toggleable(), + TextColumn::make('next_reserve_dates')->listWithLineBreaks()->limitList(1)->expandableLimitedList()->placeholder('---')->toggleable(), + TextColumn::make('enlist_date')->sortable()->date()->toggleable(), + TextColumn::make('course')->toggleable(isToggledHiddenByDefault: true), + BooleanColumn::make('has_exemption')->toggleable(isToggledHiddenByDefault: true), + TextColumn::make('max_shift')->toggleable(isToggledHiddenByDefault: true), + TextColumn::make('max_night')->toggleable(isToggledHiddenByDefault: true), + TextColumn::make('max_weekend')->toggleable(isToggledHiddenByDefault: true), + TextColumn::make('capacity')->toggleable(isToggledHiddenByDefault: true), + TextColumn::make('capacity_hold')->numeric()->toggleable(), + BooleanColumn::make('is_trainee')->toggleable(isToggledHiddenByDefault: true), + BooleanColumn::make('is_mabat')->toggleable(isToggledHiddenByDefault: true), + TextColumn::make('qualifications') + ->placeholder('no qualifications')->toggleable(), + ]) + ->modifyQueryUsing(function (Builder $query) { + if (request()->input('team_id')) { + return $query->where('team_id', request()->input('team_id')); + } + }) + ->toggleColumnsTriggerAction( + fn (Action $action) => $action + ->button() + ->label('Toggle'), + ) + ->filters([ + NumberFilter::make('course'), + NumberFilter::make('max_shift'), + NumberFilter::make('max_night'), + NumberFilter::make('max_weekend'), + NumberFilter::make('capacity'), + NumberFilter::make('capacity_hold'), + SelectFilter::make('gender') + ->options([ + true => 'Male', + false => 'Female', + ]) + ->default(null), + SelectFilter::make('qualifications') + ->multiple() + ->searchable() + ->options(Task::all()->pluck('name', 'name')) + ->query(function (Builder $query, array $data) { + return collect($data['values'])->map(fn ($qualification) => $query->whereJsonContains('qualifications', $qualification)); + }) + ->default(null), + Filter::make('reservist') + ->query(fn (Builder $query): Builder => $query->where('is_reservist', 1)) + ->toggle(), + Filter::make('is_mabat') + ->query(fn (Builder $query): Builder => $query->where('is_mabat', true)) + ->toggle(), + Filter::make('has_exemption') + ->query(fn (Builder $query): Builder => $query->where('has_exemption', true)) + ->toggle(), + Filter::make('is_trainee') + ->query(fn (Builder $query): Builder => $query->where('is_trainee', true)) + ->toggle(), + Filter::make('enlist_date') + ->form([ + Fieldset::make('Enlist date') + ->schema([ + DatePicker::make('recruitment_from'), + DatePicker::make('recruitment_until'), + ]), + ]) + ->query(function (Builder $query, array $data): Builder { + return $query + ->when( + $data['recruitment_from'], + fn (Builder $query, $date): Builder => $query->whereDate('enlist_date', '>=', $date), + ) + ->when( + $data['recruitment_until'], + fn (Builder $query, $date): Builder => $query->whereDate('enlist_date', '<=', $date), + ); + }), + + ], layout: \Filament\Tables\Enums\FiltersLayout::Modal) + ->filtersFormColumns(4) + ->deferFilters() + ->filtersTriggerAction( + fn (Action $action) => $action + ->button() + ->label('Filter') + ) + ->actions([ + ActionGroup::make([ + EditAction::make(), + DeleteAction::make(), + Action::make('update reserve days') + ->icon('heroicon-o-pencil') + ->color('primary') + ->form(function ($record) { + return [ + Flatpickr::make('next_reserve_dates') + ->multiple() + ->default($record->next_reserve_dates) + ->minDate(now()->addMonth()->startOfMonth()) + ->maxDate(now()->addMonth()->endOfMonth()) + ->required(), + ]; + }) + ->action(function (Soldier $record, array $data): void { + $record->next_reserve_dates = $data['next_reserve_dates']; + $record->save(); + }) + ->closeModalByClickingAway(false) + ->hidden(fn ($record) => ! $record->is_reservist), + ReplicateAction::make() + ->icon('heroicon-o-document-duplicate') + ->color('success') + ->after(function (Soldier $replica): void { + redirect()->route('filament.app.resources.soldiers.edit', ['record' => $replica->id]); + }) + ->successNotification(null) + ->closeModalByClickingAway(false), + ]), + ]) + ->bulkActions([ + BulkActionGroup::make([ + DeleteBulkAction::make(), + ]), + ]); + } + + public static function getEloquentQuery(): Builder + { + if (auth()->user()->hasRole('manager')) { + return parent::getEloquentQuery()->where('id', '!=', User::where('userable_id', auth()->user()->id)->value('userable_id')); + } + + return parent::getEloquentQuery()->where('team_id', Team::select('id')->where('commander_id', auth()->user()->userable_id)) + ->orWhere('team_id', Team::select('id')->where('department_id', Department::select('id')->where('commander_id', auth()->user()->userable_id))); + } + + public static function getPages(): array + { + return [ + 'index' => Pages\ListSoldiers::route('/'), + 'create' => Pages\CreateSoldier::route('/create'), + 'edit' => Pages\EditSoldier::route('/{record}/edit'), + ]; + } + + public static function personalDetails(): Fieldset + { + return Fieldset::make('') + ->relationship('user') + ->schema([ + TextInput::make('first_name') + ->required(), + TextInput::make('last_name') + ->required(), + TextInput::make('password') + ->password() + ->revealable() + ->length(7) + ->required(), + ])->columns(3); + } + + public static function soldierDetails(): array + { + return [ + ToggleButtons::make('gender') + ->options([ + 1 => 'Male', + 0 => 'Female', + ]) + ->grouped() + ->required(), + DatePicker::make('enlist_date') + ->seconds(false), + TextInput::make('course') + ->numeric() + ->minValue(0), + Select::make('capacity') + ->placeholder('select an option') + ->options(fn (): array => collect(range(0, 12))->mapWithKeys(fn ($number) => [(string) ($number / 4) => (string) ($number / 4)])->toArray()) + ->required(), + Hidden::make('capacity_hold') + ->default(0), + Section::make([ + Toggle::make('is_reservist') + ->live(), + Toggle::make('is_permanent'), + Toggle::make('has_exemption'), + ])->columns(3), + ]; + } + + public static function reserveDays(): array + { + return [ + Flatpickr::make('reserve_dates') + ->multiple() + ->minDate(today()) + ->maxDate(today()->endOfMonth()) + ->columnSpan('full'), + ]; + } + + public static function constraints(): array + { + return [ + Section::make([ + TextInput::make('max_shift')->numeric()->minValue(0), + TextInput::make('max_night')->numeric()->minValue(0)->maxValue(31), + TextInput::make('max_weekend')->default('')->numeric()->minValue(0)->maxValue(5), + ]) + ->columns(3), + Split::make([ + Section::make([ + Toggle::make('is_trainee'), + Toggle::make('is_mabat'), + ]) + ->columns(2), + Select::make('qualifications') + ->multiple() + ->placeholder('select an option') + ->options(Task::all()->pluck('name', 'name')), ])->columns(2) + ->columnSpan('full'), + ]; + + } +} diff --git a/app/Resources/SoldierResource/Pages/CreateSoldier.php b/app/Resources/SoldierResource/Pages/CreateSoldier.php new file mode 100644 index 0000000..8078ef2 --- /dev/null +++ b/app/Resources/SoldierResource/Pages/CreateSoldier.php @@ -0,0 +1,71 @@ +where('last_name', $this->data['user']['last_name']) + ->where('first_name', $this->data['user']['first_name']) + ->pluck('last_name', 'first_name'); + + if ($userName = $userName->get($this->data['user']['first_name']) == $this->data['user']['last_name']) { + Notification::make() + ->warning() + ->title('This name already exists in the system!') + ->body('Add an identifier to the name so that it is not the same as another name. + For example: '.$this->data['user']['first_name'].' '.$this->data['user']['last_name'].'2') + ->persistent() + ->send(); + + $this->halt(); + } + } + + protected function afterCreate() + { + $user = $this->record->user; + $user->assignRole('soldier'); + } + + protected function getRedirectUrl(): string + { + return $this->getResource()::getUrl('index'); + } + + public static function getSteps(): array + { + return [ + Step::make('Personal Information') + ->schema([SoldierResource::personalDetails()]), + Step::make('Soldier details') + ->schema([ + Section::make()->schema(SoldierResource::soldierDetails())->columns(), + ]), + Step::make('Reserve days') + ->visible(fn (Get $get) => $get('is_reservist')) + ->schema([ + Section::make()->schema(SoldierResource::reserveDays())->columns(), + ]), + Step::make('Additional settings') + ->schema([ + Section::make()->schema(SoldierResource::constraints())->columns(), + ]), + ]; + } +} diff --git a/app/Resources/SoldierResource/Pages/EditSoldier.php b/app/Resources/SoldierResource/Pages/EditSoldier.php new file mode 100644 index 0000000..44223a5 --- /dev/null +++ b/app/Resources/SoldierResource/Pages/EditSoldier.php @@ -0,0 +1,26 @@ +getResource()::getUrl('index'); + } +} diff --git a/app/Resources/SoldierResource/Pages/ListSoldiers.php b/app/Resources/SoldierResource/Pages/ListSoldiers.php new file mode 100644 index 0000000..d766ca6 --- /dev/null +++ b/app/Resources/SoldierResource/Pages/ListSoldiers.php @@ -0,0 +1,19 @@ +schema([ + Wizard::make(CreateTask::getSteps()), + ]); + } + + public static function table(Table $table): Table + { + return $table + ->columns([ + Split::make([ + Tables\Columns\TextColumn::make('name') + ->description('Name', position: 'above') + ->size(TextColumn\TextColumnSize::Large), + Tables\Columns\TextColumn::make('type') + ->description('Type', position: 'above') + ->size(TextColumn\TextColumnSize::Large), + Tables\Columns\TextColumn::make('parallel_weight') + ->description('Parallel Weight', position: 'above') + ->size(TextColumn\TextColumnSize::Large), + Tables\Columns\ColorColumn::make('color') + ->copyable() + ->copyMessage('Color code copied'), + ]), + Panel::make([ + Stack::make([ + Tables\Columns\TextColumn::make('start_hour') + ->description('Start at', position: 'above') + ->size(TextColumn\TextColumnSize::Large), + Tables\Columns\TextColumn::make('duration') + ->description('Duration', position: 'above') + ->size(TextColumn\TextColumnSize::Large), + Tables\Columns\TextColumn::make('is_alert') + ->description('Alert', position: 'above') + ->size(TextColumn\TextColumnSize::Large) + ->formatStateUsing(fn ($state) => $state ? 'Yes' : 'No'), + Tables\Columns\TextColumn::make('department_name') + ->description('Department', position: 'above') + ->size(TextColumn\TextColumnSize::Large), + ]) + ->space(2) + ->extraAttributes(['style' => 'display: flex; flex-direction: row; flex-wrap: wrap; justify-content: space-between; align-items: center;']), + Stack::make([ + Tables\Columns\TextColumn::make('recurrence.type') + ->description('Recurrence type', position: 'above') + ->size(TextColumn\TextColumnSize::Large), + Tables\Columns\TextColumn::make('recurrence.days_in_week') + ->description('Days in week', position: 'above') + ->size(TextColumn\TextColumnSize::Large), + Tables\Columns\TextColumn::make('recurrence.dates_in_month') + ->description('Dates in month', position: 'above') + ->size(TextColumn\TextColumnSize::Large), + Tables\Columns\TextColumn::make('recurrence.start_date') + ->description('StartDate', position: 'above') + ->size(TextColumn\TextColumnSize::Large), + Tables\Columns\TextColumn::make('recurrence.end_date') + ->description('EndDate', position: 'above') + ->size(TextColumn\TextColumnSize::Large), + ]) + ->space(2) + ->extraAttributes(['style' => 'display: flex; flex-direction: row; flex-wrap: wrap; justify-content: center; align-items: center; border: 1px solid #e7e7e7;']), + ])->collapsible(), + + ]) + ->filters([ + ]) + ->actions([ + Tables\Actions\EditAction::make(), + Tables\Actions\DeleteAction::make(), + ]) + ->bulkActions([ + Tables\Actions\BulkActionGroup::make([ + Tables\Actions\DeleteBulkAction::make(), + ]), + ]); + } + + public static function getPages(): array + { + return [ + 'index' => Pages\ListTasks::route('/'), + 'create' => Pages\CreateTask::route('/create'), + ]; + } +} diff --git a/app/Resources/TaskResource/Pages/CreateTask.php b/app/Resources/TaskResource/Pages/CreateTask.php new file mode 100644 index 0000000..ab8451f --- /dev/null +++ b/app/Resources/TaskResource/Pages/CreateTask.php @@ -0,0 +1,98 @@ +first(); + $reccurenceEvents = new ReccurenceEvents; + $reccurenceEvents->oneTimeTask($task); + } + + public static function getSteps(): array + { + return [ + Step::make('Details') + ->schema([ + TextInput::make('name') + ->required(), + Forms\Components\TimePicker::make('start_hour') + ->seconds(false) + ->required(), + TextInput::make('duration') + ->required(), + Select::make('parallel_weight') + ->options(fn (): array => collect(range(0, 12))->mapWithKeys(fn ($number) => [(string) ($number / 4) => (string) ($number / 4)])->toArray()) + ->required(), + TextInput::make('type') + ->required(), + ColorPicker::make('color') + ->required(), + Checkbox::make('is_alert'), + Select::make('department_name') + ->options(Department::all()->mapWithKeys(function ($department) { + return [$department->name => $department->name]; + })), + ]), + Step::make('Recurrence') + ->schema([ + Select::make('recurrence.type') + ->options(RecurrenceType::class) + ->live() + ->required(), + Select::make('recurrence.days_in_week') + ->multiple() + ->options( + [ + 'Sunday' => 'Sunday', + 'Monday' => 'Monday', + 'Tuesday' => 'Tuesday', + 'Wednesday' => 'Wednesday', + 'Thursday' => 'Thursday', + 'Friday' => 'Friday', + 'Saturday' => 'Saturday', + ] + ) + ->visible(fn (Get $get): bool => $get('recurrence.type') === 'Weekly') + ->default(null) + ->required(), + Select::make('recurrence.dates_in_month') + ->label(fn (Get $get) => $get('recurrence.type') === 'Monthly' ? 'Date' : 'Dates') + ->placeholder('Select from dates') + ->multiple(fn (Get $get): bool => $get('recurrence.type') === 'Custom') + ->options(array_combine(range(1, 31), range(1, 31))) + ->visible(fn (Get $get): bool => $get('recurrence.type') === 'Monthly' || $get('recurrence.type') === 'Custom') + ->default(null) + ->required(), + Fieldset::make('Dates') + ->schema([ + DatePicker::make('recurrence.start_date'), + DatePicker::make('recurrence.end_date'), + ])->visible(fn (Get $get): bool => $get('recurrence.type') === 'OneTime'), + ]), + ]; + } +} diff --git a/app/Resources/TaskResource/Pages/EditTask.php b/app/Resources/TaskResource/Pages/EditTask.php new file mode 100644 index 0000000..257f012 --- /dev/null +++ b/app/Resources/TaskResource/Pages/EditTask.php @@ -0,0 +1,19 @@ +schema([ + TextInput::make('name') + ->required(), + Select::make('commander_id') + ->relationship('commander') + ->options( + fn () => Cache::remember('users', 30 * 60, function () { + return User::all(); + })->mapWithKeys(function ($user) { + return [$user->userable_id => $user->displayName]; + }) + ) + ->searchable() + ->required(), + Select::make('department_id') + ->relationship('department') + ->options(Department::all()->pluck('name', 'id')) + ->searchable() + ->default(request()->input('department_id')) + ->required(), + Select::make('members') + ->options( + fn () => Cache::remember('users', 30 * 60, function () { + return User::all(); + })->mapWithKeys(function ($user) { + return [$user->userable_id => $user->displayName]; + }) + ) + ->multiple() + ->searchable(), + ]); + } + + public static function table(Table $table): Table + { + return $table + ->columns([ + TextColumn::make('name') + ->searchable() + ->sortable(), + TextColumn::make('commander.user') + ->formatStateUsing(function ($state) { + return $state->last_name.', '.$state->first_name; + }) + ->label('Commander') + ->searchable() + ->sortable(), + TextColumn::make('department.name') + ->url(fn (Team $record): string => route('filament.app.resources.departments.index', ['department_id' => $record->department_id])) + ->searchable() + ->sortable(), + ]) + ->modifyQueryUsing(function (Builder $query) { + if (request()->input('commander_id')) { + return $query->where('commander_id', request()->input('commander_id')); + } + if (request()->input('department_id')) { + return $query->where('department_id', request()->input('department_id')); + } + }) + ->filters([ + // + ]) + ->actions([ + ActionGroup::make([ + Action::make('members') + ->label('Add member') + ->color('primary') + ->icon('heroicon-o-user-plus') + ->form([ + Select::make('members') + ->options( + fn (Team $record) => Cache::remember('users', 30 * 60, function () { + return User::all(); + }) + ->filter(function ($user) use ($record) { + $soldier_team_id = Soldier::where('id', $user->userable_id)->pluck('team_id'); + + return $soldier_team_id->first() !== $record->id; + }) + ->mapWithKeys(function ($user) { + return [$user->userable_id => $user->displayName]; + }) + ) + ->multiple() + ->searchable(), + ]) + ->action(function (array $data, Team $record): void { + collect($data['members'])->map(fn ($soldier_id) => Soldier::where('id', $soldier_id) + ->update(['team_id' => $record->id])); + }), + Action::make('View members') + ->color('success') + ->icon('heroicon-o-user-group') + ->badge(fn ($record) => Soldier::where('team_id', $record->id)->count()) + ->url(fn (Team $record): string => route('filament.app.resources.soldiers.index', ['team_id' => $record->id])), + Tables\Actions\EditAction::make(), + Tables\Actions\DeleteAction::make(), + ]), + ]) + ->bulkActions([ + ]); + } + + public static function getEloquentQuery(): Builder + { + if (auth()->user()->hasRole('manager')) { + return parent::getEloquentQuery(); + } + + return parent::getEloquentQuery()->where('department_id', Department::select('id')->where('commander_id', auth()->user()->userable_id)); + } + + public static function getPages(): array + { + return [ + 'index' => Pages\ListTeams::route('/'), + 'create' => Pages\CreateTeam::route('/create'), + ]; + } +} diff --git a/app/Resources/TeamResource/Pages/CreateTeam.php b/app/Resources/TeamResource/Pages/CreateTeam.php new file mode 100644 index 0000000..566bce3 --- /dev/null +++ b/app/Resources/TeamResource/Pages/CreateTeam.php @@ -0,0 +1,127 @@ +teams = Team::where('commander_id', $this->data['commander_id'])->get(); + $this->departments = Department::where('commander_id', $this->data['commander_id'])->get(); + if ($this->teams->isNotEmpty() || $this->departments->isNotEmpty()) { + Notification::make() + ->title('Save team') + ->persistent() + ->body('The commander you selected is already registered as a commander. His selection will leave the '.($this->teams->isNotEmpty() ? 'team' : 'department').' without a commander. Are you sure?') + ->actions([ + Action::make('view '.($this->teams->isNotEmpty() ? 'team' : 'department')) + ->button() + ->url( + fn () => $this->teams->isNotEmpty() ? + route('filament.app.resources.teams.index', ['commander_id' => $this->data['commander_id']]) : + route('filament.app.resources.departments.index', ['commander_id' => $this->data['commander_id']]) + + ), + Action::make('confirm') + ->button() + ->emit('confirmCreate'), + Action::make('cancel') + ->button() + ->close(), + ]) + ->send(); + $this->halt(); + } + } + + public function confirmCreate(): void + { + try { + if ($this->teams->isNotEmpty()) { + Team::where('commander_id', $this->data['commander_id']) + ->update(['commander_id' => null]); + } + if ($this->departments->isNotEmpty()) { + $user = User::where('userable_id', $this->data['commander_id'])->first(); + $user->removeRole('department-commander'); + + Department::where('commander_id', $this->data['commander_id']) + ->update(['commander_id' => null]); + } + $this->beginDatabaseTransaction(); + $data = $this->form->getState(); + $this->record = $this->handleRecordCreation($data); + $this->form->model($this->getRecord())->saveRelationships(); + $this->callHook('afterCreate'); + $this->commitDatabaseTransaction(); + $this->rememberData(); + $this->getCreatedNotification()?->send(); + $redirectUrl = $this->getRedirectUrl(); + $this->redirect($redirectUrl); + } catch (Halt $exception) { + $exception->shouldRollbackDatabaseTransaction() ? + $this->rollBackDatabaseTransaction() : + $this->commitDatabaseTransaction(); + + return; + } catch (Throwable $exception) { + $this->rollBackDatabaseTransaction(); + + throw $exception; + } + } + + protected $listeners = [ + 'confirmCreate' => 'confirmCreate', + ]; + + protected function getRedirectUrl(): string + { + $resource = static::getResource(); + + return $resource::getUrl('index'); + } + + protected function afterCreate(): void + { + $this->attachCommander(); + $this->attachSoldiers(); + $this->assignRoles(); + } + + protected function attachCommander(): void + { + Soldier::where('id', $this->data['commander_id']) + ->update(['team_id' => Team::latest()->pluck('id')->first()]); + } + + protected function attachSoldiers(): void + { + collect($this->data['members'])->map(fn ($soldier_id) => Soldier::where('id', $soldier_id) + ->update(['team_id' => Team::latest()->pluck('id')->first()])); + } + + protected function assignRoles() + { + $user = User::where('userable_id', $this->record->commander_id)->first(); + $user->assignRole('team-commander'); + } +} diff --git a/app/Resources/TeamResource/Pages/EditTeam.php b/app/Resources/TeamResource/Pages/EditTeam.php new file mode 100644 index 0000000..57f6a99 --- /dev/null +++ b/app/Resources/TeamResource/Pages/EditTeam.php @@ -0,0 +1,19 @@ +filter(function ($task) { + return $task->recurrence['type'] !== 'OneTime'; + })->map(fn ($task) => $this->swichTasks($task)); + } + + public function oneTimeTask(Task $task) + { + $this->task = $task; + $dates = $this->getDatesOfMonth(); + $this->createShifts($dates); + } + + protected function swichTasks(Task $task): void + { + $this->task = $task; + $dates = match ($this->task->recurrence['type']) { + 'Daily' => $this->dailyRecurrence(), + 'Weekly' => $this->weeklyRecurrence(), + 'Monthly' => $this->monthlyRecurrence(), + 'Custom' => $this->customRecurrence(), + }; + $this->createShifts($dates); + } + + protected function dailyRecurrence() + { + return $this->getDatesOfMonth(); + } + + protected function weeklyRecurrence() + { + return $this->getDatesOfDaysInMonth($this->task['recurrence']['days_in_week']); + } + + protected function monthlyRecurrence() + { + $dates[] = $this->task['recurrence']['dates_in_month']; + + return $this->convertNumbersToDatesInMonth($dates); + } + + protected function customRecurrence() + { + return $this->convertNumbersToDatesInMonth($this->task['recurrence']['dates_in_month']); + } + + protected function getDatesOfMonth() + { + $period = $this->createPeriod(); + + return collect($period)->map(function ($date) { + return $this->addTimeToDate($date); + })->all(); + } + + protected function addTimeToDate($date) + { + return Carbon::parse($date->format('Y-m-d').' '.$this->task['start_hour']); + } + + protected function calculateEndDateTime($startDate) + { + $endDate = $this->addTimeToDate($startDate) + ->addHours((float) $this->task['duration']); + + return $endDate; + } + + protected function getDatesOfDaysInMonth($daysArray) + { + $period = $this->createPeriod(); + + return collect($period)->filter(function ($date) use ($daysArray) { + return in_array($date->englishDayOfWeek, $daysArray); + })->map(function ($date) { + return $this->addTimeToDate($date); + })->all(); + } + + protected function convertNumbersToDatesInMonth($dayNumbers) + { + return collect($dayNumbers)->map(function ($day) { + return $this->addTimeToDate(Carbon::create(Carbon::now()->addMonth()->year, Carbon::now()->addMonth()->month, $day)); + })->all(); + } + + protected function createPeriod() + { + return $this->task->recurrence['type'] == 'OneTime' ? + CarbonPeriod::between($this->task['recurrence']['start_date'], $this->task['recurrence']['end_date']) : + CarbonPeriod::between(Carbon::now()->addMonth()->startOfMonth(), Carbon::now()->addMonth()->endOfMonth()); + } + + protected function createShifts(array $dates) + { + collect($dates)->map(function ($date) { + $shift = new Shift; + $shift->start_date = $date; + $shift->end_date = $this->calculateEndDateTime($date); + $shift->task_id = $this->task['id']; + $shift->save(); + }); + } +} diff --git a/artisan b/artisan new file mode 100644 index 0000000..04f054e --- /dev/null +++ b/artisan @@ -0,0 +1,13 @@ +#!/usr/bin/env php +handleCommand(new ArgvInput); + +exit($status); diff --git a/bootstrap/app.php b/bootstrap/app.php new file mode 100644 index 0000000..9ffca43 --- /dev/null +++ b/bootstrap/app.php @@ -0,0 +1,18 @@ +withRouting( + commands: __DIR__.'/../routes/console.php', + health: '/up', + ) + ->withSchedule(function (Schedule $schedule) { + $schedule->call(fn () => app(ReccurenceEvents::class)->recurrenceTask())->monthlyOn(20); + }) + ->withMiddleware(function (Middleware $middleware) {}) + ->withExceptions(function (Exceptions $exceptions) {})->create(); diff --git a/bootstrap/cache/.gitignore b/bootstrap/cache/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/bootstrap/cache/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/bootstrap/providers.php b/bootstrap/providers.php new file mode 100644 index 0000000..a177a4d --- /dev/null +++ b/bootstrap/providers.php @@ -0,0 +1,6 @@ +make(Illuminate\Contracts\Console\Kernel::class); +$kernel->bootstrap(); + +try { + DB::connection()->getPdo(); + if (DB::connection()->getDatabaseName()) { + exit(0); + } + + echo 'Database name not found.'; + exit(1); + +} catch (Exception $e) { + echo 'Database connection error: '.$e->getMessage(); + exit(1); +} \ No newline at end of file diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..9367328 --- /dev/null +++ b/composer.json @@ -0,0 +1,77 @@ +{ + "name": "laravel/laravel", + "type": "project", + "description": "Web portal for SkyVar", + "license": "proprietary", + "version": "0.0.1", + "require": { + "php": "^8.2", + "filament/filament": "^3.2", + "guzzlehttp/guzzle": "^7.2", + "laravel/framework": "^11.1", + "laravel/tinker": "^2.9", + "league/flysystem-aws-s3-v3": "^3.0", + "predis/predis": "^2.2", + "saade/filament-fullcalendar": "^3.0", + "spatie/laravel-permission": "^6.9" + }, + "require-dev": { + "fakerphp/faker": "^1.23", + "larastan/larastan": "^2.0", + "laravel-lang/common": "^6.2", + "laravel/pint": "^1.16", + "mockery/mockery": "^1.6", + "nunomaduro/collision": "^8.0", + "pestphp/pest": "^2.34", + "pestphp/pest-plugin-laravel": "^2.4", + "pestphp/pest-plugin-livewire": "^2.1", + "spatie/laravel-ignition": "^2.4" + }, + "autoload": { + "psr-4": { + "App\\": "app/", + "Database\\Factories\\": "database/factories/", + "Database\\Seeders\\": "database/seeders/" + } + }, + "autoload-dev": { + "psr-4": { + "Tests\\": "tests/" + } + }, + "scripts": { + "post-autoload-dump": [ + "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", + "@php artisan package:discover --ansi", + "@php artisan filament:upgrade" + + ], + "post-update-cmd": [ + "@php artisan vendor:publish --tag=laravel-assets --ansi --force", + "@php artisan filament:upgrade" + + ], + "post-root-package-install": [ + "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" + ], + "post-create-project-cmd": [ + "@php artisan key:generate --ansi" + ] + }, + "extra": { + "laravel": { + "dont-discover": [ ] + } + }, + "config": { + "optimize-autoloader": true, + "preferred-install": "dist", + "sort-packages": true, + "allow-plugins": { + "pestphp/pest-plugin": true, + "php-http/discovery": true + } + }, + "minimum-stability": "stable", + "prefer-stable": true +} diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..5cf4171 --- /dev/null +++ b/composer.lock @@ -0,0 +1,13132 @@ +{ + "_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": "3a979e253c0da76bcd43199271a1fc27", + "packages": [ + { + "name": "anourvalar/eloquent-serialize", + "version": "1.2.24", + "source": { + "type": "git", + "url": "https://github.com/AnourValar/eloquent-serialize.git", + "reference": "77e3fc7da44fa96b6148a1613dd76fe954a5f279" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/AnourValar/eloquent-serialize/zipball/77e3fc7da44fa96b6148a1613dd76fe954a5f279", + "reference": "77e3fc7da44fa96b6148a1613dd76fe954a5f279", + "shasum": "" + }, + "require": { + "laravel/framework": "^8.0|^9.0|^10.0|^11.0", + "php": "^7.4|^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.26", + "laravel/legacy-factories": "^1.1", + "orchestra/testbench": "^6.0|^7.0|^8.0|^9.0", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^9.5|^10.5", + "psalm/plugin-laravel": "^2.8", + "squizlabs/php_codesniffer": "^3.7" + }, + "type": "library", + "extra": { + "laravel": { + "aliases": { + "EloquentSerialize": "AnourValar\\EloquentSerialize\\Facades\\EloquentSerializeFacade" + } + } + }, + "autoload": { + "psr-4": { + "AnourValar\\EloquentSerialize\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Laravel Query Builder (Eloquent) serialization", + "homepage": "https://github.com/AnourValar/eloquent-serialize", + "keywords": [ + "anourvalar", + "builder", + "copy", + "eloquent", + "job", + "laravel", + "query", + "querybuilder", + "queue", + "serializable", + "serialization", + "serialize" + ], + "support": { + "issues": "https://github.com/AnourValar/eloquent-serialize/issues", + "source": "https://github.com/AnourValar/eloquent-serialize/tree/1.2.24" + }, + "time": "2024-09-08T15:57:08+00:00" + }, + { + "name": "aws/aws-crt-php", + "version": "v1.2.6", + "source": { + "type": "git", + "url": "https://github.com/awslabs/aws-crt-php.git", + "reference": "a63485b65b6b3367039306496d49737cf1995408" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/a63485b65b6b3367039306496d49737cf1995408", + "reference": "a63485b65b6b3367039306496d49737cf1995408", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35||^5.6.3||^9.5", + "yoast/phpunit-polyfills": "^1.0" + }, + "suggest": { + "ext-awscrt": "Make sure you install awscrt native extension to use any of the functionality." + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "AWS SDK Common Runtime Team", + "email": "aws-sdk-common-runtime@amazon.com" + } + ], + "description": "AWS Common Runtime for PHP", + "homepage": "https://github.com/awslabs/aws-crt-php", + "keywords": [ + "amazon", + "aws", + "crt", + "sdk" + ], + "support": { + "issues": "https://github.com/awslabs/aws-crt-php/issues", + "source": "https://github.com/awslabs/aws-crt-php/tree/v1.2.6" + }, + "time": "2024-06-13T17:21:28+00:00" + }, + { + "name": "aws/aws-sdk-php", + "version": "3.321.11", + "source": { + "type": "git", + "url": "https://github.com/aws/aws-sdk-php.git", + "reference": "bbd357d246350ffcd0dd8df30951d2d46c5ddadb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/bbd357d246350ffcd0dd8df30951d2d46c5ddadb", + "reference": "bbd357d246350ffcd0dd8df30951d2d46c5ddadb", + "shasum": "" + }, + "require": { + "aws/aws-crt-php": "^1.2.3", + "ext-json": "*", + "ext-pcre": "*", + "ext-simplexml": "*", + "guzzlehttp/guzzle": "^6.5.8 || ^7.4.5", + "guzzlehttp/promises": "^1.4.0 || ^2.0", + "guzzlehttp/psr7": "^1.9.1 || ^2.4.5", + "mtdowling/jmespath.php": "^2.6", + "php": ">=7.2.5", + "psr/http-message": "^1.0 || ^2.0" + }, + "require-dev": { + "andrewsville/php-token-reflection": "^1.4", + "aws/aws-php-sns-message-validator": "~1.0", + "behat/behat": "~3.0", + "composer/composer": "^1.10.22", + "dms/phpunit-arraysubset-asserts": "^0.4.0", + "doctrine/cache": "~1.4", + "ext-dom": "*", + "ext-openssl": "*", + "ext-pcntl": "*", + "ext-sockets": "*", + "nette/neon": "^2.3", + "paragonie/random_compat": ">= 2", + "phpunit/phpunit": "^5.6.3 || ^8.5 || ^9.5", + "psr/cache": "^1.0", + "psr/simple-cache": "^1.0", + "sebastian/comparator": "^1.2.3 || ^4.0", + "yoast/phpunit-polyfills": "^1.0" + }, + "suggest": { + "aws/aws-php-sns-message-validator": "To validate incoming SNS notifications", + "doctrine/cache": "To use the DoctrineCacheAdapter", + "ext-curl": "To send requests using cURL", + "ext-openssl": "Allows working with CloudFront private distributions and verifying received SNS messages", + "ext-sockets": "To use client-side monitoring" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Aws\\": "src/" + }, + "exclude-from-classmap": [ + "src/data/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Amazon Web Services", + "homepage": "http://aws.amazon.com" + } + ], + "description": "AWS SDK for PHP - Use Amazon Web Services in your PHP project", + "homepage": "http://aws.amazon.com/sdkforphp", + "keywords": [ + "amazon", + "aws", + "cloud", + "dynamodb", + "ec2", + "glacier", + "s3", + "sdk" + ], + "support": { + "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", + "issues": "https://github.com/aws/aws-sdk-php/issues", + "source": "https://github.com/aws/aws-sdk-php/tree/3.321.11" + }, + "time": "2024-09-13T18:05:10+00:00" + }, + { + "name": "blade-ui-kit/blade-heroicons", + "version": "2.4.0", + "source": { + "type": "git", + "url": "https://github.com/blade-ui-kit/blade-heroicons.git", + "reference": "a7c377a4ef88cd54712e3e15cbed30446820da0b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/blade-ui-kit/blade-heroicons/zipball/a7c377a4ef88cd54712e3e15cbed30446820da0b", + "reference": "a7c377a4ef88cd54712e3e15cbed30446820da0b", + "shasum": "" + }, + "require": { + "blade-ui-kit/blade-icons": "^1.6", + "illuminate/support": "^9.0|^10.0|^11.0", + "php": "^8.0" + }, + "require-dev": { + "orchestra/testbench": "^7.0|^8.0|^9.0", + "phpunit/phpunit": "^9.0|^10.5|^11.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "BladeUI\\Heroicons\\BladeHeroiconsServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "BladeUI\\Heroicons\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dries Vints", + "homepage": "https://driesvints.com" + } + ], + "description": "A package to easily make use of Heroicons in your Laravel Blade views.", + "homepage": "https://github.com/blade-ui-kit/blade-heroicons", + "keywords": [ + "Heroicons", + "blade", + "laravel" + ], + "support": { + "issues": "https://github.com/blade-ui-kit/blade-heroicons/issues", + "source": "https://github.com/blade-ui-kit/blade-heroicons/tree/2.4.0" + }, + "funding": [ + { + "url": "https://github.com/sponsors/driesvints", + "type": "github" + }, + { + "url": "https://www.paypal.com/paypalme/driesvints", + "type": "paypal" + } + ], + "time": "2024-07-16T07:00:01+00:00" + }, + { + "name": "blade-ui-kit/blade-icons", + "version": "1.7.1", + "source": { + "type": "git", + "url": "https://github.com/blade-ui-kit/blade-icons.git", + "reference": "8f787baf09d88cdfd6ec4dbaba11ebfa885f0595" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/blade-ui-kit/blade-icons/zipball/8f787baf09d88cdfd6ec4dbaba11ebfa885f0595", + "reference": "8f787baf09d88cdfd6ec4dbaba11ebfa885f0595", + "shasum": "" + }, + "require": { + "illuminate/contracts": "^8.0|^9.0|^10.0|^11.0", + "illuminate/filesystem": "^8.0|^9.0|^10.0|^11.0", + "illuminate/support": "^8.0|^9.0|^10.0|^11.0", + "illuminate/view": "^8.0|^9.0|^10.0|^11.0", + "php": "^7.4|^8.0", + "symfony/console": "^5.3|^6.0|^7.0", + "symfony/finder": "^5.3|^6.0|^7.0" + }, + "require-dev": { + "mockery/mockery": "^1.5.1", + "orchestra/testbench": "^6.0|^7.0|^8.0|^9.0", + "phpunit/phpunit": "^9.0|^10.5|^11.0" + }, + "bin": [ + "bin/blade-icons-generate" + ], + "type": "library", + "extra": { + "laravel": { + "providers": [ + "BladeUI\\Icons\\BladeIconsServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "BladeUI\\Icons\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dries Vints", + "homepage": "https://driesvints.com" + } + ], + "description": "A package to easily make use of icons in your Laravel Blade views.", + "homepage": "https://github.com/blade-ui-kit/blade-icons", + "keywords": [ + "blade", + "icons", + "laravel", + "svg" + ], + "support": { + "issues": "https://github.com/blade-ui-kit/blade-icons/issues", + "source": "https://github.com/blade-ui-kit/blade-icons" + }, + "funding": [ + { + "url": "https://github.com/sponsors/driesvints", + "type": "github" + }, + { + "url": "https://www.paypal.com/paypalme/driesvints", + "type": "paypal" + } + ], + "time": "2024-08-14T14:25:11+00:00" + }, + { + "name": "brick/math", + "version": "0.12.1", + "source": { + "type": "git", + "url": "https://github.com/brick/math.git", + "reference": "f510c0a40911935b77b86859eb5223d58d660df1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/brick/math/zipball/f510c0a40911935b77b86859eb5223d58d660df1", + "reference": "f510c0a40911935b77b86859eb5223d58d660df1", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^10.1", + "vimeo/psalm": "5.16.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Brick\\Math\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Arbitrary-precision arithmetic library", + "keywords": [ + "Arbitrary-precision", + "BigInteger", + "BigRational", + "arithmetic", + "bigdecimal", + "bignum", + "bignumber", + "brick", + "decimal", + "integer", + "math", + "mathematics", + "rational" + ], + "support": { + "issues": "https://github.com/brick/math/issues", + "source": "https://github.com/brick/math/tree/0.12.1" + }, + "funding": [ + { + "url": "https://github.com/BenMorel", + "type": "github" + } + ], + "time": "2023-11-29T23:19:16+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": "danharrin/date-format-converter", + "version": "v0.3.1", + "source": { + "type": "git", + "url": "https://github.com/danharrin/date-format-converter.git", + "reference": "7c31171bc981e48726729a5f3a05a2d2b63f0b1e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/danharrin/date-format-converter/zipball/7c31171bc981e48726729a5f3a05a2d2b63f0b1e", + "reference": "7c31171bc981e48726729a5f3a05a2d2b63f0b1e", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0" + }, + "type": "library", + "autoload": { + "files": [ + "src/helpers.php", + "src/standards.php" + ], + "psr-4": { + "DanHarrin\\DateFormatConverter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dan Harrin", + "email": "dan@danharrin.com" + } + ], + "description": "Convert token-based date formats between standards.", + "homepage": "https://github.com/danharrin/date-format-converter", + "support": { + "issues": "https://github.com/danharrin/date-format-converter/issues", + "source": "https://github.com/danharrin/date-format-converter" + }, + "funding": [ + { + "url": "https://github.com/danharrin", + "type": "github" + } + ], + "time": "2024-06-13T09:38:44+00:00" + }, + { + "name": "danharrin/livewire-rate-limiting", + "version": "v1.3.1", + "source": { + "type": "git", + "url": "https://github.com/danharrin/livewire-rate-limiting.git", + "reference": "1a1b299e20de61f88ed6e94ea0bbcfc33aab1ddb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/danharrin/livewire-rate-limiting/zipball/1a1b299e20de61f88ed6e94ea0bbcfc33aab1ddb", + "reference": "1a1b299e20de61f88ed6e94ea0bbcfc33aab1ddb", + "shasum": "" + }, + "require": { + "illuminate/support": "^9.0|^10.0|^11.0", + "php": "^8.0" + }, + "require-dev": { + "livewire/livewire": "^3.0", + "livewire/volt": "^1.3", + "orchestra/testbench": "^7.0|^8.0|^9.0", + "phpunit/phpunit": "^9.0|^10.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "DanHarrin\\LivewireRateLimiting\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dan Harrin", + "email": "dan@danharrin.com" + } + ], + "description": "Apply rate limiters to Laravel Livewire actions.", + "homepage": "https://github.com/danharrin/livewire-rate-limiting", + "support": { + "issues": "https://github.com/danharrin/livewire-rate-limiting/issues", + "source": "https://github.com/danharrin/livewire-rate-limiting" + }, + "funding": [ + { + "url": "https://github.com/danharrin", + "type": "github" + } + ], + "time": "2024-05-06T09:10:03+00:00" + }, + { + "name": "dflydev/dot-access-data", + "version": "v3.0.3", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/a23a2bf4f31d3518f3ecb38660c95715dfead60f", + "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.42", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", + "scrutinizer/ocular": "1.6.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Dflydev\\DotAccessData\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + }, + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "support": { + "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.3" + }, + "time": "2024-07-08T12:26:09+00:00" + }, + { + "name": "doctrine/dbal", + "version": "4.1.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/dbal.git", + "reference": "7a8252418689feb860ea8dfeab66d64a56a64df8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/7a8252418689feb860ea8dfeab66d64a56a64df8", + "reference": "7a8252418689feb860ea8dfeab66d64a56a64df8", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^0.5.3|^1", + "php": "^8.1", + "psr/cache": "^1|^2|^3", + "psr/log": "^1|^2|^3" + }, + "require-dev": { + "doctrine/coding-standard": "12.0.0", + "fig/log-test": "^1", + "jetbrains/phpstorm-stubs": "2023.2", + "phpstan/phpstan": "1.12.0", + "phpstan/phpstan-phpunit": "1.4.0", + "phpstan/phpstan-strict-rules": "^1.6", + "phpunit/phpunit": "10.5.30", + "psalm/plugin-phpunit": "0.19.0", + "slevomat/coding-standard": "8.13.1", + "squizlabs/php_codesniffer": "3.10.2", + "symfony/cache": "^6.3.8|^7.0", + "symfony/console": "^5.4|^6.3|^7.0", + "vimeo/psalm": "5.25.0" + }, + "suggest": { + "symfony/console": "For helpful console commands such as SQL execution and import of files." + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\DBAL\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + } + ], + "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.", + "homepage": "https://www.doctrine-project.org/projects/dbal.html", + "keywords": [ + "abstraction", + "database", + "db2", + "dbal", + "mariadb", + "mssql", + "mysql", + "oci8", + "oracle", + "pdo", + "pgsql", + "postgresql", + "queryobject", + "sasql", + "sql", + "sqlite", + "sqlserver", + "sqlsrv" + ], + "support": { + "issues": "https://github.com/doctrine/dbal/issues", + "source": "https://github.com/doctrine/dbal/tree/4.1.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%2Fdbal", + "type": "tidelift" + } + ], + "time": "2024-09-03T08:58:39+00:00" + }, + { + "name": "doctrine/deprecations", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/deprecations.git", + "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", + "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9", + "phpstan/phpstan": "1.4.10 || 1.10.15", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psalm/plugin-phpunit": "0.18.4", + "psr/log": "^1 || ^2 || ^3", + "vimeo/psalm": "4.30.0 || 5.12.0" + }, + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", + "homepage": "https://www.doctrine-project.org/", + "support": { + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/1.1.3" + }, + "time": "2024-01-30T19:34:25+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": "dragonmantank/cron-expression", + "version": "v3.3.3", + "source": { + "type": "git", + "url": "https://github.com/dragonmantank/cron-expression.git", + "reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/adfb1f505deb6384dc8b39804c5065dd3c8c8c0a", + "reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0", + "webmozart/assert": "^1.0" + }, + "replace": { + "mtdowling/cron-expression": "^1.0" + }, + "require-dev": { + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-webmozart-assert": "^1.0", + "phpunit/phpunit": "^7.0|^8.0|^9.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Cron\\": "src/Cron/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Tankersley", + "email": "chris@ctankersley.com", + "homepage": "https://github.com/dragonmantank" + } + ], + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "keywords": [ + "cron", + "schedule" + ], + "support": { + "issues": "https://github.com/dragonmantank/cron-expression/issues", + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.3" + }, + "funding": [ + { + "url": "https://github.com/dragonmantank", + "type": "github" + } + ], + "time": "2023-08-10T19:36:49+00:00" + }, + { + "name": "egulias/email-validator", + "version": "4.0.2", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ebaaf5be6c0286928352e054f2d5125608e5405e", + "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e", + "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.2" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "time": "2023-10-06T06:47:41+00:00" + }, + { + "name": "filament/actions", + "version": "v3.2.112", + "source": { + "type": "git", + "url": "https://github.com/filamentphp/actions.git", + "reference": "df3310607b49dad302b03516c558c93cb82c5164" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filamentphp/actions/zipball/df3310607b49dad302b03516c558c93cb82c5164", + "reference": "df3310607b49dad302b03516c558c93cb82c5164", + "shasum": "" + }, + "require": { + "anourvalar/eloquent-serialize": "^1.2", + "filament/forms": "self.version", + "filament/infolists": "self.version", + "filament/notifications": "self.version", + "filament/support": "self.version", + "illuminate/contracts": "^10.45|^11.0", + "illuminate/database": "^10.45|^11.0", + "illuminate/support": "^10.45|^11.0", + "league/csv": "^9.14", + "openspout/openspout": "^4.23", + "php": "^8.1", + "spatie/laravel-package-tools": "^1.9" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Filament\\Actions\\ActionsServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Filament\\Actions\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Easily add beautiful action modals to any Livewire component.", + "homepage": "https://github.com/filamentphp/filament", + "support": { + "issues": "https://github.com/filamentphp/filament/issues", + "source": "https://github.com/filamentphp/filament" + }, + "time": "2024-09-11T08:25:31+00:00" + }, + { + "name": "filament/filament", + "version": "v3.2.112", + "source": { + "type": "git", + "url": "https://github.com/filamentphp/panels.git", + "reference": "86aa182deceedce5970560c60ceae30c2c40632d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filamentphp/panels/zipball/86aa182deceedce5970560c60ceae30c2c40632d", + "reference": "86aa182deceedce5970560c60ceae30c2c40632d", + "shasum": "" + }, + "require": { + "danharrin/livewire-rate-limiting": "^0.3|^1.0", + "filament/actions": "self.version", + "filament/forms": "self.version", + "filament/infolists": "self.version", + "filament/notifications": "self.version", + "filament/support": "self.version", + "filament/tables": "self.version", + "filament/widgets": "self.version", + "illuminate/auth": "^10.45|^11.0", + "illuminate/console": "^10.45|^11.0", + "illuminate/contracts": "^10.45|^11.0", + "illuminate/cookie": "^10.45|^11.0", + "illuminate/database": "^10.45|^11.0", + "illuminate/http": "^10.45|^11.0", + "illuminate/routing": "^10.45|^11.0", + "illuminate/session": "^10.45|^11.0", + "illuminate/support": "^10.45|^11.0", + "illuminate/view": "^10.45|^11.0", + "php": "^8.1", + "spatie/laravel-package-tools": "^1.9" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Filament\\FilamentServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/global_helpers.php", + "src/helpers.php" + ], + "psr-4": { + "Filament\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A collection of full-stack components for accelerated Laravel app development.", + "homepage": "https://github.com/filamentphp/filament", + "support": { + "issues": "https://github.com/filamentphp/filament/issues", + "source": "https://github.com/filamentphp/filament" + }, + "time": "2024-09-11T08:25:51+00:00" + }, + { + "name": "filament/forms", + "version": "v3.2.112", + "source": { + "type": "git", + "url": "https://github.com/filamentphp/forms.git", + "reference": "99d72777f1e6dc5d42d936e7deb53148e4233ec3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filamentphp/forms/zipball/99d72777f1e6dc5d42d936e7deb53148e4233ec3", + "reference": "99d72777f1e6dc5d42d936e7deb53148e4233ec3", + "shasum": "" + }, + "require": { + "danharrin/date-format-converter": "^0.3", + "filament/actions": "self.version", + "filament/support": "self.version", + "illuminate/console": "^10.45|^11.0", + "illuminate/contracts": "^10.45|^11.0", + "illuminate/database": "^10.45|^11.0", + "illuminate/filesystem": "^10.45|^11.0", + "illuminate/support": "^10.45|^11.0", + "illuminate/validation": "^10.45|^11.0", + "illuminate/view": "^10.45|^11.0", + "php": "^8.1", + "spatie/laravel-package-tools": "^1.9" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Filament\\Forms\\FormsServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Filament\\Forms\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Easily add beautiful forms to any Livewire component.", + "homepage": "https://github.com/filamentphp/filament", + "support": { + "issues": "https://github.com/filamentphp/filament/issues", + "source": "https://github.com/filamentphp/filament" + }, + "time": "2024-09-12T12:27:13+00:00" + }, + { + "name": "filament/infolists", + "version": "v3.2.112", + "source": { + "type": "git", + "url": "https://github.com/filamentphp/infolists.git", + "reference": "e50bd9a5fc623320bd79508e3bfb72ff9e309edf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filamentphp/infolists/zipball/e50bd9a5fc623320bd79508e3bfb72ff9e309edf", + "reference": "e50bd9a5fc623320bd79508e3bfb72ff9e309edf", + "shasum": "" + }, + "require": { + "filament/actions": "self.version", + "filament/support": "self.version", + "illuminate/console": "^10.45|^11.0", + "illuminate/contracts": "^10.45|^11.0", + "illuminate/database": "^10.45|^11.0", + "illuminate/filesystem": "^10.45|^11.0", + "illuminate/support": "^10.45|^11.0", + "illuminate/view": "^10.45|^11.0", + "php": "^8.1", + "spatie/laravel-package-tools": "^1.9" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Filament\\Infolists\\InfolistsServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Filament\\Infolists\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Easily add beautiful read-only infolists to any Livewire component.", + "homepage": "https://github.com/filamentphp/filament", + "support": { + "issues": "https://github.com/filamentphp/filament/issues", + "source": "https://github.com/filamentphp/filament" + }, + "time": "2024-09-11T08:25:25+00:00" + }, + { + "name": "filament/notifications", + "version": "v3.2.112", + "source": { + "type": "git", + "url": "https://github.com/filamentphp/notifications.git", + "reference": "03ea56e0729c98c65831ab0215285a7cb1c4117f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filamentphp/notifications/zipball/03ea56e0729c98c65831ab0215285a7cb1c4117f", + "reference": "03ea56e0729c98c65831ab0215285a7cb1c4117f", + "shasum": "" + }, + "require": { + "filament/actions": "self.version", + "filament/support": "self.version", + "illuminate/contracts": "^10.45|^11.0", + "illuminate/filesystem": "^10.45|^11.0", + "illuminate/notifications": "^10.45|^11.0", + "illuminate/support": "^10.45|^11.0", + "php": "^8.1", + "spatie/laravel-package-tools": "^1.9" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Filament\\Notifications\\NotificationsServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/Testing/Autoload.php" + ], + "psr-4": { + "Filament\\Notifications\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Easily add beautiful notifications to any Livewire app.", + "homepage": "https://github.com/filamentphp/filament", + "support": { + "issues": "https://github.com/filamentphp/filament/issues", + "source": "https://github.com/filamentphp/filament" + }, + "time": "2024-07-31T11:53:11+00:00" + }, + { + "name": "filament/support", + "version": "v3.2.112", + "source": { + "type": "git", + "url": "https://github.com/filamentphp/support.git", + "reference": "d07086506d39f318398c13a0b8d689f75cbc14d6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filamentphp/support/zipball/d07086506d39f318398c13a0b8d689f75cbc14d6", + "reference": "d07086506d39f318398c13a0b8d689f75cbc14d6", + "shasum": "" + }, + "require": { + "blade-ui-kit/blade-heroicons": "^2.2.1", + "doctrine/dbal": "^3.2|^4.0", + "ext-intl": "*", + "illuminate/contracts": "^10.45|^11.0", + "illuminate/support": "^10.45|^11.0", + "illuminate/view": "^10.45|^11.0", + "kirschbaum-development/eloquent-power-joins": "^3.0", + "livewire/livewire": "^3.4.10", + "php": "^8.1", + "ryangjchandler/blade-capture-directive": "^0.2|^0.3|^1.0", + "spatie/color": "^1.5", + "spatie/invade": "^1.0|^2.0", + "spatie/laravel-package-tools": "^1.9", + "symfony/console": "^6.0|^7.0", + "symfony/html-sanitizer": "^6.1|^7.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Filament\\Support\\SupportServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Filament\\Support\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Core helper methods and foundation code for all Filament packages.", + "homepage": "https://github.com/filamentphp/filament", + "support": { + "issues": "https://github.com/filamentphp/filament/issues", + "source": "https://github.com/filamentphp/filament" + }, + "time": "2024-09-11T08:25:46+00:00" + }, + { + "name": "filament/tables", + "version": "v3.2.112", + "source": { + "type": "git", + "url": "https://github.com/filamentphp/tables.git", + "reference": "4285a031dd36250a86710631a5b1fea1372097a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filamentphp/tables/zipball/4285a031dd36250a86710631a5b1fea1372097a1", + "reference": "4285a031dd36250a86710631a5b1fea1372097a1", + "shasum": "" + }, + "require": { + "filament/actions": "self.version", + "filament/forms": "self.version", + "filament/support": "self.version", + "illuminate/console": "^10.45|^11.0", + "illuminate/contracts": "^10.45|^11.0", + "illuminate/database": "^10.45|^11.0", + "illuminate/filesystem": "^10.45|^11.0", + "illuminate/support": "^10.45|^11.0", + "illuminate/view": "^10.45|^11.0", + "php": "^8.1", + "spatie/laravel-package-tools": "^1.9" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Filament\\Tables\\TablesServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Filament\\Tables\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Easily add beautiful tables to any Livewire component.", + "homepage": "https://github.com/filamentphp/filament", + "support": { + "issues": "https://github.com/filamentphp/filament/issues", + "source": "https://github.com/filamentphp/filament" + }, + "time": "2024-09-11T08:25:43+00:00" + }, + { + "name": "filament/widgets", + "version": "v3.2.112", + "source": { + "type": "git", + "url": "https://github.com/filamentphp/widgets.git", + "reference": "909fc82bae2cf41d70b3cd7dda8982245b2ea723" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filamentphp/widgets/zipball/909fc82bae2cf41d70b3cd7dda8982245b2ea723", + "reference": "909fc82bae2cf41d70b3cd7dda8982245b2ea723", + "shasum": "" + }, + "require": { + "filament/support": "self.version", + "php": "^8.1", + "spatie/laravel-package-tools": "^1.9" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Filament\\Widgets\\WidgetsServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Filament\\Widgets\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Easily add beautiful dashboard widgets to any Livewire component.", + "homepage": "https://github.com/filamentphp/filament", + "support": { + "issues": "https://github.com/filamentphp/filament/issues", + "source": "https://github.com/filamentphp/filament" + }, + "time": "2024-07-31T11:53:30+00:00" + }, + { + "name": "fruitcake/php-cors", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/fruitcake/php-cors.git", + "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/3d158f36e7875e2f040f37bc0573956240a5a38b", + "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0", + "symfony/http-foundation": "^4.4|^5.4|^6|^7" + }, + "require-dev": { + "phpstan/phpstan": "^1.4", + "phpunit/phpunit": "^9", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "Fruitcake\\Cors\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fruitcake", + "homepage": "https://fruitcake.nl" + }, + { + "name": "Barryvdh", + "email": "barryvdh@gmail.com" + } + ], + "description": "Cross-origin resource sharing library for the Symfony HttpFoundation", + "homepage": "https://github.com/fruitcake/php-cors", + "keywords": [ + "cors", + "laravel", + "symfony" + ], + "support": { + "issues": "https://github.com/fruitcake/php-cors/issues", + "source": "https://github.com/fruitcake/php-cors/tree/v1.3.0" + }, + "funding": [ + { + "url": "https://fruitcake.nl", + "type": "custom" + }, + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2023-10-12T05:21:21+00:00" + }, + { + "name": "graham-campbell/result-type", + "version": "v1.1.3", + "source": { + "type": "git", + "url": "https://github.com/GrahamCampbell/Result-Type.git", + "reference": "3ba905c11371512af9d9bdd27d99b782216b6945" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/3ba905c11371512af9d9bdd27d99b782216b6945", + "reference": "3ba905c11371512af9d9bdd27d99b782216b6945", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.3" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" + }, + "type": "library", + "autoload": { + "psr-4": { + "GrahamCampbell\\ResultType\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "An Implementation Of The Result Type", + "keywords": [ + "Graham Campbell", + "GrahamCampbell", + "Result Type", + "Result-Type", + "result" + ], + "support": { + "issues": "https://github.com/GrahamCampbell/Result-Type/issues", + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.3" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", + "type": "tidelift" + } + ], + "time": "2024-07-20T21:45:45+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "7.9.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "d281ed313b989f213357e3be1a179f02196ac99b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d281ed313b989f213357e3be1a179f02196ac99b", + "reference": "d281ed313b989f213357e3be1a179f02196ac99b", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.5.3 || ^2.0.3", + "guzzlehttp/psr7": "^2.7.0", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "ext-curl": "*", + "guzzle/client-integration-tests": "3.0.2", + "php-http/message-factory": "^1.1", + "phpunit/phpunit": "^8.5.39 || ^9.6.20", + "psr/log": "^1.1 || ^2.0 || ^3.0" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "psr-18", + "psr-7", + "rest", + "web service" + ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.9.2" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2024-07-24T11:22:20+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8", + "reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.39 || ^9.6.20" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/2.0.3" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2024-07-18T10:29:17+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": "guzzlehttp/uri-template", + "version": "v1.0.3", + "source": { + "type": "git", + "url": "https://github.com/guzzle/uri-template.git", + "reference": "ecea8feef63bd4fef1f037ecb288386999ecc11c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/uri-template/zipball/ecea8feef63bd4fef1f037ecb288386999ecc11c", + "reference": "ecea8feef63bd4fef1f037ecb288386999ecc11c", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "symfony/polyfill-php80": "^1.24" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.36 || ^9.6.15", + "uri-template/tests": "1.0.0" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\UriTemplate\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + } + ], + "description": "A polyfill class for uri_template of PHP", + "keywords": [ + "guzzlehttp", + "uri-template" + ], + "support": { + "issues": "https://github.com/guzzle/uri-template/issues", + "source": "https://github.com/guzzle/uri-template/tree/v1.0.3" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/uri-template", + "type": "tidelift" + } + ], + "time": "2023-12-03T19:50:20+00:00" + }, + { + "name": "kirschbaum-development/eloquent-power-joins", + "version": "3.5.8", + "source": { + "type": "git", + "url": "https://github.com/kirschbaum-development/eloquent-power-joins.git", + "reference": "397ef08f15ceff48111fd7f57d9f1fd41bf1a453" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/kirschbaum-development/eloquent-power-joins/zipball/397ef08f15ceff48111fd7f57d9f1fd41bf1a453", + "reference": "397ef08f15ceff48111fd7f57d9f1fd41bf1a453", + "shasum": "" + }, + "require": { + "illuminate/database": "^8.0|^9.0|^10.0|^11.0", + "illuminate/support": "^8.0|^9.0|^10.0|^11.0", + "php": "^8.0" + }, + "require-dev": { + "laravel/legacy-factories": "^1.0@dev", + "orchestra/testbench": "^4.0|^5.0|^6.0|^7.0|^8.0|^9.0", + "phpunit/phpunit": "^8.0|^9.0|^10.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Kirschbaum\\PowerJoins\\PowerJoinsServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Kirschbaum\\PowerJoins\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Luis Dalmolin", + "email": "luis.nh@gmail.com", + "role": "Developer" + } + ], + "description": "The Laravel magic applied to joins.", + "homepage": "https://github.com/kirschbaum-development/eloquent-power-joins", + "keywords": [ + "eloquent", + "join", + "laravel", + "mysql" + ], + "support": { + "issues": "https://github.com/kirschbaum-development/eloquent-power-joins/issues", + "source": "https://github.com/kirschbaum-development/eloquent-power-joins/tree/3.5.8" + }, + "time": "2024-09-10T10:28:05+00:00" + }, + { + "name": "laravel/framework", + "version": "v11.23.5", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "16b31ab0e1dad5cb2ed6dcc1818c02f02fc48453" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/16b31ab0e1dad5cb2ed6dcc1818c02f02fc48453", + "reference": "16b31ab0e1dad5cb2ed6dcc1818c02f02fc48453", + "shasum": "" + }, + "require": { + "brick/math": "^0.9.3|^0.10.2|^0.11|^0.12", + "composer-runtime-api": "^2.2", + "doctrine/inflector": "^2.0.5", + "dragonmantank/cron-expression": "^3.3.2", + "egulias/email-validator": "^3.2.1|^4.0", + "ext-ctype": "*", + "ext-filter": "*", + "ext-hash": "*", + "ext-mbstring": "*", + "ext-openssl": "*", + "ext-session": "*", + "ext-tokenizer": "*", + "fruitcake/php-cors": "^1.3", + "guzzlehttp/guzzle": "^7.8", + "guzzlehttp/uri-template": "^1.0", + "laravel/prompts": "^0.1.18", + "laravel/serializable-closure": "^1.3", + "league/commonmark": "^2.2.1", + "league/flysystem": "^3.8.0", + "monolog/monolog": "^3.0", + "nesbot/carbon": "^2.72.2|^3.0", + "nunomaduro/termwind": "^2.0", + "php": "^8.2", + "psr/container": "^1.1.1|^2.0.1", + "psr/log": "^1.0|^2.0|^3.0", + "psr/simple-cache": "^1.0|^2.0|^3.0", + "ramsey/uuid": "^4.7", + "symfony/console": "^7.0", + "symfony/error-handler": "^7.0", + "symfony/finder": "^7.0", + "symfony/http-foundation": "^7.0", + "symfony/http-kernel": "^7.0", + "symfony/mailer": "^7.0", + "symfony/mime": "^7.0", + "symfony/polyfill-php83": "^1.28", + "symfony/process": "^7.0", + "symfony/routing": "^7.0", + "symfony/uid": "^7.0", + "symfony/var-dumper": "^7.0", + "tijsverkoyen/css-to-inline-styles": "^2.2.5", + "vlucas/phpdotenv": "^5.4.1", + "voku/portable-ascii": "^2.0" + }, + "conflict": { + "mockery/mockery": "1.6.8", + "tightenco/collect": "<5.5.33" + }, + "provide": { + "psr/container-implementation": "1.1|2.0", + "psr/log-implementation": "1.0|2.0|3.0", + "psr/simple-cache-implementation": "1.0|2.0|3.0" + }, + "replace": { + "illuminate/auth": "self.version", + "illuminate/broadcasting": "self.version", + "illuminate/bus": "self.version", + "illuminate/cache": "self.version", + "illuminate/collections": "self.version", + "illuminate/concurrency": "self.version", + "illuminate/conditionable": "self.version", + "illuminate/config": "self.version", + "illuminate/console": "self.version", + "illuminate/container": "self.version", + "illuminate/contracts": "self.version", + "illuminate/cookie": "self.version", + "illuminate/database": "self.version", + "illuminate/encryption": "self.version", + "illuminate/events": "self.version", + "illuminate/filesystem": "self.version", + "illuminate/hashing": "self.version", + "illuminate/http": "self.version", + "illuminate/log": "self.version", + "illuminate/macroable": "self.version", + "illuminate/mail": "self.version", + "illuminate/notifications": "self.version", + "illuminate/pagination": "self.version", + "illuminate/pipeline": "self.version", + "illuminate/process": "self.version", + "illuminate/queue": "self.version", + "illuminate/redis": "self.version", + "illuminate/routing": "self.version", + "illuminate/session": "self.version", + "illuminate/support": "self.version", + "illuminate/testing": "self.version", + "illuminate/translation": "self.version", + "illuminate/validation": "self.version", + "illuminate/view": "self.version", + "spatie/once": "*" + }, + "require-dev": { + "ably/ably-php": "^1.0", + "aws/aws-sdk-php": "^3.235.5", + "ext-gmp": "*", + "fakerphp/faker": "^1.23", + "league/flysystem-aws-s3-v3": "^3.0", + "league/flysystem-ftp": "^3.0", + "league/flysystem-path-prefixing": "^3.3", + "league/flysystem-read-only": "^3.3", + "league/flysystem-sftp-v3": "^3.0", + "mockery/mockery": "^1.6", + "nyholm/psr7": "^1.2", + "orchestra/testbench-core": "^9.4.0", + "pda/pheanstalk": "^5.0", + "phpstan/phpstan": "^1.11.5", + "phpunit/phpunit": "^10.5|^11.0", + "predis/predis": "^2.0.2", + "resend/resend-php": "^0.10.0", + "symfony/cache": "^7.0", + "symfony/http-client": "^7.0", + "symfony/psr-http-message-bridge": "^7.0" + }, + "suggest": { + "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.235.5).", + "brianium/paratest": "Required to run tests in parallel (^7.0|^8.0).", + "ext-apcu": "Required to use the APC cache driver.", + "ext-fileinfo": "Required to use the Filesystem class.", + "ext-ftp": "Required to use the Flysystem FTP driver.", + "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", + "ext-memcached": "Required to use the memcache cache driver.", + "ext-pcntl": "Required to use all features of the queue worker and console signal trapping.", + "ext-pdo": "Required to use all database features.", + "ext-posix": "Required to use all features of the queue worker.", + "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0|^6.0).", + "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", + "filp/whoops": "Required for friendly error pages in development (^2.14.3).", + "laravel/tinker": "Required to use the tinker console command (^2.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.0).", + "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.0).", + "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.3).", + "league/flysystem-read-only": "Required to use read-only disks (^3.3)", + "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.0).", + "mockery/mockery": "Required to use mocking (^1.6).", + "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^5.0).", + "phpunit/phpunit": "Required to use assertions and run tests (^10.5|^11.0).", + "predis/predis": "Required to use the predis connector (^2.0.2).", + "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", + "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0).", + "symfony/cache": "Required to PSR-6 cache bridge (^7.0).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^7.0).", + "symfony/http-client": "Required to enable support for the Symfony API mail transports (^7.0).", + "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^7.0).", + "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^7.0).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^7.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "11.x-dev" + } + }, + "autoload": { + "files": [ + "src/Illuminate/Collections/helpers.php", + "src/Illuminate/Events/functions.php", + "src/Illuminate/Filesystem/functions.php", + "src/Illuminate/Foundation/helpers.php", + "src/Illuminate/Log/functions.php", + "src/Illuminate/Support/helpers.php" + ], + "psr-4": { + "Illuminate\\": "src/Illuminate/", + "Illuminate\\Support\\": [ + "src/Illuminate/Macroable/", + "src/Illuminate/Collections/", + "src/Illuminate/Conditionable/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Laravel Framework.", + "homepage": "https://laravel.com", + "keywords": [ + "framework", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2024-09-13T13:36:30+00:00" + }, + { + "name": "laravel/prompts", + "version": "v0.1.25", + "source": { + "type": "git", + "url": "https://github.com/laravel/prompts.git", + "reference": "7b4029a84c37cb2725fc7f011586e2997040bc95" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/prompts/zipball/7b4029a84c37cb2725fc7f011586e2997040bc95", + "reference": "7b4029a84c37cb2725fc7f011586e2997040bc95", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "illuminate/collections": "^10.0|^11.0", + "php": "^8.1", + "symfony/console": "^6.2|^7.0" + }, + "conflict": { + "illuminate/console": ">=10.17.0 <10.25.0", + "laravel/framework": ">=10.17.0 <10.25.0" + }, + "require-dev": { + "mockery/mockery": "^1.5", + "pestphp/pest": "^2.3", + "phpstan/phpstan": "^1.11", + "phpstan/phpstan-mockery": "^1.1" + }, + "suggest": { + "ext-pcntl": "Required for the spinner to be animated." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.1.x-dev" + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Laravel\\Prompts\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Add beautiful and user-friendly forms to your command-line applications.", + "support": { + "issues": "https://github.com/laravel/prompts/issues", + "source": "https://github.com/laravel/prompts/tree/v0.1.25" + }, + "time": "2024-08-12T22:06:33+00:00" + }, + { + "name": "laravel/serializable-closure", + "version": "v1.3.4", + "source": { + "type": "git", + "url": "https://github.com/laravel/serializable-closure.git", + "reference": "61b87392d986dc49ad5ef64e75b1ff5fee24ef81" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/61b87392d986dc49ad5ef64e75b1ff5fee24ef81", + "reference": "61b87392d986dc49ad5ef64e75b1ff5fee24ef81", + "shasum": "" + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "illuminate/support": "^8.0|^9.0|^10.0|^11.0", + "nesbot/carbon": "^2.61|^3.0", + "pestphp/pest": "^1.21.3", + "phpstan/phpstan": "^1.8.2", + "symfony/var-dumper": "^5.4.11|^6.2.0|^7.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\SerializableClosure\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Nuno Maduro", + "email": "nuno@laravel.com" + } + ], + "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.", + "keywords": [ + "closure", + "laravel", + "serializable" + ], + "support": { + "issues": "https://github.com/laravel/serializable-closure/issues", + "source": "https://github.com/laravel/serializable-closure" + }, + "time": "2024-08-02T07:48:17+00:00" + }, + { + "name": "laravel/tinker", + "version": "v2.9.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/tinker.git", + "reference": "502e0fe3f0415d06d5db1f83a472f0f3b754bafe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/tinker/zipball/502e0fe3f0415d06d5db1f83a472f0f3b754bafe", + "reference": "502e0fe3f0415d06d5db1f83a472f0f3b754bafe", + "shasum": "" + }, + "require": { + "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", + "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", + "php": "^7.2.5|^8.0", + "psy/psysh": "^0.11.1|^0.12.0", + "symfony/var-dumper": "^4.3.4|^5.0|^6.0|^7.0" + }, + "require-dev": { + "mockery/mockery": "~1.3.3|^1.4.2", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^8.5.8|^9.3.3" + }, + "suggest": { + "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0|^11.0)." + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Tinker\\TinkerServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Tinker\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Powerful REPL for the Laravel framework.", + "keywords": [ + "REPL", + "Tinker", + "laravel", + "psysh" + ], + "support": { + "issues": "https://github.com/laravel/tinker/issues", + "source": "https://github.com/laravel/tinker/tree/v2.9.0" + }, + "time": "2024-01-04T16:10:04+00:00" + }, + { + "name": "league/commonmark", + "version": "2.5.3", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "b650144166dfa7703e62a22e493b853b58d874b0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/b650144166dfa7703e62a22e493b853b58d874b0", + "reference": "b650144166dfa7703e62a22e493b853b58d874b0", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "league/config": "^1.1.1", + "php": "^7.4 || ^8.0", + "psr/event-dispatcher": "^1.0", + "symfony/deprecation-contracts": "^2.1 || ^3.0", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "cebe/markdown": "^1.0", + "commonmark/cmark": "0.31.1", + "commonmark/commonmark.js": "0.31.1", + "composer/package-versions-deprecated": "^1.8", + "embed/embed": "^4.4", + "erusev/parsedown": "^1.0", + "ext-json": "*", + "github/gfm": "0.29.0", + "michelf/php-markdown": "^1.4 || ^2.0", + "nyholm/psr7": "^1.5", + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0", + "scrutinizer/ocular": "^1.8.1", + "symfony/finder": "^5.3 | ^6.0 || ^7.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 || ^7.0", + "unleashedtech/php-coding-standard": "^3.1.1", + "vimeo/psalm": "^4.24.0 || ^5.0.0" + }, + "suggest": { + "symfony/yaml": "v2.3+ required if using the Front Matter extension" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.6-dev" + } + }, + "autoload": { + "psr-4": { + "League\\CommonMark\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)", + "homepage": "https://commonmark.thephpleague.com", + "keywords": [ + "commonmark", + "flavored", + "gfm", + "github", + "github-flavored", + "markdown", + "md", + "parser" + ], + "support": { + "docs": "https://commonmark.thephpleague.com/", + "forum": "https://github.com/thephpleague/commonmark/discussions", + "issues": "https://github.com/thephpleague/commonmark/issues", + "rss": "https://github.com/thephpleague/commonmark/releases.atom", + "source": "https://github.com/thephpleague/commonmark" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/commonmark", + "type": "tidelift" + } + ], + "time": "2024-08-16T11:46:16+00:00" + }, + { + "name": "league/config", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/config.git", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/config/zipball/754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^3.0.1", + "nette/schema": "^1.2", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.5", + "scrutinizer/ocular": "^1.8.1", + "unleashedtech/php-coding-standard": "^3.1", + "vimeo/psalm": "^4.7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Config\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Define configuration arrays with strict schemas and access values with dot notation", + "homepage": "https://config.thephpleague.com", + "keywords": [ + "array", + "config", + "configuration", + "dot", + "dot-access", + "nested", + "schema" + ], + "support": { + "docs": "https://config.thephpleague.com/", + "issues": "https://github.com/thephpleague/config/issues", + "rss": "https://github.com/thephpleague/config/releases.atom", + "source": "https://github.com/thephpleague/config" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + } + ], + "time": "2022-12-11T20:36:23+00:00" + }, + { + "name": "league/csv", + "version": "9.16.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/csv.git", + "reference": "998280c6c34bd67d8125fdc8b45bae28d761b440" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/csv/zipball/998280c6c34bd67d8125fdc8b45bae28d761b440", + "reference": "998280c6c34bd67d8125fdc8b45bae28d761b440", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "php": "^8.1.2" + }, + "require-dev": { + "doctrine/collections": "^2.2.2", + "ext-dom": "*", + "ext-xdebug": "*", + "friendsofphp/php-cs-fixer": "^3.57.1", + "phpbench/phpbench": "^1.2.15", + "phpstan/phpstan": "^1.11.1", + "phpstan/phpstan-deprecation-rules": "^1.2.0", + "phpstan/phpstan-phpunit": "^1.4.0", + "phpstan/phpstan-strict-rules": "^1.6.0", + "phpunit/phpunit": "^10.5.16 || ^11.1.3", + "symfony/var-dumper": "^6.4.6 || ^7.0.7" + }, + "suggest": { + "ext-dom": "Required to use the XMLConverter and the HTMLConverter classes", + "ext-iconv": "Needed to ease transcoding CSV using iconv stream filters", + "ext-mbstring": "Needed to ease transcoding CSV using mb stream filters" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "League\\Csv\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://github.com/nyamsprod/", + "role": "Developer" + } + ], + "description": "CSV data manipulation made easy in PHP", + "homepage": "https://csv.thephpleague.com", + "keywords": [ + "convert", + "csv", + "export", + "filter", + "import", + "read", + "transform", + "write" + ], + "support": { + "docs": "https://csv.thephpleague.com", + "issues": "https://github.com/thephpleague/csv/issues", + "rss": "https://github.com/thephpleague/csv/releases.atom", + "source": "https://github.com/thephpleague/csv" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2024-05-24T11:04:54+00:00" + }, + { + "name": "league/flysystem", + "version": "3.28.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "e611adab2b1ae2e3072fa72d62c62f52c2bf1f0c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/e611adab2b1ae2e3072fa72d62c62f52c2bf1f0c", + "reference": "e611adab2b1ae2e3072fa72d62c62f52c2bf1f0c", + "shasum": "" + }, + "require": { + "league/flysystem-local": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "conflict": { + "async-aws/core": "<1.19.0", + "async-aws/s3": "<1.14.0", + "aws/aws-sdk-php": "3.209.31 || 3.210.0", + "guzzlehttp/guzzle": "<7.0", + "guzzlehttp/ringphp": "<1.1.1", + "phpseclib/phpseclib": "3.0.15", + "symfony/http-client": "<5.2" + }, + "require-dev": { + "async-aws/s3": "^1.5 || ^2.0", + "async-aws/simple-s3": "^1.1 || ^2.0", + "aws/aws-sdk-php": "^3.295.10", + "composer/semver": "^3.0", + "ext-fileinfo": "*", + "ext-ftp": "*", + "ext-mongodb": "^1.3", + "ext-zip": "*", + "friendsofphp/php-cs-fixer": "^3.5", + "google/cloud-storage": "^1.23", + "guzzlehttp/psr7": "^2.6", + "microsoft/azure-storage-blob": "^1.1", + "mongodb/mongodb": "^1.2", + "phpseclib/phpseclib": "^3.0.36", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^9.5.11|^10.0", + "sabre/dav": "^4.6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "File storage abstraction for PHP", + "keywords": [ + "WebDAV", + "aws", + "cloud", + "file", + "files", + "filesystem", + "filesystems", + "ftp", + "s3", + "sftp", + "storage" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem/issues", + "source": "https://github.com/thephpleague/flysystem/tree/3.28.0" + }, + "time": "2024-05-22T10:09:12+00:00" + }, + { + "name": "league/flysystem-aws-s3-v3", + "version": "3.28.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git", + "reference": "22071ef1604bc776f5ff2468ac27a752514665c8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/22071ef1604bc776f5ff2468ac27a752514665c8", + "reference": "22071ef1604bc776f5ff2468ac27a752514665c8", + "shasum": "" + }, + "require": { + "aws/aws-sdk-php": "^3.295.10", + "league/flysystem": "^3.10.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "conflict": { + "guzzlehttp/guzzle": "<7.0", + "guzzlehttp/ringphp": "<1.1.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\AwsS3V3\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "AWS S3 filesystem adapter for Flysystem.", + "keywords": [ + "Flysystem", + "aws", + "file", + "files", + "filesystem", + "s3", + "storage" + ], + "support": { + "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.28.0" + }, + "time": "2024-05-06T20:05:52+00:00" + }, + { + "name": "league/flysystem-local", + "version": "3.28.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem-local.git", + "reference": "13f22ea8be526ea58c2ddff9e158ef7c296e4f40" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/13f22ea8be526ea58c2ddff9e158ef7c296e4f40", + "reference": "13f22ea8be526ea58c2ddff9e158ef7c296e4f40", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "league/flysystem": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\Local\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Local filesystem adapter for Flysystem.", + "keywords": [ + "Flysystem", + "file", + "files", + "filesystem", + "local" + ], + "support": { + "source": "https://github.com/thephpleague/flysystem-local/tree/3.28.0" + }, + "time": "2024-05-06T20:05:52+00:00" + }, + { + "name": "league/mime-type-detection", + "version": "1.15.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/mime-type-detection.git", + "reference": "ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301", + "reference": "ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301", + "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.15.0" + }, + "funding": [ + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2024-01-28T23:22:08+00:00" + }, + { + "name": "league/uri", + "version": "7.4.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri.git", + "reference": "bedb6e55eff0c933668addaa7efa1e1f2c417cc4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/bedb6e55eff0c933668addaa7efa1e1f2c417cc4", + "reference": "bedb6e55eff0c933668addaa7efa1e1f2c417cc4", + "shasum": "" + }, + "require": { + "league/uri-interfaces": "^7.3", + "php": "^8.1" + }, + "conflict": { + "league/uri-schemes": "^1.0" + }, + "suggest": { + "ext-bcmath": "to improve IPV4 host parsing", + "ext-fileinfo": "to create Data URI from file contennts", + "ext-gmp": "to improve IPV4 host parsing", + "ext-intl": "to handle IDN host with the best performance", + "jeremykendall/php-domain-parser": "to resolve Public Suffix and Top Level Domain", + "league/uri-components": "Needed to easily manipulate URI objects components", + "php-64bit": "to improve IPV4 host parsing", + "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "URI manipulation library", + "homepage": "https://uri.thephpleague.com", + "keywords": [ + "data-uri", + "file-uri", + "ftp", + "hostname", + "http", + "https", + "middleware", + "parse_str", + "parse_url", + "psr-7", + "query-string", + "querystring", + "rfc3986", + "rfc3987", + "rfc6570", + "uri", + "uri-template", + "url", + "ws" + ], + "support": { + "docs": "https://uri.thephpleague.com", + "forum": "https://thephpleague.slack.com", + "issues": "https://github.com/thephpleague/uri-src/issues", + "source": "https://github.com/thephpleague/uri/tree/7.4.1" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2024-03-23T07:42:40+00:00" + }, + { + "name": "league/uri-interfaces", + "version": "7.4.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri-interfaces.git", + "reference": "8d43ef5c841032c87e2de015972c06f3865ef718" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/8d43ef5c841032c87e2de015972c06f3865ef718", + "reference": "8d43ef5c841032c87e2de015972c06f3865ef718", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "php": "^8.1", + "psr/http-factory": "^1", + "psr/http-message": "^1.1 || ^2.0" + }, + "suggest": { + "ext-bcmath": "to improve IPV4 host parsing", + "ext-gmp": "to improve IPV4 host parsing", + "ext-intl": "to handle IDN host with the best performance", + "php-64bit": "to improve IPV4 host parsing", + "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "Common interfaces and classes for URI representation and interaction", + "homepage": "https://uri.thephpleague.com", + "keywords": [ + "data-uri", + "file-uri", + "ftp", + "hostname", + "http", + "https", + "parse_str", + "parse_url", + "psr-7", + "query-string", + "querystring", + "rfc3986", + "rfc3987", + "rfc6570", + "uri", + "url", + "ws" + ], + "support": { + "docs": "https://uri.thephpleague.com", + "forum": "https://thephpleague.slack.com", + "issues": "https://github.com/thephpleague/uri-src/issues", + "source": "https://github.com/thephpleague/uri-interfaces/tree/7.4.1" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2024-03-23T07:42:40+00:00" + }, + { + "name": "livewire/livewire", + "version": "v3.5.6", + "source": { + "type": "git", + "url": "https://github.com/livewire/livewire.git", + "reference": "597a2808d8d3001cc3ed5ce89a6ebab00f83b80f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/livewire/livewire/zipball/597a2808d8d3001cc3ed5ce89a6ebab00f83b80f", + "reference": "597a2808d8d3001cc3ed5ce89a6ebab00f83b80f", + "shasum": "" + }, + "require": { + "illuminate/database": "^10.0|^11.0", + "illuminate/routing": "^10.0|^11.0", + "illuminate/support": "^10.0|^11.0", + "illuminate/validation": "^10.0|^11.0", + "laravel/prompts": "^0.1.24", + "league/mime-type-detection": "^1.9", + "php": "^8.1", + "symfony/console": "^6.0|^7.0", + "symfony/http-kernel": "^6.2|^7.0" + }, + "require-dev": { + "calebporzio/sushi": "^2.1", + "laravel/framework": "^10.15.0|^11.0", + "mockery/mockery": "^1.3.1", + "orchestra/testbench": "^8.21.0|^9.0", + "orchestra/testbench-dusk": "^8.24|^9.1", + "phpunit/phpunit": "^10.4", + "psy/psysh": "^0.11.22|^0.12" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Livewire\\LivewireServiceProvider" + ], + "aliases": { + "Livewire": "Livewire\\Livewire" + } + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Livewire\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Caleb Porzio", + "email": "calebporzio@gmail.com" + } + ], + "description": "A front-end framework for Laravel.", + "support": { + "issues": "https://github.com/livewire/livewire/issues", + "source": "https://github.com/livewire/livewire/tree/v3.5.6" + }, + "funding": [ + { + "url": "https://github.com/livewire", + "type": "github" + } + ], + "time": "2024-08-19T11:52:18+00:00" + }, + { + "name": "masterminds/html5", + "version": "2.9.0", + "source": { + "type": "git", + "url": "https://github.com/Masterminds/html5-php.git", + "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/f5ac2c0b0a2eefca70b2ce32a5809992227e75a6", + "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8 || ^9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Masterminds\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matt Butcher", + "email": "technosophos@gmail.com" + }, + { + "name": "Matt Farina", + "email": "matt@mattfarina.com" + }, + { + "name": "Asmir Mustafic", + "email": "goetas@gmail.com" + } + ], + "description": "An HTML5 parser and serializer.", + "homepage": "http://masterminds.github.io/html5-php", + "keywords": [ + "HTML5", + "dom", + "html", + "parser", + "querypath", + "serializer", + "xml" + ], + "support": { + "issues": "https://github.com/Masterminds/html5-php/issues", + "source": "https://github.com/Masterminds/html5-php/tree/2.9.0" + }, + "time": "2024-03-31T07:05:07+00:00" + }, + { + "name": "monolog/monolog", + "version": "3.7.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "f4393b648b78a5408747de94fca38beb5f7e9ef8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f4393b648b78a5408747de94fca38beb5f7e9ef8", + "reference": "f4393b648b78a5408747de94fca38beb5f7e9ef8", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^2.0 || ^3.0" + }, + "provide": { + "psr/log-implementation": "3.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", + "graylog2/gelf-php": "^1.4.2 || ^2.0", + "guzzlehttp/guzzle": "^7.4.5", + "guzzlehttp/psr7": "^2.2", + "mongodb/mongodb": "^1.8", + "php-amqplib/php-amqplib": "~2.4 || ^3", + "phpstan/phpstan": "^1.9", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-strict-rules": "^1.4", + "phpunit/phpunit": "^10.5.17", + "predis/predis": "^1.1 || ^2", + "ruflin/elastica": "^7", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "ext-openssl": "Required to send log messages using SSL", + "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "https://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/3.7.0" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2024-06-28T09:40:51+00:00" + }, + { + "name": "mtdowling/jmespath.php", + "version": "2.8.0", + "source": { + "type": "git", + "url": "https://github.com/jmespath/jmespath.php.git", + "reference": "a2a865e05d5f420b50cc2f85bb78d565db12a6bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/a2a865e05d5f420b50cc2f85bb78d565db12a6bc", + "reference": "a2a865e05d5f420b50cc2f85bb78d565db12a6bc", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "symfony/polyfill-mbstring": "^1.17" + }, + "require-dev": { + "composer/xdebug-handler": "^3.0.3", + "phpunit/phpunit": "^8.5.33" + }, + "bin": [ + "bin/jp.php" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "files": [ + "src/JmesPath.php" + ], + "psr-4": { + "JmesPath\\": "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" + } + ], + "description": "Declaratively specify how to extract elements from a JSON document", + "keywords": [ + "json", + "jsonpath" + ], + "support": { + "issues": "https://github.com/jmespath/jmespath.php/issues", + "source": "https://github.com/jmespath/jmespath.php/tree/2.8.0" + }, + "time": "2024-09-04T18:46:31+00:00" + }, + { + "name": "nesbot/carbon", + "version": "3.8.0", + "source": { + "type": "git", + "url": "https://github.com/briannesbitt/Carbon.git", + "reference": "bbd3eef89af8ba66a3aa7952b5439168fbcc529f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/bbd3eef89af8ba66a3aa7952b5439168fbcc529f", + "reference": "bbd3eef89af8ba66a3aa7952b5439168fbcc529f", + "shasum": "" + }, + "require": { + "carbonphp/carbon-doctrine-types": "*", + "ext-json": "*", + "php": "^8.1", + "psr/clock": "^1.0", + "symfony/clock": "^6.3 || ^7.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/translation": "^4.4.18 || ^5.2.1|| ^6.0 || ^7.0" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "require-dev": { + "doctrine/dbal": "^3.6.3 || ^4.0", + "doctrine/orm": "^2.15.2 || ^3.0", + "friendsofphp/php-cs-fixer": "^3.57.2", + "kylekatarnls/multi-tester": "^2.5.3", + "ondrejmirtes/better-reflection": "^6.25.0.4", + "phpmd/phpmd": "^2.15.0", + "phpstan/extension-installer": "^1.3.1", + "phpstan/phpstan": "^1.11.2", + "phpunit/phpunit": "^10.5.20", + "squizlabs/php_codesniffer": "^3.9.0" + }, + "bin": [ + "bin/carbon" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev", + "dev-2.x": "2.x-dev" + }, + "laravel": { + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "autoload": { + "psr-4": { + "Carbon\\": "src/Carbon/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "https://markido.com" + }, + { + "name": "kylekatarnls", + "homepage": "https://github.com/kylekatarnls" + } + ], + "description": "An API extension for DateTime that supports 281 different languages.", + "homepage": "https://carbon.nesbot.com", + "keywords": [ + "date", + "datetime", + "time" + ], + "support": { + "docs": "https://carbon.nesbot.com/docs", + "issues": "https://github.com/briannesbitt/Carbon/issues", + "source": "https://github.com/briannesbitt/Carbon" + }, + "funding": [ + { + "url": "https://github.com/sponsors/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon#sponsor", + "type": "opencollective" + }, + { + "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme", + "type": "tidelift" + } + ], + "time": "2024-08-19T06:22:39+00:00" + }, + { + "name": "nette/schema", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/nette/schema.git", + "reference": "a6d3a6d1f545f01ef38e60f375d1cf1f4de98188" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/schema/zipball/a6d3a6d1f545f01ef38e60f375d1cf1f4de98188", + "reference": "a6d3a6d1f545f01ef38e60f375d1cf1f4de98188", + "shasum": "" + }, + "require": { + "nette/utils": "^4.0", + "php": "8.1 - 8.3" + }, + "require-dev": { + "nette/tester": "^2.4", + "phpstan/phpstan-nette": "^1.0", + "tracy/tracy": "^2.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "📐 Nette Schema: validating data structures against a given Schema.", + "homepage": "https://nette.org", + "keywords": [ + "config", + "nette" + ], + "support": { + "issues": "https://github.com/nette/schema/issues", + "source": "https://github.com/nette/schema/tree/v1.3.0" + }, + "time": "2023-12-11T11:54:22+00:00" + }, + { + "name": "nette/utils", + "version": "v4.0.5", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/736c567e257dbe0fcf6ce81b4d6dbe05c6899f96", + "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96", + "shasum": "" + }, + "require": { + "php": "8.0 - 8.4" + }, + "conflict": { + "nette/finder": "<3", + "nette/schema": "<1.2.2" + }, + "require-dev": { + "jetbrains/phpstorm-attributes": "dev-master", + "nette/tester": "^2.5", + "phpstan/phpstan": "^1.0", + "tracy/tracy": "^2.9" + }, + "suggest": { + "ext-gd": "to use Image", + "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", + "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", + "ext-json": "to use Nette\\Utils\\Json", + "ext-mbstring": "to use Strings::lower() etc...", + "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "homepage": "https://nette.org", + "keywords": [ + "array", + "core", + "datetime", + "images", + "json", + "nette", + "paginator", + "password", + "slugify", + "string", + "unicode", + "utf-8", + "utility", + "validation" + ], + "support": { + "issues": "https://github.com/nette/utils/issues", + "source": "https://github.com/nette/utils/tree/v4.0.5" + }, + "time": "2024-08-07T15:39:19+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v5.2.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "23c79fbbfb725fb92af9bcf41065c8e9a0d49ddb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/23c79fbbfb725fb92af9bcf41065c8e9a0d49ddb", + "reference": "23c79fbbfb725fb92af9bcf41065c8e9a0d49ddb", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "php": ">=7.4" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v5.2.0" + }, + "time": "2024-09-15T16:40:33+00:00" + }, + { + "name": "nunomaduro/termwind", + "version": "v2.1.0", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/termwind.git", + "reference": "e5f21eade88689536c0cdad4c3cd75f3ed26e01a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/e5f21eade88689536c0cdad4c3cd75f3ed26e01a", + "reference": "e5f21eade88689536c0cdad4c3cd75f3ed26e01a", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^8.2", + "symfony/console": "^7.0.4" + }, + "require-dev": { + "ergebnis/phpstan-rules": "^2.2.0", + "illuminate/console": "^11.1.1", + "laravel/pint": "^1.15.0", + "mockery/mockery": "^1.6.11", + "pestphp/pest": "^2.34.6", + "phpstan/phpstan": "^1.10.66", + "phpstan/phpstan-strict-rules": "^1.5.2", + "symfony/var-dumper": "^7.0.4", + "thecodingmachine/phpstan-strict-rules": "^1.0.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Termwind\\Laravel\\TermwindServiceProvider" + ] + }, + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, + "autoload": { + "files": [ + "src/Functions.php" + ], + "psr-4": { + "Termwind\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Its like Tailwind CSS, but for the console.", + "keywords": [ + "cli", + "console", + "css", + "package", + "php", + "style" + ], + "support": { + "issues": "https://github.com/nunomaduro/termwind/issues", + "source": "https://github.com/nunomaduro/termwind/tree/v2.1.0" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://github.com/xiCO2k", + "type": "github" + } + ], + "time": "2024-09-05T15:25:50+00:00" + }, + { + "name": "openspout/openspout", + "version": "v4.24.5", + "source": { + "type": "git", + "url": "https://github.com/openspout/openspout.git", + "reference": "393299ae21153f042f48b185f2adeb4b157d1d93" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/openspout/openspout/zipball/393299ae21153f042f48b185f2adeb4b157d1d93", + "reference": "393299ae21153f042f48b185f2adeb4b157d1d93", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-fileinfo": "*", + "ext-filter": "*", + "ext-libxml": "*", + "ext-xmlreader": "*", + "ext-zip": "*", + "php": "~8.1.0 || ~8.2.0 || ~8.3.0" + }, + "require-dev": { + "ext-zlib": "*", + "friendsofphp/php-cs-fixer": "^3.60.0", + "infection/infection": "^0.29.6", + "phpbench/phpbench": "^1.3.1", + "phpstan/phpstan": "^1.11.8", + "phpstan/phpstan-phpunit": "^1.4.0", + "phpstan/phpstan-strict-rules": "^1.6.0", + "phpunit/phpunit": "^10.5.20 || ^11.2.8" + }, + "suggest": { + "ext-iconv": "To handle non UTF-8 CSV files (if \"php-mbstring\" is not already installed or is too limited)", + "ext-mbstring": "To handle non UTF-8 CSV files (if \"iconv\" is not already installed)" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3.x-dev" + } + }, + "autoload": { + "psr-4": { + "OpenSpout\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Adrien Loison", + "email": "adrien@box.com" + } + ], + "description": "PHP Library to read and write spreadsheet files (CSV, XLSX and ODS), in a fast and scalable way", + "homepage": "https://github.com/openspout/openspout", + "keywords": [ + "OOXML", + "csv", + "excel", + "memory", + "odf", + "ods", + "office", + "open", + "php", + "read", + "scale", + "spreadsheet", + "stream", + "write", + "xlsx" + ], + "support": { + "issues": "https://github.com/openspout/openspout/issues", + "source": "https://github.com/openspout/openspout/tree/v4.24.5" + }, + "funding": [ + { + "url": "https://paypal.me/filippotessarotto", + "type": "custom" + }, + { + "url": "https://github.com/Slamdunk", + "type": "github" + } + ], + "time": "2024-07-26T05:48:04+00:00" + }, + { + "name": "phpoption/phpoption", + "version": "1.9.3", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/e3fac8b24f56113f7cb96af14958c0dd16330f54", + "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpOption\\": "src/PhpOption/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh" + }, + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ], + "support": { + "issues": "https://github.com/schmittjoh/php-option/issues", + "source": "https://github.com/schmittjoh/php-option/tree/1.9.3" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" + } + ], + "time": "2024-07-20T21:41:07+00:00" + }, + { + "name": "predis/predis", + "version": "v2.2.2", + "source": { + "type": "git", + "url": "https://github.com/predis/predis.git", + "reference": "b1d3255ed9ad4d7254f9f9bba386c99f4bb983d1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/predis/predis/zipball/b1d3255ed9ad4d7254f9f9bba386c99f4bb983d1", + "reference": "b1d3255ed9ad4d7254f9f9bba386c99f4bb983d1", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.3", + "phpstan/phpstan": "^1.9", + "phpunit/phpunit": "^8.0 || ~9.4.4" + }, + "suggest": { + "ext-relay": "Faster connection with in-memory caching (>=0.6.2)" + }, + "type": "library", + "autoload": { + "psr-4": { + "Predis\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Till Krüss", + "homepage": "https://till.im", + "role": "Maintainer" + } + ], + "description": "A flexible and feature-complete Redis client for PHP.", + "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/v2.2.2" + }, + "funding": [ + { + "url": "https://github.com/sponsors/tillkruss", + "type": "github" + } + ], + "time": "2023-09-13T16:42:03+00:00" + }, + { + "name": "psr/cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "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/3.0.0" + }, + "time": "2021-02-03T23:26:27+00:00" + }, + { + "name": "psr/clock", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Clock\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", + "keywords": [ + "clock", + "now", + "psr", + "psr-20", + "time" + ], + "support": { + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" + }, + "time": "2022-11-25T14:36:26+00:00" + }, + { + "name": "psr/container", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client" + }, + "time": "2023-09-23T14:17:50+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory" + }, + "time": "2024-04-15T12:06:14+00:00" + }, + { + "name": "psr/http-message", + "version": "2.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/2.0" + }, + "time": "2023-04-04T09:54:51+00:00" + }, + { + "name": "psr/log", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.2" + }, + "time": "2024-09-11T13:17:53+00:00" + }, + { + "name": "psr/simple-cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" + }, + "time": "2021-10-29T13:26:27+00:00" + }, + { + "name": "psy/psysh", + "version": "v0.12.4", + "source": { + "type": "git", + "url": "https://github.com/bobthecow/psysh.git", + "reference": "2fd717afa05341b4f8152547f142cd2f130f6818" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/2fd717afa05341b4f8152547f142cd2f130f6818", + "reference": "2fd717afa05341b4f8152547f142cd2f130f6818", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-tokenizer": "*", + "nikic/php-parser": "^5.0 || ^4.0", + "php": "^8.0 || ^7.4", + "symfony/console": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4", + "symfony/var-dumper": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4" + }, + "conflict": { + "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.2" + }, + "suggest": { + "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", + "ext-pdo-sqlite": "The doc command requires SQLite to work.", + "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well." + }, + "bin": [ + "bin/psysh" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.12.x-dev" + }, + "bamarni-bin": { + "bin-links": false, + "forward-command": false + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Psy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Justin Hileman", + "email": "justin@justinhileman.info", + "homepage": "http://justinhileman.com" + } + ], + "description": "An interactive shell for modern PHP.", + "homepage": "http://psysh.org", + "keywords": [ + "REPL", + "console", + "interactive", + "shell" + ], + "support": { + "issues": "https://github.com/bobthecow/psysh/issues", + "source": "https://github.com/bobthecow/psysh/tree/v0.12.4" + }, + "time": "2024-06-10T01:18:23+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "ramsey/collection", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/ramsey/collection.git", + "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/collection/zipball/a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", + "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "captainhook/plugin-composer": "^5.3", + "ergebnis/composer-normalize": "^2.28.3", + "fakerphp/faker": "^1.21", + "hamcrest/hamcrest-php": "^2.0", + "jangregor/phpstan-prophecy": "^1.0", + "mockery/mockery": "^1.5", + "php-parallel-lint/php-console-highlighter": "^1.0", + "php-parallel-lint/php-parallel-lint": "^1.3", + "phpcsstandards/phpcsutils": "^1.0.0-rc1", + "phpspec/prophecy-phpunit": "^2.0", + "phpstan/extension-installer": "^1.2", + "phpstan/phpstan": "^1.9", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5", + "psalm/plugin-mockery": "^1.1", + "psalm/plugin-phpunit": "^0.18.4", + "ramsey/coding-standard": "^2.0.3", + "ramsey/conventional-commits": "^1.3", + "vimeo/psalm": "^5.4" + }, + "type": "library", + "extra": { + "captainhook": { + "force-install": true + }, + "ramsey/conventional-commits": { + "configFile": "conventional-commits.json" + } + }, + "autoload": { + "psr-4": { + "Ramsey\\Collection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + } + ], + "description": "A PHP library for representing and manipulating collections.", + "keywords": [ + "array", + "collection", + "hash", + "map", + "queue", + "set" + ], + "support": { + "issues": "https://github.com/ramsey/collection/issues", + "source": "https://github.com/ramsey/collection/tree/2.0.0" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", + "type": "tidelift" + } + ], + "time": "2022-12-31T21:50:55+00:00" + }, + { + "name": "ramsey/uuid", + "version": "4.7.6", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "91039bc1faa45ba123c4328958e620d382ec7088" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/91039bc1faa45ba123c4328958e620d382ec7088", + "reference": "91039bc1faa45ba123c4328958e620d382ec7088", + "shasum": "" + }, + "require": { + "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12", + "ext-json": "*", + "php": "^8.0", + "ramsey/collection": "^1.2 || ^2.0" + }, + "replace": { + "rhumsaa/uuid": "self.version" + }, + "require-dev": { + "captainhook/captainhook": "^5.10", + "captainhook/plugin-composer": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "doctrine/annotations": "^1.8", + "ergebnis/composer-normalize": "^2.15", + "mockery/mockery": "^1.3", + "paragonie/random-lib": "^2", + "php-mock/php-mock": "^2.2", + "php-mock/php-mock-mockery": "^1.3", + "php-parallel-lint/php-parallel-lint": "^1.1", + "phpbench/phpbench": "^1.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^8.5 || ^9", + "ramsey/composer-repl": "^1.4", + "slevomat/coding-standard": "^8.4", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.9" + }, + "suggest": { + "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", + "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", + "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", + "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + }, + "type": "library", + "extra": { + "captainhook": { + "force-install": true + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Ramsey\\Uuid\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", + "keywords": [ + "guid", + "identifier", + "uuid" + ], + "support": { + "issues": "https://github.com/ramsey/uuid/issues", + "source": "https://github.com/ramsey/uuid/tree/4.7.6" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid", + "type": "tidelift" + } + ], + "time": "2024-04-27T21:32:50+00:00" + }, + { + "name": "ryangjchandler/blade-capture-directive", + "version": "v1.0.0", + "source": { + "type": "git", + "url": "https://github.com/ryangjchandler/blade-capture-directive.git", + "reference": "cb6f58663d97f17bece176295240b740835e14f1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ryangjchandler/blade-capture-directive/zipball/cb6f58663d97f17bece176295240b740835e14f1", + "reference": "cb6f58663d97f17bece176295240b740835e14f1", + "shasum": "" + }, + "require": { + "illuminate/contracts": "^10.0|^11.0", + "php": "^8.1", + "spatie/laravel-package-tools": "^1.9.2" + }, + "require-dev": { + "nunomaduro/collision": "^7.0|^8.0", + "nunomaduro/larastan": "^2.0", + "orchestra/testbench": "^8.0|^9.0", + "pestphp/pest": "^2.0", + "pestphp/pest-plugin-laravel": "^2.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^10.0", + "spatie/laravel-ray": "^1.26" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "RyanChandler\\BladeCaptureDirective\\BladeCaptureDirectiveServiceProvider" + ], + "aliases": { + "BladeCaptureDirective": "RyanChandler\\BladeCaptureDirective\\Facades\\BladeCaptureDirective" + } + } + }, + "autoload": { + "psr-4": { + "RyanChandler\\BladeCaptureDirective\\": "src", + "RyanChandler\\BladeCaptureDirective\\Database\\Factories\\": "database/factories" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ryan Chandler", + "email": "support@ryangjchandler.co.uk", + "role": "Developer" + } + ], + "description": "Create inline partials in your Blade templates with ease.", + "homepage": "https://github.com/ryangjchandler/blade-capture-directive", + "keywords": [ + "blade-capture-directive", + "laravel", + "ryangjchandler" + ], + "support": { + "issues": "https://github.com/ryangjchandler/blade-capture-directive/issues", + "source": "https://github.com/ryangjchandler/blade-capture-directive/tree/v1.0.0" + }, + "funding": [ + { + "url": "https://github.com/ryangjchandler", + "type": "github" + } + ], + "time": "2024-02-26T18:08:49+00:00" + }, + { + "name": "saade/filament-fullcalendar", + "version": "v3.2.2", + "source": { + "type": "git", + "url": "https://github.com/saade/filament-fullcalendar.git", + "reference": "d40410e6bc46057628fb9fa8f62b6090452914d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/saade/filament-fullcalendar/zipball/d40410e6bc46057628fb9fa8f62b6090452914d3", + "reference": "d40410e6bc46057628fb9fa8f62b6090452914d3", + "shasum": "" + }, + "require": { + "filament/filament": "^3.0", + "illuminate/contracts": "^10.0|^11.0", + "php": "^8.1", + "spatie/laravel-package-tools": "^1.13.5" + }, + "require-dev": { + "nunomaduro/collision": "^7.0|^8.0", + "nunomaduro/larastan": "^2.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "spatie/laravel-ray": "^1.26" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Saade\\FilamentFullCalendar\\FilamentFullCalendarServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Saade\\FilamentFullCalendar\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Saade", + "email": "saade@outlook.com.br", + "role": "Developer" + } + ], + "description": "The Most Popular JavaScript Calendar integrated with Filament 💛", + "homepage": "https://github.com/saade/filament-fullcalendar", + "keywords": [ + "filament-fullcalendar", + "laravel", + "saade" + ], + "support": { + "issues": "https://github.com/saade/filament-fullcalendar/issues", + "source": "https://github.com/saade/filament-fullcalendar/tree/v3.2.2" + }, + "funding": [ + { + "url": "https://github.com/saade", + "type": "github" + } + ], + "time": "2024-05-02T13:04:39+00:00" + }, + { + "name": "spatie/color", + "version": "1.5.3", + "source": { + "type": "git", + "url": "https://github.com/spatie/color.git", + "reference": "49739265900cabce4640cd26c3266fd8d2cca390" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/color/zipball/49739265900cabce4640cd26c3266fd8d2cca390", + "reference": "49739265900cabce4640cd26c3266fd8d2cca390", + "shasum": "" + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "pestphp/pest": "^1.22", + "phpunit/phpunit": "^6.5||^9.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\Color\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Sebastian De Deyne", + "email": "sebastian@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "A little library to handle color conversions", + "homepage": "https://github.com/spatie/color", + "keywords": [ + "color", + "conversion", + "rgb", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/color/issues", + "source": "https://github.com/spatie/color/tree/1.5.3" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2022-12-18T12:58:32+00:00" + }, + { + "name": "spatie/invade", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/spatie/invade.git", + "reference": "b920f6411d21df4e8610a138e2e87ae4957d7f63" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/invade/zipball/b920f6411d21df4e8610a138e2e87ae4957d7f63", + "reference": "b920f6411d21df4e8610a138e2e87ae4957d7f63", + "shasum": "" + }, + "require": { + "php": "^8.0" + }, + "require-dev": { + "pestphp/pest": "^1.20", + "phpstan/phpstan": "^1.4", + "spatie/ray": "^1.28" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Spatie\\Invade\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "role": "Developer" + } + ], + "description": "A PHP function to work with private properties and methods", + "homepage": "https://github.com/spatie/invade", + "keywords": [ + "invade", + "spatie" + ], + "support": { + "source": "https://github.com/spatie/invade/tree/2.1.0" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2024-05-17T09:06:10+00:00" + }, + { + "name": "spatie/laravel-package-tools", + "version": "1.16.5", + "source": { + "type": "git", + "url": "https://github.com/spatie/laravel-package-tools.git", + "reference": "c7413972cf22ffdff97b68499c22baa04eddb6a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/c7413972cf22ffdff97b68499c22baa04eddb6a2", + "reference": "c7413972cf22ffdff97b68499c22baa04eddb6a2", + "shasum": "" + }, + "require": { + "illuminate/contracts": "^9.28|^10.0|^11.0", + "php": "^8.0" + }, + "require-dev": { + "mockery/mockery": "^1.5", + "orchestra/testbench": "^7.7|^8.0", + "pestphp/pest": "^1.22", + "phpunit/phpunit": "^9.5.24", + "spatie/pest-plugin-test-time": "^1.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\LaravelPackageTools\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "role": "Developer" + } + ], + "description": "Tools for creating Laravel packages", + "homepage": "https://github.com/spatie/laravel-package-tools", + "keywords": [ + "laravel-package-tools", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/laravel-package-tools/issues", + "source": "https://github.com/spatie/laravel-package-tools/tree/1.16.5" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2024-08-27T18:56:10+00:00" + }, + { + "name": "spatie/laravel-permission", + "version": "6.9.0", + "source": { + "type": "git", + "url": "https://github.com/spatie/laravel-permission.git", + "reference": "fe973a58b44380d0e8620107259b7bda22f70408" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/laravel-permission/zipball/fe973a58b44380d0e8620107259b7bda22f70408", + "reference": "fe973a58b44380d0e8620107259b7bda22f70408", + "shasum": "" + }, + "require": { + "illuminate/auth": "^8.12|^9.0|^10.0|^11.0", + "illuminate/container": "^8.12|^9.0|^10.0|^11.0", + "illuminate/contracts": "^8.12|^9.0|^10.0|^11.0", + "illuminate/database": "^8.12|^9.0|^10.0|^11.0", + "php": "^8.0" + }, + "require-dev": { + "laravel/passport": "^11.0|^12.0", + "orchestra/testbench": "^6.23|^7.0|^8.0|^9.0", + "phpunit/phpunit": "^9.4|^10.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.x-dev", + "dev-master": "6.x-dev" + }, + "laravel": { + "providers": [ + "Spatie\\Permission\\PermissionServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Spatie\\Permission\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "Permission handling for Laravel 8.0 and up", + "homepage": "https://github.com/spatie/laravel-permission", + "keywords": [ + "acl", + "laravel", + "permission", + "permissions", + "rbac", + "roles", + "security", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/laravel-permission/issues", + "source": "https://github.com/spatie/laravel-permission/tree/6.9.0" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2024-06-22T23:04:52+00:00" + }, + { + "name": "symfony/clock", + "version": "v7.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/clock.git", + "reference": "3dfc8b084853586de51dd1441c6242c76a28cbe7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/clock/zipball/3dfc8b084853586de51dd1441c6242c76a28cbe7", + "reference": "3dfc8b084853586de51dd1441c6242c76a28cbe7", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/clock": "^1.0", + "symfony/polyfill-php83": "^1.28" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/now.php" + ], + "psr-4": { + "Symfony\\Component\\Clock\\": "" + }, + "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": "Decouples applications from the system clock", + "homepage": "https://symfony.com", + "keywords": [ + "clock", + "psr20", + "time" + ], + "support": { + "source": "https://github.com/symfony/clock/tree/v7.1.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-05-31T14:57:53+00:00" + }, + { + "name": "symfony/console", + "version": "v7.1.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "1eed7af6961d763e7832e874d7f9b21c3ea9c111" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/1eed7af6961d763e7832e874d7f9b21c3ea9c111", + "reference": "1eed7af6961d763e7832e874d7f9b21c3ea9c111", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^6.4|^7.0" + }, + "conflict": { + "symfony/dependency-injection": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/lock": "<6.4", + "symfony/process": "<6.4" + }, + "provide": { + "psr/log-implementation": "1.0|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/event-dispatcher": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command-line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v7.1.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-08-15T22:48:53+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v7.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "1c7cee86c6f812896af54434f8ce29c8d94f9ff4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/1c7cee86c6f812896af54434f8ce29c8d94f9ff4", + "reference": "1c7cee86c6f812896af54434f8ce29c8d94f9ff4", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Converts CSS selectors to XPath expressions", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/css-selector/tree/v7.1.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-05-31T14:57:53+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.5.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", + "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.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-04-18T09:32:20+00:00" + }, + { + "name": "symfony/error-handler", + "version": "v7.1.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "432bb369952795c61ca1def65e078c4a80dad13c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/432bb369952795c61ca1def65e078c4a80dad13c", + "reference": "432bb369952795c61ca1def65e078c4a80dad13c", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^6.4|^7.0" + }, + "conflict": { + "symfony/deprecation-contracts": "<2.5", + "symfony/http-kernel": "<6.4" + }, + "require-dev": { + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0" + }, + "bin": [ + "Resources/bin/patch-type-declarations" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\ErrorHandler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to manage errors and ease debugging PHP code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/error-handler/tree/v7.1.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": "2024-07-26T13:02:51+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v7.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7", + "reference": "9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7", + "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.1.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-05-31T14:57:53+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v3.5.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/8f93aec25d41b72493c6ddff14e916177c9efc50", + "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/event-dispatcher": "^1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.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-04-18T09:32:20+00:00" + }, + { + "name": "symfony/finder", + "version": "v7.1.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "d95bbf319f7d052082fb7af147e0f835a695e823" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/d95bbf319f7d052082fb7af147e0f835a695e823", + "reference": "d95bbf319f7d052082fb7af147e0f835a695e823", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "symfony/filesystem": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v7.1.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-08-13T14:28:19+00:00" + }, + { + "name": "symfony/html-sanitizer", + "version": "v7.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/html-sanitizer.git", + "reference": "737cbaa8082b696d0574afd91b9f471eca67fc65" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/html-sanitizer/zipball/737cbaa8082b696d0574afd91b9f471eca67fc65", + "reference": "737cbaa8082b696d0574afd91b9f471eca67fc65", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "league/uri": "^6.5|^7.0", + "masterminds/html5": "^2.7.2", + "php": ">=8.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HtmlSanitizer\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Titouan Galopin", + "email": "galopintitouan@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to sanitize untrusted HTML input for safe insertion into a document's DOM.", + "homepage": "https://symfony.com", + "keywords": [ + "Purifier", + "html", + "sanitizer" + ], + "support": { + "source": "https://github.com/symfony/html-sanitizer/tree/v7.1.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-05-31T14:55:39+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v7.1.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "f602d5c17d1fa02f8019ace2687d9d136b7f4a1a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/f602d5c17d1fa02f8019ace2687d9d136b7f4a1a", + "reference": "f602d5c17d1fa02f8019ace2687d9d136b7f4a1a", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php83": "^1.27" + }, + "conflict": { + "doctrine/dbal": "<3.6", + "symfony/cache": "<6.4" + }, + "require-dev": { + "doctrine/dbal": "^3.6|^4", + "predis/predis": "^1.1|^2.0", + "symfony/cache": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/rate-limiter": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v7.1.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": "2024-07-26T12:41:01+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v7.1.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "6efcbd1b3f444f631c386504fc83eeca25963747" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/6efcbd1b3f444f631c386504fc83eeca25963747", + "reference": "6efcbd1b3f444f631c386504fc83eeca25963747", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/error-handler": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/browser-kit": "<6.4", + "symfony/cache": "<6.4", + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/doctrine-bridge": "<6.4", + "symfony/form": "<6.4", + "symfony/http-client": "<6.4", + "symfony/http-client-contracts": "<2.5", + "symfony/mailer": "<6.4", + "symfony/messenger": "<6.4", + "symfony/translation": "<6.4", + "symfony/translation-contracts": "<2.5", + "symfony/twig-bridge": "<6.4", + "symfony/validator": "<6.4", + "symfony/var-dumper": "<6.4", + "twig/twig": "<3.0.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^6.4|^7.0", + "symfony/clock": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/css-selector": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/dom-crawler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/http-client-contracts": "^2.5|^3", + "symfony/process": "^6.4|^7.0", + "symfony/property-access": "^7.1", + "symfony/routing": "^6.4|^7.0", + "symfony/serializer": "^7.1", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", + "symfony/translation-contracts": "^2.5|^3", + "symfony/uid": "^6.4|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0", + "symfony/var-exporter": "^6.4|^7.0", + "twig/twig": "^3.0.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a structured process for converting a Request into a Response", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v7.1.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-08-30T17:02:28+00:00" + }, + { + "name": "symfony/mailer", + "version": "v7.1.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/mailer.git", + "reference": "8fcff0af9043c8f8a8e229437cea363e282f9aee" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mailer/zipball/8fcff0af9043c8f8a8e229437cea363e282f9aee", + "reference": "8fcff0af9043c8f8a8e229437cea363e282f9aee", + "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": "^6.4|^7.0", + "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.1.2" + }, + "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-06-28T08:00:31+00:00" + }, + { + "name": "symfony/mime", + "version": "v7.1.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "ccaa6c2503db867f472a587291e764d6a1e58758" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/ccaa6c2503db867f472a587291e764d6a1e58758", + "reference": "ccaa6c2503db867f472a587291e764d6a1e58758", + "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.1.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-08-13T14:28:19+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": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.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": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.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": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.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": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.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": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.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": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.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-php83", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491", + "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php83\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php83/tree/v1.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-uuid", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-uuid.git", + "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/21533be36c24be3f4b1669c4725c7d1d2bab4ae2", + "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-uuid": "*" + }, + "suggest": { + "ext-uuid": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Uuid\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for uuid functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.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/process", + "version": "v7.1.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "7f2f542c668ad6c313dc4a5e9c3321f733197eca" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/7f2f542c668ad6c313dc4a5e9c3321f733197eca", + "reference": "7f2f542c668ad6c313dc4a5e9c3321f733197eca", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v7.1.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": "2024-07-26T12:44:47+00:00" + }, + { + "name": "symfony/routing", + "version": "v7.1.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "1500aee0094a3ce1c92626ed8cf3c2037e86f5a7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/1500aee0094a3ce1c92626ed8cf3c2037e86f5a7", + "reference": "1500aee0094a3ce1c92626ed8cf3c2037e86f5a7", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/config": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/yaml": "<6.4" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Maps an HTTP request to a set of configuration variables", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/v7.1.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-08-29T08:16:25+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v3.5.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", + "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", + "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": { + "branch-alias": { + "dev-main": "3.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v3.5.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-04-18T09:32:20+00:00" + }, + { + "name": "symfony/string", + "version": "v7.1.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "6cd670a6d968eaeb1c77c2e76091c45c56bc367b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/6cd670a6d968eaeb1c77c2e76091c45c56bc367b", + "reference": "6cd670a6d968eaeb1c77c2e76091c45c56bc367b", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "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/emoji": "^7.1", + "symfony/error-handler": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^6.4|^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/v7.1.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-08-12T09:59:40+00:00" + }, + { + "name": "symfony/translation", + "version": "v7.1.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "8d5e50c813ba2859a6dfc99a0765c550507934a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/8d5e50c813ba2859a6dfc99a0765c550507934a1", + "reference": "8d5e50c813ba2859a6dfc99a0765c550507934a1", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^2.5|^3.0" + }, + "conflict": { + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<6.4", + "symfony/service-contracts": "<2.5", + "symfony/twig-bundle": "<6.4", + "symfony/yaml": "<6.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": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/http-client-contracts": "^2.5|^3.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/routing": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^6.4|^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/v7.1.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": "2024-07-26T12:41:01+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v3.5.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", + "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v3.5.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-04-18T09:32:20+00:00" + }, + { + "name": "symfony/uid", + "version": "v7.1.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/uid.git", + "reference": "82177535395109075cdb45a70533aa3d7a521cdf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/uid/zipball/82177535395109075cdb45a70533aa3d7a521cdf", + "reference": "82177535395109075cdb45a70533aa3d7a521cdf", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-uuid": "^1.15" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Uid\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to generate and represent UIDs", + "homepage": "https://symfony.com", + "keywords": [ + "UID", + "ulid", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/uid/tree/v7.1.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-08-12T09:59:40+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v7.1.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "a5fa7481b199090964d6fd5dab6294d5a870c7aa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/a5fa7481b199090964d6fd5dab6294d5a870c7aa", + "reference": "a5fa7481b199090964d6fd5dab6294d5a870c7aa", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/console": "<6.4" + }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/uid": "^6.4|^7.0", + "twig/twig": "^3.0.4" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides mechanisms for walking through any arbitrary PHP variable", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v7.1.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-08-30T16:12:47+00:00" + }, + { + "name": "tijsverkoyen/css-to-inline-styles", + "version": "v2.2.7", + "source": { + "type": "git", + "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", + "reference": "83ee6f38df0a63106a9e4536e3060458b74ccedb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/83ee6f38df0a63106a9e4536e3060458b74ccedb", + "reference": "83ee6f38df0a63106a9e4536e3060458b74ccedb", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "php": "^5.5 || ^7.0 || ^8.0", + "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "TijsVerkoyen\\CssToInlineStyles\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Tijs Verkoyen", + "email": "css_to_inline_styles@verkoyen.eu", + "role": "Developer" + } + ], + "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", + "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", + "support": { + "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.2.7" + }, + "time": "2023-12-08T13:03:43+00:00" + }, + { + "name": "vlucas/phpdotenv", + "version": "v5.6.1", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/a59a13791077fe3d44f90e7133eb68e7d22eaff2", + "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "graham-campbell/result-type": "^1.1.3", + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.3", + "symfony/polyfill-ctype": "^1.24", + "symfony/polyfill-mbstring": "^1.24", + "symfony/polyfill-php80": "^1.24" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "ext-filter": "*", + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" + }, + "suggest": { + "ext-filter": "Required to use the boolean validator." + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, + "branch-alias": { + "dev-master": "5.6-dev" + } + }, + "autoload": { + "psr-4": { + "Dotenv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "https://github.com/vlucas" + } + ], + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "support": { + "issues": "https://github.com/vlucas/phpdotenv/issues", + "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2024-07-20T21:52:34+00:00" + }, + { + "name": "voku/portable-ascii", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/voku/portable-ascii.git", + "reference": "b56450eed252f6801410d810c8e1727224ae0743" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b56450eed252f6801410d810c8e1727224ae0743", + "reference": "b56450eed252f6801410d810c8e1727224ae0743", + "shasum": "" + }, + "require": { + "php": ">=7.0.0" + }, + "require-dev": { + "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" + }, + "suggest": { + "ext-intl": "Use Intl for transliterator_transliterate() support" + }, + "type": "library", + "autoload": { + "psr-4": { + "voku\\": "src/voku/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lars Moelleken", + "homepage": "http://www.moelleken.org/" + } + ], + "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", + "homepage": "https://github.com/voku/portable-ascii", + "keywords": [ + "ascii", + "clean", + "php" + ], + "support": { + "issues": "https://github.com/voku/portable-ascii/issues", + "source": "https://github.com/voku/portable-ascii/tree/2.0.1" + }, + "funding": [ + { + "url": "https://www.paypal.me/moelleken", + "type": "custom" + }, + { + "url": "https://github.com/voku", + "type": "github" + }, + { + "url": "https://opencollective.com/portable-ascii", + "type": "open_collective" + }, + { + "url": "https://www.patreon.com/voku", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", + "type": "tidelift" + } + ], + "time": "2022-03-08T17:03:00+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "php": "^7.2 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.11.0" + }, + "time": "2022-06-03T18:03:27+00:00" + } + ], + "packages-dev": [ + { + "name": "archtechx/enums", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/archtechx/enums.git", + "reference": "37326d5e26cdfcc2810f4664cdd625ea4fd528d7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/archtechx/enums/zipball/37326d5e26cdfcc2810f4664cdd625ea4fd528d7", + "reference": "37326d5e26cdfcc2810f4664cdd625ea4fd528d7", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "larastan/larastan": "^2.4", + "orchestra/testbench": "^8.0", + "pestphp/pest": "^2.0", + "pestphp/pest-plugin-laravel": "^2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "ArchTech\\Enums\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Samuel Štancl", + "email": "samuel@archte.ch" + } + ], + "description": "Helpers for making PHP enums more lovable.", + "support": { + "issues": "https://github.com/archtechx/enums/issues", + "source": "https://github.com/archtechx/enums/tree/v1.1.0" + }, + "time": "2024-07-15T14:28:34+00:00" + }, + { + "name": "brianium/paratest", + "version": "v7.4.3", + "source": { + "type": "git", + "url": "https://github.com/paratestphp/paratest.git", + "reference": "64fcfd0e28a6b8078a19dbf9127be2ee645b92ec" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paratestphp/paratest/zipball/64fcfd0e28a6b8078a19dbf9127be2ee645b92ec", + "reference": "64fcfd0e28a6b8078a19dbf9127be2ee645b92ec", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-simplexml": "*", + "fidry/cpu-core-counter": "^1.1.0", + "jean85/pretty-package-versions": "^2.0.5", + "php": "~8.2.0 || ~8.3.0", + "phpunit/php-code-coverage": "^10.1.11 || ^11.0.0", + "phpunit/php-file-iterator": "^4.1.0 || ^5.0.0", + "phpunit/php-timer": "^6.0.0 || ^7.0.0", + "phpunit/phpunit": "^10.5.9 || ^11.0.3", + "sebastian/environment": "^6.0.1 || ^7.0.0", + "symfony/console": "^6.4.3 || ^7.0.3", + "symfony/process": "^6.4.3 || ^7.0.3" + }, + "require-dev": { + "doctrine/coding-standard": "^12.0.0", + "ext-pcov": "*", + "ext-posix": "*", + "phpstan/phpstan": "^1.10.58", + "phpstan/phpstan-deprecation-rules": "^1.1.4", + "phpstan/phpstan-phpunit": "^1.3.15", + "phpstan/phpstan-strict-rules": "^1.5.2", + "squizlabs/php_codesniffer": "^3.9.0", + "symfony/filesystem": "^6.4.3 || ^7.0.3" + }, + "bin": [ + "bin/paratest", + "bin/paratest.bat", + "bin/paratest_for_phpstorm" + ], + "type": "library", + "autoload": { + "psr-4": { + "ParaTest\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Scaturro", + "email": "scaturrob@gmail.com", + "role": "Developer" + }, + { + "name": "Filippo Tessarotto", + "email": "zoeslam@gmail.com", + "role": "Developer" + } + ], + "description": "Parallel testing for PHP", + "homepage": "https://github.com/paratestphp/paratest", + "keywords": [ + "concurrent", + "parallel", + "phpunit", + "testing" + ], + "support": { + "issues": "https://github.com/paratestphp/paratest/issues", + "source": "https://github.com/paratestphp/paratest/tree/v7.4.3" + }, + "funding": [ + { + "url": "https://github.com/sponsors/Slamdunk", + "type": "github" + }, + { + "url": "https://paypal.me/filippotessarotto", + "type": "paypal" + } + ], + "time": "2024-02-20T07:24:02+00:00" + }, + { + "name": "composer/class-map-generator", + "version": "1.3.4", + "source": { + "type": "git", + "url": "https://github.com/composer/class-map-generator.git", + "reference": "b1b3fd0b4eaf3ddf3ee230bc340bf3fff454a1a3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/class-map-generator/zipball/b1b3fd0b4eaf3ddf3ee230bc340bf3fff454a1a3", + "reference": "b1b3fd0b4eaf3ddf3ee230bc340bf3fff454a1a3", + "shasum": "" + }, + "require": { + "composer/pcre": "^2.1 || ^3.1", + "php": "^7.2 || ^8.0", + "symfony/finder": "^4.4 || ^5.3 || ^6 || ^7" + }, + "require-dev": { + "phpstan/phpstan": "^1.6", + "phpstan/phpstan-deprecation-rules": "^1", + "phpstan/phpstan-phpunit": "^1", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/filesystem": "^5.4 || ^6", + "symfony/phpunit-bridge": "^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\ClassMapGenerator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Utilities to scan PHP code and generate class maps.", + "keywords": [ + "classmap" + ], + "support": { + "issues": "https://github.com/composer/class-map-generator/issues", + "source": "https://github.com/composer/class-map-generator/tree/1.3.4" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2024-06-12T14:13:04+00:00" + }, + { + "name": "composer/pcre", + "version": "3.3.1", + "source": { + "type": "git", + "url": "https://github.com/composer/pcre.git", + "reference": "63aaeac21d7e775ff9bc9d45021e1745c97521c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/pcre/zipball/63aaeac21d7e775ff9bc9d45021e1745c97521c4", + "reference": "63aaeac21d7e775ff9bc9d45021e1745c97521c4", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<1.11.10" + }, + "require-dev": { + "phpstan/phpstan": "^1.11.10", + "phpstan/phpstan-strict-rules": "^1.1", + "phpunit/phpunit": "^8 || ^9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "autoload": { + "psr-4": { + "Composer\\Pcre\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "PCRE wrapping library that offers type-safe preg_* replacements.", + "keywords": [ + "PCRE", + "preg", + "regex", + "regular expression" + ], + "support": { + "issues": "https://github.com/composer/pcre/issues", + "source": "https://github.com/composer/pcre/tree/3.3.1" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2024-08-27T18:44:43+00:00" + }, + { + "name": "composer/semver", + "version": "3.4.2", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/c51258e759afdb17f1fd1fe83bc12baaef6309d6", + "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.4", + "symfony/phpunit-bridge": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Semver\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "Semver library that offers utilities, version constraint parsing and validation.", + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], + "support": { + "irc": "ircs://irc.libera.chat:6697/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/3.4.2" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2024-07-12T11:35:52+00:00" + }, + { + "name": "dragon-code/contracts", + "version": "2.23.0", + "source": { + "type": "git", + "url": "https://github.com/TheDragonCode/contracts.git", + "reference": "44dbad923f152e0dc2699fbac2d33b65dd6a8f7d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TheDragonCode/contracts/zipball/44dbad923f152e0dc2699fbac2d33b65dd6a8f7d", + "reference": "44dbad923f152e0dc2699fbac2d33b65dd6a8f7d", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "psr/http-message": "^1.0.1 || ^2.0", + "symfony/http-kernel": "^4.0 || ^5.0 || ^6.0 || ^7.0", + "symfony/polyfill-php80": "^1.23" + }, + "conflict": { + "andrey-helldar/contracts": "*" + }, + "require-dev": { + "illuminate/database": "^10.0 || ^11.0", + "phpdocumentor/reflection-docblock": "^5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "DragonCode\\Contracts\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro", + "homepage": "https://dragon-code.pro" + } + ], + "description": "A set of contracts for any project", + "keywords": [ + "contracts", + "interfaces" + ], + "support": { + "source": "https://github.com/TheDragonCode/contracts" + }, + "funding": [ + { + "url": "https://boosty.to/dragon-code", + "type": "boosty" + }, + { + "url": "https://www.donationalerts.com/r/dragon_code", + "type": "donationalerts" + }, + { + "url": "https://yoomoney.ru/to/410012608840929", + "type": "yoomoney" + } + ], + "time": "2024-03-11T20:15:12+00:00" + }, + { + "name": "dragon-code/pretty-array", + "version": "v4.1.0", + "source": { + "type": "git", + "url": "https://github.com/TheDragonCode/pretty-array.git", + "reference": "6c84e2454491b414efbd37985c322712cdf9012f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TheDragonCode/pretty-array/zipball/6c84e2454491b414efbd37985c322712cdf9012f", + "reference": "6c84e2454491b414efbd37985c322712cdf9012f", + "shasum": "" + }, + "require": { + "dragon-code/contracts": "^2.20", + "dragon-code/support": "^6.11.2", + "ext-dom": "*", + "ext-mbstring": "*", + "php": "^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^10.2" + }, + "suggest": { + "symfony/thanks": "Give thanks (in the form of a GitHub) to your fellow PHP package maintainers" + }, + "type": "library", + "autoload": { + "psr-4": { + "DragonCode\\PrettyArray\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro", + "homepage": "https://github.com/andrey-helldar" + } + ], + "description": "Simple conversion of an array to a pretty view", + "keywords": [ + "andrey helldar", + "array", + "dragon", + "dragon code", + "pretty", + "pretty array" + ], + "support": { + "issues": "https://github.com/TheDragonCode/pretty-array/issues", + "source": "https://github.com/TheDragonCode/pretty-array" + }, + "funding": [ + { + "url": "https://boosty.to/dragon-code", + "type": "boosty" + }, + { + "url": "https://github.com/sponsors/TheDragonCode", + "type": "github" + }, + { + "url": "https://opencollective.com/dragon-code", + "type": "open_collective" + }, + { + "url": "https://yoomoney.ru/to/410012608840929", + "type": "yoomoney" + } + ], + "time": "2023-06-02T11:37:44+00:00" + }, + { + "name": "dragon-code/support", + "version": "6.15.0", + "source": { + "type": "git", + "url": "https://github.com/TheDragonCode/support.git", + "reference": "087d7baaa963cdbb24e901dc27e10cdc31c2529c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TheDragonCode/support/zipball/087d7baaa963cdbb24e901dc27e10cdc31c2529c", + "reference": "087d7baaa963cdbb24e901dc27e10cdc31c2529c", + "shasum": "" + }, + "require": { + "dragon-code/contracts": "^2.22.0", + "ext-bcmath": "*", + "ext-ctype": "*", + "ext-dom": "*", + "ext-json": "*", + "ext-mbstring": "*", + "php": "^8.1", + "psr/http-message": "^1.0.1 || ^2.0", + "symfony/polyfill-php81": "^1.25", + "voku/portable-ascii": "^1.4.8 || ^2.0.1" + }, + "conflict": { + "andrey-helldar/support": "*" + }, + "require-dev": { + "illuminate/contracts": "^9.0 || ^10.0 || ^11.0", + "phpunit/phpunit": "^9.6 || ^11.0", + "symfony/var-dumper": "^6.0 || ^7.0" + }, + "suggest": { + "dragon-code/laravel-support": "Various helper files for the Laravel and Lumen frameworks", + "symfony/thanks": "Give thanks (in the form of a GitHub) to your fellow PHP package maintainers" + }, + "type": "library", + "extra": { + "dragon-code": { + "docs-generator": { + "preview": { + "brand": "php", + "vendor": "The Dragon Code" + } + } + } + }, + "autoload": { + "psr-4": { + "DragonCode\\Support\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro", + "homepage": "https://dragon-code.pro" + } + ], + "description": "Support package is a collection of helpers and tools for any project.", + "keywords": [ + "dragon", + "dragon-code", + "framework", + "helper", + "helpers", + "laravel", + "php", + "support", + "symfony", + "yii", + "yii2" + ], + "support": { + "issues": "https://github.com/TheDragonCode/support/issues", + "source": "https://github.com/TheDragonCode/support" + }, + "funding": [ + { + "url": "https://boosty.to/dragon-code", + "type": "boosty" + }, + { + "url": "https://www.donationalerts.com/r/dragon_code", + "type": "donationalerts" + }, + { + "url": "https://yoomoney.ru/to/410012608840929", + "type": "yoomoney" + } + ], + "time": "2024-09-07T13:27:37+00:00" + }, + { + "name": "fakerphp/faker", + "version": "v1.23.1", + "source": { + "type": "git", + "url": "https://github.com/FakerPHP/Faker.git", + "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/bfb4fe148adbf78eff521199619b93a52ae3554b", + "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b", + "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.23.1" + }, + "time": "2024-01-02T13:46:09+00:00" + }, + { + "name": "fidry/cpu-core-counter", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/theofidry/cpu-core-counter.git", + "reference": "8520451a140d3f46ac33042715115e290cf5785f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/8520451a140d3f46ac33042715115e290cf5785f", + "reference": "8520451a140d3f46ac33042715115e290cf5785f", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "fidry/makefile": "^0.2.0", + "fidry/php-cs-fixer-config": "^1.1.2", + "phpstan/extension-installer": "^1.2.0", + "phpstan/phpstan": "^1.9.2", + "phpstan/phpstan-deprecation-rules": "^1.0.0", + "phpstan/phpstan-phpunit": "^1.2.2", + "phpstan/phpstan-strict-rules": "^1.4.4", + "phpunit/phpunit": "^8.5.31 || ^9.5.26", + "webmozarts/strict-phpunit": "^7.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Fidry\\CpuCoreCounter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Théo FIDRY", + "email": "theo.fidry@gmail.com" + } + ], + "description": "Tiny utility to get the number of CPU cores.", + "keywords": [ + "CPU", + "core" + ], + "support": { + "issues": "https://github.com/theofidry/cpu-core-counter/issues", + "source": "https://github.com/theofidry/cpu-core-counter/tree/1.2.0" + }, + "funding": [ + { + "url": "https://github.com/theofidry", + "type": "github" + } + ], + "time": "2024-08-06T10:04:20+00:00" + }, + { + "name": "filp/whoops", + "version": "2.15.4", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "a139776fa3f5985a50b509f2a02ff0f709d2a546" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/a139776fa3f5985a50b509f2a02ff0f709d2a546", + "reference": "a139776fa3f5985a50b509f2a02ff0f709d2a546", + "shasum": "" + }, + "require": { + "php": "^5.5.9 || ^7.0 || ^8.0", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "require-dev": { + "mockery/mockery": "^0.9 || ^1.0", + "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.3", + "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0" + }, + "suggest": { + "symfony/var-dumper": "Pretty print complex values better with var-dumper available", + "whoops/soap": "Formats errors as SOAP responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Whoops\\": "src/Whoops/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Filipe Dobreira", + "homepage": "https://github.com/filp", + "role": "Developer" + } + ], + "description": "php error handling for cool kids", + "homepage": "https://filp.github.io/whoops/", + "keywords": [ + "error", + "exception", + "handling", + "library", + "throwable", + "whoops" + ], + "support": { + "issues": "https://github.com/filp/whoops/issues", + "source": "https://github.com/filp/whoops/tree/2.15.4" + }, + "funding": [ + { + "url": "https://github.com/denis-sokolov", + "type": "github" + } + ], + "time": "2023-11-03T12:00:00+00:00" + }, + { + "name": "hamcrest/hamcrest-php", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "shasum": "" + }, + "require": { + "php": "^5.3|^7.0|^8.0" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" + }, + "require-dev": { + "phpunit/php-file-iterator": "^1.4 || ^2.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "classmap": [ + "hamcrest" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "This is the PHP port of Hamcrest Matchers", + "keywords": [ + "test" + ], + "support": { + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" + }, + "time": "2020-07-09T08:09:16+00:00" + }, + { + "name": "jean85/pretty-package-versions", + "version": "2.0.6", + "source": { + "type": "git", + "url": "https://github.com/Jean85/pretty-package-versions.git", + "reference": "f9fdd29ad8e6d024f52678b570e5593759b550b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/f9fdd29ad8e6d024f52678b570e5593759b550b4", + "reference": "f9fdd29ad8e6d024f52678b570e5593759b550b4", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2.0.0", + "php": "^7.1|^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.2", + "jean85/composer-provided-replaced-stub-package": "^1.0", + "phpstan/phpstan": "^1.4", + "phpunit/phpunit": "^7.5|^8.5|^9.4", + "vimeo/psalm": "^4.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Jean85\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alessandro Lai", + "email": "alessandro.lai85@gmail.com" + } + ], + "description": "A library to get pretty versions strings of installed dependencies", + "keywords": [ + "composer", + "package", + "release", + "versions" + ], + "support": { + "issues": "https://github.com/Jean85/pretty-package-versions/issues", + "source": "https://github.com/Jean85/pretty-package-versions/tree/2.0.6" + }, + "time": "2024-03-08T09:58:59+00:00" + }, + { + "name": "larastan/larastan", + "version": "v2.9.8", + "source": { + "type": "git", + "url": "https://github.com/larastan/larastan.git", + "reference": "340badd89b0eb5bddbc503a4829c08cf9a2819d7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/larastan/larastan/zipball/340badd89b0eb5bddbc503a4829c08cf9a2819d7", + "reference": "340badd89b0eb5bddbc503a4829c08cf9a2819d7", + "shasum": "" + }, + "require": { + "ext-json": "*", + "illuminate/console": "^9.52.16 || ^10.28.0 || ^11.0", + "illuminate/container": "^9.52.16 || ^10.28.0 || ^11.0", + "illuminate/contracts": "^9.52.16 || ^10.28.0 || ^11.0", + "illuminate/database": "^9.52.16 || ^10.28.0 || ^11.0", + "illuminate/http": "^9.52.16 || ^10.28.0 || ^11.0", + "illuminate/pipeline": "^9.52.16 || ^10.28.0 || ^11.0", + "illuminate/support": "^9.52.16 || ^10.28.0 || ^11.0", + "php": "^8.0.2", + "phpmyadmin/sql-parser": "^5.9.0", + "phpstan/phpstan": "^1.11.2" + }, + "require-dev": { + "doctrine/coding-standard": "^12.0", + "nikic/php-parser": "^4.19.1", + "orchestra/canvas": "^7.11.1 || ^8.11.0 || ^9.0.2", + "orchestra/testbench": "^7.33.0 || ^8.13.0 || ^9.0.3", + "phpunit/phpunit": "^9.6.13 || ^10.5.16" + }, + "suggest": { + "orchestra/testbench": "Using Larastan for analysing a package needs Testbench" + }, + "type": "phpstan-extension", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "autoload": { + "psr-4": { + "Larastan\\Larastan\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Can Vural", + "email": "can9119@gmail.com" + }, + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Larastan - Discover bugs in your code without running it. A phpstan/phpstan wrapper for Laravel", + "keywords": [ + "PHPStan", + "code analyse", + "code analysis", + "larastan", + "laravel", + "package", + "php", + "static analysis" + ], + "support": { + "issues": "https://github.com/larastan/larastan/issues", + "source": "https://github.com/larastan/larastan/tree/v2.9.8" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/canvural", + "type": "github" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], + "time": "2024-07-06T17:46:02+00:00" + }, + { + "name": "laravel-lang/actions", + "version": "1.8.5", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/actions.git", + "reference": "bc59d4a92e13d35d07a45265552a830c47fbe878" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/actions/zipball/bc59d4a92e13d35d07a45265552a830c47fbe878", + "reference": "bc59d4a92e13d35d07a45265552a830c47fbe878", + "shasum": "" + }, + "require": { + "ext-json": "*", + "laravel-lang/publisher": "^14.0 || ^15.0 || ^16.0", + "php": "^8.1" + }, + "require-dev": { + "laravel-lang/status-generator": "^2.3.1", + "phpunit/phpunit": "^10.0", + "symfony/var-dumper": "^6.3 || ^7.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "LaravelLang\\Actions\\ServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "LaravelLang\\Actions\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro", + "homepage": "https://dragon-code.pro" + }, + { + "name": "Laravel Lang Team", + "homepage": "https://laravel-lang.com" + } + ], + "description": "Translation of buttons and other action elements", + "keywords": [ + "actions", + "buttons", + "lang", + "languages", + "laravel", + "translations" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/actions/issues", + "source": "https://github.com/Laravel-Lang/actions/tree/1.8.5" + }, + "time": "2024-09-07T11:55:41+00:00" + }, + { + "name": "laravel-lang/attributes", + "version": "2.10.8", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/attributes.git", + "reference": "cf53eb18a47692045ac135e5be1e3fa979232504" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/attributes/zipball/cf53eb18a47692045ac135e5be1e3fa979232504", + "reference": "cf53eb18a47692045ac135e5be1e3fa979232504", + "shasum": "" + }, + "require": { + "ext-json": "*", + "laravel-lang/publisher": "^14.0 || ^15.0 || ^16.0", + "php": "^8.1" + }, + "require-dev": { + "laravel-lang/status-generator": "^1.19 || ^2.0", + "phpunit/phpunit": "^10.0", + "symfony/var-dumper": "^6.0 || ^7.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "LaravelLang\\Attributes\\ServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "LaravelLang\\Attributes\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro" + }, + { + "name": "Laravel-Lang Team", + "homepage": "https://github.com/Laravel-Lang" + } + ], + "description": "List of 126 languages for form field names", + "keywords": [ + "attributes", + "fields", + "form", + "lang", + "languages", + "laravel", + "messages", + "translations", + "validation" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/attributes/issues", + "source": "https://github.com/Laravel-Lang/attributes/tree/2.10.8" + }, + "time": "2024-08-30T09:34:14+00:00" + }, + { + "name": "laravel-lang/common", + "version": "6.4.0", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/common.git", + "reference": "36c0270180f71420c1166c26f38dc25e1c8b7f64" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/common/zipball/36c0270180f71420c1166c26f38dc25e1c8b7f64", + "reference": "36c0270180f71420c1166c26f38dc25e1c8b7f64", + "shasum": "" + }, + "require": { + "laravel-lang/actions": "^1.8.3", + "laravel-lang/attributes": "^2.10.7", + "laravel-lang/http-statuses": "^3.8.3", + "laravel-lang/json-fallback": "^2.1", + "laravel-lang/lang": "^13.12 || ^14.0 || ^15.5.1", + "laravel-lang/locales": "^2.8", + "laravel-lang/models": "^1.0", + "laravel-lang/publisher": "^16.4", + "laravel-lang/routes": "^1.0", + "php": "^8.1" + }, + "require-dev": { + "dragon-code/support": "^6.13", + "orchestra/testbench": "^8.17 || ^9.1.2", + "phpunit/phpunit": "^10.5.20", + "symfony/var-dumper": "^6.4 || ^7.1.1" + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laravel-Lang Team", + "homepage": "https://github.com/Laravel-Lang" + }, + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro", + "homepage": "https://dragon-code.pro" + } + ], + "description": "Easily connect the necessary language packs to the application", + "keywords": [ + "Laravel-lang", + "actions", + "attribute", + "attributes", + "breeze", + "buttons", + "cashier", + "fortify", + "framework", + "http", + "http-status", + "http-status-code", + "i18n", + "jetstream", + "lang", + "language", + "languages", + "laravel", + "locale", + "locales", + "localization", + "localizations", + "nova", + "publisher", + "spark", + "translation", + "translations", + "ui" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/common/issues", + "source": "https://github.com/Laravel-Lang/common" + }, + "time": "2024-07-06T16:48:35+00:00" + }, + { + "name": "laravel-lang/config", + "version": "1.10.0", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/config.git", + "reference": "67c9273a2e5487441a7034c2422bb1527200bce5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/config/zipball/67c9273a2e5487441a7034c2422bb1527200bce5", + "reference": "67c9273a2e5487441a7034c2422bb1527200bce5", + "shasum": "" + }, + "require": { + "archtechx/enums": "^1.0", + "illuminate/config": "^10.0 || ^11.0", + "illuminate/support": "^10.0 || ^11.0", + "laravel-lang/locale-list": "^1.4", + "php": "^8.1" + }, + "require-dev": { + "orchestra/testbench": "^8.23 || ^9.1", + "pestphp/pest": "^2.34" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "LaravelLang\\Config\\ServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "LaravelLang\\Config\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro", + "homepage": "https://dragon-code.pro" + }, + { + "name": "Laravel-Lang Team", + "homepage": "https://laravel-lang.com" + } + ], + "description": "The Laravel-Lang config package", + "keywords": [ + "Laravel-lang", + "Settings", + "config", + "lang", + "languages", + "laravel", + "locale", + "locales", + "localization", + "localizations", + "translation", + "translations" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/config/issues", + "source": "https://github.com/Laravel-Lang/config/tree/1.10.0" + }, + "time": "2024-09-07T11:28:53+00:00" + }, + { + "name": "laravel-lang/http-statuses", + "version": "3.8.4", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/http-statuses.git", + "reference": "0e8b1af2835f951f5587f6c635ea6b929f275415" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/http-statuses/zipball/0e8b1af2835f951f5587f6c635ea6b929f275415", + "reference": "0e8b1af2835f951f5587f6c635ea6b929f275415", + "shasum": "" + }, + "require": { + "ext-json": "*", + "laravel-lang/publisher": "^14.1 || ^15.0 || ^16.0", + "php": "^8.1" + }, + "require-dev": { + "laravel-lang/status-generator": "^1.19 || ^2.0", + "phpunit/phpunit": "^10.0", + "symfony/var-dumper": "^6.0 || ^7.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "LaravelLang\\HttpStatuses\\ServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "LaravelLang\\HttpStatuses\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro" + }, + { + "name": "Laravel-Lang Team", + "homepage": "https://github.com/Laravel-Lang" + } + ], + "description": "List of 126 languages for HTTP statuses", + "keywords": [ + "http", + "lang", + "languages", + "laravel", + "messages", + "status", + "translations" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/http-statuses/issues", + "source": "https://github.com/Laravel-Lang/http-statuses/tree/3.8.4" + }, + "time": "2024-07-20T18:15:58+00:00" + }, + { + "name": "laravel-lang/json-fallback", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/json-fallback.git", + "reference": "597865ffcef81b7e92227ea73ff3a9a3372fb91a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/json-fallback/zipball/597865ffcef81b7e92227ea73ff3a9a3372fb91a", + "reference": "597865ffcef81b7e92227ea73ff3a9a3372fb91a", + "shasum": "" + }, + "require": { + "illuminate/support": "^10.0 || ^11.0", + "illuminate/translation": "^10.0 || ^11.0", + "php": "^8.1" + }, + "require-dev": { + "orchestra/testbench": "^8.0 || ^9.0", + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "LaravelLang\\JsonFallback\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro", + "homepage": "https://github.com/andrey-helldar" + }, + { + "name": "Felipe Dsdev", + "homepage": "https://github.com/felipe-dsdev" + } + ], + "description": "Adds support for fallback JSON string translation", + "support": { + "issues": "https://github.com/Laravel-Lang/json-fallback/issues", + "source": "https://github.com/Laravel-Lang/json-fallback/tree/2.1.0" + }, + "time": "2024-03-13T09:18:03+00:00" + }, + { + "name": "laravel-lang/lang", + "version": "15.7.3", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/lang.git", + "reference": "0877b8d0881cfe0881a4addd4e9319b736bd5c77" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/lang/zipball/0877b8d0881cfe0881a4addd4e9319b736bd5c77", + "reference": "0877b8d0881cfe0881a4addd4e9319b736bd5c77", + "shasum": "" + }, + "require": { + "ext-json": "*", + "laravel-lang/publisher": "^16.0", + "php": "^8.2" + }, + "conflict": { + "laravel/framework": "<11.0.7" + }, + "require-dev": { + "laravel-lang/status-generator": "^2.11", + "phpunit/phpunit": "^10.0", + "symfony/var-dumper": "^7.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "LaravelLang\\Lang\\ServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "LaravelLang\\Lang\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laravel-Lang Team", + "homepage": "https://github.com/Laravel-Lang" + } + ], + "description": "List of 126 languages for Laravel Framework, Laravel Jetstream, Laravel Fortify, Laravel Breeze, Laravel Cashier, Laravel Nova, Laravel Spark and Laravel UI", + "keywords": [ + "lang", + "languages", + "laravel", + "lpm" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/lang/issues", + "source": "https://github.com/Laravel-Lang/lang" + }, + "time": "2024-08-28T08:28:47+00:00" + }, + { + "name": "laravel-lang/locale-list", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/locale-list.git", + "reference": "48b8e4304f8b1ad34456270d35d44ca0c3e6ea0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/locale-list/zipball/48b8e4304f8b1ad34456270d35d44ca0c3e6ea0d", + "reference": "48b8e4304f8b1ad34456270d35d44ca0c3e6ea0d", + "shasum": "" + }, + "require": { + "archtechx/enums": "^0.3.2 || ^1.0", + "php": "^8.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "LaravelLang\\LocaleList\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro", + "homepage": "https://dragon-code.pro" + }, + { + "name": "Laravel-Lang Team", + "homepage": "https://laravel-lang.com" + } + ], + "description": "List of localizations available in Laravel Lang projects", + "keywords": [ + "Laravel-lang", + "lang", + "languages", + "laravel", + "locale", + "locales", + "localization", + "translation", + "translations" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/locale-list/issues", + "source": "https://github.com/Laravel-Lang/locale-list" + }, + "time": "2024-06-01T00:24:42+00:00" + }, + { + "name": "laravel-lang/locales", + "version": "2.9.2", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/locales.git", + "reference": "e7914ccfb91432ebebacf46697b573a330d702c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/locales/zipball/e7914ccfb91432ebebacf46697b573a330d702c7", + "reference": "e7914ccfb91432ebebacf46697b573a330d702c7", + "shasum": "" + }, + "require": { + "archtechx/enums": "^0.3.2 || ^1.0", + "dragon-code/support": "^6.11.3", + "ext-json": "*", + "illuminate/collections": "^10.0 || ^11.0", + "laravel-lang/config": "^1.0.2", + "laravel-lang/locale-list": "^1.2", + "laravel-lang/native-country-names": "^1.3", + "laravel-lang/native-currency-names": "^1.3", + "laravel-lang/native-locale-names": "^2.2", + "php": "^8.1" + }, + "require-dev": { + "orchestra/testbench": "^8.0 || ^9.0", + "pestphp/pest": "^2.24.1", + "symfony/var-dumper": "^6.0 || ^7.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "LaravelLang\\Locales\\ServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "LaravelLang\\Locales\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro" + }, + { + "name": "Laravel-Lang Team", + "homepage": "https://laravel-lang.com" + } + ], + "description": "Basic functionality for working with localizations", + "keywords": [ + "laravel", + "locale", + "locales", + "localization", + "translation", + "translations" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/locales/issues", + "source": "https://github.com/Laravel-Lang/locales" + }, + "time": "2024-06-24T09:56:41+00:00" + }, + { + "name": "laravel-lang/models", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/models.git", + "reference": "b46f5ff2990755c79ac408255e70b5c8a38063e0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/models/zipball/b46f5ff2990755c79ac408255e70b5c8a38063e0", + "reference": "b46f5ff2990755c79ac408255e70b5c8a38063e0", + "shasum": "" + }, + "require": { + "composer/class-map-generator": "^1.3", + "dragon-code/support": "^6.13", + "illuminate/database": "^10.0 || ^11.0", + "illuminate/support": "^10.0 || ^11.0", + "laravel-lang/config": "^1.9", + "laravel-lang/locales": "^2.9.2", + "laravel/prompts": "^0.1.24", + "php": "^8.1" + }, + "require-dev": { + "orchestra/testbench": "^8.0 || ^9.0", + "pestphp/pest": "^2.34", + "pestphp/pest-plugin-laravel": "^2.4", + "symfony/var-dumper": "^6.0 || ^7.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "LaravelLang\\Models\\ServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "LaravelLang\\Models\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro", + "homepage": "https://dragon-code.pro", + "role": "Maintainer" + }, + { + "name": "Andrey Sokolov", + "email": "walfireru@gmail.com", + "homepage": "https://github.com/Quiss", + "role": "Usability consultant" + }, + { + "name": "Laravel-Lang Team", + "homepage": "https://github.com/Laravel-Lang" + } + ], + "description": "Easy and fast way to localize models", + "keywords": [ + "database", + "l18n", + "languages", + "laravel", + "locales", + "localization", + "models", + "translate", + "translations" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/models/issues", + "source": "https://github.com/Laravel-Lang/models" + }, + "time": "2024-08-31T15:47:28+00:00" + }, + { + "name": "laravel-lang/native-country-names", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/native-country-names.git", + "reference": "cddca6627c8732770a2e2c11c921753b6d0adb66" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/native-country-names/zipball/cddca6627c8732770a2e2c11c921753b6d0adb66", + "reference": "cddca6627c8732770a2e2c11c921753b6d0adb66", + "shasum": "" + }, + "require": { + "dragon-code/support": "^6.11", + "ext-json": "*", + "illuminate/collections": "^10.0 || ^11.0", + "php": "^8.1" + }, + "require-dev": { + "illuminate/support": "^10.0 || ^11.0", + "laravel-lang/locale-list": "^1.2", + "pestphp/pest": "^2.24.3", + "punic/punic": "^3.8", + "symfony/console": "^6.3 || ^7.0", + "symfony/process": "^6.3 || ^7.0", + "symfony/var-dumper": "^6.3 || ^7.0", + "vlucas/phpdotenv": "^5.6" + }, + "type": "library", + "autoload": { + "psr-4": { + "LaravelLang\\NativeCountryNames\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro" + }, + { + "name": "Laravel-Lang Team", + "homepage": "https://laravel-lang.com" + } + ], + "description": "The project contains native translations of country names", + "keywords": [ + "Laravel-lang", + "countries", + "country", + "lang", + "languages", + "laravel", + "locale", + "locales", + "localization", + "territories", + "territory", + "translation", + "translations" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/native-country-names/issues", + "source": "https://github.com/Laravel-Lang/native-country-names" + }, + "time": "2024-03-13T09:34:55+00:00" + }, + { + "name": "laravel-lang/native-currency-names", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/native-currency-names.git", + "reference": "2e0fbe039421ac753b4fd5256bd239147a0a88fe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/native-currency-names/zipball/2e0fbe039421ac753b4fd5256bd239147a0a88fe", + "reference": "2e0fbe039421ac753b4fd5256bd239147a0a88fe", + "shasum": "" + }, + "require": { + "dragon-code/support": "^6.11", + "ext-json": "*", + "illuminate/collections": "^10.0 || ^11.0", + "php": "^8.1" + }, + "require-dev": { + "illuminate/support": "^10.0 || ^11.0", + "laravel-lang/locale-list": "^1.2", + "pestphp/pest": "^2.24.3", + "punic/punic": "^3.8", + "symfony/console": "^6.3 || ^7.0", + "symfony/process": "^6.3 || ^7.0", + "symfony/var-dumper": "^6.3 || ^7.0", + "vlucas/phpdotenv": "^5.6" + }, + "type": "library", + "autoload": { + "psr-4": { + "LaravelLang\\NativeCurrencyNames\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro" + }, + { + "name": "Laravel-Lang Team", + "homepage": "https://laravel-lang.com" + } + ], + "description": "The project contains native translations of currency names", + "keywords": [ + "Laravel-lang", + "currency", + "lang", + "languages", + "laravel", + "locale", + "locales", + "localization", + "translation", + "translations" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/native-currency-names/issues", + "source": "https://github.com/Laravel-Lang/native-currency-names" + }, + "time": "2024-03-13T09:40:02+00:00" + }, + { + "name": "laravel-lang/native-locale-names", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/native-locale-names.git", + "reference": "39ef3330938b74277456049bf386453109e4d05c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/native-locale-names/zipball/39ef3330938b74277456049bf386453109e4d05c", + "reference": "39ef3330938b74277456049bf386453109e4d05c", + "shasum": "" + }, + "require": { + "dragon-code/support": "^6.11", + "ext-json": "*", + "php": "^8.1" + }, + "require-dev": { + "illuminate/support": "^10.31 || ^11.0", + "laravel-lang/locale-list": "^1.2", + "pestphp/pest": "^2.24.3", + "punic/punic": "^3.8", + "symfony/console": "^6.3 || ^7.0", + "symfony/process": "^6.3 || ^7.0", + "symfony/var-dumper": "^6.3 || ^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "LaravelLang\\NativeLocaleNames\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro" + }, + { + "name": "Laravel-Lang Team", + "homepage": "https://laravel-lang.com" + } + ], + "description": "The project contains native translations of locale names", + "keywords": [ + "Laravel-lang", + "lang", + "languages", + "laravel", + "locale", + "locales", + "localization", + "translation", + "translations" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/native-locale-names/issues", + "source": "https://github.com/Laravel-Lang/native-locale-names" + }, + "time": "2024-03-13T09:28:19+00:00" + }, + { + "name": "laravel-lang/publisher", + "version": "16.4.0", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/publisher.git", + "reference": "7812e7a07e6f2fdb7d258f3ab1d481d1cbf7f32c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/publisher/zipball/7812e7a07e6f2fdb7d258f3ab1d481d1cbf7f32c", + "reference": "7812e7a07e6f2fdb7d258f3ab1d481d1cbf7f32c", + "shasum": "" + }, + "require": { + "composer/semver": "^3.4", + "dragon-code/pretty-array": "^4.1", + "dragon-code/support": "^6.11.3", + "ext-json": "*", + "illuminate/collections": "^10.0 || ^11.0", + "illuminate/console": "^10.0 || ^11.0", + "illuminate/support": "^10.0 || ^11.0", + "laravel-lang/config": "^1.0", + "laravel-lang/locales": "^2.3", + "league/commonmark": "^2.4.1", + "league/config": "^1.2", + "php": "^8.1" + }, + "conflict": { + "laravel-lang/attributes": "<2.0", + "laravel-lang/http-statuses": "<3.0", + "laravel-lang/lang": "<11.0" + }, + "require-dev": { + "laravel-lang/json-fallback": "^2.0", + "orchestra/testbench": "^8.14 || ^9.0", + "phpunit/phpunit": "^10.4.2", + "symfony/var-dumper": "^6.3.6 || ^7.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "LaravelLang\\Publisher\\ServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "LaravelLang\\Publisher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro" + }, + { + "name": "Laravel-Lang Team", + "homepage": "https://laravel-lang.com" + } + ], + "description": "Publisher lang files for the Laravel and Lumen Frameworks, Jetstream, Fortify, Cashier, Spark and Nova from Laravel-Lang/lang", + "keywords": [ + "Laravel-lang", + "breeze", + "cashier", + "fortify", + "framework", + "i18n", + "jetstream", + "lang", + "languages", + "laravel", + "locale", + "locales", + "localization", + "localizations", + "lpm", + "lumen", + "nova", + "publisher", + "spark", + "trans", + "translation", + "translations", + "validations" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/publisher/issues", + "source": "https://github.com/Laravel-Lang/publisher" + }, + "time": "2024-06-02T00:22:33+00:00" + }, + { + "name": "laravel-lang/routes", + "version": "1.5.0", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/routes.git", + "reference": "addc4438fac481389e66e349ac3b93670aa4301b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/routes/zipball/addc4438fac481389e66e349ac3b93670aa4301b", + "reference": "addc4438fac481389e66e349ac3b93670aa4301b", + "shasum": "" + }, + "require": { + "dragon-code/support": "^6.13", + "illuminate/config": "^10.0 || ^11.0", + "illuminate/http": "^10.0 || ^11.0", + "illuminate/routing": "^10.0 || ^11.0", + "illuminate/support": "^10.0 || ^11.0", + "laravel-lang/config": "^1.6", + "laravel-lang/locales": "^2.8", + "php": "^8.1" + }, + "require-dev": { + "orchestra/testbench": "^8.23 || ^9.1", + "pestphp/pest": "^2.34", + "pestphp/pest-plugin-laravel": "^2.4", + "symfony/var-dumper": "^6.0 || ^7.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "LaravelLang\\Routes\\ServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "helpers/functions.php" + ], + "psr-4": { + "LaravelLang\\Routes\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro", + "homepage": "https://dragon-code.pro" + }, + { + "name": "Laravel-Lang Team", + "homepage": "https://github.com/Laravel-Lang" + } + ], + "description": "Easy and fast way to localize routes", + "keywords": [ + "l18n", + "languages", + "laravel", + "localization", + "routes", + "translate", + "translations" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/routes/issues", + "source": "https://github.com/Laravel-Lang/routes" + }, + "time": "2024-07-10T10:28:26+00:00" + }, + { + "name": "laravel/pint", + "version": "v1.17.3", + "source": { + "type": "git", + "url": "https://github.com/laravel/pint.git", + "reference": "9d77be916e145864f10788bb94531d03e1f7b482" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/pint/zipball/9d77be916e145864f10788bb94531d03e1f7b482", + "reference": "9d77be916e145864f10788bb94531d03e1f7b482", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "ext-tokenizer": "*", + "ext-xml": "*", + "php": "^8.1.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.64.0", + "illuminate/view": "^10.48.20", + "larastan/larastan": "^2.9.8", + "laravel-zero/framework": "^10.4.0", + "mockery/mockery": "^1.6.12", + "nunomaduro/termwind": "^1.15.1", + "pestphp/pest": "^2.35.1" + }, + "bin": [ + "builds/pint" + ], + "type": "project", + "autoload": { + "psr-4": { + "App\\": "app/", + "Database\\Seeders\\": "database/seeders/", + "Database\\Factories\\": "database/factories/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "An opinionated code formatter for PHP.", + "homepage": "https://laravel.com", + "keywords": [ + "format", + "formatter", + "lint", + "linter", + "php" + ], + "support": { + "issues": "https://github.com/laravel/pint/issues", + "source": "https://github.com/laravel/pint" + }, + "time": "2024-09-03T15:00:28+00:00" + }, + { + "name": "mockery/mockery", + "version": "1.6.12", + "source": { + "type": "git", + "url": "https://github.com/mockery/mockery.git", + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mockery/mockery/zipball/1f4efdd7d3beafe9807b08156dfcb176d18f1699", + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699", + "shasum": "" + }, + "require": { + "hamcrest/hamcrest-php": "^2.0.1", + "lib-pcre": ">=7.0", + "php": ">=7.3" + }, + "conflict": { + "phpunit/phpunit": "<8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.5 || ^9.6.17", + "symplify/easy-coding-standard": "^12.1.14" + }, + "type": "library", + "autoload": { + "files": [ + "library/helpers.php", + "library/Mockery.php" + ], + "psr-4": { + "Mockery\\": "library/Mockery" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Pádraic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "https://github.com/padraic", + "role": "Author" + }, + { + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "https://davedevelopment.co.uk", + "role": "Developer" + }, + { + "name": "Nathanael Esayeas", + "email": "nathanael.esayeas@protonmail.com", + "homepage": "https://github.com/ghostwriter", + "role": "Lead Developer" + } + ], + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", + "keywords": [ + "BDD", + "TDD", + "library", + "mock", + "mock objects", + "mockery", + "stub", + "test", + "test double", + "testing" + ], + "support": { + "docs": "https://docs.mockery.io/", + "issues": "https://github.com/mockery/mockery/issues", + "rss": "https://github.com/mockery/mockery/releases.atom", + "security": "https://github.com/mockery/mockery/security/advisories", + "source": "https://github.com/mockery/mockery" + }, + "time": "2024-05-16T03:13:13+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.12.0", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", + "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3 <3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.12.0" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2024-06-12T14:39:25+00:00" + }, + { + "name": "nunomaduro/collision", + "version": "v8.4.0", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/collision.git", + "reference": "e7d1aa8ed753f63fa816932bbc89678238843b4a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/e7d1aa8ed753f63fa816932bbc89678238843b4a", + "reference": "e7d1aa8ed753f63fa816932bbc89678238843b4a", + "shasum": "" + }, + "require": { + "filp/whoops": "^2.15.4", + "nunomaduro/termwind": "^2.0.1", + "php": "^8.2.0", + "symfony/console": "^7.1.3" + }, + "conflict": { + "laravel/framework": "<11.0.0 || >=12.0.0", + "phpunit/phpunit": "<10.5.1 || >=12.0.0" + }, + "require-dev": { + "larastan/larastan": "^2.9.8", + "laravel/framework": "^11.19.0", + "laravel/pint": "^1.17.1", + "laravel/sail": "^1.31.0", + "laravel/sanctum": "^4.0.2", + "laravel/tinker": "^2.9.0", + "orchestra/testbench-core": "^9.2.3", + "pestphp/pest": "^2.35.0 || ^3.0.0", + "sebastian/environment": "^6.1.0 || ^7.0.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" + ] + }, + "branch-alias": { + "dev-8.x": "8.x-dev" + } + }, + "autoload": { + "files": [ + "./src/Adapters/Phpunit/Autoload.php" + ], + "psr-4": { + "NunoMaduro\\Collision\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Cli error handling for console/command-line PHP applications.", + "keywords": [ + "artisan", + "cli", + "command-line", + "console", + "error", + "handling", + "laravel", + "laravel-zero", + "php", + "symfony" + ], + "support": { + "issues": "https://github.com/nunomaduro/collision/issues", + "source": "https://github.com/nunomaduro/collision" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], + "time": "2024-08-03T15:32:23+00:00" + }, + { + "name": "pestphp/pest", + "version": "v2.35.1", + "source": { + "type": "git", + "url": "https://github.com/pestphp/pest.git", + "reference": "b13acb630df52c06123588d321823c31fc685545" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pestphp/pest/zipball/b13acb630df52c06123588d321823c31fc685545", + "reference": "b13acb630df52c06123588d321823c31fc685545", + "shasum": "" + }, + "require": { + "brianium/paratest": "^7.3.1", + "nunomaduro/collision": "^7.10.0|^8.4.0", + "nunomaduro/termwind": "^1.15.1|^2.0.1", + "pestphp/pest-plugin": "^2.1.1", + "pestphp/pest-plugin-arch": "^2.7.0", + "php": "^8.1.0", + "phpunit/phpunit": "^10.5.17" + }, + "conflict": { + "phpunit/phpunit": ">10.5.17", + "sebastian/exporter": "<5.1.0", + "webmozart/assert": "<1.11.0" + }, + "require-dev": { + "pestphp/pest-dev-tools": "^2.16.0", + "pestphp/pest-plugin-type-coverage": "^2.8.5", + "symfony/process": "^6.4.0|^7.1.3" + }, + "bin": [ + "bin/pest" + ], + "type": "library", + "extra": { + "pest": { + "plugins": [ + "Pest\\Plugins\\Bail", + "Pest\\Plugins\\Cache", + "Pest\\Plugins\\Coverage", + "Pest\\Plugins\\Init", + "Pest\\Plugins\\Environment", + "Pest\\Plugins\\Help", + "Pest\\Plugins\\Memory", + "Pest\\Plugins\\Only", + "Pest\\Plugins\\Printer", + "Pest\\Plugins\\ProcessIsolation", + "Pest\\Plugins\\Profile", + "Pest\\Plugins\\Retry", + "Pest\\Plugins\\Snapshot", + "Pest\\Plugins\\Verbose", + "Pest\\Plugins\\Version", + "Pest\\Plugins\\Parallel" + ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "autoload": { + "files": [ + "src/Functions.php", + "src/Pest.php" + ], + "psr-4": { + "Pest\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "The elegant PHP Testing Framework.", + "keywords": [ + "framework", + "pest", + "php", + "test", + "testing", + "unit" + ], + "support": { + "issues": "https://github.com/pestphp/pest/issues", + "source": "https://github.com/pestphp/pest/tree/v2.35.1" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + } + ], + "time": "2024-08-20T21:41:50+00:00" + }, + { + "name": "pestphp/pest-plugin", + "version": "v2.1.1", + "source": { + "type": "git", + "url": "https://github.com/pestphp/pest-plugin.git", + "reference": "e05d2859e08c2567ee38ce8b005d044e72648c0b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pestphp/pest-plugin/zipball/e05d2859e08c2567ee38ce8b005d044e72648c0b", + "reference": "e05d2859e08c2567ee38ce8b005d044e72648c0b", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^2.0.0", + "composer-runtime-api": "^2.2.2", + "php": "^8.1" + }, + "conflict": { + "pestphp/pest": "<2.2.3" + }, + "require-dev": { + "composer/composer": "^2.5.8", + "pestphp/pest": "^2.16.0", + "pestphp/pest-dev-tools": "^2.16.0" + }, + "type": "composer-plugin", + "extra": { + "class": "Pest\\Plugin\\Manager" + }, + "autoload": { + "psr-4": { + "Pest\\Plugin\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "The Pest plugin manager", + "keywords": [ + "framework", + "manager", + "pest", + "php", + "plugin", + "test", + "testing", + "unit" + ], + "support": { + "source": "https://github.com/pestphp/pest-plugin/tree/v2.1.1" + }, + "funding": [ + { + "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], + "time": "2023-08-22T08:40:06+00:00" + }, + { + "name": "pestphp/pest-plugin-arch", + "version": "v2.7.0", + "source": { + "type": "git", + "url": "https://github.com/pestphp/pest-plugin-arch.git", + "reference": "d23b2d7498475354522c3818c42ef355dca3fcda" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pestphp/pest-plugin-arch/zipball/d23b2d7498475354522c3818c42ef355dca3fcda", + "reference": "d23b2d7498475354522c3818c42ef355dca3fcda", + "shasum": "" + }, + "require": { + "nunomaduro/collision": "^7.10.0|^8.1.0", + "pestphp/pest-plugin": "^2.1.1", + "php": "^8.1", + "ta-tikoma/phpunit-architecture-test": "^0.8.4" + }, + "require-dev": { + "pestphp/pest": "^2.33.0", + "pestphp/pest-dev-tools": "^2.16.0" + }, + "type": "library", + "extra": { + "pest": { + "plugins": [ + "Pest\\Arch\\Plugin" + ] + } + }, + "autoload": { + "files": [ + "src/Autoload.php" + ], + "psr-4": { + "Pest\\Arch\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "The Arch plugin for Pest PHP.", + "keywords": [ + "arch", + "architecture", + "framework", + "pest", + "php", + "plugin", + "test", + "testing", + "unit" + ], + "support": { + "source": "https://github.com/pestphp/pest-plugin-arch/tree/v2.7.0" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + } + ], + "time": "2024-01-26T09:46:42+00:00" + }, + { + "name": "pestphp/pest-plugin-laravel", + "version": "v2.4.0", + "source": { + "type": "git", + "url": "https://github.com/pestphp/pest-plugin-laravel.git", + "reference": "53df51169a7f9595e06839cce638c73e59ace5e8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pestphp/pest-plugin-laravel/zipball/53df51169a7f9595e06839cce638c73e59ace5e8", + "reference": "53df51169a7f9595e06839cce638c73e59ace5e8", + "shasum": "" + }, + "require": { + "laravel/framework": "^10.48.9|^11.5.0", + "pestphp/pest": "^2.34.7", + "php": "^8.1.0" + }, + "require-dev": { + "laravel/dusk": "^7.13.0", + "orchestra/testbench": "^8.22.3|^9.0.4", + "pestphp/pest-dev-tools": "^2.16.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Pest\\Laravel\\PestServiceProvider" + ] + }, + "pest": { + "plugins": [ + "Pest\\Laravel\\Plugin" + ] + } + }, + "autoload": { + "files": [ + "src/Autoload.php" + ], + "psr-4": { + "Pest\\Laravel\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "The Pest Laravel Plugin", + "keywords": [ + "framework", + "laravel", + "pest", + "php", + "test", + "testing", + "unit" + ], + "support": { + "source": "https://github.com/pestphp/pest-plugin-laravel/tree/v2.4.0" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + } + ], + "time": "2024-04-27T10:41:54+00:00" + }, + { + "name": "pestphp/pest-plugin-livewire", + "version": "v2.1.0", + "source": { + "type": "git", + "url": "https://github.com/pestphp/pest-plugin-livewire.git", + "reference": "e72a2f850f727dfdb6bfa6e2ee6ff478ccc93f97" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pestphp/pest-plugin-livewire/zipball/e72a2f850f727dfdb6bfa6e2ee6ff478ccc93f97", + "reference": "e72a2f850f727dfdb6bfa6e2ee6ff478ccc93f97", + "shasum": "" + }, + "require": { + "livewire/livewire": "^2.12.3|^3.0", + "pestphp/pest": "^2.9.1", + "php": "^8.1" + }, + "require-dev": { + "orchestra/testbench": "^8.5.10", + "pestphp/pest-dev-tools": "^2.12.0" + }, + "type": "library", + "autoload": { + "files": [ + "src/Autoload.php" + ], + "psr-4": { + "Pest\\Livewire\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "The Pest Livewire Plugin", + "keywords": [ + "framework", + "livewire", + "pest", + "php", + "plugin", + "test", + "testing", + "unit" + ], + "support": { + "source": "https://github.com/pestphp/pest-plugin-livewire/tree/v2.1.0" + }, + "funding": [ + { + "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], + "time": "2023-07-20T16:28:21+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "54750ef60c58e43759730615a392c31c80e23176" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" + }, + { + "name": "phar-io/version", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + }, + "time": "2020-06-27T09:03:43+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "5.4.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c", + "reference": "9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1.1", + "ext-filter": "*", + "php": "^7.4 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.7", + "phpstan/phpdoc-parser": "^1.7", + "webmozart/assert": "^1.9.1" + }, + "require-dev": { + "mockery/mockery": "~1.3.5", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-webmozart-assert": "^1.2", + "phpunit/phpunit": "^9.5", + "vimeo/psalm": "^5.13" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.4.1" + }, + "time": "2024-05-21T05:55:05+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.8.2", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "153ae662783729388a584b4361f2545e4d841e3c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/153ae662783729388a584b4361f2545e4d841e3c", + "reference": "153ae662783729388a584b4361f2545e4d841e3c", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1.0", + "php": "^7.3 || ^8.0", + "phpdocumentor/reflection-common": "^2.0", + "phpstan/phpdoc-parser": "^1.13" + }, + "require-dev": { + "ext-tokenizer": "*", + "phpbench/phpbench": "^1.2", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.13.9", + "vimeo/psalm": "^4.25" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-1.x": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.8.2" + }, + "time": "2024-02-23T11:10:43+00:00" + }, + { + "name": "phpmyadmin/sql-parser", + "version": "5.10.0", + "source": { + "type": "git", + "url": "https://github.com/phpmyadmin/sql-parser.git", + "reference": "91d980ab76c3f152481e367f62b921adc38af451" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpmyadmin/sql-parser/zipball/91d980ab76c3f152481e367f62b921adc38af451", + "reference": "91d980ab76c3f152481e367f62b921adc38af451", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "symfony/polyfill-mbstring": "^1.3", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "phpmyadmin/motranslator": "<3.0" + }, + "require-dev": { + "phpbench/phpbench": "^1.1", + "phpmyadmin/coding-standard": "^3.0", + "phpmyadmin/motranslator": "^4.0 || ^5.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.9.12", + "phpstan/phpstan-phpunit": "^1.3.3", + "phpunit/phpunit": "^8.5 || ^9.6", + "psalm/plugin-phpunit": "^0.16.1", + "vimeo/psalm": "^4.11", + "zumba/json-serializer": "~3.0.2" + }, + "suggest": { + "ext-mbstring": "For best performance", + "phpmyadmin/motranslator": "Translate messages to your favorite locale" + }, + "bin": [ + "bin/highlight-query", + "bin/lint-query", + "bin/sql-parser", + "bin/tokenize-query" + ], + "type": "library", + "autoload": { + "psr-4": { + "PhpMyAdmin\\SqlParser\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "The phpMyAdmin Team", + "email": "developers@phpmyadmin.net", + "homepage": "https://www.phpmyadmin.net/team/" + } + ], + "description": "A validating SQL lexer and parser with a focus on MySQL dialect.", + "homepage": "https://github.com/phpmyadmin/sql-parser", + "keywords": [ + "analysis", + "lexer", + "parser", + "query linter", + "sql", + "sql lexer", + "sql linter", + "sql parser", + "sql syntax highlighter", + "sql tokenizer" + ], + "support": { + "issues": "https://github.com/phpmyadmin/sql-parser/issues", + "source": "https://github.com/phpmyadmin/sql-parser" + }, + "funding": [ + { + "url": "https://www.phpmyadmin.net/donate/", + "type": "other" + } + ], + "time": "2024-08-29T20:56:34+00:00" + }, + { + "name": "phpstan/phpdoc-parser", + "version": "1.30.1", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "51b95ec8670af41009e2b2b56873bad96682413e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/51b95ec8670af41009e2b2b56873bad96682413e", + "reference": "51b95ec8670af41009e2b2b56873bad96682413e", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/annotations": "^2.0", + "nikic/php-parser": "^4.15", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.5", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.0", + "phpunit/phpunit": "^9.5", + "symfony/process": "^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "PHPStan\\PhpDocParser\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPDoc parser with support for nullable, intersection and generic types", + "support": { + "issues": "https://github.com/phpstan/phpdoc-parser/issues", + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.30.1" + }, + "time": "2024-09-07T20:13:05+00:00" + }, + { + "name": "phpstan/phpstan", + "version": "1.12.3", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan.git", + "reference": "0fcbf194ab63d8159bb70d9aa3e1350051632009" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/0fcbf194ab63d8159bb70d9aa3e1350051632009", + "reference": "0fcbf194ab63d8159bb70d9aa3e1350051632009", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0" + }, + "conflict": { + "phpstan/phpstan-shim": "*" + }, + "bin": [ + "phpstan", + "phpstan.phar" + ], + "type": "library", + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan - PHP Static Analysis Tool", + "keywords": [ + "dev", + "static analysis" + ], + "support": { + "docs": "https://phpstan.org/user-guide/getting-started", + "forum": "https://github.com/phpstan/phpstan/discussions", + "issues": "https://github.com/phpstan/phpstan/issues", + "security": "https://github.com/phpstan/phpstan/security/policy", + "source": "https://github.com/phpstan/phpstan-src" + }, + "funding": [ + { + "url": "https://github.com/ondrejmirtes", + "type": "github" + }, + { + "url": "https://github.com/phpstan", + "type": "github" + } + ], + "time": "2024-09-09T08:10:35+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "10.1.16", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "7e308268858ed6baedc8704a304727d20bc07c77" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7e308268858ed6baedc8704a304727d20bc07c77", + "reference": "7e308268858ed6baedc8704a304727d20bc07c77", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.19.1 || ^5.1.0", + "php": ">=8.1", + "phpunit/php-file-iterator": "^4.1.0", + "phpunit/php-text-template": "^3.0.1", + "sebastian/code-unit-reverse-lookup": "^3.0.0", + "sebastian/complexity": "^3.2.0", + "sebastian/environment": "^6.1.0", + "sebastian/lines-of-code": "^2.0.2", + "sebastian/version": "^4.0.1", + "theseer/tokenizer": "^1.2.3" + }, + "require-dev": { + "phpunit/phpunit": "^10.1" + }, + "suggest": { + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "10.1.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.16" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-08-22T04:31:57+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "4.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c", + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-08-31T06:24:48+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "4.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^10.0" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:56:09+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-08-31T14:07:24+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "6.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:57:52+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "10.5.17", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "c1f736a473d21957ead7e94fcc029f571895abf5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c1f736a473d21957ead7e94fcc029f571895abf5", + "reference": "c1f736a473d21957ead7e94fcc029f571895abf5", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.10.1", + "phar-io/manifest": "^2.0.3", + "phar-io/version": "^3.0.2", + "php": ">=8.1", + "phpunit/php-code-coverage": "^10.1.5", + "phpunit/php-file-iterator": "^4.0", + "phpunit/php-invoker": "^4.0", + "phpunit/php-text-template": "^3.0", + "phpunit/php-timer": "^6.0", + "sebastian/cli-parser": "^2.0", + "sebastian/code-unit": "^2.0", + "sebastian/comparator": "^5.0", + "sebastian/diff": "^5.0", + "sebastian/environment": "^6.0", + "sebastian/exporter": "^5.1", + "sebastian/global-state": "^6.0.1", + "sebastian/object-enumerator": "^5.0", + "sebastian/recursion-context": "^5.0", + "sebastian/type": "^4.0", + "sebastian/version": "^4.0" + }, + "suggest": { + "ext-soap": "To be able to generate mocks based on WSDL files" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "10.5-dev" + } + }, + "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.17" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" + } + ], + "time": "2024-04-05T04:39:01+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c34583b87e7b7a8055bf6c450c2c77ce32a24084", + "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T07:12:49+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:58:43+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:59:15+00:00" + }, + { + "name": "sebastian/comparator", + "version": "5.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "2d3e04c3b4c1e84a5e7382221ad8883c8fbc4f53" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2d3e04c3b4c1e84a5e7382221ad8883c8fbc4f53", + "reference": "2d3e04c3b4c1e84a5e7382221ad8883c8fbc4f53", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/diff": "^5.0", + "sebastian/exporter": "^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "security": "https://github.com/sebastianbergmann/comparator/security/policy", + "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-08-12T06:03:08+00:00" + }, + { + "name": "sebastian/complexity", + "version": "3.2.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "68ff824baeae169ec9f2137158ee529584553799" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799", + "reference": "68ff824baeae169ec9f2137158ee529584553799", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "security": "https://github.com/sebastianbergmann/complexity/security/policy", + "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-21T08:37:17+00:00" + }, + { + "name": "sebastian/diff", + "version": "5.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e", + "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0", + "symfony/process": "^6.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T07:15:17+00:00" + }, + { + "name": "sebastian/environment", + "version": "6.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "8074dbcd93529b357029f5cc5058fd3e43666984" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/8074dbcd93529b357029f5cc5058fd3e43666984", + "reference": "8074dbcd93529b357029f5cc5058fd3e43666984", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "https://github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/6.1.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-23T08:47:14+00:00" + }, + { + "name": "sebastian/exporter", + "version": "5.1.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "955288482d97c19a372d3f31006ab3f37da47adf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/955288482d97c19a372d3f31006ab3f37da47adf", + "reference": "955288482d97c19a372d3f31006ab3f37da47adf", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/recursion-context": "^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "security": "https://github.com/sebastianbergmann/exporter/security/policy", + "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T07:17:12+00:00" + }, + { + "name": "sebastian/global-state", + "version": "6.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", + "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "https://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "security": "https://github.com/sebastianbergmann/global-state/security/policy", + "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T07:19:19+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0", + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-21T08:38:20+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:08:32+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:06:18+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "05909fb5bc7df4c52992396d0116aed689f93712" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712", + "reference": "05909fb5bc7df4c52992396d0116aed689f93712", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "https://github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:05:40+00:00" + }, + { + "name": "sebastian/type", + "version": "4.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:10:45+00:00" + }, + { + "name": "sebastian/version", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-07T11:34:05+00:00" + }, + { + "name": "spatie/backtrace", + "version": "1.6.2", + "source": { + "type": "git", + "url": "https://github.com/spatie/backtrace.git", + "reference": "1a9a145b044677ae3424693f7b06479fc8c137a9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/backtrace/zipball/1a9a145b044677ae3424693f7b06479fc8c137a9", + "reference": "1a9a145b044677ae3424693f7b06479fc8c137a9", + "shasum": "" + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "ext-json": "*", + "laravel/serializable-closure": "^1.3", + "phpunit/phpunit": "^9.3", + "spatie/phpunit-snapshot-assertions": "^4.2", + "symfony/var-dumper": "^5.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\Backtrace\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van de Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "A better backtrace", + "homepage": "https://github.com/spatie/backtrace", + "keywords": [ + "Backtrace", + "spatie" + ], + "support": { + "source": "https://github.com/spatie/backtrace/tree/1.6.2" + }, + "funding": [ + { + "url": "https://github.com/sponsors/spatie", + "type": "github" + }, + { + "url": "https://spatie.be/open-source/support-us", + "type": "other" + } + ], + "time": "2024-07-22T08:21:24+00:00" + }, + { + "name": "spatie/error-solutions", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/error-solutions.git", + "reference": "ae7393122eda72eed7cc4f176d1e96ea444f2d67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/error-solutions/zipball/ae7393122eda72eed7cc4f176d1e96ea444f2d67", + "reference": "ae7393122eda72eed7cc4f176d1e96ea444f2d67", + "shasum": "" + }, + "require": { + "php": "^8.0" + }, + "require-dev": { + "illuminate/broadcasting": "^10.0|^11.0", + "illuminate/cache": "^10.0|^11.0", + "illuminate/support": "^10.0|^11.0", + "livewire/livewire": "^2.11|^3.3.5", + "openai-php/client": "^0.10.1", + "orchestra/testbench": "^7.0|8.22.3|^9.0", + "pestphp/pest": "^2.20", + "phpstan/phpstan": "^1.11", + "psr/simple-cache": "^3.0", + "psr/simple-cache-implementation": "^3.0", + "spatie/ray": "^1.28", + "symfony/cache": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "vlucas/phpdotenv": "^5.5" + }, + "suggest": { + "openai-php/client": "Require get solutions from OpenAI", + "simple-cache-implementation": "To cache solutions from OpenAI" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\Ignition\\": "legacy/ignition", + "Spatie\\ErrorSolutions\\": "src", + "Spatie\\LaravelIgnition\\": "legacy/laravel-ignition" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ruben Van Assche", + "email": "ruben@spatie.be", + "role": "Developer" + } + ], + "description": "This is my package error-solutions", + "homepage": "https://github.com/spatie/error-solutions", + "keywords": [ + "error-solutions", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/error-solutions/issues", + "source": "https://github.com/spatie/error-solutions/tree/1.1.1" + }, + "funding": [ + { + "url": "https://github.com/Spatie", + "type": "github" + } + ], + "time": "2024-07-25T11:06:04+00:00" + }, + { + "name": "spatie/flare-client-php", + "version": "1.8.0", + "source": { + "type": "git", + "url": "https://github.com/spatie/flare-client-php.git", + "reference": "180f8ca4c0d0d6fc51477bd8c53ce37ab5a96122" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/180f8ca4c0d0d6fc51477bd8c53ce37ab5a96122", + "reference": "180f8ca4c0d0d6fc51477bd8c53ce37ab5a96122", + "shasum": "" + }, + "require": { + "illuminate/pipeline": "^8.0|^9.0|^10.0|^11.0", + "php": "^8.0", + "spatie/backtrace": "^1.6.1", + "symfony/http-foundation": "^5.2|^6.0|^7.0", + "symfony/mime": "^5.2|^6.0|^7.0", + "symfony/process": "^5.2|^6.0|^7.0", + "symfony/var-dumper": "^5.2|^6.0|^7.0" + }, + "require-dev": { + "dms/phpunit-arraysubset-asserts": "^0.5.0", + "pestphp/pest": "^1.20|^2.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "spatie/pest-plugin-snapshots": "^1.0|^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.3.x-dev" + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Spatie\\FlareClient\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Send PHP errors to Flare", + "homepage": "https://github.com/spatie/flare-client-php", + "keywords": [ + "exception", + "flare", + "reporting", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/flare-client-php/issues", + "source": "https://github.com/spatie/flare-client-php/tree/1.8.0" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2024-08-01T08:27:26+00:00" + }, + { + "name": "spatie/ignition", + "version": "1.15.0", + "source": { + "type": "git", + "url": "https://github.com/spatie/ignition.git", + "reference": "e3a68e137371e1eb9edc7f78ffa733f3b98991d2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/ignition/zipball/e3a68e137371e1eb9edc7f78ffa733f3b98991d2", + "reference": "e3a68e137371e1eb9edc7f78ffa733f3b98991d2", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "php": "^8.0", + "spatie/error-solutions": "^1.0", + "spatie/flare-client-php": "^1.7", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0" + }, + "require-dev": { + "illuminate/cache": "^9.52|^10.0|^11.0", + "mockery/mockery": "^1.4", + "pestphp/pest": "^1.20|^2.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "psr/simple-cache-implementation": "*", + "symfony/cache": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "vlucas/phpdotenv": "^5.5" + }, + "suggest": { + "openai-php/client": "Require get solutions from OpenAI", + "simple-cache-implementation": "To cache solutions from OpenAI" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.5.x-dev" + } + }, + "autoload": { + "psr-4": { + "Spatie\\Ignition\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Spatie", + "email": "info@spatie.be", + "role": "Developer" + } + ], + "description": "A beautiful error page for PHP applications.", + "homepage": "https://flareapp.io/ignition", + "keywords": [ + "error", + "flare", + "laravel", + "page" + ], + "support": { + "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", + "forum": "https://twitter.com/flareappio", + "issues": "https://github.com/spatie/ignition/issues", + "source": "https://github.com/spatie/ignition" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2024-06-12T14:55:22+00:00" + }, + { + "name": "spatie/laravel-ignition", + "version": "2.8.0", + "source": { + "type": "git", + "url": "https://github.com/spatie/laravel-ignition.git", + "reference": "3c067b75bfb50574db8f7e2c3978c65eed71126c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/3c067b75bfb50574db8f7e2c3978c65eed71126c", + "reference": "3c067b75bfb50574db8f7e2c3978c65eed71126c", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "illuminate/support": "^10.0|^11.0", + "php": "^8.1", + "spatie/ignition": "^1.15", + "symfony/console": "^6.2.3|^7.0", + "symfony/var-dumper": "^6.2.3|^7.0" + }, + "require-dev": { + "livewire/livewire": "^2.11|^3.3.5", + "mockery/mockery": "^1.5.1", + "openai-php/client": "^0.8.1", + "orchestra/testbench": "8.22.3|^9.0", + "pestphp/pest": "^2.34", + "phpstan/extension-installer": "^1.3.1", + "phpstan/phpstan-deprecation-rules": "^1.1.1", + "phpstan/phpstan-phpunit": "^1.3.16", + "vlucas/phpdotenv": "^5.5" + }, + "suggest": { + "openai-php/client": "Require get solutions from OpenAI", + "psr/simple-cache-implementation": "Needed to cache solutions from OpenAI" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Spatie\\LaravelIgnition\\IgnitionServiceProvider" + ], + "aliases": { + "Flare": "Spatie\\LaravelIgnition\\Facades\\Flare" + } + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Spatie\\LaravelIgnition\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Spatie", + "email": "info@spatie.be", + "role": "Developer" + } + ], + "description": "A beautiful error page for Laravel applications.", + "homepage": "https://flareapp.io/ignition", + "keywords": [ + "error", + "flare", + "laravel", + "page" + ], + "support": { + "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", + "forum": "https://twitter.com/flareappio", + "issues": "https://github.com/spatie/laravel-ignition/issues", + "source": "https://github.com/spatie/laravel-ignition" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2024-06-12T15:01:18+00:00" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/tree/v1.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": "ta-tikoma/phpunit-architecture-test", + "version": "0.8.4", + "source": { + "type": "git", + "url": "https://github.com/ta-tikoma/phpunit-architecture-test.git", + "reference": "89f0dea1cb0f0d5744d3ec1764a286af5e006636" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ta-tikoma/phpunit-architecture-test/zipball/89f0dea1cb0f0d5744d3ec1764a286af5e006636", + "reference": "89f0dea1cb0f0d5744d3ec1764a286af5e006636", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18.0 || ^5.0.0", + "php": "^8.1.0", + "phpdocumentor/reflection-docblock": "^5.3.0", + "phpunit/phpunit": "^10.5.5 || ^11.0.0", + "symfony/finder": "^6.4.0 || ^7.0.0" + }, + "require-dev": { + "laravel/pint": "^1.13.7", + "phpstan/phpstan": "^1.10.52" + }, + "type": "library", + "autoload": { + "psr-4": { + "PHPUnit\\Architecture\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ni Shi", + "email": "futik0ma011@gmail.com" + }, + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Methods for testing application architecture", + "keywords": [ + "architecture", + "phpunit", + "stucture", + "test", + "testing" + ], + "support": { + "issues": "https://github.com/ta-tikoma/phpunit-architecture-test/issues", + "source": "https://github.com/ta-tikoma/phpunit-architecture-test/tree/0.8.4" + }, + "time": "2024-01-05T14:10:56+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.3", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.2.3" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:36:25+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": "^8.2" + }, + "platform-dev": [], + "plugin-api-version": "2.6.0" +} diff --git a/config/app.php b/config/app.php new file mode 100644 index 0000000..0b67a5f --- /dev/null +++ b/config/app.php @@ -0,0 +1,3 @@ + env('SESSION_DRIVER', 'file'), + + /* + |-------------------------------------------------------------------------- + | Session Lifetime + |-------------------------------------------------------------------------- + | + | Here you may specify the number of minutes that you wish the session + | to be allowed to remain idle before it expires. If you want them + | to immediately expire on the browser closing, set that option. + | + */ + + 'lifetime' => env('SESSION_LIFETIME', 120), + + 'expire_on_close' => false, + + /* + |-------------------------------------------------------------------------- + | Session Encryption + |-------------------------------------------------------------------------- + | + | This option allows you to easily specify that all of your session data + | should be encrypted before it is stored. All encryption will be run + | automatically by Laravel and you can use the Session like normal. + | + */ + + 'encrypt' => false, + + /* + |-------------------------------------------------------------------------- + | Session File Location + |-------------------------------------------------------------------------- + | + | When using the native session driver, we need a location where session + | files may be stored. A default has been set for you but a different + | location may be specified. This is only needed for file sessions. + | + */ + + 'files' => storage_path('framework/sessions'), + + /* + |-------------------------------------------------------------------------- + | Session Database Connection + |-------------------------------------------------------------------------- + | + | When using the "database" or "redis" session drivers, you may specify a + | connection that should be used to manage these sessions. This should + | correspond to a connection in your database configuration options. + | + */ + + 'connection' => env('SESSION_CONNECTION'), + + /* + |-------------------------------------------------------------------------- + | Session Database Table + |-------------------------------------------------------------------------- + | + | When using the "database" session driver, you may specify the table we + | should use to manage the sessions. Of course, a sensible default is + | provided for you; however, you are free to change this as needed. + | + */ + + 'table' => 'sessions', + + /* + |-------------------------------------------------------------------------- + | Session Cache Store + |-------------------------------------------------------------------------- + | + | While using one of the framework's cache driven session backends you may + | list a cache store that should be used for these sessions. This value + | must match with one of the application's configured cache "stores". + | + | Affects: "apc", "dynamodb", "memcached", "redis" + | + */ + + 'store' => env('SESSION_STORE'), + + /* + |-------------------------------------------------------------------------- + | Session Sweeping Lottery + |-------------------------------------------------------------------------- + | + | Some session drivers must manually sweep their storage location to get + | rid of old sessions from storage. Here are the chances that it will + | happen on a given request. By default, the odds are 2 out of 100. + | + */ + + 'lottery' => [2, 100], + + /* + |-------------------------------------------------------------------------- + | Session Cookie Name + |-------------------------------------------------------------------------- + | + | Here you may change the name of the cookie used to identify a session + | instance by ID. The name specified here will get used every time a + | new session cookie is created by the framework for every driver. + | + */ + + 'cookie' => env( + 'SESSION_COOKIE', + Str::slug(env('APP_NAME', 'laravel'), '_').'_session' + ), + + /* + |-------------------------------------------------------------------------- + | Session Cookie Path + |-------------------------------------------------------------------------- + | + | The session cookie path determines the path for which the cookie will + | be regarded as available. Typically, this will be the root path of + | your application but you are free to change this when necessary. + | + */ + + 'path' => '/', + + /* + |-------------------------------------------------------------------------- + | Session Cookie Domain + |-------------------------------------------------------------------------- + | + | Here you may change the domain of the cookie used to identify a session + | in your application. This will determine which domains the cookie is + | available to in your application. A sensible default has been set. + | + */ + + 'domain' => env('SESSION_DOMAIN'), + + /* + |-------------------------------------------------------------------------- + | HTTPS Only Cookies + |-------------------------------------------------------------------------- + | + | By setting this option to true, session cookies will only be sent back + | to the server if the browser has a HTTPS connection. This will keep + | the cookie from being sent to you when it can't be done securely. + | + */ + + 'secure' => env('SESSION_SECURE_COOKIE'), + + /* + |-------------------------------------------------------------------------- + | HTTP Access Only + |-------------------------------------------------------------------------- + | + | Setting this value to true will prevent JavaScript from accessing the + | value of the cookie and the cookie will only be accessible through + | the HTTP protocol. You are free to modify this option if needed. + | + */ + + 'http_only' => true, + + /* + |-------------------------------------------------------------------------- + | Same-Site Cookies + |-------------------------------------------------------------------------- + | + | This option determines how your cookies behave when cross-site requests + | take place, and can be used to mitigate CSRF attacks. By default, we + | will set this value to "lax" since this is a secure default value. + | + | Supported: "lax", "strict", "none", null + | + */ + + 'same_site' => 'lax', + + /* + |-------------------------------------------------------------------------- + | Partitioned Cookies + |-------------------------------------------------------------------------- + | + | Setting this value to true will tie the cookie to the top-level site for + | a cross-site context. Partitioned cookies are accepted by the browser + | when flagged "secure" and the Same-Site attribute is set to "none". + | + */ + + 'partitioned' => false, + +]; diff --git a/database/.gitignore b/database/.gitignore new file mode 100644 index 0000000..9b19b93 --- /dev/null +++ b/database/.gitignore @@ -0,0 +1 @@ +*.sqlite* diff --git a/database/factories/ConstraintFactory.php b/database/factories/ConstraintFactory.php new file mode 100644 index 0000000..8024319 --- /dev/null +++ b/database/factories/ConstraintFactory.php @@ -0,0 +1,19 @@ + User::factory()->create()->userable_id, + 'constraint_type' => 'Not task', + 'start_date' => '2024-09-01 12:00:00', + 'end_date' => '2024-09-03 12:00:00', + ]; + } +} diff --git a/database/factories/DepartmentFactory.php b/database/factories/DepartmentFactory.php new file mode 100644 index 0000000..8735667 --- /dev/null +++ b/database/factories/DepartmentFactory.php @@ -0,0 +1,17 @@ + fake()->name(), + 'commander_id' => User::factory(), + ]; + } +} diff --git a/database/factories/ShiftFactory.php b/database/factories/ShiftFactory.php new file mode 100644 index 0000000..fdaaf44 --- /dev/null +++ b/database/factories/ShiftFactory.php @@ -0,0 +1,21 @@ + User::factory()->create()->userable_id, + 'task_id' => Task::factory()->create()->id, + 'start_date' => now(), + 'end_date' => Carbon::now()->addDay(), + ]; + } +} diff --git a/database/factories/SoldierFactory.php b/database/factories/SoldierFactory.php new file mode 100644 index 0000000..6fe6898 --- /dev/null +++ b/database/factories/SoldierFactory.php @@ -0,0 +1,29 @@ + null, + 'gender' => fake()->boolean(), + 'is_permanent' => fake()->boolean(), + 'enlist_date' => fake()->dateTime(), + 'course' => fake()->numberBetween(0, 500), + 'has_exemption' => fake()->boolean(), + 'max_shift' => fake()->numberBetween(0, 50), + 'max_night' => fake()->numberBetween(0, 31), + 'max_weekend' => fake()->numberBetween(0, 5), + 'capacity' => fake()->numberBetween(0, 12) / 4.0, + 'capacity_hold' => fake()->numberBetween(0, 12) / 4.0, + 'is_trainee' => fake()->boolean(), + 'is_mabat' => fake()->boolean(), + 'is_reservist' => fake()->boolean(), + 'qualifications' => fake(), + ]; + } +} diff --git a/database/factories/TaskFactory.php b/database/factories/TaskFactory.php new file mode 100644 index 0000000..abf1f80 --- /dev/null +++ b/database/factories/TaskFactory.php @@ -0,0 +1,23 @@ + fake()->name(), + 'start_hour' => fake()->dateTime(), + 'duration' => fake()->randomDigit(), + 'parallel_weight' => fake()->randomDigit(), + 'type' => fake()->name(), + 'color' => fake()->hexColor(), + 'is_alert' => fake()->boolean(), + 'department_name' => fake()->text(), + 'recurrence' => json_encode([]), + ]; + } +} diff --git a/database/factories/TeamFactory.php b/database/factories/TeamFactory.php new file mode 100644 index 0000000..3585d1f --- /dev/null +++ b/database/factories/TeamFactory.php @@ -0,0 +1,19 @@ + fake()->name(), + 'commander_id' => User::factory(), + 'department_id' => Department::factory(), + ]; + } +} diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php new file mode 100644 index 0000000..d7ae3fe --- /dev/null +++ b/database/factories/UserFactory.php @@ -0,0 +1,21 @@ + fake()->name(), + 'last_name' => fake()->name(), + 'password' => static::$password ?? Hash::make((string) fake()->randomNumber(7)), + 'userable_type' => Soldier::class, + 'userable_id' => Soldier::factory(), + ]; + } +} diff --git a/database/migrations/0001_01_01_000000_create_users_table.php b/database/migrations/0001_01_01_000000_create_users_table.php new file mode 100644 index 0000000..1d72bf3 --- /dev/null +++ b/database/migrations/0001_01_01_000000_create_users_table.php @@ -0,0 +1,35 @@ +id(); + $table->string('first_name'); + $table->string('last_name'); + $table->string('password')->unique(); + $table->morphs('userable'); + $table->timestamps(); + }); + + Schema::create('sessions', function (Blueprint $table) { + $table->string('id')->primary(); + $table->foreignId('user_id')->nullable()->index(); + $table->string('ip_address', 45)->nullable(); + $table->text('user_agent')->nullable(); + $table->longText('payload'); + $table->integer('last_activity')->index(); + }); + } + + public function down(): void + { + Schema::dropIfExists('users'); + Schema::dropIfExists('sessions'); + } +}; diff --git a/database/migrations/0001_01_01_000001_create_cache_table.php b/database/migrations/0001_01_01_000001_create_cache_table.php new file mode 100644 index 0000000..b8cabb3 --- /dev/null +++ b/database/migrations/0001_01_01_000001_create_cache_table.php @@ -0,0 +1,29 @@ +string('key')->primary(); + $table->mediumText('value'); + $table->integer('expiration'); + }); + + Schema::create('cache_locks', function (Blueprint $table) { + $table->string('key')->primary(); + $table->string('owner'); + $table->integer('expiration'); + }); + } + + public function down(): void + { + Schema::dropIfExists('cache'); + Schema::dropIfExists('cache_locks'); + } +}; diff --git a/database/migrations/0001_01_01_000002_create_jobs_table.php b/database/migrations/0001_01_01_000002_create_jobs_table.php new file mode 100644 index 0000000..a892371 --- /dev/null +++ b/database/migrations/0001_01_01_000002_create_jobs_table.php @@ -0,0 +1,51 @@ +id(); + $table->string('queue')->index(); + $table->longText('payload'); + $table->unsignedTinyInteger('attempts'); + $table->unsignedInteger('reserved_at')->nullable(); + $table->unsignedInteger('available_at'); + $table->unsignedInteger('created_at'); + }); + + Schema::create('job_batches', function (Blueprint $table) { + $table->string('id')->primary(); + $table->string('name'); + $table->integer('total_jobs'); + $table->integer('pending_jobs'); + $table->integer('failed_jobs'); + $table->longText('failed_job_ids'); + $table->mediumText('options')->nullable(); + $table->integer('cancelled_at')->nullable(); + $table->integer('created_at'); + $table->integer('finished_at')->nullable(); + }); + + Schema::create('failed_jobs', function (Blueprint $table) { + $table->id(); + $table->string('uuid')->unique(); + $table->text('connection'); + $table->text('queue'); + $table->longText('payload'); + $table->longText('exception'); + $table->timestamp('failed_at')->useCurrent(); + }); + } + + public function down(): void + { + Schema::dropIfExists('jobs'); + Schema::dropIfExists('job_batches'); + Schema::dropIfExists('failed_jobs'); + } +}; diff --git a/database/migrations/0001_01_01_000003_create_notifications_table.php b/database/migrations/0001_01_01_000003_create_notifications_table.php new file mode 100644 index 0000000..7550549 --- /dev/null +++ b/database/migrations/0001_01_01_000003_create_notifications_table.php @@ -0,0 +1,27 @@ +uuid('id')->primary(); + + $table->string('type'); + $table->morphs('notifiable'); + $table->json('data'); + $table->timestamp('read_at')->nullable(); + + $table->timestamps(); + }); + } + + public function down(): void + { + Schema::dropIfExists('notifications'); + } +}; diff --git a/database/migrations/0001_01_01_000003_create_permission_tables.php b/database/migrations/0001_01_01_000003_create_permission_tables.php new file mode 100644 index 0000000..3c204e7 --- /dev/null +++ b/database/migrations/0001_01_01_000003_create_permission_tables.php @@ -0,0 +1,97 @@ +bigIncrements('id'); + + $table->string('name'); + $table->string('guard_name'); + + $table->timestamps(); + $table->unique(['name', 'guard_name']); + }); + + Schema::create('roles', function (Blueprint $table) { + $table->bigIncrements('id'); + + $table->string('name'); + $table->string('guard_name'); + + $table->timestamps(); + $table->unique(['name', 'guard_name']); + }); + + Schema::create('model_has_permissions', function (Blueprint $table) { + $table->unsignedBigInteger('permission_id'); + + $table->string('model_type'); + $table->unsignedBigInteger('model_id'); + $table->index(['model_id', 'model_type'], 'model_has_permissions_model_id_model_type_index'); + + $table->foreign('permission_id') + ->references('id') + ->on('permissions') + ->onDelete('cascade'); + + $table->primary( + ['permission_id', 'model_id', 'model_type'], + 'model_has_permissions_permission_model_type_primary' + ); + }); + + Schema::create('model_has_roles', function (Blueprint $table) { + $table->unsignedBigInteger('role_id'); + + $table->string('model_type'); + $table->unsignedBigInteger('model_id'); + $table->index(['model_id', 'model_type'], 'model_has_roles_model_id_model_type_index'); + + $table->foreign('role_id') + ->references('id') + ->on('roles') + ->onDelete('cascade'); + + $table->primary( + ['role_id', 'model_id', 'model_type'], + 'model_has_roles_role_model_type_primary' + ); + }); + + Schema::create('role_has_permissions', function (Blueprint $table) { + $table->unsignedBigInteger('permission_id'); + $table->unsignedBigInteger('role_id'); + + $table->foreign('permission_id') + ->references('id') + ->on('permissions') + ->onDelete('cascade'); + + $table->foreign('role_id') + ->references('id') + ->on('roles') + ->onDelete('cascade'); + + $table->primary(['permission_id', 'role_id'], 'role_has_permissions_permission_id_role_id_primary'); + }); + + app('cache') + ->store(config('permission.cache.store') != 'default' ? config('permission.cache.store') : null) + ->forget(config('permission.cache.key')); + } + + public function down(): void + { + Schema::drop('role_has_permissions'); + Schema::drop('model_has_roles'); + Schema::drop('model_has_permissions'); + Schema::drop('roles'); + Schema::drop('permissions'); + } +}; diff --git a/database/migrations/2024_05_30_094012_create_soldier_table.php b/database/migrations/2024_05_30_094012_create_soldier_table.php new file mode 100644 index 0000000..2906a58 --- /dev/null +++ b/database/migrations/2024_05_30_094012_create_soldier_table.php @@ -0,0 +1,38 @@ +id(); + $table->foreignId('team_id')->nullable(); + $table->boolean('gender'); + $table->boolean('is_permanent')->default(false); + $table->dateTime('enlist_date')->nullable(); + $table->integer('course'); + $table->boolean('has_exemption'); + $table->integer('max_shift')->nullable(); + $table->integer('max_night')->nullable(); + $table->integer('max_weekend')->nullable(); + $table->integer('capacity'); + $table->integer('capacity_hold'); + $table->boolean('is_trainee'); + $table->boolean('is_mabat'); + $table->json('qualifications'); + $table->boolean('is_reservist')->default(false); + $table->json('reserve_dates')->nullable(); + $table->json('next_reserve_dates')->nullable(); + $table->timestamps(); + }); + } + + public function down(): void + { + Schema::dropIfExists('soldiers'); + } +}; diff --git a/database/migrations/2024_05_30_100244_create_task_table.php b/database/migrations/2024_05_30_100244_create_task_table.php new file mode 100644 index 0000000..ffa4152 --- /dev/null +++ b/database/migrations/2024_05_30_100244_create_task_table.php @@ -0,0 +1,30 @@ +id(); + $table->string('name'); + $table->time('start_hour'); + $table->integer('duration'); + $table->integer('parallel_weight'); + $table->string('type'); + $table->string('color'); + $table->boolean('is_alert'); + $table->string('department_name')->nullable(); + $table->json('recurrence'); + $table->timestamps(); + }); + } + + public function down(): void + { + Schema::dropIfExists('tasks'); + } +}; diff --git a/database/migrations/2024_05_30_103745_create_constraint_table.php b/database/migrations/2024_05_30_103745_create_constraint_table.php new file mode 100644 index 0000000..e4abcb2 --- /dev/null +++ b/database/migrations/2024_05_30_103745_create_constraint_table.php @@ -0,0 +1,25 @@ +id(); + $table->foreignId('soldier_id'); + $table->string('constraint_type'); + $table->dateTime('start_date'); + $table->dateTime('end_date'); + $table->timestamps(); + }); + } + + public function down(): void + { + Schema::dropIfExists('constraints'); + } +}; diff --git a/database/migrations/2024_05_30_104216_create_shift_table.php b/database/migrations/2024_05_30_104216_create_shift_table.php new file mode 100644 index 0000000..bbecf5f --- /dev/null +++ b/database/migrations/2024_05_30_104216_create_shift_table.php @@ -0,0 +1,25 @@ +id(); + $table->foreignId('soldier_id')->nullable(); + $table->foreignId('task_id')->nullable(); + $table->dateTime('start_date'); + $table->dateTime('end_date'); + $table->timestamps(); + }); + } + + public function down(): void + { + Schema::dropIfExists('shifts'); + } +}; diff --git a/database/migrations/2024_06_25_080650_create_team_table.php b/database/migrations/2024_06_25_080650_create_team_table.php new file mode 100644 index 0000000..e6067eb --- /dev/null +++ b/database/migrations/2024_06_25_080650_create_team_table.php @@ -0,0 +1,28 @@ +id(); + $table->string('name'); + $table->integer('commander_id')->nullable(); + $table->foreignId('department_id')->nullable(); + $table->timestamps(); + }); + + Schema::table('teams', function (Blueprint $table) { + $table->foreign('commander_id')->references('id')->on('soldiers'); + }); + } + + public function down(): void + { + Schema::dropIfExists('teams'); + } +}; diff --git a/database/migrations/2024_06_25_080957_create_department_table.php b/database/migrations/2024_06_25_080957_create_department_table.php new file mode 100644 index 0000000..d6950eb --- /dev/null +++ b/database/migrations/2024_06_25_080957_create_department_table.php @@ -0,0 +1,27 @@ +id(); + $table->string('name'); + $table->integer('commander_id')->nullable(); + $table->timestamps(); + }); + + Schema::table('departments', function (Blueprint $table) { + $table->foreign('commander_id')->references('id')->on('soldiers'); + }); + } + + public function down(): void + { + Schema::dropIfExists('departments'); + } +}; diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php new file mode 100644 index 0000000..f9513c6 --- /dev/null +++ b/database/seeders/DatabaseSeeder.php @@ -0,0 +1,28 @@ +create([ + 'first_name' => "name", + 'last_name' => "family", + 'password' => Hash::make(1234567), + 'userable_id' => Soldier::factory()->create()->id, + 'userable_type' => "App\Models\Soldier", + ]); + + $this->call([ + PermissionSeeder::class, + ]); + $user->assignRole('manager'); + } +} diff --git a/database/seeders/PermissionSeeder.php b/database/seeders/PermissionSeeder.php new file mode 100644 index 0000000..36ead89 --- /dev/null +++ b/database/seeders/PermissionSeeder.php @@ -0,0 +1,26 @@ +map(function (?string $role) { + Role::firstOrCreate( + ['name' => $role], + ); + }); + } +} diff --git a/dev.compose.yaml b/dev.compose.yaml new file mode 100644 index 0000000..aca6ef1 --- /dev/null +++ b/dev.compose.yaml @@ -0,0 +1,102 @@ +--- +version: '3.9' + +services: + database: + image: postgres:16.2 + hostname: database + container_name: newspace-scheduler-database + environment: + POSTGRES_USER: ${DB_USERNAME} + POSTGRES_PASSWORD: ${DB_PASSWORD} + POSTGRES_DB: ${DB_DATABASE} + PGDATA: /var/lib/postgresql/data/pgdata + TZ: ${APP_TIMEZONE} + volumes: + - database:/var/lib/postgresql/data/pgdata + networks: + - newspace-scheduler + restart: unless-stopped + + redis: + image: redis:7.2.4 + hostname: cache + container_name: newspace-scheduler-cache + command: + - /bin/sh + - -c + - redis-server --requirepass "$${REDIS_PASSWORD:?REDIS_PASSWORD variable is not set}" + environment: + REDIS_PASSWORD: ${REDIS_PASSWORD} + TZ: ${APP_TIMEZONE} + volumes: + - cache:/data + networks: + - newspace-scheduler + restart: unless-stopped + + mailer: + image: axllent/mailpit:v1.13.3 + hostname: mailer + container_name: newspace-scheduler-mailer + environment: + MP_MAX_MESSAGES: 500 + MP_DATA_FILE: /data/mailpit.db + MP_SMTP_AUTH_ACCEPT_ANY: 1 + MP_SMTP_AUTH_ALLOW_INSECURE: 1 + TZ: ${APP_TIMEZONE} + ports: + - 8025:8025 + volumes: + - mailer:/data + networks: + - newspace-scheduler + restart: unless-stopped + + s3: + image: minio/minio:RELEASE.2024-02-14T21-36-02Z + hostname: s3 + container_name: newspace-scheduler-s3 + environment: + MINIO_ROOT_USER: ${AWS_ACCESS_KEY_ID} + MINIO_ROOT_PASSWORD: ${AWS_SECRET_ACCESS_KEY} + MINIO_DEFAULT_BUCKET: ${AWS_BUCKET} + ports: + - 9006:9006 + volumes: + - s3:/data + command: server /data --console-address :9006 + healthcheck: + test: + - CMD + - curl + - -f + - http://localhost:9000/minio/health/live + interval: 30s + timeout: 20s + retries: 3 + networks: + - newspace-scheduler + restart: unless-stopped + +networks: + newspace-scheduler: + external: true + name: newspace-scheduler + +volumes: + cache: + external: true + name: newspace-scheduler-cache + + database: + external: true + name: newspace-scheduler-database + + mailer: + external: true + name: newspace-scheduler-mailer + + s3: + external: true + name: newspace-scheduler-s3 diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100644 index 0000000..1059cda --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,106 @@ +#!/bin/bash + +set -e + +: "${CONTAINER_MODE:=app}" +: "${CONTAINER_PORT:=8000}" +: "${CONTAINER_WORKER_DELAY:=10}" +: "${CONTAINER_WORKER_SLEEP:=5}" +: "${CONTAINER_WORKER_TIMEOUT:=300}" +: "${CONTAINER_WORKER_TRIES:=3}" +: "${CONTAINER_SCHEDULER_INTERVAL:=60}" +: "${APP_ENV:=production}" + +ARTISAN="php -d variables_order=EGPCS artisan" + +_migrate() { + local count=0 + local timeout=20 + + while [ $count -lt "${timeout}" ]; do + php -f common/test_db_connection.php + + status=$? + + if [ $status -eq 0 ]; then + echo "✅ Database connection successful." + break + fi + + echo "⏱ Waiting on database connection, retrying... $((timeout - count)) seconds left" + count=$((count + 1)) + sleep 1 + done + + if [ $count -eq "${timeout}" ]; then + echo "⛔ Database connection failed after multiple attempts." + exit 1 + fi + + echo "🚀 Running migrations..." + ${ARTISAN} migrate:fresh --force --seed +} + + +_setup() { + if [ -n "${CONTAINER_MANUAL_SETUP}" ]; then + echo "⏭: Skipping setup..." + return + fi + + _migrate + + if [ -d "/laravel/app/public/storage" ]; then + echo "✅ Storage already linked..." + else + echo "🔐 Linking the storage..." + ${ARTISAN} storage:link + fi + + ${ARTISAN} key:generate + ${ARTISAN} cache:clear + ${ARTISAN} config:cache + ${ARTISAN} event:cache + ${ARTISAN} route:cache + ${ARTISAN} view:cache + npm run build +} + +_run() { + case "${CONTAINER_MODE}" in + app) + echo "🚀 Running octane..." + # composer require laravel/octane + # ${ARTISAN} octane:frankenphp --host=0.0.0.0 --port="${CONTAINER_PORT}" + ${ARTISAN} schedule:work & + ${ARTISAN} serve --host=0.0.0.0 --port="${CONTAINER_PORT}" + ;; + worker) + echo "⏳ Running the queue..." + exec "${ARTISAN}" queue:work -vv \ + --no-interaction \ + --tries="${CONTAINER_WORKER_TRIES}" \ + --sleep="${CONTAINER_WORKER_SLEEP}" \ + --timeout="${CONTAINER_WORKER_TIMEOUT}" \ + --delay="${CONTAINER_WORKER_DELAY}" + ;; + horizon) + echo "Running horizon..." + exec "${ARTISAN}" horizon + ;; + scheduler) + while true; do + echo "📆 Running scheduled tasks." + "${ARTISAN}" schedule:run --verbose --no-interaction & + sleep "${CONTAINER_SCHEDULER_INTERVAL}s" + done + ;; + *) + echo "⛔ Could not match the container mode [${CONTAINER_MODE}]" + exit 1 + ;; + esac +} + +_setup +_run \ No newline at end of file diff --git a/github-scripts/find-closed-issues.sh b/github-scripts/find-closed-issues.sh new file mode 100644 index 0000000..c6afc82 --- /dev/null +++ b/github-scripts/find-closed-issues.sh @@ -0,0 +1,11 @@ +#! /bin/bash +GITHUB_TOKEN=$1 +CURRENT_RELEASE_PATH=$2 +URL="https://api.github.com/repos/${GITHUB_REPOSITORY}" +AUTHORIZE="Authorization: Bearer $GITHUB_TOKEN" + +previous_release_created_at=$(curl -s -H "$AUTHORIZE" "$URL/releases" | jq -r '.[1] | .created_at') +issues=$(curl -s -H "$AUTHORIZE" "$URL/issues?state=closed&per_page=100&since=$previous_release_created_at&until=$(date -u +'%Y-%m-%dT%H:%M:%SZ')") +issue_list=$(echo "$issues" | jq -r '.[] | "- \(.title) in [#\(.number)](\(.html_url)) by [@\(.assignee.login )](https://github.com/\(.assignee.login))"' | paste -sd '\n') + +curl -X PATCH -H "$AUTHORIZE" -d "$(jq -n --arg body $'Whats Changed:\n'"$issue_list" '{body: $body | gsub(" - "; "\n")}' )" "$CURRENT_RELEASE_PATH" diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..6efbe0e --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2537 @@ +{ + "name": "app", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "devDependencies": { + "@tailwindcss/forms": "^0.5.7", + "@tailwindcss/typography": "^0.5.10", + "autoprefixer": "^10.4.18", + "axios": "^1.6.4", + "laravel-vite-plugin": "^1.0.2", + "postcss": "^8.4.35", + "postcss-nesting": "^12.1.0", + "tailwindcss": "^3.4.1", + "vite": "^5.1.6" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", + "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", + "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.2.tgz", + "integrity": "sha512-3XFIDKWMFZrMnao1mJhnOT1h2g0169Os848NhhmGweEcfJ4rCi+3yMCOLG4zA61rbJdkcrM/DjVZm9Hg5p5w7g==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.2.tgz", + "integrity": "sha512-GdxxXbAuM7Y/YQM9/TwwP+L0omeE/lJAR1J+olu36c3LqqZEBdsIWeQ91KBe6nxwOnb06Xh7JS2U5ooWU5/LgQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.2.tgz", + "integrity": "sha512-mCMlpzlBgOTdaFs83I4XRr8wNPveJiJX1RLfv4hggyIVhfB5mJfN4P8Z6yKh+oE4Luz+qq1P3kVdWrCKcMYrrA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.2.tgz", + "integrity": "sha512-yUoEvnH0FBef/NbB1u6d3HNGyruAKnN74LrPAfDQL3O32e3k3OSfLrPgSJmgb3PJrBZWfPyt6m4ZhAFa2nZp2A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.2.tgz", + "integrity": "sha512-GYbLs5ErswU/Xs7aGXqzc3RrdEjKdmoCrgzhJWyFL0r5fL3qd1NPcDKDowDnmcoSiGJeU68/Vy+OMUluRxPiLQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.2.tgz", + "integrity": "sha512-L1+D8/wqGnKQIlh4Zre9i4R4b4noxzH5DDciyahX4oOz62CphY7WDWqJoQ66zNR4oScLNOqQJfNSIAe/6TPUmQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.2.tgz", + "integrity": "sha512-tK5eoKFkXdz6vjfkSTCupUzCo40xueTOiOO6PeEIadlNBkadH1wNOH8ILCPIl8by/Gmb5AGAeQOFeLev7iZDOA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.13.2.tgz", + "integrity": "sha512-zvXvAUGGEYi6tYhcDmb9wlOckVbuD+7z3mzInCSTACJ4DQrdSLPNUeDIcAQW39M3q6PDquqLWu7pnO39uSMRzQ==", + "cpu": [ + "ppc64le" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.2.tgz", + "integrity": "sha512-C3GSKvMtdudHCN5HdmAMSRYR2kkhgdOfye4w0xzyii7lebVr4riCgmM6lRiSCnJn2w1Xz7ZZzHKuLrjx5620kw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.13.2.tgz", + "integrity": "sha512-l4U0KDFwzD36j7HdfJ5/TveEQ1fUTjFFQP5qIt9gBqBgu1G8/kCaq5Ok05kd5TG9F8Lltf3MoYsUMw3rNlJ0Yg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.2.tgz", + "integrity": "sha512-xXMLUAMzrtsvh3cZ448vbXqlUa7ZL8z0MwHp63K2IIID2+DeP5iWIT6g1SN7hg1VxPzqx0xZdiDM9l4n9LRU1A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.2.tgz", + "integrity": "sha512-M/JYAWickafUijWPai4ehrjzVPKRCyDb1SLuO+ZyPfoXgeCEAlgPkNXewFZx0zcnoIe3ay4UjXIMdXQXOZXWqA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.2.tgz", + "integrity": "sha512-2YWwoVg9KRkIKaXSh0mz3NmfurpmYoBBTAXA9qt7VXk0Xy12PoOP40EFuau+ajgALbbhi4uTj3tSG3tVseCjuA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.2.tgz", + "integrity": "sha512-2FSsE9aQ6OWD20E498NYKEQLneShWes0NGMPQwxWOdws35qQXH+FplabOSP5zEe1pVjurSDOGEVCE2agFwSEsw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.2.tgz", + "integrity": "sha512-7h7J2nokcdPePdKykd8wtc8QqqkqxIrUz7MHj6aNr8waBRU//NLDVnNjQnqQO6fqtjrtCdftpbTuOKAyrAQETQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@tailwindcss/forms": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.7.tgz", + "integrity": "sha512-QE7X69iQI+ZXwldE+rzasvbJiyV/ju1FGHH0Qn2W3FKbuYtqp8LKcy6iSw79fVUT5/Vvf+0XgLCeYVG+UV6hOw==", + "dev": true, + "dependencies": { + "mini-svg-data-uri": "^1.2.3" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1" + } + }, + "node_modules/@tailwindcss/typography": { + "version": "0.5.12", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.12.tgz", + "integrity": "sha512-CNwpBpconcP7ppxmuq3qvaCxiRWnbhANpY/ruH4L5qs2GCiVDJXde/pjj2HWPV1+Q4G9+V/etrwUYopdcjAlyg==", + "dev": true, + "dependencies": { + "lodash.castarray": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.merge": "^4.6.2", + "postcss-selector-parser": "6.0.10" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/autoprefixer": { + "version": "10.4.19", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", + "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.23.0", + "caniuse-lite": "^1.0.30001599", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/axios": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", + "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001605", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001605.tgz", + "integrity": "sha512-nXwGlFWo34uliI9z3n6Qc0wZaf7zaZWA1CPZ169La5mV3I/gem7bst0vr5XQH5TJXZIMfDeZyOrZnSlVzKxxHQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.4.723", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.723.tgz", + "integrity": "sha512-rxFVtrMGMFROr4qqU6n95rUi9IlfIm+lIAt+hOToy/9r6CDv0XiEcQdC3VP71y1pE5CFTzKV0RvxOGYCPWWHPw==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", + "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.20.2", + "@esbuild/android-arm": "0.20.2", + "@esbuild/android-arm64": "0.20.2", + "@esbuild/android-x64": "0.20.2", + "@esbuild/darwin-arm64": "0.20.2", + "@esbuild/darwin-x64": "0.20.2", + "@esbuild/freebsd-arm64": "0.20.2", + "@esbuild/freebsd-x64": "0.20.2", + "@esbuild/linux-arm": "0.20.2", + "@esbuild/linux-arm64": "0.20.2", + "@esbuild/linux-ia32": "0.20.2", + "@esbuild/linux-loong64": "0.20.2", + "@esbuild/linux-mips64el": "0.20.2", + "@esbuild/linux-ppc64": "0.20.2", + "@esbuild/linux-riscv64": "0.20.2", + "@esbuild/linux-s390x": "0.20.2", + "@esbuild/linux-x64": "0.20.2", + "@esbuild/netbsd-x64": "0.20.2", + "@esbuild/openbsd-x64": "0.20.2", + "@esbuild/sunos-x64": "0.20.2", + "@esbuild/win32-arm64": "0.20.2", + "@esbuild/win32-ia32": "0.20.2", + "@esbuild/win32-x64": "0.20.2" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/laravel-vite-plugin": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-1.0.2.tgz", + "integrity": "sha512-Mcclml10khYzBVxDwJro8wnVDwD4i7XOSEMACQNnarvTnHjrjXLLL+B/Snif2wYAyElsOqagJZ7VAinb/2vF5g==", + "dev": true, + "dependencies": { + "picocolors": "^1.0.0", + "vite-plugin-full-reload": "^1.1.0" + }, + "bin": { + "clean-orphaned-assets": "bin/clean.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/lodash.castarray": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", + "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==", + "dev": true + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mini-svg-data-uri": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", + "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", + "dev": true, + "bin": { + "mini-svg-data-uri": "cli.js" + } + }, + "node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-scurry": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", + "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss": { + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", + "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/postcss-nested": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.11" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-nested/node_modules/postcss-selector-parser": { + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-nesting": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-12.1.1.tgz", + "integrity": "sha512-qc74KvIAQNa5ujZKG1UV286dhaDW6basbUy2i9AzNU/T8C9hpvGu9NZzm1SfePe2yP7sPYgpA8d4sPVopn2Hhw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/selector-resolve-nested": "^1.1.0", + "@csstools/selector-specificity": "^3.0.3", + "postcss-selector-parser": "^6.0.13" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-nesting/node_modules/@csstools/selector-resolve-nested": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-1.1.0.tgz", + "integrity": "sha512-uWvSaeRcHyeNenKg8tp17EVDRkpflmdyvbE0DHo6D/GdBb6PDnCYYU6gRpXhtICMGMcahQmj2zGxwFM/WC8hCg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.13" + } + }, + "node_modules/postcss-nesting/node_modules/@csstools/selector-specificity": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.3.tgz", + "integrity": "sha512-KEPNw4+WW5AVEIyzC80rTbWEUatTW2lXpN8+8ILC8PiPeWPjwUzrPZDIOZ2wwqDmeqOYTdSGyL3+vE5GC3FB3Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.13" + } + }, + "node_modules/postcss-nesting/node_modules/postcss-selector-parser": { + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.13.2.tgz", + "integrity": "sha512-MIlLgsdMprDBXC+4hsPgzWUasLO9CE4zOkj/u6j+Z6j5A4zRY+CtiXAdJyPtgCsc42g658Aeh1DlrdVEJhsL2g==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.13.2", + "@rollup/rollup-android-arm64": "4.13.2", + "@rollup/rollup-darwin-arm64": "4.13.2", + "@rollup/rollup-darwin-x64": "4.13.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.13.2", + "@rollup/rollup-linux-arm64-gnu": "4.13.2", + "@rollup/rollup-linux-arm64-musl": "4.13.2", + "@rollup/rollup-linux-powerpc64le-gnu": "4.13.2", + "@rollup/rollup-linux-riscv64-gnu": "4.13.2", + "@rollup/rollup-linux-s390x-gnu": "4.13.2", + "@rollup/rollup-linux-x64-gnu": "4.13.2", + "@rollup/rollup-linux-x64-musl": "4.13.2", + "@rollup/rollup-win32-arm64-msvc": "4.13.2", + "@rollup/rollup-win32-ia32-msvc": "4.13.2", + "@rollup/rollup-win32-x64-msvc": "4.13.2", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.3.tgz", + "integrity": "sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==", + "dev": true, + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.0", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss/node_modules/postcss-selector-parser": { + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/vite": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.7.tgz", + "integrity": "sha512-k14PWOKLI6pMaSzAuGtT+Cf0YmIx12z9YGon39onaJNy8DLBfBJrzg9FQEmkAM5lpHBZs9wksWAsyF/HkpEwJA==", + "dev": true, + "dependencies": { + "esbuild": "^0.20.1", + "postcss": "^8.4.38", + "rollup": "^4.13.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-plugin-full-reload": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vite-plugin-full-reload/-/vite-plugin-full-reload-1.1.0.tgz", + "integrity": "sha512-3cObNDzX6DdfhD9E7kf6w2mNunFpD7drxyNgHLw+XwIYAgb+Xt16SEXo0Up4VH+TMf3n+DSVJZtW2POBGcBYAA==", + "dev": true, + "dependencies": { + "picocolors": "^1.0.0", + "picomatch": "^2.3.1" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yaml": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz", + "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==", + "dev": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..55dd089 --- /dev/null +++ b/package.json @@ -0,0 +1,19 @@ +{ + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build" + }, + "devDependencies": { + "@tailwindcss/forms": "^0.5.7", + "@tailwindcss/typography": "^0.5.10", + "autoprefixer": "^10.4.18", + "axios": "^1.6.4", + "laravel-vite-plugin": "^1.0.2", + "postcss": "^8.4.35", + "postcss-nesting": "^12.1.0", + "tailwindcss": "^3.4.1", + "vite": "^5.1.6" + } +} diff --git a/php.ini b/php.ini new file mode 100644 index 0000000..edf95f2 --- /dev/null +++ b/php.ini @@ -0,0 +1,99 @@ +[PHP] +allow_url_fopen = On +allow_url_include = Off +auto_append_file = +auto_globals_jit = On +auto_prepend_file = +default_mimetype = text/html +default_charset = UTF-8 +default_socket_timeout = 60 +display_errors = Off +display_startup_errors = Off +doc_root = +enable_dl = Off +engine = On +error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT +expose_php = On +file_uploads = On +ignore_repeated_errors = Off +ignore_repeated_source = Off +implicit_flush = Off +log_errors = On +max_execution_time = 600 +max_file_uploads = 20 +max_input_time = 180 +memory_limit = 256M +output_buffering = 4096 +post_max_size = 100M +precision = 14 +register_argc_argv = Off +report_memleaks = On +request_order = GP +serialize_precision = -1 +short_open_tag = Off +upload_max_filesize = 32M +user_dir = +variables_order = GPCS +zend.enable_gc = On +zend.exception_ignore_args = On +zend.exception_string_param_max_len = 0 +zlib.output_compression = Off + +[CLI Server] +cli_server.color = On + +[PostgreSQL] +pgsql.allow_persistent = On +pgsql.auto_reset_persistent = Off +pgsql.max_persistent = -1 +pgsql.max_links = -1 +pgsql.ignore_notice = 0 +pgsql.log_notice = 0 + +[bcmath] +bcmath.scale = 0 + +[Session] +session.save_handler = files +session.use_strict_mode = 0 +session.use_cookies = 1 +session.use_only_cookies = 1 +session.name = PHPSESSID +session.auto_start = 0 +session.cookie_lifetime = 0 +session.cookie_path = / +session.cookie_domain = +session.cookie_httponly = +session.cookie_samesite = +session.serialize_handler = php +session.gc_probability = 1 +session.gc_divisor = 1000 +session.gc_maxlifetime = 1440 +session.referer_check = +session.cache_limiter = nocache +session.cache_expire = 180 +session.use_trans_sid = 0 +session.sid_length = 26 +session.trans_sid_tags = "a=href,area=href,frame=src,form=" +session.sid_bits_per_character = 5 + +[Opcache] +opcache.enable = 1 +opcache.enable_cli = 1 +opcache.file_cache = 60 +opcache.file_update_protection = 0 +opcache.interned_strings_buffer = 64 +opcache.max_accelerated_files = 32531 +opcache.max_file_size = 0 +opcache.max_wasted_percentage = 15 +opcache.memory_consumption = 256M +opcache.revalidate_freq = 2 +opcache.use_cwd = 0 +opcache.validate_timestamps = 0 + +[JIT] +opcache.jit = function +opcache.jit_buffer_size = 128M +opcache.jit_max_root_traces = 2048 +opcache.jit_max_side_traces = 256 +opcache.jit_prof_threshold = 0.001 \ No newline at end of file diff --git a/php.ini.dev b/php.ini.dev new file mode 100644 index 0000000..0600207 --- /dev/null +++ b/php.ini.dev @@ -0,0 +1,2 @@ +extension = pdo_pgsql +memory_limit = 256M diff --git a/phpunit.xml b/phpunit.xml new file mode 100644 index 0000000..61c031c --- /dev/null +++ b/phpunit.xml @@ -0,0 +1,33 @@ + + + + + tests/Unit + + + tests/Feature + + + + + app + + + + + + + + + + + + + + + + diff --git a/pint.json b/pint.json new file mode 100644 index 0000000..02b0834 --- /dev/null +++ b/pint.json @@ -0,0 +1,3 @@ +{ + "preset": "laravel" +} diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..1786ac8 --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,7 @@ +export default { + plugins: { + 'tailwindcss/nesting': 'postcss-nesting', + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/public/.htaccess b/public/.htaccess new file mode 100644 index 0000000..3aec5e2 --- /dev/null +++ b/public/.htaccess @@ -0,0 +1,21 @@ + + + Options -MultiViews -Indexes + + + RewriteEngine On + + # Handle Authorization Header + RewriteCond %{HTTP:Authorization} . + RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] + + # Redirect Trailing Slashes If Not A Folder... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_URI} (.+)/$ + RewriteRule ^ %1 [L,R=301] + + # Send Requests To Front Controller... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^ index.php [L] + diff --git a/public/css/coolsam/flatpickr/flatpickr-css.css b/public/css/coolsam/flatpickr/flatpickr-css.css new file mode 100644 index 0000000..51bacc0 --- /dev/null +++ b/public/css/coolsam/flatpickr/flatpickr-css.css @@ -0,0 +1,119 @@ +.flatpickr-calendar { + background: transparent; + opacity: 0; + display: none; + text-align: center; + visibility: hidden; + padding: 0; + -webkit-animation: none; + animation: none; + direction: ltr; + border: 0; + font-size: 14px; + line-height: 24px; + border-radius: 5px; + position: absolute; + width: 307.875px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -ms-touch-action: manipulation; + touch-action: manipulation; + background: #fff; + -webkit-box-shadow: 1px 0 0 #e6e6e6, -1px 0 0 #e6e6e6, 0 1px 0 #e6e6e6, 0 -1px 0 #e6e6e6, 0 3px 13px rgba(0,0,0,0.08); + box-shadow: 1px 0 0 #e6e6e6, -1px 0 0 #e6e6e6, 0 1px 0 #e6e6e6, 0 -1px 0 #e6e6e6, 0 3px 13px rgba(0,0,0,0.08); +} +.flatpickr-calendar.open, +.flatpickr-calendar.inline { + opacity: 1; + max-height: 640px; + visibility: visible; +} +.flatpickr-calendar.open { + display: inline-block; + z-index: 99999; +} + +.flatpickr-calendar.animate.open { + -webkit-animation: fpFadeInDown 300ms cubic-bezier(0.23, 1, 0.32, 1); + animation: fpFadeInDown 300ms cubic-bezier(0.23, 1, 0.32, 1); +} + +.flatpickr-calendar:before, +.flatpickr-calendar:after { + position: absolute; + display: block; + pointer-events: none; + border: solid transparent; + content: ''; + height: 0; + width: 0; + left: 22px; +} + +.flatpickr-calendar:before { + border-width: 5px; + margin: 0 -5px; +} +.flatpickr-calendar:after { + border-width: 4px; + margin: 0 -4px; +} +.flatpickr-calendar.arrowTop:before, +.flatpickr-calendar.arrowTop:after { + bottom: 100%; +} +.flatpickr-calendar.arrowTop:before { + border-bottom-color: #e6e6e6; +} +.flatpickr-calendar.arrowTop:after { + border-bottom-color: #fff; +} + +.flatpickr-months { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; +} +.flatpickr-months .flatpickr-month { + background: transparent; + color: rgba(0,0,0,0.9); + fill: rgba(0,0,0,0.9); + height: 34px; + line-height: 1; + text-align: center; + position: relative; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + overflow: hidden; + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; +} + +.numInputWrapper span { + position: absolute; + right: 0; + width: 14px; + padding: 0 4px 0 2px; + height: 50%; + line-height: 50%; + opacity: 0; + cursor: pointer; + border: 1px solid rgba(57,57,57,0.15); + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +.flatpickr-innerContainer { + display: block; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-sizing: border-box; + box-sizing: border-box; + overflow: hidden; +} diff --git a/public/css/coolsam/flatpickr/flatpickr-them.css b/public/css/coolsam/flatpickr/flatpickr-them.css new file mode 100644 index 0000000..1e60a97 --- /dev/null +++ b/public/css/coolsam/flatpickr/flatpickr-them.css @@ -0,0 +1,372 @@ +.flatpickr-calendar { + background: transparent; + opacity: 0; + display: none; + text-align: center; + visibility: hidden; + padding: 0; + -webkit-animation: none; + animation: none; + direction: ltr; + border: 0; + font-size: 14px; + line-height: 24px; + border-radius: 5px; + position: absolute; + width: 307.875px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -ms-touch-action: manipulation; + touch-action: manipulation; + background: #fff; + -webkit-box-shadow: 1px 0 0 #e6e6e6, -1px 0 0 #e6e6e6, 0 1px 0 #e6e6e6, 0 -1px 0 #e6e6e6, 0 3px 13px rgba(0,0,0,0.08); + box-shadow: 1px 0 0 #e6e6e6, -1px 0 0 #e6e6e6, 0 1px 0 #e6e6e6, 0 -1px 0 #e6e6e6, 0 3px 13px rgba(0,0,0,0.08); +} +.flatpickr-calendar.open, +.flatpickr-calendar.inline { + opacity: 1; + max-height: 640px; + visibility: visible; +} +.flatpickr-calendar.open { + display: inline-block; + z-index: 99999; +} +.flatpickr-calendar.animate.open { + -webkit-animation: fpFadeInDown 300ms cubic-bezier(0.23, 1, 0.32, 1); + animation: fpFadeInDown 300ms cubic-bezier(0.23, 1, 0.32, 1); +} +.flatpickr-calendar:before, +.flatpickr-calendar:after { + position: absolute; + display: block; + pointer-events: none; + border: solid transparent; + content: ''; + height: 0; + width: 0; + left: 22px; +} +.flatpickr-calendar:before { + border-width: 5px; + margin: 0 -5px; +} +.flatpickr-calendar:after { + border-width: 4px; + margin: 0 -4px; +} +.flatpickr-calendar.arrowTop:before, +.flatpickr-calendar.arrowTop:after { + bottom: 100%; +} +.flatpickr-calendar.arrowTop:before { + border-bottom-color: rgba(72,72,72,0.1); +} +.flatpickr-calendar.arrowTop:after { + border-bottom-color: #ffb866; +} +.flatpickr-months { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; +} +.flatpickr-months .flatpickr-month { + background: #eb8715; + color: rgba(0,0,0,0.9); + fill: rgba(0,0,0,0.9); + height: 34px; + line-height: 1; + text-align: center; + position: relative; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + overflow: hidden; + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; +} +.numInputWrapper { + position: relative; + height: auto; +} +.numInputWrapper input, +.numInputWrapper span { + display: inline-block; +} +.numInputWrapper input { + width: 100%; +} +.numInputWrapper input::-webkit-outer-spin-button, +.numInputWrapper input::-webkit-inner-spin-button { + margin: 0; + -webkit-appearance: none; + cursor: pointer; + +} +.numInputWrapper span { + position: absolute; + right: 0; + width: 14px; + padding: 0 4px 0 2px; + height: 50%; + line-height: 50%; + opacity: 0; + cursor: pointer; + border: 1px solid rgba(72,72,72,0.15); + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +.numInputWrapper span:after { + display: block; + content: ""; + position: absolute; +} +.numInputWrapper span.arrowUp { + top: 0; + border-bottom: 0; +} +.numInputWrapper span.arrowUp:after { + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-bottom: 4px solid rgba(57,57,57,0.6); + top: 26%; +} +.numInputWrapper span.arrowDown { + top: 50%; +} +.numInputWrapper span.arrowDown:after { + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid rgba(57,57,57,0.6); + top: 40%; +} +.flatpickr-current-month { + font-size: 135%; + line-height: inherit; + font-weight: 300; + color: inherit; + position: absolute; + width: 75%; + left: 12.5%; + padding: 7.48px 0 0 0; + line-height: 1; + height: 34px; + display: inline-block; + text-align: center; + -webkit-transform: translate3d(0px, 0px, 0px); + transform: translate3d(0px, 0px, 0px); +} +.flatpickr-current-month .numInputWrapper { + width: 6ch; + width: 7ch\0; + display: inline-block; +} +.flatpickr-current-month .numInputWrapper span.arrowUp:after { + border-bottom-color: #fff; +} +.flatpickr-current-month .numInputWrapper span.arrowDown:after { + border-top-color: #fff; +} +.flatpickr-current-month input.cur-year { + background: transparent; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: inherit; + cursor: pointer; + padding: 0 0 0 0.5ch; + margin: 0; + display: inline-block; + font-size: inherit; + font-family: inherit; + font-weight: 300; + line-height: inherit; + height: auto; + border: 0; + border-radius: 0; + vertical-align: initial; + -webkit-appearance: textfield; + -moz-appearance: textfield; + appearance: textfield; +} +.flatpickr-current-month input.cur-year[disabled], +.flatpickr-current-month input.cur-year[disabled]:hover { + font-size: 100%; + color: rgba(255,255,255,0.5); + background: transparent; + pointer-events: none; +} +.flatpickr-current-month .flatpickr-monthDropdown-months { + appearance: menulist; + background: #e58b24; + border: none; + border-radius: 0; + box-sizing: border-box; + color: inherit; + cursor: pointer; + font-size: inherit; + font-family: inherit; + font-weight: 300; + height: auto; + line-height: inherit; + margin: -1px 0 0 0; + outline: none; + padding: 0 0 0 0.5ch; + position: relative; + vertical-align: initial; + -webkit-box-sizing: border-box; + -webkit-appearance: menulist; + -moz-appearance: menulist; + width: auto; +} +.flatpickr-current-month .flatpickr-monthDropdown-months .flatpickr-monthDropdown-month { + background-color: #e58b24; + outline: none; + padding: 0; +} +.flatpickr-weekdays { + background: #e58b24; + text-align: center; + overflow: hidden; + width: 100%; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + height: 28px; +} +.flatpickr-weekdays .flatpickr-weekdaycontainer { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; +} +span.flatpickr-weekday { + cursor: default; + font-size: 90%; + background: #e58b24; + color: rgba(0,0,0,0.54); + line-height: 1; + margin: 0; + text-align: center; + display: block; + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + font-weight: bolder; +} +.dayContainer, +.flatpickr-weeks { + padding: 1px 0 0 0; +} +.flatpickr-days { + position: relative; + overflow: hidden; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: start; + -webkit-align-items: flex-start; + -ms-flex-align: start; + align-items: flex-start; + width: 307.875px; +} +.dayContainer { + padding: 0; + outline: 0; + text-align: left; + width: 307.875px; + min-width: 307.875px; + max-width: 307.875px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + display: inline-block; + display: -ms-flexbox; + display: -webkit-box; + display: -webkit-flex; + display: flex; + -webkit-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-wrap: wrap; + -ms-flex-pack: justify; + -webkit-justify-content: space-around; + justify-content: space-around; + -webkit-transform: translate3d(0px, 0px, 0px); + transform: translate3d(0px, 0px, 0px); + opacity: 1; +} +.flatpickr-day { + background: none; + border: 1px solid transparent; + border-radius: 150px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #393939; + cursor: pointer; + font-weight: 400; + width: 14.2857143%; + -webkit-flex-basis: 14.2857143%; + -ms-flex-preferred-size: 14.2857143%; + flex-basis: 14.2857143%; + max-width: 39px; + height: 39px; + line-height: 39px; + margin: 0; + display: inline-block; + position: relative; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + text-align: center; +} +.flatpickr-day.selected, +.flatpickr-day.selected:focus, +.flatpickr-day.selected:hover{ + background: #e58b24; + -webkit-box-shadow: none; + box-shadow: none; + color: #fff; + border-color: #e58b24; +} +.flatpickr-day.flatpickr-disabled, +.flatpickr-day.flatpickr-disabled:hover { + cursor: not-allowed; + color: rgba(57,57,57,0.1); +} +.flatpickr-day.flatpickr-disabled, +.flatpickr-day.flatpickr-disabled:hover{ + color: rgba(57,57,57,0.3); + background: transparent; + border-color: transparent; + cursor: default; +} + +.flatpickr-confirm { + height: 40px; + max-height: 0px; + visibility: hidden; + display: flex; + justify-content: center; + align-items: center; + cursor: pointer; + background: rgba(0,0,0,0.06) +} + +.flatpickr-confirm.visible { + max-height: 40px; + visibility: visible +} diff --git a/public/css/filament/filament/app.css b/public/css/filament/filament/app.css new file mode 100644 index 0000000..f383d7e --- /dev/null +++ b/public/css/filament/filament/app.css @@ -0,0 +1 @@ +/*! tailwindcss v3.4.3 | MIT License | https://tailwindcss.com*/*,:after,:before{border-color:rgba(var(--gray-200),1);border-style:solid;border-width:0;box-sizing:border-box}:after,:before{--tw-content:""}:host,html{-webkit-text-size-adjust:100%;font-feature-settings:normal;-webkit-tap-highlight-color:transparent;font-family:var(--font-family),ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-variation-settings:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-feature-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:rgba(var(--gray-400),1);opacity:1}input::placeholder,textarea::placeholder{color:rgba(var(--gray-400),1);opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}[multiple],[type=date],[type=datetime-local],[type=email],[type=month],[type=number],[type=password],[type=search],[type=tel],[type=text],[type=time],[type=url],[type=week],input:where(:not([type])),select,textarea{--tw-shadow:0 0 #0000;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:rgba(var(--gray-500),var(--tw-border-opacity,1));border-radius:0;border-width:1px;font-size:1rem;line-height:1.5rem;padding:.5rem .75rem}[multiple]:focus,[type=date]:focus,[type=datetime-local]:focus,[type=email]:focus,[type=month]:focus,[type=number]:focus,[type=password]:focus,[type=search]:focus,[type=tel]:focus,[type=text]:focus,[type=time]:focus,[type=url]:focus,[type=week]:focus,input:where(:not([type])):focus,select:focus,textarea:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);border-color:#2563eb;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid transparent;outline-offset:2px}input::-moz-placeholder,textarea::-moz-placeholder{color:rgba(var(--gray-500),var(--tw-text-opacity,1));opacity:1}input::placeholder,textarea::placeholder{color:rgba(var(--gray-500),var(--tw-text-opacity,1));opacity:1}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-date-and-time-value{min-height:1.5em;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-meridiem-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-year-field{padding-bottom:0;padding-top:0}select{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='rgba(var(--gray-500), var(--tw-stroke-opacity, 1))' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}[multiple],[size]:where(select:not([size="1"])){background-image:none;background-position:0 0;background-repeat:unset;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:unset;print-color-adjust:unset}[type=checkbox],[type=radio]{--tw-shadow:0 0 #0000;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;background-origin:border-box;border-color:rgba(var(--gray-500),var(--tw-border-opacity,1));border-width:1px;color:#2563eb;display:inline-block;flex-shrink:0;height:1rem;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:1rem}[type=checkbox]{border-radius:0}[type=radio]{border-radius:100%}[type=checkbox]:focus,[type=radio]:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:2px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid transparent;outline-offset:2px}[type=checkbox]:checked,[type=radio]:checked{background-color:currentColor;background-position:50%;background-repeat:no-repeat;background-size:100% 100%;border-color:transparent}[type=checkbox]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.207 4.793a1 1 0 0 1 0 1.414l-5 5a1 1 0 0 1-1.414 0l-2-2a1 1 0 0 1 1.414-1.414L6.5 9.086l4.293-4.293a1 1 0 0 1 1.414 0z'/%3E%3C/svg%3E")}@media (forced-colors:active) {[type=checkbox]:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=radio]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='8' cy='8' r='3'/%3E%3C/svg%3E")}@media (forced-colors:active) {[type=radio]:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=checkbox]:checked:focus,[type=checkbox]:checked:hover,[type=radio]:checked:focus,[type=radio]:checked:hover{background-color:currentColor;border-color:transparent}[type=checkbox]:indeterminate{background-color:currentColor;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3E%3Cpath stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:100% 100%;border-color:transparent}@media (forced-colors:active) {[type=checkbox]:indeterminate{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=checkbox]:indeterminate:focus,[type=checkbox]:indeterminate:hover{background-color:currentColor;border-color:transparent}[type=file]{background:unset;border-color:inherit;border-radius:0;border-width:0;font-size:unset;line-height:inherit;padding:0}[type=file]:focus{outline:1px solid ButtonText;outline:1px auto -webkit-focus-ring-color}:root.dark{color-scheme:dark}[data-field-wrapper]{scroll-margin-top:8rem}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-bottom:1.2em;margin-top:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);font-weight:500;text-decoration:underline}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-bottom:1.25em;margin-top:1.25em;padding-inline-start:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-bottom:1.25em;margin-top:1.25em;padding-inline-start:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-counters);font-weight:400}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-bottom:3em;margin-top:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){border-inline-start-color:var(--tw-prose-quote-borders);border-inline-start-width:.25rem;color:var(--tw-prose-quotes);font-style:italic;font-weight:500;margin-bottom:1.6em;margin-top:1.6em;padding-inline-start:1em;quotes:"\201C""\201D""\2018""\2019"}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-size:2.25em;font-weight:800;line-height:1.1111111;margin-bottom:.8888889em;margin-top:0}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:900}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-size:1.5em;font-weight:700;line-height:1.3333333;margin-bottom:1em;margin-top:2em}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:800}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-size:1.25em;font-weight:600;line-height:1.6;margin-bottom:.6em;margin-top:1.6em}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;line-height:1.5;margin-bottom:.5em;margin-top:1.5em}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-bottom:2em;margin-top:2em}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.3125rem;box-shadow:0 0 0 1px rgb(var(--tw-prose-kbd-shadows)/10%),0 3px 0 rgb(var(--tw-prose-kbd-shadows)/10%);color:var(--tw-prose-kbd);font-family:inherit;font-size:.875em;font-weight:500;padding-inline-end:.375em;padding-bottom:.1875em;padding-top:.1875em;padding-inline-start:.375em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-size:.875em;font-weight:600}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:var(--tw-prose-pre-bg);border-radius:.375rem;color:var(--tw-prose-pre-code);font-size:.875em;font-weight:400;line-height:1.7142857;margin-bottom:1.7142857em;margin-top:1.7142857em;overflow-x:auto;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-top:.8571429em;padding-inline-start:1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:transparent;border-radius:0;border-width:0;color:inherit;font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit;padding:0}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em;line-height:1.7142857;margin-bottom:2em;margin-top:2em;table-layout:auto;text-align:start;width:100%}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-color:var(--tw-prose-th-borders);border-bottom-width:1px}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em;vertical-align:bottom}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-color:var(--tw-prose-td-borders);border-bottom-width:1px}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-color:var(--tw-prose-th-borders);border-top-width:1px}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body:#374151;--tw-prose-headings:#111827;--tw-prose-lead:#4b5563;--tw-prose-links:#111827;--tw-prose-bold:#111827;--tw-prose-counters:#6b7280;--tw-prose-bullets:#d1d5db;--tw-prose-hr:#e5e7eb;--tw-prose-quotes:#111827;--tw-prose-quote-borders:#e5e7eb;--tw-prose-captions:#6b7280;--tw-prose-kbd:#111827;--tw-prose-kbd-shadows:17 24 39;--tw-prose-code:#111827;--tw-prose-pre-code:#e5e7eb;--tw-prose-pre-bg:#1f2937;--tw-prose-th-borders:#d1d5db;--tw-prose-td-borders:#e5e7eb;--tw-prose-invert-body:#d1d5db;--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:#9ca3af;--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:#9ca3af;--tw-prose-invert-bullets:#4b5563;--tw-prose-invert-hr:#374151;--tw-prose-invert-quotes:#f3f4f6;--tw-prose-invert-quote-borders:#374151;--tw-prose-invert-captions:#9ca3af;--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:255 255 255;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:#d1d5db;--tw-prose-invert-pre-bg:rgba(0,0,0,.5);--tw-prose-invert-th-borders:#4b5563;--tw-prose-invert-td-borders:#374151;font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.5em;margin-top:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.75em;margin-top:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.75em;margin-top:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-top:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose-sm{font-size:.875rem;line-height:1.7142857}.prose-sm :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em;margin-top:1.1428571em}.prose-sm :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.2857143em;line-height:1.5555556;margin-bottom:.8888889em;margin-top:.8888889em}.prose-sm :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em;padding-inline-start:1.1111111em}.prose-sm :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:2.1428571em;line-height:1.2;margin-bottom:.8em;margin-top:0}.prose-sm :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.4285714em;line-height:1.4;margin-bottom:.8em;margin-top:1.6em}.prose-sm :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.2857143em;line-height:1.5555556;margin-bottom:.4444444em;margin-top:1.5555556em}.prose-sm :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){line-height:1.4285714;margin-bottom:.5714286em;margin-top:1.4285714em}.prose-sm :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7142857em;margin-top:1.7142857em}.prose-sm :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7142857em;margin-top:1.7142857em}.prose-sm :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-sm :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7142857em;margin-top:1.7142857em}.prose-sm :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.3125rem;font-size:.8571429em;padding-inline-end:.3571429em;padding-bottom:.1428571em;padding-top:.1428571em;padding-inline-start:.3571429em}.prose-sm :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em}.prose-sm :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.9em}.prose-sm :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em}.prose-sm :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.25rem;font-size:.8571429em;line-height:1.6666667;margin-bottom:1.6666667em;margin-top:1.6666667em;padding-inline-end:1em;padding-bottom:.6666667em;padding-top:.6666667em;padding-inline-start:1em}.prose-sm :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em;margin-top:1.1428571em;padding-inline-start:1.5714286em}.prose-sm :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em;margin-top:1.1428571em;padding-inline-start:1.5714286em}.prose-sm :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.2857143em;margin-top:.2857143em}.prose-sm :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.4285714em}.prose-sm :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.4285714em}.prose-sm :where(.prose-sm>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.5714286em;margin-top:.5714286em}.prose-sm :where(.prose-sm>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em}.prose-sm :where(.prose-sm>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em}.prose-sm :where(.prose-sm>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em}.prose-sm :where(.prose-sm>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em}.prose-sm :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.5714286em;margin-top:.5714286em}.prose-sm :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em;margin-top:1.1428571em}.prose-sm :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em}.prose-sm :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.2857143em;padding-inline-start:1.5714286em}.prose-sm :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2.8571429em;margin-top:2.8571429em}.prose-sm :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em;line-height:1.5}.prose-sm :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:1em;padding-bottom:.6666667em;padding-inline-start:1em}.prose-sm :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-sm :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-sm :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:1em;padding-bottom:.6666667em;padding-top:.6666667em;padding-inline-start:1em}.prose-sm :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-sm :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-sm :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7142857em;margin-top:1.7142857em}.prose-sm :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-sm :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em;line-height:1.3333333;margin-top:.6666667em}.prose-sm :where(.prose-sm>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(.prose-sm>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose-base{font-size:1rem;line-height:1.75}.prose-base :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em}.prose-base :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.25em;line-height:1.6;margin-bottom:1.2em;margin-top:1.2em}.prose-base :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.6em;margin-top:1.6em;padding-inline-start:1em}.prose-base :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:2.25em;line-height:1.1111111;margin-bottom:.8888889em;margin-top:0}.prose-base :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.5em;line-height:1.3333333;margin-bottom:1em;margin-top:2em}.prose-base :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.25em;line-height:1.6;margin-bottom:.6em;margin-top:1.6em}.prose-base :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){line-height:1.5;margin-bottom:.5em;margin-top:1.5em}.prose-base :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose-base :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose-base :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-base :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose-base :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.3125rem;font-size:.875em;padding-inline-end:.375em;padding-bottom:.1875em;padding-top:.1875em;padding-inline-start:.375em}.prose-base :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em}.prose-base :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em}.prose-base :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.9em}.prose-base :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.375rem;font-size:.875em;line-height:1.7142857;margin-bottom:1.7142857em;margin-top:1.7142857em;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-top:.8571429em;padding-inline-start:1.1428571em}.prose-base :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em;padding-inline-start:1.625em}.prose-base :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em;padding-inline-start:1.625em}.prose-base :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.5em;margin-top:.5em}.prose-base :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose-base :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose-base :where(.prose-base>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.75em;margin-top:.75em}.prose-base :where(.prose-base>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose-base :where(.prose-base>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose-base :where(.prose-base>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose-base :where(.prose-base>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose-base :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.75em;margin-top:.75em}.prose-base :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em}.prose-base :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose-base :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose-base :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:3em;margin-top:3em}.prose-base :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-base :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-base :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-base :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-base :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em;line-height:1.7142857}.prose-base :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose-base :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-base :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-base :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-top:.5714286em;padding-inline-start:.5714286em}.prose-base :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-base :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-base :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose-base :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-base :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose-base :where(.prose-base>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-base :where(.prose-base>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose-lg{font-size:1.125rem;line-height:1.7777778}.prose-lg :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em}.prose-lg :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.2222222em;line-height:1.4545455;margin-bottom:1.0909091em;margin-top:1.0909091em}.prose-lg :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.6666667em;margin-top:1.6666667em;padding-inline-start:1em}.prose-lg :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:2.6666667em;line-height:1;margin-bottom:.8333333em;margin-top:0}.prose-lg :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.6666667em;line-height:1.3333333;margin-bottom:1.0666667em;margin-top:1.8666667em}.prose-lg :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.3333333em;line-height:1.5;margin-bottom:.6666667em;margin-top:1.6666667em}.prose-lg :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){line-height:1.5555556;margin-bottom:.4444444em;margin-top:1.7777778em}.prose-lg :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7777778em;margin-top:1.7777778em}.prose-lg :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7777778em;margin-top:1.7777778em}.prose-lg :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-lg :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7777778em;margin-top:1.7777778em}.prose-lg :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.3125rem;font-size:.8888889em;padding-inline-end:.4444444em;padding-bottom:.2222222em;padding-top:.2222222em;padding-inline-start:.4444444em}.prose-lg :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em}.prose-lg :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8666667em}.prose-lg :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em}.prose-lg :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.375rem;font-size:.8888889em;line-height:1.75;margin-bottom:2em;margin-top:2em;padding-inline-end:1.5em;padding-bottom:1em;padding-top:1em;padding-inline-start:1.5em}.prose-lg :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em;padding-inline-start:1.5555556em}.prose-lg :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em;padding-inline-start:1.5555556em}.prose-lg :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.6666667em;margin-top:.6666667em}.prose-lg :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.4444444em}.prose-lg :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.4444444em}.prose-lg :where(.prose-lg>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.8888889em;margin-top:.8888889em}.prose-lg :where(.prose-lg>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em}.prose-lg :where(.prose-lg>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em}.prose-lg :where(.prose-lg>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em}.prose-lg :where(.prose-lg>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em}.prose-lg :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.8888889em;margin-top:.8888889em}.prose-lg :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em}.prose-lg :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em}.prose-lg :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.6666667em;padding-inline-start:1.5555556em}.prose-lg :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:3.1111111em;margin-top:3.1111111em}.prose-lg :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-lg :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-lg :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-lg :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-lg :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em;line-height:1.5}.prose-lg :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:.75em;padding-bottom:.75em;padding-inline-start:.75em}.prose-lg :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-lg :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-lg :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:.75em;padding-bottom:.75em;padding-top:.75em;padding-inline-start:.75em}.prose-lg :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-lg :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-lg :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7777778em;margin-top:1.7777778em}.prose-lg :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-lg :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em;line-height:1.5;margin-top:1em}.prose-lg :where(.prose-lg>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-lg :where(.prose-lg>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.inset-4{inset:1rem}.inset-x-0{left:0;right:0}.inset-x-4{left:1rem;right:1rem}.inset-y-0{bottom:0;top:0}.-bottom-1\/2{bottom:-50%}.-top-1{top:-.25rem}.-top-1\/2{top:-50%}.-top-2{top:-.5rem}.-top-3{top:-.75rem}.bottom-0{bottom:0}.bottom-1\/2{bottom:50%}.end-0{inset-inline-end:0}.end-4{inset-inline-end:1rem}.end-6{inset-inline-end:1.5rem}.left-3{left:.75rem}.start-0{inset-inline-start:0}.start-full{inset-inline-start:100%}.top-0{top:0}.top-1{top:.25rem}.top-1\/2{top:50%}.top-4{top:1rem}.top-6{top:1.5rem}.isolate{isolation:isolate}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-\[1\]{z-index:1}.order-first{order:-9999}.col-\[--col-span-default\]{grid-column:var(--col-span-default)}.col-span-full{grid-column:1/-1}.col-start-2{grid-column-start:2}.col-start-3{grid-column-start:3}.col-start-\[--col-start-default\]{grid-column-start:var(--col-start-default)}.row-start-2{grid-row-start:2}.-m-0{margin:0}.-m-0\.5{margin:-.125rem}.-m-1{margin:-.25rem}.-m-1\.5{margin:-.375rem}.-m-2{margin:-.5rem}.-m-2\.5{margin:-.625rem}.-m-3{margin:-.75rem}.-m-3\.5{margin:-.875rem}.-mx-2{margin-left:-.5rem;margin-right:-.5rem}.-mx-4{margin-left:-1rem;margin-right:-1rem}.-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.-my-1{margin-bottom:-.25rem;margin-top:-.25rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.mx-auto{margin-left:auto;margin-right:auto}.my-16{margin-bottom:4rem;margin-top:4rem}.my-2{margin-bottom:.5rem;margin-top:.5rem}.my-4{margin-bottom:1rem;margin-top:1rem}.my-auto{margin-bottom:auto;margin-top:auto}.\!mt-0{margin-top:0!important}.-mb-4{margin-bottom:-1rem}.-mb-6{margin-bottom:-1.5rem}.-me-2{margin-inline-end:-.5rem}.-ms-0{margin-inline-start:0}.-ms-0\.5{margin-inline-start:-.125rem}.-ms-1{margin-inline-start:-.25rem}.-ms-2{margin-inline-start:-.5rem}.-mt-3{margin-top:-.75rem}.-mt-4{margin-top:-1rem}.-mt-6{margin-top:-1.5rem}.-mt-7{margin-top:-1.75rem}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.me-1{margin-inline-end:.25rem}.me-4{margin-inline-end:1rem}.me-6{margin-inline-end:1.5rem}.ml-auto{margin-left:auto}.ms-1{margin-inline-start:.25rem}.ms-auto{margin-inline-start:auto}.mt-0{margin-top:0}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-6{margin-top:1.5rem}.mt-auto{margin-top:auto}.line-clamp-\[--line-clamp\]{-webkit-box-orient:vertical;-webkit-line-clamp:var(--line-clamp);display:-webkit-box;overflow:hidden}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.inline-grid{display:inline-grid}.hidden{display:none}.h-0{height:0}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-16{height:4rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-32{height:8rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-96{height:24rem}.h-\[100dvh\],.h-dvh{height:100dvh}.h-full{height:100%}.h-screen{height:100vh}.max-h-96{max-height:24rem}.min-h-\[theme\(spacing\.48\)\]{min-height:12rem}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-1\/2{width:50%}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-16{width:4rem}.w-20{width:5rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-32{width:8rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-\[--sidebar-width\]{width:var(--sidebar-width)}.w-\[calc\(100\%\+2rem\)\]{width:calc(100% + 2rem)}.w-auto{width:auto}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.w-px{width:1px}.w-screen{width:100vw}.min-w-0{min-width:0}.min-w-\[theme\(spacing\.4\)\]{min-width:1rem}.min-w-\[theme\(spacing\.5\)\]{min-width:1.25rem}.min-w-\[theme\(spacing\.6\)\]{min-width:1.5rem}.min-w-\[theme\(spacing\.8\)\]{min-width:2rem}.\!max-w-2xl{max-width:42rem!important}.\!max-w-3xl{max-width:48rem!important}.\!max-w-4xl{max-width:56rem!important}.\!max-w-5xl{max-width:64rem!important}.\!max-w-6xl{max-width:72rem!important}.\!max-w-7xl{max-width:80rem!important}.\!max-w-\[14rem\]{max-width:14rem!important}.\!max-w-lg{max-width:32rem!important}.\!max-w-md{max-width:28rem!important}.\!max-w-sm{max-width:24rem!important}.\!max-w-xl{max-width:36rem!important}.\!max-w-xs{max-width:20rem!important}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-6xl{max-width:72rem}.max-w-7xl{max-width:80rem}.max-w-fit{max-width:-moz-fit-content;max-width:fit-content}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-max{max-width:-moz-max-content;max-width:max-content}.max-w-md{max-width:28rem}.max-w-min{max-width:-moz-min-content;max-width:min-content}.max-w-none{max-width:none}.max-w-prose{max-width:65ch}.max-w-screen-2xl{max-width:1536px}.max-w-screen-lg{max-width:1024px}.max-w-screen-md{max-width:768px}.max-w-screen-sm{max-width:640px}.max-w-screen-xl{max-width:1280px}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.table-auto{table-layout:auto}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.-translate-x-1\/4{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-1\/4{--tw-translate-x:-25%}.-translate-x-12{--tw-translate-x:-3rem}.-translate-x-12,.-translate-x-5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-5{--tw-translate-x:-1.25rem}.-translate-x-full{--tw-translate-x:-100%}.-translate-x-full,.-translate-y-1\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y:-50%}.-translate-y-12{--tw-translate-y:-3rem}.-translate-y-12,.-translate-y-3\/4{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-3\/4{--tw-translate-y:-75%}.translate-x-0{--tw-translate-x:0px}.translate-x-0,.translate-x-12{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-12{--tw-translate-x:3rem}.translate-x-5{--tw-translate-x:1.25rem}.translate-x-5,.translate-x-full{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-full{--tw-translate-x:100%}.translate-y-12{--tw-translate-y:3rem}.-rotate-180,.translate-y-12{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rotate-180{--tw-rotate:-180deg}.rotate-180{--tw-rotate:180deg}.rotate-180,.scale-100{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x:1;--tw-scale-y:1}.scale-95{--tw-scale-x:.95;--tw-scale-y:.95}.scale-95,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-move{cursor:move}.cursor-pointer{cursor:pointer}.cursor-wait{cursor:wait}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.resize-none{resize:none}.resize{resize:both}.scroll-mt-9{scroll-margin-top:2.25rem}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.columns-\[--cols-default\]{-moz-columns:var(--cols-default);columns:var(--cols-default)}.break-inside-avoid{-moz-column-break-inside:avoid;break-inside:avoid}.auto-cols-fr{grid-auto-columns:minmax(0,1fr)}.grid-flow-col{grid-auto-flow:column}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-\[--cols-default\]{grid-template-columns:var(--cols-default)}.grid-cols-\[1fr_auto_1fr\]{grid-template-columns:1fr auto 1fr}.grid-cols-\[repeat\(7\2c minmax\(theme\(spacing\.7\)\2c 1fr\)\)\]{grid-template-columns:repeat(7,minmax(1.75rem,1fr))}.grid-cols-\[repeat\(auto-fit\2c minmax\(0\2c 1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(0,1fr))}.grid-rows-\[1fr_auto_1fr\]{grid-template-rows:1fr auto 1fr}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.content-start{align-content:flex-start}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-items-start{justify-items:start}.justify-items-center{justify-items:center}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-x-1{-moz-column-gap:.25rem;column-gap:.25rem}.gap-x-1\.5{-moz-column-gap:.375rem;column-gap:.375rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.gap-x-2\.5{-moz-column-gap:.625rem;column-gap:.625rem}.gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-x-5{-moz-column-gap:1.25rem;column-gap:1.25rem}.gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.gap-y-1{row-gap:.25rem}.gap-y-1\.5{row-gap:.375rem}.gap-y-2{row-gap:.5rem}.gap-y-3{row-gap:.75rem}.gap-y-4{row-gap:1rem}.gap-y-6{row-gap:1.5rem}.gap-y-7{row-gap:1.75rem}.gap-y-8{row-gap:2rem}.gap-y-px{row-gap:1px}.-space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-.25rem*var(--tw-space-x-reverse))}.-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-.5rem*var(--tw-space-x-reverse))}.-space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-.75rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-.75rem*var(--tw-space-x-reverse))}.-space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-1rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-1rem*var(--tw-space-x-reverse))}.-space-x-5>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-1.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-1.25rem*var(--tw-space-x-reverse))}.-space-x-6>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-1.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-1.5rem*var(--tw-space-x-reverse))}.-space-x-7>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-1.75rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-1.75rem*var(--tw-space-x-reverse))}.-space-x-8>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-2rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-2rem*var(--tw-space-x-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.75rem*var(--tw-space-y-reverse));margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.5rem*var(--tw-space-y-reverse));margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)))}.divide-x>:not([hidden])~:not([hidden]){--tw-divide-x-reverse:0;border-left-width:calc(1px*(1 - var(--tw-divide-x-reverse)));border-right-width:calc(1px*var(--tw-divide-x-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(1px*var(--tw-divide-y-reverse));border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))}.divide-gray-100>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgba(var(--gray-100),var(--tw-divide-opacity))}.divide-gray-200>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgba(var(--gray-200),var(--tw-divide-opacity))}.self-start{align-self:flex-start}.self-stretch{align-self:stretch}.justify-self-start{justify-self:start}.justify-self-end{justify-self:end}.justify-self-center{justify-self:center}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-x-clip{overflow-x:clip}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.rounded-b-xl{border-bottom-left-radius:.75rem;border-bottom-right-radius:.75rem}.rounded-t-xl{border-top-left-radius:.75rem;border-top-right-radius:.75rem}.border{border-width:1px}.border-2{border-width:2px}.border-x-\[0\.5px\]{border-left-width:.5px;border-right-width:.5px}.border-y{border-bottom-width:1px;border-top-width:1px}.\!border-t-0{border-top-width:0!important}.border-b{border-bottom-width:1px}.border-b-0{border-bottom-width:0}.border-e{border-inline-end-width:1px}.border-s{border-inline-start-width:1px}.border-t{border-top-width:1px}.\!border-none{border-style:none!important}.border-none{border-style:none}.border-gray-100{--tw-border-opacity:1;border-color:rgba(var(--gray-100),var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity:1;border-color:rgba(var(--gray-200),var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgba(var(--gray-300),var(--tw-border-opacity))}.border-gray-600{--tw-border-opacity:1;border-color:rgba(var(--gray-600),var(--tw-border-opacity))}.border-primary-500{--tw-border-opacity:1;border-color:rgba(var(--primary-500),var(--tw-border-opacity))}.border-primary-600{--tw-border-opacity:1;border-color:rgba(var(--primary-600),var(--tw-border-opacity))}.border-transparent{border-color:transparent}.border-t-gray-200{--tw-border-opacity:1;border-top-color:rgba(var(--gray-200),var(--tw-border-opacity))}.\!bg-gray-50{--tw-bg-opacity:1!important;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))!important}.\!bg-gray-700{--tw-bg-opacity:1!important;background-color:rgba(var(--gray-700),var(--tw-bg-opacity))!important}.bg-black\/50{background-color:rgba(0,0,0,.5)}.bg-custom-100{--tw-bg-opacity:1;background-color:rgba(var(--c-100),var(--tw-bg-opacity))}.bg-custom-50{--tw-bg-opacity:1;background-color:rgba(var(--c-50),var(--tw-bg-opacity))}.bg-custom-600{--tw-bg-opacity:1;background-color:rgba(var(--c-600),var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgba(var(--gray-100),var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgba(var(--gray-200),var(--tw-bg-opacity))}.bg-gray-300{--tw-bg-opacity:1;background-color:rgba(var(--gray-300),var(--tw-bg-opacity))}.bg-gray-400{--tw-bg-opacity:1;background-color:rgba(var(--gray-400),var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.bg-gray-950\/50{background-color:rgba(var(--gray-950),.5)}.bg-primary-500{--tw-bg-opacity:1;background-color:rgba(var(--primary-500),var(--tw-bg-opacity))}.bg-primary-600{--tw-bg-opacity:1;background-color:rgba(var(--primary-600),var(--tw-bg-opacity))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-white\/0{background-color:hsla(0,0%,100%,0)}.bg-white\/5{background-color:hsla(0,0%,100%,.05)}.\!bg-none{background-image:none!important}.bg-cover{background-size:cover}.bg-center{background-position:50%}.object-cover{-o-object-fit:cover;object-fit:cover}.object-center{-o-object-position:center;object-position:center}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-0{padding-left:0;padding-right:0}.px-0\.5{padding-left:.125rem;padding-right:.125rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0{padding-bottom:0;padding-top:0}.py-0\.5{padding-bottom:.125rem;padding-top:.125rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.py-12{padding-bottom:3rem;padding-top:3rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-2\.5{padding-bottom:.625rem;padding-top:.625rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.py-3\.5{padding-bottom:.875rem;padding-top:.875rem}.py-4{padding-bottom:1rem;padding-top:1rem}.py-5{padding-bottom:1.25rem;padding-top:1.25rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.py-8{padding-bottom:2rem;padding-top:2rem}.pb-4{padding-bottom:1rem}.pb-6{padding-bottom:1.5rem}.pe-0{padding-inline-end:0}.pe-1{padding-inline-end:.25rem}.pe-2{padding-inline-end:.5rem}.pe-3{padding-inline-end:.75rem}.pe-4{padding-inline-end:1rem}.pe-6{padding-inline-end:1.5rem}.pe-8{padding-inline-end:2rem}.ps-0{padding-inline-start:0}.ps-1{padding-inline-start:.25rem}.ps-2{padding-inline-start:.5rem}.ps-3{padding-inline-start:.75rem}.ps-4{padding-inline-start:1rem}.ps-\[5\.25rem\]{padding-inline-start:5.25rem}.pt-0{padding-top:0}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-6{padding-top:1.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-justify{text-align:justify}.text-start{text-align:start}.text-end{text-align:end}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.align-bottom{vertical-align:bottom}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:var(--font-family),ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}.font-serif{font-family:ui-serif,Georgia,Cambria,Times New Roman,Times,serif}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-black{font-weight:900}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-extralight{font-weight:200}.font-light{font-weight:300}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.font-thin{font-weight:100}.capitalize{text-transform:capitalize}.italic{font-style:italic}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.leading-loose{line-height:2}.tracking-tight{letter-spacing:-.025em}.tracking-tighter{letter-spacing:-.05em}.text-custom-400{--tw-text-opacity:1;color:rgba(var(--c-400),var(--tw-text-opacity))}.text-custom-50{--tw-text-opacity:1;color:rgba(var(--c-50),var(--tw-text-opacity))}.text-custom-500{--tw-text-opacity:1;color:rgba(var(--c-500),var(--tw-text-opacity))}.text-custom-600{--tw-text-opacity:1;color:rgba(var(--c-600),var(--tw-text-opacity))}.text-custom-700\/50{color:rgba(var(--c-700),.5)}.text-danger-600{--tw-text-opacity:1;color:rgba(var(--danger-600),var(--tw-text-opacity))}.text-gray-100{--tw-text-opacity:1;color:rgba(var(--gray-100),var(--tw-text-opacity))}.text-gray-200{--tw-text-opacity:1;color:rgba(var(--gray-200),var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgba(var(--gray-600),var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgba(var(--gray-700),var(--tw-text-opacity))}.text-gray-700\/50{color:rgba(var(--gray-700),.5)}.text-gray-950{--tw-text-opacity:1;color:rgba(var(--gray-950),var(--tw-text-opacity))}.text-primary-400{--tw-text-opacity:1;color:rgba(var(--primary-400),var(--tw-text-opacity))}.text-primary-500{--tw-text-opacity:1;color:rgba(var(--primary-500),var(--tw-text-opacity))}.text-primary-600{--tw-text-opacity:1;color:rgba(var(--primary-600),var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.underline{text-decoration-line:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-sm,.shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}.outline-none{outline:2px solid transparent;outline-offset:2px}.ring{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring,.ring-0{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-1,.ring-2{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-4{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-inset{--tw-ring-inset:inset}.ring-custom-600{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--c-600),var(--tw-ring-opacity))}.ring-custom-600\/10{--tw-ring-color:rgba(var(--c-600),0.1)}.ring-custom-600\/20{--tw-ring-color:rgba(var(--c-600),0.2)}.ring-danger-600{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-600),var(--tw-ring-opacity))}.ring-gray-200{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--gray-200),var(--tw-ring-opacity))}.ring-gray-300{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--gray-300),var(--tw-ring-opacity))}.ring-gray-600\/10{--tw-ring-color:rgba(var(--gray-600),0.1)}.ring-gray-900\/10{--tw-ring-color:rgba(var(--gray-900),0.1)}.ring-gray-950\/10{--tw-ring-color:rgba(var(--gray-950),0.1)}.ring-gray-950\/5{--tw-ring-color:rgba(var(--gray-950),0.05)}.ring-white{--tw-ring-opacity:1;--tw-ring-color:rgb(255 255 255/var(--tw-ring-opacity))}.ring-white\/10{--tw-ring-color:hsla(0,0%,100%,.1)}.blur{--tw-blur:blur(8px)}.blur,.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.delay-100{transition-delay:.1s}.duration-100{transition-duration:.1s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.duration-75{transition-duration:75ms}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.\[transform\:translateZ\(0\)\]{transform:translateZ(0)}.dark\:prose-invert:is(.dark *){--tw-prose-body:var(--tw-prose-invert-body);--tw-prose-headings:var(--tw-prose-invert-headings);--tw-prose-lead:var(--tw-prose-invert-lead);--tw-prose-links:var(--tw-prose-invert-links);--tw-prose-bold:var(--tw-prose-invert-bold);--tw-prose-counters:var(--tw-prose-invert-counters);--tw-prose-bullets:var(--tw-prose-invert-bullets);--tw-prose-hr:var(--tw-prose-invert-hr);--tw-prose-quotes:var(--tw-prose-invert-quotes);--tw-prose-quote-borders:var(--tw-prose-invert-quote-borders);--tw-prose-captions:var(--tw-prose-invert-captions);--tw-prose-kbd:var(--tw-prose-invert-kbd);--tw-prose-kbd-shadows:var(--tw-prose-invert-kbd-shadows);--tw-prose-code:var(--tw-prose-invert-code);--tw-prose-pre-code:var(--tw-prose-invert-pre-code);--tw-prose-pre-bg:var(--tw-prose-invert-pre-bg);--tw-prose-th-borders:var(--tw-prose-invert-th-borders);--tw-prose-td-borders:var(--tw-prose-invert-td-borders)}.placeholder\:text-gray-400::-moz-placeholder{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.placeholder\:text-gray-400::placeholder{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:inset-y-0:before{bottom:0;content:var(--tw-content);top:0}.before\:start-0:before{content:var(--tw-content);inset-inline-start:0}.before\:h-full:before{content:var(--tw-content);height:100%}.before\:w-0:before{content:var(--tw-content);width:0}.before\:w-0\.5:before{content:var(--tw-content);width:.125rem}.before\:bg-primary-600:before{--tw-bg-opacity:1;background-color:rgba(var(--primary-600),var(--tw-bg-opacity));content:var(--tw-content)}.first\:border-s-0:first-child{border-inline-start-width:0}.first\:border-t-0:first-child{border-top-width:0}.last\:border-e-0:last-child{border-inline-end-width:0}.first-of-type\:ps-1:first-of-type{padding-inline-start:.25rem}.last-of-type\:pe-1:last-of-type{padding-inline-end:.25rem}.checked\:ring-0:checked{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-within\:bg-gray-50:focus-within{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.hover\:bg-custom-400\/10:hover{background-color:rgba(var(--c-400),.1)}.hover\:bg-custom-50:hover{--tw-bg-opacity:1;background-color:rgba(var(--c-50),var(--tw-bg-opacity))}.hover\:bg-custom-500:hover{--tw-bg-opacity:1;background-color:rgba(var(--c-500),var(--tw-bg-opacity))}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgba(var(--gray-100),var(--tw-bg-opacity))}.hover\:bg-gray-400\/10:hover{background-color:rgba(var(--gray-400),.1)}.hover\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.hover\:text-custom-600:hover{--tw-text-opacity:1;color:rgba(var(--c-600),var(--tw-text-opacity))}.hover\:text-custom-700\/75:hover{color:rgba(var(--c-700),.75)}.hover\:text-gray-500:hover{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.hover\:text-gray-700:hover{--tw-text-opacity:1;color:rgba(var(--gray-700),var(--tw-text-opacity))}.hover\:text-gray-700\/75:hover{color:rgba(var(--gray-700),.75)}.hover\:opacity-100:hover{opacity:1}.focus\:ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-0:focus,.focus\:ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-danger-600:focus{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-600),var(--tw-ring-opacity))}.focus\:ring-primary-600:focus{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-600),var(--tw-ring-opacity))}.focus\:ring-offset-0:focus{--tw-ring-offset-width:0px}.checked\:focus\:ring-danger-500\/50:focus:checked{--tw-ring-color:rgba(var(--danger-500),0.5)}.checked\:focus\:ring-primary-500\/50:focus:checked{--tw-ring-color:rgba(var(--primary-500),0.5)}.focus-visible\:z-10:focus-visible{z-index:10}.focus-visible\:border-primary-500:focus-visible{--tw-border-opacity:1;border-color:rgba(var(--primary-500),var(--tw-border-opacity))}.focus-visible\:bg-custom-50:focus-visible{--tw-bg-opacity:1;background-color:rgba(var(--c-50),var(--tw-bg-opacity))}.focus-visible\:bg-gray-100:focus-visible{--tw-bg-opacity:1;background-color:rgba(var(--gray-100),var(--tw-bg-opacity))}.focus-visible\:bg-gray-50:focus-visible{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.focus-visible\:text-custom-700\/75:focus-visible{color:rgba(var(--c-700),.75)}.focus-visible\:text-gray-500:focus-visible{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.focus-visible\:text-gray-700\/75:focus-visible{color:rgba(var(--gray-700),.75)}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-1:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\:ring-inset:focus-visible{--tw-ring-inset:inset}.focus-visible\:ring-custom-500\/50:focus-visible{--tw-ring-color:rgba(var(--c-500),0.5)}.focus-visible\:ring-custom-600:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--c-600),var(--tw-ring-opacity))}.focus-visible\:ring-gray-400\/40:focus-visible{--tw-ring-color:rgba(var(--gray-400),0.4)}.focus-visible\:ring-primary-500:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-500),var(--tw-ring-opacity))}.focus-visible\:ring-primary-600:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-600),var(--tw-ring-opacity))}.enabled\:cursor-wait:enabled{cursor:wait}.enabled\:opacity-70:enabled{opacity:.7}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:bg-gray-50:disabled{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.disabled\:text-gray-50:disabled{--tw-text-opacity:1;color:rgba(var(--gray-50),var(--tw-text-opacity))}.disabled\:text-gray-500:disabled{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.disabled\:opacity-70:disabled{opacity:.7}.disabled\:\[-webkit-text-fill-color\:theme\(colors\.gray\.500\)\]:disabled{-webkit-text-fill-color:rgba(var(--gray-500),1)}.disabled\:placeholder\:\[-webkit-text-fill-color\:theme\(colors\.gray\.400\)\]:disabled::-moz-placeholder{-webkit-text-fill-color:rgba(var(--gray-400),1)}.disabled\:placeholder\:\[-webkit-text-fill-color\:theme\(colors\.gray\.400\)\]:disabled::placeholder{-webkit-text-fill-color:rgba(var(--gray-400),1)}.disabled\:checked\:bg-current:checked:disabled{background-color:currentColor}.disabled\:checked\:text-gray-400:checked:disabled{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.group\/item:first-child .group-first\/item\:rounded-s-lg{border-end-start-radius:.5rem;border-start-start-radius:.5rem}.group\/item:last-child .group-last\/item\:rounded-e-lg{border-end-end-radius:.5rem;border-start-end-radius:.5rem}.group:hover .group-hover\:text-gray-500,.group\/button:hover .group-hover\/button\:text-gray-500{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.group:hover .group-hover\:text-gray-700{--tw-text-opacity:1;color:rgba(var(--gray-700),var(--tw-text-opacity))}.group\/item:hover .group-hover\/item\:underline,.group\/link:hover .group-hover\/link\:underline{text-decoration-line:underline}.group:focus-visible .group-focus-visible\:text-gray-500{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.group:focus-visible .group-focus-visible\:text-gray-700{--tw-text-opacity:1;color:rgba(var(--gray-700),var(--tw-text-opacity))}.group\/item:focus-visible .group-focus-visible\/item\:underline{text-decoration-line:underline}.group\/link:focus-visible .group-focus-visible\/link\:underline{text-decoration-line:underline}.dark\:flex:is(.dark *){display:flex}.dark\:hidden:is(.dark *){display:none}.dark\:divide-white\/10:is(.dark *)>:not([hidden])~:not([hidden]){border-color:hsla(0,0%,100%,.1)}.dark\:divide-white\/5:is(.dark *)>:not([hidden])~:not([hidden]){border-color:hsla(0,0%,100%,.05)}.dark\:border-gray-600:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--gray-600),var(--tw-border-opacity))}.dark\:border-gray-700:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--gray-700),var(--tw-border-opacity))}.dark\:border-primary-500:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--primary-500),var(--tw-border-opacity))}.dark\:border-white\/10:is(.dark *){border-color:hsla(0,0%,100%,.1)}.dark\:border-white\/5:is(.dark *){border-color:hsla(0,0%,100%,.05)}.dark\:border-t-white\/10:is(.dark *){border-top-color:hsla(0,0%,100%,.1)}.dark\:\!bg-gray-700:is(.dark *){--tw-bg-opacity:1!important;background-color:rgba(var(--gray-700),var(--tw-bg-opacity))!important}.dark\:bg-custom-400\/10:is(.dark *){background-color:rgba(var(--c-400),.1)}.dark\:bg-custom-500:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--c-500),var(--tw-bg-opacity))}.dark\:bg-custom-500\/20:is(.dark *){background-color:rgba(var(--c-500),.2)}.dark\:bg-gray-400\/10:is(.dark *){background-color:rgba(var(--gray-400),.1)}.dark\:bg-gray-500:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-500),var(--tw-bg-opacity))}.dark\:bg-gray-500\/20:is(.dark *){background-color:rgba(var(--gray-500),.2)}.dark\:bg-gray-600:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-600),var(--tw-bg-opacity))}.dark\:bg-gray-700:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-700),var(--tw-bg-opacity))}.dark\:bg-gray-800:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-800),var(--tw-bg-opacity))}.dark\:bg-gray-900:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-900),var(--tw-bg-opacity))}.dark\:bg-gray-900\/30:is(.dark *){background-color:rgba(var(--gray-900),.3)}.dark\:bg-gray-950:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-950),var(--tw-bg-opacity))}.dark\:bg-gray-950\/75:is(.dark *){background-color:rgba(var(--gray-950),.75)}.dark\:bg-primary-400:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--primary-400),var(--tw-bg-opacity))}.dark\:bg-primary-500:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--primary-500),var(--tw-bg-opacity))}.dark\:bg-transparent:is(.dark *){background-color:transparent}.dark\:bg-white\/10:is(.dark *){background-color:hsla(0,0%,100%,.1)}.dark\:bg-white\/5:is(.dark *){background-color:hsla(0,0%,100%,.05)}.dark\:fill-current:is(.dark *){fill:currentColor}.dark\:text-custom-300\/50:is(.dark *){color:rgba(var(--c-300),.5)}.dark\:text-custom-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--c-400),var(--tw-text-opacity))}.dark\:text-custom-400\/10:is(.dark *){color:rgba(var(--c-400),.1)}.dark\:text-danger-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--danger-400),var(--tw-text-opacity))}.dark\:text-danger-500:is(.dark *){--tw-text-opacity:1;color:rgba(var(--danger-500),var(--tw-text-opacity))}.dark\:text-gray-200:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-200),var(--tw-text-opacity))}.dark\:text-gray-300\/50:is(.dark *){color:rgba(var(--gray-300),.5)}.dark\:text-gray-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.dark\:text-gray-500:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.dark\:text-gray-700:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-700),var(--tw-text-opacity))}.dark\:text-gray-800:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-800),var(--tw-text-opacity))}.dark\:text-primary-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--primary-400),var(--tw-text-opacity))}.dark\:text-primary-500:is(.dark *){--tw-text-opacity:1;color:rgba(var(--primary-500),var(--tw-text-opacity))}.dark\:text-white:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.dark\:text-white\/5:is(.dark *){color:hsla(0,0%,100%,.05)}.dark\:ring-custom-400\/30:is(.dark *){--tw-ring-color:rgba(var(--c-400),0.3)}.dark\:ring-custom-500:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--c-500),var(--tw-ring-opacity))}.dark\:ring-danger-500:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-500),var(--tw-ring-opacity))}.dark\:ring-gray-400\/20:is(.dark *){--tw-ring-color:rgba(var(--gray-400),0.2)}.dark\:ring-gray-50\/10:is(.dark *){--tw-ring-color:rgba(var(--gray-50),0.1)}.dark\:ring-gray-700:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--gray-700),var(--tw-ring-opacity))}.dark\:ring-gray-900:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--gray-900),var(--tw-ring-opacity))}.dark\:ring-white\/10:is(.dark *){--tw-ring-color:hsla(0,0%,100%,.1)}.dark\:ring-white\/20:is(.dark *){--tw-ring-color:hsla(0,0%,100%,.2)}.dark\:placeholder\:text-gray-500:is(.dark *)::-moz-placeholder{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.dark\:placeholder\:text-gray-500:is(.dark *)::placeholder{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.dark\:before\:bg-primary-500:is(.dark *):before{--tw-bg-opacity:1;background-color:rgba(var(--primary-500),var(--tw-bg-opacity));content:var(--tw-content)}.dark\:checked\:bg-danger-500:checked:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--danger-500),var(--tw-bg-opacity))}.dark\:checked\:bg-primary-500:checked:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--primary-500),var(--tw-bg-opacity))}.dark\:focus-within\:bg-white\/5:focus-within:is(.dark *){background-color:hsla(0,0%,100%,.05)}.dark\:hover\:bg-custom-400:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--c-400),var(--tw-bg-opacity))}.dark\:hover\:bg-custom-400\/10:hover:is(.dark *){background-color:rgba(var(--c-400),.1)}.dark\:hover\:bg-white\/10:hover:is(.dark *){background-color:hsla(0,0%,100%,.1)}.dark\:hover\:bg-white\/5:hover:is(.dark *){background-color:hsla(0,0%,100%,.05)}.dark\:hover\:text-custom-300:hover:is(.dark *){--tw-text-opacity:1;color:rgba(var(--c-300),var(--tw-text-opacity))}.dark\:hover\:text-custom-300\/75:hover:is(.dark *){color:rgba(var(--c-300),.75)}.dark\:hover\:text-gray-200:hover:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-200),var(--tw-text-opacity))}.dark\:hover\:text-gray-300\/75:hover:is(.dark *){color:rgba(var(--gray-300),.75)}.dark\:hover\:text-gray-400:hover:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.dark\:hover\:ring-white\/20:hover:is(.dark *){--tw-ring-color:hsla(0,0%,100%,.2)}.dark\:focus\:ring-danger-500:focus:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-500),var(--tw-ring-opacity))}.dark\:focus\:ring-primary-500:focus:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-500),var(--tw-ring-opacity))}.dark\:checked\:focus\:ring-danger-400\/50:focus:checked:is(.dark *){--tw-ring-color:rgba(var(--danger-400),0.5)}.dark\:checked\:focus\:ring-primary-400\/50:focus:checked:is(.dark *){--tw-ring-color:rgba(var(--primary-400),0.5)}.dark\:focus-visible\:border-primary-500:focus-visible:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--primary-500),var(--tw-border-opacity))}.dark\:focus-visible\:bg-custom-400\/10:focus-visible:is(.dark *){background-color:rgba(var(--c-400),.1)}.dark\:focus-visible\:bg-white\/5:focus-visible:is(.dark *){background-color:hsla(0,0%,100%,.05)}.dark\:focus-visible\:text-custom-300\/75:focus-visible:is(.dark *){color:rgba(var(--c-300),.75)}.dark\:focus-visible\:text-gray-300\/75:focus-visible:is(.dark *){color:rgba(var(--gray-300),.75)}.dark\:focus-visible\:text-gray-400:focus-visible:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.dark\:focus-visible\:ring-custom-400\/50:focus-visible:is(.dark *){--tw-ring-color:rgba(var(--c-400),0.5)}.dark\:focus-visible\:ring-custom-500:focus-visible:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--c-500),var(--tw-ring-opacity))}.dark\:focus-visible\:ring-primary-500:focus-visible:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-500),var(--tw-ring-opacity))}.dark\:disabled\:bg-transparent:disabled:is(.dark *){background-color:transparent}.dark\:disabled\:text-gray-400:disabled:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.dark\:disabled\:ring-white\/10:disabled:is(.dark *){--tw-ring-color:hsla(0,0%,100%,.1)}.dark\:disabled\:\[-webkit-text-fill-color\:theme\(colors\.gray\.400\)\]:disabled:is(.dark *){-webkit-text-fill-color:rgba(var(--gray-400),1)}.dark\:disabled\:placeholder\:\[-webkit-text-fill-color\:theme\(colors\.gray\.500\)\]:disabled:is(.dark *)::-moz-placeholder{-webkit-text-fill-color:rgba(var(--gray-500),1)}.dark\:disabled\:placeholder\:\[-webkit-text-fill-color\:theme\(colors\.gray\.500\)\]:disabled:is(.dark *)::placeholder{-webkit-text-fill-color:rgba(var(--gray-500),1)}.dark\:disabled\:checked\:bg-gray-600:checked:disabled:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-600),var(--tw-bg-opacity))}.group\/button:hover .dark\:group-hover\/button\:text-gray-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.group:hover .dark\:group-hover\:text-gray-200:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-200),var(--tw-text-opacity))}.group:hover .dark\:group-hover\:text-gray-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.group:focus-visible .dark\:group-focus-visible\:text-gray-200:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-200),var(--tw-text-opacity))}.group:focus-visible .dark\:group-focus-visible\:text-gray-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}@media (min-width:640px){.sm\:relative{position:relative}.sm\:inset-x-auto{left:auto;right:auto}.sm\:end-0{inset-inline-end:0}.sm\:col-\[--col-span-sm\]{grid-column:var(--col-span-sm)}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:col-start-\[--col-start-sm\]{grid-column-start:var(--col-start-sm)}.sm\:-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.sm\:-my-2{margin-bottom:-.5rem;margin-top:-.5rem}.sm\:ms-auto{margin-inline-start:auto}.sm\:mt-7{margin-top:1.75rem}.sm\:block{display:block}.sm\:flex{display:flex}.sm\:table-cell{display:table-cell}.sm\:grid{display:grid}.sm\:inline-grid{display:inline-grid}.sm\:hidden{display:none}.sm\:w-\[calc\(100\%\+3rem\)\]{width:calc(100% + 3rem)}.sm\:w-screen{width:100vw}.sm\:max-w-2xl{max-width:42rem}.sm\:max-w-3xl{max-width:48rem}.sm\:max-w-4xl{max-width:56rem}.sm\:max-w-5xl{max-width:64rem}.sm\:max-w-6xl{max-width:72rem}.sm\:max-w-7xl{max-width:80rem}.sm\:max-w-lg{max-width:32rem}.sm\:max-w-md{max-width:28rem}.sm\:max-w-sm{max-width:24rem}.sm\:max-w-xl{max-width:36rem}.sm\:max-w-xs{max-width:20rem}.sm\:columns-\[--cols-sm\]{-moz-columns:var(--cols-sm);columns:var(--cols-sm)}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-\[--cols-sm\]{grid-template-columns:var(--cols-sm)}.sm\:grid-cols-\[repeat\(auto-fit\2c minmax\(0\2c 1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(0,1fr))}.sm\:grid-rows-\[1fr_auto_3fr\]{grid-template-rows:1fr auto 3fr}.sm\:flex-row{flex-direction:row}.sm\:flex-nowrap{flex-wrap:nowrap}.sm\:items-start{align-items:flex-start}.sm\:items-end{align-items:flex-end}.sm\:items-center{align-items:center}.sm\:justify-between{justify-content:space-between}.sm\:gap-1{gap:.25rem}.sm\:gap-3{gap:.75rem}.sm\:gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.sm\:rounded-xl{border-radius:.75rem}.sm\:p-10{padding:2.5rem}.sm\:px-12{padding-left:3rem;padding-right:3rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-1{padding-bottom:.25rem;padding-top:.25rem}.sm\:py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.sm\:pe-3{padding-inline-end:.75rem}.sm\:pe-6{padding-inline-end:1.5rem}.sm\:ps-3{padding-inline-start:.75rem}.sm\:ps-6{padding-inline-start:1.5rem}.sm\:pt-1{padding-top:.25rem}.sm\:pt-1\.5{padding-top:.375rem}.sm\:text-3xl{font-size:1.875rem;line-height:2.25rem}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}.sm\:leading-6{line-height:1.5rem}.sm\:first-of-type\:ps-3:first-of-type{padding-inline-start:.75rem}.sm\:first-of-type\:ps-6:first-of-type{padding-inline-start:1.5rem}.sm\:last-of-type\:pe-3:last-of-type{padding-inline-end:.75rem}.sm\:last-of-type\:pe-6:last-of-type{padding-inline-end:1.5rem}}@media (min-width:768px){.md\:bottom-4{bottom:1rem}.md\:order-first{order:-9999}.md\:col-\[--col-span-md\]{grid-column:var(--col-span-md)}.md\:col-span-2{grid-column:span 2/span 2}.md\:col-start-\[--col-start-md\]{grid-column-start:var(--col-start-md)}.md\:block{display:block}.md\:flex{display:flex}.md\:table-cell{display:table-cell}.md\:inline-grid{display:inline-grid}.md\:hidden{display:none}.md\:w-max{width:-moz-max-content;width:max-content}.md\:max-w-60{max-width:15rem}.md\:columns-\[--cols-md\]{-moz-columns:var(--cols-md);columns:var(--cols-md)}.md\:grid-flow-col{grid-auto-flow:column}.md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-\[--cols-md\]{grid-template-columns:var(--cols-md)}.md\:flex-row{flex-direction:row}.md\:items-start{align-items:flex-start}.md\:items-end{align-items:flex-end}.md\:items-center{align-items:center}.md\:justify-end{justify-content:flex-end}.md\:gap-1{gap:.25rem}.md\:gap-3{gap:.75rem}.md\:divide-y-0>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(0px*var(--tw-divide-y-reverse));border-top-width:calc(0px*(1 - var(--tw-divide-y-reverse)))}.md\:overflow-x-auto{overflow-x:auto}.md\:rounded-xl{border-radius:.75rem}.md\:p-20{padding:5rem}.md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\:pe-6{padding-inline-end:1.5rem}.md\:ps-3{padding-inline-start:.75rem}}@media (min-width:1024px){.lg\:sticky{position:sticky}.lg\:z-0{z-index:0}.lg\:col-\[--col-span-lg\]{grid-column:var(--col-span-lg)}.lg\:col-start-\[--col-start-lg\]{grid-column-start:var(--col-start-lg)}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:table-cell{display:table-cell}.lg\:inline-grid{display:inline-grid}.lg\:hidden{display:none}.lg\:h-full{height:100%}.lg\:max-w-xs{max-width:20rem}.lg\:-translate-x-full{--tw-translate-x:-100%}.lg\:-translate-x-full,.lg\:translate-x-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lg\:translate-x-0{--tw-translate-x:0px}.lg\:columns-\[--cols-lg\]{-moz-columns:var(--cols-lg);columns:var(--cols-lg)}.lg\:grid-cols-\[--cols-lg\]{grid-template-columns:var(--cols-lg)}.lg\:flex-row{flex-direction:row}.lg\:items-start{align-items:flex-start}.lg\:items-end{align-items:flex-end}.lg\:items-center{align-items:center}.lg\:gap-1{gap:.25rem}.lg\:gap-3{gap:.75rem}.lg\:bg-transparent{background-color:transparent}.lg\:px-8{padding-left:2rem;padding-right:2rem}.lg\:pe-8{padding-inline-end:2rem}.lg\:shadow-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}.lg\:shadow-none,.lg\:shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.lg\:shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.lg\:ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.lg\:transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.lg\:transition-none{transition-property:none}.lg\:delay-100{transition-delay:.1s}.dark\:lg\:bg-transparent:is(.dark *){background-color:transparent}}@media (min-width:1280px){.xl\:col-\[--col-span-xl\]{grid-column:var(--col-span-xl)}.xl\:col-start-\[--col-start-xl\]{grid-column-start:var(--col-start-xl)}.xl\:block{display:block}.xl\:table-cell{display:table-cell}.xl\:inline-grid{display:inline-grid}.xl\:hidden{display:none}.xl\:columns-\[--cols-xl\]{-moz-columns:var(--cols-xl);columns:var(--cols-xl)}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-\[--cols-xl\]{grid-template-columns:var(--cols-xl)}.xl\:flex-row{flex-direction:row}.xl\:items-start{align-items:flex-start}.xl\:items-end{align-items:flex-end}.xl\:items-center{align-items:center}.xl\:gap-1{gap:.25rem}.xl\:gap-3{gap:.75rem}}@media (min-width:1536px){.\32xl\:col-\[--col-span-2xl\]{grid-column:var(--col-span-2xl)}.\32xl\:col-start-\[--col-start-2xl\]{grid-column-start:var(--col-start-2xl)}.\32xl\:block{display:block}.\32xl\:table-cell{display:table-cell}.\32xl\:inline-grid{display:inline-grid}.\32xl\:hidden{display:none}.\32xl\:columns-\[--cols-2xl\]{-moz-columns:var(--cols-2xl);columns:var(--cols-2xl)}.\32xl\:grid-cols-\[--cols-2xl\]{grid-template-columns:var(--cols-2xl)}.\32xl\:flex-row{flex-direction:row}.\32xl\:items-start{align-items:flex-start}.\32xl\:items-end{align-items:flex-end}.\32xl\:items-center{align-items:center}.\32xl\:gap-1{gap:.25rem}.\32xl\:gap-3{gap:.75rem}}.ltr\:hidden:where([dir=ltr],[dir=ltr] *){display:none}.rtl\:hidden:where([dir=rtl],[dir=rtl] *){display:none}.rtl\:-translate-x-0:where([dir=rtl],[dir=rtl] *){--tw-translate-x:-0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:-translate-x-5:where([dir=rtl],[dir=rtl] *){--tw-translate-x:-1.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:-translate-x-full:where([dir=rtl],[dir=rtl] *){--tw-translate-x:-100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:translate-x-1\/2:where([dir=rtl],[dir=rtl] *){--tw-translate-x:50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:translate-x-1\/4:where([dir=rtl],[dir=rtl] *){--tw-translate-x:25%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:translate-x-full:where([dir=rtl],[dir=rtl] *){--tw-translate-x:100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:rotate-180:where([dir=rtl],[dir=rtl] *){--tw-rotate:180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:flex-row-reverse:where([dir=rtl],[dir=rtl] *){flex-direction:row-reverse}.rtl\:divide-x-reverse:where([dir=rtl],[dir=rtl] *)>:not([hidden])~:not([hidden]){--tw-divide-x-reverse:1}@media (min-width:1024px){.rtl\:lg\:-translate-x-0:where([dir=rtl],[dir=rtl] *){--tw-translate-x:-0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:lg\:translate-x-full:where([dir=rtl],[dir=rtl] *){--tw-translate-x:100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}}.\[\&\.trix-active\]\:bg-gray-50.trix-active{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.\[\&\.trix-active\]\:text-primary-600.trix-active{--tw-text-opacity:1;color:rgba(var(--primary-600),var(--tw-text-opacity))}.dark\:\[\&\.trix-active\]\:bg-white\/5.trix-active:is(.dark *){background-color:hsla(0,0%,100%,.05)}.dark\:\[\&\.trix-active\]\:text-primary-400.trix-active:is(.dark *){--tw-text-opacity:1;color:rgba(var(--primary-400),var(--tw-text-opacity))}.\[\&\:\:-ms-reveal\]\:hidden::-ms-reveal{display:none}.\[\&\:not\(\:first-of-type\)\]\:border-s:not(:first-of-type){border-inline-start-width:1px}.\[\&\:not\(\:has\(\.fi-ac-action\:focus\)\)\]\:focus-within\:ring-2:focus-within:not(:has(.fi-ac-action:focus)){--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.\[\&\:not\(\:has\(\.fi-ac-action\:focus\)\)\]\:focus-within\:ring-danger-600:focus-within:not(:has(.fi-ac-action:focus)){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-600),var(--tw-ring-opacity))}.\[\&\:not\(\:has\(\.fi-ac-action\:focus\)\)\]\:focus-within\:ring-primary-600:focus-within:not(:has(.fi-ac-action:focus)){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-600),var(--tw-ring-opacity))}.dark\:\[\&\:not\(\:has\(\.fi-ac-action\:focus\)\)\]\:focus-within\:ring-danger-500:focus-within:not(:has(.fi-ac-action:focus)):is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-500),var(--tw-ring-opacity))}.dark\:\[\&\:not\(\:has\(\.fi-ac-action\:focus\)\)\]\:focus-within\:ring-primary-500:focus-within:not(:has(.fi-ac-action:focus)):is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-500),var(--tw-ring-opacity))}.\[\&\:not\(\:last-of-type\)\]\:border-e:not(:last-of-type){border-inline-end-width:1px}.\[\&\:not\(\:nth-child\(1_of_\.fi-btn\)\)\]\:shadow-\[-1px_0_0_0_theme\(colors\.gray\.200\)\]:not(:nth-child(1 of .fi-btn)){--tw-shadow:-1px 0 0 0 rgba(var(--gray-200),1);--tw-shadow-colored:-1px 0 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.dark\:\[\&\:not\(\:nth-child\(1_of_\.fi-btn\)\)\]\:shadow-\[-1px_0_0_0_theme\(colors\.white\/20\%\)\]:not(:nth-child(1 of .fi-btn)):is(.dark *){--tw-shadow:-1px 0 0 0 hsla(0,0%,100%,.2);--tw-shadow-colored:-1px 0 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.\[\&\:not\(\:nth-last-child\(1_of_\.fi-btn\)\)\]\:me-px:not(:nth-last-child(1 of .fi-btn)){margin-inline-end:1px}.\[\&\:nth-child\(1_of_\.fi-btn\)\]\:rounded-s-lg:nth-child(1 of .fi-btn){border-end-start-radius:.5rem;border-start-start-radius:.5rem}.\[\&\:nth-last-child\(1_of_\.fi-btn\)\]\:rounded-e-lg:nth-last-child(1 of .fi-btn){border-end-end-radius:.5rem;border-start-end-radius:.5rem}.\[\&\>\*\:first-child\]\:relative>:first-child{position:relative}.\[\&\>\*\:first-child\]\:mt-0>:first-child{margin-top:0}.\[\&\>\*\:first-child\]\:before\:absolute>:first-child:before{content:var(--tw-content);position:absolute}.\[\&\>\*\:first-child\]\:before\:inset-y-0>:first-child:before{bottom:0;content:var(--tw-content);top:0}.\[\&\>\*\:first-child\]\:before\:start-0>:first-child:before{content:var(--tw-content);inset-inline-start:0}.\[\&\>\*\:first-child\]\:before\:w-0\.5>:first-child:before{content:var(--tw-content);width:.125rem}.\[\&\>\*\:first-child\]\:before\:bg-primary-600>:first-child:before{--tw-bg-opacity:1;background-color:rgba(var(--primary-600),var(--tw-bg-opacity));content:var(--tw-content)}.\[\&\>\*\:first-child\]\:dark\:before\:bg-primary-500:is(.dark *)>:first-child:before{--tw-bg-opacity:1;background-color:rgba(var(--primary-500),var(--tw-bg-opacity));content:var(--tw-content)}.\[\&\>\*\:last-child\]\:mb-0>:last-child{margin-bottom:0}.\[\&_\.choices\\_\\_inner\]\:ps-0 .choices__inner{padding-inline-start:0}.\[\&_\.fi-badge-delete-button\]\:hidden .fi-badge-delete-button{display:none}.\[\&_\.filepond--root\]\:font-sans .filepond--root{font-family:var(--font-family),ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}.\[\&_optgroup\]\:bg-white optgroup{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.\[\&_optgroup\]\:dark\:bg-gray-900:is(.dark *) optgroup{--tw-bg-opacity:1;background-color:rgba(var(--gray-900),var(--tw-bg-opacity))}.\[\&_option\]\:bg-white option{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.\[\&_option\]\:dark\:bg-gray-900:is(.dark *) option{--tw-bg-opacity:1;background-color:rgba(var(--gray-900),var(--tw-bg-opacity))}:checked+*>.\[\:checked\+\*\>\&\]\:text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}@media(hover:hover){.\[\@media\(hover\:hover\)\]\:transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.\[\@media\(hover\:hover\)\]\:duration-75{transition-duration:75ms}}input:checked+.\[input\:checked\+\&\]\:bg-custom-600{--tw-bg-opacity:1;background-color:rgba(var(--c-600),var(--tw-bg-opacity))}input:checked+.\[input\:checked\+\&\]\:bg-gray-400{--tw-bg-opacity:1;background-color:rgba(var(--gray-400),var(--tw-bg-opacity))}input:checked+.\[input\:checked\+\&\]\:text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}input:checked+.\[input\:checked\+\&\]\:ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}input:checked+.\[input\:checked\+\&\]\:hover\:bg-custom-500:hover{--tw-bg-opacity:1;background-color:rgba(var(--c-500),var(--tw-bg-opacity))}input:checked+.\[input\:checked\+\&\]\:hover\:bg-gray-300:hover{--tw-bg-opacity:1;background-color:rgba(var(--gray-300),var(--tw-bg-opacity))}input:checked+.dark\:\[input\:checked\+\&\]\:bg-custom-500:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--c-500),var(--tw-bg-opacity))}input:checked+.dark\:\[input\:checked\+\&\]\:bg-gray-600:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-600),var(--tw-bg-opacity))}input:checked+.dark\:\[input\:checked\+\&\]\:hover\:bg-custom-400:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--c-400),var(--tw-bg-opacity))}input:checked+.dark\:\[input\:checked\+\&\]\:hover\:bg-gray-500:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-500),var(--tw-bg-opacity))}input:checked:focus-visible+.\[input\:checked\:focus-visible\+\&\]\:ring-custom-500\/50{--tw-ring-color:rgba(var(--c-500),0.5)}input:checked:focus-visible+.dark\:\[input\:checked\:focus-visible\+\&\]\:ring-custom-400\/50:is(.dark *){--tw-ring-color:rgba(var(--c-400),0.5)}input:focus-visible+.\[input\:focus-visible\+\&\]\:z-10{z-index:10}input:focus-visible+.\[input\:focus-visible\+\&\]\:ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}input:focus-visible+.\[input\:focus-visible\+\&\]\:ring-gray-950\/10{--tw-ring-color:rgba(var(--gray-950),0.1)}input:focus-visible+.dark\:\[input\:focus-visible\+\&\]\:ring-white\/20:is(.dark *){--tw-ring-color:hsla(0,0%,100%,.2)} diff --git a/public/css/filament/forms/forms.css b/public/css/filament/forms/forms.css new file mode 100644 index 0000000..6d50ac4 --- /dev/null +++ b/public/css/filament/forms/forms.css @@ -0,0 +1,49 @@ +input::-webkit-datetime-edit{display:block;padding:0}.cropper-container{-webkit-touch-callout:none;direction:ltr;font-size:0;line-height:0;position:relative;touch-action:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.cropper-container img{backface-visibility:hidden;display:block;height:100%;image-orientation:0deg;max-height:none!important;max-width:none!important;min-height:0!important;min-width:0!important;width:100%}.cropper-canvas,.cropper-crop-box,.cropper-drag-box,.cropper-modal,.cropper-wrap-box{inset:0;position:absolute}.cropper-canvas,.cropper-wrap-box{overflow:hidden}.cropper-drag-box{background-color:#fff;opacity:0}.cropper-modal{background-color:#000;opacity:.5}.cropper-view-box{display:block;height:100%;outline:1px solid #39f;outline-color:#3399ffbf;overflow:hidden;width:100%}.cropper-dashed{border:0 dashed #eee;display:block;opacity:.5;position:absolute}.cropper-dashed.dashed-h{border-bottom-width:1px;border-top-width:1px;height:33.33333%;left:0;top:33.33333%;width:100%}.cropper-dashed.dashed-v{border-left-width:1px;border-right-width:1px;height:100%;left:33.33333%;top:0;width:33.33333%}.cropper-center{display:block;height:0;left:50%;opacity:.75;position:absolute;top:50%;width:0}.cropper-center:after,.cropper-center:before{background-color:#eee;content:" ";display:block;position:absolute}.cropper-center:before{height:1px;left:-3px;top:0;width:7px}.cropper-center:after{height:7px;left:0;top:-3px;width:1px}.cropper-face,.cropper-line,.cropper-point{display:block;height:100%;opacity:.1;position:absolute;width:100%}.cropper-face{background-color:#fff;left:0;top:0}.cropper-line{background-color:#39f}.cropper-line.line-e{cursor:ew-resize;right:-3px;top:0;width:5px}.cropper-line.line-n{cursor:ns-resize;height:5px;left:0;top:-3px}.cropper-line.line-w{cursor:ew-resize;left:-3px;top:0;width:5px}.cropper-line.line-s{bottom:-3px;cursor:ns-resize;height:5px;left:0}.cropper-point{background-color:#39f;height:5px;opacity:.75;width:5px}.cropper-point.point-e{cursor:ew-resize;margin-top:-3px;right:-3px;top:50%}.cropper-point.point-n{cursor:ns-resize;left:50%;margin-left:-3px;top:-3px}.cropper-point.point-w{cursor:ew-resize;left:-3px;margin-top:-3px;top:50%}.cropper-point.point-s{bottom:-3px;cursor:s-resize;left:50%;margin-left:-3px}.cropper-point.point-ne{cursor:nesw-resize;right:-3px;top:-3px}.cropper-point.point-nw{cursor:nwse-resize;left:-3px;top:-3px}.cropper-point.point-sw{bottom:-3px;cursor:nesw-resize;left:-3px}.cropper-point.point-se{bottom:-3px;cursor:nwse-resize;height:20px;opacity:1;right:-3px;width:20px}@media (min-width:768px){.cropper-point.point-se{height:15px;width:15px}}@media (min-width:992px){.cropper-point.point-se{height:10px;width:10px}}@media (min-width:1200px){.cropper-point.point-se{height:5px;opacity:.75;width:5px}}.cropper-point.point-se:before{background-color:#39f;bottom:-50%;content:" ";display:block;height:200%;opacity:0;position:absolute;right:-50%;width:200%}.cropper-invisible{opacity:0}.cropper-bg{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC)}.cropper-hide{display:block;height:0;position:absolute;width:0}.cropper-hidden{display:none!important}.cropper-move{cursor:move}.cropper-crop{cursor:crosshair}.cropper-disabled .cropper-drag-box,.cropper-disabled .cropper-face,.cropper-disabled .cropper-line,.cropper-disabled .cropper-point{cursor:not-allowed}.filepond--assistant{clip:rect(1px,1px,1px,1px);border:0;clip-path:inset(50%);height:1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.filepond--browser.filepond--browser{font-size:0;left:1em;margin:0;opacity:0;padding:0;position:absolute;top:1.75em;width:calc(100% - 2em)}.filepond--data{border:none;contain:strict;height:0;margin:0;padding:0;visibility:hidden;width:0}.filepond--data,.filepond--drip{pointer-events:none;position:absolute}.filepond--drip{background:rgba(0,0,0,.01);border-radius:.5em;inset:0;opacity:.1;overflow:hidden}.filepond--drip-blob{background:#292625;border-radius:50%;height:8em;margin-left:-4em;margin-top:-4em;transform-origin:center center;width:8em}.filepond--drip-blob,.filepond--drop-label{left:0;position:absolute;top:0;will-change:transform,opacity}.filepond--drop-label{align-items:center;color:#4f4f4f;display:flex;height:0;justify-content:center;margin:0;right:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.filepond--drop-label.filepond--drop-label label{display:block;margin:0;padding:.5em}.filepond--drop-label label{cursor:default;font-size:.875em;font-weight:400;line-height:1.5;text-align:center}.filepond--label-action{-webkit-text-decoration-skip:ink;cursor:pointer;text-decoration:underline;text-decoration-color:#a7a4a4;text-decoration-skip-ink:auto}.filepond--root[data-disabled] .filepond--drop-label label{opacity:.5}.filepond--file-action-button.filepond--file-action-button{border:none;font-family:inherit;font-size:1em;height:1.625em;line-height:inherit;margin:0;outline:none;padding:0;width:1.625em;will-change:transform,opacity}.filepond--file-action-button.filepond--file-action-button span{clip:rect(1px,1px,1px,1px);border:0;clip-path:inset(50%);height:1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.filepond--file-action-button.filepond--file-action-button svg{height:100%;width:100%}.filepond--file-action-button.filepond--file-action-button:after{content:"";inset:-.75em;position:absolute}.filepond--file-action-button{background-color:#00000080;background-image:none;border-radius:50%;box-shadow:0 0 #fff0;color:#fff;cursor:auto;transition:box-shadow .25s ease-in}.filepond--file-action-button:focus,.filepond--file-action-button:hover{box-shadow:0 0 0 .125em #ffffffe6}.filepond--file-action-button[disabled]{background-color:#00000040;color:#ffffff80}.filepond--file-action-button[hidden]{display:none}.filepond--file-info{align-items:flex-start;display:flex;flex:1;flex-direction:column;margin:0 .5em 0 0;min-width:0;pointer-events:none;position:static;-webkit-user-select:none;-moz-user-select:none;user-select:none;will-change:transform,opacity}.filepond--file-info *{margin:0}.filepond--file-info .filepond--file-info-main{font-size:.75em;line-height:1.2;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.filepond--file-info .filepond--file-info-sub{font-size:.625em;opacity:.5;transition:opacity .25s ease-in-out;white-space:nowrap}.filepond--file-info .filepond--file-info-sub:empty{display:none}.filepond--file-status{align-items:flex-end;display:flex;flex-direction:column;flex-grow:0;flex-shrink:0;margin:0;min-width:2.25em;pointer-events:none;position:static;text-align:right;-webkit-user-select:none;-moz-user-select:none;user-select:none;will-change:transform,opacity}.filepond--file-status *{margin:0;white-space:nowrap}.filepond--file-status .filepond--file-status-main{font-size:.75em;line-height:1.2}.filepond--file-status .filepond--file-status-sub{font-size:.625em;opacity:.5;transition:opacity .25s ease-in-out}.filepond--file-wrapper.filepond--file-wrapper{border:none;height:100%;margin:0;min-width:0;padding:0}.filepond--file-wrapper.filepond--file-wrapper>legend{clip:rect(1px,1px,1px,1px);border:0;clip-path:inset(50%);height:1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.filepond--file{align-items:flex-start;border-radius:.5em;color:#fff;display:flex;height:100%;padding:.5625em;position:static}.filepond--file .filepond--file-status{margin-left:auto;margin-right:2.25em}.filepond--file .filepond--processing-complete-indicator{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;z-index:3}.filepond--file .filepond--file-action-button,.filepond--file .filepond--processing-complete-indicator,.filepond--file .filepond--progress-indicator{position:absolute}.filepond--file [data-align*=left]{left:.5625em}.filepond--file [data-align*=right]{right:.5625em}.filepond--file [data-align*=center]{left:calc(50% - .8125em)}.filepond--file [data-align*=bottom]{bottom:1.125em}.filepond--file [data-align=center]{top:calc(50% - .8125em)}.filepond--file .filepond--progress-indicator{margin-top:.1875em}.filepond--file .filepond--progress-indicator[data-align*=right]{margin-right:.1875em}.filepond--file .filepond--progress-indicator[data-align*=left]{margin-left:.1875em}[data-filepond-item-state*=error] .filepond--file-info,[data-filepond-item-state*=invalid] .filepond--file-info,[data-filepond-item-state=cancelled] .filepond--file-info{margin-right:2.25em}[data-filepond-item-state~=processing] .filepond--file-status-sub{opacity:0}[data-filepond-item-state~=processing] .filepond--action-abort-item-processing~.filepond--file-status .filepond--file-status-sub{opacity:.5}[data-filepond-item-state=processing-error] .filepond--file-status-sub{opacity:0}[data-filepond-item-state=processing-error] .filepond--action-retry-item-processing~.filepond--file-status .filepond--file-status-sub{opacity:.5}[data-filepond-item-state=processing-complete] .filepond--action-revert-item-processing svg{animation:fall .5s linear .125s both}[data-filepond-item-state=processing-complete] .filepond--file-status-sub{opacity:.5}[data-filepond-item-state=processing-complete] .filepond--file-info-sub,[data-filepond-item-state=processing-complete] .filepond--processing-complete-indicator:not([style*=hidden])~.filepond--file-status .filepond--file-status-sub{opacity:0}[data-filepond-item-state=processing-complete] .filepond--action-revert-item-processing~.filepond--file-info .filepond--file-info-sub{opacity:.5}[data-filepond-item-state*=error] .filepond--file-wrapper,[data-filepond-item-state*=error] .filepond--panel,[data-filepond-item-state*=invalid] .filepond--file-wrapper,[data-filepond-item-state*=invalid] .filepond--panel{animation:shake .65s linear both}[data-filepond-item-state*=busy] .filepond--progress-indicator svg{animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@keyframes shake{10%,90%{transform:translate(-.0625em)}20%,80%{transform:translate(.125em)}30%,50%,70%{transform:translate(-.25em)}40%,60%{transform:translate(.25em)}}@keyframes fall{0%{animation-timing-function:ease-out;opacity:0;transform:scale(.5)}70%{animation-timing-function:ease-in-out;opacity:1;transform:scale(1.1)}to{animation-timing-function:ease-out;transform:scale(1)}}.filepond--hopper[data-hopper-state=drag-over]>*{pointer-events:none}.filepond--hopper[data-hopper-state=drag-over]:after{content:"";inset:0;position:absolute;z-index:100}.filepond--progress-indicator{z-index:103}.filepond--file-action-button{z-index:102}.filepond--file-status{z-index:101}.filepond--file-info{z-index:100}.filepond--item{left:0;margin:.25em;padding:0;position:absolute;right:0;top:0;touch-action:none;will-change:transform,opacity;z-index:1}.filepond--item>.filepond--panel{z-index:-1}.filepond--item>.filepond--panel .filepond--panel-bottom{box-shadow:0 .0625em .125em -.0625em #00000040}.filepond--item>.filepond--file-wrapper,.filepond--item>.filepond--panel{transition:opacity .15s ease-out}.filepond--item[data-drag-state]{cursor:grab}.filepond--item[data-drag-state]>.filepond--panel{box-shadow:0 0 0 transparent;transition:box-shadow .125s ease-in-out}.filepond--item[data-drag-state=drag]{cursor:grabbing}.filepond--item[data-drag-state=drag]>.filepond--panel{box-shadow:0 .125em .3125em #00000053}.filepond--item[data-drag-state]:not([data-drag-state=idle]){z-index:2}.filepond--item-panel{background-color:#64605e}[data-filepond-item-state=processing-complete] .filepond--item-panel{background-color:#369763}[data-filepond-item-state*=error] .filepond--item-panel,[data-filepond-item-state*=invalid] .filepond--item-panel{background-color:#c44e47}.filepond--item-panel{border-radius:.5em;transition:background-color .25s}.filepond--list-scroller{left:0;margin:0;position:absolute;right:0;top:0;will-change:transform}.filepond--list-scroller[data-state=overflow] .filepond--list{bottom:0;right:0}.filepond--list-scroller[data-state=overflow]{-webkit-overflow-scrolling:touch;-webkit-mask:linear-gradient(180deg,#000 calc(100% - .5em),transparent);mask:linear-gradient(180deg,#000 calc(100% - .5em),transparent);overflow-x:hidden;overflow-y:scroll}.filepond--list-scroller::-webkit-scrollbar{background:transparent}.filepond--list-scroller::-webkit-scrollbar:vertical{width:1em}.filepond--list-scroller::-webkit-scrollbar:horizontal{height:0}.filepond--list-scroller::-webkit-scrollbar-thumb{background-clip:content-box;background-color:#0000004d;border:.3125em solid transparent;border-radius:99999px}.filepond--list.filepond--list{list-style-type:none;margin:0;padding:0;position:absolute;top:0;will-change:transform}.filepond--list{left:.75em;right:.75em}.filepond--root[data-style-panel-layout~=integrated]{height:100%;margin:0;max-width:none;width:100%}.filepond--root[data-style-panel-layout~=circle] .filepond--panel-root,.filepond--root[data-style-panel-layout~=integrated] .filepond--panel-root{border-radius:0}.filepond--root[data-style-panel-layout~=circle] .filepond--panel-root>*,.filepond--root[data-style-panel-layout~=integrated] .filepond--panel-root>*{display:none}.filepond--root[data-style-panel-layout~=circle] .filepond--drop-label,.filepond--root[data-style-panel-layout~=integrated] .filepond--drop-label{align-items:center;bottom:0;display:flex;height:auto;justify-content:center;z-index:7}.filepond--root[data-style-panel-layout~=circle] .filepond--item-panel,.filepond--root[data-style-panel-layout~=integrated] .filepond--item-panel{display:none}.filepond--root[data-style-panel-layout~=compact] .filepond--list-scroller,.filepond--root[data-style-panel-layout~=integrated] .filepond--list-scroller{height:100%;margin-bottom:0;margin-top:0;overflow:hidden}.filepond--root[data-style-panel-layout~=compact] .filepond--list,.filepond--root[data-style-panel-layout~=integrated] .filepond--list{height:100%;left:0;right:0}.filepond--root[data-style-panel-layout~=compact] .filepond--item,.filepond--root[data-style-panel-layout~=integrated] .filepond--item{margin:0}.filepond--root[data-style-panel-layout~=compact] .filepond--file-wrapper,.filepond--root[data-style-panel-layout~=integrated] .filepond--file-wrapper{height:100%}.filepond--root[data-style-panel-layout~=compact] .filepond--drop-label,.filepond--root[data-style-panel-layout~=integrated] .filepond--drop-label{z-index:7}.filepond--root[data-style-panel-layout~=circle]{border-radius:99999rem;overflow:hidden}.filepond--root[data-style-panel-layout~=circle]>.filepond--panel{border-radius:inherit}.filepond--root[data-style-panel-layout~=circle] .filepond--file-info,.filepond--root[data-style-panel-layout~=circle] .filepond--file-status,.filepond--root[data-style-panel-layout~=circle]>.filepond--panel>*{display:none}@media not all and (-webkit-min-device-pixel-ratio:0),not all and (min-resolution:.001dpcm){@supports (-webkit-appearance:none) and (stroke-color:transparent){.filepond--root[data-style-panel-layout~=circle]{will-change:transform}}}.filepond--panel-root{background-color:#f1f0ef;border-radius:.5em}.filepond--panel{height:100%!important;left:0;margin:0;pointer-events:none;position:absolute;right:0;top:0}.filepond-panel:not([data-scalable=false]){height:auto!important}.filepond--panel[data-scalable=false]>div{display:none}.filepond--panel[data-scalable=true]{background-color:transparent!important;border:none!important;transform-style:preserve-3d}.filepond--panel-bottom,.filepond--panel-center,.filepond--panel-top{left:0;margin:0;padding:0;position:absolute;right:0;top:0}.filepond--panel-bottom,.filepond--panel-top{height:.5em}.filepond--panel-top{border-bottom:none!important;border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.filepond--panel-top:after{background-color:inherit;bottom:-1px;content:"";height:2px;left:0;position:absolute;right:0}.filepond--panel-bottom,.filepond--panel-center{backface-visibility:hidden;transform:translate3d(0,.5em,0);transform-origin:left top;will-change:transform}.filepond--panel-bottom{border-top:none!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.filepond--panel-bottom:before{background-color:inherit;content:"";height:2px;left:0;position:absolute;right:0;top:-1px}.filepond--panel-center{border-bottom:none!important;border-radius:0!important;border-top:none!important;height:100px!important}.filepond--panel-center:not([style]){visibility:hidden}.filepond--progress-indicator{color:#fff;height:1.25em;margin:0;pointer-events:none;position:static;width:1.25em;will-change:transform,opacity}.filepond--progress-indicator svg{height:100%;transform-box:fill-box;vertical-align:top;width:100%}.filepond--progress-indicator path{fill:none;stroke:currentColor}.filepond--list-scroller{z-index:6}.filepond--drop-label{z-index:5}.filepond--drip{z-index:3}.filepond--root>.filepond--panel{z-index:2}.filepond--browser{z-index:1}.filepond--root{box-sizing:border-box;contain:layout style size;direction:ltr;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:1rem;font-weight:450;line-height:normal;margin-bottom:1em;position:relative;text-align:left;text-rendering:optimizeLegibility}.filepond--root *{box-sizing:inherit;line-height:inherit}.filepond--root :not(text){font-size:inherit}.filepond--root[data-disabled]{pointer-events:none}.filepond--root[data-disabled] .filepond--list-scroller{pointer-events:all}.filepond--root[data-disabled] .filepond--list{pointer-events:none}.filepond--root .filepond--drop-label{min-height:4.75em}.filepond--root .filepond--list-scroller{margin-bottom:1em;margin-top:1em}.filepond--root .filepond--credits{bottom:-14px;color:inherit;font-size:11px;line-height:.85;opacity:.175;position:absolute;right:0;text-decoration:none;z-index:3}.filepond--root .filepond--credits[style]{bottom:auto;margin-top:14px;top:0}.filepond--action-edit-item.filepond--action-edit-item{height:2em;padding:.1875em;width:2em}.filepond--action-edit-item.filepond--action-edit-item[data-align*=center]{margin-left:-.1875em}.filepond--action-edit-item.filepond--action-edit-item[data-align*=bottom]{margin-bottom:-.1875em}.filepond--action-edit-item-alt{background:transparent;border:none;color:inherit;font-family:inherit;line-height:inherit;margin:0 0 0 .25em;outline:none;padding:0;pointer-events:all;position:absolute}.filepond--action-edit-item-alt svg{height:1.3125em;width:1.3125em}.filepond--action-edit-item-alt span{font-size:0;opacity:0}.filepond--root[data-style-panel-layout~=circle] .filepond--action-edit-item{opacity:1!important;visibility:visible!important}.filepond--image-preview-markup{left:0;position:absolute;top:0}.filepond--image-preview-wrapper{z-index:2}.filepond--image-preview-overlay{display:block;left:0;margin:0;max-height:7rem;min-height:5rem;opacity:0;pointer-events:none;position:absolute;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%;z-index:2}.filepond--image-preview-overlay svg{color:inherit;height:auto;max-height:inherit;width:100%}.filepond--image-preview-overlay-idle{color:#282828d9;mix-blend-mode:multiply}.filepond--image-preview-overlay-success{color:#369763;mix-blend-mode:normal}.filepond--image-preview-overlay-failure{color:#c44e47;mix-blend-mode:normal}@supports (-webkit-marquee-repetition:infinite) and ((-o-object-fit:fill) or (object-fit:fill)){.filepond--image-preview-overlay-idle{mix-blend-mode:normal}}.filepond--image-preview-wrapper{background:rgba(0,0,0,.01);border-radius:.45em;height:100%;left:0;margin:0;overflow:hidden;position:absolute;right:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.filepond--image-preview{align-items:center;background:#222;display:flex;height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%;will-change:transform,opacity;z-index:1}.filepond--image-clip{margin:0 auto;overflow:hidden;position:relative}.filepond--image-clip[data-transparency-indicator=grid] canvas,.filepond--image-clip[data-transparency-indicator=grid] img{background-color:#fff;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg' fill='%23eee'%3E%3Cpath d='M0 0h50v50H0M50 50h50v50H50'/%3E%3C/svg%3E");background-size:1.25em 1.25em}.filepond--image-bitmap,.filepond--image-vector{left:0;position:absolute;top:0;will-change:transform}.filepond--root[data-style-panel-layout~=integrated] .filepond--image-preview-wrapper{border-radius:0}.filepond--root[data-style-panel-layout~=integrated] .filepond--image-preview{align-items:center;display:flex;height:100%;justify-content:center}.filepond--root[data-style-panel-layout~=circle] .filepond--image-preview-wrapper{border-radius:99999rem}.filepond--root[data-style-panel-layout~=circle] .filepond--image-preview-overlay{bottom:0;top:auto;transform:scaleY(-1)}.filepond--root[data-style-panel-layout~=circle] .filepond--file .filepond--file-action-button[data-align*=bottom]:not([data-align*=center]){margin-bottom:.325em}.filepond--root[data-style-panel-layout~=circle] .filepond--file [data-align*=left]{left:calc(50% - 3em)}.filepond--root[data-style-panel-layout~=circle] .filepond--file [data-align*=right]{right:calc(50% - 3em)}.filepond--root[data-style-panel-layout~=circle] .filepond--progress-indicator[data-align*=bottom][data-align*=left],.filepond--root[data-style-panel-layout~=circle] .filepond--progress-indicator[data-align*=bottom][data-align*=right]{margin-bottom:.5125em}.filepond--root[data-style-panel-layout~=circle] .filepond--progress-indicator[data-align*=bottom][data-align*=center]{margin-bottom:.1875em;margin-left:.1875em;margin-top:0}.filepond--media-preview audio{display:none}.filepond--media-preview .audioplayer{margin:2.3em auto auto;width:calc(100% - 1.4em)}.filepond--media-preview .playpausebtn{background-position:50%;background-repeat:no-repeat;border:none;border-radius:25px;cursor:pointer;float:left;height:25px;margin-right:.3em;margin-top:.3em;outline:none;width:25px}.filepond--media-preview .playpausebtn:hover{background-color:#00000080}.filepond--media-preview .play{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAyElEQVQ4T9XUsWoCQRRG4XPaFL5SfIy8gKYKBCysrax8Ahs7qzQ2qVIFOwsrsbEWLEK6EBFGBrIQhN2d3dnGgalm+Jh7789Ix8uOPe4YDCH0gZ66atKW0pJDCE/AEngDXtRjCpwCRucbGANzNVTBqWBhfAJDdV+GNgWj8wtM41bPt3AbsDB2f69d/0dzwC0wUDe54A8wAWbqJbfkD+BZPeQO5QsYqYu6LKb0MIb7VT3VYfG8CnwEHtT3FKi4c8e/TZMyk3LYFrwCgMdHFbRDKS8AAAAASUVORK5CYII=)}.filepond--media-preview .pause{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAh0lEQVQ4T+2UsQkCURBE30PLMbAMMResQrAPsQ0TK9AqDKxGZeTLD74aGNwlhzfZssvADDMrPcOe+RggYZIJcG2s2KinMidZAvu6u6uzT8u+JCeZArfmcKUeK+EaONTdQy23bxgJX8aPHvIHsSnVuzTx36rn2pQFsGuqN//ZlK7vbIDvq6vkJ9yteBXzecYbAAAAAElFTkSuQmCC)}.filepond--media-preview .timeline{background:hsla(0,0%,100%,.3);border-radius:15px;float:left;height:3px;margin-top:1em;width:calc(100% - 2.5em)}.filepond--media-preview .playhead{background:#fff;border-radius:50%;height:13px;margin-top:-5px;width:13px}.filepond--media-preview-wrapper{background:rgba(0,0,0,.01);border-radius:.45em;height:100%;left:0;margin:0;overflow:hidden;pointer-events:auto;position:absolute;right:0;top:0}.filepond--media-preview-wrapper:before{background:linear-gradient(180deg,#000 0,transparent);content:" ";filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#000000",endColorstr="#00000000",GradientType=0);height:2em;position:absolute;width:100%;z-index:3}.filepond--media-preview{display:block;height:100%;position:relative;transform-origin:center center;width:100%;will-change:transform,opacity;z-index:1}.filepond--media-preview audio,.filepond--media-preview video{width:100%;will-change:transform}.filepond--root{--tw-bg-opacity:1;--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgba(var(--gray-950),0.1);background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.5rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);margin-bottom:0}.filepond--root:is(.dark *){--tw-ring-color:hsla(0,0%,100%,.2);background-color:hsla(0,0%,100%,.05)}.filepond--root[data-disabled=disabled]{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.filepond--root[data-disabled=disabled]:is(.dark *){--tw-ring-color:hsla(0,0%,100%,.1);background-color:transparent}.filepond--panel-root{background-color:transparent}.filepond--drop-label label{--tw-text-opacity:1;color:rgba(var(--gray-600),var(--tw-text-opacity));font-size:.875rem;line-height:1.25rem;padding:.75rem!important}.filepond--drop-label label:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.filepond--label-action{--tw-text-opacity:1;color:rgba(var(--primary-600),var(--tw-text-opacity));font-weight:500;text-decoration-line:none;transition-duration:75ms;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.filepond--label-action:hover{--tw-text-opacity:1;color:rgba(var(--primary-500),var(--tw-text-opacity))}.filepond--label-action:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.filepond--label-action:hover:is(.dark *){--tw-text-opacity:1;color:rgba(var(--primary-500),var(--tw-text-opacity))}.filepond--drip-blob{--tw-bg-opacity:1;background-color:rgba(var(--gray-400),var(--tw-bg-opacity))}.filepond--drip-blob:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-500),var(--tw-bg-opacity))}.filepond--root[data-style-panel-layout=grid] .filepond--item{display:inline;width:calc(50% - .5rem)}@media (min-width:1024px){.filepond--root[data-style-panel-layout=grid] .filepond--item{width:calc(33.33% - .5rem)}}.filepond--download-icon{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));display:inline-block;height:1rem;margin-inline-end:.25rem;pointer-events:auto;vertical-align:bottom;width:1rem}.filepond--download-icon:hover{background-color:hsla(0,0%,100%,.7)}.filepond--download-icon{-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBjbGFzcz0iZmVhdGhlciBmZWF0aGVyLWRvd25sb2FkIj48cGF0aCBkPSJNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNE03IDEwbDUgNSA1LTVNMTIgMTVWMyIvPjwvc3ZnPg==);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBjbGFzcz0iZmVhdGhlciBmZWF0aGVyLWRvd25sb2FkIj48cGF0aCBkPSJNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNE03IDEwbDUgNSA1LTVNMTIgMTVWMyIvPjwvc3ZnPg==);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100%;mask-size:100%}.filepond--open-icon{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));display:inline-block;height:1rem;margin-inline-end:.25rem;pointer-events:auto;vertical-align:bottom;width:1rem}.filepond--open-icon:hover{background-color:hsla(0,0%,100%,.7)}.filepond--open-icon{-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTYgdy02IiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPjxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgZD0iTTEwIDZINmEyIDIgMCAwIDAtMiAydjEwYTIgMiAwIDAgMCAyIDJoMTBhMiAyIDAgMCAwIDItMnYtNE0xNCA0aDZtMCAwdjZtMC02TDEwIDE0Ii8+PC9zdmc+);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTYgdy02IiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPjxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgZD0iTTEwIDZINmEyIDIgMCAwIDAtMiAydjEwYTIgMiAwIDAgMCAyIDJoMTBhMiAyIDAgMCAwIDItMnYtNE0xNCA0aDZtMCAwdjZtMC02TDEwIDE0Ii8+PC9zdmc+);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100%;mask-size:100%}.filepond--file-action-button.filepond--action-edit-item{background-color:rgba(0,0,0,.5)}.cropper-drag-box.cropper-crop.cropper-modal{background-color:rgba(var(--gray-100),.5);opacity:1}.cropper-drag-box.cropper-crop.cropper-modal:is(.dark *){background-color:rgba(var(--gray-900),.8)}.fi-fo-file-upload-circle-cropper .cropper-face,.fi-fo-file-upload-circle-cropper .cropper-view-box{border-radius:50%}.CodeMirror{color:#000;direction:ltr;font-family:monospace;height:300px}.CodeMirror-lines{padding:4px 0}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{background-color:#f7f7f7;border-right:1px solid #ddd;white-space:nowrap}.CodeMirror-linenumber{color:#999;min-width:20px;padding:0 3px 0 5px;text-align:right;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{background:#7e7;border:0!important;width:auto}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor .CodeMirror-line::selection,.cm-fat-cursor .CodeMirror-line>span::selection,.cm-fat-cursor .CodeMirror-line>span>span::selection{background:0 0}.cm-fat-cursor .CodeMirror-line::-moz-selection,.cm-fat-cursor .CodeMirror-line>span::-moz-selection,.cm-fat-cursor .CodeMirror-line>span>span::-moz-selection{background:0 0}.cm-fat-cursor{caret-color:transparent}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{inset:-50px 0 0;overflow:hidden;position:absolute}.CodeMirror-ruler{border-left:1px solid #ccc;bottom:0;position:absolute;top:0}.cm-s-default .cm-header{color:#00f}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-type,.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-invalidchar,.cm-s-default .cm-error{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{background:#fff;overflow:hidden;position:relative}.CodeMirror-scroll{height:100%;margin-bottom:-50px;margin-right:-50px;outline:0;overflow:scroll!important;padding-bottom:50px;position:relative;z-index:0}.CodeMirror-sizer{border-right:50px solid transparent;position:relative}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{display:none;outline:0;position:absolute;z-index:6}.CodeMirror-vscrollbar{overflow-x:hidden;overflow-y:scroll;right:0;top:0}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-x:scroll;overflow-y:hidden}.CodeMirror-scrollbar-filler{bottom:0;right:0}.CodeMirror-gutter-filler{bottom:0;left:0}.CodeMirror-gutters{left:0;min-height:100%;position:absolute;top:0;z-index:3}.CodeMirror-gutter{display:inline-block;height:100%;margin-bottom:-50px;vertical-align:top;white-space:normal}.CodeMirror-gutter-wrapper{background:0 0!important;border:none!important;position:absolute;z-index:4}.CodeMirror-gutter-background{bottom:0;position:absolute;top:0;z-index:4}.CodeMirror-gutter-elt{cursor:default;position:absolute;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{word-wrap:normal;-webkit-tap-highlight-color:transparent;background:0 0;border-radius:0;border-width:0;color:inherit;font-family:inherit;font-size:inherit;font-variant-ligatures:contextual;line-height:inherit;margin:0;overflow:visible;position:relative;white-space:pre;z-index:2}.CodeMirror-wrap pre.CodeMirror-line,.CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{inset:0;position:absolute;z-index:0}.CodeMirror-linewidget{padding:.1px;position:relative;z-index:2}.CodeMirror-code{outline:0}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{box-sizing:content-box}.CodeMirror-measure{height:0;overflow:hidden;position:absolute;visibility:hidden;width:100%}.CodeMirror-cursor{pointer-events:none;position:absolute}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{position:relative;visibility:hidden;z-index:3}.CodeMirror-focused div.CodeMirror-cursors,div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:#ff06}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:""}span.CodeMirror-selectedtext{background:0 0}.EasyMDEContainer{display:block}.CodeMirror-rtl pre{direction:rtl}.EasyMDEContainer.sided--no-fullscreen{display:flex;flex-direction:row;flex-wrap:wrap}.EasyMDEContainer .CodeMirror{word-wrap:break-word;border:1px solid #ced4da;border-bottom-left-radius:4px;border-bottom-right-radius:4px;box-sizing:border-box;font:inherit;height:auto;padding:10px;z-index:0}.EasyMDEContainer .CodeMirror-scroll{cursor:text}.EasyMDEContainer .CodeMirror-fullscreen{background:#fff;border-bottom-right-radius:0!important;border-right:none!important;height:auto;inset:50px 0 0;position:fixed!important;z-index:8}.EasyMDEContainer .CodeMirror-sided{width:50%!important}.EasyMDEContainer.sided--no-fullscreen .CodeMirror-sided{border-bottom-right-radius:0;border-right:none!important;flex:1 1 auto;position:relative}.EasyMDEContainer .CodeMirror-placeholder{opacity:.5}.EasyMDEContainer .CodeMirror-focused .CodeMirror-selected{background:#d9d9d9}.editor-toolbar{border-left:1px solid #ced4da;border-right:1px solid #ced4da;border-top:1px solid #ced4da;border-top-left-radius:4px;border-top-right-radius:4px;padding:9px 10px;position:relative;-webkit-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none}.editor-toolbar.fullscreen{background:#fff;border:0;box-sizing:border-box;height:50px;left:0;opacity:1;padding-bottom:10px;padding-top:10px;position:fixed;top:0;width:100%;z-index:9}.editor-toolbar.fullscreen:before{background:linear-gradient(90deg,#fff 0,hsla(0,0%,100%,0));height:50px;left:0;margin:0;padding:0;position:fixed;top:0;width:20px}.editor-toolbar.fullscreen:after{background:linear-gradient(90deg,hsla(0,0%,100%,0) 0,#fff);height:50px;margin:0;padding:0;position:fixed;right:0;top:0;width:20px}.EasyMDEContainer.sided--no-fullscreen .editor-toolbar{width:100%}.editor-toolbar .easymde-dropdown,.editor-toolbar button{background:0 0;border:1px solid transparent;border-radius:3px;cursor:pointer;display:inline-block;height:30px;margin:0;padding:0;text-align:center;text-decoration:none!important}.editor-toolbar button{font-weight:700;min-width:30px;padding:0 6px;white-space:nowrap}.editor-toolbar button.active,.editor-toolbar button:hover{background:#fcfcfc;border-color:#95a5a6}.editor-toolbar i.separator{border-left:1px solid #d9d9d9;border-right:1px solid #fff;color:transparent;display:inline-block;margin:0 6px;text-indent:-10px;width:0}.editor-toolbar button:after{font-family:Arial,Helvetica Neue,Helvetica,sans-serif;font-size:65%;position:relative;top:2px;vertical-align:text-bottom}.editor-toolbar button.heading-1:after{content:"1"}.editor-toolbar button.heading-2:after{content:"2"}.editor-toolbar button.heading-3:after{content:"3"}.editor-toolbar button.heading-bigger:after{content:"\25b2"}.editor-toolbar button.heading-smaller:after{content:"\25bc"}.editor-toolbar.disabled-for-preview button:not(.no-disable){opacity:.6;pointer-events:none}@media only screen and (max-width:700px){.editor-toolbar i.no-mobile{display:none}}.editor-statusbar{color:#959694;font-size:12px;padding:8px 10px;text-align:right}.EasyMDEContainer.sided--no-fullscreen .editor-statusbar{width:100%}.editor-statusbar span{display:inline-block;margin-left:1em;min-width:4em}.editor-statusbar .lines:before{content:"lines: "}.editor-statusbar .words:before{content:"words: "}.editor-statusbar .characters:before{content:"characters: "}.editor-preview-full{height:100%;left:0;position:absolute;top:0;width:100%;z-index:7}.editor-preview-full,.editor-preview-side{box-sizing:border-box;display:none;overflow:auto}.editor-preview-side{word-wrap:break-word;border:1px solid #ddd;bottom:0;position:fixed;right:0;top:50px;width:50%;z-index:9}.editor-preview-active-side{display:block}.EasyMDEContainer.sided--no-fullscreen .editor-preview-active-side{flex:1 1 auto;height:auto;position:static}.editor-preview-active{display:block}.editor-preview{background:#fafafa;padding:10px}.editor-preview>p{margin-top:0}.editor-preview pre{background:#eee;margin-bottom:10px}.editor-preview table td,.editor-preview table th{border:1px solid #ddd;padding:5px}.cm-s-easymde .cm-tag{color:#63a35c}.cm-s-easymde .cm-attribute{color:#795da3}.cm-s-easymde .cm-string{color:#183691}.cm-s-easymde .cm-header-1{font-size:calc(1.375rem + 1.5vw)}.cm-s-easymde .cm-header-2{font-size:calc(1.325rem + .9vw)}.cm-s-easymde .cm-header-3{font-size:calc(1.3rem + .6vw)}.cm-s-easymde .cm-header-4{font-size:calc(1.275rem + .3vw)}.cm-s-easymde .cm-header-5{font-size:1.25rem}.cm-s-easymde .cm-header-6{font-size:1rem}.cm-s-easymde .cm-header-1,.cm-s-easymde .cm-header-2,.cm-s-easymde .cm-header-3,.cm-s-easymde .cm-header-4,.cm-s-easymde .cm-header-5,.cm-s-easymde .cm-header-6{line-height:1.2;margin-bottom:.5rem}.cm-s-easymde .cm-comment{background:rgba(0,0,0,.05);border-radius:2px}.cm-s-easymde .cm-link{color:#7f8c8d}.cm-s-easymde .cm-url{color:#aab2b3}.cm-s-easymde .cm-quote{color:#7f8c8d;font-style:italic}.editor-toolbar .easymde-dropdown{border:1px solid #fff;border-radius:0;position:relative}.editor-toolbar .easymde-dropdown,.editor-toolbar .easymde-dropdown:hover{background:linear-gradient(to bottom right,#fff,#fff 84%,#333 0,#333)}.easymde-dropdown-content{background-color:#f9f9f9;box-shadow:0 8px 16px #0003;display:block;padding:8px;position:absolute;top:30px;visibility:hidden;z-index:2}.easymde-dropdown:active .easymde-dropdown-content,.easymde-dropdown:focus .easymde-dropdown-content,.easymde-dropdown:focus-within .easymde-dropdown-content{visibility:visible}.easymde-dropdown-content button{display:block}span[data-img-src]:after{background-image:var(--bg-image);background-repeat:no-repeat;background-size:contain;content:"";display:block;height:0;max-height:100%;max-width:100%;padding-top:var(--height);width:var(--width)}.CodeMirror .cm-spell-error:not(.cm-url):not(.cm-comment):not(.cm-tag):not(.cm-word){background:rgba(255,0,0,.15)}:root{--color-cm-red:#991b1b;--color-cm-orange:#9a3412;--color-cm-amber:#92400e;--color-cm-yellow:#854d0e;--color-cm-lime:#3f6212;--color-cm-green:#166534;--color-cm-emerald:#065f46;--color-cm-teal:#115e59;--color-cm-cyan:#155e75;--color-cm-sky:#075985;--color-cm-blue:#1e40af;--color-cm-indigo:#3730a3;--color-cm-violet:#5b21b6;--color-cm-purple:#6b21a8;--color-cm-fuchsia:#86198f;--color-cm-pink:#9d174d;--color-cm-rose:#9f1239;--color-cm-gray:#18181b;--color-cm-gray-muted:#71717a;--color-cm-gray-background:#e4e4e7}.dark{--color-cm-red:#f87171;--color-cm-orange:#fb923c;--color-cm-amber:#fbbf24;--color-cm-yellow:#facc15;--color-cm-lime:#a3e635;--color-cm-green:#4ade80;--color-cm-emerald:#4ade80;--color-cm-teal:#2dd4bf;--color-cm-cyan:#22d3ee;--color-cm-sky:#38bdf8;--color-cm-blue:#60a5fa;--color-cm-indigo:#818cf8;--color-cm-violet:#a78bfa;--color-cm-purple:#c084fc;--color-cm-fuchsia:#e879f9;--color-cm-pink:#f472b6;--color-cm-rose:#fb7185;--color-cm-gray:#fafafa;--color-cm-gray-muted:#a1a1aa;--color-cm-gray-background:#52525b}.cm-s-easymde .cm-comment{background-color:transparent;color:var(--color-cm-gray-muted)}.EasyMDEContainer .CodeMirror-cursor{border-color:currentColor}.dark .EasyMDEContainer .cm-s-easymde span.CodeMirror-selectedtext{filter:invert(100%)}.EasyMDEContainer .cm-s-easymde .cm-keyword{color:var(--color-cm-violet)}.EasyMDEContainer .cm-s-easymde .cm-atom{color:var(--color-cm-blue)}.EasyMDEContainer .cm-s-easymde .cm-number{color:var(--color-cm-green)}.EasyMDEContainer .cm-s-easymde .cm-def{color:var(--color-cm-blue)}.EasyMDEContainer .cm-s-easymde .cm-variable{color:var(--color-cm-yellow)}.EasyMDEContainer .cm-s-easymde .cm-variable-2{color:var(--color-cm-blue)}.EasyMDEContainer .cm-s-easymde .cm-variable-3{color:var(--color-cm-emerald)}.EasyMDEContainer .cm-s-easymde .cm-operator,.EasyMDEContainer .cm-s-easymde .cm-property{color:var(--color-cm-gray)}.EasyMDEContainer .cm-s-easymde .cm-string,.EasyMDEContainer .cm-s-easymde .cm-string-2{color:var(--color-cm-rose)}.EasyMDEContainer .cm-s-easymde .cm-meta{color:var(--color-cm-gray-muted)}.EasyMDEContainer .cm-s-easymde .cm-error{color:var(--color-cm-red)}.EasyMDEContainer .cm-s-easymde .cm-qualifier{color:var(--color-cm-gray-muted)}.EasyMDEContainer .cm-s-easymde .cm-builtin{color:var(--color-cm-violet)}.EasyMDEContainer .cm-s-easymde .cm-bracket{color:var(--color-cm-gray-muted)}.EasyMDEContainer .cm-s-easymde .cm-tag{color:var(--color-cm-green)}.EasyMDEContainer .cm-s-easymde .cm-attribute{color:var(--color-cm-blue)}.EasyMDEContainer .cm-s-easymde .cm-hr{color:var(--color-cm-gray-muted)}.EasyMDEContainer .cm-s-easymde .cm-formatting-quote{color:var(--color-cm-sky)}.EasyMDEContainer .cm-s-easymde .cm-formatting-quote+.cm-quote{color:var(--color-cm-gray-muted)}.EasyMDEContainer .cm-s-easymde .cm-formatting-list,.EasyMDEContainer .cm-s-easymde .cm-formatting-list+.cm-variable-2,.EasyMDEContainer .cm-s-easymde .cm-tab+.cm-variable-2{color:var(--color-cm-gray)}.EasyMDEContainer .cm-s-easymde .cm-link{color:var(--color-cm-blue)}.EasyMDEContainer .cm-s-easymde .cm-tag{color:var(--color-cm-red)}.EasyMDEContainer .cm-s-easymde .cm-attribute{color:var(--color-cm-amber)}.EasyMDEContainer .cm-s-easymde .cm-attribute+.cm-string{color:var(--color-cm-green)}.EasyMDEContainer .cm-s-easymde .cm-formatting-code+.cm-comment:not(.cm-formatting-code){background-color:var(--color-cm-gray-background);color:var(--color-cm-gray)}.EasyMDEContainer .cm-s-easymde .cm-header-1{font-size:1.875rem;line-height:2.25rem}.EasyMDEContainer .cm-s-easymde .cm-header-2{font-size:1.5rem;line-height:2rem}.EasyMDEContainer .cm-s-easymde .cm-header-3{font-size:1.25rem;line-height:1.75rem}.EasyMDEContainer .cm-s-easymde .cm-header-4{font-size:1.125rem;line-height:1.75rem}.EasyMDEContainer .cm-s-easymde .cm-header-5{font-size:1rem;line-height:1.5rem}.EasyMDEContainer .cm-s-easymde .cm-header-6{font-size:.875rem;line-height:1.25rem}.EasyMDEContainer .cm-s-easymde .cm-comment{background-image:none}.EasyMDEContainer .CodeMirror,.EasyMDEContainer .cm-s-easymde .cm-formatting-code-block,.EasyMDEContainer .cm-s-easymde .cm-tab+.cm-comment{background-color:transparent;color:inherit}.EasyMDEContainer .CodeMirror{border-style:none;padding:.375rem .75rem}.EasyMDEContainer .CodeMirror-scroll{height:auto}.EasyMDEContainer .editor-toolbar{--tw-border-opacity:1;border-color:rgba(var(--gray-200),var(--tw-border-opacity));border-radius:0;border-width:0 0 1px;-moz-column-gap:.25rem;column-gap:.25rem;display:flex;overflow-x:auto;padding:.5rem .625rem}.EasyMDEContainer .editor-toolbar:is(.dark *){border-color:hsla(0,0%,100%,.1)}.EasyMDEContainer .editor-toolbar button{border-radius:.5rem;border-style:none;cursor:pointer;display:grid;height:2rem;padding:0;place-content:center;transition-duration:75ms;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);width:2rem}.EasyMDEContainer .editor-toolbar button:hover{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.EasyMDEContainer .editor-toolbar button:focus-visible{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.EasyMDEContainer .editor-toolbar button:hover:is(.dark *){background-color:hsla(0,0%,100%,.05)}.EasyMDEContainer .editor-toolbar button:focus-visible:is(.dark *){background-color:hsla(0,0%,100%,.05)}.EasyMDEContainer .editor-toolbar button.active{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.EasyMDEContainer .editor-toolbar button.active:is(.dark *){background-color:hsla(0,0%,100%,.05)}.EasyMDEContainer .editor-toolbar button:before{--tw-bg-opacity:1;background-color:rgba(var(--gray-700),var(--tw-bg-opacity));display:block;height:1rem;width:1rem}.EasyMDEContainer .editor-toolbar button:is(.dark *):before{--tw-bg-opacity:1;background-color:rgba(var(--gray-300),var(--tw-bg-opacity))}.EasyMDEContainer .editor-toolbar button:before{content:"";-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.EasyMDEContainer .editor-toolbar button.active:before{--tw-bg-opacity:1;background-color:rgba(var(--primary-600),var(--tw-bg-opacity))}.EasyMDEContainer .editor-toolbar button.active:is(.dark *):before{--tw-bg-opacity:1;background-color:rgba(var(--primary-400),var(--tw-bg-opacity))}.EasyMDEContainer .editor-toolbar .separator{border-style:none;margin:0!important;width:.25rem}.EasyMDEContainer .editor-toolbar .bold:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 384 512'%3E%3Cpath d='M321.1 242.4c19-22.3 30.9-50.8 30.9-82.4 0-70.59-57.42-128-128-128l-192 .01c-17.67 0-32 14.31-32 32s14.33 32 32 32h16v320H32c-17.67 0-32 14.31-32 32s14.33 32 32 32h224c70.58 0 128-57.41 128-128 0-46.71-25.4-87.21-62.9-109.61zM112 96.01h112c35.3 0 64 28.72 64 64s-28.7 64-64 64H112v-128zM256 416H112V288h144c35.3 0 64 28.71 64 63.1S291.3 416 256 416z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 384 512'%3E%3Cpath d='M321.1 242.4c19-22.3 30.9-50.8 30.9-82.4 0-70.59-57.42-128-128-128l-192 .01c-17.67 0-32 14.31-32 32s14.33 32 32 32h16v320H32c-17.67 0-32 14.31-32 32s14.33 32 32 32h224c70.58 0 128-57.41 128-128 0-46.71-25.4-87.21-62.9-109.61zM112 96.01h112c35.3 0 64 28.72 64 64s-28.7 64-64 64H112v-128zM256 416H112V288h144c35.3 0 64 28.71 64 63.1S291.3 416 256 416z'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .italic:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 384 512'%3E%3Cpath d='M384 64.01c0 17.69-14.31 32-32 32h-58.67l-133.3 320H224c17.69 0 32 14.31 32 32s-14.31 32-32 32H32c-17.69 0-32-14.31-32-32s14.31-32 32-32h58.67l133.3-320H160c-17.69 0-32-14.31-32-32s14.31-32 32-32h192c17.7 0 32 14.32 32 32z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 384 512'%3E%3Cpath d='M384 64.01c0 17.69-14.31 32-32 32h-58.67l-133.3 320H224c17.69 0 32 14.31 32 32s-14.31 32-32 32H32c-17.69 0-32-14.31-32-32s14.31-32 32-32h58.67l133.3-320H160c-17.69 0-32-14.31-32-32s14.31-32 32-32h192c17.7 0 32 14.32 32 32z'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .strikethrough:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M332.2 319.9c17.22 12.17 22.33 26.51 18.61 48.21-3.031 17.59-10.88 29.34-24.72 36.99-35.44 19.75-108.5 11.96-186-19.68-16.34-6.686-35.03 1.156-41.72 17.53s1.188 35.05 17.53 41.71c31.75 12.93 95.69 35.37 157.6 35.37 29.62 0 58.81-5.156 83.72-18.96 30.81-17.09 50.44-45.46 56.72-82.11 3.998-23.27 2.168-42.58-3.488-59.05H332.2zm155.8-80-176.5-.03c-15.85-5.614-31.83-10.34-46.7-14.62-85.47-24.62-110.9-39.05-103.7-81.33 2.5-14.53 10.16-25.96 22.72-34.03 20.47-13.15 64.06-23.84 155.4.343 17.09 4.53 34.59-5.654 39.13-22.74 4.531-17.09-5.656-34.59-22.75-39.12-91.31-24.18-160.7-21.62-206.3 7.654C121.8 73.72 103.6 101.1 98.09 133.1c-8.83 51.4 9.81 84.2 39.11 106.8H24c-13.25 0-24 10.75-24 23.1 0 13.25 10.75 23.1 24 23.1h464c13.25 0 24-10.75 24-23.1 0-12.3-10.7-23.1-24-23.1z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M332.2 319.9c17.22 12.17 22.33 26.51 18.61 48.21-3.031 17.59-10.88 29.34-24.72 36.99-35.44 19.75-108.5 11.96-186-19.68-16.34-6.686-35.03 1.156-41.72 17.53s1.188 35.05 17.53 41.71c31.75 12.93 95.69 35.37 157.6 35.37 29.62 0 58.81-5.156 83.72-18.96 30.81-17.09 50.44-45.46 56.72-82.11 3.998-23.27 2.168-42.58-3.488-59.05H332.2zm155.8-80-176.5-.03c-15.85-5.614-31.83-10.34-46.7-14.62-85.47-24.62-110.9-39.05-103.7-81.33 2.5-14.53 10.16-25.96 22.72-34.03 20.47-13.15 64.06-23.84 155.4.343 17.09 4.53 34.59-5.654 39.13-22.74 4.531-17.09-5.656-34.59-22.75-39.12-91.31-24.18-160.7-21.62-206.3 7.654C121.8 73.72 103.6 101.1 98.09 133.1c-8.83 51.4 9.81 84.2 39.11 106.8H24c-13.25 0-24 10.75-24 23.1 0 13.25 10.75 23.1 24 23.1h464c13.25 0 24-10.75 24-23.1 0-12.3-10.7-23.1-24-23.1z'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .link:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 640 512'%3E%3Cpath d='M598.6 41.41C570.1 13.8 534.8 0 498.6 0s-72.36 13.8-99.96 41.41l-43.36 43.36c15.11 8.012 29.47 17.58 41.91 30.02 3.146 3.146 5.898 6.518 8.742 9.838l37.96-37.96C458.5 72.05 477.1 64 498.6 64c20.67 0 40.1 8.047 54.71 22.66 14.61 14.61 22.66 34.04 22.66 54.71s-8.049 40.1-22.66 54.71l-133.3 133.3C405.5 343.1 386 352 365.4 352s-40.1-8.048-54.71-22.66C296 314.7 287.1 295.3 287.1 274.6s8.047-40.1 22.66-54.71l4.44-3.49c-2.1-3.9-4.3-7.9-7.5-11.1-8.6-8.6-19.9-13.3-32.1-13.3-11.93 0-23.1 4.664-31.61 12.97-30.71 53.96-23.63 123.6 22.39 169.6C293 402.2 329.2 416 365.4 416c36.18 0 72.36-13.8 99.96-41.41L598.6 241.3c28.45-28.45 42.24-66.01 41.37-103.3-.87-35.9-14.57-69.84-41.37-96.59zM234 387.4l-37.9 37.9C181.5 439.1 162 448 141.4 448c-20.67 0-40.1-8.047-54.71-22.66-14.61-14.61-22.66-34.04-22.66-54.71s8.049-40.1 22.66-54.71l133.3-133.3C234.5 168 253.1 160 274.6 160s40.1 8.048 54.71 22.66c14.62 14.61 22.66 34.04 22.66 54.71s-8.047 40.1-22.66 54.71l-3.51 3.52c2.094 3.939 4.219 7.895 7.465 11.15C341.9 315.3 353.3 320 365.4 320c11.93 0 23.1-4.664 31.61-12.97 30.71-53.96 23.63-123.6-22.39-169.6C346.1 109.8 310.8 96 274.6 96c-36.2 0-72.3 13.8-99.9 41.4L41.41 270.7C13.81 298.3 0 334.48 0 370.66c0 36.18 13.8 72.36 41.41 99.97C69.01 498.2 105.2 512 141.4 512c36.18 0 72.36-13.8 99.96-41.41l43.36-43.36c-15.11-8.012-29.47-17.58-41.91-30.02-3.21-3.11-5.91-6.51-8.81-9.81z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 640 512'%3E%3Cpath d='M598.6 41.41C570.1 13.8 534.8 0 498.6 0s-72.36 13.8-99.96 41.41l-43.36 43.36c15.11 8.012 29.47 17.58 41.91 30.02 3.146 3.146 5.898 6.518 8.742 9.838l37.96-37.96C458.5 72.05 477.1 64 498.6 64c20.67 0 40.1 8.047 54.71 22.66 14.61 14.61 22.66 34.04 22.66 54.71s-8.049 40.1-22.66 54.71l-133.3 133.3C405.5 343.1 386 352 365.4 352s-40.1-8.048-54.71-22.66C296 314.7 287.1 295.3 287.1 274.6s8.047-40.1 22.66-54.71l4.44-3.49c-2.1-3.9-4.3-7.9-7.5-11.1-8.6-8.6-19.9-13.3-32.1-13.3-11.93 0-23.1 4.664-31.61 12.97-30.71 53.96-23.63 123.6 22.39 169.6C293 402.2 329.2 416 365.4 416c36.18 0 72.36-13.8 99.96-41.41L598.6 241.3c28.45-28.45 42.24-66.01 41.37-103.3-.87-35.9-14.57-69.84-41.37-96.59zM234 387.4l-37.9 37.9C181.5 439.1 162 448 141.4 448c-20.67 0-40.1-8.047-54.71-22.66-14.61-14.61-22.66-34.04-22.66-54.71s8.049-40.1 22.66-54.71l133.3-133.3C234.5 168 253.1 160 274.6 160s40.1 8.048 54.71 22.66c14.62 14.61 22.66 34.04 22.66 54.71s-8.047 40.1-22.66 54.71l-3.51 3.52c2.094 3.939 4.219 7.895 7.465 11.15C341.9 315.3 353.3 320 365.4 320c11.93 0 23.1-4.664 31.61-12.97 30.71-53.96 23.63-123.6-22.39-169.6C346.1 109.8 310.8 96 274.6 96c-36.2 0-72.3 13.8-99.9 41.4L41.41 270.7C13.81 298.3 0 334.48 0 370.66c0 36.18 13.8 72.36 41.41 99.97C69.01 498.2 105.2 512 141.4 512c36.18 0 72.36-13.8 99.96-41.41l43.36-43.36c-15.11-8.012-29.47-17.58-41.91-30.02-3.21-3.11-5.91-6.51-8.81-9.81z'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .heading:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'%3E%3Cpath d='M0 64c0-17.7 14.3-32 32-32h96c17.7 0 32 14.3 32 32s-14.3 32-32 32h-16v112h224V96h-16c-17.7 0-32-14.3-32-32s14.3-32 32-32h96c17.7 0 32 14.3 32 32s-14.3 32-32 32h-16v320h16c17.7 0 32 14.3 32 32s-14.3 32-32 32h-96c-17.7 0-32-14.3-32-32s14.3-32 32-32h16V272H112v144h16c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32h16V96H32C14.3 96 0 81.7 0 64z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'%3E%3Cpath d='M0 64c0-17.7 14.3-32 32-32h96c17.7 0 32 14.3 32 32s-14.3 32-32 32h-16v112h224V96h-16c-17.7 0-32-14.3-32-32s14.3-32 32-32h96c17.7 0 32 14.3 32 32s-14.3 32-32 32h-16v320h16c17.7 0 32 14.3 32 32s-14.3 32-32 32h-96c-17.7 0-32-14.3-32-32s14.3-32 32-32h16V272H112v144h16c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32h16V96H32C14.3 96 0 81.7 0 64z'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .quote:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'%3E%3Cpath d='M96 224c-11.28 0-21.95 2.3-32 5.9V224c0-35.3 28.7-64 64-64 17.67 0 32-14.33 32-32s-14.3-32-32-32C57.42 96 0 153.4 0 224v96c0 53.02 42.98 96 96 96s96-42.98 96-96-43-96-96-96zm256 0c-11.28 0-21.95 2.305-32 5.879V224c0-35.3 28.7-64 64-64 17.67 0 32-14.33 32-32s-14.33-32-32-32c-70.58 0-128 57.42-128 128v96c0 53.02 42.98 96 96 96s96-42.98 96-96-43-96-96-96z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'%3E%3Cpath d='M96 224c-11.28 0-21.95 2.3-32 5.9V224c0-35.3 28.7-64 64-64 17.67 0 32-14.33 32-32s-14.3-32-32-32C57.42 96 0 153.4 0 224v96c0 53.02 42.98 96 96 96s96-42.98 96-96-43-96-96-96zm256 0c-11.28 0-21.95 2.305-32 5.879V224c0-35.3 28.7-64 64-64 17.67 0 32-14.33 32-32s-14.33-32-32-32c-70.58 0-128 57.42-128 128v96c0 53.02 42.98 96 96 96s96-42.98 96-96-43-96-96-96z'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .code:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 640 512'%3E%3Cpath d='M416 31.94C416 21.75 408.1 0 384.1 0c-13.98 0-26.87 9.072-30.89 23.18l-128 448a31.933 31.933 0 0 0-1.241 8.801C223.1 490.3 232 512 256 512c13.92 0 26.73-9.157 30.75-23.22l128-448c.85-2.97 1.25-5.93 1.25-8.84zM176 143.1c0-18.28-14.95-32-32-32-8.188 0-16.38 3.125-22.62 9.376l-112 112C3.125 239.6 0 247.8 0 255.1s3.125 17.3 9.375 23.5l112 112c6.225 6.3 14.425 8.5 22.625 8.5 17.05 0 32-13.73 32-32 0-8.188-3.125-16.38-9.375-22.63L77.25 255.1l89.38-89.38c6.27-5.42 9.37-13.52 9.37-22.62zm464 112c0-8.188-3.125-16.38-9.375-22.63l-112-112C512.4 115.1 504.2 111.1 496 111.1c-17.05 0-32 13.73-32 32 0 8.188 3.125 16.38 9.375 22.63l89.38 89.38-89.38 89.38C467.1 351.6 464 359.8 464 367.1c0 18.28 14.95 32 32 32 8.188 0 16.38-3.125 22.62-9.376l112-112C636.9 272.4 640 264.2 640 255.1z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 640 512'%3E%3Cpath d='M416 31.94C416 21.75 408.1 0 384.1 0c-13.98 0-26.87 9.072-30.89 23.18l-128 448a31.933 31.933 0 0 0-1.241 8.801C223.1 490.3 232 512 256 512c13.92 0 26.73-9.157 30.75-23.22l128-448c.85-2.97 1.25-5.93 1.25-8.84zM176 143.1c0-18.28-14.95-32-32-32-8.188 0-16.38 3.125-22.62 9.376l-112 112C3.125 239.6 0 247.8 0 255.1s3.125 17.3 9.375 23.5l112 112c6.225 6.3 14.425 8.5 22.625 8.5 17.05 0 32-13.73 32-32 0-8.188-3.125-16.38-9.375-22.63L77.25 255.1l89.38-89.38c6.27-5.42 9.37-13.52 9.37-22.62zm464 112c0-8.188-3.125-16.38-9.375-22.63l-112-112C512.4 115.1 504.2 111.1 496 111.1c-17.05 0-32 13.73-32 32 0 8.188 3.125 16.38 9.375 22.63l89.38 89.38-89.38 89.38C467.1 351.6 464 359.8 464 367.1c0 18.28 14.95 32 32 32 8.188 0 16.38-3.125 22.62-9.376l112-112C636.9 272.4 640 264.2 640 255.1z'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .unordered-list:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M16 96c0-26.51 21.49-48 48-48s48 21.49 48 48c0 26.5-21.49 48-48 48s-48-21.5-48-48zm464-32c17.7 0 32 14.33 32 32 0 17.7-14.3 32-32 32H192c-17.7 0-32-14.3-32-32 0-17.67 14.3-32 32-32h288zm0 160c17.7 0 32 14.3 32 32s-14.3 32-32 32H192c-17.7 0-32-14.3-32-32s14.3-32 32-32h288zm0 160c17.7 0 32 14.3 32 32s-14.3 32-32 32H192c-17.7 0-32-14.3-32-32s14.3-32 32-32h288zM16 416c0-26.5 21.49-48 48-48s48 21.5 48 48-21.49 48-48 48-48-21.5-48-48zm96-160c0 26.5-21.49 48-48 48s-48-21.5-48-48 21.49-48 48-48 48 21.5 48 48z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M16 96c0-26.51 21.49-48 48-48s48 21.49 48 48c0 26.5-21.49 48-48 48s-48-21.5-48-48zm464-32c17.7 0 32 14.33 32 32 0 17.7-14.3 32-32 32H192c-17.7 0-32-14.3-32-32 0-17.67 14.3-32 32-32h288zm0 160c17.7 0 32 14.3 32 32s-14.3 32-32 32H192c-17.7 0-32-14.3-32-32s14.3-32 32-32h288zm0 160c17.7 0 32 14.3 32 32s-14.3 32-32 32H192c-17.7 0-32-14.3-32-32s14.3-32 32-32h288zM16 416c0-26.5 21.49-48 48-48s48 21.5 48 48-21.49 48-48 48-48-21.5-48-48zm96-160c0 26.5-21.49 48-48 48s-48-21.5-48-48 21.49-48 48-48 48 21.5 48 48z'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .ordered-list:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M55.1 56.04c0-13.26 11.64-24 24-24h32c14.2 0 24 10.74 24 24V176h16c14.2 0 24 10.8 24 24 0 13.3-9.8 24-24 24h-80c-12.36 0-24-10.7-24-24 0-13.2 11.64-24 24-24h16V80.04h-8c-12.36 0-24-10.75-24-24zm63.6 285.16c-6.6-7.4-18.3-6.9-24.05 1.2l-11.12 15.5c-7.7 10.8-22.69 13.3-33.48 5.6-10.79-7.7-13.28-22.7-5.58-33.4l11.12-15.6c23.74-33.3 72.31-35.7 99.21-4.9 21.3 23.5 20.8 60.9-1.1 84.7L118.8 432H152c13.3 0 24 10.7 24 24s-10.7 24-24 24H64c-9.53 0-18.16-5.6-21.98-14.4-3.83-8.7-2.12-18.9 4.34-25.9l72.04-78c5.3-5.8 5.4-14.6.3-20.5zM512 64c17.7 0 32 14.33 32 32 0 17.7-14.3 32-32 32H256c-17.7 0-32-14.3-32-32 0-17.67 14.3-32 32-32h256zm0 160c17.7 0 32 14.3 32 32s-14.3 32-32 32H256c-17.7 0-32-14.3-32-32s14.3-32 32-32h256zm0 160c17.7 0 32 14.3 32 32s-14.3 32-32 32H256c-17.7 0-32-14.3-32-32s14.3-32 32-32h256z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M55.1 56.04c0-13.26 11.64-24 24-24h32c14.2 0 24 10.74 24 24V176h16c14.2 0 24 10.8 24 24 0 13.3-9.8 24-24 24h-80c-12.36 0-24-10.7-24-24 0-13.2 11.64-24 24-24h16V80.04h-8c-12.36 0-24-10.75-24-24zm63.6 285.16c-6.6-7.4-18.3-6.9-24.05 1.2l-11.12 15.5c-7.7 10.8-22.69 13.3-33.48 5.6-10.79-7.7-13.28-22.7-5.58-33.4l11.12-15.6c23.74-33.3 72.31-35.7 99.21-4.9 21.3 23.5 20.8 60.9-1.1 84.7L118.8 432H152c13.3 0 24 10.7 24 24s-10.7 24-24 24H64c-9.53 0-18.16-5.6-21.98-14.4-3.83-8.7-2.12-18.9 4.34-25.9l72.04-78c5.3-5.8 5.4-14.6.3-20.5zM512 64c17.7 0 32 14.33 32 32 0 17.7-14.3 32-32 32H256c-17.7 0-32-14.3-32-32 0-17.67 14.3-32 32-32h256zm0 160c17.7 0 32 14.3 32 32s-14.3 32-32 32H256c-17.7 0-32-14.3-32-32s14.3-32 32-32h256zm0 160c17.7 0 32 14.3 32 32s-14.3 32-32 32H256c-17.7 0-32-14.3-32-32s14.3-32 32-32h256z'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .table:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1792 1792'%3E%3Cpath d='M576 1376v-192q0-14-9-23t-23-9H224q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm0-384V800q0-14-9-23t-23-9H224q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm512 384v-192q0-14-9-23t-23-9H736q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zM576 608V416q0-14-9-23t-23-9H224q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm512 384V800q0-14-9-23t-23-9H736q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm512 384v-192q0-14-9-23t-23-9h-320q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm-512-768V416q0-14-9-23t-23-9H736q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm512 384V800q0-14-9-23t-23-9h-320q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm0-384V416q0-14-9-23t-23-9h-320q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm128-320v1088q0 66-47 113t-113 47H224q-66 0-113-47t-47-113V288q0-66 47-113t113-47h1344q66 0 113 47t47 113z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1792 1792'%3E%3Cpath d='M576 1376v-192q0-14-9-23t-23-9H224q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm0-384V800q0-14-9-23t-23-9H224q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm512 384v-192q0-14-9-23t-23-9H736q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zM576 608V416q0-14-9-23t-23-9H224q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm512 384V800q0-14-9-23t-23-9H736q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm512 384v-192q0-14-9-23t-23-9h-320q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm-512-768V416q0-14-9-23t-23-9H736q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm512 384V800q0-14-9-23t-23-9h-320q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm0-384V416q0-14-9-23t-23-9h-320q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm128-320v1088q0 66-47 113t-113 47H224q-66 0-113-47t-47-113V288q0-66 47-113t113-47h1344q66 0 113 47t47 113z'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .upload-image:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M447.1 32h-484C28.64 32-.01 60.65-.01 96v320c0 35.35 28.65 64 63.1 64h384c35.35 0 64-28.65 64-64V96c.01-35.35-27.79-64-63.99-64zm-336 64c26.51 0 48 21.49 48 48s-20.6 48-48 48-48-21.49-48-48 22.38-48 48-48zm335 311.6c-2.8 5.2-8.2 8.4-14.1 8.4H82.01a15.993 15.993 0 0 1-14.26-8.75 16 16 0 0 1 1.334-16.68l70-96C142.1 290.4 146.9 288 152 288s9.916 2.441 12.93 6.574l32.46 44.51 93.3-139.1C293.7 194.7 298.7 192 304 192s10.35 2.672 13.31 7.125l128 192c3.29 4.875 3.59 11.175.79 16.475z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M447.1 32h-484C28.64 32-.01 60.65-.01 96v320c0 35.35 28.65 64 63.1 64h384c35.35 0 64-28.65 64-64V96c.01-35.35-27.79-64-63.99-64zm-336 64c26.51 0 48 21.49 48 48s-20.6 48-48 48-48-21.49-48-48 22.38-48 48-48zm335 311.6c-2.8 5.2-8.2 8.4-14.1 8.4H82.01a15.993 15.993 0 0 1-14.26-8.75 16 16 0 0 1 1.334-16.68l70-96C142.1 290.4 146.9 288 152 288s9.916 2.441 12.93 6.574l32.46 44.51 93.3-139.1C293.7 194.7 298.7 192 304 192s10.35 2.672 13.31 7.125l128 192c3.29 4.875 3.59 11.175.79 16.475z'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .undo:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M480 256c0 123.4-100.5 223.9-223.9 223.9-48.84 0-95.17-15.58-134.2-44.86-14.12-10.59-16.97-30.66-6.375-44.81 10.59-14.12 30.62-16.94 44.81-6.375 27.84 20.91 61 31.94 95.88 31.94C344.3 415.8 416 344.1 416 256S344.31 96.2 256.2 96.2c-37.46 0-73.09 13.49-101.3 36.64l45.12 45.14c17.01 17.02 4.955 46.1-19.1 46.1H35.17C24.58 224.1 16 215.5 16 204.9V59.04C16 35 45.07 22.96 62.07 39.97l47.6 47.63C149.9 52.71 201.5 32.11 256.1 32.11 379.5 32.11 480 132.6 480 256z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M480 256c0 123.4-100.5 223.9-223.9 223.9-48.84 0-95.17-15.58-134.2-44.86-14.12-10.59-16.97-30.66-6.375-44.81 10.59-14.12 30.62-16.94 44.81-6.375 27.84 20.91 61 31.94 95.88 31.94C344.3 415.8 416 344.1 416 256S344.31 96.2 256.2 96.2c-37.46 0-73.09 13.49-101.3 36.64l45.12 45.14c17.01 17.02 4.955 46.1-19.1 46.1H35.17C24.58 224.1 16 215.5 16 204.9V59.04C16 35 45.07 22.96 62.07 39.97l47.6 47.63C149.9 52.71 201.5 32.11 256.1 32.11 379.5 32.11 480 132.6 480 256z'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .redo:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M468.9 32.11c13.87 0 27.18 10.77 27.18 27.04v145.9c0 10.59-8.584 19.17-19.17 19.17h-145.7c-16.28 0-27.06-13.32-27.06-27.2 0-6.634 2.461-13.4 7.96-18.9l45.12-45.14c-28.22-23.14-63.85-36.64-101.3-36.64-88.09 0-159.8 71.69-159.8 159.8S167.8 415.9 255.9 415.9c73.14 0 89.44-38.31 115.1-38.31 18.48 0 31.97 15.04 31.97 31.96 0 35.04-81.59 70.41-147 70.41-123.4 0-223.9-100.5-223.9-223.9S132.6 32.44 256 32.44c54.6 0 106.2 20.39 146.4 55.26L450 40.07c5.5-5.5 12.3-7.96 18.9-7.96z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M468.9 32.11c13.87 0 27.18 10.77 27.18 27.04v145.9c0 10.59-8.584 19.17-19.17 19.17h-145.7c-16.28 0-27.06-13.32-27.06-27.2 0-6.634 2.461-13.4 7.96-18.9l45.12-45.14c-28.22-23.14-63.85-36.64-101.3-36.64-88.09 0-159.8 71.69-159.8 159.8S167.8 415.9 255.9 415.9c73.14 0 89.44-38.31 115.1-38.31 18.48 0 31.97 15.04 31.97 31.96 0 35.04-81.59 70.41-147 70.41-123.4 0-223.9-100.5-223.9-223.9S132.6 32.44 256 32.44c54.6 0 106.2 20.39 146.4 55.26L450 40.07c5.5-5.5 12.3-7.96 18.9-7.96z'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-statusbar{display:none}.fi-fo-rich-editor trix-toolbar .trix-dialogs{position:relative}.fi-fo-rich-editor trix-toolbar .trix-dialog{--tw-bg-opacity:1;--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);background-color:rgba(var(--gray-50),var(--tw-bg-opacity));border-radius:.5rem;bottom:auto;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);left:0;padding:.5rem;position:absolute;right:0;top:1rem}.fi-fo-rich-editor trix-toolbar .trix-dialog:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-800),var(--tw-bg-opacity))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields{display:flex;flex-direction:column;gap:.5rem;width:100%}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-button-group{display:flex;gap:.5rem}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgba(var(--gray-950),0.1);background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.375rem;border-style:none;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgba(var(--gray-950),var(--tw-text-opacity));display:block;font-size:.875rem;line-height:1.25rem;outline:2px solid transparent;outline-offset:2px;padding-bottom:.375rem;padding-inline-end:.75rem;padding-top:.375rem;padding-inline-start:.75rem;transition-duration:75ms;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);width:100%}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input::-moz-placeholder{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input::placeholder{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input:focus-within{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-600),var(--tw-ring-opacity))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input:is(.dark *){--tw-bg-opacity:1;--tw-text-opacity:1;--tw-ring-color:hsla(0,0%,100%,.2);background-color:rgba(var(--gray-700),var(--tw-bg-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input:is(.dark *)::-moz-placeholder{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input:is(.dark *)::placeholder{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input:focus-within:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-600),var(--tw-ring-opacity))}@media (min-width:640px){.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input{font-size:.875rem;line-height:1.5rem}}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-button-group .trix-button{--tw-bg-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgba(var(--gray-200),var(--tw-ring-opacity));background-color:rgba(var(--gray-50),var(--tw-bg-opacity));border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);font-size:.75rem;line-height:1rem;padding:.125rem .5rem}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-button-group .trix-button:is(.dark *){--tw-bg-opacity:1;--tw-ring-opacity:1;--tw-ring-color:rgba(var(--gray-600),var(--tw-ring-opacity));background-color:rgba(var(--gray-700),var(--tw-bg-opacity))}.fi-fo-rich-editor trix-editor:empty:before{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.fi-fo-rich-editor trix-editor:empty:is(.dark *):before{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.fi-fo-rich-editor trix-editor:empty:before{content:attr(placeholder)}.fi-fo-rich-editor trix-editor.prose :where(ol):not(:where([class~=not-prose] *)),.fi-fo-rich-editor trix-editor.prose :where(ul):not(:where([class~=not-prose] *)){padding-inline-end:0!important;padding-inline-start:1.625em!important}.fi-fo-rich-editor trix-editor.prose :where(ul>li):not(:where([class~=not-prose] *)){padding-inline-end:0!important;padding-inline-start:.375em!important}select:not(.choices){background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E")}[dir=rtl] select{background-position:left .5rem center!important}.choices{outline:2px solid transparent;outline-offset:2px;position:relative}.choices [hidden]{display:none!important}.choices[data-type*=select-one] .has-no-choices{display:none}.choices[data-type*=select-one] .choices__input{display:block;margin:0;width:100%}.choices__inner{background-repeat:no-repeat;outline:2px solid transparent;outline-offset:2px;padding-bottom:.375rem;padding-inline-end:2rem;padding-top:.375rem;padding-inline-start:.75rem}@media (min-width:640px){.choices__inner{font-size:.875rem;line-height:1.5rem}}.choices__inner{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E");background-position:right .5rem center;background-size:1.5em 1.5em}.choices.is-disabled .choices__inner{cursor:default}[dir=rtl] .choices__inner{background-position:left .5rem center}.choices__list--single{display:inline-block}.choices__list--single .choices__item{--tw-text-opacity:1;color:rgba(var(--gray-950),var(--tw-text-opacity))}.choices__list--single .choices__item:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.choices.is-disabled .choices__list--single .choices__item{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.choices.is-disabled .choices__list--single .choices__item:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.choices__list--multiple{display:flex;flex-wrap:wrap;gap:.375rem}.choices__list--multiple:not(:empty){margin-bottom:.25rem;margin-left:-.25rem;margin-right:-.25rem;padding-bottom:.125rem;padding-top:.125rem}.choices__list--multiple .choices__item{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-inset:inset;--tw-ring-color:rgba(var(--primary-600),0.1);align-items:center;background-color:rgba(var(--primary-50),var(--tw-bg-opacity));border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgba(var(--primary-600),var(--tw-text-opacity));display:inline-flex;font-size:.75rem;font-weight:500;gap:.25rem;line-height:1rem;padding:.25rem .5rem;word-break:break-all}.choices__list--multiple .choices__item:is(.dark *){--tw-text-opacity:1;--tw-ring-color:rgba(var(--primary-400),0.3);background-color:rgba(var(--primary-400),.1);color:rgba(var(--primary-400),var(--tw-text-opacity))}.choices__list--dropdown,.choices__list[aria-expanded]{--tw-bg-opacity:1;--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgba(var(--gray-950),0.05);background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.5rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);display:none;font-size:.875rem;line-height:1.25rem;margin-top:.5rem;overflow:hidden;overflow-wrap:break-word;position:absolute;top:100%;width:100%;will-change:visibility;z-index:10}.choices__list--dropdown:is(.dark *),.choices__list[aria-expanded]:is(.dark *){--tw-bg-opacity:1;--tw-ring-color:hsla(0,0%,100%,.1);background-color:rgba(var(--gray-900),var(--tw-bg-opacity))}.is-active.choices__list--dropdown,.is-active.choices__list[aria-expanded]{display:block;padding:.25rem}.choices__list--dropdown .choices__list,.choices__list[aria-expanded] .choices__list{max-height:15rem;overflow:auto;will-change:scroll-position}.choices__item--choice{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity));padding:.5rem;transition-duration:75ms;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.choices__item--choice:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.choices__item--choice.choices__item--selectable{--tw-text-opacity:1;border-radius:.375rem;color:rgba(var(--gray-950),var(--tw-text-opacity))}.choices__item--choice.choices__item--selectable:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.choices__list--dropdown .choices__item--selectable.is-highlighted,.choices__list[aria-expanded] .choices__item--selectable.is-highlighted{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.choices__list--dropdown .choices__item--selectable.is-highlighted:is(.dark *),.choices__list[aria-expanded] .choices__item--selectable.is-highlighted:is(.dark *){background-color:hsla(0,0%,100%,.05)}.choices__item{cursor:default}.choices__item--disabled{pointer-events:none}.choices__item--disabled:disabled{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.choices__item--disabled:disabled:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.choices.is-disabled .choices__placeholder.choices__item,.choices__placeholder.choices__item{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity));cursor:default}.choices.is-disabled .choices__placeholder.choices__item:is(.dark *),.choices__placeholder.choices__item:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.choices__button{background-color:transparent;background-position:50%;background-repeat:no-repeat;border-width:0;outline:2px solid transparent;outline-offset:2px;text-indent:-9999px}.choices[data-type*=select-one] .choices__button{height:1rem;inset-inline-end:0;margin-inline-end:2.25rem;opacity:.5;padding:0;position:absolute;transition-duration:75ms;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);width:1rem}.choices[data-type*=select-one] .choices__button:is(.dark *){opacity:.4}.choices[data-type*=select-one] .choices__button{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJtMi41OTIuMDQ0IDE4LjM2NCAxOC4zNjQtMi41NDggMi41NDhMLjA0NCAyLjU5MnoiLz48cGF0aCBkPSJNMCAxOC4zNjQgMTguMzY0IDBsMi41NDggMi41NDhMMi41NDggMjAuOTEyeiIvPjwvZz48L3N2Zz4=);background-size:.7142em .7142em;top:calc(50% - .5714em)}.dark .choices[data-type*=select-one] .choices__button{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJtMi41OTIuMDQ0IDE4LjM2NCAxOC4zNjQtMi41NDggMi41NDhMLjA0NCAyLjU5MnoiLz48cGF0aCBkPSJNMCAxOC4zNjQgMTguMzY0IDBsMi41NDggMi41NDhMMi41NDggMjAuOTEyeiIvPjwvZz48L3N2Zz4=)}.choices[data-type*=select-multiple] .choices__button{height:1rem;opacity:.5;width:1rem}.choices[data-type*=select-multiple] .choices__button:is(.dark *){opacity:.4}.choices[data-type*=select-multiple] .choices__button{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJtMi41OTIuMDQ0IDE4LjM2NCAxOC4zNjQtMi41NDggMi41NDhMLjA0NCAyLjU5MnoiLz48cGF0aCBkPSJNMCAxOC4zNjQgMTguMzY0IDBsMi41NDggMi41NDhMMi41NDggMjAuOTEyeiIvPjwvZz48L3N2Zz4=);background-size:.7142em .7142em}.dark .choices[data-type*=select-multiple] .choices__button{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJtMi41OTIuMDQ0IDE4LjM2NCAxOC4zNjQtMi41NDggMi41NDhMLjA0NCAyLjU5MnoiLz48cGF0aCBkPSJNMCAxOC4zNjQgMTguMzY0IDBsMi41NDggMi41NDhMMi41NDggMjAuOTEyeiIvPjwvZz48L3N2Zz4=)}.choices[data-type*=select-multiple] .choices__button:focus-visible,.choices[data-type*=select-multiple] .choices__button:hover,.choices[data-type*=select-one] .choices__button:focus-visible,.choices[data-type*=select-one] .choices__button:hover{opacity:.7}.choices[data-type*=select-multiple] .choices__button:focus-visible:is(.dark *),.choices[data-type*=select-multiple] .choices__button:hover:is(.dark *),.choices[data-type*=select-one] .choices__button:focus-visible:is(.dark *),.choices[data-type*=select-one] .choices__button:hover:is(.dark *){opacity:.6}.choices.is-disabled .choices__button,.choices[data-type*=select-one] .choices__item[data-value=""] .choices__button{display:none}.choices__input{--tw-text-opacity:1;background-color:transparent!important;border-style:none;color:rgba(var(--gray-950),var(--tw-text-opacity));font-size:1rem!important;line-height:1.5rem!important;padding:0!important;transition-duration:75ms;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.choices__input::-moz-placeholder{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.choices__input::placeholder{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.choices__input:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)!important;--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)!important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)!important}.choices__input:disabled{--tw-text-opacity:1;-webkit-text-fill-color:rgba(var(--gray-500),1);color:rgba(var(--gray-500),var(--tw-text-opacity))}.choices__input:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.choices__input:is(.dark *)::-moz-placeholder{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.choices__input:is(.dark *)::placeholder{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.choices__input:disabled:is(.dark *){--tw-text-opacity:1;-webkit-text-fill-color:rgba(var(--gray-400),1);color:rgba(var(--gray-400),var(--tw-text-opacity))}@media (min-width:640px){.choices__input{font-size:.875rem!important;line-height:1.5rem}}.choices__list--dropdown .choices__input{padding:.5rem!important}.choices__input::-webkit-search-cancel-button,.choices__input::-webkit-search-decoration,.choices__input::-webkit-search-results-button,.choices__input::-webkit-search-results-decoration{display:none}.choices__input::-ms-clear,.choices__input::-ms-reveal{display:none;height:0;width:0}.choices__group{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity));padding:1rem .5rem .5rem}.choices__group:first-child{padding-top:.5rem}.choices__group:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.webkit-calendar-picker-indicator\:opacity-0::-webkit-calendar-picker-indicator{opacity:0}/*! Bundled license information: + +cropperjs/dist/cropper.min.css: + (*! + * Cropper.js v1.6.2 + * https://fengyuanchen.github.io/cropperjs + * + * Copyright 2015-present Chen Fengyuan + * Released under the MIT license + * + * Date: 2024-04-21T07:43:02.731Z + *) + +filepond/dist/filepond.min.css: + (*! + * FilePond 4.31.1 + * Licensed under MIT, https://opensource.org/licenses/MIT/ + * Please visit https://pqina.nl/filepond/ for details. + *) + +filepond-plugin-image-edit/dist/filepond-plugin-image-edit.css: + (*! + * FilePondPluginImageEdit 1.6.3 + * Licensed under MIT, https://opensource.org/licenses/MIT/ + * Please visit https://pqina.nl/filepond/ for details. + *) + +filepond-plugin-image-preview/dist/filepond-plugin-image-preview.css: + (*! + * FilePondPluginImagePreview 4.6.12 + * Licensed under MIT, https://opensource.org/licenses/MIT/ + * Please visit https://pqina.nl/filepond/ for details. + *) + +filepond-plugin-media-preview/dist/filepond-plugin-media-preview.css: + (*! + * FilePondPluginmediaPreview 1.0.11 + * Licensed under MIT, https://opensource.org/licenses/MIT/ + * Please visit undefined for details. + *) + +easymde/dist/easymde.min.css: + (** + * easymde v2.18.0 + * Copyright Jeroen Akkerman + * @link https://github.com/ionaru/easy-markdown-editor + * @license MIT + *) +*/ diff --git a/public/css/filament/support/support.css b/public/css/filament/support/support.css new file mode 100644 index 0000000..ffd86f9 --- /dev/null +++ b/public/css/filament/support/support.css @@ -0,0 +1 @@ +.fi-pagination-items,.fi-pagination-overview,.fi-pagination-records-per-page-select:not(.fi-compact){display:none}@supports (container-type:inline-size){.fi-pagination{container-type:inline-size}@container (min-width: 28rem){.fi-pagination-records-per-page-select.fi-compact{display:none}.fi-pagination-records-per-page-select:not(.fi-compact){display:inline}}@container (min-width: 56rem){.fi-pagination:not(.fi-simple)>.fi-pagination-previous-btn{display:none}.fi-pagination-overview{display:inline}.fi-pagination:not(.fi-simple)>.fi-pagination-next-btn{display:none}.fi-pagination-items{display:flex}}}@supports not (container-type:inline-size){@media (min-width:640px){.fi-pagination-records-per-page-select.fi-compact{display:none}.fi-pagination-records-per-page-select:not(.fi-compact){display:inline}}@media (min-width:768px){.fi-pagination:not(.fi-simple)>.fi-pagination-previous-btn{display:none}.fi-pagination-overview{display:inline}.fi-pagination:not(.fi-simple)>.fi-pagination-next-btn{display:none}.fi-pagination-items{display:flex}}}.tippy-box[data-animation=fade][data-state=hidden]{opacity:0}[data-tippy-root]{max-width:calc(100vw - 10px)}.tippy-box{background-color:#333;border-radius:4px;color:#fff;font-size:14px;line-height:1.4;outline:0;position:relative;transition-property:transform,visibility,opacity;white-space:normal}.tippy-box[data-placement^=top]>.tippy-arrow{bottom:0}.tippy-box[data-placement^=top]>.tippy-arrow:before{border-top-color:initial;border-width:8px 8px 0;bottom:-7px;left:0;transform-origin:center top}.tippy-box[data-placement^=bottom]>.tippy-arrow{top:0}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{border-bottom-color:initial;border-width:0 8px 8px;left:0;top:-7px;transform-origin:center bottom}.tippy-box[data-placement^=left]>.tippy-arrow{right:0}.tippy-box[data-placement^=left]>.tippy-arrow:before{border-left-color:initial;border-width:8px 0 8px 8px;right:-7px;transform-origin:center left}.tippy-box[data-placement^=right]>.tippy-arrow{left:0}.tippy-box[data-placement^=right]>.tippy-arrow:before{border-right-color:initial;border-width:8px 8px 8px 0;left:-7px;transform-origin:center right}.tippy-box[data-inertia][data-state=visible]{transition-timing-function:cubic-bezier(.54,1.5,.38,1.11)}.tippy-arrow{color:#333;height:16px;width:16px}.tippy-arrow:before{border-color:transparent;border-style:solid;content:"";position:absolute}.tippy-content{padding:5px 9px;position:relative;z-index:1}.tippy-box[data-theme~=light]{background-color:#fff;box-shadow:0 0 20px 4px #9aa1b126,0 4px 80px -8px #24282f40,0 4px 4px -2px #5b5e6926;color:#26323d}.tippy-box[data-theme~=light][data-placement^=top]>.tippy-arrow:before{border-top-color:#fff}.tippy-box[data-theme~=light][data-placement^=bottom]>.tippy-arrow:before{border-bottom-color:#fff}.tippy-box[data-theme~=light][data-placement^=left]>.tippy-arrow:before{border-left-color:#fff}.tippy-box[data-theme~=light][data-placement^=right]>.tippy-arrow:before{border-right-color:#fff}.tippy-box[data-theme~=light]>.tippy-backdrop{background-color:#fff}.tippy-box[data-theme~=light]>.tippy-svg-arrow{fill:#fff}.fi-sortable-ghost{opacity:.3} diff --git a/public/css/saade/filament-fullcalendar/filament-fullcalendar-styles.css b/public/css/saade/filament-fullcalendar/filament-fullcalendar-styles.css new file mode 100644 index 0000000..a4cad56 --- /dev/null +++ b/public/css/saade/filament-fullcalendar/filament-fullcalendar-styles.css @@ -0,0 +1 @@ +.resize{resize:both}.filament-fullcalendar{--fc-small-font-size:0.85em;--fc-page-bg-color:#d0d0d04d;--fc-neutral-bg-color:rgba(var(--gray-50),var(--tw-bg-opacity));--fc-neutral-text-color:grey;--fc-border-color:rgba(var(--gray-200));--fc-button-text-color:#fff;--fc-button-bg-color:rgba(var(--primary-600));--fc-button-border-color:rgba(var(--primary-600));--fc-button-hover-bg-color:rgba(var(--primary-500));--fc-button-hover-border-color:rgba(var(--primary-500));--fc-button-active-bg-color:rgba(var(--primary-500));--fc-button-active-border-color:rgba(var(--primary-500));--fc-event-bg-color:rgba(var(--primary-600));--fc-event-border-color:rgba(var(--primary-600));--fc-event-text-color:#fff;--fc-event-selected-overlay-color:#00000040;--fc-more-link-bg-color:#d0d0d0;--fc-more-link-text-color:inherit;--fc-event-resizer-thickness:8px;--fc-event-resizer-dot-total-width:8px;--fc-event-resizer-dot-border-width:1px;--fc-non-business-color:#d7d7d74d;--fc-bg-event-color:#8fdf82;--fc-bg-event-opacity:0.3;--fc-highlight-color:rgba(var(--primary-500),0.1);--fc-today-bg-color:rgba(var(--primary-500),0.2);--fc-now-indicator-color:red;--fc-list-event-hover-bg-color:rgba(var(--gray-50),var(--tw-bg-opacity))}html.dark .filament-fullcalendar{--fc-neutral-bg-color:rgba(var(--gray-800),.8);--fc-border-color:rgba(var(--gray-700),.5);--fc-button-bg-color:rgba(var(--primary-500));--fc-button-border-color:rgba(var(--primary-600));--fc-button-hover-bg-color:rgba(var(--primary-400));--fc-button-hover-border-color:rgba(var(--primary-500));--fc-button-active-bg-color:rgba(var(--primary-400));--fc-button-active-border-color:rgba(var(--primary-500));--fc-event-bg-color:rgba(var(--primary-500));--fc-event-border-color:rgba(var(--primary-600));--fc-list-event-hover-bg-color:rgba(var(--gray-800),.8)}.filament-fullcalendar .fc-toolbar-chunk>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.filament-fullcalendar .fc-toolbar-title{font-size:1.125rem!important;line-height:1.25rem}@media (min-width:768px){.filament-fullcalendar .fc-toolbar-title{font-size:1.875rem!important;line-height:2.25rem!important}}.filament-fullcalendar.fc .fc-button{min-height:2.25rem;border-radius:.5rem;padding:.25rem 6px;font-size:.875rem;line-height:1.25rem;font-weight:500;--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);outline:2px solid #0000;outline-offset:2px;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}@media (min-width:768px){.filament-fullcalendar.fc .fc-button{padding-left:1rem;padding-right:1rem}}.filament-fullcalendar.fc .fc-button-primary:disabled{opacity:.7}.filament-fullcalendar.fc .fc-button-primary:not(:disabled).fc-button-active,.filament-fullcalendar.fc .fc-button-primary:not(:disabled):active{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.filament-fullcalendar .fc-list,.filament-fullcalendar .fc-view table,.filament-fullcalendar .fc-view:not(.fc-list) table th{border-top-left-radius:.75rem;border-top-right-radius:.75rem}.filament-fullcalendar .fc-list{overflow:hidden}.filament-fullcalendar .fc-list .fc-list-event-title a{cursor:pointer}.filament-fullcalendar .fc-list-sticky .fc-list-day th{background-color:inherit} diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..e69de29 diff --git a/public/index.php b/public/index.php new file mode 100644 index 0000000..480061b --- /dev/null +++ b/public/index.php @@ -0,0 +1,14 @@ +handleRequest(Request::capture()); diff --git a/public/js/coolsam/flatpickr/components/flatpickr-component.js b/public/js/coolsam/flatpickr/components/flatpickr-component.js new file mode 100644 index 0000000..1ca0d39 --- /dev/null +++ b/public/js/coolsam/flatpickr/components/flatpickr-component.js @@ -0,0 +1,2212 @@ +var De = ["onChange", "onClose", "onDayCreate", "onDestroy", "onKeyDown", "onMonthChange", "onOpen", "onParseConfig", "onReady", "onValueUpdate", "onYearChange", "onPreCalendarPosition"] + , z = { + _disable: [], + allowInput: !1, + allowInvalidPreload: !1, + altFormat: "F j, Y", + altInput: !1, + altInputClass: "form-control input", + animate: typeof window == "object" && window.navigator.userAgent.indexOf("MSIE") === -1, + ariaDateFormat: "F j, Y", + autoFillDefaultTime: !0, + clickOpens: !0, + closeOnSelect: !0, + conjunction: ", ", + dateFormat: "Y-m-d", + defaultHour: 12, + defaultMinute: 0, + defaultSeconds: 0, + disable: [], + disableMobile: !1, + enableSeconds: !1, + enableTime: !1, + errorHandler: function(a) { + return typeof console < "u" && console.warn(a) + }, + getWeek: function(a) { + var r = new Date(a.getTime()); + r.setHours(0, 0, 0, 0), + r.setDate(r.getDate() + 3 - (r.getDay() + 6) % 7); + var e = new Date(r.getFullYear(),0,4); + return 1 + Math.round(((r.getTime() - e.getTime()) / 864e5 - 3 + (e.getDay() + 6) % 7) / 7) + }, + hourIncrement: 1, + ignoredFocusElements: [], + inline: !1, + locale: "default", + minuteIncrement: 5, + mode: "single", + monthSelectorType: "dropdown", + nextArrow: "", + noCalendar: !1, + now: new Date, + onChange: [], + onClose: [], + onDayCreate: [], + onDestroy: [], + onKeyDown: [], + onMonthChange: [], + onOpen: [], + onParseConfig: [], + onReady: [], + onValueUpdate: [], + onYearChange: [], + onPreCalendarPosition: [], + plugins: [], + position: "auto", + positionElement: void 0, + prevArrow: "", + shorthandCurrentMonth: !1, + showMonths: 1, + static: !1, + time_24hr: !1, + weekNumbers: !1, + wrap: !1 +}; +var be = { + weekdays: { + shorthand: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], + longhand: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] + }, + months: { + shorthand: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], + longhand: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"] + }, + daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], + firstDayOfWeek: 0, + ordinal: function(a) { + var r = a % 100; + if (r > 3 && r < 21) + return "th"; + switch (r % 10) { + case 1: + return "st"; + case 2: + return "nd"; + case 3: + return "rd"; + default: + return "th" + } + }, + rangeSeparator: " to ", + weekAbbreviation: "Wk", + scrollTitle: "Scroll to increment", + toggleTitle: "Click to toggle", + amPM: ["AM", "PM"], + yearAriaLabel: "Year", + monthAriaLabel: "Month", + hourAriaLabel: "Hour", + minuteAriaLabel: "Minute", + time_24hr: !1 +} + , Ce = be; +var O = function(a, r) { + return r === void 0 && (r = 2), + ("000" + a).slice(r * -1) +} + , H = function(a) { + return a === !0 ? 1 : 0 +}; +function Ye(a, r) { + var e; + return function() { + var c = this + , u = arguments; + clearTimeout(e), + e = setTimeout(function() { + return a.apply(c, u) + }, r) + } +} +var Me = function(a) { + return a instanceof Array ? a : [a] +}; +function Y(a, r, e) { + if (e === !0) + return a.classList.add(r); + a.classList.remove(r) +} +function y(a, r, e) { + var c = window.document.createElement(a); + return r = r || "", + e = e || "", + c.className = r, + e !== void 0 && (c.textContent = e), + c +} +function le(a) { + for (; a.firstChild; ) + a.removeChild(a.firstChild) +} +function Ae(a, r) { + if (r(a)) + return a; + if (a.parentNode) + return Ae(a.parentNode, r) +} +function se(a, r) { + var e = y("div", "numInputWrapper") + , c = y("input", "numInput " + a) + , u = y("span", "arrowUp") + , h = y("span", "arrowDown"); + if (navigator.userAgent.indexOf("MSIE 9.0") === -1 ? c.type = "number" : (c.type = "text", + c.pattern = "\\d*"), + r !== void 0) + for (var D in r) + c.setAttribute(D, r[D]); + return e.appendChild(c), + e.appendChild(u), + e.appendChild(h), + e +} +function L(a) { + try { + if (typeof a.composedPath == "function") { + var r = a.composedPath(); + return r[0] + } + return a.target + } catch { + return a.target + } +} +var Ne = function() {} + , ue = function(a, r, e) { + return e.months[r ? "shorthand" : "longhand"][a] +} + , Ge = { + D: Ne, + F: function(a, r, e) { + a.setMonth(e.months.longhand.indexOf(r)) + }, + G: function(a, r) { + a.setHours((a.getHours() >= 12 ? 12 : 0) + parseFloat(r)) + }, + H: function(a, r) { + a.setHours(parseFloat(r)) + }, + J: function(a, r) { + a.setDate(parseFloat(r)) + }, + K: function(a, r, e) { + a.setHours(a.getHours() % 12 + 12 * H(new RegExp(e.amPM[1],"i").test(r))) + }, + M: function(a, r, e) { + a.setMonth(e.months.shorthand.indexOf(r)) + }, + S: function(a, r) { + a.setSeconds(parseFloat(r)) + }, + U: function(a, r) { + return new Date(parseFloat(r) * 1e3) + }, + W: function(a, r, e) { + var c = parseInt(r) + , u = new Date(a.getFullYear(),0,2 + (c - 1) * 7,0,0,0,0); + return u.setDate(u.getDate() - u.getDay() + e.firstDayOfWeek), + u + }, + Y: function(a, r) { + a.setFullYear(parseFloat(r)) + }, + Z: function(a, r) { + return new Date(r) + }, + d: function(a, r) { + a.setDate(parseFloat(r)) + }, + h: function(a, r) { + a.setHours((a.getHours() >= 12 ? 12 : 0) + parseFloat(r)) + }, + i: function(a, r) { + a.setMinutes(parseFloat(r)) + }, + j: function(a, r) { + a.setDate(parseFloat(r)) + }, + l: Ne, + m: function(a, r) { + a.setMonth(parseFloat(r) - 1) + }, + n: function(a, r) { + a.setMonth(parseFloat(r) - 1) + }, + s: function(a, r) { + a.setSeconds(parseFloat(r)) + }, + u: function(a, r) { + return new Date(parseFloat(r)) + }, + w: Ne, + y: function(a, r) { + a.setFullYear(2e3 + parseFloat(r)) + } +} + , V = { + D: "", + F: "", + G: "(\\d\\d|\\d)", + H: "(\\d\\d|\\d)", + J: "(\\d\\d|\\d)\\w+", + K: "", + M: "", + S: "(\\d\\d|\\d)", + U: "(.+)", + W: "(\\d\\d|\\d)", + Y: "(\\d{4})", + Z: "(.+)", + d: "(\\d\\d|\\d)", + h: "(\\d\\d|\\d)", + i: "(\\d\\d|\\d)", + j: "(\\d\\d|\\d)", + l: "", + m: "(\\d\\d|\\d)", + n: "(\\d\\d|\\d)", + s: "(\\d\\d|\\d)", + u: "(.+)", + w: "(\\d\\d|\\d)", + y: "(\\d{2})" +} + , ne = { + Z: function(a) { + return a.toISOString() + }, + D: function(a, r, e) { + return r.weekdays.shorthand[ne.w(a, r, e)] + }, + F: function(a, r, e) { + return ue(ne.n(a, r, e) - 1, !1, r) + }, + G: function(a, r, e) { + return O(ne.h(a, r, e)) + }, + H: function(a) { + return O(a.getHours()) + }, + J: function(a, r) { + return r.ordinal !== void 0 ? a.getDate() + r.ordinal(a.getDate()) : a.getDate() + }, + K: function(a, r) { + return r.amPM[H(a.getHours() > 11)] + }, + M: function(a, r) { + return ue(a.getMonth(), !0, r) + }, + S: function(a) { + return O(a.getSeconds()) + }, + U: function(a) { + return a.getTime() / 1e3 + }, + W: function(a, r, e) { + return e.getWeek(a) + }, + Y: function(a) { + return O(a.getFullYear(), 4) + }, + d: function(a) { + return O(a.getDate()) + }, + h: function(a) { + return a.getHours() % 12 ? a.getHours() % 12 : 12 + }, + i: function(a) { + return O(a.getMinutes()) + }, + j: function(a) { + return a.getDate() + }, + l: function(a, r) { + return r.weekdays.longhand[a.getDay()] + }, + m: function(a) { + return O(a.getMonth() + 1) + }, + n: function(a) { + return a.getMonth() + 1 + }, + s: function(a) { + return a.getSeconds() + }, + u: function(a) { + return a.getTime() + }, + w: function(a) { + return a.getDay() + }, + y: function(a) { + return String(a.getFullYear()).substring(2) + } +}; +var Pe = function(a) { + var r = a.config + , e = r === void 0 ? z : r + , c = a.l10n + , u = c === void 0 ? be : c + , h = a.isMobile + , D = h === void 0 ? !1 : h; + return function(w, p, F) { + var k = F || u; + return e.formatDate !== void 0 && !D ? e.formatDate(w, p, k) : p.split("").map(function(_, I, P) { + return ne[_] && P[I - 1] !== "\\" ? ne[_](w, k, e) : _ !== "\\" ? _ : "" + }).join("") + } +} + , we = function(a) { + var r = a.config + , e = r === void 0 ? z : r + , c = a.l10n + , u = c === void 0 ? be : c; + return function(h, D, w, p) { + if (!(h !== 0 && !h)) { + var F = p || u, k, _ = h; + if (h instanceof Date) + k = new Date(h.getTime()); + else if (typeof h != "string" && h.toFixed !== void 0) + k = new Date(h); + else if (typeof h == "string") { + var I = D || (e || z).dateFormat + , P = String(h).trim(); + if (P === "today") + k = new Date, + w = !0; + else if (e && e.parseDate) + k = e.parseDate(h, I); + else if (/Z$/.test(P) || /GMT$/.test(P)) + k = new Date(h); + else { + for (var K = void 0, M = [], q = 0, ae = 0, m = ""; q < I.length; q++) { + var b = I[q] + , x = b === "\\" + , N = I[q - 1] === "\\" || x; + if (V[b] && !N) { + m += V[b]; + var W = new RegExp(m).exec(h); + W && (K = !0) && M[b !== "Y" ? "push" : "unshift"]({ + fn: Ge[b], + val: W[++ae] + }) + } else + x || (m += ".") + } + k = !e || !e.noCalendar ? new Date(new Date().getFullYear(),0,1,0,0,0,0) : new Date(new Date().setHours(0, 0, 0, 0)), + M.forEach(function($) { + var B = $.fn + , Q = $.val; + return k = B(k, Q, F) || k + }), + k = K ? k : void 0 + } + } + if (!(k instanceof Date && !isNaN(k.getTime()))) { + e.errorHandler(new Error("Invalid date provided: " + _)); + return + } + return w === !0 && k.setHours(0, 0, 0, 0), + k + } + } +}; +function j(a, r, e) { + return e === void 0 && (e = !0), + e !== !1 ? new Date(a.getTime()).setHours(0, 0, 0, 0) - new Date(r.getTime()).setHours(0, 0, 0, 0) : a.getTime() - r.getTime() +} +var Ze = function(a, r, e) { + return a > Math.min(r, e) && a < Math.max(r, e) +} + , ye = function(a, r, e) { + return a * 3600 + r * 60 + e +} + , Qe = function(a) { + var r = Math.floor(a / 3600) + , e = (a - r * 3600) / 60; + return [r, e, a - r * 3600 - e * 60] +} + , Xe = { + DAY: 864e5 +}; +function xe(a) { + var r = a.defaultHour + , e = a.defaultMinute + , c = a.defaultSeconds; + if (a.minDate !== void 0) { + var u = a.minDate.getHours() + , h = a.minDate.getMinutes() + , D = a.minDate.getSeconds(); + r < u && (r = u), + r === u && e < h && (e = h), + r === u && e === h && c < D && (c = a.minDate.getSeconds()) + } + if (a.maxDate !== void 0) { + var w = a.maxDate.getHours() + , p = a.maxDate.getMinutes(); + r = Math.min(r, w), + r === w && (e = Math.min(p, e)), + r === w && e === p && (c = a.maxDate.getSeconds()) + } + return { + hours: r, + minutes: e, + seconds: c + } +} +typeof Object.assign != "function" && (Object.assign = function(a) { + for (var r = [], e = 1; e < arguments.length; e++) + r[e - 1] = arguments[e]; + if (!a) + throw TypeError("Cannot convert undefined or null to object"); + for (var c = function(w) { + w && Object.keys(w).forEach(function(p) { + return a[p] = w[p] + }) + }, u = 0, h = r; u < h.length; u++) { + var D = h[u]; + c(D) + } + return a +} +); +var A = function() { + return A = Object.assign || function(a) { + for (var r, e = 1, c = arguments.length; e < c; e++) { + r = arguments[e]; + for (var u in r) + Object.prototype.hasOwnProperty.call(r, u) && (a[u] = r[u]) + } + return a + } + , + A.apply(this, arguments) +} + , en = function() { + for (var a = 0, r = 0, e = arguments.length; r < e; r++) + a += arguments[r].length; + for (var c = Array(a), u = 0, r = 0; r < e; r++) + for (var h = arguments[r], D = 0, w = h.length; D < w; D++, + u++) + c[u] = h[D]; + return c +} + , jn = 300; +function Rn(a, r) { + var e = { + config: A(A({}, z), T.defaultConfig), + l10n: Ce + }; + e.parseDate = we({ + config: e.config, + l10n: e.l10n + }), + e._handlers = [], + e.pluginElements = [], + e.loadedPlugins = [], + e._bind = M, + e._setHoursFromDate = I, + e._positionCalendar = he, + e.changeMonth = Ee, + e.changeYear = de, + e.clear = dn, + e.close = mn, + e.onMouseOver = ge, + e._createElement = y, + e.createDay = W, + e.destroy = gn, + e.isEnabled = G, + e.jumpToDate = m, + e.updateValue = J, + e.open = vn, + e.redraw = qe, + e.set = Mn, + e.setDate = wn, + e.toggle = En; + function c() { + e.utils = { + getDaysInMonth: function(n, t) { + return n === void 0 && (n = e.currentMonth), + t === void 0 && (t = e.currentYear), + n === 1 && (t % 4 === 0 && t % 100 !== 0 || t % 400 === 0) ? 29 : e.l10n.daysInMonth[n] + } + } + } + function u() { + e.element = e.input = a, + e.isOpen = !1, + Dn(), + Ue(), + xn(), + yn(), + c(), + e.isMobile || N(), + ae(), + (e.selectedDates.length || e.config.noCalendar) && (e.config.enableTime && I(e.config.noCalendar ? e.latestSelectedDateObj : void 0), + J(!1)), + w(); + var n = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); + !e.isMobile && n && he(), + S("onReady") + } + function h() { + var n; + return ((n = e.calendarContainer) === null || n === void 0 ? void 0 : n.getRootNode()).activeElement || document.activeElement + } + function D(n) { + return n.bind(e) + } + function w() { + var n = e.config; + n.weekNumbers === !1 && n.showMonths === 1 || n.noCalendar !== !0 && window.requestAnimationFrame(function() { + if (e.calendarContainer !== void 0 && (e.calendarContainer.style.visibility = "hidden", + e.calendarContainer.style.display = "block"), + e.daysContainer !== void 0) { + var t = (e.days.offsetWidth + 1) * n.showMonths; + e.daysContainer.style.width = t + "px", + e.calendarContainer.style.width = t + (e.weekWrapper !== void 0 ? e.weekWrapper.offsetWidth : 0) + "px", + e.calendarContainer.style.removeProperty("visibility"), + e.calendarContainer.style.removeProperty("display") + } + }) + } + function p(n) { + if (e.selectedDates.length === 0) { + var t = e.config.minDate === void 0 || j(new Date, e.config.minDate) >= 0 ? new Date : new Date(e.config.minDate.getTime()) + , i = xe(e.config); + t.setHours(i.hours, i.minutes, i.seconds, t.getMilliseconds()), + e.selectedDates = [t], + e.latestSelectedDateObj = t + } + n !== void 0 && n.type !== "blur" && Fn(n); + var o = e._input.value; + _(), + J(), + e._input.value !== o && e._debouncedChange() + } + function F(n, t) { + return n % 12 + 12 * H(t === e.l10n.amPM[1]) + } + function k(n) { + switch (n % 24) { + case 0: + case 12: + return 12; + default: + return n % 12 + } + } + function _() { + if (!(e.hourElement === void 0 || e.minuteElement === void 0)) { + var n = (parseInt(e.hourElement.value.slice(-2), 10) || 0) % 24 + , t = (parseInt(e.minuteElement.value, 10) || 0) % 60 + , i = e.secondElement !== void 0 ? (parseInt(e.secondElement.value, 10) || 0) % 60 : 0; + e.amPM !== void 0 && (n = F(n, e.amPM.textContent)); + var o = e.config.minTime !== void 0 || e.config.minDate && e.minDateHasTime && e.latestSelectedDateObj && j(e.latestSelectedDateObj, e.config.minDate, !0) === 0 + , l = e.config.maxTime !== void 0 || e.config.maxDate && e.maxDateHasTime && e.latestSelectedDateObj && j(e.latestSelectedDateObj, e.config.maxDate, !0) === 0; + if (e.config.maxTime !== void 0 && e.config.minTime !== void 0 && e.config.minTime > e.config.maxTime) { + var s = ye(e.config.minTime.getHours(), e.config.minTime.getMinutes(), e.config.minTime.getSeconds()) + , v = ye(e.config.maxTime.getHours(), e.config.maxTime.getMinutes(), e.config.maxTime.getSeconds()) + , d = ye(n, t, i); + if (d > v && d < s) { + var C = Qe(s); + n = C[0], + t = C[1], + i = C[2] + } + } else { + if (l) { + var f = e.config.maxTime !== void 0 ? e.config.maxTime : e.config.maxDate; + n = Math.min(n, f.getHours()), + n === f.getHours() && (t = Math.min(t, f.getMinutes())), + t === f.getMinutes() && (i = Math.min(i, f.getSeconds())) + } + if (o) { + var g = e.config.minTime !== void 0 ? e.config.minTime : e.config.minDate; + n = Math.max(n, g.getHours()), + n === g.getHours() && t < g.getMinutes() && (t = g.getMinutes()), + t === g.getMinutes() && (i = Math.max(i, g.getSeconds())) + } + } + P(n, t, i) + } + } + function I(n) { + var t = n || e.latestSelectedDateObj; + t && t instanceof Date && P(t.getHours(), t.getMinutes(), t.getSeconds()) + } + function P(n, t, i) { + e.latestSelectedDateObj !== void 0 && e.latestSelectedDateObj.setHours(n % 24, t, i || 0, 0), + !(!e.hourElement || !e.minuteElement || e.isMobile) && (e.hourElement.value = O(e.config.time_24hr ? n : (12 + n) % 12 + 12 * H(n % 12 === 0)), + e.minuteElement.value = O(t), + e.amPM !== void 0 && (e.amPM.textContent = e.l10n.amPM[H(n >= 12)]), + e.secondElement !== void 0 && (e.secondElement.value = O(i))) + } + function K(n) { + var t = L(n) + , i = parseInt(t.value) + (n.delta || 0); + (i / 1e3 > 1 || n.key === "Enter" && !/[^\d]/.test(i.toString())) && de(i) + } + function M(n, t, i, o) { + if (t instanceof Array) + return t.forEach(function(l) { + return M(n, l, i, o) + }); + if (n instanceof Array) + return n.forEach(function(l) { + return M(l, t, i, o) + }); + n.addEventListener(t, i, o), + e._handlers.push({ + remove: function() { + return n.removeEventListener(t, i, o) + } + }) + } + function q() { + S("onChange") + } + function ae() { + if (e.config.wrap && ["open", "close", "toggle", "clear"].forEach(function(i) { + Array.prototype.forEach.call(e.element.querySelectorAll("[data-" + i + "]"), function(o) { + return M(o, "click", e[i]) + }) + }), + e.isMobile) { + kn(); + return + } + var n = Ye(pn, 50); + if (e._debouncedChange = Ye(q, jn), + e.daysContainer && !/iPhone|iPad|iPod/i.test(navigator.userAgent) && M(e.daysContainer, "mouseover", function(i) { + e.config.mode === "range" && ge(L(i)) + }), + M(e._input, "keydown", We), + e.calendarContainer !== void 0 && M(e.calendarContainer, "keydown", We), + !e.config.inline && !e.config.static && M(window, "resize", n), + window.ontouchstart !== void 0 ? M(window.document, "touchstart", Se) : M(window.document, "mousedown", Se), + M(window.document, "focus", Se, { + capture: !0 + }), + e.config.clickOpens === !0 && (M(e._input, "focus", e.open), + M(e._input, "click", e.open)), + e.daysContainer !== void 0 && (M(e.monthNav, "click", Tn), + M(e.monthNav, ["keyup", "increment"], K), + M(e.daysContainer, "click", Je)), + e.timeContainer !== void 0 && e.minuteElement !== void 0 && e.hourElement !== void 0) { + var t = function(i) { + return L(i).select() + }; + M(e.timeContainer, ["increment"], p), + M(e.timeContainer, "blur", p, { + capture: !0 + }), + M(e.timeContainer, "click", b), + M([e.hourElement, e.minuteElement], ["focus", "click"], t), + e.secondElement !== void 0 && M(e.secondElement, "focus", function() { + return e.secondElement && e.secondElement.select() + }), + e.amPM !== void 0 && M(e.amPM, "click", function(i) { + p(i) + }) + } + e.config.allowInput && M(e._input, "blur", hn) + } + function m(n, t) { + var i = n !== void 0 ? e.parseDate(n) : e.latestSelectedDateObj || (e.config.minDate && e.config.minDate > e.now ? e.config.minDate : e.config.maxDate && e.config.maxDate < e.now ? e.config.maxDate : e.now) + , o = e.currentYear + , l = e.currentMonth; + try { + i !== void 0 && (e.currentYear = i.getFullYear(), + e.currentMonth = i.getMonth()) + } catch (s) { + s.message = "Invalid date supplied: " + i, + e.config.errorHandler(s) + } + t && e.currentYear !== o && (S("onYearChange"), + X()), + t && (e.currentYear !== o || e.currentMonth !== l) && S("onMonthChange"), + e.redraw() + } + function b(n) { + var t = L(n); + ~t.className.indexOf("arrow") && x(n, t.classList.contains("arrowUp") ? 1 : -1) + } + function x(n, t, i) { + var o = n && L(n) + , l = i || o && o.parentNode && o.parentNode.firstChild + , s = Fe("increment"); + s.delta = t, + l && l.dispatchEvent(s) + } + function N() { + var n = window.document.createDocumentFragment(); + if (e.calendarContainer = y("div", "flatpickr-calendar"), + e.calendarContainer.tabIndex = -1, + !e.config.noCalendar) { + if (n.appendChild(un()), + e.innerContainer = y("div", "flatpickr-innerContainer"), + e.config.weekNumbers) { + var t = fn() + , i = t.weekWrapper + , o = t.weekNumbers; + e.innerContainer.appendChild(i), + e.weekNumbers = o, + e.weekWrapper = i + } + e.rContainer = y("div", "flatpickr-rContainer"), + e.rContainer.appendChild(je()), + e.daysContainer || (e.daysContainer = y("div", "flatpickr-days"), + e.daysContainer.tabIndex = -1), + fe(), + e.rContainer.appendChild(e.daysContainer), + e.innerContainer.appendChild(e.rContainer), + n.appendChild(e.innerContainer) + } + e.config.enableTime && n.appendChild(cn()), + Y(e.calendarContainer, "rangeMode", e.config.mode === "range"), + Y(e.calendarContainer, "animate", e.config.animate === !0), + Y(e.calendarContainer, "multiMonth", e.config.showMonths > 1), + e.calendarContainer.appendChild(n); + var l = e.config.appendTo !== void 0 && e.config.appendTo.nodeType !== void 0; + if ((e.config.inline || e.config.static) && (e.calendarContainer.classList.add(e.config.inline ? "inline" : "static"), + e.config.inline && (!l && e.element.parentNode ? e.element.parentNode.insertBefore(e.calendarContainer, e._input.nextSibling) : e.config.appendTo !== void 0 && e.config.appendTo.appendChild(e.calendarContainer)), + e.config.static)) { + var s = y("div", "flatpickr-wrapper"); + e.element.parentNode && e.element.parentNode.insertBefore(s, e.element), + s.appendChild(e.element), + e.altInput && s.appendChild(e.altInput), + s.appendChild(e.calendarContainer) + } + !e.config.static && !e.config.inline && (e.config.appendTo !== void 0 ? e.config.appendTo : window.document.body).appendChild(e.calendarContainer) + } + function W(n, t, i, o) { + var l = G(t, !0) + , s = y("span", n, t.getDate().toString()); + return s.dateObj = t, + s.$i = o, + s.setAttribute("aria-label", e.formatDate(t, e.config.ariaDateFormat)), + n.indexOf("hidden") === -1 && j(t, e.now) === 0 && (e.todayDateElem = s, + s.classList.add("today"), + s.setAttribute("aria-current", "date")), + l ? (s.tabIndex = -1, + _e(t) && (s.classList.add("selected"), + e.selectedDateElem = s, + e.config.mode === "range" && (Y(s, "startRange", e.selectedDates[0] && j(t, e.selectedDates[0], !0) === 0), + Y(s, "endRange", e.selectedDates[1] && j(t, e.selectedDates[1], !0) === 0), + n === "nextMonthDay" && s.classList.add("inRange")))) : s.classList.add("flatpickr-disabled"), + e.config.mode === "range" && Sn(t) && !_e(t) && s.classList.add("inRange"), + e.weekNumbers && e.config.showMonths === 1 && n !== "prevMonthDay" && o % 7 === 6 && e.weekNumbers.insertAdjacentHTML("beforeend", "" + e.config.getWeek(t) + ""), + S("onDayCreate", s), + s + } + function $(n) { + n.focus(), + e.config.mode === "range" && ge(n) + } + function B(n) { + for (var t = n > 0 ? 0 : e.config.showMonths - 1, i = n > 0 ? e.config.showMonths : -1, o = t; o != i; o += n) + for (var l = e.daysContainer.children[o], s = n > 0 ? 0 : l.children.length - 1, v = n > 0 ? l.children.length : -1, d = s; d != v; d += n) { + var C = l.children[d]; + if (C.className.indexOf("hidden") === -1 && G(C.dateObj)) + return C + } + } + function Q(n, t) { + for (var i = n.className.indexOf("Month") === -1 ? n.dateObj.getMonth() : e.currentMonth, o = t > 0 ? e.config.showMonths : -1, l = t > 0 ? 1 : -1, s = i - e.currentMonth; s != o; s += l) + for (var v = e.daysContainer.children[s], d = i - e.currentMonth === s ? n.$i + t : t < 0 ? v.children.length - 1 : 0, C = v.children.length, f = d; f >= 0 && f < C && f != (t > 0 ? C : -1); f += l) { + var g = v.children[f]; + if (g.className.indexOf("hidden") === -1 && G(g.dateObj) && Math.abs(n.$i - f) >= Math.abs(t)) + return $(g) + } + e.changeMonth(l), + re(B(l), 0) + } + function re(n, t) { + var i = h() + , o = me(i || document.body) + , l = n !== void 0 ? n : o ? i : e.selectedDateElem !== void 0 && me(e.selectedDateElem) ? e.selectedDateElem : e.todayDateElem !== void 0 && me(e.todayDateElem) ? e.todayDateElem : B(t > 0 ? 1 : -1); + l === void 0 ? e._input.focus() : o ? Q(l, t) : $(l) + } + function ln(n, t) { + for (var i = (new Date(n,t,1).getDay() - e.l10n.firstDayOfWeek + 7) % 7, o = e.utils.getDaysInMonth((t - 1 + 12) % 12, n), l = e.utils.getDaysInMonth(t, n), s = window.document.createDocumentFragment(), v = e.config.showMonths > 1, d = v ? "prevMonthDay hidden" : "prevMonthDay", C = v ? "nextMonthDay hidden" : "nextMonthDay", f = o + 1 - i, g = 0; f <= o; f++, + g++) + s.appendChild(W("flatpickr-day " + d, new Date(n,t - 1,f), f, g)); + for (f = 1; f <= l; f++, + g++) + s.appendChild(W("flatpickr-day", new Date(n,t,f), f, g)); + for (var E = l + 1; E <= 42 - i && (e.config.showMonths === 1 || g % 7 !== 0); E++, + g++) + s.appendChild(W("flatpickr-day " + C, new Date(n,t + 1,E % l), E, g)); + var U = y("div", "dayContainer"); + return U.appendChild(s), + U + } + function fe() { + if (e.daysContainer !== void 0) { + le(e.daysContainer), + e.weekNumbers && le(e.weekNumbers); + for (var n = document.createDocumentFragment(), t = 0; t < e.config.showMonths; t++) { + var i = new Date(e.currentYear,e.currentMonth,1); + i.setMonth(e.currentMonth + t), + n.appendChild(ln(i.getFullYear(), i.getMonth())) + } + e.daysContainer.appendChild(n), + e.days = e.daysContainer.firstChild, + e.config.mode === "range" && e.selectedDates.length === 1 && ge() + } + } + function X() { + if (!(e.config.showMonths > 1 || e.config.monthSelectorType !== "dropdown")) { + var n = function(o) { + return e.config.minDate !== void 0 && e.currentYear === e.config.minDate.getFullYear() && o < e.config.minDate.getMonth() ? !1 : !(e.config.maxDate !== void 0 && e.currentYear === e.config.maxDate.getFullYear() && o > e.config.maxDate.getMonth()) + }; + e.monthsDropdownContainer.tabIndex = -1, + e.monthsDropdownContainer.innerHTML = ""; + for (var t = 0; t < 12; t++) + if (n(t)) { + var i = y("option", "flatpickr-monthDropdown-month"); + i.value = new Date(e.currentYear,t).getMonth().toString(), + i.textContent = ue(t, e.config.shorthandCurrentMonth, e.l10n), + i.tabIndex = -1, + e.currentMonth === t && (i.selected = !0), + e.monthsDropdownContainer.appendChild(i) + } + } + } + function sn() { + var n = y("div", "flatpickr-month"), t = window.document.createDocumentFragment(), i; + e.config.showMonths > 1 || e.config.monthSelectorType === "static" ? i = y("span", "cur-month") : (e.monthsDropdownContainer = y("select", "flatpickr-monthDropdown-months"), + e.monthsDropdownContainer.setAttribute("aria-label", e.l10n.monthAriaLabel), + M(e.monthsDropdownContainer, "change", function(v) { + var d = L(v) + , C = parseInt(d.value, 10); + e.changeMonth(C - e.currentMonth), + S("onMonthChange") + }), + X(), + i = e.monthsDropdownContainer); + var o = se("cur-year", { + tabindex: "-1" + }) + , l = o.getElementsByTagName("input")[0]; + l.setAttribute("aria-label", e.l10n.yearAriaLabel), + e.config.minDate && l.setAttribute("min", e.config.minDate.getFullYear().toString()), + e.config.maxDate && (l.setAttribute("max", e.config.maxDate.getFullYear().toString()), + l.disabled = !!e.config.minDate && e.config.minDate.getFullYear() === e.config.maxDate.getFullYear()); + var s = y("div", "flatpickr-current-month"); + return s.appendChild(i), + s.appendChild(o), + t.appendChild(s), + n.appendChild(t), + { + container: n, + yearElement: l, + monthElement: i + } + } + function Le() { + le(e.monthNav), + e.monthNav.appendChild(e.prevMonthNav), + e.config.showMonths && (e.yearElements = [], + e.monthElements = []); + for (var n = e.config.showMonths; n--; ) { + var t = sn(); + e.yearElements.push(t.yearElement), + e.monthElements.push(t.monthElement), + e.monthNav.appendChild(t.container) + } + e.monthNav.appendChild(e.nextMonthNav) + } + function un() { + return e.monthNav = y("div", "flatpickr-months"), + e.yearElements = [], + e.monthElements = [], + e.prevMonthNav = y("span", "flatpickr-prev-month"), + e.prevMonthNav.innerHTML = e.config.prevArrow, + e.nextMonthNav = y("span", "flatpickr-next-month"), + e.nextMonthNav.innerHTML = e.config.nextArrow, + Le(), + Object.defineProperty(e, "_hidePrevMonthArrow", { + get: function() { + return e.__hidePrevMonthArrow + }, + set: function(n) { + e.__hidePrevMonthArrow !== n && (Y(e.prevMonthNav, "flatpickr-disabled", n), + e.__hidePrevMonthArrow = n) + } + }), + Object.defineProperty(e, "_hideNextMonthArrow", { + get: function() { + return e.__hideNextMonthArrow + }, + set: function(n) { + e.__hideNextMonthArrow !== n && (Y(e.nextMonthNav, "flatpickr-disabled", n), + e.__hideNextMonthArrow = n) + } + }), + e.currentYearElement = e.yearElements[0], + ve(), + e.monthNav + } + function cn() { + e.calendarContainer.classList.add("hasTime"), + e.config.noCalendar && e.calendarContainer.classList.add("noCalendar"); + var n = xe(e.config); + e.timeContainer = y("div", "flatpickr-time"), + e.timeContainer.tabIndex = -1; + var t = y("span", "flatpickr-time-separator", ":") + , i = se("flatpickr-hour", { + "aria-label": e.l10n.hourAriaLabel + }); + e.hourElement = i.getElementsByTagName("input")[0]; + var o = se("flatpickr-minute", { + "aria-label": e.l10n.minuteAriaLabel + }); + if (e.minuteElement = o.getElementsByTagName("input")[0], + e.hourElement.tabIndex = e.minuteElement.tabIndex = -1, + e.hourElement.value = O(e.latestSelectedDateObj ? e.latestSelectedDateObj.getHours() : e.config.time_24hr ? n.hours : k(n.hours)), + e.minuteElement.value = O(e.latestSelectedDateObj ? e.latestSelectedDateObj.getMinutes() : n.minutes), + e.hourElement.setAttribute("step", e.config.hourIncrement.toString()), + e.minuteElement.setAttribute("step", e.config.minuteIncrement.toString()), + e.hourElement.setAttribute("min", e.config.time_24hr ? "0" : "1"), + e.hourElement.setAttribute("max", e.config.time_24hr ? "23" : "12"), + e.hourElement.setAttribute("maxlength", "2"), + e.minuteElement.setAttribute("min", "0"), + e.minuteElement.setAttribute("max", "59"), + e.minuteElement.setAttribute("maxlength", "2"), + e.timeContainer.appendChild(i), + e.timeContainer.appendChild(t), + e.timeContainer.appendChild(o), + e.config.time_24hr && e.timeContainer.classList.add("time24hr"), + e.config.enableSeconds) { + e.timeContainer.classList.add("hasSeconds"); + var l = se("flatpickr-second"); + e.secondElement = l.getElementsByTagName("input")[0], + e.secondElement.value = O(e.latestSelectedDateObj ? e.latestSelectedDateObj.getSeconds() : n.seconds), + e.secondElement.setAttribute("step", e.minuteElement.getAttribute("step")), + e.secondElement.setAttribute("min", "0"), + e.secondElement.setAttribute("max", "59"), + e.secondElement.setAttribute("maxlength", "2"), + e.timeContainer.appendChild(y("span", "flatpickr-time-separator", ":")), + e.timeContainer.appendChild(l) + } + return e.config.time_24hr || (e.amPM = y("span", "flatpickr-am-pm", e.l10n.amPM[H((e.latestSelectedDateObj ? e.hourElement.value : e.config.defaultHour) > 11)]), + e.amPM.title = e.l10n.toggleTitle, + e.amPM.tabIndex = -1, + e.timeContainer.appendChild(e.amPM)), + e.timeContainer + } + function je() { + e.weekdayContainer ? le(e.weekdayContainer) : e.weekdayContainer = y("div", "flatpickr-weekdays"); + for (var n = e.config.showMonths; n--; ) { + var t = y("div", "flatpickr-weekdaycontainer"); + e.weekdayContainer.appendChild(t) + } + return Re(), + e.weekdayContainer + } + function Re() { + if (e.weekdayContainer) { + var n = e.l10n.firstDayOfWeek + , t = en(e.l10n.weekdays.shorthand); + n > 0 && n < t.length && (t = en(t.splice(n, t.length), t.splice(0, n))); + for (var i = e.config.showMonths; i--; ) + e.weekdayContainer.children[i].innerHTML = ` + + ` + t.join("") + ` + + ` + } + } + function fn() { + e.calendarContainer.classList.add("hasWeeks"); + var n = y("div", "flatpickr-weekwrapper"); + n.appendChild(y("span", "flatpickr-weekday", e.l10n.weekAbbreviation)); + var t = y("div", "flatpickr-weeks"); + return n.appendChild(t), + { + weekWrapper: n, + weekNumbers: t + } + } + function Ee(n, t) { + t === void 0 && (t = !0); + var i = t ? n : n - e.currentMonth; + i < 0 && e._hidePrevMonthArrow === !0 || i > 0 && e._hideNextMonthArrow === !0 || (e.currentMonth += i, + (e.currentMonth < 0 || e.currentMonth > 11) && (e.currentYear += e.currentMonth > 11 ? 1 : -1, + e.currentMonth = (e.currentMonth + 12) % 12, + S("onYearChange"), + X()), + fe(), + S("onMonthChange"), + ve()) + } + function dn(n, t) { + if (n === void 0 && (n = !0), + t === void 0 && (t = !0), + e.input.value = "", + e.altInput !== void 0 && (e.altInput.value = ""), + e.mobileInput !== void 0 && (e.mobileInput.value = ""), + e.selectedDates = [], + e.latestSelectedDateObj = void 0, + t === !0 && (e.currentYear = e._initialDate.getFullYear(), + e.currentMonth = e._initialDate.getMonth()), + e.config.enableTime === !0) { + var i = xe(e.config) + , o = i.hours + , l = i.minutes + , s = i.seconds; + P(o, l, s) + } + e.redraw(), + n && S("onChange") + } + function mn() { + e.isOpen = !1, + e.isMobile || (e.calendarContainer !== void 0 && e.calendarContainer.classList.remove("open"), + e._input !== void 0 && e._input.classList.remove("active")), + S("onClose") + } + function gn() { + e.config !== void 0 && S("onDestroy"); + for (var n = e._handlers.length; n--; ) + e._handlers[n].remove(); + if (e._handlers = [], + e.mobileInput) + e.mobileInput.parentNode && e.mobileInput.parentNode.removeChild(e.mobileInput), + e.mobileInput = void 0; + else if (e.calendarContainer && e.calendarContainer.parentNode) + if (e.config.static && e.calendarContainer.parentNode) { + var t = e.calendarContainer.parentNode; + if (t.lastChild && t.removeChild(t.lastChild), + t.parentNode) { + for (; t.firstChild; ) + t.parentNode.insertBefore(t.firstChild, t); + t.parentNode.removeChild(t) + } + } else + e.calendarContainer.parentNode.removeChild(e.calendarContainer); + e.altInput && (e.input.type = "text", + e.altInput.parentNode && e.altInput.parentNode.removeChild(e.altInput), + delete e.altInput), + e.input && (e.input.type = e.input._type, + e.input.classList.remove("flatpickr-input"), + e.input.removeAttribute("readonly")), + ["_showTimeInput", "latestSelectedDateObj", "_hideNextMonthArrow", "_hidePrevMonthArrow", "__hideNextMonthArrow", "__hidePrevMonthArrow", "isMobile", "isOpen", "selectedDateElem", "minDateHasTime", "maxDateHasTime", "days", "daysContainer", "_input", "_positionElement", "innerContainer", "rContainer", "monthNav", "todayDateElem", "calendarContainer", "weekdayContainer", "prevMonthNav", "nextMonthNav", "monthsDropdownContainer", "currentMonthElement", "currentYearElement", "navigationCurrentMonth", "selectedDateElem", "config"].forEach(function(i) { + try { + delete e[i] + } catch {} + }) + } + function ie(n) { + return e.calendarContainer.contains(n) + } + function Se(n) { + if (e.isOpen && !e.config.inline) { + var t = L(n) + , i = ie(t) + , o = t === e.input || t === e.altInput || e.element.contains(t) || n.path && n.path.indexOf && (~n.path.indexOf(e.input) || ~n.path.indexOf(e.altInput)) + , l = !o && !i && !ie(n.relatedTarget) + , s = !e.config.ignoredFocusElements.some(function(v) { + return v.contains(t) + }); + l && s && (e.config.allowInput && e.setDate(e._input.value, !1, e.config.altInput ? e.config.altFormat : e.config.dateFormat), + e.timeContainer !== void 0 && e.minuteElement !== void 0 && e.hourElement !== void 0 && e.input.value !== "" && e.input.value !== void 0 && p(), + e.close(), + e.config && e.config.mode === "range" && e.selectedDates.length === 1 && e.clear(!1)) + } + } + function de(n) { + if (!(!n || e.config.minDate && n < e.config.minDate.getFullYear() || e.config.maxDate && n > e.config.maxDate.getFullYear())) { + var t = n + , i = e.currentYear !== t; + e.currentYear = t || e.currentYear, + e.config.maxDate && e.currentYear === e.config.maxDate.getFullYear() ? e.currentMonth = Math.min(e.config.maxDate.getMonth(), e.currentMonth) : e.config.minDate && e.currentYear === e.config.minDate.getFullYear() && (e.currentMonth = Math.max(e.config.minDate.getMonth(), e.currentMonth)), + i && (e.redraw(), + S("onYearChange"), + X()) + } + } + function G(n, t) { + var i; + t === void 0 && (t = !0); + var o = e.parseDate(n, void 0, t); + if (e.config.minDate && o && j(o, e.config.minDate, t !== void 0 ? t : !e.minDateHasTime) < 0 || e.config.maxDate && o && j(o, e.config.maxDate, t !== void 0 ? t : !e.maxDateHasTime) > 0) + return !1; + if (!e.config.enable && e.config.disable.length === 0) + return !0; + if (o === void 0) + return !1; + for (var l = !!e.config.enable, s = (i = e.config.enable) !== null && i !== void 0 ? i : e.config.disable, v = 0, d = void 0; v < s.length; v++) { + if (d = s[v], + typeof d == "function" && d(o)) + return l; + if (d instanceof Date && o !== void 0 && d.getTime() === o.getTime()) + return l; + if (typeof d == "string") { + var C = e.parseDate(d, void 0, !0); + return C && C.getTime() === o.getTime() ? l : !l + } else if (typeof d == "object" && o !== void 0 && d.from && d.to && o.getTime() >= d.from.getTime() && o.getTime() <= d.to.getTime()) + return l + } + return !l + } + function me(n) { + return e.daysContainer !== void 0 ? n.className.indexOf("hidden") === -1 && n.className.indexOf("flatpickr-disabled") === -1 && e.daysContainer.contains(n) : !1 + } + function hn(n) { + var t = n.target === e._input + , i = e._input.value.trimEnd() !== Ie(); + t && i && !(n.relatedTarget && ie(n.relatedTarget)) && e.setDate(e._input.value, !0, n.target === e.altInput ? e.config.altFormat : e.config.dateFormat) + } + function We(n) { + var t = L(n) + , i = e.config.wrap ? a.contains(t) : t === e._input + , o = e.config.allowInput + , l = e.isOpen && (!o || !i) + , s = e.config.inline && i && !o; + if (n.keyCode === 13 && i) { + if (o) + return e.setDate(e._input.value, !0, t === e.altInput ? e.config.altFormat : e.config.dateFormat), + e.close(), + t.blur(); + e.open() + } else if (ie(t) || l || s) { + var v = !!e.timeContainer && e.timeContainer.contains(t); + switch (n.keyCode) { + case 13: + v ? (n.preventDefault(), + p(), + Te()) : Je(n); + break; + case 27: + n.preventDefault(), + Te(); + break; + case 8: + case 46: + i && !e.config.allowInput && (n.preventDefault(), + e.clear()); + break; + case 37: + case 39: + if (!v && !i) { + n.preventDefault(); + var d = h(); + if (e.daysContainer !== void 0 && (o === !1 || d && me(d))) { + var C = n.keyCode === 39 ? 1 : -1; + n.ctrlKey ? (n.stopPropagation(), + Ee(C), + re(B(1), 0)) : re(void 0, C) + } + } else + e.hourElement && e.hourElement.focus(); + break; + case 38: + case 40: + n.preventDefault(); + var f = n.keyCode === 40 ? 1 : -1; + e.daysContainer && t.$i !== void 0 || t === e.input || t === e.altInput ? n.ctrlKey ? (n.stopPropagation(), + de(e.currentYear - f), + re(B(1), 0)) : v || re(void 0, f * 7) : t === e.currentYearElement ? de(e.currentYear - f) : e.config.enableTime && (!v && e.hourElement && e.hourElement.focus(), + p(n), + e._debouncedChange()); + break; + case 9: + if (v) { + var g = [e.hourElement, e.minuteElement, e.secondElement, e.amPM].concat(e.pluginElements).filter(function(R) { + return R + }) + , E = g.indexOf(t); + if (E !== -1) { + var U = g[E + (n.shiftKey ? -1 : 1)]; + n.preventDefault(), + (U || e._input).focus() + } + } else + !e.config.noCalendar && e.daysContainer && e.daysContainer.contains(t) && n.shiftKey && (n.preventDefault(), + e._input.focus()); + break; + default: + break + } + } + if (e.amPM !== void 0 && t === e.amPM) + switch (n.key) { + case e.l10n.amPM[0].charAt(0): + case e.l10n.amPM[0].charAt(0).toLowerCase(): + e.amPM.textContent = e.l10n.amPM[0], + _(), + J(); + break; + case e.l10n.amPM[1].charAt(0): + case e.l10n.amPM[1].charAt(0).toLowerCase(): + e.amPM.textContent = e.l10n.amPM[1], + _(), + J(); + break + } + (i || ie(t)) && S("onKeyDown", n) + } + function ge(n, t) { + if (t === void 0 && (t = "flatpickr-day"), + !(e.selectedDates.length !== 1 || n && (!n.classList.contains(t) || n.classList.contains("flatpickr-disabled")))) { + for (var i = n ? n.dateObj.getTime() : e.days.firstElementChild.dateObj.getTime(), o = e.parseDate(e.selectedDates[0], void 0, !0).getTime(), l = Math.min(i, e.selectedDates[0].getTime()), s = Math.max(i, e.selectedDates[0].getTime()), v = !1, d = 0, C = 0, f = l; f < s; f += Xe.DAY) + G(new Date(f), !0) || (v = v || f > l && f < s, + f < o && (!d || f > d) ? d = f : f > o && (!C || f < C) && (C = f)); + var g = Array.from(e.rContainer.querySelectorAll("*:nth-child(-n+" + e.config.showMonths + ") > ." + t)); + g.forEach(function(E) { + var U = E.dateObj + , R = U.getTime() + , oe = d > 0 && R < d || C > 0 && R > C; + if (oe) { + E.classList.add("notAllowed"), + ["inRange", "startRange", "endRange"].forEach(function(ee) { + E.classList.remove(ee) + }); + return + } else if (v && !oe) + return; + ["startRange", "inRange", "endRange", "notAllowed"].forEach(function(ee) { + E.classList.remove(ee) + }), + n !== void 0 && (n.classList.add(i <= e.selectedDates[0].getTime() ? "startRange" : "endRange"), + o < i && R === o ? E.classList.add("startRange") : o > i && R === o && E.classList.add("endRange"), + R >= d && (C === 0 || R <= C) && Ze(R, o, i) && E.classList.add("inRange")) + }) + } + } + function pn() { + e.isOpen && !e.config.static && !e.config.inline && he() + } + function vn(n, t) { + if (t === void 0 && (t = e._positionElement), + e.isMobile === !0) { + if (n) { + n.preventDefault(); + var i = L(n); + i && i.blur() + } + e.mobileInput !== void 0 && (e.mobileInput.focus(), + e.mobileInput.click()), + S("onOpen"); + return + } else if (e._input.disabled || e.config.inline) + return; + var o = e.isOpen; + e.isOpen = !0, + o || (e.calendarContainer.classList.add("open"), + e._input.classList.add("active"), + S("onOpen"), + he(t)), + e.config.enableTime === !0 && e.config.noCalendar === !0 && e.config.allowInput === !1 && (n === void 0 || !e.timeContainer.contains(n.relatedTarget)) && setTimeout(function() { + return e.hourElement.select() + }, 50) + } + function Ke(n) { + return function(t) { + var i = e.config["_" + n + "Date"] = e.parseDate(t, e.config.dateFormat) + , o = e.config["_" + (n === "min" ? "max" : "min") + "Date"]; + i !== void 0 && (e[n === "min" ? "minDateHasTime" : "maxDateHasTime"] = i.getHours() > 0 || i.getMinutes() > 0 || i.getSeconds() > 0), + e.selectedDates && (e.selectedDates = e.selectedDates.filter(function(l) { + return G(l) + }), + !e.selectedDates.length && n === "min" && I(i), + J()), + e.daysContainer && (qe(), + i !== void 0 ? e.currentYearElement[n] = i.getFullYear().toString() : e.currentYearElement.removeAttribute(n), + e.currentYearElement.disabled = !!o && i !== void 0 && o.getFullYear() === i.getFullYear()) + } + } + function Dn() { + var n = ["wrap", "weekNumbers", "allowInput", "allowInvalidPreload", "clickOpens", "time_24hr", "enableTime", "noCalendar", "altInput", "shorthandCurrentMonth", "inline", "static", "enableSeconds", "disableMobile"] + , t = A(A({}, JSON.parse(JSON.stringify(a.dataset || {}))), r) + , i = {}; + e.config.parseDate = t.parseDate, + e.config.formatDate = t.formatDate, + Object.defineProperty(e.config, "enable", { + get: function() { + return e.config._enable + }, + set: function(g) { + e.config._enable = $e(g) + } + }), + Object.defineProperty(e.config, "disable", { + get: function() { + return e.config._disable + }, + set: function(g) { + e.config._disable = $e(g) + } + }); + var o = t.mode === "time"; + if (!t.dateFormat && (t.enableTime || o)) { + var l = T.defaultConfig.dateFormat || z.dateFormat; + i.dateFormat = t.noCalendar || o ? "H:i" + (t.enableSeconds ? ":S" : "") : l + " H:i" + (t.enableSeconds ? ":S" : "") + } + if (t.altInput && (t.enableTime || o) && !t.altFormat) { + var s = T.defaultConfig.altFormat || z.altFormat; + i.altFormat = t.noCalendar || o ? "h:i" + (t.enableSeconds ? ":S K" : " K") : s + (" h:i" + (t.enableSeconds ? ":S" : "") + " K") + } + Object.defineProperty(e.config, "minDate", { + get: function() { + return e.config._minDate + }, + set: Ke("min") + }), + Object.defineProperty(e.config, "maxDate", { + get: function() { + return e.config._maxDate + }, + set: Ke("max") + }); + var v = function(g) { + return function(E) { + e.config[g === "min" ? "_minTime" : "_maxTime"] = e.parseDate(E, "H:i:S") + } + }; + Object.defineProperty(e.config, "minTime", { + get: function() { + return e.config._minTime + }, + set: v("min") + }), + Object.defineProperty(e.config, "maxTime", { + get: function() { + return e.config._maxTime + }, + set: v("max") + }), + t.mode === "time" && (e.config.noCalendar = !0, + e.config.enableTime = !0), + Object.assign(e.config, i, t); + for (var d = 0; d < n.length; d++) + e.config[n[d]] = e.config[n[d]] === !0 || e.config[n[d]] === "true"; + De.filter(function(g) { + return e.config[g] !== void 0 + }).forEach(function(g) { + e.config[g] = Me(e.config[g] || []).map(D) + }), + e.isMobile = !e.config.disableMobile && !e.config.inline && e.config.mode === "single" && !e.config.disable.length && !e.config.enable && !e.config.weekNumbers && /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent); + for (var d = 0; d < e.config.plugins.length; d++) { + var C = e.config.plugins[d](e) || {}; + for (var f in C) + De.indexOf(f) > -1 ? e.config[f] = Me(C[f]).map(D).concat(e.config[f]) : typeof t[f] > "u" && (e.config[f] = C[f]) + } + t.altInputClass || (e.config.altInputClass = Be().className + " " + e.config.altInputClass), + S("onParseConfig") + } + function Be() { + return e.config.wrap ? a.querySelector("[data-input]") : a + } + function Ue() { + typeof e.config.locale != "object" && typeof T.l10ns[e.config.locale] > "u" && e.config.errorHandler(new Error("flatpickr: invalid locale " + e.config.locale)), + e.l10n = A(A({}, T.l10ns.default), typeof e.config.locale == "object" ? e.config.locale : e.config.locale !== "default" ? T.l10ns[e.config.locale] : void 0), + V.D = "(" + e.l10n.weekdays.shorthand.join("|") + ")", + V.l = "(" + e.l10n.weekdays.longhand.join("|") + ")", + V.M = "(" + e.l10n.months.shorthand.join("|") + ")", + V.F = "(" + e.l10n.months.longhand.join("|") + ")", + V.K = "(" + e.l10n.amPM[0] + "|" + e.l10n.amPM[1] + "|" + e.l10n.amPM[0].toLowerCase() + "|" + e.l10n.amPM[1].toLowerCase() + ")"; + var n = A(A({}, r), JSON.parse(JSON.stringify(a.dataset || {}))); + n.time_24hr === void 0 && T.defaultConfig.time_24hr === void 0 && (e.config.time_24hr = e.l10n.time_24hr), + e.formatDate = Pe(e), + e.parseDate = we({ + config: e.config, + l10n: e.l10n + }) + } + function he(n) { + if (typeof e.config.position == "function") + return void e.config.position(e, n); + if (e.calendarContainer !== void 0) { + S("onPreCalendarPosition"); + var t = n || e._positionElement + , i = Array.prototype.reduce.call(e.calendarContainer.children, function(Hn, Ln) { + return Hn + Ln.offsetHeight + }, 0) + , o = e.calendarContainer.offsetWidth + , l = e.config.position.split(" ") + , s = l[0] + , v = l.length > 1 ? l[1] : null + , d = t.getBoundingClientRect() + , C = window.innerHeight - d.bottom + , f = s === "above" || s !== "below" && C < i && d.top > i + , g = window.pageYOffset + d.top + (f ? -i - 2 : t.offsetHeight + 2); + if (Y(e.calendarContainer, "arrowTop", !f), + Y(e.calendarContainer, "arrowBottom", f), + !e.config.inline) { + var E = window.pageXOffset + d.left + , U = !1 + , R = !1; + v === "center" ? (E -= (o - d.width) / 2, + U = !0) : v === "right" && (E -= o - d.width, + R = !0), + Y(e.calendarContainer, "arrowLeft", !U && !R), + Y(e.calendarContainer, "arrowCenter", U), + Y(e.calendarContainer, "arrowRight", R); + var oe = window.document.body.offsetWidth - (window.pageXOffset + d.right) + , ee = E + o > window.document.body.offsetWidth + , _n = oe + o > window.document.body.offsetWidth; + if (Y(e.calendarContainer, "rightMost", ee), + !e.config.static) + if (e.calendarContainer.style.top = g + "px", + !ee) + e.calendarContainer.style.left = E + "px", + e.calendarContainer.style.right = "auto"; + else if (!_n) + e.calendarContainer.style.left = "auto", + e.calendarContainer.style.right = oe + "px"; + else { + var Oe = bn(); + if (Oe === void 0) + return; + var In = window.document.body.offsetWidth + , On = Math.max(0, In / 2 - o / 2) + , Yn = ".flatpickr-calendar.centerMost:before" + , An = ".flatpickr-calendar.centerMost:after" + , Nn = Oe.cssRules.length + , Pn = "{left:" + d.left + "px;right:auto;}"; + Y(e.calendarContainer, "rightMost", !1), + Y(e.calendarContainer, "centerMost", !0), + Oe.insertRule(Yn + "," + An + Pn, Nn), + e.calendarContainer.style.left = On + "px", + e.calendarContainer.style.right = "auto" + } + } + } + } + function bn() { + for (var n = null, t = 0; t < document.styleSheets.length; t++) { + var i = document.styleSheets[t]; + if (i.cssRules) { + try { + i.cssRules + } catch { + continue + } + n = i; + break + } + } + return n ?? Cn() + } + function Cn() { + var n = document.createElement("style"); + return document.head.appendChild(n), + n.sheet + } + function qe() { + e.config.noCalendar || e.isMobile || (X(), + ve(), + fe()) + } + function Te() { + e._input.focus(), + window.navigator.userAgent.indexOf("MSIE") !== -1 || navigator.msMaxTouchPoints !== void 0 ? setTimeout(e.close, 0) : e.close() + } + function Je(n) { + n.preventDefault(), + n.stopPropagation(); + var t = function(g) { + return g.classList && g.classList.contains("flatpickr-day") && !g.classList.contains("flatpickr-disabled") && !g.classList.contains("notAllowed") + } + , i = Ae(L(n), t); + if (i !== void 0) { + var o = i + , l = e.latestSelectedDateObj = new Date(o.dateObj.getTime()) + , s = (l.getMonth() < e.currentMonth || l.getMonth() > e.currentMonth + e.config.showMonths - 1) && e.config.mode !== "range"; + if (e.selectedDateElem = o, + e.config.mode === "single") + e.selectedDates = [l]; + else if (e.config.mode === "multiple") { + var v = _e(l); + v ? e.selectedDates.splice(parseInt(v), 1) : e.selectedDates.push(l) + } else + e.config.mode === "range" && (e.selectedDates.length === 2 && e.clear(!1, !1), + e.latestSelectedDateObj = l, + e.selectedDates.push(l), + j(l, e.selectedDates[0], !0) !== 0 && e.selectedDates.sort(function(g, E) { + return g.getTime() - E.getTime() + })); + if (_(), + s) { + var d = e.currentYear !== l.getFullYear(); + e.currentYear = l.getFullYear(), + e.currentMonth = l.getMonth(), + d && (S("onYearChange"), + X()), + S("onMonthChange") + } + if (ve(), + fe(), + J(), + !s && e.config.mode !== "range" && e.config.showMonths === 1 ? $(o) : e.selectedDateElem !== void 0 && e.hourElement === void 0 && e.selectedDateElem && e.selectedDateElem.focus(), + e.hourElement !== void 0 && e.hourElement !== void 0 && e.hourElement.focus(), + e.config.closeOnSelect) { + var C = e.config.mode === "single" && !e.config.enableTime + , f = e.config.mode === "range" && e.selectedDates.length === 2 && !e.config.enableTime; + (C || f) && Te() + } + q() + } + } + var pe = { + locale: [Ue, Re], + showMonths: [Le, w, je], + minDate: [m], + maxDate: [m], + positionElement: [ze], + clickOpens: [function() { + e.config.clickOpens === !0 ? (M(e._input, "focus", e.open), + M(e._input, "click", e.open)) : (e._input.removeEventListener("focus", e.open), + e._input.removeEventListener("click", e.open)) + } + ] + }; + function Mn(n, t) { + if (n !== null && typeof n == "object") { + Object.assign(e.config, n); + for (var i in n) + pe[i] !== void 0 && pe[i].forEach(function(o) { + return o() + }) + } else + e.config[n] = t, + pe[n] !== void 0 ? pe[n].forEach(function(o) { + return o() + }) : De.indexOf(n) > -1 && (e.config[n] = Me(t)); + e.redraw(), + J(!0) + } + function Ve(n, t) { + var i = []; + if (n instanceof Array) + i = n.map(function(o) { + return e.parseDate(o, t) + }); + else if (n instanceof Date || typeof n == "number") + i = [e.parseDate(n, t)]; + else if (typeof n == "string") + switch (e.config.mode) { + case "single": + case "time": + i = [e.parseDate(n, t)]; + break; + case "multiple": + i = n.split(e.config.conjunction).map(function(o) { + return e.parseDate(o, t) + }); + break; + case "range": + i = n.split(e.l10n.rangeSeparator).map(function(o) { + return e.parseDate(o, t) + }); + break; + default: + break + } + else + e.config.errorHandler(new Error("Invalid date supplied: " + JSON.stringify(n))); + e.selectedDates = e.config.allowInvalidPreload ? i : i.filter(function(o) { + return o instanceof Date && G(o, !1) + }), + e.config.mode === "range" && e.selectedDates.sort(function(o, l) { + return o.getTime() - l.getTime() + }) + } + function wn(n, t, i) { + if (t === void 0 && (t = !1), + i === void 0 && (i = e.config.dateFormat), + n !== 0 && !n || n instanceof Array && n.length === 0) + return e.clear(t); + Ve(n, i), + e.latestSelectedDateObj = e.selectedDates[e.selectedDates.length - 1], + e.redraw(), + m(void 0, t), + I(), + e.selectedDates.length === 0 && e.clear(!1), + J(t), + t && S("onChange") + } + function $e(n) { + return n.slice().map(function(t) { + return typeof t == "string" || typeof t == "number" || t instanceof Date ? e.parseDate(t, void 0, !0) : t && typeof t == "object" && t.from && t.to ? { + from: e.parseDate(t.from, void 0), + to: e.parseDate(t.to, void 0) + } : t + }).filter(function(t) { + return t + }) + } + function yn() { + e.selectedDates = [], + e.now = e.parseDate(e.config.now) || new Date; + var n = e.config.defaultDate || ((e.input.nodeName === "INPUT" || e.input.nodeName === "TEXTAREA") && e.input.placeholder && e.input.value === e.input.placeholder ? null : e.input.value); + n && Ve(n, e.config.dateFormat), + e._initialDate = e.selectedDates.length > 0 ? e.selectedDates[0] : e.config.minDate && e.config.minDate.getTime() > e.now.getTime() ? e.config.minDate : e.config.maxDate && e.config.maxDate.getTime() < e.now.getTime() ? e.config.maxDate : e.now, + e.currentYear = e._initialDate.getFullYear(), + e.currentMonth = e._initialDate.getMonth(), + e.selectedDates.length > 0 && (e.latestSelectedDateObj = e.selectedDates[0]), + e.config.minTime !== void 0 && (e.config.minTime = e.parseDate(e.config.minTime, "H:i")), + e.config.maxTime !== void 0 && (e.config.maxTime = e.parseDate(e.config.maxTime, "H:i")), + e.minDateHasTime = !!e.config.minDate && (e.config.minDate.getHours() > 0 || e.config.minDate.getMinutes() > 0 || e.config.minDate.getSeconds() > 0), + e.maxDateHasTime = !!e.config.maxDate && (e.config.maxDate.getHours() > 0 || e.config.maxDate.getMinutes() > 0 || e.config.maxDate.getSeconds() > 0) + } + function xn() { + if (e.input = Be(), + !e.input) { + e.config.errorHandler(new Error("Invalid input element specified")); + return + } + e.input._type = e.input.type, + e.input.type = "text", + e.input.classList.add("flatpickr-input"), + e._input = e.input, + e.config.altInput && (e.altInput = y(e.input.nodeName, e.config.altInputClass), + e._input = e.altInput, + e.altInput.placeholder = e.input.placeholder, + e.altInput.disabled = e.input.disabled, + e.altInput.required = e.input.required, + e.altInput.tabIndex = e.input.tabIndex, + e.altInput.type = "text", + e.input.setAttribute("type", "hidden"), + !e.config.static && e.input.parentNode && e.input.parentNode.insertBefore(e.altInput, e.input.nextSibling)), + e.config.allowInput || e._input.setAttribute("readonly", "readonly"), + ze() + } + function ze() { + e._positionElement = e.config.positionElement || e._input + } + function kn() { + var n = e.config.enableTime ? e.config.noCalendar ? "time" : "datetime-local" : "date"; + e.mobileInput = y("input", e.input.className + " flatpickr-mobile"), + e.mobileInput.tabIndex = 1, + e.mobileInput.type = n, + e.mobileInput.disabled = e.input.disabled, + e.mobileInput.required = e.input.required, + e.mobileInput.placeholder = e.input.placeholder, + e.mobileFormatStr = n === "datetime-local" ? "Y-m-d\\TH:i:S" : n === "date" ? "Y-m-d" : "H:i:S", + e.selectedDates.length > 0 && (e.mobileInput.defaultValue = e.mobileInput.value = e.formatDate(e.selectedDates[0], e.mobileFormatStr)), + e.config.minDate && (e.mobileInput.min = e.formatDate(e.config.minDate, "Y-m-d")), + e.config.maxDate && (e.mobileInput.max = e.formatDate(e.config.maxDate, "Y-m-d")), + e.input.getAttribute("step") && (e.mobileInput.step = String(e.input.getAttribute("step"))), + e.input.type = "hidden", + e.altInput !== void 0 && (e.altInput.type = "hidden"); + try { + e.input.parentNode && e.input.parentNode.insertBefore(e.mobileInput, e.input.nextSibling) + } catch {} + M(e.mobileInput, "change", function(t) { + e.setDate(L(t).value, !1, e.mobileFormatStr), + S("onChange"), + S("onClose") + }) + } + function En(n) { + if (e.isOpen === !0) + return e.close(); + e.open(n) + } + function S(n, t) { + if (e.config !== void 0) { + var i = e.config[n]; + if (i !== void 0 && i.length > 0) + for (var o = 0; i[o] && o < i.length; o++) + i[o](e.selectedDates, e.input.value, e, t); + n === "onChange" && (e.input.dispatchEvent(Fe("change")), + e.input.dispatchEvent(Fe("input"))) + } + } + function Fe(n) { + var t = document.createEvent("Event"); + return t.initEvent(n, !0, !0), + t + } + function _e(n) { + for (var t = 0; t < e.selectedDates.length; t++) { + var i = e.selectedDates[t]; + if (i instanceof Date && j(i, n) === 0) + return "" + t + } + return !1 + } + function Sn(n) { + return e.config.mode !== "range" || e.selectedDates.length < 2 ? !1 : j(n, e.selectedDates[0]) >= 0 && j(n, e.selectedDates[1]) <= 0 + } + function ve() { + e.config.noCalendar || e.isMobile || !e.monthNav || (e.yearElements.forEach(function(n, t) { + var i = new Date(e.currentYear,e.currentMonth,1); + i.setMonth(e.currentMonth + t), + e.config.showMonths > 1 || e.config.monthSelectorType === "static" ? e.monthElements[t].textContent = ue(i.getMonth(), e.config.shorthandCurrentMonth, e.l10n) + " " : e.monthsDropdownContainer.value = i.getMonth().toString(), + n.value = i.getFullYear().toString() + }), + e._hidePrevMonthArrow = e.config.minDate !== void 0 && (e.currentYear === e.config.minDate.getFullYear() ? e.currentMonth <= e.config.minDate.getMonth() : e.currentYear < e.config.minDate.getFullYear()), + e._hideNextMonthArrow = e.config.maxDate !== void 0 && (e.currentYear === e.config.maxDate.getFullYear() ? e.currentMonth + 1 > e.config.maxDate.getMonth() : e.currentYear > e.config.maxDate.getFullYear())) + } + function Ie(n) { + var t = n || (e.config.altInput ? e.config.altFormat : e.config.dateFormat); + return e.selectedDates.map(function(i) { + return e.formatDate(i, t) + }).filter(function(i, o, l) { + return e.config.mode !== "range" || e.config.enableTime || l.indexOf(i) === o + }).join(e.config.mode !== "range" ? e.config.conjunction : e.l10n.rangeSeparator) + } + function J(n) { + n === void 0 && (n = !0), + e.mobileInput !== void 0 && e.mobileFormatStr && (e.mobileInput.value = e.latestSelectedDateObj !== void 0 ? e.formatDate(e.latestSelectedDateObj, e.mobileFormatStr) : ""), + e.input.value = Ie(e.config.dateFormat), + e.altInput !== void 0 && (e.altInput.value = Ie(e.config.altFormat)), + n !== !1 && S("onValueUpdate") + } + function Tn(n) { + var t = L(n) + , i = e.prevMonthNav.contains(t) + , o = e.nextMonthNav.contains(t); + i || o ? Ee(i ? -1 : 1) : e.yearElements.indexOf(t) >= 0 ? t.select() : t.classList.contains("arrowUp") ? e.changeYear(e.currentYear + 1) : t.classList.contains("arrowDown") && e.changeYear(e.currentYear - 1) + } + function Fn(n) { + n.preventDefault(); + var t = n.type === "keydown" + , i = L(n) + , o = i; + e.amPM !== void 0 && i === e.amPM && (e.amPM.textContent = e.l10n.amPM[H(e.amPM.textContent === e.l10n.amPM[0])]); + var l = parseFloat(o.getAttribute("min")) + , s = parseFloat(o.getAttribute("max")) + , v = parseFloat(o.getAttribute("step")) + , d = parseInt(o.value, 10) + , C = n.delta || (t ? n.which === 38 ? 1 : -1 : 0) + , f = d + v * C; + if (typeof o.value < "u" && o.value.length === 2) { + var g = o === e.hourElement + , E = o === e.minuteElement; + f < l ? (f = s + f + H(!g) + (H(g) && H(!e.amPM)), + E && x(void 0, -1, e.hourElement)) : f > s && (f = o === e.hourElement ? f - s - H(!e.amPM) : l, + E && x(void 0, 1, e.hourElement)), + e.amPM && g && (v === 1 ? f + d === 23 : Math.abs(f - d) > v) && (e.amPM.textContent = e.l10n.amPM[H(e.amPM.textContent === e.l10n.amPM[0])]), + o.value = O(f) + } + } + return u(), + e +} +function te(a, r) { + for (var e = Array.prototype.slice.call(a).filter(function(D) { + return D instanceof HTMLElement + }), c = [], u = 0; u < e.length; u++) { + var h = e[u]; + try { + if (h.getAttribute("data-fp-omit") !== null) + continue; + h._flatpickr !== void 0 && (h._flatpickr.destroy(), + h._flatpickr = void 0), + h._flatpickr = Rn(h, r || {}), + c.push(h._flatpickr) + } catch (D) { + console.error(D) + } + } + return c.length === 1 ? c[0] : c +} +typeof HTMLElement < "u" && typeof HTMLCollection < "u" && typeof NodeList < "u" && (HTMLCollection.prototype.flatpickr = NodeList.prototype.flatpickr = function(a) { + return te(this, a) +} +, +HTMLElement.prototype.flatpickr = function(a) { + return te([this], a) +} +); +var T = function(a, r) { + return typeof a == "string" ? te(window.document.querySelectorAll(a), r) : a instanceof Node ? te([a], r) : te(a, r) +}; +T.defaultConfig = {}; +T.l10ns = { + en: A({}, Ce), + default: A({}, Ce) +}; +T.localize = function(a) { + T.l10ns.default = A(A({}, T.l10ns.default), a) +} +; +T.setDefaults = function(a) { + T.defaultConfig = A(A({}, T.defaultConfig), a) +} +; +T.parseDate = we({}); +T.formatDate = Pe({}); +T.compareDates = j; +typeof jQuery < "u" && typeof jQuery.fn < "u" && (jQuery.fn.flatpickr = function(a) { + return te(this, a) +} +); +Date.prototype.fp_incr = function(a) { + return new Date(this.getFullYear(),this.getMonth(),this.getDate() + (typeof a == "string" ? parseInt(a, 10) : a)) +} +; +typeof window < "u" && (window.flatpickr = T); +var nn = T; +function He(a) { + for (; a.firstChild; ) + a.removeChild(a.firstChild) +} +function Z(a) { + try { + if (typeof a.composedPath == "function") { + var r = a.composedPath(); + return r[0] + } + return a.target + } catch { + return a.target + } +} +var ce = function() { + return ce = Object.assign || function(a) { + for (var r, e = 1, c = arguments.length; e < c; e++) { + r = arguments[e]; + for (var u in r) + Object.prototype.hasOwnProperty.call(r, u) && (a[u] = r[u]) + } + return a + } + , + ce.apply(this, arguments) +} + , Wn = { + confirmIcon: " ", + confirmText: "OK ", + showAlways: !1, + theme: "light" +}; +function Kn(a) { + var r = ce(ce({}, Wn), a), e, c = "flatpickr-confirm"; + return function(u) { + return u.config.noCalendar || u.isMobile ? {} : ce({ + onKeyDown: function(h, D, w, p) { + var F = Z(p) + , k = !u.config.time_24hr && F === u.amPM || u.config.time_24hr && (u.config.enableSeconds && F === u.secondElement || !u.config.enableSeconds && F === u.minuteElement); + u.config.enableTime && p.key === "Tab" && k ? (p.preventDefault(), + e.focus()) : p.key === "Enter" && F === e && u.close() + }, + onReady: function() { + e = u._createElement("div", c + " " + (r.showAlways ? "visible" : "") + " " + r.theme + "Theme", r.confirmText), + e.tabIndex = -1, + e.innerHTML, + e.addEventListener("click", u.close), + u.calendarContainer.appendChild(e), + u.loadedPlugins.push("confirmDate") + } + }, r.showAlways ? {} : { + onChange: function(h, D) { + var w = u.config.enableTime || u.config.mode === "multiple" || u.loadedPlugins.indexOf("monthSelect") !== -1 + , p = u.calendarContainer.querySelector("." + c); + if (p) { + if (D && !u.config.inline && w && p) + return p.classList.add("visible"); + p.classList.remove("visible") + } + } + }) + } +} +var tn = Kn; +var an = function(a, r, e) { + return e.months[r ? "shorthand" : "longhand"][a] +}; +var ke = function() { + return ke = Object.assign || function(a) { + for (var r, e = 1, c = arguments.length; e < c; e++) { + r = arguments[e]; + for (var u in r) + Object.prototype.hasOwnProperty.call(r, u) && (a[u] = r[u]) + } + return a + } + , + ke.apply(this, arguments) +} + , Bn = { + shorthand: !1, + dateFormat: "F Y", + altFormat: "F Y", + theme: "light" +}; +function Un(a) { + var r = ke(ke({}, Bn), a); + return function(e) { + e.config.dateFormat = r.dateFormat, + e.config.altFormat = r.altFormat; + var c = { + monthsContainer: null + }; + function u() { + if (e.rContainer) { + He(e.rContainer); + for (var m = 0; m < e.monthElements.length; m++) { + var b = e.monthElements[m]; + b.parentNode && b.parentNode.removeChild(b) + } + } + } + function h() { + e.rContainer && (c.monthsContainer = e._createElement("div", "flatpickr-monthSelect-months"), + c.monthsContainer.tabIndex = -1, + D(), + e.rContainer.appendChild(c.monthsContainer), + e.calendarContainer.classList.add("flatpickr-monthSelect-theme-" + r.theme)) + } + function D() { + if (c.monthsContainer) { + He(c.monthsContainer); + for (var m = document.createDocumentFragment(), b = 0; b < 12; b++) { + var x = e.createDay("flatpickr-monthSelect-month", new Date(e.currentYear,b), 0, b); + x.dateObj.getMonth() === new Date().getMonth() && x.dateObj.getFullYear() === new Date().getFullYear() && x.classList.add("today"), + x.textContent = an(b, r.shorthand, e.l10n), + x.addEventListener("click", k), + m.appendChild(x) + } + c.monthsContainer.appendChild(m), + e.config.minDate && e.currentYear === e.config.minDate.getFullYear() ? e.prevMonthNav.classList.add("flatpickr-disabled") : e.prevMonthNav.classList.remove("flatpickr-disabled"), + e.config.maxDate && e.currentYear === e.config.maxDate.getFullYear() ? e.nextMonthNav.classList.add("flatpickr-disabled") : e.nextMonthNav.classList.remove("flatpickr-disabled") + } + } + function w() { + e._bind(e.prevMonthNav, "click", function(m) { + m.preventDefault(), + m.stopPropagation(), + e.changeYear(e.currentYear - 1), + F(), + D() + }), + e._bind(e.nextMonthNav, "click", function(m) { + m.preventDefault(), + m.stopPropagation(), + e.changeYear(e.currentYear + 1), + F(), + D() + }), + e._bind(c.monthsContainer, "mouseover", function(m) { + e.config.mode === "range" && e.onMouseOver(Z(m), "flatpickr-monthSelect-month") + }) + } + function p() { + if (e.rContainer && e.selectedDates.length) { + for (var m = e.rContainer.querySelectorAll(".flatpickr-monthSelect-month.selected"), b = 0; b < m.length; b++) + m[b].classList.remove("selected"); + var x = e.selectedDates[0].getMonth() + , N = e.rContainer.querySelector(".flatpickr-monthSelect-month:nth-child(" + (x + 1) + ")"); + N && N.classList.add("selected") + } + } + function F() { + var m = e.selectedDates[0]; + if (m && (m = new Date(m), + m.setFullYear(e.currentYear), + e.config.minDate && m < e.config.minDate && (m = e.config.minDate), + e.config.maxDate && m > e.config.maxDate && (m = e.config.maxDate), + e.currentYear = m.getFullYear()), + e.currentYearElement.value = String(e.currentYear), + e.rContainer) { + var b = e.rContainer.querySelectorAll(".flatpickr-monthSelect-month"); + b.forEach(function(x) { + x.dateObj.setFullYear(e.currentYear), + e.config.minDate && x.dateObj < e.config.minDate || e.config.maxDate && x.dateObj > e.config.maxDate ? x.classList.add("flatpickr-disabled") : x.classList.remove("flatpickr-disabled") + }) + } + p() + } + function k(m) { + m.preventDefault(), + m.stopPropagation(); + var b = Z(m); + if (b instanceof Element && !b.classList.contains("flatpickr-disabled") && !b.classList.contains("notAllowed") && (_(b.dateObj), + e.config.closeOnSelect)) { + var x = e.config.mode === "single" + , N = e.config.mode === "range" && e.selectedDates.length === 2; + (x || N) && e.close() + } + } + function _(m) { + var b = new Date(e.currentYear,m.getMonth(),m.getDate()) + , x = []; + switch (e.config.mode) { + case "single": + x = [b]; + break; + case "multiple": + x.push(b); + break; + case "range": + e.selectedDates.length === 2 ? x = [b] : (x = e.selectedDates.concat([b]), + x.sort(function(N, W) { + return N.getTime() - W.getTime() + })); + break + } + e.setDate(x, !0), + p() + } + var I = { + 37: -1, + 39: 1, + 40: 3, + 38: -3 + }; + function P(m, b, x, N) { + var W = I[N.keyCode] !== void 0; + if (!(!W && N.keyCode !== 13) && !(!e.rContainer || !c.monthsContainer)) { + var $ = e.rContainer.querySelector(".flatpickr-monthSelect-month.selected") + , B = Array.prototype.indexOf.call(c.monthsContainer.children, document.activeElement); + if (B === -1) { + var Q = $ || c.monthsContainer.firstElementChild; + Q.focus(), + B = Q.$i + } + W ? c.monthsContainer.children[(12 + B + I[N.keyCode]) % 12].focus() : N.keyCode === 13 && c.monthsContainer.contains(document.activeElement) && _(document.activeElement.dateObj) + } + } + function K() { + var m; + ((m = e.config) === null || m === void 0 ? void 0 : m.mode) === "range" && e.selectedDates.length === 1 && e.clear(!1), + e.selectedDates.length || D() + } + function M() { + r._stubbedCurrentMonth = e._initialDate.getMonth(), + e._initialDate.setMonth(r._stubbedCurrentMonth), + e.currentMonth = r._stubbedCurrentMonth + } + function q() { + r._stubbedCurrentMonth && (e._initialDate.setMonth(r._stubbedCurrentMonth), + e.currentMonth = r._stubbedCurrentMonth, + delete r._stubbedCurrentMonth) + } + function ae() { + if (c.monthsContainer !== null) + for (var m = c.monthsContainer.querySelectorAll(".flatpickr-monthSelect-month"), b = 0; b < m.length; b++) + m[b].removeEventListener("click", k) + } + return { + onParseConfig: function() { + e.config.enableTime = !1 + }, + onValueUpdate: p, + onKeyDown: P, + onReady: [M, u, h, w, p, function() { + e.config.onClose.push(K), + e.loadedPlugins.push("monthSelect") + } + ], + onDestroy: [q, ae, function() { + e.config.onClose = e.config.onClose.filter(function(m) { + return m !== K + }) + } + ] + } + } +} +var rn = Un; +function qn() { + return function(a) { + function r(D) { + var w = Z(D); + if (w.classList.contains("flatpickr-day")) + for (var p = a.days.childNodes, F = w.$i, k = F / 7, _ = p[7 * Math.floor(k)].dateObj, I = p[7 * Math.ceil(k + .01) - 1].dateObj, P = p.length; P--; ) { + var K = p[P] + , M = K.dateObj; + M > I || M < _ ? K.classList.remove("inRange") : K.classList.add("inRange") + } + } + function e() { + var D = a.latestSelectedDateObj; + D !== void 0 && D.getMonth() === a.currentMonth && D.getFullYear() === a.currentYear && (a.weekStartDay = a.days.childNodes[7 * Math.floor(a.selectedDateElem.$i / 7)].dateObj, + a.weekEndDay = a.days.childNodes[7 * Math.ceil(a.selectedDateElem.$i / 7 + .01) - 1].dateObj); + for (var w = a.days.childNodes, p = w.length; p--; ) { + var F = w[p].dateObj; + F >= a.weekStartDay && F <= a.weekEndDay && w[p].classList.add("week", "selected") + } + } + function c() { + for (var D = a.days.childNodes, w = D.length; w--; ) + D[w].classList.remove("inRange") + } + function u() { + a.daysContainer !== void 0 && a.daysContainer.addEventListener("mouseover", r) + } + function h() { + a.daysContainer !== void 0 && a.daysContainer.removeEventListener("mouseover", r) + } + return { + onValueUpdate: e, + onMonthChange: e, + onYearChange: e, + onOpen: e, + onClose: c, + onParseConfig: function() { + a.config.mode = "single", + a.config.enableTime = !1, + a.config.dateFormat = a.config.dateFormat ? a.config.dateFormat : "\\W\\e\\e\\k #W, Y", + a.config.altFormat = a.config.altFormat ? a.config.altFormat : "\\W\\e\\e\\k #W, Y" + }, + onReady: [u, e, function() { + a.loadedPlugins.push("weekSelect") + } + ], + onDestroy: h + } + } +} +var on = qn; +function Jn(a) { + return { + state: a.state, + mode: "light", + attribs: a.attribs ?? {}, + packageConfig: a.packageConfig ?? {}, + fp: null, + get darkStatus() { + return window.matchMedia("(prefers-color-scheme: dark)").matches + }, + get getMode() { + return localStorage.getItem("theme") ? localStorage.getItem("theme") : (this.mode = this.darkStatus ? "dark" : "light", + this.mode) + }, + init: function() { + this.mode = this.darkStatus ? "dark" : "light"; + let r = { + mode: this.attribs.mode, + time_24hr: !0, + altFormat: "F j, Y", + disableMobile: !0, + initialDate: this.state, + allowInvalidPreload: !1, + static: !1, + defaultDate: this.state, + ...this.packageConfig, + plugins: [new tn({ + confirmText: "OK", + showAlways: !1, + theme: this.mode + })] + }; + if (this.getMode === "dark") { + let e = document.querySelector("#pickr-theme"); + console.log(e), + e && (e.href = this.attribs.darkThemeAsset) + } + this.attribs.monthSelect ? r.plugins.push(new rn({ + shorthand: !1, + dateFormat: a.packageConfig.dateFormat ?? "F Y", + altInput: a.packageConfig.altInput ?? !0, + theme: this.mode + })) : this.attribs.weekSelect && r.plugins.push(new on({})), + this.fp = nn(this.$refs.picker, r), + this.fp.parseDate(this.state, this.packageConfig.dateFormat), + window.addEventListener("theme-changed", e=>{ + this.mode = e.detail; + let c; + this.mode === "dark" ? c = this.attribs.darkThemeAsset : c = this.attribs.themeAsset, + document.querySelector("#pickr-theme").href = c + } + ) + } + } +} +export {Jn as default}; diff --git a/public/js/filament/filament/app.js b/public/js/filament/filament/app.js new file mode 100644 index 0000000..caff167 --- /dev/null +++ b/public/js/filament/filament/app.js @@ -0,0 +1 @@ +(()=>{var Z=Object.create,L=Object.defineProperty,ee=Object.getPrototypeOf,te=Object.prototype.hasOwnProperty,re=Object.getOwnPropertyNames,ne=Object.getOwnPropertyDescriptor,ae=s=>L(s,"__esModule",{value:!0}),ie=(s,n)=>()=>(n||(n={exports:{}},s(n.exports,n)),n.exports),oe=(s,n,p)=>{if(n&&typeof n=="object"||typeof n=="function")for(let d of re(n))!te.call(s,d)&&d!=="default"&&L(s,d,{get:()=>n[d],enumerable:!(p=ne(n,d))||p.enumerable});return s},se=s=>oe(ae(L(s!=null?Z(ee(s)):{},"default",s&&s.__esModule&&"default"in s?{get:()=>s.default,enumerable:!0}:{value:s,enumerable:!0})),s),fe=ie((s,n)=>{(function(p,d,M){if(!p)return;for(var h={8:"backspace",9:"tab",13:"enter",16:"shift",17:"ctrl",18:"alt",20:"capslock",27:"esc",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down",45:"ins",46:"del",91:"meta",93:"meta",224:"meta"},y={106:"*",107:"+",109:"-",110:".",111:"/",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'"},g={"~":"`","!":"1","@":"2","#":"3",$:"4","%":"5","^":"6","&":"7","*":"8","(":"9",")":"0",_:"-","+":"=",":":";",'"':"'","<":",",">":".","?":"/","|":"\\"},q={option:"alt",command:"meta",return:"enter",escape:"esc",plus:"+",mod:/Mac|iPod|iPhone|iPad/.test(navigator.platform)?"meta":"ctrl"},S,w=1;w<20;++w)h[111+w]="f"+w;for(w=0;w<=9;++w)h[w+96]=w.toString();function C(e,t,a){if(e.addEventListener){e.addEventListener(t,a,!1);return}e.attachEvent("on"+t,a)}function T(e){if(e.type=="keypress"){var t=String.fromCharCode(e.which);return e.shiftKey||(t=t.toLowerCase()),t}return h[e.which]?h[e.which]:y[e.which]?y[e.which]:String.fromCharCode(e.which).toLowerCase()}function V(e,t){return e.sort().join(",")===t.sort().join(",")}function $(e){var t=[];return e.shiftKey&&t.push("shift"),e.altKey&&t.push("alt"),e.ctrlKey&&t.push("ctrl"),e.metaKey&&t.push("meta"),t}function B(e){if(e.preventDefault){e.preventDefault();return}e.returnValue=!1}function H(e){if(e.stopPropagation){e.stopPropagation();return}e.cancelBubble=!0}function O(e){return e=="shift"||e=="ctrl"||e=="alt"||e=="meta"}function J(){if(!S){S={};for(var e in h)e>95&&e<112||h.hasOwnProperty(e)&&(S[h[e]]=e)}return S}function U(e,t,a){return a||(a=J()[e]?"keydown":"keypress"),a=="keypress"&&t.length&&(a="keydown"),a}function X(e){return e==="+"?["+"]:(e=e.replace(/\+{2}/g,"+plus"),e.split("+"))}function I(e,t){var a,c,b,P=[];for(a=X(e),b=0;b1){z(r,m,o,l);return}f=I(r,l),t._callbacks[f.key]=t._callbacks[f.key]||[],j(f.key,f.modifiers,{type:f.action},i,r,u),t._callbacks[f.key][i?"unshift":"push"]({callback:o,modifiers:f.modifiers,action:f.action,seq:i,level:u,combo:r})}t._bindMultiple=function(r,o,l){for(var i=0;i-1||D(t,a.target))return!1;if("composedPath"in e&&typeof e.composedPath=="function"){var c=e.composedPath()[0];c!==e.target&&(t=c)}return t.tagName=="INPUT"||t.tagName=="SELECT"||t.tagName=="TEXTAREA"||t.isContentEditable},v.prototype.handleKey=function(){var e=this;return e._handleKey.apply(e,arguments)},v.addKeycodes=function(e){for(var t in e)e.hasOwnProperty(t)&&(h[t]=e[t]);S=null},v.init=function(){var e=v(d);for(var t in e)t.charAt(0)!=="_"&&(v[t]=function(a){return function(){return e[a].apply(e,arguments)}}(t))},v.init(),p.Mousetrap=v,typeof n<"u"&&n.exports&&(n.exports=v),typeof define=="function"&&define.amd&&define(function(){return v})})(typeof window<"u"?window:null,typeof window<"u"?document:null)}),R=se(fe());(function(s){if(s){var n={},p=s.prototype.stopCallback;s.prototype.stopCallback=function(d,M,h,y){var g=this;return g.paused?!0:n[h]||n[y]?!1:p.call(g,d,M,h)},s.prototype.bindGlobal=function(d,M,h){var y=this;if(y.bind(d,M,h),d instanceof Array){for(var g=0;g{s.directive("mousetrap",(n,{modifiers:p,expression:d},{evaluate:M})=>{let h=()=>d?M(d):n.click();p=p.map(y=>y.replace(/-/g,"+")),p.includes("global")&&(p=p.filter(y=>y!=="global"),R.default.bindGlobal(p,y=>{y.preventDefault(),h()})),R.default.bind(p,y=>{y.preventDefault(),h()})})},F=le;document.addEventListener("alpine:init",()=>{window.Alpine.plugin(F),window.Alpine.store("sidebar",{isOpen:window.Alpine.$persist(!0).as("isOpen"),collapsedGroups:window.Alpine.$persist(null).as("collapsedGroups"),groupIsCollapsed:function(n){return this.collapsedGroups.includes(n)},collapseGroup:function(n){this.collapsedGroups.includes(n)||(this.collapsedGroups=this.collapsedGroups.concat(n))},toggleCollapsedGroup:function(n){this.collapsedGroups=this.collapsedGroups.includes(n)?this.collapsedGroups.filter(p=>p!==n):this.collapsedGroups.concat(n)},close:function(){this.isOpen=!1},open:function(){this.isOpen=!0}});let s=localStorage.getItem("theme")??getComputedStyle(document.documentElement).getPropertyValue("--default-theme-mode");window.Alpine.store("theme",s==="dark"||s==="system"&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),window.addEventListener("theme-changed",n=>{let p=n.detail;localStorage.setItem("theme",p),p==="system"&&(p=window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),window.Alpine.store("theme",p)}),window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",n=>{localStorage.getItem("theme")==="system"&&window.Alpine.store("theme",n.matches?"dark":"light")}),window.Alpine.effect(()=>{window.Alpine.store("theme")==="dark"?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark")})});})(); diff --git a/public/js/filament/filament/echo.js b/public/js/filament/filament/echo.js new file mode 100644 index 0000000..f1a9a28 --- /dev/null +++ b/public/js/filament/filament/echo.js @@ -0,0 +1,13 @@ +(()=>{var ki=Object.create;var he=Object.defineProperty;var Si=Object.getOwnPropertyDescriptor;var Ci=Object.getOwnPropertyNames;var Ti=Object.getPrototypeOf,Pi=Object.prototype.hasOwnProperty;var xi=(l,h)=>()=>(h||l((h={exports:{}}).exports,h),h.exports);var Oi=(l,h,a,c)=>{if(h&&typeof h=="object"||typeof h=="function")for(let s of Ci(h))!Pi.call(l,s)&&s!==a&&he(l,s,{get:()=>h[s],enumerable:!(c=Si(h,s))||c.enumerable});return l};var Ai=(l,h,a)=>(a=l!=null?ki(Ti(l)):{},Oi(h||!l||!l.__esModule?he(a,"default",{value:l,enumerable:!0}):a,l));var _e=xi((yt,It)=>{(function(h,a){typeof yt=="object"&&typeof It=="object"?It.exports=a():typeof define=="function"&&define.amd?define([],a):typeof yt=="object"?yt.Pusher=a():h.Pusher=a()})(window,function(){return function(l){var h={};function a(c){if(h[c])return h[c].exports;var s=h[c]={i:c,l:!1,exports:{}};return l[c].call(s.exports,s,s.exports,a),s.l=!0,s.exports}return a.m=l,a.c=h,a.d=function(c,s,f){a.o(c,s)||Object.defineProperty(c,s,{enumerable:!0,get:f})},a.r=function(c){typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(c,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(c,"__esModule",{value:!0})},a.t=function(c,s){if(s&1&&(c=a(c)),s&8||s&4&&typeof c=="object"&&c&&c.__esModule)return c;var f=Object.create(null);if(a.r(f),Object.defineProperty(f,"default",{enumerable:!0,value:c}),s&2&&typeof c!="string")for(var d in c)a.d(f,d,function(N){return c[N]}.bind(null,d));return f},a.n=function(c){var s=c&&c.__esModule?function(){return c.default}:function(){return c};return a.d(s,"a",s),s},a.o=function(c,s){return Object.prototype.hasOwnProperty.call(c,s)},a.p="",a(a.s=2)}([function(l,h,a){"use strict";var c=this&&this.__extends||function(){var b=function(v,y){return b=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(w,O){w.__proto__=O}||function(w,O){for(var I in O)O.hasOwnProperty(I)&&(w[I]=O[I])},b(v,y)};return function(v,y){b(v,y);function w(){this.constructor=v}v.prototype=y===null?Object.create(y):(w.prototype=y.prototype,new w)}}();Object.defineProperty(h,"__esModule",{value:!0});var s=256,f=function(){function b(v){v===void 0&&(v="="),this._paddingCharacter=v}return b.prototype.encodedLength=function(v){return this._paddingCharacter?(v+2)/3*4|0:(v*8+5)/6|0},b.prototype.encode=function(v){for(var y="",w=0;w>>3*6&63),y+=this._encodeByte(O>>>2*6&63),y+=this._encodeByte(O>>>1*6&63),y+=this._encodeByte(O>>>0*6&63)}var I=v.length-w;if(I>0){var O=v[w]<<16|(I===2?v[w+1]<<8:0);y+=this._encodeByte(O>>>3*6&63),y+=this._encodeByte(O>>>2*6&63),I===2?y+=this._encodeByte(O>>>1*6&63):y+=this._paddingCharacter||"",y+=this._paddingCharacter||""}return y},b.prototype.maxDecodedLength=function(v){return this._paddingCharacter?v/4*3|0:(v*6+7)/8|0},b.prototype.decodedLength=function(v){return this.maxDecodedLength(v.length-this._getPaddingLength(v))},b.prototype.decode=function(v){if(v.length===0)return new Uint8Array(0);for(var y=this._getPaddingLength(v),w=v.length-y,O=new Uint8Array(this.maxDecodedLength(w)),I=0,q=0,M=0,J=0,F=0,z=0,B=0;q>>4,O[I++]=F<<4|z>>>2,O[I++]=z<<6|B,M|=J&s,M|=F&s,M|=z&s,M|=B&s;if(q>>4,M|=J&s,M|=F&s),q>>2,M|=z&s),q>>8&0-65-26+97,y+=51-v>>>8&26-97-52+48,y+=61-v>>>8&52-48-62+43,y+=62-v>>>8&62-43-63+47,String.fromCharCode(y)},b.prototype._decodeChar=function(v){var y=s;return y+=(42-v&v-44)>>>8&-s+v-43+62,y+=(46-v&v-48)>>>8&-s+v-47+63,y+=(47-v&v-58)>>>8&-s+v-48+52,y+=(64-v&v-91)>>>8&-s+v-65+0,y+=(96-v&v-123)>>>8&-s+v-97+26,y},b.prototype._getPaddingLength=function(v){var y=0;if(this._paddingCharacter){for(var w=v.length-1;w>=0&&v[w]===this._paddingCharacter;w--)y++;if(v.length<4||y>2)throw new Error("Base64Coder: incorrect padding")}return y},b}();h.Coder=f;var d=new f;function N(b){return d.encode(b)}h.encode=N;function P(b){return d.decode(b)}h.decode=P;var T=function(b){c(v,b);function v(){return b!==null&&b.apply(this,arguments)||this}return v.prototype._encodeByte=function(y){var w=y;return w+=65,w+=25-y>>>8&0-65-26+97,w+=51-y>>>8&26-97-52+48,w+=61-y>>>8&52-48-62+45,w+=62-y>>>8&62-45-63+95,String.fromCharCode(w)},v.prototype._decodeChar=function(y){var w=s;return w+=(44-y&y-46)>>>8&-s+y-45+62,w+=(94-y&y-96)>>>8&-s+y-95+63,w+=(47-y&y-58)>>>8&-s+y-48+52,w+=(64-y&y-91)>>>8&-s+y-65+0,w+=(96-y&y-123)>>>8&-s+y-97+26,w},v}(f);h.URLSafeCoder=T;var S=new T;function C(b){return S.encode(b)}h.encodeURLSafe=C;function x(b){return S.decode(b)}h.decodeURLSafe=x,h.encodedLength=function(b){return d.encodedLength(b)},h.maxDecodedLength=function(b){return d.maxDecodedLength(b)},h.decodedLength=function(b){return d.decodedLength(b)}},function(l,h,a){"use strict";Object.defineProperty(h,"__esModule",{value:!0});var c="utf8: invalid string",s="utf8: invalid source encoding";function f(P){for(var T=new Uint8Array(d(P)),S=0,C=0;C>6,T[S++]=128|x&63):x<55296?(T[S++]=224|x>>12,T[S++]=128|x>>6&63,T[S++]=128|x&63):(C++,x=(x&1023)<<10,x|=P.charCodeAt(C)&1023,x+=65536,T[S++]=240|x>>18,T[S++]=128|x>>12&63,T[S++]=128|x>>6&63,T[S++]=128|x&63)}return T}h.encode=f;function d(P){for(var T=0,S=0;S=P.length-1)throw new Error(c);S++,T+=4}else throw new Error(c)}return T}h.encodedLength=d;function N(P){for(var T=[],S=0;S=P.length)throw new Error(s);var b=P[++S];if((b&192)!==128)throw new Error(s);C=(C&31)<<6|b&63,x=128}else if(C<240){if(S>=P.length-1)throw new Error(s);var b=P[++S],v=P[++S];if((b&192)!==128||(v&192)!==128)throw new Error(s);C=(C&15)<<12|(b&63)<<6|v&63,x=2048}else if(C<248){if(S>=P.length-2)throw new Error(s);var b=P[++S],v=P[++S],y=P[++S];if((b&192)!==128||(v&192)!==128||(y&192)!==128)throw new Error(s);C=(C&15)<<18|(b&63)<<12|(v&63)<<6|y&63,x=65536}else throw new Error(s);if(C=55296&&C<=57343)throw new Error(s);if(C>=65536){if(C>1114111)throw new Error(s);C-=65536,T.push(String.fromCharCode(55296|C>>10)),C=56320|C&1023}}T.push(String.fromCharCode(C))}return T.join("")}h.decode=N},function(l,h,a){l.exports=a(3).default},function(l,h,a){"use strict";a.r(h);var c=function(){function e(t,n){this.lastId=0,this.prefix=t,this.name=n}return e.prototype.create=function(t){this.lastId++;var n=this.lastId,r=this.prefix+n,i=this.name+"["+n+"]",o=!1,u=function(){o||(t.apply(null,arguments),o=!0)};return this[n]=u,{number:n,id:r,name:i,callback:u}},e.prototype.remove=function(t){delete this[t.number]},e}(),s=new c("_pusher_script_","Pusher.ScriptReceivers"),f={VERSION:"7.6.0",PROTOCOL:7,wsPort:80,wssPort:443,wsPath:"",httpHost:"sockjs.pusher.com",httpPort:80,httpsPort:443,httpPath:"/pusher",stats_host:"stats.pusher.com",authEndpoint:"/pusher/auth",authTransport:"ajax",activityTimeout:12e4,pongTimeout:3e4,unavailableTimeout:1e4,cluster:"mt1",userAuthentication:{endpoint:"/pusher/user-auth",transport:"ajax"},channelAuthorization:{endpoint:"/pusher/auth",transport:"ajax"},cdn_http:"http://js.pusher.com",cdn_https:"https://js.pusher.com",dependency_suffix:""},d=f,N=function(){function e(t){this.options=t,this.receivers=t.receivers||s,this.loading={}}return e.prototype.load=function(t,n,r){var i=this;if(i.loading[t]&&i.loading[t].length>0)i.loading[t].push(r);else{i.loading[t]=[r];var o=m.createScriptRequest(i.getPath(t,n)),u=i.receivers.create(function(p){if(i.receivers.remove(u),i.loading[t]){var _=i.loading[t];delete i.loading[t];for(var g=function(E){E||o.cleanup()},k=0;k<_.length;k++)_[k](p,g)}});o.send(u)}},e.prototype.getRoot=function(t){var n,r=m.getDocument().location.protocol;return t&&t.useTLS||r==="https:"?n=this.options.cdn_https:n=this.options.cdn_http,n.replace(/\/*$/,"")+"/"+this.options.version},e.prototype.getPath=function(t,n){return this.getRoot(n)+"/"+t+this.options.suffix+".js"},e}(),P=N,T=new c("_pusher_dependencies","Pusher.DependenciesReceivers"),S=new P({cdn_http:d.cdn_http,cdn_https:d.cdn_https,version:d.VERSION,suffix:d.dependency_suffix,receivers:T}),C={baseUrl:"https://pusher.com",urls:{authenticationEndpoint:{path:"/docs/channels/server_api/authenticating_users"},authorizationEndpoint:{path:"/docs/channels/server_api/authorizing-users/"},javascriptQuickStart:{path:"/docs/javascript_quick_start"},triggeringClientEvents:{path:"/docs/client_api_guide/client_events#trigger-events"},encryptedChannelSupport:{fullUrl:"https://github.com/pusher/pusher-js/tree/cc491015371a4bde5743d1c87a0fbac0feb53195#encrypted-channel-support"}}},x=function(e){var t="See:",n=C.urls[e];if(!n)return"";var r;return n.fullUrl?r=n.fullUrl:n.path&&(r=C.baseUrl+n.path),r?t+" "+r:""},b={buildLogSuffix:x},v;(function(e){e.UserAuthentication="user-authentication",e.ChannelAuthorization="channel-authorization"})(v||(v={}));var y=function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)i.hasOwnProperty(o)&&(r[o]=i[o])},e(t,n)};return function(t,n){e(t,n);function r(){this.constructor=t}t.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}}(),w=function(e){y(t,e);function t(n){var r=this.constructor,i=e.call(this,n)||this;return Object.setPrototypeOf(i,r.prototype),i}return t}(Error),O=function(e){y(t,e);function t(n){var r=this.constructor,i=e.call(this,n)||this;return Object.setPrototypeOf(i,r.prototype),i}return t}(Error),I=function(e){y(t,e);function t(n){var r=this.constructor,i=e.call(this,n)||this;return Object.setPrototypeOf(i,r.prototype),i}return t}(Error),q=function(e){y(t,e);function t(n){var r=this.constructor,i=e.call(this,n)||this;return Object.setPrototypeOf(i,r.prototype),i}return t}(Error),M=function(e){y(t,e);function t(n){var r=this.constructor,i=e.call(this,n)||this;return Object.setPrototypeOf(i,r.prototype),i}return t}(Error),J=function(e){y(t,e);function t(n){var r=this.constructor,i=e.call(this,n)||this;return Object.setPrototypeOf(i,r.prototype),i}return t}(Error),F=function(e){y(t,e);function t(n){var r=this.constructor,i=e.call(this,n)||this;return Object.setPrototypeOf(i,r.prototype),i}return t}(Error),z=function(e){y(t,e);function t(n){var r=this.constructor,i=e.call(this,n)||this;return Object.setPrototypeOf(i,r.prototype),i}return t}(Error),B=function(e){y(t,e);function t(n,r){var i=this.constructor,o=e.call(this,r)||this;return o.status=n,Object.setPrototypeOf(o,i.prototype),o}return t}(Error),me=function(e,t,n,r,i){var o=m.createXHR();o.open("POST",n.endpoint,!0),o.setRequestHeader("Content-Type","application/x-www-form-urlencoded");for(var u in n.headers)o.setRequestHeader(u,n.headers[u]);if(n.headersProvider!=null){var p=n.headersProvider();for(var u in p)o.setRequestHeader(u,p[u])}return o.onreadystatechange=function(){if(o.readyState===4)if(o.status===200){var _=void 0,g=!1;try{_=JSON.parse(o.responseText),g=!0}catch{i(new B(200,"JSON returned from "+r.toString()+" endpoint was invalid, yet status code was 200. Data was: "+o.responseText),null)}g&&i(null,_)}else{var k="";switch(r){case v.UserAuthentication:k=b.buildLogSuffix("authenticationEndpoint");break;case v.ChannelAuthorization:k="Clients must be authorized to join private or presence channels. "+b.buildLogSuffix("authorizationEndpoint");break}i(new B(o.status,"Unable to retrieve auth string from "+r.toString()+" endpoint - "+("received status: "+o.status+" from "+n.endpoint+". "+k)),null)}},o.send(t),o},we=me;function ke(e){return Oe(Pe(e))}for(var nt=String.fromCharCode,Z="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",Se={},at=0,Ce=Z.length;at>>6)+nt(128|t&63):nt(224|t>>>12&15)+nt(128|t>>>6&63)+nt(128|t&63)},Pe=function(e){return e.replace(/[^\x00-\x7F]/g,Te)},xe=function(e){var t=[0,2,1][e.length%3],n=e.charCodeAt(0)<<16|(e.length>1?e.charCodeAt(1):0)<<8|(e.length>2?e.charCodeAt(2):0),r=[Z.charAt(n>>>18),Z.charAt(n>>>12&63),t>=2?"=":Z.charAt(n>>>6&63),t>=1?"=":Z.charAt(n&63)];return r.join("")},Oe=window.btoa||function(e){return e.replace(/[\s\S]{1,3}/g,xe)},Ae=function(){function e(t,n,r,i){var o=this;this.clear=n,this.timer=t(function(){o.timer&&(o.timer=i(o.timer))},r)}return e.prototype.isRunning=function(){return this.timer!==null},e.prototype.ensureAborted=function(){this.timer&&(this.clear(this.timer),this.timer=null)},e}(),jt=Ae,Nt=function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)i.hasOwnProperty(o)&&(r[o]=i[o])},e(t,n)};return function(t,n){e(t,n);function r(){this.constructor=t}t.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}}();function Ee(e){window.clearTimeout(e)}function Le(e){window.clearInterval(e)}var Q=function(e){Nt(t,e);function t(n,r){return e.call(this,setTimeout,Ee,n,function(i){return r(),null})||this}return t}(jt),Re=function(e){Nt(t,e);function t(n,r){return e.call(this,setInterval,Le,n,function(i){return r(),i})||this}return t}(jt),Ie={now:function(){return Date.now?Date.now():new Date().valueOf()},defer:function(e){return new Q(0,e)},method:function(e){for(var t=[],n=1;n0)for(var i=0;i=1002&&e.code<=1004?"backoff":null:e.code===4e3?"tls_only":e.code<4100?"refused":e.code<4200?"backoff":e.code<4300?"retry":"refused"},getCloseError:function(e){return e.code!==1e3&&e.code!==1001?{type:"PusherError",data:{code:e.code,message:e.reason||e.message}}:null}},K=Vt,kn=function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)i.hasOwnProperty(o)&&(r[o]=i[o])},e(t,n)};return function(t,n){e(t,n);function r(){this.constructor=t}t.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}}(),Sn=function(e){kn(t,e);function t(n,r){var i=e.call(this)||this;return i.id=n,i.transport=r,i.activityTimeout=r.activityTimeout,i.bindListeners(),i}return t.prototype.handlesActivityChecks=function(){return this.transport.handlesActivityChecks()},t.prototype.send=function(n){return this.transport.send(n)},t.prototype.send_event=function(n,r,i){var o={event:n,data:r};return i&&(o.channel=i),A.debug("Event sent",o),this.send(K.encodeMessage(o))},t.prototype.ping=function(){this.transport.supportsPing()?this.transport.ping():this.send_event("pusher:ping",{})},t.prototype.close=function(){this.transport.close()},t.prototype.bindListeners=function(){var n=this,r={message:function(o){var u;try{u=K.decodeMessage(o)}catch(p){n.emit("error",{type:"MessageParseError",error:p,data:o.data})}if(u!==void 0){switch(A.debug("Event recd",u),u.event){case"pusher:error":n.emit("error",{type:"PusherError",data:u.data});break;case"pusher:ping":n.emit("ping");break;case"pusher:pong":n.emit("pong");break}n.emit("message",u)}},activity:function(){n.emit("activity")},error:function(o){n.emit("error",o)},closed:function(o){i(),o&&o.code&&n.handleCloseEvent(o),n.transport=null,n.emit("closed")}},i=function(){W(r,function(o,u){n.transport.unbind(u,o)})};W(r,function(o,u){n.transport.bind(u,o)})},t.prototype.handleCloseEvent=function(n){var r=K.getCloseAction(n),i=K.getCloseError(n);i&&this.emit("error",i),r&&this.emit(r,{action:r,error:i})},t}(V),Cn=Sn,Tn=function(){function e(t,n){this.transport=t,this.callback=n,this.bindListeners()}return e.prototype.close=function(){this.unbindListeners(),this.transport.close()},e.prototype.bindListeners=function(){var t=this;this.onMessage=function(n){t.unbindListeners();var r;try{r=K.processHandshake(n)}catch(i){t.finish("error",{error:i}),t.transport.close();return}r.action==="connected"?t.finish("connected",{connection:new Cn(r.id,t.transport),activityTimeout:r.activityTimeout}):(t.finish(r.action,{error:r.error}),t.transport.close())},this.onClosed=function(n){t.unbindListeners();var r=K.getCloseAction(n)||"backoff",i=K.getCloseError(n);t.finish(r,{error:i})},this.transport.bind("message",this.onMessage),this.transport.bind("closed",this.onClosed)},e.prototype.unbindListeners=function(){this.transport.unbind("message",this.onMessage),this.transport.unbind("closed",this.onClosed)},e.prototype.finish=function(t,n){this.callback(U({transport:this.transport,action:t},n))},e}(),Pn=Tn,xn=function(){function e(t,n){this.timeline=t,this.options=n||{}}return e.prototype.send=function(t,n){this.timeline.isEmpty()||this.timeline.send(m.TimelineTransport.getAgent(this,t),n)},e}(),On=xn,An=function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)i.hasOwnProperty(o)&&(r[o]=i[o])},e(t,n)};return function(t,n){e(t,n);function r(){this.constructor=t}t.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}}(),En=function(e){An(t,e);function t(n,r){var i=e.call(this,function(o,u){A.debug("No callbacks on "+n+" for "+o)})||this;return i.name=n,i.pusher=r,i.subscribed=!1,i.subscriptionPending=!1,i.subscriptionCancelled=!1,i}return t.prototype.authorize=function(n,r){return r(null,{auth:""})},t.prototype.trigger=function(n,r){if(n.indexOf("client-")!==0)throw new w("Event '"+n+"' does not start with 'client-'");if(!this.subscribed){var i=b.buildLogSuffix("triggeringClientEvents");A.warn("Client event triggered before channel 'subscription_succeeded' event . "+i)}return this.pusher.send_event(n,r,this.name)},t.prototype.disconnect=function(){this.subscribed=!1,this.subscriptionPending=!1},t.prototype.handleEvent=function(n){var r=n.event,i=n.data;if(r==="pusher_internal:subscription_succeeded")this.handleSubscriptionSucceededEvent(n);else if(r==="pusher_internal:subscription_count")this.handleSubscriptionCountEvent(n);else if(r.indexOf("pusher_internal:")!==0){var o={};this.emit(r,i,o)}},t.prototype.handleSubscriptionSucceededEvent=function(n){this.subscriptionPending=!1,this.subscribed=!0,this.subscriptionCancelled?this.pusher.unsubscribe(this.name):this.emit("pusher:subscription_succeeded",n.data)},t.prototype.handleSubscriptionCountEvent=function(n){n.data.subscription_count&&(this.subscriptionCount=n.data.subscription_count),this.emit("pusher:subscription_count",n.data)},t.prototype.subscribe=function(){var n=this;this.subscribed||(this.subscriptionPending=!0,this.subscriptionCancelled=!1,this.authorize(this.pusher.connection.socket_id,function(r,i){r?(n.subscriptionPending=!1,A.error(r.toString()),n.emit("pusher:subscription_error",Object.assign({},{type:"AuthError",error:r.message},r instanceof B?{status:r.status}:{}))):n.pusher.send_event("pusher:subscribe",{auth:i.auth,channel_data:i.channel_data,channel:n.name})}))},t.prototype.unsubscribe=function(){this.subscribed=!1,this.pusher.send_event("pusher:unsubscribe",{channel:this.name})},t.prototype.cancelSubscription=function(){this.subscriptionCancelled=!0},t.prototype.reinstateSubscription=function(){this.subscriptionCancelled=!1},t}(V),mt=En,Ln=function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)i.hasOwnProperty(o)&&(r[o]=i[o])},e(t,n)};return function(t,n){e(t,n);function r(){this.constructor=t}t.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}}(),Rn=function(e){Ln(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.authorize=function(n,r){return this.pusher.config.channelAuthorizer({channelName:this.name,socketId:n},r)},t}(mt),wt=Rn,In=function(){function e(){this.reset()}return e.prototype.get=function(t){return Object.prototype.hasOwnProperty.call(this.members,t)?{id:t,info:this.members[t]}:null},e.prototype.each=function(t){var n=this;W(this.members,function(r,i){t(n.get(i))})},e.prototype.setMyID=function(t){this.myID=t},e.prototype.onSubscription=function(t){this.members=t.presence.hash,this.count=t.presence.count,this.me=this.get(this.myID)},e.prototype.addMember=function(t){return this.get(t.user_id)===null&&this.count++,this.members[t.user_id]=t.user_info,this.get(t.user_id)},e.prototype.removeMember=function(t){var n=this.get(t.user_id);return n&&(delete this.members[t.user_id],this.count--),n},e.prototype.reset=function(){this.members={},this.count=0,this.myID=null,this.me=null},e}(),jn=In,Nn=function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)i.hasOwnProperty(o)&&(r[o]=i[o])},e(t,n)};return function(t,n){e(t,n);function r(){this.constructor=t}t.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}}(),qn=function(e,t,n,r){function i(o){return o instanceof n?o:new n(function(u){u(o)})}return new(n||(n=Promise))(function(o,u){function p(k){try{g(r.next(k))}catch(E){u(E)}}function _(k){try{g(r.throw(k))}catch(E){u(E)}}function g(k){k.done?o(k.value):i(k.value).then(p,_)}g((r=r.apply(e,t||[])).next())})},Un=function(e,t){var n={label:0,sent:function(){if(o[0]&1)throw o[1];return o[1]},trys:[],ops:[]},r,i,o,u;return u={next:p(0),throw:p(1),return:p(2)},typeof Symbol=="function"&&(u[Symbol.iterator]=function(){return this}),u;function p(g){return function(k){return _([g,k])}}function _(g){if(r)throw new TypeError("Generator is already executing.");for(;n;)try{if(r=1,i&&(o=g[0]&2?i.return:g[0]?i.throw||((o=i.return)&&o.call(i),0):i.next)&&!(o=o.call(i,g[1])).done)return o;switch(i=0,o&&(g=[g[0]&2,o.value]),g[0]){case 0:case 1:o=g;break;case 4:return n.label++,{value:g[1],done:!1};case 5:n.label++,i=g[1],g=[0];continue;case 7:g=n.ops.pop(),n.trys.pop();continue;default:if(o=n.trys,!(o=o.length>0&&o[o.length-1])&&(g[0]===6||g[0]===2)){n=0;continue}if(g[0]===3&&(!o||g[1]>o[0]&&g[1]0&&this.emit("connecting_in",Math.round(n/1e3)),this.retryTimer=new Q(n||0,function(){r.disconnectInternally(),r.connect()})},t.prototype.clearRetryTimer=function(){this.retryTimer&&(this.retryTimer.ensureAborted(),this.retryTimer=null)},t.prototype.setUnavailableTimer=function(){var n=this;this.unavailableTimer=new Q(this.options.unavailableTimeout,function(){n.updateState("unavailable")})},t.prototype.clearUnavailableTimer=function(){this.unavailableTimer&&this.unavailableTimer.ensureAborted()},t.prototype.sendActivityCheck=function(){var n=this;this.stopActivityCheck(),this.connection.ping(),this.activityTimer=new Q(this.options.pongTimeout,function(){n.timeline.error({pong_timed_out:n.options.pongTimeout}),n.retryIn(0)})},t.prototype.resetActivityCheck=function(){var n=this;this.stopActivityCheck(),this.connection&&!this.connection.handlesActivityChecks()&&(this.activityTimer=new Q(this.activityTimeout,function(){n.sendActivityCheck()}))},t.prototype.stopActivityCheck=function(){this.activityTimer&&this.activityTimer.ensureAborted()},t.prototype.buildConnectionCallbacks=function(n){var r=this;return U({},n,{message:function(i){r.resetActivityCheck(),r.emit("message",i)},ping:function(){r.send_event("pusher:pong",{})},activity:function(){r.resetActivityCheck()},error:function(i){r.emit("error",i)},closed:function(){r.abandonConnection(),r.shouldRetry()&&r.retryIn(1e3)}})},t.prototype.buildHandshakeCallbacks=function(n){var r=this;return U({},n,{connected:function(i){r.activityTimeout=Math.min(r.options.activityTimeout,i.activityTimeout,i.connection.activityTimeout||1/0),r.clearUnavailableTimer(),r.setConnection(i.connection),r.socket_id=r.connection.id,r.updateState("connected",{socket_id:r.socket_id})}})},t.prototype.buildErrorCallbacks=function(){var n=this,r=function(i){return function(o){o.error&&n.emit("error",{type:"WebSocketError",error:o.error}),i(o)}};return{tls_only:r(function(){n.usingTLS=!0,n.updateStrategy(),n.retryIn(0)}),refused:r(function(){n.disconnect()}),backoff:r(function(){n.retryIn(1e3)}),retry:r(function(){n.retryIn(0)})}},t.prototype.setConnection=function(n){this.connection=n;for(var r in this.connectionCallbacks)this.connection.bind(r,this.connectionCallbacks[r]);this.resetActivityCheck()},t.prototype.abandonConnection=function(){if(this.connection){this.stopActivityCheck();for(var n in this.connectionCallbacks)this.connection.unbind(n,this.connectionCallbacks[n]);var r=this.connection;return this.connection=null,r}},t.prototype.updateState=function(n,r){var i=this.state;if(this.state=n,i!==n){var o=n;o==="connected"&&(o+=" with new socket ID "+r.socket_id),A.debug("State changed",i+" -> "+o),this.timeline.info({state:n,params:r}),this.emit("state_change",{previous:i,current:n}),this.emit(n,r)}},t.prototype.shouldRetry=function(){return this.state==="connecting"||this.state==="connected"},t}(V),Wn=Jn,Vn=function(){function e(){this.channels={}}return e.prototype.add=function(t,n){return this.channels[t]||(this.channels[t]=Qn(t,n)),this.channels[t]},e.prototype.all=function(){return Ne(this.channels)},e.prototype.find=function(t){return this.channels[t]},e.prototype.remove=function(t){var n=this.channels[t];return delete this.channels[t],n},e.prototype.disconnect=function(){W(this.channels,function(t){t.disconnect()})},e}(),Gn=Vn;function Qn(e,t){if(e.indexOf("private-encrypted-")===0){if(t.config.nacl)return G.createEncryptedChannel(e,t,t.config.nacl);var n="Tried to subscribe to a private-encrypted- channel but no nacl implementation available",r=b.buildLogSuffix("encryptedChannelSupport");throw new J(n+". "+r)}else{if(e.indexOf("private-")===0)return G.createPrivateChannel(e,t);if(e.indexOf("presence-")===0)return G.createPresenceChannel(e,t);if(e.indexOf("#")===0)throw new O('Cannot create a channel with name "'+e+'".');return G.createChannel(e,t)}}var Kn={createChannels:function(){return new Gn},createConnectionManager:function(e,t){return new Wn(e,t)},createChannel:function(e,t){return new mt(e,t)},createPrivateChannel:function(e,t){return new wt(e,t)},createPresenceChannel:function(e,t){return new Hn(e,t)},createEncryptedChannel:function(e,t,n){return new Bn(e,t,n)},createTimelineSender:function(e,t){return new On(e,t)},createHandshake:function(e,t){return new Pn(e,t)},createAssistantToTheTransportManager:function(e,t,n){return new wn(e,t,n)}},G=Kn,Yn=function(){function e(t){this.options=t||{},this.livesLeft=this.options.lives||1/0}return e.prototype.getAssistant=function(t){return G.createAssistantToTheTransportManager(this,t,{minPingDelay:this.options.minPingDelay,maxPingDelay:this.options.maxPingDelay})},e.prototype.isAlive=function(){return this.livesLeft>0},e.prototype.reportDeath=function(){this.livesLeft-=1},e}(),Gt=Yn,$n=function(){function e(t,n){this.strategies=t,this.loop=!!n.loop,this.failFast=!!n.failFast,this.timeout=n.timeout,this.timeoutLimit=n.timeoutLimit}return e.prototype.isSupported=function(){return zt(this.strategies,j.method("isSupported"))},e.prototype.connect=function(t,n){var r=this,i=this.strategies,o=0,u=this.timeout,p=null,_=function(g,k){k?n(null,k):(o=o+1,r.loop&&(o=o%i.length),o0&&(o=new Q(r.timeout,function(){u.abort(),i(!0)})),u=t.connect(n,function(p,_){p&&o&&o.isRunning()&&!r.failFast||(o&&o.ensureAborted(),i(p,_))}),{abort:function(){o&&o.ensureAborted(),u.abort()},forceMinPriority:function(p){u.forceMinPriority(p)}}},e}(),Y=$n,Zn=function(){function e(t){this.strategies=t}return e.prototype.isSupported=function(){return zt(this.strategies,j.method("isSupported"))},e.prototype.connect=function(t,n){return tr(this.strategies,t,function(r,i){return function(o,u){if(i[r].error=o,o){er(i)&&n(!0);return}rt(i,function(p){p.forceMinPriority(u.transport.priority)}),n(null,u)}})},e}(),St=Zn;function tr(e,t,n){var r=Dt(e,function(i,o,u,p){return i.connect(t,n(o,p))});return{abort:function(){rt(r,nr)},forceMinPriority:function(i){rt(r,function(o){o.forceMinPriority(i)})}}}function er(e){return De(e,function(t){return!!t.error})}function nr(e){!e.error&&!e.aborted&&(e.abort(),e.aborted=!0)}var rr=function(){function e(t,n,r){this.strategy=t,this.transports=n,this.ttl=r.ttl||1800*1e3,this.usingTLS=r.useTLS,this.timeline=r.timeline}return e.prototype.isSupported=function(){return this.strategy.isSupported()},e.prototype.connect=function(t,n){var r=this.usingTLS,i=or(r),o=[this.strategy];if(i&&i.timestamp+this.ttl>=j.now()){var u=this.transports[i.transport];u&&(this.timeline.info({cached:!0,transport:i.transport,latency:i.latency}),o.push(new Y([u],{timeout:i.latency*2+1e3,failFast:!0})))}var p=j.now(),_=o.pop().connect(t,function g(k,E){k?(Qt(r),o.length>0?(p=j.now(),_=o.pop().connect(t,g)):n(k)):(sr(r,E.transport.name,j.now()-p),n(null,E))});return{abort:function(){_.abort()},forceMinPriority:function(g){t=g,_&&_.forceMinPriority(g)}}},e}(),ir=rr;function Ct(e){return"pusherTransport"+(e?"TLS":"NonTLS")}function or(e){var t=m.getLocalStorage();if(t)try{var n=t[Ct(e)];if(n)return JSON.parse(n)}catch{Qt(e)}return null}function sr(e,t,n){var r=m.getLocalStorage();if(r)try{r[Ct(e)]=ct({timestamp:j.now(),transport:t,latency:n})}catch{}}function Qt(e){var t=m.getLocalStorage();if(t)try{delete t[Ct(e)]}catch{}}var ar=function(){function e(t,n){var r=n.delay;this.strategy=t,this.options={delay:r}}return e.prototype.isSupported=function(){return this.strategy.isSupported()},e.prototype.connect=function(t,n){var r=this.strategy,i,o=new Q(this.options.delay,function(){i=r.connect(t,n)});return{abort:function(){o.ensureAborted(),i&&i.abort()},forceMinPriority:function(u){t=u,i&&i.forceMinPriority(u)}}},e}(),ht=ar,cr=function(){function e(t,n,r){this.test=t,this.trueBranch=n,this.falseBranch=r}return e.prototype.isSupported=function(){var t=this.test()?this.trueBranch:this.falseBranch;return t.isSupported()},e.prototype.connect=function(t,n){var r=this.test()?this.trueBranch:this.falseBranch;return r.connect(t,n)},e}(),it=cr,ur=function(){function e(t){this.strategy=t}return e.prototype.isSupported=function(){return this.strategy.isSupported()},e.prototype.connect=function(t,n){var r=this.strategy.connect(t,function(i,o){o&&r.abort(),n(i,o)});return r},e}(),hr=ur;function ot(e){return function(){return e.isSupported()}}var lr=function(e,t,n){var r={};function i(ce,_i,bi,mi,wi){var ue=n(e,ce,_i,bi,mi,wi);return r[ce]=ue,ue}var o=Object.assign({},t,{hostNonTLS:e.wsHost+":"+e.wsPort,hostTLS:e.wsHost+":"+e.wssPort,httpPath:e.wsPath}),u=Object.assign({},o,{useTLS:!0}),p=Object.assign({},t,{hostNonTLS:e.httpHost+":"+e.httpPort,hostTLS:e.httpHost+":"+e.httpsPort,httpPath:e.httpPath}),_={loop:!0,timeout:15e3,timeoutLimit:6e4},g=new Gt({lives:2,minPingDelay:1e4,maxPingDelay:e.activityTimeout}),k=new Gt({lives:2,minPingDelay:1e4,maxPingDelay:e.activityTimeout}),E=i("ws","ws",3,o,g),X=i("wss","ws",3,u,g),pi=i("sockjs","sockjs",1,p),ne=i("xhr_streaming","xhr_streaming",1,p,k),di=i("xdr_streaming","xdr_streaming",1,p,k),re=i("xhr_polling","xhr_polling",1,p),vi=i("xdr_polling","xdr_polling",1,p),ie=new Y([E],_),yi=new Y([X],_),gi=new Y([pi],_),oe=new Y([new it(ot(ne),ne,di)],_),se=new Y([new it(ot(re),re,vi)],_),ae=new Y([new it(ot(oe),new St([oe,new ht(se,{delay:4e3})]),se)],_),Ot=new it(ot(ae),ae,gi),At;return t.useTLS?At=new St([ie,new ht(Ot,{delay:2e3})]):At=new St([ie,new ht(yi,{delay:2e3}),new ht(Ot,{delay:5e3})]),new ir(new hr(new it(ot(E),At,Ot)),r,{ttl:18e5,timeline:t.timeline,useTLS:t.useTLS})},fr=lr,pr=function(){var e=this;e.timeline.info(e.buildTimelineMessage({transport:e.name+(e.options.useTLS?"s":"")})),e.hooks.isInitialized()?e.changeState("initialized"):e.hooks.file?(e.changeState("initializing"),S.load(e.hooks.file,{useTLS:e.options.useTLS},function(t,n){e.hooks.isInitialized()?(e.changeState("initialized"),n(!0)):(t&&e.onError(t),e.onClose(),n(!1))})):e.onClose()},dr={getRequest:function(e){var t=new window.XDomainRequest;return t.ontimeout=function(){e.emit("error",new I),e.close()},t.onerror=function(n){e.emit("error",n),e.close()},t.onprogress=function(){t.responseText&&t.responseText.length>0&&e.onChunk(200,t.responseText)},t.onload=function(){t.responseText&&t.responseText.length>0&&e.onChunk(200,t.responseText),e.emit("finished",200),e.close()},t},abortRequest:function(e){e.ontimeout=e.onerror=e.onprogress=e.onload=null,e.abort()}},vr=dr,yr=function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)i.hasOwnProperty(o)&&(r[o]=i[o])},e(t,n)};return function(t,n){e(t,n);function r(){this.constructor=t}t.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}}(),gr=256*1024,_r=function(e){yr(t,e);function t(n,r,i){var o=e.call(this)||this;return o.hooks=n,o.method=r,o.url=i,o}return t.prototype.start=function(n){var r=this;this.position=0,this.xhr=this.hooks.getRequest(this),this.unloader=function(){r.close()},m.addUnloadListener(this.unloader),this.xhr.open(this.method,this.url,!0),this.xhr.setRequestHeader&&this.xhr.setRequestHeader("Content-Type","application/json"),this.xhr.send(n)},t.prototype.close=function(){this.unloader&&(m.removeUnloadListener(this.unloader),this.unloader=null),this.xhr&&(this.hooks.abortRequest(this.xhr),this.xhr=null)},t.prototype.onChunk=function(n,r){for(;;){var i=this.advanceBuffer(r);if(i)this.emit("chunk",{status:n,data:i});else break}this.isBufferTooLong(r)&&this.emit("buffer_too_long")},t.prototype.advanceBuffer=function(n){var r=n.slice(this.position),i=r.indexOf(` +`);return i!==-1?(this.position+=i+1,r.slice(0,i)):null},t.prototype.isBufferTooLong=function(n){return this.position===n.length&&n.length>gr},t}(V),br=_r,Tt;(function(e){e[e.CONNECTING=0]="CONNECTING",e[e.OPEN=1]="OPEN",e[e.CLOSED=3]="CLOSED"})(Tt||(Tt={}));var $=Tt,mr=1,wr=function(){function e(t,n){this.hooks=t,this.session=Yt(1e3)+"/"+Tr(8),this.location=kr(n),this.readyState=$.CONNECTING,this.openStream()}return e.prototype.send=function(t){return this.sendRaw(JSON.stringify([t]))},e.prototype.ping=function(){this.hooks.sendHeartbeat(this)},e.prototype.close=function(t,n){this.onClose(t,n,!0)},e.prototype.sendRaw=function(t){if(this.readyState===$.OPEN)try{return m.createSocketRequest("POST",Kt(Sr(this.location,this.session))).start(t),!0}catch{return!1}else return!1},e.prototype.reconnect=function(){this.closeStream(),this.openStream()},e.prototype.onClose=function(t,n,r){this.closeStream(),this.readyState=$.CLOSED,this.onclose&&this.onclose({code:t,reason:n,wasClean:r})},e.prototype.onChunk=function(t){if(t.status===200){this.readyState===$.OPEN&&this.onActivity();var n,r=t.data.slice(0,1);switch(r){case"o":n=JSON.parse(t.data.slice(1)||"{}"),this.onOpen(n);break;case"a":n=JSON.parse(t.data.slice(1)||"[]");for(var i=0;i0&&e.onChunk(n.status,n.responseText);break;case 4:n.responseText&&n.responseText.length>0&&e.onChunk(n.status,n.responseText),e.emit("finished",n.status),e.close();break}},n},abortRequest:function(e){e.onreadystatechange=null,e.abort()}},Rr=Lr,Ir={createStreamingSocket:function(e){return this.createSocket(Or,e)},createPollingSocket:function(e){return this.createSocket(Er,e)},createSocket:function(e,t){return new Pr(e,t)},createXHR:function(e,t){return this.createRequest(Rr,e,t)},createRequest:function(e,t,n){return new br(e,t,n)}},$t=Ir;$t.createXDR=function(e,t){return this.createRequest(vr,e,t)};var jr=$t,Nr={nextAuthCallbackID:1,auth_callbacks:{},ScriptReceivers:s,DependenciesReceivers:T,getDefaultStrategy:fr,Transports:yn,transportConnectionInitializer:pr,HTTPFactory:jr,TimelineTransport:Ye,getXHRAPI:function(){return window.XMLHttpRequest},getWebSocketAPI:function(){return window.WebSocket||window.MozWebSocket},setup:function(e){var t=this;window.Pusher=e;var n=function(){t.onDocumentBody(e.ready)};window.JSON?n():S.load("json2",{},n)},getDocument:function(){return document},getProtocol:function(){return this.getDocument().location.protocol},getAuthorizers:function(){return{ajax:we,jsonp:Xe}},onDocumentBody:function(e){var t=this;document.body?e():setTimeout(function(){t.onDocumentBody(e)},0)},createJSONPRequest:function(e,t){return new Ge(e,t)},createScriptRequest:function(e){return new We(e)},getLocalStorage:function(){try{return window.localStorage}catch{return}},createXHR:function(){return this.getXHRAPI()?this.createXMLHttpRequest():this.createMicrosoftXHR()},createXMLHttpRequest:function(){var e=this.getXHRAPI();return new e},createMicrosoftXHR:function(){return new ActiveXObject("Microsoft.XMLHTTP")},getNetwork:function(){return bn},createWebSocket:function(e){var t=this.getWebSocketAPI();return new t(e)},createSocketRequest:function(e,t){if(this.isXHRSupported())return this.HTTPFactory.createXHR(e,t);if(this.isXDRSupported(t.indexOf("https:")===0))return this.HTTPFactory.createXDR(e,t);throw"Cross-origin HTTP requests are not supported"},isXHRSupported:function(){var e=this.getXHRAPI();return!!e&&new e().withCredentials!==void 0},isXDRSupported:function(e){var t=e?"https:":"http:",n=this.getProtocol();return!!window.XDomainRequest&&n===t},addUnloadListener:function(e){window.addEventListener!==void 0?window.addEventListener("unload",e,!1):window.attachEvent!==void 0&&window.attachEvent("onunload",e)},removeUnloadListener:function(e){window.addEventListener!==void 0?window.removeEventListener("unload",e,!1):window.detachEvent!==void 0&&window.detachEvent("onunload",e)},randomInt:function(e){var t=function(){var n=window.crypto||window.msCrypto,r=n.getRandomValues(new Uint32Array(1))[0];return r/Math.pow(2,32)};return Math.floor(t()*e)}},m=Nr,Pt;(function(e){e[e.ERROR=3]="ERROR",e[e.INFO=6]="INFO",e[e.DEBUG=7]="DEBUG"})(Pt||(Pt={}));var lt=Pt,qr=function(){function e(t,n,r){this.key=t,this.session=n,this.events=[],this.options=r||{},this.sent=0,this.uniqueID=0}return e.prototype.log=function(t,n){t<=this.options.level&&(this.events.push(U({},n,{timestamp:j.now()})),this.options.limit&&this.events.length>this.options.limit&&this.events.shift())},e.prototype.error=function(t){this.log(lt.ERROR,t)},e.prototype.info=function(t){this.log(lt.INFO,t)},e.prototype.debug=function(t){this.log(lt.DEBUG,t)},e.prototype.isEmpty=function(){return this.events.length===0},e.prototype.send=function(t,n){var r=this,i=U({session:this.session,bundle:this.sent+1,key:this.key,lib:"js",version:this.options.version,cluster:this.options.cluster,features:this.options.features,timeline:this.events},this.options.params);return this.events=[],t(i,function(o,u){o||r.sent++,n&&n(o,u)}),!0},e.prototype.generateUniqueID=function(){return this.uniqueID++,this.uniqueID},e}(),Ur=qr,Dr=function(){function e(t,n,r,i){this.name=t,this.priority=n,this.transport=r,this.options=i||{}}return e.prototype.isSupported=function(){return this.transport.isSupported({useTLS:this.options.useTLS})},e.prototype.connect=function(t,n){var r=this;if(this.isSupported()){if(this.priority"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Li(l){if(l===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return l}function Ri(l,h){if(h&&(typeof h=="object"||typeof h=="function"))return h;if(h!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return Li(l)}function H(l){var h=Ei();return function(){var c=pt(l),s;if(h){var f=pt(this).constructor;s=Reflect.construct(c,arguments,f)}else s=c.apply(this,arguments);return Ri(this,s)}}var Lt=function(){function l(){L(this,l)}return R(l,[{key:"listenForWhisper",value:function(a,c){return this.listen(".client-"+a,c)}},{key:"notification",value:function(a){return this.listen(".Illuminate\\Notifications\\Events\\BroadcastNotificationCreated",a)}},{key:"stopListeningForWhisper",value:function(a,c){return this.stopListening(".client-"+a,c)}}]),l}(),de=function(){function l(h){L(this,l),this.namespace=h}return R(l,[{key:"format",value:function(a){return[".","\\"].includes(a.charAt(0))?a.substring(1):(this.namespace&&(a=this.namespace+"."+a),a.replace(/\./g,"\\"))}},{key:"setNamespace",value:function(a){this.namespace=a}}]),l}(),vt=function(l){D(a,l);var h=H(a);function a(c,s,f){var d;return L(this,a),d=h.call(this),d.name=s,d.pusher=c,d.options=f,d.eventFormatter=new de(d.options.namespace),d.subscribe(),d}return R(a,[{key:"subscribe",value:function(){this.subscription=this.pusher.subscribe(this.name)}},{key:"unsubscribe",value:function(){this.pusher.unsubscribe(this.name)}},{key:"listen",value:function(s,f){return this.on(this.eventFormatter.format(s),f),this}},{key:"listenToAll",value:function(s){var f=this;return this.subscription.bind_global(function(d,N){if(!d.startsWith("pusher:")){var P=f.options.namespace.replace(/\./g,"\\"),T=d.startsWith(P)?d.substring(P.length+1):"."+d;s(T,N)}}),this}},{key:"stopListening",value:function(s,f){return f?this.subscription.unbind(this.eventFormatter.format(s),f):this.subscription.unbind(this.eventFormatter.format(s)),this}},{key:"stopListeningToAll",value:function(s){return s?this.subscription.unbind_global(s):this.subscription.unbind_global(),this}},{key:"subscribed",value:function(s){return this.on("pusher:subscription_succeeded",function(){s()}),this}},{key:"error",value:function(s){return this.on("pusher:subscription_error",function(f){s(f)}),this}},{key:"on",value:function(s,f){return this.subscription.bind(s,f),this}}]),a}(Lt),Ii=function(l){D(a,l);var h=H(a);function a(){return L(this,a),h.apply(this,arguments)}return R(a,[{key:"whisper",value:function(s,f){return this.pusher.channels.channels[this.name].trigger("client-".concat(s),f),this}}]),a}(vt),ji=function(l){D(a,l);var h=H(a);function a(){return L(this,a),h.apply(this,arguments)}return R(a,[{key:"whisper",value:function(s,f){return this.pusher.channels.channels[this.name].trigger("client-".concat(s),f),this}}]),a}(vt),Ni=function(l){D(a,l);var h=H(a);function a(){return L(this,a),h.apply(this,arguments)}return R(a,[{key:"here",value:function(s){return this.on("pusher:subscription_succeeded",function(f){s(Object.keys(f.members).map(function(d){return f.members[d]}))}),this}},{key:"joining",value:function(s){return this.on("pusher:member_added",function(f){s(f.info)}),this}},{key:"whisper",value:function(s,f){return this.pusher.channels.channels[this.name].trigger("client-".concat(s),f),this}},{key:"leaving",value:function(s){return this.on("pusher:member_removed",function(f){s(f.info)}),this}}]),a}(vt),ve=function(l){D(a,l);var h=H(a);function a(c,s,f){var d;return L(this,a),d=h.call(this),d.events={},d.listeners={},d.name=s,d.socket=c,d.options=f,d.eventFormatter=new de(d.options.namespace),d.subscribe(),d}return R(a,[{key:"subscribe",value:function(){this.socket.emit("subscribe",{channel:this.name,auth:this.options.auth||{}})}},{key:"unsubscribe",value:function(){this.unbind(),this.socket.emit("unsubscribe",{channel:this.name,auth:this.options.auth||{}})}},{key:"listen",value:function(s,f){return this.on(this.eventFormatter.format(s),f),this}},{key:"stopListening",value:function(s,f){return this.unbindEvent(this.eventFormatter.format(s),f),this}},{key:"subscribed",value:function(s){return this.on("connect",function(f){s(f)}),this}},{key:"error",value:function(s){return this}},{key:"on",value:function(s,f){var d=this;return this.listeners[s]=this.listeners[s]||[],this.events[s]||(this.events[s]=function(N,P){d.name===N&&d.listeners[s]&&d.listeners[s].forEach(function(T){return T(P)})},this.socket.on(s,this.events[s])),this.listeners[s].push(f),this}},{key:"unbind",value:function(){var s=this;Object.keys(this.events).forEach(function(f){s.unbindEvent(f)})}},{key:"unbindEvent",value:function(s,f){this.listeners[s]=this.listeners[s]||[],f&&(this.listeners[s]=this.listeners[s].filter(function(d){return d!==f})),(!f||this.listeners[s].length===0)&&(this.events[s]&&(this.socket.removeListener(s,this.events[s]),delete this.events[s]),delete this.listeners[s])}}]),a}(Lt),ye=function(l){D(a,l);var h=H(a);function a(){return L(this,a),h.apply(this,arguments)}return R(a,[{key:"whisper",value:function(s,f){return this.socket.emit("client event",{channel:this.name,event:"client-".concat(s),data:f}),this}}]),a}(ve),qi=function(l){D(a,l);var h=H(a);function a(){return L(this,a),h.apply(this,arguments)}return R(a,[{key:"here",value:function(s){return this.on("presence:subscribed",function(f){s(f.map(function(d){return d.user_info}))}),this}},{key:"joining",value:function(s){return this.on("presence:joining",function(f){return s(f.user_info)}),this}},{key:"whisper",value:function(s,f){return this.socket.emit("client event",{channel:this.name,event:"client-".concat(s),data:f}),this}},{key:"leaving",value:function(s){return this.on("presence:leaving",function(f){return s(f.user_info)}),this}}]),a}(ye),dt=function(l){D(a,l);var h=H(a);function a(){return L(this,a),h.apply(this,arguments)}return R(a,[{key:"subscribe",value:function(){}},{key:"unsubscribe",value:function(){}},{key:"listen",value:function(s,f){return this}},{key:"listenToAll",value:function(s){return this}},{key:"stopListening",value:function(s,f){return this}},{key:"subscribed",value:function(s){return this}},{key:"error",value:function(s){return this}},{key:"on",value:function(s,f){return this}}]),a}(Lt),fe=function(l){D(a,l);var h=H(a);function a(){return L(this,a),h.apply(this,arguments)}return R(a,[{key:"whisper",value:function(s,f){return this}}]),a}(dt),Ui=function(l){D(a,l);var h=H(a);function a(){return L(this,a),h.apply(this,arguments)}return R(a,[{key:"here",value:function(s){return this}},{key:"joining",value:function(s){return this}},{key:"whisper",value:function(s,f){return this}},{key:"leaving",value:function(s){return this}}]),a}(dt),Rt=function(){function l(h){L(this,l),this._defaultOptions={auth:{headers:{}},authEndpoint:"/broadcasting/auth",userAuthentication:{endpoint:"/broadcasting/user-auth",headers:{}},broadcaster:"pusher",csrfToken:null,bearerToken:null,host:null,key:null,namespace:"App.Events"},this.setOptions(h),this.connect()}return R(l,[{key:"setOptions",value:function(a){this.options=st(this._defaultOptions,a);var c=this.csrfToken();return c&&(this.options.auth.headers["X-CSRF-TOKEN"]=c,this.options.userAuthentication.headers["X-CSRF-TOKEN"]=c),c=this.options.bearerToken,c&&(this.options.auth.headers.Authorization="Bearer "+c,this.options.userAuthentication.headers.Authorization="Bearer "+c),a}},{key:"csrfToken",value:function(){var a;return typeof window<"u"&&window.Laravel&&window.Laravel.csrfToken?window.Laravel.csrfToken:this.options.csrfToken?this.options.csrfToken:typeof document<"u"&&typeof document.querySelector=="function"&&(a=document.querySelector('meta[name="csrf-token"]'))?a.getAttribute("content"):null}}]),l}(),pe=function(l){D(a,l);var h=H(a);function a(){var c;return L(this,a),c=h.apply(this,arguments),c.channels={},c}return R(a,[{key:"connect",value:function(){typeof this.options.client<"u"?this.pusher=this.options.client:this.options.Pusher?this.pusher=new this.options.Pusher(this.options.key,this.options):this.pusher=new Pusher(this.options.key,this.options)}},{key:"signin",value:function(){this.pusher.signin()}},{key:"listen",value:function(s,f,d){return this.channel(s).listen(f,d)}},{key:"channel",value:function(s){return this.channels[s]||(this.channels[s]=new vt(this.pusher,s,this.options)),this.channels[s]}},{key:"privateChannel",value:function(s){return this.channels["private-"+s]||(this.channels["private-"+s]=new Ii(this.pusher,"private-"+s,this.options)),this.channels["private-"+s]}},{key:"encryptedPrivateChannel",value:function(s){return this.channels["private-encrypted-"+s]||(this.channels["private-encrypted-"+s]=new ji(this.pusher,"private-encrypted-"+s,this.options)),this.channels["private-encrypted-"+s]}},{key:"presenceChannel",value:function(s){return this.channels["presence-"+s]||(this.channels["presence-"+s]=new Ni(this.pusher,"presence-"+s,this.options)),this.channels["presence-"+s]}},{key:"leave",value:function(s){var f=this,d=[s,"private-"+s,"private-encrypted-"+s,"presence-"+s];d.forEach(function(N,P){f.leaveChannel(N)})}},{key:"leaveChannel",value:function(s){this.channels[s]&&(this.channels[s].unsubscribe(),delete this.channels[s])}},{key:"socketId",value:function(){return this.pusher.connection.socket_id}},{key:"disconnect",value:function(){this.pusher.disconnect()}}]),a}(Rt),Di=function(l){D(a,l);var h=H(a);function a(){var c;return L(this,a),c=h.apply(this,arguments),c.channels={},c}return R(a,[{key:"connect",value:function(){var s=this,f=this.getSocketIO();return this.socket=f(this.options.host,this.options),this.socket.on("reconnect",function(){Object.values(s.channels).forEach(function(d){d.subscribe()})}),this.socket}},{key:"getSocketIO",value:function(){if(typeof this.options.client<"u")return this.options.client;if(typeof io<"u")return io;throw new Error("Socket.io client not found. Should be globally available or passed via options.client")}},{key:"listen",value:function(s,f,d){return this.channel(s).listen(f,d)}},{key:"channel",value:function(s){return this.channels[s]||(this.channels[s]=new ve(this.socket,s,this.options)),this.channels[s]}},{key:"privateChannel",value:function(s){return this.channels["private-"+s]||(this.channels["private-"+s]=new ye(this.socket,"private-"+s,this.options)),this.channels["private-"+s]}},{key:"presenceChannel",value:function(s){return this.channels["presence-"+s]||(this.channels["presence-"+s]=new qi(this.socket,"presence-"+s,this.options)),this.channels["presence-"+s]}},{key:"leave",value:function(s){var f=this,d=[s,"private-"+s,"presence-"+s];d.forEach(function(N){f.leaveChannel(N)})}},{key:"leaveChannel",value:function(s){this.channels[s]&&(this.channels[s].unsubscribe(),delete this.channels[s])}},{key:"socketId",value:function(){return this.socket.id}},{key:"disconnect",value:function(){this.socket.disconnect()}}]),a}(Rt),Hi=function(l){D(a,l);var h=H(a);function a(){var c;return L(this,a),c=h.apply(this,arguments),c.channels={},c}return R(a,[{key:"connect",value:function(){}},{key:"listen",value:function(s,f,d){return new dt}},{key:"channel",value:function(s){return new dt}},{key:"privateChannel",value:function(s){return new fe}},{key:"encryptedPrivateChannel",value:function(s){return new fe}},{key:"presenceChannel",value:function(s){return new Ui}},{key:"leave",value:function(s){}},{key:"leaveChannel",value:function(s){}},{key:"socketId",value:function(){return"fake-socket-id"}},{key:"disconnect",value:function(){}}]),a}(Rt),ge=function(){function l(h){L(this,l),this.options=h,this.connect(),this.options.withoutInterceptors||this.registerInterceptors()}return R(l,[{key:"channel",value:function(a){return this.connector.channel(a)}},{key:"connect",value:function(){if(this.options.broadcaster=="reverb")this.connector=new pe(st(st({},this.options),{cluster:""}));else if(this.options.broadcaster=="pusher")this.connector=new pe(this.options);else if(this.options.broadcaster=="socket.io")this.connector=new Di(this.options);else if(this.options.broadcaster=="null")this.connector=new Hi(this.options);else if(typeof this.options.broadcaster=="function")this.connector=new this.options.broadcaster(this.options);else throw new Error("Broadcaster ".concat(ft(this.options.broadcaster)," ").concat(this.options.broadcaster," is not supported."))}},{key:"disconnect",value:function(){this.connector.disconnect()}},{key:"join",value:function(a){return this.connector.presenceChannel(a)}},{key:"leave",value:function(a){this.connector.leave(a)}},{key:"leaveChannel",value:function(a){this.connector.leaveChannel(a)}},{key:"leaveAllChannels",value:function(){for(var a in this.connector.channels)this.leaveChannel(a)}},{key:"listen",value:function(a,c,s){return this.connector.listen(a,c,s)}},{key:"private",value:function(a){return this.connector.privateChannel(a)}},{key:"encryptedPrivate",value:function(a){return this.connector.encryptedPrivateChannel(a)}},{key:"socketId",value:function(){return this.connector.socketId()}},{key:"registerInterceptors",value:function(){typeof Vue=="function"&&Vue.http&&this.registerVueRequestInterceptor(),typeof axios=="function"&&this.registerAxiosRequestInterceptor(),typeof jQuery=="function"&&this.registerjQueryAjaxSetup(),(typeof Turbo>"u"?"undefined":ft(Turbo))==="object"&&this.registerTurboRequestInterceptor()}},{key:"registerVueRequestInterceptor",value:function(){var a=this;Vue.http.interceptors.push(function(c,s){a.socketId()&&c.headers.set("X-Socket-ID",a.socketId()),s()})}},{key:"registerAxiosRequestInterceptor",value:function(){var a=this;axios.interceptors.request.use(function(c){return a.socketId()&&(c.headers["X-Socket-Id"]=a.socketId()),c})}},{key:"registerjQueryAjaxSetup",value:function(){var a=this;typeof jQuery.ajax<"u"&&jQuery.ajaxPrefilter(function(c,s,f){a.socketId()&&f.setRequestHeader("X-Socket-Id",a.socketId())})}},{key:"registerTurboRequestInterceptor",value:function(){var a=this;document.addEventListener("turbo:before-fetch-request",function(c){c.detail.fetchOptions.headers["X-Socket-Id"]=a.socketId()})}}]),l}();var be=Ai(_e(),1);window.EchoFactory=ge;window.Pusher=be.default;})(); +/*! Bundled license information: + +pusher-js/dist/web/pusher.js: + (*! + * Pusher JavaScript Library v7.6.0 + * https://pusher.com/ + * + * Copyright 2020, Pusher + * Released under the MIT licence. + *) +*/ diff --git a/public/js/filament/forms/components/color-picker.js b/public/js/filament/forms/components/color-picker.js new file mode 100644 index 0000000..67e4f5d --- /dev/null +++ b/public/js/filament/forms/components/color-picker.js @@ -0,0 +1 @@ +var c=(e,t=0,r=1)=>e>r?r:eMath.round(r*e)/r;var nt={grad:360/400,turn:360,rad:360/(Math.PI*2)},F=e=>G(b(e)),b=e=>(e[0]==="#"&&(e=e.substr(1)),e.length<6?{r:parseInt(e[0]+e[0],16),g:parseInt(e[1]+e[1],16),b:parseInt(e[2]+e[2],16),a:1}:{r:parseInt(e.substr(0,2),16),g:parseInt(e.substr(2,2),16),b:parseInt(e.substr(4,2),16),a:1}),it=(e,t="deg")=>Number(e)*(nt[t]||1),lt=e=>{let r=/hsla?\(?\s*(-?\d*\.?\d+)(deg|rad|grad|turn)?[,\s]+(-?\d*\.?\d+)%?[,\s]+(-?\d*\.?\d+)%?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i.exec(e);return r?ct({h:it(r[1],r[2]),s:Number(r[3]),l:Number(r[4]),a:r[5]===void 0?1:Number(r[5])/(r[6]?100:1)}):{h:0,s:0,v:0,a:1}},J=lt,ct=({h:e,s:t,l:r,a:o})=>(t*=(r<50?r:100-r)/100,{h:e,s:t>0?2*t/(r+t)*100:0,v:r+t,a:o}),X=e=>pt(A(e)),Y=({h:e,s:t,v:r,a:o})=>{let s=(200-t)*r/100;return{h:n(e),s:n(s>0&&s<200?t*r/100/(s<=100?s:200-s)*100:0),l:n(s/2),a:n(o,2)}};var d=e=>{let{h:t,s:r,l:o}=Y(e);return`hsl(${t}, ${r}%, ${o}%)`},v=e=>{let{h:t,s:r,l:o,a:s}=Y(e);return`hsla(${t}, ${r}%, ${o}%, ${s})`},A=({h:e,s:t,v:r,a:o})=>{e=e/360*6,t=t/100,r=r/100;let s=Math.floor(e),a=r*(1-t),i=r*(1-(e-s)*t),l=r*(1-(1-e+s)*t),N=s%6;return{r:n([r,i,a,a,l,r][N]*255),g:n([l,r,r,i,a,a][N]*255),b:n([a,a,l,r,r,i][N]*255),a:n(o,2)}},B=e=>{let{r:t,g:r,b:o}=A(e);return`rgb(${t}, ${r}, ${o})`},D=e=>{let{r:t,g:r,b:o,a:s}=A(e);return`rgba(${t}, ${r}, ${o}, ${s})`};var L=e=>{let r=/rgba?\(?\s*(-?\d*\.?\d+)(%)?[,\s]+(-?\d*\.?\d+)(%)?[,\s]+(-?\d*\.?\d+)(%)?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i.exec(e);return r?G({r:Number(r[1])/(r[2]?100/255:1),g:Number(r[3])/(r[4]?100/255:1),b:Number(r[5])/(r[6]?100/255:1),a:r[7]===void 0?1:Number(r[7])/(r[8]?100:1)}):{h:0,s:0,v:0,a:1}},U=L,q=e=>{let t=e.toString(16);return t.length<2?"0"+t:t},pt=({r:e,g:t,b:r})=>"#"+q(e)+q(t)+q(r),G=({r:e,g:t,b:r,a:o})=>{let s=Math.max(e,t,r),a=s-Math.min(e,t,r),i=a?s===e?(t-r)/a:s===t?2+(r-e)/a:4+(e-t)/a:0;return{h:n(60*(i<0?i+6:i)),s:n(s?a/s*100:0),v:n(s/255*100),a:o}};var O=(e,t)=>{if(e===t)return!0;for(let r in e)if(e[r]!==t[r])return!1;return!0},h=(e,t)=>e.replace(/\s/g,"")===t.replace(/\s/g,""),K=(e,t)=>e.toLowerCase()===t.toLowerCase()?!0:O(b(e),b(t));var Q={},$=e=>{let t=Q[e];return t||(t=document.createElement("template"),t.innerHTML=e,Q[e]=t),t},f=(e,t,r)=>{e.dispatchEvent(new CustomEvent(t,{bubbles:!0,detail:r}))};var m=!1,I=e=>"touches"in e,ut=e=>m&&!I(e)?!1:(m||(m=I(e)),!0),W=(e,t)=>{let r=I(t)?t.touches[0]:t,o=e.el.getBoundingClientRect();f(e.el,"move",e.getMove({x:c((r.pageX-(o.left+window.pageXOffset))/o.width),y:c((r.pageY-(o.top+window.pageYOffset))/o.height)}))},dt=(e,t)=>{let r=t.keyCode;r>40||e.xy&&r<37||r<33||(t.preventDefault(),f(e.el,"move",e.getMove({x:r===39?.01:r===37?-.01:r===34?.05:r===33?-.05:r===35?1:r===36?-1:0,y:r===40?.01:r===38?-.01:0},!0)))},u=class{constructor(t,r,o,s){let a=$(`
`);t.appendChild(a.content.cloneNode(!0));let i=t.querySelector(`[part=${r}]`);i.addEventListener("mousedown",this),i.addEventListener("touchstart",this),i.addEventListener("keydown",this),this.el=i,this.xy=s,this.nodes=[i.firstChild,i]}set dragging(t){let r=t?document.addEventListener:document.removeEventListener;r(m?"touchmove":"mousemove",this),r(m?"touchend":"mouseup",this)}handleEvent(t){switch(t.type){case"mousedown":case"touchstart":if(t.preventDefault(),!ut(t)||!m&&t.button!=0)return;this.el.focus(),W(this,t),this.dragging=!0;break;case"mousemove":case"touchmove":t.preventDefault(),W(this,t);break;case"mouseup":case"touchend":this.dragging=!1;break;case"keydown":dt(this,t);break}}style(t){t.forEach((r,o)=>{for(let s in r)this.nodes[o].style.setProperty(s,r[s])})}};var S=class extends u{constructor(t){super(t,"hue",'aria-label="Hue" aria-valuemin="0" aria-valuemax="360"',!1)}update({h:t}){this.h=t,this.style([{left:`${t/360*100}%`,color:d({h:t,s:100,v:100,a:1})}]),this.el.setAttribute("aria-valuenow",`${n(t)}`)}getMove(t,r){return{h:r?c(this.h+t.x*360,0,360):360*t.x}}};var H=class extends u{constructor(t){super(t,"saturation",'aria-label="Color"',!0)}update(t){this.hsva=t,this.style([{top:`${100-t.v}%`,left:`${t.s}%`,color:d(t)},{"background-color":d({h:t.h,s:100,v:100,a:1})}]),this.el.setAttribute("aria-valuetext",`Saturation ${n(t.s)}%, Brightness ${n(t.v)}%`)}getMove(t,r){return{s:r?c(this.hsva.s+t.x*100,0,100):t.x*100,v:r?c(this.hsva.v-t.y*100,0,100):Math.round(100-t.y*100)}}};var Z=":host{display:flex;flex-direction:column;position:relative;width:200px;height:200px;user-select:none;-webkit-user-select:none;cursor:default}:host([hidden]){display:none!important}[role=slider]{position:relative;touch-action:none;user-select:none;-webkit-user-select:none;outline:0}[role=slider]:last-child{border-radius:0 0 8px 8px}[part$=pointer]{position:absolute;z-index:1;box-sizing:border-box;width:28px;height:28px;transform:translate(-50%,-50%);background-color:#fff;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 4px rgba(0,0,0,.2)}[part$=pointer]::after{display:block;content:'';position:absolute;left:0;top:0;right:0;bottom:0;border-radius:inherit;background-color:currentColor}[role=slider]:focus [part$=pointer]{transform:translate(-50%,-50%) scale(1.1)}";var tt="[part=hue]{flex:0 0 24px;background:linear-gradient(to right,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%)}[part=hue-pointer]{top:50%;z-index:2}";var rt="[part=saturation]{flex-grow:1;border-color:transparent;border-bottom:12px solid #000;border-radius:8px 8px 0 0;background-image:linear-gradient(to top,#000,transparent),linear-gradient(to right,#fff,rgba(255,255,255,0));box-shadow:inset 0 0 0 1px rgba(0,0,0,.05)}[part=saturation-pointer]{z-index:3}";var T=Symbol("same"),et=Symbol("color"),ot=Symbol("hsva"),R=Symbol("change"),_=Symbol("update"),st=Symbol("parts"),g=Symbol("css"),x=Symbol("sliders"),p=class extends HTMLElement{static get observedAttributes(){return["color"]}get[g](){return[Z,tt,rt]}get[x](){return[H,S]}get color(){return this[et]}set color(t){if(!this[T](t)){let r=this.colorModel.toHsva(t);this[_](r),this[R](t)}}constructor(){super();let t=$(``),r=this.attachShadow({mode:"open"});r.appendChild(t.content.cloneNode(!0)),r.addEventListener("move",this),this[st]=this[x].map(o=>new o(r))}connectedCallback(){if(this.hasOwnProperty("color")){let t=this.color;delete this.color,this.color=t}else this.color||(this.color=this.colorModel.defaultColor)}attributeChangedCallback(t,r,o){let s=this.colorModel.fromAttr(o);this[T](s)||(this.color=s)}handleEvent(t){let r=this[ot],o={...r,...t.detail};this[_](o);let s;!O(o,r)&&!this[T](s=this.colorModel.fromHsva(o))&&this[R](s)}[T](t){return this.color&&this.colorModel.equal(t,this.color)}[_](t){this[ot]=t,this[st].forEach(r=>r.update(t))}[R](t){this[et]=t,f(this,"color-changed",{value:t})}};var ht={defaultColor:"#000",toHsva:F,fromHsva:X,equal:K,fromAttr:e=>e},y=class extends p{get colorModel(){return ht}};var P=class extends y{};customElements.define("hex-color-picker",P);var mt={defaultColor:"hsl(0, 0%, 0%)",toHsva:J,fromHsva:d,equal:h,fromAttr:e=>e},w=class extends p{get colorModel(){return mt}};var z=class extends w{};customElements.define("hsl-string-color-picker",z);var ft={defaultColor:"rgb(0, 0, 0)",toHsva:U,fromHsva:B,equal:h,fromAttr:e=>e},M=class extends p{get colorModel(){return ft}};var V=class extends M{};customElements.define("rgb-string-color-picker",V);var k=class extends u{constructor(t){super(t,"alpha",'aria-label="Alpha" aria-valuemin="0" aria-valuemax="1"',!1)}update(t){this.hsva=t;let r=v({...t,a:0}),o=v({...t,a:1}),s=t.a*100;this.style([{left:`${s}%`,color:v(t)},{"--gradient":`linear-gradient(90deg, ${r}, ${o}`}]);let a=n(s);this.el.setAttribute("aria-valuenow",`${a}`),this.el.setAttribute("aria-valuetext",`${a}%`)}getMove(t,r){return{a:r?c(this.hsva.a+t.x):t.x}}};var at=`[part=alpha]{flex:0 0 24px}[part=alpha]::after{display:block;content:'';position:absolute;top:0;left:0;right:0;bottom:0;border-radius:inherit;background-image:var(--gradient);box-shadow:inset 0 0 0 1px rgba(0,0,0,.05)}[part^=alpha]{background-color:#fff;background-image:url('data:image/svg+xml,')}[part=alpha-pointer]{top:50%}`;var C=class extends p{get[g](){return[...super[g],at]}get[x](){return[...super[x],k]}};var gt={defaultColor:"rgba(0, 0, 0, 1)",toHsva:L,fromHsva:D,equal:h,fromAttr:e=>e},E=class extends C{get colorModel(){return gt}};var j=class extends E{};customElements.define("rgba-string-color-picker",j);function xt({isAutofocused:e,isDisabled:t,isLive:r,isLiveDebounced:o,isLiveOnBlur:s,liveDebounce:a,state:i}){return{state:i,init:function(){this.state===null||this.state===""||this.setState(this.state),e&&this.togglePanelVisibility(this.$refs.input),this.$refs.input.addEventListener("change",l=>{this.setState(l.target.value)}),this.$refs.panel.addEventListener("color-changed",l=>{this.setState(l.detail.value),!(s||!(r||o))&&setTimeout(()=>{this.state===l.detail.value&&this.commitState()},o?a:250)}),(r||o||s)&&new MutationObserver(()=>this.isOpen()?null:this.commitState()).observe(this.$refs.panel,{attributes:!0,childList:!0})},togglePanelVisibility:function(){t||this.$refs.panel.toggle(this.$refs.input)},setState:function(l){this.state=l,this.$refs.input.value=l,this.$refs.panel.color=l},isOpen:function(){return this.$refs.panel.style.display==="block"},commitState:function(){JSON.stringify(this.$wire.__instance.canonical)!==JSON.stringify(this.$wire.__instance.ephemeral)&&this.$wire.$commit()}}}export{xt as default}; diff --git a/public/js/filament/forms/components/date-time-picker.js b/public/js/filament/forms/components/date-time-picker.js new file mode 100644 index 0000000..ca58c60 --- /dev/null +++ b/public/js/filament/forms/components/date-time-picker.js @@ -0,0 +1 @@ +var Yi=Object.create;var un=Object.defineProperty;var pi=Object.getOwnPropertyDescriptor;var Di=Object.getOwnPropertyNames;var Li=Object.getPrototypeOf,vi=Object.prototype.hasOwnProperty;var S=(n,t)=>()=>(t||n((t={exports:{}}).exports,t),t.exports);var gi=(n,t,s,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of Di(t))!vi.call(n,e)&&e!==s&&un(n,e,{get:()=>t[e],enumerable:!(i=pi(t,e))||i.enumerable});return n};var de=(n,t,s)=>(s=n!=null?Yi(Li(n)):{},gi(t||!n||!n.__esModule?un(s,"default",{value:n,enumerable:!0}):s,n));var Ln=S((ge,Se)=>{(function(n,t){typeof ge=="object"&&typeof Se<"u"?Se.exports=t():typeof define=="function"&&define.amd?define(t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_plugin_advancedFormat=t()})(ge,function(){"use strict";return function(n,t){var s=t.prototype,i=s.format;s.format=function(e){var r=this,u=this.$locale();if(!this.isValid())return i.bind(this)(e);var a=this.$utils(),o=(e||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,function(d){switch(d){case"Q":return Math.ceil((r.$M+1)/3);case"Do":return u.ordinal(r.$D);case"gggg":return r.weekYear();case"GGGG":return r.isoWeekYear();case"wo":return u.ordinal(r.week(),"W");case"w":case"ww":return a.s(r.week(),d==="w"?1:2,"0");case"W":case"WW":return a.s(r.isoWeek(),d==="W"?1:2,"0");case"k":case"kk":return a.s(String(r.$H===0?24:r.$H),d==="k"?1:2,"0");case"X":return Math.floor(r.$d.getTime()/1e3);case"x":return r.$d.getTime();case"z":return"["+r.offsetName()+"]";case"zzz":return"["+r.offsetName("long")+"]";default:return d}});return i.bind(this)(o)}}})});var vn=S((be,ke)=>{(function(n,t){typeof be=="object"&&typeof ke<"u"?ke.exports=t():typeof define=="function"&&define.amd?define(t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_plugin_customParseFormat=t()})(be,function(){"use strict";var n={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},t=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|YYYY|YY?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,s=/\d\d/,i=/\d\d?/,e=/\d*[^-_:/,()\s\d]+/,r={},u=function(_){return(_=+_)+(_>68?1900:2e3)},a=function(_){return function(h){this[_]=+h}},o=[/[+-]\d\d:?(\d\d)?|Z/,function(_){(this.zone||(this.zone={})).offset=function(h){if(!h||h==="Z")return 0;var D=h.match(/([+-]|\d\d)/g),p=60*D[1]+(+D[2]||0);return p===0?0:D[0]==="+"?-p:p}(_)}],d=function(_){var h=r[_];return h&&(h.indexOf?h:h.s.concat(h.f))},f=function(_,h){var D,p=r.meridiem;if(p){for(var k=1;k<=24;k+=1)if(_.indexOf(p(k,0,h))>-1){D=k>12;break}}else D=_===(h?"pm":"PM");return D},y={A:[e,function(_){this.afternoon=f(_,!1)}],a:[e,function(_){this.afternoon=f(_,!0)}],S:[/\d/,function(_){this.milliseconds=100*+_}],SS:[s,function(_){this.milliseconds=10*+_}],SSS:[/\d{3}/,function(_){this.milliseconds=+_}],s:[i,a("seconds")],ss:[i,a("seconds")],m:[i,a("minutes")],mm:[i,a("minutes")],H:[i,a("hours")],h:[i,a("hours")],HH:[i,a("hours")],hh:[i,a("hours")],D:[i,a("day")],DD:[s,a("day")],Do:[e,function(_){var h=r.ordinal,D=_.match(/\d+/);if(this.day=D[0],h)for(var p=1;p<=31;p+=1)h(p).replace(/\[|\]/g,"")===_&&(this.day=p)}],M:[i,a("month")],MM:[s,a("month")],MMM:[e,function(_){var h=d("months"),D=(d("monthsShort")||h.map(function(p){return p.slice(0,3)})).indexOf(_)+1;if(D<1)throw new Error;this.month=D%12||D}],MMMM:[e,function(_){var h=d("months").indexOf(_)+1;if(h<1)throw new Error;this.month=h%12||h}],Y:[/[+-]?\d+/,a("year")],YY:[s,function(_){this.year=u(_)}],YYYY:[/\d{4}/,a("year")],Z:o,ZZ:o};function l(_){var h,D;h=_,D=r&&r.formats;for(var p=(_=h.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,function(x,w,H){var W=H&&H.toUpperCase();return w||D[H]||n[H]||D[W].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(G,L,M){return L||M.slice(1)})})).match(t),k=p.length,T=0;T-1)return new Date((Y==="X"?1e3:1)*m);var v=l(Y)(m),g=v.year,C=v.month,q=v.day,N=v.hours,E=v.minutes,U=v.seconds,ee=v.milliseconds,V=v.zone,B=new Date,Z=q||(g||C?1:B.getDate()),F=g||B.getFullYear(),P=0;g&&!C||(P=C>0?C-1:B.getMonth());var Q=N||0,te=E||0,ye=U||0,Ye=ee||0;return V?new Date(Date.UTC(F,P,Z,Q,te,ye,Ye+60*V.offset*1e3)):c?new Date(Date.UTC(F,P,Z,Q,te,ye,Ye)):new Date(F,P,Z,Q,te,ye,Ye)}catch{return new Date("")}}(b,I,$),this.init(),W&&W!==!0&&(this.$L=this.locale(W).$L),H&&b!=this.format(I)&&(this.$d=new Date("")),r={}}else if(I instanceof Array)for(var G=I.length,L=1;L<=G;L+=1){z[1]=I[L-1];var M=D.apply(this,z);if(M.isValid()){this.$d=M.$d,this.$L=M.$L,this.init();break}L===G&&(this.$d=new Date(""))}else k.call(this,T)}}})});var gn=S((He,je)=>{(function(n,t){typeof He=="object"&&typeof je<"u"?je.exports=t():typeof define=="function"&&define.amd?define(t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_plugin_localeData=t()})(He,function(){"use strict";return function(n,t,s){var i=t.prototype,e=function(d){return d&&(d.indexOf?d:d.s)},r=function(d,f,y,l,_){var h=d.name?d:d.$locale(),D=e(h[f]),p=e(h[y]),k=D||p.map(function(b){return b.slice(0,l)});if(!_)return k;var T=h.weekStart;return k.map(function(b,$){return k[($+(T||0))%7]})},u=function(){return s.Ls[s.locale()]},a=function(d,f){return d.formats[f]||function(y){return y.replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(l,_,h){return _||h.slice(1)})}(d.formats[f.toUpperCase()])},o=function(){var d=this;return{months:function(f){return f?f.format("MMMM"):r(d,"months")},monthsShort:function(f){return f?f.format("MMM"):r(d,"monthsShort","months",3)},firstDayOfWeek:function(){return d.$locale().weekStart||0},weekdays:function(f){return f?f.format("dddd"):r(d,"weekdays")},weekdaysMin:function(f){return f?f.format("dd"):r(d,"weekdaysMin","weekdays",2)},weekdaysShort:function(f){return f?f.format("ddd"):r(d,"weekdaysShort","weekdays",3)},longDateFormat:function(f){return a(d.$locale(),f)},meridiem:this.$locale().meridiem,ordinal:this.$locale().ordinal}};i.localeData=function(){return o.bind(this)()},s.localeData=function(){var d=u();return{firstDayOfWeek:function(){return d.weekStart||0},weekdays:function(){return s.weekdays()},weekdaysShort:function(){return s.weekdaysShort()},weekdaysMin:function(){return s.weekdaysMin()},months:function(){return s.months()},monthsShort:function(){return s.monthsShort()},longDateFormat:function(f){return a(d,f)},meridiem:d.meridiem,ordinal:d.ordinal}},s.months=function(){return r(u(),"months")},s.monthsShort=function(){return r(u(),"monthsShort","months",3)},s.weekdays=function(d){return r(u(),"weekdays",null,null,d)},s.weekdaysShort=function(d){return r(u(),"weekdaysShort","weekdays",3,d)},s.weekdaysMin=function(d){return r(u(),"weekdaysMin","weekdays",2,d)}}})});var Sn=S((Te,we)=>{(function(n,t){typeof Te=="object"&&typeof we<"u"?we.exports=t():typeof define=="function"&&define.amd?define(t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_plugin_timezone=t()})(Te,function(){"use strict";var n={year:0,month:1,day:2,hour:3,minute:4,second:5},t={};return function(s,i,e){var r,u=function(f,y,l){l===void 0&&(l={});var _=new Date(f),h=function(D,p){p===void 0&&(p={});var k=p.timeZoneName||"short",T=D+"|"+k,b=t[T];return b||(b=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:D,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",timeZoneName:k}),t[T]=b),b}(y,l);return h.formatToParts(_)},a=function(f,y){for(var l=u(f,y),_=[],h=0;h=0&&(_[T]=parseInt(k,10))}var b=_[3],$=b===24?0:b,z=_[0]+"-"+_[1]+"-"+_[2]+" "+$+":"+_[4]+":"+_[5]+":000",I=+f;return(e.utc(z).valueOf()-(I-=I%1e3))/6e4},o=i.prototype;o.tz=function(f,y){f===void 0&&(f=r);var l=this.utcOffset(),_=this.toDate(),h=_.toLocaleString("en-US",{timeZone:f}),D=Math.round((_-new Date(h))/1e3/60),p=e(h,{locale:this.$L}).$set("millisecond",this.$ms).utcOffset(15*-Math.round(_.getTimezoneOffset()/15)-D,!0);if(y){var k=p.utcOffset();p=p.add(l-k,"minute")}return p.$x.$timezone=f,p},o.offsetName=function(f){var y=this.$x.$timezone||e.tz.guess(),l=u(this.valueOf(),y,{timeZoneName:f}).find(function(_){return _.type.toLowerCase()==="timezonename"});return l&&l.value};var d=o.startOf;o.startOf=function(f,y){if(!this.$x||!this.$x.$timezone)return d.call(this,f,y);var l=e(this.format("YYYY-MM-DD HH:mm:ss:SSS"),{locale:this.$L});return d.call(l,f,y).tz(this.$x.$timezone,!0)},e.tz=function(f,y,l){var _=l&&y,h=l||y||r,D=a(+e(),h);if(typeof f!="string")return e(f).tz(h);var p=function($,z,I){var x=$-60*z*1e3,w=a(x,I);if(z===w)return[x,z];var H=a(x-=60*(w-z)*1e3,I);return w===H?[x,w]:[$-60*Math.min(w,H)*1e3,Math.max(w,H)]}(e.utc(f,_).valueOf(),D,h),k=p[0],T=p[1],b=e(k).utcOffset(T);return b.$x.$timezone=h,b},e.tz.guess=function(){return Intl.DateTimeFormat().resolvedOptions().timeZone},e.tz.setDefault=function(f){r=f}}})});var bn=S(($e,Ce)=>{(function(n,t){typeof $e=="object"&&typeof Ce<"u"?Ce.exports=t():typeof define=="function"&&define.amd?define(t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_plugin_utc=t()})($e,function(){"use strict";var n="minute",t=/[+-]\d\d(?::?\d\d)?/g,s=/([+-]|\d\d)/g;return function(i,e,r){var u=e.prototype;r.utc=function(_){var h={date:_,utc:!0,args:arguments};return new e(h)},u.utc=function(_){var h=r(this.toDate(),{locale:this.$L,utc:!0});return _?h.add(this.utcOffset(),n):h},u.local=function(){return r(this.toDate(),{locale:this.$L,utc:!1})};var a=u.parse;u.parse=function(_){_.utc&&(this.$u=!0),this.$utils().u(_.$offset)||(this.$offset=_.$offset),a.call(this,_)};var o=u.init;u.init=function(){if(this.$u){var _=this.$d;this.$y=_.getUTCFullYear(),this.$M=_.getUTCMonth(),this.$D=_.getUTCDate(),this.$W=_.getUTCDay(),this.$H=_.getUTCHours(),this.$m=_.getUTCMinutes(),this.$s=_.getUTCSeconds(),this.$ms=_.getUTCMilliseconds()}else o.call(this)};var d=u.utcOffset;u.utcOffset=function(_,h){var D=this.$utils().u;if(D(_))return this.$u?0:D(this.$offset)?d.call(this):this.$offset;if(typeof _=="string"&&(_=function(b){b===void 0&&(b="");var $=b.match(t);if(!$)return null;var z=(""+$[0]).match(s)||["-",0,0],I=z[0],x=60*+z[1]+ +z[2];return x===0?0:I==="+"?x:-x}(_),_===null))return this;var p=Math.abs(_)<=16?60*_:_,k=this;if(h)return k.$offset=p,k.$u=_===0,k;if(_!==0){var T=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(k=this.local().add(p+T,n)).$offset=p,k.$x.$localOffset=T}else k=this.utc();return k};var f=u.format;u.format=function(_){var h=_||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return f.call(this,h)},u.valueOf=function(){var _=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*_},u.isUTC=function(){return!!this.$u},u.toISOString=function(){return this.toDate().toISOString()},u.toString=function(){return this.toDate().toUTCString()};var y=u.toDate;u.toDate=function(_){return _==="s"&&this.$offset?r(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():y.call(this)};var l=u.diff;u.diff=function(_,h,D){if(_&&this.$u===_.$u)return l.call(this,_,h,D);var p=this.local(),k=r(_).local();return l.call(p,k,h,D)}}})});var j=S((Oe,ze)=>{(function(n,t){typeof Oe=="object"&&typeof ze<"u"?ze.exports=t():typeof define=="function"&&define.amd?define(t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs=t()})(Oe,function(){"use strict";var n=1e3,t=6e4,s=36e5,i="millisecond",e="second",r="minute",u="hour",a="day",o="week",d="month",f="quarter",y="year",l="date",_="Invalid Date",h=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,D=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,p={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(L){var M=["th","st","nd","rd"],m=L%100;return"["+L+(M[(m-20)%10]||M[m]||M[0])+"]"}},k=function(L,M,m){var Y=String(L);return!Y||Y.length>=M?L:""+Array(M+1-Y.length).join(m)+L},T={s:k,z:function(L){var M=-L.utcOffset(),m=Math.abs(M),Y=Math.floor(m/60),c=m%60;return(M<=0?"+":"-")+k(Y,2,"0")+":"+k(c,2,"0")},m:function L(M,m){if(M.date()1)return L(g[0])}else{var C=M.name;$[C]=M,c=C}return!Y&&c&&(b=c),c||!Y&&b},w=function(L,M){if(I(L))return L.clone();var m=typeof M=="object"?M:{};return m.date=L,m.args=arguments,new W(m)},H=T;H.l=x,H.i=I,H.w=function(L,M){return w(L,{locale:M.$L,utc:M.$u,x:M.$x,$offset:M.$offset})};var W=function(){function L(m){this.$L=x(m.locale,null,!0),this.parse(m),this.$x=this.$x||m.x||{},this[z]=!0}var M=L.prototype;return M.parse=function(m){this.$d=function(Y){var c=Y.date,v=Y.utc;if(c===null)return new Date(NaN);if(H.u(c))return new Date;if(c instanceof Date)return new Date(c);if(typeof c=="string"&&!/Z$/i.test(c)){var g=c.match(h);if(g){var C=g[2]-1||0,q=(g[7]||"0").substring(0,3);return v?new Date(Date.UTC(g[1],C,g[3]||1,g[4]||0,g[5]||0,g[6]||0,q)):new Date(g[1],C,g[3]||1,g[4]||0,g[5]||0,g[6]||0,q)}}return new Date(c)}(m),this.init()},M.init=function(){var m=this.$d;this.$y=m.getFullYear(),this.$M=m.getMonth(),this.$D=m.getDate(),this.$W=m.getDay(),this.$H=m.getHours(),this.$m=m.getMinutes(),this.$s=m.getSeconds(),this.$ms=m.getMilliseconds()},M.$utils=function(){return H},M.isValid=function(){return this.$d.toString()!==_},M.isSame=function(m,Y){var c=w(m);return this.startOf(Y)<=c&&c<=this.endOf(Y)},M.isAfter=function(m,Y){return w(m){(function(n,t){typeof Ae=="object"&&typeof Ie<"u"?Ie.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_ar=t(n.dayjs)})(Ae,function(n){"use strict";function t(a){return a&&typeof a=="object"&&"default"in a?a:{default:a}}var s=t(n),i="\u064A\u0646\u0627\u064A\u0631_\u0641\u0628\u0631\u0627\u064A\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064A\u0644_\u0645\u0627\u064A\u0648_\u064A\u0648\u0646\u064A\u0648_\u064A\u0648\u0644\u064A\u0648_\u0623\u063A\u0633\u0637\u0633_\u0633\u0628\u062A\u0645\u0628\u0631_\u0623\u0643\u062A\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062F\u064A\u0633\u0645\u0628\u0631".split("_"),e={1:"\u0661",2:"\u0662",3:"\u0663",4:"\u0664",5:"\u0665",6:"\u0666",7:"\u0667",8:"\u0668",9:"\u0669",0:"\u0660"},r={"\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u0660":"0"},u={name:"ar",weekdays:"\u0627\u0644\u0623\u062D\u062F_\u0627\u0644\u0625\u062B\u0646\u064A\u0646_\u0627\u0644\u062B\u0644\u0627\u062B\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062E\u0645\u064A\u0633_\u0627\u0644\u062C\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062A".split("_"),weekdaysShort:"\u0623\u062D\u062F_\u0625\u062B\u0646\u064A\u0646_\u062B\u0644\u0627\u062B\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062E\u0645\u064A\u0633_\u062C\u0645\u0639\u0629_\u0633\u0628\u062A".split("_"),weekdaysMin:"\u062D_\u0646_\u062B_\u0631_\u062E_\u062C_\u0633".split("_"),months:i,monthsShort:i,weekStart:6,meridiem:function(a){return a>12?"\u0645":"\u0635"},relativeTime:{future:"\u0628\u0639\u062F %s",past:"\u0645\u0646\u0630 %s",s:"\u062B\u0627\u0646\u064A\u0629 \u0648\u0627\u062D\u062F\u0629",m:"\u062F\u0642\u064A\u0642\u0629 \u0648\u0627\u062D\u062F\u0629",mm:"%d \u062F\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629 \u0648\u0627\u062D\u062F\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062A",d:"\u064A\u0648\u0645 \u0648\u0627\u062D\u062F",dd:"%d \u0623\u064A\u0627\u0645",M:"\u0634\u0647\u0631 \u0648\u0627\u062D\u062F",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0639\u0627\u0645 \u0648\u0627\u062D\u062F",yy:"%d \u0623\u0639\u0648\u0627\u0645"},preparse:function(a){return a.replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(o){return r[o]}).replace(/،/g,",")},postformat:function(a){return a.replace(/\d/g,function(o){return e[o]}).replace(/,/g,"\u060C")},ordinal:function(a){return a},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/\u200FM/\u200FYYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"}};return s.default.locale(u,null,!0),u})});var Hn=S((qe,xe)=>{(function(n,t){typeof qe=="object"&&typeof xe<"u"?xe.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_bs=t(n.dayjs)})(qe,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"bs",weekdays:"nedjelja_ponedjeljak_utorak_srijeda_\u010Detvrtak_petak_subota".split("_"),months:"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar".split("_"),weekStart:1,weekdaysShort:"ned._pon._uto._sri._\u010Det._pet._sub.".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010De_pe_su".split("_"),ordinal:function(e){return e},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"}};return s.default.locale(i,null,!0),i})});var jn=S((Ne,Ee)=>{(function(n,t){typeof Ne=="object"&&typeof Ee<"u"?Ee.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_ca=t(n.dayjs)})(Ne,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"ca",weekdays:"Diumenge_Dilluns_Dimarts_Dimecres_Dijous_Divendres_Dissabte".split("_"),weekdaysShort:"Dg._Dl._Dt._Dc._Dj._Dv._Ds.".split("_"),weekdaysMin:"Dg_Dl_Dt_Dc_Dj_Dv_Ds".split("_"),months:"Gener_Febrer_Mar\xE7_Abril_Maig_Juny_Juliol_Agost_Setembre_Octubre_Novembre_Desembre".split("_"),monthsShort:"Gen._Febr._Mar\xE7_Abr._Maig_Juny_Jul._Ag._Set._Oct._Nov._Des.".split("_"),weekStart:1,formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",LLL:"D MMMM [de] YYYY [a les] H:mm",LLLL:"dddd D MMMM [de] YYYY [a les] H:mm",ll:"D MMM YYYY",lll:"D MMM YYYY, H:mm",llll:"ddd D MMM YYYY, H:mm"},relativeTime:{future:"d'aqu\xED %s",past:"fa %s",s:"uns segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},ordinal:function(e){return""+e+(e===1||e===3?"r":e===2?"n":e===4?"t":"\xE8")}};return s.default.locale(i,null,!0),i})});var Fe=S((Me,Tn)=>{(function(n,t){typeof Me=="object"&&typeof Tn<"u"?t(Me,j()):typeof define=="function"&&define.amd?define(["exports","dayjs"],t):t((n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_ku={},n.dayjs)})(Me,function(n,t){"use strict";function s(o){return o&&typeof o=="object"&&"default"in o?o:{default:o}}var i=s(t),e={1:"\u0661",2:"\u0662",3:"\u0663",4:"\u0664",5:"\u0665",6:"\u0666",7:"\u0667",8:"\u0668",9:"\u0669",0:"\u0660"},r={"\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u0660":"0"},u=["\u06A9\u0627\u0646\u0648\u0648\u0646\u06CC \u062F\u0648\u0648\u06D5\u0645","\u0634\u0648\u0628\u0627\u062A","\u0626\u0627\u062F\u0627\u0631","\u0646\u06CC\u0633\u0627\u0646","\u0626\u0627\u06CC\u0627\u0631","\u062D\u0648\u0632\u06D5\u06CC\u0631\u0627\u0646","\u062A\u06D5\u0645\u0645\u0648\u0648\u0632","\u0626\u0627\u0628","\u0626\u06D5\u06CC\u0644\u0648\u0648\u0644","\u062A\u0634\u0631\u06CC\u0646\u06CC \u06CC\u06D5\u06A9\u06D5\u0645","\u062A\u0634\u0631\u06CC\u0646\u06CC \u062F\u0648\u0648\u06D5\u0645","\u06A9\u0627\u0646\u0648\u0648\u0646\u06CC \u06CC\u06D5\u06A9\u06D5\u0645"],a={name:"ku",months:u,monthsShort:u,weekdays:"\u06CC\u06D5\u06A9\u0634\u06D5\u0645\u0645\u06D5_\u062F\u0648\u0648\u0634\u06D5\u0645\u0645\u06D5_\u0633\u06CE\u0634\u06D5\u0645\u0645\u06D5_\u0686\u0648\u0627\u0631\u0634\u06D5\u0645\u0645\u06D5_\u067E\u06CE\u0646\u062C\u0634\u06D5\u0645\u0645\u06D5_\u0647\u06D5\u06CC\u0646\u06CC_\u0634\u06D5\u0645\u0645\u06D5".split("_"),weekdaysShort:"\u06CC\u06D5\u06A9\u0634\u06D5\u0645_\u062F\u0648\u0648\u0634\u06D5\u0645_\u0633\u06CE\u0634\u06D5\u0645_\u0686\u0648\u0627\u0631\u0634\u06D5\u0645_\u067E\u06CE\u0646\u062C\u0634\u06D5\u0645_\u0647\u06D5\u06CC\u0646\u06CC_\u0634\u06D5\u0645\u0645\u06D5".split("_"),weekStart:6,weekdaysMin:"\u06CC_\u062F_\u0633_\u0686_\u067E_\u0647\u0640_\u0634".split("_"),preparse:function(o){return o.replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(d){return r[d]}).replace(/،/g,",")},postformat:function(o){return o.replace(/\d/g,function(d){return e[d]}).replace(/,/g,"\u060C")},ordinal:function(o){return o},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiem:function(o){return o<12?"\u067E.\u0646":"\u062F.\u0646"},relativeTime:{future:"\u0644\u06D5 %s",past:"\u0644\u06D5\u0645\u06D5\u0648\u067E\u06CE\u0634 %s",s:"\u0686\u06D5\u0646\u062F \u0686\u0631\u06A9\u06D5\u06CC\u06D5\u06A9",m:"\u06CC\u06D5\u06A9 \u062E\u0648\u0644\u06D5\u06A9",mm:"%d \u062E\u0648\u0644\u06D5\u06A9",h:"\u06CC\u06D5\u06A9 \u06A9\u0627\u062A\u0698\u0645\u06CE\u0631",hh:"%d \u06A9\u0627\u062A\u0698\u0645\u06CE\u0631",d:"\u06CC\u06D5\u06A9 \u0695\u06C6\u0698",dd:"%d \u0695\u06C6\u0698",M:"\u06CC\u06D5\u06A9 \u0645\u0627\u0646\u06AF",MM:"%d \u0645\u0627\u0646\u06AF",y:"\u06CC\u06D5\u06A9 \u0633\u0627\u06B5",yy:"%d \u0633\u0627\u06B5"}};i.default.locale(a,null,!0),n.default=a,n.englishToArabicNumbersMap=e,Object.defineProperty(n,"__esModule",{value:!0})})});var wn=S((Je,We)=>{(function(n,t){typeof Je=="object"&&typeof We<"u"?We.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_cs=t(n.dayjs)})(Je,function(n){"use strict";function t(u){return u&&typeof u=="object"&&"default"in u?u:{default:u}}var s=t(n);function i(u){return u>1&&u<5&&~~(u/10)!=1}function e(u,a,o,d){var f=u+" ";switch(o){case"s":return a||d?"p\xE1r sekund":"p\xE1r sekundami";case"m":return a?"minuta":d?"minutu":"minutou";case"mm":return a||d?f+(i(u)?"minuty":"minut"):f+"minutami";case"h":return a?"hodina":d?"hodinu":"hodinou";case"hh":return a||d?f+(i(u)?"hodiny":"hodin"):f+"hodinami";case"d":return a||d?"den":"dnem";case"dd":return a||d?f+(i(u)?"dny":"dn\xED"):f+"dny";case"M":return a||d?"m\u011Bs\xEDc":"m\u011Bs\xEDcem";case"MM":return a||d?f+(i(u)?"m\u011Bs\xEDce":"m\u011Bs\xEDc\u016F"):f+"m\u011Bs\xEDci";case"y":return a||d?"rok":"rokem";case"yy":return a||d?f+(i(u)?"roky":"let"):f+"lety"}}var r={name:"cs",weekdays:"ned\u011Ble_pond\u011Bl\xED_\xFAter\xFD_st\u0159eda_\u010Dtvrtek_p\xE1tek_sobota".split("_"),weekdaysShort:"ne_po_\xFAt_st_\u010Dt_p\xE1_so".split("_"),weekdaysMin:"ne_po_\xFAt_st_\u010Dt_p\xE1_so".split("_"),months:"leden_\xFAnor_b\u0159ezen_duben_kv\u011Bten_\u010Derven_\u010Dervenec_srpen_z\xE1\u0159\xED_\u0159\xEDjen_listopad_prosinec".split("_"),monthsShort:"led_\xFAno_b\u0159e_dub_kv\u011B_\u010Dvn_\u010Dvc_srp_z\xE1\u0159_\u0159\xEDj_lis_pro".split("_"),weekStart:1,yearStart:4,ordinal:function(u){return u+"."},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},relativeTime:{future:"za %s",past:"p\u0159ed %s",s:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e}};return s.default.locale(r,null,!0),r})});var $n=S((Ue,Pe)=>{(function(n,t){typeof Ue=="object"&&typeof Pe<"u"?Pe.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_cy=t(n.dayjs)})(Ue,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"cy",weekdays:"Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn".split("_"),months:"Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr".split("_"),weekStart:1,weekdaysShort:"Sul_Llun_Maw_Mer_Iau_Gwe_Sad".split("_"),monthsShort:"Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag".split("_"),weekdaysMin:"Su_Ll_Ma_Me_Ia_Gw_Sa".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"mewn %s",past:"%s yn \xF4l",s:"ychydig eiliadau",m:"munud",mm:"%d munud",h:"awr",hh:"%d awr",d:"diwrnod",dd:"%d diwrnod",M:"mis",MM:"%d mis",y:"blwyddyn",yy:"%d flynedd"}};return s.default.locale(i,null,!0),i})});var Cn=S((Re,Ge)=>{(function(n,t){typeof Re=="object"&&typeof Ge<"u"?Ge.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_da=t(n.dayjs)})(Re,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"da",weekdays:"s\xF8ndag_mandag_tirsdag_onsdag_torsdag_fredag_l\xF8rdag".split("_"),weekdaysShort:"s\xF8n._man._tirs._ons._tors._fre._l\xF8r.".split("_"),weekdaysMin:"s\xF8._ma._ti._on._to._fr._l\xF8.".split("_"),months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj_juni_juli_aug._sept._okt._nov._dec.".split("_"),weekStart:1,yearStart:4,ordinal:function(e){return e+"."},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY [kl.] HH:mm"},relativeTime:{future:"om %s",past:"%s siden",s:"f\xE5 sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en m\xE5ned",MM:"%d m\xE5neder",y:"et \xE5r",yy:"%d \xE5r"}};return s.default.locale(i,null,!0),i})});var On=S((Ze,Ve)=>{(function(n,t){typeof Ze=="object"&&typeof Ve<"u"?Ve.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_de=t(n.dayjs)})(Ze,function(n){"use strict";function t(u){return u&&typeof u=="object"&&"default"in u?u:{default:u}}var s=t(n),i={s:"ein paar Sekunden",m:["eine Minute","einer Minute"],mm:"%d Minuten",h:["eine Stunde","einer Stunde"],hh:"%d Stunden",d:["ein Tag","einem Tag"],dd:["%d Tage","%d Tagen"],M:["ein Monat","einem Monat"],MM:["%d Monate","%d Monaten"],y:["ein Jahr","einem Jahr"],yy:["%d Jahre","%d Jahren"]};function e(u,a,o){var d=i[o];return Array.isArray(d)&&(d=d[a?0:1]),d.replace("%d",u)}var r={name:"de",weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),months:"Januar_Februar_M\xE4rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._M\xE4rz_Apr._Mai_Juni_Juli_Aug._Sept._Okt._Nov._Dez.".split("_"),ordinal:function(u){return u+"."},weekStart:1,yearStart:4,formats:{LTS:"HH:mm:ss",LT:"HH:mm",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},relativeTime:{future:"in %s",past:"vor %s",s:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e}};return s.default.locale(r,null,!0),r})});var zn=S((Ke,Xe)=>{(function(n,t){typeof Ke=="object"&&typeof Xe<"u"?Xe.exports=t():typeof define=="function"&&define.amd?define(t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_en=t()})(Ke,function(){"use strict";return{name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(n){var t=["th","st","nd","rd"],s=n%100;return"["+n+(t[(s-20)%10]||t[s]||t[0])+"]"}}})});var An=S((Be,Qe)=>{(function(n,t){typeof Be=="object"&&typeof Qe<"u"?Qe.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_es=t(n.dayjs)})(Be,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"es",monthsShort:"ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),weekdays:"domingo_lunes_martes_mi\xE9rcoles_jueves_viernes_s\xE1bado".split("_"),weekdaysShort:"dom._lun._mar._mi\xE9._jue._vie._s\xE1b.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_s\xE1".split("_"),months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),weekStart:1,formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un d\xEDa",dd:"%d d\xEDas",M:"un mes",MM:"%d meses",y:"un a\xF1o",yy:"%d a\xF1os"},ordinal:function(e){return e+"\xBA"}};return s.default.locale(i,null,!0),i})});var In=S((et,tt)=>{(function(n,t){typeof et=="object"&&typeof tt<"u"?tt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_et=t(n.dayjs)})(et,function(n){"use strict";function t(r){return r&&typeof r=="object"&&"default"in r?r:{default:r}}var s=t(n);function i(r,u,a,o){var d={s:["m\xF5ne sekundi","m\xF5ni sekund","paar sekundit"],m:["\xFChe minuti","\xFCks minut"],mm:["%d minuti","%d minutit"],h:["\xFChe tunni","tund aega","\xFCks tund"],hh:["%d tunni","%d tundi"],d:["\xFChe p\xE4eva","\xFCks p\xE4ev"],M:["kuu aja","kuu aega","\xFCks kuu"],MM:["%d kuu","%d kuud"],y:["\xFChe aasta","aasta","\xFCks aasta"],yy:["%d aasta","%d aastat"]};return u?(d[a][2]?d[a][2]:d[a][1]).replace("%d",r):(o?d[a][0]:d[a][1]).replace("%d",r)}var e={name:"et",weekdays:"p\xFChap\xE4ev_esmasp\xE4ev_teisip\xE4ev_kolmap\xE4ev_neljap\xE4ev_reede_laup\xE4ev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),months:"jaanuar_veebruar_m\xE4rts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_m\xE4rts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),ordinal:function(r){return r+"."},weekStart:1,relativeTime:{future:"%s p\xE4rast",past:"%s tagasi",s:i,m:i,mm:i,h:i,hh:i,d:i,dd:"%d p\xE4eva",M:i,MM:i,y:i,yy:i},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"}};return s.default.locale(e,null,!0),e})});var qn=S((nt,it)=>{(function(n,t){typeof nt=="object"&&typeof it<"u"?it.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_fa=t(n.dayjs)})(nt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"fa",weekdays:"\u06CC\u06A9\u200C\u0634\u0646\u0628\u0647_\u062F\u0648\u0634\u0646\u0628\u0647_\u0633\u0647\u200C\u0634\u0646\u0628\u0647_\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647_\u067E\u0646\u062C\u200C\u0634\u0646\u0628\u0647_\u062C\u0645\u0639\u0647_\u0634\u0646\u0628\u0647".split("_"),weekdaysShort:"\u06CC\u06A9\u200C\u0634\u0646\u0628\u0647_\u062F\u0648\u0634\u0646\u0628\u0647_\u0633\u0647\u200C\u0634\u0646\u0628\u0647_\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647_\u067E\u0646\u062C\u200C\u0634\u0646\u0628\u0647_\u062C\u0645\u0639\u0647_\u0634\u0646\u0628\u0647".split("_"),weekdaysMin:"\u06CC_\u062F_\u0633_\u0686_\u067E_\u062C_\u0634".split("_"),weekStart:6,months:"\u0698\u0627\u0646\u0648\u06CC\u0647_\u0641\u0648\u0631\u06CC\u0647_\u0645\u0627\u0631\u0633_\u0622\u0648\u0631\u06CC\u0644_\u0645\u0647_\u0698\u0648\u0626\u0646_\u0698\u0648\u0626\u06CC\u0647_\u0627\u0648\u062A_\u0633\u067E\u062A\u0627\u0645\u0628\u0631_\u0627\u06A9\u062A\u0628\u0631_\u0646\u0648\u0627\u0645\u0628\u0631_\u062F\u0633\u0627\u0645\u0628\u0631".split("_"),monthsShort:"\u0698\u0627\u0646\u0648\u06CC\u0647_\u0641\u0648\u0631\u06CC\u0647_\u0645\u0627\u0631\u0633_\u0622\u0648\u0631\u06CC\u0644_\u0645\u0647_\u0698\u0648\u0626\u0646_\u0698\u0648\u0626\u06CC\u0647_\u0627\u0648\u062A_\u0633\u067E\u062A\u0627\u0645\u0628\u0631_\u0627\u06A9\u062A\u0628\u0631_\u0646\u0648\u0627\u0645\u0628\u0631_\u062F\u0633\u0627\u0645\u0628\u0631".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"\u062F\u0631 %s",past:"%s \u067E\u06CC\u0634",s:"\u0686\u0646\u062F \u062B\u0627\u0646\u06CC\u0647",m:"\u06CC\u06A9 \u062F\u0642\u06CC\u0642\u0647",mm:"%d \u062F\u0642\u06CC\u0642\u0647",h:"\u06CC\u06A9 \u0633\u0627\u0639\u062A",hh:"%d \u0633\u0627\u0639\u062A",d:"\u06CC\u06A9 \u0631\u0648\u0632",dd:"%d \u0631\u0648\u0632",M:"\u06CC\u06A9 \u0645\u0627\u0647",MM:"%d \u0645\u0627\u0647",y:"\u06CC\u06A9 \u0633\u0627\u0644",yy:"%d \u0633\u0627\u0644"}};return s.default.locale(i,null,!0),i})});var xn=S((st,rt)=>{(function(n,t){typeof st=="object"&&typeof rt<"u"?rt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_fi=t(n.dayjs)})(st,function(n){"use strict";function t(r){return r&&typeof r=="object"&&"default"in r?r:{default:r}}var s=t(n);function i(r,u,a,o){var d={s:"muutama sekunti",m:"minuutti",mm:"%d minuuttia",h:"tunti",hh:"%d tuntia",d:"p\xE4iv\xE4",dd:"%d p\xE4iv\xE4\xE4",M:"kuukausi",MM:"%d kuukautta",y:"vuosi",yy:"%d vuotta",numbers:"nolla_yksi_kaksi_kolme_nelj\xE4_viisi_kuusi_seitsem\xE4n_kahdeksan_yhdeks\xE4n".split("_")},f={s:"muutaman sekunnin",m:"minuutin",mm:"%d minuutin",h:"tunnin",hh:"%d tunnin",d:"p\xE4iv\xE4n",dd:"%d p\xE4iv\xE4n",M:"kuukauden",MM:"%d kuukauden",y:"vuoden",yy:"%d vuoden",numbers:"nollan_yhden_kahden_kolmen_nelj\xE4n_viiden_kuuden_seitsem\xE4n_kahdeksan_yhdeks\xE4n".split("_")},y=o&&!u?f:d,l=y[a];return r<10?l.replace("%d",y.numbers[r]):l.replace("%d",r)}var e={name:"fi",weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kes\xE4kuu_hein\xE4kuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kes\xE4_hein\xE4_elo_syys_loka_marras_joulu".split("_"),ordinal:function(r){return r+"."},weekStart:1,yearStart:4,relativeTime:{future:"%s p\xE4\xE4st\xE4",past:"%s sitten",s:i,m:i,mm:i,h:i,hh:i,d:i,dd:i,M:i,MM:i,y:i,yy:i},formats:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM[ta] YYYY",LLL:"D. MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, D. MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"D. MMM YYYY",lll:"D. MMM YYYY, [klo] HH.mm",llll:"ddd, D. MMM YYYY, [klo] HH.mm"}};return s.default.locale(e,null,!0),e})});var Nn=S((at,ut)=>{(function(n,t){typeof at=="object"&&typeof ut<"u"?ut.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_fr=t(n.dayjs)})(at,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"fr",weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),months:"janvier_f\xE9vrier_mars_avril_mai_juin_juillet_ao\xFBt_septembre_octobre_novembre_d\xE9cembre".split("_"),monthsShort:"janv._f\xE9vr._mars_avr._mai_juin_juil._ao\xFBt_sept._oct._nov._d\xE9c.".split("_"),weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},ordinal:function(e){return""+e+(e===1?"er":"")}};return s.default.locale(i,null,!0),i})});var En=S((ot,dt)=>{(function(n,t){typeof ot=="object"&&typeof dt<"u"?dt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_hi=t(n.dayjs)})(ot,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"hi",weekdays:"\u0930\u0935\u093F\u0935\u093E\u0930_\u0938\u094B\u092E\u0935\u093E\u0930_\u092E\u0902\u0917\u0932\u0935\u093E\u0930_\u092C\u0941\u0927\u0935\u093E\u0930_\u0917\u0941\u0930\u0942\u0935\u093E\u0930_\u0936\u0941\u0915\u094D\u0930\u0935\u093E\u0930_\u0936\u0928\u093F\u0935\u093E\u0930".split("_"),months:"\u091C\u0928\u0935\u0930\u0940_\u092B\u093C\u0930\u0935\u0930\u0940_\u092E\u093E\u0930\u094D\u091A_\u0905\u092A\u094D\u0930\u0948\u0932_\u092E\u0908_\u091C\u0942\u0928_\u091C\u0941\u0932\u093E\u0908_\u0905\u0917\u0938\u094D\u0924_\u0938\u093F\u0924\u092E\u094D\u092C\u0930_\u0905\u0915\u094D\u091F\u0942\u092C\u0930_\u0928\u0935\u092E\u094D\u092C\u0930_\u0926\u093F\u0938\u092E\u094D\u092C\u0930".split("_"),weekdaysShort:"\u0930\u0935\u093F_\u0938\u094B\u092E_\u092E\u0902\u0917\u0932_\u092C\u0941\u0927_\u0917\u0941\u0930\u0942_\u0936\u0941\u0915\u094D\u0930_\u0936\u0928\u093F".split("_"),monthsShort:"\u091C\u0928._\u092B\u093C\u0930._\u092E\u093E\u0930\u094D\u091A_\u0905\u092A\u094D\u0930\u0948._\u092E\u0908_\u091C\u0942\u0928_\u091C\u0941\u0932._\u0905\u0917._\u0938\u093F\u0924._\u0905\u0915\u094D\u091F\u0942._\u0928\u0935._\u0926\u093F\u0938.".split("_"),weekdaysMin:"\u0930_\u0938\u094B_\u092E\u0902_\u092C\u0941_\u0917\u0941_\u0936\u0941_\u0936".split("_"),ordinal:function(e){return e},formats:{LT:"A h:mm \u092C\u091C\u0947",LTS:"A h:mm:ss \u092C\u091C\u0947",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u092C\u091C\u0947",LLLL:"dddd, D MMMM YYYY, A h:mm \u092C\u091C\u0947"},relativeTime:{future:"%s \u092E\u0947\u0902",past:"%s \u092A\u0939\u0932\u0947",s:"\u0915\u0941\u091B \u0939\u0940 \u0915\u094D\u0937\u0923",m:"\u090F\u0915 \u092E\u093F\u0928\u091F",mm:"%d \u092E\u093F\u0928\u091F",h:"\u090F\u0915 \u0918\u0902\u091F\u093E",hh:"%d \u0918\u0902\u091F\u0947",d:"\u090F\u0915 \u0926\u093F\u0928",dd:"%d \u0926\u093F\u0928",M:"\u090F\u0915 \u092E\u0939\u0940\u0928\u0947",MM:"%d \u092E\u0939\u0940\u0928\u0947",y:"\u090F\u0915 \u0935\u0930\u094D\u0937",yy:"%d \u0935\u0930\u094D\u0937"}};return s.default.locale(i,null,!0),i})});var Fn=S((_t,ft)=>{(function(n,t){typeof _t=="object"&&typeof ft<"u"?ft.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_hu=t(n.dayjs)})(_t,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"hu",weekdays:"vas\xE1rnap_h\xE9tf\u0151_kedd_szerda_cs\xFCt\xF6rt\xF6k_p\xE9ntek_szombat".split("_"),weekdaysShort:"vas_h\xE9t_kedd_sze_cs\xFCt_p\xE9n_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),months:"janu\xE1r_febru\xE1r_m\xE1rcius_\xE1prilis_m\xE1jus_j\xFAnius_j\xFAlius_augusztus_szeptember_okt\xF3ber_november_december".split("_"),monthsShort:"jan_feb_m\xE1rc_\xE1pr_m\xE1j_j\xFAn_j\xFAl_aug_szept_okt_nov_dec".split("_"),ordinal:function(e){return e+"."},weekStart:1,relativeTime:{future:"%s m\xFAlva",past:"%s",s:function(e,r,u,a){return"n\xE9h\xE1ny m\xE1sodperc"+(a||r?"":"e")},m:function(e,r,u,a){return"egy perc"+(a||r?"":"e")},mm:function(e,r,u,a){return e+" perc"+(a||r?"":"e")},h:function(e,r,u,a){return"egy "+(a||r?"\xF3ra":"\xF3r\xE1ja")},hh:function(e,r,u,a){return e+" "+(a||r?"\xF3ra":"\xF3r\xE1ja")},d:function(e,r,u,a){return"egy "+(a||r?"nap":"napja")},dd:function(e,r,u,a){return e+" "+(a||r?"nap":"napja")},M:function(e,r,u,a){return"egy "+(a||r?"h\xF3nap":"h\xF3napja")},MM:function(e,r,u,a){return e+" "+(a||r?"h\xF3nap":"h\xF3napja")},y:function(e,r,u,a){return"egy "+(a||r?"\xE9v":"\xE9ve")},yy:function(e,r,u,a){return e+" "+(a||r?"\xE9v":"\xE9ve")}},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D. H:mm",LLLL:"YYYY. MMMM D., dddd H:mm"}};return s.default.locale(i,null,!0),i})});var Jn=S((lt,mt)=>{(function(n,t){typeof lt=="object"&&typeof mt<"u"?mt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_hy_am=t(n.dayjs)})(lt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"hy-am",weekdays:"\u056F\u056B\u0580\u0561\u056F\u056B_\u0565\u0580\u056F\u0578\u0582\u0577\u0561\u0562\u0569\u056B_\u0565\u0580\u0565\u0584\u0577\u0561\u0562\u0569\u056B_\u0579\u0578\u0580\u0565\u0584\u0577\u0561\u0562\u0569\u056B_\u0570\u056B\u0576\u0563\u0577\u0561\u0562\u0569\u056B_\u0578\u0582\u0580\u0562\u0561\u0569_\u0577\u0561\u0562\u0561\u0569".split("_"),months:"\u0570\u0578\u0582\u0576\u057E\u0561\u0580\u056B_\u0583\u0565\u057F\u0580\u057E\u0561\u0580\u056B_\u0574\u0561\u0580\u057F\u056B_\u0561\u057A\u0580\u056B\u056C\u056B_\u0574\u0561\u0575\u056B\u057D\u056B_\u0570\u0578\u0582\u0576\u056B\u057D\u056B_\u0570\u0578\u0582\u056C\u056B\u057D\u056B_\u0585\u0563\u0578\u057D\u057F\u0578\u057D\u056B_\u057D\u0565\u057A\u057F\u0565\u0574\u0562\u0565\u0580\u056B_\u0570\u0578\u056F\u057F\u0565\u0574\u0562\u0565\u0580\u056B_\u0576\u0578\u0575\u0565\u0574\u0562\u0565\u0580\u056B_\u0564\u0565\u056F\u057F\u0565\u0574\u0562\u0565\u0580\u056B".split("_"),weekStart:1,weekdaysShort:"\u056F\u0580\u056F_\u0565\u0580\u056F_\u0565\u0580\u0584_\u0579\u0580\u0584_\u0570\u0576\u0563_\u0578\u0582\u0580\u0562_\u0577\u0562\u0569".split("_"),monthsShort:"\u0570\u0576\u057E_\u0583\u057F\u0580_\u0574\u0580\u057F_\u0561\u057A\u0580_\u0574\u0575\u057D_\u0570\u0576\u057D_\u0570\u056C\u057D_\u0585\u0563\u057D_\u057D\u057A\u057F_\u0570\u056F\u057F_\u0576\u0574\u0562_\u0564\u056F\u057F".split("_"),weekdaysMin:"\u056F\u0580\u056F_\u0565\u0580\u056F_\u0565\u0580\u0584_\u0579\u0580\u0584_\u0570\u0576\u0563_\u0578\u0582\u0580\u0562_\u0577\u0562\u0569".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0569.",LLL:"D MMMM YYYY \u0569., HH:mm",LLLL:"dddd, D MMMM YYYY \u0569., HH:mm"},relativeTime:{future:"%s \u0570\u0565\u057F\u0578",past:"%s \u0561\u057C\u0561\u057B",s:"\u0574\u056B \u0584\u0561\u0576\u056B \u057E\u0561\u0575\u0580\u056F\u0575\u0561\u0576",m:"\u0580\u0578\u057A\u0565",mm:"%d \u0580\u0578\u057A\u0565",h:"\u056A\u0561\u0574",hh:"%d \u056A\u0561\u0574",d:"\u0585\u0580",dd:"%d \u0585\u0580",M:"\u0561\u0574\u056B\u057D",MM:"%d \u0561\u0574\u056B\u057D",y:"\u057F\u0561\u0580\u056B",yy:"%d \u057F\u0561\u0580\u056B"}};return s.default.locale(i,null,!0),i})});var Wn=S((ct,ht)=>{(function(n,t){typeof ct=="object"&&typeof ht<"u"?ht.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_id=t(n.dayjs)})(ct,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"id",weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),weekStart:1,formats:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},ordinal:function(e){return e+"."}};return s.default.locale(i,null,!0),i})});var Un=S((Mt,yt)=>{(function(n,t){typeof Mt=="object"&&typeof yt<"u"?yt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_it=t(n.dayjs)})(Mt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"it",weekdays:"domenica_luned\xEC_marted\xEC_mercoled\xEC_gioved\xEC_venerd\xEC_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),weekStart:1,monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"tra %s",past:"%s fa",s:"qualche secondo",m:"un minuto",mm:"%d minuti",h:"un' ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},ordinal:function(e){return e+"\xBA"}};return s.default.locale(i,null,!0),i})});var Pn=S((Yt,pt)=>{(function(n,t){typeof Yt=="object"&&typeof pt<"u"?pt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_ja=t(n.dayjs)})(Yt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"ja",weekdays:"\u65E5\u66DC\u65E5_\u6708\u66DC\u65E5_\u706B\u66DC\u65E5_\u6C34\u66DC\u65E5_\u6728\u66DC\u65E5_\u91D1\u66DC\u65E5_\u571F\u66DC\u65E5".split("_"),weekdaysShort:"\u65E5_\u6708_\u706B_\u6C34_\u6728_\u91D1_\u571F".split("_"),weekdaysMin:"\u65E5_\u6708_\u706B_\u6C34_\u6728_\u91D1_\u571F".split("_"),months:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),ordinal:function(e){return e+"\u65E5"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5E74M\u6708D\u65E5",LLL:"YYYY\u5E74M\u6708D\u65E5 HH:mm",LLLL:"YYYY\u5E74M\u6708D\u65E5 dddd HH:mm",l:"YYYY/MM/DD",ll:"YYYY\u5E74M\u6708D\u65E5",lll:"YYYY\u5E74M\u6708D\u65E5 HH:mm",llll:"YYYY\u5E74M\u6708D\u65E5(ddd) HH:mm"},meridiem:function(e){return e<12?"\u5348\u524D":"\u5348\u5F8C"},relativeTime:{future:"%s\u5F8C",past:"%s\u524D",s:"\u6570\u79D2",m:"1\u5206",mm:"%d\u5206",h:"1\u6642\u9593",hh:"%d\u6642\u9593",d:"1\u65E5",dd:"%d\u65E5",M:"1\u30F6\u6708",MM:"%d\u30F6\u6708",y:"1\u5E74",yy:"%d\u5E74"}};return s.default.locale(i,null,!0),i})});var Rn=S((Dt,Lt)=>{(function(n,t){typeof Dt=="object"&&typeof Lt<"u"?Lt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_ka=t(n.dayjs)})(Dt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"ka",weekdays:"\u10D9\u10D5\u10D8\u10E0\u10D0_\u10DD\u10E0\u10E8\u10D0\u10D1\u10D0\u10D7\u10D8_\u10E1\u10D0\u10DB\u10E8\u10D0\u10D1\u10D0\u10D7\u10D8_\u10DD\u10D7\u10EE\u10E8\u10D0\u10D1\u10D0\u10D7\u10D8_\u10EE\u10E3\u10D7\u10E8\u10D0\u10D1\u10D0\u10D7\u10D8_\u10DE\u10D0\u10E0\u10D0\u10E1\u10D9\u10D4\u10D5\u10D8_\u10E8\u10D0\u10D1\u10D0\u10D7\u10D8".split("_"),weekdaysShort:"\u10D9\u10D5\u10D8_\u10DD\u10E0\u10E8_\u10E1\u10D0\u10DB_\u10DD\u10D7\u10EE_\u10EE\u10E3\u10D7_\u10DE\u10D0\u10E0_\u10E8\u10D0\u10D1".split("_"),weekdaysMin:"\u10D9\u10D5_\u10DD\u10E0_\u10E1\u10D0_\u10DD\u10D7_\u10EE\u10E3_\u10DE\u10D0_\u10E8\u10D0".split("_"),months:"\u10D8\u10D0\u10DC\u10D5\u10D0\u10E0\u10D8_\u10D7\u10D4\u10D1\u10D4\u10E0\u10D5\u10D0\u10DA\u10D8_\u10DB\u10D0\u10E0\u10E2\u10D8_\u10D0\u10DE\u10E0\u10D8\u10DA\u10D8_\u10DB\u10D0\u10D8\u10E1\u10D8_\u10D8\u10D5\u10DC\u10D8\u10E1\u10D8_\u10D8\u10D5\u10DA\u10D8\u10E1\u10D8_\u10D0\u10D2\u10D5\u10D8\u10E1\u10E2\u10DD_\u10E1\u10D4\u10E5\u10E2\u10D4\u10DB\u10D1\u10D4\u10E0\u10D8_\u10DD\u10E5\u10E2\u10DD\u10DB\u10D1\u10D4\u10E0\u10D8_\u10DC\u10DD\u10D4\u10DB\u10D1\u10D4\u10E0\u10D8_\u10D3\u10D4\u10D9\u10D4\u10DB\u10D1\u10D4\u10E0\u10D8".split("_"),monthsShort:"\u10D8\u10D0\u10DC_\u10D7\u10D4\u10D1_\u10DB\u10D0\u10E0_\u10D0\u10DE\u10E0_\u10DB\u10D0\u10D8_\u10D8\u10D5\u10DC_\u10D8\u10D5\u10DA_\u10D0\u10D2\u10D5_\u10E1\u10D4\u10E5_\u10DD\u10E5\u10E2_\u10DC\u10DD\u10D4_\u10D3\u10D4\u10D9".split("_"),weekStart:1,formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},relativeTime:{future:"%s \u10E8\u10D4\u10DB\u10D3\u10D4\u10D2",past:"%s \u10EC\u10D8\u10DC",s:"\u10EC\u10D0\u10DB\u10D8",m:"\u10EC\u10E3\u10D7\u10D8",mm:"%d \u10EC\u10E3\u10D7\u10D8",h:"\u10E1\u10D0\u10D0\u10D7\u10D8",hh:"%d \u10E1\u10D0\u10D0\u10D7\u10D8\u10E1",d:"\u10D3\u10E6\u10D4\u10E1",dd:"%d \u10D3\u10E6\u10D8\u10E1 \u10D2\u10D0\u10DC\u10DB\u10D0\u10D5\u10DA\u10DD\u10D1\u10D0\u10E8\u10D8",M:"\u10D7\u10D5\u10D8\u10E1",MM:"%d \u10D7\u10D5\u10D8\u10E1",y:"\u10EC\u10D4\u10DA\u10D8",yy:"%d \u10EC\u10DA\u10D8\u10E1"},ordinal:function(e){return e}};return s.default.locale(i,null,!0),i})});var Gn=S((vt,gt)=>{(function(n,t){typeof vt=="object"&&typeof gt<"u"?gt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_km=t(n.dayjs)})(vt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"km",weekdays:"\u17A2\u17B6\u1791\u17B7\u178F\u17D2\u1799_\u1785\u17D0\u1793\u17D2\u1791_\u17A2\u1784\u17D2\u1782\u17B6\u179A_\u1796\u17BB\u1792_\u1796\u17D2\u179A\u17A0\u179F\u17D2\u1794\u178F\u17B7\u17CD_\u179F\u17BB\u1780\u17D2\u179A_\u179F\u17C5\u179A\u17CD".split("_"),months:"\u1798\u1780\u179A\u17B6_\u1780\u17BB\u1798\u17D2\u1797\u17C8_\u1798\u17B8\u1793\u17B6_\u1798\u17C1\u179F\u17B6_\u17A7\u179F\u1797\u17B6_\u1798\u17B7\u1790\u17BB\u1793\u17B6_\u1780\u1780\u17D2\u1780\u178A\u17B6_\u179F\u17B8\u17A0\u17B6_\u1780\u1789\u17D2\u1789\u17B6_\u178F\u17BB\u179B\u17B6_\u179C\u17B7\u1785\u17D2\u1786\u17B7\u1780\u17B6_\u1792\u17D2\u1793\u17BC".split("_"),weekStart:1,weekdaysShort:"\u17A2\u17B6_\u1785_\u17A2_\u1796_\u1796\u17D2\u179A_\u179F\u17BB_\u179F".split("_"),monthsShort:"\u1798\u1780\u179A\u17B6_\u1780\u17BB\u1798\u17D2\u1797\u17C8_\u1798\u17B8\u1793\u17B6_\u1798\u17C1\u179F\u17B6_\u17A7\u179F\u1797\u17B6_\u1798\u17B7\u1790\u17BB\u1793\u17B6_\u1780\u1780\u17D2\u1780\u178A\u17B6_\u179F\u17B8\u17A0\u17B6_\u1780\u1789\u17D2\u1789\u17B6_\u178F\u17BB\u179B\u17B6_\u179C\u17B7\u1785\u17D2\u1786\u17B7\u1780\u17B6_\u1792\u17D2\u1793\u17BC".split("_"),weekdaysMin:"\u17A2\u17B6_\u1785_\u17A2_\u1796_\u1796\u17D2\u179A_\u179F\u17BB_\u179F".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"%s\u1791\u17C0\u178F",past:"%s\u1798\u17BB\u1793",s:"\u1794\u17C9\u17BB\u1793\u17D2\u1798\u17B6\u1793\u179C\u17B7\u1793\u17B6\u1791\u17B8",m:"\u1798\u17BD\u1799\u1793\u17B6\u1791\u17B8",mm:"%d \u1793\u17B6\u1791\u17B8",h:"\u1798\u17BD\u1799\u1798\u17C9\u17C4\u1784",hh:"%d \u1798\u17C9\u17C4\u1784",d:"\u1798\u17BD\u1799\u1790\u17D2\u1784\u17C3",dd:"%d \u1790\u17D2\u1784\u17C3",M:"\u1798\u17BD\u1799\u1781\u17C2",MM:"%d \u1781\u17C2",y:"\u1798\u17BD\u1799\u1786\u17D2\u1793\u17B6\u17C6",yy:"%d \u1786\u17D2\u1793\u17B6\u17C6"}};return s.default.locale(i,null,!0),i})});var Zn=S((St,bt)=>{(function(n,t){typeof St=="object"&&typeof bt<"u"?bt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_lt=t(n.dayjs)})(St,function(n){"use strict";function t(o){return o&&typeof o=="object"&&"default"in o?o:{default:o}}var s=t(n),i="sausio_vasario_kovo_baland\u017Eio_gegu\u017E\u0117s_bir\u017Eelio_liepos_rugpj\u016B\u010Dio_rugs\u0117jo_spalio_lapkri\u010Dio_gruod\u017Eio".split("_"),e="sausis_vasaris_kovas_balandis_gegu\u017E\u0117_bir\u017Eelis_liepa_rugpj\u016Btis_rugs\u0117jis_spalis_lapkritis_gruodis".split("_"),r=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/,u=function(o,d){return r.test(d)?i[o.month()]:e[o.month()]};u.s=e,u.f=i;var a={name:"lt",weekdays:"sekmadienis_pirmadienis_antradienis_tre\u010Diadienis_ketvirtadienis_penktadienis_\u0161e\u0161tadienis".split("_"),weekdaysShort:"sek_pir_ant_tre_ket_pen_\u0161e\u0161".split("_"),weekdaysMin:"s_p_a_t_k_pn_\u0161".split("_"),months:u,monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),ordinal:function(o){return o+"."},weekStart:1,relativeTime:{future:"u\u017E %s",past:"prie\u0161 %s",s:"kelias sekundes",m:"minut\u0119",mm:"%d minutes",h:"valand\u0105",hh:"%d valandas",d:"dien\u0105",dd:"%d dienas",M:"m\u0117nes\u012F",MM:"%d m\u0117nesius",y:"metus",yy:"%d metus"},format:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"}};return s.default.locale(a,null,!0),a})});var Vn=S((kt,Ht)=>{(function(n,t){typeof kt=="object"&&typeof Ht<"u"?Ht.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_lv=t(n.dayjs)})(kt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"lv",weekdays:"sv\u0113tdiena_pirmdiena_otrdiena_tre\u0161diena_ceturtdiena_piektdiena_sestdiena".split("_"),months:"janv\u0101ris_febru\u0101ris_marts_apr\u012Blis_maijs_j\u016Bnijs_j\u016Blijs_augusts_septembris_oktobris_novembris_decembris".split("_"),weekStart:1,weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),monthsShort:"jan_feb_mar_apr_mai_j\u016Bn_j\u016Bl_aug_sep_okt_nov_dec".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY.",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, HH:mm",LLLL:"YYYY. [gada] D. MMMM, dddd, HH:mm"},relativeTime:{future:"p\u0113c %s",past:"pirms %s",s:"da\u017E\u0101m sekund\u0113m",m:"min\u016Btes",mm:"%d min\u016Bt\u0113m",h:"stundas",hh:"%d stund\u0101m",d:"dienas",dd:"%d dien\u0101m",M:"m\u0113ne\u0161a",MM:"%d m\u0113ne\u0161iem",y:"gada",yy:"%d gadiem"}};return s.default.locale(i,null,!0),i})});var Kn=S((jt,Tt)=>{(function(n,t){typeof jt=="object"&&typeof Tt<"u"?Tt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_ms=t(n.dayjs)})(jt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"ms",weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekStart:1,formats:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH.mm",LLLL:"dddd, D MMMM YYYY HH.mm"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},ordinal:function(e){return e+"."}};return s.default.locale(i,null,!0),i})});var Xn=S((wt,$t)=>{(function(n,t){typeof wt=="object"&&typeof $t<"u"?$t.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_my=t(n.dayjs)})(wt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"my",weekdays:"\u1010\u1014\u1004\u103A\u1039\u1002\u1014\u103D\u1031_\u1010\u1014\u1004\u103A\u1039\u101C\u102C_\u1021\u1004\u103A\u1039\u1002\u102B_\u1017\u102F\u1012\u1039\u1013\u101F\u1030\u1038_\u1000\u103C\u102C\u101E\u1015\u1010\u1031\u1038_\u101E\u1031\u102C\u1000\u103C\u102C_\u1005\u1014\u1031".split("_"),months:"\u1007\u1014\u103A\u1014\u101D\u102B\u101B\u102E_\u1016\u1031\u1016\u1031\u102C\u103A\u101D\u102B\u101B\u102E_\u1019\u1010\u103A_\u1027\u1015\u103C\u102E_\u1019\u1031_\u1007\u103D\u1014\u103A_\u1007\u1030\u101C\u102D\u102F\u1004\u103A_\u101E\u103C\u1002\u102F\u1010\u103A_\u1005\u1000\u103A\u1010\u1004\u103A\u1018\u102C_\u1021\u1031\u102C\u1000\u103A\u1010\u102D\u102F\u1018\u102C_\u1014\u102D\u102F\u101D\u1004\u103A\u1018\u102C_\u1012\u102E\u1007\u1004\u103A\u1018\u102C".split("_"),weekStart:1,weekdaysShort:"\u1014\u103D\u1031_\u101C\u102C_\u1002\u102B_\u101F\u1030\u1038_\u1000\u103C\u102C_\u101E\u1031\u102C_\u1014\u1031".split("_"),monthsShort:"\u1007\u1014\u103A_\u1016\u1031_\u1019\u1010\u103A_\u1015\u103C\u102E_\u1019\u1031_\u1007\u103D\u1014\u103A_\u101C\u102D\u102F\u1004\u103A_\u101E\u103C_\u1005\u1000\u103A_\u1021\u1031\u102C\u1000\u103A_\u1014\u102D\u102F_\u1012\u102E".split("_"),weekdaysMin:"\u1014\u103D\u1031_\u101C\u102C_\u1002\u102B_\u101F\u1030\u1038_\u1000\u103C\u102C_\u101E\u1031\u102C_\u1014\u1031".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"\u101C\u102C\u1019\u100A\u103A\u1037 %s \u1019\u103E\u102C",past:"\u101C\u103D\u1014\u103A\u1001\u1032\u1037\u101E\u1031\u102C %s \u1000",s:"\u1005\u1000\u1039\u1000\u1014\u103A.\u1021\u1014\u100A\u103A\u1038\u1004\u101A\u103A",m:"\u1010\u1005\u103A\u1019\u102D\u1014\u1005\u103A",mm:"%d \u1019\u102D\u1014\u1005\u103A",h:"\u1010\u1005\u103A\u1014\u102C\u101B\u102E",hh:"%d \u1014\u102C\u101B\u102E",d:"\u1010\u1005\u103A\u101B\u1000\u103A",dd:"%d \u101B\u1000\u103A",M:"\u1010\u1005\u103A\u101C",MM:"%d \u101C",y:"\u1010\u1005\u103A\u1014\u103E\u1005\u103A",yy:"%d \u1014\u103E\u1005\u103A"}};return s.default.locale(i,null,!0),i})});var Bn=S((Ct,Ot)=>{(function(n,t){typeof Ct=="object"&&typeof Ot<"u"?Ot.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_nl=t(n.dayjs)})(Ct,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"nl",weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),ordinal:function(e){return"["+e+(e===1||e===8||e>=20?"ste":"de")+"]"},weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",m:"een minuut",mm:"%d minuten",h:"een uur",hh:"%d uur",d:"een dag",dd:"%d dagen",M:"een maand",MM:"%d maanden",y:"een jaar",yy:"%d jaar"}};return s.default.locale(i,null,!0),i})});var Qn=S((zt,At)=>{(function(n,t){typeof zt=="object"&&typeof At<"u"?At.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_nb=t(n.dayjs)})(zt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"nb",weekdays:"s\xF8ndag_mandag_tirsdag_onsdag_torsdag_fredag_l\xF8rdag".split("_"),weekdaysShort:"s\xF8._ma._ti._on._to._fr._l\xF8.".split("_"),weekdaysMin:"s\xF8_ma_ti_on_to_fr_l\xF8".split("_"),months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.".split("_"),ordinal:function(e){return e+"."},weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] HH:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},relativeTime:{future:"om %s",past:"%s siden",s:"noen sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",M:"en m\xE5ned",MM:"%d m\xE5neder",y:"ett \xE5r",yy:"%d \xE5r"}};return s.default.locale(i,null,!0),i})});var ei=S((It,qt)=>{(function(n,t){typeof It=="object"&&typeof qt<"u"?qt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_pl=t(n.dayjs)})(It,function(n){"use strict";function t(f){return f&&typeof f=="object"&&"default"in f?f:{default:f}}var s=t(n);function i(f){return f%10<5&&f%10>1&&~~(f/10)%10!=1}function e(f,y,l){var _=f+" ";switch(l){case"m":return y?"minuta":"minut\u0119";case"mm":return _+(i(f)?"minuty":"minut");case"h":return y?"godzina":"godzin\u0119";case"hh":return _+(i(f)?"godziny":"godzin");case"MM":return _+(i(f)?"miesi\u0105ce":"miesi\u0119cy");case"yy":return _+(i(f)?"lata":"lat")}}var r="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_wrze\u015Bnia_pa\u017Adziernika_listopada_grudnia".split("_"),u="stycze\u0144_luty_marzec_kwiecie\u0144_maj_czerwiec_lipiec_sierpie\u0144_wrzesie\u0144_pa\u017Adziernik_listopad_grudzie\u0144".split("_"),a=/D MMMM/,o=function(f,y){return a.test(y)?r[f.month()]:u[f.month()]};o.s=u,o.f=r;var d={name:"pl",weekdays:"niedziela_poniedzia\u0142ek_wtorek_\u015Broda_czwartek_pi\u0105tek_sobota".split("_"),weekdaysShort:"ndz_pon_wt_\u015Br_czw_pt_sob".split("_"),weekdaysMin:"Nd_Pn_Wt_\u015Ar_Cz_Pt_So".split("_"),months:o,monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_pa\u017A_lis_gru".split("_"),ordinal:function(f){return f+"."},weekStart:1,yearStart:4,relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",m:e,mm:e,h:e,hh:e,d:"1 dzie\u0144",dd:"%d dni",M:"miesi\u0105c",MM:e,y:"rok",yy:e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"}};return s.default.locale(d,null,!0),d})});var ti=S((xt,Nt)=>{(function(n,t){typeof xt=="object"&&typeof Nt<"u"?Nt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_pt_br=t(n.dayjs)})(xt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"pt-br",weekdays:"domingo_segunda-feira_ter\xE7a-feira_quarta-feira_quinta-feira_sexta-feira_s\xE1bado".split("_"),weekdaysShort:"dom_seg_ter_qua_qui_sex_s\xE1b".split("_"),weekdaysMin:"Do_2\xAA_3\xAA_4\xAA_5\xAA_6\xAA_S\xE1".split("_"),months:"janeiro_fevereiro_mar\xE7o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),ordinal:function(e){return e+"\xBA"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [\xE0s] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [\xE0s] HH:mm"},relativeTime:{future:"em %s",past:"h\xE1 %s",s:"poucos segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um m\xEAs",MM:"%d meses",y:"um ano",yy:"%d anos"}};return s.default.locale(i,null,!0),i})});var ni=S((Et,Ft)=>{(function(n,t){typeof Et=="object"&&typeof Ft<"u"?Ft.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_pt=t(n.dayjs)})(Et,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"pt",weekdays:"domingo_segunda-feira_ter\xE7a-feira_quarta-feira_quinta-feira_sexta-feira_s\xE1bado".split("_"),weekdaysShort:"dom_seg_ter_qua_qui_sex_sab".split("_"),weekdaysMin:"Do_2\xAA_3\xAA_4\xAA_5\xAA_6\xAA_Sa".split("_"),months:"janeiro_fevereiro_mar\xE7o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),ordinal:function(e){return e+"\xBA"},weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [\xE0s] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [\xE0s] HH:mm"},relativeTime:{future:"em %s",past:"h\xE1 %s",s:"alguns segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um m\xEAs",MM:"%d meses",y:"um ano",yy:"%d anos"}};return s.default.locale(i,null,!0),i})});var ii=S((Jt,Wt)=>{(function(n,t){typeof Jt=="object"&&typeof Wt<"u"?Wt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_ro=t(n.dayjs)})(Jt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"ro",weekdays:"Duminic\u0103_Luni_Mar\u021Bi_Miercuri_Joi_Vineri_S\xE2mb\u0103t\u0103".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_S\xE2m".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_S\xE2".split("_"),months:"Ianuarie_Februarie_Martie_Aprilie_Mai_Iunie_Iulie_August_Septembrie_Octombrie_Noiembrie_Decembrie".split("_"),monthsShort:"Ian._Febr._Mart._Apr._Mai_Iun._Iul._Aug._Sept._Oct._Nov._Dec.".split("_"),weekStart:1,formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},relativeTime:{future:"peste %s",past:"acum %s",s:"c\xE2teva secunde",m:"un minut",mm:"%d minute",h:"o or\u0103",hh:"%d ore",d:"o zi",dd:"%d zile",M:"o lun\u0103",MM:"%d luni",y:"un an",yy:"%d ani"},ordinal:function(e){return e}};return s.default.locale(i,null,!0),i})});var si=S((Ut,Pt)=>{(function(n,t){typeof Ut=="object"&&typeof Pt<"u"?Pt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_ru=t(n.dayjs)})(Ut,function(n){"use strict";function t(l){return l&&typeof l=="object"&&"default"in l?l:{default:l}}var s=t(n),i="\u044F\u043D\u0432\u0430\u0440\u044F_\u0444\u0435\u0432\u0440\u0430\u043B\u044F_\u043C\u0430\u0440\u0442\u0430_\u0430\u043F\u0440\u0435\u043B\u044F_\u043C\u0430\u044F_\u0438\u044E\u043D\u044F_\u0438\u044E\u043B\u044F_\u0430\u0432\u0433\u0443\u0441\u0442\u0430_\u0441\u0435\u043D\u0442\u044F\u0431\u0440\u044F_\u043E\u043A\u0442\u044F\u0431\u0440\u044F_\u043D\u043E\u044F\u0431\u0440\u044F_\u0434\u0435\u043A\u0430\u0431\u0440\u044F".split("_"),e="\u044F\u043D\u0432\u0430\u0440\u044C_\u0444\u0435\u0432\u0440\u0430\u043B\u044C_\u043C\u0430\u0440\u0442_\u0430\u043F\u0440\u0435\u043B\u044C_\u043C\u0430\u0439_\u0438\u044E\u043D\u044C_\u0438\u044E\u043B\u044C_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043D\u0442\u044F\u0431\u0440\u044C_\u043E\u043A\u0442\u044F\u0431\u0440\u044C_\u043D\u043E\u044F\u0431\u0440\u044C_\u0434\u0435\u043A\u0430\u0431\u0440\u044C".split("_"),r="\u044F\u043D\u0432._\u0444\u0435\u0432\u0440._\u043C\u0430\u0440._\u0430\u043F\u0440._\u043C\u0430\u044F_\u0438\u044E\u043D\u044F_\u0438\u044E\u043B\u044F_\u0430\u0432\u0433._\u0441\u0435\u043D\u0442._\u043E\u043A\u0442._\u043D\u043E\u044F\u0431._\u0434\u0435\u043A.".split("_"),u="\u044F\u043D\u0432._\u0444\u0435\u0432\u0440._\u043C\u0430\u0440\u0442_\u0430\u043F\u0440._\u043C\u0430\u0439_\u0438\u044E\u043D\u044C_\u0438\u044E\u043B\u044C_\u0430\u0432\u0433._\u0441\u0435\u043D\u0442._\u043E\u043A\u0442._\u043D\u043E\u044F\u0431._\u0434\u0435\u043A.".split("_"),a=/D[oD]?(\[[^[\]]*\]|\s)+MMMM?/;function o(l,_,h){var D,p;return h==="m"?_?"\u043C\u0438\u043D\u0443\u0442\u0430":"\u043C\u0438\u043D\u0443\u0442\u0443":l+" "+(D=+l,p={mm:_?"\u043C\u0438\u043D\u0443\u0442\u0430_\u043C\u0438\u043D\u0443\u0442\u044B_\u043C\u0438\u043D\u0443\u0442":"\u043C\u0438\u043D\u0443\u0442\u0443_\u043C\u0438\u043D\u0443\u0442\u044B_\u043C\u0438\u043D\u0443\u0442",hh:"\u0447\u0430\u0441_\u0447\u0430\u0441\u0430_\u0447\u0430\u0441\u043E\u0432",dd:"\u0434\u0435\u043D\u044C_\u0434\u043D\u044F_\u0434\u043D\u0435\u0439",MM:"\u043C\u0435\u0441\u044F\u0446_\u043C\u0435\u0441\u044F\u0446\u0430_\u043C\u0435\u0441\u044F\u0446\u0435\u0432",yy:"\u0433\u043E\u0434_\u0433\u043E\u0434\u0430_\u043B\u0435\u0442"}[h].split("_"),D%10==1&&D%100!=11?p[0]:D%10>=2&&D%10<=4&&(D%100<10||D%100>=20)?p[1]:p[2])}var d=function(l,_){return a.test(_)?i[l.month()]:e[l.month()]};d.s=e,d.f=i;var f=function(l,_){return a.test(_)?r[l.month()]:u[l.month()]};f.s=u,f.f=r;var y={name:"ru",weekdays:"\u0432\u043E\u0441\u043A\u0440\u0435\u0441\u0435\u043D\u044C\u0435_\u043F\u043E\u043D\u0435\u0434\u0435\u043B\u044C\u043D\u0438\u043A_\u0432\u0442\u043E\u0440\u043D\u0438\u043A_\u0441\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0435\u0440\u0433_\u043F\u044F\u0442\u043D\u0438\u0446\u0430_\u0441\u0443\u0431\u0431\u043E\u0442\u0430".split("_"),weekdaysShort:"\u0432\u0441\u043A_\u043F\u043D\u0434_\u0432\u0442\u0440_\u0441\u0440\u0434_\u0447\u0442\u0432_\u043F\u0442\u043D_\u0441\u0431\u0442".split("_"),weekdaysMin:"\u0432\u0441_\u043F\u043D_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043F\u0442_\u0441\u0431".split("_"),months:d,monthsShort:f,weekStart:1,yearStart:4,formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0433.",LLL:"D MMMM YYYY \u0433., H:mm",LLLL:"dddd, D MMMM YYYY \u0433., H:mm"},relativeTime:{future:"\u0447\u0435\u0440\u0435\u0437 %s",past:"%s \u043D\u0430\u0437\u0430\u0434",s:"\u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0441\u0435\u043A\u0443\u043D\u0434",m:o,mm:o,h:"\u0447\u0430\u0441",hh:o,d:"\u0434\u0435\u043D\u044C",dd:o,M:"\u043C\u0435\u0441\u044F\u0446",MM:o,y:"\u0433\u043E\u0434",yy:o},ordinal:function(l){return l},meridiem:function(l){return l<4?"\u043D\u043E\u0447\u0438":l<12?"\u0443\u0442\u0440\u0430":l<17?"\u0434\u043D\u044F":"\u0432\u0435\u0447\u0435\u0440\u0430"}};return s.default.locale(y,null,!0),y})});var ri=S((Rt,Gt)=>{(function(n,t){typeof Rt=="object"&&typeof Gt<"u"?Gt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_sv=t(n.dayjs)})(Rt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"sv",weekdays:"s\xF6ndag_m\xE5ndag_tisdag_onsdag_torsdag_fredag_l\xF6rdag".split("_"),weekdaysShort:"s\xF6n_m\xE5n_tis_ons_tor_fre_l\xF6r".split("_"),weekdaysMin:"s\xF6_m\xE5_ti_on_to_fr_l\xF6".split("_"),months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekStart:1,yearStart:4,ordinal:function(e){var r=e%10;return"["+e+(r===1||r===2?"a":"e")+"]"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},relativeTime:{future:"om %s",past:"f\xF6r %s sedan",s:"n\xE5gra sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en m\xE5nad",MM:"%d m\xE5nader",y:"ett \xE5r",yy:"%d \xE5r"}};return s.default.locale(i,null,!0),i})});var ai=S((Zt,Vt)=>{(function(n,t){typeof Zt=="object"&&typeof Vt<"u"?Vt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_th=t(n.dayjs)})(Zt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"th",weekdays:"\u0E2D\u0E32\u0E17\u0E34\u0E15\u0E22\u0E4C_\u0E08\u0E31\u0E19\u0E17\u0E23\u0E4C_\u0E2D\u0E31\u0E07\u0E04\u0E32\u0E23_\u0E1E\u0E38\u0E18_\u0E1E\u0E24\u0E2B\u0E31\u0E2A\u0E1A\u0E14\u0E35_\u0E28\u0E38\u0E01\u0E23\u0E4C_\u0E40\u0E2A\u0E32\u0E23\u0E4C".split("_"),weekdaysShort:"\u0E2D\u0E32\u0E17\u0E34\u0E15\u0E22\u0E4C_\u0E08\u0E31\u0E19\u0E17\u0E23\u0E4C_\u0E2D\u0E31\u0E07\u0E04\u0E32\u0E23_\u0E1E\u0E38\u0E18_\u0E1E\u0E24\u0E2B\u0E31\u0E2A_\u0E28\u0E38\u0E01\u0E23\u0E4C_\u0E40\u0E2A\u0E32\u0E23\u0E4C".split("_"),weekdaysMin:"\u0E2D\u0E32._\u0E08._\u0E2D._\u0E1E._\u0E1E\u0E24._\u0E28._\u0E2A.".split("_"),months:"\u0E21\u0E01\u0E23\u0E32\u0E04\u0E21_\u0E01\u0E38\u0E21\u0E20\u0E32\u0E1E\u0E31\u0E19\u0E18\u0E4C_\u0E21\u0E35\u0E19\u0E32\u0E04\u0E21_\u0E40\u0E21\u0E29\u0E32\u0E22\u0E19_\u0E1E\u0E24\u0E29\u0E20\u0E32\u0E04\u0E21_\u0E21\u0E34\u0E16\u0E38\u0E19\u0E32\u0E22\u0E19_\u0E01\u0E23\u0E01\u0E0E\u0E32\u0E04\u0E21_\u0E2A\u0E34\u0E07\u0E2B\u0E32\u0E04\u0E21_\u0E01\u0E31\u0E19\u0E22\u0E32\u0E22\u0E19_\u0E15\u0E38\u0E25\u0E32\u0E04\u0E21_\u0E1E\u0E24\u0E28\u0E08\u0E34\u0E01\u0E32\u0E22\u0E19_\u0E18\u0E31\u0E19\u0E27\u0E32\u0E04\u0E21".split("_"),monthsShort:"\u0E21.\u0E04._\u0E01.\u0E1E._\u0E21\u0E35.\u0E04._\u0E40\u0E21.\u0E22._\u0E1E.\u0E04._\u0E21\u0E34.\u0E22._\u0E01.\u0E04._\u0E2A.\u0E04._\u0E01.\u0E22._\u0E15.\u0E04._\u0E1E.\u0E22._\u0E18.\u0E04.".split("_"),formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY \u0E40\u0E27\u0E25\u0E32 H:mm",LLLL:"\u0E27\u0E31\u0E19dddd\u0E17\u0E35\u0E48 D MMMM YYYY \u0E40\u0E27\u0E25\u0E32 H:mm"},relativeTime:{future:"\u0E2D\u0E35\u0E01 %s",past:"%s\u0E17\u0E35\u0E48\u0E41\u0E25\u0E49\u0E27",s:"\u0E44\u0E21\u0E48\u0E01\u0E35\u0E48\u0E27\u0E34\u0E19\u0E32\u0E17\u0E35",m:"1 \u0E19\u0E32\u0E17\u0E35",mm:"%d \u0E19\u0E32\u0E17\u0E35",h:"1 \u0E0A\u0E31\u0E48\u0E27\u0E42\u0E21\u0E07",hh:"%d \u0E0A\u0E31\u0E48\u0E27\u0E42\u0E21\u0E07",d:"1 \u0E27\u0E31\u0E19",dd:"%d \u0E27\u0E31\u0E19",M:"1 \u0E40\u0E14\u0E37\u0E2D\u0E19",MM:"%d \u0E40\u0E14\u0E37\u0E2D\u0E19",y:"1 \u0E1B\u0E35",yy:"%d \u0E1B\u0E35"},ordinal:function(e){return e+"."}};return s.default.locale(i,null,!0),i})});var ui=S((Kt,Xt)=>{(function(n,t){typeof Kt=="object"&&typeof Xt<"u"?Xt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_tr=t(n.dayjs)})(Kt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"tr",weekdays:"Pazar_Pazartesi_Sal\u0131_\xC7ar\u015Famba_Per\u015Fembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pts_Sal_\xC7ar_Per_Cum_Cts".split("_"),weekdaysMin:"Pz_Pt_Sa_\xC7a_Pe_Cu_Ct".split("_"),months:"Ocak_\u015Eubat_Mart_Nisan_May\u0131s_Haziran_Temmuz_A\u011Fustos_Eyl\xFCl_Ekim_Kas\u0131m_Aral\u0131k".split("_"),monthsShort:"Oca_\u015Eub_Mar_Nis_May_Haz_Tem_A\u011Fu_Eyl_Eki_Kas_Ara".split("_"),weekStart:1,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"%s sonra",past:"%s \xF6nce",s:"birka\xE7 saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir g\xFCn",dd:"%d g\xFCn",M:"bir ay",MM:"%d ay",y:"bir y\u0131l",yy:"%d y\u0131l"},ordinal:function(e){return e+"."}};return s.default.locale(i,null,!0),i})});var oi=S((Bt,Qt)=>{(function(n,t){typeof Bt=="object"&&typeof Qt<"u"?Qt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_uk=t(n.dayjs)})(Bt,function(n){"use strict";function t(d){return d&&typeof d=="object"&&"default"in d?d:{default:d}}var s=t(n),i="\u0441\u0456\u0447\u043D\u044F_\u043B\u044E\u0442\u043E\u0433\u043E_\u0431\u0435\u0440\u0435\u0437\u043D\u044F_\u043A\u0432\u0456\u0442\u043D\u044F_\u0442\u0440\u0430\u0432\u043D\u044F_\u0447\u0435\u0440\u0432\u043D\u044F_\u043B\u0438\u043F\u043D\u044F_\u0441\u0435\u0440\u043F\u043D\u044F_\u0432\u0435\u0440\u0435\u0441\u043D\u044F_\u0436\u043E\u0432\u0442\u043D\u044F_\u043B\u0438\u0441\u0442\u043E\u043F\u0430\u0434\u0430_\u0433\u0440\u0443\u0434\u043D\u044F".split("_"),e="\u0441\u0456\u0447\u0435\u043D\u044C_\u043B\u044E\u0442\u0438\u0439_\u0431\u0435\u0440\u0435\u0437\u0435\u043D\u044C_\u043A\u0432\u0456\u0442\u0435\u043D\u044C_\u0442\u0440\u0430\u0432\u0435\u043D\u044C_\u0447\u0435\u0440\u0432\u0435\u043D\u044C_\u043B\u0438\u043F\u0435\u043D\u044C_\u0441\u0435\u0440\u043F\u0435\u043D\u044C_\u0432\u0435\u0440\u0435\u0441\u0435\u043D\u044C_\u0436\u043E\u0432\u0442\u0435\u043D\u044C_\u043B\u0438\u0441\u0442\u043E\u043F\u0430\u0434_\u0433\u0440\u0443\u0434\u0435\u043D\u044C".split("_"),r=/D[oD]?(\[[^[\]]*\]|\s)+MMMM?/;function u(d,f,y){var l,_;return y==="m"?f?"\u0445\u0432\u0438\u043B\u0438\u043D\u0430":"\u0445\u0432\u0438\u043B\u0438\u043D\u0443":y==="h"?f?"\u0433\u043E\u0434\u0438\u043D\u0430":"\u0433\u043E\u0434\u0438\u043D\u0443":d+" "+(l=+d,_={ss:f?"\u0441\u0435\u043A\u0443\u043D\u0434\u0430_\u0441\u0435\u043A\u0443\u043D\u0434\u0438_\u0441\u0435\u043A\u0443\u043D\u0434":"\u0441\u0435\u043A\u0443\u043D\u0434\u0443_\u0441\u0435\u043A\u0443\u043D\u0434\u0438_\u0441\u0435\u043A\u0443\u043D\u0434",mm:f?"\u0445\u0432\u0438\u043B\u0438\u043D\u0430_\u0445\u0432\u0438\u043B\u0438\u043D\u0438_\u0445\u0432\u0438\u043B\u0438\u043D":"\u0445\u0432\u0438\u043B\u0438\u043D\u0443_\u0445\u0432\u0438\u043B\u0438\u043D\u0438_\u0445\u0432\u0438\u043B\u0438\u043D",hh:f?"\u0433\u043E\u0434\u0438\u043D\u0430_\u0433\u043E\u0434\u0438\u043D\u0438_\u0433\u043E\u0434\u0438\u043D":"\u0433\u043E\u0434\u0438\u043D\u0443_\u0433\u043E\u0434\u0438\u043D\u0438_\u0433\u043E\u0434\u0438\u043D",dd:"\u0434\u0435\u043D\u044C_\u0434\u043D\u0456_\u0434\u043D\u0456\u0432",MM:"\u043C\u0456\u0441\u044F\u0446\u044C_\u043C\u0456\u0441\u044F\u0446\u0456_\u043C\u0456\u0441\u044F\u0446\u0456\u0432",yy:"\u0440\u0456\u043A_\u0440\u043E\u043A\u0438_\u0440\u043E\u043A\u0456\u0432"}[y].split("_"),l%10==1&&l%100!=11?_[0]:l%10>=2&&l%10<=4&&(l%100<10||l%100>=20)?_[1]:_[2])}var a=function(d,f){return r.test(f)?i[d.month()]:e[d.month()]};a.s=e,a.f=i;var o={name:"uk",weekdays:"\u043D\u0435\u0434\u0456\u043B\u044F_\u043F\u043E\u043D\u0435\u0434\u0456\u043B\u043E\u043A_\u0432\u0456\u0432\u0442\u043E\u0440\u043E\u043A_\u0441\u0435\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0435\u0440_\u043F\u2019\u044F\u0442\u043D\u0438\u0446\u044F_\u0441\u0443\u0431\u043E\u0442\u0430".split("_"),weekdaysShort:"\u043D\u0434\u043B_\u043F\u043D\u0434_\u0432\u0442\u0440_\u0441\u0440\u0434_\u0447\u0442\u0432_\u043F\u0442\u043D_\u0441\u0431\u0442".split("_"),weekdaysMin:"\u043D\u0434_\u043F\u043D_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043F\u0442_\u0441\u0431".split("_"),months:a,monthsShort:"\u0441\u0456\u0447_\u043B\u044E\u0442_\u0431\u0435\u0440_\u043A\u0432\u0456\u0442_\u0442\u0440\u0430\u0432_\u0447\u0435\u0440\u0432_\u043B\u0438\u043F_\u0441\u0435\u0440\u043F_\u0432\u0435\u0440_\u0436\u043E\u0432\u0442_\u043B\u0438\u0441\u0442_\u0433\u0440\u0443\u0434".split("_"),weekStart:1,relativeTime:{future:"\u0437\u0430 %s",past:"%s \u0442\u043E\u043C\u0443",s:"\u0434\u0435\u043A\u0456\u043B\u044C\u043A\u0430 \u0441\u0435\u043A\u0443\u043D\u0434",m:u,mm:u,h:u,hh:u,d:"\u0434\u0435\u043D\u044C",dd:u,M:"\u043C\u0456\u0441\u044F\u0446\u044C",MM:u,y:"\u0440\u0456\u043A",yy:u},ordinal:function(d){return d},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0440.",LLL:"D MMMM YYYY \u0440., HH:mm",LLLL:"dddd, D MMMM YYYY \u0440., HH:mm"}};return s.default.locale(o,null,!0),o})});var di=S((en,tn)=>{(function(n,t){typeof en=="object"&&typeof tn<"u"?tn.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_vi=t(n.dayjs)})(en,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"vi",weekdays:"ch\u1EE7 nh\u1EADt_th\u1EE9 hai_th\u1EE9 ba_th\u1EE9 t\u01B0_th\u1EE9 n\u0103m_th\u1EE9 s\xE1u_th\u1EE9 b\u1EA3y".split("_"),months:"th\xE1ng 1_th\xE1ng 2_th\xE1ng 3_th\xE1ng 4_th\xE1ng 5_th\xE1ng 6_th\xE1ng 7_th\xE1ng 8_th\xE1ng 9_th\xE1ng 10_th\xE1ng 11_th\xE1ng 12".split("_"),weekStart:1,weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),monthsShort:"Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [n\u0103m] YYYY",LLL:"D MMMM [n\u0103m] YYYY HH:mm",LLLL:"dddd, D MMMM [n\u0103m] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},relativeTime:{future:"%s t\u1EDBi",past:"%s tr\u01B0\u1EDBc",s:"v\xE0i gi\xE2y",m:"m\u1ED9t ph\xFAt",mm:"%d ph\xFAt",h:"m\u1ED9t gi\u1EDD",hh:"%d gi\u1EDD",d:"m\u1ED9t ng\xE0y",dd:"%d ng\xE0y",M:"m\u1ED9t th\xE1ng",MM:"%d th\xE1ng",y:"m\u1ED9t n\u0103m",yy:"%d n\u0103m"}};return s.default.locale(i,null,!0),i})});var _i=S((nn,sn)=>{(function(n,t){typeof nn=="object"&&typeof sn<"u"?sn.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_zh_cn=t(n.dayjs)})(nn,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"zh-cn",weekdays:"\u661F\u671F\u65E5_\u661F\u671F\u4E00_\u661F\u671F\u4E8C_\u661F\u671F\u4E09_\u661F\u671F\u56DB_\u661F\u671F\u4E94_\u661F\u671F\u516D".split("_"),weekdaysShort:"\u5468\u65E5_\u5468\u4E00_\u5468\u4E8C_\u5468\u4E09_\u5468\u56DB_\u5468\u4E94_\u5468\u516D".split("_"),weekdaysMin:"\u65E5_\u4E00_\u4E8C_\u4E09_\u56DB_\u4E94_\u516D".split("_"),months:"\u4E00\u6708_\u4E8C\u6708_\u4E09\u6708_\u56DB\u6708_\u4E94\u6708_\u516D\u6708_\u4E03\u6708_\u516B\u6708_\u4E5D\u6708_\u5341\u6708_\u5341\u4E00\u6708_\u5341\u4E8C\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),ordinal:function(e,r){return r==="W"?e+"\u5468":e+"\u65E5"},weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5E74M\u6708D\u65E5",LLL:"YYYY\u5E74M\u6708D\u65E5Ah\u70B9mm\u5206",LLLL:"YYYY\u5E74M\u6708D\u65E5ddddAh\u70B9mm\u5206",l:"YYYY/M/D",ll:"YYYY\u5E74M\u6708D\u65E5",lll:"YYYY\u5E74M\u6708D\u65E5 HH:mm",llll:"YYYY\u5E74M\u6708D\u65E5dddd HH:mm"},relativeTime:{future:"%s\u5185",past:"%s\u524D",s:"\u51E0\u79D2",m:"1 \u5206\u949F",mm:"%d \u5206\u949F",h:"1 \u5C0F\u65F6",hh:"%d \u5C0F\u65F6",d:"1 \u5929",dd:"%d \u5929",M:"1 \u4E2A\u6708",MM:"%d \u4E2A\u6708",y:"1 \u5E74",yy:"%d \u5E74"},meridiem:function(e,r){var u=100*e+r;return u<600?"\u51CC\u6668":u<900?"\u65E9\u4E0A":u<1100?"\u4E0A\u5348":u<1300?"\u4E2D\u5348":u<1800?"\u4E0B\u5348":"\u665A\u4E0A"}};return s.default.locale(i,null,!0),i})});var fi=S((rn,an)=>{(function(n,t){typeof rn=="object"&&typeof an<"u"?an.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_zh_tw=t(n.dayjs)})(rn,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"zh-tw",weekdays:"\u661F\u671F\u65E5_\u661F\u671F\u4E00_\u661F\u671F\u4E8C_\u661F\u671F\u4E09_\u661F\u671F\u56DB_\u661F\u671F\u4E94_\u661F\u671F\u516D".split("_"),weekdaysShort:"\u9031\u65E5_\u9031\u4E00_\u9031\u4E8C_\u9031\u4E09_\u9031\u56DB_\u9031\u4E94_\u9031\u516D".split("_"),weekdaysMin:"\u65E5_\u4E00_\u4E8C_\u4E09_\u56DB_\u4E94_\u516D".split("_"),months:"\u4E00\u6708_\u4E8C\u6708_\u4E09\u6708_\u56DB\u6708_\u4E94\u6708_\u516D\u6708_\u4E03\u6708_\u516B\u6708_\u4E5D\u6708_\u5341\u6708_\u5341\u4E00\u6708_\u5341\u4E8C\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),ordinal:function(e,r){return r==="W"?e+"\u9031":e+"\u65E5"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5E74M\u6708D\u65E5",LLL:"YYYY\u5E74M\u6708D\u65E5 HH:mm",LLLL:"YYYY\u5E74M\u6708D\u65E5dddd HH:mm",l:"YYYY/M/D",ll:"YYYY\u5E74M\u6708D\u65E5",lll:"YYYY\u5E74M\u6708D\u65E5 HH:mm",llll:"YYYY\u5E74M\u6708D\u65E5dddd HH:mm"},relativeTime:{future:"%s\u5167",past:"%s\u524D",s:"\u5E7E\u79D2",m:"1 \u5206\u9418",mm:"%d \u5206\u9418",h:"1 \u5C0F\u6642",hh:"%d \u5C0F\u6642",d:"1 \u5929",dd:"%d \u5929",M:"1 \u500B\u6708",MM:"%d \u500B\u6708",y:"1 \u5E74",yy:"%d \u5E74"},meridiem:function(e,r){var u=100*e+r;return u<600?"\u51CC\u6668":u<900?"\u65E9\u4E0A":u<1100?"\u4E0A\u5348":u<1300?"\u4E2D\u5348":u<1800?"\u4E0B\u5348":"\u665A\u4E0A"}};return s.default.locale(i,null,!0),i})});var on=60,dn=on*60,_n=dn*24,Si=_n*7,ae=1e3,le=on*ae,pe=dn*ae,fn=_n*ae,ln=Si*ae,_e="millisecond",ne="second",ie="minute",se="hour",K="day",oe="week",R="month",me="quarter",X="year",re="date",mn="YYYY-MM-DDTHH:mm:ssZ",De="Invalid Date",cn=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,hn=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g;var yn={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(t){var s=["th","st","nd","rd"],i=t%100;return"["+t+(s[(i-20)%10]||s[i]||s[0])+"]"}};var Le=function(t,s,i){var e=String(t);return!e||e.length>=s?t:""+Array(s+1-e.length).join(i)+t},bi=function(t){var s=-t.utcOffset(),i=Math.abs(s),e=Math.floor(i/60),r=i%60;return(s<=0?"+":"-")+Le(e,2,"0")+":"+Le(r,2,"0")},ki=function n(t,s){if(t.date()1)return n(u[0])}else{var a=t.name;ue[a]=t,e=a}return!i&&e&&(fe=e),e||!i&&fe},J=function(t,s){if(ve(t))return t.clone();var i=typeof s=="object"?s:{};return i.date=t,i.args=arguments,new he(i)},wi=function(t,s){return J(t,{locale:s.$L,utc:s.$u,x:s.$x,$offset:s.$offset})},A=Yn;A.l=ce;A.i=ve;A.w=wi;var $i=function(t){var s=t.date,i=t.utc;if(s===null)return new Date(NaN);if(A.u(s))return new Date;if(s instanceof Date)return new Date(s);if(typeof s=="string"&&!/Z$/i.test(s)){var e=s.match(cn);if(e){var r=e[2]-1||0,u=(e[7]||"0").substring(0,3);return i?new Date(Date.UTC(e[1],r,e[3]||1,e[4]||0,e[5]||0,e[6]||0,u)):new Date(e[1],r,e[3]||1,e[4]||0,e[5]||0,e[6]||0,u)}}return new Date(s)},he=function(){function n(s){this.$L=ce(s.locale,null,!0),this.parse(s),this.$x=this.$x||s.x||{},this[pn]=!0}var t=n.prototype;return t.parse=function(i){this.$d=$i(i),this.init()},t.init=function(){var i=this.$d;this.$y=i.getFullYear(),this.$M=i.getMonth(),this.$D=i.getDate(),this.$W=i.getDay(),this.$H=i.getHours(),this.$m=i.getMinutes(),this.$s=i.getSeconds(),this.$ms=i.getMilliseconds()},t.$utils=function(){return A},t.isValid=function(){return this.$d.toString()!==De},t.isSame=function(i,e){var r=J(i);return this.startOf(e)<=r&&r<=this.endOf(e)},t.isAfter=function(i,e){return J(i)this.togglePanelVisibility(this.$refs.button)),this.$watch("focusedMonth",()=>{this.focusedMonth=+this.focusedMonth,this.focusedDate.month()!==this.focusedMonth&&(this.focusedDate=this.focusedDate.month(this.focusedMonth))}),this.$watch("focusedYear",()=>{if(this.focusedYear?.length>4&&(this.focusedYear=this.focusedYear.substring(0,4)),!this.focusedYear||this.focusedYear?.length!==4)return;let o=+this.focusedYear;Number.isInteger(o)||(o=O().tz(u).year(),this.focusedYear=o),this.focusedDate.year()!==o&&(this.focusedDate=this.focusedDate.year(o))}),this.$watch("focusedDate",()=>{let o=this.focusedDate.month(),d=this.focusedDate.year();this.focusedMonth!==o&&(this.focusedMonth=o),this.focusedYear!==d&&(this.focusedYear=d),this.setupDaysGrid()}),this.$watch("hour",()=>{let o=+this.hour;if(Number.isInteger(o)?o>23?this.hour=0:o<0?this.hour=23:this.hour=o:this.hour=0,this.isClearingState)return;let d=this.getSelectedDate()??this.focusedDate;this.setState(d.hour(this.hour??0))}),this.$watch("minute",()=>{let o=+this.minute;if(Number.isInteger(o)?o>59?this.minute=0:o<0?this.minute=59:this.minute=o:this.minute=0,this.isClearingState)return;let d=this.getSelectedDate()??this.focusedDate;this.setState(d.minute(this.minute??0))}),this.$watch("second",()=>{let o=+this.second;if(Number.isInteger(o)?o>59?this.second=0:o<0?this.second=59:this.second=o:this.second=0,this.isClearingState)return;let d=this.getSelectedDate()??this.focusedDate;this.setState(d.second(this.second??0))}),this.$watch("state",()=>{if(this.state===void 0)return;let o=this.getSelectedDate();if(o===null){this.clearState();return}this.getMaxDate()!==null&&o?.isAfter(this.getMaxDate())&&(o=null),this.getMinDate()!==null&&o?.isBefore(this.getMinDate())&&(o=null);let d=o?.hour()??0;this.hour!==d&&(this.hour=d);let f=o?.minute()??0;this.minute!==f&&(this.minute=f);let y=o?.second()??0;this.second!==y&&(this.second=y),this.setDisplayText()})},clearState:function(){this.isClearingState=!0,this.setState(null),this.hour=0,this.minute=0,this.second=0,this.$nextTick(()=>this.isClearingState=!1)},dateIsDisabled:function(a){return!!(this.$refs?.disabledDates&&JSON.parse(this.$refs.disabledDates.value??[]).some(o=>(o=O(o),o.isValid()?o.isSame(a,"day"):!1))||this.getMaxDate()&&a.isAfter(this.getMaxDate(),"day")||this.getMinDate()&&a.isBefore(this.getMinDate(),"day"))},dayIsDisabled:function(a){return this.focusedDate??(this.focusedDate=O().tz(u)),this.dateIsDisabled(this.focusedDate.date(a))},dayIsSelected:function(a){let o=this.getSelectedDate();return o===null?!1:(this.focusedDate??(this.focusedDate=O().tz(u)),o.date()===a&&o.month()===this.focusedDate.month()&&o.year()===this.focusedDate.year())},dayIsToday:function(a){let o=O().tz(u);return this.focusedDate??(this.focusedDate=o),o.date()===a&&o.month()===this.focusedDate.month()&&o.year()===this.focusedDate.year()},focusPreviousDay:function(){this.focusedDate??(this.focusedDate=O().tz(u)),this.focusedDate=this.focusedDate.subtract(1,"day")},focusPreviousWeek:function(){this.focusedDate??(this.focusedDate=O().tz(u)),this.focusedDate=this.focusedDate.subtract(1,"week")},focusNextDay:function(){this.focusedDate??(this.focusedDate=O().tz(u)),this.focusedDate=this.focusedDate.add(1,"day")},focusNextWeek:function(){this.focusedDate??(this.focusedDate=O().tz(u)),this.focusedDate=this.focusedDate.add(1,"week")},getDayLabels:function(){let a=O.weekdaysShort();return t===0?a:[...a.slice(t),...a.slice(0,t)]},getMaxDate:function(){let a=O(this.$refs.maxDate?.value);return a.isValid()?a:null},getMinDate:function(){let a=O(this.$refs.minDate?.value);return a.isValid()?a:null},getSelectedDate:function(){if(this.state===void 0||this.state===null)return null;let a=O(this.state);return a.isValid()?a:null},togglePanelVisibility:function(){this.isOpen()||(this.focusedDate=this.getSelectedDate()??this.getMinDate()??O().tz(u),this.setupDaysGrid()),this.$refs.panel.toggle(this.$refs.button)},selectDate:function(a=null){a&&this.setFocusedDay(a),this.focusedDate??(this.focusedDate=O().tz(u)),this.setState(this.focusedDate),e&&this.togglePanelVisibility()},setDisplayText:function(){this.displayText=this.getSelectedDate()?this.getSelectedDate().format(n):""},setMonths:function(){this.months=O.months()},setDayLabels:function(){this.dayLabels=this.getDayLabels()},setupDaysGrid:function(){this.focusedDate??(this.focusedDate=O().tz(u)),this.emptyDaysInFocusedMonth=Array.from({length:this.focusedDate.date(8-t).day()},(a,o)=>o+1),this.daysInFocusedMonth=Array.from({length:this.focusedDate.daysInMonth()},(a,o)=>o+1)},setFocusedDay:function(a){this.focusedDate=(this.focusedDate??O().tz(u)).date(a)},setState:function(a){if(a===null){this.state=null,this.setDisplayText();return}this.dateIsDisabled(a)||(this.state=a.hour(this.hour??0).minute(this.minute??0).second(this.second??0).format("YYYY-MM-DD HH:mm:ss"),this.setDisplayText())},isOpen:function(){return this.$refs.panel?.style.display==="block"}}}var li={ar:kn(),bs:Hn(),ca:jn(),ckb:Fe(),cs:wn(),cy:$n(),da:Cn(),de:On(),en:zn(),es:An(),et:In(),fa:qn(),fi:xn(),fr:Nn(),hi:En(),hu:Fn(),hy:Jn(),id:Wn(),it:Un(),ja:Pn(),ka:Rn(),km:Gn(),ku:Fe(),lt:Zn(),lv:Vn(),ms:Kn(),my:Xn(),nl:Bn(),no:Qn(),pl:ei(),pt_BR:ti(),pt_PT:ni(),ro:ii(),ru:si(),sv:ri(),th:ai(),tr:ui(),uk:oi(),vi:di(),zh_CN:_i(),zh_TW:fi()};export{Ci as default}; diff --git a/public/js/filament/forms/components/file-upload.js b/public/js/filament/forms/components/file-upload.js new file mode 100644 index 0000000..a5ad4ef --- /dev/null +++ b/public/js/filament/forms/components/file-upload.js @@ -0,0 +1,123 @@ +var Jl=Object.defineProperty;var er=(e,t)=>{for(var i in t)Jl(e,i,{get:t[i],enumerable:!0})};var na={};er(na,{FileOrigin:()=>zt,FileStatus:()=>Et,OptionTypes:()=>Gi,Status:()=>no,create:()=>ut,destroy:()=>ft,find:()=>Wi,getOptions:()=>Hi,parse:()=>Ui,registerPlugin:()=>ve,setOptions:()=>Dt,supported:()=>Vi});var tr=e=>e instanceof HTMLElement,ir=(e,t=[],i=[])=>{let a={...e},n=[],o=[],l=()=>({...a}),r=()=>{let f=[...n];return n.length=0,f},s=()=>{let f=[...o];o.length=0,f.forEach(({type:h,data:g})=>{p(h,g)})},p=(f,h,g)=>{if(g&&!document.hidden){o.push({type:f,data:h});return}u[f]&&u[f](h),n.push({type:f,data:h})},c=(f,...h)=>m[f]?m[f](...h):null,d={getState:l,processActionQueue:r,processDispatchQueue:s,dispatch:p,query:c},m={};t.forEach(f=>{m={...f(a),...m}});let u={};return i.forEach(f=>{u={...f(p,c,a),...u}}),d},ar=(e,t,i)=>{if(typeof i=="function"){e[t]=i;return}Object.defineProperty(e,t,{...i})},te=(e,t)=>{for(let i in e)e.hasOwnProperty(i)&&t(i,e[i])},We=e=>{let t={};return te(e,i=>{ar(t,i,e[i])}),t},ne=(e,t,i=null)=>{if(i===null)return e.getAttribute(t)||e.hasAttribute(t);e.setAttribute(t,i)},nr="http://www.w3.org/2000/svg",or=["svg","path"],Oa=e=>or.includes(e),ni=(e,t,i={})=>{typeof t=="object"&&(i=t,t=null);let a=Oa(e)?document.createElementNS(nr,e):document.createElement(e);return t&&(Oa(e)?ne(a,"class",t):a.className=t),te(i,(n,o)=>{ne(a,n,o)}),a},lr=e=>(t,i)=>{typeof i<"u"&&e.children[i]?e.insertBefore(t,e.children[i]):e.appendChild(t)},rr=(e,t)=>(i,a)=>(typeof a<"u"?t.splice(a,0,i):t.push(i),i),sr=(e,t)=>i=>(t.splice(t.indexOf(i),1),i.element.parentNode&&e.removeChild(i.element),i),cr=(()=>typeof window<"u"&&typeof window.document<"u")(),En=()=>cr,dr=En()?ni("svg"):{},pr="children"in dr?e=>e.children.length:e=>e.childNodes.length,bn=(e,t,i,a)=>{let n=i[0]||e.left,o=i[1]||e.top,l=n+e.width,r=o+e.height*(a[1]||1),s={element:{...e},inner:{left:e.left,top:e.top,right:e.right,bottom:e.bottom},outer:{left:n,top:o,right:l,bottom:r}};return t.filter(p=>!p.isRectIgnored()).map(p=>p.rect).forEach(p=>{Pa(s.inner,{...p.inner}),Pa(s.outer,{...p.outer})}),Da(s.inner),s.outer.bottom+=s.element.marginBottom,s.outer.right+=s.element.marginRight,Da(s.outer),s},Pa=(e,t)=>{t.top+=e.top,t.right+=e.left,t.bottom+=e.top,t.left+=e.left,t.bottom>e.bottom&&(e.bottom=t.bottom),t.right>e.right&&(e.right=t.right)},Da=e=>{e.width=e.right-e.left,e.height=e.bottom-e.top},$e=e=>typeof e=="number",mr=(e,t,i,a=.001)=>Math.abs(e-t){let a=null,n=null,o=0,l=!1,p=We({interpolate:(c,d)=>{if(l)return;if(!($e(a)&&$e(n))){l=!0,o=0;return}let m=-(n-a)*e;o+=m/i,n+=o,o*=t,mr(n,a,o)||d?(n=a,o=0,l=!0,p.onupdate(n),p.oncomplete(n)):p.onupdate(n)},target:{set:c=>{if($e(c)&&!$e(n)&&(n=c),a===null&&(a=c,n=c),a=c,n===a||typeof a>"u"){l=!0,o=0,p.onupdate(n),p.oncomplete(n);return}l=!1},get:()=>a},resting:{get:()=>l},onupdate:c=>{},oncomplete:c=>{}});return p};var fr=e=>e<.5?2*e*e:-1+(4-2*e)*e,hr=({duration:e=500,easing:t=fr,delay:i=0}={})=>{let a=null,n,o,l=!0,r=!1,s=null,c=We({interpolate:(d,m)=>{l||s===null||(a===null&&(a=d),!(d-a=e||m?(n=1,o=r?0:1,c.onupdate(o*s),c.oncomplete(o*s),l=!0):(o=n/e,c.onupdate((n>=0?t(r?1-o:o):0)*s))))},target:{get:()=>r?0:s,set:d=>{if(s===null){s=d,c.onupdate(d),c.oncomplete(d);return}dl},onupdate:d=>{},oncomplete:d=>{}});return c},Fa={spring:ur,tween:hr},gr=(e,t,i)=>{let a=e[t]&&typeof e[t][i]=="object"?e[t][i]:e[t]||e,n=typeof a=="string"?a:a.type,o=typeof a=="object"?{...a}:{};return Fa[n]?Fa[n](o):null},ji=(e,t,i,a=!1)=>{t=Array.isArray(t)?t:[t],t.forEach(n=>{e.forEach(o=>{let l=o,r=()=>i[o],s=p=>i[o]=p;typeof o=="object"&&(l=o.key,r=o.getter||r,s=o.setter||s),!(n[l]&&!a)&&(n[l]={get:r,set:s})})})},Er=({mixinConfig:e,viewProps:t,viewInternalAPI:i,viewExternalAPI:a})=>{let n={...t},o=[];return te(e,(l,r)=>{let s=gr(r);if(!s)return;s.onupdate=c=>{t[l]=c},s.target=n[l],ji([{key:l,setter:c=>{s.target!==c&&(s.target=c)},getter:()=>t[l]}],[i,a],t,!0),o.push(s)}),{write:l=>{let r=document.hidden,s=!0;return o.forEach(p=>{p.resting||(s=!1),p.interpolate(l,r)}),s},destroy:()=>{}}},br=e=>(t,i)=>{e.addEventListener(t,i)},Tr=e=>(t,i)=>{e.removeEventListener(t,i)},Ir=({mixinConfig:e,viewProps:t,viewInternalAPI:i,viewExternalAPI:a,viewState:n,view:o})=>{let l=[],r=br(o.element),s=Tr(o.element);return a.on=(p,c)=>{l.push({type:p,fn:c}),r(p,c)},a.off=(p,c)=>{l.splice(l.findIndex(d=>d.type===p&&d.fn===c),1),s(p,c)},{write:()=>!0,destroy:()=>{l.forEach(p=>{s(p.type,p.fn)})}}},vr=({mixinConfig:e,viewProps:t,viewExternalAPI:i})=>{ji(e,i,t)},ue=e=>e!=null,xr={opacity:1,scaleX:1,scaleY:1,translateX:0,translateY:0,rotateX:0,rotateY:0,rotateZ:0,originX:0,originY:0},yr=({mixinConfig:e,viewProps:t,viewInternalAPI:i,viewExternalAPI:a,view:n})=>{let o={...t},l={};ji(e,[i,a],t);let r=()=>[t.translateX||0,t.translateY||0],s=()=>[t.scaleX||0,t.scaleY||0],p=()=>n.rect?bn(n.rect,n.childViews,r(),s()):null;return i.rect={get:p},a.rect={get:p},e.forEach(c=>{t[c]=typeof o[c]>"u"?xr[c]:o[c]}),{write:()=>{if(_r(l,t))return Rr(n.element,t),Object.assign(l,{...t}),!0},destroy:()=>{}}},_r=(e,t)=>{if(Object.keys(e).length!==Object.keys(t).length)return!0;for(let i in t)if(t[i]!==e[i])return!0;return!1},Rr=(e,{opacity:t,perspective:i,translateX:a,translateY:n,scaleX:o,scaleY:l,rotateX:r,rotateY:s,rotateZ:p,originX:c,originY:d,width:m,height:u})=>{let f="",h="";(ue(c)||ue(d))&&(h+=`transform-origin: ${c||0}px ${d||0}px;`),ue(i)&&(f+=`perspective(${i}px) `),(ue(a)||ue(n))&&(f+=`translate3d(${a||0}px, ${n||0}px, 0) `),(ue(o)||ue(l))&&(f+=`scale3d(${ue(o)?o:1}, ${ue(l)?l:1}, 1) `),ue(p)&&(f+=`rotateZ(${p}rad) `),ue(r)&&(f+=`rotateX(${r}rad) `),ue(s)&&(f+=`rotateY(${s}rad) `),f.length&&(h+=`transform:${f};`),ue(t)&&(h+=`opacity:${t};`,t===0&&(h+="visibility:hidden;"),t<1&&(h+="pointer-events:none;")),ue(u)&&(h+=`height:${u}px;`),ue(m)&&(h+=`width:${m}px;`);let g=e.elementCurrentStyle||"";(h.length!==g.length||h!==g)&&(e.style.cssText=h,e.elementCurrentStyle=h)},wr={styles:yr,listeners:Ir,animations:Er,apis:vr},za=(e={},t={},i={})=>(t.layoutCalculated||(e.paddingTop=parseInt(i.paddingTop,10)||0,e.marginTop=parseInt(i.marginTop,10)||0,e.marginRight=parseInt(i.marginRight,10)||0,e.marginBottom=parseInt(i.marginBottom,10)||0,e.marginLeft=parseInt(i.marginLeft,10)||0,t.layoutCalculated=!0),e.left=t.offsetLeft||0,e.top=t.offsetTop||0,e.width=t.offsetWidth||0,e.height=t.offsetHeight||0,e.right=e.left+e.width,e.bottom=e.top+e.height,e.scrollTop=t.scrollTop,e.hidden=t.offsetParent===null,e),oe=({tag:e="div",name:t=null,attributes:i={},read:a=()=>{},write:n=()=>{},create:o=()=>{},destroy:l=()=>{},filterFrameActionsForChild:r=(u,f)=>f,didCreateView:s=()=>{},didWriteView:p=()=>{},ignoreRect:c=!1,ignoreRectUpdate:d=!1,mixins:m=[]}={})=>(u,f={})=>{let h=ni(e,`filepond--${t}`,i),g=window.getComputedStyle(h,null),I=za(),E=null,T=!1,v=[],y=[],b={},w={},x=[n],_=[a],P=[l],O=()=>h,M=()=>v.concat(),C=()=>b,S=G=>(H,q)=>H(G,q),F=()=>E||(E=bn(I,v,[0,0],[1,1]),E),R=()=>g,L=()=>{E=null,v.forEach(q=>q._read()),!(d&&I.width&&I.height)&&za(I,h,g);let H={root:Q,props:f,rect:I};_.forEach(q=>q(H))},z=(G,H,q)=>{let re=H.length===0;return x.forEach(ee=>{ee({props:f,root:Q,actions:H,timestamp:G,shouldOptimize:q})===!1&&(re=!1)}),y.forEach(ee=>{ee.write(G)===!1&&(re=!1)}),v.filter(ee=>!!ee.element.parentNode).forEach(ee=>{ee._write(G,r(ee,H),q)||(re=!1)}),v.forEach((ee,V)=>{ee.element.parentNode||(Q.appendChild(ee.element,V),ee._read(),ee._write(G,r(ee,H),q),re=!1)}),T=re,p({props:f,root:Q,actions:H,timestamp:G}),re},D=()=>{y.forEach(G=>G.destroy()),P.forEach(G=>{G({root:Q,props:f})}),v.forEach(G=>G._destroy())},k={element:{get:O},style:{get:R},childViews:{get:M}},B={...k,rect:{get:F},ref:{get:C},is:G=>t===G,appendChild:lr(h),createChildView:S(u),linkView:G=>(v.push(G),G),unlinkView:G=>{v.splice(v.indexOf(G),1)},appendChildView:rr(h,v),removeChildView:sr(h,v),registerWriter:G=>x.push(G),registerReader:G=>_.push(G),registerDestroyer:G=>P.push(G),invalidateLayout:()=>h.layoutCalculated=!1,dispatch:u.dispatch,query:u.query},X={element:{get:O},childViews:{get:M},rect:{get:F},resting:{get:()=>T},isRectIgnored:()=>c,_read:L,_write:z,_destroy:D},Y={...k,rect:{get:()=>I}};Object.keys(m).sort((G,H)=>G==="styles"?1:H==="styles"?-1:0).forEach(G=>{let H=wr[G]({mixinConfig:m[G],viewProps:f,viewState:w,viewInternalAPI:B,viewExternalAPI:X,view:We(Y)});H&&y.push(H)});let Q=We(B);o({root:Q,props:f});let pe=pr(h);return v.forEach((G,H)=>{Q.appendChild(G.element,pe+H)}),s(Q),We(X)},Sr=(e,t,i=60)=>{let a="__framePainter";if(window[a]){window[a].readers.push(e),window[a].writers.push(t);return}window[a]={readers:[e],writers:[t]};let n=window[a],o=1e3/i,l=null,r=null,s=null,p=null,c=()=>{document.hidden?(s=()=>window.setTimeout(()=>d(performance.now()),o),p=()=>window.clearTimeout(r)):(s=()=>window.requestAnimationFrame(d),p=()=>window.cancelAnimationFrame(r))};document.addEventListener("visibilitychange",()=>{p&&p(),c(),d(performance.now())});let d=m=>{r=s(d),l||(l=m);let u=m-l;u<=o||(l=m-u%o,n.readers.forEach(f=>f()),n.writers.forEach(f=>f(m)))};return c(),d(performance.now()),{pause:()=>{p(r)}}},he=(e,t)=>({root:i,props:a,actions:n=[],timestamp:o,shouldOptimize:l})=>{n.filter(r=>e[r.type]).forEach(r=>e[r.type]({root:i,props:a,action:r.data,timestamp:o,shouldOptimize:l})),t&&t({root:i,props:a,actions:n,timestamp:o,shouldOptimize:l})},Ca=(e,t)=>t.parentNode.insertBefore(e,t),Na=(e,t)=>t.parentNode.insertBefore(e,t.nextSibling),si=e=>Array.isArray(e),Be=e=>e==null,Lr=e=>e.trim(),ci=e=>""+e,Ar=(e,t=",")=>Be(e)?[]:si(e)?e:ci(e).split(t).map(Lr).filter(i=>i.length),Tn=e=>typeof e=="boolean",In=e=>Tn(e)?e:e==="true",fe=e=>typeof e=="string",vn=e=>$e(e)?e:fe(e)?ci(e).replace(/[a-z]+/gi,""):0,ai=e=>parseInt(vn(e),10),Ba=e=>parseFloat(vn(e)),gt=e=>$e(e)&&isFinite(e)&&Math.floor(e)===e,ka=(e,t=1e3)=>{if(gt(e))return e;let i=ci(e).trim();return/MB$/i.test(i)?(i=i.replace(/MB$i/,"").trim(),ai(i)*t*t):/KB/i.test(i)?(i=i.replace(/KB$i/,"").trim(),ai(i)*t):ai(i)},Xe=e=>typeof e=="function",Mr=e=>{let t=self,i=e.split("."),a=null;for(;a=i.shift();)if(t=t[a],!t)return null;return t},Va={process:"POST",patch:"PATCH",revert:"DELETE",fetch:"GET",restore:"GET",load:"GET"},Or=e=>{let t={};return t.url=fe(e)?e:e.url||"",t.timeout=e.timeout?parseInt(e.timeout,10):0,t.headers=e.headers?e.headers:{},te(Va,i=>{t[i]=Pr(i,e[i],Va[i],t.timeout,t.headers)}),t.process=e.process||fe(e)||e.url?t.process:null,t.remove=e.remove||null,delete t.headers,t},Pr=(e,t,i,a,n)=>{if(t===null)return null;if(typeof t=="function")return t;let o={url:i==="GET"||i==="PATCH"?`?${e}=`:"",method:i,headers:n,withCredentials:!1,timeout:a,onload:null,ondata:null,onerror:null};if(fe(t))return o.url=t,o;if(Object.assign(o,t),fe(o.headers)){let l=o.headers.split(/:(.+)/);o.headers={header:l[0],value:l[1]}}return o.withCredentials=In(o.withCredentials),o},Dr=e=>Or(e),Fr=e=>e===null,ce=e=>typeof e=="object"&&e!==null,zr=e=>ce(e)&&fe(e.url)&&ce(e.process)&&ce(e.revert)&&ce(e.restore)&&ce(e.fetch),Pi=e=>si(e)?"array":Fr(e)?"null":gt(e)?"int":/^[0-9]+ ?(?:GB|MB|KB)$/gi.test(e)?"bytes":zr(e)?"api":typeof e,Cr=e=>e.replace(/{\s*'/g,'{"').replace(/'\s*}/g,'"}').replace(/'\s*:/g,'":').replace(/:\s*'/g,':"').replace(/,\s*'/g,',"').replace(/'\s*,/g,'",'),Nr={array:Ar,boolean:In,int:e=>Pi(e)==="bytes"?ka(e):ai(e),number:Ba,float:Ba,bytes:ka,string:e=>Xe(e)?e:ci(e),function:e=>Mr(e),serverapi:Dr,object:e=>{try{return JSON.parse(Cr(e))}catch{return null}}},Br=(e,t)=>Nr[t](e),xn=(e,t,i)=>{if(e===t)return e;let a=Pi(e);if(a!==i){let n=Br(e,i);if(a=Pi(n),n===null)throw`Trying to assign value with incorrect type to "${option}", allowed type: "${i}"`;e=n}return e},kr=(e,t)=>{let i=e;return{enumerable:!0,get:()=>i,set:a=>{i=xn(a,e,t)}}},Vr=e=>{let t={};return te(e,i=>{let a=e[i];t[i]=kr(a[0],a[1])}),We(t)},Gr=e=>({items:[],listUpdateTimeout:null,itemUpdateTimeout:null,processingQueue:[],options:Vr(e)}),di=(e,t="-")=>e.split(/(?=[A-Z])/).map(i=>i.toLowerCase()).join(t),Ur=(e,t)=>{let i={};return te(t,a=>{i[a]={get:()=>e.getState().options[a],set:n=>{e.dispatch(`SET_${di(a,"_").toUpperCase()}`,{value:n})}}}),i},Wr=e=>(t,i,a)=>{let n={};return te(e,o=>{let l=di(o,"_").toUpperCase();n[`SET_${l}`]=r=>{try{a.options[o]=r.value}catch{}t(`DID_SET_${l}`,{value:a.options[o]})}}),n},Hr=e=>t=>{let i={};return te(e,a=>{i[`GET_${di(a,"_").toUpperCase()}`]=n=>t.options[a]}),i},_e={API:1,DROP:2,BROWSE:3,PASTE:4,NONE:5},qi=()=>Math.random().toString(36).substring(2,11),Yi=(e,t)=>e.splice(t,1),jr=(e,t)=>{t?e():document.hidden?Promise.resolve(1).then(e):setTimeout(e,0)},pi=()=>{let e=[],t=(a,n)=>{Yi(e,e.findIndex(o=>o.event===a&&(o.cb===n||!n)))},i=(a,n,o)=>{e.filter(l=>l.event===a).map(l=>l.cb).forEach(l=>jr(()=>l(...n),o))};return{fireSync:(a,...n)=>{i(a,n,!0)},fire:(a,...n)=>{i(a,n,!1)},on:(a,n)=>{e.push({event:a,cb:n})},onOnce:(a,n)=>{e.push({event:a,cb:(...o)=>{t(a,n),n(...o)}})},off:t}},yn=(e,t,i)=>{Object.getOwnPropertyNames(e).filter(a=>!i.includes(a)).forEach(a=>Object.defineProperty(t,a,Object.getOwnPropertyDescriptor(e,a)))},qr=["fire","process","revert","load","on","off","onOnce","retryLoad","extend","archive","archived","release","released","requestProcessing","freeze"],ge=e=>{let t={};return yn(e,t,qr),t},Yr=e=>{e.forEach((t,i)=>{t.released&&Yi(e,i)})},W={INIT:1,IDLE:2,PROCESSING_QUEUED:9,PROCESSING:3,PROCESSING_COMPLETE:5,PROCESSING_ERROR:6,PROCESSING_REVERT_ERROR:10,LOADING:7,LOAD_ERROR:8},se={INPUT:1,LIMBO:2,LOCAL:3},_n=e=>/[^0-9]+/.exec(e),Rn=()=>_n(1.1.toLocaleString())[0],$r=()=>{let e=Rn(),t=1e3.toLocaleString(),i=1e3.toString();return t!==i?_n(t)[0]:e==="."?",":"."},A={BOOLEAN:"boolean",INT:"int",NUMBER:"number",STRING:"string",ARRAY:"array",OBJECT:"object",FUNCTION:"function",ACTION:"action",SERVER_API:"serverapi",REGEX:"regex"},$i=[],Ae=(e,t,i)=>new Promise((a,n)=>{let o=$i.filter(r=>r.key===e).map(r=>r.cb);if(o.length===0){a(t);return}let l=o.shift();o.reduce((r,s)=>r.then(p=>s(p,i)),l(t,i)).then(r=>a(r)).catch(r=>n(r))}),tt=(e,t,i)=>$i.filter(a=>a.key===e).map(a=>a.cb(t,i)),Xr=(e,t)=>$i.push({key:e,cb:t}),Qr=e=>Object.assign(dt,e),oi=()=>({...dt}),Zr=e=>{te(e,(t,i)=>{dt[t]&&(dt[t][0]=xn(i,dt[t][0],dt[t][1]))})},dt={id:[null,A.STRING],name:["filepond",A.STRING],disabled:[!1,A.BOOLEAN],className:[null,A.STRING],required:[!1,A.BOOLEAN],captureMethod:[null,A.STRING],allowSyncAcceptAttribute:[!0,A.BOOLEAN],allowDrop:[!0,A.BOOLEAN],allowBrowse:[!0,A.BOOLEAN],allowPaste:[!0,A.BOOLEAN],allowMultiple:[!1,A.BOOLEAN],allowReplace:[!0,A.BOOLEAN],allowRevert:[!0,A.BOOLEAN],allowRemove:[!0,A.BOOLEAN],allowProcess:[!0,A.BOOLEAN],allowReorder:[!1,A.BOOLEAN],allowDirectoriesOnly:[!1,A.BOOLEAN],storeAsFile:[!1,A.BOOLEAN],forceRevert:[!1,A.BOOLEAN],maxFiles:[null,A.INT],checkValidity:[!1,A.BOOLEAN],itemInsertLocationFreedom:[!0,A.BOOLEAN],itemInsertLocation:["before",A.STRING],itemInsertInterval:[75,A.INT],dropOnPage:[!1,A.BOOLEAN],dropOnElement:[!0,A.BOOLEAN],dropValidation:[!1,A.BOOLEAN],ignoredFiles:[[".ds_store","thumbs.db","desktop.ini"],A.ARRAY],instantUpload:[!0,A.BOOLEAN],maxParallelUploads:[2,A.INT],allowMinimumUploadDuration:[!0,A.BOOLEAN],chunkUploads:[!1,A.BOOLEAN],chunkForce:[!1,A.BOOLEAN],chunkSize:[5e6,A.INT],chunkRetryDelays:[[500,1e3,3e3],A.ARRAY],server:[null,A.SERVER_API],fileSizeBase:[1e3,A.INT],labelFileSizeBytes:["bytes",A.STRING],labelFileSizeKilobytes:["KB",A.STRING],labelFileSizeMegabytes:["MB",A.STRING],labelFileSizeGigabytes:["GB",A.STRING],labelDecimalSeparator:[Rn(),A.STRING],labelThousandsSeparator:[$r(),A.STRING],labelIdle:['Drag & Drop your files or Browse',A.STRING],labelInvalidField:["Field contains invalid files",A.STRING],labelFileWaitingForSize:["Waiting for size",A.STRING],labelFileSizeNotAvailable:["Size not available",A.STRING],labelFileCountSingular:["file in list",A.STRING],labelFileCountPlural:["files in list",A.STRING],labelFileLoading:["Loading",A.STRING],labelFileAdded:["Added",A.STRING],labelFileLoadError:["Error during load",A.STRING],labelFileRemoved:["Removed",A.STRING],labelFileRemoveError:["Error during remove",A.STRING],labelFileProcessing:["Uploading",A.STRING],labelFileProcessingComplete:["Upload complete",A.STRING],labelFileProcessingAborted:["Upload cancelled",A.STRING],labelFileProcessingError:["Error during upload",A.STRING],labelFileProcessingRevertError:["Error during revert",A.STRING],labelTapToCancel:["tap to cancel",A.STRING],labelTapToRetry:["tap to retry",A.STRING],labelTapToUndo:["tap to undo",A.STRING],labelButtonRemoveItem:["Remove",A.STRING],labelButtonAbortItemLoad:["Abort",A.STRING],labelButtonRetryItemLoad:["Retry",A.STRING],labelButtonAbortItemProcessing:["Cancel",A.STRING],labelButtonUndoItemProcessing:["Undo",A.STRING],labelButtonRetryItemProcessing:["Retry",A.STRING],labelButtonProcessItem:["Upload",A.STRING],iconRemove:['',A.STRING],iconProcess:['',A.STRING],iconRetry:['',A.STRING],iconUndo:['',A.STRING],iconDone:['',A.STRING],oninit:[null,A.FUNCTION],onwarning:[null,A.FUNCTION],onerror:[null,A.FUNCTION],onactivatefile:[null,A.FUNCTION],oninitfile:[null,A.FUNCTION],onaddfilestart:[null,A.FUNCTION],onaddfileprogress:[null,A.FUNCTION],onaddfile:[null,A.FUNCTION],onprocessfilestart:[null,A.FUNCTION],onprocessfileprogress:[null,A.FUNCTION],onprocessfileabort:[null,A.FUNCTION],onprocessfilerevert:[null,A.FUNCTION],onprocessfile:[null,A.FUNCTION],onprocessfiles:[null,A.FUNCTION],onremovefile:[null,A.FUNCTION],onpreparefile:[null,A.FUNCTION],onupdatefiles:[null,A.FUNCTION],onreorderfiles:[null,A.FUNCTION],beforeDropFile:[null,A.FUNCTION],beforeAddFile:[null,A.FUNCTION],beforeRemoveFile:[null,A.FUNCTION],beforePrepareFile:[null,A.FUNCTION],stylePanelLayout:[null,A.STRING],stylePanelAspectRatio:[null,A.STRING],styleItemPanelAspectRatio:[null,A.STRING],styleButtonRemoveItemPosition:["left",A.STRING],styleButtonProcessItemPosition:["right",A.STRING],styleLoadIndicatorPosition:["right",A.STRING],styleProgressIndicatorPosition:["right",A.STRING],styleButtonRemoveItemAlign:[!1,A.BOOLEAN],files:[[],A.ARRAY],credits:[["https://pqina.nl/","Powered by PQINA"],A.ARRAY]},Qe=(e,t)=>Be(t)?e[0]||null:gt(t)?e[t]||null:(typeof t=="object"&&(t=t.id),e.find(i=>i.id===t)||null),wn=e=>{if(Be(e))return e;if(/:/.test(e)){let t=e.split(":");return t[1]/t[0]}return parseFloat(e)},Me=e=>e.filter(t=>!t.archived),Sn={EMPTY:0,IDLE:1,ERROR:2,BUSY:3,READY:4},Zt=null,Kr=()=>{if(Zt===null)try{let e=new DataTransfer;e.items.add(new File(["hello world"],"This_Works.txt"));let t=document.createElement("input");t.setAttribute("type","file"),t.files=e.files,Zt=t.files.length===1}catch{Zt=!1}return Zt},Jr=[W.LOAD_ERROR,W.PROCESSING_ERROR,W.PROCESSING_REVERT_ERROR],es=[W.LOADING,W.PROCESSING,W.PROCESSING_QUEUED,W.INIT],ts=[W.PROCESSING_COMPLETE],is=e=>Jr.includes(e.status),as=e=>es.includes(e.status),ns=e=>ts.includes(e.status),Ga=e=>ce(e.options.server)&&(ce(e.options.server.process)||Xe(e.options.server.process)),os=e=>({GET_STATUS:()=>{let t=Me(e.items),{EMPTY:i,ERROR:a,BUSY:n,IDLE:o,READY:l}=Sn;return t.length===0?i:t.some(is)?a:t.some(as)?n:t.some(ns)?l:o},GET_ITEM:t=>Qe(e.items,t),GET_ACTIVE_ITEM:t=>Qe(Me(e.items),t),GET_ACTIVE_ITEMS:()=>Me(e.items),GET_ITEMS:()=>e.items,GET_ITEM_NAME:t=>{let i=Qe(e.items,t);return i?i.filename:null},GET_ITEM_SIZE:t=>{let i=Qe(e.items,t);return i?i.fileSize:null},GET_STYLES:()=>Object.keys(e.options).filter(t=>/^style/.test(t)).map(t=>({name:t,value:e.options[t]})),GET_PANEL_ASPECT_RATIO:()=>/circle/.test(e.options.stylePanelLayout)?1:wn(e.options.stylePanelAspectRatio),GET_ITEM_PANEL_ASPECT_RATIO:()=>e.options.styleItemPanelAspectRatio,GET_ITEMS_BY_STATUS:t=>Me(e.items).filter(i=>i.status===t),GET_TOTAL_ITEMS:()=>Me(e.items).length,SHOULD_UPDATE_FILE_INPUT:()=>e.options.storeAsFile&&Kr()&&!Ga(e),IS_ASYNC:()=>Ga(e),GET_FILE_SIZE_LABELS:t=>({labelBytes:t("GET_LABEL_FILE_SIZE_BYTES")||void 0,labelKilobytes:t("GET_LABEL_FILE_SIZE_KILOBYTES")||void 0,labelMegabytes:t("GET_LABEL_FILE_SIZE_MEGABYTES")||void 0,labelGigabytes:t("GET_LABEL_FILE_SIZE_GIGABYTES")||void 0})}),ls=e=>{let t=Me(e.items).length;if(!e.options.allowMultiple)return t===0;let i=e.options.maxFiles;return i===null||tMath.max(Math.min(i,e),t),rs=(e,t,i)=>e.splice(t,0,i),ss=(e,t,i)=>Be(t)?null:typeof i>"u"?(e.push(t),t):(i=Ln(i,0,e.length),rs(e,i,t),t),Di=e=>/^\s*data:([a-z]+\/[a-z0-9-+.]+(;[a-z-]+=[a-z0-9-]+)?)?(;base64)?,([a-z0-9!$&',()*+;=\-._~:@\/?%\s]*)\s*$/i.test(e),Ft=e=>`${e}`.split("/").pop().split("?").shift(),mi=e=>e.split(".").pop(),cs=e=>{if(typeof e!="string")return"";let t=e.split("/").pop();return/svg/.test(t)?"svg":/zip|compressed/.test(t)?"zip":/plain/.test(t)?"txt":/msword/.test(t)?"doc":/[a-z]+/.test(t)?t==="jpeg"?"jpg":t:""},At=(e,t="")=>(t+e).slice(-t.length),An=(e=new Date)=>`${e.getFullYear()}-${At(e.getMonth()+1,"00")}-${At(e.getDate(),"00")}_${At(e.getHours(),"00")}-${At(e.getMinutes(),"00")}-${At(e.getSeconds(),"00")}`,ht=(e,t,i=null,a=null)=>{let n=typeof i=="string"?e.slice(0,e.size,i):e.slice(0,e.size,e.type);return n.lastModifiedDate=new Date,e._relativePath&&(n._relativePath=e._relativePath),fe(t)||(t=An()),t&&a===null&&mi(t)?n.name=t:(a=a||cs(n.type),n.name=t+(a?"."+a:"")),n},ds=()=>window.BlobBuilder=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder,Mn=(e,t)=>{let i=ds();if(i){let a=new i;return a.append(e),a.getBlob(t)}return new Blob([e],{type:t})},ps=(e,t)=>{let i=new ArrayBuffer(e.length),a=new Uint8Array(i);for(let n=0;n(/^data:(.+);/.exec(e)||[])[1]||null,ms=e=>e.split(",")[1].replace(/\s/g,""),us=e=>atob(ms(e)),fs=e=>{let t=On(e),i=us(e);return ps(i,t)},hs=(e,t,i)=>ht(fs(e),t,null,i),gs=e=>{if(!/^content-disposition:/i.test(e))return null;let t=e.split(/filename=|filename\*=.+''/).splice(1).map(i=>i.trim().replace(/^["']|[;"']{0,2}$/g,"")).filter(i=>i.length);return t.length?decodeURI(t[t.length-1]):null},Es=e=>{if(/content-length:/i.test(e)){let t=e.match(/[0-9]+/)[0];return t?parseInt(t,10):null}return null},bs=e=>/x-content-transfer-id:/i.test(e)&&(e.split(":")[1]||"").trim()||null,Xi=e=>{let t={source:null,name:null,size:null},i=e.split(` +`);for(let a of i){let n=gs(a);if(n){t.name=n;continue}let o=Es(a);if(o){t.size=o;continue}let l=bs(a);if(l){t.source=l;continue}}return t},Ts=e=>{let t={source:null,complete:!1,progress:0,size:null,timestamp:null,duration:0,request:null},i=()=>t.progress,a=()=>{t.request&&t.request.abort&&t.request.abort()},n=()=>{let r=t.source;l.fire("init",r),r instanceof File?l.fire("load",r):r instanceof Blob?l.fire("load",ht(r,r.name)):Di(r)?l.fire("load",hs(r)):o(r)},o=r=>{if(!e){l.fire("error",{type:"error",body:"Can't load URL",code:400});return}t.timestamp=Date.now(),t.request=e(r,s=>{t.duration=Date.now()-t.timestamp,t.complete=!0,s instanceof Blob&&(s=ht(s,s.name||Ft(r))),l.fire("load",s instanceof Blob?s:s?s.body:null)},s=>{l.fire("error",typeof s=="string"?{type:"error",code:0,body:s}:s)},(s,p,c)=>{if(c&&(t.size=c),t.duration=Date.now()-t.timestamp,!s){t.progress=null;return}t.progress=p/c,l.fire("progress",t.progress)},()=>{l.fire("abort")},s=>{let p=Xi(typeof s=="string"?s:s.headers);l.fire("meta",{size:t.size||p.size,filename:p.name,source:p.source})})},l={...pi(),setSource:r=>t.source=r,getProgress:i,abort:a,load:n};return l},Ua=e=>/GET|HEAD/.test(e),Ze=(e,t,i)=>{let a={onheaders:()=>{},onprogress:()=>{},onload:()=>{},ontimeout:()=>{},onerror:()=>{},onabort:()=>{},abort:()=>{n=!0,l.abort()}},n=!1,o=!1;i={method:"POST",headers:{},withCredentials:!1,...i},t=encodeURI(t),Ua(i.method)&&e&&(t=`${t}${encodeURIComponent(typeof e=="string"?e:JSON.stringify(e))}`);let l=new XMLHttpRequest,r=Ua(i.method)?l:l.upload;return r.onprogress=s=>{n||a.onprogress(s.lengthComputable,s.loaded,s.total)},l.onreadystatechange=()=>{l.readyState<2||l.readyState===4&&l.status===0||o||(o=!0,a.onheaders(l))},l.onload=()=>{l.status>=200&&l.status<300?a.onload(l):a.onerror(l)},l.onerror=()=>a.onerror(l),l.onabort=()=>{n=!0,a.onabort()},l.ontimeout=()=>a.ontimeout(l),l.open(i.method,t,!0),gt(i.timeout)&&(l.timeout=i.timeout),Object.keys(i.headers).forEach(s=>{let p=unescape(encodeURIComponent(i.headers[s]));l.setRequestHeader(s,p)}),i.responseType&&(l.responseType=i.responseType),i.withCredentials&&(l.withCredentials=!0),l.send(e),a},ie=(e,t,i,a)=>({type:e,code:t,body:i,headers:a}),Ke=e=>t=>{e(ie("error",0,"Timeout",t.getAllResponseHeaders()))},Wa=e=>/\?/.test(e),Pt=(...e)=>{let t="";return e.forEach(i=>{t+=Wa(t)&&Wa(i)?i.replace(/\?/,"&"):i}),t},wi=(e="",t)=>{if(typeof t=="function")return t;if(!t||!fe(t.url))return null;let i=t.onload||(n=>n),a=t.onerror||(n=>null);return(n,o,l,r,s,p)=>{let c=Ze(n,Pt(e,t.url),{...t,responseType:"blob"});return c.onload=d=>{let m=d.getAllResponseHeaders(),u=Xi(m).name||Ft(n);o(ie("load",d.status,t.method==="HEAD"?null:ht(i(d.response),u),m))},c.onerror=d=>{l(ie("error",d.status,a(d.response)||d.statusText,d.getAllResponseHeaders()))},c.onheaders=d=>{p(ie("headers",d.status,null,d.getAllResponseHeaders()))},c.ontimeout=Ke(l),c.onprogress=r,c.onabort=s,c}},xe={QUEUED:0,COMPLETE:1,PROCESSING:2,ERROR:3,WAITING:4},Is=(e,t,i,a,n,o,l,r,s,p,c)=>{let d=[],{chunkTransferId:m,chunkServer:u,chunkSize:f,chunkRetryDelays:h}=c,g={serverId:m,aborted:!1},I=t.ondata||(S=>S),E=t.onload||((S,F)=>F==="HEAD"?S.getResponseHeader("Upload-Offset"):S.response),T=t.onerror||(S=>null),v=S=>{let F=new FormData;ce(n)&&F.append(i,JSON.stringify(n));let R=typeof t.headers=="function"?t.headers(a,n):{...t.headers,"Upload-Length":a.size},L={...t,headers:R},z=Ze(I(F),Pt(e,t.url),L);z.onload=D=>S(E(D,L.method)),z.onerror=D=>l(ie("error",D.status,T(D.response)||D.statusText,D.getAllResponseHeaders())),z.ontimeout=Ke(l)},y=S=>{let F=Pt(e,u.url,g.serverId),L={headers:typeof t.headers=="function"?t.headers(g.serverId):{...t.headers},method:"HEAD"},z=Ze(null,F,L);z.onload=D=>S(E(D,L.method)),z.onerror=D=>l(ie("error",D.status,T(D.response)||D.statusText,D.getAllResponseHeaders())),z.ontimeout=Ke(l)},b=Math.floor(a.size/f);for(let S=0;S<=b;S++){let F=S*f,R=a.slice(F,F+f,"application/offset+octet-stream");d[S]={index:S,size:R.size,offset:F,data:R,file:a,progress:0,retries:[...h],status:xe.QUEUED,error:null,request:null,timeout:null}}let w=()=>o(g.serverId),x=S=>S.status===xe.QUEUED||S.status===xe.ERROR,_=S=>{if(g.aborted)return;if(S=S||d.find(x),!S){d.every(k=>k.status===xe.COMPLETE)&&w();return}S.status=xe.PROCESSING,S.progress=null;let F=u.ondata||(k=>k),R=u.onerror||(k=>null),L=Pt(e,u.url,g.serverId),z=typeof u.headers=="function"?u.headers(S):{...u.headers,"Content-Type":"application/offset+octet-stream","Upload-Offset":S.offset,"Upload-Length":a.size,"Upload-Name":a.name},D=S.request=Ze(F(S.data),L,{...u,headers:z});D.onload=()=>{S.status=xe.COMPLETE,S.request=null,M()},D.onprogress=(k,B,X)=>{S.progress=k?B:null,O()},D.onerror=k=>{S.status=xe.ERROR,S.request=null,S.error=R(k.response)||k.statusText,P(S)||l(ie("error",k.status,R(k.response)||k.statusText,k.getAllResponseHeaders()))},D.ontimeout=k=>{S.status=xe.ERROR,S.request=null,P(S)||Ke(l)(k)},D.onabort=()=>{S.status=xe.QUEUED,S.request=null,s()}},P=S=>S.retries.length===0?!1:(S.status=xe.WAITING,clearTimeout(S.timeout),S.timeout=setTimeout(()=>{_(S)},S.retries.shift()),!0),O=()=>{let S=d.reduce((R,L)=>R===null||L.progress===null?null:R+L.progress,0);if(S===null)return r(!1,0,0);let F=d.reduce((R,L)=>R+L.size,0);r(!0,S,F)},M=()=>{d.filter(F=>F.status===xe.PROCESSING).length>=1||_()},C=()=>{d.forEach(S=>{clearTimeout(S.timeout),S.request&&S.request.abort()})};return g.serverId?y(S=>{g.aborted||(d.filter(F=>F.offset{F.status=xe.COMPLETE,F.progress=F.size}),M())}):v(S=>{g.aborted||(p(S),g.serverId=S,M())}),{abort:()=>{g.aborted=!0,C()}}},vs=(e,t,i,a)=>(n,o,l,r,s,p,c)=>{if(!n)return;let d=a.chunkUploads,m=d&&n.size>a.chunkSize,u=d&&(m||a.chunkForce);if(n instanceof Blob&&u)return Is(e,t,i,n,o,l,r,s,p,c,a);let f=t.ondata||(y=>y),h=t.onload||(y=>y),g=t.onerror||(y=>null),I=typeof t.headers=="function"?t.headers(n,o)||{}:{...t.headers},E={...t,headers:I};var T=new FormData;ce(o)&&T.append(i,JSON.stringify(o)),(n instanceof Blob?[{name:null,file:n}]:n).forEach(y=>{T.append(i,y.file,y.name===null?y.file.name:`${y.name}${y.file.name}`)});let v=Ze(f(T),Pt(e,t.url),E);return v.onload=y=>{l(ie("load",y.status,h(y.response),y.getAllResponseHeaders()))},v.onerror=y=>{r(ie("error",y.status,g(y.response)||y.statusText,y.getAllResponseHeaders()))},v.ontimeout=Ke(r),v.onprogress=s,v.onabort=p,v},xs=(e="",t,i,a)=>typeof t=="function"?(...n)=>t(i,...n,a):!t||!fe(t.url)?null:vs(e,t,i,a),Mt=(e="",t)=>{if(typeof t=="function")return t;if(!t||!fe(t.url))return(n,o)=>o();let i=t.onload||(n=>n),a=t.onerror||(n=>null);return(n,o,l)=>{let r=Ze(n,e+t.url,t);return r.onload=s=>{o(ie("load",s.status,i(s.response),s.getAllResponseHeaders()))},r.onerror=s=>{l(ie("error",s.status,a(s.response)||s.statusText,s.getAllResponseHeaders()))},r.ontimeout=Ke(l),r}},Pn=(e=0,t=1)=>e+Math.random()*(t-e),ys=(e,t=1e3,i=0,a=25,n=250)=>{let o=null,l=Date.now(),r=()=>{let s=Date.now()-l,p=Pn(a,n);s+p>t&&(p=s+p-t);let c=s/t;if(c>=1||document.hidden){e(1);return}e(c),o=setTimeout(r,p)};return t>0&&r(),{clear:()=>{clearTimeout(o)}}},_s=(e,t)=>{let i={complete:!1,perceivedProgress:0,perceivedPerformanceUpdater:null,progress:null,timestamp:null,perceivedDuration:0,duration:0,request:null,response:null},{allowMinimumUploadDuration:a}=t,n=(c,d)=>{let m=()=>{i.duration===0||i.progress===null||p.fire("progress",p.getProgress())},u=()=>{i.complete=!0,p.fire("load-perceived",i.response.body)};p.fire("start"),i.timestamp=Date.now(),i.perceivedPerformanceUpdater=ys(f=>{i.perceivedProgress=f,i.perceivedDuration=Date.now()-i.timestamp,m(),i.response&&i.perceivedProgress===1&&!i.complete&&u()},a?Pn(750,1500):0),i.request=e(c,d,f=>{i.response=ce(f)?f:{type:"load",code:200,body:`${f}`,headers:{}},i.duration=Date.now()-i.timestamp,i.progress=1,p.fire("load",i.response.body),(!a||a&&i.perceivedProgress===1)&&u()},f=>{i.perceivedPerformanceUpdater.clear(),p.fire("error",ce(f)?f:{type:"error",code:0,body:`${f}`})},(f,h,g)=>{i.duration=Date.now()-i.timestamp,i.progress=f?h/g:null,m()},()=>{i.perceivedPerformanceUpdater.clear(),p.fire("abort",i.response?i.response.body:null)},f=>{p.fire("transfer",f)})},o=()=>{i.request&&(i.perceivedPerformanceUpdater.clear(),i.request.abort&&i.request.abort(),i.complete=!0)},l=()=>{o(),i.complete=!1,i.perceivedProgress=0,i.progress=0,i.timestamp=null,i.perceivedDuration=0,i.duration=0,i.request=null,i.response=null},r=a?()=>i.progress?Math.min(i.progress,i.perceivedProgress):null:()=>i.progress||null,s=a?()=>Math.min(i.duration,i.perceivedDuration):()=>i.duration,p={...pi(),process:n,abort:o,getProgress:r,getDuration:s,reset:l};return p},Dn=e=>e.substring(0,e.lastIndexOf("."))||e,Rs=e=>{let t=[e.name,e.size,e.type];return e instanceof Blob||Di(e)?t[0]=e.name||An():Di(e)?(t[1]=e.length,t[2]=On(e)):fe(e)&&(t[0]=Ft(e),t[1]=0,t[2]="application/octet-stream"),{name:t[0],size:t[1],type:t[2]}},Je=e=>!!(e instanceof File||e instanceof Blob&&e.name),Fn=e=>{if(!ce(e))return e;let t=si(e)?[]:{};for(let i in e){if(!e.hasOwnProperty(i))continue;let a=e[i];t[i]=a&&ce(a)?Fn(a):a}return t},ws=(e=null,t=null,i=null)=>{let a=qi(),n={archived:!1,frozen:!1,released:!1,source:null,file:i,serverFileReference:t,transferId:null,processingAborted:!1,status:t?W.PROCESSING_COMPLETE:W.INIT,activeLoader:null,activeProcessor:null},o=null,l={},r=x=>n.status=x,s=(x,..._)=>{n.released||n.frozen||b.fire(x,..._)},p=()=>mi(n.file.name),c=()=>n.file.type,d=()=>n.file.size,m=()=>n.file,u=(x,_,P)=>{if(n.source=x,b.fireSync("init"),n.file){b.fireSync("load-skip");return}n.file=Rs(x),_.on("init",()=>{s("load-init")}),_.on("meta",O=>{n.file.size=O.size,n.file.filename=O.filename,O.source&&(e=se.LIMBO,n.serverFileReference=O.source,n.status=W.PROCESSING_COMPLETE),s("load-meta")}),_.on("progress",O=>{r(W.LOADING),s("load-progress",O)}),_.on("error",O=>{r(W.LOAD_ERROR),s("load-request-error",O)}),_.on("abort",()=>{r(W.INIT),s("load-abort")}),_.on("load",O=>{n.activeLoader=null;let M=S=>{n.file=Je(S)?S:n.file,e===se.LIMBO&&n.serverFileReference?r(W.PROCESSING_COMPLETE):r(W.IDLE),s("load")},C=S=>{n.file=O,s("load-meta"),r(W.LOAD_ERROR),s("load-file-error",S)};if(n.serverFileReference){M(O);return}P(O,M,C)}),_.setSource(x),n.activeLoader=_,_.load()},f=()=>{n.activeLoader&&n.activeLoader.load()},h=()=>{if(n.activeLoader){n.activeLoader.abort();return}r(W.INIT),s("load-abort")},g=(x,_)=>{if(n.processingAborted){n.processingAborted=!1;return}if(r(W.PROCESSING),o=null,!(n.file instanceof Blob)){b.on("load",()=>{g(x,_)});return}x.on("load",M=>{n.transferId=null,n.serverFileReference=M}),x.on("transfer",M=>{n.transferId=M}),x.on("load-perceived",M=>{n.activeProcessor=null,n.transferId=null,n.serverFileReference=M,r(W.PROCESSING_COMPLETE),s("process-complete",M)}),x.on("start",()=>{s("process-start")}),x.on("error",M=>{n.activeProcessor=null,r(W.PROCESSING_ERROR),s("process-error",M)}),x.on("abort",M=>{n.activeProcessor=null,n.serverFileReference=M,r(W.IDLE),s("process-abort"),o&&o()}),x.on("progress",M=>{s("process-progress",M)});let P=M=>{n.archived||x.process(M,{...l})},O=console.error;_(n.file,P,O),n.activeProcessor=x},I=()=>{n.processingAborted=!1,r(W.PROCESSING_QUEUED)},E=()=>new Promise(x=>{if(!n.activeProcessor){n.processingAborted=!0,r(W.IDLE),s("process-abort"),x();return}o=()=>{x()},n.activeProcessor.abort()}),T=(x,_)=>new Promise((P,O)=>{let M=n.serverFileReference!==null?n.serverFileReference:n.transferId;if(M===null){P();return}x(M,()=>{n.serverFileReference=null,n.transferId=null,P()},C=>{if(!_){P();return}r(W.PROCESSING_REVERT_ERROR),s("process-revert-error"),O(C)}),r(W.IDLE),s("process-revert")}),v=(x,_,P)=>{let O=x.split("."),M=O[0],C=O.pop(),S=l;O.forEach(F=>S=S[F]),JSON.stringify(S[C])!==JSON.stringify(_)&&(S[C]=_,s("metadata-update",{key:M,value:l[M],silent:P}))},b={id:{get:()=>a},origin:{get:()=>e,set:x=>e=x},serverId:{get:()=>n.serverFileReference},transferId:{get:()=>n.transferId},status:{get:()=>n.status},filename:{get:()=>n.file.name},filenameWithoutExtension:{get:()=>Dn(n.file.name)},fileExtension:{get:p},fileType:{get:c},fileSize:{get:d},file:{get:m},relativePath:{get:()=>n.file._relativePath},source:{get:()=>n.source},getMetadata:x=>Fn(x?l[x]:l),setMetadata:(x,_,P)=>{if(ce(x)){let O=x;return Object.keys(O).forEach(M=>{v(M,O[M],_)}),x}return v(x,_,P),_},extend:(x,_)=>w[x]=_,abortLoad:h,retryLoad:f,requestProcessing:I,abortProcessing:E,load:u,process:g,revert:T,...pi(),freeze:()=>n.frozen=!0,release:()=>n.released=!0,released:{get:()=>n.released},archive:()=>n.archived=!0,archived:{get:()=>n.archived},setFile:x=>n.file=x},w=We(b);return w},Ss=(e,t)=>Be(t)?0:fe(t)?e.findIndex(i=>i.id===t):-1,Ha=(e,t)=>{let i=Ss(e,t);if(!(i<0))return e[i]||null},ja=(e,t,i,a,n,o)=>{let l=Ze(null,e,{method:"GET",responseType:"blob"});return l.onload=r=>{let s=r.getAllResponseHeaders(),p=Xi(s).name||Ft(e);t(ie("load",r.status,ht(r.response,p),s))},l.onerror=r=>{i(ie("error",r.status,r.statusText,r.getAllResponseHeaders()))},l.onheaders=r=>{o(ie("headers",r.status,null,r.getAllResponseHeaders()))},l.ontimeout=Ke(i),l.onprogress=a,l.onabort=n,l},qa=e=>(e.indexOf("//")===0&&(e=location.protocol+e),e.toLowerCase().replace("blob:","").replace(/([a-z])?:\/\//,"$1").split("/")[0]),Ls=e=>(e.indexOf(":")>-1||e.indexOf("//")>-1)&&qa(location.href)!==qa(e),Kt=e=>(...t)=>Xe(e)?e(...t):e,As=e=>!Je(e.file),Si=(e,t)=>{clearTimeout(t.listUpdateTimeout),t.listUpdateTimeout=setTimeout(()=>{e("DID_UPDATE_ITEMS",{items:Me(t.items)})},0)},Ya=(e,...t)=>new Promise(i=>{if(!e)return i(!0);let a=e(...t);if(a==null)return i(!0);if(typeof a=="boolean")return i(a);typeof a.then=="function"&&a.then(i)}),Li=(e,t)=>{e.items.sort((i,a)=>t(ge(i),ge(a)))},ye=(e,t)=>({query:i,success:a=()=>{},failure:n=()=>{},...o}={})=>{let l=Qe(e.items,i);if(!l){n({error:ie("error",0,"Item not found"),file:null});return}t(l,a,n,o||{})},Ms=(e,t,i)=>({ABORT_ALL:()=>{Me(i.items).forEach(a=>{a.freeze(),a.abortLoad(),a.abortProcessing()})},DID_SET_FILES:({value:a=[]})=>{let n=a.map(l=>({source:l.source?l.source:l,options:l.options})),o=Me(i.items);o.forEach(l=>{n.find(r=>r.source===l.source||r.source===l.file)||e("REMOVE_ITEM",{query:l,remove:!1})}),o=Me(i.items),n.forEach((l,r)=>{o.find(s=>s.source===l.source||s.file===l.source)||e("ADD_ITEM",{...l,interactionMethod:_e.NONE,index:r})})},DID_UPDATE_ITEM_METADATA:({id:a,action:n,change:o})=>{o.silent||(clearTimeout(i.itemUpdateTimeout),i.itemUpdateTimeout=setTimeout(()=>{let l=Ha(i.items,a);if(!t("IS_ASYNC")){Ae("SHOULD_PREPARE_OUTPUT",!1,{item:l,query:t,action:n,change:o}).then(c=>{let d=t("GET_BEFORE_PREPARE_FILE");d&&(c=d(l,c)),c&&e("REQUEST_PREPARE_OUTPUT",{query:a,item:l,success:m=>{e("DID_PREPARE_OUTPUT",{id:a,file:m})}},!0)});return}l.origin===se.LOCAL&&e("DID_LOAD_ITEM",{id:l.id,error:null,serverFileReference:l.source});let r=()=>{setTimeout(()=>{e("REQUEST_ITEM_PROCESSING",{query:a})},32)},s=c=>{l.revert(Mt(i.options.server.url,i.options.server.revert),t("GET_FORCE_REVERT")).then(c?r:()=>{}).catch(()=>{})},p=c=>{l.abortProcessing().then(c?r:()=>{})};if(l.status===W.PROCESSING_COMPLETE)return s(i.options.instantUpload);if(l.status===W.PROCESSING)return p(i.options.instantUpload);i.options.instantUpload&&r()},0))},MOVE_ITEM:({query:a,index:n})=>{let o=Qe(i.items,a);if(!o)return;let l=i.items.indexOf(o);n=Ln(n,0,i.items.length-1),l!==n&&i.items.splice(n,0,i.items.splice(l,1)[0])},SORT:({compare:a})=>{Li(i,a),e("DID_SORT_ITEMS",{items:t("GET_ACTIVE_ITEMS")})},ADD_ITEMS:({items:a,index:n,interactionMethod:o,success:l=()=>{},failure:r=()=>{}})=>{let s=n;if(n===-1||typeof n>"u"){let u=t("GET_ITEM_INSERT_LOCATION"),f=t("GET_TOTAL_ITEMS");s=u==="before"?0:f}let p=t("GET_IGNORED_FILES"),c=u=>Je(u)?!p.includes(u.name.toLowerCase()):!Be(u),m=a.filter(c).map(u=>new Promise((f,h)=>{e("ADD_ITEM",{interactionMethod:o,source:u.source||u,success:f,failure:h,index:s++,options:u.options||{}})}));Promise.all(m).then(l).catch(r)},ADD_ITEM:({source:a,index:n=-1,interactionMethod:o,success:l=()=>{},failure:r=()=>{},options:s={}})=>{if(Be(a)){r({error:ie("error",0,"No source"),file:null});return}if(Je(a)&&i.options.ignoredFiles.includes(a.name.toLowerCase()))return;if(!ls(i)){if(i.options.allowMultiple||!i.options.allowMultiple&&!i.options.allowReplace){let E=ie("warning",0,"Max files");e("DID_THROW_MAX_FILES",{source:a,error:E}),r({error:E,file:null});return}let I=Me(i.items)[0];if(I.status===W.PROCESSING_COMPLETE||I.status===W.PROCESSING_REVERT_ERROR){let E=t("GET_FORCE_REVERT");if(I.revert(Mt(i.options.server.url,i.options.server.revert),E).then(()=>{E&&e("ADD_ITEM",{source:a,index:n,interactionMethod:o,success:l,failure:r,options:s})}).catch(()=>{}),E)return}e("REMOVE_ITEM",{query:I.id})}let p=s.type==="local"?se.LOCAL:s.type==="limbo"?se.LIMBO:se.INPUT,c=ws(p,p===se.INPUT?null:a,s.file);Object.keys(s.metadata||{}).forEach(I=>{c.setMetadata(I,s.metadata[I])}),tt("DID_CREATE_ITEM",c,{query:t,dispatch:e});let d=t("GET_ITEM_INSERT_LOCATION");i.options.itemInsertLocationFreedom||(n=d==="before"?-1:i.items.length),ss(i.items,c,n),Xe(d)&&a&&Li(i,d);let m=c.id;c.on("init",()=>{e("DID_INIT_ITEM",{id:m})}),c.on("load-init",()=>{e("DID_START_ITEM_LOAD",{id:m})}),c.on("load-meta",()=>{e("DID_UPDATE_ITEM_META",{id:m})}),c.on("load-progress",I=>{e("DID_UPDATE_ITEM_LOAD_PROGRESS",{id:m,progress:I})}),c.on("load-request-error",I=>{let E=Kt(i.options.labelFileLoadError)(I);if(I.code>=400&&I.code<500){e("DID_THROW_ITEM_INVALID",{id:m,error:I,status:{main:E,sub:`${I.code} (${I.body})`}}),r({error:I,file:ge(c)});return}e("DID_THROW_ITEM_LOAD_ERROR",{id:m,error:I,status:{main:E,sub:i.options.labelTapToRetry}})}),c.on("load-file-error",I=>{e("DID_THROW_ITEM_INVALID",{id:m,error:I.status,status:I.status}),r({error:I.status,file:ge(c)})}),c.on("load-abort",()=>{e("REMOVE_ITEM",{query:m})}),c.on("load-skip",()=>{c.on("metadata-update",I=>{Je(c.file)&&e("DID_UPDATE_ITEM_METADATA",{id:m,change:I})}),e("COMPLETE_LOAD_ITEM",{query:m,item:c,data:{source:a,success:l}})}),c.on("load",()=>{let I=E=>{if(!E){e("REMOVE_ITEM",{query:m});return}c.on("metadata-update",T=>{e("DID_UPDATE_ITEM_METADATA",{id:m,change:T})}),Ae("SHOULD_PREPARE_OUTPUT",!1,{item:c,query:t}).then(T=>{let v=t("GET_BEFORE_PREPARE_FILE");v&&(T=v(c,T));let y=()=>{e("COMPLETE_LOAD_ITEM",{query:m,item:c,data:{source:a,success:l}}),Si(e,i)};if(T){e("REQUEST_PREPARE_OUTPUT",{query:m,item:c,success:b=>{e("DID_PREPARE_OUTPUT",{id:m,file:b}),y()}},!0);return}y()})};Ae("DID_LOAD_ITEM",c,{query:t,dispatch:e}).then(()=>{Ya(t("GET_BEFORE_ADD_FILE"),ge(c)).then(I)}).catch(E=>{if(!E||!E.error||!E.status)return I(!1);e("DID_THROW_ITEM_INVALID",{id:m,error:E.error,status:E.status})})}),c.on("process-start",()=>{e("DID_START_ITEM_PROCESSING",{id:m})}),c.on("process-progress",I=>{e("DID_UPDATE_ITEM_PROCESS_PROGRESS",{id:m,progress:I})}),c.on("process-error",I=>{e("DID_THROW_ITEM_PROCESSING_ERROR",{id:m,error:I,status:{main:Kt(i.options.labelFileProcessingError)(I),sub:i.options.labelTapToRetry}})}),c.on("process-revert-error",I=>{e("DID_THROW_ITEM_PROCESSING_REVERT_ERROR",{id:m,error:I,status:{main:Kt(i.options.labelFileProcessingRevertError)(I),sub:i.options.labelTapToRetry}})}),c.on("process-complete",I=>{e("DID_COMPLETE_ITEM_PROCESSING",{id:m,error:null,serverFileReference:I}),e("DID_DEFINE_VALUE",{id:m,value:I})}),c.on("process-abort",()=>{e("DID_ABORT_ITEM_PROCESSING",{id:m})}),c.on("process-revert",()=>{e("DID_REVERT_ITEM_PROCESSING",{id:m}),e("DID_DEFINE_VALUE",{id:m,value:null})}),e("DID_ADD_ITEM",{id:m,index:n,interactionMethod:o}),Si(e,i);let{url:u,load:f,restore:h,fetch:g}=i.options.server||{};c.load(a,Ts(p===se.INPUT?fe(a)&&Ls(a)&&g?wi(u,g):ja:p===se.LIMBO?wi(u,h):wi(u,f)),(I,E,T)=>{Ae("LOAD_FILE",I,{query:t}).then(E).catch(T)})},REQUEST_PREPARE_OUTPUT:({item:a,success:n,failure:o=()=>{}})=>{let l={error:ie("error",0,"Item not found"),file:null};if(a.archived)return o(l);Ae("PREPARE_OUTPUT",a.file,{query:t,item:a}).then(r=>{Ae("COMPLETE_PREPARE_OUTPUT",r,{query:t,item:a}).then(s=>{if(a.archived)return o(l);n(s)})})},COMPLETE_LOAD_ITEM:({item:a,data:n})=>{let{success:o,source:l}=n,r=t("GET_ITEM_INSERT_LOCATION");if(Xe(r)&&l&&Li(i,r),e("DID_LOAD_ITEM",{id:a.id,error:null,serverFileReference:a.origin===se.INPUT?null:l}),o(ge(a)),a.origin===se.LOCAL){e("DID_LOAD_LOCAL_ITEM",{id:a.id});return}if(a.origin===se.LIMBO){e("DID_COMPLETE_ITEM_PROCESSING",{id:a.id,error:null,serverFileReference:l}),e("DID_DEFINE_VALUE",{id:a.id,value:a.serverId||l});return}t("IS_ASYNC")&&i.options.instantUpload&&e("REQUEST_ITEM_PROCESSING",{query:a.id})},RETRY_ITEM_LOAD:ye(i,a=>{a.retryLoad()}),REQUEST_ITEM_PREPARE:ye(i,(a,n,o)=>{e("REQUEST_PREPARE_OUTPUT",{query:a.id,item:a,success:l=>{e("DID_PREPARE_OUTPUT",{id:a.id,file:l}),n({file:a,output:l})},failure:o},!0)}),REQUEST_ITEM_PROCESSING:ye(i,(a,n,o)=>{if(!(a.status===W.IDLE||a.status===W.PROCESSING_ERROR)){let r=()=>e("REQUEST_ITEM_PROCESSING",{query:a,success:n,failure:o}),s=()=>document.hidden?r():setTimeout(r,32);a.status===W.PROCESSING_COMPLETE||a.status===W.PROCESSING_REVERT_ERROR?a.revert(Mt(i.options.server.url,i.options.server.revert),t("GET_FORCE_REVERT")).then(s).catch(()=>{}):a.status===W.PROCESSING&&a.abortProcessing().then(s);return}a.status!==W.PROCESSING_QUEUED&&(a.requestProcessing(),e("DID_REQUEST_ITEM_PROCESSING",{id:a.id}),e("PROCESS_ITEM",{query:a,success:n,failure:o},!0))}),PROCESS_ITEM:ye(i,(a,n,o)=>{let l=t("GET_MAX_PARALLEL_UPLOADS");if(t("GET_ITEMS_BY_STATUS",W.PROCESSING).length===l){i.processingQueue.push({id:a.id,success:n,failure:o});return}if(a.status===W.PROCESSING)return;let s=()=>{let c=i.processingQueue.shift();if(!c)return;let{id:d,success:m,failure:u}=c,f=Qe(i.items,d);if(!f||f.archived){s();return}e("PROCESS_ITEM",{query:d,success:m,failure:u},!0)};a.onOnce("process-complete",()=>{n(ge(a)),s();let c=i.options.server;if(i.options.instantUpload&&a.origin===se.LOCAL&&Xe(c.remove)){let u=()=>{};a.origin=se.LIMBO,i.options.server.remove(a.source,u,u)}t("GET_ITEMS_BY_STATUS",W.PROCESSING_COMPLETE).length===i.items.length&&e("DID_COMPLETE_ITEM_PROCESSING_ALL")}),a.onOnce("process-error",c=>{o({error:c,file:ge(a)}),s()});let p=i.options;a.process(_s(xs(p.server.url,p.server.process,p.name,{chunkTransferId:a.transferId,chunkServer:p.server.patch,chunkUploads:p.chunkUploads,chunkForce:p.chunkForce,chunkSize:p.chunkSize,chunkRetryDelays:p.chunkRetryDelays}),{allowMinimumUploadDuration:t("GET_ALLOW_MINIMUM_UPLOAD_DURATION")}),(c,d,m)=>{Ae("PREPARE_OUTPUT",c,{query:t,item:a}).then(u=>{e("DID_PREPARE_OUTPUT",{id:a.id,file:u}),d(u)}).catch(m)})}),RETRY_ITEM_PROCESSING:ye(i,a=>{e("REQUEST_ITEM_PROCESSING",{query:a})}),REQUEST_REMOVE_ITEM:ye(i,a=>{Ya(t("GET_BEFORE_REMOVE_FILE"),ge(a)).then(n=>{n&&e("REMOVE_ITEM",{query:a})})}),RELEASE_ITEM:ye(i,a=>{a.release()}),REMOVE_ITEM:ye(i,(a,n,o,l)=>{let r=()=>{let p=a.id;Ha(i.items,p).archive(),e("DID_REMOVE_ITEM",{error:null,id:p,item:a}),Si(e,i),n(ge(a))},s=i.options.server;a.origin===se.LOCAL&&s&&Xe(s.remove)&&l.remove!==!1?(e("DID_START_ITEM_REMOVE",{id:a.id}),s.remove(a.source,()=>r(),p=>{e("DID_THROW_ITEM_REMOVE_ERROR",{id:a.id,error:ie("error",0,p,null),status:{main:Kt(i.options.labelFileRemoveError)(p),sub:i.options.labelTapToRetry}})})):((l.revert&&a.origin!==se.LOCAL&&a.serverId!==null||i.options.chunkUploads&&a.file.size>i.options.chunkSize||i.options.chunkUploads&&i.options.chunkForce)&&a.revert(Mt(i.options.server.url,i.options.server.revert),t("GET_FORCE_REVERT")),r())}),ABORT_ITEM_LOAD:ye(i,a=>{a.abortLoad()}),ABORT_ITEM_PROCESSING:ye(i,a=>{if(a.serverId){e("REVERT_ITEM_PROCESSING",{id:a.id});return}a.abortProcessing().then(()=>{i.options.instantUpload&&e("REMOVE_ITEM",{query:a.id})})}),REQUEST_REVERT_ITEM_PROCESSING:ye(i,a=>{if(!i.options.instantUpload){e("REVERT_ITEM_PROCESSING",{query:a});return}let n=r=>{r&&e("REVERT_ITEM_PROCESSING",{query:a})},o=t("GET_BEFORE_REMOVE_FILE");if(!o)return n(!0);let l=o(ge(a));if(l==null)return n(!0);if(typeof l=="boolean")return n(l);typeof l.then=="function"&&l.then(n)}),REVERT_ITEM_PROCESSING:ye(i,a=>{a.revert(Mt(i.options.server.url,i.options.server.revert),t("GET_FORCE_REVERT")).then(()=>{(i.options.instantUpload||As(a))&&e("REMOVE_ITEM",{query:a.id})}).catch(()=>{})}),SET_OPTIONS:({options:a})=>{let n=Object.keys(a),o=Os.filter(r=>n.includes(r));[...o,...Object.keys(a).filter(r=>!o.includes(r))].forEach(r=>{e(`SET_${di(r,"_").toUpperCase()}`,{value:a[r]})})}}),Os=["server"],Qi=e=>e,ke=e=>document.createElement(e),ae=(e,t)=>{let i=e.childNodes[0];i?t!==i.nodeValue&&(i.nodeValue=t):(i=document.createTextNode(t),e.appendChild(i))},$a=(e,t,i,a)=>{let n=(a%360-90)*Math.PI/180;return{x:e+i*Math.cos(n),y:t+i*Math.sin(n)}},Ps=(e,t,i,a,n,o)=>{let l=$a(e,t,i,n),r=$a(e,t,i,a);return["M",l.x,l.y,"A",i,i,0,o,0,r.x,r.y].join(" ")},Ds=(e,t,i,a,n)=>{let o=1;return n>a&&n-a<=.5&&(o=0),a>n&&a-n>=.5&&(o=0),Ps(e,t,i,Math.min(.9999,a)*360,Math.min(.9999,n)*360,o)},Fs=({root:e,props:t})=>{t.spin=!1,t.progress=0,t.opacity=0;let i=ni("svg");e.ref.path=ni("path",{"stroke-width":2,"stroke-linecap":"round"}),i.appendChild(e.ref.path),e.ref.svg=i,e.appendChild(i)},zs=({root:e,props:t})=>{if(t.opacity===0)return;t.align&&(e.element.dataset.align=t.align);let i=parseInt(ne(e.ref.path,"stroke-width"),10),a=e.rect.element.width*.5,n=0,o=0;t.spin?(n=0,o=.5):(n=0,o=t.progress);let l=Ds(a,a,a-i,n,o);ne(e.ref.path,"d",l),ne(e.ref.path,"stroke-opacity",t.spin||t.progress>0?1:0)},Xa=oe({tag:"div",name:"progress-indicator",ignoreRectUpdate:!0,ignoreRect:!0,create:Fs,write:zs,mixins:{apis:["progress","spin","align"],styles:["opacity"],animations:{opacity:{type:"tween",duration:500},progress:{type:"spring",stiffness:.95,damping:.65,mass:10}}}}),Cs=({root:e,props:t})=>{e.element.innerHTML=(t.icon||"")+`${t.label}`,t.isDisabled=!1},Ns=({root:e,props:t})=>{let{isDisabled:i}=t,a=e.query("GET_DISABLED")||t.opacity===0;a&&!i?(t.isDisabled=!0,ne(e.element,"disabled","disabled")):!a&&i&&(t.isDisabled=!1,e.element.removeAttribute("disabled"))},zn=oe({tag:"button",attributes:{type:"button"},ignoreRect:!0,ignoreRectUpdate:!0,name:"file-action-button",mixins:{apis:["label"],styles:["translateX","translateY","scaleX","scaleY","opacity"],animations:{scaleX:"spring",scaleY:"spring",translateX:"spring",translateY:"spring",opacity:{type:"tween",duration:250}},listeners:!0},create:Cs,write:Ns}),Cn=(e,t=".",i=1e3,a={})=>{let{labelBytes:n="bytes",labelKilobytes:o="KB",labelMegabytes:l="MB",labelGigabytes:r="GB"}=a;e=Math.round(Math.abs(e));let s=i,p=i*i,c=i*i*i;return ee.toFixed(t).split(".").filter(a=>a!=="0").join(i),Bs=({root:e,props:t})=>{let i=ke("span");i.className="filepond--file-info-main",ne(i,"aria-hidden","true"),e.appendChild(i),e.ref.fileName=i;let a=ke("span");a.className="filepond--file-info-sub",e.appendChild(a),e.ref.fileSize=a,ae(a,e.query("GET_LABEL_FILE_WAITING_FOR_SIZE")),ae(i,Qi(e.query("GET_ITEM_NAME",t.id)))},Fi=({root:e,props:t})=>{ae(e.ref.fileSize,Cn(e.query("GET_ITEM_SIZE",t.id),".",e.query("GET_FILE_SIZE_BASE"),e.query("GET_FILE_SIZE_LABELS",e.query))),ae(e.ref.fileName,Qi(e.query("GET_ITEM_NAME",t.id)))},Za=({root:e,props:t})=>{if(gt(e.query("GET_ITEM_SIZE",t.id))){Fi({root:e,props:t});return}ae(e.ref.fileSize,e.query("GET_LABEL_FILE_SIZE_NOT_AVAILABLE"))},ks=oe({name:"file-info",ignoreRect:!0,ignoreRectUpdate:!0,write:he({DID_LOAD_ITEM:Fi,DID_UPDATE_ITEM_META:Fi,DID_THROW_ITEM_LOAD_ERROR:Za,DID_THROW_ITEM_INVALID:Za}),didCreateView:e=>{tt("CREATE_VIEW",{...e,view:e})},create:Bs,mixins:{styles:["translateX","translateY"],animations:{translateX:"spring",translateY:"spring"}}}),Nn=e=>Math.round(e*100),Vs=({root:e})=>{let t=ke("span");t.className="filepond--file-status-main",e.appendChild(t),e.ref.main=t;let i=ke("span");i.className="filepond--file-status-sub",e.appendChild(i),e.ref.sub=i,Bn({root:e,action:{progress:null}})},Bn=({root:e,action:t})=>{let i=t.progress===null?e.query("GET_LABEL_FILE_LOADING"):`${e.query("GET_LABEL_FILE_LOADING")} ${Nn(t.progress)}%`;ae(e.ref.main,i),ae(e.ref.sub,e.query("GET_LABEL_TAP_TO_CANCEL"))},Gs=({root:e,action:t})=>{let i=t.progress===null?e.query("GET_LABEL_FILE_PROCESSING"):`${e.query("GET_LABEL_FILE_PROCESSING")} ${Nn(t.progress)}%`;ae(e.ref.main,i),ae(e.ref.sub,e.query("GET_LABEL_TAP_TO_CANCEL"))},Us=({root:e})=>{ae(e.ref.main,e.query("GET_LABEL_FILE_PROCESSING")),ae(e.ref.sub,e.query("GET_LABEL_TAP_TO_CANCEL"))},Ws=({root:e})=>{ae(e.ref.main,e.query("GET_LABEL_FILE_PROCESSING_ABORTED")),ae(e.ref.sub,e.query("GET_LABEL_TAP_TO_RETRY"))},Hs=({root:e})=>{ae(e.ref.main,e.query("GET_LABEL_FILE_PROCESSING_COMPLETE")),ae(e.ref.sub,e.query("GET_LABEL_TAP_TO_UNDO"))},Ka=({root:e})=>{ae(e.ref.main,""),ae(e.ref.sub,"")},Ot=({root:e,action:t})=>{ae(e.ref.main,t.status.main),ae(e.ref.sub,t.status.sub)},js=oe({name:"file-status",ignoreRect:!0,ignoreRectUpdate:!0,write:he({DID_LOAD_ITEM:Ka,DID_REVERT_ITEM_PROCESSING:Ka,DID_REQUEST_ITEM_PROCESSING:Us,DID_ABORT_ITEM_PROCESSING:Ws,DID_COMPLETE_ITEM_PROCESSING:Hs,DID_UPDATE_ITEM_PROCESS_PROGRESS:Gs,DID_UPDATE_ITEM_LOAD_PROGRESS:Bn,DID_THROW_ITEM_LOAD_ERROR:Ot,DID_THROW_ITEM_INVALID:Ot,DID_THROW_ITEM_PROCESSING_ERROR:Ot,DID_THROW_ITEM_PROCESSING_REVERT_ERROR:Ot,DID_THROW_ITEM_REMOVE_ERROR:Ot}),didCreateView:e=>{tt("CREATE_VIEW",{...e,view:e})},create:Vs,mixins:{styles:["translateX","translateY","opacity"],animations:{opacity:{type:"tween",duration:250},translateX:"spring",translateY:"spring"}}}),zi={AbortItemLoad:{label:"GET_LABEL_BUTTON_ABORT_ITEM_LOAD",action:"ABORT_ITEM_LOAD",className:"filepond--action-abort-item-load",align:"LOAD_INDICATOR_POSITION"},RetryItemLoad:{label:"GET_LABEL_BUTTON_RETRY_ITEM_LOAD",action:"RETRY_ITEM_LOAD",icon:"GET_ICON_RETRY",className:"filepond--action-retry-item-load",align:"BUTTON_PROCESS_ITEM_POSITION"},RemoveItem:{label:"GET_LABEL_BUTTON_REMOVE_ITEM",action:"REQUEST_REMOVE_ITEM",icon:"GET_ICON_REMOVE",className:"filepond--action-remove-item",align:"BUTTON_REMOVE_ITEM_POSITION"},ProcessItem:{label:"GET_LABEL_BUTTON_PROCESS_ITEM",action:"REQUEST_ITEM_PROCESSING",icon:"GET_ICON_PROCESS",className:"filepond--action-process-item",align:"BUTTON_PROCESS_ITEM_POSITION"},AbortItemProcessing:{label:"GET_LABEL_BUTTON_ABORT_ITEM_PROCESSING",action:"ABORT_ITEM_PROCESSING",className:"filepond--action-abort-item-processing",align:"BUTTON_PROCESS_ITEM_POSITION"},RetryItemProcessing:{label:"GET_LABEL_BUTTON_RETRY_ITEM_PROCESSING",action:"RETRY_ITEM_PROCESSING",icon:"GET_ICON_RETRY",className:"filepond--action-retry-item-processing",align:"BUTTON_PROCESS_ITEM_POSITION"},RevertItemProcessing:{label:"GET_LABEL_BUTTON_UNDO_ITEM_PROCESSING",action:"REQUEST_REVERT_ITEM_PROCESSING",icon:"GET_ICON_UNDO",className:"filepond--action-revert-item-processing",align:"BUTTON_PROCESS_ITEM_POSITION"}},Ci=[];te(zi,e=>{Ci.push(e)});var Ie=e=>{if(Ni(e)==="right")return 0;let t=e.ref.buttonRemoveItem.rect.element;return t.hidden?null:t.width+t.left},qs=e=>e.ref.buttonAbortItemLoad.rect.element.width,Jt=e=>Math.floor(e.ref.buttonRemoveItem.rect.element.height/4),Ys=e=>Math.floor(e.ref.buttonRemoveItem.rect.element.left/2),$s=e=>e.query("GET_STYLE_LOAD_INDICATOR_POSITION"),Xs=e=>e.query("GET_STYLE_PROGRESS_INDICATOR_POSITION"),Ni=e=>e.query("GET_STYLE_BUTTON_REMOVE_ITEM_POSITION"),Qs={buttonAbortItemLoad:{opacity:0},buttonRetryItemLoad:{opacity:0},buttonRemoveItem:{opacity:0},buttonProcessItem:{opacity:0},buttonAbortItemProcessing:{opacity:0},buttonRetryItemProcessing:{opacity:0},buttonRevertItemProcessing:{opacity:0},loadProgressIndicator:{opacity:0,align:$s},processProgressIndicator:{opacity:0,align:Xs},processingCompleteIndicator:{opacity:0,scaleX:.75,scaleY:.75},info:{translateX:0,translateY:0,opacity:0},status:{translateX:0,translateY:0,opacity:0}},Ja={buttonRemoveItem:{opacity:1},buttonProcessItem:{opacity:1},info:{translateX:Ie},status:{translateX:Ie}},Ai={buttonAbortItemProcessing:{opacity:1},processProgressIndicator:{opacity:1},status:{opacity:1}},pt={DID_THROW_ITEM_INVALID:{buttonRemoveItem:{opacity:1},info:{translateX:Ie},status:{translateX:Ie,opacity:1}},DID_START_ITEM_LOAD:{buttonAbortItemLoad:{opacity:1},loadProgressIndicator:{opacity:1},status:{opacity:1}},DID_THROW_ITEM_LOAD_ERROR:{buttonRetryItemLoad:{opacity:1},buttonRemoveItem:{opacity:1},info:{translateX:Ie},status:{opacity:1}},DID_START_ITEM_REMOVE:{processProgressIndicator:{opacity:1,align:Ni},info:{translateX:Ie},status:{opacity:0}},DID_THROW_ITEM_REMOVE_ERROR:{processProgressIndicator:{opacity:0,align:Ni},buttonRemoveItem:{opacity:1},info:{translateX:Ie},status:{opacity:1,translateX:Ie}},DID_LOAD_ITEM:Ja,DID_LOAD_LOCAL_ITEM:{buttonRemoveItem:{opacity:1},info:{translateX:Ie},status:{translateX:Ie}},DID_START_ITEM_PROCESSING:Ai,DID_REQUEST_ITEM_PROCESSING:Ai,DID_UPDATE_ITEM_PROCESS_PROGRESS:Ai,DID_COMPLETE_ITEM_PROCESSING:{buttonRevertItemProcessing:{opacity:1},info:{opacity:1},status:{opacity:1}},DID_THROW_ITEM_PROCESSING_ERROR:{buttonRemoveItem:{opacity:1},buttonRetryItemProcessing:{opacity:1},status:{opacity:1},info:{translateX:Ie}},DID_THROW_ITEM_PROCESSING_REVERT_ERROR:{buttonRevertItemProcessing:{opacity:1},status:{opacity:1},info:{opacity:1}},DID_ABORT_ITEM_PROCESSING:{buttonRemoveItem:{opacity:1},buttonProcessItem:{opacity:1},info:{translateX:Ie},status:{opacity:1}},DID_REVERT_ITEM_PROCESSING:Ja},Zs=oe({create:({root:e})=>{e.element.innerHTML=e.query("GET_ICON_DONE")},name:"processing-complete-indicator",ignoreRect:!0,mixins:{styles:["scaleX","scaleY","opacity"],animations:{scaleX:"spring",scaleY:"spring",opacity:{type:"tween",duration:250}}}}),Ks=({root:e,props:t})=>{let i=Object.keys(zi).reduce((f,h)=>(f[h]={...zi[h]},f),{}),{id:a}=t,n=e.query("GET_ALLOW_REVERT"),o=e.query("GET_ALLOW_REMOVE"),l=e.query("GET_ALLOW_PROCESS"),r=e.query("GET_INSTANT_UPLOAD"),s=e.query("IS_ASYNC"),p=e.query("GET_STYLE_BUTTON_REMOVE_ITEM_ALIGN"),c;s?l&&!n?c=f=>!/RevertItemProcessing/.test(f):!l&&n?c=f=>!/ProcessItem|RetryItemProcessing|AbortItemProcessing/.test(f):!l&&!n&&(c=f=>!/Process/.test(f)):c=f=>!/Process/.test(f);let d=c?Ci.filter(c):Ci.concat();if(r&&n&&(i.RevertItemProcessing.label="GET_LABEL_BUTTON_REMOVE_ITEM",i.RevertItemProcessing.icon="GET_ICON_REMOVE"),s&&!n){let f=pt.DID_COMPLETE_ITEM_PROCESSING;f.info.translateX=Ys,f.info.translateY=Jt,f.status.translateY=Jt,f.processingCompleteIndicator={opacity:1,scaleX:1,scaleY:1}}if(s&&!l&&(["DID_START_ITEM_PROCESSING","DID_REQUEST_ITEM_PROCESSING","DID_UPDATE_ITEM_PROCESS_PROGRESS","DID_THROW_ITEM_PROCESSING_ERROR"].forEach(f=>{pt[f].status.translateY=Jt}),pt.DID_THROW_ITEM_PROCESSING_ERROR.status.translateX=qs),p&&n){i.RevertItemProcessing.align="BUTTON_REMOVE_ITEM_POSITION";let f=pt.DID_COMPLETE_ITEM_PROCESSING;f.info.translateX=Ie,f.status.translateY=Jt,f.processingCompleteIndicator={opacity:1,scaleX:1,scaleY:1}}o||(i.RemoveItem.disabled=!0),te(i,(f,h)=>{let g=e.createChildView(zn,{label:e.query(h.label),icon:e.query(h.icon),opacity:0});d.includes(f)&&e.appendChildView(g),h.disabled&&(g.element.setAttribute("disabled","disabled"),g.element.setAttribute("hidden","hidden")),g.element.dataset.align=e.query(`GET_STYLE_${h.align}`),g.element.classList.add(h.className),g.on("click",I=>{I.stopPropagation(),!h.disabled&&e.dispatch(h.action,{query:a})}),e.ref[`button${f}`]=g}),e.ref.processingCompleteIndicator=e.appendChildView(e.createChildView(Zs)),e.ref.processingCompleteIndicator.element.dataset.align=e.query("GET_STYLE_BUTTON_PROCESS_ITEM_POSITION"),e.ref.info=e.appendChildView(e.createChildView(ks,{id:a})),e.ref.status=e.appendChildView(e.createChildView(js,{id:a}));let m=e.appendChildView(e.createChildView(Xa,{opacity:0,align:e.query("GET_STYLE_LOAD_INDICATOR_POSITION")}));m.element.classList.add("filepond--load-indicator"),e.ref.loadProgressIndicator=m;let u=e.appendChildView(e.createChildView(Xa,{opacity:0,align:e.query("GET_STYLE_PROGRESS_INDICATOR_POSITION")}));u.element.classList.add("filepond--process-indicator"),e.ref.processProgressIndicator=u,e.ref.activeStyles=[]},Js=({root:e,actions:t,props:i})=>{ec({root:e,actions:t,props:i});let a=t.concat().filter(n=>/^DID_/.test(n.type)).reverse().find(n=>pt[n.type]);if(a){e.ref.activeStyles=[];let n=pt[a.type];te(Qs,(o,l)=>{let r=e.ref[o];te(l,(s,p)=>{let c=n[o]&&typeof n[o][s]<"u"?n[o][s]:p;e.ref.activeStyles.push({control:r,key:s,value:c})})})}e.ref.activeStyles.forEach(({control:n,key:o,value:l})=>{n[o]=typeof l=="function"?l(e):l})},ec=he({DID_SET_LABEL_BUTTON_ABORT_ITEM_PROCESSING:({root:e,action:t})=>{e.ref.buttonAbortItemProcessing.label=t.value},DID_SET_LABEL_BUTTON_ABORT_ITEM_LOAD:({root:e,action:t})=>{e.ref.buttonAbortItemLoad.label=t.value},DID_SET_LABEL_BUTTON_ABORT_ITEM_REMOVAL:({root:e,action:t})=>{e.ref.buttonAbortItemRemoval.label=t.value},DID_REQUEST_ITEM_PROCESSING:({root:e})=>{e.ref.processProgressIndicator.spin=!0,e.ref.processProgressIndicator.progress=0},DID_START_ITEM_LOAD:({root:e})=>{e.ref.loadProgressIndicator.spin=!0,e.ref.loadProgressIndicator.progress=0},DID_START_ITEM_REMOVE:({root:e})=>{e.ref.processProgressIndicator.spin=!0,e.ref.processProgressIndicator.progress=0},DID_UPDATE_ITEM_LOAD_PROGRESS:({root:e,action:t})=>{e.ref.loadProgressIndicator.spin=!1,e.ref.loadProgressIndicator.progress=t.progress},DID_UPDATE_ITEM_PROCESS_PROGRESS:({root:e,action:t})=>{e.ref.processProgressIndicator.spin=!1,e.ref.processProgressIndicator.progress=t.progress}}),tc=oe({create:Ks,write:Js,didCreateView:e=>{tt("CREATE_VIEW",{...e,view:e})},name:"file"}),ic=({root:e,props:t})=>{e.ref.fileName=ke("legend"),e.appendChild(e.ref.fileName),e.ref.file=e.appendChildView(e.createChildView(tc,{id:t.id})),e.ref.data=!1},ac=({root:e,props:t})=>{ae(e.ref.fileName,Qi(e.query("GET_ITEM_NAME",t.id)))},nc=oe({create:ic,ignoreRect:!0,write:he({DID_LOAD_ITEM:ac}),didCreateView:e=>{tt("CREATE_VIEW",{...e,view:e})},tag:"fieldset",name:"file-wrapper"}),en={type:"spring",damping:.6,mass:7},oc=({root:e,props:t})=>{[{name:"top"},{name:"center",props:{translateY:null,scaleY:null},mixins:{animations:{scaleY:en},styles:["translateY","scaleY"]}},{name:"bottom",props:{translateY:null},mixins:{animations:{translateY:en},styles:["translateY"]}}].forEach(i=>{lc(e,i,t.name)}),e.element.classList.add(`filepond--${t.name}`),e.ref.scalable=null},lc=(e,t,i)=>{let a=oe({name:`panel-${t.name} filepond--${i}`,mixins:t.mixins,ignoreRectUpdate:!0}),n=e.createChildView(a,t.props);e.ref[t.name]=e.appendChildView(n)},rc=({root:e,props:t})=>{if((e.ref.scalable===null||t.scalable!==e.ref.scalable)&&(e.ref.scalable=Tn(t.scalable)?t.scalable:!0,e.element.dataset.scalable=e.ref.scalable),!t.height)return;let i=e.ref.top.rect.element,a=e.ref.bottom.rect.element,n=Math.max(i.height+a.height,t.height);e.ref.center.translateY=i.height,e.ref.center.scaleY=(n-i.height-a.height)/100,e.ref.bottom.translateY=n-a.height},kn=oe({name:"panel",read:({root:e,props:t})=>t.heightCurrent=e.ref.bottom.translateY,write:rc,create:oc,ignoreRect:!0,mixins:{apis:["height","heightCurrent","scalable"]}}),sc=e=>{let t=e.map(a=>a.id),i;return{setIndex:a=>{i=a},getIndex:()=>i,getItemIndex:a=>t.indexOf(a.id)}},tn={type:"spring",stiffness:.75,damping:.45,mass:10},an="spring",nn={DID_START_ITEM_LOAD:"busy",DID_UPDATE_ITEM_LOAD_PROGRESS:"loading",DID_THROW_ITEM_INVALID:"load-invalid",DID_THROW_ITEM_LOAD_ERROR:"load-error",DID_LOAD_ITEM:"idle",DID_THROW_ITEM_REMOVE_ERROR:"remove-error",DID_START_ITEM_REMOVE:"busy",DID_START_ITEM_PROCESSING:"busy processing",DID_REQUEST_ITEM_PROCESSING:"busy processing",DID_UPDATE_ITEM_PROCESS_PROGRESS:"processing",DID_COMPLETE_ITEM_PROCESSING:"processing-complete",DID_THROW_ITEM_PROCESSING_ERROR:"processing-error",DID_THROW_ITEM_PROCESSING_REVERT_ERROR:"processing-revert-error",DID_ABORT_ITEM_PROCESSING:"cancelled",DID_REVERT_ITEM_PROCESSING:"idle"},cc=({root:e,props:t})=>{if(e.ref.handleClick=a=>e.dispatch("DID_ACTIVATE_ITEM",{id:t.id}),e.element.id=`filepond--item-${t.id}`,e.element.addEventListener("click",e.ref.handleClick),e.ref.container=e.appendChildView(e.createChildView(nc,{id:t.id})),e.ref.panel=e.appendChildView(e.createChildView(kn,{name:"item-panel"})),e.ref.panel.height=null,t.markedForRemoval=!1,!e.query("GET_ALLOW_REORDER"))return;e.element.dataset.dragState="idle";let i=a=>{if(!a.isPrimary)return;let n=!1,o={x:a.pageX,y:a.pageY};t.dragOrigin={x:e.translateX,y:e.translateY},t.dragCenter={x:a.offsetX,y:a.offsetY};let l=sc(e.query("GET_ACTIVE_ITEMS"));e.dispatch("DID_GRAB_ITEM",{id:t.id,dragState:l});let r=d=>{if(!d.isPrimary)return;d.stopPropagation(),d.preventDefault(),t.dragOffset={x:d.pageX-o.x,y:d.pageY-o.y},t.dragOffset.x*t.dragOffset.x+t.dragOffset.y*t.dragOffset.y>16&&!n&&(n=!0,e.element.removeEventListener("click",e.ref.handleClick)),e.dispatch("DID_DRAG_ITEM",{id:t.id,dragState:l})},s=d=>{d.isPrimary&&(t.dragOffset={x:d.pageX-o.x,y:d.pageY-o.y},c())},p=()=>{c()},c=()=>{document.removeEventListener("pointercancel",p),document.removeEventListener("pointermove",r),document.removeEventListener("pointerup",s),e.dispatch("DID_DROP_ITEM",{id:t.id,dragState:l}),n&&setTimeout(()=>e.element.addEventListener("click",e.ref.handleClick),0)};document.addEventListener("pointercancel",p),document.addEventListener("pointermove",r),document.addEventListener("pointerup",s)};e.element.addEventListener("pointerdown",i)},dc=he({DID_UPDATE_PANEL_HEIGHT:({root:e,action:t})=>{e.height=t.height}}),pc=he({DID_GRAB_ITEM:({root:e,props:t})=>{t.dragOrigin={x:e.translateX,y:e.translateY}},DID_DRAG_ITEM:({root:e})=>{e.element.dataset.dragState="drag"},DID_DROP_ITEM:({root:e,props:t})=>{t.dragOffset=null,t.dragOrigin=null,e.element.dataset.dragState="drop"}},({root:e,actions:t,props:i,shouldOptimize:a})=>{e.element.dataset.dragState==="drop"&&e.scaleX<=1&&(e.element.dataset.dragState="idle");let n=t.concat().filter(l=>/^DID_/.test(l.type)).reverse().find(l=>nn[l.type]);n&&n.type!==i.currentState&&(i.currentState=n.type,e.element.dataset.filepondItemState=nn[i.currentState]||"");let o=e.query("GET_ITEM_PANEL_ASPECT_RATIO")||e.query("GET_PANEL_ASPECT_RATIO");o?a||(e.height=e.rect.element.width*o):(dc({root:e,actions:t,props:i}),!e.height&&e.ref.container.rect.element.height>0&&(e.height=e.ref.container.rect.element.height)),a&&(e.ref.panel.height=null),e.ref.panel.height=e.height}),mc=oe({create:cc,write:pc,destroy:({root:e,props:t})=>{e.element.removeEventListener("click",e.ref.handleClick),e.dispatch("RELEASE_ITEM",{query:t.id})},tag:"li",name:"item",mixins:{apis:["id","interactionMethod","markedForRemoval","spawnDate","dragCenter","dragOrigin","dragOffset"],styles:["translateX","translateY","scaleX","scaleY","opacity","height"],animations:{scaleX:an,scaleY:an,translateX:tn,translateY:tn,opacity:{type:"tween",duration:150}}}}),Zi=(e,t)=>Math.max(1,Math.floor((e+1)/t)),Ki=(e,t,i)=>{if(!i)return;let a=e.rect.element.width,n=t.length,o=null;if(n===0||i.topE){if(i.left{ne(e.element,"role","list"),e.ref.lastItemSpanwDate=Date.now()},fc=({root:e,action:t})=>{let{id:i,index:a,interactionMethod:n}=t;e.ref.addIndex=a;let o=Date.now(),l=o,r=1;if(n!==_e.NONE){r=0;let s=e.query("GET_ITEM_INSERT_INTERVAL"),p=o-e.ref.lastItemSpanwDate;l=p{e.dragOffset?(e.translateX=null,e.translateY=null,e.translateX=e.dragOrigin.x+e.dragOffset.x,e.translateY=e.dragOrigin.y+e.dragOffset.y,e.scaleX=1.025,e.scaleY=1.025):(e.translateX=t,e.translateY=i,Date.now()>e.spawnDate&&(e.opacity===0&&hc(e,t,i,a,n),e.scaleX=1,e.scaleY=1,e.opacity=1))},hc=(e,t,i,a,n)=>{e.interactionMethod===_e.NONE?(e.translateX=null,e.translateX=t,e.translateY=null,e.translateY=i):e.interactionMethod===_e.DROP?(e.translateX=null,e.translateX=t-a*20,e.translateY=null,e.translateY=i-n*10,e.scaleX=.8,e.scaleY=.8):e.interactionMethod===_e.BROWSE?(e.translateY=null,e.translateY=i-30):e.interactionMethod===_e.API&&(e.translateX=null,e.translateX=t-30,e.translateY=null)},gc=({root:e,action:t})=>{let{id:i}=t,a=e.childViews.find(n=>n.id===i);a&&(a.scaleX=.9,a.scaleY=.9,a.opacity=0,a.markedForRemoval=!0)},Mi=e=>e.rect.element.height+e.rect.element.marginBottom*.5+e.rect.element.marginTop*.5,Ec=e=>e.rect.element.width+e.rect.element.marginLeft*.5+e.rect.element.marginRight*.5,bc=({root:e,action:t})=>{let{id:i,dragState:a}=t,n=e.query("GET_ITEM",{id:i}),o=e.childViews.find(g=>g.id===i),l=e.childViews.length,r=a.getItemIndex(n);if(!o)return;let s={x:o.dragOrigin.x+o.dragOffset.x+o.dragCenter.x,y:o.dragOrigin.y+o.dragOffset.y+o.dragCenter.y},p=Mi(o),c=Ec(o),d=Math.floor(e.rect.outer.width/c);d>l&&(d=l);let m=Math.floor(l/d+1);ei.setHeight=p*m,ei.setWidth=c*d;var u={y:Math.floor(s.y/p),x:Math.floor(s.x/c),getGridIndex:function(){return s.y>ei.getHeight||s.y<0||s.x>ei.getWidth||s.x<0?r:this.y*d+this.x},getColIndex:function(){let I=e.query("GET_ACTIVE_ITEMS"),E=e.childViews.filter(O=>O.rect.element.height),T=I.map(O=>E.find(M=>M.id===O.id)),v=T.findIndex(O=>O===o),y=Mi(o),b=T.length,w=b,x=0,_=0,P=0;for(let O=0;OO){if(s.y1?u.getGridIndex():u.getColIndex();e.dispatch("MOVE_ITEM",{query:o,index:f});let h=a.getIndex();if(h===void 0||h!==f){if(a.setIndex(f),h===void 0)return;e.dispatch("DID_REORDER_ITEMS",{items:e.query("GET_ACTIVE_ITEMS"),origin:r,target:f})}},Tc=he({DID_ADD_ITEM:fc,DID_REMOVE_ITEM:gc,DID_DRAG_ITEM:bc}),Ic=({root:e,props:t,actions:i,shouldOptimize:a})=>{Tc({root:e,props:t,actions:i});let{dragCoordinates:n}=t,o=e.rect.element.width,l=e.childViews.filter(T=>T.rect.element.height),r=e.query("GET_ACTIVE_ITEMS").map(T=>l.find(v=>v.id===T.id)).filter(T=>T),s=n?Ki(e,r,n):null,p=e.ref.addIndex||null;e.ref.addIndex=null;let c=0,d=0,m=0;if(r.length===0)return;let u=r[0].rect.element,f=u.marginTop+u.marginBottom,h=u.marginLeft+u.marginRight,g=u.width+h,I=u.height+f,E=Zi(o,g);if(E===1){let T=0,v=0;r.forEach((y,b)=>{if(s){let _=b-s;_===-2?v=-f*.25:_===-1?v=-f*.75:_===0?v=f*.75:_===1?v=f*.25:v=0}a&&(y.translateX=null,y.translateY=null),y.markedForRemoval||on(y,0,T+v);let x=(y.rect.element.height+f)*(y.markedForRemoval?y.opacity:1);T+=x})}else{let T=0,v=0;r.forEach((y,b)=>{b===s&&(c=1),b===p&&(m+=1),y.markedForRemoval&&y.opacity<.5&&(d-=1);let w=b+m+c+d,x=w%E,_=Math.floor(w/E),P=x*g,O=_*I,M=Math.sign(P-T),C=Math.sign(O-v);T=P,v=O,!y.markedForRemoval&&(a&&(y.translateX=null,y.translateY=null),on(y,P,O,M,C))})}},vc=(e,t)=>t.filter(i=>i.data&&i.data.id?e.id===i.data.id:!0),xc=oe({create:uc,write:Ic,tag:"ul",name:"list",didWriteView:({root:e})=>{e.childViews.filter(t=>t.markedForRemoval&&t.opacity===0&&t.resting).forEach(t=>{t._destroy(),e.removeChildView(t)})},filterFrameActionsForChild:vc,mixins:{apis:["dragCoordinates"]}}),yc=({root:e,props:t})=>{e.ref.list=e.appendChildView(e.createChildView(xc)),t.dragCoordinates=null,t.overflowing=!1},_c=({root:e,props:t,action:i})=>{e.query("GET_ITEM_INSERT_LOCATION_FREEDOM")&&(t.dragCoordinates={left:i.position.scopeLeft-e.ref.list.rect.element.left,top:i.position.scopeTop-(e.rect.outer.top+e.rect.element.marginTop+e.rect.element.scrollTop)})},Rc=({props:e})=>{e.dragCoordinates=null},wc=he({DID_DRAG:_c,DID_END_DRAG:Rc}),Sc=({root:e,props:t,actions:i})=>{if(wc({root:e,props:t,actions:i}),e.ref.list.dragCoordinates=t.dragCoordinates,t.overflowing&&!t.overflow&&(t.overflowing=!1,e.element.dataset.state="",e.height=null),t.overflow){let a=Math.round(t.overflow);a!==e.height&&(t.overflowing=!0,e.element.dataset.state="overflow",e.height=a)}},Lc=oe({create:yc,write:Sc,name:"list-scroller",mixins:{apis:["overflow","dragCoordinates"],styles:["height","translateY"],animations:{translateY:"spring"}}}),Oe=(e,t,i,a="")=>{i?ne(e,t,a):e.removeAttribute(t)},Ac=e=>{if(!(!e||e.value==="")){try{e.value=""}catch{}if(e.value){let t=ke("form"),i=e.parentNode,a=e.nextSibling;t.appendChild(e),t.reset(),a?i.insertBefore(e,a):i.appendChild(e)}}},Mc=({root:e,props:t})=>{e.element.id=`filepond--browser-${t.id}`,ne(e.element,"name",e.query("GET_NAME")),ne(e.element,"aria-controls",`filepond--assistant-${t.id}`),ne(e.element,"aria-labelledby",`filepond--drop-label-${t.id}`),Vn({root:e,action:{value:e.query("GET_ACCEPTED_FILE_TYPES")}}),Gn({root:e,action:{value:e.query("GET_ALLOW_MULTIPLE")}}),Un({root:e,action:{value:e.query("GET_ALLOW_DIRECTORIES_ONLY")}}),Bi({root:e}),Wn({root:e,action:{value:e.query("GET_REQUIRED")}}),Hn({root:e,action:{value:e.query("GET_CAPTURE_METHOD")}}),e.ref.handleChange=i=>{if(!e.element.value)return;let a=Array.from(e.element.files).map(n=>(n._relativePath=n.webkitRelativePath,n));setTimeout(()=>{t.onload(a),Ac(e.element)},250)},e.element.addEventListener("change",e.ref.handleChange)},Vn=({root:e,action:t})=>{e.query("GET_ALLOW_SYNC_ACCEPT_ATTRIBUTE")&&Oe(e.element,"accept",!!t.value,t.value?t.value.join(","):"")},Gn=({root:e,action:t})=>{Oe(e.element,"multiple",t.value)},Un=({root:e,action:t})=>{Oe(e.element,"webkitdirectory",t.value)},Bi=({root:e})=>{let t=e.query("GET_DISABLED"),i=e.query("GET_ALLOW_BROWSE"),a=t||!i;Oe(e.element,"disabled",a)},Wn=({root:e,action:t})=>{t.value?e.query("GET_TOTAL_ITEMS")===0&&Oe(e.element,"required",!0):Oe(e.element,"required",!1)},Hn=({root:e,action:t})=>{Oe(e.element,"capture",!!t.value,t.value===!0?"":t.value)},ln=({root:e})=>{let{element:t}=e;e.query("GET_TOTAL_ITEMS")>0?(Oe(t,"required",!1),Oe(t,"name",!1)):(Oe(t,"name",!0,e.query("GET_NAME")),e.query("GET_CHECK_VALIDITY")&&t.setCustomValidity(""),e.query("GET_REQUIRED")&&Oe(t,"required",!0))},Oc=({root:e})=>{e.query("GET_CHECK_VALIDITY")&&e.element.setCustomValidity(e.query("GET_LABEL_INVALID_FIELD"))},Pc=oe({tag:"input",name:"browser",ignoreRect:!0,ignoreRectUpdate:!0,attributes:{type:"file"},create:Mc,destroy:({root:e})=>{e.element.removeEventListener("change",e.ref.handleChange)},write:he({DID_LOAD_ITEM:ln,DID_REMOVE_ITEM:ln,DID_THROW_ITEM_INVALID:Oc,DID_SET_DISABLED:Bi,DID_SET_ALLOW_BROWSE:Bi,DID_SET_ALLOW_DIRECTORIES_ONLY:Un,DID_SET_ALLOW_MULTIPLE:Gn,DID_SET_ACCEPTED_FILE_TYPES:Vn,DID_SET_CAPTURE_METHOD:Hn,DID_SET_REQUIRED:Wn})}),rn={ENTER:13,SPACE:32},Dc=({root:e,props:t})=>{let i=ke("label");ne(i,"for",`filepond--browser-${t.id}`),ne(i,"id",`filepond--drop-label-${t.id}`),ne(i,"aria-hidden","true"),e.ref.handleKeyDown=a=>{(a.keyCode===rn.ENTER||a.keyCode===rn.SPACE)&&(a.preventDefault(),e.ref.label.click())},e.ref.handleClick=a=>{a.target===i||i.contains(a.target)||e.ref.label.click()},i.addEventListener("keydown",e.ref.handleKeyDown),e.element.addEventListener("click",e.ref.handleClick),jn(i,t.caption),e.appendChild(i),e.ref.label=i},jn=(e,t)=>{e.innerHTML=t;let i=e.querySelector(".filepond--label-action");return i&&ne(i,"tabindex","0"),t},Fc=oe({name:"drop-label",ignoreRect:!0,create:Dc,destroy:({root:e})=>{e.ref.label.addEventListener("keydown",e.ref.handleKeyDown),e.element.removeEventListener("click",e.ref.handleClick)},write:he({DID_SET_LABEL_IDLE:({root:e,action:t})=>{jn(e.ref.label,t.value)}}),mixins:{styles:["opacity","translateX","translateY"],animations:{opacity:{type:"tween",duration:150},translateX:"spring",translateY:"spring"}}}),zc=oe({name:"drip-blob",ignoreRect:!0,mixins:{styles:["translateX","translateY","scaleX","scaleY","opacity"],animations:{scaleX:"spring",scaleY:"spring",translateX:"spring",translateY:"spring",opacity:{type:"tween",duration:250}}}}),Cc=({root:e})=>{let t=e.rect.element.width*.5,i=e.rect.element.height*.5;e.ref.blob=e.appendChildView(e.createChildView(zc,{opacity:0,scaleX:2.5,scaleY:2.5,translateX:t,translateY:i}))},Nc=({root:e,action:t})=>{if(!e.ref.blob){Cc({root:e});return}e.ref.blob.translateX=t.position.scopeLeft,e.ref.blob.translateY=t.position.scopeTop,e.ref.blob.scaleX=1,e.ref.blob.scaleY=1,e.ref.blob.opacity=1},Bc=({root:e})=>{e.ref.blob&&(e.ref.blob.opacity=0)},kc=({root:e})=>{e.ref.blob&&(e.ref.blob.scaleX=2.5,e.ref.blob.scaleY=2.5,e.ref.blob.opacity=0)},Vc=({root:e,props:t,actions:i})=>{Gc({root:e,props:t,actions:i});let{blob:a}=e.ref;i.length===0&&a&&a.opacity===0&&(e.removeChildView(a),e.ref.blob=null)},Gc=he({DID_DRAG:Nc,DID_DROP:kc,DID_END_DRAG:Bc}),Uc=oe({ignoreRect:!0,ignoreRectUpdate:!0,name:"drip",write:Vc}),qn=(e,t)=>{try{let i=new DataTransfer;t.forEach(a=>{a instanceof File?i.items.add(a):i.items.add(new File([a],a.name,{type:a.type}))}),e.files=i.files}catch{return!1}return!0},Wc=({root:e})=>e.ref.fields={},ui=(e,t)=>e.ref.fields[t],Ji=e=>{e.query("GET_ACTIVE_ITEMS").forEach(t=>{e.ref.fields[t.id]&&e.element.appendChild(e.ref.fields[t.id])})},sn=({root:e})=>Ji(e),Hc=({root:e,action:t})=>{let n=!(e.query("GET_ITEM",t.id).origin===se.LOCAL)&&e.query("SHOULD_UPDATE_FILE_INPUT"),o=ke("input");o.type=n?"file":"hidden",o.name=e.query("GET_NAME"),o.disabled=e.query("GET_DISABLED"),e.ref.fields[t.id]=o,Ji(e)},jc=({root:e,action:t})=>{let i=ui(e,t.id);if(!i||(t.serverFileReference!==null&&(i.value=t.serverFileReference),!e.query("SHOULD_UPDATE_FILE_INPUT")))return;let a=e.query("GET_ITEM",t.id);qn(i,[a.file])},qc=({root:e,action:t})=>{e.query("SHOULD_UPDATE_FILE_INPUT")&&setTimeout(()=>{let i=ui(e,t.id);i&&qn(i,[t.file])},0)},Yc=({root:e})=>{e.element.disabled=e.query("GET_DISABLED")},$c=({root:e,action:t})=>{let i=ui(e,t.id);i&&(i.parentNode&&i.parentNode.removeChild(i),delete e.ref.fields[t.id])},Xc=({root:e,action:t})=>{let i=ui(e,t.id);i&&(t.value===null?i.removeAttribute("value"):i.type!="file"&&(i.value=t.value),Ji(e))},Qc=he({DID_SET_DISABLED:Yc,DID_ADD_ITEM:Hc,DID_LOAD_ITEM:jc,DID_REMOVE_ITEM:$c,DID_DEFINE_VALUE:Xc,DID_PREPARE_OUTPUT:qc,DID_REORDER_ITEMS:sn,DID_SORT_ITEMS:sn}),Zc=oe({tag:"fieldset",name:"data",create:Wc,write:Qc,ignoreRect:!0}),Kc=e=>"getRootNode"in e?e.getRootNode():document,Jc=["jpg","jpeg","png","gif","bmp","webp","svg","tiff"],ed=["css","csv","html","txt"],td={zip:"zip|compressed",epub:"application/epub+zip"},Yn=(e="")=>(e=e.toLowerCase(),Jc.includes(e)?"image/"+(e==="jpg"?"jpeg":e==="svg"?"svg+xml":e):ed.includes(e)?"text/"+e:td[e]||""),ea=e=>new Promise((t,i)=>{let a=cd(e);if(a.length&&!id(e))return t(a);ad(e).then(t)}),id=e=>e.files?e.files.length>0:!1,ad=e=>new Promise((t,i)=>{let a=(e.items?Array.from(e.items):[]).filter(n=>nd(n)).map(n=>od(n));if(!a.length){t(e.files?Array.from(e.files):[]);return}Promise.all(a).then(n=>{let o=[];n.forEach(l=>{o.push.apply(o,l)}),t(o.filter(l=>l).map(l=>(l._relativePath||(l._relativePath=l.webkitRelativePath),l)))}).catch(console.error)}),nd=e=>{if($n(e)){let t=ta(e);if(t)return t.isFile||t.isDirectory}return e.kind==="file"},od=e=>new Promise((t,i)=>{if(sd(e)){ld(ta(e)).then(t).catch(i);return}t([e.getAsFile()])}),ld=e=>new Promise((t,i)=>{let a=[],n=0,o=0,l=()=>{o===0&&n===0&&t(a)},r=s=>{n++;let p=s.createReader(),c=()=>{p.readEntries(d=>{if(d.length===0){n--,l();return}d.forEach(m=>{m.isDirectory?r(m):(o++,m.file(u=>{let f=rd(u);m.fullPath&&(f._relativePath=m.fullPath),a.push(f),o--,l()}))}),c()},i)};c()};r(e)}),rd=e=>{if(e.type.length)return e;let t=e.lastModifiedDate,i=e.name,a=Yn(mi(e.name));return a.length&&(e=e.slice(0,e.size,a),e.name=i,e.lastModifiedDate=t),e},sd=e=>$n(e)&&(ta(e)||{}).isDirectory,$n=e=>"webkitGetAsEntry"in e,ta=e=>e.webkitGetAsEntry(),cd=e=>{let t=[];try{if(t=pd(e),t.length)return t;t=dd(e)}catch{}return t},dd=e=>{let t=e.getData("url");return typeof t=="string"&&t.length?[t]:[]},pd=e=>{let t=e.getData("text/html");if(typeof t=="string"&&t.length){let i=t.match(/src\s*=\s*"(.+?)"/);if(i)return[i[1]]}return[]},li=[],et=e=>({pageLeft:e.pageX,pageTop:e.pageY,scopeLeft:e.offsetX||e.layerX,scopeTop:e.offsetY||e.layerY}),md=(e,t,i)=>{let a=ud(t),n={element:e,filterElement:i,state:null,ondrop:()=>{},onenter:()=>{},ondrag:()=>{},onexit:()=>{},onload:()=>{},allowdrop:()=>{}};return n.destroy=a.addListener(n),n},ud=e=>{let t=li.find(a=>a.element===e);if(t)return t;let i=fd(e);return li.push(i),i},fd=e=>{let t=[],i={dragenter:gd,dragover:Ed,dragleave:Td,drop:bd},a={};te(i,(o,l)=>{a[o]=l(e,t),e.addEventListener(o,a[o],!1)});let n={element:e,addListener:o=>(t.push(o),()=>{t.splice(t.indexOf(o),1),t.length===0&&(li.splice(li.indexOf(n),1),te(i,l=>{e.removeEventListener(l,a[l],!1)}))})};return n},hd=(e,t)=>("elementFromPoint"in e||(e=document),e.elementFromPoint(t.x,t.y)),ia=(e,t)=>{let i=Kc(t),a=hd(i,{x:e.pageX-window.pageXOffset,y:e.pageY-window.pageYOffset});return a===t||t.contains(a)},Xn=null,ti=(e,t)=>{try{e.dropEffect=t}catch{}},gd=(e,t)=>i=>{i.preventDefault(),Xn=i.target,t.forEach(a=>{let{element:n,onenter:o}=a;ia(i,n)&&(a.state="enter",o(et(i)))})},Ed=(e,t)=>i=>{i.preventDefault();let a=i.dataTransfer;ea(a).then(n=>{let o=!1;t.some(l=>{let{filterElement:r,element:s,onenter:p,onexit:c,ondrag:d,allowdrop:m}=l;ti(a,"copy");let u=m(n);if(!u){ti(a,"none");return}if(ia(i,s)){if(o=!0,l.state===null){l.state="enter",p(et(i));return}if(l.state="over",r&&!u){ti(a,"none");return}d(et(i))}else r&&!o&&ti(a,"none"),l.state&&(l.state=null,c(et(i)))})})},bd=(e,t)=>i=>{i.preventDefault();let a=i.dataTransfer;ea(a).then(n=>{t.forEach(o=>{let{filterElement:l,element:r,ondrop:s,onexit:p,allowdrop:c}=o;if(o.state=null,!(l&&!ia(i,r))){if(!c(n))return p(et(i));s(et(i),n)}})})},Td=(e,t)=>i=>{Xn===i.target&&t.forEach(a=>{let{onexit:n}=a;a.state=null,n(et(i))})},Id=(e,t,i)=>{e.classList.add("filepond--hopper");let{catchesDropsOnPage:a,requiresDropOnElement:n,filterItems:o=c=>c}=i,l=md(e,a?document.documentElement:e,n),r="",s="";l.allowdrop=c=>t(o(c)),l.ondrop=(c,d)=>{let m=o(d);if(!t(m)){p.ondragend(c);return}s="drag-drop",p.onload(m,c)},l.ondrag=c=>{p.ondrag(c)},l.onenter=c=>{s="drag-over",p.ondragstart(c)},l.onexit=c=>{s="drag-exit",p.ondragend(c)};let p={updateHopperState:()=>{r!==s&&(e.dataset.hopperState=s,r=s)},onload:()=>{},ondragstart:()=>{},ondrag:()=>{},ondragend:()=>{},destroy:()=>{l.destroy()}};return p},ki=!1,mt=[],Qn=e=>{let t=document.activeElement;if(t&&/textarea|input/i.test(t.nodeName)){let i=!1,a=t;for(;a!==document.body;){if(a.classList.contains("filepond--root")){i=!0;break}a=a.parentNode}if(!i)return}ea(e.clipboardData).then(i=>{i.length&&mt.forEach(a=>a(i))})},vd=e=>{mt.includes(e)||(mt.push(e),!ki&&(ki=!0,document.addEventListener("paste",Qn)))},xd=e=>{Yi(mt,mt.indexOf(e)),mt.length===0&&(document.removeEventListener("paste",Qn),ki=!1)},yd=()=>{let e=i=>{t.onload(i)},t={destroy:()=>{xd(e)},onload:()=>{}};return vd(e),t},_d=({root:e,props:t})=>{e.element.id=`filepond--assistant-${t.id}`,ne(e.element,"role","status"),ne(e.element,"aria-live","polite"),ne(e.element,"aria-relevant","additions")},cn=null,dn=null,Oi=[],fi=(e,t)=>{e.element.textContent=t},Rd=e=>{e.element.textContent=""},Zn=(e,t,i)=>{let a=e.query("GET_TOTAL_ITEMS");fi(e,`${i} ${t}, ${a} ${a===1?e.query("GET_LABEL_FILE_COUNT_SINGULAR"):e.query("GET_LABEL_FILE_COUNT_PLURAL")}`),clearTimeout(dn),dn=setTimeout(()=>{Rd(e)},1500)},Kn=e=>e.element.parentNode.contains(document.activeElement),wd=({root:e,action:t})=>{if(!Kn(e))return;e.element.textContent="";let i=e.query("GET_ITEM",t.id);Oi.push(i.filename),clearTimeout(cn),cn=setTimeout(()=>{Zn(e,Oi.join(", "),e.query("GET_LABEL_FILE_ADDED")),Oi.length=0},750)},Sd=({root:e,action:t})=>{if(!Kn(e))return;let i=t.item;Zn(e,i.filename,e.query("GET_LABEL_FILE_REMOVED"))},Ld=({root:e,action:t})=>{let a=e.query("GET_ITEM",t.id).filename,n=e.query("GET_LABEL_FILE_PROCESSING_COMPLETE");fi(e,`${a} ${n}`)},pn=({root:e,action:t})=>{let a=e.query("GET_ITEM",t.id).filename,n=e.query("GET_LABEL_FILE_PROCESSING_ABORTED");fi(e,`${a} ${n}`)},ii=({root:e,action:t})=>{let a=e.query("GET_ITEM",t.id).filename;fi(e,`${t.status.main} ${a} ${t.status.sub}`)},Ad=oe({create:_d,ignoreRect:!0,ignoreRectUpdate:!0,write:he({DID_LOAD_ITEM:wd,DID_REMOVE_ITEM:Sd,DID_COMPLETE_ITEM_PROCESSING:Ld,DID_ABORT_ITEM_PROCESSING:pn,DID_REVERT_ITEM_PROCESSING:pn,DID_THROW_ITEM_REMOVE_ERROR:ii,DID_THROW_ITEM_LOAD_ERROR:ii,DID_THROW_ITEM_INVALID:ii,DID_THROW_ITEM_PROCESSING_ERROR:ii}),tag:"span",name:"assistant"}),Jn=(e,t="-")=>e.replace(new RegExp(`${t}.`,"g"),i=>i.charAt(1).toUpperCase()),eo=(e,t=16,i=!0)=>{let a=Date.now(),n=null;return(...o)=>{clearTimeout(n);let l=Date.now()-a,r=()=>{a=Date.now(),e(...o)};le.preventDefault(),Od=({root:e,props:t})=>{let i=e.query("GET_ID");i&&(e.element.id=i);let a=e.query("GET_CLASS_NAME");a&&a.split(" ").filter(s=>s.length).forEach(s=>{e.element.classList.add(s)}),e.ref.label=e.appendChildView(e.createChildView(Fc,{...t,translateY:null,caption:e.query("GET_LABEL_IDLE")})),e.ref.list=e.appendChildView(e.createChildView(Lc,{translateY:null})),e.ref.panel=e.appendChildView(e.createChildView(kn,{name:"panel-root"})),e.ref.assistant=e.appendChildView(e.createChildView(Ad,{...t})),e.ref.data=e.appendChildView(e.createChildView(Zc,{...t})),e.ref.measure=ke("div"),e.ref.measure.style.height="100%",e.element.appendChild(e.ref.measure),e.ref.bounds=null,e.query("GET_STYLES").filter(s=>!Be(s.value)).map(({name:s,value:p})=>{e.element.dataset[s]=p}),e.ref.widthPrevious=null,e.ref.widthUpdated=eo(()=>{e.ref.updateHistory=[],e.dispatch("DID_RESIZE_ROOT")},250),e.ref.previousAspectRatio=null,e.ref.updateHistory=[];let n=window.matchMedia("(pointer: fine) and (hover: hover)").matches,o="PointerEvent"in window;e.query("GET_ALLOW_REORDER")&&o&&!n&&(e.element.addEventListener("touchmove",ri,{passive:!1}),e.element.addEventListener("gesturestart",ri));let l=e.query("GET_CREDITS");if(l.length===2){let s=document.createElement("a");s.className="filepond--credits",s.setAttribute("aria-hidden","true"),s.href=l[0],s.tabindex=-1,s.target="_blank",s.rel="noopener noreferrer",s.textContent=l[1],e.element.appendChild(s),e.ref.credits=s}},Pd=({root:e,props:t,actions:i})=>{if(Nd({root:e,props:t,actions:i}),i.filter(b=>/^DID_SET_STYLE_/.test(b.type)).filter(b=>!Be(b.data.value)).map(({type:b,data:w})=>{let x=Jn(b.substring(8).toLowerCase(),"_");e.element.dataset[x]=w.value,e.invalidateLayout()}),e.rect.element.hidden)return;e.rect.element.width!==e.ref.widthPrevious&&(e.ref.widthPrevious=e.rect.element.width,e.ref.widthUpdated());let a=e.ref.bounds;a||(a=e.ref.bounds=zd(e),e.element.removeChild(e.ref.measure),e.ref.measure=null);let{hopper:n,label:o,list:l,panel:r}=e.ref;n&&n.updateHopperState();let s=e.query("GET_PANEL_ASPECT_RATIO"),p=e.query("GET_ALLOW_MULTIPLE"),c=e.query("GET_TOTAL_ITEMS"),d=p?e.query("GET_MAX_FILES")||Md:1,m=c===d,u=i.find(b=>b.type==="DID_ADD_ITEM");if(m&&u){let b=u.data.interactionMethod;o.opacity=0,p?o.translateY=-40:b===_e.API?o.translateX=40:b===_e.BROWSE?o.translateY=40:o.translateY=30}else m||(o.opacity=1,o.translateX=0,o.translateY=0);let f=Dd(e),h=Fd(e),g=o.rect.element.height,I=!p||m?0:g,E=m?l.rect.element.marginTop:0,T=c===0?0:l.rect.element.marginBottom,v=I+E+h.visual+T,y=I+E+h.bounds+T;if(l.translateY=Math.max(0,I-l.rect.element.marginTop)-f.top,s){let b=e.rect.element.width,w=b*s;s!==e.ref.previousAspectRatio&&(e.ref.previousAspectRatio=s,e.ref.updateHistory=[]);let x=e.ref.updateHistory;x.push(b);let _=2;if(x.length>_*2){let O=x.length,M=O-10,C=0;for(let S=O;S>=M;S--)if(x[S]===x[S-2]&&C++,C>=_)return}r.scalable=!1,r.height=w;let P=w-I-(T-f.bottom)-(m?E:0);h.visual>P?l.overflow=P:l.overflow=null,e.height=w}else if(a.fixedHeight){r.scalable=!1;let b=a.fixedHeight-I-(T-f.bottom)-(m?E:0);h.visual>b?l.overflow=b:l.overflow=null}else if(a.cappedHeight){let b=v>=a.cappedHeight,w=Math.min(a.cappedHeight,v);r.scalable=!0,r.height=b?w:w-f.top-f.bottom;let x=w-I-(T-f.bottom)-(m?E:0);v>a.cappedHeight&&h.visual>x?l.overflow=x:l.overflow=null,e.height=Math.min(a.cappedHeight,y-f.top-f.bottom)}else{let b=c>0?f.top+f.bottom:0;r.scalable=!0,r.height=Math.max(g,v-b),e.height=Math.max(g,y-b)}e.ref.credits&&r.heightCurrent&&(e.ref.credits.style.transform=`translateY(${r.heightCurrent}px)`)},Dd=e=>{let t=e.ref.list.childViews[0].childViews[0];return t?{top:t.rect.element.marginTop,bottom:t.rect.element.marginBottom}:{top:0,bottom:0}},Fd=e=>{let t=0,i=0,a=e.ref.list,n=a.childViews[0],o=n.childViews.filter(E=>E.rect.element.height),l=e.query("GET_ACTIVE_ITEMS").map(E=>o.find(T=>T.id===E.id)).filter(E=>E);if(l.length===0)return{visual:t,bounds:i};let r=n.rect.element.width,s=Ki(n,l,a.dragCoordinates),p=l[0].rect.element,c=p.marginTop+p.marginBottom,d=p.marginLeft+p.marginRight,m=p.width+d,u=p.height+c,f=typeof s<"u"&&s>=0?1:0,h=l.find(E=>E.markedForRemoval&&E.opacity<.45)?-1:0,g=l.length+f+h,I=Zi(r,m);return I===1?l.forEach(E=>{let T=E.rect.element.height+c;i+=T,t+=T*E.opacity}):(i=Math.ceil(g/I)*u,t=i),{visual:t,bounds:i}},zd=e=>{let t=e.ref.measureHeight||null;return{cappedHeight:parseInt(e.style.maxHeight,10)||null,fixedHeight:t===0?null:t}},aa=(e,t)=>{let i=e.query("GET_ALLOW_REPLACE"),a=e.query("GET_ALLOW_MULTIPLE"),n=e.query("GET_TOTAL_ITEMS"),o=e.query("GET_MAX_FILES"),l=t.length;return!a&&l>1?(e.dispatch("DID_THROW_MAX_FILES",{source:t,error:ie("warning",0,"Max files")}),!0):(o=a?o:1,!a&&i?!1:gt(o)&&n+l>o?(e.dispatch("DID_THROW_MAX_FILES",{source:t,error:ie("warning",0,"Max files")}),!0):!1)},Cd=(e,t,i)=>{let a=e.childViews[0];return Ki(a,t,{left:i.scopeLeft-a.rect.element.left,top:i.scopeTop-(e.rect.outer.top+e.rect.element.marginTop+e.rect.element.scrollTop)})},mn=e=>{let t=e.query("GET_ALLOW_DROP"),i=e.query("GET_DISABLED"),a=t&&!i;if(a&&!e.ref.hopper){let n=Id(e.element,o=>{let l=e.query("GET_BEFORE_DROP_FILE")||(()=>!0);return e.query("GET_DROP_VALIDATION")?o.every(s=>tt("ALLOW_HOPPER_ITEM",s,{query:e.query}).every(p=>p===!0)&&l(s)):!0},{filterItems:o=>{let l=e.query("GET_IGNORED_FILES");return o.filter(r=>Je(r)?!l.includes(r.name.toLowerCase()):!0)},catchesDropsOnPage:e.query("GET_DROP_ON_PAGE"),requiresDropOnElement:e.query("GET_DROP_ON_ELEMENT")});n.onload=(o,l)=>{let s=e.ref.list.childViews[0].childViews.filter(c=>c.rect.element.height),p=e.query("GET_ACTIVE_ITEMS").map(c=>s.find(d=>d.id===c.id)).filter(c=>c);Ae("ADD_ITEMS",o,{dispatch:e.dispatch}).then(c=>{if(aa(e,c))return!1;e.dispatch("ADD_ITEMS",{items:c,index:Cd(e.ref.list,p,l),interactionMethod:_e.DROP})}),e.dispatch("DID_DROP",{position:l}),e.dispatch("DID_END_DRAG",{position:l})},n.ondragstart=o=>{e.dispatch("DID_START_DRAG",{position:o})},n.ondrag=eo(o=>{e.dispatch("DID_DRAG",{position:o})}),n.ondragend=o=>{e.dispatch("DID_END_DRAG",{position:o})},e.ref.hopper=n,e.ref.drip=e.appendChildView(e.createChildView(Uc))}else!a&&e.ref.hopper&&(e.ref.hopper.destroy(),e.ref.hopper=null,e.removeChildView(e.ref.drip))},un=(e,t)=>{let i=e.query("GET_ALLOW_BROWSE"),a=e.query("GET_DISABLED"),n=i&&!a;n&&!e.ref.browser?e.ref.browser=e.appendChildView(e.createChildView(Pc,{...t,onload:o=>{Ae("ADD_ITEMS",o,{dispatch:e.dispatch}).then(l=>{if(aa(e,l))return!1;e.dispatch("ADD_ITEMS",{items:l,index:-1,interactionMethod:_e.BROWSE})})}}),0):!n&&e.ref.browser&&(e.removeChildView(e.ref.browser),e.ref.browser=null)},fn=e=>{let t=e.query("GET_ALLOW_PASTE"),i=e.query("GET_DISABLED"),a=t&&!i;a&&!e.ref.paster?(e.ref.paster=yd(),e.ref.paster.onload=n=>{Ae("ADD_ITEMS",n,{dispatch:e.dispatch}).then(o=>{if(aa(e,o))return!1;e.dispatch("ADD_ITEMS",{items:o,index:-1,interactionMethod:_e.PASTE})})}):!a&&e.ref.paster&&(e.ref.paster.destroy(),e.ref.paster=null)},Nd=he({DID_SET_ALLOW_BROWSE:({root:e,props:t})=>{un(e,t)},DID_SET_ALLOW_DROP:({root:e})=>{mn(e)},DID_SET_ALLOW_PASTE:({root:e})=>{fn(e)},DID_SET_DISABLED:({root:e,props:t})=>{mn(e),fn(e),un(e,t),e.query("GET_DISABLED")?e.element.dataset.disabled="disabled":e.element.removeAttribute("data-disabled")}}),Bd=oe({name:"root",read:({root:e})=>{e.ref.measure&&(e.ref.measureHeight=e.ref.measure.offsetHeight)},create:Od,write:Pd,destroy:({root:e})=>{e.ref.paster&&e.ref.paster.destroy(),e.ref.hopper&&e.ref.hopper.destroy(),e.element.removeEventListener("touchmove",ri),e.element.removeEventListener("gesturestart",ri)},mixins:{styles:["height"]}}),kd=(e={})=>{let t=null,i=oi(),a=ir(Gr(i),[os,Hr(i)],[Ms,Wr(i)]);a.dispatch("SET_OPTIONS",{options:e});let n=()=>{document.hidden||a.dispatch("KICK")};document.addEventListener("visibilitychange",n);let o=null,l=!1,r=!1,s=null,p=null,c=()=>{l||(l=!0),clearTimeout(o),o=setTimeout(()=>{l=!1,s=null,p=null,r&&(r=!1,a.dispatch("DID_STOP_RESIZE"))},500)};window.addEventListener("resize",c);let d=Bd(a,{id:qi()}),m=!1,u=!1,f={_read:()=>{l&&(p=window.innerWidth,s||(s=p),!r&&p!==s&&(a.dispatch("DID_START_RESIZE"),r=!0)),u&&m&&(m=d.element.offsetParent===null),!m&&(d._read(),u=d.rect.element.hidden)},_write:R=>{let L=a.processActionQueue().filter(z=>!/^SET_/.test(z.type));m&&!L.length||(E(L),m=d._write(R,L,r),Yr(a.query("GET_ITEMS")),m&&a.processDispatchQueue())}},h=R=>L=>{let z={type:R};if(!L)return z;if(L.hasOwnProperty("error")&&(z.error=L.error?{...L.error}:null),L.status&&(z.status={...L.status}),L.file&&(z.output=L.file),L.source)z.file=L.source;else if(L.item||L.id){let D=L.item?L.item:a.query("GET_ITEM",L.id);z.file=D?ge(D):null}return L.items&&(z.items=L.items.map(ge)),/progress/.test(R)&&(z.progress=L.progress),L.hasOwnProperty("origin")&&L.hasOwnProperty("target")&&(z.origin=L.origin,z.target=L.target),z},g={DID_DESTROY:h("destroy"),DID_INIT:h("init"),DID_THROW_MAX_FILES:h("warning"),DID_INIT_ITEM:h("initfile"),DID_START_ITEM_LOAD:h("addfilestart"),DID_UPDATE_ITEM_LOAD_PROGRESS:h("addfileprogress"),DID_LOAD_ITEM:h("addfile"),DID_THROW_ITEM_INVALID:[h("error"),h("addfile")],DID_THROW_ITEM_LOAD_ERROR:[h("error"),h("addfile")],DID_THROW_ITEM_REMOVE_ERROR:[h("error"),h("removefile")],DID_PREPARE_OUTPUT:h("preparefile"),DID_START_ITEM_PROCESSING:h("processfilestart"),DID_UPDATE_ITEM_PROCESS_PROGRESS:h("processfileprogress"),DID_ABORT_ITEM_PROCESSING:h("processfileabort"),DID_COMPLETE_ITEM_PROCESSING:h("processfile"),DID_COMPLETE_ITEM_PROCESSING_ALL:h("processfiles"),DID_REVERT_ITEM_PROCESSING:h("processfilerevert"),DID_THROW_ITEM_PROCESSING_ERROR:[h("error"),h("processfile")],DID_REMOVE_ITEM:h("removefile"),DID_UPDATE_ITEMS:h("updatefiles"),DID_ACTIVATE_ITEM:h("activatefile"),DID_REORDER_ITEMS:h("reorderfiles")},I=R=>{let L={pond:F,...R};delete L.type,d.element.dispatchEvent(new CustomEvent(`FilePond:${R.type}`,{detail:L,bubbles:!0,cancelable:!0,composed:!0}));let z=[];R.hasOwnProperty("error")&&z.push(R.error),R.hasOwnProperty("file")&&z.push(R.file);let D=["type","error","file"];Object.keys(R).filter(B=>!D.includes(B)).forEach(B=>z.push(R[B])),F.fire(R.type,...z);let k=a.query(`GET_ON${R.type.toUpperCase()}`);k&&k(...z)},E=R=>{R.length&&R.filter(L=>g[L.type]).forEach(L=>{let z=g[L.type];(Array.isArray(z)?z:[z]).forEach(D=>{L.type==="DID_INIT_ITEM"?I(D(L.data)):setTimeout(()=>{I(D(L.data))},0)})})},T=R=>a.dispatch("SET_OPTIONS",{options:R}),v=R=>a.query("GET_ACTIVE_ITEM",R),y=R=>new Promise((L,z)=>{a.dispatch("REQUEST_ITEM_PREPARE",{query:R,success:D=>{L(D)},failure:D=>{z(D)}})}),b=(R,L={})=>new Promise((z,D)=>{_([{source:R,options:L}],{index:L.index}).then(k=>z(k&&k[0])).catch(D)}),w=R=>R.file&&R.id,x=(R,L)=>(typeof R=="object"&&!w(R)&&!L&&(L=R,R=void 0),a.dispatch("REMOVE_ITEM",{...L,query:R}),a.query("GET_ACTIVE_ITEM",R)===null),_=(...R)=>new Promise((L,z)=>{let D=[],k={};if(si(R[0]))D.push.apply(D,R[0]),Object.assign(k,R[1]||{});else{let B=R[R.length-1];typeof B=="object"&&!(B instanceof Blob)&&Object.assign(k,R.pop()),D.push(...R)}a.dispatch("ADD_ITEMS",{items:D,index:k.index,interactionMethod:_e.API,success:L,failure:z})}),P=()=>a.query("GET_ACTIVE_ITEMS"),O=R=>new Promise((L,z)=>{a.dispatch("REQUEST_ITEM_PROCESSING",{query:R,success:D=>{L(D)},failure:D=>{z(D)}})}),M=(...R)=>{let L=Array.isArray(R[0])?R[0]:R,z=L.length?L:P();return Promise.all(z.map(y))},C=(...R)=>{let L=Array.isArray(R[0])?R[0]:R;if(!L.length){let z=P().filter(D=>!(D.status===W.IDLE&&D.origin===se.LOCAL)&&D.status!==W.PROCESSING&&D.status!==W.PROCESSING_COMPLETE&&D.status!==W.PROCESSING_REVERT_ERROR);return Promise.all(z.map(O))}return Promise.all(L.map(O))},S=(...R)=>{let L=Array.isArray(R[0])?R[0]:R,z;typeof L[L.length-1]=="object"?z=L.pop():Array.isArray(R[0])&&(z=R[1]);let D=P();return L.length?L.map(B=>$e(B)?D[B]?D[B].id:null:B).filter(B=>B).map(B=>x(B,z)):Promise.all(D.map(B=>x(B,z)))},F={...pi(),...f,...Ur(a,i),setOptions:T,addFile:b,addFiles:_,getFile:v,processFile:O,prepareFile:y,removeFile:x,moveFile:(R,L)=>a.dispatch("MOVE_ITEM",{query:R,index:L}),getFiles:P,processFiles:C,removeFiles:S,prepareFiles:M,sort:R=>a.dispatch("SORT",{compare:R}),browse:()=>{var R=d.element.querySelector("input[type=file]");R&&R.click()},destroy:()=>{F.fire("destroy",d.element),a.dispatch("ABORT_ALL"),d._destroy(),window.removeEventListener("resize",c),document.removeEventListener("visibilitychange",n),a.dispatch("DID_DESTROY")},insertBefore:R=>Ca(d.element,R),insertAfter:R=>Na(d.element,R),appendTo:R=>R.appendChild(d.element),replaceElement:R=>{Ca(d.element,R),R.parentNode.removeChild(R),t=R},restoreElement:()=>{t&&(Na(t,d.element),d.element.parentNode.removeChild(d.element),t=null)},isAttachedTo:R=>d.element===R||t===R,element:{get:()=>d.element},status:{get:()=>a.query("GET_STATUS")}};return a.dispatch("DID_INIT"),We(F)},to=(e={})=>{let t={};return te(oi(),(a,n)=>{t[a]=n[0]}),kd({...t,...e})},Vd=e=>e.charAt(0).toLowerCase()+e.slice(1),Gd=e=>Jn(e.replace(/^data-/,"")),io=(e,t)=>{te(t,(i,a)=>{te(e,(n,o)=>{let l=new RegExp(i);if(!l.test(n)||(delete e[n],a===!1))return;if(fe(a)){e[a]=o;return}let s=a.group;ce(a)&&!e[s]&&(e[s]={}),e[s][Vd(n.replace(l,""))]=o}),a.mapping&&io(e[a.group],a.mapping)})},Ud=(e,t={})=>{let i=[];te(e.attributes,n=>{i.push(e.attributes[n])});let a=i.filter(n=>n.name).reduce((n,o)=>{let l=ne(e,o.name);return n[Gd(o.name)]=l===o.name?!0:l,n},{});return io(a,t),a},Wd=(e,t={})=>{let i={"^class$":"className","^multiple$":"allowMultiple","^capture$":"captureMethod","^webkitdirectory$":"allowDirectoriesOnly","^server":{group:"server",mapping:{"^process":{group:"process"},"^revert":{group:"revert"},"^fetch":{group:"fetch"},"^restore":{group:"restore"},"^load":{group:"load"}}},"^type$":!1,"^files$":!1};tt("SET_ATTRIBUTE_TO_OPTION_MAP",i);let a={...t},n=Ud(e.nodeName==="FIELDSET"?e.querySelector("input[type=file]"):e,i);Object.keys(n).forEach(l=>{ce(n[l])?(ce(a[l])||(a[l]={}),Object.assign(a[l],n[l])):a[l]=n[l]}),a.files=(t.files||[]).concat(Array.from(e.querySelectorAll("input:not([type=file])")).map(l=>({source:l.value,options:{type:l.dataset.type}})));let o=to(a);return e.files&&Array.from(e.files).forEach(l=>{o.addFile(l)}),o.replaceElement(e),o},Hd=(...e)=>tr(e[0])?Wd(...e):to(...e),jd=["fire","_read","_write"],hn=e=>{let t={};return yn(e,t,jd),t},qd=(e,t)=>e.replace(/(?:{([a-zA-Z]+)})/g,(i,a)=>t[a]),Yd=e=>{let t=new Blob(["(",e.toString(),")()"],{type:"application/javascript"}),i=URL.createObjectURL(t),a=new Worker(i);return{transfer:(n,o)=>{},post:(n,o,l)=>{let r=qi();a.onmessage=s=>{s.data.id===r&&o(s.data.message)},a.postMessage({id:r,message:n},l)},terminate:()=>{a.terminate(),URL.revokeObjectURL(i)}}},$d=e=>new Promise((t,i)=>{let a=new Image;a.onload=()=>{t(a)},a.onerror=n=>{i(n)},a.src=e}),ao=(e,t)=>{let i=e.slice(0,e.size,e.type);return i.lastModifiedDate=e.lastModifiedDate,i.name=t,i},Xd=e=>ao(e,e.name),gn=[],Qd=e=>{if(gn.includes(e))return;gn.push(e);let t=e({addFilter:Xr,utils:{Type:A,forin:te,isString:fe,isFile:Je,toNaturalFileSize:Cn,replaceInString:qd,getExtensionFromFilename:mi,getFilenameWithoutExtension:Dn,guesstimateMimeType:Yn,getFileFromBlob:ht,getFilenameFromURL:Ft,createRoute:he,createWorker:Yd,createView:oe,createItemAPI:ge,loadImage:$d,copyFile:Xd,renameFile:ao,createBlob:Mn,applyFilterChain:Ae,text:ae,getNumericAspectRatioFromString:wn},views:{fileActionButton:zn}});Qr(t.options)},Zd=()=>Object.prototype.toString.call(window.operamini)==="[object OperaMini]",Kd=()=>"Promise"in window,Jd=()=>"slice"in Blob.prototype,ep=()=>"URL"in window&&"createObjectURL"in window.URL,tp=()=>"visibilityState"in document,ip=()=>"performance"in window,ap=()=>"supports"in(window.CSS||{}),np=()=>/MSIE|Trident/.test(window.navigator.userAgent),Vi=(()=>{let e=En()&&!Zd()&&tp()&&Kd()&&Jd()&&ep()&&ip()&&(ap()||np());return()=>e})(),Ue={apps:[]},op="filepond",it=()=>{},no={},Et={},zt={},Gi={},ut=it,ft=it,Ui=it,Wi=it,ve=it,Hi=it,Dt=it;if(Vi()){Sr(()=>{Ue.apps.forEach(i=>i._read())},i=>{Ue.apps.forEach(a=>a._write(i))});let e=()=>{document.dispatchEvent(new CustomEvent("FilePond:loaded",{detail:{supported:Vi,create:ut,destroy:ft,parse:Ui,find:Wi,registerPlugin:ve,setOptions:Dt}})),document.removeEventListener("DOMContentLoaded",e)};document.readyState!=="loading"?setTimeout(()=>e(),0):document.addEventListener("DOMContentLoaded",e);let t=()=>te(oi(),(i,a)=>{Gi[i]=a[1]});no={...Sn},zt={...se},Et={...W},Gi={},t(),ut=(...i)=>{let a=Hd(...i);return a.on("destroy",ft),Ue.apps.push(a),hn(a)},ft=i=>{let a=Ue.apps.findIndex(n=>n.isAttachedTo(i));return a>=0?(Ue.apps.splice(a,1)[0].restoreElement(),!0):!1},Ui=i=>Array.from(i.querySelectorAll(`.${op}`)).filter(o=>!Ue.apps.find(l=>l.isAttachedTo(o))).map(o=>ut(o)),Wi=i=>{let a=Ue.apps.find(n=>n.isAttachedTo(i));return a?hn(a):null},ve=(...i)=>{i.forEach(Qd),t()},Hi=()=>{let i={};return te(oi(),(a,n)=>{i[a]=n[0]}),i},Dt=i=>(ce(i)&&(Ue.apps.forEach(a=>{a.setOptions(i)}),Zr(i)),Hi())}function oo(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable})),i.push.apply(i,a)}return i}function xo(e){for(var t=1;te.length)&&(t=e.length);for(var i=0,a=new Array(t);i
',yp=Number.isNaN||Fe.isNaN;function j(e){return typeof e=="number"&&!yp(e)}var To=function(t){return t>0&&t<1/0};function oa(e){return typeof e>"u"}function ot(e){return ra(e)==="object"&&e!==null}var _p=Object.prototype.hasOwnProperty;function Tt(e){if(!ot(e))return!1;try{var t=e.constructor,i=t.prototype;return t&&i&&_p.call(i,"isPrototypeOf")}catch{return!1}}function Ee(e){return typeof e=="function"}var Rp=Array.prototype.slice;function Po(e){return Array.from?Array.from(e):Rp.call(e)}function le(e,t){return e&&Ee(t)&&(Array.isArray(e)||j(e.length)?Po(e).forEach(function(i,a){t.call(e,i,a,e)}):ot(e)&&Object.keys(e).forEach(function(i){t.call(e,e[i],i,e)})),e}var J=Object.assign||function(t){for(var i=arguments.length,a=new Array(i>1?i-1:0),n=1;n0&&a.forEach(function(o){ot(o)&&Object.keys(o).forEach(function(l){t[l]=o[l]})}),t},wp=/\.\d*(?:0|9){12}\d*$/;function vt(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1e11;return wp.test(e)?Math.round(e*t)/t:e}var Sp=/^width|height|left|top|marginLeft|marginTop$/;function je(e,t){var i=e.style;le(t,function(a,n){Sp.test(n)&&j(a)&&(a="".concat(a,"px")),i[n]=a})}function Lp(e,t){return e.classList?e.classList.contains(t):e.className.indexOf(t)>-1}function de(e,t){if(t){if(j(e.length)){le(e,function(a){de(a,t)});return}if(e.classList){e.classList.add(t);return}var i=e.className.trim();i?i.indexOf(t)<0&&(e.className="".concat(i," ").concat(t)):e.className=t}}function De(e,t){if(t){if(j(e.length)){le(e,function(i){De(i,t)});return}if(e.classList){e.classList.remove(t);return}e.className.indexOf(t)>=0&&(e.className=e.className.replace(t,""))}}function It(e,t,i){if(t){if(j(e.length)){le(e,function(a){It(a,t,i)});return}i?de(e,t):De(e,t)}}var Ap=/([a-z\d])([A-Z])/g;function va(e){return e.replace(Ap,"$1-$2").toLowerCase()}function ga(e,t){return ot(e[t])?e[t]:e.dataset?e.dataset[t]:e.getAttribute("data-".concat(va(t)))}function Ut(e,t,i){ot(i)?e[t]=i:e.dataset?e.dataset[t]=i:e.setAttribute("data-".concat(va(t)),i)}function Mp(e,t){if(ot(e[t]))try{delete e[t]}catch{e[t]=void 0}else if(e.dataset)try{delete e.dataset[t]}catch{e.dataset[t]=void 0}else e.removeAttribute("data-".concat(va(t)))}var Do=/\s\s*/,Fo=function(){var e=!1;if(bi){var t=!1,i=function(){},a=Object.defineProperty({},"once",{get:function(){return e=!0,t},set:function(o){t=o}});Fe.addEventListener("test",i,a),Fe.removeEventListener("test",i,a)}return e}();function Pe(e,t,i){var a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},n=i;t.trim().split(Do).forEach(function(o){if(!Fo){var l=e.listeners;l&&l[o]&&l[o][i]&&(n=l[o][i],delete l[o][i],Object.keys(l[o]).length===0&&delete l[o],Object.keys(l).length===0&&delete e.listeners)}e.removeEventListener(o,n,a)})}function Re(e,t,i){var a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},n=i;t.trim().split(Do).forEach(function(o){if(a.once&&!Fo){var l=e.listeners,r=l===void 0?{}:l;n=function(){delete r[o][i],e.removeEventListener(o,n,a);for(var p=arguments.length,c=new Array(p),d=0;dMath.abs(i)&&(i=m)})}),i}function gi(e,t){var i=e.pageX,a=e.pageY,n={endX:i,endY:a};return t?n:xo({startX:i,startY:a},n)}function Dp(e){var t=0,i=0,a=0;return le(e,function(n){var o=n.startX,l=n.startY;t+=o,i+=l,a+=1}),t/=a,i/=a,{pageX:t,pageY:i}}function qe(e){var t=e.aspectRatio,i=e.height,a=e.width,n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"contain",o=To(a),l=To(i);if(o&&l){var r=i*t;n==="contain"&&r>a||n==="cover"&&r90?{width:s,height:r}:{width:r,height:s}}function zp(e,t,i,a){var n=t.aspectRatio,o=t.naturalWidth,l=t.naturalHeight,r=t.rotate,s=r===void 0?0:r,p=t.scaleX,c=p===void 0?1:p,d=t.scaleY,m=d===void 0?1:d,u=i.aspectRatio,f=i.naturalWidth,h=i.naturalHeight,g=a.fillColor,I=g===void 0?"transparent":g,E=a.imageSmoothingEnabled,T=E===void 0?!0:E,v=a.imageSmoothingQuality,y=v===void 0?"low":v,b=a.maxWidth,w=b===void 0?1/0:b,x=a.maxHeight,_=x===void 0?1/0:x,P=a.minWidth,O=P===void 0?0:P,M=a.minHeight,C=M===void 0?0:M,S=document.createElement("canvas"),F=S.getContext("2d"),R=qe({aspectRatio:u,width:w,height:_}),L=qe({aspectRatio:u,width:O,height:C},"cover"),z=Math.min(R.width,Math.max(L.width,f)),D=Math.min(R.height,Math.max(L.height,h)),k=qe({aspectRatio:n,width:w,height:_}),B=qe({aspectRatio:n,width:O,height:C},"cover"),X=Math.min(k.width,Math.max(B.width,o)),Y=Math.min(k.height,Math.max(B.height,l)),Q=[-X/2,-Y/2,X,Y];return S.width=vt(z),S.height=vt(D),F.fillStyle=I,F.fillRect(0,0,z,D),F.save(),F.translate(z/2,D/2),F.rotate(s*Math.PI/180),F.scale(c,m),F.imageSmoothingEnabled=T,F.imageSmoothingQuality=y,F.drawImage.apply(F,[e].concat(_o(Q.map(function(pe){return Math.floor(vt(pe))})))),F.restore(),S}var Co=String.fromCharCode;function Cp(e,t,i){var a="";i+=t;for(var n=t;n0;)i.push(Co.apply(null,Po(n.subarray(0,a)))),n=n.subarray(a);return"data:".concat(t,";base64,").concat(btoa(i.join("")))}function Vp(e){var t=new DataView(e),i;try{var a,n,o;if(t.getUint8(0)===255&&t.getUint8(1)===216)for(var l=t.byteLength,r=2;r+1=8&&(o=p+d)}}}if(o){var m=t.getUint16(o,a),u,f;for(f=0;f=0?o:Mo),height:Math.max(a.offsetHeight,l>=0?l:Oo)};this.containerData=r,je(n,{width:r.width,height:r.height}),de(t,be),De(n,be)},initCanvas:function(){var t=this.containerData,i=this.imageData,a=this.options.viewMode,n=Math.abs(i.rotate)%180===90,o=n?i.naturalHeight:i.naturalWidth,l=n?i.naturalWidth:i.naturalHeight,r=o/l,s=t.width,p=t.height;t.height*r>t.width?a===3?s=t.height*r:p=t.width/r:a===3?p=t.width/r:s=t.height*r;var c={aspectRatio:r,naturalWidth:o,naturalHeight:l,width:s,height:p};this.canvasData=c,this.limited=a===1||a===2,this.limitCanvas(!0,!0),c.width=Math.min(Math.max(c.width,c.minWidth),c.maxWidth),c.height=Math.min(Math.max(c.height,c.minHeight),c.maxHeight),c.left=(t.width-c.width)/2,c.top=(t.height-c.height)/2,c.oldLeft=c.left,c.oldTop=c.top,this.initialCanvasData=J({},c)},limitCanvas:function(t,i){var a=this.options,n=this.containerData,o=this.canvasData,l=this.cropBoxData,r=a.viewMode,s=o.aspectRatio,p=this.cropped&&l;if(t){var c=Number(a.minCanvasWidth)||0,d=Number(a.minCanvasHeight)||0;r>1?(c=Math.max(c,n.width),d=Math.max(d,n.height),r===3&&(d*s>c?c=d*s:d=c/s)):r>0&&(c?c=Math.max(c,p?l.width:0):d?d=Math.max(d,p?l.height:0):p&&(c=l.width,d=l.height,d*s>c?c=d*s:d=c/s));var m=qe({aspectRatio:s,width:c,height:d});c=m.width,d=m.height,o.minWidth=c,o.minHeight=d,o.maxWidth=1/0,o.maxHeight=1/0}if(i)if(r>(p?0:1)){var u=n.width-o.width,f=n.height-o.height;o.minLeft=Math.min(0,u),o.minTop=Math.min(0,f),o.maxLeft=Math.max(0,u),o.maxTop=Math.max(0,f),p&&this.limited&&(o.minLeft=Math.min(l.left,l.left+(l.width-o.width)),o.minTop=Math.min(l.top,l.top+(l.height-o.height)),o.maxLeft=l.left,o.maxTop=l.top,r===2&&(o.width>=n.width&&(o.minLeft=Math.min(0,u),o.maxLeft=Math.max(0,u)),o.height>=n.height&&(o.minTop=Math.min(0,f),o.maxTop=Math.max(0,f))))}else o.minLeft=-o.width,o.minTop=-o.height,o.maxLeft=n.width,o.maxTop=n.height},renderCanvas:function(t,i){var a=this.canvasData,n=this.imageData;if(i){var o=Fp({width:n.naturalWidth*Math.abs(n.scaleX||1),height:n.naturalHeight*Math.abs(n.scaleY||1),degree:n.rotate||0}),l=o.width,r=o.height,s=a.width*(l/a.naturalWidth),p=a.height*(r/a.naturalHeight);a.left-=(s-a.width)/2,a.top-=(p-a.height)/2,a.width=s,a.height=p,a.aspectRatio=l/r,a.naturalWidth=l,a.naturalHeight=r,this.limitCanvas(!0,!1)}(a.width>a.maxWidth||a.widtha.maxHeight||a.heighti.width?o.height=o.width/a:o.width=o.height*a),this.cropBoxData=o,this.limitCropBox(!0,!0),o.width=Math.min(Math.max(o.width,o.minWidth),o.maxWidth),o.height=Math.min(Math.max(o.height,o.minHeight),o.maxHeight),o.width=Math.max(o.minWidth,o.width*n),o.height=Math.max(o.minHeight,o.height*n),o.left=i.left+(i.width-o.width)/2,o.top=i.top+(i.height-o.height)/2,o.oldLeft=o.left,o.oldTop=o.top,this.initialCropBoxData=J({},o)},limitCropBox:function(t,i){var a=this.options,n=this.containerData,o=this.canvasData,l=this.cropBoxData,r=this.limited,s=a.aspectRatio;if(t){var p=Number(a.minCropBoxWidth)||0,c=Number(a.minCropBoxHeight)||0,d=r?Math.min(n.width,o.width,o.width+o.left,n.width-o.left):n.width,m=r?Math.min(n.height,o.height,o.height+o.top,n.height-o.top):n.height;p=Math.min(p,n.width),c=Math.min(c,n.height),s&&(p&&c?c*s>p?c=p/s:p=c*s:p?c=p/s:c&&(p=c*s),m*s>d?m=d/s:d=m*s),l.minWidth=Math.min(p,d),l.minHeight=Math.min(c,m),l.maxWidth=d,l.maxHeight=m}i&&(r?(l.minLeft=Math.max(0,o.left),l.minTop=Math.max(0,o.top),l.maxLeft=Math.min(n.width,o.left+o.width)-l.width,l.maxTop=Math.min(n.height,o.top+o.height)-l.height):(l.minLeft=0,l.minTop=0,l.maxLeft=n.width-l.width,l.maxTop=n.height-l.height))},renderCropBox:function(){var t=this.options,i=this.containerData,a=this.cropBoxData;(a.width>a.maxWidth||a.widtha.maxHeight||a.height=i.width&&a.height>=i.height?wo:Ta),je(this.cropBox,J({width:a.width,height:a.height},Vt({translateX:a.left,translateY:a.top}))),this.cropped&&this.limited&&this.limitCanvas(!0,!0),this.disabled||this.output()},output:function(){this.preview(),xt(this.element,pa,this.getData())}},Wp={initPreview:function(){var t=this.element,i=this.crossOrigin,a=this.options.preview,n=i?this.crossOriginUrl:this.url,o=t.alt||"The image to preview",l=document.createElement("img");if(i&&(l.crossOrigin=i),l.src=n,l.alt=o,this.viewBox.appendChild(l),this.viewBoxImage=l,!!a){var r=a;typeof a=="string"?r=t.ownerDocument.querySelectorAll(a):a.querySelector&&(r=[a]),this.previews=r,le(r,function(s){var p=document.createElement("img");Ut(s,hi,{width:s.offsetWidth,height:s.offsetHeight,html:s.innerHTML}),i&&(p.crossOrigin=i),p.src=n,p.alt=o,p.style.cssText='display:block;width:100%;height:auto;min-width:0!important;min-height:0!important;max-width:none!important;max-height:none!important;image-orientation:0deg!important;"',s.innerHTML="",s.appendChild(p)})}},resetPreview:function(){le(this.previews,function(t){var i=ga(t,hi);je(t,{width:i.width,height:i.height}),t.innerHTML=i.html,Mp(t,hi)})},preview:function(){var t=this.imageData,i=this.canvasData,a=this.cropBoxData,n=a.width,o=a.height,l=t.width,r=t.height,s=a.left-i.left-t.left,p=a.top-i.top-t.top;!this.cropped||this.disabled||(je(this.viewBoxImage,J({width:l,height:r},Vt(J({translateX:-s,translateY:-p},t)))),le(this.previews,function(c){var d=ga(c,hi),m=d.width,u=d.height,f=m,h=u,g=1;n&&(g=m/n,h=o*g),o&&h>u&&(g=u/o,f=n*g,h=u),je(c,{width:f,height:h}),je(c.getElementsByTagName("img")[0],J({width:l*g,height:r*g},Vt(J({translateX:-s*g,translateY:-p*g},t))))}))}},Hp={bind:function(){var t=this.element,i=this.options,a=this.cropper;Ee(i.cropstart)&&Re(t,fa,i.cropstart),Ee(i.cropmove)&&Re(t,ua,i.cropmove),Ee(i.cropend)&&Re(t,ma,i.cropend),Ee(i.crop)&&Re(t,pa,i.crop),Ee(i.zoom)&&Re(t,ha,i.zoom),Re(a,po,this.onCropStart=this.cropStart.bind(this)),i.zoomable&&i.zoomOnWheel&&Re(a,go,this.onWheel=this.wheel.bind(this),{passive:!1,capture:!0}),i.toggleDragModeOnDblclick&&Re(a,co,this.onDblclick=this.dblclick.bind(this)),Re(t.ownerDocument,mo,this.onCropMove=this.cropMove.bind(this)),Re(t.ownerDocument,uo,this.onCropEnd=this.cropEnd.bind(this)),i.responsive&&Re(window,ho,this.onResize=this.resize.bind(this))},unbind:function(){var t=this.element,i=this.options,a=this.cropper;Ee(i.cropstart)&&Pe(t,fa,i.cropstart),Ee(i.cropmove)&&Pe(t,ua,i.cropmove),Ee(i.cropend)&&Pe(t,ma,i.cropend),Ee(i.crop)&&Pe(t,pa,i.crop),Ee(i.zoom)&&Pe(t,ha,i.zoom),Pe(a,po,this.onCropStart),i.zoomable&&i.zoomOnWheel&&Pe(a,go,this.onWheel,{passive:!1,capture:!0}),i.toggleDragModeOnDblclick&&Pe(a,co,this.onDblclick),Pe(t.ownerDocument,mo,this.onCropMove),Pe(t.ownerDocument,uo,this.onCropEnd),i.responsive&&Pe(window,ho,this.onResize)}},jp={resize:function(){if(!this.disabled){var t=this.options,i=this.container,a=this.containerData,n=i.offsetWidth/a.width,o=i.offsetHeight/a.height,l=Math.abs(n-1)>Math.abs(o-1)?n:o;if(l!==1){var r,s;t.restore&&(r=this.getCanvasData(),s=this.getCropBoxData()),this.render(),t.restore&&(this.setCanvasData(le(r,function(p,c){r[c]=p*l})),this.setCropBoxData(le(s,function(p,c){s[c]=p*l})))}}},dblclick:function(){this.disabled||this.options.dragMode===Ao||this.setDragMode(Lp(this.dragBox,ca)?Lo:Ia)},wheel:function(t){var i=this,a=Number(this.options.wheelZoomRatio)||.1,n=1;this.disabled||(t.preventDefault(),!this.wheeling&&(this.wheeling=!0,setTimeout(function(){i.wheeling=!1},50),t.deltaY?n=t.deltaY>0?1:-1:t.wheelDelta?n=-t.wheelDelta/120:t.detail&&(n=t.detail>0?1:-1),this.zoom(-n*a,t)))},cropStart:function(t){var i=t.buttons,a=t.button;if(!(this.disabled||(t.type==="mousedown"||t.type==="pointerdown"&&t.pointerType==="mouse")&&(j(i)&&i!==1||j(a)&&a!==0||t.ctrlKey))){var n=this.options,o=this.pointers,l;t.changedTouches?le(t.changedTouches,function(r){o[r.identifier]=gi(r)}):o[t.pointerId||0]=gi(t),Object.keys(o).length>1&&n.zoomable&&n.zoomOnTouch?l=So:l=ga(t.target,Gt),bp.test(l)&&xt(this.element,fa,{originalEvent:t,action:l})!==!1&&(t.preventDefault(),this.action=l,this.cropping=!1,l===Ro&&(this.cropping=!0,de(this.dragBox,Ei)))}},cropMove:function(t){var i=this.action;if(!(this.disabled||!i)){var a=this.pointers;t.preventDefault(),xt(this.element,ua,{originalEvent:t,action:i})!==!1&&(t.changedTouches?le(t.changedTouches,function(n){J(a[n.identifier]||{},gi(n,!0))}):J(a[t.pointerId||0]||{},gi(t,!0)),this.change(t))}},cropEnd:function(t){if(!this.disabled){var i=this.action,a=this.pointers;t.changedTouches?le(t.changedTouches,function(n){delete a[n.identifier]}):delete a[t.pointerId||0],i&&(t.preventDefault(),Object.keys(a).length||(this.action=""),this.cropping&&(this.cropping=!1,It(this.dragBox,Ei,this.cropped&&this.options.modal)),xt(this.element,ma,{originalEvent:t,action:i}))}}},qp={change:function(t){var i=this.options,a=this.canvasData,n=this.containerData,o=this.cropBoxData,l=this.pointers,r=this.action,s=i.aspectRatio,p=o.left,c=o.top,d=o.width,m=o.height,u=p+d,f=c+m,h=0,g=0,I=n.width,E=n.height,T=!0,v;!s&&t.shiftKey&&(s=d&&m?d/m:1),this.limited&&(h=o.minLeft,g=o.minTop,I=h+Math.min(n.width,a.width,a.left+a.width),E=g+Math.min(n.height,a.height,a.top+a.height));var y=l[Object.keys(l)[0]],b={x:y.endX-y.startX,y:y.endY-y.startY},w=function(_){switch(_){case at:u+b.x>I&&(b.x=I-u);break;case nt:p+b.xE&&(b.y=E-f);break}};switch(r){case Ta:p+=b.x,c+=b.y;break;case at:if(b.x>=0&&(u>=I||s&&(c<=g||f>=E))){T=!1;break}w(at),d+=b.x,d<0&&(r=nt,d=-d,p-=d),s&&(m=d/s,c+=(o.height-m)/2);break;case He:if(b.y<=0&&(c<=g||s&&(p<=h||u>=I))){T=!1;break}w(He),m-=b.y,c+=b.y,m<0&&(r=bt,m=-m,c-=m),s&&(d=m*s,p+=(o.width-d)/2);break;case nt:if(b.x<=0&&(p<=h||s&&(c<=g||f>=E))){T=!1;break}w(nt),d-=b.x,p+=b.x,d<0&&(r=at,d=-d,p-=d),s&&(m=d/s,c+=(o.height-m)/2);break;case bt:if(b.y>=0&&(f>=E||s&&(p<=h||u>=I))){T=!1;break}w(bt),m+=b.y,m<0&&(r=He,m=-m,c-=m),s&&(d=m*s,p+=(o.width-d)/2);break;case Ct:if(s){if(b.y<=0&&(c<=g||u>=I)){T=!1;break}w(He),m-=b.y,c+=b.y,d=m*s}else w(He),w(at),b.x>=0?ug&&(m-=b.y,c+=b.y):(m-=b.y,c+=b.y);d<0&&m<0?(r=kt,m=-m,d=-d,c-=m,p-=d):d<0?(r=Nt,d=-d,p-=d):m<0&&(r=Bt,m=-m,c-=m);break;case Nt:if(s){if(b.y<=0&&(c<=g||p<=h)){T=!1;break}w(He),m-=b.y,c+=b.y,d=m*s,p+=o.width-d}else w(He),w(nt),b.x<=0?p>h?(d-=b.x,p+=b.x):b.y<=0&&c<=g&&(T=!1):(d-=b.x,p+=b.x),b.y<=0?c>g&&(m-=b.y,c+=b.y):(m-=b.y,c+=b.y);d<0&&m<0?(r=Bt,m=-m,d=-d,c-=m,p-=d):d<0?(r=Ct,d=-d,p-=d):m<0&&(r=kt,m=-m,c-=m);break;case kt:if(s){if(b.x<=0&&(p<=h||f>=E)){T=!1;break}w(nt),d-=b.x,p+=b.x,m=d/s}else w(bt),w(nt),b.x<=0?p>h?(d-=b.x,p+=b.x):b.y>=0&&f>=E&&(T=!1):(d-=b.x,p+=b.x),b.y>=0?f=0&&(u>=I||f>=E)){T=!1;break}w(at),d+=b.x,m=d/s}else w(bt),w(at),b.x>=0?u=0&&f>=E&&(T=!1):d+=b.x,b.y>=0?f0?r=b.y>0?Bt:Ct:b.x<0&&(p-=d,r=b.y>0?kt:Nt),b.y<0&&(c-=m),this.cropped||(De(this.cropBox,be),this.cropped=!0,this.limited&&this.limitCropBox(!0,!0));break}T&&(o.width=d,o.height=m,o.left=p,o.top=c,this.action=r,this.renderCropBox()),le(l,function(x){x.startX=x.endX,x.startY=x.endY})}},Yp={crop:function(){return this.ready&&!this.cropped&&!this.disabled&&(this.cropped=!0,this.limitCropBox(!0,!0),this.options.modal&&de(this.dragBox,Ei),De(this.cropBox,be),this.setCropBoxData(this.initialCropBoxData)),this},reset:function(){return this.ready&&!this.disabled&&(this.imageData=J({},this.initialImageData),this.canvasData=J({},this.initialCanvasData),this.cropBoxData=J({},this.initialCropBoxData),this.renderCanvas(),this.cropped&&this.renderCropBox()),this},clear:function(){return this.cropped&&!this.disabled&&(J(this.cropBoxData,{left:0,top:0,width:0,height:0}),this.cropped=!1,this.renderCropBox(),this.limitCanvas(!0,!0),this.renderCanvas(),De(this.dragBox,Ei),de(this.cropBox,be)),this},replace:function(t){var i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;return!this.disabled&&t&&(this.isImg&&(this.element.src=t),i?(this.url=t,this.image.src=t,this.ready&&(this.viewBoxImage.src=t,le(this.previews,function(a){a.getElementsByTagName("img")[0].src=t}))):(this.isImg&&(this.replaced=!0),this.options.data=null,this.uncreate(),this.load(t))),this},enable:function(){return this.ready&&this.disabled&&(this.disabled=!1,De(this.cropper,ro)),this},disable:function(){return this.ready&&!this.disabled&&(this.disabled=!0,de(this.cropper,ro)),this},destroy:function(){var t=this.element;return t[K]?(t[K]=void 0,this.isImg&&this.replaced&&(t.src=this.originalUrl),this.uncreate(),this):this},move:function(t){var i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:t,a=this.canvasData,n=a.left,o=a.top;return this.moveTo(oa(t)?t:n+Number(t),oa(i)?i:o+Number(i))},moveTo:function(t){var i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:t,a=this.canvasData,n=!1;return t=Number(t),i=Number(i),this.ready&&!this.disabled&&this.options.movable&&(j(t)&&(a.left=t,n=!0),j(i)&&(a.top=i,n=!0),n&&this.renderCanvas(!0)),this},zoom:function(t,i){var a=this.canvasData;return t=Number(t),t<0?t=1/(1-t):t=1+t,this.zoomTo(a.width*t/a.naturalWidth,null,i)},zoomTo:function(t,i,a){var n=this.options,o=this.canvasData,l=o.width,r=o.height,s=o.naturalWidth,p=o.naturalHeight;if(t=Number(t),t>=0&&this.ready&&!this.disabled&&n.zoomable){var c=s*t,d=p*t;if(xt(this.element,ha,{ratio:t,oldRatio:l/s,originalEvent:a})===!1)return this;if(a){var m=this.pointers,u=zo(this.cropper),f=m&&Object.keys(m).length?Dp(m):{pageX:a.pageX,pageY:a.pageY};o.left-=(c-l)*((f.pageX-u.left-o.left)/l),o.top-=(d-r)*((f.pageY-u.top-o.top)/r)}else Tt(i)&&j(i.x)&&j(i.y)?(o.left-=(c-l)*((i.x-o.left)/l),o.top-=(d-r)*((i.y-o.top)/r)):(o.left-=(c-l)/2,o.top-=(d-r)/2);o.width=c,o.height=d,this.renderCanvas(!0)}return this},rotate:function(t){return this.rotateTo((this.imageData.rotate||0)+Number(t))},rotateTo:function(t){return t=Number(t),j(t)&&this.ready&&!this.disabled&&this.options.rotatable&&(this.imageData.rotate=t%360,this.renderCanvas(!0,!0)),this},scaleX:function(t){var i=this.imageData.scaleY;return this.scale(t,j(i)?i:1)},scaleY:function(t){var i=this.imageData.scaleX;return this.scale(j(i)?i:1,t)},scale:function(t){var i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:t,a=this.imageData,n=!1;return t=Number(t),i=Number(i),this.ready&&!this.disabled&&this.options.scalable&&(j(t)&&(a.scaleX=t,n=!0),j(i)&&(a.scaleY=i,n=!0),n&&this.renderCanvas(!0,!0)),this},getData:function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,i=this.options,a=this.imageData,n=this.canvasData,o=this.cropBoxData,l;if(this.ready&&this.cropped){l={x:o.left-n.left,y:o.top-n.top,width:o.width,height:o.height};var r=a.width/a.naturalWidth;if(le(l,function(c,d){l[d]=c/r}),t){var s=Math.round(l.y+l.height),p=Math.round(l.x+l.width);l.x=Math.round(l.x),l.y=Math.round(l.y),l.width=p-l.x,l.height=s-l.y}}else l={x:0,y:0,width:0,height:0};return i.rotatable&&(l.rotate=a.rotate||0),i.scalable&&(l.scaleX=a.scaleX||1,l.scaleY=a.scaleY||1),l},setData:function(t){var i=this.options,a=this.imageData,n=this.canvasData,o={};if(this.ready&&!this.disabled&&Tt(t)){var l=!1;i.rotatable&&j(t.rotate)&&t.rotate!==a.rotate&&(a.rotate=t.rotate,l=!0),i.scalable&&(j(t.scaleX)&&t.scaleX!==a.scaleX&&(a.scaleX=t.scaleX,l=!0),j(t.scaleY)&&t.scaleY!==a.scaleY&&(a.scaleY=t.scaleY,l=!0)),l&&this.renderCanvas(!0,!0);var r=a.width/a.naturalWidth;j(t.x)&&(o.left=t.x*r+n.left),j(t.y)&&(o.top=t.y*r+n.top),j(t.width)&&(o.width=t.width*r),j(t.height)&&(o.height=t.height*r),this.setCropBoxData(o)}return this},getContainerData:function(){return this.ready?J({},this.containerData):{}},getImageData:function(){return this.sized?J({},this.imageData):{}},getCanvasData:function(){var t=this.canvasData,i={};return this.ready&&le(["left","top","width","height","naturalWidth","naturalHeight"],function(a){i[a]=t[a]}),i},setCanvasData:function(t){var i=this.canvasData,a=i.aspectRatio;return this.ready&&!this.disabled&&Tt(t)&&(j(t.left)&&(i.left=t.left),j(t.top)&&(i.top=t.top),j(t.width)?(i.width=t.width,i.height=t.width/a):j(t.height)&&(i.height=t.height,i.width=t.height*a),this.renderCanvas(!0)),this},getCropBoxData:function(){var t=this.cropBoxData,i;return this.ready&&this.cropped&&(i={left:t.left,top:t.top,width:t.width,height:t.height}),i||{}},setCropBoxData:function(t){var i=this.cropBoxData,a=this.options.aspectRatio,n,o;return this.ready&&this.cropped&&!this.disabled&&Tt(t)&&(j(t.left)&&(i.left=t.left),j(t.top)&&(i.top=t.top),j(t.width)&&t.width!==i.width&&(n=!0,i.width=t.width),j(t.height)&&t.height!==i.height&&(o=!0,i.height=t.height),a&&(n?i.height=i.width/a:o&&(i.width=i.height*a)),this.renderCropBox()),this},getCroppedCanvas:function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!this.ready||!window.HTMLCanvasElement)return null;var i=this.canvasData,a=zp(this.image,this.imageData,i,t);if(!this.cropped)return a;var n=this.getData(t.rounded),o=n.x,l=n.y,r=n.width,s=n.height,p=a.width/Math.floor(i.naturalWidth);p!==1&&(o*=p,l*=p,r*=p,s*=p);var c=r/s,d=qe({aspectRatio:c,width:t.maxWidth||1/0,height:t.maxHeight||1/0}),m=qe({aspectRatio:c,width:t.minWidth||0,height:t.minHeight||0},"cover"),u=qe({aspectRatio:c,width:t.width||(p!==1?a.width:r),height:t.height||(p!==1?a.height:s)}),f=u.width,h=u.height;f=Math.min(d.width,Math.max(m.width,f)),h=Math.min(d.height,Math.max(m.height,h));var g=document.createElement("canvas"),I=g.getContext("2d");g.width=vt(f),g.height=vt(h),I.fillStyle=t.fillColor||"transparent",I.fillRect(0,0,f,h);var E=t.imageSmoothingEnabled,T=E===void 0?!0:E,v=t.imageSmoothingQuality;I.imageSmoothingEnabled=T,v&&(I.imageSmoothingQuality=v);var y=a.width,b=a.height,w=o,x=l,_,P,O,M,C,S;w<=-r||w>y?(w=0,_=0,O=0,C=0):w<=0?(O=-w,w=0,_=Math.min(y,r+w),C=_):w<=y&&(O=0,_=Math.min(r,y-w),C=_),_<=0||x<=-s||x>b?(x=0,P=0,M=0,S=0):x<=0?(M=-x,x=0,P=Math.min(b,s+x),S=P):x<=b&&(M=0,P=Math.min(s,b-x),S=P);var F=[w,x,_,P];if(C>0&&S>0){var R=f/r;F.push(O*R,M*R,C*R,S*R)}return I.drawImage.apply(I,[a].concat(_o(F.map(function(L){return Math.floor(vt(L))})))),g},setAspectRatio:function(t){var i=this.options;return!this.disabled&&!oa(t)&&(i.aspectRatio=Math.max(0,t)||NaN,this.ready&&(this.initCropBox(),this.cropped&&this.renderCropBox())),this},setDragMode:function(t){var i=this.options,a=this.dragBox,n=this.face;if(this.ready&&!this.disabled){var o=t===Ia,l=i.movable&&t===Lo;t=o||l?t:Ao,i.dragMode=t,Ut(a,Gt,t),It(a,ca,o),It(a,da,l),i.cropBoxMovable||(Ut(n,Gt,t),It(n,ca,o),It(n,da,l))}return this}},$p=Fe.Cropper,xa=function(){function e(t){var i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(rp(this,e),!t||!vp.test(t.tagName))throw new Error("The first argument is required and must be an or element.");this.element=t,this.options=J({},bo,Tt(i)&&i),this.cropped=!1,this.disabled=!1,this.pointers={},this.ready=!1,this.reloading=!1,this.replaced=!1,this.sized=!1,this.sizing=!1,this.init()}return sp(e,[{key:"init",value:function(){var i=this.element,a=i.tagName.toLowerCase(),n;if(!i[K]){if(i[K]=this,a==="img"){if(this.isImg=!0,n=i.getAttribute("src")||"",this.originalUrl=n,!n)return;n=i.src}else a==="canvas"&&window.HTMLCanvasElement&&(n=i.toDataURL());this.load(n)}}},{key:"load",value:function(i){var a=this;if(i){this.url=i,this.imageData={};var n=this.element,o=this.options;if(!o.rotatable&&!o.scalable&&(o.checkOrientation=!1),!o.checkOrientation||!window.ArrayBuffer){this.clone();return}if(Tp.test(i)){Ip.test(i)?this.read(Bp(i)):this.clone();return}var l=new XMLHttpRequest,r=this.clone.bind(this);this.reloading=!0,this.xhr=l,l.onabort=r,l.onerror=r,l.ontimeout=r,l.onprogress=function(){l.getResponseHeader("content-type")!==Eo&&l.abort()},l.onload=function(){a.read(l.response)},l.onloadend=function(){a.reloading=!1,a.xhr=null},o.checkCrossOrigin&&Io(i)&&n.crossOrigin&&(i=vo(i)),l.open("GET",i,!0),l.responseType="arraybuffer",l.withCredentials=n.crossOrigin==="use-credentials",l.send()}}},{key:"read",value:function(i){var a=this.options,n=this.imageData,o=Vp(i),l=0,r=1,s=1;if(o>1){this.url=kp(i,Eo);var p=Gp(o);l=p.rotate,r=p.scaleX,s=p.scaleY}a.rotatable&&(n.rotate=l),a.scalable&&(n.scaleX=r,n.scaleY=s),this.clone()}},{key:"clone",value:function(){var i=this.element,a=this.url,n=i.crossOrigin,o=a;this.options.checkCrossOrigin&&Io(a)&&(n||(n="anonymous"),o=vo(a)),this.crossOrigin=n,this.crossOriginUrl=o;var l=document.createElement("img");n&&(l.crossOrigin=n),l.src=o||a,l.alt=i.alt||"The image to crop",this.image=l,l.onload=this.start.bind(this),l.onerror=this.stop.bind(this),de(l,so),i.parentNode.insertBefore(l,i.nextSibling)}},{key:"start",value:function(){var i=this,a=this.image;a.onload=null,a.onerror=null,this.sizing=!0;var n=Fe.navigator&&/(?:iPad|iPhone|iPod).*?AppleWebKit/i.test(Fe.navigator.userAgent),o=function(p,c){J(i.imageData,{naturalWidth:p,naturalHeight:c,aspectRatio:p/c}),i.initialImageData=J({},i.imageData),i.sizing=!1,i.sized=!0,i.build()};if(a.naturalWidth&&!n){o(a.naturalWidth,a.naturalHeight);return}var l=document.createElement("img"),r=document.body||document.documentElement;this.sizingImage=l,l.onload=function(){o(l.width,l.height),n||r.removeChild(l)},l.src=a.src,n||(l.style.cssText="left:0;max-height:none!important;max-width:none!important;min-height:0!important;min-width:0!important;opacity:0;position:absolute;top:0;z-index:-1;",r.appendChild(l))}},{key:"stop",value:function(){var i=this.image;i.onload=null,i.onerror=null,i.parentNode.removeChild(i),this.image=null}},{key:"build",value:function(){if(!(!this.sized||this.ready)){var i=this.element,a=this.options,n=this.image,o=i.parentNode,l=document.createElement("div");l.innerHTML=xp;var r=l.querySelector(".".concat(K,"-container")),s=r.querySelector(".".concat(K,"-canvas")),p=r.querySelector(".".concat(K,"-drag-box")),c=r.querySelector(".".concat(K,"-crop-box")),d=c.querySelector(".".concat(K,"-face"));this.container=o,this.cropper=r,this.canvas=s,this.dragBox=p,this.cropBox=c,this.viewBox=r.querySelector(".".concat(K,"-view-box")),this.face=d,s.appendChild(n),de(i,be),o.insertBefore(r,i.nextSibling),De(n,so),this.initPreview(),this.bind(),a.initialAspectRatio=Math.max(0,a.initialAspectRatio)||NaN,a.aspectRatio=Math.max(0,a.aspectRatio)||NaN,a.viewMode=Math.max(0,Math.min(3,Math.round(a.viewMode)))||0,de(c,be),a.guides||de(c.getElementsByClassName("".concat(K,"-dashed")),be),a.center||de(c.getElementsByClassName("".concat(K,"-center")),be),a.background&&de(r,"".concat(K,"-bg")),a.highlight||de(d,fp),a.cropBoxMovable&&(de(d,da),Ut(d,Gt,Ta)),a.cropBoxResizable||(de(c.getElementsByClassName("".concat(K,"-line")),be),de(c.getElementsByClassName("".concat(K,"-point")),be)),this.render(),this.ready=!0,this.setDragMode(a.dragMode),a.autoCrop&&this.crop(),this.setData(a.data),Ee(a.ready)&&Re(i,fo,a.ready,{once:!0}),xt(i,fo)}}},{key:"unbuild",value:function(){if(this.ready){this.ready=!1,this.unbind(),this.resetPreview();var i=this.cropper.parentNode;i&&i.removeChild(this.cropper),De(this.element,be)}}},{key:"uncreate",value:function(){this.ready?(this.unbuild(),this.ready=!1,this.cropped=!1):this.sizing?(this.sizingImage.onload=null,this.sizing=!1,this.sized=!1):this.reloading?(this.xhr.onabort=null,this.xhr.abort()):this.image&&this.stop()}}],[{key:"noConflict",value:function(){return window.Cropper=$p,e}},{key:"setDefaults",value:function(i){J(bo,Tt(i)&&i)}}])}();J(xa.prototype,Up,Wp,Hp,jp,qp,Yp);var No={"application/prs.cww":["cww"],"application/prs.xsf+xml":["xsf"],"application/vnd.1000minds.decision-model+xml":["1km"],"application/vnd.3gpp.pic-bw-large":["plb"],"application/vnd.3gpp.pic-bw-small":["psb"],"application/vnd.3gpp.pic-bw-var":["pvb"],"application/vnd.3gpp2.tcap":["tcap"],"application/vnd.3m.post-it-notes":["pwn"],"application/vnd.accpac.simply.aso":["aso"],"application/vnd.accpac.simply.imp":["imp"],"application/vnd.acucobol":["acu"],"application/vnd.acucorp":["atc","acutc"],"application/vnd.adobe.air-application-installer-package+zip":["air"],"application/vnd.adobe.formscentral.fcdt":["fcdt"],"application/vnd.adobe.fxp":["fxp","fxpl"],"application/vnd.adobe.xdp+xml":["xdp"],"application/vnd.adobe.xfdf":["*xfdf"],"application/vnd.age":["age"],"application/vnd.ahead.space":["ahead"],"application/vnd.airzip.filesecure.azf":["azf"],"application/vnd.airzip.filesecure.azs":["azs"],"application/vnd.amazon.ebook":["azw"],"application/vnd.americandynamics.acc":["acc"],"application/vnd.amiga.ami":["ami"],"application/vnd.android.package-archive":["apk"],"application/vnd.anser-web-certificate-issue-initiation":["cii"],"application/vnd.anser-web-funds-transfer-initiation":["fti"],"application/vnd.antix.game-component":["atx"],"application/vnd.apple.installer+xml":["mpkg"],"application/vnd.apple.keynote":["key"],"application/vnd.apple.mpegurl":["m3u8"],"application/vnd.apple.numbers":["numbers"],"application/vnd.apple.pages":["pages"],"application/vnd.apple.pkpass":["pkpass"],"application/vnd.aristanetworks.swi":["swi"],"application/vnd.astraea-software.iota":["iota"],"application/vnd.audiograph":["aep"],"application/vnd.balsamiq.bmml+xml":["bmml"],"application/vnd.blueice.multipass":["mpm"],"application/vnd.bmi":["bmi"],"application/vnd.businessobjects":["rep"],"application/vnd.chemdraw+xml":["cdxml"],"application/vnd.chipnuts.karaoke-mmd":["mmd"],"application/vnd.cinderella":["cdy"],"application/vnd.citationstyles.style+xml":["csl"],"application/vnd.claymore":["cla"],"application/vnd.cloanto.rp9":["rp9"],"application/vnd.clonk.c4group":["c4g","c4d","c4f","c4p","c4u"],"application/vnd.cluetrust.cartomobile-config":["c11amc"],"application/vnd.cluetrust.cartomobile-config-pkg":["c11amz"],"application/vnd.commonspace":["csp"],"application/vnd.contact.cmsg":["cdbcmsg"],"application/vnd.cosmocaller":["cmc"],"application/vnd.crick.clicker":["clkx"],"application/vnd.crick.clicker.keyboard":["clkk"],"application/vnd.crick.clicker.palette":["clkp"],"application/vnd.crick.clicker.template":["clkt"],"application/vnd.crick.clicker.wordbank":["clkw"],"application/vnd.criticaltools.wbs+xml":["wbs"],"application/vnd.ctc-posml":["pml"],"application/vnd.cups-ppd":["ppd"],"application/vnd.curl.car":["car"],"application/vnd.curl.pcurl":["pcurl"],"application/vnd.dart":["dart"],"application/vnd.data-vision.rdz":["rdz"],"application/vnd.dbf":["dbf"],"application/vnd.dece.data":["uvf","uvvf","uvd","uvvd"],"application/vnd.dece.ttml+xml":["uvt","uvvt"],"application/vnd.dece.unspecified":["uvx","uvvx"],"application/vnd.dece.zip":["uvz","uvvz"],"application/vnd.denovo.fcselayout-link":["fe_launch"],"application/vnd.dna":["dna"],"application/vnd.dolby.mlp":["mlp"],"application/vnd.dpgraph":["dpg"],"application/vnd.dreamfactory":["dfac"],"application/vnd.ds-keypoint":["kpxx"],"application/vnd.dvb.ait":["ait"],"application/vnd.dvb.service":["svc"],"application/vnd.dynageo":["geo"],"application/vnd.ecowin.chart":["mag"],"application/vnd.enliven":["nml"],"application/vnd.epson.esf":["esf"],"application/vnd.epson.msf":["msf"],"application/vnd.epson.quickanime":["qam"],"application/vnd.epson.salt":["slt"],"application/vnd.epson.ssf":["ssf"],"application/vnd.eszigno3+xml":["es3","et3"],"application/vnd.ezpix-album":["ez2"],"application/vnd.ezpix-package":["ez3"],"application/vnd.fdf":["*fdf"],"application/vnd.fdsn.mseed":["mseed"],"application/vnd.fdsn.seed":["seed","dataless"],"application/vnd.flographit":["gph"],"application/vnd.fluxtime.clip":["ftc"],"application/vnd.framemaker":["fm","frame","maker","book"],"application/vnd.frogans.fnc":["fnc"],"application/vnd.frogans.ltf":["ltf"],"application/vnd.fsc.weblaunch":["fsc"],"application/vnd.fujitsu.oasys":["oas"],"application/vnd.fujitsu.oasys2":["oa2"],"application/vnd.fujitsu.oasys3":["oa3"],"application/vnd.fujitsu.oasysgp":["fg5"],"application/vnd.fujitsu.oasysprs":["bh2"],"application/vnd.fujixerox.ddd":["ddd"],"application/vnd.fujixerox.docuworks":["xdw"],"application/vnd.fujixerox.docuworks.binder":["xbd"],"application/vnd.fuzzysheet":["fzs"],"application/vnd.genomatix.tuxedo":["txd"],"application/vnd.geogebra.file":["ggb"],"application/vnd.geogebra.tool":["ggt"],"application/vnd.geometry-explorer":["gex","gre"],"application/vnd.geonext":["gxt"],"application/vnd.geoplan":["g2w"],"application/vnd.geospace":["g3w"],"application/vnd.gmx":["gmx"],"application/vnd.google-apps.document":["gdoc"],"application/vnd.google-apps.presentation":["gslides"],"application/vnd.google-apps.spreadsheet":["gsheet"],"application/vnd.google-earth.kml+xml":["kml"],"application/vnd.google-earth.kmz":["kmz"],"application/vnd.grafeq":["gqf","gqs"],"application/vnd.groove-account":["gac"],"application/vnd.groove-help":["ghf"],"application/vnd.groove-identity-message":["gim"],"application/vnd.groove-injector":["grv"],"application/vnd.groove-tool-message":["gtm"],"application/vnd.groove-tool-template":["tpl"],"application/vnd.groove-vcard":["vcg"],"application/vnd.hal+xml":["hal"],"application/vnd.handheld-entertainment+xml":["zmm"],"application/vnd.hbci":["hbci"],"application/vnd.hhe.lesson-player":["les"],"application/vnd.hp-hpgl":["hpgl"],"application/vnd.hp-hpid":["hpid"],"application/vnd.hp-hps":["hps"],"application/vnd.hp-jlyt":["jlt"],"application/vnd.hp-pcl":["pcl"],"application/vnd.hp-pclxl":["pclxl"],"application/vnd.hydrostatix.sof-data":["sfd-hdstx"],"application/vnd.ibm.minipay":["mpy"],"application/vnd.ibm.modcap":["afp","listafp","list3820"],"application/vnd.ibm.rights-management":["irm"],"application/vnd.ibm.secure-container":["sc"],"application/vnd.iccprofile":["icc","icm"],"application/vnd.igloader":["igl"],"application/vnd.immervision-ivp":["ivp"],"application/vnd.immervision-ivu":["ivu"],"application/vnd.insors.igm":["igm"],"application/vnd.intercon.formnet":["xpw","xpx"],"application/vnd.intergeo":["i2g"],"application/vnd.intu.qbo":["qbo"],"application/vnd.intu.qfx":["qfx"],"application/vnd.ipunplugged.rcprofile":["rcprofile"],"application/vnd.irepository.package+xml":["irp"],"application/vnd.is-xpr":["xpr"],"application/vnd.isac.fcs":["fcs"],"application/vnd.jam":["jam"],"application/vnd.jcp.javame.midlet-rms":["rms"],"application/vnd.jisp":["jisp"],"application/vnd.joost.joda-archive":["joda"],"application/vnd.kahootz":["ktz","ktr"],"application/vnd.kde.karbon":["karbon"],"application/vnd.kde.kchart":["chrt"],"application/vnd.kde.kformula":["kfo"],"application/vnd.kde.kivio":["flw"],"application/vnd.kde.kontour":["kon"],"application/vnd.kde.kpresenter":["kpr","kpt"],"application/vnd.kde.kspread":["ksp"],"application/vnd.kde.kword":["kwd","kwt"],"application/vnd.kenameaapp":["htke"],"application/vnd.kidspiration":["kia"],"application/vnd.kinar":["kne","knp"],"application/vnd.koan":["skp","skd","skt","skm"],"application/vnd.kodak-descriptor":["sse"],"application/vnd.las.las+xml":["lasxml"],"application/vnd.llamagraphics.life-balance.desktop":["lbd"],"application/vnd.llamagraphics.life-balance.exchange+xml":["lbe"],"application/vnd.lotus-1-2-3":["123"],"application/vnd.lotus-approach":["apr"],"application/vnd.lotus-freelance":["pre"],"application/vnd.lotus-notes":["nsf"],"application/vnd.lotus-organizer":["org"],"application/vnd.lotus-screencam":["scm"],"application/vnd.lotus-wordpro":["lwp"],"application/vnd.macports.portpkg":["portpkg"],"application/vnd.mapbox-vector-tile":["mvt"],"application/vnd.mcd":["mcd"],"application/vnd.medcalcdata":["mc1"],"application/vnd.mediastation.cdkey":["cdkey"],"application/vnd.mfer":["mwf"],"application/vnd.mfmp":["mfm"],"application/vnd.micrografx.flo":["flo"],"application/vnd.micrografx.igx":["igx"],"application/vnd.mif":["mif"],"application/vnd.mobius.daf":["daf"],"application/vnd.mobius.dis":["dis"],"application/vnd.mobius.mbk":["mbk"],"application/vnd.mobius.mqy":["mqy"],"application/vnd.mobius.msl":["msl"],"application/vnd.mobius.plc":["plc"],"application/vnd.mobius.txf":["txf"],"application/vnd.mophun.application":["mpn"],"application/vnd.mophun.certificate":["mpc"],"application/vnd.mozilla.xul+xml":["xul"],"application/vnd.ms-artgalry":["cil"],"application/vnd.ms-cab-compressed":["cab"],"application/vnd.ms-excel":["xls","xlm","xla","xlc","xlt","xlw"],"application/vnd.ms-excel.addin.macroenabled.12":["xlam"],"application/vnd.ms-excel.sheet.binary.macroenabled.12":["xlsb"],"application/vnd.ms-excel.sheet.macroenabled.12":["xlsm"],"application/vnd.ms-excel.template.macroenabled.12":["xltm"],"application/vnd.ms-fontobject":["eot"],"application/vnd.ms-htmlhelp":["chm"],"application/vnd.ms-ims":["ims"],"application/vnd.ms-lrm":["lrm"],"application/vnd.ms-officetheme":["thmx"],"application/vnd.ms-outlook":["msg"],"application/vnd.ms-pki.seccat":["cat"],"application/vnd.ms-pki.stl":["*stl"],"application/vnd.ms-powerpoint":["ppt","pps","pot"],"application/vnd.ms-powerpoint.addin.macroenabled.12":["ppam"],"application/vnd.ms-powerpoint.presentation.macroenabled.12":["pptm"],"application/vnd.ms-powerpoint.slide.macroenabled.12":["sldm"],"application/vnd.ms-powerpoint.slideshow.macroenabled.12":["ppsm"],"application/vnd.ms-powerpoint.template.macroenabled.12":["potm"],"application/vnd.ms-project":["*mpp","mpt"],"application/vnd.ms-word.document.macroenabled.12":["docm"],"application/vnd.ms-word.template.macroenabled.12":["dotm"],"application/vnd.ms-works":["wps","wks","wcm","wdb"],"application/vnd.ms-wpl":["wpl"],"application/vnd.ms-xpsdocument":["xps"],"application/vnd.mseq":["mseq"],"application/vnd.musician":["mus"],"application/vnd.muvee.style":["msty"],"application/vnd.mynfc":["taglet"],"application/vnd.neurolanguage.nlu":["nlu"],"application/vnd.nitf":["ntf","nitf"],"application/vnd.noblenet-directory":["nnd"],"application/vnd.noblenet-sealer":["nns"],"application/vnd.noblenet-web":["nnw"],"application/vnd.nokia.n-gage.ac+xml":["*ac"],"application/vnd.nokia.n-gage.data":["ngdat"],"application/vnd.nokia.n-gage.symbian.install":["n-gage"],"application/vnd.nokia.radio-preset":["rpst"],"application/vnd.nokia.radio-presets":["rpss"],"application/vnd.novadigm.edm":["edm"],"application/vnd.novadigm.edx":["edx"],"application/vnd.novadigm.ext":["ext"],"application/vnd.oasis.opendocument.chart":["odc"],"application/vnd.oasis.opendocument.chart-template":["otc"],"application/vnd.oasis.opendocument.database":["odb"],"application/vnd.oasis.opendocument.formula":["odf"],"application/vnd.oasis.opendocument.formula-template":["odft"],"application/vnd.oasis.opendocument.graphics":["odg"],"application/vnd.oasis.opendocument.graphics-template":["otg"],"application/vnd.oasis.opendocument.image":["odi"],"application/vnd.oasis.opendocument.image-template":["oti"],"application/vnd.oasis.opendocument.presentation":["odp"],"application/vnd.oasis.opendocument.presentation-template":["otp"],"application/vnd.oasis.opendocument.spreadsheet":["ods"],"application/vnd.oasis.opendocument.spreadsheet-template":["ots"],"application/vnd.oasis.opendocument.text":["odt"],"application/vnd.oasis.opendocument.text-master":["odm"],"application/vnd.oasis.opendocument.text-template":["ott"],"application/vnd.oasis.opendocument.text-web":["oth"],"application/vnd.olpc-sugar":["xo"],"application/vnd.oma.dd2+xml":["dd2"],"application/vnd.openblox.game+xml":["obgx"],"application/vnd.openofficeorg.extension":["oxt"],"application/vnd.openstreetmap.data+xml":["osm"],"application/vnd.openxmlformats-officedocument.presentationml.presentation":["pptx"],"application/vnd.openxmlformats-officedocument.presentationml.slide":["sldx"],"application/vnd.openxmlformats-officedocument.presentationml.slideshow":["ppsx"],"application/vnd.openxmlformats-officedocument.presentationml.template":["potx"],"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":["xlsx"],"application/vnd.openxmlformats-officedocument.spreadsheetml.template":["xltx"],"application/vnd.openxmlformats-officedocument.wordprocessingml.document":["docx"],"application/vnd.openxmlformats-officedocument.wordprocessingml.template":["dotx"],"application/vnd.osgeo.mapguide.package":["mgp"],"application/vnd.osgi.dp":["dp"],"application/vnd.osgi.subsystem":["esa"],"application/vnd.palm":["pdb","pqa","oprc"],"application/vnd.pawaafile":["paw"],"application/vnd.pg.format":["str"],"application/vnd.pg.osasli":["ei6"],"application/vnd.picsel":["efif"],"application/vnd.pmi.widget":["wg"],"application/vnd.pocketlearn":["plf"],"application/vnd.powerbuilder6":["pbd"],"application/vnd.previewsystems.box":["box"],"application/vnd.proteus.magazine":["mgz"],"application/vnd.publishare-delta-tree":["qps"],"application/vnd.pvi.ptid1":["ptid"],"application/vnd.pwg-xhtml-print+xml":["xhtm"],"application/vnd.quark.quarkxpress":["qxd","qxt","qwd","qwt","qxl","qxb"],"application/vnd.rar":["rar"],"application/vnd.realvnc.bed":["bed"],"application/vnd.recordare.musicxml":["mxl"],"application/vnd.recordare.musicxml+xml":["musicxml"],"application/vnd.rig.cryptonote":["cryptonote"],"application/vnd.rim.cod":["cod"],"application/vnd.rn-realmedia":["rm"],"application/vnd.rn-realmedia-vbr":["rmvb"],"application/vnd.route66.link66+xml":["link66"],"application/vnd.sailingtracker.track":["st"],"application/vnd.seemail":["see"],"application/vnd.sema":["sema"],"application/vnd.semd":["semd"],"application/vnd.semf":["semf"],"application/vnd.shana.informed.formdata":["ifm"],"application/vnd.shana.informed.formtemplate":["itp"],"application/vnd.shana.informed.interchange":["iif"],"application/vnd.shana.informed.package":["ipk"],"application/vnd.simtech-mindmapper":["twd","twds"],"application/vnd.smaf":["mmf"],"application/vnd.smart.teacher":["teacher"],"application/vnd.software602.filler.form+xml":["fo"],"application/vnd.solent.sdkm+xml":["sdkm","sdkd"],"application/vnd.spotfire.dxp":["dxp"],"application/vnd.spotfire.sfs":["sfs"],"application/vnd.stardivision.calc":["sdc"],"application/vnd.stardivision.draw":["sda"],"application/vnd.stardivision.impress":["sdd"],"application/vnd.stardivision.math":["smf"],"application/vnd.stardivision.writer":["sdw","vor"],"application/vnd.stardivision.writer-global":["sgl"],"application/vnd.stepmania.package":["smzip"],"application/vnd.stepmania.stepchart":["sm"],"application/vnd.sun.wadl+xml":["wadl"],"application/vnd.sun.xml.calc":["sxc"],"application/vnd.sun.xml.calc.template":["stc"],"application/vnd.sun.xml.draw":["sxd"],"application/vnd.sun.xml.draw.template":["std"],"application/vnd.sun.xml.impress":["sxi"],"application/vnd.sun.xml.impress.template":["sti"],"application/vnd.sun.xml.math":["sxm"],"application/vnd.sun.xml.writer":["sxw"],"application/vnd.sun.xml.writer.global":["sxg"],"application/vnd.sun.xml.writer.template":["stw"],"application/vnd.sus-calendar":["sus","susp"],"application/vnd.svd":["svd"],"application/vnd.symbian.install":["sis","sisx"],"application/vnd.syncml+xml":["xsm"],"application/vnd.syncml.dm+wbxml":["bdm"],"application/vnd.syncml.dm+xml":["xdm"],"application/vnd.syncml.dmddf+xml":["ddf"],"application/vnd.tao.intent-module-archive":["tao"],"application/vnd.tcpdump.pcap":["pcap","cap","dmp"],"application/vnd.tmobile-livetv":["tmo"],"application/vnd.trid.tpt":["tpt"],"application/vnd.triscape.mxs":["mxs"],"application/vnd.trueapp":["tra"],"application/vnd.ufdl":["ufd","ufdl"],"application/vnd.uiq.theme":["utz"],"application/vnd.umajin":["umj"],"application/vnd.unity":["unityweb"],"application/vnd.uoml+xml":["uoml","uo"],"application/vnd.vcx":["vcx"],"application/vnd.visio":["vsd","vst","vss","vsw"],"application/vnd.visionary":["vis"],"application/vnd.vsf":["vsf"],"application/vnd.wap.wbxml":["wbxml"],"application/vnd.wap.wmlc":["wmlc"],"application/vnd.wap.wmlscriptc":["wmlsc"],"application/vnd.webturbo":["wtb"],"application/vnd.wolfram.player":["nbp"],"application/vnd.wordperfect":["wpd"],"application/vnd.wqd":["wqd"],"application/vnd.wt.stf":["stf"],"application/vnd.xara":["xar"],"application/vnd.xfdl":["xfdl"],"application/vnd.yamaha.hv-dic":["hvd"],"application/vnd.yamaha.hv-script":["hvs"],"application/vnd.yamaha.hv-voice":["hvp"],"application/vnd.yamaha.openscoreformat":["osf"],"application/vnd.yamaha.openscoreformat.osfpvg+xml":["osfpvg"],"application/vnd.yamaha.smaf-audio":["saf"],"application/vnd.yamaha.smaf-phrase":["spf"],"application/vnd.yellowriver-custom-menu":["cmp"],"application/vnd.zul":["zir","zirz"],"application/vnd.zzazz.deck+xml":["zaz"],"application/x-7z-compressed":["7z"],"application/x-abiword":["abw"],"application/x-ace-compressed":["ace"],"application/x-apple-diskimage":["*dmg"],"application/x-arj":["arj"],"application/x-authorware-bin":["aab","x32","u32","vox"],"application/x-authorware-map":["aam"],"application/x-authorware-seg":["aas"],"application/x-bcpio":["bcpio"],"application/x-bdoc":["*bdoc"],"application/x-bittorrent":["torrent"],"application/x-blorb":["blb","blorb"],"application/x-bzip":["bz"],"application/x-bzip2":["bz2","boz"],"application/x-cbr":["cbr","cba","cbt","cbz","cb7"],"application/x-cdlink":["vcd"],"application/x-cfs-compressed":["cfs"],"application/x-chat":["chat"],"application/x-chess-pgn":["pgn"],"application/x-chrome-extension":["crx"],"application/x-cocoa":["cco"],"application/x-conference":["nsc"],"application/x-cpio":["cpio"],"application/x-csh":["csh"],"application/x-debian-package":["*deb","udeb"],"application/x-dgc-compressed":["dgc"],"application/x-director":["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"],"application/x-doom":["wad"],"application/x-dtbncx+xml":["ncx"],"application/x-dtbook+xml":["dtb"],"application/x-dtbresource+xml":["res"],"application/x-dvi":["dvi"],"application/x-envoy":["evy"],"application/x-eva":["eva"],"application/x-font-bdf":["bdf"],"application/x-font-ghostscript":["gsf"],"application/x-font-linux-psf":["psf"],"application/x-font-pcf":["pcf"],"application/x-font-snf":["snf"],"application/x-font-type1":["pfa","pfb","pfm","afm"],"application/x-freearc":["arc"],"application/x-futuresplash":["spl"],"application/x-gca-compressed":["gca"],"application/x-glulx":["ulx"],"application/x-gnumeric":["gnumeric"],"application/x-gramps-xml":["gramps"],"application/x-gtar":["gtar"],"application/x-hdf":["hdf"],"application/x-httpd-php":["php"],"application/x-install-instructions":["install"],"application/x-iso9660-image":["*iso"],"application/x-iwork-keynote-sffkey":["*key"],"application/x-iwork-numbers-sffnumbers":["*numbers"],"application/x-iwork-pages-sffpages":["*pages"],"application/x-java-archive-diff":["jardiff"],"application/x-java-jnlp-file":["jnlp"],"application/x-keepass2":["kdbx"],"application/x-latex":["latex"],"application/x-lua-bytecode":["luac"],"application/x-lzh-compressed":["lzh","lha"],"application/x-makeself":["run"],"application/x-mie":["mie"],"application/x-mobipocket-ebook":["*prc","mobi"],"application/x-ms-application":["application"],"application/x-ms-shortcut":["lnk"],"application/x-ms-wmd":["wmd"],"application/x-ms-wmz":["wmz"],"application/x-ms-xbap":["xbap"],"application/x-msaccess":["mdb"],"application/x-msbinder":["obd"],"application/x-mscardfile":["crd"],"application/x-msclip":["clp"],"application/x-msdos-program":["*exe"],"application/x-msdownload":["*exe","*dll","com","bat","*msi"],"application/x-msmediaview":["mvb","m13","m14"],"application/x-msmetafile":["*wmf","*wmz","*emf","emz"],"application/x-msmoney":["mny"],"application/x-mspublisher":["pub"],"application/x-msschedule":["scd"],"application/x-msterminal":["trm"],"application/x-mswrite":["wri"],"application/x-netcdf":["nc","cdf"],"application/x-ns-proxy-autoconfig":["pac"],"application/x-nzb":["nzb"],"application/x-perl":["pl","pm"],"application/x-pilot":["*prc","*pdb"],"application/x-pkcs12":["p12","pfx"],"application/x-pkcs7-certificates":["p7b","spc"],"application/x-pkcs7-certreqresp":["p7r"],"application/x-rar-compressed":["*rar"],"application/x-redhat-package-manager":["rpm"],"application/x-research-info-systems":["ris"],"application/x-sea":["sea"],"application/x-sh":["sh"],"application/x-shar":["shar"],"application/x-shockwave-flash":["swf"],"application/x-silverlight-app":["xap"],"application/x-sql":["*sql"],"application/x-stuffit":["sit"],"application/x-stuffitx":["sitx"],"application/x-subrip":["srt"],"application/x-sv4cpio":["sv4cpio"],"application/x-sv4crc":["sv4crc"],"application/x-t3vm-image":["t3"],"application/x-tads":["gam"],"application/x-tar":["tar"],"application/x-tcl":["tcl","tk"],"application/x-tex":["tex"],"application/x-tex-tfm":["tfm"],"application/x-texinfo":["texinfo","texi"],"application/x-tgif":["*obj"],"application/x-ustar":["ustar"],"application/x-virtualbox-hdd":["hdd"],"application/x-virtualbox-ova":["ova"],"application/x-virtualbox-ovf":["ovf"],"application/x-virtualbox-vbox":["vbox"],"application/x-virtualbox-vbox-extpack":["vbox-extpack"],"application/x-virtualbox-vdi":["vdi"],"application/x-virtualbox-vhd":["vhd"],"application/x-virtualbox-vmdk":["vmdk"],"application/x-wais-source":["src"],"application/x-web-app-manifest+json":["webapp"],"application/x-x509-ca-cert":["der","crt","pem"],"application/x-xfig":["fig"],"application/x-xliff+xml":["*xlf"],"application/x-xpinstall":["xpi"],"application/x-xz":["xz"],"application/x-zmachine":["z1","z2","z3","z4","z5","z6","z7","z8"],"audio/vnd.dece.audio":["uva","uvva"],"audio/vnd.digital-winds":["eol"],"audio/vnd.dra":["dra"],"audio/vnd.dts":["dts"],"audio/vnd.dts.hd":["dtshd"],"audio/vnd.lucent.voice":["lvp"],"audio/vnd.ms-playready.media.pya":["pya"],"audio/vnd.nuera.ecelp4800":["ecelp4800"],"audio/vnd.nuera.ecelp7470":["ecelp7470"],"audio/vnd.nuera.ecelp9600":["ecelp9600"],"audio/vnd.rip":["rip"],"audio/x-aac":["*aac"],"audio/x-aiff":["aif","aiff","aifc"],"audio/x-caf":["caf"],"audio/x-flac":["flac"],"audio/x-m4a":["*m4a"],"audio/x-matroska":["mka"],"audio/x-mpegurl":["m3u"],"audio/x-ms-wax":["wax"],"audio/x-ms-wma":["wma"],"audio/x-pn-realaudio":["ram","ra"],"audio/x-pn-realaudio-plugin":["rmp"],"audio/x-realaudio":["*ra"],"audio/x-wav":["*wav"],"chemical/x-cdx":["cdx"],"chemical/x-cif":["cif"],"chemical/x-cmdf":["cmdf"],"chemical/x-cml":["cml"],"chemical/x-csml":["csml"],"chemical/x-xyz":["xyz"],"image/prs.btif":["btif","btf"],"image/prs.pti":["pti"],"image/vnd.adobe.photoshop":["psd"],"image/vnd.airzip.accelerator.azv":["azv"],"image/vnd.dece.graphic":["uvi","uvvi","uvg","uvvg"],"image/vnd.djvu":["djvu","djv"],"image/vnd.dvb.subtitle":["*sub"],"image/vnd.dwg":["dwg"],"image/vnd.dxf":["dxf"],"image/vnd.fastbidsheet":["fbs"],"image/vnd.fpx":["fpx"],"image/vnd.fst":["fst"],"image/vnd.fujixerox.edmics-mmr":["mmr"],"image/vnd.fujixerox.edmics-rlc":["rlc"],"image/vnd.microsoft.icon":["ico"],"image/vnd.ms-dds":["dds"],"image/vnd.ms-modi":["mdi"],"image/vnd.ms-photo":["wdp"],"image/vnd.net-fpx":["npx"],"image/vnd.pco.b16":["b16"],"image/vnd.tencent.tap":["tap"],"image/vnd.valve.source.texture":["vtf"],"image/vnd.wap.wbmp":["wbmp"],"image/vnd.xiff":["xif"],"image/vnd.zbrush.pcx":["pcx"],"image/x-3ds":["3ds"],"image/x-cmu-raster":["ras"],"image/x-cmx":["cmx"],"image/x-freehand":["fh","fhc","fh4","fh5","fh7"],"image/x-icon":["*ico"],"image/x-jng":["jng"],"image/x-mrsid-image":["sid"],"image/x-ms-bmp":["*bmp"],"image/x-pcx":["*pcx"],"image/x-pict":["pic","pct"],"image/x-portable-anymap":["pnm"],"image/x-portable-bitmap":["pbm"],"image/x-portable-graymap":["pgm"],"image/x-portable-pixmap":["ppm"],"image/x-rgb":["rgb"],"image/x-tga":["tga"],"image/x-xbitmap":["xbm"],"image/x-xpixmap":["xpm"],"image/x-xwindowdump":["xwd"],"message/vnd.wfa.wsc":["wsc"],"model/vnd.cld":["cld"],"model/vnd.collada+xml":["dae"],"model/vnd.dwf":["dwf"],"model/vnd.gdl":["gdl"],"model/vnd.gtw":["gtw"],"model/vnd.mts":["mts"],"model/vnd.opengex":["ogex"],"model/vnd.parasolid.transmit.binary":["x_b"],"model/vnd.parasolid.transmit.text":["x_t"],"model/vnd.pytha.pyox":["pyo","pyox"],"model/vnd.sap.vds":["vds"],"model/vnd.usda":["usda"],"model/vnd.usdz+zip":["usdz"],"model/vnd.valve.source.compiled-map":["bsp"],"model/vnd.vtu":["vtu"],"text/prs.lines.tag":["dsc"],"text/vnd.curl":["curl"],"text/vnd.curl.dcurl":["dcurl"],"text/vnd.curl.mcurl":["mcurl"],"text/vnd.curl.scurl":["scurl"],"text/vnd.dvb.subtitle":["sub"],"text/vnd.familysearch.gedcom":["ged"],"text/vnd.fly":["fly"],"text/vnd.fmi.flexstor":["flx"],"text/vnd.graphviz":["gv"],"text/vnd.in3d.3dml":["3dml"],"text/vnd.in3d.spot":["spot"],"text/vnd.sun.j2me.app-descriptor":["jad"],"text/vnd.wap.wml":["wml"],"text/vnd.wap.wmlscript":["wmls"],"text/x-asm":["s","asm"],"text/x-c":["c","cc","cxx","cpp","h","hh","dic"],"text/x-component":["htc"],"text/x-fortran":["f","for","f77","f90"],"text/x-handlebars-template":["hbs"],"text/x-java-source":["java"],"text/x-lua":["lua"],"text/x-markdown":["mkd"],"text/x-nfo":["nfo"],"text/x-opml":["opml"],"text/x-org":["*org"],"text/x-pascal":["p","pas"],"text/x-processing":["pde"],"text/x-sass":["sass"],"text/x-scss":["scss"],"text/x-setext":["etx"],"text/x-sfv":["sfv"],"text/x-suse-ymp":["ymp"],"text/x-uuencode":["uu"],"text/x-vcalendar":["vcs"],"text/x-vcard":["vcf"],"video/vnd.dece.hd":["uvh","uvvh"],"video/vnd.dece.mobile":["uvm","uvvm"],"video/vnd.dece.pd":["uvp","uvvp"],"video/vnd.dece.sd":["uvs","uvvs"],"video/vnd.dece.video":["uvv","uvvv"],"video/vnd.dvb.file":["dvb"],"video/vnd.fvt":["fvt"],"video/vnd.mpegurl":["mxu","m4u"],"video/vnd.ms-playready.media.pyv":["pyv"],"video/vnd.uvvu.mp4":["uvu","uvvu"],"video/vnd.vivo":["viv"],"video/x-f4v":["f4v"],"video/x-fli":["fli"],"video/x-flv":["flv"],"video/x-m4v":["m4v"],"video/x-matroska":["mkv","mk3d","mks"],"video/x-mng":["mng"],"video/x-ms-asf":["asf","asx"],"video/x-ms-vob":["vob"],"video/x-ms-wm":["wm"],"video/x-ms-wmv":["wmv"],"video/x-ms-wmx":["wmx"],"video/x-ms-wvx":["wvx"],"video/x-msvideo":["avi"],"video/x-sgi-movie":["movie"],"video/x-smv":["smv"],"x-conference/x-cooltalk":["ice"]};Object.freeze(No);var Bo=No;var ko={"application/andrew-inset":["ez"],"application/appinstaller":["appinstaller"],"application/applixware":["aw"],"application/appx":["appx"],"application/appxbundle":["appxbundle"],"application/atom+xml":["atom"],"application/atomcat+xml":["atomcat"],"application/atomdeleted+xml":["atomdeleted"],"application/atomsvc+xml":["atomsvc"],"application/atsc-dwd+xml":["dwd"],"application/atsc-held+xml":["held"],"application/atsc-rsat+xml":["rsat"],"application/automationml-aml+xml":["aml"],"application/automationml-amlx+zip":["amlx"],"application/bdoc":["bdoc"],"application/calendar+xml":["xcs"],"application/ccxml+xml":["ccxml"],"application/cdfx+xml":["cdfx"],"application/cdmi-capability":["cdmia"],"application/cdmi-container":["cdmic"],"application/cdmi-domain":["cdmid"],"application/cdmi-object":["cdmio"],"application/cdmi-queue":["cdmiq"],"application/cpl+xml":["cpl"],"application/cu-seeme":["cu"],"application/cwl":["cwl"],"application/dash+xml":["mpd"],"application/dash-patch+xml":["mpp"],"application/davmount+xml":["davmount"],"application/docbook+xml":["dbk"],"application/dssc+der":["dssc"],"application/dssc+xml":["xdssc"],"application/ecmascript":["ecma"],"application/emma+xml":["emma"],"application/emotionml+xml":["emotionml"],"application/epub+zip":["epub"],"application/exi":["exi"],"application/express":["exp"],"application/fdf":["fdf"],"application/fdt+xml":["fdt"],"application/font-tdpfr":["pfr"],"application/geo+json":["geojson"],"application/gml+xml":["gml"],"application/gpx+xml":["gpx"],"application/gxf":["gxf"],"application/gzip":["gz"],"application/hjson":["hjson"],"application/hyperstudio":["stk"],"application/inkml+xml":["ink","inkml"],"application/ipfix":["ipfix"],"application/its+xml":["its"],"application/java-archive":["jar","war","ear"],"application/java-serialized-object":["ser"],"application/java-vm":["class"],"application/javascript":["*js"],"application/json":["json","map"],"application/json5":["json5"],"application/jsonml+json":["jsonml"],"application/ld+json":["jsonld"],"application/lgr+xml":["lgr"],"application/lost+xml":["lostxml"],"application/mac-binhex40":["hqx"],"application/mac-compactpro":["cpt"],"application/mads+xml":["mads"],"application/manifest+json":["webmanifest"],"application/marc":["mrc"],"application/marcxml+xml":["mrcx"],"application/mathematica":["ma","nb","mb"],"application/mathml+xml":["mathml"],"application/mbox":["mbox"],"application/media-policy-dataset+xml":["mpf"],"application/mediaservercontrol+xml":["mscml"],"application/metalink+xml":["metalink"],"application/metalink4+xml":["meta4"],"application/mets+xml":["mets"],"application/mmt-aei+xml":["maei"],"application/mmt-usd+xml":["musd"],"application/mods+xml":["mods"],"application/mp21":["m21","mp21"],"application/mp4":["*mp4","*mpg4","mp4s","m4p"],"application/msix":["msix"],"application/msixbundle":["msixbundle"],"application/msword":["doc","dot"],"application/mxf":["mxf"],"application/n-quads":["nq"],"application/n-triples":["nt"],"application/node":["cjs"],"application/octet-stream":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"],"application/oda":["oda"],"application/oebps-package+xml":["opf"],"application/ogg":["ogx"],"application/omdoc+xml":["omdoc"],"application/onenote":["onetoc","onetoc2","onetmp","onepkg"],"application/oxps":["oxps"],"application/p2p-overlay+xml":["relo"],"application/patch-ops-error+xml":["xer"],"application/pdf":["pdf"],"application/pgp-encrypted":["pgp"],"application/pgp-keys":["asc"],"application/pgp-signature":["sig","*asc"],"application/pics-rules":["prf"],"application/pkcs10":["p10"],"application/pkcs7-mime":["p7m","p7c"],"application/pkcs7-signature":["p7s"],"application/pkcs8":["p8"],"application/pkix-attr-cert":["ac"],"application/pkix-cert":["cer"],"application/pkix-crl":["crl"],"application/pkix-pkipath":["pkipath"],"application/pkixcmp":["pki"],"application/pls+xml":["pls"],"application/postscript":["ai","eps","ps"],"application/provenance+xml":["provx"],"application/pskc+xml":["pskcxml"],"application/raml+yaml":["raml"],"application/rdf+xml":["rdf","owl"],"application/reginfo+xml":["rif"],"application/relax-ng-compact-syntax":["rnc"],"application/resource-lists+xml":["rl"],"application/resource-lists-diff+xml":["rld"],"application/rls-services+xml":["rs"],"application/route-apd+xml":["rapd"],"application/route-s-tsid+xml":["sls"],"application/route-usd+xml":["rusd"],"application/rpki-ghostbusters":["gbr"],"application/rpki-manifest":["mft"],"application/rpki-roa":["roa"],"application/rsd+xml":["rsd"],"application/rss+xml":["rss"],"application/rtf":["rtf"],"application/sbml+xml":["sbml"],"application/scvp-cv-request":["scq"],"application/scvp-cv-response":["scs"],"application/scvp-vp-request":["spq"],"application/scvp-vp-response":["spp"],"application/sdp":["sdp"],"application/senml+xml":["senmlx"],"application/sensml+xml":["sensmlx"],"application/set-payment-initiation":["setpay"],"application/set-registration-initiation":["setreg"],"application/shf+xml":["shf"],"application/sieve":["siv","sieve"],"application/smil+xml":["smi","smil"],"application/sparql-query":["rq"],"application/sparql-results+xml":["srx"],"application/sql":["sql"],"application/srgs":["gram"],"application/srgs+xml":["grxml"],"application/sru+xml":["sru"],"application/ssdl+xml":["ssdl"],"application/ssml+xml":["ssml"],"application/swid+xml":["swidtag"],"application/tei+xml":["tei","teicorpus"],"application/thraud+xml":["tfi"],"application/timestamped-data":["tsd"],"application/toml":["toml"],"application/trig":["trig"],"application/ttml+xml":["ttml"],"application/ubjson":["ubj"],"application/urc-ressheet+xml":["rsheet"],"application/urc-targetdesc+xml":["td"],"application/voicexml+xml":["vxml"],"application/wasm":["wasm"],"application/watcherinfo+xml":["wif"],"application/widget":["wgt"],"application/winhlp":["hlp"],"application/wsdl+xml":["wsdl"],"application/wspolicy+xml":["wspolicy"],"application/xaml+xml":["xaml"],"application/xcap-att+xml":["xav"],"application/xcap-caps+xml":["xca"],"application/xcap-diff+xml":["xdf"],"application/xcap-el+xml":["xel"],"application/xcap-ns+xml":["xns"],"application/xenc+xml":["xenc"],"application/xfdf":["xfdf"],"application/xhtml+xml":["xhtml","xht"],"application/xliff+xml":["xlf"],"application/xml":["xml","xsl","xsd","rng"],"application/xml-dtd":["dtd"],"application/xop+xml":["xop"],"application/xproc+xml":["xpl"],"application/xslt+xml":["*xsl","xslt"],"application/xspf+xml":["xspf"],"application/xv+xml":["mxml","xhvml","xvml","xvm"],"application/yang":["yang"],"application/yin+xml":["yin"],"application/zip":["zip"],"audio/3gpp":["*3gpp"],"audio/aac":["adts","aac"],"audio/adpcm":["adp"],"audio/amr":["amr"],"audio/basic":["au","snd"],"audio/midi":["mid","midi","kar","rmi"],"audio/mobile-xmf":["mxmf"],"audio/mp3":["*mp3"],"audio/mp4":["m4a","mp4a"],"audio/mpeg":["mpga","mp2","mp2a","mp3","m2a","m3a"],"audio/ogg":["oga","ogg","spx","opus"],"audio/s3m":["s3m"],"audio/silk":["sil"],"audio/wav":["wav"],"audio/wave":["*wav"],"audio/webm":["weba"],"audio/xm":["xm"],"font/collection":["ttc"],"font/otf":["otf"],"font/ttf":["ttf"],"font/woff":["woff"],"font/woff2":["woff2"],"image/aces":["exr"],"image/apng":["apng"],"image/avci":["avci"],"image/avcs":["avcs"],"image/avif":["avif"],"image/bmp":["bmp","dib"],"image/cgm":["cgm"],"image/dicom-rle":["drle"],"image/dpx":["dpx"],"image/emf":["emf"],"image/fits":["fits"],"image/g3fax":["g3"],"image/gif":["gif"],"image/heic":["heic"],"image/heic-sequence":["heics"],"image/heif":["heif"],"image/heif-sequence":["heifs"],"image/hej2k":["hej2"],"image/hsj2":["hsj2"],"image/ief":["ief"],"image/jls":["jls"],"image/jp2":["jp2","jpg2"],"image/jpeg":["jpeg","jpg","jpe"],"image/jph":["jph"],"image/jphc":["jhc"],"image/jpm":["jpm","jpgm"],"image/jpx":["jpx","jpf"],"image/jxr":["jxr"],"image/jxra":["jxra"],"image/jxrs":["jxrs"],"image/jxs":["jxs"],"image/jxsc":["jxsc"],"image/jxsi":["jxsi"],"image/jxss":["jxss"],"image/ktx":["ktx"],"image/ktx2":["ktx2"],"image/png":["png"],"image/sgi":["sgi"],"image/svg+xml":["svg","svgz"],"image/t38":["t38"],"image/tiff":["tif","tiff"],"image/tiff-fx":["tfx"],"image/webp":["webp"],"image/wmf":["wmf"],"message/disposition-notification":["disposition-notification"],"message/global":["u8msg"],"message/global-delivery-status":["u8dsn"],"message/global-disposition-notification":["u8mdn"],"message/global-headers":["u8hdr"],"message/rfc822":["eml","mime"],"model/3mf":["3mf"],"model/gltf+json":["gltf"],"model/gltf-binary":["glb"],"model/iges":["igs","iges"],"model/jt":["jt"],"model/mesh":["msh","mesh","silo"],"model/mtl":["mtl"],"model/obj":["obj"],"model/prc":["prc"],"model/step+xml":["stpx"],"model/step+zip":["stpz"],"model/step-xml+zip":["stpxz"],"model/stl":["stl"],"model/u3d":["u3d"],"model/vrml":["wrl","vrml"],"model/x3d+binary":["*x3db","x3dbz"],"model/x3d+fastinfoset":["x3db"],"model/x3d+vrml":["*x3dv","x3dvz"],"model/x3d+xml":["x3d","x3dz"],"model/x3d-vrml":["x3dv"],"text/cache-manifest":["appcache","manifest"],"text/calendar":["ics","ifb"],"text/coffeescript":["coffee","litcoffee"],"text/css":["css"],"text/csv":["csv"],"text/html":["html","htm","shtml"],"text/jade":["jade"],"text/javascript":["js","mjs"],"text/jsx":["jsx"],"text/less":["less"],"text/markdown":["md","markdown"],"text/mathml":["mml"],"text/mdx":["mdx"],"text/n3":["n3"],"text/plain":["txt","text","conf","def","list","log","in","ini"],"text/richtext":["rtx"],"text/rtf":["*rtf"],"text/sgml":["sgml","sgm"],"text/shex":["shex"],"text/slim":["slim","slm"],"text/spdx":["spdx"],"text/stylus":["stylus","styl"],"text/tab-separated-values":["tsv"],"text/troff":["t","tr","roff","man","me","ms"],"text/turtle":["ttl"],"text/uri-list":["uri","uris","urls"],"text/vcard":["vcard"],"text/vtt":["vtt"],"text/wgsl":["wgsl"],"text/xml":["*xml"],"text/yaml":["yaml","yml"],"video/3gpp":["3gp","3gpp"],"video/3gpp2":["3g2"],"video/h261":["h261"],"video/h263":["h263"],"video/h264":["h264"],"video/iso.segment":["m4s"],"video/jpeg":["jpgv"],"video/jpm":["*jpm","*jpgm"],"video/mj2":["mj2","mjp2"],"video/mp2t":["ts"],"video/mp4":["mp4","mp4v","mpg4"],"video/mpeg":["mpeg","mpg","mpe","m1v","m2v"],"video/ogg":["ogv"],"video/quicktime":["qt","mov"],"video/webm":["webm"]};Object.freeze(ko);var Vo=ko;var we=function(e,t,i,a){if(i==="a"&&!a)throw new TypeError("Private accessor was defined without a getter");if(typeof t=="function"?e!==t||!a:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return i==="m"?a:i==="a"?a.call(e):a?a.value:t.get(e)},yt,Wt,lt,ya=class{constructor(...t){yt.set(this,new Map),Wt.set(this,new Map),lt.set(this,new Map);for(let i of t)this.define(i)}define(t,i=!1){for(let[a,n]of Object.entries(t)){a=a.toLowerCase(),n=n.map(r=>r.toLowerCase()),we(this,lt,"f").has(a)||we(this,lt,"f").set(a,new Set);let o=we(this,lt,"f").get(a),l=!0;for(let r of n){let s=r.startsWith("*");if(r=s?r.slice(1):r,o?.add(r),l&&we(this,Wt,"f").set(a,r),l=!1,s)continue;let p=we(this,yt,"f").get(r);if(p&&p!=a&&!i)throw new Error(`"${a} -> ${r}" conflicts with "${p} -> ${r}". Pass \`force=true\` to override this definition.`);we(this,yt,"f").set(r,a)}}return this}getType(t){if(typeof t!="string")return null;let i=t.replace(/^.*[/\\]/,"").toLowerCase(),a=i.replace(/^.*\./,"").toLowerCase(),n=i.length{throw new Error("define() not allowed for built-in Mime objects. See https://github.com/broofa/mime/blob/main/README.md#custom-mime-instances")},Object.freeze(this);for(let t of we(this,lt,"f").values())Object.freeze(t);return this}_getTestState(){return{types:we(this,yt,"f"),extensions:we(this,Wt,"f")}}};yt=new WeakMap,Wt=new WeakMap,lt=new WeakMap;var _a=ya;var Go=new _a(Vo,Bo)._freeze();var Uo=({addFilter:e,utils:t})=>{let{Type:i,replaceInString:a,toNaturalFileSize:n}=t;return e("ALLOW_HOPPER_ITEM",(o,{query:l})=>{if(!l("GET_ALLOW_FILE_SIZE_VALIDATION"))return!0;let r=l("GET_MAX_FILE_SIZE");if(r!==null&&o.size>r)return!1;let s=l("GET_MIN_FILE_SIZE");return!(s!==null&&o.sizenew Promise((r,s)=>{if(!l("GET_ALLOW_FILE_SIZE_VALIDATION"))return r(o);let p=l("GET_FILE_VALIDATE_SIZE_FILTER");if(p&&!p(o))return r(o);let c=l("GET_MAX_FILE_SIZE");if(c!==null&&o.size>c){s({status:{main:l("GET_LABEL_MAX_FILE_SIZE_EXCEEDED"),sub:a(l("GET_LABEL_MAX_FILE_SIZE"),{filesize:n(c,".",l("GET_FILE_SIZE_BASE"),l("GET_FILE_SIZE_LABELS",l))})}});return}let d=l("GET_MIN_FILE_SIZE");if(d!==null&&o.sizef+h.fileSize,0)>m){s({status:{main:l("GET_LABEL_MAX_TOTAL_FILE_SIZE_EXCEEDED"),sub:a(l("GET_LABEL_MAX_TOTAL_FILE_SIZE"),{filesize:n(m,".",l("GET_FILE_SIZE_BASE"),l("GET_FILE_SIZE_LABELS",l))})}});return}r(o)})),{options:{allowFileSizeValidation:[!0,i.BOOLEAN],maxFileSize:[null,i.INT],minFileSize:[null,i.INT],maxTotalFileSize:[null,i.INT],fileValidateSizeFilter:[null,i.FUNCTION],labelMinFileSizeExceeded:["File is too small",i.STRING],labelMinFileSize:["Minimum file size is {filesize}",i.STRING],labelMaxFileSizeExceeded:["File is too large",i.STRING],labelMaxFileSize:["Maximum file size is {filesize}",i.STRING],labelMaxTotalFileSizeExceeded:["Maximum total size exceeded",i.STRING],labelMaxTotalFileSize:["Maximum total file size is {filesize}",i.STRING]}}},Xp=typeof window<"u"&&typeof window.document<"u";Xp&&document.dispatchEvent(new CustomEvent("FilePond:pluginloaded",{detail:Uo}));var Wo=Uo;var Ho=({addFilter:e,utils:t})=>{let{Type:i,isString:a,replaceInString:n,guesstimateMimeType:o,getExtensionFromFilename:l,getFilenameFromURL:r}=t,s=(u,f)=>{let h=(/^[^/]+/.exec(u)||[]).pop(),g=f.slice(0,-2);return h===g},p=(u,f)=>u.some(h=>/\*$/.test(h)?s(f,h):h===f),c=u=>{let f="";if(a(u)){let h=r(u),g=l(h);g&&(f=o(g))}else f=u.type;return f},d=(u,f,h)=>{if(f.length===0)return!0;let g=c(u);return h?new Promise((I,E)=>{h(u,g).then(T=>{p(f,T)?I():E()}).catch(E)}):p(f,g)},m=u=>f=>u[f]===null?!1:u[f]||f;return e("SET_ATTRIBUTE_TO_OPTION_MAP",u=>Object.assign(u,{accept:"acceptedFileTypes"})),e("ALLOW_HOPPER_ITEM",(u,{query:f})=>f("GET_ALLOW_FILE_TYPE_VALIDATION")?d(u,f("GET_ACCEPTED_FILE_TYPES")):!0),e("LOAD_FILE",(u,{query:f})=>new Promise((h,g)=>{if(!f("GET_ALLOW_FILE_TYPE_VALIDATION")){h(u);return}let I=f("GET_ACCEPTED_FILE_TYPES"),E=f("GET_FILE_VALIDATE_TYPE_DETECT_TYPE"),T=d(u,I,E),v=()=>{let y=I.map(m(f("GET_FILE_VALIDATE_TYPE_LABEL_EXPECTED_TYPES_MAP"))).filter(w=>w!==!1),b=y.filter((w,x)=>y.indexOf(w)===x);g({status:{main:f("GET_LABEL_FILE_TYPE_NOT_ALLOWED"),sub:n(f("GET_FILE_VALIDATE_TYPE_LABEL_EXPECTED_TYPES"),{allTypes:b.join(", "),allButLastType:b.slice(0,-1).join(", "),lastType:b[b.length-1]})}})};if(typeof T=="boolean")return T?h(u):v();T.then(()=>{h(u)}).catch(v)})),{options:{allowFileTypeValidation:[!0,i.BOOLEAN],acceptedFileTypes:[[],i.ARRAY],labelFileTypeNotAllowed:["File is of invalid type",i.STRING],fileValidateTypeLabelExpectedTypes:["Expects {allButLastType} or {lastType}",i.STRING],fileValidateTypeLabelExpectedTypesMap:[{},i.OBJECT],fileValidateTypeDetectType:[null,i.FUNCTION]}}},Qp=typeof window<"u"&&typeof window.document<"u";Qp&&document.dispatchEvent(new CustomEvent("FilePond:pluginloaded",{detail:Ho}));var jo=Ho;var qo=e=>/^image/.test(e.type),Yo=({addFilter:e,utils:t})=>{let{Type:i,isFile:a,getNumericAspectRatioFromString:n}=t,o=(p,c)=>!(!qo(p.file)||!c("GET_ALLOW_IMAGE_CROP")),l=p=>typeof p=="object",r=p=>typeof p=="number",s=(p,c)=>p.setMetadata("crop",Object.assign({},p.getMetadata("crop"),c));return e("DID_CREATE_ITEM",(p,{query:c})=>{p.extend("setImageCrop",d=>{if(!(!o(p,c)||!l(center)))return p.setMetadata("crop",d),d}),p.extend("setImageCropCenter",d=>{if(!(!o(p,c)||!l(d)))return s(p,{center:d})}),p.extend("setImageCropZoom",d=>{if(!(!o(p,c)||!r(d)))return s(p,{zoom:Math.max(1,d)})}),p.extend("setImageCropRotation",d=>{if(!(!o(p,c)||!r(d)))return s(p,{rotation:d})}),p.extend("setImageCropFlip",d=>{if(!(!o(p,c)||!l(d)))return s(p,{flip:d})}),p.extend("setImageCropAspectRatio",d=>{if(!o(p,c)||typeof d>"u")return;let m=p.getMetadata("crop"),u=n(d),f={center:{x:.5,y:.5},flip:m?Object.assign({},m.flip):{horizontal:!1,vertical:!1},rotation:0,zoom:1,aspectRatio:u};return p.setMetadata("crop",f),f})}),e("DID_LOAD_ITEM",(p,{query:c})=>new Promise((d,m)=>{let u=p.file;if(!a(u)||!qo(u)||!c("GET_ALLOW_IMAGE_CROP")||p.getMetadata("crop"))return d(p);let h=c("GET_IMAGE_CROP_ASPECT_RATIO");p.setMetadata("crop",{center:{x:.5,y:.5},flip:{horizontal:!1,vertical:!1},rotation:0,zoom:1,aspectRatio:h?n(h):null}),d(p)})),{options:{allowImageCrop:[!0,i.BOOLEAN],imageCropAspectRatio:[null,i.STRING]}}},Zp=typeof window<"u"&&typeof window.document<"u";Zp&&document.dispatchEvent(new CustomEvent("FilePond:pluginloaded",{detail:Yo}));var $o=Yo;var Ra=e=>/^image/.test(e.type),Xo=e=>{let{addFilter:t,utils:i,views:a}=e,{Type:n,createRoute:o,createItemAPI:l=c=>c}=i,{fileActionButton:r}=a;t("SHOULD_REMOVE_ON_REVERT",(c,{item:d,query:m})=>new Promise(u=>{let{file:f}=d,h=m("GET_ALLOW_IMAGE_EDIT")&&m("GET_IMAGE_EDIT_ALLOW_EDIT")&&Ra(f);u(!h)})),t("DID_LOAD_ITEM",(c,{query:d,dispatch:m})=>new Promise((u,f)=>{if(c.origin>1){u(c);return}let{file:h}=c;if(!d("GET_ALLOW_IMAGE_EDIT")||!d("GET_IMAGE_EDIT_INSTANT_EDIT")){u(c);return}if(!Ra(h)){u(c);return}let g=(E,T,v)=>y=>{s.shift(),y?T(E):v(E),m("KICK"),I()},I=()=>{if(!s.length)return;let{item:E,resolve:T,reject:v}=s[0];m("EDIT_ITEM",{id:E.id,handleEditorResponse:g(E,T,v)})};p({item:c,resolve:u,reject:f}),s.length===1&&I()})),t("DID_CREATE_ITEM",(c,{query:d,dispatch:m})=>{c.extend("edit",()=>{m("EDIT_ITEM",{id:c.id})})});let s=[],p=c=>(s.push(c),c);return t("CREATE_VIEW",c=>{let{is:d,view:m,query:u}=c;if(!u("GET_ALLOW_IMAGE_EDIT"))return;let f=u("GET_ALLOW_IMAGE_PREVIEW");if(!(d("file-info")&&!f||d("file")&&f))return;let g=u("GET_IMAGE_EDIT_EDITOR");if(!g)return;g.filepondCallbackBridge||(g.outputData=!0,g.outputFile=!1,g.filepondCallbackBridge={onconfirm:g.onconfirm||(()=>{}),oncancel:g.oncancel||(()=>{})});let I=({root:v,props:y,action:b})=>{let{id:w}=y,{handleEditorResponse:x}=b;g.cropAspectRatio=v.query("GET_IMAGE_CROP_ASPECT_RATIO")||g.cropAspectRatio,g.outputCanvasBackgroundColor=v.query("GET_IMAGE_TRANSFORM_CANVAS_BACKGROUND_COLOR")||g.outputCanvasBackgroundColor;let _=v.query("GET_ITEM",w);if(!_)return;let P=_.file,O=_.getMetadata("crop"),M={center:{x:.5,y:.5},flip:{horizontal:!1,vertical:!1},zoom:1,rotation:0,aspectRatio:null},C=_.getMetadata("resize"),S=_.getMetadata("filter")||null,F=_.getMetadata("filters")||null,R=_.getMetadata("colors")||null,L=_.getMetadata("markup")||null,z={crop:O||M,size:C?{upscale:C.upscale,mode:C.mode,width:C.size.width,height:C.size.height}:null,filter:F?F.id||F.matrix:v.query("GET_ALLOW_IMAGE_FILTER")&&v.query("GET_IMAGE_FILTER_COLOR_MATRIX")&&!R?S:null,color:R,markup:L};g.onconfirm=({data:D})=>{let{crop:k,size:B,filter:X,color:Y,colorMatrix:Q,markup:pe}=D,G={};if(k&&(G.crop=k),B){let H=(_.getMetadata("resize")||{}).size,q={width:B.width,height:B.height};!(q.width&&q.height)&&H&&(q.width=H.width,q.height=H.height),(q.width||q.height)&&(G.resize={upscale:B.upscale,mode:B.mode,size:q})}pe&&(G.markup=pe),G.colors=Y,G.filters=X,G.filter=Q,_.setMetadata(G),g.filepondCallbackBridge.onconfirm(D,l(_)),x&&(g.onclose=()=>{x(!0),g.onclose=null})},g.oncancel=()=>{g.filepondCallbackBridge.oncancel(l(_)),x&&(g.onclose=()=>{x(!1),g.onclose=null})},g.open(P,z)},E=({root:v,props:y})=>{if(!u("GET_IMAGE_EDIT_ALLOW_EDIT"))return;let{id:b}=y,w=u("GET_ITEM",b);if(!w)return;let x=w.file;if(Ra(x))if(v.ref.handleEdit=_=>{_.stopPropagation(),v.dispatch("EDIT_ITEM",{id:b})},f){let _=m.createChildView(r,{label:"edit",icon:u("GET_IMAGE_EDIT_ICON_EDIT"),opacity:0});_.element.classList.add("filepond--action-edit-item"),_.element.dataset.align=u("GET_STYLE_IMAGE_EDIT_BUTTON_EDIT_ITEM_POSITION"),_.on("click",v.ref.handleEdit),v.ref.buttonEditItem=m.appendChildView(_)}else{let _=m.element.querySelector(".filepond--file-info-main"),P=document.createElement("button");P.className="filepond--action-edit-item-alt",P.innerHTML=u("GET_IMAGE_EDIT_ICON_EDIT")+"edit",P.addEventListener("click",v.ref.handleEdit),_.appendChild(P),v.ref.editButton=P}};m.registerDestroyer(({root:v})=>{v.ref.buttonEditItem&&v.ref.buttonEditItem.off("click",v.ref.handleEdit),v.ref.editButton&&v.ref.editButton.removeEventListener("click",v.ref.handleEdit)});let T={EDIT_ITEM:I,DID_LOAD_ITEM:E};if(f){let v=({root:y})=>{y.ref.buttonEditItem&&(y.ref.buttonEditItem.opacity=1)};T.DID_IMAGE_PREVIEW_SHOW=v}m.registerWriter(o(T))}),{options:{allowImageEdit:[!0,n.BOOLEAN],styleImageEditButtonEditItemPosition:["bottom center",n.STRING],imageEditInstantEdit:[!1,n.BOOLEAN],imageEditAllowEdit:[!0,n.BOOLEAN],imageEditIconEdit:['',n.STRING],imageEditEditor:[null,n.OBJECT]}}},Kp=typeof window<"u"&&typeof window.document<"u";Kp&&document.dispatchEvent(new CustomEvent("FilePond:pluginloaded",{detail:Xo}));var Qo=Xo;var Jp=e=>/^image\/jpeg/.test(e.type),rt={JPEG:65496,APP1:65505,EXIF:1165519206,TIFF:18761,Orientation:274,Unknown:65280},st=(e,t,i=!1)=>e.getUint16(t,i),Zo=(e,t,i=!1)=>e.getUint32(t,i),em=e=>new Promise((t,i)=>{let a=new FileReader;a.onload=function(n){let o=new DataView(n.target.result);if(st(o,0)!==rt.JPEG){t(-1);return}let l=o.byteLength,r=2;for(;rtypeof window<"u"&&typeof window.document<"u")(),im=()=>tm,am="data:image/jpg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/4QA6RXhpZgAATU0AKgAAAAgAAwESAAMAAAABAAYAAAEoAAMAAAABAAIAAAITAAMAAAABAAEAAAAAAAD/2wBDAP//////////////////////////////////////////////////////////////////////////////////////wAALCAABAAIBASIA/8QAJgABAAAAAAAAAAAAAAAAAAAAAxABAAAAAAAAAAAAAAAAAAAAAP/aAAgBAQAAPwBH/9k=",Ko,Ti=im()?new Image:{};Ti.onload=()=>Ko=Ti.naturalWidth>Ti.naturalHeight;Ti.src=am;var nm=()=>Ko,Jo=({addFilter:e,utils:t})=>{let{Type:i,isFile:a}=t;return e("DID_LOAD_ITEM",(n,{query:o})=>new Promise((l,r)=>{let s=n.file;if(!a(s)||!Jp(s)||!o("GET_ALLOW_IMAGE_EXIF_ORIENTATION")||!nm())return l(n);em(s).then(p=>{n.setMetadata("exif",{orientation:p}),l(n)})})),{options:{allowImageExifOrientation:[!0,i.BOOLEAN]}}},om=typeof window<"u"&&typeof window.document<"u";om&&document.dispatchEvent(new CustomEvent("FilePond:pluginloaded",{detail:Jo}));var el=Jo;var lm=e=>/^image/.test(e.type),tl=(e,t)=>jt(e.x*t,e.y*t),il=(e,t)=>jt(e.x+t.x,e.y+t.y),rm=e=>{let t=Math.sqrt(e.x*e.x+e.y*e.y);return t===0?{x:0,y:0}:jt(e.x/t,e.y/t)},Ii=(e,t,i)=>{let a=Math.cos(t),n=Math.sin(t),o=jt(e.x-i.x,e.y-i.y);return jt(i.x+a*o.x-n*o.y,i.y+n*o.x+a*o.y)},jt=(e=0,t=0)=>({x:e,y:t}),Te=(e,t,i=1,a)=>{if(typeof e=="string")return parseFloat(e)*i;if(typeof e=="number")return e*(a?t[a]:Math.min(t.width,t.height))},sm=(e,t,i)=>{let a=e.borderStyle||e.lineStyle||"solid",n=e.backgroundColor||e.fontColor||"transparent",o=e.borderColor||e.lineColor||"transparent",l=Te(e.borderWidth||e.lineWidth,t,i),r=e.lineCap||"round",s=e.lineJoin||"round",p=typeof a=="string"?"":a.map(d=>Te(d,t,i)).join(","),c=e.opacity||1;return{"stroke-linecap":r,"stroke-linejoin":s,"stroke-width":l||0,"stroke-dasharray":p,stroke:o,fill:n,opacity:c}},Se=e=>e!=null,cm=(e,t,i=1)=>{let a=Te(e.x,t,i,"width")||Te(e.left,t,i,"width"),n=Te(e.y,t,i,"height")||Te(e.top,t,i,"height"),o=Te(e.width,t,i,"width"),l=Te(e.height,t,i,"height"),r=Te(e.right,t,i,"width"),s=Te(e.bottom,t,i,"height");return Se(n)||(Se(l)&&Se(s)?n=t.height-l-s:n=s),Se(a)||(Se(o)&&Se(r)?a=t.width-o-r:a=r),Se(o)||(Se(a)&&Se(r)?o=t.width-a-r:o=0),Se(l)||(Se(n)&&Se(s)?l=t.height-n-s:l=0),{x:a||0,y:n||0,width:o||0,height:l||0}},dm=e=>e.map((t,i)=>`${i===0?"M":"L"} ${t.x} ${t.y}`).join(" "),Ce=(e,t)=>Object.keys(t).forEach(i=>e.setAttribute(i,t[i])),pm="http://www.w3.org/2000/svg",_t=(e,t)=>{let i=document.createElementNS(pm,e);return t&&Ce(i,t),i},mm=e=>Ce(e,{...e.rect,...e.styles}),um=e=>{let t=e.rect.x+e.rect.width*.5,i=e.rect.y+e.rect.height*.5,a=e.rect.width*.5,n=e.rect.height*.5;return Ce(e,{cx:t,cy:i,rx:a,ry:n,...e.styles})},fm={contain:"xMidYMid meet",cover:"xMidYMid slice"},hm=(e,t)=>{Ce(e,{...e.rect,...e.styles,preserveAspectRatio:fm[t.fit]||"none"})},gm={left:"start",center:"middle",right:"end"},Em=(e,t,i,a)=>{let n=Te(t.fontSize,i,a),o=t.fontFamily||"sans-serif",l=t.fontWeight||"normal",r=gm[t.textAlign]||"start";Ce(e,{...e.rect,...e.styles,"stroke-width":0,"font-weight":l,"font-size":n,"font-family":o,"text-anchor":r}),e.text!==t.text&&(e.text=t.text,e.textContent=t.text.length?t.text:" ")},bm=(e,t,i,a)=>{Ce(e,{...e.rect,...e.styles,fill:"none"});let n=e.childNodes[0],o=e.childNodes[1],l=e.childNodes[2],r=e.rect,s={x:e.rect.x+e.rect.width,y:e.rect.y+e.rect.height};if(Ce(n,{x1:r.x,y1:r.y,x2:s.x,y2:s.y}),!t.lineDecoration)return;o.style.display="none",l.style.display="none";let p=rm({x:s.x-r.x,y:s.y-r.y}),c=Te(.05,i,a);if(t.lineDecoration.indexOf("arrow-begin")!==-1){let d=tl(p,c),m=il(r,d),u=Ii(r,2,m),f=Ii(r,-2,m);Ce(o,{style:"display:block;",d:`M${u.x},${u.y} L${r.x},${r.y} L${f.x},${f.y}`})}if(t.lineDecoration.indexOf("arrow-end")!==-1){let d=tl(p,-c),m=il(s,d),u=Ii(s,2,m),f=Ii(s,-2,m);Ce(l,{style:"display:block;",d:`M${u.x},${u.y} L${s.x},${s.y} L${f.x},${f.y}`})}},Tm=(e,t,i,a)=>{Ce(e,{...e.styles,fill:"none",d:dm(t.points.map(n=>({x:Te(n.x,i,a,"width"),y:Te(n.y,i,a,"height")})))})},vi=e=>t=>_t(e,{id:t.id}),Im=e=>{let t=_t("image",{id:e.id,"stroke-linecap":"round","stroke-linejoin":"round",opacity:"0"});return t.onload=()=>{t.setAttribute("opacity",e.opacity||1)},t.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",e.src),t},vm=e=>{let t=_t("g",{id:e.id,"stroke-linecap":"round","stroke-linejoin":"round"}),i=_t("line");t.appendChild(i);let a=_t("path");t.appendChild(a);let n=_t("path");return t.appendChild(n),t},xm={image:Im,rect:vi("rect"),ellipse:vi("ellipse"),text:vi("text"),path:vi("path"),line:vm},ym={rect:mm,ellipse:um,image:hm,text:Em,path:Tm,line:bm},_m=(e,t)=>xm[e](t),Rm=(e,t,i,a,n)=>{t!=="path"&&(e.rect=cm(i,a,n)),e.styles=sm(i,a,n),ym[t](e,i,a,n)},wm=["x","y","left","top","right","bottom","width","height"],Sm=e=>typeof e=="string"&&/%/.test(e)?parseFloat(e)/100:e,Lm=e=>{let[t,i]=e,a=i.points?{}:wm.reduce((n,o)=>(n[o]=Sm(i[o]),n),{});return[t,{zIndex:0,...i,...a}]},Am=(e,t)=>e[1].zIndex>t[1].zIndex?1:e[1].zIndexe.utils.createView({name:"image-preview-markup",tag:"svg",ignoreRect:!0,mixins:{apis:["width","height","crop","markup","resize","dirty"]},write:({root:t,props:i})=>{if(!i.dirty)return;let{crop:a,resize:n,markup:o}=i,l=i.width,r=i.height,s=a.width,p=a.height;if(n){let{size:u}=n,f=u&&u.width,h=u&&u.height,g=n.mode,I=n.upscale;f&&!h&&(h=f),h&&!f&&(f=h);let E=s{let[f,h]=u,g=_m(f,h);Rm(g,f,h,c,d),t.element.appendChild(g)})}}),Ht=(e,t)=>({x:e,y:t}),Om=(e,t)=>e.x*t.x+e.y*t.y,al=(e,t)=>Ht(e.x-t.x,e.y-t.y),Pm=(e,t)=>Om(al(e,t),al(e,t)),nl=(e,t)=>Math.sqrt(Pm(e,t)),ol=(e,t)=>{let i=e,a=1.5707963267948966,n=t,o=1.5707963267948966-t,l=Math.sin(a),r=Math.sin(n),s=Math.sin(o),p=Math.cos(o),c=i/l,d=c*r,m=c*s;return Ht(p*d,p*m)},Dm=(e,t)=>{let i=e.width,a=e.height,n=ol(i,t),o=ol(a,t),l=Ht(e.x+Math.abs(n.x),e.y-Math.abs(n.y)),r=Ht(e.x+e.width+Math.abs(o.y),e.y+Math.abs(o.x)),s=Ht(e.x-Math.abs(o.y),e.y+e.height-Math.abs(o.x));return{width:nl(l,r),height:nl(l,s)}},Fm=(e,t,i=1)=>{let a=e.height/e.width,n=1,o=t,l=1,r=a;r>o&&(r=o,l=r/a);let s=Math.max(n/l,o/r),p=e.width/(i*s*l),c=p*t;return{width:p,height:c}},rl=(e,t,i,a)=>{let n=a.x>.5?1-a.x:a.x,o=a.y>.5?1-a.y:a.y,l=n*2*e.width,r=o*2*e.height,s=Dm(t,i);return Math.max(s.width/l,s.height/r)},sl=(e,t)=>{let i=e.width,a=i*t;a>e.height&&(a=e.height,i=a/t);let n=(e.width-i)*.5,o=(e.height-a)*.5;return{x:n,y:o,width:i,height:a}},zm=(e,t={})=>{let{zoom:i,rotation:a,center:n,aspectRatio:o}=t;o||(o=e.height/e.width);let l=Fm(e,o,i),r={x:l.width*.5,y:l.height*.5},s={x:0,y:0,width:l.width,height:l.height,center:r},p=typeof t.scaleToFit>"u"||t.scaleToFit,c=rl(e,sl(s,o),a,p?n:{x:.5,y:.5}),d=i*c;return{widthFloat:l.width/d,heightFloat:l.height/d,width:Math.round(l.width/d),height:Math.round(l.height/d)}},ze={type:"spring",stiffness:.5,damping:.45,mass:10},Cm=e=>e.utils.createView({name:"image-bitmap",ignoreRect:!0,mixins:{styles:["scaleX","scaleY"]},create:({root:t,props:i})=>{t.appendChild(i.image)}}),Nm=e=>e.utils.createView({name:"image-canvas-wrapper",tag:"div",ignoreRect:!0,mixins:{apis:["crop","width","height"],styles:["originX","originY","translateX","translateY","scaleX","scaleY","rotateZ"],animations:{originX:ze,originY:ze,scaleX:ze,scaleY:ze,translateX:ze,translateY:ze,rotateZ:ze}},create:({root:t,props:i})=>{i.width=i.image.width,i.height=i.image.height,t.ref.bitmap=t.appendChildView(t.createChildView(Cm(e),{image:i.image}))},write:({root:t,props:i})=>{let{flip:a}=i.crop,{bitmap:n}=t.ref;n.scaleX=a.horizontal?-1:1,n.scaleY=a.vertical?-1:1}}),Bm=e=>e.utils.createView({name:"image-clip",tag:"div",ignoreRect:!0,mixins:{apis:["crop","markup","resize","width","height","dirty","background"],styles:["width","height","opacity"],animations:{opacity:{type:"tween",duration:250}}},didWriteView:function({root:t,props:i}){i.background&&(t.element.style.backgroundColor=i.background)},create:({root:t,props:i})=>{t.ref.image=t.appendChildView(t.createChildView(Nm(e),Object.assign({},i))),t.ref.createMarkup=()=>{t.ref.markup||(t.ref.markup=t.appendChildView(t.createChildView(Mm(e),Object.assign({},i))))},t.ref.destroyMarkup=()=>{t.ref.markup&&(t.removeChildView(t.ref.markup),t.ref.markup=null)};let a=t.query("GET_IMAGE_PREVIEW_TRANSPARENCY_INDICATOR");a!==null&&(a==="grid"?t.element.dataset.transparencyIndicator=a:t.element.dataset.transparencyIndicator="color")},write:({root:t,props:i,shouldOptimize:a})=>{let{crop:n,markup:o,resize:l,dirty:r,width:s,height:p}=i;t.ref.image.crop=n;let c={x:0,y:0,width:s,height:p,center:{x:s*.5,y:p*.5}},d={width:t.ref.image.width,height:t.ref.image.height},m={x:n.center.x*d.width,y:n.center.y*d.height},u={x:c.center.x-d.width*n.center.x,y:c.center.y-d.height*n.center.y},f=Math.PI*2+n.rotation%(Math.PI*2),h=n.aspectRatio||d.height/d.width,g=typeof n.scaleToFit>"u"||n.scaleToFit,I=rl(d,sl(c,h),f,g?n.center:{x:.5,y:.5}),E=n.zoom*I;o&&o.length?(t.ref.createMarkup(),t.ref.markup.width=s,t.ref.markup.height=p,t.ref.markup.resize=l,t.ref.markup.dirty=r,t.ref.markup.markup=o,t.ref.markup.crop=zm(d,n)):t.ref.markup&&t.ref.destroyMarkup();let T=t.ref.image;if(a){T.originX=null,T.originY=null,T.translateX=null,T.translateY=null,T.rotateZ=null,T.scaleX=null,T.scaleY=null;return}T.originX=m.x,T.originY=m.y,T.translateX=u.x,T.translateY=u.y,T.rotateZ=f,T.scaleX=E,T.scaleY=E}}),km=e=>e.utils.createView({name:"image-preview",tag:"div",ignoreRect:!0,mixins:{apis:["image","crop","markup","resize","dirty","background"],styles:["translateY","scaleX","scaleY","opacity"],animations:{scaleX:ze,scaleY:ze,translateY:ze,opacity:{type:"tween",duration:400}}},create:({root:t,props:i})=>{t.ref.clip=t.appendChildView(t.createChildView(Bm(e),{id:i.id,image:i.image,crop:i.crop,markup:i.markup,resize:i.resize,dirty:i.dirty,background:i.background}))},write:({root:t,props:i,shouldOptimize:a})=>{let{clip:n}=t.ref,{image:o,crop:l,markup:r,resize:s,dirty:p}=i;if(n.crop=l,n.markup=r,n.resize=s,n.dirty=p,n.opacity=a?0:1,a||t.rect.element.hidden)return;let c=o.height/o.width,d=l.aspectRatio||c,m=t.rect.inner.width,u=t.rect.inner.height,f=t.query("GET_IMAGE_PREVIEW_HEIGHT"),h=t.query("GET_IMAGE_PREVIEW_MIN_HEIGHT"),g=t.query("GET_IMAGE_PREVIEW_MAX_HEIGHT"),I=t.query("GET_PANEL_ASPECT_RATIO"),E=t.query("GET_ALLOW_MULTIPLE");I&&!E&&(f=m*I,d=I);let T=f!==null?f:Math.max(h,Math.min(m*d,g)),v=T/d;v>m&&(v=m,T=v*d),T>u&&(T=u,v=u/d),n.width=v,n.height=T}}),Vm=` + + + + + + + + + + + + + + + + + +`,ll=0,Gm=e=>e.utils.createView({name:"image-preview-overlay",tag:"div",ignoreRect:!0,create:({root:t,props:i})=>{let a=Vm;if(document.querySelector("base")){let n=new URL(window.location.href.replace(window.location.hash,"")).href;a=a.replace(/url\(\#/g,"url("+n+"#")}ll++,t.element.classList.add(`filepond--image-preview-overlay-${i.status}`),t.element.innerHTML=a.replace(/__UID__/g,ll)},mixins:{styles:["opacity"],animations:{opacity:{type:"spring",mass:25}}}}),Um=function(){self.onmessage=e=>{createImageBitmap(e.data.message.file).then(t=>{self.postMessage({id:e.data.id,message:t},[t])})}},Wm=function(){self.onmessage=e=>{let t=e.data.message.imageData,i=e.data.message.colorMatrix,a=t.data,n=a.length,o=i[0],l=i[1],r=i[2],s=i[3],p=i[4],c=i[5],d=i[6],m=i[7],u=i[8],f=i[9],h=i[10],g=i[11],I=i[12],E=i[13],T=i[14],v=i[15],y=i[16],b=i[17],w=i[18],x=i[19],_=0,P=0,O=0,M=0,C=0;for(;_{let i=new Image;i.onload=()=>{let a=i.naturalWidth,n=i.naturalHeight;i=null,t(a,n)},i.src=e},jm={1:()=>[1,0,0,1,0,0],2:e=>[-1,0,0,1,e,0],3:(e,t)=>[-1,0,0,-1,e,t],4:(e,t)=>[1,0,0,-1,0,t],5:()=>[0,1,1,0,0,0],6:(e,t)=>[0,1,-1,0,t,0],7:(e,t)=>[0,-1,-1,0,t,e],8:e=>[0,-1,1,0,0,e]},qm=(e,t,i,a)=>{a!==-1&&e.transform.apply(e,jm[a](t,i))},Ym=(e,t,i,a)=>{t=Math.round(t),i=Math.round(i);let n=document.createElement("canvas");n.width=t,n.height=i;let o=n.getContext("2d");return a>=5&&a<=8&&([t,i]=[i,t]),qm(o,t,i,a),o.drawImage(e,0,0,t,i),n},cl=e=>/^image/.test(e.type)&&!/svg/.test(e.type),$m=10,Xm=10,Qm=e=>{let t=Math.min($m/e.width,Xm/e.height),i=document.createElement("canvas"),a=i.getContext("2d"),n=i.width=Math.ceil(e.width*t),o=i.height=Math.ceil(e.height*t);a.drawImage(e,0,0,n,o);let l=null;try{l=a.getImageData(0,0,n,o).data}catch{return null}let r=l.length,s=0,p=0,c=0,d=0;for(;dMath.floor(Math.sqrt(e/(t/4))),Zm=(e,t)=>(t=t||document.createElement("canvas"),t.width=e.width,t.height=e.height,t.getContext("2d").drawImage(e,0,0),t),Km=e=>{let t;try{t=new ImageData(e.width,e.height)}catch{t=document.createElement("canvas").getContext("2d").createImageData(e.width,e.height)}return t.data.set(new Uint8ClampedArray(e.data)),t},Jm=e=>new Promise((t,i)=>{let a=new Image;a.crossOrigin="Anonymous",a.onload=()=>{t(a)},a.onerror=n=>{i(n)},a.src=e}),eu=e=>{let t=Gm(e),i=km(e),{createWorker:a}=e.utils,n=(E,T,v)=>new Promise(y=>{E.ref.imageData||(E.ref.imageData=v.getContext("2d").getImageData(0,0,v.width,v.height));let b=Km(E.ref.imageData);if(!T||T.length!==20)return v.getContext("2d").putImageData(b,0,0),y();let w=a(Wm);w.post({imageData:b,colorMatrix:T},x=>{v.getContext("2d").putImageData(x,0,0),w.terminate(),y()},[b.data.buffer])}),o=(E,T)=>{E.removeChildView(T),T.image.width=1,T.image.height=1,T._destroy()},l=({root:E})=>{let T=E.ref.images.shift();return T.opacity=0,T.translateY=-15,E.ref.imageViewBin.push(T),T},r=({root:E,props:T,image:v})=>{let y=T.id,b=E.query("GET_ITEM",{id:y});if(!b)return;let w=b.getMetadata("crop")||{center:{x:.5,y:.5},flip:{horizontal:!1,vertical:!1},zoom:1,rotation:0,aspectRatio:null},x=E.query("GET_IMAGE_TRANSFORM_CANVAS_BACKGROUND_COLOR"),_,P,O=!1;E.query("GET_IMAGE_PREVIEW_MARKUP_SHOW")&&(_=b.getMetadata("markup")||[],P=b.getMetadata("resize"),O=!0);let M=E.appendChildView(E.createChildView(i,{id:y,image:v,crop:w,resize:P,markup:_,dirty:O,background:x,opacity:0,scaleX:1.15,scaleY:1.15,translateY:15}),E.childViews.length);E.ref.images.push(M),M.opacity=1,M.scaleX=1,M.scaleY=1,M.translateY=0,setTimeout(()=>{E.dispatch("DID_IMAGE_PREVIEW_SHOW",{id:y})},250)},s=({root:E,props:T})=>{let v=E.query("GET_ITEM",{id:T.id});if(!v)return;let y=E.ref.images[E.ref.images.length-1];y.crop=v.getMetadata("crop"),y.background=E.query("GET_IMAGE_TRANSFORM_CANVAS_BACKGROUND_COLOR"),E.query("GET_IMAGE_PREVIEW_MARKUP_SHOW")&&(y.dirty=!0,y.resize=v.getMetadata("resize"),y.markup=v.getMetadata("markup"))},p=({root:E,props:T,action:v})=>{if(!/crop|filter|markup|resize/.test(v.change.key)||!E.ref.images.length)return;let y=E.query("GET_ITEM",{id:T.id});if(y){if(/filter/.test(v.change.key)){let b=E.ref.images[E.ref.images.length-1];n(E,v.change.value,b.image);return}if(/crop|markup|resize/.test(v.change.key)){let b=y.getMetadata("crop"),w=E.ref.images[E.ref.images.length-1];if(b&&b.aspectRatio&&w.crop&&w.crop.aspectRatio&&Math.abs(b.aspectRatio-w.crop.aspectRatio)>1e-5){let x=l({root:E});r({root:E,props:T,image:Zm(x.image)})}else s({root:E,props:T})}}},c=E=>{let v=window.navigator.userAgent.match(/Firefox\/([0-9]+)\./),y=v?parseInt(v[1]):null;return y!==null&&y<=58?!1:"createImageBitmap"in window&&cl(E)},d=({root:E,props:T})=>{let{id:v}=T,y=E.query("GET_ITEM",v);if(!y)return;let b=URL.createObjectURL(y.file);Hm(b,(w,x)=>{E.dispatch("DID_IMAGE_PREVIEW_CALCULATE_SIZE",{id:v,width:w,height:x})})},m=({root:E,props:T})=>{let{id:v}=T,y=E.query("GET_ITEM",v);if(!y)return;let b=URL.createObjectURL(y.file),w=()=>{Jm(b).then(x)},x=_=>{URL.revokeObjectURL(b);let O=(y.getMetadata("exif")||{}).orientation||-1,{width:M,height:C}=_;if(!M||!C)return;O>=5&&O<=8&&([M,C]=[C,M]);let S=Math.max(1,window.devicePixelRatio*.75),R=E.query("GET_IMAGE_PREVIEW_ZOOM_FACTOR")*S,L=C/M,z=E.rect.element.width,D=E.rect.element.height,k=z,B=k*L;L>1?(k=Math.min(M,z*R),B=k*L):(B=Math.min(C,D*R),k=B/L);let X=Ym(_,k,B,O),Y=()=>{let pe=E.query("GET_IMAGE_PREVIEW_CALCULATE_AVERAGE_IMAGE_COLOR")?Qm(data):null;y.setMetadata("color",pe,!0),"close"in _&&_.close(),E.ref.overlayShadow.opacity=1,r({root:E,props:T,image:X})},Q=y.getMetadata("filter");Q?n(E,Q,X).then(Y):Y()};if(c(y.file)){let _=a(Um);_.post({file:y.file},P=>{if(_.terminate(),!P){w();return}x(P)})}else w()},u=({root:E})=>{let T=E.ref.images[E.ref.images.length-1];T.translateY=0,T.scaleX=1,T.scaleY=1,T.opacity=1},f=({root:E})=>{E.ref.overlayShadow.opacity=1,E.ref.overlayError.opacity=0,E.ref.overlaySuccess.opacity=0},h=({root:E})=>{E.ref.overlayShadow.opacity=.25,E.ref.overlayError.opacity=1},g=({root:E})=>{E.ref.overlayShadow.opacity=.25,E.ref.overlaySuccess.opacity=1},I=({root:E})=>{E.ref.images=[],E.ref.imageData=null,E.ref.imageViewBin=[],E.ref.overlayShadow=E.appendChildView(E.createChildView(t,{opacity:0,status:"idle"})),E.ref.overlaySuccess=E.appendChildView(E.createChildView(t,{opacity:0,status:"success"})),E.ref.overlayError=E.appendChildView(E.createChildView(t,{opacity:0,status:"failure"}))};return e.utils.createView({name:"image-preview-wrapper",create:I,styles:["height"],apis:["height"],destroy:({root:E})=>{E.ref.images.forEach(T=>{T.image.width=1,T.image.height=1})},didWriteView:({root:E})=>{E.ref.images.forEach(T=>{T.dirty=!1})},write:e.utils.createRoute({DID_IMAGE_PREVIEW_DRAW:u,DID_IMAGE_PREVIEW_CONTAINER_CREATE:d,DID_FINISH_CALCULATE_PREVIEWSIZE:m,DID_UPDATE_ITEM_METADATA:p,DID_THROW_ITEM_LOAD_ERROR:h,DID_THROW_ITEM_PROCESSING_ERROR:h,DID_THROW_ITEM_INVALID:h,DID_COMPLETE_ITEM_PROCESSING:g,DID_START_ITEM_PROCESSING:f,DID_REVERT_ITEM_PROCESSING:f},({root:E})=>{let T=E.ref.imageViewBin.filter(v=>v.opacity===0);E.ref.imageViewBin=E.ref.imageViewBin.filter(v=>v.opacity>0),T.forEach(v=>o(E,v)),T.length=0})})},dl=e=>{let{addFilter:t,utils:i}=e,{Type:a,createRoute:n,isFile:o}=i,l=eu(e);return t("CREATE_VIEW",r=>{let{is:s,view:p,query:c}=r;if(!s("file")||!c("GET_ALLOW_IMAGE_PREVIEW"))return;let d=({root:g,props:I})=>{let{id:E}=I,T=c("GET_ITEM",E);if(!T||!o(T.file)||T.archived)return;let v=T.file;if(!lm(v)||!c("GET_IMAGE_PREVIEW_FILTER_ITEM")(T))return;let y="createImageBitmap"in(window||{}),b=c("GET_IMAGE_PREVIEW_MAX_FILE_SIZE");if(!y&&b&&v.size>b)return;g.ref.imagePreview=p.appendChildView(p.createChildView(l,{id:E}));let w=g.query("GET_IMAGE_PREVIEW_HEIGHT");w&&g.dispatch("DID_UPDATE_PANEL_HEIGHT",{id:T.id,height:w});let x=!y&&v.size>c("GET_IMAGE_PREVIEW_MAX_INSTANT_PREVIEW_FILE_SIZE");g.dispatch("DID_IMAGE_PREVIEW_CONTAINER_CREATE",{id:E},x)},m=(g,I)=>{if(!g.ref.imagePreview)return;let{id:E}=I,T=g.query("GET_ITEM",{id:E});if(!T)return;let v=g.query("GET_PANEL_ASPECT_RATIO"),y=g.query("GET_ITEM_PANEL_ASPECT_RATIO"),b=g.query("GET_IMAGE_PREVIEW_HEIGHT");if(v||y||b)return;let{imageWidth:w,imageHeight:x}=g.ref;if(!w||!x)return;let _=g.query("GET_IMAGE_PREVIEW_MIN_HEIGHT"),P=g.query("GET_IMAGE_PREVIEW_MAX_HEIGHT"),M=(T.getMetadata("exif")||{}).orientation||-1;if(M>=5&&M<=8&&([w,x]=[x,w]),!cl(T.file)||g.query("GET_IMAGE_PREVIEW_UPSCALE")){let z=2048/w;w*=z,x*=z}let C=x/w,S=(T.getMetadata("crop")||{}).aspectRatio||C,F=Math.max(_,Math.min(x,P)),R=g.rect.element.width,L=Math.min(R*S,F);g.dispatch("DID_UPDATE_PANEL_HEIGHT",{id:T.id,height:L})},u=({root:g})=>{g.ref.shouldRescale=!0},f=({root:g,action:I})=>{I.change.key==="crop"&&(g.ref.shouldRescale=!0)},h=({root:g,action:I})=>{g.ref.imageWidth=I.width,g.ref.imageHeight=I.height,g.ref.shouldRescale=!0,g.ref.shouldDrawPreview=!0,g.dispatch("KICK")};p.registerWriter(n({DID_RESIZE_ROOT:u,DID_STOP_RESIZE:u,DID_LOAD_ITEM:d,DID_IMAGE_PREVIEW_CALCULATE_SIZE:h,DID_UPDATE_ITEM_METADATA:f},({root:g,props:I})=>{g.ref.imagePreview&&(g.rect.element.hidden||(g.ref.shouldRescale&&(m(g,I),g.ref.shouldRescale=!1),g.ref.shouldDrawPreview&&(requestAnimationFrame(()=>{requestAnimationFrame(()=>{g.dispatch("DID_FINISH_CALCULATE_PREVIEWSIZE",{id:I.id})})}),g.ref.shouldDrawPreview=!1)))}))}),{options:{allowImagePreview:[!0,a.BOOLEAN],imagePreviewFilterItem:[()=>!0,a.FUNCTION],imagePreviewHeight:[null,a.INT],imagePreviewMinHeight:[44,a.INT],imagePreviewMaxHeight:[256,a.INT],imagePreviewMaxFileSize:[null,a.INT],imagePreviewZoomFactor:[2,a.INT],imagePreviewUpscale:[!1,a.BOOLEAN],imagePreviewMaxInstantPreviewFileSize:[1e6,a.INT],imagePreviewTransparencyIndicator:[null,a.STRING],imagePreviewCalculateAverageImageColor:[!1,a.BOOLEAN],imagePreviewMarkupShow:[!0,a.BOOLEAN],imagePreviewMarkupFilter:[()=>!0,a.FUNCTION]}}},tu=typeof window<"u"&&typeof window.document<"u";tu&&document.dispatchEvent(new CustomEvent("FilePond:pluginloaded",{detail:dl}));var pl=dl;var iu=e=>/^image/.test(e.type),au=(e,t)=>{let i=new Image;i.onload=()=>{let a=i.naturalWidth,n=i.naturalHeight;i=null,t({width:a,height:n})},i.onerror=()=>t(null),i.src=e},ml=({addFilter:e,utils:t})=>{let{Type:i}=t;return e("DID_LOAD_ITEM",(a,{query:n})=>new Promise((o,l)=>{let r=a.file;if(!iu(r)||!n("GET_ALLOW_IMAGE_RESIZE"))return o(a);let s=n("GET_IMAGE_RESIZE_MODE"),p=n("GET_IMAGE_RESIZE_TARGET_WIDTH"),c=n("GET_IMAGE_RESIZE_TARGET_HEIGHT"),d=n("GET_IMAGE_RESIZE_UPSCALE");if(p===null&&c===null)return o(a);let m=p===null?c:p,u=c===null?m:c,f=URL.createObjectURL(r);au(f,h=>{if(URL.revokeObjectURL(f),!h)return o(a);let{width:g,height:I}=h,E=(a.getMetadata("exif")||{}).orientation||-1;if(E>=5&&E<=8&&([g,I]=[I,g]),g===m&&I===u)return o(a);if(!d){if(s==="cover"){if(g<=m||I<=u)return o(a)}else if(g<=m&&I<=m)return o(a)}a.setMetadata("resize",{mode:s,upscale:d,size:{width:m,height:u}}),o(a)})})),{options:{allowImageResize:[!0,i.BOOLEAN],imageResizeMode:["cover",i.STRING],imageResizeUpscale:[!0,i.BOOLEAN],imageResizeTargetWidth:[null,i.INT],imageResizeTargetHeight:[null,i.INT]}}},nu=typeof window<"u"&&typeof window.document<"u";nu&&document.dispatchEvent(new CustomEvent("FilePond:pluginloaded",{detail:ml}));var ul=ml;var ou=e=>/^image/.test(e.type),lu=e=>e.substr(0,e.lastIndexOf("."))||e,ru={jpeg:"jpg","svg+xml":"svg"},su=(e,t)=>{let i=lu(e),a=t.split("/")[1],n=ru[a]||a;return`${i}.${n}`},cu=e=>/jpeg|png|svg\+xml/.test(e)?e:"image/jpeg",du=e=>/^image/.test(e.type),pu={1:()=>[1,0,0,1,0,0],2:e=>[-1,0,0,1,e,0],3:(e,t)=>[-1,0,0,-1,e,t],4:(e,t)=>[1,0,0,-1,0,t],5:()=>[0,1,1,0,0,0],6:(e,t)=>[0,1,-1,0,t,0],7:(e,t)=>[0,-1,-1,0,t,e],8:e=>[0,-1,1,0,0,e]},mu=(e,t,i)=>(i===-1&&(i=1),pu[i](e,t)),qt=(e,t)=>({x:e,y:t}),uu=(e,t)=>e.x*t.x+e.y*t.y,fl=(e,t)=>qt(e.x-t.x,e.y-t.y),fu=(e,t)=>uu(fl(e,t),fl(e,t)),hl=(e,t)=>Math.sqrt(fu(e,t)),gl=(e,t)=>{let i=e,a=1.5707963267948966,n=t,o=1.5707963267948966-t,l=Math.sin(a),r=Math.sin(n),s=Math.sin(o),p=Math.cos(o),c=i/l,d=c*r,m=c*s;return qt(p*d,p*m)},hu=(e,t)=>{let i=e.width,a=e.height,n=gl(i,t),o=gl(a,t),l=qt(e.x+Math.abs(n.x),e.y-Math.abs(n.y)),r=qt(e.x+e.width+Math.abs(o.y),e.y+Math.abs(o.x)),s=qt(e.x-Math.abs(o.y),e.y+e.height-Math.abs(o.x));return{width:hl(l,r),height:hl(l,s)}},Tl=(e,t,i=0,a={x:.5,y:.5})=>{let n=a.x>.5?1-a.x:a.x,o=a.y>.5?1-a.y:a.y,l=n*2*e.width,r=o*2*e.height,s=hu(t,i);return Math.max(s.width/l,s.height/r)},Il=(e,t)=>{let i=e.width,a=i*t;a>e.height&&(a=e.height,i=a/t);let n=(e.width-i)*.5,o=(e.height-a)*.5;return{x:n,y:o,width:i,height:a}},El=(e,t,i=1)=>{let a=e.height/e.width,n=1,o=t,l=1,r=a;r>o&&(r=o,l=r/a);let s=Math.max(n/l,o/r),p=e.width/(i*s*l),c=p*t;return{width:p,height:c}},vl=e=>{e.width=1,e.height=1,e.getContext("2d").clearRect(0,0,1,1)},bl=e=>e&&(e.horizontal||e.vertical),gu=(e,t,i)=>{if(t<=1&&!bl(i))return e.width=e.naturalWidth,e.height=e.naturalHeight,e;let a=document.createElement("canvas"),n=e.naturalWidth,o=e.naturalHeight,l=t>=5&&t<=8;l?(a.width=o,a.height=n):(a.width=n,a.height=o);let r=a.getContext("2d");if(t&&r.transform.apply(r,mu(n,o,t)),bl(i)){let s=[1,0,0,1,0,0];(!l&&i.horizontal||l&i.vertical)&&(s[0]=-1,s[4]=n),(!l&&i.vertical||l&&i.horizontal)&&(s[3]=-1,s[5]=o),r.transform(...s)}return r.drawImage(e,0,0,n,o),a},Eu=(e,t,i={},a={})=>{let{canvasMemoryLimit:n,background:o=null}=a,l=i.zoom||1,r=gu(e,t,i.flip),s={width:r.width,height:r.height},p=i.aspectRatio||s.height/s.width,c=El(s,p,l);if(n){let T=c.width*c.height;if(T>n){let v=Math.sqrt(n)/Math.sqrt(T);s.width=Math.floor(s.width*v),s.height=Math.floor(s.height*v),c=El(s,p,l)}}let d=document.createElement("canvas"),m={x:c.width*.5,y:c.height*.5},u={x:0,y:0,width:c.width,height:c.height,center:m},f=typeof i.scaleToFit>"u"||i.scaleToFit,h=l*Tl(s,Il(u,p),i.rotation,f?i.center:{x:.5,y:.5});d.width=Math.round(c.width/h),d.height=Math.round(c.height/h),m.x/=h,m.y/=h;let g={x:m.x-s.width*(i.center?i.center.x:.5),y:m.y-s.height*(i.center?i.center.y:.5)},I=d.getContext("2d");o&&(I.fillStyle=o,I.fillRect(0,0,d.width,d.height)),I.translate(m.x,m.y),I.rotate(i.rotation||0),I.drawImage(r,g.x-m.x,g.y-m.y,s.width,s.height);let E=I.getImageData(0,0,d.width,d.height);return vl(d),E},bu=(()=>typeof window<"u"&&typeof window.document<"u")();bu&&(HTMLCanvasElement.prototype.toBlob||Object.defineProperty(HTMLCanvasElement.prototype,"toBlob",{value:function(e,t,i){var a=this.toDataURL(t,i).split(",")[1];setTimeout(function(){for(var n=atob(a),o=n.length,l=new Uint8Array(o),r=0;rnew Promise(a=>{let n=i?i(e):e;Promise.resolve(n).then(o=>{o.toBlob(a,t.type,t.quality)})}),yi=(e,t)=>Yt(e.x*t,e.y*t),_i=(e,t)=>Yt(e.x+t.x,e.y+t.y),xl=e=>{let t=Math.sqrt(e.x*e.x+e.y*e.y);return t===0?{x:0,y:0}:Yt(e.x/t,e.y/t)},Ye=(e,t,i)=>{let a=Math.cos(t),n=Math.sin(t),o=Yt(e.x-i.x,e.y-i.y);return Yt(i.x+a*o.x-n*o.y,i.y+n*o.x+a*o.y)},Yt=(e=0,t=0)=>({x:e,y:t}),me=(e,t,i=1,a)=>{if(typeof e=="string")return parseFloat(e)*i;if(typeof e=="number")return e*(a?t[a]:Math.min(t.width,t.height))},ct=(e,t,i)=>{let a=e.borderStyle||e.lineStyle||"solid",n=e.backgroundColor||e.fontColor||"transparent",o=e.borderColor||e.lineColor||"transparent",l=me(e.borderWidth||e.lineWidth,t,i),r=e.lineCap||"round",s=e.lineJoin||"round",p=typeof a=="string"?"":a.map(d=>me(d,t,i)).join(","),c=e.opacity||1;return{"stroke-linecap":r,"stroke-linejoin":s,"stroke-width":l||0,"stroke-dasharray":p,stroke:o,fill:n,opacity:c}},Le=e=>e!=null,wt=(e,t,i=1)=>{let a=me(e.x,t,i,"width")||me(e.left,t,i,"width"),n=me(e.y,t,i,"height")||me(e.top,t,i,"height"),o=me(e.width,t,i,"width"),l=me(e.height,t,i,"height"),r=me(e.right,t,i,"width"),s=me(e.bottom,t,i,"height");return Le(n)||(Le(l)&&Le(s)?n=t.height-l-s:n=s),Le(a)||(Le(o)&&Le(r)?a=t.width-o-r:a=r),Le(o)||(Le(a)&&Le(r)?o=t.width-a-r:o=0),Le(l)||(Le(n)&&Le(s)?l=t.height-n-s:l=0),{x:a||0,y:n||0,width:o||0,height:l||0}},Iu=e=>e.map((t,i)=>`${i===0?"M":"L"} ${t.x} ${t.y}`).join(" "),Ne=(e,t)=>Object.keys(t).forEach(i=>e.setAttribute(i,t[i])),vu="http://www.w3.org/2000/svg",Rt=(e,t)=>{let i=document.createElementNS(vu,e);return t&&Ne(i,t),i},xu=e=>Ne(e,{...e.rect,...e.styles}),yu=e=>{let t=e.rect.x+e.rect.width*.5,i=e.rect.y+e.rect.height*.5,a=e.rect.width*.5,n=e.rect.height*.5;return Ne(e,{cx:t,cy:i,rx:a,ry:n,...e.styles})},_u={contain:"xMidYMid meet",cover:"xMidYMid slice"},Ru=(e,t)=>{Ne(e,{...e.rect,...e.styles,preserveAspectRatio:_u[t.fit]||"none"})},wu={left:"start",center:"middle",right:"end"},Su=(e,t,i,a)=>{let n=me(t.fontSize,i,a),o=t.fontFamily||"sans-serif",l=t.fontWeight||"normal",r=wu[t.textAlign]||"start";Ne(e,{...e.rect,...e.styles,"stroke-width":0,"font-weight":l,"font-size":n,"font-family":o,"text-anchor":r}),e.text!==t.text&&(e.text=t.text,e.textContent=t.text.length?t.text:" ")},Lu=(e,t,i,a)=>{Ne(e,{...e.rect,...e.styles,fill:"none"});let n=e.childNodes[0],o=e.childNodes[1],l=e.childNodes[2],r=e.rect,s={x:e.rect.x+e.rect.width,y:e.rect.y+e.rect.height};if(Ne(n,{x1:r.x,y1:r.y,x2:s.x,y2:s.y}),!t.lineDecoration)return;o.style.display="none",l.style.display="none";let p=xl({x:s.x-r.x,y:s.y-r.y}),c=me(.05,i,a);if(t.lineDecoration.indexOf("arrow-begin")!==-1){let d=yi(p,c),m=_i(r,d),u=Ye(r,2,m),f=Ye(r,-2,m);Ne(o,{style:"display:block;",d:`M${u.x},${u.y} L${r.x},${r.y} L${f.x},${f.y}`})}if(t.lineDecoration.indexOf("arrow-end")!==-1){let d=yi(p,-c),m=_i(s,d),u=Ye(s,2,m),f=Ye(s,-2,m);Ne(l,{style:"display:block;",d:`M${u.x},${u.y} L${s.x},${s.y} L${f.x},${f.y}`})}},Au=(e,t,i,a)=>{Ne(e,{...e.styles,fill:"none",d:Iu(t.points.map(n=>({x:me(n.x,i,a,"width"),y:me(n.y,i,a,"height")})))})},xi=e=>t=>Rt(e,{id:t.id}),Mu=e=>{let t=Rt("image",{id:e.id,"stroke-linecap":"round","stroke-linejoin":"round",opacity:"0"});return t.onload=()=>{t.setAttribute("opacity",e.opacity||1)},t.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",e.src),t},Ou=e=>{let t=Rt("g",{id:e.id,"stroke-linecap":"round","stroke-linejoin":"round"}),i=Rt("line");t.appendChild(i);let a=Rt("path");t.appendChild(a);let n=Rt("path");return t.appendChild(n),t},Pu={image:Mu,rect:xi("rect"),ellipse:xi("ellipse"),text:xi("text"),path:xi("path"),line:Ou},Du={rect:xu,ellipse:yu,image:Ru,text:Su,path:Au,line:Lu},Fu=(e,t)=>Pu[e](t),zu=(e,t,i,a,n)=>{t!=="path"&&(e.rect=wt(i,a,n)),e.styles=ct(i,a,n),Du[t](e,i,a,n)},yl=(e,t)=>e[1].zIndex>t[1].zIndex?1:e[1].zIndexnew Promise(n=>{let{background:o=null}=a,l=new FileReader;l.onloadend=()=>{let r=l.result,s=document.createElement("div");s.style.cssText="position:absolute;pointer-events:none;width:0;height:0;visibility:hidden;",s.innerHTML=r;let p=s.querySelector("svg");document.body.appendChild(s);let c=p.getBBox();s.parentNode.removeChild(s);let d=s.querySelector("title"),m=p.getAttribute("viewBox")||"",u=p.getAttribute("width")||"",f=p.getAttribute("height")||"",h=parseFloat(u)||null,g=parseFloat(f)||null,I=(u.match(/[a-z]+/)||[])[0]||"",E=(f.match(/[a-z]+/)||[])[0]||"",T=m.split(" ").map(parseFloat),v=T.length?{x:T[0],y:T[1],width:T[2],height:T[3]}:c,y=h??v.width,b=g??v.height;p.style.overflow="visible",p.setAttribute("width",y),p.setAttribute("height",b);let w="";if(i&&i.length){let Q={width:y,height:b};w=i.sort(yl).reduce((pe,G)=>{let H=Fu(G[0],G[1]);return zu(H,G[0],G[1],Q),H.removeAttribute("id"),H.getAttribute("opacity")===1&&H.removeAttribute("opacity"),pe+` +`+H.outerHTML+` +`},""),w=` + +${w.replace(/ /g," ")} + +`}let x=t.aspectRatio||b/y,_=y,P=_*x,O=typeof t.scaleToFit>"u"||t.scaleToFit,M=t.center?t.center.x:.5,C=t.center?t.center.y:.5,S=Tl({width:y,height:b},Il({width:_,height:P},x),t.rotation,O?{x:M,y:C}:{x:.5,y:.5}),F=t.zoom*S,R=t.rotation*(180/Math.PI),L={x:_*.5,y:P*.5},z={x:L.x-y*M,y:L.y-b*C},D=[`rotate(${R} ${L.x} ${L.y})`,`translate(${L.x} ${L.y})`,`scale(${F})`,`translate(${-L.x} ${-L.y})`,`translate(${z.x} ${z.y})`],k=t.flip&&t.flip.horizontal,B=t.flip&&t.flip.vertical,X=[`scale(${k?-1:1} ${B?-1:1})`,`translate(${k?-y:0} ${B?-b:0})`],Y=` + + +${d?d.textContent:""} + + +${p.outerHTML}${w} + + +`;n(Y)},l.readAsText(e)}),Nu=e=>{let t;try{t=new ImageData(e.width,e.height)}catch{t=document.createElement("canvas").getContext("2d").createImageData(e.width,e.height)}return t.data.set(e.data),t},Bu=()=>{let e={resize:c,filter:p},t=(d,m)=>(d.forEach(u=>{m=e[u.type](m,u.data)}),m),i=(d,m)=>{let u=d.transforms,f=null;if(u.forEach(h=>{h.type==="filter"&&(f=h)}),f){let h=null;u.forEach(g=>{g.type==="resize"&&(h=g)}),h&&(h.data.matrix=f.data,u=u.filter(g=>g.type!=="filter"))}m(t(u,d.imageData))};self.onmessage=d=>{i(d.data.message,m=>{self.postMessage({id:d.data.id,message:m},[m.data.buffer])})};let a=1,n=1,o=1;function l(d,m,u){let f=m[d]/255,h=m[d+1]/255,g=m[d+2]/255,I=m[d+3]/255,E=f*u[0]+h*u[1]+g*u[2]+I*u[3]+u[4],T=f*u[5]+h*u[6]+g*u[7]+I*u[8]+u[9],v=f*u[10]+h*u[11]+g*u[12]+I*u[13]+u[14],y=f*u[15]+h*u[16]+g*u[17]+I*u[18]+u[19],b=Math.max(0,E*y)+a*(1-y),w=Math.max(0,T*y)+n*(1-y),x=Math.max(0,v*y)+o*(1-y);m[d]=Math.max(0,Math.min(1,b))*255,m[d+1]=Math.max(0,Math.min(1,w))*255,m[d+2]=Math.max(0,Math.min(1,x))*255}let r=self.JSON.stringify([1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0]);function s(d){return self.JSON.stringify(d||[])===r}function p(d,m){if(!m||s(m))return d;let u=d.data,f=u.length,h=m[0],g=m[1],I=m[2],E=m[3],T=m[4],v=m[5],y=m[6],b=m[7],w=m[8],x=m[9],_=m[10],P=m[11],O=m[12],M=m[13],C=m[14],S=m[15],F=m[16],R=m[17],L=m[18],z=m[19],D=0,k=0,B=0,X=0,Y=0,Q=0,pe=0,G=0,H=0,q=0,re=0,ee=0;for(;D1&&f===!1)return p(d,I);h=d.width*S,g=d.height*S}let E=d.width,T=d.height,v=Math.round(h),y=Math.round(g),b=d.data,w=new Uint8ClampedArray(v*y*4),x=E/v,_=T/y,P=Math.ceil(x*.5),O=Math.ceil(_*.5);for(let M=0;M=-1&&re<=1&&(F=2*re*re*re-3*re*re+1,F>0)){q=4*(H+Y*E);let ee=b[q+3];B+=F*ee,L+=F,ee<255&&(F=F*ee/250),z+=F*b[q],D+=F*b[q+1],k+=F*b[q+2],R+=F}}}w[S]=z/R,w[S+1]=D/R,w[S+2]=k/R,w[S+3]=B/L,I&&l(S,w,I)}return{data:w,width:v,height:y}}},ku=(e,t)=>{if(e.getUint32(t+4,!1)!==1165519206)return;t+=4;let i=e.getUint16(t+=6,!1)===18761;t+=e.getUint32(t+4,i);let a=e.getUint16(t,i);t+=2;for(let n=0;n{let t=new DataView(e);if(t.getUint16(0)!==65496)return null;let i=2,a,n,o=!1;for(;i=65504&&a<=65519||a===65534)||(o||(o=ku(t,i,n)),i+n>t.byteLength)));)i+=n;return e.slice(0,i)},Gu=e=>new Promise(t=>{let i=new FileReader;i.onload=()=>t(Vu(i.result)||null),i.readAsArrayBuffer(e.slice(0,256*1024))}),Uu=()=>window.BlobBuilder=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder,Wu=(e,t)=>{let i=Uu();if(i){let a=new i;return a.append(e),a.getBlob(t)}return new Blob([e],{type:t})},Hu=()=>Math.random().toString(36).substr(2,9),ju=e=>{let t=new Blob(["(",e.toString(),")()"],{type:"application/javascript"}),i=URL.createObjectURL(t),a=new Worker(i),n=[];return{transfer:()=>{},post:(o,l,r)=>{let s=Hu();n[s]=l,a.onmessage=p=>{let c=n[p.data.id];c&&(c(p.data.message),delete n[p.data.id])},a.postMessage({id:s,message:o},r)},terminate:()=>{a.terminate(),URL.revokeObjectURL(i)}}},qu=e=>new Promise((t,i)=>{let a=new Image;a.onload=()=>{t(a)},a.onerror=n=>{i(n)},a.src=e}),Yu=e=>e.reduce((t,i)=>t.then(a=>i().then(Array.prototype.concat.bind(a))),Promise.resolve([])),$u=(e,t)=>new Promise(i=>{let a={width:e.width,height:e.height},n=e.getContext("2d"),o=t.sort(yl).map(l=>()=>new Promise(r=>{tf[l[0]](n,a,l[1],r)&&r()}));Yu(o).then(()=>i(e))}),St=(e,t)=>{e.beginPath(),e.lineCap=t["stroke-linecap"],e.lineJoin=t["stroke-linejoin"],e.lineWidth=t["stroke-width"],t["stroke-dasharray"].length&&e.setLineDash(t["stroke-dasharray"].split(",")),e.fillStyle=t.fill,e.strokeStyle=t.stroke,e.globalAlpha=t.opacity||1},Lt=e=>{e.fill(),e.stroke(),e.globalAlpha=1},Xu=(e,t,i)=>{let a=wt(i,t),n=ct(i,t);return St(e,n),e.rect(a.x,a.y,a.width,a.height),Lt(e,n),!0},Qu=(e,t,i)=>{let a=wt(i,t),n=ct(i,t);St(e,n);let o=a.x,l=a.y,r=a.width,s=a.height,p=.5522848,c=r/2*p,d=s/2*p,m=o+r,u=l+s,f=o+r/2,h=l+s/2;return e.moveTo(o,h),e.bezierCurveTo(o,h-d,f-c,l,f,l),e.bezierCurveTo(f+c,l,m,h-d,m,h),e.bezierCurveTo(m,h+d,f+c,u,f,u),e.bezierCurveTo(f-c,u,o,h+d,o,h),Lt(e,n),!0},Zu=(e,t,i,a)=>{let n=wt(i,t),o=ct(i,t);St(e,o);let l=new Image;new URL(i.src,window.location.href).origin!==window.location.origin&&(l.crossOrigin=""),l.onload=()=>{if(i.fit==="cover"){let s=n.width/n.height,p=s>1?l.width:l.height*s,c=s>1?l.width/s:l.height,d=l.width*.5-p*.5,m=l.height*.5-c*.5;e.drawImage(l,d,m,p,c,n.x,n.y,n.width,n.height)}else if(i.fit==="contain"){let s=Math.min(n.width/l.width,n.height/l.height),p=s*l.width,c=s*l.height,d=n.x+n.width*.5-p*.5,m=n.y+n.height*.5-c*.5;e.drawImage(l,0,0,l.width,l.height,d,m,p,c)}else e.drawImage(l,0,0,l.width,l.height,n.x,n.y,n.width,n.height);Lt(e,o),a()},l.src=i.src},Ku=(e,t,i)=>{let a=wt(i,t),n=ct(i,t);St(e,n);let o=me(i.fontSize,t),l=i.fontFamily||"sans-serif",r=i.fontWeight||"normal",s=i.textAlign||"left";return e.font=`${r} ${o}px ${l}`,e.textAlign=s,e.fillText(i.text,a.x,a.y),Lt(e,n),!0},Ju=(e,t,i)=>{let a=ct(i,t);St(e,a),e.beginPath();let n=i.points.map(l=>({x:me(l.x,t,1,"width"),y:me(l.y,t,1,"height")}));e.moveTo(n[0].x,n[0].y);let o=n.length;for(let l=1;l{let a=wt(i,t),n=ct(i,t);St(e,n),e.beginPath();let o={x:a.x,y:a.y},l={x:a.x+a.width,y:a.y+a.height};e.moveTo(o.x,o.y),e.lineTo(l.x,l.y);let r=xl({x:l.x-o.x,y:l.y-o.y}),s=.04*Math.min(t.width,t.height);if(i.lineDecoration.indexOf("arrow-begin")!==-1){let p=yi(r,s),c=_i(o,p),d=Ye(o,2,c),m=Ye(o,-2,c);e.moveTo(d.x,d.y),e.lineTo(o.x,o.y),e.lineTo(m.x,m.y)}if(i.lineDecoration.indexOf("arrow-end")!==-1){let p=yi(r,-s),c=_i(l,p),d=Ye(l,2,c),m=Ye(l,-2,c);e.moveTo(d.x,d.y),e.lineTo(l.x,l.y),e.lineTo(m.x,m.y)}return Lt(e,n),!0},tf={rect:Xu,ellipse:Qu,image:Zu,text:Ku,line:ef,path:Ju},af=e=>{let t=document.createElement("canvas");return t.width=e.width,t.height=e.height,t.getContext("2d").putImageData(e,0,0),t},nf=(e,t,i={})=>new Promise((a,n)=>{if(!e||!du(e))return n({status:"not an image file",file:e});let{stripImageHead:o,beforeCreateBlob:l,afterCreateBlob:r,canvasMemoryLimit:s}=i,{crop:p,size:c,filter:d,markup:m,output:u}=t,f=t.image&&t.image.orientation?Math.max(1,Math.min(8,t.image.orientation)):null,h=u&&u.quality,g=h===null?null:h/100,I=u&&u.type||null,E=u&&u.background||null,T=[];c&&(typeof c.width=="number"||typeof c.height=="number")&&T.push({type:"resize",data:c}),d&&d.length===20&&T.push({type:"filter",data:d});let v=w=>{let x=r?r(w):w;Promise.resolve(x).then(a)},y=(w,x)=>{let _=af(w),P=m.length?$u(_,m):_;Promise.resolve(P).then(O=>{Tu(O,x,l).then(M=>{if(vl(O),o)return v(M);Gu(e).then(C=>{C!==null&&(M=new Blob([C,M.slice(20)],{type:M.type})),v(M)})}).catch(n)})};if(/svg/.test(e.type)&&I===null)return Cu(e,p,m,{background:E}).then(w=>{a(Wu(w,"image/svg+xml"))});let b=URL.createObjectURL(e);qu(b).then(w=>{URL.revokeObjectURL(b);let x=Eu(w,f,p,{canvasMemoryLimit:s,background:E}),_={quality:g,type:I||e.type};if(!T.length)return y(x,_);let P=ju(Bu);P.post({transforms:T,imageData:x},O=>{y(Nu(O),_),P.terminate()},[x.data.buffer])}).catch(n)}),of=["x","y","left","top","right","bottom","width","height"],lf=e=>typeof e=="string"&&/%/.test(e)?parseFloat(e)/100:e,rf=e=>{let[t,i]=e,a=i.points?{}:of.reduce((n,o)=>(n[o]=lf(i[o]),n),{});return[t,{zIndex:0,...i,...a}]},sf=e=>new Promise((t,i)=>{let a=new Image;a.src=URL.createObjectURL(e);let n=()=>{let l=a.naturalWidth,r=a.naturalHeight;l&&r&&(URL.revokeObjectURL(a.src),clearInterval(o),t({width:l,height:r}))};a.onerror=l=>{URL.revokeObjectURL(a.src),clearInterval(o),i(l)};let o=setInterval(n,1);n()});typeof window<"u"&&typeof window.document<"u"&&(HTMLCanvasElement.prototype.toBlob||Object.defineProperty(HTMLCanvasElement.prototype,"toBlob",{value:function(e,t,i){let a=this;setTimeout(()=>{let n=a.toDataURL(t,i).split(",")[1],o=atob(n),l=o.length,r=new Uint8Array(l);for(;l--;)r[l]=o.charCodeAt(l);e(new Blob([r],{type:t||"image/png"}))})}}));var Sa=typeof window<"u"&&typeof window.document<"u",cf=Sa&&/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream,_l=({addFilter:e,utils:t})=>{let{Type:i,forin:a,getFileFromBlob:n,isFile:o}=t,l=["crop","resize","filter","markup","output"],r=c=>(d,m,u)=>d(m,c?c(u):u),s=c=>c.aspectRatio===null&&c.rotation===0&&c.zoom===1&&c.center&&c.center.x===.5&&c.center.y===.5&&c.flip&&c.flip.horizontal===!1&&c.flip.vertical===!1;e("SHOULD_PREPARE_OUTPUT",(c,{query:d})=>new Promise(m=>{m(!d("IS_ASYNC"))}));let p=(c,d,m)=>new Promise(u=>{if(!c("GET_ALLOW_IMAGE_TRANSFORM")||m.archived||!o(d)||!ou(d))return u(!1);sf(d).then(()=>{let f=c("GET_IMAGE_TRANSFORM_IMAGE_FILTER");if(f){let h=f(d);if(h==null)return handleRevert(!0);if(typeof h=="boolean")return u(h);if(typeof h.then=="function")return h.then(u)}u(!0)}).catch(f=>{u(!1)})});return e("DID_CREATE_ITEM",(c,{query:d,dispatch:m})=>{d("GET_ALLOW_IMAGE_TRANSFORM")&&c.extend("requestPrepare",()=>new Promise((u,f)=>{m("REQUEST_PREPARE_OUTPUT",{query:c.id,item:c,success:u,failure:f},!0)}))}),e("PREPARE_OUTPUT",(c,{query:d,item:m})=>new Promise(u=>{p(d,c,m).then(f=>{if(!f)return u(c);let h=[];d("GET_IMAGE_TRANSFORM_VARIANTS_INCLUDE_ORIGINAL")&&h.push(()=>new Promise(x=>{x({name:d("GET_IMAGE_TRANSFORM_VARIANTS_ORIGINAL_NAME"),file:c})})),d("GET_IMAGE_TRANSFORM_VARIANTS_INCLUDE_DEFAULT")&&h.push((x,_,P)=>new Promise(O=>{x(_,P).then(M=>O({name:d("GET_IMAGE_TRANSFORM_VARIANTS_DEFAULT_NAME"),file:M}))}));let g=d("GET_IMAGE_TRANSFORM_VARIANTS")||{};a(g,(x,_)=>{let P=r(_);h.push((O,M,C)=>new Promise(S=>{P(O,M,C).then(F=>S({name:x,file:F}))}))});let I=d("GET_IMAGE_TRANSFORM_OUTPUT_QUALITY"),E=d("GET_IMAGE_TRANSFORM_OUTPUT_QUALITY_MODE"),T=I===null?null:I/100,v=d("GET_IMAGE_TRANSFORM_OUTPUT_MIME_TYPE"),y=d("GET_IMAGE_TRANSFORM_CLIENT_TRANSFORMS")||l;m.setMetadata("output",{type:v,quality:T,client:y},!0);let b=(x,_)=>new Promise((P,O)=>{let M={..._};Object.keys(M).filter(B=>B!=="exif").forEach(B=>{y.indexOf(B)===-1&&delete M[B]});let{resize:C,exif:S,output:F,crop:R,filter:L,markup:z}=M,D={image:{orientation:S?S.orientation:null},output:F&&(F.type||typeof F.quality=="number"||F.background)?{type:F.type,quality:typeof F.quality=="number"?F.quality*100:null,background:F.background||d("GET_IMAGE_TRANSFORM_CANVAS_BACKGROUND_COLOR")||null}:void 0,size:C&&(C.size.width||C.size.height)?{mode:C.mode,upscale:C.upscale,...C.size}:void 0,crop:R&&!s(R)?{...R}:void 0,markup:z&&z.length?z.map(rf):[],filter:L};if(D.output){let B=F.type?F.type!==x.type:!1,X=/\/jpe?g$/.test(x.type),Y=F.quality!==null?X&&E==="always":!1;if(!!!(D.size||D.crop||D.filter||B||Y))return P(x)}let k={beforeCreateBlob:d("GET_IMAGE_TRANSFORM_BEFORE_CREATE_BLOB"),afterCreateBlob:d("GET_IMAGE_TRANSFORM_AFTER_CREATE_BLOB"),canvasMemoryLimit:d("GET_IMAGE_TRANSFORM_CANVAS_MEMORY_LIMIT"),stripImageHead:d("GET_IMAGE_TRANSFORM_OUTPUT_STRIP_IMAGE_HEAD")};nf(x,D,k).then(B=>{let X=n(B,su(x.name,cu(B.type)));P(X)}).catch(O)}),w=h.map(x=>x(b,c,m.getMetadata()));Promise.all(w).then(x=>{u(x.length===1&&x[0].name===null?x[0].file:x)})})})),{options:{allowImageTransform:[!0,i.BOOLEAN],imageTransformImageFilter:[null,i.FUNCTION],imageTransformOutputMimeType:[null,i.STRING],imageTransformOutputQuality:[null,i.INT],imageTransformOutputStripImageHead:[!0,i.BOOLEAN],imageTransformClientTransforms:[null,i.ARRAY],imageTransformOutputQualityMode:["always",i.STRING],imageTransformVariants:[null,i.OBJECT],imageTransformVariantsIncludeDefault:[!0,i.BOOLEAN],imageTransformVariantsDefaultName:[null,i.STRING],imageTransformVariantsIncludeOriginal:[!1,i.BOOLEAN],imageTransformVariantsOriginalName:["original_",i.STRING],imageTransformBeforeCreateBlob:[null,i.FUNCTION],imageTransformAfterCreateBlob:[null,i.FUNCTION],imageTransformCanvasMemoryLimit:[Sa&&cf?4096*4096:null,i.INT],imageTransformCanvasBackgroundColor:[null,i.STRING]}}};Sa&&document.dispatchEvent(new CustomEvent("FilePond:pluginloaded",{detail:_l}));var Rl=_l;var La=e=>/^video/.test(e.type),$t=e=>/^audio/.test(e.type),Aa=class{constructor(t,i){this.mediaEl=t,this.audioElems=i,this.onplayhead=!1,this.duration=0,this.timelineWidth=this.audioElems.timeline.offsetWidth-this.audioElems.playhead.offsetWidth,this.moveplayheadFn=this.moveplayhead.bind(this),this.registerListeners()}registerListeners(){this.mediaEl.addEventListener("timeupdate",this.timeUpdate.bind(this),!1),this.mediaEl.addEventListener("canplaythrough",()=>this.duration=this.mediaEl.duration,!1),this.audioElems.timeline.addEventListener("click",this.timelineClicked.bind(this),!1),this.audioElems.button.addEventListener("click",this.play.bind(this)),this.audioElems.playhead.addEventListener("mousedown",this.mouseDown.bind(this),!1),window.addEventListener("mouseup",this.mouseUp.bind(this),!1)}play(){this.mediaEl.paused?this.mediaEl.play():this.mediaEl.pause(),this.audioElems.button.classList.toggle("play"),this.audioElems.button.classList.toggle("pause")}timeUpdate(){let t=this.mediaEl.currentTime/this.duration*100;this.audioElems.playhead.style.marginLeft=t+"%",this.mediaEl.currentTime===this.duration&&(this.audioElems.button.classList.toggle("play"),this.audioElems.button.classList.toggle("pause"))}moveplayhead(t){let i=t.clientX-this.getPosition(this.audioElems.timeline);i>=0&&i<=this.timelineWidth&&(this.audioElems.playhead.style.marginLeft=i+"px"),i<0&&(this.audioElems.playhead.style.marginLeft="0px"),i>this.timelineWidth&&(this.audioElems.playhead.style.marginLeft=this.timelineWidth-4+"px")}timelineClicked(t){this.moveplayhead(t),this.mediaEl.currentTime=this.duration*this.clickPercent(t)}mouseDown(){this.onplayhead=!0,window.addEventListener("mousemove",this.moveplayheadFn,!0),this.mediaEl.removeEventListener("timeupdate",this.timeUpdate.bind(this),!1)}mouseUp(t){window.removeEventListener("mousemove",this.moveplayheadFn,!0),this.onplayhead==!0&&(this.moveplayhead(t),this.mediaEl.currentTime=this.duration*this.clickPercent(t),this.mediaEl.addEventListener("timeupdate",this.timeUpdate.bind(this),!1)),this.onplayhead=!1}clickPercent(t){return(t.clientX-this.getPosition(this.audioElems.timeline))/this.timelineWidth}getPosition(t){return t.getBoundingClientRect().left}},df=e=>e.utils.createView({name:"media-preview",tag:"div",ignoreRect:!0,create:({root:t,props:i})=>{let{id:a}=i,n=t.query("GET_ITEM",{id:i.id}),o=$t(n.file)?"audio":"video";if(t.ref.media=document.createElement(o),t.ref.media.setAttribute("controls",!0),t.element.appendChild(t.ref.media),$t(n.file)){let l=document.createDocumentFragment();t.ref.audio=[],t.ref.audio.container=document.createElement("div"),t.ref.audio.button=document.createElement("span"),t.ref.audio.timeline=document.createElement("div"),t.ref.audio.playhead=document.createElement("div"),t.ref.audio.container.className="audioplayer",t.ref.audio.button.className="playpausebtn play",t.ref.audio.timeline.className="timeline",t.ref.audio.playhead.className="playhead",t.ref.audio.timeline.appendChild(t.ref.audio.playhead),t.ref.audio.container.appendChild(t.ref.audio.button),t.ref.audio.container.appendChild(t.ref.audio.timeline),l.appendChild(t.ref.audio.container),t.element.appendChild(l)}},write:e.utils.createRoute({DID_MEDIA_PREVIEW_LOAD:({root:t,props:i})=>{let{id:a}=i,n=t.query("GET_ITEM",{id:i.id});if(!n)return;let o=window.URL||window.webkitURL,l=new Blob([n.file],{type:n.file.type});t.ref.media.type=n.file.type,t.ref.media.src=n.file.mock&&n.file.url||o.createObjectURL(l),$t(n.file)&&new Aa(t.ref.media,t.ref.audio),t.ref.media.addEventListener("loadeddata",()=>{let r=75;if(La(n.file)){let s=t.ref.media.offsetWidth,p=t.ref.media.videoWidth/s;r=t.ref.media.videoHeight/p}t.dispatch("DID_UPDATE_PANEL_HEIGHT",{id:i.id,height:r})},!1)}})}),pf=e=>{let t=({root:a,props:n})=>{let{id:o}=n;a.query("GET_ITEM",o)&&a.dispatch("DID_MEDIA_PREVIEW_LOAD",{id:o})},i=({root:a,props:n})=>{let o=df(e);a.ref.media=a.appendChildView(a.createChildView(o,{id:n.id}))};return e.utils.createView({name:"media-preview-wrapper",create:i,write:e.utils.createRoute({DID_MEDIA_PREVIEW_CONTAINER_CREATE:t})})},Ma=e=>{let{addFilter:t,utils:i}=e,{Type:a,createRoute:n}=i,o=pf(e);return t("CREATE_VIEW",l=>{let{is:r,view:s,query:p}=l;if(!r("file"))return;let c=({root:d,props:m})=>{let{id:u}=m,f=p("GET_ITEM",u),h=p("GET_ALLOW_VIDEO_PREVIEW"),g=p("GET_ALLOW_AUDIO_PREVIEW");!f||f.archived||(!La(f.file)||!h)&&(!$t(f.file)||!g)||(d.ref.mediaPreview=s.appendChildView(s.createChildView(o,{id:u})),d.dispatch("DID_MEDIA_PREVIEW_CONTAINER_CREATE",{id:u}))};s.registerWriter(n({DID_LOAD_ITEM:c},({root:d,props:m})=>{let{id:u}=m,f=p("GET_ITEM",u),h=d.query("GET_ALLOW_VIDEO_PREVIEW"),g=d.query("GET_ALLOW_AUDIO_PREVIEW");!f||(!La(f.file)||!h)&&(!$t(f.file)||!g)||d.rect.element.hidden}))}),{options:{allowVideoPreview:[!0,a.BOOLEAN],allowAudioPreview:[!0,a.BOOLEAN]}}},mf=typeof window<"u"&&typeof window.document<"u";mf&&document.dispatchEvent(new CustomEvent("FilePond:pluginloaded",{detail:Ma}));var wl={labelIdle:'\u0627\u0633\u062D\u0628 \u0648 \u0627\u062F\u0631\u062C \u0645\u0644\u0641\u0627\u062A\u0643 \u0623\u0648 \u062A\u0635\u0641\u062D ',labelInvalidField:"\u0627\u0644\u062D\u0642\u0644 \u064A\u062D\u062A\u0648\u064A \u0639\u0644\u0649 \u0645\u0644\u0641\u0627\u062A \u063A\u064A\u0631 \u0635\u0627\u0644\u062D\u0629",labelFileWaitingForSize:"\u0628\u0627\u0646\u062A\u0638\u0627\u0631 \u0627\u0644\u062D\u062C\u0645",labelFileSizeNotAvailable:"\u0627\u0644\u062D\u062C\u0645 \u063A\u064A\u0631 \u0645\u062A\u0627\u062D",labelFileLoading:"\u0628\u0627\u0644\u0625\u0646\u062A\u0638\u0627\u0631",labelFileLoadError:"\u062D\u062F\u062B \u062E\u0637\u0623 \u0623\u062B\u0646\u0627\u0621 \u0627\u0644\u062A\u062D\u0645\u064A\u0644",labelFileProcessing:"\u064A\u062A\u0645 \u0627\u0644\u0631\u0641\u0639",labelFileProcessingComplete:"\u062A\u0645 \u0627\u0644\u0631\u0641\u0639",labelFileProcessingAborted:"\u062A\u0645 \u0625\u0644\u063A\u0627\u0621 \u0627\u0644\u0631\u0641\u0639",labelFileProcessingError:"\u062D\u062F\u062B \u062E\u0637\u0623 \u0623\u062B\u0646\u0627\u0621 \u0627\u0644\u0631\u0641\u0639",labelFileProcessingRevertError:"\u062D\u062F\u062B \u062E\u0637\u0623 \u0623\u062B\u0646\u0627\u0621 \u0627\u0644\u062A\u0631\u0627\u062C\u0639",labelFileRemoveError:"\u062D\u062F\u062B \u062E\u0637\u0623 \u0623\u062B\u0646\u0627\u0621 \u0627\u0644\u062D\u0630\u0641",labelTapToCancel:"\u0627\u0646\u0642\u0631 \u0644\u0644\u0625\u0644\u063A\u0627\u0621",labelTapToRetry:"\u0627\u0646\u0642\u0631 \u0644\u0625\u0639\u0627\u062F\u0629 \u0627\u0644\u0645\u062D\u0627\u0648\u0644\u0629",labelTapToUndo:"\u0627\u0646\u0642\u0631 \u0644\u0644\u062A\u0631\u0627\u062C\u0639",labelButtonRemoveItem:"\u0645\u0633\u062D",labelButtonAbortItemLoad:"\u0625\u0644\u063A\u0627\u0621",labelButtonRetryItemLoad:"\u0625\u0639\u0627\u062F\u0629",labelButtonAbortItemProcessing:"\u0625\u0644\u063A\u0627\u0621",labelButtonUndoItemProcessing:"\u062A\u0631\u0627\u062C\u0639",labelButtonRetryItemProcessing:"\u0625\u0639\u0627\u062F\u0629",labelButtonProcessItem:"\u0631\u0641\u0639",labelMaxFileSizeExceeded:"\u0627\u0644\u0645\u0644\u0641 \u0643\u0628\u064A\u0631 \u062C\u062F\u0627",labelMaxFileSize:"\u062D\u062C\u0645 \u0627\u0644\u0645\u0644\u0641 \u0627\u0644\u0623\u0642\u0635\u0649: {filesize}",labelMaxTotalFileSizeExceeded:"\u062A\u0645 \u062A\u062C\u0627\u0648\u0632 \u0627\u0644\u062D\u062F \u0627\u0644\u0623\u0642\u0635\u0649 \u0644\u0644\u062D\u062C\u0645 \u0627\u0644\u0625\u062C\u0645\u0627\u0644\u064A",labelMaxTotalFileSize:"\u0627\u0644\u062D\u062F \u0627\u0644\u0623\u0642\u0635\u0649 \u0644\u062D\u062C\u0645 \u0627\u0644\u0645\u0644\u0641: {filesize}",labelFileTypeNotAllowed:"\u0645\u0644\u0641 \u0645\u0646 \u0646\u0648\u0639 \u063A\u064A\u0631 \u0635\u0627\u0644\u062D",fileValidateTypeLabelExpectedTypes:"\u062A\u062A\u0648\u0642\u0639 {allButLastType} \u0645\u0646 {lastType}",imageValidateSizeLabelFormatError:"\u0646\u0648\u0639 \u0627\u0644\u0635\u0648\u0631\u0629 \u063A\u064A\u0631 \u0645\u062F\u0639\u0648\u0645",imageValidateSizeLabelImageSizeTooSmall:"\u0627\u0644\u0635\u0648\u0631\u0629 \u0635\u063A\u064A\u0631 \u062C\u062F\u0627",imageValidateSizeLabelImageSizeTooBig:"\u0627\u0644\u0635\u0648\u0631\u0629 \u0643\u0628\u064A\u0631\u0629 \u062C\u062F\u0627",imageValidateSizeLabelExpectedMinSize:"\u0627\u0644\u062D\u062F \u0627\u0644\u0623\u062F\u0646\u0649 \u0644\u0644\u0623\u0628\u0639\u0627\u062F \u0647\u0648: {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"\u0627\u0644\u062D\u062F \u0627\u0644\u0623\u0642\u0635\u0649 \u0644\u0644\u0623\u0628\u0639\u0627\u062F \u0647\u0648: {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"\u0627\u0644\u062F\u0642\u0629 \u0636\u0639\u064A\u0641\u0629 \u062C\u062F\u0627",imageValidateSizeLabelImageResolutionTooHigh:"\u0627\u0644\u062F\u0642\u0629 \u0645\u0631\u062A\u0641\u0639\u0629 \u062C\u062F\u0627",imageValidateSizeLabelExpectedMinResolution:"\u0623\u0642\u0644 \u062F\u0642\u0629: {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"\u0623\u0642\u0635\u0649 \u062F\u0642\u0629: {maxResolution}"};var Sl={labelIdle:'Arrossega i deixa els teus fitxers o Navega ',labelInvalidField:"El camp cont\xE9 fitxers inv\xE0lids",labelFileWaitingForSize:"Esperant mida",labelFileSizeNotAvailable:"Mida no disponible",labelFileLoading:"Carregant",labelFileLoadError:"Error durant la c\xE0rrega",labelFileProcessing:"Pujant",labelFileProcessingComplete:"Pujada completada",labelFileProcessingAborted:"Pujada cancel\xB7lada",labelFileProcessingError:"Error durant la pujada",labelFileProcessingRevertError:"Error durant la reversi\xF3",labelFileRemoveError:"Error durant l'eliminaci\xF3",labelTapToCancel:"toca per cancel\xB7lar",labelTapToRetry:"toca per reintentar",labelTapToUndo:"toca per desfer",labelButtonRemoveItem:"Eliminar",labelButtonAbortItemLoad:"Cancel\xB7lar",labelButtonRetryItemLoad:"Reintentar",labelButtonAbortItemProcessing:"Cancel\xB7lar",labelButtonUndoItemProcessing:"Desfer",labelButtonRetryItemProcessing:"Reintentar",labelButtonProcessItem:"Pujar",labelMaxFileSizeExceeded:"El fitxer \xE9s massa gran",labelMaxFileSize:"La mida m\xE0xima del fitxer \xE9s {filesize}",labelMaxTotalFileSizeExceeded:"Mida m\xE0xima total excedida",labelMaxTotalFileSize:"La mida m\xE0xima total del fitxer \xE9s {filesize}",labelFileTypeNotAllowed:"Fitxer de tipus inv\xE0lid",fileValidateTypeLabelExpectedTypes:"Espera {allButLastType} o {lastType}",imageValidateSizeLabelFormatError:"Tipus d'imatge no suportada",imageValidateSizeLabelImageSizeTooSmall:"La imatge \xE9s massa petita",imageValidateSizeLabelImageSizeTooBig:"La imatge \xE9s massa gran",imageValidateSizeLabelExpectedMinSize:"La mida m\xEDnima \xE9s {minWidth} x {minHeight}",imageValidateSizeLabelExpectedMaxSize:"La mida m\xE0xima \xE9s {maxWidth} x {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"La resoluci\xF3 \xE9s massa baixa",imageValidateSizeLabelImageResolutionTooHigh:"La resoluci\xF3 \xE9s massa alta",imageValidateSizeLabelExpectedMinResolution:"La resoluci\xF3 m\xEDnima \xE9s {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"La resoluci\xF3 m\xE0xima \xE9s {maxResolution}"};var Ll={labelIdle:'\u067E\u06D5\u0695\u06AF\u06D5\u06A9\u0627\u0646 \u0641\u0695\u06CE \u0628\u062F\u06D5 \u0626\u06CE\u0631\u06D5 \u0628\u06C6 \u0628\u0627\u0631\u06A9\u0631\u062F\u0646 \u06CC\u0627\u0646 \u0647\u06D5\u06B5\u0628\u0698\u06CE\u0631\u06D5 ',labelInvalidField:"\u067E\u06D5\u0695\u06AF\u06D5\u06CC \u0646\u0627\u062F\u0631\u0648\u0633\u062A\u06CC \u062A\u06CE\u062F\u0627\u06CC\u06D5",labelFileWaitingForSize:"\u0686\u0627\u0648\u06D5\u0695\u0648\u0627\u0646\u06CC\u06CC \u0642\u06D5\u0628\u0627\u0631\u06D5",labelFileSizeNotAvailable:"\u0642\u06D5\u0628\u0627\u0631\u06D5 \u0628\u06D5\u0631\u062F\u06D5\u0633\u062A \u0646\u06CC\u06D5",labelFileLoading:"\u0628\u0627\u0631\u06A9\u0631\u062F\u0646",labelFileLoadError:"\u0647\u06D5\u06B5\u06D5 \u0644\u06D5\u0645\u0627\u0648\u06D5\u06CC \u0628\u0627\u0631\u06A9\u0631\u062F\u0646",labelFileProcessing:"\u0628\u0627\u0631\u06A9\u0631\u062F\u0646",labelFileProcessingComplete:"\u0628\u0627\u0631\u06A9\u0631\u062F\u0646 \u062A\u06D5\u0648\u0627\u0648 \u0628\u0648\u0648",labelFileProcessingAborted:"\u0628\u0627\u0631\u06A9\u0631\u062F\u0646 \u0647\u06D5\u06B5\u0648\u06D5\u0634\u0627\u06CC\u06D5\u0648\u06D5",labelFileProcessingError:"\u0647\u06D5\u06B5\u06D5 \u0644\u06D5\u06A9\u0627\u062A\u06CC \u0628\u0627\u0631\u06A9\u0631\u062F\u0646\u062F\u0627",labelFileProcessingRevertError:"\u0647\u06D5\u06B5\u06D5 \u0644\u06D5 \u06A9\u0627\u062A\u06CC \u06AF\u06D5\u0695\u0627\u0646\u06D5\u0648\u06D5",labelFileRemoveError:"\u0647\u06D5\u06B5\u06D5 \u0644\u06D5 \u06A9\u0627\u062A\u06CC \u0633\u0695\u06CC\u0646\u06D5\u0648\u06D5",labelTapToCancel:"\u0628\u06C6 \u0647\u06D5\u06B5\u0648\u06D5\u0634\u0627\u0646\u062F\u0646\u06D5\u0648\u06D5 Tab \u062F\u0627\u0628\u06AF\u0631\u06D5",labelTapToRetry:"tap \u062F\u0627\u0628\u06AF\u0631\u06D5 \u0628\u06C6 \u062F\u0648\u0648\u0628\u0627\u0631\u06D5\u06A9\u0631\u062F\u0646\u06D5\u0648\u06D5",labelTapToUndo:"tap \u062F\u0627\u0628\u06AF\u0631\u06D5 \u0628\u06C6 \u06AF\u06D5\u0695\u0627\u0646\u062F\u0646\u06D5\u0648\u06D5",labelButtonRemoveItem:"\u0633\u0695\u06CC\u0646\u06D5\u0648\u06D5",labelButtonAbortItemLoad:"\u0647\u06D5\u06B5\u0648\u06D5\u0634\u0627\u0646\u062F\u0646\u06D5\u0648\u06D5",labelButtonRetryItemLoad:"\u0647\u06D5\u0648\u06B5\u062F\u0627\u0646\u06D5\u0648\u06D5",labelButtonAbortItemProcessing:"\u067E\u06D5\u0634\u06CC\u0645\u0627\u0646\u0628\u0648\u0648\u0646\u06D5\u0648\u06D5",labelButtonUndoItemProcessing:"\u06AF\u06D5\u0695\u0627\u0646\u062F\u0646\u06D5\u0648\u06D5",labelButtonRetryItemProcessing:"\u0647\u06D5\u0648\u06B5\u062F\u0627\u0646\u06D5\u0648\u06D5",labelButtonProcessItem:"\u0628\u0627\u0631\u06A9\u0631\u062F\u0646",labelMaxFileSizeExceeded:"\u067E\u06D5\u0695\u06AF\u06D5 \u0632\u06C6\u0631 \u06AF\u06D5\u0648\u0631\u06D5\u06CC\u06D5",labelMaxFileSize:"\u0632\u06C6\u0631\u062A\u0631\u06CC\u0646 \u0642\u06D5\u0628\u0627\u0631\u06D5 {filesize}",labelMaxTotalFileSizeExceeded:"\u0632\u06C6\u0631\u062A\u0631\u06CC\u0646 \u0642\u06D5\u0628\u0627\u0631\u06D5\u06CC \u06A9\u06C6\u06CC \u06AF\u0634\u062A\u06CC \u062A\u06CE\u067E\u06D5\u0695\u06CE\u0646\u062F\u0631\u0627",labelMaxTotalFileSize:"\u0632\u06C6\u0631\u062A\u0631\u06CC\u0646 \u0642\u06D5\u0628\u0627\u0631\u06D5\u06CC \u06A9\u06C6\u06CC \u067E\u06D5\u0695\u06AF\u06D5 {filesize}",labelFileTypeNotAllowed:"\u062C\u06C6\u0631\u06CC \u067E\u06D5\u0695\u06AF\u06D5\u06A9\u06D5 \u0646\u0627\u062F\u0631\u0648\u0633\u062A\u06D5",fileValidateTypeLabelExpectedTypes:"\u062C\u06AF\u06D5 \u0644\u06D5 {allButLastType} \u06CC\u0627\u0646 {lastType}",imageValidateSizeLabelFormatError:"\u062C\u06C6\u0631\u06CC \u0648\u06CE\u0646\u06D5 \u067E\u0627\u06B5\u067E\u0634\u062A\u06CC\u06CC \u0646\u06D5\u06A9\u0631\u0627\u0648\u06D5",imageValidateSizeLabelImageSizeTooSmall:"\u0648\u06CE\u0646\u06D5\u06A9\u06D5 \u0632\u06C6\u0631 \u0628\u0686\u0648\u0648\u06A9\u06D5",imageValidateSizeLabelImageSizeTooBig:"\u0648\u06CE\u0646\u06D5\u06A9\u06D5 \u0632\u06C6\u0631 \u06AF\u06D5\u0648\u0631\u06D5\u06CC\u06D5",imageValidateSizeLabelExpectedMinSize:"\u06A9\u06D5\u0645\u062A\u0631\u06CC\u0646 \u0642\u06D5\u0628\u0627\u0631\u06D5 {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"\u0632\u06C6\u0631\u062A\u0631\u06CC\u0646 \u0642\u06D5\u0628\u0627\u0631\u06D5 {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"\u0648\u0631\u062F\u0628\u06CC\u0646\u06CC\u06CC\u06D5\u06A9\u06D5\u06CC \u0632\u06C6\u0631 \u06A9\u06D5\u0645\u06D5",imageValidateSizeLabelImageResolutionTooHigh:"\u0648\u0631\u062F\u0628\u06CC\u0646\u06CC\u06CC\u06D5\u06A9\u06D5\u06CC \u0632\u06C6\u0631 \u0628\u06D5\u0631\u0632\u06D5",imageValidateSizeLabelExpectedMinResolution:"\u06A9\u06D5\u0645\u062A\u0631\u06CC\u0646 \u0648\u0631\u062F\u0628\u06CC\u0646\u06CC\u06CC {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"\u0632\u06C6\u0631\u062A\u0631\u06CC\u0646 \u0648\u0631\u062F\u0628\u06CC\u0646\u06CC {maxResolution}"};var Al={labelIdle:'P\u0159et\xE1hn\u011Bte soubor sem (drag&drop) nebo Vyhledat ',labelInvalidField:"Pole obsahuje chybn\xE9 soubory",labelFileWaitingForSize:"Zji\u0161\u0165uje se velikost",labelFileSizeNotAvailable:"Velikost nen\xED zn\xE1m\xE1",labelFileLoading:"P\u0159en\xE1\u0161\xED se",labelFileLoadError:"Chyba p\u0159i p\u0159enosu",labelFileProcessing:"Prob\xEDh\xE1 upload",labelFileProcessingComplete:"Upload dokon\u010Den",labelFileProcessingAborted:"Upload stornov\xE1n",labelFileProcessingError:"Chyba p\u0159i uploadu",labelFileProcessingRevertError:"Chyba p\u0159i obnov\u011B",labelFileRemoveError:"Chyba p\u0159i odstran\u011Bn\xED",labelTapToCancel:"klepn\u011Bte pro storno",labelTapToRetry:"klepn\u011Bte pro opakov\xE1n\xED",labelTapToUndo:"klepn\u011Bte pro vr\xE1cen\xED",labelButtonRemoveItem:"Odstranit",labelButtonAbortItemLoad:"Storno",labelButtonRetryItemLoad:"Opakovat",labelButtonAbortItemProcessing:"Zp\u011Bt",labelButtonUndoItemProcessing:"Vr\xE1tit",labelButtonRetryItemProcessing:"Opakovat",labelButtonProcessItem:"Upload",labelMaxFileSizeExceeded:"Soubor je p\u0159\xEDli\u0161 velk\xFD",labelMaxFileSize:"Nejv\u011Bt\u0161\xED velikost souboru je {filesize}",labelMaxTotalFileSizeExceeded:"P\u0159ekro\u010Dena maxim\xE1ln\xED celkov\xE1 velikost souboru",labelMaxTotalFileSize:"Maxim\xE1ln\xED celkov\xE1 velikost souboru je {filesize}",labelFileTypeNotAllowed:"Soubor je nespr\xE1vn\xE9ho typu",fileValidateTypeLabelExpectedTypes:"O\u010Dek\xE1v\xE1 se {allButLastType} nebo {lastType}",imageValidateSizeLabelFormatError:"Obr\xE1zek tohoto typu nen\xED podporov\xE1n",imageValidateSizeLabelImageSizeTooSmall:"Obr\xE1zek je p\u0159\xEDli\u0161 mal\xFD",imageValidateSizeLabelImageSizeTooBig:"Obr\xE1zek je p\u0159\xEDli\u0161 velk\xFD",imageValidateSizeLabelExpectedMinSize:"Minim\xE1ln\xED rozm\u011Br je {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"Maxim\xE1ln\xED rozm\u011Br je {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"Rozli\u0161en\xED je p\u0159\xEDli\u0161 mal\xE9",imageValidateSizeLabelImageResolutionTooHigh:"Rozli\u0161en\xED je p\u0159\xEDli\u0161 velk\xE9",imageValidateSizeLabelExpectedMinResolution:"Minim\xE1ln\xED rozli\u0161en\xED je {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Maxim\xE1ln\xED rozli\u0161en\xED je {maxResolution}"};var Ml={labelIdle:'Tr\xE6k & slip filer eller Gennemse ',labelInvalidField:"Felt indeholder ugyldige filer",labelFileWaitingForSize:"Venter p\xE5 st\xF8rrelse",labelFileSizeNotAvailable:"St\xF8rrelse ikke tilg\xE6ngelig",labelFileLoading:"Loader",labelFileLoadError:"Load fejlede",labelFileProcessing:"Uploader",labelFileProcessingComplete:"Upload f\xE6rdig",labelFileProcessingAborted:"Upload annulleret",labelFileProcessingError:"Upload fejlede",labelFileProcessingRevertError:"Fortryd fejlede",labelFileRemoveError:"Fjern fejlede",labelTapToCancel:"tryk for at annullere",labelTapToRetry:"tryk for at pr\xF8ve igen",labelTapToUndo:"tryk for at fortryde",labelButtonRemoveItem:"Fjern",labelButtonAbortItemLoad:"Annuller",labelButtonRetryItemLoad:"Fors\xF8g igen",labelButtonAbortItemProcessing:"Annuller",labelButtonUndoItemProcessing:"Fortryd",labelButtonRetryItemProcessing:"Pr\xF8v igen",labelButtonProcessItem:"Upload",labelMaxFileSizeExceeded:"Filen er for stor",labelMaxFileSize:"Maksimal filst\xF8rrelse er {filesize}",labelMaxTotalFileSizeExceeded:"Maksimal totalst\xF8rrelse overskredet",labelMaxTotalFileSize:"Maksimal total filst\xF8rrelse er {filesize}",labelFileTypeNotAllowed:"Ugyldig filtype",fileValidateTypeLabelExpectedTypes:"Forventer {allButLastType} eller {lastType}",imageValidateSizeLabelFormatError:"Ugyldigt format",imageValidateSizeLabelImageSizeTooSmall:"Billedet er for lille",imageValidateSizeLabelImageSizeTooBig:"Billedet er for stort",imageValidateSizeLabelExpectedMinSize:"Minimum st\xF8rrelse er {minBredde} \xD7 {minH\xF8jde}",imageValidateSizeLabelExpectedMaxSize:"Maksimal st\xF8rrelse er {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"For lav opl\xF8sning",imageValidateSizeLabelImageResolutionTooHigh:"For h\xF8j opl\xF8sning",imageValidateSizeLabelExpectedMinResolution:"Minimum opl\xF8sning er {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Maksimal opl\xF8sning er {maxResolution}"};var Ol={labelIdle:'Dateien ablegen oder ausw\xE4hlen ',labelInvalidField:"Feld beinhaltet ung\xFCltige Dateien",labelFileWaitingForSize:"Dateigr\xF6\xDFe berechnen",labelFileSizeNotAvailable:"Dateigr\xF6\xDFe nicht verf\xFCgbar",labelFileLoading:"Laden",labelFileLoadError:"Fehler beim Laden",labelFileProcessing:"Upload l\xE4uft",labelFileProcessingComplete:"Upload abgeschlossen",labelFileProcessingAborted:"Upload abgebrochen",labelFileProcessingError:"Fehler beim Upload",labelFileProcessingRevertError:"Fehler beim Wiederherstellen",labelFileRemoveError:"Fehler beim L\xF6schen",labelTapToCancel:"abbrechen",labelTapToRetry:"erneut versuchen",labelTapToUndo:"r\xFCckg\xE4ngig",labelButtonRemoveItem:"Entfernen",labelButtonAbortItemLoad:"Verwerfen",labelButtonRetryItemLoad:"Erneut versuchen",labelButtonAbortItemProcessing:"Abbrechen",labelButtonUndoItemProcessing:"R\xFCckg\xE4ngig",labelButtonRetryItemProcessing:"Erneut versuchen",labelButtonProcessItem:"Upload",labelMaxFileSizeExceeded:"Datei ist zu gro\xDF",labelMaxFileSize:"Maximale Dateigr\xF6\xDFe: {filesize}",labelMaxTotalFileSizeExceeded:"Maximale gesamte Dateigr\xF6\xDFe \xFCberschritten",labelMaxTotalFileSize:"Maximale gesamte Dateigr\xF6\xDFe: {filesize}",labelFileTypeNotAllowed:"Dateityp ung\xFCltig",fileValidateTypeLabelExpectedTypes:"Erwartet {allButLastType} oder {lastType}",imageValidateSizeLabelFormatError:"Bildtyp nicht unterst\xFCtzt",imageValidateSizeLabelImageSizeTooSmall:"Bild ist zu klein",imageValidateSizeLabelImageSizeTooBig:"Bild ist zu gro\xDF",imageValidateSizeLabelExpectedMinSize:"Mindestgr\xF6\xDFe: {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"Maximale Gr\xF6\xDFe: {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"Aufl\xF6sung ist zu niedrig",imageValidateSizeLabelImageResolutionTooHigh:"Aufl\xF6sung ist zu hoch",imageValidateSizeLabelExpectedMinResolution:"Mindestaufl\xF6sung: {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Maximale Aufl\xF6sung: {maxResolution}"};var Pl={labelIdle:'Drag & Drop your files or Browse ',labelInvalidField:"Field contains invalid files",labelFileWaitingForSize:"Waiting for size",labelFileSizeNotAvailable:"Size not available",labelFileLoading:"Loading",labelFileLoadError:"Error during load",labelFileProcessing:"Uploading",labelFileProcessingComplete:"Upload complete",labelFileProcessingAborted:"Upload cancelled",labelFileProcessingError:"Error during upload",labelFileProcessingRevertError:"Error during revert",labelFileRemoveError:"Error during remove",labelTapToCancel:"tap to cancel",labelTapToRetry:"tap to retry",labelTapToUndo:"tap to undo",labelButtonRemoveItem:"Remove",labelButtonAbortItemLoad:"Abort",labelButtonRetryItemLoad:"Retry",labelButtonAbortItemProcessing:"Cancel",labelButtonUndoItemProcessing:"Undo",labelButtonRetryItemProcessing:"Retry",labelButtonProcessItem:"Upload",labelMaxFileSizeExceeded:"File is too large",labelMaxFileSize:"Maximum file size is {filesize}",labelMaxTotalFileSizeExceeded:"Maximum total size exceeded",labelMaxTotalFileSize:"Maximum total file size is {filesize}",labelFileTypeNotAllowed:"File of invalid type",fileValidateTypeLabelExpectedTypes:"Expects {allButLastType} or {lastType}",imageValidateSizeLabelFormatError:"Image type not supported",imageValidateSizeLabelImageSizeTooSmall:"Image is too small",imageValidateSizeLabelImageSizeTooBig:"Image is too big",imageValidateSizeLabelExpectedMinSize:"Minimum size is {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"Maximum size is {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"Resolution is too low",imageValidateSizeLabelImageResolutionTooHigh:"Resolution is too high",imageValidateSizeLabelExpectedMinResolution:"Minimum resolution is {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Maximum resolution is {maxResolution}"};var Dl={labelIdle:'Arrastra y suelta tus archivos o Examina ',labelInvalidField:"El campo contiene archivos inv\xE1lidos",labelFileWaitingForSize:"Esperando tama\xF1o",labelFileSizeNotAvailable:"Tama\xF1o no disponible",labelFileLoading:"Cargando",labelFileLoadError:"Error durante la carga",labelFileProcessing:"Subiendo",labelFileProcessingComplete:"Subida completa",labelFileProcessingAborted:"Subida cancelada",labelFileProcessingError:"Error durante la subida",labelFileProcessingRevertError:"Error durante la reversi\xF3n",labelFileRemoveError:"Error durante la eliminaci\xF3n",labelTapToCancel:"toca para cancelar",labelTapToRetry:"tocar para reintentar",labelTapToUndo:"tocar para deshacer",labelButtonRemoveItem:"Eliminar",labelButtonAbortItemLoad:"Cancelar",labelButtonRetryItemLoad:"Reintentar",labelButtonAbortItemProcessing:"Cancelar",labelButtonUndoItemProcessing:"Deshacer",labelButtonRetryItemProcessing:"Reintentar",labelButtonProcessItem:"Subir",labelMaxFileSizeExceeded:"El archivo es demasiado grande",labelMaxFileSize:"El tama\xF1o m\xE1ximo del archivo es {filesize}",labelMaxTotalFileSizeExceeded:"Tama\xF1o total m\xE1ximo excedido",labelMaxTotalFileSize:"El tama\xF1o total m\xE1ximo del archivo es {filesize}",labelFileTypeNotAllowed:"Archivo de tipo inv\xE1lido",fileValidateTypeLabelExpectedTypes:"Espera {allButLastType} o {lastType}",imageValidateSizeLabelFormatError:"Tipo de imagen no soportada",imageValidateSizeLabelImageSizeTooSmall:"La imagen es demasiado peque\xF1a",imageValidateSizeLabelImageSizeTooBig:"La imagen es demasiado grande",imageValidateSizeLabelExpectedMinSize:"El tama\xF1o m\xEDnimo es {minWidth} x {minHeight}",imageValidateSizeLabelExpectedMaxSize:"El tama\xF1o m\xE1ximo es {maxWidth} x {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"La resoluci\xF3n es demasiado baja",imageValidateSizeLabelImageResolutionTooHigh:"La resoluci\xF3n es demasiado alta",imageValidateSizeLabelExpectedMinResolution:"La resoluci\xF3n m\xEDnima es {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"La resoluci\xF3n m\xE1xima es {maxResolution}"};var Fl={labelIdle:'\u0641\u0627\u06CC\u0644 \u0631\u0627 \u0627\u06CC\u0646\u062C\u0627 \u0628\u06A9\u0634\u06CC\u062F \u0648 \u0631\u0647\u0627 \u06A9\u0646\u06CC\u062F\u060C \u06CC\u0627 \u062C\u0633\u062A\u062C\u0648 \u06A9\u0646\u06CC\u062F ',labelInvalidField:"\u0641\u06CC\u0644\u062F \u062F\u0627\u0631\u0627\u06CC \u0641\u0627\u06CC\u0644 \u0647\u0627\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631 \u0627\u0633\u062A",labelFileWaitingForSize:"Waiting for size",labelFileSizeNotAvailable:"\u062D\u062C\u0645 \u0641\u0627\u06CC\u0644 \u0645\u062C\u0627\u0632 \u0646\u06CC\u0633\u062A",labelFileLoading:"\u062F\u0631\u062D\u0627\u0644 \u0628\u0627\u0631\u06AF\u0630\u0627\u0631\u06CC",labelFileLoadError:"\u062E\u0637\u0627 \u062F\u0631 \u0632\u0645\u0627\u0646 \u0627\u062C\u0631\u0627",labelFileProcessing:"\u062F\u0631\u062D\u0627\u0644 \u0628\u0627\u0631\u06AF\u0630\u0627\u0631\u06CC",labelFileProcessingComplete:"\u0628\u0627\u0631\u06AF\u0630\u0627\u0631\u06CC \u06A9\u0627\u0645\u0644 \u0634\u062F",labelFileProcessingAborted:"\u0628\u0627\u0631\u06AF\u0630\u0627\u0631\u06CC \u0644\u063A\u0648 \u0634\u062F",labelFileProcessingError:"\u062E\u0637\u0627 \u062F\u0631 \u0632\u0645\u0627\u0646 \u0628\u0627\u0631\u06AF\u0630\u0627\u0631\u06CC",labelFileProcessingRevertError:"\u062E\u0637\u0627 \u062F\u0631 \u0632\u0645\u0627\u0646 \u062D\u0630\u0641",labelFileRemoveError:"\u062E\u0637\u0627 \u062F\u0631 \u0632\u0645\u0627\u0646 \u062D\u0630\u0641",labelTapToCancel:"\u0628\u0631\u0627\u06CC \u0644\u063A\u0648 \u0636\u0631\u0628\u0647 \u0628\u0632\u0646\u06CC\u062F",labelTapToRetry:"\u0628\u0631\u0627\u06CC \u062A\u06A9\u0631\u0627\u0631 \u06A9\u0644\u06CC\u06A9 \u06A9\u0646\u06CC\u062F",labelTapToUndo:"\u0628\u0631\u0627\u06CC \u0628\u0631\u06AF\u0634\u062A \u06A9\u0644\u06CC\u06A9 \u06A9\u0646\u06CC\u062F",labelButtonRemoveItem:"\u062D\u0630\u0641",labelButtonAbortItemLoad:"\u0644\u063A\u0648",labelButtonRetryItemLoad:"\u062A\u06A9\u0631\u0627\u0631",labelButtonAbortItemProcessing:"\u0644\u063A\u0648",labelButtonUndoItemProcessing:"\u0628\u0631\u06AF\u0634\u062A",labelButtonRetryItemProcessing:"\u062A\u06A9\u0631\u0627\u0631",labelButtonProcessItem:"\u0628\u0627\u0631\u06AF\u0630\u0627\u0631\u06CC",labelMaxFileSizeExceeded:"\u0641\u0627\u06CC\u0644 \u0628\u0633\u06CC\u0627\u0631 \u062D\u062C\u06CC\u0645 \u0627\u0633\u062A",labelMaxFileSize:"\u062D\u062F\u0627\u06A9\u062B\u0631 \u0645\u062C\u0627\u0632 \u0641\u0627\u06CC\u0644 {filesize} \u0627\u0633\u062A",labelMaxTotalFileSizeExceeded:"\u0627\u0632 \u062D\u062F\u0627\u06A9\u062B\u0631 \u062D\u062C\u0645 \u0641\u0627\u06CC\u0644 \u0628\u06CC\u0634\u062A\u0631 \u0634\u062F",labelMaxTotalFileSize:"\u062D\u062F\u0627\u06A9\u062B\u0631 \u062D\u062C\u0645 \u0641\u0627\u06CC\u0644 {filesize} \u0627\u0633\u062A",labelFileTypeNotAllowed:"\u0646\u0648\u0639 \u0641\u0627\u06CC\u0644 \u0646\u0627\u0645\u0639\u062A\u0628\u0631 \u0627\u0633\u062A",fileValidateTypeLabelExpectedTypes:"\u062F\u0631 \u0627\u0646\u062A\u0638\u0627\u0631 {allButLastType} \u06CC\u0627 {lastType}",imageValidateSizeLabelFormatError:"\u0641\u0631\u0645\u062A \u062A\u0635\u0648\u06CC\u0631 \u067E\u0634\u062A\u06CC\u0628\u0627\u0646\u06CC \u0646\u0645\u06CC \u0634\u0648\u062F",imageValidateSizeLabelImageSizeTooSmall:"\u062A\u0635\u0648\u06CC\u0631 \u0628\u0633\u06CC\u0627\u0631 \u06A9\u0648\u0686\u06A9 \u0627\u0633\u062A",imageValidateSizeLabelImageSizeTooBig:"\u062A\u0635\u0648\u06CC\u0631 \u0628\u0633\u06CC\u0627\u0631 \u0628\u0632\u0631\u06AF \u0627\u0633\u062A",imageValidateSizeLabelExpectedMinSize:"\u062D\u062F\u0627\u0642\u0644 \u0627\u0646\u062F\u0627\u0632\u0647 {minWidth} \xD7 {minHeight} \u0627\u0633\u062A",imageValidateSizeLabelExpectedMaxSize:"\u062D\u062F\u0627\u06A9\u062B\u0631 \u0627\u0646\u062F\u0627\u0632\u0647 {maxWidth} \xD7 {maxHeight} \u0627\u0633\u062A",imageValidateSizeLabelImageResolutionTooLow:"\u0648\u0636\u0648\u062D \u062A\u0635\u0648\u06CC\u0631 \u0628\u0633\u06CC\u0627\u0631 \u06A9\u0645 \u0627\u0633\u062A",imageValidateSizeLabelImageResolutionTooHigh:"\u0648\u0636\u0648\u0639 \u062A\u0635\u0648\u06CC\u0631 \u0628\u0633\u06CC\u0627\u0631 \u0632\u06CC\u0627\u062F \u0627\u0633\u062A",imageValidateSizeLabelExpectedMinResolution:"\u062D\u062F\u0627\u0642\u0644 \u0648\u0636\u0648\u062D \u062A\u0635\u0648\u06CC\u0631 {minResolution} \u0627\u0633\u062A",imageValidateSizeLabelExpectedMaxResolution:"\u062D\u062F\u0627\u06A9\u062B\u0631 \u0648\u0636\u0648\u062D \u062A\u0635\u0648\u06CC\u0631 {maxResolution} \u0627\u0633\u062A"};var zl={labelIdle:'Ved\xE4 ja pudota tiedostoja tai Selaa ',labelInvalidField:"Kent\xE4ss\xE4 on virheellisi\xE4 tiedostoja",labelFileWaitingForSize:"Odotetaan kokoa",labelFileSizeNotAvailable:"Kokoa ei saatavilla",labelFileLoading:"Ladataan",labelFileLoadError:"Virhe latauksessa",labelFileProcessing:"L\xE4hetet\xE4\xE4n",labelFileProcessingComplete:"L\xE4hetys valmis",labelFileProcessingAborted:"L\xE4hetys peruttu",labelFileProcessingError:"Virhe l\xE4hetyksess\xE4",labelFileProcessingRevertError:"Virhe palautuksessa",labelFileRemoveError:"Virhe poistamisessa",labelTapToCancel:"peruuta napauttamalla",labelTapToRetry:"yrit\xE4 uudelleen napauttamalla",labelTapToUndo:"kumoa napauttamalla",labelButtonRemoveItem:"Poista",labelButtonAbortItemLoad:"Keskeyt\xE4",labelButtonRetryItemLoad:"Yrit\xE4 uudelleen",labelButtonAbortItemProcessing:"Peruuta",labelButtonUndoItemProcessing:"Kumoa",labelButtonRetryItemProcessing:"Yrit\xE4 uudelleen",labelButtonProcessItem:"L\xE4het\xE4",labelMaxFileSizeExceeded:"Tiedoston koko on liian suuri",labelMaxFileSize:"Tiedoston maksimikoko on {filesize}",labelMaxTotalFileSizeExceeded:"Tiedostojen yhdistetty maksimikoko ylitetty",labelMaxTotalFileSize:"Tiedostojen yhdistetty maksimikoko on {filesize}",labelFileTypeNotAllowed:"Tiedostotyyppi\xE4 ei sallita",fileValidateTypeLabelExpectedTypes:"Sallitaan {allButLastType} tai {lastType}",imageValidateSizeLabelFormatError:"Kuvatyyppi\xE4 ei tueta",imageValidateSizeLabelImageSizeTooSmall:"Kuva on liian pieni",imageValidateSizeLabelImageSizeTooBig:"Kuva on liian suuri",imageValidateSizeLabelExpectedMinSize:"Minimikoko on {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"Maksimikoko on {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"Resoluutio on liian pieni",imageValidateSizeLabelImageResolutionTooHigh:"Resoluutio on liian suuri",imageValidateSizeLabelExpectedMinResolution:"Minimiresoluutio on {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Maksimiresoluutio on {maxResolution}"};var Cl={labelIdle:'Faites glisser vos fichiers ou Parcourir ',labelInvalidField:"Le champ contient des fichiers invalides",labelFileWaitingForSize:"En attente de taille",labelFileSizeNotAvailable:"Taille non disponible",labelFileLoading:"Chargement",labelFileLoadError:"Erreur durant le chargement",labelFileProcessing:"Traitement",labelFileProcessingComplete:"Traitement effectu\xE9",labelFileProcessingAborted:"Traitement interrompu",labelFileProcessingError:"Erreur durant le traitement",labelFileProcessingRevertError:"Erreur durant la restauration",labelFileRemoveError:"Erreur durant la suppression",labelTapToCancel:"appuyer pour annuler",labelTapToRetry:"appuyer pour r\xE9essayer",labelTapToUndo:"appuyer pour revenir en arri\xE8re",labelButtonRemoveItem:"Retirer",labelButtonAbortItemLoad:"Annuler",labelButtonRetryItemLoad:"Recommencer",labelButtonAbortItemProcessing:"Annuler",labelButtonUndoItemProcessing:"Revenir en arri\xE8re",labelButtonRetryItemProcessing:"Recommencer",labelButtonProcessItem:"Transf\xE9rer",labelMaxFileSizeExceeded:"Le fichier est trop volumineux",labelMaxFileSize:"La taille maximale de fichier est {filesize}",labelMaxTotalFileSizeExceeded:"Taille totale maximale d\xE9pass\xE9e",labelMaxTotalFileSize:"La taille totale maximale des fichiers est {filesize}",labelFileTypeNotAllowed:"Fichier non valide",fileValidateTypeLabelExpectedTypes:"Attendu {allButLastType} ou {lastType}",imageValidateSizeLabelFormatError:"Type d'image non pris en charge",imageValidateSizeLabelImageSizeTooSmall:"L'image est trop petite",imageValidateSizeLabelImageSizeTooBig:"L'image est trop grande",imageValidateSizeLabelExpectedMinSize:"La taille minimale est {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"La taille maximale est {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"La r\xE9solution est trop faible",imageValidateSizeLabelImageResolutionTooHigh:"La r\xE9solution est trop \xE9lev\xE9e",imageValidateSizeLabelExpectedMinResolution:"La r\xE9solution minimale est {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"La r\xE9solution maximale est {maxResolution}"};var Nl={labelIdle:'Mozgasd ide a f\xE1jlt a felt\xF6lt\xE9shez, vagy tall\xF3z\xE1s ',labelInvalidField:"A mez\u0151 \xE9rv\xE9nytelen f\xE1jlokat tartalmaz",labelFileWaitingForSize:"F\xE1ljm\xE9ret kisz\xE1mol\xE1sa",labelFileSizeNotAvailable:"A f\xE1jlm\xE9ret nem el\xE9rhet\u0151",labelFileLoading:"T\xF6lt\xE9s",labelFileLoadError:"Hiba a bet\xF6lt\xE9s sor\xE1n",labelFileProcessing:"Felt\xF6lt\xE9s",labelFileProcessingComplete:"Sikeres felt\xF6lt\xE9s",labelFileProcessingAborted:"A felt\xF6lt\xE9s megszak\xEDtva",labelFileProcessingError:"Hiba t\xF6rt\xE9nt a felt\xF6lt\xE9s sor\xE1n",labelFileProcessingRevertError:"Hiba a vissza\xE1ll\xEDt\xE1s sor\xE1n",labelFileRemoveError:"Hiba t\xF6rt\xE9nt az elt\xE1vol\xEDt\xE1s sor\xE1n",labelTapToCancel:"koppints a t\xF6rl\xE9shez",labelTapToRetry:"koppints az \xFAjrakezd\xE9shez",labelTapToUndo:"koppints a visszavon\xE1shoz",labelButtonRemoveItem:"Elt\xE1vol\xEDt\xE1s",labelButtonAbortItemLoad:"Megszak\xEDt\xE1s",labelButtonRetryItemLoad:"\xDAjrapr\xF3b\xE1lkoz\xE1s",labelButtonAbortItemProcessing:"Megszak\xEDt\xE1s",labelButtonUndoItemProcessing:"Visszavon\xE1s",labelButtonRetryItemProcessing:"\xDAjrapr\xF3b\xE1lkoz\xE1s",labelButtonProcessItem:"Felt\xF6lt\xE9s",labelMaxFileSizeExceeded:"A f\xE1jl t\xFAll\xE9pte a maxim\xE1lis m\xE9retet",labelMaxFileSize:"Maxim\xE1lis f\xE1jlm\xE9ret: {filesize}",labelMaxTotalFileSizeExceeded:"T\xFAll\xE9pte a maxim\xE1lis teljes m\xE9retet",labelMaxTotalFileSize:"A maxim\xE1is teljes f\xE1jlm\xE9ret: {filesize}",labelFileTypeNotAllowed:"\xC9rv\xE9nytelen t\xEDpus\xFA f\xE1jl",fileValidateTypeLabelExpectedTypes:"Enged\xE9lyezett t\xEDpusok {allButLastType} vagy {lastType}",imageValidateSizeLabelFormatError:"A k\xE9pt\xEDpus nem t\xE1mogatott",imageValidateSizeLabelImageSizeTooSmall:"A k\xE9p t\xFAl kicsi",imageValidateSizeLabelImageSizeTooBig:"A k\xE9p t\xFAl nagy",imageValidateSizeLabelExpectedMinSize:"Minimum m\xE9ret: {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"Maximum m\xE9ret: {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"A felbont\xE1s t\xFAl alacsony",imageValidateSizeLabelImageResolutionTooHigh:"A felbont\xE1s t\xFAl magas",imageValidateSizeLabelExpectedMinResolution:"Minim\xE1is felbont\xE1s: {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Maxim\xE1lis felbont\xE1s: {maxResolution}"};var Bl={labelIdle:'Seret & Jatuhkan berkas Anda atau Jelajahi',labelInvalidField:"Isian berisi berkas yang tidak valid",labelFileWaitingForSize:"Menunggu ukuran berkas",labelFileSizeNotAvailable:"Ukuran berkas tidak tersedia",labelFileLoading:"Memuat",labelFileLoadError:"Kesalahan saat memuat",labelFileProcessing:"Mengunggah",labelFileProcessingComplete:"Pengunggahan selesai",labelFileProcessingAborted:"Pengunggahan dibatalkan",labelFileProcessingError:"Kesalahan saat pengunggahan",labelFileProcessingRevertError:"Kesalahan saat pemulihan",labelFileRemoveError:"Kesalahan saat penghapusan",labelTapToCancel:"ketuk untuk membatalkan",labelTapToRetry:"ketuk untuk mencoba lagi",labelTapToUndo:"ketuk untuk mengurungkan",labelButtonRemoveItem:"Hapus",labelButtonAbortItemLoad:"Batalkan",labelButtonRetryItemLoad:"Coba Kembali",labelButtonAbortItemProcessing:"Batalkan",labelButtonUndoItemProcessing:"Urungkan",labelButtonRetryItemProcessing:"Coba Kembali",labelButtonProcessItem:"Unggah",labelMaxFileSizeExceeded:"Berkas terlalu besar",labelMaxFileSize:"Ukuran berkas maksimum adalah {filesize}",labelMaxTotalFileSizeExceeded:"Jumlah berkas maksimum terlampaui",labelMaxTotalFileSize:"Jumlah berkas maksimum adalah {filesize}",labelFileTypeNotAllowed:"Jenis berkas tidak valid",fileValidateTypeLabelExpectedTypes:"Mengharapkan {allButLastType} atau {lastType}",imageValidateSizeLabelFormatError:"Jenis citra tidak didukung",imageValidateSizeLabelImageSizeTooSmall:"Citra terlalu kecil",imageValidateSizeLabelImageSizeTooBig:"Citra terlalu besar",imageValidateSizeLabelExpectedMinSize:"Ukuran minimum adalah {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"Ukuran maksimum adalah {minWidth} \xD7 {minHeight}",imageValidateSizeLabelImageResolutionTooLow:"Resolusi terlalu rendah",imageValidateSizeLabelImageResolutionTooHigh:"Resolusi terlalu tinggi",imageValidateSizeLabelExpectedMinResolution:"Resolusi minimum adalah {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Resolusi maksimum adalah {maxResolution}"};var kl={labelIdle:'Trascina e rilascia i tuoi file oppure Carica ',labelInvalidField:"Il campo contiene dei file non validi",labelFileWaitingForSize:"Aspettando le dimensioni",labelFileSizeNotAvailable:"Dimensioni non disponibili",labelFileLoading:"Caricamento",labelFileLoadError:"Errore durante il caricamento",labelFileProcessing:"Caricamento",labelFileProcessingComplete:"Caricamento completato",labelFileProcessingAborted:"Caricamento cancellato",labelFileProcessingError:"Errore durante il caricamento",labelFileProcessingRevertError:"Errore durante il ripristino",labelFileRemoveError:"Errore durante l'eliminazione",labelTapToCancel:"tocca per cancellare",labelTapToRetry:"tocca per riprovare",labelTapToUndo:"tocca per ripristinare",labelButtonRemoveItem:"Elimina",labelButtonAbortItemLoad:"Cancella",labelButtonRetryItemLoad:"Ritenta",labelButtonAbortItemProcessing:"Camcella",labelButtonUndoItemProcessing:"Indietro",labelButtonRetryItemProcessing:"Ritenta",labelButtonProcessItem:"Carica",labelMaxFileSizeExceeded:"Il peso del file \xE8 eccessivo",labelMaxFileSize:"Il peso massimo del file \xE8 {filesize}",labelMaxTotalFileSizeExceeded:"Dimensione totale massima superata",labelMaxTotalFileSize:"La dimensione massima totale del file \xE8 {filesize}",labelFileTypeNotAllowed:"File non supportato",fileValidateTypeLabelExpectedTypes:"Aspetta {allButLastType} o {lastType}",imageValidateSizeLabelFormatError:"Tipo di immagine non compatibile",imageValidateSizeLabelImageSizeTooSmall:"L'immagine \xE8 troppo piccola",imageValidateSizeLabelImageSizeTooBig:"L'immagine \xE8 troppo grande",imageValidateSizeLabelExpectedMinSize:"La dimensione minima \xE8 {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"La dimensione massima \xE8 {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"La risoluzione \xE8 troppo bassa",imageValidateSizeLabelImageResolutionTooHigh:"La risoluzione \xE8 troppo alta",imageValidateSizeLabelExpectedMinResolution:"La risoluzione minima \xE8 {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"La risoluzione massima \xE8 {maxResolution}"};var Vl={labelIdle:'\u1791\u17B6\u1789&\u178A\u17B6\u1780\u17CB\u17A0\u17D2\u179C\u17B6\u179B\u17CB\u17AF\u1780\u179F\u17B6\u179A\u179A\u1794\u179F\u17CB\u17A2\u17D2\u1793\u1780 \u17AC \u179F\u17D2\u179C\u17C2\u1784\u179A\u1780 ',labelInvalidField:"\u1785\u1793\u17D2\u179B\u17C4\u17C7\u1798\u17B6\u1793\u17AF\u1780\u179F\u17B6\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C",labelFileWaitingForSize:"\u1780\u17C6\u1796\u17BB\u1784\u179A\u1784\u17CB\u1785\u17B6\u17C6\u1791\u17C6\u17A0\u17C6",labelFileSizeNotAvailable:"\u1791\u17C6\u17A0\u17C6\u1798\u17B7\u1793\u17A2\u17B6\u1785\u1794\u17D2\u179A\u17BE\u1794\u17B6\u1793",labelFileLoading:"\u1780\u17C6\u1796\u17BB\u1784\u178A\u17C6\u178E\u17BE\u179A\u1780\u17B6\u179A",labelFileLoadError:"\u1798\u17B6\u1793\u1794\u1789\u17D2\u17A0\u17B6\u1780\u17C6\u17A1\u17BB\u1784\u1796\u17C1\u179B\u178A\u17C6\u178E\u17BE\u179A\u1780\u17B6\u179A",labelFileProcessing:"\u1780\u17C6\u1796\u17BB\u1784\u1795\u17D2\u1791\u17BB\u1780\u17A1\u17BE\u1784",labelFileProcessingComplete:"\u1780\u17B6\u179A\u1795\u17D2\u1791\u17BB\u1780\u17A1\u17BE\u1784\u1796\u17C1\u1789\u179B\u17C1\u1789",labelFileProcessingAborted:"\u1780\u17B6\u179A\u1794\u1784\u17D2\u17A0\u17C4\u17C7\u178F\u17D2\u179A\u17BC\u179C\u1794\u17B6\u1793\u1794\u17C4\u17C7\u1794\u1784\u17CB",labelFileProcessingError:"\u1798\u17B6\u1793\u1794\u1789\u17D2\u17A0\u17B6\u1780\u17C6\u17A1\u17BB\u1784\u1796\u17C1\u179B\u1780\u17C6\u1796\u17BB\u1784\u1795\u17D2\u1791\u17BB\u1780\u17A1\u17BE\u1784",labelFileProcessingRevertError:"\u1798\u17B6\u1793\u1794\u1789\u17D2\u17A0\u17B6\u1780\u17C6\u17A1\u17BB\u1784\u1796\u17C1\u179B\u178F\u17D2\u179A\u17A1\u1794\u17CB",labelFileRemoveError:"\u1798\u17B6\u1793\u1794\u1789\u17D2\u17A0\u17B6\u1780\u17C6\u17A1\u17BB\u1784\u1796\u17C1\u179B\u178A\u1780\u1785\u17C1\u1789",labelTapToCancel:"\u1785\u17BB\u1785\u178A\u17BE\u1798\u17D2\u1794\u17B8\u1794\u17C4\u17C7\u1794\u1784\u17CB",labelTapToRetry:"\u1785\u17BB\u1785\u178A\u17BE\u1798\u17D2\u1794\u17B8\u1796\u17D2\u1799\u17B6\u1799\u17B6\u1798\u1798\u17D2\u178F\u1784\u1791\u17C0\u178F",labelTapToUndo:"\u1785\u17BB\u1785\u178A\u17BE\u1798\u17D2\u1794\u17B8\u1798\u17B7\u1793\u1792\u17D2\u179C\u17BE\u179C\u17B7\u1789",labelButtonRemoveItem:"\u1799\u1780\u1785\u17C1\u1789",labelButtonAbortItemLoad:"\u1794\u17C4\u17C7\u1794\u1784\u17CB",labelButtonRetryItemLoad:"\u1796\u17D2\u1799\u17B6\u1799\u17B6\u1798\u1798\u17D2\u178F\u1784\u1791\u17C0\u178F",labelButtonAbortItemProcessing:"\u1794\u17C4\u17C7\u1794\u1784\u17CB",labelButtonUndoItemProcessing:"\u1798\u17B7\u1793\u1792\u17D2\u179C\u17BE\u179C\u17B7\u1789",labelButtonRetryItemProcessing:"\u1796\u17D2\u1799\u17B6\u1799\u17B6\u1798\u1798\u17D2\u178F\u1784\u1791\u17C0\u178F",labelButtonProcessItem:"\u1795\u17D2\u1791\u17BB\u1780\u17A1\u17BE\u1784",labelMaxFileSizeExceeded:"\u17AF\u1780\u179F\u17B6\u179A\u1792\u17C6\u1796\u17C1\u1780",labelMaxFileSize:"\u1791\u17C6\u17A0\u17C6\u17AF\u1780\u179F\u17B6\u179A\u17A2\u178F\u17B7\u1794\u179A\u1798\u17B6\u1782\u17BA {filesize}",labelMaxTotalFileSizeExceeded:"\u179B\u17BE\u179F\u1791\u17C6\u17A0\u17C6\u179F\u179A\u17BB\u1794\u17A2\u178F\u17B7\u1794\u179A\u1798\u17B6",labelMaxTotalFileSize:"\u1791\u17C6\u17A0\u17C6\u17AF\u1780\u179F\u17B6\u179A\u179F\u179A\u17BB\u1794\u17A2\u178F\u17B7\u1794\u179A\u1798\u17B6\u1782\u17BA {filesize}",labelFileTypeNotAllowed:"\u1794\u17D2\u179A\u1797\u17C1\u1791\u17AF\u1780\u179F\u17B6\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C",fileValidateTypeLabelExpectedTypes:"\u179A\u17C6\u1796\u17B9\u1784\u1790\u17B6 {allButLastType} \u17AC {lastType}",imageValidateSizeLabelFormatError:"\u1794\u17D2\u179A\u1797\u17C1\u1791\u179A\u17BC\u1794\u1797\u17B6\u1796\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C",imageValidateSizeLabelImageSizeTooSmall:"\u179A\u17BC\u1794\u1797\u17B6\u1796\u178F\u17BC\u1785\u1796\u17C1\u1780",imageValidateSizeLabelImageSizeTooBig:"\u179A\u17BC\u1794\u1797\u17B6\u1796\u1792\u17C6\u1796\u17C1\u1780",imageValidateSizeLabelExpectedMinSize:"\u1791\u17C6\u17A0\u17C6\u17A2\u1794\u17D2\u1794\u1794\u179A\u1798\u17B6\u1782\u17BA {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"\u1791\u17C6\u17A0\u17C6\u17A2\u178F\u17B7\u1794\u179A\u1798\u17B6\u1782\u17BA {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"\u1782\u17BB\u178E\u1797\u17B6\u1796\u1794\u1784\u17D2\u17A0\u17B6\u1789\u1791\u17B6\u1794\u1796\u17C1\u1780",imageValidateSizeLabelImageResolutionTooHigh:"\u1782\u17BB\u178E\u1797\u17B6\u1796\u1794\u1784\u17D2\u17A0\u17B6\u1789\u1781\u17D2\u1796\u179F\u17CB\u1796\u17C1\u1780",imageValidateSizeLabelExpectedMinResolution:"\u1782\u17BB\u178E\u1797\u17B6\u1796\u1794\u1784\u17D2\u17A0\u17B6\u1789\u17A2\u1794\u17D2\u1794\u1794\u179A\u1798\u17B6\u1782\u17BA {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"\u1782\u17BB\u178E\u1797\u17B6\u1796\u1794\u1784\u17D2\u17A0\u17B6\u1789\u17A2\u178F\u17B7\u1794\u179A\u1798\u17B6\u1782\u17BA {maxResolution}"};var Gl={labelIdle:'Drag & Drop je bestanden of Bladeren ',labelInvalidField:"Veld bevat ongeldige bestanden",labelFileWaitingForSize:"Wachten op grootte",labelFileSizeNotAvailable:"Grootte niet beschikbaar",labelFileLoading:"Laden",labelFileLoadError:"Fout tijdens laden",labelFileProcessing:"Uploaden",labelFileProcessingComplete:"Upload afgerond",labelFileProcessingAborted:"Upload geannuleerd",labelFileProcessingError:"Fout tijdens upload",labelFileProcessingRevertError:"Fout bij herstellen",labelFileRemoveError:"Fout bij verwijderen",labelTapToCancel:"tik om te annuleren",labelTapToRetry:"tik om opnieuw te proberen",labelTapToUndo:"tik om ongedaan te maken",labelButtonRemoveItem:"Verwijderen",labelButtonAbortItemLoad:"Afbreken",labelButtonRetryItemLoad:"Opnieuw proberen",labelButtonAbortItemProcessing:"Annuleren",labelButtonUndoItemProcessing:"Ongedaan maken",labelButtonRetryItemProcessing:"Opnieuw proberen",labelButtonProcessItem:"Upload",labelMaxFileSizeExceeded:"Bestand is te groot",labelMaxFileSize:"Maximale bestandsgrootte is {filesize}",labelMaxTotalFileSizeExceeded:"Maximale totale grootte overschreden",labelMaxTotalFileSize:"Maximale totale bestandsgrootte is {filesize}",labelFileTypeNotAllowed:"Ongeldig bestandstype",fileValidateTypeLabelExpectedTypes:"Verwacht {allButLastType} of {lastType}",imageValidateSizeLabelFormatError:"Afbeeldingstype niet ondersteund",imageValidateSizeLabelImageSizeTooSmall:"Afbeelding is te klein",imageValidateSizeLabelImageSizeTooBig:"Afbeelding is te groot",imageValidateSizeLabelExpectedMinSize:"Minimale afmeting is {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"Maximale afmeting is {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"Resolutie is te laag",imageValidateSizeLabelImageResolutionTooHigh:"Resolution is too high",imageValidateSizeLabelExpectedMinResolution:"Minimale resolutie is {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Maximale resolutie is {maxResolution}"};var Ul={labelIdle:'Dra og slipp filene dine, eller Bla gjennom... ',labelInvalidField:"Feltet inneholder ugyldige filer",labelFileWaitingForSize:"Venter p\xE5 st\xF8rrelse",labelFileSizeNotAvailable:"St\xF8rrelse ikke tilgjengelig",labelFileLoading:"Laster",labelFileLoadError:"Feil under lasting",labelFileProcessing:"Laster opp",labelFileProcessingComplete:"Opplasting ferdig",labelFileProcessingAborted:"Opplasting avbrutt",labelFileProcessingError:"Feil under opplasting",labelFileProcessingRevertError:"Feil under reversering",labelFileRemoveError:"Feil under flytting",labelTapToCancel:"klikk for \xE5 avbryte",labelTapToRetry:"klikk for \xE5 pr\xF8ve p\xE5 nytt",labelTapToUndo:"klikk for \xE5 angre",labelButtonRemoveItem:"Fjern",labelButtonAbortItemLoad:"Avbryt",labelButtonRetryItemLoad:"Pr\xF8v p\xE5 nytt",labelButtonAbortItemProcessing:"Avbryt",labelButtonUndoItemProcessing:"Angre",labelButtonRetryItemProcessing:"Pr\xF8v p\xE5 nytt",labelButtonProcessItem:"Last opp",labelMaxFileSizeExceeded:"Filen er for stor",labelMaxFileSize:"Maksimal filst\xF8rrelse er {filesize}",labelMaxTotalFileSizeExceeded:"Maksimal total st\xF8rrelse oversteget",labelMaxTotalFileSize:"Maksimal total st\xF8rrelse er {filesize}",labelFileTypeNotAllowed:"Ugyldig filtype",fileValidateTypeLabelExpectedTypes:"Forventer {allButLastType} eller {lastType}",imageValidateSizeLabelFormatError:"Bildeformat ikke st\xF8ttet",imageValidateSizeLabelImageSizeTooSmall:"Bildet er for lite",imageValidateSizeLabelImageSizeTooBig:"Bildet er for stort",imageValidateSizeLabelExpectedMinSize:"Minimumsst\xF8rrelse er {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"Maksimumsst\xF8rrelse er {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"Oppl\xF8sningen er for lav",imageValidateSizeLabelImageResolutionTooHigh:"Oppl\xF8sningen er for h\xF8y",imageValidateSizeLabelExpectedMinResolution:"Minimum oppl\xF8sning er {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Maksimal oppl\xF8sning er {maxResolution}"};var Wl={labelIdle:'Przeci\u0105gnij i upu\u015B\u0107 lub wybierz pliki',labelInvalidField:"Nieprawid\u0142owe pliki",labelFileWaitingForSize:"Pobieranie rozmiaru",labelFileSizeNotAvailable:"Nieznany rozmiar",labelFileLoading:"Wczytywanie",labelFileLoadError:"B\u0142\u0105d wczytywania",labelFileProcessing:"Przesy\u0142anie",labelFileProcessingComplete:"Przes\u0142ano",labelFileProcessingAborted:"Przerwano",labelFileProcessingError:"Przesy\u0142anie nie powiod\u0142o si\u0119",labelFileProcessingRevertError:"Co\u015B posz\u0142o nie tak",labelFileRemoveError:"Nieudane usuni\u0119cie",labelTapToCancel:"Anuluj",labelTapToRetry:"Pon\xF3w",labelTapToUndo:"Cofnij",labelButtonRemoveItem:"Usu\u0144",labelButtonAbortItemLoad:"Przerwij",labelButtonRetryItemLoad:"Pon\xF3w",labelButtonAbortItemProcessing:"Anuluj",labelButtonUndoItemProcessing:"Cofnij",labelButtonRetryItemProcessing:"Pon\xF3w",labelButtonProcessItem:"Prze\u015Blij",labelMaxFileSizeExceeded:"Plik jest zbyt du\u017Cy",labelMaxFileSize:"Dopuszczalna wielko\u015B\u0107 pliku to {filesize}",labelMaxTotalFileSizeExceeded:"Przekroczono \u0142\u0105czny rozmiar plik\xF3w",labelMaxTotalFileSize:"\u0141\u0105czny rozmiar plik\xF3w nie mo\u017Ce przekroczy\u0107 {filesize}",labelFileTypeNotAllowed:"Niedozwolony rodzaj pliku",fileValidateTypeLabelExpectedTypes:"Oczekiwano {allButLastType} lub {lastType}",imageValidateSizeLabelFormatError:"Nieobs\u0142ugiwany format obrazu",imageValidateSizeLabelImageSizeTooSmall:"Obraz jest zbyt ma\u0142y",imageValidateSizeLabelImageSizeTooBig:"Obraz jest zbyt du\u017Cy",imageValidateSizeLabelExpectedMinSize:"Minimalne wymiary obrazu to {minWidth}\xD7{minHeight}",imageValidateSizeLabelExpectedMaxSize:"Maksymalna wymiary obrazu to {maxWidth}\xD7{maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"Rozdzielczo\u015B\u0107 jest zbyt niska",imageValidateSizeLabelImageResolutionTooHigh:"Rozdzielczo\u015B\u0107 jest zbyt wysoka",imageValidateSizeLabelExpectedMinResolution:"Minimalna rozdzielczo\u015B\u0107 to {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Maksymalna rozdzielczo\u015B\u0107 to {maxResolution}"};var Ri={labelIdle:'Arraste e solte os arquivos ou Clique aqui ',labelInvalidField:"Arquivos inv\xE1lidos",labelFileWaitingForSize:"Calculando o tamanho do arquivo",labelFileSizeNotAvailable:"Tamanho do arquivo indispon\xEDvel",labelFileLoading:"Carregando",labelFileLoadError:"Erro durante o carregamento",labelFileProcessing:"Enviando",labelFileProcessingComplete:"Envio finalizado",labelFileProcessingAborted:"Envio cancelado",labelFileProcessingError:"Erro durante o envio",labelFileProcessingRevertError:"Erro ao reverter o envio",labelFileRemoveError:"Erro ao remover o arquivo",labelTapToCancel:"clique para cancelar",labelTapToRetry:"clique para reenviar",labelTapToUndo:"clique para desfazer",labelButtonRemoveItem:"Remover",labelButtonAbortItemLoad:"Abortar",labelButtonRetryItemLoad:"Reenviar",labelButtonAbortItemProcessing:"Cancelar",labelButtonUndoItemProcessing:"Desfazer",labelButtonRetryItemProcessing:"Reenviar",labelButtonProcessItem:"Enviar",labelMaxFileSizeExceeded:"Arquivo \xE9 muito grande",labelMaxFileSize:"O tamanho m\xE1ximo permitido: {filesize}",labelMaxTotalFileSizeExceeded:"Tamanho total dos arquivos excedido",labelMaxTotalFileSize:"Tamanho total permitido: {filesize}",labelFileTypeNotAllowed:"Tipo de arquivo inv\xE1lido",fileValidateTypeLabelExpectedTypes:"Tipos de arquivo suportados s\xE3o {allButLastType} ou {lastType}",imageValidateSizeLabelFormatError:"Tipo de imagem inv\xE1lida",imageValidateSizeLabelImageSizeTooSmall:"Imagem muito pequena",imageValidateSizeLabelImageSizeTooBig:"Imagem muito grande",imageValidateSizeLabelExpectedMinSize:"Tamanho m\xEDnimo permitida: {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"Tamanho m\xE1ximo permitido: {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"Resolu\xE7\xE3o muito baixa",imageValidateSizeLabelImageResolutionTooHigh:"Resolu\xE7\xE3o muito alta",imageValidateSizeLabelExpectedMinResolution:"Resolu\xE7\xE3o m\xEDnima permitida: {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Resolu\xE7\xE3o m\xE1xima permitida: {maxResolution}"};var Hl={labelIdle:'Trage \u0219i plaseaz\u0103 fi\u0219iere sau Caut\u0103-le ',labelInvalidField:"C\xE2mpul con\u021Bine fi\u0219iere care nu sunt valide",labelFileWaitingForSize:"\xCEn a\u0219teptarea dimensiunii",labelFileSizeNotAvailable:"Dimensiunea nu este diponibil\u0103",labelFileLoading:"Se \xEEncarc\u0103",labelFileLoadError:"Eroare la \xEEnc\u0103rcare",labelFileProcessing:"Se \xEEncarc\u0103",labelFileProcessingComplete:"\xCEnc\u0103rcare finalizat\u0103",labelFileProcessingAborted:"\xCEnc\u0103rcare anulat\u0103",labelFileProcessingError:"Eroare la \xEEnc\u0103rcare",labelFileProcessingRevertError:"Eroare la anulare",labelFileRemoveError:"Eroare la \u015Ftergere",labelTapToCancel:"apas\u0103 pentru a anula",labelTapToRetry:"apas\u0103 pentru a re\xEEncerca",labelTapToUndo:"apas\u0103 pentru a anula",labelButtonRemoveItem:"\u015Eterge",labelButtonAbortItemLoad:"Anuleaz\u0103",labelButtonRetryItemLoad:"Re\xEEncearc\u0103",labelButtonAbortItemProcessing:"Anuleaz\u0103",labelButtonUndoItemProcessing:"Anuleaz\u0103",labelButtonRetryItemProcessing:"Re\xEEncearc\u0103",labelButtonProcessItem:"\xCEncarc\u0103",labelMaxFileSizeExceeded:"Fi\u0219ierul este prea mare",labelMaxFileSize:"Dimensiunea maxim\u0103 a unui fi\u0219ier este de {filesize}",labelMaxTotalFileSizeExceeded:"Dimensiunea total\u0103 maxim\u0103 a fost dep\u0103\u0219it\u0103",labelMaxTotalFileSize:"Dimensiunea total\u0103 maxim\u0103 a fi\u0219ierelor este de {filesize}",labelFileTypeNotAllowed:"Tipul fi\u0219ierului nu este valid",fileValidateTypeLabelExpectedTypes:"Se a\u0219teapt\u0103 {allButLastType} sau {lastType}",imageValidateSizeLabelFormatError:"Formatul imaginii nu este acceptat",imageValidateSizeLabelImageSizeTooSmall:"Imaginea este prea mic\u0103",imageValidateSizeLabelImageSizeTooBig:"Imaginea este prea mare",imageValidateSizeLabelExpectedMinSize:"M\u0103rimea minim\u0103 este de {maxWidth} x {maxHeight}",imageValidateSizeLabelExpectedMaxSize:"M\u0103rimea maxim\u0103 este de {maxWidth} x {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"Rezolu\u021Bia este prea mic\u0103",imageValidateSizeLabelImageResolutionTooHigh:"Rezolu\u021Bia este prea mare",imageValidateSizeLabelExpectedMinResolution:"Rezolu\u021Bia minim\u0103 este de {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Rezolu\u021Bia maxim\u0103 este de {maxResolution}"};var jl={labelIdle:'\u041F\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u0435 \u0444\u0430\u0439\u043B\u044B \u0438\u043B\u0438 \u0432\u044B\u0431\u0435\u0440\u0438\u0442\u0435 ',labelInvalidField:"\u041F\u043E\u043B\u0435 \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u0442 \u043D\u0435\u0434\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u044B\u0435 \u0444\u0430\u0439\u043B\u044B",labelFileWaitingForSize:"\u0423\u043A\u0430\u0436\u0438\u0442\u0435 \u0440\u0430\u0437\u043C\u0435\u0440",labelFileSizeNotAvailable:"\u0420\u0430\u0437\u043C\u0435\u0440 \u043D\u0435 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044F",labelFileLoading:"\u041E\u0436\u0438\u0434\u0430\u043D\u0438\u0435",labelFileLoadError:"\u041E\u0448\u0438\u0431\u043A\u0430 \u043F\u0440\u0438 \u043E\u0436\u0438\u0434\u0430\u043D\u0438\u0438",labelFileProcessing:"\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430",labelFileProcessingComplete:"\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0430",labelFileProcessingAborted:"\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430 \u043E\u0442\u043C\u0435\u043D\u0435\u043D\u0430",labelFileProcessingError:"\u041E\u0448\u0438\u0431\u043A\u0430 \u043F\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043A\u0435",labelFileProcessingRevertError:"\u041E\u0448\u0438\u0431\u043A\u0430 \u043F\u0440\u0438 \u0432\u043E\u0437\u0432\u0440\u0430\u0442\u0435",labelFileRemoveError:"\u041E\u0448\u0438\u0431\u043A\u0430 \u043F\u0440\u0438 \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0438",labelTapToCancel:"\u043D\u0430\u0436\u043C\u0438\u0442\u0435 \u0434\u043B\u044F \u043E\u0442\u043C\u0435\u043D\u044B",labelTapToRetry:"\u043D\u0430\u0436\u043C\u0438\u0442\u0435, \u0447\u0442\u043E\u0431\u044B \u043F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u044C \u043F\u043E\u043F\u044B\u0442\u043A\u0443",labelTapToUndo:"\u043D\u0430\u0436\u043C\u0438\u0442\u0435 \u0434\u043B\u044F \u043E\u0442\u043C\u0435\u043D\u044B \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0433\u043E \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F",labelButtonRemoveItem:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C",labelButtonAbortItemLoad:"\u041F\u0440\u0435\u043A\u0440\u0430\u0449\u0435\u043D\u043E",labelButtonRetryItemLoad:"\u041F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u0435 \u043F\u043E\u043F\u044B\u0442\u043A\u0443",labelButtonAbortItemProcessing:"\u041E\u0442\u043C\u0435\u043D\u0430",labelButtonUndoItemProcessing:"\u041E\u0442\u043C\u0435\u043D\u0430 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0433\u043E \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F",labelButtonRetryItemProcessing:"\u041F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u0435 \u043F\u043E\u043F\u044B\u0442\u043A\u0443",labelButtonProcessItem:"\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430",labelMaxFileSizeExceeded:"\u0424\u0430\u0439\u043B \u0441\u043B\u0438\u0448\u043A\u043E\u043C \u0431\u043E\u043B\u044C\u0448\u043E\u0439",labelMaxFileSize:"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0440\u0430\u0437\u043C\u0435\u0440 \u0444\u0430\u0439\u043B\u0430: {filesize}",labelMaxTotalFileSizeExceeded:"\u041F\u0440\u0435\u0432\u044B\u0448\u0435\u043D \u043C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0440\u0430\u0437\u043C\u0435\u0440",labelMaxTotalFileSize:"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0440\u0430\u0437\u043C\u0435\u0440 \u0444\u0430\u0439\u043B\u0430: {filesize}",labelFileTypeNotAllowed:"\u0424\u0430\u0439\u043B \u043D\u0435\u0432\u0435\u0440\u043D\u043E\u0433\u043E \u0442\u0438\u043F\u0430",fileValidateTypeLabelExpectedTypes:"\u041E\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044F {allButLastType} \u0438\u043B\u0438 {lastType}",imageValidateSizeLabelFormatError:"\u0422\u0438\u043F \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F \u043D\u0435 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044F",imageValidateSizeLabelImageSizeTooSmall:"\u0418\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 \u0441\u043B\u0438\u0448\u043A\u043E\u043C \u043C\u0430\u043B\u0435\u043D\u044C\u043A\u043E\u0435",imageValidateSizeLabelImageSizeTooBig:"\u0418\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 \u0441\u043B\u0438\u0448\u043A\u043E\u043C \u0431\u043E\u043B\u044C\u0448\u043E\u0435",imageValidateSizeLabelExpectedMinSize:"\u041C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0440\u0430\u0437\u043C\u0435\u0440: {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0440\u0430\u0437\u043C\u0435\u0440: {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"\u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u0438\u0435 \u0441\u043B\u0438\u0448\u043A\u043E\u043C \u043D\u0438\u0437\u043A\u043E\u0435",imageValidateSizeLabelImageResolutionTooHigh:"\u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u0438\u0435 \u0441\u043B\u0438\u0448\u043A\u043E\u043C \u0432\u044B\u0441\u043E\u043A\u043E\u0435",imageValidateSizeLabelExpectedMinResolution:"\u041C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u0438\u0435: {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u0438\u0435: {maxResolution}"};var ql={labelIdle:'Drag och sl\xE4pp dina filer eller Bl\xE4ddra ',labelInvalidField:"F\xE4ltet inneh\xE5ller felaktiga filer",labelFileWaitingForSize:"V\xE4ntar p\xE5 storlek",labelFileSizeNotAvailable:"Storleken finns inte tillg\xE4nglig",labelFileLoading:"Laddar",labelFileLoadError:"Fel under laddning",labelFileProcessing:"Laddar upp",labelFileProcessingComplete:"Uppladdning klar",labelFileProcessingAborted:"Uppladdning avbruten",labelFileProcessingError:"Fel under uppladdning",labelFileProcessingRevertError:"Fel under \xE5terst\xE4llning",labelFileRemoveError:"Fel under borttagning",labelTapToCancel:"tryck f\xF6r att avbryta",labelTapToRetry:"tryck f\xF6r att f\xF6rs\xF6ka igen",labelTapToUndo:"tryck f\xF6r att \xE5ngra",labelButtonRemoveItem:"Tabort",labelButtonAbortItemLoad:"Avbryt",labelButtonRetryItemLoad:"F\xF6rs\xF6k igen",labelButtonAbortItemProcessing:"Avbryt",labelButtonUndoItemProcessing:"\xC5ngra",labelButtonRetryItemProcessing:"F\xF6rs\xF6k igen",labelButtonProcessItem:"Ladda upp",labelMaxFileSizeExceeded:"Filen \xE4r f\xF6r stor",labelMaxFileSize:"St\xF6rsta till\xE5tna filstorlek \xE4r {filesize}",labelMaxTotalFileSizeExceeded:"Maximal uppladdningsstorlek uppn\xE5d",labelMaxTotalFileSize:"Maximal uppladdningsstorlek \xE4r {filesize}",labelFileTypeNotAllowed:"Felaktig filtyp",fileValidateTypeLabelExpectedTypes:"Godk\xE4nda filtyper {allButLastType} eller {lastType}",imageValidateSizeLabelFormatError:"Bildtypen saknar st\xF6d",imageValidateSizeLabelImageSizeTooSmall:"Bilden \xE4r f\xF6r liten",imageValidateSizeLabelImageSizeTooBig:"Bilden \xE4r f\xF6r stor",imageValidateSizeLabelExpectedMinSize:"Minimal storlek \xE4r {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"Maximal storlek \xE4r {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"Uppl\xF6sningen \xE4r f\xF6r l\xE5g",imageValidateSizeLabelImageResolutionTooHigh:"Uppl\xF6sningen \xE4r f\xF6r h\xF6g",imageValidateSizeLabelExpectedMinResolution:"Minsta till\xE5tna uppl\xF6sning \xE4r {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"H\xF6gsta till\xE5tna uppl\xF6sning \xE4r {maxResolution}"};var Yl={labelIdle:'Dosyan\u0131z\u0131 S\xFCr\xFCkleyin & B\u0131rak\u0131n ya da Se\xE7in ',labelInvalidField:"Alan ge\xE7ersiz dosyalar i\xE7eriyor",labelFileWaitingForSize:"Boyut hesaplan\u0131yor",labelFileSizeNotAvailable:"Boyut mevcut de\u011Fil",labelFileLoading:"Y\xFCkleniyor",labelFileLoadError:"Y\xFCkleme s\u0131ras\u0131nda hata olu\u015Ftu",labelFileProcessing:"Y\xFCkleniyor",labelFileProcessingComplete:"Y\xFCkleme tamamland\u0131",labelFileProcessingAborted:"Y\xFCkleme iptal edildi",labelFileProcessingError:"Y\xFCklerken hata olu\u015Ftu",labelFileProcessingRevertError:"Geri \xE7ekerken hata olu\u015Ftu",labelFileRemoveError:"Kald\u0131r\u0131rken hata olu\u015Ftu",labelTapToCancel:"\u0130ptal etmek i\xE7in t\u0131klay\u0131n",labelTapToRetry:"Tekrar denemek i\xE7in t\u0131klay\u0131n",labelTapToUndo:"Geri almak i\xE7in t\u0131klay\u0131n",labelButtonRemoveItem:"Kald\u0131r",labelButtonAbortItemLoad:"\u0130ptal Et",labelButtonRetryItemLoad:"Tekrar dene",labelButtonAbortItemProcessing:"\u0130ptal et",labelButtonUndoItemProcessing:"Geri Al",labelButtonRetryItemProcessing:"Tekrar dene",labelButtonProcessItem:"Y\xFCkle",labelMaxFileSizeExceeded:"Dosya \xE7ok b\xFCy\xFCk",labelMaxFileSize:"En fazla dosya boyutu: {filesize}",labelMaxTotalFileSizeExceeded:"Maximum boyut a\u015F\u0131ld\u0131",labelMaxTotalFileSize:"Maximum dosya boyutu :{filesize}",labelFileTypeNotAllowed:"Ge\xE7ersiz dosya tipi",fileValidateTypeLabelExpectedTypes:"\u015Eu {allButLastType} ya da \u015Fu dosya olmas\u0131 gerekir: {lastType}",imageValidateSizeLabelFormatError:"Resim tipi desteklenmiyor",imageValidateSizeLabelImageSizeTooSmall:"Resim \xE7ok k\xFC\xE7\xFCk",imageValidateSizeLabelImageSizeTooBig:"Resim \xE7ok b\xFCy\xFCk",imageValidateSizeLabelExpectedMinSize:"Minimum boyut {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"Maximum boyut {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"\xC7\xF6z\xFCn\xFCrl\xFCk \xE7ok d\xFC\u015F\xFCk",imageValidateSizeLabelImageResolutionTooHigh:"\xC7\xF6z\xFCn\xFCrl\xFCk \xE7ok y\xFCksek",imageValidateSizeLabelExpectedMinResolution:"Minimum \xE7\xF6z\xFCn\xFCrl\xFCk {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Maximum \xE7\xF6z\xFCn\xFCrl\xFCk {maxResolution}"};var $l={labelIdle:'\u041F\u0435\u0440\u0435\u0442\u044F\u0433\u043D\u0456\u0442\u044C \u0444\u0430\u0439\u043B\u0438 \u0430\u0431\u043E \u0432\u0438\u0431\u0435\u0440\u0456\u0442\u044C ',labelInvalidField:"\u041F\u043E\u043B\u0435 \u043C\u0456\u0441\u0442\u0438\u0442\u044C \u043D\u0435\u0434\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u0456 \u0444\u0430\u0439\u043B\u0438",labelFileWaitingForSize:"\u0412\u043A\u0430\u0436\u0456\u0442\u044C \u0440\u043E\u0437\u043C\u0456\u0440",labelFileSizeNotAvailable:"\u0420\u043E\u0437\u043C\u0456\u0440 \u043D\u0435 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0438\u0439",labelFileLoading:"\u041E\u0447\u0456\u043A\u0443\u0432\u0430\u043D\u043D\u044F",labelFileLoadError:"\u041F\u043E\u043C\u0438\u043B\u043A\u0430 \u043F\u0440\u0438 \u043E\u0447\u0456\u043A\u0443\u0432\u0430\u043D\u043D\u0456",labelFileProcessing:"\u0417\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0435\u043D\u043D\u044F",labelFileProcessingComplete:"\u0417\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0435\u043D\u043D\u044F \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u043E",labelFileProcessingAborted:"\u0417\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0435\u043D\u043D\u044F \u0441\u043A\u0430\u0441\u043E\u0432\u0430\u043D\u043E",labelFileProcessingError:"\u041F\u043E\u043C\u0438\u043B\u043A\u0430 \u043F\u0440\u0438 \u0437\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0435\u043D\u043D\u0456",labelFileProcessingRevertError:"\u041F\u043E\u043C\u0438\u043B\u043A\u0430 \u043F\u0440\u0438 \u0432\u0456\u0434\u043D\u043E\u0432\u043B\u0435\u043D\u043D\u0456",labelFileRemoveError:"\u041F\u043E\u043C\u0438\u043B\u043A\u0430 \u043F\u0440\u0438 \u0432\u0438\u0434\u0430\u043B\u0435\u043D\u043D\u0456",labelTapToCancel:"\u0412\u0456\u0434\u043C\u0456\u043D\u0438\u0442\u0438",labelTapToRetry:"\u041D\u0430\u0442\u0438\u0441\u043D\u0456\u0442\u044C, \u0449\u043E\u0431 \u043F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u0438 \u0441\u043F\u0440\u043E\u0431\u0443",labelTapToUndo:"\u041D\u0430\u0442\u0438\u0441\u043D\u0456\u0442\u044C, \u0449\u043E\u0431 \u0432\u0456\u0434\u043C\u0456\u043D\u0438\u0442\u0438 \u043E\u0441\u0442\u0430\u043D\u043D\u044E \u0434\u0456\u044E",labelButtonRemoveItem:"\u0412\u0438\u0434\u0430\u043B\u0438\u0442\u0438",labelButtonAbortItemLoad:"\u0412\u0456\u0434\u043C\u0456\u043D\u0438\u0442\u0438",labelButtonRetryItemLoad:"\u041F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u0438 \u0441\u043F\u0440\u043E\u0431\u0443",labelButtonAbortItemProcessing:"\u0412\u0456\u0434\u043C\u0456\u043D\u0438\u0442\u0438",labelButtonUndoItemProcessing:"\u0412\u0456\u0434\u043C\u0456\u043D\u0438\u0442\u0438 \u043E\u0441\u0442\u0430\u043D\u043D\u044E \u0434\u0456\u044E",labelButtonRetryItemProcessing:"\u041F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u0438 \u0441\u043F\u0440\u043E\u0431\u0443",labelButtonProcessItem:"\u0417\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0435\u043D\u043D\u044F",labelMaxFileSizeExceeded:"\u0424\u0430\u0439\u043B \u0437\u0430\u043D\u0430\u0434\u0442\u043E \u0432\u0435\u043B\u0438\u043A\u0438\u0439",labelMaxFileSize:"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0438\u0439 \u0440\u043E\u0437\u043C\u0456\u0440 \u0444\u0430\u0439\u043B\u0443: {filesize}",labelMaxTotalFileSizeExceeded:"\u041F\u0435\u0440\u0435\u0432\u0438\u0449\u0435\u043D\u043E \u043C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0438\u0439 \u0437\u0430\u0433\u0430\u043B\u044C\u043D\u0438\u0439 \u0440\u043E\u0437\u043C\u0456\u0440",labelMaxTotalFileSize:"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0438\u0439 \u0437\u0430\u0433\u0430\u043B\u044C\u043D\u0438\u0439 \u0440\u043E\u0437\u043C\u0456\u0440: {filesize}",labelFileTypeNotAllowed:"\u0424\u043E\u0440\u043C\u0430\u0442 \u0444\u0430\u0439\u043B\u0443 \u043D\u0435 \u043F\u0456\u0434\u0442\u0440\u0438\u043C\u0443\u0454\u0442\u044C\u0441\u044F",fileValidateTypeLabelExpectedTypes:"\u041E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F {allButLastType} \u0430\u0431\u043E {lastType}",imageValidateSizeLabelFormatError:"\u0424\u043E\u0440\u043C\u0430\u0442 \u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u043D\u044F \u043D\u0435 \u043F\u0456\u0434\u0442\u0440\u0438\u043C\u0443\u0454\u0442\u044C\u0441\u044F",imageValidateSizeLabelImageSizeTooSmall:"\u0417\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u043D\u044F \u0437\u0430\u043D\u0430\u0434\u0442\u043E \u043C\u0430\u043B\u0435\u043D\u044C\u043A\u0435",imageValidateSizeLabelImageSizeTooBig:"\u0417\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u043D\u044F \u0437\u0430\u043D\u0430\u0434\u0442\u043E \u0432\u0435\u043B\u0438\u043A\u0435",imageValidateSizeLabelExpectedMinSize:"\u041C\u0456\u043D\u0456\u043C\u0430\u043B\u044C\u043D\u0438\u0439 \u0440\u043E\u0437\u043C\u0456\u0440: {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0438\u0439 \u0440\u043E\u0437\u043C\u0456\u0440: {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"\u0420\u043E\u0437\u043C\u0456\u0440\u0438 \u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u043D\u044F \u0437\u0430\u043D\u0430\u0434\u0442\u043E \u043C\u0430\u043B\u0435\u043D\u044C\u043A\u0456",imageValidateSizeLabelImageResolutionTooHigh:"\u0420\u043E\u0437\u043C\u0456\u0440\u0438 \u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u043D\u044F \u0437\u0430\u043D\u0430\u0434\u0442\u043E \u0432\u0435\u043B\u0438\u043A\u0456",imageValidateSizeLabelExpectedMinResolution:"\u041C\u0456\u043D\u0456\u043C\u0430\u043B\u044C\u043D\u0456 \u0440\u043E\u0437\u043C\u0456\u0440\u0438: {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0456 \u0440\u043E\u0437\u043C\u0456\u0440\u0438: {maxResolution}"};var Xl={labelIdle:'K\xE9o th\u1EA3 t\u1EC7p c\u1EE7a b\u1EA1n ho\u1EB7c T\xECm ki\u1EBFm ',labelInvalidField:"Tr\u01B0\u1EDDng ch\u1EE9a c\xE1c t\u1EC7p kh\xF4ng h\u1EE3p l\u1EC7",labelFileWaitingForSize:"\u0110ang ch\u1EDD k\xEDch th\u01B0\u1EDBc",labelFileSizeNotAvailable:"K\xEDch th\u01B0\u1EDBc kh\xF4ng c\xF3 s\u1EB5n",labelFileLoading:"\u0110ang t\u1EA3i",labelFileLoadError:"L\u1ED7i khi t\u1EA3i",labelFileProcessing:"\u0110ang t\u1EA3i l\xEAn",labelFileProcessingComplete:"T\u1EA3i l\xEAn th\xE0nh c\xF4ng",labelFileProcessingAborted:"\u0110\xE3 hu\u1EF7 t\u1EA3i l\xEAn",labelFileProcessingError:"L\u1ED7i khi t\u1EA3i l\xEAn",labelFileProcessingRevertError:"L\u1ED7i khi ho\xE0n nguy\xEAn",labelFileRemoveError:"L\u1ED7i khi x\xF3a",labelTapToCancel:"nh\u1EA5n \u0111\u1EC3 h\u1EE7y",labelTapToRetry:"nh\u1EA5n \u0111\u1EC3 th\u1EED l\u1EA1i",labelTapToUndo:"nh\u1EA5n \u0111\u1EC3 ho\xE0n t\xE1c",labelButtonRemoveItem:"Xo\xE1",labelButtonAbortItemLoad:"Hu\u1EF7 b\u1ECF",labelButtonRetryItemLoad:"Th\u1EED l\u1EA1i",labelButtonAbortItemProcessing:"H\u1EE7y b\u1ECF",labelButtonUndoItemProcessing:"Ho\xE0n t\xE1c",labelButtonRetryItemProcessing:"Th\u1EED l\u1EA1i",labelButtonProcessItem:"T\u1EA3i l\xEAn",labelMaxFileSizeExceeded:"T\u1EADp tin qu\xE1 l\u1EDBn",labelMaxFileSize:"K\xEDch th\u01B0\u1EDBc t\u1EC7p t\u1ED1i \u0111a l\xE0 {filesize}",labelMaxTotalFileSizeExceeded:"\u0110\xE3 v\u01B0\u1EE3t qu\xE1 t\u1ED5ng k\xEDch th\u01B0\u1EDBc t\u1ED1i \u0111a",labelMaxTotalFileSize:"T\u1ED5ng k\xEDch th\u01B0\u1EDBc t\u1EC7p t\u1ED1i \u0111a l\xE0 {filesize}",labelFileTypeNotAllowed:"T\u1EC7p thu\u1ED9c lo\u1EA1i kh\xF4ng h\u1EE3p l\u1EC7",fileValidateTypeLabelExpectedTypes:"Ki\u1EC3u t\u1EC7p h\u1EE3p l\u1EC7 l\xE0 {allButLastType} ho\u1EB7c {lastType}",imageValidateSizeLabelFormatError:"Lo\u1EA1i h\xECnh \u1EA3nh kh\xF4ng \u0111\u01B0\u1EE3c h\u1ED7 tr\u1EE3",imageValidateSizeLabelImageSizeTooSmall:"H\xECnh \u1EA3nh qu\xE1 nh\u1ECF",imageValidateSizeLabelImageSizeTooBig:"H\xECnh \u1EA3nh qu\xE1 l\u1EDBn",imageValidateSizeLabelExpectedMinSize:"K\xEDch th\u01B0\u1EDBc t\u1ED1i thi\u1EC3u l\xE0 {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"K\xEDch th\u01B0\u1EDBc t\u1ED1i \u0111a l\xE0 {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"\u0110\u1ED9 ph\xE2n gi\u1EA3i qu\xE1 th\u1EA5p",imageValidateSizeLabelImageResolutionTooHigh:"\u0110\u1ED9 ph\xE2n gi\u1EA3i qu\xE1 cao",imageValidateSizeLabelExpectedMinResolution:"\u0110\u1ED9 ph\xE2n gi\u1EA3i t\u1ED1i thi\u1EC3u l\xE0 {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"\u0110\u1ED9 ph\xE2n gi\u1EA3i t\u1ED1i \u0111a l\xE0 {maxResolution}"};var Ql={labelIdle:'\u62D6\u653E\u6587\u4EF6\uFF0C\u6216\u8005 \u6D4F\u89C8 ',labelInvalidField:"\u5B57\u6BB5\u5305\u542B\u65E0\u6548\u6587\u4EF6",labelFileWaitingForSize:"\u8BA1\u7B97\u6587\u4EF6\u5927\u5C0F",labelFileSizeNotAvailable:"\u6587\u4EF6\u5927\u5C0F\u4E0D\u53EF\u7528",labelFileLoading:"\u52A0\u8F7D",labelFileLoadError:"\u52A0\u8F7D\u9519\u8BEF",labelFileProcessing:"\u4E0A\u4F20",labelFileProcessingComplete:"\u5DF2\u4E0A\u4F20",labelFileProcessingAborted:"\u4E0A\u4F20\u5DF2\u53D6\u6D88",labelFileProcessingError:"\u4E0A\u4F20\u51FA\u9519",labelFileProcessingRevertError:"\u8FD8\u539F\u51FA\u9519",labelFileRemoveError:"\u5220\u9664\u51FA\u9519",labelTapToCancel:"\u70B9\u51FB\u53D6\u6D88",labelTapToRetry:"\u70B9\u51FB\u91CD\u8BD5",labelTapToUndo:"\u70B9\u51FB\u64A4\u6D88",labelButtonRemoveItem:"\u5220\u9664",labelButtonAbortItemLoad:"\u4E2D\u6B62",labelButtonRetryItemLoad:"\u91CD\u8BD5",labelButtonAbortItemProcessing:"\u53D6\u6D88",labelButtonUndoItemProcessing:"\u64A4\u6D88",labelButtonRetryItemProcessing:"\u91CD\u8BD5",labelButtonProcessItem:"\u4E0A\u4F20",labelMaxFileSizeExceeded:"\u6587\u4EF6\u592A\u5927",labelMaxFileSize:"\u6700\u5927\u503C: {filesize}",labelMaxTotalFileSizeExceeded:"\u8D85\u8FC7\u6700\u5927\u6587\u4EF6\u5927\u5C0F",labelMaxTotalFileSize:"\u6700\u5927\u6587\u4EF6\u5927\u5C0F\uFF1A{filesize}",labelFileTypeNotAllowed:"\u6587\u4EF6\u7C7B\u578B\u65E0\u6548",fileValidateTypeLabelExpectedTypes:"\u5E94\u4E3A {allButLastType} \u6216 {lastType}",imageValidateSizeLabelFormatError:"\u4E0D\u652F\u6301\u56FE\u50CF\u7C7B\u578B",imageValidateSizeLabelImageSizeTooSmall:"\u56FE\u50CF\u592A\u5C0F",imageValidateSizeLabelImageSizeTooBig:"\u56FE\u50CF\u592A\u5927",imageValidateSizeLabelExpectedMinSize:"\u6700\u5C0F\u503C: {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"\u6700\u5927\u503C: {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"\u5206\u8FA8\u7387\u592A\u4F4E",imageValidateSizeLabelImageResolutionTooHigh:"\u5206\u8FA8\u7387\u592A\u9AD8",imageValidateSizeLabelExpectedMinResolution:"\u6700\u5C0F\u5206\u8FA8\u7387\uFF1A{minResolution}",imageValidateSizeLabelExpectedMaxResolution:"\u6700\u5927\u5206\u8FA8\u7387\uFF1A{maxResolution}"};var Zl={labelIdle:'\u62D6\u653E\u6A94\u6848\uFF0C\u6216\u8005 \u700F\u89BD ',labelInvalidField:"\u4E0D\u652F\u63F4\u6B64\u6A94\u6848",labelFileWaitingForSize:"\u6B63\u5728\u8A08\u7B97\u6A94\u6848\u5927\u5C0F",labelFileSizeNotAvailable:"\u6A94\u6848\u5927\u5C0F\u4E0D\u7B26",labelFileLoading:"\u8B80\u53D6\u4E2D",labelFileLoadError:"\u8B80\u53D6\u932F\u8AA4",labelFileProcessing:"\u4E0A\u50B3",labelFileProcessingComplete:"\u5DF2\u4E0A\u50B3",labelFileProcessingAborted:"\u4E0A\u50B3\u5DF2\u53D6\u6D88",labelFileProcessingError:"\u4E0A\u50B3\u767C\u751F\u932F\u8AA4",labelFileProcessingRevertError:"\u9084\u539F\u932F\u8AA4",labelFileRemoveError:"\u522A\u9664\u932F\u8AA4",labelTapToCancel:"\u9EDE\u64CA\u53D6\u6D88",labelTapToRetry:"\u9EDE\u64CA\u91CD\u8A66",labelTapToUndo:"\u9EDE\u64CA\u9084\u539F",labelButtonRemoveItem:"\u522A\u9664",labelButtonAbortItemLoad:"\u505C\u6B62",labelButtonRetryItemLoad:"\u91CD\u8A66",labelButtonAbortItemProcessing:"\u53D6\u6D88",labelButtonUndoItemProcessing:"\u53D6\u6D88",labelButtonRetryItemProcessing:"\u91CD\u8A66",labelButtonProcessItem:"\u4E0A\u50B3",labelMaxFileSizeExceeded:"\u6A94\u6848\u904E\u5927",labelMaxFileSize:"\u6700\u5927\u503C\uFF1A{filesize}",labelMaxTotalFileSizeExceeded:"\u8D85\u904E\u6700\u5927\u53EF\u4E0A\u50B3\u5927\u5C0F",labelMaxTotalFileSize:"\u6700\u5927\u53EF\u4E0A\u50B3\u5927\u5C0F\uFF1A{filesize}",labelFileTypeNotAllowed:"\u4E0D\u652F\u63F4\u6B64\u985E\u578B\u6A94\u6848",fileValidateTypeLabelExpectedTypes:"\u61C9\u70BA {allButLastType} \u6216 {lastType}",imageValidateSizeLabelFormatError:"\u4E0D\u652F\u6301\u6B64\u985E\u5716\u7247\u985E\u578B",imageValidateSizeLabelImageSizeTooSmall:"\u5716\u7247\u904E\u5C0F",imageValidateSizeLabelImageSizeTooBig:"\u5716\u7247\u904E\u5927",imageValidateSizeLabelExpectedMinSize:"\u6700\u5C0F\u5C3A\u5BF8\uFF1A{minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"\u6700\u5927\u5C3A\u5BF8\uFF1A{maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"\u89E3\u6790\u5EA6\u904E\u4F4E",imageValidateSizeLabelImageResolutionTooHigh:"\u89E3\u6790\u5EA6\u904E\u9AD8",imageValidateSizeLabelExpectedMinResolution:"\u6700\u4F4E\u89E3\u6790\u5EA6\uFF1A{minResolution}",imageValidateSizeLabelExpectedMaxResolution:"\u6700\u9AD8\u89E3\u6790\u5EA6\uFF1A{maxResolution}"};ve(Wo);ve(jo);ve($o);ve(Qo);ve(el);ve(pl);ve(ul);ve(Rl);ve(Ma);window.FilePond=na;function uf({acceptedFileTypes:e,imageEditorEmptyFillColor:t,imageEditorMode:i,imageEditorViewportHeight:a,imageEditorViewportWidth:n,deleteUploadedFileUsing:o,isDeletable:l,isDisabled:r,getUploadedFilesUsing:s,imageCropAspectRatio:p,imagePreviewHeight:c,imageResizeMode:d,imageResizeTargetHeight:m,imageResizeTargetWidth:u,imageResizeUpscale:f,isAvatar:h,hasImageEditor:g,hasCircleCropper:I,canEditSvgs:E,isSvgEditingConfirmed:T,confirmSvgEditingMessage:v,disabledSvgEditingMessage:y,isDownloadable:b,isMultiple:w,isOpenable:x,isPreviewable:_,isReorderable:P,itemPanelAspectRatio:O,loadingIndicatorPosition:M,locale:C,maxFiles:S,maxSize:F,minSize:R,panelAspectRatio:L,panelLayout:z,placeholder:D,removeUploadedFileButtonPosition:k,removeUploadedFileUsing:B,reorderUploadedFilesUsing:X,shouldAppendFiles:Y,shouldOrientImageFromExif:Q,shouldTransformImage:pe,state:G,uploadButtonPosition:H,uploadingMessage:q,uploadProgressIndicatorPosition:re,uploadUsing:ee}){return{fileKeyIndex:{},pond:null,shouldUpdateState:!0,state:G,lastState:null,error:null,uploadedFileIndex:{},isEditorOpen:!1,editingFile:{},currentRatio:"",editor:{},init:async function(){Dt(Kl[C]??Kl.en),this.pond=ut(this.$refs.input,{acceptedFileTypes:e,allowImageExifOrientation:Q,allowPaste:!1,allowRemove:l,allowReorder:P,allowImagePreview:_,allowVideoPreview:_,allowAudioPreview:_,allowImageTransform:pe,credits:!1,files:await this.getFiles(),imageCropAspectRatio:p,imagePreviewHeight:c,imageResizeTargetHeight:m,imageResizeTargetWidth:u,imageResizeMode:d,imageResizeUpscale:f,itemInsertLocation:Y?"after":"before",...D&&{labelIdle:D},maxFiles:S,maxFileSize:F,minFileSize:R,styleButtonProcessItemPosition:H,styleButtonRemoveItemPosition:k,styleItemPanelAspectRatio:O,styleLoadIndicatorPosition:M,stylePanelAspectRatio:L,stylePanelLayout:z,styleProgressIndicatorPosition:re,server:{load:async(N,U)=>{let Z=await(await fetch(N,{cache:"no-store"})).blob();U(Z)},process:(N,U,$,Z,Ve,Ge)=>{this.shouldUpdateState=!1;let Xt=([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g,Qt=>(Qt^crypto.getRandomValues(new Uint8Array(1))[0]&15>>Qt/4).toString(16));ee(Xt,U,Qt=>{this.shouldUpdateState=!0,Z(Qt)},Ve,Ge)},remove:async(N,U)=>{let $=this.uploadedFileIndex[N]??null;$&&(await o($),U())},revert:async(N,U)=>{await B(N),U()}},allowImageEdit:g,imageEditEditor:{open:N=>this.loadEditor(N),onconfirm:()=>{},oncancel:()=>this.closeEditor(),onclose:()=>this.closeEditor()},fileValidateTypeDetectType:(N,U)=>new Promise(($,Z)=>{let Ve=U||Go.getType(N.name.split(".").pop());Ve?$(Ve):Z()})}),this.$watch("state",async()=>{if(this.pond&&this.shouldUpdateState&&this.state!==void 0){if(this.state!==null&&Object.values(this.state).filter(N=>N.startsWith("livewire-file:")).length){this.lastState=null;return}JSON.stringify(this.state)!==this.lastState&&(this.lastState=JSON.stringify(this.state),this.pond.files=await this.getFiles())}}),this.pond.on("reorderfiles",async N=>{let U=N.map($=>$.source instanceof File?$.serverId:this.uploadedFileIndex[$.source]??null).filter($=>$);await X(Y?U:U.reverse())}),this.pond.on("initfile",async N=>{b&&(h||this.insertDownloadLink(N))}),this.pond.on("initfile",async N=>{x&&(h||this.insertOpenLink(N))}),this.pond.on("addfilestart",async N=>{N.status===Et.PROCESSING_QUEUED&&this.dispatchFormEvent("form-processing-started",{message:q})});let V=async()=>{this.pond.getFiles().filter(N=>N.status===Et.PROCESSING||N.status===Et.PROCESSING_QUEUED).length||this.dispatchFormEvent("form-processing-finished")};this.pond.on("processfile",V),this.pond.on("processfileabort",V),this.pond.on("processfilerevert",V),z==="compact circle"&&(this.pond.on("error",N=>{this.error=`${N.main}: ${N.sub}`.replace("Expects or","Expects")}),this.pond.on("removefile",()=>this.error=null))},destroy:function(){this.destroyEditor(),ft(this.$refs.input),this.pond=null},dispatchFormEvent:function(V,N={}){this.$el.closest("form")?.dispatchEvent(new CustomEvent(V,{composed:!0,cancelable:!0,detail:N}))},getUploadedFiles:async function(){let V=await s();this.fileKeyIndex=V??{},this.uploadedFileIndex=Object.entries(this.fileKeyIndex).filter(([N,U])=>U?.url).reduce((N,[U,$])=>(N[$.url]=U,N),{})},getFiles:async function(){await this.getUploadedFiles();let V=[];for(let N of Object.values(this.fileKeyIndex))N&&V.push({source:N.url,options:{type:"local",...!N.type||_&&(/^audio/.test(N.type)||/^image/.test(N.type)||/^video/.test(N.type))?{}:{file:{name:N.name,size:N.size,type:N.type}}}});return Y?V:V.reverse()},insertDownloadLink:function(V){if(V.origin!==zt.LOCAL)return;let N=this.getDownloadLink(V);N&&document.getElementById(`filepond--item-${V.id}`).querySelector(".filepond--file-info-main").prepend(N)},insertOpenLink:function(V){if(V.origin!==zt.LOCAL)return;let N=this.getOpenLink(V);N&&document.getElementById(`filepond--item-${V.id}`).querySelector(".filepond--file-info-main").prepend(N)},getDownloadLink:function(V){let N=V.source;if(!N)return;let U=document.createElement("a");return U.className="filepond--download-icon",U.href=N,U.download=V.file.name,U},getOpenLink:function(V){let N=V.source;if(!N)return;let U=document.createElement("a");return U.className="filepond--open-icon",U.href=N,U.target="_blank",U},initEditor:function(){r||g&&(this.editor=new xa(this.$refs.editor,{aspectRatio:n/a,autoCropArea:1,center:!0,crop:V=>{this.$refs.xPositionInput.value=Math.round(V.detail.x),this.$refs.yPositionInput.value=Math.round(V.detail.y),this.$refs.heightInput.value=Math.round(V.detail.height),this.$refs.widthInput.value=Math.round(V.detail.width),this.$refs.rotationInput.value=V.detail.rotate},cropBoxResizable:!0,guides:!0,highlight:!0,responsive:!0,toggleDragModeOnDblclick:!0,viewMode:i,wheelZoomRatio:.02}))},closeEditor:function(){this.editingFile={},this.isEditorOpen=!1,this.destroyEditor()},fixImageDimensions:function(V,N){if(V.type!=="image/svg+xml")return N(V);let U=new FileReader;U.onload=$=>{let Z=new DOMParser().parseFromString($.target.result,"image/svg+xml")?.querySelector("svg");if(!Z)return N(V);let Ve=["viewBox","ViewBox","viewbox"].find(Xt=>Z.hasAttribute(Xt));if(!Ve)return N(V);let Ge=Z.getAttribute(Ve).split(" ");return!Ge||Ge.length!==4?N(V):(Z.setAttribute("width",parseFloat(Ge[2])+"pt"),Z.setAttribute("height",parseFloat(Ge[3])+"pt"),N(new File([new Blob([new XMLSerializer().serializeToString(Z)],{type:"image/svg+xml"})],V.name,{type:"image/svg+xml",_relativePath:""})))},U.readAsText(V)},loadEditor:function(V){if(r||!g||!V)return;let N=V.type==="image/svg+xml";if(!E&&N){alert(y);return}T&&N&&!confirm(v)||this.fixImageDimensions(V,U=>{this.editingFile=U,this.initEditor();let $=new FileReader;$.onload=Z=>{this.isEditorOpen=!0,setTimeout(()=>this.editor.replace(Z.target.result),200)},$.readAsDataURL(V)})},getRoundedCanvas:function(V){let N=V.width,U=V.height,$=document.createElement("canvas");$.width=N,$.height=U;let Z=$.getContext("2d");return Z.imageSmoothingEnabled=!0,Z.drawImage(V,0,0,N,U),Z.globalCompositeOperation="destination-in",Z.beginPath(),Z.ellipse(N/2,U/2,N/2,U/2,0,0,2*Math.PI),Z.fill(),$},saveEditor:function(){if(r||!g)return;let V=this.editor.getCroppedCanvas({fillColor:t??"transparent",height:m,imageSmoothingEnabled:!0,imageSmoothingQuality:"high",width:u});I&&(V=this.getRoundedCanvas(V)),V.toBlob(N=>{w&&this.pond.removeFile(this.pond.getFiles().find(U=>U.filename===this.editingFile.name)?.id,{revert:!0}),this.$nextTick(()=>{this.shouldUpdateState=!1;let U=this.editingFile.name.slice(0,this.editingFile.name.lastIndexOf(".")),$=this.editingFile.name.split(".").pop();$==="svg"&&($="png");let Z=/-v(\d+)/;Z.test(U)?U=U.replace(Z,(Ve,Ge)=>`-v${Number(Ge)+1}`):U+="-v1",this.pond.addFile(new File([N],`${U}.${$}`,{type:this.editingFile.type==="image/svg+xml"||I?"image/png":this.editingFile.type,lastModified:new Date().getTime()})).then(()=>{this.closeEditor()}).catch(()=>{this.closeEditor()})})},I?"image/png":this.editingFile.type)},destroyEditor:function(){this.editor&&typeof this.editor.destroy=="function"&&this.editor.destroy(),this.editor=null}}}var Kl={ar:wl,ca:Sl,ckb:Ll,cs:Al,da:Ml,de:Ol,en:Pl,es:Dl,fa:Fl,fi:zl,fr:Cl,hu:Nl,id:Bl,it:kl,km:Vl,nl:Gl,no:Ul,pl:Wl,pt_BR:Ri,pt_PT:Ri,ro:Hl,ru:jl,sv:ql,tr:Yl,uk:$l,vi:Xl,zh_CN:Ql,zh_TW:Zl};export{uf as default}; +/*! Bundled license information: + +filepond/dist/filepond.esm.js: + (*! + * FilePond 4.31.1 + * Licensed under MIT, https://opensource.org/licenses/MIT/ + * Please visit https://pqina.nl/filepond/ for details. + *) + +cropperjs/dist/cropper.esm.js: + (*! + * Cropper.js v1.6.2 + * https://fengyuanchen.github.io/cropperjs + * + * Copyright 2015-present Chen Fengyuan + * Released under the MIT license + * + * Date: 2024-04-21T07:43:05.335Z + *) + +filepond-plugin-file-validate-size/dist/filepond-plugin-file-validate-size.esm.js: + (*! + * FilePondPluginFileValidateSize 2.2.8 + * Licensed under MIT, https://opensource.org/licenses/MIT/ + * Please visit https://pqina.nl/filepond/ for details. + *) + +filepond-plugin-file-validate-type/dist/filepond-plugin-file-validate-type.esm.js: + (*! + * FilePondPluginFileValidateType 1.2.9 + * Licensed under MIT, https://opensource.org/licenses/MIT/ + * Please visit https://pqina.nl/filepond/ for details. + *) + +filepond-plugin-image-crop/dist/filepond-plugin-image-crop.esm.js: + (*! + * FilePondPluginImageCrop 2.0.6 + * Licensed under MIT, https://opensource.org/licenses/MIT/ + * Please visit https://pqina.nl/filepond/ for details. + *) + +filepond-plugin-image-edit/dist/filepond-plugin-image-edit.esm.js: + (*! + * FilePondPluginImageEdit 1.6.3 + * Licensed under MIT, https://opensource.org/licenses/MIT/ + * Please visit https://pqina.nl/filepond/ for details. + *) + +filepond-plugin-image-exif-orientation/dist/filepond-plugin-image-exif-orientation.esm.js: + (*! + * FilePondPluginImageExifOrientation 1.0.11 + * Licensed under MIT, https://opensource.org/licenses/MIT/ + * Please visit https://pqina.nl/filepond/ for details. + *) + +filepond-plugin-image-preview/dist/filepond-plugin-image-preview.esm.js: + (*! + * FilePondPluginImagePreview 4.6.12 + * Licensed under MIT, https://opensource.org/licenses/MIT/ + * Please visit https://pqina.nl/filepond/ for details. + *) + +filepond-plugin-image-resize/dist/filepond-plugin-image-resize.esm.js: + (*! + * FilePondPluginImageResize 2.0.10 + * Licensed under MIT, https://opensource.org/licenses/MIT/ + * Please visit https://pqina.nl/filepond/ for details. + *) + +filepond-plugin-image-transform/dist/filepond-plugin-image-transform.esm.js: + (*! + * FilePondPluginImageTransform 3.8.7 + * Licensed under MIT, https://opensource.org/licenses/MIT/ + * Please visit https://pqina.nl/filepond/ for details. + *) + +filepond-plugin-media-preview/dist/filepond-plugin-media-preview.esm.js: + (*! + * FilePondPluginMediaPreview 1.0.11 + * Licensed under MIT, https://opensource.org/licenses/MIT/ + * Please visit undefined for details. + *) +*/ diff --git a/public/js/filament/forms/components/key-value.js b/public/js/filament/forms/components/key-value.js new file mode 100644 index 0000000..9c847c0 --- /dev/null +++ b/public/js/filament/forms/components/key-value.js @@ -0,0 +1 @@ +function r({state:o}){return{state:o,rows:[],shouldUpdateRows:!0,init:function(){this.updateRows(),this.rows.length<=0?this.rows.push({key:"",value:""}):this.updateState(),this.$watch("state",(t,e)=>{let s=i=>i===null?0:Array.isArray(i)?i.length:typeof i!="object"?0:Object.keys(i).length;s(t)===0&&s(e)===0||this.updateRows()})},addRow:function(){this.rows.push({key:"",value:""}),this.updateState()},deleteRow:function(t){this.rows.splice(t,1),this.rows.length<=0&&this.addRow(),this.updateState()},reorderRows:function(t){let e=Alpine.raw(this.rows);this.rows=[];let s=e.splice(t.oldIndex,1)[0];e.splice(t.newIndex,0,s),this.$nextTick(()=>{this.rows=e,this.updateState()})},updateRows:function(){if(!this.shouldUpdateRows){this.shouldUpdateRows=!0;return}let t=[];for(let[e,s]of Object.entries(this.state??{}))t.push({key:e,value:s});this.rows=t},updateState:function(){let t={};this.rows.forEach(e=>{e.key===""||e.key===null||(t[e.key]=e.value)}),this.shouldUpdateRows=!1,this.state=t}}}export{r as default}; diff --git a/public/js/filament/forms/components/markdown-editor.js b/public/js/filament/forms/components/markdown-editor.js new file mode 100644 index 0000000..f42cab6 --- /dev/null +++ b/public/js/filament/forms/components/markdown-editor.js @@ -0,0 +1,51 @@ +var ss=Object.defineProperty;var Sd=Object.getOwnPropertyDescriptor;var Td=Object.getOwnPropertyNames;var Ld=Object.prototype.hasOwnProperty;var Cd=(o,p)=>()=>(o&&(p=o(o=0)),p);var Ke=(o,p)=>()=>(p||o((p={exports:{}}).exports,p),p.exports);var Ed=(o,p,v,C)=>{if(p&&typeof p=="object"||typeof p=="function")for(let b of Td(p))!Ld.call(o,b)&&b!==v&&ss(o,b,{get:()=>p[b],enumerable:!(C=Sd(p,b))||C.enumerable});return o};var zd=o=>Ed(ss({},"__esModule",{value:!0}),o);var We=Ke((Yo,Qo)=>{(function(o,p){typeof Yo=="object"&&typeof Qo<"u"?Qo.exports=p():typeof define=="function"&&define.amd?define(p):(o=o||self,o.CodeMirror=p())})(Yo,function(){"use strict";var o=navigator.userAgent,p=navigator.platform,v=/gecko\/\d/i.test(o),C=/MSIE \d/.test(o),b=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(o),S=/Edge\/(\d+)/.exec(o),s=C||b||S,h=s&&(C?document.documentMode||6:+(S||b)[1]),g=!S&&/WebKit\//.test(o),T=g&&/Qt\/\d+\.\d+/.test(o),x=!S&&/Chrome\/(\d+)/.exec(o),c=x&&+x[1],d=/Opera\//.test(o),w=/Apple Computer/.test(navigator.vendor),E=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(o),z=/PhantomJS/.test(o),y=w&&(/Mobile\/\w+/.test(o)||navigator.maxTouchPoints>2),R=/Android/.test(o),M=y||R||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(o),H=y||/Mac/.test(p),Z=/\bCrOS\b/.test(o),ee=/win/i.test(p),re=d&&o.match(/Version\/(\d*\.\d*)/);re&&(re=Number(re[1])),re&&re>=15&&(d=!1,g=!0);var N=H&&(T||d&&(re==null||re<12.11)),F=v||s&&h>=9;function D(e){return new RegExp("(^|\\s)"+e+"(?:$|\\s)\\s*")}var Q=function(e,t){var n=e.className,r=D(t).exec(n);if(r){var i=n.slice(r.index+r[0].length);e.className=n.slice(0,r.index)+(i?r[1]+i:"")}};function j(e){for(var t=e.childNodes.length;t>0;--t)e.removeChild(e.firstChild);return e}function V(e,t){return j(e).appendChild(t)}function _(e,t,n,r){var i=document.createElement(e);if(n&&(i.className=n),r&&(i.style.cssText=r),typeof t=="string")i.appendChild(document.createTextNode(t));else if(t)for(var a=0;a=t)return l+(t-a);l+=u-a,l+=n-l%n,a=u+1}}var qe=function(){this.id=null,this.f=null,this.time=0,this.handler=Ee(this.onTimeout,this)};qe.prototype.onTimeout=function(e){e.id=0,e.time<=+new Date?e.f():setTimeout(e.handler,e.time-+new Date)},qe.prototype.set=function(e,t){this.f=t;var n=+new Date+e;(!this.id||n=t)return r+Math.min(l,t-i);if(i+=a-r,i+=n-i%n,r=a+1,i>=t)return r}}var U=[""];function G(e){for(;U.length<=e;)U.push(ce(U)+" ");return U[e]}function ce(e){return e[e.length-1]}function Be(e,t){for(var n=[],r=0;r"\x80"&&(e.toUpperCase()!=e.toLowerCase()||Ue.test(e))}function Me(e,t){return t?t.source.indexOf("\\w")>-1&&we(e)?!0:t.test(e):we(e)}function Le(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return!1;return!0}var $=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;function W(e){return e.charCodeAt(0)>=768&&$.test(e)}function se(e,t,n){for(;(n<0?t>0:tn?-1:1;;){if(t==n)return t;var i=(t+n)/2,a=r<0?Math.ceil(i):Math.floor(i);if(a==t)return e(a)?t:n;e(a)?n=a:t=a+r}}function nt(e,t,n,r){if(!e)return r(t,n,"ltr",0);for(var i=!1,a=0;at||t==n&&l.to==t)&&(r(Math.max(l.from,t),Math.min(l.to,n),l.level==1?"rtl":"ltr",a),i=!0)}i||r(t,n,"ltr")}var dt=null;function Pt(e,t,n){var r;dt=null;for(var i=0;it)return i;a.to==t&&(a.from!=a.to&&n=="before"?r=i:dt=i),a.from==t&&(a.from!=a.to&&n!="before"?r=i:dt=i)}return r??dt}var It=function(){var e="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",t="nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111";function n(m){return m<=247?e.charAt(m):1424<=m&&m<=1524?"R":1536<=m&&m<=1785?t.charAt(m-1536):1774<=m&&m<=2220?"r":8192<=m&&m<=8203?"w":m==8204?"b":"L"}var r=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,i=/[stwN]/,a=/[LRr]/,l=/[Lb1n]/,u=/[1n]/;function f(m,A,P){this.level=m,this.from=A,this.to=P}return function(m,A){var P=A=="ltr"?"L":"R";if(m.length==0||A=="ltr"&&!r.test(m))return!1;for(var J=m.length,Y=[],ie=0;ie-1&&(r[t]=i.slice(0,a).concat(i.slice(a+1)))}}}function it(e,t){var n=nr(e,t);if(n.length)for(var r=Array.prototype.slice.call(arguments,2),i=0;i0}function Wt(e){e.prototype.on=function(t,n){Fe(this,t,n)},e.prototype.off=function(t,n){_t(this,t,n)}}function kt(e){e.preventDefault?e.preventDefault():e.returnValue=!1}function Hr(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}function Ct(e){return e.defaultPrevented!=null?e.defaultPrevented:e.returnValue==!1}function dr(e){kt(e),Hr(e)}function yn(e){return e.target||e.srcElement}function Ut(e){var t=e.which;return t==null&&(e.button&1?t=1:e.button&2?t=3:e.button&4&&(t=2)),H&&e.ctrlKey&&t==1&&(t=3),t}var eo=function(){if(s&&h<9)return!1;var e=_("div");return"draggable"in e||"dragDrop"in e}(),Br;function ei(e){if(Br==null){var t=_("span","\u200B");V(e,_("span",[t,document.createTextNode("x")])),e.firstChild.offsetHeight!=0&&(Br=t.offsetWidth<=1&&t.offsetHeight>2&&!(s&&h<8))}var n=Br?_("span","\u200B"):_("span","\xA0",null,"display: inline-block; width: 1px; margin-right: -1px");return n.setAttribute("cm-text",""),n}var xn;function pr(e){if(xn!=null)return xn;var t=V(e,document.createTextNode("A\u062EA")),n=X(t,0,1).getBoundingClientRect(),r=X(t,1,2).getBoundingClientRect();return j(e),!n||n.left==n.right?!1:xn=r.right-n.right<3}var Bt=` + +b`.split(/\n/).length!=3?function(e){for(var t=0,n=[],r=e.length;t<=r;){var i=e.indexOf(` +`,t);i==-1&&(i=e.length);var a=e.slice(t,e.charAt(i-1)=="\r"?i-1:i),l=a.indexOf("\r");l!=-1?(n.push(a.slice(0,l)),t+=l+1):(n.push(a),t=i+1)}return n}:function(e){return e.split(/\r\n?|\n/)},hr=window.getSelection?function(e){try{return e.selectionStart!=e.selectionEnd}catch{return!1}}:function(e){var t;try{t=e.ownerDocument.selection.createRange()}catch{}return!t||t.parentElement()!=e?!1:t.compareEndPoints("StartToEnd",t)!=0},ti=function(){var e=_("div");return"oncopy"in e?!0:(e.setAttribute("oncopy","return;"),typeof e.oncopy=="function")}(),$t=null;function to(e){if($t!=null)return $t;var t=V(e,_("span","x")),n=t.getBoundingClientRect(),r=X(t,0,1).getBoundingClientRect();return $t=Math.abs(n.left-r.left)>1}var Wr={},Kt={};function Gt(e,t){arguments.length>2&&(t.dependencies=Array.prototype.slice.call(arguments,2)),Wr[e]=t}function Cr(e,t){Kt[e]=t}function Ur(e){if(typeof e=="string"&&Kt.hasOwnProperty(e))e=Kt[e];else if(e&&typeof e.name=="string"&&Kt.hasOwnProperty(e.name)){var t=Kt[e.name];typeof t=="string"&&(t={name:t}),e=oe(t,e),e.name=t.name}else{if(typeof e=="string"&&/^[\w\-]+\/[\w\-]+\+xml$/.test(e))return Ur("application/xml");if(typeof e=="string"&&/^[\w\-]+\/[\w\-]+\+json$/.test(e))return Ur("application/json")}return typeof e=="string"?{name:e}:e||{name:"null"}}function $r(e,t){t=Ur(t);var n=Wr[t.name];if(!n)return $r(e,"text/plain");var r=n(e,t);if(gr.hasOwnProperty(t.name)){var i=gr[t.name];for(var a in i)i.hasOwnProperty(a)&&(r.hasOwnProperty(a)&&(r["_"+a]=r[a]),r[a]=i[a])}if(r.name=t.name,t.helperType&&(r.helperType=t.helperType),t.modeProps)for(var l in t.modeProps)r[l]=t.modeProps[l];return r}var gr={};function Kr(e,t){var n=gr.hasOwnProperty(e)?gr[e]:gr[e]={};ge(t,n)}function Vt(e,t){if(t===!0)return t;if(e.copyState)return e.copyState(t);var n={};for(var r in t){var i=t[r];i instanceof Array&&(i=i.concat([])),n[r]=i}return n}function _n(e,t){for(var n;e.innerMode&&(n=e.innerMode(t),!(!n||n.mode==e));)t=n.state,e=n.mode;return n||{mode:e,state:t}}function Gr(e,t,n){return e.startState?e.startState(t,n):!0}var at=function(e,t,n){this.pos=this.start=0,this.string=e,this.tabSize=t||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=n};at.prototype.eol=function(){return this.pos>=this.string.length},at.prototype.sol=function(){return this.pos==this.lineStart},at.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},at.prototype.next=function(){if(this.post},at.prototype.eatSpace=function(){for(var e=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e},at.prototype.skipToEnd=function(){this.pos=this.string.length},at.prototype.skipTo=function(e){var t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0},at.prototype.backUp=function(e){this.pos-=e},at.prototype.column=function(){return this.lastColumnPos0?null:(a&&t!==!1&&(this.pos+=a[0].length),a)}},at.prototype.current=function(){return this.string.slice(this.start,this.pos)},at.prototype.hideFirstChars=function(e,t){this.lineStart+=e;try{return t()}finally{this.lineStart-=e}},at.prototype.lookAhead=function(e){var t=this.lineOracle;return t&&t.lookAhead(e)},at.prototype.baseToken=function(){var e=this.lineOracle;return e&&e.baseToken(this.pos)};function Ae(e,t){if(t-=e.first,t<0||t>=e.size)throw new Error("There is no line "+(t+e.first)+" in the document.");for(var n=e;!n.lines;)for(var r=0;;++r){var i=n.children[r],a=i.chunkSize();if(t=e.first&&tn?ne(n,Ae(e,n).text.length):Sc(t,Ae(e,t.line).text.length)}function Sc(e,t){var n=e.ch;return n==null||n>t?ne(e.line,t):n<0?ne(e.line,0):e}function ca(e,t){for(var n=[],r=0;rthis.maxLookAhead&&(this.maxLookAhead=e),t},Jt.prototype.baseToken=function(e){if(!this.baseTokens)return null;for(;this.baseTokens[this.baseTokenPos]<=e;)this.baseTokenPos+=2;var t=this.baseTokens[this.baseTokenPos+1];return{type:t&&t.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-e}},Jt.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},Jt.fromSaved=function(e,t,n){return t instanceof ri?new Jt(e,Vt(e.mode,t.state),n,t.lookAhead):new Jt(e,Vt(e.mode,t),n)},Jt.prototype.save=function(e){var t=e!==!1?Vt(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new ri(t,this.maxLookAhead):t};function fa(e,t,n,r){var i=[e.state.modeGen],a={};va(e,t.text,e.doc.mode,n,function(m,A){return i.push(m,A)},a,r);for(var l=n.state,u=function(m){n.baseTokens=i;var A=e.state.overlays[m],P=1,J=0;n.state=!0,va(e,t.text,A.mode,n,function(Y,ie){for(var ue=P;JY&&i.splice(P,1,Y,i[P+1],me),P+=2,J=Math.min(Y,me)}if(ie)if(A.opaque)i.splice(ue,P-ue,Y,"overlay "+ie),P=ue+2;else for(;uee.options.maxHighlightLength&&Vt(e.doc.mode,r.state),a=fa(e,t,r);i&&(r.state=i),t.stateAfter=r.save(!i),t.styles=a.styles,a.classes?t.styleClasses=a.classes:t.styleClasses&&(t.styleClasses=null),n===e.doc.highlightFrontier&&(e.doc.modeFrontier=Math.max(e.doc.modeFrontier,++e.doc.highlightFrontier))}return t.styles}function wn(e,t,n){var r=e.doc,i=e.display;if(!r.mode.startState)return new Jt(r,!0,t);var a=Tc(e,t,n),l=a>r.first&&Ae(r,a-1).stateAfter,u=l?Jt.fromSaved(r,l,a):new Jt(r,Gr(r.mode),a);return r.iter(a,t,function(f){ro(e,f.text,u);var m=u.line;f.stateAfter=m==t-1||m%5==0||m>=i.viewFrom&&mt.start)return a}throw new Error("Mode "+e.name+" failed to advance stream.")}var ha=function(e,t,n){this.start=e.start,this.end=e.pos,this.string=e.current(),this.type=t||null,this.state=n};function ga(e,t,n,r){var i=e.doc,a=i.mode,l;t=Re(i,t);var u=Ae(i,t.line),f=wn(e,t.line,n),m=new at(u.text,e.options.tabSize,f),A;for(r&&(A=[]);(r||m.pose.options.maxHighlightLength?(u=!1,l&&ro(e,t,r,A.pos),A.pos=t.length,P=null):P=ma(no(n,A,r.state,J),a),J){var Y=J[0].name;Y&&(P="m-"+(P?Y+" "+P:Y))}if(!u||m!=P){for(;fl;--u){if(u<=a.first)return a.first;var f=Ae(a,u-1),m=f.stateAfter;if(m&&(!n||u+(m instanceof ri?m.lookAhead:0)<=a.modeFrontier))return u;var A=Oe(f.text,null,e.options.tabSize);(i==null||r>A)&&(i=u-1,r=A)}return i}function Lc(e,t){if(e.modeFrontier=Math.min(e.modeFrontier,t),!(e.highlightFrontiern;r--){var i=Ae(e,r).stateAfter;if(i&&(!(i instanceof ri)||r+i.lookAhead=t:a.to>t);(r||(r=[])).push(new ni(l,a.from,f?null:a.to))}}return r}function Dc(e,t,n){var r;if(e)for(var i=0;i=t:a.to>t);if(u||a.from==t&&l.type=="bookmark"&&(!n||a.marker.insertLeft)){var f=a.from==null||(l.inclusiveLeft?a.from<=t:a.from0&&u)for(var Ce=0;Ce0)){var A=[f,1],P=ye(m.from,u.from),J=ye(m.to,u.to);(P<0||!l.inclusiveLeft&&!P)&&A.push({from:m.from,to:u.from}),(J>0||!l.inclusiveRight&&!J)&&A.push({from:u.to,to:m.to}),i.splice.apply(i,A),f+=A.length-3}}return i}function xa(e){var t=e.markedSpans;if(t){for(var n=0;nt)&&(!r||oo(r,a.marker)<0)&&(r=a.marker)}return r}function Sa(e,t,n,r,i){var a=Ae(e,t),l=or&&a.markedSpans;if(l)for(var u=0;u=0&&P<=0||A<=0&&P>=0)&&(A<=0&&(f.marker.inclusiveRight&&i.inclusiveLeft?ye(m.to,n)>=0:ye(m.to,n)>0)||A>=0&&(f.marker.inclusiveRight&&i.inclusiveLeft?ye(m.from,r)<=0:ye(m.from,r)<0)))return!0}}}function Zt(e){for(var t;t=wa(e);)e=t.find(-1,!0).line;return e}function Fc(e){for(var t;t=ai(e);)e=t.find(1,!0).line;return e}function Nc(e){for(var t,n;t=ai(e);)e=t.find(1,!0).line,(n||(n=[])).push(e);return n}function ao(e,t){var n=Ae(e,t),r=Zt(n);return n==r?t:k(r)}function Ta(e,t){if(t>e.lastLine())return t;var n=Ae(e,t),r;if(!mr(e,n))return t;for(;r=ai(n);)n=r.find(1,!0).line;return k(n)+1}function mr(e,t){var n=or&&t.markedSpans;if(n){for(var r=void 0,i=0;it.maxLineLength&&(t.maxLineLength=i,t.maxLine=r)})}var Xr=function(e,t,n){this.text=e,_a(this,t),this.height=n?n(this):1};Xr.prototype.lineNo=function(){return k(this)},Wt(Xr);function Oc(e,t,n,r){e.text=t,e.stateAfter&&(e.stateAfter=null),e.styles&&(e.styles=null),e.order!=null&&(e.order=null),xa(e),_a(e,n);var i=r?r(e):1;i!=e.height&&jt(e,i)}function Pc(e){e.parent=null,xa(e)}var jc={},Rc={};function La(e,t){if(!e||/^\s*$/.test(e))return null;var n=t.addModeClass?Rc:jc;return n[e]||(n[e]=e.replace(/\S+/g,"cm-$&"))}function Ca(e,t){var n=K("span",null,null,g?"padding-right: .1px":null),r={pre:K("pre",[n],"CodeMirror-line"),content:n,col:0,pos:0,cm:e,trailingSpace:!1,splitSpaces:e.getOption("lineWrapping")};t.measure={};for(var i=0;i<=(t.rest?t.rest.length:0);i++){var a=i?t.rest[i-1]:t.line,l=void 0;r.pos=0,r.addToken=Bc,pr(e.display.measure)&&(l=Pe(a,e.doc.direction))&&(r.addToken=Uc(r.addToken,l)),r.map=[];var u=t!=e.display.externalMeasured&&k(a);$c(a,r,da(e,a,u)),a.styleClasses&&(a.styleClasses.bgClass&&(r.bgClass=xe(a.styleClasses.bgClass,r.bgClass||"")),a.styleClasses.textClass&&(r.textClass=xe(a.styleClasses.textClass,r.textClass||""))),r.map.length==0&&r.map.push(0,0,r.content.appendChild(ei(e.display.measure))),i==0?(t.measure.map=r.map,t.measure.cache={}):((t.measure.maps||(t.measure.maps=[])).push(r.map),(t.measure.caches||(t.measure.caches=[])).push({}))}if(g){var f=r.content.lastChild;(/\bcm-tab\b/.test(f.className)||f.querySelector&&f.querySelector(".cm-tab"))&&(r.content.className="cm-tab-wrap-hack")}return it(e,"renderLine",e,t.line,r.pre),r.pre.className&&(r.textClass=xe(r.pre.className,r.textClass||"")),r}function Hc(e){var t=_("span","\u2022","cm-invalidchar");return t.title="\\u"+e.charCodeAt(0).toString(16),t.setAttribute("aria-label",t.title),t}function Bc(e,t,n,r,i,a,l){if(t){var u=e.splitSpaces?Wc(t,e.trailingSpace):t,f=e.cm.state.specialChars,m=!1,A;if(!f.test(t))e.col+=t.length,A=document.createTextNode(u),e.map.push(e.pos,e.pos+t.length,A),s&&h<9&&(m=!0),e.pos+=t.length;else{A=document.createDocumentFragment();for(var P=0;;){f.lastIndex=P;var J=f.exec(t),Y=J?J.index-P:t.length-P;if(Y){var ie=document.createTextNode(u.slice(P,P+Y));s&&h<9?A.appendChild(_("span",[ie])):A.appendChild(ie),e.map.push(e.pos,e.pos+Y,ie),e.col+=Y,e.pos+=Y}if(!J)break;P+=Y+1;var ue=void 0;if(J[0]==" "){var me=e.cm.options.tabSize,ve=me-e.col%me;ue=A.appendChild(_("span",G(ve),"cm-tab")),ue.setAttribute("role","presentation"),ue.setAttribute("cm-text"," "),e.col+=ve}else J[0]=="\r"||J[0]==` +`?(ue=A.appendChild(_("span",J[0]=="\r"?"\u240D":"\u2424","cm-invalidchar")),ue.setAttribute("cm-text",J[0]),e.col+=1):(ue=e.cm.options.specialCharPlaceholder(J[0]),ue.setAttribute("cm-text",J[0]),s&&h<9?A.appendChild(_("span",[ue])):A.appendChild(ue),e.col+=1);e.map.push(e.pos,e.pos+1,ue),e.pos++}}if(e.trailingSpace=u.charCodeAt(t.length-1)==32,n||r||i||m||a||l){var _e=n||"";r&&(_e+=r),i&&(_e+=i);var be=_("span",[A],_e,a);if(l)for(var Ce in l)l.hasOwnProperty(Ce)&&Ce!="style"&&Ce!="class"&&be.setAttribute(Ce,l[Ce]);return e.content.appendChild(be)}e.content.appendChild(A)}}function Wc(e,t){if(e.length>1&&!/ /.test(e))return e;for(var n=t,r="",i=0;im&&P.from<=m));J++);if(P.to>=A)return e(n,r,i,a,l,u,f);e(n,r.slice(0,P.to-m),i,a,null,u,f),a=null,r=r.slice(P.to-m),m=P.to}}}function Ea(e,t,n,r){var i=!r&&n.widgetNode;i&&e.map.push(e.pos,e.pos+t,i),!r&&e.cm.display.input.needsContentAttribute&&(i||(i=e.content.appendChild(document.createElement("span"))),i.setAttribute("cm-marker",n.id)),i&&(e.cm.display.input.setUneditable(i),e.content.appendChild(i)),e.pos+=t,e.trailingSpace=!1}function $c(e,t,n){var r=e.markedSpans,i=e.text,a=0;if(!r){for(var l=1;lf||$e.collapsed&&Ie.to==f&&Ie.from==f)){if(Ie.to!=null&&Ie.to!=f&&Y>Ie.to&&(Y=Ie.to,ue=""),$e.className&&(ie+=" "+$e.className),$e.css&&(J=(J?J+";":"")+$e.css),$e.startStyle&&Ie.from==f&&(me+=" "+$e.startStyle),$e.endStyle&&Ie.to==Y&&(Ce||(Ce=[])).push($e.endStyle,Ie.to),$e.title&&((_e||(_e={})).title=$e.title),$e.attributes)for(var Ve in $e.attributes)(_e||(_e={}))[Ve]=$e.attributes[Ve];$e.collapsed&&(!ve||oo(ve.marker,$e)<0)&&(ve=Ie)}else Ie.from>f&&Y>Ie.from&&(Y=Ie.from)}if(Ce)for(var vt=0;vt=u)break;for(var Ot=Math.min(u,Y);;){if(A){var At=f+A.length;if(!ve){var ut=At>Ot?A.slice(0,Ot-f):A;t.addToken(t,ut,P?P+ie:ie,me,f+ut.length==Y?ue:"",J,_e)}if(At>=Ot){A=A.slice(Ot-f),f=Ot;break}f=At,me=""}A=i.slice(a,a=n[m++]),P=La(n[m++],t.cm.options)}}}function za(e,t,n){this.line=t,this.rest=Nc(t),this.size=this.rest?k(ce(this.rest))-n+1:1,this.node=this.text=null,this.hidden=mr(e,t)}function si(e,t,n){for(var r=[],i,a=t;a2&&a.push((f.bottom+m.top)/2-n.top)}}a.push(n.bottom-n.top)}}function Na(e,t,n){if(e.line==t)return{map:e.measure.map,cache:e.measure.cache};if(e.rest){for(var r=0;rn)return{map:e.measure.maps[i],cache:e.measure.caches[i],before:!0}}}function rf(e,t){t=Zt(t);var n=k(t),r=e.display.externalMeasured=new za(e.doc,t,n);r.lineN=n;var i=r.built=Ca(e,r);return r.text=i.pre,V(e.display.lineMeasure,i.pre),r}function Oa(e,t,n,r){return tr(e,Qr(e,t),n,r)}function po(e,t){if(t>=e.display.viewFrom&&t=n.lineN&&tt)&&(a=f-u,i=a-1,t>=f&&(l="right")),i!=null){if(r=e[m+2],u==f&&n==(r.insertLeft?"left":"right")&&(l=n),n=="left"&&i==0)for(;m&&e[m-2]==e[m-3]&&e[m-1].insertLeft;)r=e[(m-=3)+2],l="left";if(n=="right"&&i==f-u)for(;m=0&&(n=e[i]).left==n.right;i--);return n}function of(e,t,n,r){var i=ja(t.map,n,r),a=i.node,l=i.start,u=i.end,f=i.collapse,m;if(a.nodeType==3){for(var A=0;A<4;A++){for(;l&&W(t.line.text.charAt(i.coverStart+l));)--l;for(;i.coverStart+u0&&(f=r="right");var P;e.options.lineWrapping&&(P=a.getClientRects()).length>1?m=P[r=="right"?P.length-1:0]:m=a.getBoundingClientRect()}if(s&&h<9&&!l&&(!m||!m.left&&!m.right)){var J=a.parentNode.getClientRects()[0];J?m={left:J.left,right:J.left+Jr(e.display),top:J.top,bottom:J.bottom}:m=Pa}for(var Y=m.top-t.rect.top,ie=m.bottom-t.rect.top,ue=(Y+ie)/2,me=t.view.measure.heights,ve=0;ve=r.text.length?(f=r.text.length,m="before"):f<=0&&(f=0,m="after"),!u)return l(m=="before"?f-1:f,m=="before");function A(ie,ue,me){var ve=u[ue],_e=ve.level==1;return l(me?ie-1:ie,_e!=me)}var P=Pt(u,f,m),J=dt,Y=A(f,P,m=="before");return J!=null&&(Y.other=A(f,J,m!="before")),Y}function $a(e,t){var n=0;t=Re(e.doc,t),e.options.lineWrapping||(n=Jr(e.display)*t.ch);var r=Ae(e.doc,t.line),i=ar(r)+ui(e.display);return{left:n,right:n,top:i,bottom:i+r.height}}function go(e,t,n,r,i){var a=ne(e,t,n);return a.xRel=i,r&&(a.outside=r),a}function mo(e,t,n){var r=e.doc;if(n+=e.display.viewOffset,n<0)return go(r.first,0,null,-1,-1);var i=O(r,n),a=r.first+r.size-1;if(i>a)return go(r.first+r.size-1,Ae(r,a).text.length,null,1,1);t<0&&(t=0);for(var l=Ae(r,i);;){var u=lf(e,l,i,t,n),f=Ic(l,u.ch+(u.xRel>0||u.outside>0?1:0));if(!f)return u;var m=f.find(1);if(m.line==i)return m;l=Ae(r,i=m.line)}}function Ka(e,t,n,r){r-=ho(t);var i=t.text.length,a=De(function(l){return tr(e,n,l-1).bottom<=r},i,0);return i=De(function(l){return tr(e,n,l).top>r},a,i),{begin:a,end:i}}function Ga(e,t,n,r){n||(n=Qr(e,t));var i=ci(e,t,tr(e,n,r),"line").top;return Ka(e,t,n,i)}function vo(e,t,n,r){return e.bottom<=n?!1:e.top>n?!0:(r?e.left:e.right)>t}function lf(e,t,n,r,i){i-=ar(t);var a=Qr(e,t),l=ho(t),u=0,f=t.text.length,m=!0,A=Pe(t,e.doc.direction);if(A){var P=(e.options.lineWrapping?uf:sf)(e,t,n,a,A,r,i);m=P.level!=1,u=m?P.from:P.to-1,f=m?P.to:P.from-1}var J=null,Y=null,ie=De(function(Ne){var Ie=tr(e,a,Ne);return Ie.top+=l,Ie.bottom+=l,vo(Ie,r,i,!1)?(Ie.top<=i&&Ie.left<=r&&(J=Ne,Y=Ie),!0):!1},u,f),ue,me,ve=!1;if(Y){var _e=r-Y.left=Ce.bottom?1:0}return ie=se(t.text,ie,1),go(n,ie,me,ve,r-ue)}function sf(e,t,n,r,i,a,l){var u=De(function(P){var J=i[P],Y=J.level!=1;return vo(Xt(e,ne(n,Y?J.to:J.from,Y?"before":"after"),"line",t,r),a,l,!0)},0,i.length-1),f=i[u];if(u>0){var m=f.level!=1,A=Xt(e,ne(n,m?f.from:f.to,m?"after":"before"),"line",t,r);vo(A,a,l,!0)&&A.top>l&&(f=i[u-1])}return f}function uf(e,t,n,r,i,a,l){var u=Ka(e,t,r,l),f=u.begin,m=u.end;/\s/.test(t.text.charAt(m-1))&&m--;for(var A=null,P=null,J=0;J=m||Y.to<=f)){var ie=Y.level!=1,ue=tr(e,r,ie?Math.min(m,Y.to)-1:Math.max(f,Y.from)).right,me=ueme)&&(A=Y,P=me)}}return A||(A=i[i.length-1]),A.fromm&&(A={from:A.from,to:m,level:A.level}),A}var zr;function Vr(e){if(e.cachedTextHeight!=null)return e.cachedTextHeight;if(zr==null){zr=_("pre",null,"CodeMirror-line-like");for(var t=0;t<49;++t)zr.appendChild(document.createTextNode("x")),zr.appendChild(_("br"));zr.appendChild(document.createTextNode("x"))}V(e.measure,zr);var n=zr.offsetHeight/50;return n>3&&(e.cachedTextHeight=n),j(e.measure),n||1}function Jr(e){if(e.cachedCharWidth!=null)return e.cachedCharWidth;var t=_("span","xxxxxxxxxx"),n=_("pre",[t],"CodeMirror-line-like");V(e.measure,n);var r=t.getBoundingClientRect(),i=(r.right-r.left)/10;return i>2&&(e.cachedCharWidth=i),i||10}function bo(e){for(var t=e.display,n={},r={},i=t.gutters.clientLeft,a=t.gutters.firstChild,l=0;a;a=a.nextSibling,++l){var u=e.display.gutterSpecs[l].className;n[u]=a.offsetLeft+a.clientLeft+i,r[u]=a.clientWidth}return{fixedPos:yo(t),gutterTotalWidth:t.gutters.offsetWidth,gutterLeft:n,gutterWidth:r,wrapperWidth:t.wrapper.clientWidth}}function yo(e){return e.scroller.getBoundingClientRect().left-e.sizer.getBoundingClientRect().left}function Za(e){var t=Vr(e.display),n=e.options.lineWrapping,r=n&&Math.max(5,e.display.scroller.clientWidth/Jr(e.display)-3);return function(i){if(mr(e.doc,i))return 0;var a=0;if(i.widgets)for(var l=0;l0&&(m=Ae(e.doc,f.line).text).length==f.ch){var A=Oe(m,m.length,e.options.tabSize)-m.length;f=ne(f.line,Math.max(0,Math.round((a-Fa(e.display).left)/Jr(e.display))-A))}return f}function Ar(e,t){if(t>=e.display.viewTo||(t-=e.display.viewFrom,t<0))return null;for(var n=e.display.view,r=0;rt)&&(i.updateLineNumbers=t),e.curOp.viewChanged=!0,t>=i.viewTo)or&&ao(e.doc,t)i.viewFrom?br(e):(i.viewFrom+=r,i.viewTo+=r);else if(t<=i.viewFrom&&n>=i.viewTo)br(e);else if(t<=i.viewFrom){var a=di(e,n,n+r,1);a?(i.view=i.view.slice(a.index),i.viewFrom=a.lineN,i.viewTo+=r):br(e)}else if(n>=i.viewTo){var l=di(e,t,t,-1);l?(i.view=i.view.slice(0,l.index),i.viewTo=l.lineN):br(e)}else{var u=di(e,t,t,-1),f=di(e,n,n+r,1);u&&f?(i.view=i.view.slice(0,u.index).concat(si(e,u.lineN,f.lineN)).concat(i.view.slice(f.index)),i.viewTo+=r):br(e)}var m=i.externalMeasured;m&&(n=i.lineN&&t=r.viewTo)){var a=r.view[Ar(e,t)];if(a.node!=null){var l=a.changes||(a.changes=[]);Se(l,n)==-1&&l.push(n)}}}function br(e){e.display.viewFrom=e.display.viewTo=e.doc.first,e.display.view=[],e.display.viewOffset=0}function di(e,t,n,r){var i=Ar(e,t),a,l=e.display.view;if(!or||n==e.doc.first+e.doc.size)return{index:i,lineN:n};for(var u=e.display.viewFrom,f=0;f0){if(i==l.length-1)return null;a=u+l[i].size-t,i++}else a=u-t;t+=a,n+=a}for(;ao(e.doc,n)!=n;){if(i==(r<0?0:l.length-1))return null;n+=r*l[i-(r<0?1:0)].size,i+=r}return{index:i,lineN:n}}function cf(e,t,n){var r=e.display,i=r.view;i.length==0||t>=r.viewTo||n<=r.viewFrom?(r.view=si(e,t,n),r.viewFrom=t):(r.viewFrom>t?r.view=si(e,t,r.viewFrom).concat(r.view):r.viewFromn&&(r.view=r.view.slice(0,Ar(e,n)))),r.viewTo=n}function Xa(e){for(var t=e.display.view,n=0,r=0;r=e.display.viewTo||f.to().line0?l:e.defaultCharWidth())+"px"}if(r.other){var u=n.appendChild(_("div","\xA0","CodeMirror-cursor CodeMirror-secondarycursor"));u.style.display="",u.style.left=r.other.left+"px",u.style.top=r.other.top+"px",u.style.height=(r.other.bottom-r.other.top)*.85+"px"}}function pi(e,t){return e.top-t.top||e.left-t.left}function ff(e,t,n){var r=e.display,i=e.doc,a=document.createDocumentFragment(),l=Fa(e.display),u=l.left,f=Math.max(r.sizerWidth,Er(e)-r.sizer.offsetLeft)-l.right,m=i.direction=="ltr";function A(be,Ce,Ne,Ie){Ce<0&&(Ce=0),Ce=Math.round(Ce),Ie=Math.round(Ie),a.appendChild(_("div",null,"CodeMirror-selected","position: absolute; left: "+be+`px; + top: `+Ce+"px; width: "+(Ne??f-be)+`px; + height: `+(Ie-Ce)+"px"))}function P(be,Ce,Ne){var Ie=Ae(i,be),$e=Ie.text.length,Ve,vt;function rt(ut,Dt){return fi(e,ne(be,ut),"div",Ie,Dt)}function Ot(ut,Dt,yt){var ft=Ga(e,Ie,null,ut),ct=Dt=="ltr"==(yt=="after")?"left":"right",lt=yt=="after"?ft.begin:ft.end-(/\s/.test(Ie.text.charAt(ft.end-1))?2:1);return rt(lt,ct)[ct]}var At=Pe(Ie,i.direction);return nt(At,Ce||0,Ne??$e,function(ut,Dt,yt,ft){var ct=yt=="ltr",lt=rt(ut,ct?"left":"right"),qt=rt(Dt-1,ct?"right":"left"),pn=Ce==null&&ut==0,Sr=Ne==null&&Dt==$e,St=ft==0,rr=!At||ft==At.length-1;if(qt.top-lt.top<=3){var bt=(m?pn:Sr)&&St,Zo=(m?Sr:pn)&&rr,cr=bt?u:(ct?lt:qt).left,Nr=Zo?f:(ct?qt:lt).right;A(cr,lt.top,Nr-cr,lt.bottom)}else{var Or,Lt,hn,Xo;ct?(Or=m&&pn&&St?u:lt.left,Lt=m?f:Ot(ut,yt,"before"),hn=m?u:Ot(Dt,yt,"after"),Xo=m&&Sr&&rr?f:qt.right):(Or=m?Ot(ut,yt,"before"):u,Lt=!m&&pn&&St?f:lt.right,hn=!m&&Sr&&rr?u:qt.left,Xo=m?Ot(Dt,yt,"after"):f),A(Or,lt.top,Lt-Or,lt.bottom),lt.bottom0?t.blinker=setInterval(function(){e.hasFocus()||en(e),t.cursorDiv.style.visibility=(n=!n)?"":"hidden"},e.options.cursorBlinkRate):e.options.cursorBlinkRate<0&&(t.cursorDiv.style.visibility="hidden")}}function Qa(e){e.hasFocus()||(e.display.input.focus(),e.state.focused||So(e))}function wo(e){e.state.delayingBlurEvent=!0,setTimeout(function(){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1,e.state.focused&&en(e))},100)}function So(e,t){e.state.delayingBlurEvent&&!e.state.draggingText&&(e.state.delayingBlurEvent=!1),e.options.readOnly!="nocursor"&&(e.state.focused||(it(e,"focus",e,t),e.state.focused=!0,le(e.display.wrapper,"CodeMirror-focused"),!e.curOp&&e.display.selForContextMenu!=e.doc.sel&&(e.display.input.reset(),g&&setTimeout(function(){return e.display.input.reset(!0)},20)),e.display.input.receivedFocus()),ko(e))}function en(e,t){e.state.delayingBlurEvent||(e.state.focused&&(it(e,"blur",e,t),e.state.focused=!1,Q(e.display.wrapper,"CodeMirror-focused")),clearInterval(e.display.blinker),setTimeout(function(){e.state.focused||(e.display.shift=!1)},150))}function hi(e){for(var t=e.display,n=t.lineDiv.offsetTop,r=Math.max(0,t.scroller.getBoundingClientRect().top),i=t.lineDiv.getBoundingClientRect().top,a=0,l=0;l.005||Y<-.005)&&(ie.display.sizerWidth){var ue=Math.ceil(A/Jr(e.display));ue>e.display.maxLineLength&&(e.display.maxLineLength=ue,e.display.maxLine=u.line,e.display.maxLineChanged=!0)}}}Math.abs(a)>2&&(t.scroller.scrollTop+=a)}function Va(e){if(e.widgets)for(var t=0;t=l&&(a=O(t,ar(Ae(t,f))-e.wrapper.clientHeight),l=f)}return{from:a,to:Math.max(l,a+1)}}function df(e,t){if(!ot(e,"scrollCursorIntoView")){var n=e.display,r=n.sizer.getBoundingClientRect(),i=null,a=n.wrapper.ownerDocument;if(t.top+r.top<0?i=!0:t.bottom+r.top>(a.defaultView.innerHeight||a.documentElement.clientHeight)&&(i=!1),i!=null&&!z){var l=_("div","\u200B",null,`position: absolute; + top: `+(t.top-n.viewOffset-ui(e.display))+`px; + height: `+(t.bottom-t.top+er(e)+n.barHeight)+`px; + left: `+t.left+"px; width: "+Math.max(2,t.right-t.left)+"px;");e.display.lineSpace.appendChild(l),l.scrollIntoView(i),e.display.lineSpace.removeChild(l)}}}function pf(e,t,n,r){r==null&&(r=0);var i;!e.options.lineWrapping&&t==n&&(n=t.sticky=="before"?ne(t.line,t.ch+1,"before"):t,t=t.ch?ne(t.line,t.sticky=="before"?t.ch-1:t.ch,"after"):t);for(var a=0;a<5;a++){var l=!1,u=Xt(e,t),f=!n||n==t?u:Xt(e,n);i={left:Math.min(u.left,f.left),top:Math.min(u.top,f.top)-r,right:Math.max(u.left,f.left),bottom:Math.max(u.bottom,f.bottom)+r};var m=To(e,i),A=e.doc.scrollTop,P=e.doc.scrollLeft;if(m.scrollTop!=null&&(An(e,m.scrollTop),Math.abs(e.doc.scrollTop-A)>1&&(l=!0)),m.scrollLeft!=null&&(Dr(e,m.scrollLeft),Math.abs(e.doc.scrollLeft-P)>1&&(l=!0)),!l)break}return i}function hf(e,t){var n=To(e,t);n.scrollTop!=null&&An(e,n.scrollTop),n.scrollLeft!=null&&Dr(e,n.scrollLeft)}function To(e,t){var n=e.display,r=Vr(e.display);t.top<0&&(t.top=0);var i=e.curOp&&e.curOp.scrollTop!=null?e.curOp.scrollTop:n.scroller.scrollTop,a=fo(e),l={};t.bottom-t.top>a&&(t.bottom=t.top+a);var u=e.doc.height+co(n),f=t.topu-r;if(t.topi+a){var A=Math.min(t.top,(m?u:t.bottom)-a);A!=i&&(l.scrollTop=A)}var P=e.options.fixedGutter?0:n.gutters.offsetWidth,J=e.curOp&&e.curOp.scrollLeft!=null?e.curOp.scrollLeft:n.scroller.scrollLeft-P,Y=Er(e)-n.gutters.offsetWidth,ie=t.right-t.left>Y;return ie&&(t.right=t.left+Y),t.left<10?l.scrollLeft=0:t.leftY+J-3&&(l.scrollLeft=t.right+(ie?0:10)-Y),l}function Lo(e,t){t!=null&&(mi(e),e.curOp.scrollTop=(e.curOp.scrollTop==null?e.doc.scrollTop:e.curOp.scrollTop)+t)}function tn(e){mi(e);var t=e.getCursor();e.curOp.scrollToPos={from:t,to:t,margin:e.options.cursorScrollMargin}}function Mn(e,t,n){(t!=null||n!=null)&&mi(e),t!=null&&(e.curOp.scrollLeft=t),n!=null&&(e.curOp.scrollTop=n)}function gf(e,t){mi(e),e.curOp.scrollToPos=t}function mi(e){var t=e.curOp.scrollToPos;if(t){e.curOp.scrollToPos=null;var n=$a(e,t.from),r=$a(e,t.to);Ja(e,n,r,t.margin)}}function Ja(e,t,n,r){var i=To(e,{left:Math.min(t.left,n.left),top:Math.min(t.top,n.top)-r,right:Math.max(t.right,n.right),bottom:Math.max(t.bottom,n.bottom)+r});Mn(e,i.scrollLeft,i.scrollTop)}function An(e,t){Math.abs(e.doc.scrollTop-t)<2||(v||Eo(e,{top:t}),el(e,t,!0),v&&Eo(e),In(e,100))}function el(e,t,n){t=Math.max(0,Math.min(e.display.scroller.scrollHeight-e.display.scroller.clientHeight,t)),!(e.display.scroller.scrollTop==t&&!n)&&(e.doc.scrollTop=t,e.display.scrollbars.setScrollTop(t),e.display.scroller.scrollTop!=t&&(e.display.scroller.scrollTop=t))}function Dr(e,t,n,r){t=Math.max(0,Math.min(t,e.display.scroller.scrollWidth-e.display.scroller.clientWidth)),!((n?t==e.doc.scrollLeft:Math.abs(e.doc.scrollLeft-t)<2)&&!r)&&(e.doc.scrollLeft=t,ol(e),e.display.scroller.scrollLeft!=t&&(e.display.scroller.scrollLeft=t),e.display.scrollbars.setScrollLeft(t))}function Dn(e){var t=e.display,n=t.gutters.offsetWidth,r=Math.round(e.doc.height+co(e.display));return{clientHeight:t.scroller.clientHeight,viewHeight:t.wrapper.clientHeight,scrollWidth:t.scroller.scrollWidth,clientWidth:t.scroller.clientWidth,viewWidth:t.wrapper.clientWidth,barLeft:e.options.fixedGutter?n:0,docHeight:r,scrollHeight:r+er(e)+t.barHeight,nativeBarWidth:t.nativeBarWidth,gutterWidth:n}}var qr=function(e,t,n){this.cm=n;var r=this.vert=_("div",[_("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),i=this.horiz=_("div",[_("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");r.tabIndex=i.tabIndex=-1,e(r),e(i),Fe(r,"scroll",function(){r.clientHeight&&t(r.scrollTop,"vertical")}),Fe(i,"scroll",function(){i.clientWidth&&t(i.scrollLeft,"horizontal")}),this.checkedZeroWidth=!1,s&&h<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};qr.prototype.update=function(e){var t=e.scrollWidth>e.clientWidth+1,n=e.scrollHeight>e.clientHeight+1,r=e.nativeBarWidth;if(n){this.vert.style.display="block",this.vert.style.bottom=t?r+"px":"0";var i=e.viewHeight-(t?r:0);this.vert.firstChild.style.height=Math.max(0,e.scrollHeight-e.clientHeight+i)+"px"}else this.vert.scrollTop=0,this.vert.style.display="",this.vert.firstChild.style.height="0";if(t){this.horiz.style.display="block",this.horiz.style.right=n?r+"px":"0",this.horiz.style.left=e.barLeft+"px";var a=e.viewWidth-e.barLeft-(n?r:0);this.horiz.firstChild.style.width=Math.max(0,e.scrollWidth-e.clientWidth+a)+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&e.clientHeight>0&&(r==0&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:n?r:0,bottom:t?r:0}},qr.prototype.setScrollLeft=function(e){this.horiz.scrollLeft!=e&&(this.horiz.scrollLeft=e),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},qr.prototype.setScrollTop=function(e){this.vert.scrollTop!=e&&(this.vert.scrollTop=e),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},qr.prototype.zeroWidthHack=function(){var e=H&&!E?"12px":"18px";this.horiz.style.height=this.vert.style.width=e,this.horiz.style.visibility=this.vert.style.visibility="hidden",this.disableHoriz=new qe,this.disableVert=new qe},qr.prototype.enableZeroWidthBar=function(e,t,n){e.style.visibility="";function r(){var i=e.getBoundingClientRect(),a=n=="vert"?document.elementFromPoint(i.right-1,(i.top+i.bottom)/2):document.elementFromPoint((i.right+i.left)/2,i.bottom-1);a!=e?e.style.visibility="hidden":t.set(1e3,r)}t.set(1e3,r)},qr.prototype.clear=function(){var e=this.horiz.parentNode;e.removeChild(this.horiz),e.removeChild(this.vert)};var qn=function(){};qn.prototype.update=function(){return{bottom:0,right:0}},qn.prototype.setScrollLeft=function(){},qn.prototype.setScrollTop=function(){},qn.prototype.clear=function(){};function rn(e,t){t||(t=Dn(e));var n=e.display.barWidth,r=e.display.barHeight;tl(e,t);for(var i=0;i<4&&n!=e.display.barWidth||r!=e.display.barHeight;i++)n!=e.display.barWidth&&e.options.lineWrapping&&hi(e),tl(e,Dn(e)),n=e.display.barWidth,r=e.display.barHeight}function tl(e,t){var n=e.display,r=n.scrollbars.update(t);n.sizer.style.paddingRight=(n.barWidth=r.right)+"px",n.sizer.style.paddingBottom=(n.barHeight=r.bottom)+"px",n.heightForcer.style.borderBottom=r.bottom+"px solid transparent",r.right&&r.bottom?(n.scrollbarFiller.style.display="block",n.scrollbarFiller.style.height=r.bottom+"px",n.scrollbarFiller.style.width=r.right+"px"):n.scrollbarFiller.style.display="",r.bottom&&e.options.coverGutterNextToScrollbar&&e.options.fixedGutter?(n.gutterFiller.style.display="block",n.gutterFiller.style.height=r.bottom+"px",n.gutterFiller.style.width=t.gutterWidth+"px"):n.gutterFiller.style.display=""}var rl={native:qr,null:qn};function nl(e){e.display.scrollbars&&(e.display.scrollbars.clear(),e.display.scrollbars.addClass&&Q(e.display.wrapper,e.display.scrollbars.addClass)),e.display.scrollbars=new rl[e.options.scrollbarStyle](function(t){e.display.wrapper.insertBefore(t,e.display.scrollbarFiller),Fe(t,"mousedown",function(){e.state.focused&&setTimeout(function(){return e.display.input.focus()},0)}),t.setAttribute("cm-not-content","true")},function(t,n){n=="horizontal"?Dr(e,t):An(e,t)},e),e.display.scrollbars.addClass&&le(e.display.wrapper,e.display.scrollbars.addClass)}var mf=0;function Ir(e){e.curOp={cm:e,viewChanged:!1,startHeight:e.doc.height,forceUpdate:!1,updateInput:0,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++mf,markArrays:null},Kc(e.curOp)}function Fr(e){var t=e.curOp;t&&Zc(t,function(n){for(var r=0;r=n.viewTo)||n.maxLineChanged&&t.options.lineWrapping,e.update=e.mustUpdate&&new vi(t,e.mustUpdate&&{top:e.scrollTop,ensure:e.scrollToPos},e.forceUpdate)}function yf(e){e.updatedDisplay=e.mustUpdate&&Co(e.cm,e.update)}function xf(e){var t=e.cm,n=t.display;e.updatedDisplay&&hi(t),e.barMeasure=Dn(t),n.maxLineChanged&&!t.options.lineWrapping&&(e.adjustWidthTo=Oa(t,n.maxLine,n.maxLine.text.length).left+3,t.display.sizerWidth=e.adjustWidthTo,e.barMeasure.scrollWidth=Math.max(n.scroller.clientWidth,n.sizer.offsetLeft+e.adjustWidthTo+er(t)+t.display.barWidth),e.maxScrollLeft=Math.max(0,n.sizer.offsetLeft+e.adjustWidthTo-Er(t))),(e.updatedDisplay||e.selectionChanged)&&(e.preparedSelection=n.input.prepareSelection())}function _f(e){var t=e.cm;e.adjustWidthTo!=null&&(t.display.sizer.style.minWidth=e.adjustWidthTo+"px",e.maxScrollLeft=e.display.viewTo)){var n=+new Date+e.options.workTime,r=wn(e,t.highlightFrontier),i=[];t.iter(r.line,Math.min(t.first+t.size,e.display.viewTo+500),function(a){if(r.line>=e.display.viewFrom){var l=a.styles,u=a.text.length>e.options.maxHighlightLength?Vt(t.mode,r.state):null,f=fa(e,a,r,!0);u&&(r.state=u),a.styles=f.styles;var m=a.styleClasses,A=f.classes;A?a.styleClasses=A:m&&(a.styleClasses=null);for(var P=!l||l.length!=a.styles.length||m!=A&&(!m||!A||m.bgClass!=A.bgClass||m.textClass!=A.textClass),J=0;!P&&Jn)return In(e,e.options.workDelay),!0}),t.highlightFrontier=r.line,t.modeFrontier=Math.max(t.modeFrontier,r.line),i.length&&Nt(e,function(){for(var a=0;a=n.viewFrom&&t.visible.to<=n.viewTo&&(n.updateLineNumbers==null||n.updateLineNumbers>=n.viewTo)&&n.renderedView==n.view&&Xa(e)==0)return!1;al(e)&&(br(e),t.dims=bo(e));var i=r.first+r.size,a=Math.max(t.visible.from-e.options.viewportMargin,r.first),l=Math.min(i,t.visible.to+e.options.viewportMargin);n.viewFroml&&n.viewTo-l<20&&(l=Math.min(i,n.viewTo)),or&&(a=ao(e.doc,a),l=Ta(e.doc,l));var u=a!=n.viewFrom||l!=n.viewTo||n.lastWrapHeight!=t.wrapperHeight||n.lastWrapWidth!=t.wrapperWidth;cf(e,a,l),n.viewOffset=ar(Ae(e.doc,n.viewFrom)),e.display.mover.style.top=n.viewOffset+"px";var f=Xa(e);if(!u&&f==0&&!t.force&&n.renderedView==n.view&&(n.updateLineNumbers==null||n.updateLineNumbers>=n.viewTo))return!1;var m=Tf(e);return f>4&&(n.lineDiv.style.display="none"),Cf(e,n.updateLineNumbers,t.dims),f>4&&(n.lineDiv.style.display=""),n.renderedView=n.view,Lf(m),j(n.cursorDiv),j(n.selectionDiv),n.gutters.style.height=n.sizer.style.minHeight=0,u&&(n.lastWrapHeight=t.wrapperHeight,n.lastWrapWidth=t.wrapperWidth,In(e,400)),n.updateLineNumbers=null,!0}function il(e,t){for(var n=t.viewport,r=!0;;r=!1){if(!r||!e.options.lineWrapping||t.oldDisplayWidth==Er(e)){if(n&&n.top!=null&&(n={top:Math.min(e.doc.height+co(e.display)-fo(e),n.top)}),t.visible=gi(e.display,e.doc,n),t.visible.from>=e.display.viewFrom&&t.visible.to<=e.display.viewTo)break}else r&&(t.visible=gi(e.display,e.doc,n));if(!Co(e,t))break;hi(e);var i=Dn(e);zn(e),rn(e,i),Mo(e,i),t.force=!1}t.signal(e,"update",e),(e.display.viewFrom!=e.display.reportedViewFrom||e.display.viewTo!=e.display.reportedViewTo)&&(t.signal(e,"viewportChange",e,e.display.viewFrom,e.display.viewTo),e.display.reportedViewFrom=e.display.viewFrom,e.display.reportedViewTo=e.display.viewTo)}function Eo(e,t){var n=new vi(e,t);if(Co(e,n)){hi(e),il(e,n);var r=Dn(e);zn(e),rn(e,r),Mo(e,r),n.finish()}}function Cf(e,t,n){var r=e.display,i=e.options.lineNumbers,a=r.lineDiv,l=a.firstChild;function u(ie){var ue=ie.nextSibling;return g&&H&&e.display.currentWheelTarget==ie?ie.style.display="none":ie.parentNode.removeChild(ie),ue}for(var f=r.view,m=r.viewFrom,A=0;A-1&&(Y=!1),Ma(e,P,m,n)),Y&&(j(P.lineNumber),P.lineNumber.appendChild(document.createTextNode(he(e.options,m)))),l=P.node.nextSibling}m+=P.size}for(;l;)l=u(l)}function zo(e){var t=e.gutters.offsetWidth;e.sizer.style.marginLeft=t+"px",ht(e,"gutterChanged",e)}function Mo(e,t){e.display.sizer.style.minHeight=t.docHeight+"px",e.display.heightForcer.style.top=t.docHeight+"px",e.display.gutters.style.height=t.docHeight+e.display.barHeight+er(e)+"px"}function ol(e){var t=e.display,n=t.view;if(!(!t.alignWidgets&&(!t.gutters.firstChild||!e.options.fixedGutter))){for(var r=yo(t)-t.scroller.scrollLeft+e.doc.scrollLeft,i=t.gutters.offsetWidth,a=r+"px",l=0;l=105&&(i.wrapper.style.clipPath="inset(0px)"),i.wrapper.setAttribute("translate","no"),s&&h<8&&(i.gutters.style.zIndex=-1,i.scroller.style.paddingRight=0),!g&&!(v&&M)&&(i.scroller.draggable=!0),e&&(e.appendChild?e.appendChild(i.wrapper):e(i.wrapper)),i.viewFrom=i.viewTo=t.first,i.reportedViewFrom=i.reportedViewTo=t.first,i.view=[],i.renderedView=null,i.externalMeasured=null,i.viewOffset=0,i.lastWrapHeight=i.lastWrapWidth=0,i.updateLineNumbers=null,i.nativeBarWidth=i.barHeight=i.barWidth=0,i.scrollbarsClipped=!1,i.lineNumWidth=i.lineNumInnerWidth=i.lineNumChars=null,i.alignWidgets=!1,i.cachedCharWidth=i.cachedTextHeight=i.cachedPaddingH=null,i.maxLine=null,i.maxLineLength=0,i.maxLineChanged=!1,i.wheelDX=i.wheelDY=i.wheelStartX=i.wheelStartY=null,i.shift=!1,i.selForContextMenu=null,i.activeTouch=null,i.gutterSpecs=Ao(r.gutters,r.lineNumbers),ll(i),n.init(i)}var bi=0,sr=null;s?sr=-.53:v?sr=15:x?sr=-.7:w&&(sr=-1/3);function sl(e){var t=e.wheelDeltaX,n=e.wheelDeltaY;return t==null&&e.detail&&e.axis==e.HORIZONTAL_AXIS&&(t=e.detail),n==null&&e.detail&&e.axis==e.VERTICAL_AXIS?n=e.detail:n==null&&(n=e.wheelDelta),{x:t,y:n}}function zf(e){var t=sl(e);return t.x*=sr,t.y*=sr,t}function ul(e,t){x&&c==102&&(e.display.chromeScrollHack==null?e.display.sizer.style.pointerEvents="none":clearTimeout(e.display.chromeScrollHack),e.display.chromeScrollHack=setTimeout(function(){e.display.chromeScrollHack=null,e.display.sizer.style.pointerEvents=""},100));var n=sl(t),r=n.x,i=n.y,a=sr;t.deltaMode===0&&(r=t.deltaX,i=t.deltaY,a=1);var l=e.display,u=l.scroller,f=u.scrollWidth>u.clientWidth,m=u.scrollHeight>u.clientHeight;if(r&&f||i&&m){if(i&&H&&g){e:for(var A=t.target,P=l.view;A!=u;A=A.parentNode)for(var J=0;J=0&&ye(e,r.to())<=0)return n}return-1};var Ye=function(e,t){this.anchor=e,this.head=t};Ye.prototype.from=function(){return Zr(this.anchor,this.head)},Ye.prototype.to=function(){return Et(this.anchor,this.head)},Ye.prototype.empty=function(){return this.head.line==this.anchor.line&&this.head.ch==this.anchor.ch};function Yt(e,t,n){var r=e&&e.options.selectionsMayTouch,i=t[n];t.sort(function(J,Y){return ye(J.from(),Y.from())}),n=Se(t,i);for(var a=1;a0:f>=0){var m=Zr(u.from(),l.from()),A=Et(u.to(),l.to()),P=u.empty()?l.from()==l.head:u.from()==u.head;a<=n&&--n,t.splice(--a,2,new Ye(P?A:m,P?m:A))}}return new Rt(t,n)}function yr(e,t){return new Rt([new Ye(e,t||e)],0)}function xr(e){return e.text?ne(e.from.line+e.text.length-1,ce(e.text).length+(e.text.length==1?e.from.ch:0)):e.to}function cl(e,t){if(ye(e,t.from)<0)return e;if(ye(e,t.to)<=0)return xr(t);var n=e.line+t.text.length-(t.to.line-t.from.line)-1,r=e.ch;return e.line==t.to.line&&(r+=xr(t).ch-t.to.ch),ne(n,r)}function Do(e,t){for(var n=[],r=0;r1&&e.remove(u.line+1,ie-1),e.insert(u.line+1,ve)}ht(e,"change",e,t)}function _r(e,t,n){function r(i,a,l){if(i.linked)for(var u=0;u1&&!e.done[e.done.length-2].ranges)return e.done.pop(),ce(e.done)}function ml(e,t,n,r){var i=e.history;i.undone.length=0;var a=+new Date,l,u;if((i.lastOp==r||i.lastOrigin==t.origin&&t.origin&&(t.origin.charAt(0)=="+"&&i.lastModTime>a-(e.cm?e.cm.options.historyEventDelay:500)||t.origin.charAt(0)=="*"))&&(l=Df(i,i.lastOp==r)))u=ce(l.changes),ye(t.from,t.to)==0&&ye(t.from,u.to)==0?u.to=xr(t):l.changes.push(Fo(e,t));else{var f=ce(i.done);for((!f||!f.ranges)&&xi(e.sel,i.done),l={changes:[Fo(e,t)],generation:i.generation},i.done.push(l);i.done.length>i.undoDepth;)i.done.shift(),i.done[0].ranges||i.done.shift()}i.done.push(n),i.generation=++i.maxGeneration,i.lastModTime=i.lastSelTime=a,i.lastOp=i.lastSelOp=r,i.lastOrigin=i.lastSelOrigin=t.origin,u||it(e,"historyAdded")}function qf(e,t,n,r){var i=t.charAt(0);return i=="*"||i=="+"&&n.ranges.length==r.ranges.length&&n.somethingSelected()==r.somethingSelected()&&new Date-e.history.lastSelTime<=(e.cm?e.cm.options.historyEventDelay:500)}function If(e,t,n,r){var i=e.history,a=r&&r.origin;n==i.lastSelOp||a&&i.lastSelOrigin==a&&(i.lastModTime==i.lastSelTime&&i.lastOrigin==a||qf(e,a,ce(i.done),t))?i.done[i.done.length-1]=t:xi(t,i.done),i.lastSelTime=+new Date,i.lastSelOrigin=a,i.lastSelOp=n,r&&r.clearRedo!==!1&&gl(i.undone)}function xi(e,t){var n=ce(t);n&&n.ranges&&n.equals(e)||t.push(e)}function vl(e,t,n,r){var i=t["spans_"+e.id],a=0;e.iter(Math.max(e.first,n),Math.min(e.first+e.size,r),function(l){l.markedSpans&&((i||(i=t["spans_"+e.id]={}))[a]=l.markedSpans),++a})}function Ff(e){if(!e)return null;for(var t,n=0;n-1&&(ce(u)[P]=m[P],delete m[P])}}return r}function No(e,t,n,r){if(r){var i=e.anchor;if(n){var a=ye(t,i)<0;a!=ye(n,i)<0?(i=t,t=n):a!=ye(t,n)<0&&(t=n)}return new Ye(i,t)}else return new Ye(n||t,t)}function _i(e,t,n,r,i){i==null&&(i=e.cm&&(e.cm.display.shift||e.extend)),wt(e,new Rt([No(e.sel.primary(),t,n,i)],0),r)}function yl(e,t,n){for(var r=[],i=e.cm&&(e.cm.display.shift||e.extend),a=0;a=t.ch:u.to>t.ch))){if(i&&(it(f,"beforeCursorEnter"),f.explicitlyCleared))if(a.markedSpans){--l;continue}else break;if(!f.atomic)continue;if(n){var P=f.find(r<0?1:-1),J=void 0;if((r<0?A:m)&&(P=Tl(e,P,-r,P&&P.line==t.line?a:null)),P&&P.line==t.line&&(J=ye(P,n))&&(r<0?J<0:J>0))return on(e,P,t,r,i)}var Y=f.find(r<0?-1:1);return(r<0?m:A)&&(Y=Tl(e,Y,r,Y.line==t.line?a:null)),Y?on(e,Y,t,r,i):null}}return t}function wi(e,t,n,r,i){var a=r||1,l=on(e,t,n,a,i)||!i&&on(e,t,n,a,!0)||on(e,t,n,-a,i)||!i&&on(e,t,n,-a,!0);return l||(e.cantEdit=!0,ne(e.first,0))}function Tl(e,t,n,r){return n<0&&t.ch==0?t.line>e.first?Re(e,ne(t.line-1)):null:n>0&&t.ch==(r||Ae(e,t.line)).text.length?t.line=0;--i)El(e,{from:r[i].from,to:r[i].to,text:i?[""]:t.text,origin:t.origin});else El(e,t)}}function El(e,t){if(!(t.text.length==1&&t.text[0]==""&&ye(t.from,t.to)==0)){var n=Do(e,t);ml(e,t,n,e.cm?e.cm.curOp.id:NaN),On(e,t,n,io(e,t));var r=[];_r(e,function(i,a){!a&&Se(r,i.history)==-1&&(Dl(i.history,t),r.push(i.history)),On(i,t,null,io(i,t))})}}function Si(e,t,n){var r=e.cm&&e.cm.state.suppressEdits;if(!(r&&!n)){for(var i=e.history,a,l=e.sel,u=t=="undo"?i.done:i.undone,f=t=="undo"?i.undone:i.done,m=0;m=0;--Y){var ie=J(Y);if(ie)return ie.v}}}}function zl(e,t){if(t!=0&&(e.first+=t,e.sel=new Rt(Be(e.sel.ranges,function(i){return new Ye(ne(i.anchor.line+t,i.anchor.ch),ne(i.head.line+t,i.head.ch))}),e.sel.primIndex),e.cm)){zt(e.cm,e.first,e.first-t,t);for(var n=e.cm.display,r=n.viewFrom;re.lastLine())){if(t.from.linea&&(t={from:t.from,to:ne(a,Ae(e,a).text.length),text:[t.text[0]],origin:t.origin}),t.removed=ir(e,t.from,t.to),n||(n=Do(e,t)),e.cm?Pf(e.cm,t,r):Io(e,t,r),ki(e,n,ke),e.cantEdit&&wi(e,ne(e.firstLine(),0))&&(e.cantEdit=!1)}}function Pf(e,t,n){var r=e.doc,i=e.display,a=t.from,l=t.to,u=!1,f=a.line;e.options.lineWrapping||(f=k(Zt(Ae(r,a.line))),r.iter(f,l.line+1,function(Y){if(Y==i.maxLine)return u=!0,!0})),r.sel.contains(t.from,t.to)>-1&&Ht(e),Io(r,t,n,Za(e)),e.options.lineWrapping||(r.iter(f,a.line+t.text.length,function(Y){var ie=li(Y);ie>i.maxLineLength&&(i.maxLine=Y,i.maxLineLength=ie,i.maxLineChanged=!0,u=!1)}),u&&(e.curOp.updateMaxLine=!0)),Lc(r,a.line),In(e,400);var m=t.text.length-(l.line-a.line)-1;t.full?zt(e):a.line==l.line&&t.text.length==1&&!dl(e.doc,t)?vr(e,a.line,"text"):zt(e,a.line,l.line+1,m);var A=Ft(e,"changes"),P=Ft(e,"change");if(P||A){var J={from:a,to:l,text:t.text,removed:t.removed,origin:t.origin};P&&ht(e,"change",e,J),A&&(e.curOp.changeObjs||(e.curOp.changeObjs=[])).push(J)}e.display.selForContextMenu=null}function ln(e,t,n,r,i){var a;r||(r=n),ye(r,n)<0&&(a=[r,n],n=a[0],r=a[1]),typeof t=="string"&&(t=e.splitLines(t)),an(e,{from:n,to:r,text:t,origin:i})}function Ml(e,t,n,r){n1||!(this.children[0]instanceof jn))){var u=[];this.collapse(u),this.children=[new jn(u)],this.children[0].parent=this}},collapse:function(e){for(var t=0;t50){for(var l=i.lines.length%25+25,u=l;u10);e.parent.maybeSpill()}},iterN:function(e,t,n){for(var r=0;re.display.maxLineLength&&(e.display.maxLine=m,e.display.maxLineLength=A,e.display.maxLineChanged=!0)}r!=null&&e&&this.collapsed&&zt(e,r,i+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,e&&wl(e.doc)),e&&ht(e,"markerCleared",e,this,r,i),t&&Fr(e),this.parent&&this.parent.clear()}},kr.prototype.find=function(e,t){e==null&&this.type=="bookmark"&&(e=1);for(var n,r,i=0;i0||l==0&&a.clearWhenEmpty!==!1)return a;if(a.replacedWith&&(a.collapsed=!0,a.widgetNode=K("span",[a.replacedWith],"CodeMirror-widget"),r.handleMouseEvents||a.widgetNode.setAttribute("cm-ignore-events","true"),r.insertLeft&&(a.widgetNode.insertLeft=!0)),a.collapsed){if(Sa(e,t.line,t,n,a)||t.line!=n.line&&Sa(e,n.line,t,n,a))throw new Error("Inserting collapsed marker partially overlapping an existing one");Ec()}a.addToHistory&&ml(e,{from:t,to:n,origin:"markText"},e.sel,NaN);var u=t.line,f=e.cm,m;if(e.iter(u,n.line+1,function(P){f&&a.collapsed&&!f.options.lineWrapping&&Zt(P)==f.display.maxLine&&(m=!0),a.collapsed&&u!=t.line&&jt(P,0),Mc(P,new ni(a,u==t.line?t.ch:null,u==n.line?n.ch:null),e.cm&&e.cm.curOp),++u}),a.collapsed&&e.iter(t.line,n.line+1,function(P){mr(e,P)&&jt(P,0)}),a.clearOnEnter&&Fe(a,"beforeCursorEnter",function(){return a.clear()}),a.readOnly&&(Cc(),(e.history.done.length||e.history.undone.length)&&e.clearHistory()),a.collapsed&&(a.id=++Il,a.atomic=!0),f){if(m&&(f.curOp.updateMaxLine=!0),a.collapsed)zt(f,t.line,n.line+1);else if(a.className||a.startStyle||a.endStyle||a.css||a.attributes||a.title)for(var A=t.line;A<=n.line;A++)vr(f,A,"text");a.atomic&&wl(f.doc),ht(f,"markerAdded",f,a)}return a}var Bn=function(e,t){this.markers=e,this.primary=t;for(var n=0;n=0;f--)an(this,r[f]);u?_l(this,u):this.cm&&tn(this.cm)}),undo:mt(function(){Si(this,"undo")}),redo:mt(function(){Si(this,"redo")}),undoSelection:mt(function(){Si(this,"undo",!0)}),redoSelection:mt(function(){Si(this,"redo",!0)}),setExtending:function(e){this.extend=e},getExtending:function(){return this.extend},historySize:function(){for(var e=this.history,t=0,n=0,r=0;r=e.ch)&&t.push(i.marker.parent||i.marker)}return t},findMarks:function(e,t,n){e=Re(this,e),t=Re(this,t);var r=[],i=e.line;return this.iter(e.line,t.line+1,function(a){var l=a.markedSpans;if(l)for(var u=0;u=f.to||f.from==null&&i!=e.line||f.from!=null&&i==t.line&&f.from>=t.ch)&&(!n||n(f.marker))&&r.push(f.marker.parent||f.marker)}++i}),r},getAllMarks:function(){var e=[];return this.iter(function(t){var n=t.markedSpans;if(n)for(var r=0;re)return t=e,!0;e-=a,++n}),Re(this,ne(n,t))},indexFromPos:function(e){e=Re(this,e);var t=e.ch;if(e.linet&&(t=e.from),e.to!=null&&e.to-1){t.state.draggingText(e),setTimeout(function(){return t.display.input.focus()},20);return}try{var A=e.dataTransfer.getData("Text");if(A){var P;if(t.state.draggingText&&!t.state.draggingText.copy&&(P=t.listSelections()),ki(t.doc,yr(n,n)),P)for(var J=0;J=0;u--)ln(e.doc,"",r[u].from,r[u].to,"+delete");tn(e)})}function Po(e,t,n){var r=se(e.text,t+n,n);return r<0||r>e.text.length?null:r}function jo(e,t,n){var r=Po(e,t.ch,n);return r==null?null:new ne(t.line,r,n<0?"after":"before")}function Ro(e,t,n,r,i){if(e){t.doc.direction=="rtl"&&(i=-i);var a=Pe(n,t.doc.direction);if(a){var l=i<0?ce(a):a[0],u=i<0==(l.level==1),f=u?"after":"before",m;if(l.level>0||t.doc.direction=="rtl"){var A=Qr(t,n);m=i<0?n.text.length-1:0;var P=tr(t,A,m).top;m=De(function(J){return tr(t,A,J).top==P},i<0==(l.level==1)?l.from:l.to-1,m),f=="before"&&(m=Po(n,m,1))}else m=i<0?l.to:l.from;return new ne(r,m,f)}}return new ne(r,i<0?n.text.length:0,i<0?"before":"after")}function Vf(e,t,n,r){var i=Pe(t,e.doc.direction);if(!i)return jo(t,n,r);n.ch>=t.text.length?(n.ch=t.text.length,n.sticky="before"):n.ch<=0&&(n.ch=0,n.sticky="after");var a=Pt(i,n.ch,n.sticky),l=i[a];if(e.doc.direction=="ltr"&&l.level%2==0&&(r>0?l.to>n.ch:l.from=l.from&&J>=A.begin)){var Y=P?"before":"after";return new ne(n.line,J,Y)}}var ie=function(ve,_e,be){for(var Ce=function(Ve,vt){return vt?new ne(n.line,u(Ve,1),"before"):new ne(n.line,Ve,"after")};ve>=0&&ve0==(Ne.level!=1),$e=Ie?be.begin:u(be.end,-1);if(Ne.from<=$e&&$e0?A.end:u(A.begin,-1);return me!=null&&!(r>0&&me==t.text.length)&&(ue=ie(r>0?0:i.length-1,r,m(me)),ue)?ue:null}var $n={selectAll:Ll,singleSelection:function(e){return e.setSelection(e.getCursor("anchor"),e.getCursor("head"),ke)},killLine:function(e){return cn(e,function(t){if(t.empty()){var n=Ae(e.doc,t.head.line).text.length;return t.head.ch==n&&t.head.line0)i=new ne(i.line,i.ch+1),e.replaceRange(a.charAt(i.ch-1)+a.charAt(i.ch-2),ne(i.line,i.ch-2),i,"+transpose");else if(i.line>e.doc.first){var l=Ae(e.doc,i.line-1).text;l&&(i=new ne(i.line,1),e.replaceRange(a.charAt(0)+e.doc.lineSeparator()+l.charAt(l.length-1),ne(i.line-1,l.length-1),i,"+transpose"))}}n.push(new Ye(i,i))}e.setSelections(n)})},newlineAndIndent:function(e){return Nt(e,function(){for(var t=e.listSelections(),n=t.length-1;n>=0;n--)e.replaceRange(e.doc.lineSeparator(),t[n].anchor,t[n].head,"+input");t=e.listSelections();for(var r=0;re&&ye(t,this.pos)==0&&n==this.button};var Gn,Zn;function od(e,t){var n=+new Date;return Zn&&Zn.compare(n,e,t)?(Gn=Zn=null,"triple"):Gn&&Gn.compare(n,e,t)?(Zn=new Bo(n,e,t),Gn=null,"double"):(Gn=new Bo(n,e,t),Zn=null,"single")}function Yl(e){var t=this,n=t.display;if(!(ot(t,e)||n.activeTouch&&n.input.supportsTouch())){if(n.input.ensurePolled(),n.shift=e.shiftKey,lr(n,e)){g||(n.scroller.draggable=!1,setTimeout(function(){return n.scroller.draggable=!0},100));return}if(!Wo(t,e)){var r=Mr(t,e),i=Ut(e),a=r?od(r,i):"single";pe(t).focus(),i==1&&t.state.selectingText&&t.state.selectingText(e),!(r&&ad(t,i,r,a,e))&&(i==1?r?sd(t,r,a,e):yn(e)==n.scroller&&kt(e):i==2?(r&&_i(t.doc,r),setTimeout(function(){return n.input.focus()},20)):i==3&&(F?t.display.input.onContextMenu(e):wo(t)))}}}function ad(e,t,n,r,i){var a="Click";return r=="double"?a="Double"+a:r=="triple"&&(a="Triple"+a),a=(t==1?"Left":t==2?"Middle":"Right")+a,Kn(e,Hl(a,i),i,function(l){if(typeof l=="string"&&(l=$n[l]),!l)return!1;var u=!1;try{e.isReadOnly()&&(e.state.suppressEdits=!0),u=l(e,n)!=Ze}finally{e.state.suppressEdits=!1}return u})}function ld(e,t,n){var r=e.getOption("configureMouse"),i=r?r(e,t,n):{};if(i.unit==null){var a=Z?n.shiftKey&&n.metaKey:n.altKey;i.unit=a?"rectangle":t=="single"?"char":t=="double"?"word":"line"}return(i.extend==null||e.doc.extend)&&(i.extend=e.doc.extend||n.shiftKey),i.addNew==null&&(i.addNew=H?n.metaKey:n.ctrlKey),i.moveOnDrag==null&&(i.moveOnDrag=!(H?n.altKey:n.ctrlKey)),i}function sd(e,t,n,r){s?setTimeout(Ee(Qa,e),0):e.curOp.focus=B(de(e));var i=ld(e,n,r),a=e.doc.sel,l;e.options.dragDrop&&eo&&!e.isReadOnly()&&n=="single"&&(l=a.contains(t))>-1&&(ye((l=a.ranges[l]).from(),t)<0||t.xRel>0)&&(ye(l.to(),t)>0||t.xRel<0)?ud(e,r,t,i):cd(e,r,t,i)}function ud(e,t,n,r){var i=e.display,a=!1,l=gt(e,function(m){g&&(i.scroller.draggable=!1),e.state.draggingText=!1,e.state.delayingBlurEvent&&(e.hasFocus()?e.state.delayingBlurEvent=!1:wo(e)),_t(i.wrapper.ownerDocument,"mouseup",l),_t(i.wrapper.ownerDocument,"mousemove",u),_t(i.scroller,"dragstart",f),_t(i.scroller,"drop",l),a||(kt(m),r.addNew||_i(e.doc,n,null,null,r.extend),g&&!w||s&&h==9?setTimeout(function(){i.wrapper.ownerDocument.body.focus({preventScroll:!0}),i.input.focus()},20):i.input.focus())}),u=function(m){a=a||Math.abs(t.clientX-m.clientX)+Math.abs(t.clientY-m.clientY)>=10},f=function(){return a=!0};g&&(i.scroller.draggable=!0),e.state.draggingText=l,l.copy=!r.moveOnDrag,Fe(i.wrapper.ownerDocument,"mouseup",l),Fe(i.wrapper.ownerDocument,"mousemove",u),Fe(i.scroller,"dragstart",f),Fe(i.scroller,"drop",l),e.state.delayingBlurEvent=!0,setTimeout(function(){return i.input.focus()},20),i.scroller.dragDrop&&i.scroller.dragDrop()}function Ql(e,t,n){if(n=="char")return new Ye(t,t);if(n=="word")return e.findWordAt(t);if(n=="line")return new Ye(ne(t.line,0),Re(e.doc,ne(t.line+1,0)));var r=n(e,t);return new Ye(r.from,r.to)}function cd(e,t,n,r){s&&wo(e);var i=e.display,a=e.doc;kt(t);var l,u,f=a.sel,m=f.ranges;if(r.addNew&&!r.extend?(u=a.sel.contains(n),u>-1?l=m[u]:l=new Ye(n,n)):(l=a.sel.primary(),u=a.sel.primIndex),r.unit=="rectangle")r.addNew||(l=new Ye(n,n)),n=Mr(e,t,!0,!0),u=-1;else{var A=Ql(e,n,r.unit);r.extend?l=No(l,A.anchor,A.head,r.extend):l=A}r.addNew?u==-1?(u=m.length,wt(a,Yt(e,m.concat([l]),u),{scroll:!1,origin:"*mouse"})):m.length>1&&m[u].empty()&&r.unit=="char"&&!r.extend?(wt(a,Yt(e,m.slice(0,u).concat(m.slice(u+1)),0),{scroll:!1,origin:"*mouse"}),f=a.sel):Oo(a,u,l,Je):(u=0,wt(a,new Rt([l],0),Je),f=a.sel);var P=n;function J(be){if(ye(P,be)!=0)if(P=be,r.unit=="rectangle"){for(var Ce=[],Ne=e.options.tabSize,Ie=Oe(Ae(a,n.line).text,n.ch,Ne),$e=Oe(Ae(a,be.line).text,be.ch,Ne),Ve=Math.min(Ie,$e),vt=Math.max(Ie,$e),rt=Math.min(n.line,be.line),Ot=Math.min(e.lastLine(),Math.max(n.line,be.line));rt<=Ot;rt++){var At=Ae(a,rt).text,ut=Ge(At,Ve,Ne);Ve==vt?Ce.push(new Ye(ne(rt,ut),ne(rt,ut))):At.length>ut&&Ce.push(new Ye(ne(rt,ut),ne(rt,Ge(At,vt,Ne))))}Ce.length||Ce.push(new Ye(n,n)),wt(a,Yt(e,f.ranges.slice(0,u).concat(Ce),u),{origin:"*mouse",scroll:!1}),e.scrollIntoView(be)}else{var Dt=l,yt=Ql(e,be,r.unit),ft=Dt.anchor,ct;ye(yt.anchor,ft)>0?(ct=yt.head,ft=Zr(Dt.from(),yt.anchor)):(ct=yt.anchor,ft=Et(Dt.to(),yt.head));var lt=f.ranges.slice(0);lt[u]=fd(e,new Ye(Re(a,ft),ct)),wt(a,Yt(e,lt,u),Je)}}var Y=i.wrapper.getBoundingClientRect(),ie=0;function ue(be){var Ce=++ie,Ne=Mr(e,be,!0,r.unit=="rectangle");if(Ne)if(ye(Ne,P)!=0){e.curOp.focus=B(de(e)),J(Ne);var Ie=gi(i,a);(Ne.line>=Ie.to||Ne.lineY.bottom?20:0;$e&&setTimeout(gt(e,function(){ie==Ce&&(i.scroller.scrollTop+=$e,ue(be))}),50)}}function me(be){e.state.selectingText=!1,ie=1/0,be&&(kt(be),i.input.focus()),_t(i.wrapper.ownerDocument,"mousemove",ve),_t(i.wrapper.ownerDocument,"mouseup",_e),a.history.lastSelOrigin=null}var ve=gt(e,function(be){be.buttons===0||!Ut(be)?me(be):ue(be)}),_e=gt(e,me);e.state.selectingText=_e,Fe(i.wrapper.ownerDocument,"mousemove",ve),Fe(i.wrapper.ownerDocument,"mouseup",_e)}function fd(e,t){var n=t.anchor,r=t.head,i=Ae(e.doc,n.line);if(ye(n,r)==0&&n.sticky==r.sticky)return t;var a=Pe(i);if(!a)return t;var l=Pt(a,n.ch,n.sticky),u=a[l];if(u.from!=n.ch&&u.to!=n.ch)return t;var f=l+(u.from==n.ch==(u.level!=1)?0:1);if(f==0||f==a.length)return t;var m;if(r.line!=n.line)m=(r.line-n.line)*(e.doc.direction=="ltr"?1:-1)>0;else{var A=Pt(a,r.ch,r.sticky),P=A-l||(r.ch-n.ch)*(u.level==1?-1:1);A==f-1||A==f?m=P<0:m=P>0}var J=a[f+(m?-1:0)],Y=m==(J.level==1),ie=Y?J.from:J.to,ue=Y?"after":"before";return n.ch==ie&&n.sticky==ue?t:new Ye(new ne(n.line,ie,ue),r)}function Vl(e,t,n,r){var i,a;if(t.touches)i=t.touches[0].clientX,a=t.touches[0].clientY;else try{i=t.clientX,a=t.clientY}catch{return!1}if(i>=Math.floor(e.display.gutters.getBoundingClientRect().right))return!1;r&&kt(t);var l=e.display,u=l.lineDiv.getBoundingClientRect();if(a>u.bottom||!Ft(e,n))return Ct(t);a-=u.top-l.viewOffset;for(var f=0;f=i){var A=O(e.doc,a),P=e.display.gutterSpecs[f];return it(e,n,e,A,P.className,t),Ct(t)}}}function Wo(e,t){return Vl(e,t,"gutterClick",!0)}function Jl(e,t){lr(e.display,t)||dd(e,t)||ot(e,t,"contextmenu")||F||e.display.input.onContextMenu(t)}function dd(e,t){return Ft(e,"gutterContextMenu")?Vl(e,t,"gutterContextMenu",!1):!1}function es(e){e.display.wrapper.className=e.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+e.options.theme.replace(/(^|\s)\s*/g," cm-s-"),En(e)}var fn={toString:function(){return"CodeMirror.Init"}},ts={},Ei={};function pd(e){var t=e.optionHandlers;function n(r,i,a,l){e.defaults[r]=i,a&&(t[r]=l?function(u,f,m){m!=fn&&a(u,f,m)}:a)}e.defineOption=n,e.Init=fn,n("value","",function(r,i){return r.setValue(i)},!0),n("mode",null,function(r,i){r.doc.modeOption=i,qo(r)},!0),n("indentUnit",2,qo,!0),n("indentWithTabs",!1),n("smartIndent",!0),n("tabSize",4,function(r){Nn(r),En(r),zt(r)},!0),n("lineSeparator",null,function(r,i){if(r.doc.lineSep=i,!!i){var a=[],l=r.doc.first;r.doc.iter(function(f){for(var m=0;;){var A=f.text.indexOf(i,m);if(A==-1)break;m=A+i.length,a.push(ne(l,A))}l++});for(var u=a.length-1;u>=0;u--)ln(r.doc,i,a[u],ne(a[u].line,a[u].ch+i.length))}}),n("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b\u200e\u200f\u2028\u2029\u202d\u202e\u2066\u2067\u2069\ufeff\ufff9-\ufffc]/g,function(r,i,a){r.state.specialChars=new RegExp(i.source+(i.test(" ")?"":"| "),"g"),a!=fn&&r.refresh()}),n("specialCharPlaceholder",Hc,function(r){return r.refresh()},!0),n("electricChars",!0),n("inputStyle",M?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},!0),n("spellcheck",!1,function(r,i){return r.getInputField().spellcheck=i},!0),n("autocorrect",!1,function(r,i){return r.getInputField().autocorrect=i},!0),n("autocapitalize",!1,function(r,i){return r.getInputField().autocapitalize=i},!0),n("rtlMoveVisually",!ee),n("wholeLineUpdateBefore",!0),n("theme","default",function(r){es(r),Fn(r)},!0),n("keyMap","default",function(r,i,a){var l=Li(i),u=a!=fn&&Li(a);u&&u.detach&&u.detach(r,l),l.attach&&l.attach(r,u||null)}),n("extraKeys",null),n("configureMouse",null),n("lineWrapping",!1,gd,!0),n("gutters",[],function(r,i){r.display.gutterSpecs=Ao(i,r.options.lineNumbers),Fn(r)},!0),n("fixedGutter",!0,function(r,i){r.display.gutters.style.left=i?yo(r.display)+"px":"0",r.refresh()},!0),n("coverGutterNextToScrollbar",!1,function(r){return rn(r)},!0),n("scrollbarStyle","native",function(r){nl(r),rn(r),r.display.scrollbars.setScrollTop(r.doc.scrollTop),r.display.scrollbars.setScrollLeft(r.doc.scrollLeft)},!0),n("lineNumbers",!1,function(r,i){r.display.gutterSpecs=Ao(r.options.gutters,i),Fn(r)},!0),n("firstLineNumber",1,Fn,!0),n("lineNumberFormatter",function(r){return r},Fn,!0),n("showCursorWhenSelecting",!1,zn,!0),n("resetSelectionOnContextMenu",!0),n("lineWiseCopyCut",!0),n("pasteLinesPerSelection",!0),n("selectionsMayTouch",!1),n("readOnly",!1,function(r,i){i=="nocursor"&&(en(r),r.display.input.blur()),r.display.input.readOnlyChanged(i)}),n("screenReaderLabel",null,function(r,i){i=i===""?null:i,r.display.input.screenReaderLabelChanged(i)}),n("disableInput",!1,function(r,i){i||r.display.input.reset()},!0),n("dragDrop",!0,hd),n("allowDropFileTypes",null),n("cursorBlinkRate",530),n("cursorScrollMargin",0),n("cursorHeight",1,zn,!0),n("singleCursorHeightPerLine",!0,zn,!0),n("workTime",100),n("workDelay",100),n("flattenSpans",!0,Nn,!0),n("addModeClass",!1,Nn,!0),n("pollInterval",100),n("undoDepth",200,function(r,i){return r.doc.history.undoDepth=i}),n("historyEventDelay",1250),n("viewportMargin",10,function(r){return r.refresh()},!0),n("maxHighlightLength",1e4,Nn,!0),n("moveInputWithCursor",!0,function(r,i){i||r.display.input.resetPosition()}),n("tabindex",null,function(r,i){return r.display.input.getField().tabIndex=i||""}),n("autofocus",null),n("direction","ltr",function(r,i){return r.doc.setDirection(i)},!0),n("phrases",null)}function hd(e,t,n){var r=n&&n!=fn;if(!t!=!r){var i=e.display.dragFunctions,a=t?Fe:_t;a(e.display.scroller,"dragstart",i.start),a(e.display.scroller,"dragenter",i.enter),a(e.display.scroller,"dragover",i.over),a(e.display.scroller,"dragleave",i.leave),a(e.display.scroller,"drop",i.drop)}}function gd(e){e.options.lineWrapping?(le(e.display.wrapper,"CodeMirror-wrap"),e.display.sizer.style.minWidth="",e.display.sizerWidth=null):(Q(e.display.wrapper,"CodeMirror-wrap"),so(e)),xo(e),zt(e),En(e),setTimeout(function(){return rn(e)},100)}function tt(e,t){var n=this;if(!(this instanceof tt))return new tt(e,t);this.options=t=t?ge(t):{},ge(ts,t,!1);var r=t.value;typeof r=="string"?r=new Mt(r,t.mode,null,t.lineSeparator,t.direction):t.mode&&(r.modeOption=t.mode),this.doc=r;var i=new tt.inputStyles[t.inputStyle](this),a=this.display=new Ef(e,r,i,t);a.wrapper.CodeMirror=this,es(this),t.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),nl(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:-1,cutIncoming:-1,selectingText:!1,draggingText:!1,highlight:new qe,keySeq:null,specialChars:null},t.autofocus&&!M&&a.input.focus(),s&&h<11&&setTimeout(function(){return n.display.input.reset(!0)},20),md(this),Gf(),Ir(this),this.curOp.forceUpdate=!0,pl(this,r),t.autofocus&&!M||this.hasFocus()?setTimeout(function(){n.hasFocus()&&!n.state.focused&&So(n)},20):en(this);for(var l in Ei)Ei.hasOwnProperty(l)&&Ei[l](this,t[l],fn);al(this),t.finishInit&&t.finishInit(this);for(var u=0;u20*20}Fe(t.scroller,"touchstart",function(f){if(!ot(e,f)&&!a(f)&&!Wo(e,f)){t.input.ensurePolled(),clearTimeout(n);var m=+new Date;t.activeTouch={start:m,moved:!1,prev:m-r.end<=300?r:null},f.touches.length==1&&(t.activeTouch.left=f.touches[0].pageX,t.activeTouch.top=f.touches[0].pageY)}}),Fe(t.scroller,"touchmove",function(){t.activeTouch&&(t.activeTouch.moved=!0)}),Fe(t.scroller,"touchend",function(f){var m=t.activeTouch;if(m&&!lr(t,f)&&m.left!=null&&!m.moved&&new Date-m.start<300){var A=e.coordsChar(t.activeTouch,"page"),P;!m.prev||l(m,m.prev)?P=new Ye(A,A):!m.prev.prev||l(m,m.prev.prev)?P=e.findWordAt(A):P=new Ye(ne(A.line,0),Re(e.doc,ne(A.line+1,0))),e.setSelection(P.anchor,P.head),e.focus(),kt(f)}i()}),Fe(t.scroller,"touchcancel",i),Fe(t.scroller,"scroll",function(){t.scroller.clientHeight&&(An(e,t.scroller.scrollTop),Dr(e,t.scroller.scrollLeft,!0),it(e,"scroll",e))}),Fe(t.scroller,"mousewheel",function(f){return ul(e,f)}),Fe(t.scroller,"DOMMouseScroll",function(f){return ul(e,f)}),Fe(t.wrapper,"scroll",function(){return t.wrapper.scrollTop=t.wrapper.scrollLeft=0}),t.dragFunctions={enter:function(f){ot(e,f)||dr(f)},over:function(f){ot(e,f)||(Kf(e,f),dr(f))},start:function(f){return $f(e,f)},drop:gt(e,Uf),leave:function(f){ot(e,f)||Ol(e)}};var u=t.input.getField();Fe(u,"keyup",function(f){return Zl.call(e,f)}),Fe(u,"keydown",gt(e,Gl)),Fe(u,"keypress",gt(e,Xl)),Fe(u,"focus",function(f){return So(e,f)}),Fe(u,"blur",function(f){return en(e,f)})}var Uo=[];tt.defineInitHook=function(e){return Uo.push(e)};function Xn(e,t,n,r){var i=e.doc,a;n==null&&(n="add"),n=="smart"&&(i.mode.indent?a=wn(e,t).state:n="prev");var l=e.options.tabSize,u=Ae(i,t),f=Oe(u.text,null,l);u.stateAfter&&(u.stateAfter=null);var m=u.text.match(/^\s*/)[0],A;if(!r&&!/\S/.test(u.text))A=0,n="not";else if(n=="smart"&&(A=i.mode.indent(a,u.text.slice(m.length),u.text),A==Ze||A>150)){if(!r)return;n="prev"}n=="prev"?t>i.first?A=Oe(Ae(i,t-1).text,null,l):A=0:n=="add"?A=f+e.options.indentUnit:n=="subtract"?A=f-e.options.indentUnit:typeof n=="number"&&(A=f+n),A=Math.max(0,A);var P="",J=0;if(e.options.indentWithTabs)for(var Y=Math.floor(A/l);Y;--Y)J+=l,P+=" ";if(Jl,f=Bt(t),m=null;if(u&&r.ranges.length>1)if(Qt&&Qt.text.join(` +`)==t){if(r.ranges.length%Qt.text.length==0){m=[];for(var A=0;A=0;J--){var Y=r.ranges[J],ie=Y.from(),ue=Y.to();Y.empty()&&(n&&n>0?ie=ne(ie.line,ie.ch-n):e.state.overwrite&&!u?ue=ne(ue.line,Math.min(Ae(a,ue.line).text.length,ue.ch+ce(f).length)):u&&Qt&&Qt.lineWise&&Qt.text.join(` +`)==f.join(` +`)&&(ie=ue=ne(ie.line,0)));var me={from:ie,to:ue,text:m?m[J%m.length]:f,origin:i||(u?"paste":e.state.cutIncoming>l?"cut":"+input")};an(e.doc,me),ht(e,"inputRead",e,me)}t&&!u&&ns(e,t),tn(e),e.curOp.updateInput<2&&(e.curOp.updateInput=P),e.curOp.typing=!0,e.state.pasteIncoming=e.state.cutIncoming=-1}function rs(e,t){var n=e.clipboardData&&e.clipboardData.getData("Text");if(n)return e.preventDefault(),!t.isReadOnly()&&!t.options.disableInput&&t.hasFocus()&&Nt(t,function(){return $o(t,n,0,null,"paste")}),!0}function ns(e,t){if(!(!e.options.electricChars||!e.options.smartIndent))for(var n=e.doc.sel,r=n.ranges.length-1;r>=0;r--){var i=n.ranges[r];if(!(i.head.ch>100||r&&n.ranges[r-1].head.line==i.head.line)){var a=e.getModeAt(i.head),l=!1;if(a.electricChars){for(var u=0;u-1){l=Xn(e,i.head.line,"smart");break}}else a.electricInput&&a.electricInput.test(Ae(e.doc,i.head.line).text.slice(0,i.head.ch))&&(l=Xn(e,i.head.line,"smart"));l&&ht(e,"electricInput",e,i.head.line)}}}function is(e){for(var t=[],n=[],r=0;ra&&(Xn(this,u.head.line,r,!0),a=u.head.line,l==this.doc.sel.primIndex&&tn(this));else{var f=u.from(),m=u.to(),A=Math.max(a,f.line);a=Math.min(this.lastLine(),m.line-(m.ch?0:1))+1;for(var P=A;P0&&Oo(this.doc,l,new Ye(f,J[l].to()),ke)}}}),getTokenAt:function(r,i){return ga(this,r,i)},getLineTokens:function(r,i){return ga(this,ne(r),i,!0)},getTokenTypeAt:function(r){r=Re(this.doc,r);var i=da(this,Ae(this.doc,r.line)),a=0,l=(i.length-1)/2,u=r.ch,f;if(u==0)f=i[2];else for(;;){var m=a+l>>1;if((m?i[m*2-1]:0)>=u)l=m;else if(i[m*2+1]f&&(r=f,l=!0),u=Ae(this.doc,r)}else u=r;return ci(this,u,{top:0,left:0},i||"page",a||l).top+(l?this.doc.height-ar(u):0)},defaultTextHeight:function(){return Vr(this.display)},defaultCharWidth:function(){return Jr(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(r,i,a,l,u){var f=this.display;r=Xt(this,Re(this.doc,r));var m=r.bottom,A=r.left;if(i.style.position="absolute",i.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(i),f.sizer.appendChild(i),l=="over")m=r.top;else if(l=="above"||l=="near"){var P=Math.max(f.wrapper.clientHeight,this.doc.height),J=Math.max(f.sizer.clientWidth,f.lineSpace.clientWidth);(l=="above"||r.bottom+i.offsetHeight>P)&&r.top>i.offsetHeight?m=r.top-i.offsetHeight:r.bottom+i.offsetHeight<=P&&(m=r.bottom),A+i.offsetWidth>J&&(A=J-i.offsetWidth)}i.style.top=m+"px",i.style.left=i.style.right="",u=="right"?(A=f.sizer.clientWidth-i.offsetWidth,i.style.right="0px"):(u=="left"?A=0:u=="middle"&&(A=(f.sizer.clientWidth-i.offsetWidth)/2),i.style.left=A+"px"),a&&hf(this,{left:A,top:m,right:A+i.offsetWidth,bottom:m+i.offsetHeight})},triggerOnKeyDown:Tt(Gl),triggerOnKeyPress:Tt(Xl),triggerOnKeyUp:Zl,triggerOnMouseDown:Tt(Yl),execCommand:function(r){if($n.hasOwnProperty(r))return $n[r].call(null,this)},triggerElectric:Tt(function(r){ns(this,r)}),findPosH:function(r,i,a,l){var u=1;i<0&&(u=-1,i=-i);for(var f=Re(this.doc,r),m=0;m0&&A(a.charAt(l-1));)--l;for(;u.5||this.options.lineWrapping)&&xo(this),it(this,"refresh",this)}),swapDoc:Tt(function(r){var i=this.doc;return i.cm=null,this.state.selectingText&&this.state.selectingText(),pl(this,r),En(this),this.display.input.reset(),Mn(this,r.scrollLeft,r.scrollTop),this.curOp.forceScroll=!0,ht(this,"swapDoc",this,i),i}),phrase:function(r){var i=this.options.phrases;return i&&Object.prototype.hasOwnProperty.call(i,r)?i[r]:r},getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},Wt(e),e.registerHelper=function(r,i,a){n.hasOwnProperty(r)||(n[r]=e[r]={_global:[]}),n[r][i]=a},e.registerGlobalHelper=function(r,i,a,l){e.registerHelper(r,i,l),n[r]._global.push({pred:a,val:l})}}function Go(e,t,n,r,i){var a=t,l=n,u=Ae(e,t.line),f=i&&e.direction=="rtl"?-n:n;function m(){var _e=t.line+f;return _e=e.first+e.size?!1:(t=new ne(_e,t.ch,t.sticky),u=Ae(e,_e))}function A(_e){var be;if(r=="codepoint"){var Ce=u.text.charCodeAt(t.ch+(n>0?0:-1));if(isNaN(Ce))be=null;else{var Ne=n>0?Ce>=55296&&Ce<56320:Ce>=56320&&Ce<57343;be=new ne(t.line,Math.max(0,Math.min(u.text.length,t.ch+n*(Ne?2:1))),-n)}}else i?be=Vf(e.cm,u,t,n):be=jo(u,t,n);if(be==null)if(!_e&&m())t=Ro(i,e.cm,u,t.line,f);else return!1;else t=be;return!0}if(r=="char"||r=="codepoint")A();else if(r=="column")A(!0);else if(r=="word"||r=="group")for(var P=null,J=r=="group",Y=e.cm&&e.cm.getHelper(t,"wordChars"),ie=!0;!(n<0&&!A(!ie));ie=!1){var ue=u.text.charAt(t.ch)||` +`,me=Me(ue,Y)?"w":J&&ue==` +`?"n":!J||/\s/.test(ue)?null:"p";if(J&&!ie&&!me&&(me="s"),P&&P!=me){n<0&&(n=1,A(),t.sticky="after");break}if(me&&(P=me),n>0&&!A(!ie))break}var ve=wi(e,t,a,l,!0);return Xe(a,ve)&&(ve.hitSide=!0),ve}function as(e,t,n,r){var i=e.doc,a=t.left,l;if(r=="page"){var u=Math.min(e.display.wrapper.clientHeight,pe(e).innerHeight||i(e).documentElement.clientHeight),f=Math.max(u-.5*Vr(e.display),3);l=(n>0?t.bottom:t.top)+n*f}else r=="line"&&(l=n>0?t.bottom+3:t.top-3);for(var m;m=mo(e,a,l),!!m.outside;){if(n<0?l<=0:l>=i.height){m.hitSide=!0;break}l+=n*5}return m}var Qe=function(e){this.cm=e,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new qe,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};Qe.prototype.init=function(e){var t=this,n=this,r=n.cm,i=n.div=e.lineDiv;i.contentEditable=!0,Ko(i,r.options.spellcheck,r.options.autocorrect,r.options.autocapitalize);function a(u){for(var f=u.target;f;f=f.parentNode){if(f==i)return!0;if(/\bCodeMirror-(?:line)?widget\b/.test(f.className))break}return!1}Fe(i,"paste",function(u){!a(u)||ot(r,u)||rs(u,r)||h<=11&&setTimeout(gt(r,function(){return t.updateFromDOM()}),20)}),Fe(i,"compositionstart",function(u){t.composing={data:u.data,done:!1}}),Fe(i,"compositionupdate",function(u){t.composing||(t.composing={data:u.data,done:!1})}),Fe(i,"compositionend",function(u){t.composing&&(u.data!=t.composing.data&&t.readFromDOMSoon(),t.composing.done=!0)}),Fe(i,"touchstart",function(){return n.forceCompositionEnd()}),Fe(i,"input",function(){t.composing||t.readFromDOMSoon()});function l(u){if(!(!a(u)||ot(r,u))){if(r.somethingSelected())zi({lineWise:!1,text:r.getSelections()}),u.type=="cut"&&r.replaceSelection("",null,"cut");else if(r.options.lineWiseCopyCut){var f=is(r);zi({lineWise:!0,text:f.text}),u.type=="cut"&&r.operation(function(){r.setSelections(f.ranges,0,ke),r.replaceSelection("",null,"cut")})}else return;if(u.clipboardData){u.clipboardData.clearData();var m=Qt.text.join(` +`);if(u.clipboardData.setData("Text",m),u.clipboardData.getData("Text")==m){u.preventDefault();return}}var A=os(),P=A.firstChild;Ko(P),r.display.lineSpace.insertBefore(A,r.display.lineSpace.firstChild),P.value=Qt.text.join(` +`);var J=B(ze(i));q(P),setTimeout(function(){r.display.lineSpace.removeChild(A),J.focus(),J==i&&n.showPrimarySelection()},50)}}Fe(i,"copy",l),Fe(i,"cut",l)},Qe.prototype.screenReaderLabelChanged=function(e){e?this.div.setAttribute("aria-label",e):this.div.removeAttribute("aria-label")},Qe.prototype.prepareSelection=function(){var e=Ya(this.cm,!1);return e.focus=B(ze(this.div))==this.div,e},Qe.prototype.showSelection=function(e,t){!e||!this.cm.display.view.length||((e.focus||t)&&this.showPrimarySelection(),this.showMultipleSelections(e))},Qe.prototype.getSelection=function(){return this.cm.display.wrapper.ownerDocument.getSelection()},Qe.prototype.showPrimarySelection=function(){var e=this.getSelection(),t=this.cm,n=t.doc.sel.primary(),r=n.from(),i=n.to();if(t.display.viewTo==t.display.viewFrom||r.line>=t.display.viewTo||i.line=t.display.viewFrom&&ls(t,r)||{node:u[0].measure.map[2],offset:0},m=i.linee.firstLine()&&(r=ne(r.line-1,Ae(e.doc,r.line-1).length)),i.ch==Ae(e.doc,i.line).text.length&&i.linet.viewTo-1)return!1;var a,l,u;r.line==t.viewFrom||(a=Ar(e,r.line))==0?(l=k(t.view[0].line),u=t.view[0].node):(l=k(t.view[a].line),u=t.view[a-1].node.nextSibling);var f=Ar(e,i.line),m,A;if(f==t.view.length-1?(m=t.viewTo-1,A=t.lineDiv.lastChild):(m=k(t.view[f+1].line)-1,A=t.view[f+1].node.previousSibling),!u)return!1;for(var P=e.doc.splitLines(yd(e,u,A,l,m)),J=ir(e.doc,ne(l,0),ne(m,Ae(e.doc,m).text.length));P.length>1&&J.length>1;)if(ce(P)==ce(J))P.pop(),J.pop(),m--;else if(P[0]==J[0])P.shift(),J.shift(),l++;else break;for(var Y=0,ie=0,ue=P[0],me=J[0],ve=Math.min(ue.length,me.length);Yr.ch&&_e.charCodeAt(_e.length-ie-1)==be.charCodeAt(be.length-ie-1);)Y--,ie++;P[P.length-1]=_e.slice(0,_e.length-ie).replace(/^\u200b+/,""),P[0]=P[0].slice(Y).replace(/\u200b+$/,"");var Ne=ne(l,Y),Ie=ne(m,J.length?ce(J).length-ie:0);if(P.length>1||P[0]||ye(Ne,Ie))return ln(e.doc,P,Ne,Ie,"+input"),!0},Qe.prototype.ensurePolled=function(){this.forceCompositionEnd()},Qe.prototype.reset=function(){this.forceCompositionEnd()},Qe.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},Qe.prototype.readFromDOMSoon=function(){var e=this;this.readDOMTimeout==null&&(this.readDOMTimeout=setTimeout(function(){if(e.readDOMTimeout=null,e.composing)if(e.composing.done)e.composing=null;else return;e.updateFromDOM()},80))},Qe.prototype.updateFromDOM=function(){var e=this;(this.cm.isReadOnly()||!this.pollContent())&&Nt(this.cm,function(){return zt(e.cm)})},Qe.prototype.setUneditable=function(e){e.contentEditable="false"},Qe.prototype.onKeyPress=function(e){e.charCode==0||this.composing||(e.preventDefault(),this.cm.isReadOnly()||gt(this.cm,$o)(this.cm,String.fromCharCode(e.charCode==null?e.keyCode:e.charCode),0))},Qe.prototype.readOnlyChanged=function(e){this.div.contentEditable=String(e!="nocursor")},Qe.prototype.onContextMenu=function(){},Qe.prototype.resetPosition=function(){},Qe.prototype.needsContentAttribute=!0;function ls(e,t){var n=po(e,t.line);if(!n||n.hidden)return null;var r=Ae(e.doc,t.line),i=Na(n,r,t.line),a=Pe(r,e.doc.direction),l="left";if(a){var u=Pt(a,t.ch);l=u%2?"right":"left"}var f=ja(i.map,t.ch,l);return f.offset=f.collapse=="right"?f.end:f.start,f}function bd(e){for(var t=e;t;t=t.parentNode)if(/CodeMirror-gutter-wrapper/.test(t.className))return!0;return!1}function dn(e,t){return t&&(e.bad=!0),e}function yd(e,t,n,r,i){var a="",l=!1,u=e.doc.lineSeparator(),f=!1;function m(Y){return function(ie){return ie.id==Y}}function A(){l&&(a+=u,f&&(a+=u),l=f=!1)}function P(Y){Y&&(A(),a+=Y)}function J(Y){if(Y.nodeType==1){var ie=Y.getAttribute("cm-text");if(ie){P(ie);return}var ue=Y.getAttribute("cm-marker"),me;if(ue){var ve=e.findMarks(ne(r,0),ne(i+1,0),m(+ue));ve.length&&(me=ve[0].find(0))&&P(ir(e.doc,me.from,me.to).join(u));return}if(Y.getAttribute("contenteditable")=="false")return;var _e=/^(pre|div|p|li|table|br)$/i.test(Y.nodeName);if(!/^br$/i.test(Y.nodeName)&&Y.textContent.length==0)return;_e&&A();for(var be=0;be=9&&t.hasSelection&&(t.hasSelection=null),n.poll()}),Fe(i,"paste",function(l){ot(r,l)||rs(l,r)||(r.state.pasteIncoming=+new Date,n.fastPoll())});function a(l){if(!ot(r,l)){if(r.somethingSelected())zi({lineWise:!1,text:r.getSelections()});else if(r.options.lineWiseCopyCut){var u=is(r);zi({lineWise:!0,text:u.text}),l.type=="cut"?r.setSelections(u.ranges,null,ke):(n.prevInput="",i.value=u.text.join(` +`),q(i))}else return;l.type=="cut"&&(r.state.cutIncoming=+new Date)}}Fe(i,"cut",a),Fe(i,"copy",a),Fe(e.scroller,"paste",function(l){if(!(lr(e,l)||ot(r,l))){if(!i.dispatchEvent){r.state.pasteIncoming=+new Date,n.focus();return}var u=new Event("paste");u.clipboardData=l.clipboardData,i.dispatchEvent(u)}}),Fe(e.lineSpace,"selectstart",function(l){lr(e,l)||kt(l)}),Fe(i,"compositionstart",function(){var l=r.getCursor("from");n.composing&&n.composing.range.clear(),n.composing={start:l,range:r.markText(l,r.getCursor("to"),{className:"CodeMirror-composing"})}}),Fe(i,"compositionend",function(){n.composing&&(n.poll(),n.composing.range.clear(),n.composing=null)})},st.prototype.createField=function(e){this.wrapper=os(),this.textarea=this.wrapper.firstChild;var t=this.cm.options;Ko(this.textarea,t.spellcheck,t.autocorrect,t.autocapitalize)},st.prototype.screenReaderLabelChanged=function(e){e?this.textarea.setAttribute("aria-label",e):this.textarea.removeAttribute("aria-label")},st.prototype.prepareSelection=function(){var e=this.cm,t=e.display,n=e.doc,r=Ya(e);if(e.options.moveInputWithCursor){var i=Xt(e,n.sel.primary().head,"div"),a=t.wrapper.getBoundingClientRect(),l=t.lineDiv.getBoundingClientRect();r.teTop=Math.max(0,Math.min(t.wrapper.clientHeight-10,i.top+l.top-a.top)),r.teLeft=Math.max(0,Math.min(t.wrapper.clientWidth-10,i.left+l.left-a.left))}return r},st.prototype.showSelection=function(e){var t=this.cm,n=t.display;V(n.cursorDiv,e.cursors),V(n.selectionDiv,e.selection),e.teTop!=null&&(this.wrapper.style.top=e.teTop+"px",this.wrapper.style.left=e.teLeft+"px")},st.prototype.reset=function(e){if(!(this.contextMenuPending||this.composing&&e)){var t=this.cm;if(this.resetting=!0,t.somethingSelected()){this.prevInput="";var n=t.getSelection();this.textarea.value=n,t.state.focused&&q(this.textarea),s&&h>=9&&(this.hasSelection=n)}else e||(this.prevInput=this.textarea.value="",s&&h>=9&&(this.hasSelection=null));this.resetting=!1}},st.prototype.getField=function(){return this.textarea},st.prototype.supportsTouch=function(){return!1},st.prototype.focus=function(){if(this.cm.options.readOnly!="nocursor"&&(!M||B(ze(this.textarea))!=this.textarea))try{this.textarea.focus()}catch{}},st.prototype.blur=function(){this.textarea.blur()},st.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},st.prototype.receivedFocus=function(){this.slowPoll()},st.prototype.slowPoll=function(){var e=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){e.poll(),e.cm.state.focused&&e.slowPoll()})},st.prototype.fastPoll=function(){var e=!1,t=this;t.pollingFast=!0;function n(){var r=t.poll();!r&&!e?(e=!0,t.polling.set(60,n)):(t.pollingFast=!1,t.slowPoll())}t.polling.set(20,n)},st.prototype.poll=function(){var e=this,t=this.cm,n=this.textarea,r=this.prevInput;if(this.contextMenuPending||this.resetting||!t.state.focused||hr(n)&&!r&&!this.composing||t.isReadOnly()||t.options.disableInput||t.state.keySeq)return!1;var i=n.value;if(i==r&&!t.somethingSelected())return!1;if(s&&h>=9&&this.hasSelection===i||H&&/[\uf700-\uf7ff]/.test(i))return t.display.input.reset(),!1;if(t.doc.sel==t.display.selForContextMenu){var a=i.charCodeAt(0);if(a==8203&&!r&&(r="\u200B"),a==8666)return this.reset(),this.cm.execCommand("undo")}for(var l=0,u=Math.min(r.length,i.length);l1e3||i.indexOf(` +`)>-1?n.value=e.prevInput="":e.prevInput=i,e.composing&&(e.composing.range.clear(),e.composing.range=t.markText(e.composing.start,t.getCursor("to"),{className:"CodeMirror-composing"}))}),!0},st.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},st.prototype.onKeyPress=function(){s&&h>=9&&(this.hasSelection=null),this.fastPoll()},st.prototype.onContextMenu=function(e){var t=this,n=t.cm,r=n.display,i=t.textarea;t.contextMenuPending&&t.contextMenuPending();var a=Mr(n,e),l=r.scroller.scrollTop;if(!a||d)return;var u=n.options.resetSelectionOnContextMenu;u&&n.doc.sel.contains(a)==-1&>(n,wt)(n.doc,yr(a),ke);var f=i.style.cssText,m=t.wrapper.style.cssText,A=t.wrapper.offsetParent.getBoundingClientRect();t.wrapper.style.cssText="position: static",i.style.cssText=`position: absolute; width: 30px; height: 30px; + top: `+(e.clientY-A.top-5)+"px; left: "+(e.clientX-A.left-5)+`px; + z-index: 1000; background: `+(s?"rgba(255, 255, 255, .05)":"transparent")+`; + outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);`;var P;g&&(P=i.ownerDocument.defaultView.scrollY),r.input.focus(),g&&i.ownerDocument.defaultView.scrollTo(null,P),r.input.reset(),n.somethingSelected()||(i.value=t.prevInput=" "),t.contextMenuPending=Y,r.selForContextMenu=n.doc.sel,clearTimeout(r.detectingSelectAll);function J(){if(i.selectionStart!=null){var ue=n.somethingSelected(),me="\u200B"+(ue?i.value:"");i.value="\u21DA",i.value=me,t.prevInput=ue?"":"\u200B",i.selectionStart=1,i.selectionEnd=me.length,r.selForContextMenu=n.doc.sel}}function Y(){if(t.contextMenuPending==Y&&(t.contextMenuPending=!1,t.wrapper.style.cssText=m,i.style.cssText=f,s&&h<9&&r.scrollbars.setScrollTop(r.scroller.scrollTop=l),i.selectionStart!=null)){(!s||s&&h<9)&&J();var ue=0,me=function(){r.selForContextMenu==n.doc.sel&&i.selectionStart==0&&i.selectionEnd>0&&t.prevInput=="\u200B"?gt(n,Ll)(n):ue++<10?r.detectingSelectAll=setTimeout(me,500):(r.selForContextMenu=null,r.input.reset())};r.detectingSelectAll=setTimeout(me,200)}}if(s&&h>=9&&J(),F){dr(e);var ie=function(){_t(window,"mouseup",ie),setTimeout(Y,20)};Fe(window,"mouseup",ie)}else setTimeout(Y,50)},st.prototype.readOnlyChanged=function(e){e||this.reset(),this.textarea.disabled=e=="nocursor",this.textarea.readOnly=!!e},st.prototype.setUneditable=function(){},st.prototype.needsContentAttribute=!1;function _d(e,t){if(t=t?ge(t):{},t.value=e.value,!t.tabindex&&e.tabIndex&&(t.tabindex=e.tabIndex),!t.placeholder&&e.placeholder&&(t.placeholder=e.placeholder),t.autofocus==null){var n=B(ze(e));t.autofocus=n==e||e.getAttribute("autofocus")!=null&&n==document.body}function r(){e.value=u.getValue()}var i;if(e.form&&(Fe(e.form,"submit",r),!t.leaveSubmitMethodAlone)){var a=e.form;i=a.submit;try{var l=a.submit=function(){r(),a.submit=i,a.submit(),a.submit=l}}catch{}}t.finishInit=function(f){f.save=r,f.getTextArea=function(){return e},f.toTextArea=function(){f.toTextArea=isNaN,r(),e.parentNode.removeChild(f.getWrapperElement()),e.style.display="",e.form&&(_t(e.form,"submit",r),!t.leaveSubmitMethodAlone&&typeof e.form.submit=="function"&&(e.form.submit=i))}},e.style.display="none";var u=tt(function(f){return e.parentNode.insertBefore(f,e.nextSibling)},t);return u}function kd(e){e.off=_t,e.on=Fe,e.wheelEventPixels=zf,e.Doc=Mt,e.splitLines=Bt,e.countColumn=Oe,e.findColumn=Ge,e.isWordChar=we,e.Pass=Ze,e.signal=it,e.Line=Xr,e.changeEnd=xr,e.scrollbarModel=rl,e.Pos=ne,e.cmpPos=ye,e.modes=Wr,e.mimeModes=Kt,e.resolveMode=Ur,e.getMode=$r,e.modeExtensions=gr,e.extendMode=Kr,e.copyState=Vt,e.startState=Gr,e.innerMode=_n,e.commands=$n,e.keyMap=ur,e.keyName=Bl,e.isModifierKey=Rl,e.lookupKey=un,e.normalizeKeyMap=Qf,e.StringStream=at,e.SharedTextMarker=Bn,e.TextMarker=kr,e.LineWidget=Hn,e.e_preventDefault=kt,e.e_stopPropagation=Hr,e.e_stop=dr,e.addClass=le,e.contains=I,e.rmClass=Q,e.keyNames=wr}pd(tt),vd(tt);var wd="iter insert remove copy getEditor constructor".split(" ");for(var Ai in Mt.prototype)Mt.prototype.hasOwnProperty(Ai)&&Se(wd,Ai)<0&&(tt.prototype[Ai]=function(e){return function(){return e.apply(this.doc,arguments)}}(Mt.prototype[Ai]));return Wt(Mt),tt.inputStyles={textarea:st,contenteditable:Qe},tt.defineMode=function(e){!tt.defaults.mode&&e!="null"&&(tt.defaults.mode=e),Gt.apply(this,arguments)},tt.defineMIME=Cr,tt.defineMode("null",function(){return{token:function(e){return e.skipToEnd()}}}),tt.defineMIME("text/plain","null"),tt.defineExtension=function(e,t){tt.prototype[e]=t},tt.defineDocExtension=function(e,t){Mt.prototype[e]=t},tt.fromTextArea=_d,kd(tt),tt.version="5.65.16",tt})});var Yn=Ke((us,cs)=>{(function(o){typeof us=="object"&&typeof cs=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";o.overlayMode=function(p,v,C){return{startState:function(){return{base:o.startState(p),overlay:o.startState(v),basePos:0,baseCur:null,overlayPos:0,overlayCur:null,streamSeen:null}},copyState:function(b){return{base:o.copyState(p,b.base),overlay:o.copyState(v,b.overlay),basePos:b.basePos,baseCur:null,overlayPos:b.overlayPos,overlayCur:null}},token:function(b,S){return(b!=S.streamSeen||Math.min(S.basePos,S.overlayPos){(function(o){typeof fs=="object"&&typeof ds=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";var p=/^(\s*)(>[> ]*|[*+-] \[[x ]\]\s|[*+-]\s|(\d+)([.)]))(\s*)/,v=/^(\s*)(>[> ]*|[*+-] \[[x ]\]|[*+-]|(\d+)[.)])(\s*)$/,C=/[*+-]\s/;o.commands.newlineAndIndentContinueMarkdownList=function(S){if(S.getOption("disableInput"))return o.Pass;for(var s=S.listSelections(),h=[],g=0;g\s*$/.test(E),M=!/>\s*$/.test(E);(R||M)&&S.replaceRange("",{line:T.line,ch:0},{line:T.line,ch:T.ch+1}),h[g]=` +`}else{var H=z[1],Z=z[5],ee=!(C.test(z[2])||z[2].indexOf(">")>=0),re=ee?parseInt(z[3],10)+1+z[4]:z[2].replace("x"," ");h[g]=` +`+H+re+Z,ee&&b(S,T)}}S.replaceSelections(h)};function b(S,s){var h=s.line,g=0,T=0,x=p.exec(S.getLine(h)),c=x[1];do{g+=1;var d=h+g,w=S.getLine(d),E=p.exec(w);if(E){var z=E[1],y=parseInt(x[3],10)+g-T,R=parseInt(E[3],10),M=R;if(c===z&&!isNaN(R))y===R&&(M=R+1),y>R&&(M=y+1),S.replaceRange(w.replace(p,z+M+E[4]+E[5]),{line:d,ch:0},{line:d,ch:w.length});else{if(c.length>z.length||c.length{(function(o){typeof hs=="object"&&typeof gs=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){o.defineOption("placeholder","",function(h,g,T){var x=T&&T!=o.Init;if(g&&!x)h.on("blur",b),h.on("change",S),h.on("swapDoc",S),o.on(h.getInputField(),"compositionupdate",h.state.placeholderCompose=function(){C(h)}),S(h);else if(!g&&x){h.off("blur",b),h.off("change",S),h.off("swapDoc",S),o.off(h.getInputField(),"compositionupdate",h.state.placeholderCompose),p(h);var c=h.getWrapperElement();c.className=c.className.replace(" CodeMirror-empty","")}g&&!h.hasFocus()&&b(h)});function p(h){h.state.placeholder&&(h.state.placeholder.parentNode.removeChild(h.state.placeholder),h.state.placeholder=null)}function v(h){p(h);var g=h.state.placeholder=document.createElement("pre");g.style.cssText="height: 0; overflow: visible",g.style.direction=h.getOption("direction"),g.className="CodeMirror-placeholder CodeMirror-line-like";var T=h.getOption("placeholder");typeof T=="string"&&(T=document.createTextNode(T)),g.appendChild(T),h.display.lineSpace.insertBefore(g,h.display.lineSpace.firstChild)}function C(h){setTimeout(function(){var g=!1;if(h.lineCount()==1){var T=h.getInputField();g=T.nodeName=="TEXTAREA"?!h.getLine(0).length:!/[^\u200b]/.test(T.querySelector(".CodeMirror-line").textContent)}g?v(h):p(h)},20)}function b(h){s(h)&&v(h)}function S(h){var g=h.getWrapperElement(),T=s(h);g.className=g.className.replace(" CodeMirror-empty","")+(T?" CodeMirror-empty":""),T?v(h):p(h)}function s(h){return h.lineCount()===1&&h.getLine(0)===""}})});var ys=Ke((vs,bs)=>{(function(o){typeof vs=="object"&&typeof bs=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";o.defineOption("styleSelectedText",!1,function(x,c,d){var w=d&&d!=o.Init;c&&!w?(x.state.markedSelection=[],x.state.markedSelectionStyle=typeof c=="string"?c:"CodeMirror-selectedtext",g(x),x.on("cursorActivity",p),x.on("change",v)):!c&&w&&(x.off("cursorActivity",p),x.off("change",v),h(x),x.state.markedSelection=x.state.markedSelectionStyle=null)});function p(x){x.state.markedSelection&&x.operation(function(){T(x)})}function v(x){x.state.markedSelection&&x.state.markedSelection.length&&x.operation(function(){h(x)})}var C=8,b=o.Pos,S=o.cmpPos;function s(x,c,d,w){if(S(c,d)!=0)for(var E=x.state.markedSelection,z=x.state.markedSelectionStyle,y=c.line;;){var R=y==c.line?c:b(y,0),M=y+C,H=M>=d.line,Z=H?d:b(M,0),ee=x.markText(R,Z,{className:z});if(w==null?E.push(ee):E.splice(w++,0,ee),H)break;y=M}}function h(x){for(var c=x.state.markedSelection,d=0;d1)return g(x);var c=x.getCursor("start"),d=x.getCursor("end"),w=x.state.markedSelection;if(!w.length)return s(x,c,d);var E=w[0].find(),z=w[w.length-1].find();if(!E||!z||d.line-c.line<=C||S(c,z.to)>=0||S(d,E.from)<=0)return g(x);for(;S(c,E.from)>0;)w.shift().clear(),E=w[0].find();for(S(c,E.from)<0&&(E.to.line-c.line0&&(d.line-z.from.line{(function(o){typeof xs=="object"&&typeof _s=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";var p=o.Pos;function v(y){var R=y.flags;return R??(y.ignoreCase?"i":"")+(y.global?"g":"")+(y.multiline?"m":"")}function C(y,R){for(var M=v(y),H=M,Z=0;Zre);N++){var F=y.getLine(ee++);H=H==null?F:H+` +`+F}Z=Z*2,R.lastIndex=M.ch;var D=R.exec(H);if(D){var Q=H.slice(0,D.index).split(` +`),j=D[0].split(` +`),V=M.line+Q.length-1,_=Q[Q.length-1].length;return{from:p(V,_),to:p(V+j.length-1,j.length==1?_+j[0].length:j[j.length-1].length),match:D}}}}function h(y,R,M){for(var H,Z=0;Z<=y.length;){R.lastIndex=Z;var ee=R.exec(y);if(!ee)break;var re=ee.index+ee[0].length;if(re>y.length-M)break;(!H||re>H.index+H[0].length)&&(H=ee),Z=ee.index+1}return H}function g(y,R,M){R=C(R,"g");for(var H=M.line,Z=M.ch,ee=y.firstLine();H>=ee;H--,Z=-1){var re=y.getLine(H),N=h(re,R,Z<0?0:re.length-Z);if(N)return{from:p(H,N.index),to:p(H,N.index+N[0].length),match:N}}}function T(y,R,M){if(!b(R))return g(y,R,M);R=C(R,"gm");for(var H,Z=1,ee=y.getLine(M.line).length-M.ch,re=M.line,N=y.firstLine();re>=N;){for(var F=0;F=N;F++){var D=y.getLine(re--);H=H==null?D:D+` +`+H}Z*=2;var Q=h(H,R,ee);if(Q){var j=H.slice(0,Q.index).split(` +`),V=Q[0].split(` +`),_=re+j.length,K=j[j.length-1].length;return{from:p(_,K),to:p(_+V.length-1,V.length==1?K+V[0].length:V[V.length-1].length),match:Q}}}}var x,c;String.prototype.normalize?(x=function(y){return y.normalize("NFD").toLowerCase()},c=function(y){return y.normalize("NFD")}):(x=function(y){return y.toLowerCase()},c=function(y){return y});function d(y,R,M,H){if(y.length==R.length)return M;for(var Z=0,ee=M+Math.max(0,y.length-R.length);;){if(Z==ee)return Z;var re=Z+ee>>1,N=H(y.slice(0,re)).length;if(N==M)return re;N>M?ee=re:Z=re+1}}function w(y,R,M,H){if(!R.length)return null;var Z=H?x:c,ee=Z(R).split(/\r|\n\r?/);e:for(var re=M.line,N=M.ch,F=y.lastLine()+1-ee.length;re<=F;re++,N=0){var D=y.getLine(re).slice(N),Q=Z(D);if(ee.length==1){var j=Q.indexOf(ee[0]);if(j==-1)continue e;var M=d(D,Q,j,Z)+N;return{from:p(re,d(D,Q,j,Z)+N),to:p(re,d(D,Q,j+ee[0].length,Z)+N)}}else{var V=Q.length-ee[0].length;if(Q.slice(V)!=ee[0])continue e;for(var _=1;_=F;re--,N=-1){var D=y.getLine(re);N>-1&&(D=D.slice(0,N));var Q=Z(D);if(ee.length==1){var j=Q.lastIndexOf(ee[0]);if(j==-1)continue e;return{from:p(re,d(D,Q,j,Z)),to:p(re,d(D,Q,j+ee[0].length,Z))}}else{var V=ee[ee.length-1];if(Q.slice(0,V.length)!=V)continue e;for(var _=1,M=re-ee.length+1;_(this.doc.getLine(R.line)||"").length&&(R.ch=0,R.line++)),o.cmpPos(R,this.doc.clipPos(R))!=0))return this.atOccurrence=!1;var M=this.matches(y,R);if(this.afterEmptyMatch=M&&o.cmpPos(M.from,M.to)==0,M)return this.pos=M,this.atOccurrence=!0,this.pos.match||!0;var H=p(y?this.doc.firstLine():this.doc.lastLine()+1,0);return this.pos={from:H,to:H},this.atOccurrence=!1},from:function(){if(this.atOccurrence)return this.pos.from},to:function(){if(this.atOccurrence)return this.pos.to},replace:function(y,R){if(this.atOccurrence){var M=o.splitLines(y);this.doc.replaceRange(M,this.pos.from,this.pos.to,R),this.pos.to=p(this.pos.from.line+M.length-1,M[M.length-1].length+(M.length==1?this.pos.from.ch:0))}}},o.defineExtension("getSearchCursor",function(y,R,M){return new z(this.doc,y,R,M)}),o.defineDocExtension("getSearchCursor",function(y,R,M){return new z(this,y,R,M)}),o.defineExtension("selectMatches",function(y,R){for(var M=[],H=this.getSearchCursor(y,this.getCursor("from"),R);H.findNext()&&!(o.cmpPos(H.to(),this.getCursor("to"))>0);)M.push({anchor:H.from(),head:H.to()});M.length&&this.setSelections(M,0)})})});var Vo=Ke((ws,Ss)=>{(function(o){typeof ws=="object"&&typeof Ss=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";function p(I,B,le,xe,q,L){this.indented=I,this.column=B,this.type=le,this.info=xe,this.align=q,this.prev=L}function v(I,B,le,xe){var q=I.indented;return I.context&&I.context.type=="statement"&&le!="statement"&&(q=I.context.indented),I.context=new p(q,B,le,xe,null,I.context)}function C(I){var B=I.context.type;return(B==")"||B=="]"||B=="}")&&(I.indented=I.context.indented),I.context=I.context.prev}function b(I,B,le){if(B.prevToken=="variable"||B.prevToken=="type"||/\S(?:[^- ]>|[*\]])\s*$|\*$/.test(I.string.slice(0,le))||B.typeAtEndOfLine&&I.column()==I.indentation())return!0}function S(I){for(;;){if(!I||I.type=="top")return!0;if(I.type=="}"&&I.prev.info!="namespace")return!1;I=I.prev}}o.defineMode("clike",function(I,B){var le=I.indentUnit,xe=B.statementIndentUnit||le,q=B.dontAlignCalls,L=B.keywords||{},de=B.types||{},ze=B.builtin||{},pe=B.blockKeywords||{},Ee=B.defKeywords||{},ge=B.atoms||{},Oe=B.hooks||{},qe=B.multiLineStrings,Se=B.indentStatements!==!1,je=B.indentSwitch!==!1,Ze=B.namespaceSeparator,ke=B.isPunctuationChar||/[\[\]{}\(\),;\:\.]/,Je=B.numberStart||/[\d\.]/,He=B.number||/^(?:0x[a-f\d]+|0b[01]+|(?:\d+\.?\d*|\.\d+)(?:e[-+]?\d+)?)(u|ll?|l|f)?/i,Ge=B.isOperatorChar||/[+\-*&%=<>!?|\/]/,U=B.isIdentifierChar||/[\w\$_\xa1-\uffff]/,G=B.isReservedIdentifier||!1,ce,Be;function te(we,Me){var Le=we.next();if(Oe[Le]){var $=Oe[Le](we,Me);if($!==!1)return $}if(Le=='"'||Le=="'")return Me.tokenize=fe(Le),Me.tokenize(we,Me);if(Je.test(Le)){if(we.backUp(1),we.match(He))return"number";we.next()}if(ke.test(Le))return ce=Le,null;if(Le=="/"){if(we.eat("*"))return Me.tokenize=oe,oe(we,Me);if(we.eat("/"))return we.skipToEnd(),"comment"}if(Ge.test(Le)){for(;!we.match(/^\/[\/*]/,!1)&&we.eat(Ge););return"operator"}if(we.eatWhile(U),Ze)for(;we.match(Ze);)we.eatWhile(U);var W=we.current();return h(L,W)?(h(pe,W)&&(ce="newstatement"),h(Ee,W)&&(Be=!0),"keyword"):h(de,W)?"type":h(ze,W)||G&&G(W)?(h(pe,W)&&(ce="newstatement"),"builtin"):h(ge,W)?"atom":"variable"}function fe(we){return function(Me,Le){for(var $=!1,W,se=!1;(W=Me.next())!=null;){if(W==we&&!$){se=!0;break}$=!$&&W=="\\"}return(se||!($||qe))&&(Le.tokenize=null),"string"}}function oe(we,Me){for(var Le=!1,$;$=we.next();){if($=="/"&&Le){Me.tokenize=null;break}Le=$=="*"}return"comment"}function Ue(we,Me){B.typeFirstDefinitions&&we.eol()&&S(Me.context)&&(Me.typeAtEndOfLine=b(we,Me,we.pos))}return{startState:function(we){return{tokenize:null,context:new p((we||0)-le,0,"top",null,!1),indented:0,startOfLine:!0,prevToken:null}},token:function(we,Me){var Le=Me.context;if(we.sol()&&(Le.align==null&&(Le.align=!1),Me.indented=we.indentation(),Me.startOfLine=!0),we.eatSpace())return Ue(we,Me),null;ce=Be=null;var $=(Me.tokenize||te)(we,Me);if($=="comment"||$=="meta")return $;if(Le.align==null&&(Le.align=!0),ce==";"||ce==":"||ce==","&&we.match(/^\s*(?:\/\/.*)?$/,!1))for(;Me.context.type=="statement";)C(Me);else if(ce=="{")v(Me,we.column(),"}");else if(ce=="[")v(Me,we.column(),"]");else if(ce=="(")v(Me,we.column(),")");else if(ce=="}"){for(;Le.type=="statement";)Le=C(Me);for(Le.type=="}"&&(Le=C(Me));Le.type=="statement";)Le=C(Me)}else ce==Le.type?C(Me):Se&&((Le.type=="}"||Le.type=="top")&&ce!=";"||Le.type=="statement"&&ce=="newstatement")&&v(Me,we.column(),"statement",we.current());if($=="variable"&&(Me.prevToken=="def"||B.typeFirstDefinitions&&b(we,Me,we.start)&&S(Me.context)&&we.match(/^\s*\(/,!1))&&($="def"),Oe.token){var W=Oe.token(we,Me,$);W!==void 0&&($=W)}return $=="def"&&B.styleDefs===!1&&($="variable"),Me.startOfLine=!1,Me.prevToken=Be?"def":$||ce,Ue(we,Me),$},indent:function(we,Me){if(we.tokenize!=te&&we.tokenize!=null||we.typeAtEndOfLine&&S(we.context))return o.Pass;var Le=we.context,$=Me&&Me.charAt(0),W=$==Le.type;if(Le.type=="statement"&&$=="}"&&(Le=Le.prev),B.dontIndentStatements)for(;Le.type=="statement"&&B.dontIndentStatements.test(Le.info);)Le=Le.prev;if(Oe.indent){var se=Oe.indent(we,Le,Me,le);if(typeof se=="number")return se}var De=Le.prev&&Le.prev.info=="switch";if(B.allmanIndentation&&/[{(]/.test($)){for(;Le.type!="top"&&Le.type!="}";)Le=Le.prev;return Le.indented}return Le.type=="statement"?Le.indented+($=="{"?0:xe):Le.align&&(!q||Le.type!=")")?Le.column+(W?0:1):Le.type==")"&&!W?Le.indented+xe:Le.indented+(W?0:le)+(!W&&De&&!/^(?:case|default)\b/.test(Me)?le:0)},electricInput:je?/^\s*(?:case .*?:|default:|\{\}?|\})$/:/^\s*[{}]$/,blockCommentStart:"/*",blockCommentEnd:"*/",blockCommentContinue:" * ",lineComment:"//",fold:"brace"}});function s(I){for(var B={},le=I.split(" "),xe=0;xe!?|\/#:@]/,hooks:{"@":function(I){return I.eatWhile(/[\w\$_]/),"meta"},'"':function(I,B){return I.match('""')?(B.tokenize=j,B.tokenize(I,B)):!1},"'":function(I){return I.match(/^(\\[^'\s]+|[^\\'])'/)?"string-2":(I.eatWhile(/[\w\$_\xa1-\uffff]/),"atom")},"=":function(I,B){var le=B.context;return le.type=="}"&&le.align&&I.eat(">")?(B.context=new p(le.indented,le.column,le.type,le.info,null,le.prev),"operator"):!1},"/":function(I,B){return I.eat("*")?(B.tokenize=V(1),B.tokenize(I,B)):!1}},modeProps:{closeBrackets:{pairs:'()[]{}""',triples:'"'}}});function _(I){return function(B,le){for(var xe=!1,q,L=!1;!B.eol();){if(!I&&!xe&&B.match('"')){L=!0;break}if(I&&B.match('"""')){L=!0;break}q=B.next(),!xe&&q=="$"&&B.match("{")&&B.skipTo("}"),xe=!xe&&q=="\\"&&!I}return(L||!I)&&(le.tokenize=null),"string"}}Q("text/x-kotlin",{name:"clike",keywords:s("package as typealias class interface this super val operator var fun for is in This throw return annotation break continue object if else while do try when !in !is as? file import where by get set abstract enum open inner override private public internal protected catch finally out final vararg reified dynamic companion constructor init sealed field property receiver param sparam lateinit data inline noinline tailrec external annotation crossinline const operator infix suspend actual expect setparam value"),types:s("Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable Compiler Double Exception Float Integer Long Math Number Object Package Pair Process Runtime Runnable SecurityManager Short StackTraceElement StrictMath String StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void Annotation Any BooleanArray ByteArray Char CharArray DeprecationLevel DoubleArray Enum FloatArray Function Int IntArray Lazy LazyThreadSafetyMode LongArray Nothing ShortArray Unit"),intendSwitch:!1,indentStatements:!1,multiLineStrings:!0,number:/^(?:0x[a-f\d_]+|0b[01_]+|(?:[\d_]+(\.\d+)?|\.\d+)(?:e[-+]?[\d_]+)?)(u|ll?|l|f)?/i,blockKeywords:s("catch class do else finally for if where try while enum"),defKeywords:s("class val var object interface fun"),atoms:s("true false null this"),hooks:{"@":function(I){return I.eatWhile(/[\w\$_]/),"meta"},"*":function(I,B){return B.prevToken=="."?"variable":"operator"},'"':function(I,B){return B.tokenize=_(I.match('""')),B.tokenize(I,B)},"/":function(I,B){return I.eat("*")?(B.tokenize=V(1),B.tokenize(I,B)):!1},indent:function(I,B,le,xe){var q=le&&le.charAt(0);if((I.prevToken=="}"||I.prevToken==")")&&le=="")return I.indented;if(I.prevToken=="operator"&&le!="}"&&I.context.type!="}"||I.prevToken=="variable"&&q=="."||(I.prevToken=="}"||I.prevToken==")")&&q==".")return xe*2+B.indented;if(B.align&&B.type=="}")return B.indented+(I.context.type==(le||"").charAt(0)?0:xe)}},modeProps:{closeBrackets:{triples:'"'}}}),Q(["x-shader/x-vertex","x-shader/x-fragment"],{name:"clike",keywords:s("sampler1D sampler2D sampler3D samplerCube sampler1DShadow sampler2DShadow const attribute uniform varying break continue discard return for while do if else struct in out inout"),types:s("float int bool void vec2 vec3 vec4 ivec2 ivec3 ivec4 bvec2 bvec3 bvec4 mat2 mat3 mat4"),blockKeywords:s("for while do if else struct"),builtin:s("radians degrees sin cos tan asin acos atan pow exp log exp2 sqrt inversesqrt abs sign floor ceil fract mod min max clamp mix step smoothstep length distance dot cross normalize ftransform faceforward reflect refract matrixCompMult lessThan lessThanEqual greaterThan greaterThanEqual equal notEqual any all not texture1D texture1DProj texture1DLod texture1DProjLod texture2D texture2DProj texture2DLod texture2DProjLod texture3D texture3DProj texture3DLod texture3DProjLod textureCube textureCubeLod shadow1D shadow2D shadow1DProj shadow2DProj shadow1DLod shadow2DLod shadow1DProjLod shadow2DProjLod dFdx dFdy fwidth noise1 noise2 noise3 noise4"),atoms:s("true false gl_FragColor gl_SecondaryColor gl_Normal gl_Vertex gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 gl_FogCoord gl_PointCoord gl_Position gl_PointSize gl_ClipVertex gl_FrontColor gl_BackColor gl_FrontSecondaryColor gl_BackSecondaryColor gl_TexCoord gl_FogFragCoord gl_FragCoord gl_FrontFacing gl_FragData gl_FragDepth gl_ModelViewMatrix gl_ProjectionMatrix gl_ModelViewProjectionMatrix gl_TextureMatrix gl_NormalMatrix gl_ModelViewMatrixInverse gl_ProjectionMatrixInverse gl_ModelViewProjectionMatrixInverse gl_TextureMatrixTranspose gl_ModelViewMatrixInverseTranspose gl_ProjectionMatrixInverseTranspose gl_ModelViewProjectionMatrixInverseTranspose gl_TextureMatrixInverseTranspose gl_NormalScale gl_DepthRange gl_ClipPlane gl_Point gl_FrontMaterial gl_BackMaterial gl_LightSource gl_LightModel gl_FrontLightModelProduct gl_BackLightModelProduct gl_TextureColor gl_EyePlaneS gl_EyePlaneT gl_EyePlaneR gl_EyePlaneQ gl_FogParameters gl_MaxLights gl_MaxClipPlanes gl_MaxTextureUnits gl_MaxTextureCoords gl_MaxVertexAttribs gl_MaxVertexUniformComponents gl_MaxVaryingFloats gl_MaxVertexTextureImageUnits gl_MaxTextureImageUnits gl_MaxFragmentUniformComponents gl_MaxCombineTextureImageUnits gl_MaxDrawBuffers"),indentSwitch:!1,hooks:{"#":M},modeProps:{fold:["brace","include"]}}),Q("text/x-nesc",{name:"clike",keywords:s(g+" as atomic async call command component components configuration event generic implementation includes interface module new norace nx_struct nx_union post provides signal task uses abstract extends"),types:E,blockKeywords:s(y),atoms:s("null true false"),hooks:{"#":M},modeProps:{fold:["brace","include"]}}),Q("text/x-objectivec",{name:"clike",keywords:s(g+" "+x),types:z,builtin:s(c),blockKeywords:s(y+" @synthesize @try @catch @finally @autoreleasepool @synchronized"),defKeywords:s(R+" @interface @implementation @protocol @class"),dontIndentStatements:/^@.*$/,typeFirstDefinitions:!0,atoms:s("YES NO NULL Nil nil true false nullptr"),isReservedIdentifier:Z,hooks:{"#":M,"*":H},modeProps:{fold:["brace","include"]}}),Q("text/x-objectivec++",{name:"clike",keywords:s(g+" "+x+" "+T),types:z,builtin:s(c),blockKeywords:s(y+" @synthesize @try @catch @finally @autoreleasepool @synchronized class try catch"),defKeywords:s(R+" @interface @implementation @protocol @class class namespace"),dontIndentStatements:/^@.*$|^template$/,typeFirstDefinitions:!0,atoms:s("YES NO NULL Nil nil true false nullptr"),isReservedIdentifier:Z,hooks:{"#":M,"*":H,u:re,U:re,L:re,R:re,0:ee,1:ee,2:ee,3:ee,4:ee,5:ee,6:ee,7:ee,8:ee,9:ee,token:function(I,B,le){if(le=="variable"&&I.peek()=="("&&(B.prevToken==";"||B.prevToken==null||B.prevToken=="}")&&N(I.current()))return"def"}},namespaceSeparator:"::",modeProps:{fold:["brace","include"]}}),Q("text/x-squirrel",{name:"clike",keywords:s("base break clone continue const default delete enum extends function in class foreach local resume return this throw typeof yield constructor instanceof static"),types:E,blockKeywords:s("case catch class else for foreach if switch try while"),defKeywords:s("function local class"),typeFirstDefinitions:!0,atoms:s("true false null"),hooks:{"#":M},modeProps:{fold:["brace","include"]}});var K=null;function X(I){return function(B,le){for(var xe=!1,q,L=!1;!B.eol();){if(!xe&&B.match('"')&&(I=="single"||B.match('""'))){L=!0;break}if(!xe&&B.match("``")){K=X(I),L=!0;break}q=B.next(),xe=I=="single"&&!xe&&q=="\\"}return L&&(le.tokenize=null),"string"}}Q("text/x-ceylon",{name:"clike",keywords:s("abstracts alias assembly assert assign break case catch class continue dynamic else exists extends finally for function given if import in interface is let module new nonempty object of out outer package return satisfies super switch then this throw try value void while"),types:function(I){var B=I.charAt(0);return B===B.toUpperCase()&&B!==B.toLowerCase()},blockKeywords:s("case catch class dynamic else finally for function if interface module new object switch try while"),defKeywords:s("class dynamic function interface module object package value"),builtin:s("abstract actual aliased annotation by default deprecated doc final formal late license native optional sealed see serializable shared suppressWarnings tagged throws variable"),isPunctuationChar:/[\[\]{}\(\),;\:\.`]/,isOperatorChar:/[+\-*&%=<>!?|^~:\/]/,numberStart:/[\d#$]/,number:/^(?:#[\da-fA-F_]+|\$[01_]+|[\d_]+[kMGTPmunpf]?|[\d_]+\.[\d_]+(?:[eE][-+]?\d+|[kMGTPmunpf]|)|)/i,multiLineStrings:!0,typeFirstDefinitions:!0,atoms:s("true false null larger smaller equal empty finished"),indentSwitch:!1,styleDefs:!1,hooks:{"@":function(I){return I.eatWhile(/[\w\$_]/),"meta"},'"':function(I,B){return B.tokenize=X(I.match('""')?"triple":"single"),B.tokenize(I,B)},"`":function(I,B){return!K||!I.match("`")?!1:(B.tokenize=K,K=null,B.tokenize(I,B))},"'":function(I){return I.eatWhile(/[\w\$_\xa1-\uffff]/),"atom"},token:function(I,B,le){if((le=="variable"||le=="type")&&B.prevToken==".")return"variable-2"}},modeProps:{fold:["brace","import"],closeBrackets:{triples:'"'}}})})});var Cs=Ke((Ts,Ls)=>{(function(o){typeof Ts=="object"&&typeof Ls=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";o.defineMode("cmake",function(){var p=/({)?[a-zA-Z0-9_]+(})?/;function v(b,S){for(var s,h,g=!1;!b.eol()&&(s=b.next())!=S.pending;){if(s==="$"&&h!="\\"&&S.pending=='"'){g=!0;break}h=s}return g&&b.backUp(1),s==S.pending?S.continueString=!1:S.continueString=!0,"string"}function C(b,S){var s=b.next();return s==="$"?b.match(p)?"variable-2":"variable":S.continueString?(b.backUp(1),v(b,S)):b.match(/(\s+)?\w+\(/)||b.match(/(\s+)?\w+\ \(/)?(b.backUp(1),"def"):s=="#"?(b.skipToEnd(),"comment"):s=="'"||s=='"'?(S.pending=s,v(b,S)):s=="("||s==")"?"bracket":s.match(/[0-9]/)?"number":(b.eatWhile(/[\w-]/),null)}return{startState:function(){var b={};return b.inDefinition=!1,b.inInclude=!1,b.continueString=!1,b.pending=!1,b},token:function(b,S){return b.eatSpace()?null:C(b,S)}}}),o.defineMIME("text/x-cmake","cmake")})});var gn=Ke((Es,zs)=>{(function(o){typeof Es=="object"&&typeof zs=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";o.defineMode("css",function(F,D){var Q=D.inline;D.propertyKeywords||(D=o.resolveMode("text/css"));var j=F.indentUnit,V=D.tokenHooks,_=D.documentTypes||{},K=D.mediaTypes||{},X=D.mediaFeatures||{},I=D.mediaValueKeywords||{},B=D.propertyKeywords||{},le=D.nonStandardPropertyKeywords||{},xe=D.fontProperties||{},q=D.counterDescriptors||{},L=D.colorKeywords||{},de=D.valueKeywords||{},ze=D.allowNested,pe=D.lineComment,Ee=D.supportsAtComponent===!0,ge=F.highlightNonStandardPropertyKeywords!==!1,Oe,qe;function Se(te,fe){return Oe=fe,te}function je(te,fe){var oe=te.next();if(V[oe]){var Ue=V[oe](te,fe);if(Ue!==!1)return Ue}if(oe=="@")return te.eatWhile(/[\w\\\-]/),Se("def",te.current());if(oe=="="||(oe=="~"||oe=="|")&&te.eat("="))return Se(null,"compare");if(oe=='"'||oe=="'")return fe.tokenize=Ze(oe),fe.tokenize(te,fe);if(oe=="#")return te.eatWhile(/[\w\\\-]/),Se("atom","hash");if(oe=="!")return te.match(/^\s*\w*/),Se("keyword","important");if(/\d/.test(oe)||oe=="."&&te.eat(/\d/))return te.eatWhile(/[\w.%]/),Se("number","unit");if(oe==="-"){if(/[\d.]/.test(te.peek()))return te.eatWhile(/[\w.%]/),Se("number","unit");if(te.match(/^-[\w\\\-]*/))return te.eatWhile(/[\w\\\-]/),te.match(/^\s*:/,!1)?Se("variable-2","variable-definition"):Se("variable-2","variable");if(te.match(/^\w+-/))return Se("meta","meta")}else return/[,+>*\/]/.test(oe)?Se(null,"select-op"):oe=="."&&te.match(/^-?[_a-z][_a-z0-9-]*/i)?Se("qualifier","qualifier"):/[:;{}\[\]\(\)]/.test(oe)?Se(null,oe):te.match(/^[\w-.]+(?=\()/)?(/^(url(-prefix)?|domain|regexp)$/i.test(te.current())&&(fe.tokenize=ke),Se("variable callee","variable")):/[\w\\\-]/.test(oe)?(te.eatWhile(/[\w\\\-]/),Se("property","word")):Se(null,null)}function Ze(te){return function(fe,oe){for(var Ue=!1,we;(we=fe.next())!=null;){if(we==te&&!Ue){te==")"&&fe.backUp(1);break}Ue=!Ue&&we=="\\"}return(we==te||!Ue&&te!=")")&&(oe.tokenize=null),Se("string","string")}}function ke(te,fe){return te.next(),te.match(/^\s*[\"\')]/,!1)?fe.tokenize=null:fe.tokenize=Ze(")"),Se(null,"(")}function Je(te,fe,oe){this.type=te,this.indent=fe,this.prev=oe}function He(te,fe,oe,Ue){return te.context=new Je(oe,fe.indentation()+(Ue===!1?0:j),te.context),oe}function Ge(te){return te.context.prev&&(te.context=te.context.prev),te.context.type}function U(te,fe,oe){return Be[oe.context.type](te,fe,oe)}function G(te,fe,oe,Ue){for(var we=Ue||1;we>0;we--)oe.context=oe.context.prev;return U(te,fe,oe)}function ce(te){var fe=te.current().toLowerCase();de.hasOwnProperty(fe)?qe="atom":L.hasOwnProperty(fe)?qe="keyword":qe="variable"}var Be={};return Be.top=function(te,fe,oe){if(te=="{")return He(oe,fe,"block");if(te=="}"&&oe.context.prev)return Ge(oe);if(Ee&&/@component/i.test(te))return He(oe,fe,"atComponentBlock");if(/^@(-moz-)?document$/i.test(te))return He(oe,fe,"documentTypes");if(/^@(media|supports|(-moz-)?document|import)$/i.test(te))return He(oe,fe,"atBlock");if(/^@(font-face|counter-style)/i.test(te))return oe.stateArg=te,"restricted_atBlock_before";if(/^@(-(moz|ms|o|webkit)-)?keyframes$/i.test(te))return"keyframes";if(te&&te.charAt(0)=="@")return He(oe,fe,"at");if(te=="hash")qe="builtin";else if(te=="word")qe="tag";else{if(te=="variable-definition")return"maybeprop";if(te=="interpolation")return He(oe,fe,"interpolation");if(te==":")return"pseudo";if(ze&&te=="(")return He(oe,fe,"parens")}return oe.context.type},Be.block=function(te,fe,oe){if(te=="word"){var Ue=fe.current().toLowerCase();return B.hasOwnProperty(Ue)?(qe="property","maybeprop"):le.hasOwnProperty(Ue)?(qe=ge?"string-2":"property","maybeprop"):ze?(qe=fe.match(/^\s*:(?:\s|$)/,!1)?"property":"tag","block"):(qe+=" error","maybeprop")}else return te=="meta"?"block":!ze&&(te=="hash"||te=="qualifier")?(qe="error","block"):Be.top(te,fe,oe)},Be.maybeprop=function(te,fe,oe){return te==":"?He(oe,fe,"prop"):U(te,fe,oe)},Be.prop=function(te,fe,oe){if(te==";")return Ge(oe);if(te=="{"&&ze)return He(oe,fe,"propBlock");if(te=="}"||te=="{")return G(te,fe,oe);if(te=="(")return He(oe,fe,"parens");if(te=="hash"&&!/^#([0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/.test(fe.current()))qe+=" error";else if(te=="word")ce(fe);else if(te=="interpolation")return He(oe,fe,"interpolation");return"prop"},Be.propBlock=function(te,fe,oe){return te=="}"?Ge(oe):te=="word"?(qe="property","maybeprop"):oe.context.type},Be.parens=function(te,fe,oe){return te=="{"||te=="}"?G(te,fe,oe):te==")"?Ge(oe):te=="("?He(oe,fe,"parens"):te=="interpolation"?He(oe,fe,"interpolation"):(te=="word"&&ce(fe),"parens")},Be.pseudo=function(te,fe,oe){return te=="meta"?"pseudo":te=="word"?(qe="variable-3",oe.context.type):U(te,fe,oe)},Be.documentTypes=function(te,fe,oe){return te=="word"&&_.hasOwnProperty(fe.current())?(qe="tag",oe.context.type):Be.atBlock(te,fe,oe)},Be.atBlock=function(te,fe,oe){if(te=="(")return He(oe,fe,"atBlock_parens");if(te=="}"||te==";")return G(te,fe,oe);if(te=="{")return Ge(oe)&&He(oe,fe,ze?"block":"top");if(te=="interpolation")return He(oe,fe,"interpolation");if(te=="word"){var Ue=fe.current().toLowerCase();Ue=="only"||Ue=="not"||Ue=="and"||Ue=="or"?qe="keyword":K.hasOwnProperty(Ue)?qe="attribute":X.hasOwnProperty(Ue)?qe="property":I.hasOwnProperty(Ue)?qe="keyword":B.hasOwnProperty(Ue)?qe="property":le.hasOwnProperty(Ue)?qe=ge?"string-2":"property":de.hasOwnProperty(Ue)?qe="atom":L.hasOwnProperty(Ue)?qe="keyword":qe="error"}return oe.context.type},Be.atComponentBlock=function(te,fe,oe){return te=="}"?G(te,fe,oe):te=="{"?Ge(oe)&&He(oe,fe,ze?"block":"top",!1):(te=="word"&&(qe="error"),oe.context.type)},Be.atBlock_parens=function(te,fe,oe){return te==")"?Ge(oe):te=="{"||te=="}"?G(te,fe,oe,2):Be.atBlock(te,fe,oe)},Be.restricted_atBlock_before=function(te,fe,oe){return te=="{"?He(oe,fe,"restricted_atBlock"):te=="word"&&oe.stateArg=="@counter-style"?(qe="variable","restricted_atBlock_before"):U(te,fe,oe)},Be.restricted_atBlock=function(te,fe,oe){return te=="}"?(oe.stateArg=null,Ge(oe)):te=="word"?(oe.stateArg=="@font-face"&&!xe.hasOwnProperty(fe.current().toLowerCase())||oe.stateArg=="@counter-style"&&!q.hasOwnProperty(fe.current().toLowerCase())?qe="error":qe="property","maybeprop"):"restricted_atBlock"},Be.keyframes=function(te,fe,oe){return te=="word"?(qe="variable","keyframes"):te=="{"?He(oe,fe,"top"):U(te,fe,oe)},Be.at=function(te,fe,oe){return te==";"?Ge(oe):te=="{"||te=="}"?G(te,fe,oe):(te=="word"?qe="tag":te=="hash"&&(qe="builtin"),"at")},Be.interpolation=function(te,fe,oe){return te=="}"?Ge(oe):te=="{"||te==";"?G(te,fe,oe):(te=="word"?qe="variable":te!="variable"&&te!="("&&te!=")"&&(qe="error"),"interpolation")},{startState:function(te){return{tokenize:null,state:Q?"block":"top",stateArg:null,context:new Je(Q?"block":"top",te||0,null)}},token:function(te,fe){if(!fe.tokenize&&te.eatSpace())return null;var oe=(fe.tokenize||je)(te,fe);return oe&&typeof oe=="object"&&(Oe=oe[1],oe=oe[0]),qe=oe,Oe!="comment"&&(fe.state=Be[fe.state](Oe,te,fe)),qe},indent:function(te,fe){var oe=te.context,Ue=fe&&fe.charAt(0),we=oe.indent;return oe.type=="prop"&&(Ue=="}"||Ue==")")&&(oe=oe.prev),oe.prev&&(Ue=="}"&&(oe.type=="block"||oe.type=="top"||oe.type=="interpolation"||oe.type=="restricted_atBlock")?(oe=oe.prev,we=oe.indent):(Ue==")"&&(oe.type=="parens"||oe.type=="atBlock_parens")||Ue=="{"&&(oe.type=="at"||oe.type=="atBlock"))&&(we=Math.max(0,oe.indent-j))),we},electricChars:"}",blockCommentStart:"/*",blockCommentEnd:"*/",blockCommentContinue:" * ",lineComment:pe,fold:"brace"}});function p(F){for(var D={},Q=0;Q{(function(o){typeof Ms=="object"&&typeof As=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";o.defineMode("diff",function(){var p={"+":"positive","-":"negative","@":"meta"};return{token:function(v){var C=v.string.search(/[\t ]+?$/);if(!v.sol()||C===0)return v.skipToEnd(),("error "+(p[v.string.charAt(0)]||"")).replace(/ $/,"");var b=p[v.peek()]||v.skipToEnd();return C===-1?v.skipToEnd():v.pos=C,b}}}),o.defineMIME("text/x-diff","diff")})});var mn=Ke((qs,Is)=>{(function(o){typeof qs=="object"&&typeof Is=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";var p={autoSelfClosers:{area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,menuitem:!0},implicitlyClosed:{dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},contextGrabbers:{dd:{dd:!0,dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}},doNotIndent:{pre:!0},allowUnquoted:!0,allowMissing:!0,caseFold:!0},v={autoSelfClosers:{},implicitlyClosed:{},contextGrabbers:{},doNotIndent:{},allowUnquoted:!1,allowMissing:!1,allowMissingTagName:!1,caseFold:!1};o.defineMode("xml",function(C,b){var S=C.indentUnit,s={},h=b.htmlMode?p:v;for(var g in h)s[g]=h[g];for(var g in b)s[g]=b[g];var T,x;function c(_,K){function X(le){return K.tokenize=le,le(_,K)}var I=_.next();if(I=="<")return _.eat("!")?_.eat("[")?_.match("CDATA[")?X(E("atom","]]>")):null:_.match("--")?X(E("comment","-->")):_.match("DOCTYPE",!0,!0)?(_.eatWhile(/[\w\._\-]/),X(z(1))):null:_.eat("?")?(_.eatWhile(/[\w\._\-]/),K.tokenize=E("meta","?>"),"meta"):(T=_.eat("/")?"closeTag":"openTag",K.tokenize=d,"tag bracket");if(I=="&"){var B;return _.eat("#")?_.eat("x")?B=_.eatWhile(/[a-fA-F\d]/)&&_.eat(";"):B=_.eatWhile(/[\d]/)&&_.eat(";"):B=_.eatWhile(/[\w\.\-:]/)&&_.eat(";"),B?"atom":"error"}else return _.eatWhile(/[^&<]/),null}c.isInText=!0;function d(_,K){var X=_.next();if(X==">"||X=="/"&&_.eat(">"))return K.tokenize=c,T=X==">"?"endTag":"selfcloseTag","tag bracket";if(X=="=")return T="equals",null;if(X=="<"){K.tokenize=c,K.state=Z,K.tagName=K.tagStart=null;var I=K.tokenize(_,K);return I?I+" tag error":"tag error"}else return/[\'\"]/.test(X)?(K.tokenize=w(X),K.stringStartCol=_.column(),K.tokenize(_,K)):(_.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/),"word")}function w(_){var K=function(X,I){for(;!X.eol();)if(X.next()==_){I.tokenize=d;break}return"string"};return K.isInAttribute=!0,K}function E(_,K){return function(X,I){for(;!X.eol();){if(X.match(K)){I.tokenize=c;break}X.next()}return _}}function z(_){return function(K,X){for(var I;(I=K.next())!=null;){if(I=="<")return X.tokenize=z(_+1),X.tokenize(K,X);if(I==">")if(_==1){X.tokenize=c;break}else return X.tokenize=z(_-1),X.tokenize(K,X)}return"meta"}}function y(_){return _&&_.toLowerCase()}function R(_,K,X){this.prev=_.context,this.tagName=K||"",this.indent=_.indented,this.startOfLine=X,(s.doNotIndent.hasOwnProperty(K)||_.context&&_.context.noIndent)&&(this.noIndent=!0)}function M(_){_.context&&(_.context=_.context.prev)}function H(_,K){for(var X;;){if(!_.context||(X=_.context.tagName,!s.contextGrabbers.hasOwnProperty(y(X))||!s.contextGrabbers[y(X)].hasOwnProperty(y(K))))return;M(_)}}function Z(_,K,X){return _=="openTag"?(X.tagStart=K.column(),ee):_=="closeTag"?re:Z}function ee(_,K,X){return _=="word"?(X.tagName=K.current(),x="tag",D):s.allowMissingTagName&&_=="endTag"?(x="tag bracket",D(_,K,X)):(x="error",ee)}function re(_,K,X){if(_=="word"){var I=K.current();return X.context&&X.context.tagName!=I&&s.implicitlyClosed.hasOwnProperty(y(X.context.tagName))&&M(X),X.context&&X.context.tagName==I||s.matchClosing===!1?(x="tag",N):(x="tag error",F)}else return s.allowMissingTagName&&_=="endTag"?(x="tag bracket",N(_,K,X)):(x="error",F)}function N(_,K,X){return _!="endTag"?(x="error",N):(M(X),Z)}function F(_,K,X){return x="error",N(_,K,X)}function D(_,K,X){if(_=="word")return x="attribute",Q;if(_=="endTag"||_=="selfcloseTag"){var I=X.tagName,B=X.tagStart;return X.tagName=X.tagStart=null,_=="selfcloseTag"||s.autoSelfClosers.hasOwnProperty(y(I))?H(X,I):(H(X,I),X.context=new R(X,I,B==X.indented)),Z}return x="error",D}function Q(_,K,X){return _=="equals"?j:(s.allowMissing||(x="error"),D(_,K,X))}function j(_,K,X){return _=="string"?V:_=="word"&&s.allowUnquoted?(x="string",D):(x="error",D(_,K,X))}function V(_,K,X){return _=="string"?V:D(_,K,X)}return{startState:function(_){var K={tokenize:c,state:Z,indented:_||0,tagName:null,tagStart:null,context:null};return _!=null&&(K.baseIndent=_),K},token:function(_,K){if(!K.tagName&&_.sol()&&(K.indented=_.indentation()),_.eatSpace())return null;T=null;var X=K.tokenize(_,K);return(X||T)&&X!="comment"&&(x=null,K.state=K.state(T||X,_,K),x&&(X=x=="error"?X+" error":x)),X},indent:function(_,K,X){var I=_.context;if(_.tokenize.isInAttribute)return _.tagStart==_.indented?_.stringStartCol+1:_.indented+S;if(I&&I.noIndent)return o.Pass;if(_.tokenize!=d&&_.tokenize!=c)return X?X.match(/^(\s*)/)[0].length:0;if(_.tagName)return s.multilineTagIndentPastTag!==!1?_.tagStart+_.tagName.length+2:_.tagStart+S*(s.multilineTagIndentFactor||1);if(s.alignCDATA&&/$/,blockCommentStart:"",configuration:s.htmlMode?"html":"xml",helperType:s.htmlMode?"html":"xml",skipAttribute:function(_){_.state==j&&(_.state=D)},xmlCurrentTag:function(_){return _.tagName?{name:_.tagName,close:_.type=="closeTag"}:null},xmlCurrentContext:function(_){for(var K=[],X=_.context;X;X=X.prev)K.push(X.tagName);return K.reverse()}}}),o.defineMIME("text/xml","xml"),o.defineMIME("application/xml","xml"),o.mimeModes.hasOwnProperty("text/html")||o.defineMIME("text/html",{name:"xml",htmlMode:!0})})});var vn=Ke((Fs,Ns)=>{(function(o){typeof Fs=="object"&&typeof Ns=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";o.defineMode("javascript",function(p,v){var C=p.indentUnit,b=v.statementIndent,S=v.jsonld,s=v.json||S,h=v.trackScope!==!1,g=v.typescript,T=v.wordCharacters||/[\w$\xa1-\uffff]/,x=function(){function k(pt){return{type:pt,style:"keyword"}}var O=k("keyword a"),ae=k("keyword b"),he=k("keyword c"),ne=k("keyword d"),ye=k("operator"),Xe={type:"atom",style:"atom"};return{if:k("if"),while:O,with:O,else:ae,do:ae,try:ae,finally:ae,return:ne,break:ne,continue:ne,new:k("new"),delete:he,void:he,throw:he,debugger:k("debugger"),var:k("var"),const:k("var"),let:k("var"),function:k("function"),catch:k("catch"),for:k("for"),switch:k("switch"),case:k("case"),default:k("default"),in:ye,typeof:ye,instanceof:ye,true:Xe,false:Xe,null:Xe,undefined:Xe,NaN:Xe,Infinity:Xe,this:k("this"),class:k("class"),super:k("atom"),yield:he,export:k("export"),import:k("import"),extends:he,await:he}}(),c=/[+\-*&%=<>!?|~^@]/,d=/^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/;function w(k){for(var O=!1,ae,he=!1;(ae=k.next())!=null;){if(!O){if(ae=="/"&&!he)return;ae=="["?he=!0:he&&ae=="]"&&(he=!1)}O=!O&&ae=="\\"}}var E,z;function y(k,O,ae){return E=k,z=ae,O}function R(k,O){var ae=k.next();if(ae=='"'||ae=="'")return O.tokenize=M(ae),O.tokenize(k,O);if(ae=="."&&k.match(/^\d[\d_]*(?:[eE][+\-]?[\d_]+)?/))return y("number","number");if(ae=="."&&k.match(".."))return y("spread","meta");if(/[\[\]{}\(\),;\:\.]/.test(ae))return y(ae);if(ae=="="&&k.eat(">"))return y("=>","operator");if(ae=="0"&&k.match(/^(?:x[\dA-Fa-f_]+|o[0-7_]+|b[01_]+)n?/))return y("number","number");if(/\d/.test(ae))return k.match(/^[\d_]*(?:n|(?:\.[\d_]*)?(?:[eE][+\-]?[\d_]+)?)?/),y("number","number");if(ae=="/")return k.eat("*")?(O.tokenize=H,H(k,O)):k.eat("/")?(k.skipToEnd(),y("comment","comment")):jt(k,O,1)?(w(k),k.match(/^\b(([gimyus])(?![gimyus]*\2))+\b/),y("regexp","string-2")):(k.eat("="),y("operator","operator",k.current()));if(ae=="`")return O.tokenize=Z,Z(k,O);if(ae=="#"&&k.peek()=="!")return k.skipToEnd(),y("meta","meta");if(ae=="#"&&k.eatWhile(T))return y("variable","property");if(ae=="<"&&k.match("!--")||ae=="-"&&k.match("->")&&!/\S/.test(k.string.slice(0,k.start)))return k.skipToEnd(),y("comment","comment");if(c.test(ae))return(ae!=">"||!O.lexical||O.lexical.type!=">")&&(k.eat("=")?(ae=="!"||ae=="=")&&k.eat("="):/[<>*+\-|&?]/.test(ae)&&(k.eat(ae),ae==">"&&k.eat(ae))),ae=="?"&&k.eat(".")?y("."):y("operator","operator",k.current());if(T.test(ae)){k.eatWhile(T);var he=k.current();if(O.lastType!="."){if(x.propertyIsEnumerable(he)){var ne=x[he];return y(ne.type,ne.style,he)}if(he=="async"&&k.match(/^(\s|\/\*([^*]|\*(?!\/))*?\*\/)*[\[\(\w]/,!1))return y("async","keyword",he)}return y("variable","variable",he)}}function M(k){return function(O,ae){var he=!1,ne;if(S&&O.peek()=="@"&&O.match(d))return ae.tokenize=R,y("jsonld-keyword","meta");for(;(ne=O.next())!=null&&!(ne==k&&!he);)he=!he&&ne=="\\";return he||(ae.tokenize=R),y("string","string")}}function H(k,O){for(var ae=!1,he;he=k.next();){if(he=="/"&&ae){O.tokenize=R;break}ae=he=="*"}return y("comment","comment")}function Z(k,O){for(var ae=!1,he;(he=k.next())!=null;){if(!ae&&(he=="`"||he=="$"&&k.eat("{"))){O.tokenize=R;break}ae=!ae&&he=="\\"}return y("quasi","string-2",k.current())}var ee="([{}])";function re(k,O){O.fatArrowAt&&(O.fatArrowAt=null);var ae=k.string.indexOf("=>",k.start);if(!(ae<0)){if(g){var he=/:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(k.string.slice(k.start,ae));he&&(ae=he.index)}for(var ne=0,ye=!1,Xe=ae-1;Xe>=0;--Xe){var pt=k.string.charAt(Xe),Et=ee.indexOf(pt);if(Et>=0&&Et<3){if(!ne){++Xe;break}if(--ne==0){pt=="("&&(ye=!0);break}}else if(Et>=3&&Et<6)++ne;else if(T.test(pt))ye=!0;else if(/["'\/`]/.test(pt))for(;;--Xe){if(Xe==0)return;var Zr=k.string.charAt(Xe-1);if(Zr==pt&&k.string.charAt(Xe-2)!="\\"){Xe--;break}}else if(ye&&!ne){++Xe;break}}ye&&!ne&&(O.fatArrowAt=Xe)}}var N={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,this:!0,import:!0,"jsonld-keyword":!0};function F(k,O,ae,he,ne,ye){this.indented=k,this.column=O,this.type=ae,this.prev=ne,this.info=ye,he!=null&&(this.align=he)}function D(k,O){if(!h)return!1;for(var ae=k.localVars;ae;ae=ae.next)if(ae.name==O)return!0;for(var he=k.context;he;he=he.prev)for(var ae=he.vars;ae;ae=ae.next)if(ae.name==O)return!0}function Q(k,O,ae,he,ne){var ye=k.cc;for(j.state=k,j.stream=ne,j.marked=null,j.cc=ye,j.style=O,k.lexical.hasOwnProperty("align")||(k.lexical.align=!0);;){var Xe=ye.length?ye.pop():s?Se:Oe;if(Xe(ae,he)){for(;ye.length&&ye[ye.length-1].lex;)ye.pop()();return j.marked?j.marked:ae=="variable"&&D(k,he)?"variable-2":O}}}var j={state:null,column:null,marked:null,cc:null};function V(){for(var k=arguments.length-1;k>=0;k--)j.cc.push(arguments[k])}function _(){return V.apply(null,arguments),!0}function K(k,O){for(var ae=O;ae;ae=ae.next)if(ae.name==k)return!0;return!1}function X(k){var O=j.state;if(j.marked="def",!!h){if(O.context){if(O.lexical.info=="var"&&O.context&&O.context.block){var ae=I(k,O.context);if(ae!=null){O.context=ae;return}}else if(!K(k,O.localVars)){O.localVars=new xe(k,O.localVars);return}}v.globalVars&&!K(k,O.globalVars)&&(O.globalVars=new xe(k,O.globalVars))}}function I(k,O){if(O)if(O.block){var ae=I(k,O.prev);return ae?ae==O.prev?O:new le(ae,O.vars,!0):null}else return K(k,O.vars)?O:new le(O.prev,new xe(k,O.vars),!1);else return null}function B(k){return k=="public"||k=="private"||k=="protected"||k=="abstract"||k=="readonly"}function le(k,O,ae){this.prev=k,this.vars=O,this.block=ae}function xe(k,O){this.name=k,this.next=O}var q=new xe("this",new xe("arguments",null));function L(){j.state.context=new le(j.state.context,j.state.localVars,!1),j.state.localVars=q}function de(){j.state.context=new le(j.state.context,j.state.localVars,!0),j.state.localVars=null}L.lex=de.lex=!0;function ze(){j.state.localVars=j.state.context.vars,j.state.context=j.state.context.prev}ze.lex=!0;function pe(k,O){var ae=function(){var he=j.state,ne=he.indented;if(he.lexical.type=="stat")ne=he.lexical.indented;else for(var ye=he.lexical;ye&&ye.type==")"&&ye.align;ye=ye.prev)ne=ye.indented;he.lexical=new F(ne,j.stream.column(),k,null,he.lexical,O)};return ae.lex=!0,ae}function Ee(){var k=j.state;k.lexical.prev&&(k.lexical.type==")"&&(k.indented=k.lexical.indented),k.lexical=k.lexical.prev)}Ee.lex=!0;function ge(k){function O(ae){return ae==k?_():k==";"||ae=="}"||ae==")"||ae=="]"?V():_(O)}return O}function Oe(k,O){return k=="var"?_(pe("vardef",O),Hr,ge(";"),Ee):k=="keyword a"?_(pe("form"),Ze,Oe,Ee):k=="keyword b"?_(pe("form"),Oe,Ee):k=="keyword d"?j.stream.match(/^\s*$/,!1)?_():_(pe("stat"),Je,ge(";"),Ee):k=="debugger"?_(ge(";")):k=="{"?_(pe("}"),de,De,Ee,ze):k==";"?_():k=="if"?(j.state.lexical.info=="else"&&j.state.cc[j.state.cc.length-1]==Ee&&j.state.cc.pop()(),_(pe("form"),Ze,Oe,Ee,Br)):k=="function"?_(Bt):k=="for"?_(pe("form"),de,ei,Oe,ze,Ee):k=="class"||g&&O=="interface"?(j.marked="keyword",_(pe("form",k=="class"?k:O),Wr,Ee)):k=="variable"?g&&O=="declare"?(j.marked="keyword",_(Oe)):g&&(O=="module"||O=="enum"||O=="type")&&j.stream.match(/^\s*\w/,!1)?(j.marked="keyword",O=="enum"?_(Ae):O=="type"?_(ti,ge("operator"),Pe,ge(";")):_(pe("form"),Ct,ge("{"),pe("}"),De,Ee,Ee)):g&&O=="namespace"?(j.marked="keyword",_(pe("form"),Se,Oe,Ee)):g&&O=="abstract"?(j.marked="keyword",_(Oe)):_(pe("stat"),Ue):k=="switch"?_(pe("form"),Ze,ge("{"),pe("}","switch"),de,De,Ee,Ee,ze):k=="case"?_(Se,ge(":")):k=="default"?_(ge(":")):k=="catch"?_(pe("form"),L,qe,Oe,Ee,ze):k=="export"?_(pe("stat"),Ur,Ee):k=="import"?_(pe("stat"),gr,Ee):k=="async"?_(Oe):O=="@"?_(Se,Oe):V(pe("stat"),Se,ge(";"),Ee)}function qe(k){if(k=="(")return _($t,ge(")"))}function Se(k,O){return ke(k,O,!1)}function je(k,O){return ke(k,O,!0)}function Ze(k){return k!="("?V():_(pe(")"),Je,ge(")"),Ee)}function ke(k,O,ae){if(j.state.fatArrowAt==j.stream.start){var he=ae?Be:ce;if(k=="(")return _(L,pe(")"),W($t,")"),Ee,ge("=>"),he,ze);if(k=="variable")return V(L,Ct,ge("=>"),he,ze)}var ne=ae?Ge:He;return N.hasOwnProperty(k)?_(ne):k=="function"?_(Bt,ne):k=="class"||g&&O=="interface"?(j.marked="keyword",_(pe("form"),to,Ee)):k=="keyword c"||k=="async"?_(ae?je:Se):k=="("?_(pe(")"),Je,ge(")"),Ee,ne):k=="operator"||k=="spread"?_(ae?je:Se):k=="["?_(pe("]"),at,Ee,ne):k=="{"?se(Me,"}",null,ne):k=="quasi"?V(U,ne):k=="new"?_(te(ae)):_()}function Je(k){return k.match(/[;\}\)\],]/)?V():V(Se)}function He(k,O){return k==","?_(Je):Ge(k,O,!1)}function Ge(k,O,ae){var he=ae==!1?He:Ge,ne=ae==!1?Se:je;if(k=="=>")return _(L,ae?Be:ce,ze);if(k=="operator")return/\+\+|--/.test(O)||g&&O=="!"?_(he):g&&O=="<"&&j.stream.match(/^([^<>]|<[^<>]*>)*>\s*\(/,!1)?_(pe(">"),W(Pe,">"),Ee,he):O=="?"?_(Se,ge(":"),ne):_(ne);if(k=="quasi")return V(U,he);if(k!=";"){if(k=="(")return se(je,")","call",he);if(k==".")return _(we,he);if(k=="[")return _(pe("]"),Je,ge("]"),Ee,he);if(g&&O=="as")return j.marked="keyword",_(Pe,he);if(k=="regexp")return j.state.lastType=j.marked="operator",j.stream.backUp(j.stream.pos-j.stream.start-1),_(ne)}}function U(k,O){return k!="quasi"?V():O.slice(O.length-2)!="${"?_(U):_(Je,G)}function G(k){if(k=="}")return j.marked="string-2",j.state.tokenize=Z,_(U)}function ce(k){return re(j.stream,j.state),V(k=="{"?Oe:Se)}function Be(k){return re(j.stream,j.state),V(k=="{"?Oe:je)}function te(k){return function(O){return O=="."?_(k?oe:fe):O=="variable"&&g?_(Ft,k?Ge:He):V(k?je:Se)}}function fe(k,O){if(O=="target")return j.marked="keyword",_(He)}function oe(k,O){if(O=="target")return j.marked="keyword",_(Ge)}function Ue(k){return k==":"?_(Ee,Oe):V(He,ge(";"),Ee)}function we(k){if(k=="variable")return j.marked="property",_()}function Me(k,O){if(k=="async")return j.marked="property",_(Me);if(k=="variable"||j.style=="keyword"){if(j.marked="property",O=="get"||O=="set")return _(Le);var ae;return g&&j.state.fatArrowAt==j.stream.start&&(ae=j.stream.match(/^\s*:\s*/,!1))&&(j.state.fatArrowAt=j.stream.pos+ae[0].length),_($)}else{if(k=="number"||k=="string")return j.marked=S?"property":j.style+" property",_($);if(k=="jsonld-keyword")return _($);if(g&&B(O))return j.marked="keyword",_(Me);if(k=="[")return _(Se,nt,ge("]"),$);if(k=="spread")return _(je,$);if(O=="*")return j.marked="keyword",_(Me);if(k==":")return V($)}}function Le(k){return k!="variable"?V($):(j.marked="property",_(Bt))}function $(k){if(k==":")return _(je);if(k=="(")return V(Bt)}function W(k,O,ae){function he(ne,ye){if(ae?ae.indexOf(ne)>-1:ne==","){var Xe=j.state.lexical;return Xe.info=="call"&&(Xe.pos=(Xe.pos||0)+1),_(function(pt,Et){return pt==O||Et==O?V():V(k)},he)}return ne==O||ye==O?_():ae&&ae.indexOf(";")>-1?V(k):_(ge(O))}return function(ne,ye){return ne==O||ye==O?_():V(k,he)}}function se(k,O,ae){for(var he=3;he"),Pe);if(k=="quasi")return V(_t,Ht)}function xt(k){if(k=="=>")return _(Pe)}function Fe(k){return k.match(/[\}\)\]]/)?_():k==","||k==";"?_(Fe):V(nr,Fe)}function nr(k,O){if(k=="variable"||j.style=="keyword")return j.marked="property",_(nr);if(O=="?"||k=="number"||k=="string")return _(nr);if(k==":")return _(Pe);if(k=="[")return _(ge("variable"),dt,ge("]"),nr);if(k=="(")return V(hr,nr);if(!k.match(/[;\}\)\],]/))return _()}function _t(k,O){return k!="quasi"?V():O.slice(O.length-2)!="${"?_(_t):_(Pe,it)}function it(k){if(k=="}")return j.marked="string-2",j.state.tokenize=Z,_(_t)}function ot(k,O){return k=="variable"&&j.stream.match(/^\s*[?:]/,!1)||O=="?"?_(ot):k==":"?_(Pe):k=="spread"?_(ot):V(Pe)}function Ht(k,O){if(O=="<")return _(pe(">"),W(Pe,">"),Ee,Ht);if(O=="|"||k=="."||O=="&")return _(Pe);if(k=="[")return _(Pe,ge("]"),Ht);if(O=="extends"||O=="implements")return j.marked="keyword",_(Pe);if(O=="?")return _(Pe,ge(":"),Pe)}function Ft(k,O){if(O=="<")return _(pe(">"),W(Pe,">"),Ee,Ht)}function Wt(){return V(Pe,kt)}function kt(k,O){if(O=="=")return _(Pe)}function Hr(k,O){return O=="enum"?(j.marked="keyword",_(Ae)):V(Ct,nt,Ut,eo)}function Ct(k,O){if(g&&B(O))return j.marked="keyword",_(Ct);if(k=="variable")return X(O),_();if(k=="spread")return _(Ct);if(k=="[")return se(yn,"]");if(k=="{")return se(dr,"}")}function dr(k,O){return k=="variable"&&!j.stream.match(/^\s*:/,!1)?(X(O),_(Ut)):(k=="variable"&&(j.marked="property"),k=="spread"?_(Ct):k=="}"?V():k=="["?_(Se,ge("]"),ge(":"),dr):_(ge(":"),Ct,Ut))}function yn(){return V(Ct,Ut)}function Ut(k,O){if(O=="=")return _(je)}function eo(k){if(k==",")return _(Hr)}function Br(k,O){if(k=="keyword b"&&O=="else")return _(pe("form","else"),Oe,Ee)}function ei(k,O){if(O=="await")return _(ei);if(k=="(")return _(pe(")"),xn,Ee)}function xn(k){return k=="var"?_(Hr,pr):k=="variable"?_(pr):V(pr)}function pr(k,O){return k==")"?_():k==";"?_(pr):O=="in"||O=="of"?(j.marked="keyword",_(Se,pr)):V(Se,pr)}function Bt(k,O){if(O=="*")return j.marked="keyword",_(Bt);if(k=="variable")return X(O),_(Bt);if(k=="(")return _(L,pe(")"),W($t,")"),Ee,Pt,Oe,ze);if(g&&O=="<")return _(pe(">"),W(Wt,">"),Ee,Bt)}function hr(k,O){if(O=="*")return j.marked="keyword",_(hr);if(k=="variable")return X(O),_(hr);if(k=="(")return _(L,pe(")"),W($t,")"),Ee,Pt,ze);if(g&&O=="<")return _(pe(">"),W(Wt,">"),Ee,hr)}function ti(k,O){if(k=="keyword"||k=="variable")return j.marked="type",_(ti);if(O=="<")return _(pe(">"),W(Wt,">"),Ee)}function $t(k,O){return O=="@"&&_(Se,$t),k=="spread"?_($t):g&&B(O)?(j.marked="keyword",_($t)):g&&k=="this"?_(nt,Ut):V(Ct,nt,Ut)}function to(k,O){return k=="variable"?Wr(k,O):Kt(k,O)}function Wr(k,O){if(k=="variable")return X(O),_(Kt)}function Kt(k,O){if(O=="<")return _(pe(">"),W(Wt,">"),Ee,Kt);if(O=="extends"||O=="implements"||g&&k==",")return O=="implements"&&(j.marked="keyword"),_(g?Pe:Se,Kt);if(k=="{")return _(pe("}"),Gt,Ee)}function Gt(k,O){if(k=="async"||k=="variable"&&(O=="static"||O=="get"||O=="set"||g&&B(O))&&j.stream.match(/^\s+#?[\w$\xa1-\uffff]/,!1))return j.marked="keyword",_(Gt);if(k=="variable"||j.style=="keyword")return j.marked="property",_(Cr,Gt);if(k=="number"||k=="string")return _(Cr,Gt);if(k=="[")return _(Se,nt,ge("]"),Cr,Gt);if(O=="*")return j.marked="keyword",_(Gt);if(g&&k=="(")return V(hr,Gt);if(k==";"||k==",")return _(Gt);if(k=="}")return _();if(O=="@")return _(Se,Gt)}function Cr(k,O){if(O=="!"||O=="?")return _(Cr);if(k==":")return _(Pe,Ut);if(O=="=")return _(je);var ae=j.state.lexical.prev,he=ae&&ae.info=="interface";return V(he?hr:Bt)}function Ur(k,O){return O=="*"?(j.marked="keyword",_(Gr,ge(";"))):O=="default"?(j.marked="keyword",_(Se,ge(";"))):k=="{"?_(W($r,"}"),Gr,ge(";")):V(Oe)}function $r(k,O){if(O=="as")return j.marked="keyword",_(ge("variable"));if(k=="variable")return V(je,$r)}function gr(k){return k=="string"?_():k=="("?V(Se):k=="."?V(He):V(Kr,Vt,Gr)}function Kr(k,O){return k=="{"?se(Kr,"}"):(k=="variable"&&X(O),O=="*"&&(j.marked="keyword"),_(_n))}function Vt(k){if(k==",")return _(Kr,Vt)}function _n(k,O){if(O=="as")return j.marked="keyword",_(Kr)}function Gr(k,O){if(O=="from")return j.marked="keyword",_(Se)}function at(k){return k=="]"?_():V(W(je,"]"))}function Ae(){return V(pe("form"),Ct,ge("{"),pe("}"),W(ir,"}"),Ee,Ee)}function ir(){return V(Ct,Ut)}function kn(k,O){return k.lastType=="operator"||k.lastType==","||c.test(O.charAt(0))||/[,.]/.test(O.charAt(0))}function jt(k,O,ae){return O.tokenize==R&&/^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/.test(O.lastType)||O.lastType=="quasi"&&/\{\s*$/.test(k.string.slice(0,k.pos-(ae||0)))}return{startState:function(k){var O={tokenize:R,lastType:"sof",cc:[],lexical:new F((k||0)-C,0,"block",!1),localVars:v.localVars,context:v.localVars&&new le(null,null,!1),indented:k||0};return v.globalVars&&typeof v.globalVars=="object"&&(O.globalVars=v.globalVars),O},token:function(k,O){if(k.sol()&&(O.lexical.hasOwnProperty("align")||(O.lexical.align=!1),O.indented=k.indentation(),re(k,O)),O.tokenize!=H&&k.eatSpace())return null;var ae=O.tokenize(k,O);return E=="comment"?ae:(O.lastType=E=="operator"&&(z=="++"||z=="--")?"incdec":E,Q(O,ae,E,z,k))},indent:function(k,O){if(k.tokenize==H||k.tokenize==Z)return o.Pass;if(k.tokenize!=R)return 0;var ae=O&&O.charAt(0),he=k.lexical,ne;if(!/^\s*else\b/.test(O))for(var ye=k.cc.length-1;ye>=0;--ye){var Xe=k.cc[ye];if(Xe==Ee)he=he.prev;else if(Xe!=Br&&Xe!=ze)break}for(;(he.type=="stat"||he.type=="form")&&(ae=="}"||(ne=k.cc[k.cc.length-1])&&(ne==He||ne==Ge)&&!/^[,\.=+\-*:?[\(]/.test(O));)he=he.prev;b&&he.type==")"&&he.prev.type=="stat"&&(he=he.prev);var pt=he.type,Et=ae==pt;return pt=="vardef"?he.indented+(k.lastType=="operator"||k.lastType==","?he.info.length+1:0):pt=="form"&&ae=="{"?he.indented:pt=="form"?he.indented+C:pt=="stat"?he.indented+(kn(k,O)?b||C:0):he.info=="switch"&&!Et&&v.doubleIndentSwitch!=!1?he.indented+(/^(?:case|default)\b/.test(O)?C:2*C):he.align?he.column+(Et?0:1):he.indented+(Et?0:C)},electricInput:/^\s*(?:case .*?:|default:|\{|\})$/,blockCommentStart:s?null:"/*",blockCommentEnd:s?null:"*/",blockCommentContinue:s?null:" * ",lineComment:s?null:"//",fold:"brace",closeBrackets:"()[]{}''\"\"``",helperType:s?"json":"javascript",jsonldMode:S,jsonMode:s,expressionAllowed:jt,skipExpression:function(k){Q(k,"atom","atom","true",new o.StringStream("",2,null))}}}),o.registerHelper("wordChars","javascript",/[\w$]/),o.defineMIME("text/javascript","javascript"),o.defineMIME("text/ecmascript","javascript"),o.defineMIME("application/javascript","javascript"),o.defineMIME("application/x-javascript","javascript"),o.defineMIME("application/ecmascript","javascript"),o.defineMIME("application/json",{name:"javascript",json:!0}),o.defineMIME("application/x-json",{name:"javascript",json:!0}),o.defineMIME("application/manifest+json",{name:"javascript",json:!0}),o.defineMIME("application/ld+json",{name:"javascript",jsonld:!0}),o.defineMIME("text/typescript",{name:"javascript",typescript:!0}),o.defineMIME("application/typescript",{name:"javascript",typescript:!0})})});var Qn=Ke((Os,Ps)=>{(function(o){typeof Os=="object"&&typeof Ps=="object"?o(We(),mn(),vn(),gn()):typeof define=="function"&&define.amd?define(["../../lib/codemirror","../xml/xml","../javascript/javascript","../css/css"],o):o(CodeMirror)})(function(o){"use strict";var p={script:[["lang",/(javascript|babel)/i,"javascript"],["type",/^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^module$|^$/i,"javascript"],["type",/./,"text/plain"],[null,null,"javascript"]],style:[["lang",/^css$/i,"css"],["type",/^(text\/)?(x-)?(stylesheet|css)$/i,"css"],["type",/./,"text/plain"],[null,null,"css"]]};function v(T,x,c){var d=T.current(),w=d.search(x);return w>-1?T.backUp(d.length-w):d.match(/<\/?$/)&&(T.backUp(d.length),T.match(x,!1)||T.match(d)),c}var C={};function b(T){var x=C[T];return x||(C[T]=new RegExp("\\s+"+T+`\\s*=\\s*('|")?([^'"]+)('|")?\\s*`))}function S(T,x){var c=T.match(b(x));return c?/^\s*(.*?)\s*$/.exec(c[2])[1]:""}function s(T,x){return new RegExp((x?"^":"")+"","i")}function h(T,x){for(var c in T)for(var d=x[c]||(x[c]=[]),w=T[c],E=w.length-1;E>=0;E--)d.unshift(w[E])}function g(T,x){for(var c=0;c=0;z--)d.script.unshift(["type",E[z].matches,E[z].mode]);function y(R,M){var H=c.token(R,M.htmlState),Z=/\btag\b/.test(H),ee;if(Z&&!/[<>\s\/]/.test(R.current())&&(ee=M.htmlState.tagName&&M.htmlState.tagName.toLowerCase())&&d.hasOwnProperty(ee))M.inTag=ee+" ";else if(M.inTag&&Z&&/>$/.test(R.current())){var re=/^([\S]+) (.*)/.exec(M.inTag);M.inTag=null;var N=R.current()==">"&&g(d[re[1]],re[2]),F=o.getMode(T,N),D=s(re[1],!0),Q=s(re[1],!1);M.token=function(j,V){return j.match(D,!1)?(V.token=y,V.localState=V.localMode=null,null):v(j,Q,V.localMode.token(j,V.localState))},M.localMode=F,M.localState=o.startState(F,c.indent(M.htmlState,"",""))}else M.inTag&&(M.inTag+=R.current(),R.eol()&&(M.inTag+=" "));return H}return{startState:function(){var R=o.startState(c);return{token:y,inTag:null,localMode:null,localState:null,htmlState:R}},copyState:function(R){var M;return R.localState&&(M=o.copyState(R.localMode,R.localState)),{token:R.token,inTag:R.inTag,localMode:R.localMode,localState:M,htmlState:o.copyState(c,R.htmlState)}},token:function(R,M){return M.token(R,M)},indent:function(R,M,H){return!R.localMode||/^\s*<\//.test(M)?c.indent(R.htmlState,M,H):R.localMode.indent?R.localMode.indent(R.localState,M,H):o.Pass},innerMode:function(R){return{state:R.localState||R.htmlState,mode:R.localMode||c}}}},"xml","javascript","css"),o.defineMIME("text/html","htmlmixed")})});var Hs=Ke((js,Rs)=>{(function(o){typeof js=="object"&&typeof Rs=="object"?o(We(),Qn(),Yn()):typeof define=="function"&&define.amd?define(["../../lib/codemirror","../htmlmixed/htmlmixed","../../addon/mode/overlay"],o):o(CodeMirror)})(function(o){"use strict";o.defineMode("django:inner",function(){var p=["block","endblock","for","endfor","true","false","filter","endfilter","loop","none","self","super","if","elif","endif","as","else","import","with","endwith","without","context","ifequal","endifequal","ifnotequal","endifnotequal","extends","include","load","comment","endcomment","empty","url","static","trans","blocktrans","endblocktrans","now","regroup","lorem","ifchanged","endifchanged","firstof","debug","cycle","csrf_token","autoescape","endautoescape","spaceless","endspaceless","ssi","templatetag","verbatim","endverbatim","widthratio"],v=["add","addslashes","capfirst","center","cut","date","default","default_if_none","dictsort","dictsortreversed","divisibleby","escape","escapejs","filesizeformat","first","floatformat","force_escape","get_digit","iriencode","join","last","length","length_is","linebreaks","linebreaksbr","linenumbers","ljust","lower","make_list","phone2numeric","pluralize","pprint","random","removetags","rjust","safe","safeseq","slice","slugify","stringformat","striptags","time","timesince","timeuntil","title","truncatechars","truncatechars_html","truncatewords","truncatewords_html","unordered_list","upper","urlencode","urlize","urlizetrunc","wordcount","wordwrap","yesno"],C=["==","!=","<",">","<=",">="],b=["in","not","or","and"];p=new RegExp("^\\b("+p.join("|")+")\\b"),v=new RegExp("^\\b("+v.join("|")+")\\b"),C=new RegExp("^\\b("+C.join("|")+")\\b"),b=new RegExp("^\\b("+b.join("|")+")\\b");function S(c,d){if(c.match("{{"))return d.tokenize=h,"tag";if(c.match("{%"))return d.tokenize=g,"tag";if(c.match("{#"))return d.tokenize=T,"comment";for(;c.next()!=null&&!c.match(/\{[{%#]/,!1););return null}function s(c,d){return function(w,E){if(!E.escapeNext&&w.eat(c))E.tokenize=d;else{E.escapeNext&&(E.escapeNext=!1);var z=w.next();z=="\\"&&(E.escapeNext=!0)}return"string"}}function h(c,d){if(d.waitDot){if(d.waitDot=!1,c.peek()!=".")return"null";if(c.match(/\.\W+/))return"error";if(c.eat("."))return d.waitProperty=!0,"null";throw Error("Unexpected error while waiting for property.")}if(d.waitPipe){if(d.waitPipe=!1,c.peek()!="|")return"null";if(c.match(/\.\W+/))return"error";if(c.eat("|"))return d.waitFilter=!0,"null";throw Error("Unexpected error while waiting for filter.")}return d.waitProperty&&(d.waitProperty=!1,c.match(/\b(\w+)\b/))?(d.waitDot=!0,d.waitPipe=!0,"property"):d.waitFilter&&(d.waitFilter=!1,c.match(v))?"variable-2":c.eatSpace()?(d.waitProperty=!1,"null"):c.match(/\b\d+(\.\d+)?\b/)?"number":c.match("'")?(d.tokenize=s("'",d.tokenize),"string"):c.match('"')?(d.tokenize=s('"',d.tokenize),"string"):c.match(/\b(\w+)\b/)&&!d.foundVariable?(d.waitDot=!0,d.waitPipe=!0,"variable"):c.match("}}")?(d.waitProperty=null,d.waitFilter=null,d.waitDot=null,d.waitPipe=null,d.tokenize=S,"tag"):(c.next(),"null")}function g(c,d){if(d.waitDot){if(d.waitDot=!1,c.peek()!=".")return"null";if(c.match(/\.\W+/))return"error";if(c.eat("."))return d.waitProperty=!0,"null";throw Error("Unexpected error while waiting for property.")}if(d.waitPipe){if(d.waitPipe=!1,c.peek()!="|")return"null";if(c.match(/\.\W+/))return"error";if(c.eat("|"))return d.waitFilter=!0,"null";throw Error("Unexpected error while waiting for filter.")}if(d.waitProperty&&(d.waitProperty=!1,c.match(/\b(\w+)\b/)))return d.waitDot=!0,d.waitPipe=!0,"property";if(d.waitFilter&&(d.waitFilter=!1,c.match(v)))return"variable-2";if(c.eatSpace())return d.waitProperty=!1,"null";if(c.match(/\b\d+(\.\d+)?\b/))return"number";if(c.match("'"))return d.tokenize=s("'",d.tokenize),"string";if(c.match('"'))return d.tokenize=s('"',d.tokenize),"string";if(c.match(C))return"operator";if(c.match(b))return"keyword";var w=c.match(p);return w?(w[0]=="comment"&&(d.blockCommentTag=!0),"keyword"):c.match(/\b(\w+)\b/)?(d.waitDot=!0,d.waitPipe=!0,"variable"):c.match("%}")?(d.waitProperty=null,d.waitFilter=null,d.waitDot=null,d.waitPipe=null,d.blockCommentTag?(d.blockCommentTag=!1,d.tokenize=x):d.tokenize=S,"tag"):(c.next(),"null")}function T(c,d){return c.match(/^.*?#\}/)?d.tokenize=S:c.skipToEnd(),"comment"}function x(c,d){return c.match(/\{%\s*endcomment\s*%\}/,!1)?(d.tokenize=g,c.match("{%"),"tag"):(c.next(),"comment")}return{startState:function(){return{tokenize:S}},token:function(c,d){return d.tokenize(c,d)},blockCommentStart:"{% comment %}",blockCommentEnd:"{% endcomment %}"}}),o.defineMode("django",function(p){var v=o.getMode(p,"text/html"),C=o.getMode(p,"django:inner");return o.overlayMode(v,C)}),o.defineMIME("text/x-django","django")})});var Di=Ke((Bs,Ws)=>{(function(o){typeof Bs=="object"&&typeof Ws=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";o.defineSimpleMode=function(x,c){o.defineMode(x,function(d){return o.simpleMode(d,c)})},o.simpleMode=function(x,c){p(c,"start");var d={},w=c.meta||{},E=!1;for(var z in c)if(z!=w&&c.hasOwnProperty(z))for(var y=d[z]=[],R=c[z],M=0;M2&&H.token&&typeof H.token!="string"){for(var re=2;re-1)return o.Pass;var z=d.indent.length-1,y=x[d.state];e:for(;;){for(var R=0;R{(function(o){typeof Us=="object"&&typeof $s=="object"?o(We(),Di()):typeof define=="function"&&define.amd?define(["../../lib/codemirror","../../addon/mode/simple"],o):o(CodeMirror)})(function(o){"use strict";var p="from",v=new RegExp("^(\\s*)\\b("+p+")\\b","i"),C=["run","cmd","entrypoint","shell"],b=new RegExp("^(\\s*)("+C.join("|")+")(\\s+\\[)","i"),S="expose",s=new RegExp("^(\\s*)("+S+")(\\s+)","i"),h=["arg","from","maintainer","label","env","add","copy","volume","user","workdir","onbuild","stopsignal","healthcheck","shell"],g=[p,S].concat(C).concat(h),T="("+g.join("|")+")",x=new RegExp("^(\\s*)"+T+"(\\s*)(#.*)?$","i"),c=new RegExp("^(\\s*)"+T+"(\\s+)","i");o.defineSimpleMode("dockerfile",{start:[{regex:/^\s*#.*$/,sol:!0,token:"comment"},{regex:v,token:[null,"keyword"],sol:!0,next:"from"},{regex:x,token:[null,"keyword",null,"error"],sol:!0},{regex:b,token:[null,"keyword",null],sol:!0,next:"array"},{regex:s,token:[null,"keyword",null],sol:!0,next:"expose"},{regex:c,token:[null,"keyword",null],sol:!0,next:"arguments"},{regex:/./,token:null}],from:[{regex:/\s*$/,token:null,next:"start"},{regex:/(\s*)(#.*)$/,token:[null,"error"],next:"start"},{regex:/(\s*\S+\s+)(as)/i,token:[null,"keyword"],next:"start"},{token:null,next:"start"}],single:[{regex:/(?:[^\\']|\\.)/,token:"string"},{regex:/'/,token:"string",pop:!0}],double:[{regex:/(?:[^\\"]|\\.)/,token:"string"},{regex:/"/,token:"string",pop:!0}],array:[{regex:/\]/,token:null,next:"start"},{regex:/"(?:[^\\"]|\\.)*"?/,token:"string"}],expose:[{regex:/\d+$/,token:"number",next:"start"},{regex:/[^\d]+$/,token:null,next:"start"},{regex:/\d+/,token:"number"},{regex:/[^\d]+/,token:null},{token:null,next:"start"}],arguments:[{regex:/^\s*#.*$/,sol:!0,token:"comment"},{regex:/"(?:[^\\"]|\\.)*"?$/,token:"string",next:"start"},{regex:/"/,token:"string",push:"double"},{regex:/'(?:[^\\']|\\.)*'?$/,token:"string",next:"start"},{regex:/'/,token:"string",push:"single"},{regex:/[^#"']+[\\`]$/,token:null},{regex:/[^#"']+$/,token:null,next:"start"},{regex:/[^#"']+/,token:null},{token:null,next:"start"}],meta:{lineComment:"#"}}),o.defineMIME("text/x-dockerfile","dockerfile")})});var Xs=Ke((Gs,Zs)=>{(function(o){typeof Gs=="object"&&typeof Zs=="object"?o(We()):typeof define=="function"&&define.amd?define(["../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";o.modeInfo=[{name:"APL",mime:"text/apl",mode:"apl",ext:["dyalog","apl"]},{name:"PGP",mimes:["application/pgp","application/pgp-encrypted","application/pgp-keys","application/pgp-signature"],mode:"asciiarmor",ext:["asc","pgp","sig"]},{name:"ASN.1",mime:"text/x-ttcn-asn",mode:"asn.1",ext:["asn","asn1"]},{name:"Asterisk",mime:"text/x-asterisk",mode:"asterisk",file:/^extensions\.conf$/i},{name:"Brainfuck",mime:"text/x-brainfuck",mode:"brainfuck",ext:["b","bf"]},{name:"C",mime:"text/x-csrc",mode:"clike",ext:["c","h","ino"]},{name:"C++",mime:"text/x-c++src",mode:"clike",ext:["cpp","c++","cc","cxx","hpp","h++","hh","hxx"],alias:["cpp"]},{name:"Cobol",mime:"text/x-cobol",mode:"cobol",ext:["cob","cpy","cbl"]},{name:"C#",mime:"text/x-csharp",mode:"clike",ext:["cs"],alias:["csharp","cs"]},{name:"Clojure",mime:"text/x-clojure",mode:"clojure",ext:["clj","cljc","cljx"]},{name:"ClojureScript",mime:"text/x-clojurescript",mode:"clojure",ext:["cljs"]},{name:"Closure Stylesheets (GSS)",mime:"text/x-gss",mode:"css",ext:["gss"]},{name:"CMake",mime:"text/x-cmake",mode:"cmake",ext:["cmake","cmake.in"],file:/^CMakeLists\.txt$/},{name:"CoffeeScript",mimes:["application/vnd.coffeescript","text/coffeescript","text/x-coffeescript"],mode:"coffeescript",ext:["coffee"],alias:["coffee","coffee-script"]},{name:"Common Lisp",mime:"text/x-common-lisp",mode:"commonlisp",ext:["cl","lisp","el"],alias:["lisp"]},{name:"Cypher",mime:"application/x-cypher-query",mode:"cypher",ext:["cyp","cypher"]},{name:"Cython",mime:"text/x-cython",mode:"python",ext:["pyx","pxd","pxi"]},{name:"Crystal",mime:"text/x-crystal",mode:"crystal",ext:["cr"]},{name:"CSS",mime:"text/css",mode:"css",ext:["css"]},{name:"CQL",mime:"text/x-cassandra",mode:"sql",ext:["cql"]},{name:"D",mime:"text/x-d",mode:"d",ext:["d"]},{name:"Dart",mimes:["application/dart","text/x-dart"],mode:"dart",ext:["dart"]},{name:"diff",mime:"text/x-diff",mode:"diff",ext:["diff","patch"]},{name:"Django",mime:"text/x-django",mode:"django"},{name:"Dockerfile",mime:"text/x-dockerfile",mode:"dockerfile",file:/^Dockerfile$/},{name:"DTD",mime:"application/xml-dtd",mode:"dtd",ext:["dtd"]},{name:"Dylan",mime:"text/x-dylan",mode:"dylan",ext:["dylan","dyl","intr"]},{name:"EBNF",mime:"text/x-ebnf",mode:"ebnf"},{name:"ECL",mime:"text/x-ecl",mode:"ecl",ext:["ecl"]},{name:"edn",mime:"application/edn",mode:"clojure",ext:["edn"]},{name:"Eiffel",mime:"text/x-eiffel",mode:"eiffel",ext:["e"]},{name:"Elm",mime:"text/x-elm",mode:"elm",ext:["elm"]},{name:"Embedded JavaScript",mime:"application/x-ejs",mode:"htmlembedded",ext:["ejs"]},{name:"Embedded Ruby",mime:"application/x-erb",mode:"htmlembedded",ext:["erb"]},{name:"Erlang",mime:"text/x-erlang",mode:"erlang",ext:["erl"]},{name:"Esper",mime:"text/x-esper",mode:"sql"},{name:"Factor",mime:"text/x-factor",mode:"factor",ext:["factor"]},{name:"FCL",mime:"text/x-fcl",mode:"fcl"},{name:"Forth",mime:"text/x-forth",mode:"forth",ext:["forth","fth","4th"]},{name:"Fortran",mime:"text/x-fortran",mode:"fortran",ext:["f","for","f77","f90","f95"]},{name:"F#",mime:"text/x-fsharp",mode:"mllike",ext:["fs"],alias:["fsharp"]},{name:"Gas",mime:"text/x-gas",mode:"gas",ext:["s"]},{name:"Gherkin",mime:"text/x-feature",mode:"gherkin",ext:["feature"]},{name:"GitHub Flavored Markdown",mime:"text/x-gfm",mode:"gfm",file:/^(readme|contributing|history)\.md$/i},{name:"Go",mime:"text/x-go",mode:"go",ext:["go"]},{name:"Groovy",mime:"text/x-groovy",mode:"groovy",ext:["groovy","gradle"],file:/^Jenkinsfile$/},{name:"HAML",mime:"text/x-haml",mode:"haml",ext:["haml"]},{name:"Haskell",mime:"text/x-haskell",mode:"haskell",ext:["hs"]},{name:"Haskell (Literate)",mime:"text/x-literate-haskell",mode:"haskell-literate",ext:["lhs"]},{name:"Haxe",mime:"text/x-haxe",mode:"haxe",ext:["hx"]},{name:"HXML",mime:"text/x-hxml",mode:"haxe",ext:["hxml"]},{name:"ASP.NET",mime:"application/x-aspx",mode:"htmlembedded",ext:["aspx"],alias:["asp","aspx"]},{name:"HTML",mime:"text/html",mode:"htmlmixed",ext:["html","htm","handlebars","hbs"],alias:["xhtml"]},{name:"HTTP",mime:"message/http",mode:"http"},{name:"IDL",mime:"text/x-idl",mode:"idl",ext:["pro"]},{name:"Pug",mime:"text/x-pug",mode:"pug",ext:["jade","pug"],alias:["jade"]},{name:"Java",mime:"text/x-java",mode:"clike",ext:["java"]},{name:"Java Server Pages",mime:"application/x-jsp",mode:"htmlembedded",ext:["jsp"],alias:["jsp"]},{name:"JavaScript",mimes:["text/javascript","text/ecmascript","application/javascript","application/x-javascript","application/ecmascript"],mode:"javascript",ext:["js"],alias:["ecmascript","js","node"]},{name:"JSON",mimes:["application/json","application/x-json"],mode:"javascript",ext:["json","map"],alias:["json5"]},{name:"JSON-LD",mime:"application/ld+json",mode:"javascript",ext:["jsonld"],alias:["jsonld"]},{name:"JSX",mime:"text/jsx",mode:"jsx",ext:["jsx"]},{name:"Jinja2",mime:"text/jinja2",mode:"jinja2",ext:["j2","jinja","jinja2"]},{name:"Julia",mime:"text/x-julia",mode:"julia",ext:["jl"],alias:["jl"]},{name:"Kotlin",mime:"text/x-kotlin",mode:"clike",ext:["kt"]},{name:"LESS",mime:"text/x-less",mode:"css",ext:["less"]},{name:"LiveScript",mime:"text/x-livescript",mode:"livescript",ext:["ls"],alias:["ls"]},{name:"Lua",mime:"text/x-lua",mode:"lua",ext:["lua"]},{name:"Markdown",mime:"text/x-markdown",mode:"markdown",ext:["markdown","md","mkd"]},{name:"mIRC",mime:"text/mirc",mode:"mirc"},{name:"MariaDB SQL",mime:"text/x-mariadb",mode:"sql"},{name:"Mathematica",mime:"text/x-mathematica",mode:"mathematica",ext:["m","nb","wl","wls"]},{name:"Modelica",mime:"text/x-modelica",mode:"modelica",ext:["mo"]},{name:"MUMPS",mime:"text/x-mumps",mode:"mumps",ext:["mps"]},{name:"MS SQL",mime:"text/x-mssql",mode:"sql"},{name:"mbox",mime:"application/mbox",mode:"mbox",ext:["mbox"]},{name:"MySQL",mime:"text/x-mysql",mode:"sql"},{name:"Nginx",mime:"text/x-nginx-conf",mode:"nginx",file:/nginx.*\.conf$/i},{name:"NSIS",mime:"text/x-nsis",mode:"nsis",ext:["nsh","nsi"]},{name:"NTriples",mimes:["application/n-triples","application/n-quads","text/n-triples"],mode:"ntriples",ext:["nt","nq"]},{name:"Objective-C",mime:"text/x-objectivec",mode:"clike",ext:["m"],alias:["objective-c","objc"]},{name:"Objective-C++",mime:"text/x-objectivec++",mode:"clike",ext:["mm"],alias:["objective-c++","objc++"]},{name:"OCaml",mime:"text/x-ocaml",mode:"mllike",ext:["ml","mli","mll","mly"]},{name:"Octave",mime:"text/x-octave",mode:"octave",ext:["m"]},{name:"Oz",mime:"text/x-oz",mode:"oz",ext:["oz"]},{name:"Pascal",mime:"text/x-pascal",mode:"pascal",ext:["p","pas"]},{name:"PEG.js",mime:"null",mode:"pegjs",ext:["jsonld"]},{name:"Perl",mime:"text/x-perl",mode:"perl",ext:["pl","pm"]},{name:"PHP",mimes:["text/x-php","application/x-httpd-php","application/x-httpd-php-open"],mode:"php",ext:["php","php3","php4","php5","php7","phtml"]},{name:"Pig",mime:"text/x-pig",mode:"pig",ext:["pig"]},{name:"Plain Text",mime:"text/plain",mode:"null",ext:["txt","text","conf","def","list","log"]},{name:"PLSQL",mime:"text/x-plsql",mode:"sql",ext:["pls"]},{name:"PostgreSQL",mime:"text/x-pgsql",mode:"sql"},{name:"PowerShell",mime:"application/x-powershell",mode:"powershell",ext:["ps1","psd1","psm1"]},{name:"Properties files",mime:"text/x-properties",mode:"properties",ext:["properties","ini","in"],alias:["ini","properties"]},{name:"ProtoBuf",mime:"text/x-protobuf",mode:"protobuf",ext:["proto"]},{name:"Python",mime:"text/x-python",mode:"python",ext:["BUILD","bzl","py","pyw"],file:/^(BUCK|BUILD)$/},{name:"Puppet",mime:"text/x-puppet",mode:"puppet",ext:["pp"]},{name:"Q",mime:"text/x-q",mode:"q",ext:["q"]},{name:"R",mime:"text/x-rsrc",mode:"r",ext:["r","R"],alias:["rscript"]},{name:"reStructuredText",mime:"text/x-rst",mode:"rst",ext:["rst"],alias:["rst"]},{name:"RPM Changes",mime:"text/x-rpm-changes",mode:"rpm"},{name:"RPM Spec",mime:"text/x-rpm-spec",mode:"rpm",ext:["spec"]},{name:"Ruby",mime:"text/x-ruby",mode:"ruby",ext:["rb"],alias:["jruby","macruby","rake","rb","rbx"]},{name:"Rust",mime:"text/x-rustsrc",mode:"rust",ext:["rs"]},{name:"SAS",mime:"text/x-sas",mode:"sas",ext:["sas"]},{name:"Sass",mime:"text/x-sass",mode:"sass",ext:["sass"]},{name:"Scala",mime:"text/x-scala",mode:"clike",ext:["scala"]},{name:"Scheme",mime:"text/x-scheme",mode:"scheme",ext:["scm","ss"]},{name:"SCSS",mime:"text/x-scss",mode:"css",ext:["scss"]},{name:"Shell",mimes:["text/x-sh","application/x-sh"],mode:"shell",ext:["sh","ksh","bash"],alias:["bash","sh","zsh"],file:/^PKGBUILD$/},{name:"Sieve",mime:"application/sieve",mode:"sieve",ext:["siv","sieve"]},{name:"Slim",mimes:["text/x-slim","application/x-slim"],mode:"slim",ext:["slim"]},{name:"Smalltalk",mime:"text/x-stsrc",mode:"smalltalk",ext:["st"]},{name:"Smarty",mime:"text/x-smarty",mode:"smarty",ext:["tpl"]},{name:"Solr",mime:"text/x-solr",mode:"solr"},{name:"SML",mime:"text/x-sml",mode:"mllike",ext:["sml","sig","fun","smackspec"]},{name:"Soy",mime:"text/x-soy",mode:"soy",ext:["soy"],alias:["closure template"]},{name:"SPARQL",mime:"application/sparql-query",mode:"sparql",ext:["rq","sparql"],alias:["sparul"]},{name:"Spreadsheet",mime:"text/x-spreadsheet",mode:"spreadsheet",alias:["excel","formula"]},{name:"SQL",mime:"text/x-sql",mode:"sql",ext:["sql"]},{name:"SQLite",mime:"text/x-sqlite",mode:"sql"},{name:"Squirrel",mime:"text/x-squirrel",mode:"clike",ext:["nut"]},{name:"Stylus",mime:"text/x-styl",mode:"stylus",ext:["styl"]},{name:"Swift",mime:"text/x-swift",mode:"swift",ext:["swift"]},{name:"sTeX",mime:"text/x-stex",mode:"stex"},{name:"LaTeX",mime:"text/x-latex",mode:"stex",ext:["text","ltx","tex"],alias:["tex"]},{name:"SystemVerilog",mime:"text/x-systemverilog",mode:"verilog",ext:["v","sv","svh"]},{name:"Tcl",mime:"text/x-tcl",mode:"tcl",ext:["tcl"]},{name:"Textile",mime:"text/x-textile",mode:"textile",ext:["textile"]},{name:"TiddlyWiki",mime:"text/x-tiddlywiki",mode:"tiddlywiki"},{name:"Tiki wiki",mime:"text/tiki",mode:"tiki"},{name:"TOML",mime:"text/x-toml",mode:"toml",ext:["toml"]},{name:"Tornado",mime:"text/x-tornado",mode:"tornado"},{name:"troff",mime:"text/troff",mode:"troff",ext:["1","2","3","4","5","6","7","8","9"]},{name:"TTCN",mime:"text/x-ttcn",mode:"ttcn",ext:["ttcn","ttcn3","ttcnpp"]},{name:"TTCN_CFG",mime:"text/x-ttcn-cfg",mode:"ttcn-cfg",ext:["cfg"]},{name:"Turtle",mime:"text/turtle",mode:"turtle",ext:["ttl"]},{name:"TypeScript",mime:"application/typescript",mode:"javascript",ext:["ts"],alias:["ts"]},{name:"TypeScript-JSX",mime:"text/typescript-jsx",mode:"jsx",ext:["tsx"],alias:["tsx"]},{name:"Twig",mime:"text/x-twig",mode:"twig"},{name:"Web IDL",mime:"text/x-webidl",mode:"webidl",ext:["webidl"]},{name:"VB.NET",mime:"text/x-vb",mode:"vb",ext:["vb"]},{name:"VBScript",mime:"text/vbscript",mode:"vbscript",ext:["vbs"]},{name:"Velocity",mime:"text/velocity",mode:"velocity",ext:["vtl"]},{name:"Verilog",mime:"text/x-verilog",mode:"verilog",ext:["v"]},{name:"VHDL",mime:"text/x-vhdl",mode:"vhdl",ext:["vhd","vhdl"]},{name:"Vue.js Component",mimes:["script/x-vue","text/x-vue"],mode:"vue",ext:["vue"]},{name:"XML",mimes:["application/xml","text/xml"],mode:"xml",ext:["xml","xsl","xsd","svg"],alias:["rss","wsdl","xsd"]},{name:"XQuery",mime:"application/xquery",mode:"xquery",ext:["xy","xquery"]},{name:"Yacas",mime:"text/x-yacas",mode:"yacas",ext:["ys"]},{name:"YAML",mimes:["text/x-yaml","text/yaml"],mode:"yaml",ext:["yaml","yml"],alias:["yml"]},{name:"Z80",mime:"text/x-z80",mode:"z80",ext:["z80"]},{name:"mscgen",mime:"text/x-mscgen",mode:"mscgen",ext:["mscgen","mscin","msc"]},{name:"xu",mime:"text/x-xu",mode:"mscgen",ext:["xu"]},{name:"msgenny",mime:"text/x-msgenny",mode:"mscgen",ext:["msgenny"]},{name:"WebAssembly",mime:"text/webassembly",mode:"wast",ext:["wat","wast"]}];for(var p=0;p-1&&C.substring(s+1,C.length);if(h)return o.findModeByExtension(h)},o.findModeByName=function(C){C=C.toLowerCase();for(var b=0;b{(function(o){typeof Ys=="object"&&typeof Qs=="object"?o(We(),mn(),Xs()):typeof define=="function"&&define.amd?define(["../../lib/codemirror","../xml/xml","../meta"],o):o(CodeMirror)})(function(o){"use strict";o.defineMode("markdown",function(p,v){var C=o.getMode(p,"text/html"),b=C.name=="null";function S(q){if(o.findModeByName){var L=o.findModeByName(q);L&&(q=L.mime||L.mimes[0])}var de=o.getMode(p,q);return de.name=="null"?null:de}v.highlightFormatting===void 0&&(v.highlightFormatting=!1),v.maxBlockquoteDepth===void 0&&(v.maxBlockquoteDepth=0),v.taskLists===void 0&&(v.taskLists=!1),v.strikethrough===void 0&&(v.strikethrough=!1),v.emoji===void 0&&(v.emoji=!1),v.fencedCodeBlockHighlighting===void 0&&(v.fencedCodeBlockHighlighting=!0),v.fencedCodeBlockDefaultMode===void 0&&(v.fencedCodeBlockDefaultMode="text/plain"),v.xml===void 0&&(v.xml=!0),v.tokenTypeOverrides===void 0&&(v.tokenTypeOverrides={});var s={header:"header",code:"comment",quote:"quote",list1:"variable-2",list2:"variable-3",list3:"keyword",hr:"hr",image:"image",imageAltText:"image-alt-text",imageMarker:"image-marker",formatting:"formatting",linkInline:"link",linkEmail:"link",linkText:"link",linkHref:"string",em:"em",strong:"strong",strikethrough:"strikethrough",emoji:"builtin"};for(var h in s)s.hasOwnProperty(h)&&v.tokenTypeOverrides[h]&&(s[h]=v.tokenTypeOverrides[h]);var g=/^([*\-_])(?:\s*\1){2,}\s*$/,T=/^(?:[*\-+]|^[0-9]+([.)]))\s+/,x=/^\[(x| )\](?=\s)/i,c=v.allowAtxHeaderWithoutSpace?/^(#+)/:/^(#+)(?: |$)/,d=/^ {0,3}(?:\={1,}|-{2,})\s*$/,w=/^[^#!\[\]*_\\<>` "'(~:]+/,E=/^(~~~+|```+)[ \t]*([\w\/+#-]*)[^\n`]*$/,z=/^\s*\[[^\]]+?\]:.*$/,y=/[!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u0AF0\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E42\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC9\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDF3C-\uDF3E]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]/,R=" ";function M(q,L,de){return L.f=L.inline=de,de(q,L)}function H(q,L,de){return L.f=L.block=de,de(q,L)}function Z(q){return!q||!/\S/.test(q.string)}function ee(q){if(q.linkTitle=!1,q.linkHref=!1,q.linkText=!1,q.em=!1,q.strong=!1,q.strikethrough=!1,q.quote=0,q.indentedCode=!1,q.f==N){var L=b;if(!L){var de=o.innerMode(C,q.htmlState);L=de.mode.name=="xml"&&de.state.tagStart===null&&!de.state.context&&de.state.tokenize.isInText}L&&(q.f=j,q.block=re,q.htmlState=null)}return q.trailingSpace=0,q.trailingSpaceNewLine=!1,q.prevLine=q.thisLine,q.thisLine={stream:null},null}function re(q,L){var de=q.column()===L.indentation,ze=Z(L.prevLine.stream),pe=L.indentedCode,Ee=L.prevLine.hr,ge=L.list!==!1,Oe=(L.listStack[L.listStack.length-1]||0)+3;L.indentedCode=!1;var qe=L.indentation;if(L.indentationDiff===null&&(L.indentationDiff=L.indentation,ge)){for(L.list=null;qe=4&&(pe||L.prevLine.fencedCodeEnd||L.prevLine.header||ze))return q.skipToEnd(),L.indentedCode=!0,s.code;if(q.eatSpace())return null;if(de&&L.indentation<=Oe&&(Ze=q.match(c))&&Ze[1].length<=6)return L.quote=0,L.header=Ze[1].length,L.thisLine.header=!0,v.highlightFormatting&&(L.formatting="header"),L.f=L.inline,D(L);if(L.indentation<=Oe&&q.eat(">"))return L.quote=de?1:L.quote+1,v.highlightFormatting&&(L.formatting="quote"),q.eatSpace(),D(L);if(!je&&!L.setext&&de&&L.indentation<=Oe&&(Ze=q.match(T))){var ke=Ze[1]?"ol":"ul";return L.indentation=qe+q.current().length,L.list=!0,L.quote=0,L.listStack.push(L.indentation),L.em=!1,L.strong=!1,L.code=!1,L.strikethrough=!1,v.taskLists&&q.match(x,!1)&&(L.taskList=!0),L.f=L.inline,v.highlightFormatting&&(L.formatting=["list","list-"+ke]),D(L)}else{if(de&&L.indentation<=Oe&&(Ze=q.match(E,!0)))return L.quote=0,L.fencedEndRE=new RegExp(Ze[1]+"+ *$"),L.localMode=v.fencedCodeBlockHighlighting&&S(Ze[2]||v.fencedCodeBlockDefaultMode),L.localMode&&(L.localState=o.startState(L.localMode)),L.f=L.block=F,v.highlightFormatting&&(L.formatting="code-block"),L.code=-1,D(L);if(L.setext||(!Se||!ge)&&!L.quote&&L.list===!1&&!L.code&&!je&&!z.test(q.string)&&(Ze=q.lookAhead(1))&&(Ze=Ze.match(d)))return L.setext?(L.header=L.setext,L.setext=0,q.skipToEnd(),v.highlightFormatting&&(L.formatting="header")):(L.header=Ze[0].charAt(0)=="="?1:2,L.setext=L.header),L.thisLine.header=!0,L.f=L.inline,D(L);if(je)return q.skipToEnd(),L.hr=!0,L.thisLine.hr=!0,s.hr;if(q.peek()==="[")return M(q,L,I)}return M(q,L,L.inline)}function N(q,L){var de=C.token(q,L.htmlState);if(!b){var ze=o.innerMode(C,L.htmlState);(ze.mode.name=="xml"&&ze.state.tagStart===null&&!ze.state.context&&ze.state.tokenize.isInText||L.md_inside&&q.current().indexOf(">")>-1)&&(L.f=j,L.block=re,L.htmlState=null)}return de}function F(q,L){var de=L.listStack[L.listStack.length-1]||0,ze=L.indentation=q.quote?L.push(s.formatting+"-"+q.formatting[de]+"-"+q.quote):L.push("error"))}if(q.taskOpen)return L.push("meta"),L.length?L.join(" "):null;if(q.taskClosed)return L.push("property"),L.length?L.join(" "):null;if(q.linkHref?L.push(s.linkHref,"url"):(q.strong&&L.push(s.strong),q.em&&L.push(s.em),q.strikethrough&&L.push(s.strikethrough),q.emoji&&L.push(s.emoji),q.linkText&&L.push(s.linkText),q.code&&L.push(s.code),q.image&&L.push(s.image),q.imageAltText&&L.push(s.imageAltText,"link"),q.imageMarker&&L.push(s.imageMarker)),q.header&&L.push(s.header,s.header+"-"+q.header),q.quote&&(L.push(s.quote),!v.maxBlockquoteDepth||v.maxBlockquoteDepth>=q.quote?L.push(s.quote+"-"+q.quote):L.push(s.quote+"-"+v.maxBlockquoteDepth)),q.list!==!1){var ze=(q.listStack.length-1)%3;ze?ze===1?L.push(s.list2):L.push(s.list3):L.push(s.list1)}return q.trailingSpaceNewLine?L.push("trailing-space-new-line"):q.trailingSpace&&L.push("trailing-space-"+(q.trailingSpace%2?"a":"b")),L.length?L.join(" "):null}function Q(q,L){if(q.match(w,!0))return D(L)}function j(q,L){var de=L.text(q,L);if(typeof de<"u")return de;if(L.list)return L.list=null,D(L);if(L.taskList){var ze=q.match(x,!0)[1]===" ";return ze?L.taskOpen=!0:L.taskClosed=!0,v.highlightFormatting&&(L.formatting="task"),L.taskList=!1,D(L)}if(L.taskOpen=!1,L.taskClosed=!1,L.header&&q.match(/^#+$/,!0))return v.highlightFormatting&&(L.formatting="header"),D(L);var pe=q.next();if(L.linkTitle){L.linkTitle=!1;var Ee=pe;pe==="("&&(Ee=")"),Ee=(Ee+"").replace(/([.?*+^\[\]\\(){}|-])/g,"\\$1");var ge="^\\s*(?:[^"+Ee+"\\\\]+|\\\\\\\\|\\\\.)"+Ee;if(q.match(new RegExp(ge),!0))return s.linkHref}if(pe==="`"){var Oe=L.formatting;v.highlightFormatting&&(L.formatting="code"),q.eatWhile("`");var qe=q.current().length;if(L.code==0&&(!L.quote||qe==1))return L.code=qe,D(L);if(qe==L.code){var Se=D(L);return L.code=0,Se}else return L.formatting=Oe,D(L)}else if(L.code)return D(L);if(pe==="\\"&&(q.next(),v.highlightFormatting)){var je=D(L),Ze=s.formatting+"-escape";return je?je+" "+Ze:Ze}if(pe==="!"&&q.match(/\[[^\]]*\] ?(?:\(|\[)/,!1))return L.imageMarker=!0,L.image=!0,v.highlightFormatting&&(L.formatting="image"),D(L);if(pe==="["&&L.imageMarker&&q.match(/[^\]]*\](\(.*?\)| ?\[.*?\])/,!1))return L.imageMarker=!1,L.imageAltText=!0,v.highlightFormatting&&(L.formatting="image"),D(L);if(pe==="]"&&L.imageAltText){v.highlightFormatting&&(L.formatting="image");var je=D(L);return L.imageAltText=!1,L.image=!1,L.inline=L.f=_,je}if(pe==="["&&!L.image)return L.linkText&&q.match(/^.*?\]/)||(L.linkText=!0,v.highlightFormatting&&(L.formatting="link")),D(L);if(pe==="]"&&L.linkText){v.highlightFormatting&&(L.formatting="link");var je=D(L);return L.linkText=!1,L.inline=L.f=q.match(/\(.*?\)| ?\[.*?\]/,!1)?_:j,je}if(pe==="<"&&q.match(/^(https?|ftps?):\/\/(?:[^\\>]|\\.)+>/,!1)){L.f=L.inline=V,v.highlightFormatting&&(L.formatting="link");var je=D(L);return je?je+=" ":je="",je+s.linkInline}if(pe==="<"&&q.match(/^[^> \\]+@(?:[^\\>]|\\.)+>/,!1)){L.f=L.inline=V,v.highlightFormatting&&(L.formatting="link");var je=D(L);return je?je+=" ":je="",je+s.linkEmail}if(v.xml&&pe==="<"&&q.match(/^(!--|\?|!\[CDATA\[|[a-z][a-z0-9-]*(?:\s+[a-z_:.\-]+(?:\s*=\s*[^>]+)?)*\s*(?:>|$))/i,!1)){var ke=q.string.indexOf(">",q.pos);if(ke!=-1){var Je=q.string.substring(q.start,ke);/markdown\s*=\s*('|"){0,1}1('|"){0,1}/.test(Je)&&(L.md_inside=!0)}return q.backUp(1),L.htmlState=o.startState(C),H(q,L,N)}if(v.xml&&pe==="<"&&q.match(/^\/\w*?>/))return L.md_inside=!1,"tag";if(pe==="*"||pe==="_"){for(var He=1,Ge=q.pos==1?" ":q.string.charAt(q.pos-2);He<3&&q.eat(pe);)He++;var U=q.peek()||" ",G=!/\s/.test(U)&&(!y.test(U)||/\s/.test(Ge)||y.test(Ge)),ce=!/\s/.test(Ge)&&(!y.test(Ge)||/\s/.test(U)||y.test(U)),Be=null,te=null;if(He%2&&(!L.em&&G&&(pe==="*"||!ce||y.test(Ge))?Be=!0:L.em==pe&&ce&&(pe==="*"||!G||y.test(U))&&(Be=!1)),He>1&&(!L.strong&&G&&(pe==="*"||!ce||y.test(Ge))?te=!0:L.strong==pe&&ce&&(pe==="*"||!G||y.test(U))&&(te=!1)),te!=null||Be!=null){v.highlightFormatting&&(L.formatting=Be==null?"strong":te==null?"em":"strong em"),Be===!0&&(L.em=pe),te===!0&&(L.strong=pe);var Se=D(L);return Be===!1&&(L.em=!1),te===!1&&(L.strong=!1),Se}}else if(pe===" "&&(q.eat("*")||q.eat("_"))){if(q.peek()===" ")return D(L);q.backUp(1)}if(v.strikethrough){if(pe==="~"&&q.eatWhile(pe)){if(L.strikethrough){v.highlightFormatting&&(L.formatting="strikethrough");var Se=D(L);return L.strikethrough=!1,Se}else if(q.match(/^[^\s]/,!1))return L.strikethrough=!0,v.highlightFormatting&&(L.formatting="strikethrough"),D(L)}else if(pe===" "&&q.match("~~",!0)){if(q.peek()===" ")return D(L);q.backUp(2)}}if(v.emoji&&pe===":"&&q.match(/^(?:[a-z_\d+][a-z_\d+-]*|\-[a-z_\d+][a-z_\d+-]*):/)){L.emoji=!0,v.highlightFormatting&&(L.formatting="emoji");var fe=D(L);return L.emoji=!1,fe}return pe===" "&&(q.match(/^ +$/,!1)?L.trailingSpace++:L.trailingSpace&&(L.trailingSpaceNewLine=!0)),D(L)}function V(q,L){var de=q.next();if(de===">"){L.f=L.inline=j,v.highlightFormatting&&(L.formatting="link");var ze=D(L);return ze?ze+=" ":ze="",ze+s.linkInline}return q.match(/^[^>]+/,!0),s.linkInline}function _(q,L){if(q.eatSpace())return null;var de=q.next();return de==="("||de==="["?(L.f=L.inline=X(de==="("?")":"]"),v.highlightFormatting&&(L.formatting="link-string"),L.linkHref=!0,D(L)):"error"}var K={")":/^(?:[^\\\(\)]|\\.|\((?:[^\\\(\)]|\\.)*\))*?(?=\))/,"]":/^(?:[^\\\[\]]|\\.|\[(?:[^\\\[\]]|\\.)*\])*?(?=\])/};function X(q){return function(L,de){var ze=L.next();if(ze===q){de.f=de.inline=j,v.highlightFormatting&&(de.formatting="link-string");var pe=D(de);return de.linkHref=!1,pe}return L.match(K[q]),de.linkHref=!0,D(de)}}function I(q,L){return q.match(/^([^\]\\]|\\.)*\]:/,!1)?(L.f=B,q.next(),v.highlightFormatting&&(L.formatting="link"),L.linkText=!0,D(L)):M(q,L,j)}function B(q,L){if(q.match("]:",!0)){L.f=L.inline=le,v.highlightFormatting&&(L.formatting="link");var de=D(L);return L.linkText=!1,de}return q.match(/^([^\]\\]|\\.)+/,!0),s.linkText}function le(q,L){return q.eatSpace()?null:(q.match(/^[^\s]+/,!0),q.peek()===void 0?L.linkTitle=!0:q.match(/^(?:\s+(?:"(?:[^"\\]|\\.)+"|'(?:[^'\\]|\\.)+'|\((?:[^)\\]|\\.)+\)))?/,!0),L.f=L.inline=j,s.linkHref+" url")}var xe={startState:function(){return{f:re,prevLine:{stream:null},thisLine:{stream:null},block:re,htmlState:null,indentation:0,inline:j,text:Q,formatting:!1,linkText:!1,linkHref:!1,linkTitle:!1,code:0,em:!1,strong:!1,header:0,setext:0,hr:!1,taskList:!1,list:!1,listStack:[],quote:0,trailingSpace:0,trailingSpaceNewLine:!1,strikethrough:!1,emoji:!1,fencedEndRE:null}},copyState:function(q){return{f:q.f,prevLine:q.prevLine,thisLine:q.thisLine,block:q.block,htmlState:q.htmlState&&o.copyState(C,q.htmlState),indentation:q.indentation,localMode:q.localMode,localState:q.localMode?o.copyState(q.localMode,q.localState):null,inline:q.inline,text:q.text,formatting:!1,linkText:q.linkText,linkTitle:q.linkTitle,linkHref:q.linkHref,code:q.code,em:q.em,strong:q.strong,strikethrough:q.strikethrough,emoji:q.emoji,header:q.header,setext:q.setext,hr:q.hr,taskList:q.taskList,list:q.list,listStack:q.listStack.slice(0),quote:q.quote,indentedCode:q.indentedCode,trailingSpace:q.trailingSpace,trailingSpaceNewLine:q.trailingSpaceNewLine,md_inside:q.md_inside,fencedEndRE:q.fencedEndRE}},token:function(q,L){if(L.formatting=!1,q!=L.thisLine.stream){if(L.header=0,L.hr=!1,q.match(/^\s*$/,!0))return ee(L),null;if(L.prevLine=L.thisLine,L.thisLine={stream:q},L.taskList=!1,L.trailingSpace=0,L.trailingSpaceNewLine=!1,!L.localState&&(L.f=L.block,L.f!=N)){var de=q.match(/^\s*/,!0)[0].replace(/\t/g,R).length;if(L.indentation=de,L.indentationDiff=null,de>0)return null}}return L.f(q,L)},innerMode:function(q){return q.block==N?{state:q.htmlState,mode:C}:q.localState?{state:q.localState,mode:q.localMode}:{state:q,mode:xe}},indent:function(q,L,de){return q.block==N&&C.indent?C.indent(q.htmlState,L,de):q.localState&&q.localMode.indent?q.localMode.indent(q.localState,L,de):o.Pass},blankLine:ee,getType:D,blockCommentStart:"",closeBrackets:"()[]{}''\"\"``",fold:"markdown"};return xe},"xml"),o.defineMIME("text/markdown","markdown"),o.defineMIME("text/x-markdown","markdown")})});var eu=Ke((Vs,Js)=>{(function(o){typeof Vs=="object"&&typeof Js=="object"?o(We(),Jo(),Yn()):typeof define=="function"&&define.amd?define(["../../lib/codemirror","../markdown/markdown","../../addon/mode/overlay"],o):o(CodeMirror)})(function(o){"use strict";var p=/^((?:(?:aaas?|about|acap|adiumxtra|af[ps]|aim|apt|attachment|aw|beshare|bitcoin|bolo|callto|cap|chrome(?:-extension)?|cid|coap|com-eventbrite-attendee|content|crid|cvs|data|dav|dict|dlna-(?:playcontainer|playsingle)|dns|doi|dtn|dvb|ed2k|facetime|feed|file|finger|fish|ftp|geo|gg|git|gizmoproject|go|gopher|gtalk|h323|hcp|https?|iax|icap|icon|im|imap|info|ipn|ipp|irc[6s]?|iris(?:\.beep|\.lwz|\.xpc|\.xpcs)?|itms|jar|javascript|jms|keyparc|lastfm|ldaps?|magnet|mailto|maps|market|message|mid|mms|ms-help|msnim|msrps?|mtqp|mumble|mupdate|mvn|news|nfs|nih?|nntp|notes|oid|opaquelocktoken|palm|paparazzi|platform|pop|pres|proxy|psyc|query|res(?:ource)?|rmi|rsync|rtmp|rtsp|secondlife|service|session|sftp|sgn|shttp|sieve|sips?|skype|sm[bs]|snmp|soap\.beeps?|soldat|spotify|ssh|steam|svn|tag|teamspeak|tel(?:net)?|tftp|things|thismessage|tip|tn3270|tv|udp|unreal|urn|ut2004|vemmi|ventrilo|view-source|webcal|wss?|wtai|wyciwyg|xcon(?:-userid)?|xfire|xmlrpc\.beeps?|xmpp|xri|ymsgr|z39\.50[rs]?):(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]|\([^\s()<>]*\))+(?:\([^\s()<>]*\)|[^\s`*!()\[\]{};:'".,<>?«»“”‘’]))/i;o.defineMode("gfm",function(v,C){var b=0;function S(T){return T.code=!1,null}var s={startState:function(){return{code:!1,codeBlock:!1,ateSpace:!1}},copyState:function(T){return{code:T.code,codeBlock:T.codeBlock,ateSpace:T.ateSpace}},token:function(T,x){if(x.combineTokens=null,x.codeBlock)return T.match(/^```+/)?(x.codeBlock=!1,null):(T.skipToEnd(),null);if(T.sol()&&(x.code=!1),T.sol()&&T.match(/^```+/))return T.skipToEnd(),x.codeBlock=!0,null;if(T.peek()==="`"){T.next();var c=T.pos;T.eatWhile("`");var d=1+T.pos-c;return x.code?d===b&&(x.code=!1):(b=d,x.code=!0),null}else if(x.code)return T.next(),null;if(T.eatSpace())return x.ateSpace=!0,null;if((T.sol()||x.ateSpace)&&(x.ateSpace=!1,C.gitHubSpice!==!1)){if(T.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+@)?(?=.{0,6}\d)(?:[a-f0-9]{7,40}\b)/))return x.combineTokens=!0,"link";if(T.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+)?#[0-9]+\b/))return x.combineTokens=!0,"link"}return T.match(p)&&T.string.slice(T.start-2,T.start)!="]("&&(T.start==0||/\W/.test(T.string.charAt(T.start-1)))?(x.combineTokens=!0,"link"):(T.next(),null)},blankLine:S},h={taskLists:!0,strikethrough:!0,emoji:!0};for(var g in C)h[g]=C[g];return h.name="markdown",o.overlayMode(o.getMode(v,h),s)},"markdown"),o.defineMIME("text/x-gfm","gfm")})});var nu=Ke((tu,ru)=>{(function(o){typeof tu=="object"&&typeof ru=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";o.defineMode("go",function(p){var v=p.indentUnit,C={break:!0,case:!0,chan:!0,const:!0,continue:!0,default:!0,defer:!0,else:!0,fallthrough:!0,for:!0,func:!0,go:!0,goto:!0,if:!0,import:!0,interface:!0,map:!0,package:!0,range:!0,return:!0,select:!0,struct:!0,switch:!0,type:!0,var:!0,bool:!0,byte:!0,complex64:!0,complex128:!0,float32:!0,float64:!0,int8:!0,int16:!0,int32:!0,int64:!0,string:!0,uint8:!0,uint16:!0,uint32:!0,uint64:!0,int:!0,uint:!0,uintptr:!0,error:!0,rune:!0,any:!0,comparable:!0},b={true:!0,false:!0,iota:!0,nil:!0,append:!0,cap:!0,close:!0,complex:!0,copy:!0,delete:!0,imag:!0,len:!0,make:!0,new:!0,panic:!0,print:!0,println:!0,real:!0,recover:!0},S=/[+\-*&^%:=<>!|\/]/,s;function h(w,E){var z=w.next();if(z=='"'||z=="'"||z=="`")return E.tokenize=g(z),E.tokenize(w,E);if(/[\d\.]/.test(z))return z=="."?w.match(/^[0-9_]+([eE][\-+]?[0-9_]+)?/):z=="0"?w.match(/^[xX][0-9a-fA-F_]+/)||w.match(/^[0-7_]+/):w.match(/^[0-9_]*\.?[0-9_]*([eE][\-+]?[0-9_]+)?/),"number";if(/[\[\]{}\(\),;\:\.]/.test(z))return s=z,null;if(z=="/"){if(w.eat("*"))return E.tokenize=T,T(w,E);if(w.eat("/"))return w.skipToEnd(),"comment"}if(S.test(z))return w.eatWhile(S),"operator";w.eatWhile(/[\w\$_\xa1-\uffff]/);var y=w.current();return C.propertyIsEnumerable(y)?((y=="case"||y=="default")&&(s="case"),"keyword"):b.propertyIsEnumerable(y)?"atom":"variable"}function g(w){return function(E,z){for(var y=!1,R,M=!1;(R=E.next())!=null;){if(R==w&&!y){M=!0;break}y=!y&&w!="`"&&R=="\\"}return(M||!(y||w=="`"))&&(z.tokenize=h),"string"}}function T(w,E){for(var z=!1,y;y=w.next();){if(y=="/"&&z){E.tokenize=h;break}z=y=="*"}return"comment"}function x(w,E,z,y,R){this.indented=w,this.column=E,this.type=z,this.align=y,this.prev=R}function c(w,E,z){return w.context=new x(w.indented,E,z,null,w.context)}function d(w){if(w.context.prev){var E=w.context.type;return(E==")"||E=="]"||E=="}")&&(w.indented=w.context.indented),w.context=w.context.prev}}return{startState:function(w){return{tokenize:null,context:new x((w||0)-v,0,"top",!1),indented:0,startOfLine:!0}},token:function(w,E){var z=E.context;if(w.sol()&&(z.align==null&&(z.align=!1),E.indented=w.indentation(),E.startOfLine=!0,z.type=="case"&&(z.type="}")),w.eatSpace())return null;s=null;var y=(E.tokenize||h)(w,E);return y=="comment"||(z.align==null&&(z.align=!0),s=="{"?c(E,w.column(),"}"):s=="["?c(E,w.column(),"]"):s=="("?c(E,w.column(),")"):s=="case"?z.type="case":(s=="}"&&z.type=="}"||s==z.type)&&d(E),E.startOfLine=!1),y},indent:function(w,E){if(w.tokenize!=h&&w.tokenize!=null)return o.Pass;var z=w.context,y=E&&E.charAt(0);if(z.type=="case"&&/^(?:case|default)\b/.test(E))return w.context.type="}",z.indented;var R=y==z.type;return z.align?z.column+(R?0:1):z.indented+(R?0:v)},electricChars:"{}):",closeBrackets:"()[]{}''\"\"``",fold:"brace",blockCommentStart:"/*",blockCommentEnd:"*/",lineComment:"//"}}),o.defineMIME("text/x-go","go")})});var au=Ke((iu,ou)=>{(function(o){typeof iu=="object"&&typeof ou=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";o.defineMode("http",function(){function p(T,x){return T.skipToEnd(),x.cur=h,"error"}function v(T,x){return T.match(/^HTTP\/\d\.\d/)?(x.cur=C,"keyword"):T.match(/^[A-Z]+/)&&/[ \t]/.test(T.peek())?(x.cur=S,"keyword"):p(T,x)}function C(T,x){var c=T.match(/^\d+/);if(!c)return p(T,x);x.cur=b;var d=Number(c[0]);return d>=100&&d<200?"positive informational":d>=200&&d<300?"positive success":d>=300&&d<400?"positive redirect":d>=400&&d<500?"negative client-error":d>=500&&d<600?"negative server-error":"error"}function b(T,x){return T.skipToEnd(),x.cur=h,null}function S(T,x){return T.eatWhile(/\S/),x.cur=s,"string-2"}function s(T,x){return T.match(/^HTTP\/\d\.\d$/)?(x.cur=h,"keyword"):p(T,x)}function h(T){return T.sol()&&!T.eat(/[ \t]/)?T.match(/^.*?:/)?"atom":(T.skipToEnd(),"error"):(T.skipToEnd(),"string")}function g(T){return T.skipToEnd(),null}return{token:function(T,x){var c=x.cur;return c!=h&&c!=g&&T.eatSpace()?null:c(T,x)},blankLine:function(T){T.cur=g},startState:function(){return{cur:v}}}}),o.defineMIME("message/http","http")})});var uu=Ke((lu,su)=>{(function(o){typeof lu=="object"&&typeof su=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";o.defineMode("jinja2",function(){var p=["and","as","block","endblock","by","cycle","debug","else","elif","extends","filter","endfilter","firstof","do","for","endfor","if","endif","ifchanged","endifchanged","ifequal","endifequal","ifnotequal","set","raw","endraw","endifnotequal","in","include","load","not","now","or","parsed","regroup","reversed","spaceless","call","endcall","macro","endmacro","endspaceless","ssi","templatetag","openblock","closeblock","openvariable","closevariable","without","context","openbrace","closebrace","opencomment","closecomment","widthratio","url","with","endwith","get_current_language","trans","endtrans","noop","blocktrans","endblocktrans","get_available_languages","get_current_language_bidi","pluralize","autoescape","endautoescape"],v=/^[+\-*&%=<>!?|~^]/,C=/^[:\[\(\{]/,b=["true","false"],S=/^(\d[+\-\*\/])?\d+(\.\d+)?/;p=new RegExp("(("+p.join(")|(")+"))\\b"),b=new RegExp("(("+b.join(")|(")+"))\\b");function s(h,g){var T=h.peek();if(g.incomment)return h.skipTo("#}")?(h.eatWhile(/\#|}/),g.incomment=!1):h.skipToEnd(),"comment";if(g.intag){if(g.operator){if(g.operator=!1,h.match(b))return"atom";if(h.match(S))return"number"}if(g.sign){if(g.sign=!1,h.match(b))return"atom";if(h.match(S))return"number"}if(g.instring)return T==g.instring&&(g.instring=!1),h.next(),"string";if(T=="'"||T=='"')return g.instring=T,h.next(),"string";if(g.inbraces>0&&T==")")h.next(),g.inbraces--;else if(T=="(")h.next(),g.inbraces++;else if(g.inbrackets>0&&T=="]")h.next(),g.inbrackets--;else if(T=="[")h.next(),g.inbrackets++;else{if(!g.lineTag&&(h.match(g.intag+"}")||h.eat("-")&&h.match(g.intag+"}")))return g.intag=!1,"tag";if(h.match(v))return g.operator=!0,"operator";if(h.match(C))g.sign=!0;else{if(h.column()==1&&g.lineTag&&h.match(p))return"keyword";if(h.eat(" ")||h.sol()){if(h.match(p))return"keyword";if(h.match(b))return"atom";if(h.match(S))return"number";h.sol()&&h.next()}else h.next()}}return"variable"}else if(h.eat("{")){if(h.eat("#"))return g.incomment=!0,h.skipTo("#}")?(h.eatWhile(/\#|}/),g.incomment=!1):h.skipToEnd(),"comment";if(T=h.eat(/\{|%/))return g.intag=T,g.inbraces=0,g.inbrackets=0,T=="{"&&(g.intag="}"),h.eat("-"),"tag"}else if(h.eat("#")){if(h.peek()=="#")return h.skipToEnd(),"comment";if(!h.eol())return g.intag=!0,g.lineTag=!0,g.inbraces=0,g.inbrackets=0,"tag"}h.next()}return{startState:function(){return{tokenize:s,inbrackets:0,inbraces:0}},token:function(h,g){var T=g.tokenize(h,g);return h.eol()&&g.lineTag&&!g.instring&&g.inbraces==0&&g.inbrackets==0&&(g.intag=!1,g.lineTag=!1),T},blockCommentStart:"{#",blockCommentEnd:"#}",lineComment:"##"}}),o.defineMIME("text/jinja2","jinja2")})});var du=Ke((cu,fu)=>{(function(o){typeof cu=="object"&&typeof fu=="object"?o(We(),mn(),vn()):typeof define=="function"&&define.amd?define(["../../lib/codemirror","../xml/xml","../javascript/javascript"],o):o(CodeMirror)})(function(o){"use strict";function p(C,b,S,s){this.state=C,this.mode=b,this.depth=S,this.prev=s}function v(C){return new p(o.copyState(C.mode,C.state),C.mode,C.depth,C.prev&&v(C.prev))}o.defineMode("jsx",function(C,b){var S=o.getMode(C,{name:"xml",allowMissing:!0,multilineTagIndentPastTag:!1,allowMissingTagName:!0}),s=o.getMode(C,b&&b.base||"javascript");function h(c){var d=c.tagName;c.tagName=null;var w=S.indent(c,"","");return c.tagName=d,w}function g(c,d){return d.context.mode==S?T(c,d,d.context):x(c,d,d.context)}function T(c,d,w){if(w.depth==2)return c.match(/^.*?\*\//)?w.depth=1:c.skipToEnd(),"comment";if(c.peek()=="{"){S.skipAttribute(w.state);var E=h(w.state),z=w.state.context;if(z&&c.match(/^[^>]*>\s*$/,!1)){for(;z.prev&&!z.startOfLine;)z=z.prev;z.startOfLine?E-=C.indentUnit:w.prev.state.lexical&&(E=w.prev.state.lexical.indented)}else w.depth==1&&(E+=C.indentUnit);return d.context=new p(o.startState(s,E),s,0,d.context),null}if(w.depth==1){if(c.peek()=="<")return S.skipAttribute(w.state),d.context=new p(o.startState(S,h(w.state)),S,0,d.context),null;if(c.match("//"))return c.skipToEnd(),"comment";if(c.match("/*"))return w.depth=2,g(c,d)}var y=S.token(c,w.state),R=c.current(),M;return/\btag\b/.test(y)?/>$/.test(R)?w.state.context?w.depth=0:d.context=d.context.prev:/^-1&&c.backUp(R.length-M),y}function x(c,d,w){if(c.peek()=="<"&&!c.match(/^<([^<>]|<[^>]*>)+,\s*>/,!1)&&s.expressionAllowed(c,w.state))return d.context=new p(o.startState(S,s.indent(w.state,"","")),S,0,d.context),s.skipExpression(w.state),null;var E=s.token(c,w.state);if(!E&&w.depth!=null){var z=c.current();z=="{"?w.depth++:z=="}"&&--w.depth==0&&(d.context=d.context.prev)}return E}return{startState:function(){return{context:new p(o.startState(s),s)}},copyState:function(c){return{context:v(c.context)}},token:g,indent:function(c,d,w){return c.context.mode.indent(c.context.state,d,w)},innerMode:function(c){return c.context}}},"xml","javascript"),o.defineMIME("text/jsx","jsx"),o.defineMIME("text/typescript-jsx",{name:"jsx",base:{name:"javascript",typescript:!0}})})});var gu=Ke((pu,hu)=>{(function(o){typeof pu=="object"&&typeof hu=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";o.defineMode("nginx",function(p){function v(w){for(var E={},z=w.split(" "),y=0;y*\/]/.test(y)?g(null,"select-op"):/[;{}:\[\]]/.test(y)?g(null,y):(w.eatWhile(/[\w\\\-]/),g("variable","variable"))}function x(w,E){for(var z=!1,y;(y=w.next())!=null;){if(z&&y=="/"){E.tokenize=T;break}z=y=="*"}return g("comment","comment")}function c(w,E){for(var z=0,y;(y=w.next())!=null;){if(z>=2&&y==">"){E.tokenize=T;break}z=y=="-"?z+1:0}return g("comment","comment")}function d(w){return function(E,z){for(var y=!1,R;(R=E.next())!=null&&!(R==w&&!y);)y=!y&&R=="\\";return y||(z.tokenize=T),g("string","string")}}return{startState:function(w){return{tokenize:T,baseIndent:w||0,stack:[]}},token:function(w,E){if(w.eatSpace())return null;h=null;var z=E.tokenize(w,E),y=E.stack[E.stack.length-1];return h=="hash"&&y=="rule"?z="atom":z=="variable"&&(y=="rule"?z="number":(!y||y=="@media{")&&(z="tag")),y=="rule"&&/^[\{\};]$/.test(h)&&E.stack.pop(),h=="{"?y=="@media"?E.stack[E.stack.length-1]="@media{":E.stack.push("{"):h=="}"?E.stack.pop():h=="@media"?E.stack.push("@media"):y=="{"&&h!="comment"&&E.stack.push("rule"),z},indent:function(w,E){var z=w.stack.length;return/^\}/.test(E)&&(z-=w.stack[w.stack.length-1]=="rule"?2:1),w.baseIndent+z*s},electricChars:"}"}}),o.defineMIME("text/x-nginx-conf","nginx")})});var bu=Ke((mu,vu)=>{(function(o){typeof mu=="object"&&typeof vu=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";o.defineMode("pascal",function(){function p(T){for(var x={},c=T.split(" "),d=0;d!?|\/]/;function S(T,x){var c=T.next();if(c=="#"&&x.startOfLine)return T.skipToEnd(),"meta";if(c=='"'||c=="'")return x.tokenize=s(c),x.tokenize(T,x);if(c=="("&&T.eat("*"))return x.tokenize=h,h(T,x);if(c=="{")return x.tokenize=g,g(T,x);if(/[\[\]\(\),;\:\.]/.test(c))return null;if(/\d/.test(c))return T.eatWhile(/[\w\.]/),"number";if(c=="/"&&T.eat("/"))return T.skipToEnd(),"comment";if(b.test(c))return T.eatWhile(b),"operator";T.eatWhile(/[\w\$_]/);var d=T.current();return v.propertyIsEnumerable(d)?"keyword":C.propertyIsEnumerable(d)?"atom":"variable"}function s(T){return function(x,c){for(var d=!1,w,E=!1;(w=x.next())!=null;){if(w==T&&!d){E=!0;break}d=!d&&w=="\\"}return(E||!d)&&(c.tokenize=null),"string"}}function h(T,x){for(var c=!1,d;d=T.next();){if(d==")"&&c){x.tokenize=null;break}c=d=="*"}return"comment"}function g(T,x){for(var c;c=T.next();)if(c=="}"){x.tokenize=null;break}return"comment"}return{startState:function(){return{tokenize:null}},token:function(T,x){if(T.eatSpace())return null;var c=(x.tokenize||S)(T,x);return c=="comment"||c=="meta",c},electricChars:"{}"}}),o.defineMIME("text/x-pascal","pascal")})});var _u=Ke((yu,xu)=>{(function(o){typeof yu=="object"&&typeof xu=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";o.defineMode("perl",function(){var S={"->":4,"++":4,"--":4,"**":4,"=~":4,"!~":4,"*":4,"/":4,"%":4,x:4,"+":4,"-":4,".":4,"<<":4,">>":4,"<":4,">":4,"<=":4,">=":4,lt:4,gt:4,le:4,ge:4,"==":4,"!=":4,"<=>":4,eq:4,ne:4,cmp:4,"~~":4,"&":4,"|":4,"^":4,"&&":4,"||":4,"//":4,"..":4,"...":4,"?":4,":":4,"=":4,"+=":4,"-=":4,"*=":4,",":4,"=>":4,"::":4,not:4,and:4,or:4,xor:4,BEGIN:[5,1],END:[5,1],PRINT:[5,1],PRINTF:[5,1],GETC:[5,1],READ:[5,1],READLINE:[5,1],DESTROY:[5,1],TIE:[5,1],TIEHANDLE:[5,1],UNTIE:[5,1],STDIN:5,STDIN_TOP:5,STDOUT:5,STDOUT_TOP:5,STDERR:5,STDERR_TOP:5,$ARG:5,$_:5,"@ARG":5,"@_":5,$LIST_SEPARATOR:5,'$"':5,$PROCESS_ID:5,$PID:5,$$:5,$REAL_GROUP_ID:5,$GID:5,"$(":5,$EFFECTIVE_GROUP_ID:5,$EGID:5,"$)":5,$PROGRAM_NAME:5,$0:5,$SUBSCRIPT_SEPARATOR:5,$SUBSEP:5,"$;":5,$REAL_USER_ID:5,$UID:5,"$<":5,$EFFECTIVE_USER_ID:5,$EUID:5,"$>":5,$a:5,$b:5,$COMPILING:5,"$^C":5,$DEBUGGING:5,"$^D":5,"${^ENCODING}":5,$ENV:5,"%ENV":5,$SYSTEM_FD_MAX:5,"$^F":5,"@F":5,"${^GLOBAL_PHASE}":5,"$^H":5,"%^H":5,"@INC":5,"%INC":5,$INPLACE_EDIT:5,"$^I":5,"$^M":5,$OSNAME:5,"$^O":5,"${^OPEN}":5,$PERLDB:5,"$^P":5,$SIG:5,"%SIG":5,$BASETIME:5,"$^T":5,"${^TAINT}":5,"${^UNICODE}":5,"${^UTF8CACHE}":5,"${^UTF8LOCALE}":5,$PERL_VERSION:5,"$^V":5,"${^WIN32_SLOPPY_STAT}":5,$EXECUTABLE_NAME:5,"$^X":5,$1:5,$MATCH:5,"$&":5,"${^MATCH}":5,$PREMATCH:5,"$`":5,"${^PREMATCH}":5,$POSTMATCH:5,"$'":5,"${^POSTMATCH}":5,$LAST_PAREN_MATCH:5,"$+":5,$LAST_SUBMATCH_RESULT:5,"$^N":5,"@LAST_MATCH_END":5,"@+":5,"%LAST_PAREN_MATCH":5,"%+":5,"@LAST_MATCH_START":5,"@-":5,"%LAST_MATCH_START":5,"%-":5,$LAST_REGEXP_CODE_RESULT:5,"$^R":5,"${^RE_DEBUG_FLAGS}":5,"${^RE_TRIE_MAXBUF}":5,$ARGV:5,"@ARGV":5,ARGV:5,ARGVOUT:5,$OUTPUT_FIELD_SEPARATOR:5,$OFS:5,"$,":5,$INPUT_LINE_NUMBER:5,$NR:5,"$.":5,$INPUT_RECORD_SEPARATOR:5,$RS:5,"$/":5,$OUTPUT_RECORD_SEPARATOR:5,$ORS:5,"$\\":5,$OUTPUT_AUTOFLUSH:5,"$|":5,$ACCUMULATOR:5,"$^A":5,$FORMAT_FORMFEED:5,"$^L":5,$FORMAT_PAGE_NUMBER:5,"$%":5,$FORMAT_LINES_LEFT:5,"$-":5,$FORMAT_LINE_BREAK_CHARACTERS:5,"$:":5,$FORMAT_LINES_PER_PAGE:5,"$=":5,$FORMAT_TOP_NAME:5,"$^":5,$FORMAT_NAME:5,"$~":5,"${^CHILD_ERROR_NATIVE}":5,$EXTENDED_OS_ERROR:5,"$^E":5,$EXCEPTIONS_BEING_CAUGHT:5,"$^S":5,$WARNING:5,"$^W":5,"${^WARNING_BITS}":5,$OS_ERROR:5,$ERRNO:5,"$!":5,"%OS_ERROR":5,"%ERRNO":5,"%!":5,$CHILD_ERROR:5,"$?":5,$EVAL_ERROR:5,"$@":5,$OFMT:5,"$#":5,"$*":5,$ARRAY_BASE:5,"$[":5,$OLD_PERL_VERSION:5,"$]":5,if:[1,1],elsif:[1,1],else:[1,1],while:[1,1],unless:[1,1],for:[1,1],foreach:[1,1],abs:1,accept:1,alarm:1,atan2:1,bind:1,binmode:1,bless:1,bootstrap:1,break:1,caller:1,chdir:1,chmod:1,chomp:1,chop:1,chown:1,chr:1,chroot:1,close:1,closedir:1,connect:1,continue:[1,1],cos:1,crypt:1,dbmclose:1,dbmopen:1,default:1,defined:1,delete:1,die:1,do:1,dump:1,each:1,endgrent:1,endhostent:1,endnetent:1,endprotoent:1,endpwent:1,endservent:1,eof:1,eval:1,exec:1,exists:1,exit:1,exp:1,fcntl:1,fileno:1,flock:1,fork:1,format:1,formline:1,getc:1,getgrent:1,getgrgid:1,getgrnam:1,gethostbyaddr:1,gethostbyname:1,gethostent:1,getlogin:1,getnetbyaddr:1,getnetbyname:1,getnetent:1,getpeername:1,getpgrp:1,getppid:1,getpriority:1,getprotobyname:1,getprotobynumber:1,getprotoent:1,getpwent:1,getpwnam:1,getpwuid:1,getservbyname:1,getservbyport:1,getservent:1,getsockname:1,getsockopt:1,given:1,glob:1,gmtime:1,goto:1,grep:1,hex:1,import:1,index:1,int:1,ioctl:1,join:1,keys:1,kill:1,last:1,lc:1,lcfirst:1,length:1,link:1,listen:1,local:2,localtime:1,lock:1,log:1,lstat:1,m:null,map:1,mkdir:1,msgctl:1,msgget:1,msgrcv:1,msgsnd:1,my:2,new:1,next:1,no:1,oct:1,open:1,opendir:1,ord:1,our:2,pack:1,package:1,pipe:1,pop:1,pos:1,print:1,printf:1,prototype:1,push:1,q:null,qq:null,qr:null,quotemeta:null,qw:null,qx:null,rand:1,read:1,readdir:1,readline:1,readlink:1,readpipe:1,recv:1,redo:1,ref:1,rename:1,require:1,reset:1,return:1,reverse:1,rewinddir:1,rindex:1,rmdir:1,s:null,say:1,scalar:1,seek:1,seekdir:1,select:1,semctl:1,semget:1,semop:1,send:1,setgrent:1,sethostent:1,setnetent:1,setpgrp:1,setpriority:1,setprotoent:1,setpwent:1,setservent:1,setsockopt:1,shift:1,shmctl:1,shmget:1,shmread:1,shmwrite:1,shutdown:1,sin:1,sleep:1,socket:1,socketpair:1,sort:1,splice:1,split:1,sprintf:1,sqrt:1,srand:1,stat:1,state:1,study:1,sub:1,substr:1,symlink:1,syscall:1,sysopen:1,sysread:1,sysseek:1,system:1,syswrite:1,tell:1,telldir:1,tie:1,tied:1,time:1,times:1,tr:null,truncate:1,uc:1,ucfirst:1,umask:1,undef:1,unlink:1,unpack:1,unshift:1,untie:1,use:1,utime:1,values:1,vec:1,wait:1,waitpid:1,wantarray:1,warn:1,when:1,write:1,y:null},s="string-2",h=/[goseximacplud]/;function g(c,d,w,E,z){return d.chain=null,d.style=null,d.tail=null,d.tokenize=function(y,R){for(var M=!1,H,Z=0;H=y.next();){if(H===w[Z]&&!M)return w[++Z]!==void 0?(R.chain=w[Z],R.style=E,R.tail=z):z&&y.eatWhile(z),R.tokenize=x,E;M=!M&&H=="\\"}return E},d.tokenize(c,d)}function T(c,d,w){return d.tokenize=function(E,z){return E.string==w&&(z.tokenize=x),E.skipToEnd(),"string"},d.tokenize(c,d)}function x(c,d){if(c.eatSpace())return null;if(d.chain)return g(c,d,d.chain,d.style,d.tail);if(c.match(/^(\-?((\d[\d_]*)?\.\d+(e[+-]?\d+)?|\d+\.\d*)|0x[\da-fA-F_]+|0b[01_]+|\d[\d_]*(e[+-]?\d+)?)/))return"number";if(c.match(/^<<(?=[_a-zA-Z])/))return c.eatWhile(/\w/),T(c,d,c.current().substr(2));if(c.sol()&&c.match(/^\=item(?!\w)/))return T(c,d,"=cut");var w=c.next();if(w=='"'||w=="'"){if(v(c,3)=="<<"+w){var E=c.pos;c.eatWhile(/\w/);var z=c.current().substr(1);if(z&&c.eat(w))return T(c,d,z);c.pos=E}return g(c,d,[w],"string")}if(w=="q"){var y=p(c,-2);if(!(y&&/\w/.test(y))){if(y=p(c,0),y=="x"){if(y=p(c,1),y=="(")return b(c,2),g(c,d,[")"],s,h);if(y=="[")return b(c,2),g(c,d,["]"],s,h);if(y=="{")return b(c,2),g(c,d,["}"],s,h);if(y=="<")return b(c,2),g(c,d,[">"],s,h);if(/[\^'"!~\/]/.test(y))return b(c,1),g(c,d,[c.eat(y)],s,h)}else if(y=="q"){if(y=p(c,1),y=="(")return b(c,2),g(c,d,[")"],"string");if(y=="[")return b(c,2),g(c,d,["]"],"string");if(y=="{")return b(c,2),g(c,d,["}"],"string");if(y=="<")return b(c,2),g(c,d,[">"],"string");if(/[\^'"!~\/]/.test(y))return b(c,1),g(c,d,[c.eat(y)],"string")}else if(y=="w"){if(y=p(c,1),y=="(")return b(c,2),g(c,d,[")"],"bracket");if(y=="[")return b(c,2),g(c,d,["]"],"bracket");if(y=="{")return b(c,2),g(c,d,["}"],"bracket");if(y=="<")return b(c,2),g(c,d,[">"],"bracket");if(/[\^'"!~\/]/.test(y))return b(c,1),g(c,d,[c.eat(y)],"bracket")}else if(y=="r"){if(y=p(c,1),y=="(")return b(c,2),g(c,d,[")"],s,h);if(y=="[")return b(c,2),g(c,d,["]"],s,h);if(y=="{")return b(c,2),g(c,d,["}"],s,h);if(y=="<")return b(c,2),g(c,d,[">"],s,h);if(/[\^'"!~\/]/.test(y))return b(c,1),g(c,d,[c.eat(y)],s,h)}else if(/[\^'"!~\/(\[{<]/.test(y)){if(y=="(")return b(c,1),g(c,d,[")"],"string");if(y=="[")return b(c,1),g(c,d,["]"],"string");if(y=="{")return b(c,1),g(c,d,["}"],"string");if(y=="<")return b(c,1),g(c,d,[">"],"string");if(/[\^'"!~\/]/.test(y))return g(c,d,[c.eat(y)],"string")}}}if(w=="m"){var y=p(c,-2);if(!(y&&/\w/.test(y))&&(y=c.eat(/[(\[{<\^'"!~\/]/),y)){if(/[\^'"!~\/]/.test(y))return g(c,d,[y],s,h);if(y=="(")return g(c,d,[")"],s,h);if(y=="[")return g(c,d,["]"],s,h);if(y=="{")return g(c,d,["}"],s,h);if(y=="<")return g(c,d,[">"],s,h)}}if(w=="s"){var y=/[\/>\]})\w]/.test(p(c,-2));if(!y&&(y=c.eat(/[(\[{<\^'"!~\/]/),y))return y=="["?g(c,d,["]","]"],s,h):y=="{"?g(c,d,["}","}"],s,h):y=="<"?g(c,d,[">",">"],s,h):y=="("?g(c,d,[")",")"],s,h):g(c,d,[y,y],s,h)}if(w=="y"){var y=/[\/>\]})\w]/.test(p(c,-2));if(!y&&(y=c.eat(/[(\[{<\^'"!~\/]/),y))return y=="["?g(c,d,["]","]"],s,h):y=="{"?g(c,d,["}","}"],s,h):y=="<"?g(c,d,[">",">"],s,h):y=="("?g(c,d,[")",")"],s,h):g(c,d,[y,y],s,h)}if(w=="t"){var y=/[\/>\]})\w]/.test(p(c,-2));if(!y&&(y=c.eat("r"),y&&(y=c.eat(/[(\[{<\^'"!~\/]/),y)))return y=="["?g(c,d,["]","]"],s,h):y=="{"?g(c,d,["}","}"],s,h):y=="<"?g(c,d,[">",">"],s,h):y=="("?g(c,d,[")",")"],s,h):g(c,d,[y,y],s,h)}if(w=="`")return g(c,d,[w],"variable-2");if(w=="/")return/~\s*$/.test(v(c))?g(c,d,[w],s,h):"operator";if(w=="$"){var E=c.pos;if(c.eatWhile(/\d/)||c.eat("{")&&c.eatWhile(/\d/)&&c.eat("}"))return"variable-2";c.pos=E}if(/[$@%]/.test(w)){var E=c.pos;if(c.eat("^")&&c.eat(/[A-Z]/)||!/[@$%&]/.test(p(c,-2))&&c.eat(/[=|\\\-#?@;:&`~\^!\[\]*'"$+.,\/<>()]/)){var y=c.current();if(S[y])return"variable-2"}c.pos=E}if(/[$@%&]/.test(w)&&(c.eatWhile(/[\w$]/)||c.eat("{")&&c.eatWhile(/[\w$]/)&&c.eat("}"))){var y=c.current();return S[y]?"variable-2":"variable"}if(w=="#"&&p(c,-2)!="$")return c.skipToEnd(),"comment";if(/[:+\-\^*$&%@=<>!?|\/~\.]/.test(w)){var E=c.pos;if(c.eatWhile(/[:+\-\^*$&%@=<>!?|\/~\.]/),S[c.current()])return"operator";c.pos=E}if(w=="_"&&c.pos==1){if(C(c,6)=="_END__")return g(c,d,["\0"],"comment");if(C(c,7)=="_DATA__")return g(c,d,["\0"],"variable-2");if(C(c,7)=="_C__")return g(c,d,["\0"],"string")}if(/\w/.test(w)){var E=c.pos;if(p(c,-2)=="{"&&(p(c,0)=="}"||c.eatWhile(/\w/)&&p(c,0)=="}"))return"string";c.pos=E}if(/[A-Z]/.test(w)){var R=p(c,-2),E=c.pos;if(c.eatWhile(/[A-Z_]/),/[\da-z]/.test(p(c,0)))c.pos=E;else{var y=S[c.current()];return y?(y[1]&&(y=y[0]),R!=":"?y==1?"keyword":y==2?"def":y==3?"atom":y==4?"operator":y==5?"variable-2":"meta":"meta"):"meta"}}if(/[a-zA-Z_]/.test(w)){var R=p(c,-2);c.eatWhile(/\w/);var y=S[c.current()];return y?(y[1]&&(y=y[0]),R!=":"?y==1?"keyword":y==2?"def":y==3?"atom":y==4?"operator":y==5?"variable-2":"meta":"meta"):"meta"}return null}return{startState:function(){return{tokenize:x,chain:null,style:null,tail:null}},token:function(c,d){return(d.tokenize||x)(c,d)},lineComment:"#"}}),o.registerHelper("wordChars","perl",/[\w$]/),o.defineMIME("text/x-perl","perl");function p(S,s){return S.string.charAt(S.pos+(s||0))}function v(S,s){if(s){var h=S.pos-s;return S.string.substr(h>=0?h:0,s)}else return S.string.substr(0,S.pos-1)}function C(S,s){var h=S.string.length,g=h-S.pos+1;return S.string.substr(S.pos,s&&s=(g=S.string.length-1)?S.pos=g:S.pos=h}})});var Su=Ke((ku,wu)=>{(function(o){typeof ku=="object"&&typeof wu=="object"?o(We(),Qn(),Vo()):typeof define=="function"&&define.amd?define(["../../lib/codemirror","../htmlmixed/htmlmixed","../clike/clike"],o):o(CodeMirror)})(function(o){"use strict";function p(T){for(var x={},c=T.split(" "),d=0;d\w/,!1)&&(x.tokenize=v([[["->",null]],[[/[\w]+/,"variable"]]],c,d)),"variable-2";for(var w=!1;!T.eol()&&(w||d===!1||!T.match("{$",!1)&&!T.match(/^(\$[a-zA-Z_][a-zA-Z0-9_]*|\$\{)/,!1));){if(!w&&T.match(c)){x.tokenize=null,x.tokStack.pop(),x.tokStack.pop();break}w=T.next()=="\\"&&!w}return"string"}var S="abstract and array as break case catch class clone const continue declare default do else elseif enddeclare endfor endforeach endif endswitch endwhile enum extends final for foreach function global goto if implements interface instanceof namespace new or private protected public static switch throw trait try use var while xor die echo empty exit eval include include_once isset list require require_once return print unset __halt_compiler self static parent yield insteadof finally readonly match",s="true false null TRUE FALSE NULL __CLASS__ __DIR__ __FILE__ __LINE__ __METHOD__ __FUNCTION__ __NAMESPACE__ __TRAIT__",h="func_num_args func_get_arg func_get_args strlen strcmp strncmp strcasecmp strncasecmp each error_reporting define defined trigger_error user_error set_error_handler restore_error_handler get_declared_classes get_loaded_extensions extension_loaded get_extension_funcs debug_backtrace constant bin2hex hex2bin sleep usleep time mktime gmmktime strftime gmstrftime strtotime date gmdate getdate localtime checkdate flush wordwrap htmlspecialchars htmlentities html_entity_decode md5 md5_file crc32 getimagesize image_type_to_mime_type phpinfo phpversion phpcredits strnatcmp strnatcasecmp substr_count strspn strcspn strtok strtoupper strtolower strpos strrpos strrev hebrev hebrevc nl2br basename dirname pathinfo stripslashes stripcslashes strstr stristr strrchr str_shuffle str_word_count strcoll substr substr_replace quotemeta ucfirst ucwords strtr addslashes addcslashes rtrim str_replace str_repeat count_chars chunk_split trim ltrim strip_tags similar_text explode implode setlocale localeconv parse_str str_pad chop strchr sprintf printf vprintf vsprintf sscanf fscanf parse_url urlencode urldecode rawurlencode rawurldecode readlink linkinfo link unlink exec system escapeshellcmd escapeshellarg passthru shell_exec proc_open proc_close rand srand getrandmax mt_rand mt_srand mt_getrandmax base64_decode base64_encode abs ceil floor round is_finite is_nan is_infinite bindec hexdec octdec decbin decoct dechex base_convert number_format fmod ip2long long2ip getenv putenv getopt microtime gettimeofday getrusage uniqid quoted_printable_decode set_time_limit get_cfg_var magic_quotes_runtime set_magic_quotes_runtime get_magic_quotes_gpc get_magic_quotes_runtime import_request_variables error_log serialize unserialize memory_get_usage memory_get_peak_usage var_dump var_export debug_zval_dump print_r highlight_file show_source highlight_string ini_get ini_get_all ini_set ini_alter ini_restore get_include_path set_include_path restore_include_path setcookie header headers_sent connection_aborted connection_status ignore_user_abort parse_ini_file is_uploaded_file move_uploaded_file intval floatval doubleval strval gettype settype is_null is_resource is_bool is_long is_float is_int is_integer is_double is_real is_numeric is_string is_array is_object is_scalar ereg ereg_replace eregi eregi_replace split spliti join sql_regcase dl pclose popen readfile rewind rmdir umask fclose feof fgetc fgets fgetss fread fopen fpassthru ftruncate fstat fseek ftell fflush fwrite fputs mkdir rename copy tempnam tmpfile file file_get_contents file_put_contents stream_select stream_context_create stream_context_set_params stream_context_set_option stream_context_get_options stream_filter_prepend stream_filter_append fgetcsv flock get_meta_tags stream_set_write_buffer set_file_buffer set_socket_blocking stream_set_blocking socket_set_blocking stream_get_meta_data stream_register_wrapper stream_wrapper_register stream_set_timeout socket_set_timeout socket_get_status realpath fnmatch fsockopen pfsockopen pack unpack get_browser crypt opendir closedir chdir getcwd rewinddir readdir dir glob fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype file_exists is_writable is_writeable is_readable is_executable is_file is_dir is_link stat lstat chown touch clearstatcache mail ob_start ob_flush ob_clean ob_end_flush ob_end_clean ob_get_flush ob_get_clean ob_get_length ob_get_level ob_get_status ob_get_contents ob_implicit_flush ob_list_handlers ksort krsort natsort natcasesort asort arsort sort rsort usort uasort uksort shuffle array_walk count end prev next reset current key min max in_array array_search extract compact array_fill range array_multisort array_push array_pop array_shift array_unshift array_splice array_slice array_merge array_merge_recursive array_keys array_values array_count_values array_reverse array_reduce array_pad array_flip array_change_key_case array_rand array_unique array_intersect array_intersect_assoc array_diff array_diff_assoc array_sum array_filter array_map array_chunk array_key_exists array_intersect_key array_combine array_column pos sizeof key_exists assert assert_options version_compare ftok str_rot13 aggregate session_name session_module_name session_save_path session_id session_regenerate_id session_decode session_register session_unregister session_is_registered session_encode session_start session_destroy session_unset session_set_save_handler session_cache_limiter session_cache_expire session_set_cookie_params session_get_cookie_params session_write_close preg_match preg_match_all preg_replace preg_replace_callback preg_split preg_quote preg_grep overload ctype_alnum ctype_alpha ctype_cntrl ctype_digit ctype_lower ctype_graph ctype_print ctype_punct ctype_space ctype_upper ctype_xdigit virtual apache_request_headers apache_note apache_lookup_uri apache_child_terminate apache_setenv apache_response_headers apache_get_version getallheaders mysql_connect mysql_pconnect mysql_close mysql_select_db mysql_create_db mysql_drop_db mysql_query mysql_unbuffered_query mysql_db_query mysql_list_dbs mysql_list_tables mysql_list_fields mysql_list_processes mysql_error mysql_errno mysql_affected_rows mysql_insert_id mysql_result mysql_num_rows mysql_num_fields mysql_fetch_row mysql_fetch_array mysql_fetch_assoc mysql_fetch_object mysql_data_seek mysql_fetch_lengths mysql_fetch_field mysql_field_seek mysql_free_result mysql_field_name mysql_field_table mysql_field_len mysql_field_type mysql_field_flags mysql_escape_string mysql_real_escape_string mysql_stat mysql_thread_id mysql_client_encoding mysql_get_client_info mysql_get_host_info mysql_get_proto_info mysql_get_server_info mysql_info mysql mysql_fieldname mysql_fieldtable mysql_fieldlen mysql_fieldtype mysql_fieldflags mysql_selectdb mysql_createdb mysql_dropdb mysql_freeresult mysql_numfields mysql_numrows mysql_listdbs mysql_listtables mysql_listfields mysql_db_name mysql_dbname mysql_tablename mysql_table_name pg_connect pg_pconnect pg_close pg_connection_status pg_connection_busy pg_connection_reset pg_host pg_dbname pg_port pg_tty pg_options pg_ping pg_query pg_send_query pg_cancel_query pg_fetch_result pg_fetch_row pg_fetch_assoc pg_fetch_array pg_fetch_object pg_fetch_all pg_affected_rows pg_get_result pg_result_seek pg_result_status pg_free_result pg_last_oid pg_num_rows pg_num_fields pg_field_name pg_field_num pg_field_size pg_field_type pg_field_prtlen pg_field_is_null pg_get_notify pg_get_pid pg_result_error pg_last_error pg_last_notice pg_put_line pg_end_copy pg_copy_to pg_copy_from pg_trace pg_untrace pg_lo_create pg_lo_unlink pg_lo_open pg_lo_close pg_lo_read pg_lo_write pg_lo_read_all pg_lo_import pg_lo_export pg_lo_seek pg_lo_tell pg_escape_string pg_escape_bytea pg_unescape_bytea pg_client_encoding pg_set_client_encoding pg_meta_data pg_convert pg_insert pg_update pg_delete pg_select pg_exec pg_getlastoid pg_cmdtuples pg_errormessage pg_numrows pg_numfields pg_fieldname pg_fieldsize pg_fieldtype pg_fieldnum pg_fieldprtlen pg_fieldisnull pg_freeresult pg_result pg_loreadall pg_locreate pg_lounlink pg_loopen pg_loclose pg_loread pg_lowrite pg_loimport pg_loexport http_response_code get_declared_traits getimagesizefromstring socket_import_stream stream_set_chunk_size trait_exists header_register_callback class_uses session_status session_register_shutdown echo print global static exit array empty eval isset unset die include require include_once require_once json_decode json_encode json_last_error json_last_error_msg curl_close curl_copy_handle curl_errno curl_error curl_escape curl_exec curl_file_create curl_getinfo curl_init curl_multi_add_handle curl_multi_close curl_multi_exec curl_multi_getcontent curl_multi_info_read curl_multi_init curl_multi_remove_handle curl_multi_select curl_multi_setopt curl_multi_strerror curl_pause curl_reset curl_setopt_array curl_setopt curl_share_close curl_share_init curl_share_setopt curl_strerror curl_unescape curl_version mysqli_affected_rows mysqli_autocommit mysqli_change_user mysqli_character_set_name mysqli_close mysqli_commit mysqli_connect_errno mysqli_connect_error mysqli_connect mysqli_data_seek mysqli_debug mysqli_dump_debug_info mysqli_errno mysqli_error_list mysqli_error mysqli_fetch_all mysqli_fetch_array mysqli_fetch_assoc mysqli_fetch_field_direct mysqli_fetch_field mysqli_fetch_fields mysqli_fetch_lengths mysqli_fetch_object mysqli_fetch_row mysqli_field_count mysqli_field_seek mysqli_field_tell mysqli_free_result mysqli_get_charset mysqli_get_client_info mysqli_get_client_stats mysqli_get_client_version mysqli_get_connection_stats mysqli_get_host_info mysqli_get_proto_info mysqli_get_server_info mysqli_get_server_version mysqli_info mysqli_init mysqli_insert_id mysqli_kill mysqli_more_results mysqli_multi_query mysqli_next_result mysqli_num_fields mysqli_num_rows mysqli_options mysqli_ping mysqli_prepare mysqli_query mysqli_real_connect mysqli_real_escape_string mysqli_real_query mysqli_reap_async_query mysqli_refresh mysqli_rollback mysqli_select_db mysqli_set_charset mysqli_set_local_infile_default mysqli_set_local_infile_handler mysqli_sqlstate mysqli_ssl_set mysqli_stat mysqli_stmt_init mysqli_store_result mysqli_thread_id mysqli_thread_safe mysqli_use_result mysqli_warning_count";o.registerHelper("hintWords","php",[S,s,h].join(" ").split(" ")),o.registerHelper("wordChars","php",/[\w$]/);var g={name:"clike",helperType:"php",keywords:p(S),blockKeywords:p("catch do else elseif for foreach if switch try while finally"),defKeywords:p("class enum function interface namespace trait"),atoms:p(s),builtin:p(h),multiLineStrings:!0,hooks:{$:function(T){return T.eatWhile(/[\w\$_]/),"variable-2"},"<":function(T,x){var c;if(c=T.match(/^<<\s*/)){var d=T.eat(/['"]/);T.eatWhile(/[\w\.]/);var w=T.current().slice(c[0].length+(d?2:1));if(d&&T.eat(d),w)return(x.tokStack||(x.tokStack=[])).push(w,0),x.tokenize=C(w,d!="'"),"string"}return!1},"#":function(T){for(;!T.eol()&&!T.match("?>",!1);)T.next();return"comment"},"/":function(T){if(T.eat("/")){for(;!T.eol()&&!T.match("?>",!1);)T.next();return"comment"}return!1},'"':function(T,x){return(x.tokStack||(x.tokStack=[])).push('"',0),x.tokenize=C('"'),"string"},"{":function(T,x){return x.tokStack&&x.tokStack.length&&x.tokStack[x.tokStack.length-1]++,!1},"}":function(T,x){return x.tokStack&&x.tokStack.length>0&&!--x.tokStack[x.tokStack.length-1]&&(x.tokenize=C(x.tokStack[x.tokStack.length-2])),!1}}};o.defineMode("php",function(T,x){var c=o.getMode(T,x&&x.htmlMode||"text/html"),d=o.getMode(T,g);function w(E,z){var y=z.curMode==d;if(E.sol()&&z.pending&&z.pending!='"'&&z.pending!="'"&&(z.pending=null),y)return y&&z.php.tokenize==null&&E.match("?>")?(z.curMode=c,z.curState=z.html,z.php.context.prev||(z.php=null),"meta"):d.token(E,z.curState);if(E.match(/^<\?\w*/))return z.curMode=d,z.php||(z.php=o.startState(d,c.indent(z.html,"",""))),z.curState=z.php,"meta";if(z.pending=='"'||z.pending=="'"){for(;!E.eol()&&E.next()!=z.pending;);var R="string"}else if(z.pending&&E.pos/.test(M)?z.pending=Z[0]:z.pending={end:E.pos,style:R},E.backUp(M.length-H)),R}return{startState:function(){var E=o.startState(c),z=x.startOpen?o.startState(d):null;return{html:E,php:z,curMode:x.startOpen?d:c,curState:x.startOpen?z:E,pending:null}},copyState:function(E){var z=E.html,y=o.copyState(c,z),R=E.php,M=R&&o.copyState(d,R),H;return E.curMode==c?H=y:H=M,{html:y,php:M,curMode:E.curMode,curState:H,pending:E.pending}},token:w,indent:function(E,z,y){return E.curMode!=d&&/^\s*<\//.test(z)||E.curMode==d&&/^\?>/.test(z)?c.indent(E.html,z,y):E.curMode.indent(E.curState,z,y)},blockCommentStart:"/*",blockCommentEnd:"*/",lineComment:"//",innerMode:function(E){return{state:E.curState,mode:E.curMode}}}},"htmlmixed","clike"),o.defineMIME("application/x-httpd-php","php"),o.defineMIME("application/x-httpd-php-open",{name:"php",startOpen:!0}),o.defineMIME("text/x-php",g)})});var Cu=Ke((Tu,Lu)=>{(function(o){typeof Tu=="object"&&typeof Lu=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";function p(s){return new RegExp("^(("+s.join(")|(")+"))\\b","i")}var v=["package","message","import","syntax","required","optional","repeated","reserved","default","extensions","packed","bool","bytes","double","enum","float","string","int32","int64","uint32","uint64","sint32","sint64","fixed32","fixed64","sfixed32","sfixed64","option","service","rpc","returns"],C=p(v);o.registerHelper("hintWords","protobuf",v);var b=new RegExp("^[_A-Za-z\xA1-\uFFFF][_A-Za-z0-9\xA1-\uFFFF]*");function S(s){return s.eatSpace()?null:s.match("//")?(s.skipToEnd(),"comment"):s.match(/^[0-9\.+-]/,!1)&&(s.match(/^[+-]?0x[0-9a-fA-F]+/)||s.match(/^[+-]?\d*\.\d+([EeDd][+-]?\d+)?/)||s.match(/^[+-]?\d+([EeDd][+-]?\d+)?/))?"number":s.match(/^"([^"]|(""))*"/)||s.match(/^'([^']|(''))*'/)?"string":s.match(C)?"keyword":s.match(b)?"variable":(s.next(),null)}o.defineMode("protobuf",function(){return{token:S,fold:"brace"}}),o.defineMIME("text/x-protobuf","protobuf")})});var Mu=Ke((Eu,zu)=>{(function(o){typeof Eu=="object"&&typeof zu=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";function p(h){return new RegExp("^(("+h.join(")|(")+"))\\b")}var v=p(["and","or","not","is"]),C=["as","assert","break","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","lambda","pass","raise","return","try","while","with","yield","in","False","True"],b=["abs","all","any","bin","bool","bytearray","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip","__import__","NotImplemented","Ellipsis","__debug__"];o.registerHelper("hintWords","python",C.concat(b).concat(["exec","print"]));function S(h){return h.scopes[h.scopes.length-1]}o.defineMode("python",function(h,g){for(var T="error",x=g.delimiters||g.singleDelimiters||/^[\(\)\[\]\{\}@,:`=;\.\\]/,c=[g.singleOperators,g.doubleOperators,g.doubleDelimiters,g.tripleDelimiters,g.operators||/^([-+*/%\/&|^]=?|[<>=]+|\/\/=?|\*\*=?|!=|[~!@]|\.\.\.)/],d=0;dB?D(X):le0&&j(K,X)&&(xe+=" "+T),xe}}return re(K,X)}function re(K,X,I){if(K.eatSpace())return null;if(!I&&K.match(/^#.*/))return"comment";if(K.match(/^[0-9\.]/,!1)){var B=!1;if(K.match(/^[\d_]*\.\d+(e[\+\-]?\d+)?/i)&&(B=!0),K.match(/^[\d_]+\.\d*/)&&(B=!0),K.match(/^\.\d+/)&&(B=!0),B)return K.eat(/J/i),"number";var le=!1;if(K.match(/^0x[0-9a-f_]+/i)&&(le=!0),K.match(/^0b[01_]+/i)&&(le=!0),K.match(/^0o[0-7_]+/i)&&(le=!0),K.match(/^[1-9][\d_]*(e[\+\-]?[\d_]+)?/)&&(K.eat(/J/i),le=!0),K.match(/^0(?![\dx])/i)&&(le=!0),le)return K.eat(/L/i),"number"}if(K.match(M)){var xe=K.current().toLowerCase().indexOf("f")!==-1;return xe?(X.tokenize=N(K.current(),X.tokenize),X.tokenize(K,X)):(X.tokenize=F(K.current(),X.tokenize),X.tokenize(K,X))}for(var q=0;q=0;)K=K.substr(1);var I=K.length==1,B="string";function le(q){return function(L,de){var ze=re(L,de,!0);return ze=="punctuation"&&(L.current()=="{"?de.tokenize=le(q+1):L.current()=="}"&&(q>1?de.tokenize=le(q-1):de.tokenize=xe)),ze}}function xe(q,L){for(;!q.eol();)if(q.eatWhile(/[^'"\{\}\\]/),q.eat("\\")){if(q.next(),I&&q.eol())return B}else{if(q.match(K))return L.tokenize=X,B;if(q.match("{{"))return B;if(q.match("{",!1))return L.tokenize=le(0),q.current()?B:L.tokenize(q,L);if(q.match("}}"))return B;if(q.match("}"))return T;q.eat(/['"]/)}if(I){if(g.singleLineStringErrors)return T;L.tokenize=X}return B}return xe.isString=!0,xe}function F(K,X){for(;"rubf".indexOf(K.charAt(0).toLowerCase())>=0;)K=K.substr(1);var I=K.length==1,B="string";function le(xe,q){for(;!xe.eol();)if(xe.eatWhile(/[^'"\\]/),xe.eat("\\")){if(xe.next(),I&&xe.eol())return B}else{if(xe.match(K))return q.tokenize=X,B;xe.eat(/['"]/)}if(I){if(g.singleLineStringErrors)return T;q.tokenize=X}return B}return le.isString=!0,le}function D(K){for(;S(K).type!="py";)K.scopes.pop();K.scopes.push({offset:S(K).offset+h.indentUnit,type:"py",align:null})}function Q(K,X,I){var B=K.match(/^[\s\[\{\(]*(?:#|$)/,!1)?null:K.column()+1;X.scopes.push({offset:X.indent+w,type:I,align:B})}function j(K,X){for(var I=K.indentation();X.scopes.length>1&&S(X).offset>I;){if(S(X).type!="py")return!0;X.scopes.pop()}return S(X).offset!=I}function V(K,X){K.sol()&&(X.beginningOfLine=!0,X.dedent=!1);var I=X.tokenize(K,X),B=K.current();if(X.beginningOfLine&&B=="@")return K.match(R,!1)?"meta":y?"operator":T;if(/\S/.test(B)&&(X.beginningOfLine=!1),(I=="variable"||I=="builtin")&&X.lastToken=="meta"&&(I="meta"),(B=="pass"||B=="return")&&(X.dedent=!0),B=="lambda"&&(X.lambda=!0),B==":"&&!X.lambda&&S(X).type=="py"&&K.match(/^\s*(?:#|$)/,!1)&&D(X),B.length==1&&!/string|comment/.test(I)){var le="[({".indexOf(B);if(le!=-1&&Q(K,X,"])}".slice(le,le+1)),le="])}".indexOf(B),le!=-1)if(S(X).type==B)X.indent=X.scopes.pop().offset-w;else return T}return X.dedent&&K.eol()&&S(X).type=="py"&&X.scopes.length>1&&X.scopes.pop(),I}var _={startState:function(K){return{tokenize:ee,scopes:[{offset:K||0,type:"py",align:null}],indent:K||0,lastToken:null,lambda:!1,dedent:0}},token:function(K,X){var I=X.errorToken;I&&(X.errorToken=!1);var B=V(K,X);return B&&B!="comment"&&(X.lastToken=B=="keyword"||B=="punctuation"?K.current():B),B=="punctuation"&&(B=null),K.eol()&&X.lambda&&(X.lambda=!1),I?B+" "+T:B},indent:function(K,X){if(K.tokenize!=ee)return K.tokenize.isString?o.Pass:0;var I=S(K),B=I.type==X.charAt(0)||I.type=="py"&&!K.dedent&&/^(else:|elif |except |finally:)/.test(X);return I.align!=null?I.align-(B?1:0):I.offset-(B?w:0)},electricInput:/^\s*([\}\]\)]|else:|elif |except |finally:)$/,closeBrackets:{triples:`'"`},lineComment:"#",fold:"indent"};return _}),o.defineMIME("text/x-python","python");var s=function(h){return h.split(" ")};o.defineMIME("text/x-cython",{name:"python",extra_keywords:s("by cdef cimport cpdef ctypedef enum except extern gil include nogil property public readonly struct union DEF IF ELIF ELSE")})})});var qu=Ke((Au,Du)=>{(function(o){typeof Au=="object"&&typeof Du=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";function p(g){for(var T={},x=0,c=g.length;x]/)?(M.eat(/[\<\>]/),"atom"):M.eat(/[\+\-\*\/\&\|\:\!]/)?"atom":M.eat(/[a-zA-Z$@_\xa1-\uffff]/)?(M.eatWhile(/[\w$\xa1-\uffff]/),M.eat(/[\?\!\=]/),"atom"):"operator";if(Z=="@"&&M.match(/^@?[a-zA-Z_\xa1-\uffff]/))return M.eat("@"),M.eatWhile(/[\w\xa1-\uffff]/),"variable-2";if(Z=="$")return M.eat(/[a-zA-Z_]/)?M.eatWhile(/[\w]/):M.eat(/\d/)?M.eat(/\d/):M.next(),"variable-3";if(/[a-zA-Z_\xa1-\uffff]/.test(Z))return M.eatWhile(/[\w\xa1-\uffff]/),M.eat(/[\?\!]/),M.eat(":")?"atom":"ident";if(Z=="|"&&(H.varList||H.lastTok=="{"||H.lastTok=="do"))return T="|",null;if(/[\(\)\[\]{}\\;]/.test(Z))return T=Z,null;if(Z=="-"&&M.eat(">"))return"arrow";if(/[=+\-\/*:\.^%<>~|]/.test(Z)){var D=M.eatWhile(/[=+\-\/*:\.^%<>~|]/);return Z=="."&&!D&&(T="."),"operator"}else return null}}}function d(M){for(var H=M.pos,Z=0,ee,re=!1,N=!1;(ee=M.next())!=null;)if(N)N=!1;else{if("[{(".indexOf(ee)>-1)Z++;else if("]})".indexOf(ee)>-1){if(Z--,Z<0)break}else if(ee=="/"&&Z==0){re=!0;break}N=ee=="\\"}return M.backUp(M.pos-H),re}function w(M){return M||(M=1),function(H,Z){if(H.peek()=="}"){if(M==1)return Z.tokenize.pop(),Z.tokenize[Z.tokenize.length-1](H,Z);Z.tokenize[Z.tokenize.length-1]=w(M-1)}else H.peek()=="{"&&(Z.tokenize[Z.tokenize.length-1]=w(M+1));return c(H,Z)}}function E(){var M=!1;return function(H,Z){return M?(Z.tokenize.pop(),Z.tokenize[Z.tokenize.length-1](H,Z)):(M=!0,c(H,Z))}}function z(M,H,Z,ee){return function(re,N){var F=!1,D;for(N.context.type==="read-quoted-paused"&&(N.context=N.context.prev,re.eat("}"));(D=re.next())!=null;){if(D==M&&(ee||!F)){N.tokenize.pop();break}if(Z&&D=="#"&&!F){if(re.eat("{")){M=="}"&&(N.context={prev:N.context,type:"read-quoted-paused"}),N.tokenize.push(w());break}else if(/[@\$]/.test(re.peek())){N.tokenize.push(E());break}}F=!F&&D=="\\"}return H}}function y(M,H){return function(Z,ee){return H&&Z.eatSpace(),Z.match(M)?ee.tokenize.pop():Z.skipToEnd(),"string"}}function R(M,H){return M.sol()&&M.match("=end")&&M.eol()&&H.tokenize.pop(),M.skipToEnd(),"comment"}return{startState:function(){return{tokenize:[c],indented:0,context:{type:"top",indented:-g.indentUnit},continuedLine:!1,lastTok:null,varList:!1}},token:function(M,H){T=null,M.sol()&&(H.indented=M.indentation());var Z=H.tokenize[H.tokenize.length-1](M,H),ee,re=T;if(Z=="ident"){var N=M.current();Z=H.lastTok=="."?"property":C.propertyIsEnumerable(M.current())?"keyword":/^[A-Z]/.test(N)?"tag":H.lastTok=="def"||H.lastTok=="class"||H.varList?"def":"variable",Z=="keyword"&&(re=N,b.propertyIsEnumerable(N)?ee="indent":S.propertyIsEnumerable(N)?ee="dedent":((N=="if"||N=="unless")&&M.column()==M.indentation()||N=="do"&&H.context.indented{(function(o){typeof Iu=="object"&&typeof Fu=="object"?o(We(),Di()):typeof define=="function"&&define.amd?define(["../../lib/codemirror","../../addon/mode/simple"],o):o(CodeMirror)})(function(o){"use strict";o.defineSimpleMode("rust",{start:[{regex:/b?"/,token:"string",next:"string"},{regex:/b?r"/,token:"string",next:"string_raw"},{regex:/b?r#+"/,token:"string",next:"string_raw_hash"},{regex:/'(?:[^'\\]|\\(?:[nrt0'"]|x[\da-fA-F]{2}|u\{[\da-fA-F]{6}\}))'/,token:"string-2"},{regex:/b'(?:[^']|\\(?:['\\nrt0]|x[\da-fA-F]{2}))'/,token:"string-2"},{regex:/(?:(?:[0-9][0-9_]*)(?:(?:[Ee][+-]?[0-9_]+)|\.[0-9_]+(?:[Ee][+-]?[0-9_]+)?)(?:f32|f64)?)|(?:0(?:b[01_]+|(?:o[0-7_]+)|(?:x[0-9a-fA-F_]+))|(?:[0-9][0-9_]*))(?:u8|u16|u32|u64|i8|i16|i32|i64|isize|usize)?/,token:"number"},{regex:/(let(?:\s+mut)?|fn|enum|mod|struct|type|union)(\s+)([a-zA-Z_][a-zA-Z0-9_]*)/,token:["keyword",null,"def"]},{regex:/(?:abstract|alignof|as|async|await|box|break|continue|const|crate|do|dyn|else|enum|extern|fn|for|final|if|impl|in|loop|macro|match|mod|move|offsetof|override|priv|proc|pub|pure|ref|return|self|sizeof|static|struct|super|trait|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/,token:"keyword"},{regex:/\b(?:Self|isize|usize|char|bool|u8|u16|u32|u64|f16|f32|f64|i8|i16|i32|i64|str|Option)\b/,token:"atom"},{regex:/\b(?:true|false|Some|None|Ok|Err)\b/,token:"builtin"},{regex:/\b(fn)(\s+)([a-zA-Z_][a-zA-Z0-9_]*)/,token:["keyword",null,"def"]},{regex:/#!?\[.*\]/,token:"meta"},{regex:/\/\/.*/,token:"comment"},{regex:/\/\*/,token:"comment",next:"comment"},{regex:/[-+\/*=<>!]+/,token:"operator"},{regex:/[a-zA-Z_]\w*!/,token:"variable-3"},{regex:/[a-zA-Z_]\w*/,token:"variable"},{regex:/[\{\[\(]/,indent:!0},{regex:/[\}\]\)]/,dedent:!0}],string:[{regex:/"/,token:"string",next:"start"},{regex:/(?:[^\\"]|\\(?:.|$))*/,token:"string"}],string_raw:[{regex:/"/,token:"string",next:"start"},{regex:/[^"]*/,token:"string"}],string_raw_hash:[{regex:/"#+/,token:"string",next:"start"},{regex:/(?:[^"]|"(?!#))*/,token:"string"}],comment:[{regex:/.*?\*\//,token:"comment",next:"start"},{regex:/.*/,token:"comment"}],meta:{dontIndentStates:["comment"],electricInput:/^\s*\}$/,blockCommentStart:"/*",blockCommentEnd:"*/",lineComment:"//",fold:"brace"}}),o.defineMIME("text/x-rustsrc","rust"),o.defineMIME("text/rust","rust")})});var ea=Ke((Ou,Pu)=>{(function(o){typeof Ou=="object"&&typeof Pu=="object"?o(We(),gn()):typeof define=="function"&&define.amd?define(["../../lib/codemirror","../css/css"],o):o(CodeMirror)})(function(o){"use strict";o.defineMode("sass",function(p){var v=o.mimeModes["text/css"],C=v.propertyKeywords||{},b=v.colorKeywords||{},S=v.valueKeywords||{},s=v.fontProperties||{};function h(N){return new RegExp("^"+N.join("|"))}var g=["true","false","null","auto"],T=new RegExp("^"+g.join("|")),x=["\\(","\\)","=",">","<","==",">=","<=","\\+","-","\\!=","/","\\*","%","and","or","not",";","\\{","\\}",":"],c=h(x),d=/^::?[a-zA-Z_][\w\-]*/,w;function E(N){return!N.peek()||N.match(/\s+$/,!1)}function z(N,F){var D=N.peek();return D===")"?(N.next(),F.tokenizer=ee,"operator"):D==="("?(N.next(),N.eatSpace(),"operator"):D==="'"||D==='"'?(F.tokenizer=R(N.next()),"string"):(F.tokenizer=R(")",!1),"string")}function y(N,F){return function(D,Q){return D.sol()&&D.indentation()<=N?(Q.tokenizer=ee,ee(D,Q)):(F&&D.skipTo("*/")?(D.next(),D.next(),Q.tokenizer=ee):D.skipToEnd(),"comment")}}function R(N,F){F==null&&(F=!0);function D(Q,j){var V=Q.next(),_=Q.peek(),K=Q.string.charAt(Q.pos-2),X=V!=="\\"&&_===N||V===N&&K!=="\\";return X?(V!==N&&F&&Q.next(),E(Q)&&(j.cursorHalf=0),j.tokenizer=ee,"string"):V==="#"&&_==="{"?(j.tokenizer=M(D),Q.next(),"operator"):"string"}return D}function M(N){return function(F,D){return F.peek()==="}"?(F.next(),D.tokenizer=N,"operator"):ee(F,D)}}function H(N){if(N.indentCount==0){N.indentCount++;var F=N.scopes[0].offset,D=F+p.indentUnit;N.scopes.unshift({offset:D})}}function Z(N){N.scopes.length!=1&&N.scopes.shift()}function ee(N,F){var D=N.peek();if(N.match("/*"))return F.tokenizer=y(N.indentation(),!0),F.tokenizer(N,F);if(N.match("//"))return F.tokenizer=y(N.indentation(),!1),F.tokenizer(N,F);if(N.match("#{"))return F.tokenizer=M(ee),"operator";if(D==='"'||D==="'")return N.next(),F.tokenizer=R(D),"string";if(F.cursorHalf){if(D==="#"&&(N.next(),N.match(/[0-9a-fA-F]{6}|[0-9a-fA-F]{3}/))||N.match(/^-?[0-9\.]+/))return E(N)&&(F.cursorHalf=0),"number";if(N.match(/^(px|em|in)\b/))return E(N)&&(F.cursorHalf=0),"unit";if(N.match(T))return E(N)&&(F.cursorHalf=0),"keyword";if(N.match(/^url/)&&N.peek()==="(")return F.tokenizer=z,E(N)&&(F.cursorHalf=0),"atom";if(D==="$")return N.next(),N.eatWhile(/[\w-]/),E(N)&&(F.cursorHalf=0),"variable-2";if(D==="!")return N.next(),F.cursorHalf=0,N.match(/^[\w]+/)?"keyword":"operator";if(N.match(c))return E(N)&&(F.cursorHalf=0),"operator";if(N.eatWhile(/[\w-]/))return E(N)&&(F.cursorHalf=0),w=N.current().toLowerCase(),S.hasOwnProperty(w)?"atom":b.hasOwnProperty(w)?"keyword":C.hasOwnProperty(w)?(F.prevProp=N.current().toLowerCase(),"property"):"tag";if(E(N))return F.cursorHalf=0,null}else{if(D==="-"&&N.match(/^-\w+-/))return"meta";if(D==="."){if(N.next(),N.match(/^[\w-]+/))return H(F),"qualifier";if(N.peek()==="#")return H(F),"tag"}if(D==="#"){if(N.next(),N.match(/^[\w-]+/))return H(F),"builtin";if(N.peek()==="#")return H(F),"tag"}if(D==="$")return N.next(),N.eatWhile(/[\w-]/),"variable-2";if(N.match(/^-?[0-9\.]+/))return"number";if(N.match(/^(px|em|in)\b/))return"unit";if(N.match(T))return"keyword";if(N.match(/^url/)&&N.peek()==="(")return F.tokenizer=z,"atom";if(D==="="&&N.match(/^=[\w-]+/))return H(F),"meta";if(D==="+"&&N.match(/^\+[\w-]+/))return"variable-3";if(D==="@"&&N.match("@extend")&&(N.match(/\s*[\w]/)||Z(F)),N.match(/^@(else if|if|media|else|for|each|while|mixin|function)/))return H(F),"def";if(D==="@")return N.next(),N.eatWhile(/[\w-]/),"def";if(N.eatWhile(/[\w-]/))if(N.match(/ *: *[\w-\+\$#!\("']/,!1)){w=N.current().toLowerCase();var Q=F.prevProp+"-"+w;return C.hasOwnProperty(Q)?"property":C.hasOwnProperty(w)?(F.prevProp=w,"property"):s.hasOwnProperty(w)?"property":"tag"}else return N.match(/ *:/,!1)?(H(F),F.cursorHalf=1,F.prevProp=N.current().toLowerCase(),"property"):(N.match(/ *,/,!1)||H(F),"tag");if(D===":")return N.match(d)?"variable-3":(N.next(),F.cursorHalf=1,"operator")}return N.match(c)?"operator":(N.next(),null)}function re(N,F){N.sol()&&(F.indentCount=0);var D=F.tokenizer(N,F),Q=N.current();if((Q==="@return"||Q==="}")&&Z(F),D!==null){for(var j=N.pos-Q.length,V=j+p.indentUnit*F.indentCount,_=[],K=0;K{(function(o){typeof ju=="object"&&typeof Ru=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";o.defineMode("shell",function(){var p={};function v(d,w){for(var E=0;E1&&d.eat("$");var E=d.next();return/['"({]/.test(E)?(w.tokens[0]=h(E,E=="("?"quote":E=="{"?"def":"string"),c(d,w)):(/\d/.test(E)||d.eatWhile(/\w/),w.tokens.shift(),"def")};function x(d){return function(w,E){return w.sol()&&w.string==d&&E.tokens.shift(),w.skipToEnd(),"string-2"}}function c(d,w){return(w.tokens[0]||s)(d,w)}return{startState:function(){return{tokens:[]}},token:function(d,w){return c(d,w)},closeBrackets:"()[]{}''\"\"``",lineComment:"#",fold:"brace"}}),o.defineMIME("text/x-sh","shell"),o.defineMIME("application/x-sh","shell")})});var Uu=Ke((Bu,Wu)=>{(function(o){typeof Bu=="object"&&typeof Wu=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";o.defineMode("sql",function(g,T){var x=T.client||{},c=T.atoms||{false:!0,true:!0,null:!0},d=T.builtin||s(h),w=T.keywords||s(S),E=T.operatorChars||/^[*+\-%<>!=&|~^\/]/,z=T.support||{},y=T.hooks||{},R=T.dateSQL||{date:!0,time:!0,timestamp:!0},M=T.backslashStringEscapes!==!1,H=T.brackets||/^[\{}\(\)\[\]]/,Z=T.punctuation||/^[;.,:]/;function ee(Q,j){var V=Q.next();if(y[V]){var _=y[V](Q,j);if(_!==!1)return _}if(z.hexNumber&&(V=="0"&&Q.match(/^[xX][0-9a-fA-F]+/)||(V=="x"||V=="X")&&Q.match(/^'[0-9a-fA-F]*'/)))return"number";if(z.binaryNumber&&((V=="b"||V=="B")&&Q.match(/^'[01]*'/)||V=="0"&&Q.match(/^b[01]+/)))return"number";if(V.charCodeAt(0)>47&&V.charCodeAt(0)<58)return Q.match(/^[0-9]*(\.[0-9]+)?([eE][-+]?[0-9]+)?/),z.decimallessFloat&&Q.match(/^\.(?!\.)/),"number";if(V=="?"&&(Q.eatSpace()||Q.eol()||Q.eat(";")))return"variable-3";if(V=="'"||V=='"'&&z.doubleQuote)return j.tokenize=re(V),j.tokenize(Q,j);if((z.nCharCast&&(V=="n"||V=="N")||z.charsetCast&&V=="_"&&Q.match(/[a-z][a-z0-9]*/i))&&(Q.peek()=="'"||Q.peek()=='"'))return"keyword";if(z.escapeConstant&&(V=="e"||V=="E")&&(Q.peek()=="'"||Q.peek()=='"'&&z.doubleQuote))return j.tokenize=function(X,I){return(I.tokenize=re(X.next(),!0))(X,I)},"keyword";if(z.commentSlashSlash&&V=="/"&&Q.eat("/"))return Q.skipToEnd(),"comment";if(z.commentHash&&V=="#"||V=="-"&&Q.eat("-")&&(!z.commentSpaceRequired||Q.eat(" ")))return Q.skipToEnd(),"comment";if(V=="/"&&Q.eat("*"))return j.tokenize=N(1),j.tokenize(Q,j);if(V=="."){if(z.zerolessFloat&&Q.match(/^(?:\d+(?:e[+-]?\d+)?)/i))return"number";if(Q.match(/^\.+/))return null;if(Q.match(/^[\w\d_$#]+/))return"variable-2"}else{if(E.test(V))return Q.eatWhile(E),"operator";if(H.test(V))return"bracket";if(Z.test(V))return Q.eatWhile(Z),"punctuation";if(V=="{"&&(Q.match(/^( )*(d|D|t|T|ts|TS)( )*'[^']*'( )*}/)||Q.match(/^( )*(d|D|t|T|ts|TS)( )*"[^"]*"( )*}/)))return"number";Q.eatWhile(/^[_\w\d]/);var K=Q.current().toLowerCase();return R.hasOwnProperty(K)&&(Q.match(/^( )+'[^']*'/)||Q.match(/^( )+"[^"]*"/))?"number":c.hasOwnProperty(K)?"atom":d.hasOwnProperty(K)?"type":w.hasOwnProperty(K)?"keyword":x.hasOwnProperty(K)?"builtin":null}}function re(Q,j){return function(V,_){for(var K=!1,X;(X=V.next())!=null;){if(X==Q&&!K){_.tokenize=ee;break}K=(M||j)&&!K&&X=="\\"}return"string"}}function N(Q){return function(j,V){var _=j.match(/^.*?(\/\*|\*\/)/);return _?_[1]=="/*"?V.tokenize=N(Q+1):Q>1?V.tokenize=N(Q-1):V.tokenize=ee:j.skipToEnd(),"comment"}}function F(Q,j,V){j.context={prev:j.context,indent:Q.indentation(),col:Q.column(),type:V}}function D(Q){Q.indent=Q.context.indent,Q.context=Q.context.prev}return{startState:function(){return{tokenize:ee,context:null}},token:function(Q,j){if(Q.sol()&&j.context&&j.context.align==null&&(j.context.align=!1),j.tokenize==ee&&Q.eatSpace())return null;var V=j.tokenize(Q,j);if(V=="comment")return V;j.context&&j.context.align==null&&(j.context.align=!0);var _=Q.current();return _=="("?F(Q,j,")"):_=="["?F(Q,j,"]"):j.context&&j.context.type==_&&D(j),V},indent:function(Q,j){var V=Q.context;if(!V)return o.Pass;var _=j.charAt(0)==V.type;return V.align?V.col+(_?0:1):V.indent+(_?0:g.indentUnit)},blockCommentStart:"/*",blockCommentEnd:"*/",lineComment:z.commentSlashSlash?"//":z.commentHash?"#":"--",closeBrackets:"()[]{}''\"\"``",config:T}});function p(g){for(var T;(T=g.next())!=null;)if(T=="`"&&!g.eat("`"))return"variable-2";return g.backUp(g.current().length-1),g.eatWhile(/\w/)?"variable-2":null}function v(g){for(var T;(T=g.next())!=null;)if(T=='"'&&!g.eat('"'))return"variable-2";return g.backUp(g.current().length-1),g.eatWhile(/\w/)?"variable-2":null}function C(g){return g.eat("@")&&(g.match("session."),g.match("local."),g.match("global.")),g.eat("'")?(g.match(/^.*'/),"variable-2"):g.eat('"')?(g.match(/^.*"/),"variable-2"):g.eat("`")?(g.match(/^.*`/),"variable-2"):g.match(/^[0-9a-zA-Z$\.\_]+/)?"variable-2":null}function b(g){return g.eat("N")?"atom":g.match(/^[a-zA-Z.#!?]/)?"variable-2":null}var S="alter and as asc between by count create delete desc distinct drop from group having in insert into is join like not on or order select set table union update values where limit ";function s(g){for(var T={},x=g.split(" "),c=0;c!=^\&|\/]/,brackets:/^[\{}\(\)]/,punctuation:/^[;.,:/]/,backslashStringEscapes:!1,dateSQL:s("date datetimeoffset datetime2 smalldatetime datetime time"),hooks:{"@":C}}),o.defineMIME("text/x-mysql",{name:"sql",client:s("charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee"),keywords:s(S+"accessible action add after algorithm all analyze asensitive at authors auto_increment autocommit avg avg_row_length before binary binlog both btree cache call cascade cascaded case catalog_name chain change changed character check checkpoint checksum class_origin client_statistics close coalesce code collate collation collations column columns comment commit committed completion concurrent condition connection consistent constraint contains continue contributors convert cross current current_date current_time current_timestamp current_user cursor data database databases day_hour day_microsecond day_minute day_second deallocate dec declare default delay_key_write delayed delimiter des_key_file describe deterministic dev_pop dev_samp deviance diagnostics directory disable discard distinctrow div dual dumpfile each elseif enable enclosed end ends engine engines enum errors escape escaped even event events every execute exists exit explain extended fast fetch field fields first flush for force foreign found_rows full fulltext function general get global grant grants group group_concat handler hash help high_priority hosts hour_microsecond hour_minute hour_second if ignore ignore_server_ids import index index_statistics infile inner innodb inout insensitive insert_method install interval invoker isolation iterate key keys kill language last leading leave left level limit linear lines list load local localtime localtimestamp lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters match max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modifies modify mutex mysql_errno natural next no no_write_to_binlog offline offset one online open optimize option optionally out outer outfile pack_keys parser partition partitions password phase plugin plugins prepare preserve prev primary privileges procedure processlist profile profiles purge query quick range read read_write reads real rebuild recover references regexp relaylog release remove rename reorganize repair repeatable replace require resignal restrict resume return returns revoke right rlike rollback rollup row row_format rtree savepoint schedule schema schema_name schemas second_microsecond security sensitive separator serializable server session share show signal slave slow smallint snapshot soname spatial specific sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sqlexception sqlstate sqlwarning ssl start starting starts status std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace temporary terminated to trailing transaction trigger triggers truncate uncommitted undo uninstall unique unlock upgrade usage use use_frm user user_resources user_statistics using utc_date utc_time utc_timestamp value variables varying view views warnings when while with work write xa xor year_month zerofill begin do then else loop repeat"),builtin:s("bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision date datetime year unsigned signed numeric"),atoms:s("false true null unknown"),operatorChars:/^[*+\-%<>!=&|^]/,dateSQL:s("date time timestamp"),support:s("decimallessFloat zerolessFloat binaryNumber hexNumber doubleQuote nCharCast charsetCast commentHash commentSpaceRequired"),hooks:{"@":C,"`":p,"\\":b}}),o.defineMIME("text/x-mariadb",{name:"sql",client:s("charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee"),keywords:s(S+"accessible action add after algorithm all always analyze asensitive at authors auto_increment autocommit avg avg_row_length before binary binlog both btree cache call cascade cascaded case catalog_name chain change changed character check checkpoint checksum class_origin client_statistics close coalesce code collate collation collations column columns comment commit committed completion concurrent condition connection consistent constraint contains continue contributors convert cross current current_date current_time current_timestamp current_user cursor data database databases day_hour day_microsecond day_minute day_second deallocate dec declare default delay_key_write delayed delimiter des_key_file describe deterministic dev_pop dev_samp deviance diagnostics directory disable discard distinctrow div dual dumpfile each elseif enable enclosed end ends engine engines enum errors escape escaped even event events every execute exists exit explain extended fast fetch field fields first flush for force foreign found_rows full fulltext function general generated get global grant grants group group_concat handler hard hash help high_priority hosts hour_microsecond hour_minute hour_second if ignore ignore_server_ids import index index_statistics infile inner innodb inout insensitive insert_method install interval invoker isolation iterate key keys kill language last leading leave left level limit linear lines list load local localtime localtimestamp lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters match max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modifies modify mutex mysql_errno natural next no no_write_to_binlog offline offset one online open optimize option optionally out outer outfile pack_keys parser partition partitions password persistent phase plugin plugins prepare preserve prev primary privileges procedure processlist profile profiles purge query quick range read read_write reads real rebuild recover references regexp relaylog release remove rename reorganize repair repeatable replace require resignal restrict resume return returns revoke right rlike rollback rollup row row_format rtree savepoint schedule schema schema_name schemas second_microsecond security sensitive separator serializable server session share show shutdown signal slave slow smallint snapshot soft soname spatial specific sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sqlexception sqlstate sqlwarning ssl start starting starts status std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace temporary terminated to trailing transaction trigger triggers truncate uncommitted undo uninstall unique unlock upgrade usage use use_frm user user_resources user_statistics using utc_date utc_time utc_timestamp value variables varying view views virtual warnings when while with work write xa xor year_month zerofill begin do then else loop repeat"),builtin:s("bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision date datetime year unsigned signed numeric"),atoms:s("false true null unknown"),operatorChars:/^[*+\-%<>!=&|^]/,dateSQL:s("date time timestamp"),support:s("decimallessFloat zerolessFloat binaryNumber hexNumber doubleQuote nCharCast charsetCast commentHash commentSpaceRequired"),hooks:{"@":C,"`":p,"\\":b}}),o.defineMIME("text/x-sqlite",{name:"sql",client:s("auth backup bail binary changes check clone databases dbinfo dump echo eqp exit explain fullschema headers help import imposter indexes iotrace limit lint load log mode nullvalue once open output print prompt quit read restore save scanstats schema separator session shell show stats system tables testcase timeout timer trace vfsinfo vfslist vfsname width"),keywords:s(S+"abort action add after all analyze attach autoincrement before begin cascade case cast check collate column commit conflict constraint cross current_date current_time current_timestamp database default deferrable deferred detach each else end escape except exclusive exists explain fail for foreign full glob if ignore immediate index indexed initially inner instead intersect isnull key left limit match natural no notnull null of offset outer plan pragma primary query raise recursive references regexp reindex release rename replace restrict right rollback row savepoint temp temporary then to transaction trigger unique using vacuum view virtual when with without"),builtin:s("bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text clob bigint int int2 int8 integer float double char varchar date datetime year unsigned signed numeric real"),atoms:s("null current_date current_time current_timestamp"),operatorChars:/^[*+\-%<>!=&|/~]/,dateSQL:s("date time timestamp datetime"),support:s("decimallessFloat zerolessFloat"),identifierQuote:'"',hooks:{"@":C,":":C,"?":C,$:C,'"':v,"`":p}}),o.defineMIME("text/x-cassandra",{name:"sql",client:{},keywords:s("add all allow alter and any apply as asc authorize batch begin by clustering columnfamily compact consistency count create custom delete desc distinct drop each_quorum exists filtering from grant if in index insert into key keyspace keyspaces level limit local_one local_quorum modify nan norecursive nosuperuser not of on one order password permission permissions primary quorum rename revoke schema select set storage superuser table three to token truncate ttl two type unlogged update use user users using values where with writetime"),builtin:s("ascii bigint blob boolean counter decimal double float frozen inet int list map static text timestamp timeuuid tuple uuid varchar varint"),atoms:s("false true infinity NaN"),operatorChars:/^[<>=]/,dateSQL:{},support:s("commentSlashSlash decimallessFloat"),hooks:{}}),o.defineMIME("text/x-plsql",{name:"sql",client:s("appinfo arraysize autocommit autoprint autorecovery autotrace blockterminator break btitle cmdsep colsep compatibility compute concat copycommit copytypecheck define describe echo editfile embedded escape exec execute feedback flagger flush heading headsep instance linesize lno loboffset logsource long longchunksize markup native newpage numformat numwidth pagesize pause pno recsep recsepchar release repfooter repheader serveroutput shiftinout show showmode size spool sqlblanklines sqlcase sqlcode sqlcontinue sqlnumber sqlpluscompatibility sqlprefix sqlprompt sqlterminator suffix tab term termout time timing trimout trimspool ttitle underline verify version wrap"),keywords:s("abort accept access add all alter and any array arraylen as asc assert assign at attributes audit authorization avg base_table begin between binary_integer body boolean by case cast char char_base check close cluster clusters colauth column comment commit compress connect connected constant constraint crash create current currval cursor data_base database date dba deallocate debugoff debugon decimal declare default definition delay delete desc digits dispose distinct do drop else elseif elsif enable end entry escape exception exception_init exchange exclusive exists exit external fast fetch file for force form from function generic goto grant group having identified if immediate in increment index indexes indicator initial initrans insert interface intersect into is key level library like limited local lock log logging long loop master maxextents maxtrans member minextents minus mislabel mode modify multiset new next no noaudit nocompress nologging noparallel not nowait number_base object of off offline on online only open option or order out package parallel partition pctfree pctincrease pctused pls_integer positive positiven pragma primary prior private privileges procedure public raise range raw read rebuild record ref references refresh release rename replace resource restrict return returning returns reverse revoke rollback row rowid rowlabel rownum rows run savepoint schema segment select separate session set share snapshot some space split sql start statement storage subtype successful synonym tabauth table tables tablespace task terminate then to trigger truncate type union unique unlimited unrecoverable unusable update use using validate value values variable view views when whenever where while with work"),builtin:s("abs acos add_months ascii asin atan atan2 average bfile bfilename bigserial bit blob ceil character chartorowid chr clob concat convert cos cosh count dec decode deref dual dump dup_val_on_index empty error exp false float floor found glb greatest hextoraw initcap instr instrb int integer isopen last_day least length lengthb ln lower lpad ltrim lub make_ref max min mlslabel mod months_between natural naturaln nchar nclob new_time next_day nextval nls_charset_decl_len nls_charset_id nls_charset_name nls_initcap nls_lower nls_sort nls_upper nlssort no_data_found notfound null number numeric nvarchar2 nvl others power rawtohex real reftohex round rowcount rowidtochar rowtype rpad rtrim serial sign signtype sin sinh smallint soundex sqlcode sqlerrm sqrt stddev string substr substrb sum sysdate tan tanh to_char text to_date to_label to_multi_byte to_number to_single_byte translate true trunc uid unlogged upper user userenv varchar varchar2 variance varying vsize xml"),operatorChars:/^[*\/+\-%<>!=~]/,dateSQL:s("date time timestamp"),support:s("doubleQuote nCharCast zerolessFloat binaryNumber hexNumber")}),o.defineMIME("text/x-hive",{name:"sql",keywords:s("select alter $elem$ $key$ $value$ add after all analyze and archive as asc before between binary both bucket buckets by cascade case cast change cluster clustered clusterstatus collection column columns comment compute concatenate continue create cross cursor data database databases dbproperties deferred delete delimited desc describe directory disable distinct distribute drop else enable end escaped exclusive exists explain export extended external fetch fields fileformat first format formatted from full function functions grant group having hold_ddltime idxproperties if import in index indexes inpath inputdriver inputformat insert intersect into is items join keys lateral left like limit lines load local location lock locks mapjoin materialized minus msck no_drop nocompress not of offline on option or order out outer outputdriver outputformat overwrite partition partitioned partitions percent plus preserve procedure purge range rcfile read readonly reads rebuild recordreader recordwriter recover reduce regexp rename repair replace restrict revoke right rlike row schema schemas semi sequencefile serde serdeproperties set shared show show_database sort sorted ssl statistics stored streamtable table tables tablesample tblproperties temporary terminated textfile then tmp to touch transform trigger unarchive undo union uniquejoin unlock update use using utc utc_tmestamp view when where while with admin authorization char compact compactions conf cube current current_date current_timestamp day decimal defined dependency directories elem_type exchange file following for grouping hour ignore inner interval jar less logical macro minute month more none noscan over owner partialscan preceding pretty principals protection reload rewrite role roles rollup rows second server sets skewed transactions truncate unbounded unset uri user values window year"),builtin:s("bool boolean long timestamp tinyint smallint bigint int float double date datetime unsigned string array struct map uniontype key_type utctimestamp value_type varchar"),atoms:s("false true null unknown"),operatorChars:/^[*+\-%<>!=]/,dateSQL:s("date timestamp"),support:s("doubleQuote binaryNumber hexNumber")}),o.defineMIME("text/x-pgsql",{name:"sql",client:s("source"),keywords:s(S+"a abort abs absent absolute access according action ada add admin after aggregate alias all allocate also alter always analyse analyze and any are array array_agg array_max_cardinality as asc asensitive assert assertion assignment asymmetric at atomic attach attribute attributes authorization avg backward base64 before begin begin_frame begin_partition bernoulli between bigint binary bit bit_length blob blocked bom boolean both breadth by c cache call called cardinality cascade cascaded case cast catalog catalog_name ceil ceiling chain char char_length character character_length character_set_catalog character_set_name character_set_schema characteristics characters check checkpoint class class_origin clob close cluster coalesce cobol collate collation collation_catalog collation_name collation_schema collect column column_name columns command_function command_function_code comment comments commit committed concurrently condition condition_number configuration conflict connect connection connection_name constant constraint constraint_catalog constraint_name constraint_schema constraints constructor contains content continue control conversion convert copy corr corresponding cost count covar_pop covar_samp create cross csv cube cume_dist current current_catalog current_date current_default_transform_group current_path current_role current_row current_schema current_time current_timestamp current_transform_group_for_type current_user cursor cursor_name cycle data database datalink datatype date datetime_interval_code datetime_interval_precision day db deallocate debug dec decimal declare default defaults deferrable deferred defined definer degree delete delimiter delimiters dense_rank depends depth deref derived desc describe descriptor detach detail deterministic diagnostics dictionary disable discard disconnect dispatch distinct dlnewcopy dlpreviouscopy dlurlcomplete dlurlcompleteonly dlurlcompletewrite dlurlpath dlurlpathonly dlurlpathwrite dlurlscheme dlurlserver dlvalue do document domain double drop dump dynamic dynamic_function dynamic_function_code each element else elseif elsif empty enable encoding encrypted end end_frame end_partition endexec enforced enum equals errcode error escape event every except exception exclude excluding exclusive exec execute exists exit exp explain expression extension external extract false family fetch file filter final first first_value flag float floor following for force foreach foreign fortran forward found frame_row free freeze from fs full function functions fusion g general generated get global go goto grant granted greatest group grouping groups handler having header hex hierarchy hint hold hour id identity if ignore ilike immediate immediately immutable implementation implicit import in include including increment indent index indexes indicator info inherit inherits initially inline inner inout input insensitive insert instance instantiable instead int integer integrity intersect intersection interval into invoker is isnull isolation join k key key_member key_type label lag language large last last_value lateral lead leading leakproof least left length level library like like_regex limit link listen ln load local localtime localtimestamp location locator lock locked log logged loop lower m map mapping match matched materialized max max_cardinality maxvalue member merge message message_length message_octet_length message_text method min minute minvalue mod mode modifies module month more move multiset mumps name names namespace national natural nchar nclob nesting new next nfc nfd nfkc nfkd nil no none normalize normalized not nothing notice notify notnull nowait nth_value ntile null nullable nullif nulls number numeric object occurrences_regex octet_length octets of off offset oids old on only open operator option options or order ordering ordinality others out outer output over overlaps overlay overriding owned owner p pad parallel parameter parameter_mode parameter_name parameter_ordinal_position parameter_specific_catalog parameter_specific_name parameter_specific_schema parser partial partition pascal passing passthrough password path percent percent_rank percentile_cont percentile_disc perform period permission pg_context pg_datatype_name pg_exception_context pg_exception_detail pg_exception_hint placing plans pli policy portion position position_regex power precedes preceding precision prepare prepared preserve primary print_strict_params prior privileges procedural procedure procedures program public publication query quote raise range rank read reads real reassign recheck recovery recursive ref references referencing refresh regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy regr_syy reindex relative release rename repeatable replace replica requiring reset respect restart restore restrict result result_oid return returned_cardinality returned_length returned_octet_length returned_sqlstate returning returns reverse revoke right role rollback rollup routine routine_catalog routine_name routine_schema routines row row_count row_number rows rowtype rule savepoint scale schema schema_name schemas scope scope_catalog scope_name scope_schema scroll search second section security select selective self sensitive sequence sequences serializable server server_name session session_user set setof sets share show similar simple size skip slice smallint snapshot some source space specific specific_name specifictype sql sqlcode sqlerror sqlexception sqlstate sqlwarning sqrt stable stacked standalone start state statement static statistics stddev_pop stddev_samp stdin stdout storage strict strip structure style subclass_origin submultiset subscription substring substring_regex succeeds sum symmetric sysid system system_time system_user t table table_name tables tablesample tablespace temp template temporary text then ties time timestamp timezone_hour timezone_minute to token top_level_count trailing transaction transaction_active transactions_committed transactions_rolled_back transform transforms translate translate_regex translation treat trigger trigger_catalog trigger_name trigger_schema trim trim_array true truncate trusted type types uescape unbounded uncommitted under unencrypted union unique unknown unlink unlisten unlogged unnamed unnest until untyped update upper uri usage use_column use_variable user user_defined_type_catalog user_defined_type_code user_defined_type_name user_defined_type_schema using vacuum valid validate validator value value_of values var_pop var_samp varbinary varchar variable_conflict variadic varying verbose version versioning view views volatile warning when whenever where while whitespace width_bucket window with within without work wrapper write xml xmlagg xmlattributes xmlbinary xmlcast xmlcomment xmlconcat xmldeclaration xmldocument xmlelement xmlexists xmlforest xmliterate xmlnamespaces xmlparse xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltext xmlvalidate year yes zone"),builtin:s("bigint int8 bigserial serial8 bit varying varbit boolean bool box bytea character char varchar cidr circle date double precision float8 inet integer int int4 interval json jsonb line lseg macaddr macaddr8 money numeric decimal path pg_lsn point polygon real float4 smallint int2 smallserial serial2 serial serial4 text time zone timetz timestamp timestamptz tsquery tsvector txid_snapshot uuid xml"),atoms:s("false true null unknown"),operatorChars:/^[*\/+\-%<>!=&|^\/#@?~]/,backslashStringEscapes:!1,dateSQL:s("date time timestamp"),support:s("decimallessFloat zerolessFloat binaryNumber hexNumber nCharCast charsetCast escapeConstant")}),o.defineMIME("text/x-gql",{name:"sql",keywords:s("ancestor and asc by contains desc descendant distinct from group has in is limit offset on order select superset where"),atoms:s("false true"),builtin:s("blob datetime first key __key__ string integer double boolean null"),operatorChars:/^[*+\-%<>!=]/}),o.defineMIME("text/x-gpsql",{name:"sql",client:s("source"),keywords:s("abort absolute access action active add admin after aggregate all also alter always analyse analyze and any array as asc assertion assignment asymmetric at authorization backward before begin between bigint binary bit boolean both by cache called cascade cascaded case cast chain char character characteristics check checkpoint class close cluster coalesce codegen collate column comment commit committed concurrency concurrently configuration connection constraint constraints contains content continue conversion copy cost cpu_rate_limit create createdb createexttable createrole createuser cross csv cube current current_catalog current_date current_role current_schema current_time current_timestamp current_user cursor cycle data database day deallocate dec decimal declare decode default defaults deferrable deferred definer delete delimiter delimiters deny desc dictionary disable discard distinct distributed do document domain double drop dxl each else enable encoding encrypted end enum errors escape every except exchange exclude excluding exclusive execute exists explain extension external extract false family fetch fields filespace fill filter first float following for force foreign format forward freeze from full function global grant granted greatest group group_id grouping handler hash having header hold host hour identity if ignore ilike immediate immutable implicit in including inclusive increment index indexes inherit inherits initially inline inner inout input insensitive insert instead int integer intersect interval into invoker is isnull isolation join key language large last leading least left level like limit list listen load local localtime localtimestamp location lock log login mapping master match maxvalue median merge minute minvalue missing mode modifies modify month move name names national natural nchar new newline next no nocreatedb nocreateexttable nocreaterole nocreateuser noinherit nologin none noovercommit nosuperuser not nothing notify notnull nowait null nullif nulls numeric object of off offset oids old on only operator option options or order ordered others out outer over overcommit overlaps overlay owned owner parser partial partition partitions passing password percent percentile_cont percentile_disc placing plans position preceding precision prepare prepared preserve primary prior privileges procedural procedure protocol queue quote randomly range read readable reads real reassign recheck recursive ref references reindex reject relative release rename repeatable replace replica reset resource restart restrict returning returns revoke right role rollback rollup rootpartition row rows rule savepoint scatter schema scroll search second security segment select sequence serializable session session_user set setof sets share show similar simple smallint some split sql stable standalone start statement statistics stdin stdout storage strict strip subpartition subpartitions substring superuser symmetric sysid system table tablespace temp template temporary text then threshold ties time timestamp to trailing transaction treat trigger trim true truncate trusted type unbounded uncommitted unencrypted union unique unknown unlisten until update user using vacuum valid validation validator value values varchar variadic varying verbose version view volatile web when where whitespace window with within without work writable write xml xmlattributes xmlconcat xmlelement xmlexists xmlforest xmlparse xmlpi xmlroot xmlserialize year yes zone"),builtin:s("bigint int8 bigserial serial8 bit varying varbit boolean bool box bytea character char varchar cidr circle date double precision float float8 inet integer int int4 interval json jsonb line lseg macaddr macaddr8 money numeric decimal path pg_lsn point polygon real float4 smallint int2 smallserial serial2 serial serial4 text time without zone with timetz timestamp timestamptz tsquery tsvector txid_snapshot uuid xml"),atoms:s("false true null unknown"),operatorChars:/^[*+\-%<>!=&|^\/#@?~]/,dateSQL:s("date time timestamp"),support:s("decimallessFloat zerolessFloat binaryNumber hexNumber nCharCast charsetCast")}),o.defineMIME("text/x-sparksql",{name:"sql",keywords:s("add after all alter analyze and anti archive array as asc at between bucket buckets by cache cascade case cast change clear cluster clustered codegen collection column columns comment commit compact compactions compute concatenate cost create cross cube current current_date current_timestamp database databases data dbproperties defined delete delimited deny desc describe dfs directories distinct distribute drop else end escaped except exchange exists explain export extended external false fields fileformat first following for format formatted from full function functions global grant group grouping having if ignore import in index indexes inner inpath inputformat insert intersect interval into is items join keys last lateral lazy left like limit lines list load local location lock locks logical macro map minus msck natural no not null nulls of on optimize option options or order out outer outputformat over overwrite partition partitioned partitions percent preceding principals purge range recordreader recordwriter recover reduce refresh regexp rename repair replace reset restrict revoke right rlike role roles rollback rollup row rows schema schemas select semi separated serde serdeproperties set sets show skewed sort sorted start statistics stored stratify struct table tables tablesample tblproperties temp temporary terminated then to touch transaction transactions transform true truncate unarchive unbounded uncache union unlock unset use using values view when where window with"),builtin:s("abs acos acosh add_months aggregate and any approx_count_distinct approx_percentile array array_contains array_distinct array_except array_intersect array_join array_max array_min array_position array_remove array_repeat array_sort array_union arrays_overlap arrays_zip ascii asin asinh assert_true atan atan2 atanh avg base64 between bigint bin binary bit_and bit_count bit_get bit_length bit_or bit_xor bool_and bool_or boolean bround btrim cardinality case cast cbrt ceil ceiling char char_length character_length chr coalesce collect_list collect_set concat concat_ws conv corr cos cosh cot count count_if count_min_sketch covar_pop covar_samp crc32 cume_dist current_catalog current_database current_date current_timestamp current_timezone current_user date date_add date_format date_from_unix_date date_part date_sub date_trunc datediff day dayofmonth dayofweek dayofyear decimal decode degrees delimited dense_rank div double e element_at elt encode every exists exp explode explode_outer expm1 extract factorial filter find_in_set first first_value flatten float floor forall format_number format_string from_csv from_json from_unixtime from_utc_timestamp get_json_object getbit greatest grouping grouping_id hash hex hour hypot if ifnull in initcap inline inline_outer input_file_block_length input_file_block_start input_file_name inputformat instr int isnan isnotnull isnull java_method json_array_length json_object_keys json_tuple kurtosis lag last last_day last_value lcase lead least left length levenshtein like ln locate log log10 log1p log2 lower lpad ltrim make_date make_dt_interval make_interval make_timestamp make_ym_interval map map_concat map_entries map_filter map_from_arrays map_from_entries map_keys map_values map_zip_with max max_by md5 mean min min_by minute mod monotonically_increasing_id month months_between named_struct nanvl negative next_day not now nth_value ntile nullif nvl nvl2 octet_length or outputformat overlay parse_url percent_rank percentile percentile_approx pi pmod posexplode posexplode_outer position positive pow power printf quarter radians raise_error rand randn random rank rcfile reflect regexp regexp_extract regexp_extract_all regexp_like regexp_replace repeat replace reverse right rint rlike round row_number rpad rtrim schema_of_csv schema_of_json second sentences sequence sequencefile serde session_window sha sha1 sha2 shiftleft shiftright shiftrightunsigned shuffle sign signum sin sinh size skewness slice smallint some sort_array soundex space spark_partition_id split sqrt stack std stddev stddev_pop stddev_samp str_to_map string struct substr substring substring_index sum tan tanh textfile timestamp timestamp_micros timestamp_millis timestamp_seconds tinyint to_csv to_date to_json to_timestamp to_unix_timestamp to_utc_timestamp transform transform_keys transform_values translate trim trunc try_add try_divide typeof ucase unbase64 unhex uniontype unix_date unix_micros unix_millis unix_seconds unix_timestamp upper uuid var_pop var_samp variance version weekday weekofyear when width_bucket window xpath xpath_boolean xpath_double xpath_float xpath_int xpath_long xpath_number xpath_short xpath_string xxhash64 year zip_with"),atoms:s("false true null"),operatorChars:/^[*\/+\-%<>!=~&|^]/,dateSQL:s("date time timestamp"),support:s("doubleQuote zerolessFloat")}),o.defineMIME("text/x-esper",{name:"sql",client:s("source"),keywords:s("alter and as asc between by count create delete desc distinct drop from group having in insert into is join like not on or order select set table union update values where limit after all and as at asc avedev avg between by case cast coalesce count create current_timestamp day days delete define desc distinct else end escape events every exists false first from full group having hour hours in inner insert instanceof into irstream is istream join last lastweekday left limit like max match_recognize matches median measures metadatasql min minute minutes msec millisecond milliseconds not null offset on or order outer output partition pattern prev prior regexp retain-union retain-intersection right rstream sec second seconds select set some snapshot sql stddev sum then true unidirectional until update variable weekday when where window"),builtin:{},atoms:s("false true null"),operatorChars:/^[*+\-%<>!=&|^\/#@?~]/,dateSQL:s("time"),support:s("decimallessFloat zerolessFloat binaryNumber hexNumber")}),o.defineMIME("text/x-trino",{name:"sql",keywords:s("abs absent acos add admin after all all_match alter analyze and any any_match approx_distinct approx_most_frequent approx_percentile approx_set arbitrary array_agg array_distinct array_except array_intersect array_join array_max array_min array_position array_remove array_sort array_union arrays_overlap as asc asin at at_timezone atan atan2 authorization avg bar bernoulli beta_cdf between bing_tile bing_tile_at bing_tile_coordinates bing_tile_polygon bing_tile_quadkey bing_tile_zoom_level bing_tiles_around bit_count bitwise_and bitwise_and_agg bitwise_left_shift bitwise_not bitwise_or bitwise_or_agg bitwise_right_shift bitwise_right_shift_arithmetic bitwise_xor bool_and bool_or both by call cardinality cascade case cast catalogs cbrt ceil ceiling char2hexint checksum chr classify coalesce codepoint column columns combinations comment commit committed concat concat_ws conditional constraint contains contains_sequence convex_hull_agg copartition corr cos cosh cosine_similarity count count_if covar_pop covar_samp crc32 create cross cube cume_dist current current_catalog current_date current_groups current_path current_role current_schema current_time current_timestamp current_timezone current_user data date_add date_diff date_format date_parse date_trunc day day_of_month day_of_week day_of_year deallocate default define definer degrees delete dense_rank deny desc describe descriptor distinct distributed dow doy drop e element_at else empty empty_approx_set encoding end error escape evaluate_classifier_predictions every except excluding execute exists exp explain extract false features fetch filter final first first_value flatten floor following for format format_datetime format_number from from_base from_base32 from_base64 from_base64url from_big_endian_32 from_big_endian_64 from_encoded_polyline from_geojson_geometry from_hex from_ieee754_32 from_ieee754_64 from_iso8601_date from_iso8601_timestamp from_iso8601_timestamp_nanos from_unixtime from_unixtime_nanos from_utf8 full functions geometric_mean geometry_from_hadoop_shape geometry_invalid_reason geometry_nearest_points geometry_to_bing_tiles geometry_union geometry_union_agg grant granted grants graphviz great_circle_distance greatest group grouping groups hamming_distance hash_counts having histogram hmac_md5 hmac_sha1 hmac_sha256 hmac_sha512 hour human_readable_seconds if ignore in including index infinity initial inner input insert intersect intersection_cardinality into inverse_beta_cdf inverse_normal_cdf invoker io is is_finite is_infinite is_json_scalar is_nan isolation jaccard_index join json_array json_array_contains json_array_get json_array_length json_exists json_extract json_extract_scalar json_format json_object json_parse json_query json_size json_value keep key keys kurtosis lag last last_day_of_month last_value lateral lead leading learn_classifier learn_libsvm_classifier learn_libsvm_regressor learn_regressor least left length level levenshtein_distance like limit line_interpolate_point line_interpolate_points line_locate_point listagg ln local localtime localtimestamp log log10 log2 logical lower lpad ltrim luhn_check make_set_digest map_agg map_concat map_entries map_filter map_from_entries map_keys map_union map_values map_zip_with match match_recognize matched matches materialized max max_by md5 measures merge merge_set_digest millisecond min min_by minute mod month multimap_agg multimap_from_entries murmur3 nan natural next nfc nfd nfkc nfkd ngrams no none none_match normal_cdf normalize not now nth_value ntile null nullif nulls numeric_histogram object objectid_timestamp of offset omit on one only option or order ordinality outer output over overflow parse_data_size parse_datetime parse_duration partition partitions passing past path pattern per percent_rank permute pi position pow power preceding prepare privileges properties prune qdigest_agg quarter quotes radians rand random range rank read recursive reduce reduce_agg refresh regexp_count regexp_extract regexp_extract_all regexp_like regexp_position regexp_replace regexp_split regr_intercept regr_slope regress rename render repeat repeatable replace reset respect restrict returning reverse revoke rgb right role roles rollback rollup round row_number rows rpad rtrim running scalar schema schemas second security seek select sequence serializable session set sets sha1 sha256 sha512 show shuffle sign simplify_geometry sin skewness skip slice some soundex spatial_partitioning spatial_partitions split split_part split_to_map split_to_multimap spooky_hash_v2_32 spooky_hash_v2_64 sqrt st_area st_asbinary st_astext st_boundary st_buffer st_centroid st_contains st_convexhull st_coorddim st_crosses st_difference st_dimension st_disjoint st_distance st_endpoint st_envelope st_envelopeaspts st_equals st_exteriorring st_geometries st_geometryfromtext st_geometryn st_geometrytype st_geomfrombinary st_interiorringn st_interiorrings st_intersection st_intersects st_isclosed st_isempty st_isring st_issimple st_isvalid st_length st_linefromtext st_linestring st_multipoint st_numgeometries st_numinteriorring st_numpoints st_overlaps st_point st_pointn st_points st_polygon st_relate st_startpoint st_symdifference st_touches st_union st_within st_x st_xmax st_xmin st_y st_ymax st_ymin start starts_with stats stddev stddev_pop stddev_samp string strpos subset substr substring sum system table tables tablesample tan tanh tdigest_agg text then ties timestamp_objectid timezone_hour timezone_minute to to_base to_base32 to_base64 to_base64url to_big_endian_32 to_big_endian_64 to_char to_date to_encoded_polyline to_geojson_geometry to_geometry to_hex to_ieee754_32 to_ieee754_64 to_iso8601 to_milliseconds to_spherical_geography to_timestamp to_unixtime to_utf8 trailing transaction transform transform_keys transform_values translate trim trim_array true truncate try try_cast type typeof uescape unbounded uncommitted unconditional union unique unknown unmatched unnest update upper url_decode url_encode url_extract_fragment url_extract_host url_extract_parameter url_extract_path url_extract_port url_extract_protocol url_extract_query use user using utf16 utf32 utf8 validate value value_at_quantile values values_at_quantiles var_pop var_samp variance verbose version view week week_of_year when where width_bucket wilson_interval_lower wilson_interval_upper window with with_timezone within without word_stem work wrapper write xxhash64 year year_of_week yow zip zip_with"),builtin:s("array bigint bingtile boolean char codepoints color date decimal double function geometry hyperloglog int integer interval ipaddress joniregexp json json2016 jsonpath kdbtree likepattern map model objectid p4hyperloglog precision qdigest re2jregexp real regressor row setdigest smallint sphericalgeography tdigest time timestamp tinyint uuid varbinary varchar zone"),atoms:s("false true null unknown"),operatorChars:/^[[\]|<>=!\-+*/%]/,dateSQL:s("date time timestamp zone"),support:s("decimallessFloat zerolessFloat hexNumber")})})});var ta=Ke(($u,Ku)=>{(function(o){typeof $u=="object"&&typeof Ku=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";o.defineMode("stylus",function(M){for(var H=M.indentUnit,Z="",ee=y(p),re=/^(a|b|i|s|col|em)$/i,N=y(S),F=y(s),D=y(T),Q=y(g),j=y(v),V=z(v),_=y(b),K=y(C),X=y(h),I=/^\s*([.]{2,3}|&&|\|\||\*\*|[?!=:]?=|[-+*\/%<>]=?|\?:|\~)/,B=z(x),le=y(c),xe=new RegExp(/^\-(moz|ms|o|webkit)-/i),q=y(d),L="",de={},ze,pe,Ee,ge;Z.length|~|\/)?\s*[\w-]*([a-z0-9-]|\*|\/\*)(\(|,)?)/),W.context.line.firstWord=L?L[0].replace(/^\s*/,""):"",W.context.line.indent=$.indentation(),ze=$.peek(),$.match("//"))return $.skipToEnd(),["comment","comment"];if($.match("/*"))return W.tokenize=qe,qe($,W);if(ze=='"'||ze=="'")return $.next(),W.tokenize=Se(ze),W.tokenize($,W);if(ze=="@")return $.next(),$.eatWhile(/[\w\\-]/),["def",$.current()];if(ze=="#"){if($.next(),$.match(/^[0-9a-f]{3}([0-9a-f]([0-9a-f]{2}){0,2})?\b(?!-)/i))return["atom","atom"];if($.match(/^[a-z][\w-]*/i))return["builtin","hash"]}return $.match(xe)?["meta","vendor-prefixes"]:$.match(/^-?[0-9]?\.?[0-9]/)?($.eatWhile(/[a-z%]/i),["number","unit"]):ze=="!"?($.next(),[$.match(/^(important|optional)/i)?"keyword":"operator","important"]):ze=="."&&$.match(/^\.[a-z][\w-]*/i)?["qualifier","qualifier"]:$.match(V)?($.peek()=="("&&(W.tokenize=je),["property","word"]):$.match(/^[a-z][\w-]*\(/i)?($.backUp(1),["keyword","mixin"]):$.match(/^(\+|-)[a-z][\w-]*\(/i)?($.backUp(1),["keyword","block-mixin"]):$.string.match(/^\s*&/)&&$.match(/^[-_]+[a-z][\w-]*/)?["qualifier","qualifier"]:$.match(/^(\/|&)(-|_|:|\.|#|[a-z])/)?($.backUp(1),["variable-3","reference"]):$.match(/^&{1}\s*$/)?["variable-3","reference"]:$.match(B)?["operator","operator"]:$.match(/^\$?[-_]*[a-z0-9]+[\w-]*/i)?$.match(/^(\.|\[)[\w-\'\"\]]+/i,!1)&&!U($.current())?($.match("."),["variable-2","variable-name"]):["variable-2","word"]:$.match(I)?["operator",$.current()]:/[:;,{}\[\]\(\)]/.test(ze)?($.next(),[null,ze]):($.next(),[null,null])}function qe($,W){for(var se=!1,De;(De=$.next())!=null;){if(se&&De=="/"){W.tokenize=null;break}se=De=="*"}return["comment","comment"]}function Se($){return function(W,se){for(var De=!1,nt;(nt=W.next())!=null;){if(nt==$&&!De){$==")"&&W.backUp(1);break}De=!De&&nt=="\\"}return(nt==$||!De&&$!=")")&&(se.tokenize=null),["string","string"]}}function je($,W){return $.next(),$.match(/\s*[\"\')]/,!1)?W.tokenize=null:W.tokenize=Se(")"),[null,"("]}function Ze($,W,se,De){this.type=$,this.indent=W,this.prev=se,this.line=De||{firstWord:"",indent:0}}function ke($,W,se,De){return De=De>=0?De:H,$.context=new Ze(se,W.indentation()+De,$.context),se}function Je($,W){var se=$.context.indent-H;return W=W||!1,$.context=$.context.prev,W&&($.context.indent=se),$.context.type}function He($,W,se){return de[se.context.type]($,W,se)}function Ge($,W,se,De){for(var nt=De||1;nt>0;nt--)se.context=se.context.prev;return He($,W,se)}function U($){return $.toLowerCase()in ee}function G($){return $=$.toLowerCase(),$ in N||$ in X}function ce($){return $.toLowerCase()in le}function Be($){return $.toLowerCase().match(xe)}function te($){var W=$.toLowerCase(),se="variable-2";return U($)?se="tag":ce($)?se="block-keyword":G($)?se="property":W in D||W in q?se="atom":W=="return"||W in Q?se="keyword":$.match(/^[A-Z]/)&&(se="string"),se}function fe($,W){return Me(W)&&($=="{"||$=="]"||$=="hash"||$=="qualifier")||$=="block-mixin"}function oe($,W){return $=="{"&&W.match(/^\s*\$?[\w-]+/i,!1)}function Ue($,W){return $==":"&&W.match(/^[a-z-]+/,!1)}function we($){return $.sol()||$.string.match(new RegExp("^\\s*"+R($.current())))}function Me($){return $.eol()||$.match(/^\s*$/,!1)}function Le($){var W=/^\s*[-_]*[a-z0-9]+[\w-]*/i,se=typeof $=="string"?$.match(W):$.string.match(W);return se?se[0].replace(/^\s*/,""):""}return de.block=function($,W,se){if($=="comment"&&we(W)||$==","&&Me(W)||$=="mixin")return ke(se,W,"block",0);if(oe($,W))return ke(se,W,"interpolation");if(Me(W)&&$=="]"&&!/^\s*(\.|#|:|\[|\*|&)/.test(W.string)&&!U(Le(W)))return ke(se,W,"block",0);if(fe($,W))return ke(se,W,"block");if($=="}"&&Me(W))return ke(se,W,"block",0);if($=="variable-name")return W.string.match(/^\s?\$[\w-\.\[\]\'\"]+$/)||ce(Le(W))?ke(se,W,"variableName"):ke(se,W,"variableName",0);if($=="=")return!Me(W)&&!ce(Le(W))?ke(se,W,"block",0):ke(se,W,"block");if($=="*"&&(Me(W)||W.match(/\s*(,|\.|#|\[|:|{)/,!1)))return ge="tag",ke(se,W,"block");if(Ue($,W))return ke(se,W,"pseudo");if(/@(font-face|media|supports|(-moz-)?document)/.test($))return ke(se,W,Me(W)?"block":"atBlock");if(/@(-(moz|ms|o|webkit)-)?keyframes$/.test($))return ke(se,W,"keyframes");if(/@extends?/.test($))return ke(se,W,"extend",0);if($&&$.charAt(0)=="@")return W.indentation()>0&&G(W.current().slice(1))?(ge="variable-2","block"):/(@import|@require|@charset)/.test($)?ke(se,W,"block",0):ke(se,W,"block");if($=="reference"&&Me(W))return ke(se,W,"block");if($=="(")return ke(se,W,"parens");if($=="vendor-prefixes")return ke(se,W,"vendorPrefixes");if($=="word"){var De=W.current();if(ge=te(De),ge=="property")return we(W)?ke(se,W,"block",0):(ge="atom","block");if(ge=="tag"){if(/embed|menu|pre|progress|sub|table/.test(De)&&G(Le(W))||W.string.match(new RegExp("\\[\\s*"+De+"|"+De+"\\s*\\]")))return ge="atom","block";if(re.test(De)&&(we(W)&&W.string.match(/=/)||!we(W)&&!W.string.match(/^(\s*\.|#|\&|\[|\/|>|\*)/)&&!U(Le(W))))return ge="variable-2",ce(Le(W))?"block":ke(se,W,"block",0);if(Me(W))return ke(se,W,"block")}if(ge=="block-keyword")return ge="keyword",W.current(/(if|unless)/)&&!we(W)?"block":ke(se,W,"block");if(De=="return")return ke(se,W,"block",0);if(ge=="variable-2"&&W.string.match(/^\s?\$[\w-\.\[\]\'\"]+$/))return ke(se,W,"block")}return se.context.type},de.parens=function($,W,se){if($=="(")return ke(se,W,"parens");if($==")")return se.context.prev.type=="parens"?Je(se):W.string.match(/^[a-z][\w-]*\(/i)&&Me(W)||ce(Le(W))||/(\.|#|:|\[|\*|&|>|~|\+|\/)/.test(Le(W))||!W.string.match(/^-?[a-z][\w-\.\[\]\'\"]*\s*=/)&&U(Le(W))?ke(se,W,"block"):W.string.match(/^[\$-]?[a-z][\w-\.\[\]\'\"]*\s*=/)||W.string.match(/^\s*(\(|\)|[0-9])/)||W.string.match(/^\s+[a-z][\w-]*\(/i)||W.string.match(/^\s+[\$-]?[a-z]/i)?ke(se,W,"block",0):Me(W)?ke(se,W,"block"):ke(se,W,"block",0);if($&&$.charAt(0)=="@"&&G(W.current().slice(1))&&(ge="variable-2"),$=="word"){var De=W.current();ge=te(De),ge=="tag"&&re.test(De)&&(ge="variable-2"),(ge=="property"||De=="to")&&(ge="atom")}return $=="variable-name"?ke(se,W,"variableName"):Ue($,W)?ke(se,W,"pseudo"):se.context.type},de.vendorPrefixes=function($,W,se){return $=="word"?(ge="property",ke(se,W,"block",0)):Je(se)},de.pseudo=function($,W,se){return G(Le(W.string))?Ge($,W,se):(W.match(/^[a-z-]+/),ge="variable-3",Me(W)?ke(se,W,"block"):Je(se))},de.atBlock=function($,W,se){if($=="(")return ke(se,W,"atBlock_parens");if(fe($,W))return ke(se,W,"block");if(oe($,W))return ke(se,W,"interpolation");if($=="word"){var De=W.current().toLowerCase();if(/^(only|not|and|or)$/.test(De)?ge="keyword":j.hasOwnProperty(De)?ge="tag":K.hasOwnProperty(De)?ge="attribute":_.hasOwnProperty(De)?ge="property":F.hasOwnProperty(De)?ge="string-2":ge=te(W.current()),ge=="tag"&&Me(W))return ke(se,W,"block")}return $=="operator"&&/^(not|and|or)$/.test(W.current())&&(ge="keyword"),se.context.type},de.atBlock_parens=function($,W,se){if($=="{"||$=="}")return se.context.type;if($==")")return Me(W)?ke(se,W,"block"):ke(se,W,"atBlock");if($=="word"){var De=W.current().toLowerCase();return ge=te(De),/^(max|min)/.test(De)&&(ge="property"),ge=="tag"&&(re.test(De)?ge="variable-2":ge="atom"),se.context.type}return de.atBlock($,W,se)},de.keyframes=function($,W,se){return W.indentation()=="0"&&($=="}"&&we(W)||$=="]"||$=="hash"||$=="qualifier"||U(W.current()))?Ge($,W,se):$=="{"?ke(se,W,"keyframes"):$=="}"?we(W)?Je(se,!0):ke(se,W,"keyframes"):$=="unit"&&/^[0-9]+\%$/.test(W.current())?ke(se,W,"keyframes"):$=="word"&&(ge=te(W.current()),ge=="block-keyword")?(ge="keyword",ke(se,W,"keyframes")):/@(font-face|media|supports|(-moz-)?document)/.test($)?ke(se,W,Me(W)?"block":"atBlock"):$=="mixin"?ke(se,W,"block",0):se.context.type},de.interpolation=function($,W,se){return $=="{"&&Je(se)&&ke(se,W,"block"),$=="}"?W.string.match(/^\s*(\.|#|:|\[|\*|&|>|~|\+|\/)/i)||W.string.match(/^\s*[a-z]/i)&&U(Le(W))?ke(se,W,"block"):!W.string.match(/^(\{|\s*\&)/)||W.match(/\s*[\w-]/,!1)?ke(se,W,"block",0):ke(se,W,"block"):$=="variable-name"?ke(se,W,"variableName",0):($=="word"&&(ge=te(W.current()),ge=="tag"&&(ge="atom")),se.context.type)},de.extend=function($,W,se){return $=="["||$=="="?"extend":$=="]"?Je(se):$=="word"?(ge=te(W.current()),"extend"):Je(se)},de.variableName=function($,W,se){return $=="string"||$=="["||$=="]"||W.current().match(/^(\.|\$)/)?(W.current().match(/^\.[\w-]+/i)&&(ge="variable-2"),"variableName"):Ge($,W,se)},{startState:function($){return{tokenize:null,state:"block",context:new Ze("block",$||0,null)}},token:function($,W){return!W.tokenize&&$.eatSpace()?null:(pe=(W.tokenize||Oe)($,W),pe&&typeof pe=="object"&&(Ee=pe[1],pe=pe[0]),ge=pe,W.state=de[W.state](Ee,$,W),ge)},indent:function($,W,se){var De=$.context,nt=W&&W.charAt(0),dt=De.indent,Pt=Le(W),It=se.match(/^\s*/)[0].replace(/\t/g,Z).length,Pe=$.context.prev?$.context.prev.line.firstWord:"",xt=$.context.prev?$.context.prev.line.indent:It;return De.prev&&(nt=="}"&&(De.type=="block"||De.type=="atBlock"||De.type=="keyframes")||nt==")"&&(De.type=="parens"||De.type=="atBlock_parens")||nt=="{"&&De.type=="at")?dt=De.indent-H:/(\})/.test(nt)||(/@|\$|\d/.test(nt)||/^\{/.test(W)||/^\s*\/(\/|\*)/.test(W)||/^\s*\/\*/.test(Pe)||/^\s*[\w-\.\[\]\'\"]+\s*(\?|:|\+)?=/i.test(W)||/^(\+|-)?[a-z][\w-]*\(/i.test(W)||/^return/.test(W)||ce(Pt)?dt=It:/(\.|#|:|\[|\*|&|>|~|\+|\/)/.test(nt)||U(Pt)?/\,\s*$/.test(Pe)?dt=xt:/^\s+/.test(se)&&(/(\.|#|:|\[|\*|&|>|~|\+|\/)/.test(Pe)||U(Pe))?dt=It<=xt?xt:xt+H:dt=It:!/,\s*$/.test(se)&&(Be(Pt)||G(Pt))&&(ce(Pe)?dt=It<=xt?xt:xt+H:/^\{/.test(Pe)?dt=It<=xt?It:xt+H:Be(Pe)||G(Pe)?dt=It>=xt?xt:It:/^(\.|#|:|\[|\*|&|@|\+|\-|>|~|\/)/.test(Pe)||/=\s*$/.test(Pe)||U(Pe)||/^\$[\w-\.\[\]\'\"]/.test(Pe)?dt=xt+H:dt=It)),dt},electricChars:"}",blockCommentStart:"/*",blockCommentEnd:"*/",blockCommentContinue:" * ",lineComment:"//",fold:"indent"}});var p=["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","bgsound","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","marquee","menu","menuitem","meta","meter","nav","nobr","noframes","noscript","object","ol","optgroup","option","output","p","param","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","track","u","ul","var","video"],v=["domain","regexp","url-prefix","url"],C=["all","aural","braille","handheld","print","projection","screen","tty","tv","embossed"],b=["width","min-width","max-width","height","min-height","max-height","device-width","min-device-width","max-device-width","device-height","min-device-height","max-device-height","aspect-ratio","min-aspect-ratio","max-aspect-ratio","device-aspect-ratio","min-device-aspect-ratio","max-device-aspect-ratio","color","min-color","max-color","color-index","min-color-index","max-color-index","monochrome","min-monochrome","max-monochrome","resolution","min-resolution","max-resolution","scan","grid","dynamic-range","video-dynamic-range"],S=["align-content","align-items","align-self","alignment-adjust","alignment-baseline","anchor-point","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","appearance","azimuth","backface-visibility","background","background-attachment","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","baseline-shift","binding","bleed","bookmark-label","bookmark-level","bookmark-state","bookmark-target","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","clear","clip","color","color-profile","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","crop","cue","cue-after","cue-before","cursor","direction","display","dominant-baseline","drop-initial-after-adjust","drop-initial-after-align","drop-initial-before-adjust","drop-initial-before-align","drop-initial-size","drop-initial-value","elevation","empty-cells","fit","fit-position","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","float-offset","flow-from","flow-into","font","font-feature-settings","font-family","font-kerning","font-language-override","font-size","font-size-adjust","font-stretch","font-style","font-synthesis","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-weight","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-position","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","inline-box-align","justify-content","left","letter-spacing","line-break","line-height","line-stacking","line-stacking-ruby","line-stacking-shift","line-stacking-strategy","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marker-offset","marks","marquee-direction","marquee-loop","marquee-play-count","marquee-speed","marquee-style","max-height","max-width","min-height","min-width","move-to","nav-down","nav-index","nav-left","nav-right","nav-up","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-style","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","page-policy","pause","pause-after","pause-before","perspective","perspective-origin","pitch","pitch-range","play-during","position","presentation-level","punctuation-trim","quotes","region-break-after","region-break-before","region-break-inside","region-fragment","rendering-intent","resize","rest","rest-after","rest-before","richness","right","rotation","rotation-point","ruby-align","ruby-overhang","ruby-position","ruby-span","shape-image-threshold","shape-inside","shape-margin","shape-outside","size","speak","speak-as","speak-header","speak-numeral","speak-punctuation","speech-rate","stress","string-set","tab-size","table-layout","target","target-name","target-new","target-position","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-height","text-indent","text-justify","text-outline","text-overflow","text-shadow","text-size-adjust","text-space-collapse","text-transform","text-underline-position","text-wrap","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","z-index","clip-path","clip-rule","mask","enable-background","filter","flood-color","flood-opacity","lighting-color","stop-color","stop-opacity","pointer-events","color-interpolation","color-interpolation-filters","color-rendering","fill","fill-opacity","fill-rule","image-rendering","marker","marker-end","marker-mid","marker-start","shape-rendering","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-rendering","baseline-shift","dominant-baseline","glyph-orientation-horizontal","glyph-orientation-vertical","text-anchor","writing-mode","font-smoothing","osx-font-smoothing"],s=["scrollbar-arrow-color","scrollbar-base-color","scrollbar-dark-shadow-color","scrollbar-face-color","scrollbar-highlight-color","scrollbar-shadow-color","scrollbar-3d-light-color","scrollbar-track-color","shape-inside","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","zoom"],h=["font-family","src","unicode-range","font-variant","font-feature-settings","font-stretch","font-weight","font-style"],g=["aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen"],T=["above","absolute","activeborder","additive","activecaption","afar","after-white-space","ahead","alias","all","all-scroll","alphabetic","alternate","always","amharic","amharic-abegede","antialiased","appworkspace","arabic-indic","armenian","asterisks","attr","auto","avoid","avoid-column","avoid-page","avoid-region","background","backwards","baseline","below","bidi-override","binary","bengali","blink","block","block-axis","bold","bolder","border","border-box","both","bottom","break","break-all","break-word","bullets","button","buttonface","buttonhighlight","buttonshadow","buttontext","calc","cambodian","capitalize","caps-lock-indicator","caption","captiontext","caret","cell","center","checkbox","circle","cjk-decimal","cjk-earthly-branch","cjk-heavenly-stem","cjk-ideographic","clear","clip","close-quote","col-resize","collapse","column","compact","condensed","conic-gradient","contain","content","contents","content-box","context-menu","continuous","copy","counter","counters","cover","crop","cross","crosshair","currentcolor","cursive","cyclic","dashed","decimal","decimal-leading-zero","default","default-button","destination-atop","destination-in","destination-out","destination-over","devanagari","disc","discard","disclosure-closed","disclosure-open","document","dot-dash","dot-dot-dash","dotted","double","down","e-resize","ease","ease-in","ease-in-out","ease-out","element","ellipse","ellipsis","embed","end","ethiopic","ethiopic-abegede","ethiopic-abegede-am-et","ethiopic-abegede-gez","ethiopic-abegede-ti-er","ethiopic-abegede-ti-et","ethiopic-halehame-aa-er","ethiopic-halehame-aa-et","ethiopic-halehame-am-et","ethiopic-halehame-gez","ethiopic-halehame-om-et","ethiopic-halehame-sid-et","ethiopic-halehame-so-et","ethiopic-halehame-ti-er","ethiopic-halehame-ti-et","ethiopic-halehame-tig","ethiopic-numeric","ew-resize","expanded","extends","extra-condensed","extra-expanded","fantasy","fast","fill","fixed","flat","flex","footnotes","forwards","from","geometricPrecision","georgian","graytext","groove","gujarati","gurmukhi","hand","hangul","hangul-consonant","hebrew","help","hidden","hide","high","higher","highlight","highlighttext","hiragana","hiragana-iroha","horizontal","hsl","hsla","icon","ignore","inactiveborder","inactivecaption","inactivecaptiontext","infinite","infobackground","infotext","inherit","initial","inline","inline-axis","inline-block","inline-flex","inline-table","inset","inside","intrinsic","invert","italic","japanese-formal","japanese-informal","justify","kannada","katakana","katakana-iroha","keep-all","khmer","korean-hangul-formal","korean-hanja-formal","korean-hanja-informal","landscape","lao","large","larger","left","level","lighter","line-through","linear","linear-gradient","lines","list-item","listbox","listitem","local","logical","loud","lower","lower-alpha","lower-armenian","lower-greek","lower-hexadecimal","lower-latin","lower-norwegian","lower-roman","lowercase","ltr","malayalam","match","matrix","matrix3d","media-play-button","media-slider","media-sliderthumb","media-volume-slider","media-volume-sliderthumb","medium","menu","menulist","menulist-button","menutext","message-box","middle","min-intrinsic","mix","mongolian","monospace","move","multiple","myanmar","n-resize","narrower","ne-resize","nesw-resize","no-close-quote","no-drop","no-open-quote","no-repeat","none","normal","not-allowed","nowrap","ns-resize","numbers","numeric","nw-resize","nwse-resize","oblique","octal","open-quote","optimizeLegibility","optimizeSpeed","oriya","oromo","outset","outside","outside-shape","overlay","overline","padding","padding-box","painted","page","paused","persian","perspective","plus-darker","plus-lighter","pointer","polygon","portrait","pre","pre-line","pre-wrap","preserve-3d","progress","push-button","radial-gradient","radio","read-only","read-write","read-write-plaintext-only","rectangle","region","relative","repeat","repeating-linear-gradient","repeating-radial-gradient","repeating-conic-gradient","repeat-x","repeat-y","reset","reverse","rgb","rgba","ridge","right","rotate","rotate3d","rotateX","rotateY","rotateZ","round","row-resize","rtl","run-in","running","s-resize","sans-serif","scale","scale3d","scaleX","scaleY","scaleZ","scroll","scrollbar","scroll-position","se-resize","searchfield","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","semi-condensed","semi-expanded","separate","serif","show","sidama","simp-chinese-formal","simp-chinese-informal","single","skew","skewX","skewY","skip-white-space","slide","slider-horizontal","slider-vertical","sliderthumb-horizontal","sliderthumb-vertical","slow","small","small-caps","small-caption","smaller","solid","somali","source-atop","source-in","source-out","source-over","space","spell-out","square","square-button","standard","start","static","status-bar","stretch","stroke","sub","subpixel-antialiased","super","sw-resize","symbolic","symbols","table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row","table-row-group","tamil","telugu","text","text-bottom","text-top","textarea","textfield","thai","thick","thin","threeddarkshadow","threedface","threedhighlight","threedlightshadow","threedshadow","tibetan","tigre","tigrinya-er","tigrinya-er-abegede","tigrinya-et","tigrinya-et-abegede","to","top","trad-chinese-formal","trad-chinese-informal","translate","translate3d","translateX","translateY","translateZ","transparent","ultra-condensed","ultra-expanded","underline","up","upper-alpha","upper-armenian","upper-greek","upper-hexadecimal","upper-latin","upper-norwegian","upper-roman","uppercase","urdu","url","var","vertical","vertical-text","visible","visibleFill","visiblePainted","visibleStroke","visual","w-resize","wait","wave","wider","window","windowframe","windowtext","words","x-large","x-small","xor","xx-large","xx-small","bicubic","optimizespeed","grayscale","row","row-reverse","wrap","wrap-reverse","column-reverse","flex-start","flex-end","space-between","space-around","unset"],x=["in","and","or","not","is not","is a","is","isnt","defined","if unless"],c=["for","if","else","unless","from","to"],d=["null","true","false","href","title","type","not-allowed","readonly","disabled"],w=["@font-face","@keyframes","@media","@viewport","@page","@host","@supports","@block","@css"],E=p.concat(v,C,b,S,s,g,T,h,x,c,d,w);function z(M){return M=M.sort(function(H,Z){return Z>H}),new RegExp("^(("+M.join(")|(")+"))\\b")}function y(M){for(var H={},Z=0;Z{(function(o){typeof Gu=="object"&&typeof Zu=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";function p(N){for(var F={},D=0;D~^?!",h=":;,.(){}[]",g=/^\-?0b[01][01_]*/,T=/^\-?0o[0-7][0-7_]*/,x=/^\-?0x[\dA-Fa-f][\dA-Fa-f_]*(?:(?:\.[\dA-Fa-f][\dA-Fa-f_]*)?[Pp]\-?\d[\d_]*)?/,c=/^\-?\d[\d_]*(?:\.\d[\d_]*)?(?:[Ee]\-?\d[\d_]*)?/,d=/^\$\d+|(`?)[_A-Za-z][_A-Za-z$0-9]*\1/,w=/^\.(?:\$\d+|(`?)[_A-Za-z][_A-Za-z$0-9]*\1)/,E=/^\#[A-Za-z]+/,z=/^@(?:\$\d+|(`?)[_A-Za-z][_A-Za-z$0-9]*\1)/;function y(N,F,D){if(N.sol()&&(F.indented=N.indentation()),N.eatSpace())return null;var Q=N.peek();if(Q=="/"){if(N.match("//"))return N.skipToEnd(),"comment";if(N.match("/*"))return F.tokenize.push(H),H(N,F)}if(N.match(E))return"builtin";if(N.match(z))return"attribute";if(N.match(g)||N.match(T)||N.match(x)||N.match(c))return"number";if(N.match(w))return"property";if(s.indexOf(Q)>-1)return N.next(),"operator";if(h.indexOf(Q)>-1)return N.next(),N.match(".."),"punctuation";var j;if(j=N.match(/("""|"|')/)){var V=M.bind(null,j[0]);return F.tokenize.push(V),V(N,F)}if(N.match(d)){var _=N.current();return S.hasOwnProperty(_)?"variable-2":b.hasOwnProperty(_)?"atom":v.hasOwnProperty(_)?(C.hasOwnProperty(_)&&(F.prev="define"),"keyword"):D=="define"?"def":"variable"}return N.next(),null}function R(){var N=0;return function(F,D,Q){var j=y(F,D,Q);if(j=="punctuation"){if(F.current()=="(")++N;else if(F.current()==")"){if(N==0)return F.backUp(1),D.tokenize.pop(),D.tokenize[D.tokenize.length-1](F,D);--N}}return j}}function M(N,F,D){for(var Q=N.length==1,j,V=!1;j=F.peek();)if(V){if(F.next(),j=="(")return D.tokenize.push(R()),"string";V=!1}else{if(F.match(N))return D.tokenize.pop(),"string";F.next(),V=j=="\\"}return Q&&D.tokenize.pop(),"string"}function H(N,F){for(var D;D=N.next();)if(D==="/"&&N.eat("*"))F.tokenize.push(H);else if(D==="*"&&N.eat("/")){F.tokenize.pop();break}return"comment"}function Z(N,F,D){this.prev=N,this.align=F,this.indented=D}function ee(N,F){var D=F.match(/^\s*($|\/[\/\*])/,!1)?null:F.column()+1;N.context=new Z(N.context,D,N.indented)}function re(N){N.context&&(N.indented=N.context.indented,N.context=N.context.prev)}o.defineMode("swift",function(N){return{startState:function(){return{prev:null,context:null,indented:0,tokenize:[]}},token:function(F,D){var Q=D.prev;D.prev=null;var j=D.tokenize[D.tokenize.length-1]||y,V=j(F,D,Q);if(!V||V=="comment"?D.prev=Q:D.prev||(D.prev=V),V=="punctuation"){var _=/[\(\[\{]|([\]\)\}])/.exec(F.current());_&&(_[1]?re:ee)(D,F)}return V},indent:function(F,D){var Q=F.context;if(!Q)return 0;var j=/^[\]\}\)]/.test(D);return Q.align!=null?Q.align-(j?1:0):Q.indented+(j?0:N.indentUnit)},electricInput:/^\s*[\)\}\]]$/,lineComment:"//",blockCommentStart:"/*",blockCommentEnd:"*/",fold:"brace",closeBrackets:"()[]{}''\"\"``"}}),o.defineMIME("text/x-swift","swift")})});var Vu=Ke((Yu,Qu)=>{(function(o){typeof Yu=="object"&&typeof Qu=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";o.defineMode("coffeescript",function(p,v){var C="error";function b(F){return new RegExp("^(("+F.join(")|(")+"))\\b")}var S=/^(?:->|=>|\+[+=]?|-[\-=]?|\*[\*=]?|\/[\/=]?|[=!]=|<[><]?=?|>>?=?|%=?|&=?|\|=?|\^=?|\~|!|\?|(or|and|\|\||&&|\?)=)/,s=/^(?:[()\[\]{},:`=;]|\.\.?\.?)/,h=/^[_A-Za-z$][_A-Za-z$0-9]*/,g=/^@[_A-Za-z$][_A-Za-z$0-9]*/,T=b(["and","or","not","is","isnt","in","instanceof","typeof"]),x=["for","while","loop","if","unless","else","switch","try","catch","finally","class"],c=["break","by","continue","debugger","delete","do","in","of","new","return","then","this","@","throw","when","until","extends"],d=b(x.concat(c));x=b(x);var w=/^('{3}|\"{3}|['\"])/,E=/^(\/{3}|\/)/,z=["Infinity","NaN","undefined","null","true","false","on","off","yes","no"],y=b(z);function R(F,D){if(F.sol()){D.scope.align===null&&(D.scope.align=!1);var Q=D.scope.offset;if(F.eatSpace()){var j=F.indentation();return j>Q&&D.scope.type=="coffee"?"indent":j0&&ee(F,D)}if(F.eatSpace())return null;var V=F.peek();if(F.match("####"))return F.skipToEnd(),"comment";if(F.match("###"))return D.tokenize=H,D.tokenize(F,D);if(V==="#")return F.skipToEnd(),"comment";if(F.match(/^-?[0-9\.]/,!1)){var _=!1;if(F.match(/^-?\d*\.\d+(e[\+\-]?\d+)?/i)&&(_=!0),F.match(/^-?\d+\.\d*/)&&(_=!0),F.match(/^-?\.\d+/)&&(_=!0),_)return F.peek()=="."&&F.backUp(1),"number";var K=!1;if(F.match(/^-?0x[0-9a-f]+/i)&&(K=!0),F.match(/^-?[1-9]\d*(e[\+\-]?\d+)?/)&&(K=!0),F.match(/^-?0(?![\dx])/i)&&(K=!0),K)return"number"}if(F.match(w))return D.tokenize=M(F.current(),!1,"string"),D.tokenize(F,D);if(F.match(E)){if(F.current()!="/"||F.match(/^.*\//,!1))return D.tokenize=M(F.current(),!0,"string-2"),D.tokenize(F,D);F.backUp(1)}return F.match(S)||F.match(T)?"operator":F.match(s)?"punctuation":F.match(y)?"atom":F.match(g)||D.prop&&F.match(h)?"property":F.match(d)?"keyword":F.match(h)?"variable":(F.next(),C)}function M(F,D,Q){return function(j,V){for(;!j.eol();)if(j.eatWhile(/[^'"\/\\]/),j.eat("\\")){if(j.next(),D&&j.eol())return Q}else{if(j.match(F))return V.tokenize=R,Q;j.eat(/['"\/]/)}return D&&(v.singleLineStringErrors?Q=C:V.tokenize=R),Q}}function H(F,D){for(;!F.eol();){if(F.eatWhile(/[^#]/),F.match("###")){D.tokenize=R;break}F.eatWhile("#")}return"comment"}function Z(F,D,Q){Q=Q||"coffee";for(var j=0,V=!1,_=null,K=D.scope;K;K=K.prev)if(K.type==="coffee"||K.type=="}"){j=K.offset+p.indentUnit;break}Q!=="coffee"?(V=null,_=F.column()+F.current().length):D.scope.align&&(D.scope.align=!1),D.scope={offset:j,type:Q,prev:D.scope,align:V,alignOffset:_}}function ee(F,D){if(D.scope.prev)if(D.scope.type==="coffee"){for(var Q=F.indentation(),j=!1,V=D.scope;V;V=V.prev)if(Q===V.offset){j=!0;break}if(!j)return!0;for(;D.scope.prev&&D.scope.offset!==Q;)D.scope=D.scope.prev;return!1}else return D.scope=D.scope.prev,!1}function re(F,D){var Q=D.tokenize(F,D),j=F.current();j==="return"&&(D.dedent=!0),((j==="->"||j==="=>")&&F.eol()||Q==="indent")&&Z(F,D);var V="[({".indexOf(j);if(V!==-1&&Z(F,D,"])}".slice(V,V+1)),x.exec(j)&&Z(F,D),j=="then"&&ee(F,D),Q==="dedent"&&ee(F,D))return C;if(V="])}".indexOf(j),V!==-1){for(;D.scope.type=="coffee"&&D.scope.prev;)D.scope=D.scope.prev;D.scope.type==j&&(D.scope=D.scope.prev)}return D.dedent&&F.eol()&&(D.scope.type=="coffee"&&D.scope.prev&&(D.scope=D.scope.prev),D.dedent=!1),Q}var N={startState:function(F){return{tokenize:R,scope:{offset:F||0,type:"coffee",prev:null,align:!1},prop:!1,dedent:0}},token:function(F,D){var Q=D.scope.align===null&&D.scope;Q&&F.sol()&&(Q.align=!1);var j=re(F,D);return j&&j!="comment"&&(Q&&(Q.align=!0),D.prop=j=="punctuation"&&F.current()=="."),j},indent:function(F,D){if(F.tokenize!=R)return 0;var Q=F.scope,j=D&&"])}".indexOf(D.charAt(0))>-1;if(j)for(;Q.type=="coffee"&&Q.prev;)Q=Q.prev;var V=j&&Q.type===D.charAt(0);return Q.align?Q.alignOffset-(V?1:0):(V?Q.prev:Q).offset},lineComment:"#",fold:"indent"};return N}),o.defineMIME("application/vnd.coffeescript","coffeescript"),o.defineMIME("text/x-coffeescript","coffeescript"),o.defineMIME("text/coffeescript","coffeescript")})});var tc=Ke((Ju,ec)=>{(function(o){typeof Ju=="object"&&typeof ec=="object"?o(We(),vn(),gn(),Qn()):typeof define=="function"&&define.amd?define(["../../lib/codemirror","../javascript/javascript","../css/css","../htmlmixed/htmlmixed"],o):o(CodeMirror)})(function(o){"use strict";o.defineMode("pug",function(p){var v="keyword",C="meta",b="builtin",S="qualifier",s={"{":"}","(":")","[":"]"},h=o.getMode(p,"javascript");function g(){this.javaScriptLine=!1,this.javaScriptLineExcludesColon=!1,this.javaScriptArguments=!1,this.javaScriptArgumentsDepth=0,this.isInterpolating=!1,this.interpolationNesting=0,this.jsState=o.startState(h),this.restOfLine="",this.isIncludeFiltered=!1,this.isEach=!1,this.lastTag="",this.scriptType="",this.isAttrs=!1,this.attrsNest=[],this.inAttributeName=!0,this.attributeIsType=!1,this.attrValue="",this.indentOf=1/0,this.indentToken="",this.innerMode=null,this.innerState=null,this.innerModeForLine=!1}g.prototype.copy=function(){var U=new g;return U.javaScriptLine=this.javaScriptLine,U.javaScriptLineExcludesColon=this.javaScriptLineExcludesColon,U.javaScriptArguments=this.javaScriptArguments,U.javaScriptArgumentsDepth=this.javaScriptArgumentsDepth,U.isInterpolating=this.isInterpolating,U.interpolationNesting=this.interpolationNesting,U.jsState=o.copyState(h,this.jsState),U.innerMode=this.innerMode,this.innerMode&&this.innerState&&(U.innerState=o.copyState(this.innerMode,this.innerState)),U.restOfLine=this.restOfLine,U.isIncludeFiltered=this.isIncludeFiltered,U.isEach=this.isEach,U.lastTag=this.lastTag,U.scriptType=this.scriptType,U.isAttrs=this.isAttrs,U.attrsNest=this.attrsNest.slice(),U.inAttributeName=this.inAttributeName,U.attributeIsType=this.attributeIsType,U.attrValue=this.attrValue,U.indentOf=this.indentOf,U.indentToken=this.indentToken,U.innerModeForLine=this.innerModeForLine,U};function T(U,G){if(U.sol()&&(G.javaScriptLine=!1,G.javaScriptLineExcludesColon=!1),G.javaScriptLine){if(G.javaScriptLineExcludesColon&&U.peek()===":"){G.javaScriptLine=!1,G.javaScriptLineExcludesColon=!1;return}var ce=h.token(U,G.jsState);return U.eol()&&(G.javaScriptLine=!1),ce||!0}}function x(U,G){if(G.javaScriptArguments){if(G.javaScriptArgumentsDepth===0&&U.peek()!=="("){G.javaScriptArguments=!1;return}if(U.peek()==="("?G.javaScriptArgumentsDepth++:U.peek()===")"&&G.javaScriptArgumentsDepth--,G.javaScriptArgumentsDepth===0){G.javaScriptArguments=!1;return}var ce=h.token(U,G.jsState);return ce||!0}}function c(U){if(U.match(/^yield\b/))return"keyword"}function d(U){if(U.match(/^(?:doctype) *([^\n]+)?/))return C}function w(U,G){if(U.match("#{"))return G.isInterpolating=!0,G.interpolationNesting=0,"punctuation"}function E(U,G){if(G.isInterpolating){if(U.peek()==="}"){if(G.interpolationNesting--,G.interpolationNesting<0)return U.next(),G.isInterpolating=!1,"punctuation"}else U.peek()==="{"&&G.interpolationNesting++;return h.token(U,G.jsState)||!0}}function z(U,G){if(U.match(/^case\b/))return G.javaScriptLine=!0,v}function y(U,G){if(U.match(/^when\b/))return G.javaScriptLine=!0,G.javaScriptLineExcludesColon=!0,v}function R(U){if(U.match(/^default\b/))return v}function M(U,G){if(U.match(/^extends?\b/))return G.restOfLine="string",v}function H(U,G){if(U.match(/^append\b/))return G.restOfLine="variable",v}function Z(U,G){if(U.match(/^prepend\b/))return G.restOfLine="variable",v}function ee(U,G){if(U.match(/^block\b *(?:(prepend|append)\b)?/))return G.restOfLine="variable",v}function re(U,G){if(U.match(/^include\b/))return G.restOfLine="string",v}function N(U,G){if(U.match(/^include:([a-zA-Z0-9\-]+)/,!1)&&U.match("include"))return G.isIncludeFiltered=!0,v}function F(U,G){if(G.isIncludeFiltered){var ce=B(U,G);return G.isIncludeFiltered=!1,G.restOfLine="string",ce}}function D(U,G){if(U.match(/^mixin\b/))return G.javaScriptLine=!0,v}function Q(U,G){if(U.match(/^\+([-\w]+)/))return U.match(/^\( *[-\w]+ *=/,!1)||(G.javaScriptArguments=!0,G.javaScriptArgumentsDepth=0),"variable";if(U.match("+#{",!1))return U.next(),G.mixinCallAfter=!0,w(U,G)}function j(U,G){if(G.mixinCallAfter)return G.mixinCallAfter=!1,U.match(/^\( *[-\w]+ *=/,!1)||(G.javaScriptArguments=!0,G.javaScriptArgumentsDepth=0),!0}function V(U,G){if(U.match(/^(if|unless|else if|else)\b/))return G.javaScriptLine=!0,v}function _(U,G){if(U.match(/^(- *)?(each|for)\b/))return G.isEach=!0,v}function K(U,G){if(G.isEach){if(U.match(/^ in\b/))return G.javaScriptLine=!0,G.isEach=!1,v;if(U.sol()||U.eol())G.isEach=!1;else if(U.next()){for(;!U.match(/^ in\b/,!1)&&U.next(););return"variable"}}}function X(U,G){if(U.match(/^while\b/))return G.javaScriptLine=!0,v}function I(U,G){var ce;if(ce=U.match(/^(\w(?:[-:\w]*\w)?)\/?/))return G.lastTag=ce[1].toLowerCase(),G.lastTag==="script"&&(G.scriptType="application/javascript"),"tag"}function B(U,G){if(U.match(/^:([\w\-]+)/)){var ce;return p&&p.innerModes&&(ce=p.innerModes(U.current().substring(1))),ce||(ce=U.current().substring(1)),typeof ce=="string"&&(ce=o.getMode(p,ce)),je(U,G,ce),"atom"}}function le(U,G){if(U.match(/^(!?=|-)/))return G.javaScriptLine=!0,"punctuation"}function xe(U){if(U.match(/^#([\w-]+)/))return b}function q(U){if(U.match(/^\.([\w-]+)/))return S}function L(U,G){if(U.peek()=="(")return U.next(),G.isAttrs=!0,G.attrsNest=[],G.inAttributeName=!0,G.attrValue="",G.attributeIsType=!1,"punctuation"}function de(U,G){if(G.isAttrs){if(s[U.peek()]&&G.attrsNest.push(s[U.peek()]),G.attrsNest[G.attrsNest.length-1]===U.peek())G.attrsNest.pop();else if(U.eat(")"))return G.isAttrs=!1,"punctuation";if(G.inAttributeName&&U.match(/^[^=,\)!]+/))return(U.peek()==="="||U.peek()==="!")&&(G.inAttributeName=!1,G.jsState=o.startState(h),G.lastTag==="script"&&U.current().trim().toLowerCase()==="type"?G.attributeIsType=!0:G.attributeIsType=!1),"attribute";var ce=h.token(U,G.jsState);if(G.attributeIsType&&ce==="string"&&(G.scriptType=U.current().toString()),G.attrsNest.length===0&&(ce==="string"||ce==="variable"||ce==="keyword"))try{return Function("","var x "+G.attrValue.replace(/,\s*$/,"").replace(/^!/,"")),G.inAttributeName=!0,G.attrValue="",U.backUp(U.current().length),de(U,G)}catch{}return G.attrValue+=U.current(),ce||!0}}function ze(U,G){if(U.match(/^&attributes\b/))return G.javaScriptArguments=!0,G.javaScriptArgumentsDepth=0,"keyword"}function pe(U){if(U.sol()&&U.eatSpace())return"indent"}function Ee(U,G){if(U.match(/^ *\/\/(-)?([^\n]*)/))return G.indentOf=U.indentation(),G.indentToken="comment","comment"}function ge(U){if(U.match(/^: */))return"colon"}function Oe(U,G){if(U.match(/^(?:\| ?| )([^\n]+)/))return"string";if(U.match(/^(<[^\n]*)/,!1))return je(U,G,"htmlmixed"),G.innerModeForLine=!0,Ze(U,G,!0)}function qe(U,G){if(U.eat(".")){var ce=null;return G.lastTag==="script"&&G.scriptType.toLowerCase().indexOf("javascript")!=-1?ce=G.scriptType.toLowerCase().replace(/"|'/g,""):G.lastTag==="style"&&(ce="css"),je(U,G,ce),"dot"}}function Se(U){return U.next(),null}function je(U,G,ce){ce=o.mimeModes[ce]||ce,ce=p.innerModes&&p.innerModes(ce)||ce,ce=o.mimeModes[ce]||ce,ce=o.getMode(p,ce),G.indentOf=U.indentation(),ce&&ce.name!=="null"?G.innerMode=ce:G.indentToken="string"}function Ze(U,G,ce){if(U.indentation()>G.indentOf||G.innerModeForLine&&!U.sol()||ce)return G.innerMode?(G.innerState||(G.innerState=G.innerMode.startState?o.startState(G.innerMode,U.indentation()):{}),U.hideFirstChars(G.indentOf+2,function(){return G.innerMode.token(U,G.innerState)||!0})):(U.skipToEnd(),G.indentToken);U.sol()&&(G.indentOf=1/0,G.indentToken=null,G.innerMode=null,G.innerState=null)}function ke(U,G){if(U.sol()&&(G.restOfLine=""),G.restOfLine){U.skipToEnd();var ce=G.restOfLine;return G.restOfLine="",ce}}function Je(){return new g}function He(U){return U.copy()}function Ge(U,G){var ce=Ze(U,G)||ke(U,G)||E(U,G)||F(U,G)||K(U,G)||de(U,G)||T(U,G)||x(U,G)||j(U,G)||c(U)||d(U)||w(U,G)||z(U,G)||y(U,G)||R(U)||M(U,G)||H(U,G)||Z(U,G)||ee(U,G)||re(U,G)||N(U,G)||D(U,G)||Q(U,G)||V(U,G)||_(U,G)||X(U,G)||I(U,G)||B(U,G)||le(U,G)||xe(U)||q(U)||L(U,G)||ze(U,G)||pe(U)||Oe(U,G)||Ee(U,G)||ge(U)||qe(U,G)||Se(U);return ce===!0?null:ce}return{startState:Je,copyState:He,token:Ge}},"javascript","css","htmlmixed"),o.defineMIME("text/x-pug","pug"),o.defineMIME("text/x-jade","pug")})});var ic=Ke((rc,nc)=>{(function(o){typeof rc=="object"&&typeof nc=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";o.multiplexingMode=function(p){var v=Array.prototype.slice.call(arguments,1);function C(b,S,s,h){if(typeof S=="string"){var g=b.indexOf(S,s);return h&&g>-1?g+S.length:g}var T=S.exec(s?b.slice(s):b);return T?T.index+s+(h?T[0].length:0):-1}return{startState:function(){return{outer:o.startState(p),innerActive:null,inner:null,startingInner:!1}},copyState:function(b){return{outer:o.copyState(p,b.outer),innerActive:b.innerActive,inner:b.innerActive&&o.copyState(b.innerActive.mode,b.inner),startingInner:b.startingInner}},token:function(b,S){if(S.innerActive){var E=S.innerActive,h=b.string;if(!E.close&&b.sol())return S.innerActive=S.inner=null,this.token(b,S);var x=E.close&&!S.startingInner?C(h,E.close,b.pos,E.parseDelimiters):-1;if(x==b.pos&&!E.parseDelimiters)return b.match(E.close),S.innerActive=S.inner=null,E.delimStyle&&E.delimStyle+" "+E.delimStyle+"-close";x>-1&&(b.string=h.slice(0,x));var z=E.mode.token(b,S.inner);return x>-1?b.string=h:b.pos>b.start&&(S.startingInner=!1),x==b.pos&&E.parseDelimiters&&(S.innerActive=S.inner=null),E.innerStyle&&(z?z=z+" "+E.innerStyle:z=E.innerStyle),z}else{for(var s=1/0,h=b.string,g=0;g{(function(o){typeof oc=="object"&&typeof ac=="object"?o(We(),Di(),ic()):typeof define=="function"&&define.amd?define(["../../lib/codemirror","../../addon/mode/simple","../../addon/mode/multiplex"],o):o(CodeMirror)})(function(o){"use strict";o.defineSimpleMode("handlebars-tags",{start:[{regex:/\{\{\{/,push:"handlebars_raw",token:"tag"},{regex:/\{\{!--/,push:"dash_comment",token:"comment"},{regex:/\{\{!/,push:"comment",token:"comment"},{regex:/\{\{/,push:"handlebars",token:"tag"}],handlebars_raw:[{regex:/\}\}\}/,pop:!0,token:"tag"}],handlebars:[{regex:/\}\}/,pop:!0,token:"tag"},{regex:/"(?:[^\\"]|\\.)*"?/,token:"string"},{regex:/'(?:[^\\']|\\.)*'?/,token:"string"},{regex:/>|[#\/]([A-Za-z_]\w*)/,token:"keyword"},{regex:/(?:else|this)\b/,token:"keyword"},{regex:/\d+/i,token:"number"},{regex:/=|~|@|true|false/,token:"atom"},{regex:/(?:\.\.\/)*(?:[A-Za-z_][\w\.]*)+/,token:"variable-2"}],dash_comment:[{regex:/--\}\}/,pop:!0,token:"comment"},{regex:/./,token:"comment"}],comment:[{regex:/\}\}/,pop:!0,token:"comment"},{regex:/./,token:"comment"}],meta:{blockCommentStart:"{{--",blockCommentEnd:"--}}"}}),o.defineMode("handlebars",function(p,v){var C=o.getMode(p,"handlebars-tags");return!v||!v.base?C:o.multiplexingMode(o.getMode(p,v.base),{open:"{{",close:/\}\}\}?/,mode:C,parseDelimiters:!0})}),o.defineMIME("text/x-handlebars-template","handlebars")})});var cc=Ke((sc,uc)=>{(function(o){"use strict";typeof sc=="object"&&typeof uc=="object"?o(We(),Yn(),mn(),vn(),Vu(),gn(),ea(),ta(),tc(),lc()):typeof define=="function"&&define.amd?define(["../../lib/codemirror","../../addon/mode/overlay","../xml/xml","../javascript/javascript","../coffeescript/coffeescript","../css/css","../sass/sass","../stylus/stylus","../pug/pug","../handlebars/handlebars"],o):o(CodeMirror)})(function(o){var p={script:[["lang",/coffee(script)?/,"coffeescript"],["type",/^(?:text|application)\/(?:x-)?coffee(?:script)?$/,"coffeescript"],["lang",/^babel$/,"javascript"],["type",/^text\/babel$/,"javascript"],["type",/^text\/ecmascript-\d+$/,"javascript"]],style:[["lang",/^stylus$/i,"stylus"],["lang",/^sass$/i,"sass"],["lang",/^less$/i,"text/x-less"],["lang",/^scss$/i,"text/x-scss"],["type",/^(text\/)?(x-)?styl(us)?$/i,"stylus"],["type",/^text\/sass/i,"sass"],["type",/^(text\/)?(x-)?scss$/i,"text/x-scss"],["type",/^(text\/)?(x-)?less$/i,"text/x-less"]],template:[["lang",/^vue-template$/i,"vue"],["lang",/^pug$/i,"pug"],["lang",/^handlebars$/i,"handlebars"],["type",/^(text\/)?(x-)?pug$/i,"pug"],["type",/^text\/x-handlebars-template$/i,"handlebars"],[null,null,"vue-template"]]};o.defineMode("vue-template",function(v,C){var b={token:function(S){if(S.match(/^\{\{.*?\}\}/))return"meta mustache";for(;S.next()&&!S.match("{{",!1););return null}};return o.overlayMode(o.getMode(v,C.backdrop||"text/html"),b)}),o.defineMode("vue",function(v){return o.getMode(v,{name:"htmlmixed",tags:p})},"htmlmixed","xml","javascript","coffeescript","css","sass","stylus","pug","handlebars"),o.defineMIME("script/x-vue","vue"),o.defineMIME("text/x-vue","vue")})});var pc=Ke((fc,dc)=>{(function(o){typeof fc=="object"&&typeof dc=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";o.defineMode("yaml",function(){var p=["true","false","on","off","yes","no"],v=new RegExp("\\b(("+p.join(")|(")+"))$","i");return{token:function(C,b){var S=C.peek(),s=b.escaped;if(b.escaped=!1,S=="#"&&(C.pos==0||/\s/.test(C.string.charAt(C.pos-1))))return C.skipToEnd(),"comment";if(C.match(/^('([^']|\\.)*'?|"([^"]|\\.)*"?)/))return"string";if(b.literal&&C.indentation()>b.keyCol)return C.skipToEnd(),"string";if(b.literal&&(b.literal=!1),C.sol()){if(b.keyCol=0,b.pair=!1,b.pairStart=!1,C.match("---")||C.match("..."))return"def";if(C.match(/\s*-\s+/))return"meta"}if(C.match(/^(\{|\}|\[|\])/))return S=="{"?b.inlinePairs++:S=="}"?b.inlinePairs--:S=="["?b.inlineList++:b.inlineList--,"meta";if(b.inlineList>0&&!s&&S==",")return C.next(),"meta";if(b.inlinePairs>0&&!s&&S==",")return b.keyCol=0,b.pair=!1,b.pairStart=!1,C.next(),"meta";if(b.pairStart){if(C.match(/^\s*(\||\>)\s*/))return b.literal=!0,"meta";if(C.match(/^\s*(\&|\*)[a-z0-9\._-]+\b/i))return"variable-2";if(b.inlinePairs==0&&C.match(/^\s*-?[0-9\.\,]+\s?$/)||b.inlinePairs>0&&C.match(/^\s*-?[0-9\.\,]+\s?(?=(,|}))/))return"number";if(C.match(v))return"keyword"}return!b.pair&&C.match(/^\s*(?:[,\[\]{}&*!|>'"%@`][^\s'":]|[^\s,\[\]{}#&*!|>'"%@`])[^#:]*(?=:($|\s))/)?(b.pair=!0,b.keyCol=C.indentation(),"atom"):b.pair&&C.match(/^:\s*/)?(b.pairStart=!0,"meta"):(b.pairStart=!1,b.escaped=S=="\\",C.next(),null)},startState:function(){return{pair:!1,pairStart:!1,keyCol:0,inlinePairs:0,inlineList:0,literal:!1,escaped:!1}},lineComment:"#",fold:"indent"}}),o.defineMIME("text/x-yaml","yaml"),o.defineMIME("text/yaml","yaml")})});var $d={};function qd(o){for(var p;(p=Md.exec(o))!==null;){var v=p[0];if(v.indexOf("target=")===-1){var C=v.replace(/>$/,' target="_blank">');o=o.replace(v,C)}}return o}function Id(o){for(var p=new DOMParser,v=p.parseFromString(o,"text/html"),C=v.getElementsByTagName("li"),b=0;b0){for(var d=document.createElement("i"),w=0;w=0&&(x=s.getLineHandle(d),!v(x));d--);var R=s.getTokenAt({line:d,ch:1}),M=C(R).fencedChars,H,Z,ee,re;v(s.getLineHandle(h.line))?(H="",Z=h.line):v(s.getLineHandle(h.line-1))?(H="",Z=h.line-1):(H=M+` +`,Z=h.line),v(s.getLineHandle(g.line))?(ee="",re=g.line,g.ch===0&&(re+=1)):g.ch!==0&&v(s.getLineHandle(g.line+1))?(ee="",re=g.line+1):(ee=M+` +`,re=g.line+1),g.ch===0&&(re-=1),s.operation(function(){s.replaceRange(ee,{line:re,ch:0},{line:re+(ee?0:1),ch:0}),s.replaceRange(H,{line:Z,ch:0},{line:Z+(H?0:1),ch:0})}),s.setSelection({line:Z+(H?1:0),ch:0},{line:re+(H?1:-1),ch:0}),s.focus()}else{var N=h.line;if(v(s.getLineHandle(h.line))&&(b(s,h.line+1)==="fenced"?(d=h.line,N=h.line+1):(w=h.line,N=h.line-1)),d===void 0)for(d=N;d>=0&&(x=s.getLineHandle(d),!v(x));d--);if(w===void 0)for(E=s.lineCount(),w=N;w=0;d--)if(x=s.getLineHandle(d),!x.text.match(/^\s*$/)&&b(s,d,x)!=="indented"){d+=1;break}for(E=s.lineCount(),w=h.line;w\s+/,"unordered-list":C,"ordered-list":C},T=function(E,z){var y={quote:">","unordered-list":v,"ordered-list":"%%i."};return y[E].replace("%%i",z)},x=function(E,z){var y={quote:">","unordered-list":"\\"+v,"ordered-list":"\\d+."},R=new RegExp(y[E]);return z&&R.test(z)},c=function(E,z,y){var R=C.exec(z),M=T(E,d);return R!==null?(x(E,R[2])&&(M=""),z=R[1]+M+R[3]+z.replace(b,"").replace(g[E],"$1")):y==!1&&(z=M+" "+z),z},d=1,w=s.line;w<=h.line;w++)(function(E){var z=o.getLine(E);S[p]?z=z.replace(g[p],"$1"):(p=="unordered-list"&&(z=c("ordered-list",z,!0)),z=c(p,z,!1),d+=1),o.replaceRange(z,{line:E,ch:0},{line:E,ch:99999999999999})})(w);o.focus()}}function xc(o,p,v,C){if(!(!o.codemirror||o.isPreviewActive())){var b=o.codemirror,S=Tr(b),s=S[p];if(!s){Rr(b,s,v,C);return}var h=b.getCursor("start"),g=b.getCursor("end"),T=b.getLine(h.line),x=T.slice(0,h.ch),c=T.slice(h.ch);p=="link"?x=x.replace(/(.*)[^!]\[/,"$1"):p=="image"&&(x=x.replace(/(.*)!\[$/,"$1")),c=c.replace(/]\(.*?\)/,""),b.replaceRange(x+c,{line:h.line,ch:0},{line:h.line,ch:99999999999999}),h.ch-=v[0].length,h!==g&&(g.ch-=v[0].length),b.setSelection(h,g),b.focus()}}function sa(o,p,v,C){if(!(!o.codemirror||o.isPreviewActive())){C=typeof C>"u"?v:C;var b=o.codemirror,S=Tr(b),s,h=v,g=C,T=b.getCursor("start"),x=b.getCursor("end");S[p]?(s=b.getLine(T.line),h=s.slice(0,T.ch),g=s.slice(T.ch),p=="bold"?(h=h.replace(/(\*\*|__)(?![\s\S]*(\*\*|__))/,""),g=g.replace(/(\*\*|__)/,"")):p=="italic"?(h=h.replace(/(\*|_)(?![\s\S]*(\*|_))/,""),g=g.replace(/(\*|_)/,"")):p=="strikethrough"&&(h=h.replace(/(\*\*|~~)(?![\s\S]*(\*\*|~~))/,""),g=g.replace(/(\*\*|~~)/,"")),b.replaceRange(h+g,{line:T.line,ch:0},{line:T.line,ch:99999999999999}),p=="bold"||p=="strikethrough"?(T.ch-=2,T!==x&&(x.ch-=2)):p=="italic"&&(T.ch-=1,T!==x&&(x.ch-=1))):(s=b.getSelection(),p=="bold"?(s=s.split("**").join(""),s=s.split("__").join("")):p=="italic"?(s=s.split("*").join(""),s=s.split("_").join("")):p=="strikethrough"&&(s=s.split("~~").join("")),b.replaceSelection(h+s+g),T.ch+=v.length,x.ch=T.ch+s.length),b.setSelection(T,x),b.focus()}}function Pd(o){if(!o.getWrapperElement().lastChild.classList.contains("editor-preview-active"))for(var p=o.getCursor("start"),v=o.getCursor("end"),C,b=p.line;b<=v.line;b++)C=o.getLine(b),C=C.replace(/^[ ]*([# ]+|\*|-|[> ]+|[0-9]+(.|\)))[ ]*/,""),o.replaceRange(C,{line:b,ch:0},{line:b,ch:99999999999999})}function Ii(o,p){if(Math.abs(o)<1024)return""+o+p[0];var v=0;do o/=1024,++v;while(Math.abs(o)>=1024&&v=19968?C+=v[b].length:C+=1;return C}function Te(o){o=o||{},o.parent=this;var p=!0;if(o.autoDownloadFontAwesome===!1&&(p=!1),o.autoDownloadFontAwesome!==!0)for(var v=document.styleSheets,C=0;C-1&&(p=!1);if(p){var b=document.createElement("link");b.rel="stylesheet",b.href="https://maxcdn.bootstrapcdn.com/font-awesome/latest/css/font-awesome.min.css",document.getElementsByTagName("head")[0].appendChild(b)}if(o.element)this.element=o.element;else if(o.element===null){console.log("EasyMDE: Error. No element was found.");return}if(o.toolbar===void 0){o.toolbar=[];for(var S in Pr)Object.prototype.hasOwnProperty.call(Pr,S)&&(S.indexOf("separator-")!=-1&&o.toolbar.push("|"),(Pr[S].default===!0||o.showIcons&&o.showIcons.constructor===Array&&o.showIcons.indexOf(S)!=-1)&&o.toolbar.push(S))}if(Object.prototype.hasOwnProperty.call(o,"previewClass")||(o.previewClass="editor-preview"),Object.prototype.hasOwnProperty.call(o,"status")||(o.status=["autosave","lines","words","cursor"],o.uploadImage&&o.status.unshift("upload-image")),o.previewRender||(o.previewRender=function(h){return this.parent.markdown(h)}),o.parsingConfig=fr({highlightFormatting:!0},o.parsingConfig||{}),o.insertTexts=fr({},jd,o.insertTexts||{}),o.promptTexts=fr({},Rd,o.promptTexts||{}),o.blockStyles=fr({},Bd,o.blockStyles||{}),o.autosave!=null&&(o.autosave.timeFormat=fr({},Hd,o.autosave.timeFormat||{})),o.iconClassMap=fr({},et,o.iconClassMap||{}),o.shortcuts=fr({},Ad,o.shortcuts||{}),o.maxHeight=o.maxHeight||void 0,o.direction=o.direction||"ltr",typeof o.maxHeight<"u"?o.minHeight=o.maxHeight:o.minHeight=o.minHeight||"300px",o.errorCallback=o.errorCallback||function(h){alert(h)},o.uploadImage=o.uploadImage||!1,o.imageMaxSize=o.imageMaxSize||2097152,o.imageAccept=o.imageAccept||"image/png, image/jpeg, image/gif, image/avif",o.imageTexts=fr({},Wd,o.imageTexts||{}),o.errorMessages=fr({},Ud,o.errorMessages||{}),o.imagePathAbsolute=o.imagePathAbsolute||!1,o.imageCSRFName=o.imageCSRFName||"csrfmiddlewaretoken",o.imageCSRFHeader=o.imageCSRFHeader||!1,o.autosave!=null&&o.autosave.unique_id!=null&&o.autosave.unique_id!=""&&(o.autosave.uniqueId=o.autosave.unique_id),o.overlayMode&&o.overlayMode.combine===void 0&&(o.overlayMode.combine=!0),this.options=o,this.render(),o.initialValue&&(!this.options.autosave||this.options.autosave.foundSavedValue!==!0)&&this.value(o.initialValue),o.uploadImage){var s=this;this.codemirror.on("dragenter",function(h,g){s.updateStatusBar("upload-image",s.options.imageTexts.sbOnDragEnter),g.stopPropagation(),g.preventDefault()}),this.codemirror.on("dragend",function(h,g){s.updateStatusBar("upload-image",s.options.imageTexts.sbInit),g.stopPropagation(),g.preventDefault()}),this.codemirror.on("dragleave",function(h,g){s.updateStatusBar("upload-image",s.options.imageTexts.sbInit),g.stopPropagation(),g.preventDefault()}),this.codemirror.on("dragover",function(h,g){s.updateStatusBar("upload-image",s.options.imageTexts.sbOnDragEnter),g.stopPropagation(),g.preventDefault()}),this.codemirror.on("drop",function(h,g){g.stopPropagation(),g.preventDefault(),o.imageUploadFunction?s.uploadImagesUsingCustomFunction(o.imageUploadFunction,g.dataTransfer.files):s.uploadImages(g.dataTransfer.files)}),this.codemirror.on("paste",function(h,g){o.imageUploadFunction?s.uploadImagesUsingCustomFunction(o.imageUploadFunction,g.clipboardData.files):s.uploadImages(g.clipboardData.files)})}}function kc(){if(typeof localStorage=="object")try{localStorage.setItem("smde_localStorage",1),localStorage.removeItem("smde_localStorage")}catch{return!1}else return!1;return!0}var mc,Md,Vn,Ad,Dd,ra,hc,et,Pr,jd,Rd,Hd,Bd,Wd,Ud,wc=Cd(()=>{mc=/Mac/.test(navigator.platform),Md=new RegExp(/()+?/g),Vn={toggleBold:Fi,toggleItalic:Ni,drawLink:Gi,toggleHeadingSmaller:Jn,toggleHeadingBigger:Ri,drawImage:Zi,toggleBlockquote:ji,toggleOrderedList:$i,toggleUnorderedList:Ui,toggleCodeBlock:Pi,togglePreview:Ji,toggleStrikethrough:Oi,toggleHeading1:Hi,toggleHeading2:Bi,toggleHeading3:Wi,toggleHeading4:na,toggleHeading5:ia,toggleHeading6:oa,cleanBlock:Ki,drawTable:Xi,drawHorizontalRule:Yi,undo:Qi,redo:Vi,toggleSideBySide:bn,toggleFullScreen:jr},Ad={toggleBold:"Cmd-B",toggleItalic:"Cmd-I",drawLink:"Cmd-K",toggleHeadingSmaller:"Cmd-H",toggleHeadingBigger:"Shift-Cmd-H",toggleHeading1:"Ctrl+Alt+1",toggleHeading2:"Ctrl+Alt+2",toggleHeading3:"Ctrl+Alt+3",toggleHeading4:"Ctrl+Alt+4",toggleHeading5:"Ctrl+Alt+5",toggleHeading6:"Ctrl+Alt+6",cleanBlock:"Cmd-E",drawImage:"Cmd-Alt-I",toggleBlockquote:"Cmd-'",toggleOrderedList:"Cmd-Alt-L",toggleUnorderedList:"Cmd-L",toggleCodeBlock:"Cmd-Alt-C",togglePreview:"Cmd-P",toggleSideBySide:"F9",toggleFullScreen:"F11"},Dd=function(o){for(var p in Vn)if(Vn[p]===o)return p;return null},ra=function(){var o=!1;return function(p){(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(p)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(p.substr(0,4)))&&(o=!0)}(navigator.userAgent||navigator.vendor||window.opera),o};hc="";et={bold:"fa fa-bold",italic:"fa fa-italic",strikethrough:"fa fa-strikethrough",heading:"fa fa-header fa-heading","heading-smaller":"fa fa-header fa-heading header-smaller","heading-bigger":"fa fa-header fa-heading header-bigger","heading-1":"fa fa-header fa-heading header-1","heading-2":"fa fa-header fa-heading header-2","heading-3":"fa fa-header fa-heading header-3",code:"fa fa-code",quote:"fa fa-quote-left","ordered-list":"fa fa-list-ol","unordered-list":"fa fa-list-ul","clean-block":"fa fa-eraser",link:"fa fa-link",image:"fa fa-image","upload-image":"fa fa-image",table:"fa fa-table","horizontal-rule":"fa fa-minus",preview:"fa fa-eye","side-by-side":"fa fa-columns",fullscreen:"fa fa-arrows-alt",guide:"fa fa-question-circle",undo:"fa fa-undo",redo:"fa fa-repeat fa-redo"},Pr={bold:{name:"bold",action:Fi,className:et.bold,title:"Bold",default:!0},italic:{name:"italic",action:Ni,className:et.italic,title:"Italic",default:!0},strikethrough:{name:"strikethrough",action:Oi,className:et.strikethrough,title:"Strikethrough"},heading:{name:"heading",action:Jn,className:et.heading,title:"Heading",default:!0},"heading-smaller":{name:"heading-smaller",action:Jn,className:et["heading-smaller"],title:"Smaller Heading"},"heading-bigger":{name:"heading-bigger",action:Ri,className:et["heading-bigger"],title:"Bigger Heading"},"heading-1":{name:"heading-1",action:Hi,className:et["heading-1"],title:"Big Heading"},"heading-2":{name:"heading-2",action:Bi,className:et["heading-2"],title:"Medium Heading"},"heading-3":{name:"heading-3",action:Wi,className:et["heading-3"],title:"Small Heading"},"separator-1":{name:"separator-1"},code:{name:"code",action:Pi,className:et.code,title:"Code"},quote:{name:"quote",action:ji,className:et.quote,title:"Quote",default:!0},"unordered-list":{name:"unordered-list",action:Ui,className:et["unordered-list"],title:"Generic List",default:!0},"ordered-list":{name:"ordered-list",action:$i,className:et["ordered-list"],title:"Numbered List",default:!0},"clean-block":{name:"clean-block",action:Ki,className:et["clean-block"],title:"Clean block"},"separator-2":{name:"separator-2"},link:{name:"link",action:Gi,className:et.link,title:"Create Link",default:!0},image:{name:"image",action:Zi,className:et.image,title:"Insert Image",default:!0},"upload-image":{name:"upload-image",action:aa,className:et["upload-image"],title:"Import an image"},table:{name:"table",action:Xi,className:et.table,title:"Insert Table"},"horizontal-rule":{name:"horizontal-rule",action:Yi,className:et["horizontal-rule"],title:"Insert Horizontal Line"},"separator-3":{name:"separator-3"},preview:{name:"preview",action:Ji,className:et.preview,noDisable:!0,title:"Toggle Preview",default:!0},"side-by-side":{name:"side-by-side",action:bn,className:et["side-by-side"],noDisable:!0,noMobile:!0,title:"Toggle Side by Side",default:!0},fullscreen:{name:"fullscreen",action:jr,className:et.fullscreen,noDisable:!0,noMobile:!0,title:"Toggle Fullscreen",default:!0},"separator-4":{name:"separator-4"},guide:{name:"guide",action:"https://www.markdownguide.org/basic-syntax/",className:et.guide,noDisable:!0,title:"Markdown Guide",default:!0},"separator-5":{name:"separator-5"},undo:{name:"undo",action:Qi,className:et.undo,noDisable:!0,title:"Undo"},redo:{name:"redo",action:Vi,className:et.redo,noDisable:!0,title:"Redo"}},jd={link:["[","](#url#)"],image:["![","](#url#)"],uploadedImage:["![](#url#)",""],table:["",` + +| Column 1 | Column 2 | Column 3 | +| -------- | -------- | -------- | +| Text | Text | Text | + +`],horizontalRule:["",` + +----- + +`]},Rd={link:"URL for the link:",image:"URL of the image:"},Hd={locale:"en-US",format:{hour:"2-digit",minute:"2-digit"}},Bd={bold:"**",code:"```",italic:"*"},Wd={sbInit:"Attach files by drag and dropping or pasting from clipboard.",sbOnDragEnter:"Drop image to upload it.",sbOnDrop:"Uploading image #images_names#...",sbProgress:"Uploading #file_name#: #progress#%",sbOnUploaded:"Uploaded #image_name#",sizeUnits:" B, KB, MB"},Ud={noFileGiven:"You must select a file.",typeNotAllowed:"This image type is not allowed.",fileTooLarge:`Image #image_name# is too big (#image_size#). +Maximum file size is #image_max_size#.`,importError:"Something went wrong when uploading the image #image_name#."};Te.prototype.uploadImages=function(o,p,v){if(o.length!==0){for(var C=[],b=0;b=2){var H=M[1];if(p.imagesPreviewHandler){var Z=p.imagesPreviewHandler(M[1]);typeof Z=="string"&&(H=Z)}if(window.EMDEimagesCache[H])w(R,window.EMDEimagesCache[H]);else{var ee=document.createElement("img");ee.onload=function(){window.EMDEimagesCache[H]={naturalWidth:ee.naturalWidth,naturalHeight:ee.naturalHeight,url:H},w(R,window.EMDEimagesCache[H])},ee.src=H}}}})}this.codemirror.on("update",function(){E()}),this.gui.sideBySide=this.createSideBySide(),this._rendered=this.element,(p.autofocus===!0||o.autofocus)&&this.codemirror.focus();var z=this.codemirror;setTimeout(function(){z.refresh()}.bind(z),0)};Te.prototype.cleanup=function(){document.removeEventListener("keydown",this.documentOnKeyDown)};Te.prototype.autosave=function(){if(kc()){var o=this;if(this.options.autosave.uniqueId==null||this.options.autosave.uniqueId==""){console.log("EasyMDE: You must set a uniqueId to use the autosave feature");return}this.options.autosave.binded!==!0&&(o.element.form!=null&&o.element.form!=null&&o.element.form.addEventListener("submit",function(){clearTimeout(o.autosaveTimeoutId),o.autosaveTimeoutId=void 0,localStorage.removeItem("smde_"+o.options.autosave.uniqueId)}),this.options.autosave.binded=!0),this.options.autosave.loaded!==!0&&(typeof localStorage.getItem("smde_"+this.options.autosave.uniqueId)=="string"&&localStorage.getItem("smde_"+this.options.autosave.uniqueId)!=""&&(this.codemirror.setValue(localStorage.getItem("smde_"+this.options.autosave.uniqueId)),this.options.autosave.foundSavedValue=!0),this.options.autosave.loaded=!0);var p=o.value();p!==""?localStorage.setItem("smde_"+this.options.autosave.uniqueId,p):localStorage.removeItem("smde_"+this.options.autosave.uniqueId);var v=document.getElementById("autosaved");if(v!=null&&v!=null&&v!=""){var C=new Date,b=new Intl.DateTimeFormat([this.options.autosave.timeFormat.locale,"en-US"],this.options.autosave.timeFormat.format).format(C),S=this.options.autosave.text==null?"Autosaved: ":this.options.autosave.text;v.innerHTML=S+b}}else console.log("EasyMDE: localStorage not available, cannot autosave")};Te.prototype.clearAutosavedValue=function(){if(kc()){if(this.options.autosave==null||this.options.autosave.uniqueId==null||this.options.autosave.uniqueId==""){console.log("EasyMDE: You must set a uniqueId to clear the autosave value");return}localStorage.removeItem("smde_"+this.options.autosave.uniqueId)}else console.log("EasyMDE: localStorage not available, cannot autosave")};Te.prototype.openBrowseFileWindow=function(o,p){var v=this,C=this.gui.toolbar.getElementsByClassName("imageInput")[0];C.click();function b(S){v.options.imageUploadFunction?v.uploadImagesUsingCustomFunction(v.options.imageUploadFunction,S.target.files):v.uploadImages(S.target.files,o,p),C.removeEventListener("change",b)}C.addEventListener("change",b)};Te.prototype.uploadImage=function(o,p,v){var C=this;p=p||function(T){yc(C,T)};function b(g){C.updateStatusBar("upload-image",g),setTimeout(function(){C.updateStatusBar("upload-image",C.options.imageTexts.sbInit)},1e4),v&&typeof v=="function"&&v(g),C.options.errorCallback(g)}function S(g){var T=C.options.imageTexts.sizeUnits.split(",");return g.replace("#image_name#",o.name).replace("#image_size#",Ii(o.size,T)).replace("#image_max_size#",Ii(C.options.imageMaxSize,T))}if(o.size>this.options.imageMaxSize){b(S(this.options.errorMessages.fileTooLarge));return}var s=new FormData;s.append("image",o),C.options.imageCSRFToken&&!C.options.imageCSRFHeader&&s.append(C.options.imageCSRFName,C.options.imageCSRFToken);var h=new XMLHttpRequest;h.upload.onprogress=function(g){if(g.lengthComputable){var T=""+Math.round(g.loaded*100/g.total);C.updateStatusBar("upload-image",C.options.imageTexts.sbProgress.replace("#file_name#",o.name).replace("#progress#",T))}},h.open("POST",this.options.imageUploadEndpoint),C.options.imageCSRFToken&&C.options.imageCSRFHeader&&h.setRequestHeader(C.options.imageCSRFName,C.options.imageCSRFToken),h.onload=function(){try{var g=JSON.parse(this.responseText)}catch{console.error("EasyMDE: The server did not return a valid json."),b(S(C.options.errorMessages.importError));return}this.status===200&&g&&!g.error&&g.data&&g.data.filePath?p((C.options.imagePathAbsolute?"":window.location.origin+"/")+g.data.filePath):g.error&&g.error in C.options.errorMessages?b(S(C.options.errorMessages[g.error])):g.error?b(S(g.error)):(console.error("EasyMDE: Received an unexpected response after uploading the image."+this.status+" ("+this.statusText+")"),b(S(C.options.errorMessages.importError)))},h.onerror=function(g){console.error("EasyMDE: An unexpected error occurred when trying to upload the image."+g.target.status+" ("+g.target.statusText+")"),b(C.options.errorMessages.importError)},h.send(s)};Te.prototype.uploadImageUsingCustomFunction=function(o,p){var v=this;function C(s){yc(v,s)}function b(s){var h=S(s);v.updateStatusBar("upload-image",h),setTimeout(function(){v.updateStatusBar("upload-image",v.options.imageTexts.sbInit)},1e4),v.options.errorCallback(h)}function S(s){var h=v.options.imageTexts.sizeUnits.split(",");return s.replace("#image_name#",p.name).replace("#image_size#",Ii(p.size,h)).replace("#image_max_size#",Ii(v.options.imageMaxSize,h))}o.apply(this,[p,C,b])};Te.prototype.setPreviewMaxHeight=function(){var o=this.codemirror,p=o.getWrapperElement(),v=p.nextSibling,C=parseInt(window.getComputedStyle(p).paddingTop),b=parseInt(window.getComputedStyle(p).borderTopWidth),S=parseInt(this.options.maxHeight),s=S+C*2+b*2,h=s.toString()+"px";v.style.height=h};Te.prototype.createSideBySide=function(){var o=this.codemirror,p=o.getWrapperElement(),v=p.nextSibling;if(!v||!v.classList.contains("editor-preview-side")){if(v=document.createElement("div"),v.className="editor-preview-side",this.options.previewClass)if(Array.isArray(this.options.previewClass))for(var C=0;C{try{let E=w[w.length-1];if(E.origin==="+input"){let z="(https://)",y=E.text[E.text.length-1];if(y.endsWith(z)&&y!=="[]"+z){let R=E.from,M=E.to,Z=E.text.length>1?0:R.ch;setTimeout(()=>{d.setSelection({line:M.line,ch:Z+y.lastIndexOf("(")+1},{line:M.line,ch:Z+y.lastIndexOf(")")})},25)}}}catch{}}),this.editor.codemirror.on("change",Alpine.debounce(()=>{this.editor&&(this.state=this.editor.value(),p&&this.$wire.call("$refresh"))},C??300)),v&&this.editor.codemirror.on("blur",()=>this.$wire.call("$refresh")),this.$watch("state",()=>{this.editor&&(this.editor.codemirror.hasFocus()||Alpine.raw(this.editor).value(this.state??""))}),h&&h(this)},destroy:function(){this.editor.cleanup(),this.editor=null},getToolbar:function(){let d=[];return x.includes("bold")&&d.push({name:"bold",action:EasyMDE.toggleBold,title:T.toolbar_buttons?.bold}),x.includes("italic")&&d.push({name:"italic",action:EasyMDE.toggleItalic,title:T.toolbar_buttons?.italic}),x.includes("strike")&&d.push({name:"strikethrough",action:EasyMDE.toggleStrikethrough,title:T.toolbar_buttons?.strike}),x.includes("link")&&d.push({name:"link",action:EasyMDE.drawLink,title:T.toolbar_buttons?.link}),["bold","italic","strike","link"].some(w=>x.includes(w))&&["heading"].some(w=>x.includes(w))&&d.push("|"),x.includes("heading")&&d.push({name:"heading",action:EasyMDE.toggleHeadingSmaller,title:T.toolbar_buttons?.heading}),["heading"].some(w=>x.includes(w))&&["blockquote","codeBlock","bulletList","orderedList"].some(w=>x.includes(w))&&d.push("|"),x.includes("blockquote")&&d.push({name:"quote",action:EasyMDE.toggleBlockquote,title:T.toolbar_buttons?.blockquote}),x.includes("codeBlock")&&d.push({name:"code",action:EasyMDE.toggleCodeBlock,title:T.toolbar_buttons?.code_block}),x.includes("bulletList")&&d.push({name:"unordered-list",action:EasyMDE.toggleUnorderedList,title:T.toolbar_buttons?.bullet_list}),x.includes("orderedList")&&d.push({name:"ordered-list",action:EasyMDE.toggleOrderedList,title:T.toolbar_buttons?.ordered_list}),["blockquote","codeBlock","bulletList","orderedList"].some(w=>x.includes(w))&&["table","attachFiles"].some(w=>x.includes(w))&&d.push("|"),x.includes("table")&&d.push({name:"table",action:EasyMDE.drawTable,title:T.toolbar_buttons?.table}),x.includes("attachFiles")&&d.push({name:"upload-image",action:EasyMDE.drawUploadedImage,title:T.toolbar_buttons?.attach_files}),["table","attachFiles"].some(w=>x.includes(w))&&["undo","redo"].some(w=>x.includes(w))&&d.push("|"),x.includes("undo")&&d.push({name:"undo",action:EasyMDE.undo,title:T.toolbar_buttons?.undo}),x.includes("redo")&&d.push({name:"redo",action:EasyMDE.redo,title:T.toolbar_buttons?.redo}),d}}}export{Kd as default}; diff --git a/public/js/filament/forms/components/rich-editor.js b/public/js/filament/forms/components/rich-editor.js new file mode 100644 index 0000000..740bf99 --- /dev/null +++ b/public/js/filament/forms/components/rich-editor.js @@ -0,0 +1,144 @@ +var Mi="2.1.4",K="[data-trix-attachment]",je={preview:{presentation:"gallery",caption:{name:!0,size:!0}},file:{caption:{size:!0}}},y={default:{tagName:"div",parse:!1},quote:{tagName:"blockquote",nestable:!0},heading1:{tagName:"h1",terminal:!0,breakOnReturn:!0,group:!1},code:{tagName:"pre",terminal:!0,htmlAttributes:["language"],text:{plaintext:!0}},bulletList:{tagName:"ul",parse:!1},bullet:{tagName:"li",listAttribute:"bulletList",group:!1,nestable:!0,test(n){return Je(n.parentNode)===y[this.listAttribute].tagName}},numberList:{tagName:"ol",parse:!1},number:{tagName:"li",listAttribute:"numberList",group:!1,nestable:!0,test(n){return Je(n.parentNode)===y[this.listAttribute].tagName}},attachmentGallery:{tagName:"div",exclusive:!0,terminal:!0,parse:!1,group:!1}},Je=n=>{var t;return n==null||(t=n.tagName)===null||t===void 0?void 0:t.toLowerCase()},Ke=navigator.userAgent.match(/android\s([0-9]+.*Chrome)/i),se=Ke&&parseInt(Ke[1]),St={composesExistingText:/Android.*Chrome/.test(navigator.userAgent),recentAndroid:se&&se>12,samsungAndroid:se&&navigator.userAgent.match(/Android.*SM-/),forcesObjectResizing:/Trident.*rv:11/.test(navigator.userAgent),supportsInputEvents:typeof InputEvent<"u"&&["data","getTargetRanges","inputType"].every(n=>n in InputEvent.prototype)},h={attachFiles:"Attach Files",bold:"Bold",bullets:"Bullets",byte:"Byte",bytes:"Bytes",captionPlaceholder:"Add a caption\u2026",code:"Code",heading1:"Heading",indent:"Increase Level",italic:"Italic",link:"Link",numbers:"Numbers",outdent:"Decrease Level",quote:"Quote",redo:"Redo",remove:"Remove",strike:"Strikethrough",undo:"Undo",unlink:"Unlink",url:"URL",urlPlaceholder:"Enter a URL\u2026",GB:"GB",KB:"KB",MB:"MB",PB:"PB",TB:"TB"},ji=[h.bytes,h.KB,h.MB,h.GB,h.TB,h.PB],vi={prefix:"IEC",precision:2,formatter(n){switch(n){case 0:return"0 ".concat(h.bytes);case 1:return"1 ".concat(h.byte);default:let t;this.prefix==="SI"?t=1e3:this.prefix==="IEC"&&(t=1024);let e=Math.floor(Math.log(n)/Math.log(t)),i=(n/Math.pow(t,e)).toFixed(this.precision).replace(/0*$/,"").replace(/\.$/,"");return"".concat(i," ").concat(ji[e])}}},te="\uFEFF",U="\xA0",Ai=function(n){for(let t in n){let e=n[t];this[t]=e}return this},We=document.documentElement,Wi=We.matches,p=function(n){let{onElement:t,matchingSelector:e,withCallback:i,inPhase:r,preventDefault:o,times:s}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},a=t||We,l=e,c=r==="capturing",u=function(b){s!=null&&--s==0&&u.destroy();let A=q(b.target,{matchingSelector:l});A!=null&&(i?.call(A,b,A),o&&b.preventDefault())};return u.destroy=()=>a.removeEventListener(n,u,c),a.addEventListener(n,u,c),u},vt=function(n){let{onElement:t,bubbles:e,cancelable:i,attributes:r}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},o=t??We;e=e!==!1,i=i!==!1;let s=document.createEvent("Events");return s.initEvent(n,e,i),r!=null&&Ai.call(s,r),o.dispatchEvent(s)},xi=function(n,t){if(n?.nodeType===1)return Wi.call(n,t)},q=function(n){let{matchingSelector:t,untilNode:e}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};for(;n&&n.nodeType!==Node.ELEMENT_NODE;)n=n.parentNode;if(n!=null){if(t==null)return n;if(n.closest&&e==null)return n.closest(t);for(;n&&n!==e;){if(xi(n,t))return n;n=n.parentNode}}},Ue=n=>document.activeElement!==n&&J(n,document.activeElement),J=function(n,t){if(n&&t)for(;t;){if(t===n)return!0;t=t.parentNode}},ae=function(n){var t;if((t=n)===null||t===void 0||!t.parentNode)return;let e=0;for(n=n.previousSibling;n;)e++,n=n.previousSibling;return e},V=n=>{var t;return n==null||(t=n.parentNode)===null||t===void 0?void 0:t.removeChild(n)},Ft=function(n){let{onlyNodesOfType:t,usingFilter:e,expandEntityReferences:i}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=(()=>{switch(t){case"element":return NodeFilter.SHOW_ELEMENT;case"text":return NodeFilter.SHOW_TEXT;case"comment":return NodeFilter.SHOW_COMMENT;default:return NodeFilter.SHOW_ALL}})();return document.createTreeWalker(n,r,e??null,i===!0)},x=n=>{var t;return n==null||(t=n.tagName)===null||t===void 0?void 0:t.toLowerCase()},d=function(n){let t,e,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};typeof n=="object"?(i=n,n=i.tagName):i={attributes:i};let r=document.createElement(n);if(i.editable!=null&&(i.attributes==null&&(i.attributes={}),i.attributes.contenteditable=i.editable),i.attributes)for(t in i.attributes)e=i.attributes[t],r.setAttribute(t,e);if(i.style)for(t in i.style)e=i.style[t],r.style[t]=e;if(i.data)for(t in i.data)e=i.data[t],r.dataset[t]=e;return i.className&&i.className.split(" ").forEach(o=>{r.classList.add(o)}),i.textContent&&(r.textContent=i.textContent),i.childNodes&&[].concat(i.childNodes).forEach(o=>{r.appendChild(o)}),r},pt,At=function(){if(pt!=null)return pt;pt=[];for(let n in y){let t=y[n];t.tagName&&pt.push(t.tagName)}return pt},le=n=>ot(n?.firstChild),$e=function(n){let{strict:t}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{strict:!0};return t?ot(n):ot(n)||!ot(n.firstChild)&&function(e){return At().includes(x(e))&&!At().includes(x(e.firstChild))}(n)},ot=n=>Ui(n)&&n?.data==="block",Ui=n=>n?.nodeType===Node.COMMENT_NODE,st=function(n){let{name:t}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(n)return xt(n)?n.data===te?!t||n.parentNode.dataset.trixCursorTarget===t:void 0:st(n.firstChild)},$=n=>xi(n,K),yi=n=>xt(n)&&n?.data==="",xt=n=>n?.nodeType===Node.TEXT_NODE,qe={level2Enabled:!0,getLevel(){return this.level2Enabled&&St.supportsInputEvents?2:0},pickFiles(n){let t=d("input",{type:"file",multiple:!0,hidden:!0,id:this.fileInputId});t.addEventListener("change",()=>{n(t.files),V(t)}),V(document.getElementById(this.fileInputId)),document.body.appendChild(t),t.click()}},Tt={removeBlankTableCells:!1,tableCellSeparator:" | ",tableRowSeparator:` +`},Y={bold:{tagName:"strong",inheritable:!0,parser(n){let t=window.getComputedStyle(n);return t.fontWeight==="bold"||t.fontWeight>=600}},italic:{tagName:"em",inheritable:!0,parser:n=>window.getComputedStyle(n).fontStyle==="italic"},href:{groupTagName:"a",parser(n){let t="a:not(".concat(K,")"),e=n.closest(t);if(e)return e.getAttribute("href")}},strike:{tagName:"del",inheritable:!0},frozen:{style:{backgroundColor:"highlight"}}},Ci={getDefaultHTML:()=>`
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
`)},Re={interval:5e3},Lt=Object.freeze({__proto__:null,attachments:je,blockAttributes:y,browser:St,css:{attachment:"attachment",attachmentCaption:"attachment__caption",attachmentCaptionEditor:"attachment__caption-editor",attachmentMetadata:"attachment__metadata",attachmentMetadataContainer:"attachment__metadata-container",attachmentName:"attachment__name",attachmentProgress:"attachment__progress",attachmentSize:"attachment__size",attachmentToolbar:"attachment__toolbar",attachmentGallery:"attachment-gallery"},fileSize:vi,input:qe,keyNames:{8:"backspace",9:"tab",13:"return",27:"escape",37:"left",39:"right",46:"delete",68:"d",72:"h",79:"o"},lang:h,parser:Tt,textAttributes:Y,toolbar:Ci,undo:Re}),f=class{static proxyMethod(t){let{name:e,toMethod:i,toProperty:r,optional:o}=qi(t);this.prototype[e]=function(){let s,a;var l,c;return i?a=o?(l=this[i])===null||l===void 0?void 0:l.call(this):this[i]():r&&(a=this[r]),o?(s=(c=a)===null||c===void 0?void 0:c[e],s?Ge.call(s,a,arguments):void 0):(s=a[e],Ge.call(s,a,arguments))}}},qi=function(n){let t=n.match(Vi);if(!t)throw new Error("can't parse @proxyMethod expression: ".concat(n));let e={name:t[4]};return t[2]!=null?e.toMethod=t[1]:e.toProperty=t[1],t[3]!=null&&(e.optional=!0),e},{apply:Ge}=Function.prototype,Vi=new RegExp("^(.+?)(\\(\\))?(\\?)?\\.(.+?)$"),ce,ue,he,Z=class extends f{static box(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"";return t instanceof this?t:this.fromUCS2String(t?.toString())}static fromUCS2String(t){return new this(t,Ee(t))}static fromCodepoints(t){return new this(Se(t),t)}constructor(t,e){super(...arguments),this.ucs2String=t,this.codepoints=e,this.length=this.codepoints.length,this.ucs2Length=this.ucs2String.length}offsetToUCS2Offset(t){return Se(this.codepoints.slice(0,Math.max(0,t))).length}offsetFromUCS2Offset(t){return Ee(this.ucs2String.slice(0,Math.max(0,t))).length}slice(){return this.constructor.fromCodepoints(this.codepoints.slice(...arguments))}charAt(t){return this.slice(t,t+1)}isEqualTo(t){return this.constructor.box(t).ucs2String===this.ucs2String}toJSON(){return this.ucs2String}getCacheKey(){return this.ucs2String}toString(){return this.ucs2String}},Hi=((ce=Array.from)===null||ce===void 0?void 0:ce.call(Array,"\u{1F47C}").length)===1,zi=((ue=" ".codePointAt)===null||ue===void 0?void 0:ue.call(" ",0))!=null,_i=((he=String.fromCodePoint)===null||he===void 0?void 0:he.call(String,32,128124))===" \u{1F47C}",Ee,Se;Ee=Hi&&zi?n=>Array.from(n).map(t=>t.codePointAt(0)):function(n){let t=[],e=0,{length:i}=n;for(;eString.fromCodePoint(...Array.from(n||[])):function(n){return(()=>{let t=[];return Array.from(n).forEach(e=>{let i="";e>65535&&(e-=65536,i+=String.fromCharCode(e>>>10&1023|55296),e=56320|1023&e),t.push(i+String.fromCharCode(e))}),t})().join("")};var Ji=0,O=class extends f{static fromJSONString(t){return this.fromJSON(JSON.parse(t))}constructor(){super(...arguments),this.id=++Ji}hasSameConstructorAs(t){return this.constructor===t?.constructor}isEqualTo(t){return this===t}inspect(){let t=[],e=this.contentsForInspection()||{};for(let i in e){let r=e[i];t.push("".concat(i,"=").concat(r))}return"#<".concat(this.constructor.name,":").concat(this.id).concat(t.length?" ".concat(t.join(", ")):"",">")}contentsForInspection(){}toJSONString(){return JSON.stringify(this)}toUTF16String(){return Z.box(this)}getCacheKey(){return this.id.toString()}},Q=function(){let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[];if(n.length!==t.length)return!1;for(let e=0;e1?e-1:0),r=1;r(de||(de=Xi().concat(Gi())),de),v=n=>y[n],Gi=()=>(ge||(ge=Object.keys(y)),ge),De=n=>Y[n],Xi=()=>(me||(me=Object.keys(Y)),me),ki=function(n,t){Yi(n).textContent=t.replace(/%t/g,n)},Yi=function(n){let t=document.createElement("style");t.setAttribute("type","text/css"),t.setAttribute("data-tag-name",n.toLowerCase());let e=Zi();return e&&t.setAttribute("nonce",e),document.head.insertBefore(t,document.head.firstChild),t},Zi=function(){let n=Xe("trix-csp-nonce")||Xe("csp-nonce");if(n)return n.getAttribute("content")},Xe=n=>document.head.querySelector("meta[name=".concat(n,"]")),Ye={"application/x-trix-feature-detection":"test"},Ri=function(n){let t=n.getData("text/plain"),e=n.getData("text/html");if(!t||!e)return t?.length;{let{body:i}=new DOMParser().parseFromString(e,"text/html");if(i.textContent===t)return!i.querySelector("*")}},Ei=/Mac|^iP/.test(navigator.platform)?n=>n.metaKey:n=>n.ctrlKey,He=n=>setTimeout(n,1),Si=function(){let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},t={};for(let e in n){let i=n[e];t[e]=i}return t},dt=function(){let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(Object.keys(n).length!==Object.keys(t).length)return!1;for(let e in n)if(n[e]!==t[e])return!1;return!0},g=function(n){if(n!=null)return Array.isArray(n)||(n=[n,n]),[Ze(n[0]),Ze(n[1]!=null?n[1]:n[0])]},N=function(n){if(n==null)return;let[t,e]=g(n);return we(t,e)},Pt=function(n,t){if(n==null||t==null)return;let[e,i]=g(n),[r,o]=g(t);return we(e,r)&&we(i,o)},Ze=function(n){return typeof n=="number"?n:Si(n)},we=function(n,t){return typeof n=="number"?n===t:dt(n,t)},It=class extends f{constructor(){super(...arguments),this.update=this.update.bind(this),this.selectionManagers=[]}start(){this.started||(this.started=!0,document.addEventListener("selectionchange",this.update,!0))}stop(){if(this.started)return this.started=!1,document.removeEventListener("selectionchange",this.update,!0)}registerSelectionManager(t){if(!this.selectionManagers.includes(t))return this.selectionManagers.push(t),this.start()}unregisterSelectionManager(t){if(this.selectionManagers=this.selectionManagers.filter(e=>e!==t),this.selectionManagers.length===0)return this.stop()}notifySelectionManagersOfSelectionChange(){return this.selectionManagers.map(t=>t.selectionDidChange())}update(){this.notifySelectionManagersOfSelectionChange()}reset(){this.update()}},tt=new It,Li=function(){let n=window.getSelection();if(n.rangeCount>0)return n},yt=function(){var n;let t=(n=Li())===null||n===void 0?void 0:n.getRangeAt(0);if(t&&!Qi(t))return t},Di=function(n){let t=window.getSelection();return t.removeAllRanges(),t.addRange(n),tt.update()},Qi=n=>Qe(n.startContainer)||Qe(n.endContainer),Qe=n=>!Object.getPrototypeOf(n),bt=n=>n.replace(new RegExp("".concat(te),"g"),"").replace(new RegExp("".concat(U),"g")," "),ze=new RegExp("[^\\S".concat(U,"]")),_e=n=>n.replace(new RegExp("".concat(ze.source),"g")," ").replace(/\ {2,}/g," "),ti=function(n,t){if(n.isEqualTo(t))return["",""];let e=pe(n,t),{length:i}=e.utf16String,r;if(i){let{offset:o}=e,s=n.codepoints.slice(0,o).concat(n.codepoints.slice(o+i));r=pe(t,Z.fromCodepoints(s))}else r=pe(t,n);return[e.utf16String.toString(),r.utf16String.toString()]},pe=function(n,t){let e=0,i=n.length,r=t.length;for(;ee+1&&n.charAt(i-1).isEqualTo(t.charAt(r-1));)i--,r--;return{utf16String:n.slice(e,i),offset:e}},C=class extends O{static fromCommonAttributesOfObjects(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];if(!t.length)return new this;let e=ft(t[0]),i=e.getKeys();return t.slice(1).forEach(r=>{i=e.getKeysCommonToHash(ft(r)),e=e.slice(i)}),e}static box(t){return ft(t)}constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};super(...arguments),this.values=Bt(t)}add(t,e){return this.merge(tn(t,e))}remove(t){return new C(Bt(this.values,t))}get(t){return this.values[t]}has(t){return t in this.values}merge(t){return new C(en(this.values,nn(t)))}slice(t){let e={};return Array.from(t).forEach(i=>{this.has(i)&&(e[i]=this.values[i])}),new C(e)}getKeys(){return Object.keys(this.values)}getKeysCommonToHash(t){return t=ft(t),this.getKeys().filter(e=>this.values[e]===t.values[e])}isEqualTo(t){return Q(this.toArray(),ft(t).toArray())}isEmpty(){return this.getKeys().length===0}toArray(){if(!this.array){let t=[];for(let e in this.values){let i=this.values[e];t.push(t.push(e,i))}this.array=t.slice(0)}return this.array}toObject(){return Bt(this.values)}toJSON(){return this.toObject()}contentsForInspection(){return{values:JSON.stringify(this.values)}}},tn=function(n,t){let e={};return e[n]=t,e},en=function(n,t){let e=Bt(n);for(let i in t){let r=t[i];e[i]=r}return e},Bt=function(n,t){let e={};return Object.keys(n).sort().forEach(i=>{i!==t&&(e[i]=n[i])}),e},ft=function(n){return n instanceof C?n:new C(n)},nn=function(n){return n instanceof C?n.values:n},Ct=class{static groupObjects(){let t,e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],{depth:i,asTree:r}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};r&&i==null&&(i=0);let o=[];return Array.from(e).forEach(s=>{var a;if(t){var l,c,u;if((l=s.canBeGrouped)!==null&&l!==void 0&&l.call(s,i)&&(c=(u=t[t.length-1]).canBeGroupedWith)!==null&&c!==void 0&&c.call(u,s,i))return void t.push(s);o.push(new this(t,{depth:i,asTree:r})),t=null}(a=s.canBeGrouped)!==null&&a!==void 0&&a.call(s,i)?t=[s]:o.push(s)}),t&&o.push(new this(t,{depth:i,asTree:r})),o}constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],{depth:e,asTree:i}=arguments.length>1?arguments[1]:void 0;this.objects=t,i&&(this.depth=e,this.objects=this.constructor.groupObjects(this.objects,{asTree:i,depth:this.depth+1}))}getObjects(){return this.objects}getDepth(){return this.depth}getCacheKey(){let t=["objectGroup"];return Array.from(this.getObjects()).forEach(e=>{t.push(e.getCacheKey())}),t.join("/")}},Te=class extends f{constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];super(...arguments),this.objects={},Array.from(t).forEach(e=>{let i=JSON.stringify(e);this.objects[i]==null&&(this.objects[i]=e)})}find(t){let e=JSON.stringify(t);return this.objects[e]}},Be=class{constructor(t){this.reset(t)}add(t){let e=ei(t);this.elements[e]=t}remove(t){let e=ei(t),i=this.elements[e];if(i)return delete this.elements[e],i}reset(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];return this.elements={},Array.from(t).forEach(e=>{this.add(e)}),t}},ei=n=>n.dataset.trixStoreKey,at=class extends f{isPerforming(){return this.performing===!0}hasPerformed(){return this.performed===!0}hasSucceeded(){return this.performed&&this.succeeded}hasFailed(){return this.performed&&!this.succeeded}getPromise(){return this.promise||(this.promise=new Promise((t,e)=>(this.performing=!0,this.perform((i,r)=>{this.succeeded=i,this.performing=!1,this.performed=!0,this.succeeded?t(r):e(r)})))),this.promise}perform(t){return t(!1)}release(){var t,e;(t=this.promise)===null||t===void 0||(e=t.cancel)===null||e===void 0||e.call(t),this.promise=null,this.performing=null,this.performed=null,this.succeeded=null}};at.proxyMethod("getPromise().then"),at.proxyMethod("getPromise().catch");var M=class extends f{constructor(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};super(...arguments),this.object=t,this.options=e,this.childViews=[],this.rootView=this}getNodes(){return this.nodes||(this.nodes=this.createNodes()),this.nodes.map(t=>t.cloneNode(!0))}invalidate(){var t;return this.nodes=null,this.childViews=[],(t=this.parentView)===null||t===void 0?void 0:t.invalidate()}invalidateViewForObject(t){var e;return(e=this.findViewForObject(t))===null||e===void 0?void 0:e.invalidate()}findOrCreateCachedChildView(t,e,i){let r=this.getCachedViewForObject(e);return r?this.recordChildView(r):(r=this.createChildView(...arguments),this.cacheViewForObject(r,e)),r}createChildView(t,e){let i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};e instanceof Ct&&(i.viewClass=t,t=Fe);let r=new t(e,i);return this.recordChildView(r)}recordChildView(t){return t.parentView=this,t.rootView=this.rootView,this.childViews.push(t),t}getAllChildViews(){let t=[];return this.childViews.forEach(e=>{t.push(e),t=t.concat(e.getAllChildViews())}),t}findElement(){return this.findElementForObject(this.object)}findElementForObject(t){let e=t?.id;if(e)return this.rootView.element.querySelector("[data-trix-id='".concat(e,"']"))}findViewForObject(t){for(let e of this.getAllChildViews())if(e.object===t)return e}getViewCache(){return this.rootView!==this?this.rootView.getViewCache():this.isViewCachingEnabled()?(this.viewCache||(this.viewCache={}),this.viewCache):void 0}isViewCachingEnabled(){return this.shouldCacheViews!==!1}enableViewCaching(){this.shouldCacheViews=!0}disableViewCaching(){this.shouldCacheViews=!1}getCachedViewForObject(t){var e;return(e=this.getViewCache())===null||e===void 0?void 0:e[t.getCacheKey()]}cacheViewForObject(t,e){let i=this.getViewCache();i&&(i[e.getCacheKey()]=t)}garbageCollectCachedViews(){let t=this.getViewCache();if(t){let e=this.getAllChildViews().concat(this).map(i=>i.object.getCacheKey());for(let i in t)e.includes(i)||delete t[i]}}},Fe=class extends M{constructor(){super(...arguments),this.objectGroup=this.object,this.viewClass=this.options.viewClass,delete this.options.viewClass}getChildViews(){return this.childViews.length||Array.from(this.objectGroup.getObjects()).forEach(t=>{this.findOrCreateCachedChildView(this.viewClass,t,this.options)}),this.childViews}createNodes(){let t=this.createContainerElement();return this.getChildViews().forEach(e=>{Array.from(e.getNodes()).forEach(i=>{t.appendChild(i)})}),[t]}createContainerElement(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.objectGroup.getDepth();return this.getChildViews()[0].createContainerElement(t)}},rn="style href src width height language class".split(" "),on="javascript:".split(" "),sn="script iframe form noscript".split(" "),lt=class extends f{static setHTML(t,e){let i=new this(e).sanitize(),r=i.getHTML?i.getHTML():i.outerHTML;t.innerHTML=r}static sanitize(t,e){let i=new this(t,e);return i.sanitize(),i}constructor(t){let{allowedAttributes:e,forbiddenProtocols:i,forbiddenElements:r}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};super(...arguments),this.allowedAttributes=e||rn,this.forbiddenProtocols=i||on,this.forbiddenElements=r||sn,this.body=an(t)}sanitize(){return this.sanitizeElements(),this.normalizeListElementNesting()}getHTML(){return this.body.innerHTML}getBody(){return this.body}sanitizeElements(){let t=Ft(this.body),e=[];for(;t.nextNode();){let i=t.currentNode;switch(i.nodeType){case Node.ELEMENT_NODE:this.elementIsRemovable(i)?e.push(i):this.sanitizeElement(i);break;case Node.COMMENT_NODE:e.push(i)}}return e.forEach(i=>V(i)),this.body}sanitizeElement(t){return t.hasAttribute("href")&&this.forbiddenProtocols.includes(t.protocol)&&t.removeAttribute("href"),Array.from(t.attributes).forEach(e=>{let{name:i}=e;this.allowedAttributes.includes(i)||i.indexOf("data-trix")===0||t.removeAttribute(i)}),t}normalizeListElementNesting(){return Array.from(this.body.querySelectorAll("ul,ol")).forEach(t=>{let e=t.previousElementSibling;e&&x(e)==="li"&&e.appendChild(t)}),this.body}elementIsRemovable(t){if(t?.nodeType===Node.ELEMENT_NODE)return this.elementIsForbidden(t)||this.elementIsntSerializable(t)}elementIsForbidden(t){return this.forbiddenElements.includes(x(t))}elementIsntSerializable(t){return t.getAttribute("data-trix-serialize")==="false"&&!$(t)}},an=function(){let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"";n=n.replace(/<\/html[^>]*>[^]*$/i,"");let t=document.implementation.createHTMLDocument("");return t.documentElement.innerHTML=n,Array.from(t.head.querySelectorAll("style")).forEach(e=>{t.body.appendChild(e)}),t.body},{css:W}=Lt,kt=class extends M{constructor(){super(...arguments),this.attachment=this.object,this.attachment.uploadProgressDelegate=this,this.attachmentPiece=this.options.piece}createContentNodes(){return[]}createNodes(){let t,e=t=d({tagName:"figure",className:this.getClassName(),data:this.getData(),editable:!1}),i=this.getHref();return i&&(t=d({tagName:"a",editable:!1,attributes:{href:i,tabindex:-1}}),e.appendChild(t)),this.attachment.hasContent()?lt.setHTML(t,this.attachment.getContent()):this.createContentNodes().forEach(r=>{t.appendChild(r)}),t.appendChild(this.createCaptionElement()),this.attachment.isPending()&&(this.progressElement=d({tagName:"progress",attributes:{class:W.attachmentProgress,value:this.attachment.getUploadProgress(),max:100},data:{trixMutable:!0,trixStoreKey:["progressElement",this.attachment.id].join("/")}}),e.appendChild(this.progressElement)),[ii("left"),e,ii("right")]}createCaptionElement(){let t=d({tagName:"figcaption",className:W.attachmentCaption}),e=this.attachmentPiece.getCaption();if(e)t.classList.add("".concat(W.attachmentCaption,"--edited")),t.textContent=e;else{let i,r,o=this.getCaptionConfig();if(o.name&&(i=this.attachment.getFilename()),o.size&&(r=this.attachment.getFormattedFilesize()),i){let s=d({tagName:"span",className:W.attachmentName,textContent:i});t.appendChild(s)}if(r){i&&t.appendChild(document.createTextNode(" "));let s=d({tagName:"span",className:W.attachmentSize,textContent:r});t.appendChild(s)}}return t}getClassName(){let t=[W.attachment,"".concat(W.attachment,"--").concat(this.attachment.getType())],e=this.attachment.getExtension();return e&&t.push("".concat(W.attachment,"--").concat(e)),t.join(" ")}getData(){let t={trixAttachment:JSON.stringify(this.attachment),trixContentType:this.attachment.getContentType(),trixId:this.attachment.id},{attributes:e}=this.attachmentPiece;return e.isEmpty()||(t.trixAttributes=JSON.stringify(e)),this.attachment.isPending()&&(t.trixSerialize=!1),t}getHref(){if(!ln(this.attachment.getContent(),"a"))return this.attachment.getHref()}getCaptionConfig(){var t;let e=this.attachment.getType(),i=Si((t=je[e])===null||t===void 0?void 0:t.caption);return e==="file"&&(i.name=!0),i}findProgressElement(){var t;return(t=this.findElement())===null||t===void 0?void 0:t.querySelector("progress")}attachmentDidChangeUploadProgress(){let t=this.attachment.getUploadProgress(),e=this.findProgressElement();e&&(e.value=t)}},ii=n=>d({tagName:"span",textContent:te,data:{trixCursorTarget:n,trixSerialize:!1}}),ln=function(n,t){let e=d("div");return lt.setHTML(e,n||""),e.querySelector(t)},Nt=class extends kt{constructor(){super(...arguments),this.attachment.previewDelegate=this}createContentNodes(){return this.image=d({tagName:"img",attributes:{src:""},data:{trixMutable:!0}}),this.refresh(this.image),[this.image]}createCaptionElement(){let t=super.createCaptionElement(...arguments);return t.textContent||t.setAttribute("data-trix-placeholder",h.captionPlaceholder),t}refresh(t){var e;if(t||(t=(e=this.findElement())===null||e===void 0?void 0:e.querySelector("img")),t)return this.updateAttributesForImage(t)}updateAttributesForImage(t){let e=this.attachment.getURL(),i=this.attachment.getPreviewURL();if(t.src=i||e,i===e)t.removeAttribute("data-trix-serialized-attributes");else{let a=JSON.stringify({src:e});t.setAttribute("data-trix-serialized-attributes",a)}let r=this.attachment.getWidth(),o=this.attachment.getHeight();r!=null&&(t.width=r),o!=null&&(t.height=o);let s=["imageElement",this.attachment.id,t.src,t.width,t.height].join("/");t.dataset.trixStoreKey=s}attachmentDidChangeAttributes(){return this.refresh(this.image),this.refresh()}},Ot=class extends M{constructor(){super(...arguments),this.piece=this.object,this.attributes=this.piece.getAttributes(),this.textConfig=this.options.textConfig,this.context=this.options.context,this.piece.attachment?this.attachment=this.piece.attachment:this.string=this.piece.toString()}createNodes(){let t=this.attachment?this.createAttachmentNodes():this.createStringNodes(),e=this.createElement();if(e){let i=function(r){for(;(o=r)!==null&&o!==void 0&&o.firstElementChild;){var o;r=r.firstElementChild}return r}(e);Array.from(t).forEach(r=>{i.appendChild(r)}),t=[e]}return t}createAttachmentNodes(){let t=this.attachment.isPreviewable()?Nt:kt;return this.createChildView(t,this.piece.attachment,{piece:this.piece}).getNodes()}createStringNodes(){var t;if((t=this.textConfig)!==null&&t!==void 0&&t.plaintext)return[document.createTextNode(this.string)];{let e=[],i=this.string.split(` +`);for(let r=0;r0){let s=d("br");e.push(s)}if(o.length){let s=document.createTextNode(this.preserveSpaces(o));e.push(s)}}return e}}createElement(){let t,e,i,r={};for(e in this.attributes){i=this.attributes[e];let s=De(e);if(s){if(s.tagName){var o;let a=d(s.tagName);o?(o.appendChild(a),o=a):t=o=a}if(s.styleProperty&&(r[s.styleProperty]=i),s.style)for(e in s.style)i=s.style[e],r[e]=i}}if(Object.keys(r).length)for(e in t||(t=d("span")),r)i=r[e],t.style[e]=i;return t}createContainerElement(){for(let t in this.attributes){let e=this.attributes[t],i=De(t);if(i&&i.groupTagName){let r={};return r[t]=e,d(i.groupTagName,r)}}}preserveSpaces(t){return this.context.isLast&&(t=t.replace(/\ $/,U)),t=t.replace(/(\S)\ {3}(\S)/g,"$1 ".concat(U," $2")).replace(/\ {2}/g,"".concat(U," ")).replace(/\ {2}/g," ".concat(U)),(this.context.isFirst||this.context.followsWhitespace)&&(t=t.replace(/^\ /,U)),t}},Mt=class extends M{constructor(){super(...arguments),this.text=this.object,this.textConfig=this.options.textConfig}createNodes(){let t=[],e=Ct.groupObjects(this.getPieces()),i=e.length-1;for(let o=0;o!t.hasAttribute("blockBreak"))}},cn=n=>/\s$/.test(n?.toString()),{css:ni}=Lt,jt=class extends M{constructor(){super(...arguments),this.block=this.object,this.attributes=this.block.getAttributes()}createNodes(){let t=[document.createComment("block")];if(this.block.isEmpty())t.push(d("br"));else{var e;let i=(e=v(this.block.getLastAttribute()))===null||e===void 0?void 0:e.text,r=this.findOrCreateCachedChildView(Mt,this.block.text,{textConfig:i});t.push(...Array.from(r.getNodes()||[])),this.shouldAddExtraNewlineElement()&&t.push(d("br"))}if(this.attributes.length)return t;{let i,{tagName:r}=y.default;this.block.isRTL()&&(i={dir:"rtl"});let o=d({tagName:r,attributes:i});return t.forEach(s=>o.appendChild(s)),[o]}}createContainerElement(t){let e={},i,r=this.attributes[t],{tagName:o,htmlAttributes:s=[]}=v(r);if(t===0&&this.block.isRTL()&&Object.assign(e,{dir:"rtl"}),r==="attachmentGallery"){let a=this.block.getBlockBreakPosition();i="".concat(ni.attachmentGallery," ").concat(ni.attachmentGallery,"--").concat(a)}return Object.entries(this.block.htmlAttributes).forEach(a=>{let[l,c]=a;s.includes(l)&&(e[l]=c)}),d({tagName:o,className:i,attributes:e})}shouldAddExtraNewlineElement(){return/\n\n$/.test(this.block.toString())}},ct=class extends M{static render(t){let e=d("div"),i=new this(t,{element:e});return i.render(),i.sync(),e}constructor(){super(...arguments),this.element=this.options.element,this.elementStore=new Be,this.setDocument(this.object)}setDocument(t){t.isEqualTo(this.document)||(this.document=this.object=t)}render(){if(this.childViews=[],this.shadowElement=d("div"),!this.document.isEmpty()){let t=Ct.groupObjects(this.document.getBlocks(),{asTree:!0});Array.from(t).forEach(e=>{let i=this.findOrCreateCachedChildView(jt,e);Array.from(i.getNodes()).map(r=>this.shadowElement.appendChild(r))})}}isSynced(){return un(this.shadowElement,this.element)}sync(){let t=this.createDocumentFragmentForSync();for(;this.element.lastChild;)this.element.removeChild(this.element.lastChild);return this.element.appendChild(t),this.didSync()}didSync(){return this.elementStore.reset(ri(this.element)),He(()=>this.garbageCollectCachedViews())}createDocumentFragmentForSync(){let t=document.createDocumentFragment();return Array.from(this.shadowElement.childNodes).forEach(e=>{t.appendChild(e.cloneNode(!0))}),Array.from(ri(t)).forEach(e=>{let i=this.elementStore.remove(e);i&&e.parentNode.replaceChild(i,e)}),t}},ri=n=>n.querySelectorAll("[data-trix-store-key]"),un=(n,t)=>oi(n.innerHTML)===oi(t.innerHTML),oi=n=>n.replace(/ /g," ");function wt(n){var t,e;function i(o,s){try{var a=n[o](s),l=a.value,c=l instanceof hn;Promise.resolve(c?l.v:l).then(function(u){if(c){var b=o==="return"?"return":"next";if(!l.k||u.done)return i(b,u);u=n[b](u).value}r(a.done?"return":"normal",u)},function(u){i("throw",u)})}catch(u){r("throw",u)}}function r(o,s){switch(o){case"return":t.resolve({value:s,done:!0});break;case"throw":t.reject(s);break;default:t.resolve({value:s,done:!1})}(t=t.next)?i(t.key,t.arg):e=null}this._invoke=function(o,s){return new Promise(function(a,l){var c={key:o,arg:s,resolve:a,reject:l,next:null};e?e=e.next=c:(t=e=c,i(o,s))})},typeof n.return!="function"&&(this.return=void 0)}function hn(n,t){this.v=n,this.k=t}function E(n,t,e){return(t=dn(t))in n?Object.defineProperty(n,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):n[t]=e,n}function dn(n){var t=function(e,i){if(typeof e!="object"||e===null)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var o=r.call(e,i||"default");if(typeof o!="object")return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return(i==="string"?String:Number)(e)}(n,"string");return typeof t=="symbol"?t:String(t)}wt.prototype[typeof Symbol=="function"&&Symbol.asyncIterator||"@@asyncIterator"]=function(){return this},wt.prototype.next=function(n){return this._invoke("next",n)},wt.prototype.throw=function(n){return this._invoke("throw",n)},wt.prototype.return=function(n){return this._invoke("return",n)};var j=class extends O{static registerType(t,e){e.type=t,this.types[t]=e}static fromJSON(t){let e=this.types[t.type];if(e)return e.fromJSON(t)}constructor(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};super(...arguments),this.attributes=C.box(e)}copyWithAttributes(t){return new this.constructor(this.getValue(),t)}copyWithAdditionalAttributes(t){return this.copyWithAttributes(this.attributes.merge(t))}copyWithoutAttribute(t){return this.copyWithAttributes(this.attributes.remove(t))}copy(){return this.copyWithAttributes(this.attributes)}getAttribute(t){return this.attributes.get(t)}getAttributesHash(){return this.attributes}getAttributes(){return this.attributes.toObject()}hasAttribute(t){return this.attributes.has(t)}hasSameStringValueAsPiece(t){return t&&this.toString()===t.toString()}hasSameAttributesAsPiece(t){return t&&(this.attributes===t.attributes||this.attributes.isEqualTo(t.attributes))}isBlockBreak(){return!1}isEqualTo(t){return super.isEqualTo(...arguments)||this.hasSameConstructorAs(t)&&this.hasSameStringValueAsPiece(t)&&this.hasSameAttributesAsPiece(t)}isEmpty(){return this.length===0}isSerializable(){return!0}toJSON(){return{type:this.constructor.type,attributes:this.getAttributes()}}contentsForInspection(){return{type:this.constructor.type,attributes:this.attributes.inspect()}}canBeGrouped(){return this.hasAttribute("href")}canBeGroupedWith(t){return this.getAttribute("href")===t.getAttribute("href")}getLength(){return this.length}canBeConsolidatedWith(t){return!1}};E(j,"types",{});var Wt=class extends at{constructor(t){super(...arguments),this.url=t}perform(t){let e=new Image;e.onload=()=>(e.width=this.width=e.naturalWidth,e.height=this.height=e.naturalHeight,t(!0,e)),e.onerror=()=>t(!1),e.src=this.url}},H=class extends O{static attachmentForFile(t){let e=new this(this.attributesForFile(t));return e.setFile(t),e}static attributesForFile(t){return new C({filename:t.name,filesize:t.size,contentType:t.type})}static fromJSON(t){return new this(t)}constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};super(t),this.releaseFile=this.releaseFile.bind(this),this.attributes=C.box(t),this.didChangeAttributes()}getAttribute(t){return this.attributes.get(t)}hasAttribute(t){return this.attributes.has(t)}getAttributes(){return this.attributes.toObject()}setAttributes(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},e=this.attributes.merge(t);var i,r,o,s;if(!this.attributes.isEqualTo(e))return this.attributes=e,this.didChangeAttributes(),(i=this.previewDelegate)===null||i===void 0||(r=i.attachmentDidChangeAttributes)===null||r===void 0||r.call(i,this),(o=this.delegate)===null||o===void 0||(s=o.attachmentDidChangeAttributes)===null||s===void 0?void 0:s.call(o,this)}didChangeAttributes(){if(this.isPreviewable())return this.preloadURL()}isPending(){return this.file!=null&&!(this.getURL()||this.getHref())}isPreviewable(){return this.attributes.has("previewable")?this.attributes.get("previewable"):H.previewablePattern.test(this.getContentType())}getType(){return this.hasContent()?"content":this.isPreviewable()?"preview":"file"}getURL(){return this.attributes.get("url")}getHref(){return this.attributes.get("href")}getFilename(){return this.attributes.get("filename")||""}getFilesize(){return this.attributes.get("filesize")}getFormattedFilesize(){let t=this.attributes.get("filesize");return typeof t=="number"?vi.formatter(t):""}getExtension(){var t;return(t=this.getFilename().match(/\.(\w+)$/))===null||t===void 0?void 0:t[1].toLowerCase()}getContentType(){return this.attributes.get("contentType")}hasContent(){return this.attributes.has("content")}getContent(){return this.attributes.get("content")}getWidth(){return this.attributes.get("width")}getHeight(){return this.attributes.get("height")}getFile(){return this.file}setFile(t){if(this.file=t,this.isPreviewable())return this.preloadFile()}releaseFile(){this.releasePreloadedFile(),this.file=null}getUploadProgress(){return this.uploadProgress!=null?this.uploadProgress:0}setUploadProgress(t){var e,i;if(this.uploadProgress!==t)return this.uploadProgress=t,(e=this.uploadProgressDelegate)===null||e===void 0||(i=e.attachmentDidChangeUploadProgress)===null||i===void 0?void 0:i.call(e,this)}toJSON(){return this.getAttributes()}getCacheKey(){return[super.getCacheKey(...arguments),this.attributes.getCacheKey(),this.getPreviewURL()].join("/")}getPreviewURL(){return this.previewURL||this.preloadingURL}setPreviewURL(t){var e,i,r,o;if(t!==this.getPreviewURL())return this.previewURL=t,(e=this.previewDelegate)===null||e===void 0||(i=e.attachmentDidChangeAttributes)===null||i===void 0||i.call(e,this),(r=this.delegate)===null||r===void 0||(o=r.attachmentDidChangePreviewURL)===null||o===void 0?void 0:o.call(r,this)}preloadURL(){return this.preload(this.getURL(),this.releaseFile)}preloadFile(){if(this.file)return this.fileObjectURL=URL.createObjectURL(this.file),this.preload(this.fileObjectURL)}releasePreloadedFile(){this.fileObjectURL&&(URL.revokeObjectURL(this.fileObjectURL),this.fileObjectURL=null)}preload(t,e){if(t&&t!==this.getPreviewURL())return this.preloadingURL=t,new Wt(t).then(i=>{let{width:r,height:o}=i;return this.getWidth()&&this.getHeight()||this.setAttributes({width:r,height:o}),this.preloadingURL=null,this.setPreviewURL(t),e?.()}).catch(()=>(this.preloadingURL=null,e?.()))}};E(H,"previewablePattern",/^image(\/(gif|png|webp|jpe?g)|$)/);var z=class extends j{static fromJSON(t){return new this(H.fromJSON(t.attachment),t.attributes)}constructor(t){super(...arguments),this.attachment=t,this.length=1,this.ensureAttachmentExclusivelyHasAttribute("href"),this.attachment.hasContent()||this.removeProhibitedAttributes()}ensureAttachmentExclusivelyHasAttribute(t){this.hasAttribute(t)&&(this.attachment.hasAttribute(t)||this.attachment.setAttributes(this.attributes.slice([t])),this.attributes=this.attributes.remove(t))}removeProhibitedAttributes(){let t=this.attributes.slice(z.permittedAttributes);t.isEqualTo(this.attributes)||(this.attributes=t)}getValue(){return this.attachment}isSerializable(){return!this.attachment.isPending()}getCaption(){return this.attributes.get("caption")||""}isEqualTo(t){var e;return super.isEqualTo(t)&&this.attachment.id===(t==null||(e=t.attachment)===null||e===void 0?void 0:e.id)}toString(){return"\uFFFC"}toJSON(){let t=super.toJSON(...arguments);return t.attachment=this.attachment,t}getCacheKey(){return[super.getCacheKey(...arguments),this.attachment.getCacheKey()].join("/")}toConsole(){return JSON.stringify(this.toString())}};E(z,"permittedAttributes",["caption","presentation"]),j.registerType("attachment",z);var Rt=class extends j{static fromJSON(t){return new this(t.string,t.attributes)}constructor(t){super(...arguments),this.string=(e=>e.replace(/\r\n?/g,` +`))(t),this.length=this.string.length}getValue(){return this.string}toString(){return this.string.toString()}isBlockBreak(){return this.toString()===` +`&&this.getAttribute("blockBreak")===!0}toJSON(){let t=super.toJSON(...arguments);return t.string=this.string,t}canBeConsolidatedWith(t){return t&&this.hasSameConstructorAs(t)&&this.hasSameAttributesAsPiece(t)}consolidateWith(t){return new this.constructor(this.toString()+t.toString(),this.attributes)}splitAtOffset(t){let e,i;return t===0?(e=null,i=this):t===this.length?(e=this,i=null):(e=new this.constructor(this.string.slice(0,t),this.attributes),i=new this.constructor(this.string.slice(t),this.attributes)),[e,i]}toConsole(){let{string:t}=this;return t.length>15&&(t=t.slice(0,14)+"\u2026"),JSON.stringify(t.toString())}};j.registerType("string",Rt);var ut=class extends O{static box(t){return t instanceof this?t:new this(t)}constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];super(...arguments),this.objects=t.slice(0),this.length=this.objects.length}indexOf(t){return this.objects.indexOf(t)}splice(){for(var t=arguments.length,e=new Array(t),i=0;it(e,i))}insertObjectAtIndex(t,e){return this.splice(e,0,t)}insertSplittableListAtIndex(t,e){return this.splice(e,0,...t.objects)}insertSplittableListAtPosition(t,e){let[i,r]=this.splitObjectAtPosition(e);return new this.constructor(i).insertSplittableListAtIndex(t,r)}editObjectAtIndex(t,e){return this.replaceObjectAtIndex(e(this.objects[t]),t)}replaceObjectAtIndex(t,e){return this.splice(e,1,t)}removeObjectAtIndex(t){return this.splice(t,1)}getObjectAtIndex(t){return this.objects[t]}getSplittableListInRange(t){let[e,i,r]=this.splitObjectsAtRange(t);return new this.constructor(e.slice(i,r+1))}selectSplittableList(t){let e=this.objects.filter(i=>t(i));return new this.constructor(e)}removeObjectsInRange(t){let[e,i,r]=this.splitObjectsAtRange(t);return new this.constructor(e).splice(i,r-i+1)}transformObjectsInRange(t,e){let[i,r,o]=this.splitObjectsAtRange(t),s=i.map((a,l)=>r<=l&&l<=o?e(a):a);return new this.constructor(s)}splitObjectsAtRange(t){let e,[i,r,o]=this.splitObjectAtPosition(mn(t));return[i,e]=new this.constructor(i).splitObjectAtPosition(pn(t)+o),[i,r,e-1]}getObjectAtPosition(t){let{index:e}=this.findIndexAndOffsetAtPosition(t);return this.objects[e]}splitObjectAtPosition(t){let e,i,{index:r,offset:o}=this.findIndexAndOffsetAtPosition(t),s=this.objects.slice(0);if(r!=null)if(o===0)e=r,i=0;else{let a=this.getObjectAtIndex(r),[l,c]=a.splitAtOffset(o);s.splice(r,1,l,c),e=r+1,i=l.getLength()-o}else e=s.length,i=0;return[s,e,i]}consolidate(){let t=[],e=this.objects[0];return this.objects.slice(1).forEach(i=>{var r,o;(r=(o=e).canBeConsolidatedWith)!==null&&r!==void 0&&r.call(o,i)?e=e.consolidateWith(i):(t.push(e),e=i)}),e&&t.push(e),new this.constructor(t)}consolidateFromIndexToIndex(t,e){let i=this.objects.slice(0).slice(t,e+1),r=new this.constructor(i).consolidate().toArray();return this.splice(t,i.length,...r)}findIndexAndOffsetAtPosition(t){let e,i=0;for(e=0;ethis.endPosition+=t.getLength())),this.endPosition}toString(){return this.objects.join("")}toArray(){return this.objects.slice(0)}toJSON(){return this.toArray()}isEqualTo(t){return super.isEqualTo(...arguments)||gn(this.objects,t?.objects)}contentsForInspection(){return{objects:"[".concat(this.objects.map(t=>t.inspect()).join(", "),"]")}}},gn=function(n){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[];if(n.length!==t.length)return!1;let e=!0;for(let i=0;in[0],pn=n=>n[1],R=class extends O{static textForAttachmentWithAttributes(t,e){return new this([new z(t,e)])}static textForStringWithAttributes(t,e){return new this([new Rt(t,e)])}static fromJSON(t){return new this(Array.from(t).map(e=>j.fromJSON(e)))}constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];super(...arguments);let e=t.filter(i=>!i.isEmpty());this.pieceList=new ut(e)}copy(){return this.copyWithPieceList(this.pieceList)}copyWithPieceList(t){return new this.constructor(t.consolidate().toArray())}copyUsingObjectMap(t){let e=this.getPieces().map(i=>t.find(i)||i);return new this.constructor(e)}appendText(t){return this.insertTextAtPosition(t,this.getLength())}insertTextAtPosition(t,e){return this.copyWithPieceList(this.pieceList.insertSplittableListAtPosition(t.pieceList,e))}removeTextAtRange(t){return this.copyWithPieceList(this.pieceList.removeObjectsInRange(t))}replaceTextAtRange(t,e){return this.removeTextAtRange(e).insertTextAtPosition(t,e[0])}moveTextFromRangeToPosition(t,e){if(t[0]<=e&&e<=t[1])return;let i=this.getTextAtRange(t),r=i.getLength();return t[0]i.copyWithAdditionalAttributes(t)))}removeAttributeAtRange(t,e){return this.copyWithPieceList(this.pieceList.transformObjectsInRange(e,i=>i.copyWithoutAttribute(t)))}setAttributesAtRange(t,e){return this.copyWithPieceList(this.pieceList.transformObjectsInRange(e,i=>i.copyWithAttributes(t)))}getAttributesAtPosition(t){var e;return((e=this.pieceList.getObjectAtPosition(t))===null||e===void 0?void 0:e.getAttributes())||{}}getCommonAttributes(){let t=Array.from(this.pieceList.toArray()).map(e=>e.getAttributes());return C.fromCommonAttributesOfObjects(t).toObject()}getCommonAttributesAtRange(t){return this.getTextAtRange(t).getCommonAttributes()||{}}getExpandedRangeForAttributeAtOffset(t,e){let i,r=i=e,o=this.getLength();for(;r>0&&this.getCommonAttributesAtRange([r-1,i])[t];)r--;for(;i!!t.attachment)}getAttachments(){return this.getAttachmentPieces().map(t=>t.attachment)}getAttachmentAndPositionById(t){let e=0;for(let r of this.pieceList.toArray()){var i;if(((i=r.attachment)===null||i===void 0?void 0:i.id)===t)return{attachment:r.attachment,position:e};e+=r.length}return{attachment:null,position:null}}getAttachmentById(t){let{attachment:e}=this.getAttachmentAndPositionById(t);return e}getRangeOfAttachment(t){let e=this.getAttachmentAndPositionById(t.id),i=e.position;if(t=e.attachment)return[i,i+1]}updateAttributesForAttachment(t,e){let i=this.getRangeOfAttachment(e);return i?this.addAttributesAtRange(t,i):this}getLength(){return this.pieceList.getEndPosition()}isEmpty(){return this.getLength()===0}isEqualTo(t){var e;return super.isEqualTo(t)||(t==null||(e=t.pieceList)===null||e===void 0?void 0:e.isEqualTo(this.pieceList))}isBlockBreak(){return this.getLength()===1&&this.pieceList.getObjectAtIndex(0).isBlockBreak()}eachPiece(t){return this.pieceList.eachObject(t)}getPieces(){return this.pieceList.toArray()}getPieceAtPosition(t){return this.pieceList.getObjectAtPosition(t)}contentsForInspection(){return{pieceList:this.pieceList.inspect()}}toSerializableText(){let t=this.pieceList.selectSplittableList(e=>e.isSerializable());return this.copyWithPieceList(t)}toString(){return this.pieceList.toString()}toJSON(){return this.pieceList.toJSON()}toConsole(){return JSON.stringify(this.pieceList.toArray().map(t=>JSON.parse(t.toConsole())))}getDirection(){return $i(this.toString())}isRTL(){return this.getDirection()==="rtl"}},S=class extends O{static fromJSON(t){return new this(R.fromJSON(t.text),t.attributes,t.htmlAttributes)}constructor(t,e,i){super(...arguments),this.text=fn(t||new R),this.attributes=e||[],this.htmlAttributes=i||{}}isEmpty(){return this.text.isBlockBreak()}isEqualTo(t){return!!super.isEqualTo(t)||this.text.isEqualTo(t?.text)&&Q(this.attributes,t?.attributes)&&dt(this.htmlAttributes,t?.htmlAttributes)}copyWithText(t){return new S(t,this.attributes,this.htmlAttributes)}copyWithoutText(){return this.copyWithText(null)}copyWithAttributes(t){return new S(this.text,t,this.htmlAttributes)}copyWithoutAttributes(){return this.copyWithAttributes(null)}copyUsingObjectMap(t){let e=t.find(this.text);return e?this.copyWithText(e):this.copyWithText(this.text.copyUsingObjectMap(t))}addAttribute(t){let e=this.attributes.concat(si(t));return this.copyWithAttributes(e)}addHTMLAttribute(t,e){let i=Object.assign({},this.htmlAttributes,{[t]:e});return new S(this.text,this.attributes,i)}removeAttribute(t){let{listAttribute:e}=v(t),i=li(li(this.attributes,t),e);return this.copyWithAttributes(i)}removeLastAttribute(){return this.removeAttribute(this.getLastAttribute())}getLastAttribute(){return ai(this.attributes)}getAttributes(){return this.attributes.slice(0)}getAttributeLevel(){return this.attributes.length}getAttributeAtLevel(t){return this.attributes[t-1]}hasAttribute(t){return this.attributes.includes(t)}hasAttributes(){return this.getAttributeLevel()>0}getLastNestableAttribute(){return ai(this.getNestableAttributes())}getNestableAttributes(){return this.attributes.filter(t=>v(t).nestable)}getNestingLevel(){return this.getNestableAttributes().length}decreaseNestingLevel(){let t=this.getLastNestableAttribute();return t?this.removeAttribute(t):this}increaseNestingLevel(){let t=this.getLastNestableAttribute();if(t){let e=this.attributes.lastIndexOf(t),i=Ve(this.attributes,e+1,0,...si(t));return this.copyWithAttributes(i)}return this}getListItemAttributes(){return this.attributes.filter(t=>v(t).listAttribute)}isListItem(){var t;return(t=v(this.getLastAttribute()))===null||t===void 0?void 0:t.listAttribute}isTerminalBlock(){var t;return(t=v(this.getLastAttribute()))===null||t===void 0?void 0:t.terminal}breaksOnReturn(){var t;return(t=v(this.getLastAttribute()))===null||t===void 0?void 0:t.breakOnReturn}findLineBreakInDirectionFromPosition(t,e){let i=this.toString(),r;switch(t){case"forward":r=i.indexOf(` +`,e);break;case"backward":r=i.slice(0,e).lastIndexOf(` +`)}if(r!==-1)return r}contentsForInspection(){return{text:this.text.inspect(),attributes:this.attributes}}toString(){return this.text.toString()}toJSON(){return{text:this.text,attributes:this.attributes,htmlAttributes:this.htmlAttributes}}getDirection(){return this.text.getDirection()}isRTL(){return this.text.isRTL()}getLength(){return this.text.getLength()}canBeConsolidatedWith(t){return!this.hasAttributes()&&!t.hasAttributes()&&this.getDirection()===t.getDirection()}consolidateWith(t){let e=R.textForStringWithAttributes(` +`),i=this.getTextWithoutBlockBreak().appendText(e);return this.copyWithText(i.appendText(t.text))}splitAtOffset(t){let e,i;return t===0?(e=null,i=this):t===this.getLength()?(e=this,i=null):(e=this.copyWithText(this.text.getTextAtRange([0,t])),i=this.copyWithText(this.text.getTextAtRange([t,this.getLength()]))),[e,i]}getBlockBreakPosition(){return this.text.getLength()-1}getTextWithoutBlockBreak(){return wi(this.text)?this.text.getTextAtRange([0,this.getBlockBreakPosition()]):this.text.copy()}canBeGrouped(t){return this.attributes[t]}canBeGroupedWith(t,e){let i=t.getAttributes(),r=i[e],o=this.attributes[e];return o===r&&!(v(o).group===!1&&!(()=>{if(!Dt){Dt=[];for(let s in y){let{listAttribute:a}=y[s];a!=null&&Dt.push(a)}}return Dt})().includes(i[e+1]))&&(this.getDirection()===t.getDirection()||t.isEmpty())}},fn=function(n){return n=bn(n),n=An(n)},bn=function(n){let t=!1,e=n.getPieces(),i=e.slice(0,e.length-1),r=e[e.length-1];return r?(i=i.map(o=>o.isBlockBreak()?(t=!0,xn(o)):o),t?new R([...i,r]):n):n},vn=R.textForStringWithAttributes(` +`,{blockBreak:!0}),An=function(n){return wi(n)?n:n.appendText(vn)},wi=function(n){let t=n.getLength();return t===0?!1:n.getTextAtRange([t-1,t]).isBlockBreak()},xn=n=>n.copyWithoutAttribute("blockBreak"),si=function(n){let{listAttribute:t}=v(n);return t?[t,n]:[n]},ai=n=>n.slice(-1)[0],li=function(n,t){let e=n.lastIndexOf(t);return e===-1?n:Ve(n,e,1)},k=class extends O{static fromJSON(t){return new this(Array.from(t).map(e=>S.fromJSON(e)))}static fromString(t,e){let i=R.textForStringWithAttributes(t,e);return new this([new S(i)])}constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];super(...arguments),t.length===0&&(t=[new S]),this.blockList=ut.box(t)}isEmpty(){let t=this.getBlockAtIndex(0);return this.blockList.length===1&&t.isEmpty()&&!t.hasAttributes()}copy(){let t=(arguments.length>0&&arguments[0]!==void 0?arguments[0]:{}).consolidateBlocks?this.blockList.consolidate().toArray():this.blockList.toArray();return new this.constructor(t)}copyUsingObjectsFromDocument(t){let e=new Te(t.getObjects());return this.copyUsingObjectMap(e)}copyUsingObjectMap(t){let e=this.getBlocks().map(i=>t.find(i)||i.copyUsingObjectMap(t));return new this.constructor(e)}copyWithBaseBlockAttributes(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],e=this.getBlocks().map(i=>{let r=t.concat(i.getAttributes());return i.copyWithAttributes(r)});return new this.constructor(e)}replaceBlock(t,e){let i=this.blockList.indexOf(t);return i===-1?this:new this.constructor(this.blockList.replaceObjectAtIndex(e,i))}insertDocumentAtRange(t,e){let{blockList:i}=t;e=g(e);let[r]=e,{index:o,offset:s}=this.locationFromPosition(r),a=this,l=this.getBlockAtPosition(r);return N(e)&&l.isEmpty()&&!l.hasAttributes()?a=new this.constructor(a.blockList.removeObjectAtIndex(o)):l.getBlockBreakPosition()===s&&r++,a=a.removeTextAtRange(e),new this.constructor(a.blockList.insertSplittableListAtPosition(i,r))}mergeDocumentAtRange(t,e){let i,r;e=g(e);let[o]=e,s=this.locationFromPosition(o),a=this.getBlockAtIndex(s.index).getAttributes(),l=t.getBaseBlockAttributes(),c=a.slice(-l.length);if(Q(l,c)){let A=a.slice(0,-l.length);i=t.copyWithBaseBlockAttributes(A)}else i=t.copy({consolidateBlocks:!0}).copyWithBaseBlockAttributes(a);let u=i.getBlockCount(),b=i.getBlockAtIndex(0);if(Q(a,b.getAttributes())){let A=b.getTextWithoutBlockBreak();if(r=this.insertTextAtRange(A,e),u>1){i=new this.constructor(i.getBlocks().slice(1));let L=o+A.getLength();r=r.insertDocumentAtRange(i,L)}}else r=this.insertDocumentAtRange(i,e);return r}insertTextAtRange(t,e){e=g(e);let[i]=e,{index:r,offset:o}=this.locationFromPosition(i),s=this.removeTextAtRange(e);return new this.constructor(s.blockList.editObjectAtIndex(r,a=>a.copyWithText(a.text.insertTextAtPosition(t,o))))}removeTextAtRange(t){let e;t=g(t);let[i,r]=t;if(N(t))return this;let[o,s]=Array.from(this.locationRangeFromRange(t)),a=o.index,l=o.offset,c=this.getBlockAtIndex(a),u=s.index,b=s.offset,A=this.getBlockAtIndex(u);if(r-i==1&&c.getBlockBreakPosition()===l&&A.getBlockBreakPosition()!==b&&A.text.getStringAtPosition(b)===` +`)e=this.blockList.editObjectAtIndex(u,L=>L.copyWithText(L.text.removeTextAtRange([b,b+1])));else{let L,gt=c.text.getTextAtRange([0,l]),P=A.text.getTextAtRange([b,A.getLength()]),it=gt.appendText(P);L=a!==u&&l===0&&c.getAttributeLevel()>=A.getAttributeLevel()?A.copyWithText(it):c.copyWithText(it);let mt=u+1-a;e=this.blockList.splice(a,mt,L)}return new this.constructor(e)}moveTextFromRangeToPosition(t,e){let i;t=g(t);let[r,o]=t;if(r<=e&&e<=o)return this;let s=this.getDocumentAtRange(t),a=this.removeTextAtRange(t),l=rr=r.editObjectAtIndex(a,function(){return v(t)?o.addAttribute(t,e):s[0]===s[1]?o:o.copyWithText(o.text.addAttributeAtRange(t,e,s))})),new this.constructor(r)}addAttribute(t,e){let{blockList:i}=this;return this.eachBlock((r,o)=>i=i.editObjectAtIndex(o,()=>r.addAttribute(t,e))),new this.constructor(i)}removeAttributeAtRange(t,e){let{blockList:i}=this;return this.eachBlockAtRange(e,function(r,o,s){v(t)?i=i.editObjectAtIndex(s,()=>r.removeAttribute(t)):o[0]!==o[1]&&(i=i.editObjectAtIndex(s,()=>r.copyWithText(r.text.removeAttributeAtRange(t,o))))}),new this.constructor(i)}updateAttributesForAttachment(t,e){let i=this.getRangeOfAttachment(e),[r]=Array.from(i),{index:o}=this.locationFromPosition(r),s=this.getTextAtIndex(o);return new this.constructor(this.blockList.editObjectAtIndex(o,a=>a.copyWithText(s.updateAttributesForAttachment(t,e))))}removeAttributeForAttachment(t,e){let i=this.getRangeOfAttachment(e);return this.removeAttributeAtRange(t,i)}setHTMLAttributeAtPosition(t,e,i){let r=this.getBlockAtPosition(t),o=r.addHTMLAttribute(e,i);return this.replaceBlock(r,o)}insertBlockBreakAtRange(t){let e;t=g(t);let[i]=t,{offset:r}=this.locationFromPosition(i),o=this.removeTextAtRange(t);return r===0&&(e=[new S]),new this.constructor(o.blockList.insertSplittableListAtPosition(new ut(e),i))}applyBlockAttributeAtRange(t,e,i){let r=this.expandRangeToLineBreaksAndSplitBlocks(i),o=r.document;i=r.range;let s=v(t);if(s.listAttribute){o=o.removeLastListAttributeAtRange(i,{exceptAttributeName:t});let a=o.convertLineBreaksToBlockBreaksInRange(i);o=a.document,i=a.range}else o=s.exclusive?o.removeBlockAttributesAtRange(i):s.terminal?o.removeLastTerminalAttributeAtRange(i):o.consolidateBlocksAtRange(i);return o.addAttributeAtRange(t,e,i)}removeLastListAttributeAtRange(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},{blockList:i}=this;return this.eachBlockAtRange(t,function(r,o,s){let a=r.getLastAttribute();a&&v(a).listAttribute&&a!==e.exceptAttributeName&&(i=i.editObjectAtIndex(s,()=>r.removeAttribute(a)))}),new this.constructor(i)}removeLastTerminalAttributeAtRange(t){let{blockList:e}=this;return this.eachBlockAtRange(t,function(i,r,o){let s=i.getLastAttribute();s&&v(s).terminal&&(e=e.editObjectAtIndex(o,()=>i.removeAttribute(s)))}),new this.constructor(e)}removeBlockAttributesAtRange(t){let{blockList:e}=this;return this.eachBlockAtRange(t,function(i,r,o){i.hasAttributes()&&(e=e.editObjectAtIndex(o,()=>i.copyWithoutAttributes()))}),new this.constructor(e)}expandRangeToLineBreaksAndSplitBlocks(t){let e;t=g(t);let[i,r]=t,o=this.locationFromPosition(i),s=this.locationFromPosition(r),a=this,l=a.getBlockAtIndex(o.index);if(o.offset=l.findLineBreakInDirectionFromPosition("backward",o.offset),o.offset!=null&&(e=a.positionFromLocation(o),a=a.insertBlockBreakAtRange([e,e+1]),s.index+=1,s.offset-=a.getBlockAtIndex(o.index).getLength(),o.index+=1),o.offset=0,s.offset===0&&s.index>o.index)s.index-=1,s.offset=a.getBlockAtIndex(s.index).getBlockBreakPosition();else{let c=a.getBlockAtIndex(s.index);c.text.getStringAtRange([s.offset-1,s.offset])===` +`?s.offset-=1:s.offset=c.findLineBreakInDirectionFromPosition("forward",s.offset),s.offset!==c.getBlockBreakPosition()&&(e=a.positionFromLocation(s),a=a.insertBlockBreakAtRange([e,e+1]))}return i=a.positionFromLocation(o),r=a.positionFromLocation(s),{document:a,range:t=g([i,r])}}convertLineBreaksToBlockBreaksInRange(t){t=g(t);let[e]=t,i=this.getStringAtRange(t).slice(0,-1),r=this;return i.replace(/.*?\n/g,function(o){e+=o.length,r=r.insertBlockBreakAtRange([e-1,e])}),{document:r,range:t}}consolidateBlocksAtRange(t){t=g(t);let[e,i]=t,r=this.locationFromPosition(e).index,o=this.locationFromPosition(i).index;return new this.constructor(this.blockList.consolidateFromIndexToIndex(r,o))}getDocumentAtRange(t){t=g(t);let e=this.blockList.getSplittableListInRange(t).toArray();return new this.constructor(e)}getStringAtRange(t){let e,i=t=g(t);return i[i.length-1]!==this.getLength()&&(e=-1),this.getDocumentAtRange(t).toString().slice(0,e)}getBlockAtIndex(t){return this.blockList.getObjectAtIndex(t)}getBlockAtPosition(t){let{index:e}=this.locationFromPosition(t);return this.getBlockAtIndex(e)}getTextAtIndex(t){var e;return(e=this.getBlockAtIndex(t))===null||e===void 0?void 0:e.text}getTextAtPosition(t){let{index:e}=this.locationFromPosition(t);return this.getTextAtIndex(e)}getPieceAtPosition(t){let{index:e,offset:i}=this.locationFromPosition(t);return this.getTextAtIndex(e).getPieceAtPosition(i)}getCharacterAtPosition(t){let{index:e,offset:i}=this.locationFromPosition(t);return this.getTextAtIndex(e).getStringAtRange([i,i+1])}getLength(){return this.blockList.getEndPosition()}getBlocks(){return this.blockList.toArray()}getBlockCount(){return this.blockList.length}getEditCount(){return this.editCount}eachBlock(t){return this.blockList.eachObject(t)}eachBlockAtRange(t,e){let i,r;t=g(t);let[o,s]=t,a=this.locationFromPosition(o),l=this.locationFromPosition(s);if(a.index===l.index)return i=this.getBlockAtIndex(a.index),r=[a.offset,l.offset],e(i,r,a.index);for(let c=a.index;c<=l.index;c++)if(i=this.getBlockAtIndex(c),i){switch(c){case a.index:r=[a.offset,i.text.getLength()];break;case l.index:r=[0,l.offset];break;default:r=[0,i.text.getLength()]}e(i,r,c)}}getCommonAttributesAtRange(t){t=g(t);let[e]=t;if(N(t))return this.getCommonAttributesAtPosition(e);{let i=[],r=[];return this.eachBlockAtRange(t,function(o,s){if(s[0]!==s[1])return i.push(o.text.getCommonAttributesAtRange(s)),r.push(ci(o))}),C.fromCommonAttributesOfObjects(i).merge(C.fromCommonAttributesOfObjects(r)).toObject()}}getCommonAttributesAtPosition(t){let e,i,{index:r,offset:o}=this.locationFromPosition(t),s=this.getBlockAtIndex(r);if(!s)return{};let a=ci(s),l=s.text.getAttributesAtPosition(o),c=s.text.getAttributesAtPosition(o-1),u=Object.keys(Y).filter(b=>Y[b].inheritable);for(e in c)i=c[e],(i===l[e]||u.includes(e))&&(a[e]=i);return a}getRangeOfCommonAttributeAtPosition(t,e){let{index:i,offset:r}=this.locationFromPosition(e),o=this.getTextAtIndex(i),[s,a]=Array.from(o.getExpandedRangeForAttributeAtOffset(t,r)),l=this.positionFromLocation({index:i,offset:s}),c=this.positionFromLocation({index:i,offset:a});return g([l,c])}getBaseBlockAttributes(){let t=this.getBlockAtIndex(0).getAttributes();for(let e=1;e{let o=[];for(let s=0;s{let{text:i}=e;return t=t.concat(i.getAttachmentPieces())}),t}getAttachments(){return this.getAttachmentPieces().map(t=>t.attachment)}getRangeOfAttachment(t){let e=0,i=this.blockList.toArray();for(let r=0;r{let o=r.getLength();r.hasAttribute(t)&&i.push([e,e+o]),e+=o}),i}findRangesForTextAttribute(t){let{withValue:e}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=0,r=[],o=[];return this.getPieces().forEach(s=>{let a=s.getLength();(function(l){return e?l.getAttribute(t)===e:l.hasAttribute(t)})(s)&&(r[1]===i?r[1]=i+a:o.push(r=[i,i+a])),i+=a}),o}locationFromPosition(t){let e=this.blockList.findIndexAndOffsetAtPosition(Math.max(0,t));if(e.index!=null)return e;{let i=this.getBlocks();return{index:i.length-1,offset:i[i.length-1].getLength()}}}positionFromLocation(t){return this.blockList.findPositionAtIndexAndOffset(t.index,t.offset)}locationRangeFromPosition(t){return g(this.locationFromPosition(t))}locationRangeFromRange(t){if(!(t=g(t)))return;let[e,i]=Array.from(t),r=this.locationFromPosition(e),o=this.locationFromPosition(i);return g([r,o])}rangeFromLocationRange(t){let e;t=g(t);let i=this.positionFromLocation(t[0]);return N(t)||(e=this.positionFromLocation(t[1])),g([i,e])}isEqualTo(t){return this.blockList.isEqualTo(t?.blockList)}getTexts(){return this.getBlocks().map(t=>t.text)}getPieces(){let t=[];return Array.from(this.getTexts()).forEach(e=>{t.push(...Array.from(e.getPieces()||[]))}),t}getObjects(){return this.getBlocks().concat(this.getTexts()).concat(this.getPieces())}toSerializableDocument(){let t=[];return this.blockList.eachObject(e=>t.push(e.copyWithText(e.text.toSerializableText()))),new this.constructor(t)}toString(){return this.blockList.toString()}toJSON(){return this.blockList.toJSON()}toConsole(){return JSON.stringify(this.blockList.toArray().map(t=>JSON.parse(t.text.toConsole())))}},ci=function(n){let t={},e=n.getLastAttribute();return e&&(t[e]=!0),t},fe=function(n){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return{string:n=bt(n),attributes:t,type:"string"}},ui=(n,t)=>{try{return JSON.parse(n.getAttribute("data-trix-".concat(t)))}catch{return{}}},et=class extends f{static parse(t,e){let i=new this(t,e);return i.parse(),i}constructor(t){let{referenceElement:e}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};super(...arguments),this.html=t,this.referenceElement=e,this.blocks=[],this.blockElements=[],this.processedElements=[]}getDocument(){return k.fromJSON(this.blocks)}parse(){try{this.createHiddenContainer(),lt.setHTML(this.containerElement,this.html);let t=Ft(this.containerElement,{usingFilter:Cn});for(;t.nextNode();)this.processNode(t.currentNode);return this.translateBlockElementMarginsToNewlines()}finally{this.removeHiddenContainer()}}createHiddenContainer(){return this.referenceElement?(this.containerElement=this.referenceElement.cloneNode(!1),this.containerElement.removeAttribute("id"),this.containerElement.setAttribute("data-trix-internal",""),this.containerElement.style.display="none",this.referenceElement.parentNode.insertBefore(this.containerElement,this.referenceElement.nextSibling)):(this.containerElement=d({tagName:"div",style:{display:"none"}}),document.body.appendChild(this.containerElement))}removeHiddenContainer(){return V(this.containerElement)}processNode(t){switch(t.nodeType){case Node.TEXT_NODE:if(!this.isInsignificantTextNode(t))return this.appendBlockForTextNode(t),this.processTextNode(t);break;case Node.ELEMENT_NODE:return this.appendBlockForElement(t),this.processElement(t)}}appendBlockForTextNode(t){let e=t.parentNode;if(e===this.currentBlockElement&&this.isBlockElement(t.previousSibling))return this.appendStringWithAttributes(` +`);if(e===this.containerElement||this.isBlockElement(e)){var i;let r=this.getBlockAttributes(e),o=this.getBlockHTMLAttributes(e);Q(r,(i=this.currentBlock)===null||i===void 0?void 0:i.attributes)||(this.currentBlock=this.appendBlockForAttributesWithElement(r,e,o),this.currentBlockElement=e)}}appendBlockForElement(t){let e=this.isBlockElement(t),i=J(this.currentBlockElement,t);if(e&&!this.isBlockElement(t.firstChild)){if(!this.isInsignificantTextNode(t.firstChild)||!this.isBlockElement(t.firstElementChild)){let r=this.getBlockAttributes(t),o=this.getBlockHTMLAttributes(t);if(t.firstChild){if(i&&Q(r,this.currentBlock.attributes))return this.appendStringWithAttributes(` +`);this.currentBlock=this.appendBlockForAttributesWithElement(r,t,o),this.currentBlockElement=t}}}else if(this.currentBlockElement&&!i&&!e){let r=this.findParentBlockElement(t);if(r)return this.appendBlockForElement(r);this.currentBlock=this.appendEmptyBlock(),this.currentBlockElement=null}}findParentBlockElement(t){let{parentElement:e}=t;for(;e&&e!==this.containerElement;){if(this.isBlockElement(e)&&this.blockElements.includes(e))return e;e=e.parentElement}return null}processTextNode(t){let e=t.data;var i;return hi(t.parentNode)||(e=_e(e),Ti((i=t.previousSibling)===null||i===void 0?void 0:i.textContent)&&(e=kn(e))),this.appendStringWithAttributes(e,this.getTextAttributes(t.parentNode))}processElement(t){let e;if($(t)){if(e=ui(t,"attachment"),Object.keys(e).length){let i=this.getTextAttributes(t);this.appendAttachmentWithAttributes(e,i),t.innerHTML=""}return this.processedElements.push(t)}switch(x(t)){case"br":return this.isExtraBR(t)||this.isBlockElement(t.nextSibling)||this.appendStringWithAttributes(` +`,this.getTextAttributes(t)),this.processedElements.push(t);case"img":e={url:t.getAttribute("src"),contentType:"image"};let i=(r=>{let o=r.getAttribute("width"),s=r.getAttribute("height"),a={};return o&&(a.width=parseInt(o,10)),s&&(a.height=parseInt(s,10)),a})(t);for(let r in i){let o=i[r];e[r]=o}return this.appendAttachmentWithAttributes(e,this.getTextAttributes(t)),this.processedElements.push(t);case"tr":if(this.needsTableSeparator(t))return this.appendStringWithAttributes(Tt.tableRowSeparator);break;case"td":if(this.needsTableSeparator(t))return this.appendStringWithAttributes(Tt.tableCellSeparator)}}appendBlockForAttributesWithElement(t,e){let i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};this.blockElements.push(e);let r=function(){return{text:[],attributes:arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},htmlAttributes:arguments.length>1&&arguments[1]!==void 0?arguments[1]:{}}}(t,i);return this.blocks.push(r),r}appendEmptyBlock(){return this.appendBlockForAttributesWithElement([],null)}appendStringWithAttributes(t,e){return this.appendPiece(fe(t,e))}appendAttachmentWithAttributes(t,e){return this.appendPiece(function(i){return{attachment:i,attributes:arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},type:"attachment"}}(t,e))}appendPiece(t){return this.blocks.length===0&&this.appendEmptyBlock(),this.blocks[this.blocks.length-1].text.push(t)}appendStringToTextAtIndex(t,e){let{text:i}=this.blocks[e],r=i[i.length-1];if(r?.type!=="string")return i.push(fe(t));r.string+=t}prependStringToTextAtIndex(t,e){let{text:i}=this.blocks[e],r=i[0];if(r?.type!=="string")return i.unshift(fe(t));r.string=t+r.string}getTextAttributes(t){let e,i={};for(let r in Y){let o=Y[r];if(o.tagName&&q(t,{matchingSelector:o.tagName,untilNode:this.containerElement}))i[r]=!0;else if(o.parser){if(e=o.parser(t),e){let s=!1;for(let a of this.findBlockElementAncestors(t))if(o.parser(a)===e){s=!0;break}s||(i[r]=e)}}else o.styleProperty&&(e=t.style[o.styleProperty],e&&(i[r]=e))}if($(t)){let r=ui(t,"attributes");for(let o in r)e=r[o],i[o]=e}return i}getBlockAttributes(t){let e=[];for(;t&&t!==this.containerElement;){for(let r in y){let o=y[r];var i;o.parse!==!1&&x(t)===o.tagName&&((i=o.test)!==null&&i!==void 0&&i.call(o,t)||!o.test)&&(e.push(r),o.listAttribute&&e.push(o.listAttribute))}t=t.parentNode}return e.reverse()}getBlockHTMLAttributes(t){let e={},i=Object.values(y).find(r=>r.tagName===x(t));return(i?.htmlAttributes||[]).forEach(r=>{t.hasAttribute(r)&&(e[r]=t.getAttribute(r))}),e}findBlockElementAncestors(t){let e=[];for(;t&&t!==this.containerElement;){let i=x(t);At().includes(i)&&e.push(t),t=t.parentNode}return e}isBlockElement(t){if(t?.nodeType===Node.ELEMENT_NODE&&!$(t)&&!q(t,{matchingSelector:"td",untilNode:this.containerElement}))return At().includes(x(t))||window.getComputedStyle(t).display==="block"}isInsignificantTextNode(t){if(t?.nodeType!==Node.TEXT_NODE||!Rn(t.data))return;let{parentNode:e,previousSibling:i,nextSibling:r}=t;return yn(e.previousSibling)&&!this.isBlockElement(e.previousSibling)||hi(e)?void 0:!i||this.isBlockElement(i)||!r||this.isBlockElement(r)}isExtraBR(t){return x(t)==="br"&&this.isBlockElement(t.parentNode)&&t.parentNode.lastChild===t}needsTableSeparator(t){if(Tt.removeBlankTableCells){var e;let i=(e=t.previousSibling)===null||e===void 0?void 0:e.textContent;return i&&/\S/.test(i)}return t.previousSibling}translateBlockElementMarginsToNewlines(){let t=this.getMarginOfDefaultBlockElement();for(let e=0;e2*t.top&&this.prependStringToTextAtIndex(` +`,e),i.bottom>2*t.bottom&&this.appendStringToTextAtIndex(` +`,e))}}getMarginOfBlockElementAtIndex(t){let e=this.blockElements[t];if(e&&e.textContent&&!At().includes(x(e))&&!this.processedElements.includes(e))return di(e)}getMarginOfDefaultBlockElement(){let t=d(y.default.tagName);return this.containerElement.appendChild(t),di(t)}},hi=function(n){let{whiteSpace:t}=window.getComputedStyle(n);return["pre","pre-wrap","pre-line"].includes(t)},yn=n=>n&&!Ti(n.textContent),di=function(n){let t=window.getComputedStyle(n);if(t.display==="block")return{top:parseInt(t.marginTop),bottom:parseInt(t.marginBottom)}},Cn=function(n){return x(n)==="style"?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},kn=n=>n.replace(new RegExp("^".concat(ze.source,"+")),""),Rn=n=>new RegExp("^".concat(ze.source,"*$")).test(n),Ti=n=>/\s$/.test(n),En=["contenteditable","data-trix-id","data-trix-store-key","data-trix-mutable","data-trix-placeholder","tabindex"],Pe="data-trix-serialized-attributes",Sn="[".concat(Pe,"]"),Ln=new RegExp("","g"),Dn={"application/json":function(n){let t;if(n instanceof k)t=n;else{if(!(n instanceof HTMLElement))throw new Error("unserializable object");t=et.parse(n.innerHTML).getDocument()}return t.toSerializableDocument().toJSONString()},"text/html":function(n){let t;if(n instanceof k)t=ct.render(n);else{if(!(n instanceof HTMLElement))throw new Error("unserializable object");t=n.cloneNode(!0)}return Array.from(t.querySelectorAll("[data-trix-serialize=false]")).forEach(e=>{V(e)}),En.forEach(e=>{Array.from(t.querySelectorAll("[".concat(e,"]"))).forEach(i=>{i.removeAttribute(e)})}),Array.from(t.querySelectorAll(Sn)).forEach(e=>{try{let i=JSON.parse(e.getAttribute(Pe));e.removeAttribute(Pe);for(let r in i){let o=i[r];e.setAttribute(r,o)}}catch{}}),t.innerHTML.replace(Ln,"")}},wn=Object.freeze({__proto__:null}),m=class extends f{constructor(t,e){super(...arguments),this.attachmentManager=t,this.attachment=e,this.id=this.attachment.id,this.file=this.attachment.file}remove(){return this.attachmentManager.requestRemovalOfAttachment(this.attachment)}};m.proxyMethod("attachment.getAttribute"),m.proxyMethod("attachment.hasAttribute"),m.proxyMethod("attachment.setAttribute"),m.proxyMethod("attachment.getAttributes"),m.proxyMethod("attachment.setAttributes"),m.proxyMethod("attachment.isPending"),m.proxyMethod("attachment.isPreviewable"),m.proxyMethod("attachment.getURL"),m.proxyMethod("attachment.getHref"),m.proxyMethod("attachment.getFilename"),m.proxyMethod("attachment.getFilesize"),m.proxyMethod("attachment.getFormattedFilesize"),m.proxyMethod("attachment.getExtension"),m.proxyMethod("attachment.getContentType"),m.proxyMethod("attachment.getFile"),m.proxyMethod("attachment.setFile"),m.proxyMethod("attachment.releaseFile"),m.proxyMethod("attachment.getUploadProgress"),m.proxyMethod("attachment.setUploadProgress");var Ut=class extends f{constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];super(...arguments),this.managedAttachments={},Array.from(t).forEach(e=>{this.manageAttachment(e)})}getAttachments(){let t=[];for(let e in this.managedAttachments){let i=this.managedAttachments[e];t.push(i)}return t}manageAttachment(t){return this.managedAttachments[t.id]||(this.managedAttachments[t.id]=new m(this,t)),this.managedAttachments[t.id]}attachmentIsManaged(t){return t.id in this.managedAttachments}requestRemovalOfAttachment(t){var e,i;if(this.attachmentIsManaged(t))return(e=this.delegate)===null||e===void 0||(i=e.attachmentManagerDidRequestRemovalOfAttachment)===null||i===void 0?void 0:i.call(e,t)}unmanageAttachment(t){let e=this.managedAttachments[t.id];return delete this.managedAttachments[t.id],e}},qt=class{constructor(t){this.composition=t,this.document=this.composition.document;let e=this.composition.getSelectedRange();this.startPosition=e[0],this.endPosition=e[1],this.startLocation=this.document.locationFromPosition(this.startPosition),this.endLocation=this.document.locationFromPosition(this.endPosition),this.block=this.document.getBlockAtIndex(this.endLocation.index),this.breaksOnReturn=this.block.breaksOnReturn(),this.previousCharacter=this.block.text.getStringAtPosition(this.endLocation.offset-1),this.nextCharacter=this.block.text.getStringAtPosition(this.endLocation.offset)}shouldInsertBlockBreak(){return this.block.hasAttributes()&&this.block.isListItem()&&!this.block.isEmpty()?this.startLocation.offset!==0:this.breaksOnReturn&&this.nextCharacter!==` +`}shouldBreakFormattedBlock(){return this.block.hasAttributes()&&!this.block.isListItem()&&(this.breaksOnReturn&&this.nextCharacter===` +`||this.previousCharacter===` +`)}shouldDecreaseListLevel(){return this.block.hasAttributes()&&this.block.isListItem()&&this.block.isEmpty()}shouldPrependListItem(){return this.block.isListItem()&&this.startLocation.offset===0&&!this.block.isEmpty()}shouldRemoveLastBlockAttribute(){return this.block.hasAttributes()&&!this.block.isListItem()&&this.block.isEmpty()}},F=class extends f{constructor(){super(...arguments),this.document=new k,this.attachments=[],this.currentAttributes={},this.revision=0}setDocument(t){var e,i;if(!t.isEqualTo(this.document))return this.document=t,this.refreshAttachments(),this.revision++,(e=this.delegate)===null||e===void 0||(i=e.compositionDidChangeDocument)===null||i===void 0?void 0:i.call(e,t)}getSnapshot(){return{document:this.document,selectedRange:this.getSelectedRange()}}loadSnapshot(t){var e,i,r,o;let{document:s,selectedRange:a}=t;return(e=this.delegate)===null||e===void 0||(i=e.compositionWillLoadSnapshot)===null||i===void 0||i.call(e),this.setDocument(s??new k),this.setSelection(a??[0,0]),(r=this.delegate)===null||r===void 0||(o=r.compositionDidLoadSnapshot)===null||o===void 0?void 0:o.call(r)}insertText(t){let{updatePosition:e}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{updatePosition:!0},i=this.getSelectedRange();this.setDocument(this.document.insertTextAtRange(t,i));let r=i[0],o=r+t.getLength();return e&&this.setSelection(o),this.notifyDelegateOfInsertionAtRange([r,o])}insertBlock(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:new S,e=new k([t]);return this.insertDocument(e)}insertDocument(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:new k,e=this.getSelectedRange();this.setDocument(this.document.insertDocumentAtRange(t,e));let i=e[0],r=i+t.getLength();return this.setSelection(r),this.notifyDelegateOfInsertionAtRange([i,r])}insertString(t,e){let i=this.getCurrentTextAttributes(),r=R.textForStringWithAttributes(t,i);return this.insertText(r,e)}insertBlockBreak(){let t=this.getSelectedRange();this.setDocument(this.document.insertBlockBreakAtRange(t));let e=t[0],i=e+1;return this.setSelection(i),this.notifyDelegateOfInsertionAtRange([e,i])}insertLineBreak(){let t=new qt(this);if(t.shouldDecreaseListLevel())return this.decreaseListLevel(),this.setSelection(t.startPosition);if(t.shouldPrependListItem()){let e=new k([t.block.copyWithoutText()]);return this.insertDocument(e)}return t.shouldInsertBlockBreak()?this.insertBlockBreak():t.shouldRemoveLastBlockAttribute()?this.removeLastBlockAttribute():t.shouldBreakFormattedBlock()?this.breakFormattedBlock(t):this.insertString(` +`)}insertHTML(t){let e=et.parse(t).getDocument(),i=this.getSelectedRange();this.setDocument(this.document.mergeDocumentAtRange(e,i));let r=i[0],o=r+e.getLength()-1;return this.setSelection(o),this.notifyDelegateOfInsertionAtRange([r,o])}replaceHTML(t){let e=et.parse(t).getDocument().copyUsingObjectsFromDocument(this.document),i=this.getLocationRange({strict:!1}),r=this.document.rangeFromLocationRange(i);return this.setDocument(e),this.setSelection(r)}insertFile(t){return this.insertFiles([t])}insertFiles(t){let e=[];return Array.from(t).forEach(i=>{var r;if((r=this.delegate)!==null&&r!==void 0&&r.compositionShouldAcceptFile(i)){let o=H.attachmentForFile(i);e.push(o)}}),this.insertAttachments(e)}insertAttachment(t){return this.insertAttachments([t])}insertAttachments(t){let e=new R;return Array.from(t).forEach(i=>{var r;let o=i.getType(),s=(r=je[o])===null||r===void 0?void 0:r.presentation,a=this.getCurrentTextAttributes();s&&(a.presentation=s);let l=R.textForAttachmentWithAttributes(i,a);e=e.appendText(l)}),this.insertText(e)}shouldManageDeletingInDirection(t){let e=this.getLocationRange();if(N(e)){if(t==="backward"&&e[0].offset===0||this.shouldManageMovingCursorInDirection(t))return!0}else if(e[0].index!==e[1].index)return!0;return!1}deleteInDirection(t){let e,i,r,{length:o}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},s=this.getLocationRange(),a=this.getSelectedRange(),l=N(a);if(l?i=t==="backward"&&s[0].offset===0:r=s[0].index!==s[1].index,i&&this.canDecreaseBlockAttributeLevel()){let c=this.getBlock();if(c.isListItem()?this.decreaseListLevel():this.decreaseBlockAttributeLevel(),this.setSelection(a[0]),c.isEmpty())return!1}return l&&(a=this.getExpandedRangeInDirection(t,{length:o}),t==="backward"&&(e=this.getAttachmentAtRange(a))),e?(this.editAttachment(e),!1):(this.setDocument(this.document.removeTextAtRange(a)),this.setSelection(a[0]),!i&&!r&&void 0)}moveTextFromRange(t){let[e]=Array.from(this.getSelectedRange());return this.setDocument(this.document.moveTextFromRangeToPosition(t,e)),this.setSelection(e)}removeAttachment(t){let e=this.document.getRangeOfAttachment(t);if(e)return this.stopEditingAttachment(),this.setDocument(this.document.removeTextAtRange(e)),this.setSelection(e[0])}removeLastBlockAttribute(){let[t,e]=Array.from(this.getSelectedRange()),i=this.document.getBlockAtPosition(e);return this.removeCurrentAttribute(i.getLastAttribute()),this.setSelection(t)}insertPlaceholder(){return this.placeholderPosition=this.getPosition(),this.insertString(" ")}selectPlaceholder(){if(this.placeholderPosition!=null)return this.setSelectedRange([this.placeholderPosition,this.placeholderPosition+1]),this.getSelectedRange()}forgetPlaceholder(){this.placeholderPosition=null}hasCurrentAttribute(t){let e=this.currentAttributes[t];return e!=null&&e!==!1}toggleCurrentAttribute(t){let e=!this.currentAttributes[t];return e?this.setCurrentAttribute(t,e):this.removeCurrentAttribute(t)}canSetCurrentAttribute(t){return v(t)?this.canSetCurrentBlockAttribute(t):this.canSetCurrentTextAttribute(t)}canSetCurrentTextAttribute(t){let e=this.getSelectedDocument();if(e){for(let i of Array.from(e.getAttachments()))if(!i.hasContent())return!1;return!0}}canSetCurrentBlockAttribute(t){let e=this.getBlock();if(e)return!e.isTerminalBlock()}setCurrentAttribute(t,e){return v(t)?this.setBlockAttribute(t,e):(this.setTextAttribute(t,e),this.currentAttributes[t]=e,this.notifyDelegateOfCurrentAttributesChange())}setHTMLAtributeAtPosition(t,e,i){var r;let o=this.document.getBlockAtPosition(t),s=(r=v(o.getLastAttribute()))===null||r===void 0?void 0:r.htmlAttributes;if(o&&s!=null&&s.includes(e)){let a=this.document.setHTMLAttributeAtPosition(t,e,i);this.setDocument(a)}}setTextAttribute(t,e){let i=this.getSelectedRange();if(!i)return;let[r,o]=Array.from(i);if(r!==o)return this.setDocument(this.document.addAttributeAtRange(t,e,i));if(t==="href"){let s=R.textForStringWithAttributes(e,{href:e});return this.insertText(s)}}setBlockAttribute(t,e){let i=this.getSelectedRange();if(this.canSetCurrentAttribute(t))return this.setDocument(this.document.applyBlockAttributeAtRange(t,e,i)),this.setSelection(i)}removeCurrentAttribute(t){return v(t)?(this.removeBlockAttribute(t),this.updateCurrentAttributes()):(this.removeTextAttribute(t),delete this.currentAttributes[t],this.notifyDelegateOfCurrentAttributesChange())}removeTextAttribute(t){let e=this.getSelectedRange();if(e)return this.setDocument(this.document.removeAttributeAtRange(t,e))}removeBlockAttribute(t){let e=this.getSelectedRange();if(e)return this.setDocument(this.document.removeAttributeAtRange(t,e))}canDecreaseNestingLevel(){var t;return((t=this.getBlock())===null||t===void 0?void 0:t.getNestingLevel())>0}canIncreaseNestingLevel(){var t;let e=this.getBlock();if(e){if((t=v(e.getLastNestableAttribute()))===null||t===void 0||!t.listAttribute)return e.getNestingLevel()>0;{let i=this.getPreviousBlock();if(i)return function(){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[];return Q((arguments.length>0&&arguments[0]!==void 0?arguments[0]:[]).slice(0,r.length),r)}(i.getListItemAttributes(),e.getListItemAttributes())}}}decreaseNestingLevel(){let t=this.getBlock();if(t)return this.setDocument(this.document.replaceBlock(t,t.decreaseNestingLevel()))}increaseNestingLevel(){let t=this.getBlock();if(t)return this.setDocument(this.document.replaceBlock(t,t.increaseNestingLevel()))}canDecreaseBlockAttributeLevel(){var t;return((t=this.getBlock())===null||t===void 0?void 0:t.getAttributeLevel())>0}decreaseBlockAttributeLevel(){var t;let e=(t=this.getBlock())===null||t===void 0?void 0:t.getLastAttribute();if(e)return this.removeCurrentAttribute(e)}decreaseListLevel(){let[t]=Array.from(this.getSelectedRange()),{index:e}=this.document.locationFromPosition(t),i=e,r=this.getBlock().getAttributeLevel(),o=this.document.getBlockAtIndex(i+1);for(;o&&o.isListItem()&&!(o.getAttributeLevel()<=r);)i++,o=this.document.getBlockAtIndex(i+1);t=this.document.positionFromLocation({index:e,offset:0});let s=this.document.positionFromLocation({index:i,offset:0});return this.setDocument(this.document.removeLastListAttributeAtRange([t,s]))}updateCurrentAttributes(){let t=this.getSelectedRange({ignoreLock:!0});if(t){let e=this.document.getCommonAttributesAtRange(t);if(Array.from(Le()).forEach(i=>{e[i]||this.canSetCurrentAttribute(i)||(e[i]=!1)}),!dt(e,this.currentAttributes))return this.currentAttributes=e,this.notifyDelegateOfCurrentAttributesChange()}}getCurrentAttributes(){return Ai.call({},this.currentAttributes)}getCurrentTextAttributes(){let t={};for(let e in this.currentAttributes){let i=this.currentAttributes[e];i!==!1&&De(e)&&(t[e]=i)}return t}freezeSelection(){return this.setCurrentAttribute("frozen",!0)}thawSelection(){return this.removeCurrentAttribute("frozen")}hasFrozenSelection(){return this.hasCurrentAttribute("frozen")}setSelection(t){var e;let i=this.document.locationRangeFromRange(t);return(e=this.delegate)===null||e===void 0?void 0:e.compositionDidRequestChangingSelectionToLocationRange(i)}getSelectedRange(){let t=this.getLocationRange();if(t)return this.document.rangeFromLocationRange(t)}setSelectedRange(t){let e=this.document.locationRangeFromRange(t);return this.getSelectionManager().setLocationRange(e)}getPosition(){let t=this.getLocationRange();if(t)return this.document.positionFromLocation(t[0])}getLocationRange(t){return this.targetLocationRange?this.targetLocationRange:this.getSelectionManager().getLocationRange(t)||g({index:0,offset:0})}withTargetLocationRange(t,e){let i;this.targetLocationRange=t;try{i=e()}finally{this.targetLocationRange=null}return i}withTargetRange(t,e){let i=this.document.locationRangeFromRange(t);return this.withTargetLocationRange(i,e)}withTargetDOMRange(t,e){let i=this.createLocationRangeFromDOMRange(t,{strict:!1});return this.withTargetLocationRange(i,e)}getExpandedRangeInDirection(t){let{length:e}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},[i,r]=Array.from(this.getSelectedRange());return t==="backward"?e?i-=e:i=this.translateUTF16PositionFromOffset(i,-1):e?r+=e:r=this.translateUTF16PositionFromOffset(r,1),g([i,r])}shouldManageMovingCursorInDirection(t){if(this.editingAttachment)return!0;let e=this.getExpandedRangeInDirection(t);return this.getAttachmentAtRange(e)!=null}moveCursorInDirection(t){let e,i;if(this.editingAttachment)i=this.document.getRangeOfAttachment(this.editingAttachment);else{let r=this.getSelectedRange();i=this.getExpandedRangeInDirection(t),e=!Pt(r,i)}if(t==="backward"?this.setSelectedRange(i[0]):this.setSelectedRange(i[1]),e){let r=this.getAttachmentAtRange(i);if(r)return this.editAttachment(r)}}expandSelectionInDirection(t){let{length:e}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=this.getExpandedRangeInDirection(t,{length:e});return this.setSelectedRange(i)}expandSelectionForEditing(){if(this.hasCurrentAttribute("href"))return this.expandSelectionAroundCommonAttribute("href")}expandSelectionAroundCommonAttribute(t){let e=this.getPosition(),i=this.document.getRangeOfCommonAttributeAtPosition(t,e);return this.setSelectedRange(i)}selectionContainsAttachments(){var t;return((t=this.getSelectedAttachments())===null||t===void 0?void 0:t.length)>0}selectionIsInCursorTarget(){return this.editingAttachment||this.positionIsCursorTarget(this.getPosition())}positionIsCursorTarget(t){let e=this.document.locationFromPosition(t);if(e)return this.locationIsCursorTarget(e)}positionIsBlockBreak(t){var e;return(e=this.document.getPieceAtPosition(t))===null||e===void 0?void 0:e.isBlockBreak()}getSelectedDocument(){let t=this.getSelectedRange();if(t)return this.document.getDocumentAtRange(t)}getSelectedAttachments(){var t;return(t=this.getSelectedDocument())===null||t===void 0?void 0:t.getAttachments()}getAttachments(){return this.attachments.slice(0)}refreshAttachments(){let t=this.document.getAttachments(),{added:e,removed:i}=function(){let r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[],s=[],a=[],l=new Set;r.forEach(u=>{l.add(u)});let c=new Set;return o.forEach(u=>{c.add(u),l.has(u)||s.push(u)}),r.forEach(u=>{c.has(u)||a.push(u)}),{added:s,removed:a}}(this.attachments,t);return this.attachments=t,Array.from(i).forEach(r=>{var o,s;r.delegate=null,(o=this.delegate)===null||o===void 0||(s=o.compositionDidRemoveAttachment)===null||s===void 0||s.call(o,r)}),(()=>{let r=[];return Array.from(e).forEach(o=>{var s,a;o.delegate=this,r.push((s=this.delegate)===null||s===void 0||(a=s.compositionDidAddAttachment)===null||a===void 0?void 0:a.call(s,o))}),r})()}attachmentDidChangeAttributes(t){var e,i;return this.revision++,(e=this.delegate)===null||e===void 0||(i=e.compositionDidEditAttachment)===null||i===void 0?void 0:i.call(e,t)}attachmentDidChangePreviewURL(t){var e,i;return this.revision++,(e=this.delegate)===null||e===void 0||(i=e.compositionDidChangeAttachmentPreviewURL)===null||i===void 0?void 0:i.call(e,t)}editAttachment(t,e){var i,r;if(t!==this.editingAttachment)return this.stopEditingAttachment(),this.editingAttachment=t,(i=this.delegate)===null||i===void 0||(r=i.compositionDidStartEditingAttachment)===null||r===void 0?void 0:r.call(i,this.editingAttachment,e)}stopEditingAttachment(){var t,e;this.editingAttachment&&((t=this.delegate)===null||t===void 0||(e=t.compositionDidStopEditingAttachment)===null||e===void 0||e.call(t,this.editingAttachment),this.editingAttachment=null)}updateAttributesForAttachment(t,e){return this.setDocument(this.document.updateAttributesForAttachment(t,e))}removeAttributeForAttachment(t,e){return this.setDocument(this.document.removeAttributeForAttachment(t,e))}breakFormattedBlock(t){let{document:e}=t,{block:i}=t,r=t.startPosition,o=[r-1,r];i.getBlockBreakPosition()===t.startLocation.offset?(i.breaksOnReturn()&&t.nextCharacter===` +`?r+=1:e=e.removeTextAtRange(o),o=[r,r]):t.nextCharacter===` +`?t.previousCharacter===` +`?o=[r-1,r+1]:(o=[r,r+1],r+=1):t.startLocation.offset-1!=0&&(r+=1);let s=new k([i.removeLastAttribute().copyWithoutText()]);return this.setDocument(e.insertDocumentAtRange(s,o)),this.setSelection(r)}getPreviousBlock(){let t=this.getLocationRange();if(t){let{index:e}=t[0];if(e>0)return this.document.getBlockAtIndex(e-1)}}getBlock(){let t=this.getLocationRange();if(t)return this.document.getBlockAtIndex(t[0].index)}getAttachmentAtRange(t){let e=this.document.getDocumentAtRange(t);if(e.toString()==="".concat("\uFFFC",` +`))return e.getAttachments()[0]}notifyDelegateOfCurrentAttributesChange(){var t,e;return(t=this.delegate)===null||t===void 0||(e=t.compositionDidChangeCurrentAttributes)===null||e===void 0?void 0:e.call(t,this.currentAttributes)}notifyDelegateOfInsertionAtRange(t){var e,i;return(e=this.delegate)===null||e===void 0||(i=e.compositionDidPerformInsertionAtRange)===null||i===void 0?void 0:i.call(e,t)}translateUTF16PositionFromOffset(t,e){let i=this.document.toUTF16String(),r=i.offsetFromUCS2Offset(t);return i.offsetToUCS2Offset(r+e)}};F.proxyMethod("getSelectionManager().getPointRange"),F.proxyMethod("getSelectionManager().setLocationRangeFromPointRange"),F.proxyMethod("getSelectionManager().createLocationRangeFromDOMRange"),F.proxyMethod("getSelectionManager().locationIsCursorTarget"),F.proxyMethod("getSelectionManager().selectionIsExpanded"),F.proxyMethod("delegate?.getSelectionManager");var Et=class extends f{constructor(t){super(...arguments),this.composition=t,this.undoEntries=[],this.redoEntries=[]}recordUndoEntry(t){let{context:e,consolidatable:i}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=this.undoEntries.slice(-1)[0];if(!i||!Tn(r,t,e)){let o=this.createEntry({description:t,context:e});this.undoEntries.push(o),this.redoEntries=[]}}undo(){let t=this.undoEntries.pop();if(t){let e=this.createEntry(t);return this.redoEntries.push(e),this.composition.loadSnapshot(t.snapshot)}}redo(){let t=this.redoEntries.pop();if(t){let e=this.createEntry(t);return this.undoEntries.push(e),this.composition.loadSnapshot(t.snapshot)}}canUndo(){return this.undoEntries.length>0}canRedo(){return this.redoEntries.length>0}createEntry(){let{description:t,context:e}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return{description:t?.toString(),context:JSON.stringify(e),snapshot:this.composition.getSnapshot()}}},Tn=(n,t,e)=>n?.description===t?.toString()&&n?.context===JSON.stringify(e),be="attachmentGallery",Vt=class{constructor(t){this.document=t.document,this.selectedRange=t.selectedRange}perform(){return this.removeBlockAttribute(),this.applyBlockAttribute()}getSnapshot(){return{document:this.document,selectedRange:this.selectedRange}}removeBlockAttribute(){return this.findRangesOfBlocks().map(t=>this.document=this.document.removeAttributeAtRange(be,t))}applyBlockAttribute(){let t=0;this.findRangesOfPieces().forEach(e=>{e[1]-e[0]>1&&(e[0]+=t,e[1]+=t,this.document.getCharacterAtPosition(e[1])!==` +`&&(this.document=this.document.insertBlockBreakAtRange(e[1]),e[1]0&&arguments[0]!==void 0?arguments[0]:"",e=et.parse(t,{referenceElement:this.element}).getDocument();return this.loadDocument(e)}loadJSON(t){let{document:e,selectedRange:i}=t;return e=k.fromJSON(e),this.loadSnapshot({document:e,selectedRange:i})}loadSnapshot(t){return this.undoManager=new Et(this.composition),this.composition.loadSnapshot(t)}getDocument(){return this.composition.document}getSelectedDocument(){return this.composition.getSelectedDocument()}getSnapshot(){return this.composition.getSnapshot()}toJSON(){return this.getSnapshot()}deleteInDirection(t){return this.composition.deleteInDirection(t)}insertAttachment(t){return this.composition.insertAttachment(t)}insertAttachments(t){return this.composition.insertAttachments(t)}insertDocument(t){return this.composition.insertDocument(t)}insertFile(t){return this.composition.insertFile(t)}insertFiles(t){return this.composition.insertFiles(t)}insertHTML(t){return this.composition.insertHTML(t)}insertString(t){return this.composition.insertString(t)}insertText(t){return this.composition.insertText(t)}insertLineBreak(){return this.composition.insertLineBreak()}getSelectedRange(){return this.composition.getSelectedRange()}getPosition(){return this.composition.getPosition()}getClientRectAtPosition(t){let e=this.getDocument().locationRangeFromRange([t,t+1]);return this.selectionManager.getClientRectAtLocationRange(e)}expandSelectionInDirection(t){return this.composition.expandSelectionInDirection(t)}moveCursorInDirection(t){return this.composition.moveCursorInDirection(t)}setSelectedRange(t){return this.composition.setSelectedRange(t)}activateAttribute(t){let e=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1];return this.composition.setCurrentAttribute(t,e)}attributeIsActive(t){return this.composition.hasCurrentAttribute(t)}canActivateAttribute(t){return this.composition.canSetCurrentAttribute(t)}deactivateAttribute(t){return this.composition.removeCurrentAttribute(t)}setHTMLAtributeAtPosition(t,e,i){this.composition.setHTMLAtributeAtPosition(t,e,i)}canDecreaseNestingLevel(){return this.composition.canDecreaseNestingLevel()}canIncreaseNestingLevel(){return this.composition.canIncreaseNestingLevel()}decreaseNestingLevel(){if(this.canDecreaseNestingLevel())return this.composition.decreaseNestingLevel()}increaseNestingLevel(){if(this.canIncreaseNestingLevel())return this.composition.increaseNestingLevel()}canRedo(){return this.undoManager.canRedo()}canUndo(){return this.undoManager.canUndo()}recordUndoEntry(t){let{context:e,consolidatable:i}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return this.undoManager.recordUndoEntry(t,{context:e,consolidatable:i})}redo(){if(this.canRedo())return this.undoManager.redo()}undo(){if(this.canUndo())return this.undoManager.undo()}},zt=class{constructor(t){this.element=t}findLocationFromContainerAndOffset(t,e){let{strict:i}=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{strict:!0},r=0,o=!1,s={index:0,offset:0},a=this.findAttachmentElementParentForNode(t);a&&(t=a.parentNode,e=ae(a));let l=Ft(this.element,{usingFilter:Fi});for(;l.nextNode();){let c=l.currentNode;if(c===t&&xt(t)){st(c)||(s.offset+=e);break}if(c.parentNode===t){if(r++===e)break}else if(!J(t,c)&&r>0)break;$e(c,{strict:i})?(o&&s.index++,s.offset=0,o=!0):s.offset+=ve(c)}return s}findContainerAndOffsetFromLocation(t){let e,i;if(t.index===0&&t.offset===0){for(e=this.element,i=0;e.firstChild;)if(e=e.firstChild,le(e)){i=1;break}return[e,i]}let[r,o]=this.findNodeAndOffsetFromLocation(t);if(r){if(xt(r))ve(r)===0?(e=r.parentNode.parentNode,i=ae(r.parentNode),st(r,{name:"right"})&&i++):(e=r,i=t.offset-o);else{if(e=r.parentNode,!$e(r.previousSibling)&&!le(e))for(;r===e.lastChild&&(r=e,e=e.parentNode,!le(e)););i=ae(r),t.offset!==0&&i++}return[e,i]}}findNodeAndOffsetFromLocation(t){let e,i,r=0;for(let o of this.getSignificantNodesForIndex(t.index)){let s=ve(o);if(t.offset<=r+s)if(xt(o)){if(e=o,i=r,t.offset===i&&st(e))break}else e||(e=o,i=r);if(r+=s,r>t.offset)break}return[e,i]}findAttachmentElementParentForNode(t){for(;t&&t!==this.element;){if($(t))return t;t=t.parentNode}}getSignificantNodesForIndex(t){let e=[],i=Ft(this.element,{usingFilter:Fn}),r=!1;for(;i.nextNode();){let s=i.currentNode;var o;if(ot(s)){if(o!=null?o++:o=0,o===t)r=!0;else if(r)break}else r&&e.push(s)}return e}},ve=function(n){return n.nodeType===Node.TEXT_NODE?st(n)?0:n.textContent.length:x(n)==="br"||$(n)?1:0},Fn=function(n){return Pn(n)===NodeFilter.FILTER_ACCEPT?Fi(n):NodeFilter.FILTER_REJECT},Pn=function(n){return yi(n)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},Fi=function(n){return $(n.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},_t=class{createDOMRangeFromPoint(t){let e,{x:i,y:r}=t;if(document.caretPositionFromPoint){let{offsetNode:o,offset:s}=document.caretPositionFromPoint(i,r);return e=document.createRange(),e.setStart(o,s),e}if(document.caretRangeFromPoint)return document.caretRangeFromPoint(i,r);if(document.body.createTextRange){let o=yt();try{let s=document.body.createTextRange();s.moveToPoint(i,r),s.select()}catch{}return e=yt(),Di(o),e}}getClientRectsForDOMRange(t){let e=Array.from(t.getClientRects());return[e[0],e[e.length-1]]}},I=class extends f{constructor(t){super(...arguments),this.didMouseDown=this.didMouseDown.bind(this),this.selectionDidChange=this.selectionDidChange.bind(this),this.element=t,this.locationMapper=new zt(this.element),this.pointMapper=new _t,this.lockCount=0,p("mousedown",{onElement:this.element,withCallback:this.didMouseDown})}getLocationRange(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return t.strict===!1?this.createLocationRangeFromDOMRange(yt()):t.ignoreLock?this.currentLocationRange:this.lockedLocationRange?this.lockedLocationRange:this.currentLocationRange}setLocationRange(t){if(this.lockedLocationRange)return;t=g(t);let e=this.createDOMRangeFromLocationRange(t);e&&(Di(e),this.updateCurrentLocationRange(t))}setLocationRangeFromPointRange(t){t=g(t);let e=this.getLocationAtPoint(t[0]),i=this.getLocationAtPoint(t[1]);this.setLocationRange([e,i])}getClientRectAtLocationRange(t){let e=this.createDOMRangeFromLocationRange(t);if(e)return this.getClientRectsForDOMRange(e)[1]}locationIsCursorTarget(t){let e=Array.from(this.findNodeAndOffsetFromLocation(t))[0];return st(e)}lock(){this.lockCount++==0&&(this.updateCurrentLocationRange(),this.lockedLocationRange=this.getLocationRange())}unlock(){if(--this.lockCount==0){let{lockedLocationRange:t}=this;if(this.lockedLocationRange=null,t!=null)return this.setLocationRange(t)}}clearSelection(){var t;return(t=Li())===null||t===void 0?void 0:t.removeAllRanges()}selectionIsCollapsed(){var t;return((t=yt())===null||t===void 0?void 0:t.collapsed)===!0}selectionIsExpanded(){return!this.selectionIsCollapsed()}createLocationRangeFromDOMRange(t,e){if(t==null||!this.domRangeWithinElement(t))return;let i=this.findLocationFromContainerAndOffset(t.startContainer,t.startOffset,e);if(!i)return;let r=t.collapsed?void 0:this.findLocationFromContainerAndOffset(t.endContainer,t.endOffset,e);return g([i,r])}didMouseDown(){return this.pauseTemporarily()}pauseTemporarily(){let t;this.paused=!0;let e=()=>{if(this.paused=!1,clearTimeout(i),Array.from(t).forEach(r=>{r.destroy()}),J(document,this.element))return this.selectionDidChange()},i=setTimeout(e,200);t=["mousemove","keydown"].map(r=>p(r,{onElement:document,withCallback:e}))}selectionDidChange(){if(!this.paused&&!Ue(this.element))return this.updateCurrentLocationRange()}updateCurrentLocationRange(t){var e,i;if((t??(t=this.createLocationRangeFromDOMRange(yt())))&&!Pt(t,this.currentLocationRange))return this.currentLocationRange=t,(e=this.delegate)===null||e===void 0||(i=e.locationRangeDidChange)===null||i===void 0?void 0:i.call(e,this.currentLocationRange.slice(0))}createDOMRangeFromLocationRange(t){let e=this.findContainerAndOffsetFromLocation(t[0]),i=N(t)?e:this.findContainerAndOffsetFromLocation(t[1])||e;if(e!=null&&i!=null){let r=document.createRange();return r.setStart(...Array.from(e||[])),r.setEnd(...Array.from(i||[])),r}}getLocationAtPoint(t){let e=this.createDOMRangeFromPoint(t);var i;if(e)return(i=this.createLocationRangeFromDOMRange(e))===null||i===void 0?void 0:i[0]}domRangeWithinElement(t){return t.collapsed?J(this.element,t.startContainer):J(this.element,t.startContainer)&&J(this.element,t.endContainer)}};I.proxyMethod("locationMapper.findLocationFromContainerAndOffset"),I.proxyMethod("locationMapper.findContainerAndOffsetFromLocation"),I.proxyMethod("locationMapper.findNodeAndOffsetFromLocation"),I.proxyMethod("pointMapper.createDOMRangeFromPoint"),I.proxyMethod("pointMapper.getClientRectsForDOMRange");var Pi=Object.freeze({__proto__:null,Attachment:H,AttachmentManager:Ut,AttachmentPiece:z,Block:S,Composition:F,Document:k,Editor:Ht,HTMLParser:et,HTMLSanitizer:lt,LineBreakInsertion:qt,LocationMapper:zt,ManagedAttachment:m,Piece:j,PointMapper:_t,SelectionManager:I,SplittableList:ut,StringPiece:Rt,Text:R,UndoManager:Et}),In=Object.freeze({__proto__:null,ObjectView:M,AttachmentView:kt,BlockView:jt,DocumentView:ct,PieceView:Ot,PreviewableAttachmentView:Nt,TextView:Mt}),{lang:Ae,css:_,keyNames:Nn}=Lt,xe=function(n){return function(){let t=n.apply(this,arguments);t.do(),this.undos||(this.undos=[]),this.undos.push(t.undo)}},Jt=class extends f{constructor(t,e,i){let r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};super(...arguments),E(this,"makeElementMutable",xe(()=>({do:()=>{this.element.dataset.trixMutable=!0},undo:()=>delete this.element.dataset.trixMutable}))),E(this,"addToolbar",xe(()=>{let o=d({tagName:"div",className:_.attachmentToolbar,data:{trixMutable:!0},childNodes:d({tagName:"div",className:"trix-button-row",childNodes:d({tagName:"span",className:"trix-button-group trix-button-group--actions",childNodes:d({tagName:"button",className:"trix-button trix-button--remove",textContent:Ae.remove,attributes:{title:Ae.remove},data:{trixAction:"remove"}})})})});return this.attachment.isPreviewable()&&o.appendChild(d({tagName:"div",className:_.attachmentMetadataContainer,childNodes:d({tagName:"span",className:_.attachmentMetadata,childNodes:[d({tagName:"span",className:_.attachmentName,textContent:this.attachment.getFilename(),attributes:{title:this.attachment.getFilename()}}),d({tagName:"span",className:_.attachmentSize,textContent:this.attachment.getFormattedFilesize()})]})})),p("click",{onElement:o,withCallback:this.didClickToolbar}),p("click",{onElement:o,matchingSelector:"[data-trix-action]",withCallback:this.didClickActionButton}),vt("trix-attachment-before-toolbar",{onElement:this.element,attributes:{toolbar:o,attachment:this.attachment}}),{do:()=>this.element.appendChild(o),undo:()=>V(o)}})),E(this,"installCaptionEditor",xe(()=>{let o=d({tagName:"textarea",className:_.attachmentCaptionEditor,attributes:{placeholder:Ae.captionPlaceholder},data:{trixMutable:!0}});o.value=this.attachmentPiece.getCaption();let s=o.cloneNode();s.classList.add("trix-autoresize-clone"),s.tabIndex=-1;let a=function(){s.value=o.value,o.style.height=s.scrollHeight+"px"};p("input",{onElement:o,withCallback:a}),p("input",{onElement:o,withCallback:this.didInputCaption}),p("keydown",{onElement:o,withCallback:this.didKeyDownCaption}),p("change",{onElement:o,withCallback:this.didChangeCaption}),p("blur",{onElement:o,withCallback:this.didBlurCaption});let l=this.element.querySelector("figcaption"),c=l.cloneNode();return{do:()=>{if(l.style.display="none",c.appendChild(o),c.appendChild(s),c.classList.add("".concat(_.attachmentCaption,"--editing")),l.parentElement.insertBefore(c,l),a(),this.options.editCaption)return He(()=>o.focus())},undo(){V(c),l.style.display=null}}})),this.didClickToolbar=this.didClickToolbar.bind(this),this.didClickActionButton=this.didClickActionButton.bind(this),this.didKeyDownCaption=this.didKeyDownCaption.bind(this),this.didInputCaption=this.didInputCaption.bind(this),this.didChangeCaption=this.didChangeCaption.bind(this),this.didBlurCaption=this.didBlurCaption.bind(this),this.attachmentPiece=t,this.element=e,this.container=i,this.options=r,this.attachment=this.attachmentPiece.attachment,x(this.element)==="a"&&(this.element=this.element.firstChild),this.install()}install(){this.makeElementMutable(),this.addToolbar(),this.attachment.isPreviewable()&&this.installCaptionEditor()}uninstall(){var t;let e=this.undos.pop();for(this.savePendingCaption();e;)e(),e=this.undos.pop();(t=this.delegate)===null||t===void 0||t.didUninstallAttachmentEditor(this)}savePendingCaption(){if(this.pendingCaption!=null){let o=this.pendingCaption;var t,e,i,r;this.pendingCaption=null,o?(t=this.delegate)===null||t===void 0||(e=t.attachmentEditorDidRequestUpdatingAttributesForAttachment)===null||e===void 0||e.call(t,{caption:o},this.attachment):(i=this.delegate)===null||i===void 0||(r=i.attachmentEditorDidRequestRemovingAttributeForAttachment)===null||r===void 0||r.call(i,"caption",this.attachment)}}didClickToolbar(t){return t.preventDefault(),t.stopPropagation()}didClickActionButton(t){var e;if(t.target.getAttribute("data-trix-action")==="remove")return(e=this.delegate)===null||e===void 0?void 0:e.attachmentEditorDidRequestRemovalOfAttachment(this.attachment)}didKeyDownCaption(t){var e,i;if(Nn[t.keyCode]==="return")return t.preventDefault(),this.savePendingCaption(),(e=this.delegate)===null||e===void 0||(i=e.attachmentEditorDidRequestDeselectingAttachment)===null||i===void 0?void 0:i.call(e,this.attachment)}didInputCaption(t){this.pendingCaption=t.target.value.replace(/\s/g," ").trim()}didChangeCaption(t){return this.savePendingCaption()}didBlurCaption(t){return this.savePendingCaption()}},Kt=class extends f{constructor(t,e){super(...arguments),this.didFocus=this.didFocus.bind(this),this.didBlur=this.didBlur.bind(this),this.didClickAttachment=this.didClickAttachment.bind(this),this.element=t,this.composition=e,this.documentView=new ct(this.composition.document,{element:this.element}),p("focus",{onElement:this.element,withCallback:this.didFocus}),p("blur",{onElement:this.element,withCallback:this.didBlur}),p("click",{onElement:this.element,matchingSelector:"a[contenteditable=false]",preventDefault:!0}),p("mousedown",{onElement:this.element,matchingSelector:K,withCallback:this.didClickAttachment}),p("click",{onElement:this.element,matchingSelector:"a".concat(K),preventDefault:!0})}didFocus(t){var e;let i=()=>{var r,o;if(!this.focused)return this.focused=!0,(r=this.delegate)===null||r===void 0||(o=r.compositionControllerDidFocus)===null||o===void 0?void 0:o.call(r)};return((e=this.blurPromise)===null||e===void 0?void 0:e.then(i))||i()}didBlur(t){this.blurPromise=new Promise(e=>He(()=>{var i,r;return Ue(this.element)||(this.focused=null,(i=this.delegate)===null||i===void 0||(r=i.compositionControllerDidBlur)===null||r===void 0||r.call(i)),this.blurPromise=null,e()}))}didClickAttachment(t,e){var i,r;let o=this.findAttachmentForElement(e),s=!!q(t.target,{matchingSelector:"figcaption"});return(i=this.delegate)===null||i===void 0||(r=i.compositionControllerDidSelectAttachment)===null||r===void 0?void 0:r.call(i,o,{editCaption:s})}getSerializableElement(){return this.isEditingAttachment()?this.documentView.shadowElement:this.element}render(){var t,e,i,r,o,s;return this.revision!==this.composition.revision&&(this.documentView.setDocument(this.composition.document),this.documentView.render(),this.revision=this.composition.revision),this.canSyncDocumentView()&&!this.documentView.isSynced()&&((i=this.delegate)===null||i===void 0||(r=i.compositionControllerWillSyncDocumentView)===null||r===void 0||r.call(i),this.documentView.sync(),(o=this.delegate)===null||o===void 0||(s=o.compositionControllerDidSyncDocumentView)===null||s===void 0||s.call(o)),(t=this.delegate)===null||t===void 0||(e=t.compositionControllerDidRender)===null||e===void 0?void 0:e.call(t)}rerenderViewForObject(t){return this.invalidateViewForObject(t),this.render()}invalidateViewForObject(t){return this.documentView.invalidateViewForObject(t)}isViewCachingEnabled(){return this.documentView.isViewCachingEnabled()}enableViewCaching(){return this.documentView.enableViewCaching()}disableViewCaching(){return this.documentView.disableViewCaching()}refreshViewCache(){return this.documentView.garbageCollectCachedViews()}isEditingAttachment(){return!!this.attachmentEditor}installAttachmentEditorForAttachment(t,e){var i;if(((i=this.attachmentEditor)===null||i===void 0?void 0:i.attachment)===t)return;let r=this.documentView.findElementForObject(t);if(!r)return;this.uninstallAttachmentEditor();let o=this.composition.document.getAttachmentPieceForAttachment(t);this.attachmentEditor=new Jt(o,r,this.element,e),this.attachmentEditor.delegate=this}uninstallAttachmentEditor(){var t;return(t=this.attachmentEditor)===null||t===void 0?void 0:t.uninstall()}didUninstallAttachmentEditor(){return this.attachmentEditor=null,this.render()}attachmentEditorDidRequestUpdatingAttributesForAttachment(t,e){var i,r;return(i=this.delegate)===null||i===void 0||(r=i.compositionControllerWillUpdateAttachment)===null||r===void 0||r.call(i,e),this.composition.updateAttributesForAttachment(t,e)}attachmentEditorDidRequestRemovingAttributeForAttachment(t,e){var i,r;return(i=this.delegate)===null||i===void 0||(r=i.compositionControllerWillUpdateAttachment)===null||r===void 0||r.call(i,e),this.composition.removeAttributeForAttachment(t,e)}attachmentEditorDidRequestRemovalOfAttachment(t){var e,i;return(e=this.delegate)===null||e===void 0||(i=e.compositionControllerDidRequestRemovalOfAttachment)===null||i===void 0?void 0:i.call(e,t)}attachmentEditorDidRequestDeselectingAttachment(t){var e,i;return(e=this.delegate)===null||e===void 0||(i=e.compositionControllerDidRequestDeselectingAttachment)===null||i===void 0?void 0:i.call(e,t)}canSyncDocumentView(){return!this.isEditingAttachment()}findAttachmentForElement(t){return this.composition.document.getAttachmentById(parseInt(t.dataset.trixId,10))}},$t=class extends f{},Ii="data-trix-mutable",On="[".concat(Ii,"]"),Mn={attributes:!0,childList:!0,characterData:!0,characterDataOldValue:!0,subtree:!0},Gt=class extends f{constructor(t){super(t),this.didMutate=this.didMutate.bind(this),this.element=t,this.observer=new window.MutationObserver(this.didMutate),this.start()}start(){return this.reset(),this.observer.observe(this.element,Mn)}stop(){return this.observer.disconnect()}didMutate(t){var e,i;if(this.mutations.push(...Array.from(this.findSignificantMutations(t)||[])),this.mutations.length)return(e=this.delegate)===null||e===void 0||(i=e.elementDidMutate)===null||i===void 0||i.call(e,this.getMutationSummary()),this.reset()}reset(){this.mutations=[]}findSignificantMutations(t){return t.filter(e=>this.mutationIsSignificant(e))}mutationIsSignificant(t){if(this.nodeIsMutable(t.target))return!1;for(let e of Array.from(this.nodesModifiedByMutation(t)))if(this.nodeIsSignificant(e))return!0;return!1}nodeIsSignificant(t){return t!==this.element&&!this.nodeIsMutable(t)&&!yi(t)}nodeIsMutable(t){return q(t,{matchingSelector:On})}nodesModifiedByMutation(t){let e=[];switch(t.type){case"attributes":t.attributeName!==Ii&&e.push(t.target);break;case"characterData":e.push(t.target.parentNode),e.push(t.target);break;case"childList":e.push(...Array.from(t.addedNodes||[])),e.push(...Array.from(t.removedNodes||[]))}return e}getMutationSummary(){return this.getTextMutationSummary()}getTextMutationSummary(){let{additions:t,deletions:e}=this.getTextChangesFromCharacterData(),i=this.getTextChangesFromChildList();Array.from(i.additions).forEach(a=>{Array.from(t).includes(a)||t.push(a)}),e.push(...Array.from(i.deletions||[]));let r={},o=t.join("");o&&(r.textAdded=o);let s=e.join("");return s&&(r.textDeleted=s),r}getMutationsByType(t){return Array.from(this.mutations).filter(e=>e.type===t)}getTextChangesFromChildList(){let t,e,i=[],r=[];return Array.from(this.getMutationsByType("childList")).forEach(o=>{i.push(...Array.from(o.addedNodes||[])),r.push(...Array.from(o.removedNodes||[]))}),i.length===0&&r.length===1&&ot(r[0])?(t=[],e=[` +`]):(t=Ie(i),e=Ie(r)),{additions:t.filter((o,s)=>o!==e[s]).map(bt),deletions:e.filter((o,s)=>o!==t[s]).map(bt)}}getTextChangesFromCharacterData(){let t,e,i=this.getMutationsByType("characterData");if(i.length){let r=i[0],o=i[i.length-1],s=function(a,l){let c,u;return a=Z.box(a),(l=Z.box(l)).length0&&arguments[0]!==void 0?arguments[0]:[],t=[];for(let e of Array.from(n))switch(e.nodeType){case Node.TEXT_NODE:t.push(e.data);break;case Node.ELEMENT_NODE:x(e)==="br"?t.push(` +`):t.push(...Array.from(Ie(e.childNodes)||[]))}return t},Xt=class extends at{constructor(t){super(...arguments),this.file=t}perform(t){let e=new FileReader;return e.onerror=()=>t(!1),e.onload=()=>{e.onerror=null;try{e.abort()}catch{}return t(!0,this.file)},e.readAsArrayBuffer(this.file)}},Ne=class{constructor(t){this.element=t}shouldIgnore(t){return!!St.samsungAndroid&&(this.previousEvent=this.event,this.event=t,this.checkSamsungKeyboardBuggyModeStart(),this.checkSamsungKeyboardBuggyModeEnd(),this.buggyMode)}checkSamsungKeyboardBuggyModeStart(){this.insertingLongTextAfterUnidentifiedChar()&&jn(this.element.innerText,this.event.data)&&(this.buggyMode=!0,this.event.preventDefault())}checkSamsungKeyboardBuggyModeEnd(){this.buggyMode&&this.event.inputType!=="insertText"&&(this.buggyMode=!1)}insertingLongTextAfterUnidentifiedChar(){var t;return this.isBeforeInputInsertText()&&this.previousEventWasUnidentifiedKeydown()&&((t=this.event.data)===null||t===void 0?void 0:t.length)>50}isBeforeInputInsertText(){return this.event.type==="beforeinput"&&this.event.inputType==="insertText"}previousEventWasUnidentifiedKeydown(){var t,e;return((t=this.previousEvent)===null||t===void 0?void 0:t.type)==="keydown"&&((e=this.previousEvent)===null||e===void 0?void 0:e.key)==="Unidentified"}},jn=(n,t)=>gi(n)===gi(t),Wn=new RegExp("(".concat("\uFFFC","|").concat(te,"|").concat(U,"|\\s)+"),"g"),gi=n=>n.replace(Wn," ").trim(),ht=class extends f{constructor(t){super(...arguments),this.element=t,this.mutationObserver=new Gt(this.element),this.mutationObserver.delegate=this,this.flakyKeyboardDetector=new Ne(this.element);for(let e in this.constructor.events)p(e,{onElement:this.element,withCallback:this.handlerFor(e)})}elementDidMutate(t){}editorWillSyncDocumentView(){return this.mutationObserver.stop()}editorDidSyncDocumentView(){return this.mutationObserver.start()}requestRender(){var t,e;return(t=this.delegate)===null||t===void 0||(e=t.inputControllerDidRequestRender)===null||e===void 0?void 0:e.call(t)}requestReparse(){var t,e;return(t=this.delegate)===null||t===void 0||(e=t.inputControllerDidRequestReparse)===null||e===void 0||e.call(t),this.requestRender()}attachFiles(t){let e=Array.from(t).map(i=>new Xt(i));return Promise.all(e).then(i=>{this.handleInput(function(){var r,o;return(r=this.delegate)===null||r===void 0||r.inputControllerWillAttachFiles(),(o=this.responder)===null||o===void 0||o.insertFiles(i),this.requestRender()})})}handlerFor(t){return e=>{e.defaultPrevented||this.handleInput(()=>{if(!Ue(this.element)){if(this.flakyKeyboardDetector.shouldIgnore(e))return;this.eventName=t,this.constructor.events[t].call(this,e)}})}}handleInput(t){try{var e;(e=this.delegate)===null||e===void 0||e.inputControllerWillHandleInput(),t.call(this)}finally{var i;(i=this.delegate)===null||i===void 0||i.inputControllerDidHandleInput()}}createLinkHTML(t,e){let i=document.createElement("a");return i.href=t,i.textContent=e||t,i.outerHTML}},ye;E(ht,"events",{});var{browser:Un,keyNames:Ni}=Lt,qn=0,w=class extends ht{constructor(){super(...arguments),this.resetInputSummary()}setInputSummary(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.inputSummary.eventName=this.eventName;for(let e in t){let i=t[e];this.inputSummary[e]=i}return this.inputSummary}resetInputSummary(){this.inputSummary={}}reset(){return this.resetInputSummary(),tt.reset()}elementDidMutate(t){var e,i;return this.isComposing()?(e=this.delegate)===null||e===void 0||(i=e.inputControllerDidAllowUnhandledInput)===null||i===void 0?void 0:i.call(e):this.handleInput(function(){return this.mutationIsSignificant(t)&&(this.mutationIsExpected(t)?this.requestRender():this.requestReparse()),this.reset()})}mutationIsExpected(t){let{textAdded:e,textDeleted:i}=t;if(this.inputSummary.preferDocument)return!0;let r=e!=null?e===this.inputSummary.textAdded:!this.inputSummary.textAdded,o=i!=null?this.inputSummary.didDelete:!this.inputSummary.didDelete,s=[` +`,` +`].includes(e)&&!r,a=i===` +`&&!o;if(s&&!a||a&&!s){let c=this.getSelectedRange();if(c){var l;let u=s?e.replace(/\n$/,"").length||-1:e?.length||1;if((l=this.responder)!==null&&l!==void 0&&l.positionIsBlockBreak(c[1]+u))return!0}}return r&&o}mutationIsSignificant(t){var e;let i=Object.keys(t).length>0,r=((e=this.compositionInput)===null||e===void 0?void 0:e.getEndData())==="";return i||!r}getCompositionInput(){if(this.isComposing())return this.compositionInput;this.compositionInput=new B(this)}isComposing(){return this.compositionInput&&!this.compositionInput.isEnded()}deleteInDirection(t,e){var i;return((i=this.responder)===null||i===void 0?void 0:i.deleteInDirection(t))!==!1?this.setInputSummary({didDelete:!0}):e?(e.preventDefault(),this.requestRender()):void 0}serializeSelectionToDataTransfer(t){var e;if(!function(r){if(r==null||!r.setData)return!1;for(let o in Ye){let s=Ye[o];try{if(r.setData(o,s),!r.getData(o)===s)return!1}catch{return!1}}return!0}(t))return;let i=(e=this.responder)===null||e===void 0?void 0:e.getSelectedDocument().toSerializableDocument();return t.setData("application/x-trix-document",JSON.stringify(i)),t.setData("text/html",ct.render(i).innerHTML),t.setData("text/plain",i.toString().replace(/\n$/,"")),!0}canAcceptDataTransfer(t){let e={};return Array.from(t?.types||[]).forEach(i=>{e[i]=!0}),e.Files||e["application/x-trix-document"]||e["text/html"]||e["text/plain"]}getPastedHTMLUsingHiddenElement(t){let e=this.getSelectedRange(),i={position:"absolute",left:"".concat(window.pageXOffset,"px"),top:"".concat(window.pageYOffset,"px"),opacity:0},r=d({style:i,tagName:"div",editable:!0});return document.body.appendChild(r),r.focus(),requestAnimationFrame(()=>{let o=r.innerHTML;return V(r),this.setSelectedRange(e),t(o)})}};E(w,"events",{keydown(n){this.isComposing()||this.resetInputSummary(),this.inputSummary.didInput=!0;let t=Ni[n.keyCode];if(t){var e;let r=this.keys;["ctrl","alt","shift","meta"].forEach(o=>{var s;n["".concat(o,"Key")]&&(o==="ctrl"&&(o="control"),r=(s=r)===null||s===void 0?void 0:s[o])}),((e=r)===null||e===void 0?void 0:e[t])!=null&&(this.setInputSummary({keyName:t}),tt.reset(),r[t].call(this,n))}if(Ei(n)){let r=String.fromCharCode(n.keyCode).toLowerCase();if(r){var i;let o=["alt","shift"].map(s=>{if(n["".concat(s,"Key")])return s}).filter(s=>s);o.push(r),(i=this.delegate)!==null&&i!==void 0&&i.inputControllerDidReceiveKeyboardCommand(o)&&n.preventDefault()}}},keypress(n){if(this.inputSummary.eventName!=null||n.metaKey||n.ctrlKey&&!n.altKey)return;let t=zn(n);var e,i;return t?((e=this.delegate)===null||e===void 0||e.inputControllerWillPerformTyping(),(i=this.responder)===null||i===void 0||i.insertString(t),this.setInputSummary({textAdded:t,didDelete:this.selectionIsExpanded()})):void 0},textInput(n){let{data:t}=n,{textAdded:e}=this.inputSummary;if(e&&e!==t&&e.toUpperCase()===t){var i;let r=this.getSelectedRange();return this.setSelectedRange([r[0],r[1]+e.length]),(i=this.responder)===null||i===void 0||i.insertString(t),this.setInputSummary({textAdded:t}),this.setSelectedRange(r)}},dragenter(n){n.preventDefault()},dragstart(n){var t,e;return this.serializeSelectionToDataTransfer(n.dataTransfer),this.draggedRange=this.getSelectedRange(),(t=this.delegate)===null||t===void 0||(e=t.inputControllerDidStartDrag)===null||e===void 0?void 0:e.call(t)},dragover(n){if(this.draggedRange||this.canAcceptDataTransfer(n.dataTransfer)){n.preventDefault();let i={x:n.clientX,y:n.clientY};var t,e;if(!dt(i,this.draggingPoint))return this.draggingPoint=i,(t=this.delegate)===null||t===void 0||(e=t.inputControllerDidReceiveDragOverPoint)===null||e===void 0?void 0:e.call(t,this.draggingPoint)}},dragend(n){var t,e;(t=this.delegate)===null||t===void 0||(e=t.inputControllerDidCancelDrag)===null||e===void 0||e.call(t),this.draggedRange=null,this.draggingPoint=null},drop(n){var t,e;n.preventDefault();let i=(t=n.dataTransfer)===null||t===void 0?void 0:t.files,r=n.dataTransfer.getData("application/x-trix-document"),o={x:n.clientX,y:n.clientY};if((e=this.responder)===null||e===void 0||e.setLocationRangeFromPointRange(o),i!=null&&i.length)this.attachFiles(i);else if(this.draggedRange){var s,a;(s=this.delegate)===null||s===void 0||s.inputControllerWillMoveText(),(a=this.responder)===null||a===void 0||a.moveTextFromRange(this.draggedRange),this.draggedRange=null,this.requestRender()}else if(r){var l;let c=k.fromJSONString(r);(l=this.responder)===null||l===void 0||l.insertDocument(c),this.requestRender()}this.draggedRange=null,this.draggingPoint=null},cut(n){var t,e;if((t=this.responder)!==null&&t!==void 0&&t.selectionIsExpanded()&&(this.serializeSelectionToDataTransfer(n.clipboardData)&&n.preventDefault(),(e=this.delegate)===null||e===void 0||e.inputControllerWillCutText(),this.deleteInDirection("backward"),n.defaultPrevented))return this.requestRender()},copy(n){var t;(t=this.responder)!==null&&t!==void 0&&t.selectionIsExpanded()&&this.serializeSelectionToDataTransfer(n.clipboardData)&&n.preventDefault()},paste(n){let t=n.clipboardData||n.testClipboardData,e={clipboard:t};if(!t||_n(n))return void this.getPastedHTMLUsingHiddenElement(D=>{var nt,re,oe;return e.type="text/html",e.html=D,(nt=this.delegate)===null||nt===void 0||nt.inputControllerWillPaste(e),(re=this.responder)===null||re===void 0||re.insertHTML(e.html),this.requestRender(),(oe=this.delegate)===null||oe===void 0?void 0:oe.inputControllerDidPaste(e)});let i=t.getData("URL"),r=t.getData("text/html"),o=t.getData("public.url-name");if(i){var s,a,l;let D;e.type="text/html",D=o?_e(o).trim():i,e.html=this.createLinkHTML(i,D),(s=this.delegate)===null||s===void 0||s.inputControllerWillPaste(e),this.setInputSummary({textAdded:D,didDelete:this.selectionIsExpanded()}),(a=this.responder)===null||a===void 0||a.insertHTML(e.html),this.requestRender(),(l=this.delegate)===null||l===void 0||l.inputControllerDidPaste(e)}else if(Ri(t)){var c,u,b;e.type="text/plain",e.string=t.getData("text/plain"),(c=this.delegate)===null||c===void 0||c.inputControllerWillPaste(e),this.setInputSummary({textAdded:e.string,didDelete:this.selectionIsExpanded()}),(u=this.responder)===null||u===void 0||u.insertString(e.string),this.requestRender(),(b=this.delegate)===null||b===void 0||b.inputControllerDidPaste(e)}else if(r){var A,L,gt;e.type="text/html",e.html=r,(A=this.delegate)===null||A===void 0||A.inputControllerWillPaste(e),(L=this.responder)===null||L===void 0||L.insertHTML(e.html),this.requestRender(),(gt=this.delegate)===null||gt===void 0||gt.inputControllerDidPaste(e)}else if(Array.from(t.types).includes("Files")){var P,it;let D=(P=t.items)===null||P===void 0||(P=P[0])===null||P===void 0||(it=P.getAsFile)===null||it===void 0?void 0:it.call(P);if(D){var mt,ie,ne;let nt=Vn(D);!D.name&&nt&&(D.name="pasted-file-".concat(++qn,".").concat(nt)),e.type="File",e.file=D,(mt=this.delegate)===null||mt===void 0||mt.inputControllerWillAttachFiles(),(ie=this.responder)===null||ie===void 0||ie.insertFile(e.file),this.requestRender(),(ne=this.delegate)===null||ne===void 0||ne.inputControllerDidPaste(e)}}n.preventDefault()},compositionstart(n){return this.getCompositionInput().start(n.data)},compositionupdate(n){return this.getCompositionInput().update(n.data)},compositionend(n){return this.getCompositionInput().end(n.data)},beforeinput(n){this.inputSummary.didInput=!0},input(n){return this.inputSummary.didInput=!0,n.stopPropagation()}}),E(w,"keys",{backspace(n){var t;return(t=this.delegate)===null||t===void 0||t.inputControllerWillPerformTyping(),this.deleteInDirection("backward",n)},delete(n){var t;return(t=this.delegate)===null||t===void 0||t.inputControllerWillPerformTyping(),this.deleteInDirection("forward",n)},return(n){var t,e;return this.setInputSummary({preferDocument:!0}),(t=this.delegate)===null||t===void 0||t.inputControllerWillPerformTyping(),(e=this.responder)===null||e===void 0?void 0:e.insertLineBreak()},tab(n){var t,e;(t=this.responder)!==null&&t!==void 0&&t.canIncreaseNestingLevel()&&((e=this.responder)===null||e===void 0||e.increaseNestingLevel(),this.requestRender(),n.preventDefault())},left(n){var t;if(this.selectionIsInCursorTarget())return n.preventDefault(),(t=this.responder)===null||t===void 0?void 0:t.moveCursorInDirection("backward")},right(n){var t;if(this.selectionIsInCursorTarget())return n.preventDefault(),(t=this.responder)===null||t===void 0?void 0:t.moveCursorInDirection("forward")},control:{d(n){var t;return(t=this.delegate)===null||t===void 0||t.inputControllerWillPerformTyping(),this.deleteInDirection("forward",n)},h(n){var t;return(t=this.delegate)===null||t===void 0||t.inputControllerWillPerformTyping(),this.deleteInDirection("backward",n)},o(n){var t,e;return n.preventDefault(),(t=this.delegate)===null||t===void 0||t.inputControllerWillPerformTyping(),(e=this.responder)===null||e===void 0||e.insertString(` +`,{updatePosition:!1}),this.requestRender()}},shift:{return(n){var t,e;(t=this.delegate)===null||t===void 0||t.inputControllerWillPerformTyping(),(e=this.responder)===null||e===void 0||e.insertString(` +`),this.requestRender(),n.preventDefault()},tab(n){var t,e;(t=this.responder)!==null&&t!==void 0&&t.canDecreaseNestingLevel()&&((e=this.responder)===null||e===void 0||e.decreaseNestingLevel(),this.requestRender(),n.preventDefault())},left(n){if(this.selectionIsInCursorTarget())return n.preventDefault(),this.expandSelectionInDirection("backward")},right(n){if(this.selectionIsInCursorTarget())return n.preventDefault(),this.expandSelectionInDirection("forward")}},alt:{backspace(n){var t;return this.setInputSummary({preferDocument:!1}),(t=this.delegate)===null||t===void 0?void 0:t.inputControllerWillPerformTyping()}},meta:{backspace(n){var t;return this.setInputSummary({preferDocument:!1}),(t=this.delegate)===null||t===void 0?void 0:t.inputControllerWillPerformTyping()}}}),w.proxyMethod("responder?.getSelectedRange"),w.proxyMethod("responder?.setSelectedRange"),w.proxyMethod("responder?.expandSelectionInDirection"),w.proxyMethod("responder?.selectionIsInCursorTarget"),w.proxyMethod("responder?.selectionIsExpanded");var Vn=n=>{var t;return(t=n.type)===null||t===void 0||(t=t.match(/\/(\w+)$/))===null||t===void 0?void 0:t[1]},Hn=!((ye=" ".codePointAt)===null||ye===void 0||!ye.call(" ",0)),zn=function(n){if(n.key&&Hn&&n.key.codePointAt(0)===n.keyCode)return n.key;{let t;if(n.which===null?t=n.keyCode:n.which!==0&&n.charCode!==0&&(t=n.charCode),t!=null&&Ni[t]!=="escape")return Z.fromCodepoints([t]).toString()}},_n=function(n){let t=n.clipboardData;if(t){if(t.types.includes("text/html")){for(let e of t.types){let i=/^CorePasteboardFlavorType/.test(e),r=/^dyn\./.test(e)&&t.getData(e);if(i||r)return!0}return!1}{let e=t.types.includes("com.apple.webarchive"),i=t.types.includes("com.apple.flat-rtfd");return e||i}}},B=class extends f{constructor(t){super(...arguments),this.inputController=t,this.responder=this.inputController.responder,this.delegate=this.inputController.delegate,this.inputSummary=this.inputController.inputSummary,this.data={}}start(t){if(this.data.start=t,this.isSignificant()){var e,i;this.inputSummary.eventName==="keypress"&&this.inputSummary.textAdded&&((i=this.responder)===null||i===void 0||i.deleteInDirection("left")),this.selectionIsExpanded()||(this.insertPlaceholder(),this.requestRender()),this.range=(e=this.responder)===null||e===void 0?void 0:e.getSelectedRange()}}update(t){if(this.data.update=t,this.isSignificant()){let e=this.selectPlaceholder();e&&(this.forgetPlaceholder(),this.range=e)}}end(t){return this.data.end=t,this.isSignificant()?(this.forgetPlaceholder(),this.canApplyToDocument()?(this.setInputSummary({preferDocument:!0,didInput:!1}),(e=this.delegate)===null||e===void 0||e.inputControllerWillPerformTyping(),(i=this.responder)===null||i===void 0||i.setSelectedRange(this.range),(r=this.responder)===null||r===void 0||r.insertString(this.data.end),(o=this.responder)===null||o===void 0?void 0:o.setSelectedRange(this.range[0]+this.data.end.length)):this.data.start!=null||this.data.update!=null?(this.requestReparse(),this.inputController.reset()):void 0):this.inputController.reset();var e,i,r,o}getEndData(){return this.data.end}isEnded(){return this.getEndData()!=null}isSignificant(){return!Un.composesExistingText||this.inputSummary.didInput}canApplyToDocument(){var t,e;return((t=this.data.start)===null||t===void 0?void 0:t.length)===0&&((e=this.data.end)===null||e===void 0?void 0:e.length)>0&&this.range}};B.proxyMethod("inputController.setInputSummary"),B.proxyMethod("inputController.requestRender"),B.proxyMethod("inputController.requestReparse"),B.proxyMethod("responder?.selectionIsExpanded"),B.proxyMethod("responder?.insertPlaceholder"),B.proxyMethod("responder?.selectPlaceholder"),B.proxyMethod("responder?.forgetPlaceholder");var G=class extends ht{constructor(){super(...arguments),this.render=this.render.bind(this)}elementDidMutate(){return this.scheduledRender?this.composing?(t=this.delegate)===null||t===void 0||(e=t.inputControllerDidAllowUnhandledInput)===null||e===void 0?void 0:e.call(t):void 0:this.reparse();var t,e}scheduleRender(){return this.scheduledRender?this.scheduledRender:this.scheduledRender=requestAnimationFrame(this.render)}render(){var t,e;cancelAnimationFrame(this.scheduledRender),this.scheduledRender=null,this.composing||(e=this.delegate)===null||e===void 0||e.render(),(t=this.afterRender)===null||t===void 0||t.call(this),this.afterRender=null}reparse(){var t;return(t=this.delegate)===null||t===void 0?void 0:t.reparse()}insertString(){var t;let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"",i=arguments.length>1?arguments[1]:void 0;return(t=this.delegate)===null||t===void 0||t.inputControllerWillPerformTyping(),this.withTargetDOMRange(function(){var r;return(r=this.responder)===null||r===void 0?void 0:r.insertString(e,i)})}toggleAttributeIfSupported(t){var e;if(Le().includes(t))return(e=this.delegate)===null||e===void 0||e.inputControllerWillPerformFormatting(t),this.withTargetDOMRange(function(){var i;return(i=this.responder)===null||i===void 0?void 0:i.toggleCurrentAttribute(t)})}activateAttributeIfSupported(t,e){var i;if(Le().includes(t))return(i=this.delegate)===null||i===void 0||i.inputControllerWillPerformFormatting(t),this.withTargetDOMRange(function(){var r;return(r=this.responder)===null||r===void 0?void 0:r.setCurrentAttribute(t,e)})}deleteInDirection(t){let{recordUndoEntry:e}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{recordUndoEntry:!0};var i;e&&((i=this.delegate)===null||i===void 0||i.inputControllerWillPerformTyping());let r=()=>{var s;return(s=this.responder)===null||s===void 0?void 0:s.deleteInDirection(t)},o=this.getTargetDOMRange({minLength:this.composing?1:2});return o?this.withTargetDOMRange(o,r):r()}withTargetDOMRange(t,e){var i;return typeof t=="function"&&(e=t,t=this.getTargetDOMRange()),t?(i=this.responder)===null||i===void 0?void 0:i.withTargetDOMRange(t,e.bind(this)):(tt.reset(),e.call(this))}getTargetDOMRange(){var t,e;let{minLength:i}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{minLength:0},r=(t=(e=this.event).getTargetRanges)===null||t===void 0?void 0:t.call(e);if(r&&r.length){let o=Jn(r[0]);if(i===0||o.toString().length>=i)return o}}withEvent(t,e){let i;this.event=t;try{i=e.call(this)}finally{this.event=null}return i}};E(G,"events",{keydown(n){if(Ei(n)){var t;let e=Gn(n);(t=this.delegate)!==null&&t!==void 0&&t.inputControllerDidReceiveKeyboardCommand(e)&&n.preventDefault()}else{let e=n.key;n.altKey&&(e+="+Alt"),n.shiftKey&&(e+="+Shift");let i=this.constructor.keys[e];if(i)return this.withEvent(n,i)}},paste(n){var t;let e,i=(t=n.clipboardData)===null||t===void 0?void 0:t.getData("URL");return Oi(n)?(n.preventDefault(),this.attachFiles(n.clipboardData.files)):$n(n)?(n.preventDefault(),e={type:"text/plain",string:n.clipboardData.getData("text/plain")},(r=this.delegate)===null||r===void 0||r.inputControllerWillPaste(e),(o=this.responder)===null||o===void 0||o.insertString(e.string),this.render(),(s=this.delegate)===null||s===void 0?void 0:s.inputControllerDidPaste(e)):i?(n.preventDefault(),e={type:"text/html",html:this.createLinkHTML(i)},(a=this.delegate)===null||a===void 0||a.inputControllerWillPaste(e),(l=this.responder)===null||l===void 0||l.insertHTML(e.html),this.render(),(c=this.delegate)===null||c===void 0?void 0:c.inputControllerDidPaste(e)):void 0;var r,o,s,a,l,c},beforeinput(n){let t=this.constructor.inputTypes[n.inputType];t&&(this.withEvent(n,t),this.scheduleRender())},input(n){tt.reset()},dragstart(n){var t,e;(t=this.responder)!==null&&t!==void 0&&t.selectionContainsAttachments()&&(n.dataTransfer.setData("application/x-trix-dragging",!0),this.dragging={range:(e=this.responder)===null||e===void 0?void 0:e.getSelectedRange(),point:ke(n)})},dragenter(n){Ce(n)&&n.preventDefault()},dragover(n){if(this.dragging){n.preventDefault();let e=ke(n);var t;if(!dt(e,this.dragging.point))return this.dragging.point=e,(t=this.responder)===null||t===void 0?void 0:t.setLocationRangeFromPointRange(e)}else Ce(n)&&n.preventDefault()},drop(n){var t,e;if(this.dragging)return n.preventDefault(),(t=this.delegate)===null||t===void 0||t.inputControllerWillMoveText(),(e=this.responder)===null||e===void 0||e.moveTextFromRange(this.dragging.range),this.dragging=null,this.scheduleRender();if(Ce(n)){var i;n.preventDefault();let r=ke(n);return(i=this.responder)===null||i===void 0||i.setLocationRangeFromPointRange(r),this.attachFiles(n.dataTransfer.files)}},dragend(){var n;this.dragging&&((n=this.responder)===null||n===void 0||n.setSelectedRange(this.dragging.range),this.dragging=null)},compositionend(n){this.composing&&(this.composing=!1,St.recentAndroid||this.scheduleRender())}}),E(G,"keys",{ArrowLeft(){var n,t;if((n=this.responder)!==null&&n!==void 0&&n.shouldManageMovingCursorInDirection("backward"))return this.event.preventDefault(),(t=this.responder)===null||t===void 0?void 0:t.moveCursorInDirection("backward")},ArrowRight(){var n,t;if((n=this.responder)!==null&&n!==void 0&&n.shouldManageMovingCursorInDirection("forward"))return this.event.preventDefault(),(t=this.responder)===null||t===void 0?void 0:t.moveCursorInDirection("forward")},Backspace(){var n,t,e;if((n=this.responder)!==null&&n!==void 0&&n.shouldManageDeletingInDirection("backward"))return this.event.preventDefault(),(t=this.delegate)===null||t===void 0||t.inputControllerWillPerformTyping(),(e=this.responder)===null||e===void 0||e.deleteInDirection("backward"),this.render()},Tab(){var n,t;if((n=this.responder)!==null&&n!==void 0&&n.canIncreaseNestingLevel())return this.event.preventDefault(),(t=this.responder)===null||t===void 0||t.increaseNestingLevel(),this.render()},"Tab+Shift"(){var n,t;if((n=this.responder)!==null&&n!==void 0&&n.canDecreaseNestingLevel())return this.event.preventDefault(),(t=this.responder)===null||t===void 0||t.decreaseNestingLevel(),this.render()}}),E(G,"inputTypes",{deleteByComposition(){return this.deleteInDirection("backward",{recordUndoEntry:!1})},deleteByCut(){return this.deleteInDirection("backward")},deleteByDrag(){return this.event.preventDefault(),this.withTargetDOMRange(function(){var n;this.deleteByDragRange=(n=this.responder)===null||n===void 0?void 0:n.getSelectedRange()})},deleteCompositionText(){return this.deleteInDirection("backward",{recordUndoEntry:!1})},deleteContent(){return this.deleteInDirection("backward")},deleteContentBackward(){return this.deleteInDirection("backward")},deleteContentForward(){return this.deleteInDirection("forward")},deleteEntireSoftLine(){return this.deleteInDirection("forward")},deleteHardLineBackward(){return this.deleteInDirection("backward")},deleteHardLineForward(){return this.deleteInDirection("forward")},deleteSoftLineBackward(){return this.deleteInDirection("backward")},deleteSoftLineForward(){return this.deleteInDirection("forward")},deleteWordBackward(){return this.deleteInDirection("backward")},deleteWordForward(){return this.deleteInDirection("forward")},formatBackColor(){return this.activateAttributeIfSupported("backgroundColor",this.event.data)},formatBold(){return this.toggleAttributeIfSupported("bold")},formatFontColor(){return this.activateAttributeIfSupported("color",this.event.data)},formatFontName(){return this.activateAttributeIfSupported("font",this.event.data)},formatIndent(){var n;if((n=this.responder)!==null&&n!==void 0&&n.canIncreaseNestingLevel())return this.withTargetDOMRange(function(){var t;return(t=this.responder)===null||t===void 0?void 0:t.increaseNestingLevel()})},formatItalic(){return this.toggleAttributeIfSupported("italic")},formatJustifyCenter(){return this.toggleAttributeIfSupported("justifyCenter")},formatJustifyFull(){return this.toggleAttributeIfSupported("justifyFull")},formatJustifyLeft(){return this.toggleAttributeIfSupported("justifyLeft")},formatJustifyRight(){return this.toggleAttributeIfSupported("justifyRight")},formatOutdent(){var n;if((n=this.responder)!==null&&n!==void 0&&n.canDecreaseNestingLevel())return this.withTargetDOMRange(function(){var t;return(t=this.responder)===null||t===void 0?void 0:t.decreaseNestingLevel()})},formatRemove(){this.withTargetDOMRange(function(){for(let e in(n=this.responder)===null||n===void 0?void 0:n.getCurrentAttributes()){var n,t;(t=this.responder)===null||t===void 0||t.removeCurrentAttribute(e)}})},formatSetBlockTextDirection(){return this.activateAttributeIfSupported("blockDir",this.event.data)},formatSetInlineTextDirection(){return this.activateAttributeIfSupported("textDir",this.event.data)},formatStrikeThrough(){return this.toggleAttributeIfSupported("strike")},formatSubscript(){return this.toggleAttributeIfSupported("sub")},formatSuperscript(){return this.toggleAttributeIfSupported("sup")},formatUnderline(){return this.toggleAttributeIfSupported("underline")},historyRedo(){var n;return(n=this.delegate)===null||n===void 0?void 0:n.inputControllerWillPerformRedo()},historyUndo(){var n;return(n=this.delegate)===null||n===void 0?void 0:n.inputControllerWillPerformUndo()},insertCompositionText(){return this.composing=!0,this.insertString(this.event.data)},insertFromComposition(){return this.composing=!1,this.insertString(this.event.data)},insertFromDrop(){let n=this.deleteByDragRange;var t;if(n)return this.deleteByDragRange=null,(t=this.delegate)===null||t===void 0||t.inputControllerWillMoveText(),this.withTargetDOMRange(function(){var e;return(e=this.responder)===null||e===void 0?void 0:e.moveTextFromRange(n)})},insertFromPaste(){let{dataTransfer:n}=this.event,t={dataTransfer:n},e=n.getData("URL"),i=n.getData("text/html");if(e){var r;let l;this.event.preventDefault(),t.type="text/html";let c=n.getData("public.url-name");l=c?_e(c).trim():e,t.html=this.createLinkHTML(e,l),(r=this.delegate)===null||r===void 0||r.inputControllerWillPaste(t),this.withTargetDOMRange(function(){var u;return(u=this.responder)===null||u===void 0?void 0:u.insertHTML(t.html)}),this.afterRender=()=>{var u;return(u=this.delegate)===null||u===void 0?void 0:u.inputControllerDidPaste(t)}}else if(Ri(n)){var o;t.type="text/plain",t.string=n.getData("text/plain"),(o=this.delegate)===null||o===void 0||o.inputControllerWillPaste(t),this.withTargetDOMRange(function(){var l;return(l=this.responder)===null||l===void 0?void 0:l.insertString(t.string)}),this.afterRender=()=>{var l;return(l=this.delegate)===null||l===void 0?void 0:l.inputControllerDidPaste(t)}}else if(Kn(this.event)){var s;t.type="File",t.file=n.files[0],(s=this.delegate)===null||s===void 0||s.inputControllerWillPaste(t),this.withTargetDOMRange(function(){var l;return(l=this.responder)===null||l===void 0?void 0:l.insertFile(t.file)}),this.afterRender=()=>{var l;return(l=this.delegate)===null||l===void 0?void 0:l.inputControllerDidPaste(t)}}else if(i){var a;this.event.preventDefault(),t.type="text/html",t.html=i,(a=this.delegate)===null||a===void 0||a.inputControllerWillPaste(t),this.withTargetDOMRange(function(){var l;return(l=this.responder)===null||l===void 0?void 0:l.insertHTML(t.html)}),this.afterRender=()=>{var l;return(l=this.delegate)===null||l===void 0?void 0:l.inputControllerDidPaste(t)}}},insertFromYank(){return this.insertString(this.event.data)},insertLineBreak(){return this.insertString(` +`)},insertLink(){return this.activateAttributeIfSupported("href",this.event.data)},insertOrderedList(){return this.toggleAttributeIfSupported("number")},insertParagraph(){var n;return(n=this.delegate)===null||n===void 0||n.inputControllerWillPerformTyping(),this.withTargetDOMRange(function(){var t;return(t=this.responder)===null||t===void 0?void 0:t.insertLineBreak()})},insertReplacementText(){let n=this.event.dataTransfer.getData("text/plain"),t=this.event.getTargetRanges()[0];this.withTargetDOMRange(t,()=>{this.insertString(n,{updatePosition:!1})})},insertText(){var n;return this.insertString(this.event.data||((n=this.event.dataTransfer)===null||n===void 0?void 0:n.getData("text/plain")))},insertTranspose(){return this.insertString(this.event.data)},insertUnorderedList(){return this.toggleAttributeIfSupported("bullet")}});var Jn=function(n){let t=document.createRange();return t.setStart(n.startContainer,n.startOffset),t.setEnd(n.endContainer,n.endOffset),t},Ce=n=>{var t;return Array.from(((t=n.dataTransfer)===null||t===void 0?void 0:t.types)||[]).includes("Files")},Kn=n=>{var t;return((t=n.dataTransfer.files)===null||t===void 0?void 0:t[0])&&!Oi(n)&&!(e=>{let{dataTransfer:i}=e;return i.types.includes("Files")&&i.types.includes("text/html")&&i.getData("text/html").includes("urn:schemas-microsoft-com:office:office")})(n)},Oi=function(n){let t=n.clipboardData;if(t)return Array.from(t.types).filter(e=>e.match(/file/i)).length===t.types.length&&t.files.length>=1},$n=function(n){let t=n.clipboardData;if(t)return t.types.includes("text/plain")&&t.types.length===1},Gn=function(n){let t=[];return n.altKey&&t.push("alt"),n.shiftKey&&t.push("shift"),t.push(n.key),t},ke=n=>({x:n.clientX,y:n.clientY}),Oe="[data-trix-attribute]",Me="[data-trix-action]",Xn="".concat(Oe,", ").concat(Me),ee="[data-trix-dialog]",Yn="".concat(ee,"[data-trix-active]"),Zn="".concat(ee," [data-trix-method]"),mi="".concat(ee," [data-trix-input]"),pi=(n,t)=>(t||(t=rt(n)),n.querySelector("[data-trix-input][name='".concat(t,"']"))),fi=n=>n.getAttribute("data-trix-action"),rt=n=>n.getAttribute("data-trix-attribute")||n.getAttribute("data-trix-dialog-attribute"),Yt=class extends f{constructor(t){super(t),this.didClickActionButton=this.didClickActionButton.bind(this),this.didClickAttributeButton=this.didClickAttributeButton.bind(this),this.didClickDialogButton=this.didClickDialogButton.bind(this),this.didKeyDownDialogInput=this.didKeyDownDialogInput.bind(this),this.element=t,this.attributes={},this.actions={},this.resetDialogInputs(),p("mousedown",{onElement:this.element,matchingSelector:Me,withCallback:this.didClickActionButton}),p("mousedown",{onElement:this.element,matchingSelector:Oe,withCallback:this.didClickAttributeButton}),p("click",{onElement:this.element,matchingSelector:Xn,preventDefault:!0}),p("click",{onElement:this.element,matchingSelector:Zn,withCallback:this.didClickDialogButton}),p("keydown",{onElement:this.element,matchingSelector:mi,withCallback:this.didKeyDownDialogInput})}didClickActionButton(t,e){var i;(i=this.delegate)===null||i===void 0||i.toolbarDidClickButton(),t.preventDefault();let r=fi(e);return this.getDialog(r)?this.toggleDialog(r):(o=this.delegate)===null||o===void 0?void 0:o.toolbarDidInvokeAction(r,e);var o}didClickAttributeButton(t,e){var i;(i=this.delegate)===null||i===void 0||i.toolbarDidClickButton(),t.preventDefault();let r=rt(e);var o;return this.getDialog(r)?this.toggleDialog(r):(o=this.delegate)===null||o===void 0||o.toolbarDidToggleAttribute(r),this.refreshAttributeButtons()}didClickDialogButton(t,e){let i=q(e,{matchingSelector:ee});return this[e.getAttribute("data-trix-method")].call(this,i)}didKeyDownDialogInput(t,e){if(t.keyCode===13){t.preventDefault();let i=e.getAttribute("name"),r=this.getDialog(i);this.setAttribute(r)}if(t.keyCode===27)return t.preventDefault(),this.hideDialog()}updateActions(t){return this.actions=t,this.refreshActionButtons()}refreshActionButtons(){return this.eachActionButton((t,e)=>{t.disabled=this.actions[e]===!1})}eachActionButton(t){return Array.from(this.element.querySelectorAll(Me)).map(e=>t(e,fi(e)))}updateAttributes(t){return this.attributes=t,this.refreshAttributeButtons()}refreshAttributeButtons(){return this.eachAttributeButton((t,e)=>(t.disabled=this.attributes[e]===!1,this.attributes[e]||this.dialogIsVisible(e)?(t.setAttribute("data-trix-active",""),t.classList.add("trix-active")):(t.removeAttribute("data-trix-active"),t.classList.remove("trix-active"))))}eachAttributeButton(t){return Array.from(this.element.querySelectorAll(Oe)).map(e=>t(e,rt(e)))}applyKeyboardCommand(t){let e=JSON.stringify(t.sort());for(let i of Array.from(this.element.querySelectorAll("[data-trix-key]"))){let r=i.getAttribute("data-trix-key").split("+");if(JSON.stringify(r.sort())===e)return vt("mousedown",{onElement:i}),!0}return!1}dialogIsVisible(t){let e=this.getDialog(t);if(e)return e.hasAttribute("data-trix-active")}toggleDialog(t){return this.dialogIsVisible(t)?this.hideDialog():this.showDialog(t)}showDialog(t){var e,i;this.hideDialog(),(e=this.delegate)===null||e===void 0||e.toolbarWillShowDialog();let r=this.getDialog(t);r.setAttribute("data-trix-active",""),r.classList.add("trix-active"),Array.from(r.querySelectorAll("input[disabled]")).forEach(s=>{s.removeAttribute("disabled")});let o=rt(r);if(o){let s=pi(r,t);s&&(s.value=this.attributes[o]||"",s.select())}return(i=this.delegate)===null||i===void 0?void 0:i.toolbarDidShowDialog(t)}setAttribute(t){let e=rt(t),i=pi(t,e);return i.willValidate&&!i.checkValidity()?(i.setAttribute("data-trix-validate",""),i.classList.add("trix-validate"),i.focus()):((r=this.delegate)===null||r===void 0||r.toolbarDidUpdateAttribute(e,i.value),this.hideDialog());var r}removeAttribute(t){var e;let i=rt(t);return(e=this.delegate)===null||e===void 0||e.toolbarDidRemoveAttribute(i),this.hideDialog()}hideDialog(){let t=this.element.querySelector(Yn);var e;if(t)return t.removeAttribute("data-trix-active"),t.classList.remove("trix-active"),this.resetDialogInputs(),(e=this.delegate)===null||e===void 0?void 0:e.toolbarDidHideDialog((i=>i.getAttribute("data-trix-dialog"))(t))}resetDialogInputs(){Array.from(this.element.querySelectorAll(mi)).forEach(t=>{t.setAttribute("disabled","disabled"),t.removeAttribute("data-trix-validate"),t.classList.remove("trix-validate")})}getDialog(t){return this.element.querySelector("[data-trix-dialog=".concat(t,"]"))}},X=class extends $t{constructor(t){let{editorElement:e,document:i,html:r}=t;super(...arguments),this.editorElement=e,this.selectionManager=new I(this.editorElement),this.selectionManager.delegate=this,this.composition=new F,this.composition.delegate=this,this.attachmentManager=new Ut(this.composition.getAttachments()),this.attachmentManager.delegate=this,this.inputController=qe.getLevel()===2?new G(this.editorElement):new w(this.editorElement),this.inputController.delegate=this,this.inputController.responder=this.composition,this.compositionController=new Kt(this.editorElement,this.composition),this.compositionController.delegate=this,this.toolbarController=new Yt(this.editorElement.toolbarElement),this.toolbarController.delegate=this,this.editor=new Ht(this.composition,this.selectionManager,this.editorElement),i?this.editor.loadDocument(i):this.editor.loadHTML(r)}registerSelectionManager(){return tt.registerSelectionManager(this.selectionManager)}unregisterSelectionManager(){return tt.unregisterSelectionManager(this.selectionManager)}render(){return this.compositionController.render()}reparse(){return this.composition.replaceHTML(this.editorElement.innerHTML)}compositionDidChangeDocument(t){if(this.notifyEditorElement("document-change"),!this.handlingInput)return this.render()}compositionDidChangeCurrentAttributes(t){return this.currentAttributes=t,this.toolbarController.updateAttributes(this.currentAttributes),this.updateCurrentActions(),this.notifyEditorElement("attributes-change",{attributes:this.currentAttributes})}compositionDidPerformInsertionAtRange(t){this.pasting&&(this.pastedRange=t)}compositionShouldAcceptFile(t){return this.notifyEditorElement("file-accept",{file:t})}compositionDidAddAttachment(t){let e=this.attachmentManager.manageAttachment(t);return this.notifyEditorElement("attachment-add",{attachment:e})}compositionDidEditAttachment(t){this.compositionController.rerenderViewForObject(t);let e=this.attachmentManager.manageAttachment(t);return this.notifyEditorElement("attachment-edit",{attachment:e}),this.notifyEditorElement("change")}compositionDidChangeAttachmentPreviewURL(t){return this.compositionController.invalidateViewForObject(t),this.notifyEditorElement("change")}compositionDidRemoveAttachment(t){let e=this.attachmentManager.unmanageAttachment(t);return this.notifyEditorElement("attachment-remove",{attachment:e})}compositionDidStartEditingAttachment(t,e){return this.attachmentLocationRange=this.composition.document.getLocationRangeOfAttachment(t),this.compositionController.installAttachmentEditorForAttachment(t,e),this.selectionManager.setLocationRange(this.attachmentLocationRange)}compositionDidStopEditingAttachment(t){this.compositionController.uninstallAttachmentEditor(),this.attachmentLocationRange=null}compositionDidRequestChangingSelectionToLocationRange(t){if(!this.loadingSnapshot||this.isFocused())return this.requestedLocationRange=t,this.compositionRevisionWhenLocationRangeRequested=this.composition.revision,this.handlingInput?void 0:this.render()}compositionWillLoadSnapshot(){this.loadingSnapshot=!0}compositionDidLoadSnapshot(){this.compositionController.refreshViewCache(),this.render(),this.loadingSnapshot=!1}getSelectionManager(){return this.selectionManager}attachmentManagerDidRequestRemovalOfAttachment(t){return this.removeAttachment(t)}compositionControllerWillSyncDocumentView(){return this.inputController.editorWillSyncDocumentView(),this.selectionManager.lock(),this.selectionManager.clearSelection()}compositionControllerDidSyncDocumentView(){return this.inputController.editorDidSyncDocumentView(),this.selectionManager.unlock(),this.updateCurrentActions(),this.notifyEditorElement("sync")}compositionControllerDidRender(){this.requestedLocationRange&&(this.compositionRevisionWhenLocationRangeRequested===this.composition.revision&&this.selectionManager.setLocationRange(this.requestedLocationRange),this.requestedLocationRange=null,this.compositionRevisionWhenLocationRangeRequested=null),this.renderedCompositionRevision!==this.composition.revision&&(this.runEditorFilters(),this.composition.updateCurrentAttributes(),this.notifyEditorElement("render")),this.renderedCompositionRevision=this.composition.revision}compositionControllerDidFocus(){return this.isFocusedInvisibly()&&this.setLocationRange({index:0,offset:0}),this.toolbarController.hideDialog(),this.notifyEditorElement("focus")}compositionControllerDidBlur(){return this.notifyEditorElement("blur")}compositionControllerDidSelectAttachment(t,e){return this.toolbarController.hideDialog(),this.composition.editAttachment(t,e)}compositionControllerDidRequestDeselectingAttachment(t){let e=this.attachmentLocationRange||this.composition.document.getLocationRangeOfAttachment(t);return this.selectionManager.setLocationRange(e[1])}compositionControllerWillUpdateAttachment(t){return this.editor.recordUndoEntry("Edit Attachment",{context:t.id,consolidatable:!0})}compositionControllerDidRequestRemovalOfAttachment(t){return this.removeAttachment(t)}inputControllerWillHandleInput(){this.handlingInput=!0,this.requestedRender=!1}inputControllerDidRequestRender(){this.requestedRender=!0}inputControllerDidHandleInput(){if(this.handlingInput=!1,this.requestedRender)return this.requestedRender=!1,this.render()}inputControllerDidAllowUnhandledInput(){return this.notifyEditorElement("change")}inputControllerDidRequestReparse(){return this.reparse()}inputControllerWillPerformTyping(){return this.recordTypingUndoEntry()}inputControllerWillPerformFormatting(t){return this.recordFormattingUndoEntry(t)}inputControllerWillCutText(){return this.editor.recordUndoEntry("Cut")}inputControllerWillPaste(t){return this.editor.recordUndoEntry("Paste"),this.pasting=!0,this.notifyEditorElement("before-paste",{paste:t})}inputControllerDidPaste(t){return t.range=this.pastedRange,this.pastedRange=null,this.pasting=null,this.notifyEditorElement("paste",{paste:t})}inputControllerWillMoveText(){return this.editor.recordUndoEntry("Move")}inputControllerWillAttachFiles(){return this.editor.recordUndoEntry("Drop Files")}inputControllerWillPerformUndo(){return this.editor.undo()}inputControllerWillPerformRedo(){return this.editor.redo()}inputControllerDidReceiveKeyboardCommand(t){return this.toolbarController.applyKeyboardCommand(t)}inputControllerDidStartDrag(){this.locationRangeBeforeDrag=this.selectionManager.getLocationRange()}inputControllerDidReceiveDragOverPoint(t){return this.selectionManager.setLocationRangeFromPointRange(t)}inputControllerDidCancelDrag(){this.selectionManager.setLocationRange(this.locationRangeBeforeDrag),this.locationRangeBeforeDrag=null}locationRangeDidChange(t){return this.composition.updateCurrentAttributes(),this.updateCurrentActions(),this.attachmentLocationRange&&!Pt(this.attachmentLocationRange,t)&&this.composition.stopEditingAttachment(),this.notifyEditorElement("selection-change")}toolbarDidClickButton(){if(!this.getLocationRange())return this.setLocationRange({index:0,offset:0})}toolbarDidInvokeAction(t,e){return this.invokeAction(t,e)}toolbarDidToggleAttribute(t){if(this.recordFormattingUndoEntry(t),this.composition.toggleCurrentAttribute(t),this.render(),!this.selectionFrozen)return this.editorElement.focus()}toolbarDidUpdateAttribute(t,e){if(this.recordFormattingUndoEntry(t),this.composition.setCurrentAttribute(t,e),this.render(),!this.selectionFrozen)return this.editorElement.focus()}toolbarDidRemoveAttribute(t){if(this.recordFormattingUndoEntry(t),this.composition.removeCurrentAttribute(t),this.render(),!this.selectionFrozen)return this.editorElement.focus()}toolbarWillShowDialog(t){return this.composition.expandSelectionForEditing(),this.freezeSelection()}toolbarDidShowDialog(t){return this.notifyEditorElement("toolbar-dialog-show",{dialogName:t})}toolbarDidHideDialog(t){return this.thawSelection(),this.editorElement.focus(),this.notifyEditorElement("toolbar-dialog-hide",{dialogName:t})}freezeSelection(){if(!this.selectionFrozen)return this.selectionManager.lock(),this.composition.freezeSelection(),this.selectionFrozen=!0,this.render()}thawSelection(){if(this.selectionFrozen)return this.composition.thawSelection(),this.selectionManager.unlock(),this.selectionFrozen=!1,this.render()}canInvokeAction(t){return!!this.actionIsExternal(t)||!((e=this.actions[t])===null||e===void 0||(e=e.test)===null||e===void 0||!e.call(this));var e}invokeAction(t,e){return this.actionIsExternal(t)?this.notifyEditorElement("action-invoke",{actionName:t,invokingElement:e}):(i=this.actions[t])===null||i===void 0||(i=i.perform)===null||i===void 0?void 0:i.call(this);var i}actionIsExternal(t){return/^x-./.test(t)}getCurrentActions(){let t={};for(let e in this.actions)t[e]=this.canInvokeAction(e);return t}updateCurrentActions(){let t=this.getCurrentActions();if(!dt(t,this.currentActions))return this.currentActions=t,this.toolbarController.updateActions(this.currentActions),this.notifyEditorElement("actions-change",{actions:this.currentActions})}runEditorFilters(){let t=this.composition.getSnapshot();if(Array.from(this.editor.filters).forEach(r=>{let{document:o,selectedRange:s}=t;t=r.call(this.editor,t)||{},t.document||(t.document=o),t.selectedRange||(t.selectedRange=s)}),e=t,i=this.composition.getSnapshot(),!Pt(e.selectedRange,i.selectedRange)||!e.document.isEqualTo(i.document))return this.composition.loadSnapshot(t);var e,i}updateInputElement(){let t=function(e,i){let r=Dn[i];if(r)return r(e);throw new Error("unknown content type: ".concat(i))}(this.compositionController.getSerializableElement(),"text/html");return this.editorElement.setInputElementValue(t)}notifyEditorElement(t,e){switch(t){case"document-change":this.documentChangedSinceLastRender=!0;break;case"render":this.documentChangedSinceLastRender&&(this.documentChangedSinceLastRender=!1,this.notifyEditorElement("change"));break;case"change":case"attachment-add":case"attachment-edit":case"attachment-remove":this.updateInputElement()}return this.editorElement.notify(t,e)}removeAttachment(t){return this.editor.recordUndoEntry("Delete Attachment"),this.composition.removeAttachment(t),this.render()}recordFormattingUndoEntry(t){let e=v(t),i=this.selectionManager.getLocationRange();if(e||!N(i))return this.editor.recordUndoEntry("Formatting",{context:this.getUndoContext(),consolidatable:!0})}recordTypingUndoEntry(){return this.editor.recordUndoEntry("Typing",{context:this.getUndoContext(this.currentAttributes),consolidatable:!0})}getUndoContext(){for(var t=arguments.length,e=new Array(t),i=0;i0?Math.floor(new Date().getTime()/Re.interval):0}isFocused(){var t;return this.editorElement===((t=this.editorElement.ownerDocument)===null||t===void 0?void 0:t.activeElement)}isFocusedInvisibly(){return this.isFocused()&&!this.getLocationRange()}get actions(){return this.constructor.actions}};E(X,"actions",{undo:{test(){return this.editor.canUndo()},perform(){return this.editor.undo()}},redo:{test(){return this.editor.canRedo()},perform(){return this.editor.redo()}},link:{test(){return this.editor.canActivateAttribute("href")}},increaseNestingLevel:{test(){return this.editor.canIncreaseNestingLevel()},perform(){return this.editor.increaseNestingLevel()&&this.render()}},decreaseNestingLevel:{test(){return this.editor.canDecreaseNestingLevel()},perform(){return this.editor.decreaseNestingLevel()&&this.render()}},attachFiles:{test:()=>!0,perform(){return qe.pickFiles(this.editor.insertFiles)}}}),X.proxyMethod("getSelectionManager().setLocationRange"),X.proxyMethod("getSelectionManager().getLocationRange");var Qn=Object.freeze({__proto__:null,AttachmentEditorController:Jt,CompositionController:Kt,Controller:$t,EditorController:X,InputController:ht,Level0InputController:w,Level2InputController:G,ToolbarController:Yt}),tr=Object.freeze({__proto__:null,MutationObserver:Gt,SelectionChangeObserver:It}),er=Object.freeze({__proto__:null,FileVerificationOperation:Xt,ImagePreloadOperation:Wt});ki("trix-toolbar",`%t { + display: block; +} + +%t { + white-space: nowrap; +} + +%t [data-trix-dialog] { + display: none; +} + +%t [data-trix-dialog][data-trix-active] { + display: block; +} + +%t [data-trix-dialog] [data-trix-validate]:invalid { + background-color: #ffdddd; +}`);var Zt=class extends HTMLElement{connectedCallback(){this.innerHTML===""&&(this.innerHTML=Ci.getDefaultHTML())}},ir=0,nr=function(n){if(!n.hasAttribute("contenteditable"))return n.setAttribute("contenteditable",""),function(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return e.times=1,p(t,e)}("focus",{onElement:n,withCallback:()=>rr(n)})},rr=function(n){return or(n),sr(n)},or=function(n){var t,e;if((t=(e=document).queryCommandSupported)!==null&&t!==void 0&&t.call(e,"enableObjectResizing"))return document.execCommand("enableObjectResizing",!1,!1),p("mscontrolselect",{onElement:n,preventDefault:!0})},sr=function(n){var t,e;if((t=(e=document).queryCommandSupported)!==null&&t!==void 0&&t.call(e,"DefaultParagraphSeparator")){let{tagName:i}=y.default;if(["div","p"].includes(i))return document.execCommand("DefaultParagraphSeparator",!1,i)}},bi=St.forcesObjectResizing?{display:"inline",width:"auto"}:{display:"inline-block",width:"1px"};ki("trix-editor",`%t { + display: block; +} + +%t:empty:not(:focus)::before { + content: attr(placeholder); + color: graytext; + cursor: text; + pointer-events: none; + white-space: pre-line; +} + +%t a[contenteditable=false] { + cursor: text; +} + +%t img { + max-width: 100%; + height: auto; +} + +%t `.concat(K,` figcaption textarea { + resize: none; +} + +%t `).concat(K,` figcaption textarea.trix-autoresize-clone { + position: absolute; + left: -9999px; + max-height: 0px; +} + +%t `).concat(K,` figcaption[data-trix-placeholder]:empty::before { + content: attr(data-trix-placeholder); + color: graytext; +} + +%t [data-trix-cursor-target] { + display: `).concat(bi.display,` !important; + width: `).concat(bi.width,` !important; + padding: 0 !important; + margin: 0 !important; + border: none !important; +} + +%t [data-trix-cursor-target=left] { + vertical-align: top !important; + margin-left: -1px !important; +} + +%t [data-trix-cursor-target=right] { + vertical-align: bottom !important; + margin-right: -1px !important; +}`));var Qt=class extends HTMLElement{get trixId(){return this.hasAttribute("trix-id")?this.getAttribute("trix-id"):(this.setAttribute("trix-id",++ir),this.trixId)}get labels(){let t=[];this.id&&this.ownerDocument&&t.push(...Array.from(this.ownerDocument.querySelectorAll("label[for='".concat(this.id,"']"))||[]));let e=q(this,{matchingSelector:"label"});return e&&[this,null].includes(e.control)&&t.push(e),t}get toolbarElement(){var t;if(this.hasAttribute("toolbar"))return(t=this.ownerDocument)===null||t===void 0?void 0:t.getElementById(this.getAttribute("toolbar"));if(this.parentNode){let e="trix-toolbar-".concat(this.trixId);this.setAttribute("toolbar",e);let i=d("trix-toolbar",{id:e});return this.parentNode.insertBefore(i,this),i}}get form(){var t;return(t=this.inputElement)===null||t===void 0?void 0:t.form}get inputElement(){var t;if(this.hasAttribute("input"))return(t=this.ownerDocument)===null||t===void 0?void 0:t.getElementById(this.getAttribute("input"));if(this.parentNode){let e="trix-input-".concat(this.trixId);this.setAttribute("input",e);let i=d("input",{type:"hidden",id:e});return this.parentNode.insertBefore(i,this.nextElementSibling),i}}get editor(){var t;return(t=this.editorController)===null||t===void 0?void 0:t.editor}get name(){var t;return(t=this.inputElement)===null||t===void 0?void 0:t.name}get value(){var t;return(t=this.inputElement)===null||t===void 0?void 0:t.value}set value(t){var e;this.defaultValue=t,(e=this.editor)===null||e===void 0||e.loadHTML(this.defaultValue)}notify(t,e){if(this.editorController)return vt("trix-".concat(t),{onElement:this,attributes:e})}setInputElementValue(t){this.inputElement&&(this.inputElement.value=t)}connectedCallback(){this.hasAttribute("data-trix-internal")||(nr(this),function(t){t.hasAttribute("role")||t.setAttribute("role","textbox")}(this),function(t){if(t.hasAttribute("aria-label")||t.hasAttribute("aria-labelledby"))return;let e=function(){let i=Array.from(t.labels).map(o=>{if(!o.contains(t))return o.textContent}).filter(o=>o),r=i.join(" ");return r?t.setAttribute("aria-label",r):t.removeAttribute("aria-label")};e(),p("focus",{onElement:t,withCallback:e})}(this),this.editorController||(vt("trix-before-initialize",{onElement:this}),this.editorController=new X({editorElement:this,html:this.defaultValue=this.value}),requestAnimationFrame(()=>vt("trix-initialize",{onElement:this}))),this.editorController.registerSelectionManager(),this.registerResetListener(),this.registerClickListener(),function(t){!document.querySelector(":focus")&&t.hasAttribute("autofocus")&&document.querySelector("[autofocus]")===t&&t.focus()}(this))}disconnectedCallback(){var t;return(t=this.editorController)===null||t===void 0||t.unregisterSelectionManager(),this.unregisterResetListener(),this.unregisterClickListener()}registerResetListener(){return this.resetListener=this.resetBubbled.bind(this),window.addEventListener("reset",this.resetListener,!1)}unregisterResetListener(){return window.removeEventListener("reset",this.resetListener,!1)}registerClickListener(){return this.clickListener=this.clickBubbled.bind(this),window.addEventListener("click",this.clickListener,!1)}unregisterClickListener(){return window.removeEventListener("click",this.clickListener,!1)}resetBubbled(t){if(!t.defaultPrevented&&t.target===this.form)return this.reset()}clickBubbled(t){if(t.defaultPrevented||this.contains(t.target))return;let e=q(t.target,{matchingSelector:"label"});return e&&Array.from(this.labels).includes(e)?this.focus():void 0}reset(){this.value=this.defaultValue}},T={VERSION:Mi,config:Lt,core:wn,models:Pi,views:In,controllers:Qn,observers:tr,operations:er,elements:Object.freeze({__proto__:null,TrixEditorElement:Qt,TrixToolbarElement:Zt}),filters:Object.freeze({__proto__:null,Filter:Vt,attachmentGalleryFilter:Bi})};Object.assign(T,Pi),window.Trix=T,setTimeout(function(){customElements.get("trix-toolbar")||customElements.define("trix-toolbar",Zt),customElements.get("trix-editor")||customElements.define("trix-editor",Qt)},0);T.config.blockAttributes.default.tagName="p";T.config.blockAttributes.default.breakOnReturn=!0;T.config.blockAttributes.heading={tagName:"h2",terminal:!0,breakOnReturn:!0,group:!1};T.config.blockAttributes.subHeading={tagName:"h3",terminal:!0,breakOnReturn:!0,group:!1};T.config.textAttributes.underline={style:{textDecoration:"underline"},inheritable:!0,parser:n=>window.getComputedStyle(n).textDecoration.includes("underline")};T.Block.prototype.breaksOnReturn=function(){let n=this.getLastAttribute();return T.config.blockAttributes[n||"default"]?.breakOnReturn??!1};T.LineBreakInsertion.prototype.shouldInsertBlockBreak=function(){return this.block.hasAttributes()&&this.block.isListItem()&&!this.block.isEmpty()?this.startLocation.offset>0:this.shouldBreakFormattedBlock()?!1:this.breaksOnReturn};function ar({state:n}){return{state:n,init:function(){this.$refs.trixValue.value=this.state,this.$refs.trix.editor?.loadHTML(this.state??""),this.$watch("state",()=>{document.activeElement!==this.$refs.trix&&(this.$refs.trixValue.value=this.state,this.$refs.trix.editor?.loadHTML(this.state??""))})}}}export{ar as default}; diff --git a/public/js/filament/forms/components/select.js b/public/js/filament/forms/components/select.js new file mode 100644 index 0000000..7b3c78f --- /dev/null +++ b/public/js/filament/forms/components/select.js @@ -0,0 +1,6 @@ +var lt=Object.create;var Ge=Object.defineProperty;var ct=Object.getOwnPropertyDescriptor;var ut=Object.getOwnPropertyNames;var ht=Object.getPrototypeOf,dt=Object.prototype.hasOwnProperty;var ft=(se,ie)=>()=>(ie||se((ie={exports:{}}).exports,ie),ie.exports);var pt=(se,ie,X,me)=>{if(ie&&typeof ie=="object"||typeof ie=="function")for(let j of ut(ie))!dt.call(se,j)&&j!==X&&Ge(se,j,{get:()=>ie[j],enumerable:!(me=ct(ie,j))||me.enumerable});return se};var mt=(se,ie,X)=>(X=se!=null?lt(ht(se)):{},pt(ie||!se||!se.__esModule?Ge(X,"default",{value:se,enumerable:!0}):X,se));var $e=ft((Ae,Ye)=>{(function(ie,X){typeof Ae=="object"&&typeof Ye=="object"?Ye.exports=X():typeof define=="function"&&define.amd?define([],X):typeof Ae=="object"?Ae.Choices=X():ie.Choices=X()})(window,function(){return function(){"use strict";var se={282:function(j,i,b){Object.defineProperty(i,"__esModule",{value:!0}),i.clearChoices=i.activateChoices=i.filterChoices=i.addChoice=void 0;var _=b(883),h=function(c){var l=c.value,O=c.label,L=c.id,y=c.groupId,D=c.disabled,k=c.elementId,Q=c.customProperties,Z=c.placeholder,ne=c.keyCode;return{type:_.ACTION_TYPES.ADD_CHOICE,value:l,label:O,id:L,groupId:y,disabled:D,elementId:k,customProperties:Q,placeholder:Z,keyCode:ne}};i.addChoice=h;var d=function(c){return{type:_.ACTION_TYPES.FILTER_CHOICES,results:c}};i.filterChoices=d;var a=function(c){return c===void 0&&(c=!0),{type:_.ACTION_TYPES.ACTIVATE_CHOICES,active:c}};i.activateChoices=a;var r=function(){return{type:_.ACTION_TYPES.CLEAR_CHOICES}};i.clearChoices=r},783:function(j,i,b){Object.defineProperty(i,"__esModule",{value:!0}),i.addGroup=void 0;var _=b(883),h=function(d){var a=d.value,r=d.id,c=d.active,l=d.disabled;return{type:_.ACTION_TYPES.ADD_GROUP,value:a,id:r,active:c,disabled:l}};i.addGroup=h},464:function(j,i,b){Object.defineProperty(i,"__esModule",{value:!0}),i.highlightItem=i.removeItem=i.addItem=void 0;var _=b(883),h=function(r){var c=r.value,l=r.label,O=r.id,L=r.choiceId,y=r.groupId,D=r.customProperties,k=r.placeholder,Q=r.keyCode;return{type:_.ACTION_TYPES.ADD_ITEM,value:c,label:l,id:O,choiceId:L,groupId:y,customProperties:D,placeholder:k,keyCode:Q}};i.addItem=h;var d=function(r,c){return{type:_.ACTION_TYPES.REMOVE_ITEM,id:r,choiceId:c}};i.removeItem=d;var a=function(r,c){return{type:_.ACTION_TYPES.HIGHLIGHT_ITEM,id:r,highlighted:c}};i.highlightItem=a},137:function(j,i,b){Object.defineProperty(i,"__esModule",{value:!0}),i.setIsLoading=i.resetTo=i.clearAll=void 0;var _=b(883),h=function(){return{type:_.ACTION_TYPES.CLEAR_ALL}};i.clearAll=h;var d=function(r){return{type:_.ACTION_TYPES.RESET_TO,state:r}};i.resetTo=d;var a=function(r){return{type:_.ACTION_TYPES.SET_IS_LOADING,isLoading:r}};i.setIsLoading=a},373:function(j,i,b){var _=this&&this.__spreadArray||function(g,e,t){if(t||arguments.length===2)for(var n=0,s=e.length,v;n=0?this._store.getGroupById(v):null;return this._store.dispatch((0,l.highlightItem)(n,!0)),t&&this.passedElement.triggerEvent(y.EVENTS.highlightItem,{id:n,value:M,label:f,groupValue:u&&u.value?u.value:null}),this},g.prototype.unhighlightItem=function(e){if(!e||!e.id)return this;var t=e.id,n=e.groupId,s=n===void 0?-1:n,v=e.value,P=v===void 0?"":v,M=e.label,K=M===void 0?"":M,f=s>=0?this._store.getGroupById(s):null;return this._store.dispatch((0,l.highlightItem)(t,!1)),this.passedElement.triggerEvent(y.EVENTS.highlightItem,{id:t,value:P,label:K,groupValue:f&&f.value?f.value:null}),this},g.prototype.highlightAll=function(){var e=this;return this._store.items.forEach(function(t){return e.highlightItem(t)}),this},g.prototype.unhighlightAll=function(){var e=this;return this._store.items.forEach(function(t){return e.unhighlightItem(t)}),this},g.prototype.removeActiveItemsByValue=function(e){var t=this;return this._store.activeItems.filter(function(n){return n.value===e}).forEach(function(n){return t._removeItem(n)}),this},g.prototype.removeActiveItems=function(e){var t=this;return this._store.activeItems.filter(function(n){var s=n.id;return s!==e}).forEach(function(n){return t._removeItem(n)}),this},g.prototype.removeHighlightedItems=function(e){var t=this;return e===void 0&&(e=!1),this._store.highlightedActiveItems.forEach(function(n){t._removeItem(n),e&&t._triggerChange(n.value)}),this},g.prototype.showDropdown=function(e){var t=this;return this.dropdown.isActive?this:(requestAnimationFrame(function(){t.dropdown.show(),t.containerOuter.open(t.dropdown.distanceFromTopWindow),!e&&t._canSearch&&t.input.focus(),t.passedElement.triggerEvent(y.EVENTS.showDropdown,{})}),this)},g.prototype.hideDropdown=function(e){var t=this;return this.dropdown.isActive?(requestAnimationFrame(function(){t.dropdown.hide(),t.containerOuter.close(),!e&&t._canSearch&&(t.input.removeActiveDescendant(),t.input.blur()),t.passedElement.triggerEvent(y.EVENTS.hideDropdown,{})}),this):this},g.prototype.getValue=function(e){e===void 0&&(e=!1);var t=this._store.activeItems.reduce(function(n,s){var v=e?s.value:s;return n.push(v),n},[]);return this._isSelectOneElement?t[0]:t},g.prototype.setValue=function(e){var t=this;return this.initialised?(e.forEach(function(n){return t._setChoiceOrItem(n)}),this):this},g.prototype.setChoiceByValue=function(e){var t=this;if(!this.initialised||this._isTextElement)return this;var n=Array.isArray(e)?e:[e];return n.forEach(function(s){return t._findAndSelectChoiceByValue(s)}),this},g.prototype.setChoices=function(e,t,n,s){var v=this;if(e===void 0&&(e=[]),t===void 0&&(t="value"),n===void 0&&(n="label"),s===void 0&&(s=!1),!this.initialised)throw new ReferenceError("setChoices was called on a non-initialized instance of Choices");if(!this._isSelectElement)throw new TypeError("setChoices can't be used with INPUT based Choices");if(typeof t!="string"||!t)throw new TypeError("value parameter must be a name of 'value' field in passed objects");if(s&&this.clearChoices(),typeof e=="function"){var P=e(this);if(typeof Promise=="function"&&P instanceof Promise)return new Promise(function(M){return requestAnimationFrame(M)}).then(function(){return v._handleLoadingState(!0)}).then(function(){return P}).then(function(M){return v.setChoices(M,t,n,s)}).catch(function(M){v.config.silent||console.error(M)}).then(function(){return v._handleLoadingState(!1)}).then(function(){return v});if(!Array.isArray(P))throw new TypeError(".setChoices first argument function must return either array of choices or Promise, got: ".concat(typeof P));return this.setChoices(P,t,n,!1)}if(!Array.isArray(e))throw new TypeError(".setChoices must be called either with array of choices with a function resulting into Promise of array of choices");return this.containerOuter.removeLoadingState(),this._startLoading(),e.forEach(function(M){if(M.choices)v._addGroup({id:M.id?parseInt("".concat(M.id),10):null,group:M,valueKey:t,labelKey:n});else{var K=M;v._addChoice({value:K[t],label:K[n],isSelected:!!K.selected,isDisabled:!!K.disabled,placeholder:!!K.placeholder,customProperties:K.customProperties})}}),this._stopLoading(),this},g.prototype.clearChoices=function(){return this._store.dispatch((0,r.clearChoices)()),this},g.prototype.clearStore=function(){return this._store.dispatch((0,O.clearAll)()),this},g.prototype.clearInput=function(){var e=!this._isSelectOneElement;return this.input.clear(e),!this._isTextElement&&this._canSearch&&(this._isSearching=!1,this._store.dispatch((0,r.activateChoices)(!0))),this},g.prototype._render=function(){if(!this._store.isLoading()){this._currentState=this._store.state;var e=this._currentState.choices!==this._prevState.choices||this._currentState.groups!==this._prevState.groups||this._currentState.items!==this._prevState.items,t=this._isSelectElement,n=this._currentState.items!==this._prevState.items;e&&(t&&this._renderChoices(),n&&this._renderItems(),this._prevState=this._currentState)}},g.prototype._renderChoices=function(){var e=this,t=this._store,n=t.activeGroups,s=t.activeChoices,v=document.createDocumentFragment();if(this.choiceList.clear(),this.config.resetScrollPosition&&requestAnimationFrame(function(){return e.choiceList.scrollToTop()}),n.length>=1&&!this._isSearching){var P=s.filter(function(C){return C.placeholder===!0&&C.groupId===-1});P.length>=1&&(v=this._createChoicesFragment(P,v)),v=this._createGroupsFragment(n,s,v)}else s.length>=1&&(v=this._createChoicesFragment(s,v));if(v.childNodes&&v.childNodes.length>0){var M=this._store.activeItems,K=this._canAddItem(M,this.input.value);if(K.response)this.choiceList.append(v),this._highlightChoice();else{var f=this._getTemplate("notice",K.notice);this.choiceList.append(f)}}else{var u=void 0,f=void 0;this._isSearching?(f=typeof this.config.noResultsText=="function"?this.config.noResultsText():this.config.noResultsText,u=this._getTemplate("notice",f,"no-results")):(f=typeof this.config.noChoicesText=="function"?this.config.noChoicesText():this.config.noChoicesText,u=this._getTemplate("notice",f,"no-choices")),this.choiceList.append(u)}},g.prototype._renderItems=function(){var e=this._store.activeItems||[];this.itemList.clear();var t=this._createItemsFragment(e);t.childNodes&&this.itemList.append(t)},g.prototype._createGroupsFragment=function(e,t,n){var s=this;n===void 0&&(n=document.createDocumentFragment());var v=function(P){return t.filter(function(M){return s._isSelectOneElement?M.groupId===P.id:M.groupId===P.id&&(s.config.renderSelectedChoices==="always"||!M.selected)})};return this.config.shouldSort&&e.sort(this.config.sorter),e.forEach(function(P){var M=v(P);if(M.length>=1){var K=s._getTemplate("choiceGroup",P);n.appendChild(K),s._createChoicesFragment(M,n,!0)}}),n},g.prototype._createChoicesFragment=function(e,t,n){var s=this;t===void 0&&(t=document.createDocumentFragment()),n===void 0&&(n=!1);var v=this.config,P=v.renderSelectedChoices,M=v.searchResultLimit,K=v.renderChoiceLimit,f=this._isSearching?k.sortByScore:this.config.sorter,u=function(z){var ee=P==="auto"?s._isSelectOneElement||!z.selected:!0;if(ee){var ae=s._getTemplate("choice",z,s.config.itemSelectText);t.appendChild(ae)}},C=e;P==="auto"&&!this._isSelectOneElement&&(C=e.filter(function(z){return!z.selected}));var Y=C.reduce(function(z,ee){return ee.placeholder?z.placeholderChoices.push(ee):z.normalChoices.push(ee),z},{placeholderChoices:[],normalChoices:[]}),V=Y.placeholderChoices,U=Y.normalChoices;(this.config.shouldSort||this._isSearching)&&U.sort(f);var $=C.length,W=this._isSelectOneElement?_(_([],V,!0),U,!0):U;this._isSearching?$=M:K&&K>0&&!n&&($=K);for(var J=0;J<$;J+=1)W[J]&&u(W[J]);return t},g.prototype._createItemsFragment=function(e,t){var n=this;t===void 0&&(t=document.createDocumentFragment());var s=this.config,v=s.shouldSortItems,P=s.sorter,M=s.removeItemButton;v&&!this._isSelectOneElement&&e.sort(P),this._isTextElement?this.passedElement.value=e.map(function(f){var u=f.value;return u}).join(this.config.delimiter):this.passedElement.options=e;var K=function(f){var u=n._getTemplate("item",f,M);t.appendChild(u)};return e.forEach(K),t},g.prototype._triggerChange=function(e){e!=null&&this.passedElement.triggerEvent(y.EVENTS.change,{value:e})},g.prototype._selectPlaceholderChoice=function(e){this._addItem({value:e.value,label:e.label,choiceId:e.id,groupId:e.groupId,placeholder:e.placeholder}),this._triggerChange(e.value)},g.prototype._handleButtonAction=function(e,t){if(!(!e||!t||!this.config.removeItems||!this.config.removeItemButton)){var n=t.parentNode&&t.parentNode.dataset.id,s=n&&e.find(function(v){return v.id===parseInt(n,10)});s&&(this._removeItem(s),this._triggerChange(s.value),this._isSelectOneElement&&this._store.placeholderChoice&&this._selectPlaceholderChoice(this._store.placeholderChoice))}},g.prototype._handleItemAction=function(e,t,n){var s=this;if(n===void 0&&(n=!1),!(!e||!t||!this.config.removeItems||this._isSelectOneElement)){var v=t.dataset.id;e.forEach(function(P){P.id===parseInt("".concat(v),10)&&!P.highlighted?s.highlightItem(P):!n&&P.highlighted&&s.unhighlightItem(P)}),this.input.focus()}},g.prototype._handleChoiceAction=function(e,t){if(!(!e||!t)){var n=t.dataset.id,s=n&&this._store.getChoiceById(n);if(s){var v=e[0]&&e[0].keyCode?e[0].keyCode:void 0,P=this.dropdown.isActive;if(s.keyCode=v,this.passedElement.triggerEvent(y.EVENTS.choice,{choice:s}),!s.selected&&!s.disabled){var M=this._canAddItem(e,s.value);M.response&&(this._addItem({value:s.value,label:s.label,choiceId:s.id,groupId:s.groupId,customProperties:s.customProperties,placeholder:s.placeholder,keyCode:s.keyCode}),this._triggerChange(s.value))}this.clearInput(),P&&this._isSelectOneElement&&(this.hideDropdown(!0),this.containerOuter.focus())}}},g.prototype._handleBackspace=function(e){if(!(!this.config.removeItems||!e)){var t=e[e.length-1],n=e.some(function(s){return s.highlighted});this.config.editItems&&!n&&t?(this.input.value=t.value,this.input.setWidth(),this._removeItem(t),this._triggerChange(t.value)):(n||this.highlightItem(t,!1),this.removeHighlightedItems(!0))}},g.prototype._startLoading=function(){this._store.dispatch((0,O.setIsLoading)(!0))},g.prototype._stopLoading=function(){this._store.dispatch((0,O.setIsLoading)(!1))},g.prototype._handleLoadingState=function(e){e===void 0&&(e=!0);var t=this.itemList.getChild(".".concat(this.config.classNames.placeholder));e?(this.disable(),this.containerOuter.addLoadingState(),this._isSelectOneElement?t?t.innerHTML=this.config.loadingText:(t=this._getTemplate("placeholder",this.config.loadingText),t&&this.itemList.append(t)):this.input.placeholder=this.config.loadingText):(this.enable(),this.containerOuter.removeLoadingState(),this._isSelectOneElement?t&&(t.innerHTML=this._placeholderValue||""):this.input.placeholder=this._placeholderValue||"")},g.prototype._handleSearch=function(e){if(this.input.isFocussed){var t=this._store.choices,n=this.config,s=n.searchFloor,v=n.searchChoices,P=t.some(function(K){return!K.active});if(e!==null&&typeof e<"u"&&e.length>=s){var M=v?this._searchChoices(e):0;this.passedElement.triggerEvent(y.EVENTS.search,{value:e,resultCount:M})}else P&&(this._isSearching=!1,this._store.dispatch((0,r.activateChoices)(!0)))}},g.prototype._canAddItem=function(e,t){var n=!0,s=typeof this.config.addItemText=="function"?this.config.addItemText(t):this.config.addItemText;if(!this._isSelectOneElement){var v=(0,k.existsInArray)(e,t);this.config.maxItemCount>0&&this.config.maxItemCount<=e.length&&(n=!1,s=typeof this.config.maxItemText=="function"?this.config.maxItemText(this.config.maxItemCount):this.config.maxItemText),!this.config.duplicateItemsAllowed&&v&&n&&(n=!1,s=typeof this.config.uniqueItemText=="function"?this.config.uniqueItemText(t):this.config.uniqueItemText),this._isTextElement&&this.config.addItems&&n&&typeof this.config.addItemFilter=="function"&&!this.config.addItemFilter(t)&&(n=!1,s=typeof this.config.customAddItemText=="function"?this.config.customAddItemText(t):this.config.customAddItemText)}return{response:n,notice:s}},g.prototype._searchChoices=function(e){var t=typeof e=="string"?e.trim():e,n=typeof this._currentValue=="string"?this._currentValue.trim():this._currentValue;if(t.length<1&&t==="".concat(n," "))return 0;var s=this._store.searchableChoices,v=t,P=Object.assign(this.config.fuseOptions,{keys:_([],this.config.searchFields,!0),includeMatches:!0}),M=new a.default(s,P),K=M.search(v);return this._currentValue=t,this._highlightPosition=0,this._isSearching=!0,this._store.dispatch((0,r.filterChoices)(K)),K.length},g.prototype._addEventListeners=function(){var e=document.documentElement;e.addEventListener("touchend",this._onTouchEnd,!0),this.containerOuter.element.addEventListener("keydown",this._onKeyDown,!0),this.containerOuter.element.addEventListener("mousedown",this._onMouseDown,!0),e.addEventListener("click",this._onClick,{passive:!0}),e.addEventListener("touchmove",this._onTouchMove,{passive:!0}),this.dropdown.element.addEventListener("mouseover",this._onMouseOver,{passive:!0}),this._isSelectOneElement&&(this.containerOuter.element.addEventListener("focus",this._onFocus,{passive:!0}),this.containerOuter.element.addEventListener("blur",this._onBlur,{passive:!0})),this.input.element.addEventListener("keyup",this._onKeyUp,{passive:!0}),this.input.element.addEventListener("focus",this._onFocus,{passive:!0}),this.input.element.addEventListener("blur",this._onBlur,{passive:!0}),this.input.element.form&&this.input.element.form.addEventListener("reset",this._onFormReset,{passive:!0}),this.input.addEventListeners()},g.prototype._removeEventListeners=function(){var e=document.documentElement;e.removeEventListener("touchend",this._onTouchEnd,!0),this.containerOuter.element.removeEventListener("keydown",this._onKeyDown,!0),this.containerOuter.element.removeEventListener("mousedown",this._onMouseDown,!0),e.removeEventListener("click",this._onClick),e.removeEventListener("touchmove",this._onTouchMove),this.dropdown.element.removeEventListener("mouseover",this._onMouseOver),this._isSelectOneElement&&(this.containerOuter.element.removeEventListener("focus",this._onFocus),this.containerOuter.element.removeEventListener("blur",this._onBlur)),this.input.element.removeEventListener("keyup",this._onKeyUp),this.input.element.removeEventListener("focus",this._onFocus),this.input.element.removeEventListener("blur",this._onBlur),this.input.element.form&&this.input.element.form.removeEventListener("reset",this._onFormReset),this.input.removeEventListeners()},g.prototype._onKeyDown=function(e){var t=e.keyCode,n=this._store.activeItems,s=this.input.isFocussed,v=this.dropdown.isActive,P=this.itemList.hasChildren(),M=String.fromCharCode(t),K=/[^\x00-\x1F]/.test(M),f=y.KEY_CODES.BACK_KEY,u=y.KEY_CODES.DELETE_KEY,C=y.KEY_CODES.ENTER_KEY,Y=y.KEY_CODES.A_KEY,V=y.KEY_CODES.ESC_KEY,U=y.KEY_CODES.UP_KEY,$=y.KEY_CODES.DOWN_KEY,W=y.KEY_CODES.PAGE_UP_KEY,J=y.KEY_CODES.PAGE_DOWN_KEY;switch(!this._isTextElement&&!v&&K&&(this.showDropdown(),this.input.isFocussed||(this.input.value+=e.key.toLowerCase())),t){case Y:return this._onSelectKey(e,P);case C:return this._onEnterKey(e,n,v);case V:return this._onEscapeKey(v);case U:case W:case $:case J:return this._onDirectionKey(e,v);case u:case f:return this._onDeleteKey(e,n,s);default:}},g.prototype._onKeyUp=function(e){var t=e.target,n=e.keyCode,s=this.input.value,v=this._store.activeItems,P=this._canAddItem(v,s),M=y.KEY_CODES.BACK_KEY,K=y.KEY_CODES.DELETE_KEY;if(this._isTextElement){var f=P.notice&&s;if(f){var u=this._getTemplate("notice",P.notice);this.dropdown.element.innerHTML=u.outerHTML,this.showDropdown(!0)}else this.hideDropdown(!0)}else{var C=n===M||n===K,Y=C&&t&&!t.value,V=!this._isTextElement&&this._isSearching,U=this._canSearch&&P.response;Y&&V?(this._isSearching=!1,this._store.dispatch((0,r.activateChoices)(!0))):U&&this._handleSearch(this.input.rawValue)}this._canSearch=this.config.searchEnabled},g.prototype._onSelectKey=function(e,t){var n=e.ctrlKey,s=e.metaKey,v=n||s;if(v&&t){this._canSearch=!1;var P=this.config.removeItems&&!this.input.value&&this.input.element===document.activeElement;P&&this.highlightAll()}},g.prototype._onEnterKey=function(e,t,n){var s=e.target,v=y.KEY_CODES.ENTER_KEY,P=s&&s.hasAttribute("data-button");if(this._isTextElement&&s&&s.value){var M=this.input.value,K=this._canAddItem(t,M);K.response&&(this.hideDropdown(!0),this._addItem({value:M}),this._triggerChange(M),this.clearInput())}if(P&&(this._handleButtonAction(t,s),e.preventDefault()),n){var f=this.dropdown.getChild(".".concat(this.config.classNames.highlightedState));f&&(t[0]&&(t[0].keyCode=v),this._handleChoiceAction(t,f)),e.preventDefault()}else this._isSelectOneElement&&(this.showDropdown(),e.preventDefault())},g.prototype._onEscapeKey=function(e){e&&(this.hideDropdown(!0),this.containerOuter.focus())},g.prototype._onDirectionKey=function(e,t){var n=e.keyCode,s=e.metaKey,v=y.KEY_CODES.DOWN_KEY,P=y.KEY_CODES.PAGE_UP_KEY,M=y.KEY_CODES.PAGE_DOWN_KEY;if(t||this._isSelectOneElement){this.showDropdown(),this._canSearch=!1;var K=n===v||n===M?1:-1,f=s||n===M||n===P,u="[data-choice-selectable]",C=void 0;if(f)K>0?C=this.dropdown.element.querySelector("".concat(u,":last-of-type")):C=this.dropdown.element.querySelector(u);else{var Y=this.dropdown.element.querySelector(".".concat(this.config.classNames.highlightedState));Y?C=(0,k.getAdjacentEl)(Y,u,K):C=this.dropdown.element.querySelector(u)}C&&((0,k.isScrolledIntoView)(C,this.choiceList.element,K)||this.choiceList.scrollToChildElement(C,K),this._highlightChoice(C)),e.preventDefault()}},g.prototype._onDeleteKey=function(e,t,n){var s=e.target;!this._isSelectOneElement&&!s.value&&n&&(this._handleBackspace(t),e.preventDefault())},g.prototype._onTouchMove=function(){this._wasTap&&(this._wasTap=!1)},g.prototype._onTouchEnd=function(e){var t=(e||e.touches[0]).target,n=this._wasTap&&this.containerOuter.element.contains(t);if(n){var s=t===this.containerOuter.element||t===this.containerInner.element;s&&(this._isTextElement?this.input.focus():this._isSelectMultipleElement&&this.showDropdown()),e.stopPropagation()}this._wasTap=!0},g.prototype._onMouseDown=function(e){var t=e.target;if(t instanceof HTMLElement){if(E&&this.choiceList.element.contains(t)){var n=this.choiceList.element.firstElementChild,s=this._direction==="ltr"?e.offsetX>=n.offsetWidth:e.offsetX0;s&&this.unhighlightAll(),this.containerOuter.removeFocusState(),this.hideDropdown(!0)}},g.prototype._onFocus=function(e){var t,n=this,s=e.target,v=s&&this.containerOuter.element.contains(s);if(v){var P=(t={},t[y.TEXT_TYPE]=function(){s===n.input.element&&n.containerOuter.addFocusState()},t[y.SELECT_ONE_TYPE]=function(){n.containerOuter.addFocusState(),s===n.input.element&&n.showDropdown(!0)},t[y.SELECT_MULTIPLE_TYPE]=function(){s===n.input.element&&(n.showDropdown(!0),n.containerOuter.addFocusState())},t);P[this.passedElement.element.type]()}},g.prototype._onBlur=function(e){var t,n=this,s=e.target,v=s&&this.containerOuter.element.contains(s);if(v&&!this._isScrollingOnIe){var P=this._store.activeItems,M=P.some(function(f){return f.highlighted}),K=(t={},t[y.TEXT_TYPE]=function(){s===n.input.element&&(n.containerOuter.removeFocusState(),M&&n.unhighlightAll(),n.hideDropdown(!0))},t[y.SELECT_ONE_TYPE]=function(){n.containerOuter.removeFocusState(),(s===n.input.element||s===n.containerOuter.element&&!n._canSearch)&&n.hideDropdown(!0)},t[y.SELECT_MULTIPLE_TYPE]=function(){s===n.input.element&&(n.containerOuter.removeFocusState(),n.hideDropdown(!0),M&&n.unhighlightAll())},t);K[this.passedElement.element.type]()}else this._isScrollingOnIe=!1,this.input.element.focus()},g.prototype._onFormReset=function(){this._store.dispatch((0,O.resetTo)(this._initialState))},g.prototype._highlightChoice=function(e){var t=this;e===void 0&&(e=null);var n=Array.from(this.dropdown.element.querySelectorAll("[data-choice-selectable]"));if(n.length){var s=e,v=Array.from(this.dropdown.element.querySelectorAll(".".concat(this.config.classNames.highlightedState)));v.forEach(function(P){P.classList.remove(t.config.classNames.highlightedState),P.setAttribute("aria-selected","false")}),s?this._highlightPosition=n.indexOf(s):(n.length>this._highlightPosition?s=n[this._highlightPosition]:s=n[n.length-1],s||(s=n[0])),s.classList.add(this.config.classNames.highlightedState),s.setAttribute("aria-selected","true"),this.passedElement.triggerEvent(y.EVENTS.highlightChoice,{el:s}),this.dropdown.isActive&&(this.input.setActiveDescendant(s.id),this.containerOuter.setActiveDescendant(s.id))}},g.prototype._addItem=function(e){var t=e.value,n=e.label,s=n===void 0?null:n,v=e.choiceId,P=v===void 0?-1:v,M=e.groupId,K=M===void 0?-1:M,f=e.customProperties,u=f===void 0?{}:f,C=e.placeholder,Y=C===void 0?!1:C,V=e.keyCode,U=V===void 0?-1:V,$=typeof t=="string"?t.trim():t,W=this._store.items,J=s||$,z=P||-1,ee=K>=0?this._store.getGroupById(K):null,ae=W?W.length+1:1;this.config.prependValue&&($=this.config.prependValue+$.toString()),this.config.appendValue&&($+=this.config.appendValue.toString()),this._store.dispatch((0,l.addItem)({value:$,label:J,id:ae,choiceId:z,groupId:K,customProperties:u,placeholder:Y,keyCode:U})),this._isSelectOneElement&&this.removeActiveItems(ae),this.passedElement.triggerEvent(y.EVENTS.addItem,{id:ae,value:$,label:J,customProperties:u,groupValue:ee&&ee.value?ee.value:null,keyCode:U})},g.prototype._removeItem=function(e){var t=e.id,n=e.value,s=e.label,v=e.customProperties,P=e.choiceId,M=e.groupId,K=M&&M>=0?this._store.getGroupById(M):null;!t||!P||(this._store.dispatch((0,l.removeItem)(t,P)),this.passedElement.triggerEvent(y.EVENTS.removeItem,{id:t,value:n,label:s,customProperties:v,groupValue:K&&K.value?K.value:null}))},g.prototype._addChoice=function(e){var t=e.value,n=e.label,s=n===void 0?null:n,v=e.isSelected,P=v===void 0?!1:v,M=e.isDisabled,K=M===void 0?!1:M,f=e.groupId,u=f===void 0?-1:f,C=e.customProperties,Y=C===void 0?{}:C,V=e.placeholder,U=V===void 0?!1:V,$=e.keyCode,W=$===void 0?-1:$;if(!(typeof t>"u"||t===null)){var J=this._store.choices,z=s||t,ee=J?J.length+1:1,ae="".concat(this._baseId,"-").concat(this._idNames.itemChoice,"-").concat(ee);this._store.dispatch((0,r.addChoice)({id:ee,groupId:u,elementId:ae,value:t,label:z,disabled:K,customProperties:Y,placeholder:U,keyCode:W})),P&&this._addItem({value:t,label:z,choiceId:ee,customProperties:Y,placeholder:U,keyCode:W})}},g.prototype._addGroup=function(e){var t=this,n=e.group,s=e.id,v=e.valueKey,P=v===void 0?"value":v,M=e.labelKey,K=M===void 0?"label":M,f=(0,k.isType)("Object",n)?n.choices:Array.from(n.getElementsByTagName("OPTION")),u=s||Math.floor(new Date().valueOf()*Math.random()),C=n.disabled?n.disabled:!1;if(f){this._store.dispatch((0,c.addGroup)({value:n.label,id:u,active:!0,disabled:C}));var Y=function(V){var U=V.disabled||V.parentNode&&V.parentNode.disabled;t._addChoice({value:V[P],label:(0,k.isType)("Object",V)?V[K]:V.innerHTML,isSelected:V.selected,isDisabled:U,groupId:u,customProperties:V.customProperties,placeholder:V.placeholder})};f.forEach(Y)}else this._store.dispatch((0,c.addGroup)({value:n.label,id:n.id,active:!1,disabled:n.disabled}))},g.prototype._getTemplate=function(e){for(var t,n=[],s=1;s0?this.element.scrollTop+y-O:a.offsetTop;requestAnimationFrame(function(){c._animateScroll(D,r)})}},d.prototype._scrollDown=function(a,r,c){var l=(c-a)/r,O=l>1?l:1;this.element.scrollTop=a+O},d.prototype._scrollUp=function(a,r,c){var l=(a-c)/r,O=l>1?l:1;this.element.scrollTop=a-O},d.prototype._animateScroll=function(a,r){var c=this,l=_.SCROLLING_SPEED,O=this.element.scrollTop,L=!1;r>0?(this._scrollDown(O,l,a),Oa&&(L=!0)),L&&requestAnimationFrame(function(){c._animateScroll(a,r)})},d}();i.default=h},730:function(j,i,b){Object.defineProperty(i,"__esModule",{value:!0});var _=b(799),h=function(){function d(a){var r=a.element,c=a.classNames;if(this.element=r,this.classNames=c,!(r instanceof HTMLInputElement)&&!(r instanceof HTMLSelectElement))throw new TypeError("Invalid element passed");this.isDisabled=!1}return Object.defineProperty(d.prototype,"isActive",{get:function(){return this.element.dataset.choice==="active"},enumerable:!1,configurable:!0}),Object.defineProperty(d.prototype,"dir",{get:function(){return this.element.dir},enumerable:!1,configurable:!0}),Object.defineProperty(d.prototype,"value",{get:function(){return this.element.value},set:function(a){this.element.value=a},enumerable:!1,configurable:!0}),d.prototype.conceal=function(){this.element.classList.add(this.classNames.input),this.element.hidden=!0,this.element.tabIndex=-1;var a=this.element.getAttribute("style");a&&this.element.setAttribute("data-choice-orig-style",a),this.element.setAttribute("data-choice","active")},d.prototype.reveal=function(){this.element.classList.remove(this.classNames.input),this.element.hidden=!1,this.element.removeAttribute("tabindex");var a=this.element.getAttribute("data-choice-orig-style");a?(this.element.removeAttribute("data-choice-orig-style"),this.element.setAttribute("style",a)):this.element.removeAttribute("style"),this.element.removeAttribute("data-choice"),this.element.value=this.element.value},d.prototype.enable=function(){this.element.removeAttribute("disabled"),this.element.disabled=!1,this.isDisabled=!1},d.prototype.disable=function(){this.element.setAttribute("disabled",""),this.element.disabled=!0,this.isDisabled=!0},d.prototype.triggerEvent=function(a,r){(0,_.dispatchEvent)(this.element,a,r)},d}();i.default=h},541:function(j,i,b){var _=this&&this.__extends||function(){var r=function(c,l){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(O,L){O.__proto__=L}||function(O,L){for(var y in L)Object.prototype.hasOwnProperty.call(L,y)&&(O[y]=L[y])},r(c,l)};return function(c,l){if(typeof l!="function"&&l!==null)throw new TypeError("Class extends value "+String(l)+" is not a constructor or null");r(c,l);function O(){this.constructor=c}c.prototype=l===null?Object.create(l):(O.prototype=l.prototype,new O)}}(),h=this&&this.__importDefault||function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(i,"__esModule",{value:!0});var d=h(b(730)),a=function(r){_(c,r);function c(l){var O=l.element,L=l.classNames,y=l.delimiter,D=r.call(this,{element:O,classNames:L})||this;return D.delimiter=y,D}return Object.defineProperty(c.prototype,"value",{get:function(){return this.element.value},set:function(l){this.element.setAttribute("value",l),this.element.value=l},enumerable:!1,configurable:!0}),c}(d.default);i.default=a},982:function(j,i,b){var _=this&&this.__extends||function(){var r=function(c,l){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(O,L){O.__proto__=L}||function(O,L){for(var y in L)Object.prototype.hasOwnProperty.call(L,y)&&(O[y]=L[y])},r(c,l)};return function(c,l){if(typeof l!="function"&&l!==null)throw new TypeError("Class extends value "+String(l)+" is not a constructor or null");r(c,l);function O(){this.constructor=c}c.prototype=l===null?Object.create(l):(O.prototype=l.prototype,new O)}}(),h=this&&this.__importDefault||function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(i,"__esModule",{value:!0});var d=h(b(730)),a=function(r){_(c,r);function c(l){var O=l.element,L=l.classNames,y=l.template,D=r.call(this,{element:O,classNames:L})||this;return D.template=y,D}return Object.defineProperty(c.prototype,"placeholderOption",{get:function(){return this.element.querySelector('option[value=""]')||this.element.querySelector("option[placeholder]")},enumerable:!1,configurable:!0}),Object.defineProperty(c.prototype,"optionGroups",{get:function(){return Array.from(this.element.getElementsByTagName("OPTGROUP"))},enumerable:!1,configurable:!0}),Object.defineProperty(c.prototype,"options",{get:function(){return Array.from(this.element.options)},set:function(l){var O=this,L=document.createDocumentFragment(),y=function(D){var k=O.template(D);L.appendChild(k)};l.forEach(function(D){return y(D)}),this.appendDocFragment(L)},enumerable:!1,configurable:!0}),c.prototype.appendDocFragment=function(l){this.element.innerHTML="",this.element.appendChild(l)},c}(d.default);i.default=a},883:function(j,i){Object.defineProperty(i,"__esModule",{value:!0}),i.SCROLLING_SPEED=i.SELECT_MULTIPLE_TYPE=i.SELECT_ONE_TYPE=i.TEXT_TYPE=i.KEY_CODES=i.ACTION_TYPES=i.EVENTS=void 0,i.EVENTS={showDropdown:"showDropdown",hideDropdown:"hideDropdown",change:"change",choice:"choice",search:"search",addItem:"addItem",removeItem:"removeItem",highlightItem:"highlightItem",highlightChoice:"highlightChoice",unhighlightItem:"unhighlightItem"},i.ACTION_TYPES={ADD_CHOICE:"ADD_CHOICE",FILTER_CHOICES:"FILTER_CHOICES",ACTIVATE_CHOICES:"ACTIVATE_CHOICES",CLEAR_CHOICES:"CLEAR_CHOICES",ADD_GROUP:"ADD_GROUP",ADD_ITEM:"ADD_ITEM",REMOVE_ITEM:"REMOVE_ITEM",HIGHLIGHT_ITEM:"HIGHLIGHT_ITEM",CLEAR_ALL:"CLEAR_ALL",RESET_TO:"RESET_TO",SET_IS_LOADING:"SET_IS_LOADING"},i.KEY_CODES={BACK_KEY:46,DELETE_KEY:8,ENTER_KEY:13,A_KEY:65,ESC_KEY:27,UP_KEY:38,DOWN_KEY:40,PAGE_UP_KEY:33,PAGE_DOWN_KEY:34},i.TEXT_TYPE="text",i.SELECT_ONE_TYPE="select-one",i.SELECT_MULTIPLE_TYPE="select-multiple",i.SCROLLING_SPEED=4},789:function(j,i,b){Object.defineProperty(i,"__esModule",{value:!0}),i.DEFAULT_CONFIG=i.DEFAULT_CLASSNAMES=void 0;var _=b(799);i.DEFAULT_CLASSNAMES={containerOuter:"choices",containerInner:"choices__inner",input:"choices__input",inputCloned:"choices__input--cloned",list:"choices__list",listItems:"choices__list--multiple",listSingle:"choices__list--single",listDropdown:"choices__list--dropdown",item:"choices__item",itemSelectable:"choices__item--selectable",itemDisabled:"choices__item--disabled",itemChoice:"choices__item--choice",placeholder:"choices__placeholder",group:"choices__group",groupHeading:"choices__heading",button:"choices__button",activeState:"is-active",focusState:"is-focused",openState:"is-open",disabledState:"is-disabled",highlightedState:"is-highlighted",selectedState:"is-selected",flippedState:"is-flipped",loadingState:"is-loading",noResults:"has-no-results",noChoices:"has-no-choices"},i.DEFAULT_CONFIG={items:[],choices:[],silent:!1,renderChoiceLimit:-1,maxItemCount:-1,addItems:!0,addItemFilter:null,removeItems:!0,removeItemButton:!1,editItems:!1,allowHTML:!0,duplicateItemsAllowed:!0,delimiter:",",paste:!0,searchEnabled:!0,searchChoices:!0,searchFloor:1,searchResultLimit:4,searchFields:["label","value"],position:"auto",resetScrollPosition:!0,shouldSort:!0,shouldSortItems:!1,sorter:_.sortByAlpha,placeholder:!0,placeholderValue:null,searchPlaceholderValue:null,prependValue:null,appendValue:null,renderSelectedChoices:"auto",loadingText:"Loading...",noResultsText:"No results found",noChoicesText:"No choices to choose from",itemSelectText:"Press to select",uniqueItemText:"Only unique values can be added",customAddItemText:"Only values matching specific conditions can be added",addItemText:function(h){return'Press Enter to add "'.concat((0,_.sanitise)(h),'"')},maxItemText:function(h){return"Only ".concat(h," values can be added")},valueComparer:function(h,d){return h===d},fuseOptions:{includeScore:!0},labelId:"",callbackOnInit:null,callbackOnCreateTemplates:null,classNames:i.DEFAULT_CLASSNAMES}},18:function(j,i){Object.defineProperty(i,"__esModule",{value:!0})},978:function(j,i){Object.defineProperty(i,"__esModule",{value:!0})},948:function(j,i){Object.defineProperty(i,"__esModule",{value:!0})},359:function(j,i){Object.defineProperty(i,"__esModule",{value:!0})},285:function(j,i){Object.defineProperty(i,"__esModule",{value:!0})},533:function(j,i){Object.defineProperty(i,"__esModule",{value:!0})},187:function(j,i,b){var _=this&&this.__createBinding||(Object.create?function(d,a,r,c){c===void 0&&(c=r);var l=Object.getOwnPropertyDescriptor(a,r);(!l||("get"in l?!a.__esModule:l.writable||l.configurable))&&(l={enumerable:!0,get:function(){return a[r]}}),Object.defineProperty(d,c,l)}:function(d,a,r,c){c===void 0&&(c=r),d[c]=a[r]}),h=this&&this.__exportStar||function(d,a){for(var r in d)r!=="default"&&!Object.prototype.hasOwnProperty.call(a,r)&&_(a,d,r)};Object.defineProperty(i,"__esModule",{value:!0}),h(b(18),i),h(b(978),i),h(b(948),i),h(b(359),i),h(b(285),i),h(b(533),i),h(b(287),i),h(b(132),i),h(b(837),i),h(b(598),i),h(b(369),i),h(b(37),i),h(b(47),i),h(b(923),i),h(b(876),i)},287:function(j,i){Object.defineProperty(i,"__esModule",{value:!0})},132:function(j,i){Object.defineProperty(i,"__esModule",{value:!0})},837:function(j,i){Object.defineProperty(i,"__esModule",{value:!0})},598:function(j,i){Object.defineProperty(i,"__esModule",{value:!0})},37:function(j,i){Object.defineProperty(i,"__esModule",{value:!0})},369:function(j,i){Object.defineProperty(i,"__esModule",{value:!0})},47:function(j,i){Object.defineProperty(i,"__esModule",{value:!0})},923:function(j,i){Object.defineProperty(i,"__esModule",{value:!0})},876:function(j,i){Object.defineProperty(i,"__esModule",{value:!0})},799:function(j,i){Object.defineProperty(i,"__esModule",{value:!0}),i.parseCustomProperties=i.diff=i.cloneObject=i.existsInArray=i.dispatchEvent=i.sortByScore=i.sortByAlpha=i.strToEl=i.sanitise=i.isScrolledIntoView=i.getAdjacentEl=i.wrap=i.isType=i.getType=i.generateId=i.generateChars=i.getRandomNumber=void 0;var b=function(E,w){return Math.floor(Math.random()*(w-E)+E)};i.getRandomNumber=b;var _=function(E){return Array.from({length:E},function(){return(0,i.getRandomNumber)(0,36).toString(36)}).join("")};i.generateChars=_;var h=function(E,w){var N=E.id||E.name&&"".concat(E.name,"-").concat((0,i.generateChars)(2))||(0,i.generateChars)(4);return N=N.replace(/(:|\.|\[|\]|,)/g,""),N="".concat(w,"-").concat(N),N};i.generateId=h;var d=function(E){return Object.prototype.toString.call(E).slice(8,-1)};i.getType=d;var a=function(E,w){return w!=null&&(0,i.getType)(w)===E};i.isType=a;var r=function(E,w){return w===void 0&&(w=document.createElement("div")),E.parentNode&&(E.nextSibling?E.parentNode.insertBefore(w,E.nextSibling):E.parentNode.appendChild(w)),w.appendChild(E)};i.wrap=r;var c=function(E,w,N){N===void 0&&(N=1);for(var g="".concat(N>0?"next":"previous","ElementSibling"),e=E[g];e;){if(e.matches(w))return e;e=e[g]}return e};i.getAdjacentEl=c;var l=function(E,w,N){if(N===void 0&&(N=1),!E)return!1;var g;return N>0?g=w.scrollTop+w.offsetHeight>=E.offsetTop+E.offsetHeight:g=E.offsetTop>=w.scrollTop,g};i.isScrolledIntoView=l;var O=function(E){return typeof E!="string"?E:E.replace(/&/g,"&").replace(/>/g,">").replace(/-1?h.map(function(y){var D=y;return D.id===parseInt("".concat(c.choiceId),10)&&(D.selected=!0),D}):h}case"REMOVE_ITEM":{var l=d;return l.choiceId&&l.choiceId>-1?h.map(function(y){var D=y;return D.id===parseInt("".concat(l.choiceId),10)&&(D.selected=!1),D}):h}case"FILTER_CHOICES":{var O=d;return h.map(function(y){var D=y;return D.active=O.results.some(function(k){var Q=k.item,Z=k.score;return Q.id===D.id?(D.score=Z,!0):!1}),D})}case"ACTIVATE_CHOICES":{var L=d;return h.map(function(y){var D=y;return D.active=L.active,D})}case"CLEAR_CHOICES":return i.defaultState;default:return h}}i.default=_},871:function(j,i){var b=this&&this.__spreadArray||function(h,d,a){if(a||arguments.length===2)for(var r=0,c=d.length,l;r0?"treeitem":"option"),Object.assign(t.dataset,{choice:"",id:Q,value:Z,selectText:d}),N?(t.classList.add(D),t.dataset.choiceDisabled="",t.setAttribute("aria-disabled","true")):(t.classList.add(L),t.dataset.choiceSelectable=""),t},input:function(_,h){var d=_.classNames,a=d.input,r=d.inputCloned,c=Object.assign(document.createElement("input"),{type:"search",name:"search_terms",className:"".concat(a," ").concat(r),autocomplete:"off",autocapitalize:"off",spellcheck:!1});return c.setAttribute("role","textbox"),c.setAttribute("aria-autocomplete","list"),c.setAttribute("aria-label",h),c},dropdown:function(_){var h=_.classNames,d=h.list,a=h.listDropdown,r=document.createElement("div");return r.classList.add(d,a),r.setAttribute("aria-expanded","false"),r},notice:function(_,h,d){var a,r=_.allowHTML,c=_.classNames,l=c.item,O=c.itemChoice,L=c.noResults,y=c.noChoices;d===void 0&&(d="");var D=[l,O];return d==="no-choices"?D.push(y):d==="no-results"&&D.push(L),Object.assign(document.createElement("div"),(a={},a[r?"innerHTML":"innerText"]=h,a.className=D.join(" "),a))},option:function(_){var h=_.label,d=_.value,a=_.customProperties,r=_.active,c=_.disabled,l=new Option(h,d,!1,r);return a&&(l.dataset.customProperties="".concat(a)),l.disabled=!!c,l}};i.default=b},996:function(j){var i=function(w){return b(w)&&!_(w)};function b(E){return!!E&&typeof E=="object"}function _(E){var w=Object.prototype.toString.call(E);return w==="[object RegExp]"||w==="[object Date]"||a(E)}var h=typeof Symbol=="function"&&Symbol.for,d=h?Symbol.for("react.element"):60103;function a(E){return E.$$typeof===d}function r(E){return Array.isArray(E)?[]:{}}function c(E,w){return w.clone!==!1&&w.isMergeableObject(E)?Z(r(E),E,w):E}function l(E,w,N){return E.concat(w).map(function(g){return c(g,N)})}function O(E,w){if(!w.customMerge)return Z;var N=w.customMerge(E);return typeof N=="function"?N:Z}function L(E){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(E).filter(function(w){return E.propertyIsEnumerable(w)}):[]}function y(E){return Object.keys(E).concat(L(E))}function D(E,w){try{return w in E}catch{return!1}}function k(E,w){return D(E,w)&&!(Object.hasOwnProperty.call(E,w)&&Object.propertyIsEnumerable.call(E,w))}function Q(E,w,N){var g={};return N.isMergeableObject(E)&&y(E).forEach(function(e){g[e]=c(E[e],N)}),y(w).forEach(function(e){k(E,e)||(D(E,e)&&N.isMergeableObject(w[e])?g[e]=O(e,N)(E[e],w[e],N):g[e]=c(w[e],N))}),g}function Z(E,w,N){N=N||{},N.arrayMerge=N.arrayMerge||l,N.isMergeableObject=N.isMergeableObject||i,N.cloneUnlessOtherwiseSpecified=c;var g=Array.isArray(w),e=Array.isArray(E),t=g===e;return t?g?N.arrayMerge(E,w,N):Q(E,w,N):c(w,N)}Z.all=function(w,N){if(!Array.isArray(w))throw new Error("first argument should be an array");return w.reduce(function(g,e){return Z(g,e,N)},{})};var ne=Z;j.exports=ne},221:function(j,i,b){b.r(i),b.d(i,{default:function(){return Se}});function _(p){return Array.isArray?Array.isArray(p):k(p)==="[object Array]"}let h=1/0;function d(p){if(typeof p=="string")return p;let o=p+"";return o=="0"&&1/p==-h?"-0":o}function a(p){return p==null?"":d(p)}function r(p){return typeof p=="string"}function c(p){return typeof p=="number"}function l(p){return p===!0||p===!1||L(p)&&k(p)=="[object Boolean]"}function O(p){return typeof p=="object"}function L(p){return O(p)&&p!==null}function y(p){return p!=null}function D(p){return!p.trim().length}function k(p){return p==null?p===void 0?"[object Undefined]":"[object Null]":Object.prototype.toString.call(p)}let Q="Extended search is not available",Z="Incorrect 'index' type",ne=p=>`Invalid value for key ${p}`,E=p=>`Pattern length exceeds max of ${p}.`,w=p=>`Missing ${p} property in key`,N=p=>`Property 'weight' in key '${p}' must be a positive integer`,g=Object.prototype.hasOwnProperty;class e{constructor(o){this._keys=[],this._keyMap={};let m=0;o.forEach(S=>{let I=t(S);m+=I.weight,this._keys.push(I),this._keyMap[I.id]=I,m+=I.weight}),this._keys.forEach(S=>{S.weight/=m})}get(o){return this._keyMap[o]}keys(){return this._keys}toJSON(){return JSON.stringify(this._keys)}}function t(p){let o=null,m=null,S=null,I=1,T=null;if(r(p)||_(p))S=p,o=n(p),m=s(p);else{if(!g.call(p,"name"))throw new Error(w("name"));let A=p.name;if(S=A,g.call(p,"weight")&&(I=p.weight,I<=0))throw new Error(N(A));o=n(A),m=s(A),T=p.getFn}return{path:o,id:m,weight:I,src:S,getFn:T}}function n(p){return _(p)?p:p.split(".")}function s(p){return _(p)?p.join("."):p}function v(p,o){let m=[],S=!1,I=(T,A,R)=>{if(y(T))if(!A[R])m.push(T);else{let F=A[R],H=T[F];if(!y(H))return;if(R===A.length-1&&(r(H)||c(H)||l(H)))m.push(a(H));else if(_(H)){S=!0;for(let B=0,x=H.length;Bp.score===o.score?p.idx{this._keysMap[m.id]=S})}create(){this.isCreated||!this.docs.length||(this.isCreated=!0,r(this.docs[0])?this.docs.forEach((o,m)=>{this._addString(o,m)}):this.docs.forEach((o,m)=>{this._addObject(o,m)}),this.norm.clear())}add(o){let m=this.size();r(o)?this._addString(o,m):this._addObject(o,m)}removeAt(o){this.records.splice(o,1);for(let m=o,S=this.size();m{let A=I.getFn?I.getFn(o):this.getFn(o,I.path);if(y(A)){if(_(A)){let R=[],F=[{nestedArrIndex:-1,value:A}];for(;F.length;){let{nestedArrIndex:H,value:B}=F.pop();if(y(B))if(r(B)&&!D(B)){let x={v:B,i:H,n:this.norm.get(B)};R.push(x)}else _(B)&&B.forEach((x,G)=>{F.push({nestedArrIndex:G,value:x})})}S.$[T]=R}else if(r(A)&&!D(A)){let R={v:A,n:this.norm.get(A)};S.$[T]=R}}}),this.records.push(S)}toJSON(){return{keys:this.keys,records:this.records}}}function U(p,o,{getFn:m=u.getFn,fieldNormWeight:S=u.fieldNormWeight}={}){let I=new V({getFn:m,fieldNormWeight:S});return I.setKeys(p.map(t)),I.setSources(o),I.create(),I}function $(p,{getFn:o=u.getFn,fieldNormWeight:m=u.fieldNormWeight}={}){let{keys:S,records:I}=p,T=new V({getFn:o,fieldNormWeight:m});return T.setKeys(S),T.setIndexRecords(I),T}function W(p,{errors:o=0,currentLocation:m=0,expectedLocation:S=0,distance:I=u.distance,ignoreLocation:T=u.ignoreLocation}={}){let A=o/p.length;if(T)return A;let R=Math.abs(S-m);return I?A+R/I:R?1:A}function J(p=[],o=u.minMatchCharLength){let m=[],S=-1,I=-1,T=0;for(let A=p.length;T=o&&m.push([S,I]),S=-1)}return p[T-1]&&T-S>=o&&m.push([S,T-1]),m}let z=32;function ee(p,o,m,{location:S=u.location,distance:I=u.distance,threshold:T=u.threshold,findAllMatches:A=u.findAllMatches,minMatchCharLength:R=u.minMatchCharLength,includeMatches:F=u.includeMatches,ignoreLocation:H=u.ignoreLocation}={}){if(o.length>z)throw new Error(E(z));let B=o.length,x=p.length,G=Math.max(0,Math.min(S,x)),q=T,re=G,ue=R>1||F,Ee=ue?Array(x):[],ve;for(;(ve=p.indexOf(o,re))>-1;){let he=W(o,{currentLocation:ve,expectedLocation:G,distance:I,ignoreLocation:H});if(q=Math.min(he,q),re=ve+B,ue){let ge=0;for(;ge=Ue;fe-=1){let Le=fe-1,We=m[p.charAt(Le)];if(ue&&(Ee[Le]=+!!We),Oe[fe]=(Oe[fe+1]<<1|1)&We,he&&(Oe[fe]|=(Ie[fe+1]|Ie[fe])<<1|1|Ie[fe+1]),Oe[fe]&at&&(be=W(o,{errors:he,currentLocation:Le,expectedLocation:G,distance:I,ignoreLocation:H}),be<=q)){if(q=be,re=Le,re<=G)break;Ue=Math.max(1,2*G-re)}}if(W(o,{errors:he+1,currentLocation:G,expectedLocation:G,distance:I,ignoreLocation:H})>q)break;Ie=Oe}let Ke={isMatch:re>=0,score:Math.max(.001,be)};if(ue){let he=J(Ee,R);he.length?F&&(Ke.indices=he):Ke.isMatch=!1}return Ke}function ae(p){let o={};for(let m=0,S=p.length;m{this.chunks.push({pattern:G,alphabet:ae(G),startIndex:q})},x=this.pattern.length;if(x>z){let G=0,q=x%z,re=x-q;for(;G{let{isMatch:ve,score:Ie,indices:be}=ee(o,re,ue,{location:I+Ee,distance:T,threshold:A,findAllMatches:R,minMatchCharLength:F,includeMatches:S,ignoreLocation:H});ve&&(G=!0),x+=Ie,ve&&be&&(B=[...B,...be])});let q={isMatch:G,score:G?x/this.chunks.length:1};return G&&S&&(q.indices=B),q}}class le{constructor(o){this.pattern=o}static isMultiMatch(o){return _e(o,this.multiRegex)}static isSingleMatch(o){return _e(o,this.singleRegex)}search(){}}function _e(p,o){let m=p.match(o);return m?m[1]:null}class te extends le{constructor(o){super(o)}static get type(){return"exact"}static get multiRegex(){return/^="(.*)"$/}static get singleRegex(){return/^=(.*)$/}search(o){let m=o===this.pattern;return{isMatch:m,score:m?0:1,indices:[0,this.pattern.length-1]}}}class de extends le{constructor(o){super(o)}static get type(){return"inverse-exact"}static get multiRegex(){return/^!"(.*)"$/}static get singleRegex(){return/^!(.*)$/}search(o){let S=o.indexOf(this.pattern)===-1;return{isMatch:S,score:S?0:1,indices:[0,o.length-1]}}}class pe extends le{constructor(o){super(o)}static get type(){return"prefix-exact"}static get multiRegex(){return/^\^"(.*)"$/}static get singleRegex(){return/^\^(.*)$/}search(o){let m=o.startsWith(this.pattern);return{isMatch:m,score:m?0:1,indices:[0,this.pattern.length-1]}}}class oe extends le{constructor(o){super(o)}static get type(){return"inverse-prefix-exact"}static get multiRegex(){return/^!\^"(.*)"$/}static get singleRegex(){return/^!\^(.*)$/}search(o){let m=!o.startsWith(this.pattern);return{isMatch:m,score:m?0:1,indices:[0,o.length-1]}}}class Te extends le{constructor(o){super(o)}static get type(){return"suffix-exact"}static get multiRegex(){return/^"(.*)"\$$/}static get singleRegex(){return/^(.*)\$$/}search(o){let m=o.endsWith(this.pattern);return{isMatch:m,score:m?0:1,indices:[o.length-this.pattern.length,o.length-1]}}}class Pe extends le{constructor(o){super(o)}static get type(){return"inverse-suffix-exact"}static get multiRegex(){return/^!"(.*)"\$$/}static get singleRegex(){return/^!(.*)\$$/}search(o){let m=!o.endsWith(this.pattern);return{isMatch:m,score:m?0:1,indices:[0,o.length-1]}}}class He extends le{constructor(o,{location:m=u.location,threshold:S=u.threshold,distance:I=u.distance,includeMatches:T=u.includeMatches,findAllMatches:A=u.findAllMatches,minMatchCharLength:R=u.minMatchCharLength,isCaseSensitive:F=u.isCaseSensitive,ignoreLocation:H=u.ignoreLocation}={}){super(o),this._bitapSearch=new ce(o,{location:m,threshold:S,distance:I,includeMatches:T,findAllMatches:A,minMatchCharLength:R,isCaseSensitive:F,ignoreLocation:H})}static get type(){return"fuzzy"}static get multiRegex(){return/^"(.*)"$/}static get singleRegex(){return/^(.*)$/}search(o){return this._bitapSearch.searchIn(o)}}class Be extends le{constructor(o){super(o)}static get type(){return"include"}static get multiRegex(){return/^'"(.*)"$/}static get singleRegex(){return/^'(.*)$/}search(o){let m=0,S,I=[],T=this.pattern.length;for(;(S=o.indexOf(this.pattern,m))>-1;)m=S+T,I.push([S,m-1]);let A=!!I.length;return{isMatch:A,score:A?0:1,indices:I}}}let Me=[te,Be,pe,oe,Pe,Te,de,He],Ve=Me.length,Xe=/ +(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/,Je="|";function Qe(p,o={}){return p.split(Je).map(m=>{let S=m.trim().split(Xe).filter(T=>T&&!!T.trim()),I=[];for(let T=0,A=S.length;T!!(p[Ce.AND]||p[Ce.OR]),tt=p=>!!p[je.PATH],it=p=>!_(p)&&O(p)&&!Re(p),ke=p=>({[Ce.AND]:Object.keys(p).map(o=>({[o]:p[o]}))});function xe(p,o,{auto:m=!0}={}){let S=I=>{let T=Object.keys(I),A=tt(I);if(!A&&T.length>1&&!Re(I))return S(ke(I));if(it(I)){let F=A?I[je.PATH]:T[0],H=A?I[je.PATTERN]:I[F];if(!r(H))throw new Error(ne(F));let B={keyId:s(F),pattern:H};return m&&(B.searcher=Ne(H,o)),B}let R={children:[],operator:T[0]};return T.forEach(F=>{let H=I[F];_(H)&&H.forEach(B=>{R.children.push(S(B))})}),R};return Re(p)||(p=ke(p)),S(p)}function nt(p,{ignoreFieldNorm:o=u.ignoreFieldNorm}){p.forEach(m=>{let S=1;m.matches.forEach(({key:I,norm:T,score:A})=>{let R=I?I.weight:null;S*=Math.pow(A===0&&R?Number.EPSILON:A,(R||1)*(o?1:T))}),m.score=S})}function rt(p,o){let m=p.matches;o.matches=[],y(m)&&m.forEach(S=>{if(!y(S.indices)||!S.indices.length)return;let{indices:I,value:T}=S,A={indices:I,value:T};S.key&&(A.key=S.key.src),S.idx>-1&&(A.refIndex=S.idx),o.matches.push(A)})}function st(p,o){o.score=p.score}function ot(p,o,{includeMatches:m=u.includeMatches,includeScore:S=u.includeScore}={}){let I=[];return m&&I.push(rt),S&&I.push(st),p.map(T=>{let{idx:A}=T,R={item:o[A],refIndex:A};return I.length&&I.forEach(F=>{F(T,R)}),R})}class Se{constructor(o,m={},S){this.options={...u,...m},this.options.useExtendedSearch,this._keyStore=new e(this.options.keys),this.setCollection(o,S)}setCollection(o,m){if(this._docs=o,m&&!(m instanceof V))throw new Error(Z);this._myIndex=m||U(this.options.keys,this._docs,{getFn:this.options.getFn,fieldNormWeight:this.options.fieldNormWeight})}add(o){y(o)&&(this._docs.push(o),this._myIndex.add(o))}remove(o=()=>!1){let m=[];for(let S=0,I=this._docs.length;S-1&&(F=F.slice(0,m)),ot(F,this._docs,{includeMatches:S,includeScore:I})}_searchStringList(o){let m=Ne(o,this.options),{records:S}=this._myIndex,I=[];return S.forEach(({v:T,i:A,n:R})=>{if(!y(T))return;let{isMatch:F,score:H,indices:B}=m.searchIn(T);F&&I.push({item:T,idx:A,matches:[{score:H,value:T,norm:R,indices:B}]})}),I}_searchLogical(o){let m=xe(o,this.options),S=(R,F,H)=>{if(!R.children){let{keyId:x,searcher:G}=R,q=this._findMatches({key:this._keyStore.get(x),value:this._myIndex.getValueForItemAtKeyId(F,x),searcher:G});return q&&q.length?[{idx:H,item:F,matches:q}]:[]}let B=[];for(let x=0,G=R.children.length;x{if(y(R)){let H=S(m,R,F);H.length&&(T[F]||(T[F]={idx:F,item:R,matches:[]},A.push(T[F])),H.forEach(({matches:B})=>{T[F].matches.push(...B)}))}}),A}_searchObjectList(o){let m=Ne(o,this.options),{keys:S,records:I}=this._myIndex,T=[];return I.forEach(({$:A,i:R})=>{if(!y(A))return;let F=[];S.forEach((H,B)=>{F.push(...this._findMatches({key:H,value:A[B],searcher:m}))}),F.length&&T.push({idx:R,item:A,matches:F})}),T}_findMatches({key:o,value:m,searcher:S}){if(!y(m))return[];let I=[];if(_(m))m.forEach(({v:T,i:A,n:R})=>{if(!y(T))return;let{isMatch:F,score:H,indices:B}=S.searchIn(T);F&&I.push({score:H,key:o,value:T,idx:A,norm:R,indices:B})});else{let{v:T,n:A}=m,{isMatch:R,score:F,indices:H}=S.searchIn(T);R&&I.push({score:F,key:o,value:T,norm:A,indices:H})}return I}}Se.version="6.6.2",Se.createIndex=U,Se.parseIndex=$,Se.config=u,Se.parseQuery=xe,et(qe)},791:function(j,i,b){b.r(i),b.d(i,{__DO_NOT_USE__ActionTypes:function(){return y},applyMiddleware:function(){return M},bindActionCreators:function(){return v},combineReducers:function(){return n},compose:function(){return P},createStore:function(){return w},legacy_createStore:function(){return N}});function _(f){"@babel/helpers - typeof";return _=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(u){return typeof u}:function(u){return u&&typeof Symbol=="function"&&u.constructor===Symbol&&u!==Symbol.prototype?"symbol":typeof u},_(f)}function h(f,u){if(_(f)!=="object"||f===null)return f;var C=f[Symbol.toPrimitive];if(C!==void 0){var Y=C.call(f,u||"default");if(_(Y)!=="object")return Y;throw new TypeError("@@toPrimitive must return a primitive value.")}return(u==="string"?String:Number)(f)}function d(f){var u=h(f,"string");return _(u)==="symbol"?u:String(u)}function a(f,u,C){return u=d(u),u in f?Object.defineProperty(f,u,{value:C,enumerable:!0,configurable:!0,writable:!0}):f[u]=C,f}function r(f,u){var C=Object.keys(f);if(Object.getOwnPropertySymbols){var Y=Object.getOwnPropertySymbols(f);u&&(Y=Y.filter(function(V){return Object.getOwnPropertyDescriptor(f,V).enumerable})),C.push.apply(C,Y)}return C}function c(f){for(var u=1;u"u"&&(C=u,u=void 0),typeof C<"u"){if(typeof C!="function")throw new Error(l(1));return C(w)(f,u)}if(typeof f!="function")throw new Error(l(2));var V=f,U=u,$=[],W=$,J=!1;function z(){W===$&&(W=$.slice())}function ee(){if(J)throw new Error(l(3));return U}function ae(te){if(typeof te!="function")throw new Error(l(4));if(J)throw new Error(l(5));var de=!0;return z(),W.push(te),function(){if(de){if(J)throw new Error(l(6));de=!1,z();var oe=W.indexOf(te);W.splice(oe,1),$=null}}}function ce(te){if(!D(te))throw new Error(l(7));if(typeof te.type>"u")throw new Error(l(8));if(J)throw new Error(l(9));try{J=!0,U=V(U,te)}finally{J=!1}for(var de=$=W,pe=0;pe0)return"Unexpected "+($.length>1?"keys":"key")+" "+('"'+$.join('", "')+'" found in '+U+". ")+"Expected to find one of the known reducer keys instead: "+('"'+V.join('", "')+'". Unexpected keys will be ignored.')}function t(f){Object.keys(f).forEach(function(u){var C=f[u],Y=C(void 0,{type:y.INIT});if(typeof Y>"u")throw new Error(l(12));if(typeof C(void 0,{type:y.PROBE_UNKNOWN_ACTION()})>"u")throw new Error(l(13))})}function n(f){for(var u=Object.keys(f),C={},Y=0;Y"u"){var Te=ee&&ee.type;throw new Error(l(14))}le[te]=oe,ce=ce||oe!==pe}return ce=ce||U.length!==Object.keys(z).length,ce?le:z}}function s(f,u){return function(){return u(f.apply(this,arguments))}}function v(f,u){if(typeof f=="function")return s(f,u);if(typeof f!="object"||f===null)throw new Error(l(16));var C={};for(var Y in f){var V=f[Y];typeof V=="function"&&(C[Y]=s(V,u))}return C}function P(){for(var f=arguments.length,u=new Array(f),C=0;Cwindow.pluralize(O,e,{count:e}),noChoicesText:E,noResultsText:L,placeholderValue:k,position:Q??"auto",removeItemButton:se,renderChoiceLimit:D,searchEnabled:h,searchFields:w??["label"],searchPlaceholderValue:E,searchResultLimit:D,shouldSort:!1,searchFloor:a?0:1}),await this.refreshChoices({withInitialOptions:!0}),[null,void 0,""].includes(this.state)||this.select.setChoiceByValue(this.formatState(this.state)),this.refreshPlaceholder(),b&&this.select.showDropdown(),this.$refs.input.addEventListener("change",()=>{this.refreshPlaceholder(),!this.isStateBeingUpdated&&(this.isStateBeingUpdated=!0,this.state=this.select.getValue(!0)??null,this.$nextTick(()=>this.isStateBeingUpdated=!1))}),d&&this.$refs.input.addEventListener("showDropdown",async()=>{this.select.clearChoices(),await this.select.setChoices([{label:c,value:"",disabled:!0}]),await this.refreshChoices()}),a&&(this.$refs.input.addEventListener("search",async e=>{let t=e.detail.value?.trim();this.isSearching=!0,this.select.clearChoices(),await this.select.setChoices([{label:[null,void 0,""].includes(t)?c:ne,value:"",disabled:!0}])}),this.$refs.input.addEventListener("search",Alpine.debounce(async e=>{await this.refreshChoices({search:e.detail.value?.trim()}),this.isSearching=!1},Z))),_||window.addEventListener("filament-forms::select.refreshSelectedOptionLabel",async e=>{e.detail.livewireId===r&&e.detail.statePath===g&&await this.refreshChoices({withInitialOptions:!1})}),this.$watch("state",async()=>{this.select&&(this.refreshPlaceholder(),!this.isStateBeingUpdated&&await this.refreshChoices({withInitialOptions:!d}))})},destroy:function(){this.select.destroy(),this.select=null},refreshChoices:async function(e={}){let t=await this.getChoices(e);this.select&&(this.select.clearStore(),this.refreshPlaceholder(),this.setChoices(t),[null,void 0,""].includes(this.state)||this.select.setChoiceByValue(this.formatState(this.state)))},setChoices:function(e){this.select.setChoices(e,"value","label",!0)},getChoices:async function(e={}){let t=await this.getExistingOptions(e);return t.concat(await this.getMissingOptions(t))},getExistingOptions:async function({search:e,withInitialOptions:t}){if(t)return y;let n=[];return e!==""&&e!==null&&e!==void 0?n=await i(e):n=await j(),n.map(s=>s.choices?(s.choices=s.choices.map(v=>(v.selected=Array.isArray(this.state)?this.state.includes(v.value):this.state===v.value,v)),s):(s.selected=Array.isArray(this.state)?this.state.includes(s.value):this.state===s.value,s))},refreshPlaceholder:function(){_||(this.select._renderItems(),[null,void 0,""].includes(this.state)&&(this.$el.querySelector(".choices__list--single").innerHTML=`
${k??""}
`))},formatState:function(e){return _?(e??[]).map(t=>t?.toString()):e?.toString()},getMissingOptions:async function(e){let t=this.formatState(this.state);if([null,void 0,"",[],{}].includes(t))return{};let n=new Set;return e.forEach(s=>{if(s.choices){s.choices.forEach(v=>n.add(v.value));return}n.add(s.value)}),_?t.every(s=>n.has(s))?{}:(await me()).filter(s=>!n.has(s.value)).map(s=>(s.selected=!0,s)):n.has(t)?n:[{label:await X(),value:t,selected:!0}]}}}export{vt as default}; +/*! Bundled license information: + +choices.js/public/assets/scripts/choices.js: + (*! choices.js v10.2.0 | © 2022 Josh Johnson | https://github.com/jshjohnson/Choices#readme *) +*/ diff --git a/public/js/filament/forms/components/tags-input.js b/public/js/filament/forms/components/tags-input.js new file mode 100644 index 0000000..c19c04a --- /dev/null +++ b/public/js/filament/forms/components/tags-input.js @@ -0,0 +1 @@ +function i({state:a,splitKeys:n}){return{newTag:"",state:a,createTag:function(){if(this.newTag=this.newTag.trim(),this.newTag!==""){if(this.state.includes(this.newTag)){this.newTag="";return}this.state.push(this.newTag),this.newTag=""}},deleteTag:function(t){this.state=this.state.filter(e=>e!==t)},reorderTags:function(t){let e=this.state.splice(t.oldIndex,1)[0];this.state.splice(t.newIndex,0,e),this.state=[...this.state]},input:{["x-on:blur"]:"createTag()",["x-model"]:"newTag",["x-on:keydown"](t){["Enter",...n].includes(t.key)&&(t.preventDefault(),t.stopPropagation(),this.createTag())},["x-on:paste"](){this.$nextTick(()=>{if(n.length===0){this.createTag();return}let t=n.map(e=>e.replace(/[/\-\\^$*+?.()|[\]{}]/g,"\\$&")).join("|");this.newTag.split(new RegExp(t,"g")).forEach(e=>{this.newTag=e,this.createTag()})})}}}}export{i as default}; diff --git a/public/js/filament/forms/components/textarea.js b/public/js/filament/forms/components/textarea.js new file mode 100644 index 0000000..4fda241 --- /dev/null +++ b/public/js/filament/forms/components/textarea.js @@ -0,0 +1 @@ +function r({initialHeight:t,shouldAutosize:i,state:s}){return{state:s,wrapperEl:null,init:function(){this.wrapperEl=this.$el.parentNode,this.setInitialHeight(),i?this.$watch("state",()=>{this.resize()}):this.setUpResizeObserver()},setInitialHeight:function(){this.$el.scrollHeight<=0||(this.wrapperEl.style.height=t+"rem")},resize:function(){if(this.setInitialHeight(),this.$el.scrollHeight<=0)return;let e=this.$el.scrollHeight+"px";this.wrapperEl.style.height!==e&&(this.wrapperEl.style.height=e)},setUpResizeObserver:function(){new ResizeObserver(()=>{this.wrapperEl.style.height=this.$el.style.height}).observe(this.$el)}}}export{r as default}; diff --git a/public/js/filament/notifications/notifications.js b/public/js/filament/notifications/notifications.js new file mode 100644 index 0000000..3c6d3ee --- /dev/null +++ b/public/js/filament/notifications/notifications.js @@ -0,0 +1 @@ +(()=>{var O=Object.create;var N=Object.defineProperty;var V=Object.getOwnPropertyDescriptor;var Y=Object.getOwnPropertyNames;var H=Object.getPrototypeOf,W=Object.prototype.hasOwnProperty;var d=(i,t)=>()=>(t||i((t={exports:{}}).exports,t),t.exports);var j=(i,t,e,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Y(t))!W.call(i,n)&&n!==e&&N(i,n,{get:()=>t[n],enumerable:!(s=V(t,n))||s.enumerable});return i};var J=(i,t,e)=>(e=i!=null?O(H(i)):{},j(t||!i||!i.__esModule?N(e,"default",{value:i,enumerable:!0}):e,i));var S=d((ut,_)=>{var v,g=typeof global<"u"&&(global.crypto||global.msCrypto);g&&g.getRandomValues&&(y=new Uint8Array(16),v=function(){return g.getRandomValues(y),y});var y;v||(T=new Array(16),v=function(){for(var i=0,t;i<16;i++)i&3||(t=Math.random()*4294967296),T[i]=t>>>((i&3)<<3)&255;return T});var T;_.exports=v});var C=d((ct,U)=>{var P=[];for(f=0;f<256;++f)P[f]=(f+256).toString(16).substr(1);var f;function K(i,t){var e=t||0,s=P;return s[i[e++]]+s[i[e++]]+s[i[e++]]+s[i[e++]]+"-"+s[i[e++]]+s[i[e++]]+"-"+s[i[e++]]+s[i[e++]]+"-"+s[i[e++]]+s[i[e++]]+"-"+s[i[e++]]+s[i[e++]]+s[i[e++]]+s[i[e++]]+s[i[e++]]+s[i[e++]]}U.exports=K});var R=d((lt,F)=>{var Q=S(),X=C(),a=Q(),Z=[a[0]|1,a[1],a[2],a[3],a[4],a[5]],b=(a[6]<<8|a[7])&16383,D=0,A=0;function tt(i,t,e){var s=t&&e||0,n=t||[];i=i||{};var r=i.clockseq!==void 0?i.clockseq:b,o=i.msecs!==void 0?i.msecs:new Date().getTime(),h=i.nsecs!==void 0?i.nsecs:A+1,l=o-D+(h-A)/1e4;if(l<0&&i.clockseq===void 0&&(r=r+1&16383),(l<0||o>D)&&i.nsecs===void 0&&(h=0),h>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");D=o,A=h,b=r,o+=122192928e5;var c=((o&268435455)*1e4+h)%4294967296;n[s++]=c>>>24&255,n[s++]=c>>>16&255,n[s++]=c>>>8&255,n[s++]=c&255;var u=o/4294967296*1e4&268435455;n[s++]=u>>>8&255,n[s++]=u&255,n[s++]=u>>>24&15|16,n[s++]=u>>>16&255,n[s++]=r>>>8|128,n[s++]=r&255;for(var $=i.node||Z,m=0;m<6;++m)n[s+m]=$[m];return t||X(n)}F.exports=tt});var I=d((dt,G)=>{var it=S(),et=C();function st(i,t,e){var s=t&&e||0;typeof i=="string"&&(t=i=="binary"?new Array(16):null,i=null),i=i||{};var n=i.random||(i.rng||it)();if(n[6]=n[6]&15|64,n[8]=n[8]&63|128,t)for(var r=0;r<16;++r)t[s+r]=n[r];return t||et(n)}G.exports=st});var z=d((ft,M)=>{var nt=R(),L=I(),E=L;E.v1=nt;E.v4=L;M.exports=E});function k(i,t=()=>{}){let e=!1;return function(){e?t.apply(this,arguments):(e=!0,i.apply(this,arguments))}}var q=i=>{i.data("notificationComponent",({notification:t})=>({isShown:!1,computedStyle:null,transitionDuration:null,transitionEasing:null,init:function(){this.computedStyle=window.getComputedStyle(this.$el),this.transitionDuration=parseFloat(this.computedStyle.transitionDuration)*1e3,this.transitionEasing=this.computedStyle.transitionTimingFunction,this.configureTransitions(),this.configureAnimations(),t.duration&&t.duration!=="persistent"&&setTimeout(()=>{if(!this.$el.matches(":hover")){this.close();return}this.$el.addEventListener("mouseleave",()=>this.close())},t.duration),this.isShown=!0},configureTransitions:function(){let e=this.computedStyle.display,s=()=>{i.mutateDom(()=>{this.$el.style.setProperty("display",e),this.$el.style.setProperty("visibility","visible")}),this.$el._x_isShown=!0},n=()=>{i.mutateDom(()=>{this.$el._x_isShown?this.$el.style.setProperty("visibility","hidden"):this.$el.style.setProperty("display","none")})},r=k(o=>o?s():n(),o=>{this.$el._x_toggleAndCascadeWithTransitions(this.$el,o,s,n)});i.effect(()=>r(this.isShown))},configureAnimations:function(){let e;Livewire.hook("commit",({component:s,commit:n,succeed:r,fail:o,respond:h})=>{if(!s.snapshot.data.isFilamentNotificationsComponent)return;let l=()=>this.$el.getBoundingClientRect().top,c=l();h(()=>{e=()=>{this.isShown&&this.$el.animate([{transform:`translateY(${c-l()}px)`},{transform:"translateY(0px)"}],{duration:this.transitionDuration,easing:this.transitionEasing})},this.$el.getAnimations().forEach(u=>u.finish())}),r(({snapshot:u,effect:$})=>{e()})})},close:function(){this.isShown=!1,setTimeout(()=>window.dispatchEvent(new CustomEvent("notificationClosed",{detail:{id:t.id}})),this.transitionDuration)},markAsRead:function(){window.dispatchEvent(new CustomEvent("markedNotificationAsRead",{detail:{id:t.id}}))},markAsUnread:function(){window.dispatchEvent(new CustomEvent("markedNotificationAsUnread",{detail:{id:t.id}}))}}))};var B=J(z(),1),p=class{constructor(){return this.id((0,B.v4)()),this}id(t){return this.id=t,this}title(t){return this.title=t,this}body(t){return this.body=t,this}actions(t){return this.actions=t,this}status(t){return this.status=t,this}color(t){return this.color=t,this}icon(t){return this.icon=t,this}iconColor(t){return this.iconColor=t,this}duration(t){return this.duration=t,this}seconds(t){return this.duration(t*1e3),this}persistent(){return this.duration("persistent"),this}danger(){return this.status("danger"),this}info(){return this.status("info"),this}success(){return this.status("success"),this}warning(){return this.status("warning"),this}view(t){return this.view=t,this}viewData(t){return this.viewData=t,this}send(){return window.dispatchEvent(new CustomEvent("notificationSent",{detail:{notification:this}})),this}},w=class{constructor(t){return this.name(t),this}name(t){return this.name=t,this}color(t){return this.color=t,this}dispatch(t,e){return this.event(t),this.eventData(e),this}dispatchSelf(t,e){return this.dispatch(t,e),this.dispatchDirection="self",this}dispatchTo(t,e,s){return this.dispatch(e,s),this.dispatchDirection="to",this.dispatchToComponent=t,this}emit(t,e){return this.dispatch(t,e),this}emitSelf(t,e){return this.dispatchSelf(t,e),this}emitTo(t,e,s){return this.dispatchTo(t,e,s),this}dispatchDirection(t){return this.dispatchDirection=t,this}dispatchToComponent(t){return this.dispatchToComponent=t,this}event(t){return this.event=t,this}eventData(t){return this.eventData=t,this}extraAttributes(t){return this.extraAttributes=t,this}icon(t){return this.icon=t,this}iconPosition(t){return this.iconPosition=t,this}outlined(t=!0){return this.isOutlined=t,this}disabled(t=!0){return this.isDisabled=t,this}label(t){return this.label=t,this}close(t=!0){return this.shouldClose=t,this}openUrlInNewTab(t=!0){return this.shouldOpenUrlInNewTab=t,this}size(t){return this.size=t,this}url(t){return this.url=t,this}view(t){return this.view=t,this}button(){return this.view("filament-actions::button-action"),this}grouped(){return this.view("filament-actions::grouped-action"),this}link(){return this.view("filament-actions::link-action"),this}},x=class{constructor(t){return this.actions(t),this}actions(t){return this.actions=t.map(e=>e.grouped()),this}color(t){return this.color=t,this}icon(t){return this.icon=t,this}iconPosition(t){return this.iconPosition=t,this}label(t){return this.label=t,this}tooltip(t){return this.tooltip=t,this}};window.FilamentNotificationAction=w;window.FilamentNotificationActionGroup=x;window.FilamentNotification=p;document.addEventListener("alpine:init",()=>{window.Alpine.plugin(q)});})(); diff --git a/public/js/filament/support/async-alpine.js b/public/js/filament/support/async-alpine.js new file mode 100644 index 0000000..048f75c --- /dev/null +++ b/public/js/filament/support/async-alpine.js @@ -0,0 +1 @@ +(()=>{(()=>{var d=Object.defineProperty,m=t=>d(t,"__esModule",{value:!0}),f=(t,e)=>{m(t);for(var i in e)d(t,i,{get:e[i],enumerable:!0})},o={};f(o,{eager:()=>g,event:()=>w,idle:()=>y,media:()=>b,visible:()=>E});var c=()=>!0,g=c,v=({component:t,argument:e})=>new Promise(i=>{if(e)window.addEventListener(e,()=>i(),{once:!0});else{let n=a=>{a.detail.id===t.id&&(window.removeEventListener("async-alpine:load",n),i())};window.addEventListener("async-alpine:load",n)}}),w=v,x=()=>new Promise(t=>{"requestIdleCallback"in window?window.requestIdleCallback(t):setTimeout(t,200)}),y=x,A=({argument:t})=>new Promise(e=>{if(!t)return console.log("Async Alpine: media strategy requires a media query. Treating as 'eager'"),e();let i=window.matchMedia(`(${t})`);i.matches?e():i.addEventListener("change",e,{once:!0})}),b=A,$=({component:t,argument:e})=>new Promise(i=>{let n=e||"0px 0px 0px 0px",a=new IntersectionObserver(r=>{r[0].isIntersecting&&(a.disconnect(),i())},{rootMargin:n});a.observe(t.el)}),E=$;function P(t){let e=q(t),i=u(e);return i.type==="method"?{type:"expression",operator:"&&",parameters:[i]}:i}function q(t){let e=/\s*([()])\s*|\s*(\|\||&&|\|)\s*|\s*((?:[^()&|]+\([^()]+\))|[^()&|]+)\s*/g,i=[],n;for(;(n=e.exec(t))!==null;){let[,a,r,s]=n;if(a!==void 0)i.push({type:"parenthesis",value:a});else if(r!==void 0)i.push({type:"operator",value:r==="|"?"&&":r});else{let p={type:"method",method:s.trim()};s.includes("(")&&(p.method=s.substring(0,s.indexOf("(")).trim(),p.argument=s.substring(s.indexOf("(")+1,s.indexOf(")"))),s.method==="immediate"&&(s.method="eager"),i.push(p)}}return i}function u(t){let e=h(t);for(;t.length>0&&(t[0].value==="&&"||t[0].value==="|"||t[0].value==="||");){let i=t.shift().value,n=h(t);e.type==="expression"&&e.operator===i?e.parameters.push(n):e={type:"expression",operator:i,parameters:[e,n]}}return e}function h(t){if(t[0].value==="("){t.shift();let e=u(t);return t[0].value===")"&&t.shift(),e}else return t.shift()}var _="__internal_",l={Alpine:null,_options:{prefix:"ax-",alpinePrefix:"x-",root:"load",inline:"load-src",defaultStrategy:"eager"},_alias:!1,_data:{},_realIndex:0,get _index(){return this._realIndex++},init(t,e={}){return this.Alpine=t,this._options={...this._options,...e},this},start(){return this._processInline(),this._setupComponents(),this._mutations(),this},data(t,e=!1){return this._data[t]={loaded:!1,download:e},this},url(t,e){!t||!e||(this._data[t]||this.data(t),this._data[t].download=()=>import(this._parseUrl(e)))},alias(t){this._alias=t},_processInline(){let t=document.querySelectorAll(`[${this._options.prefix}${this._options.inline}]`);for(let e of t)this._inlineElement(e)},_inlineElement(t){let e=t.getAttribute(`${this._options.alpinePrefix}data`),i=t.getAttribute(`${this._options.prefix}${this._options.inline}`);if(!e||!i)return;let n=this._parseName(e);this.url(n,i)},_setupComponents(){let t=document.querySelectorAll(`[${this._options.prefix}${this._options.root}]`);for(let e of t)this._setupComponent(e)},_setupComponent(t){let e=t.getAttribute(`${this._options.alpinePrefix}data`);t.setAttribute(`${this._options.alpinePrefix}ignore`,"");let i=this._parseName(e),n=t.getAttribute(`${this._options.prefix}${this._options.root}`)||this._options.defaultStrategy;this._componentStrategy({name:i,strategy:n,el:t,id:t.id||this._index})},async _componentStrategy(t){let e=P(t.strategy);await this._generateRequirements(t,e),await this._download(t.name),this._activate(t)},_generateRequirements(t,e){if(e.type==="expression"){if(e.operator==="&&")return Promise.all(e.parameters.map(i=>this._generateRequirements(t,i)));if(e.operator==="||")return Promise.any(e.parameters.map(i=>this._generateRequirements(t,i)))}return o[e.method]?o[e.method]({component:t,argument:e.argument}):!1},async _download(t){if(t.startsWith(_)||(this._handleAlias(t),!this._data[t]||this._data[t].loaded))return;let e=await this._getModule(t);this.Alpine.data(t,e),this._data[t].loaded=!0},async _getModule(t){if(!this._data[t])return;let e=await this._data[t].download(t);return typeof e=="function"?e:e[t]||e.default||Object.values(e)[0]||!1},_activate(t){this.Alpine.destroyTree(t.el),t.el.removeAttribute(`${this._options.alpinePrefix}ignore`),t.el._x_ignore=!1,this.Alpine.initTree(t.el)},_mutations(){new MutationObserver(t=>{for(let e of t)if(e.addedNodes)for(let i of e.addedNodes)i.nodeType===1&&(i.hasAttribute(`${this._options.prefix}${this._options.root}`)&&this._mutationEl(i),i.querySelectorAll(`[${this._options.prefix}${this._options.root}]`).forEach(n=>this._mutationEl(n)))}).observe(document,{attributes:!0,childList:!0,subtree:!0})},_mutationEl(t){t.hasAttribute(`${this._options.prefix}${this._options.inline}`)&&this._inlineElement(t),this._setupComponent(t)},_handleAlias(t){if(!(!this._alias||this._data[t])){if(typeof this._alias=="function"){this.data(t,this._alias);return}this.url(t,this._alias.replaceAll("[name]",t))}},_parseName(t){return(t||"").split(/[({]/g)[0]||`${_}${this._index}`},_parseUrl(t){return new RegExp("^(?:[a-z+]+:)?//","i").test(t)?t:new URL(t,document.baseURI).href}};document.addEventListener("alpine:init",()=>{window.AsyncAlpine=l,l.init(Alpine,window.AsyncAlpineOptions||{}),document.dispatchEvent(new CustomEvent("async-alpine:init")),l.start()})})();})(); diff --git a/public/js/filament/support/support.js b/public/js/filament/support/support.js new file mode 100644 index 0000000..1a088c9 --- /dev/null +++ b/public/js/filament/support/support.js @@ -0,0 +1,46 @@ +(()=>{var jo=Object.create;var Di=Object.defineProperty;var Bo=Object.getOwnPropertyDescriptor;var Ho=Object.getOwnPropertyNames;var $o=Object.getPrototypeOf,Wo=Object.prototype.hasOwnProperty;var Kr=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Vo=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Ho(e))!Wo.call(t,i)&&i!==r&&Di(t,i,{get:()=>e[i],enumerable:!(n=Bo(e,i))||n.enumerable});return t};var zo=(t,e,r)=>(r=t!=null?jo($o(t)):{},Vo(e||!t||!t.__esModule?Di(r,"default",{value:t,enumerable:!0}):r,t));var oo=Kr(()=>{});var ao=Kr(()=>{});var so=Kr((Os,yr)=>{(function(){"use strict";var t="input is invalid type",e="finalize already called",r=typeof window=="object",n=r?window:{};n.JS_MD5_NO_WINDOW&&(r=!1);var i=!r&&typeof self=="object",o=!n.JS_MD5_NO_NODE_JS&&typeof process=="object"&&process.versions&&process.versions.node;o?n=global:i&&(n=self);var l=!n.JS_MD5_NO_COMMON_JS&&typeof yr=="object"&&yr.exports,h=typeof define=="function"&&define.amd,u=!n.JS_MD5_NO_ARRAY_BUFFER&&typeof ArrayBuffer<"u",f="0123456789abcdef".split(""),y=[128,32768,8388608,-2147483648],b=[0,8,16,24],A=["hex","array","digest","buffer","arrayBuffer","base64"],E="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""),O=[],P;if(u){var R=new ArrayBuffer(68);P=new Uint8Array(R),O=new Uint32Array(R)}var $=Array.isArray;(n.JS_MD5_NO_NODE_JS||!$)&&($=function(s){return Object.prototype.toString.call(s)==="[object Array]"});var B=ArrayBuffer.isView;u&&(n.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW||!B)&&(B=function(s){return typeof s=="object"&&s.buffer&&s.buffer.constructor===ArrayBuffer});var K=function(s){var p=typeof s;if(p==="string")return[s,!0];if(p!=="object"||s===null)throw new Error(t);if(u&&s.constructor===ArrayBuffer)return[new Uint8Array(s),!1];if(!$(s)&&!B(s))throw new Error(t);return[s,!1]},X=function(s){return function(p){return new U(!0).update(p)[s]()}},ne=function(){var s=X("hex");o&&(s=J(s)),s.create=function(){return new U},s.update=function(d){return s.create().update(d)};for(var p=0;p>>6,Ue[_++]=128|d&63):d<55296||d>=57344?(Ue[_++]=224|d>>>12,Ue[_++]=128|d>>>6&63,Ue[_++]=128|d&63):(d=65536+((d&1023)<<10|s.charCodeAt(++N)&1023),Ue[_++]=240|d>>>18,Ue[_++]=128|d>>>12&63,Ue[_++]=128|d>>>6&63,Ue[_++]=128|d&63);else for(_=this.start;N>>2]|=d<>>2]|=(192|d>>>6)<>>2]|=(128|d&63)<=57344?(Q[_>>>2]|=(224|d>>>12)<>>2]|=(128|d>>>6&63)<>>2]|=(128|d&63)<>>2]|=(240|d>>>18)<>>2]|=(128|d>>>12&63)<>>2]|=(128|d>>>6&63)<>>2]|=(128|d&63)<>>2]|=s[N]<=64?(this.start=_-64,this.hash(),this.hashed=!0):this.start=_}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296<<0,this.bytes=this.bytes%4294967296),this},U.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var s=this.blocks,p=this.lastByteIndex;s[p>>>2]|=y[p&3],p>=56&&(this.hashed||this.hash(),s[0]=s[16],s[16]=s[1]=s[2]=s[3]=s[4]=s[5]=s[6]=s[7]=s[8]=s[9]=s[10]=s[11]=s[12]=s[13]=s[14]=s[15]=0),s[14]=this.bytes<<3,s[15]=this.hBytes<<3|this.bytes>>>29,this.hash()}},U.prototype.hash=function(){var s,p,v,d,N,_,M=this.blocks;this.first?(s=M[0]-680876937,s=(s<<7|s>>>25)-271733879<<0,d=(-1732584194^s&2004318071)+M[1]-117830708,d=(d<<12|d>>>20)+s<<0,v=(-271733879^d&(s^-271733879))+M[2]-1126478375,v=(v<<17|v>>>15)+d<<0,p=(s^v&(d^s))+M[3]-1316259209,p=(p<<22|p>>>10)+v<<0):(s=this.h0,p=this.h1,v=this.h2,d=this.h3,s+=(d^p&(v^d))+M[0]-680876936,s=(s<<7|s>>>25)+p<<0,d+=(v^s&(p^v))+M[1]-389564586,d=(d<<12|d>>>20)+s<<0,v+=(p^d&(s^p))+M[2]+606105819,v=(v<<17|v>>>15)+d<<0,p+=(s^v&(d^s))+M[3]-1044525330,p=(p<<22|p>>>10)+v<<0),s+=(d^p&(v^d))+M[4]-176418897,s=(s<<7|s>>>25)+p<<0,d+=(v^s&(p^v))+M[5]+1200080426,d=(d<<12|d>>>20)+s<<0,v+=(p^d&(s^p))+M[6]-1473231341,v=(v<<17|v>>>15)+d<<0,p+=(s^v&(d^s))+M[7]-45705983,p=(p<<22|p>>>10)+v<<0,s+=(d^p&(v^d))+M[8]+1770035416,s=(s<<7|s>>>25)+p<<0,d+=(v^s&(p^v))+M[9]-1958414417,d=(d<<12|d>>>20)+s<<0,v+=(p^d&(s^p))+M[10]-42063,v=(v<<17|v>>>15)+d<<0,p+=(s^v&(d^s))+M[11]-1990404162,p=(p<<22|p>>>10)+v<<0,s+=(d^p&(v^d))+M[12]+1804603682,s=(s<<7|s>>>25)+p<<0,d+=(v^s&(p^v))+M[13]-40341101,d=(d<<12|d>>>20)+s<<0,v+=(p^d&(s^p))+M[14]-1502002290,v=(v<<17|v>>>15)+d<<0,p+=(s^v&(d^s))+M[15]+1236535329,p=(p<<22|p>>>10)+v<<0,s+=(v^d&(p^v))+M[1]-165796510,s=(s<<5|s>>>27)+p<<0,d+=(p^v&(s^p))+M[6]-1069501632,d=(d<<9|d>>>23)+s<<0,v+=(s^p&(d^s))+M[11]+643717713,v=(v<<14|v>>>18)+d<<0,p+=(d^s&(v^d))+M[0]-373897302,p=(p<<20|p>>>12)+v<<0,s+=(v^d&(p^v))+M[5]-701558691,s=(s<<5|s>>>27)+p<<0,d+=(p^v&(s^p))+M[10]+38016083,d=(d<<9|d>>>23)+s<<0,v+=(s^p&(d^s))+M[15]-660478335,v=(v<<14|v>>>18)+d<<0,p+=(d^s&(v^d))+M[4]-405537848,p=(p<<20|p>>>12)+v<<0,s+=(v^d&(p^v))+M[9]+568446438,s=(s<<5|s>>>27)+p<<0,d+=(p^v&(s^p))+M[14]-1019803690,d=(d<<9|d>>>23)+s<<0,v+=(s^p&(d^s))+M[3]-187363961,v=(v<<14|v>>>18)+d<<0,p+=(d^s&(v^d))+M[8]+1163531501,p=(p<<20|p>>>12)+v<<0,s+=(v^d&(p^v))+M[13]-1444681467,s=(s<<5|s>>>27)+p<<0,d+=(p^v&(s^p))+M[2]-51403784,d=(d<<9|d>>>23)+s<<0,v+=(s^p&(d^s))+M[7]+1735328473,v=(v<<14|v>>>18)+d<<0,p+=(d^s&(v^d))+M[12]-1926607734,p=(p<<20|p>>>12)+v<<0,N=p^v,s+=(N^d)+M[5]-378558,s=(s<<4|s>>>28)+p<<0,d+=(N^s)+M[8]-2022574463,d=(d<<11|d>>>21)+s<<0,_=d^s,v+=(_^p)+M[11]+1839030562,v=(v<<16|v>>>16)+d<<0,p+=(_^v)+M[14]-35309556,p=(p<<23|p>>>9)+v<<0,N=p^v,s+=(N^d)+M[1]-1530992060,s=(s<<4|s>>>28)+p<<0,d+=(N^s)+M[4]+1272893353,d=(d<<11|d>>>21)+s<<0,_=d^s,v+=(_^p)+M[7]-155497632,v=(v<<16|v>>>16)+d<<0,p+=(_^v)+M[10]-1094730640,p=(p<<23|p>>>9)+v<<0,N=p^v,s+=(N^d)+M[13]+681279174,s=(s<<4|s>>>28)+p<<0,d+=(N^s)+M[0]-358537222,d=(d<<11|d>>>21)+s<<0,_=d^s,v+=(_^p)+M[3]-722521979,v=(v<<16|v>>>16)+d<<0,p+=(_^v)+M[6]+76029189,p=(p<<23|p>>>9)+v<<0,N=p^v,s+=(N^d)+M[9]-640364487,s=(s<<4|s>>>28)+p<<0,d+=(N^s)+M[12]-421815835,d=(d<<11|d>>>21)+s<<0,_=d^s,v+=(_^p)+M[15]+530742520,v=(v<<16|v>>>16)+d<<0,p+=(_^v)+M[2]-995338651,p=(p<<23|p>>>9)+v<<0,s+=(v^(p|~d))+M[0]-198630844,s=(s<<6|s>>>26)+p<<0,d+=(p^(s|~v))+M[7]+1126891415,d=(d<<10|d>>>22)+s<<0,v+=(s^(d|~p))+M[14]-1416354905,v=(v<<15|v>>>17)+d<<0,p+=(d^(v|~s))+M[5]-57434055,p=(p<<21|p>>>11)+v<<0,s+=(v^(p|~d))+M[12]+1700485571,s=(s<<6|s>>>26)+p<<0,d+=(p^(s|~v))+M[3]-1894986606,d=(d<<10|d>>>22)+s<<0,v+=(s^(d|~p))+M[10]-1051523,v=(v<<15|v>>>17)+d<<0,p+=(d^(v|~s))+M[1]-2054922799,p=(p<<21|p>>>11)+v<<0,s+=(v^(p|~d))+M[8]+1873313359,s=(s<<6|s>>>26)+p<<0,d+=(p^(s|~v))+M[15]-30611744,d=(d<<10|d>>>22)+s<<0,v+=(s^(d|~p))+M[6]-1560198380,v=(v<<15|v>>>17)+d<<0,p+=(d^(v|~s))+M[13]+1309151649,p=(p<<21|p>>>11)+v<<0,s+=(v^(p|~d))+M[4]-145523070,s=(s<<6|s>>>26)+p<<0,d+=(p^(s|~v))+M[11]-1120210379,d=(d<<10|d>>>22)+s<<0,v+=(s^(d|~p))+M[2]+718787259,v=(v<<15|v>>>17)+d<<0,p+=(d^(v|~s))+M[9]-343485551,p=(p<<21|p>>>11)+v<<0,this.first?(this.h0=s+1732584193<<0,this.h1=p-271733879<<0,this.h2=v-1732584194<<0,this.h3=d+271733878<<0,this.first=!1):(this.h0=this.h0+s<<0,this.h1=this.h1+p<<0,this.h2=this.h2+v<<0,this.h3=this.h3+d<<0)},U.prototype.hex=function(){this.finalize();var s=this.h0,p=this.h1,v=this.h2,d=this.h3;return f[s>>>4&15]+f[s&15]+f[s>>>12&15]+f[s>>>8&15]+f[s>>>20&15]+f[s>>>16&15]+f[s>>>28&15]+f[s>>>24&15]+f[p>>>4&15]+f[p&15]+f[p>>>12&15]+f[p>>>8&15]+f[p>>>20&15]+f[p>>>16&15]+f[p>>>28&15]+f[p>>>24&15]+f[v>>>4&15]+f[v&15]+f[v>>>12&15]+f[v>>>8&15]+f[v>>>20&15]+f[v>>>16&15]+f[v>>>28&15]+f[v>>>24&15]+f[d>>>4&15]+f[d&15]+f[d>>>12&15]+f[d>>>8&15]+f[d>>>20&15]+f[d>>>16&15]+f[d>>>28&15]+f[d>>>24&15]},U.prototype.toString=U.prototype.hex,U.prototype.digest=function(){this.finalize();var s=this.h0,p=this.h1,v=this.h2,d=this.h3;return[s&255,s>>>8&255,s>>>16&255,s>>>24&255,p&255,p>>>8&255,p>>>16&255,p>>>24&255,v&255,v>>>8&255,v>>>16&255,v>>>24&255,d&255,d>>>8&255,d>>>16&255,d>>>24&255]},U.prototype.array=U.prototype.digest,U.prototype.arrayBuffer=function(){this.finalize();var s=new ArrayBuffer(16),p=new Uint32Array(s);return p[0]=this.h0,p[1]=this.h1,p[2]=this.h2,p[3]=this.h3,s},U.prototype.buffer=U.prototype.arrayBuffer,U.prototype.base64=function(){for(var s,p,v,d="",N=this.array(),_=0;_<15;)s=N[_++],p=N[_++],v=N[_++],d+=E[s>>>2]+E[(s<<4|p>>>4)&63]+E[(p<<2|v>>>6)&63]+E[v&63];return s=N[_],d+=E[s>>>2]+E[s<<4&63]+"==",d};function Z(s,p){var v,d=K(s);if(s=d[0],d[1]){var N=[],_=s.length,M=0,Q;for(v=0;v<_;++v)Q=s.charCodeAt(v),Q<128?N[M++]=Q:Q<2048?(N[M++]=192|Q>>>6,N[M++]=128|Q&63):Q<55296||Q>=57344?(N[M++]=224|Q>>>12,N[M++]=128|Q>>>6&63,N[M++]=128|Q&63):(Q=65536+((Q&1023)<<10|s.charCodeAt(++v)&1023),N[M++]=240|Q>>>18,N[M++]=128|Q>>>12&63,N[M++]=128|Q>>>6&63,N[M++]=128|Q&63);s=N}s.length>64&&(s=new U(!0).update(s).array());var Ue=[],Rt=[];for(v=0;v<64;++v){var Vt=s[v]||0;Ue[v]=92^Vt,Rt[v]=54^Vt}U.call(this,p),this.update(Rt),this.oKeyPad=Ue,this.inner=!0,this.sharedMemory=p}Z.prototype=new U,Z.prototype.finalize=function(){if(U.prototype.finalize.call(this),this.inner){this.inner=!1;var s=this.array();U.call(this,this.sharedMemory),this.update(this.oKeyPad),this.update(s),U.prototype.finalize.call(this)}};var me=ne();me.md5=me,me.md5.hmac=de(),l?yr.exports=me:(n.md5=me,h&&define(function(){return me}))})()});var ji=["top","right","bottom","left"],Ti=["start","end"],_i=ji.reduce((t,e)=>t.concat(e,e+"-"+Ti[0],e+"-"+Ti[1]),[]),Et=Math.min,tt=Math.max,hr=Math.round,pr=Math.floor,nn=t=>({x:t,y:t}),Uo={left:"right",right:"left",bottom:"top",top:"bottom"},Yo={start:"end",end:"start"};function Jr(t,e,r){return tt(t,Et(e,r))}function jt(t,e){return typeof t=="function"?t(e):t}function pt(t){return t.split("-")[0]}function xt(t){return t.split("-")[1]}function Bi(t){return t==="x"?"y":"x"}function Zr(t){return t==="y"?"height":"width"}function Pn(t){return["top","bottom"].includes(pt(t))?"y":"x"}function Qr(t){return Bi(Pn(t))}function Hi(t,e,r){r===void 0&&(r=!1);let n=xt(t),i=Qr(t),o=Zr(i),l=i==="x"?n===(r?"end":"start")?"right":"left":n==="start"?"bottom":"top";return e.reference[o]>e.floating[o]&&(l=mr(l)),[l,mr(l)]}function Xo(t){let e=mr(t);return[vr(t),e,vr(e)]}function vr(t){return t.replace(/start|end/g,e=>Yo[e])}function qo(t,e,r){let n=["left","right"],i=["right","left"],o=["top","bottom"],l=["bottom","top"];switch(t){case"top":case"bottom":return r?e?i:n:e?n:i;case"left":case"right":return e?o:l;default:return[]}}function Go(t,e,r,n){let i=xt(t),o=qo(pt(t),r==="start",n);return i&&(o=o.map(l=>l+"-"+i),e&&(o=o.concat(o.map(vr)))),o}function mr(t){return t.replace(/left|right|bottom|top/g,e=>Uo[e])}function Ko(t){return{top:0,right:0,bottom:0,left:0,...t}}function ei(t){return typeof t!="number"?Ko(t):{top:t,right:t,bottom:t,left:t}}function Dn(t){return{...t,top:t.y,left:t.x,right:t.x+t.width,bottom:t.y+t.height}}function Pi(t,e,r){let{reference:n,floating:i}=t,o=Pn(e),l=Qr(e),h=Zr(l),u=pt(e),f=o==="y",y=n.x+n.width/2-i.width/2,b=n.y+n.height/2-i.height/2,A=n[h]/2-i[h]/2,E;switch(u){case"top":E={x:y,y:n.y-i.height};break;case"bottom":E={x:y,y:n.y+n.height};break;case"right":E={x:n.x+n.width,y:b};break;case"left":E={x:n.x-i.width,y:b};break;default:E={x:n.x,y:n.y}}switch(xt(e)){case"start":E[l]-=A*(r&&f?-1:1);break;case"end":E[l]+=A*(r&&f?-1:1);break}return E}var Jo=async(t,e,r)=>{let{placement:n="bottom",strategy:i="absolute",middleware:o=[],platform:l}=r,h=o.filter(Boolean),u=await(l.isRTL==null?void 0:l.isRTL(e)),f=await l.getElementRects({reference:t,floating:e,strategy:i}),{x:y,y:b}=Pi(f,n,u),A=n,E={},O=0;for(let P=0;P({name:"arrow",options:t,async fn(e){let{x:r,y:n,placement:i,rects:o,platform:l,elements:h,middlewareData:u}=e,{element:f,padding:y=0}=jt(t,e)||{};if(f==null)return{};let b=ei(y),A={x:r,y:n},E=Qr(i),O=Zr(E),P=await l.getDimensions(f),R=E==="y",$=R?"top":"left",B=R?"bottom":"right",K=R?"clientHeight":"clientWidth",X=o.reference[O]+o.reference[E]-A[E]-o.floating[O],ne=A[E]-o.reference[E],J=await(l.getOffsetParent==null?void 0:l.getOffsetParent(f)),V=J?J[K]:0;(!V||!await(l.isElement==null?void 0:l.isElement(J)))&&(V=h.floating[K]||o.floating[O]);let de=X/2-ne/2,U=V/2-P[O]/2-1,Z=Et(b[$],U),me=Et(b[B],U),s=Z,p=V-P[O]-me,v=V/2-P[O]/2+de,d=Jr(s,v,p),N=!u.arrow&&xt(i)!=null&&v!==d&&o.reference[O]/2-(vxt(i)===t),...r.filter(i=>xt(i)!==t)]:r.filter(i=>pt(i)===i)).filter(i=>t?xt(i)===t||(e?vr(i)!==i:!1):!0)}var ea=function(t){return t===void 0&&(t={}),{name:"autoPlacement",options:t,async fn(e){var r,n,i;let{rects:o,middlewareData:l,placement:h,platform:u,elements:f}=e,{crossAxis:y=!1,alignment:b,allowedPlacements:A=_i,autoAlignment:E=!0,...O}=jt(t,e),P=b!==void 0||A===_i?Qo(b||null,E,A):A,R=await Tn(e,O),$=((r=l.autoPlacement)==null?void 0:r.index)||0,B=P[$];if(B==null)return{};let K=Hi(B,o,await(u.isRTL==null?void 0:u.isRTL(f.floating)));if(h!==B)return{reset:{placement:P[0]}};let X=[R[pt(B)],R[K[0]],R[K[1]]],ne=[...((n=l.autoPlacement)==null?void 0:n.overflows)||[],{placement:B,overflows:X}],J=P[$+1];if(J)return{data:{index:$+1,overflows:ne},reset:{placement:J}};let V=ne.map(Z=>{let me=xt(Z.placement);return[Z.placement,me&&y?Z.overflows.slice(0,2).reduce((s,p)=>s+p,0):Z.overflows[0],Z.overflows]}).sort((Z,me)=>Z[1]-me[1]),U=((i=V.filter(Z=>Z[2].slice(0,xt(Z[0])?2:3).every(me=>me<=0))[0])==null?void 0:i[0])||V[0][0];return U!==h?{data:{index:$+1,overflows:ne},reset:{placement:U}}:{}}}},ta=function(t){return t===void 0&&(t={}),{name:"flip",options:t,async fn(e){var r,n;let{placement:i,middlewareData:o,rects:l,initialPlacement:h,platform:u,elements:f}=e,{mainAxis:y=!0,crossAxis:b=!0,fallbackPlacements:A,fallbackStrategy:E="bestFit",fallbackAxisSideDirection:O="none",flipAlignment:P=!0,...R}=jt(t,e);if((r=o.arrow)!=null&&r.alignmentOffset)return{};let $=pt(i),B=pt(h)===h,K=await(u.isRTL==null?void 0:u.isRTL(f.floating)),X=A||(B||!P?[mr(h)]:Xo(h));!A&&O!=="none"&&X.push(...Go(h,P,O,K));let ne=[h,...X],J=await Tn(e,R),V=[],de=((n=o.flip)==null?void 0:n.overflows)||[];if(y&&V.push(J[$]),b){let s=Hi(i,l,K);V.push(J[s[0]],J[s[1]])}if(de=[...de,{placement:i,overflows:V}],!V.every(s=>s<=0)){var U,Z;let s=(((U=o.flip)==null?void 0:U.index)||0)+1,p=ne[s];if(p)return{data:{index:s,overflows:de},reset:{placement:p}};let v=(Z=de.filter(d=>d.overflows[0]<=0).sort((d,N)=>d.overflows[1]-N.overflows[1])[0])==null?void 0:Z.placement;if(!v)switch(E){case"bestFit":{var me;let d=(me=de.map(N=>[N.placement,N.overflows.filter(_=>_>0).reduce((_,M)=>_+M,0)]).sort((N,_)=>N[1]-_[1])[0])==null?void 0:me[0];d&&(v=d);break}case"initialPlacement":v=h;break}if(i!==v)return{reset:{placement:v}}}return{}}}};function Mi(t,e){return{top:t.top-e.height,right:t.right-e.width,bottom:t.bottom-e.height,left:t.left-e.width}}function Ri(t){return ji.some(e=>t[e]>=0)}var na=function(t){return t===void 0&&(t={}),{name:"hide",options:t,async fn(e){let{rects:r}=e,{strategy:n="referenceHidden",...i}=jt(t,e);switch(n){case"referenceHidden":{let o=await Tn(e,{...i,elementContext:"reference"}),l=Mi(o,r.reference);return{data:{referenceHiddenOffsets:l,referenceHidden:Ri(l)}}}case"escaped":{let o=await Tn(e,{...i,altBoundary:!0}),l=Mi(o,r.floating);return{data:{escapedOffsets:l,escaped:Ri(l)}}}default:return{}}}}};function $i(t){let e=Et(...t.map(o=>o.left)),r=Et(...t.map(o=>o.top)),n=tt(...t.map(o=>o.right)),i=tt(...t.map(o=>o.bottom));return{x:e,y:r,width:n-e,height:i-r}}function ra(t){let e=t.slice().sort((i,o)=>i.y-o.y),r=[],n=null;for(let i=0;in.height/2?r.push([o]):r[r.length-1].push(o),n=o}return r.map(i=>Dn($i(i)))}var ia=function(t){return t===void 0&&(t={}),{name:"inline",options:t,async fn(e){let{placement:r,elements:n,rects:i,platform:o,strategy:l}=e,{padding:h=2,x:u,y:f}=jt(t,e),y=Array.from(await(o.getClientRects==null?void 0:o.getClientRects(n.reference))||[]),b=ra(y),A=Dn($i(y)),E=ei(h);function O(){if(b.length===2&&b[0].left>b[1].right&&u!=null&&f!=null)return b.find(R=>u>R.left-E.left&&uR.top-E.top&&f=2){if(Pn(r)==="y"){let Z=b[0],me=b[b.length-1],s=pt(r)==="top",p=Z.top,v=me.bottom,d=s?Z.left:me.left,N=s?Z.right:me.right,_=N-d,M=v-p;return{top:p,bottom:v,left:d,right:N,width:_,height:M,x:d,y:p}}let R=pt(r)==="left",$=tt(...b.map(Z=>Z.right)),B=Et(...b.map(Z=>Z.left)),K=b.filter(Z=>R?Z.left===B:Z.right===$),X=K[0].top,ne=K[K.length-1].bottom,J=B,V=$,de=V-J,U=ne-X;return{top:X,bottom:ne,left:J,right:V,width:de,height:U,x:J,y:X}}return A}let P=await o.getElementRects({reference:{getBoundingClientRect:O},floating:n.floating,strategy:l});return i.reference.x!==P.reference.x||i.reference.y!==P.reference.y||i.reference.width!==P.reference.width||i.reference.height!==P.reference.height?{reset:{rects:P}}:{}}}};async function oa(t,e){let{placement:r,platform:n,elements:i}=t,o=await(n.isRTL==null?void 0:n.isRTL(i.floating)),l=pt(r),h=xt(r),u=Pn(r)==="y",f=["left","top"].includes(l)?-1:1,y=o&&u?-1:1,b=jt(e,t),{mainAxis:A,crossAxis:E,alignmentAxis:O}=typeof b=="number"?{mainAxis:b,crossAxis:0,alignmentAxis:null}:{mainAxis:0,crossAxis:0,alignmentAxis:null,...b};return h&&typeof O=="number"&&(E=h==="end"?O*-1:O),u?{x:E*y,y:A*f}:{x:A*f,y:E*y}}var Wi=function(t){return t===void 0&&(t=0),{name:"offset",options:t,async fn(e){var r,n;let{x:i,y:o,placement:l,middlewareData:h}=e,u=await oa(e,t);return l===((r=h.offset)==null?void 0:r.placement)&&(n=h.arrow)!=null&&n.alignmentOffset?{}:{x:i+u.x,y:o+u.y,data:{...u,placement:l}}}}},aa=function(t){return t===void 0&&(t={}),{name:"shift",options:t,async fn(e){let{x:r,y:n,placement:i}=e,{mainAxis:o=!0,crossAxis:l=!1,limiter:h={fn:R=>{let{x:$,y:B}=R;return{x:$,y:B}}},...u}=jt(t,e),f={x:r,y:n},y=await Tn(e,u),b=Pn(pt(i)),A=Bi(b),E=f[A],O=f[b];if(o){let R=A==="y"?"top":"left",$=A==="y"?"bottom":"right",B=E+y[R],K=E-y[$];E=Jr(B,E,K)}if(l){let R=b==="y"?"top":"left",$=b==="y"?"bottom":"right",B=O+y[R],K=O-y[$];O=Jr(B,O,K)}let P=h.fn({...e,[A]:E,[b]:O});return{...P,data:{x:P.x-r,y:P.y-n}}}}},sa=function(t){return t===void 0&&(t={}),{name:"size",options:t,async fn(e){let{placement:r,rects:n,platform:i,elements:o}=e,{apply:l=()=>{},...h}=jt(t,e),u=await Tn(e,h),f=pt(r),y=xt(r),b=Pn(r)==="y",{width:A,height:E}=n.floating,O,P;f==="top"||f==="bottom"?(O=f,P=y===(await(i.isRTL==null?void 0:i.isRTL(o.floating))?"start":"end")?"left":"right"):(P=f,O=y==="end"?"top":"bottom");let R=E-u[O],$=A-u[P],B=!e.middlewareData.shift,K=R,X=$;if(b){let J=A-u.left-u.right;X=y||B?Et($,J):J}else{let J=E-u.top-u.bottom;K=y||B?Et(R,J):J}if(B&&!y){let J=tt(u.left,0),V=tt(u.right,0),de=tt(u.top,0),U=tt(u.bottom,0);b?X=A-2*(J!==0||V!==0?J+V:tt(u.left,u.right)):K=E-2*(de!==0||U!==0?de+U:tt(u.top,u.bottom))}await l({...e,availableWidth:X,availableHeight:K});let ne=await i.getDimensions(o.floating);return A!==ne.width||E!==ne.height?{reset:{rects:!0}}:{}}}};function rn(t){return Vi(t)?(t.nodeName||"").toLowerCase():"#document"}function lt(t){var e;return(t==null||(e=t.ownerDocument)==null?void 0:e.defaultView)||window}function Bt(t){var e;return(e=(Vi(t)?t.ownerDocument:t.document)||window.document)==null?void 0:e.documentElement}function Vi(t){return t instanceof Node||t instanceof lt(t).Node}function kt(t){return t instanceof Element||t instanceof lt(t).Element}function _t(t){return t instanceof HTMLElement||t instanceof lt(t).HTMLElement}function Ii(t){return typeof ShadowRoot>"u"?!1:t instanceof ShadowRoot||t instanceof lt(t).ShadowRoot}function Un(t){let{overflow:e,overflowX:r,overflowY:n,display:i}=ht(t);return/auto|scroll|overlay|hidden|clip/.test(e+n+r)&&!["inline","contents"].includes(i)}function la(t){return["table","td","th"].includes(rn(t))}function ti(t){let e=ni(),r=ht(t);return r.transform!=="none"||r.perspective!=="none"||(r.containerType?r.containerType!=="normal":!1)||!e&&(r.backdropFilter?r.backdropFilter!=="none":!1)||!e&&(r.filter?r.filter!=="none":!1)||["transform","perspective","filter"].some(n=>(r.willChange||"").includes(n))||["paint","layout","strict","content"].some(n=>(r.contain||"").includes(n))}function ca(t){let e=_n(t);for(;_t(e)&&!gr(e);){if(ti(e))return e;e=_n(e)}return null}function ni(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}function gr(t){return["html","body","#document"].includes(rn(t))}function ht(t){return lt(t).getComputedStyle(t)}function br(t){return kt(t)?{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}:{scrollLeft:t.pageXOffset,scrollTop:t.pageYOffset}}function _n(t){if(rn(t)==="html")return t;let e=t.assignedSlot||t.parentNode||Ii(t)&&t.host||Bt(t);return Ii(e)?e.host:e}function zi(t){let e=_n(t);return gr(e)?t.ownerDocument?t.ownerDocument.body:t.body:_t(e)&&Un(e)?e:zi(e)}function zn(t,e,r){var n;e===void 0&&(e=[]),r===void 0&&(r=!0);let i=zi(t),o=i===((n=t.ownerDocument)==null?void 0:n.body),l=lt(i);return o?e.concat(l,l.visualViewport||[],Un(i)?i:[],l.frameElement&&r?zn(l.frameElement):[]):e.concat(i,zn(i,[],r))}function Ui(t){let e=ht(t),r=parseFloat(e.width)||0,n=parseFloat(e.height)||0,i=_t(t),o=i?t.offsetWidth:r,l=i?t.offsetHeight:n,h=hr(r)!==o||hr(n)!==l;return h&&(r=o,n=l),{width:r,height:n,$:h}}function ri(t){return kt(t)?t:t.contextElement}function Cn(t){let e=ri(t);if(!_t(e))return nn(1);let r=e.getBoundingClientRect(),{width:n,height:i,$:o}=Ui(e),l=(o?hr(r.width):r.width)/n,h=(o?hr(r.height):r.height)/i;return(!l||!Number.isFinite(l))&&(l=1),(!h||!Number.isFinite(h))&&(h=1),{x:l,y:h}}var fa=nn(0);function Yi(t){let e=lt(t);return!ni()||!e.visualViewport?fa:{x:e.visualViewport.offsetLeft,y:e.visualViewport.offsetTop}}function ua(t,e,r){return e===void 0&&(e=!1),!r||e&&r!==lt(t)?!1:e}function vn(t,e,r,n){e===void 0&&(e=!1),r===void 0&&(r=!1);let i=t.getBoundingClientRect(),o=ri(t),l=nn(1);e&&(n?kt(n)&&(l=Cn(n)):l=Cn(t));let h=ua(o,r,n)?Yi(o):nn(0),u=(i.left+h.x)/l.x,f=(i.top+h.y)/l.y,y=i.width/l.x,b=i.height/l.y;if(o){let A=lt(o),E=n&&kt(n)?lt(n):n,O=A,P=O.frameElement;for(;P&&n&&E!==O;){let R=Cn(P),$=P.getBoundingClientRect(),B=ht(P),K=$.left+(P.clientLeft+parseFloat(B.paddingLeft))*R.x,X=$.top+(P.clientTop+parseFloat(B.paddingTop))*R.y;u*=R.x,f*=R.y,y*=R.x,b*=R.y,u+=K,f+=X,O=lt(P),P=O.frameElement}}return Dn({width:y,height:b,x:u,y:f})}var da=[":popover-open",":modal"];function Xi(t){return da.some(e=>{try{return t.matches(e)}catch{return!1}})}function pa(t){let{elements:e,rect:r,offsetParent:n,strategy:i}=t,o=i==="fixed",l=Bt(n),h=e?Xi(e.floating):!1;if(n===l||h&&o)return r;let u={scrollLeft:0,scrollTop:0},f=nn(1),y=nn(0),b=_t(n);if((b||!b&&!o)&&((rn(n)!=="body"||Un(l))&&(u=br(n)),_t(n))){let A=vn(n);f=Cn(n),y.x=A.x+n.clientLeft,y.y=A.y+n.clientTop}return{width:r.width*f.x,height:r.height*f.y,x:r.x*f.x-u.scrollLeft*f.x+y.x,y:r.y*f.y-u.scrollTop*f.y+y.y}}function ha(t){return Array.from(t.getClientRects())}function qi(t){return vn(Bt(t)).left+br(t).scrollLeft}function va(t){let e=Bt(t),r=br(t),n=t.ownerDocument.body,i=tt(e.scrollWidth,e.clientWidth,n.scrollWidth,n.clientWidth),o=tt(e.scrollHeight,e.clientHeight,n.scrollHeight,n.clientHeight),l=-r.scrollLeft+qi(t),h=-r.scrollTop;return ht(n).direction==="rtl"&&(l+=tt(e.clientWidth,n.clientWidth)-i),{width:i,height:o,x:l,y:h}}function ma(t,e){let r=lt(t),n=Bt(t),i=r.visualViewport,o=n.clientWidth,l=n.clientHeight,h=0,u=0;if(i){o=i.width,l=i.height;let f=ni();(!f||f&&e==="fixed")&&(h=i.offsetLeft,u=i.offsetTop)}return{width:o,height:l,x:h,y:u}}function ga(t,e){let r=vn(t,!0,e==="fixed"),n=r.top+t.clientTop,i=r.left+t.clientLeft,o=_t(t)?Cn(t):nn(1),l=t.clientWidth*o.x,h=t.clientHeight*o.y,u=i*o.x,f=n*o.y;return{width:l,height:h,x:u,y:f}}function Fi(t,e,r){let n;if(e==="viewport")n=ma(t,r);else if(e==="document")n=va(Bt(t));else if(kt(e))n=ga(e,r);else{let i=Yi(t);n={...e,x:e.x-i.x,y:e.y-i.y}}return Dn(n)}function Gi(t,e){let r=_n(t);return r===e||!kt(r)||gr(r)?!1:ht(r).position==="fixed"||Gi(r,e)}function ba(t,e){let r=e.get(t);if(r)return r;let n=zn(t,[],!1).filter(h=>kt(h)&&rn(h)!=="body"),i=null,o=ht(t).position==="fixed",l=o?_n(t):t;for(;kt(l)&&!gr(l);){let h=ht(l),u=ti(l);!u&&h.position==="fixed"&&(i=null),(o?!u&&!i:!u&&h.position==="static"&&!!i&&["absolute","fixed"].includes(i.position)||Un(l)&&!u&&Gi(t,l))?n=n.filter(y=>y!==l):i=h,l=_n(l)}return e.set(t,n),n}function ya(t){let{element:e,boundary:r,rootBoundary:n,strategy:i}=t,l=[...r==="clippingAncestors"?ba(e,this._c):[].concat(r),n],h=l[0],u=l.reduce((f,y)=>{let b=Fi(e,y,i);return f.top=tt(b.top,f.top),f.right=Et(b.right,f.right),f.bottom=Et(b.bottom,f.bottom),f.left=tt(b.left,f.left),f},Fi(e,h,i));return{width:u.right-u.left,height:u.bottom-u.top,x:u.left,y:u.top}}function wa(t){let{width:e,height:r}=Ui(t);return{width:e,height:r}}function xa(t,e,r){let n=_t(e),i=Bt(e),o=r==="fixed",l=vn(t,!0,o,e),h={scrollLeft:0,scrollTop:0},u=nn(0);if(n||!n&&!o)if((rn(e)!=="body"||Un(i))&&(h=br(e)),n){let b=vn(e,!0,o,e);u.x=b.x+e.clientLeft,u.y=b.y+e.clientTop}else i&&(u.x=qi(i));let f=l.left+h.scrollLeft-u.x,y=l.top+h.scrollTop-u.y;return{x:f,y,width:l.width,height:l.height}}function Li(t,e){return!_t(t)||ht(t).position==="fixed"?null:e?e(t):t.offsetParent}function Ki(t,e){let r=lt(t);if(!_t(t)||Xi(t))return r;let n=Li(t,e);for(;n&&la(n)&&ht(n).position==="static";)n=Li(n,e);return n&&(rn(n)==="html"||rn(n)==="body"&&ht(n).position==="static"&&!ti(n))?r:n||ca(t)||r}var Ea=async function(t){let e=this.getOffsetParent||Ki,r=this.getDimensions;return{reference:xa(t.reference,await e(t.floating),t.strategy),floating:{x:0,y:0,...await r(t.floating)}}};function Oa(t){return ht(t).direction==="rtl"}var Sa={convertOffsetParentRelativeRectToViewportRelativeRect:pa,getDocumentElement:Bt,getClippingRect:ya,getOffsetParent:Ki,getElementRects:Ea,getClientRects:ha,getDimensions:wa,getScale:Cn,isElement:kt,isRTL:Oa};function Aa(t,e){let r=null,n,i=Bt(t);function o(){var h;clearTimeout(n),(h=r)==null||h.disconnect(),r=null}function l(h,u){h===void 0&&(h=!1),u===void 0&&(u=1),o();let{left:f,top:y,width:b,height:A}=t.getBoundingClientRect();if(h||e(),!b||!A)return;let E=pr(y),O=pr(i.clientWidth-(f+b)),P=pr(i.clientHeight-(y+A)),R=pr(f),B={rootMargin:-E+"px "+-O+"px "+-P+"px "+-R+"px",threshold:tt(0,Et(1,u))||1},K=!0;function X(ne){let J=ne[0].intersectionRatio;if(J!==u){if(!K)return l();J?l(!1,J):n=setTimeout(()=>{l(!1,1e-7)},100)}K=!1}try{r=new IntersectionObserver(X,{...B,root:i.ownerDocument})}catch{r=new IntersectionObserver(X,B)}r.observe(t)}return l(!0),o}function Ni(t,e,r,n){n===void 0&&(n={});let{ancestorScroll:i=!0,ancestorResize:o=!0,elementResize:l=typeof ResizeObserver=="function",layoutShift:h=typeof IntersectionObserver=="function",animationFrame:u=!1}=n,f=ri(t),y=i||o?[...f?zn(f):[],...zn(e)]:[];y.forEach($=>{i&&$.addEventListener("scroll",r,{passive:!0}),o&&$.addEventListener("resize",r)});let b=f&&h?Aa(f,r):null,A=-1,E=null;l&&(E=new ResizeObserver($=>{let[B]=$;B&&B.target===f&&E&&(E.unobserve(e),cancelAnimationFrame(A),A=requestAnimationFrame(()=>{var K;(K=E)==null||K.observe(e)})),r()}),f&&!u&&E.observe(f),E.observe(e));let O,P=u?vn(t):null;u&&R();function R(){let $=vn(t);P&&($.x!==P.x||$.y!==P.y||$.width!==P.width||$.height!==P.height)&&r(),P=$,O=requestAnimationFrame(R)}return r(),()=>{var $;y.forEach(B=>{i&&B.removeEventListener("scroll",r),o&&B.removeEventListener("resize",r)}),b?.(),($=E)==null||$.disconnect(),E=null,u&&cancelAnimationFrame(O)}}var ii=ea,Ji=aa,Zi=ta,Qi=sa,eo=na,to=Zo,no=ia,ki=(t,e,r)=>{let n=new Map,i={platform:Sa,...r},o={...i.platform,_c:n};return Jo(t,e,{...i,platform:o})},Ca=t=>{let e={placement:"bottom",strategy:"absolute",middleware:[]},r=Object.keys(t),n=i=>t[i];return r.includes("offset")&&e.middleware.push(Wi(n("offset"))),r.includes("teleport")&&(e.strategy="fixed"),r.includes("placement")&&(e.placement=n("placement")),r.includes("autoPlacement")&&!r.includes("flip")&&e.middleware.push(ii(n("autoPlacement"))),r.includes("flip")&&e.middleware.push(Zi(n("flip"))),r.includes("shift")&&e.middleware.push(Ji(n("shift"))),r.includes("inline")&&e.middleware.push(no(n("inline"))),r.includes("arrow")&&e.middleware.push(to(n("arrow"))),r.includes("hide")&&e.middleware.push(eo(n("hide"))),r.includes("size")&&e.middleware.push(Qi(n("size"))),e},Da=(t,e)=>{let r={component:{trap:!1},float:{placement:"bottom",strategy:"absolute",middleware:[]}},n=i=>t[t.indexOf(i)+1];if(t.includes("trap")&&(r.component.trap=!0),t.includes("teleport")&&(r.float.strategy="fixed"),t.includes("offset")&&r.float.middleware.push(Wi(e.offset||10)),t.includes("placement")&&(r.float.placement=n("placement")),t.includes("autoPlacement")&&!t.includes("flip")&&r.float.middleware.push(ii(e.autoPlacement)),t.includes("flip")&&r.float.middleware.push(Zi(e.flip)),t.includes("shift")&&r.float.middleware.push(Ji(e.shift)),t.includes("inline")&&r.float.middleware.push(no(e.inline)),t.includes("arrow")&&r.float.middleware.push(to(e.arrow)),t.includes("hide")&&r.float.middleware.push(eo(e.hide)),t.includes("size")){let i=e.size?.availableWidth??null,o=e.size?.availableHeight??null;i&&delete e.size.availableWidth,o&&delete e.size.availableHeight,r.float.middleware.push(Qi({...e.size,apply({availableWidth:l,availableHeight:h,elements:u}){Object.assign(u.floating.style,{maxWidth:`${i??l}px`,maxHeight:`${o??h}px`})}}))}return r},Ta=t=>{var e="0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz".split(""),r="";t||(t=Math.floor(Math.random()*e.length));for(var n=0;n{}){let r=!1;return function(){r?e.apply(this,arguments):(r=!0,t.apply(this,arguments))}}function Pa(t){let e={dismissable:!0,trap:!1};function r(n,i=null){if(n){if(n.hasAttribute("aria-expanded")||n.setAttribute("aria-expanded",!1),i.hasAttribute("id"))n.setAttribute("aria-controls",i.getAttribute("id"));else{let o=`panel-${Ta(8)}`;n.setAttribute("aria-controls",o),i.setAttribute("id",o)}i.setAttribute("aria-modal",!0),i.setAttribute("role","dialog")}}t.magic("float",n=>(i={},o={})=>{let l={...e,...o},h=Object.keys(i).length>0?Ca(i):{middleware:[ii()]},u=n,f=n.parentElement.closest("[x-data]"),y=f.querySelector('[x-ref="panel"]');r(u,y);function b(){return y.style.display=="block"}function A(){y.style.display="none",u.setAttribute("aria-expanded","false"),l.trap&&y.setAttribute("x-trap","false"),Ni(n,y,P)}function E(){y.style.display="block",u.setAttribute("aria-expanded","true"),l.trap&&y.setAttribute("x-trap","true"),P()}function O(){b()?A():E()}async function P(){return await ki(n,y,h).then(({middlewareData:R,placement:$,x:B,y:K})=>{if(R.arrow){let X=R.arrow?.x,ne=R.arrow?.y,J=h.middleware.filter(de=>de.name=="arrow")[0].options.element,V={top:"bottom",right:"left",bottom:"top",left:"right"}[$.split("-")[0]];Object.assign(J.style,{left:X!=null?`${X}px`:"",top:ne!=null?`${ne}px`:"",right:"",bottom:"",[V]:"-4px"})}if(R.hide){let{referenceHidden:X}=R.hide;Object.assign(y.style,{visibility:X?"hidden":"visible"})}Object.assign(y.style,{left:`${B}px`,top:`${K}px`})})}l.dismissable&&(window.addEventListener("click",R=>{!f.contains(R.target)&&b()&&O()}),window.addEventListener("keydown",R=>{R.key==="Escape"&&b()&&O()},!0)),O()}),t.directive("float",(n,{modifiers:i,expression:o},{evaluate:l,effect:h})=>{let u=o?l(o):{},f=i.length>0?Da(i,u):{},y=null;f.float.strategy=="fixed"&&(n.style.position="fixed");let b=V=>n.parentElement&&!n.parentElement.closest("[x-data]").contains(V.target)?n.close():null,A=V=>V.key==="Escape"?n.close():null,E=n.getAttribute("x-ref"),O=n.parentElement.closest("[x-data]"),P=O.querySelectorAll(`[\\@click^="$refs.${E}"]`),R=O.querySelectorAll(`[x-on\\:click^="$refs.${E}"]`);n.style.setProperty("display","none"),r([...P,...R][0],n),n._x_isShown=!1,n.trigger=null,n._x_doHide||(n._x_doHide=()=>{n.style.setProperty("display","none",i.includes("important")?"important":void 0)}),n._x_doShow||(n._x_doShow=()=>{n.style.setProperty("display","block",i.includes("important")?"important":void 0)});let $=()=>{n._x_doHide(),n._x_isShown=!1},B=()=>{n._x_doShow(),n._x_isShown=!0},K=()=>setTimeout(B),X=_a(V=>V?B():$(),V=>{typeof n._x_toggleAndCascadeWithTransitions=="function"?n._x_toggleAndCascadeWithTransitions(n,V,B,$):V?K():$()}),ne,J=!0;h(()=>l(V=>{!J&&V===ne||(i.includes("immediate")&&(V?K():$()),X(V),ne=V,J=!1)})),n.open=async function(V){n.trigger=V.currentTarget?V.currentTarget:V,X(!0),n.trigger.setAttribute("aria-expanded","true"),f.component.trap&&n.setAttribute("x-trap","true"),y=Ni(n.trigger,n,()=>{ki(n.trigger,n,f.float).then(({middlewareData:de,placement:U,x:Z,y:me})=>{if(de.arrow){let s=de.arrow?.x,p=de.arrow?.y,v=f.float.middleware.filter(N=>N.name=="arrow")[0].options.element,d={top:"bottom",right:"left",bottom:"top",left:"right"}[U.split("-")[0]];Object.assign(v.style,{left:s!=null?`${s}px`:"",top:p!=null?`${p}px`:"",right:"",bottom:"",[d]:"-4px"})}if(de.hide){let{referenceHidden:s}=de.hide;Object.assign(n.style,{visibility:s?"hidden":"visible"})}Object.assign(n.style,{left:`${Z}px`,top:`${me}px`})})}),window.addEventListener("click",b),window.addEventListener("keydown",A,!0)},n.close=function(){if(!n._x_isShown)return!1;X(!1),n.trigger.setAttribute("aria-expanded","false"),f.component.trap&&n.setAttribute("x-trap","false"),y(),window.removeEventListener("click",b),window.removeEventListener("keydown",A,!1)},n.toggle=function(V){n._x_isShown?n.close():n.open(V)}})}var ro=Pa;function Ma(t){t.store("lazyLoadedAssets",{loaded:new Set,check(l){return Array.isArray(l)?l.every(h=>this.loaded.has(h)):this.loaded.has(l)},markLoaded(l){Array.isArray(l)?l.forEach(h=>this.loaded.add(h)):this.loaded.add(l)}});function e(l){return new CustomEvent(l,{bubbles:!0,composed:!0,cancelable:!0})}function r(l,h={},u,f){let y=document.createElement(l);for(let[b,A]of Object.entries(h))y[b]=A;return u&&(f?u.insertBefore(y,f):u.appendChild(y)),y}function n(l,h,u={},f=null,y=null){let b=l==="link"?`link[href="${h}"]`:`script[src="${h}"]`;if(document.querySelector(b)||t.store("lazyLoadedAssets").check(h))return Promise.resolve();let A=l==="link"?{...u,href:h}:{...u,src:h},E=r(l,A,f,y);return new Promise((O,P)=>{E.onload=()=>{t.store("lazyLoadedAssets").markLoaded(h),O()},E.onerror=()=>{P(new Error(`Failed to load ${l}: ${h}`))}})}async function i(l,h,u=null,f=null){let y={type:"text/css",rel:"stylesheet"};h&&(y.media=h);let b=document.head,A=null;if(u&&f){let E=document.querySelector(`link[href*="${f}"]`);E?(b=E.parentNode,A=u==="before"?E:E.nextSibling):console.warn(`Target (${f}) not found for ${l}. Appending to head.`)}await n("link",l,y,b,A)}async function o(l,h,u=null,f=null){let y,b;u&&f&&(y=document.querySelector(`script[src*="${f}"]`),y?b=u==="before"?y:y.nextSibling:console.warn(`Target (${f}) not found for ${l}. Appending to body.`));let A=h.has("body-start")?"prepend":"append";await n("script",l,{},y||document[h.has("body-end")?"body":"head"],b)}t.directive("load-css",(l,{expression:h},{evaluate:u})=>{let f=u(h),y=l.media,b=l.getAttribute("data-dispatch"),A=l.getAttribute("data-css-before")?"before":l.getAttribute("data-css-after")?"after":null,E=l.getAttribute("data-css-before")||l.getAttribute("data-css-after")||null;Promise.all(f.map(O=>i(O,y,A,E))).then(()=>{b&&window.dispatchEvent(e(b+"-css"))}).catch(O=>{console.error(O)})}),t.directive("load-js",(l,{expression:h,modifiers:u},{evaluate:f})=>{let y=f(h),b=new Set(u),A=l.getAttribute("data-js-before")?"before":l.getAttribute("data-js-after")?"after":null,E=l.getAttribute("data-js-before")||l.getAttribute("data-js-after")||null,O=l.getAttribute("data-dispatch");Promise.all(y.map(P=>o(P,b,A,E))).then(()=>{O&&window.dispatchEvent(e(O+"-js"))}).catch(P=>{console.error(P)})})}var io=Ma;var ko=zo(so(),1);function lo(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),r.push.apply(r,n)}return r}function Mt(t){for(var e=1;e=0)&&(r[i]=t[i]);return r}function Fa(t,e){if(t==null)return{};var r=Ia(t,e),n,i;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(i=0;i=0)&&Object.prototype.propertyIsEnumerable.call(t,n)&&(r[n]=t[n])}return r}var La="1.15.2";function Ht(t){if(typeof window<"u"&&window.navigator)return!!navigator.userAgent.match(t)}var Wt=Ht(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i),er=Ht(/Edge/i),co=Ht(/firefox/i),Gn=Ht(/safari/i)&&!Ht(/chrome/i)&&!Ht(/android/i),bo=Ht(/iP(ad|od|hone)/i),yo=Ht(/chrome/i)&&Ht(/android/i),wo={capture:!1,passive:!1};function Ce(t,e,r){t.addEventListener(e,r,!Wt&&wo)}function Oe(t,e,r){t.removeEventListener(e,r,!Wt&&wo)}function _r(t,e){if(e){if(e[0]===">"&&(e=e.substring(1)),t)try{if(t.matches)return t.matches(e);if(t.msMatchesSelector)return t.msMatchesSelector(e);if(t.webkitMatchesSelector)return t.webkitMatchesSelector(e)}catch{return!1}return!1}}function Na(t){return t.host&&t!==document&&t.host.nodeType?t.host:t.parentNode}function St(t,e,r,n){if(t){r=r||document;do{if(e!=null&&(e[0]===">"?t.parentNode===r&&_r(t,e):_r(t,e))||n&&t===r)return t;if(t===r)break}while(t=Na(t))}return null}var fo=/\s+/g;function ct(t,e,r){if(t&&e)if(t.classList)t.classList[r?"add":"remove"](e);else{var n=(" "+t.className+" ").replace(fo," ").replace(" "+e+" "," ");t.className=(n+(r?" "+e:"")).replace(fo," ")}}function ae(t,e,r){var n=t&&t.style;if(n){if(r===void 0)return document.defaultView&&document.defaultView.getComputedStyle?r=document.defaultView.getComputedStyle(t,""):t.currentStyle&&(r=t.currentStyle),e===void 0?r:r[e];!(e in n)&&e.indexOf("webkit")===-1&&(e="-webkit-"+e),n[e]=r+(typeof r=="string"?"":"px")}}function Ln(t,e){var r="";if(typeof t=="string")r=t;else do{var n=ae(t,"transform");n&&n!=="none"&&(r=n+" "+r)}while(!e&&(t=t.parentNode));var i=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return i&&new i(r)}function xo(t,e,r){if(t){var n=t.getElementsByTagName(e),i=0,o=n.length;if(r)for(;i=o:l=i<=o,!l)return n;if(n===Pt())break;n=sn(n,!1)}return!1}function Nn(t,e,r,n){for(var i=0,o=0,l=t.children;o2&&arguments[2]!==void 0?arguments[2]:{},i=n.evt,o=Fa(n,za);tr.pluginEvent.bind(se)(e,r,Mt({dragEl:L,parentEl:ze,ghostEl:ue,rootEl:ke,nextEl:bn,lastDownEl:Ar,cloneEl:We,cloneHidden:an,dragStarted:Yn,putSortable:Ze,activeSortable:se.active,originalEvent:i,oldIndex:Fn,oldDraggableIndex:Jn,newIndex:ft,newDraggableIndex:on,hideGhostForTarget:_o,unhideGhostForTarget:Po,cloneNowHidden:function(){an=!0},cloneNowShown:function(){an=!1},dispatchSortableEvent:function(h){it({sortable:r,name:h,originalEvent:i})}},o))};function it(t){Va(Mt({putSortable:Ze,cloneEl:We,targetEl:L,rootEl:ke,oldIndex:Fn,oldDraggableIndex:Jn,newIndex:ft,newDraggableIndex:on},t))}var L,ze,ue,ke,bn,Ar,We,an,Fn,ft,Jn,on,wr,Ze,In=!1,Pr=!1,Mr=[],mn,Ot,si,li,ho,vo,Yn,Rn,Zn,Qn=!1,xr=!1,Cr,nt,ci=[],hi=!1,Rr=[],Fr=typeof document<"u",Er=bo,mo=er||Wt?"cssFloat":"float",Ua=Fr&&!yo&&!bo&&"draggable"in document.createElement("div"),Co=function(){if(Fr){if(Wt)return!1;var t=document.createElement("x");return t.style.cssText="pointer-events:auto",t.style.pointerEvents==="auto"}}(),Do=function(e,r){var n=ae(e),i=parseInt(n.width)-parseInt(n.paddingLeft)-parseInt(n.paddingRight)-parseInt(n.borderLeftWidth)-parseInt(n.borderRightWidth),o=Nn(e,0,r),l=Nn(e,1,r),h=o&&ae(o),u=l&&ae(l),f=h&&parseInt(h.marginLeft)+parseInt(h.marginRight)+qe(o).width,y=u&&parseInt(u.marginLeft)+parseInt(u.marginRight)+qe(l).width;if(n.display==="flex")return n.flexDirection==="column"||n.flexDirection==="column-reverse"?"vertical":"horizontal";if(n.display==="grid")return n.gridTemplateColumns.split(" ").length<=1?"vertical":"horizontal";if(o&&h.float&&h.float!=="none"){var b=h.float==="left"?"left":"right";return l&&(u.clear==="both"||u.clear===b)?"vertical":"horizontal"}return o&&(h.display==="block"||h.display==="flex"||h.display==="table"||h.display==="grid"||f>=i&&n[mo]==="none"||l&&n[mo]==="none"&&f+y>i)?"vertical":"horizontal"},Ya=function(e,r,n){var i=n?e.left:e.top,o=n?e.right:e.bottom,l=n?e.width:e.height,h=n?r.left:r.top,u=n?r.right:r.bottom,f=n?r.width:r.height;return i===h||o===u||i+l/2===h+f/2},Xa=function(e,r){var n;return Mr.some(function(i){var o=i[ut].options.emptyInsertThreshold;if(!(!o||bi(i))){var l=qe(i),h=e>=l.left-o&&e<=l.right+o,u=r>=l.top-o&&r<=l.bottom+o;if(h&&u)return n=i}}),n},To=function(e){function r(o,l){return function(h,u,f,y){var b=h.options.group.name&&u.options.group.name&&h.options.group.name===u.options.group.name;if(o==null&&(l||b))return!0;if(o==null||o===!1)return!1;if(l&&o==="clone")return o;if(typeof o=="function")return r(o(h,u,f,y),l)(h,u,f,y);var A=(l?h:u).options.group.name;return o===!0||typeof o=="string"&&o===A||o.join&&o.indexOf(A)>-1}}var n={},i=e.group;(!i||Sr(i)!="object")&&(i={name:i}),n.name=i.name,n.checkPull=r(i.pull,!0),n.checkPut=r(i.put),n.revertClone=i.revertClone,e.group=n},_o=function(){!Co&&ue&&ae(ue,"display","none")},Po=function(){!Co&&ue&&ae(ue,"display","")};Fr&&!yo&&document.addEventListener("click",function(t){if(Pr)return t.preventDefault(),t.stopPropagation&&t.stopPropagation(),t.stopImmediatePropagation&&t.stopImmediatePropagation(),Pr=!1,!1},!0);var gn=function(e){if(L){e=e.touches?e.touches[0]:e;var r=Xa(e.clientX,e.clientY);if(r){var n={};for(var i in e)e.hasOwnProperty(i)&&(n[i]=e[i]);n.target=n.rootEl=r,n.preventDefault=void 0,n.stopPropagation=void 0,r[ut]._onDragOver(n)}}},qa=function(e){L&&L.parentNode[ut]._isOutsideThisEl(e.target)};function se(t,e){if(!(t&&t.nodeType&&t.nodeType===1))throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(t));this.el=t,this.options=e=$t({},e),t[ut]=this;var r={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(t.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return Do(t,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(l,h){l.setData("Text",h.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:se.supportPointer!==!1&&"PointerEvent"in window&&!Gn,emptyInsertThreshold:5};tr.initializePlugins(this,t,r);for(var n in r)!(n in e)&&(e[n]=r[n]);To(e);for(var i in this)i.charAt(0)==="_"&&typeof this[i]=="function"&&(this[i]=this[i].bind(this));this.nativeDraggable=e.forceFallback?!1:Ua,this.nativeDraggable&&(this.options.touchStartThreshold=1),e.supportPointer?Ce(t,"pointerdown",this._onTapStart):(Ce(t,"mousedown",this._onTapStart),Ce(t,"touchstart",this._onTapStart)),this.nativeDraggable&&(Ce(t,"dragover",this),Ce(t,"dragenter",this)),Mr.push(this.el),e.store&&e.store.get&&this.sort(e.store.get(this)||[]),$t(this,Ha())}se.prototype={constructor:se,_isOutsideThisEl:function(e){!this.el.contains(e)&&e!==this.el&&(Rn=null)},_getDirection:function(e,r){return typeof this.options.direction=="function"?this.options.direction.call(this,e,r,L):this.options.direction},_onTapStart:function(e){if(e.cancelable){var r=this,n=this.el,i=this.options,o=i.preventOnFilter,l=e.type,h=e.touches&&e.touches[0]||e.pointerType&&e.pointerType==="touch"&&e,u=(h||e).target,f=e.target.shadowRoot&&(e.path&&e.path[0]||e.composedPath&&e.composedPath()[0])||u,y=i.filter;if(ns(n),!L&&!(/mousedown|pointerdown/.test(l)&&e.button!==0||i.disabled)&&!f.isContentEditable&&!(!this.nativeDraggable&&Gn&&u&&u.tagName.toUpperCase()==="SELECT")&&(u=St(u,i.draggable,n,!1),!(u&&u.animated)&&Ar!==u)){if(Fn=vt(u),Jn=vt(u,i.draggable),typeof y=="function"){if(y.call(this,e,u,this)){it({sortable:r,rootEl:f,name:"filter",targetEl:u,toEl:n,fromEl:n}),at("filter",r,{evt:e}),o&&e.cancelable&&e.preventDefault();return}}else if(y&&(y=y.split(",").some(function(b){if(b=St(f,b.trim(),n,!1),b)return it({sortable:r,rootEl:b,name:"filter",targetEl:u,fromEl:n,toEl:n}),at("filter",r,{evt:e}),!0}),y)){o&&e.cancelable&&e.preventDefault();return}i.handle&&!St(f,i.handle,n,!1)||this._prepareDragStart(e,h,u)}}},_prepareDragStart:function(e,r,n){var i=this,o=i.el,l=i.options,h=o.ownerDocument,u;if(n&&!L&&n.parentNode===o){var f=qe(n);if(ke=o,L=n,ze=L.parentNode,bn=L.nextSibling,Ar=n,wr=l.group,se.dragged=L,mn={target:L,clientX:(r||e).clientX,clientY:(r||e).clientY},ho=mn.clientX-f.left,vo=mn.clientY-f.top,this._lastX=(r||e).clientX,this._lastY=(r||e).clientY,L.style["will-change"]="all",u=function(){if(at("delayEnded",i,{evt:e}),se.eventCanceled){i._onDrop();return}i._disableDelayedDragEvents(),!co&&i.nativeDraggable&&(L.draggable=!0),i._triggerDragStart(e,r),it({sortable:i,name:"choose",originalEvent:e}),ct(L,l.chosenClass,!0)},l.ignore.split(",").forEach(function(y){xo(L,y.trim(),fi)}),Ce(h,"dragover",gn),Ce(h,"mousemove",gn),Ce(h,"touchmove",gn),Ce(h,"mouseup",i._onDrop),Ce(h,"touchend",i._onDrop),Ce(h,"touchcancel",i._onDrop),co&&this.nativeDraggable&&(this.options.touchStartThreshold=4,L.draggable=!0),at("delayStart",this,{evt:e}),l.delay&&(!l.delayOnTouchOnly||r)&&(!this.nativeDraggable||!(er||Wt))){if(se.eventCanceled){this._onDrop();return}Ce(h,"mouseup",i._disableDelayedDrag),Ce(h,"touchend",i._disableDelayedDrag),Ce(h,"touchcancel",i._disableDelayedDrag),Ce(h,"mousemove",i._delayedDragTouchMoveHandler),Ce(h,"touchmove",i._delayedDragTouchMoveHandler),l.supportPointer&&Ce(h,"pointermove",i._delayedDragTouchMoveHandler),i._dragStartTimer=setTimeout(u,l.delay)}else u()}},_delayedDragTouchMoveHandler:function(e){var r=e.touches?e.touches[0]:e;Math.max(Math.abs(r.clientX-this._lastX),Math.abs(r.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){L&&fi(L),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var e=this.el.ownerDocument;Oe(e,"mouseup",this._disableDelayedDrag),Oe(e,"touchend",this._disableDelayedDrag),Oe(e,"touchcancel",this._disableDelayedDrag),Oe(e,"mousemove",this._delayedDragTouchMoveHandler),Oe(e,"touchmove",this._delayedDragTouchMoveHandler),Oe(e,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(e,r){r=r||e.pointerType=="touch"&&e,!this.nativeDraggable||r?this.options.supportPointer?Ce(document,"pointermove",this._onTouchMove):r?Ce(document,"touchmove",this._onTouchMove):Ce(document,"mousemove",this._onTouchMove):(Ce(L,"dragend",this),Ce(ke,"dragstart",this._onDragStart));try{document.selection?Dr(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch{}},_dragStarted:function(e,r){if(In=!1,ke&&L){at("dragStarted",this,{evt:r}),this.nativeDraggable&&Ce(document,"dragover",qa);var n=this.options;!e&&ct(L,n.dragClass,!1),ct(L,n.ghostClass,!0),se.active=this,e&&this._appendGhost(),it({sortable:this,name:"start",originalEvent:r})}else this._nulling()},_emulateDragOver:function(){if(Ot){this._lastX=Ot.clientX,this._lastY=Ot.clientY,_o();for(var e=document.elementFromPoint(Ot.clientX,Ot.clientY),r=e;e&&e.shadowRoot&&(e=e.shadowRoot.elementFromPoint(Ot.clientX,Ot.clientY),e!==r);)r=e;if(L.parentNode[ut]._isOutsideThisEl(e),r)do{if(r[ut]){var n=void 0;if(n=r[ut]._onDragOver({clientX:Ot.clientX,clientY:Ot.clientY,target:e,rootEl:r}),n&&!this.options.dragoverBubble)break}e=r}while(r=r.parentNode);Po()}},_onTouchMove:function(e){if(mn){var r=this.options,n=r.fallbackTolerance,i=r.fallbackOffset,o=e.touches?e.touches[0]:e,l=ue&&Ln(ue,!0),h=ue&&l&&l.a,u=ue&&l&&l.d,f=Er&&nt&&po(nt),y=(o.clientX-mn.clientX+i.x)/(h||1)+(f?f[0]-ci[0]:0)/(h||1),b=(o.clientY-mn.clientY+i.y)/(u||1)+(f?f[1]-ci[1]:0)/(u||1);if(!se.active&&!In){if(n&&Math.max(Math.abs(o.clientX-this._lastX),Math.abs(o.clientY-this._lastY))=0&&(it({rootEl:ze,name:"add",toEl:ze,fromEl:ke,originalEvent:e}),it({sortable:this,name:"remove",toEl:ze,originalEvent:e}),it({rootEl:ze,name:"sort",toEl:ze,fromEl:ke,originalEvent:e}),it({sortable:this,name:"sort",toEl:ze,originalEvent:e})),Ze&&Ze.save()):ft!==Fn&&ft>=0&&(it({sortable:this,name:"update",toEl:ze,originalEvent:e}),it({sortable:this,name:"sort",toEl:ze,originalEvent:e})),se.active&&((ft==null||ft===-1)&&(ft=Fn,on=Jn),it({sortable:this,name:"end",toEl:ze,originalEvent:e}),this.save()))),this._nulling()},_nulling:function(){at("nulling",this),ke=L=ze=ue=bn=We=Ar=an=mn=Ot=Yn=ft=on=Fn=Jn=Rn=Zn=Ze=wr=se.dragged=se.ghost=se.clone=se.active=null,Rr.forEach(function(e){e.checked=!0}),Rr.length=si=li=0},handleEvent:function(e){switch(e.type){case"drop":case"dragend":this._onDrop(e);break;case"dragenter":case"dragover":L&&(this._onDragOver(e),Ga(e));break;case"selectstart":e.preventDefault();break}},toArray:function(){for(var e=[],r,n=this.el.children,i=0,o=n.length,l=this.options;ii.right+o||t.clientY>n.bottom&&t.clientX>n.left:t.clientY>i.bottom+o||t.clientX>n.right&&t.clientY>n.top}function Qa(t,e,r,n,i,o,l,h){var u=n?t.clientY:t.clientX,f=n?r.height:r.width,y=n?r.top:r.left,b=n?r.bottom:r.right,A=!1;if(!l){if(h&&Cry+f*o/2:ub-Cr)return-Zn}else if(u>y+f*(1-i)/2&&ub-f*o/2)?u>y+f/2?1:-1:0}function es(t){return vt(L){t.directive("sortable",e=>{let r=parseInt(e.dataset?.sortableAnimationDuration);r!==0&&!r&&(r=300),e.sortable=xi.create(e,{group:e.getAttribute("x-sortable-group"),draggable:"[x-sortable-item]",handle:"[x-sortable-handle]",dataIdAttr:"x-sortable-item",animation:r,ghostClass:"fi-sortable-ghost"})})};var is=Object.create,Si=Object.defineProperty,os=Object.getPrototypeOf,as=Object.prototype.hasOwnProperty,ss=Object.getOwnPropertyNames,ls=Object.getOwnPropertyDescriptor,cs=t=>Si(t,"__esModule",{value:!0}),Io=(t,e)=>()=>(e||(e={exports:{}},t(e.exports,e)),e.exports),fs=(t,e,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of ss(e))!as.call(t,n)&&n!=="default"&&Si(t,n,{get:()=>e[n],enumerable:!(r=ls(e,n))||r.enumerable});return t},Fo=t=>fs(cs(Si(t!=null?is(os(t)):{},"default",t&&t.__esModule&&"default"in t?{get:()=>t.default,enumerable:!0}:{value:t,enumerable:!0})),t),us=Io(t=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});function e(c){var a=c.getBoundingClientRect();return{width:a.width,height:a.height,top:a.top,right:a.right,bottom:a.bottom,left:a.left,x:a.left,y:a.top}}function r(c){if(c==null)return window;if(c.toString()!=="[object Window]"){var a=c.ownerDocument;return a&&a.defaultView||window}return c}function n(c){var a=r(c),g=a.pageXOffset,D=a.pageYOffset;return{scrollLeft:g,scrollTop:D}}function i(c){var a=r(c).Element;return c instanceof a||c instanceof Element}function o(c){var a=r(c).HTMLElement;return c instanceof a||c instanceof HTMLElement}function l(c){if(typeof ShadowRoot>"u")return!1;var a=r(c).ShadowRoot;return c instanceof a||c instanceof ShadowRoot}function h(c){return{scrollLeft:c.scrollLeft,scrollTop:c.scrollTop}}function u(c){return c===r(c)||!o(c)?n(c):h(c)}function f(c){return c?(c.nodeName||"").toLowerCase():null}function y(c){return((i(c)?c.ownerDocument:c.document)||window.document).documentElement}function b(c){return e(y(c)).left+n(c).scrollLeft}function A(c){return r(c).getComputedStyle(c)}function E(c){var a=A(c),g=a.overflow,D=a.overflowX,T=a.overflowY;return/auto|scroll|overlay|hidden/.test(g+T+D)}function O(c,a,g){g===void 0&&(g=!1);var D=y(a),T=e(c),F=o(a),W={scrollLeft:0,scrollTop:0},j={x:0,y:0};return(F||!F&&!g)&&((f(a)!=="body"||E(D))&&(W=u(a)),o(a)?(j=e(a),j.x+=a.clientLeft,j.y+=a.clientTop):D&&(j.x=b(D))),{x:T.left+W.scrollLeft-j.x,y:T.top+W.scrollTop-j.y,width:T.width,height:T.height}}function P(c){var a=e(c),g=c.offsetWidth,D=c.offsetHeight;return Math.abs(a.width-g)<=1&&(g=a.width),Math.abs(a.height-D)<=1&&(D=a.height),{x:c.offsetLeft,y:c.offsetTop,width:g,height:D}}function R(c){return f(c)==="html"?c:c.assignedSlot||c.parentNode||(l(c)?c.host:null)||y(c)}function $(c){return["html","body","#document"].indexOf(f(c))>=0?c.ownerDocument.body:o(c)&&E(c)?c:$(R(c))}function B(c,a){var g;a===void 0&&(a=[]);var D=$(c),T=D===((g=c.ownerDocument)==null?void 0:g.body),F=r(D),W=T?[F].concat(F.visualViewport||[],E(D)?D:[]):D,j=a.concat(W);return T?j:j.concat(B(R(W)))}function K(c){return["table","td","th"].indexOf(f(c))>=0}function X(c){return!o(c)||A(c).position==="fixed"?null:c.offsetParent}function ne(c){var a=navigator.userAgent.toLowerCase().indexOf("firefox")!==-1,g=navigator.userAgent.indexOf("Trident")!==-1;if(g&&o(c)){var D=A(c);if(D.position==="fixed")return null}for(var T=R(c);o(T)&&["html","body"].indexOf(f(T))<0;){var F=A(T);if(F.transform!=="none"||F.perspective!=="none"||F.contain==="paint"||["transform","perspective"].indexOf(F.willChange)!==-1||a&&F.willChange==="filter"||a&&F.filter&&F.filter!=="none")return T;T=T.parentNode}return null}function J(c){for(var a=r(c),g=X(c);g&&K(g)&&A(g).position==="static";)g=X(g);return g&&(f(g)==="html"||f(g)==="body"&&A(g).position==="static")?a:g||ne(c)||a}var V="top",de="bottom",U="right",Z="left",me="auto",s=[V,de,U,Z],p="start",v="end",d="clippingParents",N="viewport",_="popper",M="reference",Q=s.reduce(function(c,a){return c.concat([a+"-"+p,a+"-"+v])},[]),Ue=[].concat(s,[me]).reduce(function(c,a){return c.concat([a,a+"-"+p,a+"-"+v])},[]),Rt="beforeRead",Vt="read",Lr="afterRead",Nr="beforeMain",kr="main",zt="afterMain",nr="beforeWrite",jr="write",rr="afterWrite",It=[Rt,Vt,Lr,Nr,kr,zt,nr,jr,rr];function Br(c){var a=new Map,g=new Set,D=[];c.forEach(function(F){a.set(F.name,F)});function T(F){g.add(F.name);var W=[].concat(F.requires||[],F.requiresIfExists||[]);W.forEach(function(j){if(!g.has(j)){var q=a.get(j);q&&T(q)}}),D.push(F)}return c.forEach(function(F){g.has(F.name)||T(F)}),D}function mt(c){var a=Br(c);return It.reduce(function(g,D){return g.concat(a.filter(function(T){return T.phase===D}))},[])}function Ut(c){var a;return function(){return a||(a=new Promise(function(g){Promise.resolve().then(function(){a=void 0,g(c())})})),a}}function At(c){for(var a=arguments.length,g=new Array(a>1?a-1:0),D=1;D=0,D=g&&o(c)?J(c):c;return i(D)?a.filter(function(T){return i(T)&&kn(T,D)&&f(T)!=="body"}):[]}function wn(c,a,g){var D=a==="clippingParents"?yn(c):[].concat(a),T=[].concat(D,[g]),F=T[0],W=T.reduce(function(j,q){var oe=sr(c,q);return j.top=gt(oe.top,j.top),j.right=ln(oe.right,j.right),j.bottom=ln(oe.bottom,j.bottom),j.left=gt(oe.left,j.left),j},sr(c,F));return W.width=W.right-W.left,W.height=W.bottom-W.top,W.x=W.left,W.y=W.top,W}function cn(c){return c.split("-")[1]}function dt(c){return["top","bottom"].indexOf(c)>=0?"x":"y"}function lr(c){var a=c.reference,g=c.element,D=c.placement,T=D?ot(D):null,F=D?cn(D):null,W=a.x+a.width/2-g.width/2,j=a.y+a.height/2-g.height/2,q;switch(T){case V:q={x:W,y:a.y-g.height};break;case de:q={x:W,y:a.y+a.height};break;case U:q={x:a.x+a.width,y:j};break;case Z:q={x:a.x-g.width,y:j};break;default:q={x:a.x,y:a.y}}var oe=T?dt(T):null;if(oe!=null){var z=oe==="y"?"height":"width";switch(F){case p:q[oe]=q[oe]-(a[z]/2-g[z]/2);break;case v:q[oe]=q[oe]+(a[z]/2-g[z]/2);break}}return q}function cr(){return{top:0,right:0,bottom:0,left:0}}function fr(c){return Object.assign({},cr(),c)}function ur(c,a){return a.reduce(function(g,D){return g[D]=c,g},{})}function qt(c,a){a===void 0&&(a={});var g=a,D=g.placement,T=D===void 0?c.placement:D,F=g.boundary,W=F===void 0?d:F,j=g.rootBoundary,q=j===void 0?N:j,oe=g.elementContext,z=oe===void 0?_:oe,De=g.altBoundary,Le=De===void 0?!1:De,Ae=g.padding,xe=Ae===void 0?0:Ae,Me=fr(typeof xe!="number"?xe:ur(xe,s)),Ee=z===_?M:_,Be=c.elements.reference,Re=c.rects.popper,He=c.elements[Le?Ee:z],ce=wn(i(He)?He:He.contextElement||y(c.elements.popper),W,q),Pe=e(Be),Te=lr({reference:Pe,element:Re,strategy:"absolute",placement:T}),Ne=Xt(Object.assign({},Re,Te)),Fe=z===_?Ne:Pe,Ye={top:ce.top-Fe.top+Me.top,bottom:Fe.bottom-ce.bottom+Me.bottom,left:ce.left-Fe.left+Me.left,right:Fe.right-ce.right+Me.right},$e=c.modifiersData.offset;if(z===_&&$e){var Ve=$e[T];Object.keys(Ye).forEach(function(wt){var et=[U,de].indexOf(wt)>=0?1:-1,Lt=[V,de].indexOf(wt)>=0?"y":"x";Ye[wt]+=Ve[Lt]*et})}return Ye}var dr="Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.",zr="Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.",xn={placement:"bottom",modifiers:[],strategy:"absolute"};function fn(){for(var c=arguments.length,a=new Array(c),g=0;g100){console.error(zr);break}if(z.reset===!0){z.reset=!1,Pe=-1;continue}var Te=z.orderedModifiers[Pe],Ne=Te.fn,Fe=Te.options,Ye=Fe===void 0?{}:Fe,$e=Te.name;typeof Ne=="function"&&(z=Ne({state:z,options:Ye,name:$e,instance:Ae})||z)}}},update:Ut(function(){return new Promise(function(Ee){Ae.forceUpdate(),Ee(z)})}),destroy:function(){Me(),Le=!0}};if(!fn(j,q))return console.error(dr),Ae;Ae.setOptions(oe).then(function(Ee){!Le&&oe.onFirstUpdate&&oe.onFirstUpdate(Ee)});function xe(){z.orderedModifiers.forEach(function(Ee){var Be=Ee.name,Re=Ee.options,He=Re===void 0?{}:Re,ce=Ee.effect;if(typeof ce=="function"){var Pe=ce({state:z,name:Be,instance:Ae,options:He}),Te=function(){};De.push(Pe||Te)}})}function Me(){De.forEach(function(Ee){return Ee()}),De=[]}return Ae}}var On={passive:!0};function Ur(c){var a=c.state,g=c.instance,D=c.options,T=D.scroll,F=T===void 0?!0:T,W=D.resize,j=W===void 0?!0:W,q=r(a.elements.popper),oe=[].concat(a.scrollParents.reference,a.scrollParents.popper);return F&&oe.forEach(function(z){z.addEventListener("scroll",g.update,On)}),j&&q.addEventListener("resize",g.update,On),function(){F&&oe.forEach(function(z){z.removeEventListener("scroll",g.update,On)}),j&&q.removeEventListener("resize",g.update,On)}}var jn={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:Ur,data:{}};function Yr(c){var a=c.state,g=c.name;a.modifiersData[g]=lr({reference:a.rects.reference,element:a.rects.popper,strategy:"absolute",placement:a.placement})}var Bn={name:"popperOffsets",enabled:!0,phase:"read",fn:Yr,data:{}},Xr={top:"auto",right:"auto",bottom:"auto",left:"auto"};function qr(c){var a=c.x,g=c.y,D=window,T=D.devicePixelRatio||1;return{x:Yt(Yt(a*T)/T)||0,y:Yt(Yt(g*T)/T)||0}}function Hn(c){var a,g=c.popper,D=c.popperRect,T=c.placement,F=c.offsets,W=c.position,j=c.gpuAcceleration,q=c.adaptive,oe=c.roundOffsets,z=oe===!0?qr(F):typeof oe=="function"?oe(F):F,De=z.x,Le=De===void 0?0:De,Ae=z.y,xe=Ae===void 0?0:Ae,Me=F.hasOwnProperty("x"),Ee=F.hasOwnProperty("y"),Be=Z,Re=V,He=window;if(q){var ce=J(g),Pe="clientHeight",Te="clientWidth";ce===r(g)&&(ce=y(g),A(ce).position!=="static"&&(Pe="scrollHeight",Te="scrollWidth")),ce=ce,T===V&&(Re=de,xe-=ce[Pe]-D.height,xe*=j?1:-1),T===Z&&(Be=U,Le-=ce[Te]-D.width,Le*=j?1:-1)}var Ne=Object.assign({position:W},q&&Xr);if(j){var Fe;return Object.assign({},Ne,(Fe={},Fe[Re]=Ee?"0":"",Fe[Be]=Me?"0":"",Fe.transform=(He.devicePixelRatio||1)<2?"translate("+Le+"px, "+xe+"px)":"translate3d("+Le+"px, "+xe+"px, 0)",Fe))}return Object.assign({},Ne,(a={},a[Re]=Ee?xe+"px":"",a[Be]=Me?Le+"px":"",a.transform="",a))}function m(c){var a=c.state,g=c.options,D=g.gpuAcceleration,T=D===void 0?!0:D,F=g.adaptive,W=F===void 0?!0:F,j=g.roundOffsets,q=j===void 0?!0:j,oe=A(a.elements.popper).transitionProperty||"";W&&["transform","top","right","bottom","left"].some(function(De){return oe.indexOf(De)>=0})&&console.warn(["Popper: Detected CSS transitions on at least one of the following",'CSS properties: "transform", "top", "right", "bottom", "left".',` + +`,'Disable the "computeStyles" modifier\'s `adaptive` option to allow',"for smooth transitions, or remove these properties from the CSS","transition declaration on the popper element if only transitioning","opacity or background-color for example.",` + +`,"We recommend using the popper element as a wrapper around an inner","element that can have any CSS property transitioned for animations."].join(" "));var z={placement:ot(a.placement),popper:a.elements.popper,popperRect:a.rects.popper,gpuAcceleration:T};a.modifiersData.popperOffsets!=null&&(a.styles.popper=Object.assign({},a.styles.popper,Hn(Object.assign({},z,{offsets:a.modifiersData.popperOffsets,position:a.options.strategy,adaptive:W,roundOffsets:q})))),a.modifiersData.arrow!=null&&(a.styles.arrow=Object.assign({},a.styles.arrow,Hn(Object.assign({},z,{offsets:a.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:q})))),a.attributes.popper=Object.assign({},a.attributes.popper,{"data-popper-placement":a.placement})}var w={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:m,data:{}};function S(c){var a=c.state;Object.keys(a.elements).forEach(function(g){var D=a.styles[g]||{},T=a.attributes[g]||{},F=a.elements[g];!o(F)||!f(F)||(Object.assign(F.style,D),Object.keys(T).forEach(function(W){var j=T[W];j===!1?F.removeAttribute(W):F.setAttribute(W,j===!0?"":j)}))})}function I(c){var a=c.state,g={popper:{position:a.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(a.elements.popper.style,g.popper),a.styles=g,a.elements.arrow&&Object.assign(a.elements.arrow.style,g.arrow),function(){Object.keys(a.elements).forEach(function(D){var T=a.elements[D],F=a.attributes[D]||{},W=Object.keys(a.styles.hasOwnProperty(D)?a.styles[D]:g[D]),j=W.reduce(function(q,oe){return q[oe]="",q},{});!o(T)||!f(T)||(Object.assign(T.style,j),Object.keys(F).forEach(function(q){T.removeAttribute(q)}))})}}var Y={name:"applyStyles",enabled:!0,phase:"write",fn:S,effect:I,requires:["computeStyles"]};function H(c,a,g){var D=ot(c),T=[Z,V].indexOf(D)>=0?-1:1,F=typeof g=="function"?g(Object.assign({},a,{placement:c})):g,W=F[0],j=F[1];return W=W||0,j=(j||0)*T,[Z,U].indexOf(D)>=0?{x:j,y:W}:{x:W,y:j}}function k(c){var a=c.state,g=c.options,D=c.name,T=g.offset,F=T===void 0?[0,0]:T,W=Ue.reduce(function(z,De){return z[De]=H(De,a.rects,F),z},{}),j=W[a.placement],q=j.x,oe=j.y;a.modifiersData.popperOffsets!=null&&(a.modifiersData.popperOffsets.x+=q,a.modifiersData.popperOffsets.y+=oe),a.modifiersData[D]=W}var be={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:k},le={left:"right",right:"left",bottom:"top",top:"bottom"};function pe(c){return c.replace(/left|right|bottom|top/g,function(a){return le[a]})}var ye={start:"end",end:"start"};function _e(c){return c.replace(/start|end/g,function(a){return ye[a]})}function je(c,a){a===void 0&&(a={});var g=a,D=g.placement,T=g.boundary,F=g.rootBoundary,W=g.padding,j=g.flipVariations,q=g.allowedAutoPlacements,oe=q===void 0?Ue:q,z=cn(D),De=z?j?Q:Q.filter(function(xe){return cn(xe)===z}):s,Le=De.filter(function(xe){return oe.indexOf(xe)>=0});Le.length===0&&(Le=De,console.error(["Popper: The `allowedAutoPlacements` option did not allow any","placements. Ensure the `placement` option matches the variation","of the allowed placements.",'For example, "auto" cannot be used to allow "bottom-start".','Use "auto-start" instead.'].join(" ")));var Ae=Le.reduce(function(xe,Me){return xe[Me]=qt(c,{placement:Me,boundary:T,rootBoundary:F,padding:W})[ot(Me)],xe},{});return Object.keys(Ae).sort(function(xe,Me){return Ae[xe]-Ae[Me]})}function Se(c){if(ot(c)===me)return[];var a=pe(c);return[_e(c),a,_e(a)]}function Ie(c){var a=c.state,g=c.options,D=c.name;if(!a.modifiersData[D]._skip){for(var T=g.mainAxis,F=T===void 0?!0:T,W=g.altAxis,j=W===void 0?!0:W,q=g.fallbackPlacements,oe=g.padding,z=g.boundary,De=g.rootBoundary,Le=g.altBoundary,Ae=g.flipVariations,xe=Ae===void 0?!0:Ae,Me=g.allowedAutoPlacements,Ee=a.options.placement,Be=ot(Ee),Re=Be===Ee,He=q||(Re||!xe?[pe(Ee)]:Se(Ee)),ce=[Ee].concat(He).reduce(function(te,ge){return te.concat(ot(ge)===me?je(a,{placement:ge,boundary:z,rootBoundary:De,padding:oe,flipVariations:xe,allowedAutoPlacements:Me}):ge)},[]),Pe=a.rects.reference,Te=a.rects.popper,Ne=new Map,Fe=!0,Ye=ce[0],$e=0;$e=0,dn=Lt?"width":"height",Zt=qt(a,{placement:Ve,boundary:z,rootBoundary:De,altBoundary:Le,padding:oe}),Nt=Lt?et?U:Z:et?de:V;Pe[dn]>Te[dn]&&(Nt=pe(Nt));var $n=pe(Nt),Qt=[];if(F&&Qt.push(Zt[wt]<=0),j&&Qt.push(Zt[Nt]<=0,Zt[$n]<=0),Qt.every(function(te){return te})){Ye=Ve,Fe=!1;break}Ne.set(Ve,Qt)}if(Fe)for(var Sn=xe?3:1,Wn=function(ge){var we=ce.find(function(Ke){var Je=Ne.get(Ke);if(Je)return Je.slice(0,ge).every(function(Dt){return Dt})});if(we)return Ye=we,"break"},C=Sn;C>0;C--){var G=Wn(C);if(G==="break")break}a.placement!==Ye&&(a.modifiersData[D]._skip=!0,a.placement=Ye,a.reset=!0)}}var re={name:"flip",enabled:!0,phase:"main",fn:Ie,requiresIfExists:["offset"],data:{_skip:!1}};function he(c){return c==="x"?"y":"x"}function ve(c,a,g){return gt(c,ln(a,g))}function ee(c){var a=c.state,g=c.options,D=c.name,T=g.mainAxis,F=T===void 0?!0:T,W=g.altAxis,j=W===void 0?!1:W,q=g.boundary,oe=g.rootBoundary,z=g.altBoundary,De=g.padding,Le=g.tether,Ae=Le===void 0?!0:Le,xe=g.tetherOffset,Me=xe===void 0?0:xe,Ee=qt(a,{boundary:q,rootBoundary:oe,padding:De,altBoundary:z}),Be=ot(a.placement),Re=cn(a.placement),He=!Re,ce=dt(Be),Pe=he(ce),Te=a.modifiersData.popperOffsets,Ne=a.rects.reference,Fe=a.rects.popper,Ye=typeof Me=="function"?Me(Object.assign({},a.rects,{placement:a.placement})):Me,$e={x:0,y:0};if(Te){if(F||j){var Ve=ce==="y"?V:Z,wt=ce==="y"?de:U,et=ce==="y"?"height":"width",Lt=Te[ce],dn=Te[ce]+Ee[Ve],Zt=Te[ce]-Ee[wt],Nt=Ae?-Fe[et]/2:0,$n=Re===p?Ne[et]:Fe[et],Qt=Re===p?-Fe[et]:-Ne[et],Sn=a.elements.arrow,Wn=Ae&&Sn?P(Sn):{width:0,height:0},C=a.modifiersData["arrow#persistent"]?a.modifiersData["arrow#persistent"].padding:cr(),G=C[Ve],te=C[wt],ge=ve(0,Ne[et],Wn[et]),we=He?Ne[et]/2-Nt-ge-G-Ye:$n-ge-G-Ye,Ke=He?-Ne[et]/2+Nt+ge+te+Ye:Qt+ge+te+Ye,Je=a.elements.arrow&&J(a.elements.arrow),Dt=Je?ce==="y"?Je.clientTop||0:Je.clientLeft||0:0,Vn=a.modifiersData.offset?a.modifiersData.offset[a.placement][ce]:0,Tt=Te[ce]+we-Vn-Dt,An=Te[ce]+Ke-Vn;if(F){var pn=ve(Ae?ln(dn,Tt):dn,Lt,Ae?gt(Zt,An):Zt);Te[ce]=pn,$e[ce]=pn-Lt}if(j){var en=ce==="x"?V:Z,Gr=ce==="x"?de:U,tn=Te[Pe],hn=tn+Ee[en],Ai=tn-Ee[Gr],Ci=ve(Ae?ln(hn,Tt):hn,tn,Ae?gt(Ai,An):Ai);Te[Pe]=Ci,$e[Pe]=Ci-tn}}a.modifiersData[D]=$e}}var ie={name:"preventOverflow",enabled:!0,phase:"main",fn:ee,requiresIfExists:["offset"]},x=function(a,g){return a=typeof a=="function"?a(Object.assign({},g.rects,{placement:g.placement})):a,fr(typeof a!="number"?a:ur(a,s))};function Ge(c){var a,g=c.state,D=c.name,T=c.options,F=g.elements.arrow,W=g.modifiersData.popperOffsets,j=ot(g.placement),q=dt(j),oe=[Z,U].indexOf(j)>=0,z=oe?"height":"width";if(!(!F||!W)){var De=x(T.padding,g),Le=P(F),Ae=q==="y"?V:Z,xe=q==="y"?de:U,Me=g.rects.reference[z]+g.rects.reference[q]-W[q]-g.rects.popper[z],Ee=W[q]-g.rects.reference[q],Be=J(F),Re=Be?q==="y"?Be.clientHeight||0:Be.clientWidth||0:0,He=Me/2-Ee/2,ce=De[Ae],Pe=Re-Le[z]-De[xe],Te=Re/2-Le[z]/2+He,Ne=ve(ce,Te,Pe),Fe=q;g.modifiersData[D]=(a={},a[Fe]=Ne,a.centerOffset=Ne-Te,a)}}function fe(c){var a=c.state,g=c.options,D=g.element,T=D===void 0?"[data-popper-arrow]":D;if(T!=null&&!(typeof T=="string"&&(T=a.elements.popper.querySelector(T),!T))){if(o(T)||console.error(['Popper: "arrow" element must be an HTMLElement (not an SVGElement).',"To use an SVG arrow, wrap it in an HTMLElement that will be used as","the arrow."].join(" ")),!kn(a.elements.popper,T)){console.error(['Popper: "arrow" modifier\'s `element` must be a child of the popper',"element."].join(" "));return}a.elements.arrow=T}}var Ft={name:"arrow",enabled:!0,phase:"main",fn:Ge,effect:fe,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function bt(c,a,g){return g===void 0&&(g={x:0,y:0}),{top:c.top-a.height-g.y,right:c.right-a.width+g.x,bottom:c.bottom-a.height+g.y,left:c.left-a.width-g.x}}function Gt(c){return[V,U,de,Z].some(function(a){return c[a]>=0})}function Kt(c){var a=c.state,g=c.name,D=a.rects.reference,T=a.rects.popper,F=a.modifiersData.preventOverflow,W=qt(a,{elementContext:"reference"}),j=qt(a,{altBoundary:!0}),q=bt(W,D),oe=bt(j,T,F),z=Gt(q),De=Gt(oe);a.modifiersData[g]={referenceClippingOffsets:q,popperEscapeOffsets:oe,isReferenceHidden:z,hasPopperEscaped:De},a.attributes.popper=Object.assign({},a.attributes.popper,{"data-popper-reference-hidden":z,"data-popper-escaped":De})}var Jt={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:Kt},rt=[jn,Bn,w,Y],st=En({defaultModifiers:rt}),yt=[jn,Bn,w,Y,be,re,ie,Ft,Jt],un=En({defaultModifiers:yt});t.applyStyles=Y,t.arrow=Ft,t.computeStyles=w,t.createPopper=un,t.createPopperLite=st,t.defaultModifiers=yt,t.detectOverflow=qt,t.eventListeners=jn,t.flip=re,t.hide=Jt,t.offset=be,t.popperGenerator=En,t.popperOffsets=Bn,t.preventOverflow=ie}),Lo=Io(t=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var e=us(),r='',n="tippy-box",i="tippy-content",o="tippy-backdrop",l="tippy-arrow",h="tippy-svg-arrow",u={passive:!0,capture:!0};function f(m,w){return{}.hasOwnProperty.call(m,w)}function y(m,w,S){if(Array.isArray(m)){var I=m[w];return I??(Array.isArray(S)?S[w]:S)}return m}function b(m,w){var S={}.toString.call(m);return S.indexOf("[object")===0&&S.indexOf(w+"]")>-1}function A(m,w){return typeof m=="function"?m.apply(void 0,w):m}function E(m,w){if(w===0)return m;var S;return function(I){clearTimeout(S),S=setTimeout(function(){m(I)},w)}}function O(m,w){var S=Object.assign({},m);return w.forEach(function(I){delete S[I]}),S}function P(m){return m.split(/\s+/).filter(Boolean)}function R(m){return[].concat(m)}function $(m,w){m.indexOf(w)===-1&&m.push(w)}function B(m){return m.filter(function(w,S){return m.indexOf(w)===S})}function K(m){return m.split("-")[0]}function X(m){return[].slice.call(m)}function ne(m){return Object.keys(m).reduce(function(w,S){return m[S]!==void 0&&(w[S]=m[S]),w},{})}function J(){return document.createElement("div")}function V(m){return["Element","Fragment"].some(function(w){return b(m,w)})}function de(m){return b(m,"NodeList")}function U(m){return b(m,"MouseEvent")}function Z(m){return!!(m&&m._tippy&&m._tippy.reference===m)}function me(m){return V(m)?[m]:de(m)?X(m):Array.isArray(m)?m:X(document.querySelectorAll(m))}function s(m,w){m.forEach(function(S){S&&(S.style.transitionDuration=w+"ms")})}function p(m,w){m.forEach(function(S){S&&S.setAttribute("data-state",w)})}function v(m){var w,S=R(m),I=S[0];return!(I==null||(w=I.ownerDocument)==null)&&w.body?I.ownerDocument:document}function d(m,w){var S=w.clientX,I=w.clientY;return m.every(function(Y){var H=Y.popperRect,k=Y.popperState,be=Y.props,le=be.interactiveBorder,pe=K(k.placement),ye=k.modifiersData.offset;if(!ye)return!0;var _e=pe==="bottom"?ye.top.y:0,je=pe==="top"?ye.bottom.y:0,Se=pe==="right"?ye.left.x:0,Ie=pe==="left"?ye.right.x:0,re=H.top-I+_e>le,he=I-H.bottom-je>le,ve=H.left-S+Se>le,ee=S-H.right-Ie>le;return re||he||ve||ee})}function N(m,w,S){var I=w+"EventListener";["transitionend","webkitTransitionEnd"].forEach(function(Y){m[I](Y,S)})}var _={isTouch:!1},M=0;function Q(){_.isTouch||(_.isTouch=!0,window.performance&&document.addEventListener("mousemove",Ue))}function Ue(){var m=performance.now();m-M<20&&(_.isTouch=!1,document.removeEventListener("mousemove",Ue)),M=m}function Rt(){var m=document.activeElement;if(Z(m)){var w=m._tippy;m.blur&&!w.state.isVisible&&m.blur()}}function Vt(){document.addEventListener("touchstart",Q,u),window.addEventListener("blur",Rt)}var Lr=typeof window<"u"&&typeof document<"u",Nr=Lr?navigator.userAgent:"",kr=/MSIE |Trident\//.test(Nr);function zt(m){var w=m==="destroy"?"n already-":" ";return[m+"() was called on a"+w+"destroyed instance. This is a no-op but","indicates a potential memory leak."].join(" ")}function nr(m){var w=/[ \t]{2,}/g,S=/^[ \t]*/gm;return m.replace(w," ").replace(S,"").trim()}function jr(m){return nr(` + %ctippy.js + + %c`+nr(m)+` + + %c\u{1F477}\u200D This is a development-only message. It will be removed in production. + `)}function rr(m){return[jr(m),"color: #00C584; font-size: 1.3em; font-weight: bold;","line-height: 1.5","color: #a6a095;"]}var It;Br();function Br(){It=new Set}function mt(m,w){if(m&&!It.has(w)){var S;It.add(w),(S=console).warn.apply(S,rr(w))}}function Ut(m,w){if(m&&!It.has(w)){var S;It.add(w),(S=console).error.apply(S,rr(w))}}function At(m){var w=!m,S=Object.prototype.toString.call(m)==="[object Object]"&&!m.addEventListener;Ut(w,["tippy() was passed","`"+String(m)+"`","as its targets (first) argument. Valid types are: String, Element,","Element[], or NodeList."].join(" ")),Ut(S,["tippy() was passed a plain object which is not supported as an argument","for virtual positioning. Use props.getReferenceClientRect instead."].join(" "))}var Ct={animateFill:!1,followCursor:!1,inlinePositioning:!1,sticky:!1},Hr={allowHTML:!1,animation:"fade",arrow:!0,content:"",inertia:!1,maxWidth:350,role:"tooltip",theme:"",zIndex:9999},Qe=Object.assign({appendTo:function(){return document.body},aria:{content:"auto",expanded:"auto"},delay:0,duration:[300,250],getReferenceClientRect:null,hideOnClick:!0,ignoreAttributes:!1,interactive:!1,interactiveBorder:2,interactiveDebounce:0,moveTransition:"",offset:[0,10],onAfterUpdate:function(){},onBeforeUpdate:function(){},onCreate:function(){},onDestroy:function(){},onHidden:function(){},onHide:function(){},onMount:function(){},onShow:function(){},onShown:function(){},onTrigger:function(){},onUntrigger:function(){},onClickOutside:function(){},placement:"top",plugins:[],popperOptions:{},render:null,showOnCreate:!1,touch:!0,trigger:"mouseenter focus",triggerTarget:null},Ct,{},Hr),$r=Object.keys(Qe),Wr=function(w){gt(w,[]);var S=Object.keys(w);S.forEach(function(I){Qe[I]=w[I]})};function ot(m){var w=m.plugins||[],S=w.reduce(function(I,Y){var H=Y.name,k=Y.defaultValue;return H&&(I[H]=m[H]!==void 0?m[H]:k),I},{});return Object.assign({},m,{},S)}function Vr(m,w){var S=w?Object.keys(ot(Object.assign({},Qe,{plugins:w}))):$r,I=S.reduce(function(Y,H){var k=(m.getAttribute("data-tippy-"+H)||"").trim();if(!k)return Y;if(H==="content")Y[H]=k;else try{Y[H]=JSON.parse(k)}catch{Y[H]=k}return Y},{});return I}function ir(m,w){var S=Object.assign({},w,{content:A(w.content,[m])},w.ignoreAttributes?{}:Vr(m,w.plugins));return S.aria=Object.assign({},Qe.aria,{},S.aria),S.aria={expanded:S.aria.expanded==="auto"?w.interactive:S.aria.expanded,content:S.aria.content==="auto"?w.interactive?null:"describedby":S.aria.content},S}function gt(m,w){m===void 0&&(m={}),w===void 0&&(w=[]);var S=Object.keys(m);S.forEach(function(I){var Y=O(Qe,Object.keys(Ct)),H=!f(Y,I);H&&(H=w.filter(function(k){return k.name===I}).length===0),mt(H,["`"+I+"`","is not a valid prop. You may have spelled it incorrectly, or if it's","a plugin, forgot to pass it in an array as props.plugins.",` + +`,`All props: https://atomiks.github.io/tippyjs/v6/all-props/ +`,"Plugins: https://atomiks.github.io/tippyjs/v6/plugins/"].join(" "))})}var ln=function(){return"innerHTML"};function Yt(m,w){m[ln()]=w}function or(m){var w=J();return m===!0?w.className=l:(w.className=h,V(m)?w.appendChild(m):Yt(w,m)),w}function kn(m,w){V(w.content)?(Yt(m,""),m.appendChild(w.content)):typeof w.content!="function"&&(w.allowHTML?Yt(m,w.content):m.textContent=w.content)}function Xt(m){var w=m.firstElementChild,S=X(w.children);return{box:w,content:S.find(function(I){return I.classList.contains(i)}),arrow:S.find(function(I){return I.classList.contains(l)||I.classList.contains(h)}),backdrop:S.find(function(I){return I.classList.contains(o)})}}function ar(m){var w=J(),S=J();S.className=n,S.setAttribute("data-state","hidden"),S.setAttribute("tabindex","-1");var I=J();I.className=i,I.setAttribute("data-state","hidden"),kn(I,m.props),w.appendChild(S),S.appendChild(I),Y(m.props,m.props);function Y(H,k){var be=Xt(w),le=be.box,pe=be.content,ye=be.arrow;k.theme?le.setAttribute("data-theme",k.theme):le.removeAttribute("data-theme"),typeof k.animation=="string"?le.setAttribute("data-animation",k.animation):le.removeAttribute("data-animation"),k.inertia?le.setAttribute("data-inertia",""):le.removeAttribute("data-inertia"),le.style.maxWidth=typeof k.maxWidth=="number"?k.maxWidth+"px":k.maxWidth,k.role?le.setAttribute("role",k.role):le.removeAttribute("role"),(H.content!==k.content||H.allowHTML!==k.allowHTML)&&kn(pe,m.props),k.arrow?ye?H.arrow!==k.arrow&&(le.removeChild(ye),le.appendChild(or(k.arrow))):le.appendChild(or(k.arrow)):ye&&le.removeChild(ye)}return{popper:w,onUpdate:Y}}ar.$$tippy=!0;var sr=1,yn=[],wn=[];function cn(m,w){var S=ir(m,Object.assign({},Qe,{},ot(ne(w)))),I,Y,H,k=!1,be=!1,le=!1,pe=!1,ye,_e,je,Se=[],Ie=E(Re,S.interactiveDebounce),re,he=sr++,ve=null,ee=B(S.plugins),ie={isEnabled:!0,isVisible:!1,isDestroyed:!1,isMounted:!1,isShown:!1},x={id:he,reference:m,popper:J(),popperInstance:ve,props:S,state:ie,plugins:ee,clearDelayTimeouts:Lt,setProps:dn,setContent:Zt,show:Nt,hide:$n,hideWithInteractivity:Qt,enable:wt,disable:et,unmount:Sn,destroy:Wn};if(!S.render)return Ut(!0,"render() function has not been supplied."),x;var Ge=S.render(x),fe=Ge.popper,Ft=Ge.onUpdate;fe.setAttribute("data-tippy-root",""),fe.id="tippy-"+x.id,x.popper=fe,m._tippy=x,fe._tippy=x;var bt=ee.map(function(C){return C.fn(x)}),Gt=m.hasAttribute("aria-expanded");return Me(),T(),a(),g("onCreate",[x]),S.showOnCreate&&$e(),fe.addEventListener("mouseenter",function(){x.props.interactive&&x.state.isVisible&&x.clearDelayTimeouts()}),fe.addEventListener("mouseleave",function(C){x.props.interactive&&x.props.trigger.indexOf("mouseenter")>=0&&(yt().addEventListener("mousemove",Ie),Ie(C))}),x;function Kt(){var C=x.props.touch;return Array.isArray(C)?C:[C,0]}function Jt(){return Kt()[0]==="hold"}function rt(){var C;return!!((C=x.props.render)!=null&&C.$$tippy)}function st(){return re||m}function yt(){var C=st().parentNode;return C?v(C):document}function un(){return Xt(fe)}function c(C){return x.state.isMounted&&!x.state.isVisible||_.isTouch||ye&&ye.type==="focus"?0:y(x.props.delay,C?0:1,Qe.delay)}function a(){fe.style.pointerEvents=x.props.interactive&&x.state.isVisible?"":"none",fe.style.zIndex=""+x.props.zIndex}function g(C,G,te){if(te===void 0&&(te=!0),bt.forEach(function(we){we[C]&&we[C].apply(void 0,G)}),te){var ge;(ge=x.props)[C].apply(ge,G)}}function D(){var C=x.props.aria;if(C.content){var G="aria-"+C.content,te=fe.id,ge=R(x.props.triggerTarget||m);ge.forEach(function(we){var Ke=we.getAttribute(G);if(x.state.isVisible)we.setAttribute(G,Ke?Ke+" "+te:te);else{var Je=Ke&&Ke.replace(te,"").trim();Je?we.setAttribute(G,Je):we.removeAttribute(G)}})}}function T(){if(!(Gt||!x.props.aria.expanded)){var C=R(x.props.triggerTarget||m);C.forEach(function(G){x.props.interactive?G.setAttribute("aria-expanded",x.state.isVisible&&G===st()?"true":"false"):G.removeAttribute("aria-expanded")})}}function F(){yt().removeEventListener("mousemove",Ie),yn=yn.filter(function(C){return C!==Ie})}function W(C){if(!(_.isTouch&&(le||C.type==="mousedown"))&&!(x.props.interactive&&fe.contains(C.target))){if(st().contains(C.target)){if(_.isTouch||x.state.isVisible&&x.props.trigger.indexOf("click")>=0)return}else g("onClickOutside",[x,C]);x.props.hideOnClick===!0&&(x.clearDelayTimeouts(),x.hide(),be=!0,setTimeout(function(){be=!1}),x.state.isMounted||z())}}function j(){le=!0}function q(){le=!1}function oe(){var C=yt();C.addEventListener("mousedown",W,!0),C.addEventListener("touchend",W,u),C.addEventListener("touchstart",q,u),C.addEventListener("touchmove",j,u)}function z(){var C=yt();C.removeEventListener("mousedown",W,!0),C.removeEventListener("touchend",W,u),C.removeEventListener("touchstart",q,u),C.removeEventListener("touchmove",j,u)}function De(C,G){Ae(C,function(){!x.state.isVisible&&fe.parentNode&&fe.parentNode.contains(fe)&&G()})}function Le(C,G){Ae(C,G)}function Ae(C,G){var te=un().box;function ge(we){we.target===te&&(N(te,"remove",ge),G())}if(C===0)return G();N(te,"remove",_e),N(te,"add",ge),_e=ge}function xe(C,G,te){te===void 0&&(te=!1);var ge=R(x.props.triggerTarget||m);ge.forEach(function(we){we.addEventListener(C,G,te),Se.push({node:we,eventType:C,handler:G,options:te})})}function Me(){Jt()&&(xe("touchstart",Be,{passive:!0}),xe("touchend",He,{passive:!0})),P(x.props.trigger).forEach(function(C){if(C!=="manual")switch(xe(C,Be),C){case"mouseenter":xe("mouseleave",He);break;case"focus":xe(kr?"focusout":"blur",ce);break;case"focusin":xe("focusout",ce);break}})}function Ee(){Se.forEach(function(C){var G=C.node,te=C.eventType,ge=C.handler,we=C.options;G.removeEventListener(te,ge,we)}),Se=[]}function Be(C){var G,te=!1;if(!(!x.state.isEnabled||Pe(C)||be)){var ge=((G=ye)==null?void 0:G.type)==="focus";ye=C,re=C.currentTarget,T(),!x.state.isVisible&&U(C)&&yn.forEach(function(we){return we(C)}),C.type==="click"&&(x.props.trigger.indexOf("mouseenter")<0||k)&&x.props.hideOnClick!==!1&&x.state.isVisible?te=!0:$e(C),C.type==="click"&&(k=!te),te&&!ge&&Ve(C)}}function Re(C){var G=C.target,te=st().contains(G)||fe.contains(G);if(!(C.type==="mousemove"&&te)){var ge=Ye().concat(fe).map(function(we){var Ke,Je=we._tippy,Dt=(Ke=Je.popperInstance)==null?void 0:Ke.state;return Dt?{popperRect:we.getBoundingClientRect(),popperState:Dt,props:S}:null}).filter(Boolean);d(ge,C)&&(F(),Ve(C))}}function He(C){var G=Pe(C)||x.props.trigger.indexOf("click")>=0&&k;if(!G){if(x.props.interactive){x.hideWithInteractivity(C);return}Ve(C)}}function ce(C){x.props.trigger.indexOf("focusin")<0&&C.target!==st()||x.props.interactive&&C.relatedTarget&&fe.contains(C.relatedTarget)||Ve(C)}function Pe(C){return _.isTouch?Jt()!==C.type.indexOf("touch")>=0:!1}function Te(){Ne();var C=x.props,G=C.popperOptions,te=C.placement,ge=C.offset,we=C.getReferenceClientRect,Ke=C.moveTransition,Je=rt()?Xt(fe).arrow:null,Dt=we?{getBoundingClientRect:we,contextElement:we.contextElement||st()}:m,Vn={name:"$$tippy",enabled:!0,phase:"beforeWrite",requires:["computeStyles"],fn:function(pn){var en=pn.state;if(rt()){var Gr=un(),tn=Gr.box;["placement","reference-hidden","escaped"].forEach(function(hn){hn==="placement"?tn.setAttribute("data-placement",en.placement):en.attributes.popper["data-popper-"+hn]?tn.setAttribute("data-"+hn,""):tn.removeAttribute("data-"+hn)}),en.attributes.popper={}}}},Tt=[{name:"offset",options:{offset:ge}},{name:"preventOverflow",options:{padding:{top:2,bottom:2,left:5,right:5}}},{name:"flip",options:{padding:5}},{name:"computeStyles",options:{adaptive:!Ke}},Vn];rt()&&Je&&Tt.push({name:"arrow",options:{element:Je,padding:3}}),Tt.push.apply(Tt,G?.modifiers||[]),x.popperInstance=e.createPopper(Dt,fe,Object.assign({},G,{placement:te,onFirstUpdate:je,modifiers:Tt}))}function Ne(){x.popperInstance&&(x.popperInstance.destroy(),x.popperInstance=null)}function Fe(){var C=x.props.appendTo,G,te=st();x.props.interactive&&C===Qe.appendTo||C==="parent"?G=te.parentNode:G=A(C,[te]),G.contains(fe)||G.appendChild(fe),Te(),mt(x.props.interactive&&C===Qe.appendTo&&te.nextElementSibling!==fe,["Interactive tippy element may not be accessible via keyboard","navigation because it is not directly after the reference element","in the DOM source order.",` + +`,"Using a wrapper
or tag around the reference element","solves this by creating a new parentNode context.",` + +`,"Specifying `appendTo: document.body` silences this warning, but it","assumes you are using a focus management solution to handle","keyboard navigation.",` + +`,"See: https://atomiks.github.io/tippyjs/v6/accessibility/#interactivity"].join(" "))}function Ye(){return X(fe.querySelectorAll("[data-tippy-root]"))}function $e(C){x.clearDelayTimeouts(),C&&g("onTrigger",[x,C]),oe();var G=c(!0),te=Kt(),ge=te[0],we=te[1];_.isTouch&&ge==="hold"&&we&&(G=we),G?I=setTimeout(function(){x.show()},G):x.show()}function Ve(C){if(x.clearDelayTimeouts(),g("onUntrigger",[x,C]),!x.state.isVisible){z();return}if(!(x.props.trigger.indexOf("mouseenter")>=0&&x.props.trigger.indexOf("click")>=0&&["mouseleave","mousemove"].indexOf(C.type)>=0&&k)){var G=c(!1);G?Y=setTimeout(function(){x.state.isVisible&&x.hide()},G):H=requestAnimationFrame(function(){x.hide()})}}function wt(){x.state.isEnabled=!0}function et(){x.hide(),x.state.isEnabled=!1}function Lt(){clearTimeout(I),clearTimeout(Y),cancelAnimationFrame(H)}function dn(C){if(mt(x.state.isDestroyed,zt("setProps")),!x.state.isDestroyed){g("onBeforeUpdate",[x,C]),Ee();var G=x.props,te=ir(m,Object.assign({},x.props,{},C,{ignoreAttributes:!0}));x.props=te,Me(),G.interactiveDebounce!==te.interactiveDebounce&&(F(),Ie=E(Re,te.interactiveDebounce)),G.triggerTarget&&!te.triggerTarget?R(G.triggerTarget).forEach(function(ge){ge.removeAttribute("aria-expanded")}):te.triggerTarget&&m.removeAttribute("aria-expanded"),T(),a(),Ft&&Ft(G,te),x.popperInstance&&(Te(),Ye().forEach(function(ge){requestAnimationFrame(ge._tippy.popperInstance.forceUpdate)})),g("onAfterUpdate",[x,C])}}function Zt(C){x.setProps({content:C})}function Nt(){mt(x.state.isDestroyed,zt("show"));var C=x.state.isVisible,G=x.state.isDestroyed,te=!x.state.isEnabled,ge=_.isTouch&&!x.props.touch,we=y(x.props.duration,0,Qe.duration);if(!(C||G||te||ge)&&!st().hasAttribute("disabled")&&(g("onShow",[x],!1),x.props.onShow(x)!==!1)){if(x.state.isVisible=!0,rt()&&(fe.style.visibility="visible"),a(),oe(),x.state.isMounted||(fe.style.transition="none"),rt()){var Ke=un(),Je=Ke.box,Dt=Ke.content;s([Je,Dt],0)}je=function(){var Tt;if(!(!x.state.isVisible||pe)){if(pe=!0,fe.offsetHeight,fe.style.transition=x.props.moveTransition,rt()&&x.props.animation){var An=un(),pn=An.box,en=An.content;s([pn,en],we),p([pn,en],"visible")}D(),T(),$(wn,x),(Tt=x.popperInstance)==null||Tt.forceUpdate(),x.state.isMounted=!0,g("onMount",[x]),x.props.animation&&rt()&&Le(we,function(){x.state.isShown=!0,g("onShown",[x])})}},Fe()}}function $n(){mt(x.state.isDestroyed,zt("hide"));var C=!x.state.isVisible,G=x.state.isDestroyed,te=!x.state.isEnabled,ge=y(x.props.duration,1,Qe.duration);if(!(C||G||te)&&(g("onHide",[x],!1),x.props.onHide(x)!==!1)){if(x.state.isVisible=!1,x.state.isShown=!1,pe=!1,k=!1,rt()&&(fe.style.visibility="hidden"),F(),z(),a(),rt()){var we=un(),Ke=we.box,Je=we.content;x.props.animation&&(s([Ke,Je],ge),p([Ke,Je],"hidden"))}D(),T(),x.props.animation?rt()&&De(ge,x.unmount):x.unmount()}}function Qt(C){mt(x.state.isDestroyed,zt("hideWithInteractivity")),yt().addEventListener("mousemove",Ie),$(yn,Ie),Ie(C)}function Sn(){mt(x.state.isDestroyed,zt("unmount")),x.state.isVisible&&x.hide(),x.state.isMounted&&(Ne(),Ye().forEach(function(C){C._tippy.unmount()}),fe.parentNode&&fe.parentNode.removeChild(fe),wn=wn.filter(function(C){return C!==x}),x.state.isMounted=!1,g("onHidden",[x]))}function Wn(){mt(x.state.isDestroyed,zt("destroy")),!x.state.isDestroyed&&(x.clearDelayTimeouts(),x.unmount(),Ee(),delete m._tippy,x.state.isDestroyed=!0,g("onDestroy",[x]))}}function dt(m,w){w===void 0&&(w={});var S=Qe.plugins.concat(w.plugins||[]);At(m),gt(w,S),Vt();var I=Object.assign({},w,{plugins:S}),Y=me(m),H=V(I.content),k=Y.length>1;mt(H&&k,["tippy() was passed an Element as the `content` prop, but more than","one tippy instance was created by this invocation. This means the","content element will only be appended to the last tippy instance.",` + +`,"Instead, pass the .innerHTML of the element, or use a function that","returns a cloned version of the element instead.",` + +`,`1) content: element.innerHTML +`,"2) content: () => element.cloneNode(true)"].join(" "));var be=Y.reduce(function(le,pe){var ye=pe&&cn(pe,I);return ye&&le.push(ye),le},[]);return V(m)?be[0]:be}dt.defaultProps=Qe,dt.setDefaultProps=Wr,dt.currentInput=_;var lr=function(w){var S=w===void 0?{}:w,I=S.exclude,Y=S.duration;wn.forEach(function(H){var k=!1;if(I&&(k=Z(I)?H.reference===I:H.popper===I.popper),!k){var be=H.props.duration;H.setProps({duration:Y}),H.hide(),H.state.isDestroyed||H.setProps({duration:be})}})},cr=Object.assign({},e.applyStyles,{effect:function(w){var S=w.state,I={popper:{position:S.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};Object.assign(S.elements.popper.style,I.popper),S.styles=I,S.elements.arrow&&Object.assign(S.elements.arrow.style,I.arrow)}}),fr=function(w,S){var I;S===void 0&&(S={}),Ut(!Array.isArray(w),["The first argument passed to createSingleton() must be an array of","tippy instances. The passed value was",String(w)].join(" "));var Y=w,H=[],k,be=S.overrides,le=[],pe=!1;function ye(){H=Y.map(function(ee){return ee.reference})}function _e(ee){Y.forEach(function(ie){ee?ie.enable():ie.disable()})}function je(ee){return Y.map(function(ie){var x=ie.setProps;return ie.setProps=function(Ge){x(Ge),ie.reference===k&&ee.setProps(Ge)},function(){ie.setProps=x}})}function Se(ee,ie){var x=H.indexOf(ie);if(ie!==k){k=ie;var Ge=(be||[]).concat("content").reduce(function(fe,Ft){return fe[Ft]=Y[x].props[Ft],fe},{});ee.setProps(Object.assign({},Ge,{getReferenceClientRect:typeof Ge.getReferenceClientRect=="function"?Ge.getReferenceClientRect:function(){return ie.getBoundingClientRect()}}))}}_e(!1),ye();var Ie={fn:function(){return{onDestroy:function(){_e(!0)},onHidden:function(){k=null},onClickOutside:function(x){x.props.showOnCreate&&!pe&&(pe=!0,k=null)},onShow:function(x){x.props.showOnCreate&&!pe&&(pe=!0,Se(x,H[0]))},onTrigger:function(x,Ge){Se(x,Ge.currentTarget)}}}},re=dt(J(),Object.assign({},O(S,["overrides"]),{plugins:[Ie].concat(S.plugins||[]),triggerTarget:H,popperOptions:Object.assign({},S.popperOptions,{modifiers:[].concat(((I=S.popperOptions)==null?void 0:I.modifiers)||[],[cr])})})),he=re.show;re.show=function(ee){if(he(),!k&&ee==null)return Se(re,H[0]);if(!(k&&ee==null)){if(typeof ee=="number")return H[ee]&&Se(re,H[ee]);if(Y.includes(ee)){var ie=ee.reference;return Se(re,ie)}if(H.includes(ee))return Se(re,ee)}},re.showNext=function(){var ee=H[0];if(!k)return re.show(0);var ie=H.indexOf(k);re.show(H[ie+1]||ee)},re.showPrevious=function(){var ee=H[H.length-1];if(!k)return re.show(ee);var ie=H.indexOf(k),x=H[ie-1]||ee;re.show(x)};var ve=re.setProps;return re.setProps=function(ee){be=ee.overrides||be,ve(ee)},re.setInstances=function(ee){_e(!0),le.forEach(function(ie){return ie()}),Y=ee,_e(!1),ye(),je(re),re.setProps({triggerTarget:H})},le=je(re),re},ur={mouseover:"mouseenter",focusin:"focus",click:"click"};function qt(m,w){Ut(!(w&&w.target),["You must specity a `target` prop indicating a CSS selector string matching","the target elements that should receive a tippy."].join(" "));var S=[],I=[],Y=!1,H=w.target,k=O(w,["target"]),be=Object.assign({},k,{trigger:"manual",touch:!1}),le=Object.assign({},k,{showOnCreate:!0}),pe=dt(m,be),ye=R(pe);function _e(he){if(!(!he.target||Y)){var ve=he.target.closest(H);if(ve){var ee=ve.getAttribute("data-tippy-trigger")||w.trigger||Qe.trigger;if(!ve._tippy&&!(he.type==="touchstart"&&typeof le.touch=="boolean")&&!(he.type!=="touchstart"&&ee.indexOf(ur[he.type])<0)){var ie=dt(ve,le);ie&&(I=I.concat(ie))}}}}function je(he,ve,ee,ie){ie===void 0&&(ie=!1),he.addEventListener(ve,ee,ie),S.push({node:he,eventType:ve,handler:ee,options:ie})}function Se(he){var ve=he.reference;je(ve,"touchstart",_e,u),je(ve,"mouseover",_e),je(ve,"focusin",_e),je(ve,"click",_e)}function Ie(){S.forEach(function(he){var ve=he.node,ee=he.eventType,ie=he.handler,x=he.options;ve.removeEventListener(ee,ie,x)}),S=[]}function re(he){var ve=he.destroy,ee=he.enable,ie=he.disable;he.destroy=function(x){x===void 0&&(x=!0),x&&I.forEach(function(Ge){Ge.destroy()}),I=[],Ie(),ve()},he.enable=function(){ee(),I.forEach(function(x){return x.enable()}),Y=!1},he.disable=function(){ie(),I.forEach(function(x){return x.disable()}),Y=!0},Se(he)}return ye.forEach(re),pe}var dr={name:"animateFill",defaultValue:!1,fn:function(w){var S;if(!((S=w.props.render)!=null&&S.$$tippy))return Ut(w.props.animateFill,"The `animateFill` plugin requires the default render function."),{};var I=Xt(w.popper),Y=I.box,H=I.content,k=w.props.animateFill?zr():null;return{onCreate:function(){k&&(Y.insertBefore(k,Y.firstElementChild),Y.setAttribute("data-animatefill",""),Y.style.overflow="hidden",w.setProps({arrow:!1,animation:"shift-away"}))},onMount:function(){if(k){var le=Y.style.transitionDuration,pe=Number(le.replace("ms",""));H.style.transitionDelay=Math.round(pe/10)+"ms",k.style.transitionDuration=le,p([k],"visible")}},onShow:function(){k&&(k.style.transitionDuration="0ms")},onHide:function(){k&&p([k],"hidden")}}}};function zr(){var m=J();return m.className=o,p([m],"hidden"),m}var xn={clientX:0,clientY:0},fn=[];function En(m){var w=m.clientX,S=m.clientY;xn={clientX:w,clientY:S}}function On(m){m.addEventListener("mousemove",En)}function Ur(m){m.removeEventListener("mousemove",En)}var jn={name:"followCursor",defaultValue:!1,fn:function(w){var S=w.reference,I=v(w.props.triggerTarget||S),Y=!1,H=!1,k=!0,be=w.props;function le(){return w.props.followCursor==="initial"&&w.state.isVisible}function pe(){I.addEventListener("mousemove",je)}function ye(){I.removeEventListener("mousemove",je)}function _e(){Y=!0,w.setProps({getReferenceClientRect:null}),Y=!1}function je(re){var he=re.target?S.contains(re.target):!0,ve=w.props.followCursor,ee=re.clientX,ie=re.clientY,x=S.getBoundingClientRect(),Ge=ee-x.left,fe=ie-x.top;(he||!w.props.interactive)&&w.setProps({getReferenceClientRect:function(){var bt=S.getBoundingClientRect(),Gt=ee,Kt=ie;ve==="initial"&&(Gt=bt.left+Ge,Kt=bt.top+fe);var Jt=ve==="horizontal"?bt.top:Kt,rt=ve==="vertical"?bt.right:Gt,st=ve==="horizontal"?bt.bottom:Kt,yt=ve==="vertical"?bt.left:Gt;return{width:rt-yt,height:st-Jt,top:Jt,right:rt,bottom:st,left:yt}}})}function Se(){w.props.followCursor&&(fn.push({instance:w,doc:I}),On(I))}function Ie(){fn=fn.filter(function(re){return re.instance!==w}),fn.filter(function(re){return re.doc===I}).length===0&&Ur(I)}return{onCreate:Se,onDestroy:Ie,onBeforeUpdate:function(){be=w.props},onAfterUpdate:function(he,ve){var ee=ve.followCursor;Y||ee!==void 0&&be.followCursor!==ee&&(Ie(),ee?(Se(),w.state.isMounted&&!H&&!le()&&pe()):(ye(),_e()))},onMount:function(){w.props.followCursor&&!H&&(k&&(je(xn),k=!1),le()||pe())},onTrigger:function(he,ve){U(ve)&&(xn={clientX:ve.clientX,clientY:ve.clientY}),H=ve.type==="focus"},onHidden:function(){w.props.followCursor&&(_e(),ye(),k=!0)}}}};function Yr(m,w){var S;return{popperOptions:Object.assign({},m.popperOptions,{modifiers:[].concat((((S=m.popperOptions)==null?void 0:S.modifiers)||[]).filter(function(I){var Y=I.name;return Y!==w.name}),[w])})}}var Bn={name:"inlinePositioning",defaultValue:!1,fn:function(w){var S=w.reference;function I(){return!!w.props.inlinePositioning}var Y,H=-1,k=!1,be={name:"tippyInlinePositioning",enabled:!0,phase:"afterWrite",fn:function(je){var Se=je.state;I()&&(Y!==Se.placement&&w.setProps({getReferenceClientRect:function(){return le(Se.placement)}}),Y=Se.placement)}};function le(_e){return Xr(K(_e),S.getBoundingClientRect(),X(S.getClientRects()),H)}function pe(_e){k=!0,w.setProps(_e),k=!1}function ye(){k||pe(Yr(w.props,be))}return{onCreate:ye,onAfterUpdate:ye,onTrigger:function(je,Se){if(U(Se)){var Ie=X(w.reference.getClientRects()),re=Ie.find(function(he){return he.left-2<=Se.clientX&&he.right+2>=Se.clientX&&he.top-2<=Se.clientY&&he.bottom+2>=Se.clientY});H=Ie.indexOf(re)}},onUntrigger:function(){H=-1}}}};function Xr(m,w,S,I){if(S.length<2||m===null)return w;if(S.length===2&&I>=0&&S[0].left>S[1].right)return S[I]||w;switch(m){case"top":case"bottom":{var Y=S[0],H=S[S.length-1],k=m==="top",be=Y.top,le=H.bottom,pe=k?Y.left:H.left,ye=k?Y.right:H.right,_e=ye-pe,je=le-be;return{top:be,bottom:le,left:pe,right:ye,width:_e,height:je}}case"left":case"right":{var Se=Math.min.apply(Math,S.map(function(fe){return fe.left})),Ie=Math.max.apply(Math,S.map(function(fe){return fe.right})),re=S.filter(function(fe){return m==="left"?fe.left===Se:fe.right===Ie}),he=re[0].top,ve=re[re.length-1].bottom,ee=Se,ie=Ie,x=ie-ee,Ge=ve-he;return{top:he,bottom:ve,left:ee,right:ie,width:x,height:Ge}}default:return w}}var qr={name:"sticky",defaultValue:!1,fn:function(w){var S=w.reference,I=w.popper;function Y(){return w.popperInstance?w.popperInstance.state.elements.reference:S}function H(pe){return w.props.sticky===!0||w.props.sticky===pe}var k=null,be=null;function le(){var pe=H("reference")?Y().getBoundingClientRect():null,ye=H("popper")?I.getBoundingClientRect():null;(pe&&Hn(k,pe)||ye&&Hn(be,ye))&&w.popperInstance&&w.popperInstance.update(),k=pe,be=ye,w.state.isMounted&&requestAnimationFrame(le)}return{onMount:function(){w.props.sticky&&le()}}}};function Hn(m,w){return m&&w?m.top!==w.top||m.right!==w.right||m.bottom!==w.bottom||m.left!==w.left:!0}dt.setDefaultProps({render:ar}),t.animateFill=dr,t.createSingleton=fr,t.default=dt,t.delegate=qt,t.followCursor=jn,t.hideAll=lr,t.inlinePositioning=Bn,t.roundArrow=r,t.sticky=qr}),Ei=Fo(Lo()),ds=Fo(Lo()),ps=t=>{let e={plugins:[]},r=i=>t[t.indexOf(i)+1];if(t.includes("animation")&&(e.animation=r("animation")),t.includes("duration")&&(e.duration=parseInt(r("duration"))),t.includes("delay")){let i=r("delay");e.delay=i.includes("-")?i.split("-").map(o=>parseInt(o)):parseInt(i)}if(t.includes("cursor")){e.plugins.push(ds.followCursor);let i=r("cursor");["x","initial"].includes(i)?e.followCursor=i==="x"?"horizontal":"initial":e.followCursor=!0}t.includes("on")&&(e.trigger=r("on")),t.includes("arrowless")&&(e.arrow=!1),t.includes("html")&&(e.allowHTML=!0),t.includes("interactive")&&(e.interactive=!0),t.includes("border")&&e.interactive&&(e.interactiveBorder=parseInt(r("border"))),t.includes("debounce")&&e.interactive&&(e.interactiveDebounce=parseInt(r("debounce"))),t.includes("max-width")&&(e.maxWidth=parseInt(r("max-width"))),t.includes("theme")&&(e.theme=r("theme")),t.includes("placement")&&(e.placement=r("placement"));let n={};return t.includes("no-flip")&&(n.modifiers||(n.modifiers=[]),n.modifiers.push({name:"flip",enabled:!1})),e.popperOptions=n,e};function Oi(t){t.magic("tooltip",e=>(r,n={})=>{let i=n.timeout;delete n.timeout;let o=(0,Ei.default)(e,{content:r,trigger:"manual",...n});o.show(),setTimeout(()=>{o.hide(),setTimeout(()=>o.destroy(),n.duration||300)},i||2e3)}),t.directive("tooltip",(e,{modifiers:r,expression:n},{evaluateLater:i,effect:o})=>{let l=r.length>0?ps(r):{};e.__x_tippy||(e.__x_tippy=(0,Ei.default)(e,l));let h=()=>e.__x_tippy.enable(),u=()=>e.__x_tippy.disable(),f=y=>{y?(h(),e.__x_tippy.setContent(y)):u()};if(r.includes("raw"))f(n);else{let y=i(n);o(()=>{y(b=>{typeof b=="object"?(e.__x_tippy.setProps(b),h()):f(b)})})}})}Oi.defaultProps=t=>(Ei.default.setDefaultProps(t),Oi);var hs=Oi,No=hs;document.addEventListener("alpine:init",()=>{window.Alpine.plugin(ro),window.Alpine.plugin(io),window.Alpine.plugin(Ro),window.Alpine.plugin(No)});var vs=function(t,e,r){function n(y,b){for(let A of y){let E=i(A,b);if(E!==null)return E}}function i(y,b){let A=y.match(/^[\{\[]([^\[\]\{\}]*)[\}\]](.*)/s);if(A===null||A.length!==3)return null;let E=A[1],O=A[2];if(E.includes(",")){let[P,R]=E.split(",",2);if(R==="*"&&b>=P)return O;if(P==="*"&&b<=R)return O;if(b>=P&&b<=R)return O}return E==b?O:null}function o(y){return y.toString().charAt(0).toUpperCase()+y.toString().slice(1)}function l(y,b){if(b.length===0)return y;let A={};for(let[E,O]of Object.entries(b))A[":"+o(E??"")]=o(O??""),A[":"+E.toUpperCase()]=O.toString().toUpperCase(),A[":"+E]=O;return Object.entries(A).forEach(([E,O])=>{y=y.replaceAll(E,O)}),y}function h(y){return y.map(b=>b.replace(/^[\{\[]([^\[\]\{\}]*)[\}\]]/,""))}let u=t.split("|"),f=n(u,e);return f!=null?l(f.trim(),r):(u=h(u),l(u.length>1&&e>1?u[1]:u[0],r))};window.jsMd5=ko.md5;window.pluralize=vs;})(); +/*! Bundled license information: + +js-md5/src/md5.js: + (** + * [js-md5]{@link https://github.com/emn178/js-md5} + * + * @namespace md5 + * @version 0.8.3 + * @author Chen, Yi-Cyuan [emn178@gmail.com] + * @copyright Chen, Yi-Cyuan 2014-2023 + * @license MIT + *) + +sortablejs/modular/sortable.esm.js: + (**! + * Sortable 1.15.2 + * @author RubaXa + * @author owenm + * @license MIT + *) +*/ diff --git a/public/js/filament/tables/components/table.js b/public/js/filament/tables/components/table.js new file mode 100644 index 0000000..ea16d85 --- /dev/null +++ b/public/js/filament/tables/components/table.js @@ -0,0 +1 @@ +function n(){return{checkboxClickController:null,collapsedGroups:[],isLoading:!1,selectedRecords:[],shouldCheckUniqueSelection:!0,lastCheckedRecord:null,livewireId:null,init:function(){this.livewireId=this.$root.closest("[wire\\:id]").attributes["wire:id"].value,this.$wire.$on("deselectAllTableRecords",()=>this.deselectAllRecords()),this.$watch("selectedRecords",()=>{if(!this.shouldCheckUniqueSelection){this.shouldCheckUniqueSelection=!0;return}this.selectedRecords=[...new Set(this.selectedRecords)],this.shouldCheckUniqueSelection=!1}),this.$nextTick(()=>this.watchForCheckboxClicks()),Livewire.hook("element.init",({component:e})=>{e.id===this.livewireId&&this.watchForCheckboxClicks()})},mountAction:function(e,t=null){this.$wire.set("selectedTableRecords",this.selectedRecords,!1),this.$wire.mountTableAction(e,t)},mountBulkAction:function(e){this.$wire.set("selectedTableRecords",this.selectedRecords,!1),this.$wire.mountTableBulkAction(e)},toggleSelectRecordsOnPage:function(){let e=this.getRecordsOnPage();if(this.areRecordsSelected(e)){this.deselectRecords(e);return}this.selectRecords(e)},toggleSelectRecordsInGroup:async function(e){if(this.isLoading=!0,this.areRecordsSelected(this.getRecordsInGroupOnPage(e))){this.deselectRecords(await this.$wire.getGroupedSelectableTableRecordKeys(e));return}this.selectRecords(await this.$wire.getGroupedSelectableTableRecordKeys(e)),this.isLoading=!1},getRecordsInGroupOnPage:function(e){let t=[];for(let s of this.$root?.getElementsByClassName("fi-ta-record-checkbox")??[])s.dataset.group===e&&t.push(s.value);return t},getRecordsOnPage:function(){let e=[];for(let t of this.$root?.getElementsByClassName("fi-ta-record-checkbox")??[])e.push(t.value);return e},selectRecords:function(e){for(let t of e)this.isRecordSelected(t)||this.selectedRecords.push(t)},deselectRecords:function(e){for(let t of e){let s=this.selectedRecords.indexOf(t);s!==-1&&this.selectedRecords.splice(s,1)}},selectAllRecords:async function(){this.isLoading=!0,this.selectedRecords=await this.$wire.getAllSelectableTableRecordKeys(),this.isLoading=!1},deselectAllRecords:function(){this.selectedRecords=[]},isRecordSelected:function(e){return this.selectedRecords.includes(e)},areRecordsSelected:function(e){return e.every(t=>this.isRecordSelected(t))},toggleCollapseGroup:function(e){if(this.isGroupCollapsed(e)){this.collapsedGroups.splice(this.collapsedGroups.indexOf(e),1);return}this.collapsedGroups.push(e)},isGroupCollapsed:function(e){return this.collapsedGroups.includes(e)},resetCollapsedGroups:function(){this.collapsedGroups=[]},watchForCheckboxClicks:function(){this.checkboxClickController&&this.checkboxClickController.abort(),this.checkboxClickController=new AbortController;let{signal:e}=this.checkboxClickController;this.$root?.addEventListener("click",t=>t.target?.matches(".fi-ta-record-checkbox")&&this.handleCheckboxClick(t,t.target),{signal:e})},handleCheckboxClick:function(e,t){if(!this.lastChecked){this.lastChecked=t;return}if(e.shiftKey){let s=Array.from(this.$root?.getElementsByClassName("fi-ta-record-checkbox")??[]);if(!s.includes(this.lastChecked)){this.lastChecked=t;return}let o=s.indexOf(this.lastChecked),r=s.indexOf(t),l=[o,r].sort((i,d)=>i-d),c=[];for(let i=l[0];i<=l[1];i++)s[i].checked=t.checked,c.push(s[i].value);t.checked?this.selectRecords(c):this.deselectRecords(c)}this.lastChecked=t}}}export{n as default}; diff --git a/public/js/filament/widgets/components/chart.js b/public/js/filament/widgets/components/chart.js new file mode 100644 index 0000000..5e13664 --- /dev/null +++ b/public/js/filament/widgets/components/chart.js @@ -0,0 +1,37 @@ +function Ft(){}var Mo=function(){let s=0;return function(){return s++}}();function R(s){return s===null||typeof s>"u"}function $(s){if(Array.isArray&&Array.isArray(s))return!0;let t=Object.prototype.toString.call(s);return t.slice(0,7)==="[object"&&t.slice(-6)==="Array]"}function A(s){return s!==null&&Object.prototype.toString.call(s)==="[object Object]"}var K=s=>(typeof s=="number"||s instanceof Number)&&isFinite(+s);function mt(s,t){return K(s)?s:t}function I(s,t){return typeof s>"u"?t:s}var To=(s,t)=>typeof s=="string"&&s.endsWith("%")?parseFloat(s)/100:s/t,Tn=(s,t)=>typeof s=="string"&&s.endsWith("%")?parseFloat(s)/100*t:+s;function j(s,t,e){if(s&&typeof s.call=="function")return s.apply(e,t)}function H(s,t,e,i){let n,r,o;if($(s))if(r=s.length,i)for(n=r-1;n>=0;n--)t.call(e,s[n],n);else for(n=0;ns,x:s=>s.x,y:s=>s.y};function Bt(s,t){return(co[t]||(co[t]=Tc(t)))(s)}function Tc(s){let t=vc(s);return e=>{for(let i of t){if(i==="")break;e=e&&e[i]}return e}}function vc(s){let t=s.split("."),e=[],i="";for(let n of t)i+=n,i.endsWith("\\")?i=i.slice(0,-1)+".":(e.push(i),i="");return e}function Mi(s){return s.charAt(0).toUpperCase()+s.slice(1)}var ft=s=>typeof s<"u",Ht=s=>typeof s=="function",vn=(s,t)=>{if(s.size!==t.size)return!1;for(let e of s)if(!t.has(e))return!1;return!0};function Oo(s){return s.type==="mouseup"||s.type==="click"||s.type==="contextmenu"}var Y=Math.PI,B=2*Y,Oc=B+Y,wi=Number.POSITIVE_INFINITY,Dc=Y/180,Z=Y/2,gs=Y/4,ho=Y*2/3,gt=Math.log10,Tt=Math.sign;function On(s){let t=Math.round(s);s=Ne(s,t,s/1e3)?t:s;let e=Math.pow(10,Math.floor(gt(s))),i=s/e;return(i<=1?1:i<=2?2:i<=5?5:10)*e}function Do(s){let t=[],e=Math.sqrt(s),i;for(i=1;in-r).pop(),t}function pe(s){return!isNaN(parseFloat(s))&&isFinite(s)}function Ne(s,t,e){return Math.abs(s-t)=s}function Dn(s,t,e){let i,n,r;for(i=0,n=s.length;il&&c=Math.min(t,e)-i&&s<=Math.max(t,e)+i}function vi(s,t,e){e=e||(o=>s[o]1;)r=n+i>>1,e(r)?n=r:i=r;return{lo:n,hi:i}}var Ct=(s,t,e,i)=>vi(s,e,i?n=>s[n][t]<=e:n=>s[n][t]vi(s,e,i=>s[i][t]>=e);function Fo(s,t,e){let i=0,n=s.length;for(;ii&&s[n-1]>e;)n--;return i>0||n{let i="_onData"+Mi(e),n=s[e];Object.defineProperty(s,e,{configurable:!0,enumerable:!1,value(...r){let o=n.apply(this,r);return s._chartjs.listeners.forEach(a=>{typeof a[i]=="function"&&a[i](...r)}),o}})})}function Cn(s,t){let e=s._chartjs;if(!e)return;let i=e.listeners,n=i.indexOf(t);n!==-1&&i.splice(n,1),!(i.length>0)&&(Ao.forEach(r=>{delete s[r]}),delete s._chartjs)}function Fn(s){let t=new Set,e,i;for(e=0,i=s.length;e"u"?function(s){return s()}:window.requestAnimationFrame}();function Ln(s,t,e){let i=e||(o=>Array.prototype.slice.call(o)),n=!1,r=[];return function(...o){r=i(o),n||(n=!0,An.call(window,()=>{n=!1,s.apply(t,r)}))}}function Po(s,t){let e;return function(...i){return t?(clearTimeout(e),e=setTimeout(s,t,i)):s.apply(this,i),t}}var Oi=s=>s==="start"?"left":s==="end"?"right":"center",ot=(s,t,e)=>s==="start"?t:s==="end"?e:(t+e)/2,No=(s,t,e,i)=>s===(i?"left":"right")?e:s==="center"?(t+e)/2:t;function Pn(s,t,e){let i=t.length,n=0,r=i;if(s._sorted){let{iScale:o,_parsed:a}=s,l=o.axis,{min:c,max:h,minDefined:u,maxDefined:d}=o.getUserBounds();u&&(n=it(Math.min(Ct(a,o.axis,c).lo,e?i:Ct(t,l,o.getPixelForValue(c)).lo),0,i-1)),d?r=it(Math.max(Ct(a,o.axis,h,!0).hi+1,e?0:Ct(t,l,o.getPixelForValue(h),!0).hi+1),n,i)-n:r=i-n}return{start:n,count:r}}function Nn(s){let{xScale:t,yScale:e,_scaleRanges:i}=s,n={xmin:t.min,xmax:t.max,ymin:e.min,ymax:e.max};if(!i)return s._scaleRanges=n,!0;let r=i.xmin!==t.min||i.xmax!==t.max||i.ymin!==e.min||i.ymax!==e.max;return Object.assign(i,n),r}var gi=s=>s===0||s===1,uo=(s,t,e)=>-(Math.pow(2,10*(s-=1))*Math.sin((s-t)*B/e)),fo=(s,t,e)=>Math.pow(2,-10*s)*Math.sin((s-t)*B/e)+1,Ie={linear:s=>s,easeInQuad:s=>s*s,easeOutQuad:s=>-s*(s-2),easeInOutQuad:s=>(s/=.5)<1?.5*s*s:-.5*(--s*(s-2)-1),easeInCubic:s=>s*s*s,easeOutCubic:s=>(s-=1)*s*s+1,easeInOutCubic:s=>(s/=.5)<1?.5*s*s*s:.5*((s-=2)*s*s+2),easeInQuart:s=>s*s*s*s,easeOutQuart:s=>-((s-=1)*s*s*s-1),easeInOutQuart:s=>(s/=.5)<1?.5*s*s*s*s:-.5*((s-=2)*s*s*s-2),easeInQuint:s=>s*s*s*s*s,easeOutQuint:s=>(s-=1)*s*s*s*s+1,easeInOutQuint:s=>(s/=.5)<1?.5*s*s*s*s*s:.5*((s-=2)*s*s*s*s+2),easeInSine:s=>-Math.cos(s*Z)+1,easeOutSine:s=>Math.sin(s*Z),easeInOutSine:s=>-.5*(Math.cos(Y*s)-1),easeInExpo:s=>s===0?0:Math.pow(2,10*(s-1)),easeOutExpo:s=>s===1?1:-Math.pow(2,-10*s)+1,easeInOutExpo:s=>gi(s)?s:s<.5?.5*Math.pow(2,10*(s*2-1)):.5*(-Math.pow(2,-10*(s*2-1))+2),easeInCirc:s=>s>=1?s:-(Math.sqrt(1-s*s)-1),easeOutCirc:s=>Math.sqrt(1-(s-=1)*s),easeInOutCirc:s=>(s/=.5)<1?-.5*(Math.sqrt(1-s*s)-1):.5*(Math.sqrt(1-(s-=2)*s)+1),easeInElastic:s=>gi(s)?s:uo(s,.075,.3),easeOutElastic:s=>gi(s)?s:fo(s,.075,.3),easeInOutElastic(s){return gi(s)?s:s<.5?.5*uo(s*2,.1125,.45):.5+.5*fo(s*2-1,.1125,.45)},easeInBack(s){return s*s*((1.70158+1)*s-1.70158)},easeOutBack(s){return(s-=1)*s*((1.70158+1)*s+1.70158)+1},easeInOutBack(s){let t=1.70158;return(s/=.5)<1?.5*(s*s*(((t*=1.525)+1)*s-t)):.5*((s-=2)*s*(((t*=1.525)+1)*s+t)+2)},easeInBounce:s=>1-Ie.easeOutBounce(1-s),easeOutBounce(s){return s<1/2.75?7.5625*s*s:s<2/2.75?7.5625*(s-=1.5/2.75)*s+.75:s<2.5/2.75?7.5625*(s-=2.25/2.75)*s+.9375:7.5625*(s-=2.625/2.75)*s+.984375},easeInOutBounce:s=>s<.5?Ie.easeInBounce(s*2)*.5:Ie.easeOutBounce(s*2-1)*.5+.5};function _s(s){return s+.5|0}var Kt=(s,t,e)=>Math.max(Math.min(s,e),t);function ps(s){return Kt(_s(s*2.55),0,255)}function Jt(s){return Kt(_s(s*255),0,255)}function Vt(s){return Kt(_s(s/2.55)/100,0,1)}function mo(s){return Kt(_s(s*100),0,100)}var _t={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},kn=[..."0123456789ABCDEF"],Ic=s=>kn[s&15],Cc=s=>kn[(s&240)>>4]+kn[s&15],pi=s=>(s&240)>>4===(s&15),Fc=s=>pi(s.r)&&pi(s.g)&&pi(s.b)&&pi(s.a);function Ac(s){var t=s.length,e;return s[0]==="#"&&(t===4||t===5?e={r:255&_t[s[1]]*17,g:255&_t[s[2]]*17,b:255&_t[s[3]]*17,a:t===5?_t[s[4]]*17:255}:(t===7||t===9)&&(e={r:_t[s[1]]<<4|_t[s[2]],g:_t[s[3]]<<4|_t[s[4]],b:_t[s[5]]<<4|_t[s[6]],a:t===9?_t[s[7]]<<4|_t[s[8]]:255})),e}var Lc=(s,t)=>s<255?t(s):"";function Pc(s){var t=Fc(s)?Ic:Cc;return s?"#"+t(s.r)+t(s.g)+t(s.b)+Lc(s.a,t):void 0}var Nc=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function Ro(s,t,e){let i=t*Math.min(e,1-e),n=(r,o=(r+s/30)%12)=>e-i*Math.max(Math.min(o-3,9-o,1),-1);return[n(0),n(8),n(4)]}function Rc(s,t,e){let i=(n,r=(n+s/60)%6)=>e-e*t*Math.max(Math.min(r,4-r,1),0);return[i(5),i(3),i(1)]}function Wc(s,t,e){let i=Ro(s,1,.5),n;for(t+e>1&&(n=1/(t+e),t*=n,e*=n),n=0;n<3;n++)i[n]*=1-t-e,i[n]+=t;return i}function zc(s,t,e,i,n){return s===n?(t-e)/i+(t.5?h/(2-r-o):h/(r+o),l=zc(e,i,n,h,r),l=l*60+.5),[l|0,c||0,a]}function Wn(s,t,e,i){return(Array.isArray(t)?s(t[0],t[1],t[2]):s(t,e,i)).map(Jt)}function zn(s,t,e){return Wn(Ro,s,t,e)}function Vc(s,t,e){return Wn(Wc,s,t,e)}function Hc(s,t,e){return Wn(Rc,s,t,e)}function Wo(s){return(s%360+360)%360}function Bc(s){let t=Nc.exec(s),e=255,i;if(!t)return;t[5]!==i&&(e=t[6]?ps(+t[5]):Jt(+t[5]));let n=Wo(+t[2]),r=+t[3]/100,o=+t[4]/100;return t[1]==="hwb"?i=Vc(n,r,o):t[1]==="hsv"?i=Hc(n,r,o):i=zn(n,r,o),{r:i[0],g:i[1],b:i[2],a:e}}function $c(s,t){var e=Rn(s);e[0]=Wo(e[0]+t),e=zn(e),s.r=e[0],s.g=e[1],s.b=e[2]}function jc(s){if(!s)return;let t=Rn(s),e=t[0],i=mo(t[1]),n=mo(t[2]);return s.a<255?`hsla(${e}, ${i}%, ${n}%, ${Vt(s.a)})`:`hsl(${e}, ${i}%, ${n}%)`}var go={x:"dark",Z:"light",Y:"re",X:"blu",W:"gr",V:"medium",U:"slate",A:"ee",T:"ol",S:"or",B:"ra",C:"lateg",D:"ights",R:"in",Q:"turquois",E:"hi",P:"ro",O:"al",N:"le",M:"de",L:"yello",F:"en",K:"ch",G:"arks",H:"ea",I:"ightg",J:"wh"},po={OiceXe:"f0f8ff",antiquewEte:"faebd7",aqua:"ffff",aquamarRe:"7fffd4",azuY:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"0",blanKedOmond:"ffebcd",Xe:"ff",XeviTet:"8a2be2",bPwn:"a52a2a",burlywood:"deb887",caMtXe:"5f9ea0",KartYuse:"7fff00",KocTate:"d2691e",cSO:"ff7f50",cSnflowerXe:"6495ed",cSnsilk:"fff8dc",crimson:"dc143c",cyan:"ffff",xXe:"8b",xcyan:"8b8b",xgTMnPd:"b8860b",xWay:"a9a9a9",xgYF:"6400",xgYy:"a9a9a9",xkhaki:"bdb76b",xmagFta:"8b008b",xTivegYF:"556b2f",xSange:"ff8c00",xScEd:"9932cc",xYd:"8b0000",xsOmon:"e9967a",xsHgYF:"8fbc8f",xUXe:"483d8b",xUWay:"2f4f4f",xUgYy:"2f4f4f",xQe:"ced1",xviTet:"9400d3",dAppRk:"ff1493",dApskyXe:"bfff",dimWay:"696969",dimgYy:"696969",dodgerXe:"1e90ff",fiYbrick:"b22222",flSOwEte:"fffaf0",foYstWAn:"228b22",fuKsia:"ff00ff",gaRsbSo:"dcdcdc",ghostwEte:"f8f8ff",gTd:"ffd700",gTMnPd:"daa520",Way:"808080",gYF:"8000",gYFLw:"adff2f",gYy:"808080",honeyMw:"f0fff0",hotpRk:"ff69b4",RdianYd:"cd5c5c",Rdigo:"4b0082",ivSy:"fffff0",khaki:"f0e68c",lavFMr:"e6e6fa",lavFMrXsh:"fff0f5",lawngYF:"7cfc00",NmoncEffon:"fffacd",ZXe:"add8e6",ZcSO:"f08080",Zcyan:"e0ffff",ZgTMnPdLw:"fafad2",ZWay:"d3d3d3",ZgYF:"90ee90",ZgYy:"d3d3d3",ZpRk:"ffb6c1",ZsOmon:"ffa07a",ZsHgYF:"20b2aa",ZskyXe:"87cefa",ZUWay:"778899",ZUgYy:"778899",ZstAlXe:"b0c4de",ZLw:"ffffe0",lime:"ff00",limegYF:"32cd32",lRF:"faf0e6",magFta:"ff00ff",maPon:"800000",VaquamarRe:"66cdaa",VXe:"cd",VScEd:"ba55d3",VpurpN:"9370db",VsHgYF:"3cb371",VUXe:"7b68ee",VsprRggYF:"fa9a",VQe:"48d1cc",VviTetYd:"c71585",midnightXe:"191970",mRtcYam:"f5fffa",mistyPse:"ffe4e1",moccasR:"ffe4b5",navajowEte:"ffdead",navy:"80",Tdlace:"fdf5e6",Tive:"808000",TivedBb:"6b8e23",Sange:"ffa500",SangeYd:"ff4500",ScEd:"da70d6",pOegTMnPd:"eee8aa",pOegYF:"98fb98",pOeQe:"afeeee",pOeviTetYd:"db7093",papayawEp:"ffefd5",pHKpuff:"ffdab9",peru:"cd853f",pRk:"ffc0cb",plum:"dda0dd",powMrXe:"b0e0e6",purpN:"800080",YbeccapurpN:"663399",Yd:"ff0000",Psybrown:"bc8f8f",PyOXe:"4169e1",saddNbPwn:"8b4513",sOmon:"fa8072",sandybPwn:"f4a460",sHgYF:"2e8b57",sHshell:"fff5ee",siFna:"a0522d",silver:"c0c0c0",skyXe:"87ceeb",UXe:"6a5acd",UWay:"708090",UgYy:"708090",snow:"fffafa",sprRggYF:"ff7f",stAlXe:"4682b4",tan:"d2b48c",teO:"8080",tEstN:"d8bfd8",tomato:"ff6347",Qe:"40e0d0",viTet:"ee82ee",JHt:"f5deb3",wEte:"ffffff",wEtesmoke:"f5f5f5",Lw:"ffff00",LwgYF:"9acd32"};function Uc(){let s={},t=Object.keys(po),e=Object.keys(go),i,n,r,o,a;for(i=0;i>16&255,r>>8&255,r&255]}return s}var yi;function Yc(s){yi||(yi=Uc(),yi.transparent=[0,0,0,0]);let t=yi[s.toLowerCase()];return t&&{r:t[0],g:t[1],b:t[2],a:t.length===4?t[3]:255}}var Zc=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;function qc(s){let t=Zc.exec(s),e=255,i,n,r;if(t){if(t[7]!==i){let o=+t[7];e=t[8]?ps(o):Kt(o*255,0,255)}return i=+t[1],n=+t[3],r=+t[5],i=255&(t[2]?ps(i):Kt(i,0,255)),n=255&(t[4]?ps(n):Kt(n,0,255)),r=255&(t[6]?ps(r):Kt(r,0,255)),{r:i,g:n,b:r,a:e}}}function Gc(s){return s&&(s.a<255?`rgba(${s.r}, ${s.g}, ${s.b}, ${Vt(s.a)})`:`rgb(${s.r}, ${s.g}, ${s.b})`)}var xn=s=>s<=.0031308?s*12.92:Math.pow(s,1/2.4)*1.055-.055,Ee=s=>s<=.04045?s/12.92:Math.pow((s+.055)/1.055,2.4);function Xc(s,t,e){let i=Ee(Vt(s.r)),n=Ee(Vt(s.g)),r=Ee(Vt(s.b));return{r:Jt(xn(i+e*(Ee(Vt(t.r))-i))),g:Jt(xn(n+e*(Ee(Vt(t.g))-n))),b:Jt(xn(r+e*(Ee(Vt(t.b))-r))),a:s.a+e*(t.a-s.a)}}function bi(s,t,e){if(s){let i=Rn(s);i[t]=Math.max(0,Math.min(i[t]+i[t]*e,t===0?360:1)),i=zn(i),s.r=i[0],s.g=i[1],s.b=i[2]}}function zo(s,t){return s&&Object.assign(t||{},s)}function yo(s){var t={r:0,g:0,b:0,a:255};return Array.isArray(s)?s.length>=3&&(t={r:s[0],g:s[1],b:s[2],a:255},s.length>3&&(t.a=Jt(s[3]))):(t=zo(s,{r:0,g:0,b:0,a:1}),t.a=Jt(t.a)),t}function Kc(s){return s.charAt(0)==="r"?qc(s):Bc(s)}var Fe=class{constructor(t){if(t instanceof Fe)return t;let e=typeof t,i;e==="object"?i=yo(t):e==="string"&&(i=Ac(t)||Yc(t)||Kc(t)),this._rgb=i,this._valid=!!i}get valid(){return this._valid}get rgb(){var t=zo(this._rgb);return t&&(t.a=Vt(t.a)),t}set rgb(t){this._rgb=yo(t)}rgbString(){return this._valid?Gc(this._rgb):void 0}hexString(){return this._valid?Pc(this._rgb):void 0}hslString(){return this._valid?jc(this._rgb):void 0}mix(t,e){if(t){let i=this.rgb,n=t.rgb,r,o=e===r?.5:e,a=2*o-1,l=i.a-n.a,c=((a*l===-1?a:(a+l)/(1+a*l))+1)/2;r=1-c,i.r=255&c*i.r+r*n.r+.5,i.g=255&c*i.g+r*n.g+.5,i.b=255&c*i.b+r*n.b+.5,i.a=o*i.a+(1-o)*n.a,this.rgb=i}return this}interpolate(t,e){return t&&(this._rgb=Xc(this._rgb,t._rgb,e)),this}clone(){return new Fe(this.rgb)}alpha(t){return this._rgb.a=Jt(t),this}clearer(t){let e=this._rgb;return e.a*=1-t,this}greyscale(){let t=this._rgb,e=_s(t.r*.3+t.g*.59+t.b*.11);return t.r=t.g=t.b=e,this}opaquer(t){let e=this._rgb;return e.a*=1+t,this}negate(){let t=this._rgb;return t.r=255-t.r,t.g=255-t.g,t.b=255-t.b,this}lighten(t){return bi(this._rgb,2,t),this}darken(t){return bi(this._rgb,2,-t),this}saturate(t){return bi(this._rgb,1,t),this}desaturate(t){return bi(this._rgb,1,-t),this}rotate(t){return $c(this._rgb,t),this}};function Vo(s){return new Fe(s)}function Ho(s){if(s&&typeof s=="object"){let t=s.toString();return t==="[object CanvasPattern]"||t==="[object CanvasGradient]"}return!1}function Vn(s){return Ho(s)?s:Vo(s)}function _n(s){return Ho(s)?s:Vo(s).saturate(.5).darken(.1).hexString()}var Qt=Object.create(null),Di=Object.create(null);function ys(s,t){if(!t)return s;let e=t.split(".");for(let i=0,n=e.length;ie.chart.platform.getDevicePixelRatio(),this.elements={},this.events=["mousemove","mouseout","click","touchstart","touchmove"],this.font={family:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",size:12,style:"normal",lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(e,i)=>_n(i.backgroundColor),this.hoverBorderColor=(e,i)=>_n(i.borderColor),this.hoverColor=(e,i)=>_n(i.color),this.indexAxis="x",this.interaction={mode:"nearest",intersect:!0,includeInvisible:!1},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(t)}set(t,e){return wn(this,t,e)}get(t){return ys(this,t)}describe(t,e){return wn(Di,t,e)}override(t,e){return wn(Qt,t,e)}route(t,e,i,n){let r=ys(this,t),o=ys(this,i),a="_"+e;Object.defineProperties(r,{[a]:{value:r[e],writable:!0},[e]:{enumerable:!0,get(){let l=this[a],c=o[n];return A(l)?Object.assign({},c,l):I(l,c)},set(l){this[a]=l}}})}},L=new Mn({_scriptable:s=>!s.startsWith("on"),_indexable:s=>s!=="events",hover:{_fallback:"interaction"},interaction:{_scriptable:!1,_indexable:!1}});function Jc(s){return!s||R(s.size)||R(s.family)?null:(s.style?s.style+" ":"")+(s.weight?s.weight+" ":"")+s.size+"px "+s.family}function bs(s,t,e,i,n){let r=t[n];return r||(r=t[n]=s.measureText(n).width,e.push(n)),r>i&&(i=r),i}function Bo(s,t,e,i){i=i||{};let n=i.data=i.data||{},r=i.garbageCollect=i.garbageCollect||[];i.font!==t&&(n=i.data={},r=i.garbageCollect=[],i.font=t),s.save(),s.font=t;let o=0,a=e.length,l,c,h,u,d;for(l=0;le.length){for(l=0;l0&&s.stroke()}}function Ae(s,t,e){return e=e||.5,!t||s&&s.x>t.left-e&&s.xt.top-e&&s.y0&&r.strokeColor!=="",l,c;for(s.save(),s.font=n.string,Qc(s,r),l=0;l+s||0;function Ii(s,t){let e={},i=A(t),n=i?Object.keys(t):t,r=A(s)?i?o=>I(s[o],s[t[o]]):o=>s[o]:()=>s;for(let o of n)e[o]=nh(r(o));return e}function $n(s){return Ii(s,{top:"y",right:"x",bottom:"y",left:"x"})}function se(s){return Ii(s,["topLeft","topRight","bottomLeft","bottomRight"])}function at(s){let t=$n(s);return t.width=t.left+t.right,t.height=t.top+t.bottom,t}function et(s,t){s=s||{},t=t||L.font;let e=I(s.size,t.size);typeof e=="string"&&(e=parseInt(e,10));let i=I(s.style,t.style);i&&!(""+i).match(sh)&&(console.warn('Invalid font style specified: "'+i+'"'),i="");let n={family:I(s.family,t.family),lineHeight:ih(I(s.lineHeight,t.lineHeight),e),size:e,style:i,weight:I(s.weight,t.weight),string:""};return n.string=Jc(n),n}function ze(s,t,e,i){let n=!0,r,o,a;for(r=0,o=s.length;re&&a===0?0:a+l;return{min:o(i,-Math.abs(r)),max:o(n,r)}}function $t(s,t){return Object.assign(Object.create(s),t)}function Ci(s,t=[""],e=s,i,n=()=>s[0]){ft(i)||(i=qo("_fallback",s));let r={[Symbol.toStringTag]:"Object",_cacheable:!0,_scopes:s,_rootScopes:e,_fallback:i,_getTarget:n,override:o=>Ci([o,...s],t,e,i)};return new Proxy(r,{deleteProperty(o,a){return delete o[a],delete o._keys,delete s[0][a],!0},get(o,a){return Yo(o,a,()=>dh(a,t,s,o))},getOwnPropertyDescriptor(o,a){return Reflect.getOwnPropertyDescriptor(o._scopes[0],a)},getPrototypeOf(){return Reflect.getPrototypeOf(s[0])},has(o,a){return xo(o).includes(a)},ownKeys(o){return xo(o)},set(o,a,l){let c=o._storage||(o._storage=n());return o[a]=c[a]=l,delete o._keys,!0}})}function ge(s,t,e,i){let n={_cacheable:!1,_proxy:s,_context:t,_subProxy:e,_stack:new Set,_descriptors:jn(s,i),setContext:r=>ge(s,r,e,i),override:r=>ge(s.override(r),t,e,i)};return new Proxy(n,{deleteProperty(r,o){return delete r[o],delete s[o],!0},get(r,o,a){return Yo(r,o,()=>oh(r,o,a))},getOwnPropertyDescriptor(r,o){return r._descriptors.allKeys?Reflect.has(s,o)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(s,o)},getPrototypeOf(){return Reflect.getPrototypeOf(s)},has(r,o){return Reflect.has(s,o)},ownKeys(){return Reflect.ownKeys(s)},set(r,o,a){return s[o]=a,delete r[o],!0}})}function jn(s,t={scriptable:!0,indexable:!0}){let{_scriptable:e=t.scriptable,_indexable:i=t.indexable,_allKeys:n=t.allKeys}=s;return{allKeys:n,scriptable:e,indexable:i,isScriptable:Ht(e)?e:()=>e,isIndexable:Ht(i)?i:()=>i}}var rh=(s,t)=>s?s+Mi(t):t,Un=(s,t)=>A(t)&&s!=="adapters"&&(Object.getPrototypeOf(t)===null||t.constructor===Object);function Yo(s,t,e){if(Object.prototype.hasOwnProperty.call(s,t))return s[t];let i=e();return s[t]=i,i}function oh(s,t,e){let{_proxy:i,_context:n,_subProxy:r,_descriptors:o}=s,a=i[t];return Ht(a)&&o.isScriptable(t)&&(a=ah(t,a,s,e)),$(a)&&a.length&&(a=lh(t,a,s,o.isIndexable)),Un(t,a)&&(a=ge(a,n,r&&r[t],o)),a}function ah(s,t,e,i){let{_proxy:n,_context:r,_subProxy:o,_stack:a}=e;if(a.has(s))throw new Error("Recursion detected: "+Array.from(a).join("->")+"->"+s);return a.add(s),t=t(r,o||i),a.delete(s),Un(s,t)&&(t=Yn(n._scopes,n,s,t)),t}function lh(s,t,e,i){let{_proxy:n,_context:r,_subProxy:o,_descriptors:a}=e;if(ft(r.index)&&i(s))t=t[r.index%t.length];else if(A(t[0])){let l=t,c=n._scopes.filter(h=>h!==l);t=[];for(let h of l){let u=Yn(c,n,s,h);t.push(ge(u,r,o&&o[s],a))}}return t}function Zo(s,t,e){return Ht(s)?s(t,e):s}var ch=(s,t)=>s===!0?t:typeof s=="string"?Bt(t,s):void 0;function hh(s,t,e,i,n){for(let r of t){let o=ch(e,r);if(o){s.add(o);let a=Zo(o._fallback,e,n);if(ft(a)&&a!==e&&a!==i)return a}else if(o===!1&&ft(i)&&e!==i)return null}return!1}function Yn(s,t,e,i){let n=t._rootScopes,r=Zo(t._fallback,e,i),o=[...s,...n],a=new Set;a.add(i);let l=bo(a,o,e,r||e,i);return l===null||ft(r)&&r!==e&&(l=bo(a,o,r,l,i),l===null)?!1:Ci(Array.from(a),[""],n,r,()=>uh(t,e,i))}function bo(s,t,e,i,n){for(;e;)e=hh(s,t,e,i,n);return e}function uh(s,t,e){let i=s._getTarget();t in i||(i[t]={});let n=i[t];return $(n)&&A(e)?e:n}function dh(s,t,e,i){let n;for(let r of t)if(n=qo(rh(r,s),e),ft(n))return Un(s,n)?Yn(e,i,s,n):n}function qo(s,t){for(let e of t){if(!e)continue;let i=e[s];if(ft(i))return i}}function xo(s){let t=s._keys;return t||(t=s._keys=fh(s._scopes)),t}function fh(s){let t=new Set;for(let e of s)for(let i of Object.keys(e).filter(n=>!n.startsWith("_")))t.add(i);return Array.from(t)}function Zn(s,t,e,i){let{iScale:n}=s,{key:r="r"}=this._parsing,o=new Array(i),a,l,c,h;for(a=0,l=i;ats==="x"?"y":"x";function gh(s,t,e,i){let n=s.skip?t:s,r=t,o=e.skip?t:e,a=Si(r,n),l=Si(o,r),c=a/(a+l),h=l/(a+l);c=isNaN(c)?0:c,h=isNaN(h)?0:h;let u=i*c,d=i*h;return{previous:{x:r.x-u*(o.x-n.x),y:r.y-u*(o.y-n.y)},next:{x:r.x+d*(o.x-n.x),y:r.y+d*(o.y-n.y)}}}function ph(s,t,e){let i=s.length,n,r,o,a,l,c=Le(s,0);for(let h=0;h!c.skip)),t.cubicInterpolationMode==="monotone")bh(s,n);else{let c=i?s[s.length-1]:s[0];for(r=0,o=s.length;rwindow.getComputedStyle(s,null);function _h(s,t){return Ai(s).getPropertyValue(t)}var wh=["top","right","bottom","left"];function me(s,t,e){let i={};e=e?"-"+e:"";for(let n=0;n<4;n++){let r=wh[n];i[r]=parseFloat(s[t+"-"+r+e])||0}return i.width=i.left+i.right,i.height=i.top+i.bottom,i}var Sh=(s,t,e)=>(s>0||t>0)&&(!e||!e.shadowRoot);function kh(s,t){let e=s.touches,i=e&&e.length?e[0]:s,{offsetX:n,offsetY:r}=i,o=!1,a,l;if(Sh(n,r,s.target))a=n,l=r;else{let c=t.getBoundingClientRect();a=i.clientX-c.left,l=i.clientY-c.top,o=!0}return{x:a,y:l,box:o}}function ie(s,t){if("native"in s)return s;let{canvas:e,currentDevicePixelRatio:i}=t,n=Ai(e),r=n.boxSizing==="border-box",o=me(n,"padding"),a=me(n,"border","width"),{x:l,y:c,box:h}=kh(s,e),u=o.left+(h&&a.left),d=o.top+(h&&a.top),{width:f,height:m}=t;return r&&(f-=o.width+a.width,m-=o.height+a.height),{x:Math.round((l-u)/f*e.width/i),y:Math.round((c-d)/m*e.height/i)}}function Mh(s,t,e){let i,n;if(t===void 0||e===void 0){let r=Fi(s);if(!r)t=s.clientWidth,e=s.clientHeight;else{let o=r.getBoundingClientRect(),a=Ai(r),l=me(a,"border","width"),c=me(a,"padding");t=o.width-c.width-l.width,e=o.height-c.height-l.height,i=ki(a.maxWidth,r,"clientWidth"),n=ki(a.maxHeight,r,"clientHeight")}}return{width:t,height:e,maxWidth:i||wi,maxHeight:n||wi}}var Sn=s=>Math.round(s*10)/10;function Ko(s,t,e,i){let n=Ai(s),r=me(n,"margin"),o=ki(n.maxWidth,s,"clientWidth")||wi,a=ki(n.maxHeight,s,"clientHeight")||wi,l=Mh(s,t,e),{width:c,height:h}=l;if(n.boxSizing==="content-box"){let u=me(n,"border","width"),d=me(n,"padding");c-=d.width+u.width,h-=d.height+u.height}return c=Math.max(0,c-r.width),h=Math.max(0,i?Math.floor(c/i):h-r.height),c=Sn(Math.min(c,o,l.maxWidth)),h=Sn(Math.min(h,a,l.maxHeight)),c&&!h&&(h=Sn(c/2)),{width:c,height:h}}function Gn(s,t,e){let i=t||1,n=Math.floor(s.height*i),r=Math.floor(s.width*i);s.height=n/i,s.width=r/i;let o=s.canvas;return o.style&&(e||!o.style.height&&!o.style.width)&&(o.style.height=`${s.height}px`,o.style.width=`${s.width}px`),s.currentDevicePixelRatio!==i||o.height!==n||o.width!==r?(s.currentDevicePixelRatio=i,o.height=n,o.width=r,s.ctx.setTransform(i,0,0,i,0,0),!0):!1}var Jo=function(){let s=!1;try{let t={get passive(){return s=!0,!1}};window.addEventListener("test",null,t),window.removeEventListener("test",null,t)}catch{}return s}();function Xn(s,t){let e=_h(s,t),i=e&&e.match(/^(\d+)(\.\d+)?px$/);return i?+i[1]:void 0}function Xt(s,t,e,i){return{x:s.x+e*(t.x-s.x),y:s.y+e*(t.y-s.y)}}function Qo(s,t,e,i){return{x:s.x+e*(t.x-s.x),y:i==="middle"?e<.5?s.y:t.y:i==="after"?e<1?s.y:t.y:e>0?t.y:s.y}}function ta(s,t,e,i){let n={x:s.cp2x,y:s.cp2y},r={x:t.cp1x,y:t.cp1y},o=Xt(s,n,e),a=Xt(n,r,e),l=Xt(r,t,e),c=Xt(o,a,e),h=Xt(a,l,e);return Xt(c,h,e)}var _o=new Map;function Th(s,t){t=t||{};let e=s+JSON.stringify(t),i=_o.get(e);return i||(i=new Intl.NumberFormat(s,t),_o.set(e,i)),i}function Ve(s,t,e){return Th(t,e).format(s)}var vh=function(s,t){return{x(e){return s+s+t-e},setWidth(e){t=e},textAlign(e){return e==="center"?e:e==="right"?"left":"right"},xPlus(e,i){return e-i},leftForLtr(e,i){return e-i}}},Oh=function(){return{x(s){return s},setWidth(s){},textAlign(s){return s},xPlus(s,t){return s+t},leftForLtr(s,t){return s}}};function ye(s,t,e){return s?vh(t,e):Oh()}function Kn(s,t){let e,i;(t==="ltr"||t==="rtl")&&(e=s.canvas.style,i=[e.getPropertyValue("direction"),e.getPropertyPriority("direction")],e.setProperty("direction",t,"important"),s.prevTextDirection=i)}function Jn(s,t){t!==void 0&&(delete s.prevTextDirection,s.canvas.style.setProperty("direction",t[0],t[1]))}function ea(s){return s==="angle"?{between:Re,compare:Ec,normalize:ht}:{between:At,compare:(t,e)=>t-e,normalize:t=>t}}function wo({start:s,end:t,count:e,loop:i,style:n}){return{start:s%e,end:t%e,loop:i&&(t-s+1)%e===0,style:n}}function Dh(s,t,e){let{property:i,start:n,end:r}=e,{between:o,normalize:a}=ea(i),l=t.length,{start:c,end:h,loop:u}=s,d,f;if(u){for(c+=l,h+=l,d=0,f=l;dl(n,_,y)&&a(n,_)!==0,x=()=>a(r,y)===0||l(r,_,y),S=()=>g||w(),k=()=>!g||x();for(let O=h,T=h;O<=u;++O)b=t[O%o],!b.skip&&(y=c(b[i]),y!==_&&(g=l(y,n,r),p===null&&S()&&(p=a(y,n)===0?O:T),p!==null&&k()&&(m.push(wo({start:p,end:O,loop:d,count:o,style:f})),p=null),T=O,_=y));return p!==null&&m.push(wo({start:p,end:u,loop:d,count:o,style:f})),m}function tr(s,t){let e=[],i=s.segments;for(let n=0;nn&&s[r%t].skip;)r--;return r%=t,{start:n,end:r}}function Ih(s,t,e,i){let n=s.length,r=[],o=t,a=s[t],l;for(l=t+1;l<=e;++l){let c=s[l%n];c.skip||c.stop?a.skip||(i=!1,r.push({start:t%n,end:(l-1)%n,loop:i}),t=o=c.stop?l:null):(o=l,a.skip&&(t=l)),a=c}return o!==null&&r.push({start:t%n,end:o%n,loop:i}),r}function sa(s,t){let e=s.points,i=s.options.spanGaps,n=e.length;if(!n)return[];let r=!!s._loop,{start:o,end:a}=Eh(e,n,r,i);if(i===!0)return So(s,[{start:o,end:a,loop:r}],e,t);let l=aa({chart:t,initial:e.initial,numSteps:o,currentStep:Math.min(i-e.start,o)}))}_refresh(){this._request||(this._running=!0,this._request=An.call(window,()=>{this._update(),this._request=null,this._running&&this._refresh()}))}_update(t=Date.now()){let e=0;this._charts.forEach((i,n)=>{if(!i.running||!i.items.length)return;let r=i.items,o=r.length-1,a=!1,l;for(;o>=0;--o)l=r[o],l._active?(l._total>i.duration&&(i.duration=l._total),l.tick(t),a=!0):(r[o]=r[r.length-1],r.pop());a&&(n.draw(),this._notify(n,i,t,"progress")),r.length||(i.running=!1,this._notify(n,i,t,"complete"),i.initial=!1),e+=r.length}),this._lastDate=t,e===0&&(this._running=!1)}_getAnims(t){let e=this._charts,i=e.get(t);return i||(i={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},e.set(t,i)),i}listen(t,e,i){this._getAnims(t).listeners[e].push(i)}add(t,e){!e||!e.length||this._getAnims(t).items.push(...e)}has(t){return this._getAnims(t).items.length>0}start(t){let e=this._charts.get(t);e&&(e.running=!0,e.start=Date.now(),e.duration=e.items.reduce((i,n)=>Math.max(i,n._duration),0),this._refresh())}running(t){if(!this._running)return!1;let e=this._charts.get(t);return!(!e||!e.running||!e.items.length)}stop(t){let e=this._charts.get(t);if(!e||!e.items.length)return;let i=e.items,n=i.length-1;for(;n>=0;--n)i[n].cancel();e.items=[],this._notify(t,e,Date.now(),"complete")}remove(t){return this._charts.delete(t)}},jt=new hr,ia="transparent",Ah={boolean(s,t,e){return e>.5?t:s},color(s,t,e){let i=Vn(s||ia),n=i.valid&&Vn(t||ia);return n&&n.valid?n.mix(i,e).hexString():t},number(s,t,e){return s+(t-s)*e}},ur=class{constructor(t,e,i,n){let r=e[i];n=ze([t.to,n,r,t.from]);let o=ze([t.from,r,n]);this._active=!0,this._fn=t.fn||Ah[t.type||typeof o],this._easing=Ie[t.easing]||Ie.linear,this._start=Math.floor(Date.now()+(t.delay||0)),this._duration=this._total=Math.floor(t.duration),this._loop=!!t.loop,this._target=e,this._prop=i,this._from=o,this._to=n,this._promises=void 0}active(){return this._active}update(t,e,i){if(this._active){this._notify(!1);let n=this._target[this._prop],r=i-this._start,o=this._duration-r;this._start=i,this._duration=Math.floor(Math.max(o,t.duration)),this._total+=r,this._loop=!!t.loop,this._to=ze([t.to,e,n,t.from]),this._from=ze([t.from,n,e])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(t){let e=t-this._start,i=this._duration,n=this._prop,r=this._from,o=this._loop,a=this._to,l;if(this._active=r!==a&&(o||e1?2-l:l,l=this._easing(Math.min(1,Math.max(0,l))),this._target[n]=this._fn(r,a,l)}wait(){let t=this._promises||(this._promises=[]);return new Promise((e,i)=>{t.push({res:e,rej:i})})}_notify(t){let e=t?"res":"rej",i=this._promises||[];for(let n=0;ns!=="onProgress"&&s!=="onComplete"&&s!=="fn"});L.set("animations",{colors:{type:"color",properties:Ph},numbers:{type:"number",properties:Lh}});L.describe("animations",{_fallback:"animation"});L.set("transitions",{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:"transparent"},visible:{type:"boolean",duration:0}}},hide:{animations:{colors:{to:"transparent"},visible:{type:"boolean",easing:"linear",fn:s=>s|0}}}});var Hi=class{constructor(t,e){this._chart=t,this._properties=new Map,this.configure(e)}configure(t){if(!A(t))return;let e=this._properties;Object.getOwnPropertyNames(t).forEach(i=>{let n=t[i];if(!A(n))return;let r={};for(let o of Nh)r[o]=n[o];($(n.properties)&&n.properties||[i]).forEach(o=>{(o===i||!e.has(o))&&e.set(o,r)})})}_animateOptions(t,e){let i=e.options,n=Wh(t,i);if(!n)return[];let r=this._createAnimations(n,i);return i.$shared&&Rh(t.options.$animations,i).then(()=>{t.options=i},()=>{}),r}_createAnimations(t,e){let i=this._properties,n=[],r=t.$animations||(t.$animations={}),o=Object.keys(e),a=Date.now(),l;for(l=o.length-1;l>=0;--l){let c=o[l];if(c.charAt(0)==="$")continue;if(c==="options"){n.push(...this._animateOptions(t,e));continue}let h=e[c],u=r[c],d=i.get(c);if(u)if(d&&u.active()){u.update(d,h,a);continue}else u.cancel();if(!d||!d.duration){t[c]=h;continue}r[c]=u=new ur(d,t,c,h),n.push(u)}return n}update(t,e){if(this._properties.size===0){Object.assign(t,e);return}let i=this._createAnimations(t,e);if(i.length)return jt.add(this._chart,i),!0}};function Rh(s,t){let e=[],i=Object.keys(t);for(let n=0;n0||!e&&r<0)return n.index}return null}function la(s,t){let{chart:e,_cachedMeta:i}=s,n=e._stacks||(e._stacks={}),{iScale:r,vScale:o,index:a}=i,l=r.axis,c=o.axis,h=Bh(r,o,i),u=t.length,d;for(let f=0;fe[i].axis===t).shift()}function Uh(s,t){return $t(s,{active:!1,dataset:void 0,datasetIndex:t,index:t,mode:"default",type:"dataset"})}function Yh(s,t,e){return $t(s,{active:!1,dataIndex:t,parsed:void 0,raw:void 0,element:e,index:t,mode:"default",type:"data"})}function ks(s,t){let e=s.controller.index,i=s.vScale&&s.vScale.axis;if(i){t=t||s._parsed;for(let n of t){let r=n._stacks;if(!r||r[i]===void 0||r[i][e]===void 0)return;delete r[i][e]}}}var sr=s=>s==="reset"||s==="none",ca=(s,t)=>t?s:Object.assign({},s),Zh=(s,t,e)=>s&&!t.hidden&&t._stacked&&{keys:qa(e,!0),values:null},pt=class{constructor(t,e){this.chart=t,this._ctx=t.ctx,this.index=e,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.initialize()}initialize(){let t=this._cachedMeta;this.configure(),this.linkScales(),t._stacked=oa(t.vScale,t),this.addElements()}updateIndex(t){this.index!==t&&ks(this._cachedMeta),this.index=t}linkScales(){let t=this.chart,e=this._cachedMeta,i=this.getDataset(),n=(u,d,f,m)=>u==="x"?d:u==="r"?m:f,r=e.xAxisID=I(i.xAxisID,er(t,"x")),o=e.yAxisID=I(i.yAxisID,er(t,"y")),a=e.rAxisID=I(i.rAxisID,er(t,"r")),l=e.indexAxis,c=e.iAxisID=n(l,r,o,a),h=e.vAxisID=n(l,o,r,a);e.xScale=this.getScaleForId(r),e.yScale=this.getScaleForId(o),e.rScale=this.getScaleForId(a),e.iScale=this.getScaleForId(c),e.vScale=this.getScaleForId(h)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(t){return this.chart.scales[t]}_getOtherScale(t){let e=this._cachedMeta;return t===e.iScale?e.vScale:e.iScale}reset(){this._update("reset")}_destroy(){let t=this._cachedMeta;this._data&&Cn(this._data,this),t._stacked&&ks(t)}_dataCheck(){let t=this.getDataset(),e=t.data||(t.data=[]),i=this._data;if(A(e))this._data=Hh(e);else if(i!==e){if(i){Cn(i,this);let n=this._cachedMeta;ks(n),n._parsed=[]}e&&Object.isExtensible(e)&&Lo(e,this),this._syncList=[],this._data=e}}addElements(){let t=this._cachedMeta;this._dataCheck(),this.datasetElementType&&(t.dataset=new this.datasetElementType)}buildOrUpdateElements(t){let e=this._cachedMeta,i=this.getDataset(),n=!1;this._dataCheck();let r=e._stacked;e._stacked=oa(e.vScale,e),e.stack!==i.stack&&(n=!0,ks(e),e.stack=i.stack),this._resyncElements(t),(n||r!==e._stacked)&&la(this,e._parsed)}configure(){let t=this.chart.config,e=t.datasetScopeKeys(this._type),i=t.getOptionScopes(this.getDataset(),e,!0);this.options=t.createResolver(i,this.getContext()),this._parsing=this.options.parsing,this._cachedDataOpts={}}parse(t,e){let{_cachedMeta:i,_data:n}=this,{iScale:r,_stacked:o}=i,a=r.axis,l=t===0&&e===n.length?!0:i._sorted,c=t>0&&i._parsed[t-1],h,u,d;if(this._parsing===!1)i._parsed=n,i._sorted=!0,d=n;else{$(n[t])?d=this.parseArrayData(i,n,t,e):A(n[t])?d=this.parseObjectData(i,n,t,e):d=this.parsePrimitiveData(i,n,t,e);let f=()=>u[a]===null||c&&u[a]g||u=0;--d)if(!m()){this.updateRangeFromParsed(c,t,f,l);break}}return c}getAllParsedValues(t){let e=this._cachedMeta._parsed,i=[],n,r,o;for(n=0,r=e.length;n=0&&tthis.getContext(i,n),g=c.resolveNamedOptions(d,f,m,u);return g.$shared&&(g.$shared=l,r[o]=Object.freeze(ca(g,l))),g}_resolveAnimations(t,e,i){let n=this.chart,r=this._cachedDataOpts,o=`animation-${e}`,a=r[o];if(a)return a;let l;if(n.options.animation!==!1){let h=this.chart.config,u=h.datasetAnimationScopeKeys(this._type,e),d=h.getOptionScopes(this.getDataset(),u);l=h.createResolver(d,this.getContext(t,i,e))}let c=new Hi(n,l&&l.animations);return l&&l._cacheable&&(r[o]=Object.freeze(c)),c}getSharedOptions(t){if(t.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},t))}includeOptions(t,e){return!e||sr(t)||this.chart._animationsDisabled}_getSharedOptions(t,e){let i=this.resolveDataElementOptions(t,e),n=this._sharedOptions,r=this.getSharedOptions(i),o=this.includeOptions(e,r)||r!==n;return this.updateSharedOptions(r,e,i),{sharedOptions:r,includeOptions:o}}updateElement(t,e,i,n){sr(n)?Object.assign(t,i):this._resolveAnimations(e,n).update(t,i)}updateSharedOptions(t,e,i){t&&!sr(e)&&this._resolveAnimations(void 0,e).update(t,i)}_setStyle(t,e,i,n){t.active=n;let r=this.getStyle(e,n);this._resolveAnimations(e,i,n).update(t,{options:!n&&this.getSharedOptions(r)||r})}removeHoverStyle(t,e,i){this._setStyle(t,i,"active",!1)}setHoverStyle(t,e,i){this._setStyle(t,i,"active",!0)}_removeDatasetHoverStyle(){let t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!1)}_setDatasetHoverStyle(){let t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!0)}_resyncElements(t){let e=this._data,i=this._cachedMeta.data;for(let[a,l,c]of this._syncList)this[a](l,c);this._syncList=[];let n=i.length,r=e.length,o=Math.min(r,n);o&&this.parse(0,o),r>n?this._insertElements(n,r-n,t):r{for(c.length+=e,a=c.length-1;a>=o;a--)c[a]=c[a-e]};for(l(r),a=t;an-r))}return s._cache.$bar}function Gh(s){let t=s.iScale,e=qh(t,s.type),i=t._length,n,r,o,a,l=()=>{o===32767||o===-32768||(ft(a)&&(i=Math.min(i,Math.abs(o-a)||i)),a=o)};for(n=0,r=e.length;n0?n[s-1]:null,a=sMath.abs(a)&&(l=a,c=o),t[e.axis]=c,t._custom={barStart:l,barEnd:c,start:n,end:r,min:o,max:a}}function Ga(s,t,e,i){return $(s)?Jh(s,t,e,i):t[e.axis]=e.parse(s,i),t}function ha(s,t,e,i){let n=s.iScale,r=s.vScale,o=n.getLabels(),a=n===r,l=[],c,h,u,d;for(c=e,h=e+i;c=e?1:-1)}function tu(s){let t,e,i,n,r;return s.horizontal?(t=s.base>s.x,e="left",i="right"):(t=s.basel.controller.options.grouped),r=i.options.stacked,o=[],a=l=>{let c=l.controller.getParsed(e),h=c&&c[l.vScale.axis];if(R(h)||isNaN(h))return!0};for(let l of n)if(!(e!==void 0&&a(l))&&((r===!1||o.indexOf(l.stack)===-1||r===void 0&&l.stack===void 0)&&o.push(l.stack),l.index===t))break;return o.length||o.push(void 0),o}_getStackCount(t){return this._getStacks(void 0,t).length}_getStackIndex(t,e,i){let n=this._getStacks(t,i),r=e!==void 0?n.indexOf(e):-1;return r===-1?n.length-1:r}_getRuler(){let t=this.options,e=this._cachedMeta,i=e.iScale,n=[],r,o;for(r=0,o=e.data.length;r=0;--i)e=Math.max(e,t[i].size(this.resolveDataElementOptions(i))/2);return e>0&&e}getLabelAndValue(t){let e=this._cachedMeta,{xScale:i,yScale:n}=e,r=this.getParsed(t),o=i.getLabelForValue(r.x),a=n.getLabelForValue(r.y),l=r._custom;return{label:e.label,value:"("+o+", "+a+(l?", "+l:"")+")"}}update(t){let e=this._cachedMeta.data;this.updateElements(e,0,e.length,t)}updateElements(t,e,i,n){let r=n==="reset",{iScale:o,vScale:a}=this._cachedMeta,{sharedOptions:l,includeOptions:c}=this._getSharedOptions(e,n),h=o.axis,u=a.axis;for(let d=e;dRe(_,a,l,!0)?1:Math.max(w,w*e,x,x*e),m=(_,w,x)=>Re(_,a,l,!0)?-1:Math.min(w,w*e,x,x*e),g=f(0,c,u),p=f(Z,h,d),y=m(Y,c,u),b=m(Y+Z,h,d);i=(g-y)/2,n=(p-b)/2,r=-(g+y)/2,o=-(p+b)/2}return{ratioX:i,ratioY:n,offsetX:r,offsetY:o}}var oe=class extends pt{constructor(t,e){super(t,e),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(t,e){let i=this.getDataset().data,n=this._cachedMeta;if(this._parsing===!1)n._parsed=i;else{let r=l=>+i[l];if(A(i[t])){let{key:l="value"}=this._parsing;r=c=>+Bt(i[c],l)}let o,a;for(o=t,a=t+e;o0&&!isNaN(t)?B*(Math.abs(t)/e):0}getLabelAndValue(t){let e=this._cachedMeta,i=this.chart,n=i.data.labels||[],r=Ve(e._parsed[t],i.options.locale);return{label:n[t]||"",value:r}}getMaxBorderWidth(t){let e=0,i=this.chart,n,r,o,a,l;if(!t){for(n=0,r=i.data.datasets.length;ns!=="spacing",_indexable:s=>s!=="spacing"};oe.overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(s){let t=s.data;if(t.labels.length&&t.datasets.length){let{labels:{pointStyle:e}}=s.legend.options;return t.labels.map((i,n)=>{let o=s.getDatasetMeta(0).controller.getStyle(n);return{text:i,fillStyle:o.backgroundColor,strokeStyle:o.borderColor,lineWidth:o.borderWidth,pointStyle:e,hidden:!s.getDataVisibility(n),index:n}})}return[]}},onClick(s,t,e){e.chart.toggleDataVisibility(t.index),e.chart.update()}},tooltip:{callbacks:{title(){return""},label(s){let t=s.label,e=": "+s.formattedValue;return $(t)?(t=t.slice(),t[0]+=e):t+=e,t}}}}};var Ue=class extends pt{initialize(){this.enableOptionSharing=!0,this.supportsDecimation=!0,super.initialize()}update(t){let e=this._cachedMeta,{dataset:i,data:n=[],_dataset:r}=e,o=this.chart._animationsDisabled,{start:a,count:l}=Pn(e,n,o);this._drawStart=a,this._drawCount=l,Nn(e)&&(a=0,l=n.length),i._chart=this.chart,i._datasetIndex=this.index,i._decimated=!!r._decimated,i.points=n;let c=this.resolveDatasetElementOptions(t);this.options.showLine||(c.borderWidth=0),c.segment=this.options.segment,this.updateElement(i,void 0,{animated:!o,options:c},t),this.updateElements(n,a,l,t)}updateElements(t,e,i,n){let r=n==="reset",{iScale:o,vScale:a,_stacked:l,_dataset:c}=this._cachedMeta,{sharedOptions:h,includeOptions:u}=this._getSharedOptions(e,n),d=o.axis,f=a.axis,{spanGaps:m,segment:g}=this.options,p=pe(m)?m:Number.POSITIVE_INFINITY,y=this.chart._animationsDisabled||r||n==="none",b=e>0&&this.getParsed(e-1);for(let _=e;_0&&Math.abs(x[d]-b[d])>p,g&&(S.parsed=x,S.raw=c.data[_]),u&&(S.options=h||this.resolveDataElementOptions(_,w.active?"active":n)),y||this.updateElement(w,_,S,n),b=x}}getMaxOverflow(){let t=this._cachedMeta,e=t.dataset,i=e.options&&e.options.borderWidth||0,n=t.data||[];if(!n.length)return i;let r=n[0].size(this.resolveDataElementOptions(0)),o=n[n.length-1].size(this.resolveDataElementOptions(n.length-1));return Math.max(i,r,o)/2}draw(){let t=this._cachedMeta;t.dataset.updateControlPoints(this.chart.chartArea,t.iScale.axis),super.draw()}};Ue.id="line";Ue.defaults={datasetElementType:"line",dataElementType:"point",showLine:!0,spanGaps:!1};Ue.overrides={scales:{_index_:{type:"category"},_value_:{type:"linear"}}};var Ye=class extends pt{constructor(t,e){super(t,e),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(t){let e=this._cachedMeta,i=this.chart,n=i.data.labels||[],r=Ve(e._parsed[t].r,i.options.locale);return{label:n[t]||"",value:r}}parseObjectData(t,e,i,n){return Zn.bind(this)(t,e,i,n)}update(t){let e=this._cachedMeta.data;this._updateRadius(),this.updateElements(e,0,e.length,t)}getMinMax(){let t=this._cachedMeta,e={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY};return t.data.forEach((i,n)=>{let r=this.getParsed(n).r;!isNaN(r)&&this.chart.getDataVisibility(n)&&(re.max&&(e.max=r))}),e}_updateRadius(){let t=this.chart,e=t.chartArea,i=t.options,n=Math.min(e.right-e.left,e.bottom-e.top),r=Math.max(n/2,0),o=Math.max(i.cutoutPercentage?r/100*i.cutoutPercentage:1,0),a=(r-o)/t.getVisibleDatasetCount();this.outerRadius=r-a*this.index,this.innerRadius=this.outerRadius-a}updateElements(t,e,i,n){let r=n==="reset",o=this.chart,l=o.options.animation,c=this._cachedMeta.rScale,h=c.xCenter,u=c.yCenter,d=c.getIndexAngle(0)-.5*Y,f=d,m,g=360/this.countVisibleElements();for(m=0;m{!isNaN(this.getParsed(n).r)&&this.chart.getDataVisibility(n)&&e++}),e}_computeAngle(t,e,i){return this.chart.getDataVisibility(t)?wt(this.resolveDataElementOptions(t,e).angle||i):0}};Ye.id="polarArea";Ye.defaults={dataElementType:"arc",animation:{animateRotate:!0,animateScale:!0},animations:{numbers:{type:"number",properties:["x","y","startAngle","endAngle","innerRadius","outerRadius"]}},indexAxis:"r",startAngle:0};Ye.overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(s){let t=s.data;if(t.labels.length&&t.datasets.length){let{labels:{pointStyle:e}}=s.legend.options;return t.labels.map((i,n)=>{let o=s.getDatasetMeta(0).controller.getStyle(n);return{text:i,fillStyle:o.backgroundColor,strokeStyle:o.borderColor,lineWidth:o.borderWidth,pointStyle:e,hidden:!s.getDataVisibility(n),index:n}})}return[]}},onClick(s,t,e){e.chart.toggleDataVisibility(t.index),e.chart.update()}},tooltip:{callbacks:{title(){return""},label(s){return s.chart.data.labels[s.dataIndex]+": "+s.formattedValue}}}},scales:{r:{type:"radialLinear",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}};var Is=class extends oe{};Is.id="pie";Is.defaults={cutout:0,rotation:0,circumference:360,radius:"100%"};var Ze=class extends pt{getLabelAndValue(t){let e=this._cachedMeta.vScale,i=this.getParsed(t);return{label:e.getLabels()[t],value:""+e.getLabelForValue(i[e.axis])}}parseObjectData(t,e,i,n){return Zn.bind(this)(t,e,i,n)}update(t){let e=this._cachedMeta,i=e.dataset,n=e.data||[],r=e.iScale.getLabels();if(i.points=n,t!=="resize"){let o=this.resolveDatasetElementOptions(t);this.options.showLine||(o.borderWidth=0);let a={_loop:!0,_fullLoop:r.length===n.length,options:o};this.updateElement(i,void 0,a,t)}this.updateElements(n,0,n.length,t)}updateElements(t,e,i,n){let r=this._cachedMeta.rScale,o=n==="reset";for(let a=e;a{n[r]=i[r]&&i[r].active()?i[r]._to:this[r]}),n}};yt.defaults={};yt.defaultRoutes=void 0;var Xa={values(s){return $(s)?s:""+s},numeric(s,t,e){if(s===0)return"0";let i=this.chart.options.locale,n,r=s;if(e.length>1){let c=Math.max(Math.abs(e[0].value),Math.abs(e[e.length-1].value));(c<1e-4||c>1e15)&&(n="scientific"),r=ru(s,e)}let o=gt(Math.abs(r)),a=Math.max(Math.min(-1*Math.floor(o),20),0),l={notation:n,minimumFractionDigits:a,maximumFractionDigits:a};return Object.assign(l,this.options.ticks.format),Ve(s,i,l)},logarithmic(s,t,e){if(s===0)return"0";let i=s/Math.pow(10,Math.floor(gt(s)));return i===1||i===2||i===5?Xa.numeric.call(this,s,t,e):""}};function ru(s,t){let e=t.length>3?t[2].value-t[1].value:t[1].value-t[0].value;return Math.abs(e)>=1&&s!==Math.floor(s)&&(e=s-Math.floor(s)),e}var Zi={formatters:Xa};L.set("scale",{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:"ticks",grace:0,grid:{display:!0,lineWidth:1,drawBorder:!0,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(s,t)=>t.lineWidth,tickColor:(s,t)=>t.color,offset:!1,borderDash:[],borderDashOffset:0,borderWidth:1},title:{display:!1,text:"",padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:"",padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:Zi.formatters.values,minor:{},major:{},align:"center",crossAlign:"near",showLabelBackdrop:!1,backdropColor:"rgba(255, 255, 255, 0.75)",backdropPadding:2}});L.route("scale.ticks","color","","color");L.route("scale.grid","color","","borderColor");L.route("scale.grid","borderColor","","borderColor");L.route("scale.title","color","","color");L.describe("scale",{_fallback:!1,_scriptable:s=>!s.startsWith("before")&&!s.startsWith("after")&&s!=="callback"&&s!=="parser",_indexable:s=>s!=="borderDash"&&s!=="tickBorderDash"});L.describe("scales",{_fallback:"scale"});L.describe("scale.ticks",{_scriptable:s=>s!=="backdropPadding"&&s!=="callback",_indexable:s=>s!=="backdropPadding"});function ou(s,t){let e=s.options.ticks,i=e.maxTicksLimit||au(s),n=e.major.enabled?cu(t):[],r=n.length,o=n[0],a=n[r-1],l=[];if(r>i)return hu(t,l,n,r/i),l;let c=lu(n,t,i);if(r>0){let h,u,d=r>1?Math.round((a-o)/(r-1)):null;for(Li(t,l,c,R(d)?0:o-d,o),h=0,u=r-1;hn)return l}return Math.max(n,1)}function cu(s){let t=[],e,i;for(e=0,i=s.length;es==="left"?"right":s==="right"?"left":s,fa=(s,t,e)=>t==="top"||t==="left"?s[t]+e:s[t]-e;function ma(s,t){let e=[],i=s.length/t,n=s.length,r=0;for(;ro+a)))return l}function mu(s,t){H(s,e=>{let i=e.gc,n=i.length/2,r;if(n>t){for(r=0;ri?i:e,i=n&&e>i?e:i,{min:mt(e,mt(i,e)),max:mt(i,mt(e,i))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){let t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){j(this.options.beforeUpdate,[this])}update(t,e,i){let{beginAtZero:n,grace:r,ticks:o}=this.options,a=o.sampleSize;this.beforeUpdate(),this.maxWidth=t,this.maxHeight=e,this._margins=i=Object.assign({left:0,right:0,top:0,bottom:0},i),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+i.left+i.right:this.height+i.top+i.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=Uo(this,r,n),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();let l=a=r||i<=1||!this.isHorizontal()){this.labelRotation=n;return}let h=this._getLabelSizes(),u=h.widest.width,d=h.highest.height,f=it(this.chart.width-u,0,this.maxWidth);a=t.offset?this.maxWidth/i:f/(i-1),u+6>a&&(a=f/(i-(t.offset?.5:1)),l=this.maxHeight-Ms(t.grid)-e.padding-ga(t.title,this.chart.options.font),c=Math.sqrt(u*u+d*d),o=Ti(Math.min(Math.asin(it((h.highest.height+6)/a,-1,1)),Math.asin(it(l/c,-1,1))-Math.asin(it(d/c,-1,1)))),o=Math.max(n,Math.min(r,o))),this.labelRotation=o}afterCalculateLabelRotation(){j(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){j(this.options.beforeFit,[this])}fit(){let t={width:0,height:0},{chart:e,options:{ticks:i,title:n,grid:r}}=this,o=this._isVisible(),a=this.isHorizontal();if(o){let l=ga(n,e.options.font);if(a?(t.width=this.maxWidth,t.height=Ms(r)+l):(t.height=this.maxHeight,t.width=Ms(r)+l),i.display&&this.ticks.length){let{first:c,last:h,widest:u,highest:d}=this._getLabelSizes(),f=i.padding*2,m=wt(this.labelRotation),g=Math.cos(m),p=Math.sin(m);if(a){let y=i.mirror?0:p*u.width+g*d.height;t.height=Math.min(this.maxHeight,t.height+y+f)}else{let y=i.mirror?0:g*u.width+p*d.height;t.width=Math.min(this.maxWidth,t.width+y+f)}this._calculatePadding(c,h,p,g)}}this._handleMargins(),a?(this.width=this._length=e.width-this._margins.left-this._margins.right,this.height=t.height):(this.width=t.width,this.height=this._length=e.height-this._margins.top-this._margins.bottom)}_calculatePadding(t,e,i,n){let{ticks:{align:r,padding:o},position:a}=this.options,l=this.labelRotation!==0,c=a!=="top"&&this.axis==="x";if(this.isHorizontal()){let h=this.getPixelForTick(0)-this.left,u=this.right-this.getPixelForTick(this.ticks.length-1),d=0,f=0;l?c?(d=n*t.width,f=i*e.height):(d=i*t.height,f=n*e.width):r==="start"?f=e.width:r==="end"?d=t.width:r!=="inner"&&(d=t.width/2,f=e.width/2),this.paddingLeft=Math.max((d-h+o)*this.width/(this.width-h),0),this.paddingRight=Math.max((f-u+o)*this.width/(this.width-u),0)}else{let h=e.height/2,u=t.height/2;r==="start"?(h=0,u=t.height):r==="end"&&(h=e.height,u=0),this.paddingTop=h+o,this.paddingBottom=u+o}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){j(this.options.afterFit,[this])}isHorizontal(){let{axis:t,position:e}=this.options;return e==="top"||e==="bottom"||t==="x"}isFullSize(){return this.options.fullSize}_convertTicksToLabels(t){this.beforeTickToLabelConversion(),this.generateTickLabels(t);let e,i;for(e=0,i=t.length;e({width:r[k]||0,height:o[k]||0});return{first:S(0),last:S(e-1),widest:S(w),highest:S(x),widths:r,heights:o}}getLabelForValue(t){return t}getPixelForValue(t,e){return NaN}getValueForPixel(t){}getPixelForTick(t){let e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getPixelForDecimal(t){this._reversePixels&&(t=1-t);let e=this._startPixel+t*this._length;return Io(this._alignToPixels?te(this.chart,e,0):e)}getDecimalForPixel(t){let e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){let{min:t,max:e}=this;return t<0&&e<0?e:t>0&&e>0?t:0}getContext(t){let e=this.ticks||[];if(t>=0&&ta*n?a/i:l/n:l*n0}_computeGridLineItems(t){let e=this.axis,i=this.chart,n=this.options,{grid:r,position:o}=n,a=r.offset,l=this.isHorizontal(),h=this.ticks.length+(a?1:0),u=Ms(r),d=[],f=r.setContext(this.getContext()),m=f.drawBorder?f.borderWidth:0,g=m/2,p=function(E){return te(i,E,m)},y,b,_,w,x,S,k,O,T,F,W,P;if(o==="top")y=p(this.bottom),S=this.bottom-u,O=y-g,F=p(t.top)+g,P=t.bottom;else if(o==="bottom")y=p(this.top),F=t.top,P=p(t.bottom)-g,S=y+g,O=this.top+u;else if(o==="left")y=p(this.right),x=this.right-u,k=y-g,T=p(t.left)+g,W=t.right;else if(o==="right")y=p(this.left),T=t.left,W=p(t.right)-g,x=y+g,k=this.left+u;else if(e==="x"){if(o==="center")y=p((t.top+t.bottom)/2+.5);else if(A(o)){let E=Object.keys(o)[0],tt=o[E];y=p(this.chart.scales[E].getPixelForValue(tt))}F=t.top,P=t.bottom,S=y+g,O=S+u}else if(e==="y"){if(o==="center")y=p((t.left+t.right)/2);else if(A(o)){let E=Object.keys(o)[0],tt=o[E];y=p(this.chart.scales[E].getPixelForValue(tt))}x=y-g,k=x-u,T=t.left,W=t.right}let Q=I(n.ticks.maxTicksLimit,h),ct=Math.max(1,Math.ceil(h/Q));for(b=0;br.value===t);return n>=0?e.setContext(this.getContext(n)).lineWidth:0}drawGrid(t){let e=this.options.grid,i=this.ctx,n=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(t)),r,o,a=(l,c,h)=>{!h.width||!h.color||(i.save(),i.lineWidth=h.width,i.strokeStyle=h.color,i.setLineDash(h.borderDash||[]),i.lineDashOffset=h.borderDashOffset,i.beginPath(),i.moveTo(l.x,l.y),i.lineTo(c.x,c.y),i.stroke(),i.restore())};if(e.display)for(r=0,o=n.length;r{this.draw(n)}}]:[{z:i,draw:n=>{this.drawBackground(),this.drawGrid(n),this.drawTitle()}},{z:i+1,draw:()=>{this.drawBorder()}},{z:e,draw:n=>{this.drawLabels(n)}}]}getMatchingVisibleMetas(t){let e=this.chart.getSortedVisibleDatasetMetas(),i=this.axis+"AxisID",n=[],r,o;for(r=0,o=e.length;r{let i=e.split("."),n=i.pop(),r=[s].concat(i).join("."),o=t[e].split("."),a=o.pop(),l=o.join(".");L.route(r,n,l,a)})}function wu(s){return"id"in s&&"defaults"in s}var dr=class{constructor(){this.controllers=new Be(pt,"datasets",!0),this.elements=new Be(yt,"elements"),this.plugins=new Be(Object,"plugins"),this.scales=new Be(Yt,"scales"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...t){this._each("register",t)}remove(...t){this._each("unregister",t)}addControllers(...t){this._each("register",t,this.controllers)}addElements(...t){this._each("register",t,this.elements)}addPlugins(...t){this._each("register",t,this.plugins)}addScales(...t){this._each("register",t,this.scales)}getController(t){return this._get(t,this.controllers,"controller")}getElement(t){return this._get(t,this.elements,"element")}getPlugin(t){return this._get(t,this.plugins,"plugin")}getScale(t){return this._get(t,this.scales,"scale")}removeControllers(...t){this._each("unregister",t,this.controllers)}removeElements(...t){this._each("unregister",t,this.elements)}removePlugins(...t){this._each("unregister",t,this.plugins)}removeScales(...t){this._each("unregister",t,this.scales)}_each(t,e,i){[...e].forEach(n=>{let r=i||this._getRegistryForType(n);i||r.isForType(n)||r===this.plugins&&n.id?this._exec(t,r,n):H(n,o=>{let a=i||this._getRegistryForType(o);this._exec(t,a,o)})})}_exec(t,e,i){let n=Mi(t);j(i["before"+n],[],i),e[t](i),j(i["after"+n],[],i)}_getRegistryForType(t){for(let e=0;e0&&this.getParsed(e-1);for(let w=e;w0&&Math.abs(S[f]-_[f])>y,p&&(k.parsed=S,k.raw=c.data[w]),d&&(k.options=u||this.resolveDataElementOptions(w,x.active?"active":n)),b||this.updateElement(x,w,k,n),_=S}this.updateSharedOptions(u,n,h)}getMaxOverflow(){let t=this._cachedMeta,e=t.data||[];if(!this.options.showLine){let a=0;for(let l=e.length-1;l>=0;--l)a=Math.max(a,e[l].size(this.resolveDataElementOptions(l))/2);return a>0&&a}let i=t.dataset,n=i.options&&i.options.borderWidth||0;if(!e.length)return n;let r=e[0].size(this.resolveDataElementOptions(0)),o=e[e.length-1].size(this.resolveDataElementOptions(e.length-1));return Math.max(n,r,o)/2}};qe.id="scatter";qe.defaults={datasetElementType:!1,dataElementType:"point",showLine:!1,fill:!1};qe.overrides={interaction:{mode:"point"},plugins:{tooltip:{callbacks:{title(){return""},label(s){return"("+s.label+", "+s.formattedValue+")"}}}},scales:{x:{type:"linear"},y:{type:"linear"}}};var Su=Object.freeze({__proto__:null,BarController:$e,BubbleController:je,DoughnutController:oe,LineController:Ue,PolarAreaController:Ye,PieController:Is,RadarController:Ze,ScatterController:qe});function be(){throw new Error("This method is not implemented: Check that a complete date adapter is provided.")}var Cs=class{constructor(t){this.options=t||{}}init(t){}formats(){return be()}parse(t,e){return be()}format(t,e){return be()}add(t,e,i){return be()}diff(t,e,i){return be()}startOf(t,e,i){return be()}endOf(t,e){return be()}};Cs.override=function(s){Object.assign(Cs.prototype,s)};var kr={_date:Cs};function ku(s,t,e,i){let{controller:n,data:r,_sorted:o}=s,a=n._cachedMeta.iScale;if(a&&t===a.axis&&t!=="r"&&o&&r.length){let l=a._reversePixels?Co:Ct;if(i){if(n._sharedOptions){let c=r[0],h=typeof c.getRange=="function"&&c.getRange(t);if(h){let u=l(r,t,e-h),d=l(r,t,e+h);return{lo:u.lo,hi:d.hi}}}}else return l(r,t,e)}return{lo:0,hi:r.length-1}}function Ws(s,t,e,i,n){let r=s.getSortedVisibleDatasetMetas(),o=e[t];for(let a=0,l=r.length;a{l[o](t[e],n)&&(r.push({element:l,datasetIndex:c,index:h}),a=a||l.inRange(t.x,t.y,n))}),i&&!a?[]:r}var Ou={evaluateInteractionItems:Ws,modes:{index(s,t,e,i){let n=ie(t,s),r=e.axis||"x",o=e.includeInvisible||!1,a=e.intersect?nr(s,n,r,i,o):rr(s,n,r,!1,i,o),l=[];return a.length?(s.getSortedVisibleDatasetMetas().forEach(c=>{let h=a[0].index,u=c.data[h];u&&!u.skip&&l.push({element:u,datasetIndex:c.index,index:h})}),l):[]},dataset(s,t,e,i){let n=ie(t,s),r=e.axis||"xy",o=e.includeInvisible||!1,a=e.intersect?nr(s,n,r,i,o):rr(s,n,r,!1,i,o);if(a.length>0){let l=a[0].datasetIndex,c=s.getDatasetMeta(l).data;a=[];for(let h=0;he.pos===t)}function ya(s,t){return s.filter(e=>Ka.indexOf(e.pos)===-1&&e.box.axis===t)}function vs(s,t){return s.sort((e,i)=>{let n=t?i:e,r=t?e:i;return n.weight===r.weight?n.index-r.index:n.weight-r.weight})}function Du(s){let t=[],e,i,n,r,o,a;for(e=0,i=(s||[]).length;ec.box.fullSize),!0),i=vs(Ts(t,"left"),!0),n=vs(Ts(t,"right")),r=vs(Ts(t,"top"),!0),o=vs(Ts(t,"bottom")),a=ya(t,"x"),l=ya(t,"y");return{fullSize:e,leftAndTop:i.concat(r),rightAndBottom:n.concat(l).concat(o).concat(a),chartArea:Ts(t,"chartArea"),vertical:i.concat(n).concat(l),horizontal:r.concat(o).concat(a)}}function ba(s,t,e,i){return Math.max(s[e],t[e])+Math.max(s[i],t[i])}function Ja(s,t){s.top=Math.max(s.top,t.top),s.left=Math.max(s.left,t.left),s.bottom=Math.max(s.bottom,t.bottom),s.right=Math.max(s.right,t.right)}function Fu(s,t,e,i){let{pos:n,box:r}=e,o=s.maxPadding;if(!A(n)){e.size&&(s[n]-=e.size);let u=i[e.stack]||{size:0,count:1};u.size=Math.max(u.size,e.horizontal?r.height:r.width),e.size=u.size/u.count,s[n]+=e.size}r.getPadding&&Ja(o,r.getPadding());let a=Math.max(0,t.outerWidth-ba(o,s,"left","right")),l=Math.max(0,t.outerHeight-ba(o,s,"top","bottom")),c=a!==s.w,h=l!==s.h;return s.w=a,s.h=l,e.horizontal?{same:c,other:h}:{same:h,other:c}}function Au(s){let t=s.maxPadding;function e(i){let n=Math.max(t[i]-s[i],0);return s[i]+=n,n}s.y+=e("top"),s.x+=e("left"),e("right"),e("bottom")}function Lu(s,t){let e=t.maxPadding;function i(n){let r={left:0,top:0,right:0,bottom:0};return n.forEach(o=>{r[o]=Math.max(t[o],e[o])}),r}return i(s?["left","right"]:["top","bottom"])}function Ds(s,t,e,i){let n=[],r,o,a,l,c,h;for(r=0,o=s.length,c=0;r{typeof g.beforeLayout=="function"&&g.beforeLayout()});let h=l.reduce((g,p)=>p.box.options&&p.box.options.display===!1?g:g+1,0)||1,u=Object.freeze({outerWidth:t,outerHeight:e,padding:n,availableWidth:r,availableHeight:o,vBoxMaxWidth:r/2/h,hBoxMaxHeight:o/2}),d=Object.assign({},n);Ja(d,at(i));let f=Object.assign({maxPadding:d,w:r,h:o,x:n.left,y:n.top},n),m=Iu(l.concat(c),u);Ds(a.fullSize,f,u,m),Ds(l,f,u,m),Ds(c,f,u,m)&&Ds(l,f,u,m),Au(f),xa(a.leftAndTop,f,u,m),f.x+=f.w,f.y+=f.h,xa(a.rightAndBottom,f,u,m),s.chartArea={left:f.left,top:f.top,right:f.left+f.w,bottom:f.top+f.h,height:f.h,width:f.w},H(a.chartArea,g=>{let p=g.box;Object.assign(p,s.chartArea),p.update(f.w,f.h,{left:0,top:0,right:0,bottom:0})})}},Bi=class{acquireContext(t,e){}releaseContext(t){return!1}addEventListener(t,e,i){}removeEventListener(t,e,i){}getDevicePixelRatio(){return 1}getMaximumSize(t,e,i,n){return e=Math.max(0,e||t.width),i=i||t.height,{width:e,height:Math.max(0,n?Math.floor(e/n):i)}}isAttached(t){return!0}updateConfig(t){}},fr=class extends Bi{acquireContext(t){return t&&t.getContext&&t.getContext("2d")||null}updateConfig(t){t.options.animation=!1}},Vi="$chartjs",Pu={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"},_a=s=>s===null||s==="";function Nu(s,t){let e=s.style,i=s.getAttribute("height"),n=s.getAttribute("width");if(s[Vi]={initial:{height:i,width:n,style:{display:e.display,height:e.height,width:e.width}}},e.display=e.display||"block",e.boxSizing=e.boxSizing||"border-box",_a(n)){let r=Xn(s,"width");r!==void 0&&(s.width=r)}if(_a(i))if(s.style.height==="")s.height=s.width/(t||2);else{let r=Xn(s,"height");r!==void 0&&(s.height=r)}return s}var Qa=Jo?{passive:!0}:!1;function Ru(s,t,e){s.addEventListener(t,e,Qa)}function Wu(s,t,e){s.canvas.removeEventListener(t,e,Qa)}function zu(s,t){let e=Pu[s.type]||s.type,{x:i,y:n}=ie(s,t);return{type:e,chart:t,native:s,x:i!==void 0?i:null,y:n!==void 0?n:null}}function $i(s,t){for(let e of s)if(e===t||e.contains(t))return!0}function Vu(s,t,e){let i=s.canvas,n=new MutationObserver(r=>{let o=!1;for(let a of r)o=o||$i(a.addedNodes,i),o=o&&!$i(a.removedNodes,i);o&&e()});return n.observe(document,{childList:!0,subtree:!0}),n}function Hu(s,t,e){let i=s.canvas,n=new MutationObserver(r=>{let o=!1;for(let a of r)o=o||$i(a.removedNodes,i),o=o&&!$i(a.addedNodes,i);o&&e()});return n.observe(document,{childList:!0,subtree:!0}),n}var Fs=new Map,wa=0;function tl(){let s=window.devicePixelRatio;s!==wa&&(wa=s,Fs.forEach((t,e)=>{e.currentDevicePixelRatio!==s&&t()}))}function Bu(s,t){Fs.size||window.addEventListener("resize",tl),Fs.set(s,t)}function $u(s){Fs.delete(s),Fs.size||window.removeEventListener("resize",tl)}function ju(s,t,e){let i=s.canvas,n=i&&Fi(i);if(!n)return;let r=Ln((a,l)=>{let c=n.clientWidth;e(a,l),c{let l=a[0],c=l.contentRect.width,h=l.contentRect.height;c===0&&h===0||r(c,h)});return o.observe(n),Bu(s,r),o}function or(s,t,e){e&&e.disconnect(),t==="resize"&&$u(s)}function Uu(s,t,e){let i=s.canvas,n=Ln(r=>{s.ctx!==null&&e(zu(r,s))},s,r=>{let o=r[0];return[o,o.offsetX,o.offsetY]});return Ru(i,t,n),n}var mr=class extends Bi{acquireContext(t,e){let i=t&&t.getContext&&t.getContext("2d");return i&&i.canvas===t?(Nu(t,e),i):null}releaseContext(t){let e=t.canvas;if(!e[Vi])return!1;let i=e[Vi].initial;["height","width"].forEach(r=>{let o=i[r];R(o)?e.removeAttribute(r):e.setAttribute(r,o)});let n=i.style||{};return Object.keys(n).forEach(r=>{e.style[r]=n[r]}),e.width=e.width,delete e[Vi],!0}addEventListener(t,e,i){this.removeEventListener(t,e);let n=t.$proxies||(t.$proxies={}),o={attach:Vu,detach:Hu,resize:ju}[e]||Uu;n[e]=o(t,e,i)}removeEventListener(t,e){let i=t.$proxies||(t.$proxies={}),n=i[e];if(!n)return;({attach:or,detach:or,resize:or}[e]||Wu)(t,e,n),i[e]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(t,e,i,n){return Ko(t,e,i,n)}isAttached(t){let e=Fi(t);return!!(e&&e.isConnected)}};function Yu(s){return!qn()||typeof OffscreenCanvas<"u"&&s instanceof OffscreenCanvas?fr:mr}var gr=class{constructor(){this._init=[]}notify(t,e,i,n){e==="beforeInit"&&(this._init=this._createDescriptors(t,!0),this._notify(this._init,t,"install"));let r=n?this._descriptors(t).filter(n):this._descriptors(t),o=this._notify(r,t,e,i);return e==="afterDestroy"&&(this._notify(r,t,"stop"),this._notify(this._init,t,"uninstall")),o}_notify(t,e,i,n){n=n||{};for(let r of t){let o=r.plugin,a=o[i],l=[e,n,r.options];if(j(a,l,o)===!1&&n.cancelable)return!1}return!0}invalidate(){R(this._cache)||(this._oldCache=this._cache,this._cache=void 0)}_descriptors(t){if(this._cache)return this._cache;let e=this._cache=this._createDescriptors(t);return this._notifyStateChanges(t),e}_createDescriptors(t,e){let i=t&&t.config,n=I(i.options&&i.options.plugins,{}),r=Zu(i);return n===!1&&!e?[]:Gu(t,r,n,e)}_notifyStateChanges(t){let e=this._oldCache||[],i=this._cache,n=(r,o)=>r.filter(a=>!o.some(l=>a.plugin.id===l.plugin.id));this._notify(n(e,i),t,"stop"),this._notify(n(i,e),t,"start")}};function Zu(s){let t={},e=[],i=Object.keys(Pt.plugins.items);for(let r=0;r{let l=i[a];if(!A(l))return console.error(`Invalid scale configuration for scale: ${a}`);if(l._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${a}`);let c=yr(a,l),h=Ju(c,n),u=e.scales||{};r[c]=r[c]||a,o[a]=Pe(Object.create(null),[{axis:c},l,u[c],u[h]])}),s.data.datasets.forEach(a=>{let l=a.type||s.type,c=a.indexAxis||pr(l,t),u=(Qt[l]||{}).scales||{};Object.keys(u).forEach(d=>{let f=Ku(d,c),m=a[f+"AxisID"]||r[f]||f;o[m]=o[m]||Object.create(null),Pe(o[m],[{axis:f},i[m],u[d]])})}),Object.keys(o).forEach(a=>{let l=o[a];Pe(l,[L.scales[l.type],L.scale])}),o}function el(s){let t=s.options||(s.options={});t.plugins=I(t.plugins,{}),t.scales=td(s,t)}function sl(s){return s=s||{},s.datasets=s.datasets||[],s.labels=s.labels||[],s}function ed(s){return s=s||{},s.data=sl(s.data),el(s),s}var Sa=new Map,il=new Set;function Ni(s,t){let e=Sa.get(s);return e||(e=t(),Sa.set(s,e),il.add(e)),e}var Os=(s,t,e)=>{let i=Bt(t,e);i!==void 0&&s.add(i)},br=class{constructor(t){this._config=ed(t),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(t){this._config.type=t}get data(){return this._config.data}set data(t){this._config.data=sl(t)}get options(){return this._config.options}set options(t){this._config.options=t}get plugins(){return this._config.plugins}update(){let t=this._config;this.clearCache(),el(t)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(t){return Ni(t,()=>[[`datasets.${t}`,""]])}datasetAnimationScopeKeys(t,e){return Ni(`${t}.transition.${e}`,()=>[[`datasets.${t}.transitions.${e}`,`transitions.${e}`],[`datasets.${t}`,""]])}datasetElementScopeKeys(t,e){return Ni(`${t}-${e}`,()=>[[`datasets.${t}.elements.${e}`,`datasets.${t}`,`elements.${e}`,""]])}pluginScopeKeys(t){let e=t.id,i=this.type;return Ni(`${i}-plugin-${e}`,()=>[[`plugins.${e}`,...t.additionalOptionScopes||[]]])}_cachedScopes(t,e){let i=this._scopeCache,n=i.get(t);return(!n||e)&&(n=new Map,i.set(t,n)),n}getOptionScopes(t,e,i){let{options:n,type:r}=this,o=this._cachedScopes(t,i),a=o.get(e);if(a)return a;let l=new Set;e.forEach(h=>{t&&(l.add(t),h.forEach(u=>Os(l,t,u))),h.forEach(u=>Os(l,n,u)),h.forEach(u=>Os(l,Qt[r]||{},u)),h.forEach(u=>Os(l,L,u)),h.forEach(u=>Os(l,Di,u))});let c=Array.from(l);return c.length===0&&c.push(Object.create(null)),il.has(e)&&o.set(e,c),c}chartOptionScopes(){let{options:t,type:e}=this;return[t,Qt[e]||{},L.datasets[e]||{},{type:e},L,Di]}resolveNamedOptions(t,e,i,n=[""]){let r={$shared:!0},{resolver:o,subPrefixes:a}=ka(this._resolverCache,t,n),l=o;if(id(o,e)){r.$shared=!1,i=Ht(i)?i():i;let c=this.createResolver(t,i,a);l=ge(o,i,c)}for(let c of e)r[c]=l[c];return r}createResolver(t,e,i=[""],n){let{resolver:r}=ka(this._resolverCache,t,i);return A(e)?ge(r,e,void 0,n):r}};function ka(s,t,e){let i=s.get(t);i||(i=new Map,s.set(t,i));let n=e.join(),r=i.get(n);return r||(r={resolver:Ci(t,e),subPrefixes:e.filter(a=>!a.toLowerCase().includes("hover"))},i.set(n,r)),r}var sd=s=>A(s)&&Object.getOwnPropertyNames(s).reduce((t,e)=>t||Ht(s[e]),!1);function id(s,t){let{isScriptable:e,isIndexable:i}=jn(s);for(let n of t){let r=e(n),o=i(n),a=(o||r)&&s[n];if(r&&(Ht(a)||sd(a))||o&&$(a))return!0}return!1}var nd="3.9.1",rd=["top","bottom","left","right","chartArea"];function Ma(s,t){return s==="top"||s==="bottom"||rd.indexOf(s)===-1&&t==="x"}function Ta(s,t){return function(e,i){return e[s]===i[s]?e[t]-i[t]:e[s]-i[s]}}function va(s){let t=s.chart,e=t.options.animation;t.notifyPlugins("afterRender"),j(e&&e.onComplete,[s],t)}function od(s){let t=s.chart,e=t.options.animation;j(e&&e.onProgress,[s],t)}function nl(s){return qn()&&typeof s=="string"?s=document.getElementById(s):s&&s.length&&(s=s[0]),s&&s.canvas&&(s=s.canvas),s}var ji={},rl=s=>{let t=nl(s);return Object.values(ji).filter(e=>e.canvas===t).pop()};function ad(s,t,e){let i=Object.keys(s);for(let n of i){let r=+n;if(r>=t){let o=s[n];delete s[n],(e>0||r>t)&&(s[r+e]=o)}}}function ld(s,t,e,i){return!e||s.type==="mouseout"?null:i?t:s}var xe=class{constructor(t,e){let i=this.config=new br(e),n=nl(t),r=rl(n);if(r)throw new Error("Canvas is already in use. Chart with ID '"+r.id+"' must be destroyed before the canvas with ID '"+r.canvas.id+"' can be reused.");let o=i.createResolver(i.chartOptionScopes(),this.getContext());this.platform=new(i.platform||Yu(n)),this.platform.updateConfig(i);let a=this.platform.acquireContext(n,o.aspectRatio),l=a&&a.canvas,c=l&&l.height,h=l&&l.width;if(this.id=Mo(),this.ctx=a,this.canvas=l,this.width=h,this.height=c,this._options=o,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new gr,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=Po(u=>this.update(u),o.resizeDelay||0),this._dataChanges=[],ji[this.id]=this,!a||!l){console.error("Failed to create chart: can't acquire context from the given item");return}jt.listen(this,"complete",va),jt.listen(this,"progress",od),this._initialize(),this.attached&&this.update()}get aspectRatio(){let{options:{aspectRatio:t,maintainAspectRatio:e},width:i,height:n,_aspectRatio:r}=this;return R(t)?e&&r?r:n?i/n:null:t}get data(){return this.config.data}set data(t){this.config.data=t}get options(){return this._options}set options(t){this.config.options=t}_initialize(){return this.notifyPlugins("beforeInit"),this.options.responsive?this.resize():Gn(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins("afterInit"),this}clear(){return Hn(this.canvas,this.ctx),this}stop(){return jt.stop(this),this}resize(t,e){jt.running(this)?this._resizeBeforeDraw={width:t,height:e}:this._resize(t,e)}_resize(t,e){let i=this.options,n=this.canvas,r=i.maintainAspectRatio&&this.aspectRatio,o=this.platform.getMaximumSize(n,t,e,r),a=i.devicePixelRatio||this.platform.getDevicePixelRatio(),l=this.width?"resize":"attach";this.width=o.width,this.height=o.height,this._aspectRatio=this.aspectRatio,Gn(this,a,!0)&&(this.notifyPlugins("resize",{size:o}),j(i.onResize,[this,o],this),this.attached&&this._doResize(l)&&this.render())}ensureScalesHaveIDs(){let e=this.options.scales||{};H(e,(i,n)=>{i.id=n})}buildOrUpdateScales(){let t=this.options,e=t.scales,i=this.scales,n=Object.keys(i).reduce((o,a)=>(o[a]=!1,o),{}),r=[];e&&(r=r.concat(Object.keys(e).map(o=>{let a=e[o],l=yr(o,a),c=l==="r",h=l==="x";return{options:a,dposition:c?"chartArea":h?"bottom":"left",dtype:c?"radialLinear":h?"category":"linear"}}))),H(r,o=>{let a=o.options,l=a.id,c=yr(l,a),h=I(a.type,o.dtype);(a.position===void 0||Ma(a.position,c)!==Ma(o.dposition))&&(a.position=o.dposition),n[l]=!0;let u=null;if(l in i&&i[l].type===h)u=i[l];else{let d=Pt.getScale(h);u=new d({id:l,type:h,ctx:this.ctx,chart:this}),i[u.id]=u}u.init(a,t)}),H(n,(o,a)=>{o||delete i[a]}),H(i,o=>{lt.configure(this,o,o.options),lt.addBox(this,o)})}_updateMetasets(){let t=this._metasets,e=this.data.datasets.length,i=t.length;if(t.sort((n,r)=>n.index-r.index),i>e){for(let n=e;ne.length&&delete this._stacks,t.forEach((i,n)=>{e.filter(r=>r===i._dataset).length===0&&this._destroyDatasetMeta(n)})}buildOrUpdateControllers(){let t=[],e=this.data.datasets,i,n;for(this._removeUnreferencedMetasets(),i=0,n=e.length;i{this.getDatasetMeta(e).controller.reset()},this)}reset(){this._resetElements(),this.notifyPlugins("reset")}update(t){let e=this.config;e.update();let i=this._options=e.createResolver(e.chartOptionScopes(),this.getContext()),n=this._animationsDisabled=!i.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),this.notifyPlugins("beforeUpdate",{mode:t,cancelable:!0})===!1)return;let r=this.buildOrUpdateControllers();this.notifyPlugins("beforeElementsUpdate");let o=0;for(let c=0,h=this.data.datasets.length;c{c.reset()}),this._updateDatasets(t),this.notifyPlugins("afterUpdate",{mode:t}),this._layers.sort(Ta("z","_idx"));let{_active:a,_lastEvent:l}=this;l?this._eventHandler(l,!0):a.length&&this._updateHoverStyles(a,a,!0),this.render()}_updateScales(){H(this.scales,t=>{lt.removeBox(this,t)}),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){let t=this.options,e=new Set(Object.keys(this._listeners)),i=new Set(t.events);(!vn(e,i)||!!this._responsiveListeners!==t.responsive)&&(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){let{_hiddenIndices:t}=this,e=this._getUniformDataChanges()||[];for(let{method:i,start:n,count:r}of e){let o=i==="_removeElements"?-r:r;ad(t,n,o)}}_getUniformDataChanges(){let t=this._dataChanges;if(!t||!t.length)return;this._dataChanges=[];let e=this.data.datasets.length,i=r=>new Set(t.filter(o=>o[0]===r).map((o,a)=>a+","+o.splice(1).join(","))),n=i(0);for(let r=1;rr.split(",")).map(r=>({method:r[1],start:+r[2],count:+r[3]}))}_updateLayout(t){if(this.notifyPlugins("beforeLayout",{cancelable:!0})===!1)return;lt.update(this,this.width,this.height,t);let e=this.chartArea,i=e.width<=0||e.height<=0;this._layers=[],H(this.boxes,n=>{i&&n.position==="chartArea"||(n.configure&&n.configure(),this._layers.push(...n._layers()))},this),this._layers.forEach((n,r)=>{n._idx=r}),this.notifyPlugins("afterLayout")}_updateDatasets(t){if(this.notifyPlugins("beforeDatasetsUpdate",{mode:t,cancelable:!0})!==!1){for(let e=0,i=this.data.datasets.length;e=0;--e)this._drawDataset(t[e]);this.notifyPlugins("afterDatasetsDraw")}_drawDataset(t){let e=this.ctx,i=t._clip,n=!i.disabled,r=this.chartArea,o={meta:t,index:t.index,cancelable:!0};this.notifyPlugins("beforeDatasetDraw",o)!==!1&&(n&&ws(e,{left:i.left===!1?0:r.left-i.left,right:i.right===!1?this.width:r.right+i.right,top:i.top===!1?0:r.top-i.top,bottom:i.bottom===!1?this.height:r.bottom+i.bottom}),t.controller.draw(),n&&Ss(e),o.cancelable=!1,this.notifyPlugins("afterDatasetDraw",o))}isPointInArea(t){return Ae(t,this.chartArea,this._minPadding)}getElementsAtEventForMode(t,e,i,n){let r=Ou.modes[e];return typeof r=="function"?r(this,t,i,n):[]}getDatasetMeta(t){let e=this.data.datasets[t],i=this._metasets,n=i.filter(r=>r&&r._dataset===e).pop();return n||(n={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e&&e.order||0,index:t,_dataset:e,_parsed:[],_sorted:!1},i.push(n)),n}getContext(){return this.$context||(this.$context=$t(null,{chart:this,type:"chart"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(t){let e=this.data.datasets[t];if(!e)return!1;let i=this.getDatasetMeta(t);return typeof i.hidden=="boolean"?!i.hidden:!e.hidden}setDatasetVisibility(t,e){let i=this.getDatasetMeta(t);i.hidden=!e}toggleDataVisibility(t){this._hiddenIndices[t]=!this._hiddenIndices[t]}getDataVisibility(t){return!this._hiddenIndices[t]}_updateVisibility(t,e,i){let n=i?"show":"hide",r=this.getDatasetMeta(t),o=r.controller._resolveAnimations(void 0,n);ft(e)?(r.data[e].hidden=!i,this.update()):(this.setDatasetVisibility(t,i),o.update(r,{visible:i}),this.update(a=>a.datasetIndex===t?n:void 0))}hide(t,e){this._updateVisibility(t,e,!1)}show(t,e){this._updateVisibility(t,e,!0)}_destroyDatasetMeta(t){let e=this._metasets[t];e&&e.controller&&e.controller._destroy(),delete this._metasets[t]}_stop(){let t,e;for(this.stop(),jt.remove(this),t=0,e=this.data.datasets.length;t{e.addEventListener(this,r,o),t[r]=o},n=(r,o,a)=>{r.offsetX=o,r.offsetY=a,this._eventHandler(r)};H(this.options.events,r=>i(r,n))}bindResponsiveEvents(){this._responsiveListeners||(this._responsiveListeners={});let t=this._responsiveListeners,e=this.platform,i=(l,c)=>{e.addEventListener(this,l,c),t[l]=c},n=(l,c)=>{t[l]&&(e.removeEventListener(this,l,c),delete t[l])},r=(l,c)=>{this.canvas&&this.resize(l,c)},o,a=()=>{n("attach",a),this.attached=!0,this.resize(),i("resize",r),i("detach",o)};o=()=>{this.attached=!1,n("resize",r),this._stop(),this._resize(0,0),i("attach",a)},e.isAttached(this.canvas)?a():o()}unbindEvents(){H(this._listeners,(t,e)=>{this.platform.removeEventListener(this,e,t)}),this._listeners={},H(this._responsiveListeners,(t,e)=>{this.platform.removeEventListener(this,e,t)}),this._responsiveListeners=void 0}updateHoverStyle(t,e,i){let n=i?"set":"remove",r,o,a,l;for(e==="dataset"&&(r=this.getDatasetMeta(t[0].datasetIndex),r.controller["_"+n+"DatasetHoverStyle"]()),a=0,l=t.length;a{let a=this.getDatasetMeta(r);if(!a)throw new Error("No dataset found at index "+r);return{datasetIndex:r,element:a.data[o],index:o}});!xs(i,e)&&(this._active=i,this._lastEvent=null,this._updateHoverStyles(i,e))}notifyPlugins(t,e,i){return this._plugins.notify(this,t,e,i)}_updateHoverStyles(t,e,i){let n=this.options.hover,r=(l,c)=>l.filter(h=>!c.some(u=>h.datasetIndex===u.datasetIndex&&h.index===u.index)),o=r(e,t),a=i?t:r(t,e);o.length&&this.updateHoverStyle(o,n.mode,!1),a.length&&n.mode&&this.updateHoverStyle(a,n.mode,!0)}_eventHandler(t,e){let i={event:t,replay:e,cancelable:!0,inChartArea:this.isPointInArea(t)},n=o=>(o.options.events||this.options.events).includes(t.native.type);if(this.notifyPlugins("beforeEvent",i,n)===!1)return;let r=this._handleEvent(t,e,i.inChartArea);return i.cancelable=!1,this.notifyPlugins("afterEvent",i,n),(r||i.changed)&&this.render(),this}_handleEvent(t,e,i){let{_active:n=[],options:r}=this,o=e,a=this._getActiveElements(t,n,i,o),l=Oo(t),c=ld(t,this._lastEvent,i,l);i&&(this._lastEvent=null,j(r.onHover,[t,a,this],this),l&&j(r.onClick,[t,a,this],this));let h=!xs(a,n);return(h||e)&&(this._active=a,this._updateHoverStyles(a,n,e)),this._lastEvent=c,h}_getActiveElements(t,e,i,n){if(t.type==="mouseout")return[];if(!i)return e;let r=this.options.hover;return this.getElementsAtEventForMode(t,r.mode,r,n)}},Oa=()=>H(xe.instances,s=>s._plugins.invalidate()),ne=!0;Object.defineProperties(xe,{defaults:{enumerable:ne,value:L},instances:{enumerable:ne,value:ji},overrides:{enumerable:ne,value:Qt},registry:{enumerable:ne,value:Pt},version:{enumerable:ne,value:nd},getChart:{enumerable:ne,value:rl},register:{enumerable:ne,value:(...s)=>{Pt.add(...s),Oa()}},unregister:{enumerable:ne,value:(...s)=>{Pt.remove(...s),Oa()}}});function ol(s,t,e){let{startAngle:i,pixelMargin:n,x:r,y:o,outerRadius:a,innerRadius:l}=t,c=n/a;s.beginPath(),s.arc(r,o,a,i-c,e+c),l>n?(c=n/l,s.arc(r,o,l,e+c,i-c,!0)):s.arc(r,o,n,e+Z,i-Z),s.closePath(),s.clip()}function cd(s){return Ii(s,["outerStart","outerEnd","innerStart","innerEnd"])}function hd(s,t,e,i){let n=cd(s.options.borderRadius),r=(e-t)/2,o=Math.min(r,i*t/2),a=l=>{let c=(e-Math.min(r,l))*i/2;return it(l,0,Math.min(r,c))};return{outerStart:a(n.outerStart),outerEnd:a(n.outerEnd),innerStart:it(n.innerStart,0,o),innerEnd:it(n.innerEnd,0,o)}}function He(s,t,e,i){return{x:e+s*Math.cos(t),y:i+s*Math.sin(t)}}function xr(s,t,e,i,n,r){let{x:o,y:a,startAngle:l,pixelMargin:c,innerRadius:h}=t,u=Math.max(t.outerRadius+i+e-c,0),d=h>0?h+i+e+c:0,f=0,m=n-l;if(i){let E=h>0?h-i:0,tt=u>0?u-i:0,J=(E+tt)/2,fe=J!==0?m*J/(J+i):m;f=(m-fe)/2}let g=Math.max(.001,m*u-e/Y)/u,p=(m-g)/2,y=l+p+f,b=n-p-f,{outerStart:_,outerEnd:w,innerStart:x,innerEnd:S}=hd(t,d,u,b-y),k=u-_,O=u-w,T=y+_/k,F=b-w/O,W=d+x,P=d+S,Q=y+x/W,ct=b-S/P;if(s.beginPath(),r){if(s.arc(o,a,u,T,F),w>0){let J=He(O,F,o,a);s.arc(J.x,J.y,w,F,b+Z)}let E=He(P,b,o,a);if(s.lineTo(E.x,E.y),S>0){let J=He(P,ct,o,a);s.arc(J.x,J.y,S,b+Z,ct+Math.PI)}if(s.arc(o,a,d,b-S/d,y+x/d,!0),x>0){let J=He(W,Q,o,a);s.arc(J.x,J.y,x,Q+Math.PI,y-Z)}let tt=He(k,y,o,a);if(s.lineTo(tt.x,tt.y),_>0){let J=He(k,T,o,a);s.arc(J.x,J.y,_,y-Z,T)}}else{s.moveTo(o,a);let E=Math.cos(T)*u+o,tt=Math.sin(T)*u+a;s.lineTo(E,tt);let J=Math.cos(F)*u+o,fe=Math.sin(F)*u+a;s.lineTo(J,fe)}s.closePath()}function ud(s,t,e,i,n){let{fullCircles:r,startAngle:o,circumference:a}=t,l=t.endAngle;if(r){xr(s,t,e,i,o+B,n);for(let c=0;c=B||Re(r,a,l),g=At(o,c+d,h+d);return m&&g}getCenterPoint(t){let{x:e,y:i,startAngle:n,endAngle:r,innerRadius:o,outerRadius:a}=this.getProps(["x","y","startAngle","endAngle","innerRadius","outerRadius","circumference"],t),{offset:l,spacing:c}=this.options,h=(n+r)/2,u=(o+a+c+l)/2;return{x:e+Math.cos(h)*u,y:i+Math.sin(h)*u}}tooltipPosition(t){return this.getCenterPoint(t)}draw(t){let{options:e,circumference:i}=this,n=(e.offset||0)/2,r=(e.spacing||0)/2,o=e.circular;if(this.pixelMargin=e.borderAlign==="inner"?.33:0,this.fullCircles=i>B?Math.floor(i/B):0,i===0||this.innerRadius<0||this.outerRadius<0)return;t.save();let a=0;if(n){a=n/2;let c=(this.startAngle+this.endAngle)/2;t.translate(Math.cos(c)*a,Math.sin(c)*a),this.circumference>=Y&&(a=n)}t.fillStyle=e.backgroundColor,t.strokeStyle=e.borderColor;let l=ud(t,this,a,r,o);fd(t,this,a,r,l,o),t.restore()}};Ge.id="arc";Ge.defaults={borderAlign:"center",borderColor:"#fff",borderJoinStyle:void 0,borderRadius:0,borderWidth:2,offset:0,spacing:0,angle:void 0,circular:!0};Ge.defaultRoutes={backgroundColor:"backgroundColor"};function al(s,t,e=t){s.lineCap=I(e.borderCapStyle,t.borderCapStyle),s.setLineDash(I(e.borderDash,t.borderDash)),s.lineDashOffset=I(e.borderDashOffset,t.borderDashOffset),s.lineJoin=I(e.borderJoinStyle,t.borderJoinStyle),s.lineWidth=I(e.borderWidth,t.borderWidth),s.strokeStyle=I(e.borderColor,t.borderColor)}function md(s,t,e){s.lineTo(e.x,e.y)}function gd(s){return s.stepped?$o:s.tension||s.cubicInterpolationMode==="monotone"?jo:md}function ll(s,t,e={}){let i=s.length,{start:n=0,end:r=i-1}=e,{start:o,end:a}=t,l=Math.max(n,o),c=Math.min(r,a),h=na&&r>a;return{count:i,start:l,loop:t.loop,ilen:c(o+(c?a-w:w))%r,_=()=>{g!==p&&(s.lineTo(h,p),s.lineTo(h,g),s.lineTo(h,y))};for(l&&(f=n[b(0)],s.moveTo(f.x,f.y)),d=0;d<=a;++d){if(f=n[b(d)],f.skip)continue;let w=f.x,x=f.y,S=w|0;S===m?(xp&&(p=x),h=(u*h+w)/++u):(_(),s.lineTo(w,x),m=S,u=0,g=p=x),y=x}_()}function _r(s){let t=s.options,e=t.borderDash&&t.borderDash.length;return!s._decimated&&!s._loop&&!t.tension&&t.cubicInterpolationMode!=="monotone"&&!t.stepped&&!e?yd:pd}function bd(s){return s.stepped?Qo:s.tension||s.cubicInterpolationMode==="monotone"?ta:Xt}function xd(s,t,e,i){let n=t._path;n||(n=t._path=new Path2D,t.path(n,e,i)&&n.closePath()),al(s,t.options),s.stroke(n)}function _d(s,t,e,i){let{segments:n,options:r}=t,o=_r(t);for(let a of n)al(s,r,a.style),s.beginPath(),o(s,t,a,{start:e,end:e+i-1})&&s.closePath(),s.stroke()}var wd=typeof Path2D=="function";function Sd(s,t,e,i){wd&&!t.options.segment?xd(s,t,e,i):_d(s,t,e,i)}var Nt=class extends yt{constructor(t){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,t&&Object.assign(this,t)}updateControlPoints(t,e){let i=this.options;if((i.tension||i.cubicInterpolationMode==="monotone")&&!i.stepped&&!this._pointsUpdated){let n=i.spanGaps?this._loop:this._fullLoop;Xo(this._points,i,t,n,e),this._pointsUpdated=!0}}set points(t){this._points=t,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=sa(this,this.options.segment))}first(){let t=this.segments,e=this.points;return t.length&&e[t[0].start]}last(){let t=this.segments,e=this.points,i=t.length;return i&&e[t[i-1].end]}interpolate(t,e){let i=this.options,n=t[e],r=this.points,o=tr(this,{property:e,start:n,end:n});if(!o.length)return;let a=[],l=bd(i),c,h;for(c=0,h=o.length;cs!=="borderDash"&&s!=="fill"};function Da(s,t,e,i){let n=s.options,{[e]:r}=s.getProps([e],i);return Math.abs(t-r)=e)return s.slice(t,t+e);let o=[],a=(e-2)/(r-2),l=0,c=t+e-1,h=t,u,d,f,m,g;for(o[l++]=s[h],u=0;uf&&(f=m,d=s[b],g=b);o[l++]=d,h=g}return o[l++]=s[c],o}function Id(s,t,e,i){let n=0,r=0,o,a,l,c,h,u,d,f,m,g,p=[],y=t+e-1,b=s[t].x,w=s[y].x-b;for(o=t;og&&(g=c,d=o),n=(r*n+a.x)/++r;else{let S=o-1;if(!R(u)&&!R(d)){let k=Math.min(u,d),O=Math.max(u,d);k!==f&&k!==S&&p.push({...s[k],x:n}),O!==f&&O!==S&&p.push({...s[O],x:n})}o>0&&S!==f&&p.push(s[S]),p.push(a),h=x,r=0,m=g=c,u=d=f=o}}return p}function hl(s){if(s._decimated){let t=s._data;delete s._decimated,delete s._data,Object.defineProperty(s,"data",{value:t})}}function Ea(s){s.data.datasets.forEach(t=>{hl(t)})}function Cd(s,t){let e=t.length,i=0,n,{iScale:r}=s,{min:o,max:a,minDefined:l,maxDefined:c}=r.getUserBounds();return l&&(i=it(Ct(t,r.axis,o).lo,0,e-1)),c?n=it(Ct(t,r.axis,a).hi+1,i,e)-i:n=e-i,{start:i,count:n}}var Fd={id:"decimation",defaults:{algorithm:"min-max",enabled:!1},beforeElementsUpdate:(s,t,e)=>{if(!e.enabled){Ea(s);return}let i=s.width;s.data.datasets.forEach((n,r)=>{let{_data:o,indexAxis:a}=n,l=s.getDatasetMeta(r),c=o||n.data;if(ze([a,s.options.indexAxis])==="y"||!l.controller.supportsDecimation)return;let h=s.scales[l.xAxisID];if(h.type!=="linear"&&h.type!=="time"||s.options.parsing)return;let{start:u,count:d}=Cd(l,c),f=e.threshold||4*i;if(d<=f){hl(n);return}R(o)&&(n._data=c,delete n.data,Object.defineProperty(n,"data",{configurable:!0,enumerable:!0,get:function(){return this._decimated},set:function(g){this._data=g}}));let m;switch(e.algorithm){case"lttb":m=Ed(c,u,d,i,e);break;case"min-max":m=Id(c,u,d,i);break;default:throw new Error(`Unsupported decimation algorithm '${e.algorithm}'`)}n._decimated=m})},destroy(s){Ea(s)}};function Ad(s,t,e){let i=s.segments,n=s.points,r=t.points,o=[];for(let a of i){let{start:l,end:c}=a;c=Mr(l,c,n);let h=wr(e,n[l],n[c],a.loop);if(!t.segments){o.push({source:a,target:h,start:n[l],end:n[c]});continue}let u=tr(t,h);for(let d of u){let f=wr(e,r[d.start],r[d.end],d.loop),m=Qn(a,n,f);for(let g of m)o.push({source:g,target:d,start:{[e]:Ia(h,f,"start",Math.max)},end:{[e]:Ia(h,f,"end",Math.min)}})}}return o}function wr(s,t,e,i){if(i)return;let n=t[s],r=e[s];return s==="angle"&&(n=ht(n),r=ht(r)),{property:s,start:n,end:r}}function Ld(s,t){let{x:e=null,y:i=null}=s||{},n=t.points,r=[];return t.segments.forEach(({start:o,end:a})=>{a=Mr(o,a,n);let l=n[o],c=n[a];i!==null?(r.push({x:l.x,y:i}),r.push({x:c.x,y:i})):e!==null&&(r.push({x:e,y:l.y}),r.push({x:e,y:c.y}))}),r}function Mr(s,t,e){for(;t>s;t--){let i=e[t];if(!isNaN(i.x)&&!isNaN(i.y))break}return t}function Ia(s,t,e,i){return s&&t?i(s[e],t[e]):s?s[e]:t?t[e]:0}function ul(s,t){let e=[],i=!1;return $(s)?(i=!0,e=s):e=Ld(s,t),e.length?new Nt({points:e,options:{tension:0},_loop:i,_fullLoop:i}):null}function Ca(s){return s&&s.fill!==!1}function Pd(s,t,e){let n=s[t].fill,r=[t],o;if(!e)return n;for(;n!==!1&&r.indexOf(n)===-1;){if(!K(n))return n;if(o=s[n],!o)return!1;if(o.visible)return n;r.push(n),n=o.fill}return!1}function Nd(s,t,e){let i=Vd(s);if(A(i))return isNaN(i.value)?!1:i;let n=parseFloat(i);return K(n)&&Math.floor(n)===n?Rd(i[0],t,n,e):["origin","start","end","stack","shape"].indexOf(i)>=0&&i}function Rd(s,t,e,i){return(s==="-"||s==="+")&&(e=t+e),e===t||e<0||e>=i?!1:e}function Wd(s,t){let e=null;return s==="start"?e=t.bottom:s==="end"?e=t.top:A(s)?e=t.getPixelForValue(s.value):t.getBasePixel&&(e=t.getBasePixel()),e}function zd(s,t,e){let i;return s==="start"?i=e:s==="end"?i=t.options.reverse?t.min:t.max:A(s)?i=s.value:i=t.getBaseValue(),i}function Vd(s){let t=s.options,e=t.fill,i=I(e&&e.target,e);return i===void 0&&(i=!!t.backgroundColor),i===!1||i===null?!1:i===!0?"origin":i}function Hd(s){let{scale:t,index:e,line:i}=s,n=[],r=i.segments,o=i.points,a=Bd(t,e);a.push(ul({x:null,y:t.bottom},i));for(let l=0;l=0;--o){let a=n[o].$filler;a&&(a.line.updateControlPoints(r,a.axis),i&&a.fill&&cr(s.ctx,a,r))}},beforeDatasetsDraw(s,t,e){if(e.drawTime!=="beforeDatasetsDraw")return;let i=s.getSortedVisibleDatasetMetas();for(let n=i.length-1;n>=0;--n){let r=i[n].$filler;Ca(r)&&cr(s.ctx,r,s.chartArea)}},beforeDatasetDraw(s,t,e){let i=t.meta.$filler;!Ca(i)||e.drawTime!=="beforeDatasetDraw"||cr(s.ctx,i,s.chartArea)},defaults:{propagate:!0,drawTime:"beforeDatasetDraw"}},Pa=(s,t)=>{let{boxHeight:e=t,boxWidth:i=t}=s;return s.usePointStyle&&(e=Math.min(e,t),i=s.pointStyleWidth||Math.min(i,t)),{boxWidth:i,boxHeight:e,itemHeight:Math.max(t,e)}},Qd=(s,t)=>s!==null&&t!==null&&s.datasetIndex===t.datasetIndex&&s.index===t.index,Yi=class extends yt{constructor(t){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e,i){this.maxWidth=t,this.maxHeight=e,this._margins=i,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){let t=this.options.labels||{},e=j(t.generateLabels,[this.chart],this)||[];t.filter&&(e=e.filter(i=>t.filter(i,this.chart.data))),t.sort&&(e=e.sort((i,n)=>t.sort(i,n,this.chart.data))),this.options.reverse&&e.reverse(),this.legendItems=e}fit(){let{options:t,ctx:e}=this;if(!t.display){this.width=this.height=0;return}let i=t.labels,n=et(i.font),r=n.size,o=this._computeTitleHeight(),{boxWidth:a,itemHeight:l}=Pa(i,r),c,h;e.font=n.string,this.isHorizontal()?(c=this.maxWidth,h=this._fitRows(o,r,a,l)+10):(h=this.maxHeight,c=this._fitCols(o,r,a,l)+10),this.width=Math.min(c,t.maxWidth||this.maxWidth),this.height=Math.min(h,t.maxHeight||this.maxHeight)}_fitRows(t,e,i,n){let{ctx:r,maxWidth:o,options:{labels:{padding:a}}}=this,l=this.legendHitBoxes=[],c=this.lineWidths=[0],h=n+a,u=t;r.textAlign="left",r.textBaseline="middle";let d=-1,f=-h;return this.legendItems.forEach((m,g)=>{let p=i+e/2+r.measureText(m.text).width;(g===0||c[c.length-1]+p+2*a>o)&&(u+=h,c[c.length-(g>0?0:1)]=0,f+=h,d++),l[g]={left:0,top:f,row:d,width:p,height:n},c[c.length-1]+=p+a}),u}_fitCols(t,e,i,n){let{ctx:r,maxHeight:o,options:{labels:{padding:a}}}=this,l=this.legendHitBoxes=[],c=this.columnSizes=[],h=o-t,u=a,d=0,f=0,m=0,g=0;return this.legendItems.forEach((p,y)=>{let b=i+e/2+r.measureText(p.text).width;y>0&&f+n+2*a>h&&(u+=d+a,c.push({width:d,height:f}),m+=d+a,g++,d=f=0),l[y]={left:m,top:f,col:g,width:b,height:n},d=Math.max(d,b),f+=n+a}),u+=d,c.push({width:d,height:f}),u}adjustHitBoxes(){if(!this.options.display)return;let t=this._computeTitleHeight(),{legendHitBoxes:e,options:{align:i,labels:{padding:n},rtl:r}}=this,o=ye(r,this.left,this.width);if(this.isHorizontal()){let a=0,l=ot(i,this.left+n,this.right-this.lineWidths[a]);for(let c of e)a!==c.row&&(a=c.row,l=ot(i,this.left+n,this.right-this.lineWidths[a])),c.top+=this.top+t+n,c.left=o.leftForLtr(o.x(l),c.width),l+=c.width+n}else{let a=0,l=ot(i,this.top+t+n,this.bottom-this.columnSizes[a].height);for(let c of e)c.col!==a&&(a=c.col,l=ot(i,this.top+t+n,this.bottom-this.columnSizes[a].height)),c.top=l,c.left+=this.left+n,c.left=o.leftForLtr(o.x(c.left),c.width),l+=c.height+n}}isHorizontal(){return this.options.position==="top"||this.options.position==="bottom"}draw(){if(this.options.display){let t=this.ctx;ws(t,this),this._draw(),Ss(t)}}_draw(){let{options:t,columnSizes:e,lineWidths:i,ctx:n}=this,{align:r,labels:o}=t,a=L.color,l=ye(t.rtl,this.left,this.width),c=et(o.font),{color:h,padding:u}=o,d=c.size,f=d/2,m;this.drawTitle(),n.textAlign=l.textAlign("left"),n.textBaseline="middle",n.lineWidth=.5,n.font=c.string;let{boxWidth:g,boxHeight:p,itemHeight:y}=Pa(o,d),b=function(k,O,T){if(isNaN(g)||g<=0||isNaN(p)||p<0)return;n.save();let F=I(T.lineWidth,1);if(n.fillStyle=I(T.fillStyle,a),n.lineCap=I(T.lineCap,"butt"),n.lineDashOffset=I(T.lineDashOffset,0),n.lineJoin=I(T.lineJoin,"miter"),n.lineWidth=F,n.strokeStyle=I(T.strokeStyle,a),n.setLineDash(I(T.lineDash,[])),o.usePointStyle){let W={radius:p*Math.SQRT2/2,pointStyle:T.pointStyle,rotation:T.rotation,borderWidth:F},P=l.xPlus(k,g/2),Q=O+f;Bn(n,W,P,Q,o.pointStyleWidth&&g)}else{let W=O+Math.max((d-p)/2,0),P=l.leftForLtr(k,g),Q=se(T.borderRadius);n.beginPath(),Object.values(Q).some(ct=>ct!==0)?We(n,{x:P,y:W,w:g,h:p,radius:Q}):n.rect(P,W,g,p),n.fill(),F!==0&&n.stroke()}n.restore()},_=function(k,O,T){ee(n,T.text,k,O+y/2,c,{strikethrough:T.hidden,textAlign:l.textAlign(T.textAlign)})},w=this.isHorizontal(),x=this._computeTitleHeight();w?m={x:ot(r,this.left+u,this.right-i[0]),y:this.top+u+x,line:0}:m={x:this.left+u,y:ot(r,this.top+x+u,this.bottom-e[0].height),line:0},Kn(this.ctx,t.textDirection);let S=y+u;this.legendItems.forEach((k,O)=>{n.strokeStyle=k.fontColor||h,n.fillStyle=k.fontColor||h;let T=n.measureText(k.text).width,F=l.textAlign(k.textAlign||(k.textAlign=o.textAlign)),W=g+f+T,P=m.x,Q=m.y;l.setWidth(this.width),w?O>0&&P+W+u>this.right&&(Q=m.y+=S,m.line++,P=m.x=ot(r,this.left+u,this.right-i[m.line])):O>0&&Q+S>this.bottom&&(P=m.x=P+e[m.line].width+u,m.line++,Q=m.y=ot(r,this.top+x+u,this.bottom-e[m.line].height));let ct=l.x(P);b(ct,Q,k),P=No(F,P+g+f,w?P+W:this.right,t.rtl),_(l.x(P),Q,k),w?m.x+=W+u:m.y+=S}),Jn(this.ctx,t.textDirection)}drawTitle(){let t=this.options,e=t.title,i=et(e.font),n=at(e.padding);if(!e.display)return;let r=ye(t.rtl,this.left,this.width),o=this.ctx,a=e.position,l=i.size/2,c=n.top+l,h,u=this.left,d=this.width;if(this.isHorizontal())d=Math.max(...this.lineWidths),h=this.top+c,u=ot(t.align,u,this.right-d);else{let m=this.columnSizes.reduce((g,p)=>Math.max(g,p.height),0);h=c+ot(t.align,this.top,this.bottom-m-t.labels.padding-this._computeTitleHeight())}let f=ot(a,u,u+d);o.textAlign=r.textAlign(Oi(a)),o.textBaseline="middle",o.strokeStyle=e.color,o.fillStyle=e.color,o.font=i.string,ee(o,e.text,f,h,i)}_computeTitleHeight(){let t=this.options.title,e=et(t.font),i=at(t.padding);return t.display?e.lineHeight+i.height:0}_getLegendItemAt(t,e){let i,n,r;if(At(t,this.left,this.right)&&At(e,this.top,this.bottom)){for(r=this.legendHitBoxes,i=0;is.chart.options.color,boxWidth:40,padding:10,generateLabels(s){let t=s.data.datasets,{labels:{usePointStyle:e,pointStyle:i,textAlign:n,color:r}}=s.legend.options;return s._getSortedDatasetMetas().map(o=>{let a=o.controller.getStyle(e?0:void 0),l=at(a.borderWidth);return{text:t[o.index].label,fillStyle:a.backgroundColor,fontColor:r,hidden:!o.visible,lineCap:a.borderCapStyle,lineDash:a.borderDash,lineDashOffset:a.borderDashOffset,lineJoin:a.borderJoinStyle,lineWidth:(l.width+l.height)/4,strokeStyle:a.borderColor,pointStyle:i||a.pointStyle,rotation:a.rotation,textAlign:n||a.textAlign,borderRadius:0,datasetIndex:o.index}},this)}},title:{color:s=>s.chart.options.color,display:!1,position:"center",text:""}},descriptors:{_scriptable:s=>!s.startsWith("on"),labels:{_scriptable:s=>!["generateLabels","filter","sort"].includes(s)}}},As=class extends yt{constructor(t){super(),this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this._padding=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e){let i=this.options;if(this.left=0,this.top=0,!i.display){this.width=this.height=this.right=this.bottom=0;return}this.width=this.right=t,this.height=this.bottom=e;let n=$(i.text)?i.text.length:1;this._padding=at(i.padding);let r=n*et(i.font).lineHeight+this._padding.height;this.isHorizontal()?this.height=r:this.width=r}isHorizontal(){let t=this.options.position;return t==="top"||t==="bottom"}_drawArgs(t){let{top:e,left:i,bottom:n,right:r,options:o}=this,a=o.align,l=0,c,h,u;return this.isHorizontal()?(h=ot(a,i,r),u=e+t,c=r-i):(o.position==="left"?(h=i+t,u=ot(a,n,e),l=Y*-.5):(h=r-t,u=ot(a,e,n),l=Y*.5),c=n-e),{titleX:h,titleY:u,maxWidth:c,rotation:l}}draw(){let t=this.ctx,e=this.options;if(!e.display)return;let i=et(e.font),r=i.lineHeight/2+this._padding.top,{titleX:o,titleY:a,maxWidth:l,rotation:c}=this._drawArgs(r);ee(t,e.text,0,0,i,{color:e.color,maxWidth:l,rotation:c,textAlign:Oi(e.align),textBaseline:"middle",translation:[o,a]})}};function sf(s,t){let e=new As({ctx:s.ctx,options:t,chart:s});lt.configure(s,e,t),lt.addBox(s,e),s.titleBlock=e}var nf={id:"title",_element:As,start(s,t,e){sf(s,e)},stop(s){let t=s.titleBlock;lt.removeBox(s,t),delete s.titleBlock},beforeUpdate(s,t,e){let i=s.titleBlock;lt.configure(s,i,e),i.options=e},defaults:{align:"center",display:!1,font:{weight:"bold"},fullSize:!0,padding:10,position:"top",text:"",weight:2e3},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}},Ri=new WeakMap,rf={id:"subtitle",start(s,t,e){let i=new As({ctx:s.ctx,options:e,chart:s});lt.configure(s,i,e),lt.addBox(s,i),Ri.set(s,i)},stop(s){lt.removeBox(s,Ri.get(s)),Ri.delete(s)},beforeUpdate(s,t,e){let i=Ri.get(s);lt.configure(s,i,e),i.options=e},defaults:{align:"center",display:!1,font:{weight:"normal"},fullSize:!0,padding:0,position:"top",text:"",weight:1500},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}},Es={average(s){if(!s.length)return!1;let t,e,i=0,n=0,r=0;for(t=0,e=s.length;t-1?s.split(` +`):s}function of(s,t){let{element:e,datasetIndex:i,index:n}=t,r=s.getDatasetMeta(i).controller,{label:o,value:a}=r.getLabelAndValue(n);return{chart:s,label:o,parsed:r.getParsed(n),raw:s.data.datasets[i].data[n],formattedValue:a,dataset:r.getDataset(),dataIndex:n,datasetIndex:i,element:e}}function Na(s,t){let e=s.chart.ctx,{body:i,footer:n,title:r}=s,{boxWidth:o,boxHeight:a}=t,l=et(t.bodyFont),c=et(t.titleFont),h=et(t.footerFont),u=r.length,d=n.length,f=i.length,m=at(t.padding),g=m.height,p=0,y=i.reduce((w,x)=>w+x.before.length+x.lines.length+x.after.length,0);if(y+=s.beforeBody.length+s.afterBody.length,u&&(g+=u*c.lineHeight+(u-1)*t.titleSpacing+t.titleMarginBottom),y){let w=t.displayColors?Math.max(a,l.lineHeight):l.lineHeight;g+=f*w+(y-f)*l.lineHeight+(y-1)*t.bodySpacing}d&&(g+=t.footerMarginTop+d*h.lineHeight+(d-1)*t.footerSpacing);let b=0,_=function(w){p=Math.max(p,e.measureText(w).width+b)};return e.save(),e.font=c.string,H(s.title,_),e.font=l.string,H(s.beforeBody.concat(s.afterBody),_),b=t.displayColors?o+2+t.boxPadding:0,H(i,w=>{H(w.before,_),H(w.lines,_),H(w.after,_)}),b=0,e.font=h.string,H(s.footer,_),e.restore(),p+=m.width,{width:p,height:g}}function af(s,t){let{y:e,height:i}=t;return es.height-i/2?"bottom":"center"}function lf(s,t,e,i){let{x:n,width:r}=i,o=e.caretSize+e.caretPadding;if(s==="left"&&n+r+o>t.width||s==="right"&&n-r-o<0)return!0}function cf(s,t,e,i){let{x:n,width:r}=e,{width:o,chartArea:{left:a,right:l}}=s,c="center";return i==="center"?c=n<=(a+l)/2?"left":"right":n<=r/2?c="left":n>=o-r/2&&(c="right"),lf(c,s,t,e)&&(c="center"),c}function Ra(s,t,e){let i=e.yAlign||t.yAlign||af(s,e);return{xAlign:e.xAlign||t.xAlign||cf(s,t,e,i),yAlign:i}}function hf(s,t){let{x:e,width:i}=s;return t==="right"?e-=i:t==="center"&&(e-=i/2),e}function uf(s,t,e){let{y:i,height:n}=s;return t==="top"?i+=e:t==="bottom"?i-=n+e:i-=n/2,i}function Wa(s,t,e,i){let{caretSize:n,caretPadding:r,cornerRadius:o}=s,{xAlign:a,yAlign:l}=e,c=n+r,{topLeft:h,topRight:u,bottomLeft:d,bottomRight:f}=se(o),m=hf(t,a),g=uf(t,l,c);return l==="center"?a==="left"?m+=c:a==="right"&&(m-=c):a==="left"?m-=Math.max(h,d)+n:a==="right"&&(m+=Math.max(u,f)+n),{x:it(m,0,i.width-t.width),y:it(g,0,i.height-t.height)}}function Wi(s,t,e){let i=at(e.padding);return t==="center"?s.x+s.width/2:t==="right"?s.x+s.width-i.right:s.x+i.left}function za(s){return Lt([],Ut(s))}function df(s,t,e){return $t(s,{tooltip:t,tooltipItems:e,type:"tooltip"})}function Va(s,t){let e=t&&t.dataset&&t.dataset.tooltip&&t.dataset.tooltip.callbacks;return e?s.override(e):s}var Ls=class extends yt{constructor(t){super(),this.opacity=0,this._active=[],this._eventPosition=void 0,this._size=void 0,this._cachedAnimations=void 0,this._tooltipItems=[],this.$animations=void 0,this.$context=void 0,this.chart=t.chart||t._chart,this._chart=this.chart,this.options=t.options,this.dataPoints=void 0,this.title=void 0,this.beforeBody=void 0,this.body=void 0,this.afterBody=void 0,this.footer=void 0,this.xAlign=void 0,this.yAlign=void 0,this.x=void 0,this.y=void 0,this.height=void 0,this.width=void 0,this.caretX=void 0,this.caretY=void 0,this.labelColors=void 0,this.labelPointStyles=void 0,this.labelTextColors=void 0}initialize(t){this.options=t,this._cachedAnimations=void 0,this.$context=void 0}_resolveAnimations(){let t=this._cachedAnimations;if(t)return t;let e=this.chart,i=this.options.setContext(this.getContext()),n=i.enabled&&e.options.animation&&i.animations,r=new Hi(this.chart,n);return n._cacheable&&(this._cachedAnimations=Object.freeze(r)),r}getContext(){return this.$context||(this.$context=df(this.chart.getContext(),this,this._tooltipItems))}getTitle(t,e){let{callbacks:i}=e,n=i.beforeTitle.apply(this,[t]),r=i.title.apply(this,[t]),o=i.afterTitle.apply(this,[t]),a=[];return a=Lt(a,Ut(n)),a=Lt(a,Ut(r)),a=Lt(a,Ut(o)),a}getBeforeBody(t,e){return za(e.callbacks.beforeBody.apply(this,[t]))}getBody(t,e){let{callbacks:i}=e,n=[];return H(t,r=>{let o={before:[],lines:[],after:[]},a=Va(i,r);Lt(o.before,Ut(a.beforeLabel.call(this,r))),Lt(o.lines,a.label.call(this,r)),Lt(o.after,Ut(a.afterLabel.call(this,r))),n.push(o)}),n}getAfterBody(t,e){return za(e.callbacks.afterBody.apply(this,[t]))}getFooter(t,e){let{callbacks:i}=e,n=i.beforeFooter.apply(this,[t]),r=i.footer.apply(this,[t]),o=i.afterFooter.apply(this,[t]),a=[];return a=Lt(a,Ut(n)),a=Lt(a,Ut(r)),a=Lt(a,Ut(o)),a}_createItems(t){let e=this._active,i=this.chart.data,n=[],r=[],o=[],a=[],l,c;for(l=0,c=e.length;lt.filter(h,u,d,i))),t.itemSort&&(a=a.sort((h,u)=>t.itemSort(h,u,i))),H(a,h=>{let u=Va(t.callbacks,h);n.push(u.labelColor.call(this,h)),r.push(u.labelPointStyle.call(this,h)),o.push(u.labelTextColor.call(this,h))}),this.labelColors=n,this.labelPointStyles=r,this.labelTextColors=o,this.dataPoints=a,a}update(t,e){let i=this.options.setContext(this.getContext()),n=this._active,r,o=[];if(!n.length)this.opacity!==0&&(r={opacity:0});else{let a=Es[i.position].call(this,n,this._eventPosition);o=this._createItems(i),this.title=this.getTitle(o,i),this.beforeBody=this.getBeforeBody(o,i),this.body=this.getBody(o,i),this.afterBody=this.getAfterBody(o,i),this.footer=this.getFooter(o,i);let l=this._size=Na(this,i),c=Object.assign({},a,l),h=Ra(this.chart,i,c),u=Wa(i,c,h,this.chart);this.xAlign=h.xAlign,this.yAlign=h.yAlign,r={opacity:1,x:u.x,y:u.y,width:l.width,height:l.height,caretX:a.x,caretY:a.y}}this._tooltipItems=o,this.$context=void 0,r&&this._resolveAnimations().update(this,r),t&&i.external&&i.external.call(this,{chart:this.chart,tooltip:this,replay:e})}drawCaret(t,e,i,n){let r=this.getCaretPosition(t,i,n);e.lineTo(r.x1,r.y1),e.lineTo(r.x2,r.y2),e.lineTo(r.x3,r.y3)}getCaretPosition(t,e,i){let{xAlign:n,yAlign:r}=this,{caretSize:o,cornerRadius:a}=i,{topLeft:l,topRight:c,bottomLeft:h,bottomRight:u}=se(a),{x:d,y:f}=t,{width:m,height:g}=e,p,y,b,_,w,x;return r==="center"?(w=f+g/2,n==="left"?(p=d,y=p-o,_=w+o,x=w-o):(p=d+m,y=p+o,_=w-o,x=w+o),b=p):(n==="left"?y=d+Math.max(l,h)+o:n==="right"?y=d+m-Math.max(c,u)-o:y=this.caretX,r==="top"?(_=f,w=_-o,p=y-o,b=y+o):(_=f+g,w=_+o,p=y+o,b=y-o),x=_),{x1:p,x2:y,x3:b,y1:_,y2:w,y3:x}}drawTitle(t,e,i){let n=this.title,r=n.length,o,a,l;if(r){let c=ye(i.rtl,this.x,this.width);for(t.x=Wi(this,i.titleAlign,i),e.textAlign=c.textAlign(i.titleAlign),e.textBaseline="middle",o=et(i.titleFont),a=i.titleSpacing,e.fillStyle=i.titleColor,e.font=o.string,l=0;l_!==0)?(t.beginPath(),t.fillStyle=r.multiKeyBackground,We(t,{x:p,y:g,w:c,h:l,radius:b}),t.fill(),t.stroke(),t.fillStyle=o.backgroundColor,t.beginPath(),We(t,{x:y,y:g+1,w:c-2,h:l-2,radius:b}),t.fill()):(t.fillStyle=r.multiKeyBackground,t.fillRect(p,g,c,l),t.strokeRect(p,g,c,l),t.fillStyle=o.backgroundColor,t.fillRect(y,g+1,c-2,l-2))}t.fillStyle=this.labelTextColors[i]}drawBody(t,e,i){let{body:n}=this,{bodySpacing:r,bodyAlign:o,displayColors:a,boxHeight:l,boxWidth:c,boxPadding:h}=i,u=et(i.bodyFont),d=u.lineHeight,f=0,m=ye(i.rtl,this.x,this.width),g=function(O){e.fillText(O,m.x(t.x+f),t.y+d/2),t.y+=d+r},p=m.textAlign(o),y,b,_,w,x,S,k;for(e.textAlign=o,e.textBaseline="middle",e.font=u.string,t.x=Wi(this,p,i),e.fillStyle=i.bodyColor,H(this.beforeBody,g),f=a&&p!=="right"?o==="center"?c/2+h:c+2+h:0,w=0,S=n.length;w0&&e.stroke()}_updateAnimationTarget(t){let e=this.chart,i=this.$animations,n=i&&i.x,r=i&&i.y;if(n||r){let o=Es[t.position].call(this,this._active,this._eventPosition);if(!o)return;let a=this._size=Na(this,t),l=Object.assign({},o,this._size),c=Ra(e,t,l),h=Wa(t,l,c,e);(n._to!==h.x||r._to!==h.y)&&(this.xAlign=c.xAlign,this.yAlign=c.yAlign,this.width=a.width,this.height=a.height,this.caretX=o.x,this.caretY=o.y,this._resolveAnimations().update(this,h))}}_willRender(){return!!this.opacity}draw(t){let e=this.options.setContext(this.getContext()),i=this.opacity;if(!i)return;this._updateAnimationTarget(e);let n={width:this.width,height:this.height},r={x:this.x,y:this.y};i=Math.abs(i)<.001?0:i;let o=at(e.padding),a=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;e.enabled&&a&&(t.save(),t.globalAlpha=i,this.drawBackground(r,t,n,e),Kn(t,e.textDirection),r.y+=o.top,this.drawTitle(r,t,e),this.drawBody(r,t,e),this.drawFooter(r,t,e),Jn(t,e.textDirection),t.restore())}getActiveElements(){return this._active||[]}setActiveElements(t,e){let i=this._active,n=t.map(({datasetIndex:a,index:l})=>{let c=this.chart.getDatasetMeta(a);if(!c)throw new Error("Cannot find a dataset at index "+a);return{datasetIndex:a,element:c.data[l],index:l}}),r=!xs(i,n),o=this._positionChanged(n,e);(r||o)&&(this._active=n,this._eventPosition=e,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(t,e,i=!0){if(e&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;let n=this.options,r=this._active||[],o=this._getActiveElements(t,r,e,i),a=this._positionChanged(o,t),l=e||!xs(o,r)||a;return l&&(this._active=o,(n.enabled||n.external)&&(this._eventPosition={x:t.x,y:t.y},this.update(!0,e))),l}_getActiveElements(t,e,i,n){let r=this.options;if(t.type==="mouseout")return[];if(!n)return e;let o=this.chart.getElementsAtEventForMode(t,r.mode,r,i);return r.reverse&&o.reverse(),o}_positionChanged(t,e){let{caretX:i,caretY:n,options:r}=this,o=Es[r.position].call(this,t,e);return o!==!1&&(i!==o.x||n!==o.y)}};Ls.positioners=Es;var ff={id:"tooltip",_element:Ls,positioners:Es,afterInit(s,t,e){e&&(s.tooltip=new Ls({chart:s,options:e}))},beforeUpdate(s,t,e){s.tooltip&&s.tooltip.initialize(e)},reset(s,t,e){s.tooltip&&s.tooltip.initialize(e)},afterDraw(s){let t=s.tooltip;if(t&&t._willRender()){let e={tooltip:t};if(s.notifyPlugins("beforeTooltipDraw",e)===!1)return;t.draw(s.ctx),s.notifyPlugins("afterTooltipDraw",e)}},afterEvent(s,t){if(s.tooltip){let e=t.replay;s.tooltip.handleEvent(t.event,e,t.inChartArea)&&(t.changed=!0)}},defaults:{enabled:!0,external:null,position:"average",backgroundColor:"rgba(0,0,0,0.8)",titleColor:"#fff",titleFont:{weight:"bold"},titleSpacing:2,titleMarginBottom:6,titleAlign:"left",bodyColor:"#fff",bodySpacing:2,bodyFont:{},bodyAlign:"left",footerColor:"#fff",footerSpacing:2,footerMarginTop:6,footerFont:{weight:"bold"},footerAlign:"left",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(s,t)=>t.bodyFont.size,boxWidth:(s,t)=>t.bodyFont.size,multiKeyBackground:"#fff",displayColors:!0,boxPadding:0,borderColor:"rgba(0,0,0,0)",borderWidth:0,animation:{duration:400,easing:"easeOutQuart"},animations:{numbers:{type:"number",properties:["x","y","width","height","caretX","caretY"]},opacity:{easing:"linear",duration:200}},callbacks:{beforeTitle:Ft,title(s){if(s.length>0){let t=s[0],e=t.chart.data.labels,i=e?e.length:0;if(this&&this.options&&this.options.mode==="dataset")return t.dataset.label||"";if(t.label)return t.label;if(i>0&&t.dataIndexs!=="filter"&&s!=="itemSort"&&s!=="external",_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]},mf=Object.freeze({__proto__:null,Decimation:Fd,Filler:Jd,Legend:ef,SubTitle:rf,Title:nf,Tooltip:ff}),gf=(s,t,e,i)=>(typeof t=="string"?(e=s.push(t)-1,i.unshift({index:e,label:t})):isNaN(t)&&(e=null),e);function pf(s,t,e,i){let n=s.indexOf(t);if(n===-1)return gf(s,t,e,i);let r=s.lastIndexOf(t);return n!==r?e:n}var yf=(s,t)=>s===null?null:it(Math.round(s),0,t),Je=class extends Yt{constructor(t){super(t),this._startValue=void 0,this._valueRange=0,this._addedLabels=[]}init(t){let e=this._addedLabels;if(e.length){let i=this.getLabels();for(let{index:n,label:r}of e)i[n]===r&&i.splice(n,1);this._addedLabels=[]}super.init(t)}parse(t,e){if(R(t))return null;let i=this.getLabels();return e=isFinite(e)&&i[e]===t?e:pf(i,t,I(e,t),this._addedLabels),yf(e,i.length-1)}determineDataLimits(){let{minDefined:t,maxDefined:e}=this.getUserBounds(),{min:i,max:n}=this.getMinMax(!0);this.options.bounds==="ticks"&&(t||(i=0),e||(n=this.getLabels().length-1)),this.min=i,this.max=n}buildTicks(){let t=this.min,e=this.max,i=this.options.offset,n=[],r=this.getLabels();r=t===0&&e===r.length-1?r:r.slice(t,e+1),this._valueRange=Math.max(r.length-(i?0:1),1),this._startValue=this.min-(i?.5:0);for(let o=t;o<=e;o++)n.push({value:o});return n}getLabelForValue(t){let e=this.getLabels();return t>=0&&te.length-1?null:this.getPixelForValue(e[t].value)}getValueForPixel(t){return Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange)}getBasePixel(){return this.bottom}};Je.id="category";Je.defaults={ticks:{callback:Je.prototype.getLabelForValue}};function bf(s,t){let e=[],{bounds:n,step:r,min:o,max:a,precision:l,count:c,maxTicks:h,maxDigits:u,includeBounds:d}=s,f=r||1,m=h-1,{min:g,max:p}=t,y=!R(o),b=!R(a),_=!R(c),w=(p-g)/(u+1),x=On((p-g)/m/f)*f,S,k,O,T;if(x<1e-14&&!y&&!b)return[{value:g},{value:p}];T=Math.ceil(p/x)-Math.floor(g/x),T>m&&(x=On(T*x/m/f)*f),R(l)||(S=Math.pow(10,l),x=Math.ceil(x*S)/S),n==="ticks"?(k=Math.floor(g/x)*x,O=Math.ceil(p/x)*x):(k=g,O=p),y&&b&&r&&Eo((a-o)/r,x/1e3)?(T=Math.round(Math.min((a-o)/x,h)),x=(a-o)/T,k=o,O=a):_?(k=y?o:k,O=b?a:O,T=c-1,x=(O-k)/T):(T=(O-k)/x,Ne(T,Math.round(T),x/1e3)?T=Math.round(T):T=Math.ceil(T));let F=Math.max(En(x),En(k));S=Math.pow(10,R(l)?F:l),k=Math.round(k*S)/S,O=Math.round(O*S)/S;let W=0;for(y&&(d&&k!==o?(e.push({value:o}),kn=e?n:l,a=l=>r=i?r:l;if(t){let l=Tt(n),c=Tt(r);l<0&&c<0?a(0):l>0&&c>0&&o(0)}if(n===r){let l=1;(r>=Number.MAX_SAFE_INTEGER||n<=Number.MIN_SAFE_INTEGER)&&(l=Math.abs(r*.05)),a(r+l),t||o(n-l)}this.min=n,this.max=r}getTickLimit(){let t=this.options.ticks,{maxTicksLimit:e,stepSize:i}=t,n;return i?(n=Math.ceil(this.max/i)-Math.floor(this.min/i)+1,n>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${i} would result generating up to ${n} ticks. Limiting to 1000.`),n=1e3)):(n=this.computeTickLimit(),e=e||11),e&&(n=Math.min(e,n)),n}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){let t=this.options,e=t.ticks,i=this.getTickLimit();i=Math.max(2,i);let n={maxTicks:i,bounds:t.bounds,min:t.min,max:t.max,precision:e.precision,step:e.stepSize,count:e.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:e.minRotation||0,includeBounds:e.includeBounds!==!1},r=this._range||this,o=bf(n,r);return t.bounds==="ticks"&&Dn(o,this,"value"),t.reverse?(o.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),o}configure(){let t=this.ticks,e=this.min,i=this.max;if(super.configure(),this.options.offset&&t.length){let n=(i-e)/Math.max(t.length-1,1)/2;e-=n,i+=n}this._startValue=e,this._endValue=i,this._valueRange=i-e}getLabelForValue(t){return Ve(t,this.chart.options.locale,this.options.ticks.format)}},Ps=class extends Qe{determineDataLimits(){let{min:t,max:e}=this.getMinMax(!0);this.min=K(t)?t:0,this.max=K(e)?e:1,this.handleTickRangeOptions()}computeTickLimit(){let t=this.isHorizontal(),e=t?this.width:this.height,i=wt(this.options.ticks.minRotation),n=(t?Math.sin(i):Math.cos(i))||.001,r=this._resolveTickFontOptions(0);return Math.ceil(e/Math.min(40,r.lineHeight/n))}getPixelForValue(t){return t===null?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getValueForPixel(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange}};Ps.id="linear";Ps.defaults={ticks:{callback:Zi.formatters.numeric}};function Ba(s){return s/Math.pow(10,Math.floor(gt(s)))===1}function xf(s,t){let e=Math.floor(gt(t.max)),i=Math.ceil(t.max/Math.pow(10,e)),n=[],r=mt(s.min,Math.pow(10,Math.floor(gt(t.min)))),o=Math.floor(gt(r)),a=Math.floor(r/Math.pow(10,o)),l=o<0?Math.pow(10,Math.abs(o)):1;do n.push({value:r,major:Ba(r)}),++a,a===10&&(a=1,++o,l=o>=0?1:l),r=Math.round(a*Math.pow(10,o)*l)/l;while(o0?i:null}determineDataLimits(){let{min:t,max:e}=this.getMinMax(!0);this.min=K(t)?Math.max(0,t):null,this.max=K(e)?Math.max(0,e):null,this.options.beginAtZero&&(this._zero=!0),this.handleTickRangeOptions()}handleTickRangeOptions(){let{minDefined:t,maxDefined:e}=this.getUserBounds(),i=this.min,n=this.max,r=l=>i=t?i:l,o=l=>n=e?n:l,a=(l,c)=>Math.pow(10,Math.floor(gt(l))+c);i===n&&(i<=0?(r(1),o(10)):(r(a(i,-1)),o(a(n,1)))),i<=0&&r(a(n,-1)),n<=0&&o(a(i,1)),this._zero&&this.min!==this._suggestedMin&&i===a(this.min,0)&&r(a(i,-1)),this.min=i,this.max=n}buildTicks(){let t=this.options,e={min:this._userMin,max:this._userMax},i=xf(e,this);return t.bounds==="ticks"&&Dn(i,this,"value"),t.reverse?(i.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),i}getLabelForValue(t){return t===void 0?"0":Ve(t,this.chart.options.locale,this.options.ticks.format)}configure(){let t=this.min;super.configure(),this._startValue=gt(t),this._valueRange=gt(this.max)-gt(t)}getPixelForValue(t){return(t===void 0||t===0)&&(t=this.min),t===null||isNaN(t)?NaN:this.getPixelForDecimal(t===this.min?0:(gt(t)-this._startValue)/this._valueRange)}getValueForPixel(t){let e=this.getDecimalForPixel(t);return Math.pow(10,this._startValue+e*this._valueRange)}};Ns.id="logarithmic";Ns.defaults={ticks:{callback:Zi.formatters.logarithmic,major:{enabled:!0}}};function Sr(s){let t=s.ticks;if(t.display&&s.display){let e=at(t.backdropPadding);return I(t.font&&t.font.size,L.font.size)+e.height}return 0}function _f(s,t,e){return e=$(e)?e:[e],{w:Bo(s,t.string,e),h:e.length*t.lineHeight}}function $a(s,t,e,i,n){return s===i||s===n?{start:t-e/2,end:t+e/2}:sn?{start:t-e,end:t}:{start:t,end:t+e}}function wf(s){let t={l:s.left+s._padding.left,r:s.right-s._padding.right,t:s.top+s._padding.top,b:s.bottom-s._padding.bottom},e=Object.assign({},t),i=[],n=[],r=s._pointLabels.length,o=s.options.pointLabels,a=o.centerPointLabels?Y/r:0;for(let l=0;lt.r&&(a=(i.end-t.r)/r,s.r=Math.max(s.r,t.r+a)),n.startt.b&&(l=(n.end-t.b)/o,s.b=Math.max(s.b,t.b+l))}function kf(s,t,e){let i=[],n=s._pointLabels.length,r=s.options,o=Sr(r)/2,a=s.drawingArea,l=r.pointLabels.centerPointLabels?Y/n:0;for(let c=0;c270||e<90)&&(s-=t),s}function Of(s,t){let{ctx:e,options:{pointLabels:i}}=s;for(let n=t-1;n>=0;n--){let r=i.setContext(s.getPointLabelContext(n)),o=et(r.font),{x:a,y:l,textAlign:c,left:h,top:u,right:d,bottom:f}=s._pointLabelItems[n],{backdropColor:m}=r;if(!R(m)){let g=se(r.borderRadius),p=at(r.backdropPadding);e.fillStyle=m;let y=h-p.left,b=u-p.top,_=d-h+p.width,w=f-u+p.height;Object.values(g).some(x=>x!==0)?(e.beginPath(),We(e,{x:y,y:b,w:_,h:w,radius:g}),e.fill()):e.fillRect(y,b,_,w)}ee(e,s._pointLabels[n],a,l+o.lineHeight/2,o,{color:r.color,textAlign:c,textBaseline:"middle"})}}function dl(s,t,e,i){let{ctx:n}=s;if(e)n.arc(s.xCenter,s.yCenter,t,0,B);else{let r=s.getPointPosition(0,t);n.moveTo(r.x,r.y);for(let o=1;o{let n=j(this.options.pointLabels.callback,[e,i],this);return n||n===0?n:""}).filter((e,i)=>this.chart.getDataVisibility(i))}fit(){let t=this.options;t.display&&t.pointLabels.display?wf(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(t,e,i,n){this.xCenter+=Math.floor((t-e)/2),this.yCenter+=Math.floor((i-n)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(t,e,i,n))}getIndexAngle(t){let e=B/(this._pointLabels.length||1),i=this.options.startAngle||0;return ht(t*e+wt(i))}getDistanceFromCenterForValue(t){if(R(t))return NaN;let e=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-t)*e:(t-this.min)*e}getValueForDistanceFromCenter(t){if(R(t))return NaN;let e=t/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-e:this.min+e}getPointLabelContext(t){let e=this._pointLabels||[];if(t>=0&&t{if(h!==0){a=this.getDistanceFromCenterForValue(c.value);let u=n.setContext(this.getContext(h-1));Df(this,u,a,r)}}),i.display){for(t.save(),o=r-1;o>=0;o--){let c=i.setContext(this.getPointLabelContext(o)),{color:h,lineWidth:u}=c;!u||!h||(t.lineWidth=u,t.strokeStyle=h,t.setLineDash(c.borderDash),t.lineDashOffset=c.borderDashOffset,a=this.getDistanceFromCenterForValue(e.ticks.reverse?this.min:this.max),l=this.getPointPosition(o,a),t.beginPath(),t.moveTo(this.xCenter,this.yCenter),t.lineTo(l.x,l.y),t.stroke())}t.restore()}}drawBorder(){}drawLabels(){let t=this.ctx,e=this.options,i=e.ticks;if(!i.display)return;let n=this.getIndexAngle(0),r,o;t.save(),t.translate(this.xCenter,this.yCenter),t.rotate(n),t.textAlign="center",t.textBaseline="middle",this.ticks.forEach((a,l)=>{if(l===0&&!e.reverse)return;let c=i.setContext(this.getContext(l)),h=et(c.font);if(r=this.getDistanceFromCenterForValue(this.ticks[l].value),c.showLabelBackdrop){t.font=h.string,o=t.measureText(a.label).width,t.fillStyle=c.backdropColor;let u=at(c.backdropPadding);t.fillRect(-o/2-u.left,-r-h.size/2-u.top,o+u.width,h.size+u.height)}ee(t,a.label,0,-r,h,{color:c.color})}),t.restore()}drawTitle(){}};_e.id="radialLinear";_e.defaults={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,lineWidth:1,borderDash:[],borderDashOffset:0},grid:{circular:!1},startAngle:0,ticks:{showLabelBackdrop:!0,callback:Zi.formatters.numeric},pointLabels:{backdropColor:void 0,backdropPadding:2,display:!0,font:{size:10},callback(s){return s},padding:5,centerPointLabels:!1}};_e.defaultRoutes={"angleLines.color":"borderColor","pointLabels.color":"color","ticks.color":"color"};_e.descriptors={angleLines:{_fallback:"grid"}};var qi={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},ut=Object.keys(qi);function If(s,t){return s-t}function ja(s,t){if(R(t))return null;let e=s._adapter,{parser:i,round:n,isoWeekday:r}=s._parseOpts,o=t;return typeof i=="function"&&(o=i(o)),K(o)||(o=typeof i=="string"?e.parse(o,i):e.parse(o)),o===null?null:(n&&(o=n==="week"&&(pe(r)||r===!0)?e.startOf(o,"isoWeek",r):e.startOf(o,n)),+o)}function Ua(s,t,e,i){let n=ut.length;for(let r=ut.indexOf(s);r=ut.indexOf(e);r--){let o=ut[r];if(qi[o].common&&s._adapter.diff(n,i,o)>=t-1)return o}return ut[e?ut.indexOf(e):0]}function Ff(s){for(let t=ut.indexOf(s)+1,e=ut.length;t=t?e[i]:e[n];s[r]=!0}}function Af(s,t,e,i){let n=s._adapter,r=+n.startOf(t[0].value,i),o=t[t.length-1].value,a,l;for(a=r;a<=o;a=+n.add(a,1,i))l=e[a],l>=0&&(t[l].major=!0);return t}function Za(s,t,e){let i=[],n={},r=t.length,o,a;for(o=0;o+t.value))}initOffsets(t){let e=0,i=0,n,r;this.options.offset&&t.length&&(n=this.getDecimalForValue(t[0]),t.length===1?e=1-n:e=(this.getDecimalForValue(t[1])-n)/2,r=this.getDecimalForValue(t[t.length-1]),t.length===1?i=r:i=(r-this.getDecimalForValue(t[t.length-2]))/2);let o=t.length<3?.5:.25;e=it(e,0,o),i=it(i,0,o),this._offsets={start:e,end:i,factor:1/(e+1+i)}}_generate(){let t=this._adapter,e=this.min,i=this.max,n=this.options,r=n.time,o=r.unit||Ua(r.minUnit,e,i,this._getLabelCapacity(e)),a=I(r.stepSize,1),l=o==="week"?r.isoWeekday:!1,c=pe(l)||l===!0,h={},u=e,d,f;if(c&&(u=+t.startOf(u,"isoWeek",l)),u=+t.startOf(u,c?"day":o),t.diff(i,e,o)>1e5*a)throw new Error(e+" and "+i+" are too far apart with stepSize of "+a+" "+o);let m=n.ticks.source==="data"&&this.getDataTimestamps();for(d=u,f=0;dg-p).map(g=>+g)}getLabelForValue(t){let e=this._adapter,i=this.options.time;return i.tooltipFormat?e.format(t,i.tooltipFormat):e.format(t,i.displayFormats.datetime)}_tickFormatFunction(t,e,i,n){let r=this.options,o=r.time.displayFormats,a=this._unit,l=this._majorUnit,c=a&&o[a],h=l&&o[l],u=i[e],d=l&&h&&u&&u.major,f=this._adapter.format(t,n||(d?h:c)),m=r.ticks.callback;return m?j(m,[f,e,i],this):f}generateTickLabels(t){let e,i,n;for(e=0,i=t.length;e0?a:1}getDataTimestamps(){let t=this._cache.data||[],e,i;if(t.length)return t;let n=this.getMatchingVisibleMetas();if(this._normalized&&n.length)return this._cache.data=n[0].controller.getAllParsedValues(this);for(e=0,i=n.length;e=s[i].pos&&t<=s[n].pos&&({lo:i,hi:n}=Ct(s,"pos",t)),{pos:r,time:a}=s[i],{pos:o,time:l}=s[n]):(t>=s[i].time&&t<=s[n].time&&({lo:i,hi:n}=Ct(s,"time",t)),{time:r,pos:a}=s[i],{time:o,pos:l}=s[n]);let c=o-r;return c?a+(l-a)*(t-r)/c:a}var Rs=class extends we{constructor(t){super(t),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){let t=this._getTimestampsForTable(),e=this._table=this.buildLookupTable(t);this._minPos=zi(e,this.min),this._tableRange=zi(e,this.max)-this._minPos,super.initOffsets(t)}buildLookupTable(t){let{min:e,max:i}=this,n=[],r=[],o,a,l,c,h;for(o=0,a=t.length;o=e&&c<=i&&n.push(c);if(n.length<2)return[{time:e,pos:0},{time:i,pos:1}];for(o=0,a=n.length;o=0?m:1e3+m,(d-f)/(60*1e3)}equals(t){return t.type==="iana"&&t.name===this.name}get isValid(){return this.valid}};var ml={};function zf(s,t={}){let e=JSON.stringify([s,t]),i=ml[e];return i||(i=new Intl.ListFormat(s,t),ml[e]=i),i}var Dr={};function Er(s,t={}){let e=JSON.stringify([s,t]),i=Dr[e];return i||(i=new Intl.DateTimeFormat(s,t),Dr[e]=i),i}var Ir={};function Vf(s,t={}){let e=JSON.stringify([s,t]),i=Ir[e];return i||(i=new Intl.NumberFormat(s,t),Ir[e]=i),i}var Cr={};function Hf(s,t={}){let{base:e,...i}=t,n=JSON.stringify([s,i]),r=Cr[n];return r||(r=new Intl.RelativeTimeFormat(s,t),Cr[n]=r),r}var ni=null;function Bf(){return ni||(ni=new Intl.DateTimeFormat().resolvedOptions().locale,ni)}var gl={};function $f(s){let t=gl[s];if(!t){let e=new Intl.Locale(s);t="getWeekInfo"in e?e.getWeekInfo():e.weekInfo,gl[s]=t}return t}function jf(s){let t=s.indexOf("-x-");t!==-1&&(s=s.substring(0,t));let e=s.indexOf("-u-");if(e===-1)return[s];{let i,n;try{i=Er(s).resolvedOptions(),n=s}catch{let l=s.substring(0,e);i=Er(l).resolvedOptions(),n=l}let{numberingSystem:r,calendar:o}=i;return[n,r,o]}}function Uf(s,t,e){return(e||t)&&(s.includes("-u-")||(s+="-u"),e&&(s+=`-ca-${e}`),t&&(s+=`-nu-${t}`)),s}function Yf(s){let t=[];for(let e=1;e<=12;e++){let i=v.utc(2009,e,1);t.push(s(i))}return t}function Zf(s){let t=[];for(let e=1;e<=7;e++){let i=v.utc(2016,11,13+e);t.push(s(i))}return t}function sn(s,t,e,i){let n=s.listingMode();return n==="error"?null:n==="en"?e(t):i(t)}function qf(s){return s.numberingSystem&&s.numberingSystem!=="latn"?!1:s.numberingSystem==="latn"||!s.locale||s.locale.startsWith("en")||new Intl.DateTimeFormat(s.intl).resolvedOptions().numberingSystem==="latn"}var Fr=class{constructor(t,e,i){this.padTo=i.padTo||0,this.floor=i.floor||!1;let{padTo:n,floor:r,...o}=i;if(!e||Object.keys(o).length>0){let a={useGrouping:!1,...i};i.padTo>0&&(a.minimumIntegerDigits=i.padTo),this.inf=Vf(t,a)}}format(t){if(this.inf){let e=this.floor?Math.floor(t):t;return this.inf.format(e)}else{let e=this.floor?Math.floor(t):ss(t,3);return q(e,this.padTo)}}},Ar=class{constructor(t,e,i){this.opts=i,this.originalZone=void 0;let n;if(this.opts.timeZone)this.dt=t;else if(t.zone.type==="fixed"){let o=-1*(t.offset/60),a=o>=0?`Etc/GMT+${o}`:`Etc/GMT${o}`;t.offset!==0&&nt.create(a).valid?(n=a,this.dt=t):(n="UTC",this.dt=t.offset===0?t:t.setZone("UTC").plus({minutes:t.offset}),this.originalZone=t.zone)}else t.zone.type==="system"?this.dt=t:t.zone.type==="iana"?(this.dt=t,n=t.zone.name):(n="UTC",this.dt=t.setZone("UTC").plus({minutes:t.offset}),this.originalZone=t.zone);let r={...this.opts};r.timeZone=r.timeZone||n,this.dtf=Er(e,r)}format(){return this.originalZone?this.formatToParts().map(({value:t})=>t).join(""):this.dtf.format(this.dt.toJSDate())}formatToParts(){let t=this.dtf.formatToParts(this.dt.toJSDate());return this.originalZone?t.map(e=>{if(e.type==="timeZoneName"){let i=this.originalZone.offsetName(this.dt.ts,{locale:this.dt.locale,format:this.opts.timeZoneName});return{...e,value:i}}else return e}):t}resolvedOptions(){return this.dtf.resolvedOptions()}},Lr=class{constructor(t,e,i){this.opts={style:"long",...i},!e&&nn()&&(this.rtf=Hf(t,i))}format(t,e){return this.rtf?this.rtf.format(t,e):pl(e,t,this.opts.numeric,this.opts.style!=="long")}formatToParts(t,e){return this.rtf?this.rtf.formatToParts(t,e):[]}},Gf={firstDay:1,minimalDays:4,weekend:[6,7]},N=class{static fromOpts(t){return N.create(t.locale,t.numberingSystem,t.outputCalendar,t.weekSettings,t.defaultToEN)}static create(t,e,i,n,r=!1){let o=t||z.defaultLocale,a=o||(r?"en-US":Bf()),l=e||z.defaultNumberingSystem,c=i||z.defaultOutputCalendar,h=ri(n)||z.defaultWeekSettings;return new N(a,l,c,h,o)}static resetCache(){ni=null,Dr={},Ir={},Cr={}}static fromObject({locale:t,numberingSystem:e,outputCalendar:i,weekSettings:n}={}){return N.create(t,e,i,n)}constructor(t,e,i,n,r){let[o,a,l]=jf(t);this.locale=o,this.numberingSystem=e||a||null,this.outputCalendar=i||l||null,this.weekSettings=n,this.intl=Uf(this.locale,this.numberingSystem,this.outputCalendar),this.weekdaysCache={format:{},standalone:{}},this.monthsCache={format:{},standalone:{}},this.meridiemCache=null,this.eraCache={},this.specifiedLocale=r,this.fastNumbersCached=null}get fastNumbers(){return this.fastNumbersCached==null&&(this.fastNumbersCached=qf(this)),this.fastNumbersCached}listingMode(){let t=this.isEnglish(),e=(this.numberingSystem===null||this.numberingSystem==="latn")&&(this.outputCalendar===null||this.outputCalendar==="gregory");return t&&e?"en":"intl"}clone(t){return!t||Object.getOwnPropertyNames(t).length===0?this:N.create(t.locale||this.specifiedLocale,t.numberingSystem||this.numberingSystem,t.outputCalendar||this.outputCalendar,ri(t.weekSettings)||this.weekSettings,t.defaultToEN||!1)}redefaultToEN(t={}){return this.clone({...t,defaultToEN:!0})}redefaultToSystem(t={}){return this.clone({...t,defaultToEN:!1})}months(t,e=!1){return sn(this,t,Pr,()=>{let i=e?{month:t,day:"numeric"}:{month:t},n=e?"format":"standalone";return this.monthsCache[n][t]||(this.monthsCache[n][t]=Yf(r=>this.extract(r,i,"month"))),this.monthsCache[n][t]})}weekdays(t,e=!1){return sn(this,t,Nr,()=>{let i=e?{weekday:t,year:"numeric",month:"long",day:"numeric"}:{weekday:t},n=e?"format":"standalone";return this.weekdaysCache[n][t]||(this.weekdaysCache[n][t]=Zf(r=>this.extract(r,i,"weekday"))),this.weekdaysCache[n][t]})}meridiems(){return sn(this,void 0,()=>Rr,()=>{if(!this.meridiemCache){let t={hour:"numeric",hourCycle:"h12"};this.meridiemCache=[v.utc(2016,11,13,9),v.utc(2016,11,13,19)].map(e=>this.extract(e,t,"dayperiod"))}return this.meridiemCache})}eras(t){return sn(this,t,Wr,()=>{let e={era:t};return this.eraCache[t]||(this.eraCache[t]=[v.utc(-40,1,1),v.utc(2017,1,1)].map(i=>this.extract(i,e,"era"))),this.eraCache[t]})}extract(t,e,i){let n=this.dtFormatter(t,e),r=n.formatToParts(),o=r.find(a=>a.type.toLowerCase()===i);return o?o.value:null}numberFormatter(t={}){return new Fr(this.intl,t.forceSimple||this.fastNumbers,t)}dtFormatter(t,e={}){return new Ar(t,this.intl,e)}relFormatter(t={}){return new Lr(this.intl,this.isEnglish(),t)}listFormatter(t={}){return zf(this.intl,t)}isEnglish(){return this.locale==="en"||this.locale.toLowerCase()==="en-us"||new Intl.DateTimeFormat(this.intl).resolvedOptions().locale.startsWith("en-us")}getWeekSettings(){return this.weekSettings?this.weekSettings:rn()?$f(this.locale):Gf}getStartOfWeek(){return this.getWeekSettings().firstDay}getMinDaysInFirstWeek(){return this.getWeekSettings().minimalDays}getWeekendDays(){return this.getWeekSettings().weekend}equals(t){return this.locale===t.locale&&this.numberingSystem===t.numberingSystem&&this.outputCalendar===t.outputCalendar}};var Vr=null,G=class extends dt{static get utcInstance(){return Vr===null&&(Vr=new G(0)),Vr}static instance(t){return t===0?G.utcInstance:new G(t)}static parseSpecifier(t){if(t){let e=t.match(/^utc(?:([+-]\d{1,2})(?::(\d{2}))?)?$/i);if(e)return new G(Se(e[1],e[2]))}return null}constructor(t){super(),this.fixed=t}get type(){return"fixed"}get name(){return this.fixed===0?"UTC":`UTC${le(this.fixed,"narrow")}`}get ianaName(){return this.fixed===0?"Etc/UTC":`Etc/GMT${le(-this.fixed,"narrow")}`}offsetName(){return this.name}formatOffset(t,e){return le(this.fixed,e)}get isUniversal(){return!0}offset(){return this.fixed}equals(t){return t.type==="fixed"&&t.fixed===this.fixed}get isValid(){return!0}};var is=class extends dt{constructor(t){super(),this.zoneName=t}get type(){return"invalid"}get name(){return this.zoneName}get isUniversal(){return!1}offsetName(){return null}formatOffset(){return""}offset(){return NaN}equals(){return!1}get isValid(){return!1}};function Et(s,t){let e;if(D(s)||s===null)return t;if(s instanceof dt)return s;if(yl(s)){let i=s.toLowerCase();return i==="default"?t:i==="local"||i==="system"?Wt.instance:i==="utc"||i==="gmt"?G.utcInstance:G.parseSpecifier(i)||nt.create(s)}else return zt(s)?G.instance(s):typeof s=="object"&&"offset"in s&&typeof s.offset=="function"?s:new is(s)}var bl=()=>Date.now(),xl="system",_l=null,wl=null,Sl=null,kl=60,Ml,Tl=null,z=class{static get now(){return bl}static set now(t){bl=t}static set defaultZone(t){xl=t}static get defaultZone(){return Et(xl,Wt.instance)}static get defaultLocale(){return _l}static set defaultLocale(t){_l=t}static get defaultNumberingSystem(){return wl}static set defaultNumberingSystem(t){wl=t}static get defaultOutputCalendar(){return Sl}static set defaultOutputCalendar(t){Sl=t}static get defaultWeekSettings(){return Tl}static set defaultWeekSettings(t){Tl=ri(t)}static get twoDigitCutoffYear(){return kl}static set twoDigitCutoffYear(t){kl=t%100}static get throwOnInvalid(){return Ml}static set throwOnInvalid(t){Ml=t}static resetCaches(){N.resetCache(),nt.resetCache()}};var rt=class{constructor(t,e){this.reason=t,this.explanation=e}toMessage(){return this.explanation?`${this.reason}: ${this.explanation}`:this.reason}};var vl=[0,31,59,90,120,151,181,212,243,273,304,334],Ol=[0,31,60,91,121,152,182,213,244,274,305,335];function St(s,t){return new rt("unit out of range",`you specified ${t} (of type ${typeof t}) as a ${s}, which is invalid`)}function on(s,t,e){let i=new Date(Date.UTC(s,t-1,e));s<100&&s>=0&&i.setUTCFullYear(i.getUTCFullYear()-1900);let n=i.getUTCDay();return n===0?7:n}function Dl(s,t,e){return e+(Me(s)?Ol:vl)[t-1]}function El(s,t){let e=Me(s)?Ol:vl,i=e.findIndex(r=>rke(i,t,e)?(c=i+1,l=1):c=i,{weekYear:c,weekNumber:l,weekday:a,...li(s)}}function Hr(s,t=4,e=1){let{weekYear:i,weekNumber:n,weekday:r}=s,o=an(on(i,1,t),e),a=ce(i),l=n*7+r-o-7+t,c;l<1?(c=i-1,l+=ce(c)):l>a?(c=i+1,l-=ce(i)):c=i;let{month:h,day:u}=El(c,l);return{year:c,month:h,day:u,...li(s)}}function ln(s){let{year:t,month:e,day:i}=s,n=Dl(t,e,i);return{year:t,ordinal:n,...li(s)}}function Br(s){let{year:t,ordinal:e}=s,{month:i,day:n}=El(t,e);return{year:t,month:i,day:n,...li(s)}}function $r(s,t){if(!D(s.localWeekday)||!D(s.localWeekNumber)||!D(s.localWeekYear)){if(!D(s.weekday)||!D(s.weekNumber)||!D(s.weekYear))throw new vt("Cannot mix locale-based week fields with ISO-based week fields");return D(s.localWeekday)||(s.weekday=s.localWeekday),D(s.localWeekNumber)||(s.weekNumber=s.localWeekNumber),D(s.localWeekYear)||(s.weekYear=s.localWeekYear),delete s.localWeekday,delete s.localWeekNumber,delete s.localWeekYear,{minDaysInFirstWeek:t.getMinDaysInFirstWeek(),startOfWeek:t.getStartOfWeek()}}else return{minDaysInFirstWeek:4,startOfWeek:1}}function Il(s,t=4,e=1){let i=ai(s.weekYear),n=xt(s.weekNumber,1,ke(s.weekYear,t,e)),r=xt(s.weekday,1,7);return i?n?r?!1:St("weekday",s.weekday):St("week",s.weekNumber):St("weekYear",s.weekYear)}function Cl(s){let t=ai(s.year),e=xt(s.ordinal,1,ce(s.year));return t?e?!1:St("ordinal",s.ordinal):St("year",s.year)}function jr(s){let t=ai(s.year),e=xt(s.month,1,12),i=xt(s.day,1,ns(s.year,s.month));return t?e?i?!1:St("day",s.day):St("month",s.month):St("year",s.year)}function Ur(s){let{hour:t,minute:e,second:i,millisecond:n}=s,r=xt(t,0,23)||t===24&&e===0&&i===0&&n===0,o=xt(e,0,59),a=xt(i,0,59),l=xt(n,0,999);return r?o?a?l?!1:St("millisecond",n):St("second",i):St("minute",e):St("hour",t)}function D(s){return typeof s>"u"}function zt(s){return typeof s=="number"}function ai(s){return typeof s=="number"&&s%1===0}function yl(s){return typeof s=="string"}function Al(s){return Object.prototype.toString.call(s)==="[object Date]"}function nn(){try{return typeof Intl<"u"&&!!Intl.RelativeTimeFormat}catch{return!1}}function rn(){try{return typeof Intl<"u"&&!!Intl.Locale&&("weekInfo"in Intl.Locale.prototype||"getWeekInfo"in Intl.Locale.prototype)}catch{return!1}}function Ll(s){return Array.isArray(s)?s:[s]}function Yr(s,t,e){if(s.length!==0)return s.reduce((i,n)=>{let r=[t(n),n];return i&&e(i[0],r[0])===i[0]?i:r},null)[1]}function Pl(s,t){return t.reduce((e,i)=>(e[i]=s[i],e),{})}function he(s,t){return Object.prototype.hasOwnProperty.call(s,t)}function ri(s){if(s==null)return null;if(typeof s!="object")throw new st("Week settings must be an object");if(!xt(s.firstDay,1,7)||!xt(s.minimalDays,1,7)||!Array.isArray(s.weekend)||s.weekend.some(t=>!xt(t,1,7)))throw new st("Invalid week settings");return{firstDay:s.firstDay,minimalDays:s.minimalDays,weekend:Array.from(s.weekend)}}function xt(s,t,e){return ai(s)&&s>=t&&s<=e}function Xf(s,t){return s-t*Math.floor(s/t)}function q(s,t=2){let e=s<0,i;return e?i="-"+(""+-s).padStart(t,"0"):i=(""+s).padStart(t,"0"),i}function qt(s){if(!(D(s)||s===null||s===""))return parseInt(s,10)}function ue(s){if(!(D(s)||s===null||s===""))return parseFloat(s)}function ci(s){if(!(D(s)||s===null||s==="")){let t=parseFloat("0."+s)*1e3;return Math.floor(t)}}function ss(s,t,e=!1){let i=10**t;return(e?Math.trunc:Math.round)(s*i)/i}function Me(s){return s%4===0&&(s%100!==0||s%400===0)}function ce(s){return Me(s)?366:365}function ns(s,t){let e=Xf(t-1,12)+1,i=s+(t-e)/12;return e===2?Me(i)?29:28:[31,null,31,30,31,30,31,31,30,31,30,31][e-1]}function es(s){let t=Date.UTC(s.year,s.month-1,s.day,s.hour,s.minute,s.second,s.millisecond);return s.year<100&&s.year>=0&&(t=new Date(t),t.setUTCFullYear(s.year,s.month-1,s.day)),+t}function Fl(s,t,e){return-an(on(s,1,t),e)+t-1}function ke(s,t=4,e=1){let i=Fl(s,t,e),n=Fl(s+1,t,e);return(ce(s)-i+n)/7}function hi(s){return s>99?s:s>z.twoDigitCutoffYear?1900+s:2e3+s}function Qi(s,t,e,i=null){let n=new Date(s),r={hourCycle:"h23",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"};i&&(r.timeZone=i);let o={timeZoneName:t,...r},a=new Intl.DateTimeFormat(e,o).formatToParts(n).find(l=>l.type.toLowerCase()==="timezonename");return a?a.value:null}function Se(s,t){let e=parseInt(s,10);Number.isNaN(e)&&(e=0);let i=parseInt(t,10)||0,n=e<0||Object.is(e,-0)?-i:i;return e*60+n}function Zr(s){let t=Number(s);if(typeof s=="boolean"||s===""||Number.isNaN(t))throw new st(`Invalid unit value ${s}`);return t}function rs(s,t){let e={};for(let i in s)if(he(s,i)){let n=s[i];if(n==null)continue;e[t(i)]=Zr(n)}return e}function le(s,t){let e=Math.trunc(Math.abs(s/60)),i=Math.trunc(Math.abs(s%60)),n=s>=0?"+":"-";switch(t){case"short":return`${n}${q(e,2)}:${q(i,2)}`;case"narrow":return`${n}${e}${i>0?`:${i}`:""}`;case"techie":return`${n}${q(e,2)}${q(i,2)}`;default:throw new RangeError(`Value format ${t} is out of range for property format`)}}function li(s){return Pl(s,["hour","minute","second","millisecond"])}var Kf=["January","February","March","April","May","June","July","August","September","October","November","December"],qr=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],Jf=["J","F","M","A","M","J","J","A","S","O","N","D"];function Pr(s){switch(s){case"narrow":return[...Jf];case"short":return[...qr];case"long":return[...Kf];case"numeric":return["1","2","3","4","5","6","7","8","9","10","11","12"];case"2-digit":return["01","02","03","04","05","06","07","08","09","10","11","12"];default:return null}}var Gr=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],Xr=["Mon","Tue","Wed","Thu","Fri","Sat","Sun"],Qf=["M","T","W","T","F","S","S"];function Nr(s){switch(s){case"narrow":return[...Qf];case"short":return[...Xr];case"long":return[...Gr];case"numeric":return["1","2","3","4","5","6","7"];default:return null}}var Rr=["AM","PM"],tm=["Before Christ","Anno Domini"],em=["BC","AD"],sm=["B","A"];function Wr(s){switch(s){case"narrow":return[...sm];case"short":return[...em];case"long":return[...tm];default:return null}}function Nl(s){return Rr[s.hour<12?0:1]}function Rl(s,t){return Nr(t)[s.weekday-1]}function Wl(s,t){return Pr(t)[s.month-1]}function zl(s,t){return Wr(t)[s.year<0?0:1]}function pl(s,t,e="always",i=!1){let n={years:["year","yr."],quarters:["quarter","qtr."],months:["month","mo."],weeks:["week","wk."],days:["day","day","days"],hours:["hour","hr."],minutes:["minute","min."],seconds:["second","sec."]},r=["hours","minutes","seconds"].indexOf(s)===-1;if(e==="auto"&&r){let u=s==="days";switch(t){case 1:return u?"tomorrow":`next ${n[s][0]}`;case-1:return u?"yesterday":`last ${n[s][0]}`;case 0:return u?"today":`this ${n[s][0]}`;default:}}let o=Object.is(t,-0)||t<0,a=Math.abs(t),l=a===1,c=n[s],h=i?l?c[1]:c[2]||c[1]:l?n[s][0]:s;return o?`${a} ${h} ago`:`in ${a} ${h}`}function Vl(s,t){let e="";for(let i of s)i.literal?e+=i.val:e+=t(i.val);return e}var im={D:ae,DD:zs,DDD:Vs,DDDD:Hs,t:Bs,tt:$s,ttt:js,tttt:Us,T:Ys,TT:Zs,TTT:qs,TTTT:Gs,f:Xs,ff:Js,fff:ti,ffff:si,F:Ks,FF:Qs,FFF:ei,FFFF:ii},X=class{static create(t,e={}){return new X(t,e)}static parseFormat(t){let e=null,i="",n=!1,r=[];for(let o=0;o0&&r.push({literal:n||/^\s+$/.test(i),val:i}),e=null,i="",n=!n):n||a===e?i+=a:(i.length>0&&r.push({literal:/^\s+$/.test(i),val:i}),i=a,e=a)}return i.length>0&&r.push({literal:n||/^\s+$/.test(i),val:i}),r}static macroTokenToFormatOpts(t){return im[t]}constructor(t,e){this.opts=e,this.loc=t,this.systemLoc=null}formatWithSystemDefault(t,e){return this.systemLoc===null&&(this.systemLoc=this.loc.redefaultToSystem()),this.systemLoc.dtFormatter(t,{...this.opts,...e}).format()}dtFormatter(t,e={}){return this.loc.dtFormatter(t,{...this.opts,...e})}formatDateTime(t,e){return this.dtFormatter(t,e).format()}formatDateTimeParts(t,e){return this.dtFormatter(t,e).formatToParts()}formatInterval(t,e){return this.dtFormatter(t.start,e).dtf.formatRange(t.start.toJSDate(),t.end.toJSDate())}resolvedOptions(t,e){return this.dtFormatter(t,e).resolvedOptions()}num(t,e=0){if(this.opts.forceSimple)return q(t,e);let i={...this.opts};return e>0&&(i.padTo=e),this.loc.numberFormatter(i).format(t)}formatDateTimeFromString(t,e){let i=this.loc.listingMode()==="en",n=this.loc.outputCalendar&&this.loc.outputCalendar!=="gregory",r=(f,m)=>this.loc.extract(t,f,m),o=f=>t.isOffsetFixed&&t.offset===0&&f.allowZ?"Z":t.isValid?t.zone.formatOffset(t.ts,f.format):"",a=()=>i?Nl(t):r({hour:"numeric",hourCycle:"h12"},"dayperiod"),l=(f,m)=>i?Wl(t,f):r(m?{month:f}:{month:f,day:"numeric"},"month"),c=(f,m)=>i?Rl(t,f):r(m?{weekday:f}:{weekday:f,month:"long",day:"numeric"},"weekday"),h=f=>{let m=X.macroTokenToFormatOpts(f);return m?this.formatWithSystemDefault(t,m):f},u=f=>i?zl(t,f):r({era:f},"era"),d=f=>{switch(f){case"S":return this.num(t.millisecond);case"u":case"SSS":return this.num(t.millisecond,3);case"s":return this.num(t.second);case"ss":return this.num(t.second,2);case"uu":return this.num(Math.floor(t.millisecond/10),2);case"uuu":return this.num(Math.floor(t.millisecond/100));case"m":return this.num(t.minute);case"mm":return this.num(t.minute,2);case"h":return this.num(t.hour%12===0?12:t.hour%12);case"hh":return this.num(t.hour%12===0?12:t.hour%12,2);case"H":return this.num(t.hour);case"HH":return this.num(t.hour,2);case"Z":return o({format:"narrow",allowZ:this.opts.allowZ});case"ZZ":return o({format:"short",allowZ:this.opts.allowZ});case"ZZZ":return o({format:"techie",allowZ:this.opts.allowZ});case"ZZZZ":return t.zone.offsetName(t.ts,{format:"short",locale:this.loc.locale});case"ZZZZZ":return t.zone.offsetName(t.ts,{format:"long",locale:this.loc.locale});case"z":return t.zoneName;case"a":return a();case"d":return n?r({day:"numeric"},"day"):this.num(t.day);case"dd":return n?r({day:"2-digit"},"day"):this.num(t.day,2);case"c":return this.num(t.weekday);case"ccc":return c("short",!0);case"cccc":return c("long",!0);case"ccccc":return c("narrow",!0);case"E":return this.num(t.weekday);case"EEE":return c("short",!1);case"EEEE":return c("long",!1);case"EEEEE":return c("narrow",!1);case"L":return n?r({month:"numeric",day:"numeric"},"month"):this.num(t.month);case"LL":return n?r({month:"2-digit",day:"numeric"},"month"):this.num(t.month,2);case"LLL":return l("short",!0);case"LLLL":return l("long",!0);case"LLLLL":return l("narrow",!0);case"M":return n?r({month:"numeric"},"month"):this.num(t.month);case"MM":return n?r({month:"2-digit"},"month"):this.num(t.month,2);case"MMM":return l("short",!1);case"MMMM":return l("long",!1);case"MMMMM":return l("narrow",!1);case"y":return n?r({year:"numeric"},"year"):this.num(t.year);case"yy":return n?r({year:"2-digit"},"year"):this.num(t.year.toString().slice(-2),2);case"yyyy":return n?r({year:"numeric"},"year"):this.num(t.year,4);case"yyyyyy":return n?r({year:"numeric"},"year"):this.num(t.year,6);case"G":return u("short");case"GG":return u("long");case"GGGGG":return u("narrow");case"kk":return this.num(t.weekYear.toString().slice(-2),2);case"kkkk":return this.num(t.weekYear,4);case"W":return this.num(t.weekNumber);case"WW":return this.num(t.weekNumber,2);case"n":return this.num(t.localWeekNumber);case"nn":return this.num(t.localWeekNumber,2);case"ii":return this.num(t.localWeekYear.toString().slice(-2),2);case"iiii":return this.num(t.localWeekYear,4);case"o":return this.num(t.ordinal);case"ooo":return this.num(t.ordinal,3);case"q":return this.num(t.quarter);case"qq":return this.num(t.quarter,2);case"X":return this.num(Math.floor(t.ts/1e3));case"x":return this.num(t.ts);default:return h(f)}};return Vl(X.parseFormat(e),d)}formatDurationFromString(t,e){let i=l=>{switch(l[0]){case"S":return"millisecond";case"s":return"second";case"m":return"minute";case"h":return"hour";case"d":return"day";case"w":return"week";case"M":return"month";case"y":return"year";default:return null}},n=l=>c=>{let h=i(c);return h?this.num(l.get(h),c.length):c},r=X.parseFormat(e),o=r.reduce((l,{literal:c,val:h})=>c?l:l.concat(h),[]),a=t.shiftTo(...o.map(i).filter(l=>l));return Vl(r,n(a))}};var Bl=/[A-Za-z_+-]{1,256}(?::?\/[A-Za-z0-9_+-]{1,256}(?:\/[A-Za-z0-9_+-]{1,256})?)?/;function as(...s){let t=s.reduce((e,i)=>e+i.source,"");return RegExp(`^${t}$`)}function ls(...s){return t=>s.reduce(([e,i,n],r)=>{let[o,a,l]=r(t,n);return[{...e,...o},a||i,l]},[{},null,1]).slice(0,2)}function cs(s,...t){if(s==null)return[null,null];for(let[e,i]of t){let n=e.exec(s);if(n)return i(n)}return[null,null]}function $l(...s){return(t,e)=>{let i={},n;for(n=0;nf!==void 0&&(m||f&&h)?-f:f;return[{years:d(ue(e)),months:d(ue(i)),weeks:d(ue(n)),days:d(ue(r)),hours:d(ue(o)),minutes:d(ue(a)),seconds:d(ue(l),l==="-0"),milliseconds:d(ci(c),u)}]}var pm={GMT:0,EDT:-4*60,EST:-5*60,CDT:-5*60,CST:-6*60,MDT:-6*60,MST:-7*60,PDT:-7*60,PST:-8*60};function Qr(s,t,e,i,n,r,o){let a={year:t.length===2?hi(qt(t)):qt(t),month:qr.indexOf(e)+1,day:qt(i),hour:qt(n),minute:qt(r)};return o&&(a.second=qt(o)),s&&(a.weekday=s.length>3?Gr.indexOf(s)+1:Xr.indexOf(s)+1),a}var ym=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\d\d)(\d\d)))$/;function bm(s){let[,t,e,i,n,r,o,a,l,c,h,u]=s,d=Qr(t,n,i,e,r,o,a),f;return l?f=pm[l]:c?f=0:f=Se(h,u),[d,new G(f)]}function xm(s){return s.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").trim()}var _m=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d\d):(\d\d):(\d\d) GMT$/,wm=/^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\d\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d\d) (\d\d):(\d\d):(\d\d) GMT$/,Sm=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \d|\d\d) (\d\d):(\d\d):(\d\d) (\d{4})$/;function Hl(s){let[,t,e,i,n,r,o,a]=s;return[Qr(t,n,i,e,r,o,a),G.utcInstance]}function km(s){let[,t,e,i,n,r,o,a]=s;return[Qr(t,a,e,i,n,r,o),G.utcInstance]}var Mm=as(rm,Jr),Tm=as(om,Jr),vm=as(am,Jr),Om=as(Ul),Zl=ls(dm,hs,ui,di),Dm=ls(lm,hs,ui,di),Em=ls(cm,hs,ui,di),Im=ls(hs,ui,di);function ql(s){return cs(s,[Mm,Zl],[Tm,Dm],[vm,Em],[Om,Im])}function Gl(s){return cs(xm(s),[ym,bm])}function Xl(s){return cs(s,[_m,Hl],[wm,Hl],[Sm,km])}function Kl(s){return cs(s,[mm,gm])}var Cm=ls(hs);function Jl(s){return cs(s,[fm,Cm])}var Fm=as(hm,um),Am=as(Yl),Lm=ls(hs,ui,di);function Ql(s){return cs(s,[Fm,Zl],[Am,Lm])}var tc="Invalid Duration",sc={weeks:{days:7,hours:7*24,minutes:7*24*60,seconds:7*24*60*60,milliseconds:7*24*60*60*1e3},days:{hours:24,minutes:24*60,seconds:24*60*60,milliseconds:24*60*60*1e3},hours:{minutes:60,seconds:60*60,milliseconds:60*60*1e3},minutes:{seconds:60,milliseconds:60*1e3},seconds:{milliseconds:1e3}},Pm={years:{quarters:4,months:12,weeks:52,days:365,hours:365*24,minutes:365*24*60,seconds:365*24*60*60,milliseconds:365*24*60*60*1e3},quarters:{months:3,weeks:13,days:91,hours:91*24,minutes:91*24*60,seconds:91*24*60*60,milliseconds:91*24*60*60*1e3},months:{weeks:4,days:30,hours:30*24,minutes:30*24*60,seconds:30*24*60*60,milliseconds:30*24*60*60*1e3},...sc},kt=146097/400,us=146097/4800,Nm={years:{quarters:4,months:12,weeks:kt/7,days:kt,hours:kt*24,minutes:kt*24*60,seconds:kt*24*60*60,milliseconds:kt*24*60*60*1e3},quarters:{months:3,weeks:kt/28,days:kt/4,hours:kt*24/4,minutes:kt*24*60/4,seconds:kt*24*60*60/4,milliseconds:kt*24*60*60*1e3/4},months:{weeks:us/7,days:us,hours:us*24,minutes:us*24*60,seconds:us*24*60*60,milliseconds:us*24*60*60*1e3},...sc},Te=["years","quarters","months","weeks","days","hours","minutes","seconds","milliseconds"],Rm=Te.slice(0).reverse();function de(s,t,e=!1){let i={values:e?t.values:{...s.values,...t.values||{}},loc:s.loc.clone(t.loc),conversionAccuracy:t.conversionAccuracy||s.conversionAccuracy,matrix:t.matrix||s.matrix};return new C(i)}function ic(s,t){let e=t.milliseconds??0;for(let i of Rm.slice(1))t[i]&&(e+=t[i]*s[i].milliseconds);return e}function ec(s,t){let e=ic(s,t)<0?-1:1;Te.reduceRight((i,n)=>{if(D(t[n]))return i;if(i){let r=t[i]*e,o=s[n][i],a=Math.floor(r/o);t[n]+=a*e,t[i]-=a*o*e}return n},null),Te.reduce((i,n)=>{if(D(t[n]))return i;if(i){let r=t[i]%1;t[i]-=r,t[n]+=r*s[i][n]}return n},null)}function Wm(s){let t={};for(let[e,i]of Object.entries(s))i!==0&&(t[e]=i);return t}var C=class{constructor(t){let e=t.conversionAccuracy==="longterm"||!1,i=e?Nm:Pm;t.matrix&&(i=t.matrix),this.values=t.values,this.loc=t.loc||N.create(),this.conversionAccuracy=e?"longterm":"casual",this.invalid=t.invalid||null,this.matrix=i,this.isLuxonDuration=!0}static fromMillis(t,e){return C.fromObject({milliseconds:t},e)}static fromObject(t,e={}){if(t==null||typeof t!="object")throw new st(`Duration.fromObject: argument expected to be an object, got ${t===null?"null":typeof t}`);return new C({values:rs(t,C.normalizeUnit),loc:N.fromObject(e),conversionAccuracy:e.conversionAccuracy,matrix:e.matrix})}static fromDurationLike(t){if(zt(t))return C.fromMillis(t);if(C.isDuration(t))return t;if(typeof t=="object")return C.fromObject(t);throw new st(`Unknown duration argument ${t} of type ${typeof t}`)}static fromISO(t,e){let[i]=Kl(t);return i?C.fromObject(i,e):C.invalid("unparsable",`the input "${t}" can't be parsed as ISO 8601`)}static fromISOTime(t,e){let[i]=Jl(t);return i?C.fromObject(i,e):C.invalid("unparsable",`the input "${t}" can't be parsed as ISO 8601`)}static invalid(t,e=null){if(!t)throw new st("need to specify a reason the Duration is invalid");let i=t instanceof rt?t:new rt(t,e);if(z.throwOnInvalid)throw new Ki(i);return new C({invalid:i})}static normalizeUnit(t){let e={year:"years",years:"years",quarter:"quarters",quarters:"quarters",month:"months",months:"months",week:"weeks",weeks:"weeks",day:"days",days:"days",hour:"hours",hours:"hours",minute:"minutes",minutes:"minutes",second:"seconds",seconds:"seconds",millisecond:"milliseconds",milliseconds:"milliseconds"}[t&&t.toLowerCase()];if(!e)throw new ts(t);return e}static isDuration(t){return t&&t.isLuxonDuration||!1}get locale(){return this.isValid?this.loc.locale:null}get numberingSystem(){return this.isValid?this.loc.numberingSystem:null}toFormat(t,e={}){let i={...e,floor:e.round!==!1&&e.floor!==!1};return this.isValid?X.create(this.loc,i).formatDurationFromString(this,t):tc}toHuman(t={}){if(!this.isValid)return tc;let e=Te.map(i=>{let n=this.values[i];return D(n)?null:this.loc.numberFormatter({style:"unit",unitDisplay:"long",...t,unit:i.slice(0,-1)}).format(n)}).filter(i=>i);return this.loc.listFormatter({type:"conjunction",style:t.listStyle||"narrow",...t}).format(e)}toObject(){return this.isValid?{...this.values}:{}}toISO(){if(!this.isValid)return null;let t="P";return this.years!==0&&(t+=this.years+"Y"),(this.months!==0||this.quarters!==0)&&(t+=this.months+this.quarters*3+"M"),this.weeks!==0&&(t+=this.weeks+"W"),this.days!==0&&(t+=this.days+"D"),(this.hours!==0||this.minutes!==0||this.seconds!==0||this.milliseconds!==0)&&(t+="T"),this.hours!==0&&(t+=this.hours+"H"),this.minutes!==0&&(t+=this.minutes+"M"),(this.seconds!==0||this.milliseconds!==0)&&(t+=ss(this.seconds+this.milliseconds/1e3,3)+"S"),t==="P"&&(t+="T0S"),t}toISOTime(t={}){if(!this.isValid)return null;let e=this.toMillis();return e<0||e>=864e5?null:(t={suppressMilliseconds:!1,suppressSeconds:!1,includePrefix:!1,format:"extended",...t,includeOffset:!1},v.fromMillis(e,{zone:"UTC"}).toISOTime(t))}toJSON(){return this.toISO()}toString(){return this.toISO()}[Symbol.for("nodejs.util.inspect.custom")](){return this.isValid?`Duration { values: ${JSON.stringify(this.values)} }`:`Duration { Invalid, reason: ${this.invalidReason} }`}toMillis(){return this.isValid?ic(this.matrix,this.values):NaN}valueOf(){return this.toMillis()}plus(t){if(!this.isValid)return this;let e=C.fromDurationLike(t),i={};for(let n of Te)(he(e.values,n)||he(this.values,n))&&(i[n]=e.get(n)+this.get(n));return de(this,{values:i},!0)}minus(t){if(!this.isValid)return this;let e=C.fromDurationLike(t);return this.plus(e.negate())}mapUnits(t){if(!this.isValid)return this;let e={};for(let i of Object.keys(this.values))e[i]=Zr(t(this.values[i],i));return de(this,{values:e},!0)}get(t){return this[C.normalizeUnit(t)]}set(t){if(!this.isValid)return this;let e={...this.values,...rs(t,C.normalizeUnit)};return de(this,{values:e})}reconfigure({locale:t,numberingSystem:e,conversionAccuracy:i,matrix:n}={}){let o={loc:this.loc.clone({locale:t,numberingSystem:e}),matrix:n,conversionAccuracy:i};return de(this,o)}as(t){return this.isValid?this.shiftTo(t).get(t):NaN}normalize(){if(!this.isValid)return this;let t=this.toObject();return ec(this.matrix,t),de(this,{values:t},!0)}rescale(){if(!this.isValid)return this;let t=Wm(this.normalize().shiftToAll().toObject());return de(this,{values:t},!0)}shiftTo(...t){if(!this.isValid)return this;if(t.length===0)return this;t=t.map(o=>C.normalizeUnit(o));let e={},i={},n=this.toObject(),r;for(let o of Te)if(t.indexOf(o)>=0){r=o;let a=0;for(let c in i)a+=this.matrix[c][o]*i[c],i[c]=0;zt(n[o])&&(a+=n[o]);let l=Math.trunc(a);e[o]=l,i[o]=(a*1e3-l*1e3)/1e3}else zt(n[o])&&(i[o]=n[o]);for(let o in i)i[o]!==0&&(e[r]+=o===r?i[o]:i[o]/this.matrix[r][o]);return ec(this.matrix,e),de(this,{values:e},!0)}shiftToAll(){return this.isValid?this.shiftTo("years","months","weeks","days","hours","minutes","seconds","milliseconds"):this}negate(){if(!this.isValid)return this;let t={};for(let e of Object.keys(this.values))t[e]=this.values[e]===0?0:-this.values[e];return de(this,{values:t},!0)}get years(){return this.isValid?this.values.years||0:NaN}get quarters(){return this.isValid?this.values.quarters||0:NaN}get months(){return this.isValid?this.values.months||0:NaN}get weeks(){return this.isValid?this.values.weeks||0:NaN}get days(){return this.isValid?this.values.days||0:NaN}get hours(){return this.isValid?this.values.hours||0:NaN}get minutes(){return this.isValid?this.values.minutes||0:NaN}get seconds(){return this.isValid?this.values.seconds||0:NaN}get milliseconds(){return this.isValid?this.values.milliseconds||0:NaN}get isValid(){return this.invalid===null}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}equals(t){if(!this.isValid||!t.isValid||!this.loc.equals(t.loc))return!1;function e(i,n){return i===void 0||i===0?n===void 0||n===0:i===n}for(let i of Te)if(!e(this.values[i],t.values[i]))return!1;return!0}};var ds="Invalid Interval";function zm(s,t){return!s||!s.isValid?U.invalid("missing or invalid start"):!t||!t.isValid?U.invalid("missing or invalid end"):tt:!1}isBefore(t){return this.isValid?this.e<=t:!1}contains(t){return this.isValid?this.s<=t&&this.e>t:!1}set({start:t,end:e}={}){return this.isValid?U.fromDateTimes(t||this.s,e||this.e):this}splitAt(...t){if(!this.isValid)return[];let e=t.map(fs).filter(o=>this.contains(o)).sort((o,a)=>o.toMillis()-a.toMillis()),i=[],{s:n}=this,r=0;for(;n+this.e?this.e:o;i.push(U.fromDateTimes(n,a)),n=a,r+=1}return i}splitBy(t){let e=C.fromDurationLike(t);if(!this.isValid||!e.isValid||e.as("milliseconds")===0)return[];let{s:i}=this,n=1,r,o=[];for(;il*n));r=+a>+this.e?this.e:a,o.push(U.fromDateTimes(i,r)),i=r,n+=1}return o}divideEqually(t){return this.isValid?this.splitBy(this.length()/t).slice(0,t):[]}overlaps(t){return this.e>t.s&&this.s=t.e:!1}equals(t){return!this.isValid||!t.isValid?!1:this.s.equals(t.s)&&this.e.equals(t.e)}intersection(t){if(!this.isValid)return this;let e=this.s>t.s?this.s:t.s,i=this.e=i?null:U.fromDateTimes(e,i)}union(t){if(!this.isValid)return this;let e=this.st.e?this.e:t.e;return U.fromDateTimes(e,i)}static merge(t){let[e,i]=t.sort((n,r)=>n.s-r.s).reduce(([n,r],o)=>r?r.overlaps(o)||r.abutsStart(o)?[n,r.union(o)]:[n.concat([r]),o]:[n,o],[[],null]);return i&&e.push(i),e}static xor(t){let e=null,i=0,n=[],r=t.map(l=>[{time:l.s,type:"s"},{time:l.e,type:"e"}]),o=Array.prototype.concat(...r),a=o.sort((l,c)=>l.time-c.time);for(let l of a)i+=l.type==="s"?1:-1,i===1?e=l.time:(e&&+e!=+l.time&&n.push(U.fromDateTimes(e,l.time)),e=null);return U.merge(n)}difference(...t){return U.xor([this].concat(t)).map(e=>this.intersection(e)).filter(e=>e&&!e.isEmpty())}toString(){return this.isValid?`[${this.s.toISO()} \u2013 ${this.e.toISO()})`:ds}[Symbol.for("nodejs.util.inspect.custom")](){return this.isValid?`Interval { start: ${this.s.toISO()}, end: ${this.e.toISO()} }`:`Interval { Invalid, reason: ${this.invalidReason} }`}toLocaleString(t=ae,e={}){return this.isValid?X.create(this.s.loc.clone(e),t).formatInterval(this):ds}toISO(t){return this.isValid?`${this.s.toISO(t)}/${this.e.toISO(t)}`:ds}toISODate(){return this.isValid?`${this.s.toISODate()}/${this.e.toISODate()}`:ds}toISOTime(t){return this.isValid?`${this.s.toISOTime(t)}/${this.e.toISOTime(t)}`:ds}toFormat(t,{separator:e=" \u2013 "}={}){return this.isValid?`${this.s.toFormat(t)}${e}${this.e.toFormat(t)}`:ds}toDuration(t,e){return this.isValid?this.e.diff(this.s,t,e):C.invalid(this.invalidReason)}mapEndpoints(t){return U.fromDateTimes(t(this.s),t(this.e))}};var Gt=class{static hasDST(t=z.defaultZone){let e=v.now().setZone(t).set({month:12});return!t.isUniversal&&e.offset!==e.set({month:6}).offset}static isValidIANAZone(t){return nt.isValidZone(t)}static normalizeZone(t){return Et(t,z.defaultZone)}static getStartOfWeek({locale:t=null,locObj:e=null}={}){return(e||N.create(t)).getStartOfWeek()}static getMinimumDaysInFirstWeek({locale:t=null,locObj:e=null}={}){return(e||N.create(t)).getMinDaysInFirstWeek()}static getWeekendWeekdays({locale:t=null,locObj:e=null}={}){return(e||N.create(t)).getWeekendDays().slice()}static months(t="long",{locale:e=null,numberingSystem:i=null,locObj:n=null,outputCalendar:r="gregory"}={}){return(n||N.create(e,i,r)).months(t)}static monthsFormat(t="long",{locale:e=null,numberingSystem:i=null,locObj:n=null,outputCalendar:r="gregory"}={}){return(n||N.create(e,i,r)).months(t,!0)}static weekdays(t="long",{locale:e=null,numberingSystem:i=null,locObj:n=null}={}){return(n||N.create(e,i,null)).weekdays(t)}static weekdaysFormat(t="long",{locale:e=null,numberingSystem:i=null,locObj:n=null}={}){return(n||N.create(e,i,null)).weekdays(t,!0)}static meridiems({locale:t=null}={}){return N.create(t).meridiems()}static eras(t="short",{locale:e=null}={}){return N.create(e,null,"gregory").eras(t)}static features(){return{relative:nn(),localeWeek:rn()}}};function nc(s,t){let e=n=>n.toUTC(0,{keepLocalTime:!0}).startOf("day").valueOf(),i=e(t)-e(s);return Math.floor(C.fromMillis(i).as("days"))}function Vm(s,t,e){let i=[["years",(l,c)=>c.year-l.year],["quarters",(l,c)=>c.quarter-l.quarter+(c.year-l.year)*4],["months",(l,c)=>c.month-l.month+(c.year-l.year)*12],["weeks",(l,c)=>{let h=nc(l,c);return(h-h%7)/7}],["days",nc]],n={},r=s,o,a;for(let[l,c]of i)e.indexOf(l)>=0&&(o=l,n[l]=c(s,t),a=r.plus(n),a>t?(n[l]--,s=r.plus(n),s>t&&(a=s,n[l]--,s=r.plus(n))):s=a);return[s,n,a,o]}function rc(s,t,e,i){let[n,r,o,a]=Vm(s,t,e),l=t-n,c=e.filter(u=>["hours","minutes","seconds","milliseconds"].indexOf(u)>=0);c.length===0&&(o0?C.fromMillis(l,i).shiftTo(...c).plus(h):h}var to={arab:"[\u0660-\u0669]",arabext:"[\u06F0-\u06F9]",bali:"[\u1B50-\u1B59]",beng:"[\u09E6-\u09EF]",deva:"[\u0966-\u096F]",fullwide:"[\uFF10-\uFF19]",gujr:"[\u0AE6-\u0AEF]",hanidec:"[\u3007|\u4E00|\u4E8C|\u4E09|\u56DB|\u4E94|\u516D|\u4E03|\u516B|\u4E5D]",khmr:"[\u17E0-\u17E9]",knda:"[\u0CE6-\u0CEF]",laoo:"[\u0ED0-\u0ED9]",limb:"[\u1946-\u194F]",mlym:"[\u0D66-\u0D6F]",mong:"[\u1810-\u1819]",mymr:"[\u1040-\u1049]",orya:"[\u0B66-\u0B6F]",tamldec:"[\u0BE6-\u0BEF]",telu:"[\u0C66-\u0C6F]",thai:"[\u0E50-\u0E59]",tibt:"[\u0F20-\u0F29]",latn:"\\d"},oc={arab:[1632,1641],arabext:[1776,1785],bali:[6992,7001],beng:[2534,2543],deva:[2406,2415],fullwide:[65296,65303],gujr:[2790,2799],khmr:[6112,6121],knda:[3302,3311],laoo:[3792,3801],limb:[6470,6479],mlym:[3430,3439],mong:[6160,6169],mymr:[4160,4169],orya:[2918,2927],tamldec:[3046,3055],telu:[3174,3183],thai:[3664,3673],tibt:[3872,3881]},Hm=to.hanidec.replace(/[\[|\]]/g,"").split("");function ac(s){let t=parseInt(s,10);if(isNaN(t)){t="";for(let e=0;e=r&&i<=o&&(t+=i-r)}}return parseInt(t,10)}else return t}function Mt({numberingSystem:s},t=""){return new RegExp(`${to[s||"latn"]}${t}`)}var Bm="missing Intl.DateTimeFormat.formatToParts support";function V(s,t=e=>e){return{regex:s,deser:([e])=>t(ac(e))}}var $m=String.fromCharCode(160),hc=`[ ${$m}]`,uc=new RegExp(hc,"g");function jm(s){return s.replace(/\./g,"\\.?").replace(uc,hc)}function lc(s){return s.replace(/\./g,"").replace(uc," ").toLowerCase()}function It(s,t){return s===null?null:{regex:RegExp(s.map(jm).join("|")),deser:([e])=>s.findIndex(i=>lc(e)===lc(i))+t}}function cc(s,t){return{regex:s,deser:([,e,i])=>Se(e,i),groups:t}}function cn(s){return{regex:s,deser:([t])=>t}}function Um(s){return s.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")}function Ym(s,t){let e=Mt(t),i=Mt(t,"{2}"),n=Mt(t,"{3}"),r=Mt(t,"{4}"),o=Mt(t,"{6}"),a=Mt(t,"{1,2}"),l=Mt(t,"{1,3}"),c=Mt(t,"{1,6}"),h=Mt(t,"{1,9}"),u=Mt(t,"{2,4}"),d=Mt(t,"{4,6}"),f=p=>({regex:RegExp(Um(p.val)),deser:([y])=>y,literal:!0}),g=(p=>{if(s.literal)return f(p);switch(p.val){case"G":return It(t.eras("short"),0);case"GG":return It(t.eras("long"),0);case"y":return V(c);case"yy":return V(u,hi);case"yyyy":return V(r);case"yyyyy":return V(d);case"yyyyyy":return V(o);case"M":return V(a);case"MM":return V(i);case"MMM":return It(t.months("short",!0),1);case"MMMM":return It(t.months("long",!0),1);case"L":return V(a);case"LL":return V(i);case"LLL":return It(t.months("short",!1),1);case"LLLL":return It(t.months("long",!1),1);case"d":return V(a);case"dd":return V(i);case"o":return V(l);case"ooo":return V(n);case"HH":return V(i);case"H":return V(a);case"hh":return V(i);case"h":return V(a);case"mm":return V(i);case"m":return V(a);case"q":return V(a);case"qq":return V(i);case"s":return V(a);case"ss":return V(i);case"S":return V(l);case"SSS":return V(n);case"u":return cn(h);case"uu":return cn(a);case"uuu":return V(e);case"a":return It(t.meridiems(),0);case"kkkk":return V(r);case"kk":return V(u,hi);case"W":return V(a);case"WW":return V(i);case"E":case"c":return V(e);case"EEE":return It(t.weekdays("short",!1),1);case"EEEE":return It(t.weekdays("long",!1),1);case"ccc":return It(t.weekdays("short",!0),1);case"cccc":return It(t.weekdays("long",!0),1);case"Z":case"ZZ":return cc(new RegExp(`([+-]${a.source})(?::(${i.source}))?`),2);case"ZZZ":return cc(new RegExp(`([+-]${a.source})(${i.source})?`),2);case"z":return cn(/[a-z_+-/]{1,256}?/i);case" ":return cn(/[^\S\n\r]/);default:return f(p)}})(s)||{invalidReason:Bm};return g.token=s,g}var Zm={year:{"2-digit":"yy",numeric:"yyyyy"},month:{numeric:"M","2-digit":"MM",short:"MMM",long:"MMMM"},day:{numeric:"d","2-digit":"dd"},weekday:{short:"EEE",long:"EEEE"},dayperiod:"a",dayPeriod:"a",hour12:{numeric:"h","2-digit":"hh"},hour24:{numeric:"H","2-digit":"HH"},minute:{numeric:"m","2-digit":"mm"},second:{numeric:"s","2-digit":"ss"},timeZoneName:{long:"ZZZZZ",short:"ZZZ"}};function qm(s,t,e){let{type:i,value:n}=s;if(i==="literal"){let l=/^\s+$/.test(n);return{literal:!l,val:l?" ":n}}let r=t[i],o=i;i==="hour"&&(t.hour12!=null?o=t.hour12?"hour12":"hour24":t.hourCycle!=null?t.hourCycle==="h11"||t.hourCycle==="h12"?o="hour12":o="hour24":o=e.hour12?"hour12":"hour24");let a=Zm[o];if(typeof a=="object"&&(a=a[r]),a)return{literal:!1,val:a}}function Gm(s){return[`^${s.map(e=>e.regex).reduce((e,i)=>`${e}(${i.source})`,"")}$`,s]}function Xm(s,t,e){let i=s.match(t);if(i){let n={},r=1;for(let o in e)if(he(e,o)){let a=e[o],l=a.groups?a.groups+1:1;!a.literal&&a.token&&(n[a.token.val[0]]=a.deser(i.slice(r,r+l))),r+=l}return[i,n]}else return[i,{}]}function Km(s){let t=r=>{switch(r){case"S":return"millisecond";case"s":return"second";case"m":return"minute";case"h":case"H":return"hour";case"d":return"day";case"o":return"ordinal";case"L":case"M":return"month";case"y":return"year";case"E":case"c":return"weekday";case"W":return"weekNumber";case"k":return"weekYear";case"q":return"quarter";default:return null}},e=null,i;return D(s.z)||(e=nt.create(s.z)),D(s.Z)||(e||(e=new G(s.Z)),i=s.Z),D(s.q)||(s.M=(s.q-1)*3+1),D(s.h)||(s.h<12&&s.a===1?s.h+=12:s.h===12&&s.a===0&&(s.h=0)),s.G===0&&s.y&&(s.y=-s.y),D(s.u)||(s.S=ci(s.u)),[Object.keys(s).reduce((r,o)=>{let a=t(o);return a&&(r[a]=s[o]),r},{}),e,i]}var eo=null;function Jm(){return eo||(eo=v.fromMillis(1555555555555)),eo}function Qm(s,t){if(s.literal)return s;let e=X.macroTokenToFormatOpts(s.val),i=no(e,t);return i==null||i.includes(void 0)?s:i}function so(s,t){return Array.prototype.concat(...s.map(e=>Qm(e,t)))}function io(s,t,e){let i=so(X.parseFormat(e),s),n=i.map(o=>Ym(o,s)),r=n.find(o=>o.invalidReason);if(r)return{input:t,tokens:i,invalidReason:r.invalidReason};{let[o,a]=Gm(n),l=RegExp(o,"i"),[c,h]=Xm(t,l,a),[u,d,f]=h?Km(h):[null,null,void 0];if(he(h,"a")&&he(h,"H"))throw new vt("Can't include meridiem when specifying 24-hour format");return{input:t,tokens:i,regex:l,rawMatches:c,matches:h,result:u,zone:d,specificOffset:f}}}function dc(s,t,e){let{result:i,zone:n,specificOffset:r,invalidReason:o}=io(s,t,e);return[i,n,r,o]}function no(s,t){if(!s)return null;let i=X.create(t,s).dtFormatter(Jm()),n=i.formatToParts(),r=i.resolvedOptions();return n.map(o=>qm(o,s,r))}var ro="Invalid DateTime",fc=864e13;function hn(s){return new rt("unsupported zone",`the zone "${s.name}" is not supported`)}function oo(s){return s.weekData===null&&(s.weekData=oi(s.c)),s.weekData}function ao(s){return s.localWeekData===null&&(s.localWeekData=oi(s.c,s.loc.getMinDaysInFirstWeek(),s.loc.getStartOfWeek())),s.localWeekData}function ve(s,t){let e={ts:s.ts,zone:s.zone,c:s.c,o:s.o,loc:s.loc,invalid:s.invalid};return new v({...e,...t,old:e})}function _c(s,t,e){let i=s-t*60*1e3,n=e.offset(i);if(t===n)return[i,t];i-=(n-t)*60*1e3;let r=e.offset(i);return n===r?[i,n]:[s-Math.min(n,r)*60*1e3,Math.max(n,r)]}function un(s,t){s+=t*60*1e3;let e=new Date(s);return{year:e.getUTCFullYear(),month:e.getUTCMonth()+1,day:e.getUTCDate(),hour:e.getUTCHours(),minute:e.getUTCMinutes(),second:e.getUTCSeconds(),millisecond:e.getUTCMilliseconds()}}function fn(s,t,e){return _c(es(s),t,e)}function mc(s,t){let e=s.o,i=s.c.year+Math.trunc(t.years),n=s.c.month+Math.trunc(t.months)+Math.trunc(t.quarters)*3,r={...s.c,year:i,month:n,day:Math.min(s.c.day,ns(i,n))+Math.trunc(t.days)+Math.trunc(t.weeks)*7},o=C.fromObject({years:t.years-Math.trunc(t.years),quarters:t.quarters-Math.trunc(t.quarters),months:t.months-Math.trunc(t.months),weeks:t.weeks-Math.trunc(t.weeks),days:t.days-Math.trunc(t.days),hours:t.hours,minutes:t.minutes,seconds:t.seconds,milliseconds:t.milliseconds}).as("milliseconds"),a=es(r),[l,c]=_c(a,e,s.zone);return o!==0&&(l+=o,c=s.zone.offset(l)),{ts:l,o:c}}function fi(s,t,e,i,n,r){let{setZone:o,zone:a}=e;if(s&&Object.keys(s).length!==0||t){let l=t||a,c=v.fromObject(s,{...e,zone:l,specificOffset:r});return o?c:c.setZone(a)}else return v.invalid(new rt("unparsable",`the input "${n}" can't be parsed as ${i}`))}function dn(s,t,e=!0){return s.isValid?X.create(N.create("en-US"),{allowZ:e,forceSimple:!0}).formatDateTimeFromString(s,t):null}function lo(s,t){let e=s.c.year>9999||s.c.year<0,i="";return e&&s.c.year>=0&&(i+="+"),i+=q(s.c.year,e?6:4),t?(i+="-",i+=q(s.c.month),i+="-",i+=q(s.c.day)):(i+=q(s.c.month),i+=q(s.c.day)),i}function gc(s,t,e,i,n,r){let o=q(s.c.hour);return t?(o+=":",o+=q(s.c.minute),(s.c.millisecond!==0||s.c.second!==0||!e)&&(o+=":")):o+=q(s.c.minute),(s.c.millisecond!==0||s.c.second!==0||!e)&&(o+=q(s.c.second),(s.c.millisecond!==0||!i)&&(o+=".",o+=q(s.c.millisecond,3))),n&&(s.isOffsetFixed&&s.offset===0&&!r?o+="Z":s.o<0?(o+="-",o+=q(Math.trunc(-s.o/60)),o+=":",o+=q(Math.trunc(-s.o%60))):(o+="+",o+=q(Math.trunc(s.o/60)),o+=":",o+=q(Math.trunc(s.o%60)))),r&&(o+="["+s.zone.ianaName+"]"),o}var wc={month:1,day:1,hour:0,minute:0,second:0,millisecond:0},tg={weekNumber:1,weekday:1,hour:0,minute:0,second:0,millisecond:0},eg={ordinal:1,hour:0,minute:0,second:0,millisecond:0},Sc=["year","month","day","hour","minute","second","millisecond"],sg=["weekYear","weekNumber","weekday","hour","minute","second","millisecond"],ig=["year","ordinal","hour","minute","second","millisecond"];function ng(s){let t={year:"year",years:"year",month:"month",months:"month",day:"day",days:"day",hour:"hour",hours:"hour",minute:"minute",minutes:"minute",quarter:"quarter",quarters:"quarter",second:"second",seconds:"second",millisecond:"millisecond",milliseconds:"millisecond",weekday:"weekday",weekdays:"weekday",weeknumber:"weekNumber",weeksnumber:"weekNumber",weeknumbers:"weekNumber",weekyear:"weekYear",weekyears:"weekYear",ordinal:"ordinal"}[s.toLowerCase()];if(!t)throw new ts(s);return t}function pc(s){switch(s.toLowerCase()){case"localweekday":case"localweekdays":return"localWeekday";case"localweeknumber":case"localweeknumbers":return"localWeekNumber";case"localweekyear":case"localweekyears":return"localWeekYear";default:return ng(s)}}function yc(s,t){let e=Et(t.zone,z.defaultZone),i=N.fromObject(t),n=z.now(),r,o;if(D(s.year))r=n;else{for(let c of Sc)D(s[c])&&(s[c]=wc[c]);let a=jr(s)||Ur(s);if(a)return v.invalid(a);let l=e.offset(n);[r,o]=fn(s,l,e)}return new v({ts:r,zone:e,loc:i,o})}function bc(s,t,e){let i=D(e.round)?!0:e.round,n=(o,a)=>(o=ss(o,i||e.calendary?0:2,!0),t.loc.clone(e).relFormatter(e).format(o,a)),r=o=>e.calendary?t.hasSame(s,o)?0:t.startOf(o).diff(s.startOf(o),o).get(o):t.diff(s,o).get(o);if(e.unit)return n(r(e.unit),e.unit);for(let o of e.units){let a=r(o);if(Math.abs(a)>=1)return n(a,o)}return n(s>t?-0:0,e.units[e.units.length-1])}function xc(s){let t={},e;return s.length>0&&typeof s[s.length-1]=="object"?(t=s[s.length-1],e=Array.from(s).slice(0,s.length-1)):e=Array.from(s),[t,e]}var v=class{constructor(t){let e=t.zone||z.defaultZone,i=t.invalid||(Number.isNaN(t.ts)?new rt("invalid input"):null)||(e.isValid?null:hn(e));this.ts=D(t.ts)?z.now():t.ts;let n=null,r=null;if(!i)if(t.old&&t.old.ts===this.ts&&t.old.zone.equals(e))[n,r]=[t.old.c,t.old.o];else{let a=e.offset(this.ts);n=un(this.ts,a),i=Number.isNaN(n.year)?new rt("invalid input"):null,n=i?null:n,r=i?null:a}this._zone=e,this.loc=t.loc||N.create(),this.invalid=i,this.weekData=null,this.localWeekData=null,this.c=n,this.o=r,this.isLuxonDateTime=!0}static now(){return new v({})}static local(){let[t,e]=xc(arguments),[i,n,r,o,a,l,c]=e;return yc({year:i,month:n,day:r,hour:o,minute:a,second:l,millisecond:c},t)}static utc(){let[t,e]=xc(arguments),[i,n,r,o,a,l,c]=e;return t.zone=G.utcInstance,yc({year:i,month:n,day:r,hour:o,minute:a,second:l,millisecond:c},t)}static fromJSDate(t,e={}){let i=Al(t)?t.valueOf():NaN;if(Number.isNaN(i))return v.invalid("invalid input");let n=Et(e.zone,z.defaultZone);return n.isValid?new v({ts:i,zone:n,loc:N.fromObject(e)}):v.invalid(hn(n))}static fromMillis(t,e={}){if(zt(t))return t<-fc||t>fc?v.invalid("Timestamp out of range"):new v({ts:t,zone:Et(e.zone,z.defaultZone),loc:N.fromObject(e)});throw new st(`fromMillis requires a numerical input, but received a ${typeof t} with value ${t}`)}static fromSeconds(t,e={}){if(zt(t))return new v({ts:t*1e3,zone:Et(e.zone,z.defaultZone),loc:N.fromObject(e)});throw new st("fromSeconds requires a numerical input")}static fromObject(t,e={}){t=t||{};let i=Et(e.zone,z.defaultZone);if(!i.isValid)return v.invalid(hn(i));let n=N.fromObject(e),r=rs(t,pc),{minDaysInFirstWeek:o,startOfWeek:a}=$r(r,n),l=z.now(),c=D(e.specificOffset)?i.offset(l):e.specificOffset,h=!D(r.ordinal),u=!D(r.year),d=!D(r.month)||!D(r.day),f=u||d,m=r.weekYear||r.weekNumber;if((f||h)&&m)throw new vt("Can't mix weekYear/weekNumber units with year/month/day or ordinals");if(d&&h)throw new vt("Can't mix ordinal dates with month/day");let g=m||r.weekday&&!f,p,y,b=un(l,c);g?(p=sg,y=tg,b=oi(b,o,a)):h?(p=ig,y=eg,b=ln(b)):(p=Sc,y=wc);let _=!1;for(let F of p){let W=r[F];D(W)?_?r[F]=y[F]:r[F]=b[F]:_=!0}let w=g?Il(r,o,a):h?Cl(r):jr(r),x=w||Ur(r);if(x)return v.invalid(x);let S=g?Hr(r,o,a):h?Br(r):r,[k,O]=fn(S,c,i),T=new v({ts:k,zone:i,o:O,loc:n});return r.weekday&&f&&t.weekday!==T.weekday?v.invalid("mismatched weekday",`you can't specify both a weekday of ${r.weekday} and a date of ${T.toISO()}`):T}static fromISO(t,e={}){let[i,n]=ql(t);return fi(i,n,e,"ISO 8601",t)}static fromRFC2822(t,e={}){let[i,n]=Gl(t);return fi(i,n,e,"RFC 2822",t)}static fromHTTP(t,e={}){let[i,n]=Xl(t);return fi(i,n,e,"HTTP",e)}static fromFormat(t,e,i={}){if(D(t)||D(e))throw new st("fromFormat requires an input string and a format");let{locale:n=null,numberingSystem:r=null}=i,o=N.fromOpts({locale:n,numberingSystem:r,defaultToEN:!0}),[a,l,c,h]=dc(o,t,e);return h?v.invalid(h):fi(a,l,i,`format ${e}`,t,c)}static fromString(t,e,i={}){return v.fromFormat(t,e,i)}static fromSQL(t,e={}){let[i,n]=Ql(t);return fi(i,n,e,"SQL",t)}static invalid(t,e=null){if(!t)throw new st("need to specify a reason the DateTime is invalid");let i=t instanceof rt?t:new rt(t,e);if(z.throwOnInvalid)throw new Gi(i);return new v({invalid:i})}static isDateTime(t){return t&&t.isLuxonDateTime||!1}static parseFormatForOpts(t,e={}){let i=no(t,N.fromObject(e));return i?i.map(n=>n?n.val:null).join(""):null}static expandFormat(t,e={}){return so(X.parseFormat(t),N.fromObject(e)).map(n=>n.val).join("")}get(t){return this[t]}get isValid(){return this.invalid===null}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}get locale(){return this.isValid?this.loc.locale:null}get numberingSystem(){return this.isValid?this.loc.numberingSystem:null}get outputCalendar(){return this.isValid?this.loc.outputCalendar:null}get zone(){return this._zone}get zoneName(){return this.isValid?this.zone.name:null}get year(){return this.isValid?this.c.year:NaN}get quarter(){return this.isValid?Math.ceil(this.c.month/3):NaN}get month(){return this.isValid?this.c.month:NaN}get day(){return this.isValid?this.c.day:NaN}get hour(){return this.isValid?this.c.hour:NaN}get minute(){return this.isValid?this.c.minute:NaN}get second(){return this.isValid?this.c.second:NaN}get millisecond(){return this.isValid?this.c.millisecond:NaN}get weekYear(){return this.isValid?oo(this).weekYear:NaN}get weekNumber(){return this.isValid?oo(this).weekNumber:NaN}get weekday(){return this.isValid?oo(this).weekday:NaN}get isWeekend(){return this.isValid&&this.loc.getWeekendDays().includes(this.weekday)}get localWeekday(){return this.isValid?ao(this).weekday:NaN}get localWeekNumber(){return this.isValid?ao(this).weekNumber:NaN}get localWeekYear(){return this.isValid?ao(this).weekYear:NaN}get ordinal(){return this.isValid?ln(this.c).ordinal:NaN}get monthShort(){return this.isValid?Gt.months("short",{locObj:this.loc})[this.month-1]:null}get monthLong(){return this.isValid?Gt.months("long",{locObj:this.loc})[this.month-1]:null}get weekdayShort(){return this.isValid?Gt.weekdays("short",{locObj:this.loc})[this.weekday-1]:null}get weekdayLong(){return this.isValid?Gt.weekdays("long",{locObj:this.loc})[this.weekday-1]:null}get offset(){return this.isValid?+this.o:NaN}get offsetNameShort(){return this.isValid?this.zone.offsetName(this.ts,{format:"short",locale:this.locale}):null}get offsetNameLong(){return this.isValid?this.zone.offsetName(this.ts,{format:"long",locale:this.locale}):null}get isOffsetFixed(){return this.isValid?this.zone.isUniversal:null}get isInDST(){return this.isOffsetFixed?!1:this.offset>this.set({month:1,day:1}).offset||this.offset>this.set({month:5}).offset}getPossibleOffsets(){if(!this.isValid||this.isOffsetFixed)return[this];let t=864e5,e=6e4,i=es(this.c),n=this.zone.offset(i-t),r=this.zone.offset(i+t),o=this.zone.offset(i-n*e),a=this.zone.offset(i-r*e);if(o===a)return[this];let l=i-o*e,c=i-a*e,h=un(l,o),u=un(c,a);return h.hour===u.hour&&h.minute===u.minute&&h.second===u.second&&h.millisecond===u.millisecond?[ve(this,{ts:l}),ve(this,{ts:c})]:[this]}get isInLeapYear(){return Me(this.year)}get daysInMonth(){return ns(this.year,this.month)}get daysInYear(){return this.isValid?ce(this.year):NaN}get weeksInWeekYear(){return this.isValid?ke(this.weekYear):NaN}get weeksInLocalWeekYear(){return this.isValid?ke(this.localWeekYear,this.loc.getMinDaysInFirstWeek(),this.loc.getStartOfWeek()):NaN}resolvedLocaleOptions(t={}){let{locale:e,numberingSystem:i,calendar:n}=X.create(this.loc.clone(t),t).resolvedOptions(this);return{locale:e,numberingSystem:i,outputCalendar:n}}toUTC(t=0,e={}){return this.setZone(G.instance(t),e)}toLocal(){return this.setZone(z.defaultZone)}setZone(t,{keepLocalTime:e=!1,keepCalendarTime:i=!1}={}){if(t=Et(t,z.defaultZone),t.equals(this.zone))return this;if(t.isValid){let n=this.ts;if(e||i){let r=t.offset(this.ts),o=this.toObject();[n]=fn(o,r,t)}return ve(this,{ts:n,zone:t})}else return v.invalid(hn(t))}reconfigure({locale:t,numberingSystem:e,outputCalendar:i}={}){let n=this.loc.clone({locale:t,numberingSystem:e,outputCalendar:i});return ve(this,{loc:n})}setLocale(t){return this.reconfigure({locale:t})}set(t){if(!this.isValid)return this;let e=rs(t,pc),{minDaysInFirstWeek:i,startOfWeek:n}=$r(e,this.loc),r=!D(e.weekYear)||!D(e.weekNumber)||!D(e.weekday),o=!D(e.ordinal),a=!D(e.year),l=!D(e.month)||!D(e.day),c=a||l,h=e.weekYear||e.weekNumber;if((c||o)&&h)throw new vt("Can't mix weekYear/weekNumber units with year/month/day or ordinals");if(l&&o)throw new vt("Can't mix ordinal dates with month/day");let u;r?u=Hr({...oi(this.c,i,n),...e},i,n):D(e.ordinal)?(u={...this.toObject(),...e},D(e.day)&&(u.day=Math.min(ns(u.year,u.month),u.day))):u=Br({...ln(this.c),...e});let[d,f]=fn(u,this.o,this.zone);return ve(this,{ts:d,o:f})}plus(t){if(!this.isValid)return this;let e=C.fromDurationLike(t);return ve(this,mc(this,e))}minus(t){if(!this.isValid)return this;let e=C.fromDurationLike(t).negate();return ve(this,mc(this,e))}startOf(t,{useLocaleWeeks:e=!1}={}){if(!this.isValid)return this;let i={},n=C.normalizeUnit(t);switch(n){case"years":i.month=1;case"quarters":case"months":i.day=1;case"weeks":case"days":i.hour=0;case"hours":i.minute=0;case"minutes":i.second=0;case"seconds":i.millisecond=0;break;case"milliseconds":break}if(n==="weeks")if(e){let r=this.loc.getStartOfWeek(),{weekday:o}=this;othis.valueOf(),a=o?this:t,l=o?t:this,c=rc(a,l,r,n);return o?c.negate():c}diffNow(t="milliseconds",e={}){return this.diff(v.now(),t,e)}until(t){return this.isValid?U.fromDateTimes(this,t):this}hasSame(t,e,i){if(!this.isValid)return!1;let n=t.valueOf(),r=this.setZone(t.zone,{keepLocalTime:!0});return r.startOf(e,i)<=n&&n<=r.endOf(e,i)}equals(t){return this.isValid&&t.isValid&&this.valueOf()===t.valueOf()&&this.zone.equals(t.zone)&&this.loc.equals(t.loc)}toRelative(t={}){if(!this.isValid)return null;let e=t.base||v.fromObject({},{zone:this.zone}),i=t.padding?thise.valueOf(),Math.min)}static max(...t){if(!t.every(v.isDateTime))throw new st("max requires all arguments be DateTimes");return Yr(t,e=>e.valueOf(),Math.max)}static fromFormatExplain(t,e,i={}){let{locale:n=null,numberingSystem:r=null}=i,o=N.fromOpts({locale:n,numberingSystem:r,defaultToEN:!0});return io(o,t,e)}static fromStringExplain(t,e,i={}){return v.fromFormatExplain(t,e,i)}static get DATE_SHORT(){return ae}static get DATE_MED(){return zs}static get DATE_MED_WITH_WEEKDAY(){return Tr}static get DATE_FULL(){return Vs}static get DATE_HUGE(){return Hs}static get TIME_SIMPLE(){return Bs}static get TIME_WITH_SECONDS(){return $s}static get TIME_WITH_SHORT_OFFSET(){return js}static get TIME_WITH_LONG_OFFSET(){return Us}static get TIME_24_SIMPLE(){return Ys}static get TIME_24_WITH_SECONDS(){return Zs}static get TIME_24_WITH_SHORT_OFFSET(){return qs}static get TIME_24_WITH_LONG_OFFSET(){return Gs}static get DATETIME_SHORT(){return Xs}static get DATETIME_SHORT_WITH_SECONDS(){return Ks}static get DATETIME_MED(){return Js}static get DATETIME_MED_WITH_SECONDS(){return Qs}static get DATETIME_MED_WITH_WEEKDAY(){return vr}static get DATETIME_FULL(){return ti}static get DATETIME_FULL_WITH_SECONDS(){return ei}static get DATETIME_HUGE(){return si}static get DATETIME_HUGE_WITH_SECONDS(){return ii}};function fs(s){if(v.isDateTime(s))return s;if(s&&s.valueOf&&zt(s.valueOf()))return v.fromJSDate(s);if(s&&typeof s=="object")return v.fromObject(s);throw new st(`Unknown datetime argument: ${s}, of type ${typeof s}`)}var rg={datetime:v.DATETIME_MED_WITH_SECONDS,millisecond:"h:mm:ss.SSS a",second:v.TIME_WITH_SECONDS,minute:v.TIME_SIMPLE,hour:{hour:"numeric"},day:{day:"numeric",month:"short"},week:"DD",month:{month:"short",year:"numeric"},quarter:"'Q'q - yyyy",year:{year:"numeric"}};kr._date.override({_id:"luxon",_create:function(s){return v.fromMillis(s,this.options)},init(s){this.options.locale||(this.options.locale=s.locale)},formats:function(){return rg},parse:function(s,t){let e=this.options,i=typeof s;return s===null||i==="undefined"?null:(i==="number"?s=this._create(s):i==="string"?typeof t=="string"?s=v.fromFormat(s,t,e):s=v.fromISO(s,e):s instanceof Date?s=v.fromJSDate(s,e):i==="object"&&!(s instanceof v)&&(s=v.fromObject(s,e)),s.isValid?s.valueOf():null)},format:function(s,t){let e=this._create(s);return typeof t=="string"?e.toFormat(t):e.toLocaleString(t)},add:function(s,t,e){let i={};return i[e]=t,this._create(s).plus(i).valueOf()},diff:function(s,t,e){return this._create(s).diff(this._create(t)).as(e).valueOf()},startOf:function(s,t,e){if(t==="isoWeek"){e=Math.trunc(Math.min(Math.max(0,e),6));let i=this._create(s);return i.minus({days:(i.weekday-e+7)%7}).startOf("day").valueOf()}return t?this._create(s).startOf(t).valueOf():s},endOf:function(s,t){return this._create(s).endOf(t).valueOf()}});function mn({cachedData:s,options:t,type:e}){return{init:function(){this.initChart(),this.$wire.$on("updateChartData",({data:i})=>{mn=this.getChart(),mn.data=i,mn.update("resize")}),Alpine.effect(()=>{Alpine.store("theme"),this.$nextTick(()=>{this.getChart()&&(this.getChart().destroy(),this.initChart())})}),window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",()=>{Alpine.store("theme")==="system"&&this.$nextTick(()=>{this.getChart().destroy(),this.initChart()})})},initChart:function(i=null){var o,a,l,c,h,u,d;Rt.defaults.animation.duration=0,Rt.defaults.backgroundColor=getComputedStyle(this.$refs.backgroundColorElement).color;let n=getComputedStyle(this.$refs.borderColorElement).color;Rt.defaults.borderColor=n,Rt.defaults.color=getComputedStyle(this.$refs.textColorElement).color,Rt.defaults.font.family=getComputedStyle(this.$el).fontFamily,Rt.defaults.plugins.legend.labels.boxWidth=12,Rt.defaults.plugins.legend.position="bottom";let r=getComputedStyle(this.$refs.gridColorElement).color;return t??(t={}),t.borderWidth??(t.borderWidth=2),t.pointBackgroundColor??(t.pointBackgroundColor=n),t.pointHitRadius??(t.pointHitRadius=4),t.pointRadius??(t.pointRadius=2),t.scales??(t.scales={}),(o=t.scales).x??(o.x={}),(a=t.scales.x).grid??(a.grid={}),t.scales.x.grid.color=r,(l=t.scales.x.grid).display??(l.display=!1),(c=t.scales.x.grid).drawBorder??(c.drawBorder=!1),(h=t.scales).y??(h.y={}),(u=t.scales.y).grid??(u.grid={}),t.scales.y.grid.color=r,(d=t.scales.y.grid).drawBorder??(d.drawBorder=!1),new Rt(this.$refs.canvas,{type:e,data:i??s,options:t,plugins:window.filamentChartJsPlugins??[]})},getChart:function(){return Rt.getChart(this.$refs.canvas)}}}export{mn as default}; +/*! Bundled license information: + +chart.js/dist/chunks/helpers.segment.mjs: + (*! + * Chart.js v3.9.1 + * https://www.chartjs.org + * (c) 2022 Chart.js Contributors + * Released under the MIT License + *) + +chart.js/dist/chunks/helpers.segment.mjs: + (*! + * @kurkle/color v0.2.1 + * https://github.com/kurkle/color#readme + * (c) 2022 Jukka Kurkela + * Released under the MIT License + *) + +chart.js/dist/chart.mjs: + (*! + * Chart.js v3.9.1 + * https://www.chartjs.org + * (c) 2022 Chart.js Contributors + * Released under the MIT License + *) + +chartjs-adapter-luxon/dist/chartjs-adapter-luxon.esm.js: + (*! + * chartjs-adapter-luxon v1.3.1 + * https://www.chartjs.org + * (c) 2023 chartjs-adapter-luxon Contributors + * Released under the MIT license + *) +*/ diff --git a/public/js/filament/widgets/components/stats-overview/stat/chart.js b/public/js/filament/widgets/components/stats-overview/stat/chart.js new file mode 100644 index 0000000..51cd7e6 --- /dev/null +++ b/public/js/filament/widgets/components/stats-overview/stat/chart.js @@ -0,0 +1,29 @@ +function rt(){}var Hs=function(){let i=0;return function(){return i++}}();function T(i){return i===null||typeof i>"u"}function I(i){if(Array.isArray&&Array.isArray(i))return!0;let t=Object.prototype.toString.call(i);return t.slice(0,7)==="[object"&&t.slice(-6)==="Array]"}function D(i){return i!==null&&Object.prototype.toString.call(i)==="[object Object]"}var W=i=>(typeof i=="number"||i instanceof Number)&&isFinite(+i);function Q(i,t){return W(i)?i:t}function C(i,t){return typeof i>"u"?t:i}var js=(i,t)=>typeof i=="string"&&i.endsWith("%")?parseFloat(i)/100:i/t,Di=(i,t)=>typeof i=="string"&&i.endsWith("%")?parseFloat(i)/100*t:+i;function z(i,t,e){if(i&&typeof i.call=="function")return i.apply(e,t)}function E(i,t,e,s){let n,o,a;if(I(i))if(o=i.length,s)for(n=o-1;n>=0;n--)t.call(e,i[n],n);else for(n=0;ni,x:i=>i.x,y:i=>i.y};function gt(i,t){return(Ds[t]||(Ds[t]=Io(t)))(i)}function Io(i){let t=zo(i);return e=>{for(let s of t){if(s==="")break;e=e&&e[s]}return e}}function zo(i){let t=i.split("."),e=[],s="";for(let n of t)s+=n,s.endsWith("\\")?s=s.slice(0,-1)+".":(e.push(s),s="");return e}function Ue(i){return i.charAt(0).toUpperCase()+i.slice(1)}var J=i=>typeof i<"u",ft=i=>typeof i=="function",Oi=(i,t)=>{if(i.size!==t.size)return!1;for(let e of i)if(!t.has(e))return!1;return!0};function Ys(i){return i.type==="mouseup"||i.type==="click"||i.type==="contextmenu"}var B=Math.PI,F=2*B,Bo=F+B,$e=Number.POSITIVE_INFINITY,Vo=B/180,V=B/2,fe=B/4,Os=B*2/3,tt=Math.log10,ot=Math.sign;function Ai(i){let t=Math.round(i);i=Kt(i,t,i/1e3)?t:i;let e=Math.pow(10,Math.floor(tt(i))),s=i/e;return(s<=1?1:s<=2?2:s<=5?5:10)*e}function Xs(i){let t=[],e=Math.sqrt(i),s;for(s=1;sn-o).pop(),t}function Rt(i){return!isNaN(parseFloat(i))&&isFinite(i)}function Kt(i,t,e){return Math.abs(i-t)=i}function Ti(i,t,e){let s,n,o;for(s=0,n=i.length;sl&&c=Math.min(t,e)-s&&i<=Math.max(t,e)+s}function qe(i,t,e){e=e||(a=>i[a]1;)o=n+s>>1,e(o)?n=o:s=o;return{lo:n,hi:s}}var at=(i,t,e,s)=>qe(i,e,s?n=>i[n][t]<=e:n=>i[n][t]qe(i,e,s=>i[s][t]>=e);function Gs(i,t,e){let s=0,n=i.length;for(;ss&&i[n-1]>e;)n--;return s>0||n{let s="_onData"+Ue(e),n=i[e];Object.defineProperty(i,e,{configurable:!0,enumerable:!1,value(...o){let a=n.apply(this,o);return i._chartjs.listeners.forEach(r=>{typeof r[s]=="function"&&r[s](...o)}),a}})})}function Ei(i,t){let e=i._chartjs;if(!e)return;let s=e.listeners,n=s.indexOf(t);n!==-1&&s.splice(n,1),!(s.length>0)&&(Zs.forEach(o=>{delete i[o]}),delete i._chartjs)}function Fi(i){let t=new Set,e,s;for(e=0,s=i.length;e"u"?function(i){return i()}:window.requestAnimationFrame}();function zi(i,t,e){let s=e||(a=>Array.prototype.slice.call(a)),n=!1,o=[];return function(...a){o=s(a),n||(n=!0,Ii.call(window,()=>{n=!1,i.apply(t,o)}))}}function Qs(i,t){let e;return function(...s){return t?(clearTimeout(e),e=setTimeout(i,t,s)):i.apply(this,s),t}}var Ge=i=>i==="start"?"left":i==="end"?"right":"center",X=(i,t,e)=>i==="start"?t:i==="end"?e:(t+e)/2,tn=(i,t,e,s)=>i===(s?"left":"right")?e:i==="center"?(t+e)/2:t;function Bi(i,t,e){let s=t.length,n=0,o=s;if(i._sorted){let{iScale:a,_parsed:r}=i,l=a.axis,{min:c,max:h,minDefined:d,maxDefined:u}=a.getUserBounds();d&&(n=Y(Math.min(at(r,a.axis,c).lo,e?s:at(t,l,a.getPixelForValue(c)).lo),0,s-1)),u?o=Y(Math.max(at(r,a.axis,h,!0).hi+1,e?0:at(t,l,a.getPixelForValue(h),!0).hi+1),n,s)-n:o=s-n}return{start:n,count:o}}function Vi(i){let{xScale:t,yScale:e,_scaleRanges:s}=i,n={xmin:t.min,xmax:t.max,ymin:e.min,ymax:e.max};if(!s)return i._scaleRanges=n,!0;let o=s.xmin!==t.min||s.xmax!==t.max||s.ymin!==e.min||s.ymax!==e.max;return Object.assign(s,n),o}var Be=i=>i===0||i===1,As=(i,t,e)=>-(Math.pow(2,10*(i-=1))*Math.sin((i-t)*F/e)),Ts=(i,t,e)=>Math.pow(2,-10*i)*Math.sin((i-t)*F/e)+1,Ht={linear:i=>i,easeInQuad:i=>i*i,easeOutQuad:i=>-i*(i-2),easeInOutQuad:i=>(i/=.5)<1?.5*i*i:-.5*(--i*(i-2)-1),easeInCubic:i=>i*i*i,easeOutCubic:i=>(i-=1)*i*i+1,easeInOutCubic:i=>(i/=.5)<1?.5*i*i*i:.5*((i-=2)*i*i+2),easeInQuart:i=>i*i*i*i,easeOutQuart:i=>-((i-=1)*i*i*i-1),easeInOutQuart:i=>(i/=.5)<1?.5*i*i*i*i:-.5*((i-=2)*i*i*i-2),easeInQuint:i=>i*i*i*i*i,easeOutQuint:i=>(i-=1)*i*i*i*i+1,easeInOutQuint:i=>(i/=.5)<1?.5*i*i*i*i*i:.5*((i-=2)*i*i*i*i+2),easeInSine:i=>-Math.cos(i*V)+1,easeOutSine:i=>Math.sin(i*V),easeInOutSine:i=>-.5*(Math.cos(B*i)-1),easeInExpo:i=>i===0?0:Math.pow(2,10*(i-1)),easeOutExpo:i=>i===1?1:-Math.pow(2,-10*i)+1,easeInOutExpo:i=>Be(i)?i:i<.5?.5*Math.pow(2,10*(i*2-1)):.5*(-Math.pow(2,-10*(i*2-1))+2),easeInCirc:i=>i>=1?i:-(Math.sqrt(1-i*i)-1),easeOutCirc:i=>Math.sqrt(1-(i-=1)*i),easeInOutCirc:i=>(i/=.5)<1?-.5*(Math.sqrt(1-i*i)-1):.5*(Math.sqrt(1-(i-=2)*i)+1),easeInElastic:i=>Be(i)?i:As(i,.075,.3),easeOutElastic:i=>Be(i)?i:Ts(i,.075,.3),easeInOutElastic(i){return Be(i)?i:i<.5?.5*As(i*2,.1125,.45):.5+.5*Ts(i*2-1,.1125,.45)},easeInBack(i){return i*i*((1.70158+1)*i-1.70158)},easeOutBack(i){return(i-=1)*i*((1.70158+1)*i+1.70158)+1},easeInOutBack(i){let t=1.70158;return(i/=.5)<1?.5*(i*i*(((t*=1.525)+1)*i-t)):.5*((i-=2)*i*(((t*=1.525)+1)*i+t)+2)},easeInBounce:i=>1-Ht.easeOutBounce(1-i),easeOutBounce(i){return i<1/2.75?7.5625*i*i:i<2/2.75?7.5625*(i-=1.5/2.75)*i+.75:i<2.5/2.75?7.5625*(i-=2.25/2.75)*i+.9375:7.5625*(i-=2.625/2.75)*i+.984375},easeInOutBounce:i=>i<.5?Ht.easeInBounce(i*2)*.5:Ht.easeOutBounce(i*2-1)*.5+.5};function _e(i){return i+.5|0}var yt=(i,t,e)=>Math.max(Math.min(i,e),t);function ge(i){return yt(_e(i*2.55),0,255)}function vt(i){return yt(_e(i*255),0,255)}function ut(i){return yt(_e(i/2.55)/100,0,1)}function Ls(i){return yt(_e(i*100),0,100)}var st={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},Pi=[..."0123456789ABCDEF"],No=i=>Pi[i&15],Ho=i=>Pi[(i&240)>>4]+Pi[i&15],Ve=i=>(i&240)>>4===(i&15),jo=i=>Ve(i.r)&&Ve(i.g)&&Ve(i.b)&&Ve(i.a);function $o(i){var t=i.length,e;return i[0]==="#"&&(t===4||t===5?e={r:255&st[i[1]]*17,g:255&st[i[2]]*17,b:255&st[i[3]]*17,a:t===5?st[i[4]]*17:255}:(t===7||t===9)&&(e={r:st[i[1]]<<4|st[i[2]],g:st[i[3]]<<4|st[i[4]],b:st[i[5]]<<4|st[i[6]],a:t===9?st[i[7]]<<4|st[i[8]]:255})),e}var Yo=(i,t)=>i<255?t(i):"";function Xo(i){var t=jo(i)?No:Ho;return i?"#"+t(i.r)+t(i.g)+t(i.b)+Yo(i.a,t):void 0}var Uo=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function en(i,t,e){let s=t*Math.min(e,1-e),n=(o,a=(o+i/30)%12)=>e-s*Math.max(Math.min(a-3,9-a,1),-1);return[n(0),n(8),n(4)]}function Ko(i,t,e){let s=(n,o=(n+i/60)%6)=>e-e*t*Math.max(Math.min(o,4-o,1),0);return[s(5),s(3),s(1)]}function qo(i,t,e){let s=en(i,1,.5),n;for(t+e>1&&(n=1/(t+e),t*=n,e*=n),n=0;n<3;n++)s[n]*=1-t-e,s[n]+=t;return s}function Go(i,t,e,s,n){return i===n?(t-e)/s+(t.5?h/(2-o-a):h/(o+a),l=Go(e,s,n,h,o),l=l*60+.5),[l|0,c||0,r]}function Ni(i,t,e,s){return(Array.isArray(t)?i(t[0],t[1],t[2]):i(t,e,s)).map(vt)}function Hi(i,t,e){return Ni(en,i,t,e)}function Zo(i,t,e){return Ni(qo,i,t,e)}function Jo(i,t,e){return Ni(Ko,i,t,e)}function sn(i){return(i%360+360)%360}function Qo(i){let t=Uo.exec(i),e=255,s;if(!t)return;t[5]!==s&&(e=t[6]?ge(+t[5]):vt(+t[5]));let n=sn(+t[2]),o=+t[3]/100,a=+t[4]/100;return t[1]==="hwb"?s=Zo(n,o,a):t[1]==="hsv"?s=Jo(n,o,a):s=Hi(n,o,a),{r:s[0],g:s[1],b:s[2],a:e}}function ta(i,t){var e=Wi(i);e[0]=sn(e[0]+t),e=Hi(e),i.r=e[0],i.g=e[1],i.b=e[2]}function ea(i){if(!i)return;let t=Wi(i),e=t[0],s=Ls(t[1]),n=Ls(t[2]);return i.a<255?`hsla(${e}, ${s}%, ${n}%, ${ut(i.a)})`:`hsl(${e}, ${s}%, ${n}%)`}var Rs={x:"dark",Z:"light",Y:"re",X:"blu",W:"gr",V:"medium",U:"slate",A:"ee",T:"ol",S:"or",B:"ra",C:"lateg",D:"ights",R:"in",Q:"turquois",E:"hi",P:"ro",O:"al",N:"le",M:"de",L:"yello",F:"en",K:"ch",G:"arks",H:"ea",I:"ightg",J:"wh"},Es={OiceXe:"f0f8ff",antiquewEte:"faebd7",aqua:"ffff",aquamarRe:"7fffd4",azuY:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"0",blanKedOmond:"ffebcd",Xe:"ff",XeviTet:"8a2be2",bPwn:"a52a2a",burlywood:"deb887",caMtXe:"5f9ea0",KartYuse:"7fff00",KocTate:"d2691e",cSO:"ff7f50",cSnflowerXe:"6495ed",cSnsilk:"fff8dc",crimson:"dc143c",cyan:"ffff",xXe:"8b",xcyan:"8b8b",xgTMnPd:"b8860b",xWay:"a9a9a9",xgYF:"6400",xgYy:"a9a9a9",xkhaki:"bdb76b",xmagFta:"8b008b",xTivegYF:"556b2f",xSange:"ff8c00",xScEd:"9932cc",xYd:"8b0000",xsOmon:"e9967a",xsHgYF:"8fbc8f",xUXe:"483d8b",xUWay:"2f4f4f",xUgYy:"2f4f4f",xQe:"ced1",xviTet:"9400d3",dAppRk:"ff1493",dApskyXe:"bfff",dimWay:"696969",dimgYy:"696969",dodgerXe:"1e90ff",fiYbrick:"b22222",flSOwEte:"fffaf0",foYstWAn:"228b22",fuKsia:"ff00ff",gaRsbSo:"dcdcdc",ghostwEte:"f8f8ff",gTd:"ffd700",gTMnPd:"daa520",Way:"808080",gYF:"8000",gYFLw:"adff2f",gYy:"808080",honeyMw:"f0fff0",hotpRk:"ff69b4",RdianYd:"cd5c5c",Rdigo:"4b0082",ivSy:"fffff0",khaki:"f0e68c",lavFMr:"e6e6fa",lavFMrXsh:"fff0f5",lawngYF:"7cfc00",NmoncEffon:"fffacd",ZXe:"add8e6",ZcSO:"f08080",Zcyan:"e0ffff",ZgTMnPdLw:"fafad2",ZWay:"d3d3d3",ZgYF:"90ee90",ZgYy:"d3d3d3",ZpRk:"ffb6c1",ZsOmon:"ffa07a",ZsHgYF:"20b2aa",ZskyXe:"87cefa",ZUWay:"778899",ZUgYy:"778899",ZstAlXe:"b0c4de",ZLw:"ffffe0",lime:"ff00",limegYF:"32cd32",lRF:"faf0e6",magFta:"ff00ff",maPon:"800000",VaquamarRe:"66cdaa",VXe:"cd",VScEd:"ba55d3",VpurpN:"9370db",VsHgYF:"3cb371",VUXe:"7b68ee",VsprRggYF:"fa9a",VQe:"48d1cc",VviTetYd:"c71585",midnightXe:"191970",mRtcYam:"f5fffa",mistyPse:"ffe4e1",moccasR:"ffe4b5",navajowEte:"ffdead",navy:"80",Tdlace:"fdf5e6",Tive:"808000",TivedBb:"6b8e23",Sange:"ffa500",SangeYd:"ff4500",ScEd:"da70d6",pOegTMnPd:"eee8aa",pOegYF:"98fb98",pOeQe:"afeeee",pOeviTetYd:"db7093",papayawEp:"ffefd5",pHKpuff:"ffdab9",peru:"cd853f",pRk:"ffc0cb",plum:"dda0dd",powMrXe:"b0e0e6",purpN:"800080",YbeccapurpN:"663399",Yd:"ff0000",Psybrown:"bc8f8f",PyOXe:"4169e1",saddNbPwn:"8b4513",sOmon:"fa8072",sandybPwn:"f4a460",sHgYF:"2e8b57",sHshell:"fff5ee",siFna:"a0522d",silver:"c0c0c0",skyXe:"87ceeb",UXe:"6a5acd",UWay:"708090",UgYy:"708090",snow:"fffafa",sprRggYF:"ff7f",stAlXe:"4682b4",tan:"d2b48c",teO:"8080",tEstN:"d8bfd8",tomato:"ff6347",Qe:"40e0d0",viTet:"ee82ee",JHt:"f5deb3",wEte:"ffffff",wEtesmoke:"f5f5f5",Lw:"ffff00",LwgYF:"9acd32"};function ia(){let i={},t=Object.keys(Es),e=Object.keys(Rs),s,n,o,a,r;for(s=0;s>16&255,o>>8&255,o&255]}return i}var We;function sa(i){We||(We=ia(),We.transparent=[0,0,0,0]);let t=We[i.toLowerCase()];return t&&{r:t[0],g:t[1],b:t[2],a:t.length===4?t[3]:255}}var na=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;function oa(i){let t=na.exec(i),e=255,s,n,o;if(t){if(t[7]!==s){let a=+t[7];e=t[8]?ge(a):yt(a*255,0,255)}return s=+t[1],n=+t[3],o=+t[5],s=255&(t[2]?ge(s):yt(s,0,255)),n=255&(t[4]?ge(n):yt(n,0,255)),o=255&(t[6]?ge(o):yt(o,0,255)),{r:s,g:n,b:o,a:e}}}function aa(i){return i&&(i.a<255?`rgba(${i.r}, ${i.g}, ${i.b}, ${ut(i.a)})`:`rgb(${i.r}, ${i.g}, ${i.b})`)}var Mi=i=>i<=.0031308?i*12.92:Math.pow(i,1/2.4)*1.055-.055,Nt=i=>i<=.04045?i/12.92:Math.pow((i+.055)/1.055,2.4);function ra(i,t,e){let s=Nt(ut(i.r)),n=Nt(ut(i.g)),o=Nt(ut(i.b));return{r:vt(Mi(s+e*(Nt(ut(t.r))-s))),g:vt(Mi(n+e*(Nt(ut(t.g))-n))),b:vt(Mi(o+e*(Nt(ut(t.b))-o))),a:i.a+e*(t.a-i.a)}}function Ne(i,t,e){if(i){let s=Wi(i);s[t]=Math.max(0,Math.min(s[t]+s[t]*e,t===0?360:1)),s=Hi(s),i.r=s[0],i.g=s[1],i.b=s[2]}}function nn(i,t){return i&&Object.assign(t||{},i)}function Fs(i){var t={r:0,g:0,b:0,a:255};return Array.isArray(i)?i.length>=3&&(t={r:i[0],g:i[1],b:i[2],a:255},i.length>3&&(t.a=vt(i[3]))):(t=nn(i,{r:0,g:0,b:0,a:1}),t.a=vt(t.a)),t}function la(i){return i.charAt(0)==="r"?oa(i):Qo(i)}var $t=class{constructor(t){if(t instanceof $t)return t;let e=typeof t,s;e==="object"?s=Fs(t):e==="string"&&(s=$o(t)||sa(t)||la(t)),this._rgb=s,this._valid=!!s}get valid(){return this._valid}get rgb(){var t=nn(this._rgb);return t&&(t.a=ut(t.a)),t}set rgb(t){this._rgb=Fs(t)}rgbString(){return this._valid?aa(this._rgb):void 0}hexString(){return this._valid?Xo(this._rgb):void 0}hslString(){return this._valid?ea(this._rgb):void 0}mix(t,e){if(t){let s=this.rgb,n=t.rgb,o,a=e===o?.5:e,r=2*a-1,l=s.a-n.a,c=((r*l===-1?r:(r+l)/(1+r*l))+1)/2;o=1-c,s.r=255&c*s.r+o*n.r+.5,s.g=255&c*s.g+o*n.g+.5,s.b=255&c*s.b+o*n.b+.5,s.a=a*s.a+(1-a)*n.a,this.rgb=s}return this}interpolate(t,e){return t&&(this._rgb=ra(this._rgb,t._rgb,e)),this}clone(){return new $t(this.rgb)}alpha(t){return this._rgb.a=vt(t),this}clearer(t){let e=this._rgb;return e.a*=1-t,this}greyscale(){let t=this._rgb,e=_e(t.r*.3+t.g*.59+t.b*.11);return t.r=t.g=t.b=e,this}opaquer(t){let e=this._rgb;return e.a*=1+t,this}negate(){let t=this._rgb;return t.r=255-t.r,t.g=255-t.g,t.b=255-t.b,this}lighten(t){return Ne(this._rgb,2,t),this}darken(t){return Ne(this._rgb,2,-t),this}saturate(t){return Ne(this._rgb,1,t),this}desaturate(t){return Ne(this._rgb,1,-t),this}rotate(t){return ta(this._rgb,t),this}};function on(i){return new $t(i)}function an(i){if(i&&typeof i=="object"){let t=i.toString();return t==="[object CanvasPattern]"||t==="[object CanvasGradient]"}return!1}function ji(i){return an(i)?i:on(i)}function wi(i){return an(i)?i:on(i).saturate(.5).darken(.1).hexString()}var Mt=Object.create(null),Ze=Object.create(null);function pe(i,t){if(!t)return i;let e=t.split(".");for(let s=0,n=e.length;se.chart.platform.getDevicePixelRatio(),this.elements={},this.events=["mousemove","mouseout","click","touchstart","touchmove"],this.font={family:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",size:12,style:"normal",lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(e,s)=>wi(s.backgroundColor),this.hoverBorderColor=(e,s)=>wi(s.borderColor),this.hoverColor=(e,s)=>wi(s.color),this.indexAxis="x",this.interaction={mode:"nearest",intersect:!0,includeInvisible:!1},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(t)}set(t,e){return ki(this,t,e)}get(t){return pe(this,t)}describe(t,e){return ki(Ze,t,e)}override(t,e){return ki(Mt,t,e)}route(t,e,s,n){let o=pe(this,t),a=pe(this,s),r="_"+e;Object.defineProperties(o,{[r]:{value:o[e],writable:!0},[e]:{enumerable:!0,get(){let l=this[r],c=a[n];return D(l)?Object.assign({},c,l):C(l,c)},set(l){this[r]=l}}})}},O=new Ci({_scriptable:i=>!i.startsWith("on"),_indexable:i=>i!=="events",hover:{_fallback:"interaction"},interaction:{_scriptable:!1,_indexable:!1}});function ca(i){return!i||T(i.size)||T(i.family)?null:(i.style?i.style+" ":"")+(i.weight?i.weight+" ":"")+i.size+"px "+i.family}function me(i,t,e,s,n){let o=t[n];return o||(o=t[n]=i.measureText(n).width,e.push(n)),o>s&&(s=o),s}function rn(i,t,e,s){s=s||{};let n=s.data=s.data||{},o=s.garbageCollect=s.garbageCollect||[];s.font!==t&&(n=s.data={},o=s.garbageCollect=[],s.font=t),i.save(),i.font=t;let a=0,r=e.length,l,c,h,d,u;for(l=0;le.length){for(l=0;l0&&i.stroke()}}function Yt(i,t,e){return e=e||.5,!t||i&&i.x>t.left-e&&i.xt.top-e&&i.y0&&o.strokeColor!=="",l,c;for(i.save(),i.font=n.string,ha(i,o),l=0;l+i||0;function Qe(i,t){let e={},s=D(t),n=s?Object.keys(t):t,o=D(i)?s?a=>C(i[a],i[t[a]]):a=>i[a]:()=>i;for(let a of n)e[a]=pa(o(a));return e}function Xi(i){return Qe(i,{top:"y",right:"x",bottom:"y",left:"x"})}function St(i){return Qe(i,["topLeft","topRight","bottomLeft","bottomRight"])}function U(i){let t=Xi(i);return t.width=t.left+t.right,t.height=t.top+t.bottom,t}function $(i,t){i=i||{},t=t||O.font;let e=C(i.size,t.size);typeof e=="string"&&(e=parseInt(e,10));let s=C(i.style,t.style);s&&!(""+s).match(fa)&&(console.warn('Invalid font style specified: "'+s+'"'),s="");let n={family:C(i.family,t.family),lineHeight:ga(C(i.lineHeight,t.lineHeight),e),size:e,style:s,weight:C(i.weight,t.weight),string:""};return n.string=ca(n),n}function Zt(i,t,e,s){let n=!0,o,a,r;for(o=0,a=i.length;oe&&r===0?0:r+l;return{min:a(s,-Math.abs(o)),max:a(n,o)}}function pt(i,t){return Object.assign(Object.create(i),t)}function ti(i,t=[""],e=i,s,n=()=>i[0]){J(s)||(s=fn("_fallback",i));let o={[Symbol.toStringTag]:"Object",_cacheable:!0,_scopes:i,_rootScopes:e,_fallback:s,_getTarget:n,override:a=>ti([a,...i],t,e,s)};return new Proxy(o,{deleteProperty(a,r){return delete a[r],delete a._keys,delete i[0][r],!0},get(a,r){return dn(a,r,()=>wa(r,t,i,a))},getOwnPropertyDescriptor(a,r){return Reflect.getOwnPropertyDescriptor(a._scopes[0],r)},getPrototypeOf(){return Reflect.getPrototypeOf(i[0])},has(a,r){return zs(a).includes(r)},ownKeys(a){return zs(a)},set(a,r,l){let c=a._storage||(a._storage=n());return a[r]=c[r]=l,delete a._keys,!0}})}function Lt(i,t,e,s){let n={_cacheable:!1,_proxy:i,_context:t,_subProxy:e,_stack:new Set,_descriptors:Ui(i,s),setContext:o=>Lt(i,o,e,s),override:o=>Lt(i.override(o),t,e,s)};return new Proxy(n,{deleteProperty(o,a){return delete o[a],delete i[a],!0},get(o,a,r){return dn(o,a,()=>ba(o,a,r))},getOwnPropertyDescriptor(o,a){return o._descriptors.allKeys?Reflect.has(i,a)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(i,a)},getPrototypeOf(){return Reflect.getPrototypeOf(i)},has(o,a){return Reflect.has(i,a)},ownKeys(){return Reflect.ownKeys(i)},set(o,a,r){return i[a]=r,delete o[a],!0}})}function Ui(i,t={scriptable:!0,indexable:!0}){let{_scriptable:e=t.scriptable,_indexable:s=t.indexable,_allKeys:n=t.allKeys}=i;return{allKeys:n,scriptable:e,indexable:s,isScriptable:ft(e)?e:()=>e,isIndexable:ft(s)?s:()=>s}}var ma=(i,t)=>i?i+Ue(t):t,Ki=(i,t)=>D(t)&&i!=="adapters"&&(Object.getPrototypeOf(t)===null||t.constructor===Object);function dn(i,t,e){if(Object.prototype.hasOwnProperty.call(i,t))return i[t];let s=e();return i[t]=s,s}function ba(i,t,e){let{_proxy:s,_context:n,_subProxy:o,_descriptors:a}=i,r=s[t];return ft(r)&&a.isScriptable(t)&&(r=_a(t,r,i,e)),I(r)&&r.length&&(r=xa(t,r,i,a.isIndexable)),Ki(t,r)&&(r=Lt(r,n,o&&o[t],a)),r}function _a(i,t,e,s){let{_proxy:n,_context:o,_subProxy:a,_stack:r}=e;if(r.has(i))throw new Error("Recursion detected: "+Array.from(r).join("->")+"->"+i);return r.add(i),t=t(o,a||s),r.delete(i),Ki(i,t)&&(t=qi(n._scopes,n,i,t)),t}function xa(i,t,e,s){let{_proxy:n,_context:o,_subProxy:a,_descriptors:r}=e;if(J(o.index)&&s(i))t=t[o.index%t.length];else if(D(t[0])){let l=t,c=n._scopes.filter(h=>h!==l);t=[];for(let h of l){let d=qi(c,n,i,h);t.push(Lt(d,o,a&&a[i],r))}}return t}function un(i,t,e){return ft(i)?i(t,e):i}var ya=(i,t)=>i===!0?t:typeof i=="string"?gt(t,i):void 0;function va(i,t,e,s,n){for(let o of t){let a=ya(e,o);if(a){i.add(a);let r=un(a._fallback,e,n);if(J(r)&&r!==e&&r!==s)return r}else if(a===!1&&J(s)&&e!==s)return null}return!1}function qi(i,t,e,s){let n=t._rootScopes,o=un(t._fallback,e,s),a=[...i,...n],r=new Set;r.add(s);let l=Is(r,a,e,o||e,s);return l===null||J(o)&&o!==e&&(l=Is(r,a,o,l,s),l===null)?!1:ti(Array.from(r),[""],n,o,()=>Ma(t,e,s))}function Is(i,t,e,s,n){for(;e;)e=va(i,t,e,s,n);return e}function Ma(i,t,e){let s=i._getTarget();t in s||(s[t]={});let n=s[t];return I(n)&&D(e)?e:n}function wa(i,t,e,s){let n;for(let o of t)if(n=fn(ma(o,i),e),J(n))return Ki(i,n)?qi(e,s,i,n):n}function fn(i,t){for(let e of t){if(!e)continue;let s=e[i];if(J(s))return s}}function zs(i){let t=i._keys;return t||(t=i._keys=ka(i._scopes)),t}function ka(i){let t=new Set;for(let e of i)for(let s of Object.keys(e).filter(n=>!n.startsWith("_")))t.add(s);return Array.from(t)}function Gi(i,t,e,s){let{iScale:n}=i,{key:o="r"}=this._parsing,a=new Array(s),r,l,c,h;for(r=0,l=s;rti==="x"?"y":"x";function Pa(i,t,e,s){let n=i.skip?t:i,o=t,a=e.skip?t:e,r=Ye(o,n),l=Ye(a,o),c=r/(r+l),h=l/(r+l);c=isNaN(c)?0:c,h=isNaN(h)?0:h;let d=s*c,u=s*h;return{previous:{x:o.x-d*(a.x-n.x),y:o.y-d*(a.y-n.y)},next:{x:o.x+u*(a.x-n.x),y:o.y+u*(a.y-n.y)}}}function Ca(i,t,e){let s=i.length,n,o,a,r,l,c=Xt(i,0);for(let h=0;h!c.skip)),t.cubicInterpolationMode==="monotone")Oa(i,n);else{let c=s?i[i.length-1]:i[0];for(o=0,a=i.length;owindow.getComputedStyle(i,null);function Ta(i,t){return ii(i).getPropertyValue(t)}var La=["top","right","bottom","left"];function Tt(i,t,e){let s={};e=e?"-"+e:"";for(let n=0;n<4;n++){let o=La[n];s[o]=parseFloat(i[t+"-"+o+e])||0}return s.width=s.left+s.right,s.height=s.top+s.bottom,s}var Ra=(i,t,e)=>(i>0||t>0)&&(!e||!e.shadowRoot);function Ea(i,t){let e=i.touches,s=e&&e.length?e[0]:i,{offsetX:n,offsetY:o}=s,a=!1,r,l;if(Ra(n,o,i.target))r=n,l=o;else{let c=t.getBoundingClientRect();r=s.clientX-c.left,l=s.clientY-c.top,a=!0}return{x:r,y:l,box:a}}function Pt(i,t){if("native"in i)return i;let{canvas:e,currentDevicePixelRatio:s}=t,n=ii(e),o=n.boxSizing==="border-box",a=Tt(n,"padding"),r=Tt(n,"border","width"),{x:l,y:c,box:h}=Ea(i,e),d=a.left+(h&&r.left),u=a.top+(h&&r.top),{width:f,height:g}=t;return o&&(f-=a.width+r.width,g-=a.height+r.height),{x:Math.round((l-d)/f*e.width/s),y:Math.round((c-u)/g*e.height/s)}}function Fa(i,t,e){let s,n;if(t===void 0||e===void 0){let o=ei(i);if(!o)t=i.clientWidth,e=i.clientHeight;else{let a=o.getBoundingClientRect(),r=ii(o),l=Tt(r,"border","width"),c=Tt(r,"padding");t=a.width-c.width-l.width,e=a.height-c.height-l.height,s=Xe(r.maxWidth,o,"clientWidth"),n=Xe(r.maxHeight,o,"clientHeight")}}return{width:t,height:e,maxWidth:s||$e,maxHeight:n||$e}}var Si=i=>Math.round(i*10)/10;function mn(i,t,e,s){let n=ii(i),o=Tt(n,"margin"),a=Xe(n.maxWidth,i,"clientWidth")||$e,r=Xe(n.maxHeight,i,"clientHeight")||$e,l=Fa(i,t,e),{width:c,height:h}=l;if(n.boxSizing==="content-box"){let d=Tt(n,"border","width"),u=Tt(n,"padding");c-=u.width+d.width,h-=u.height+d.height}return c=Math.max(0,c-o.width),h=Math.max(0,s?Math.floor(c/s):h-o.height),c=Si(Math.min(c,a,l.maxWidth)),h=Si(Math.min(h,r,l.maxHeight)),c&&!h&&(h=Si(c/2)),{width:c,height:h}}function Ji(i,t,e){let s=t||1,n=Math.floor(i.height*s),o=Math.floor(i.width*s);i.height=n/s,i.width=o/s;let a=i.canvas;return a.style&&(e||!a.style.height&&!a.style.width)&&(a.style.height=`${i.height}px`,a.style.width=`${i.width}px`),i.currentDevicePixelRatio!==s||a.height!==n||a.width!==o?(i.currentDevicePixelRatio=s,a.height=n,a.width=o,i.ctx.setTransform(s,0,0,s,0,0),!0):!1}var bn=function(){let i=!1;try{let t={get passive(){return i=!0,!1}};window.addEventListener("test",null,t),window.removeEventListener("test",null,t)}catch{}return i}();function Qi(i,t){let e=Ta(i,t),s=e&&e.match(/^(\d+)(\.\d+)?px$/);return s?+s[1]:void 0}function xt(i,t,e,s){return{x:i.x+e*(t.x-i.x),y:i.y+e*(t.y-i.y)}}function _n(i,t,e,s){return{x:i.x+e*(t.x-i.x),y:s==="middle"?e<.5?i.y:t.y:s==="after"?e<1?i.y:t.y:e>0?t.y:i.y}}function xn(i,t,e,s){let n={x:i.cp2x,y:i.cp2y},o={x:t.cp1x,y:t.cp1y},a=xt(i,n,e),r=xt(n,o,e),l=xt(o,t,e),c=xt(a,r,e),h=xt(r,l,e);return xt(c,h,e)}var Bs=new Map;function Ia(i,t){t=t||{};let e=i+JSON.stringify(t),s=Bs.get(e);return s||(s=new Intl.NumberFormat(i,t),Bs.set(e,s)),s}function Jt(i,t,e){return Ia(t,e).format(i)}var za=function(i,t){return{x(e){return i+i+t-e},setWidth(e){t=e},textAlign(e){return e==="center"?e:e==="right"?"left":"right"},xPlus(e,s){return e-s},leftForLtr(e,s){return e-s}}},Ba=function(){return{x(i){return i},setWidth(i){},textAlign(i){return i},xPlus(i,t){return i+t},leftForLtr(i,t){return i}}};function Et(i,t,e){return i?za(t,e):Ba()}function ts(i,t){let e,s;(t==="ltr"||t==="rtl")&&(e=i.canvas.style,s=[e.getPropertyValue("direction"),e.getPropertyPriority("direction")],e.setProperty("direction",t,"important"),i.prevTextDirection=s)}function es(i,t){t!==void 0&&(delete i.prevTextDirection,i.canvas.style.setProperty("direction",t[0],t[1]))}function yn(i){return i==="angle"?{between:qt,compare:Wo,normalize:G}:{between:lt,compare:(t,e)=>t-e,normalize:t=>t}}function Vs({start:i,end:t,count:e,loop:s,style:n}){return{start:i%e,end:t%e,loop:s&&(t-i+1)%e===0,style:n}}function Va(i,t,e){let{property:s,start:n,end:o}=e,{between:a,normalize:r}=yn(s),l=t.length,{start:c,end:h,loop:d}=i,u,f;if(d){for(c+=l,h+=l,u=0,f=l;ul(n,v,b)&&r(n,v)!==0,x=()=>r(o,b)===0||l(o,v,b),M=()=>p||y(),w=()=>!p||x();for(let S=h,k=h;S<=d;++S)_=t[S%a],!_.skip&&(b=c(_[s]),b!==v&&(p=l(b,n,o),m===null&&M()&&(m=r(b,n)===0?S:k),m!==null&&w()&&(g.push(Vs({start:m,end:S,loop:u,count:a,style:f})),m=null),k=S,v=b));return m!==null&&g.push(Vs({start:m,end:d,loop:u,count:a,style:f})),g}function ss(i,t){let e=[],s=i.segments;for(let n=0;nn&&i[o%t].skip;)o--;return o%=t,{start:n,end:o}}function Na(i,t,e,s){let n=i.length,o=[],a=t,r=i[t],l;for(l=t+1;l<=e;++l){let c=i[l%n];c.skip||c.stop?r.skip||(s=!1,o.push({start:t%n,end:(l-1)%n,loop:s}),t=a=c.stop?l:null):(a=l,r.skip&&(t=l)),r=c}return a!==null&&o.push({start:t%n,end:a%n,loop:s}),o}function vn(i,t){let e=i.points,s=i.options.spanGaps,n=e.length;if(!n)return[];let o=!!i._loop,{start:a,end:r}=Wa(e,n,o,s);if(s===!0)return Ws(i,[{start:a,end:r,loop:o}],e,t);let l=rr({chart:t,initial:e.initial,numSteps:a,currentStep:Math.min(s-e.start,a)}))}_refresh(){this._request||(this._running=!0,this._request=Ii.call(window,()=>{this._update(),this._request=null,this._running&&this._refresh()}))}_update(t=Date.now()){let e=0;this._charts.forEach((s,n)=>{if(!s.running||!s.items.length)return;let o=s.items,a=o.length-1,r=!1,l;for(;a>=0;--a)l=o[a],l._active?(l._total>s.duration&&(s.duration=l._total),l.tick(t),r=!0):(o[a]=o[o.length-1],o.pop());r&&(n.draw(),this._notify(n,s,t,"progress")),o.length||(s.running=!1,this._notify(n,s,t,"complete"),s.initial=!1),e+=o.length}),this._lastDate=t,e===0&&(this._running=!1)}_getAnims(t){let e=this._charts,s=e.get(t);return s||(s={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},e.set(t,s)),s}listen(t,e,s){this._getAnims(t).listeners[e].push(s)}add(t,e){!e||!e.length||this._getAnims(t).items.push(...e)}has(t){return this._getAnims(t).items.length>0}start(t){let e=this._charts.get(t);e&&(e.running=!0,e.start=Date.now(),e.duration=e.items.reduce((s,n)=>Math.max(s,n._duration),0),this._refresh())}running(t){if(!this._running)return!1;let e=this._charts.get(t);return!(!e||!e.running||!e.items.length)}stop(t){let e=this._charts.get(t);if(!e||!e.items.length)return;let s=e.items,n=s.length-1;for(;n>=0;--n)s[n].cancel();e.items=[],this._notify(t,e,Date.now(),"complete")}remove(t){return this._charts.delete(t)}},mt=new fs,Mn="transparent",$a={boolean(i,t,e){return e>.5?t:i},color(i,t,e){let s=ji(i||Mn),n=s.valid&&ji(t||Mn);return n&&n.valid?n.mix(s,e).hexString():t},number(i,t,e){return i+(t-i)*e}},gs=class{constructor(t,e,s,n){let o=e[s];n=Zt([t.to,n,o,t.from]);let a=Zt([t.from,o,n]);this._active=!0,this._fn=t.fn||$a[t.type||typeof a],this._easing=Ht[t.easing]||Ht.linear,this._start=Math.floor(Date.now()+(t.delay||0)),this._duration=this._total=Math.floor(t.duration),this._loop=!!t.loop,this._target=e,this._prop=s,this._from=a,this._to=n,this._promises=void 0}active(){return this._active}update(t,e,s){if(this._active){this._notify(!1);let n=this._target[this._prop],o=s-this._start,a=this._duration-o;this._start=s,this._duration=Math.floor(Math.max(a,t.duration)),this._total+=o,this._loop=!!t.loop,this._to=Zt([t.to,e,n,t.from]),this._from=Zt([t.from,n,e])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(t){let e=t-this._start,s=this._duration,n=this._prop,o=this._from,a=this._loop,r=this._to,l;if(this._active=o!==r&&(a||e1?2-l:l,l=this._easing(Math.min(1,Math.max(0,l))),this._target[n]=this._fn(o,r,l)}wait(){let t=this._promises||(this._promises=[]);return new Promise((e,s)=>{t.push({res:e,rej:s})})}_notify(t){let e=t?"res":"rej",s=this._promises||[];for(let n=0;ni!=="onProgress"&&i!=="onComplete"&&i!=="fn"});O.set("animations",{colors:{type:"color",properties:Xa},numbers:{type:"number",properties:Ya}});O.describe("animations",{_fallback:"animation"});O.set("transitions",{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:"transparent"},visible:{type:"boolean",duration:0}}},hide:{animations:{colors:{to:"transparent"},visible:{type:"boolean",easing:"linear",fn:i=>i|0}}}});var hi=class{constructor(t,e){this._chart=t,this._properties=new Map,this.configure(e)}configure(t){if(!D(t))return;let e=this._properties;Object.getOwnPropertyNames(t).forEach(s=>{let n=t[s];if(!D(n))return;let o={};for(let a of Ua)o[a]=n[a];(I(n.properties)&&n.properties||[s]).forEach(a=>{(a===s||!e.has(a))&&e.set(a,o)})})}_animateOptions(t,e){let s=e.options,n=qa(t,s);if(!n)return[];let o=this._createAnimations(n,s);return s.$shared&&Ka(t.options.$animations,s).then(()=>{t.options=s},()=>{}),o}_createAnimations(t,e){let s=this._properties,n=[],o=t.$animations||(t.$animations={}),a=Object.keys(e),r=Date.now(),l;for(l=a.length-1;l>=0;--l){let c=a[l];if(c.charAt(0)==="$")continue;if(c==="options"){n.push(...this._animateOptions(t,e));continue}let h=e[c],d=o[c],u=s.get(c);if(d)if(u&&d.active()){d.update(u,h,r);continue}else d.cancel();if(!u||!u.duration){t[c]=h;continue}o[c]=d=new gs(u,t,c,h),n.push(d)}return n}update(t,e){if(this._properties.size===0){Object.assign(t,e);return}let s=this._createAnimations(t,e);if(s.length)return mt.add(this._chart,s),!0}};function Ka(i,t){let e=[],s=Object.keys(t);for(let n=0;n0||!e&&o<0)return n.index}return null}function Cn(i,t){let{chart:e,_cachedMeta:s}=i,n=e._stacks||(e._stacks={}),{iScale:o,vScale:a,index:r}=s,l=o.axis,c=a.axis,h=Qa(o,a,s),d=t.length,u;for(let f=0;fe[s].axis===t).shift()}function ir(i,t){return pt(i,{active:!1,dataset:void 0,datasetIndex:t,index:t,mode:"default",type:"dataset"})}function sr(i,t,e){return pt(i,{active:!1,dataIndex:t,parsed:void 0,raw:void 0,element:e,index:t,mode:"default",type:"data"})}function ve(i,t){let e=i.controller.index,s=i.vScale&&i.vScale.axis;if(s){t=t||i._parsed;for(let n of t){let o=n._stacks;if(!o||o[s]===void 0||o[s][e]===void 0)return;delete o[s][e]}}}var os=i=>i==="reset"||i==="none",Dn=(i,t)=>t?i:Object.assign({},i),nr=(i,t,e)=>i&&!t.hidden&&t._stacked&&{keys:go(e,!0),values:null},et=class{constructor(t,e){this.chart=t,this._ctx=t.ctx,this.index=e,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.initialize()}initialize(){let t=this._cachedMeta;this.configure(),this.linkScales(),t._stacked=Sn(t.vScale,t),this.addElements()}updateIndex(t){this.index!==t&&ve(this._cachedMeta),this.index=t}linkScales(){let t=this.chart,e=this._cachedMeta,s=this.getDataset(),n=(d,u,f,g)=>d==="x"?u:d==="r"?g:f,o=e.xAxisID=C(s.xAxisID,ns(t,"x")),a=e.yAxisID=C(s.yAxisID,ns(t,"y")),r=e.rAxisID=C(s.rAxisID,ns(t,"r")),l=e.indexAxis,c=e.iAxisID=n(l,o,a,r),h=e.vAxisID=n(l,a,o,r);e.xScale=this.getScaleForId(o),e.yScale=this.getScaleForId(a),e.rScale=this.getScaleForId(r),e.iScale=this.getScaleForId(c),e.vScale=this.getScaleForId(h)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(t){return this.chart.scales[t]}_getOtherScale(t){let e=this._cachedMeta;return t===e.iScale?e.vScale:e.iScale}reset(){this._update("reset")}_destroy(){let t=this._cachedMeta;this._data&&Ei(this._data,this),t._stacked&&ve(t)}_dataCheck(){let t=this.getDataset(),e=t.data||(t.data=[]),s=this._data;if(D(e))this._data=Ja(e);else if(s!==e){if(s){Ei(s,this);let n=this._cachedMeta;ve(n),n._parsed=[]}e&&Object.isExtensible(e)&&Js(e,this),this._syncList=[],this._data=e}}addElements(){let t=this._cachedMeta;this._dataCheck(),this.datasetElementType&&(t.dataset=new this.datasetElementType)}buildOrUpdateElements(t){let e=this._cachedMeta,s=this.getDataset(),n=!1;this._dataCheck();let o=e._stacked;e._stacked=Sn(e.vScale,e),e.stack!==s.stack&&(n=!0,ve(e),e.stack=s.stack),this._resyncElements(t),(n||o!==e._stacked)&&Cn(this,e._parsed)}configure(){let t=this.chart.config,e=t.datasetScopeKeys(this._type),s=t.getOptionScopes(this.getDataset(),e,!0);this.options=t.createResolver(s,this.getContext()),this._parsing=this.options.parsing,this._cachedDataOpts={}}parse(t,e){let{_cachedMeta:s,_data:n}=this,{iScale:o,_stacked:a}=s,r=o.axis,l=t===0&&e===n.length?!0:s._sorted,c=t>0&&s._parsed[t-1],h,d,u;if(this._parsing===!1)s._parsed=n,s._sorted=!0,u=n;else{I(n[t])?u=this.parseArrayData(s,n,t,e):D(n[t])?u=this.parseObjectData(s,n,t,e):u=this.parsePrimitiveData(s,n,t,e);let f=()=>d[r]===null||c&&d[r]p||d=0;--u)if(!g()){this.updateRangeFromParsed(c,t,f,l);break}}return c}getAllParsedValues(t){let e=this._cachedMeta._parsed,s=[],n,o,a;for(n=0,o=e.length;n=0&&tthis.getContext(s,n),p=c.resolveNamedOptions(u,f,g,d);return p.$shared&&(p.$shared=l,o[a]=Object.freeze(Dn(p,l))),p}_resolveAnimations(t,e,s){let n=this.chart,o=this._cachedDataOpts,a=`animation-${e}`,r=o[a];if(r)return r;let l;if(n.options.animation!==!1){let h=this.chart.config,d=h.datasetAnimationScopeKeys(this._type,e),u=h.getOptionScopes(this.getDataset(),d);l=h.createResolver(u,this.getContext(t,s,e))}let c=new hi(n,l&&l.animations);return l&&l._cacheable&&(o[a]=Object.freeze(c)),c}getSharedOptions(t){if(t.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},t))}includeOptions(t,e){return!e||os(t)||this.chart._animationsDisabled}_getSharedOptions(t,e){let s=this.resolveDataElementOptions(t,e),n=this._sharedOptions,o=this.getSharedOptions(s),a=this.includeOptions(e,o)||o!==n;return this.updateSharedOptions(o,e,s),{sharedOptions:o,includeOptions:a}}updateElement(t,e,s,n){os(n)?Object.assign(t,s):this._resolveAnimations(e,n).update(t,s)}updateSharedOptions(t,e,s){t&&!os(e)&&this._resolveAnimations(void 0,e).update(t,s)}_setStyle(t,e,s,n){t.active=n;let o=this.getStyle(e,n);this._resolveAnimations(e,s,n).update(t,{options:!n&&this.getSharedOptions(o)||o})}removeHoverStyle(t,e,s){this._setStyle(t,s,"active",!1)}setHoverStyle(t,e,s){this._setStyle(t,s,"active",!0)}_removeDatasetHoverStyle(){let t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!1)}_setDatasetHoverStyle(){let t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!0)}_resyncElements(t){let e=this._data,s=this._cachedMeta.data;for(let[r,l,c]of this._syncList)this[r](l,c);this._syncList=[];let n=s.length,o=e.length,a=Math.min(o,n);a&&this.parse(0,a),o>n?this._insertElements(n,o-n,t):o{for(c.length+=e,r=c.length-1;r>=a;r--)c[r]=c[r-e]};for(l(o),r=t;rn-o))}return i._cache.$bar}function ar(i){let t=i.iScale,e=or(t,i.type),s=t._length,n,o,a,r,l=()=>{a===32767||a===-32768||(J(r)&&(s=Math.min(s,Math.abs(a-r)||s)),r=a)};for(n=0,o=e.length;n0?n[i-1]:null,r=iMath.abs(r)&&(l=r,c=a),t[e.axis]=c,t._custom={barStart:l,barEnd:c,start:n,end:o,min:a,max:r}}function po(i,t,e,s){return I(i)?cr(i,t,e,s):t[e.axis]=e.parse(i,s),t}function On(i,t,e,s){let n=i.iScale,o=i.vScale,a=n.getLabels(),r=n===o,l=[],c,h,d,u;for(c=e,h=e+s;c=e?1:-1)}function dr(i){let t,e,s,n,o;return i.horizontal?(t=i.base>i.x,e="left",s="right"):(t=i.basel.controller.options.grouped),o=s.options.stacked,a=[],r=l=>{let c=l.controller.getParsed(e),h=c&&c[l.vScale.axis];if(T(h)||isNaN(h))return!0};for(let l of n)if(!(e!==void 0&&r(l))&&((o===!1||a.indexOf(l.stack)===-1||o===void 0&&l.stack===void 0)&&a.push(l.stack),l.index===t))break;return a.length||a.push(void 0),a}_getStackCount(t){return this._getStacks(void 0,t).length}_getStackIndex(t,e,s){let n=this._getStacks(t,s),o=e!==void 0?n.indexOf(e):-1;return o===-1?n.length-1:o}_getRuler(){let t=this.options,e=this._cachedMeta,s=e.iScale,n=[],o,a;for(o=0,a=e.data.length;o=0;--s)e=Math.max(e,t[s].size(this.resolveDataElementOptions(s))/2);return e>0&&e}getLabelAndValue(t){let e=this._cachedMeta,{xScale:s,yScale:n}=e,o=this.getParsed(t),a=s.getLabelForValue(o.x),r=n.getLabelForValue(o.y),l=o._custom;return{label:e.label,value:"("+a+", "+r+(l?", "+l:"")+")"}}update(t){let e=this._cachedMeta.data;this.updateElements(e,0,e.length,t)}updateElements(t,e,s,n){let o=n==="reset",{iScale:a,vScale:r}=this._cachedMeta,{sharedOptions:l,includeOptions:c}=this._getSharedOptions(e,n),h=a.axis,d=r.axis;for(let u=e;uqt(v,r,l,!0)?1:Math.max(y,y*e,x,x*e),g=(v,y,x)=>qt(v,r,l,!0)?-1:Math.min(y,y*e,x,x*e),p=f(0,c,d),m=f(V,h,u),b=g(B,c,d),_=g(B+V,h,u);s=(p-b)/2,n=(m-_)/2,o=-(p+b)/2,a=-(m+_)/2}return{ratioX:s,ratioY:n,offsetX:o,offsetY:a}}var Ot=class extends et{constructor(t,e){super(t,e),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(t,e){let s=this.getDataset().data,n=this._cachedMeta;if(this._parsing===!1)n._parsed=s;else{let o=l=>+s[l];if(D(s[t])){let{key:l="value"}=this._parsing;o=c=>+gt(s[c],l)}let a,r;for(a=t,r=t+e;a0&&!isNaN(t)?F*(Math.abs(t)/e):0}getLabelAndValue(t){let e=this._cachedMeta,s=this.chart,n=s.data.labels||[],o=Jt(e._parsed[t],s.options.locale);return{label:n[t]||"",value:o}}getMaxBorderWidth(t){let e=0,s=this.chart,n,o,a,r,l;if(!t){for(n=0,o=s.data.datasets.length;ni!=="spacing",_indexable:i=>i!=="spacing"};Ot.overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(i){let t=i.data;if(t.labels.length&&t.datasets.length){let{labels:{pointStyle:e}}=i.legend.options;return t.labels.map((s,n)=>{let a=i.getDatasetMeta(0).controller.getStyle(n);return{text:s,fillStyle:a.backgroundColor,strokeStyle:a.borderColor,lineWidth:a.borderWidth,pointStyle:e,hidden:!i.getDataVisibility(n),index:n}})}return[]}},onClick(i,t,e){e.chart.toggleDataVisibility(t.index),e.chart.update()}},tooltip:{callbacks:{title(){return""},label(i){let t=i.label,e=": "+i.formattedValue;return I(t)?(t=t.slice(),t[0]+=e):t+=e,t}}}}};var se=class extends et{initialize(){this.enableOptionSharing=!0,this.supportsDecimation=!0,super.initialize()}update(t){let e=this._cachedMeta,{dataset:s,data:n=[],_dataset:o}=e,a=this.chart._animationsDisabled,{start:r,count:l}=Bi(e,n,a);this._drawStart=r,this._drawCount=l,Vi(e)&&(r=0,l=n.length),s._chart=this.chart,s._datasetIndex=this.index,s._decimated=!!o._decimated,s.points=n;let c=this.resolveDatasetElementOptions(t);this.options.showLine||(c.borderWidth=0),c.segment=this.options.segment,this.updateElement(s,void 0,{animated:!a,options:c},t),this.updateElements(n,r,l,t)}updateElements(t,e,s,n){let o=n==="reset",{iScale:a,vScale:r,_stacked:l,_dataset:c}=this._cachedMeta,{sharedOptions:h,includeOptions:d}=this._getSharedOptions(e,n),u=a.axis,f=r.axis,{spanGaps:g,segment:p}=this.options,m=Rt(g)?g:Number.POSITIVE_INFINITY,b=this.chart._animationsDisabled||o||n==="none",_=e>0&&this.getParsed(e-1);for(let v=e;v0&&Math.abs(x[u]-_[u])>m,p&&(M.parsed=x,M.raw=c.data[v]),d&&(M.options=h||this.resolveDataElementOptions(v,y.active?"active":n)),b||this.updateElement(y,v,M,n),_=x}}getMaxOverflow(){let t=this._cachedMeta,e=t.dataset,s=e.options&&e.options.borderWidth||0,n=t.data||[];if(!n.length)return s;let o=n[0].size(this.resolveDataElementOptions(0)),a=n[n.length-1].size(this.resolveDataElementOptions(n.length-1));return Math.max(s,o,a)/2}draw(){let t=this._cachedMeta;t.dataset.updateControlPoints(this.chart.chartArea,t.iScale.axis),super.draw()}};se.id="line";se.defaults={datasetElementType:"line",dataElementType:"point",showLine:!0,spanGaps:!1};se.overrides={scales:{_index_:{type:"category"},_value_:{type:"linear"}}};var ne=class extends et{constructor(t,e){super(t,e),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(t){let e=this._cachedMeta,s=this.chart,n=s.data.labels||[],o=Jt(e._parsed[t].r,s.options.locale);return{label:n[t]||"",value:o}}parseObjectData(t,e,s,n){return Gi.bind(this)(t,e,s,n)}update(t){let e=this._cachedMeta.data;this._updateRadius(),this.updateElements(e,0,e.length,t)}getMinMax(){let t=this._cachedMeta,e={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY};return t.data.forEach((s,n)=>{let o=this.getParsed(n).r;!isNaN(o)&&this.chart.getDataVisibility(n)&&(oe.max&&(e.max=o))}),e}_updateRadius(){let t=this.chart,e=t.chartArea,s=t.options,n=Math.min(e.right-e.left,e.bottom-e.top),o=Math.max(n/2,0),a=Math.max(s.cutoutPercentage?o/100*s.cutoutPercentage:1,0),r=(o-a)/t.getVisibleDatasetCount();this.outerRadius=o-r*this.index,this.innerRadius=this.outerRadius-r}updateElements(t,e,s,n){let o=n==="reset",a=this.chart,l=a.options.animation,c=this._cachedMeta.rScale,h=c.xCenter,d=c.yCenter,u=c.getIndexAngle(0)-.5*B,f=u,g,p=360/this.countVisibleElements();for(g=0;g{!isNaN(this.getParsed(n).r)&&this.chart.getDataVisibility(n)&&e++}),e}_computeAngle(t,e,s){return this.chart.getDataVisibility(t)?nt(this.resolveDataElementOptions(t,e).angle||s):0}};ne.id="polarArea";ne.defaults={dataElementType:"arc",animation:{animateRotate:!0,animateScale:!0},animations:{numbers:{type:"number",properties:["x","y","startAngle","endAngle","innerRadius","outerRadius"]}},indexAxis:"r",startAngle:0};ne.overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(i){let t=i.data;if(t.labels.length&&t.datasets.length){let{labels:{pointStyle:e}}=i.legend.options;return t.labels.map((s,n)=>{let a=i.getDatasetMeta(0).controller.getStyle(n);return{text:s,fillStyle:a.backgroundColor,strokeStyle:a.borderColor,lineWidth:a.borderWidth,pointStyle:e,hidden:!i.getDataVisibility(n),index:n}})}return[]}},onClick(i,t,e){e.chart.toggleDataVisibility(t.index),e.chart.update()}},tooltip:{callbacks:{title(){return""},label(i){return i.chart.data.labels[i.dataIndex]+": "+i.formattedValue}}}},scales:{r:{type:"radialLinear",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}};var De=class extends Ot{};De.id="pie";De.defaults={cutout:0,rotation:0,circumference:360,radius:"100%"};var oe=class extends et{getLabelAndValue(t){let e=this._cachedMeta.vScale,s=this.getParsed(t);return{label:e.getLabels()[t],value:""+e.getLabelForValue(s[e.axis])}}parseObjectData(t,e,s,n){return Gi.bind(this)(t,e,s,n)}update(t){let e=this._cachedMeta,s=e.dataset,n=e.data||[],o=e.iScale.getLabels();if(s.points=n,t!=="resize"){let a=this.resolveDatasetElementOptions(t);this.options.showLine||(a.borderWidth=0);let r={_loop:!0,_fullLoop:o.length===n.length,options:a};this.updateElement(s,void 0,r,t)}this.updateElements(n,0,n.length,t)}updateElements(t,e,s,n){let o=this._cachedMeta.rScale,a=n==="reset";for(let r=e;r{n[o]=s[o]&&s[o].active()?s[o]._to:this[o]}),n}};it.defaults={};it.defaultRoutes=void 0;var mo={values(i){return I(i)?i:""+i},numeric(i,t,e){if(i===0)return"0";let s=this.chart.options.locale,n,o=i;if(e.length>1){let c=Math.max(Math.abs(e[0].value),Math.abs(e[e.length-1].value));(c<1e-4||c>1e15)&&(n="scientific"),o=mr(i,e)}let a=tt(Math.abs(o)),r=Math.max(Math.min(-1*Math.floor(a),20),0),l={notation:n,minimumFractionDigits:r,maximumFractionDigits:r};return Object.assign(l,this.options.ticks.format),Jt(i,s,l)},logarithmic(i,t,e){if(i===0)return"0";let s=i/Math.pow(10,Math.floor(tt(i)));return s===1||s===2||s===5?mo.numeric.call(this,i,t,e):""}};function mr(i,t){let e=t.length>3?t[2].value-t[1].value:t[1].value-t[0].value;return Math.abs(e)>=1&&i!==Math.floor(i)&&(e=i-Math.floor(i)),e}var mi={formatters:mo};O.set("scale",{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:"ticks",grace:0,grid:{display:!0,lineWidth:1,drawBorder:!0,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(i,t)=>t.lineWidth,tickColor:(i,t)=>t.color,offset:!1,borderDash:[],borderDashOffset:0,borderWidth:1},title:{display:!1,text:"",padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:"",padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:mi.formatters.values,minor:{},major:{},align:"center",crossAlign:"near",showLabelBackdrop:!1,backdropColor:"rgba(255, 255, 255, 0.75)",backdropPadding:2}});O.route("scale.ticks","color","","color");O.route("scale.grid","color","","borderColor");O.route("scale.grid","borderColor","","borderColor");O.route("scale.title","color","","color");O.describe("scale",{_fallback:!1,_scriptable:i=>!i.startsWith("before")&&!i.startsWith("after")&&i!=="callback"&&i!=="parser",_indexable:i=>i!=="borderDash"&&i!=="tickBorderDash"});O.describe("scales",{_fallback:"scale"});O.describe("scale.ticks",{_scriptable:i=>i!=="backdropPadding"&&i!=="callback",_indexable:i=>i!=="backdropPadding"});function br(i,t){let e=i.options.ticks,s=e.maxTicksLimit||_r(i),n=e.major.enabled?yr(t):[],o=n.length,a=n[0],r=n[o-1],l=[];if(o>s)return vr(t,l,n,o/s),l;let c=xr(n,t,s);if(o>0){let h,d,u=o>1?Math.round((r-a)/(o-1)):null;for(si(t,l,c,T(u)?0:a-u,a),h=0,d=o-1;hn)return l}return Math.max(n,1)}function yr(i){let t=[],e,s;for(e=0,s=i.length;ei==="left"?"right":i==="right"?"left":i,Ln=(i,t,e)=>t==="top"||t==="left"?i[t]+e:i[t]-e;function Rn(i,t){let e=[],s=i.length/t,n=i.length,o=0;for(;oa+r)))return l}function Sr(i,t){E(i,e=>{let s=e.gc,n=s.length/2,o;if(n>t){for(o=0;os?s:e,s=n&&e>s?e:s,{min:Q(e,Q(s,e)),max:Q(s,Q(e,s))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){let t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){z(this.options.beforeUpdate,[this])}update(t,e,s){let{beginAtZero:n,grace:o,ticks:a}=this.options,r=a.sampleSize;this.beforeUpdate(),this.maxWidth=t,this.maxHeight=e,this._margins=s=Object.assign({left:0,right:0,top:0,bottom:0},s),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+s.left+s.right:this.height+s.top+s.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=hn(this,o,n),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();let l=r=o||s<=1||!this.isHorizontal()){this.labelRotation=n;return}let h=this._getLabelSizes(),d=h.widest.width,u=h.highest.height,f=Y(this.chart.width-d,0,this.maxWidth);r=t.offset?this.maxWidth/s:f/(s-1),d+6>r&&(r=f/(s-(t.offset?.5:1)),l=this.maxHeight-Me(t.grid)-e.padding-En(t.title,this.chart.options.font),c=Math.sqrt(d*d+u*u),a=Ke(Math.min(Math.asin(Y((h.highest.height+6)/r,-1,1)),Math.asin(Y(l/c,-1,1))-Math.asin(Y(u/c,-1,1)))),a=Math.max(n,Math.min(o,a))),this.labelRotation=a}afterCalculateLabelRotation(){z(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){z(this.options.beforeFit,[this])}fit(){let t={width:0,height:0},{chart:e,options:{ticks:s,title:n,grid:o}}=this,a=this._isVisible(),r=this.isHorizontal();if(a){let l=En(n,e.options.font);if(r?(t.width=this.maxWidth,t.height=Me(o)+l):(t.height=this.maxHeight,t.width=Me(o)+l),s.display&&this.ticks.length){let{first:c,last:h,widest:d,highest:u}=this._getLabelSizes(),f=s.padding*2,g=nt(this.labelRotation),p=Math.cos(g),m=Math.sin(g);if(r){let b=s.mirror?0:m*d.width+p*u.height;t.height=Math.min(this.maxHeight,t.height+b+f)}else{let b=s.mirror?0:p*d.width+m*u.height;t.width=Math.min(this.maxWidth,t.width+b+f)}this._calculatePadding(c,h,m,p)}}this._handleMargins(),r?(this.width=this._length=e.width-this._margins.left-this._margins.right,this.height=t.height):(this.width=t.width,this.height=this._length=e.height-this._margins.top-this._margins.bottom)}_calculatePadding(t,e,s,n){let{ticks:{align:o,padding:a},position:r}=this.options,l=this.labelRotation!==0,c=r!=="top"&&this.axis==="x";if(this.isHorizontal()){let h=this.getPixelForTick(0)-this.left,d=this.right-this.getPixelForTick(this.ticks.length-1),u=0,f=0;l?c?(u=n*t.width,f=s*e.height):(u=s*t.height,f=n*e.width):o==="start"?f=e.width:o==="end"?u=t.width:o!=="inner"&&(u=t.width/2,f=e.width/2),this.paddingLeft=Math.max((u-h+a)*this.width/(this.width-h),0),this.paddingRight=Math.max((f-d+a)*this.width/(this.width-d),0)}else{let h=e.height/2,d=t.height/2;o==="start"?(h=0,d=t.height):o==="end"&&(h=e.height,d=0),this.paddingTop=h+a,this.paddingBottom=d+a}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){z(this.options.afterFit,[this])}isHorizontal(){let{axis:t,position:e}=this.options;return e==="top"||e==="bottom"||t==="x"}isFullSize(){return this.options.fullSize}_convertTicksToLabels(t){this.beforeTickToLabelConversion(),this.generateTickLabels(t);let e,s;for(e=0,s=t.length;e({width:o[w]||0,height:a[w]||0});return{first:M(0),last:M(e-1),widest:M(y),highest:M(x),widths:o,heights:a}}getLabelForValue(t){return t}getPixelForValue(t,e){return NaN}getValueForPixel(t){}getPixelForTick(t){let e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getPixelForDecimal(t){this._reversePixels&&(t=1-t);let e=this._startPixel+t*this._length;return Ks(this._alignToPixels?wt(this.chart,e,0):e)}getDecimalForPixel(t){let e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){let{min:t,max:e}=this;return t<0&&e<0?e:t>0&&e>0?t:0}getContext(t){let e=this.ticks||[];if(t>=0&&tr*n?r/s:l/n:l*n0}_computeGridLineItems(t){let e=this.axis,s=this.chart,n=this.options,{grid:o,position:a}=n,r=o.offset,l=this.isHorizontal(),h=this.ticks.length+(r?1:0),d=Me(o),u=[],f=o.setContext(this.getContext()),g=f.drawBorder?f.borderWidth:0,p=g/2,m=function(P){return wt(s,P,g)},b,_,v,y,x,M,w,S,k,L,R,A;if(a==="top")b=m(this.bottom),M=this.bottom-d,S=b-p,L=m(t.top)+p,A=t.bottom;else if(a==="bottom")b=m(this.top),L=t.top,A=m(t.bottom)-p,M=b+p,S=this.top+d;else if(a==="left")b=m(this.right),x=this.right-d,w=b-p,k=m(t.left)+p,R=t.right;else if(a==="right")b=m(this.left),k=t.left,R=m(t.right)-p,x=b+p,w=this.left+d;else if(e==="x"){if(a==="center")b=m((t.top+t.bottom)/2+.5);else if(D(a)){let P=Object.keys(a)[0],j=a[P];b=m(this.chart.scales[P].getPixelForValue(j))}L=t.top,A=t.bottom,M=b+p,S=M+d}else if(e==="y"){if(a==="center")b=m((t.left+t.right)/2);else if(D(a)){let P=Object.keys(a)[0],j=a[P];b=m(this.chart.scales[P].getPixelForValue(j))}x=b-p,w=x-d,k=t.left,R=t.right}let H=C(n.ticks.maxTicksLimit,h),q=Math.max(1,Math.ceil(h/H));for(_=0;_o.value===t);return n>=0?e.setContext(this.getContext(n)).lineWidth:0}drawGrid(t){let e=this.options.grid,s=this.ctx,n=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(t)),o,a,r=(l,c,h)=>{!h.width||!h.color||(s.save(),s.lineWidth=h.width,s.strokeStyle=h.color,s.setLineDash(h.borderDash||[]),s.lineDashOffset=h.borderDashOffset,s.beginPath(),s.moveTo(l.x,l.y),s.lineTo(c.x,c.y),s.stroke(),s.restore())};if(e.display)for(o=0,a=n.length;o{this.draw(n)}}]:[{z:s,draw:n=>{this.drawBackground(),this.drawGrid(n),this.drawTitle()}},{z:s+1,draw:()=>{this.drawBorder()}},{z:e,draw:n=>{this.drawLabels(n)}}]}getMatchingVisibleMetas(t){let e=this.chart.getSortedVisibleDatasetMetas(),s=this.axis+"AxisID",n=[],o,a;for(o=0,a=e.length;o{let s=e.split("."),n=s.pop(),o=[i].concat(s).join("."),a=t[e].split("."),r=a.pop(),l=a.join(".");O.route(o,n,l,r)})}function Lr(i){return"id"in i&&"defaults"in i}var ps=class{constructor(){this.controllers=new te(et,"datasets",!0),this.elements=new te(it,"elements"),this.plugins=new te(Object,"plugins"),this.scales=new te(_t,"scales"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...t){this._each("register",t)}remove(...t){this._each("unregister",t)}addControllers(...t){this._each("register",t,this.controllers)}addElements(...t){this._each("register",t,this.elements)}addPlugins(...t){this._each("register",t,this.plugins)}addScales(...t){this._each("register",t,this.scales)}getController(t){return this._get(t,this.controllers,"controller")}getElement(t){return this._get(t,this.elements,"element")}getPlugin(t){return this._get(t,this.plugins,"plugin")}getScale(t){return this._get(t,this.scales,"scale")}removeControllers(...t){this._each("unregister",t,this.controllers)}removeElements(...t){this._each("unregister",t,this.elements)}removePlugins(...t){this._each("unregister",t,this.plugins)}removeScales(...t){this._each("unregister",t,this.scales)}_each(t,e,s){[...e].forEach(n=>{let o=s||this._getRegistryForType(n);s||o.isForType(n)||o===this.plugins&&n.id?this._exec(t,o,n):E(n,a=>{let r=s||this._getRegistryForType(a);this._exec(t,r,a)})})}_exec(t,e,s){let n=Ue(t);z(s["before"+n],[],s),e[t](s),z(s["after"+n],[],s)}_getRegistryForType(t){for(let e=0;e0&&this.getParsed(e-1);for(let y=e;y0&&Math.abs(M[f]-v[f])>b,m&&(w.parsed=M,w.raw=c.data[y]),u&&(w.options=d||this.resolveDataElementOptions(y,x.active?"active":n)),_||this.updateElement(x,y,w,n),v=M}this.updateSharedOptions(d,n,h)}getMaxOverflow(){let t=this._cachedMeta,e=t.data||[];if(!this.options.showLine){let r=0;for(let l=e.length-1;l>=0;--l)r=Math.max(r,e[l].size(this.resolveDataElementOptions(l))/2);return r>0&&r}let s=t.dataset,n=s.options&&s.options.borderWidth||0;if(!e.length)return n;let o=e[0].size(this.resolveDataElementOptions(0)),a=e[e.length-1].size(this.resolveDataElementOptions(e.length-1));return Math.max(n,o,a)/2}};ae.id="scatter";ae.defaults={datasetElementType:!1,dataElementType:"point",showLine:!1,fill:!1};ae.overrides={interaction:{mode:"point"},plugins:{tooltip:{callbacks:{title(){return""},label(i){return"("+i.label+", "+i.formattedValue+")"}}}},scales:{x:{type:"linear"},y:{type:"linear"}}};var Rr=Object.freeze({__proto__:null,BarController:ee,BubbleController:ie,DoughnutController:Ot,LineController:se,PolarAreaController:ne,PieController:De,RadarController:oe,ScatterController:ae});function Ft(){throw new Error("This method is not implemented: Check that a complete date adapter is provided.")}var Oe=class{constructor(t){this.options=t||{}}init(t){}formats(){return Ft()}parse(t,e){return Ft()}format(t,e){return Ft()}add(t,e,s){return Ft()}diff(t,e,s){return Ft()}startOf(t,e,s){return Ft()}endOf(t,e){return Ft()}};Oe.override=function(i){Object.assign(Oe.prototype,i)};var Er={_date:Oe};function Fr(i,t,e,s){let{controller:n,data:o,_sorted:a}=i,r=n._cachedMeta.iScale;if(r&&t===r.axis&&t!=="r"&&a&&o.length){let l=r._reversePixels?qs:at;if(s){if(n._sharedOptions){let c=o[0],h=typeof c.getRange=="function"&&c.getRange(t);if(h){let d=l(o,t,e-h),u=l(o,t,e+h);return{lo:d.lo,hi:u.hi}}}}else return l(o,t,e)}return{lo:0,hi:o.length-1}}function Ie(i,t,e,s,n){let o=i.getSortedVisibleDatasetMetas(),a=e[t];for(let r=0,l=o.length;r{l[a](t[e],n)&&(o.push({element:l,datasetIndex:c,index:h}),r=r||l.inRange(t.x,t.y,n))}),s&&!r?[]:o}var Vr={evaluateInteractionItems:Ie,modes:{index(i,t,e,s){let n=Pt(t,i),o=e.axis||"x",a=e.includeInvisible||!1,r=e.intersect?rs(i,n,o,s,a):ls(i,n,o,!1,s,a),l=[];return r.length?(i.getSortedVisibleDatasetMetas().forEach(c=>{let h=r[0].index,d=c.data[h];d&&!d.skip&&l.push({element:d,datasetIndex:c.index,index:h})}),l):[]},dataset(i,t,e,s){let n=Pt(t,i),o=e.axis||"xy",a=e.includeInvisible||!1,r=e.intersect?rs(i,n,o,s,a):ls(i,n,o,!1,s,a);if(r.length>0){let l=r[0].datasetIndex,c=i.getDatasetMeta(l).data;r=[];for(let h=0;he.pos===t)}function In(i,t){return i.filter(e=>bo.indexOf(e.pos)===-1&&e.box.axis===t)}function ke(i,t){return i.sort((e,s)=>{let n=t?s:e,o=t?e:s;return n.weight===o.weight?n.index-o.index:n.weight-o.weight})}function Wr(i){let t=[],e,s,n,o,a,r;for(e=0,s=(i||[]).length;ec.box.fullSize),!0),s=ke(we(t,"left"),!0),n=ke(we(t,"right")),o=ke(we(t,"top"),!0),a=ke(we(t,"bottom")),r=In(t,"x"),l=In(t,"y");return{fullSize:e,leftAndTop:s.concat(o),rightAndBottom:n.concat(l).concat(a).concat(r),chartArea:we(t,"chartArea"),vertical:s.concat(n).concat(l),horizontal:o.concat(a).concat(r)}}function zn(i,t,e,s){return Math.max(i[e],t[e])+Math.max(i[s],t[s])}function _o(i,t){i.top=Math.max(i.top,t.top),i.left=Math.max(i.left,t.left),i.bottom=Math.max(i.bottom,t.bottom),i.right=Math.max(i.right,t.right)}function $r(i,t,e,s){let{pos:n,box:o}=e,a=i.maxPadding;if(!D(n)){e.size&&(i[n]-=e.size);let d=s[e.stack]||{size:0,count:1};d.size=Math.max(d.size,e.horizontal?o.height:o.width),e.size=d.size/d.count,i[n]+=e.size}o.getPadding&&_o(a,o.getPadding());let r=Math.max(0,t.outerWidth-zn(a,i,"left","right")),l=Math.max(0,t.outerHeight-zn(a,i,"top","bottom")),c=r!==i.w,h=l!==i.h;return i.w=r,i.h=l,e.horizontal?{same:c,other:h}:{same:h,other:c}}function Yr(i){let t=i.maxPadding;function e(s){let n=Math.max(t[s]-i[s],0);return i[s]+=n,n}i.y+=e("top"),i.x+=e("left"),e("right"),e("bottom")}function Xr(i,t){let e=t.maxPadding;function s(n){let o={left:0,top:0,right:0,bottom:0};return n.forEach(a=>{o[a]=Math.max(t[a],e[a])}),o}return s(i?["left","right"]:["top","bottom"])}function Pe(i,t,e,s){let n=[],o,a,r,l,c,h;for(o=0,a=i.length,c=0;o{typeof p.beforeLayout=="function"&&p.beforeLayout()});let h=l.reduce((p,m)=>m.box.options&&m.box.options.display===!1?p:p+1,0)||1,d=Object.freeze({outerWidth:t,outerHeight:e,padding:n,availableWidth:o,availableHeight:a,vBoxMaxWidth:o/2/h,hBoxMaxHeight:a/2}),u=Object.assign({},n);_o(u,U(s));let f=Object.assign({maxPadding:u,w:o,h:a,x:n.left,y:n.top},n),g=Hr(l.concat(c),d);Pe(r.fullSize,f,d,g),Pe(l,f,d,g),Pe(c,f,d,g)&&Pe(l,f,d,g),Yr(f),Bn(r.leftAndTop,f,d,g),f.x+=f.w,f.y+=f.h,Bn(r.rightAndBottom,f,d,g),i.chartArea={left:f.left,top:f.top,right:f.left+f.w,bottom:f.top+f.h,height:f.h,width:f.w},E(r.chartArea,p=>{let m=p.box;Object.assign(m,i.chartArea),m.update(f.w,f.h,{left:0,top:0,right:0,bottom:0})})}},di=class{acquireContext(t,e){}releaseContext(t){return!1}addEventListener(t,e,s){}removeEventListener(t,e,s){}getDevicePixelRatio(){return 1}getMaximumSize(t,e,s,n){return e=Math.max(0,e||t.width),s=s||t.height,{width:e,height:Math.max(0,n?Math.floor(e/n):s)}}isAttached(t){return!0}updateConfig(t){}},ms=class extends di{acquireContext(t){return t&&t.getContext&&t.getContext("2d")||null}updateConfig(t){t.options.animation=!1}},ci="$chartjs",Ur={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"},Vn=i=>i===null||i==="";function Kr(i,t){let e=i.style,s=i.getAttribute("height"),n=i.getAttribute("width");if(i[ci]={initial:{height:s,width:n,style:{display:e.display,height:e.height,width:e.width}}},e.display=e.display||"block",e.boxSizing=e.boxSizing||"border-box",Vn(n)){let o=Qi(i,"width");o!==void 0&&(i.width=o)}if(Vn(s))if(i.style.height==="")i.height=i.width/(t||2);else{let o=Qi(i,"height");o!==void 0&&(i.height=o)}return i}var xo=bn?{passive:!0}:!1;function qr(i,t,e){i.addEventListener(t,e,xo)}function Gr(i,t,e){i.canvas.removeEventListener(t,e,xo)}function Zr(i,t){let e=Ur[i.type]||i.type,{x:s,y:n}=Pt(i,t);return{type:e,chart:t,native:i,x:s!==void 0?s:null,y:n!==void 0?n:null}}function ui(i,t){for(let e of i)if(e===t||e.contains(t))return!0}function Jr(i,t,e){let s=i.canvas,n=new MutationObserver(o=>{let a=!1;for(let r of o)a=a||ui(r.addedNodes,s),a=a&&!ui(r.removedNodes,s);a&&e()});return n.observe(document,{childList:!0,subtree:!0}),n}function Qr(i,t,e){let s=i.canvas,n=new MutationObserver(o=>{let a=!1;for(let r of o)a=a||ui(r.removedNodes,s),a=a&&!ui(r.addedNodes,s);a&&e()});return n.observe(document,{childList:!0,subtree:!0}),n}var Ae=new Map,Wn=0;function yo(){let i=window.devicePixelRatio;i!==Wn&&(Wn=i,Ae.forEach((t,e)=>{e.currentDevicePixelRatio!==i&&t()}))}function tl(i,t){Ae.size||window.addEventListener("resize",yo),Ae.set(i,t)}function el(i){Ae.delete(i),Ae.size||window.removeEventListener("resize",yo)}function il(i,t,e){let s=i.canvas,n=s&&ei(s);if(!n)return;let o=zi((r,l)=>{let c=n.clientWidth;e(r,l),c{let l=r[0],c=l.contentRect.width,h=l.contentRect.height;c===0&&h===0||o(c,h)});return a.observe(n),tl(i,o),a}function cs(i,t,e){e&&e.disconnect(),t==="resize"&&el(i)}function sl(i,t,e){let s=i.canvas,n=zi(o=>{i.ctx!==null&&e(Zr(o,i))},i,o=>{let a=o[0];return[a,a.offsetX,a.offsetY]});return qr(s,t,n),n}var bs=class extends di{acquireContext(t,e){let s=t&&t.getContext&&t.getContext("2d");return s&&s.canvas===t?(Kr(t,e),s):null}releaseContext(t){let e=t.canvas;if(!e[ci])return!1;let s=e[ci].initial;["height","width"].forEach(o=>{let a=s[o];T(a)?e.removeAttribute(o):e.setAttribute(o,a)});let n=s.style||{};return Object.keys(n).forEach(o=>{e.style[o]=n[o]}),e.width=e.width,delete e[ci],!0}addEventListener(t,e,s){this.removeEventListener(t,e);let n=t.$proxies||(t.$proxies={}),a={attach:Jr,detach:Qr,resize:il}[e]||sl;n[e]=a(t,e,s)}removeEventListener(t,e){let s=t.$proxies||(t.$proxies={}),n=s[e];if(!n)return;({attach:cs,detach:cs,resize:cs}[e]||Gr)(t,e,n),s[e]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(t,e,s,n){return mn(t,e,s,n)}isAttached(t){let e=ei(t);return!!(e&&e.isConnected)}};function nl(i){return!Zi()||typeof OffscreenCanvas<"u"&&i instanceof OffscreenCanvas?ms:bs}var _s=class{constructor(){this._init=[]}notify(t,e,s,n){e==="beforeInit"&&(this._init=this._createDescriptors(t,!0),this._notify(this._init,t,"install"));let o=n?this._descriptors(t).filter(n):this._descriptors(t),a=this._notify(o,t,e,s);return e==="afterDestroy"&&(this._notify(o,t,"stop"),this._notify(this._init,t,"uninstall")),a}_notify(t,e,s,n){n=n||{};for(let o of t){let a=o.plugin,r=a[s],l=[e,n,o.options];if(z(r,l,a)===!1&&n.cancelable)return!1}return!0}invalidate(){T(this._cache)||(this._oldCache=this._cache,this._cache=void 0)}_descriptors(t){if(this._cache)return this._cache;let e=this._cache=this._createDescriptors(t);return this._notifyStateChanges(t),e}_createDescriptors(t,e){let s=t&&t.config,n=C(s.options&&s.options.plugins,{}),o=ol(s);return n===!1&&!e?[]:rl(t,o,n,e)}_notifyStateChanges(t){let e=this._oldCache||[],s=this._cache,n=(o,a)=>o.filter(r=>!a.some(l=>r.plugin.id===l.plugin.id));this._notify(n(e,s),t,"stop"),this._notify(n(s,e),t,"start")}};function ol(i){let t={},e=[],s=Object.keys(ht.plugins.items);for(let o=0;o{let l=s[r];if(!D(l))return console.error(`Invalid scale configuration for scale: ${r}`);if(l._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${r}`);let c=ys(r,l),h=hl(c,n),d=e.scales||{};o[c]=o[c]||r,a[r]=Ut(Object.create(null),[{axis:c},l,d[c],d[h]])}),i.data.datasets.forEach(r=>{let l=r.type||i.type,c=r.indexAxis||xs(l,t),d=(Mt[l]||{}).scales||{};Object.keys(d).forEach(u=>{let f=cl(u,c),g=r[f+"AxisID"]||o[f]||f;a[g]=a[g]||Object.create(null),Ut(a[g],[{axis:f},s[g],d[u]])})}),Object.keys(a).forEach(r=>{let l=a[r];Ut(l,[O.scales[l.type],O.scale])}),a}function vo(i){let t=i.options||(i.options={});t.plugins=C(t.plugins,{}),t.scales=ul(i,t)}function Mo(i){return i=i||{},i.datasets=i.datasets||[],i.labels=i.labels||[],i}function fl(i){return i=i||{},i.data=Mo(i.data),vo(i),i}var Nn=new Map,wo=new Set;function oi(i,t){let e=Nn.get(i);return e||(e=t(),Nn.set(i,e),wo.add(e)),e}var Se=(i,t,e)=>{let s=gt(t,e);s!==void 0&&i.add(s)},vs=class{constructor(t){this._config=fl(t),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(t){this._config.type=t}get data(){return this._config.data}set data(t){this._config.data=Mo(t)}get options(){return this._config.options}set options(t){this._config.options=t}get plugins(){return this._config.plugins}update(){let t=this._config;this.clearCache(),vo(t)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(t){return oi(t,()=>[[`datasets.${t}`,""]])}datasetAnimationScopeKeys(t,e){return oi(`${t}.transition.${e}`,()=>[[`datasets.${t}.transitions.${e}`,`transitions.${e}`],[`datasets.${t}`,""]])}datasetElementScopeKeys(t,e){return oi(`${t}-${e}`,()=>[[`datasets.${t}.elements.${e}`,`datasets.${t}`,`elements.${e}`,""]])}pluginScopeKeys(t){let e=t.id,s=this.type;return oi(`${s}-plugin-${e}`,()=>[[`plugins.${e}`,...t.additionalOptionScopes||[]]])}_cachedScopes(t,e){let s=this._scopeCache,n=s.get(t);return(!n||e)&&(n=new Map,s.set(t,n)),n}getOptionScopes(t,e,s){let{options:n,type:o}=this,a=this._cachedScopes(t,s),r=a.get(e);if(r)return r;let l=new Set;e.forEach(h=>{t&&(l.add(t),h.forEach(d=>Se(l,t,d))),h.forEach(d=>Se(l,n,d)),h.forEach(d=>Se(l,Mt[o]||{},d)),h.forEach(d=>Se(l,O,d)),h.forEach(d=>Se(l,Ze,d))});let c=Array.from(l);return c.length===0&&c.push(Object.create(null)),wo.has(e)&&a.set(e,c),c}chartOptionScopes(){let{options:t,type:e}=this;return[t,Mt[e]||{},O.datasets[e]||{},{type:e},O,Ze]}resolveNamedOptions(t,e,s,n=[""]){let o={$shared:!0},{resolver:a,subPrefixes:r}=Hn(this._resolverCache,t,n),l=a;if(pl(a,e)){o.$shared=!1,s=ft(s)?s():s;let c=this.createResolver(t,s,r);l=Lt(a,s,c)}for(let c of e)o[c]=l[c];return o}createResolver(t,e,s=[""],n){let{resolver:o}=Hn(this._resolverCache,t,s);return D(e)?Lt(o,e,void 0,n):o}};function Hn(i,t,e){let s=i.get(t);s||(s=new Map,i.set(t,s));let n=e.join(),o=s.get(n);return o||(o={resolver:ti(t,e),subPrefixes:e.filter(r=>!r.toLowerCase().includes("hover"))},s.set(n,o)),o}var gl=i=>D(i)&&Object.getOwnPropertyNames(i).reduce((t,e)=>t||ft(i[e]),!1);function pl(i,t){let{isScriptable:e,isIndexable:s}=Ui(i);for(let n of t){let o=e(n),a=s(n),r=(a||o)&&i[n];if(o&&(ft(r)||gl(r))||a&&I(r))return!0}return!1}var ml="3.9.1",bl=["top","bottom","left","right","chartArea"];function jn(i,t){return i==="top"||i==="bottom"||bl.indexOf(i)===-1&&t==="x"}function $n(i,t){return function(e,s){return e[i]===s[i]?e[t]-s[t]:e[i]-s[i]}}function Yn(i){let t=i.chart,e=t.options.animation;t.notifyPlugins("afterRender"),z(e&&e.onComplete,[i],t)}function _l(i){let t=i.chart,e=t.options.animation;z(e&&e.onProgress,[i],t)}function ko(i){return Zi()&&typeof i=="string"?i=document.getElementById(i):i&&i.length&&(i=i[0]),i&&i.canvas&&(i=i.canvas),i}var fi={},So=i=>{let t=ko(i);return Object.values(fi).filter(e=>e.canvas===t).pop()};function xl(i,t,e){let s=Object.keys(i);for(let n of s){let o=+n;if(o>=t){let a=i[n];delete i[n],(e>0||o>t)&&(i[o+e]=a)}}}function yl(i,t,e,s){return!e||i.type==="mouseout"?null:s?t:i}var It=class{constructor(t,e){let s=this.config=new vs(e),n=ko(t),o=So(n);if(o)throw new Error("Canvas is already in use. Chart with ID '"+o.id+"' must be destroyed before the canvas with ID '"+o.canvas.id+"' can be reused.");let a=s.createResolver(s.chartOptionScopes(),this.getContext());this.platform=new(s.platform||nl(n)),this.platform.updateConfig(s);let r=this.platform.acquireContext(n,a.aspectRatio),l=r&&r.canvas,c=l&&l.height,h=l&&l.width;if(this.id=Hs(),this.ctx=r,this.canvas=l,this.width=h,this.height=c,this._options=a,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new _s,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=Qs(d=>this.update(d),a.resizeDelay||0),this._dataChanges=[],fi[this.id]=this,!r||!l){console.error("Failed to create chart: can't acquire context from the given item");return}mt.listen(this,"complete",Yn),mt.listen(this,"progress",_l),this._initialize(),this.attached&&this.update()}get aspectRatio(){let{options:{aspectRatio:t,maintainAspectRatio:e},width:s,height:n,_aspectRatio:o}=this;return T(t)?e&&o?o:n?s/n:null:t}get data(){return this.config.data}set data(t){this.config.data=t}get options(){return this._options}set options(t){this.config.options=t}_initialize(){return this.notifyPlugins("beforeInit"),this.options.responsive?this.resize():Ji(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins("afterInit"),this}clear(){return $i(this.canvas,this.ctx),this}stop(){return mt.stop(this),this}resize(t,e){mt.running(this)?this._resizeBeforeDraw={width:t,height:e}:this._resize(t,e)}_resize(t,e){let s=this.options,n=this.canvas,o=s.maintainAspectRatio&&this.aspectRatio,a=this.platform.getMaximumSize(n,t,e,o),r=s.devicePixelRatio||this.platform.getDevicePixelRatio(),l=this.width?"resize":"attach";this.width=a.width,this.height=a.height,this._aspectRatio=this.aspectRatio,Ji(this,r,!0)&&(this.notifyPlugins("resize",{size:a}),z(s.onResize,[this,a],this),this.attached&&this._doResize(l)&&this.render())}ensureScalesHaveIDs(){let e=this.options.scales||{};E(e,(s,n)=>{s.id=n})}buildOrUpdateScales(){let t=this.options,e=t.scales,s=this.scales,n=Object.keys(s).reduce((a,r)=>(a[r]=!1,a),{}),o=[];e&&(o=o.concat(Object.keys(e).map(a=>{let r=e[a],l=ys(a,r),c=l==="r",h=l==="x";return{options:r,dposition:c?"chartArea":h?"bottom":"left",dtype:c?"radialLinear":h?"category":"linear"}}))),E(o,a=>{let r=a.options,l=r.id,c=ys(l,r),h=C(r.type,a.dtype);(r.position===void 0||jn(r.position,c)!==jn(a.dposition))&&(r.position=a.dposition),n[l]=!0;let d=null;if(l in s&&s[l].type===h)d=s[l];else{let u=ht.getScale(h);d=new u({id:l,type:h,ctx:this.ctx,chart:this}),s[d.id]=d}d.init(r,t)}),E(n,(a,r)=>{a||delete s[r]}),E(s,a=>{K.configure(this,a,a.options),K.addBox(this,a)})}_updateMetasets(){let t=this._metasets,e=this.data.datasets.length,s=t.length;if(t.sort((n,o)=>n.index-o.index),s>e){for(let n=e;ne.length&&delete this._stacks,t.forEach((s,n)=>{e.filter(o=>o===s._dataset).length===0&&this._destroyDatasetMeta(n)})}buildOrUpdateControllers(){let t=[],e=this.data.datasets,s,n;for(this._removeUnreferencedMetasets(),s=0,n=e.length;s{this.getDatasetMeta(e).controller.reset()},this)}reset(){this._resetElements(),this.notifyPlugins("reset")}update(t){let e=this.config;e.update();let s=this._options=e.createResolver(e.chartOptionScopes(),this.getContext()),n=this._animationsDisabled=!s.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),this.notifyPlugins("beforeUpdate",{mode:t,cancelable:!0})===!1)return;let o=this.buildOrUpdateControllers();this.notifyPlugins("beforeElementsUpdate");let a=0;for(let c=0,h=this.data.datasets.length;c{c.reset()}),this._updateDatasets(t),this.notifyPlugins("afterUpdate",{mode:t}),this._layers.sort($n("z","_idx"));let{_active:r,_lastEvent:l}=this;l?this._eventHandler(l,!0):r.length&&this._updateHoverStyles(r,r,!0),this.render()}_updateScales(){E(this.scales,t=>{K.removeBox(this,t)}),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){let t=this.options,e=new Set(Object.keys(this._listeners)),s=new Set(t.events);(!Oi(e,s)||!!this._responsiveListeners!==t.responsive)&&(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){let{_hiddenIndices:t}=this,e=this._getUniformDataChanges()||[];for(let{method:s,start:n,count:o}of e){let a=s==="_removeElements"?-o:o;xl(t,n,a)}}_getUniformDataChanges(){let t=this._dataChanges;if(!t||!t.length)return;this._dataChanges=[];let e=this.data.datasets.length,s=o=>new Set(t.filter(a=>a[0]===o).map((a,r)=>r+","+a.splice(1).join(","))),n=s(0);for(let o=1;oo.split(",")).map(o=>({method:o[1],start:+o[2],count:+o[3]}))}_updateLayout(t){if(this.notifyPlugins("beforeLayout",{cancelable:!0})===!1)return;K.update(this,this.width,this.height,t);let e=this.chartArea,s=e.width<=0||e.height<=0;this._layers=[],E(this.boxes,n=>{s&&n.position==="chartArea"||(n.configure&&n.configure(),this._layers.push(...n._layers()))},this),this._layers.forEach((n,o)=>{n._idx=o}),this.notifyPlugins("afterLayout")}_updateDatasets(t){if(this.notifyPlugins("beforeDatasetsUpdate",{mode:t,cancelable:!0})!==!1){for(let e=0,s=this.data.datasets.length;e=0;--e)this._drawDataset(t[e]);this.notifyPlugins("afterDatasetsDraw")}_drawDataset(t){let e=this.ctx,s=t._clip,n=!s.disabled,o=this.chartArea,a={meta:t,index:t.index,cancelable:!0};this.notifyPlugins("beforeDatasetDraw",a)!==!1&&(n&&xe(e,{left:s.left===!1?0:o.left-s.left,right:s.right===!1?this.width:o.right+s.right,top:s.top===!1?0:o.top-s.top,bottom:s.bottom===!1?this.height:o.bottom+s.bottom}),t.controller.draw(),n&&ye(e),a.cancelable=!1,this.notifyPlugins("afterDatasetDraw",a))}isPointInArea(t){return Yt(t,this.chartArea,this._minPadding)}getElementsAtEventForMode(t,e,s,n){let o=Vr.modes[e];return typeof o=="function"?o(this,t,s,n):[]}getDatasetMeta(t){let e=this.data.datasets[t],s=this._metasets,n=s.filter(o=>o&&o._dataset===e).pop();return n||(n={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e&&e.order||0,index:t,_dataset:e,_parsed:[],_sorted:!1},s.push(n)),n}getContext(){return this.$context||(this.$context=pt(null,{chart:this,type:"chart"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(t){let e=this.data.datasets[t];if(!e)return!1;let s=this.getDatasetMeta(t);return typeof s.hidden=="boolean"?!s.hidden:!e.hidden}setDatasetVisibility(t,e){let s=this.getDatasetMeta(t);s.hidden=!e}toggleDataVisibility(t){this._hiddenIndices[t]=!this._hiddenIndices[t]}getDataVisibility(t){return!this._hiddenIndices[t]}_updateVisibility(t,e,s){let n=s?"show":"hide",o=this.getDatasetMeta(t),a=o.controller._resolveAnimations(void 0,n);J(e)?(o.data[e].hidden=!s,this.update()):(this.setDatasetVisibility(t,s),a.update(o,{visible:s}),this.update(r=>r.datasetIndex===t?n:void 0))}hide(t,e){this._updateVisibility(t,e,!1)}show(t,e){this._updateVisibility(t,e,!0)}_destroyDatasetMeta(t){let e=this._metasets[t];e&&e.controller&&e.controller._destroy(),delete this._metasets[t]}_stop(){let t,e;for(this.stop(),mt.remove(this),t=0,e=this.data.datasets.length;t{e.addEventListener(this,o,a),t[o]=a},n=(o,a,r)=>{o.offsetX=a,o.offsetY=r,this._eventHandler(o)};E(this.options.events,o=>s(o,n))}bindResponsiveEvents(){this._responsiveListeners||(this._responsiveListeners={});let t=this._responsiveListeners,e=this.platform,s=(l,c)=>{e.addEventListener(this,l,c),t[l]=c},n=(l,c)=>{t[l]&&(e.removeEventListener(this,l,c),delete t[l])},o=(l,c)=>{this.canvas&&this.resize(l,c)},a,r=()=>{n("attach",r),this.attached=!0,this.resize(),s("resize",o),s("detach",a)};a=()=>{this.attached=!1,n("resize",o),this._stop(),this._resize(0,0),s("attach",r)},e.isAttached(this.canvas)?r():a()}unbindEvents(){E(this._listeners,(t,e)=>{this.platform.removeEventListener(this,e,t)}),this._listeners={},E(this._responsiveListeners,(t,e)=>{this.platform.removeEventListener(this,e,t)}),this._responsiveListeners=void 0}updateHoverStyle(t,e,s){let n=s?"set":"remove",o,a,r,l;for(e==="dataset"&&(o=this.getDatasetMeta(t[0].datasetIndex),o.controller["_"+n+"DatasetHoverStyle"]()),r=0,l=t.length;r{let r=this.getDatasetMeta(o);if(!r)throw new Error("No dataset found at index "+o);return{datasetIndex:o,element:r.data[a],index:a}});!be(s,e)&&(this._active=s,this._lastEvent=null,this._updateHoverStyles(s,e))}notifyPlugins(t,e,s){return this._plugins.notify(this,t,e,s)}_updateHoverStyles(t,e,s){let n=this.options.hover,o=(l,c)=>l.filter(h=>!c.some(d=>h.datasetIndex===d.datasetIndex&&h.index===d.index)),a=o(e,t),r=s?t:o(t,e);a.length&&this.updateHoverStyle(a,n.mode,!1),r.length&&n.mode&&this.updateHoverStyle(r,n.mode,!0)}_eventHandler(t,e){let s={event:t,replay:e,cancelable:!0,inChartArea:this.isPointInArea(t)},n=a=>(a.options.events||this.options.events).includes(t.native.type);if(this.notifyPlugins("beforeEvent",s,n)===!1)return;let o=this._handleEvent(t,e,s.inChartArea);return s.cancelable=!1,this.notifyPlugins("afterEvent",s,n),(o||s.changed)&&this.render(),this}_handleEvent(t,e,s){let{_active:n=[],options:o}=this,a=e,r=this._getActiveElements(t,n,s,a),l=Ys(t),c=yl(t,this._lastEvent,s,l);s&&(this._lastEvent=null,z(o.onHover,[t,r,this],this),l&&z(o.onClick,[t,r,this],this));let h=!be(r,n);return(h||e)&&(this._active=r,this._updateHoverStyles(r,n,e)),this._lastEvent=c,h}_getActiveElements(t,e,s,n){if(t.type==="mouseout")return[];if(!s)return e;let o=this.options.hover;return this.getElementsAtEventForMode(t,o.mode,o,n)}},Xn=()=>E(It.instances,i=>i._plugins.invalidate()),Ct=!0;Object.defineProperties(It,{defaults:{enumerable:Ct,value:O},instances:{enumerable:Ct,value:fi},overrides:{enumerable:Ct,value:Mt},registry:{enumerable:Ct,value:ht},version:{enumerable:Ct,value:ml},getChart:{enumerable:Ct,value:So},register:{enumerable:Ct,value:(...i)=>{ht.add(...i),Xn()}},unregister:{enumerable:Ct,value:(...i)=>{ht.remove(...i),Xn()}}});function Po(i,t,e){let{startAngle:s,pixelMargin:n,x:o,y:a,outerRadius:r,innerRadius:l}=t,c=n/r;i.beginPath(),i.arc(o,a,r,s-c,e+c),l>n?(c=n/l,i.arc(o,a,l,e+c,s-c,!0)):i.arc(o,a,n,e+V,s-V),i.closePath(),i.clip()}function vl(i){return Qe(i,["outerStart","outerEnd","innerStart","innerEnd"])}function Ml(i,t,e,s){let n=vl(i.options.borderRadius),o=(e-t)/2,a=Math.min(o,s*t/2),r=l=>{let c=(e-Math.min(o,l))*s/2;return Y(l,0,Math.min(o,c))};return{outerStart:r(n.outerStart),outerEnd:r(n.outerEnd),innerStart:Y(n.innerStart,0,a),innerEnd:Y(n.innerEnd,0,a)}}function Qt(i,t,e,s){return{x:e+i*Math.cos(t),y:s+i*Math.sin(t)}}function Ms(i,t,e,s,n,o){let{x:a,y:r,startAngle:l,pixelMargin:c,innerRadius:h}=t,d=Math.max(t.outerRadius+s+e-c,0),u=h>0?h+s+e+c:0,f=0,g=n-l;if(s){let P=h>0?h-s:0,j=d>0?d-s:0,N=(P+j)/2,At=N!==0?g*N/(N+s):g;f=(g-At)/2}let p=Math.max(.001,g*d-e/B)/d,m=(g-p)/2,b=l+m+f,_=n-m-f,{outerStart:v,outerEnd:y,innerStart:x,innerEnd:M}=Ml(t,u,d,_-b),w=d-v,S=d-y,k=b+v/w,L=_-y/S,R=u+x,A=u+M,H=b+x/R,q=_-M/A;if(i.beginPath(),o){if(i.arc(a,r,d,k,L),y>0){let N=Qt(S,L,a,r);i.arc(N.x,N.y,y,L,_+V)}let P=Qt(A,_,a,r);if(i.lineTo(P.x,P.y),M>0){let N=Qt(A,q,a,r);i.arc(N.x,N.y,M,_+V,q+Math.PI)}if(i.arc(a,r,u,_-M/u,b+x/u,!0),x>0){let N=Qt(R,H,a,r);i.arc(N.x,N.y,x,H+Math.PI,b-V)}let j=Qt(w,b,a,r);if(i.lineTo(j.x,j.y),v>0){let N=Qt(w,k,a,r);i.arc(N.x,N.y,v,b-V,k)}}else{i.moveTo(a,r);let P=Math.cos(k)*d+a,j=Math.sin(k)*d+r;i.lineTo(P,j);let N=Math.cos(L)*d+a,At=Math.sin(L)*d+r;i.lineTo(N,At)}i.closePath()}function wl(i,t,e,s,n){let{fullCircles:o,startAngle:a,circumference:r}=t,l=t.endAngle;if(o){Ms(i,t,e,s,a+F,n);for(let c=0;c=F||qt(o,r,l),p=lt(a,c+u,h+u);return g&&p}getCenterPoint(t){let{x:e,y:s,startAngle:n,endAngle:o,innerRadius:a,outerRadius:r}=this.getProps(["x","y","startAngle","endAngle","innerRadius","outerRadius","circumference"],t),{offset:l,spacing:c}=this.options,h=(n+o)/2,d=(a+r+c+l)/2;return{x:e+Math.cos(h)*d,y:s+Math.sin(h)*d}}tooltipPosition(t){return this.getCenterPoint(t)}draw(t){let{options:e,circumference:s}=this,n=(e.offset||0)/2,o=(e.spacing||0)/2,a=e.circular;if(this.pixelMargin=e.borderAlign==="inner"?.33:0,this.fullCircles=s>F?Math.floor(s/F):0,s===0||this.innerRadius<0||this.outerRadius<0)return;t.save();let r=0;if(n){r=n/2;let c=(this.startAngle+this.endAngle)/2;t.translate(Math.cos(c)*r,Math.sin(c)*r),this.circumference>=B&&(r=n)}t.fillStyle=e.backgroundColor,t.strokeStyle=e.borderColor;let l=wl(t,this,r,o,a);Sl(t,this,r,o,l,a),t.restore()}};re.id="arc";re.defaults={borderAlign:"center",borderColor:"#fff",borderJoinStyle:void 0,borderRadius:0,borderWidth:2,offset:0,spacing:0,angle:void 0,circular:!0};re.defaultRoutes={backgroundColor:"backgroundColor"};function Co(i,t,e=t){i.lineCap=C(e.borderCapStyle,t.borderCapStyle),i.setLineDash(C(e.borderDash,t.borderDash)),i.lineDashOffset=C(e.borderDashOffset,t.borderDashOffset),i.lineJoin=C(e.borderJoinStyle,t.borderJoinStyle),i.lineWidth=C(e.borderWidth,t.borderWidth),i.strokeStyle=C(e.borderColor,t.borderColor)}function Pl(i,t,e){i.lineTo(e.x,e.y)}function Cl(i){return i.stepped?ln:i.tension||i.cubicInterpolationMode==="monotone"?cn:Pl}function Do(i,t,e={}){let s=i.length,{start:n=0,end:o=s-1}=e,{start:a,end:r}=t,l=Math.max(n,a),c=Math.min(o,r),h=nr&&o>r;return{count:s,start:l,loop:t.loop,ilen:c(a+(c?r-y:y))%o,v=()=>{p!==m&&(i.lineTo(h,m),i.lineTo(h,p),i.lineTo(h,b))};for(l&&(f=n[_(0)],i.moveTo(f.x,f.y)),u=0;u<=r;++u){if(f=n[_(u)],f.skip)continue;let y=f.x,x=f.y,M=y|0;M===g?(xm&&(m=x),h=(d*h+y)/++d):(v(),i.lineTo(y,x),g=M,d=0,p=m=x),b=x}v()}function ws(i){let t=i.options,e=t.borderDash&&t.borderDash.length;return!i._decimated&&!i._loop&&!t.tension&&t.cubicInterpolationMode!=="monotone"&&!t.stepped&&!e?Ol:Dl}function Al(i){return i.stepped?_n:i.tension||i.cubicInterpolationMode==="monotone"?xn:xt}function Tl(i,t,e,s){let n=t._path;n||(n=t._path=new Path2D,t.path(n,e,s)&&n.closePath()),Co(i,t.options),i.stroke(n)}function Ll(i,t,e,s){let{segments:n,options:o}=t,a=ws(t);for(let r of n)Co(i,o,r.style),i.beginPath(),a(i,t,r,{start:e,end:e+s-1})&&i.closePath(),i.stroke()}var Rl=typeof Path2D=="function";function El(i,t,e,s){Rl&&!t.options.segment?Tl(i,t,e,s):Ll(i,t,e,s)}var dt=class extends it{constructor(t){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,t&&Object.assign(this,t)}updateControlPoints(t,e){let s=this.options;if((s.tension||s.cubicInterpolationMode==="monotone")&&!s.stepped&&!this._pointsUpdated){let n=s.spanGaps?this._loop:this._fullLoop;pn(this._points,s,t,n,e),this._pointsUpdated=!0}}set points(t){this._points=t,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=vn(this,this.options.segment))}first(){let t=this.segments,e=this.points;return t.length&&e[t[0].start]}last(){let t=this.segments,e=this.points,s=t.length;return s&&e[t[s-1].end]}interpolate(t,e){let s=this.options,n=t[e],o=this.points,a=ss(this,{property:e,start:n,end:n});if(!a.length)return;let r=[],l=Al(s),c,h;for(c=0,h=a.length;ci!=="borderDash"&&i!=="fill"};function Un(i,t,e,s){let n=i.options,{[e]:o}=i.getProps([e],s);return Math.abs(t-o)=e)return i.slice(t,t+e);let a=[],r=(e-2)/(o-2),l=0,c=t+e-1,h=t,d,u,f,g,p;for(a[l++]=i[h],d=0;df&&(f=g,u=i[_],p=_);a[l++]=u,h=p}return a[l++]=i[c],a}function Hl(i,t,e,s){let n=0,o=0,a,r,l,c,h,d,u,f,g,p,m=[],b=t+e-1,_=i[t].x,y=i[b].x-_;for(a=t;ap&&(p=c,u=a),n=(o*n+r.x)/++o;else{let M=a-1;if(!T(d)&&!T(u)){let w=Math.min(d,u),S=Math.max(d,u);w!==f&&w!==M&&m.push({...i[w],x:n}),S!==f&&S!==M&&m.push({...i[S],x:n})}a>0&&M!==f&&m.push(i[M]),m.push(r),h=x,o=0,g=p=c,d=u=f=a}}return m}function Ao(i){if(i._decimated){let t=i._data;delete i._decimated,delete i._data,Object.defineProperty(i,"data",{value:t})}}function Kn(i){i.data.datasets.forEach(t=>{Ao(t)})}function jl(i,t){let e=t.length,s=0,n,{iScale:o}=i,{min:a,max:r,minDefined:l,maxDefined:c}=o.getUserBounds();return l&&(s=Y(at(t,o.axis,a).lo,0,e-1)),c?n=Y(at(t,o.axis,r).hi+1,s,e)-s:n=e-s,{start:s,count:n}}var $l={id:"decimation",defaults:{algorithm:"min-max",enabled:!1},beforeElementsUpdate:(i,t,e)=>{if(!e.enabled){Kn(i);return}let s=i.width;i.data.datasets.forEach((n,o)=>{let{_data:a,indexAxis:r}=n,l=i.getDatasetMeta(o),c=a||n.data;if(Zt([r,i.options.indexAxis])==="y"||!l.controller.supportsDecimation)return;let h=i.scales[l.xAxisID];if(h.type!=="linear"&&h.type!=="time"||i.options.parsing)return;let{start:d,count:u}=jl(l,c),f=e.threshold||4*s;if(u<=f){Ao(n);return}T(a)&&(n._data=c,delete n.data,Object.defineProperty(n,"data",{configurable:!0,enumerable:!0,get:function(){return this._decimated},set:function(p){this._data=p}}));let g;switch(e.algorithm){case"lttb":g=Nl(c,d,u,s,e);break;case"min-max":g=Hl(c,d,u,s);break;default:throw new Error(`Unsupported decimation algorithm '${e.algorithm}'`)}n._decimated=g})},destroy(i){Kn(i)}};function Yl(i,t,e){let s=i.segments,n=i.points,o=t.points,a=[];for(let r of s){let{start:l,end:c}=r;c=Ps(l,c,n);let h=ks(e,n[l],n[c],r.loop);if(!t.segments){a.push({source:r,target:h,start:n[l],end:n[c]});continue}let d=ss(t,h);for(let u of d){let f=ks(e,o[u.start],o[u.end],u.loop),g=is(r,n,f);for(let p of g)a.push({source:p,target:u,start:{[e]:qn(h,f,"start",Math.max)},end:{[e]:qn(h,f,"end",Math.min)}})}}return a}function ks(i,t,e,s){if(s)return;let n=t[i],o=e[i];return i==="angle"&&(n=G(n),o=G(o)),{property:i,start:n,end:o}}function Xl(i,t){let{x:e=null,y:s=null}=i||{},n=t.points,o=[];return t.segments.forEach(({start:a,end:r})=>{r=Ps(a,r,n);let l=n[a],c=n[r];s!==null?(o.push({x:l.x,y:s}),o.push({x:c.x,y:s})):e!==null&&(o.push({x:e,y:l.y}),o.push({x:e,y:c.y}))}),o}function Ps(i,t,e){for(;t>i;t--){let s=e[t];if(!isNaN(s.x)&&!isNaN(s.y))break}return t}function qn(i,t,e,s){return i&&t?s(i[e],t[e]):i?i[e]:t?t[e]:0}function To(i,t){let e=[],s=!1;return I(i)?(s=!0,e=i):e=Xl(i,t),e.length?new dt({points:e,options:{tension:0},_loop:s,_fullLoop:s}):null}function Gn(i){return i&&i.fill!==!1}function Ul(i,t,e){let n=i[t].fill,o=[t],a;if(!e)return n;for(;n!==!1&&o.indexOf(n)===-1;){if(!W(n))return n;if(a=i[n],!a)return!1;if(a.visible)return n;o.push(n),n=a.fill}return!1}function Kl(i,t,e){let s=Jl(i);if(D(s))return isNaN(s.value)?!1:s;let n=parseFloat(s);return W(n)&&Math.floor(n)===n?ql(s[0],t,n,e):["origin","start","end","stack","shape"].indexOf(s)>=0&&s}function ql(i,t,e,s){return(i==="-"||i==="+")&&(e=t+e),e===t||e<0||e>=s?!1:e}function Gl(i,t){let e=null;return i==="start"?e=t.bottom:i==="end"?e=t.top:D(i)?e=t.getPixelForValue(i.value):t.getBasePixel&&(e=t.getBasePixel()),e}function Zl(i,t,e){let s;return i==="start"?s=e:i==="end"?s=t.options.reverse?t.min:t.max:D(i)?s=i.value:s=t.getBaseValue(),s}function Jl(i){let t=i.options,e=t.fill,s=C(e&&e.target,e);return s===void 0&&(s=!!t.backgroundColor),s===!1||s===null?!1:s===!0?"origin":s}function Ql(i){let{scale:t,index:e,line:s}=i,n=[],o=s.segments,a=s.points,r=tc(t,e);r.push(To({x:null,y:t.bottom},s));for(let l=0;l=0;--a){let r=n[a].$filler;r&&(r.line.updateControlPoints(o,r.axis),s&&r.fill&&us(i.ctx,r,o))}},beforeDatasetsDraw(i,t,e){if(e.drawTime!=="beforeDatasetsDraw")return;let s=i.getSortedVisibleDatasetMetas();for(let n=s.length-1;n>=0;--n){let o=s[n].$filler;Gn(o)&&us(i.ctx,o,i.chartArea)}},beforeDatasetDraw(i,t,e){let s=t.meta.$filler;!Gn(s)||e.drawTime!=="beforeDatasetDraw"||us(i.ctx,s,i.chartArea)},defaults:{propagate:!0,drawTime:"beforeDatasetDraw"}},to=(i,t)=>{let{boxHeight:e=t,boxWidth:s=t}=i;return i.usePointStyle&&(e=Math.min(e,t),s=i.pointStyleWidth||Math.min(s,t)),{boxWidth:s,boxHeight:e,itemHeight:Math.max(t,e)}},dc=(i,t)=>i!==null&&t!==null&&i.datasetIndex===t.datasetIndex&&i.index===t.index,pi=class extends it{constructor(t){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e,s){this.maxWidth=t,this.maxHeight=e,this._margins=s,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){let t=this.options.labels||{},e=z(t.generateLabels,[this.chart],this)||[];t.filter&&(e=e.filter(s=>t.filter(s,this.chart.data))),t.sort&&(e=e.sort((s,n)=>t.sort(s,n,this.chart.data))),this.options.reverse&&e.reverse(),this.legendItems=e}fit(){let{options:t,ctx:e}=this;if(!t.display){this.width=this.height=0;return}let s=t.labels,n=$(s.font),o=n.size,a=this._computeTitleHeight(),{boxWidth:r,itemHeight:l}=to(s,o),c,h;e.font=n.string,this.isHorizontal()?(c=this.maxWidth,h=this._fitRows(a,o,r,l)+10):(h=this.maxHeight,c=this._fitCols(a,o,r,l)+10),this.width=Math.min(c,t.maxWidth||this.maxWidth),this.height=Math.min(h,t.maxHeight||this.maxHeight)}_fitRows(t,e,s,n){let{ctx:o,maxWidth:a,options:{labels:{padding:r}}}=this,l=this.legendHitBoxes=[],c=this.lineWidths=[0],h=n+r,d=t;o.textAlign="left",o.textBaseline="middle";let u=-1,f=-h;return this.legendItems.forEach((g,p)=>{let m=s+e/2+o.measureText(g.text).width;(p===0||c[c.length-1]+m+2*r>a)&&(d+=h,c[c.length-(p>0?0:1)]=0,f+=h,u++),l[p]={left:0,top:f,row:u,width:m,height:n},c[c.length-1]+=m+r}),d}_fitCols(t,e,s,n){let{ctx:o,maxHeight:a,options:{labels:{padding:r}}}=this,l=this.legendHitBoxes=[],c=this.columnSizes=[],h=a-t,d=r,u=0,f=0,g=0,p=0;return this.legendItems.forEach((m,b)=>{let _=s+e/2+o.measureText(m.text).width;b>0&&f+n+2*r>h&&(d+=u+r,c.push({width:u,height:f}),g+=u+r,p++,u=f=0),l[b]={left:g,top:f,col:p,width:_,height:n},u=Math.max(u,_),f+=n+r}),d+=u,c.push({width:u,height:f}),d}adjustHitBoxes(){if(!this.options.display)return;let t=this._computeTitleHeight(),{legendHitBoxes:e,options:{align:s,labels:{padding:n},rtl:o}}=this,a=Et(o,this.left,this.width);if(this.isHorizontal()){let r=0,l=X(s,this.left+n,this.right-this.lineWidths[r]);for(let c of e)r!==c.row&&(r=c.row,l=X(s,this.left+n,this.right-this.lineWidths[r])),c.top+=this.top+t+n,c.left=a.leftForLtr(a.x(l),c.width),l+=c.width+n}else{let r=0,l=X(s,this.top+t+n,this.bottom-this.columnSizes[r].height);for(let c of e)c.col!==r&&(r=c.col,l=X(s,this.top+t+n,this.bottom-this.columnSizes[r].height)),c.top=l,c.left+=this.left+n,c.left=a.leftForLtr(a.x(c.left),c.width),l+=c.height+n}}isHorizontal(){return this.options.position==="top"||this.options.position==="bottom"}draw(){if(this.options.display){let t=this.ctx;xe(t,this),this._draw(),ye(t)}}_draw(){let{options:t,columnSizes:e,lineWidths:s,ctx:n}=this,{align:o,labels:a}=t,r=O.color,l=Et(t.rtl,this.left,this.width),c=$(a.font),{color:h,padding:d}=a,u=c.size,f=u/2,g;this.drawTitle(),n.textAlign=l.textAlign("left"),n.textBaseline="middle",n.lineWidth=.5,n.font=c.string;let{boxWidth:p,boxHeight:m,itemHeight:b}=to(a,u),_=function(w,S,k){if(isNaN(p)||p<=0||isNaN(m)||m<0)return;n.save();let L=C(k.lineWidth,1);if(n.fillStyle=C(k.fillStyle,r),n.lineCap=C(k.lineCap,"butt"),n.lineDashOffset=C(k.lineDashOffset,0),n.lineJoin=C(k.lineJoin,"miter"),n.lineWidth=L,n.strokeStyle=C(k.strokeStyle,r),n.setLineDash(C(k.lineDash,[])),a.usePointStyle){let R={radius:m*Math.SQRT2/2,pointStyle:k.pointStyle,rotation:k.rotation,borderWidth:L},A=l.xPlus(w,p/2),H=S+f;Yi(n,R,A,H,a.pointStyleWidth&&p)}else{let R=S+Math.max((u-m)/2,0),A=l.leftForLtr(w,p),H=St(k.borderRadius);n.beginPath(),Object.values(H).some(q=>q!==0)?Gt(n,{x:A,y:R,w:p,h:m,radius:H}):n.rect(A,R,p,m),n.fill(),L!==0&&n.stroke()}n.restore()},v=function(w,S,k){kt(n,k.text,w,S+b/2,c,{strikethrough:k.hidden,textAlign:l.textAlign(k.textAlign)})},y=this.isHorizontal(),x=this._computeTitleHeight();y?g={x:X(o,this.left+d,this.right-s[0]),y:this.top+d+x,line:0}:g={x:this.left+d,y:X(o,this.top+x+d,this.bottom-e[0].height),line:0},ts(this.ctx,t.textDirection);let M=b+d;this.legendItems.forEach((w,S)=>{n.strokeStyle=w.fontColor||h,n.fillStyle=w.fontColor||h;let k=n.measureText(w.text).width,L=l.textAlign(w.textAlign||(w.textAlign=a.textAlign)),R=p+f+k,A=g.x,H=g.y;l.setWidth(this.width),y?S>0&&A+R+d>this.right&&(H=g.y+=M,g.line++,A=g.x=X(o,this.left+d,this.right-s[g.line])):S>0&&H+M>this.bottom&&(A=g.x=A+e[g.line].width+d,g.line++,H=g.y=X(o,this.top+x+d,this.bottom-e[g.line].height));let q=l.x(A);_(q,H,w),A=tn(L,A+p+f,y?A+R:this.right,t.rtl),v(l.x(A),H,w),y?g.x+=R+d:g.y+=M}),es(this.ctx,t.textDirection)}drawTitle(){let t=this.options,e=t.title,s=$(e.font),n=U(e.padding);if(!e.display)return;let o=Et(t.rtl,this.left,this.width),a=this.ctx,r=e.position,l=s.size/2,c=n.top+l,h,d=this.left,u=this.width;if(this.isHorizontal())u=Math.max(...this.lineWidths),h=this.top+c,d=X(t.align,d,this.right-u);else{let g=this.columnSizes.reduce((p,m)=>Math.max(p,m.height),0);h=c+X(t.align,this.top,this.bottom-g-t.labels.padding-this._computeTitleHeight())}let f=X(r,d,d+u);a.textAlign=o.textAlign(Ge(r)),a.textBaseline="middle",a.strokeStyle=e.color,a.fillStyle=e.color,a.font=s.string,kt(a,e.text,f,h,s)}_computeTitleHeight(){let t=this.options.title,e=$(t.font),s=U(t.padding);return t.display?e.lineHeight+s.height:0}_getLegendItemAt(t,e){let s,n,o;if(lt(t,this.left,this.right)&<(e,this.top,this.bottom)){for(o=this.legendHitBoxes,s=0;si.chart.options.color,boxWidth:40,padding:10,generateLabels(i){let t=i.data.datasets,{labels:{usePointStyle:e,pointStyle:s,textAlign:n,color:o}}=i.legend.options;return i._getSortedDatasetMetas().map(a=>{let r=a.controller.getStyle(e?0:void 0),l=U(r.borderWidth);return{text:t[a.index].label,fillStyle:r.backgroundColor,fontColor:o,hidden:!a.visible,lineCap:r.borderCapStyle,lineDash:r.borderDash,lineDashOffset:r.borderDashOffset,lineJoin:r.borderJoinStyle,lineWidth:(l.width+l.height)/4,strokeStyle:r.borderColor,pointStyle:s||r.pointStyle,rotation:r.rotation,textAlign:n||r.textAlign,borderRadius:0,datasetIndex:a.index}},this)}},title:{color:i=>i.chart.options.color,display:!1,position:"center",text:""}},descriptors:{_scriptable:i=>!i.startsWith("on"),labels:{_scriptable:i=>!["generateLabels","filter","sort"].includes(i)}}},Te=class extends it{constructor(t){super(),this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this._padding=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e){let s=this.options;if(this.left=0,this.top=0,!s.display){this.width=this.height=this.right=this.bottom=0;return}this.width=this.right=t,this.height=this.bottom=e;let n=I(s.text)?s.text.length:1;this._padding=U(s.padding);let o=n*$(s.font).lineHeight+this._padding.height;this.isHorizontal()?this.height=o:this.width=o}isHorizontal(){let t=this.options.position;return t==="top"||t==="bottom"}_drawArgs(t){let{top:e,left:s,bottom:n,right:o,options:a}=this,r=a.align,l=0,c,h,d;return this.isHorizontal()?(h=X(r,s,o),d=e+t,c=o-s):(a.position==="left"?(h=s+t,d=X(r,n,e),l=B*-.5):(h=o-t,d=X(r,e,n),l=B*.5),c=n-e),{titleX:h,titleY:d,maxWidth:c,rotation:l}}draw(){let t=this.ctx,e=this.options;if(!e.display)return;let s=$(e.font),o=s.lineHeight/2+this._padding.top,{titleX:a,titleY:r,maxWidth:l,rotation:c}=this._drawArgs(o);kt(t,e.text,0,0,s,{color:e.color,maxWidth:l,rotation:c,textAlign:Ge(e.align),textBaseline:"middle",translation:[a,r]})}};function gc(i,t){let e=new Te({ctx:i.ctx,options:t,chart:i});K.configure(i,e,t),K.addBox(i,e),i.titleBlock=e}var pc={id:"title",_element:Te,start(i,t,e){gc(i,e)},stop(i){let t=i.titleBlock;K.removeBox(i,t),delete i.titleBlock},beforeUpdate(i,t,e){let s=i.titleBlock;K.configure(i,s,e),s.options=e},defaults:{align:"center",display:!1,font:{weight:"bold"},fullSize:!0,padding:10,position:"top",text:"",weight:2e3},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}},ai=new WeakMap,mc={id:"subtitle",start(i,t,e){let s=new Te({ctx:i.ctx,options:e,chart:i});K.configure(i,s,e),K.addBox(i,s),ai.set(i,s)},stop(i){K.removeBox(i,ai.get(i)),ai.delete(i)},beforeUpdate(i,t,e){let s=ai.get(i);K.configure(i,s,e),s.options=e},defaults:{align:"center",display:!1,font:{weight:"normal"},fullSize:!0,padding:0,position:"top",text:"",weight:1500},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}},Ce={average(i){if(!i.length)return!1;let t,e,s=0,n=0,o=0;for(t=0,e=i.length;t-1?i.split(` +`):i}function bc(i,t){let{element:e,datasetIndex:s,index:n}=t,o=i.getDatasetMeta(s).controller,{label:a,value:r}=o.getLabelAndValue(n);return{chart:i,label:a,parsed:o.getParsed(n),raw:i.data.datasets[s].data[n],formattedValue:r,dataset:o.getDataset(),dataIndex:n,datasetIndex:s,element:e}}function eo(i,t){let e=i.chart.ctx,{body:s,footer:n,title:o}=i,{boxWidth:a,boxHeight:r}=t,l=$(t.bodyFont),c=$(t.titleFont),h=$(t.footerFont),d=o.length,u=n.length,f=s.length,g=U(t.padding),p=g.height,m=0,b=s.reduce((y,x)=>y+x.before.length+x.lines.length+x.after.length,0);if(b+=i.beforeBody.length+i.afterBody.length,d&&(p+=d*c.lineHeight+(d-1)*t.titleSpacing+t.titleMarginBottom),b){let y=t.displayColors?Math.max(r,l.lineHeight):l.lineHeight;p+=f*y+(b-f)*l.lineHeight+(b-1)*t.bodySpacing}u&&(p+=t.footerMarginTop+u*h.lineHeight+(u-1)*t.footerSpacing);let _=0,v=function(y){m=Math.max(m,e.measureText(y).width+_)};return e.save(),e.font=c.string,E(i.title,v),e.font=l.string,E(i.beforeBody.concat(i.afterBody),v),_=t.displayColors?a+2+t.boxPadding:0,E(s,y=>{E(y.before,v),E(y.lines,v),E(y.after,v)}),_=0,e.font=h.string,E(i.footer,v),e.restore(),m+=g.width,{width:m,height:p}}function _c(i,t){let{y:e,height:s}=t;return ei.height-s/2?"bottom":"center"}function xc(i,t,e,s){let{x:n,width:o}=s,a=e.caretSize+e.caretPadding;if(i==="left"&&n+o+a>t.width||i==="right"&&n-o-a<0)return!0}function yc(i,t,e,s){let{x:n,width:o}=e,{width:a,chartArea:{left:r,right:l}}=i,c="center";return s==="center"?c=n<=(r+l)/2?"left":"right":n<=o/2?c="left":n>=a-o/2&&(c="right"),xc(c,i,t,e)&&(c="center"),c}function io(i,t,e){let s=e.yAlign||t.yAlign||_c(i,e);return{xAlign:e.xAlign||t.xAlign||yc(i,t,e,s),yAlign:s}}function vc(i,t){let{x:e,width:s}=i;return t==="right"?e-=s:t==="center"&&(e-=s/2),e}function Mc(i,t,e){let{y:s,height:n}=i;return t==="top"?s+=e:t==="bottom"?s-=n+e:s-=n/2,s}function so(i,t,e,s){let{caretSize:n,caretPadding:o,cornerRadius:a}=i,{xAlign:r,yAlign:l}=e,c=n+o,{topLeft:h,topRight:d,bottomLeft:u,bottomRight:f}=St(a),g=vc(t,r),p=Mc(t,l,c);return l==="center"?r==="left"?g+=c:r==="right"&&(g-=c):r==="left"?g-=Math.max(h,u)+n:r==="right"&&(g+=Math.max(d,f)+n),{x:Y(g,0,s.width-t.width),y:Y(p,0,s.height-t.height)}}function ri(i,t,e){let s=U(e.padding);return t==="center"?i.x+i.width/2:t==="right"?i.x+i.width-s.right:i.x+s.left}function no(i){return ct([],bt(i))}function wc(i,t,e){return pt(i,{tooltip:t,tooltipItems:e,type:"tooltip"})}function oo(i,t){let e=t&&t.dataset&&t.dataset.tooltip&&t.dataset.tooltip.callbacks;return e?i.override(e):i}var Le=class extends it{constructor(t){super(),this.opacity=0,this._active=[],this._eventPosition=void 0,this._size=void 0,this._cachedAnimations=void 0,this._tooltipItems=[],this.$animations=void 0,this.$context=void 0,this.chart=t.chart||t._chart,this._chart=this.chart,this.options=t.options,this.dataPoints=void 0,this.title=void 0,this.beforeBody=void 0,this.body=void 0,this.afterBody=void 0,this.footer=void 0,this.xAlign=void 0,this.yAlign=void 0,this.x=void 0,this.y=void 0,this.height=void 0,this.width=void 0,this.caretX=void 0,this.caretY=void 0,this.labelColors=void 0,this.labelPointStyles=void 0,this.labelTextColors=void 0}initialize(t){this.options=t,this._cachedAnimations=void 0,this.$context=void 0}_resolveAnimations(){let t=this._cachedAnimations;if(t)return t;let e=this.chart,s=this.options.setContext(this.getContext()),n=s.enabled&&e.options.animation&&s.animations,o=new hi(this.chart,n);return n._cacheable&&(this._cachedAnimations=Object.freeze(o)),o}getContext(){return this.$context||(this.$context=wc(this.chart.getContext(),this,this._tooltipItems))}getTitle(t,e){let{callbacks:s}=e,n=s.beforeTitle.apply(this,[t]),o=s.title.apply(this,[t]),a=s.afterTitle.apply(this,[t]),r=[];return r=ct(r,bt(n)),r=ct(r,bt(o)),r=ct(r,bt(a)),r}getBeforeBody(t,e){return no(e.callbacks.beforeBody.apply(this,[t]))}getBody(t,e){let{callbacks:s}=e,n=[];return E(t,o=>{let a={before:[],lines:[],after:[]},r=oo(s,o);ct(a.before,bt(r.beforeLabel.call(this,o))),ct(a.lines,r.label.call(this,o)),ct(a.after,bt(r.afterLabel.call(this,o))),n.push(a)}),n}getAfterBody(t,e){return no(e.callbacks.afterBody.apply(this,[t]))}getFooter(t,e){let{callbacks:s}=e,n=s.beforeFooter.apply(this,[t]),o=s.footer.apply(this,[t]),a=s.afterFooter.apply(this,[t]),r=[];return r=ct(r,bt(n)),r=ct(r,bt(o)),r=ct(r,bt(a)),r}_createItems(t){let e=this._active,s=this.chart.data,n=[],o=[],a=[],r=[],l,c;for(l=0,c=e.length;lt.filter(h,d,u,s))),t.itemSort&&(r=r.sort((h,d)=>t.itemSort(h,d,s))),E(r,h=>{let d=oo(t.callbacks,h);n.push(d.labelColor.call(this,h)),o.push(d.labelPointStyle.call(this,h)),a.push(d.labelTextColor.call(this,h))}),this.labelColors=n,this.labelPointStyles=o,this.labelTextColors=a,this.dataPoints=r,r}update(t,e){let s=this.options.setContext(this.getContext()),n=this._active,o,a=[];if(!n.length)this.opacity!==0&&(o={opacity:0});else{let r=Ce[s.position].call(this,n,this._eventPosition);a=this._createItems(s),this.title=this.getTitle(a,s),this.beforeBody=this.getBeforeBody(a,s),this.body=this.getBody(a,s),this.afterBody=this.getAfterBody(a,s),this.footer=this.getFooter(a,s);let l=this._size=eo(this,s),c=Object.assign({},r,l),h=io(this.chart,s,c),d=so(s,c,h,this.chart);this.xAlign=h.xAlign,this.yAlign=h.yAlign,o={opacity:1,x:d.x,y:d.y,width:l.width,height:l.height,caretX:r.x,caretY:r.y}}this._tooltipItems=a,this.$context=void 0,o&&this._resolveAnimations().update(this,o),t&&s.external&&s.external.call(this,{chart:this.chart,tooltip:this,replay:e})}drawCaret(t,e,s,n){let o=this.getCaretPosition(t,s,n);e.lineTo(o.x1,o.y1),e.lineTo(o.x2,o.y2),e.lineTo(o.x3,o.y3)}getCaretPosition(t,e,s){let{xAlign:n,yAlign:o}=this,{caretSize:a,cornerRadius:r}=s,{topLeft:l,topRight:c,bottomLeft:h,bottomRight:d}=St(r),{x:u,y:f}=t,{width:g,height:p}=e,m,b,_,v,y,x;return o==="center"?(y=f+p/2,n==="left"?(m=u,b=m-a,v=y+a,x=y-a):(m=u+g,b=m+a,v=y-a,x=y+a),_=m):(n==="left"?b=u+Math.max(l,h)+a:n==="right"?b=u+g-Math.max(c,d)-a:b=this.caretX,o==="top"?(v=f,y=v-a,m=b-a,_=b+a):(v=f+p,y=v+a,m=b+a,_=b-a),x=v),{x1:m,x2:b,x3:_,y1:v,y2:y,y3:x}}drawTitle(t,e,s){let n=this.title,o=n.length,a,r,l;if(o){let c=Et(s.rtl,this.x,this.width);for(t.x=ri(this,s.titleAlign,s),e.textAlign=c.textAlign(s.titleAlign),e.textBaseline="middle",a=$(s.titleFont),r=s.titleSpacing,e.fillStyle=s.titleColor,e.font=a.string,l=0;lv!==0)?(t.beginPath(),t.fillStyle=o.multiKeyBackground,Gt(t,{x:m,y:p,w:c,h:l,radius:_}),t.fill(),t.stroke(),t.fillStyle=a.backgroundColor,t.beginPath(),Gt(t,{x:b,y:p+1,w:c-2,h:l-2,radius:_}),t.fill()):(t.fillStyle=o.multiKeyBackground,t.fillRect(m,p,c,l),t.strokeRect(m,p,c,l),t.fillStyle=a.backgroundColor,t.fillRect(b,p+1,c-2,l-2))}t.fillStyle=this.labelTextColors[s]}drawBody(t,e,s){let{body:n}=this,{bodySpacing:o,bodyAlign:a,displayColors:r,boxHeight:l,boxWidth:c,boxPadding:h}=s,d=$(s.bodyFont),u=d.lineHeight,f=0,g=Et(s.rtl,this.x,this.width),p=function(S){e.fillText(S,g.x(t.x+f),t.y+u/2),t.y+=u+o},m=g.textAlign(a),b,_,v,y,x,M,w;for(e.textAlign=a,e.textBaseline="middle",e.font=d.string,t.x=ri(this,m,s),e.fillStyle=s.bodyColor,E(this.beforeBody,p),f=r&&m!=="right"?a==="center"?c/2+h:c+2+h:0,y=0,M=n.length;y0&&e.stroke()}_updateAnimationTarget(t){let e=this.chart,s=this.$animations,n=s&&s.x,o=s&&s.y;if(n||o){let a=Ce[t.position].call(this,this._active,this._eventPosition);if(!a)return;let r=this._size=eo(this,t),l=Object.assign({},a,this._size),c=io(e,t,l),h=so(t,l,c,e);(n._to!==h.x||o._to!==h.y)&&(this.xAlign=c.xAlign,this.yAlign=c.yAlign,this.width=r.width,this.height=r.height,this.caretX=a.x,this.caretY=a.y,this._resolveAnimations().update(this,h))}}_willRender(){return!!this.opacity}draw(t){let e=this.options.setContext(this.getContext()),s=this.opacity;if(!s)return;this._updateAnimationTarget(e);let n={width:this.width,height:this.height},o={x:this.x,y:this.y};s=Math.abs(s)<.001?0:s;let a=U(e.padding),r=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;e.enabled&&r&&(t.save(),t.globalAlpha=s,this.drawBackground(o,t,n,e),ts(t,e.textDirection),o.y+=a.top,this.drawTitle(o,t,e),this.drawBody(o,t,e),this.drawFooter(o,t,e),es(t,e.textDirection),t.restore())}getActiveElements(){return this._active||[]}setActiveElements(t,e){let s=this._active,n=t.map(({datasetIndex:r,index:l})=>{let c=this.chart.getDatasetMeta(r);if(!c)throw new Error("Cannot find a dataset at index "+r);return{datasetIndex:r,element:c.data[l],index:l}}),o=!be(s,n),a=this._positionChanged(n,e);(o||a)&&(this._active=n,this._eventPosition=e,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(t,e,s=!0){if(e&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;let n=this.options,o=this._active||[],a=this._getActiveElements(t,o,e,s),r=this._positionChanged(a,t),l=e||!be(a,o)||r;return l&&(this._active=a,(n.enabled||n.external)&&(this._eventPosition={x:t.x,y:t.y},this.update(!0,e))),l}_getActiveElements(t,e,s,n){let o=this.options;if(t.type==="mouseout")return[];if(!n)return e;let a=this.chart.getElementsAtEventForMode(t,o.mode,o,s);return o.reverse&&a.reverse(),a}_positionChanged(t,e){let{caretX:s,caretY:n,options:o}=this,a=Ce[o.position].call(this,t,e);return a!==!1&&(s!==a.x||n!==a.y)}};Le.positioners=Ce;var kc={id:"tooltip",_element:Le,positioners:Ce,afterInit(i,t,e){e&&(i.tooltip=new Le({chart:i,options:e}))},beforeUpdate(i,t,e){i.tooltip&&i.tooltip.initialize(e)},reset(i,t,e){i.tooltip&&i.tooltip.initialize(e)},afterDraw(i){let t=i.tooltip;if(t&&t._willRender()){let e={tooltip:t};if(i.notifyPlugins("beforeTooltipDraw",e)===!1)return;t.draw(i.ctx),i.notifyPlugins("afterTooltipDraw",e)}},afterEvent(i,t){if(i.tooltip){let e=t.replay;i.tooltip.handleEvent(t.event,e,t.inChartArea)&&(t.changed=!0)}},defaults:{enabled:!0,external:null,position:"average",backgroundColor:"rgba(0,0,0,0.8)",titleColor:"#fff",titleFont:{weight:"bold"},titleSpacing:2,titleMarginBottom:6,titleAlign:"left",bodyColor:"#fff",bodySpacing:2,bodyFont:{},bodyAlign:"left",footerColor:"#fff",footerSpacing:2,footerMarginTop:6,footerFont:{weight:"bold"},footerAlign:"left",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(i,t)=>t.bodyFont.size,boxWidth:(i,t)=>t.bodyFont.size,multiKeyBackground:"#fff",displayColors:!0,boxPadding:0,borderColor:"rgba(0,0,0,0)",borderWidth:0,animation:{duration:400,easing:"easeOutQuart"},animations:{numbers:{type:"number",properties:["x","y","width","height","caretX","caretY"]},opacity:{easing:"linear",duration:200}},callbacks:{beforeTitle:rt,title(i){if(i.length>0){let t=i[0],e=t.chart.data.labels,s=e?e.length:0;if(this&&this.options&&this.options.mode==="dataset")return t.dataset.label||"";if(t.label)return t.label;if(s>0&&t.dataIndexi!=="filter"&&i!=="itemSort"&&i!=="external",_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]},Sc=Object.freeze({__proto__:null,Decimation:$l,Filler:hc,Legend:fc,SubTitle:mc,Title:pc,Tooltip:kc}),Pc=(i,t,e,s)=>(typeof t=="string"?(e=i.push(t)-1,s.unshift({index:e,label:t})):isNaN(t)&&(e=null),e);function Cc(i,t,e,s){let n=i.indexOf(t);if(n===-1)return Pc(i,t,e,s);let o=i.lastIndexOf(t);return n!==o?e:n}var Dc=(i,t)=>i===null?null:Y(Math.round(i),0,t),he=class extends _t{constructor(t){super(t),this._startValue=void 0,this._valueRange=0,this._addedLabels=[]}init(t){let e=this._addedLabels;if(e.length){let s=this.getLabels();for(let{index:n,label:o}of e)s[n]===o&&s.splice(n,1);this._addedLabels=[]}super.init(t)}parse(t,e){if(T(t))return null;let s=this.getLabels();return e=isFinite(e)&&s[e]===t?e:Cc(s,t,C(e,t),this._addedLabels),Dc(e,s.length-1)}determineDataLimits(){let{minDefined:t,maxDefined:e}=this.getUserBounds(),{min:s,max:n}=this.getMinMax(!0);this.options.bounds==="ticks"&&(t||(s=0),e||(n=this.getLabels().length-1)),this.min=s,this.max=n}buildTicks(){let t=this.min,e=this.max,s=this.options.offset,n=[],o=this.getLabels();o=t===0&&e===o.length-1?o:o.slice(t,e+1),this._valueRange=Math.max(o.length-(s?0:1),1),this._startValue=this.min-(s?.5:0);for(let a=t;a<=e;a++)n.push({value:a});return n}getLabelForValue(t){let e=this.getLabels();return t>=0&&te.length-1?null:this.getPixelForValue(e[t].value)}getValueForPixel(t){return Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange)}getBasePixel(){return this.bottom}};he.id="category";he.defaults={ticks:{callback:he.prototype.getLabelForValue}};function Oc(i,t){let e=[],{bounds:n,step:o,min:a,max:r,precision:l,count:c,maxTicks:h,maxDigits:d,includeBounds:u}=i,f=o||1,g=h-1,{min:p,max:m}=t,b=!T(a),_=!T(r),v=!T(c),y=(m-p)/(d+1),x=Ai((m-p)/g/f)*f,M,w,S,k;if(x<1e-14&&!b&&!_)return[{value:p},{value:m}];k=Math.ceil(m/x)-Math.floor(p/x),k>g&&(x=Ai(k*x/g/f)*f),T(l)||(M=Math.pow(10,l),x=Math.ceil(x*M)/M),n==="ticks"?(w=Math.floor(p/x)*x,S=Math.ceil(m/x)*x):(w=p,S=m),b&&_&&o&&Us((r-a)/o,x/1e3)?(k=Math.round(Math.min((r-a)/x,h)),x=(r-a)/k,w=a,S=r):v?(w=b?a:w,S=_?r:S,k=c-1,x=(S-w)/k):(k=(S-w)/x,Kt(k,Math.round(k),x/1e3)?k=Math.round(k):k=Math.ceil(k));let L=Math.max(Li(x),Li(w));M=Math.pow(10,T(l)?L:l),w=Math.round(w*M)/M,S=Math.round(S*M)/M;let R=0;for(b&&(u&&w!==a?(e.push({value:a}),wn=e?n:l,r=l=>o=s?o:l;if(t){let l=ot(n),c=ot(o);l<0&&c<0?r(0):l>0&&c>0&&a(0)}if(n===o){let l=1;(o>=Number.MAX_SAFE_INTEGER||n<=Number.MIN_SAFE_INTEGER)&&(l=Math.abs(o*.05)),r(o+l),t||a(n-l)}this.min=n,this.max=o}getTickLimit(){let t=this.options.ticks,{maxTicksLimit:e,stepSize:s}=t,n;return s?(n=Math.ceil(this.max/s)-Math.floor(this.min/s)+1,n>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${s} would result generating up to ${n} ticks. Limiting to 1000.`),n=1e3)):(n=this.computeTickLimit(),e=e||11),e&&(n=Math.min(e,n)),n}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){let t=this.options,e=t.ticks,s=this.getTickLimit();s=Math.max(2,s);let n={maxTicks:s,bounds:t.bounds,min:t.min,max:t.max,precision:e.precision,step:e.stepSize,count:e.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:e.minRotation||0,includeBounds:e.includeBounds!==!1},o=this._range||this,a=Oc(n,o);return t.bounds==="ticks"&&Ti(a,this,"value"),t.reverse?(a.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),a}configure(){let t=this.ticks,e=this.min,s=this.max;if(super.configure(),this.options.offset&&t.length){let n=(s-e)/Math.max(t.length-1,1)/2;e-=n,s+=n}this._startValue=e,this._endValue=s,this._valueRange=s-e}getLabelForValue(t){return Jt(t,this.chart.options.locale,this.options.ticks.format)}},Re=class extends de{determineDataLimits(){let{min:t,max:e}=this.getMinMax(!0);this.min=W(t)?t:0,this.max=W(e)?e:1,this.handleTickRangeOptions()}computeTickLimit(){let t=this.isHorizontal(),e=t?this.width:this.height,s=nt(this.options.ticks.minRotation),n=(t?Math.sin(s):Math.cos(s))||.001,o=this._resolveTickFontOptions(0);return Math.ceil(e/Math.min(40,o.lineHeight/n))}getPixelForValue(t){return t===null?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getValueForPixel(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange}};Re.id="linear";Re.defaults={ticks:{callback:mi.formatters.numeric}};function ro(i){return i/Math.pow(10,Math.floor(tt(i)))===1}function Ac(i,t){let e=Math.floor(tt(t.max)),s=Math.ceil(t.max/Math.pow(10,e)),n=[],o=Q(i.min,Math.pow(10,Math.floor(tt(t.min)))),a=Math.floor(tt(o)),r=Math.floor(o/Math.pow(10,a)),l=a<0?Math.pow(10,Math.abs(a)):1;do n.push({value:o,major:ro(o)}),++r,r===10&&(r=1,++a,l=a>=0?1:l),o=Math.round(r*Math.pow(10,a)*l)/l;while(a0?s:null}determineDataLimits(){let{min:t,max:e}=this.getMinMax(!0);this.min=W(t)?Math.max(0,t):null,this.max=W(e)?Math.max(0,e):null,this.options.beginAtZero&&(this._zero=!0),this.handleTickRangeOptions()}handleTickRangeOptions(){let{minDefined:t,maxDefined:e}=this.getUserBounds(),s=this.min,n=this.max,o=l=>s=t?s:l,a=l=>n=e?n:l,r=(l,c)=>Math.pow(10,Math.floor(tt(l))+c);s===n&&(s<=0?(o(1),a(10)):(o(r(s,-1)),a(r(n,1)))),s<=0&&o(r(n,-1)),n<=0&&a(r(s,1)),this._zero&&this.min!==this._suggestedMin&&s===r(this.min,0)&&o(r(s,-1)),this.min=s,this.max=n}buildTicks(){let t=this.options,e={min:this._userMin,max:this._userMax},s=Ac(e,this);return t.bounds==="ticks"&&Ti(s,this,"value"),t.reverse?(s.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),s}getLabelForValue(t){return t===void 0?"0":Jt(t,this.chart.options.locale,this.options.ticks.format)}configure(){let t=this.min;super.configure(),this._startValue=tt(t),this._valueRange=tt(this.max)-tt(t)}getPixelForValue(t){return(t===void 0||t===0)&&(t=this.min),t===null||isNaN(t)?NaN:this.getPixelForDecimal(t===this.min?0:(tt(t)-this._startValue)/this._valueRange)}getValueForPixel(t){let e=this.getDecimalForPixel(t);return Math.pow(10,this._startValue+e*this._valueRange)}};Ee.id="logarithmic";Ee.defaults={ticks:{callback:mi.formatters.logarithmic,major:{enabled:!0}}};function Ss(i){let t=i.ticks;if(t.display&&i.display){let e=U(t.backdropPadding);return C(t.font&&t.font.size,O.font.size)+e.height}return 0}function Tc(i,t,e){return e=I(e)?e:[e],{w:rn(i,t.string,e),h:e.length*t.lineHeight}}function lo(i,t,e,s,n){return i===s||i===n?{start:t-e/2,end:t+e/2}:in?{start:t-e,end:t}:{start:t,end:t+e}}function Lc(i){let t={l:i.left+i._padding.left,r:i.right-i._padding.right,t:i.top+i._padding.top,b:i.bottom-i._padding.bottom},e=Object.assign({},t),s=[],n=[],o=i._pointLabels.length,a=i.options.pointLabels,r=a.centerPointLabels?B/o:0;for(let l=0;lt.r&&(r=(s.end-t.r)/o,i.r=Math.max(i.r,t.r+r)),n.startt.b&&(l=(n.end-t.b)/a,i.b=Math.max(i.b,t.b+l))}function Ec(i,t,e){let s=[],n=i._pointLabels.length,o=i.options,a=Ss(o)/2,r=i.drawingArea,l=o.pointLabels.centerPointLabels?B/n:0;for(let c=0;c270||e<90)&&(i-=t),i}function Bc(i,t){let{ctx:e,options:{pointLabels:s}}=i;for(let n=t-1;n>=0;n--){let o=s.setContext(i.getPointLabelContext(n)),a=$(o.font),{x:r,y:l,textAlign:c,left:h,top:d,right:u,bottom:f}=i._pointLabelItems[n],{backdropColor:g}=o;if(!T(g)){let p=St(o.borderRadius),m=U(o.backdropPadding);e.fillStyle=g;let b=h-m.left,_=d-m.top,v=u-h+m.width,y=f-d+m.height;Object.values(p).some(x=>x!==0)?(e.beginPath(),Gt(e,{x:b,y:_,w:v,h:y,radius:p}),e.fill()):e.fillRect(b,_,v,y)}kt(e,i._pointLabels[n],r,l+a.lineHeight/2,a,{color:o.color,textAlign:c,textBaseline:"middle"})}}function Lo(i,t,e,s){let{ctx:n}=i;if(e)n.arc(i.xCenter,i.yCenter,t,0,F);else{let o=i.getPointPosition(0,t);n.moveTo(o.x,o.y);for(let a=1;a{let n=z(this.options.pointLabels.callback,[e,s],this);return n||n===0?n:""}).filter((e,s)=>this.chart.getDataVisibility(s))}fit(){let t=this.options;t.display&&t.pointLabels.display?Lc(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(t,e,s,n){this.xCenter+=Math.floor((t-e)/2),this.yCenter+=Math.floor((s-n)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(t,e,s,n))}getIndexAngle(t){let e=F/(this._pointLabels.length||1),s=this.options.startAngle||0;return G(t*e+nt(s))}getDistanceFromCenterForValue(t){if(T(t))return NaN;let e=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-t)*e:(t-this.min)*e}getValueForDistanceFromCenter(t){if(T(t))return NaN;let e=t/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-e:this.min+e}getPointLabelContext(t){let e=this._pointLabels||[];if(t>=0&&t{if(h!==0){r=this.getDistanceFromCenterForValue(c.value);let d=n.setContext(this.getContext(h-1));Vc(this,d,r,o)}}),s.display){for(t.save(),a=o-1;a>=0;a--){let c=s.setContext(this.getPointLabelContext(a)),{color:h,lineWidth:d}=c;!d||!h||(t.lineWidth=d,t.strokeStyle=h,t.setLineDash(c.borderDash),t.lineDashOffset=c.borderDashOffset,r=this.getDistanceFromCenterForValue(e.ticks.reverse?this.min:this.max),l=this.getPointPosition(a,r),t.beginPath(),t.moveTo(this.xCenter,this.yCenter),t.lineTo(l.x,l.y),t.stroke())}t.restore()}}drawBorder(){}drawLabels(){let t=this.ctx,e=this.options,s=e.ticks;if(!s.display)return;let n=this.getIndexAngle(0),o,a;t.save(),t.translate(this.xCenter,this.yCenter),t.rotate(n),t.textAlign="center",t.textBaseline="middle",this.ticks.forEach((r,l)=>{if(l===0&&!e.reverse)return;let c=s.setContext(this.getContext(l)),h=$(c.font);if(o=this.getDistanceFromCenterForValue(this.ticks[l].value),c.showLabelBackdrop){t.font=h.string,a=t.measureText(r.label).width,t.fillStyle=c.backdropColor;let d=U(c.backdropPadding);t.fillRect(-a/2-d.left,-o-h.size/2-d.top,a+d.width,h.size+d.height)}kt(t,r.label,0,-o,h,{color:c.color})}),t.restore()}drawTitle(){}};zt.id="radialLinear";zt.defaults={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,lineWidth:1,borderDash:[],borderDashOffset:0},grid:{circular:!1},startAngle:0,ticks:{showLabelBackdrop:!0,callback:mi.formatters.numeric},pointLabels:{backdropColor:void 0,backdropPadding:2,display:!0,font:{size:10},callback(i){return i},padding:5,centerPointLabels:!1}};zt.defaultRoutes={"angleLines.color":"borderColor","pointLabels.color":"color","ticks.color":"color"};zt.descriptors={angleLines:{_fallback:"grid"}};var bi={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},Z=Object.keys(bi);function Nc(i,t){return i-t}function co(i,t){if(T(t))return null;let e=i._adapter,{parser:s,round:n,isoWeekday:o}=i._parseOpts,a=t;return typeof s=="function"&&(a=s(a)),W(a)||(a=typeof s=="string"?e.parse(a,s):e.parse(a)),a===null?null:(n&&(a=n==="week"&&(Rt(o)||o===!0)?e.startOf(a,"isoWeek",o):e.startOf(a,n)),+a)}function ho(i,t,e,s){let n=Z.length;for(let o=Z.indexOf(i);o=Z.indexOf(e);o--){let a=Z[o];if(bi[a].common&&i._adapter.diff(n,s,a)>=t-1)return a}return Z[e?Z.indexOf(e):0]}function jc(i){for(let t=Z.indexOf(i)+1,e=Z.length;t=t?e[s]:e[n];i[o]=!0}}function $c(i,t,e,s){let n=i._adapter,o=+n.startOf(t[0].value,s),a=t[t.length-1].value,r,l;for(r=o;r<=a;r=+n.add(r,1,s))l=e[r],l>=0&&(t[l].major=!0);return t}function fo(i,t,e){let s=[],n={},o=t.length,a,r;for(a=0;a+t.value))}initOffsets(t){let e=0,s=0,n,o;this.options.offset&&t.length&&(n=this.getDecimalForValue(t[0]),t.length===1?e=1-n:e=(this.getDecimalForValue(t[1])-n)/2,o=this.getDecimalForValue(t[t.length-1]),t.length===1?s=o:s=(o-this.getDecimalForValue(t[t.length-2]))/2);let a=t.length<3?.5:.25;e=Y(e,0,a),s=Y(s,0,a),this._offsets={start:e,end:s,factor:1/(e+1+s)}}_generate(){let t=this._adapter,e=this.min,s=this.max,n=this.options,o=n.time,a=o.unit||ho(o.minUnit,e,s,this._getLabelCapacity(e)),r=C(o.stepSize,1),l=a==="week"?o.isoWeekday:!1,c=Rt(l)||l===!0,h={},d=e,u,f;if(c&&(d=+t.startOf(d,"isoWeek",l)),d=+t.startOf(d,c?"day":a),t.diff(s,e,a)>1e5*r)throw new Error(e+" and "+s+" are too far apart with stepSize of "+r+" "+a);let g=n.ticks.source==="data"&&this.getDataTimestamps();for(u=d,f=0;up-m).map(p=>+p)}getLabelForValue(t){let e=this._adapter,s=this.options.time;return s.tooltipFormat?e.format(t,s.tooltipFormat):e.format(t,s.displayFormats.datetime)}_tickFormatFunction(t,e,s,n){let o=this.options,a=o.time.displayFormats,r=this._unit,l=this._majorUnit,c=r&&a[r],h=l&&a[l],d=s[e],u=l&&h&&d&&d.major,f=this._adapter.format(t,n||(u?h:c)),g=o.ticks.callback;return g?z(g,[f,e,s],this):f}generateTickLabels(t){let e,s,n;for(e=0,s=t.length;e0?r:1}getDataTimestamps(){let t=this._cache.data||[],e,s;if(t.length)return t;let n=this.getMatchingVisibleMetas();if(this._normalized&&n.length)return this._cache.data=n[0].controller.getAllParsedValues(this);for(e=0,s=n.length;e=i[s].pos&&t<=i[n].pos&&({lo:s,hi:n}=at(i,"pos",t)),{pos:o,time:r}=i[s],{pos:a,time:l}=i[n]):(t>=i[s].time&&t<=i[n].time&&({lo:s,hi:n}=at(i,"time",t)),{time:o,pos:r}=i[s],{time:a,pos:l}=i[n]);let c=a-o;return c?r+(l-r)*(t-o)/c:r}var Fe=class extends Bt{constructor(t){super(t),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){let t=this._getTimestampsForTable(),e=this._table=this.buildLookupTable(t);this._minPos=li(e,this.min),this._tableRange=li(e,this.max)-this._minPos,super.initOffsets(t)}buildLookupTable(t){let{min:e,max:s}=this,n=[],o=[],a,r,l,c,h;for(a=0,r=t.length;a=e&&c<=s&&n.push(c);if(n.length<2)return[{time:e,pos:0},{time:s,pos:1}];for(a=0,r=n.length;a{Alpine.store("theme");let s=this.getChart();s&&s.destroy(),this.initChart()}),window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",()=>{Alpine.store("theme")==="system"&&this.$nextTick(()=>{let s=this.getChart();s&&s.destroy(),this.initChart()})})},initChart:function(){return new Cs(this.$refs.canvas,{type:"line",data:{labels:t,datasets:[{data:e,borderWidth:2,fill:"start",tension:.5,backgroundColor:getComputedStyle(this.$refs.backgroundColorElement).color,borderColor:getComputedStyle(this.$refs.borderColorElement).color}]},options:{animation:{duration:0},elements:{point:{radius:0}},maintainAspectRatio:!1,plugins:{legend:{display:!1}},scales:{x:{display:!1},y:{display:!1}},tooltips:{enabled:!1}}})},getChart:function(){return Cs.getChart(this.$refs.canvas)}}}export{Xc as default}; +/*! Bundled license information: + +chart.js/dist/chunks/helpers.segment.mjs: + (*! + * Chart.js v3.9.1 + * https://www.chartjs.org + * (c) 2022 Chart.js Contributors + * Released under the MIT License + *) + +chart.js/dist/chunks/helpers.segment.mjs: + (*! + * @kurkle/color v0.2.1 + * https://github.com/kurkle/color#readme + * (c) 2022 Jukka Kurkela + * Released under the MIT License + *) + +chart.js/dist/chart.mjs: + (*! + * Chart.js v3.9.1 + * https://www.chartjs.org + * (c) 2022 Chart.js Contributors + * Released under the MIT License + *) +*/ diff --git a/public/js/saade/filament-fullcalendar/components/filament-fullcalendar-alpine.js b/public/js/saade/filament-fullcalendar/components/filament-fullcalendar-alpine.js new file mode 100644 index 0000000..3921d0c --- /dev/null +++ b/public/js/saade/filament-fullcalendar/components/filament-fullcalendar-alpine.js @@ -0,0 +1,26 @@ +var Gd=Object.create;var Mc=Object.defineProperty;var Yd=Object.getOwnPropertyDescriptor;var Vd=Object.getOwnPropertyNames;var Kd=Object.getPrototypeOf,Qd=Object.prototype.hasOwnProperty;var bc=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,o)=>(typeof require<"u"?require:e)[o]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var $o=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Zd=(t,e,o,M)=>{if(e&&typeof e=="object"||typeof e=="function")for(let b of Vd(e))!Qd.call(t,b)&&b!==o&&Mc(t,b,{get:()=>e[b],enumerable:!(M=Yd(e,b))||M.enumerable});return t};var pc=(t,e,o)=>(o=t!=null?Gd(Kd(t)):{},Zd(e||!t||!t.__esModule?Mc(o,"default",{value:t,enumerable:!0}):o,t));var nr=$o((zr,pt)=>{(function(t,e){typeof zr=="object"&&typeof pt<"u"?pt.exports=e():typeof define=="function"&&define.amd?define(e):t.moment=e()})(zr,function(){"use strict";var t;function e(){return t.apply(null,arguments)}function o(z){t=z}function M(z){return z instanceof Array||Object.prototype.toString.call(z)==="[object Array]"}function b(z){return z!=null&&Object.prototype.toString.call(z)==="[object Object]"}function p(z,c){return Object.prototype.hasOwnProperty.call(z,c)}function n(z){if(Object.getOwnPropertyNames)return Object.getOwnPropertyNames(z).length===0;var c;for(c in z)if(p(z,c))return!1;return!0}function r(z){return z===void 0}function i(z){return typeof z=="number"||Object.prototype.toString.call(z)==="[object Number]"}function a(z){return z instanceof Date||Object.prototype.toString.call(z)==="[object Date]"}function s(z,c){var O=[],l,f=z.length;for(l=0;l>>0,l;for(l=0;l0)for(O=0;O=0;return(R?O?"+":"":"-")+Math.pow(10,Math.max(0,f)).toString().substr(1)+l}var rt=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,W2=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,ct={},E1={};function I(z,c,O,l){var f=l;typeof l=="string"&&(f=function(){return this[l]()}),z&&(E1[z]=f),c&&(E1[c[0]]=function(){return l1(f.apply(this,arguments),c[1],c[2])}),O&&(E1[O]=function(){return this.localeData().ordinal(f.apply(this,arguments),z)})}function G1(z){return z.match(/\[[\s\S]/)?z.replace(/^\[|\]$/g,""):z.replace(/\\/g,"")}function A0(z){var c=z.match(rt),O,l;for(O=0,l=c.length;O=0&&W2.test(z);)z=z.replace(W2,l),W2.lastIndex=0,O-=1;return z}var Eo={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};function Gb(z){var c=this._longDateFormat[z],O=this._longDateFormat[z.toUpperCase()];return c||!O?c:(this._longDateFormat[z]=O.match(rt).map(function(l){return l==="MMMM"||l==="MM"||l==="DD"||l==="dddd"?l.slice(1):l}).join(""),this._longDateFormat[z])}var Ue="Invalid date";function L(){return this._invalidDate}var S="%d",B=/\d{1,2}/;function C(z){return this._ordinal.replace("%d",z)}var G={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function i0(z,c,O,l){var f=this._relativeTime[O];return H0(f)?f(z,c,O,l):f.replace(/%d/i,z)}function E0(z,c){var O=this._relativeTime[z>0?"future":"past"];return H0(O)?O(c):O.replace(/%s/i,c)}var N0={};function M0(z,c){var O=z.toLowerCase();N0[O]=N0[O+"s"]=N0[c]=z}function n1(z){return typeof z=="string"?N0[z]||N0[z.toLowerCase()]:void 0}function Yb(z){var c={},O,l;for(l in z)p(z,l)&&(O=n1(l),O&&(c[O]=z[l]));return c}var lr={};function j0(z,c){lr[z]=c}function c3(z){var c=[],O;for(O in z)p(z,O)&&c.push({unit:O,priority:lr[O]});return c.sort(function(l,f){return l.priority-f.priority}),c}function wo(z){return z%4===0&&z%100!==0||z%400===0}function A1(z){return z<0?Math.ceil(z)||0:Math.floor(z)}function Z(z){var c=+z,O=0;return c!==0&&isFinite(c)&&(O=A1(c)),O}function h2(z,c){return function(O){return O!=null?(Ar(this,z,O),e.updateOffset(this,c),this):Do(this,z)}}function Do(z,c){return z.isValid()?z._d["get"+(z._isUTC?"UTC":"")+c]():NaN}function Ar(z,c,O){z.isValid()&&!isNaN(O)&&(c==="FullYear"&&wo(z.year())&&z.month()===1&&z.date()===29?(O=Z(O),z._d["set"+(z._isUTC?"UTC":"")+c](O,z.month(),Po(O,z.month()))):z._d["set"+(z._isUTC?"UTC":"")+c](O))}function i3(z){return z=n1(z),H0(this[z])?this[z]():this}function a3(z,c){if(typeof z=="object"){z=Yb(z);var O=c3(z),l,f=O.length;for(l=0;l68?1900:2e3)};var Lr=h2("FullYear",!0);function S3(){return wo(this.year())}function T3(z,c,O,l,f,R,v){var U;return z<100&&z>=0?(U=new Date(z+400,c,O,l,f,R,v),isFinite(U.getFullYear())&&U.setFullYear(z)):U=new Date(z,c,O,l,f,R,v),U}function lt(z){var c,O;return z<100&&z>=0?(O=Array.prototype.slice.call(arguments),O[0]=z+400,c=new Date(Date.UTC.apply(null,O)),isFinite(c.getUTCFullYear())&&c.setUTCFullYear(z)):c=new Date(Date.UTC.apply(null,arguments)),c}function Ho(z,c,O){var l=7+c-O,f=(7+lt(z,0,l).getUTCDay()-c)%7;return-f+l-1}function yr(z,c,O,l,f){var R=(7+O-l)%7,v=Ho(z,l,f),U=1+7*(c-1)+R+v,Q,l0;return U<=0?(Q=z-1,l0=Ot(Q)+U):U>Ot(z)?(Q=z+1,l0=U-Ot(z)):(Q=z,l0=U),{year:Q,dayOfYear:l0}}function At(z,c,O){var l=Ho(z.year(),c,O),f=Math.floor((z.dayOfYear()-l-1)/7)+1,R,v;return f<1?(v=z.year()-1,R=f+K1(v,c,O)):f>K1(z.year(),c,O)?(R=f-K1(z.year(),c,O),v=z.year()+1):(v=z.year(),R=f),{week:R,year:v}}function K1(z,c,O){var l=Ho(z,c,O),f=Ho(z+1,c,O);return(Ot(z)-l+f)/7}I("w",["ww",2],"wo","week"),I("W",["WW",2],"Wo","isoWeek"),M0("week","w"),M0("isoWeek","W"),j0("week",5),j0("isoWeek",5),_("w",q0),_("ww",q0,r1),_("W",q0),_("WW",q0,r1),st(["w","ww","W","WW"],function(z,c,O,l){c[l.substr(0,1)]=Z(z)});function E3(z){return At(z,this._week.dow,this._week.doy).week}var w3={dow:0,doy:6};function D3(){return this._week.dow}function C3(){return this._week.doy}function X3(z){var c=this.localeData().week(this);return z==null?c:this.add((z-c)*7,"d")}function x3(z){var c=At(this,1,4).week;return z==null?c:this.add((z-c)*7,"d")}I("d",0,"do","day"),I("dd",0,0,function(z){return this.localeData().weekdaysMin(this,z)}),I("ddd",0,0,function(z){return this.localeData().weekdaysShort(this,z)}),I("dddd",0,0,function(z){return this.localeData().weekdays(this,z)}),I("e",0,0,"weekday"),I("E",0,0,"isoWeekday"),M0("day","d"),M0("weekday","e"),M0("isoWeekday","E"),j0("day",11),j0("weekday",11),j0("isoWeekday",11),_("d",q0),_("e",q0),_("E",q0),_("dd",function(z,c){return c.weekdaysMinRegex(z)}),_("ddd",function(z,c){return c.weekdaysShortRegex(z)}),_("dddd",function(z,c){return c.weekdaysRegex(z)}),st(["dd","ddd","dddd"],function(z,c,O,l){var f=O._locale.weekdaysParse(z,l,O._strict);f!=null?c.d=f:W(O).invalidWeekday=z}),st(["d","e","E"],function(z,c,O,l){c[l]=Z(z)});function _3(z,c){return typeof z!="string"?z:isNaN(z)?(z=c.weekdaysParse(z),typeof z=="number"?z:null):parseInt(z,10)}function k3(z,c){return typeof z=="string"?c.weekdaysParse(z)%7||7:isNaN(z)?null:z}function Zb(z,c){return z.slice(c,7).concat(z.slice(0,c))}var I3="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),vr="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),P3="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),H3=at,U3=at,j3=at;function F3(z,c){var O=M(this._weekdays)?this._weekdays:this._weekdays[z&&z!==!0&&this._weekdays.isFormat.test(c)?"format":"standalone"];return z===!0?Zb(O,this._week.dow):z?O[z.day()]:O}function G3(z){return z===!0?Zb(this._weekdaysShort,this._week.dow):z?this._weekdaysShort[z.day()]:this._weekdaysShort}function Y3(z){return z===!0?Zb(this._weekdaysMin,this._week.dow):z?this._weekdaysMin[z.day()]:this._weekdaysMin}function V3(z,c,O){var l,f,R,v=z.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],l=0;l<7;++l)R=A([2e3,1]).day(l),this._minWeekdaysParse[l]=this.weekdaysMin(R,"").toLocaleLowerCase(),this._shortWeekdaysParse[l]=this.weekdaysShort(R,"").toLocaleLowerCase(),this._weekdaysParse[l]=this.weekdays(R,"").toLocaleLowerCase();return O?c==="dddd"?(f=g0.call(this._weekdaysParse,v),f!==-1?f:null):c==="ddd"?(f=g0.call(this._shortWeekdaysParse,v),f!==-1?f:null):(f=g0.call(this._minWeekdaysParse,v),f!==-1?f:null):c==="dddd"?(f=g0.call(this._weekdaysParse,v),f!==-1||(f=g0.call(this._shortWeekdaysParse,v),f!==-1)?f:(f=g0.call(this._minWeekdaysParse,v),f!==-1?f:null)):c==="ddd"?(f=g0.call(this._shortWeekdaysParse,v),f!==-1||(f=g0.call(this._weekdaysParse,v),f!==-1)?f:(f=g0.call(this._minWeekdaysParse,v),f!==-1?f:null)):(f=g0.call(this._minWeekdaysParse,v),f!==-1||(f=g0.call(this._weekdaysParse,v),f!==-1)?f:(f=g0.call(this._shortWeekdaysParse,v),f!==-1?f:null))}function K3(z,c,O){var l,f,R;if(this._weekdaysParseExact)return V3.call(this,z,c,O);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),l=0;l<7;l++){if(f=A([2e3,1]).day(l),O&&!this._fullWeekdaysParse[l]&&(this._fullWeekdaysParse[l]=new RegExp("^"+this.weekdays(f,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[l]=new RegExp("^"+this.weekdaysShort(f,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[l]=new RegExp("^"+this.weekdaysMin(f,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[l]||(R="^"+this.weekdays(f,"")+"|^"+this.weekdaysShort(f,"")+"|^"+this.weekdaysMin(f,""),this._weekdaysParse[l]=new RegExp(R.replace(".",""),"i")),O&&c==="dddd"&&this._fullWeekdaysParse[l].test(z))return l;if(O&&c==="ddd"&&this._shortWeekdaysParse[l].test(z))return l;if(O&&c==="dd"&&this._minWeekdaysParse[l].test(z))return l;if(!O&&this._weekdaysParse[l].test(z))return l}}function Q3(z){if(!this.isValid())return z!=null?this:NaN;var c=this._isUTC?this._d.getUTCDay():this._d.getDay();return z!=null?(z=_3(z,this.localeData()),this.add(z-c,"d")):c}function Z3(z){if(!this.isValid())return z!=null?this:NaN;var c=(this.day()+7-this.localeData()._week.dow)%7;return z==null?c:this.add(z-c,"d")}function J3(z){if(!this.isValid())return z!=null?this:NaN;if(z!=null){var c=k3(z,this.localeData());return this.day(this.day()%7?c:c-7)}else return this.day()||7}function $3(z){return this._weekdaysParseExact?(p(this,"_weekdaysRegex")||Jb.call(this),z?this._weekdaysStrictRegex:this._weekdaysRegex):(p(this,"_weekdaysRegex")||(this._weekdaysRegex=H3),this._weekdaysStrictRegex&&z?this._weekdaysStrictRegex:this._weekdaysRegex)}function el(z){return this._weekdaysParseExact?(p(this,"_weekdaysRegex")||Jb.call(this),z?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(p(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=U3),this._weekdaysShortStrictRegex&&z?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function tl(z){return this._weekdaysParseExact?(p(this,"_weekdaysRegex")||Jb.call(this),z?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(p(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=j3),this._weekdaysMinStrictRegex&&z?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Jb(){function z($0,ee){return ee.length-$0.length}var c=[],O=[],l=[],f=[],R,v,U,Q,l0;for(R=0;R<7;R++)v=A([2e3,1]).day(R),U=c1(this.weekdaysMin(v,"")),Q=c1(this.weekdaysShort(v,"")),l0=c1(this.weekdays(v,"")),c.push(U),O.push(Q),l.push(l0),f.push(U),f.push(Q),f.push(l0);c.sort(z),O.sort(z),l.sort(z),f.sort(z),this._weekdaysRegex=new RegExp("^("+f.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+l.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+O.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+c.join("|")+")","i")}function $b(){return this.hours()%12||12}function ol(){return this.hours()||24}I("H",["HH",2],0,"hour"),I("h",["hh",2],0,$b),I("k",["kk",2],0,ol),I("hmm",0,0,function(){return""+$b.apply(this)+l1(this.minutes(),2)}),I("hmmss",0,0,function(){return""+$b.apply(this)+l1(this.minutes(),2)+l1(this.seconds(),2)}),I("Hmm",0,0,function(){return""+this.hours()+l1(this.minutes(),2)}),I("Hmmss",0,0,function(){return""+this.hours()+l1(this.minutes(),2)+l1(this.seconds(),2)});function Nr(z,c){I(z,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),c)})}Nr("a",!0),Nr("A",!1),M0("hour","h"),j0("hour",13);function Br(z,c){return c._meridiemParse}_("a",Br),_("A",Br),_("H",q0),_("h",q0),_("k",q0),_("HH",q0,r1),_("hh",q0,r1),_("kk",q0,r1),_("hmm",qr),_("hmmss",fr),_("Hmm",qr),_("Hmmss",fr),O0(["H","HH"],B0),O0(["k","kk"],function(z,c,O){var l=Z(z);c[B0]=l===24?0:l}),O0(["a","A"],function(z,c,O){O._isPm=O._locale.isPM(z),O._meridiem=z}),O0(["h","hh"],function(z,c,O){c[B0]=Z(z),W(O).bigHour=!0}),O0("hmm",function(z,c,O){var l=z.length-2;c[B0]=Z(z.substr(0,l)),c[m1]=Z(z.substr(l)),W(O).bigHour=!0}),O0("hmmss",function(z,c,O){var l=z.length-4,f=z.length-2;c[B0]=Z(z.substr(0,l)),c[m1]=Z(z.substr(l,2)),c[V1]=Z(z.substr(f)),W(O).bigHour=!0}),O0("Hmm",function(z,c,O){var l=z.length-2;c[B0]=Z(z.substr(0,l)),c[m1]=Z(z.substr(l))}),O0("Hmmss",function(z,c,O){var l=z.length-4,f=z.length-2;c[B0]=Z(z.substr(0,l)),c[m1]=Z(z.substr(l,2)),c[V1]=Z(z.substr(f))});function Ml(z){return(z+"").toLowerCase().charAt(0)==="p"}var bl=/[ap]\.?m?\.?/i,pl=h2("Hours",!0);function zl(z,c,O){return z>11?O?"pm":"PM":O?"am":"AM"}var Sr={calendar:Fb,longDateFormat:Eo,invalidDate:Ue,ordinal:S,dayOfMonthOrdinalParse:B,relativeTime:G,months:W3,monthsShort:Wr,week:w3,weekdays:I3,weekdaysMin:P3,weekdaysShort:vr,meridiemParse:bl},h0={},dt={},ut;function nl(z,c){var O,l=Math.min(z.length,c.length);for(O=0;O0;){if(f=Uo(R.slice(0,O).join("-")),f)return f;if(l&&l.length>=O&&nl(R,l)>=O-1)break;O--}c++}return ut}function cl(z){return z.match("^[^/\\\\]*$")!=null}function Uo(z){var c=null,O;if(h0[z]===void 0&&typeof pt<"u"&&pt&&pt.exports&&cl(z))try{c=ut._abbr,O=bc,O("./locale/"+z),We(c)}catch{h0[z]=null}return h0[z]}function We(z,c){var O;return z&&(r(c)?O=Q1(z):O=ep(z,c),O?ut=O:typeof console<"u"&&console.warn&&console.warn("Locale "+z+" not found. Did you forget to load it?")),ut._abbr}function ep(z,c){if(c!==null){var O,l=Sr;if(c.abbr=z,h0[z]!=null)O1("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),l=h0[z]._config;else if(c.parentLocale!=null)if(h0[c.parentLocale]!=null)l=h0[c.parentLocale]._config;else if(O=Uo(c.parentLocale),O!=null)l=O._config;else return dt[c.parentLocale]||(dt[c.parentLocale]=[]),dt[c.parentLocale].push({name:z,config:c}),null;return h0[z]=new e1(f2(l,c)),dt[z]&&dt[z].forEach(function(f){ep(f.name,f.config)}),We(z),h0[z]}else return delete h0[z],null}function il(z,c){if(c!=null){var O,l,f=Sr;h0[z]!=null&&h0[z].parentLocale!=null?h0[z].set(f2(h0[z]._config,c)):(l=Uo(z),l!=null&&(f=l._config),c=f2(f,c),l==null&&(c.abbr=z),O=new e1(c),O.parentLocale=h0[z],h0[z]=O),We(z)}else h0[z]!=null&&(h0[z].parentLocale!=null?(h0[z]=h0[z].parentLocale,z===We()&&We(z)):h0[z]!=null&&delete h0[z]);return h0[z]}function Q1(z){var c;if(z&&z._locale&&z._locale._abbr&&(z=z._locale._abbr),!z)return ut;if(!M(z)){if(c=Uo(z),c)return c;z=[z]}return rl(z)}function al(){return nt(h0)}function tp(z){var c,O=z._a;return O&&W(z).overflow===-2&&(c=O[Y1]<0||O[Y1]>11?Y1:O[w1]<1||O[w1]>Po(O[F0],O[Y1])?w1:O[B0]<0||O[B0]>24||O[B0]===24&&(O[m1]!==0||O[V1]!==0||O[je]!==0)?B0:O[m1]<0||O[m1]>59?m1:O[V1]<0||O[V1]>59?V1:O[je]<0||O[je]>999?je:-1,W(z)._overflowDayOfYear&&(cw1)&&(c=w1),W(z)._overflowWeeks&&c===-1&&(c=u3),W(z)._overflowWeekday&&c===-1&&(c=q3),W(z).overflow=c),z}var sl=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Ol=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,ll=/Z|[+-]\d\d(?::?\d\d)?/,jo=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],op=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Al=/^\/?Date\((-?\d+)/i,dl=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,ul={UT:0,GMT:0,EDT:-4*60,EST:-5*60,CDT:-5*60,CST:-6*60,MDT:-6*60,MST:-7*60,PDT:-7*60,PST:-8*60};function Er(z){var c,O,l=z._i,f=sl.exec(l)||Ol.exec(l),R,v,U,Q,l0=jo.length,$0=op.length;if(f){for(W(z).iso=!0,c=0,O=l0;cOt(v)||z._dayOfYear===0)&&(W(z)._overflowDayOfYear=!0),O=lt(v,0,z._dayOfYear),z._a[Y1]=O.getUTCMonth(),z._a[w1]=O.getUTCDate()),c=0;c<3&&z._a[c]==null;++c)z._a[c]=l[c]=f[c];for(;c<7;c++)z._a[c]=l[c]=z._a[c]==null?c===2?1:0:z._a[c];z._a[B0]===24&&z._a[m1]===0&&z._a[V1]===0&&z._a[je]===0&&(z._nextDay=!0,z._a[B0]=0),z._d=(z._useUTC?lt:T3).apply(null,l),R=z._useUTC?z._d.getUTCDay():z._d.getDay(),z._tzm!=null&&z._d.setUTCMinutes(z._d.getUTCMinutes()-z._tzm),z._nextDay&&(z._a[B0]=24),z._w&&typeof z._w.d<"u"&&z._w.d!==R&&(W(z).weekdayMismatch=!0)}}function Ll(z){var c,O,l,f,R,v,U,Q,l0;c=z._w,c.GG!=null||c.W!=null||c.E!=null?(R=1,v=4,O=m2(c.GG,z._a[F0],At(f0(),1,4).year),l=m2(c.W,1),f=m2(c.E,1),(f<1||f>7)&&(Q=!0)):(R=z._locale._week.dow,v=z._locale._week.doy,l0=At(f0(),R,v),O=m2(c.gg,z._a[F0],l0.year),l=m2(c.w,l0.week),c.d!=null?(f=c.d,(f<0||f>6)&&(Q=!0)):c.e!=null?(f=c.e+R,(c.e<0||c.e>6)&&(Q=!0)):f=R),l<1||l>K1(O,R,v)?W(z)._overflowWeeks=!0:Q!=null?W(z)._overflowWeekday=!0:(U=yr(O,l,f,R,v),z._a[F0]=U.year,z._dayOfYear=U.dayOfYear)}e.ISO_8601=function(){},e.RFC_2822=function(){};function bp(z){if(z._f===e.ISO_8601){Er(z);return}if(z._f===e.RFC_2822){wr(z);return}z._a=[],W(z).empty=!0;var c=""+z._i,O,l,f,R,v,U=c.length,Q=0,l0,$0;for(f=it(z._f,z._locale).match(rt)||[],$0=f.length,O=0;O<$0;O++)R=f[O],l=(c.match(l3(R,z))||[])[0],l&&(v=c.substr(0,c.indexOf(l)),v.length>0&&W(z).unusedInput.push(v),c=c.slice(c.indexOf(l)+l.length),Q+=l.length),E1[R]?(l?W(z).empty=!1:W(z).unusedTokens.push(R),d3(R,l,z)):z._strict&&!l&&W(z).unusedTokens.push(R);W(z).charsLeftOver=U-Q,c.length>0&&W(z).unusedInput.push(c),z._a[B0]<=12&&W(z).bigHour===!0&&z._a[B0]>0&&(W(z).bigHour=void 0),W(z).parsedDateParts=z._a.slice(0),W(z).meridiem=z._meridiem,z._a[B0]=yl(z._locale,z._a[B0],z._meridiem),l0=W(z).era,l0!==null&&(z._a[F0]=z._locale.erasConvertYear(l0,z._a[F0])),Mp(z),tp(z)}function yl(z,c,O){var l;return O==null?c:z.meridiemHour!=null?z.meridiemHour(c,O):(z.isPM!=null&&(l=z.isPM(O),l&&c<12&&(c+=12),!l&&c===12&&(c=0)),c)}function vl(z){var c,O,l,f,R,v,U=!1,Q=z._f.length;if(Q===0){W(z).invalidFormat=!0,z._d=new Date(NaN);return}for(f=0;fthis?this:z:y()});function Xr(z,c){var O,l;if(c.length===1&&M(c[0])&&(c=c[0]),!c.length)return f0();for(O=c[0],l=1;lthis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Vl(){if(!r(this._isDSTShifted))return this._isDSTShifted;var z={},c;return x(z,this),z=Dr(z),z._a?(c=z._isUTC?A(z._a):f0(z._a),this._isDSTShifted=this.isValid()&&kl(z._a,c.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function Kl(){return this.isValid()?!this._isUTC:!1}function Ql(){return this.isValid()?this._isUTC:!1}function _r(){return this.isValid()?this._isUTC&&this._offset===0:!1}var Zl=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,Jl=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function g1(z,c){var O=z,l=null,f,R,v;return Go(z)?O={ms:z._milliseconds,d:z._days,M:z._months}:i(z)||!isNaN(+z)?(O={},c?O[c]=+z:O.milliseconds=+z):(l=Zl.exec(z))?(f=l[1]==="-"?-1:1,O={y:0,d:Z(l[w1])*f,h:Z(l[B0])*f,m:Z(l[m1])*f,s:Z(l[V1])*f,ms:Z(pp(l[je]*1e3))*f}):(l=Jl.exec(z))?(f=l[1]==="-"?-1:1,O={y:Fe(l[2],f),M:Fe(l[3],f),w:Fe(l[4],f),d:Fe(l[5],f),h:Fe(l[6],f),m:Fe(l[7],f),s:Fe(l[8],f)}):O==null?O={}:typeof O=="object"&&("from"in O||"to"in O)&&(v=$l(f0(O.from),f0(O.to)),O={},O.ms=v.milliseconds,O.M=v.months),R=new Fo(O),Go(z)&&p(z,"_locale")&&(R._locale=z._locale),Go(z)&&p(z,"_isValid")&&(R._isValid=z._isValid),R}g1.fn=Fo.prototype,g1.invalid=_l;function Fe(z,c){var O=z&&parseFloat(z.replace(",","."));return(isNaN(O)?0:O)*c}function kr(z,c){var O={};return O.months=c.month()-z.month()+(c.year()-z.year())*12,z.clone().add(O.months,"M").isAfter(c)&&--O.months,O.milliseconds=+c-+z.clone().add(O.months,"M"),O}function $l(z,c){var O;return z.isValid()&&c.isValid()?(c=np(c,z),z.isBefore(c)?O=kr(z,c):(O=kr(c,z),O.milliseconds=-O.milliseconds,O.months=-O.months),O):{milliseconds:0,months:0}}function Ir(z,c){return function(O,l){var f,R;return l!==null&&!isNaN(+l)&&(O1(c,"moment()."+c+"(period, number) is deprecated. Please use moment()."+c+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),R=O,O=l,l=R),f=g1(O,l),Pr(this,f,z),this}}function Pr(z,c,O,l){var f=c._milliseconds,R=pp(c._days),v=pp(c._months);z.isValid()&&(l=l??!0,v&&Rr(z,Do(z,"Month")+v*O),R&&Ar(z,"Date",Do(z,"Date")+R*O),f&&z._d.setTime(z._d.valueOf()+f*O),l&&e.updateOffset(z,R||v))}var eA=Ir(1,"add"),tA=Ir(-1,"subtract");function Hr(z){return typeof z=="string"||z instanceof String}function oA(z){return P(z)||a(z)||Hr(z)||i(z)||bA(z)||MA(z)||z===null||z===void 0}function MA(z){var c=b(z)&&!n(z),O=!1,l=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],f,R,v=l.length;for(f=0;fO.valueOf():O.valueOf()9999?U0(O,c?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):H0(Date.prototype.toISOString)?c?this.toDate().toISOString():new Date(this.valueOf()+this.utcOffset()*60*1e3).toISOString().replace("Z",U0(O,"Z")):U0(O,c?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")}function qA(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var z="moment",c="",O,l,f,R;return this.isLocal()||(z=this.utcOffset()===0?"moment.utc":"moment.parseZone",c="Z"),O="["+z+'("]',l=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",f="-MM-DD[T]HH:mm:ss.SSS",R=c+'[")]',this.format(O+l+f+R)}function fA(z){z||(z=this.isUtc()?e.defaultFormatUtc:e.defaultFormat);var c=U0(this,z);return this.localeData().postformat(c)}function WA(z,c){return this.isValid()&&(P(z)&&z.isValid()||f0(z).isValid())?g1({to:this,from:z}).locale(this.locale()).humanize(!c):this.localeData().invalidDate()}function hA(z){return this.from(f0(),z)}function RA(z,c){return this.isValid()&&(P(z)&&z.isValid()||f0(z).isValid())?g1({from:this,to:z}).locale(this.locale()).humanize(!c):this.localeData().invalidDate()}function mA(z){return this.to(f0(),z)}function Ur(z){var c;return z===void 0?this._locale._abbr:(c=Q1(z),c!=null&&(this._locale=c),this)}var jr=F("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(z){return z===void 0?this.localeData():this.locale(z)});function Fr(){return this._locale}var Vo=1e3,g2=60*Vo,Ko=60*g2,Gr=(365*400+97)*24*Ko;function L2(z,c){return(z%c+c)%c}function Yr(z,c,O){return z<100&&z>=0?new Date(z+400,c,O)-Gr:new Date(z,c,O).valueOf()}function Vr(z,c,O){return z<100&&z>=0?Date.UTC(z+400,c,O)-Gr:Date.UTC(z,c,O)}function gA(z){var c,O;if(z=n1(z),z===void 0||z==="millisecond"||!this.isValid())return this;switch(O=this._isUTC?Vr:Yr,z){case"year":c=O(this.year(),0,1);break;case"quarter":c=O(this.year(),this.month()-this.month()%3,1);break;case"month":c=O(this.year(),this.month(),1);break;case"week":c=O(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":c=O(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":c=O(this.year(),this.month(),this.date());break;case"hour":c=this._d.valueOf(),c-=L2(c+(this._isUTC?0:this.utcOffset()*g2),Ko);break;case"minute":c=this._d.valueOf(),c-=L2(c,g2);break;case"second":c=this._d.valueOf(),c-=L2(c,Vo);break}return this._d.setTime(c),e.updateOffset(this,!0),this}function LA(z){var c,O;if(z=n1(z),z===void 0||z==="millisecond"||!this.isValid())return this;switch(O=this._isUTC?Vr:Yr,z){case"year":c=O(this.year()+1,0,1)-1;break;case"quarter":c=O(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":c=O(this.year(),this.month()+1,1)-1;break;case"week":c=O(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":c=O(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":c=O(this.year(),this.month(),this.date()+1)-1;break;case"hour":c=this._d.valueOf(),c+=Ko-L2(c+(this._isUTC?0:this.utcOffset()*g2),Ko)-1;break;case"minute":c=this._d.valueOf(),c+=g2-L2(c,g2)-1;break;case"second":c=this._d.valueOf(),c+=Vo-L2(c,Vo)-1;break}return this._d.setTime(c),e.updateOffset(this,!0),this}function yA(){return this._d.valueOf()-(this._offset||0)*6e4}function vA(){return Math.floor(this.valueOf()/1e3)}function NA(){return new Date(this.valueOf())}function BA(){var z=this;return[z.year(),z.month(),z.date(),z.hour(),z.minute(),z.second(),z.millisecond()]}function SA(){var z=this;return{years:z.year(),months:z.month(),date:z.date(),hours:z.hours(),minutes:z.minutes(),seconds:z.seconds(),milliseconds:z.milliseconds()}}function TA(){return this.isValid()?this.toISOString():null}function EA(){return m(this)}function wA(){return u({},W(this))}function DA(){return W(this).overflow}function CA(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}I("N",0,0,"eraAbbr"),I("NN",0,0,"eraAbbr"),I("NNN",0,0,"eraAbbr"),I("NNNN",0,0,"eraName"),I("NNNNN",0,0,"eraNarrow"),I("y",["y",1],"yo","eraYear"),I("y",["yy",2],0,"eraYear"),I("y",["yyy",3],0,"eraYear"),I("y",["yyyy",4],0,"eraYear"),_("N",cp),_("NN",cp),_("NNN",cp),_("NNNN",GA),_("NNNNN",YA),O0(["N","NN","NNN","NNNN","NNNNN"],function(z,c,O,l){var f=O._locale.erasParse(z,l,O._strict);f?W(O).era=f:W(O).invalidEra=z}),_("y",R2),_("yy",R2),_("yyy",R2),_("yyyy",R2),_("yo",VA),O0(["y","yy","yyy","yyyy"],F0),O0(["yo"],function(z,c,O,l){var f;O._locale._eraYearOrdinalRegex&&(f=z.match(O._locale._eraYearOrdinalRegex)),O._locale.eraYearOrdinalParse?c[F0]=O._locale.eraYearOrdinalParse(z,f):c[F0]=parseInt(z,10)});function XA(z,c){var O,l,f,R=this._eras||Q1("en")._eras;for(O=0,l=R.length;O=0)return R[l]}function _A(z,c){var O=z.since<=z.until?1:-1;return c===void 0?e(z.since).year():e(z.since).year()+(c-z.offset)*O}function kA(){var z,c,O,l=this.localeData().eras();for(z=0,c=l.length;zR&&(c=R),td.call(this,z,c,O,l,f))}function td(z,c,O,l,f){var R=yr(z,c,O,l,f),v=lt(R.year,0,R.dayOfYear);return this.year(v.getUTCFullYear()),this.month(v.getUTCMonth()),this.date(v.getUTCDate()),this}I("Q",0,"Qo","quarter"),M0("quarter","Q"),j0("quarter",7),_("Q",dr),O0("Q",function(z,c){c[Y1]=(Z(z)-1)*3});function od(z){return z==null?Math.ceil((this.month()+1)/3):this.month((z-1)*3+this.month()%3)}I("D",["DD",2],"Do","date"),M0("date","D"),j0("date",9),_("D",q0),_("DD",q0,r1),_("Do",function(z,c){return z?c._dayOfMonthOrdinalParse||c._ordinalParse:c._dayOfMonthOrdinalParseLenient}),O0(["D","DD"],w1),O0("Do",function(z,c){c[w1]=Z(z.match(q0)[0])});var Qr=h2("Date",!0);I("DDD",["DDDD",3],"DDDo","dayOfYear"),M0("dayOfYear","DDD"),j0("dayOfYear",4),_("DDD",Xo),_("DDDD",ur),O0(["DDD","DDDD"],function(z,c,O){O._dayOfYear=Z(z)});function Md(z){var c=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return z==null?c:this.add(z-c,"d")}I("m",["mm",2],0,"minute"),M0("minute","m"),j0("minute",14),_("m",q0),_("mm",q0,r1),O0(["m","mm"],m1);var bd=h2("Minutes",!1);I("s",["ss",2],0,"second"),M0("second","s"),j0("second",15),_("s",q0),_("ss",q0,r1),O0(["s","ss"],V1);var pd=h2("Seconds",!1);I("S",0,0,function(){return~~(this.millisecond()/100)}),I(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),I(0,["SSS",3],0,"millisecond"),I(0,["SSSS",4],0,function(){return this.millisecond()*10}),I(0,["SSSSS",5],0,function(){return this.millisecond()*100}),I(0,["SSSSSS",6],0,function(){return this.millisecond()*1e3}),I(0,["SSSSSSS",7],0,function(){return this.millisecond()*1e4}),I(0,["SSSSSSSS",8],0,function(){return this.millisecond()*1e5}),I(0,["SSSSSSSSS",9],0,function(){return this.millisecond()*1e6}),M0("millisecond","ms"),j0("millisecond",16),_("S",Xo,dr),_("SS",Xo,r1),_("SSS",Xo,ur);var he,Zr;for(he="SSSS";he.length<=9;he+="S")_(he,R2);function zd(z,c){c[je]=Z(("0."+z)*1e3)}for(he="S";he.length<=9;he+="S")O0(he,zd);Zr=h2("Milliseconds",!1),I("z",0,0,"zoneAbbr"),I("zz",0,0,"zoneName");function nd(){return this._isUTC?"UTC":""}function rd(){return this._isUTC?"Coordinated Universal Time":""}var T=K.prototype;T.add=eA,T.calendar=nA,T.clone=rA,T.diff=AA,T.endOf=LA,T.format=fA,T.from=WA,T.fromNow=hA,T.to=RA,T.toNow=mA,T.get=i3,T.invalidAt=DA,T.isAfter=cA,T.isBefore=iA,T.isBetween=aA,T.isSame=sA,T.isSameOrAfter=OA,T.isSameOrBefore=lA,T.isValid=EA,T.lang=jr,T.locale=Ur,T.localeData=Fr,T.max=El,T.min=Tl,T.parsingFlags=wA,T.set=a3,T.startOf=gA,T.subtract=tA,T.toArray=BA,T.toObject=SA,T.toDate=NA,T.toISOString=uA,T.inspect=qA,typeof Symbol<"u"&&Symbol.for!=null&&(T[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),T.toJSON=TA,T.toString=dA,T.unix=vA,T.valueOf=yA,T.creationData=CA,T.eraName=kA,T.eraNarrow=IA,T.eraAbbr=PA,T.eraYear=HA,T.year=Lr,T.isLeapYear=S3,T.weekYear=KA,T.isoWeekYear=QA,T.quarter=T.quarters=od,T.month=mr,T.daysInMonth=v3,T.week=T.weeks=X3,T.isoWeek=T.isoWeeks=x3,T.weeksInYear=$A,T.weeksInWeekYear=ed,T.isoWeeksInYear=ZA,T.isoWeeksInISOWeekYear=JA,T.date=Qr,T.day=T.days=Q3,T.weekday=Z3,T.isoWeekday=J3,T.dayOfYear=Md,T.hour=T.hours=pl,T.minute=T.minutes=bd,T.second=T.seconds=pd,T.millisecond=T.milliseconds=Zr,T.utcOffset=Pl,T.utc=Ul,T.local=jl,T.parseZone=Fl,T.hasAlignedHourOffset=Gl,T.isDST=Yl,T.isLocal=Kl,T.isUtcOffset=Ql,T.isUtc=_r,T.isUTC=_r,T.zoneAbbr=nd,T.zoneName=rd,T.dates=F("dates accessor is deprecated. Use date instead.",Qr),T.months=F("months accessor is deprecated. Use month instead",mr),T.years=F("years accessor is deprecated. Use year instead",Lr),T.zone=F("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",Hl),T.isDSTShifted=F("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",Vl);function cd(z){return f0(z*1e3)}function id(){return f0.apply(null,arguments).parseZone()}function Jr(z){return z}var r0=e1.prototype;r0.calendar=To,r0.longDateFormat=Gb,r0.invalidDate=L,r0.ordinal=C,r0.preparse=Jr,r0.postformat=Jr,r0.relativeTime=i0,r0.pastFuture=E0,r0.set=F1,r0.eras=XA,r0.erasParse=xA,r0.erasConvertYear=_A,r0.erasAbbrRegex=jA,r0.erasNameRegex=UA,r0.erasNarrowRegex=FA,r0.months=m3,r0.monthsShort=g3,r0.monthsParse=y3,r0.monthsRegex=B3,r0.monthsShortRegex=N3,r0.week=E3,r0.firstDayOfYear=C3,r0.firstDayOfWeek=D3,r0.weekdays=F3,r0.weekdaysMin=Y3,r0.weekdaysShort=G3,r0.weekdaysParse=K3,r0.weekdaysRegex=$3,r0.weekdaysShortRegex=el,r0.weekdaysMinRegex=tl,r0.isPM=Ml,r0.meridiem=zl;function Zo(z,c,O,l){var f=Q1(),R=A().set(l,c);return f[O](R,z)}function $r(z,c,O){if(i(z)&&(c=z,z=void 0),z=z||"",c!=null)return Zo(z,c,O,"month");var l,f=[];for(l=0;l<12;l++)f[l]=Zo(z,l,O,"month");return f}function ap(z,c,O,l){typeof z=="boolean"?(i(c)&&(O=c,c=void 0),c=c||""):(c=z,O=c,z=!1,i(c)&&(O=c,c=void 0),c=c||"");var f=Q1(),R=z?f._week.dow:0,v,U=[];if(O!=null)return Zo(c,(O+R)%7,l,"day");for(v=0;v<7;v++)U[v]=Zo(c,(v+R)%7,l,"day");return U}function ad(z,c){return $r(z,c,"months")}function sd(z,c){return $r(z,c,"monthsShort")}function Od(z,c,O){return ap(z,c,O,"weekdays")}function ld(z,c,O){return ap(z,c,O,"weekdaysShort")}function Ad(z,c,O){return ap(z,c,O,"weekdaysMin")}We("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(z){var c=z%10,O=Z(z%100/10)===1?"th":c===1?"st":c===2?"nd":c===3?"rd":"th";return z+O}}),e.lang=F("moment.lang is deprecated. Use moment.locale instead.",We),e.langData=F("moment.langData is deprecated. Use moment.localeData instead.",Q1);var Z1=Math.abs;function dd(){var z=this._data;return this._milliseconds=Z1(this._milliseconds),this._days=Z1(this._days),this._months=Z1(this._months),z.milliseconds=Z1(z.milliseconds),z.seconds=Z1(z.seconds),z.minutes=Z1(z.minutes),z.hours=Z1(z.hours),z.months=Z1(z.months),z.years=Z1(z.years),this}function ec(z,c,O,l){var f=g1(c,O);return z._milliseconds+=l*f._milliseconds,z._days+=l*f._days,z._months+=l*f._months,z._bubble()}function ud(z,c){return ec(this,z,c,1)}function qd(z,c){return ec(this,z,c,-1)}function tc(z){return z<0?Math.floor(z):Math.ceil(z)}function fd(){var z=this._milliseconds,c=this._days,O=this._months,l=this._data,f,R,v,U,Q;return z>=0&&c>=0&&O>=0||z<=0&&c<=0&&O<=0||(z+=tc(sp(O)+c)*864e5,c=0,O=0),l.milliseconds=z%1e3,f=A1(z/1e3),l.seconds=f%60,R=A1(f/60),l.minutes=R%60,v=A1(R/60),l.hours=v%24,c+=A1(v/24),Q=A1(oc(c)),O+=Q,c-=tc(sp(Q)),U=A1(O/12),O%=12,l.days=c,l.months=O,l.years=U,this}function oc(z){return z*4800/146097}function sp(z){return z*146097/4800}function Wd(z){if(!this.isValid())return NaN;var c,O,l=this._milliseconds;if(z=n1(z),z==="month"||z==="quarter"||z==="year")switch(c=this._days+l/864e5,O=this._months+oc(c),z){case"month":return O;case"quarter":return O/3;case"year":return O/12}else switch(c=this._days+Math.round(sp(this._months)),z){case"week":return c/7+l/6048e5;case"day":return c+l/864e5;case"hour":return c*24+l/36e5;case"minute":return c*1440+l/6e4;case"second":return c*86400+l/1e3;case"millisecond":return Math.floor(c*864e5)+l;default:throw new Error("Unknown unit "+z)}}function hd(){return this.isValid()?this._milliseconds+this._days*864e5+this._months%12*2592e6+Z(this._months/12)*31536e6:NaN}function J1(z){return function(){return this.as(z)}}var Rd=J1("ms"),md=J1("s"),gd=J1("m"),Ld=J1("h"),yd=J1("d"),vd=J1("w"),Nd=J1("M"),Bd=J1("Q"),Sd=J1("y");function Td(){return g1(this)}function Ed(z){return z=n1(z),this.isValid()?this[z+"s"]():NaN}function Ge(z){return function(){return this.isValid()?this._data[z]:NaN}}var wd=Ge("milliseconds"),Dd=Ge("seconds"),Cd=Ge("minutes"),Xd=Ge("hours"),xd=Ge("days"),_d=Ge("months"),kd=Ge("years");function Id(){return A1(this.days()/7)}var $1=Math.round,y2={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function Pd(z,c,O,l,f){return f.relativeTime(c||1,!!O,z,l)}function Hd(z,c,O,l){var f=g1(z).abs(),R=$1(f.as("s")),v=$1(f.as("m")),U=$1(f.as("h")),Q=$1(f.as("d")),l0=$1(f.as("M")),$0=$1(f.as("w")),ee=$1(f.as("y")),Re=R<=O.ss&&["s",R]||R0,Re[4]=l,Pd.apply(null,Re)}function Ud(z){return z===void 0?$1:typeof z=="function"?($1=z,!0):!1}function jd(z,c){return y2[z]===void 0?!1:c===void 0?y2[z]:(y2[z]=c,z==="s"&&(y2.ss=c-1),!0)}function Fd(z,c){if(!this.isValid())return this.localeData().invalidDate();var O=!1,l=y2,f,R;return typeof z=="object"&&(c=z,z=!1),typeof z=="boolean"&&(O=z),typeof c=="object"&&(l=Object.assign({},y2,c),c.s!=null&&c.ss==null&&(l.ss=c.s-1)),f=this.localeData(),R=Hd(this,!O,l,f),O&&(R=f.pastFuture(+this,R)),f.postformat(R)}var Op=Math.abs;function v2(z){return(z>0)-(z<0)||+z}function Jo(){if(!this.isValid())return this.localeData().invalidDate();var z=Op(this._milliseconds)/1e3,c=Op(this._days),O=Op(this._months),l,f,R,v,U=this.asSeconds(),Q,l0,$0,ee;return U?(l=A1(z/60),f=A1(l/60),z%=60,l%=60,R=A1(O/12),O%=12,v=z?z.toFixed(3).replace(/\.?0+$/,""):"",Q=U<0?"-":"",l0=v2(this._months)!==v2(U)?"-":"",$0=v2(this._days)!==v2(U)?"-":"",ee=v2(this._milliseconds)!==v2(U)?"-":"",Q+"P"+(R?l0+R+"Y":"")+(O?l0+O+"M":"")+(c?$0+c+"D":"")+(f||l||z?"T":"")+(f?ee+f+"H":"")+(l?ee+l+"M":"")+(z?ee+v+"S":"")):"P0D"}var z0=Fo.prototype;z0.isValid=xl,z0.abs=dd,z0.add=ud,z0.subtract=qd,z0.as=Wd,z0.asMilliseconds=Rd,z0.asSeconds=md,z0.asMinutes=gd,z0.asHours=Ld,z0.asDays=yd,z0.asWeeks=vd,z0.asMonths=Nd,z0.asQuarters=Bd,z0.asYears=Sd,z0.valueOf=hd,z0._bubble=fd,z0.clone=Td,z0.get=Ed,z0.milliseconds=wd,z0.seconds=Dd,z0.minutes=Cd,z0.hours=Xd,z0.days=xd,z0.weeks=Id,z0.months=_d,z0.years=kd,z0.humanize=Fd,z0.toISOString=Jo,z0.toString=Jo,z0.toJSON=Jo,z0.locale=Ur,z0.localeData=Fr,z0.toIsoString=F("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Jo),z0.lang=jr,I("X",0,0,"unix"),I("x",0,0,"valueOf"),_("x",_o),_("X",O3),O0("X",function(z,c,O){O._d=new Date(parseFloat(z)*1e3)}),O0("x",function(z,c,O){O._d=new Date(Z(z))});return e.version="2.29.4",o(f0),e.fn=T,e.min=wl,e.max=Dl,e.now=Cl,e.utc=A,e.unix=cd,e.months=ad,e.isDate=a,e.locale=We,e.invalid=y,e.duration=g1,e.isMoment=P,e.weekdays=Od,e.parseZone=id,e.localeData=Q1,e.isDuration=Go,e.monthsShort=sd,e.weekdaysMin=Ad,e.defineLocale=ep,e.updateLocale=il,e.locales=al,e.weekdaysShort=ld,e.normalizeUnits=n1,e.relativeTimeRounding=Ud,e.relativeTimeThreshold=jd,e.calendarFormat=zA,e.prototype=T,e.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},e})});var Es=$o((Ts,jb)=>{(function(t,e){"use strict";typeof jb=="object"&&jb.exports?jb.exports=e(nr()):typeof define=="function"&&define.amd?define(["moment"],e):e(t.moment)})(Ts,function(t){"use strict";t.version===void 0&&t.default&&(t=t.default);var e="0.5.43",o={},M={},b={},p={},n={},r;(!t||typeof t.version!="string")&&G1("Moment Timezone requires Moment.js. See https://momentjs.com/timezone/docs/#/use-it/browser/");var i=t.version.split("."),a=+i[0],s=+i[1];(a<2||a===2&&s<6)&&G1("Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js "+t.version+". See momentjs.com");function u(L){return L>96?L-87:L>64?L-29:L-48}function A(L){var S=0,B=L.split("."),C=B[0],G=B[1]||"",i0=1,E0,N0=0,M0=1;for(L.charCodeAt(0)===45&&(S=1,M0=-1),S;SN0&&A0.moveInvalidForward&&(i0=N0),S3){var S=p[F1(L)];if(S)return S;G1("Moment Timezone found "+L+" from the Intl api, but did not have that data loaded.")}}catch{}var B=P(),C=B.length,G=w0(B),i0=[],E0,N0,M0;for(N0=0;N00?i0[0].zone.name:void 0}function H0(L){return(!r||L)&&(r=O1()),r}function F1(L){return(L||"").toLowerCase().replace(/\//g,"_")}function f2(L){var S,B,C,G;for(typeof L=="string"&&(L=[L]),S=0;S0&&(this._z=null),L.apply(this,arguments)}}U0.zoneName=it(U0.zoneName),U0.zoneAbbr=it(U0.zoneAbbr),U0.utc=Eo(U0.utc),U0.local=Eo(U0.local),U0.utcOffset=Gb(U0.utcOffset),t.tz.setDefault=function(L){return(a<2||a===2&&s<9)&&G1("Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js "+t.version+"."),t.defaultZone=L?e1(L):null,t};var Ue=t.momentProperties;return Object.prototype.toString.call(Ue)==="[object Array]"?(Ue.push("_z"),Ue.push("_a")):Ue&&(Ue._z=null),t})});var ws=$o((Sy,g6)=>{g6.exports={version:"2023c",zones:["Africa/Abidjan|LMT GMT|g.8 0|01|-2ldXH.Q|48e5","Africa/Nairobi|LMT +0230 EAT +0245|-2r.g -2u -30 -2J|012132|-2ua2r.g N6nV.g 3Fbu h1cu dzbJ|47e5","Africa/Algiers|LMT PMT WET WEST CET CEST|-c.c -9.l 0 -10 -10 -20|01232323232323232454542423234542324|-3bQ0c.c MDA2.P cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 DA0 Imo0 rd0 De0 9Xz0 1fb0 1ap0 16K0 2yo0 mEp0 hwL0 jxA0 11A0 dDd0 17b0 11B0 1cN0 2Dy0 1cN0 1fB0 1cL0|26e5","Africa/Lagos|LMT GMT +0030 WAT|-d.z 0 -u -10|01023|-2B40d.z 7iod.z dnXK.p dLzH.z|17e6","Africa/Bissau|LMT -01 GMT|12.k 10 0|012|-2ldX0 2xoo0|39e4","Africa/Maputo|LMT CAT|-2a.k -20|01|-2GJea.k|26e5","Africa/Cairo|LMT EET EEST|-25.9 -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2MBC5.9 1AQM5.9 vb0 1ip0 11z0 1iN0 1nz0 12p0 1pz0 10N0 1pz0 16p0 1jz0 s3d0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1WL0 rd0 1Rz0 wp0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1qL0 Xd0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1ny0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 WL0 1qN0 Rb0 1wp0 On0 1zd0 Lz0 1EN0 Fb0 c10 8n0 8Nd0 gL0 e10 mn0 kSp0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0|15e6","Africa/Casablanca|LMT +00 +01|u.k 0 -10|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2gMnt.E 130Lt.E rb0 Dd0 dVb0 b6p0 TX0 EoB0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4mn0 SyN0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0|32e5","Africa/Ceuta|LMT WET WEST CET CEST|l.g 0 -10 -10 -20|0121212121212121212121343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-2M0M0 GdX0 11z0 drd0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1y7o0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4VB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|85e3","Africa/El_Aaiun|LMT -01 +00 +01|Q.M 10 0 -10|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-1rDz7.c 1GVA7.c 6L0 AL0 1Nd0 XX0 1Cp0 pz0 1cBB0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0|20e4","Africa/Johannesburg|LMT SAST SAST SAST|-1Q -1u -20 -30|0123232|-39EpQ qTcm 1Ajdu 1cL0 1cN0 1cL0|84e5","Africa/Juba|LMT CAT CAST EAT|-26.s -20 -30 -30|012121212121212121212121212121212131|-1yW26.s 1zK06.s 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0 PeX0|","Africa/Khartoum|LMT CAT CAST EAT|-2a.8 -20 -30 -30|012121212121212121212121212121212131|-1yW2a.8 1zK0a.8 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0 HjL0|51e5","Africa/Monrovia|LMT MMT MMT GMT|H.8 H.8 I.u 0|0123|-3ygng.Q 1usM0 28G01.m|11e5","Africa/Ndjamena|LMT WAT WAST|-10.c -10 -20|0121|-2le10.c 2J3c0.c Wn0|13e5","Africa/Sao_Tome|LMT LMT GMT WAT|-q.U A.J 0 -10|01232|-3tooq.U 18aoq.U 4i6N0 2q00|","Africa/Tripoli|LMT CET CEST EET|-Q.I -10 -20 -20|012121213121212121212121213123123|-21JcQ.I 1hnBQ.I vx0 4iP0 xx0 4eN0 Bb0 7ip0 U0n0 A10 1db0 1cN0 1db0 1dd0 1db0 1eN0 1bb0 1e10 1cL0 1c10 1db0 1dd0 1db0 1cN0 1db0 1q10 fAn0 1ep0 1db0 AKq0 TA0 1o00|11e5","Africa/Tunis|LMT PMT CET CEST|-E.I -9.l -10 -20|01232323232323232323232323232323232|-3zO0E.I 1cBAv.n 18pa9.l 1qM0 DA0 3Tc0 11B0 1ze0 WM0 7z0 3d0 14L0 1cN0 1f90 1ar0 16J0 1gXB0 WM0 1rA0 11c0 nwo0 Ko0 1cM0 1cM0 1rA0 10M0 zuM0 10N0 1aN0 1qM0 WM0 1qM0 11A0 1o00|20e5","Africa/Windhoek|LMT +0130 SAST SAST CAT WAT|-18.o -1u -20 -30 -20 -10|012324545454545454545454545454545454545454545454545454|-39Ep8.o qTbC.o 1Ajdu 1cL0 1SqL0 9Io0 16P0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0|32e4","America/Adak|LMT LMT NST NWT NPT BST BDT AHST HST HDT|-cd.m bK.C b0 a0 a0 b0 a0 a0 a0 90|01234256565656565656565656565656565678989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVzf.p 1EX1d.m 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|326","America/Anchorage|LMT LMT AST AWT APT AHST AHDT YST AKST AKDT|-e0.o 9X.A a0 90 90 a0 90 90 90 80|01234256565656565656565656565656565678989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVxs.n 1EX20.o 8wX0 iA0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|30e4","America/Puerto_Rico|LMT AST AWT APT|4o.p 40 30 30|01231|-2Qi7z.z 1IUbz.z 7XT0 iu0|24e5","America/Araguaina|LMT -03 -02|3c.M 30 20|0121212121212121212121212121212121212121212121212121|-2glwL.c HdKL.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 ny10 Lz0|14e4","America/Argentina/Buenos_Aires|LMT CMT -04 -03 -02|3R.M 4g.M 40 30 20|012323232323232323232323232323232323232323234343434343434343|-331U6.c 125cn pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 A4p0 uL0 1qN0 WL0|","America/Argentina/Catamarca|LMT CMT -04 -03 -02|4n.8 4g.M 40 30 20|012323232323232323232323232323232323232323234343434243432343|-331TA.Q 125bR.E pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 7B0 8zb0 uL0|","America/Argentina/Cordoba|LMT CMT -04 -03 -02|4g.M 4g.M 40 30 20|012323232323232323232323232323232323232323234343434243434343|-331TH.c 125c0 pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0 1qN0 WL0|","America/Argentina/Jujuy|LMT CMT -04 -03 -02|4l.c 4g.M 40 30 20|0123232323232323232323232323232323232323232343434232434343|-331TC.M 125bT.A pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1ze0 TX0 1ld0 WK0 1wp0 TX0 A4p0 uL0|","America/Argentina/La_Rioja|LMT CMT -04 -03 -02|4r.o 4g.M 40 30 20|0123232323232323232323232323232323232323232343434342343432343|-331Tw.A 125bN.o pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0|","America/Argentina/Mendoza|LMT CMT -04 -03 -02|4z.g 4g.M 40 30 20|012323232323232323232323232323232323232323234343423232432343|-331To.I 125bF.w pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1u20 SL0 1vd0 Tb0 1wp0 TW0 ri10 Op0 7TX0 uL0|","America/Argentina/Rio_Gallegos|LMT CMT -04 -03 -02|4A.Q 4g.M 40 30 20|012323232323232323232323232323232323232323234343434343432343|-331Tn.8 125bD.U pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0|","America/Argentina/Salta|LMT CMT -04 -03 -02|4l.E 4g.M 40 30 20|0123232323232323232323232323232323232323232343434342434343|-331TC.k 125bT.8 pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0|","America/Argentina/San_Juan|LMT CMT -04 -03 -02|4y.4 4g.M 40 30 20|0123232323232323232323232323232323232323232343434342343432343|-331Tp.U 125bG.I pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rld0 m10 8lb0 uL0|","America/Argentina/San_Luis|LMT CMT -04 -03 -02|4p.o 4g.M 40 30 20|0123232323232323232323232323232323232323232343434232323432323|-331Ty.A 125bP.o pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 XX0 1q20 SL0 AN0 vDb0 m10 8lb0 8L0 jd0 1qN0 WL0 1qN0|","America/Argentina/Tucuman|LMT CMT -04 -03 -02|4k.Q 4g.M 40 30 20|01232323232323232323232323232323232323232323434343424343234343|-331TD.8 125bT.U pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 4N0 8BX0 uL0 1qN0 WL0|","America/Argentina/Ushuaia|LMT CMT -04 -03 -02|4x.c 4g.M 40 30 20|012323232323232323232323232323232323232323234343434343432343|-331Tq.M 125bH.A pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rkN0 8p0 8zb0 uL0|","America/Asuncion|LMT AMT -04 -03|3O.E 3O.E 40 30|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-3eLw9.k 1FGo0 1DKM9.k 3CL0 3Dd0 10L0 1pB0 10n0 1pB0 10n0 1pB0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1lB0 14n0 1dd0 1cL0 1fd0 WL0 1rd0 1aL0 1dB0 Xz0 1qp0 Xb0 1qN0 10L0 1rB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 WN0 1qL0 11B0 1nX0 1ip0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 TX0 1tB0 19X0 1a10 1fz0 1a10 1fz0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0|28e5","America/Panama|LMT CMT EST|5i.8 5j.A 50|012|-3eLuF.Q Iy01.s|15e5","America/Bahia_Banderas|LMT MST CST MDT PST CDT|71 70 60 60 80 50|0121312141313131313131313131313131313152525252525252525252525252|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nW0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|84e3","America/Bahia|LMT -03 -02|2y.4 30 20|01212121212121212121212121212121212121212121212121212121212121|-2glxp.U HdLp.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 l5B0 Rb0|27e5","America/Barbados|LMT AST ADT -0330|3W.t 40 30 3u|0121213121212121|-2m4k1.v 1eAN1.v RB0 1Bz0 Op0 1rb0 11d0 1jJc0 IL0 1ip0 17b0 1ip0 17b0 1ld0 13b0|28e4","America/Belem|LMT -03 -02|3d.U 30 20|012121212121212121212121212121|-2glwK.4 HdKK.4 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|20e5","America/Belize|LMT CST -0530 CWT CPT CDT|5Q.M 60 5u 50 50 50|012121212121212121212121212121212121212121212121213412121212121212121212121212121212121212121215151|-2kBu7.c fPA7.c Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu Rcu 7Bt0 Ni0 4nd0 Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu e9Au qn0 lxB0 mn0|57e3","America/Boa_Vista|LMT -04 -03|42.E 40 30|0121212121212121212121212121212121|-2glvV.k HdKV.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 smp0 WL0 1tB0 2L0|62e2","America/Bogota|LMT BMT -05 -04|4U.g 4U.g 50 40|01232|-3sTv3.I 1eIo0 38yo3.I 1PX0|90e5","America/Boise|LMT PST PDT MST MWT MPT MDT|7I.N 80 70 70 60 60 60|01212134536363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363|-3tFE0 1nEe0 1nX0 11B0 1nX0 8C10 JCL0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 Dd0 1Kn0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e4","America/Cambridge_Bay|-00 MST MWT MPT MDT CST CDT EST|0 70 60 60 60 60 50 50|012314141414141414141414141414141414141414141414141414141414567541414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-21Jc0 RO90 8x20 ix0 14HB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11A0 1nX0 2K0 WQ0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e2","America/Campo_Grande|LMT -04 -03|3C.s 40 30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwl.w HdLl.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|77e4","America/Cancun|LMT CST EST EDT CDT|5L.4 60 50 40 50|0123232341414141414141414141414141414141412|-1UQG0 2q2o0 yLB0 1lb0 14p0 1lb0 14p0 Lz0 xB0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4","America/Caracas|LMT CMT -0430 -04|4r.I 4r.E 4u 40|012323|-3eLvw.g ROnX.U 28KM2.k 1IwOu kqo0|29e5","America/Cayenne|LMT -04 -03|3t.k 40 30|012|-2mrwu.E 2gWou.E|58e3","America/Chicago|LMT CST CDT EST CWT CPT|5O.A 60 50 50 50 50|012121212121212121212121212121212121213121212121214512121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFG0 1nEe0 1nX0 11B0 1nX0 1wp0 TX0 WN0 1qL0 1cN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 11B0 1Hz0 14p0 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|92e5","America/Chihuahua|LMT MST CST MDT CDT|74.k 70 60 60 50|0121312424231313131313131313131313131313131313131313131313132|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|81e4","America/Ciudad_Juarez|LMT MST CST MDT CDT|75.U 70 60 60 50|0121312424231313131313131313131313131313131313131313131313132131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1wn0 cm0 EP0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|","America/Costa_Rica|LMT SJMT CST CDT|5A.d 5A.d 60 50|01232323232|-3eLun.L 1fyo0 2lu0n.L Db0 1Kp0 Db0 pRB0 15b0 1kp0 mL0|12e5","America/Phoenix|LMT MST MDT MWT|7s.i 70 60 60|012121313121|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 4Al1 Ap0 1db0 SWqX 1cL0|42e5","America/Cuiaba|LMT -04 -03|3I.k 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwf.E HdLf.E 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 4a10 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|54e4","America/Danmarkshavn|LMT -03 -02 GMT|1e.E 30 20 0|01212121212121212121212121212121213|-2a5WJ.k 2z5fJ.k 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 DC0|8","America/Dawson_Creek|LMT PST PDT PWT PPT MST|80.U 80 70 70 70 70|01213412121212121212121212121212121212121212121212121212125|-3tofX.4 1nspX.4 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 ML0|12e3","America/Dawson|LMT YST YDT YWT YPT YDDT PST PDT MST|9h.E 90 80 80 80 70 80 70 70|0121213415167676767676767676767676767676767676767676767676767676767676767676767676767676767678|-2MSeG.k GWpG.k 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 jrA0 fNd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1z90|13e2","America/Denver|LMT MST MDT MWT MPT|6X.U 70 60 60 60|012121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFF0 1nEe0 1nX0 11B0 1nX0 11B0 1qL0 WN0 mn0 Ord0 8x20 ix0 LCN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e5","America/Detroit|LMT CST EST EWT EPT EDT|5w.b 60 50 40 40 40|0123425252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-2Cgir.N peqr.N 156L0 8x40 iv0 6fd0 11z0 JxX1 SMX 1cN0 1cL0 aW10 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e5","America/Edmonton|LMT MST MDT MWT MPT|7x.Q 70 60 60 60|0121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2yd4q.8 shdq.8 1in0 17d0 hz0 2dB0 1fz0 1a10 11z0 1qN0 WL0 1qN0 11z0 IGN0 8x20 ix0 3NB0 11z0 XQp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|10e5","America/Eirunepe|LMT -05 -04|4D.s 50 40|0121212121212121212121212121212121|-2glvk.w HdLk.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0 yTd0 d5X0|31e3","America/El_Salvador|LMT CST CDT|5U.M 60 50|012121|-1XiG3.c 2Fvc3.c WL0 1qN0 WL0|11e5","America/Tijuana|LMT MST PST PDT PWT PPT|7M.4 70 80 70 70 70|012123245232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQF0 4Q00 8mM0 8lc0 SN0 1cL0 pHB0 83r0 zI0 5O10 1Rz0 cOO0 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 BUp0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|20e5","America/Fort_Nelson|LMT PST PDT PWT PPT MST|8a.L 80 70 70 70 70|012134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121215|-3tofN.d 1nspN.d 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2","America/Fort_Wayne|LMT CST CDT CWT CPT EST EDT|5I.C 60 50 50 50 50 40|0121212134121212121212121212151565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 QI10 Db0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 5Tz0 1o10 qLb0 1cL0 1cN0 1cL0 1qhd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Fortaleza|LMT -03 -02|2y 30 20|0121212121212121212121212121212121212121|-2glxq HdLq 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 5z0 2mN0 On0|34e5","America/Glace_Bay|LMT AST ADT AWT APT|3X.M 40 30 30 30|012134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsI0.c CwO0.c 1in0 UGp0 8x50 iu0 iq10 11z0 Jg10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|19e3","America/Godthab|LMT -03 -02 -01|3q.U 30 20 10|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2a5Ux.4 2z5dx.4 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 2so0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|17e3","America/Goose_Bay|LMT NST NDT NST NDT NWT NPT AST ADT ADDT|41.E 3u.Q 2u.Q 3u 2u 2u 2u 40 30 20|0121343434343434356343434343434343434343434343434343434343437878787878787878787878787878787878787878787879787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787|-3tojW.k 1nspt.c 1in0 DXb0 2HbX.8 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 S10 g0u 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|76e2","America/Grand_Turk|LMT KMT EST EDT AST|4I.w 57.a 50 40 40|01232323232323232323232323232323232323232323232323232323232323232323232323243232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3eLvf.s RK0m.C 2HHBQ.O 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 7jA0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e2","America/Guatemala|LMT CST CDT|62.4 60 50|0121212121|-24KhV.U 2efXV.U An0 mtd0 Nz0 ifB0 17b0 zDB0 11z0|13e5","America/Guayaquil|LMT QMT -05 -04|5j.k 5e 50 40|01232|-3eLuE.E 1DNzS.E 2uILK rz0|27e5","America/Guyana|LMT -04 -0345 -03|3Q.D 40 3J 30|01231|-2mf87.l 8Hc7.l 2r7bJ Ey0f|80e4","America/Halifax|LMT AST ADT AWT APT|4e.o 40 30 30 30|0121212121212121212121212121212121212121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsHJ.A xzzJ.A 1db0 3I30 1in0 3HX0 IL0 1E10 ML0 1yN0 Pb0 1Bd0 Mn0 1Bd0 Rz0 1w10 Xb0 1w10 LX0 1w10 Xb0 1w10 Lz0 1C10 Jz0 1E10 OL0 1yN0 Un0 1qp0 Xb0 1qp0 11X0 1w10 Lz0 1HB0 LX0 1C10 FX0 1w10 Xb0 1qp0 Xb0 1BB0 LX0 1td0 Xb0 1qp0 Xb0 Rf0 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 6i10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|39e4","America/Havana|LMT HMT CST CDT|5t.s 5t.A 50 40|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3eLuu.w 1qx00.8 72zu.o ML0 sld0 An0 1Nd0 Db0 1Nd0 An0 6Ep0 An0 1Nd0 An0 JDd0 Mn0 1Ap0 On0 1fd0 11X0 1qN0 WL0 1wp0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 14n0 1ld0 14L0 1kN0 15b0 1kp0 1cL0 1cN0 1fz0 1a10 1fz0 1fB0 11z0 14p0 1nX0 11B0 1nX0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 1a10 1in0 1a10 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 17c0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 11A0 6i00 Rc0 1wo0 U00 1tA0 Rc0 1wo0 U00 1wo0 U00 1zc0 U00 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0|21e5","America/Hermosillo|LMT MST CST MDT PST|7n.Q 70 60 60 80|0121312141313131|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0|64e4","America/Indiana/Knox|LMT CST CDT CWT CPT EST|5K.u 60 50 50 50 50|01212134121212121212121212121212121212151212121212121212121212121212121212121212121212121252121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 3Cn0 8wp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 z8o0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Marengo|LMT CST CDT CWT CPT EST EDT|5J.n 60 50 50 50 50 40|01212134121212121212121215656565656525656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 dyN0 11z0 6fd0 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1e6p0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Petersburg|LMT CST CDT CWT CPT EST EDT|5N.7 60 50 50 50 50 40|01212134121212121212121212121512121212121212121212125212565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 njX0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 3Fb0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 19co0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Tell_City|LMT CST CDT CWT CPT EST EDT|5L.3 60 50 50 50 50 40|012121341212121212121212121512165652121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 njX0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 8wn0 1cN0 1cL0 1cN0 1cK0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Vevay|LMT CST CDT CWT CPT EST EDT|5E.g 60 50 50 50 50 40|0121213415656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 kPB0 Awn0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1lnd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Vincennes|LMT CST CDT CWT CPT EST EDT|5O.7 60 50 50 50 50 40|01212134121212121212121212121212156565212565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 g0p0 11z0 1o10 11z0 1qL0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 caL0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Winamac|LMT CST CDT CWT CPT EST EDT|5K.p 60 50 50 50 50 40|012121341212121212121212121212121212121565652165656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1za0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Inuvik|-00 PST PDT MDT MST|0 80 70 60 70|01212121212121213434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-FnA0 L3K0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cK0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|35e2","America/Iqaluit|-00 EWT EPT EST EDT CST CDT|0 40 40 50 40 60 50|0123434343434343434343434343434343434343434343434343434343456343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-16K00 7nX0 iv0 14HB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|67e2","America/Jamaica|LMT KMT EST EDT|57.a 57.a 50 40|01232323232323232323232|-3eLuQ.O RK00 2uM1Q.O 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0|94e4","America/Juneau|LMT LMT PST PWT PPT PDT YDT YST AKST AKDT|-f2.j 8V.F 80 70 70 70 80 90 90 80|0123425252525252525252525252625252578989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVwq.s 1EX12.j 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cM0 1cM0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|33e3","America/Kentucky/Louisville|LMT CST CDT CWT CPT EST EDT|5H.2 60 50 50 50 50 40|01212121213412121212121212121212121212565656565656525656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 3Fd0 Nb0 LPd0 11z0 RB0 8x30 iw0 1nX1 e0X 9vd0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 xz0 gso0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Kentucky/Monticello|LMT CST CDT CWT CPT EST EDT|5D.o 60 50 50 50 50 40|01212134121212121212121212121212121212121212121212121212121212121212121212565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 SWp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/La_Paz|LMT CMT BST -04|4w.A 4w.A 3w.A 40|0123|-3eLvr.o 1FIo0 13b0|19e5","America/Lima|LMT LMT -05 -04|58.c 58.A 50 40|01232323232323232|-3eLuP.M JcM0.o 1bDzP.o zX0 1aN0 1cL0 1cN0 1cL0 1PrB0 zX0 1O10 zX0 6Gp0 zX0 98p0 zX0|11e6","America/Los_Angeles|LMT PST PDT PWT PPT|7Q.W 80 70 70 70|0121213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFE0 1nEe0 1nX0 11B0 1nX0 SgN0 8x10 iy0 5Wp1 1VaX 3dA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e6","America/Maceio|LMT -03 -02|2m.Q 30 20|012121212121212121212121212121212121212121|-2glxB.8 HdLB.8 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 8Q10 WL0 1tB0 5z0 2mN0 On0|93e4","America/Managua|LMT MMT CST EST CDT|5J.8 5J.c 60 50 50|01232424232324242|-3eLue.Q 1Mhc0.4 1yAMe.M 4mn0 9Up0 Dz0 1K10 Dz0 s3F0 1KH0 DB0 9In0 k8p0 19X0 1o30 11y0|22e5","America/Manaus|LMT -04 -03|40.4 40 30|01212121212121212121212121212121|-2glvX.U HdKX.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0|19e5","America/Martinique|LMT FFMT AST ADT|44.k 44.k 40 30|01232|-3eLvT.E PTA0 2LPbT.E 19X0|39e4","America/Matamoros|LMT CST CDT|6u 60 50|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|45e4","America/Mazatlan|LMT MST CST MDT PST|75.E 70 60 60 80|0121312141313131313131313131313131313131313131313131313131313131|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|44e4","America/Menominee|LMT CST CDT CWT CPT EST|5O.r 60 50 50 50 50|012121341212152121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3pdG9.x 1jce9.x 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 LCN0 1fz0 6410 9Jb0 1cM0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|85e2","America/Merida|LMT CST EST CDT|5W.s 60 50 50|0121313131313131313131313131313131313131313131313131313131|-1UQG0 2q2o0 2hz0 wu30 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|11e5","America/Metlakatla|LMT LMT PST PWT PPT PDT AKST AKDT|-fd.G 8K.i 80 70 70 70 90 80|0123425252525252525252525252525252526767672676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-48Pzs.L 1jVwf.5 1EX1d.G 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1hU10 Rd0 1zb0 Op0 1zb0 Op0 1zb0 uM0 jB0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2","America/Mexico_City|LMT MST CST MDT CDT CWT|6A.A 70 60 60 50 50|012131242425242424242424242424242424242424242424242424242424242424242|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 gEn0 TX0 3xd0 Jb0 6zB0 SL0 e5d0 17b0 1Pff0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|20e6","America/Miquelon|LMT AST -03 -02|3I.E 40 30 20|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2mKkf.k 2LTAf.k gQ10 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|61e2","America/Moncton|LMT EST AST ADT AWT APT|4j.8 50 40 30 30 30|0123232323232323232323245232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3txvE.Q J4ME.Q CwN0 1in0 zAo0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1K10 Lz0 1zB0 NX0 1u10 Wn0 S20 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14n1 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 ReX 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|64e3","America/Monterrey|LMT CST CDT|6F.g 60 50|0121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|41e5","America/Montevideo|LMT MMT -04 -03 -0330 -0230 -02 -0130|3I.P 3I.P 40 30 3u 2u 20 1u|012343434343434343434343435353636353636375363636363636363636363636363636363636363636363|-2tRUf.9 sVc0 8jcf.9 1db0 1dcu 1cLu 1dcu 1cLu ircu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu WLu 1fAu 1cLu 1o0u 11zu NAu 3jXu zXu Dq0u 19Xu pcu jz0 cm10 19X0 6tB0 1fbu 3o0u jX0 4vB0 xz0 3Cp0 mmu 1a10 IMu Db0 4c10 uL0 1Nd0 An0 1SN0 uL0 mp0 28L0 iPB0 un0 1SN0 xz0 1zd0 Lz0 1zd0 Rb0 1zd0 On0 1wp0 Rb0 s8p0 1fB0 1ip0 11z0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 11z0|17e5","America/Toronto|LMT EST EDT EWT EPT|5h.w 50 40 40 40|012121212121212121212121212121212121212121212123412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-32B6G.s UFdG.s 1in0 11Wu 1nzu 1fD0 WJ0 1wr0 Nb0 1Ap0 On0 1zd0 On0 1wp0 TX0 1tB0 TX0 1tB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 4kM0 8x40 iv0 1o10 11z0 1nX0 11z0 1o10 11z0 1o10 1qL0 11D0 1nX0 11B0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e5","America/New_York|LMT EST EDT EWT EPT|4U.2 50 40 40 40|012121212121212121212121212121212121212121212121213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFH0 1nEe0 1nX0 11B0 1nX0 11B0 1qL0 1a10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x40 iv0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e6","America/Nome|LMT LMT NST NWT NPT BST BDT YST AKST AKDT|-cW.m b1.C b0 a0 a0 b0 a0 90 90 80|01234256565656565656565656565656565678989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVyu.p 1EX1W.m 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cl0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|38e2","America/Noronha|LMT -02 -01|29.E 20 10|0121212121212121212121212121212121212121|-2glxO.k HdKO.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|30e2","America/North_Dakota/Beulah|LMT MST MDT MWT MPT CST CDT|6L.7 70 60 60 60 60 50|012121341212121212121212121212121212121212121212121212121212121212121212121212121212121212121212565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0|","America/North_Dakota/Center|LMT MST MDT MWT MPT CST CDT|6J.c 70 60 60 60 60 50|0121213412121212121212121212121212121212121212121212121212125656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/North_Dakota/New_Salem|LMT MST MDT MWT MPT CST CDT|6J.D 70 60 60 60 60 50|0121213412121212121212121212121212121212121212121212121212121212121212121212121212565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Ojinaga|LMT MST CST MDT CDT|6V.E 70 60 60 50|0121312424231313131313131313131313131313131313131313131313132424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1wn0 Rc0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e3","America/Paramaribo|LMT PMT PMT -0330 -03|3E.E 3E.Q 3E.A 3u 30|01234|-2nDUj.k Wqo0.c qanX.I 1yVXN.o|24e4","America/Port-au-Prince|LMT PPMT EST EDT|4N.k 4N 50 40|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3eLva.E 15RLX.E 2FnMb 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14q0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 i6n0 1nX0 11B0 1nX0 d430 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 3iN0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5","America/Rio_Branco|LMT -05 -04|4v.c 50 40|01212121212121212121212121212121|-2glvs.M HdLs.M 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0 d5X0|31e4","America/Porto_Velho|LMT -04 -03|4f.A 40 30|012121212121212121212121212121|-2glvI.o HdKI.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|37e4","America/Punta_Arenas|LMT SMT -05 -04 -03|4H.E 4G.J 50 40 30|01213132323232323232343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLvg.k MJbX.5 fJAh.f 5knG.J 1Vzh.f jRAG.J 1pbh.f 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 blz0 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|","America/Winnipeg|LMT CST CDT CWT CPT|6s.A 60 50 50 50|0121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3kLtv.o 1a3bv.o WL0 3ND0 1in0 Jap0 Rb0 aCN0 8x30 iw0 1tB0 11z0 1ip0 11z0 1o10 11z0 1o10 11z0 1rd0 10L0 1op0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 1cL0 1cN0 11z0 6i10 WL0 6i10 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|66e4","America/Rankin_Inlet|-00 CST CDT EST|0 60 50 50|01212121212121212121212121212121212121212121212121212121212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-vDc0 Bjk0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e2","America/Recife|LMT -03 -02|2j.A 30 20|0121212121212121212121212121212121212121|-2glxE.o HdLE.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|33e5","America/Regina|LMT MST MDT MWT MPT CST|6W.A 70 60 60 60 60|012121212121212121212121341212121212121212121212121215|-2AD51.o uHe1.o 1in0 s2L0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 66N0 1cL0 1cN0 19X0 1fB0 1cL0 1fB0 1cL0 1cN0 1cL0 M30 8x20 ix0 1ip0 1cL0 1ip0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 3NB0 1cL0 1cN0|19e4","America/Resolute|-00 CST CDT EST|0 60 50 50|01212121212121212121212121212121212121212121212121212121212321212121212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-SnA0 103I0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|229","America/Santarem|LMT -04 -03|3C.M 40 30|0121212121212121212121212121212|-2glwl.c HdLl.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0|21e4","America/Santiago|LMT SMT -05 -04 -03|4G.J 4G.J 50 40 30|0121313232323232323432343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLvh.f MJc0 fJAh.f 5knG.J 1Vzh.f jRAG.J 1pbh.f 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 9Bz0 hX0 1q10 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0|62e5","America/Santo_Domingo|LMT SDMT EST EDT -0430 AST|4D.A 4E 50 40 4u 40|012324242424242525|-3eLvk.o 1Jic0.o 1lJMk Mn0 6sp0 Lbu 1Cou yLu 1RAu wLu 1QMu xzu 1Q0u xXu 1PAu 13jB0 e00|29e5","America/Sao_Paulo|LMT -03 -02|36.s 30 20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwR.w HdKR.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 pTd0 PX0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|20e6","America/Scoresbysund|LMT -02 -01 +00|1r.Q 20 10 0|0121323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2a5Ww.8 2z5ew.8 1a00 1cK0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|452","America/Sitka|LMT LMT PST PWT PPT PDT YST AKST AKDT|-eW.L 91.d 80 70 70 70 90 90 80|0123425252525252525252525252525252567878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787|-48Pzs.L 1jVwu 1EX0W.L 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|90e2","America/St_Johns|LMT NST NDT NST NDT NWT NPT NDDT|3u.Q 3u.Q 2u.Q 3u 2u 2u 2u 1u|012121212121212121212121212121212121213434343434343435634343434343434343434343434343434343434343434343434343434343434343434343434343434343437343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3tokt.8 1l020 14L0 1nB0 1in0 1gm0 Dz0 1JB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1fB0 19X0 1fB0 19X0 10O0 eKX.8 19X0 1iq0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4","America/Swift_Current|LMT MST MDT MWT MPT CST|7b.k 70 60 60 60 60|012134121212121212121215|-2AD4M.E uHdM.E 1in0 UGp0 8x20 ix0 1o10 17b0 1ip0 11z0 1o10 11z0 1o10 11z0 isN0 1cL0 3Cp0 1cL0 1cN0 11z0 1qN0 WL0 pMp0|16e3","America/Tegucigalpa|LMT CST CDT|5M.Q 60 50|01212121|-1WGGb.8 2ETcb.8 WL0 1qN0 WL0 GRd0 AL0|11e5","America/Thule|LMT AST ADT|4z.8 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5To.Q 31NBo.Q 1cL0 1cN0 1cL0 1fB0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|656","America/Vancouver|LMT PST PDT PWT PPT|8c.s 80 70 70 70|01213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tofL.w 1nspL.w 1in0 UGp0 8x10 iy0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5","America/Whitehorse|LMT YST YDT YWT YPT YDDT PST PDT MST|90.c 90 80 80 80 70 80 70 70|0121213415167676767676767676767676767676767676767676767676767676767676767676767676767676767678|-2MSeX.M GWpX.M 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 LA0 ytd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1z90|23e3","America/Yakutat|LMT LMT YST YWT YPT YDT AKST AKDT|-eF.5 9i.T 90 80 80 80 90 80|0123425252525252525252525252525252526767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-48Pzs.L 1jVwL.G 1EX1F.5 8x00 iz0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cn0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|642","Antarctica/Casey|-00 +08 +11|0 -80 -b0|0121212121212|-2q00 1DjS0 T90 40P0 KL0 blz0 3m10 1o30 14k0 1kr0 12l0 1o01|10","Antarctica/Davis|-00 +07 +05|0 -70 -50|01012121|-vyo0 iXt0 alj0 1D7v0 VB0 3Wn0 KN0|70","Pacific/Port_Moresby|LMT PMMT +10|-9M.E -9M.w -a0|012|-3D8VM.E AvA0.8|25e4","Antarctica/Macquarie|-00 AEST AEDT|0 -a0 -b0|0121012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2OPc0 Fb40 1a00 4SK0 1ayy0 Lvs0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 3Co0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|1","Antarctica/Mawson|-00 +06 +05|0 -60 -50|012|-CEo0 2fyk0|60","Pacific/Auckland|LMT NZMT NZST NZST NZDT|-bD.4 -bu -cu -c0 -d0|012131313131313131313131313134343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-46jLD.4 2nEO9.4 Lz0 1tB0 11zu 1o0u 11zu 1o0u 11zu 1o0u 14nu 1lcu 14nu 1lcu 1lbu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1qLu WMu 1qLu 11Au 1n1bu IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00|14e5","Antarctica/Palmer|-00 -03 -04 -02|0 30 40 20|0121212121213121212121212121212121212121212121212121212121212121212121212121212121|-cao0 nD0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 jsN0 14N0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|40","Antarctica/Rothera|-00 -03|0 30|01|gOo0|130","Asia/Riyadh|LMT +03|-36.Q -30|01|-TvD6.Q|57e5","Antarctica/Troll|-00 +00 +02|0 0 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|1puo0 hd0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|40","Asia/Urumqi|LMT +06|-5O.k -60|01|-1GgtO.k|32e5","Europe/Berlin|LMT CET CEST CEMT|-R.s -10 -20 -30|012121212121212321212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-36RcR.s UbWR.s 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 kL0 Nc0 m10 WM0 1ao0 1cp0 dX0 jz0 Dd0 1io0 17c0 1fA0 1a00 1ehA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|41e5","Asia/Almaty|LMT +05 +06 +07|-57.M -50 -60 -70|012323232323232323232321232323232323232323232323232|-1Pc57.M eUo7.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|15e5","Asia/Amman|LMT EET EEST +03|-2n.I -20 -30 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212123|-1yW2n.I 1HiMn.I KL0 1oN0 11b0 1oN0 11b0 1pd0 1dz0 1cp0 11b0 1op0 11b0 fO10 1db0 1e10 1cL0 1cN0 1cL0 1cN0 1fz0 1pd0 10n0 1ld0 14n0 1hB0 15b0 1ip0 19X0 1cN0 1cL0 1cN0 17b0 1ld0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1So0 y00 1fc0 1dc0 1co0 1dc0 1cM0 1cM0 1cM0 1o00 11A0 1lc0 17c0 1cM0 1cM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 LA0 1C00|25e5","Asia/Anadyr|LMT +12 +13 +14 +11|-bN.U -c0 -d0 -e0 -b0|01232121212121212121214121212121212121212121212121212121212141|-1PcbN.U eUnN.U 23CL0 1db0 2q10 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|13e3","Asia/Aqtau|LMT +04 +05 +06|-3l.4 -40 -50 -60|012323232323232323232123232312121212121212121212|-1Pc3l.4 eUnl.4 24PX0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|15e4","Asia/Aqtobe|LMT +04 +05 +06|-3M.E -40 -50 -60|0123232323232323232321232323232323232323232323232|-1Pc3M.E eUnM.E 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|27e4","Asia/Ashgabat|LMT +04 +05 +06|-3R.w -40 -50 -60|0123232323232323232323212|-1Pc3R.w eUnR.w 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0|41e4","Asia/Atyrau|LMT +03 +05 +06 +04|-3r.I -30 -50 -60 -40|01232323232323232323242323232323232324242424242|-1Pc3r.I eUor.I 24PW0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 2sp0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|","Asia/Baghdad|LMT BMT +03 +04|-2V.E -2V.A -30 -40|0123232323232323232323232323232323232323232323232323232|-3eLCV.E 18ao0.4 2ACnV.A 11b0 1cp0 1dz0 1dd0 1db0 1cN0 1cp0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1de0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0|66e5","Asia/Qatar|LMT +04 +03|-3q.8 -40 -30|012|-21Jfq.8 27BXq.8|96e4","Asia/Baku|LMT +03 +04 +05|-3j.o -30 -40 -50|01232323232323232323232123232323232323232323232323232323232323232|-1Pc3j.o 1jUoj.o WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 9Je0 1o00 11z0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5","Asia/Bangkok|LMT BMT +07|-6G.4 -6G.4 -70|012|-3D8SG.4 1C000|15e6","Asia/Barnaul|LMT +06 +07 +08|-5z -60 -70 -80|0123232323232323232323212323232321212121212121212121212121212121212|-21S5z pCnz 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 p90 LE0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|","Asia/Beirut|LMT EET EEST|-2m -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3D8Om 1BWom 1on0 1410 1db0 19B0 1in0 1ip0 WL0 1lQp0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 q6N0 En0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1op0 11b0 dA10 17b0 1iN0 17b0 1iN0 17b0 1iN0 17b0 1vB0 SL0 1mp0 13z0 1iN0 17b0 1iN0 17b0 1jd0 12n0 1a10 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0|22e5","Asia/Bishkek|LMT +05 +06 +07|-4W.o -50 -60 -70|012323232323232323232321212121212121212121212121212|-1Pc4W.o eUnW.o 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2e00 1tX0 17b0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1cPu 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0|87e4","Asia/Brunei|LMT +0730 +08 +0820 +09|-7l.k -7u -80 -8k -90|0123232323232323242|-1KITl.k gDbP.k 6ynu AnE 1O0k AnE 1NAk AnE 1NAk AnE 1NAk AnE 1O0k AnE 1NAk AnE pAk 8Fz0|42e4","Asia/Kolkata|LMT HMT MMT IST +0630|-5R.s -5R.k -5l.a -5u -6u|01234343|-4Fg5R.s BKo0.8 1rDcw.a 1r2LP.a 1un0 HB0 7zX0|15e6","Asia/Chita|LMT +08 +09 +10|-7x.Q -80 -90 -a0|012323232323232323232321232323232323232323232323232323232323232312|-21Q7x.Q pAnx.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3re0|33e4","Asia/Choibalsan|LMT +07 +08 +10 +09|-7C -70 -80 -a0 -90|0123434343434343434343434343434343434343434343424242|-2APHC 2UkoC cKn0 1da0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 3Db0 h1f0 1cJ0 1cP0 1cJ0|38e3","Asia/Shanghai|LMT CST CDT|-85.H -80 -90|012121212121212121212121212121|-2M0U5.H Iuo5.H 18n0 OjB0 Rz0 11d0 1wL0 A10 8HX0 1G10 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 aL0 1tU30 Rb0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0|23e6","Asia/Colombo|LMT MMT +0530 +06 +0630|-5j.o -5j.w -5u -60 -6u|012342432|-3D8Rj.o 13inX.Q 1rFbN.w 1zzu 7Apu 23dz0 11zu n3cu|22e5","Asia/Dhaka|LMT HMT +0630 +0530 +06 +07|-61.E -5R.k -6u -5u -60 -70|01232454|-3eLG1.E 26008.k 1unn.k HB0 m6n0 2kxbu 1i00|16e6","Asia/Damascus|LMT EET EEST +03|-2p.c -20 -30 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212123|-21Jep.c Hep.c 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1xRB0 11X0 1oN0 10L0 1pB0 11b0 1oN0 10L0 1mp0 13X0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 Nb0 1AN0 Nb0 bcp0 19X0 1gp0 19X0 3ld0 1xX0 Vd0 1Bz0 Sp0 1vX0 10p0 1dz0 1cN0 1cL0 1db0 1db0 1g10 1an0 1ap0 1db0 1fd0 1db0 1cN0 1db0 1dd0 1db0 1cp0 1dz0 1c10 1dX0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 19z0 1fB0 1qL0 11B0 1on0 Wp0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0|26e5","Asia/Dili|LMT +08 +09|-8m.k -80 -90|01212|-2le8m.k 1dnXm.k 1nfA0 Xld0|19e4","Asia/Dubai|LMT +04|-3F.c -40|01|-21JfF.c|39e5","Asia/Dushanbe|LMT +05 +06 +07|-4z.c -50 -60 -70|012323232323232323232321|-1Pc4z.c eUnz.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2hB0|76e4","Asia/Famagusta|LMT EET EEST +03|-2f.M -20 -30 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212312121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Vc2f.M 2a3cf.M 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0 2Ks0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|","Asia/Gaza|LMT EET EEST IST IDT|-2h.Q -20 -30 -20 -30|01212121212121212121212121212121212343434343434343434343434343434312121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2MBCh.Q 1Azeh.Q MM0 iM0 4JA0 10o0 1pA0 10M0 1pA0 16o0 1jA0 16o0 1jA0 pBa0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 bXB0 gM0 8Q00 IM0 1wo0 TX0 1HB0 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 11z0 1o10 14o0 1lA1 SKX 1xd1 MKX 1AN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nA0 1210 1qL0 WN0 1qL0 WN0 1qL0 11c0 1on0 11B0 1o00 11A0 1qo0 XA0 1qp0 1cN0 1cL0 17d0 1in0 14p0 1lb0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1lb0 14p0 1in0 17d0 1cL0 1cN0 19X0 e10 2L0 WN0 14n0 gN0 5z0 11B0 WL0 e10 bb0 11B0 TX0 e10 dX0 11B0 On0 gN0 gL0 11B0 Lz0 e10 pb0 WN0 IL0 e10 rX0 WN0 Db0 gN0 uL0 11B0 xz0 e10 An0 11B0 rX0 gN0 Db0 11B0 pb0 e10 Lz0 WN0 mn0 e10 On0 WN0 gL0 gN0 Rb0 11B0 bb0 e10 WL0 11B0 5z0 gN0 11z0 11B0 2L0 gN0 14n0 1fB0 1cL0 1a10 1fz0 14p0 1lb0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1nX0 14p0 1in0 17d0 1fz0 1a10 19X0 1fB0 17b0 e10 28L0 e10 25X0 gN0 25X0 e10 gL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0|18e5","Asia/Hebron|LMT EET EEST IST IDT|-2k.n -20 -30 -20 -30|0121212121212121212121212121212121234343434343434343434343434343431212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2MBCk.n 1Azek.n MM0 iM0 4JA0 10o0 1pA0 10M0 1pA0 16o0 1jA0 16o0 1jA0 pBa0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 bXB0 gM0 8Q00 IM0 1wo0 TX0 1HB0 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 12L0 1mN0 14o0 1lc0 Tb0 1xd1 MKX bB0 cn0 1cN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nA0 1210 1qL0 WN0 1qL0 WN0 1qL0 11c0 1on0 11B0 1o00 11A0 1qo0 XA0 1qp0 1cN0 1cL0 17d0 1in0 14p0 1lb0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1lb0 14p0 1in0 17d0 1cL0 1cN0 19X0 e10 2L0 WN0 14n0 gN0 5z0 11B0 WL0 e10 bb0 11B0 TX0 e10 dX0 11B0 On0 gN0 gL0 11B0 Lz0 e10 pb0 WN0 IL0 e10 rX0 WN0 Db0 gN0 uL0 11B0 xz0 e10 An0 11B0 rX0 gN0 Db0 11B0 pb0 e10 Lz0 WN0 mn0 e10 On0 WN0 gL0 gN0 Rb0 11B0 bb0 e10 WL0 11B0 5z0 gN0 11z0 11B0 2L0 gN0 14n0 1fB0 1cL0 1a10 1fz0 14p0 1lb0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1nX0 14p0 1in0 17d0 1fz0 1a10 19X0 1fB0 17b0 e10 28L0 e10 25X0 gN0 25X0 e10 gL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0|25e4","Asia/Ho_Chi_Minh|LMT PLMT +07 +08 +09|-76.u -76.u -70 -80 -90|0123423232|-2yC76.u bK00 1h7b6.u 5lz0 18o0 3Oq0 k5b0 aW00 BAM0|90e5","Asia/Hong_Kong|LMT HKT HKST HKWT JST|-7A.G -80 -90 -8u -90|0123412121212121212121212121212121212121212121212121212121212121212121|-2CFH0 1taO0 Hc0 xUu 9tBu 11z0 1tDu Rc0 1wo0 11A0 1cM0 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1nX0 U10 1tz0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|73e5","Asia/Hovd|LMT +06 +07 +08|-66.A -60 -70 -80|012323232323232323232323232323232323232323232323232|-2APG6.A 2Uko6.A cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|81e3","Asia/Irkutsk|LMT IMT +07 +08 +09|-6V.5 -6V.5 -70 -80 -90|012343434343434343434343234343434343434343434343434343434343434343|-3D8SV.5 1Bxc0 pjXV.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4","Europe/Istanbul|LMT IMT EET EEST +03 +04|-1T.Q -1U.U -20 -30 -30 -40|01232323232323232323232323232323232323232323232345423232323232323232323232323232323232323232323232323232323232323234|-3D8NT.Q 1ePXW.U dzzU.U 11b0 8tB0 1on0 1410 1db0 19B0 1in0 3Rd0 Un0 1oN0 11b0 zSN0 CL0 mp0 1Vz0 1gN0 8yn0 1yp0 ML0 1kp0 17b0 1ip0 17b0 1fB0 19X0 1ip0 19X0 1ip0 17b0 qdB0 38L0 1jd0 Tz0 l6O0 11A0 WN0 1qL0 TB0 1tX0 U10 1tz0 11B0 1in0 17d0 z90 cne0 pb0 2Cp0 1800 14o0 1dc0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1a00 1fA0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WO0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 Xc0 1qo0 WM0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6","Asia/Jakarta|LMT BMT +0720 +0730 +09 +08 WIB|-77.c -77.c -7k -7u -90 -80 -70|012343536|-49jH7.c 2hiLL.c luM0 mPzO 8vWu 6kpu 4PXu xhcu|31e6","Asia/Jayapura|LMT +09 +0930 WIT|-9m.M -90 -9u -90|0123|-1uu9m.M sMMm.M L4nu|26e4","Asia/Jerusalem|LMT JMT IST IDT IDDT|-2k.S -2k.E -20 -30 -40|012323232323232432323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3D8Ok.S 1wvA0.e SyOk.E MM0 iM0 4JA0 10o0 1pA0 10M0 1pA0 16o0 1jA0 16o0 1jA0 3LA0 Eo0 oo0 1co0 1dA0 16o0 10M0 1jc0 1tA0 14o0 1cM0 1a00 11A0 1Nc0 Ao0 1Nc0 Ao0 1Ko0 LA0 1o00 WM0 EQK0 Db0 1fB0 Rb0 bXB0 gM0 8Q00 IM0 1wo0 TX0 1HB0 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 1hB0 1dX0 1ep0 1aL0 1eN0 17X0 1nf0 11z0 1tB0 19W0 1e10 17b0 1ep0 1gL0 18N0 1fz0 1eN0 17b0 1gq0 1gn0 19d0 1dz0 1c10 17X0 1hB0 1gn0 19d0 1dz0 1c10 17X0 1kp0 1dz0 1c10 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0|81e4","Asia/Kabul|LMT +04 +0430|-4A.M -40 -4u|012|-3eLEA.M 2dTcA.M|46e5","Asia/Kamchatka|LMT +11 +12 +13|-ay.A -b0 -c0 -d0|012323232323232323232321232323232323232323232323232323232323212|-1SLKy.A ivXy.A 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|18e4","Asia/Karachi|LMT +0530 +0630 +05 PKT PKST|-4s.c -5u -6u -50 -50 -60|012134545454|-2xoss.c 1qOKW.c 7zX0 eup0 LqMu 1fy00 1cL0 dK10 11b0 1610 1jX0|24e6","Asia/Kathmandu|LMT +0530 +0545|-5F.g -5u -5J|012|-21JhF.g 2EGMb.g|12e5","Asia/Khandyga|LMT +08 +09 +10 +11|-92.d -80 -90 -a0 -b0|0123232323232323232323212323232323232323232323232343434343434343432|-21Q92.d pAp2.d 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 qK0 yN0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|66e2","Asia/Krasnoyarsk|LMT +06 +07 +08|-6b.q -60 -70 -80|01232323232323232323232123232323232323232323232323232323232323232|-21Hib.q prAb.q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|10e5","Asia/Kuala_Lumpur|LMT SMT +07 +0720 +0730 +09 +08|-6T.p -6T.p -70 -7k -7u -90 -80|01234546|-2M0ST.p aIM0 17anT.p l5XE 17bO 8Fyu 1so10|71e5","Asia/Macau|LMT CST +09 +10 CDT|-7y.a -80 -90 -a0 -90|012323214141414141414141414141414141414141414141414141414141414141414141|-2CFHy.a 1uqKy.a PX0 1kn0 15B0 11b0 4Qq0 1oM0 11c0 1ko0 1u00 11A0 1cM0 11c0 1o00 11A0 1o00 11A0 1oo0 1400 1o00 11A0 1o00 U00 1tA0 U00 1wo0 Rc0 1wru U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cK0 1cO0 1cK0 1cO0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|57e4","Asia/Magadan|LMT +10 +11 +12|-a3.c -a0 -b0 -c0|012323232323232323232321232323232323232323232323232323232323232312|-1Pca3.c eUo3.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Cq0|95e3","Asia/Makassar|LMT MMT +08 +09 WITA|-7V.A -7V.A -80 -90 -80|01234|-21JjV.A vfc0 myLV.A 8ML0|15e5","Asia/Manila|LMT LMT PST PDT JST|fU -84 -80 -90 -90|01232423232|-54m84 2clc0 1vfc4 AL0 cK10 65X0 mXB0 vX0 VK10 1db0|24e6","Asia/Nicosia|LMT EET EEST|-2d.s -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Vc2d.s 2a3cd.s 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|32e4","Asia/Novokuznetsk|LMT +06 +07 +08|-5M.M -60 -70 -80|012323232323232323232321232323232323232323232323232323232323212|-1PctM.M eULM.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|55e4","Asia/Novosibirsk|LMT +06 +07 +08|-5v.E -60 -70 -80|0123232323232323232323212323212121212121212121212121212121212121212|-21Qnv.E pAFv.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 ml0 Os0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 4eN0|15e5","Asia/Omsk|LMT +05 +06 +07|-4R.u -50 -60 -70|01232323232323232323232123232323232323232323232323232323232323232|-224sR.u pMLR.u 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|12e5","Asia/Oral|LMT +03 +05 +06 +04|-3p.o -30 -50 -60 -40|01232323232323232424242424242424242424242424242|-1Pc3p.o eUop.o 23CK0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 1cM0 IM0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|27e4","Asia/Pontianak|LMT PMT +0730 +09 +08 WITA WIB|-7h.k -7h.k -7u -90 -80 -80 -70|012324256|-2ua7h.k XE00 munL.k 8Rau 6kpu 4PXu xhcu Wqnu|23e4","Asia/Pyongyang|LMT KST JST KST|-8n -8u -90 -90|012313|-2um8n 97XR 1lTzu 2Onc0 6BA0|29e5","Asia/Qostanay|LMT +04 +05 +06|-4e.s -40 -50 -60|012323232323232323232123232323232323232323232323|-1Pc4e.s eUoe.s 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|","Asia/Qyzylorda|LMT +04 +05 +06|-4l.Q -40 -50 -60|01232323232323232323232323232323232323232323232|-1Pc4l.Q eUol.Q 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 3ao0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 zQl0|73e4","Asia/Rangoon|LMT RMT +0630 +09|-6o.L -6o.L -6u -90|01232|-3D8So.L 1BnA0 SmnS.L 7j9u|48e5","Asia/Sakhalin|LMT +09 +11 +12 +10|-9u.M -90 -b0 -c0 -a0|01232323232323232323232423232323232424242424242424242424242424242|-2AGVu.M 1BoMu.M 1qFa0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 2pB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|58e4","Asia/Samarkand|LMT +04 +05 +06|-4r.R -40 -50 -60|01232323232323232323232|-1Pc4r.R eUor.R 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0|36e4","Asia/Seoul|LMT KST JST KST KDT KDT|-8r.Q -8u -90 -90 -a0 -9u|012343434343151515151515134343|-2um8r.Q 97XV.Q 1m1zu 6CM0 Fz0 1kN0 14n0 1kN0 14L0 1zd0 On0 69B0 2I0u OL0 1FB0 Rb0 1qN0 TX0 1tB0 TX0 1tB0 TX0 1tB0 TX0 2ap0 12FBu 11A0 1o00 11A0|23e6","Asia/Srednekolymsk|LMT +10 +11 +12|-ae.Q -a0 -b0 -c0|01232323232323232323232123232323232323232323232323232323232323232|-1Pcae.Q eUoe.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|35e2","Asia/Taipei|LMT CST JST CDT|-86 -80 -90 -90|012131313131313131313131313131313131313131|-30bk6 1FDc6 joM0 1yo0 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 10N0 1BX0 10p0 1pz0 10p0 1pz0 10p0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1BB0 ML0 1Bd0 ML0 uq10 1db0 1cN0 1db0 97B0 AL0|74e5","Asia/Tashkent|LMT +05 +06 +07|-4B.b -50 -60 -70|012323232323232323232321|-1Pc4B.b eUnB.b 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0|23e5","Asia/Tbilisi|LMT TBMT +03 +04 +05|-2X.b -2X.b -30 -40 -50|01234343434343434343434323232343434343434343434323|-3D8OX.b 1LUM0 1jUnX.b WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cK0 1cL0 1cN0 1cL0 1cN0 2pz0 1cL0 1fB0 3Nz0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 An0 Os0 WM0|11e5","Asia/Tehran|LMT TMT +0330 +0430 +04 +05|-3p.I -3p.I -3u -4u -40 -50|012345423232323232323232323232323232323232323232323232323232323232323232|-2btDp.I Llc0 1FHaT.I 1pc0 120u Rc0 XA0 Wou JX0 1dB0 1en0 pNB0 UL0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 64p0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0|14e6","Asia/Thimphu|LMT +0530 +06|-5W.A -5u -60|012|-Su5W.A 1BGMs.A|79e3","Asia/Tokyo|LMT JST JDT|-9i.X -90 -a0|0121212121|-3jE90 2qSo0 Rc0 1lc0 14o0 1zc0 Oo0 1zc0 Oo0|38e6","Asia/Tomsk|LMT +06 +07 +08|-5D.P -60 -70 -80|0123232323232323232323212323232323232323232323212121212121212121212|-21NhD.P pxzD.P 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 co0 1bB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Qp0|10e5","Asia/Ulaanbaatar|LMT +07 +08 +09|-77.w -70 -80 -90|012323232323232323232323232323232323232323232323232|-2APH7.w 2Uko7.w cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|12e5","Asia/Ust-Nera|LMT +08 +09 +12 +11 +10|-9w.S -80 -90 -c0 -b0 -a0|012343434343434343434345434343434343434343434343434343434343434345|-21Q9w.S pApw.S 23CL0 1d90 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|65e2","Asia/Vladivostok|LMT +09 +10 +11|-8L.v -90 -a0 -b0|01232323232323232323232123232323232323232323232323232323232323232|-1SJIL.v itXL.v 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4","Asia/Yakutsk|LMT +08 +09 +10|-8C.W -80 -90 -a0|01232323232323232323232123232323232323232323232323232323232323232|-21Q8C.W pAoC.W 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|28e4","Asia/Yekaterinburg|LMT PMT +04 +05 +06|-42.x -3J.5 -40 -50 -60|012343434343434343434343234343434343434343434343434343434343434343|-2ag42.x 7mQh.s qBvJ.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|14e5","Asia/Yerevan|LMT +03 +04 +05|-2W -30 -40 -50|0123232323232323232323212121212323232323232323232323232323232|-1Pc2W 1jUnW WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 4RX0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|13e5","Atlantic/Azores|LMT HMT -02 -01 +00 WET|1G.E 1S.w 20 10 0 0|01232323232323232323232323232323232323232323234323432343234323232323232323232323232323232323232323232343434343434343434343434343434345434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3tomh.k 18aoh.k aPX0 Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 qIl0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|25e4","Atlantic/Bermuda|LMT BMT BST AST ADT|4j.i 4j.i 3j.i 40 30|0121213434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3eLvE.G 16mo0 1bb0 1i10 11X0 ru30 thbE.G 1PX0 11B0 1tz0 Rd0 1zb0 Op0 1zb0 3I10 Lz0 1EN0 FX0 1HB0 FX0 1Kp0 Db0 1Kp0 Db0 1Kp0 FX0 93d0 11z0 GAp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e3","Atlantic/Canary|LMT -01 WET WEST|11.A 10 0 -10|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UtaW.o XPAW.o 1lAK0 1a10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|54e4","Atlantic/Cape_Verde|LMT -02 -01|1y.4 20 10|01212|-2ldW0 1eEo0 7zX0 1djf0|50e4","Atlantic/Faroe|LMT WET WEST|r.4 0 -10|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2uSnw.U 2Wgow.U 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|49e3","Atlantic/Madeira|LMT FMT -01 +00 +01 WET WEST|17.A 17.A 10 0 -10 0 -10|01232323232323232323232323232323232323232323234323432343234323232323232323232323232323232323232323232565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tomQ.o 18anQ.o aPX0 Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 qIl0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e4","Atlantic/South_Georgia|LMT -02|2q.8 20|01|-3eLxx.Q|30","Atlantic/Stanley|LMT SMT -04 -03 -02|3P.o 3P.o 40 30 20|0123232323232323434323232323232323232323232323232323232323232323232323|-3eLw8.A S200 12bA8.A 19X0 1fB0 19X0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 Cn0 1Cc10 WL0 1qL0 U10 1tz0 2mN0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 U10 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qN0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 U10 1tz0 U10 1tz0 U10|21e2","Australia/Sydney|LMT AEST AEDT|-a4.Q -a0 -b0|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-32oW4.Q RlC4.Q xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|40e5","Australia/Adelaide|LMT ACST ACST ACDT|-9e.k -90 -9u -au|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-32oVe.k ak0e.k H1Bu xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 WM0 1qM0 Rc0 1zc0 U00 1tA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|11e5","Australia/Brisbane|LMT AEST AEDT|-ac.8 -a0 -b0|012121212121212121|-32Bmc.8 Ry2c.8 xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0|20e5","Australia/Broken_Hill|LMT AEST ACST ACST ACDT|-9p.M -a0 -90 -9u -au|0123434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-32oVp.M 3Lzp.M 6wp0 H1Bu xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|18e3","Australia/Hobart|LMT AEST AEDT|-9N.g -a0 -b0|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-3109N.g Pk1N.g 1a00 1qM0 Oo0 1zc0 Oo0 TAo0 yM0 1cM0 1cM0 1fA0 1a00 VfA0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|21e4","Australia/Darwin|LMT ACST ACST ACDT|-8H.k -90 -9u -au|01232323232|-32oUH.k ajXH.k H1Bu xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00|12e4","Australia/Eucla|LMT +0845 +0945|-8z.s -8J -9J|01212121212121212121|-30nIz.s PkpO.s xc0 10jc0 yM0 1cM0 1cM0 1gSo0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|368","Australia/Lord_Howe|LMT AEST +1030 +1130 +11|-aA.k -a0 -au -bu -b0|01232323232424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424|-32oWA.k 3tzAA.k 1zdu Rb0 1zd0 On0 1zd0 On0 1zd0 On0 1zd0 TXu 1qMu WLu 1tAu WLu 1tAu TXu 1tAu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 11Au 1nXu 1qMu 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu 11zu 1o0u WLu 1qMu 14nu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu|347","Australia/Lindeman|LMT AEST AEDT|-9T.U -a0 -b0|0121212121212121212121|-32BlT.U Ry1T.U xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0|10","Australia/Melbourne|LMT AEST AEDT|-9D.Q -a0 -b0|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-32oVD.Q RlBD.Q xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1qM0 11A0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|39e5","Australia/Perth|LMT AWST AWDT|-7H.o -80 -90|01212121212121212121|-30nHH.o PkpH.o xc0 10jc0 yM0 1cM0 1cM0 1gSo0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|18e5","CET|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|","Pacific/Easter|LMT EMT -07 -06 -05|7h.s 7h.s 70 60 50|0123232323232323232323232323234343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLsG.w 1HRc0 1s4IG.w WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 2pA0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0|30e2","CST6CDT|CST CDT CWT CPT|60 50 50 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","EET|EET EEST|-20 -30|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|","Europe/Dublin|LMT DMT IST GMT BST IST|p.l p.l -y.D 0 -10 -10|012343434343435353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353|-3BHby.D 1ra20 Rc0 1fzy.D 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 g600 14o0 1wo0 17c0 1io0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5","EST|EST|50|0||","EST5EDT|EST EDT EWT EPT|50 40 40 40|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261t0 1nX0 11B0 1nX0 SgN0 8x40 iv0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","Etc/GMT-0|GMT|0|0||","Etc/GMT-1|+01|-10|0||","Etc/GMT-10|+10|-a0|0||","Etc/GMT-11|+11|-b0|0||","Etc/GMT-12|+12|-c0|0||","Etc/GMT-13|+13|-d0|0||","Etc/GMT-14|+14|-e0|0||","Etc/GMT-2|+02|-20|0||","Etc/GMT-3|+03|-30|0||","Etc/GMT-4|+04|-40|0||","Etc/GMT-5|+05|-50|0||","Etc/GMT-6|+06|-60|0||","Etc/GMT-7|+07|-70|0||","Etc/GMT-8|+08|-80|0||","Etc/GMT-9|+09|-90|0||","Etc/GMT+1|-01|10|0||","Etc/GMT+10|-10|a0|0||","Etc/GMT+11|-11|b0|0||","Etc/GMT+12|-12|c0|0||","Etc/GMT+2|-02|20|0||","Etc/GMT+3|-03|30|0||","Etc/GMT+4|-04|40|0||","Etc/GMT+5|-05|50|0||","Etc/GMT+6|-06|60|0||","Etc/GMT+7|-07|70|0||","Etc/GMT+8|-08|80|0||","Etc/GMT+9|-09|90|0||","Etc/UTC|UTC|0|0||","Europe/Brussels|LMT BMT WET CET CEST WEST|-h.u -h.u 0 -10 -20 -10|012343434325252525252525252525252525252525252525252525434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3D8Mh.u u1Ah.u SO00 3zX0 11c0 1iO0 11A0 1o00 11A0 my0 Ic0 1qM0 Rc0 1EM0 UM0 1u00 10o0 1io0 1io0 17c0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a30 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 y00 5Wn0 WM0 1fA0 1cM0 16M0 1iM0 16M0 1C00 Uo0 1eeo0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|21e5","Europe/Andorra|LMT WET CET CEST|-6.4 0 -10 -20|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2M0M6.4 1Pnc6.4 1xIN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|79e3","Europe/Astrakhan|LMT +03 +04 +05|-3c.c -30 -40 -50|012323232323232323212121212121212121212121212121212121212121212|-1Pcrc.c eUMc.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|10e5","Europe/Athens|LMT AMT EET EEST CEST CET|-1y.Q -1y.Q -20 -30 -20 -10|0123234545232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-30SNy.Q OMM1 CNbx.Q mn0 kU10 9b0 3Es0 Xa0 1fb0 1dd0 k3X0 Nz0 SCp0 1vc0 SO0 1cM0 1a00 1ao0 1fc0 1a10 1fG0 1cg0 1dX0 1bX0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|35e5","Europe/London|LMT GMT BST BDST|1.f 0 -10 -20|01212121212121212121212121212121212121212121212121232323232321212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-4VgnW.J 2KHdW.J Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|10e6","Europe/Belgrade|LMT CET CEST|-1m -10 -20|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3topm 2juLm 3IP0 WM0 1fA0 1cM0 1cM0 1rc0 Qo0 1vmo0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5","Europe/Prague|LMT PMT CET CEST GMT|-V.I -V.I -10 -20 0|0123232323232323232423232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-4QbAV.I 1FDc0 XPaV.I 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 1cM0 1qM0 11c0 mp0 xA0 mn0 17c0 1io0 17c0 1fc0 1ao0 1bNc0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|13e5","Europe/Bucharest|LMT BMT EET EEST|-1I.o -1I.o -20 -30|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3awpI.o 1AU00 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Axc0 On0 1fA0 1a10 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|19e5","Europe/Budapest|LMT CET CEST|-1g.k -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3cK1g.k 124Lg.k 11d0 1iO0 11A0 1o00 11A0 1oo0 11c0 1lc0 17c0 O1V0 3Nf0 WM0 1fA0 1cM0 1cM0 1oJ0 1dd0 1020 1fX0 1cp0 1cM0 1cM0 1cM0 1fA0 1a00 bhy0 Rb0 1wr0 Rc0 1C00 LA0 1C00 LA0 SNW0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cO0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|17e5","Europe/Zurich|LMT BMT CET CEST|-y.8 -t.K -10 -20|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-4HyMy.8 1Dw04.m 1SfAt.K 11A0 1o00 11A0 1xG10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|38e4","Europe/Chisinau|LMT CMT BMT EET EEST CEST CET MSK MSD|-1T.k -1T -1I.o -20 -30 -20 -10 -30 -40|0123434343434343434345656578787878787878787878434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3D8NT.k 1wNA0.k wGMa.A 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 27A0 2en0 39g0 WM0 1fA0 1cM0 V90 1t7z0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 gL0 WO0 1cM0 1cM0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11D0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|67e4","Europe/Gibraltar|LMT GMT BST BDST CET CEST|l.o 0 -10 -20 -10 -20|0121212121212121212121212121212121212121212121212123232323232121232121212121212121212145454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-3BHbC.A 1ra1C.A Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 10Jz0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|30e3","Europe/Helsinki|LMT HMT EET EEST|-1D.N -1D.N -20 -30|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3H0ND.N 1Iu00 OULD.N 1dA0 1xGq0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5","Europe/Kaliningrad|LMT CET CEST EET EEST MSK MSD +03|-1m -10 -20 -20 -30 -30 -40 -30|012121212121212343565656565656565654343434343434343434343434343434343434343434373|-36Rdm UbXm 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 390 7A0 1en0 12N0 1pbb0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|44e4","Europe/Kiev|LMT KMT EET MSK CEST CET MSD EEST|-22.4 -22.4 -20 -30 -20 -10 -40 -30|01234545363636363636363636367272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272|-3D8O2.4 1LUM0 eUo2.4 rnz0 2Hg0 WM0 1fA0 da0 1v4m0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 Db0 3220 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o10 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|34e5","Europe/Kirov|LMT +03 +04 +05 MSD MSK MSK|-3i.M -30 -40 -50 -40 -30 -40|0123232323232323232454524545454545454545454545454545454545454565|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 2pz0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|48e4","Europe/Lisbon|LMT WET WEST WEMT CET CEST|A.J 0 -10 -20 -10 -20|01212121212121212121212121212121212121212121232123212321232121212121212121212121212121212121212121214121212121212121212121212121212124545454212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2le00 aPX0 Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 pvy0 1cM0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5","Europe/Madrid|LMT WET WEST WEMT CET CEST|e.I 0 -10 -20 -10 -20|0121212121212121212321454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2M0M0 G5z0 19B0 1cL0 1dd0 b1z0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1in0 17d0 iIn0 Hd0 1cL0 bb0 1200 2s20 14n0 5aL0 Mp0 1vz0 17d0 1in0 17d0 1in0 17d0 1in0 17d0 6hX0 11B0 XHX0 1a10 1fz0 1a10 19X0 1cN0 1fz0 1a10 1fC0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|62e5","Europe/Malta|LMT CET CEST|-W.4 -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-35rcW.4 SXzW.4 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1co0 17c0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1co0 1cM0 1lA0 Xc0 1qq0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1iN0 19z0 1fB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|42e4","Europe/Minsk|LMT MMT EET MSK CEST CET MSD EEST +03|-1O.g -1O -20 -30 -20 -10 -40 -30 -30|012345454363636363636363636372727272727272727272727272727272727272728|-3D8NO.g 1LUM0.g eUnO qNX0 3gQ0 WM0 1fA0 1cM0 Al0 1tsn0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 3Fc0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0|19e5","Europe/Paris|LMT PMT WET WEST CEST CET WEMT|-9.l -9.l 0 -10 -20 -10 -20|01232323232323232323232323232323232323232323232323234545463654545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-3bQ09.l MDA0 cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 1u00 10o0 1io0 1wo0 Rc0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Df0 Ik0 5M30 WM0 1fA0 1cM0 Vx0 hB0 1aq0 16M0 1ekn0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|11e6","Europe/Moscow|LMT MMT MMT MST MDST MSD MSK +05 EET EEST MSK|-2u.h -2u.h -2v.j -3v.j -4v.j -40 -30 -50 -20 -30 -40|01232434565756865656565656565656565698656565656565656565656565656565656565656a6|-3D8Ou.h 1sQM0 2pyW.W 1bA0 11X0 GN0 1Hb0 c4v.j ik0 3DA0 dz0 15A0 c10 2q10 iM10 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|16e6","Europe/Riga|LMT RMT LST EET MSK CEST CET MSD EEST|-1A.y -1A.y -2A.y -20 -30 -20 -10 -40 -30|0121213456565647474747474747474838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383|-3D8NA.y 1xde0 11A0 1iM0 ko0 gWm0 yDXA.y 2bX0 3fE0 WM0 1fA0 1cM0 1cM0 4m0 1sLy0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 1o00 11A0 1o00 11A0 1qM0 3oo0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|64e4","Europe/Rome|LMT RMT CET CEST|-N.U -N.U -10 -20|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-4aU0N.U 15snN.U T000 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1cM0 16M0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1C00 LA0 1zc0 Oo0 1C00 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1zc0 Oo0 1fC0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|39e5","Europe/Samara|LMT +03 +04 +05|-3k.k -30 -40 -50|0123232323232323232121232323232323232323232323232323232323212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2y10 14m0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|12e5","Europe/Saratov|LMT +03 +04 +05|-34.i -30 -40 -50|012323232323232321212121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1cM0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 5810|","Europe/Simferopol|LMT SMT EET MSK CEST CET MSD EEST MSK|-2g.o -2g -20 -30 -20 -10 -40 -30 -40|0123454543636363636363636363272727636363727272727272727272727272727272727283|-3D8Og.o 1LUM0.o eUog rEn0 2qs0 WM0 1fA0 1cM0 3V0 1u0L0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 4eN0 1cM0 1cM0 1cM0 1cM0 dV0 WO0 1cM0 1cM0 1fy0 1o30 11B0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11z0 1nW0|33e4","Europe/Sofia|LMT IMT EET CET CEST EEST|-1x.g -1U.U -20 -10 -20 -30|0123434325252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-3D8Nx.g AiLA.k 1UFeU.U WM0 1fA0 1cM0 1cM0 1cN0 1mKH0 1dd0 1fb0 1ap0 1fb0 1a20 1fy0 1a30 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5","Europe/Tallinn|LMT TMT CET CEST EET MSK MSD EEST|-1D -1D -10 -20 -20 -30 -40 -30|0123214532323565656565656565657474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474|-3D8ND 1wI00 teD 11A0 1Ta0 4rXl KSLD 2FX0 2Jg0 WM0 1fA0 1cM0 18J0 1sTX0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o10 11A0 1qM0 5QM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|41e4","Europe/Tirane|LMT CET CEST|-1j.k -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glBj.k 14pcj.k 5LC0 WM0 4M0 1fCK0 10n0 1op0 11z0 1pd0 11z0 1qN0 WL0 1qp0 Xb0 1qp0 Xb0 1qp0 11z0 1lB0 11z0 1qN0 11z0 1iN0 16n0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|42e4","Europe/Ulyanovsk|LMT +03 +04 +05 +02|-3d.A -30 -40 -50 -20|01232323232323232321214121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|13e5","Europe/Vienna|LMT CET CEST|-15.l -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-36Rd5.l UbX5.l 11d0 1iO0 11A0 1o00 11A0 3KM0 14o0 LA00 6i00 WM0 1fA0 1cM0 1cM0 1cM0 400 2qM0 1ao0 1co0 1cM0 1io0 17c0 1gHa0 19X0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|18e5","Europe/Vilnius|LMT WMT KMT CET EET MSK CEST MSD EEST|-1F.g -1o -1z.A -10 -20 -30 -20 -40 -30|0123435636365757575757575757584848484848484848463648484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484|-3D8NF.g 1u5Ah.g 6ILM.o 1Ooz.A zz0 Mfd0 29W0 3is0 WM0 1fA0 1cM0 LV0 1tgL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11B0 1o00 11A0 1qM0 8io0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|54e4","Europe/Volgograd|LMT +03 +04 +05 MSD MSK MSK|-2V.E -30 -40 -50 -40 -30 -40|012323232323232324545452454545454545454545454545454545454545456525|-21IqV.E psLV.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1fA0 1cM0 2pz0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 9Jd0 5gn0|10e5","Europe/Warsaw|LMT WMT CET CEST EET EEST|-1o -1o -10 -20 -20 -30|0123232345423232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3D8No 1qDA0 1LXo 11d0 1iO0 11A0 1o00 11A0 1on0 11A0 6zy0 HWP0 5IM0 WM0 1fA0 1cM0 1dz0 1mL0 1en0 15B0 1aq0 1nA0 11A0 1io0 17c0 1fA0 1a00 iDX0 LA0 1cM0 1cM0 1C00 Oo0 1cM0 1cM0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1C00 LA0 uso0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|17e5","HST|HST|a0|0||","Indian/Chagos|LMT +05 +06|-4N.E -50 -60|012|-2xosN.E 3AGLN.E|30e2","Indian/Maldives|LMT MMT +05|-4S -4S -50|012|-3D8QS 3eLA0|35e4","Indian/Mauritius|LMT +04 +05|-3O -40 -50|012121|-2xorO 34unO 14L0 12kr0 11z0|15e4","Pacific/Kwajalein|LMT +11 +10 +09 -12 +12|-b9.k -b0 -a0 -90 c0 -c0|0123145|-2M0X9.k 1rDA9.k akp0 6Up0 12ry0 Wan0|14e3","MET|MET MEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|","MST|MST|70|0||","MST7MDT|MST MDT MWT MPT|70 60 60 60|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","Pacific/Chatham|LMT +1215 +1245 +1345|-cd.M -cf -cJ -dJ|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-46jMd.M 37RbW.M 1adef IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00|600","Pacific/Apia|LMT LMT -1130 -11 -10 +14 +13|-cx.4 bq.U bu b0 a0 -e0 -d0|012343456565656565656565656|-38Fox.4 J1A0 1yW03.4 2rRbu 1ff0 1a00 CI0 AQ0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0|37e3","Pacific/Bougainville|LMT PMMT +10 +09 +11|-am.g -9M.w -a0 -90 -b0|012324|-3D8Wm.g AvAx.I 1TCLM.w 7CN0 2MQp0|18e4","Pacific/Efate|LMT +11 +12|-bd.g -b0 -c0|012121212121212121212121|-2l9nd.g 2uNXd.g Dc0 n610 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 Lz0 1Nd0 An0|66e3","Pacific/Enderbury|-00 -12 -11 +13|0 c0 b0 -d0|0123|-1iIo0 1GsA0 B7X0|1","Pacific/Fakaofo|LMT -11 +13|bo.U b0 -d0|012|-2M0Az.4 4ufXz.4|483","Pacific/Fiji|LMT +12 +13|-bT.I -c0 -d0|012121212121212121212121212121|-2bUzT.I 3m8NT.I LA0 1EM0 IM0 nJc0 LA0 1o00 Rc0 1wo0 Ao0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 20o0 pc0 2hc0 bc0|88e4","Pacific/Tarawa|LMT +12|-bw.4 -c0|01|-2M0Xw.4|29e3","Pacific/Galapagos|LMT -05 -06|5W.o 50 60|01212|-1yVS1.A 2dTz1.A gNd0 rz0|25e3","Pacific/Gambier|LMT -09|8X.M 90|01|-2jof0.c|125","Pacific/Guadalcanal|LMT +11|-aD.M -b0|01|-2joyD.M|11e4","Pacific/Guam|LMT LMT GST +09 GDT ChST|el -9D -a0 -90 -b0 -a0|0123242424242424242425|-54m9D 2glc0 1DFbD 6pB0 AhB0 3QL0 g2p0 3p91 WOX rX0 1zd0 Rb0 1wp0 Rb0 5xd0 rX0 5sN0 zb1 1C0X On0 ULb0|17e4","Pacific/Honolulu|LMT HST HDT HWT HPT HST|av.q au 9u 9u 9u a0|01213415|-3061s.y 1uMdW.y 8x0 lef0 8wWu iAu 46p0|37e4","Pacific/Kiritimati|LMT -1040 -10 +14|at.k aE a0 -e0|0123|-2M0Bu.E 3bIMa.E B7Xk|51e2","Pacific/Kosrae|LMT LMT +11 +09 +10 +12|d8.4 -aP.U -b0 -90 -a0 -c0|0123243252|-54maP.U 2glc0 xsnP.U axC0 HBy0 akp0 axd0 WOK0 1bdz0|66e2","Pacific/Marquesas|LMT -0930|9i 9u|01|-2joeG|86e2","Pacific/Pago_Pago|LMT LMT SST|-cB.c bm.M b0|012|-38FoB.c J1A0|37e2","Pacific/Nauru|LMT +1130 +09 +12|-b7.E -bu -90 -c0|01213|-1Xdn7.E QCnB.E 7mqu 1lnbu|10e3","Pacific/Niue|LMT -1120 -11|bj.E bk b0|012|-FScE.k suo0.k|12e2","Pacific/Norfolk|LMT +1112 +1130 +1230 +11 +12|-bb.Q -bc -bu -cu -b0 -c0|0123245454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-2M0Xb.Q 21ILX.Q W01G Oo0 1COo0 9Jcu 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|25e4","Pacific/Noumea|LMT +11 +12|-b5.M -b0 -c0|01212121|-2l9n5.M 2EqM5.M xX0 1PB0 yn0 HeP0 Ao0|98e3","Pacific/Palau|LMT LMT +09|f2.4 -8V.U -90|012|-54m8V.U 2glc0|21e3","Pacific/Pitcairn|LMT -0830 -08|8E.k 8u 80|012|-2M0Dj.E 3UVXN.E|56","Pacific/Rarotonga|LMT LMT -1030 -0930 -10|-dk.U aD.4 au 9u a0|01234343434343434343434343434|-2Otpk.U 28zc0 13tbO.U IL0 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu|13e3","Pacific/Tahiti|LMT -10|9W.g a0|01|-2joe1.I|18e4","Pacific/Tongatapu|LMT +1220 +13 +14|-cj.c -ck -d0 -e0|01232323232|-XbMj.c BgLX.c 1yndk 15A0 1wo0 xz0 1Q10 xz0 zWN0 s00|75e3","PST8PDT|PST PDT PWT PPT|80 70 70 70|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261q0 1nX0 11B0 1nX0 SgN0 8x10 iy0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","WET|WET WEST|0 -10|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|"],links:["Africa/Abidjan|Africa/Accra","Africa/Abidjan|Africa/Bamako","Africa/Abidjan|Africa/Banjul","Africa/Abidjan|Africa/Conakry","Africa/Abidjan|Africa/Dakar","Africa/Abidjan|Africa/Freetown","Africa/Abidjan|Africa/Lome","Africa/Abidjan|Africa/Nouakchott","Africa/Abidjan|Africa/Ouagadougou","Africa/Abidjan|Africa/Timbuktu","Africa/Abidjan|Atlantic/Reykjavik","Africa/Abidjan|Atlantic/St_Helena","Africa/Abidjan|Iceland","Africa/Cairo|Egypt","Africa/Johannesburg|Africa/Maseru","Africa/Johannesburg|Africa/Mbabane","Africa/Lagos|Africa/Bangui","Africa/Lagos|Africa/Brazzaville","Africa/Lagos|Africa/Douala","Africa/Lagos|Africa/Kinshasa","Africa/Lagos|Africa/Libreville","Africa/Lagos|Africa/Luanda","Africa/Lagos|Africa/Malabo","Africa/Lagos|Africa/Niamey","Africa/Lagos|Africa/Porto-Novo","Africa/Maputo|Africa/Blantyre","Africa/Maputo|Africa/Bujumbura","Africa/Maputo|Africa/Gaborone","Africa/Maputo|Africa/Harare","Africa/Maputo|Africa/Kigali","Africa/Maputo|Africa/Lubumbashi","Africa/Maputo|Africa/Lusaka","Africa/Nairobi|Africa/Addis_Ababa","Africa/Nairobi|Africa/Asmara","Africa/Nairobi|Africa/Asmera","Africa/Nairobi|Africa/Dar_es_Salaam","Africa/Nairobi|Africa/Djibouti","Africa/Nairobi|Africa/Kampala","Africa/Nairobi|Africa/Mogadishu","Africa/Nairobi|Indian/Antananarivo","Africa/Nairobi|Indian/Comoro","Africa/Nairobi|Indian/Mayotte","Africa/Tripoli|Libya","America/Adak|America/Atka","America/Adak|US/Aleutian","America/Anchorage|US/Alaska","America/Argentina/Buenos_Aires|America/Buenos_Aires","America/Argentina/Catamarca|America/Argentina/ComodRivadavia","America/Argentina/Catamarca|America/Catamarca","America/Argentina/Cordoba|America/Cordoba","America/Argentina/Cordoba|America/Rosario","America/Argentina/Jujuy|America/Jujuy","America/Argentina/Mendoza|America/Mendoza","America/Chicago|US/Central","America/Denver|America/Shiprock","America/Denver|Navajo","America/Denver|US/Mountain","America/Detroit|US/Michigan","America/Edmonton|America/Yellowknife","America/Edmonton|Canada/Mountain","America/Fort_Wayne|America/Indiana/Indianapolis","America/Fort_Wayne|America/Indianapolis","America/Fort_Wayne|US/East-Indiana","America/Godthab|America/Nuuk","America/Halifax|Canada/Atlantic","America/Havana|Cuba","America/Indiana/Knox|America/Knox_IN","America/Indiana/Knox|US/Indiana-Starke","America/Iqaluit|America/Pangnirtung","America/Jamaica|Jamaica","America/Kentucky/Louisville|America/Louisville","America/Los_Angeles|US/Pacific","America/Manaus|Brazil/West","America/Mazatlan|Mexico/BajaSur","America/Mexico_City|Mexico/General","America/New_York|US/Eastern","America/Noronha|Brazil/DeNoronha","America/Panama|America/Atikokan","America/Panama|America/Cayman","America/Panama|America/Coral_Harbour","America/Phoenix|America/Creston","America/Phoenix|US/Arizona","America/Puerto_Rico|America/Anguilla","America/Puerto_Rico|America/Antigua","America/Puerto_Rico|America/Aruba","America/Puerto_Rico|America/Blanc-Sablon","America/Puerto_Rico|America/Curacao","America/Puerto_Rico|America/Dominica","America/Puerto_Rico|America/Grenada","America/Puerto_Rico|America/Guadeloupe","America/Puerto_Rico|America/Kralendijk","America/Puerto_Rico|America/Lower_Princes","America/Puerto_Rico|America/Marigot","America/Puerto_Rico|America/Montserrat","America/Puerto_Rico|America/Port_of_Spain","America/Puerto_Rico|America/St_Barthelemy","America/Puerto_Rico|America/St_Kitts","America/Puerto_Rico|America/St_Lucia","America/Puerto_Rico|America/St_Thomas","America/Puerto_Rico|America/St_Vincent","America/Puerto_Rico|America/Tortola","America/Puerto_Rico|America/Virgin","America/Regina|Canada/Saskatchewan","America/Rio_Branco|America/Porto_Acre","America/Rio_Branco|Brazil/Acre","America/Santiago|Chile/Continental","America/Sao_Paulo|Brazil/East","America/St_Johns|Canada/Newfoundland","America/Tijuana|America/Ensenada","America/Tijuana|America/Santa_Isabel","America/Tijuana|Mexico/BajaNorte","America/Toronto|America/Montreal","America/Toronto|America/Nassau","America/Toronto|America/Nipigon","America/Toronto|America/Thunder_Bay","America/Toronto|Canada/Eastern","America/Vancouver|Canada/Pacific","America/Whitehorse|Canada/Yukon","America/Winnipeg|America/Rainy_River","America/Winnipeg|Canada/Central","Asia/Ashgabat|Asia/Ashkhabad","Asia/Bangkok|Asia/Phnom_Penh","Asia/Bangkok|Asia/Vientiane","Asia/Bangkok|Indian/Christmas","Asia/Brunei|Asia/Kuching","Asia/Dhaka|Asia/Dacca","Asia/Dubai|Asia/Muscat","Asia/Dubai|Indian/Mahe","Asia/Dubai|Indian/Reunion","Asia/Ho_Chi_Minh|Asia/Saigon","Asia/Hong_Kong|Hongkong","Asia/Jerusalem|Asia/Tel_Aviv","Asia/Jerusalem|Israel","Asia/Kathmandu|Asia/Katmandu","Asia/Kolkata|Asia/Calcutta","Asia/Kuala_Lumpur|Asia/Singapore","Asia/Kuala_Lumpur|Singapore","Asia/Macau|Asia/Macao","Asia/Makassar|Asia/Ujung_Pandang","Asia/Nicosia|Europe/Nicosia","Asia/Qatar|Asia/Bahrain","Asia/Rangoon|Asia/Yangon","Asia/Rangoon|Indian/Cocos","Asia/Riyadh|Antarctica/Syowa","Asia/Riyadh|Asia/Aden","Asia/Riyadh|Asia/Kuwait","Asia/Seoul|ROK","Asia/Shanghai|Asia/Chongqing","Asia/Shanghai|Asia/Chungking","Asia/Shanghai|Asia/Harbin","Asia/Shanghai|PRC","Asia/Taipei|ROC","Asia/Tehran|Iran","Asia/Thimphu|Asia/Thimbu","Asia/Tokyo|Japan","Asia/Ulaanbaatar|Asia/Ulan_Bator","Asia/Urumqi|Antarctica/Vostok","Asia/Urumqi|Asia/Kashgar","Atlantic/Faroe|Atlantic/Faeroe","Australia/Adelaide|Australia/South","Australia/Brisbane|Australia/Queensland","Australia/Broken_Hill|Australia/Yancowinna","Australia/Darwin|Australia/North","Australia/Hobart|Australia/Currie","Australia/Hobart|Australia/Tasmania","Australia/Lord_Howe|Australia/LHI","Australia/Melbourne|Australia/Victoria","Australia/Perth|Australia/West","Australia/Sydney|Australia/ACT","Australia/Sydney|Australia/Canberra","Australia/Sydney|Australia/NSW","Etc/GMT-0|Etc/GMT","Etc/GMT-0|Etc/GMT+0","Etc/GMT-0|Etc/GMT0","Etc/GMT-0|Etc/Greenwich","Etc/GMT-0|GMT","Etc/GMT-0|GMT+0","Etc/GMT-0|GMT-0","Etc/GMT-0|GMT0","Etc/GMT-0|Greenwich","Etc/UTC|Etc/UCT","Etc/UTC|Etc/Universal","Etc/UTC|Etc/Zulu","Etc/UTC|UCT","Etc/UTC|UTC","Etc/UTC|Universal","Etc/UTC|Zulu","Europe/Belgrade|Europe/Ljubljana","Europe/Belgrade|Europe/Podgorica","Europe/Belgrade|Europe/Sarajevo","Europe/Belgrade|Europe/Skopje","Europe/Belgrade|Europe/Zagreb","Europe/Berlin|Arctic/Longyearbyen","Europe/Berlin|Atlantic/Jan_Mayen","Europe/Berlin|Europe/Copenhagen","Europe/Berlin|Europe/Oslo","Europe/Berlin|Europe/Stockholm","Europe/Brussels|Europe/Amsterdam","Europe/Brussels|Europe/Luxembourg","Europe/Chisinau|Europe/Tiraspol","Europe/Dublin|Eire","Europe/Helsinki|Europe/Mariehamn","Europe/Istanbul|Asia/Istanbul","Europe/Istanbul|Turkey","Europe/Kiev|Europe/Kyiv","Europe/Kiev|Europe/Uzhgorod","Europe/Kiev|Europe/Zaporozhye","Europe/Lisbon|Portugal","Europe/London|Europe/Belfast","Europe/London|Europe/Guernsey","Europe/London|Europe/Isle_of_Man","Europe/London|Europe/Jersey","Europe/London|GB","Europe/London|GB-Eire","Europe/Moscow|W-SU","Europe/Paris|Europe/Monaco","Europe/Prague|Europe/Bratislava","Europe/Rome|Europe/San_Marino","Europe/Rome|Europe/Vatican","Europe/Warsaw|Poland","Europe/Zurich|Europe/Busingen","Europe/Zurich|Europe/Vaduz","Indian/Maldives|Indian/Kerguelen","Pacific/Auckland|Antarctica/McMurdo","Pacific/Auckland|Antarctica/South_Pole","Pacific/Auckland|NZ","Pacific/Chatham|NZ-CHAT","Pacific/Easter|Chile/EasterIsland","Pacific/Enderbury|Pacific/Kanton","Pacific/Guadalcanal|Pacific/Pohnpei","Pacific/Guadalcanal|Pacific/Ponape","Pacific/Guam|Pacific/Saipan","Pacific/Honolulu|Pacific/Johnston","Pacific/Honolulu|US/Hawaii","Pacific/Kwajalein|Kwajalein","Pacific/Pago_Pago|Pacific/Midway","Pacific/Pago_Pago|Pacific/Samoa","Pacific/Pago_Pago|US/Samoa","Pacific/Port_Moresby|Antarctica/DumontDUrville","Pacific/Port_Moresby|Pacific/Chuuk","Pacific/Port_Moresby|Pacific/Truk","Pacific/Port_Moresby|Pacific/Yap","Pacific/Tarawa|Pacific/Funafuti","Pacific/Tarawa|Pacific/Majuro","Pacific/Tarawa|Pacific/Wake","Pacific/Tarawa|Pacific/Wallis"],countries:["AD|Europe/Andorra","AE|Asia/Dubai","AF|Asia/Kabul","AG|America/Puerto_Rico America/Antigua","AI|America/Puerto_Rico America/Anguilla","AL|Europe/Tirane","AM|Asia/Yerevan","AO|Africa/Lagos Africa/Luanda","AQ|Antarctica/Casey Antarctica/Davis Antarctica/Mawson Antarctica/Palmer Antarctica/Rothera Antarctica/Troll Asia/Urumqi Pacific/Auckland Pacific/Port_Moresby Asia/Riyadh Antarctica/McMurdo Antarctica/DumontDUrville Antarctica/Syowa Antarctica/Vostok","AR|America/Argentina/Buenos_Aires America/Argentina/Cordoba America/Argentina/Salta America/Argentina/Jujuy America/Argentina/Tucuman America/Argentina/Catamarca America/Argentina/La_Rioja America/Argentina/San_Juan America/Argentina/Mendoza America/Argentina/San_Luis America/Argentina/Rio_Gallegos America/Argentina/Ushuaia","AS|Pacific/Pago_Pago","AT|Europe/Vienna","AU|Australia/Lord_Howe Antarctica/Macquarie Australia/Hobart Australia/Melbourne Australia/Sydney Australia/Broken_Hill Australia/Brisbane Australia/Lindeman Australia/Adelaide Australia/Darwin Australia/Perth Australia/Eucla","AW|America/Puerto_Rico America/Aruba","AX|Europe/Helsinki Europe/Mariehamn","AZ|Asia/Baku","BA|Europe/Belgrade Europe/Sarajevo","BB|America/Barbados","BD|Asia/Dhaka","BE|Europe/Brussels","BF|Africa/Abidjan Africa/Ouagadougou","BG|Europe/Sofia","BH|Asia/Qatar Asia/Bahrain","BI|Africa/Maputo Africa/Bujumbura","BJ|Africa/Lagos Africa/Porto-Novo","BL|America/Puerto_Rico America/St_Barthelemy","BM|Atlantic/Bermuda","BN|Asia/Kuching Asia/Brunei","BO|America/La_Paz","BQ|America/Puerto_Rico America/Kralendijk","BR|America/Noronha America/Belem America/Fortaleza America/Recife America/Araguaina America/Maceio America/Bahia America/Sao_Paulo America/Campo_Grande America/Cuiaba America/Santarem America/Porto_Velho America/Boa_Vista America/Manaus America/Eirunepe America/Rio_Branco","BS|America/Toronto America/Nassau","BT|Asia/Thimphu","BW|Africa/Maputo Africa/Gaborone","BY|Europe/Minsk","BZ|America/Belize","CA|America/St_Johns America/Halifax America/Glace_Bay America/Moncton America/Goose_Bay America/Toronto America/Iqaluit America/Winnipeg America/Resolute America/Rankin_Inlet America/Regina America/Swift_Current America/Edmonton America/Cambridge_Bay America/Inuvik America/Dawson_Creek America/Fort_Nelson America/Whitehorse America/Dawson America/Vancouver America/Panama America/Puerto_Rico America/Phoenix America/Blanc-Sablon America/Atikokan America/Creston","CC|Asia/Yangon Indian/Cocos","CD|Africa/Maputo Africa/Lagos Africa/Kinshasa Africa/Lubumbashi","CF|Africa/Lagos Africa/Bangui","CG|Africa/Lagos Africa/Brazzaville","CH|Europe/Zurich","CI|Africa/Abidjan","CK|Pacific/Rarotonga","CL|America/Santiago America/Punta_Arenas Pacific/Easter","CM|Africa/Lagos Africa/Douala","CN|Asia/Shanghai Asia/Urumqi","CO|America/Bogota","CR|America/Costa_Rica","CU|America/Havana","CV|Atlantic/Cape_Verde","CW|America/Puerto_Rico America/Curacao","CX|Asia/Bangkok Indian/Christmas","CY|Asia/Nicosia Asia/Famagusta","CZ|Europe/Prague","DE|Europe/Zurich Europe/Berlin Europe/Busingen","DJ|Africa/Nairobi Africa/Djibouti","DK|Europe/Berlin Europe/Copenhagen","DM|America/Puerto_Rico America/Dominica","DO|America/Santo_Domingo","DZ|Africa/Algiers","EC|America/Guayaquil Pacific/Galapagos","EE|Europe/Tallinn","EG|Africa/Cairo","EH|Africa/El_Aaiun","ER|Africa/Nairobi Africa/Asmara","ES|Europe/Madrid Africa/Ceuta Atlantic/Canary","ET|Africa/Nairobi Africa/Addis_Ababa","FI|Europe/Helsinki","FJ|Pacific/Fiji","FK|Atlantic/Stanley","FM|Pacific/Kosrae Pacific/Port_Moresby Pacific/Guadalcanal Pacific/Chuuk Pacific/Pohnpei","FO|Atlantic/Faroe","FR|Europe/Paris","GA|Africa/Lagos Africa/Libreville","GB|Europe/London","GD|America/Puerto_Rico America/Grenada","GE|Asia/Tbilisi","GF|America/Cayenne","GG|Europe/London Europe/Guernsey","GH|Africa/Abidjan Africa/Accra","GI|Europe/Gibraltar","GL|America/Nuuk America/Danmarkshavn America/Scoresbysund America/Thule","GM|Africa/Abidjan Africa/Banjul","GN|Africa/Abidjan Africa/Conakry","GP|America/Puerto_Rico America/Guadeloupe","GQ|Africa/Lagos Africa/Malabo","GR|Europe/Athens","GS|Atlantic/South_Georgia","GT|America/Guatemala","GU|Pacific/Guam","GW|Africa/Bissau","GY|America/Guyana","HK|Asia/Hong_Kong","HN|America/Tegucigalpa","HR|Europe/Belgrade Europe/Zagreb","HT|America/Port-au-Prince","HU|Europe/Budapest","ID|Asia/Jakarta Asia/Pontianak Asia/Makassar Asia/Jayapura","IE|Europe/Dublin","IL|Asia/Jerusalem","IM|Europe/London Europe/Isle_of_Man","IN|Asia/Kolkata","IO|Indian/Chagos","IQ|Asia/Baghdad","IR|Asia/Tehran","IS|Africa/Abidjan Atlantic/Reykjavik","IT|Europe/Rome","JE|Europe/London Europe/Jersey","JM|America/Jamaica","JO|Asia/Amman","JP|Asia/Tokyo","KE|Africa/Nairobi","KG|Asia/Bishkek","KH|Asia/Bangkok Asia/Phnom_Penh","KI|Pacific/Tarawa Pacific/Kanton Pacific/Kiritimati","KM|Africa/Nairobi Indian/Comoro","KN|America/Puerto_Rico America/St_Kitts","KP|Asia/Pyongyang","KR|Asia/Seoul","KW|Asia/Riyadh Asia/Kuwait","KY|America/Panama America/Cayman","KZ|Asia/Almaty Asia/Qyzylorda Asia/Qostanay Asia/Aqtobe Asia/Aqtau Asia/Atyrau Asia/Oral","LA|Asia/Bangkok Asia/Vientiane","LB|Asia/Beirut","LC|America/Puerto_Rico America/St_Lucia","LI|Europe/Zurich Europe/Vaduz","LK|Asia/Colombo","LR|Africa/Monrovia","LS|Africa/Johannesburg Africa/Maseru","LT|Europe/Vilnius","LU|Europe/Brussels Europe/Luxembourg","LV|Europe/Riga","LY|Africa/Tripoli","MA|Africa/Casablanca","MC|Europe/Paris Europe/Monaco","MD|Europe/Chisinau","ME|Europe/Belgrade Europe/Podgorica","MF|America/Puerto_Rico America/Marigot","MG|Africa/Nairobi Indian/Antananarivo","MH|Pacific/Tarawa Pacific/Kwajalein Pacific/Majuro","MK|Europe/Belgrade Europe/Skopje","ML|Africa/Abidjan Africa/Bamako","MM|Asia/Yangon","MN|Asia/Ulaanbaatar Asia/Hovd Asia/Choibalsan","MO|Asia/Macau","MP|Pacific/Guam Pacific/Saipan","MQ|America/Martinique","MR|Africa/Abidjan Africa/Nouakchott","MS|America/Puerto_Rico America/Montserrat","MT|Europe/Malta","MU|Indian/Mauritius","MV|Indian/Maldives","MW|Africa/Maputo Africa/Blantyre","MX|America/Mexico_City America/Cancun America/Merida America/Monterrey America/Matamoros America/Chihuahua America/Ciudad_Juarez America/Ojinaga America/Mazatlan America/Bahia_Banderas America/Hermosillo America/Tijuana","MY|Asia/Kuching Asia/Singapore Asia/Kuala_Lumpur","MZ|Africa/Maputo","NA|Africa/Windhoek","NC|Pacific/Noumea","NE|Africa/Lagos Africa/Niamey","NF|Pacific/Norfolk","NG|Africa/Lagos","NI|America/Managua","NL|Europe/Brussels Europe/Amsterdam","NO|Europe/Berlin Europe/Oslo","NP|Asia/Kathmandu","NR|Pacific/Nauru","NU|Pacific/Niue","NZ|Pacific/Auckland Pacific/Chatham","OM|Asia/Dubai Asia/Muscat","PA|America/Panama","PE|America/Lima","PF|Pacific/Tahiti Pacific/Marquesas Pacific/Gambier","PG|Pacific/Port_Moresby Pacific/Bougainville","PH|Asia/Manila","PK|Asia/Karachi","PL|Europe/Warsaw","PM|America/Miquelon","PN|Pacific/Pitcairn","PR|America/Puerto_Rico","PS|Asia/Gaza Asia/Hebron","PT|Europe/Lisbon Atlantic/Madeira Atlantic/Azores","PW|Pacific/Palau","PY|America/Asuncion","QA|Asia/Qatar","RE|Asia/Dubai Indian/Reunion","RO|Europe/Bucharest","RS|Europe/Belgrade","RU|Europe/Kaliningrad Europe/Moscow Europe/Simferopol Europe/Kirov Europe/Volgograd Europe/Astrakhan Europe/Saratov Europe/Ulyanovsk Europe/Samara Asia/Yekaterinburg Asia/Omsk Asia/Novosibirsk Asia/Barnaul Asia/Tomsk Asia/Novokuznetsk Asia/Krasnoyarsk Asia/Irkutsk Asia/Chita Asia/Yakutsk Asia/Khandyga Asia/Vladivostok Asia/Ust-Nera Asia/Magadan Asia/Sakhalin Asia/Srednekolymsk Asia/Kamchatka Asia/Anadyr","RW|Africa/Maputo Africa/Kigali","SA|Asia/Riyadh","SB|Pacific/Guadalcanal","SC|Asia/Dubai Indian/Mahe","SD|Africa/Khartoum","SE|Europe/Berlin Europe/Stockholm","SG|Asia/Singapore","SH|Africa/Abidjan Atlantic/St_Helena","SI|Europe/Belgrade Europe/Ljubljana","SJ|Europe/Berlin Arctic/Longyearbyen","SK|Europe/Prague Europe/Bratislava","SL|Africa/Abidjan Africa/Freetown","SM|Europe/Rome Europe/San_Marino","SN|Africa/Abidjan Africa/Dakar","SO|Africa/Nairobi Africa/Mogadishu","SR|America/Paramaribo","SS|Africa/Juba","ST|Africa/Sao_Tome","SV|America/El_Salvador","SX|America/Puerto_Rico America/Lower_Princes","SY|Asia/Damascus","SZ|Africa/Johannesburg Africa/Mbabane","TC|America/Grand_Turk","TD|Africa/Ndjamena","TF|Asia/Dubai Indian/Maldives Indian/Kerguelen","TG|Africa/Abidjan Africa/Lome","TH|Asia/Bangkok","TJ|Asia/Dushanbe","TK|Pacific/Fakaofo","TL|Asia/Dili","TM|Asia/Ashgabat","TN|Africa/Tunis","TO|Pacific/Tongatapu","TR|Europe/Istanbul","TT|America/Puerto_Rico America/Port_of_Spain","TV|Pacific/Tarawa Pacific/Funafuti","TW|Asia/Taipei","TZ|Africa/Nairobi Africa/Dar_es_Salaam","UA|Europe/Simferopol Europe/Kyiv","UG|Africa/Nairobi Africa/Kampala","UM|Pacific/Pago_Pago Pacific/Tarawa Pacific/Midway Pacific/Wake","US|America/New_York America/Detroit America/Kentucky/Louisville America/Kentucky/Monticello America/Indiana/Indianapolis America/Indiana/Vincennes America/Indiana/Winamac America/Indiana/Marengo America/Indiana/Petersburg America/Indiana/Vevay America/Chicago America/Indiana/Tell_City America/Indiana/Knox America/Menominee America/North_Dakota/Center America/North_Dakota/New_Salem America/North_Dakota/Beulah America/Denver America/Boise America/Phoenix America/Los_Angeles America/Anchorage America/Juneau America/Sitka America/Metlakatla America/Yakutat America/Nome America/Adak Pacific/Honolulu","UY|America/Montevideo","UZ|Asia/Samarkand Asia/Tashkent","VA|Europe/Rome Europe/Vatican","VC|America/Puerto_Rico America/St_Vincent","VE|America/Caracas","VG|America/Puerto_Rico America/Tortola","VI|America/Puerto_Rico America/St_Thomas","VN|Asia/Bangkok Asia/Ho_Chi_Minh","VU|Pacific/Efate","WF|Pacific/Tarawa Pacific/Wallis","WS|Pacific/Apia","YE|Asia/Riyadh Asia/Aden","YT|Africa/Nairobi Indian/Mayotte","ZA|Africa/Johannesburg","ZM|Africa/Maputo Africa/Lusaka","ZW|Africa/Maputo Africa/Harare"]}});var Cs=$o((Ty,Ds)=>{var L6=Ds.exports=Es();L6.tz.load(ws())});var bM,j,ic,Ap,N2,Ye,zc,ac,sc,tM={},Oc=[],Jd=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;function me(t,e){for(var o in e)t[o]=e[o];return t}function lc(t){var e=t.parentNode;e&&e.removeChild(t)}function d(t,e,o){var M,b,p,n={};for(p in e)p=="key"?M=e[p]:p=="ref"?b=e[p]:n[p]=e[p];if(arguments.length>2&&(n.children=arguments.length>3?bM.call(arguments,2):o),typeof t=="function"&&t.defaultProps!=null)for(p in t.defaultProps)n[p]===void 0&&(n[p]=t.defaultProps[p]);return eM(t,n,M,b,null)}function eM(t,e,o,M,b){var p={type:t,props:e,key:o,ref:M,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:b??++ic};return b==null&&j.vnode!=null&&j.vnode(p),p}function V(){return{current:null}}function H(t){return t.children}function $d(t,e,o,M,b){var p;for(p in o)p==="children"||p==="key"||p in e||oM(t,p,null,o[p],M);for(p in e)b&&typeof e[p]!="function"||p==="children"||p==="key"||p==="value"||p==="checked"||o[p]===e[p]||oM(t,p,e[p],o[p],M)}function nc(t,e,o){e[0]==="-"?t.setProperty(e,o??""):t[e]=o==null?"":typeof o!="number"||Jd.test(e)?o:o+"px"}function oM(t,e,o,M,b){var p;e:if(e==="style")if(typeof o=="string")t.style.cssText=o;else{if(typeof M=="string"&&(t.style.cssText=M=""),M)for(e in M)o&&e in o||nc(t.style,e,"");if(o)for(e in o)M&&o[e]===M[e]||nc(t.style,e,o[e])}else if(e[0]==="o"&&e[1]==="n")p=e!==(e=e.replace(/Capture$/,"")),e=e.toLowerCase()in t?e.toLowerCase().slice(2):e.slice(2),t.l||(t.l={}),t.l[e+p]=o,o?M||t.addEventListener(e,p?cc:rc,p):t.removeEventListener(e,p?cc:rc,p);else if(e!=="dangerouslySetInnerHTML"){if(b)e=e.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if(e!=="width"&&e!=="height"&&e!=="href"&&e!=="list"&&e!=="form"&&e!=="tabIndex"&&e!=="download"&&e in t)try{t[e]=o??"";break e}catch{}typeof o=="function"||(o==null||o===!1&&e.indexOf("-")==-1?t.removeAttribute(e):t.setAttribute(e,o))}}function rc(t){N2=!0;try{return this.l[t.type+!1](j.event?j.event(t):t)}finally{N2=!1}}function cc(t){N2=!0;try{return this.l[t.type+!0](j.event?j.event(t):t)}finally{N2=!1}}function D0(t,e){this.props=t,this.context=e}function ft(t,e){if(e==null)return t.__?ft(t.__,t.__.__k.indexOf(t)+1):null;for(var o;ee&&Ye.sort(function(i,a){return i.__v.__b-a.__v.__b}));MM.__r=0}function dc(t,e,o,M,b,p,n,r,i,a){var s,u,A,q,W,h,m,y=M&&M.__k||Oc,N=y.length;for(o.__k=[],s=0;s0?eM(q.type,q.props,q.key,q.ref?q.ref:null,q.__v):q)!=null){if(q.__=o,q.__b=o.__b+1,(A=y[s])===null||A&&q.key==A.key&&q.type===A.type)y[s]=void 0;else for(u=0;u=0;e--)if((o=t.__k[e])&&(M=fc(o)))return M}return null}function dp(t,e,o,M,b,p,n,r,i){var a,s,u,A,q,W,h,m,y,N,w,x,K,P,n0,F=e.type;if(e.constructor!==void 0)return null;o.__h!=null&&(i=o.__h,r=e.__e=o.__e,e.__h=null,p=[r]),(a=j.__b)&&a(e);try{e:if(typeof F=="function"){if(m=e.props,y=(a=F.contextType)&&M[a.__c],N=a?y?y.props.value:a.__:M,o.__c?h=(s=e.__c=o.__c).__=s.__E:("prototype"in F&&F.prototype.render?e.__c=s=new F(m,N):(e.__c=s=new D0(m,N),s.constructor=F,s.render=ou),y&&y.sub(s),s.props=m,s.state||(s.state={}),s.context=N,s.__n=M,u=s.__d=!0,s.__h=[],s._sb=[]),s.__s==null&&(s.__s=s.state),F.getDerivedStateFromProps!=null&&(s.__s==s.state&&(s.__s=me({},s.__s)),me(s.__s,F.getDerivedStateFromProps(m,s.__s))),A=s.props,q=s.state,s.__v=e,u)F.getDerivedStateFromProps==null&&s.componentWillMount!=null&&s.componentWillMount(),s.componentDidMount!=null&&s.__h.push(s.componentDidMount);else{if(F.getDerivedStateFromProps==null&&m!==A&&s.componentWillReceiveProps!=null&&s.componentWillReceiveProps(m,N),!s.__e&&s.shouldComponentUpdate!=null&&s.shouldComponentUpdate(m,s.__s,N)===!1||e.__v===o.__v){for(e.__v!==o.__v&&(s.props=m,s.state=s.__s,s.__d=!1),e.__e=o.__e,e.__k=o.__k,e.__k.forEach(function(w0){w0&&(w0.__=e)}),w=0;w3;)o.pop()();if(o[1]>>1,1),e.i.removeChild(M)}}),ge(d(cu,{context:e.context},t.__v),e.l)):e.l&&e.componentWillUnmount()}function hp(t,e){var o=d(iu,{__v:t,i:e});return o.containerInfo=e,o}(nM.prototype=new D0).__a=function(t){var e=this,o=Hc(e.__v),M=e.o.get(t);return M[0]++,function(b){var p=function(){e.props.revealOrder?(M.push(b),Cc(e,t,M)):b()};o?o(p):p()}},nM.prototype.render=function(t){this.u=null,this.o=new Map;var e=Wt(t.children);t.revealOrder&&t.revealOrder[0]==="b"&&e.reverse();for(var o=e.length;o--;)this.o.set(e[o],this.u=[1,0,this.u]);return t.children},nM.prototype.componentDidUpdate=nM.prototype.componentDidMount=function(){var t=this;this.o.forEach(function(e,o){Cc(t,o,e)})};var au=typeof Symbol<"u"&&Symbol.for&&Symbol.for("react.element")||60103,su=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,Ou=typeof document<"u",lu=function(t){return(typeof Symbol<"u"&&typeof Symbol()=="symbol"?/fil|che|rad/i:/fil|che|ra/i).test(t)};D0.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach(function(t){Object.defineProperty(D0.prototype,t,{configurable:!0,get:function(){return this["UNSAFE_"+t]},set:function(e){Object.defineProperty(this,t,{configurable:!0,writable:!0,value:e})}})});var Xc=j.event;function Au(){}function du(){return this.cancelBubble}function uu(){return this.defaultPrevented}j.event=function(t){return Xc&&(t=Xc(t)),t.persist=Au,t.isPropagationStopped=du,t.isDefaultPrevented=uu,t.nativeEvent=t};var qu,xc={configurable:!0,get:function(){return this.class}},_c=j.vnode;j.vnode=function(t){var e=t.type,o=t.props,M=o;if(typeof e=="string"){var b=e.indexOf("-")===-1;for(var p in M={},o){var n=o[p];Ou&&p==="children"&&e==="noscript"||p==="value"&&"defaultValue"in o&&n==null||(p==="defaultValue"&&"value"in o&&o.value==null?p="value":p==="download"&&n===!0?n="":/ondoubleclick/i.test(p)?p="ondblclick":/^onchange(textarea|input)/i.test(p+e)&&!lu(o.type)?p="oninput":/^onfocus$/i.test(p)?p="onfocusin":/^onblur$/i.test(p)?p="onfocusout":/^on(Ani|Tra|Tou|BeforeInp|Compo)/.test(p)?p=p.toLowerCase():b&&su.test(p)?p=p.replace(/[A-Z0-9]/g,"-$&").toLowerCase():n===null&&(n=void 0),/^oninput$/i.test(p)&&(p=p.toLowerCase(),M[p]&&(p="oninputCapture")),M[p]=n)}e=="select"&&M.multiple&&Array.isArray(M.value)&&(M.value=Wt(o.children).forEach(function(r){r.props.selected=M.value.indexOf(r.props.value)!=-1})),e=="select"&&M.defaultValue!=null&&(M.value=Wt(o.children).forEach(function(r){r.props.selected=M.multiple?M.defaultValue.indexOf(r.props.value)!=-1:M.defaultValue==r.props.value})),t.props=M,o.class!=o.className&&(xc.enumerable="className"in o,o.className!=null&&(M.class=o.className),Object.defineProperty(M,"className",xc))}t.$$typeof=au,_c&&_c(t)};var kc=j.__r;j.__r=function(t){kc&&kc(t),qu=t.__c};var bi=[],Tp=new Map;function Y0(t){bi.push(t),Tp.forEach(e=>{ni(e,t)})}function pi(t){t.isConnected&&zi(t.getRootNode())}function zi(t){let e=Tp.get(t);if(!e||!e.isConnected){if(e=t.querySelector("style[data-fullcalendar]"),!e){e=document.createElement("style"),e.setAttribute("data-fullcalendar","");let o=Wu();o&&(e.nonce=o);let M=t===document?document.head:t,b=t===document?M.querySelector("script,link[rel=stylesheet],link[as=style],style"):M.firstChild;M.insertBefore(e,b)}Tp.set(t,e),fu(e)}}function fu(t){for(let e of bi)ni(t,e)}function ni(t,e){let{sheet:o}=t,M=o.cssRules.length;e.split("}").forEach((b,p)=>{b=b.trim(),b&&o.insertRule(b+"}",M+p)})}var Rp;function Wu(){return Rp===void 0&&(Rp=hu()),Rp}function hu(){let t=document.querySelector('meta[name="csp-nonce"]');if(t&&t.hasAttribute("content"))return t.getAttribute("content");let e=document.querySelector("script[nonce]");return e&&e.nonce||""}typeof document<"u"&&zi(document);var Ru=':root{--fc-small-font-size:.85em;--fc-page-bg-color:#fff;--fc-neutral-bg-color:hsla(0,0%,82%,.3);--fc-neutral-text-color:grey;--fc-border-color:#ddd;--fc-button-text-color:#fff;--fc-button-bg-color:#2c3e50;--fc-button-border-color:#2c3e50;--fc-button-hover-bg-color:#1e2b37;--fc-button-hover-border-color:#1a252f;--fc-button-active-bg-color:#1a252f;--fc-button-active-border-color:#151e27;--fc-event-bg-color:#3788d8;--fc-event-border-color:#3788d8;--fc-event-text-color:#fff;--fc-event-selected-overlay-color:rgba(0,0,0,.25);--fc-more-link-bg-color:#d0d0d0;--fc-more-link-text-color:inherit;--fc-event-resizer-thickness:8px;--fc-event-resizer-dot-total-width:8px;--fc-event-resizer-dot-border-width:1px;--fc-non-business-color:hsla(0,0%,84%,.3);--fc-bg-event-color:#8fdf82;--fc-bg-event-opacity:0.3;--fc-highlight-color:rgba(188,232,241,.3);--fc-today-bg-color:rgba(255,220,40,.15);--fc-now-indicator-color:red}.fc-not-allowed,.fc-not-allowed .fc-event{cursor:not-allowed}.fc{display:flex;flex-direction:column;font-size:1em}.fc,.fc *,.fc :after,.fc :before{box-sizing:border-box}.fc table{border-collapse:collapse;border-spacing:0;font-size:1em}.fc th{text-align:center}.fc td,.fc th{padding:0;vertical-align:top}.fc a[data-navlink]{cursor:pointer}.fc a[data-navlink]:hover{text-decoration:underline}.fc-direction-ltr{direction:ltr;text-align:left}.fc-direction-rtl{direction:rtl;text-align:right}.fc-theme-standard td,.fc-theme-standard th{border:1px solid var(--fc-border-color)}.fc-liquid-hack td,.fc-liquid-hack th{position:relative}@font-face{font-family:fcicons;font-style:normal;font-weight:400;src:url("data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBfAAAAC8AAAAYGNtYXAXVtKNAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5ZgYydxIAAAF4AAAFNGhlYWQUJ7cIAAAGrAAAADZoaGVhB20DzAAABuQAAAAkaG10eCIABhQAAAcIAAAALGxvY2ED4AU6AAAHNAAAABhtYXhwAA8AjAAAB0wAAAAgbmFtZXsr690AAAdsAAABhnBvc3QAAwAAAAAI9AAAACAAAwPAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpBgPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6Qb//f//AAAAAAAg6QD//f//AAH/4xcEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAWIAjQKeAskAEwAAJSc3NjQnJiIHAQYUFwEWMjc2NCcCnuLiDQ0MJAz/AA0NAQAMJAwNDcni4gwjDQwM/wANIwz/AA0NDCMNAAAAAQFiAI0CngLJABMAACUBNjQnASYiBwYUHwEHBhQXFjI3AZ4BAA0N/wAMJAwNDeLiDQ0MJAyNAQAMIw0BAAwMDSMM4uINIwwNDQAAAAIA4gC3Ax4CngATACcAACUnNzY0JyYiDwEGFB8BFjI3NjQnISc3NjQnJiIPAQYUHwEWMjc2NCcB87e3DQ0MIw3VDQ3VDSMMDQ0BK7e3DQ0MJAzVDQ3VDCQMDQ3zuLcMJAwNDdUNIwzWDAwNIwy4twwkDA0N1Q0jDNYMDA0jDAAAAgDiALcDHgKeABMAJwAAJTc2NC8BJiIHBhQfAQcGFBcWMjchNzY0LwEmIgcGFB8BBwYUFxYyNwJJ1Q0N1Q0jDA0Nt7cNDQwjDf7V1Q0N1QwkDA0Nt7cNDQwkDLfWDCMN1Q0NDCQMt7gMIw0MDNYMIw3VDQ0MJAy3uAwjDQwMAAADAFUAAAOrA1UAMwBoAHcAABMiBgcOAQcOAQcOARURFBYXHgEXHgEXHgEzITI2Nz4BNz4BNz4BNRE0JicuAScuAScuASMFITIWFx4BFx4BFx4BFREUBgcOAQcOAQcOASMhIiYnLgEnLgEnLgE1ETQ2Nz4BNz4BNz4BMxMhMjY1NCYjISIGFRQWM9UNGAwLFQkJDgUFBQUFBQ4JCRULDBgNAlYNGAwLFQkJDgUFBQUFBQ4JCRULDBgN/aoCVgQIBAQHAwMFAQIBAQIBBQMDBwQECAT9qgQIBAQHAwMFAQIBAQIBBQMDBwQECASAAVYRGRkR/qoRGRkRA1UFBAUOCQkVDAsZDf2rDRkLDBUJCA4FBQUFBQUOCQgVDAsZDQJVDRkLDBUJCQ4FBAVVAgECBQMCBwQECAX9qwQJAwQHAwMFAQICAgIBBQMDBwQDCQQCVQUIBAQHAgMFAgEC/oAZEhEZGRESGQAAAAADAFUAAAOrA1UAMwBoAIkAABMiBgcOAQcOAQcOARURFBYXHgEXHgEXHgEzITI2Nz4BNz4BNz4BNRE0JicuAScuAScuASMFITIWFx4BFx4BFx4BFREUBgcOAQcOAQcOASMhIiYnLgEnLgEnLgE1ETQ2Nz4BNz4BNz4BMxMzFRQWMzI2PQEzMjY1NCYrATU0JiMiBh0BIyIGFRQWM9UNGAwLFQkJDgUFBQUFBQ4JCRULDBgNAlYNGAwLFQkJDgUFBQUFBQ4JCRULDBgN/aoCVgQIBAQHAwMFAQIBAQIBBQMDBwQECAT9qgQIBAQHAwMFAQIBAQIBBQMDBwQECASAgBkSEhmAERkZEYAZEhIZgBEZGREDVQUEBQ4JCRUMCxkN/asNGQsMFQkIDgUFBQUFBQ4JCBUMCxkNAlUNGQsMFQkJDgUEBVUCAQIFAwIHBAQIBf2rBAkDBAcDAwUBAgICAgEFAwMHBAMJBAJVBQgEBAcCAwUCAQL+gIASGRkSgBkSERmAEhkZEoAZERIZAAABAOIAjQMeAskAIAAAExcHBhQXFjI/ARcWMjc2NC8BNzY0JyYiDwEnJiIHBhQX4uLiDQ0MJAzi4gwkDA0N4uINDQwkDOLiDCQMDQ0CjeLiDSMMDQ3h4Q0NDCMN4uIMIw0MDOLiDAwNIwwAAAABAAAAAQAAa5n0y18PPPUACwQAAAAAANivOVsAAAAA2K85WwAAAAADqwNVAAAACAACAAAAAAAAAAEAAAPA/8AAAAQAAAAAAAOrAAEAAAAAAAAAAAAAAAAAAAALBAAAAAAAAAAAAAAAAgAAAAQAAWIEAAFiBAAA4gQAAOIEAABVBAAAVQQAAOIAAAAAAAoAFAAeAEQAagCqAOoBngJkApoAAQAAAAsAigADAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAAcAAAABAAAAAAACAAcAYAABAAAAAAADAAcANgABAAAAAAAEAAcAdQABAAAAAAAFAAsAFQABAAAAAAAGAAcASwABAAAAAAAKABoAigADAAEECQABAA4ABwADAAEECQACAA4AZwADAAEECQADAA4APQADAAEECQAEAA4AfAADAAEECQAFABYAIAADAAEECQAGAA4AUgADAAEECQAKADQApGZjaWNvbnMAZgBjAGkAYwBvAG4Ac1ZlcnNpb24gMS4wAFYAZQByAHMAaQBvAG4AIAAxAC4AMGZjaWNvbnMAZgBjAGkAYwBvAG4Ac2ZjaWNvbnMAZgBjAGkAYwBvAG4Ac1JlZ3VsYXIAUgBlAGcAdQBsAGEAcmZjaWNvbnMAZgBjAGkAYwBvAG4Ac0ZvbnQgZ2VuZXJhdGVkIGJ5IEljb01vb24uAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=") format("truetype")}.fc-icon{speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;font-family:fcicons!important;font-style:normal;font-variant:normal;font-weight:400;height:1em;line-height:1;text-align:center;text-transform:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:1em}.fc-icon-chevron-left:before{content:"\\e900"}.fc-icon-chevron-right:before{content:"\\e901"}.fc-icon-chevrons-left:before{content:"\\e902"}.fc-icon-chevrons-right:before{content:"\\e903"}.fc-icon-minus-square:before{content:"\\e904"}.fc-icon-plus-square:before{content:"\\e905"}.fc-icon-x:before{content:"\\e906"}.fc .fc-button{border-radius:0;font-family:inherit;font-size:inherit;line-height:inherit;margin:0;overflow:visible;text-transform:none}.fc .fc-button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.fc .fc-button{-webkit-appearance:button}.fc .fc-button:not(:disabled){cursor:pointer}.fc .fc-button{background-color:transparent;border:1px solid transparent;border-radius:.25em;display:inline-block;font-size:1em;font-weight:400;line-height:1.5;padding:.4em .65em;text-align:center;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle}.fc .fc-button:hover{text-decoration:none}.fc .fc-button:focus{box-shadow:0 0 0 .2rem rgba(44,62,80,.25);outline:0}.fc .fc-button:disabled{opacity:.65}.fc .fc-button-primary{background-color:var(--fc-button-bg-color);border-color:var(--fc-button-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:hover{background-color:var(--fc-button-hover-bg-color);border-color:var(--fc-button-hover-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:disabled{background-color:var(--fc-button-bg-color);border-color:var(--fc-button-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:focus{box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc .fc-button-primary:not(:disabled).fc-button-active,.fc .fc-button-primary:not(:disabled):active{background-color:var(--fc-button-active-bg-color);border-color:var(--fc-button-active-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:not(:disabled).fc-button-active:focus,.fc .fc-button-primary:not(:disabled):active:focus{box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc .fc-button .fc-icon{font-size:1.5em;vertical-align:middle}.fc .fc-button-group{display:inline-flex;position:relative;vertical-align:middle}.fc .fc-button-group>.fc-button{flex:1 1 auto;position:relative}.fc .fc-button-group>.fc-button.fc-button-active,.fc .fc-button-group>.fc-button:active,.fc .fc-button-group>.fc-button:focus,.fc .fc-button-group>.fc-button:hover{z-index:1}.fc-direction-ltr .fc-button-group>.fc-button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0;margin-left:-1px}.fc-direction-ltr .fc-button-group>.fc-button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.fc-direction-rtl .fc-button-group>.fc-button:not(:first-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}.fc-direction-rtl .fc-button-group>.fc-button:not(:last-child){border-bottom-left-radius:0;border-top-left-radius:0}.fc .fc-toolbar{align-items:center;display:flex;justify-content:space-between}.fc .fc-toolbar.fc-header-toolbar{margin-bottom:1.5em}.fc .fc-toolbar.fc-footer-toolbar{margin-top:1.5em}.fc .fc-toolbar-title{font-size:1.75em;margin:0}.fc-direction-ltr .fc-toolbar>*>:not(:first-child){margin-left:.75em}.fc-direction-rtl .fc-toolbar>*>:not(:first-child){margin-right:.75em}.fc-direction-rtl .fc-toolbar-ltr{flex-direction:row-reverse}.fc .fc-scroller{-webkit-overflow-scrolling:touch;position:relative}.fc .fc-scroller-liquid{height:100%}.fc .fc-scroller-liquid-absolute{bottom:0;left:0;position:absolute;right:0;top:0}.fc .fc-scroller-harness{direction:ltr;overflow:hidden;position:relative}.fc .fc-scroller-harness-liquid{height:100%}.fc-direction-rtl .fc-scroller-harness>.fc-scroller{direction:rtl}.fc-theme-standard .fc-scrollgrid{border:1px solid var(--fc-border-color)}.fc .fc-scrollgrid,.fc .fc-scrollgrid table{table-layout:fixed;width:100%}.fc .fc-scrollgrid table{border-left-style:hidden;border-right-style:hidden;border-top-style:hidden}.fc .fc-scrollgrid{border-bottom-width:0;border-collapse:separate;border-right-width:0}.fc .fc-scrollgrid-liquid{height:100%}.fc .fc-scrollgrid-section,.fc .fc-scrollgrid-section table,.fc .fc-scrollgrid-section>td{height:1px}.fc .fc-scrollgrid-section-liquid>td{height:100%}.fc .fc-scrollgrid-section>*{border-left-width:0;border-top-width:0}.fc .fc-scrollgrid-section-footer>*,.fc .fc-scrollgrid-section-header>*{border-bottom-width:0}.fc .fc-scrollgrid-section-body table,.fc .fc-scrollgrid-section-footer table{border-bottom-style:hidden}.fc .fc-scrollgrid-section-sticky>*{background:var(--fc-page-bg-color);position:sticky;z-index:3}.fc .fc-scrollgrid-section-header.fc-scrollgrid-section-sticky>*{top:0}.fc .fc-scrollgrid-section-footer.fc-scrollgrid-section-sticky>*{bottom:0}.fc .fc-scrollgrid-sticky-shim{height:1px;margin-bottom:-1px}.fc-sticky{position:sticky}.fc .fc-view-harness{flex-grow:1;position:relative}.fc .fc-view-harness-active>.fc-view{bottom:0;left:0;position:absolute;right:0;top:0}.fc .fc-col-header-cell-cushion{display:inline-block;padding:2px 4px}.fc .fc-bg-event,.fc .fc-highlight,.fc .fc-non-business{bottom:0;left:0;position:absolute;right:0;top:0}.fc .fc-non-business{background:var(--fc-non-business-color)}.fc .fc-bg-event{background:var(--fc-bg-event-color);opacity:var(--fc-bg-event-opacity)}.fc .fc-bg-event .fc-event-title{font-size:var(--fc-small-font-size);font-style:italic;margin:.5em}.fc .fc-highlight{background:var(--fc-highlight-color)}.fc .fc-cell-shaded,.fc .fc-day-disabled{background:var(--fc-neutral-bg-color)}a.fc-event,a.fc-event:hover{text-decoration:none}.fc-event.fc-event-draggable,.fc-event[href]{cursor:pointer}.fc-event .fc-event-main{position:relative;z-index:2}.fc-event-dragging:not(.fc-event-selected){opacity:.75}.fc-event-dragging.fc-event-selected{box-shadow:0 2px 7px rgba(0,0,0,.3)}.fc-event .fc-event-resizer{display:none;position:absolute;z-index:4}.fc-event-selected .fc-event-resizer,.fc-event:hover .fc-event-resizer{display:block}.fc-event-selected .fc-event-resizer{background:var(--fc-page-bg-color);border-color:inherit;border-radius:calc(var(--fc-event-resizer-dot-total-width)/2);border-style:solid;border-width:var(--fc-event-resizer-dot-border-width);height:var(--fc-event-resizer-dot-total-width);width:var(--fc-event-resizer-dot-total-width)}.fc-event-selected .fc-event-resizer:before{bottom:-20px;content:"";left:-20px;position:absolute;right:-20px;top:-20px}.fc-event-selected,.fc-event:focus{box-shadow:0 2px 5px rgba(0,0,0,.2)}.fc-event-selected:before,.fc-event:focus:before{bottom:0;content:"";left:0;position:absolute;right:0;top:0;z-index:3}.fc-event-selected:after,.fc-event:focus:after{background:var(--fc-event-selected-overlay-color);bottom:-1px;content:"";left:-1px;position:absolute;right:-1px;top:-1px;z-index:1}.fc-h-event{background-color:var(--fc-event-bg-color);border:1px solid var(--fc-event-border-color);display:block}.fc-h-event .fc-event-main{color:var(--fc-event-text-color)}.fc-h-event .fc-event-main-frame{display:flex}.fc-h-event .fc-event-time{max-width:100%;overflow:hidden}.fc-h-event .fc-event-title-container{flex-grow:1;flex-shrink:1;min-width:0}.fc-h-event .fc-event-title{display:inline-block;left:0;max-width:100%;overflow:hidden;right:0;vertical-align:top}.fc-h-event.fc-event-selected:before{bottom:-10px;top:-10px}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-start),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-end){border-bottom-left-radius:0;border-left-width:0;border-top-left-radius:0}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-end),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-start){border-bottom-right-radius:0;border-right-width:0;border-top-right-radius:0}.fc-h-event:not(.fc-event-selected) .fc-event-resizer{bottom:0;top:0;width:var(--fc-event-resizer-thickness)}.fc-direction-ltr .fc-h-event:not(.fc-event-selected) .fc-event-resizer-start,.fc-direction-rtl .fc-h-event:not(.fc-event-selected) .fc-event-resizer-end{cursor:w-resize;left:calc(var(--fc-event-resizer-thickness)*-.5)}.fc-direction-ltr .fc-h-event:not(.fc-event-selected) .fc-event-resizer-end,.fc-direction-rtl .fc-h-event:not(.fc-event-selected) .fc-event-resizer-start{cursor:e-resize;right:calc(var(--fc-event-resizer-thickness)*-.5)}.fc-h-event.fc-event-selected .fc-event-resizer{margin-top:calc(var(--fc-event-resizer-dot-total-width)*-.5);top:50%}.fc-direction-ltr .fc-h-event.fc-event-selected .fc-event-resizer-start,.fc-direction-rtl .fc-h-event.fc-event-selected .fc-event-resizer-end{left:calc(var(--fc-event-resizer-dot-total-width)*-.5)}.fc-direction-ltr .fc-h-event.fc-event-selected .fc-event-resizer-end,.fc-direction-rtl .fc-h-event.fc-event-selected .fc-event-resizer-start{right:calc(var(--fc-event-resizer-dot-total-width)*-.5)}.fc .fc-popover{box-shadow:0 2px 6px rgba(0,0,0,.15);position:absolute;z-index:9999}.fc .fc-popover-header{align-items:center;display:flex;flex-direction:row;justify-content:space-between;padding:3px 4px}.fc .fc-popover-title{margin:0 2px}.fc .fc-popover-close{cursor:pointer;font-size:1.1em;opacity:.65}.fc-theme-standard .fc-popover{background:var(--fc-page-bg-color);border:1px solid var(--fc-border-color)}.fc-theme-standard .fc-popover-header{background:var(--fc-neutral-bg-color)}';Y0(Ru);var C1=class{constructor(e){this.drainedOption=e,this.isRunning=!1,this.isDirty=!1,this.pauseDepths={},this.timeoutId=0}request(e){this.isDirty=!0,this.isPaused()||(this.clearTimeout(),e==null?this.tryDrain():this.timeoutId=setTimeout(this.tryDrain.bind(this),e))}pause(e=""){let{pauseDepths:o}=this;o[e]=(o[e]||0)+1,this.clearTimeout()}resume(e="",o){let{pauseDepths:M}=this;e in M&&(o?delete M[e]:(M[e]-=1,M[e]<=0&&delete M[e]),this.tryDrain())}isPaused(){return Object.keys(this.pauseDepths).length}tryDrain(){if(!this.isRunning&&!this.isPaused()){for(this.isRunning=!0;this.isDirty;)this.isDirty=!1,this.drained();this.isRunning=!1}}clear(){this.clearTimeout(),this.isDirty=!1,this.pauseDepths={}}clearTimeout(){this.timeoutId&&(clearTimeout(this.timeoutId),this.timeoutId=0)}drained(){this.drainedOption&&this.drainedOption()}};function e2(t){t.parentNode&&t.parentNode.removeChild(t)}function m0(t,e){if(t.closest)return t.closest(e);if(!document.documentElement.contains(t))return null;do{if(RM(t,e))return t;t=t.parentElement||t.parentNode}while(t!==null&&t.nodeType===1);return null}function RM(t,e){return(t.matches||t.matchesSelector||t.msMatchesSelector).call(t,e)}function f1(t,e){let o=t instanceof HTMLElement?[t]:t,M=[];for(let b=0;b{let M=m0(o.target,t);M&&e.call(M,o,M)}}function Up(t,e,o,M){let b=gu(o,M);return t.addEventListener(e,b),()=>{t.removeEventListener(e,b)}}function ri(t,e,o,M){let b;return Up(t,"mouseover",e,(p,n)=>{if(n!==b){b=n,o(p,n);let r=i=>{b=null,M(i,n),n.removeEventListener("mouseleave",r)};n.addEventListener("mouseleave",r)}})}var jc=["webkitTransitionEnd","otransitionend","oTransitionEnd","msTransitionEnd","transitionend"];function jp(t,e){let o=M=>{e(M),jc.forEach(b=>{t.removeEventListener(b,o)})};jc.forEach(M=>{t.addEventListener(M,o)})}function ci(t){return Object.assign({onClick:t},ii(t))}function ii(t){return{tabIndex:0,onKeyDown(e){(e.key==="Enter"||e.key===" ")&&(t(e),e.preventDefault())}}}var Fc=0;function b1(){return Fc+=1,String(Fc)}function Ct(){document.body.classList.add("fc-not-allowed")}function Xt(){document.body.classList.remove("fc-not-allowed")}function Fp(t){t.style.userSelect="none",t.style.webkitUserSelect="none",t.addEventListener("selectstart",Dt)}function Gp(t){t.style.userSelect="",t.style.webkitUserSelect="",t.removeEventListener("selectstart",Dt)}function Yp(t){t.addEventListener("contextmenu",Dt)}function Vp(t){t.removeEventListener("contextmenu",Dt)}function D2(t){let e=[],o=[],M,b;for(typeof t=="string"?o=t.split(/\s*,\s*/):typeof t=="function"?o=[t]:Array.isArray(t)&&(o=t),M=0;MM.replace("$"+p,b||""),t):o}function Kp(t,e){return t-e}function te(t){return t%1===0}function yu(t){let e=t.querySelector(".fc-scrollgrid-shrink-frame"),o=t.querySelector(".fc-scrollgrid-shrink-cushion");if(!e)throw new Error("needs fc-scrollgrid-shrink-frame className");if(!o)throw new Error("needs fc-scrollgrid-shrink-cushion className");return t.getBoundingClientRect().width-e.getBoundingClientRect().width+o.getBoundingClientRect().width}var Gc=["years","months","days","milliseconds"],vu=/^(-?)(?:(\d+)\.)?(\d+):(\d\d)(?::(\d\d)(?:\.(\d\d\d))?)?/;function Y(t,e){return typeof t=="string"?Nu(t):typeof t=="object"&&t?Yc(t):typeof t=="number"?Yc({[e||"milliseconds"]:t}):null}function Nu(t){let e=vu.exec(t);if(e){let o=e[1]?-1:1;return{years:0,months:0,days:o*(e[2]?parseInt(e[2],10):0),milliseconds:o*((e[3]?parseInt(e[3],10):0)*60*60*1e3+(e[4]?parseInt(e[4],10):0)*60*1e3+(e[5]?parseInt(e[5],10):0)*1e3+(e[6]?parseInt(e[6],10):0))}}return null}function Yc(t){let e={years:t.years||t.year||0,months:t.months||t.month||0,days:t.days||t.day||0,milliseconds:(t.hours||t.hour||0)*60*60*1e3+(t.minutes||t.minute||0)*60*1e3+(t.seconds||t.second||0)*1e3+(t.milliseconds||t.millisecond||t.ms||0)},o=t.weeks||t.week;return o&&(e.days+=o*7,e.specifiedWeeks=!0),e}function Bu(t,e){return t.years===e.years&&t.months===e.months&&t.days===e.days&&t.milliseconds===e.milliseconds}function yM(t){return!t.years&&!t.months&&!t.milliseconds?t.days:0}function xt(t,e){return{years:t.years+e.years,months:t.months+e.months,days:t.days+e.days,milliseconds:t.milliseconds+e.milliseconds}}function ai(t,e){return{years:t.years-e.years,months:t.months-e.months,days:t.days-e.days,milliseconds:t.milliseconds-e.milliseconds}}function _t(t,e){return{years:t.years*e,months:t.months*e,days:t.days*e,milliseconds:t.milliseconds*e}}function Su(t){return B2(t)/365}function Tu(t){return B2(t)/30}function B2(t){return S0(t)/864e5}function Qp(t){return S0(t)/(1e3*60)}function Zp(t){return S0(t)/1e3}function S0(t){return t.years*(365*864e5)+t.months*(30*864e5)+t.days*864e5+t.milliseconds}function B1(t,e){let o=null;for(let M=0;M=1?Math.min(b,p):b}function mp(t,e,o,M){let b=t1([e,0,1+ku(e,o,M)]),p=t0(t),n=Math.round(_1(b,p));return Math.floor(n/7)+1}function ku(t,e,o){let M=7+e-o;return-((7+t1([t,0,M]).getUTCDay()-e)%7)+M-1}function Vc(t){return[t.getFullYear(),t.getMonth(),t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()]}function Kc(t){return new Date(t[0],t[1]||0,t[2]==null?1:t[2],t[3]||0,t[4]||0,t[5]||0)}function ye(t){return[t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate(),t.getUTCHours(),t.getUTCMinutes(),t.getUTCSeconds(),t.getUTCMilliseconds()]}function t1(t){return t.length===1&&(t=t.concat([0])),new Date(Date.UTC(...t))}function kt(t){return!isNaN(t.valueOf())}function ve(t){return t.getUTCHours()*1e3*60*60+t.getUTCMinutes()*1e3*60+t.getUTCSeconds()*1e3+t.getUTCMilliseconds()}function t2(t,e,o=!1){let M=t.toISOString();return M=M.replace(".000",""),o&&(M=M.replace("T00:00:00Z","")),M.length>10&&(e==null?M=M.replace("Z",""):e!==0&&(M=M.replace("Z",tz(e,!0)))),M}function k1(t){return t.toISOString().replace(/T.*$/,"")}function X2(t){return t.toISOString().match(/^\d{4}-\d{2}/)[0]}function ez(t){return L1(t.getUTCHours(),2)+":"+L1(t.getUTCMinutes(),2)+":"+L1(t.getUTCSeconds(),2)}function tz(t,e=!1){let o=t<0?"-":"+",M=Math.abs(t),b=Math.floor(M/60),p=Math.round(M%60);return e?`${o+L1(b,2)}:${L1(p,2)}`:`GMT${o}${b}${p?`:${L1(p,2)}`:""}`}function E(t,e,o){let M,b;return function(...p){if(!M)b=t.apply(this,p);else if(!x0(M,p)){o&&o(b);let n=t.apply(this,p);(!e||!e(n,b))&&(b=n)}return M=p,b}}function i1(t,e,o){let M,b;return p=>{if(!M)b=t.call(this,p);else if(!R0(M,p)){o&&o(b);let n=t.call(this,p);(!e||!e(n,b))&&(b=n)}return M=p,b}}function It(t,e,o){let M=[],b=[];return p=>{let n=M.length,r=p.length,i=0;for(;i{let n={};for(let r in p)if(!b[r])n[r]=t.apply(this,p[r]);else if(x0(M[r],p[r]))n[r]=b[r];else{o&&o(b[r]);let i=t.apply(this,p[r]);n[r]=e&&e(i,b[r])?b[r]:i}return M=p,b=n,n}}var Qc={week:3,separator:0,omitZeroMinute:0,meridiem:0,omitCommas:0},lM={timeZoneName:7,era:6,year:5,month:4,day:2,weekday:2,hour:1,minute:1,second:1},rM=/\s*([ap])\.?m\.?/i,Iu=/,/g,Pu=/\s+/g,Hu=/\u200e/g,Uu=/UTC|GMT/,Ep=class{constructor(e){let o={},M={},b=0;for(let p in e)p in Qc?(M[p]=e[p],b=Math.max(Qc[p],b)):(o[p]=e[p],p in lM&&(b=Math.max(lM[p],b)));this.standardDateProps=o,this.extendedSettings=M,this.severity=b,this.buildFormattingFunc=E(Zc)}format(e,o){return this.buildFormattingFunc(this.standardDateProps,this.extendedSettings,o)(e)}formatRange(e,o,M,b){let{standardDateProps:p,extendedSettings:n}=this,r=Ku(e.marker,o.marker,M.calendarSystem);if(!r)return this.format(e,M);let i=r;i>1&&(p.year==="numeric"||p.year==="2-digit")&&(p.month==="numeric"||p.month==="2-digit")&&(p.day==="numeric"||p.day==="2-digit")&&(i=1);let a=this.format(e,M),s=this.format(o,M);if(a===s)return a;let u=Qu(p,i),A=Zc(u,n,M),q=A(e),W=A(o),h=Zu(a,q,s,W),m=n.separator||b||M.defaultSeparator||"";return h?h.before+q+m+W+h.after:a+m+s}getLargestUnit(){switch(this.severity){case 7:case 6:case 5:return"year";case 4:return"month";case 3:return"week";case 2:return"day";default:return"time"}}};function Zc(t,e,o){let M=Object.keys(t).length;return M===1&&t.timeZoneName==="short"?b=>tz(b.timeZoneOffset):M===0&&e.week?b=>Vu(o.computeWeekNumber(b.marker),o.weekText,o.weekTextLong,o.locale,e.week):ju(t,e,o)}function ju(t,e,o){t=Object.assign({},t),e=Object.assign({},e),Fu(t,e),t.timeZone="UTC";let M=new Intl.DateTimeFormat(o.locale.codes,t),b;if(e.omitZeroMinute){let p=Object.assign({},t);delete p.minute,b=new Intl.DateTimeFormat(o.locale.codes,p)}return p=>{let{marker:n}=p,r;b&&!n.getUTCMinutes()?r=b:r=M;let i=r.format(n);return Gu(i,p,t,e,o)}}function Fu(t,e){t.timeZoneName&&(t.hour||(t.hour="2-digit"),t.minute||(t.minute="2-digit")),t.timeZoneName==="long"&&(t.timeZoneName="short"),e.omitZeroMinute&&(t.second||t.millisecond)&&delete e.omitZeroMinute}function Gu(t,e,o,M,b){return t=t.replace(Hu,""),o.timeZoneName==="short"&&(t=Yu(t,b.timeZone==="UTC"||e.timeZoneOffset==null?"UTC":tz(e.timeZoneOffset))),M.omitCommas&&(t=t.replace(Iu,"").trim()),M.omitZeroMinute&&(t=t.replace(":00","")),M.meridiem===!1?t=t.replace(rM,"").trim():M.meridiem==="narrow"?t=t.replace(rM,(p,n)=>n.toLocaleLowerCase()):M.meridiem==="short"?t=t.replace(rM,(p,n)=>`${n.toLocaleLowerCase()}m`):M.meridiem==="lowercase"&&(t=t.replace(rM,p=>p.toLocaleLowerCase())),t=t.replace(Pu," "),t=t.trim(),t}function Yu(t,e){let o=!1;return t=t.replace(Uu,()=>(o=!0,e)),o||(t+=` ${e}`),t}function Vu(t,e,o,M,b){let p=[];return b==="long"?p.push(o):(b==="short"||b==="narrow")&&p.push(e),(b==="long"||b==="short")&&p.push(" "),p.push(M.simpleNumberFormat.format(t)),M.options.direction==="rtl"&&p.reverse(),p.join("")}function Ku(t,e,o){return o.getMarkerYear(t)!==o.getMarkerYear(e)?5:o.getMarkerMonth(t)!==o.getMarkerMonth(e)?4:o.getMarkerDay(t)!==o.getMarkerDay(e)?2:ve(t)!==ve(e)?1:0}function Qu(t,e){let o={};for(let M in t)(!(M in lM)||lM[M]<=e)&&(o[M]=t[M]);return o}function Zu(t,e,o,M){let b=0;for(;b=0;p-=1){let n=t[p][M];if(typeof n=="object"&&n)b.unshift(n);else if(n!==void 0){o[M]=n;break}}b.length&&(o[M]=SM(b))}}for(let M=t.length-1;M>=0;M-=1){let b=t[M];for(let p in b)p in o||(o[p]=b[p])}return o}function q1(t,e){let o={};for(let M in t)e(t[M],M)&&(o[M]=t[M]);return o}function a0(t,e){let o={};for(let M in t)o[M]=e(t[M],M);return o}function pz(t){let e={};for(let o of t)e[o]=!0;return e}function TM(t){let e=[];for(let o in t)e.push(t[o]);return e}function R0(t,e){if(t===e)return!0;for(let o in t)if(dM.call(t,o)&&!(o in e))return!1;for(let o in e)if(dM.call(e,o)&&t[o]!==e[o])return!1;return!0}var Ju=/^on[A-Z]/;function $u(t,e){let o=Cp(t,e);for(let M of o)if(!Ju.test(M))return!1;return!0}function Cp(t,e){let o=[];for(let M in t)dM.call(t,M)&&(M in e||o.push(M));for(let M in e)dM.call(e,M)&&t[M]!==e[M]&&o.push(M);return o}function S2(t,e,o={}){if(t===e)return!0;for(let M in e)if(!(M in t&&eq(t[M],e[M],o[M])))return!1;for(let M in t)if(!(M in e))return!1;return!0}function eq(t,e,o){return t===e||o===!0?!0:o?o(t,e):!1}function EM(t,e=0,o,M=1){let b=[];o==null&&(o=Object.keys(t).length);for(let p=e;p{this.props.value!==n.value&&p.forEach(r=>{r.context=n.value,r.forceUpdate()})},this.sub=n=>{p.push(n);let r=n.componentWillUnmount;n.componentWillUnmount=()=>{p.splice(p.indexOf(n),1),r&&r.call(n)}}}return b},e}var uM=class{constructor(e,o,M,b){this.execFunc=e,this.emitter=o,this.scrollTime=M,this.scrollTimeReset=b,this.handleScrollRequest=p=>{this.queuedRequest=Object.assign({},this.queuedRequest||{},p),this.drain()},o.on("_scrollRequest",this.handleScrollRequest),this.fireInitialScroll()}detach(){this.emitter.off("_scrollRequest",this.handleScrollRequest)}update(e){e&&this.scrollTimeReset?this.fireInitialScroll():this.drain()}fireInitialScroll(){this.handleScrollRequest({time:this.scrollTime})}drain(){this.queuedRequest&&this.execFunc(this.queuedRequest)&&(this.queuedRequest=null)}},p1=zz({});function ui(t,e,o,M,b,p,n,r,i,a,s,u,A){return{dateEnv:b,options:o,pluginHooks:n,emitter:a,dispatch:r,getCurrentData:i,calendarApi:s,viewSpec:t,viewApi:e,dateProfileGenerator:M,theme:p,isRtl:o.direction==="rtl",addResizeHandler(q){a.on("_resize",q)},removeResizeHandler(q){a.off("_resize",q)},createScrollResponder(q){return new uM(q,a,Y(o.scrollTime),o.scrollTimeReset)},registerInteractiveComponent:u,unregisterInteractiveComponent:A}}var X1=class extends D0{shouldComponentUpdate(e,o){return this.debug&&console.log(Cp(e,this.props),Cp(o,this.state)),!S2(this.props,e,this.propEquality)||!S2(this.state,o,this.stateEquality)}safeSetState(e){S2(this.state,Object.assign(Object.assign({},this.state),e),this.stateEquality)||this.setState(e)}};X1.addPropsEquality=bq;X1.addStateEquality=pq;X1.contextType=p1;X1.prototype.propEquality={};X1.prototype.stateEquality={};var X=class extends X1{};X.contextType=p1;function bq(t){let e=Object.create(this.prototype.propEquality);Object.assign(e,t),this.prototype.propEquality=e}function pq(t){let e=Object.create(this.prototype.stateEquality);Object.assign(e,t),this.prototype.stateEquality=e}function V0(t,e){typeof t=="function"?t(e):t&&(t.current=e)}var Rt=class extends X{constructor(){super(...arguments),this.id=b1(),this.queuedDomNodes=[],this.currentDomNodes=[],this.handleEl=e=>{_p(this.props.generatorName,this.context.options)||this.updateElRef(e)},this.updateElRef=e=>{this.props.elRef&&V0(this.props.elRef,e)}}render(){let{props:e,context:o}=this,{options:M}=o,{customGenerator:b,defaultGenerator:p,renderProps:n}=e,r=nz(e,[],this.handleEl),i=!1,a,s=[],u;if(b!=null){let A=typeof b=="function"?b(n,d):b;if(A===!0)i=!0;else{let q=A&&typeof A=="object";q&&"html"in A?r.dangerouslySetInnerHTML={__html:A.html}:q&&"domNodes"in A?s=Array.prototype.slice.call(A.domNodes):(q?Ap(A):typeof A!="function")?a=A:u=A}}else i=!_p(e.generatorName,M);return i&&p&&(a=p(n)),this.queuedDomNodes=s,this.currentGeneratorMeta=u,d(e.elTag,r,a)}componentDidMount(){this.applyQueueudDomNodes(),this.triggerCustomRendering(!0)}componentDidUpdate(){this.applyQueueudDomNodes(),this.triggerCustomRendering(!0)}componentWillUnmount(){this.triggerCustomRendering(!1)}triggerCustomRendering(e){var o;let{props:M,context:b}=this,{handleCustomRendering:p,customRenderingMetaMap:n}=b.options;if(p){let r=(o=this.currentGeneratorMeta)!==null&&o!==void 0?o:n?.[M.generatorName];r&&p(Object.assign(Object.assign({id:this.id,isActive:e,containerEl:this.base,reportNewContainerEl:this.updateElRef,generatorMeta:r},M),{elClasses:(M.elClasses||[]).filter(zq)}))}}applyQueueudDomNodes(){let{queuedDomNodes:e,currentDomNodes:o}=this,M=this.base;if(!x0(e,o)){o.forEach(e2);for(let b of e)M.appendChild(b);this.currentDomNodes=e}}};Rt.addPropsEquality({elClasses:x0,elStyle:R0,elAttrs:$u,renderProps:R0});function _p(t,e){var o;return!!(e.handleCustomRendering&&t&&(!((o=e.customRenderingMetaMap)===null||o===void 0)&&o[t]))}function nz(t,e,o){let M=Object.assign(Object.assign({},t.elAttrs),{ref:o});return(t.elClasses||e)&&(M.className=(t.elClasses||[]).concat(e||[]).concat(M.className||[]).filter(Boolean).join(" ")),t.elStyle&&(M.style=t.elStyle),M}function zq(t){return!!t}var rz=zz(0),b0=class extends D0{constructor(){super(...arguments),this.InnerContent=nq.bind(void 0,this),this.handleEl=e=>{this.el=e,this.props.elRef&&V0(this.props.elRef,e)}}render(){let{props:e}=this,o=rq(e.classNameGenerator,e.renderProps);if(e.children){let M=nz(e,o,this.handleEl),b=e.children(this.InnerContent,e.renderProps,M);return e.elTag?d(e.elTag,M,b):b}else return d(Rt,Object.assign(Object.assign({},e),{elRef:this.handleEl,elTag:e.elTag||"div",elClasses:(e.elClasses||[]).concat(o),renderId:this.context}))}componentDidMount(){var e,o;(o=(e=this.props).didMount)===null||o===void 0||o.call(e,Object.assign(Object.assign({},this.props.renderProps),{el:this.el}))}componentWillUnmount(){var e,o;(o=(e=this.props).willUnmount)===null||o===void 0||o.call(e,Object.assign(Object.assign({},this.props.renderProps),{el:this.el}))}};b0.contextType=rz;function nq(t,e){let o=t.props;return d(Rt,Object.assign({renderProps:o.renderProps,generatorName:o.generatorName,customGenerator:o.customGenerator,defaultGenerator:o.defaultGenerator,renderId:t.context},e))}function rq(t,e){let o=typeof t=="function"?t(e):t||[];return typeof o=="string"?[o]:o}var C0=class extends X{render(){let{props:e,context:o}=this,{options:M}=o,b={view:o.viewApi};return d(b0,Object.assign({},e,{elTag:e.elTag||"div",elClasses:[...cz(e.viewSpec),...e.elClasses||[]],renderProps:b,classNameGenerator:M.viewClassNames,generatorName:void 0,didMount:M.viewDidMount,willUnmount:M.viewWillUnmount}),()=>e.children)}};function cz(t){return[`fc-${t.type}-view`,"fc-view"]}function cq(t,e){let o=null,M=null;return t.start&&(o=e.createMarker(t.start)),t.end&&(M=e.createMarker(t.end)),!o&&!M||o&&M&&MM&&o.push({start:M,end:p.start}),p.end>M&&(M=p.end);return Me.start)&&(t.start===null||e.end===null||t.start=t.start)&&(t.end===null||e.end!==null&&e.end<=t.end)}function o1(t,e){return(t.start===null||e>=t.start)&&(t.end===null||e=e.end?new Date(e.end.valueOf()-1):t}function qi(t){let e=Math.floor(_1(t.start,t.end))||1,o=t0(t.start),M=d0(o,e);return{start:o,end:M}}function I2(t,e=Y(0)){let o=null,M=null;if(t.end){M=t0(t.end);let b=t.end.valueOf()-M.valueOf();b&&b>=S0(e)&&(M=d0(M,1))}return t.start&&(o=t0(t.start),M&&M<=o&&(M=d0(o,1))),{start:o,end:M}}function iz(t){let e=I2(t);return _1(e.start,e.end)>1}function Ne(t,e,o,M){return M==="year"?Y(o.diffWholeYears(t,e),"year"):M==="month"?Y(o.diffWholeMonths(t,e),"month"):Oi(t,e)}function fi(t,e){switch(e.type){case"CHANGE_DATE":return e.dateMarker;default:return t}}function Wi(t,e){let o=t.initialDate;return o!=null?e.createMarker(o):P2(t.now,e)}function P2(t,e){return typeof t=="function"&&(t=t()),t==null?e.createNowMarker():e.createMarker(t)}var Ke=class{constructor(e){this.props=e,this.nowDate=P2(e.nowInput,e.dateEnv),this.initHiddenDays()}buildPrev(e,o,M){let{dateEnv:b}=this.props,p=b.subtract(b.startOf(o,e.currentRangeUnit),e.dateIncrement);return this.build(p,-1,M)}buildNext(e,o,M){let{dateEnv:b}=this.props,p=b.add(b.startOf(o,e.currentRangeUnit),e.dateIncrement);return this.build(p,1,M)}build(e,o,M=!0){let{props:b}=this,p,n,r,i,a,s;return p=this.buildValidRange(),p=this.trimHiddenDays(p),M&&(e=aq(e,p)),n=this.buildCurrentRangeInfo(e,o),r=/^(year|month|week|day)$/.test(n.unit),i=this.buildRenderRange(this.trimHiddenDays(n.range),n.unit,r),i=this.trimHiddenDays(i),a=i,b.showNonCurrentDates||(a=X0(a,n.range)),a=this.adjustActiveRange(a),a=X0(a,p),s=_2(n.range,p),o1(i,e)||(e=i.start),{currentDate:e,validRange:p,currentRange:n.range,currentRangeUnit:n.unit,isRangeAllDay:r,activeRange:a,renderRange:i,slotMinTime:b.slotMinTime,slotMaxTime:b.slotMaxTime,isValid:s,dateIncrement:this.buildDateIncrement(n.duration)}}buildValidRange(){let e=this.props.validRangeInput,o=typeof e=="function"?e.call(this.props.calendarApi,this.nowDate):e;return this.refineRange(o)||{start:null,end:null}}buildCurrentRangeInfo(e,o){let{props:M}=this,b=null,p=null,n=null,r;return M.duration?(b=M.duration,p=M.durationUnit,n=this.buildRangeFromDuration(e,o,b,p)):(r=this.props.dayCount)?(p="day",n=this.buildRangeFromDayCount(e,o,r)):(n=this.buildCustomVisibleRange(e))?p=M.dateEnv.greatestWholeUnit(n.start,n.end).unit:(b=this.getFallbackDuration(),p=d1(b).unit,n=this.buildRangeFromDuration(e,o,b,p)),{duration:b,unit:p,range:n}}getFallbackDuration(){return Y({day:1})}adjustActiveRange(e){let{dateEnv:o,usesMinMaxTime:M,slotMinTime:b,slotMaxTime:p}=this.props,{start:n,end:r}=e;return M&&(B2(b)<0&&(n=t0(n),n=o.add(n,b)),B2(p)>1&&(r=t0(r),r=d0(r,-1),r=o.add(r,p))),{start:n,end:r}}buildRangeFromDuration(e,o,M,b){let{dateEnv:p,dateAlignment:n}=this.props,r,i,a;if(!n){let{dateIncrement:u}=this.props;u&&S0(u)!n[i.defId].recurringDef);for(let i in n){let a=n[i];if(a.recurringDef){let{duration:s}=a.recurringDef;s||(s=a.allDay?p.defaultAllDayEventDuration:p.defaultTimedEventDuration);let u=Oq(a,s,e,M,b.recurringTypes);for(let A of u){let q=Pt(i,{start:A,end:M.add(A,s)});r[q.instanceId]=q}}}return{defs:n,instances:r}}function Oq(t,e,o,M,b){let n=b[t.recurringDef.typeId].expand(t.recurringDef.typeData,{start:M.subtract(o.start,e),end:o.end},M);return t.allDay&&(n=n.map(t0)),n}var OM={id:String,groupId:String,title:String,url:String,interactive:Boolean},hi={start:g,end:g,date:g,allDay:Boolean},lq=Object.assign(Object.assign(Object.assign({},OM),hi),{extendedProps:g});function Ri(t,e,o,M,b=az(o),p,n){let{refined:r,extra:i}=DM(t,o,b),a=dq(e,o),s=sq(r,a,o.dateEnv,o.pluginHooks.recurringTypes);if(s){let A=mt(r,i,e?e.sourceId:"",s.allDay,!!s.duration,o,p);return A.recurringDef={typeId:s.typeId,typeData:s.typeData,duration:s.duration},{def:A,instance:null}}let u=Aq(r,a,o,M);if(u){let A=mt(r,i,e?e.sourceId:"",u.allDay,u.hasEnd,o,p),q=Pt(A.defId,u.range,u.forcedStartTzo,u.forcedEndTzo);return n&&A.publicId&&n[A.publicId]&&(q.instanceId=n[A.publicId]),{def:A,instance:q}}return null}function DM(t,e,o=az(e)){return Xe(t,o)}function az(t){return Object.assign(Object.assign(Object.assign({},qM),lq),t.pluginHooks.eventRefiners)}function mt(t,e,o,M,b,p,n){let r={title:t.title||"",groupId:t.groupId||"",publicId:t.id||"",url:t.url||"",recurringDef:null,defId:(n&&t.id?n[t.id]:"")||b1(),sourceId:o,allDay:M,hasEnd:b,interactive:t.interactive,ui:xe(t,p),extendedProps:Object.assign(Object.assign({},t.extendedProps||{}),e)};for(let i of p.pluginHooks.eventDefMemberAdders)Object.assign(r,i(t));return Object.freeze(r.ui.classNames),Object.freeze(r.extendedProps),r}function Aq(t,e,o,M){let{allDay:b}=t,p,n=null,r=!1,i,a=null,s=t.start!=null?t.start:t.date;if(p=o.dateEnv.createMarkerMeta(s),p)n=p.marker;else if(!M)return null;return t.end!=null&&(i=o.dateEnv.createMarkerMeta(t.end)),b==null&&(e!=null?b=e:b=(!p||p.isTimeUnspecified)&&(!i||i.isTimeUnspecified)),b&&n&&(n=t0(n)),i&&(a=i.marker,b&&(a=t0(a)),n&&a<=n&&(a=null)),a?r=!0:M||(r=o.options.forceEventDuration||!1,a=o.dateEnv.add(n,b?o.options.defaultAllDayEventDuration:o.options.defaultTimedEventDuration)),{allDay:b,hasEnd:r,range:{start:n,end:a},forcedStartTzo:p?p.forcedTzo:null,forcedEndTzo:i?i.forcedTzo:null}}function dq(t,e){let o=null;return t&&(o=t.defaultAllDay),o==null&&(o=e.options.defaultAllDay),o}function gt(t,e,o,M,b,p){let n=K0(),r=az(o);for(let i of t){let a=Ri(i,e,o,M,r,b,p);a&&Lt(a,n)}return n}function Lt(t,e=K0()){return e.defs[t.def.defId]=t.def,t.instance&&(e.instances[t.instance.instanceId]=t.instance),e}function Ht(t,e){let o=t.instances[e];if(o){let M=t.defs[o.defId],b=CM(t,p=>uq(M,p));return b.defs[M.defId]=M,b.instances[o.instanceId]=o,b}return K0()}function uq(t,e){return!!(t.groupId&&t.groupId===e.groupId)}function K0(){return{defs:{},instances:{}}}function H2(t,e){return{defs:Object.assign(Object.assign({},t.defs),e.defs),instances:Object.assign(Object.assign({},t.instances),e.instances)}}function CM(t,e){let o=q1(t.defs,e),M=q1(t.instances,b=>o[b.defId]);return{defs:o,instances:M}}function qq(t,e){let{defs:o,instances:M}=t,b={},p={};for(let n in o)e.defs[n]||(b[n]=o[n]);for(let n in M)!e.instances[n]&&b[M[n].defId]&&(p[n]=M[n]);return{defs:b,instances:p}}function fq(t,e){return Array.isArray(t)?gt(t,null,e,!0):typeof t=="object"&&t?gt([t],null,e,!0):t!=null?String(t):null}function yt(t){return Array.isArray(t)?t:typeof t=="string"?t.split(/\s+/):[]}var qM={display:String,editable:Boolean,startEditable:Boolean,durationEditable:Boolean,constraint:g,overlap:g,allow:g,className:yt,classNames:yt,color:String,backgroundColor:String,borderColor:String,textColor:String},Wq={display:null,startEditable:null,durationEditable:null,constraints:[],overlap:null,allows:[],backgroundColor:"",borderColor:"",textColor:"",classNames:[]};function xe(t,e){let o=fq(t.constraint,e);return{display:t.display||null,startEditable:t.startEditable!=null?t.startEditable:t.editable,durationEditable:t.durationEditable!=null?t.durationEditable:t.editable,constraints:o!=null?[o]:[],overlap:t.overlap!=null?t.overlap:null,allows:t.allow!=null?[t.allow]:[],backgroundColor:t.backgroundColor||t.color||"",borderColor:t.borderColor||t.color||"",textColor:t.textColor||"",classNames:(t.className||[]).concat(t.classNames||[])}}function Ut(t){return t.reduce(hq,Wq)}function hq(t,e){return{display:e.display!=null?e.display:t.display,startEditable:e.startEditable!=null?e.startEditable:t.startEditable,durationEditable:e.durationEditable!=null?e.durationEditable:t.durationEditable,constraints:t.constraints.concat(e.constraints),overlap:typeof e.overlap=="boolean"?e.overlap:t.overlap,allows:t.allows.concat(e.allows),backgroundColor:e.backgroundColor||t.backgroundColor,borderColor:e.borderColor||t.borderColor,textColor:e.textColor||t.textColor,classNames:t.classNames.concat(e.classNames)}}var Rq={id:String,defaultAllDay:Boolean,url:String,format:String,events:g,eventDataTransform:g,success:g,failure:g};function sz(t,e,o=Oz(e)){let M;if(typeof t=="string"?M={url:t}:typeof t=="function"||Array.isArray(t)?M={events:t}:typeof t=="object"&&t&&(M=t),M){let{refined:b,extra:p}=Xe(M,o),n=mq(b,e);if(n)return{_raw:t,isFetching:!1,latestFetchId:"",fetchRange:null,defaultAllDay:b.defaultAllDay,eventDataTransform:b.eventDataTransform,success:b.success,failure:b.failure,publicId:b.id||"",sourceId:b1(),sourceDefId:n.sourceDefId,meta:n.meta,ui:xe(b,e),extendedProps:p}}return null}function Oz(t){return Object.assign(Object.assign(Object.assign({},qM),Rq),t.pluginHooks.eventSourceRefiners)}function mq(t,e){let o=e.pluginHooks.eventSourceDefs;for(let M=o.length-1;M>=0;M-=1){let p=o[M].parseMeta(t);if(p)return{sourceDefId:M,meta:p}}return null}function mi(t,e,o,M,b){switch(e.type){case"RECEIVE_EVENTS":return gq(t,o[e.sourceId],e.fetchId,e.fetchRange,e.rawEvents,b);case"RESET_RAW_EVENTS":return Lq(t,o[e.sourceId],e.rawEvents,M.activeRange,b);case"ADD_EVENTS":return yq(t,e.eventStore,M?M.activeRange:null,b);case"RESET_EVENTS":return e.eventStore;case"MERGE_EVENTS":return H2(t,e.eventStore);case"PREV":case"NEXT":case"CHANGE_DATE":case"CHANGE_VIEW_TYPE":return M?Qe(t,M.activeRange,b):t;case"REMOVE_EVENTS":return qq(t,e.eventStore);case"REMOVE_EVENT_SOURCE":return Li(t,e.sourceId);case"REMOVE_ALL_EVENT_SOURCES":return CM(t,p=>!p.sourceId);case"REMOVE_ALL_EVENTS":return K0();default:return t}}function gq(t,e,o,M,b,p){if(e&&o===e.latestFetchId){let n=gt(gi(b,e,p),e,p);return M&&(n=Qe(n,M,p)),H2(Li(t,e.sourceId),n)}return t}function Lq(t,e,o,M,b){let{defIdMap:p,instanceIdMap:n}=Nq(t),r=gt(gi(o,e,b),e,b,!1,p,n);return Qe(r,M,b)}function gi(t,e,o){let M=o.options.eventDataTransform,b=e?e.eventDataTransform:null;return b&&(t=ei(t,b)),M&&(t=ei(t,M)),t}function ei(t,e){let o;if(!e)o=t;else{o=[];for(let M of t){let b=e(M);b?o.push(b):b==null&&o.push(M)}}return o}function yq(t,e,o,M){return o&&(e=Qe(e,o,M)),H2(t,e)}function lz(t,e,o){let{defs:M}=t,b=a0(t.instances,p=>M[p.defId].allDay?p:Object.assign(Object.assign({},p),{range:{start:o.createMarker(e.toDate(p.range.start,p.forcedStartTzo)),end:o.createMarker(e.toDate(p.range.end,p.forcedEndTzo))},forcedStartTzo:o.canComputeOffset?null:p.forcedStartTzo,forcedEndTzo:o.canComputeOffset?null:p.forcedEndTzo}));return{defs:M,instances:b}}function Li(t,e){return CM(t,o=>o.sourceId!==e)}function vq(t,e){return{defs:t.defs,instances:q1(t.instances,o=>!e[o.instanceId])}}function Nq(t){let{defs:e,instances:o}=t,M={},b={};for(let p in e){let n=e[p],{publicId:r}=n;r&&(M[r]=p)}for(let p in o){let n=o[p],r=e[n.defId],{publicId:i}=r;i&&(b[i]=p)}return{defIdMap:M,instanceIdMap:b}}var y1=class{constructor(){this.handlers={},this.thisContext=null}setThisContext(e){this.thisContext=e}setOptions(e){this.options=e}on(e,o){Bq(this.handlers,e,o)}off(e,o){Sq(this.handlers,e,o)}trigger(e,...o){let M=this.handlers[e]||[],b=this.options&&this.options[e],p=[].concat(b||[],M);for(let n of p)n.apply(this.thisContext,o)}hasHandlers(e){return!!(this.handlers[e]&&this.handlers[e].length||this.options&&this.options[e])}};function Bq(t,e,o){(t[e]||(t[e]=[])).push(o)}function Sq(t,e,o){o?t[e]&&(t[e]=t[e].filter(M=>M!==o)):delete t[e]}var Tq={startTime:"09:00",endTime:"17:00",daysOfWeek:[1,2,3,4,5],display:"inverse-background",classNames:"fc-non-business",groupId:"_businessHours"};function jt(t,e){return gt(Eq(t),null,e)}function Eq(t){let e;return t===!0?e=[{}]:Array.isArray(t)?e=t.filter(o=>o.daysOfWeek):typeof t=="object"&&t?e=[t]:e=[],e=e.map(o=>Object.assign(Object.assign({},Tq),o)),e}function XM(t,e,o){o.emitter.trigger("select",Object.assign(Object.assign({},Az(t,o)),{jsEvent:e?e.origEvent:null,view:o.viewApi||o.calendarApi.view}))}function wq(t,e){e.emitter.trigger("unselect",{jsEvent:t?t.origEvent:null,view:e.viewApi||e.calendarApi.view})}function Az(t,e){let o={};for(let M of e.pluginHooks.dateSpanTransforms)Object.assign(o,M(t,e));return Object.assign(o,Fq(t,e.dateEnv)),o}function fM(t,e,o){let{dateEnv:M,options:b}=o,p=e;return t?(p=t0(p),p=M.add(p,b.defaultAllDayEventDuration)):p=M.add(p,b.defaultTimedEventDuration),p}function Ft(t,e,o,M){let b=WM(t.defs,e),p=K0();for(let n in t.defs){let r=t.defs[n];p.defs[n]=Dq(r,b[n],o,M)}for(let n in t.instances){let r=t.instances[n],i=p.defs[r.defId];p.instances[n]=Cq(r,i,b[r.defId],o,M)}return p}function Dq(t,e,o,M){let b=o.standardProps||{};b.hasEnd==null&&e.durationEditable&&(o.startDelta||o.endDelta)&&(b.hasEnd=!0);let p=Object.assign(Object.assign(Object.assign({},t),b),{ui:Object.assign(Object.assign({},t.ui),b.ui)});o.extendedProps&&(p.extendedProps=Object.assign(Object.assign({},p.extendedProps),o.extendedProps));for(let n of M.pluginHooks.eventDefMutationAppliers)n(p,o,M);return!p.hasEnd&&M.options.forceEventDuration&&(p.hasEnd=!0),p}function Cq(t,e,o,M,b){let{dateEnv:p}=b,n=M.standardProps&&M.standardProps.allDay===!0,r=M.standardProps&&M.standardProps.hasEnd===!1,i=Object.assign({},t);return n&&(i.range=qi(i.range)),M.datesDelta&&o.startEditable&&(i.range={start:p.add(i.range.start,M.datesDelta),end:p.add(i.range.end,M.datesDelta)}),M.startDelta&&o.durationEditable&&(i.range={start:p.add(i.range.start,M.startDelta),end:i.range.end}),M.endDelta&&o.durationEditable&&(i.range={start:i.range.start,end:p.add(i.range.end,M.endDelta)}),r&&(i.range={start:i.range.start,end:fM(e.allDay,i.range.start,b)}),e.allDay&&(i.range={start:t0(i.range.start),end:t0(i.range.end)}),i.range.endvi(o,e))}function vi(t,e){let o=[];return e[""]&&o.push(e[""]),e[t.defId]&&o.push(e[t.defId]),o.push(t.ui),Ut(o)}function se(t,e){let o=t.map(Xq);return o.sort((M,b)=>gM(M,b,e)),o.map(M=>M._seg)}function Xq(t){let{eventRange:e}=t,o=e.def,M=e.instance?e.instance.range:e.range,b=M.start?M.start.valueOf():0,p=M.end?M.end.valueOf():0;return Object.assign(Object.assign(Object.assign({},o.extendedProps),o),{id:o.publicId,start:b,end:p,duration:p-b,allDay:Number(o.allDay),_seg:t})}function xq(t,e){let{pluginHooks:o}=e,M=o.isDraggableTransformers,{def:b,ui:p}=t.eventRange,n=p.startEditable;for(let r of M)n=r(n,b,p,e);return n}function _q(t,e){return t.isStart&&t.eventRange.ui.durationEditable&&e.options.eventResizableFromStart}function kq(t,e){return t.isEnd&&t.eventRange.ui.durationEditable}function _e(t,e,o,M,b,p,n){let{dateEnv:r,options:i}=o,{displayEventTime:a,displayEventEnd:s}=i,u=t.eventRange.def,A=t.eventRange.instance;a==null&&(a=M!==!1),s==null&&(s=b!==!1);let q=A.range.start,W=A.range.end,h=p||t.start||t.eventRange.range.start,m=n||t.end||t.eventRange.range.end,y=t0(q).valueOf()===t0(h).valueOf(),N=t0(u1(W,-1)).valueOf()===t0(u1(m,-1)).valueOf();return a&&!u.allDay&&(y||N)?(h=y?q:h,m=N?W:m,s&&u.hasEnd?r.formatRange(h,m,e,{forcedStartTzo:p?null:A.forcedStartTzo,forcedEndTzo:n?null:A.forcedEndTzo}):r.format(h,e,{forcedTzo:p?null:A.forcedStartTzo})):""}function _0(t,e,o){let M=t.eventRange.range;return{isPast:M.end<(o||e.start),isFuture:M.start>=(o||e.end),isToday:e&&o1(e,M.start)}}function Iq(t){let e=["fc-event"];return t.isMirror&&e.push("fc-event-mirror"),t.isDraggable&&e.push("fc-event-draggable"),(t.isStartResizable||t.isEndResizable)&&e.push("fc-event-resizable"),t.isDragging&&e.push("fc-event-dragging"),t.isResizing&&e.push("fc-event-resizing"),t.isSelected&&e.push("fc-event-selected"),t.isStart&&e.push("fc-event-start"),t.isEnd&&e.push("fc-event-end"),t.isPast&&e.push("fc-event-past"),t.isToday&&e.push("fc-event-today"),t.isFuture&&e.push("fc-event-future"),e}function M2(t){return t.instance?t.instance.instanceId:`${t.def.defId}:${t.range.start.toISOString()}`}function U2(t,e){let{def:o,instance:M}=t.eventRange,{url:b}=o;if(b)return{href:b};let{emitter:p,options:n}=e,{eventInteractive:r}=n;return r==null&&(r=o.interactive,r==null&&(r=!!p.hasHandlers("eventClick"))),r?ii(i=>{p.trigger("eventClick",{el:i.target,event:new c0(e,o,M),jsEvent:i,view:e.viewApi})}):{}}var Pq={start:g,end:g,allDay:Boolean};function Hq(t,e,o){let M=Uq(t,e),{range:b}=M;if(!b.start)return null;if(!b.end){if(o==null)return null;b.end=e.add(b.start,o)}return M}function Uq(t,e){let{refined:o,extra:M}=Xe(t,Pq),b=o.start?e.createMarkerMeta(o.start):null,p=o.end?e.createMarkerMeta(o.end):null,{allDay:n}=o;return n==null&&(n=b&&b.isTimeUnspecified&&(!p||p.isTimeUnspecified)),Object.assign({range:{start:b?b.marker:null,end:p?p.marker:null},allDay:n},M)}function uz(t,e){return wM(t.range,e.range)&&t.allDay===e.allDay&&jq(t,e)}function jq(t,e){for(let o in e)if(o!=="range"&&o!=="allDay"&&t[o]!==e[o])return!1;for(let o in t)if(!(o in e))return!1;return!0}function Fq(t,e){return Object.assign(Object.assign({},Ni(t.range,e,t.allDay)),{allDay:t.allDay})}function qz(t,e,o){return Object.assign(Object.assign({},Ni(t,e,o)),{timeZone:e.timeZone})}function Ni(t,e,o){return{start:e.toDate(t.start),end:e.toDate(t.end),startStr:e.formatIso(t.start,{omitTime:o}),endStr:e.formatIso(t.end,{omitTime:o})}}function Gq(t,e,o){let M=DM({editable:!1},o),b=mt(M.refined,M.extra,"",t.allDay,!0,o);return{def:b,ui:vi(b,e),instance:Pt(b.defId,t.range),range:t.range,isStart:!0,isEnd:!0}}function Gt(t,e,o){let M=!1,b=function(r){M||(M=!0,e(r))},p=function(r){M||(M=!0,o(r))},n=t(b,p);n&&typeof n.then=="function"&&n.then(b,p)}var hM=class extends Error{constructor(e,o){super(e),this.response=o}};function Yt(t,e,o){t=t.toUpperCase();let M={method:t};return t==="GET"?e+=(e.indexOf("?")===-1?"?":"&")+new URLSearchParams(o):(M.body=new URLSearchParams(o),M.headers={"Content-Type":"application/x-www-form-urlencoded"}),fetch(e,M).then(b=>{if(b.ok)return b.json().then(p=>[p,b],()=>{throw new hM("Failure parsing JSON",b)});throw new hM("Request failed",b)})}var gp;function Vt(){return gp==null&&(gp=Yq()),gp}function Yq(){if(typeof document>"u")return!0;let t=document.createElement("div");t.style.position="absolute",t.style.top="0px",t.style.left="0px",t.innerHTML="
",t.querySelector("table").style.height="100px",t.querySelector("div").style.height="100%",document.body.appendChild(t);let o=t.querySelector("div").offsetHeight>0;return document.body.removeChild(t),o}var vt=class extends X{constructor(){super(...arguments),this.state={forPrint:!1},this.handleBeforePrint=()=>{this.setState({forPrint:!0})},this.handleAfterPrint=()=>{this.setState({forPrint:!1})}}render(){let{props:e}=this,{options:o}=e,{forPrint:M}=this.state,b=M||o.height==="auto"||o.contentHeight==="auto",p=!b&&o.height!=null?o.height:"",n=["fc",M?"fc-media-print":"fc-media-screen",`fc-direction-${o.direction}`,e.theme.getClass("root")];return Vt()||n.push("fc-liquid-hack"),e.children(n,p,b,M)}componentDidMount(){let{emitter:e}=this.props;e.on("_beforeprint",this.handleBeforePrint),e.on("_afterprint",this.handleAfterPrint)}componentWillUnmount(){let{emitter:e}=this.props;e.off("_beforeprint",this.handleBeforePrint),e.off("_afterprint",this.handleAfterPrint)}},v1=class{constructor(e){this.component=e.component,this.isHitComboAllowed=e.isHitComboAllowed||null}destroy(){}};function Bi(t,e){return{component:t,el:e.el,useEventCenter:e.useEventCenter!=null?e.useEventCenter:!0,isHitComboAllowed:e.isHitComboAllowed||null}}function Kt(t){return{[t.component.uid]:t}}var j2={},N1=class{getCurrentData(){return this.currentDataManager.getCurrentData()}dispatch(e){this.currentDataManager.dispatch(e)}get view(){return this.getCurrentData().viewApi}batchRendering(e){e()}updateSize(){this.trigger("_resize",!0)}setOption(e,o){this.dispatch({type:"SET_OPTION",optionName:e,rawOptionValue:o})}getOption(e){return this.currentDataManager.currentCalendarOptionsInput[e]}getAvailableLocaleCodes(){return Object.keys(this.getCurrentData().availableRawLocales)}on(e,o){let{currentDataManager:M}=this;M.currentCalendarOptionsRefiners[e]?M.emitter.on(e,o):console.warn(`Unknown listener name '${e}'`)}off(e,o){this.currentDataManager.emitter.off(e,o)}trigger(e,...o){this.currentDataManager.emitter.trigger(e,...o)}changeView(e,o){this.batchRendering(()=>{if(this.unselect(),o)if(o.start&&o.end)this.dispatch({type:"CHANGE_VIEW_TYPE",viewType:e}),this.dispatch({type:"SET_OPTION",optionName:"visibleRange",rawOptionValue:o});else{let{dateEnv:M}=this.getCurrentData();this.dispatch({type:"CHANGE_VIEW_TYPE",viewType:e,dateMarker:M.createMarker(o)})}else this.dispatch({type:"CHANGE_VIEW_TYPE",viewType:e})})}zoomTo(e,o){let M=this.getCurrentData(),b;o=o||"day",b=M.viewSpecs[o]||this.getUnitViewSpec(o),this.unselect(),b?this.dispatch({type:"CHANGE_VIEW_TYPE",viewType:b.type,dateMarker:e}):this.dispatch({type:"CHANGE_DATE",dateMarker:e})}getUnitViewSpec(e){let{viewSpecs:o,toolbarConfig:M}=this.getCurrentData(),b=[].concat(M.header?M.header.viewsWithButtons:[],M.footer?M.footer.viewsWithButtons:[]),p,n;for(let r in o)b.push(r);for(p=0;p{this.dispatch({type:"REMOVE_EVENTS",eventStore:yi(e)})}})}getEventById(e){let o=this.getCurrentData(),{defs:M,instances:b}=o.eventStore;e=String(e);for(let p in M){let n=M[p];if(n.publicId===e){if(n.recurringDef)return new c0(o,n,null);for(let r in b){let i=b[r];if(i.defId===n.defId)return new c0(o,n,i)}}}return null}getEvents(){let e=this.getCurrentData();return I1(e.eventStore,e)}removeAllEvents(){this.dispatch({type:"REMOVE_ALL_EVENTS"})}getEventSources(){let e=this.getCurrentData(),o=e.eventSources,M=[];for(let b in o)M.push(new Le(e,o[b]));return M}getEventSourceById(e){let o=this.getCurrentData(),M=o.eventSources;e=String(e);for(let b in M)if(M[b].publicId===e)return new Le(o,M[b]);return null}addEventSource(e){let o=this.getCurrentData();if(e instanceof Le)return o.eventSources[e.internalEventSource.sourceId]||this.dispatch({type:"ADD_EVENT_SOURCES",sources:[e.internalEventSource]}),e;let M=sz(e,o);return M?(this.dispatch({type:"ADD_EVENT_SOURCES",sources:[M]}),new Le(o,M)):null}removeAllEventSources(){this.dispatch({type:"REMOVE_ALL_EVENT_SOURCES"})}refetchEvents(){this.dispatch({type:"FETCH_EVENT_SOURCES",isRefetch:!0})}scrollToTime(e){let o=Y(e);o&&this.trigger("_scrollRequest",{time:o})}};function fz(t,e){return t.left>=e.left&&t.left=e.top&&t.topthis.eventUiBuilders[u]||E(Vq));for(let s in o){let u=o[s],A=n[s]||Lp,q=this.eventUiBuilders[s];a[s]={businessHours:u.businessHours||e.businessHours,dateSelection:b[s]||null,eventStore:A,eventUiBases:q(e.eventUiBases[""],u.ui,p[s]),eventSelection:A.instances[e.eventSelection]?e.eventSelection:"",eventDrag:r[s]||null,eventResize:i[s]||null}}return a}_splitDateSpan(e){let o={};if(e){let M=this.getKeysForDateSpan(e);for(let b of M)o[b]=e}return o}_getKeysForEventDefs(e){return a0(e.defs,o=>this.getKeysForEventDef(o))}_splitEventStore(e,o){let{defs:M,instances:b}=e,p={};for(let n in M)for(let r of o[n])p[r]||(p[r]=K0()),p[r].defs[n]=M[n];for(let n in b){let r=b[n];for(let i of o[r.defId])p[i]&&(p[i].instances[n]=r)}return p}_splitIndividualUi(e,o){let M={};for(let b in e)if(b)for(let p of o[b])M[p]||(M[p]={}),M[p][b]=e[b];return M}_splitInteraction(e){let o={};if(e){let M=this._splitEventStore(e.affectedEvents,this._getKeysForEventDefs(e.affectedEvents)),b=this._getKeysForEventDefs(e.mutatedEvents),p=this._splitEventStore(e.mutatedEvents,b),n=r=>{o[r]||(o[r]={affectedEvents:M[r]||Lp,mutatedEvents:p[r]||Lp,isEvent:e.isEvent})};for(let r in M)n(r);for(let r in p)n(r)}return o}};function Vq(t,e,o){let M=[];t&&M.push(t),e&&M.push(e);let b={"":Ut(M)};return o&&Object.assign(b,o),b}function ke(t,e,o,M){return{dow:t.getUTCDay(),isDisabled:!!(M&&!o1(M.activeRange,t)),isOther:!!(M&&!o1(M.currentRange,t)),isToday:!!(e&&o1(e,t)),isPast:!!(o?to:e&&t>=e.end)}}function Oe(t,e){let o=["fc-day",`fc-day-${si[t.dow]}`];return t.isDisabled?o.push("fc-day-disabled"):(t.isToday&&(o.push("fc-day-today"),o.push(e.getClass("today"))),t.isPast&&o.push("fc-day-past"),t.isFuture&&o.push("fc-day-future"),t.isOther&&o.push("fc-day-other")),o}function kM(t,e){let o=["fc-slot",`fc-slot-${si[t.dow]}`];return t.isDisabled?o.push("fc-slot-disabled"):(t.isToday&&(o.push("fc-slot-today"),o.push(e.getClass("today"))),t.isPast&&o.push("fc-slot-past"),t.isFuture&&o.push("fc-slot-future")),o}var Kq=J({year:"numeric",month:"long",day:"numeric"}),Qq=J({week:"long"});function W1(t,e,o="day",M=!0){let{dateEnv:b,options:p,calendarApi:n}=t,r=b.format(e,o==="week"?Qq:Kq);if(p.navLinks){let i=b.toDate(e),a=s=>{let u=o==="day"?p.navLinkDayClick:o==="week"?p.navLinkWeekClick:null;typeof u=="function"?u.call(n,b.toDate(e),s):(typeof u=="string"&&(o=u),n.zoomTo(e,o))};return Object.assign({title:C2(p.navLinkHint,[r,i],r),"data-navlink":""},M?ci(a):{onClick:a})}return{"aria-label":r}}var yp=null;function F2(){return yp===null&&(yp=Zq()),yp}function Zq(){let t=document.createElement("div");ie(t,{position:"absolute",top:-1e3,left:0,border:0,padding:0,overflow:"scroll",direction:"rtl"}),t.innerHTML="
",document.body.appendChild(t);let o=t.firstChild.getBoundingClientRect().left>t.getBoundingClientRect().left;return e2(t),o}var vp;function IM(){return vp||(vp=Jq()),vp}function Jq(){let t=document.createElement("div");t.style.overflow="scroll",t.style.position="absolute",t.style.top="-9999px",t.style.left="-9999px",document.body.appendChild(t);let e=Si(t);return document.body.removeChild(t),e}function Si(t){return{x:t.offsetHeight-t.clientHeight,y:t.offsetWidth-t.clientWidth}}function PM(t,e=!1){let o=window.getComputedStyle(t),M=parseInt(o.borderLeftWidth,10)||0,b=parseInt(o.borderRightWidth,10)||0,p=parseInt(o.borderTopWidth,10)||0,n=parseInt(o.borderBottomWidth,10)||0,r=Si(t),i=r.y-M-b,a=r.x-p-n,s={borderLeft:M,borderRight:b,borderTop:p,borderBottom:n,scrollbarBottom:a,scrollbarLeft:0,scrollbarRight:0};return F2()&&o.direction==="rtl"?s.scrollbarLeft=i:s.scrollbarRight=i,e&&(s.paddingLeft=parseInt(o.paddingLeft,10)||0,s.paddingRight=parseInt(o.paddingRight,10)||0,s.paddingTop=parseInt(o.paddingTop,10)||0,s.paddingBottom=parseInt(o.paddingBottom,10)||0),s}function Qt(t,e=!1,o){let M=o?t.getBoundingClientRect():Zt(t),b=PM(t,e),p={left:M.left+b.borderLeft+b.scrollbarLeft,right:M.right-b.borderRight-b.scrollbarRight,top:M.top+b.borderTop,bottom:M.bottom-b.borderBottom-b.scrollbarBottom};return e&&(p.left+=b.paddingLeft,p.right-=b.paddingRight,p.top+=b.paddingTop,p.bottom-=b.paddingBottom),p}function Zt(t){let e=t.getBoundingClientRect();return{left:e.left+window.pageXOffset,top:e.top+window.pageYOffset,right:e.right+window.pageXOffset,bottom:e.bottom+window.pageYOffset}}function $q(t){let e=HM(t),o=t.getBoundingClientRect();for(let M of e){let b=xM(o,M.getBoundingClientRect());if(b)o=b;else return null}return o}function HM(t){let e=[];for(;t instanceof HTMLElement;){let o=window.getComputedStyle(t);if(o.position==="fixed")break;/(auto|scroll)/.test(o.overflow+o.overflowY+o.overflowX)&&e.push(t),t=t.parentNode}return e}var G0=class{constructor(e,o,M,b){this.els=o;let p=this.originClientRect=e.getBoundingClientRect();M&&this.buildElHorizontals(p.left),b&&this.buildElVerticals(p.top)}buildElHorizontals(e){let o=[],M=[];for(let b of this.els){let p=b.getBoundingClientRect();o.push(p.left-e),M.push(p.right-e)}this.lefts=o,this.rights=M}buildElVerticals(e){let o=[],M=[];for(let b of this.els){let p=b.getBoundingClientRect();o.push(p.top-e),M.push(p.bottom-e)}this.tops=o,this.bottoms=M}leftToIndex(e){let{lefts:o,rights:M}=this,b=o.length,p;for(p=0;p=o[p]&&e=o[p]&&e0}canScrollHorizontally(){return this.getMaxScrollLeft()>0}canScrollUp(){return this.getScrollTop()>0}canScrollDown(){return this.getScrollTop()0}canScrollRight(){return this.getScrollLeft()o.thickness){this.getEntryThickness=e,this.strictOrder=!1,this.allowReslicing=!1,this.maxCoord=-1,this.maxStackCnt=-1,this.levelCoords=[],this.entriesByLevel=[],this.stackCnts={}}addSegs(e){let o=[];for(let M of e)this.insertEntry(M,o);return o}insertEntry(e,o){let M=this.findInsertion(e);return this.isInsertionValid(M,e)?(this.insertEntryAt(e,M),1):this.handleInvalidInsertion(M,e,o)}isInsertionValid(e,o){return(this.maxCoord===-1||e.levelCoord+this.getEntryThickness(o)<=this.maxCoord)&&(this.maxStackCnt===-1||e.stackCntr.end&&(b+=this.insertEntry({index:e.index,thickness:e.thickness,span:{start:r.end,end:n.end}},p)),b?(M.push({index:e.index,thickness:e.thickness,span:$t(r,n)},...p),b):(M.push(e),0)}insertEntryAt(e,o){let{entriesByLevel:M,levelCoords:b}=this;o.lateral===-1?(Np(b,o.level,o.levelCoord),Np(M,o.level,[e])):Np(M[o.level],o.lateral,e),this.stackCnts[x1(e)]=o.stackCnt}findInsertion(e){let{levelCoords:o,entriesByLevel:M,strictOrder:b,stackCnts:p}=this,n=o.length,r=0,i=-1,a=-1,s=null,u=0;for(let W=0;W=r+this.getEntryThickness(e))break;let m=M[W],y,N=Et(m,e.span.start,Tt),w=N[0]+N[1];for(;(y=m[w])&&y.span.startr&&(r=x,s=y,i=W,a=w),x===r&&(u=Math.max(u,p[x1(y)]+1)),w+=1}}let A=0;if(s)for(A=i+1;Ao(t[b-1]))return[b,0];for(;Mn)M=p+1;else return[p,1]}return[M,0]}var wt=class{constructor(e,o){this.emitter=new y1}destroy(){}setMirrorIsVisible(e){}setMirrorNeedsRevert(e){}setAutoScrollEnabled(e){}},T0={};function UM(t,e){return!t||e>10?J({weekday:"short"}):e>1?J({weekday:"short",month:"numeric",day:"numeric",omitCommas:!0}):J({weekday:"long"})}var Ti="fc-col-header-cell";function Ei(t){return t.text}var E2=class extends X{render(){let{dateEnv:e,options:o,theme:M,viewApi:b}=this.context,{props:p}=this,{date:n,dateProfile:r}=p,i=ke(n,p.todayRange,null,r),a=[Ti].concat(Oe(i,M)),s=e.format(n,p.dayHeaderFormat),u=!i.isDisabled&&p.colCnt>1?W1(this.context,n):{},A=Object.assign(Object.assign(Object.assign({date:e.toDate(n),view:b},p.extraRenderProps),{text:s}),i);return d(b0,{elTag:"th",elClasses:a,elAttrs:Object.assign({role:"columnheader",colSpan:p.colSpan,"data-date":i.isDisabled?void 0:k1(n)},p.extraDataAttrs),renderProps:A,generatorName:"dayHeaderContent",customGenerator:o.dayHeaderContent,defaultGenerator:Ei,classNameGenerator:o.dayHeaderClassNames,didMount:o.dayHeaderDidMount,willUnmount:o.dayHeaderWillUnmount},q=>d("div",{className:"fc-scrollgrid-sync-inner"},!i.isDisabled&&d(q,{elTag:"a",elAttrs:u,elClasses:["fc-col-header-cell-cushion",p.isSticky&&"fc-sticky"]})))}},tf=J({weekday:"long"}),w2=class extends X{render(){let{props:e}=this,{dateEnv:o,theme:M,viewApi:b,options:p}=this.context,n=d0(new Date(2592e5),e.dow),r={dow:e.dow,isDisabled:!1,isFuture:!1,isPast:!1,isToday:!1,isOther:!1},i=o.format(n,e.dayHeaderFormat),a=Object.assign(Object.assign(Object.assign(Object.assign({date:n},r),{view:b}),e.extraRenderProps),{text:i});return d(b0,{elTag:"th",elClasses:[Ti,...Oe(r,M),...e.extraClassNames||[]],elAttrs:Object.assign({role:"columnheader",colSpan:e.colSpan},e.extraDataAttrs),renderProps:a,generatorName:"dayHeaderContent",customGenerator:p.dayHeaderContent,defaultGenerator:Ei,classNameGenerator:p.dayHeaderClassNames,didMount:p.dayHeaderDidMount,willUnmount:p.dayHeaderWillUnmount},s=>d("div",{className:"fc-scrollgrid-sync-inner"},d(s,{elTag:"a",elClasses:["fc-col-header-cell-cushion",e.isSticky&&"fc-sticky"],elAttrs:{"aria-label":o.format(n,tf)}})))}},L0=class extends D0{constructor(e,o){super(e,o),this.initialNowDate=P2(o.options.now,o.dateEnv),this.initialNowQueriedMs=new Date().valueOf(),this.state=this.computeTiming().currentState}render(){let{props:e,state:o}=this;return e.children(o.nowDate,o.todayRange)}componentDidMount(){this.setTimeout()}componentDidUpdate(e){e.unit!==this.props.unit&&(this.clearTimeout(),this.setTimeout())}componentWillUnmount(){this.clearTimeout()}computeTiming(){let{props:e,context:o}=this,M=u1(this.initialNowDate,new Date().valueOf()-this.initialNowQueriedMs),b=o.dateEnv.startOf(M,e.unit),p=o.dateEnv.add(b,Y(1,e.unit)),n=p.valueOf()-M.valueOf();return n=Math.min(1e3*60*60*24,n),{currentState:{nowDate:b,todayRange:oi(b)},nextState:{nowDate:p,todayRange:oi(p)},waitMs:n}}setTimeout(){let{nextState:e,waitMs:o}=this.computeTiming();this.timeoutId=setTimeout(()=>{this.setState(e,()=>{this.setTimeout()})},o)}clearTimeout(){this.timeoutId&&clearTimeout(this.timeoutId)}};L0.contextType=p1;function oi(t){let e=t0(t),o=d0(e,1);return{start:e,end:o}}var be=class extends X{constructor(){super(...arguments),this.createDayHeaderFormatter=E(of)}render(){let{context:e}=this,{dates:o,dateProfile:M,datesRepDistinctDays:b,renderIntro:p}=this.props,n=this.createDayHeaderFormatter(e.options.dayHeaderFormat,b,o.length);return d(L0,{unit:"day"},(r,i)=>d("tr",{role:"row"},p&&p("day"),o.map(a=>b?d(E2,{key:a.toISOString(),date:a,dateProfile:M,todayRange:i,colCnt:o.length,dayHeaderFormat:n}):d(w2,{key:a.getUTCDay(),dow:a.getUTCDay(),dayHeaderFormat:n}))))}};function of(t,e,o){return t||UM(e,o)}var Je=class{constructor(e,o){let M=e.start,{end:b}=e,p=[],n=[],r=-1;for(;M=o.length?o[o.length-1]+1:o[M]}},$e=class{constructor(e,o){let{dates:M}=e,b,p,n;if(o){for(p=M[0].getUTCDay(),b=1;bp.groupId===t)):typeof t=="object"&&t?Bp(Qe(t,e,b)):[]}function Bp(t){let{instances:e}=t,o=[];for(let M in e)o.push(e[M].range);return o}function zf(t,e){for(let o of t)if(k2(o,e))return!0;return!1}var sM=/^(visible|hidden)$/,Te=class extends X{constructor(){super(...arguments),this.handleEl=e=>{this.el=e,V0(this.props.elRef,e)}}render(){let{props:e}=this,{liquid:o,liquidIsAbsolute:M}=e,b=o&&M,p=["fc-scroller"];return o&&(M?p.push("fc-scroller-liquid-absolute"):p.push("fc-scroller-liquid")),d("div",{ref:this.handleEl,className:p.join(" "),style:{overflowX:e.overflowX,overflowY:e.overflowY,left:b&&-(e.overcomeLeft||0)||"",right:b&&-(e.overcomeRight||0)||"",bottom:b&&-(e.overcomeBottom||0)||"",marginLeft:!b&&-(e.overcomeLeft||0)||"",marginRight:!b&&-(e.overcomeRight||0)||"",marginBottom:!b&&-(e.overcomeBottom||0)||"",maxHeight:e.maxHeight||""}},e.children)}needsXScrolling(){if(sM.test(this.props.overflowX))return!1;let{el:e}=this,o=this.el.getBoundingClientRect().width-this.getYScrollbarWidth(),{children:M}=e;for(let b=0;bo)return!0;return!1}needsYScrolling(){if(sM.test(this.props.overflowY))return!1;let{el:e}=this,o=this.el.getBoundingClientRect().height-this.getXScrollbarWidth(),{children:M}=e;for(let b=0;bo)return!0;return!1}getXScrollbarWidth(){return sM.test(this.props.overflowX)?0:this.el.offsetHeight-this.el.clientHeight}getYScrollbarWidth(){return sM.test(this.props.overflowY)?0:this.el.offsetWidth-this.el.clientWidth}},W0=class{constructor(e){this.masterCallback=e,this.currentMap={},this.depths={},this.callbackMap={},this.handleValue=(o,M)=>{let{depths:b,currentMap:p}=this,n=!1,r=!1;o!==null?(n=M in p,p[M]=o,b[M]=(b[M]||0)+1,r=!0):(b[M]-=1,b[M]||(delete p[M],delete this.callbackMap[M],n=!0)),this.masterCallback&&(n&&this.masterCallback(null,String(M)),r&&this.masterCallback(o,String(M)))}}createRef(e){let o=this.callbackMap[e];return o||(o=this.callbackMap[e]=M=>{this.handleValue(M,String(e))}),o}collect(e,o,M){return EM(this.currentMap,e,o,M)}getAll(){return TM(this.currentMap)}};function GM(t){let e=f1(t,".fc-scrollgrid-shrink"),o=0;for(let M of e)o=Math.max(o,yu(M));return Math.ceil(o)}function eo(t,e){return t.liquid&&e.liquid}function YM(t,e){return e.maxHeight!=null||eo(t,e)}function VM(t,e,o,M){let{expandRows:b}=o;return typeof e.content=="function"?e.content(o):d("table",{role:"presentation",className:[e.tableClassName,t.syncRowHeights?"fc-scrollgrid-sync-table":""].join(" "),style:{minWidth:o.tableMinWidth,width:o.clientWidth,height:b?o.clientHeight:""}},o.tableColGroupNode,d(M?"thead":"tbody",{role:"presentation"},typeof e.rowContent=="function"?e.rowContent(o):e.rowContent))}function KM(t,e){return x0(t,e,R0)}function QM(t,e){let o=[];for(let M of t){let b=M.span||1;for(let p=0;pe,KM),this.renderMicroColGroup=E(QM),this.scrollerRefs=new W0,this.scrollerElRefs=new W0(this._handleScrollerEl.bind(this)),this.state={shrinkWidth:null,forceYScrollbars:!1,scrollerClientWidths:{},scrollerClientHeights:{}},this.handleSizing=()=>{this.safeSetState(Object.assign({shrinkWidth:this.computeShrinkWidth()},this.computeScrollerDims()))}}render(){let{props:e,state:o,context:M}=this,b=e.sections||[],p=this.processCols(e.cols),n=this.renderMicroColGroup(p,o.shrinkWidth),r=$M(e.liquid,M);e.collapsibleWidth&&r.push("fc-scrollgrid-collapsible");let i=b.length,a=0,s,u=[],A=[],q=[];for(;a{}},b);return d(b?"th":"td",{ref:M.elRef,role:"presentation"},d("div",{className:`fc-scroller-harness${s?" fc-scroller-harness-liquid":""}`},d(Te,{ref:this.scrollerRefs.createRef(A),elRef:this.scrollerElRefs.createRef(A),overflowY:u,overflowX:p.liquid?"hidden":"visible",maxHeight:e.maxHeight,liquid:s,liquidIsAbsolute:!0},q)))}_handleScrollerEl(e,o){let M=nf(this.props.sections,o);M&&V0(M.chunk.scrollerElRef,e)}componentDidMount(){this.handleSizing(),this.context.addResizeHandler(this.handleSizing)}componentDidUpdate(){this.handleSizing()}componentWillUnmount(){this.context.removeResizeHandler(this.handleSizing)}computeShrinkWidth(){return JM(this.props.cols)?GM(this.scrollerElRefs.getAll()):0}computeScrollerDims(){let e=IM(),{scrollerRefs:o,scrollerElRefs:M}=this,b=!1,p={},n={};for(let r in o.currentMap){let i=o.currentMap[r];if(i&&i.needsYScrolling()){b=!0;break}}for(let r of this.props.sections){let i=r.key,a=M.currentMap[i];if(a){let s=a.parentNode;p[i]=Math.floor(s.getBoundingClientRect().width-(b?e.y:0)),n[i]=Math.floor(s.getBoundingClientRect().height)}}return{forceYScrollbars:b,scrollerClientWidths:p,scrollerClientHeights:n}}};Ee.addStateEquality({scrollerClientWidths:R0,scrollerClientHeights:R0});function nf(t,e){for(let o of t)if(o.key===e)return o;return null}var ze=class extends X{constructor(){super(...arguments),this.handleEl=e=>{this.el=e,e&&ti(e,this.props.seg)}}render(){let{props:e,context:o}=this,{options:M}=o,{seg:b}=e,{eventRange:p}=b,{ui:n}=p,r={event:new c0(o,p.def,p.instance),view:o.viewApi,timeText:e.timeText,textColor:n.textColor,backgroundColor:n.backgroundColor,borderColor:n.borderColor,isDraggable:!e.disableDragging&&xq(b,o),isStartResizable:!e.disableResizing&&_q(b,o),isEndResizable:!e.disableResizing&&kq(b),isMirror:!!(e.isDragging||e.isResizing||e.isDateSelecting),isStart:!!b.isStart,isEnd:!!b.isEnd,isPast:!!e.isPast,isFuture:!!e.isFuture,isToday:!!e.isToday,isSelected:!!e.isSelected,isDragging:!!e.isDragging,isResizing:!!e.isResizing};return d(b0,Object.assign({},e,{elRef:this.handleEl,elClasses:[...Iq(r),...b.eventRange.ui.classNames,...e.elClasses||[]],renderProps:r,generatorName:"eventContent",customGenerator:M.eventContent,defaultGenerator:e.defaultGenerator,classNameGenerator:M.eventClassNames,didMount:M.eventDidMount,willUnmount:M.eventWillUnmount}))}componentDidUpdate(e){this.el&&this.props.seg!==e.seg&&ti(this.el,this.props.seg)}},ne=class extends X{render(){let{props:e,context:o}=this,{options:M}=o,{seg:b}=e,{ui:p}=b.eventRange,n=M.eventTimeFormat||e.defaultTimeFormat,r=_e(b,n,o,e.defaultDisplayEventTime,e.defaultDisplayEventEnd);return d(ze,Object.assign({},e,{elTag:"a",elStyle:{borderColor:p.borderColor,backgroundColor:p.backgroundColor},elAttrs:U2(b,o),defaultGenerator:rf,timeText:r}),(i,a)=>d(H,null,d(i,{elTag:"div",elClasses:["fc-event-main"],elStyle:{color:a.textColor}}),!!a.isStartResizable&&d("div",{className:"fc-event-resizer fc-event-resizer-start"}),!!a.isEndResizable&&d("div",{className:"fc-event-resizer fc-event-resizer-end"})))}};function rf(t){return d("div",{className:"fc-event-main-frame"},t.timeText&&d("div",{className:"fc-event-time"},t.timeText),d("div",{className:"fc-event-title-container"},d("div",{className:"fc-event-title fc-sticky"},t.event.title||d(H,null,"\xA0"))))}var P1=t=>d(p1.Consumer,null,e=>{let{options:o}=e,M={isAxis:t.isAxis,date:e.dateEnv.toDate(t.date),view:e.viewApi};return d(b0,Object.assign({},t,{elTag:t.elTag||"div",renderProps:M,generatorName:"nowIndicatorContent",customGenerator:o.nowIndicatorContent,classNameGenerator:o.nowIndicatorClassNames,didMount:o.nowIndicatorDidMount,willUnmount:o.nowIndicatorWillUnmount}))}),cf=J({day:"numeric"}),we=class extends X{constructor(){super(...arguments),this.refineRenderProps=i1(af)}render(){let{props:e,context:o}=this,{options:M}=o,b=this.refineRenderProps({date:e.date,dateProfile:e.dateProfile,todayRange:e.todayRange,isMonthStart:e.isMonthStart||!1,showDayNumber:e.showDayNumber,extraRenderProps:e.extraRenderProps,viewApi:o.viewApi,dateEnv:o.dateEnv,monthStartFormat:M.monthStartFormat});return d(b0,Object.assign({},e,{elClasses:[...Oe(b,o.theme),...e.elClasses||[]],elAttrs:Object.assign(Object.assign({},e.elAttrs),b.isDisabled?{}:{"data-date":k1(e.date)}),renderProps:b,generatorName:"dayCellContent",customGenerator:M.dayCellContent,defaultGenerator:e.defaultGenerator,classNameGenerator:b.isDisabled?void 0:M.dayCellClassNames,didMount:M.dayCellDidMount,willUnmount:M.dayCellWillUnmount}))}};function G2(t){return!!(t.dayCellContent||_p("dayCellContent",t))}function af(t){let{date:e,dateEnv:o,dateProfile:M,isMonthStart:b}=t,p=ke(e,t.todayRange,null,M),n=t.showDayNumber?o.format(e,b?t.monthStartFormat:cf):"";return Object.assign(Object.assign(Object.assign({date:o.toDate(e),view:t.viewApi},p),{isMonthStart:b,dayNumberText:n}),t.extraRenderProps)}var re=class extends X{render(){let{props:e}=this,{seg:o}=e;return d(ze,{elTag:"div",elClasses:["fc-bg-event"],elStyle:{backgroundColor:o.eventRange.ui.backgroundColor},defaultGenerator:sf,seg:o,timeText:"",isDragging:!1,isResizing:!1,isDateSelecting:!1,isSelected:!1,isPast:e.isPast,isFuture:e.isFuture,isToday:e.isToday,disableDragging:!0,disableResizing:!0})}};function sf(t){let{title:e}=t.event;return e&&d("div",{className:"fc-event-title"},t.event.title)}function b2(t){return d("div",{className:`fc-${t}`})}var to=t=>d(p1.Consumer,null,e=>{let{dateEnv:o,options:M}=e,{date:b}=t,p=M.weekNumberFormat||t.defaultFormat,n=o.computeWeekNumber(b),r=o.format(b,p);return d(b0,Object.assign({},t,{renderProps:{num:n,text:r,date:b},generatorName:"weekNumberContent",customGenerator:M.weekNumberContent,defaultGenerator:Of,classNameGenerator:M.weekNumberClassNames,didMount:M.weekNumberDidMount,willUnmount:M.weekNumberWillUnmount}))});function Of(t){return t.text}var Sp=10,kp=class extends X{constructor(){super(...arguments),this.state={titleId:M1()},this.handleRootEl=e=>{this.rootEl=e,this.props.elRef&&V0(this.props.elRef,e)},this.handleDocumentMouseDown=e=>{let o=mM(e);this.rootEl.contains(o)||this.handleCloseClick()},this.handleDocumentKeyDown=e=>{e.key==="Escape"&&this.handleCloseClick()},this.handleCloseClick=()=>{let{onClose:e}=this.props;e&&e()}}render(){let{theme:e,options:o}=this.context,{props:M,state:b}=this,p=["fc-popover",e.getClass("popover")].concat(M.extraClassNames||[]);return hp(d("div",Object.assign({},M.extraAttrs,{id:M.id,className:p.join(" "),"aria-labelledby":b.titleId,ref:this.handleRootEl}),d("div",{className:"fc-popover-header "+e.getClass("popoverHeader")},d("span",{className:"fc-popover-title",id:b.titleId},M.title),d("span",{className:"fc-popover-close "+e.getIconClass("close"),title:o.closeHint,onClick:this.handleCloseClick})),d("div",{className:"fc-popover-body "+e.getClass("popoverContent")},M.children)),M.parentEl)}componentDidMount(){document.addEventListener("mousedown",this.handleDocumentMouseDown),document.addEventListener("keydown",this.handleDocumentKeyDown),this.updateSize()}componentWillUnmount(){document.removeEventListener("mousedown",this.handleDocumentMouseDown),document.removeEventListener("keydown",this.handleDocumentKeyDown)}updateSize(){let{isRtl:e}=this.context,{alignmentEl:o,alignGridTop:M}=this.props,{rootEl:b}=this,p=$q(o);if(p){let n=b.getBoundingClientRect(),r=M?m0(o,".fc-scrollgrid").getBoundingClientRect().top:p.top,i=e?p.right-n.width:p.left;r=Math.max(r,Sp),i=Math.min(i,document.documentElement.clientWidth-Sp-n.width),i=Math.max(i,Sp);let a=b.offsetParent.getBoundingClientRect();ie(b,{top:r-a.top,left:i-a.left})}}},Ip=class extends s0{constructor(){super(...arguments),this.handleRootEl=e=>{this.rootEl=e,e?this.context.registerInteractiveComponent(this,{el:e,useEventCenter:!1}):this.context.unregisterInteractiveComponent(this)}}render(){let{options:e,dateEnv:o}=this.context,{props:M}=this,{startDate:b,todayRange:p,dateProfile:n}=M,r=o.format(b,e.dayPopoverFormat);return d(we,{elRef:this.handleRootEl,date:b,dateProfile:n,todayRange:p},(i,a,s)=>d(kp,{elRef:s.ref,id:M.id,title:r,extraClassNames:["fc-more-popover"].concat(s.className||[]),extraAttrs:s,parentEl:M.parentEl,alignmentEl:M.alignmentEl,alignGridTop:M.alignGridTop,onClose:M.onClose},G2(e)&&d(i,{elTag:"div",elClasses:["fc-more-popover-misc"]}),M.children))}queryHit(e,o,M,b){let{rootEl:p,props:n}=this;return e>=0&&e=0&&o{this.linkEl=e,this.props.elRef&&V0(this.props.elRef,e)},this.handleClick=e=>{let{props:o,context:M}=this,{moreLinkClick:b}=M.options,p=Mi(o).start;function n(r){let{def:i,instance:a,range:s}=r.eventRange;return{event:new c0(M,i,a),start:M.dateEnv.toDate(s.start),end:M.dateEnv.toDate(s.end),isStart:r.isStart,isEnd:r.isEnd}}typeof b=="function"&&(b=b({date:p,allDay:!!o.allDayDate,allSegs:o.allSegs.map(n),hiddenSegs:o.hiddenSegs.map(n),jsEvent:e,view:M.viewApi})),!b||b==="popover"?this.setState({isPopoverOpen:!0}):typeof b=="string"&&M.calendarApi.zoomTo(p,b)},this.handlePopoverClose=()=>{this.setState({isPopoverOpen:!1})}}render(){let{props:e,state:o}=this;return d(p1.Consumer,null,M=>{let{viewApi:b,options:p,calendarApi:n}=M,{moreLinkText:r}=p,{moreCnt:i}=e,a=Mi(e),s=typeof r=="function"?r.call(n,i):`+${i} ${r}`,u=C2(p.moreLinkHint,[i],s),A={num:i,shortText:`+${i}`,text:s,view:b};return d(H,null,!!e.moreCnt&&d(b0,{elTag:e.elTag||"a",elRef:this.handleLinkEl,elClasses:[...e.elClasses||[],"fc-more-link"],elStyle:e.elStyle,elAttrs:Object.assign(Object.assign(Object.assign({},e.elAttrs),ci(this.handleClick)),{title:u,"aria-expanded":o.isPopoverOpen,"aria-controls":o.isPopoverOpen?o.popoverId:""}),renderProps:A,generatorName:"moreLinkContent",customGenerator:p.moreLinkContent,defaultGenerator:e.defaultGenerator||lf,classNameGenerator:p.moreLinkClassNames,didMount:p.moreLinkDidMount,willUnmount:p.moreLinkWillUnmount},e.children),o.isPopoverOpen&&d(Ip,{id:o.popoverId,startDate:a.start,endDate:a.end,dateProfile:e.dateProfile,todayRange:e.todayRange,extraDateSpan:e.extraDateSpan,parentEl:this.parentEl,alignmentEl:e.alignmentElRef?e.alignmentElRef.current:this.linkEl,alignGridTop:e.alignGridTop,forceTimed:e.forceTimed,onClose:this.handlePopoverClose},e.popoverContent()))})}componentDidMount(){this.updateParentEl()}componentDidUpdate(){this.updateParentEl()}updateParentEl(){this.linkEl&&(this.parentEl=m0(this.linkEl,".fc-view-harness"))}};function lf(t){return t.text}function Mi(t){if(t.allDayDate)return{start:t.allDayDate,end:d0(t.allDayDate,1)};let{hiddenSegs:e}=t;return{start:p2(e),end:df(e)}}function p2(t){return t.reduce(Af).eventRange.range.start}function Af(t,e){return t.eventRange.range.starte.eventRange.range.end?t:e}var qf=[],Pi={code:"en",week:{dow:0,doy:4},direction:"ltr",buttonText:{prev:"prev",next:"next",prevYear:"prev year",nextYear:"next year",year:"year",today:"today",month:"month",week:"week",day:"day",list:"list"},weekText:"W",weekTextLong:"Week",closeHint:"Close",timeHint:"Time",eventHint:"Event",allDayText:"all-day",moreLinkText:"more",noEventsText:"No events to display"},Hi=Object.assign(Object.assign({},Pi),{buttonHints:{prev:"Previous $0",next:"Next $0",today(t,e){return e==="day"?"Today":`This ${t}`}},viewHint:"$0 view",navLinkHint:"Go to $0",moreLinkHint(t){return`Show ${t} more event${t===1?"":"s"}`}});function ff(t){let e=t.length>0?t[0].code:"en",o=qf.concat(t),M={en:Hi};for(let b of o)M[b.code]=b;return{map:M,defaultCode:e}}function Ui(t,e){return typeof t=="object"&&!Array.isArray(t)?ji(t.code,[t.code],t):Wf(t,e)}function Wf(t,e){let o=[].concat(t||[]),M=hf(o,e)||Hi;return ji(t,o,M)}function hf(t,e){for(let o=0;o0;b-=1){let p=M.slice(0,b).join("-");if(e[p])return e[p]}}return null}function ji(t,e,o){let M=SM([Pi,o],["buttonText"]);delete M.code;let{week:b}=M;return delete M.week,{codeArg:t,codes:e,week:b,simpleNumberFormat:new Intl.NumberFormat(t),options:M}}function $(t){return{id:b1(),name:t.name,premiumReleaseDate:t.premiumReleaseDate?new Date(t.premiumReleaseDate):void 0,deps:t.deps||[],reducers:t.reducers||[],isLoadingFuncs:t.isLoadingFuncs||[],contextInit:[].concat(t.contextInit||[]),eventRefiners:t.eventRefiners||{},eventDefMemberAdders:t.eventDefMemberAdders||[],eventSourceRefiners:t.eventSourceRefiners||{},isDraggableTransformers:t.isDraggableTransformers||[],eventDragMutationMassagers:t.eventDragMutationMassagers||[],eventDefMutationAppliers:t.eventDefMutationAppliers||[],dateSelectionTransformers:t.dateSelectionTransformers||[],datePointTransforms:t.datePointTransforms||[],dateSpanTransforms:t.dateSpanTransforms||[],views:t.views||{},viewPropsTransformers:t.viewPropsTransformers||[],isPropsValid:t.isPropsValid||null,externalDefTransforms:t.externalDefTransforms||[],viewContainerAppends:t.viewContainerAppends||[],eventDropTransformers:t.eventDropTransformers||[],componentInteractions:t.componentInteractions||[],calendarInteractions:t.calendarInteractions||[],themeClasses:t.themeClasses||{},eventSourceDefs:t.eventSourceDefs||[],cmdFormatter:t.cmdFormatter,recurringTypes:t.recurringTypes||[],namedTimeZonedImpl:t.namedTimeZonedImpl,initialView:t.initialView||"",elementDraggingImpl:t.elementDraggingImpl,optionChangeHandlers:t.optionChangeHandlers||{},scrollGridImpl:t.scrollGridImpl||null,listenerRefiners:t.listenerRefiners||{},optionRefiners:t.optionRefiners||{},propSetHandlers:t.propSetHandlers||{}}}function Rf(t,e){let o={},M={premiumReleaseDate:void 0,reducers:[],isLoadingFuncs:[],contextInit:[],eventRefiners:{},eventDefMemberAdders:[],eventSourceRefiners:{},isDraggableTransformers:[],eventDragMutationMassagers:[],eventDefMutationAppliers:[],dateSelectionTransformers:[],datePointTransforms:[],dateSpanTransforms:[],views:{},viewPropsTransformers:[],isPropsValid:null,externalDefTransforms:[],viewContainerAppends:[],eventDropTransformers:[],componentInteractions:[],calendarInteractions:[],themeClasses:{},eventSourceDefs:[],cmdFormatter:null,recurringTypes:[],namedTimeZonedImpl:null,initialView:"",elementDraggingImpl:null,optionChangeHandlers:{},scrollGridImpl:null,listenerRefiners:{},optionRefiners:{},propSetHandlers:{}};function b(p){for(let n of p){let r=n.name,i=o[r];i===void 0?(o[r]=n.id,b(n.deps),M=gf(M,n)):i!==n.id&&console.warn(`Duplicate plugin '${r}'`)}}return t&&b(t),b(e),M}function mf(){let t=[],e=[],o;return(M,b)=>((!o||!x0(M,t)||!x0(b,e))&&(o=Rf(M,b)),t=M,e=b,o)}function gf(t,e){return{premiumReleaseDate:Lf(t.premiumReleaseDate,e.premiumReleaseDate),reducers:t.reducers.concat(e.reducers),isLoadingFuncs:t.isLoadingFuncs.concat(e.isLoadingFuncs),contextInit:t.contextInit.concat(e.contextInit),eventRefiners:Object.assign(Object.assign({},t.eventRefiners),e.eventRefiners),eventDefMemberAdders:t.eventDefMemberAdders.concat(e.eventDefMemberAdders),eventSourceRefiners:Object.assign(Object.assign({},t.eventSourceRefiners),e.eventSourceRefiners),isDraggableTransformers:t.isDraggableTransformers.concat(e.isDraggableTransformers),eventDragMutationMassagers:t.eventDragMutationMassagers.concat(e.eventDragMutationMassagers),eventDefMutationAppliers:t.eventDefMutationAppliers.concat(e.eventDefMutationAppliers),dateSelectionTransformers:t.dateSelectionTransformers.concat(e.dateSelectionTransformers),datePointTransforms:t.datePointTransforms.concat(e.datePointTransforms),dateSpanTransforms:t.dateSpanTransforms.concat(e.dateSpanTransforms),views:Object.assign(Object.assign({},t.views),e.views),viewPropsTransformers:t.viewPropsTransformers.concat(e.viewPropsTransformers),isPropsValid:e.isPropsValid||t.isPropsValid,externalDefTransforms:t.externalDefTransforms.concat(e.externalDefTransforms),viewContainerAppends:t.viewContainerAppends.concat(e.viewContainerAppends),eventDropTransformers:t.eventDropTransformers.concat(e.eventDropTransformers),calendarInteractions:t.calendarInteractions.concat(e.calendarInteractions),componentInteractions:t.componentInteractions.concat(e.componentInteractions),themeClasses:Object.assign(Object.assign({},t.themeClasses),e.themeClasses),eventSourceDefs:t.eventSourceDefs.concat(e.eventSourceDefs),cmdFormatter:e.cmdFormatter||t.cmdFormatter,recurringTypes:t.recurringTypes.concat(e.recurringTypes),namedTimeZonedImpl:e.namedTimeZonedImpl||t.namedTimeZonedImpl,initialView:t.initialView||e.initialView,elementDraggingImpl:t.elementDraggingImpl||e.elementDraggingImpl,optionChangeHandlers:Object.assign(Object.assign({},t.optionChangeHandlers),e.optionChangeHandlers),scrollGridImpl:e.scrollGridImpl||t.scrollGridImpl,listenerRefiners:Object.assign(Object.assign({},t.listenerRefiners),e.listenerRefiners),optionRefiners:Object.assign(Object.assign({},t.optionRefiners),e.optionRefiners),propSetHandlers:Object.assign(Object.assign({},t.propSetHandlers),e.propSetHandlers)}}function Lf(t,e){return t===void 0?e:e===void 0?t:new Date(Math.max(t.valueOf(),e.valueOf()))}var H1=class extends oe{};H1.prototype.classes={root:"fc-theme-standard",tableCellShaded:"fc-cell-shaded",buttonGroup:"fc-button-group",button:"fc-button fc-button-primary",buttonActive:"fc-button-active"};H1.prototype.baseIconClass="fc-icon";H1.prototype.iconClasses={close:"fc-icon-x",prev:"fc-icon-chevron-left",next:"fc-icon-chevron-right",prevYear:"fc-icon-chevrons-left",nextYear:"fc-icon-chevrons-right"};H1.prototype.rtlIconClasses={prev:"fc-icon-chevron-right",next:"fc-icon-chevron-left",prevYear:"fc-icon-chevrons-right",nextYear:"fc-icon-chevrons-left"};H1.prototype.iconOverrideOption="buttonIcons";H1.prototype.iconOverrideCustomButtonOption="icon";H1.prototype.iconOverridePrefix="fc-icon-";function yf(t,e){let o={},M;for(M in t)Lz(M,o,t,e);for(M in e)Lz(M,o,t,e);return o}function Lz(t,e,o,M){if(e[t])return e[t];let b=vf(t,e,o,M);return b&&(e[t]=b),b}function vf(t,e,o,M){let b=o[t],p=M[t],n=s=>b&&b[s]!==null?b[s]:p&&p[s]!==null?p[s]:null,r=n("component"),i=n("superType"),a=null;if(i){if(i===t)throw new Error("Can't have a custom view type that references itself");a=Lz(i,e,o,M)}return!r&&a&&(r=a.component),r?{type:t,component:r,defaults:Object.assign(Object.assign({},a?a.defaults:{}),b?b.rawOptions:{}),overrides:Object.assign(Object.assign({},a?a.overrides:{}),p?p.rawOptions:{})}:null}function Ci(t){return a0(t,Nf)}function Nf(t){let e=typeof t=="function"?{component:t}:t,{component:o}=e;return e.content?o=Xi(e):o&&!(o.prototype instanceof X)&&(o=Xi(Object.assign(Object.assign({},e),{content:o}))),{superType:e.type,component:o,rawOptions:e}}function Xi(t){return e=>d(p1.Consumer,null,o=>d(b0,{elTag:"div",elClasses:cz(o.viewSpec),renderProps:Object.assign(Object.assign({},e),{nextDayThreshold:o.options.nextDayThreshold}),generatorName:void 0,customGenerator:t.content,classNameGenerator:t.classNames,didMount:t.didMount,willUnmount:t.willUnmount}))}function Bf(t,e,o,M){let b=Ci(t),p=Ci(e.views),n=yf(b,p);return a0(n,r=>Sf(r,p,e,o,M))}function Sf(t,e,o,M,b){let p=t.overrides.duration||t.defaults.duration||M.duration||o.duration,n=null,r="",i="",a={};if(p&&(n=Tf(p),n)){let A=d1(n);r=A.unit,A.value===1&&(i=r,a=e[r]?e[r].rawOptions:{})}let s=A=>{let q=A.buttonText||{},W=t.defaults.buttonTextKey;return W!=null&&q[W]!=null?q[W]:q[t.type]!=null?q[t.type]:q[i]!=null?q[i]:null},u=A=>{let q=A.buttonHints||{},W=t.defaults.buttonTextKey;return W!=null&&q[W]!=null?q[W]:q[t.type]!=null?q[t.type]:q[i]!=null?q[i]:null};return{type:t.type,component:t.component,duration:n,durationUnit:r,singleUnit:i,optionDefaults:t.defaults,optionOverrides:Object.assign(Object.assign({},a),t.overrides),buttonTextOverride:s(M)||s(o)||t.overrides.buttonText,buttonTextDefault:s(b)||t.defaults.buttonText||s(De)||t.type,buttonTitleOverride:u(M)||u(o)||t.overrides.buttonHint,buttonTitleDefault:u(b)||t.defaults.buttonHint||u(De)}}var xi={};function Tf(t){let e=JSON.stringify(t),o=xi[e];return o===void 0&&(o=Y(t),xi[e]=o),o}function Ef(t,e){switch(e.type){case"CHANGE_VIEW_TYPE":t=e.viewType}return t}function wf(t,e){switch(e.type){case"SET_OPTION":return Object.assign(Object.assign({},t),{[e.optionName]:e.rawOptionValue});default:return t}}function Df(t,e,o,M){let b;switch(e.type){case"CHANGE_VIEW_TYPE":return M.build(e.dateMarker||o);case"CHANGE_DATE":return M.build(e.dateMarker);case"PREV":if(b=M.buildPrev(t,o),b.isValid)return b;break;case"NEXT":if(b=M.buildNext(t,o),b.isValid)return b;break}return t}function Cf(t,e,o){let M=e?e.activeRange:null;return Gi({},Hf(t,o),M,o)}function Xf(t,e,o,M){let b=o?o.activeRange:null;switch(e.type){case"ADD_EVENT_SOURCES":return Gi(t,e.sources,b,M);case"REMOVE_EVENT_SOURCE":return _f(t,e.sourceId);case"PREV":case"NEXT":case"CHANGE_DATE":case"CHANGE_VIEW_TYPE":return o?Yi(t,b,M):t;case"FETCH_EVENT_SOURCES":return Dz(t,e.sourceIds?pz(e.sourceIds):Vi(t,M),b,e.isRefetch||!1,M);case"RECEIVE_EVENTS":case"RECEIVE_EVENT_ERROR":return Pf(t,e.sourceId,e.fetchId,e.fetchRange);case"REMOVE_ALL_EVENT_SOURCES":return{};default:return t}}function xf(t,e,o){let M=e?e.activeRange:null;return Dz(t,Vi(t,o),M,!0,o)}function Fi(t){for(let e in t)if(t[e].isFetching)return!0;return!1}function Gi(t,e,o,M){let b={};for(let p of e)b[p.sourceId]=p;return o&&(b=Yi(b,o,M)),Object.assign(Object.assign({},t),b)}function _f(t,e){return q1(t,o=>o.sourceId!==e)}function Yi(t,e,o){return Dz(t,q1(t,M=>kf(M,e,o)),e,!1,o)}function kf(t,e,o){return Ki(t,o)?!o.options.lazyFetching||!t.fetchRange||t.isFetching||e.startt.fetchRange.end:!t.latestFetchId}function Dz(t,e,o,M,b){let p={};for(let n in t){let r=t[n];e[n]?p[n]=If(r,o,M,b):p[n]=r}return p}function If(t,e,o,M){let{options:b,calendarApi:p}=M,n=M.pluginHooks.eventSourceDefs[t.sourceDefId],r=b1();return n.fetch({eventSource:t,range:e,isRefetch:o,context:M},i=>{let{rawEvents:a}=i;b.eventSourceSuccess&&(a=b.eventSourceSuccess.call(p,a,i.response)||a),t.success&&(a=t.success.call(p,a,i.response)||a),M.dispatch({type:"RECEIVE_EVENTS",sourceId:t.sourceId,fetchId:r,fetchRange:e,rawEvents:a})},i=>{let a=!1;b.eventSourceFailure&&(b.eventSourceFailure.call(p,i),a=!0),t.failure&&(t.failure(i),a=!0),a||console.warn(i.message,i),M.dispatch({type:"RECEIVE_EVENT_ERROR",sourceId:t.sourceId,fetchId:r,fetchRange:e,error:i})}),Object.assign(Object.assign({},t),{isFetching:!0,latestFetchId:r})}function Pf(t,e,o,M){let b=t[e];return b&&o===b.latestFetchId?Object.assign(Object.assign({},t),{[e]:Object.assign(Object.assign({},b),{isFetching:!1,fetchRange:M})}):t}function Vi(t,e){return q1(t,o=>Ki(o,e))}function Hf(t,e){let o=Oz(e),M=[].concat(t.eventSources||[]),b=[];t.initialEvents&&M.unshift(t.initialEvents),t.events&&M.unshift(t.events);for(let p of M){let n=sz(p,e,o);n&&b.push(n)}return b}function Ki(t,e){return!e.pluginHooks.eventSourceDefs[t.sourceDefId].ignoreRange}function Uf(t,e){switch(e.type){case"UNSELECT_DATES":return null;case"SELECT_DATES":return e.selection;default:return t}}function jf(t,e){switch(e.type){case"UNSELECT_EVENT":return"";case"SELECT_EVENT":return e.eventInstanceId;default:return t}}function Ff(t,e){let o;switch(e.type){case"UNSET_EVENT_DRAG":return null;case"SET_EVENT_DRAG":return o=e.state,{affectedEvents:o.affectedEvents,mutatedEvents:o.mutatedEvents,isEvent:o.isEvent};default:return t}}function Gf(t,e){let o;switch(e.type){case"UNSET_EVENT_RESIZE":return null;case"SET_EVENT_RESIZE":return o=e.state,{affectedEvents:o.affectedEvents,mutatedEvents:o.mutatedEvents,isEvent:o.isEvent};default:return t}}function Yf(t,e,o,M,b){let p=t.headerToolbar?_i(t.headerToolbar,t,e,o,M,b):null,n=t.footerToolbar?_i(t.footerToolbar,t,e,o,M,b):null;return{header:p,footer:n}}function _i(t,e,o,M,b,p){let n={},r=[],i=!1;for(let a in t){let s=t[a],u=Vf(s,e,o,M,b,p);n[a]=u.widgets,r.push(...u.viewsWithButtons),i=i||u.hasTitle}return{sectionWidgets:n,viewsWithButtons:r,hasTitle:i}}function Vf(t,e,o,M,b,p){let n=e.direction==="rtl",r=e.customButtons||{},i=o.buttonText||{},a=e.buttonText||{},s=o.buttonHints||{},u=e.buttonHints||{},A=t?t.split(" "):[],q=[],W=!1;return{widgets:A.map(m=>m.split(",").map(y=>{if(y==="title")return W=!0,{buttonName:y};let N,w,x,K,P,n0;if(N=r[y])x=F=>{N.click&&N.click.call(F.target,F,F.target)},(K=M.getCustomButtonIconClass(N))||(K=M.getIconClass(y,n))||(P=N.text),n0=N.hint||N.text;else if(w=b[y]){q.push(y),x=()=>{p.changeView(y)},(P=w.buttonTextOverride)||(K=M.getIconClass(y,n))||(P=w.buttonTextDefault);let F=w.buttonTextOverride||w.buttonTextDefault;n0=C2(w.buttonTitleOverride||w.buttonTitleDefault||e.viewHint,[F,y],F)}else if(p[y])if(x=()=>{p[y]()},(P=i[y])||(K=M.getIconClass(y,n))||(P=a[y]),y==="prevYear"||y==="nextYear"){let F=y==="prevYear"?"prev":"next";n0=C2(s[F]||u[F],[a.year||"year","year"],a[y])}else n0=F=>C2(s[y]||u[y],[a[F]||F,F],a[y]);return{buttonName:y,buttonClick:x,buttonIcon:K,buttonText:P,buttonHint:n0}})),viewsWithButtons:q,hasTitle:W}}var yz=class{constructor(e,o,M){this.type=e,this.getCurrentData=o,this.dateEnv=M}get calendar(){return this.getCurrentData().calendarApi}get title(){return this.getCurrentData().viewTitle}get activeStart(){return this.dateEnv.toDate(this.getCurrentData().dateProfile.activeRange.start)}get activeEnd(){return this.dateEnv.toDate(this.getCurrentData().dateProfile.activeRange.end)}get currentStart(){return this.dateEnv.toDate(this.getCurrentData().dateProfile.currentRange.start)}get currentEnd(){return this.dateEnv.toDate(this.getCurrentData().dateProfile.currentRange.end)}getOption(e){return this.getCurrentData().options[e]}},Kf={ignoreRange:!0,parseMeta(t){return Array.isArray(t.events)?t.events:null},fetch(t,e){e({rawEvents:t.eventSource.meta})}},Qf=$({name:"array-event-source",eventSourceDefs:[Kf]}),Zf={parseMeta(t){return typeof t.events=="function"?t.events:null},fetch(t,e,o){let{dateEnv:M}=t.context,b=t.eventSource.meta;Gt(b.bind(null,qz(t.range,M)),p=>e({rawEvents:p}),o)}},Jf=$({name:"func-event-source",eventSourceDefs:[Zf]}),$f={method:String,extraParams:g,startParam:String,endParam:String,timeZoneParam:String},e4={parseMeta(t){return t.url&&(t.format==="json"||!t.format)?{url:t.url,format:"json",method:(t.method||"GET").toUpperCase(),extraParams:t.extraParams,startParam:t.startParam,endParam:t.endParam,timeZoneParam:t.timeZoneParam}:null},fetch(t,e,o){let{meta:M}=t.eventSource,b=o4(M,t.range,t.context);Yt(M.method,M.url,b).then(([p,n])=>{e({rawEvents:p,response:n})},o)}},t4=$({name:"json-event-source",eventSourceRefiners:$f,eventSourceDefs:[e4]});function o4(t,e,o){let{dateEnv:M,options:b}=o,p,n,r,i,a={};return p=t.startParam,p==null&&(p=b.startParam),n=t.endParam,n==null&&(n=b.endParam),r=t.timeZoneParam,r==null&&(r=b.timeZoneParam),typeof t.extraParams=="function"?i=t.extraParams():i=t.extraParams||{},Object.assign(a,i),a[p]=M.formatIso(e.start),a[n]=M.formatIso(e.end),M.timeZone!=="local"&&(a[r]=M.timeZone),a}var M4={daysOfWeek:g,startTime:Y,endTime:Y,duration:Y,startRecur:g,endRecur:g},b4={parse(t,e){if(t.daysOfWeek||t.startTime||t.endTime||t.startRecur||t.endRecur){let o={daysOfWeek:t.daysOfWeek||null,startTime:t.startTime||null,endTime:t.endTime||null,startRecur:t.startRecur?e.createMarker(t.startRecur):null,endRecur:t.endRecur?e.createMarker(t.endRecur):null},M;return t.duration&&(M=t.duration),!M&&t.startTime&&t.endTime&&(M=ai(t.endTime,t.startTime)),{allDayGuess:!t.startTime&&!t.endTime,duration:M,typeData:o}}return null},expand(t,e,o){let M=X0(e,{start:t.startRecur,end:t.endRecur});return M?z4(t.daysOfWeek,t.startTime,M,o):[]}},p4=$({name:"simple-recurring-event",recurringTypes:[b4],eventRefiners:M4});function z4(t,e,o,M){let b=t?pz(t):null,p=t0(o.start),n=o.end,r=[];for(;pFi(t.eventSources)],propSetHandlers:{dateProfile:r4,eventStore:c4}})],vz=class{constructor(e,o){this.runTaskOption=e,this.drainedOption=o,this.queue=[],this.delayedRunner=new C1(this.drain.bind(this))}request(e,o){this.queue.push(e),this.delayedRunner.request(o)}pause(e){this.delayedRunner.pause(e)}resume(e,o){this.delayedRunner.resume(e,o)}drain(){let{queue:e}=this;for(;e.length;){let o=[],M;for(;M=e.shift();)this.runTask(M),o.push(M);this.drained(o)}}runTask(e){this.runTaskOption&&this.runTaskOption(e)}drained(e){this.drainedOption&&this.drainedOption(e)}};function a4(t,e,o){let M;return/^(year|month)$/.test(t.currentRangeUnit)?M=t.currentRange:M=t.activeRange,o.formatRange(M.start,M.end,J(e.titleFormat||s4(t)),{isEndExclusive:t.isRangeAllDay,defaultSeparator:e.titleRangeSeparator})}function s4(t){let{currentRangeUnit:e}=t;if(e==="year")return{year:"numeric"};if(e==="month")return{year:"numeric",month:"long"};let o=Be(t.currentRange.start,t.currentRange.end);return o!==null&&o>1?{year:"numeric",month:"short",day:"numeric"}:{year:"numeric",month:"long",day:"numeric"}}var Nz=class{constructor(e){this.computeCurrentViewData=E(this._computeCurrentViewData),this.organizeRawLocales=E(ff),this.buildLocale=E(Ui),this.buildPluginHooks=mf(),this.buildDateEnv=E(O4),this.buildTheme=E(l4),this.parseToolbars=E(Yf),this.buildViewSpecs=E(Bf),this.buildDateProfileGenerator=i1(A4),this.buildViewApi=E(d4),this.buildViewUiProps=i1(f4),this.buildEventUiBySource=E(u4,R0),this.buildEventUiBases=E(q4),this.parseContextBusinessHours=i1(W4),this.buildTitle=E(a4),this.emitter=new y1,this.actionRunner=new vz(this._handleAction.bind(this),this.updateData.bind(this)),this.currentCalendarOptionsInput={},this.currentCalendarOptionsRefined={},this.currentViewOptionsInput={},this.currentViewOptionsRefined={},this.currentCalendarOptionsRefiners={},this.optionsForRefining=[],this.optionsForHandling=[],this.getCurrentData=()=>this.data,this.dispatch=A=>{this.actionRunner.request(A)},this.props=e,this.actionRunner.pause();let o={},M=this.computeOptionsData(e.optionOverrides,o,e.calendarApi),b=M.calendarOptions.initialView||M.pluginHooks.initialView,p=this.computeCurrentViewData(b,M,e.optionOverrides,o);e.calendarApi.currentDataManager=this,this.emitter.setThisContext(e.calendarApi),this.emitter.setOptions(p.options);let n=Wi(M.calendarOptions,M.dateEnv),r=p.dateProfileGenerator.build(n);o1(r.activeRange,n)||(n=r.currentRange.start);let i={dateEnv:M.dateEnv,options:M.calendarOptions,pluginHooks:M.pluginHooks,calendarApi:e.calendarApi,dispatch:this.dispatch,emitter:this.emitter,getCurrentData:this.getCurrentData};for(let A of M.pluginHooks.contextInit)A(i);let a=Cf(M.calendarOptions,r,i),s={dynamicOptionOverrides:o,currentViewType:b,currentDate:n,dateProfile:r,businessHours:this.parseContextBusinessHours(i),eventSources:a,eventUiBases:{},eventStore:K0(),renderableEventStore:K0(),dateSelection:null,eventSelection:"",eventDrag:null,eventResize:null,selectionConfig:this.buildViewUiProps(i).selectionConfig},u=Object.assign(Object.assign({},i),s);for(let A of M.pluginHooks.reducers)Object.assign(s,A(null,null,u));gz(s,i)&&this.emitter.trigger("loading",!0),this.state=s,this.updateData(),this.actionRunner.resume()}resetOptions(e,o){let{props:M}=this;o===void 0?M.optionOverrides=e:(M.optionOverrides=Object.assign(Object.assign({},M.optionOverrides||{}),e),this.optionsForRefining.push(...o)),(o===void 0||o.length)&&this.actionRunner.request({type:"NOTHING"})}_handleAction(e){let{props:o,state:M,emitter:b}=this,p=wf(M.dynamicOptionOverrides,e),n=this.computeOptionsData(o.optionOverrides,p,o.calendarApi),r=Ef(M.currentViewType,e),i=this.computeCurrentViewData(r,n,o.optionOverrides,p);o.calendarApi.currentDataManager=this,b.setThisContext(o.calendarApi),b.setOptions(i.options);let a={dateEnv:n.dateEnv,options:n.calendarOptions,pluginHooks:n.pluginHooks,calendarApi:o.calendarApi,dispatch:this.dispatch,emitter:b,getCurrentData:this.getCurrentData},{currentDate:s,dateProfile:u}=M;this.data&&this.data.dateProfileGenerator!==i.dateProfileGenerator&&(u=i.dateProfileGenerator.build(s)),s=fi(s,e),u=Df(u,e,s,i.dateProfileGenerator),(e.type==="PREV"||e.type==="NEXT"||!o1(u.currentRange,s))&&(s=u.currentRange.start);let A=Xf(M.eventSources,e,u,a),q=mi(M.eventStore,e,A,u,a),h=Fi(A)&&!i.options.progressiveEventRendering&&M.renderableEventStore||q,{eventUiSingleBase:m,selectionConfig:y}=this.buildViewUiProps(a),N=this.buildEventUiBySource(A),w=this.buildEventUiBases(h.defs,m,N),x={dynamicOptionOverrides:p,currentViewType:r,currentDate:s,dateProfile:u,eventSources:A,eventStore:q,renderableEventStore:h,selectionConfig:y,eventUiBases:w,businessHours:this.parseContextBusinessHours(a),dateSelection:Uf(M.dateSelection,e),eventSelection:jf(M.eventSelection,e),eventDrag:Ff(M.eventDrag,e),eventResize:Gf(M.eventResize,e)},K=Object.assign(Object.assign({},a),x);for(let F of n.pluginHooks.reducers)Object.assign(x,F(M,e,K));let P=gz(M,a),n0=gz(x,a);!P&&n0?b.trigger("loading",!0):P&&!n0&&b.trigger("loading",!1),this.state=x,o.onAction&&o.onAction(e)}updateData(){let{props:e,state:o}=this,M=this.data,b=this.computeOptionsData(e.optionOverrides,o.dynamicOptionOverrides,e.calendarApi),p=this.computeCurrentViewData(o.currentViewType,b,e.optionOverrides,o.dynamicOptionOverrides),n=this.data=Object.assign(Object.assign(Object.assign({viewTitle:this.buildTitle(o.dateProfile,p.options,b.dateEnv),calendarApi:e.calendarApi,dispatch:this.dispatch,emitter:this.emitter,getCurrentData:this.getCurrentData},b),p),o),r=b.pluginHooks.optionChangeHandlers,i=M&&M.calendarOptions,a=b.calendarOptions;if(i&&i!==a){i.timeZone!==a.timeZone&&(o.eventSources=n.eventSources=xf(n.eventSources,o.dateProfile,n),o.eventStore=n.eventStore=lz(n.eventStore,M.dateEnv,n.dateEnv),o.renderableEventStore=n.renderableEventStore=lz(n.renderableEventStore,M.dateEnv,n.dateEnv));for(let s in r)(this.optionsForHandling.indexOf(s)!==-1||i[s]!==a[s])&&r[s](a[s],n)}this.optionsForHandling=[],e.onData&&e.onData(n)}computeOptionsData(e,o,M){if(!this.optionsForRefining.length&&e===this.stableOptionOverrides&&o===this.stableDynamicOptionOverrides)return this.stableCalendarOptionsData;let{refinedOptions:b,pluginHooks:p,localeDefaults:n,availableLocaleData:r,extra:i}=this.processRawCalendarOptions(e,o);Ii(i);let a=this.buildDateEnv(b.timeZone,b.locale,b.weekNumberCalculation,b.firstDay,b.weekText,p,r,b.defaultRangeSeparator),s=this.buildViewSpecs(p.views,this.stableOptionOverrides,this.stableDynamicOptionOverrides,n),u=this.buildTheme(b,p),A=this.parseToolbars(b,this.stableOptionOverrides,u,s,M);return this.stableCalendarOptionsData={calendarOptions:b,pluginHooks:p,dateEnv:a,viewSpecs:s,theme:u,toolbarConfig:A,localeDefaults:n,availableRawLocales:r.map}}processRawCalendarOptions(e,o){let{locales:M,locale:b}=BM([De,e,o]),p=this.organizeRawLocales(M),n=p.map,r=this.buildLocale(b||p.defaultCode,n).options,i=this.buildPluginHooks(e.plugins||[],i4),a=this.currentCalendarOptionsRefiners=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},oz),Mz),bz),i.listenerRefiners),i.optionRefiners),s={},u=BM([De,r,e,o]),A={},q=this.currentCalendarOptionsInput,W=this.currentCalendarOptionsRefined,h=!1;for(let m in u)this.optionsForRefining.indexOf(m)===-1&&(u[m]===q[m]||Ce[m]&&m in q&&Ce[m](q[m],u[m]))?A[m]=W[m]:a[m]?(A[m]=a[m](u[m]),h=!0):s[m]=q[m];return h&&(this.currentCalendarOptionsInput=u,this.currentCalendarOptionsRefined=A,this.stableOptionOverrides=e,this.stableDynamicOptionOverrides=o),this.optionsForHandling.push(...this.optionsForRefining),this.optionsForRefining=[],{rawOptions:this.currentCalendarOptionsInput,refinedOptions:this.currentCalendarOptionsRefined,pluginHooks:i,availableLocaleData:p,localeDefaults:r,extra:s}}_computeCurrentViewData(e,o,M,b){let p=o.viewSpecs[e];if(!p)throw new Error(`viewType "${e}" is not available. Please make sure you've loaded all neccessary plugins`);let{refinedOptions:n,extra:r}=this.processRawViewOptions(p,o.pluginHooks,o.localeDefaults,M,b);Ii(r);let i=this.buildDateProfileGenerator({dateProfileGeneratorClass:p.optionDefaults.dateProfileGeneratorClass,duration:p.duration,durationUnit:p.durationUnit,usesMinMaxTime:p.optionDefaults.usesMinMaxTime,dateEnv:o.dateEnv,calendarApi:this.props.calendarApi,slotMinTime:n.slotMinTime,slotMaxTime:n.slotMaxTime,showNonCurrentDates:n.showNonCurrentDates,dayCount:n.dayCount,dateAlignment:n.dateAlignment,dateIncrement:n.dateIncrement,hiddenDays:n.hiddenDays,weekends:n.weekends,nowInput:n.now,validRangeInput:n.validRange,visibleRangeInput:n.visibleRange,fixedWeekCount:n.fixedWeekCount}),a=this.buildViewApi(e,this.getCurrentData,o.dateEnv);return{viewSpec:p,options:n,dateProfileGenerator:i,viewApi:a}}processRawViewOptions(e,o,M,b,p){let n=BM([De,e.optionDefaults,M,b,e.optionOverrides,p]),r=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},oz),Mz),bz),Ai),o.listenerRefiners),o.optionRefiners),i={},a=this.currentViewOptionsInput,s=this.currentViewOptionsRefined,u=!1,A={};for(let q in n)n[q]===a[q]||Ce[q]&&Ce[q](n[q],a[q])?i[q]=s[q]:(n[q]===this.currentCalendarOptionsInput[q]||Ce[q]&&Ce[q](n[q],this.currentCalendarOptionsInput[q])?q in this.currentCalendarOptionsRefined&&(i[q]=this.currentCalendarOptionsRefined[q]):r[q]?i[q]=r[q](n[q]):A[q]=n[q],u=!0);return u&&(this.currentViewOptionsInput=n,this.currentViewOptionsRefined=i),{rawOptions:this.currentViewOptionsInput,refinedOptions:this.currentViewOptionsRefined,extra:A}}};function O4(t,e,o,M,b,p,n,r){let i=Ui(e||n.defaultCode,n.map);return new ht({calendarSystem:"gregory",timeZone:t,namedTimeZoneImpl:p.namedTimeZonedImpl,locale:i,weekNumberCalculation:o,firstDay:M,weekText:b,cmdFormatter:p.cmdFormatter,defaultSeparator:r})}function l4(t,e){let o=e.themeClasses[t.themeSystem]||H1;return new o(t)}function A4(t){let e=t.dateProfileGeneratorClass||Ke;return new e(t)}function d4(t,e,o){return new yz(t,e,o)}function u4(t){return a0(t,e=>e.ui)}function q4(t,e,o){let M={"":e};for(let b in t){let p=t[b];p.sourceId&&o[p.sourceId]&&(M[b]=o[p.sourceId])}return M}function f4(t){let{options:e}=t;return{eventUiSingleBase:xe({display:e.eventDisplay,editable:e.editable,startEditable:e.eventStartEditable,durationEditable:e.eventDurationEditable,constraint:e.eventConstraint,overlap:typeof e.eventOverlap=="boolean"?e.eventOverlap:void 0,allow:e.eventAllow,backgroundColor:e.eventBackgroundColor,borderColor:e.eventBorderColor,textColor:e.eventTextColor,color:e.eventColor},t),selectionConfig:xe({constraint:e.selectConstraint,overlap:typeof e.selectOverlap=="boolean"?e.selectOverlap:void 0,allow:e.selectAllow},t)}}function gz(t,e){for(let o of e.pluginHooks.isLoadingFuncs)if(o(t))return!0;return!1}function W4(t){return jt(t.options.businessHours,t)}function Ii(t,e){for(let o in t)console.warn(`Unknown option '${o}'`+(e?` for view '${e}'`:""))}var Bz=class extends X{render(){let e=this.props.widgetGroups.map(o=>this.renderWidgetGroup(o));return d("div",{className:"fc-toolbar-chunk"},...e)}renderWidgetGroup(e){let{props:o}=this,{theme:M}=this.context,b=[],p=!0;for(let n of e){let{buttonName:r,buttonClick:i,buttonText:a,buttonIcon:s,buttonHint:u}=n;if(r==="title")p=!1,b.push(d("h2",{className:"fc-toolbar-title",id:o.titleId},o.title));else{let A=r===o.activeButton,q=!o.isTodayEnabled&&r==="today"||!o.isPrevEnabled&&r==="prev"||!o.isNextEnabled&&r==="next",W=[`fc-${r}-button`,M.getClass("button")];A&&W.push(M.getClass("buttonActive")),b.push(d("button",{type:"button",title:typeof u=="function"?u(o.navUnit):u,disabled:q,"aria-pressed":A,className:W.join(" "),onClick:i},a||(s?d("span",{className:s}):"")))}}if(b.length>1){let n=p&&M.getClass("buttonGroup")||"";return d("div",{className:n},...b)}return b[0]}},tb=class extends X{render(){let{model:e,extraClassName:o}=this.props,M=!1,b,p,n=e.sectionWidgets,r=n.center;return n.left?(M=!0,b=n.left):b=n.start,n.right?(M=!0,p=n.right):p=n.end,d("div",{className:[o||"","fc-toolbar",M?"fc-toolbar-ltr":""].join(" ")},this.renderSection("start",b||[]),this.renderSection("center",r||[]),this.renderSection("end",p||[]))}renderSection(e,o){let{props:M}=this;return d(Bz,{key:e,widgetGroups:o,title:M.title,navUnit:M.navUnit,activeButton:M.activeButton,isTodayEnabled:M.isTodayEnabled,isPrevEnabled:M.isPrevEnabled,isNextEnabled:M.isNextEnabled,titleId:M.titleId})}},Sz=class extends X{constructor(){super(...arguments),this.state={availableWidth:null},this.handleEl=e=>{this.el=e,V0(this.props.elRef,e),this.updateAvailableWidth()},this.handleResize=()=>{this.updateAvailableWidth()}}render(){let{props:e,state:o}=this,{aspectRatio:M}=e,b=["fc-view-harness",M||e.liquid||e.height?"fc-view-harness-active":"fc-view-harness-passive"],p="",n="";return M?o.availableWidth!==null?p=o.availableWidth/M:n=`${1/M*100}%`:p=e.height||"",d("div",{"aria-labelledby":e.labeledById,ref:this.handleEl,className:b.join(" "),style:{height:p,paddingBottom:n}},e.children)}componentDidMount(){this.context.addResizeHandler(this.handleResize)}componentWillUnmount(){this.context.removeResizeHandler(this.handleResize)}updateAvailableWidth(){this.el&&this.props.aspectRatio&&this.setState({availableWidth:this.el.offsetWidth})}},Tz=class extends v1{constructor(e){super(e),this.handleSegClick=(o,M)=>{let{component:b}=this,{context:p}=b,n=ae(M);if(n&&b.isValidSegDownEl(o.target)){let r=m0(o.target,".fc-event-forced-url"),i=r?r.querySelector("a[href]").href:"";p.emitter.trigger("eventClick",{el:M,event:new c0(b.context,n.eventRange.def,n.eventRange.instance),jsEvent:o,view:p.viewApi}),i&&!o.defaultPrevented&&(window.location.href=i)}},this.destroy=Up(e.el,"click",".fc-event",this.handleSegClick)}},Ez=class extends v1{constructor(e){super(e),this.handleEventElRemove=o=>{o===this.currentSegEl&&this.handleSegLeave(null,this.currentSegEl)},this.handleSegEnter=(o,M)=>{ae(M)&&(this.currentSegEl=M,this.triggerEvent("eventMouseEnter",o,M))},this.handleSegLeave=(o,M)=>{this.currentSegEl&&(this.currentSegEl=null,this.triggerEvent("eventMouseLeave",o,M))},this.removeHoverListeners=ri(e.el,".fc-event",this.handleSegEnter,this.handleSegLeave)}destroy(){this.removeHoverListeners()}triggerEvent(e,o,M){let{component:b}=this,{context:p}=b,n=ae(M);(!o||b.isValidSegDownEl(o.target))&&p.emitter.trigger(e,{el:M,event:new c0(p,n.eventRange.def,n.eventRange.instance),jsEvent:o,view:p.viewApi})}},wz=class extends X1{constructor(){super(...arguments),this.buildViewContext=E(ui),this.buildViewPropTransformers=E(R4),this.buildToolbarProps=E(h4),this.headerRef=V(),this.footerRef=V(),this.interactionsStore={},this.state={viewLabelId:M1()},this.registerInteractiveComponent=(e,o)=>{let M=Bi(e,o),n=[Tz,Ez].concat(this.props.pluginHooks.componentInteractions).map(r=>new r(M));this.interactionsStore[e.uid]=n,j2[e.uid]=M},this.unregisterInteractiveComponent=e=>{let o=this.interactionsStore[e.uid];if(o){for(let M of o)M.destroy();delete this.interactionsStore[e.uid]}delete j2[e.uid]},this.resizeRunner=new C1(()=>{this.props.emitter.trigger("_resize",!0),this.props.emitter.trigger("windowResize",{view:this.props.viewApi})}),this.handleWindowResize=e=>{let{options:o}=this.props;o.handleWindowResize&&e.target===window&&this.resizeRunner.request(o.windowResizeDelay)}}render(){let{props:e}=this,{toolbarConfig:o,options:M}=e,b=this.buildToolbarProps(e.viewSpec,e.dateProfile,e.dateProfileGenerator,e.currentDate,P2(e.options.now,e.dateEnv),e.viewTitle),p=!1,n="",r;e.isHeightAuto||e.forPrint?n="":M.height!=null?p=!0:M.contentHeight!=null?n=M.contentHeight:r=Math.max(M.aspectRatio,.5);let i=this.buildViewContext(e.viewSpec,e.viewApi,e.options,e.dateProfileGenerator,e.dateEnv,e.theme,e.pluginHooks,e.dispatch,e.getCurrentData,e.emitter,e.calendarApi,this.registerInteractiveComponent,this.unregisterInteractiveComponent),a=o.header&&o.header.hasTitle?this.state.viewLabelId:"";return d(p1.Provider,{value:i},o.header&&d(tb,Object.assign({ref:this.headerRef,extraClassName:"fc-header-toolbar",model:o.header,titleId:a},b)),d(Sz,{liquid:p,height:n,aspectRatio:r,labeledById:a},this.renderView(e),this.buildAppendContent()),o.footer&&d(tb,Object.assign({ref:this.footerRef,extraClassName:"fc-footer-toolbar",model:o.footer,titleId:""},b)))}componentDidMount(){let{props:e}=this;this.calendarInteractions=e.pluginHooks.calendarInteractions.map(M=>new M(e)),window.addEventListener("resize",this.handleWindowResize);let{propSetHandlers:o}=e.pluginHooks;for(let M in o)o[M](e[M],e)}componentDidUpdate(e){let{props:o}=this,{propSetHandlers:M}=o.pluginHooks;for(let b in M)o[b]!==e[b]&&M[b](o[b],o)}componentWillUnmount(){window.removeEventListener("resize",this.handleWindowResize),this.resizeRunner.clear();for(let e of this.calendarInteractions)e.destroy();this.props.emitter.trigger("_unmount")}buildAppendContent(){let{props:e}=this,o=e.pluginHooks.viewContainerAppends.map(M=>M(e));return d(H,{},...o)}renderView(e){let{pluginHooks:o}=e,{viewSpec:M}=e,b={dateProfile:e.dateProfile,businessHours:e.businessHours,eventStore:e.renderableEventStore,eventUiBases:e.eventUiBases,dateSelection:e.dateSelection,eventSelection:e.eventSelection,eventDrag:e.eventDrag,eventResize:e.eventResize,isHeightAuto:e.isHeightAuto,forPrint:e.forPrint},p=this.buildViewPropTransformers(o.viewPropsTransformers);for(let r of p)Object.assign(b,r.transform(b,e));let n=M.component;return d(n,Object.assign({},b))}};function h4(t,e,o,M,b,p){let n=o.build(b,void 0,!1),r=o.buildPrev(e,M,!1),i=o.buildNext(e,M,!1);return{title:p,activeButton:t.type,navUnit:t.singleUnit,isTodayEnabled:n.isValid&&!o1(e.currentRange,b),isPrevEnabled:r.isValid,isNextEnabled:i.isValid}}function R4(t){return t.map(e=>new e)}var ob=class extends N1{constructor(e,o={}){super(),this.isRendering=!1,this.isRendered=!1,this.currentClassNames=[],this.customContentRenderId=0,this.handleAction=M=>{switch(M.type){case"SET_EVENT_DRAG":case"SET_EVENT_RESIZE":this.renderRunner.tryDrain()}},this.handleData=M=>{this.currentData=M,this.renderRunner.request(M.calendarOptions.rerenderDelay)},this.handleRenderRequest=()=>{if(this.isRendering){this.isRendered=!0;let{currentData:M}=this;o2(()=>{ge(d(vt,{options:M.calendarOptions,theme:M.theme,emitter:M.emitter},(b,p,n,r)=>(this.setClassNames(b),this.setHeight(p),d(rz.Provider,{value:this.customContentRenderId},d(wz,Object.assign({isHeightAuto:n,forPrint:r},M))))),this.el)})}else this.isRendered&&(this.isRendered=!1,ge(null,this.el),this.setClassNames([]),this.setHeight(""))},pi(e),this.el=e,this.renderRunner=new C1(this.handleRenderRequest),new Nz({optionOverrides:o,calendarApi:this,onAction:this.handleAction,onData:this.handleData})}render(){let e=this.isRendering;e?this.customContentRenderId+=1:this.isRendering=!0,this.renderRunner.request(),e&&this.updateSize()}destroy(){this.isRendering&&(this.isRendering=!1,this.renderRunner.request())}updateSize(){o2(()=>{super.updateSize()})}batchRendering(e){this.renderRunner.pause("batchRendering"),e(),this.renderRunner.resume("batchRendering")}pauseRendering(){this.renderRunner.pause("pauseRendering")}resumeRendering(){this.renderRunner.resume("pauseRendering",!0)}resetOptions(e,o){this.currentDataManager.resetOptions(e,o)}setClassNames(e){if(!x0(e,this.currentClassNames)){let{classList:o}=this.el;for(let M of this.currentClassNames)o.remove(M);for(let M of e)o.add(M);this.currentClassNames=e}}setHeight(e){Hp(this.el,"height",e)}};T0.touchMouseIgnoreWait=500;var Cz=0,Mb=0,Xz=!1,bb=class{constructor(e){this.subjectEl=null,this.selector="",this.handleSelector="",this.shouldIgnoreMove=!1,this.shouldWatchScroll=!0,this.isDragging=!1,this.isTouchDragging=!1,this.wasTouchScroll=!1,this.handleMouseDown=o=>{if(!this.shouldIgnoreMouse()&&g4(o)&&this.tryStart(o)){let M=this.createEventFromMouse(o,!0);this.emitter.trigger("pointerdown",M),this.initScrollWatch(M),this.shouldIgnoreMove||document.addEventListener("mousemove",this.handleMouseMove),document.addEventListener("mouseup",this.handleMouseUp)}},this.handleMouseMove=o=>{let M=this.createEventFromMouse(o);this.recordCoords(M),this.emitter.trigger("pointermove",M)},this.handleMouseUp=o=>{document.removeEventListener("mousemove",this.handleMouseMove),document.removeEventListener("mouseup",this.handleMouseUp),this.emitter.trigger("pointerup",this.createEventFromMouse(o)),this.cleanup()},this.handleTouchStart=o=>{if(this.tryStart(o)){this.isTouchDragging=!0;let M=this.createEventFromTouch(o,!0);this.emitter.trigger("pointerdown",M),this.initScrollWatch(M);let b=o.target;this.shouldIgnoreMove||b.addEventListener("touchmove",this.handleTouchMove),b.addEventListener("touchend",this.handleTouchEnd),b.addEventListener("touchcancel",this.handleTouchEnd),window.addEventListener("scroll",this.handleTouchScroll,!0)}},this.handleTouchMove=o=>{let M=this.createEventFromTouch(o);this.recordCoords(M),this.emitter.trigger("pointermove",M)},this.handleTouchEnd=o=>{if(this.isDragging){let M=o.target;M.removeEventListener("touchmove",this.handleTouchMove),M.removeEventListener("touchend",this.handleTouchEnd),M.removeEventListener("touchcancel",this.handleTouchEnd),window.removeEventListener("scroll",this.handleTouchScroll,!0),this.emitter.trigger("pointerup",this.createEventFromTouch(o)),this.cleanup(),this.isTouchDragging=!1,L4()}},this.handleTouchScroll=()=>{this.wasTouchScroll=!0},this.handleScroll=o=>{if(!this.shouldIgnoreMove){let M=window.pageXOffset-this.prevScrollX+this.prevPageX,b=window.pageYOffset-this.prevScrollY+this.prevPageY;this.emitter.trigger("pointermove",{origEvent:o,isTouch:this.isTouchDragging,subjectEl:this.subjectEl,pageX:M,pageY:b,deltaX:M-this.origPageX,deltaY:b-this.origPageY})}},this.containerEl=e,this.emitter=new y1,e.addEventListener("mousedown",this.handleMouseDown),e.addEventListener("touchstart",this.handleTouchStart,{passive:!0}),y4()}destroy(){this.containerEl.removeEventListener("mousedown",this.handleMouseDown),this.containerEl.removeEventListener("touchstart",this.handleTouchStart,{passive:!0}),v4()}tryStart(e){let o=this.querySubjectEl(e),M=e.target;return o&&(!this.handleSelector||m0(M,this.handleSelector))?(this.subjectEl=o,this.isDragging=!0,this.wasTouchScroll=!1,!0):!1}cleanup(){Xz=!1,this.isDragging=!1,this.subjectEl=null,this.destroyScrollWatch()}querySubjectEl(e){return this.selector?m0(e.target,this.selector):this.containerEl}shouldIgnoreMouse(){return Cz||this.isTouchDragging}cancelTouchScroll(){this.isDragging&&(Xz=!0)}initScrollWatch(e){this.shouldWatchScroll&&(this.recordCoords(e),window.addEventListener("scroll",this.handleScroll,!0))}recordCoords(e){this.shouldWatchScroll&&(this.prevPageX=e.pageX,this.prevPageY=e.pageY,this.prevScrollX=window.pageXOffset,this.prevScrollY=window.pageYOffset)}destroyScrollWatch(){this.shouldWatchScroll&&window.removeEventListener("scroll",this.handleScroll,!0)}createEventFromMouse(e,o){let M=0,b=0;return o?(this.origPageX=e.pageX,this.origPageY=e.pageY):(M=e.pageX-this.origPageX,b=e.pageY-this.origPageY),{origEvent:e,isTouch:!1,subjectEl:this.subjectEl,pageX:e.pageX,pageY:e.pageY,deltaX:M,deltaY:b}}createEventFromTouch(e,o){let M=e.touches,b,p,n=0,r=0;return M&&M.length?(b=M[0].pageX,p=M[0].pageY):(b=e.pageX,p=e.pageY),o?(this.origPageX=b,this.origPageY=p):(n=b-this.origPageX,r=p-this.origPageY),{origEvent:e,isTouch:!0,subjectEl:this.subjectEl,pageX:b,pageY:p,deltaX:n,deltaY:r}}};function g4(t){return t.button===0&&!t.ctrlKey}function L4(){Cz+=1,setTimeout(()=>{Cz-=1},T0.touchMouseIgnoreWait)}function y4(){Mb+=1,Mb===1&&window.addEventListener("touchmove",Zi,{passive:!1})}function v4(){Mb-=1,Mb||window.removeEventListener("touchmove",Zi,{passive:!1})}function Zi(t){Xz&&t.preventDefault()}var xz=class{constructor(){this.isVisible=!1,this.sourceEl=null,this.mirrorEl=null,this.sourceElRect=null,this.parentNode=document.body,this.zIndex=9999,this.revertDuration=0}start(e,o,M){this.sourceEl=e,this.sourceElRect=this.sourceEl.getBoundingClientRect(),this.origScreenX=o-window.pageXOffset,this.origScreenY=M-window.pageYOffset,this.deltaX=0,this.deltaY=0,this.updateElPosition()}handleMove(e,o){this.deltaX=e-window.pageXOffset-this.origScreenX,this.deltaY=o-window.pageYOffset-this.origScreenY,this.updateElPosition()}setIsVisible(e){e?this.isVisible||(this.mirrorEl&&(this.mirrorEl.style.display=""),this.isVisible=e,this.updateElPosition()):this.isVisible&&(this.mirrorEl&&(this.mirrorEl.style.display="none"),this.isVisible=e)}stop(e,o){let M=()=>{this.cleanup(),o()};e&&this.mirrorEl&&this.isVisible&&this.revertDuration&&(this.deltaX||this.deltaY)?this.doRevertAnimation(M,this.revertDuration):setTimeout(M,0)}doRevertAnimation(e,o){let M=this.mirrorEl,b=this.sourceEl.getBoundingClientRect();M.style.transition="top "+o+"ms,left "+o+"ms",ie(M,{left:b.left,top:b.top}),jp(M,()=>{M.style.transition="",e()})}cleanup(){this.mirrorEl&&(e2(this.mirrorEl),this.mirrorEl=null),this.sourceEl=null}updateElPosition(){this.sourceEl&&this.isVisible&&ie(this.getMirrorEl(),{left:this.sourceElRect.left+this.deltaX,top:this.sourceElRect.top+this.deltaY})}getMirrorEl(){let e=this.sourceElRect,o=this.mirrorEl;return o||(o=this.mirrorEl=this.sourceEl.cloneNode(!0),o.style.userSelect="none",o.style.webkitUserSelect="none",o.classList.add("fc-event-dragging"),ie(o,{position:"fixed",zIndex:this.zIndex,visibility:"",boxSizing:"border-box",width:e.right-e.left,height:e.bottom-e.top,right:"auto",bottom:"auto",margin:0}),this.parentNode.appendChild(o)),o}},pb=class extends Ze{constructor(e,o){super(),this.handleScroll=()=>{this.scrollTop=this.scrollController.getScrollTop(),this.scrollLeft=this.scrollController.getScrollLeft(),this.handleScrollChange()},this.scrollController=e,this.doesListening=o,this.scrollTop=this.origScrollTop=e.getScrollTop(),this.scrollLeft=this.origScrollLeft=e.getScrollLeft(),this.scrollWidth=e.getScrollWidth(),this.scrollHeight=e.getScrollHeight(),this.clientWidth=e.getClientWidth(),this.clientHeight=e.getClientHeight(),this.clientRect=this.computeClientRect(),this.doesListening&&this.getEventTarget().addEventListener("scroll",this.handleScroll)}destroy(){this.doesListening&&this.getEventTarget().removeEventListener("scroll",this.handleScroll)}getScrollTop(){return this.scrollTop}getScrollLeft(){return this.scrollLeft}setScrollTop(e){this.scrollController.setScrollTop(e),this.doesListening||(this.scrollTop=Math.max(Math.min(e,this.getMaxScrollTop()),0),this.handleScrollChange())}setScrollLeft(e){this.scrollController.setScrollLeft(e),this.doesListening||(this.scrollLeft=Math.max(Math.min(e,this.getMaxScrollLeft()),0),this.handleScrollChange())}getClientWidth(){return this.clientWidth}getClientHeight(){return this.clientHeight}getScrollWidth(){return this.scrollWidth}getScrollHeight(){return this.scrollHeight}handleScrollChange(){}},zb=class extends pb{constructor(e,o){super(new Nt(e),o)}getEventTarget(){return this.scrollController.el}computeClientRect(){return Qt(this.scrollController.el)}},_z=class extends pb{constructor(e){super(new Bt,e)}getEventTarget(){return window}computeClientRect(){return{left:this.scrollLeft,right:this.scrollLeft+this.clientWidth,top:this.scrollTop,bottom:this.scrollTop+this.clientHeight}}handleScrollChange(){this.clientRect=this.computeClientRect()}},Qi=typeof performance=="function"?performance.now:Date.now,kz=class{constructor(){this.isEnabled=!0,this.scrollQuery=[window,".fc-scroller"],this.edgeThreshold=50,this.maxVelocity=300,this.pointerScreenX=null,this.pointerScreenY=null,this.isAnimating=!1,this.scrollCaches=null,this.everMovedUp=!1,this.everMovedDown=!1,this.everMovedLeft=!1,this.everMovedRight=!1,this.animate=()=>{if(this.isAnimating){let e=this.computeBestEdge(this.pointerScreenX+window.pageXOffset,this.pointerScreenY+window.pageYOffset);if(e){let o=Qi();this.handleSide(e,(o-this.msSinceRequest)/1e3),this.requestAnimation(o)}else this.isAnimating=!1}}}start(e,o,M){this.isEnabled&&(this.scrollCaches=this.buildCaches(M),this.pointerScreenX=null,this.pointerScreenY=null,this.everMovedUp=!1,this.everMovedDown=!1,this.everMovedLeft=!1,this.everMovedRight=!1,this.handleMove(e,o))}handleMove(e,o){if(this.isEnabled){let M=e-window.pageXOffset,b=o-window.pageYOffset,p=this.pointerScreenY===null?0:b-this.pointerScreenY,n=this.pointerScreenX===null?0:M-this.pointerScreenX;p<0?this.everMovedUp=!0:p>0&&(this.everMovedDown=!0),n<0?this.everMovedLeft=!0:n>0&&(this.everMovedRight=!0),this.pointerScreenX=M,this.pointerScreenY=b,this.isAnimating||(this.isAnimating=!0,this.requestAnimation(Qi()))}}stop(){if(this.isEnabled){this.isAnimating=!1;for(let e of this.scrollCaches)e.destroy();this.scrollCaches=null}}requestAnimation(e){this.msSinceRequest=e,requestAnimationFrame(this.animate)}handleSide(e,o){let{scrollCache:M}=e,{edgeThreshold:b}=this,p=b-e.distance,n=p*p/(b*b)*this.maxVelocity*o,r=1;switch(e.name){case"left":r=-1;case"right":M.setScrollLeft(M.getScrollLeft()+n*r);break;case"top":r=-1;case"bottom":M.setScrollTop(M.getScrollTop()+n*r);break}}computeBestEdge(e,o){let{edgeThreshold:M}=this,b=null,p=this.scrollCaches||[];for(let n of p){let r=n.clientRect,i=e-r.left,a=r.right-e,s=o-r.top,u=r.bottom-o;i>=0&&a>=0&&s>=0&&u>=0&&(s<=M&&this.everMovedUp&&n.canScrollUp()&&(!b||b.distance>s)&&(b={scrollCache:n,name:"top",distance:s}),u<=M&&this.everMovedDown&&n.canScrollDown()&&(!b||b.distance>u)&&(b={scrollCache:n,name:"bottom",distance:u}),i<=M&&this.everMovedLeft&&n.canScrollLeft()&&(!b||b.distance>i)&&(b={scrollCache:n,name:"left",distance:i}),a<=M&&this.everMovedRight&&n.canScrollRight()&&(!b||b.distance>a)&&(b={scrollCache:n,name:"right",distance:a}))}return b}buildCaches(e){return this.queryScrollEls(e).map(o=>o===window?new _z(!1):new zb(o,!1))}queryScrollEls(e){let o=[];for(let M of this.scrollQuery)typeof M=="object"?o.push(M):o.push(...Array.prototype.slice.call(e.getRootNode().querySelectorAll(M)));return o}},z2=class extends wt{constructor(e,o){super(e),this.containerEl=e,this.delay=null,this.minDistance=0,this.touchScrollAllowed=!0,this.mirrorNeedsRevert=!1,this.isInteracting=!1,this.isDragging=!1,this.isDelayEnded=!1,this.isDistanceSurpassed=!1,this.delayTimeoutId=null,this.onPointerDown=b=>{this.isDragging||(this.isInteracting=!0,this.isDelayEnded=!1,this.isDistanceSurpassed=!1,Fp(document.body),Yp(document.body),b.isTouch||b.origEvent.preventDefault(),this.emitter.trigger("pointerdown",b),this.isInteracting&&!this.pointer.shouldIgnoreMove&&(this.mirror.setIsVisible(!1),this.mirror.start(b.subjectEl,b.pageX,b.pageY),this.startDelay(b),this.minDistance||this.handleDistanceSurpassed(b)))},this.onPointerMove=b=>{if(this.isInteracting){if(this.emitter.trigger("pointermove",b),!this.isDistanceSurpassed){let p=this.minDistance,n,{deltaX:r,deltaY:i}=b;n=r*r+i*i,n>=p*p&&this.handleDistanceSurpassed(b)}this.isDragging&&(b.origEvent.type!=="scroll"&&(this.mirror.handleMove(b.pageX,b.pageY),this.autoScroller.handleMove(b.pageX,b.pageY)),this.emitter.trigger("dragmove",b))}},this.onPointerUp=b=>{this.isInteracting&&(this.isInteracting=!1,Gp(document.body),Vp(document.body),this.emitter.trigger("pointerup",b),this.isDragging&&(this.autoScroller.stop(),this.tryStopDrag(b)),this.delayTimeoutId&&(clearTimeout(this.delayTimeoutId),this.delayTimeoutId=null))};let M=this.pointer=new bb(e);M.emitter.on("pointerdown",this.onPointerDown),M.emitter.on("pointermove",this.onPointerMove),M.emitter.on("pointerup",this.onPointerUp),o&&(M.selector=o),this.mirror=new xz,this.autoScroller=new kz}destroy(){this.pointer.destroy(),this.onPointerUp({})}startDelay(e){typeof this.delay=="number"?this.delayTimeoutId=setTimeout(()=>{this.delayTimeoutId=null,this.handleDelayEnd(e)},this.delay):this.handleDelayEnd(e)}handleDelayEnd(e){this.isDelayEnded=!0,this.tryStartDrag(e)}handleDistanceSurpassed(e){this.isDistanceSurpassed=!0,this.tryStartDrag(e)}tryStartDrag(e){this.isDelayEnded&&this.isDistanceSurpassed&&(!this.pointer.wasTouchScroll||this.touchScrollAllowed)&&(this.isDragging=!0,this.mirrorNeedsRevert=!1,this.autoScroller.start(e.pageX,e.pageY,this.containerEl),this.emitter.trigger("dragstart",e),this.touchScrollAllowed===!1&&this.pointer.cancelTouchScroll())}tryStopDrag(e){this.mirror.stop(this.mirrorNeedsRevert,this.stopDrag.bind(this,e))}stopDrag(e){this.isDragging=!1,this.emitter.trigger("dragend",e)}setIgnoreMove(e){this.pointer.shouldIgnoreMove=e}setMirrorIsVisible(e){this.mirror.setIsVisible(e)}setMirrorNeedsRevert(e){this.mirrorNeedsRevert=e}setAutoScrollEnabled(e){this.autoScroller.isEnabled=e}},Iz=class{constructor(e){this.origRect=Zt(e),this.scrollCaches=HM(e).map(o=>new zb(o,!0))}destroy(){for(let e of this.scrollCaches)e.destroy()}computeLeft(){let e=this.origRect.left;for(let o of this.scrollCaches)e+=o.origScrollLeft-o.getScrollLeft();return e}computeTop(){let e=this.origRect.top;for(let o of this.scrollCaches)e+=o.origScrollTop-o.getScrollTop();return e}isWithinClipping(e,o){let M={left:e,top:o};for(let b of this.scrollCaches)if(!N4(b.getEventTarget())&&!fz(M,b.clientRect))return!1;return!0}};function N4(t){let e=t.tagName;return e==="HTML"||e==="BODY"}var Y2=class{constructor(e,o){this.useSubjectCenter=!1,this.requireInitial=!0,this.initialHit=null,this.movingHit=null,this.finalHit=null,this.handlePointerDown=M=>{let{dragging:b}=this;this.initialHit=null,this.movingHit=null,this.finalHit=null,this.prepareHits(),this.processFirstCoord(M),this.initialHit||!this.requireInitial?(b.setIgnoreMove(!1),this.emitter.trigger("pointerdown",M)):b.setIgnoreMove(!0)},this.handleDragStart=M=>{this.emitter.trigger("dragstart",M),this.handleMove(M,!0)},this.handleDragMove=M=>{this.emitter.trigger("dragmove",M),this.handleMove(M)},this.handlePointerUp=M=>{this.releaseHits(),this.emitter.trigger("pointerup",M)},this.handleDragEnd=M=>{this.movingHit&&this.emitter.trigger("hitupdate",null,!0,M),this.finalHit=this.movingHit,this.movingHit=null,this.emitter.trigger("dragend",M)},this.droppableStore=o,e.emitter.on("pointerdown",this.handlePointerDown),e.emitter.on("dragstart",this.handleDragStart),e.emitter.on("dragmove",this.handleDragMove),e.emitter.on("pointerup",this.handlePointerUp),e.emitter.on("dragend",this.handleDragEnd),this.dragging=e,this.emitter=new y1}processFirstCoord(e){let o={left:e.pageX,top:e.pageY},M=o,b=e.subjectEl,p;b instanceof HTMLElement&&(p=Zt(b),M=Wz(M,p));let n=this.initialHit=this.queryHitForOffset(M.left,M.top);if(n){if(this.useSubjectCenter&&p){let r=xM(p,n.rect);r&&(M=hz(r))}this.coordAdjust=Rz(M,o)}else this.coordAdjust={left:0,top:0}}handleMove(e,o){let M=this.queryHitForOffset(e.pageX+this.coordAdjust.left,e.pageY+this.coordAdjust.top);(o||!nb(this.movingHit,M))&&(this.movingHit=M,this.emitter.trigger("hitupdate",M,!1,e))}prepareHits(){this.offsetTrackers=a0(this.droppableStore,e=>(e.component.prepareHits(),new Iz(e.el)))}releaseHits(){let{offsetTrackers:e}=this;for(let o in e)e[o].destroy();this.offsetTrackers={}}queryHitForOffset(e,o){let{droppableStore:M,offsetTrackers:b}=this,p=null;for(let n in M){let r=M[n].component,i=b[n];if(i&&i.isWithinClipping(e,o)){let a=i.computeLeft(),s=i.computeTop(),u=e-a,A=o-s,{origRect:q}=i,W=q.right-q.left,h=q.bottom-q.top;if(u>=0&&u=0&&Ap.layer)&&(m.componentId=n,m.context=r.context,m.rect.left+=a,m.rect.right+=a,m.rect.top+=s,m.rect.bottom+=s,p=m)}}}return p}};function nb(t,e){return!t&&!e?!0:!!t!=!!e?!1:uz(t.dateSpan,e.dateSpan)}function Ji(t,e){let o={};for(let M of e.pluginHooks.datePointTransforms)Object.assign(o,M(t,e));return Object.assign(o,B4(t,e.dateEnv)),o}function B4(t,e){return{date:e.toDate(t.range.start),dateStr:e.formatIso(t.range.start,{omitTime:t.allDay}),allDay:t.allDay}}var Pz=class extends v1{constructor(e){super(e),this.handlePointerDown=M=>{let{dragging:b}=this,p=M.origEvent.target;b.setIgnoreMove(!this.component.isValidDateDownEl(p))},this.handleDragEnd=M=>{let{component:b}=this,{pointer:p}=this.dragging;if(!p.wasTouchScroll){let{initialHit:n,finalHit:r}=this.hitDragging;if(n&&r&&nb(n,r)){let{context:i}=b,a=Object.assign(Object.assign({},Ji(n.dateSpan,i)),{dayEl:n.dayEl,jsEvent:M.origEvent,view:i.viewApi||i.calendarApi.view});i.emitter.trigger("dateClick",a)}}},this.dragging=new z2(e.el),this.dragging.autoScroller.isEnabled=!1;let o=this.hitDragging=new Y2(this.dragging,Kt(e));o.emitter.on("pointerdown",this.handlePointerDown),o.emitter.on("dragend",this.handleDragEnd)}destroy(){this.dragging.destroy()}},Hz=class extends v1{constructor(e){super(e),this.dragSelection=null,this.handlePointerDown=n=>{let{component:r,dragging:i}=this,{options:a}=r.context,s=a.selectable&&r.isValidDateDownEl(n.origEvent.target);i.setIgnoreMove(!s),i.delay=n.isTouch?S4(r):null},this.handleDragStart=n=>{this.component.context.calendarApi.unselect(n)},this.handleHitUpdate=(n,r)=>{let{context:i}=this.component,a=null,s=!1;if(n){let u=this.hitDragging.initialHit;n.componentId===u.componentId&&this.isHitComboAllowed&&!this.isHitComboAllowed(u,n)||(a=T4(u,n,i.pluginHooks.dateSelectionTransformers)),(!a||!mz(a,n.dateProfile,i))&&(s=!0,a=null)}a?i.dispatch({type:"SELECT_DATES",selection:a}):r||i.dispatch({type:"UNSELECT_DATES"}),s?Ct():Xt(),r||(this.dragSelection=a)},this.handlePointerUp=n=>{this.dragSelection&&(XM(this.dragSelection,n,this.component.context),this.dragSelection=null)};let{component:o}=e,{options:M}=o.context,b=this.dragging=new z2(e.el);b.touchScrollAllowed=!1,b.minDistance=M.selectMinDistance||0,b.autoScroller.isEnabled=M.dragScroll;let p=this.hitDragging=new Y2(this.dragging,Kt(e));p.emitter.on("pointerdown",this.handlePointerDown),p.emitter.on("dragstart",this.handleDragStart),p.emitter.on("hitupdate",this.handleHitUpdate),p.emitter.on("pointerup",this.handlePointerUp)}destroy(){this.dragging.destroy()}};function S4(t){let{options:e}=t.context,o=e.selectLongPressDelay;return o==null&&(o=e.longPressDelay),o}function T4(t,e,o){let M=t.dateSpan,b=e.dateSpan,p=[M.range.start,M.range.end,b.range.start,b.range.end];p.sort(Kp);let n={};for(let r of o){let i=r(t,e);if(i===!1)return null;i&&Object.assign(n,i)}return n.range={start:p[0],end:p[3]},n.allDay=M.allDay,n}var oo=class t extends v1{constructor(e){super(e),this.subjectEl=null,this.subjectSeg=null,this.isDragging=!1,this.eventRange=null,this.relevantEvents=null,this.receivingContext=null,this.validMutation=null,this.mutatedRelevantEvents=null,this.handlePointerDown=n=>{let r=n.origEvent.target,{component:i,dragging:a}=this,{mirror:s}=a,{options:u}=i.context,A=i.context;this.subjectEl=n.subjectEl;let q=this.subjectSeg=ae(n.subjectEl),h=(this.eventRange=q.eventRange).instance.instanceId;this.relevantEvents=Ht(A.getCurrentData().eventStore,h),a.minDistance=n.isTouch?0:u.eventDragMinDistance,a.delay=n.isTouch&&h!==i.props.eventSelection?w4(i):null,u.fixedMirrorParent?s.parentNode=u.fixedMirrorParent:s.parentNode=m0(r,".fc"),s.revertDuration=u.dragRevertDuration;let m=i.isValidSegDownEl(r)&&!m0(r,".fc-event-resizer");a.setIgnoreMove(!m),this.isDragging=m&&n.subjectEl.classList.contains("fc-event-draggable")},this.handleDragStart=n=>{let r=this.component.context,i=this.eventRange,a=i.instance.instanceId;n.isTouch?a!==this.component.props.eventSelection&&r.dispatch({type:"SELECT_EVENT",eventInstanceId:a}):r.dispatch({type:"UNSELECT_EVENT"}),this.isDragging&&(r.calendarApi.unselect(n),r.emitter.trigger("eventDragStart",{el:this.subjectEl,event:new c0(r,i.def,i.instance),jsEvent:n.origEvent,view:r.viewApi}))},this.handleHitUpdate=(n,r)=>{if(!this.isDragging)return;let i=this.relevantEvents,a=this.hitDragging.initialHit,s=this.component.context,u=null,A=null,q=null,W=!1,h={affectedEvents:i,mutatedEvents:K0(),isEvent:!0};if(n){u=n.context;let m=u.options;s===u||m.editable&&m.droppable?(A=E4(a,n,u.getCurrentData().pluginHooks.eventDragMutationMassagers),A&&(q=Ft(i,u.getCurrentData().eventUiBases,A,u),h.mutatedEvents=q,jM(h,n.dateProfile,u)||(W=!0,A=null,q=null,h.mutatedEvents=K0()))):u=null}this.displayDrag(u,h),W?Ct():Xt(),r||(s===u&&nb(a,n)&&(A=null),this.dragging.setMirrorNeedsRevert(!A),this.dragging.setMirrorIsVisible(!n||!this.subjectEl.getRootNode().querySelector(".fc-event-mirror")),this.receivingContext=u,this.validMutation=A,this.mutatedRelevantEvents=q)},this.handlePointerUp=()=>{this.isDragging||this.cleanup()},this.handleDragEnd=n=>{if(this.isDragging){let r=this.component.context,i=r.viewApi,{receivingContext:a,validMutation:s}=this,u=this.eventRange.def,A=this.eventRange.instance,q=new c0(r,u,A),W=this.relevantEvents,h=this.mutatedRelevantEvents,{finalHit:m}=this.hitDragging;if(this.clearDrag(),r.emitter.trigger("eventDragStop",{el:this.subjectEl,event:q,jsEvent:n.origEvent,view:i}),s){if(a===r){let y=new c0(r,h.defs[u.defId],A?h.instances[A.instanceId]:null);r.dispatch({type:"MERGE_EVENTS",eventStore:h});let N={oldEvent:q,event:y,relatedEvents:I1(h,r,A),revert(){r.dispatch({type:"MERGE_EVENTS",eventStore:W})}},w={};for(let x of r.getCurrentData().pluginHooks.eventDropTransformers)Object.assign(w,x(s,r));r.emitter.trigger("eventDrop",Object.assign(Object.assign(Object.assign({},N),w),{el:n.subjectEl,delta:s.datesDelta,jsEvent:n.origEvent,view:i})),r.emitter.trigger("eventChange",N)}else if(a){let y={event:q,relatedEvents:I1(W,r,A),revert(){r.dispatch({type:"MERGE_EVENTS",eventStore:W})}};r.emitter.trigger("eventLeave",Object.assign(Object.assign({},y),{draggedEl:n.subjectEl,view:i})),r.dispatch({type:"REMOVE_EVENTS",eventStore:W}),r.emitter.trigger("eventRemove",y);let N=h.defs[u.defId],w=h.instances[A.instanceId],x=new c0(a,N,w);a.dispatch({type:"MERGE_EVENTS",eventStore:h});let K={event:x,relatedEvents:I1(h,a,w),revert(){a.dispatch({type:"REMOVE_EVENTS",eventStore:h})}};a.emitter.trigger("eventAdd",K),n.isTouch&&a.dispatch({type:"SELECT_EVENT",eventInstanceId:A.instanceId}),a.emitter.trigger("drop",Object.assign(Object.assign({},Ji(m.dateSpan,a)),{draggedEl:n.subjectEl,jsEvent:n.origEvent,view:m.context.viewApi})),a.emitter.trigger("eventReceive",Object.assign(Object.assign({},K),{draggedEl:n.subjectEl,view:m.context.viewApi}))}}else r.emitter.trigger("_noEventDrop")}this.cleanup()};let{component:o}=this,{options:M}=o.context,b=this.dragging=new z2(e.el);b.pointer.selector=t.SELECTOR,b.touchScrollAllowed=!1,b.autoScroller.isEnabled=M.dragScroll;let p=this.hitDragging=new Y2(this.dragging,j2);p.useSubjectCenter=e.useEventCenter,p.emitter.on("pointerdown",this.handlePointerDown),p.emitter.on("dragstart",this.handleDragStart),p.emitter.on("hitupdate",this.handleHitUpdate),p.emitter.on("pointerup",this.handlePointerUp),p.emitter.on("dragend",this.handleDragEnd)}destroy(){this.dragging.destroy()}displayDrag(e,o){let M=this.component.context,b=this.receivingContext;b&&b!==e&&(b===M?b.dispatch({type:"SET_EVENT_DRAG",state:{affectedEvents:o.affectedEvents,mutatedEvents:K0(),isEvent:!0}}):b.dispatch({type:"UNSET_EVENT_DRAG"})),e&&e.dispatch({type:"SET_EVENT_DRAG",state:o})}clearDrag(){let e=this.component.context,{receivingContext:o}=this;o&&o.dispatch({type:"UNSET_EVENT_DRAG"}),e!==o&&e.dispatch({type:"UNSET_EVENT_DRAG"})}cleanup(){this.subjectSeg=null,this.isDragging=!1,this.eventRange=null,this.relevantEvents=null,this.receivingContext=null,this.validMutation=null,this.mutatedRelevantEvents=null}};oo.SELECTOR=".fc-event-draggable, .fc-event-resizable";function E4(t,e,o){let M=t.dateSpan,b=e.dateSpan,p=M.range.start,n=b.range.start,r={};M.allDay!==b.allDay&&(r.allDay=b.allDay,r.hasEnd=e.context.options.allDayMaintainDuration,b.allDay&&(p=t0(p)));let i=Ne(p,n,t.context.dateEnv,t.componentId===e.componentId?t.largeUnit:null);i.milliseconds&&(r.allDay=!1);let a={datesDelta:i,standardProps:r};for(let s of o)s(a,t,e);return a}function w4(t){let{options:e}=t.context,o=e.eventLongPressDelay;return o==null&&(o=e.longPressDelay),o}var Uz=class extends v1{constructor(e){super(e),this.draggingSegEl=null,this.draggingSeg=null,this.eventRange=null,this.relevantEvents=null,this.validMutation=null,this.mutatedRelevantEvents=null,this.handlePointerDown=p=>{let{component:n}=this,r=this.querySegEl(p),i=ae(r),a=this.eventRange=i.eventRange;this.dragging.minDistance=n.context.options.eventDragMinDistance,this.dragging.setIgnoreMove(!this.component.isValidSegDownEl(p.origEvent.target)||p.isTouch&&this.component.props.eventSelection!==a.instance.instanceId)},this.handleDragStart=p=>{let{context:n}=this.component,r=this.eventRange;this.relevantEvents=Ht(n.getCurrentData().eventStore,this.eventRange.instance.instanceId);let i=this.querySegEl(p);this.draggingSegEl=i,this.draggingSeg=ae(i),n.calendarApi.unselect(),n.emitter.trigger("eventResizeStart",{el:i,event:new c0(n,r.def,r.instance),jsEvent:p.origEvent,view:n.viewApi})},this.handleHitUpdate=(p,n,r)=>{let{context:i}=this.component,a=this.relevantEvents,s=this.hitDragging.initialHit,u=this.eventRange.instance,A=null,q=null,W=!1,h={affectedEvents:a,mutatedEvents:K0(),isEvent:!0};p&&(p.componentId===s.componentId&&this.isHitComboAllowed&&!this.isHitComboAllowed(s,p)||(A=D4(s,p,r.subjectEl.classList.contains("fc-event-resizer-start"),u.range))),A&&(q=Ft(a,i.getCurrentData().eventUiBases,A,i),h.mutatedEvents=q,jM(h,p.dateProfile,i)||(W=!0,A=null,q=null,h.mutatedEvents=null)),q?i.dispatch({type:"SET_EVENT_RESIZE",state:h}):i.dispatch({type:"UNSET_EVENT_RESIZE"}),W?Ct():Xt(),n||(A&&nb(s,p)&&(A=null),this.validMutation=A,this.mutatedRelevantEvents=q)},this.handleDragEnd=p=>{let{context:n}=this.component,r=this.eventRange.def,i=this.eventRange.instance,a=new c0(n,r,i),s=this.relevantEvents,u=this.mutatedRelevantEvents;if(n.emitter.trigger("eventResizeStop",{el:this.draggingSegEl,event:a,jsEvent:p.origEvent,view:n.viewApi}),this.validMutation){let A=new c0(n,u.defs[r.defId],i?u.instances[i.instanceId]:null);n.dispatch({type:"MERGE_EVENTS",eventStore:u});let q={oldEvent:a,event:A,relatedEvents:I1(u,n,i),revert(){n.dispatch({type:"MERGE_EVENTS",eventStore:s})}};n.emitter.trigger("eventResize",Object.assign(Object.assign({},q),{el:this.draggingSegEl,startDelta:this.validMutation.startDelta||Y(0),endDelta:this.validMutation.endDelta||Y(0),jsEvent:p.origEvent,view:n.viewApi})),n.emitter.trigger("eventChange",q)}else n.emitter.trigger("_noEventResize");this.draggingSeg=null,this.relevantEvents=null,this.validMutation=null};let{component:o}=e,M=this.dragging=new z2(e.el);M.pointer.selector=".fc-event-resizer",M.touchScrollAllowed=!1,M.autoScroller.isEnabled=o.context.options.dragScroll;let b=this.hitDragging=new Y2(this.dragging,Kt(e));b.emitter.on("pointerdown",this.handlePointerDown),b.emitter.on("dragstart",this.handleDragStart),b.emitter.on("hitupdate",this.handleHitUpdate),b.emitter.on("dragend",this.handleDragEnd)}destroy(){this.dragging.destroy()}querySegEl(e){return m0(e.subjectEl,".fc-event")}};function D4(t,e,o,M){let b=t.context.dateEnv,p=t.dateSpan.range.start,n=e.dateSpan.range.start,r=Ne(p,n,b,t.largeUnit);if(o){if(b.add(M.start,r)M.start)return{endDelta:r};return null}var jz=class{constructor(e){this.context=e,this.isRecentPointerDateSelect=!1,this.matchesCancel=!1,this.matchesEvent=!1,this.onSelect=M=>{M.jsEvent&&(this.isRecentPointerDateSelect=!0)},this.onDocumentPointerDown=M=>{let b=this.context.options.unselectCancel,p=mM(M.origEvent);this.matchesCancel=!!m0(p,b),this.matchesEvent=!!m0(p,oo.SELECTOR)},this.onDocumentPointerUp=M=>{let{context:b}=this,{documentPointer:p}=this,n=b.getCurrentData();if(!p.wasTouchScroll){if(n.dateSelection&&!this.isRecentPointerDateSelect){let r=b.options.unselectAuto;r&&(!r||!this.matchesCancel)&&b.calendarApi.unselect(M)}n.eventSelection&&!this.matchesEvent&&b.dispatch({type:"UNSELECT_EVENT"})}this.isRecentPointerDateSelect=!1};let o=this.documentPointer=new bb(document);o.shouldIgnoreMove=!0,o.shouldWatchScroll=!1,o.emitter.on("pointerdown",this.onDocumentPointerDown),o.emitter.on("pointerup",this.onDocumentPointerUp),e.emitter.on("select",this.onSelect)}destroy(){this.context.emitter.off("select",this.onSelect),this.documentPointer.destroy()}},C4={fixedMirrorParent:g},X4={dateClick:g,eventDragStart:g,eventDragStop:g,eventDrop:g,eventResizeStart:g,eventResizeStop:g,eventResize:g,drop:g,eventReceive:g,eventLeave:g};T0.dataAttrPrefix="";var $i=$({name:"@fullcalendar/interaction",componentInteractions:[Pz,Hz,oo,Uz],calendarInteractions:[jz],elementDraggingImpl:z2,optionRefiners:C4,listenerRefiners:X4});var x4=':root{--fc-daygrid-event-dot-width:8px}.fc-daygrid-day-events:after,.fc-daygrid-day-events:before,.fc-daygrid-day-frame:after,.fc-daygrid-day-frame:before,.fc-daygrid-event-harness:after,.fc-daygrid-event-harness:before{clear:both;content:"";display:table}.fc .fc-daygrid-body{position:relative;z-index:1}.fc .fc-daygrid-day.fc-day-today{background-color:var(--fc-today-bg-color)}.fc .fc-daygrid-day-frame{min-height:100%;position:relative}.fc .fc-daygrid-day-top{display:flex;flex-direction:row-reverse}.fc .fc-day-other .fc-daygrid-day-top{opacity:.3}.fc .fc-daygrid-day-number{padding:4px;position:relative;z-index:4}.fc .fc-daygrid-month-start{font-size:1.1em;font-weight:700}.fc .fc-daygrid-day-events{margin-top:1px}.fc .fc-daygrid-body-balanced .fc-daygrid-day-events{left:0;position:absolute;right:0}.fc .fc-daygrid-body-unbalanced .fc-daygrid-day-events{min-height:2em;position:relative}.fc .fc-daygrid-body-natural .fc-daygrid-day-events{margin-bottom:1em}.fc .fc-daygrid-event-harness{position:relative}.fc .fc-daygrid-event-harness-abs{left:0;position:absolute;right:0;top:0}.fc .fc-daygrid-bg-harness{bottom:0;position:absolute;top:0}.fc .fc-daygrid-day-bg .fc-non-business{z-index:1}.fc .fc-daygrid-day-bg .fc-bg-event{z-index:2}.fc .fc-daygrid-day-bg .fc-highlight{z-index:3}.fc .fc-daygrid-event{margin-top:1px;z-index:6}.fc .fc-daygrid-event.fc-event-mirror{z-index:7}.fc .fc-daygrid-day-bottom{font-size:.85em;margin:0 2px}.fc .fc-daygrid-day-bottom:after,.fc .fc-daygrid-day-bottom:before{clear:both;content:"";display:table}.fc .fc-daygrid-more-link{border-radius:3px;cursor:pointer;line-height:1;margin-top:1px;max-width:100%;overflow:hidden;padding:2px;position:relative;white-space:nowrap;z-index:4}.fc .fc-daygrid-more-link:hover{background-color:rgba(0,0,0,.1)}.fc .fc-daygrid-week-number{background-color:var(--fc-neutral-bg-color);color:var(--fc-neutral-text-color);min-width:1.5em;padding:2px;position:absolute;text-align:center;top:0;z-index:5}.fc .fc-more-popover .fc-popover-body{min-width:220px;padding:10px}.fc-direction-ltr .fc-daygrid-event.fc-event-start,.fc-direction-rtl .fc-daygrid-event.fc-event-end{margin-left:2px}.fc-direction-ltr .fc-daygrid-event.fc-event-end,.fc-direction-rtl .fc-daygrid-event.fc-event-start{margin-right:2px}.fc-direction-ltr .fc-daygrid-more-link{float:left}.fc-direction-ltr .fc-daygrid-week-number{border-radius:0 0 3px 0;left:0}.fc-direction-rtl .fc-daygrid-more-link{float:right}.fc-direction-rtl .fc-daygrid-week-number{border-radius:0 0 0 3px;right:0}.fc-liquid-hack .fc-daygrid-day-frame{position:static}.fc-daygrid-event{border-radius:3px;font-size:var(--fc-small-font-size);position:relative;white-space:nowrap}.fc-daygrid-block-event .fc-event-time{font-weight:700}.fc-daygrid-block-event .fc-event-time,.fc-daygrid-block-event .fc-event-title{padding:1px}.fc-daygrid-dot-event{align-items:center;display:flex;padding:2px 0}.fc-daygrid-dot-event .fc-event-title{flex-grow:1;flex-shrink:1;font-weight:700;min-width:0;overflow:hidden}.fc-daygrid-dot-event.fc-event-mirror,.fc-daygrid-dot-event:hover{background:rgba(0,0,0,.1)}.fc-daygrid-dot-event.fc-event-selected:before{bottom:-10px;top:-10px}.fc-daygrid-event-dot{border:calc(var(--fc-daygrid-event-dot-width)/2) solid var(--fc-event-border-color);border-radius:calc(var(--fc-daygrid-event-dot-width)/2);box-sizing:content-box;height:0;margin:0 4px;width:0}.fc-direction-ltr .fc-daygrid-event .fc-event-time{margin-right:3px}.fc-direction-rtl .fc-daygrid-event .fc-event-time{margin-left:3px}';Y0(x4);function rb(t,e){let o=[];for(let M=0;M{let b=(e.eventDrag?e.eventDrag.affectedInstances:null)||(e.eventResize?e.eventResize.affectedInstances:null)||{};return d(H,null,o.map(p=>{let n=p.eventRange.instance.instanceId;return d("div",{className:"fc-daygrid-event-harness",key:n,style:{visibility:b[n]?"hidden":""}},oa(p)?d(ab,Object.assign({seg:p,isDragging:!1,isSelected:n===e.eventSelection,defaultDisplayEventEnd:!1},_0(p,e.todayRange))):d(ib,Object.assign({seg:p,isDragging:!1,isResizing:!1,isDateSelecting:!1,isSelected:n===e.eventSelection,defaultDisplayEventEnd:!1},_0(p,e.todayRange))))}))}})}};function k4(t){let e=[],o=[];for(let M of t)e.push(M.seg),M.isVisible||o.push(M.seg);return{allSegs:e,invisibleSegs:o}}var I4=J({week:"narrow"}),Gz=class extends s0{constructor(){super(...arguments),this.rootElRef=V(),this.state={dayNumberId:M1()},this.handleRootEl=e=>{V0(this.rootElRef,e),V0(this.props.elRef,e)}}render(){let{context:e,props:o,state:M,rootElRef:b}=this,{options:p,dateEnv:n}=e,{date:r,dateProfile:i}=o,a=o.showDayNumber&&H4(r,i.currentRange,n);return d(we,{elTag:"td",elRef:this.handleRootEl,elClasses:["fc-daygrid-day",...o.extraClassNames||[]],elAttrs:Object.assign(Object.assign(Object.assign({},o.extraDataAttrs),o.showDayNumber?{"aria-labelledby":M.dayNumberId}:{}),{role:"gridcell"}),defaultGenerator:P4,date:r,dateProfile:i,todayRange:o.todayRange,showDayNumber:o.showDayNumber,isMonthStart:a,extraRenderProps:o.extraRenderProps},(s,u)=>d("div",{ref:o.innerElRef,className:"fc-daygrid-day-frame fc-scrollgrid-sync-inner",style:{minHeight:o.minHeight}},o.showWeekNumber&&d(to,{elTag:"a",elClasses:["fc-daygrid-week-number"],elAttrs:W1(e,r,"week"),date:r,defaultFormat:I4}),!u.isDisabled&&(o.showDayNumber||G2(p)||o.forceDayTop)?d("div",{className:"fc-daygrid-day-top"},d(s,{elTag:"a",elClasses:["fc-daygrid-day-number",a&&"fc-daygrid-month-start"],elAttrs:Object.assign(Object.assign({},W1(e,r)),{id:M.dayNumberId})})):o.showDayNumber?d("div",{className:"fc-daygrid-day-top",style:{visibility:"hidden"}},d("a",{className:"fc-daygrid-day-number"},"\xA0")):void 0,d("div",{className:"fc-daygrid-day-events",ref:o.fgContentElRef},o.fgContent,d("div",{className:"fc-daygrid-day-bottom",style:{marginTop:o.moreMarginTop}},d(Fz,{allDayDate:r,singlePlacements:o.singlePlacements,moreCnt:o.moreCnt,alignmentElRef:b,alignGridTop:!o.showDayNumber,extraDateSpan:o.extraDateSpan,dateProfile:o.dateProfile,eventSelection:o.eventSelection,eventDrag:o.eventDrag,eventResize:o.eventResize,todayRange:o.todayRange}))),d("div",{className:"fc-daygrid-day-bg"},o.bgContent)))}};function P4(t){return t.dayNumberText||d(H,null,"\xA0")}function H4(t,e,o){let{start:M,end:b}=e,p=u1(b,-1),n=o.getYear(M),r=o.getMonth(M),i=o.getYear(p),a=o.getMonth(p);return!(n===i&&r===a)&&(t.valueOf()===M.valueOf()||o.getDay(t)===1&&t.valueOf(){let N=t[y.index].eventRange.instance.instanceId+":"+y.span.start+":"+(y.span.end-1);return b[N]});r.allowReslicing=!0,r.strictOrder=M,e===!0||o===!0?(r.maxCoord=p,r.hiddenConsumes=!0):typeof e=="number"?r.maxStackCnt=e:typeof o=="number"&&(r.maxStackCnt=o,r.hiddenConsumes=!0);let i=[],a=[];for(let y=0;y1,m=q.span.start===r;u+=q.levelCoord-s,s=q.levelCoord+q.thickness,h?(u+=q.thickness,m&&A.push({seg:V2(W,q.span.start,q.span.end,o),isVisible:!0,isAbsolute:!0,absoluteTop:q.levelCoord,marginTop:0})):m&&(A.push({seg:V2(W,q.span.start,q.span.end,o),isVisible:!0,isAbsolute:!1,absoluteTop:q.levelCoord,marginTop:u}),u=0)}b.push(a),p.push(A),n.push(u)}return{singleColPlacements:b,multiColPlacements:p,leftoverMargins:n}}function F4(t,e){let o=[];for(let M=0;M!this.forceHidden[x1(p)];for(let p=0;p{e&&this.updateSizing(!0)}}render(){let{props:e,state:o,context:M}=this,{options:b}=M,p=e.cells.length,n=cb(e.businessHourSegs,p),r=cb(e.bgEventSegs,p),i=cb(this.getHighlightSegs(),p),a=cb(this.getMirrorSegs(),p),{singleColPlacements:s,multiColPlacements:u,moreCnts:A,moreMarginTops:q}=U4(se(e.fgEventSegs,b.eventOrder),e.dayMaxEvents,e.dayMaxEventRows,b.eventOrderStrict,o.segHeights,o.maxContentHeight,e.cells),W=e.eventDrag&&e.eventDrag.affectedInstances||e.eventResize&&e.eventResize.affectedInstances||{};return d("tr",{ref:this.rootElRef,role:"row"},e.renderIntro&&e.renderIntro(),e.cells.map((h,m)=>{let y=this.renderFgSegs(m,e.forPrint?s[m]:u[m],e.todayRange,W),N=this.renderFgSegs(m,G4(a[m],u),e.todayRange,{},!!e.eventDrag,!!e.eventResize,!1);return d(Gz,{key:h.key,elRef:this.cellElRefs.createRef(h.key),innerElRef:this.frameElRefs.createRef(h.key),dateProfile:e.dateProfile,date:h.date,showDayNumber:e.showDayNumbers,showWeekNumber:e.showWeekNumbers&&m===0,forceDayTop:e.showWeekNumbers,todayRange:e.todayRange,eventSelection:e.eventSelection,eventDrag:e.eventDrag,eventResize:e.eventResize,extraRenderProps:h.extraRenderProps,extraDataAttrs:h.extraDataAttrs,extraClassNames:h.extraClassNames,extraDateSpan:h.extraDateSpan,moreCnt:A[m],moreMarginTop:q[m],singlePlacements:s[m],fgContentElRef:this.fgElRefs.createRef(h.key),fgContent:d(H,null,d(H,null,y),d(H,null,N)),bgContent:d(H,null,this.renderFillSegs(i[m],"highlight"),this.renderFillSegs(n[m],"non-business"),this.renderFillSegs(r[m],"bg-event")),minHeight:e.cellMinHeight})}))}componentDidMount(){this.updateSizing(!0),this.context.addResizeHandler(this.handleResize)}componentDidUpdate(e,o){let M=this.props;this.updateSizing(!R0(e,M))}componentWillUnmount(){this.context.removeResizeHandler(this.handleResize)}getHighlightSegs(){let{props:e}=this;return e.eventDrag&&e.eventDrag.segs.length?e.eventDrag.segs:e.eventResize&&e.eventResize.segs.length?e.eventResize.segs:e.dateSelectionSegs}getMirrorSegs(){let{props:e}=this;return e.eventResize&&e.eventResize.segs.length?e.eventResize.segs:[]}renderFgSegs(e,o,M,b,p,n,r){let{context:i}=this,{eventSelection:a}=this.props,{framePositions:s}=this.state,u=this.props.cells.length===1,A=p||n||r,q=[];if(s)for(let W of o){let{seg:h}=W,{instanceId:m}=h.eventRange.instance,y=W.isVisible&&!b[m],N=W.isAbsolute,w="",x="";N&&(i.isRtl?(x=0,w=s.lefts[h.lastCol]-s.lefts[h.firstCol]):(w=0,x=s.rights[h.firstCol]-s.rights[h.lastCol])),q.push(d("div",{className:"fc-daygrid-event-harness"+(N?" fc-daygrid-event-harness-abs":""),key:Ma(h),ref:A?null:this.segHarnessRefs.createRef(ba(h)),style:{visibility:y?"":"hidden",marginTop:N?"":W.marginTop,top:N?W.absoluteTop:"",left:w,right:x}},oa(h)?d(ab,Object.assign({seg:h,isDragging:p,isSelected:m===a,defaultDisplayEventEnd:u},_0(h,M))):d(ib,Object.assign({seg:h,isDragging:p,isResizing:n,isDateSelecting:r,isSelected:m===a,defaultDisplayEventEnd:u},_0(h,M)))))}return q}renderFillSegs(e,o){let{isRtl:M}=this.context,{todayRange:b}=this.props,{framePositions:p}=this.state,n=[];if(p)for(let r of e){let i=M?{right:0,left:p.lefts[r.lastCol]-p.lefts[r.firstCol]}:{left:0,right:p.rights[r.firstCol]-p.rights[r.lastCol]};n.push(d("div",{key:M2(r.eventRange),className:"fc-daygrid-bg-harness",style:i},o==="bg-event"?d(re,Object.assign({seg:r},_0(r,b))):b2(o)))}return d(H,{},...n)}updateSizing(e){let{props:o,state:M,frameElRefs:b}=this;if(!o.forPrint&&o.clientWidth!==null){if(e){let i=o.cells.map(a=>b.currentMap[a.key]);if(i.length){let a=this.rootElRef.current,s=new G0(a,i,!0,!1);(!M.framePositions||!M.framePositions.similarTo(s))&&this.setState({framePositions:new G0(a,i,!0,!1)})}}let p=this.state.segHeights,n=this.querySegHeights(),r=o.dayMaxEvents===!0||o.dayMaxEventRows===!0;this.safeSetState({segHeights:Object.assign(Object.assign({},p),n),maxContentHeight:r?this.computeMaxContentHeight():null})}}querySegHeights(){let e=this.segHarnessRefs.currentMap,o={};for(let M in e){let b=Math.round(e[M].getBoundingClientRect().height);o[M]=Math.max(o[M]||0,b)}return o}computeMaxContentHeight(){let e=this.props.cells[0].key,o=this.cellElRefs.currentMap[e],M=this.fgElRefs.currentMap[e];return o.getBoundingClientRect().bottom-M.getBoundingClientRect().top}getCellEls(){let e=this.cellElRefs.currentMap;return this.props.cells.map(o=>e[o.key])}};sb.addStateEquality({segHeights:R0});function G4(t,e){if(!t.length)return[];let o=Y4(e);return t.map(M=>({seg:M,isVisible:!0,isAbsolute:!0,absoluteTop:o[M.eventRange.instance.instanceId],marginTop:0}))}function Y4(t){let e={};for(let o of t)for(let M of o)e[M.seg.eventRange.instance.instanceId]=M.absoluteTop;return e}var Mo=class extends s0{constructor(){super(...arguments),this.splitBusinessHourSegs=E(rb),this.splitBgEventSegs=E(rb),this.splitFgEventSegs=E(rb),this.splitDateSelectionSegs=E(rb),this.splitEventDrag=E(ea),this.splitEventResize=E(ea),this.rowRefs=new W0}render(){let{props:e,context:o}=this,M=e.cells.length,b=this.splitBusinessHourSegs(e.businessHourSegs,M),p=this.splitBgEventSegs(e.bgEventSegs,M),n=this.splitFgEventSegs(e.fgEventSegs,M),r=this.splitDateSelectionSegs(e.dateSelectionSegs,M),i=this.splitEventDrag(e.eventDrag,M),a=this.splitEventResize(e.eventResize,M),s=M>=7&&e.clientWidth?e.clientWidth/o.options.aspectRatio/6:null;return d(L0,{unit:"day"},(u,A)=>d(H,null,e.cells.map((q,W)=>d(sb,{ref:this.rowRefs.createRef(W),key:q.length?q[0].date.toISOString():W,showDayNumbers:M>1,showWeekNumbers:e.showWeekNumbers,todayRange:A,dateProfile:e.dateProfile,cells:q,renderIntro:e.renderRowIntro,businessHourSegs:b[W],eventSelection:e.eventSelection,bgEventSegs:p[W].filter(V4),fgEventSegs:n[W],dateSelectionSegs:r[W],eventDrag:i[W],eventResize:a[W],dayMaxEvents:e.dayMaxEvents,dayMaxEventRows:e.dayMaxEventRows,clientWidth:e.clientWidth,clientHeight:e.clientHeight,cellMinHeight:s,forPrint:e.forPrint}))))}componentDidMount(){this.registerInteractiveComponent()}componentDidUpdate(){this.registerInteractiveComponent()}registerInteractiveComponent(){if(!this.rootEl){let e=this.rowRefs.currentMap[0].getCellEls()[0],o=e?e.closest(".fc-daygrid-body"):null;o&&(this.rootEl=o,this.context.registerInteractiveComponent(this,{el:o,isHitComboAllowed:this.props.isHitComboAllowed}))}}componentWillUnmount(){this.rootEl&&(this.context.unregisterInteractiveComponent(this),this.rootEl=null)}prepareHits(){this.rowPositions=new G0(this.rootEl,this.rowRefs.collect().map(e=>e.getCellEls()[0]),!1,!0),this.colPositions=new G0(this.rootEl,this.rowRefs.currentMap[0].getCellEls(),!0,!1)}queryHit(e,o){let{colPositions:M,rowPositions:b}=this,p=M.leftToIndex(e),n=b.topToIndex(o);if(n!=null&&p!=null){let r=this.props.cells[n][p];return{dateProfile:this.props.dateProfile,dateSpan:Object.assign({range:this.getCellRange(n,p),allDay:!0},r.extraDateSpan),dayEl:this.getCellEl(n,p),rect:{left:M.lefts[p],right:M.rights[p],top:b.tops[n],bottom:b.bottoms[n]},layer:0}}return null}getCellEl(e,o){return this.rowRefs.currentMap[e].getCellEls()[o]}getCellRange(e,o){let M=this.props.cells[e][o].date,b=d0(M,1);return{start:M,end:b}}};function V4(t){return t.eventRange.def.allDay}var bo=class extends s0{constructor(){super(...arguments),this.elRef=V(),this.needsScrollReset=!1}render(){let{props:e}=this,{dayMaxEventRows:o,dayMaxEvents:M,expandRows:b}=e,p=M===!0||o===!0;p&&!b&&(p=!1,o=null,M=null);let n=["fc-daygrid-body",p?"fc-daygrid-body-balanced":"fc-daygrid-body-unbalanced",b?"":"fc-daygrid-body-natural"];return d("div",{ref:this.elRef,className:n.join(" "),style:{width:e.clientWidth,minWidth:e.tableMinWidth}},d("table",{role:"presentation",className:"fc-scrollgrid-sync-table",style:{width:e.clientWidth,minWidth:e.tableMinWidth,height:b?e.clientHeight:""}},e.colGroupNode,d("tbody",{role:"presentation"},d(Mo,{dateProfile:e.dateProfile,cells:e.cells,renderRowIntro:e.renderRowIntro,showWeekNumbers:e.showWeekNumbers,clientWidth:e.clientWidth,clientHeight:e.clientHeight,businessHourSegs:e.businessHourSegs,bgEventSegs:e.bgEventSegs,fgEventSegs:e.fgEventSegs,dateSelectionSegs:e.dateSelectionSegs,eventSelection:e.eventSelection,eventDrag:e.eventDrag,eventResize:e.eventResize,dayMaxEvents:M,dayMaxEventRows:o,forPrint:e.forPrint,isHitComboAllowed:e.isHitComboAllowed}))))}componentDidMount(){this.requestScrollReset()}componentDidUpdate(e){e.dateProfile!==this.props.dateProfile?this.requestScrollReset():this.flushScrollReset()}requestScrollReset(){this.needsScrollReset=!0,this.flushScrollReset()}flushScrollReset(){if(this.needsScrollReset&&this.props.clientWidth){let e=K4(this.elRef.current,this.props.dateProfile);if(e){let o=e.closest(".fc-daygrid-body"),M=o.closest(".fc-scroller"),b=e.getBoundingClientRect().top-o.getBoundingClientRect().top;M.scrollTop=b?b+1:0}this.needsScrollReset=!1}}};function K4(t,e){let o;return e.currentRangeUnit.match(/year|month/)&&(o=t.querySelector(`[data-date="${X2(e.currentDate)}-01"]`)),o||(o=t.querySelector(`[data-date="${k1(e.currentDate)}"]`)),o}var n2=class extends pe{constructor(){super(...arguments),this.forceDayIfListItem=!0}sliceRange(e,o){return o.sliceRange(e)}},po=class extends s0{constructor(){super(...arguments),this.slicer=new n2,this.tableRef=V()}render(){let{props:e,context:o}=this;return d(bo,Object.assign({ref:this.tableRef},this.slicer.sliceProps(e,e.dateProfile,e.nextDayThreshold,o,e.dayTableModel),{dateProfile:e.dateProfile,cells:e.dayTableModel.cells,colGroupNode:e.colGroupNode,tableMinWidth:e.tableMinWidth,renderRowIntro:e.renderRowIntro,dayMaxEvents:e.dayMaxEvents,dayMaxEventRows:e.dayMaxEventRows,showWeekNumbers:e.showWeekNumbers,expandRows:e.expandRows,headerAlignElRef:e.headerAlignElRef,clientWidth:e.clientWidth,clientHeight:e.clientHeight,forPrint:e.forPrint}))}},K2=class extends Ke{buildRenderRange(e,o,M){let b=super.buildRenderRange(e,o,M),{props:p}=this;return Vz({currentRange:b,snapToWeek:/^(year|month)$/.test(o),fixedWeekCount:p.fixedWeekCount,dateEnv:p.dateEnv})}};function Vz(t){let{dateEnv:e,currentRange:o}=t,{start:M,end:b}=o,p;if(t.snapToWeek&&(M=e.startOfWeek(M),p=e.startOfWeek(b),p.valueOf()!==b.valueOf()&&(b=vM(p,1))),t.fixedWeekCount){let n=e.startOfWeek(e.startOfMonth(d0(o.end,-1))),r=Math.ceil($p(n,b));b=vM(b,6-r)}return{start:M,end:b}}var zo=class extends s0{constructor(){super(...arguments),this.headerElRef=V()}renderSimpleLayout(e,o){let{props:M,context:b}=this,p=[],n=T1(b.options);return e&&p.push({type:"header",key:"header",isSticky:n,chunk:{elRef:this.headerElRef,tableClassName:"fc-col-header",rowContent:e}}),p.push({type:"body",key:"body",liquid:!0,chunk:{content:o}}),d(C0,{elClasses:["fc-daygrid"],viewSpec:b.viewSpec},d(Ee,{liquid:!M.isHeightAuto&&!M.forPrint,collapsibleWidth:M.forPrint,cols:[],sections:p}))}renderHScrollLayout(e,o,M,b){let p=this.context.pluginHooks.scrollGridImpl;if(!p)throw new Error("No ScrollGrid implementation");let{props:n,context:r}=this,i=!n.forPrint&&T1(r.options),a=!n.forPrint&&le(r.options),s=[];return e&&s.push({type:"header",key:"header",isSticky:i,chunks:[{key:"main",elRef:this.headerElRef,tableClassName:"fc-col-header",rowContent:e}]}),s.push({type:"body",key:"body",liquid:!0,chunks:[{key:"main",content:o}]}),a&&s.push({type:"footer",key:"footer",isSticky:!0,chunks:[{key:"main",content:S1}]}),d(C0,{elClasses:["fc-daygrid"],viewSpec:r.viewSpec},d(p,{liquid:!n.isHeightAuto&&!n.forPrint,forPrint:n.forPrint,collapsibleWidth:n.forPrint,colGroups:[{cols:[{span:M,minWidth:b}]}],sections:s}))}},Ob=class extends zo{constructor(){super(...arguments),this.buildDayTableModel=E(no),this.headerRef=V(),this.tableRef=V()}render(){let{options:e,dateProfileGenerator:o}=this.context,{props:M}=this,b=this.buildDayTableModel(M.dateProfile,o),p=e.dayHeaders&&d(be,{ref:this.headerRef,dateProfile:M.dateProfile,dates:b.headerDates,datesRepDistinctDays:b.rowCnt===1}),n=r=>d(po,{ref:this.tableRef,dateProfile:M.dateProfile,dayTableModel:b,businessHours:M.businessHours,dateSelection:M.dateSelection,eventStore:M.eventStore,eventUiBases:M.eventUiBases,eventSelection:M.eventSelection,eventDrag:M.eventDrag,eventResize:M.eventResize,nextDayThreshold:e.nextDayThreshold,colGroupNode:r.tableColGroupNode,tableMinWidth:r.tableMinWidth,dayMaxEvents:e.dayMaxEvents,dayMaxEventRows:e.dayMaxEventRows,showWeekNumbers:e.weekNumbers,expandRows:!M.isHeightAuto,headerAlignElRef:this.headerElRef,clientWidth:r.clientWidth,clientHeight:r.clientHeight,forPrint:M.forPrint});return e.dayMinWidth?this.renderHScrollLayout(p,n,b.colCnt,e.dayMinWidth):this.renderSimpleLayout(p,n)}};function no(t,e){let o=new Je(t.renderRange,e);return new $e(o,/year|month|week/.test(t.currentRangeUnit))}var lb=$({name:"@fullcalendar/daygrid",initialView:"dayGridMonth",views:{dayGrid:{component:Ob,dateProfileGeneratorClass:K2},dayGridDay:{type:"dayGrid",duration:{days:1}},dayGridWeek:{type:"dayGrid",duration:{weeks:1}},dayGridMonth:{type:"dayGrid",duration:{months:1},fixedWeekCount:!0},dayGridYear:{type:"dayGrid",duration:{years:1}}}});var Q4='.fc-v-event{background-color:var(--fc-event-bg-color);border:1px solid var(--fc-event-border-color);display:block}.fc-v-event .fc-event-main{color:var(--fc-event-text-color);height:100%}.fc-v-event .fc-event-main-frame{display:flex;flex-direction:column;height:100%}.fc-v-event .fc-event-time{flex-grow:0;flex-shrink:0;max-height:100%;overflow:hidden}.fc-v-event .fc-event-title-container{flex-grow:1;flex-shrink:1;min-height:0}.fc-v-event .fc-event-title{bottom:0;max-height:100%;overflow:hidden;top:0}.fc-v-event:not(.fc-event-start){border-top-left-radius:0;border-top-right-radius:0;border-top-width:0}.fc-v-event:not(.fc-event-end){border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom-width:0}.fc-v-event.fc-event-selected:before{left:-10px;right:-10px}.fc-v-event .fc-event-resizer-start{cursor:n-resize}.fc-v-event .fc-event-resizer-end{cursor:s-resize}.fc-v-event:not(.fc-event-selected) .fc-event-resizer{height:var(--fc-event-resizer-thickness);left:0;right:0}.fc-v-event:not(.fc-event-selected) .fc-event-resizer-start{top:calc(var(--fc-event-resizer-thickness)/-2)}.fc-v-event:not(.fc-event-selected) .fc-event-resizer-end{bottom:calc(var(--fc-event-resizer-thickness)/-2)}.fc-v-event.fc-event-selected .fc-event-resizer{left:50%;margin-left:calc(var(--fc-event-resizer-dot-total-width)/-2)}.fc-v-event.fc-event-selected .fc-event-resizer-start{top:calc(var(--fc-event-resizer-dot-total-width)/-2)}.fc-v-event.fc-event-selected .fc-event-resizer-end{bottom:calc(var(--fc-event-resizer-dot-total-width)/-2)}.fc .fc-timegrid .fc-daygrid-body{z-index:2}.fc .fc-timegrid-divider{padding:0 0 2px}.fc .fc-timegrid-body{min-height:100%;position:relative;z-index:1}.fc .fc-timegrid-axis-chunk{position:relative}.fc .fc-timegrid-axis-chunk>table,.fc .fc-timegrid-slots{position:relative;z-index:1}.fc .fc-timegrid-slot{border-bottom:0;height:1.5em}.fc .fc-timegrid-slot:empty:before{content:"\\00a0"}.fc .fc-timegrid-slot-minor{border-top-style:dotted}.fc .fc-timegrid-slot-label-cushion{display:inline-block;white-space:nowrap}.fc .fc-timegrid-slot-label{vertical-align:middle}.fc .fc-timegrid-axis-cushion,.fc .fc-timegrid-slot-label-cushion{padding:0 4px}.fc .fc-timegrid-axis-frame-liquid{height:100%}.fc .fc-timegrid-axis-frame{align-items:center;display:flex;justify-content:flex-end;overflow:hidden}.fc .fc-timegrid-axis-cushion{flex-shrink:0;max-width:60px}.fc-direction-ltr .fc-timegrid-slot-label-frame{text-align:right}.fc-direction-rtl .fc-timegrid-slot-label-frame{text-align:left}.fc-liquid-hack .fc-timegrid-axis-frame-liquid{bottom:0;height:auto;left:0;position:absolute;right:0;top:0}.fc .fc-timegrid-col.fc-day-today{background-color:var(--fc-today-bg-color)}.fc .fc-timegrid-col-frame{min-height:100%;position:relative}.fc-media-screen.fc-liquid-hack .fc-timegrid-col-frame{bottom:0;height:auto;left:0;position:absolute;right:0;top:0}.fc-media-screen .fc-timegrid-cols{bottom:0;left:0;position:absolute;right:0;top:0}.fc-media-screen .fc-timegrid-cols>table{height:100%}.fc-media-screen .fc-timegrid-col-bg,.fc-media-screen .fc-timegrid-col-events,.fc-media-screen .fc-timegrid-now-indicator-container{left:0;position:absolute;right:0;top:0}.fc .fc-timegrid-col-bg{z-index:2}.fc .fc-timegrid-col-bg .fc-non-business{z-index:1}.fc .fc-timegrid-col-bg .fc-bg-event{z-index:2}.fc .fc-timegrid-col-bg .fc-highlight{z-index:3}.fc .fc-timegrid-bg-harness{left:0;position:absolute;right:0}.fc .fc-timegrid-col-events{z-index:3}.fc .fc-timegrid-now-indicator-container{bottom:0;overflow:hidden}.fc-direction-ltr .fc-timegrid-col-events{margin:0 2.5% 0 2px}.fc-direction-rtl .fc-timegrid-col-events{margin:0 2px 0 2.5%}.fc-timegrid-event-harness{position:absolute}.fc-timegrid-event-harness>.fc-timegrid-event{bottom:0;left:0;position:absolute;right:0;top:0}.fc-timegrid-event-harness-inset .fc-timegrid-event,.fc-timegrid-event.fc-event-mirror,.fc-timegrid-more-link{box-shadow:0 0 0 1px var(--fc-page-bg-color)}.fc-timegrid-event,.fc-timegrid-more-link{border-radius:3px;font-size:var(--fc-small-font-size)}.fc-timegrid-event{margin-bottom:1px}.fc-timegrid-event .fc-event-main{padding:1px 1px 0}.fc-timegrid-event .fc-event-time{font-size:var(--fc-small-font-size);margin-bottom:1px;white-space:nowrap}.fc-timegrid-event-short .fc-event-main-frame{flex-direction:row;overflow:hidden}.fc-timegrid-event-short .fc-event-time:after{content:"\\00a0-\\00a0"}.fc-timegrid-event-short .fc-event-title{font-size:var(--fc-small-font-size)}.fc-timegrid-more-link{background:var(--fc-more-link-bg-color);color:var(--fc-more-link-text-color);cursor:pointer;margin-bottom:1px;position:absolute;z-index:9999}.fc-timegrid-more-link-inner{padding:3px 2px;top:0}.fc-direction-ltr .fc-timegrid-more-link{right:0}.fc-direction-rtl .fc-timegrid-more-link{left:0}.fc .fc-timegrid-now-indicator-line{border-color:var(--fc-now-indicator-color);border-style:solid;border-width:1px 0 0;left:0;position:absolute;right:0;z-index:4}.fc .fc-timegrid-now-indicator-arrow{border-color:var(--fc-now-indicator-color);border-style:solid;margin-top:-5px;position:absolute;z-index:4}.fc-direction-ltr .fc-timegrid-now-indicator-arrow{border-bottom-color:transparent;border-top-color:transparent;border-width:5px 0 5px 6px;left:0}.fc-direction-rtl .fc-timegrid-now-indicator-arrow{border-bottom-color:transparent;border-top-color:transparent;border-width:5px 6px 5px 0;right:0}';Y0(Q4);var Qz=class extends Se{getKeyInfo(){return{allDay:{},timed:{}}}getKeysForDateSpan(e){return e.allDay?["allDay"]:["timed"]}getKeysForEventDef(e){return e.allDay?dz(e)?["timed","allDay"]:["allDay"]:["timed"]}},Z4=J({hour:"numeric",minute:"2-digit",omitZeroMinute:!0,meridiem:"short"});function ca(t){let e=["fc-timegrid-slot","fc-timegrid-slot-label",t.isLabeled?"fc-scrollgrid-shrink":"fc-timegrid-slot-minor"];return d(p1.Consumer,null,o=>{if(!t.isLabeled)return d("td",{className:e.join(" "),"data-time":t.isoTimeStr});let{dateEnv:M,options:b,viewApi:p}=o,n=b.slotLabelFormat==null?Z4:Array.isArray(b.slotLabelFormat)?J(b.slotLabelFormat[0]):J(b.slotLabelFormat),r={level:0,time:t.time,date:M.toDate(t.date),view:p,text:M.format(t.date,n)};return d(b0,{elTag:"td",elClasses:e,elAttrs:{"data-time":t.isoTimeStr},renderProps:r,generatorName:"slotLabelContent",customGenerator:b.slotLabelContent,defaultGenerator:J4,classNameGenerator:b.slotLabelClassNames,didMount:b.slotLabelDidMount,willUnmount:b.slotLabelWillUnmount},i=>d("div",{className:"fc-timegrid-slot-label-frame fc-scrollgrid-shrink-frame"},d(i,{elTag:"div",elClasses:["fc-timegrid-slot-label-cushion","fc-scrollgrid-shrink-cushion"]})))})}function J4(t){return t.text}var Zz=class extends X{render(){return this.props.slatMetas.map(e=>d("tr",{key:e.key},d(ca,Object.assign({},e))))}},$4=J({week:"short"}),eW=5,co=class extends s0{constructor(){super(...arguments),this.allDaySplitter=new Qz,this.headerElRef=V(),this.rootElRef=V(),this.scrollerElRef=V(),this.state={slatCoords:null},this.handleScrollTopRequest=e=>{let o=this.scrollerElRef.current;o&&(o.scrollTop=e)},this.renderHeadAxis=(e,o="")=>{let{options:M}=this.context,{dateProfile:b}=this.props,p=b.renderRange,r=_1(p.start,p.end)===1?W1(this.context,p.start,"week"):{};return M.weekNumbers&&e==="day"?d(to,{elTag:"th",elClasses:["fc-timegrid-axis","fc-scrollgrid-shrink"],elAttrs:{"aria-hidden":!0},date:p.start,defaultFormat:$4},i=>d("div",{className:["fc-timegrid-axis-frame","fc-scrollgrid-shrink-frame","fc-timegrid-axis-frame-liquid"].join(" "),style:{height:o}},d(i,{elTag:"a",elClasses:["fc-timegrid-axis-cushion","fc-scrollgrid-shrink-cushion","fc-scrollgrid-sync-inner"],elAttrs:r}))):d("th",{"aria-hidden":!0,className:"fc-timegrid-axis"},d("div",{className:"fc-timegrid-axis-frame",style:{height:o}}))},this.renderTableRowAxis=e=>{let{options:o,viewApi:M}=this.context,b={text:o.allDayText,view:M};return d(b0,{elTag:"td",elClasses:["fc-timegrid-axis","fc-scrollgrid-shrink"],elAttrs:{"aria-hidden":!0},renderProps:b,generatorName:"allDayContent",customGenerator:o.allDayContent,defaultGenerator:tW,classNameGenerator:o.allDayClassNames,didMount:o.allDayDidMount,willUnmount:o.allDayWillUnmount},p=>d("div",{className:["fc-timegrid-axis-frame","fc-scrollgrid-shrink-frame",e==null?" fc-timegrid-axis-frame-liquid":""].join(" "),style:{height:e}},d(p,{elTag:"span",elClasses:["fc-timegrid-axis-cushion","fc-scrollgrid-shrink-cushion","fc-scrollgrid-sync-inner"]})))},this.handleSlatCoords=e=>{this.setState({slatCoords:e})}}renderSimpleLayout(e,o,M){let{context:b,props:p}=this,n=[],r=T1(b.options);return e&&n.push({type:"header",key:"header",isSticky:r,chunk:{elRef:this.headerElRef,tableClassName:"fc-col-header",rowContent:e}}),o&&(n.push({type:"body",key:"all-day",chunk:{content:o}}),n.push({type:"body",key:"all-day-divider",outerContent:d("tr",{role:"presentation",className:"fc-scrollgrid-section"},d("td",{className:"fc-timegrid-divider "+b.theme.getClass("tableCellShaded")}))})),n.push({type:"body",key:"body",liquid:!0,expandRows:!!b.options.expandRows,chunk:{scrollerElRef:this.scrollerElRef,content:M}}),d(C0,{elRef:this.rootElRef,elClasses:["fc-timegrid"],viewSpec:b.viewSpec},d(Ee,{liquid:!p.isHeightAuto&&!p.forPrint,collapsibleWidth:p.forPrint,cols:[{width:"shrink"}],sections:n}))}renderHScrollLayout(e,o,M,b,p,n,r){let i=this.context.pluginHooks.scrollGridImpl;if(!i)throw new Error("No ScrollGrid implementation");let{context:a,props:s}=this,u=!s.forPrint&&T1(a.options),A=!s.forPrint&&le(a.options),q=[];e&&q.push({type:"header",key:"header",isSticky:u,syncRowHeights:!0,chunks:[{key:"axis",rowContent:h=>d("tr",{role:"presentation"},this.renderHeadAxis("day",h.rowSyncHeights[0]))},{key:"cols",elRef:this.headerElRef,tableClassName:"fc-col-header",rowContent:e}]}),o&&(q.push({type:"body",key:"all-day",syncRowHeights:!0,chunks:[{key:"axis",rowContent:h=>d("tr",{role:"presentation"},this.renderTableRowAxis(h.rowSyncHeights[0]))},{key:"cols",content:o}]}),q.push({key:"all-day-divider",type:"body",outerContent:d("tr",{role:"presentation",className:"fc-scrollgrid-section"},d("td",{colSpan:2,className:"fc-timegrid-divider "+a.theme.getClass("tableCellShaded")}))}));let W=a.options.nowIndicator;return q.push({type:"body",key:"body",liquid:!0,expandRows:!!a.options.expandRows,chunks:[{key:"axis",content:h=>d("div",{className:"fc-timegrid-axis-chunk"},d("table",{"aria-hidden":!0,style:{height:h.expandRows?h.clientHeight:""}},h.tableColGroupNode,d("tbody",null,d(Zz,{slatMetas:n}))),d("div",{className:"fc-timegrid-now-indicator-container"},d(L0,{unit:W?"minute":"day"},m=>{let y=W&&r&&r.safeComputeTop(m);return typeof y=="number"?d(P1,{elClasses:["fc-timegrid-now-indicator-arrow"],elStyle:{top:y},isAxis:!0,date:m}):null})))},{key:"cols",scrollerElRef:this.scrollerElRef,content:M}]}),A&&q.push({key:"footer",type:"footer",isSticky:!0,chunks:[{key:"axis",content:S1},{key:"cols",content:S1}]}),d(C0,{elRef:this.rootElRef,elClasses:["fc-timegrid"],viewSpec:a.viewSpec},d(i,{liquid:!s.isHeightAuto&&!s.forPrint,forPrint:s.forPrint,collapsibleWidth:!1,colGroups:[{width:"shrink",cols:[{width:"shrink"}]},{cols:[{span:b,minWidth:p}]}],sections:q}))}getAllDayMaxEventProps(){let{dayMaxEvents:e,dayMaxEventRows:o}=this.context.options;return(e===!0||o===!0)&&(e=void 0,o=eW),{dayMaxEvents:e,dayMaxEventRows:o}}};function tW(t){return t.text}var Jz=class{constructor(e,o,M){this.positions=e,this.dateProfile=o,this.slotDuration=M}safeComputeTop(e){let{dateProfile:o}=this;if(o1(o.currentRange,e)){let M=t0(e),b=e.valueOf()-M.valueOf();if(b>=S0(o.slotMinTime)&&b{let r={time:p.time,date:o.dateEnv.toDate(p.date),view:o.viewApi};return d("tr",{key:p.key,ref:b.createRef(p.key)},e.axis&&d(ca,Object.assign({},p)),d(b0,{elTag:"td",elClasses:["fc-timegrid-slot","fc-timegrid-slot-lane",!p.isLabeled&&"fc-timegrid-slot-minor"],elAttrs:{"data-time":p.isoTimeStr},renderProps:r,generatorName:"slotLaneContent",customGenerator:M.slotLaneContent,classNameGenerator:M.slotLaneClassNames,didMount:M.slotLaneDidMount,willUnmount:M.slotLaneWillUnmount}))}))}},en=class extends X{constructor(){super(...arguments),this.rootElRef=V(),this.slatElRefs=new W0}render(){let{props:e,context:o}=this;return d("div",{ref:this.rootElRef,className:"fc-timegrid-slots"},d("table",{"aria-hidden":!0,className:o.theme.getClass("table"),style:{minWidth:e.tableMinWidth,width:e.clientWidth,height:e.minHeight}},e.tableColGroupNode,d($z,{slatElRefs:this.slatElRefs,axis:e.axis,slatMetas:e.slatMetas})))}componentDidMount(){this.updateSizing()}componentDidUpdate(){this.updateSizing()}componentWillUnmount(){this.props.onCoords&&this.props.onCoords(null)}updateSizing(){let{context:e,props:o}=this;o.onCoords&&o.clientWidth!==null&&this.rootElRef.current.offsetHeight&&o.onCoords(new Jz(new G0(this.rootElRef.current,oW(this.slatElRefs.currentMap,o.slatMetas),!1,!0),this.props.dateProfile,e.options.slotDuration))}};function oW(t,e){return e.map(o=>t[o.key])}function ro(t,e){let o=[],M;for(M=0;Mia(e.hiddenSegs,e),defaultGenerator:MW,forceTimed:!0},o=>d(o,{elTag:"div",elClasses:["fc-timegrid-more-link-inner","fc-sticky"]}))}};function MW(t){return t.shortText}function bW(t,e,o){let M=new Me;e!=null&&(M.strictOrder=e),o!=null&&(M.maxStackCnt=o);let b=M.addSegs(t),p=Jt(b),n=pW(M);return n=cW(n,1),{segRects:iW(n),hiddenGroups:p}}function pW(t){let{entriesByLevel:e}=t,o=pn((M,b)=>M+":"+b,(M,b)=>{let p=rW(t,M,b),n=za(p,o),r=e[M][b];return[Object.assign(Object.assign({},r),{nextLevelNodes:n[0]}),r.thickness+n[1]]});return za(e.length?{level:0,lateralStart:0,lateralEnd:e[0].length}:null,o)[0]}function za(t,e){if(!t)return[[],0];let{level:o,lateralStart:M,lateralEnd:b}=t,p=M,n=[];for(;px1(M),(M,b,p)=>{let{nextLevelNodes:n,thickness:r}=M,i=r+p,a=r/i,s,u=[];if(!n.length)s=e;else for(let q of n)if(s===void 0){let W=o(q,b,i);s=W[0],u.push(W[1])}else{let W=o(q,s,0);u.push(W[1])}let A=(s-b)*a;return[s-A,Object.assign(Object.assign({},M),{thickness:A,nextLevelNodes:u})]});return t.map(M=>o(M,0,0)[1])}function iW(t){let e=[],o=pn((b,p,n)=>x1(b),(b,p,n)=>{let r=Object.assign(Object.assign({},b),{levelCoord:p,stackDepth:n,stackForward:0});return e.push(r),r.stackForward=M(b.nextLevelNodes,p+b.thickness,n+1)+1});function M(b,p,n){let r=0;for(let i of b)r=Math.max(o(i,p,n),r);return r}return M(t,0,0),e}function pn(t,e){let o={};return(...M)=>{let b=t(...M);return b in o?o[b]:o[b]=e(...M)}}function na(t,e,o=null,M=0){let b=[];if(o)for(let p=0;pd("div",{className:"fc-timegrid-col-frame"},d("div",{className:"fc-timegrid-col-bg"},this.renderFillSegs(e.businessHourSegs,"non-business"),this.renderFillSegs(e.bgEventSegs,"bg-event"),this.renderFillSegs(e.dateSelectionSegs,"highlight")),d("div",{className:"fc-timegrid-col-events"},this.renderFgSegs(r,n,!1,!1,!1)),d("div",{className:"fc-timegrid-col-events"},this.renderFgSegs(p,{},!!e.eventDrag,!!e.eventResize,!!b,"mirror")),d("div",{className:"fc-timegrid-now-indicator-container"},this.renderNowIndicator(e.nowIndicatorSegs)),G2(M)&&d(i,{elTag:"div",elClasses:["fc-timegrid-col-misc"]})))}renderFgSegs(e,o,M,b,p,n){let{props:r}=this;return r.forPrint?ia(e,r):this.renderPositionedFgSegs(e,o,M,b,p,n)}renderPositionedFgSegs(e,o,M,b,p,n){let{eventMaxStack:r,eventShortHeight:i,eventOrderStrict:a,eventMinHeight:s}=this.context.options,{date:u,slatCoords:A,eventSelection:q,todayRange:W,nowDate:h}=this.props,m=M||b||p,y=na(e,u,A,s),{segPlacements:N,hiddenGroups:w}=aW(e,y,a,r);return d(H,null,this.renderHiddenGroups(w,e),N.map(x=>{let{seg:K,rect:P}=x,n0=K.eventRange.instance.instanceId,F=m||!!(!o[n0]&&P),w0=Kz(P&&P.span),O1=!m&&P?this.computeSegHStyle(P):{left:0,right:0},H0=!!P&&P.stackForward>0,F1=!!P&&P.span.end-P.span.start{let u=Kz(s.span),A=OW(s.entries,o);return d(tn,{key:t2(p2(A)),hiddenSegs:A,top:u.top,bottom:u.bottom,extraDateSpan:M,dateProfile:b,todayRange:p,nowDate:n,eventSelection:r,eventDrag:i,eventResize:a})}))}renderFillSegs(e,o){let{props:M,context:b}=this,n=na(e,M.date,M.slatCoords,b.options.eventMinHeight).map((r,i)=>{let a=e[i];return d("div",{key:M2(a.eventRange),className:"fc-timegrid-bg-harness",style:Kz(r)},o==="bg-event"?d(re,Object.assign({seg:a},_0(a,M.todayRange,M.nowDate))):b2(o))});return d(H,null,n)}renderNowIndicator(e){let{slatCoords:o,date:M}=this.props;return o?e.map((b,p)=>d(P1,{key:p,elClasses:["fc-timegrid-now-indicator-line"],elStyle:{top:o.computeDateTop(b.start,M)},isAxis:!1,date:M})):null}computeSegHStyle(e){let{isRtl:o,options:M}=this.context,b=M.slotEventOverlap,p=e.levelCoord,n=e.levelCoord+e.thickness,r,i;b&&(n=Math.min(1,p+(n-p)*2)),o?(r=1-n,i=p):(r=p,i=1-n);let a={zIndex:e.stackDepth+1,left:r*100+"%",right:i*100+"%"};return b&&!e.stackForward&&(a[o?"marginLeft":"marginRight"]=10*2),a}};function ia(t,{todayRange:e,nowDate:o,eventSelection:M,eventDrag:b,eventResize:p}){let n=(b?b.affectedInstances:null)||(p?p.affectedInstances:null)||{};return d(H,null,t.map(r=>{let i=r.eventRange.instance.instanceId;return d("div",{key:i,style:{visibility:n[i]?"hidden":""}},d(Ab,Object.assign({seg:r,isDragging:!1,isResizing:!1,isDateSelecting:!1,isSelected:i===M,isShort:!1},_0(r,e,o))))}))}function Kz(t){return t?{top:t.start,bottom:-t.end}:{top:"",bottom:""}}function OW(t,e){return t.map(o=>e[o.index])}var Mn=class extends X{constructor(){super(...arguments),this.splitFgEventSegs=E(ro),this.splitBgEventSegs=E(ro),this.splitBusinessHourSegs=E(ro),this.splitNowIndicatorSegs=E(ro),this.splitDateSelectionSegs=E(ro),this.splitEventDrag=E(pa),this.splitEventResize=E(pa),this.rootElRef=V(),this.cellElRefs=new W0}render(){let{props:e,context:o}=this,M=o.options.nowIndicator&&e.slatCoords&&e.slatCoords.safeComputeTop(e.nowDate),b=e.cells.length,p=this.splitFgEventSegs(e.fgEventSegs,b),n=this.splitBgEventSegs(e.bgEventSegs,b),r=this.splitBusinessHourSegs(e.businessHourSegs,b),i=this.splitNowIndicatorSegs(e.nowIndicatorSegs,b),a=this.splitDateSelectionSegs(e.dateSelectionSegs,b),s=this.splitEventDrag(e.eventDrag,b),u=this.splitEventResize(e.eventResize,b);return d("div",{className:"fc-timegrid-cols",ref:this.rootElRef},d("table",{role:"presentation",style:{minWidth:e.tableMinWidth,width:e.clientWidth}},e.tableColGroupNode,d("tbody",{role:"presentation"},d("tr",{role:"row"},e.axis&&d("td",{"aria-hidden":!0,className:"fc-timegrid-col fc-timegrid-axis"},d("div",{className:"fc-timegrid-col-frame"},d("div",{className:"fc-timegrid-now-indicator-container"},typeof M=="number"&&d(P1,{elClasses:["fc-timegrid-now-indicator-arrow"],elStyle:{top:M},isAxis:!0,date:e.nowDate})))),e.cells.map((A,q)=>d(on,{key:A.key,elRef:this.cellElRefs.createRef(A.key),dateProfile:e.dateProfile,date:A.date,nowDate:e.nowDate,todayRange:e.todayRange,extraRenderProps:A.extraRenderProps,extraDataAttrs:A.extraDataAttrs,extraClassNames:A.extraClassNames,extraDateSpan:A.extraDateSpan,fgEventSegs:p[q],bgEventSegs:n[q],businessHourSegs:r[q],nowIndicatorSegs:i[q],dateSelectionSegs:a[q],eventDrag:s[q],eventResize:u[q],slatCoords:e.slatCoords,eventSelection:e.eventSelection,forPrint:e.forPrint}))))))}componentDidMount(){this.updateCoords()}componentDidUpdate(){this.updateCoords()}updateCoords(){let{props:e}=this;e.onColCoords&&e.clientWidth!==null&&e.onColCoords(new G0(this.rootElRef.current,lW(this.cellElRefs.currentMap,e.cells),!0,!1))}};function lW(t,e){return e.map(o=>t[o.key])}var io=class extends s0{constructor(){super(...arguments),this.processSlotOptions=E(AW),this.state={slatCoords:null},this.handleRootEl=e=>{e?this.context.registerInteractiveComponent(this,{el:e,isHitComboAllowed:this.props.isHitComboAllowed}):this.context.unregisterInteractiveComponent(this)},this.handleScrollRequest=e=>{let{onScrollTopRequest:o}=this.props,{slatCoords:M}=this.state;if(o&&M){if(e.time){let b=M.computeTimeTop(e.time);b=Math.ceil(b),b&&(b+=1),o(b)}return!0}return!1},this.handleColCoords=e=>{this.colCoords=e},this.handleSlatCoords=e=>{this.setState({slatCoords:e}),this.props.onSlatCoords&&this.props.onSlatCoords(e)}}render(){let{props:e,state:o}=this;return d("div",{className:"fc-timegrid-body",ref:this.handleRootEl,style:{width:e.clientWidth,minWidth:e.tableMinWidth}},d(en,{axis:e.axis,dateProfile:e.dateProfile,slatMetas:e.slatMetas,clientWidth:e.clientWidth,minHeight:e.expandRows?e.clientHeight:"",tableMinWidth:e.tableMinWidth,tableColGroupNode:e.axis?e.tableColGroupNode:null,onCoords:this.handleSlatCoords}),d(Mn,{cells:e.cells,axis:e.axis,dateProfile:e.dateProfile,businessHourSegs:e.businessHourSegs,bgEventSegs:e.bgEventSegs,fgEventSegs:e.fgEventSegs,dateSelectionSegs:e.dateSelectionSegs,eventSelection:e.eventSelection,eventDrag:e.eventDrag,eventResize:e.eventResize,todayRange:e.todayRange,nowDate:e.nowDate,nowIndicatorSegs:e.nowIndicatorSegs,clientWidth:e.clientWidth,tableMinWidth:e.tableMinWidth,tableColGroupNode:e.tableColGroupNode,slatCoords:o.slatCoords,onColCoords:this.handleColCoords,forPrint:e.forPrint}))}componentDidMount(){this.scrollResponder=this.context.createScrollResponder(this.handleScrollRequest)}componentDidUpdate(e){this.scrollResponder.update(e.dateProfile!==this.props.dateProfile)}componentWillUnmount(){this.scrollResponder.detach()}queryHit(e,o){let{dateEnv:M,options:b}=this.context,{colCoords:p}=this,{dateProfile:n}=this.props,{slatCoords:r}=this.state,{snapDuration:i,snapsPerSlot:a}=this.processSlotOptions(this.props.slotDuration,b.snapDuration),s=p.leftToIndex(e),u=r.positions.topToIndex(o);if(s!=null&&u!=null){let A=this.props.cells[s],q=r.positions.tops[u],W=r.positions.getHeight(u),h=(o-q)/W,m=Math.floor(h*a),y=u*a+m,N=this.props.cells[s].date,w=xt(n.slotMinTime,_t(i,y)),x=M.add(N,w),K=M.add(x,i);return{dateProfile:n,dateSpan:Object.assign({range:{start:x,end:K},allDay:!1},A.extraDateSpan),dayEl:p.els[s],rect:{left:p.lefts[s],right:p.rights[s],top:q,bottom:q+W},layer:0}}return null}};function AW(t,e){let o=e||t,M=B1(t,o);return M===null&&(o=t,M=1),{snapDuration:o,snapsPerSlot:M}}var ao=class extends pe{sliceRange(e,o){let M=[];for(let b=0;bd(io,Object.assign({ref:this.timeColsRef},this.slicer.sliceProps(e,M,null,o,r),{forPrint:e.forPrint,axis:e.axis,dateProfile:M,slatMetas:e.slatMetas,slotDuration:e.slotDuration,cells:b.cells[0],tableColGroupNode:e.tableColGroupNode,tableMinWidth:e.tableMinWidth,clientWidth:e.clientWidth,clientHeight:e.clientHeight,expandRows:e.expandRows,nowDate:i,nowIndicatorSegs:p&&this.slicer.sliceNowDate(i,M,n,o,r),todayRange:a,onScrollTopRequest:e.onScrollTopRequest,onSlatCoords:e.onSlatCoords})))}};function zn(t,e,o){let M=[];for(let b of t.headerDates)M.push({start:o.add(b,e.slotMinTime),end:o.add(b,e.slotMaxTime)});return M}var ra=[{hours:1},{minutes:30},{minutes:15},{seconds:30},{seconds:15}];function nn(t,e,o,M,b){let p=new Date(0),n=t,r=Y(0),i=o||dW(M),a=[];for(;S0(n)=0;e-=1)if(o=Y(ra[e]),M=B1(o,t),M!==null&&M>1)return o;return t}var db=class extends co{constructor(){super(...arguments),this.buildTimeColsModel=E(rn),this.buildSlatMetas=E(nn)}render(){let{options:e,dateEnv:o,dateProfileGenerator:M}=this.context,{props:b}=this,{dateProfile:p}=b,n=this.buildTimeColsModel(p,M),r=this.allDaySplitter.splitProps(b),i=this.buildSlatMetas(p.slotMinTime,p.slotMaxTime,e.slotLabelInterval,e.slotDuration,o),{dayMinWidth:a}=e,s=!a,u=a,A=e.dayHeaders&&d(be,{dates:n.headerDates,dateProfile:p,datesRepDistinctDays:!0,renderIntro:s?this.renderHeadAxis:null}),q=e.allDaySlot!==!1&&(h=>d(po,Object.assign({},r.allDay,{dateProfile:p,dayTableModel:n,nextDayThreshold:e.nextDayThreshold,tableMinWidth:h.tableMinWidth,colGroupNode:h.tableColGroupNode,renderRowIntro:s?this.renderTableRowAxis:null,showWeekNumbers:!1,expandRows:!1,headerAlignElRef:this.headerElRef,clientWidth:h.clientWidth,clientHeight:h.clientHeight,forPrint:b.forPrint},this.getAllDayMaxEventProps()))),W=h=>d(bn,Object.assign({},r.timed,{dayTableModel:n,dateProfile:p,axis:s,slotDuration:e.slotDuration,slatMetas:i,forPrint:b.forPrint,tableColGroupNode:h.tableColGroupNode,tableMinWidth:h.tableMinWidth,clientWidth:h.clientWidth,clientHeight:h.clientHeight,onSlatCoords:this.handleSlatCoords,expandRows:h.expandRows,onScrollTopRequest:this.handleScrollTopRequest}));return u?this.renderHScrollLayout(A,q,W,n.colCnt,a,i,this.state.slatCoords):this.renderSimpleLayout(A,q,W)}};function rn(t,e){let o=new Je(t.renderRange,e);return new $e(o,!1)}var uW={allDaySlot:Boolean},ub=$({name:"@fullcalendar/timegrid",initialView:"timeGridWeek",optionRefiners:uW,views:{timeGrid:{component:db,usesMinMaxTime:!0,allDaySlot:!0,slotDuration:"00:30:00",slotEventOverlap:!0},timeGridDay:{type:"timeGrid",duration:{days:1}},timeGridWeek:{type:"timeGrid",duration:{weeks:1}}}});var cn=class extends X{constructor(){super(...arguments),this.state={textId:M1()}}render(){let{theme:e,dateEnv:o,options:M,viewApi:b}=this.context,{cellId:p,dayDate:n,todayRange:r}=this.props,{textId:i}=this.state,a=ke(n,r),s=M.listDayFormat?o.format(n,M.listDayFormat):"",u=M.listDaySideFormat?o.format(n,M.listDaySideFormat):"",A=Object.assign({date:o.toDate(n),view:b,textId:i,text:s,sideText:u,navLinkAttrs:W1(this.context,n),sideNavLinkAttrs:W1(this.context,n,"day",!1)},a);return d(b0,{elTag:"tr",elClasses:["fc-list-day",...Oe(a,e)],elAttrs:{"data-date":k1(n)},renderProps:A,generatorName:"dayHeaderContent",customGenerator:M.dayHeaderContent,defaultGenerator:qW,classNameGenerator:M.dayHeaderClassNames,didMount:M.dayHeaderDidMount,willUnmount:M.dayHeaderWillUnmount},q=>d("th",{scope:"colgroup",colSpan:3,id:p,"aria-labelledby":i},d(q,{elTag:"div",elClasses:["fc-list-day-cushion",e.getClass("tableCellShaded")]})))}};function qW(t){return d(H,null,t.text&&d("a",Object.assign({id:t.textId,className:"fc-list-day-text"},t.navLinkAttrs),t.text),t.sideText&&d("a",Object.assign({"aria-hidden":!0,className:"fc-list-day-side-text"},t.sideNavLinkAttrs),t.sideText))}var fW=J({hour:"numeric",minute:"2-digit",meridiem:"short"}),an=class extends X{render(){let{props:e,context:o}=this,{options:M}=o,{seg:b,timeHeaderId:p,eventHeaderId:n,dateHeaderId:r}=e,i=M.eventTimeFormat||fW;return d(ze,Object.assign({},e,{elTag:"tr",elClasses:["fc-list-event",b.eventRange.def.url&&"fc-event-forced-url"],defaultGenerator:()=>WW(b,o),seg:b,timeText:"",disableDragging:!0,disableResizing:!0}),(a,s)=>d(H,null,hW(b,i,o,p,r),d("td",{"aria-hidden":!0,className:"fc-list-event-graphic"},d("span",{className:"fc-list-event-dot",style:{borderColor:s.borderColor||s.backgroundColor}})),d(a,{elTag:"td",elClasses:["fc-list-event-title"],elAttrs:{headers:`${n} ${r}`}})))}};function WW(t,e){let o=U2(t,e);return d("a",Object.assign({},o),t.eventRange.def.title)}function hW(t,e,o,M,b){let{options:p}=o;if(p.displayEventTime!==!1){let n=t.eventRange.def,r=t.eventRange.instance,i=!1,a;if(n.allDay?i=!0:iz(t.eventRange.range)?t.isStart?a=_e(t,e,o,null,null,r.range.start,t.end):t.isEnd?a=_e(t,e,o,null,null,t.start,r.range.end):i=!0:a=_e(t,e,o),i){let s={text:o.options.allDayText,view:o.viewApi};return d(b0,{elTag:"td",elClasses:["fc-list-event-time"],elAttrs:{headers:`${M} ${b}`},renderProps:s,generatorName:"allDayContent",customGenerator:p.allDayContent,defaultGenerator:RW,classNameGenerator:p.allDayClassNames,didMount:p.allDayDidMount,willUnmount:p.allDayWillUnmount})}return d("td",{className:"fc-list-event-time"},a)}return null}function RW(t){return t.text}var qb=class extends s0{constructor(){super(...arguments),this.computeDateVars=E(gW),this.eventStoreToSegs=E(this._eventStoreToSegs),this.state={timeHeaderId:M1(),eventHeaderId:M1(),dateHeaderIdRoot:M1()},this.setRootEl=e=>{e?this.context.registerInteractiveComponent(this,{el:e}):this.context.unregisterInteractiveComponent(this)}}render(){let{props:e,context:o}=this,{dayDates:M,dayRanges:b}=this.computeDateVars(e.dateProfile),p=this.eventStoreToSegs(e.eventStore,e.eventUiBases,b);return d(C0,{elRef:this.setRootEl,elClasses:["fc-list",o.theme.getClass("table"),o.options.stickyHeaderDates!==!1?"fc-list-sticky":""],viewSpec:o.viewSpec},d(Te,{liquid:!e.isHeightAuto,overflowX:e.isHeightAuto?"visible":"hidden",overflowY:e.isHeightAuto?"visible":"auto"},p.length>0?this.renderSegList(p,M):this.renderEmptyMessage()))}renderEmptyMessage(){let{options:e,viewApi:o}=this.context,M={text:e.noEventsText,view:o};return d(b0,{elTag:"div",elClasses:["fc-list-empty"],renderProps:M,generatorName:"noEventsContent",customGenerator:e.noEventsContent,defaultGenerator:mW,classNameGenerator:e.noEventsClassNames,didMount:e.noEventsDidMount,willUnmount:e.noEventsWillUnmount},b=>d(b,{elTag:"div",elClasses:["fc-list-empty-cushion"]}))}renderSegList(e,o){let{theme:M,options:b}=this.context,{timeHeaderId:p,eventHeaderId:n,dateHeaderIdRoot:r}=this.state,i=LW(e);return d(L0,{unit:"day"},(a,s)=>{let u=[];for(let A=0;A{e&&this.updateSize()}}render(){let{context:e,props:o,state:M}=this,{options:b}=e,{clientWidth:p,clientHeight:n}=M,r=M.monthHPadding||0,i=Math.min(p!=null?Math.floor(p/(b.multiMonthMinWidth+r)):1,b.multiMonthMaxColumns)||1,a=100/i+"%",s=p==null?null:p/i-r,u=p!=null&&i===1,A=this.splitDateProfileByMonth(e.dateProfileGenerator,o.dateProfile,e.dateEnv,u?!1:b.fixedWeekCount,b.showNonCurrentDates),q=this.buildMonthFormat(b.multiMonthTitleFormat,A),W=["fc-multimonth",u?"fc-multimonth-singlecol":"fc-multimonth-multicol",s!=null&&s<400?"fc-multimonth-compact":""];return d(C0,{elRef:this.scrollElRef,elClasses:W,viewSpec:e.viewSpec},A.map((h,m)=>{let y=X2(h.currentRange.start);return d(sn,Object.assign({},o,{key:y,isoDateStr:y,elRef:m===0?this.firstMonthElRef:void 0,titleFormat:q,dateProfile:h,width:a,tableWidth:s,clientWidth:p,clientHeight:n}))}))}componentDidMount(){this.updateSize(),this.context.addResizeHandler(this.handleSizing),this.requestScrollReset()}componentDidUpdate(e){R0(e,this.props)||this.handleSizing(!1),e.dateProfile!==this.props.dateProfile?this.requestScrollReset():this.flushScrollReset()}componentWillUnmount(){this.context.removeResizeHandler(this.handleSizing)}updateSize(){let e=this.scrollElRef.current,o=this.firstMonthElRef.current;e&&this.setState({clientWidth:e.clientWidth,clientHeight:e.clientHeight}),o&&e&&this.state.monthHPadding==null&&this.setState({monthHPadding:e.clientWidth-o.firstChild.offsetWidth})}requestScrollReset(){this.needsScrollReset=!0,this.flushScrollReset()}flushScrollReset(){if(this.needsScrollReset&&this.state.monthHPadding!=null){let{currentDate:e}=this.props.dateProfile,o=this.scrollElRef.current,M=o.querySelector(`[data-date="${X2(e)}"]`);o.scrollTop=M.getBoundingClientRect().top-this.firstMonthElRef.current.getBoundingClientRect().top,this.needsScrollReset=!1}}shouldComponentUpdate(){return!0}},NW=Y(1,"month");function BW(t,e,o,M,b){let{start:p,end:n}=e.currentRange,r=p,i=[];for(;r.valueOf()0?e="positive":(t.scrollLeft=1,t.scrollLeft>0?e="reverse":e="negative"),e2(t),e}var VW=".fc-sticky",ln=class{constructor(e,o){this.scrollEl=e,this.isRtl=o,this.updateSize=()=>{let{scrollEl:M}=this,b=f1(M,VW),p=this.queryElGeoms(b),n=M.clientWidth;KW(b,p,n)}}queryElGeoms(e){let{scrollEl:o,isRtl:M}=this,b=jW(o),p=[];for(let n of e){let r=_M(Qt(n.parentNode,!0,!0),-b.left,-b.top),i=n.getBoundingClientRect(),a=window.getComputedStyle(n),s=window.getComputedStyle(n.parentNode).textAlign,u=null;s==="start"?s=M?"right":"left":s==="end"&&(s=M?"left":"right"),a.position!=="sticky"&&(u=_M(i,-b.left-(parseFloat(a.left)||0),-b.top-(parseFloat(a.top)||0))),p.push({parentBound:r,naturalBound:u,elWidth:i.width,elHeight:i.height,textAlign:s})}return p}};function KW(t,e,o){t.forEach((M,b)=>{let{textAlign:p,elWidth:n,parentBound:r}=e[b],i=r.right-r.left,a;p==="center"&&i>o?a=(o-n)/2:a="",ie(M,{left:a,right:a,top:0})})}var An=class extends X{constructor(){super(...arguments),this.elRef=V(),this.state={xScrollbarWidth:0,yScrollbarWidth:0},this.handleScroller=e=>{this.scroller=e,V0(this.props.scrollerRef,e)},this.handleSizing=()=>{let{props:e}=this;e.overflowY==="scroll-hidden"&&this.setState({yScrollbarWidth:this.scroller.getYScrollbarWidth()}),e.overflowX==="scroll-hidden"&&this.setState({xScrollbarWidth:this.scroller.getXScrollbarWidth()})}}render(){let{props:e,state:o,context:M}=this,b=M.isRtl&&F2(),p=0,n=0,r=0,{overflowX:i,overflowY:a}=e;return e.forPrint&&(i="visible",a="visible"),i==="scroll-hidden"&&(r=o.xScrollbarWidth),a==="scroll-hidden"&&o.yScrollbarWidth!=null&&(b?p=o.yScrollbarWidth:n=o.yScrollbarWidth),d("div",{ref:this.elRef,className:"fc-scroller-harness"+(e.liquid?" fc-scroller-harness-liquid":"")},d(Te,{ref:this.handleScroller,elRef:this.props.scrollerElRef,overflowX:i==="scroll-hidden"?"scroll":i,overflowY:a==="scroll-hidden"?"scroll":a,overcomeLeft:p,overcomeRight:n,overcomeBottom:r,maxHeight:typeof e.maxHeight=="number"?e.maxHeight+(i==="scroll-hidden"?o.xScrollbarWidth:0):"",liquid:e.liquid,liquidIsAbsolute:!0},e.children))}componentDidMount(){this.handleSizing(),this.context.addResizeHandler(this.handleSizing)}getSnapshotBeforeUpdate(e){return this.props.forPrint&&!e.forPrint?{simulateScrollLeft:this.scroller.el.scrollLeft}:{}}componentDidUpdate(e,o,M){let{props:b,scroller:{el:p}}=this;if(R0(e,b)||this.handleSizing(),M.simulateScrollLeft!==void 0)p.style.left=-M.simulateScrollLeft+"px";else if(!b.forPrint&&e.forPrint){let n=-parseInt(p.style.left);p.style.left="",p.scrollLeft=n}}componentWillUnmount(){this.context.removeResizeHandler(this.handleSizing)}needsXScrolling(){return this.scroller.needsXScrolling()}needsYScrolling(){return this.scroller.needsYScrolling()}},Aa="wheel mousewheel DomMouseScroll MozMousePixelScroll".split(" "),dn=class{constructor(e){this.el=e,this.emitter=new y1,this.isScrolling=!1,this.isTouching=!1,this.isRecentlyWheeled=!1,this.isRecentlyScrolled=!1,this.wheelWaiter=new C1(this._handleWheelWaited.bind(this)),this.scrollWaiter=new C1(this._handleScrollWaited.bind(this)),this.handleScroll=()=>{this.startScroll(),this.emitter.trigger("scroll",this.isRecentlyWheeled,this.isTouching),this.isRecentlyScrolled=!0,this.scrollWaiter.request(500)},this.handleWheel=()=>{this.isRecentlyWheeled=!0,this.wheelWaiter.request(500)},this.handleTouchStart=()=>{this.isTouching=!0},this.handleTouchEnd=()=>{this.isTouching=!1,this.isRecentlyScrolled||this.endScroll()},e.addEventListener("scroll",this.handleScroll),e.addEventListener("touchstart",this.handleTouchStart,{passive:!0}),e.addEventListener("touchend",this.handleTouchEnd);for(let o of Aa)e.addEventListener(o,this.handleWheel)}destroy(){let{el:e}=this;e.removeEventListener("scroll",this.handleScroll),e.removeEventListener("touchstart",this.handleTouchStart,{passive:!0}),e.removeEventListener("touchend",this.handleTouchEnd);for(let o of Aa)e.removeEventListener(o,this.handleWheel)}startScroll(){this.isScrolling||(this.isScrolling=!0,this.emitter.trigger("scrollStart",this.isRecentlyWheeled,this.isTouching))}endScroll(){this.isScrolling&&(this.emitter.trigger("scrollEnd"),this.isScrolling=!1,this.isRecentlyScrolled=!0,this.isRecentlyWheeled=!1,this.scrollWaiter.clear(),this.wheelWaiter.clear())}_handleScrollWaited(){this.isRecentlyScrolled=!1,this.isTouching||this.endScroll()}_handleWheelWaited(){this.isRecentlyWheeled=!1}},un=class{constructor(e,o){this.isVertical=e,this.scrollEls=o,this.isPaused=!1,this.scrollListeners=o.map(M=>this.bindScroller(M))}destroy(){for(let e of this.scrollListeners)e.destroy()}bindScroller(e){let{scrollEls:o,isVertical:M}=this,b=new dn(e),p=(r,i)=>{if(!this.isPaused&&((!this.masterEl||this.masterEl!==e&&(r||i))&&this.assignMaster(e),this.masterEl===e))for(let a of o)a!==e&&(M?a.scrollTop=e.scrollTop:a.scrollLeft=e.scrollLeft)},n=()=>{this.masterEl===e&&(this.masterEl=null)};return b.emitter.on("scroll",p),b.emitter.on("scrollEnd",n),b}assignMaster(e){this.masterEl=e;for(let o of this.scrollListeners)o.el!==e&&o.endScroll()}forceScrollLeft(e){this.isPaused=!0;for(let o of this.scrollListeners)GW(o.el,e);this.isPaused=!1}forceScrollTop(e){this.isPaused=!0;for(let o of this.scrollListeners)o.el.scrollTop=e;this.isPaused=!1}};T0.SCROLLGRID_RESIZE_INTERVAL=500;var Ae=class extends X{constructor(){super(...arguments),this.compileColGroupStats=It($W,t5),this.renderMicroColGroups=It(QM),this.clippedScrollerRefs=new W0,this.scrollerElRefs=new W0(this._handleScrollerEl.bind(this)),this.chunkElRefs=new W0(this._handleChunkEl.bind(this)),this.scrollSyncersBySection={},this.scrollSyncersByColumn={},this.rowUnstableMap=new Map,this.rowInnerMaxHeightMap=new Map,this.anyRowHeightsChanged=!1,this.recentSizingCnt=0,this.state={shrinkWidths:[],forceYScrollbars:!1,forceXScrollbars:!1,scrollerClientWidths:{},scrollerClientHeights:{},sectionRowMaxHeights:[]},this.handleSizing=(e,o)=>{if(!this.allowSizing())return;o||(this.anyRowHeightsChanged=!0);let M={};(e||!o&&!this.rowUnstableMap.size)&&(M.sectionRowMaxHeights=this.computeSectionRowMaxHeights()),this.setState(Object.assign(Object.assign({shrinkWidths:this.computeShrinkWidths()},this.computeScrollerDims()),M),()=>{this.rowUnstableMap.size||this.updateStickyScrolling()})},this.handleRowHeightChange=(e,o)=>{let{rowUnstableMap:M,rowInnerMaxHeightMap:b}=this;if(!o)M.set(e,!0);else{M.delete(e);let p=da(e);(!b.has(e)||b.get(e)!==p)&&(b.set(e,p),this.anyRowHeightsChanged=!0),!M.size&&this.anyRowHeightsChanged&&(this.anyRowHeightsChanged=!1,this.setState({sectionRowMaxHeights:this.computeSectionRowMaxHeights()}))}}}render(){let{props:e,state:o,context:M}=this,{shrinkWidths:b}=o,p=this.compileColGroupStats(e.colGroups.map(y=>[y])),n=this.renderMicroColGroups(p.map((y,N)=>[y.cols,b[N]])),r=$M(e.liquid,M);this.getDims();let i=e.sections,a=i.length,s=0,u,A=[],q=[],W=[];for(;sthis.renderChunk(e,o,M[i],b[i],r,i,(p[o]||[])[i]||[],n)))}renderChunk(e,o,M,b,p,n,r,i){if("outerContent"in p)return d(H,{key:p.key},p.outerContent);let{state:a}=this,{scrollerClientWidths:s,scrollerClientHeights:u}=a,[A,q]=this.getDims(),W=o*q+n,h=!this.context.isRtl||F2()?q-1:0,m=n===h,y=o===A-1,N=y&&a.forceXScrollbars,w=m&&a.forceYScrollbars,x=M&&M.allowXScrolling,K=YM(this.props,e),P=eo(this.props,e),n0=e.expandRows&&P,F=M&&M.totalColMinWidth||"",w0=VM(e,p,{tableColGroupNode:b,tableMinWidth:F,clientWidth:s[W]!==void 0?s[W]:null,clientHeight:u[W]!==void 0?u[W]:null,expandRows:n0,syncRowHeights:!!e.syncRowHeights,rowSyncHeights:r,reportRowHeightChange:this.handleRowHeightChange},i),O1=N?y?"scroll":"scroll-hidden":x?y?"auto":"scroll-hidden":"hidden",H0=w?m?"scroll":"scroll-hidden":K?m?"auto":"scroll-hidden":"hidden";return w0=d(An,{ref:this.clippedScrollerRefs.createRef(W),scrollerElRef:this.scrollerElRefs.createRef(W),overflowX:O1,overflowY:H0,forPrint:this.props.forPrint,liquid:P,maxHeight:e.maxHeight},w0),d(i?"th":"td",{key:p.key,ref:this.chunkElRefs.createRef(W),role:"presentation"},w0)}componentDidMount(){this.getStickyScrolling=It(o5),this.getScrollSyncersBySection=NM(qa.bind(this,!0),null,fb),this.getScrollSyncersByColumn=NM(qa.bind(this,!1),null,fb),this.updateScrollSyncers(),this.handleSizing(!1),this.context.addResizeHandler(this.handleSizing)}componentDidUpdate(e,o){this.updateScrollSyncers(),this.handleSizing(!1,o.sectionRowMaxHeights!==this.state.sectionRowMaxHeights)}componentWillUnmount(){this.context.removeResizeHandler(this.handleSizing),this.destroyScrollSyncers()}allowSizing(){let e=new Date;return!this.lastSizingDate||e.valueOf()>this.lastSizingDate.valueOf()+T0.SCROLLGRID_RESIZE_INTERVAL?(this.lastSizingDate=e,this.recentSizingCnt=0,!0):(this.recentSizingCnt+=1)<=10}computeShrinkWidths(){let e=this.compileColGroupStats(this.props.colGroups.map(n=>[n])),[o,M]=this.getDims(),b=o*M,p=[];return e.forEach((n,r)=>{if(n.hasShrinkCol){let i=this.chunkElRefs.collect(r,b,M);p[r]=GM(i)}}),p}computeSectionRowMaxHeights(){let e=new Map,[o,M]=this.getDims(),b=[];for(let p=0;p{let m=da(h);return e.set(h,m),m}):q=[],i.push(q)}let a=i[0].length,s=!0;for(let u=1;u[M,e]);this.getStickyScrolling(o).forEach(M=>M.updateSize())}updateScrollSyncers(){let[e,o]=this.getDims(),M=e*o,b={},p={},n=this.scrollerElRefs.currentMap;for(let r=0;r{let p=M.width;return p==="shrink"&&(p=M.totalColWidth+ZM(e[b])+1),d("col",{style:{width:p}})});return d("colgroup",{},...o)}function $W(t){let e=ua(t.cols,"width"),o=ua(t.cols,"minWidth"),M=JM(t.cols),b=t.width!=="shrink"&&!!(e||o||M);return{hasShrinkCol:M,totalColWidth:e,totalColMinWidth:o,allowXScrolling:b,cols:t.cols,width:t.width}}function ua(t,e){let o=0;for(let M of t){let b=M[e];typeof b=="number"&&(o+=b*(M.span||1))}return o}var e5={cols:KM};function t5(t,e){return S2(t,e,e5)}function qa(t,...e){return new un(t,e)}function fb(t){t.destroy()}function o5(t,e){return new ln(t,e)}var Wa=$({name:"@fullcalendar/scrollgrid",premiumReleaseDate:"2023-09-21",deps:[z1],scrollGridImpl:Ae});var M5=18,Wb=6,b5=200;T0.MAX_TIMELINE_SLOTS=1e3;var qn=[{years:1},{months:1},{days:1},{hours:1},{minutes:30},{minutes:15},{minutes:10},{minutes:5},{minutes:1},{seconds:30},{seconds:15},{seconds:10},{seconds:5},{seconds:1},{milliseconds:500},{milliseconds:100},{milliseconds:10},{milliseconds:1}];function vn(t,e,o,M){let b={labelInterval:o.slotLabelInterval,slotDuration:o.slotDuration};z5(b,t,e),ma(b,t,e),n5(b,t,e);let p=o.slotLabelFormat,n=Array.isArray(p)?p:p!=null?[p]:r5(b,t,e,o);b.headerFormats=n.map(x=>J(x)),b.isTimeScale=!!b.slotDuration.milliseconds;let r=null;if(!b.isTimeScale){let x=d1(b.slotDuration).unit;/year|month|week/.test(x)&&(r=x)}b.largeUnit=r,b.emphasizeWeeks=yM(b.slotDuration)===1&&Q2("weeks",t,e)>=2&&!o.businessHours;let i=o.snapDuration,a,s;i&&(a=Y(i),s=B1(b.slotDuration,a)),s==null&&(a=b.slotDuration,s=1),b.snapDuration=a,b.snapsPerSlot=s;let u=S0(t.slotMaxTime)-S0(t.slotMinTime),A=ha(t.renderRange.start,b,e),q=ha(t.renderRange.end,b,e);b.isTimeScale&&(A=e.add(A,t.slotMinTime),q=e.add(d0(q,-1),t.slotMaxTime)),b.timeWindowMs=u,b.normalizedRange={start:A,end:q};let W=[],h=A;for(;hT0.MAX_TIMELINE_SLOTS&&(console.warn("slotLabelInterval results in too many cells"),t.labelInterval=null),t.slotDuration&&o.countDurationsBetween(M.start,M.end,t.slotDuration)>T0.MAX_TIMELINE_SLOTS&&(console.warn("slotDuration results in too many cells"),t.slotDuration=null),t.labelInterval&&t.slotDuration){let b=B1(t.labelInterval,t.slotDuration);(b===null||b<1)&&(console.warn("slotLabelInterval must be a multiple of slotDuration"),t.slotDuration=null)}}function ma(t,e,o){let{currentRange:M}=e,{labelInterval:b}=t;if(!b){let p;if(t.slotDuration){for(p of qn){let n=Y(p),r=B1(n,t.slotDuration);if(r!==null&&r<=Wb){b=n;break}}b||(b=t.slotDuration)}else for(p of qn)if(b=Y(p),o.countDurationsBetween(M.start,M.end,b)>=M5)break;t.labelInterval=b}return b}function n5(t,e,o){let{currentRange:M}=e,{slotDuration:b}=t;if(!b){let p=ma(t,e,o);for(let n of qn){let r=Y(n),i=B1(p,r);if(i!==null&&i>1&&i<=Wb){b=r;break}}b&&o.countDurationsBetween(M.start,M.end,b)>b5&&(b=null),b||(b=p),t.slotDuration=b}return b}function r5(t,e,o,M){let b,p,{labelInterval:n}=t,r=d1(n).unit,i=M.weekNumbers,a=b=p=null;switch(r==="week"&&!i&&(r="day"),r){case"year":a={year:"numeric"};break;case"month":Q2("years",e,o)>1&&(a={year:"numeric"}),b={month:"short"};break;case"week":Q2("years",e,o)>1&&(a={year:"numeric"}),b={week:"narrow"};break;case"day":Q2("years",e,o)>1?a={year:"numeric",month:"long"}:Q2("months",e,o)>1&&(a={month:"long"}),i&&(b={week:"short"}),p={weekday:"narrow",day:"numeric"};break;case"hour":i&&(a={week:"short"}),Q2("days",e,o)>1&&(b={weekday:"short",day:"numeric",month:"numeric",omitCommas:!0}),p={hour:"numeric",minute:"2-digit",omitZeroMinute:!0,meridiem:"short"};break;case"minute":Qp(n)/60>=Wb?(a={hour:"numeric",meridiem:"short"},b=s=>":"+L1(s.date.minute,2)):a={hour:"numeric",minute:"numeric",meridiem:"short"};break;case"second":Zp(n)/60>=Wb?(a={hour:"numeric",minute:"2-digit",meridiem:"lowercase"},b=s=>":"+L1(s.date.second,2)):a={hour:"numeric",minute:"2-digit",second:"2-digit",meridiem:"lowercase"};break;case"millisecond":a={hour:"numeric",minute:"2-digit",second:"2-digit",meridiem:"lowercase"},b=s=>"."+L1(s.millisecond,3);break}return[].concat(a||[],b||[],p||[])}function Q2(t,e,o){let M=e.currentRange,b=null;return t==="years"?b=o.diffWholeYears(M.start,M.end):t==="months"||t==="weeks"?b=o.diffWholeMonths(M.start,M.end):t==="days"&&(b=Be(M.start,M.end)),b||0}function c5(t,e){let{slotDates:o,emphasizeWeeks:M}=t,b=null,p=[];for(let n of o){let r=e.computeWeekNumber(n),i=M&&b!==null&&b!==r;b=r,p.push(i)}return p}function i5(t,e){let o=t.slotDates,M=t.headerFormats,b=M.map(()=>[]),p=yM(t.slotDuration),n=p===7?"week":p===1?"day":null,r=M.map(i=>i.getLargestUnit?i.getLargestUnit():null);for(let i=0;i1&&!h,y=null,N=r[u]||(h?n:null);if(m){let w=e.format(a,A);!W||W.text!==w?y=Ra(a,w,N):W.colspan+=1}else if(!W||te(e.countDurationsBetween(t.normalizedRange.start,a,t.labelInterval))){let w=e.format(a,A);y=Ra(a,w,N)}else W.colspan+=1;y&&(y.weekStart=s,q.push(y))}}return b}function Ra(t,e,o){return{date:t,text:e,rowUnit:o,colspan:1,isWeekStart:!1}}var fn=class extends X{constructor(){super(...arguments),this.refineRenderProps=i1(O5),this.buildCellNavLinkAttrs=E(a5)}render(){let{props:e,context:o}=this,{dateEnv:M,options:b}=o,{cell:p,dateProfile:n,tDateProfile:r}=e,i=ke(p.date,e.todayRange,e.nowDate,n),a=this.refineRenderProps({level:e.rowLevel,dateMarker:p.date,text:p.text,dateEnv:o.dateEnv,viewApi:o.viewApi});return d(b0,{elTag:"th",elClasses:["fc-timeline-slot","fc-timeline-slot-label",p.isWeekStart&&"fc-timeline-slot-em",...p.rowUnit==="time"?kM(i,o.theme):Oe(i,o.theme)],elAttrs:{colSpan:p.colspan,"data-date":M.formatIso(p.date,{omitTime:!r.isTimeScale,omitTimeZoneOffset:!0})},renderProps:a,generatorName:"slotLabelContent",customGenerator:b.slotLabelContent,defaultGenerator:s5,classNameGenerator:b.slotLabelClassNames,didMount:b.slotLabelDidMount,willUnmount:b.slotLabelWillUnmount},s=>d("div",{className:"fc-timeline-slot-frame",style:{height:e.rowInnerHeight}},d(s,{elTag:"a",elClasses:["fc-timeline-slot-cushion","fc-scrollgrid-sync-inner",e.isSticky&&"fc-sticky"],elAttrs:this.buildCellNavLinkAttrs(o,p.date,p.rowUnit)})))}};function a5(t,e,o){return o&&o!=="time"?W1(t,e,o):{}}function s5(t){return t.text}function O5(t){return{level:t.level,date:t.dateEnv.toDate(t.dateMarker),view:t.viewApi,text:t.text}}var Wn=class extends X{render(){let{dateProfile:e,tDateProfile:o,rowInnerHeights:M,todayRange:b,nowDate:p}=this.props,{cellRows:n}=o;return d(H,null,n.map((r,i)=>{let a=i===n.length-1,u=["fc-timeline-header-row",o.isTimeScale&&a?"fc-timeline-header-row-chrono":""];return d("tr",{key:i,className:u.join(" ")},r.map(A=>d(fn,{key:A.date.toISOString(),cell:A,rowLevel:i,dateProfile:e,tDateProfile:o,todayRange:b,nowDate:p,rowInnerHeight:M&&M[i],isSticky:!a})))}))}},hn=class{constructor(e,o,M,b,p,n){this.slatRootEl=e,this.dateProfile=M,this.tDateProfile=b,this.dateEnv=p,this.isRtl=n,this.outerCoordCache=new G0(e,o,!0,!1),this.innerCoordCache=new G0(e,Pp(o,"div"),!0,!1)}isDateInRange(e){return o1(this.dateProfile.currentRange,e)}dateToCoord(e){let{tDateProfile:o}=this,b=this.computeDateSnapCoverage(e)/o.snapsPerSlot,p=Math.floor(b);p=Math.min(p,o.slotCnt-1);let n=b-p,{innerCoordCache:r,outerCoordCache:i}=this;return this.isRtl?i.originClientRect.width-(i.rights[p]-r.getWidth(p)*n):i.lefts[p]+r.getWidth(p)*n}rangeToCoords(e){return{start:this.dateToCoord(e.start),end:this.dateToCoord(e.end)}}durationToCoord(e){let{dateProfile:o,tDateProfile:M,dateEnv:b,isRtl:p}=this,n=0;if(o){let r=b.add(o.activeRange.start,e);M.isTimeScale||(r=t0(r)),n=this.dateToCoord(r),!p&&n&&(n+=1)}return n}coordFromLeft(e){return this.isRtl?this.outerCoordCache.originClientRect.width-e:e}computeDateSnapCoverage(e){return Rn(e,this.tDateProfile,this.dateEnv)}};function Rn(t,e,o){let M=o.countDurationsBetween(e.normalizedRange.start,t,e.snapDuration);if(M<0)return 0;if(M>=e.snapDiffToIndex.length)return e.snapCnt;let b=Math.floor(M),p=e.snapDiffToIndex[b];return te(p)?p+=M-b:p=Math.ceil(p),p}function gb(t,e){return t===null?{left:"",right:""}:e?{right:t,left:""}:{left:t,right:""}}function Nn(t,e){return t?e?{right:t.start,left:-t.end}:{left:t.start,right:-t.end}:{left:"",right:""}}var so=class extends X{constructor(){super(...arguments),this.rootElRef=V()}render(){let{props:e,context:o}=this,M=d1(e.tDateProfile.slotDuration).unit,b=e.slatCoords&&e.slatCoords.dateProfile===e.dateProfile?e.slatCoords:null;return d(L0,{unit:M},(p,n)=>d("div",{className:"fc-timeline-header",ref:this.rootElRef},d("table",{"aria-hidden":!0,className:"fc-scrollgrid-sync-table",style:{minWidth:e.tableMinWidth,width:e.clientWidth}},e.tableColGroupNode,d("tbody",null,d(Wn,{dateProfile:e.dateProfile,tDateProfile:e.tDateProfile,nowDate:p,todayRange:n,rowInnerHeights:e.rowInnerHeights}))),o.options.nowIndicator&&d("div",{className:"fc-timeline-now-indicator-container"},b&&b.isDateInRange(p)&&d(P1,{elClasses:["fc-timeline-now-indicator-arrow"],elStyle:gb(b.dateToCoord(p),o.isRtl),isAxis:!0,date:p}))))}componentDidMount(){this.updateSize()}componentDidUpdate(){this.updateSize()}updateSize(){this.props.onMaxCushionWidth&&this.props.onMaxCushionWidth(this.computeMaxCushionWidth())}computeMaxCushionWidth(){return Math.max(...f1(this.rootElRef.current,".fc-timeline-header-row:last-child .fc-timeline-slot-cushion").map(e=>e.getBoundingClientRect().width))}},mn=class extends X{render(){let{props:e,context:o}=this,{dateEnv:M,options:b,theme:p}=o,{date:n,tDateProfile:r,isEm:i}=e,a=ke(e.date,e.todayRange,e.nowDate,e.dateProfile),s=Object.assign(Object.assign({date:M.toDate(e.date)},a),{view:o.viewApi});return d(b0,{elTag:"td",elRef:e.elRef,elClasses:["fc-timeline-slot","fc-timeline-slot-lane",i&&"fc-timeline-slot-em",r.isTimeScale?te(M.countDurationsBetween(r.normalizedRange.start,e.date,r.labelInterval))?"fc-timeline-slot-major":"fc-timeline-slot-minor":"",...e.isDay?Oe(a,p):kM(a,p)],elAttrs:{"data-date":M.formatIso(n,{omitTimeZoneOffset:!0,omitTime:!r.isTimeScale})},renderProps:s,generatorName:"slotLaneContent",customGenerator:b.slotLaneContent,classNameGenerator:b.slotLaneClassNames,didMount:b.slotLaneDidMount,willUnmount:b.slotLaneWillUnmount},u=>d(u,{elTag:"div"}))}},gn=class extends X{render(){let{props:e}=this,{tDateProfile:o,cellElRefs:M}=e,{slotDates:b,isWeekStarts:p}=o,n=!o.isTimeScale&&!o.largeUnit;return d("tbody",null,d("tr",null,b.map((r,i)=>{let a=r.toISOString();return d(mn,{key:a,elRef:M.createRef(a),date:r,dateProfile:e.dateProfile,tDateProfile:o,nowDate:e.nowDate,todayRange:e.todayRange,isEm:p[i],isDay:n})})))}},Oo=class extends X{constructor(){super(...arguments),this.rootElRef=V(),this.cellElRefs=new W0,this.handleScrollRequest=e=>{let{onScrollLeftRequest:o}=this.props,{coords:M}=this;if(o&&M){if(e.time){let b=M.coordFromLeft(M.durationToCoord(e.time));o(b)}return!0}return null}}render(){let{props:e,context:o}=this;return d("div",{className:"fc-timeline-slots",ref:this.rootElRef},d("table",{"aria-hidden":!0,className:o.theme.getClass("table"),style:{minWidth:e.tableMinWidth,width:e.clientWidth}},e.tableColGroupNode,d(gn,{cellElRefs:this.cellElRefs,dateProfile:e.dateProfile,tDateProfile:e.tDateProfile,nowDate:e.nowDate,todayRange:e.todayRange})))}componentDidMount(){this.updateSizing(),this.scrollResponder=this.context.createScrollResponder(this.handleScrollRequest)}componentDidUpdate(e){this.updateSizing(),this.scrollResponder.update(e.dateProfile!==this.props.dateProfile)}componentWillUnmount(){this.scrollResponder.detach(),this.props.onCoords&&this.props.onCoords(null)}updateSizing(){let{props:e,context:o}=this;e.clientWidth!==null&&this.scrollResponder&&this.rootElRef.current.offsetWidth&&(this.coords=new hn(this.rootElRef.current,l5(this.cellElRefs.currentMap,e.tDateProfile.slotDates),e.dateProfile,e.tDateProfile,o.dateEnv,o.isRtl),e.onCoords&&e.onCoords(this.coords),this.scrollResponder.update(!1))}positionToHit(e){let{outerCoordCache:o}=this.coords,{dateEnv:M,isRtl:b}=this.context,{tDateProfile:p}=this.props,n=o.leftToIndex(e);if(n!=null){let r=o.getWidth(n),i=b?(o.rights[n]-e)/r:(e-o.lefts[n])/r,a=Math.floor(i*p.snapsPerSlot),s=M.add(p.slotDates[n],_t(p.snapDuration,a)),u=M.add(s,p.snapDuration);return{dateSpan:{range:{start:s,end:u},allDay:!this.props.tDateProfile.isTimeScale},dayEl:this.cellElRefs.currentMap[n],left:o.lefts[n],right:o.rights[n]}}return null}};function l5(t,e){return e.map(o=>{let M=o.toISOString();return t[M]})}function ga(t,e,o){let M=[];if(o)for(let b of t){let p=o.rangeToCoords(b),n=Math.round(p.start),r=Math.round(p.end);r-n({seg:t[N.index],hcoords:N.span,top:null})),u=Jt(a),A=[],q=[],W=N=>t[N.index];for(let N=0;N{let u=r[s],A=Nn(u,n);return d("div",{key:M2(a.eventRange),className:"fc-timeline-bg-harness",style:A},M==="bg-event"?d(re,Object.assign({seg:a},_0(a,b,p))):b2(M))});return d(H,null,i)}},Ao=class extends pe{sliceRange(e,o,M,b,p){let n=p5(e,b,p),r=[];if(Rn(n.start,b,p)d(H,null,M.map(u=>{let A=u.eventRange.instance.instanceId;return d("div",{key:A,style:{visibility:e.isForcedInvisible[A]?"hidden":""}},d(Rb,Object.assign({isTimeScale:e.isTimeScale,seg:u,isDragging:!1,isResizing:!1,isDateSelecting:!1,isSelected:A===e.eventSelection},_0(u,e.todayRange,e.nowDate))))}))},u=>d(u,{elTag:"div",elClasses:["fc-timeline-more-link-inner","fc-sticky"]}))}},Z2=class extends X{constructor(){super(...arguments),this.slicer=new Ao,this.sortEventSegs=E(se),this.harnessElRefs=new W0,this.moreElRefs=new W0,this.innerElRef=V(),this.state={eventInstanceHeights:{},moreLinkHeights:{}},this.handleResize=e=>{e&&this.updateSize()}}render(){let{props:e,state:o,context:M}=this,{options:b}=M,{dateProfile:p,tDateProfile:n}=e,r=this.slicer.sliceProps(e,p,n.isTimeScale?null:e.nextDayThreshold,M,p,M.dateProfileGenerator,n,M.dateEnv),i=(r.eventDrag?r.eventDrag.segs:null)||(r.eventResize?r.eventResize.segs:null)||[],a=this.sortEventSegs(r.fgEventSegs,b.eventOrder),s=ga(a,b.eventMinWidth,e.timelineCoords),[u,A]=A5(a,s,o.eventInstanceHeights,o.moreLinkHeights,b.eventOrderStrict,b.eventMaxStack),q=(r.eventDrag?r.eventDrag.affectedInstances:null)||(r.eventResize?r.eventResize.affectedInstances:null)||{};return d(H,null,d(lo,{businessHourSegs:r.businessHourSegs,bgEventSegs:r.bgEventSegs,timelineCoords:e.timelineCoords,eventResizeSegs:r.eventResize?r.eventResize.segs:[],dateSelectionSegs:r.dateSelectionSegs,nowDate:e.nowDate,todayRange:e.todayRange}),d("div",{className:"fc-timeline-events fc-scrollgrid-sync-inner",ref:this.innerElRef,style:{height:A}},this.renderFgSegs(u,q,!1,!1,!1),this.renderFgSegs(u5(i,e.timelineCoords,u),{},!!r.eventDrag,!!r.eventResize,!1)))}componentDidMount(){this.updateSize(),this.context.addResizeHandler(this.handleResize)}componentDidUpdate(e,o){(e.eventStore!==this.props.eventStore||e.timelineCoords!==this.props.timelineCoords||o.moreLinkHeights!==this.state.moreLinkHeights)&&this.updateSize()}componentWillUnmount(){this.context.removeResizeHandler(this.handleResize)}updateSize(){let{props:e}=this,{timelineCoords:o}=e,M=this.innerElRef.current;e.onHeightChange&&e.onHeightChange(M,!1),o&&this.setState({eventInstanceHeights:a0(this.harnessElRefs.currentMap,b=>Math.round(b.getBoundingClientRect().height)),moreLinkHeights:a0(this.moreElRefs.currentMap,b=>Math.round(b.getBoundingClientRect().height))},()=>{e.onHeightChange&&e.onHeightChange(M,!0)}),e.syncParentMinHeight&&(M.parentElement.style.minHeight=M.style.height)}renderFgSegs(e,o,M,b,p){let{harnessElRefs:n,moreElRefs:r,props:i,context:a}=this,s=M||b||p;return d(H,null,e.map(u=>{let{seg:A,hcoords:q,top:W}=u;if(Array.isArray(A)){let N=t2(p2(A));return d(Ln,{key:"m:"+N,elRef:r.createRef(N),hiddenSegs:A,placement:u,dateProfile:i.dateProfile,nowDate:i.nowDate,todayRange:i.todayRange,isTimeScale:i.tDateProfile.isTimeScale,eventSelection:i.eventSelection,resourceId:i.resourceId,isForcedInvisible:o})}let h=A.eventRange.instance.instanceId,m=s||!!(!o[h]&&q&&W!==null),y=Nn(q,a.isRtl);return d("div",{key:"e:"+h,ref:s?null:n.createRef(h),className:"fc-timeline-event-harness",style:Object.assign({visibility:m?"":"hidden",top:W||0},y)},d(Rb,Object.assign({isTimeScale:i.tDateProfile.isTimeScale,seg:A,isDragging:M,isResizing:b,isDateSelecting:p,isSelected:h===i.eventSelection},_0(A,i.todayRange,i.nowDate))))}))}};Z2.addStateEquality({eventInstanceHeights:R0,moreLinkHeights:R0});function u5(t,e,o){if(!t.length||!e)return[];let M=q5(o);return t.map(b=>({seg:b,hcoords:e.rangeToCoords(b),top:M[b.eventRange.instance.instanceId]}))}function q5(t){let e={};for(let o of t){let{seg:M}=o;Array.isArray(M)||(e[M.eventRange.instance.instanceId]=o.top)}return e}var yn=class extends s0{constructor(){super(...arguments),this.slatsRef=V(),this.state={coords:null},this.handeEl=e=>{e?this.context.registerInteractiveComponent(this,{el:e}):this.context.unregisterInteractiveComponent(this)},this.handleCoords=e=>{this.setState({coords:e}),this.props.onSlatCoords&&this.props.onSlatCoords(e)}}render(){let{props:e,state:o,context:M}=this,{options:b}=M,{dateProfile:p,tDateProfile:n}=e,r=d1(n.slotDuration).unit;return d("div",{className:"fc-timeline-body",ref:this.handeEl,style:{minWidth:e.tableMinWidth,height:e.clientHeight,width:e.clientWidth}},d(L0,{unit:r},(i,a)=>d(H,null,d(Oo,{ref:this.slatsRef,dateProfile:p,tDateProfile:n,nowDate:i,todayRange:a,clientWidth:e.clientWidth,tableColGroupNode:e.tableColGroupNode,tableMinWidth:e.tableMinWidth,onCoords:this.handleCoords,onScrollLeftRequest:e.onScrollLeftRequest}),d(Z2,{dateProfile:p,tDateProfile:e.tDateProfile,nowDate:i,todayRange:a,nextDayThreshold:b.nextDayThreshold,businessHours:e.businessHours,eventStore:e.eventStore,eventUiBases:e.eventUiBases,dateSelection:e.dateSelection,eventSelection:e.eventSelection,eventDrag:e.eventDrag,eventResize:e.eventResize,timelineCoords:o.coords,syncParentMinHeight:!0}),b.nowIndicator&&o.coords&&o.coords.isDateInRange(i)&&d("div",{className:"fc-timeline-now-indicator-container"},d(P1,{elClasses:["fc-timeline-now-indicator-line"],elStyle:gb(o.coords.dateToCoord(i),M.isRtl),isAxis:!1,date:i})))))}queryHit(e,o,M,b){let n=this.slatsRef.current.positionToHit(e);return n?{dateProfile:this.props.dateProfile,dateSpan:n.dateSpan,rect:{left:n.left,right:n.right,top:0,bottom:b},dayEl:n.dayEl,layer:0}:null}},mb=class extends s0{constructor(){super(...arguments),this.buildTimelineDateProfile=E(vn),this.scrollGridRef=V(),this.state={slatCoords:null,slotCushionMaxWidth:null},this.handleSlatCoords=e=>{this.setState({slatCoords:e})},this.handleScrollLeftRequest=e=>{this.scrollGridRef.current.forceScrollLeft(0,e)},this.handleMaxCushionWidth=e=>{this.setState({slotCushionMaxWidth:Math.ceil(e)})}}render(){let{props:e,state:o,context:M}=this,{options:b}=M,p=!e.forPrint&&T1(b),n=!e.forPrint&&le(b),r=this.buildTimelineDateProfile(e.dateProfile,M.dateEnv,b,M.dateProfileGenerator),{slotMinWidth:i}=b,a=Bn(r,i||this.computeFallbackSlotMinWidth(r)),s=[{type:"header",key:"header",isSticky:p,chunks:[{key:"timeline",content:u=>d(so,{dateProfile:e.dateProfile,clientWidth:u.clientWidth,clientHeight:u.clientHeight,tableMinWidth:u.tableMinWidth,tableColGroupNode:u.tableColGroupNode,tDateProfile:r,slatCoords:o.slatCoords,onMaxCushionWidth:i?null:this.handleMaxCushionWidth})}]},{type:"body",key:"body",liquid:!0,chunks:[{key:"timeline",content:u=>d(yn,Object.assign({},e,{clientWidth:u.clientWidth,clientHeight:u.clientHeight,tableMinWidth:u.tableMinWidth,tableColGroupNode:u.tableColGroupNode,tDateProfile:r,onSlatCoords:this.handleSlatCoords,onScrollLeftRequest:this.handleScrollLeftRequest}))}]}];return n&&s.push({type:"footer",key:"footer",isSticky:!0,chunks:[{key:"timeline",content:S1}]}),d(C0,{elClasses:["fc-timeline",b.eventOverlap===!1?"fc-timeline-overlap-disabled":""],viewSpec:M.viewSpec},d(Ae,{ref:this.scrollGridRef,liquid:!e.isHeightAuto&&!e.forPrint,forPrint:e.forPrint,collapsibleWidth:!1,colGroups:[{cols:a}],sections:s}))}computeFallbackSlotMinWidth(e){return Math.max(30,(this.state.slotCushionMaxWidth||0)/e.slotsPerLabel)}};function Bn(t,e){return[{span:t.slotCnt,minWidth:e||1}]}var f5='.fc .fc-timeline-body{min-height:100%;position:relative;z-index:1}.fc .fc-timeline-slots{bottom:0;position:absolute;top:0;z-index:1}.fc .fc-timeline-slots>table{height:100%}.fc .fc-timeline-slot-minor{border-style:dotted}.fc .fc-timeline-slot-frame{align-items:center;display:flex;justify-content:center}.fc .fc-timeline-header-row-chrono .fc-timeline-slot-frame{justify-content:flex-start}.fc .fc-timeline-header-row:last-child .fc-timeline-slot-frame{overflow:hidden}.fc .fc-timeline-slot-cushion{padding:4px 5px;white-space:nowrap}.fc-direction-ltr .fc-timeline-slot{border-right:0!important}.fc-direction-rtl .fc-timeline-slot{border-left:0!important}.fc .fc-timeline-now-indicator-container{bottom:0;left:0;position:absolute;right:0;top:0;width:0;z-index:4}.fc .fc-timeline-now-indicator-arrow,.fc .fc-timeline-now-indicator-line{border-color:var(--fc-now-indicator-color);border-style:solid;position:absolute;top:0}.fc .fc-timeline-now-indicator-arrow{border-left-color:transparent;border-right-color:transparent;border-width:6px 5px 0;margin:0 -6px}.fc .fc-timeline-now-indicator-line{border-width:0 0 0 1px;bottom:0;margin:0 -1px}.fc .fc-timeline-events{position:relative;width:0;z-index:3}.fc .fc-timeline-event-harness,.fc .fc-timeline-more-link{position:absolute;top:0}.fc-timeline-event{z-index:1}.fc-timeline-event.fc-event-mirror{z-index:2}.fc-timeline-event{align-items:center;border-radius:0;display:flex;font-size:var(--fc-small-font-size);margin-bottom:1px;padding:2px 1px;position:relative}.fc-timeline-event .fc-event-main{flex-grow:1;flex-shrink:1;min-width:0}.fc-timeline-event .fc-event-time{font-weight:700}.fc-timeline-event .fc-event-time,.fc-timeline-event .fc-event-title{padding:0 2px;white-space:nowrap}.fc-direction-ltr .fc-timeline-event.fc-event-end,.fc-direction-ltr .fc-timeline-more-link{margin-right:1px}.fc-direction-rtl .fc-timeline-event.fc-event-end,.fc-direction-rtl .fc-timeline-more-link{margin-left:1px}.fc-timeline-overlap-disabled .fc-timeline-event{margin-bottom:0;padding-bottom:5px;padding-top:5px}.fc-timeline-event:not(.fc-event-end):after,.fc-timeline-event:not(.fc-event-start):before{border-color:transparent #000;border-style:solid;border-width:5px;content:"";flex-grow:0;flex-shrink:0;height:0;margin:0 1px;opacity:.5;width:0}.fc-direction-ltr .fc-timeline-event:not(.fc-event-start):before,.fc-direction-rtl .fc-timeline-event:not(.fc-event-end):after{border-left:0}.fc-direction-ltr .fc-timeline-event:not(.fc-event-end):after,.fc-direction-rtl .fc-timeline-event:not(.fc-event-start):before{border-right:0}.fc-timeline-more-link{background:var(--fc-more-link-bg-color);color:var(--fc-more-link-text-color);cursor:pointer;font-size:var(--fc-small-font-size);padding:1px}.fc-timeline-more-link-inner{display:inline-block;left:0;padding:2px;right:0}.fc .fc-timeline-bg{bottom:0;left:0;position:absolute;right:0;top:0;width:0;z-index:2}.fc .fc-timeline-bg .fc-non-business{z-index:1}.fc .fc-timeline-bg .fc-bg-event{z-index:2}.fc .fc-timeline-bg .fc-highlight{z-index:3}.fc .fc-timeline-bg-harness{bottom:0;position:absolute;top:0}';Y0(f5);var Lb=$({name:"@fullcalendar/timeline",premiumReleaseDate:"2023-09-21",deps:[z1],initialView:"timelineDay",views:{timeline:{component:mb,usesMinMaxTime:!0,eventResizableFromStart:!0},timelineDay:{type:"timeline",duration:{days:1}},timelineWeek:{type:"timeline",duration:{weeks:1}},timelineMonth:{type:"timeline",duration:{months:1}},timelineYear:{type:"timeline",duration:{years:1}}}});T0.COLLAPSIBLE_WIDTH_THRESHOLD=1200;var J2=[],Sn=[];function W5(t){J2.length||h5(),J2.push(t),t.calendarApi.on("_unmount",()=>{Jp(J2,t),J2.length||R5()})}function h5(){window.addEventListener("beforeprint",La),window.addEventListener("afterprint",ya)}function R5(){window.removeEventListener("beforeprint",La),window.removeEventListener("afterprint",ya)}function La(){for(let t of J2)t.emitter.trigger("_beforeprint");o2(()=>{Sn.push(m5())})}function ya(){for(let t of J2)t.emitter.trigger("_afterprint");o2(()=>{for(;Sn.length;)Sn.shift()()})}function m5(){let t=f1(document.body,".fc-scrollgrid");return t.forEach(g5),()=>t.forEach(L5)}function g5(t){let e=t.getBoundingClientRect().width;(!t.classList.contains("fc-scrollgrid-collapsible")||e{let{options:M}=o,b=this.refineRenderProps({resource:e.resource,date:e.date,context:o});return d(b0,Object.assign({},e,{elAttrs:Object.assign(Object.assign({},e.elAttrs),{"data-resource-id":e.resource.id,"data-date":e.date?k1(e.date):void 0}),renderProps:b,generatorName:"resourceLabelContent",customGenerator:M.resourceLabelContent,defaultGenerator:B5,classNameGenerator:M.resourceLabelClassNames,didMount:M.resourceLabelDidMount,willUnmount:M.resourceLabelWillUnmount}))})}};function B5(t){return t.resource.title||t.resource.id}function S5(t){return{resource:new k0(t.context,t.resource),date:t.date?t.context.dateEnv.toDate(t.date):null,view:t.context.viewApi}}var uo=class extends X{render(){let{props:e}=this;return d(vb,{elTag:"th",elClasses:["fc-col-header-cell","fc-resource"],elAttrs:{role:"columnheader",colSpan:e.colSpan},resource:e.resource,date:e.date},o=>d("div",{className:"fc-scrollgrid-sync-inner"},d(o,{elTag:"span",elClasses:["fc-col-header-cell-cushion",e.isSticky&&"fc-sticky"]})))}},r2=class extends X{constructor(){super(...arguments),this.buildDateFormat=E(T5)}render(){let{props:e,context:o}=this,M=this.buildDateFormat(o.options.dayHeaderFormat,e.datesRepDistinctDays,e.dates.length);return d(L0,{unit:"day"},(b,p)=>e.dates.length===1?this.renderResourceRow(e.resources,e.dates[0]):o.options.datesAboveResources?this.renderDayAndResourceRows(e.dates,M,p,e.resources):this.renderResourceAndDayRows(e.resources,e.dates,M,p))}renderResourceRow(e,o){let M=e.map(b=>d(uo,{key:b.id,resource:b,colSpan:1,date:o}));return this.buildTr(M,"resources")}renderDayAndResourceRows(e,o,M,b){let p=[],n=[];for(let r of e){p.push(this.renderDateCell(r,o,M,b.length,null,!0));for(let i of b)n.push(d(uo,{key:i.id+":"+r.toISOString(),resource:i,colSpan:1,date:r}))}return d(H,null,this.buildTr(p,"day"),this.buildTr(n,"resources"))}renderResourceAndDayRows(e,o,M,b){let p=[],n=[];for(let r of e){p.push(d(uo,{key:r.id,resource:r,colSpan:o.length,isSticky:!0}));for(let i of o)n.push(this.renderDateCell(i,M,b,1,r))}return d(H,null,this.buildTr(p,"resources"),this.buildTr(n,"day"))}renderDateCell(e,o,M,b,p,n){let{props:r}=this,i=p?`:${p.id}`:"",a=p?{resource:new k0(this.context,p)}:{},s=p?{"data-resource-id":p.id}:{};return r.datesRepDistinctDays?d(E2,{key:e.toISOString()+i,date:e,dateProfile:r.dateProfile,todayRange:M,colCnt:r.dates.length*r.resources.length,dayHeaderFormat:o,colSpan:b,isSticky:n,extraRenderProps:a,extraDataAttrs:s}):d(w2,{key:e.getUTCDay()+i,dow:e.getUTCDay(),dayHeaderFormat:o,colSpan:b,isSticky:n,extraRenderProps:a,extraDataAttrs:s})}buildTr(e,o){let{renderIntro:M}=this.props;return e.length||(e=[d("td",{key:0},"\xA0")]),d("tr",{key:o,role:"row"},M&&M(o),e)}};function T5(t,e,o){return t||UM(e,o)}var Tn=class{constructor(e){let o={},M=[];for(let b=0;bo.resources[b]);return M[""]={},M}getKeysForDateSpan(e){return[e.resourceId||""]}getKeysForEventDef(e){let o=e.resourceIds;return o.length?o:[""]}};function fo(t,e){return Sb(t,[],e,!1,{},!0).map(o=>o.resource)}function Sb(t,e,o,M,b,p){let n=E5(t,M?-1:1,e,o),r=[];return yb(n,r,M,[],0,b,p),r}function yb(t,e,o,M,b,p,n){for(let r=0;r0);M+=1);e.splice(M,0,t)}function Tb(t){let e=Object.assign(Object.assign(Object.assign({},t.extendedProps),t.ui),t);return delete e.ui,delete e.extendedProps,e}function wn(t,e){return t.spec===e.spec&&t.value===e.value}var O2=class extends Se{getKeyInfo(e){return Object.assign({"":{}},e.resourceStore)}getKeysForDateSpan(e){return[e.resourceId||""]}getKeysForEventDef(e){let o=e.resourceIds;return o.length?o:[""]}};function C5(t,e,o){let M=e.dateSpan.resourceId,b=o.dateSpan.resourceId;M&&b&&M!==b&&(t.resourceMutation={matchResourceId:M,setResourceId:b})}function X5(t,e,o){let M=e.resourceMutation;if(M&&Da(t,o)){let b=t.resourceIds.indexOf(M.matchResourceId);if(b!==-1){let p=t.resourceIds.slice();p.splice(b,1),p.indexOf(M.setResourceId)===-1&&p.push(M.setResourceId),t.resourceIds=p}}}function Da(t,e){let{resourceEditable:o}=t;if(o==null){let M=t.sourceId&&e.getCurrentData().eventSources[t.sourceId];M&&(o=M.extendedProps.resourceEditable),o==null&&(o=e.options.eventResourceEditable,o==null&&(o=e.options.editable))}return o}function x5(t,e){let{resourceMutation:o}=t;if(o){let{calendarApi:M}=e;return{oldResource:M.getResourceById(o.matchResourceId),newResource:M.getResourceById(o.setResourceId)}}return{oldResource:null,newResource:null}}var Dn=class{constructor(){this.filterResources=E(_5)}transform(e,o){return o.viewSpec.optionDefaults.needsResourceData?{resourceStore:this.filterResources(o.resourceStore,o.options.filterResourcesWithEvents,o.eventStore,o.dateProfile.activeRange),resourceEntityExpansions:o.resourceEntityExpansions}:null}};function _5(t,e,o,M){if(e){let b=k5(o.instances,M),p=I5(b,o.defs);return Object.assign(p,P5(p,t)),q1(t,(n,r)=>p[r])}return t}function k5(t,e){return q1(t,o=>_2(o.range,e))}function I5(t,e){let o={};for(let M in t){let b=t[M];for(let p of e[b.defId].resourceIds)o[p]=!0}return o}function P5(t,e){let o={};for(let M in t){let b;for(;(b=e[M])&&(M=b.parentId,M);)o[M]=!0}return o}function H5(t,e,o,M){if(!t){let b=M.getCurrentData();if(b.viewSpecs[b.currentViewType].optionDefaults.needsResourceData&&Da(e,M))return!0}return t}var Cn=class{constructor(){this.buildResourceEventUis=E(U5,R0),this.injectResourceEventUis=E(j5)}transform(e,o){return o.viewSpec.optionDefaults.needsResourceData?null:{eventUiBases:this.injectResourceEventUis(e.eventUiBases,e.eventStore.defs,this.buildResourceEventUis(o.resourceStore))}}};function U5(t){return a0(t,e=>e.ui)}function j5(t,e,o){return a0(t,(M,b)=>b?F5(M,e[b],o):M)}function F5(t,e,o){let M=[];for(let b of e.resourceIds)o[b]&&M.unshift(o[b]);return M.unshift(t),Ut(M)}var Xn=[];function xn(t){Xn.push(t)}function Ca(t){return Xn[t]}function G5(){return Xn}var Y5={id:String,resources:g,url:String,method:String,startParam:String,endParam:String,timeZoneParam:String,extraParams:g};function V5(t){let e;if(typeof t=="string"?e={url:t}:typeof t=="function"||Array.isArray(t)?e={resources:t}:typeof t=="object"&&t&&(e=t),e){let{refined:o,extra:M}=Xe(e,Y5);Q5(M);let b=K5(o);if(b)return{_raw:t,sourceId:b1(),sourceDefId:b.sourceDefId,meta:b.meta,publicId:o.id||"",isFetching:!1,latestFetchId:"",fetchRange:null}}return null}function K5(t){let e=G5();for(let o=e.length-1;o>=0;o-=1){let b=e[o].parseMeta(t);if(b)return{meta:b,sourceDefId:o}}return null}function Q5(t){for(let e in t)console.warn(`Unknown resource prop '${e}'`)}function Z5(t,e,o){let{options:M,dateProfile:b}=o;if(!t||!e)return wa(M.initialResources||M.resources,b.activeRange,M.refetchResourcesOnNavigate,o);switch(e.type){case"RESET_RESOURCE_SOURCE":return wa(e.resourceSourceInput,b.activeRange,M.refetchResourcesOnNavigate,o);case"PREV":case"NEXT":case"CHANGE_DATE":case"CHANGE_VIEW_TYPE":return J5(t,b.activeRange,M.refetchResourcesOnNavigate,o);case"RECEIVE_RESOURCES":case"RECEIVE_RESOURCE_ERROR":return eh(t,e.fetchId,e.fetchRange);case"REFETCH_RESOURCES":return _n(t,b.activeRange,o);default:return t}}function wa(t,e,o,M){if(t){let b=V5(t);return b=_n(b,o?e:null,M),b}return null}function J5(t,e,o,M){return o&&!$5(t)&&(!t.fetchRange||!wM(t.fetchRange,e))?_n(t,e,M):t}function $5(t){return!!Ca(t.sourceDefId).ignoreRange}function _n(t,e,o){let M=Ca(t.sourceDefId),b=b1();return M.fetch({resourceSource:t,range:e,context:o},p=>{o.dispatch({type:"RECEIVE_RESOURCES",fetchId:b,fetchRange:e,rawResources:p.rawResources})},p=>{o.dispatch({type:"RECEIVE_RESOURCE_ERROR",fetchId:b,fetchRange:e,error:p})}),Object.assign(Object.assign({},t),{isFetching:!0,latestFetchId:b})}function eh(t,e,o){return e===t.latestFetchId?Object.assign(Object.assign({},t),{isFetching:!1,fetchRange:o}):t}function th(t,e,o,M){if(!t||!e)return{};switch(e.type){case"RECEIVE_RESOURCES":return oh(t,e.rawResources,e.fetchId,o,M);case"ADD_RESOURCE":return Mh(t,e.resourceHash);case"REMOVE_RESOURCE":return bh(t,e.resourceId);case"SET_RESOURCE_PROP":return ph(t,e.resourceId,e.propName,e.propValue);case"SET_RESOURCE_EXTENDED_PROP":return zh(t,e.resourceId,e.propName,e.propValue);default:return t}}function oh(t,e,o,M,b){if(M.latestFetchId===o){let p={};for(let n of e)Nb(n,"",p,b);return p}return t}function Mh(t,e){return Object.assign(Object.assign({},t),e)}function bh(t,e){let o=Object.assign({},t);delete o[e];for(let M in o)o[M].parentId===e&&(o[M]=Object.assign(Object.assign({},o[M]),{parentId:""}));return o}function ph(t,e,o,M){let b=t[e];return b?Object.assign(Object.assign({},t),{[e]:Object.assign(Object.assign({},b),{[o]:M})}):t}function zh(t,e,o,M){let b=t[e];return b?Object.assign(Object.assign({},t),{[e]:Object.assign(Object.assign({},b),{extendedProps:Object.assign(Object.assign({},b.extendedProps),{[o]:M})})}):t}function nh(t,e){if(!t||!e)return{};switch(e.type){case"SET_RESOURCE_ENTITY_EXPANDED":return Object.assign(Object.assign({},t),{[e.id]:e.isExpanded});default:return t}}function rh(t,e,o){let M=Z5(t&&t.resourceSource,e,o),b=th(t&&t.resourceStore,e,M,o),p=nh(t&&t.resourceEntityExpansions,e);return{resourceSource:M,resourceStore:b,resourceEntityExpansions:p}}var ch={resourceId:String,resourceIds:g,resourceEditable:Boolean};function ih(t){return{resourceIds:ah(t.resourceIds).concat(t.resourceId?[t.resourceId]:[]),resourceEditable:t.resourceEditable}}function ah(t){return(t||[]).map(e=>String(e))}function sh(t,e){let o=t.dateSpan.resourceId,M=e.dateSpan.resourceId;return o&&M?{resourceId:o}:null}N1.prototype.addResource=function(t,e=!0){let o=this.getCurrentData(),M,b;t instanceof k0?(b=t._resource,M={[b.id]:b}):(M={},b=Nb(t,"",M,o)),this.dispatch({type:"ADD_RESOURCE",resourceHash:M}),e&&this.trigger("_scrollRequest",{resourceId:b.id});let p=new k0(o,b);return o.emitter.trigger("resourceAdd",{resource:p,revert:()=>{this.dispatch({type:"REMOVE_RESOURCE",resourceId:b.id})}}),p};N1.prototype.getResourceById=function(t){t=String(t);let e=this.getCurrentData();if(e.resourceStore){let o=e.resourceStore[t];if(o)return new k0(e,o)}return null};N1.prototype.getResources=function(){let t=this.getCurrentData(),{resourceStore:e}=t,o=[];if(e)for(let M in e)o.push(new k0(t,e[M]));return o};N1.prototype.getTopLevelResources=function(){let t=this.getCurrentData(),{resourceStore:e}=t,o=[];if(e)for(let M in e)e[M].parentId||o.push(new k0(t,e[M]));return o};N1.prototype.refetchResources=function(){this.dispatch({type:"REFETCH_RESOURCES"})};function Oh(t,e){return t.resourceId?{resource:e.calendarApi.getResourceById(t.resourceId)}:{}}function lh(t,e){return t.resourceId?{resource:e.calendarApi.getResourceById(t.resourceId)}:{}}function Ah(t,e){let M=new O2().splitProps(Object.assign(Object.assign({},t),{resourceStore:e.getCurrentData().resourceStore}));for(let b in M){let p=M[b];if(b&&M[""]&&(p=Object.assign(Object.assign({},p),{eventStore:H2(M[""].eventStore,p.eventStore),eventUiBases:Object.assign(Object.assign({},M[""].eventUiBases),p.eventUiBases)})),!FM(p,e,{resourceId:b},dh.bind(null,b)))return!1}return!0}function dh(t,e){return Object.assign(Object.assign({},e),{constraints:uh(t,e.constraints)})}function uh(t,e){return e.map(o=>{let M=o.defs;if(M)for(let b in M){let p=M[b].resourceIds;if(p.length&&p.indexOf(t)===-1)return!1}return o})}function qh(t){return t.resourceId?{resourceId:t.resourceId}:{}}var fh={resources:Wh};function Wh(t,e){e.getCurrentData().resourceSource._raw!==t&&e.dispatch({type:"RESET_RESOURCE_SOURCE",resourceSourceInput:t})}var hh={initialResources:g,resources:g,eventResourceEditable:Boolean,refetchResourcesOnNavigate:Boolean,resourceOrder:D2,filterResourcesWithEvents:Boolean,resourceGroupField:String,resourceAreaWidth:g,resourceAreaColumns:g,resourcesInitiallyExpanded:Boolean,datesAboveResources:Boolean,needsResourceData:Boolean,resourceAreaHeaderClassNames:g,resourceAreaHeaderContent:g,resourceAreaHeaderDidMount:g,resourceAreaHeaderWillUnmount:g,resourceGroupLabelClassNames:g,resourceGroupLabelContent:g,resourceGroupLabelDidMount:g,resourceGroupLabelWillUnmount:g,resourceLabelClassNames:g,resourceLabelContent:g,resourceLabelDidMount:g,resourceLabelWillUnmount:g,resourceLaneClassNames:g,resourceLaneContent:g,resourceLaneDidMount:g,resourceLaneWillUnmount:g,resourceGroupLaneClassNames:g,resourceGroupLaneContent:g,resourceGroupLaneDidMount:g,resourceGroupLaneWillUnmount:g},Rh={resourcesSet:g,resourceAdd:g,resourceChange:g,resourceRemove:g};c0.prototype.getResources=function(){let{calendarApi:t}=this._context;return this._def.resourceIds.map(e=>t.getResourceById(e))};c0.prototype.setResources=function(t){let e=[];for(let o of t){let M=null;typeof o=="string"?M=o:typeof o=="number"?M=String(o):o instanceof k0?M=o.id:console.warn("unknown resource type: "+o),M&&e.push(M)}this.mutate({standardProps:{resourceIds:e}})};xn({ignoreRange:!0,parseMeta(t){return Array.isArray(t.resources)?t.resources:null},fetch(t,e){e({rawResources:t.resourceSource.meta})}});xn({parseMeta(t){return typeof t.resources=="function"?t.resources:null},fetch(t,e,o){let M=t.context.dateEnv,b=t.resourceSource.meta,p=t.range?{start:M.toDate(t.range.start),end:M.toDate(t.range.end),startStr:M.formatIso(t.range.start),endStr:M.formatIso(t.range.end),timeZone:M.timeZone}:{};Gt(b.bind(null,p),n=>e({rawResources:n}),o)}});xn({parseMeta(t){return t.url?{url:t.url,method:(t.method||"GET").toUpperCase(),extraParams:t.extraParams}:null},fetch(t,e,o){let M=t.resourceSource.meta,b=mh(M,t.range,t.context);Yt(M.method,M.url,b).then(([p,n])=>{e({rawResources:p,response:n})},o)}});function mh(t,e,o){let{dateEnv:M,options:b}=o,p,n,r,i,a={};return e&&(p=t.startParam,p==null&&(p=b.startParam),n=t.endParam,n==null&&(n=b.endParam),r=t.timeZoneParam,r==null&&(r=b.timeZoneParam),a[p]=M.formatIso(e.start),a[n]=M.formatIso(e.end),M.timeZone!=="local"&&(a[r]=M.timeZone)),typeof t.extraParams=="function"?i=t.extraParams():i=t.extraParams||{},Object.assign(a,i),a}var Ie=$({name:"@fullcalendar/resource",premiumReleaseDate:"2023-09-21",deps:[z1],reducers:[rh],isLoadingFuncs:[t=>t.resourceSource&&t.resourceSource.isFetching],eventRefiners:ch,eventDefMemberAdders:[ih],isDraggableTransformers:[H5],eventDragMutationMassagers:[C5],eventDefMutationAppliers:[X5],dateSelectionTransformers:[sh],datePointTransforms:[Oh],dateSpanTransforms:[lh],viewPropsTransformers:[Dn,Cn],isPropsValid:Ah,externalDefTransforms:[qh],eventDropTransformers:[x5],optionChangeHandlers:fh,optionRefiners:hh,listenerRefiners:Rh,propSetHandlers:{resourceStore:Sa}});var kn=class extends a2{transformSeg(e,o,M){return o.computeColRanges(e.firstCol,e.lastCol,M).map(p=>Object.assign(Object.assign(Object.assign({},e),p),{isStart:e.isStart&&p.isStart,isEnd:e.isEnd&&p.isEnd}))}},Wo=class extends s0{constructor(){super(...arguments),this.splitter=new s2,this.slicers={},this.joiner=new kn,this.tableRef=V(),this.isHitComboAllowed=(e,o)=>this.props.resourceDayTableModel.dayTableModel.colCnt===1||e.dateSpan.resourceId===o.dateSpan.resourceId}render(){let{props:e,context:o}=this,{resourceDayTableModel:M,nextDayThreshold:b,dateProfile:p}=e,n=this.splitter.splitProps(e);this.slicers=a0(n,(i,a)=>this.slicers[a]||new n2);let r=a0(this.slicers,(i,a)=>i.sliceProps(n[a],p,b,o,M.dayTableModel));return d(bo,Object.assign({forPrint:e.forPrint,ref:this.tableRef},this.joiner.joinProps(r,M),{cells:M.cells,dateProfile:p,colGroupNode:e.colGroupNode,tableMinWidth:e.tableMinWidth,renderRowIntro:e.renderRowIntro,dayMaxEvents:e.dayMaxEvents,dayMaxEventRows:e.dayMaxEventRows,showWeekNumbers:e.showWeekNumbers,expandRows:e.expandRows,headerAlignElRef:e.headerAlignElRef,clientWidth:e.clientWidth,clientHeight:e.clientHeight,isHitComboAllowed:this.isHitComboAllowed}))}},Eb=class extends zo{constructor(){super(...arguments),this.flattenResources=E(fo),this.buildResourceDayTableModel=E(gh),this.headerRef=V(),this.tableRef=V()}render(){let{props:e,context:o}=this,{options:M}=o,b=M.resourceOrder||l2,p=this.flattenResources(e.resourceStore,b),n=this.buildResourceDayTableModel(e.dateProfile,o.dateProfileGenerator,p,M.datesAboveResources,o),r=M.dayHeaders&&d(r2,{ref:this.headerRef,resources:p,dateProfile:e.dateProfile,dates:n.dayTableModel.headerDates,datesRepDistinctDays:!0}),i=a=>d(Wo,{ref:this.tableRef,dateProfile:e.dateProfile,resourceDayTableModel:n,businessHours:e.businessHours,eventStore:e.eventStore,eventUiBases:e.eventUiBases,dateSelection:e.dateSelection,eventSelection:e.eventSelection,eventDrag:e.eventDrag,eventResize:e.eventResize,nextDayThreshold:M.nextDayThreshold,tableMinWidth:a.tableMinWidth,colGroupNode:a.tableColGroupNode,dayMaxEvents:M.dayMaxEvents,dayMaxEventRows:M.dayMaxEventRows,showWeekNumbers:M.weekNumbers,expandRows:!e.isHeightAuto,headerAlignElRef:this.headerElRef,clientWidth:a.clientWidth,clientHeight:a.clientHeight,forPrint:e.forPrint});return M.dayMinWidth?this.renderHScrollLayout(r,i,n.colCnt,M.dayMinWidth):this.renderSimpleLayout(r,i)}};function gh(t,e,o,M,b){let p=no(t,e);return M?new i2(p,o,b):new c2(p,o,b)}var Xa=$({name:"@fullcalendar/resource-daygrid",premiumReleaseDate:"2023-09-21",deps:[z1,Ie,lb],initialView:"resourceDayGridDay",views:{resourceDayGrid:{type:"dayGrid",component:Eb,needsResourceData:!0},resourceDayGridDay:{type:"resourceDayGrid",duration:{days:1}},resourceDayGridWeek:{type:"resourceDayGrid",duration:{weeks:1}},resourceDayGridMonth:{type:"resourceDayGrid",duration:{months:1},fixedWeekCount:!0}}});function _a({depth:t,hasChildren:e,isExpanded:o,onExpanderClick:M}){let b=[];for(let n=0;n{let{props:o}=this;o.hasChildren&&this.context.dispatch({type:"SET_RESOURCE_ENTITY_EXPANDED",id:o.resource.id,isExpanded:!o.isExpanded})}}render(){let{props:e,context:o}=this,{colSpec:M}=e,b=this.refineRenderProps({resource:e.resource,fieldValue:e.fieldValue,context:o});return d(b0,{elTag:"td",elClasses:["fc-datagrid-cell","fc-resource"],elAttrs:{role:"gridcell","data-resource-id":e.resource.id},renderProps:b,generatorName:M.isMain?"resourceLabelContent":void 0,customGenerator:M.cellContent,defaultGenerator:Lh,classNameGenerator:M.cellClassNames,didMount:M.cellDidMount,willUnmount:M.cellWillUnmount},p=>d("div",{className:"fc-datagrid-cell-frame",style:{height:e.innerHeight}},d("div",{className:"fc-datagrid-cell-cushion fc-scrollgrid-sync-inner"},M.isMain&&d(_a,{depth:e.depth,hasChildren:e.hasChildren,isExpanded:e.isExpanded,onExpanderClick:this.onExpanderClick}),d(p,{elTag:"span",elClasses:["fc-datagrid-cell-main"]}))))}};function Lh(t){return t.fieldValue||d(H,null,"\xA0")}function yh(t){return{resource:new k0(t.context,t.resource),fieldValue:t.fieldValue,view:t.context.viewApi}}var Pn=class extends X{render(){let{props:e,context:o}=this,{colSpec:M}=e,b={groupValue:e.fieldValue,view:o.viewApi};return d(b0,{elTag:"td",elClasses:["fc-datagrid-cell","fc-resource-group"],elAttrs:{role:"gridcell",rowSpan:e.rowSpan},renderProps:b,generatorName:"resourceGroupLabelContent",customGenerator:M.cellContent,defaultGenerator:vh,classNameGenerator:M.cellClassNames,didMount:M.cellDidMount,willUnmount:M.cellWillUnmount},p=>d("div",{className:"fc-datagrid-cell-frame fc-datagrid-cell-frame-liquid"},d(p,{elTag:"div",elClasses:["fc-datagrid-cell-cushion","fc-sticky"]})))}};function vh(t){return t.groupValue||d(H,null,"\xA0")}var wb=class extends X{render(){let{props:e}=this,{resource:o,rowSpans:M,depth:b}=e,p=Tb(o);return d("tr",{role:"row"},e.colSpecs.map((n,r)=>{let i=M[r];if(i===0)return null;i==null&&(i=1);let a=n.field?p[n.field]:o.title||Bb(o.id);return i>1?d(Pn,{key:r,colSpec:n,fieldValue:a,rowSpan:i}):d(In,{key:r,colSpec:n,resource:o,fieldValue:a,depth:b,hasChildren:e.hasChildren,isExpanded:e.isExpanded,innerHeight:e.innerHeight})}))}};wb.addPropsEquality({rowSpans:x0});var Db=class extends X{constructor(){super(...arguments),this.innerInnerRef=V(),this.onExpanderClick=()=>{let{props:e}=this;this.context.dispatch({type:"SET_RESOURCE_ENTITY_EXPANDED",id:e.id,isExpanded:!e.isExpanded})}}render(){let{props:e,context:o}=this,M={groupValue:e.group.value,view:o.viewApi},b=e.group.spec;return d("tr",{role:"row"},d(b0,{elTag:"th",elClasses:["fc-datagrid-cell","fc-resource-group",o.theme.getClass("tableCellShaded")],elAttrs:{role:"columnheader",scope:"colgroup",colSpan:e.spreadsheetColCnt},renderProps:M,generatorName:"resourceGroupLabelContent",customGenerator:b.labelContent,defaultGenerator:Nh,classNameGenerator:b.labelClassNames,didMount:b.labelDidMount,willUnmount:b.labelWillUnmount},p=>d("div",{className:"fc-datagrid-cell-frame",style:{height:e.innerHeight}},d("div",{className:"fc-datagrid-cell-cushion fc-scrollgrid-sync-inner",ref:this.innerInnerRef},d(_a,{depth:0,hasChildren:!0,isExpanded:e.isExpanded,onExpanderClick:this.onExpanderClick}),d(p,{elTag:"span",elClasses:["fc-datagrid-cell-main"]})))))}};Db.addPropsEquality({group:wn});function Nh(t){return t.groupValue||d(H,null,"\xA0")}var Bh=20,Hn=class extends X{constructor(){super(...arguments),this.resizerElRefs=new W0(this._handleColResizerEl.bind(this)),this.colDraggings={}}render(){let{colSpecs:e,superHeaderRendering:o,rowInnerHeights:M}=this.props,b={view:this.context.viewApi},p=[];if(M=M.slice(),o){let r=M.shift();p.push(d("tr",{key:"row-super",role:"row"},d(b0,{elTag:"th",elClasses:["fc-datagrid-cell","fc-datagrid-cell-super"],elAttrs:{role:"columnheader",scope:"colgroup",colSpan:e.length},renderProps:b,generatorName:"resourceAreaHeaderContent",customGenerator:o.headerContent,defaultGenerator:o.headerDefault,classNameGenerator:o.headerClassNames,didMount:o.headerDidMount,willUnmount:o.headerWillUnmount},i=>d("div",{className:"fc-datagrid-cell-frame",style:{height:r}},d(i,{elTag:"div",elClasses:["fc-datagrid-cell-cushion","fc-scrollgrid-sync-inner"]})))))}let n=M.shift();return p.push(d("tr",{key:"row",role:"row"},e.map((r,i)=>{let a=i===e.length-1;return d(b0,{key:i,elTag:"th",elClasses:["fc-datagrid-cell"],elAttrs:{role:"columnheader"},renderProps:b,generatorName:"resourceAreaHeaderContent",customGenerator:r.headerContent,defaultGenerator:r.headerDefault,classNameGenerator:r.headerClassNames,didMount:r.headerDidMount,willUnmount:r.headerWillUnmount},s=>d("div",{className:"fc-datagrid-cell-frame",style:{height:n}},d("div",{className:"fc-datagrid-cell-cushion fc-scrollgrid-sync-inner"},r.isMain&&d("span",{className:"fc-datagrid-expander fc-datagrid-expander-placeholder"},d("span",{className:"fc-icon"})),d(s,{elTag:"span",elClasses:["fc-datagrid-cell-main"]})),!a&&d("div",{className:"fc-datagrid-cell-resizer",ref:this.resizerElRefs.createRef(i)})))}))),d(H,null,p)}_handleColResizerEl(e,o){let{colDraggings:M}=this;if(e){let b=this.initColResizing(e,parseInt(o,10));b&&(M[o]=b)}else{let b=M[o];b&&(b.destroy(),delete M[o])}}initColResizing(e,o){let{pluginHooks:M,isRtl:b}=this.context,{onColWidthChange:p}=this.props,n=M.elementDraggingImpl;if(n){let r=new n(e),i,a;return r.emitter.on("dragstart",()=>{a=f1(m0(e,"tr"),"th").map(u=>u.getBoundingClientRect().width),i=a[o]}),r.emitter.on("dragmove",s=>{a[o]=Math.max(i+s.deltaX*(b?-1:1),Bh),p&&p(a.slice())}),r.setAutoScrollEnabled(!1),r}return null}},Un=class extends X{constructor(){super(...arguments),this.refineRenderProps=i1(En),this.handleHeightChange=(e,o)=>{this.props.onHeightChange&&this.props.onHeightChange(m0(e,"tr"),o)}}render(){let{props:e,context:o}=this,{options:M}=o,b=this.refineRenderProps({resource:e.resource,context:o});return d("tr",{ref:e.elRef},d(b0,{elTag:"td",elClasses:["fc-timeline-lane","fc-resource"],elAttrs:{"data-resource-id":e.resource.id},renderProps:b,generatorName:"resourceLaneContent",customGenerator:M.resourceLaneContent,classNameGenerator:M.resourceLaneClassNames,didMount:M.resourceLaneDidMount,willUnmount:M.resourceLaneWillUnmount},p=>d("div",{className:"fc-timeline-lane-frame",style:{height:e.innerHeight}},d(p,{elTag:"div",elClasses:["fc-timeline-lane-misc"]}),d(Z2,{dateProfile:e.dateProfile,tDateProfile:e.tDateProfile,nowDate:e.nowDate,todayRange:e.todayRange,nextDayThreshold:e.nextDayThreshold,businessHours:e.businessHours,eventStore:e.eventStore,eventUiBases:e.eventUiBases,dateSelection:e.dateSelection,eventSelection:e.eventSelection,eventDrag:e.eventDrag,eventResize:e.eventResize,timelineCoords:e.timelineCoords,onHeightChange:this.handleHeightChange,resourceId:e.resource.id}))))}},jn=class extends X{render(){let{props:e,context:o}=this,{renderHooks:M}=e,b={groupValue:e.groupValue,view:o.viewApi};return d("tr",{ref:e.elRef},d(b0,{elTag:"td",elRef:e.elRef,elClasses:["fc-timeline-lane","fc-resource-group",o.theme.getClass("tableCellShaded")],renderProps:b,generatorName:"resourceGroupLaneContent",customGenerator:M.laneContent,classNameGenerator:M.laneClassNames,didMount:M.laneDidMount,willUnmount:M.laneWillUnmount},p=>d(p,{elTag:"div",elStyle:{height:e.innerHeight}})))}},Fn=class extends X{render(){let{props:e,context:o}=this,{rowElRefs:M,innerHeights:b}=e;return d("tbody",null,e.rowNodes.map((p,n)=>{if(p.group)return d(jn,{key:p.id,elRef:M.createRef(p.id),groupValue:p.group.value,renderHooks:p.group.spec,innerHeight:b[n]||""});if(p.resource){let r=p.resource;return d(Un,Object.assign({key:p.id,elRef:M.createRef(p.id)},e.splitProps[r.id],{resource:r,dateProfile:e.dateProfile,tDateProfile:e.tDateProfile,nowDate:e.nowDate,todayRange:e.todayRange,nextDayThreshold:o.options.nextDayThreshold,businessHours:r.businessHours||e.fallbackBusinessHours,innerHeight:b[n]||"",timelineCoords:e.slatCoords,onHeightChange:e.onRowHeightChange}))}return null}))}},Gn=class extends X{constructor(){super(...arguments),this.rootElRef=V(),this.rowElRefs=new W0}render(){let{props:e,context:o}=this;return d("table",{ref:this.rootElRef,"aria-hidden":!0,className:"fc-scrollgrid-sync-table "+o.theme.getClass("table"),style:{minWidth:e.tableMinWidth,width:e.clientWidth,height:e.minHeight}},d(Fn,{rowElRefs:this.rowElRefs,rowNodes:e.rowNodes,dateProfile:e.dateProfile,tDateProfile:e.tDateProfile,nowDate:e.nowDate,todayRange:e.todayRange,splitProps:e.splitProps,fallbackBusinessHours:e.fallbackBusinessHours,slatCoords:e.slatCoords,innerHeights:e.innerHeights,onRowHeightChange:e.onRowHeightChange}))}componentDidMount(){this.updateCoords()}componentDidUpdate(){this.updateCoords()}componentWillUnmount(){this.props.onRowCoords&&this.props.onRowCoords(null)}updateCoords(){let{props:e}=this;e.onRowCoords&&e.clientWidth!==null&&this.props.onRowCoords(new G0(this.rootElRef.current,Sh(this.rowElRefs.currentMap,e.rowNodes),!1,!0))}};function Sh(t,e){return e.map(o=>t[o.id])}var Yn=class extends s0{constructor(){super(...arguments),this.computeHasResourceBusinessHours=E(Th),this.resourceSplitter=new O2,this.bgSlicer=new Ao,this.slatsRef=V(),this.state={slatCoords:null},this.handleEl=e=>{e?this.context.registerInteractiveComponent(this,{el:e}):this.context.unregisterInteractiveComponent(this)},this.handleSlatCoords=e=>{this.setState({slatCoords:e}),this.props.onSlatCoords&&this.props.onSlatCoords(e)},this.handleRowCoords=e=>{this.rowCoords=e,this.props.onRowCoords&&this.props.onRowCoords(e)}}render(){let{props:e,state:o,context:M}=this,{dateProfile:b,tDateProfile:p}=e,n=d1(p.slotDuration).unit,r=this.computeHasResourceBusinessHours(e.rowNodes),i=this.resourceSplitter.splitProps(e),a=i[""],s=this.bgSlicer.sliceProps(a,b,p.isTimeScale?null:e.nextDayThreshold,M,b,M.dateProfileGenerator,p,M.dateEnv),u=o.slatCoords&&o.slatCoords.dateProfile===e.dateProfile?o.slatCoords:null;return d("div",{ref:this.handleEl,className:["fc-timeline-body",e.expandRows?"fc-timeline-body-expandrows":""].join(" "),style:{minWidth:e.tableMinWidth}},d(L0,{unit:n},(A,q)=>d(H,null,d(Oo,{ref:this.slatsRef,dateProfile:b,tDateProfile:p,nowDate:A,todayRange:q,clientWidth:e.clientWidth,tableColGroupNode:e.tableColGroupNode,tableMinWidth:e.tableMinWidth,onCoords:this.handleSlatCoords,onScrollLeftRequest:e.onScrollLeftRequest}),d(lo,{businessHourSegs:r?null:s.businessHourSegs,bgEventSegs:s.bgEventSegs,timelineCoords:u,eventResizeSegs:s.eventResize?s.eventResize.segs:[],dateSelectionSegs:s.dateSelectionSegs,nowDate:A,todayRange:q}),d(Gn,{rowNodes:e.rowNodes,dateProfile:b,tDateProfile:e.tDateProfile,nowDate:A,todayRange:q,splitProps:i,fallbackBusinessHours:r?e.businessHours:null,clientWidth:e.clientWidth,minHeight:e.expandRows?e.clientHeight:"",tableMinWidth:e.tableMinWidth,innerHeights:e.rowInnerHeights,slatCoords:u,onRowCoords:this.handleRowCoords,onRowHeightChange:e.onRowHeightChange}),M.options.nowIndicator&&u&&u.isDateInRange(A)&&d("div",{className:"fc-timeline-now-indicator-container"},d(P1,{elClasses:["fc-timeline-now-indicator-line"],elStyle:gb(u.dateToCoord(A),M.isRtl),isAxis:!1,date:A})))))}queryHit(e,o){let M=this.rowCoords,b=M.topToIndex(o);if(b!=null){let p=this.props.rowNodes[b].resource;if(p){let n=this.slatsRef.current.positionToHit(e);if(n)return{dateProfile:this.props.dateProfile,dateSpan:{range:n.dateSpan.range,allDay:n.dateSpan.allDay,resourceId:p.id},rect:{left:n.left,right:n.right,top:M.tops[b],bottom:M.bottoms[b]},dayEl:n.dayEl,layer:0}}}return null}};function Th(t){for(let e of t){let o=e.resource;if(o&&o.businessHours)return!0}return!1}var xa=30,Vn=class extends X{constructor(){super(...arguments),this.scrollGridRef=V(),this.timeBodyScrollerElRef=V(),this.spreadsheetHeaderChunkElRef=V(),this.rootElRef=V(),this.ensureScrollGridResizeId=0,this.state={resourceAreaWidthOverride:null},this.ensureScrollGridResize=()=>{this.ensureScrollGridResizeId&&clearTimeout(this.ensureScrollGridResizeId),this.ensureScrollGridResizeId=setTimeout(()=>{this.scrollGridRef.current.handleSizing(!1)},T0.SCROLLGRID_RESIZE_INTERVAL+1)}}render(){let{props:e,state:o,context:M}=this,{options:b}=M,p=!e.forPrint&&T1(b),n=!e.forPrint&&le(b),r=[{type:"header",key:"header",syncRowHeights:!0,isSticky:p,chunks:[{key:"datagrid",elRef:this.spreadsheetHeaderChunkElRef,tableClassName:"fc-datagrid-header",rowContent:e.spreadsheetHeaderRows},{key:"divider",outerContent:d("td",{role:"presentation",className:"fc-resource-timeline-divider "+M.theme.getClass("tableCellShaded")})},{key:"timeline",content:e.timeHeaderContent}]},{type:"body",key:"body",syncRowHeights:!0,liquid:!0,expandRows:!!b.expandRows,chunks:[{key:"datagrid",tableClassName:"fc-datagrid-body",rowContent:e.spreadsheetBodyRows},{key:"divider",outerContent:d("td",{role:"presentation",className:"fc-resource-timeline-divider "+M.theme.getClass("tableCellShaded")})},{key:"timeline",scrollerElRef:this.timeBodyScrollerElRef,content:e.timeBodyContent}]}];n&&r.push({type:"footer",key:"footer",isSticky:!0,chunks:[{key:"datagrid",content:S1},{key:"divider",outerContent:d("td",{role:"presentation",className:"fc-resource-timeline-divider "+M.theme.getClass("tableCellShaded")})},{key:"timeline",content:S1}]});let i=o.resourceAreaWidthOverride!=null?o.resourceAreaWidthOverride:b.resourceAreaWidth;return d(Ae,{ref:this.scrollGridRef,elRef:this.rootElRef,liquid:!e.isHeightAuto&&!e.forPrint,forPrint:e.forPrint,collapsibleWidth:!1,colGroups:[{cols:e.spreadsheetCols,width:i},{cols:[]},{cols:e.timeCols}],sections:r})}forceTimeScroll(e){this.scrollGridRef.current.forceScrollLeft(2,e)}forceResourceScroll(e){this.scrollGridRef.current.forceScrollTop(1,e)}getResourceScroll(){return this.timeBodyScrollerElRef.current.scrollTop}componentDidMount(){this.initSpreadsheetResizing()}componentWillUnmount(){this.destroySpreadsheetResizing()}initSpreadsheetResizing(){let{isRtl:e,pluginHooks:o}=this.context,M=o.elementDraggingImpl,b=this.spreadsheetHeaderChunkElRef.current;if(M){let p=this.rootElRef.current,n=this.spreadsheetResizerDragging=new M(p,".fc-resource-timeline-divider"),r,i;n.emitter.on("dragstart",()=>{r=b.getBoundingClientRect().width,i=p.getBoundingClientRect().width}),n.emitter.on("dragmove",a=>{let s=r+a.deltaX*(e?-1:1);s=Math.max(s,xa),s=Math.min(s,i-xa),this.setState({resourceAreaWidthOverride:s},this.ensureScrollGridResize)}),n.setAutoScrollEnabled(!1)}}destroySpreadsheetResizing(){this.spreadsheetResizerDragging&&this.spreadsheetResizerDragging.destroy()}},ho=class extends X{constructor(e,o){super(e,o),this.processColOptions=E(Ch),this.buildTimelineDateProfile=E(vn),this.hasNesting=E(Dh),this.buildRowNodes=E(Sb),this.layoutRef=V(),this.rowNodes=[],this.renderedRowNodes=[],this.buildRowIndex=E(Eh),this.handleSlatCoords=M=>{this.setState({slatCoords:M})},this.handleRowCoords=M=>{this.rowCoords=M,this.scrollResponder.update(!1)},this.handleMaxCushionWidth=M=>{this.setState({slotCushionMaxWidth:Math.ceil(M)})},this.handleScrollLeftRequest=M=>{this.layoutRef.current.forceTimeScroll(M)},this.handleScrollRequest=M=>{let{rowCoords:b}=this,p=this.layoutRef.current,n=M.rowId||M.resourceId;if(b){if(n){let i=this.buildRowIndex(this.renderedRowNodes)[n];if(i!=null){let a=M.fromBottom!=null?b.bottoms[i]-M.fromBottom:b.tops[i];p.forceResourceScroll(a)}}return!0}return null},this.handleColWidthChange=M=>{this.setState({spreadsheetColWidths:M})},this.state={resourceAreaWidth:o.options.resourceAreaWidth,spreadsheetColWidths:[]}}render(){let{props:e,state:o,context:M}=this,{options:b,viewSpec:p}=M,{superHeaderRendering:n,groupSpecs:r,orderSpecs:i,isVGrouping:a,colSpecs:s}=this.processColOptions(M.options),u=this.buildTimelineDateProfile(e.dateProfile,M.dateEnv,b,M.dateProfileGenerator),A=this.rowNodes=this.buildRowNodes(e.resourceStore,r,i,a,e.resourceEntityExpansions,b.resourcesInitiallyExpanded),{slotMinWidth:q}=b,W=Bn(u,q||this.computeFallbackSlotMinWidth(u));return d(C0,{elClasses:["fc-resource-timeline",!this.hasNesting(A)&&"fc-resource-timeline-flat","fc-timeline",b.eventOverlap===!1?"fc-timeline-overlap-disabled":"fc-timeline-overlap-enabled"],viewSpec:p},d(Vn,{ref:this.layoutRef,forPrint:e.forPrint,isHeightAuto:e.isHeightAuto,spreadsheetCols:wh(s,o.spreadsheetColWidths,""),spreadsheetHeaderRows:h=>d(Hn,{superHeaderRendering:n,colSpecs:s,onColWidthChange:this.handleColWidthChange,rowInnerHeights:h.rowSyncHeights}),spreadsheetBodyRows:h=>d(H,null,this.renderSpreadsheetRows(A,s,h.rowSyncHeights)),timeCols:W,timeHeaderContent:h=>d(so,{clientWidth:h.clientWidth,clientHeight:h.clientHeight,tableMinWidth:h.tableMinWidth,tableColGroupNode:h.tableColGroupNode,dateProfile:e.dateProfile,tDateProfile:u,slatCoords:o.slatCoords,rowInnerHeights:h.rowSyncHeights,onMaxCushionWidth:q?null:this.handleMaxCushionWidth}),timeBodyContent:h=>d(Yn,{dateProfile:e.dateProfile,clientWidth:h.clientWidth,clientHeight:h.clientHeight,tableMinWidth:h.tableMinWidth,tableColGroupNode:h.tableColGroupNode,expandRows:h.expandRows,tDateProfile:u,rowNodes:A,businessHours:e.businessHours,dateSelection:e.dateSelection,eventStore:e.eventStore,eventUiBases:e.eventUiBases,eventSelection:e.eventSelection,eventDrag:e.eventDrag,eventResize:e.eventResize,resourceStore:e.resourceStore,nextDayThreshold:M.options.nextDayThreshold,rowInnerHeights:h.rowSyncHeights,onSlatCoords:this.handleSlatCoords,onRowCoords:this.handleRowCoords,onScrollLeftRequest:this.handleScrollLeftRequest,onRowHeightChange:h.reportRowHeightChange})}))}renderSpreadsheetRows(e,o,M){return e.map((b,p)=>b.group?d(Db,{key:b.id,id:b.id,spreadsheetColCnt:o.length,isExpanded:b.isExpanded,group:b.group,innerHeight:M[p]||""}):b.resource?d(wb,{key:b.id,colSpecs:o,rowSpans:b.rowSpans,depth:b.depth,isExpanded:b.isExpanded,hasChildren:b.hasChildren,resource:b.resource,innerHeight:M[p]||""}):null)}componentDidMount(){this.renderedRowNodes=this.rowNodes,this.scrollResponder=this.context.createScrollResponder(this.handleScrollRequest)}getSnapshotBeforeUpdate(){return this.props.forPrint?{}:{resourceScroll:this.queryResourceScroll()}}componentDidUpdate(e,o,M){this.renderedRowNodes=this.rowNodes,this.scrollResponder.update(e.dateProfile!==this.props.dateProfile),M.resourceScroll&&this.handleScrollRequest(M.resourceScroll)}componentWillUnmount(){this.scrollResponder.detach()}computeFallbackSlotMinWidth(e){return Math.max(30,(this.state.slotCushionMaxWidth||0)/e.slotsPerLabel)}queryResourceScroll(){let{rowCoords:e,renderedRowNodes:o}=this;if(e){let M=this.layoutRef.current,b=e.bottoms,p=M.getResourceScroll(),n={};for(let r=0;r0){n.rowId=i.id,n.fromBottom=a;break}}return n}return null}};ho.addStateEquality({spreadsheetColWidths:x0});function Eh(t){let e={};for(let o=0;o({className:M.isMain?"fc-main-col":"",width:e[b]||M.width||o}))}function Dh(t){for(let e of t)if(e.group||e.resource&&e.hasChildren)return!0;return!1}function Ch(t){let e=t.resourceAreaColumns||[],o=null;e.length?t.resourceAreaHeaderContent&&(o={headerClassNames:t.resourceAreaHeaderClassNames,headerContent:t.resourceAreaHeaderContent,headerDidMount:t.resourceAreaHeaderDidMount,headerWillUnmount:t.resourceAreaHeaderWillUnmount}):e.push({headerClassNames:t.resourceAreaHeaderClassNames,headerContent:t.resourceAreaHeaderContent,headerDefault:()=>"Resources",headerDidMount:t.resourceAreaHeaderDidMount,headerWillUnmount:t.resourceAreaHeaderWillUnmount});let M=[],b=[],p=[],n=!1;for(let s of e)s.group?b.push(Object.assign(Object.assign({},s),{cellClassNames:s.cellClassNames||t.resourceGroupLabelClassNames,cellContent:s.cellContent||t.resourceGroupLabelContent,cellDidMount:s.cellDidMount||t.resourceGroupLabelDidMount,cellWillUnmount:s.cellWillUnmount||t.resourceGroupLaneWillUnmount})):M.push(s);let r=M[0];if(r.isMain=!0,r.cellClassNames=r.cellClassNames||t.resourceLabelClassNames,r.cellContent=r.cellContent||t.resourceLabelContent,r.cellDidMount=r.cellDidMount||t.resourceLabelDidMount,r.cellWillUnmount=r.cellWillUnmount||t.resourceLabelWillUnmount,b.length)p=b,n=!0;else{let s=t.resourceGroupField;s&&p.push({field:s,labelClassNames:t.resourceGroupLabelClassNames,labelContent:t.resourceGroupLabelContent,labelDidMount:t.resourceGroupLabelDidMount,labelWillUnmount:t.resourceGroupLabelWillUnmount,laneClassNames:t.resourceGroupLaneClassNames,laneContent:t.resourceGroupLaneContent,laneDidMount:t.resourceGroupLaneDidMount,laneWillUnmount:t.resourceGroupLaneWillUnmount})}let i=t.resourceOrder||l2,a=[];for(let s of i){let u=!1;for(let A of p)if(A.field===s.field){A.order=s.order,u=!0;break}u||a.push(s)}return{superHeaderRendering:o,isVGrouping:n,groupSpecs:p,colSpecs:b.concat(M),orderSpecs:a}}var Xh=".fc .fc-resource-timeline-divider{cursor:col-resize;width:3px}.fc .fc-resource-group{font-weight:inherit;text-align:inherit}.fc .fc-resource-timeline .fc-resource-group:not([rowspan]){background:var(--fc-neutral-bg-color)}.fc .fc-timeline-lane-frame{position:relative}.fc .fc-timeline-overlap-enabled .fc-timeline-lane-frame .fc-timeline-events{box-sizing:content-box;padding-bottom:10px}.fc-timeline-body-expandrows td.fc-timeline-lane{position:relative}.fc-timeline-body-expandrows .fc-timeline-lane-frame{position:static}.fc-datagrid-cell-frame-liquid{height:100%}.fc-liquid-hack .fc-datagrid-cell-frame-liquid{bottom:0;height:auto;left:0;position:absolute;right:0;top:0}.fc .fc-datagrid-header .fc-datagrid-cell-frame{align-items:center;display:flex;justify-content:flex-start;position:relative}.fc .fc-datagrid-cell-resizer{bottom:0;cursor:col-resize;position:absolute;top:0;width:5px;z-index:1}.fc .fc-datagrid-cell-cushion{overflow:hidden;padding:8px;white-space:nowrap}.fc .fc-datagrid-expander{cursor:pointer;opacity:.65}.fc .fc-datagrid-expander .fc-icon{display:inline-block;width:1em}.fc .fc-datagrid-expander-placeholder{cursor:auto}.fc .fc-resource-timeline-flat .fc-datagrid-expander-placeholder{display:none}.fc-direction-ltr .fc-datagrid-cell-resizer{right:-3px}.fc-direction-rtl .fc-datagrid-cell-resizer{left:-3px}.fc-direction-ltr .fc-datagrid-expander{margin-right:3px}.fc-direction-rtl .fc-datagrid-expander{margin-left:3px}";Y0(Xh);var ka=$({name:"@fullcalendar/resource-timeline",premiumReleaseDate:"2023-09-21",deps:[z1,Ie,Lb],initialView:"resourceTimelineDay",views:{resourceTimeline:{type:"timeline",component:ho,needsResourceData:!0,resourceAreaWidth:"30%",resourcesInitiallyExpanded:!0,eventResizableFromStart:!0},resourceTimelineDay:{type:"resourceTimeline",duration:{days:1}},resourceTimelineWeek:{type:"resourceTimeline",duration:{weeks:1}},resourceTimelineMonth:{type:"resourceTimeline",duration:{months:1}},resourceTimelineYear:{type:"resourceTimeline",duration:{years:1}}}});var Kn=class extends a2{transformSeg(e,o,M){return[Object.assign(Object.assign({},e),{col:o.computeCol(e.col,M)})]}},Qn=class extends s0{constructor(){super(...arguments),this.buildDayRanges=E(zn),this.splitter=new s2,this.slicers={},this.joiner=new Kn,this.timeColsRef=V(),this.isHitComboAllowed=(e,o)=>this.dayRanges.length===1||e.dateSpan.resourceId===o.dateSpan.resourceId}render(){let{props:e,context:o}=this,{dateEnv:M,options:b}=o,{dateProfile:p,resourceDayTableModel:n}=e,r=this.dayRanges=this.buildDayRanges(n.dayTableModel,p,M),i=this.splitter.splitProps(e);this.slicers=a0(i,(s,u)=>this.slicers[u]||new ao);let a=a0(this.slicers,(s,u)=>s.sliceProps(i[u],p,null,o,r));return d(L0,{unit:b.nowIndicator?"minute":"day"},(s,u)=>d(io,Object.assign({ref:this.timeColsRef},this.joiner.joinProps(a,n),{dateProfile:p,axis:e.axis,slotDuration:e.slotDuration,slatMetas:e.slatMetas,cells:n.cells[0],tableColGroupNode:e.tableColGroupNode,tableMinWidth:e.tableMinWidth,clientWidth:e.clientWidth,clientHeight:e.clientHeight,expandRows:e.expandRows,nowDate:s,nowIndicatorSegs:b.nowIndicator&&this.buildNowIndicatorSegs(s),todayRange:u,onScrollTopRequest:e.onScrollTopRequest,forPrint:e.forPrint,onSlatCoords:e.onSlatCoords,isHitComboAllowed:this.isHitComboAllowed})))}buildNowIndicatorSegs(e){let o=this.slicers[""].sliceNowDate(e,this.props.dateProfile,this.context.options.nextDayThreshold,this.context,this.dayRanges);return this.joiner.expandSegs(this.props.resourceDayTableModel,o)}},Cb=class extends co{constructor(){super(...arguments),this.flattenResources=E(fo),this.buildResourceTimeColsModel=E(xh),this.buildSlatMetas=E(nn)}render(){let{props:e,context:o}=this,{options:M,dateEnv:b}=o,{dateProfile:p}=e,n=this.allDaySplitter.splitProps(e),r=M.resourceOrder||l2,i=this.flattenResources(e.resourceStore,r),a=this.buildResourceTimeColsModel(p,o.dateProfileGenerator,i,M.datesAboveResources,o),s=this.buildSlatMetas(p.slotMinTime,p.slotMaxTime,M.slotLabelInterval,M.slotDuration,b),{dayMinWidth:u}=M,A=!u,q=u,W=M.dayHeaders&&d(r2,{resources:i,dates:a.dayTableModel.headerDates,dateProfile:p,datesRepDistinctDays:!0,renderIntro:A?this.renderHeadAxis:null}),h=M.allDaySlot!==!1&&(y=>d(Wo,Object.assign({},n.allDay,{dateProfile:p,resourceDayTableModel:a,nextDayThreshold:M.nextDayThreshold,tableMinWidth:y.tableMinWidth,colGroupNode:y.tableColGroupNode,renderRowIntro:A?this.renderTableRowAxis:null,showWeekNumbers:!1,expandRows:!1,headerAlignElRef:this.headerElRef,clientWidth:y.clientWidth,clientHeight:y.clientHeight,forPrint:e.forPrint},this.getAllDayMaxEventProps()))),m=y=>d(Qn,Object.assign({},n.timed,{dateProfile:p,axis:A,slotDuration:M.slotDuration,slatMetas:s,resourceDayTableModel:a,tableColGroupNode:y.tableColGroupNode,tableMinWidth:y.tableMinWidth,clientWidth:y.clientWidth,clientHeight:y.clientHeight,onSlatCoords:this.handleSlatCoords,expandRows:y.expandRows,forPrint:e.forPrint,onScrollTopRequest:this.handleScrollTopRequest}));return q?this.renderHScrollLayout(W,h,m,a.colCnt,u,s,this.state.slatCoords):this.renderSimpleLayout(W,h,m)}};function xh(t,e,o,M,b){let p=rn(t,e);return M?new i2(p,o,b):new c2(p,o,b)}var Ia=$({name:"@fullcalendar/resource-timegrid",premiumReleaseDate:"2023-09-21",deps:[z1,Ie,ub],initialView:"resourceTimeGridDay",views:{resourceTimeGrid:{type:"timeGrid",component:Cb,needsResourceData:!0},resourceTimeGridDay:{type:"resourceTimeGrid",duration:{days:1}},resourceTimeGridWeek:{type:"resourceTimeGrid",duration:{weeks:1}}}});var Xb=["MO","TU","WE","TH","FR","SA","SU"],v0=function(){function t(e,o){if(o===0)throw new Error("Can't create weekday with n == 0");this.weekday=e,this.n=o}return t.fromStr=function(e){return new t(Xb.indexOf(e))},t.prototype.nth=function(e){return this.n===e?this:new t(this.weekday,e)},t.prototype.equals=function(e){return this.weekday===e.weekday&&this.n===e.n},t.prototype.toString=function(){var e=Xb[this.weekday];return this.n&&(e=(this.n>0?"+":"")+String(this.n)+e),e},t.prototype.getJsWeekday=function(){return this.weekday===6?0:this.weekday+1},t}();var u0=function(t){return t!=null},a1=function(t){return typeof t=="number"},Zn=function(t){return typeof t=="string"&&Xb.includes(t)},I0=Array.isArray,h1=function(t,e){e===void 0&&(e=t),arguments.length===1&&(e=t,t=0);for(var o=[],M=t;M>0,M.length>e?String(M):(e=e-M.length,e>o.length&&(o+=o0(o,e/o.length)),o.slice(0,e)+String(M))}var Ha=function(t,e,o){var M=t.split(e);return o?M.slice(0,o).concat([M.slice(o).join(e)]):M},Q0=function(t,e){var o=t%e;return o*e<0?o+e:o},xb=function(t,e){return{div:Math.floor(t/e),mod:Q0(t,e)}},s1=function(t){return!u0(t)||t.length===0},y0=function(t){return!s1(t)},p0=function(t,e){return y0(t)&&t.indexOf(e)!==-1};var U1=function(t,e,o,M,b,p){return M===void 0&&(M=0),b===void 0&&(b=0),p===void 0&&(p=0),new Date(Date.UTC(t,e-1,o,M,b,p))},_h=[31,28,31,30,31,30,31,31,30,31,30,31],Fa=1e3*60*60*24,_b=9999,Ga=U1(1970,1,1),kh=[6,0,1,2,3,4,5];var $2=function(t){return t%4===0&&t%100!==0||t%400===0},Jn=function(t){return t instanceof Date},d2=function(t){return Jn(t)&&!isNaN(t.getTime())},Ua=function(t){return t.getTimezoneOffset()*60*1e3},Ih=function(t,e){var o=t.getTime()-Ua(t),M=e.getTime()-Ua(e),b=o-M;return Math.round(b/Fa)},Ro=function(t){return Ih(t,Ga)},kb=function(t){return new Date(Ga.getTime()+t*Fa)},Ph=function(t){var e=t.getUTCMonth();return e===1&&$2(t.getUTCFullYear())?29:_h[e]},de=function(t){return kh[t.getUTCDay()]},$n=function(t,e){var o=U1(t,e+1,1);return[de(o),Ph(o)]},Ib=function(t,e){return e=e||t,new Date(Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate(),e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds()))},Pb=function(t){var e=new Date(t.getTime());return e},er=function(t){for(var e=[],o=0;othis.maxDate;if(this.method==="between"){if(o)return!0;if(M)return!1}else if(this.method==="before"){if(M)return!1}else if(this.method==="after")return o?!0:(this.add(e),!1);return this.add(e)},t.prototype.add=function(e){return this._result.push(e),!0},t.prototype.getValue=function(){var e=this._result;switch(this.method){case"all":case"between":return e;case"before":case"after":default:return e.length?e[e.length-1]:null}},t.prototype.clone=function(){return new t(this.method,this.args)},t}(),qe=Hh;var tr=function(t,e){return tr=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(o,M){o.__proto__=M}||function(o,M){for(var b in M)Object.prototype.hasOwnProperty.call(M,b)&&(o[b]=M[b])},tr(t,e)};function tt(t,e){if(typeof e!="function"&&e!==null)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");tr(t,e);function o(){this.constructor=t}t.prototype=e===null?Object.create(e):(o.prototype=e.prototype,new o)}var P0=function(){return P0=Object.assign||function(e){for(var o,M=1,b=arguments.length;Me[0].length)&&(e=p,o=b)}if(e!=null&&(this.text=this.text.substr(e[0].length),this.text===""&&(this.done=!0)),e==null){this.done=!0,this.symbol=null,this.value=null;return}}while(o==="SKIP");return this.symbol=o,this.value=e,!0},t.prototype.accept=function(e){if(this.symbol===e){if(this.value){var o=this.value;return this.nextSymbol(),o}return this.nextSymbol(),!0}return!1},t.prototype.acceptNumber=function(){return this.accept("number")},t.prototype.expect=function(e){if(this.accept(e))return!0;throw new Error("expected "+e+" but found "+this.symbol)},t}();function go(t,e){e===void 0&&(e=u2);var o={},M=new Vh(e.tokens);if(!M.start(t))return null;return b(),o;function b(){M.expect("every");var A=M.acceptNumber();if(A&&(o.interval=parseInt(A[0],10)),M.isDone())throw new Error("Unexpected end");switch(M.symbol){case"day(s)":o.freq=k.DAILY,M.nextSymbol()&&(n(),u());break;case"weekday(s)":o.freq=k.WEEKLY,o.byweekday=[k.MO,k.TU,k.WE,k.TH,k.FR],M.nextSymbol(),u();break;case"week(s)":o.freq=k.WEEKLY,M.nextSymbol()&&(p(),u());break;case"hour(s)":o.freq=k.HOURLY,M.nextSymbol()&&(p(),u());break;case"minute(s)":o.freq=k.MINUTELY,M.nextSymbol()&&(p(),u());break;case"month(s)":o.freq=k.MONTHLY,M.nextSymbol()&&(p(),u());break;case"year(s)":o.freq=k.YEARLY,M.nextSymbol()&&(p(),u());break;case"monday":case"tuesday":case"wednesday":case"thursday":case"friday":case"saturday":case"sunday":o.freq=k.WEEKLY;var q=M.symbol.substr(0,2).toUpperCase();if(o.byweekday=[k[q]],!M.nextSymbol())return;for(;M.accept("comma");){if(M.isDone())throw new Error("Unexpected end");var W=i();if(!W)throw new Error("Unexpected symbol "+M.symbol+", expected weekday");o.byweekday.push(k[W]),M.nextSymbol()}s(),u();break;case"january":case"february":case"march":case"april":case"may":case"june":case"july":case"august":case"september":case"october":case"november":case"december":if(o.freq=k.YEARLY,o.bymonth=[r()],!M.nextSymbol())return;for(;M.accept("comma");){if(M.isDone())throw new Error("Unexpected end");var h=r();if(!h)throw new Error("Unexpected symbol "+M.symbol+", expected month");o.bymonth.push(h),M.nextSymbol()}p(),u();break;default:throw new Error("Unknown symbol")}}function p(){var A=M.accept("on"),q=M.accept("the");if(A||q)do{var W=a(),h=i(),m=r();if(W)h?(M.nextSymbol(),o.byweekday||(o.byweekday=[]),o.byweekday.push(k[h].nth(W))):(o.bymonthday||(o.bymonthday=[]),o.bymonthday.push(W),M.accept("day(s)"));else if(h)M.nextSymbol(),o.byweekday||(o.byweekday=[]),o.byweekday.push(k[h]);else if(M.symbol==="weekday(s)")M.nextSymbol(),o.byweekday||(o.byweekday=[k.MO,k.TU,k.WE,k.TH,k.FR]);else if(M.symbol==="week(s)"){M.nextSymbol();var y=M.acceptNumber();if(!y)throw new Error("Unexpected symbol "+M.symbol+", expected week number");for(o.byweekno=[parseInt(y[0],10)];M.accept("comma");){if(y=M.acceptNumber(),!y)throw new Error("Unexpected symbol "+M.symbol+"; expected monthday");o.byweekno.push(parseInt(y[0],10))}}else if(m)M.nextSymbol(),o.bymonth||(o.bymonth=[]),o.bymonth.push(m);else return}while(M.accept("comma")||M.accept("the")||M.accept("on"))}function n(){var A=M.accept("at");if(A)do{var q=M.acceptNumber();if(!q)throw new Error("Unexpected symbol "+M.symbol+", expected hour");for(o.byhour=[parseInt(q[0],10)];M.accept("comma");){if(q=M.acceptNumber(),!q)throw new Error("Unexpected symbol "+M.symbol+"; expected hour");o.byhour.push(parseInt(q[0],10))}}while(M.accept("comma")||M.accept("at"))}function r(){switch(M.symbol){case"january":return 1;case"february":return 2;case"march":return 3;case"april":return 4;case"may":return 5;case"june":return 6;case"july":return 7;case"august":return 8;case"september":return 9;case"october":return 10;case"november":return 11;case"december":return 12;default:return!1}}function i(){switch(M.symbol){case"monday":case"tuesday":case"wednesday":case"thursday":case"friday":case"saturday":case"sunday":return M.symbol.substr(0,2).toUpperCase();default:return!1}}function a(){switch(M.symbol){case"last":return M.nextSymbol(),-1;case"first":return M.nextSymbol(),1;case"second":return M.nextSymbol(),M.accept("last")?-2:2;case"third":return M.nextSymbol(),M.accept("last")?-3:3;case"nth":var A=parseInt(M.value[1],10);if(A<-366||A>366)throw new Error("Nth out of range: "+A);return M.nextSymbol(),M.accept("last")?-A:A;default:return!1}}function s(){M.accept("on"),M.accept("the");var A=a();if(A)for(o.bymonthday=[A],M.nextSymbol();M.accept("comma");){if(A=a(),!A)throw new Error("Unexpected symbol "+M.symbol+"; expected monthday");o.bymonthday.push(A),M.nextSymbol()}}function u(){if(M.symbol==="until"){var A=Date.parse(M.text);if(!A)throw new Error("Cannot parse until date:"+M.text);o.until=new Date(A)}else M.accept("for")&&(o.count=parseInt(M.value[0],10),M.expect("number"))}}var e0;(function(t){t[t.YEARLY=0]="YEARLY",t[t.MONTHLY=1]="MONTHLY",t[t.WEEKLY=2]="WEEKLY",t[t.DAILY=3]="DAILY",t[t.HOURLY=4]="HOURLY",t[t.MINUTELY=5]="MINUTELY",t[t.SECONDLY=6]="SECONDLY"})(e0||(e0={}));function Lo(t){return t12){var M=Math.floor(this.month/12),b=Q0(this.month,12);this.month=b,this.year+=M,this.month===0&&(this.month=12,--this.year)}},e.prototype.addWeekly=function(o,M){M>this.getWeekday()?this.day+=-(this.getWeekday()+1+(6-M))+o*7:this.day+=-(this.getWeekday()-M)+o*7,this.fixDay()},e.prototype.addDaily=function(o){this.day+=o,this.fixDay()},e.prototype.addHours=function(o,M,b){for(M&&(this.hour+=Math.floor((23-this.hour)/o)*o);;){this.hour+=o;var p=xb(this.hour,24),n=p.div,r=p.mod;if(n&&(this.hour=r,this.addDaily(n)),s1(b)||p0(b,this.hour))break}},e.prototype.addMinutes=function(o,M,b,p){for(M&&(this.minute+=Math.floor((1439-(this.hour*60+this.minute))/o)*o);;){this.minute+=o;var n=xb(this.minute,60),r=n.div,i=n.mod;if(r&&(this.minute=i,this.addHours(r,!1,b)),(s1(b)||p0(b,this.hour))&&(s1(p)||p0(p,this.minute)))break}},e.prototype.addSeconds=function(o,M,b,p,n){for(M&&(this.second+=Math.floor((86399-(this.hour*3600+this.minute*60+this.second))/o)*o);;){this.second+=o;var r=xb(this.second,60),i=r.div,a=r.mod;if(i&&(this.second=a,this.addMinutes(i,!1,b,p)),(s1(b)||p0(b,this.hour))&&(s1(p)||p0(p,this.minute))&&(s1(n)||p0(n,this.second)))break}},e.prototype.fixDay=function(){if(!(this.day<=28)){var o=$n(this.year,this.month-1)[1];if(!(this.day<=o))for(;this.day>o;){if(this.day-=o,++this.month,this.month===13&&(this.month=1,++this.year,this.year>_b))return;o=$n(this.year,this.month-1)[1]}}},e.prototype.add=function(o,M){var b=o.freq,p=o.interval,n=o.wkst,r=o.byhour,i=o.byminute,a=o.bysecond;switch(b){case e0.YEARLY:return this.addYears(p);case e0.MONTHLY:return this.addMonths(p);case e0.WEEKLY:return this.addWeekly(p,n);case e0.DAILY:return this.addDaily(p);case e0.HOURLY:return this.addHours(p,M,r);case e0.MINUTELY:return this.addMinutes(p,M,r,i);case e0.SECONDLY:return this.addSeconds(p,M,r,i,a)}},e}(Mt);function Mr(t){for(var e=[],o=Object.keys(t),M=0,b=o;M=-366&&M<=366))throw new Error("bysetpos must be between 1 and 366, or between -366 and -1")}}if(!(e.byweekno||y0(e.byweekno)||y0(e.byyearday)||e.bymonthday||y0(e.bymonthday)||u0(e.byweekday)||u0(e.byeaster)))switch(e.freq){case k.YEARLY:e.bymonth||(e.bymonth=e.dtstart.getUTCMonth()+1),e.bymonthday=e.dtstart.getUTCDate();break;case k.MONTHLY:e.bymonthday=e.dtstart.getUTCDate();break;case k.WEEKLY:e.byweekday=[de(e.dtstart)];break}if(u0(e.bymonth)&&!I0(e.bymonth)&&(e.bymonth=[e.bymonth]),u0(e.byyearday)&&!I0(e.byyearday)&&a1(e.byyearday)&&(e.byyearday=[e.byyearday]),!u0(e.bymonthday))e.bymonthday=[],e.bynmonthday=[];else if(I0(e.bymonthday)){for(var b=[],p=[],o=0;o0?b.push(M):M<0&&p.push(M)}e.bymonthday=b,e.bynmonthday=p}else e.bymonthday<0?(e.bynmonthday=[e.bymonthday],e.bymonthday=[]):(e.bynmonthday=[],e.bymonthday=[e.bymonthday]);if(u0(e.byweekno)&&!I0(e.byweekno)&&(e.byweekno=[e.byweekno]),!u0(e.byweekday))e.bynweekday=null;else if(a1(e.byweekday))e.byweekday=[e.byweekday],e.bynweekday=null;else if(Zn(e.byweekday))e.byweekday=[v0.fromStr(e.byweekday).weekday],e.bynweekday=null;else if(e.byweekday instanceof v0)!e.byweekday.n||e.freq>k.MONTHLY?(e.byweekday=[e.byweekday.weekday],e.bynweekday=null):(e.bynweekday=[[e.byweekday.weekday,e.byweekday.n]],e.byweekday=null);else{for(var n=[],r=[],o=0;ok.MONTHLY?n.push(i.weekday):r.push([i.weekday,i.n])}e.byweekday=y0(n)?n:null,e.bynweekday=y0(r)?r:null}return u0(e.byhour)?a1(e.byhour)&&(e.byhour=[e.byhour]):e.byhour=e.freq=4?(s=0,a=r.yearlen+Q0(n-e.wkst,7)):a=M-s;for(var u=Math.floor(a/7),A=Q0(a,7),q=Math.floor(u+A/4),W=0;W0&&h<=q){var m=void 0;h>1?(m=s+(h-1)*7,s!==i&&(m-=7-i)):m=s;for(var y=0;y<7&&(r.wnomask[m]=1,m++,r.wdaymask[m]!==e.wkst);y++);}}if(p0(e.byweekno,1)){var m=s+q*7;if(s!==i&&(m-=7-i),m=4?(x=0,P=K+Q0(w-e.wkst,7)):P=M-s,N=Math.floor(52+Q0(P,7)/4)}if(p0(e.byweekno,N))for(var m=0;mp)return fe(t);if(N>=o){var w=qs(N,e);if(!t.accept(w)||r&&(--r,!r))return fe(t)}}else for(var y=q;yp)return fe(t);if(N>=o){var w=qs(N,e);if(!t.accept(w)||r&&(--r,!r))return fe(t)}}}if(e.interval===0||(i.add(e,h),i.year>_b))return fe(t);Lo(M)||(s=a.gettimeset(M)(i.hour,i.minute,i.second,0)),a.rebuild(i.year,i.month)}}function z6(t,e,o){var M=o.bymonth,b=o.byweekno,p=o.byweekday,n=o.byeaster,r=o.bymonthday,i=o.bynmonthday,a=o.byyearday;return y0(M)&&!p0(M,t.mmask[e])||y0(b)&&!t.wnomask[e]||y0(p)&&!p0(p,t.wdaymask[e])||y0(t.nwdaymask)&&!t.nwdaymask[e]||n!==null&&!p0(t.eastermask,e)||(y0(r)||y0(i))&&!p0(r,t.mdaymask[e])&&!p0(i,t.nmdaymask[e])||y0(a)&&(e=t.yearlen&&!p0(a,e+1-t.yearlen)&&!p0(a,-t.nextyearlen+e-t.yearlen))}function qs(t,e){return new q2(t,e.tzid).rezonedDate()}function fe(t){return t.getValue()}function n6(t,e,o,M,b){for(var p=!1,n=e;n=k.HOURLY&&y0(b)&&!p0(b,e.hour)||M>=k.MINUTELY&&y0(p)&&!p0(p,e.minute)||M>=k.SECONDLY&&y0(n)&&!p0(n,e.second)?[]:t.gettimeset(M)(e.hour,e.minute,e.second,e.millisecond)}var R1={MO:new v0(0),TU:new v0(1),WE:new v0(2),TH:new v0(3),FR:new v0(4),SA:new v0(5),SU:new v0(6)},yo={freq:e0.YEARLY,dtstart:null,interval:1,wkst:R1.MO,count:null,until:null,tzid:null,bysetpos:null,bymonth:null,bymonthday:null,bynmonthday:null,byyearday:null,byweekno:null,byweekday:null,bynweekday:null,byhour:null,byminute:null,bysecond:null,byeaster:null},ts=Object.keys(yo),k=function(){function t(e,o){e===void 0&&(e={}),o===void 0&&(o=!1),this._cache=o?null:new bs,this.origOptions=Mr(e);var M=$a(e).parsedOptions;this.options=M}return t.parseText=function(e,o){return go(e,o)},t.fromText=function(e,o){return Ka(e,o)},t.fromString=function(e){return new t(t.parseString(e)||void 0)},t.prototype._iter=function(e){return Hb(e,this.options)},t.prototype._cacheGet=function(e,o){return this._cache?this._cache._cacheGet(e,o):!1},t.prototype._cacheAdd=function(e,o,M){if(this._cache)return this._cache._cacheAdd(e,o,M)},t.prototype.all=function(e){if(e)return this._iter(new or("all",{},e));var o=this._cacheGet("all");return o===!1&&(o=this._iter(new qe("all",{})),this._cacheAdd("all",o)),o},t.prototype.between=function(e,o,M,b){if(M===void 0&&(M=!1),!d2(e)||!d2(o))throw new Error("Invalid date passed in to RRule.between");var p={before:o,after:e,inc:M};if(b)return this._iter(new or("between",p,b));var n=this._cacheGet("between",p);return n===!1&&(n=this._iter(new qe("between",p)),this._cacheAdd("between",n,p)),n},t.prototype.before=function(e,o){if(o===void 0&&(o=!1),!d2(e))throw new Error("Invalid date passed in to RRule.before");var M={dt:e,inc:o},b=this._cacheGet("before",M);return b===!1&&(b=this._iter(new qe("before",M)),this._cacheAdd("before",b,M)),b},t.prototype.after=function(e,o){if(o===void 0&&(o=!1),!d2(e))throw new Error("Invalid date passed in to RRule.after");var M={dt:e,inc:o},b=this._cacheGet("after",M);return b===!1&&(b=this._iter(new qe("after",M)),this._cacheAdd("after",b,M)),b},t.prototype.count=function(){return this.all().length},t.prototype.toString=function(){return Bo(this.origOptions)},t.prototype.toText=function(e,o,M){return Qa(this,e,o,M)},t.prototype.isFullyConvertibleToText=function(){return Za(this)},t.prototype.clone=function(){return new t(this.origOptions)},t.FREQUENCIES=["YEARLY","MONTHLY","WEEKLY","DAILY","HOURLY","MINUTELY","SECONDLY"],t.YEARLY=e0.YEARLY,t.MONTHLY=e0.MONTHLY,t.WEEKLY=e0.WEEKLY,t.DAILY=e0.DAILY,t.HOURLY=e0.HOURLY,t.MINUTELY=e0.MINUTELY,t.SECONDLY=e0.SECONDLY,t.MO=R1.MO,t.TU=R1.TU,t.WE=R1.WE,t.TH=R1.TH,t.FR=R1.FR,t.SA=R1.SA,t.SU=R1.SU,t.parseString=No,t.optionsToString=Bo,t}();function fs(t,e,o,M,b,p){var n={},r=t.accept;function i(A,q){o.forEach(function(W){W.between(A,q,!0).forEach(function(h){n[Number(h)]=!0})})}b.forEach(function(A){var q=new q2(A,p).rezonedDate();n[Number(q)]=!0}),t.accept=function(A){var q=Number(A);return isNaN(q)?r.call(this,A):!n[q]&&(i(new Date(q-1),new Date(q+1)),!n[q])?(n[q]=!0,r.call(this,A)):!0},t.method==="between"&&(i(t.args.after,t.args.before),t.accept=function(A){var q=Number(A);return n[q]?!0:(n[q]=!0,r.call(this,A))});for(var a=0;a1||b.length||p.length||n.length){var s=new So(a);return s.dtstart(r),s.tzid(i||void 0),M.forEach(function(A){s.rrule(new k(pr(A,r,i),a))}),b.forEach(function(A){s.rdate(A)}),p.forEach(function(A){s.exrule(new k(pr(A,r,i),a))}),n.forEach(function(A){s.exdate(A)}),e.compatible&&e.dtstart&&s.rdate(r),s}var u=M[0]||{};return new k(pr(u,u.dtstart||e.dtstart||r,u.tzid||e.tzid||i),a)}function bt(t,e){return e===void 0&&(e={}),i6(t,a6(e))}function pr(t,e,o){return P0(P0({},t),{dtstart:e,tzid:o})}function a6(t){var e=[],o=Object.keys(t),M=Object.keys(Ws);if(o.forEach(function(b){p0(M,b)||e.push(b)}),e.length)throw new Error("Invalid options: "+e.join(", "));return P0(P0({},Ws),t)}function s6(t){if(t.indexOf(":")===-1)return{name:"RRULE",value:t};var e=Ha(t,":",1),o=e[0],M=e[1];return{name:o,value:M}}function O6(t){var e=s6(t),o=e.name,M=e.value,b=o.split(";");if(!b)throw new Error("empty property name");return{name:b[0].toUpperCase(),parms:b.slice(1),value:M}}function l6(t,e){if(e===void 0&&(e=!1),t=t&&t.trim(),!t)throw new Error("Invalid empty string");if(!e)return t.split(/\s/);for(var o=t.split(` +`),M=0;M0&&b[0]===" "?(o[M-1]+=b.slice(1),o.splice(M,1)):M+=1:o.splice(M,1)}return o}function A6(t){t.forEach(function(e){if(!/(VALUE=DATE(-TIME)?)|(TZID=)/.test(e))throw new Error("unsupported RDATE/EXDATE parm: "+e)})}function hs(t,e){return A6(e),t.split(",").map(function(o){return mo(o)})}function Rs(t){var e=this;return function(o){if(o!==void 0&&(e["_".concat(t)]=o),e["_".concat(t)]!==void 0)return e["_".concat(t)];for(var M=0;Mo.createMarker(b)):M=t.rruleSet.between(e.start,e.end,!0),M}};function q6(t,e){let o,M=!1,b=!1;if(typeof t.rrule=="string"){let r=f6(t.rrule);o=r.rruleSet,M=r.isTimeSpecified,b=r.isTimeZoneSpecified}if(typeof t.rrule=="object"&&t.rrule){let r=ys(t.rrule,e);o=new So,o.rrule(r.rrule),M=r.isTimeSpecified,b=r.isTimeZoneSpecified}let p=[].concat(t.exdate||[]),n=[].concat(t.exrule||[]);for(let r of p){let i=x2(r);M=M||!i.isTimeUnspecified,b=b||i.timeZoneOffset!==null,o.exdate(new Date(i.marker.valueOf()-(i.timeZoneOffset||0)*60*1e3))}for(let r of n){let i=ys(r,e);M=M||i.isTimeSpecified,b=b||i.isTimeZoneSpecified,o.exrule(i.rrule)}return{rruleSet:o,isTimeSpecified:M,isTimeZoneSpecified:b}}function ys(t,e){let o=!1,M=!1;function b(n){if(typeof n=="string"){let r=x2(n);return r?(o=o||!r.isTimeUnspecified,M=M||r.timeZoneOffset!==null,new Date(r.marker.valueOf()-(r.timeZoneOffset||0)*60*1e3)):null}return n}let p=Object.assign(Object.assign({},t),{dtstart:b(t.dtstart),until:b(t.until),freq:Ub(t.freq),wkst:t.wkst==null?(e.weekDow-1+7)%7:Ub(t.wkst),byweekday:h6(t.byweekday)});return{rrule:new k(p),isTimeSpecified:o,isTimeZoneSpecified:M}}function f6(t){let e=bt(t,{forceset:!0}),o=W6(t);return Object.assign({rruleSet:e},o)}function W6(t){let e=!1,o=!1;function M(b,p,n){let r=x2(n);e=e||!r.isTimeUnspecified,o=o||r.timeZoneOffset!==null}return t.replace(/\b(DTSTART:)([^\n]*)/,M),t.replace(/\b(EXDATE:)([^\n]*)/,M),t.replace(/\b(UNTIL=)([^;\n]*)/,M),{isTimeSpecified:e,isTimeZoneSpecified:o}}function h6(t){return Array.isArray(t)?t.map(Ub):Ub(t)}function Ub(t){return typeof t=="string"?k[t.toUpperCase()]:t}var R6={rrule:g,exrule:g,exdate:g,duration:Y},vs=$({name:"@fullcalendar/rrule",recurringTypes:[u6],eventRefiners:R6});var zt=pc(nr(),1);function rr(t,e,o,M){let b;return e==="local"?b=(0,zt.default)(t):e==="UTC"?b=zt.default.utc(t):zt.default.tz?b=zt.default.tz(t,e):(b=zt.default.utc(t),o!=null&&b.utcOffset(o)),b.locale(M),b}function m6(t,e){let o=Bs(t);if(e.end){let M=rr(e.start.array,e.timeZone,e.start.timeZoneOffset,e.localeCodes[0]),b=rr(e.end.array,e.timeZone,e.end.timeZoneOffset,e.localeCodes[0]);return cr(o,Ns(M),Ns(b),e.defaultSeparator)}return rr(e.date.array,e.timeZone,e.date.timeZoneOffset,e.localeCodes[0]).format(o.whole)}function Ns(t){return e=>e?t.format(e):""}function Bs(t){let e=t.match(/^(.*?)\{(.*)\}(.*)$/);if(e){let o=Bs(e[2]);return{head:e[1],middle:o,tail:e[3],whole:e[1]+o.whole+e[3]}}return{head:null,middle:null,tail:null,whole:t}}function cr(t,e,o,M){if(t.middle){let n=e(t.head),r=cr(t.middle,e,o,M),i=e(t.tail),a=o(t.head),s=cr(t.middle,e,o,M),u=o(t.tail);if(n===a&&i===u)return n+(r===s?r:r+M+s)+i}let b=e(t.whole),p=o(t.whole);return b===p?b:b+M+p}var Ss=$({name:"@fullcalendar/moment",cmdFormatter:m6});var ir=pc(Cs(),1);var ar=class extends St{offsetForArray(e){return ir.default.tz(e,this.timeZoneName).utcOffset()}timestampToArray(e){return ir.default.tz(e,this.timeZoneName).toArray()}},Xs=$({name:"@fullcalendar/moment-timezone",namedTimeZonedImpl:ar});var xs={code:"af",week:{dow:1,doy:4},buttonText:{prev:"Vorige",next:"Volgende",today:"Vandag",year:"Jaar",month:"Maand",week:"Week",day:"Dag",list:"Agenda"},allDayText:"Heeldag",moreLinkText:"Addisionele",noEventsText:"Daar is geen gebeurtenisse nie"};var _s={code:"ar-dz",week:{dow:0,doy:4},direction:"rtl",buttonText:{prev:"\u0627\u0644\u0633\u0627\u0628\u0642",next:"\u0627\u0644\u062A\u0627\u0644\u064A",today:"\u0627\u0644\u064A\u0648\u0645",year:"\u0633\u0646\u0629",month:"\u0634\u0647\u0631",week:"\u0623\u0633\u0628\u0648\u0639",day:"\u064A\u0648\u0645",list:"\u0623\u062C\u0646\u062F\u0629"},weekText:"\u0623\u0633\u0628\u0648\u0639",allDayText:"\u0627\u0644\u064A\u0648\u0645 \u0643\u0644\u0647",moreLinkText:"\u0623\u062E\u0631\u0649",noEventsText:"\u0623\u064A \u0623\u062D\u062F\u0627\u062B \u0644\u0639\u0631\u0636"};var ks={code:"ar-kw",week:{dow:0,doy:12},direction:"rtl",buttonText:{prev:"\u0627\u0644\u0633\u0627\u0628\u0642",next:"\u0627\u0644\u062A\u0627\u0644\u064A",today:"\u0627\u0644\u064A\u0648\u0645",year:"\u0633\u0646\u0629",month:"\u0634\u0647\u0631",week:"\u0623\u0633\u0628\u0648\u0639",day:"\u064A\u0648\u0645",list:"\u0623\u062C\u0646\u062F\u0629"},weekText:"\u0623\u0633\u0628\u0648\u0639",allDayText:"\u0627\u0644\u064A\u0648\u0645 \u0643\u0644\u0647",moreLinkText:"\u0623\u062E\u0631\u0649",noEventsText:"\u0623\u064A \u0623\u062D\u062F\u0627\u062B \u0644\u0639\u0631\u0636"};var Is={code:"ar-ly",week:{dow:6,doy:12},direction:"rtl",buttonText:{prev:"\u0627\u0644\u0633\u0627\u0628\u0642",next:"\u0627\u0644\u062A\u0627\u0644\u064A",today:"\u0627\u0644\u064A\u0648\u0645",year:"\u0633\u0646\u0629",month:"\u0634\u0647\u0631",week:"\u0623\u0633\u0628\u0648\u0639",day:"\u064A\u0648\u0645",list:"\u0623\u062C\u0646\u062F\u0629"},weekText:"\u0623\u0633\u0628\u0648\u0639",allDayText:"\u0627\u0644\u064A\u0648\u0645 \u0643\u0644\u0647",moreLinkText:"\u0623\u062E\u0631\u0649",noEventsText:"\u0623\u064A \u0623\u062D\u062F\u0627\u062B \u0644\u0639\u0631\u0636"};var Ps={code:"ar-ma",week:{dow:6,doy:12},direction:"rtl",buttonText:{prev:"\u0627\u0644\u0633\u0627\u0628\u0642",next:"\u0627\u0644\u062A\u0627\u0644\u064A",today:"\u0627\u0644\u064A\u0648\u0645",year:"\u0633\u0646\u0629",month:"\u0634\u0647\u0631",week:"\u0623\u0633\u0628\u0648\u0639",day:"\u064A\u0648\u0645",list:"\u0623\u062C\u0646\u062F\u0629"},weekText:"\u0623\u0633\u0628\u0648\u0639",allDayText:"\u0627\u0644\u064A\u0648\u0645 \u0643\u0644\u0647",moreLinkText:"\u0623\u062E\u0631\u0649",noEventsText:"\u0623\u064A \u0623\u062D\u062F\u0627\u062B \u0644\u0639\u0631\u0636"};var Hs={code:"ar-sa",week:{dow:0,doy:6},direction:"rtl",buttonText:{prev:"\u0627\u0644\u0633\u0627\u0628\u0642",next:"\u0627\u0644\u062A\u0627\u0644\u064A",today:"\u0627\u0644\u064A\u0648\u0645",year:"\u0633\u0646\u0629",month:"\u0634\u0647\u0631",week:"\u0623\u0633\u0628\u0648\u0639",day:"\u064A\u0648\u0645",list:"\u0623\u062C\u0646\u062F\u0629"},weekText:"\u0623\u0633\u0628\u0648\u0639",allDayText:"\u0627\u0644\u064A\u0648\u0645 \u0643\u0644\u0647",moreLinkText:"\u0623\u062E\u0631\u0649",noEventsText:"\u0623\u064A \u0623\u062D\u062F\u0627\u062B \u0644\u0639\u0631\u0636"};var Us={code:"ar-tn",week:{dow:1,doy:4},direction:"rtl",buttonText:{prev:"\u0627\u0644\u0633\u0627\u0628\u0642",next:"\u0627\u0644\u062A\u0627\u0644\u064A",today:"\u0627\u0644\u064A\u0648\u0645",year:"\u0633\u0646\u0629",month:"\u0634\u0647\u0631",week:"\u0623\u0633\u0628\u0648\u0639",day:"\u064A\u0648\u0645",list:"\u0623\u062C\u0646\u062F\u0629"},weekText:"\u0623\u0633\u0628\u0648\u0639",allDayText:"\u0627\u0644\u064A\u0648\u0645 \u0643\u0644\u0647",moreLinkText:"\u0623\u062E\u0631\u0649",noEventsText:"\u0623\u064A \u0623\u062D\u062F\u0627\u062B \u0644\u0639\u0631\u0636"};var js={code:"ar",week:{dow:6,doy:12},direction:"rtl",buttonText:{prev:"\u0627\u0644\u0633\u0627\u0628\u0642",next:"\u0627\u0644\u062A\u0627\u0644\u064A",today:"\u0627\u0644\u064A\u0648\u0645",year:"\u0633\u0646\u0629",month:"\u0634\u0647\u0631",week:"\u0623\u0633\u0628\u0648\u0639",day:"\u064A\u0648\u0645",list:"\u0623\u062C\u0646\u062F\u0629"},weekText:"\u0623\u0633\u0628\u0648\u0639",allDayText:"\u0627\u0644\u064A\u0648\u0645 \u0643\u0644\u0647",moreLinkText:"\u0623\u062E\u0631\u0649",noEventsText:"\u0623\u064A \u0623\u062D\u062F\u0627\u062B \u0644\u0639\u0631\u0636"};var Fs={code:"az",week:{dow:1,doy:4},buttonText:{prev:"\u018Fvv\u0259l",next:"Sonra",today:"Bu G\xFCn",year:"Il",month:"Ay",week:"H\u0259ft\u0259",day:"G\xFCn",list:"G\xFCnd\u0259m"},weekText:"H\u0259ft\u0259",allDayText:"B\xFCt\xFCn G\xFCn",moreLinkText(t){return"+ daha \xE7ox "+t},noEventsText:"G\xF6st\u0259rm\u0259k \xFC\xE7\xFCn hadis\u0259 yoxdur"};var Gs={code:"bg",week:{dow:1,doy:7},buttonText:{prev:"\u043D\u0430\u0437\u0430\u0434",next:"\u043D\u0430\u043F\u0440\u0435\u0434",today:"\u0434\u043D\u0435\u0441",year:"\u0433\u043E\u0434\u0438\u043D\u0430",month:"\u041C\u0435\u0441\u0435\u0446",week:"\u0421\u0435\u0434\u043C\u0438\u0446\u0430",day:"\u0414\u0435\u043D",list:"\u0413\u0440\u0430\u0444\u0438\u043A"},allDayText:"\u0426\u044F\u043B \u0434\u0435\u043D",moreLinkText(t){return"+\u043E\u0449\u0435 "+t},noEventsText:"\u041D\u044F\u043C\u0430 \u0441\u044A\u0431\u0438\u0442\u0438\u044F \u0437\u0430 \u043F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435"};var Ys={code:"bn",week:{dow:0,doy:6},buttonText:{prev:"\u09AA\u09C7\u099B\u09A8\u09C7",next:"\u09B8\u09BE\u09AE\u09A8\u09C7",today:"\u0986\u099C",year:"\u09AC\u099B\u09B0",month:"\u09AE\u09BE\u09B8",week:"\u09B8\u09AA\u09CD\u09A4\u09BE\u09B9",day:"\u09A6\u09BF\u09A8",list:"\u09A4\u09BE\u09B2\u09BF\u0995\u09BE"},weekText:"\u09B8\u09AA\u09CD\u09A4\u09BE\u09B9",allDayText:"\u09B8\u09BE\u09B0\u09BE\u09A6\u09BF\u09A8",moreLinkText(t){return"+\u0985\u09A8\u09CD\u09AF\u09BE\u09A8\u09CD\u09AF "+t},noEventsText:"\u0995\u09CB\u09A8\u09CB \u0987\u09AD\u09C7\u09A8\u09CD\u099F \u09A8\u09C7\u0987"};var Vs={code:"bs",week:{dow:1,doy:7},buttonText:{prev:"Pro\u0161li",next:"Sljede\u0107i",today:"Danas",year:"Godina",month:"Mjesec",week:"Sedmica",day:"Dan",list:"Raspored"},weekText:"Sed",allDayText:"Cijeli dan",moreLinkText(t){return"+ jo\u0161 "+t},noEventsText:"Nema doga\u0111aja za prikazivanje"};var Ks={code:"ca",week:{dow:1,doy:4},buttonText:{prev:"Anterior",next:"Seg\xFCent",today:"Avui",year:"Curs",month:"Mes",week:"Setmana",day:"Dia",list:"Agenda"},weekText:"Set",allDayText:"Tot el dia",moreLinkText:"m\xE9s",noEventsText:"No hi ha esdeveniments per mostrar"};var Qs={code:"cs",week:{dow:1,doy:4},buttonText:{prev:"D\u0159\xEDve",next:"Pozd\u011Bji",today:"Nyn\xED",year:"Rok",month:"M\u011Bs\xEDc",week:"T\xFDden",day:"Den",list:"Agenda"},weekText:"T\xFDd",allDayText:"Cel\xFD den",moreLinkText(t){return"+dal\u0161\xED: "+t},noEventsText:"\u017D\xE1dn\xE9 akce k zobrazen\xED"};var Zs={code:"cy",week:{dow:1,doy:4},buttonText:{prev:"Blaenorol",next:"Nesaf",today:"Heddiw",year:"Blwyddyn",month:"Mis",week:"Wythnos",day:"Dydd",list:"Rhestr"},weekText:"Wythnos",allDayText:"Trwy'r dydd",moreLinkText:"Mwy",noEventsText:"Dim digwyddiadau"};var Js={code:"da",week:{dow:1,doy:4},buttonText:{prev:"Forrige",next:"N\xE6ste",today:"I dag",year:"\xC5r",month:"M\xE5ned",week:"Uge",day:"Dag",list:"Agenda"},weekText:"Uge",allDayText:"Hele dagen",moreLinkText:"flere",noEventsText:"Ingen arrangementer at vise"};function sr(t){return t==="Tag"||t==="Monat"?"r":t==="Jahr"?"s":""}var $s={code:"de-at",week:{dow:1,doy:4},buttonText:{prev:"Zur\xFCck",next:"Vor",today:"Heute",year:"Jahr",month:"Monat",week:"Woche",day:"Tag",list:"Termin\xFCbersicht"},weekText:"KW",weekTextLong:"Woche",allDayText:"Ganzt\xE4gig",moreLinkText(t){return"+ weitere "+t},noEventsText:"Keine Ereignisse anzuzeigen",buttonHints:{prev(t){return`Vorherige${sr(t)} ${t}`},next(t){return`N\xE4chste${sr(t)} ${t}`},today(t){return t==="Tag"?"Heute":`Diese${sr(t)} ${t}`}},viewHint(t){return t+(t==="Woche"?"n":t==="Monat"?"s":"es")+"ansicht"},navLinkHint:"Gehe zu $0",moreLinkHint(t){return"Zeige "+(t===1?"ein weiteres Ereignis":t+" weitere Ereignisse")},closeHint:"Schlie\xDFen",timeHint:"Uhrzeit",eventHint:"Ereignis"};function Or(t){return t==="Tag"||t==="Monat"?"r":t==="Jahr"?"s":""}var eO={code:"de",week:{dow:1,doy:4},buttonText:{prev:"Zur\xFCck",next:"Vor",today:"Heute",year:"Jahr",month:"Monat",week:"Woche",day:"Tag",list:"Termin\xFCbersicht"},weekText:"KW",weekTextLong:"Woche",allDayText:"Ganzt\xE4gig",moreLinkText(t){return"+ weitere "+t},noEventsText:"Keine Ereignisse anzuzeigen",buttonHints:{prev(t){return`Vorherige${Or(t)} ${t}`},next(t){return`N\xE4chste${Or(t)} ${t}`},today(t){return t==="Tag"?"Heute":`Diese${Or(t)} ${t}`}},viewHint(t){return t+(t==="Woche"?"n":t==="Monat"?"s":"es")+"ansicht"},navLinkHint:"Gehe zu $0",moreLinkHint(t){return"Zeige "+(t===1?"ein weiteres Ereignis":t+" weitere Ereignisse")},closeHint:"Schlie\xDFen",timeHint:"Uhrzeit",eventHint:"Ereignis"};var tO={code:"el",week:{dow:1,doy:4},buttonText:{prev:"\u03A0\u03C1\u03BF\u03B7\u03B3\u03BF\u03CD\u03BC\u03B5\u03BD\u03BF\u03C2",next:"\u0395\u03C0\u03CC\u03BC\u03B5\u03BD\u03BF\u03C2",today:"\u03A3\u03AE\u03BC\u03B5\u03C1\u03B1",year:"\u0395\u03C4\u03BF\u03C2",month:"\u039C\u03AE\u03BD\u03B1\u03C2",week:"\u0395\u03B2\u03B4\u03BF\u03BC\u03AC\u03B4\u03B1",day:"\u0397\u03BC\u03AD\u03C1\u03B1",list:"\u0391\u03C4\u03B6\u03AD\u03BD\u03C4\u03B1"},weekText:"\u0395\u03B2\u03B4",allDayText:"\u039F\u03BB\u03BF\u03AE\u03BC\u03B5\u03C1\u03BF",moreLinkText:"\u03C0\u03B5\u03C1\u03B9\u03C3\u03C3\u03CC\u03C4\u03B5\u03C1\u03B1",noEventsText:"\u0394\u03B5\u03BD \u03C5\u03C0\u03AC\u03C1\u03C7\u03BF\u03C5\u03BD \u03B3\u03B5\u03B3\u03BF\u03BD\u03CC\u03C4\u03B1 \u03C0\u03C1\u03BF\u03C2 \u03B5\u03BC\u03C6\u03AC\u03BD\u03B9\u03C3\u03B7"};var oO={code:"en-au",week:{dow:1,doy:4},buttonHints:{prev:"Previous $0",next:"Next $0",today:"This $0"},viewHint:"$0 view",navLinkHint:"Go to $0",moreLinkHint(t){return`Show ${t} more event${t===1?"":"s"}`}};var MO={code:"en-gb",week:{dow:1,doy:4},buttonHints:{prev:"Previous $0",next:"Next $0",today:"This $0"},viewHint:"$0 view",navLinkHint:"Go to $0",moreLinkHint(t){return`Show ${t} more event${t===1?"":"s"}`}};var bO={code:"en-nz",week:{dow:1,doy:4},buttonHints:{prev:"Previous $0",next:"Next $0",today:"This $0"},viewHint:"$0 view",navLinkHint:"Go to $0",moreLinkHint(t){return`Show ${t} more event${t===1?"":"s"}`}};var pO={code:"eo",week:{dow:1,doy:4},buttonText:{prev:"Anta\u016Da",next:"Sekva",today:"Hodia\u016D",year:"Jaro",month:"Monato",week:"Semajno",day:"Tago",list:"Tagordo"},weekText:"Sm",allDayText:"Tuta tago",moreLinkText:"pli",noEventsText:"Neniuj eventoj por montri"};var zO={code:"es",week:{dow:0,doy:6},buttonText:{prev:"Ant",next:"Sig",today:"Hoy",year:"A\xF1o",month:"Mes",week:"Semana",day:"D\xEDa",list:"Agenda"},weekText:"Sm",allDayText:"Todo el d\xEDa",moreLinkText:"m\xE1s",noEventsText:"No hay eventos para mostrar"};var nO={code:"es",week:{dow:1,doy:4},buttonText:{prev:"Ant",next:"Sig",today:"Hoy",year:"A\xF1o",month:"Mes",week:"Semana",day:"D\xEDa",list:"Agenda"},buttonHints:{prev:"$0 antes",next:"$0 siguiente",today(t){return t==="D\xEDa"?"Hoy":(t==="Semana"?"Esta":"Este")+" "+t.toLocaleLowerCase()}},viewHint(t){return"Vista "+(t==="Semana"?"de la":"del")+" "+t.toLocaleLowerCase()},weekText:"Sm",weekTextLong:"Semana",allDayText:"Todo el d\xEDa",moreLinkText:"m\xE1s",moreLinkHint(t){return`Mostrar ${t} eventos m\xE1s`},noEventsText:"No hay eventos para mostrar",navLinkHint:"Ir al $0",closeHint:"Cerrar",timeHint:"La hora",eventHint:"Evento"};var rO={code:"et",week:{dow:1,doy:4},buttonText:{prev:"Eelnev",next:"J\xE4rgnev",today:"T\xE4na",year:"Aasta",month:"Kuu",week:"N\xE4dal",day:"P\xE4ev",list:"P\xE4evakord"},weekText:"n\xE4d",allDayText:"Kogu p\xE4ev",moreLinkText(t){return"+ veel "+t},noEventsText:"Kuvamiseks puuduvad s\xFCndmused"};var cO={code:"eu",week:{dow:1,doy:7},buttonText:{prev:"Aur",next:"Hur",today:"Gaur",year:"Urtea",month:"Hilabetea",week:"Astea",day:"Eguna",list:"Agenda"},weekText:"As",allDayText:"Egun osoa",moreLinkText:"gehiago",noEventsText:"Ez dago ekitaldirik erakusteko"};var iO={code:"fa",week:{dow:6,doy:12},direction:"rtl",buttonText:{prev:"\u0642\u0628\u0644\u06CC",next:"\u0628\u0639\u062F\u06CC",today:"\u0627\u0645\u0631\u0648\u0632",year:"\u0633\u0627\u0644",month:"\u0645\u0627\u0647",week:"\u0647\u0641\u062A\u0647",day:"\u0631\u0648\u0632",list:"\u0628\u0631\u0646\u0627\u0645\u0647"},weekText:"\u0647\u0641",allDayText:"\u062A\u0645\u0627\u0645 \u0631\u0648\u0632",moreLinkText(t){return"\u0628\u06CC\u0634 \u0627\u0632 "+t},noEventsText:"\u0647\u06CC\u0686 \u0631\u0648\u06CC\u062F\u0627\u062F\u06CC \u0628\u0647 \u0646\u0645\u0627\u06CC\u0634"};var aO={code:"fi",week:{dow:1,doy:4},buttonText:{prev:"Edellinen",next:"Seuraava",today:"T\xE4n\xE4\xE4n",year:"Vuosi",month:"Kuukausi",week:"Viikko",day:"P\xE4iv\xE4",list:"Tapahtumat"},weekText:"Vk",allDayText:"Koko p\xE4iv\xE4",moreLinkText:"lis\xE4\xE4",noEventsText:"Ei n\xE4ytett\xE4vi\xE4 tapahtumia"};var sO={code:"fr",buttonText:{prev:"Pr\xE9c\xE9dent",next:"Suivant",today:"Aujourd'hui",year:"Ann\xE9e",month:"Mois",week:"Semaine",day:"Jour",list:"Mon planning"},weekText:"Sem.",allDayText:"Toute la journ\xE9e",moreLinkText:"en plus",noEventsText:"Aucun \xE9v\xE8nement \xE0 afficher"};var OO={code:"fr-ch",week:{dow:1,doy:4},buttonText:{prev:"Pr\xE9c\xE9dent",next:"Suivant",today:"Courant",year:"Ann\xE9e",month:"Mois",week:"Semaine",day:"Jour",list:"Mon planning"},weekText:"Sm",allDayText:"Toute la journ\xE9e",moreLinkText:"en plus",noEventsText:"Aucun \xE9v\xE8nement \xE0 afficher"};var lO={code:"fr",week:{dow:1,doy:4},buttonText:{prev:"Pr\xE9c\xE9dent",next:"Suivant",today:"Aujourd'hui",year:"Ann\xE9e",month:"Mois",week:"Semaine",day:"Jour",list:"Planning"},weekText:"Sem.",weekTextLong:"Semaine",allDayText:"Toute la journ\xE9e",moreLinkText:"en plus",noEventsText:"Aucun \xE9v\xE8nement \xE0 afficher"};var AO={code:"gl",week:{dow:1,doy:4},buttonText:{prev:"Ant",next:"Seg",today:"Hoxe",year:"Ano",month:"Mes",week:"Semana",day:"D\xEDa",list:"Axenda"},buttonHints:{prev:"$0 antes",next:"$0 seguinte",today(t){return t==="D\xEDa"?"Hoxe":(t==="Semana"?"Esta":"Este")+" "+t.toLocaleLowerCase()}},viewHint(t){return"Vista "+(t==="Semana"?"da":"do")+" "+t.toLocaleLowerCase()},weekText:"Sm",weekTextLong:"Semana",allDayText:"Todo o d\xEDa",moreLinkText:"m\xE1is",moreLinkHint(t){return`Amosar ${t} eventos m\xE1is`},noEventsText:"Non hai eventos para amosar",navLinkHint:"Ir ao $0",closeHint:"Pechar",timeHint:"A hora",eventHint:"Evento"};var dO={code:"he",direction:"rtl",buttonText:{prev:"\u05D4\u05E7\u05D5\u05D3\u05DD",next:"\u05D4\u05D1\u05D0",today:"\u05D4\u05D9\u05D5\u05DD",year:"\u05E9\u05E0\u05D4",month:"\u05D7\u05D5\u05D3\u05E9",week:"\u05E9\u05D1\u05D5\u05E2",day:"\u05D9\u05D5\u05DD",list:"\u05E1\u05D3\u05E8 \u05D9\u05D5\u05DD"},allDayText:"\u05DB\u05DC \u05D4\u05D9\u05D5\u05DD",moreLinkText:"\u05E0\u05D5\u05E1\u05E4\u05D9\u05DD",noEventsText:"\u05D0\u05D9\u05DF \u05D0\u05D9\u05E8\u05D5\u05E2\u05D9\u05DD \u05DC\u05D4\u05E6\u05D2\u05D4",weekText:"\u05E9\u05D1\u05D5\u05E2"};var uO={code:"hi",week:{dow:0,doy:6},buttonText:{prev:"\u092A\u093F\u091B\u0932\u093E",next:"\u0905\u0917\u0932\u093E",today:"\u0906\u091C",year:"\u0935\u0930\u094D\u0937",month:"\u092E\u0939\u0940\u0928\u093E",week:"\u0938\u092A\u094D\u0924\u093E\u0939",day:"\u0926\u093F\u0928",list:"\u0915\u093E\u0930\u094D\u092F\u0938\u0942\u091A\u0940"},weekText:"\u0939\u092B\u094D\u0924\u093E",allDayText:"\u0938\u092D\u0940 \u0926\u093F\u0928",moreLinkText(t){return"+\u0905\u0927\u093F\u0915 "+t},noEventsText:"\u0915\u094B\u0908 \u0918\u091F\u0928\u093E\u0913\u0902 \u0915\u094B \u092A\u094D\u0930\u0926\u0930\u094D\u0936\u093F\u0924 \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F"};var qO={code:"hr",week:{dow:1,doy:7},buttonText:{prev:"Prija\u0161nji",next:"Sljede\u0107i",today:"Danas",year:"Godina",month:"Mjesec",week:"Tjedan",day:"Dan",list:"Raspored"},weekText:"Tje",allDayText:"Cijeli dan",moreLinkText(t){return"+ jo\u0161 "+t},noEventsText:"Nema doga\u0111aja za prikaz"};var fO={code:"hu",week:{dow:1,doy:4},buttonText:{prev:"vissza",next:"el\u0151re",today:"ma",year:"\xC9v",month:"H\xF3nap",week:"H\xE9t",day:"Nap",list:"Lista"},weekText:"H\xE9t",allDayText:"Eg\xE9sz nap",moreLinkText:"tov\xE1bbi",noEventsText:"Nincs megjelen\xEDthet\u0151 esem\xE9ny"};var WO={code:"hy-am",week:{dow:1,doy:4},buttonText:{prev:"\u0546\u0561\u056D\u0578\u0580\u0564",next:"\u0540\u0561\u057B\u0578\u0580\u0564",today:"\u0531\u0575\u057D\u0585\u0580",year:"\u054F\u0561\u0580\u056B",month:"\u0531\u0574\u056B\u057D",week:"\u0547\u0561\u0562\u0561\u0569",day:"\u0555\u0580",list:"\u0555\u0580\u057E\u0561 \u0581\u0578\u0582\u0581\u0561\u056F"},weekText:"\u0547\u0561\u0562",allDayText:"\u0531\u0574\u0562\u0578\u0572\u057B \u0585\u0580",moreLinkText(t){return"+ \u0587\u057D "+t},noEventsText:"\u0532\u0561\u0581\u0561\u056F\u0561\u0575\u0578\u0582\u0574 \u0567 \u056B\u0580\u0561\u0564\u0561\u0580\u0571\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0568 \u0581\u0578\u0582\u0581\u0561\u0564\u0580\u0565\u056C\u0578\u0582"};var hO={code:"id",week:{dow:1,doy:7},buttonText:{prev:"mundur",next:"maju",today:"hari ini",year:"Tahun",month:"Bulan",week:"Minggu",day:"Hari",list:"Agenda"},weekText:"Mg",allDayText:"Sehari penuh",moreLinkText:"lebih",noEventsText:"Tidak ada acara untuk ditampilkan"};var RO={code:"is",week:{dow:1,doy:4},buttonText:{prev:"Fyrri",next:"N\xE6sti",today:"\xCD dag",year:"\xC1r",month:"M\xE1nu\xF0ur",week:"Vika",day:"Dagur",list:"Dagskr\xE1"},weekText:"Vika",allDayText:"Allan daginn",moreLinkText:"meira",noEventsText:"Engir vi\xF0bur\xF0ir til a\xF0 s\xFDna"};var mO={code:"it",week:{dow:1,doy:4},buttonText:{prev:"Prec",next:"Succ",today:"Oggi",year:"Anno",month:"Mese",week:"Settimana",day:"Giorno",list:"Agenda"},weekText:"Sm",allDayText:"Tutto il giorno",moreLinkText(t){return"+altri "+t},noEventsText:"Non ci sono eventi da visualizzare"};var gO={code:"ja",buttonText:{prev:"\u524D",next:"\u6B21",today:"\u4ECA\u65E5",year:"\u5E74",month:"\u6708",week:"\u9031",day:"\u65E5",list:"\u4E88\u5B9A\u30EA\u30B9\u30C8"},weekText:"\u9031",allDayText:"\u7D42\u65E5",moreLinkText(t){return"\u4ED6 "+t+" \u4EF6"},noEventsText:"\u8868\u793A\u3059\u308B\u4E88\u5B9A\u306F\u3042\u308A\u307E\u305B\u3093"};var LO={code:"ka",week:{dow:1,doy:7},buttonText:{prev:"\u10EC\u10D8\u10DC\u10D0",next:"\u10E8\u10D4\u10DB\u10D3\u10D4\u10D2\u10D8",today:"\u10D3\u10E6\u10D4\u10E1",year:"\u10EC\u10D4\u10DA\u10D8\u10EC\u10D0\u10D3\u10D8",month:"\u10D7\u10D5\u10D4",week:"\u10D9\u10D5\u10D8\u10E0\u10D0",day:"\u10D3\u10E6\u10D4",list:"\u10D3\u10E6\u10D8\u10E1 \u10EC\u10D4\u10E1\u10E0\u10D8\u10D2\u10D8"},weekText:"\u10D9\u10D5",allDayText:"\u10DB\u10D7\u10D4\u10DA\u10D8 \u10D3\u10E6\u10D4",moreLinkText(t){return"+ \u10D9\u10D8\u10D3\u10D4\u10D5 "+t},noEventsText:"\u10E6\u10DD\u10DC\u10D8\u10E1\u10EB\u10D8\u10D4\u10D1\u10D4\u10D1\u10D8 \u10D0\u10E0 \u10D0\u10E0\u10D8\u10E1"};var yO={code:"kk",week:{dow:1,doy:7},buttonText:{prev:"\u0410\u043B\u0434\u044B\u04A3\u0493\u044B",next:"\u041A\u0435\u043B\u0435\u0441\u0456",today:"\u0411\u04AF\u0433\u0456\u043D",year:"\u0416\u044B\u043B",month:"\u0410\u0439",week:"\u0410\u043F\u0442\u0430",day:"\u041A\u04AF\u043D",list:"\u041A\u04AF\u043D \u0442\u04D9\u0440\u0442\u0456\u0431\u0456"},weekText:"\u041D\u0435",allDayText:"\u041A\u04AF\u043D\u0456 \u0431\u043E\u0439\u044B",moreLinkText(t){return"+ \u0442\u0430\u0493\u044B "+t},noEventsText:"\u041A\u04E9\u0440\u0441\u0435\u0442\u0443 \u04AF\u0448\u0456\u043D \u043E\u049B\u0438\u0493\u0430\u043B\u0430\u0440 \u0436\u043E\u049B"};var vO={code:"km",week:{dow:1,doy:4},buttonText:{prev:"\u1798\u17BB\u1793",next:"\u1794\u1793\u17D2\u1791\u17B6\u1794\u17CB",today:"\u1790\u17D2\u1784\u17C3\u1793\u17C1\u17C7",year:"\u1786\u17D2\u1793\u17B6\u17C6",month:"\u1781\u17C2",week:"\u179F\u1794\u17D2\u178F\u17B6\u17A0\u17CD",day:"\u1790\u17D2\u1784\u17C3",list:"\u1794\u1789\u17D2\u1787\u17B8"},weekText:"\u179F\u1794\u17D2\u178F\u17B6\u17A0\u17CD",allDayText:"\u1796\u17C1\u1789\u1798\u17BD\u1799\u1790\u17D2\u1784\u17C3",moreLinkText:"\u1785\u17D2\u179A\u17BE\u1793\u1791\u17C0\u178F",noEventsText:"\u1782\u17D2\u1798\u17B6\u1793\u1796\u17D2\u179A\u17B9\u178F\u17D2\u178F\u17B7\u1780\u17B6\u179A\u178E\u17CD\u178F\u17D2\u179A\u17BC\u179C\u1794\u1784\u17D2\u17A0\u17B6\u1789"};var NO={code:"ko",buttonText:{prev:"\uC774\uC804\uB2EC",next:"\uB2E4\uC74C\uB2EC",today:"\uC624\uB298",year:"\uB144\uB3C4",month:"\uC6D4",week:"\uC8FC",day:"\uC77C",list:"\uC77C\uC815\uBAA9\uB85D"},weekText:"\uC8FC",allDayText:"\uC885\uC77C",moreLinkText:"\uAC1C",noEventsText:"\uC77C\uC815\uC774 \uC5C6\uC2B5\uB2C8\uB2E4"};var BO={code:"ku",week:{dow:6,doy:12},direction:"rtl",buttonText:{prev:"\u067E\u06CE\u0634\u062A\u0631",next:"\u062F\u0648\u0627\u062A\u0631",today:"\u0626\u06D5\u0645\u0695\u0648",year:"\u0633\u0627\u06B5",month:"\u0645\u0627\u0646\u06AF",week:"\u0647\u06D5\u0641\u062A\u06D5",day:"\u0695\u06C6\u0698",list:"\u0628\u06D5\u0631\u0646\u0627\u0645\u06D5"},weekText:"\u0647\u06D5\u0641\u062A\u06D5",allDayText:"\u0647\u06D5\u0645\u0648\u0648 \u0695\u06C6\u0698\u06D5\u06A9\u06D5",moreLinkText:"\u0632\u06CC\u0627\u062A\u0631",noEventsText:"\u0647\u06CC\u0686 \u0695\u0648\u0648\u062F\u0627\u0648\u06CE\u0643 \u0646\u06CC\u06D5"};var SO={code:"lb",week:{dow:1,doy:4},buttonText:{prev:"Zr\xE9ck",next:"Weider",today:"Haut",year:"Joer",month:"Mount",week:"Woch",day:"Dag",list:"Terminiwwersiicht"},weekText:"W",allDayText:"Ganzen Dag",moreLinkText:"m\xE9i",noEventsText:"Nee Evenementer ze affich\xE9ieren"};var TO={code:"lt",week:{dow:1,doy:4},buttonText:{prev:"Atgal",next:"Pirmyn",today:"\u0160iandien",year:"Metai",month:"M\u0117nuo",week:"Savait\u0117",day:"Diena",list:"Darbotvark\u0117"},weekText:"SAV",allDayText:"Vis\u0105 dien\u0105",moreLinkText:"daugiau",noEventsText:"N\u0117ra \u012Fvyki\u0173 rodyti"};var EO={code:"lv",week:{dow:1,doy:4},buttonText:{prev:"Iepr.",next:"N\u0101k.",today:"\u0160odien",year:"Gads",month:"M\u0113nesis",week:"Ned\u0113\u013Ca",day:"Diena",list:"Dienas k\u0101rt\u012Bba"},weekText:"Ned.",allDayText:"Visu dienu",moreLinkText(t){return"+v\u0113l "+t},noEventsText:"Nav notikumu"};var wO={code:"mk",buttonText:{prev:"\u043F\u0440\u0435\u0442\u0445\u043E\u0434\u043D\u043E",next:"\u0441\u043B\u0435\u0434\u043D\u043E",today:"\u0414\u0435\u043D\u0435\u0441",year:"\u0433\u043E\u0434\u0438\u043D\u0430",month:"\u041C\u0435\u0441\u0435\u0446",week:"\u041D\u0435\u0434\u0435\u043B\u0430",day:"\u0414\u0435\u043D",list:"\u0413\u0440\u0430\u0444\u0438\u043A"},weekText:"\u0421\u0435\u0434",allDayText:"\u0426\u0435\u043B \u0434\u0435\u043D",moreLinkText(t){return"+\u043F\u043E\u0432\u0435\u045C\u0435 "+t},noEventsText:"\u041D\u0435\u043C\u0430 \u043D\u0430\u0441\u0442\u0430\u043D\u0438 \u0437\u0430 \u043F\u0440\u0438\u043A\u0430\u0436\u0443\u0432\u0430\u045A\u0435"};var DO={code:"ms",week:{dow:1,doy:7},buttonText:{prev:"Sebelum",next:"Selepas",today:"hari ini",year:"Tahun",month:"Bulan",week:"Minggu",day:"Hari",list:"Agenda"},weekText:"Mg",allDayText:"Sepanjang hari",moreLinkText(t){return"masih ada "+t+" acara"},noEventsText:"Tiada peristiwa untuk dipaparkan"};var CO={code:"nb",week:{dow:1,doy:4},buttonText:{prev:"Forrige",next:"Neste",today:"I dag",year:"\xC5r",month:"M\xE5ned",week:"Uke",day:"Dag",list:"Agenda"},weekText:"Uke",weekTextLong:"Uke",allDayText:"Hele dagen",moreLinkText:"til",noEventsText:"Ingen hendelser \xE5 vise",buttonHints:{prev:"Forrige $0",next:"Neste $0",today:"N\xE5v\xE6rende $0"},viewHint:"$0 visning",navLinkHint:"G\xE5 til $0",moreLinkHint(t){return`Vis ${t} flere hendelse${t===1?"":"r"}`}};var XO={code:"ne",week:{dow:7,doy:1},buttonText:{prev:"\u0905\u0918\u093F\u0932\u094D\u0932\u094B",next:"\u0905\u0930\u094D\u0915\u094B",today:"\u0906\u091C",year:"\u0935\u0930\u094D\u0937",month:"\u092E\u0939\u093F\u0928\u093E",week:"\u0939\u092A\u094D\u0924\u093E",day:"\u0926\u093F\u0928",list:"\u0938\u0942\u091A\u0940"},weekText:"\u0939\u092A\u094D\u0924\u093E",allDayText:"\u0926\u093F\u0928\u092D\u0930\u093F",moreLinkText:"\u0925\u092A \u0932\u093F\u0902\u0915",noEventsText:"\u0926\u0947\u0916\u093E\u0909\u0928\u0915\u094B \u0932\u093E\u0917\u093F \u0915\u0941\u0928\u0948 \u0918\u091F\u0928\u093E\u0939\u0930\u0942 \u091B\u0948\u0928\u0928\u094D"};var xO={code:"nl",week:{dow:1,doy:4},buttonText:{prev:"Vorige",next:"Volgende",today:"Vandaag",year:"Jaar",month:"Maand",week:"Week",day:"Dag",list:"Agenda"},allDayText:"Hele dag",moreLinkText:"extra",noEventsText:"Geen evenementen om te laten zien"};var _O={code:"nn",week:{dow:1,doy:4},buttonText:{prev:"F\xF8rre",next:"Neste",today:"I dag",year:"\xC5r",month:"M\xE5nad",week:"Veke",day:"Dag",list:"Agenda"},weekText:"Veke",allDayText:"Heile dagen",moreLinkText:"til",noEventsText:"Ingen hendelser \xE5 vise"};var kO={code:"pl",week:{dow:1,doy:4},buttonText:{prev:"Poprzedni",next:"Nast\u0119pny",today:"Dzi\u015B",year:"Rok",month:"Miesi\u0105c",week:"Tydzie\u0144",day:"Dzie\u0144",list:"Plan dnia"},weekText:"Tydz",allDayText:"Ca\u0142y dzie\u0144",moreLinkText:"wi\u0119cej",noEventsText:"Brak wydarze\u0144 do wy\u015Bwietlenia"};var IO={code:"pt-br",buttonText:{prev:"Anterior",next:"Pr\xF3ximo",prevYear:"Ano anterior",nextYear:"Pr\xF3ximo ano",year:"Ano",today:"Hoje",month:"M\xEAs",week:"Semana",day:"Dia",list:"Lista"},buttonHints:{prev:"$0 Anterior",next:"Pr\xF3ximo $0",today(t){return t==="Dia"?"Hoje":(t==="Semana"?"Esta":"Este")+" "+t.toLocaleLowerCase()}},viewHint(t){return"Visualizar "+(t==="Semana"?"a":"o")+" "+t.toLocaleLowerCase()},weekText:"Sm",weekTextLong:"Semana",allDayText:"dia inteiro",moreLinkText(t){return"mais +"+t},moreLinkHint(t){return`Mostrar mais ${t} eventos`},noEventsText:"N\xE3o h\xE1 eventos para mostrar",navLinkHint:"Ir para $0",closeHint:"Fechar",timeHint:"A hora",eventHint:"Evento"};var PO={code:"pt",week:{dow:1,doy:4},buttonText:{prev:"Anterior",next:"Seguinte",today:"Hoje",year:"Ano",month:"M\xEAs",week:"Semana",day:"Dia",list:"Agenda"},weekText:"Sem",allDayText:"Todo o dia",moreLinkText:"mais",noEventsText:"N\xE3o h\xE1 eventos para mostrar"};var HO={code:"ro",week:{dow:1,doy:7},buttonText:{prev:"precedent\u0103",next:"urm\u0103toare",today:"Azi",year:"An",month:"Lun\u0103",week:"S\u0103pt\u0103m\xE2n\u0103",day:"Zi",list:"Agend\u0103"},weekText:"S\u0103pt",allDayText:"Toat\u0103 ziua",moreLinkText(t){return"+alte "+t},noEventsText:"Nu exist\u0103 evenimente de afi\u0219at"};var UO={code:"ru",week:{dow:1,doy:4},buttonText:{prev:"\u041F\u0440\u0435\u0434",next:"\u0421\u043B\u0435\u0434",today:"\u0421\u0435\u0433\u043E\u0434\u043D\u044F",year:"\u0413\u043E\u0434",month:"\u041C\u0435\u0441\u044F\u0446",week:"\u041D\u0435\u0434\u0435\u043B\u044F",day:"\u0414\u0435\u043D\u044C",list:"\u041F\u043E\u0432\u0435\u0441\u0442\u043A\u0430 \u0434\u043D\u044F"},weekText:"\u041D\u0435\u0434",allDayText:"\u0412\u0435\u0441\u044C \u0434\u0435\u043D\u044C",moreLinkText(t){return"+ \u0435\u0449\u0451 "+t},noEventsText:"\u041D\u0435\u0442 \u0441\u043E\u0431\u044B\u0442\u0438\u0439 \u0434\u043B\u044F \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F"};var jO={code:"si-lk",week:{dow:1,doy:4},buttonText:{prev:"\u0DB4\u0DD9\u0DBB",next:"\u0DB4\u0DC3\u0DD4",today:"\u0D85\u0DAF",year:"\u0D85\u0DC0\u0DD4\u0DBB\u0DD4\u0DAF\u0DD4",month:"\u0DB8\u0DCF\u0DC3\u0DBA",week:"\u0DC3\u0DAD\u0DD2\u0DBA",day:"\u0DAF\u0DC0\u0DC3",list:"\u0DBD\u0DD0\u0DBA\u0DD2\u0DC3\u0DCA\u0DAD\u0DD4\u0DC0"},weekText:"\u0DC3\u0DAD\u0DD2",allDayText:"\u0DC3\u0DD2\u0DBA\u0DBD\u0DD4",moreLinkText:"\u0DAD\u0DC0\u0DAD\u0DCA",noEventsText:"\u0DB8\u0DD4\u0D9A\u0DD4\u0DAD\u0DCA \u0DB1\u0DD0\u0DAD"};var FO={code:"sk",week:{dow:1,doy:4},buttonText:{prev:"Predch\xE1dzaj\xFAci",next:"Nasleduj\xFAci",today:"Dnes",year:"Rok",month:"Mesiac",week:"T\xFD\u017Ede\u0148",day:"De\u0148",list:"Rozvrh"},weekText:"Ty",allDayText:"Cel\xFD de\u0148",moreLinkText(t){return"+\u010Fal\u0161ie: "+t},noEventsText:"\u017Diadne akcie na zobrazenie"};var GO={code:"sl",week:{dow:1,doy:7},buttonText:{prev:"Prej\u0161nji",next:"Naslednji",today:"Trenutni",year:"Leto",month:"Mesec",week:"Teden",day:"Dan",list:"Dnevni red"},weekText:"Teden",allDayText:"Ves dan",moreLinkText:"ve\u010D",noEventsText:"Ni dogodkov za prikaz"};var YO={code:"sm",buttonText:{prev:"Talu ai",next:"Mulimuli atu",today:"Aso nei",year:"Tausaga",month:"Masina",week:"Vaiaso",day:"Aso",list:"Faasologa"},weekText:"Vaiaso",allDayText:"Aso atoa",moreLinkText:"sili atu",noEventsText:"Leai ni mea na tutupu"};var VO={code:"sq",week:{dow:1,doy:4},buttonText:{prev:"mbrapa",next:"P\xEBrpara",today:"Sot",year:"Viti",month:"Muaj",week:"Jav\xEB",day:"Dit\xEB",list:"List\xEB"},weekText:"Ja",allDayText:"Gjith\xEB dit\xEBn",moreLinkText(t){return"+m\xEB tep\xEBr "+t},noEventsText:"Nuk ka evente p\xEBr t\xEB shfaqur"};var KO={code:"sr-cyrl",week:{dow:1,doy:7},buttonText:{prev:"\u041F\u0440\u0435\u0442\u0445\u043E\u0434\u043D\u0430",next:"\u0441\u043B\u0435\u0434\u0435\u045B\u0438",today:"\u0414\u0430\u043D\u0430\u0441",year:"\u0413\u043E\u0434\u0438\u043D\u0430",month:"\u041C\u0435\u0441\u0435\u0446",week:"\u041D\u0435\u0434\u0435\u0459\u0430",day:"\u0414\u0430\u043D",list:"\u041F\u043B\u0430\u043D\u0435\u0440"},weekText:"\u0421\u0435\u0434",allDayText:"\u0426\u0435\u043E \u0434\u0430\u043D",moreLinkText(t){return"+ \u0458\u043E\u0448 "+t},noEventsText:"\u041D\u0435\u043C\u0430 \u0434\u043E\u0433\u0430\u0452\u0430\u0458\u0430 \u0437\u0430 \u043F\u0440\u0438\u043A\u0430\u0437"};var QO={code:"sr",week:{dow:1,doy:7},buttonText:{prev:"Prethodna",next:"Sledec\u0301i",today:"Danas",year:"Godina",month:"M\u0435s\u0435c",week:"N\u0435d\u0435lja",day:"Dan",list:"Plan\u0435r"},weekText:"Sed",allDayText:"C\u0435o dan",moreLinkText(t){return"+ jo\u0161 "+t},noEventsText:"N\u0435ma doga\u0111aja za prikaz"};var ZO={code:"sv",week:{dow:1,doy:4},buttonText:{prev:"F\xF6rra",next:"N\xE4sta",today:"Idag",year:"\xC5r",month:"M\xE5nad",week:"Vecka",day:"Dag",list:"Program"},buttonHints:{prev(t){return`F\xF6reg\xE5ende ${t.toLocaleLowerCase()}`},next(t){return`N\xE4sta ${t.toLocaleLowerCase()}`},today(t){return(t==="Program"?"Detta":"Denna")+" "+t.toLocaleLowerCase()}},viewHint:"$0 vy",navLinkHint:"G\xE5 till $0",moreLinkHint(t){return`Visa ytterligare ${t} h\xE4ndelse${t===1?"":"r"}`},weekText:"v.",weekTextLong:"Vecka",allDayText:"Heldag",moreLinkText:"till",noEventsText:"Inga h\xE4ndelser att visa",closeHint:"St\xE4ng",timeHint:"Klockan",eventHint:"H\xE4ndelse"};var JO={code:"ta-in",week:{dow:1,doy:4},buttonText:{prev:"\u0BAE\u0BC1\u0BA8\u0BCD\u0BA4\u0BC8\u0BAF",next:"\u0B85\u0B9F\u0BC1\u0BA4\u0BCD\u0BA4\u0BA4\u0BC1",today:"\u0B87\u0BA9\u0BCD\u0BB1\u0BC1",year:"\u0B86\u0BA3\u0BCD\u0B9F\u0BC1",month:"\u0BAE\u0BBE\u0BA4\u0BAE\u0BCD",week:"\u0BB5\u0BBE\u0BB0\u0BAE\u0BCD",day:"\u0BA8\u0BBE\u0BB3\u0BCD",list:"\u0BA4\u0BBF\u0BA9\u0B9A\u0BB0\u0BBF \u0B85\u0B9F\u0BCD\u0B9F\u0BB5\u0BA3\u0BC8"},weekText:"\u0BB5\u0BBE\u0BB0\u0BAE\u0BCD",allDayText:"\u0BA8\u0BBE\u0BB3\u0BCD \u0BAE\u0BC1\u0BB4\u0BC1\u0BB5\u0BA4\u0BC1\u0BAE\u0BCD",moreLinkText(t){return"+ \u0BAE\u0BC7\u0BB2\u0BC1\u0BAE\u0BCD "+t},noEventsText:"\u0B95\u0BBE\u0BA3\u0BCD\u0BAA\u0BBF\u0B95\u0BCD\u0B95 \u0BA8\u0BBF\u0B95\u0BB4\u0BCD\u0BB5\u0BC1\u0B95\u0BB3\u0BCD \u0B87\u0BB2\u0BCD\u0BB2\u0BC8"};var $O={code:"th",week:{dow:1,doy:4},buttonText:{prev:"\u0E01\u0E48\u0E2D\u0E19\u0E2B\u0E19\u0E49\u0E32",next:"\u0E16\u0E31\u0E14\u0E44\u0E1B",prevYear:"\u0E1B\u0E35\u0E01\u0E48\u0E2D\u0E19\u0E2B\u0E19\u0E49\u0E32",nextYear:"\u0E1B\u0E35\u0E16\u0E31\u0E14\u0E44\u0E1B",year:"\u0E1B\u0E35",today:"\u0E27\u0E31\u0E19\u0E19\u0E35\u0E49",month:"\u0E40\u0E14\u0E37\u0E2D\u0E19",week:"\u0E2A\u0E31\u0E1B\u0E14\u0E32\u0E2B\u0E4C",day:"\u0E27\u0E31\u0E19",list:"\u0E01\u0E33\u0E2B\u0E19\u0E14\u0E01\u0E32\u0E23"},weekText:"\u0E2A\u0E31\u0E1B\u0E14\u0E32\u0E2B\u0E4C",allDayText:"\u0E15\u0E25\u0E2D\u0E14\u0E27\u0E31\u0E19",moreLinkText:"\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E40\u0E15\u0E34\u0E21",noEventsText:"\u0E44\u0E21\u0E48\u0E21\u0E35\u0E01\u0E34\u0E08\u0E01\u0E23\u0E23\u0E21\u0E17\u0E35\u0E48\u0E08\u0E30\u0E41\u0E2A\u0E14\u0E07"};var e3={code:"tr",week:{dow:1,doy:7},buttonText:{prev:"geri",next:"ileri",today:"bug\xFCn",year:"Y\u0131l",month:"Ay",week:"Hafta",day:"G\xFCn",list:"Ajanda"},weekText:"Hf",allDayText:"T\xFCm g\xFCn",moreLinkText:"daha fazla",noEventsText:"G\xF6sterilecek etkinlik yok"};var t3={code:"ug",buttonText:{prev:"\u0626\u0627\u0644\u062F\u0649\u0646\u0642\u0649",next:"\u0643\u06D0\u064A\u0649\u0646\u0643\u0649",today:"\u0628\u06C8\u06AF\u06C8\u0646",year:"\u064A\u0649\u0644",month:"\u0626\u0627\u064A",week:"\u06BE\u06D5\u067E\u062A\u06D5",day:"\u0643\u06C8\u0646",list:"\u0643\u06C8\u0646\u062A\u06D5\u0631\u062A\u0649\u067E"},allDayText:"\u067E\u06C8\u062A\u06C8\u0646 \u0643\u06C8\u0646"};var o3={code:"uk",week:{dow:1,doy:7},buttonText:{prev:"\u041F\u043E\u043F\u0435\u0440\u0435\u0434\u043D\u0456\u0439",next:"\u0434\u0430\u043B\u0456",today:"\u0421\u044C\u043E\u0433\u043E\u0434\u043D\u0456",year:"\u0440\u0456\u043A",month:"\u041C\u0456\u0441\u044F\u0446\u044C",week:"\u0422\u0438\u0436\u0434\u0435\u043D\u044C",day:"\u0414\u0435\u043D\u044C",list:"\u041F\u043E\u0440\u044F\u0434\u043E\u043A \u0434\u0435\u043D\u043D\u0438\u0439"},weekText:"\u0422\u0438\u0436",allDayText:"\u0423\u0432\u0435\u0441\u044C \u0434\u0435\u043D\u044C",moreLinkText(t){return"+\u0449\u0435 "+t+"..."},noEventsText:"\u041D\u0435\u043C\u0430\u0454 \u043F\u043E\u0434\u0456\u0439 \u0434\u043B\u044F \u0432\u0456\u0434\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u043D\u044F"};var M3={code:"uz-cy",week:{dow:1,doy:4},buttonText:{prev:"\u041E\u043B\u0438\u043D",next:"\u041A\u0435\u0439\u0438\u043D",today:"\u0411\u0443\u0433\u0443\u043D",month:"\u041E\u0439",week:"\u04B2\u0430\u0444\u0442\u0430",day:"\u041A\u0443\u043D",list:"\u041A\u0443\u043D \u0442\u0430\u0440\u0442\u0438\u0431\u0438"},weekText:"\u04B2\u0430\u0444\u0442\u0430",allDayText:"\u041A\u0443\u043D \u0431\u045E\u0439\u0438\u0447\u0430",moreLinkText(t){return"+ \u044F\u043D\u0430 "+t},noEventsText:"\u041A\u045E\u0440\u0441\u0430\u0442\u0438\u0448 \u0443\u0447\u0443\u043D \u0432\u043E\u049B\u0435\u0430\u043B\u0430\u0440 \u0439\u045E\u049B"};var b3={code:"uz",week:{dow:1,doy:4},buttonText:{prev:"Oldingi",next:"Keyingi",today:"Bugun",year:"Yil",month:"Oy",week:"Xafta",day:"Kun",list:"Kun tartibi"},allDayText:"Kun bo'yi",moreLinkText(t){return"+ yana "+t},noEventsText:"Ko'rsatish uchun voqealar yo'q"};var p3={code:"vi",week:{dow:1,doy:4},buttonText:{prev:"Tr\u01B0\u1EDBc",next:"Ti\u1EBFp",today:"H\xF4m nay",year:"N\u0103m",month:"Th\xE1ng",week:"Tu\xE2\u0300n",day:"Ng\xE0y",list:"L\u1ECBch bi\u1EC3u"},weekText:"Tu",allDayText:"C\u1EA3 ng\xE0y",moreLinkText(t){return"+ th\xEAm "+t},noEventsText:"Kh\xF4ng c\xF3 s\u1EF1 ki\u1EC7n \u0111\u1EC3 hi\u1EC3n th\u1ECB"};var z3={code:"zh-cn",week:{dow:1,doy:4},buttonText:{prev:"\u4E0A\u6708",next:"\u4E0B\u6708",today:"\u4ECA\u5929",year:"\u5E74",month:"\u6708",week:"\u5468",day:"\u65E5",list:"\u65E5\u7A0B"},weekText:"\u5468",allDayText:"\u5168\u5929",moreLinkText(t){return"\u53E6\u5916 "+t+" \u4E2A"},noEventsText:"\u6CA1\u6709\u4E8B\u4EF6\u663E\u793A"};var n3={code:"zh-tw",buttonText:{prev:"\u4E0A\u500B",next:"\u4E0B\u500B",today:"\u4ECA\u5929",year:"\u5E74",month:"\u6708",week:"\u9031",day:"\u5929",list:"\u6D3B\u52D5\u5217\u8868"},weekText:"\u9031",allDayText:"\u6574\u5929",moreLinkText:"\u986F\u793A\u66F4\u591A",noEventsText:"\u6C92\u6709\u4EFB\u4F55\u6D3B\u52D5"};var r3=[xs,_s,ks,Is,Ps,Hs,Us,js,Fs,Gs,Ys,Vs,Ks,Qs,Zs,Js,$s,eO,tO,oO,MO,bO,pO,zO,nO,rO,cO,iO,aO,sO,OO,lO,AO,dO,uO,qO,fO,WO,hO,RO,mO,gO,LO,yO,vO,NO,BO,SO,TO,EO,wO,DO,CO,XO,xO,_O,kO,IO,PO,HO,UO,jO,FO,GO,YO,VO,KO,QO,ZO,JO,$O,e3,t3,o3,M3,b3,p3,z3,n3];function y6({locale:t,plugins:e,schedulerLicenseKey:o,timeZone:M,config:b,editable:p,selectable:n,eventClassNames:r,eventContent:i,eventDidMount:a,eventWillUnmount:s}){return{init(){let u=new ob(this.$el,{headerToolbar:{left:"prev,next today",center:"title",right:"dayGridMonth,dayGridWeek,dayGridDay"},plugins:e.map(A=>v6[A]),locale:t,schedulerLicenseKey:o,timeZone:M,editable:p,selectable:n,...b,locales:r3,eventClassNames:r,eventContent:i,eventDidMount:a,eventWillUnmount:s,events:(A,q,W)=>{this.$wire.fetchEvents({start:A.startStr,end:A.endStr,timezone:A.timeZone}).then(q).catch(W)},eventClick:({event:A,jsEvent:q})=>{if(q.preventDefault(),A.url){let W=h=>h.which>1||h.altKey||h.ctrlKey||h.metaKey||h.shiftKey;return window.open(A.url,A.extendedProps.shouldOpenUrlInNewTab||W(q)?"_blank":"_self")}this.$wire.onEventClick(A)},eventDrop:async({event:A,oldEvent:q,relatedEvents:W,delta:h,oldResource:m,newResource:y,revert:N})=>{let w=await this.$wire.onEventDrop(A,q,W,h,m,y);typeof w=="boolean"&&w&&N()},eventResize:async({event:A,oldEvent:q,relatedEvents:W,startDelta:h,endDelta:m,revert:y})=>{let N=await this.$wire.onEventResize(A,q,W,h,m);typeof N=="boolean"&&N&&y()},dateClick:({dateStr:A,allDay:q,view:W,resource:h})=>{n&&this.$wire.onDateSelect(A,null,q,W,h)},select:({startStr:A,endStr:q,allDay:W,view:h,resource:m})=>{n&&this.$wire.onDateSelect(A,q,W,h,m)}});u.render(),window.addEventListener("filament-fullcalendar--refresh",()=>u.refetchEvents())}}}var v6={interaction:$i,dayGrid:lb,timeGrid:ub,list:sa,multiMonth:Oa,scrollGrid:Wa,timeline:Lb,adaptive:va,resource:Ie,resourceDayGrid:Xa,resourceTimeline:ka,resourceTimeGrid:Ia,rrule:vs,moment:Ss,momentTimezone:Xs};export{y6 as default}; +/*! Bundled license information: + +moment/moment.js: + (*! moment.js *) + (*! version : 2.29.4 *) + (*! authors : Tim Wood, Iskren Chernev, Moment.js contributors *) + (*! license : MIT *) + (*! momentjs.com *) + +moment-timezone/moment-timezone.js: + (*! moment-timezone.js *) + (*! version : 0.5.43 *) + (*! Copyright (c) JS Foundation and other contributors *) + (*! license : MIT *) + (*! github.com/moment/moment-timezone *) +*/ diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000..9e60f97 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: diff --git a/resources/css/app.css b/resources/css/app.css new file mode 100644 index 0000000..b5c61c9 --- /dev/null +++ b/resources/css/app.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/resources/js/app.js b/resources/js/app.js new file mode 100644 index 0000000..e59d6a0 --- /dev/null +++ b/resources/js/app.js @@ -0,0 +1 @@ +import './bootstrap'; diff --git a/resources/js/bootstrap.js b/resources/js/bootstrap.js new file mode 100644 index 0000000..5f1390b --- /dev/null +++ b/resources/js/bootstrap.js @@ -0,0 +1,4 @@ +import axios from 'axios'; +window.axios = axios; + +window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; diff --git a/resources/views/filament/widgets/calendar-widget.blade.php b/resources/views/filament/widgets/calendar-widget.blade.php new file mode 100644 index 0000000..ccf0ec1 --- /dev/null +++ b/resources/views/filament/widgets/calendar-widget.blade.php @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/views/forms/components/flatpickr.blade.php b/resources/views/forms/components/flatpickr.blade.php new file mode 100644 index 0000000..a58a184 --- /dev/null +++ b/resources/views/forms/components/flatpickr.blade.php @@ -0,0 +1,50 @@ +@php + $id = $getId(); + $isDisabled = $isDisabled(); + $prefixIcon = $getPrefixIcon(); + $statePath = $getStatePath(); + $config =$getConfig(); + $attribs = [ + "disabled" => $isDisabled, + "themeAsset" => $getThemeAsset(), + 'mode' => $getMode(), + ]; +@endphp + + +
+ + + +
+
diff --git a/routes/console.php b/routes/console.php new file mode 100644 index 0000000..b3d9bbc --- /dev/null +++ b/routes/console.php @@ -0,0 +1 @@ +seed(PermissionSeeder::class) + ->asUser('manager'); +}); + +it('clicking the save button will save the dragged event data', function () { + + $constraint = Constraint::factory()->create(); + + $event = [ + 'allDay' => false, + 'title' => $constraint->constraint_type, + 'start' => '2024-09-03 12:00:00', + 'end' => '2024-09-05 12:00:00', + 'id' => $constraint->id, + 'display' => 'block', + 'backgroundColor' => $constraint->constraint_color, + 'borderColor' => $constraint->constraint_color, + 'textColor' => 'black', + ]; + $oldEvent = [ + 'allDay' => false, + 'title' => $constraint->constraint_type, + 'start' => $constraint->start_date, + 'end' => $constraint->end_date, + 'id' => $constraint->id, + 'display' => 'block', + 'backgroundColor' => $constraint->constraint_color, + 'borderColor' => $constraint->constraint_color, + 'textColor' => 'black', + ]; + $delta = [ + 'years' => 0, + 'months' => 0, + 'days' => 7, + 'milliseconds' => 0, + ]; + + livewire(CalendarWidget::class, [ + 'model' => Constraint::class, + 'type' => 'my', + ]) + ->call('onEventDrop', $event, $oldEvent, [], $delta, null, null) + ->callMountedAction(['save' => true]); + + $this->assertDatabaseHas(Constraint::class, [ + 'id' => $constraint->id, + 'start_date' => '2024-09-03 12:00:00', + 'end_date' => '2024-09-05 12:00:00', + ]); +}); + +it('clicking the cancel button will refresh the calendar', function () { + + $constraint = Constraint::factory()->create(); + + $event = [ + 'allDay' => false, + 'title' => $constraint->constraint_type, + 'start' => '2024-09-03 12:00:00', + 'end' => '2024-09-05 12:00:00', + 'id' => $constraint->id, + 'display' => 'block', + 'backgroundColor' => $constraint->constraint_color, + 'borderColor' => $constraint->constraint_color, + 'textColor' => 'black', + ]; + $oldEvent = [ + 'allDay' => false, + 'title' => $constraint->constraint_type, + 'start' => $constraint->start_date, + 'end' => $constraint->end_date, + 'id' => $constraint->id, + 'display' => 'block', + 'backgroundColor' => $constraint->constraint_color, + 'borderColor' => $constraint->constraint_color, + 'textColor' => 'black', + ]; + $delta = [ + 'years' => 0, + 'months' => 0, + 'days' => 7, + 'milliseconds' => 0, + ]; + + livewire(CalendarWidget::class, [ + 'model' => Constraint::class, + 'type' => 'my', + ]) + ->call('onEventDrop', $event, $oldEvent, [], $delta, null, null) + ->callMountedAction(['cancel' => true]) + ->assertDispatched('filament-fullcalendar--refresh'); +}); + +it('should list events by the user events', function () { + $user = User::factory()->create(); + + $this->asUser('soldier', $user); + + Shift::factory()->create(['soldier_id' => User::factory()->create()->userable_id, 'task_id' => Task::factory()->create()->id]); + Shift::factory()->count(5)->create(['soldier_id' => $user->userable_id, 'task_id' => Task::factory()->create()->id]); + + $calendar = livewire(CalendarWidget::class, [ + 'model' => Shift::class, + 'keys' => collect([ + 'id', + 'parallel_weight', + 'start_date', + 'end_date', + 'task_color', + ]), + 'type' => 'my', + ]) + ->call('fetchEvents', ['start' => '2024-09-01 00:00:00', 'end' => '2024-10-12 00:00:00', 'timezone' => 'Asia\/Jerusalem']); + + expect($calendar->effects['returns'][0])->toHaveCount(count: 5); +}); + +it('should list events by the commanders soldiers events', function () { + $user = User::factory()->create(); + + $team = Team::factory()->create(['commander_id' => $user->userable_id]); + + $this->asUser('team-commander', $user); + + $user1 = User::factory()->create(['userable_id' => Soldier::factory()->create(['team_id' => $team->id])->id]); + $user2 = User::factory()->create(['userable_id' => Soldier::factory()->create(['team_id' => $team->id])->id]); + + Shift::factory()->create(['soldier_id' => $user1->userable_id, 'task_id' => Task::factory()->create()->id]); + Shift::factory()->create(['soldier_id' => $user2->userable_id, 'task_id' => Task::factory()->create()->id]); + Shift::factory()->create(['soldier_id' => User::factory()->create()->userable_id, 'task_id' => Task::factory()->create()->id]); + Shift::factory()->count(5)->create(['soldier_id' => $user->userable_id, 'task_id' => Task::factory()->create()->id]); + + $calendar = livewire(CalendarWidget::class, [ + 'model' => Shift::class, + 'keys' => collect([ + 'id', + 'parallel_weight', + 'start_date', + 'end_date', + 'task_color', + ]), + 'type' => 'my_soldiers', + ]) + ->call('fetchEvents', ['start' => '2024-09-01 00:00:00', 'end' => '2024-10-12 00:00:00', 'timezone' => 'Asia\/Jerusalem']); + + expect($calendar->effects['returns'][0])->toHaveCount(count: 2); +}); + +it('prevent create\edit the soldiers events', function () { + + livewire(CalendarWidget::class, [ + 'model' => Constraint::class, + 'type' => 'my_soldiers', + ]); + expect(Saade\FilamentFullCalendar\FilamentFullCalendarPlugin::get()->isSelectable())->toBeFalse(); + expect(Saade\FilamentFullCalendar\FilamentFullCalendarPlugin::get()->isEditable())->toBeFalse(); +}); diff --git a/tests/Feature/ConstraintTest.php b/tests/Feature/ConstraintTest.php new file mode 100644 index 0000000..91fd15e --- /dev/null +++ b/tests/Feature/ConstraintTest.php @@ -0,0 +1,99 @@ +seed(PermissionSeeder::class) + ->asUser('manager'); +}); + +it('should return the correct available options based on start date and used counts', function () { + $get = function ($key) { + return $key == 'start_date' ? '2023-04-01 00:00:00' : '2023-04-01 23:59:00'; + }; + + $class = new ReflectionClass(Constraint::class); + $availableOptionsMethod = $class->getMethod('availableOptions'); + $availableOptionsMethod->setAccessible(true); + + $result = $availableOptionsMethod->invoke(null, $get); + + expect($result)->toBeArray(); + expect($result)->toContain('Medical', 'Vacation', 'School', 'Not task', 'Low priority not task', 'Not evening'); +}); + +it('should return the correct used counts for current month', function () { + $startDate = '2023-04-01 00:00:00'; + $endDate = '2023-04-30 23:59:59'; + $currentUserId = 1; + DB::shouldReceive('table->where->where->whereBetween->count') + ->andReturnUsing(function () { + return 1; + }); + $usedCounts = collect(ConstraintType::cases())->map(function ($enum) use ($currentUserId, $startDate, $endDate) { + return [ + $enum->value => DB::table('constraints') + ->where('soldier_id', $currentUserId) + ->where('constraint_type', $enum->value) + ->whereBetween('start_date', [ + Carbon::parse($startDate)->startOfMonth(), + Carbon::parse($endDate)->endOfMonth(), + ]) + ->count(), + ]; + })->collapse()->toArray(); + + expect($usedCounts)->toBeArray(); + + expect($usedCounts)->toBeArray(); + array_map(function ($count) { + expect($count)->toBeInt(); + }, $usedCounts); +}); + +it('should return the correct dates for "Not evening" and "Not Thursday evening" constraints', function () { + $get = function ($key) { + return $key == 'start_date' ? '2023-04-01 00:00:00' : '2023-04-01 23:59:00'; + }; + + $class = new ReflectionClass(Constraint::class); + $getDateForConstraint = $class->getMethod('getDateForConstraint'); + $getDateForConstraint->setAccessible(true); + + $result = $getDateForConstraint->invoke(null, 'Not evening', $get); + expect($result['start_date']->toDateTimeString())->toBe('2023-04-01 18:00:00'); + expect($result['end_date']->toDateTimeString())->toBe('2023-04-01 23:59:00'); +}); + +it('should return the correct dates for "Not weekend" and "Low priority not weekend" constraints', function () { + $get = function ($key) { + return $key == 'start_date' ? '2024-09-05 00:00:00' : '2024-09-05 00:00:00'; + }; + + $class = new ReflectionClass(Constraint::class); + $getDateForConstraint = $class->getMethod('getDateForConstraint'); + $getDateForConstraint->setAccessible(true); + + $result = $getDateForConstraint->invoke(null, 'Not weekend', $get); + expect($result['start_date']->toDateTimeString())->toBe('2024-09-05 00:00:00'); + expect($result['end_date']->toDateTimeString())->toBe('2024-09-08 00:00:00'); +}); + +it('should return the correct dates for "Medical", "Vacation", "School", "Not task", and "Low priority not task" constraints', function () { + $get = function ($key) { + return $key == 'start_date' ? '2023-04-01 00:00:00' : '2023-04-01 23:59:59'; + }; + + $class = new ReflectionClass(Constraint::class); + $getDateForConstraint = $class->getMethod('getDateForConstraint'); + $getDateForConstraint->setAccessible(true); + + $result = $getDateForConstraint->invoke(null, 'Medical', $get); + expect($result['start_date'])->toBe('2023-04-01 00:00:00'); + expect($result['end_date'])->toBe('2023-04-01 23:59:59'); +}); diff --git a/tests/Feature/CreateDepartmentTest.php b/tests/Feature/CreateDepartmentTest.php new file mode 100644 index 0000000..a902490 --- /dev/null +++ b/tests/Feature/CreateDepartmentTest.php @@ -0,0 +1,31 @@ +seed(PermissionSeeder::class) + ->asUser('manager'); +}); + +it('should assign department-commander role to the commander', function () { + $user1 = User::factory()->create(); + + livewire(CreateDepartment::class) + ->set('data.name', 'department1') + ->set('data.commander_id', $user1->userable_id) + ->call('create') + ->assertHasNoFormErrors(); + + $this->assertDatabaseHas(Department::class, [ + 'name' => 'department1', + 'commander_id' => $user1->userable_id, + ]); + + expect($user1->getRoleNames()->contains('department-commander'))->toBe(true); +}); diff --git a/tests/Feature/CreateSoliderTest.php b/tests/Feature/CreateSoliderTest.php new file mode 100644 index 0000000..711de7c --- /dev/null +++ b/tests/Feature/CreateSoliderTest.php @@ -0,0 +1,33 @@ +seed(PermissionSeeder::class) + ->asUser('manager'); +}); + +it('returns an array with first_name and last_name', function () { + + DB::shouldReceive('table->where->where->pluck') + ->andReturn(collect(['first_name' => 'John', 'last_name' => 'Doe'])); + + Notification::fake(); + + $classInstance = new CreateSoldier; + + $classInstance->data = [ + 'user' => [ + 'first_name' => 'John', + 'last_name' => 'Doe', + ], + ]; + + $classInstance->beforeCreate(); + + $this->assertIsArray($classInstance->data); +}); diff --git a/tests/Feature/CreateTeamTest.php b/tests/Feature/CreateTeamTest.php new file mode 100644 index 0000000..6d5defc --- /dev/null +++ b/tests/Feature/CreateTeamTest.php @@ -0,0 +1,36 @@ +seed(PermissionSeeder::class) + ->asUser('manager'); +}); + +it('should assign team-commander role to the commander', function () { + $user1 = User::factory()->create(); + + $department = Department::factory()->create(); + + livewire(CreateTeam::class) + ->set('data.name', 'team1') + ->set('data.commander_id', $user1->userable_id) + ->set('data.department_id', $department->id) + ->call('create') + ->assertHasNoFormErrors(); + + $this->assertDatabaseHas(Team::class, [ + 'name' => 'team1', + 'commander_id' => $user1->userable_id, + 'department_id' => $department->id, + ]); + + expect($user1->getRoleNames()->contains('team-commander'))->toBe(true); +}); diff --git a/tests/Feature/ExampleTest.php b/tests/Feature/ExampleTest.php new file mode 100644 index 0000000..e969bce --- /dev/null +++ b/tests/Feature/ExampleTest.php @@ -0,0 +1,7 @@ +get('/') + ->assertRedirect('/login'); +}); diff --git a/tests/Feature/HierarchyTest.php b/tests/Feature/HierarchyTest.php new file mode 100644 index 0000000..52a4a17 --- /dev/null +++ b/tests/Feature/HierarchyTest.php @@ -0,0 +1,39 @@ +create([ + 'userable_id' => Soldier::factory()->create()->id, + ]); + $soldiers = Soldier::factory()->count(10)->create([ + 'team_id' => Team::factory()->create([ + 'department_id' => Department::factory()->create([ + 'commander_id' => $department_commander_user->userable_id, + ])->id, + ])->id, + ]); + $newSoldiers = Soldier::factory()->count(10)->create([]); + $this + ->seed(PermissionSeeder::class) + ->asUser('department-commander', $department_commander_user) + ->livewire(ListSoldiers::class) + ->assertCanSeeTableRecords($soldiers) + ->assertCanNotSeeTableRecords($newSoldiers); +}); + +it('allows manager to view all teams', function () { + $manager = User::factory()->create([]); + $teams = Team::factory()->count(10)->create([]); + $this + ->seed(PermissionSeeder::class) + ->asUser('manager', $manager) + ->livewire(ListTeams::class) + ->assertCanSeeTableRecords($teams); +}); diff --git a/tests/Feature/ListDepartmentTest.php b/tests/Feature/ListDepartmentTest.php new file mode 100644 index 0000000..e47ecae --- /dev/null +++ b/tests/Feature/ListDepartmentTest.php @@ -0,0 +1,41 @@ +seed(PermissionSeeder::class) + ->asUser('manager'); +}); + +it('should return departments by commander_id', function () { + $department1 = Department::factory()->create([ + 'commander_id' => User::factory()->create([ + 'userable_id' => Soldier::factory()->create()->id, + ])->userable_id, + ]); + + Department::factory()->create([ + 'commander_id' => User::factory()->create([ + 'userable_id' => Soldier::factory()->create()->id, + ])->userable_id, + ]); + + Livewire::withQueryParams(['commander_id' => $department1->commander_id]) + ->test(ListDepartments::class) + ->assertCountTableRecords(1); +}); + +it('should return department by department_id', function () { + $department1 = Department::factory()->create(); + Department::factory()->count(4)->create(); + + Livewire::withQueryParams(['department_id' => $department1->id]) + ->test(ListDepartments::class) + ->assertCountTableRecords(1); +}); diff --git a/tests/Feature/ListSoldierTest.php b/tests/Feature/ListSoldierTest.php new file mode 100644 index 0000000..9646122 --- /dev/null +++ b/tests/Feature/ListSoldierTest.php @@ -0,0 +1,26 @@ +seed(PermissionSeeder::class) + ->asUser('manager'); + + $team = Team::factory()->create(['id' => 100]); + $soldier = Soldier::factory()->create(['team_id' => $team->id]); + User::factory()->create(['userable_id' => $soldier->id]); + + $team = Team::factory()->create(['id' => 101]); + $soldier = Soldier::factory()->create(['team_id' => $team->id]); + User::factory()->create(['userable_id' => $soldier->id]); + + Livewire::withQueryParams(['team_id' => 100]) + ->test(ListSoldiers::class) + ->assertCountTableRecords(1); +}); diff --git a/tests/Feature/ListTeamTest.php b/tests/Feature/ListTeamTest.php new file mode 100644 index 0000000..d82ea60 --- /dev/null +++ b/tests/Feature/ListTeamTest.php @@ -0,0 +1,86 @@ +seed(PermissionSeeder::class) + ->asUser('manager'); +}); + +it('should return teams by commander_id', function () { + $team1 = Team::factory()->create([ + 'commander_id' => User::factory()->create([ + 'userable_id' => Soldier::factory()->create()->id, + ])->userable_id, + ]); + + Team::factory()->create([ + 'commander_id' => User::factory()->create([ + 'userable_id' => Soldier::factory()->create()->id, + ])->userable_id, + ]); + + Livewire::withQueryParams(['commander_id' => $team1->commander_id]) + ->test(ListTeams::class) + ->assertCountTableRecords(1); +}); + +it('clicking on the View members button will redirect to soldiers routing', function () { + $team = Team::factory()->create(); + + Livewire::test(ListTeams::class) + ->assertTableActionExists('View members') + ->callTableAction('View members'); + $this->get(SoldierResource::getUrl('index', ['team_id' => $team->id]))->assertSuccessful(); +}); + +it('clicking on the members button will open form to attach member to the team', function () { + + $team = Team::factory()->create(); + + $user1 = User::factory()->create([ + 'userable_id' => Soldier::factory()->create()->id, + ]); + + $user2 = User::factory()->create([ + 'userable_id' => Soldier::factory()->create()->id, + ]); + + Livewire::test(ListTeams::class) + ->mountTableAction('members', $team) + + ->setTableActionData([ + 'members' => [$user1->userable_id, $user2->userable_id], + ]) + ->callMountedTableAction(); + + $this->assertDatabaseHas('soldiers', [ + 'id' => $user1->userable_id, + 'team_id' => $team->id, + ]); + $this->assertDatabaseHas('soldiers', [ + 'id' => $user2->userable_id, + 'team_id' => $team->id, + ]); +}); + +it('should return teams by department_id', function () { + $department = Department::factory()->create(); + $team1 = Team::factory()->create([ + 'department_id' => $department->id, + ]); + + Team::factory()->count(4)->create(); + + Livewire::withQueryParams(['department_id' => $team1->department_id]) + ->test(ListTeams::class) + ->assertCountTableRecords(1); +}); diff --git a/tests/Feature/LoginTest.php b/tests/Feature/LoginTest.php new file mode 100644 index 0000000..daf8388 --- /dev/null +++ b/tests/Feature/LoginTest.php @@ -0,0 +1,32 @@ +get('/') + ->assertRedirect('/login'); +}); + +it('should return an error if data is missing', function () { + Livewire::test(Login::class) + ->fillForm([ + 'first_name' => '', + 'last_name' => 'last_name', + 'password' => '1234567', + ]) + ->call('authenticate') + ->assertHasFormErrors(['first_name' => ['required']]); +}); + +it('cannot authenticate with incorrect credentials', function () { + Livewire::test(Login::class) + ->fillForm([ + 'first_name' => 'first_name', + 'last_name' => 987, + 'password' => '1234567', + ]) + ->call('authenticate') + ->assertHasFormErrors(); +}); diff --git a/tests/Feature/PoliciesTest.php b/tests/Feature/PoliciesTest.php new file mode 100644 index 0000000..1c28556 --- /dev/null +++ b/tests/Feature/PoliciesTest.php @@ -0,0 +1,19 @@ +seed(PermissionSeeder::class) + ->asUser('manager') + ->get('/soldiers') + ->assertStatus(200); +}); + +it('does not allow team commander to view teams', function () { + $this + ->seed(PermissionSeeder::class) + ->asUser('team-commander') + ->get('/teams') + ->assertStatus(403); +}); diff --git a/tests/Feature/ReccurenceEventsTest.php b/tests/Feature/ReccurenceEventsTest.php new file mode 100644 index 0000000..7b0da0d --- /dev/null +++ b/tests/Feature/ReccurenceEventsTest.php @@ -0,0 +1,91 @@ +recurrenceEvents = new ReccurenceEvents; + $this->now = Carbon::now()->addMonth(); +}); + +it('should create shifts for daily recurrence', function () { + $task = Task::factory()->create([ + 'name' => 'Daily Task', + 'recurrence' => ['type' => 'Daily'], + 'start_hour' => '09:00:00', + 'duration' => 1, + ]); + $this->recurrenceEvents->recurrenceTask(); + $this->assertDatabaseHas('shifts', [ + 'task_id' => $task->id, + 'start_date' => Carbon::parse($this->now->startOfMonth()->format('Y-m-d').' '.$task['start_hour']), + 'end_date' => Carbon::parse($this->now->startOfMonth()->format('Y-m-d').' '.$task['start_hour'])->addHours($task['duration']), + + ]); +}); + +it('should create shifts for weekly recurrence', function () { + $task = Task::factory()->create([ + 'name' => 'Weekly Task', + 'recurrence' => ['type' => 'Daily'], + 'start_hour' => '10:00:00', + 'duration' => 2, + ]); + $this->recurrenceEvents->recurrenceTask(); + $this->assertDatabaseHas('shifts', [ + 'task_id' => $task->id, + 'start_date' => Carbon::parse($this->now->startOfMonth()->format('Y-m-d').' '.$task['start_hour']), + 'end_date' => Carbon::parse($this->now->startOfMonth()->format('Y-m-d').' '.$task['start_hour'])->addHours($task['duration']), + ]); +}); + +it('should create shifts for monthly recurrence', function () { + $task = Task::factory()->create([ + 'name' => 'Monthly Task', + 'recurrence' => ['type' => 'Monthly', 'dates_in_month' => 5], + 'start_hour' => '11:00:00', + 'duration' => 2, + ]); + $this->recurrenceEvents->recurrenceTask(); + $this->assertDatabaseHas('shifts', [ + 'task_id' => $task->id, + 'start_date' => Carbon::create($this->now->year, $this->now->month, 5)->format('Y-m-d').' '.$task['start_hour'], + ]); + $this->assertDatabaseCount('shifts', 1); +}); + +it('should create shifts for custom recurrence', function () { + $task = Task::factory()->create([ + 'name' => 'Custom Task', + 'recurrence' => ['type' => 'Custom', 'dates_in_month' => [10, 20]], + 'start_hour' => '12:00:00', + 'duration' => 2, + ]); + + $this->recurrenceEvents->recurrenceTask(); + $this->assertDatabaseHas('shifts', [ + 'task_id' => $task->id, + 'start_date' => Carbon::create($this->now->year, $this->now->month, 10)->format('Y-m-d').' '.$task['start_hour'], + ]); + $this->assertDatabaseCount('shifts', 2); +}); + +it('should create shifts for OneTime task', function () { + $task = Task::factory()->create([ + 'name' => 'OneTime Task', + 'recurrence' => ['type' => 'OneTime', 'start_date' => '2022-12-01', 'end_date' => '2022-12-05'], + 'start_hour' => '13:00:00', + 'duration' => 1, + ]); + + $this->recurrenceEvents->oneTimeTask($task); + + $this->assertDatabaseHas('shifts', [ + 'task_id' => $task->id, + 'start_date' => Carbon::parse('2022-12-01'.' '.$task['start_hour']), + 'end_date' => Carbon::parse('2022-12-01'.' '.$task['start_hour'])->addHours($task['duration']), + ]); +}); diff --git a/tests/Feature/ReplicateSoldierTest.php b/tests/Feature/ReplicateSoldierTest.php new file mode 100644 index 0000000..e6288ff --- /dev/null +++ b/tests/Feature/ReplicateSoldierTest.php @@ -0,0 +1,15 @@ +create(); + $this + ->seed(PermissionSeeder::class) + ->asUser('manager') + ->livewire(ListSoldiers::class) + ->callTableAction('replicate', $soldier) + ->assertRedirect(route('filament.app.resources.soldiers.edit', ['record' => Soldier::latest('id')->first()->id])); +}); diff --git a/tests/Feature/ReservistsTest.php b/tests/Feature/ReservistsTest.php new file mode 100644 index 0000000..beb1959 --- /dev/null +++ b/tests/Feature/ReservistsTest.php @@ -0,0 +1,46 @@ +seed(PermissionSeeder::class) + ->asUser('manager'); +}); + +it('hiding the update of reserve dates if the soldier is not a reserve', function () { + $soldier = Soldier::factory()->create(['is_reservist' => false]); + livewire(ListSoldiers::class) + ->assertTableActionHidden('update reserve days', $soldier); +}); + +it('hidden `reserve_dates` if not a reservist', function () { + livewire(CreateSoldier::class) + ->fillForm(['is_reservist' => false]) + ->assertFormFieldIsHidden('reserve_dates'); +}); + +it('can filter soldiers by `is_reservist`', function () { + $soldier = Soldier::factory()->count(5)->create(['is_reservist' => false]); + $reservist = Soldier::factory()->count(5)->create(['is_reservist' => true]); + + livewire(ListSoldiers::class) + ->assertCanSeeTableRecords($soldier) + ->filterTable('reservist', true) + ->assertCanSeeTableRecords($reservist) + ->assertCanNotSeeTableRecords($soldier); +}); + +it('if you edit from a reserve soldier to a simple soldier, the reserve days are updated to null', function () { + $soldier = Soldier::factory()->create(['is_reservist' => true, 'reserve_dates' => ['2023-04-01', '2023-04-05', '2023-04-19']]); + livewire(ListSoldiers::class) + ->callTableAction('edit', $soldier, ['is_reservist' => false]); + $this->assertDatabaseHas('soldiers', [ + 'reserve_dates' => null, + ]); +}); diff --git a/tests/Feature/SoldiersTest.php b/tests/Feature/SoldiersTest.php new file mode 100644 index 0000000..6c8730c --- /dev/null +++ b/tests/Feature/SoldiersTest.php @@ -0,0 +1,13 @@ +create(); + $user = User::factory()->create([ + 'userable_id' => $soldier->id, + ]); + $soldier->delete(); + $this->assertModelMissing($user); +}); diff --git a/tests/Pest.php b/tests/Pest.php new file mode 100644 index 0000000..7a9ea81 --- /dev/null +++ b/tests/Pest.php @@ -0,0 +1,6 @@ +in('Feature'); diff --git a/tests/TestCase.php b/tests/TestCase.php new file mode 100644 index 0000000..896fc2c --- /dev/null +++ b/tests/TestCase.php @@ -0,0 +1,19 @@ +actingAs(isset($user) ? $user->assignRole($role) : User::factory()->create()->assignRole($role)); + + return $this; + } +} diff --git a/tests/Unit/ExampleTest.php b/tests/Unit/ExampleTest.php new file mode 100644 index 0000000..44a4f33 --- /dev/null +++ b/tests/Unit/ExampleTest.php @@ -0,0 +1,5 @@ +toBeTrue(); +}); diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000..421b569 --- /dev/null +++ b/vite.config.js @@ -0,0 +1,11 @@ +import { defineConfig } from 'vite'; +import laravel from 'laravel-vite-plugin'; + +export default defineConfig({ + plugins: [ + laravel({ + input: ['resources/css/app.css', 'resources/js/app.js'], + refresh: true, + }), + ], +}); From 6a15e03eaa350fa31b62777a3ca9cf1599c7bb38 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 22 Sep 2024 12:42:36 +0300 Subject: [PATCH 002/259] push to deploy --- app/Models/User.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/Models/User.php b/app/Models/User.php index 08e8f9b..2236a6b 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -38,14 +38,17 @@ public function userable(): MorphTo public function displayName(): Attribute { - return Attribute::get(fn () => $this->last_name.', '.$this->first_name); + return Attribute::get(fn() => $this->last_name . ', ' . $this->first_name); } public function getFilamentName(): string { return $this->displayName; } - + public function viewAny(User $user): bool + { + return $user->hasRole('manager'); + } public function canAccessPanel(Panel $panel): bool { return true; From 81b1f9aa46cc94ba68fe53f9828ef28eb9adac35 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 22 Sep 2024 12:55:13 +0300 Subject: [PATCH 003/259] push to deploy --- app/Models/User.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app/Models/User.php b/app/Models/User.php index 2236a6b..aa7b299 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -10,10 +10,10 @@ use Illuminate\Notifications\Notifiable; use Spatie\Permission\Traits\HasPermissions; use Spatie\Permission\Traits\HasRoles; +use Filament\Models\Contracts\FilamentUser; use Filament\Panel; - -class User extends Authenticatable implements HasName +class User extends Authenticatable implements HasName,FilamentUser { use HasFactory, HasPermissions, HasRoles, Notifiable; @@ -38,13 +38,14 @@ public function userable(): MorphTo public function displayName(): Attribute { - return Attribute::get(fn() => $this->last_name . ', ' . $this->first_name); + return Attribute::get(fn () => $this->last_name.', '.$this->first_name); } public function getFilamentName(): string { return $this->displayName; } + public function viewAny(User $user): bool { return $user->hasRole('manager'); From 3dddfebd484192869f547ee480ccd011a3857868 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Mon, 30 Sep 2024 14:46:35 +0300 Subject: [PATCH 004/259] deploy after pull from dev --- .github/workflows/php-build-and-deploy.yml | 2 +- Dockerfile | 1 + app/Enums/RecurrenceType.php | 10 +- app/Filament/Auth/Login.php | 8 +- app/Filament/Clusters/Constraints.php | 10 + app/Filament/Clusters/Shifts.php | 10 + app/Filters/NumberFilter.php | 43 +-- app/Http/Middleware/SetLocale.php | 20 ++ app/Livewire/SetLocale.php | 24 ++ app/Models/Constraint.php | 7 +- app/Models/Shift.php | 14 +- app/Providers/AppServiceProvider.php | 7 + app/Providers/FilamentServiceProvider.php | 9 +- app/Resources/ConstraintResource.php | 10 + app/Resources/DepartmentResource.php | 59 ++-- .../Pages/CreateDepartment.php | 9 +- app/Resources/MyConstraintResource.php | 10 + app/Resources/MyShiftResource.php | 10 + app/Resources/ProfileResource.php | 77 +++-- .../ProfileResource/Pages/EditProfile.php | 5 + .../ProfileResource/Pages/ListProfiles.php | 10 + app/Resources/ShiftResource.php | 10 + app/Resources/SoldierResource.php | 125 +++++--- .../SoldierResource/Pages/CreateSoldier.php | 4 + app/Resources/TaskResource.php | 217 +++++++++++--- .../TaskResource/Pages/CreateTask.php | 67 +---- .../TaskResource/Pages/ListTasks.php | 2 +- app/Resources/TeamResource.php | 98 ++++--- .../TeamResource/Pages/CreateTeam.php | 10 +- common/get_users.php | 17 ++ config/app.php | 5 +- lang/he.json | 113 +++++++ lang/he/http-statuses.php | 84 ++++++ lang/he/validation.php | 275 ++++++++++++++++++ lang/vendor/filament-tables/he/table.php | 20 ++ resources/views/livewire/set-locale.blade.php | 13 + 36 files changed, 1128 insertions(+), 287 deletions(-) create mode 100644 app/Http/Middleware/SetLocale.php create mode 100644 app/Livewire/SetLocale.php create mode 100644 common/get_users.php create mode 100644 lang/he.json create mode 100644 lang/he/http-statuses.php create mode 100644 lang/he/validation.php create mode 100644 lang/vendor/filament-tables/he/table.php create mode 100644 resources/views/livewire/set-locale.blade.php diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 4966132..87d03f8 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/newspaceMali + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/newspaceMali2 flavor: | latest=false tags: | diff --git a/Dockerfile b/Dockerfile index 0d7c343..1bf5804 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,6 +16,7 @@ COPY --chown=${user}:${user} /artisan artisan COPY .env.example .env COPY /php.ini "${PHP_INI_DIR}/php.ini" + RUN apt-get update \ && apt-get satisfy -y --no-install-recommends \ "curl (>=7.88)" \ diff --git a/app/Enums/RecurrenceType.php b/app/Enums/RecurrenceType.php index 0fc2d09..42cf67f 100644 --- a/app/Enums/RecurrenceType.php +++ b/app/Enums/RecurrenceType.php @@ -10,8 +10,14 @@ enum RecurrenceType: string case CUSTOM = 'Custom'; case ONETIME = 'OneTime'; - public function getLabel(): ?string + public function getLabel(): string { - return $this->name; + return match ($this) { + self::DAILY => __('Daily'), + self::WEEKLY => __('Weekly'), + self::MONTHLY => __('Monthly'), + self::CUSTOM => __('Custom'), + self::ONETIME => __('OneTime'), + }; } } diff --git a/app/Filament/Auth/Login.php b/app/Filament/Auth/Login.php index 4c8b590..ba295fd 100644 --- a/app/Filament/Auth/Login.php +++ b/app/Filament/Auth/Login.php @@ -14,14 +14,14 @@ public function form(Form $form): Form return $form ->schema([ TextInput::make('first_name') - ->label('First name') + ->label(__('First name')) ->required() ->autofocus(), - TextInput::make('last_name') - ->label('Last name') + TextInput::make(('last_name')) + ->label(__('Last name')) ->required(), TextInput::make('password') - ->label('Personal number') + ->label(__('Personal number')) ->password() ->revealable(filament()->arePasswordsRevealable()) ->length(7) diff --git a/app/Filament/Clusters/Constraints.php b/app/Filament/Clusters/Constraints.php index 050a384..0482838 100644 --- a/app/Filament/Clusters/Constraints.php +++ b/app/Filament/Clusters/Constraints.php @@ -9,4 +9,14 @@ class Constraints extends Cluster protected static ?string $navigationIcon = 'heroicon-o-calendar-days'; protected static ?int $navigationSort = 3; + + public static function getNavigationLabel(): string + { + return __('Constraints'); + } + + public static function getClusterBreadcrumb(): string + { + return __('Constraints'); + } } diff --git a/app/Filament/Clusters/Shifts.php b/app/Filament/Clusters/Shifts.php index 2331091..4d6b925 100644 --- a/app/Filament/Clusters/Shifts.php +++ b/app/Filament/Clusters/Shifts.php @@ -9,4 +9,14 @@ class Shifts extends Cluster protected static ?string $navigationIcon = 'heroicon-o-calendar'; protected static ?int $navigationSort = 2; + + public static function getNavigationLabel(): string + { + return __('Shifts'); + } + + public static function getClusterBreadcrumb(): string + { + return __('Shifts'); + } } diff --git a/app/Filters/NumberFilter.php b/app/Filters/NumberFilter.php index 762a677..471e0f6 100644 --- a/app/Filters/NumberFilter.php +++ b/app/Filters/NumberFilter.php @@ -2,7 +2,10 @@ namespace App\Filters; -use Filament\Forms; +use Filament\Forms\Components\Fieldset; +use Filament\Forms\Components\Grid; +use Filament\Forms\Components\Select; +use Filament\Forms\Components\TextInput; use Filament\Forms\Get; use Filament\Tables\Filters\Filter; use Filament\Tables\Filters\Indicator; @@ -15,55 +18,55 @@ protected function setUp(): void parent::setup(); $this->form([ - Forms\Components\Fieldset::make($this->getlabel()) + Fieldset::make(__($this->getlabel())) ->schema([ - Forms\Components\Select::make('range_condition') + Select::make('range_condition') ->hiddenLabel() - ->placeholder('Select condition') + ->placeholder(__('Select condition')) ->live() ->options([ - 'equal' => 'equal', - 'not_equal' => 'not_equal', - 'between' => 'between', - 'greater_than' => 'greater_than', - 'greater_than_equal' => 'greater_than_equal', - 'less_than' => 'less_than', - 'less_than_equal' => 'less_than_equal', + 'equal' => __('Equal'), + 'not_equal' => __('Not equal'), + 'between' => __('Between'), + 'greater_than' => __('Greater than'), + 'greater_than_equal' => __('Greater than equal'), + 'less_than' => __('Less than'), + 'less_than_equal' => __('Less than equal'), ]), - Forms\Components\TextInput::make('range_equal') + TextInput::make('range_equal') ->hiddenLabel() ->numeric() ->visible(fn (Get $get): bool => $get('range_condition') === 'equal'), - Forms\Components\TextInput::make('range_not_equal') + TextInput::make('range_not_equal') ->hiddenLabel() ->numeric() ->visible(fn (Get $get): bool => $get('range_condition') === 'not_equal'), - Forms\Components\Grid::make([ + Grid::make([ 'default' => 1, 'sm' => 2, ]) ->schema([ - Forms\Components\TextInput::make('range_between_from') + TextInput::make('range_between_from') ->hiddenLabel() ->numeric(), - Forms\Components\TextInput::make('range_between_to') + TextInput::make('range_between_to') ->hiddenLabel() ->numeric(), ]) ->visible(fn (Get $get): bool => $get('range_condition') === 'between'), - Forms\Components\TextInput::make('range_greater_than') + TextInput::make('range_greater_than') ->hiddenLabel() ->numeric() ->visible(fn (Get $get): bool => $get('range_condition') === 'greater_than'), - Forms\Components\TextInput::make('range_greater_than_equal') + TextInput::make('range_greater_than_equal') ->hiddenLabel() ->numeric() ->visible(fn (Get $get): bool => $get('range_condition') === 'greater_than_equal'), - Forms\Components\TextInput::make('range_less_than') + TextInput::make('range_less_than') ->hiddenLabel() ->numeric() ->visible(fn (Get $get): bool => $get('range_condition') === 'less_than'), - Forms\Components\TextInput::make('range_less_than_equal') + TextInput::make('range_less_than_equal') ->hiddenLabel() ->numeric() ->visible(fn (Get $get): bool => $get('range_condition') === 'less_than_equal'), diff --git a/app/Http/Middleware/SetLocale.php b/app/Http/Middleware/SetLocale.php new file mode 100644 index 0000000..8d8260b --- /dev/null +++ b/app/Http/Middleware/SetLocale.php @@ -0,0 +1,20 @@ +cookie('user-language'); + + if ($language) { + app()->setLocale($language); + } + + return $next($request); + } +} diff --git a/app/Livewire/SetLocale.php b/app/Livewire/SetLocale.php new file mode 100644 index 0000000..21f6a70 --- /dev/null +++ b/app/Livewire/SetLocale.php @@ -0,0 +1,24 @@ +put('locale', $locale); + cookie()->queue(cookie()->forever('user-language', $locale)); + + return redirect(request()->header('Referer')); + } + + public function render() + { + return view('livewire.set-locale')->with([ + 'languages' => ['he' => 'עברית', 'en' => 'English'], + 'locale' => app()->getLocale(), + ]); + } +} diff --git a/app/Models/Constraint.php b/app/Models/Constraint.php index d0971d2..86548d1 100644 --- a/app/Models/Constraint.php +++ b/app/Models/Constraint.php @@ -8,7 +8,7 @@ use Filament\Forms\Components\Grid; use Filament\Forms\Components\Hidden; use Filament\Forms\Components\Placeholder; -use Filament\Forms\Components\Select; +use Filament\Forms\Components\ToggleButtons; use Filament\Forms\Get; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; @@ -41,11 +41,12 @@ public static function getSchema(): array Placeholder::make('') ->content(content: fn (Constraint $constraint) => $constraint->soldier_name) ->inlineLabel(), - Select::make('constraint_type') + ToggleButtons::make('constraint_type') ->required() - ->label('Constraint Name') + ->label(__('Constraint Name')) ->reactive() ->live() + ->inline() ->options(fn (Get $get) => self::availableOptions($get)) ->afterStateUpdated(fn (callable $set, $state, Get $get) => self::updateDates($set, $state, $get)), Hidden::make('start_date')->required(), diff --git a/app/Models/Shift.php b/app/Models/Shift.php index 1d768c6..934cd38 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -4,6 +4,7 @@ use Filament\Forms\Components\DateTimePicker; use Filament\Forms\Components\Placeholder; +use Filament\Forms\Components\Section; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; @@ -42,11 +43,14 @@ public function getTaskColorAttribute() public static function getSchema(): array { return [ - Placeholder::make('') - ->content(content: fn (Shift $shift) => $shift->task_name) - ->inlineLabel(), - DateTimePicker::make('start_date')->required(), - DateTimePicker::make('end_date')->required(), + Section::make([ + Placeholder::make('') + ->content(content: fn (Shift $shift) => $shift->task_name) + ->inlineLabel(), + DateTimePicker::make('start_date')->required(), + DateTimePicker::make('end_date')->required(), + ]), + ]; } } diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index dc43ef3..17f5f9a 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -2,6 +2,9 @@ namespace App\Providers; +use Filament\Support\Facades\FilamentView; +use Filament\View\PanelsRenderHook; +use Illuminate\Support\Facades\Blade; use Illuminate\Support\ServiceProvider; use Illuminate\Support\Facades\URL; @@ -18,5 +21,9 @@ public function boot(): void if (config('app.env') !== 'local') { URL::forceScheme('https'); } + FilamentView::registerRenderHook( + PanelsRenderHook::USER_MENU_BEFORE, + fn (): string => Blade::render('@livewire(\'set-locale\')'), + ); } } diff --git a/app/Providers/FilamentServiceProvider.php b/app/Providers/FilamentServiceProvider.php index ace3f70..04824e6 100644 --- a/app/Providers/FilamentServiceProvider.php +++ b/app/Providers/FilamentServiceProvider.php @@ -3,6 +3,9 @@ namespace App\Providers; use App\Filament\Auth\Login; +use App\Filament\Widgets\CalendarWidget; +use App\Http\Middleware\SetLocale; +use App\Resources\ProfileResource\Pages\ListProfiles; use Filament\Http\Middleware\Authenticate; use Filament\Http\Middleware\DisableBladeIconComponents; use Filament\Http\Middleware\DispatchServingFilamentEvent; @@ -42,6 +45,8 @@ public function panel(Panel $panel): Panel SubstituteBindings::class, DisableBladeIconComponents::class, DispatchServingFilamentEvent::class, + SetLocale::class, + ]) ->navigationGroups([]) ->passwordReset() @@ -56,11 +61,11 @@ public function panel(Panel $panel): Panel ->config([]), ]) ->pages([ - \App\Resources\ProfileResource\Pages\ListProfiles::class, + ListProfiles::class, ]) ->viteTheme('resources/css/app.css') ->widgets([ - \App\Filament\Widgets\CalendarWidget::class, + CalendarWidget::class, ]); } diff --git a/app/Resources/ConstraintResource.php b/app/Resources/ConstraintResource.php index 6ea32d6..f316d51 100644 --- a/app/Resources/ConstraintResource.php +++ b/app/Resources/ConstraintResource.php @@ -20,6 +20,16 @@ class ConstraintResource extends Resource protected static ?string $navigationIcon = 'heroicon-o-calendar-days'; + public static function getModelLabel(): string + { + return __('My Soldiers Constraint'); + } + + public static function getPluralModelLabel(): string + { + return __('My Soldiers Constraints'); + } + public static function canAccess(): bool { return current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) ? true : false; diff --git a/app/Resources/DepartmentResource.php b/app/Resources/DepartmentResource.php index cdc3423..81c3a33 100644 --- a/app/Resources/DepartmentResource.php +++ b/app/Resources/DepartmentResource.php @@ -6,13 +6,17 @@ use App\Models\Team; use App\Models\User; use App\Resources\DepartmentResource\Pages; +use Filament\Forms\Components\Section; use Filament\Forms\Components\Select; use Filament\Forms\Components\TextInput; use Filament\Forms\Form; use Filament\Resources\Resource; -use Filament\Tables; use Filament\Tables\Actions\Action; use Filament\Tables\Actions\ActionGroup; +use Filament\Tables\Actions\BulkActionGroup; +use Filament\Tables\Actions\DeleteAction; +use Filament\Tables\Actions\DeleteBulkAction; +use Filament\Tables\Actions\EditAction; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; @@ -24,22 +28,38 @@ class DepartmentResource extends Resource protected static ?string $navigationIcon = 'heroicon-o-user-group'; + public static function getModelLabel(): string + { + return __('Department'); + } + + public static function getPluralModelLabel(): string + { + return __('Departments'); + } + public static function form(Form $form): Form { return $form ->schema([ - TextInput::make('name') - ->required(), - Select::make('commander_id') - ->relationship('commander', 'id') - ->options( - fn () => Cache::remember('users', 30 * 60, function () { - return User::all(); - })->mapWithKeys(function ($user) { - return [$user->userable_id => $user->displayName]; - }) - ) - ->searchable(), + Section::make([ + TextInput::make('name') + ->label(__('Name')) + ->required(), + Select::make('commander_id') + ->label(__('Commander')) + + ->relationship('commander', 'id') + ->options( + fn () => Cache::remember('users', 30 * 60, function () { + return User::all(); + })->mapWithKeys(function ($user) { + return [$user->userable_id => $user->displayName]; + }) + ) + ->searchable(), + ])->columns(2), + ]); } @@ -48,13 +68,14 @@ public static function table(Table $table): Table return $table ->columns([ TextColumn::make('name') + ->label(__('Name')) ->searchable() ->sortable(), TextColumn::make('commander.user') ->formatStateUsing(function ($state) { return $state->last_name.', '.$state->first_name; }) - ->label('Commander') + ->label(__(key: 'Commander')) ->searchable() ->sortable(), ]) @@ -72,20 +93,24 @@ public static function table(Table $table): Table ->actions([ ActionGroup::make([ Action::make('teams') - ->label('Add team') + ->label(__('Add team')) ->color('primary') ->icon('heroicon-o-users') ->url(fn (Department $record): string => route('filament.app.resources.teams.create', ['department_id' => $record->id])), Action::make('View teams') + ->label(__('View teams')) ->color('success') ->icon('heroicon-o-users') ->badge(fn ($record) => Team::where('department_id', $record->id)->count()) ->url(fn (Department $record): string => route('filament.app.resources.teams.index', ['department_id' => $record->id])), - Tables\Actions\EditAction::make(), - Tables\Actions\DeleteAction::make(), + EditAction::make(), + DeleteAction::make(), ]), ]) ->bulkActions([ + BulkActionGroup::make([ + DeleteBulkAction::make(), + ]), ]); } diff --git a/app/Resources/DepartmentResource/Pages/CreateDepartment.php b/app/Resources/DepartmentResource/Pages/CreateDepartment.php index 61f6c67..fe86adf 100644 --- a/app/Resources/DepartmentResource/Pages/CreateDepartment.php +++ b/app/Resources/DepartmentResource/Pages/CreateDepartment.php @@ -27,11 +27,11 @@ protected function beforeCreate(): void $this->departments = Department::where('commander_id', $this->data['commander_id'])->get(); if ($this->teams->isNotEmpty() || $this->departments->isNotEmpty()) { Notification::make() - ->title('Save department') + ->title(__('Save department')) ->persistent() - ->body('The commander you selected is already registered as a commander. His selection will leave the '.($this->teams->isNotEmpty() ? 'team' : 'department').' without a commander. Are you sure?') + ->body(__('The commander you selected is already registered as a commander. His selection will leave his soldiers without a commander. Are you sure?')) ->actions([ - Action::make('view '.($this->teams->isNotEmpty() ? 'team' : 'department')) + Action::make($this->teams->isNotEmpty() ? __('View team') : __('View department')) ->button() ->url( fn () => $this->teams->isNotEmpty() ? @@ -40,9 +40,10 @@ protected function beforeCreate(): void ), Action::make('confirm') + ->label(__('Confirm')) ->button() ->emit('confirmCreate'), - Action::make('cancel') + Action::make(__('Cancel')) ->button() ->close(), ]) diff --git a/app/Resources/MyConstraintResource.php b/app/Resources/MyConstraintResource.php index 9e6c327..731d112 100644 --- a/app/Resources/MyConstraintResource.php +++ b/app/Resources/MyConstraintResource.php @@ -20,6 +20,16 @@ class MyConstraintResource extends Resource protected static ?string $navigationIcon = 'heroicon-o-calendar-days'; + public static function getModelLabel(): string + { + return __('My Constraint'); + } + + public static function getPluralModelLabel(): string + { + return __('My Constraints'); + } + public static function canCreate(): bool { return false; diff --git a/app/Resources/MyShiftResource.php b/app/Resources/MyShiftResource.php index 46ddd94..a4af10d 100644 --- a/app/Resources/MyShiftResource.php +++ b/app/Resources/MyShiftResource.php @@ -20,6 +20,16 @@ class MyShiftResource extends Resource protected static ?string $navigationIcon = 'heroicon-o-calendar'; + public static function getModelLabel(): string + { + return __('My Shift'); + } + + public static function getPluralModelLabel(): string + { + return __('My Shifts'); + } + public static function table(Table $table): Table { return $table->paginated(false); diff --git a/app/Resources/ProfileResource.php b/app/Resources/ProfileResource.php index ec3384a..d184060 100644 --- a/app/Resources/ProfileResource.php +++ b/app/Resources/ProfileResource.php @@ -5,17 +5,20 @@ use App\Models\Soldier; use App\Models\Task; use App\Resources\ProfileResource\Pages; -use Filament\Forms\Components\Checkbox; use Filament\Forms\Components\DatePicker; use Filament\Forms\Components\Fieldset; +use Filament\Forms\Components\Section; use Filament\Forms\Components\Select; use Filament\Forms\Components\TextInput; +use Filament\Forms\Components\Toggle; use Filament\Forms\Form; use Filament\Resources\Resource; -use Filament\Tables; +use Filament\Support\Enums\FontWeight; +use Filament\Tables\Actions\EditAction; use Filament\Tables\Columns\Layout\Split; use Filament\Tables\Columns\Layout\Stack; use Filament\Tables\Columns\TextColumn; +use Filament\Tables\Columns\TextColumn\TextColumnSize; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; @@ -36,25 +39,28 @@ public static function form(Form $form): Form { return $form ->schema([ - Fieldset::make('') + Section::make([]) ->schema([ - Fieldset::make('Personal Information') + Fieldset::make(__('Personal Information')) ->relationship('user') ->schema([ - TextInput::make('first_name') - ->required(), - TextInput::make('last_name') - ->required(), + TextInput::make('first_name')->label(__('First name'))->required(), + TextInput::make('last_name')->label(__('Last name'))->required(), ]), - Checkbox::make('is_permanent'), - DatePicker::make('enlist_date') - ->seconds(false), - Checkbox::make('has_exemption'), - Checkbox::make('is_trainee'), - Checkbox::make('is_mabat'), - Select::make('qualifications') - ->placeholder('select qualification') - ->options(Task::all()->pluck('name', 'name')), + Section::make([ + Select::make('qualifications') + ->label(__('Qualifications')) + ->placeholder(__('Select an option')) + ->options(Task::all()->pluck('name', 'name')), + DatePicker::make('enlist_date')->label(__('Enlist date'))->seconds(false), + ])->columns(2), + Section::make([ + Toggle::make('is_permanent')->Label(__('Is permanent')), + Toggle::make('has_exemption')->label(__('Has exemption')), + Toggle::make('is_trainee')->label(__('Is trainee')), + Toggle::make('is_mabat')->label(__('Is mabat')), + ])->columns(4), + ]), ]); @@ -65,23 +71,29 @@ public static function table(Table $table): Table { return $table + ->contentGrid([ + 'md' => 1, + 'xl' => 1, + ]) ->columns([ split::make([ Stack::make([ - TextColumn::make('user.first_name')->description('First name', position: 'above')->size(TextColumn\TextColumnSize::Large), - TextColumn::make('user.last_name')->description('Last name', position: 'above')->size(TextColumn\TextColumnSize::Large), - TextColumn::make('enlist_date')->description('Enlist date', position: 'above')->size(TextColumn\TextColumnSize::Large), - ]), - Stack::make([ - TextColumn::make('course')->description('Course', position: 'above')->size(TextColumn\TextColumnSize::Large), - TextColumn::make('max_shift')->description('Max shift', position: 'above')->size(TextColumn\TextColumnSize::Large), - TextColumn::make('max_night')->description('Max night', position: 'above')->size(TextColumn\TextColumnSize::Large), - TextColumn::make('max_weekend')->description('Max weekend', position: 'above')->size(TextColumn\TextColumnSize::Large), + TextColumn::make('user.first_name') + ->label(__('Full name')) + ->formatStateUsing(function ($record) { + return $record->user->last_name.' '.$record->user->first_name; + })->weight(weight: FontWeight::SemiBold)->description(__('Full name'), position: 'above')->size(TextColumnSize::Large), + TextColumn::make('enlist_date')->weight(weight: FontWeight::SemiBold)->description(__('Enlist date'), position: 'above')->size(TextColumnSize::Large)->date(), + TextColumn::make('course')->weight(weight: FontWeight::SemiBold)->description(__('Course'), position: 'above')->size(TextColumnSize::Large), + TextColumn::make('max_shift')->weight(weight: FontWeight::SemiBold)->description(__('Max shift'), position: 'above')->size(TextColumnSize::Large), ]), Stack::make([ - TextColumn::make('capacity')->description('Capacity', position: 'above')->size(TextColumn\TextColumnSize::Large), - TextColumn::make('capacity_hold')->description('Capacity hold', position: 'above')->size(TextColumn\TextColumnSize::Large), - TextColumn::make('qualifications')->description('Qualifications', position: 'above')->size(TextColumn\TextColumnSize::Large), + + TextColumn::make('max_night')->weight(weight: FontWeight::SemiBold)->description(__('Max night'), position: 'above')->size(TextColumnSize::Large), + TextColumn::make('max_weekend')->weight(weight: FontWeight::SemiBold)->description(__('Max weekend'), position: 'above')->size(TextColumnSize::Large), + TextColumn::make('capacity')->weight(weight: FontWeight::SemiBold)->description(__('Capacity'), position: 'above')->size(TextColumnSize::Large), + TextColumn::make('capacity_hold')->weight(weight: FontWeight::SemiBold)->description(__('Capacity hold'), position: 'above')->size(TextColumnSize::Large), + TextColumn::make('qualifications')->weight(weight: FontWeight::SemiBold)->description(__('Qualifications'), position: 'above')->size(TextColumnSize::Large), ]), ]), ]) @@ -90,7 +102,7 @@ public static function table(Table $table): Table ->filters([ ]) ->actions([ - Tables\Actions\EditAction::make(), + EditAction::make(), ]); } @@ -111,4 +123,9 @@ public static function canViewAny(): bool { return true; } + + public static function getPluralModelLabel(): string + { + return __('My profile'); + } } diff --git a/app/Resources/ProfileResource/Pages/EditProfile.php b/app/Resources/ProfileResource/Pages/EditProfile.php index f39df0a..a75ac36 100644 --- a/app/Resources/ProfileResource/Pages/EditProfile.php +++ b/app/Resources/ProfileResource/Pages/EditProfile.php @@ -21,4 +21,9 @@ protected function getRedirectUrl(): string { return $this->getResource()::getUrl('index'); } + + public function getTitle(): string + { + return __('My profile'); + } } diff --git a/app/Resources/ProfileResource/Pages/ListProfiles.php b/app/Resources/ProfileResource/Pages/ListProfiles.php index b8dacd1..c644253 100644 --- a/app/Resources/ProfileResource/Pages/ListProfiles.php +++ b/app/Resources/ProfileResource/Pages/ListProfiles.php @@ -20,4 +20,14 @@ protected function getHeaderActions(): array Actions\CreateAction::make(), ]; } + + public static function getNavigationLabel(): string + { + return __('My profile'); + } + + public function getTitle(): string + { + return __('My profile'); + } } diff --git a/app/Resources/ShiftResource.php b/app/Resources/ShiftResource.php index 3407801..e95fdbf 100644 --- a/app/Resources/ShiftResource.php +++ b/app/Resources/ShiftResource.php @@ -20,6 +20,16 @@ class ShiftResource extends Resource protected static ?string $navigationIcon = 'heroicon-o-calendar'; + public static function getModelLabel(): string + { + return __('My Soldiers Shift'); + } + + public static function getPluralModelLabel(): string + { + return __('My Soldiers Shifts'); + } + public static function canAccess(): bool { return current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) ? true : false; diff --git a/app/Resources/SoldierResource.php b/app/Resources/SoldierResource.php index 4d4282f..17d0939 100644 --- a/app/Resources/SoldierResource.php +++ b/app/Resources/SoldierResource.php @@ -32,6 +32,7 @@ use Filament\Tables\Columns\BadgeColumn; use Filament\Tables\Columns\BooleanColumn; use Filament\Tables\Columns\TextColumn; +use Filament\Tables\Enums\FiltersLayout; use Filament\Tables\Filters\Filter; use Filament\Tables\Filters\SelectFilter; use Filament\Tables\Table; @@ -60,32 +61,32 @@ public static function table(Table $table): Table ->columns([ TextColumn::make('user.first_name') - ->label('Name') + ->label(__('Full name')) ->formatStateUsing(function ($record) { return $record->user->last_name.' '.$record->user->first_name; }) ->searchable(['user->first_name', 'user->last_name']) ->sortable(), BadgeColumn::make('gender') - ->formatStateUsing(fn ($state) => $state ? 'Male' : 'Female') + ->label(__('Gender')) + ->formatStateUsing(fn ($state) => $state ? __('Male') : __('Female')) ->badge() - ->color(fn ($state) => $state ? 'primary' : 'info') + ->color(fn ($state) => $state ? 'info' : 'primary') ->sortable(), - BooleanColumn::make('is_reservist'), - TextColumn::make('reserve_dates')->listWithLineBreaks()->limitList(1)->expandableLimitedList()->placeholder('---')->toggleable(), - TextColumn::make('next_reserve_dates')->listWithLineBreaks()->limitList(1)->expandableLimitedList()->placeholder('---')->toggleable(), - TextColumn::make('enlist_date')->sortable()->date()->toggleable(), - TextColumn::make('course')->toggleable(isToggledHiddenByDefault: true), - BooleanColumn::make('has_exemption')->toggleable(isToggledHiddenByDefault: true), - TextColumn::make('max_shift')->toggleable(isToggledHiddenByDefault: true), - TextColumn::make('max_night')->toggleable(isToggledHiddenByDefault: true), - TextColumn::make('max_weekend')->toggleable(isToggledHiddenByDefault: true), - TextColumn::make('capacity')->toggleable(isToggledHiddenByDefault: true), - TextColumn::make('capacity_hold')->numeric()->toggleable(), - BooleanColumn::make('is_trainee')->toggleable(isToggledHiddenByDefault: true), - BooleanColumn::make('is_mabat')->toggleable(isToggledHiddenByDefault: true), - TextColumn::make('qualifications') - ->placeholder('no qualifications')->toggleable(), + BooleanColumn::make('is_reservist')->label(__('Reservist')), + TextColumn::make('reserve_dates')->label(__('Reserve dates'))->date()->listWithLineBreaks()->limitList(1)->expandableLimitedList()->placeholder('---')->toggleable(isToggledHiddenByDefault: true), + TextColumn::make('next_reserve_dates')->label(__('Next reserve dates'))->date()->listWithLineBreaks()->limitList(1)->expandableLimitedList()->placeholder('---')->toggleable(isToggledHiddenByDefault: true), + TextColumn::make('enlist_date')->label(__('Enlist date'))->sortable()->date()->toggleable(), + TextColumn::make('course')->label(__('Course'))->toggleable(isToggledHiddenByDefault: true), + BooleanColumn::make('has_exemption')->label(__('Has exemption'))->toggleable(isToggledHiddenByDefault: true), + TextColumn::make('max_shift')->label(__('Max shift'))->toggleable(isToggledHiddenByDefault: true), + TextColumn::make('max_night')->label(__('Max night'))->toggleable(isToggledHiddenByDefault: true), + TextColumn::make('max_weekend')->label(__('Max weekend'))->toggleable(isToggledHiddenByDefault: true), + TextColumn::make('capacity')->label(__('Capacity'))->toggleable(isToggledHiddenByDefault: true), + TextColumn::make('capacity_hold')->label(__('Capacity hold'))->numeric()->toggleable(), + BooleanColumn::make('is_trainee')->label(__('Is trainee'))->toggleable(isToggledHiddenByDefault: true), + BooleanColumn::make('is_mabat')->label(__('Is mabat'))->toggleable(isToggledHiddenByDefault: true), + TextColumn::make('qualifications')->label(__('Qualifications'))->placeholder(__('No qualifications'))->toggleable(), ]) ->modifyQueryUsing(function (Builder $query) { if (request()->input('team_id')) { @@ -95,22 +96,24 @@ public static function table(Table $table): Table ->toggleColumnsTriggerAction( fn (Action $action) => $action ->button() - ->label('Toggle'), + ->label(__('Columns')), ) ->filters([ - NumberFilter::make('course'), - NumberFilter::make('max_shift'), - NumberFilter::make('max_night'), - NumberFilter::make('max_weekend'), - NumberFilter::make('capacity'), - NumberFilter::make('capacity_hold'), + NumberFilter::make('course')->label(__('Course')), + NumberFilter::make('max_shift')->label(__('Max shift')), + NumberFilter::make('max_night')->label(__('Max night')), + NumberFilter::make('max_weekend')->label(__('Max weekend')), + NumberFilter::make('capacity')->label(__('Capacity')), + NumberFilter::make('capacity_hold')->label(__('Capacity hold')), SelectFilter::make('gender') + ->label(__('Gender')) ->options([ - true => 'Male', - false => 'Female', + true => __('Male'), + false => __('Female'), ]) ->default(null), SelectFilter::make('qualifications') + ->label(__('Qualifications')) ->multiple() ->searchable() ->options(Task::all()->pluck('name', 'name')) @@ -119,23 +122,28 @@ public static function table(Table $table): Table }) ->default(null), Filter::make('reservist') + ->label(__('Reservist')) ->query(fn (Builder $query): Builder => $query->where('is_reservist', 1)) ->toggle(), Filter::make('is_mabat') + ->label(__('Is mabat')) ->query(fn (Builder $query): Builder => $query->where('is_mabat', true)) ->toggle(), Filter::make('has_exemption') + ->label(__('Has exemption')) ->query(fn (Builder $query): Builder => $query->where('has_exemption', true)) ->toggle(), Filter::make('is_trainee') + ->label(__('Is trainee')) ->query(fn (Builder $query): Builder => $query->where('is_trainee', true)) ->toggle(), Filter::make('enlist_date') ->form([ Fieldset::make('Enlist date') + ->label(__('Enlist date')) ->schema([ - DatePicker::make('recruitment_from'), - DatePicker::make('recruitment_until'), + DatePicker::make('recruitment_from')->label(__('From')), + DatePicker::make('recruitment_until')->label(__('Until')), ]), ]) ->query(function (Builder $query, array $data): Builder { @@ -150,29 +158,30 @@ public static function table(Table $table): Table ); }), - ], layout: \Filament\Tables\Enums\FiltersLayout::Modal) + ], layout: FiltersLayout::Modal) ->filtersFormColumns(4) ->deferFilters() ->filtersTriggerAction( fn (Action $action) => $action ->button() - ->label('Filter') + ->label(__('Filter')) ) ->actions([ ActionGroup::make([ EditAction::make(), DeleteAction::make(), Action::make('update reserve days') + ->label(__('Update reserve days')) ->icon('heroicon-o-pencil') ->color('primary') ->form(function ($record) { return [ Flatpickr::make('next_reserve_dates') + ->label(__('Next reserve dates')) ->multiple() ->default($record->next_reserve_dates) ->minDate(now()->addMonth()->startOfMonth()) - ->maxDate(now()->addMonth()->endOfMonth()) - ->required(), + ->maxDate(now()->addMonth()->endOfMonth()), ]; }) ->action(function (Soldier $record, array $data): void { @@ -223,10 +232,13 @@ public static function personalDetails(): Fieldset ->relationship('user') ->schema([ TextInput::make('first_name') + ->label(__('First name')) ->required(), TextInput::make('last_name') + ->label(__('Last name')) ->required(), TextInput::make('password') + ->label(__('Personal number')) ->password() ->revealable() ->length(7) @@ -239,27 +251,30 @@ public static function soldierDetails(): array return [ ToggleButtons::make('gender') ->options([ - 1 => 'Male', - 0 => 'Female', + 1 => __('Male'), + 0 => __('Female'), ]) + ->default(1) + ->label(__('Gender')) ->grouped() ->required(), DatePicker::make('enlist_date') + ->label(__('Enlist date')) ->seconds(false), TextInput::make('course') + ->label(__('Course')) ->numeric() ->minValue(0), Select::make('capacity') - ->placeholder('select an option') + ->label(__('Capacity')) + ->placeholder(__('Select an option')) ->options(fn (): array => collect(range(0, 12))->mapWithKeys(fn ($number) => [(string) ($number / 4) => (string) ($number / 4)])->toArray()) ->required(), - Hidden::make('capacity_hold') - ->default(0), + Hidden::make('capacity_hold')->default(0), Section::make([ - Toggle::make('is_reservist') - ->live(), - Toggle::make('is_permanent'), - Toggle::make('has_exemption'), + Toggle::make('is_reservist')->label(__('Reservist'))->live(), + Toggle::make('is_permanent')->label(__('Is permanent')), + Toggle::make('has_exemption')->label(__('Exemption')), ])->columns(3), ]; } @@ -268,6 +283,7 @@ public static function reserveDays(): array { return [ Flatpickr::make('reserve_dates') + ->label(__('Reserve dates')) ->multiple() ->minDate(today()) ->maxDate(today()->endOfMonth()) @@ -279,23 +295,36 @@ public static function constraints(): array { return [ Section::make([ - TextInput::make('max_shift')->numeric()->minValue(0), - TextInput::make('max_night')->numeric()->minValue(0)->maxValue(31), - TextInput::make('max_weekend')->default('')->numeric()->minValue(0)->maxValue(5), + TextInput::make('max_shift')->label(__('Max shift'))->numeric()->minValue(0)->required()->default(0), + TextInput::make('max_night')->label(__('Max night'))->numeric()->minValue(0)->maxValue(31)->required()->default(0), + TextInput::make('max_weekend')->label(__('Max weekend'))->default('')->numeric()->minValue(0)->maxValue(5)->required()->default(0), ]) ->columns(3), Split::make([ Section::make([ - Toggle::make('is_trainee'), - Toggle::make('is_mabat'), + Toggle::make('is_trainee') + ->label(__('Is trainee')), + Toggle::make('is_mabat') + ->label(__('Is mabat')), ]) ->columns(2), Select::make('qualifications') + ->label(__('Qualifications')) ->multiple() - ->placeholder('select an option') + ->placeholder(__('Select an option')) ->options(Task::all()->pluck('name', 'name')), ])->columns(2) ->columnSpan('full'), ]; } + + public static function getModelLabel(): string + { + return __('Soldier'); + } + + public static function getPluralModelLabel(): string + { + return __('Soldiers'); + } } diff --git a/app/Resources/SoldierResource/Pages/CreateSoldier.php b/app/Resources/SoldierResource/Pages/CreateSoldier.php index 8078ef2..b0a0258 100644 --- a/app/Resources/SoldierResource/Pages/CreateSoldier.php +++ b/app/Resources/SoldierResource/Pages/CreateSoldier.php @@ -52,17 +52,21 @@ public static function getSteps(): array { return [ Step::make('Personal Information') + ->label(__('Personal Information')) ->schema([SoldierResource::personalDetails()]), Step::make('Soldier details') + ->label(__('Soldier details')) ->schema([ Section::make()->schema(SoldierResource::soldierDetails())->columns(), ]), Step::make('Reserve days') + ->label(__('Reserve dates')) ->visible(fn (Get $get) => $get('is_reservist')) ->schema([ Section::make()->schema(SoldierResource::reserveDays())->columns(), ]), Step::make('Additional settings') + ->label(__('Additional settings')) ->schema([ Section::make()->schema(SoldierResource::constraints())->columns(), ]), diff --git a/app/Resources/TaskResource.php b/app/Resources/TaskResource.php index fdf972e..32d5afb 100644 --- a/app/Resources/TaskResource.php +++ b/app/Resources/TaskResource.php @@ -2,17 +2,33 @@ namespace App\Resources; +use App\Enums\RecurrenceType; +use App\Models\Department; use App\Models\Task; use App\Resources\TaskResource\Pages; -use App\Resources\TaskResource\Pages\CreateTask; -use Filament\Forms\Components\Wizard; +use Filament\Forms\Components\ColorPicker; +use Filament\Forms\Components\DatePicker; +use Filament\Forms\Components\Fieldset; +use Filament\Forms\Components\Section; +use Filament\Forms\Components\Select; +use Filament\Forms\Components\TextInput; +use Filament\Forms\Components\TimePicker; +use Filament\Forms\Components\Toggle; +use Filament\Forms\Components\ToggleButtons; use Filament\Forms\Form; +use Filament\Forms\Get; use Filament\Resources\Resource; -use Filament\Tables; +use Filament\Tables\Actions\ActionGroup; +use Filament\Tables\Actions\BulkActionGroup; +use Filament\Tables\Actions\DeleteAction; +use Filament\Tables\Actions\DeleteBulkAction; +use Filament\Tables\Actions\EditAction; +use Filament\Tables\Columns\ColorColumn; use Filament\Tables\Columns\Layout\Panel; use Filament\Tables\Columns\Layout\Split; use Filament\Tables\Columns\Layout\Stack; use Filament\Tables\Columns\TextColumn; +use Filament\Tables\Columns\TextColumn\TextColumnSize; use Filament\Tables\Table; class TaskResource extends Resource @@ -21,11 +37,22 @@ class TaskResource extends Resource protected static ?string $navigationIcon = 'heroicon-m-squares-plus'; + public static function getModelLabel(): string + { + return __('Task'); + } + + public static function getPluralModelLabel(): string + { + return __('Tasks'); + } + public static function form(Form $form): Form { return $form ->schema([ - Wizard::make(CreateTask::getSteps()), + Section::make()->schema(TaskResource::getTaskDetails())->columns(), + Section::make()->schema(TaskResource::getRecurrence())->columns(), ]); } @@ -34,68 +61,85 @@ public static function table(Table $table): Table return $table ->columns([ Split::make([ - Tables\Columns\TextColumn::make('name') - ->description('Name', position: 'above') - ->size(TextColumn\TextColumnSize::Large), - Tables\Columns\TextColumn::make('type') - ->description('Type', position: 'above') - ->size(TextColumn\TextColumnSize::Large), - Tables\Columns\TextColumn::make('parallel_weight') - ->description('Parallel Weight', position: 'above') - ->size(TextColumn\TextColumnSize::Large), - Tables\Columns\ColorColumn::make('color') + TextColumn::make('name') + ->description(__('Name'), position: 'above') + ->size(TextColumnSize::Large), + TextColumn::make('type') + ->description(__('Type'), position: 'above') + ->size(TextColumnSize::Large), + TextColumn::make('parallel_weight') + ->description(__('Parallel weight'), position: 'above') + ->size(TextColumnSize::Large), + ColorColumn::make('color') ->copyable() ->copyMessage('Color code copied'), ]), Panel::make([ Stack::make([ - Tables\Columns\TextColumn::make('start_hour') - ->description('Start at', position: 'above') - ->size(TextColumn\TextColumnSize::Large), - Tables\Columns\TextColumn::make('duration') - ->description('Duration', position: 'above') - ->size(TextColumn\TextColumnSize::Large), - Tables\Columns\TextColumn::make('is_alert') - ->description('Alert', position: 'above') - ->size(TextColumn\TextColumnSize::Large) - ->formatStateUsing(fn ($state) => $state ? 'Yes' : 'No'), - Tables\Columns\TextColumn::make('department_name') - ->description('Department', position: 'above') - ->size(TextColumn\TextColumnSize::Large), + TextColumn::make('start_hour') + ->description(__('Start at'), position: 'above') + ->size(TextColumnSize::Large), + TextColumn::make('duration') + ->description(__('Duration'), position: 'above') + ->size(TextColumnSize::Large), + TextColumn::make('is_alert') + ->description(__('Alert'), position: 'above') + ->size(TextColumnSize::Large) + ->formatStateUsing(fn ($state) => $state ? __('Yes') : __('No')), + TextColumn::make('department_name') + ->description(__('Department'), position: 'above') + ->size(TextColumnSize::Large), ]) ->space(2) ->extraAttributes(['style' => 'display: flex; flex-direction: row; flex-wrap: wrap; justify-content: space-between; align-items: center;']), Stack::make([ - Tables\Columns\TextColumn::make('recurrence.type') - ->description('Recurrence type', position: 'above') - ->size(TextColumn\TextColumnSize::Large), - Tables\Columns\TextColumn::make('recurrence.days_in_week') - ->description('Days in week', position: 'above') - ->size(TextColumn\TextColumnSize::Large), - Tables\Columns\TextColumn::make('recurrence.dates_in_month') - ->description('Dates in month', position: 'above') - ->size(TextColumn\TextColumnSize::Large), - Tables\Columns\TextColumn::make('recurrence.start_date') - ->description('StartDate', position: 'above') - ->size(TextColumn\TextColumnSize::Large), - Tables\Columns\TextColumn::make('recurrence.end_date') - ->description('EndDate', position: 'above') - ->size(TextColumn\TextColumnSize::Large), + TextColumn::make('recurrence.type') + ->description(__('Recurrence type'), position: 'above') + ->size(TextColumnSize::Large) + ->formatStateUsing(function ($state) { + switch ($state) { + case 'Daily': + return __('Daily'); + case 'Weekly': + return __('Weekly'); + case 'Monthly': + return __('Monthly'); + case 'Custom': + return __('Custom'); + case 'OneTime': + return __('OneTime'); + } + }), + TextColumn::make('recurrence.days_in_week') + ->description(__('Days in week'), position: 'above') + ->size(TextColumnSize::Large), + TextColumn::make('recurrence.dates_in_month') + ->description(__('Dates in month'), position: 'above') + ->size(TextColumnSize::Large), + TextColumn::make('recurrence.start_date') + ->description(__('StartDate'), position: 'above') + ->size(TextColumnSize::Large), + TextColumn::make('recurrence.end_date') + ->description(__('EndDate'), position: 'above') + ->size(TextColumnSize::Large), ]) ->space(2) - ->extraAttributes(['style' => 'display: flex; flex-direction: row; flex-wrap: wrap; justify-content: center; align-items: center; border: 1px solid #e7e7e7;']), + ->extraAttributes(['style' => 'display: flex; flex-direction: row; flex-wrap: wrap; justify-content: center; align-items: center; border: 1px solid #e7e7e7; border-radius: 10px; padding: 10px;']), ])->collapsible(), ]) ->filters([ ]) ->actions([ - Tables\Actions\EditAction::make(), - Tables\Actions\DeleteAction::make(), + ActionGroup::make([ + EditAction::make(), + DeleteAction::make(), + ]), + ]) ->bulkActions([ - Tables\Actions\BulkActionGroup::make([ - Tables\Actions\DeleteBulkAction::make(), + BulkActionGroup::make([ + DeleteBulkAction::make(), ]), ]); } @@ -107,4 +151,83 @@ public static function getPages(): array 'create' => Pages\CreateTask::route('/create'), ]; } + + public static function getTaskDetails(): array + { + return [ + TextInput::make('name') + ->label(__('Name')) + ->required(), + TimePicker::make('start_hour') + ->label(__('Start hour')) + ->seconds(false) + ->required(), + TimePicker::make('duration') + ->seconds(false) + ->label(__('Duration')) + ->required(), + Select::make('parallel_weight') + ->label(__('Parallel weight')) + ->options(fn (): array => collect(range(0, 12))->mapWithKeys(fn ($number) => [(string) ($number / 4) => (string) ($number / 4)])->toArray()) + ->required(), + TextInput::make('type') + ->label(__('Type')) + ->required(), + ColorPicker::make('color') + ->label(__('Color')) + ->required(), + Toggle::make('is_alert') + ->label(__('Is alert')), + Select::make('department_name') + ->label(__('Department')) + ->options(Department::all()->mapWithKeys(function ($department) { + return [$department->name => $department->name]; + })), + ]; + } + + public static function getRecurrence(): array + { + return [ + ToggleButtons::make('recurrence.type') + ->label(__('Type')) + ->options(collect(RecurrenceType::cases())->mapWithKeys(fn ($type) => [$type->value => $type->getLabel()]))->live() + ->required() + ->inline() + ->grouped(), + Select::make('recurrence.days_in_week') + ->label(__('Days in week')) + ->multiple() + ->options( + [ + '1' => __('Sunday'), + '2' => __('Monday'), + '3' => __('Tuesday'), + '4' => __('Wednesday'), + '5' => __('Thursday'), + '6' => __('Friday'), + '7' => __('Saturday'), + ] + ) + ->visible(fn (Get $get): bool => $get('recurrence.type') === 'Weekly') + ->default(null) + ->required(), + Select::make('recurrence.dates_in_month') + ->label(fn (Get $get) => $get('recurrence.type') === 'Monthly' ? 'Date' : 'Dates') + ->placeholder(__('Select from dates')) + ->multiple(fn (Get $get): bool => $get('recurrence.type') === 'Custom') + ->options(array_combine(range(1, 31), range(1, 31))) + ->visible(fn (Get $get): bool => $get('recurrence.type') === 'Monthly' || $get('recurrence.type') === 'Custom') + ->default(null) + ->required(), + Fieldset::make('Dates') + ->label(__('Dates')) + ->schema([ + DatePicker::make('recurrence.start_date') + ->label(label: __('Start date')), + DatePicker::make('recurrence.end_date') + ->label(label: __('End date')), + ])->visible(fn (Get $get): bool => $get('recurrence.type') === 'OneTime'), + ]; + } } diff --git a/app/Resources/TaskResource/Pages/CreateTask.php b/app/Resources/TaskResource/Pages/CreateTask.php index ab8451f..5c09919 100644 --- a/app/Resources/TaskResource/Pages/CreateTask.php +++ b/app/Resources/TaskResource/Pages/CreateTask.php @@ -2,20 +2,11 @@ namespace App\Resources\TaskResource\Pages; -use App\Enums\RecurrenceType; -use App\Models\Department; use App\Models\Task; use App\Resources\TaskResource; use App\Services\ReccurenceEvents; -use Filament\Forms; -use Filament\Forms\Components\Checkbox; -use Filament\Forms\Components\ColorPicker; -use Filament\Forms\Components\DatePicker; -use Filament\Forms\Components\Fieldset; -use Filament\Forms\Components\Select; -use Filament\Forms\Components\TextInput; +use Filament\Forms\Components\Section; use Filament\Forms\Components\Wizard\Step; -use Filament\Forms\Get; use Filament\Resources\Pages\CreateRecord; use Filament\Resources\Pages\CreateRecord\Concerns\HasWizard; @@ -36,62 +27,14 @@ public static function getSteps(): array { return [ Step::make('Details') + ->label(__('Details')) ->schema([ - TextInput::make('name') - ->required(), - Forms\Components\TimePicker::make('start_hour') - ->seconds(false) - ->required(), - TextInput::make('duration') - ->required(), - Select::make('parallel_weight') - ->options(fn (): array => collect(range(0, 12))->mapWithKeys(fn ($number) => [(string) ($number / 4) => (string) ($number / 4)])->toArray()) - ->required(), - TextInput::make('type') - ->required(), - ColorPicker::make('color') - ->required(), - Checkbox::make('is_alert'), - Select::make('department_name') - ->options(Department::all()->mapWithKeys(function ($department) { - return [$department->name => $department->name]; - })), + Section::make()->schema(TaskResource::getTaskDetails())->columns(), ]), Step::make('Recurrence') + ->label(__('Recurrence')) ->schema([ - Select::make('recurrence.type') - ->options(RecurrenceType::class) - ->live() - ->required(), - Select::make('recurrence.days_in_week') - ->multiple() - ->options( - [ - 'Sunday' => 'Sunday', - 'Monday' => 'Monday', - 'Tuesday' => 'Tuesday', - 'Wednesday' => 'Wednesday', - 'Thursday' => 'Thursday', - 'Friday' => 'Friday', - 'Saturday' => 'Saturday', - ] - ) - ->visible(fn (Get $get): bool => $get('recurrence.type') === 'Weekly') - ->default(null) - ->required(), - Select::make('recurrence.dates_in_month') - ->label(fn (Get $get) => $get('recurrence.type') === 'Monthly' ? 'Date' : 'Dates') - ->placeholder('Select from dates') - ->multiple(fn (Get $get): bool => $get('recurrence.type') === 'Custom') - ->options(array_combine(range(1, 31), range(1, 31))) - ->visible(fn (Get $get): bool => $get('recurrence.type') === 'Monthly' || $get('recurrence.type') === 'Custom') - ->default(null) - ->required(), - Fieldset::make('Dates') - ->schema([ - DatePicker::make('recurrence.start_date'), - DatePicker::make('recurrence.end_date'), - ])->visible(fn (Get $get): bool => $get('recurrence.type') === 'OneTime'), + Section::make()->schema(TaskResource::getRecurrence())->columns(), ]), ]; } diff --git a/app/Resources/TaskResource/Pages/ListTasks.php b/app/Resources/TaskResource/Pages/ListTasks.php index 1d1c02a..5cc28b1 100644 --- a/app/Resources/TaskResource/Pages/ListTasks.php +++ b/app/Resources/TaskResource/Pages/ListTasks.php @@ -13,7 +13,7 @@ class ListTasks extends ListRecords protected function getHeaderActions(): array { return [ - Actions\CreateAction::make(), + Actions\CreateAction::make()->label(__('New task')), ]; } } diff --git a/app/Resources/TeamResource.php b/app/Resources/TeamResource.php index 5da2056..c898c0e 100644 --- a/app/Resources/TeamResource.php +++ b/app/Resources/TeamResource.php @@ -7,13 +7,17 @@ use App\Models\Team; use App\Models\User; use App\Resources\TeamResource\Pages; +use Filament\Forms\Components\Section; use Filament\Forms\Components\Select; use Filament\Forms\Components\TextInput; use Filament\Forms\Form; use Filament\Resources\Resource; -use Filament\Tables; use Filament\Tables\Actions\Action; use Filament\Tables\Actions\ActionGroup; +use Filament\Tables\Actions\BulkActionGroup; +use Filament\Tables\Actions\DeleteAction; +use Filament\Tables\Actions\DeleteBulkAction; +use Filament\Tables\Actions\EditAction; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; @@ -25,39 +29,56 @@ class TeamResource extends Resource protected static ?string $navigationIcon = 'heroicon-o-users'; + public static function getModelLabel(): string + { + return __('Team'); + } + + public static function getPluralModelLabel(): string + { + return __('Teams'); + } + public static function form(Form $form): Form { return $form ->schema([ - TextInput::make('name') - ->required(), - Select::make('commander_id') - ->relationship('commander') - ->options( - fn () => Cache::remember('users', 30 * 60, function () { - return User::all(); - })->mapWithKeys(function ($user) { - return [$user->userable_id => $user->displayName]; - }) - ) - ->searchable() - ->required(), - Select::make('department_id') - ->relationship('department') - ->options(Department::all()->pluck('name', 'id')) - ->searchable() - ->default(request()->input('department_id')) - ->required(), - Select::make('members') - ->options( - fn () => Cache::remember('users', 30 * 60, function () { - return User::all(); - })->mapWithKeys(function ($user) { - return [$user->userable_id => $user->displayName]; - }) - ) - ->multiple() - ->searchable(), + Section::make([ + TextInput::make('name') + ->label(__('Name')) + ->required(), + Select::make('commander_id') + ->label(__('Commander')) + ->relationship('commander') + ->options( + fn () => Cache::remember('users', 30 * 60, function () { + return User::all(); + })->mapWithKeys(function ($user) { + return [$user->userable_id => $user->displayName]; + }) + ) + ->searchable() + ->required(), + Select::make('department_id') + ->label(__('Department')) + ->relationship('department') + ->options(Department::all()->pluck('name', 'id')) + ->searchable() + ->default(request()->input('department_id')) + ->required(), + Select::make('members') + ->label(__('Members')) + ->options( + fn () => Cache::remember('users', 30 * 60, function () { + return User::all(); + })->mapWithKeys(function ($user) { + return [$user->userable_id => $user->displayName]; + }) + ) + ->multiple() + ->searchable(), + ])->columns(2), + ]); } @@ -66,16 +87,19 @@ public static function table(Table $table): Table return $table ->columns([ TextColumn::make('name') + ->label(__('Name')) ->searchable() ->sortable(), TextColumn::make('commander.user') + ->label(__('Commander')) ->formatStateUsing(function ($state) { return $state->last_name.', '.$state->first_name; }) - ->label('Commander') + ->label(__('Commander')) ->searchable() ->sortable(), TextColumn::make('department.name') + ->label(__('Department')) ->url(fn (Team $record): string => route('filament.app.resources.departments.index', ['department_id' => $record->department_id])) ->searchable() ->sortable(), @@ -89,16 +113,16 @@ public static function table(Table $table): Table } }) ->filters([ - // ]) ->actions([ ActionGroup::make([ Action::make('members') - ->label('Add member') + ->label(__('Add member')) ->color('primary') ->icon('heroicon-o-user-plus') ->form([ Select::make('members') + ->label(__('Members')) ->options( fn (Team $record) => Cache::remember('users', 30 * 60, function () { return User::all(); @@ -120,15 +144,19 @@ public static function table(Table $table): Table ->update(['team_id' => $record->id])); }), Action::make('View members') + ->label(__('View members')) ->color('success') ->icon('heroicon-o-user-group') ->badge(fn ($record) => Soldier::where('team_id', $record->id)->count()) ->url(fn (Team $record): string => route('filament.app.resources.soldiers.index', ['team_id' => $record->id])), - Tables\Actions\EditAction::make(), - Tables\Actions\DeleteAction::make(), + EditAction::make(), + DeleteAction::make(), ]), ]) ->bulkActions([ + BulkActionGroup::make([ + DeleteBulkAction::make(), + ]), ]); } diff --git a/app/Resources/TeamResource/Pages/CreateTeam.php b/app/Resources/TeamResource/Pages/CreateTeam.php index 566bce3..6ea9f76 100644 --- a/app/Resources/TeamResource/Pages/CreateTeam.php +++ b/app/Resources/TeamResource/Pages/CreateTeam.php @@ -28,11 +28,11 @@ protected function beforeCreate(): void $this->departments = Department::where('commander_id', $this->data['commander_id'])->get(); if ($this->teams->isNotEmpty() || $this->departments->isNotEmpty()) { Notification::make() - ->title('Save team') + ->title(__('Save team')) ->persistent() - ->body('The commander you selected is already registered as a commander. His selection will leave the '.($this->teams->isNotEmpty() ? 'team' : 'department').' without a commander. Are you sure?') + ->body(__('The commander you selected is already registered as a commander. His selection will leave his soldiers without a commander. Are you sure?')) ->actions([ - Action::make('view '.($this->teams->isNotEmpty() ? 'team' : 'department')) + Action::make(__('View ').($this->teams->isNotEmpty() ? __('Team') : __('Department'))) ->button() ->url( fn () => $this->teams->isNotEmpty() ? @@ -40,10 +40,10 @@ protected function beforeCreate(): void route('filament.app.resources.departments.index', ['commander_id' => $this->data['commander_id']]) ), - Action::make('confirm') + Action::make(__('Confirm')) ->button() ->emit('confirmCreate'), - Action::make('cancel') + Action::make(__('Cancel')) ->button() ->close(), ]) diff --git a/common/get_users.php b/common/get_users.php new file mode 100644 index 0000000..116b513 --- /dev/null +++ b/common/get_users.php @@ -0,0 +1,17 @@ +make(Illuminate\Contracts\Console\Kernel::class); +$kernel->bootstrap(); + +try { + DB::connection()->getPdo(); + echo DB::table('users')->get(); + +} catch (Exception $e) { + echo 'Database connection error: '.$e->getMessage(); +} \ No newline at end of file diff --git a/config/app.php b/config/app.php index 0b67a5f..03c28ca 100644 --- a/config/app.php +++ b/config/app.php @@ -1,3 +1,6 @@ 'he', + 'fallback_locale' => 'he', +]; diff --git a/lang/he.json b/lang/he.json new file mode 100644 index 0000000..303ff3e --- /dev/null +++ b/lang/he.json @@ -0,0 +1,113 @@ +{ + "Add member": "הוסף חבר לצוות", + "Add team": "הוסף צוות", + "Additional settings":"הגדרות נוספות", + "Alert": "התראה", + "Between":"בין", + "Cancel":"לְבַטֵל", + "Capacity": "יכולת", + "Capacity hold": "הנקודות שבוצעו", + "Color": "צבע", + "Columns": "עמודות", + "Commander": "מפקד", + "Confirm": "לְאַשֵׁר", + "Custom": "מותאם אישית", + "Constraint": "אילוץ", + "Constraint Name": "שם אילוץ", + "Constraints": "אילוצים", + "Course": "קורס", + "Daily": "יומי", + "Dates": "תאריכים", + "Dates in month": "תאריכים בחודש", + "Days in week": "ימים בשבוע", + "Department": "מדור", + "Departments": "מדורים", + "Details":"פרטים", + "Duration": "משך", + "End date": "תאריך סיום", + "EndDate": "תאריך סיום", + "Enlist date": "תאריך גיוס", + "Equal":"שווה", + "Female": "נקבה", + "Filter": "סנן", + "First name": "שם פרטי", + "Friday":"שישי", + "From": "מתאריך", + "Full name": "שם מלא", + "Gender": "מין", + "Greater than":"יותר מ", + "Greater than equal":"יותר או שווה", + "Has exemption": "פטור", + "Is alert": "יש התראה", + "Is mabat": "מב''ת", + "Is permanent": "קבע", + "Is trainee": "חניך", + "Last name": "שם משפחה", + "Less than":":פחות מ", + "Less than equal":"פחות או שווה", + "Male": "זכר", + "Max night": "מקסימום לילות", + "Max shift": "מקסימום משמרות", + "Max weekend": "מקסימום סופ'ש", + "Members": "חברים", + "Monday":"שני", + "Monthly": "חודשי", + "My Constraint": "האילוץ שלי", + "My Constraints": "האילוצים שלי", + "My profile": "הפרופיל שלי", + "My Shift": "המשמרת שלי", + "My Shifts": "המשמרות שלי", + "My Soldiers Constraints": "האילוצים של חיילי", + "My Soldiers Shift": "המשמרת של חיילי", + "My Soldiers Shifts": "המשמרות של חיילי", + "Name": "שם", + "New task": "משימה חדשה", + "Next reserve dates": "ימי מילואים לחודש הבא", + "No":"לא", + "No qualifications": "אין כשירויות", + "Not equal":"לא שווה", + "OneTime": "חד פעמי", + "Parallel weight": "משקל", + "Personal Information": "נתונים אישיים", + "Personal number": "מספר אישי", + "Qualifications": "כשירויות", + "Recurrence": "חזרתיות", + "Recurrence type": "סוג חזרתיות", + "Reserve": "מילואים", + "Reserve dates": "ימי מילואים בחודש הנוכחי", + "Reservist": "מילואימניק", + "Save department": "שמור מדור", + "Save team": "שמור צוות", + "Select an option": "בחר", + "Select condition": "בחר תנאי", + "Select from dates": "בחר מתאריך", + "Send": "לִשְׁלוֹחַ", + "Shift": "משמרת", + "Shifts": "משמרות", + "Soldier": "חייל", + "Soldier details": "נתוני חייל", + "Soldiers": "חיילים", + "Start at": ":מתחיל ב", + "Start date": "תאריך הַתחָלָה", + "Start hour": "שעת התחלה", + "StartDate": "תאריך התחלה", + "Sunday":"ראשון", + "Saturday":"שבת", + "Task": "משימה", + "Tasks": "משימות", + "Team": "צוות", + "Teams": "צוותים", + "The commander you selected is already registered as a commander. His selection will leave his soldiers without a commander. Are you sure?": "המפקד שבחרת כבר רשום כמפקד. בחירתו תשאיר את חייליו ללא מפקד. אתה בטוח?", + "Thursday":"חמישי", + "Tuesday":"שלישי", + "Type": "סוג", + "Until": "עד תאריך", + "Update reserve days": "ימי מילואים לחודש הבא", + "View members": "צפה בחברים", + "View team": "צפה בצוות", + "View teams":"צפה בצוותים", + "View department": "צפה במדור", + "Wednesday":"רביעי", + "Weekly": "שבועי", + "Yes":"כן" +} diff --git a/lang/he/http-statuses.php b/lang/he/http-statuses.php new file mode 100644 index 0000000..8310541 --- /dev/null +++ b/lang/he/http-statuses.php @@ -0,0 +1,84 @@ + 'שגיאה לא ידועה', + '100' => 'לְהַמשִׁיך', + '101' => 'החלפת פרוטוקולים', + '102' => 'מעבד', + '200' => 'בסדר', + '201' => 'נוצר', + '202' => 'מְקוּבָּל', + '203' => 'מידע לא סמכותי', + '204' => 'ללא תוכן', + '205' => 'אפס תוכן', + '206' => 'תוכן חלקי', + '207' => 'ריבוי סטטוסים', + '208' => 'כבר דווח', + '226' => 'אני רגיל', + '300' => 'אפשרויות מרובות', + '301' => 'הועבר באופן קבוע', + '302' => 'מצאתי', + '303' => 'ראה אחר', + '304' => 'לא שונה', + '305' => 'תשתמש בפרוקסי', + '307' => 'הפניה זמנית', + '308' => 'הפניה קבועה', + '400' => 'בקשה גרועה', + '401' => 'לא מורשה', + '402' => 'נדרש תשלום', + '403' => 'אסור', + '404' => 'לא נמצא', + '405' => 'השיטה אינה מותרת', + '406' => 'לא מתקבל', + '407' => 'נדרש אימות פרוקסי', + '408' => 'בקש פסק זמן', + '409' => 'סְתִירָה', + '410' => 'נעלם', + '411' => 'אורך נדרש', + '412' => 'תנאי מוקדם נכשל', + '413' => 'מטען גדול מדי', + '414' => 'URI ארוך מדי', + '415' => 'סוג מדיה לא נתמך', + '416' => 'טווח לא מספק', + '417' => 'הציפייה נכשלה', + '418' => 'אני קומקום תה', + '419' => 'פג תוקף ההפעלה', + '421' => 'בקשה שגויה', + '422' => 'ישות בלתי ניתנת לעיבוד', + '423' => 'נָעוּל', + '424' => 'תלות נכשלה', + '425' => 'מוקדם מדי', + '426' => 'שדרוג נדרש', + '428' => 'תנאי מוקדם נדרש', + '429' => 'יותר מדי בקשות', + '431' => 'שדות כותרת בקשת גדולים מדי', + '444' => 'החיבור נסגר ללא תגובה', + '449' => 'נסה שוב עם', + '451' => 'לא זמין מסיבות משפטיות', + '499' => 'בקשה סגורה ללקוח', + '500' => 'שגיאת שרת פנימית', + '501' => 'לא מיושם', + '502' => 'שער גרוע', + '503' => 'מצב תחזוקה', + '504' => 'פסק זמן של שער', + '505' => 'גרסת HTTP לא נתמכת', + '506' => 'וריאנט גם מנהל משא ומתן', + '507' => 'אין מספיק שטח אחסון', + '508' => 'זוהתה לולאה', + '509' => 'חריגה ממגבלת רוחב הפס', + '510' => 'לא מורחב', + '511' => 'נדרש אימות רשת', + '520' => 'שגיאה לא ידועה', + '521' => 'שרת האינטרנט מושבת', + '522' => 'זמן החיבור נגמר', + '523' => 'לא ניתן להגיע למקור', + '524' => 'התרחש פסק זמן', + '525' => 'לחיצת יד SSL ​​נכשלה', + '526' => 'אישור SSL לא חוקי', + '527' => 'שגיאת Railgun', + '598' => 'שגיאת פסק זמן לקריאה ברשת', + '599' => 'שגיאת זמן קצוב חיבור לרשת', + 'unknownError' => 'שגיאה לא ידועה', +]; diff --git a/lang/he/validation.php b/lang/he/validation.php new file mode 100644 index 0000000..6dee937 --- /dev/null +++ b/lang/he/validation.php @@ -0,0 +1,275 @@ + 'שדה :attribute חייב להיות מסומן.', + 'accepted_if' => 'יש לקבל את ה-:attribute כאשר :other זה :value.', + 'active_url' => 'שדה :attribute הוא לא כתובת אתר תקנית.', + 'after' => 'שדה :attribute חייב להיות תאריך אחרי :date.', + 'after_or_equal' => 'שדה :attribute חייב להיות תאריך מאוחר או שווה ל :date.', + 'alpha' => 'שדה :attribute יכול להכיל אותיות בלבד.', + 'alpha_dash' => 'שדה :attribute יכול להכיל אותיות, מספרים ומקפים בלבד.', + 'alpha_num' => 'שדה :attribute יכול להכיל אותיות ומספרים בלבד.', + 'array' => 'שדה :attribute חייב להיות מערך.', + 'ascii' => 'ה-:attribute חייב להכיל רק תווים וסמלים אלפאנומריים של בייט בודד.', + 'before' => 'שדה :attribute חייב להיות תאריך לפני :date.', + 'before_or_equal' => 'שדה :attribute חייב להיות תאריך מוקדם או שווה ל :date.', + 'between' => [ + 'array' => 'שדה :attribute חייב להיות בין :min ל-:max פריטים.', + 'file' => 'שדה :attribute חייב להיות בין :min ל-:max קילובייטים.', + 'numeric' => 'שדה :attribute חייב להיות בין :min ל-:max.', + 'string' => 'שדה :attribute חייב להיות בין :min ל-:max תווים.', + ], + 'boolean' => 'שדה :attribute חייב להיות אמת או שקר.', + 'can' => 'שדה :attribute מכיל ערך לא מורשה.', + 'confirmed' => 'שדה האישור של :attribute לא תואם.', + 'contains' => 'The :attribute field is missing a required value.', + 'current_password' => 'הסיסמא לא נכונה.', + 'date' => 'שדה :attribute אינו תאריך תקני.', + 'date_equals' => 'על ה :attribute להיות תאריך שווה ל- :date.', + 'date_format' => 'שדה :attribute לא תואם את הפורמט :format.', + 'decimal' => 'ה-:attribute חייב להיות :decimal מקומות עשרוניים.', + 'declined' => 'יש לדחות את ה-:attribute.', + 'declined_if' => 'יש לדחות את ה-:attribute כאשר :other הוא :value.', + 'different' => 'שדה :attribute ושדה :other חייבים להיות שונים.', + 'digits' => 'שדה :attribute חייב להיות בעל :digits ספרות.', + 'digits_between' => 'שדה :attribute חייב להיות בין :min ו-:max ספרות.', + 'dimensions' => 'שדה :attribute מימדי התמונה לא תקינים', + 'distinct' => 'שדה :attribute קיים ערך כפול.', + 'doesnt_end_with' => 'ייתכן שה-:attribute לא יסתיים באחת מהאפשרויות הבאות: :values.', + 'doesnt_start_with' => 'ייתכן שה-:attribute לא יתחיל באחד מהבאים: :values.', + 'email' => 'שדה :attribute חייב להיות כתובת אימייל תקנית.', + 'ends_with' => 'שדה :attribute חייב להסתיים באחד מהבאים: :values', + 'enum' => 'ה-:attribute שנבחר אינו חוקי.', + 'exists' => 'בחירת ה-:attribute אינה תקפה.', + 'extensions' => 'בשדה :attribute חייבת להיות אחת מההרחבות הבאות: :values.', + 'file' => 'שדה :attribute חייב להיות קובץ.', + 'filled' => 'שדה :attribute הוא חובה.', + 'gt' => [ + 'array' => 'על ה :attribute לכלול יותר מ- :value פריטים.', + 'file' => 'על ה :attribute להיות גדול יותר מ- :value קילו-בתים.', + 'numeric' => 'על ה :attribute להיות גדול יותר מ- :value.', + 'string' => 'על ה :attribute להיות גדול יותר מ- :value תווים.', + ], + 'gte' => [ + 'array' => 'ה :attribute חייב לכלול :value פריטים או יותר.', + 'file' => 'על ה :attribute להיות גדול יותר או שווה ל- :value קילו-בתים.', + 'numeric' => 'על ה :attribute להיות גדול יותר או שווה ל- :value.', + 'string' => 'על ה :attribute להיות גדול יותר או שווה ל- :value תווים.', + ], + 'hex_color' => 'שדה :attribute חייב להיות צבע הקסדצימלי חוקי.', + 'image' => 'שדה :attribute חייב להיות תמונה.', + 'in' => 'בחירת ה-:attribute אינה תקפה.', + 'in_array' => 'שדה :attribute לא קיים ב:other.', + 'integer' => 'שדה :attribute חייב להיות מספר שלם.', + 'ip' => 'שדה :attribute חייב להיות כתובת IP תקנית.', + 'ipv4' => 'שדה :attribute חייב להיות כתובת IPv4 תקנית.', + 'ipv6' => 'שדה :attribute חייב להיות כתובת IPv6 תקנית.', + 'json' => 'שדה :attribute חייב להיות מחרוזת JSON תקנית.', + 'list' => 'שדה :attribute חייב להיות רשימה.', + 'lowercase' => 'ה-:attribute חייב להיות באותיות קטנות.', + 'lt' => [ + 'array' => 'על ה :attribute לכלול פחות מ- :value פריטים.', + 'file' => 'על ה :attribute להיות קטן יותר מ- :value קילו-בתים.', + 'numeric' => 'על ה :attribute להיות נמוך יותר מ- :value.', + 'string' => 'על ה :attribute להכיל פחות מ- :value תווים.', + ], + 'lte' => [ + 'array' => 'ה :attribute לא יכול לכלול יותר מאשר :value פריטים.', + 'file' => 'על ה :attribute להיות קטן יותר או שווה ל- :value קילו-בתים.', + 'numeric' => 'על ה :attribute להיות נמוך או שווה ל- :value.', + 'string' => 'על ה :attribute להכיל :value תווים או פחות.', + ], + 'mac_address' => 'ה-:attribute חייבת להיות כתובת MAC חוקית.', + 'max' => [ + 'array' => 'שדה :attribute לא יכול להכיל יותר מ-:max פריטים.', + 'file' => 'שדה :attribute לא יכול להיות גדול מ-:max קילובייטים.', + 'numeric' => 'שדה :attribute אינו יכול להיות גדול מ-:max.', + 'string' => 'שדה :attribute לא יכול להיות גדול מ-:max characters.', + ], + 'max_digits' => 'אסור שה-:attribute יהיו יותר מ-:max ספרות.', + 'mimes' => 'שדה :attribute צריך להיות קובץ מסוג: :values.', + 'mimetypes' => 'שדה :attribute צריך להיות קובץ מסוג: :values.', + 'min' => [ + 'array' => 'שדה :attribute חייב להיות לפחות :min פריטים.', + 'file' => 'שדה :attribute חייב להיות לפחות :min קילובייטים.', + 'numeric' => 'שדה :attribute חייב להיות לפחות :min.', + 'string' => 'שדה :attribute חייב להיות לפחות :min תווים.', + ], + 'min_digits' => 'ה-:attribute חייב להיות לפחות :min ספרות.', + 'missing' => 'שדה :attribute חייב להיות חסר.', + 'missing_if' => 'שדה :attribute חייב להיות חסר כאשר :other הוא :value.', + 'missing_unless' => 'שדה :attribute חייב להיות חסר אלא אם :other הוא :value.', + 'missing_with' => 'שדה :attribute חייב להיות חסר כאשר קיים :values.', + 'missing_with_all' => 'שדה :attribute חייב להיות חסר כאשר :values קיימים.', + 'multiple_of' => ':Attribute חייב להיות מרובה של :value', + 'not_in' => 'בחירת ה-:attribute אינה תקפה.', + 'not_regex' => 'הפורמט של :attribute איננו חוקי.', + 'numeric' => 'שדה :attribute חייב להיות מספר.', + 'password' => [ + 'letters' => 'ה-:attribute חייב להכיל לפחות אות אחת.', + 'mixed' => 'ה-:attribute חייב להכיל לפחות אות אחת גדולה ואות קטנה אחת.', + 'numbers' => 'ה-:attribute חייב להכיל לפחות מספר אחד.', + 'symbols' => 'ה-:attribute חייב להכיל לפחות סמל אחד.', + 'uncompromised' => 'ה-:attribute הנתון הופיע בדליפת נתונים. אנא בחר :attribute שונה.', + ], + 'present' => 'שדה :attribute חייב להיות קיים.', + 'present_if' => 'שדה :attribute חייב להיות קיים כאשר :other הוא :value.', + 'present_unless' => 'שדה :attribute חייב להיות קיים אלא אם :other הוא :value.', + 'present_with' => 'שדה :attribute חייב להיות קיים כאשר קיים :values.', + 'present_with_all' => 'שדה :attribute חייב להיות קיים כאשר קיימים :values.', + 'prohibited' => 'שדה :attribute אסור.', + 'prohibited_if' => 'שדה :attribute אסור כאשר :other הוא :value.', + 'prohibited_unless' => 'שדה :attribute אסור אלא אם כן :other הוא :values.', + 'prohibits' => 'שדה :attribute אוסר על נוכחות של :other.', + 'regex' => 'שדה :attribute בעל פורמט שאינו תקין.', + 'required' => 'שדה :attribute הוא חובה.', + 'required_array_keys' => 'שדה :attribute חייב להכיל ערכים עבור: :values.', + 'required_if' => 'שדה :attribute נחוץ כאשר :other הוא :value.', + 'required_if_accepted' => 'שדה :attribute נדרש כאשר :other מתקבל.', + 'required_if_declined' => 'The :attribute field is required when :other is declined.', + 'required_unless' => 'שדה :attribute נחוץ אלא אם כן :other הוא בין :values.', + 'required_with' => 'שדה :attribute נחוץ כאשר :values נמצא.', + 'required_with_all' => 'שדה :attribute נחוץ כאשר :values נמצא.', + 'required_without' => 'שדה :attribute נחוץ כאשר :values לא בנמצא.', + 'required_without_all' => 'שדה :attribute נחוץ כאשר אף אחד מ-:values נמצאים.', + 'same' => 'שדה :attribute ו-:other חייבים להיות זהים.', + 'size' => [ + 'array' => 'שדה :attribute חייב להכיל :size פריטים.', + 'file' => 'שדה :attribute חייב להיות :size קילובייטים.', + 'numeric' => 'שדה :attribute חייב להיות :size.', + 'string' => 'שדה :attribute חייב להיות :size תווים.', + ], + 'starts_with' => 'ה :attribute חייב להתחיל עם אחד מהבאים: :values', + 'string' => 'שדה :attribute חייב להיות מחרוזת.', + 'timezone' => 'שדה :attribute חייב להיות איזור תקני.', + 'ulid' => 'ה-:attribute חייב להיות ULID חוקי.', + 'unique' => 'שדה :attribute כבר תפוס.', + 'uploaded' => 'שדה :attribute ארעה שגיאה בעת ההעלאה.', + 'uppercase' => 'ה-:attribute חייב להיות רישיות.', + 'url' => 'שדה :attribute בעל פורמט שאינו תקין.', + 'uuid' => 'ה :attribute חייב להיות מזהה ייחודי אוניברסלי (UUID) חוקי.', + 'attributes' => [ + 'address' => 'כתובת', + 'affiliate_url' => 'כתובת אתר שותפים', + 'age' => 'גיל', + 'amount' => 'כמות', + 'announcement' => 'הַכרָזָה', + 'area' => 'אֵזוֹר', + 'audience_prize' => 'פרס קהל', + 'available' => 'זמין', + 'birthday' => 'יום הולדת', + 'body' => 'גוּף', + 'city' => 'עִיר', + 'compilation' => 'הַהדָרָה', + 'concept' => 'מוּשָׂג', + 'conditions' => 'תנאים', + 'content' => 'תוֹכֶן', + 'country' => 'מדינה', + 'cover' => 'כיסוי', + 'created_at' => 'נוצר ב', + 'creator' => 'בורא', + 'currency' => 'מַטְבֵּעַ', + 'current_password' => 'סיסמה נוכחית', + 'customer' => 'צרכן', + 'date' => 'תַאֲרִיך', + 'date_of_birth' => 'תאריך לידה', + 'dates' => 'תאריכים', + 'day' => 'יְוֹם', + 'deleted_at' => 'נמחק ב', + 'description' => 'תיאור', + 'display_type' => 'סוג תצוגה', + 'district' => 'מָחוֹז', + 'duration' => 'מֶשֶׁך', + 'email' => 'אימייל', + 'excerpt' => 'קטע', + 'filter' => 'לְסַנֵן', + 'finished_at' => 'סיים ב', + 'first_name' => 'שם פרטי', + 'gender' => 'מִין', + 'grand_prize' => 'פרס ראשון', + 'group' => 'קְבוּצָה', + 'hour' => 'שָׁעָה', + 'image' => 'תמונה', + 'image_desktop' => 'תמונת שולחן העבודה', + 'image_main' => 'תמונה ראשית', + 'image_mobile' => 'תמונה לנייד', + 'images' => 'תמונות', + 'is_audience_winner' => 'הוא זוכה בקהל', + 'is_hidden' => 'מוחבא', + 'is_subscribed' => 'הוא מנוי', + 'is_visible' => 'גלוי', + 'is_winner' => 'הוא מנצח', + 'items' => 'פריטים', + 'key' => 'מַפְתֵחַ', + 'last_name' => 'שם משפחה', + 'lesson' => 'שיעור', + 'line_address_1' => 'כתובת קו 1', + 'line_address_2' => 'כתובת קו 2', + 'login' => 'התחברות', + 'message' => 'הוֹדָעָה', + 'middle_name' => 'שם אמצעי', + 'minute' => 'דַקָה', + 'mobile' => 'נייד', + 'month' => 'חוֹדֶשׁ', + 'name' => 'שֵׁם', + 'national_code' => 'קוד לאומי', + 'number' => 'מספר', + 'password' => 'סיסמה', + 'password_confirmation' => 'אימות סיסמה', + 'phone' => 'טלפון', + 'photo' => 'תמונה', + 'portfolio' => 'תיק עבודות', + 'postal_code' => 'מיקוד', + 'preview' => 'תצוגה מקדימה', + 'price' => 'מחיר', + 'product_id' => 'מזהה מוצר', + 'product_uid' => 'UID של מוצר', + 'product_uuid' => 'מוצר UUID', + 'promo_code' => 'קוד קופון', + 'province' => 'מָחוֹז', + 'quantity' => 'כַּמוּת', + 'reason' => 'סיבה', + 'recaptcha_response_field' => 'שדה תגובת recaptcha', + 'referee' => 'שׁוֹפֵט', + 'referees' => 'שופטים', + 'reject_reason' => 'לדחות סיבה', + 'remember' => 'זכור', + 'restored_at' => 'שוחזר ב', + 'result_text_under_image' => 'טקסט התוצאה מתחת לתמונה', + 'role' => 'תַפְקִיד', + 'rule' => 'כְּלָל', + 'rules' => 'כללים', + 'second' => 'שְׁנִיָה', + 'sex' => 'מִין', + 'shipment' => 'מִשׁלוֹחַ', + 'short_text' => 'טקסט קצר', + 'size' => 'גודל', + 'skills' => 'כישורים', + 'slug' => 'שבלול', + 'specialization' => 'התמחות', + 'started_at' => 'התחיל ב', + 'state' => 'מדינה', + 'status' => 'סטָטוּס', + 'street' => 'רְחוֹב', + 'student' => 'סטוּדֶנט', + 'subject' => 'נושא', + 'tag' => 'תָג', + 'tags' => 'תגים', + 'teacher' => 'מוֹרֶה', + 'terms' => 'תנאים', + 'test_description' => 'תיאור מבחן', + 'test_locale' => 'מיקום בדיקה', + 'test_name' => 'שם המבחן', + 'text' => 'טֶקסט', + 'time' => 'זְמַן', + 'title' => 'כותרת', + 'type' => 'סוּג', + 'updated_at' => 'מעודכן ב', + 'user' => 'מִשׁתַמֵשׁ', + 'username' => 'שם משתמש', + 'value' => 'ערך', + 'year' => 'שָׁנָה', + ], +]; diff --git a/lang/vendor/filament-tables/he/table.php b/lang/vendor/filament-tables/he/table.php new file mode 100644 index 0000000..433da0e --- /dev/null +++ b/lang/vendor/filament-tables/he/table.php @@ -0,0 +1,20 @@ + [ + 'text' => [ + 'actions'=>[ + 'expand_list'=>':count פריטים נוספים', + 'collapse_list'=>'הסתר רשימה' + ] + ], + ], + 'filters'=>[ + 'actions'=>[ + 'apply'=>[ + 'label'=>'החל מסנן' + ] + ] + ] +]; diff --git a/resources/views/livewire/set-locale.blade.php b/resources/views/livewire/set-locale.blade.php new file mode 100644 index 0000000..6545f54 --- /dev/null +++ b/resources/views/livewire/set-locale.blade.php @@ -0,0 +1,13 @@ + + + {{ $locale }} + + + +@foreach($languages as $key => $value) + @if($key !== $locale) + + {{ $value }} + + @endif +@endforeach From fdebc4720ef14eeb97c9b1e23f8e1332410ea71c Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 27 Oct 2024 12:00:03 +0200 Subject: [PATCH 005/259] deploy after pull from dev --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Enums/ConstraintType.php | 37 ++++-- app/Filament/Widgets/CalendarWidget.php | 51 +++++--- app/Models/Constraint.php | 72 ++++++----- app/Models/Shift.php | 5 + app/Models/Soldier.php | 6 +- app/Models/Task.php | 4 + app/Models/User.php | 2 +- app/Providers/AppServiceProvider.php | 6 +- app/Providers/FilamentServiceProvider.php | 18 ++- app/Resources/ConstraintResource.php | 10 +- app/Resources/DepartmentResource.php | 55 ++++++++- .../Pages/CreateDepartment.php | 64 +--------- .../Pages/EditDepartment.php | 62 ++++++++++ app/Resources/MyConstraintResource.php | 10 +- app/Resources/MyShiftResource.php | 10 +- app/Resources/ProfileResource.php | 10 +- app/Resources/ShiftResource.php | 10 +- app/Resources/SoldierResource.php | 28 ++--- .../SoldierResource/Pages/CreateSoldier.php | 6 +- .../SoldierResource/Pages/EditSoldier.php | 6 + app/Resources/TaskResource.php | 114 ++++++++++++------ .../TaskResource/Pages/CreateTask.php | 11 +- app/Resources/TeamResource.php | 55 ++++++++- .../TeamResource/Pages/CreateTeam.php | 49 +------- app/Resources/TeamResource/Pages/EditTeam.php | 70 +++++++++++ database/factories/SoldierFactory.php | 6 +- database/factories/TaskFactory.php | 2 + ...2024_05_30_094012_create_soldier_table.php | 6 +- .../2024_05_30_100244_create_task_table.php | 2 + lang/he.json | 47 +++++--- public/robots.txt | 2 +- tests/Feature/CalendarWidgetTest.php | 9 +- tests/Feature/ConstraintTest.php | 70 ++++++----- tests/Feature/EditDepartmentTest.php | 32 +++++ tests/Feature/EditTeamTest.php | 32 +++++ tests/Feature/ReccurenceEventsTest.php | 23 +++- tests/Unit/ExampleTest.php | 4 - 38 files changed, 699 insertions(+), 309 deletions(-) create mode 100644 tests/Feature/EditDepartmentTest.php create mode 100644 tests/Feature/EditTeamTest.php diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 87d03f8..d4fe369 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/newspaceMali2 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/newspaceMali33 flavor: | latest=false tags: | diff --git a/app/Enums/ConstraintType.php b/app/Enums/ConstraintType.php index 242f6b0..96d3689 100644 --- a/app/Enums/ConstraintType.php +++ b/app/Enums/ConstraintType.php @@ -2,7 +2,9 @@ namespace App\Enums; -enum ConstraintType: string +use Filament\Support\Contracts\HasLabel; + +enum ConstraintType: string implements HasLabel { case NOT_WEEKEND = 'Not weekend'; case LOW_PRIORITY_NOT_WEEKEND = 'Low priority not weekend'; @@ -14,6 +16,21 @@ enum ConstraintType: string case MEDICAL = 'Medical'; case SCHOOL = 'School'; + public function getLabel(): string + { + return match ($this) { + self::NOT_WEEKEND => __('Not weekend'), + self::LOW_PRIORITY_NOT_WEEKEND => __('Low priority not weekend'), + self::NOT_TASK => __('Not task'), + self::LOW_PRIORITY_NOT_TASK => __('Low priority not task'), + self::NOT_EVENING => __('Not evening'), + self::NOT_THURSDAY_EVENING => __('Not Thursday evening'), + self::VACATION => __('Vacation'), + self::MEDICAL => __('Medical'), + self::SCHOOL => __('School'), + }; + } + public static function getPriority(): array { return [ @@ -47,15 +64,15 @@ public static function getLimit(): array public function getColor(): string|array|null { return match ($this) { - self::NOT_EVENING => '#FFCBCB', - self::NOT_THURSDAY_EVENING => '#FF9AFF', - self::NOT_WEEKEND => '#D7D7D7', - self::LOW_PRIORITY_NOT_WEEKEND => '#B0CEFF', - self::VACATION => '#B0F8FF', - self::MEDICAL => '#B0FFDD', - self::SCHOOL => '#BBFFB0', - self::NOT_TASK => '#E0FFB0', - self::LOW_PRIORITY_NOT_TASK => '#FFD6B0', + self::NOT_EVENING => '#ffd4e5', + self::NOT_THURSDAY_EVENING => '#ffdfba', + self::NOT_WEEKEND => '#ffffba', + self::LOW_PRIORITY_NOT_WEEKEND => '#adb2fb', + self::VACATION => '#bae1ff', + self::MEDICAL => '#f2d7fb', + self::SCHOOL => '#f9a7a7', + self::NOT_TASK => '#96ead7', + self::LOW_PRIORITY_NOT_TASK => '#baffc9', }; } } diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 9173fd0..a7dd39e 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -14,6 +14,7 @@ use Saade\FilamentFullCalendar\Actions\CreateAction; use Saade\FilamentFullCalendar\Actions\DeleteAction; use Saade\FilamentFullCalendar\Actions\EditAction; +use Saade\FilamentFullCalendar\Actions\viewAction; use Saade\FilamentFullCalendar\FilamentFullCalendarPlugin; use Saade\FilamentFullCalendar\Widgets\FullCalendarWidget; @@ -61,32 +62,38 @@ protected function getEventsByRole() $tableName = strtolower(class_basename($this->model)).'s'; return ($this->type === 'my_soldiers') ? match ($role) { - 'manager' => fn (Builder $query) => $query->where('soldier_id', '!=', $current_user_id), + 'manager' => fn (Builder $query) => $query + ->where('soldier_id', '!=', $current_user_id) + ->orWhereNull('soldier_id'), 'department-commander' => fn (Builder $query) => $query - ->join('soldiers', function ($join) { - $join->on('soldiers.id', '=', 'soldier_id') - ->orWhereNull('soldier_id'); + ->leftJoin('soldiers', 'soldier_id', '=', 'soldiers.id') + ->leftJoin('teams', 'soldiers.team_id', '=', 'teams.id') + ->where(function ($q) use ($current_user_id) { + $q->where('teams.department_id', '=', value: Department::where('commander_id', $current_user_id)->value('id')) + ->orWhere(function ($q) { + $q->whereNull('soldiers.team_id') + ->whereNull('soldier_id'); + }); }) - ->join('teams', 'soldiers.team_id', '=', 'teams.id') - ->where('teams.department_id', '=', Department::where('commander_id', $current_user_id)->value('id')) ->where(function ($q) use ($current_user_id) { $q->where('soldier_id', '!=', $current_user_id) ->orWhereNull('soldier_id'); }) - ->groupBy("{$tableName}.id") - ->distinct("{$tableName}.id"), + ->select("{$tableName}.*"), 'team-commander' => fn (Builder $query) => $query - ->join('soldiers', function ($join) { - $join->on('soldiers.id', '=', 'soldier_id') - ->orWhereNull('soldier_id'); + ->leftJoin('soldiers', 'soldiers.id', '=', 'soldier_id') + ->where(function ($q) use ($current_user_id) { + $q->where('soldiers.team_id', '=', Team::where('commander_id', $current_user_id)->value('id')) + ->orWhere(function ($q) { + $q->whereNull('soldiers.team_id') + ->whereNull('soldier_id'); + }); }) - ->where('soldiers.team_id', '=', Team::where('commander_id', $current_user_id)->value('id')) ->where(function ($q) use ($current_user_id) { $q->where('soldier_id', '!=', $current_user_id) ->orWhereNull('soldier_id'); }) - ->groupBy("{$tableName}.id") - ->distinct("{$tableName}.id"), + ->select("{$tableName}.*"), } : fn (Builder $query) => $query->where('soldier_id', $current_user_id); } @@ -108,18 +115,24 @@ function (Form $form, array $arguments) { 'end_date' => $arguments['end'] ?? null, ]); } - ), + )->label(label: $this->model::getTitle().' '.__('New'))->modalHeading(__('Create').' '.$this->model::getTitle()), ]; } } elseif ($this->model !== Shift::class) { FilamentFullCalendarPlugin::get()->editable(false); FilamentFullCalendarPlugin::get()->selectable(false); - } return []; } + public function getConfig(): array + { + return array_merge(parent::getConfig(), [ + 'locale' => app()->getLocale(), + ]); + } + protected function modalActions(): array { if ($this->type === 'my' || ($this->type === 'my_soldiers' && $this->model === Shift::class)) { @@ -138,6 +151,7 @@ protected function modalActions(): array $action->makeExtraModalAction('save', arguments: ['save' => true])->color('primary'), $action->makeExtraModalAction('cancel', arguments: ['cancel' => true])->color('primary'), ]) + ->modalHeading(__('Edit').' '.$this->model::getTitle()) ->action(function (array $data, array $arguments, Model $record): void { if ($arguments['cancel'] ?? false) { $this->refreshRecords(); @@ -155,4 +169,9 @@ protected function modalActions(): array return []; } } + + protected function viewAction(): Action + { + return ViewAction::make()->modalHeading(__('View').$this->model::getTitle()); + } } diff --git a/app/Models/Constraint.php b/app/Models/Constraint.php index 86548d1..479440f 100644 --- a/app/Models/Constraint.php +++ b/app/Models/Constraint.php @@ -54,23 +54,19 @@ public static function getSchema(): array Grid::make() ->visible(fn ($get) => in_array($get('constraint_type'), ['Medical', 'Vacation', 'School', 'Not task', 'Low priority not task'])) ->schema([ - DateTimePicker::make('start_date')->required(), - DateTimePicker::make('end_date')->required(), + DateTimePicker::make('start_date')->label(__('Start date'))->required(), + DateTimePicker::make('end_date')->label(__('End date'))->required(), ]), ]; } - private static function updateDates(callable $set, $state, Get $get): void - { - $dateRange = self::getDateForConstraint($state, $get); - $set('start_date', $dateRange['start_date']); - $set('end_date', $dateRange['end_date']); - } - private static function availableOptions($get): array { $start_date = Carbon::parse($get('start_date')); - $options = array_combine(array_map(fn ($enum) => $enum->value, ConstraintType::cases()), array_map(fn ($enum) => $enum->value, ConstraintType::cases())); + $options = array_combine( + array_map(fn ($enum) => $enum->value, ConstraintType::cases()), + array_map(fn ($enum) => $enum->getLabel(), ConstraintType::cases()) + ); if ($start_date->isFriday() || $start_date->isSaturday()) { unset($options[ConstraintType::NOT_THURSDAY_EVENING->value]); @@ -83,7 +79,8 @@ private static function availableOptions($get): array $usedCounts = self::getUsedCountsForCurrentMonth($get('start_date'), $get('end_date')); $limits = ConstraintType::getLimit(); - return array_filter($options, fn ($option) => ($limits[$option] ?? 0) === 0 || ($usedCounts[$option] ?? 0) < ($limits[$option] ?? 0)); + return array_filter($options, fn ($option) => ($limits[array_search($option, array_map(fn ($enum) => $enum->getLabel(), ConstraintType::cases()))] ?? 0) === 0 + || ($usedCounts[array_search($option, array_map(fn ($enum) => $enum->getLabel(), ConstraintType::cases()))] ?? 0) < ($limits[array_search($option, array_map(fn ($enum) => $enum->getLabel(), ConstraintType::cases()))] ?? 0)); } private static function getUsedCountsForCurrentMonth($startDate, $endDate): array @@ -105,25 +102,39 @@ private static function getUsedCountsForCurrentMonth($startDate, $endDate): arra return $usedCounts; } - private static function getDateForConstraint($constraintType, $get) + public static function updateDates(callable $set, $state, Get $get) { + $constraintType = $get('constraint_type'); $startDate = Carbon::parse($get('start_date')); $endDate = Carbon::parse($get('end_date')); - return match ($constraintType) { - 'Not evening', 'Not Thursday evening' => [ - 'start_date' => $startDate->setTimeFromTimeString('18:00:00'), - 'end_date' => $endDate->setTimeFromTimeString('23:59:00'), - ], - 'Not weekend', 'Low priority not weekend' => [ - 'start_date' => $startDate->startOfWeek(Carbon::THURSDAY), - 'end_date' => $endDate->next(modifier: Carbon::SUNDAY)->startOfDay(), - ], - 'Medical', 'Vacation', 'School', 'Not task', 'Low priority not task' => [ - 'start_date' => $get('start_date'), - 'end_date' => $get('end_date'), - ], - }; + switch ($constraintType) { + case 'Medical': + case 'Vacation': + case 'School': + case 'Not task': + case 'Low priority not task': + $set('start_date', $startDate->setTime(0, 0, 0)->toDateTimeString()); + $set('end_date', $endDate->setTime(23, 59, 0)->toDateTimeString()); + break; + + case 'Not evening': + case 'Not Thursday evening': + $set('start_date', $startDate->setTime(18, 0, 0)->toDateTimeString()); + $set('end_date', $endDate->setTime(23, 59, 0)->toDateTimeString()); + break; + + case 'Not weekend': + case 'Low priority not weekend': + $set('start_date', $startDate->startOfWeek(Carbon::THURSDAY)->toDateTimeString()); + $set('end_date', $endDate->next(Carbon::SUNDAY)->startOfDay()->toDateTimeString()); + break; + + default: + $set('start_date', $startDate->setTime(18, 0, 0)->toDateTimeString()); + $set('end_date', $endDate->setTime(23, 59, 0)->toDateTimeString()); + break; + } } protected static function booted() @@ -152,11 +163,18 @@ public function getSoldierNameAttribute() public function getConstraintNameAttribute() { - return $this->constraint_type.' - '.$this->soldier_name; + $translatedConstraint = __($this->constraint_type); + + return $translatedConstraint.' - '.$this->soldier_name; } public function getConstraintColorAttribute() { return ConstraintType::from($this->constraint_type)->getColor(); } + + public static function getTitle(): string|Htmlable + { + return __('Constraint'); + } } diff --git a/app/Models/Shift.php b/app/Models/Shift.php index 934cd38..82bbff8 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -53,4 +53,9 @@ public static function getSchema(): array ]; } + + public static function getTitle(): string|Htmlable + { + return __('Shift'); + } } diff --git a/app/Models/Soldier.php b/app/Models/Soldier.php index 948193f..cd10866 100644 --- a/app/Models/Soldier.php +++ b/app/Models/Soldier.php @@ -20,9 +20,9 @@ class Soldier extends Model 'enlist_date', 'course', 'has_exemption', - 'max_shift', - 'max_night', - 'max_weekend', + 'max_shifts', + 'max_nights', + 'max_weekends', 'capacity', 'capacity_hold', 'is_trainee', diff --git a/app/Models/Task.php b/app/Models/Task.php index eeeb18c..df7311e 100644 --- a/app/Models/Task.php +++ b/app/Models/Task.php @@ -19,12 +19,16 @@ class Task extends Model 'type', 'color', 'is_alert', + 'is_weekend', + 'is_night', 'department_name', 'recurrence', ]; protected $casts = [ 'is_alert' => 'boolean', + 'is_weekend' => 'boolean', + 'is_night' => 'boolean', 'parallel_weight' => Integer::class, 'recurrence' => 'array', 'duration' => Integer::class, diff --git a/app/Models/User.php b/app/Models/User.php index aa7b299..0260257 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -45,7 +45,7 @@ public function getFilamentName(): string { return $this->displayName; } - + public function viewAny(User $user): bool { return $user->hasRole('manager'); diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 17f5f9a..09edc2a 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -17,10 +17,10 @@ public function register(): void } public function boot(): void - { + { if (config('app.env') !== 'local') { - URL::forceScheme('https'); - } + URL::forceScheme('https'); + } FilamentView::registerRenderHook( PanelsRenderHook::USER_MENU_BEFORE, fn (): string => Blade::render('@livewire(\'set-locale\')'), diff --git a/app/Providers/FilamentServiceProvider.php b/app/Providers/FilamentServiceProvider.php index 04824e6..b6ccc04 100644 --- a/app/Providers/FilamentServiceProvider.php +++ b/app/Providers/FilamentServiceProvider.php @@ -6,9 +6,11 @@ use App\Filament\Widgets\CalendarWidget; use App\Http\Middleware\SetLocale; use App\Resources\ProfileResource\Pages\ListProfiles; +use Filament\Facades\Filament; use Filament\Http\Middleware\Authenticate; use Filament\Http\Middleware\DisableBladeIconComponents; use Filament\Http\Middleware\DispatchServingFilamentEvent; +use Filament\Navigation\NavigationGroup; use Filament\Panel; use Filament\PanelProvider; use Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse; @@ -63,6 +65,8 @@ public function panel(Panel $panel): Panel ->pages([ ListProfiles::class, ]) + ->sidebarWidth('17rem') + ->maxContentWidth('full') ->viteTheme('resources/css/app.css') ->widgets([ CalendarWidget::class, @@ -74,5 +78,17 @@ public function register(): void parent::register(); } - public function boot() {} + public function boot() + { + Filament::serving(function () { + Filament::registerNavigationGroups([ + NavigationGroup::make() + ->label(fn (): string => __('Constraints')) + ->icon('heroicon-o-calendar-days'), + NavigationGroup::make() + ->label(fn (): string => __('Shifts')) + ->icon('heroicon-o-calendar'), + ]); + }); + } } diff --git a/app/Resources/ConstraintResource.php b/app/Resources/ConstraintResource.php index f316d51..744289e 100644 --- a/app/Resources/ConstraintResource.php +++ b/app/Resources/ConstraintResource.php @@ -2,7 +2,6 @@ namespace App\Resources; -use App\Filament\Clusters\Constraints; use App\Models\Constraint; use App\Resources\ConstraintResource\Pages; use Filament\Resources\Resource; @@ -10,15 +9,18 @@ class ConstraintResource extends Resource { - protected static ?string $cluster = Constraints::class; - protected static ?string $model = Constraint::class; protected static ?string $label = 'My Soldiers Constraint'; protected static ?string $slug = 'my-soldiers-constraint'; - protected static ?string $navigationIcon = 'heroicon-o-calendar-days'; + protected static ?int $navigationSort = 2; + + public static function getNavigationGroup(): string + { + return __('Constraints'); + } public static function getModelLabel(): string { diff --git a/app/Resources/DepartmentResource.php b/app/Resources/DepartmentResource.php index 81c3a33..2b68559 100644 --- a/app/Resources/DepartmentResource.php +++ b/app/Resources/DepartmentResource.php @@ -10,6 +10,7 @@ use Filament\Forms\Components\Select; use Filament\Forms\Components\TextInput; use Filament\Forms\Form; +use Filament\Notifications\Notification; use Filament\Resources\Resource; use Filament\Tables\Actions\Action; use Filament\Tables\Actions\ActionGroup; @@ -48,7 +49,6 @@ public static function form(Form $form): Form ->required(), Select::make('commander_id') ->label(__('Commander')) - ->relationship('commander', 'id') ->options( fn () => Cache::remember('users', 30 * 60, function () { @@ -87,9 +87,6 @@ public static function table(Table $table): Table return $query->where('id', request()->input('department_id')); } }) - ->filters([ - // - ]) ->actions([ ActionGroup::make([ Action::make('teams') @@ -114,11 +111,61 @@ public static function table(Table $table): Table ]); } + public static function checkCommander($teams, $departments, $data) + { + Notification::make() + ->title(__('Save department')) + ->persistent() + ->body(__('The commander you selected is already registered as a commander. His selection will leave his :type without a commander. Are you sure?', ['type' => $teams->isNotEmpty() ? 'soldiers' : 'teams'])) + ->actions([ + \Filament\Notifications\Actions\Action::make($teams->isNotEmpty() ? __('View team') : __('View department')) + ->button() + ->url( + fn () => $teams->isNotEmpty() ? + route('filament.app.resources.teams.index', ['commander_id' => $data['commander_id']]) : + route('filament.app.resources.departments.index', ['commander_id' => $data['commander_id']]) + ), + \Filament\Notifications\Actions\Action::make('confirm') + ->label(__('Confirm')) + ->button() + ->dispatch('confirmCreate', data: ['teams' => $teams, 'departments' => $departments]), + \Filament\Notifications\Actions\Action::make(__('Cancel')) + ->button() + ->close(), + ]) + ->send(); + } + + public static function confirm(array $teams, array $departments, $commander_id): void + { + if (collect($teams)->isNotEmpty()) { + self::unAssignTeamCommander($commander_id); + } + if (collect($departments)->isNotEmpty()) { + self::unAssignDepartmentCommander($commander_id); + } + } + + protected static function unAssignTeamCommander($commander_id): void + { + Team::where('commander_id', $commander_id) + ->update(['commander_id' => null]); + $user = User::where('userable_id', $commander_id)->first(); + $user->removeRole('team-commander'); + } + + protected static function unAssignDepartmentCommander($commander_id): void + { + Department::where('commander_id', $commander_id) + ->update(['commander_id' => null]); + } + public static function getPages(): array { return [ 'index' => Pages\ListDepartments::route('/'), 'create' => Pages\CreateDepartment::route('/create'), + 'edit' => Pages\EditDepartment::route('/{record}/edit'), ]; } } diff --git a/app/Resources/DepartmentResource/Pages/CreateDepartment.php b/app/Resources/DepartmentResource/Pages/CreateDepartment.php index fe86adf..ac72dbe 100644 --- a/app/Resources/DepartmentResource/Pages/CreateDepartment.php +++ b/app/Resources/DepartmentResource/Pages/CreateDepartment.php @@ -6,62 +6,28 @@ use App\Models\Team; use App\Models\User; use App\Resources\DepartmentResource; -use Filament\Notifications\Actions\Action; -use Filament\Notifications\Notification; use Filament\Resources\Pages\CreateRecord; use Filament\Support\Exceptions\Halt; -use Illuminate\Database\Eloquent\Collection; use Throwable; class CreateDepartment extends CreateRecord { protected static string $resource = DepartmentResource::class; - public ?Collection $teams = null; - - public ?Collection $departments = null; - protected function beforeCreate(): void { - $this->teams = Team::where('commander_id', $this->data['commander_id'])->get(); - $this->departments = Department::where('commander_id', $this->data['commander_id'])->get(); - if ($this->teams->isNotEmpty() || $this->departments->isNotEmpty()) { - Notification::make() - ->title(__('Save department')) - ->persistent() - ->body(__('The commander you selected is already registered as a commander. His selection will leave his soldiers without a commander. Are you sure?')) - ->actions([ - Action::make($this->teams->isNotEmpty() ? __('View team') : __('View department')) - ->button() - ->url( - fn () => $this->teams->isNotEmpty() ? - route('filament.app.resources.teams.index', ['commander_id' => $this->data['commander_id']]) : - route('filament.app.resources.departments.index', ['commander_id' => $this->data['commander_id']]) - - ), - Action::make('confirm') - ->label(__('Confirm')) - ->button() - ->emit('confirmCreate'), - Action::make(__('Cancel')) - ->button() - ->close(), - ]) - ->send(); + $teams = Team::where('commander_id', $this->data['commander_id'])->get(); + $departments = Department::where('commander_id', $this->data['commander_id'])->get(); + if ($teams->isNotEmpty() || $departments->isNotEmpty()) { + DepartmentResource::checkCommander($teams, $departments, $this->data); $this->halt(); } } - public function confirmCreate(): void + public function confirmCreate($teams, $departments): void { + DepartmentResource::confirm($teams, $departments, $this->data['commander_id']); try { - if ($this->teams->isNotEmpty()) { - $this->updateRole(); - $this->unAssignTeamCommander(); - } - if ($this->departments->isNotEmpty()) { - $this->unAssignDepartmentCommander(); - } $this->beginDatabaseTransaction(); $data = $this->form->getState(); $this->record = $this->handleRecordCreation($data); @@ -84,24 +50,6 @@ public function confirmCreate(): void } } - protected function updateRole(): void - { - $user = User::where('userable_id', $this->data['commander_id'])->first(); - $user->assignRole('department-commander'); - } - - protected function unAssignTeamCommander(): void - { - Team::where('commander_id', $this->data['commander_id']) - ->update(['commander_id' => null]); - } - - protected function unAssignDepartmentCommander(): void - { - Department::where('commander_id', $this->data['commander_id']) - ->update(['commander_id' => null]); - } - protected $listeners = [ 'confirmCreate' => 'confirmCreate', ]; diff --git a/app/Resources/DepartmentResource/Pages/EditDepartment.php b/app/Resources/DepartmentResource/Pages/EditDepartment.php index 1a0122b..b0db5f8 100644 --- a/app/Resources/DepartmentResource/Pages/EditDepartment.php +++ b/app/Resources/DepartmentResource/Pages/EditDepartment.php @@ -2,9 +2,14 @@ namespace App\Resources\DepartmentResource\Pages; +use App\Models\Department; +use App\Models\Team; +use App\Models\User; use App\Resources\DepartmentResource; use Filament\Actions; use Filament\Resources\Pages\EditRecord; +use Filament\Support\Exceptions\Halt; +use Throwable; class EditDepartment extends EditRecord { @@ -16,4 +21,61 @@ protected function getHeaderActions(): array Actions\DeleteAction::make(), ]; } + + protected function beforeSave(): void + { + $teams = Team::where('commander_id', $this->data['commander_id'])->get(); + $departments = Department::where('commander_id', $this->data['commander_id'])->get(); + if ($teams->isNotEmpty() || $departments->isNotEmpty()) { + DepartmentResource::checkCommander($teams, $departments, $this->data); + $this->halt(); + } + } + + public function confirmCreate($teams, $departments): void + { + DepartmentResource::confirm($teams, $departments, $this->data['commander_id']); + try { + $this->beginDatabaseTransaction(); + $data = $this->form->getState(); + $this->handleRecordUpdate($this->getRecord(), $data); + $this->callHook('afterSave'); + $this->commitDatabaseTransaction(); + } catch (Halt $exception) { + $exception->shouldRollbackDatabaseTransaction() ? + $this->rollBackDatabaseTransaction() : + $this->commitDatabaseTransaction(); + + return; + } catch (Throwable $exception) { + $this->rollBackDatabaseTransaction(); + throw $exception; + } + $this->rememberData(); + $this->getSavedNotification()?->send(); + $redirectUrl = $this->getRedirectUrl(); + $this->redirect($redirectUrl); + } + + protected $listeners = [ + 'confirmCreate' => 'confirmCreate', + ]; + + protected function getRedirectUrl(): string + { + $resource = static::getResource(); + + return $resource::getUrl('index'); + } + + protected function afterSave() + { + $this->assignRoles(); + } + + protected function assignRoles() + { + $user = User::where('userable_id', $this->record->commander_id)->first(); + $user->assignRole('department-commander'); + } } diff --git a/app/Resources/MyConstraintResource.php b/app/Resources/MyConstraintResource.php index 731d112..cba193e 100644 --- a/app/Resources/MyConstraintResource.php +++ b/app/Resources/MyConstraintResource.php @@ -2,7 +2,6 @@ namespace App\Resources; -use App\Filament\Clusters\Constraints; use App\Models\Constraint; use App\Resources\MyConstraintResource\Pages; use Filament\Resources\Resource; @@ -10,15 +9,18 @@ class MyConstraintResource extends Resource { - protected static ?string $cluster = Constraints::class; - protected static ?string $model = Constraint::class; protected static ?string $label = 'My Constraint'; protected static ?string $slug = 'my-constraint'; - protected static ?string $navigationIcon = 'heroicon-o-calendar-days'; + protected static ?int $navigationSort = 1; + + public static function getNavigationGroup(): string + { + return __('Constraints'); + } public static function getModelLabel(): string { diff --git a/app/Resources/MyShiftResource.php b/app/Resources/MyShiftResource.php index a4af10d..b70a339 100644 --- a/app/Resources/MyShiftResource.php +++ b/app/Resources/MyShiftResource.php @@ -2,7 +2,6 @@ namespace App\Resources; -use App\Filament\Clusters\Shifts; use App\Models\Shift; use App\Resources\MyShiftResource\Pages; use Filament\Resources\Resource; @@ -10,15 +9,18 @@ class MyShiftResource extends Resource { - protected static ?string $cluster = Shifts::class; - protected static ?string $model = Shift::class; protected static ?string $label = 'My Shifts'; protected static ?string $slug = 'my-shifts'; - protected static ?string $navigationIcon = 'heroicon-o-calendar'; + protected static ?int $navigationSort = 1; + + public static function getNavigationGroup(): string + { + return __('Shifts'); + } public static function getModelLabel(): string { diff --git a/app/Resources/ProfileResource.php b/app/Resources/ProfileResource.php index d184060..05069ce 100644 --- a/app/Resources/ProfileResource.php +++ b/app/Resources/ProfileResource.php @@ -50,13 +50,13 @@ public static function form(Form $form): Form Section::make([ Select::make('qualifications') ->label(__('Qualifications')) - ->placeholder(__('Select an option')) + ->placeholder(__('Select qualifications')) ->options(Task::all()->pluck('name', 'name')), DatePicker::make('enlist_date')->label(__('Enlist date'))->seconds(false), ])->columns(2), Section::make([ Toggle::make('is_permanent')->Label(__('Is permanent')), - Toggle::make('has_exemption')->label(__('Has exemption')), + Toggle::make('has_exemption')->label(__('Exemption')), Toggle::make('is_trainee')->label(__('Is trainee')), Toggle::make('is_mabat')->label(__('Is mabat')), ])->columns(4), @@ -85,12 +85,12 @@ public static function table(Table $table): Table })->weight(weight: FontWeight::SemiBold)->description(__('Full name'), position: 'above')->size(TextColumnSize::Large), TextColumn::make('enlist_date')->weight(weight: FontWeight::SemiBold)->description(__('Enlist date'), position: 'above')->size(TextColumnSize::Large)->date(), TextColumn::make('course')->weight(weight: FontWeight::SemiBold)->description(__('Course'), position: 'above')->size(TextColumnSize::Large), - TextColumn::make('max_shift')->weight(weight: FontWeight::SemiBold)->description(__('Max shift'), position: 'above')->size(TextColumnSize::Large), + TextColumn::make('max_shifts')->weight(weight: FontWeight::SemiBold)->description(__('Max shifts'), position: 'above')->size(TextColumnSize::Large), ]), Stack::make([ - TextColumn::make('max_night')->weight(weight: FontWeight::SemiBold)->description(__('Max night'), position: 'above')->size(TextColumnSize::Large), - TextColumn::make('max_weekend')->weight(weight: FontWeight::SemiBold)->description(__('Max weekend'), position: 'above')->size(TextColumnSize::Large), + TextColumn::make('max_nights')->weight(weight: FontWeight::SemiBold)->description(__('Max nights'), position: 'above')->size(TextColumnSize::Large), + TextColumn::make('max_weekends')->weight(weight: FontWeight::SemiBold)->description(__('Max weekends'), position: 'above')->size(TextColumnSize::Large), TextColumn::make('capacity')->weight(weight: FontWeight::SemiBold)->description(__('Capacity'), position: 'above')->size(TextColumnSize::Large), TextColumn::make('capacity_hold')->weight(weight: FontWeight::SemiBold)->description(__('Capacity hold'), position: 'above')->size(TextColumnSize::Large), TextColumn::make('qualifications')->weight(weight: FontWeight::SemiBold)->description(__('Qualifications'), position: 'above')->size(TextColumnSize::Large), diff --git a/app/Resources/ShiftResource.php b/app/Resources/ShiftResource.php index e95fdbf..cf2a5f8 100644 --- a/app/Resources/ShiftResource.php +++ b/app/Resources/ShiftResource.php @@ -2,7 +2,6 @@ namespace App\Resources; -use App\Filament\Clusters\Shifts; use App\Models\Shift; use App\Resources\ShiftResource\Pages; use Filament\Resources\Resource; @@ -10,15 +9,18 @@ class ShiftResource extends Resource { - protected static ?string $cluster = Shifts::class; - protected static ?string $model = Shift::class; protected static ?string $label = 'My Soldiers Shifts'; protected static ?string $slug = 'my-soldiers-shifts'; - protected static ?string $navigationIcon = 'heroicon-o-calendar'; + protected static ?int $navigationSort = 2; + + public static function getNavigationGroup(): string + { + return __('Shifts'); + } public static function getModelLabel(): string { diff --git a/app/Resources/SoldierResource.php b/app/Resources/SoldierResource.php index 17d0939..d913866 100644 --- a/app/Resources/SoldierResource.php +++ b/app/Resources/SoldierResource.php @@ -67,21 +67,21 @@ public static function table(Table $table): Table }) ->searchable(['user->first_name', 'user->last_name']) ->sortable(), + BooleanColumn::make('is_reservist')->label(__('Reservist')), BadgeColumn::make('gender') ->label(__('Gender')) ->formatStateUsing(fn ($state) => $state ? __('Male') : __('Female')) ->badge() ->color(fn ($state) => $state ? 'info' : 'primary') ->sortable(), - BooleanColumn::make('is_reservist')->label(__('Reservist')), TextColumn::make('reserve_dates')->label(__('Reserve dates'))->date()->listWithLineBreaks()->limitList(1)->expandableLimitedList()->placeholder('---')->toggleable(isToggledHiddenByDefault: true), TextColumn::make('next_reserve_dates')->label(__('Next reserve dates'))->date()->listWithLineBreaks()->limitList(1)->expandableLimitedList()->placeholder('---')->toggleable(isToggledHiddenByDefault: true), TextColumn::make('enlist_date')->label(__('Enlist date'))->sortable()->date()->toggleable(), TextColumn::make('course')->label(__('Course'))->toggleable(isToggledHiddenByDefault: true), - BooleanColumn::make('has_exemption')->label(__('Has exemption'))->toggleable(isToggledHiddenByDefault: true), - TextColumn::make('max_shift')->label(__('Max shift'))->toggleable(isToggledHiddenByDefault: true), - TextColumn::make('max_night')->label(__('Max night'))->toggleable(isToggledHiddenByDefault: true), - TextColumn::make('max_weekend')->label(__('Max weekend'))->toggleable(isToggledHiddenByDefault: true), + BooleanColumn::make('has_exemption')->label(__('Exemption'))->toggleable(isToggledHiddenByDefault: true), + TextColumn::make('max_shifts')->label(__('Max shifts'))->toggleable(isToggledHiddenByDefault: true), + TextColumn::make('max_nights')->label(__('Max nights'))->toggleable(isToggledHiddenByDefault: true), + TextColumn::make('max_weekends')->label(__('Max weekends'))->toggleable(isToggledHiddenByDefault: true), TextColumn::make('capacity')->label(__('Capacity'))->toggleable(isToggledHiddenByDefault: true), TextColumn::make('capacity_hold')->label(__('Capacity hold'))->numeric()->toggleable(), BooleanColumn::make('is_trainee')->label(__('Is trainee'))->toggleable(isToggledHiddenByDefault: true), @@ -100,9 +100,9 @@ public static function table(Table $table): Table ) ->filters([ NumberFilter::make('course')->label(__('Course')), - NumberFilter::make('max_shift')->label(__('Max shift')), - NumberFilter::make('max_night')->label(__('Max night')), - NumberFilter::make('max_weekend')->label(__('Max weekend')), + NumberFilter::make('max_shifts')->label(__('Max shifts')), + NumberFilter::make('max_nights')->label(__('Max nights')), + NumberFilter::make('max_weekends')->label(__('Max weekends')), NumberFilter::make('capacity')->label(__('Capacity')), NumberFilter::make('capacity_hold')->label(__('Capacity hold')), SelectFilter::make('gender') @@ -116,7 +116,7 @@ public static function table(Table $table): Table ->label(__('Qualifications')) ->multiple() ->searchable() - ->options(Task::all()->pluck('name', 'name')) + ->options(Task::all()->pluck('name', 'type')) ->query(function (Builder $query, array $data) { return collect($data['values'])->map(fn ($qualification) => $query->whereJsonContains('qualifications', $qualification)); }) @@ -130,7 +130,7 @@ public static function table(Table $table): Table ->query(fn (Builder $query): Builder => $query->where('is_mabat', true)) ->toggle(), Filter::make('has_exemption') - ->label(__('Has exemption')) + ->label(__('Exemption')) ->query(fn (Builder $query): Builder => $query->where('has_exemption', true)) ->toggle(), Filter::make('is_trainee') @@ -295,9 +295,9 @@ public static function constraints(): array { return [ Section::make([ - TextInput::make('max_shift')->label(__('Max shift'))->numeric()->minValue(0)->required()->default(0), - TextInput::make('max_night')->label(__('Max night'))->numeric()->minValue(0)->maxValue(31)->required()->default(0), - TextInput::make('max_weekend')->label(__('Max weekend'))->default('')->numeric()->minValue(0)->maxValue(5)->required()->default(0), + TextInput::make('max_shifts')->label(__('Max shifts'))->numeric()->minValue(0)->required()->default(0), + TextInput::make('max_nights')->label(__('Max nights'))->numeric()->minValue(0)->maxValue(31)->required()->default(0), + TextInput::make('max_weekends')->label(__('Max weekends'))->default('')->numeric()->minValue(0)->maxValue(5)->required()->default(0), ]) ->columns(3), Split::make([ @@ -311,7 +311,7 @@ public static function constraints(): array Select::make('qualifications') ->label(__('Qualifications')) ->multiple() - ->placeholder(__('Select an option')) + ->placeholder(__('Select qualifications')) ->options(Task::all()->pluck('name', 'name')), ])->columns(2) ->columnSpan('full'), ]; diff --git a/app/Resources/SoldierResource/Pages/CreateSoldier.php b/app/Resources/SoldierResource/Pages/CreateSoldier.php index b0a0258..12b1109 100644 --- a/app/Resources/SoldierResource/Pages/CreateSoldier.php +++ b/app/Resources/SoldierResource/Pages/CreateSoldier.php @@ -27,9 +27,9 @@ public function beforeCreate() if ($userName = $userName->get($this->data['user']['first_name']) == $this->data['user']['last_name']) { Notification::make() ->warning() - ->title('This name already exists in the system!') - ->body('Add an identifier to the name so that it is not the same as another name. - For example: '.$this->data['user']['first_name'].' '.$this->data['user']['last_name'].'2') + ->title(__('This name already exists in the system!')) + ->body(__('Add an identifier to the name so that it is not the same as another name. For example: ') + .$this->data['user']['first_name'].' '.$this->data['user']['last_name'].'2') ->persistent() ->send(); diff --git a/app/Resources/SoldierResource/Pages/EditSoldier.php b/app/Resources/SoldierResource/Pages/EditSoldier.php index 44223a5..15e3651 100644 --- a/app/Resources/SoldierResource/Pages/EditSoldier.php +++ b/app/Resources/SoldierResource/Pages/EditSoldier.php @@ -23,4 +23,10 @@ protected function getRedirectUrl(): string { return $this->getResource()::getUrl('index'); } + + protected function afterSave(): void + { + $user = $this->record->user; + $user->getRoleNames()->isEmpty() ? $user->assignRole('soldier') : null; + } } diff --git a/app/Resources/TaskResource.php b/app/Resources/TaskResource.php index 32d5afb..4a43f8b 100644 --- a/app/Resources/TaskResource.php +++ b/app/Resources/TaskResource.php @@ -70,6 +70,9 @@ public static function table(Table $table): Table TextColumn::make('parallel_weight') ->description(__('Parallel weight'), position: 'above') ->size(TextColumnSize::Large), + TextColumn::make('department_name') + ->description(__('Department'), position: 'above') + ->size(TextColumnSize::Large), ColorColumn::make('color') ->copyable() ->copyMessage('Color code copied'), @@ -86,9 +89,15 @@ public static function table(Table $table): Table ->description(__('Alert'), position: 'above') ->size(TextColumnSize::Large) ->formatStateUsing(fn ($state) => $state ? __('Yes') : __('No')), - TextColumn::make('department_name') - ->description(__('Department'), position: 'above') - ->size(TextColumnSize::Large), + TextColumn::make('is_weekend') + ->description(__('Is weekend'), position: 'above') + ->size(TextColumnSize::Large) + ->formatStateUsing(fn ($state) => $state ? __('Yes') : __('No')), + TextColumn::make('is_night') + ->description(__('Is night'), position: 'above') + ->size(TextColumnSize::Large) + ->formatStateUsing(fn ($state) => $state ? __('Yes') : __('No')), + ]) ->space(2) ->extraAttributes(['style' => 'display: flex; flex-direction: row; flex-wrap: wrap; justify-content: space-between; align-items: center;']), @@ -155,34 +164,60 @@ public static function getPages(): array public static function getTaskDetails(): array { return [ - TextInput::make('name') - ->label(__('Name')) - ->required(), - TimePicker::make('start_hour') - ->label(__('Start hour')) - ->seconds(false) - ->required(), - TimePicker::make('duration') - ->seconds(false) - ->label(__('Duration')) - ->required(), - Select::make('parallel_weight') - ->label(__('Parallel weight')) - ->options(fn (): array => collect(range(0, 12))->mapWithKeys(fn ($number) => [(string) ($number / 4) => (string) ($number / 4)])->toArray()) - ->required(), - TextInput::make('type') - ->label(__('Type')) - ->required(), - ColorPicker::make('color') - ->label(__('Color')) - ->required(), - Toggle::make('is_alert') - ->label(__('Is alert')), - Select::make('department_name') - ->label(__('Department')) - ->options(Department::all()->mapWithKeys(function ($department) { - return [$department->name => $department->name]; - })), + Section::make('') + ->schema([ + TextInput::make('name') + ->label(__('Name')) + ->required(), + Select::make('department_name') + ->label(__('Department')) + ->options(Department::all()->mapWithKeys(function ($department) { + return [$department->name => $department->name]; + })), + ]) + ->columns(2), + Section::make('') + ->schema([ + TextInput::make('type') + ->label(__('Type')) + ->required(), + Select::make('parallel_weight') + ->label(__('Parallel weight')) + ->options(fn (): array => collect(range(0, 12))->mapWithKeys(fn ($number) => [(string) ($number / 4) => (string) ($number / 4)])->toArray()) + ->required(), + ColorPicker::make('color') + ->label(__('Color')) + ->required(), + ]) + ->columns(3), + + ]; + } + + public static function additionalDetails(): array + { + return [ + Section::make('') + ->schema([ + TimePicker::make('start_hour') + ->label(__('Start hour')) + ->seconds(false) + ->required(), + TextInput::make('duration') + ->label(__('Duration')) + ->required(), + ]) + ->columns(2), + Section::make('') + ->schema([ + Toggle::make('is_alert') + ->label(__('Is alert')), + Toggle::make('is_weekend') + ->label(__('Is weekend')), + Toggle::make('is_night') + ->label(__('Is night')), + ]) + ->columns(3), ]; } @@ -193,20 +228,19 @@ public static function getRecurrence(): array ->label(__('Type')) ->options(collect(RecurrenceType::cases())->mapWithKeys(fn ($type) => [$type->value => $type->getLabel()]))->live() ->required() - ->inline() - ->grouped(), + ->inline(), Select::make('recurrence.days_in_week') ->label(__('Days in week')) ->multiple() ->options( [ - '1' => __('Sunday'), - '2' => __('Monday'), - '3' => __('Tuesday'), - '4' => __('Wednesday'), - '5' => __('Thursday'), - '6' => __('Friday'), - '7' => __('Saturday'), + 'Sunday' => __('Sunday'), + 'Monday' => __('Monday'), + 'Tuesday' => __('Tuesday'), + 'Wednesday' => __('Wednesday'), + 'Thursday' => __('Thursday'), + 'Friday' => __('Friday'), + 'Saturday' => __('Saturday'), ] ) ->visible(fn (Get $get): bool => $get('recurrence.type') === 'Weekly') diff --git a/app/Resources/TaskResource/Pages/CreateTask.php b/app/Resources/TaskResource/Pages/CreateTask.php index 5c09919..cadc98f 100644 --- a/app/Resources/TaskResource/Pages/CreateTask.php +++ b/app/Resources/TaskResource/Pages/CreateTask.php @@ -19,8 +19,10 @@ class CreateTask extends CreateRecord protected function afterCreate(): void { $task = Task::latest()->first(); - $reccurenceEvents = new ReccurenceEvents; - $reccurenceEvents->oneTimeTask($task); + if ($task->recurrence['type'] == 'OneTime') { + $reccurenceEvents = new ReccurenceEvents; + $reccurenceEvents->oneTimeTask($task); + } } public static function getSteps(): array @@ -31,6 +33,11 @@ public static function getSteps(): array ->schema([ Section::make()->schema(TaskResource::getTaskDetails())->columns(), ]), + Step::make('Additional_details') + ->label(__('Additional settings')) + ->schema([ + Section::make()->schema(TaskResource::additionalDetails())->columns(), + ]), Step::make('Recurrence') ->label(__('Recurrence')) ->schema([ diff --git a/app/Resources/TeamResource.php b/app/Resources/TeamResource.php index c898c0e..66cad7f 100644 --- a/app/Resources/TeamResource.php +++ b/app/Resources/TeamResource.php @@ -11,6 +11,7 @@ use Filament\Forms\Components\Select; use Filament\Forms\Components\TextInput; use Filament\Forms\Form; +use Filament\Notifications\Notification; use Filament\Resources\Resource; use Filament\Tables\Actions\Action; use Filament\Tables\Actions\ActionGroup; @@ -75,6 +76,7 @@ public static function form(Form $form): Form return [$user->userable_id => $user->displayName]; }) ) + ->placeholder(__('Add a team member')) ->multiple() ->searchable(), ])->columns(2), @@ -112,8 +114,6 @@ public static function table(Table $table): Table return $query->where('department_id', request()->input('department_id')); } }) - ->filters([ - ]) ->actions([ ActionGroup::make([ Action::make('members') @@ -160,6 +160,56 @@ public static function table(Table $table): Table ]); } + public static function checkCommander($teams, $departments, $data) + { + Notification::make() + ->title(__('Save team')) + ->persistent() + ->body(__('The commander you selected is already registered as a commander. His selection will leave his soldiers without a commander. Are you sure?')) + ->actions([ + \Filament\Notifications\Actions\Action::make(__('View ').($teams->isNotEmpty() ? __('Team') : __('Department'))) + ->button() + ->url( + fn () => $teams->isNotEmpty() ? + route('filament.app.resources.teams.index', ['commander_id' => $data['commander_id']]) : + route('filament.app.resources.departments.index', ['commander_id' => $data['commander_id']]) + ), + \Filament\Notifications\Actions\Action::make(__('Confirm')) + ->button() + ->dispatch('confirmCreate', data: ['teams' => $teams, 'departments' => $departments]), + \Filament\Notifications\Actions\Action::make(__('Cancel')) + ->button() + ->close(), + ]) + ->send(); + } + + public static function confirm(array $teams, array $departments, $commander_id) + { + + if (collect($teams)->isNotEmpty()) { + self::unAssignTeamCommander($commander_id); + } + if (collect($departments)->isNotEmpty()) { + self::unAssignDepartmentCommander($commander_id); + } + } + + protected static function unAssignTeamCommander($commander_id) + { + Team::where('commander_id', $commander_id) + ->update(['commander_id' => null]); + } + + protected static function unAssignDepartmentCommander($commander_id): void + { + Department::where('commander_id', $commander_id) + ->update(['commander_id' => null]); + + $user = User::where('userable_id', $commander_id)->first(); + $user->removeRole('department-commander'); + } + public static function getEloquentQuery(): Builder { if (auth()->user()->hasRole('manager')) { @@ -174,6 +224,7 @@ public static function getPages(): array return [ 'index' => Pages\ListTeams::route('/'), 'create' => Pages\CreateTeam::route('/create'), + 'edit' => Pages\EditTeam::route('/{record}/edit'), ]; } } diff --git a/app/Resources/TeamResource/Pages/CreateTeam.php b/app/Resources/TeamResource/Pages/CreateTeam.php index 6ea9f76..a68c064 100644 --- a/app/Resources/TeamResource/Pages/CreateTeam.php +++ b/app/Resources/TeamResource/Pages/CreateTeam.php @@ -7,65 +7,28 @@ use App\Models\Team; use App\Models\User; use App\Resources\TeamResource; -use Filament\Notifications\Actions\Action; -use Filament\Notifications\Notification; use Filament\Resources\Pages\CreateRecord; use Filament\Support\Exceptions\Halt; -use Illuminate\Database\Eloquent\Collection; use Throwable; class CreateTeam extends CreateRecord { protected static string $resource = TeamResource::class; - public ?Collection $teams = null; - - public ?Collection $departments = null; - protected function beforeCreate(): void { - $this->teams = Team::where('commander_id', $this->data['commander_id'])->get(); - $this->departments = Department::where('commander_id', $this->data['commander_id'])->get(); - if ($this->teams->isNotEmpty() || $this->departments->isNotEmpty()) { - Notification::make() - ->title(__('Save team')) - ->persistent() - ->body(__('The commander you selected is already registered as a commander. His selection will leave his soldiers without a commander. Are you sure?')) - ->actions([ - Action::make(__('View ').($this->teams->isNotEmpty() ? __('Team') : __('Department'))) - ->button() - ->url( - fn () => $this->teams->isNotEmpty() ? - route('filament.app.resources.teams.index', ['commander_id' => $this->data['commander_id']]) : - route('filament.app.resources.departments.index', ['commander_id' => $this->data['commander_id']]) - - ), - Action::make(__('Confirm')) - ->button() - ->emit('confirmCreate'), - Action::make(__('Cancel')) - ->button() - ->close(), - ]) - ->send(); + $teams = Team::where('commander_id', $this->data['commander_id'])->get(); + $departments = Department::where('commander_id', $this->data['commander_id'])->get(); + if ($teams->isNotEmpty() || $departments->isNotEmpty()) { + TeamResource::checkCommander($teams, $departments, $this->data); $this->halt(); } } - public function confirmCreate(): void + public function confirmCreate($teams, $departments): void { + TeamResource::confirm($teams, $departments, $this->data['commander_id']); try { - if ($this->teams->isNotEmpty()) { - Team::where('commander_id', $this->data['commander_id']) - ->update(['commander_id' => null]); - } - if ($this->departments->isNotEmpty()) { - $user = User::where('userable_id', $this->data['commander_id'])->first(); - $user->removeRole('department-commander'); - - Department::where('commander_id', $this->data['commander_id']) - ->update(['commander_id' => null]); - } $this->beginDatabaseTransaction(); $data = $this->form->getState(); $this->record = $this->handleRecordCreation($data); diff --git a/app/Resources/TeamResource/Pages/EditTeam.php b/app/Resources/TeamResource/Pages/EditTeam.php index 57f6a99..3f59077 100644 --- a/app/Resources/TeamResource/Pages/EditTeam.php +++ b/app/Resources/TeamResource/Pages/EditTeam.php @@ -2,9 +2,15 @@ namespace App\Resources\TeamResource\Pages; +use App\Models\Department; +use App\Models\Soldier; +use App\Models\Team; +use App\Models\User; use App\Resources\TeamResource; use Filament\Actions; use Filament\Resources\Pages\EditRecord; +use Filament\Support\Exceptions\Halt; +use Throwable; class EditTeam extends EditRecord { @@ -16,4 +22,68 @@ protected function getHeaderActions(): array Actions\DeleteAction::make(), ]; } + + protected function beforeSave(): void + { + $teams = Team::where('commander_id', $this->data['commander_id'])->get(); + $departments = Department::where('commander_id', $this->data['commander_id'])->get(); + if ($teams->isNotEmpty() || $departments->isNotEmpty()) { + TeamResource::checkCommander($teams, $departments, $this->data); + $this->halt(); + } + } + + public function confirmCreate($teams, $departments): void + { + TeamResource::confirm($teams, $departments, $this->data['commander_id']); + try { + $this->beginDatabaseTransaction(); + $data = $this->form->getState(); + $this->handleRecordUpdate($this->getRecord(), $data); + $this->callHook('afterSave'); + $this->commitDatabaseTransaction(); + } catch (Halt $exception) { + $exception->shouldRollbackDatabaseTransaction() ? + $this->rollBackDatabaseTransaction() : + $this->commitDatabaseTransaction(); + + return; + } catch (Throwable $exception) { + $this->rollBackDatabaseTransaction(); + throw $exception; + } + $this->rememberData(); + $this->getSavedNotification()?->send(); + $redirectUrl = $this->getRedirectUrl(); + $this->redirect($redirectUrl); + } + + protected $listeners = [ + 'confirmCreate' => 'confirmCreate', + ]; + + protected function getRedirectUrl(): string + { + $resource = static::getResource(); + + return $resource::getUrl('index'); + } + + protected function afterSave(): void + { + $this->attachCommander(); + $this->assignRoles(); + } + + protected function attachCommander(): void + { + Soldier::where('id', $this->data['commander_id']) + ->update(['team_id' => Team::latest()->pluck('id')->first()]); + } + + protected function assignRoles() + { + $user = User::where('userable_id', $this->record->commander_id)->first(); + $user->assignRole('team-commander'); + } } diff --git a/database/factories/SoldierFactory.php b/database/factories/SoldierFactory.php index 6fe6898..c5c8d08 100644 --- a/database/factories/SoldierFactory.php +++ b/database/factories/SoldierFactory.php @@ -15,9 +15,9 @@ public function definition(): array 'enlist_date' => fake()->dateTime(), 'course' => fake()->numberBetween(0, 500), 'has_exemption' => fake()->boolean(), - 'max_shift' => fake()->numberBetween(0, 50), - 'max_night' => fake()->numberBetween(0, 31), - 'max_weekend' => fake()->numberBetween(0, 5), + 'max_shifts' => fake()->numberBetween(0, 50), + 'max_nights' => fake()->numberBetween(0, 31), + 'max_weekends' => fake()->numberBetween(0, 5), 'capacity' => fake()->numberBetween(0, 12) / 4.0, 'capacity_hold' => fake()->numberBetween(0, 12) / 4.0, 'is_trainee' => fake()->boolean(), diff --git a/database/factories/TaskFactory.php b/database/factories/TaskFactory.php index abf1f80..eabe746 100644 --- a/database/factories/TaskFactory.php +++ b/database/factories/TaskFactory.php @@ -16,6 +16,8 @@ public function definition(): array 'type' => fake()->name(), 'color' => fake()->hexColor(), 'is_alert' => fake()->boolean(), + 'is_weekend' => fake()->boolean(), + 'is_night' => fake()->boolean(), 'department_name' => fake()->text(), 'recurrence' => json_encode([]), ]; diff --git a/database/migrations/2024_05_30_094012_create_soldier_table.php b/database/migrations/2024_05_30_094012_create_soldier_table.php index 2906a58..c1eadd3 100644 --- a/database/migrations/2024_05_30_094012_create_soldier_table.php +++ b/database/migrations/2024_05_30_094012_create_soldier_table.php @@ -16,9 +16,9 @@ public function up(): void $table->dateTime('enlist_date')->nullable(); $table->integer('course'); $table->boolean('has_exemption'); - $table->integer('max_shift')->nullable(); - $table->integer('max_night')->nullable(); - $table->integer('max_weekend')->nullable(); + $table->integer('max_shifts')->nullable(); + $table->integer('max_nights')->nullable(); + $table->integer('max_weekends')->nullable(); $table->integer('capacity'); $table->integer('capacity_hold'); $table->boolean('is_trainee'); diff --git a/database/migrations/2024_05_30_100244_create_task_table.php b/database/migrations/2024_05_30_100244_create_task_table.php index ffa4152..6e99459 100644 --- a/database/migrations/2024_05_30_100244_create_task_table.php +++ b/database/migrations/2024_05_30_100244_create_task_table.php @@ -17,6 +17,8 @@ public function up(): void $table->string('type'); $table->string('color'); $table->boolean('is_alert'); + $table->boolean('is_weekend'); + $table->boolean('is_night'); $table->string('department_name')->nullable(); $table->json('recurrence'); $table->timestamps(); diff --git a/lang/he.json b/lang/he.json index 303ff3e..4287cba 100644 --- a/lang/he.json +++ b/lang/he.json @@ -1,21 +1,25 @@ { + "Add a team member":"הוסף חבר צוות", + "Add an identifier to the name so that it is not the same as another name. For example: ":"הוסף מזהה לשם כך שהוא לא יהיה זהה לשם אחר. לדוגמה: ", "Add member": "הוסף חבר לצוות", "Add team": "הוסף צוות", "Additional settings":"הגדרות נוספות", "Alert": "התראה", "Between":"בין", - "Cancel":"לְבַטֵל", - "Capacity": "יכולת", + "Cancel":"ביטול", + "Capacity": "מקסימום נקודות", "Capacity hold": "הנקודות שבוצעו", + "Select qualifications":"בחר כשירויות", "Color": "צבע", "Columns": "עמודות", "Commander": "מפקד", - "Confirm": "לְאַשֵׁר", + "Confirm": "אשר", "Custom": "מותאם אישית", "Constraint": "אילוץ", "Constraint Name": "שם אילוץ", "Constraints": "אילוצים", "Course": "קורס", + "Create":"צור", "Daily": "יומי", "Dates": "תאריכים", "Dates in month": "תאריכים בחודש", @@ -24,10 +28,12 @@ "Departments": "מדורים", "Details":"פרטים", "Duration": "משך", + "Edit":"ערוך", "End date": "תאריך סיום", "EndDate": "תאריך סיום", "Enlist date": "תאריך גיוס", "Equal":"שווה", + "Exemption": "פטור", "Female": "נקבה", "Filter": "סנן", "First name": "שם פרטי", @@ -37,18 +43,22 @@ "Gender": "מין", "Greater than":"יותר מ", "Greater than equal":"יותר או שווה", - "Has exemption": "פטור", - "Is alert": "יש התראה", + "Is alert": "התראה", "Is mabat": "מב''ת", + "Is night": "לילה", "Is permanent": "קבע", "Is trainee": "חניך", + "Is weekend": "סופ''ש", "Last name": "שם משפחה", "Less than":":פחות מ", "Less than equal":"פחות או שווה", + "Low priority not task":"עדיפות נמוכה למשימה", + "Low priority not weekend":"עדיפות נמוכה לסופ''ש", "Male": "זכר", - "Max night": "מקסימום לילות", - "Max shift": "מקסימום משמרות", - "Max weekend": "מקסימום סופ'ש", + "Max nights": "מקסימום לילות", + "Max shifts": "מקסימום משמרות", + "Max weekends": "מקסימום סופ'ש", + "Medical":"מחלה", "Members": "חברים", "Monday":"שני", "Monthly": "חודשי", @@ -57,15 +67,20 @@ "My profile": "הפרופיל שלי", "My Shift": "המשמרת שלי", "My Shifts": "המשמרות שלי", - "My Soldiers Constraints": "האילוצים של חיילי", - "My Soldiers Shift": "המשמרת של חיילי", - "My Soldiers Shifts": "המשמרות של חיילי", + "My Soldiers Constraints": "החיילים שלי", + "My Soldiers Shift": "החיילים שלי", + "My Soldiers Shifts": "החיילים שלי", "Name": "שם", + "New":"חדש", "New task": "משימה חדשה", "Next reserve dates": "ימי מילואים לחודש הבא", "No":"לא", "No qualifications": "אין כשירויות", + "Not evening":"ערב", "Not equal":"לא שווה", + "Not task":"משימה", + "Not Thursday evening":"חמישי ערב", + "Not weekend":"סופ''ש", "OneTime": "חד פעמי", "Parallel weight": "משקל", "Personal Information": "נתונים אישיים", @@ -78,17 +93,18 @@ "Reservist": "מילואימניק", "Save department": "שמור מדור", "Save team": "שמור צוות", + "School":"לימודים", "Select an option": "בחר", "Select condition": "בחר תנאי", "Select from dates": "בחר מתאריך", - "Send": "לִשְׁלוֹחַ", + "Send": "שלח", "Shift": "משמרת", "Shifts": "משמרות", "Soldier": "חייל", "Soldier details": "נתוני חייל", "Soldiers": "חיילים", - "Start at": ":מתחיל ב", - "Start date": "תאריך הַתחָלָה", + "Start at": "שעת התחלה", + "Start date": "תאריך התחלה", "Start hour": "שעת התחלה", "StartDate": "תאריך התחלה", "Sunday":"ראשון", @@ -98,11 +114,14 @@ "Team": "צוות", "Teams": "צוותים", "The commander you selected is already registered as a commander. His selection will leave his soldiers without a commander. Are you sure?": "המפקד שבחרת כבר רשום כמפקד. בחירתו תשאיר את חייליו ללא מפקד. אתה בטוח?", + "This name already exists in the system!":"השם הזה כבר קיים במערכת!", "Thursday":"חמישי", "Tuesday":"שלישי", "Type": "סוג", "Until": "עד תאריך", "Update reserve days": "ימי מילואים לחודש הבא", + "Vacation":"חופשה", + "View":"צפה ב", "View members": "צפה בחברים", "View team": "צפה בצוות", "View teams":"צפה בצוותים", diff --git a/public/robots.txt b/public/robots.txt index 9e60f97..1f53798 100644 --- a/public/robots.txt +++ b/public/robots.txt @@ -1,2 +1,2 @@ User-agent: * -Disallow: +Disallow: / diff --git a/tests/Feature/CalendarWidgetTest.php b/tests/Feature/CalendarWidgetTest.php index 89f3bc3..eca9699 100644 --- a/tests/Feature/CalendarWidgetTest.php +++ b/tests/Feature/CalendarWidgetTest.php @@ -7,6 +7,7 @@ use App\Models\Task; use App\Models\Team; use App\Models\User; +use Carbon\Carbon; use Database\Seeders\PermissionSeeder; use function Pest\Livewire\livewire; @@ -118,14 +119,14 @@ 'model' => Shift::class, 'keys' => collect([ 'id', - 'parallel_weight', + 'task_name', 'start_date', 'end_date', 'task_color', ]), 'type' => 'my', ]) - ->call('fetchEvents', ['start' => '2024-09-01 00:00:00', 'end' => '2024-10-12 00:00:00', 'timezone' => 'Asia\/Jerusalem']); + ->call('fetchEvents', ['start' => Carbon::yesterday(), 'end' => Carbon::now()->addDays(2), 'timezone' => 'Asia\/Jerusalem']); expect($calendar->effects['returns'][0])->toHaveCount(count: 5); }); @@ -149,14 +150,14 @@ 'model' => Shift::class, 'keys' => collect([ 'id', - 'parallel_weight', + 'task_name', 'start_date', 'end_date', 'task_color', ]), 'type' => 'my_soldiers', ]) - ->call('fetchEvents', ['start' => '2024-09-01 00:00:00', 'end' => '2024-10-12 00:00:00', 'timezone' => 'Asia\/Jerusalem']); + ->call('fetchEvents', ['start' => Carbon::yesterday(), 'end' => Carbon::now()->addDays(2), 'timezone' => 'Asia\/Jerusalem']); expect($calendar->effects['returns'][0])->toHaveCount(count: 2); }); diff --git a/tests/Feature/ConstraintTest.php b/tests/Feature/ConstraintTest.php index 91fd15e..bb04961 100644 --- a/tests/Feature/ConstraintTest.php +++ b/tests/Feature/ConstraintTest.php @@ -4,7 +4,9 @@ use App\Models\Constraint; use Carbon\Carbon; use Database\Seeders\PermissionSeeder; +use Filament\Forms\Get; use Illuminate\Support\Facades\DB; +use Mockery as mock; beforeEach(function () { $this @@ -24,7 +26,7 @@ $result = $availableOptionsMethod->invoke(null, $get); expect($result)->toBeArray(); - expect($result)->toContain('Medical', 'Vacation', 'School', 'Not task', 'Low priority not task', 'Not evening'); + expect($result)->toContain(__('Medical'), __('Vacation'), __('School'), __('Not task'), __('Low priority not task'), __('Not evening')); }); it('should return the correct used counts for current month', function () { @@ -56,44 +58,56 @@ }, $usedCounts); }); -it('should return the correct dates for "Not evening" and "Not Thursday evening" constraints', function () { - $get = function ($key) { - return $key == 'start_date' ? '2023-04-01 00:00:00' : '2023-04-01 23:59:00'; +it('should update dates for "Medical", "Vacation", "School", "Not task", and "Low priority not task" constraints', function () { + $set = function ($key, $value) use (&$dates) { + $dates[$key] = $value; }; - $class = new ReflectionClass(Constraint::class); - $getDateForConstraint = $class->getMethod('getDateForConstraint'); - $getDateForConstraint->setAccessible(true); + $getMock = mock::mock(Get::class); + $getMock->shouldReceive('__invoke')->with('constraint_type')->andReturn('Medical'); + $getMock->shouldReceive('__invoke')->with('start_date')->andReturn('2023-04-01 00:00:00'); + $getMock->shouldReceive('__invoke')->with('end_date')->andReturn('2023-04-01 23:59:00'); + + $dates = []; - $result = $getDateForConstraint->invoke(null, 'Not evening', $get); - expect($result['start_date']->toDateTimeString())->toBe('2023-04-01 18:00:00'); - expect($result['end_date']->toDateTimeString())->toBe('2023-04-01 23:59:00'); + Constraint::updateDates($set, null, $getMock); + + expect($dates['start_date'])->toBe('2023-04-01 00:00:00'); + expect($dates['end_date'])->toBe('2023-04-01 23:59:00'); }); -it('should return the correct dates for "Not weekend" and "Low priority not weekend" constraints', function () { - $get = function ($key) { - return $key == 'start_date' ? '2024-09-05 00:00:00' : '2024-09-05 00:00:00'; +it('should update dates for "Not evening" and "Not Thursday evening" constraints', function () { + $set = function ($key, $value) use (&$dates) { + $dates[$key] = $value; }; - $class = new ReflectionClass(Constraint::class); - $getDateForConstraint = $class->getMethod('getDateForConstraint'); - $getDateForConstraint->setAccessible(true); + $getMock = mock::mock(Get::class); + $getMock->shouldReceive('__invoke')->with('constraint_type')->andReturn('Not evening'); + $getMock->shouldReceive('__invoke')->with('start_date')->andReturn('2023-04-01 00:00:00'); + $getMock->shouldReceive('__invoke')->with('end_date')->andReturn('2023-04-01 23:59:00'); - $result = $getDateForConstraint->invoke(null, 'Not weekend', $get); - expect($result['start_date']->toDateTimeString())->toBe('2024-09-05 00:00:00'); - expect($result['end_date']->toDateTimeString())->toBe('2024-09-08 00:00:00'); + $dates = []; + + Constraint::updateDates($set, null, $getMock); + + expect($dates['start_date'])->toBe('2023-04-01 18:00:00'); + expect($dates['end_date'])->toBe('2023-04-01 23:59:00'); }); -it('should return the correct dates for "Medical", "Vacation", "School", "Not task", and "Low priority not task" constraints', function () { - $get = function ($key) { - return $key == 'start_date' ? '2023-04-01 00:00:00' : '2023-04-01 23:59:59'; +it('should update dates for "Not weekend" and "Low priority not weekend" constraints', function () { + $set = function ($key, $value) use (&$dates) { + $dates[$key] = $value; }; - $class = new ReflectionClass(Constraint::class); - $getDateForConstraint = $class->getMethod('getDateForConstraint'); - $getDateForConstraint->setAccessible(true); + $getMock = mock::mock(Get::class); + $getMock->shouldReceive('__invoke')->with('constraint_type')->andReturn('Not weekend'); + $getMock->shouldReceive('__invoke')->with('start_date')->andReturn('2023-04-01 00:00:00'); + $getMock->shouldReceive('__invoke')->with('end_date')->andReturn('2023-04-01 23:59:00'); + + $dates = []; + + Constraint::updateDates($set, null, $getMock); - $result = $getDateForConstraint->invoke(null, 'Medical', $get); - expect($result['start_date'])->toBe('2023-04-01 00:00:00'); - expect($result['end_date'])->toBe('2023-04-01 23:59:59'); + expect($dates['start_date'])->toBe('2023-03-30 00:00:00'); + expect($dates['end_date'])->toBe('2023-04-02 00:00:00'); }); diff --git a/tests/Feature/EditDepartmentTest.php b/tests/Feature/EditDepartmentTest.php new file mode 100644 index 0000000..2e4a576 --- /dev/null +++ b/tests/Feature/EditDepartmentTest.php @@ -0,0 +1,32 @@ +seed(PermissionSeeder::class) + ->asUser('manager'); +}); + +it('should assign department-commander role to the commander', function () { + $department = Department::factory()->create(); + $commander = User::factory()->create(); + + livewire(EditDepartment::class, [ + 'record' => $department->id, + ]) + ->set('data.commander_id', $commander->userable_id) + ->call('save') + ->assertHasNoFormErrors(); + $this->assertDatabaseHas('departments', [ + 'id' => $department->id, + 'commander_id' => $commander->userable_id, + ]); + + expect($commander->getRoleNames()->contains('department-commander'))->toBe(true); +}); diff --git a/tests/Feature/EditTeamTest.php b/tests/Feature/EditTeamTest.php new file mode 100644 index 0000000..a0de246 --- /dev/null +++ b/tests/Feature/EditTeamTest.php @@ -0,0 +1,32 @@ +seed(PermissionSeeder::class) + ->asUser('manager'); +}); + +it('should assign team-commander role to the commander', function () { + $team = Team::factory()->create(); + $commander = User::factory()->create(); + + livewire(EditTeam::class, [ + 'record' => $team->id, + ]) + ->set('data.commander_id', $commander->userable_id) + ->call('save') + ->assertHasNoFormErrors(); + $this->assertDatabaseHas('teams', [ + 'id' => $team->id, + 'commander_id' => $commander->userable_id, + ]); + + expect($commander->getRoleNames()->contains('team-commander'))->toBe(true); +}); diff --git a/tests/Feature/ReccurenceEventsTest.php b/tests/Feature/ReccurenceEventsTest.php index 7b0da0d..4761148 100644 --- a/tests/Feature/ReccurenceEventsTest.php +++ b/tests/Feature/ReccurenceEventsTest.php @@ -30,16 +30,33 @@ it('should create shifts for weekly recurrence', function () { $task = Task::factory()->create([ 'name' => 'Weekly Task', - 'recurrence' => ['type' => 'Daily'], + 'recurrence' => ['type' => 'days_in_week', 'days_in_week' => ['Sunday', 'Tuesday']], 'start_hour' => '10:00:00', 'duration' => 2, ]); + $expectedShiftDates = collect([ + $this->now->startOfMonth()->next('Sunday')->format('Y-m-d'), + $this->now->startOfMonth()->next('Tuesday')->format('Y-m-d'), + ]); + $this->recurrenceEvents->recurrenceTask(); + $this->assertDatabaseCount('shifts', 2); $this->assertDatabaseHas('shifts', [ 'task_id' => $task->id, - 'start_date' => Carbon::parse($this->now->startOfMonth()->format('Y-m-d').' '.$task['start_hour']), - 'end_date' => Carbon::parse($this->now->startOfMonth()->format('Y-m-d').' '.$task['start_hour'])->addHours($task['duration']), + 'start_date' => Carbon::parse($expectedShiftDates[0].' '.$task['start_hour']), + 'end_date' => Carbon::parse($expectedShiftDates[0].' '.$task['start_hour'])->addHours($task['duration']), + ]); + $this->assertDatabaseHas('shifts', [ + 'task_id' => $task->id, + 'start_date' => Carbon::parse($expectedShiftDates[1].' '.$task['start_hour']), + 'end_date' => Carbon::parse($expectedShiftDates[1].' '.$task['start_hour'])->addHours($task['duration']), ]); + // $this->recurrenceEvents->recurrenceTask(); + // $this->assertDatabaseHas('shifts', [ + // 'task_id' => $task->id, + // 'start_date' => Carbon::parse($this->now->startOfMonth()->format('Y-m-d').' '.$task['start_hour']), + // 'end_date' => Carbon::parse($this->now->startOfMonth()->format('Y-m-d').' '.$task['start_hour'])->addHours($task['duration']), + // ]); }); it('should create shifts for monthly recurrence', function () { diff --git a/tests/Unit/ExampleTest.php b/tests/Unit/ExampleTest.php index 44a4f33..b3d9bbc 100644 --- a/tests/Unit/ExampleTest.php +++ b/tests/Unit/ExampleTest.php @@ -1,5 +1 @@ toBeTrue(); -}); From 732440a5d0747ea96456e31e267f7520ad3b621b Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 27 Oct 2024 13:18:06 +0200 Subject: [PATCH 006/259] deploy after pull from dev --- .github/workflows/php-build-and-deploy.yml | 2 +- database/seeders/DatabaseSeeder.php | 150 +++++++++++++++++++-- 2 files changed, 140 insertions(+), 12 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index d4fe369..75e6dc8 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/newspaceMali33 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/newspacemali100 flavor: | latest=false tags: | diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index f9513c6..fd15e10 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -2,27 +2,155 @@ namespace Database\Seeders; +use App\Models\Department; use App\Models\Soldier; -use App\Models\Team; +use App\Models\Task; use App\Models\User; +use App\Enums\RecurrenceType; +use App\Services\ReccurenceEvents; use Illuminate\Database\Seeder; -use Illuminate\Support\Facades\Hash; class DatabaseSeeder extends Seeder { public function run(): void - { + { $user = User::factory()->create([ - 'first_name' => "name", - 'last_name' => "family", - 'password' => Hash::make(1234567), - 'userable_id' => Soldier::factory()->create()->id, - 'userable_type' => "App\Models\Soldier", - ]); - + 'first_name' => "name", + 'last_name' => "family", + 'password' => Hash::make(1234567), + 'userable_id' => Soldier::factory()->create()->id, + 'userable_type' => "App\Models\Soldier", + ]); $this->call([ PermissionSeeder::class, ]); $user->assignRole('manager'); + Department::factory()->create([ + 'name' => 'a1', + ]); + Task::factory()->create([ + 'name' => 'planning', + 'start_hour' => '08:30:00', + 'duration' => 5, + 'parallel_weight' => 0, + 'department_name' => 'a1', + 'recurrence' => collect(['type' => RecurrenceType::WEEKLY, 'days_in_week' => ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday']]), + ]); + Task::factory()->create([ + 'name' => 'Weekend planning', + 'type' => 'planning', + 'start_hour' => '08:30:00', + 'duration' => 5, + 'parallel_weight' => 1, + 'department_name' => 'a1', + 'recurrence' => collect(['type' => RecurrenceType::WEEKLY, 'days_in_week' => ['Friday', 'Saturday']]), + ]); + Task::factory()->create([ + 'name' => 'flying', + 'start_hour' => '09:00:00', + 'duration' => 6, + 'parallel_weight' => 0, + 'department_name' => 'a1', + 'recurrence' => collect(['type' => RecurrenceType::WEEKLY, 'days_in_week' => ['Sunday', 'Wednesday']]), + ]); + Task::factory()->create([ + 'name' => 'night flight', + 'start_hour' => '00:00:00', + 'duration' => 12, + 'parallel_weight' => 0.5, + 'department_name' => 'a1', + 'recurrence' => collect(['type' => RecurrenceType::WEEKLY, 'days_in_week' => ['Monday', 'Thursday']]), + ]); + Task::factory()->create([ + 'name' => 'control', + 'start_hour' => '10:00:00', + 'duration' => 6, + 'parallel_weight' => 0, + 'department_name' => 'a1', + 'recurrence' => collect(['type' => RecurrenceType::CUSTOM, 'dates_in_month' => [10]]), + ]); + User::factory()->create([ + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['planning', 'control'], + 'capacity' => 0, + 'max_nights' => 0, + 'max_weekends' => 0, + 'max_shifts' => 1, + ])->id, + ]); + User::factory()->create([ + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['planning', 'flight'], + 'capacity' => 2, + 'max_nights' => 1, + 'max_weekends' => 2, + 'max_shifts' => 8, + ])->id, + ]); + User::factory()->create([ + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['planning', 'flight'], + 'capacity' => 2, + 'max_nights' => 1, + 'max_weekends' => 2, + 'max_shifts' => 8, + ])->id, + ]); + User::factory()->create([ + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['planning', 'flight'], + 'capacity' => 3, + 'max_nights' => 1, + 'max_weekends' => 2, + 'max_shifts' => 12, + ])->id, + ]); + User::factory()->create([ + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['planning', 'flight'], + 'capacity' => 3, + 'max_nights' => 2, + 'max_weekends' => 2, + 'max_shifts' => 8, + ])->id, + ]); + User::factory()->create([ + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['planning', 'flight'], + 'capacity' => 0, + 'max_nights' => 0, + 'max_weekends' => 0, + 'max_shifts' => 10, + ])->id, + ]); + User::factory()->create([ + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['planning', 'flight'], + 'capacity' => 3, + 'max_nights' => 0, + 'max_weekends' => 3, + 'max_shifts' => 10, + ])->id, + ]); + User::factory()->create([ + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['planning', 'flight'], + 'capacity' => 3, + 'max_nights' => 0, + 'max_weekends' => 3, + 'max_shifts' => 10, + ])->id, + ]); + User::factory()->create([ + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['planning', 'flight'], + 'capacity' => 1, + 'max_nights' => 1, + 'max_weekends' => 1, + 'max_shifts' => 4, + ])->id, + ]); + $reccurenceEvents = new ReccurenceEvents; + $reccurenceEvents->recurrenceTask(); } -} +} \ No newline at end of file From e2c560723a4c70f76b8ea7c47427594507f0b2fd Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 27 Oct 2024 13:30:25 +0200 Subject: [PATCH 007/259] deploy after pull from dev --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Enums/Availability.php | 10 ++++++ app/Enums/Priority.php | 9 +++++ app/Models/Constraint.php | 2 +- database/seeders/DatabaseSeeder.php | 41 +++++++++++----------- 5 files changed, 42 insertions(+), 22 deletions(-) create mode 100644 app/Enums/Availability.php create mode 100644 app/Enums/Priority.php diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 75e6dc8..972a648 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/newspacemali100 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/newspacemali101 flavor: | latest=false tags: | diff --git a/app/Enums/Availability.php b/app/Enums/Availability.php new file mode 100644 index 0000000..6c2c483 --- /dev/null +++ b/app/Enums/Availability.php @@ -0,0 +1,10 @@ +constraint_type); - return $translatedConstraint.' - '.$this->soldier_name; + return $translatedConstraint.' '.$this->soldier_name; } public function getConstraintColorAttribute() diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index fd15e10..089b319 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -2,34 +2,34 @@ namespace Database\Seeders; -use App\Models\Department; use App\Models\Soldier; -use App\Models\Task; +use App\Models\Team; use App\Models\User; +use Illuminate\Database\Seeder; +use Illuminate\Support\Facades\Hash; +use App\Models\Department; +use App\Models\Task; use App\Enums\RecurrenceType; use App\Services\ReccurenceEvents; -use Illuminate\Database\Seeder; - class DatabaseSeeder extends Seeder { public function run(): void - { + { $user = User::factory()->create([ - 'first_name' => "name", - 'last_name' => "family", - 'password' => Hash::make(1234567), - 'userable_id' => Soldier::factory()->create()->id, - 'userable_type' => "App\Models\Soldier", - ]); + 'first_name' => "name", + 'last_name' => "family", + 'password' => Hash::make(1234567), + 'userable_id' => Soldier::factory()->create()->id, + 'userable_type' => "App\Models\Soldier", + ]); + $this->call([ PermissionSeeder::class, ]); $user->assignRole('manager'); - Department::factory()->create([ - 'name' => 'a1', - ]); + Task::factory()->create([ - 'name' => 'planning', + 'name' => 'תכנון', 'start_hour' => '08:30:00', 'duration' => 5, 'parallel_weight' => 0, @@ -37,7 +37,7 @@ public function run(): void 'recurrence' => collect(['type' => RecurrenceType::WEEKLY, 'days_in_week' => ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday']]), ]); Task::factory()->create([ - 'name' => 'Weekend planning', + 'name' => 'תכנון סוף שבוע', 'type' => 'planning', 'start_hour' => '08:30:00', 'duration' => 5, @@ -46,7 +46,7 @@ public function run(): void 'recurrence' => collect(['type' => RecurrenceType::WEEKLY, 'days_in_week' => ['Friday', 'Saturday']]), ]); Task::factory()->create([ - 'name' => 'flying', + 'name' => 'הטסה', 'start_hour' => '09:00:00', 'duration' => 6, 'parallel_weight' => 0, @@ -54,7 +54,7 @@ public function run(): void 'recurrence' => collect(['type' => RecurrenceType::WEEKLY, 'days_in_week' => ['Sunday', 'Wednesday']]), ]); Task::factory()->create([ - 'name' => 'night flight', + 'name' => 'הטסת לילה', 'start_hour' => '00:00:00', 'duration' => 12, 'parallel_weight' => 0.5, @@ -62,7 +62,7 @@ public function run(): void 'recurrence' => collect(['type' => RecurrenceType::WEEKLY, 'days_in_week' => ['Monday', 'Thursday']]), ]); Task::factory()->create([ - 'name' => 'control', + 'name' => 'בקרה', 'start_hour' => '10:00:00', 'duration' => 6, 'parallel_weight' => 0, @@ -152,5 +152,6 @@ public function run(): void ]); $reccurenceEvents = new ReccurenceEvents; $reccurenceEvents->recurrenceTask(); + } -} \ No newline at end of file +} From b2ba0982a1edab95572af38ee8bb1fe46d19575f Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Mon, 28 Oct 2024 12:46:21 +0200 Subject: [PATCH 008/259] deploy after pull from dev --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 12 +- app/Models/Shift.php | 69 ++++++- app/Resources/SoldierResource.php | 15 +- app/Services/Constraint.php | 18 ++ app/Services/ManualAssignment.php | 191 ++++++++++++++++++ app/Services/MaxData.php | 30 +++ app/Services/Range.php | 73 +++++++ app/Services/Shift.php | 44 ++++ app/Services/Soldier.php | 101 +++++++++ ...2024_05_30_094012_create_soldier_table.php | 8 +- database/seeders/DatabaseSeeder.php | 2 - lang/he.json | 4 + 13 files changed, 546 insertions(+), 23 deletions(-) create mode 100644 app/Services/Constraint.php create mode 100644 app/Services/ManualAssignment.php create mode 100644 app/Services/MaxData.php create mode 100644 app/Services/Range.php create mode 100644 app/Services/Shift.php create mode 100644 app/Services/Soldier.php diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 972a648..fa618c8 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/newspacemali101 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/newspacemali00 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index a7dd39e..3941e88 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -11,6 +11,7 @@ use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Collection; +use Illuminate\Support\Facades\Schema; use Saade\FilamentFullCalendar\Actions\CreateAction; use Saade\FilamentFullCalendar\Actions\DeleteAction; use Saade\FilamentFullCalendar\Actions\EditAction; @@ -148,8 +149,8 @@ protected function modalActions(): array ->modalSubmitAction(false) ->closeModalByClickingAway(false) ->extraModalFooterActions(fn (Action $action): array => [ - $action->makeExtraModalAction('save', arguments: ['save' => true])->color('primary'), - $action->makeExtraModalAction('cancel', arguments: ['cancel' => true])->color('primary'), + $action->makeExtraModalAction(__('Save'), arguments: ['save' => true])->color('primary'), + $action->makeExtraModalAction(__('Cancel'), arguments: ['cancel' => true])->color('primary'), ]) ->modalHeading(__('Edit').' '.$this->model::getTitle()) ->action(function (array $data, array $arguments, Model $record): void { @@ -157,7 +158,10 @@ protected function modalActions(): array $this->refreshRecords(); } if ($arguments['save'] ?? false) { - $this->model::where('id', operator: $record['id'])->update([...$data]); + $columns = Schema::getColumnListing(strtolower(class_basename($this->model)).'s'); + $filteredData = array_intersect_key($data, array_flip($columns)); + $this->model::where('id', operator: $record['id'])->update([...$filteredData]); + method_exists($this->model, 'afterSave') && $this->model::afterSave($data, $record); } }), DeleteAction::make(), @@ -174,4 +178,4 @@ protected function viewAction(): Action { return ViewAction::make()->modalHeading(__('View').$this->model::getTitle()); } -} +} \ No newline at end of file diff --git a/app/Models/Shift.php b/app/Models/Shift.php index 82bbff8..12ec41e 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -3,8 +3,12 @@ namespace App\Models; use Filament\Forms\Components\DateTimePicker; +use Filament\Forms\Components\Grid; use Filament\Forms\Components\Placeholder; use Filament\Forms\Components\Section; +use Filament\Forms\Components\Select; +use Filament\Forms\Components\ToggleButtons; +use Filament\Forms\Get; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; @@ -32,7 +36,7 @@ public function getTaskNameAttribute() { $user_name = User::where('userable_id', $this->soldier_id)->get(['first_name', 'last_name']); - return $this->task?->name.' - '.$user_name->first()?->first_name.' '.$user_name->first()?->last_name; + return $this->task?->name.' '.$user_name->first()?->first_name.' '.$user_name->first()?->last_name; } public function getTaskColorAttribute() @@ -47,15 +51,72 @@ public static function getSchema(): array Placeholder::make('') ->content(content: fn (Shift $shift) => $shift->task_name) ->inlineLabel(), - DateTimePicker::make('start_date')->required(), - DateTimePicker::make('end_date')->required(), + Grid::make() + ->schema([ + ToggleButtons::make('shift_type') + ->required() + ->label(__('Soldier')) + ->reactive() + ->live() + ->inline() + ->options( + fn (?Shift $shift) => self::getOptions($shift->task->department_name) + ), + Select::make('soldier_id') + ->label('Soldier assignment') + ->options( + function (?Shift $shift, Get $get) { + $manual_assignment = new \App\Services\ManualAssignment($shift, $get('shift_type')); + + return $manual_assignment->getSoldiers(); + } + ) + ->placeholder('Select soldier') + ->visible( + fn (Get $get): bool => $get('shift_type') != null + ), + ]) + ->visible( + fn (?Shift $record, Get $get): bool => $record !== null + && ! $record->soldier_id + && \Str::contains($_SERVER['HTTP_REFERER'], 'my-soldiers-shifts') + && current(array: array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) + ) + ->hiddenOn('view'), + DateTimePicker::make('start_date') + ->label(__('Start date')) + ->required(), + DateTimePicker::make('end_date') + ->label(__('End date')) + ->required(), ]), ]; } + public static function afterSave($shift, $record) + { + $soldier = Soldier::find($shift['soldier_id']); + $shift = Shift::find($record->id); + $soldier->update(['capacity_hold' => (float) $soldier->capacity_hold + $shift->task->parallel_weight]); + } + + protected static function getOptions(string $department_name): array + { + $options = [ + 'reserves' => __('Reserves'), + 'department' => '"'.$department_name.'" '.__('Department'), + 'all' => __('All'), + ]; + if (current(array: array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) != 'manager') { + return collect($options)->splice(1, 0, ['my_soldiers' => __('My Soldiers')])->toArray(); + } + + return $options; + } + public static function getTitle(): string|Htmlable { return __('Shift'); } -} +} \ No newline at end of file diff --git a/app/Resources/SoldierResource.php b/app/Resources/SoldierResource.php index d913866..a190448 100644 --- a/app/Resources/SoldierResource.php +++ b/app/Resources/SoldierResource.php @@ -12,7 +12,6 @@ use App\Resources\SoldierResource\Pages; use Filament\Forms\Components\DatePicker; use Filament\Forms\Components\Fieldset; -use Filament\Forms\Components\Hidden; use Filament\Forms\Components\Section; use Filament\Forms\Components\Select; use Filament\Forms\Components\Split; @@ -116,7 +115,7 @@ public static function table(Table $table): Table ->label(__('Qualifications')) ->multiple() ->searchable() - ->options(Task::all()->pluck('name', 'type')) + ->options(Task::all()->pluck('name', 'name')) ->query(function (Builder $query, array $data) { return collect($data['values'])->map(fn ($qualification) => $query->whereJsonContains('qualifications', $qualification)); }) @@ -265,12 +264,11 @@ public static function soldierDetails(): array ->label(__('Course')) ->numeric() ->minValue(0), - Select::make('capacity') + TextInput::make('capacity') + ->numeric() + ->step(0.25) ->label(__('Capacity')) - ->placeholder(__('Select an option')) - ->options(fn (): array => collect(range(0, 12))->mapWithKeys(fn ($number) => [(string) ($number / 4) => (string) ($number / 4)])->toArray()) ->required(), - Hidden::make('capacity_hold')->default(0), Section::make([ Toggle::make('is_reservist')->label(__('Reservist'))->live(), Toggle::make('is_permanent')->label(__('Is permanent')), @@ -312,7 +310,8 @@ public static function constraints(): array ->label(__('Qualifications')) ->multiple() ->placeholder(__('Select qualifications')) - ->options(Task::all()->pluck('name', 'name')), ])->columns(2) + ->options(Task::all()->pluck('name', 'name')), + ])->columns(2) ->columnSpan('full'), ]; @@ -327,4 +326,4 @@ public static function getPluralModelLabel(): string { return __('Soldiers'); } -} +} \ No newline at end of file diff --git a/app/Services/Constraint.php b/app/Services/Constraint.php new file mode 100644 index 0000000..0fc43f1 --- /dev/null +++ b/app/Services/Constraint.php @@ -0,0 +1,18 @@ +range = new Range($start, $end); + $this->priority = $priority; + } +} \ No newline at end of file diff --git a/app/Services/ManualAssignment.php b/app/Services/ManualAssignment.php new file mode 100644 index 0000000..2fd7d81 --- /dev/null +++ b/app/Services/ManualAssignment.php @@ -0,0 +1,191 @@ +shift = new \App\Services\Shift($shift->id, $shift->task->name, $shift->start_date, $shift->end_date, $shift->task->parallel_weight); + $this->soldier_type = $soldier_type; + $this->soldiers = []; + } + + public function getSoldiers() + { + $this->initSoldiersData(); + + return $this->getAvailableSoldiers(); + } + + protected function initSoldiersData() + { + $this->soldiers = Cache::remember('users', 30 * 60, function () { + return User::all(); + }); + match ($this->soldier_type) { + 'reserves' => $this->filterReserves(), + 'my_soldiers' => $this->filterMySoldiers(), + 'department' => $this->filterDepartment(), + 'all' => $this->filterAll() + }; + $this->mapSoldiersConstraints(); + } + + protected function filterReserves() + { + $this->soldiers = $this->soldiers + ->filter(function ($user) { + $soldier = Soldier::where('id', $user->userable_id)->first(); + + return $soldier->is_reservist; + }); + } + + protected function filterMySoldiers() + { + $this->soldiers = $this->soldiers + ->filter(function ($user) { + $current_user_id = auth()->user()->userable_id; + $role = current(array: array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])); + $soldier = Soldier::where('id', $user->userable_id)->first(); + match ($role) { + 'department-commander' => (function () use ($soldier) { + $department_id = Department::where('commander_id', $soldier->id)->value('id'); + $teams = Team::where('department_id', $department_id)->get('id'); + + return $teams->contains($soldier->team_id); + })(), + 'team-commander' => (function () use ($soldier, $current_user_id) { + $team = Team::where('commander_id', $soldier->id)->get('id'); + + return $soldier->team_id === $team && $soldier->id != $current_user_id; + })() + }; + }); + } + + protected function filterDepartment() + { + $department_name = Shift::find($this->shift->id)->task->department_name; + $this->soldiers = $this->soldiers + ->filter(function ($user) use ($department_name) { + $soldier = Soldier::where('id', '=', $user->userable_id)->first(); + $department = Department::where('name', '=', $department_name); + $department_id = $department->value('id'); + $teams = Team::where('department_id', '=', $department_id)->get('id'); + + return $teams->contains($soldier->team_id) || $soldier->id == $department->value('commander_id'); + }); + } + + protected function filterAll() + { + $this->soldiers = $this->soldiers + ->filter(function ($user) { + $soldier = Soldier::where('id', $user->userable_id)->first(); + + return ! $soldier->is_reservist; + }); + } + + protected function mapSoldiersConstraints() + { + $this->soldiers = $this->soldiers + ->map( + function (User $user) { + $constraints = collect(); + $soldier = Soldier::where('id', $user->userable_id)->first(); + if ($this->soldier_type != 'reserves') { + $constraints = $this->getConstraintBy($soldier->id); + }value: + $soldiers_shifts = Shift::where('soldier_id', $soldier->id) + ->get() + ->filter( + fn (Shift $shift) => $this->shift->range->isSameMonth(new Range($shift->start_date, $shift->end_date)) + ); + $soldiers_shifts->map(fn (Shift $shift) => $constraints->push( + new \App\Services\Constraint( + $shift->start_date, + $shift->end_date, + Priority::HIGH, + ) + )); + + return new \App\Services\Soldier( + $soldier->id, + new MaxData($soldier->capacity, $soldier->capacity_hold), + new MaxData($soldier->max_shifts, $soldiers_shifts->count()), + new MaxData($soldier->max_nights, $this->nightShiftSum($soldiers_shifts)), + new MaxData($soldier->max_weekends, $this->weekendShiftSum($soldiers_shifts)), + $soldier->qualifications, + $constraints + ); + } + ); + } + + protected function getConstraintBy(int $soldier_id) + { + return Constraint::where('soldier_id', $soldier_id) + ->get() + ->map( + fn ($constraint) => new \App\Services\Constraint( + $constraint->start_date, + $constraint->end_date, + ConstraintType::getPriority()[$constraint->constraint_type] == 1 ? Priority::HIGH : Priority::LOW + ) + ); + } + + protected function weekendShiftSum($shifts): float + { + return $shifts->filter(function (Shift $shift) { + $range = new Range($shift->start_date, $shift->end_date); + + return $range->isWeekend(); + })->count(); + } + + protected function nightShiftSum($shifts): float + { + return $shifts->filter(function (Shift $shift) { + $range = new Range($shift->start_date, $shift->end_date); + $range->isNight(); + })->count(); + } + + protected function getAvailableSoldiers() + { + $available_soldiers = $this->soldiers->filter( + fn (\App\Services\Soldier $soldier) => $soldier->isQualified($this->shift->task_name) + && $soldier->isAvailableByMaxes($this->shift) + && $soldier->isAvailableByConstraints($this->shift->range) != Availability::NO + ); + + return $available_soldiers->mapWithKeys( + function (\App\Services\Soldier $soldier) { + $user = User::get()->where('userable_id', '=', $soldier->id)->first(); + + return [$user->userable_id => $user->displayName]; + } + ); + } +} diff --git a/app/Services/MaxData.php b/app/Services/MaxData.php new file mode 100644 index 0000000..c4a467d --- /dev/null +++ b/app/Services/MaxData.php @@ -0,0 +1,30 @@ +max = $max; + $this->used = $used; + } + + public function remaining(): float + { + return $this->max - $this->used; + } + + public function relativeLoad(): float + { + if ($this->max == 0) { + return 0; + } + + return $this->used / $this->max; + } +} \ No newline at end of file diff --git a/app/Services/Range.php b/app/Services/Range.php new file mode 100644 index 0000000..a7f20d1 --- /dev/null +++ b/app/Services/Range.php @@ -0,0 +1,73 @@ + $end) { + new Exception('Invalid range'); + } + $this->start = $start; + $this->end = $end; + } + + public function isConflict(Range $other): bool + { + return ! (Carbon::parse($this->start)->isAfter(Carbon::parse($other->end)) || Carbon::parse($this->end)->isBefore(Carbon::parse($other->start))); + } + + public function isWeekend(): bool + { + return ( + ($this->start->dayOfWeek == 4 && $this->start->hour >= 20) + || $this->start->dayOfWeek == 5 + || $this->start->dayOfWeek == 6 + || ($this->start->dayOfWeek == 0 && $this->start->hour < 8) + ) + || + ( + ($this->end->dayOfWeek == 4 && $this->end->hour >= 20) + || $this->end->dayOfWeek == 5 + || $this->end->dayOfWeek == 6 + || ($this->end->dayOfWeek == 0 && $this->end->hour < 8) + ) + || + $this->start->diffInDays($this->end) > 5; + } + + public function isNight(): bool + { + if ($this->isWeekend()) { + return false; + } + + return + ( + ($this->start->day == $this->end->day) + && ( + ($this->start->hour >= 00 && $this->start->hour < 8) + || $this->start->hour >= 20 + || $this->end->hour > 20 + ) + ) + || + $this->start->day < $this->end->day; + } + + public function isSameMonth(Range $other): bool + { + return $other->start->monthName == $this->start->monthName + || $other->start->monthName == $this->end->monthName + || $other->end->monthName == $this->start->monthName + || $other->end->monthName == $this->end->monthName; + } +} \ No newline at end of file diff --git a/app/Services/Shift.php b/app/Services/Shift.php new file mode 100644 index 0000000..79f0a58 --- /dev/null +++ b/app/Services/Shift.php @@ -0,0 +1,44 @@ +id = $id; + $this->task_name = $task_name; + $this->range = new Range($start, $end); + $this->points = $points; + $this->is_assign = false; + } + + protected function name(): string + { + return $this->task_name.': from'.$this->range->start.' to'.$this->range->end; + } + + public function isWeekend(): bool + { + return $this->range->isWeekend(); + } + + public function isNight(): bool + { + if ($this->isWeekend()) { + return false; + } + + return $this->range->isNight(); + } +} \ No newline at end of file diff --git a/app/Services/Soldier.php b/app/Services/Soldier.php new file mode 100644 index 0000000..e86c392 --- /dev/null +++ b/app/Services/Soldier.php @@ -0,0 +1,101 @@ +id = $id; + $this->points_max_data = $max_points; + $this->shifts_max_data = $max_shifts; + $this->nights_max_data = $max_nights; + $this->weekends_max_data = $max_weekends; + $this->qualifications = collect($qualifications); + $this->constraints = collect($constraints); + $this->shifts = collect([]); + } + + public function isQualified(string $task_name): bool + { + return $this->qualifications->contains($task_name); + } + + public function isAbleTake(\App\Services\Shift $shift): bool + { + return $this->isAvailableByMaxes($shift) && $this->isAvailableByShifts($shift->range); + } + + public function isAvailableByMaxes(\App\Services\Shift $shift): bool + { + if ($shift->isWeekend() && $this->weekends_max_data->remaining() < 1) { + return false; + } + if ($shift->isNight() && $this->nights_max_data->remaining() < 1) { + return false; + } + + return $this->points_max_data->remaining() >= $shift->points + && $this->shifts_max_data->remaining() >= 1; + } + + protected function isAvailableByShifts(Range $range): bool + { + return ! $this->shifts->contains(function ($shift) use ($range) { + return $shift->range->isConflict($range); + }); + } + + public function isAvailableByConstraints(Range $range): Availability + { + $conflicts = $this->constraints->filter(function ($constraint) use ($range) { + return $constraint->range->isConflict($range); + }); + + if ($conflicts->isEmpty()) { + return Availability::YES; + } + + if ( + $conflicts->contains(function ($conflict) { + return $conflict->priority == Priority::HIGH; + }) + ) { + return Availability::NO; + } + + return Availability::BETTER_NOT; + } + + public function assign(Shift $shift): void + { + $this->shifts->push($shift); + $this->points_max_data->used += $shift->points; + $this->shifts_max_data->used += 1; + if ($shift->is_weekend()) { + $this->weekends_max_data->used += 1; + } elseif ($shift->is_night()) { + $this->nights_max_data->used += 1; + } + } +} \ No newline at end of file diff --git a/database/migrations/2024_05_30_094012_create_soldier_table.php b/database/migrations/2024_05_30_094012_create_soldier_table.php index c1eadd3..8592eda 100644 --- a/database/migrations/2024_05_30_094012_create_soldier_table.php +++ b/database/migrations/2024_05_30_094012_create_soldier_table.php @@ -16,11 +16,11 @@ public function up(): void $table->dateTime('enlist_date')->nullable(); $table->integer('course'); $table->boolean('has_exemption'); - $table->integer('max_shifts')->nullable(); - $table->integer('max_nights')->nullable(); - $table->integer('max_weekends')->nullable(); + $table->integer('max_shifts')->default(0)->nullable(); + $table->integer('max_nights')->default(0)->nullable(); + $table->integer('max_weekends')->default(0)->nullable(); $table->integer('capacity'); - $table->integer('capacity_hold'); + $table->integer('capacity_hold')->default(0); $table->boolean('is_trainee'); $table->boolean('is_mabat'); $table->json('qualifications'); diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 089b319..dab9529 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -3,11 +3,9 @@ namespace Database\Seeders; use App\Models\Soldier; -use App\Models\Team; use App\Models\User; use Illuminate\Database\Seeder; use Illuminate\Support\Facades\Hash; -use App\Models\Department; use App\Models\Task; use App\Enums\RecurrenceType; use App\Services\ReccurenceEvents; diff --git a/lang/he.json b/lang/he.json index 4287cba..8aa4f83 100644 --- a/lang/he.json +++ b/lang/he.json @@ -5,6 +5,7 @@ "Add team": "הוסף צוות", "Additional settings":"הגדרות נוספות", "Alert": "התראה", + "All": "כולם", "Between":"בין", "Cancel":"ביטול", "Capacity": "מקסימום נקודות", @@ -70,6 +71,7 @@ "My Soldiers Constraints": "החיילים שלי", "My Soldiers Shift": "החיילים שלי", "My Soldiers Shifts": "החיילים שלי", + "My Soldiers": "החיילים שלי", "Name": "שם", "New":"חדש", "New task": "משימה חדשה", @@ -89,8 +91,10 @@ "Recurrence": "חזרתיות", "Recurrence type": "סוג חזרתיות", "Reserve": "מילואים", + "Reserves": "מילואימניקים", "Reserve dates": "ימי מילואים בחודש הנוכחי", "Reservist": "מילואימניק", + "Save": "שמור", "Save department": "שמור מדור", "Save team": "שמור צוות", "School":"לימודים", From 961f147cc07e77a4c86f26b81dceae25776763cf Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Mon, 28 Oct 2024 14:11:30 +0200 Subject: [PATCH 009/259] deploy after pull from dev --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 8 ++++---- app/Models/Shift.php | 9 ++++----- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index fa618c8..b77e788 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/newspacemali00 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/newspacemalimali flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 3941e88..619959e 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -174,8 +174,8 @@ protected function modalActions(): array } } - protected function viewAction(): Action - { - return ViewAction::make()->modalHeading(__('View').$this->model::getTitle()); - } + // protected function viewAction(): Action + // { + // return ViewAction::make()->modalHeading(__('View').$this->model::getTitle()); + // } } \ No newline at end of file diff --git a/app/Models/Shift.php b/app/Models/Shift.php index 12ec41e..35300a4 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -53,7 +53,7 @@ public static function getSchema(): array ->inlineLabel(), Grid::make() ->schema([ - ToggleButtons::make('shift_type') + ToggleButtons::make('soldier_type') ->required() ->label(__('Soldier')) ->reactive() @@ -66,14 +66,14 @@ public static function getSchema(): array ->label('Soldier assignment') ->options( function (?Shift $shift, Get $get) { - $manual_assignment = new \App\Services\ManualAssignment($shift, $get('shift_type')); + $manual_assignment = new \App\Services\ManualAssignment($shift, $get('soldier_type')); return $manual_assignment->getSoldiers(); } ) ->placeholder('Select soldier') ->visible( - fn (Get $get): bool => $get('shift_type') != null + fn (Get $get): bool => $get('soldier_type') != null ), ]) ->visible( @@ -109,9 +109,8 @@ protected static function getOptions(string $department_name): array 'all' => __('All'), ]; if (current(array: array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) != 'manager') { - return collect($options)->splice(1, 0, ['my_soldiers' => __('My Soldiers')])->toArray(); + return collect($options)->put('my_soldiers' , __('My Soldiers'))->toArray(); } - return $options; } From 6712c6912e5fe0fe3f1572dbcc13c9c33a8ce851 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Mon, 28 Oct 2024 14:44:30 +0200 Subject: [PATCH 010/259] deploy after pull from dev --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Models/Shift.php | 17 ++++++------- database/seeders/DatabaseSeeder.php | 28 ++++++++++++++-------- 3 files changed, 28 insertions(+), 19 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index b77e788..ac4f784 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/newspacemalimali + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/newspacemalisari flavor: | latest=false tags: | diff --git a/app/Models/Shift.php b/app/Models/Shift.php index 35300a4..494cf67 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -36,7 +36,7 @@ public function getTaskNameAttribute() { $user_name = User::where('userable_id', $this->soldier_id)->get(['first_name', 'last_name']); - return $this->task?->name.' '.$user_name->first()?->first_name.' '.$user_name->first()?->last_name; + return $this->task?->name . ' ' . $user_name->first()?->first_name . ' ' . $user_name->first()?->last_name; } public function getTaskColorAttribute() @@ -49,7 +49,7 @@ public static function getSchema(): array return [ Section::make([ Placeholder::make('') - ->content(content: fn (Shift $shift) => $shift->task_name) + ->content(content: fn(Shift $shift) => $shift->task_name) ->inlineLabel(), Grid::make() ->schema([ @@ -60,7 +60,7 @@ public static function getSchema(): array ->live() ->inline() ->options( - fn (?Shift $shift) => self::getOptions($shift->task->department_name) + fn(?Shift $shift) => self::getOptions($shift->task->department_name) ), Select::make('soldier_id') ->label('Soldier assignment') @@ -71,14 +71,15 @@ function (?Shift $shift, Get $get) { return $manual_assignment->getSoldiers(); } ) + ->default(null) ->placeholder('Select soldier') ->visible( - fn (Get $get): bool => $get('soldier_type') != null + fn(Get $get): bool => $get('soldier_type') != null ), ]) ->visible( - fn (?Shift $record, Get $get): bool => $record !== null - && ! $record->soldier_id + fn(?Shift $record, Get $get): bool => $record !== null + && !$record->soldier_id && \Str::contains($_SERVER['HTTP_REFERER'], 'my-soldiers-shifts') && current(array: array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) ) @@ -105,11 +106,11 @@ protected static function getOptions(string $department_name): array { $options = [ 'reserves' => __('Reserves'), - 'department' => '"'.$department_name.'" '.__('Department'), + 'department' => '"' . $department_name . '" ' . __('Department'), 'all' => __('All'), ]; if (current(array: array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) != 'manager') { - return collect($options)->put('my_soldiers' , __('My Soldiers'))->toArray(); + return collect($options)->put('my_soldiers', __('My Soldiers'))->toArray(); } return $options; } diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index dab9529..7ce00ea 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -8,6 +8,7 @@ use Illuminate\Support\Facades\Hash; use App\Models\Task; use App\Enums\RecurrenceType; +use App\Models\Department; use App\Services\ReccurenceEvents; class DatabaseSeeder extends Seeder { @@ -26,8 +27,12 @@ public function run(): void ]); $user->assignRole('manager'); + Department::factory()->create([ + 'name' => 'a1', + ]); Task::factory()->create([ 'name' => 'תכנון', + 'type' => 'תכנון', 'start_hour' => '08:30:00', 'duration' => 5, 'parallel_weight' => 0, @@ -36,7 +41,7 @@ public function run(): void ]); Task::factory()->create([ 'name' => 'תכנון סוף שבוע', - 'type' => 'planning', + 'type' => 'תכנון', 'start_hour' => '08:30:00', 'duration' => 5, 'parallel_weight' => 1, @@ -45,6 +50,7 @@ public function run(): void ]); Task::factory()->create([ 'name' => 'הטסה', + 'type' => 'הטסה', 'start_hour' => '09:00:00', 'duration' => 6, 'parallel_weight' => 0, @@ -53,6 +59,7 @@ public function run(): void ]); Task::factory()->create([ 'name' => 'הטסת לילה', + 'type' => 'הטסה', 'start_hour' => '00:00:00', 'duration' => 12, 'parallel_weight' => 0.5, @@ -61,6 +68,7 @@ public function run(): void ]); Task::factory()->create([ 'name' => 'בקרה', + 'type' => 'בקרה', 'start_hour' => '10:00:00', 'duration' => 6, 'parallel_weight' => 0, @@ -69,7 +77,7 @@ public function run(): void ]); User::factory()->create([ 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['planning', 'control'], + 'qualifications' => ['תכנון', 'בקרה'], 'capacity' => 0, 'max_nights' => 0, 'max_weekends' => 0, @@ -78,7 +86,7 @@ public function run(): void ]); User::factory()->create([ 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['planning', 'flight'], + 'qualifications' => ['תכנון', 'הטסה'], 'capacity' => 2, 'max_nights' => 1, 'max_weekends' => 2, @@ -87,7 +95,7 @@ public function run(): void ]); User::factory()->create([ 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['planning', 'flight'], + 'qualifications' => ['תכנון', 'הטסה'], 'capacity' => 2, 'max_nights' => 1, 'max_weekends' => 2, @@ -96,7 +104,7 @@ public function run(): void ]); User::factory()->create([ 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['planning', 'flight'], + 'qualifications' => ['תכנון', 'הטסה'], 'capacity' => 3, 'max_nights' => 1, 'max_weekends' => 2, @@ -105,7 +113,7 @@ public function run(): void ]); User::factory()->create([ 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['planning', 'flight'], + 'qualifications' => ['תכנון', 'הטסה'], 'capacity' => 3, 'max_nights' => 2, 'max_weekends' => 2, @@ -114,7 +122,7 @@ public function run(): void ]); User::factory()->create([ 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['planning', 'flight'], + 'qualifications' => ['תכנון', 'הטסה'], 'capacity' => 0, 'max_nights' => 0, 'max_weekends' => 0, @@ -123,7 +131,7 @@ public function run(): void ]); User::factory()->create([ 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['planning', 'flight'], + 'qualifications' => ['תכנון', 'הטסה'], 'capacity' => 3, 'max_nights' => 0, 'max_weekends' => 3, @@ -132,7 +140,7 @@ public function run(): void ]); User::factory()->create([ 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['planning', 'flight'], + 'qualifications' => ['תכנון', 'הטסה'], 'capacity' => 3, 'max_nights' => 0, 'max_weekends' => 3, @@ -141,7 +149,7 @@ public function run(): void ]); User::factory()->create([ 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['planning', 'flight'], + 'qualifications' => ['תכנון', 'הטסה'], 'capacity' => 1, 'max_nights' => 1, 'max_weekends' => 1, From 7ff1c0c5fb092269d343db07036f0ee165365c0d Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Mon, 28 Oct 2024 14:51:50 +0200 Subject: [PATCH 011/259] deploy after pull from dev --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Models/Shift.php | 6 +++++- app/Services/ReccurenceEvents.php | 1 + database/factories/ShiftFactory.php | 2 ++ .../migrations/2024_05_30_104216_create_shift_table.php | 2 ++ 5 files changed, 11 insertions(+), 2 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index ac4f784..90ae51d 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/newspacemalisari + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/newspacemalisari2 flavor: | latest=false tags: | diff --git a/app/Models/Shift.php b/app/Models/Shift.php index 494cf67..3e17f06 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -12,12 +12,14 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; - +use Filament\Forms\Components\TextInput; +use Filament\Forms\Components\Toggle; class Shift extends Model { use HasFactory; protected $fillable = [ + 'parallel_weight', 'start_date', 'end_date', ]; @@ -51,6 +53,8 @@ public static function getSchema(): array Placeholder::make('') ->content(content: fn(Shift $shift) => $shift->task_name) ->inlineLabel(), + Toggle::make('is_weekend'), + TextInput::make('parallel_weight'), Grid::make() ->schema([ ToggleButtons::make('soldier_type') diff --git a/app/Services/ReccurenceEvents.php b/app/Services/ReccurenceEvents.php index 7fb35eb..432a4f0 100644 --- a/app/Services/ReccurenceEvents.php +++ b/app/Services/ReccurenceEvents.php @@ -113,6 +113,7 @@ protected function createShifts(array $dates) { collect($dates)->map(function ($date) { $shift = new Shift; + $shift->parallel_weight = $this->task['parallel_weight']; $shift->start_date = $date; $shift->end_date = $this->calculateEndDateTime($date); $shift->task_id = $this->task['id']; diff --git a/database/factories/ShiftFactory.php b/database/factories/ShiftFactory.php index fdaaf44..e51cf8b 100644 --- a/database/factories/ShiftFactory.php +++ b/database/factories/ShiftFactory.php @@ -15,6 +15,8 @@ public function definition(): array 'soldier_id' => User::factory()->create()->userable_id, 'task_id' => Task::factory()->create()->id, 'start_date' => now(), + 'is_weekend' => fake()->boolean(), + 'parallel_weight' => fake()->randomDigit(), 'end_date' => Carbon::now()->addDay(), ]; } diff --git a/database/migrations/2024_05_30_104216_create_shift_table.php b/database/migrations/2024_05_30_104216_create_shift_table.php index bbecf5f..421f004 100644 --- a/database/migrations/2024_05_30_104216_create_shift_table.php +++ b/database/migrations/2024_05_30_104216_create_shift_table.php @@ -12,6 +12,8 @@ public function up(): void $table->id(); $table->foreignId('soldier_id')->nullable(); $table->foreignId('task_id')->nullable(); + $table->boolean('is_weekend')->nullable(); + $table->boolean('parallel_weight')->nullable(); $table->dateTime('start_date'); $table->dateTime('end_date'); $table->timestamps(); From dab911096d1d4cd440fa21a912a2ff0bba8fd25d Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Mon, 28 Oct 2024 15:08:27 +0200 Subject: [PATCH 012/259] deploy after pull from dev --- .github/workflows/php-build-and-deploy.yml | 2 +- database/migrations/2024_05_30_104216_create_shift_table.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 90ae51d..48b3d70 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/newspacemalisari2 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/newspacemalisari3 flavor: | latest=false tags: | diff --git a/database/migrations/2024_05_30_104216_create_shift_table.php b/database/migrations/2024_05_30_104216_create_shift_table.php index 421f004..8395d54 100644 --- a/database/migrations/2024_05_30_104216_create_shift_table.php +++ b/database/migrations/2024_05_30_104216_create_shift_table.php @@ -13,7 +13,7 @@ public function up(): void $table->foreignId('soldier_id')->nullable(); $table->foreignId('task_id')->nullable(); $table->boolean('is_weekend')->nullable(); - $table->boolean('parallel_weight')->nullable(); + $table->integer('parallel_weight')->nullable(); $table->dateTime('start_date'); $table->dateTime('end_date'); $table->timestamps(); From 4e6078f563245bdcc1abe06c4aa3083780f8c5f2 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Mon, 28 Oct 2024 15:22:55 +0200 Subject: [PATCH 013/259] deploy after pull from dev --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Models/Shift.php | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 48b3d70..2d81f6f 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/newspacemalisari3 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/newspacesari flavor: | latest=false tags: | diff --git a/app/Models/Shift.php b/app/Models/Shift.php index 3e17f06..7cc005c 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -58,7 +58,6 @@ public static function getSchema(): array Grid::make() ->schema([ ToggleButtons::make('soldier_type') - ->required() ->label(__('Soldier')) ->reactive() ->live() @@ -101,6 +100,11 @@ function (?Shift $shift, Get $get) { public static function afterSave($shift, $record) { + if ( + !isset($shift->soldier_id) + || !isset($shift->soldier_type) + ) + return; $soldier = Soldier::find($shift['soldier_id']); $shift = Shift::find($record->id); $soldier->update(['capacity_hold' => (float) $soldier->capacity_hold + $shift->task->parallel_weight]); From ec77489badb60323df7bd2535a61c6997abf2699 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 1 Dec 2024 11:28:09 +0200 Subject: [PATCH 014/259] deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Enums/DaysInWeek.php | 27 + app/Enums/Priority.php | 2 +- app/Enums/RecurrenceType.php | 6 +- app/Enums/RecurringType.php | 25 + app/Filament/Widgets/CalendarWidget.php | 299 ++++-- app/Filters/NumberFilter.php | 126 ++- app/Models/Constraint.php | 71 +- app/Models/Shift.php | 209 ++++- app/Models/Soldier.php | 12 +- app/Models/Task.php | 19 +- app/Models/User.php | 15 +- app/Providers/AppServiceProvider.php | 18 +- app/Providers/FilamentServiceProvider.php | 1 + .../Pages/EditConstraint.php | 5 +- app/Resources/DepartmentResource.php | 8 +- .../Pages/CreateDepartment.php | 14 +- .../Pages/EditDepartment.php | 8 - .../Pages/EditMyConstraint.php | 5 +- app/Resources/MyShiftResource.php | 3 +- .../MyShiftResource/Pages/EditMyShift.php | 5 +- app/Resources/ProfileResource.php | 18 +- .../ProfileResource/Pages/EditProfile.php | 8 - app/Resources/ShiftResource.php | 3 +- .../ShiftResource/Pages/EditShift.php | 5 +- .../ShiftResource/Pages/ListShifts.php | 3 +- app/Resources/SoldierResource.php | 57 +- app/Resources/TaskResource.php | 396 +++++--- .../TaskResource/Pages/CreateTask.php | 55 +- app/Resources/TaskResource/Pages/EditTask.php | 9 +- app/Resources/TeamResource.php | 4 +- .../TeamResource/Pages/CreateTeam.php | 12 + app/Resources/TeamResource/Pages/EditTeam.php | 8 - app/Services/Algorithm.php | 136 +++ app/Services/Assignment.php | 16 + app/Services/Constraint.php | 2 +- app/Services/ManualAssignment.php | 241 +++-- app/Services/MaxData.php | 24 +- app/Services/PotentialSoldierData.php | 16 + app/Services/Range.php | 50 +- app/Services/ReccurenceEvents.php | 123 --- app/Services/RecurringEvents.php | 150 +++ app/Services/Schedule.php | 301 ++++++ app/Services/Shift.php | 69 +- app/Services/ShiftData.php | 19 + app/Services/Soldier.php | 83 +- app/Services/Test.php | 41 + bootstrap/app.php | 8 +- database/factories/ConstraintFactory.php | 8 +- database/factories/ShiftFactory.php | 2 +- database/factories/SoldierFactory.php | 2 +- database/factories/TaskFactory.php | 2 +- database/factories/UserFactory.php | 4 +- .../2024_05_30_100244_create_task_table.php | 7 +- database/seeders/DatabaseSeeder.php | 871 +++++++++++++++--- lang/he.json | 42 +- .../override-filament-fullcalendar.css | 20 + public/images/logo.png | Bin 0 -> 76636 bytes resources/views/picture.blade.php | 3 + tests/Feature/CalendarWidgetTest.php | 60 +- tests/Feature/DeleteTaskTest.php | 82 ++ tests/Feature/ListTaskTest.php | 31 + ...EventsTest.php => RecurringEventsTest.php} | 80 +- tests/Pest.php | 2 +- tests/Unit/AlgorithmServiceTest.php | 58 ++ tests/Unit/MaxDataServiceTest.php | 18 + tests/Unit/RangeServiceTest.php | 64 ++ tests/Unit/ScheduleServiceTest.php | 52 ++ tests/Unit/ShiftServiceTest.php | 236 +++++ tests/Unit/SoldierServiceTest.php | 98 ++ 70 files changed, 3676 insertions(+), 803 deletions(-) create mode 100644 app/Enums/DaysInWeek.php create mode 100644 app/Enums/RecurringType.php create mode 100644 app/Services/Algorithm.php create mode 100644 app/Services/Assignment.php create mode 100644 app/Services/PotentialSoldierData.php delete mode 100644 app/Services/ReccurenceEvents.php create mode 100644 app/Services/RecurringEvents.php create mode 100644 app/Services/Schedule.php create mode 100644 app/Services/ShiftData.php create mode 100644 app/Services/Test.php create mode 100644 public/css/saade/filament-fullcalendar/override-filament-fullcalendar.css create mode 100644 public/images/logo.png create mode 100644 resources/views/picture.blade.php create mode 100644 tests/Feature/DeleteTaskTest.php create mode 100644 tests/Feature/ListTaskTest.php rename tests/Feature/{ReccurenceEventsTest.php => RecurringEventsTest.php} (54%) create mode 100644 tests/Unit/AlgorithmServiceTest.php create mode 100644 tests/Unit/MaxDataServiceTest.php create mode 100644 tests/Unit/RangeServiceTest.php create mode 100644 tests/Unit/ScheduleServiceTest.php create mode 100644 tests/Unit/ShiftServiceTest.php create mode 100644 tests/Unit/SoldierServiceTest.php diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 2d81f6f..f84a5e1 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/newspacesari + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/start flavor: | latest=false tags: | diff --git a/app/Enums/DaysInWeek.php b/app/Enums/DaysInWeek.php new file mode 100644 index 0000000..a3f1542 --- /dev/null +++ b/app/Enums/DaysInWeek.php @@ -0,0 +1,27 @@ + __('Sunday'), + self::MONDAY => __('Monday'), + self::TUESDAY => __('Tuesday'), + self::WEDNESDAY => __('Wednesday'), + self::THURSDAY => __('Thursday'), + self::FRIDAY => __('Friday'), + self::SATURDAY => __('Saturday'), + }; + } +} diff --git a/app/Enums/Priority.php b/app/Enums/Priority.php index d2797cc..34d7260 100644 --- a/app/Enums/Priority.php +++ b/app/Enums/Priority.php @@ -6,4 +6,4 @@ enum Priority: int { case HIGH = 2; case LOW = 1; -} \ No newline at end of file +} diff --git a/app/Enums/RecurrenceType.php b/app/Enums/RecurrenceType.php index 42cf67f..a3d7fc5 100644 --- a/app/Enums/RecurrenceType.php +++ b/app/Enums/RecurrenceType.php @@ -8,7 +8,8 @@ enum RecurrenceType: string case WEEKLY = 'Weekly'; case MONTHLY = 'Monthly'; case CUSTOM = 'Custom'; - case ONETIME = 'OneTime'; + case ONETIME = 'One time'; + case DAILY_RANGE = 'Daily range'; public function getLabel(): string { @@ -17,7 +18,8 @@ public function getLabel(): string self::WEEKLY => __('Weekly'), self::MONTHLY => __('Monthly'), self::CUSTOM => __('Custom'), - self::ONETIME => __('OneTime'), + self::ONETIME => __('One time'), + self::DAILY_RANGE => __('Daily range'), }; } } diff --git a/app/Enums/RecurringType.php b/app/Enums/RecurringType.php new file mode 100644 index 0000000..3bfe118 --- /dev/null +++ b/app/Enums/RecurringType.php @@ -0,0 +1,25 @@ + __('Daily'), + self::WEEKLY => __('Weekly'), + self::MONTHLY => __('Monthly'), + self::CUSTOM => __('Custom'), + self::ONETIME => __('One time'), + self::DAILY_RANGE => __('Daily range'), + }; + } +} diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 619959e..f5c03cf 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -3,12 +3,13 @@ namespace App\Filament\Widgets; use App\Models\Constraint; -use App\Models\Department; use App\Models\Shift; -use App\Models\Team; +use App\Models\Soldier; +use App\Models\Task; +use App\Services\RecurringEvents; +use Carbon\Carbon; use Filament\Actions\Action; use Filament\Forms\Form; -use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Collection; use Illuminate\Support\Facades\Schema; @@ -29,16 +30,32 @@ class CalendarWidget extends FullCalendarWidget public ?string $type; + public bool $filter = false; + + public $filterData = []; + + public $lastFilterData = []; + + public $activeFilters = []; + + public $currentMonth; + public function fetchEvents(array $fetchInfo): array { - $query = $this->model::query(); - $eventsByRole = $this->getEventsByRole(); - $query = $eventsByRole($query); - $query->where('start_date', '>=', $fetchInfo['start']) + if (Carbon::parse($fetchInfo['start'])->day != 1) { + $this->currentMonth = Carbon::parse($fetchInfo['start'])->addMonth()->year.'-'.Carbon::parse($fetchInfo['start'])->addMonth()->month.'-'.'01'; + } else { + $this->currentMonth = Carbon::parse($fetchInfo['start'])->year.'-'.Carbon::parse($fetchInfo['start'])->month.'-'.'01'; + } + + $events = $this->getEventsByRole(); + + $events->where('start_date', '>=', $fetchInfo['start']) ->where('end_date', '<=', $fetchInfo['end']); - return $query->get() + return self::events($events) + ->map(function (Model $event) { return [ 'id' => $event[$this->keys[0]], @@ -54,48 +71,37 @@ public function fetchEvents(array $fetchInfo): array ->toArray(); } - protected function getEventsByRole() + public function getEventsByRole() { $current_user_id = auth()->user()->userable_id; - $role = current(array: array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])); - $tableName = strtolower(class_basename($this->model)).'s'; - return ($this->type === 'my_soldiers') ? match ($role) { - 'manager' => fn (Builder $query) => $query - ->where('soldier_id', '!=', $current_user_id) - ->orWhereNull('soldier_id'), - 'department-commander' => fn (Builder $query) => $query - ->leftJoin('soldiers', 'soldier_id', '=', 'soldiers.id') - ->leftJoin('teams', 'soldiers.team_id', '=', 'teams.id') - ->where(function ($q) use ($current_user_id) { - $q->where('teams.department_id', '=', value: Department::where('commander_id', $current_user_id)->value('id')) - ->orWhere(function ($q) { - $q->whereNull('soldiers.team_id') - ->whereNull('soldier_id'); - }); - }) - ->where(function ($q) use ($current_user_id) { - $q->where('soldier_id', '!=', $current_user_id) - ->orWhereNull('soldier_id'); - }) - ->select("{$tableName}.*"), - 'team-commander' => fn (Builder $query) => $query - ->leftJoin('soldiers', 'soldiers.id', '=', 'soldier_id') - ->where(function ($q) use ($current_user_id) { - $q->where('soldiers.team_id', '=', Team::where('commander_id', $current_user_id)->value('id')) - ->orWhere(function ($q) { - $q->whereNull('soldiers.team_id') - ->whereNull('soldier_id'); - }); - }) - ->where(function ($q) use ($current_user_id) { - $q->where('soldier_id', '!=', $current_user_id) - ->orWhereNull('soldier_id'); - }) - ->select("{$tableName}.*"), - } : fn (Builder $query) => $query->where('soldier_id', $current_user_id); + 'manager' => $this->model::where('soldier_id', '!=', $current_user_id) + ->orWhereNull('soldier_id') + ->get(), + 'department-commander' => $this->model::where('soldier_id', '!=', $current_user_id) + ->orWhereNull('soldier_id') + ->get() + ->filter(function (Model $object) use ($current_user_id) { + $soldier = Soldier::where('id', '=', $object->soldier_id)->first(); + + return ! $soldier || $soldier?->team?->department?->commander_id == $current_user_id; + }), + 'team-commander' => $this->model::where('soldier_id', '!=', $current_user_id) + ->orWhereNull('soldier_id') + ->get() + ->filter(function (Model $object) use ($current_user_id) { + $soldier = Soldier::where('id', '=', $object->soldier_id)->first(); + + return ! $soldier || $soldier?->team?->commander_id == $current_user_id; + }), + } : $this->model::where('soldier_id', '=', $current_user_id)->get(); + } + + protected function events($events): Collection + { + return $this->filter ? $this->model::filter($events, $this->filterData) : $events; } public function getFormSchema(): array @@ -105,28 +111,108 @@ public function getFormSchema(): array protected function headerActions(): array { + $today = now()->startOfDay(); + $actions = []; if ($this->type === 'my') { if ($this->model === Constraint::class) { return [ CreateAction::make() - ->mountUsing( - function (Form $form, array $arguments) { - $form->fill([ - 'start_date' => $arguments['start'] ?? null, - 'end_date' => $arguments['end'] ?? null, - ]); - } - )->label(label: $this->model::getTitle().' '.__('New'))->modalHeading(__('Create').' '.$this->model::getTitle()), + ->mountUsing(function (Form $form, array $arguments) { + $form->fill([ + 'start_date' => $arguments['start'] ?? null, + 'end_date' => $arguments['end'] ?? null, + ]); + }) + ->label($this->model::getTitle().' '.__('New')) + ->modalHeading(__('Create').' '.$this->model::getTitle()) + ->disabled(function (array $arguments) use ($today) { + $startDate = Carbon::parse($arguments['start'] ?? null); + + return $startDate->isBefore($today); + }), ]; } } elseif ($this->model !== Shift::class) { FilamentFullCalendarPlugin::get()->editable(false); FilamentFullCalendarPlugin::get()->selectable(false); + } else { + + if (Task::exists()) { + $actions = [ + Action::make('Shifts assignment') + ->action(fn (): RecurringEvents => self::runEvents()) + ->label(__('Shifts assignment')) + ->icon('heroicon-o-arrow-path') + ->visible(current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))), + + Action::make('Run Algorithm') + ->action(fn (): RecurringEvents => self::runEvents()) + ->label(__('Run Algorithm')) + ->icon('heroicon-o-play') + ->visible(current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))), + ]; + } } - return []; + if ($this->lastFilterData != $this->filterData) { + $this->refreshRecords(); + $this->lastFilterData = $this->filterData; + } + + if ($this->filter) { + return array_merge(self::activeFilters(), [ + self::resetFilters(), + $this->model::getFilters($this) + ->closeModalByClickingAway(false), + ]); + } + + return array_merge( + $actions ?? [], + [ + $this->model::getFilters($this) + ->closeModalByClickingAway(false), + ] + ); } + protected function runEvents() + { + $recurringEvents = new RecurringEvents($this->currentMonth); + $recurringEvents->recurringTask(); + $this->refreshRecords(); + + return $recurringEvents; + } + + protected function resetFilters() + { + return Action::make('resetFilters') + ->label(__('Reset filters')) + ->action(function () { + $this->filter = false; + $this->filterData = []; + $this->refreshRecords(); + }); + } + + protected function activeFilters() + { + $activeFilters = $this->model::activeFilters($this); + + $tags = collect($activeFilters)->map(function ($tag) { + return Action::make($tag) + ->label($tag) + ->disabled() + ->badge(); + }); + + return $tags->toArray(); + + } + + protected function run() {} + public function getConfig(): array { return array_merge(parent::getConfig(), [ @@ -136,46 +222,79 @@ public function getConfig(): array protected function modalActions(): array { - if ($this->type === 'my' || ($this->type === 'my_soldiers' && $this->model === Shift::class)) { - return [ - EditAction::make() - ->fillForm(fn (Model $record, array $arguments): array => [ - ...$record->getAttributes(), + $basicActions = [ + EditAction::make() + ->fillForm(function (Model $record, array $arguments): array { + return method_exists($this->model, 'fillForm') + ? (new $this->model)->fillForm($record, $arguments) + : [...$record->getAttributes(), 'start_date' => $arguments['event']['start'] ?? $record->start_date, - 'end_date' => $arguments['event']['end'] ?? $record->end_date, - ]) - ->modalCloseButton(false) - ->modalCancelAction(false) - ->modalSubmitAction(false) - ->closeModalByClickingAway(false) - ->extraModalFooterActions(fn (Action $action): array => [ - $action->makeExtraModalAction(__('Save'), arguments: ['save' => true])->color('primary'), - $action->makeExtraModalAction(__('Cancel'), arguments: ['cancel' => true])->color('primary'), - ]) - ->modalHeading(__('Edit').' '.$this->model::getTitle()) - ->action(function (array $data, array $arguments, Model $record): void { - if ($arguments['cancel'] ?? false) { - $this->refreshRecords(); - } - if ($arguments['save'] ?? false) { - $columns = Schema::getColumnListing(strtolower(class_basename($this->model)).'s'); - $filteredData = array_intersect_key($data, array_flip($columns)); - $this->model::where('id', operator: $record['id'])->update([...$filteredData]); - method_exists($this->model, 'afterSave') && $this->model::afterSave($data, $record); + 'end_date' => $arguments['event']['end'] ?? $record->end_date]; + }) + ->modalCloseButton(false) + ->modalCancelAction(false) + ->modalSubmitAction(false) + ->closeModalByClickingAway(false) + ->extraModalFooterActions(fn (Action $action): array => [ + $action->makeExtraModalAction(__('Save'), arguments: ['save' => true])->color('primary'), + $action->makeExtraModalAction(__('Cancel'), arguments: ['cancel' => true])->color('primary'), + ]) + ->modalHeading(__('Edit').' '.$this->model::getTitle()) + ->action(function (array $data, array $arguments, Model $record): void { + $data = method_exists($this->model, 'setData') ? $data = $this->model::setData($record, $data) : $data; + if ($arguments['cancel'] ?? false) { + $this->refreshRecords(); + } + if ($arguments['save'] ?? false) { + $columns = Schema::getColumnListing(strtolower(class_basename($this->model)).'s'); + $filteredData = array_intersect_key($data, array_flip($columns)); + $record = $this->model::find($record['id']); + if ($record) { + collect($filteredData)->map(function ($value, $key) use ($record) { + $record->{$key} = $value; + }); + $record->save(); } - }), - DeleteAction::make(), - ]; - } else { - FilamentFullCalendarPlugin::get()->editable(false); - FilamentFullCalendarPlugin::get()->selectable(false); + method_exists($this->model, 'afterSave') && $this->model::afterSave($data, $record); + } + }), + DeleteAction::make() + ->label(__('Delete')), + ]; + if ($this->type === 'my' || ($this->type === 'my_soldiers' && $this->model === Shift::class)) { + if (method_exists($this->model, 'getAction')) { + $action = $this->model::getAction($this) + ->visible(function (): bool { + $record = is_array($this->mountedActionsData) && ! empty($this->mountedActionsData) + ? (object) $this->mountedActionsData[0] + : (object) $this->mountedActionsData; + + return $this->model === 'App\Models\Shift' && $record->soldier_id !== null; + }) + ->closeModalByClickingAway(false) + ->cancelParentActions(); - return []; + return array_merge($basicActions, [$action]); + } + + return $basicActions; } + FilamentFullCalendarPlugin::get()->editable(false); + FilamentFullCalendarPlugin::get()->selectable(false); + + return []; } - // protected function viewAction(): Action - // { - // return ViewAction::make()->modalHeading(__('View').$this->model::getTitle()); - // } + protected function viewAction(): Action + { + return ViewAction::make() + ->fillForm(function (Model $record, array $arguments): array { + return method_exists($this->model, 'fillForm') + ? (new $this->model)->fillForm($record, $arguments) + : [...$record->getAttributes(), + 'start_date' => $arguments['event']['start'] ?? $record->start_date, + 'end_date' => $arguments['event']['end'] ?? $record->end_date]; + }) + ->modalHeading(__('View').$this->model::getTitle()); + } } \ No newline at end of file diff --git a/app/Filters/NumberFilter.php b/app/Filters/NumberFilter.php index 471e0f6..0598c6f 100644 --- a/app/Filters/NumberFilter.php +++ b/app/Filters/NumberFilter.php @@ -32,12 +32,24 @@ protected function setUp(): void 'greater_than_equal' => __('Greater than equal'), 'less_than' => __('Less than'), 'less_than_equal' => __('Less than equal'), - ]), + ]) + ->afterStateUpdated(function (callable $set) { + $set('range_equal', null); + $set('range_not_equal', null); + $set('range_between_from', null); + $set('range_between_to', null); + $set('range_greater_than', null); + $set('range_greater_than_equal', null); + $set('range_less_than', null); + $set('range_less_than_equal', null); + }), TextInput::make('range_equal') + ->label(__('Equal')) ->hiddenLabel() ->numeric() ->visible(fn (Get $get): bool => $get('range_condition') === 'equal'), TextInput::make('range_not_equal') + ->label(__('Not equal')) ->hiddenLabel() ->numeric() ->visible(fn (Get $get): bool => $get('range_condition') === 'not_equal'), @@ -47,70 +59,116 @@ protected function setUp(): void ]) ->schema([ TextInput::make('range_between_from') - ->hiddenLabel() + ->label(__('Between from')) ->numeric(), TextInput::make('range_between_to') - ->hiddenLabel() + ->label(__('Between to')) ->numeric(), ]) ->visible(fn (Get $get): bool => $get('range_condition') === 'between'), TextInput::make('range_greater_than') + ->label(__('Greater than')) ->hiddenLabel() ->numeric() ->visible(fn (Get $get): bool => $get('range_condition') === 'greater_than'), TextInput::make('range_greater_than_equal') + ->label(__('Greater than equal')) ->hiddenLabel() ->numeric() ->visible(fn (Get $get): bool => $get('range_condition') === 'greater_than_equal'), TextInput::make('range_less_than') + ->label(__('Less than')) ->hiddenLabel() ->numeric() ->visible(fn (Get $get): bool => $get('range_condition') === 'less_than'), TextInput::make('range_less_than_equal') + ->label(__('Less than equal')) ->hiddenLabel() ->numeric() ->visible(fn (Get $get): bool => $get('range_condition') === 'less_than_equal'), ]) ->columns(1), ]) - ->query(function (Builder $query, array $data): Builder { + ->query(function (Builder $query, array $data) { + $allObjects = $query->getModel()::all(); + return $query ->when( - $data['range_equal'], - fn (Builder $query, $value): Builder => $query->where($this->getName(), '=', $value), + ! empty($data['range_equal']), + function () use ($allObjects, $data, $query) { + $filteredIds = $allObjects + ->filter(fn ($object) => $object[$this->getName()] == $data['range_equal']) + ->pluck('id'); + + return $query->whereIn('id', $filteredIds); + } ) ->when( - $data['range_not_equal'], - fn (Builder $query, $value): Builder => $query->where($this->getName(), '!=', $value), + ! empty($data['range_not_equal']), + function () use ($allObjects, $data, $query) { + $filteredIds = $allObjects + ->filter(fn ($object) => $object[$this->getName()] != $data['range_not_equal']) + ->pluck('id'); + + return $query->whereIn('id', $filteredIds); + } ) ->when( - $data['range_between_from'] && $data['range_between_to'], - function (Builder $query, $value) use ($data) { - $query->where($this->getName(), '>=', $data['range_between_from'])->where($this->getName(), '<=', $data['range_between_to']); - }, + ! empty($data['range_between_from']) && ! empty($data['range_between_to']), + function () use ($allObjects, $data, $query) { + $filteredIds = $allObjects + ->filter(fn ($object) => $object[$this->getName()] >= $data['range_between_from'] && $object[$this->getName()] <= $data['range_between_to']) + ->pluck('id'); + + return $query->whereIn('id', $filteredIds); + } ) ->when( - $data['range_greater_than'], - fn (Builder $query, $value): Builder => $query->where($this->getName(), '>', $value), + ! empty($data['range_greater_than']), + function () use ($allObjects, $data, $query) { + $filteredIds = $allObjects + ->filter(fn ($object) => $object[$this->getName()] > $data['range_greater_than']) + ->pluck('id'); + + return $query->whereIn('id', $filteredIds); + } ) ->when( - $data['range_greater_than_equal'], - fn (Builder $query, $value): Builder => $query->where($this->getName(), '>=', $value), + ! empty($data['range_greater_than_equal']), + function () use ($allObjects, $data, $query) { + $filteredIds = $allObjects + ->filter(fn ($object) => $object[$this->getName()] >= $data['range_greater_than_equal']) + ->pluck('id'); + + return $query->whereIn('id', $filteredIds); + } ) ->when( - $data['range_less_than'], - fn (Builder $query, $value): Builder => $query->where($this->getName(), '<', $value), + ! empty($data['range_less_than']), + function () use ($allObjects, $data, $query) { + $filteredIds = $allObjects + ->filter(fn ($object) => $object[$this->getName()] < $data['range_less_than']) + ->pluck('id'); + + return $query->whereIn('id', $filteredIds); + } ) ->when( - $data['range_less_than_equal'], - fn (Builder $query, $value): Builder => $query->where($this->getName(), '<=', $value), + ! empty($data['range_less_than_equal']), + function () use ($allObjects, $data, $query) { + $filteredIds = $allObjects + ->filter(fn ($object) => $object[$this->getName()] <= $data['range_less_than_equal']) + ->pluck('id'); + + return $query->whereIn('id', $filteredIds); + } ); }) ->indicateUsing(function (array $data): array { $indicators = []; - if ($data['range_between_from'] || $data['range_between_to']) { - $indicators[] = Indicator::make(__(':label is between :fromValue and :toValue', [ + if (! empty($data['range_between_from']) || ! empty($data['range_between_to'])) { + $indicators[] = Indicator::make(__(':label '.__('Is between').' :fromValue '.__('And').' :toValue', [ 'label' => $this->getLabel(), 'fromValue' => $data['range_between_from'], 'toValue' => $data['range_between_to'], @@ -119,48 +177,48 @@ function (Builder $query, $value) use ($data) { ->removeField('range_between_to'); } - if ($data['range_equal']) { - $indicators[] = Indicator::make(__(':label is equal to :value', [ + if (! empty($data['range_equal'])) { + $indicators[] = Indicator::make(__(':label '.__('Is equal').' to :value', [ 'label' => $this->getLabel(), 'value' => $data['range_equal'], ])) ->removeField('range_equal'); } - if ($data['range_not_equal']) { - $indicators[] = Indicator::make(__(':label is not equal to :value', [ + if (! empty($data['range_not_equal'])) { + $indicators[] = Indicator::make(__(':label '.__('Is not equal').' to :value', [ 'label' => $this->getLabel(), 'value' => $data['range_not_equal'], ])) ->removeField('range_not_equal'); } - if ($data['range_greater_than']) { - $indicators[] = Indicator::make(__(':label is greater than :value', [ + if (! empty($data['range_greater_than'])) { + $indicators[] = Indicator::make(__(':label '.__('Is greater than').' :value', [ 'label' => $this->getLabel(), 'value' => $data['range_greater_than'], ])) ->removeField('range_greater_than'); } - if ($data['range_greater_than_equal']) { - $indicators[] = Indicator::make(__(':label is greater than or equal to :value', [ + if (! empty($data['range_greater_than_equal'])) { + $indicators[] = Indicator::make(__(':label '.__('Is greater than or equal').' :value', [ 'label' => $this->getLabel(), 'value' => $data['range_greater_than_equal'], ])) ->removeField('range_greater_than_equal'); } - if ($data['range_less_than']) { - $indicators[] = Indicator::make(__(':label is less than :value', [ + if (! empty($data['range_less_than'])) { + $indicators[] = Indicator::make(__(':label '.__('Is less than').' :value', [ 'label' => $this->getLabel(), 'value' => $data['range_less_than'], ])) ->removeField('range_less_than'); } - if ($data['range_less_than_equal']) { - $indicators[] = Indicator::make(__(':label is less than or equal to :value', [ + if (! empty($data['range_less_than_equal'])) { + $indicators[] = Indicator::make(__(':label '.__('Is less than or equal').' :value', [ 'label' => $this->getLabel(), 'value' => $data['range_less_than_equal'], ])) diff --git a/app/Models/Constraint.php b/app/Models/Constraint.php index e71768d..54f040b 100644 --- a/app/Models/Constraint.php +++ b/app/Models/Constraint.php @@ -4,10 +4,12 @@ use App\Enums\ConstraintType; use Carbon\Carbon; +use Filament\Actions\Action; use Filament\Forms\Components\DateTimePicker; use Filament\Forms\Components\Grid; use Filament\Forms\Components\Hidden; use Filament\Forms\Components\Placeholder; +use Filament\Forms\Components\Select; use Filament\Forms\Components\ToggleButtons; use Filament\Forms\Get; use Illuminate\Database\Eloquent\Factories\HasFactory; @@ -26,8 +28,8 @@ class Constraint extends Model ]; protected $casts = [ - 'start_date' => 'datetime:Y-m-d', - 'end_date' => 'datetime:Y-m-d', + 'start_date' => 'datetime:Y-m-d H:i:s', + 'end_date' => 'datetime:Y-m-d H:i:s', ]; public function soldiers(): BelongsTo @@ -49,13 +51,21 @@ public static function getSchema(): array ->inline() ->options(fn (Get $get) => self::availableOptions($get)) ->afterStateUpdated(fn (callable $set, $state, Get $get) => self::updateDates($set, $state, $get)), - Hidden::make('start_date')->required(), - Hidden::make('end_date')->required(), + Hidden::make('start_date') + ->required(), + Hidden::make('end_date') + ->required(), Grid::make() ->visible(fn ($get) => in_array($get('constraint_type'), ['Medical', 'Vacation', 'School', 'Not task', 'Low priority not task'])) ->schema([ - DateTimePicker::make('start_date')->label(__('Start date'))->required(), - DateTimePicker::make('end_date')->label(__('End date'))->required(), + DateTimePicker::make('start_date') + ->label(__('Start date')) + ->minDate(today()) + ->required(), + DateTimePicker::make('end_date') + ->label(__('End date')) + ->after('start_date') + ->required(), ]), ]; } @@ -165,7 +175,9 @@ public function getConstraintNameAttribute() { $translatedConstraint = __($this->constraint_type); - return $translatedConstraint.' '.$this->soldier_name; + return $this->soldier_id == auth()->user()->userable_id + ? $translatedConstraint + : $translatedConstraint.' '.$this->soldier_name; } public function getConstraintColorAttribute() @@ -173,7 +185,50 @@ public function getConstraintColorAttribute() return ConstraintType::from($this->constraint_type)->getColor(); } - public static function getTitle(): string|Htmlable + public static function getFilters($calendar) + { + return Action::make('Filters') + ->label(__('Filter')) + ->icon('heroicon-m-funnel') + ->form(function () use ($calendar) { + $constraints = $calendar->getEventsByRole(); + $soldiersConstraints = array_filter($constraints->toArray(), fn ($constraint) => $constraint['soldier_id'] !== null); + + return [ + Select::make('soldier_id') + ->label(__('Soldier')) + ->options(fn (): array => collect($soldiersConstraints)->mapWithKeys(fn ($constraint) => [$constraint['soldier_id'] => User::where('userable_id', $constraint['soldier_id']) + ->first()?->displayName])->toArray()) + ->multiple(), + ]; + }) + ->modalSubmitActionLabel(__('Filter')) + ->action(function (array $data) use ($calendar) { + $calendar->filterData = $data; + $calendar->filter = $data['soldier_id'] === [] ? false : true; + $calendar->refreshRecords(); + }); + } + + public static function filter($events, $filterData) + { + return $events + ->whereIn('soldier_id', $filterData['soldier_id']) + ->values(); + } + + public static function activeFilters($calendar) + { + if ($calendar->filter) { + $activeFilter = collect($calendar->filterData['soldier_id'])->map(function ($soldier_id) { + return User::where('userable_id', $soldier_id)->first()->displayName; + }); + } + + return $activeFilter->toArray(); + } + + public static function getTitle(): string { return __('Constraint'); } diff --git a/app/Models/Shift.php b/app/Models/Shift.php index 7cc005c..3b31615 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -2,18 +2,23 @@ namespace App\Models; +use App\Casts\Integer; +use App\Services\ManualAssignment; +use Filament\Actions\Action; use Filament\Forms\Components\DateTimePicker; use Filament\Forms\Components\Grid; use Filament\Forms\Components\Placeholder; use Filament\Forms\Components\Section; use Filament\Forms\Components\Select; +use Filament\Forms\Components\TextInput; +use Filament\Forms\Components\Toggle; use Filament\Forms\Components\ToggleButtons; use Filament\Forms\Get; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; -use Filament\Forms\Components\TextInput; -use Filament\Forms\Components\Toggle; +use Illuminate\Support\Facades\Cache; + class Shift extends Model { use HasFactory; @@ -25,8 +30,9 @@ class Shift extends Model ]; protected $casts = [ - 'start_date' => 'datetime:Y-m-d', - 'end_date' => 'datetime:Y-m-d', + 'start_date' => 'datetime:Y-m-d H:i:s', + 'end_date' => 'datetime:Y-m-d H:i:s', + 'parallel_weight' => Integer::class, ]; public function task(): BelongsTo @@ -34,11 +40,18 @@ public function task(): BelongsTo return $this->belongsTo(Task::class); } + private function getTaskParallelWeight() + { + return $this->task?->parallel_weight; + } + public function getTaskNameAttribute() { $user_name = User::where('userable_id', $this->soldier_id)->get(['first_name', 'last_name']); - return $this->task?->name . ' ' . $user_name->first()?->first_name . ' ' . $user_name->first()?->last_name; + return $this->soldier_id == auth()->user()->userable_id + ? $this->task?->name + : $this->task?->name.' '.$user_name->first()?->first_name.' '.$user_name->first()?->last_name; } public function getTaskColorAttribute() @@ -51,10 +64,8 @@ public static function getSchema(): array return [ Section::make([ Placeholder::make('') - ->content(content: fn(Shift $shift) => $shift->task_name) + ->content(content: fn (Shift $shift) => $shift->task_name) ->inlineLabel(), - Toggle::make('is_weekend'), - TextInput::make('parallel_weight'), Grid::make() ->schema([ ToggleButtons::make('soldier_type') @@ -63,13 +74,16 @@ public static function getSchema(): array ->live() ->inline() ->options( - fn(?Shift $shift) => self::getOptions($shift->task->department_name) - ), + fn (?Shift $shift) => self::getOptions($shift) + ) + ->afterStateUpdated(function (callable $set) { + $set('soldier_id', null); + }), Select::make('soldier_id') ->label('Soldier assignment') ->options( function (?Shift $shift, Get $get) { - $manual_assignment = new \App\Services\ManualAssignment($shift, $get('soldier_type')); + $manual_assignment = new ManualAssignment($shift, $get('soldier_type')); return $manual_assignment->getSoldiers(); } @@ -77,54 +91,195 @@ function (?Shift $shift, Get $get) { ->default(null) ->placeholder('Select soldier') ->visible( - fn(Get $get): bool => $get('soldier_type') != null + fn (Get $get): bool => $get('soldier_type') != null + && $get('soldier_type') != 'me' ), ]) ->visible( - fn(?Shift $record, Get $get): bool => $record !== null - && !$record->soldier_id + fn (?Shift $record): bool => $record !== null + && ! $record->soldier_id && \Str::contains($_SERVER['HTTP_REFERER'], 'my-soldiers-shifts') && current(array: array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) ) ->hiddenOn('view'), + Toggle::make('is_weekend') + ->label(__('Is weekend')), + TextInput::make('parallel_weight') + ->numeric() + ->minValue(0) + ->label(__('Parallel weight')), DateTimePicker::make('start_date') ->label(__('Start date')) + ->minDate(today()) ->required(), DateTimePicker::make('end_date') ->label(__('End date')) + ->after('start_date') ->required(), ]), - ]; } public static function afterSave($shift, $record) { - if ( - !isset($shift->soldier_id) - || !isset($shift->soldier_type) - ) + if ((empty($shift['soldier_type'])) || (empty($shift['soldier_id']) && $shift['soldier_type'] != 'me')) { return; - $soldier = Soldier::find($shift['soldier_id']); - $shift = Shift::find($record->id); - $soldier->update(['capacity_hold' => (float) $soldier->capacity_hold + $shift->task->parallel_weight]); + } + $shift_for_assignment = Shift::find($record->id); + $soldier = ($shift['soldier_type'] == 'me') ? Soldier::find(auth()->user()->userable_id) : Soldier::find($shift['soldier_id']); + $shift_for_assignment->soldier_id = $soldier->id; + $shift_for_assignment->save(); } - protected static function getOptions(string $department_name): array + protected static function getOptions($shift): array { $options = [ 'reserves' => __('Reserves'), - 'department' => '"' . $department_name . '" ' . __('Department'), 'all' => __('All'), ]; + $manual_assignment = new ManualAssignment($shift, 'me'); + if ($shift->task->department_name) { + $options = collect($options) + ->put('department', '"'.$shift->task->department_name.'" '.__('Department')) + ->toArray(); + } + if ($manual_assignment->amIAvailable()) { + $options = collect($options) + ->put('me', __('Me')) + ->toArray(); + } if (current(array: array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) != 'manager') { - return collect($options)->put('my_soldiers', __('My Soldiers'))->toArray(); + return collect($options) + ->put('my_soldiers', __('My Soldiers')) + ->toArray(); } + return $options; } - public static function getTitle(): string|Htmlable + public static function getAction($calendar): Action + { + $record = is_array($calendar->mountedActionsData) && ! empty($calendar->mountedActionsData) ? (object) $calendar->mountedActionsData[0] : (object) $calendar->mountedActionsData; + + return Action::make('Shift change') + ->label(__('Shift change')) + ->color('success') + ->form(function () use ($record) { + return [ + Placeholder::make('') + ->content(fn (Shift $shift) => $shift->task_name) + ->inlineLabel(), + Placeholder::make('') + ->content(__('Changing the shifts is your sole responsibility! (pay attention to conflicts between shifts).')) + ->extraAttributes(['style' => 'color: red; font-family: Arial, Helvetica, sans-serif; font-size: 20px']), + Select::make('soldier_id') + ->label(__('New assignment')) + ->required() + ->options( + fn () => Cache::remember('users', 30 * 60, function () { + return User::all(); + })->where('userable_id', '!=', $record->soldier_id) + ->mapWithKeys(function ($user) { + return [$user->userable_id => $user->displayName]; + }) + ), + ]; + }) + ->action(function (array $data) use ($record, $calendar) { + $shift = Shift::where('soldier_id', $record->soldier_id)->first(); + $shift->soldier_id = (int) $data['soldier_id']; + $shift->save(); + $calendar->refreshRecords(); + }); + } + + public static function getFilters($calendar) + { + return Action::make('Filters') + ->label(__('Filter')) + ->icon('heroicon-m-funnel') + ->form(function () use ($calendar) { + $shifts = $calendar->getEventsByRole(); + $soldiersShifts = array_filter($shifts->toArray(), fn ($shift) => $shift['soldier_id'] !== null); + + return [ + Select::make('soldier_id') + ->label(__('Soldier')) + ->options(fn (): array => collect($soldiersShifts)->mapWithKeys(fn ($shift) => [$shift['soldier_id'] => User::where('userable_id', $shift['soldier_id']) + ->first()?->displayName])->toArray()) + ->multiple(), + Select::make('type') + ->label(__('Type')) + ->options(Task::all()->pluck('type')->unique()) + ->multiple(), + ]; + }) + ->modalSubmitActionLabel(__('Filter')) + ->action(function (array $data) use ($calendar) { + $calendar->filterData = $data; + $calendar->filter = $data['soldier_id'] === [] && $data['type'] === [] ? false : true; + $calendar->refreshRecords(); + }); + } + + public static function filter($events, $filterData) + { + if ($filterData['soldier_id'] == []) { + return $events + ->whereIn('task_id', $filterData['type']) + ->values(); + } + if ($filterData['type'] == []) { + return $events + ->whereIn('soldier_id', $filterData['soldier_id']) + ->values(); + } + + return $events + ->whereIn('soldier_id', $filterData['soldier_id']) + ->whereIn('task_id', $filterData['type']) + ->values(); + } + + public static function activeFilters($calendar) + { + $activeFilter = collect(); + if ($calendar->filter) { + $soldiers = collect($calendar->filterData['soldier_id'])->map(function ($soldier_id) { + return User::where('userable_id', $soldier_id)->first()->displayName; + }); + $tasks = collect($calendar->filterData['type'])->map(function ($task_id) { + return Task::find($task_id)->name; + }); + $activeFilter = $soldiers->concat($tasks); + } + + return $activeFilter->toArray(); + } + + public static function getTitle(): string { return __('Shift'); } -} \ No newline at end of file + + public static function setData($record, $data) + { + $record->is_weekend ?? $data['is_weekend'] = $record->task->is_weekend === $data['is_weekend'] ? null : $data['is_weekend']; + if ($record->parallel_weight == 0) { + $data['parallel_weight'] = $record->task->parallel_weight === $data['parallel_weight'] ? 0 : $data['parallel_weight']; + } + + return $data; + } + + public static function fillForm($record, $arguments) + { + return [ + ...$record->getAttributes(), + 'is_weekend' => $record->is_weekend === null ? $record->task->is_weekend : $record->is_weekend, + 'parallel_weight' => $record->parallel_weight == 0 ? $record->task->parallel_weight : $record->parallel_weight, + 'start_date' => $arguments['event']['start'] ?? $record->start_date, + 'end_date' => $arguments['event']['end'] ?? $record->end_date, + ]; + } +} diff --git a/app/Models/Soldier.php b/app/Models/Soldier.php index cd10866..eb9efe8 100644 --- a/app/Models/Soldier.php +++ b/app/Models/Soldier.php @@ -5,6 +5,7 @@ use App\Casts\Integer; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\HasOne; use Illuminate\Database\Eloquent\Relations\HasOneThrough; @@ -24,7 +25,6 @@ class Soldier extends Model 'max_nights', 'max_weekends', 'capacity', - 'capacity_hold', 'is_trainee', 'is_mabat', 'qualifications', @@ -41,7 +41,8 @@ class Soldier extends Model 'is_trainee' => 'boolean', 'is_mabat' => 'boolean', 'capacity' => Integer::class, - 'capacity_hold' => Integer::class, + 'max_nights' => Integer::class, + 'max_weekends' => Integer::class, 'qualifications' => 'array', 'is_reservist' => 'boolean', 'reserve_dates' => 'array', @@ -68,6 +69,11 @@ public function team_commander(): HasOne return $this->hasOne(Team::class); } + public function team(): BelongsTo + { + return $this->belongsTo(Team::class); + } + public function constraints(): HasMany { return $this->hasMany(Constraint::class); @@ -80,4 +86,4 @@ public static function boot() $record->user()->delete(); }); } -} +} \ No newline at end of file diff --git a/app/Models/Task.php b/app/Models/Task.php index df7311e..afa3f0c 100644 --- a/app/Models/Task.php +++ b/app/Models/Task.php @@ -6,10 +6,11 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\HasMany; +use Illuminate\Database\Eloquent\SoftDeletes; class Task extends Model { - use HasFactory; + use HasFactory, SoftDeletes; protected $fillable = [ 'name', @@ -22,7 +23,7 @@ class Task extends Model 'is_weekend', 'is_night', 'department_name', - 'recurrence', + 'recurring', ]; protected $casts = [ @@ -30,7 +31,7 @@ class Task extends Model 'is_weekend' => 'boolean', 'is_night' => 'boolean', 'parallel_weight' => Integer::class, - 'recurrence' => 'array', + 'recurring' => 'array', 'duration' => Integer::class, ]; @@ -38,4 +39,16 @@ public function shifts(): HasMany { return $this->hasMany(Shift::class); } + + protected static function booted(): void + { + static::deleting(function (Task $task) { + $shifts = Shift::where('task_id', $task->id) + ->where('start_date', '>', now()) + ->get(); + $shifts->map(function (Shift $shift) { + $shift->delete(); + }); + }); + } } diff --git a/app/Models/User.php b/app/Models/User.php index 0260257..c09d1bb 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -10,10 +10,8 @@ use Illuminate\Notifications\Notifiable; use Spatie\Permission\Traits\HasPermissions; use Spatie\Permission\Traits\HasRoles; -use Filament\Models\Contracts\FilamentUser; -use Filament\Panel; -class User extends Authenticatable implements HasName,FilamentUser +class User extends Authenticatable implements HasName { use HasFactory, HasPermissions, HasRoles, Notifiable; @@ -38,20 +36,11 @@ public function userable(): MorphTo public function displayName(): Attribute { - return Attribute::get(fn () => $this->last_name.', '.$this->first_name); + return Attribute::get(fn () => $this->first_name.' '.$this->last_name); } public function getFilamentName(): string { return $this->displayName; } - - public function viewAny(User $user): bool - { - return $user->hasRole('manager'); - } - public function canAccessPanel(Panel $panel): bool - { - return true; - } } diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 09edc2a..f46db3c 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -2,12 +2,12 @@ namespace App\Providers; +use Filament\Support\Assets\Css; +use Filament\Support\Facades\FilamentAsset; use Filament\Support\Facades\FilamentView; use Filament\View\PanelsRenderHook; use Illuminate\Support\Facades\Blade; use Illuminate\Support\ServiceProvider; -use Illuminate\Support\Facades\URL; - class AppServiceProvider extends ServiceProvider { @@ -17,13 +17,19 @@ public function register(): void } public function boot(): void - { - if (config('app.env') !== 'local') { - URL::forceScheme('https'); - } + { FilamentView::registerRenderHook( PanelsRenderHook::USER_MENU_BEFORE, fn (): string => Blade::render('@livewire(\'set-locale\')'), ); + + FilamentView::registerRenderHook( + PanelsRenderHook::SIDEBAR_FOOTER, + fn (): string => Blade::render('picture'), + ); + + FilamentAsset::register([ + Css::make('custom-fullcalendar', asset('css/saade/filament-fullcalendar/override-filament-fullcalendar.css')), + ], package: 'saade/filament-fullcalendar'); } } diff --git a/app/Providers/FilamentServiceProvider.php b/app/Providers/FilamentServiceProvider.php index b6ccc04..c78f76a 100644 --- a/app/Providers/FilamentServiceProvider.php +++ b/app/Providers/FilamentServiceProvider.php @@ -65,6 +65,7 @@ public function panel(Panel $panel): Panel ->pages([ ListProfiles::class, ]) + ->favicon(asset('images/logo.png')) ->sidebarWidth('17rem') ->maxContentWidth('full') ->viteTheme('resources/css/app.css') diff --git a/app/Resources/ConstraintResource/Pages/EditConstraint.php b/app/Resources/ConstraintResource/Pages/EditConstraint.php index fae24e4..6f1c8b5 100644 --- a/app/Resources/ConstraintResource/Pages/EditConstraint.php +++ b/app/Resources/ConstraintResource/Pages/EditConstraint.php @@ -3,7 +3,7 @@ namespace App\Resources\ConstraintResource\Pages; use App\Resources\ConstraintResource; -use Filament\Actions; +use Filament\Actions\DeleteAction; use Filament\Resources\Pages\EditRecord; class EditConstraint extends EditRecord @@ -13,7 +13,8 @@ class EditConstraint extends EditRecord protected function getHeaderActions(): array { return [ - Actions\DeleteAction::make(), + DeleteAction::make() + ->label(__('Delete')), ]; } } diff --git a/app/Resources/DepartmentResource.php b/app/Resources/DepartmentResource.php index 2b68559..e579a4c 100644 --- a/app/Resources/DepartmentResource.php +++ b/app/Resources/DepartmentResource.php @@ -92,16 +92,18 @@ public static function table(Table $table): Table Action::make('teams') ->label(__('Add team')) ->color('primary') - ->icon('heroicon-o-users') + ->icon('heroicon-o-user-plus') ->url(fn (Department $record): string => route('filament.app.resources.teams.create', ['department_id' => $record->id])), Action::make('View teams') ->label(__('View teams')) ->color('success') - ->icon('heroicon-o-users') + ->icon('heroicon-o-user-circle') ->badge(fn ($record) => Team::where('department_id', $record->id)->count()) ->url(fn (Department $record): string => route('filament.app.resources.teams.index', ['department_id' => $record->id])), EditAction::make(), - DeleteAction::make(), + DeleteAction::make() + ->label(__('Delete')) + ->modalHeading(__('Delete').' '.self::getModelLabel()), ]), ]) ->bulkActions([ diff --git a/app/Resources/DepartmentResource/Pages/CreateDepartment.php b/app/Resources/DepartmentResource/Pages/CreateDepartment.php index ac72dbe..8e83d35 100644 --- a/app/Resources/DepartmentResource/Pages/CreateDepartment.php +++ b/app/Resources/DepartmentResource/Pages/CreateDepartment.php @@ -6,6 +6,7 @@ use App\Models\Team; use App\Models\User; use App\Resources\DepartmentResource; +use Filament\Notifications\Notification; use Filament\Resources\Pages\CreateRecord; use Filament\Support\Exceptions\Halt; use Throwable; @@ -16,7 +17,18 @@ class CreateDepartment extends CreateRecord protected function beforeCreate(): void { - $teams = Team::where('commander_id', $this->data['commander_id'])->get(); + $name = Department::where('name', '=', $this->data['name'])->pluck('name'); + if ($name->contains($this->data['name'])) { + Notification::make() + ->warning() + ->title(__('This name already exists in the system!')) + ->body(__('Add an identifier to the name so that it is not the same as another name.')) + ->persistent() + ->send(); + $this->halt(); + } + + $teams = Team::where('commander_id', operator: $this->data['commander_id'])->get(); $departments = Department::where('commander_id', $this->data['commander_id'])->get(); if ($teams->isNotEmpty() || $departments->isNotEmpty()) { DepartmentResource::checkCommander($teams, $departments, $this->data); diff --git a/app/Resources/DepartmentResource/Pages/EditDepartment.php b/app/Resources/DepartmentResource/Pages/EditDepartment.php index b0db5f8..4a2a83a 100644 --- a/app/Resources/DepartmentResource/Pages/EditDepartment.php +++ b/app/Resources/DepartmentResource/Pages/EditDepartment.php @@ -6,7 +6,6 @@ use App\Models\Team; use App\Models\User; use App\Resources\DepartmentResource; -use Filament\Actions; use Filament\Resources\Pages\EditRecord; use Filament\Support\Exceptions\Halt; use Throwable; @@ -15,13 +14,6 @@ class EditDepartment extends EditRecord { protected static string $resource = DepartmentResource::class; - protected function getHeaderActions(): array - { - return [ - Actions\DeleteAction::make(), - ]; - } - protected function beforeSave(): void { $teams = Team::where('commander_id', $this->data['commander_id'])->get(); diff --git a/app/Resources/MyConstraintResource/Pages/EditMyConstraint.php b/app/Resources/MyConstraintResource/Pages/EditMyConstraint.php index 3589ace..8167d7e 100644 --- a/app/Resources/MyConstraintResource/Pages/EditMyConstraint.php +++ b/app/Resources/MyConstraintResource/Pages/EditMyConstraint.php @@ -3,7 +3,7 @@ namespace App\Resources\MyConstraintResource\Pages; use App\Resources\MyConstraintResource; -use Filament\Actions; +use Filament\Actions\DeleteAction; use Filament\Resources\Pages\EditRecord; class EditMyConstraint extends EditRecord @@ -13,7 +13,8 @@ class EditMyConstraint extends EditRecord protected function getHeaderActions(): array { return [ - Actions\DeleteAction::make(), + DeleteAction::make() + ->label(__('Delete')), ]; } } diff --git a/app/Resources/MyShiftResource.php b/app/Resources/MyShiftResource.php index b70a339..2526d0a 100644 --- a/app/Resources/MyShiftResource.php +++ b/app/Resources/MyShiftResource.php @@ -34,7 +34,8 @@ public static function getPluralModelLabel(): string public static function table(Table $table): Table { - return $table->paginated(false); + return $table + ->paginated(false); } public static function getPages(): array diff --git a/app/Resources/MyShiftResource/Pages/EditMyShift.php b/app/Resources/MyShiftResource/Pages/EditMyShift.php index 62682c9..94dafe2 100644 --- a/app/Resources/MyShiftResource/Pages/EditMyShift.php +++ b/app/Resources/MyShiftResource/Pages/EditMyShift.php @@ -3,7 +3,7 @@ namespace App\Resources\MyShiftResource\Pages; use App\Resources\MyShiftResource; -use Filament\Actions; +use Filament\Actions\DeleteAction; use Filament\Resources\Pages\EditRecord; class EditMyShift extends EditRecord @@ -13,7 +13,8 @@ class EditMyShift extends EditRecord protected function getHeaderActions(): array { return [ - Actions\DeleteAction::make(), + DeleteAction::make() + ->label(__('Delete')), ]; } } diff --git a/app/Resources/ProfileResource.php b/app/Resources/ProfileResource.php index 05069ce..e84dc64 100644 --- a/app/Resources/ProfileResource.php +++ b/app/Resources/ProfileResource.php @@ -2,9 +2,11 @@ namespace App\Resources; +use App\Models\Shift; use App\Models\Soldier; use App\Models\Task; use App\Resources\ProfileResource\Pages; +use Carbon\Carbon; use Filament\Forms\Components\DatePicker; use Filament\Forms\Components\Fieldset; use Filament\Forms\Components\Section; @@ -52,7 +54,9 @@ public static function form(Form $form): Form ->label(__('Qualifications')) ->placeholder(__('Select qualifications')) ->options(Task::all()->pluck('name', 'name')), - DatePicker::make('enlist_date')->label(__('Enlist date'))->seconds(false), + DatePicker::make('enlist_date') + ->label(__('Enlist date')) + ->seconds(false), ])->columns(2), Section::make([ Toggle::make('is_permanent')->Label(__('Is permanent')), @@ -92,7 +96,17 @@ public static function table(Table $table): Table TextColumn::make('max_nights')->weight(weight: FontWeight::SemiBold)->description(__('Max nights'), position: 'above')->size(TextColumnSize::Large), TextColumn::make('max_weekends')->weight(weight: FontWeight::SemiBold)->description(__('Max weekends'), position: 'above')->size(TextColumnSize::Large), TextColumn::make('capacity')->weight(weight: FontWeight::SemiBold)->description(__('Capacity'), position: 'above')->size(TextColumnSize::Large), - TextColumn::make('capacity_hold')->weight(weight: FontWeight::SemiBold)->description(__('Capacity hold'), position: 'above')->size(TextColumnSize::Large), + TextColumn::make('capacity_hold') + ->default(function () { + $soldierShifts = Shift::where('soldier_id', auth()->user()->userable_id)->get(); + + return $soldierShifts->filter(function (Shift $shift): bool { + return Carbon::parse($shift->start_date)->month == now()->month || Carbon::parse($shift->end_date)->month == now()->month; + })->sum(fn (Shift $shift) => $shift->parallel_weight == 0 ? $shift->task->parallel_weight : $shift->parallel_weight); + }) + ->weight(weight: FontWeight::SemiBold) + ->description(__('Capacity hold'), position: 'above') + ->size(TextColumnSize::Large), TextColumn::make('qualifications')->weight(weight: FontWeight::SemiBold)->description(__('Qualifications'), position: 'above')->size(TextColumnSize::Large), ]), ]), diff --git a/app/Resources/ProfileResource/Pages/EditProfile.php b/app/Resources/ProfileResource/Pages/EditProfile.php index a75ac36..fc86108 100644 --- a/app/Resources/ProfileResource/Pages/EditProfile.php +++ b/app/Resources/ProfileResource/Pages/EditProfile.php @@ -3,20 +3,12 @@ namespace App\Resources\ProfileResource\Pages; use App\Resources\ProfileResource; -use Filament\Actions; use Filament\Resources\Pages\EditRecord; class EditProfile extends EditRecord { protected static string $resource = ProfileResource::class; - protected function getHeaderActions(): array - { - return [ - Actions\DeleteAction::make(), - ]; - } - protected function getRedirectUrl(): string { return $this->getResource()::getUrl('index'); diff --git a/app/Resources/ShiftResource.php b/app/Resources/ShiftResource.php index cf2a5f8..64f3d4b 100644 --- a/app/Resources/ShiftResource.php +++ b/app/Resources/ShiftResource.php @@ -44,7 +44,8 @@ public static function canCreate(): bool public static function table(Table $table): Table { - return $table->paginated(false); + return $table + ->paginated(false); } public static function getPages(): array diff --git a/app/Resources/ShiftResource/Pages/EditShift.php b/app/Resources/ShiftResource/Pages/EditShift.php index 3e21c61..83e76fb 100644 --- a/app/Resources/ShiftResource/Pages/EditShift.php +++ b/app/Resources/ShiftResource/Pages/EditShift.php @@ -3,7 +3,7 @@ namespace App\Resources\ShiftResource\Pages; use App\Resources\ShiftResource; -use Filament\Actions; +use Filament\Actions\DeleteAction; use Filament\Resources\Pages\EditRecord; class EditShift extends EditRecord @@ -13,7 +13,8 @@ class EditShift extends EditRecord protected function getHeaderActions(): array { return [ - Actions\DeleteAction::make(), + DeleteAction::make() + ->label(__('Delete')), ]; } } diff --git a/app/Resources/ShiftResource/Pages/ListShifts.php b/app/Resources/ShiftResource/Pages/ListShifts.php index d62d52a..640b97e 100644 --- a/app/Resources/ShiftResource/Pages/ListShifts.php +++ b/app/Resources/ShiftResource/Pages/ListShifts.php @@ -25,6 +25,7 @@ protected function getHeaderWidgets(): array ]), 'type' => 'my_soldiers', ]), + ]; } -} +} \ No newline at end of file diff --git a/app/Resources/SoldierResource.php b/app/Resources/SoldierResource.php index a190448..0c3dd0d 100644 --- a/app/Resources/SoldierResource.php +++ b/app/Resources/SoldierResource.php @@ -5,11 +5,13 @@ use App\Filters\NumberFilter; use App\Forms\Components\Flatpickr; use App\Models\Department; +use App\Models\Shift; use App\Models\Soldier; use App\Models\Task; use App\Models\Team; use App\Models\User; use App\Resources\SoldierResource\Pages; +use Carbon\Carbon; use Filament\Forms\Components\DatePicker; use Filament\Forms\Components\Fieldset; use Filament\Forms\Components\Section; @@ -47,10 +49,10 @@ public static function form(Form $form): Form { return $form ->schema([ - Section::make()->schema([SoldierResource::personalDetails()])->columns(), - Section::make()->schema(SoldierResource::soldierDetails())->columns(), - Section::make()->schema(SoldierResource::reserveDays())->columns()->visible(fn (Get $get) => $get('is_reservist')), - Section::make()->schema(SoldierResource::constraints())->columns(), + Section::make()->schema([self::personalDetails()])->columns(), + Section::make()->schema(self::soldierDetails())->columns(), + Section::make()->schema(self::reserveDays())->columns()->visible(fn (Get $get) => $get('is_reservist')), + Section::make()->schema(self::constraints())->columns(), ]); } @@ -59,12 +61,17 @@ public static function table(Table $table): Table return $table ->columns([ - TextColumn::make('user.first_name') + TextColumn::make('user') ->label(__('Full name')) ->formatStateUsing(function ($record) { return $record->user->last_name.' '.$record->user->first_name; }) - ->searchable(['user->first_name', 'user->last_name']) + ->searchable(query: function ($query, $search) { + $query->whereHas('user', function ($query) use ($search) { + $query->where('first_name', 'like', "%{$search}%") + ->orWhere('last_name', 'like', "%{$search}%"); + }); + }) ->sortable(), BooleanColumn::make('is_reservist')->label(__('Reservist')), BadgeColumn::make('gender') @@ -82,7 +89,17 @@ public static function table(Table $table): Table TextColumn::make('max_nights')->label(__('Max nights'))->toggleable(isToggledHiddenByDefault: true), TextColumn::make('max_weekends')->label(__('Max weekends'))->toggleable(isToggledHiddenByDefault: true), TextColumn::make('capacity')->label(__('Capacity'))->toggleable(isToggledHiddenByDefault: true), - TextColumn::make('capacity_hold')->label(__('Capacity hold'))->numeric()->toggleable(), + TextColumn::make('capacity_hold') + ->default(function ($record) { + $soldierShifts = Shift::where('soldier_id', $record->id)->get(); + + return $soldierShifts->filter(function (Shift $shift): bool { + return Carbon::parse($shift->start_date)->month == now()->month || Carbon::parse($shift->end_date)->month == now()->month; + })->sum(fn (Shift $shift) => $shift->parallel_weight == 0 ? $shift->task->parallel_weight : $shift->parallel_weight); + }) + ->label(__('Capacity hold')) + ->numeric() + ->toggleable(), BooleanColumn::make('is_trainee')->label(__('Is trainee'))->toggleable(isToggledHiddenByDefault: true), BooleanColumn::make('is_mabat')->label(__('Is mabat'))->toggleable(isToggledHiddenByDefault: true), TextColumn::make('qualifications')->label(__('Qualifications'))->placeholder(__('No qualifications'))->toggleable(), @@ -117,7 +134,9 @@ public static function table(Table $table): Table ->searchable() ->options(Task::all()->pluck('name', 'name')) ->query(function (Builder $query, array $data) { - return collect($data['values'])->map(fn ($qualification) => $query->whereJsonContains('qualifications', $qualification)); + return collect($data['values'])->map(function ($qualification) use ($query) { + return $query->whereJsonContains('qualifications', $qualification); + }); }) ->default(null), Filter::make('reservist') @@ -141,8 +160,11 @@ public static function table(Table $table): Table Fieldset::make('Enlist date') ->label(__('Enlist date')) ->schema([ - DatePicker::make('recruitment_from')->label(__('From')), - DatePicker::make('recruitment_until')->label(__('Until')), + DatePicker::make('recruitment_from') + ->label(__('From')), + DatePicker::make('recruitment_until') + ->label(__('Until')) + ->after('recruitment_from'), ]), ]) ->query(function (Builder $query, array $data): Builder { @@ -157,7 +179,7 @@ public static function table(Table $table): Table ); }), - ], layout: FiltersLayout::Modal) + ], FiltersLayout::Modal) ->filtersFormColumns(4) ->deferFilters() ->filtersTriggerAction( @@ -168,7 +190,9 @@ public static function table(Table $table): Table ->actions([ ActionGroup::make([ EditAction::make(), - DeleteAction::make(), + DeleteAction::make() + ->label(__('Delete')) + ->modalHeading(__('Delete').' '.self::getModelLabel()), Action::make('update reserve days') ->label(__('Update reserve days')) ->icon('heroicon-o-pencil') @@ -267,6 +291,7 @@ public static function soldierDetails(): array TextInput::make('capacity') ->numeric() ->step(0.25) + ->minValue(0) ->label(__('Capacity')) ->required(), Section::make([ @@ -294,8 +319,8 @@ public static function constraints(): array return [ Section::make([ TextInput::make('max_shifts')->label(__('Max shifts'))->numeric()->minValue(0)->required()->default(0), - TextInput::make('max_nights')->label(__('Max nights'))->numeric()->minValue(0)->maxValue(31)->required()->default(0), - TextInput::make('max_weekends')->label(__('Max weekends'))->default('')->numeric()->minValue(0)->maxValue(5)->required()->default(0), + TextInput::make('max_nights')->label(__('Max nights'))->numeric()->minValue(0)->required()->default(0), + TextInput::make('max_weekends')->label(__('Max weekends'))->numeric()->minValue(0)->required()->default(0), ]) ->columns(3), Split::make([ @@ -310,7 +335,7 @@ public static function constraints(): array ->label(__('Qualifications')) ->multiple() ->placeholder(__('Select qualifications')) - ->options(Task::all()->pluck('name', 'name')), + ->options(Task::all()->pluck('type', 'type')), ])->columns(2) ->columnSpan('full'), ]; @@ -326,4 +351,4 @@ public static function getPluralModelLabel(): string { return __('Soldiers'); } -} \ No newline at end of file +} diff --git a/app/Resources/TaskResource.php b/app/Resources/TaskResource.php index 4a43f8b..f76e46b 100644 --- a/app/Resources/TaskResource.php +++ b/app/Resources/TaskResource.php @@ -2,13 +2,19 @@ namespace App\Resources; -use App\Enums\RecurrenceType; +use App\Enums\DaysInWeek; +use App\Enums\RecurringType; +use App\Filters\NumberFilter; use App\Models\Department; +use App\Models\Shift; use App\Models\Task; use App\Resources\TaskResource\Pages; +use App\Services\ManualAssignment; +use Carbon\Carbon; use Filament\Forms\Components\ColorPicker; use Filament\Forms\Components\DatePicker; use Filament\Forms\Components\Fieldset; +use Filament\Forms\Components\Grid; use Filament\Forms\Components\Section; use Filament\Forms\Components\Select; use Filament\Forms\Components\TextInput; @@ -18,6 +24,7 @@ use Filament\Forms\Form; use Filament\Forms\Get; use Filament\Resources\Resource; +use Filament\Tables\Actions\Action; use Filament\Tables\Actions\ActionGroup; use Filament\Tables\Actions\BulkActionGroup; use Filament\Tables\Actions\DeleteAction; @@ -29,7 +36,11 @@ use Filament\Tables\Columns\Layout\Stack; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Columns\TextColumn\TextColumnSize; +use Filament\Tables\Enums\FiltersLayout; +use Filament\Tables\Filters\Filter; +use Filament\Tables\Filters\SelectFilter; use Filament\Tables\Table; +use Illuminate\Database\Eloquent\Builder; class TaskResource extends Resource { @@ -51,8 +62,16 @@ public static function form(Form $form): Form { return $form ->schema([ - Section::make()->schema(TaskResource::getTaskDetails())->columns(), - Section::make()->schema(TaskResource::getRecurrence())->columns(), + Section::make()->schema(self::getTaskDetails())->columns(), + Section::make()->schema(self::getRecurring())->columns(), + Section::make()->schema(self::additionalDetails())->columns(), + Section::make()->schema(self::assignSoldier())->columns() + ->visible( + function (Get $get) { + return $get('recurring.type') == 'One time' + && $get('recurring.date'); + } + ), ]); } @@ -63,48 +82,57 @@ public static function table(Table $table): Table Split::make([ TextColumn::make('name') ->description(__('Name'), position: 'above') - ->size(TextColumnSize::Large), + ->size(TextColumnSize::Small), TextColumn::make('type') ->description(__('Type'), position: 'above') - ->size(TextColumnSize::Large), + ->size(TextColumnSize::Small), TextColumn::make('parallel_weight') ->description(__('Parallel weight'), position: 'above') - ->size(TextColumnSize::Large), + ->size(TextColumnSize::Small), + ]) + ->extraAttributes(['style' => 'align-items: baseline;']), + Split::make([ TextColumn::make('department_name') ->description(__('Department'), position: 'above') - ->size(TextColumnSize::Large), + ->size(TextColumnSize::Small), ColorColumn::make('color') ->copyable() ->copyMessage('Color code copied'), - ]), + ]) + ->extraAttributes(['style' => 'align-items: baseline;']), Panel::make([ Stack::make([ TextColumn::make('start_hour') ->description(__('Start at'), position: 'above') - ->size(TextColumnSize::Large), + ->size(TextColumnSize::Small) + ->extraAttributes(['style' => 'margin: 5px;']), TextColumn::make('duration') ->description(__('Duration'), position: 'above') - ->size(TextColumnSize::Large), + ->size(TextColumnSize::Small) + ->extraAttributes(['style' => 'margin: 5px;']), TextColumn::make('is_alert') ->description(__('Alert'), position: 'above') - ->size(TextColumnSize::Large) + ->extraAttributes(['style' => 'margin: 5px;']) + ->size(TextColumnSize::Small) ->formatStateUsing(fn ($state) => $state ? __('Yes') : __('No')), TextColumn::make('is_weekend') ->description(__('Is weekend'), position: 'above') - ->size(TextColumnSize::Large) + ->size(TextColumnSize::Small) + ->extraAttributes(['style' => 'margin: 5px;']) ->formatStateUsing(fn ($state) => $state ? __('Yes') : __('No')), TextColumn::make('is_night') ->description(__('Is night'), position: 'above') - ->size(TextColumnSize::Large) + ->size(TextColumnSize::Small) + ->extraAttributes(['style' => 'margin: 5px;']) ->formatStateUsing(fn ($state) => $state ? __('Yes') : __('No')), ]) ->space(2) - ->extraAttributes(['style' => 'display: flex; flex-direction: row; flex-wrap: wrap; justify-content: space-between; align-items: center;']), + ->extraAttributes(['style' => 'display: flex; flex-direction: row; flex-wrap: wrap; justify-content: space-between; align-items: baseline; margin-bottom:10px']), Stack::make([ - TextColumn::make('recurrence.type') - ->description(__('Recurrence type'), position: 'above') - ->size(TextColumnSize::Large) + TextColumn::make('recurring.type') + ->description(__('Recurring type'), position: 'above') + ->size(TextColumnSize::Small) ->formatStateUsing(function ($state) { switch ($state) { case 'Daily': @@ -115,34 +143,98 @@ public static function table(Table $table): Table return __('Monthly'); case 'Custom': return __('Custom'); - case 'OneTime': - return __('OneTime'); + case 'One time': + return __('One time'); + case 'Daily range': + return __('Daily range'); } }), - TextColumn::make('recurrence.days_in_week') + TextColumn::make('recurring.days_in_week') ->description(__('Days in week'), position: 'above') - ->size(TextColumnSize::Large), - TextColumn::make('recurrence.dates_in_month') + ->size(TextColumnSize::Small) + ->extraAttributes(['style' => 'margin-left: 15px;']), + TextColumn::make('recurring.dates_in_month') ->description(__('Dates in month'), position: 'above') - ->size(TextColumnSize::Large), - TextColumn::make('recurrence.start_date') + ->size(TextColumnSize::Small) + ->extraAttributes(['style' => 'margin-left: 15px;']), + TextColumn::make('recurring.start_date') ->description(__('StartDate'), position: 'above') - ->size(TextColumnSize::Large), - TextColumn::make('recurrence.end_date') + ->size(TextColumnSize::Small) + ->extraAttributes(['style' => 'margin-left: 15px;']), + TextColumn::make('recurring.end_date') ->description(__('EndDate'), position: 'above') - ->size(TextColumnSize::Large), + ->size(TextColumnSize::Small) + ->extraAttributes(['style' => 'margin-left: 15px;']), ]) ->space(2) - ->extraAttributes(['style' => 'display: flex; flex-direction: row; flex-wrap: wrap; justify-content: center; align-items: center; border: 1px solid #e7e7e7; border-radius: 10px; padding: 10px;']), + ->extraAttributes([ + 'style' => 'display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: center; + align-items: baseline; + border: 1px solid #e7e7e7; + border-radius: 10px; + padding: 10px;', + ]), ])->collapsible(), ]) ->filters([ - ]) + SelectFilter::make('type') + ->label(__('Task type')) + ->multiple() + ->searchable() + ->options( + Task::all()->pluck('type', 'type') + ) + ->default(null), + SelectFilter::make('recurring.type') + ->label(__('Recurring type')) + ->multiple() + ->searchable() + ->options(collect(RecurringType::cases())->mapWithKeys(fn ($type) => [$type->value => $type->getLabel()])) + ->query(function (Builder $query, array $data) { + return collect($data['values'])->map(function ($type) use ($query) { + return $query->orWhereJsonContains('recurring', $type); + }); + }) + ->default(null), + NumberFilter::make('parallel_weight') + ->label(__('Parallel weight')), + Filter::make('is_alert') + ->label(__('Is alert')) + ->query(fn (Builder $query): Builder => $query->where('is_alert', true)) + ->toggle(), + Filter::make('is_weekend') + ->label(__('Is weekend')) + ->query(fn (Builder $query): Builder => $query->where('is_weekend', true)) + ->toggle(), + Filter::make('is_night') + ->label(__('Is night')) + ->query(fn (Builder $query): Builder => $query->where('is_night', true)) + ->toggle(), + SelectFilter::make('department_name') + ->label(__('Department name')) + ->multiple() + ->searchable() + ->options( + Department::all()->pluck('name', 'name') + ) + ->default(null), + ], FiltersLayout::Modal) + ->deferFilters() + ->filtersTriggerAction( + fn (Action $action) => $action + ->button() + ->label(__('Filter')) + ) ->actions([ ActionGroup::make([ EditAction::make(), - DeleteAction::make(), + DeleteAction::make() + ->label(__('Delete')) + ->modalHeading(__('Delete').' '.self::getModelLabel()), ]), ]) @@ -158,110 +250,194 @@ public static function getPages(): array return [ 'index' => Pages\ListTasks::route('/'), 'create' => Pages\CreateTask::route('/create'), + 'edit' => Pages\EditTask::route('/{record}/edit'), ]; } public static function getTaskDetails(): array { return [ - Section::make('') - ->schema([ - TextInput::make('name') - ->label(__('Name')) - ->required(), - Select::make('department_name') - ->label(__('Department')) - ->options(Department::all()->mapWithKeys(function ($department) { - return [$department->name => $department->name]; - })), - ]) - ->columns(2), - Section::make('') - ->schema([ - TextInput::make('type') - ->label(__('Type')) - ->required(), - Select::make('parallel_weight') - ->label(__('Parallel weight')) - ->options(fn (): array => collect(range(0, 12))->mapWithKeys(fn ($number) => [(string) ($number / 4) => (string) ($number / 4)])->toArray()) - ->required(), - ColorPicker::make('color') - ->label(__('Color')) - ->required(), - ]) - ->columns(3), - - ]; - } - - public static function additionalDetails(): array - { - return [ - Section::make('') - ->schema([ - TimePicker::make('start_hour') - ->label(__('Start hour')) - ->seconds(false) - ->required(), - TextInput::make('duration') - ->label(__('Duration')) - ->required(), - ]) - ->columns(2), - Section::make('') - ->schema([ - Toggle::make('is_alert') - ->label(__('Is alert')), - Toggle::make('is_weekend') - ->label(__('Is weekend')), - Toggle::make('is_night') - ->label(__('Is night')), - ]) - ->columns(3), + TextInput::make('name') + ->label(__('Name')) + ->required(), + Select::make('department_name') + ->label(__('Department')) + ->options(Department::all()->mapWithKeys(function ($department) { + return [$department->name => $department->name]; + })), + TextInput::make('type') + ->label(__('Type')) + ->required(), + TextInput::make('parallel_weight') + ->numeric() + ->minValue(0) + ->default(0) + ->label(__('Parallel weight')), + ColorPicker::make('color') + ->label(__('Color')) + ->required(), + TimePicker::make('start_hour') + ->label(__('Start hour')) + ->seconds(false) + ->required(), + TextInput::make('duration') + ->numeric() + ->minValue(0) + ->step(0.01) + ->label(__('Duration')) + ->required(), ]; } - public static function getRecurrence(): array + public static function getRecurring(): array { return [ - ToggleButtons::make('recurrence.type') + ToggleButtons::make('recurring.type') ->label(__('Type')) - ->options(collect(RecurrenceType::cases())->mapWithKeys(fn ($type) => [$type->value => $type->getLabel()]))->live() + ->options(collect(RecurringType::cases())->mapWithKeys(fn ($type) => [$type->value => $type->getLabel()]))->live() ->required() ->inline(), - Select::make('recurrence.days_in_week') + Select::make('recurring.days_in_week') ->label(__('Days in week')) ->multiple() ->options( - [ - 'Sunday' => __('Sunday'), - 'Monday' => __('Monday'), - 'Tuesday' => __('Tuesday'), - 'Wednesday' => __('Wednesday'), - 'Thursday' => __('Thursday'), - 'Friday' => __('Friday'), - 'Saturday' => __('Saturday'), - ] + collect(DaysInWeek::cases())->mapWithKeys(fn ($type) => [$type->value => $type->getLabel()]) ) - ->visible(fn (Get $get): bool => $get('recurrence.type') === 'Weekly') + ->visible(fn (Get $get): bool => $get('recurring.type') === 'Weekly') ->default(null) ->required(), - Select::make('recurrence.dates_in_month') - ->label(fn (Get $get) => $get('recurrence.type') === 'Monthly' ? 'Date' : 'Dates') + Select::make('recurring.dates_in_month') + ->label(fn (Get $get) => $get('recurring.type') === 'Monthly' ? __('Date') : __('Dates')) ->placeholder(__('Select from dates')) - ->multiple(fn (Get $get): bool => $get('recurrence.type') === 'Custom') + ->multiple(fn (Get $get): bool => $get('recurring.type') === 'Custom') ->options(array_combine(range(1, 31), range(1, 31))) - ->visible(fn (Get $get): bool => $get('recurrence.type') === 'Monthly' || $get('recurrence.type') === 'Custom') + ->visible(fn (Get $get): bool => $get('recurring.type') === 'Monthly' || $get('recurring.type') === 'Custom') ->default(null) + ->live() ->required(), - Fieldset::make('Dates') - ->label(__('Dates')) + Fieldset::make(__('Dates')) + ->schema([ + DatePicker::make('recurring.start_date') + ->label(label: __('Start date')) + ->required(), + DatePicker::make('recurring.end_date') + ->label(label: __('End date')) + ->after('recurring.start_date') + ->required(), + ])->visible(fn (Get $get): bool => $get('recurring.type') === 'Daily range'), + + DatePicker::make('recurring.date') + ->label(__('Date')) + ->required() + ->minDate(today()) + ->live() + ->visible(fn (Get $get) => $get('recurring.type') === 'One time'), + ]; + } + + public static function assignSoldier(): array + { + return [ + Fieldset::make(__('Soldier assignment')) ->schema([ - DatePicker::make('recurrence.start_date') - ->label(label: __('Start date')), - DatePicker::make('recurrence.end_date') - ->label(label: __('End date')), - ])->visible(fn (Get $get): bool => $get('recurrence.type') === 'OneTime'), + Grid::make() + ->schema([ + ToggleButtons::make('soldier_type') + ->label(__('Soldier type')) + ->reactive() + ->live() + ->inline() + ->options( + fn (Get $get) => self::getOptions($get) + ) + ->afterStateUpdated(function (callable $set) { + $set('soldier_id', null); + }), + Select::make('soldier_id') + ->label(__('Assign soldier')) + ->options( + function (Get $get) { + return self::getSoldiers($get); + } + ) + ->default(null) + ->placeholder('Select soldier') + ->visible( + fn (Get $get): bool => $get('soldier_type') + && $get('soldier_type') != 'me' + ), + ]), + ]), + ]; + } + + public static function additionalDetails(): array + { + return [ + Toggle::make('is_alert') + ->label(__('Is alert')), + Toggle::make('is_weekend') + ->label(__('Is weekend')), + Toggle::make('is_night') + ->label(__('Is night')), ]; } -} + + protected static function getOptions(Get $get): array + { + $options = [ + 'reserves' => __('Reserves'), + 'all' => __('All'), + ]; + if ($get('department_name')) { + $options = collect($options) + ->put('department', '"'.$get('department_name').'" '.__('Department')) + ->toArray(); + } + if (self::amIAvailable($get)) { + $options = collect($options) + ->put('me', __('Me')) + ->toArray(); + } + if (current(array: array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) != 'manager') { + return collect($options) + ->put('my_soldiers', __('My Soldiers')) + ->toArray(); + } + + return $options; + } + + protected static function amIAvailable($get) + { + $shift = self::taskDetails($get); + $manual_assignment = new ManualAssignment($shift, 'me'); + + return $manual_assignment->amIAvailable($get('type')); + } + + protected static function getSoldiers(Get $get) + { + $shift = self::taskDetails($get); + $manual_assignment = new ManualAssignment($shift, $get('soldier_type')); + + return $manual_assignment->getSoldiers($get('type'), $get('department_name')); + } + + protected static function taskDetails(Get $get) + { + $task_date = Carbon::parse($get('recurring.date')); + $task = new Task; + $task->type = $get('type'); + $task->is_night = $get('is_night'); + $task->is_weekend = $get('is_weekend'); + $shift = new Shift; + $shift->id = null; + $shift->task = $task; + $shift->start_date = Carbon::parse($task_date->format('Y-m-d').' '.$get('start_hour')); + $shift->end_date = $shift->start_date->addHours((float) ($get('duration'))); + $shift->parallel_weight = $get('parallel_weight'); + + return $shift; + } +} \ No newline at end of file diff --git a/app/Resources/TaskResource/Pages/CreateTask.php b/app/Resources/TaskResource/Pages/CreateTask.php index cadc98f..6a826ed 100644 --- a/app/Resources/TaskResource/Pages/CreateTask.php +++ b/app/Resources/TaskResource/Pages/CreateTask.php @@ -2,11 +2,14 @@ namespace App\Resources\TaskResource\Pages; +use App\Models\Shift; +use App\Models\Soldier; use App\Models\Task; use App\Resources\TaskResource; -use App\Services\ReccurenceEvents; +use App\Services\RecurringEvents; use Filament\Forms\Components\Section; use Filament\Forms\Components\Wizard\Step; +use Filament\Forms\Get; use Filament\Resources\Pages\CreateRecord; use Filament\Resources\Pages\CreateRecord\Concerns\HasWizard; @@ -16,12 +19,35 @@ class CreateTask extends CreateRecord protected static string $resource = TaskResource::class; + protected function getRedirectUrl(): string + { + $resource = static::getResource(); + + return $resource::getUrl('index'); + } + protected function afterCreate(): void + { + self::recurring(); + if ((empty($this->data['soldier_type'])) || (empty($this->data['soldier_id']) && $this->data['soldier_type'] != 'me')) { + return; + } + $shift_for_assignment = Shift::latest()->first(); + $soldier = ($this->data['soldier_type'] == 'me') ? Soldier::find(auth()->user()->userable_id) : Soldier::find($this->data['soldier_id']); + $shift_for_assignment->soldier_id = $soldier->id; + $shift_for_assignment->save(); + } + + protected static function recurring() { $task = Task::latest()->first(); - if ($task->recurrence['type'] == 'OneTime') { - $reccurenceEvents = new ReccurenceEvents; - $reccurenceEvents->oneTimeTask($task); + if ($task->recurring['type'] == 'Daily range') { + $recurringEvents = new RecurringEvents; + $recurringEvents->dailyRangeTask($task); + } + if ($task->recurring['type'] == 'One time') { + $recurringEvents = new RecurringEvents; + $recurringEvents->oneTimeTask($task); } } @@ -33,16 +59,27 @@ public static function getSteps(): array ->schema([ Section::make()->schema(TaskResource::getTaskDetails())->columns(), ]), + Step::make('Recurring') + ->label(__('Recurring')) + ->schema([ + Section::make()->schema(TaskResource::getRecurring())->columns(), + ]), Step::make('Additional_details') ->label(__('Additional settings')) ->schema([ Section::make()->schema(TaskResource::additionalDetails())->columns(), ]), - Step::make('Recurrence') - ->label(__('Recurrence')) + Step::make(label: 'Assign_soldier') + ->label(__('Assign soldier')) ->schema([ - Section::make()->schema(TaskResource::getRecurrence())->columns(), - ]), + Section::make()->schema(TaskResource::assignSoldier())->columns(), + ]) + ->visible( + function (Get $get) { + return $get('recurring.type') == 'One time' + && $get('recurring.date'); + } + ), ]; } -} +} \ No newline at end of file diff --git a/app/Resources/TaskResource/Pages/EditTask.php b/app/Resources/TaskResource/Pages/EditTask.php index 257f012..b5e0e89 100644 --- a/app/Resources/TaskResource/Pages/EditTask.php +++ b/app/Resources/TaskResource/Pages/EditTask.php @@ -3,7 +3,7 @@ namespace App\Resources\TaskResource\Pages; use App\Resources\TaskResource; -use Filament\Actions; +use Filament\Actions\DeleteAction; use Filament\Resources\Pages\EditRecord; class EditTask extends EditRecord @@ -13,7 +13,12 @@ class EditTask extends EditRecord protected function getHeaderActions(): array { return [ - Actions\DeleteAction::make(), + DeleteAction::make()->label(__('Delete')), ]; } + + protected function getRedirectUrl(): string + { + return $this->getResource()::getUrl('index'); + } } diff --git a/app/Resources/TeamResource.php b/app/Resources/TeamResource.php index 66cad7f..9d1bd0a 100644 --- a/app/Resources/TeamResource.php +++ b/app/Resources/TeamResource.php @@ -150,7 +150,9 @@ public static function table(Table $table): Table ->badge(fn ($record) => Soldier::where('team_id', $record->id)->count()) ->url(fn (Team $record): string => route('filament.app.resources.soldiers.index', ['team_id' => $record->id])), EditAction::make(), - DeleteAction::make(), + DeleteAction::make() + ->label(__('Delete')) + ->modalHeading(__('Delete').' '.self::getModelLabel()), ]), ]) ->bulkActions([ diff --git a/app/Resources/TeamResource/Pages/CreateTeam.php b/app/Resources/TeamResource/Pages/CreateTeam.php index a68c064..3372c06 100644 --- a/app/Resources/TeamResource/Pages/CreateTeam.php +++ b/app/Resources/TeamResource/Pages/CreateTeam.php @@ -7,6 +7,7 @@ use App\Models\Team; use App\Models\User; use App\Resources\TeamResource; +use Filament\Notifications\Notification; use Filament\Resources\Pages\CreateRecord; use Filament\Support\Exceptions\Halt; use Throwable; @@ -17,6 +18,17 @@ class CreateTeam extends CreateRecord protected function beforeCreate(): void { + $name = Team::where('name', '=', $this->data['name'])->pluck('name'); + if ($name->contains($this->data['name'])) { + Notification::make() + ->warning() + ->title(__('This name already exists in the system!')) + ->body(__('Add an identifier to the name so that it is not the same as another name.')) + ->persistent() + ->send(); + $this->halt(); + } + $teams = Team::where('commander_id', $this->data['commander_id'])->get(); $departments = Department::where('commander_id', $this->data['commander_id'])->get(); if ($teams->isNotEmpty() || $departments->isNotEmpty()) { diff --git a/app/Resources/TeamResource/Pages/EditTeam.php b/app/Resources/TeamResource/Pages/EditTeam.php index 3f59077..3c9e252 100644 --- a/app/Resources/TeamResource/Pages/EditTeam.php +++ b/app/Resources/TeamResource/Pages/EditTeam.php @@ -7,7 +7,6 @@ use App\Models\Team; use App\Models\User; use App\Resources\TeamResource; -use Filament\Actions; use Filament\Resources\Pages\EditRecord; use Filament\Support\Exceptions\Halt; use Throwable; @@ -16,13 +15,6 @@ class EditTeam extends EditRecord { protected static string $resource = TeamResource::class; - protected function getHeaderActions(): array - { - return [ - Actions\DeleteAction::make(), - ]; - } - protected function beforeSave(): void { $teams = Team::where('commander_id', $this->data['commander_id'])->get(); diff --git a/app/Services/Algorithm.php b/app/Services/Algorithm.php new file mode 100644 index 0000000..0b3a162 --- /dev/null +++ b/app/Services/Algorithm.php @@ -0,0 +1,136 @@ +get() + ->map( + fn (Shift $shift) => new \App\Services\Shift( + $shift->id, + $shift->task->type, + $shift->start_date, + $shift->end_date, + $shift->parallel_weight == 0 ? $shift->task->parallel_weight : $shift->parallel_weight, + $shift->task->is_night, + $shift->is_weekend != null ? $shift->is_weekend : $shift->task->is_weekend + ) + ); + + return $shifts; + } + + protected function getSoldiersDetails() + { + return Soldier::with('constraints') + ->where('is_reservist', false) + ->get() + ->map(function (Soldier $soldier) { + $constraints = $soldier->constraints->map( + fn ($constraint) => new \App\Services\Constraint( + $constraint->start_date, + $constraint->end_date, + ConstraintType::getPriority()[$constraint->constraint_type] == 1 ? Priority::HIGH : Priority::LOW + ) + ); + $shifts = $this->getSoldiersShifts($soldier); + + $shifts->push(...$this->addShiftsSpaces($shifts)); + + $soldierSums = $this->soldierSum($shifts); + + return new \App\Services\Soldier( + $soldier->id, + new MaxData($soldier->capacity, $soldierSums['points']), + new MaxData($soldier->max_shifts, $soldierSums['count']), + new MaxData($soldier->max_nights, $soldierSums['sumNights']), + new MaxData($soldier->max_weekends, $soldierSums['sumWeekends']), + $soldier->qualifications, + $constraints, + $shifts + ); + }) + ->shuffle() + ->toArray(); + } + + protected function getSoldiersShifts(Soldier $soldier) + { + return Shift::where('soldier_id', $soldier->id) + ->get() + ->filter( + function (Shift $shift): bool { + $range = new Range($shift->start_date, $shift->end_date); + + return $range->isSameMonth(new Range(now()->addMonth(), now()->addMonth())); + } + )->map(fn (Shift $shift) => new \App\Services\Shift( + $shift->id, + $shift->task->type, + $shift->start_date, + $shift->end_date, + $shift->parallel_weight == 0 ? $shift->task->parallel_weight : $shift->parallel_weight, + $shift->task->is_night, + $shift->is_weekend != null ? $shift->is_weekend : $shift->task->is_weekend, + )); + } + + protected function addShiftsSpaces($shifts) + { + $allSpaces = collect([]); + collect($shifts)->map(function (\App\Services\Shift $shift) use ($shifts, &$allSpaces) { + if ($shift->isWeekend) { + $spaces = $shift->getShiftSpaces($shifts); + } + if ($shift->isNight) { + $spaces = $shift->getShiftSpaces($shifts); + } + if (! empty($spaces)) { + collect($spaces)->map(fn (Range $space) => $allSpaces->push(new \App\Services\Shift(0, 'space', $space->start, $space->end, 0, false, false))); + } + }); + + return $allSpaces; + } + + protected function soldierSum($shifts) + { + $points = 0; + $nights = 0; + $weekends = 0; + $count = 0; + collect($shifts) + ->filter(function ($shift) { + return $shift->id != 0; + }) + ->map(function ($shift) use (&$count, &$points, &$nights, &$weekends) { + $count++; + $points += $shift->points; + $shift->isWeekend ? $weekends += $shift->points : $weekends; + $shift->isNight ? $nights += $shift->points : $nights; + }); + + return [ + 'count' => $count, + 'points' => $points, + 'sumWeekends' => $weekends, + 'sumNights' => $nights, + ]; + } + + public function run() + { + $shifts = $this->getShiftWithTasks(); + $soldiers = $this->getSoldiersDetails(); + $scheduleAlgorithm = new Schedule($shifts, $soldiers); + $scheduleAlgorithm->schedule(); + } +} \ No newline at end of file diff --git a/app/Services/Assignment.php b/app/Services/Assignment.php new file mode 100644 index 0000000..5c32b5e --- /dev/null +++ b/app/Services/Assignment.php @@ -0,0 +1,16 @@ +shiftId = $shiftId; + $this->soldierId = $soldierId; + } +} \ No newline at end of file diff --git a/app/Services/Constraint.php b/app/Services/Constraint.php index 0fc43f1..600fa59 100644 --- a/app/Services/Constraint.php +++ b/app/Services/Constraint.php @@ -15,4 +15,4 @@ public function __construct($start, $end, Priority $priority = Priority::HIGH) $this->range = new Range($start, $end); $this->priority = $priority; } -} \ No newline at end of file +} diff --git a/app/Services/ManualAssignment.php b/app/Services/ManualAssignment.php index 2fd7d81..d763a03 100644 --- a/app/Services/ManualAssignment.php +++ b/app/Services/ManualAssignment.php @@ -9,7 +9,6 @@ use App\Models\Department; use App\Models\Shift; use App\Models\Soldier; -use App\Models\Team; use App\Models\User; use Illuminate\Support\Facades\Cache; @@ -17,45 +16,53 @@ class ManualAssignment { public $shift; - public $soldier_type; + public $soldierType; public $soldiers; - public function __construct(Shift $shift, string $soldier_type) + public function __construct(Shift $shift, string $soldierType) { - $this->shift = new \App\Services\Shift($shift->id, $shift->task->name, $shift->start_date, $shift->end_date, $shift->task->parallel_weight); - $this->soldier_type = $soldier_type; + $this->shift = new \App\Services\Shift( + $shift->id, + $shift->task->type, + $shift->start_date, + $shift->end_date, + $shift->parallel_weight == 0 ? $shift->task->parallel_weight : $shift->parallel_weight, + $shift->task->is_night, + $shift->is_weekend != null ? $shift->is_weekend : $shift->task->is_weekend + ); + $this->soldierType = $soldierType; $this->soldiers = []; } - public function getSoldiers() + public function getSoldiers($qualification = null, $departmentName = null) { - $this->initSoldiersData(); + $this->initSoldiersData($qualification, $departmentName); return $this->getAvailableSoldiers(); } - protected function initSoldiersData() + protected function initSoldiersData($qualification, $departmentName) { $this->soldiers = Cache::remember('users', 30 * 60, function () { return User::all(); }); - match ($this->soldier_type) { + match ($this->soldierType) { 'reserves' => $this->filterReserves(), 'my_soldiers' => $this->filterMySoldiers(), - 'department' => $this->filterDepartment(), + 'department' => $this->filterDepartment($departmentName), 'all' => $this->filterAll() }; - $this->mapSoldiersConstraints(); + $this->getSoldiersDetails($qualification); } protected function filterReserves() { $this->soldiers = $this->soldiers ->filter(function ($user) { - $soldier = Soldier::where('id', $user->userable_id)->first(); + $soldier = $this->getSoldierBy($user->userable_id); - return $soldier->is_reservist; + return $soldier->is_reservist && $soldier->id != auth()->user()->userable_id; }); } @@ -63,36 +70,29 @@ protected function filterMySoldiers() { $this->soldiers = $this->soldiers ->filter(function ($user) { - $current_user_id = auth()->user()->userable_id; + $currentUserId = auth()->user()->userable_id; $role = current(array: array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])); - $soldier = Soldier::where('id', $user->userable_id)->first(); - match ($role) { - 'department-commander' => (function () use ($soldier) { - $department_id = Department::where('commander_id', $soldier->id)->value('id'); - $teams = Team::where('department_id', $department_id)->get('id'); - - return $teams->contains($soldier->team_id); - })(), - 'team-commander' => (function () use ($soldier, $current_user_id) { - $team = Team::where('commander_id', $soldier->id)->get('id'); - - return $soldier->team_id === $team && $soldier->id != $current_user_id; - })() + $soldier = $this->getSoldierBy($user->userable_id); + + return match ($role) { + 'department-commander' => $soldier?->team?->department?->commander_id == $currentUserId + && $soldier?->id != $currentUserId, + 'team-commander' => $soldier?->team?->commander_id == $currentUserId + && $soldier?->id != $currentUserId }; }); } - protected function filterDepartment() + protected function filterDepartment($name) { - $department_name = Shift::find($this->shift->id)->task->department_name; + $departmentName = $name ?: Shift::find($this->shift->id)->task?->department_name; + $this->soldiers = $this->soldiers - ->filter(function ($user) use ($department_name) { + ->filter(function ($user) use ($departmentName) { $soldier = Soldier::where('id', '=', $user->userable_id)->first(); - $department = Department::where('name', '=', $department_name); - $department_id = $department->value('id'); - $teams = Team::where('department_id', '=', $department_id)->get('id'); - return $teams->contains($soldier->team_id) || $soldier->id == $department->value('commander_id'); + return $soldier?->team?->department?->name == $departmentName + || $soldier->id == Department::where('name', '=', $departmentName)->value('commander_id'); }); } @@ -100,51 +100,122 @@ protected function filterAll() { $this->soldiers = $this->soldiers ->filter(function ($user) { - $soldier = Soldier::where('id', $user->userable_id)->first(); + $soldier = $this->getSoldierBy($user->userable_id); - return ! $soldier->is_reservist; + return ! $soldier->is_reservist && $soldier->id != auth()->user()->userable_id; }); } - protected function mapSoldiersConstraints() + protected function getSoldiersDetails($qualification) { $this->soldiers = $this->soldiers ->map( - function (User $user) { - $constraints = collect(); - $soldier = Soldier::where('id', $user->userable_id)->first(); - if ($this->soldier_type != 'reserves') { - $constraints = $this->getConstraintBy($soldier->id); - }value: - $soldiers_shifts = Shift::where('soldier_id', $soldier->id) - ->get() - ->filter( - fn (Shift $shift) => $this->shift->range->isSameMonth(new Range($shift->start_date, $shift->end_date)) - ); - $soldiers_shifts->map(fn (Shift $shift) => $constraints->push( - new \App\Services\Constraint( - $shift->start_date, - $shift->end_date, - Priority::HIGH, - ) - )); + function (User $user) use ($qualification) { + $soldier = $this->getSoldierBy($user->userable_id); + $soldier->qualifications = $this->mapQualifications($soldier->qualifications, $qualification); + $constraints = $this->getConstraints($soldier); + $soldiersShifts = $this->getSoldiersShifts($soldier); + + $soldiersShifts->push(...$this->addShiftsSpaces($soldiersShifts)); + + $soldierSums = $this->soldierSum($soldiersShifts); return new \App\Services\Soldier( $soldier->id, - new MaxData($soldier->capacity, $soldier->capacity_hold), - new MaxData($soldier->max_shifts, $soldiers_shifts->count()), - new MaxData($soldier->max_nights, $this->nightShiftSum($soldiers_shifts)), - new MaxData($soldier->max_weekends, $this->weekendShiftSum($soldiers_shifts)), + new MaxData($soldier->capacity, $soldierSums['points']), + new MaxData($soldier->max_shifts, $soldierSums['count']), + new MaxData($soldier->max_nights, $soldierSums['sumNights']), + new MaxData($soldier->max_weekends, $soldierSums['sumWeekends']), $soldier->qualifications, - $constraints + $constraints, + $soldiersShifts ); } ); } - protected function getConstraintBy(int $soldier_id) + protected function getSoldierBy($userable_id) + { + return Soldier::where('id', $userable_id)->first(); + } + + public function amIAvailable($qualification = null): bool + { + $me = Soldier::find(auth()->user()->userable_id); + $me->qualifications = $this->mapQualifications($me->qualifications, $qualification); + $constraints = $this->getConstraints($me); + $myShifts = $this->getSoldiersShifts($me); + + $myShifts->push(...$this->addShiftsSpaces($myShifts)); + + $soldierSums = $this->soldierSum($myShifts); + + $soldier = new \App\Services\Soldier( + $me->id, + new MaxData($me->capacity, $soldierSums['points']), + new MaxData($me->max_shifts, $soldierSums['count']), + new MaxData($me->max_nights, $soldierSums['sumNights']), + new MaxData($me->max_weekends, $soldierSums['sumWeekends']), + $me->qualifications, + $constraints, + $myShifts + ); + + return $soldier->isQualified($this->shift->taskType) + && $soldier->isAvailableByMaxes($this->shift) + && $soldier->isAvailableByConstraints($this->shift->range) != Availability::NO + && $soldier->isAvailableByShifts($this->shift->range) + && $soldier->isAvailableBySpaces($this->shift->getShiftSpaces($soldier->shifts)); + } + + protected function mapQualifications($qualifications, $qualification) + { + return $qualification ? collect($qualifications)->push($qualification) : $qualifications; + } + + protected function getConstraints(Soldier $soldier) + { + return $this->soldierType != 'reserves' ? $this->getConstraintBy($soldier->id) : collect([]); + } + + protected function getSoldiersShifts(Soldier $soldier) + { + return Shift::where('soldier_id', $soldier->id) + ->get() + ->filter( + fn (Shift $shift) => $this->shift->range->isSameMonth(new Range($shift->start_date, $shift->end_date)) + )->map(fn (Shift $shift) => new \App\Services\Shift( + $shift->id, + $shift->task->type, + $shift->start_date, + $shift->end_date, + $shift->parallel_weight == 0 ? $shift->task->parallel_weight : $shift->parallel_weight, + $shift->task->is_night, + $shift->is_weekend != null ? $shift->is_weekend : $shift->task->is_weekend, + )); + } + + protected function addShiftsSpaces($shifts) + { + $allSpaces = collect([]); + collect($shifts)->map(function (\App\Services\Shift $shift) use ($shifts, &$allSpaces) { + if ($shift->isWeekend) { + $spaces = $shift->getShiftSpaces($shifts); + } + if ($shift->isNight) { + $spaces = $shift->getShiftSpaces($shifts); + } + if (! empty($spaces)) { + collect($spaces)->map(fn (Range $space) => $allSpaces->push(new \App\Services\Shift(0, 'space', $space->start, $space->end, 0, false, false))); + } + }); + + return $allSpaces; + } + + protected function getConstraintBy(int $soldierId) { - return Constraint::where('soldier_id', $soldier_id) + return Constraint::where('soldier_id', $soldierId) ->get() ->map( fn ($constraint) => new \App\Services\Constraint( @@ -155,37 +226,47 @@ protected function getConstraintBy(int $soldier_id) ); } - protected function weekendShiftSum($shifts): float + protected function soldierSum($shifts) { - return $shifts->filter(function (Shift $shift) { - $range = new Range($shift->start_date, $shift->end_date); - - return $range->isWeekend(); - })->count(); - } + $points = 0; + $nights = 0; + $weekends = 0; + $count = 0; + collect($shifts) + ->filter(function ($shift) { + return $shift->id != 0; + }) + ->map(function ($shift) use (&$count, &$points, &$nights, &$weekends) { + $count++; + $points += $shift->points; + $shift->isWeekend ? $weekends += $shift->points : $weekends; + $shift->isNight ? $nights += $shift->points : $nights; + }); - protected function nightShiftSum($shifts): float - { - return $shifts->filter(function (Shift $shift) { - $range = new Range($shift->start_date, $shift->end_date); - $range->isNight(); - })->count(); + return [ + 'count' => $count, + 'points' => $points, + 'sumWeekends' => $weekends, + 'sumNights' => $nights, + ]; } protected function getAvailableSoldiers() { - $available_soldiers = $this->soldiers->filter( - fn (\App\Services\Soldier $soldier) => $soldier->isQualified($this->shift->task_name) + $availableSoldiers = $this->soldiers->filter( + fn (\App\Services\Soldier $soldier) => $soldier->isQualified($this->shift->taskType) && $soldier->isAvailableByMaxes($this->shift) && $soldier->isAvailableByConstraints($this->shift->range) != Availability::NO + && $soldier->isAvailableByShifts($this->shift->range) + && $soldier->isAvailableBySpaces($this->shift->getShiftSpaces($soldier->shifts)) ); - return $available_soldiers->mapWithKeys( + return $availableSoldiers->mapWithKeys( function (\App\Services\Soldier $soldier) { - $user = User::get()->where('userable_id', '=', $soldier->id)->first(); + $user = User::where('userable_id', '=', $soldier->id)->first(); return [$user->userable_id => $user->displayName]; } ); } -} +} \ No newline at end of file diff --git a/app/Services/MaxData.php b/app/Services/MaxData.php index c4a467d..92b8cdc 100644 --- a/app/Services/MaxData.php +++ b/app/Services/MaxData.php @@ -19,7 +19,7 @@ public function remaining(): float return $this->max - $this->used; } - public function relativeLoad(): float + protected function relativeLoad(): float { if ($this->max == 0) { return 0; @@ -27,4 +27,26 @@ public function relativeLoad(): float return $this->used / $this->max; } + + protected function singleValue(): float + { + if ($this->max == 0) { + return 0; + } + + return 1 / $this->max; + } + + public function calculatedRelativeLoad(): float + { + $relativeLoad = $this->relativeLoad(); + $pointValue = $this->singleValue(); + + return ($relativeLoad * 4 + $pointValue) / 5; + } + + public function status(): string + { + return "{$this->used} / {$this->max}"; + } } \ No newline at end of file diff --git a/app/Services/PotentialSoldierData.php b/app/Services/PotentialSoldierData.php new file mode 100644 index 0000000..b838ca1 --- /dev/null +++ b/app/Services/PotentialSoldierData.php @@ -0,0 +1,16 @@ +soldierId = $soldierId; + $this->isLowConstraint = $isLowConstraint; + } +} \ No newline at end of file diff --git a/app/Services/Range.php b/app/Services/Range.php index a7f20d1..466f618 100644 --- a/app/Services/Range.php +++ b/app/Services/Range.php @@ -2,6 +2,7 @@ namespace App\Services; +use App\Enums\DaysInWeek; use Carbon\Carbon; use Exception; @@ -13,16 +14,16 @@ class Range public function __construct($start, $end) { - if ($start > $end) { + if (Carbon::parse($start)->isAfter(Carbon::parse($end))) { new Exception('Invalid range'); } - $this->start = $start; - $this->end = $end; + $this->start = Carbon::parse($start)->setTimezone('Asia/Jerusalem'); + $this->end = Carbon::parse($end)->setTimezone('Asia/Jerusalem'); } public function isConflict(Range $other): bool { - return ! (Carbon::parse($this->start)->isAfter(Carbon::parse($other->end)) || Carbon::parse($this->end)->isBefore(Carbon::parse($other->start))); + return $this->start->isBefore($other->end) && $other->start->isBefore($this->end); } public function isWeekend(): bool @@ -46,11 +47,8 @@ public function isWeekend(): bool public function isNight(): bool { - if ($this->isWeekend()) { - return false; - } - - return + return $this->isWeekend() ? + false : ( ($this->start->day == $this->end->day) && ( @@ -70,4 +68,38 @@ public function isSameMonth(Range $other): bool || $other->end->monthName == $this->start->monthName || $other->end->monthName == $this->end->monthName; } + + public function isRangeInclude(DaysInWeek $dayInWeek): bool + { + $startDayIndex = $this->start->dayOfWeek; + $endDayIndex = $this->end->dayOfWeek; + $checkDayIndex = date('N', strtotime($dayInWeek->value)); + if ($startDayIndex <= $endDayIndex) { + return $this->start->diffInDays($this->end) > 5 || ($checkDayIndex >= $startDayIndex && $checkDayIndex <= $endDayIndex); + } + + return $checkDayIndex >= $startDayIndex || $checkDayIndex <= $endDayIndex; + } + + public function getDayAfterWeekend(): Range + { + $nextDayAfterWeekend = $this->end->next(DaysInWeek::SUNDAY->value)->setTime(8, 0); + + return new Range($nextDayAfterWeekend, $nextDayAfterWeekend->copy()->addDay()); + } + + public function getNightSpaces() + { + return [$this->getDayBeforeNight(), $this->getDayAfterNight()]; + } + + public function getDayBeforeNight(): Range + { + return new Range($this->start->copy()->subDay()->setTime(20, 0, 0), $this->start); + } + + public function getDayAfterNight(): Range + { + return new Range($this->end, $this->end->copy()->addDay()->setTime(8, 0, 0)); + } } \ No newline at end of file diff --git a/app/Services/ReccurenceEvents.php b/app/Services/ReccurenceEvents.php deleted file mode 100644 index 432a4f0..0000000 --- a/app/Services/ReccurenceEvents.php +++ /dev/null @@ -1,123 +0,0 @@ -filter(function ($task) { - return $task->recurrence['type'] !== 'OneTime'; - })->map(fn ($task) => $this->swichTasks($task)); - } - - public function oneTimeTask(Task $task) - { - $this->task = $task; - $dates = $this->getDatesOfMonth(); - $this->createShifts($dates); - } - - protected function swichTasks(Task $task): void - { - $this->task = $task; - $dates = match ($this->task->recurrence['type']) { - 'Daily' => $this->dailyRecurrence(), - 'Weekly' => $this->weeklyRecurrence(), - 'Monthly' => $this->monthlyRecurrence(), - 'Custom' => $this->customRecurrence(), - }; - $this->createShifts($dates); - } - - protected function dailyRecurrence() - { - return $this->getDatesOfMonth(); - } - - protected function weeklyRecurrence() - { - return $this->getDatesOfDaysInMonth($this->task['recurrence']['days_in_week']); - } - - protected function monthlyRecurrence() - { - $dates[] = $this->task['recurrence']['dates_in_month']; - - return $this->convertNumbersToDatesInMonth($dates); - } - - protected function customRecurrence() - { - return $this->convertNumbersToDatesInMonth($this->task['recurrence']['dates_in_month']); - } - - protected function getDatesOfMonth() - { - $period = $this->createPeriod(); - - return collect($period)->map(function ($date) { - return $this->addTimeToDate($date); - })->all(); - } - - protected function addTimeToDate($date) - { - return Carbon::parse($date->format('Y-m-d').' '.$this->task['start_hour']); - } - - protected function calculateEndDateTime($startDate) - { - $endDate = $this->addTimeToDate($startDate) - ->addHours((float) $this->task['duration']); - - return $endDate; - } - - protected function getDatesOfDaysInMonth($daysArray) - { - $period = $this->createPeriod(); - - return collect($period)->filter(function ($date) use ($daysArray) { - return in_array($date->englishDayOfWeek, $daysArray); - })->map(function ($date) { - return $this->addTimeToDate($date); - })->all(); - } - - protected function convertNumbersToDatesInMonth($dayNumbers) - { - return collect($dayNumbers)->map(function ($day) { - return $this->addTimeToDate(Carbon::create(Carbon::now()->addMonth()->year, Carbon::now()->addMonth()->month, $day)); - })->all(); - } - - protected function createPeriod() - { - return $this->task->recurrence['type'] == 'OneTime' ? - CarbonPeriod::between($this->task['recurrence']['start_date'], $this->task['recurrence']['end_date']) : - CarbonPeriod::between(Carbon::now()->addMonth()->startOfMonth(), Carbon::now()->addMonth()->endOfMonth()); - } - - protected function createShifts(array $dates) - { - collect($dates)->map(function ($date) { - $shift = new Shift; - $shift->parallel_weight = $this->task['parallel_weight']; - $shift->start_date = $date; - $shift->end_date = $this->calculateEndDateTime($date); - $shift->task_id = $this->task['id']; - $shift->save(); - }); - } -} diff --git a/app/Services/RecurringEvents.php b/app/Services/RecurringEvents.php new file mode 100644 index 0000000..aedbf72 --- /dev/null +++ b/app/Services/RecurringEvents.php @@ -0,0 +1,150 @@ +month = $month ? Carbon::parse($month) : Carbon::now()->addMonth(); + } + + public function setMonth($month) + { + $this->month = Carbon::parse($month); + } + + public function recurringTask(): void + { + + $tasks = Task::get(); + $tasks->filter(function ($task) { + return $task->recurring['type'] !== 'Daily range' && $task->recurring['type'] !== 'One time'; + })->map(fn ($task) => $this->switchTasks($task)); + } + + public function oneTimeTask(Task $task) + { + $this->task = $task; + $dates = $this->addTimeToDate(Carbon::parse($this->task['recurring']['date'])); + $this->createShifts([$dates]); + } + + public function dailyRangeTask(Task $task) + { + $this->task = $task; + $dates = $this->getDatesOfMonth(); + $this->createShifts($dates); + } + + protected function switchTasks(Task $task): void + { + $this->task = $task; + $dates = match ($this->task->recurring['type']) { + 'Daily' => $this->dailyRecurring(), + 'Weekly' => $this->weeklyRecurring(), + 'Monthly' => $this->monthlyRecurring(), + 'Custom' => $this->customRecurring(), + }; + + $this->createShifts($dates); + } + + protected function dailyRecurring() + { + return $this->getDatesOfMonth(); + } + + protected function weeklyRecurring() + { + return $this->getDatesOfDaysInMonth($this->task['recurring']['days_in_week']); + } + + protected function monthlyRecurring() + { + $dates[] = $this->task['recurring']['dates_in_month']; + + return $this->convertNumbersToDatesInMonth($dates); + } + + protected function customRecurring() + { + return $this->convertNumbersToDatesInMonth($this->task['recurring']['dates_in_month']); + } + + protected function getDatesOfMonth() + { + $period = $this->createPeriod(); + + return collect($period)->map(function ($date) { + return $this->addTimeToDate($date); + })->all(); + } + + protected function addTimeToDate($date) + { + return Carbon::parse($date->format('Y-m-d').' '.$this->task['start_hour']); + } + + protected function calculateEndDateTime($startDate) + { + $endDate = $this->addTimeToDate($startDate) + ->addHours((float) $this->task['duration']); + + return $endDate; + } + + protected function getDatesOfDaysInMonth($daysArray) + { + $period = $this->createPeriod(); + + return collect($period)->filter(function ($date) use ($daysArray) { + return in_array($date->englishDayOfWeek, $daysArray); + })->map(function ($date) { + return $this->addTimeToDate($date); + })->all(); + } + + protected function convertNumbersToDatesInMonth($dayNumbers) + { + return collect($dayNumbers)->map(function ($day) { + return $this->addTimeToDate(Carbon::create($this->month->year, $this->month->month, $day)); + })->all(); + } + + protected function createPeriod() + { + return $this->task->recurring['type'] == 'Daily range' ? + CarbonPeriod::between($this->task['recurring']['start_date'], $this->task['recurring']['end_date']) : + CarbonPeriod::between($this->month->copy()->startOfMonth(), $this->month->copy()->endOfMonth()); + } + + protected function createShifts(array $dates) + { + collect($dates)->map(function ($date) { + if ( + ! Shift::where('task_id', '=', $this->task['id']) + ->where('start_date', $date) + ->where('end_date', $this->calculateEndDateTime($date)) + ->get() + ->first() + && checkdate($date->month, $date->day, $date->year) + ) { + $shift = new Shift; + $shift->start_date = $date; + $shift->end_date = $this->calculateEndDateTime($date); + $shift->task_id = $this->task['id']; + $shift->save(); + } + }); + } +} \ No newline at end of file diff --git a/app/Services/Schedule.php b/app/Services/Schedule.php new file mode 100644 index 0000000..4d37e1f --- /dev/null +++ b/app/Services/Schedule.php @@ -0,0 +1,301 @@ +shifts = collect($shifts); + $this->soldiers = collect($soldiers); + $this->shiftsData = collect([]); + $this->soldiersDict = collect([]); + $this->assignments = collect([]); + $this->unAssignments = collect([]); + $this->SHIFT_DUMBBELLS = collect([ + 'POINTS_RATIO' => 0.29, + 'SHIFTS_RATIO' => 0.39, + 'WEEKENDS_RATIO' => 0.04, + 'NIGHTS_RATIO' => 0.04, + 'SHIFT_AVAILABILITY' => 0.23, + 'BLOCK_POINTS' => 0.05, + ]); + $this->SOLDIER_DUMBBELLS = collect([ + 'LOW_CONSTRAINT' => 0.45, + 'POINTS_RELATIVE_LOAD' => 0.4, + 'SHIFTS_RELATIVE_LOAD' => 0.08, + 'NIGHT_RELATIVE_LOAD' => 0.01, + 'WEEKEND_RELATIVE_LOAD' => 0.01, + 'MULTITASKING_VALUE' => 0.05, + ]); + } + + public function schedule(): void + { + $this->initShiftsData(); + $this->initSoldiersData(); + $sortedShifts = $this->getSortedShiftsList(); + collect($sortedShifts)->map(function (ShiftData $shift) { + $success = $this->assignShift($shift); + if (! $success) { + $this->unAssignments->push($shift->shift); + } + }); + $this->updateDB(); + } + + protected function initShiftsData(): void + { + $groupedShifts = collect($this->shifts)->groupBy('taskType'); + $groupedShifts->each(callback: function ($shifts, $taskType) { + $this->addShiftsDataByTask($taskType, collect($shifts)); + }); + } + + protected function addShiftsDataByTask(string $taskType, $shifts): void + { + $soldiers = $this->soldiers->filter(function (Soldier $soldier) use ($taskType): bool { + return $soldier->isQualified($taskType); + }); + $taskWeight = $this->getTaskWeight($shifts, $soldiers); + $shifts->map(fn ($shift) => $this->addShiftData($shift, $soldiers, $taskWeight)); + } + + protected function getTaskWeight($shifts, $soldiers): array + { + $requiredPoints = collect($shifts)->sum('points'); + $requiredNights = collect($shifts)->sum(function (Shift $shift) { + return $shift->isNight; + }); + $requiredWeekends = collect($shifts)->sum(function (Shift $shift) { + return $shift->isWeekend; + }); + $requiredShifts = count($shifts); + + $availablePoints = collect($soldiers)->sum(function (Soldier $soldier) { + return $soldier->pointsMaxData->max; + }); + + $availableNights = collect($soldiers)->sum(function ($soldier) { + return $soldier->nightsMaxData->max; + }); + + $availableWeekends = collect($soldiers)->sum(function ($soldier) { + return $soldier->weekendsMaxData->max; + }); + + $availableShifts = collect($soldiers)->sum(function ($soldier) { + return $soldier->shiftsMaxData->max; + }); + + $weight = collect([ + 'POINTS_RATIO' => $this->getRatio($requiredPoints, $availablePoints), + 'NIGHTS_RATIO' => $this->getRatio($requiredNights, $availableNights), + 'WEEKENDS_RATIO' => $this->getRatio($requiredWeekends, $availableWeekends), + 'SHIFTS_RATIO' => $this->getRatio($requiredShifts, $availableShifts), + ]); + + $weight->each(function ($value, $key) use (&$weight) { + $weight[$key] = $value * $this->SHIFT_DUMBBELLS[$key]; + }); + + return $weight->all(); + } + + protected function addShiftData(Shift $shift, $soldiers, $taskWeight) + { + $potentialSoldiers = $this->getPotentialSoldiers($soldiers, $shift->range); + $shiftData = new ShiftData( + $shift, + $potentialSoldiers, + $this->getShiftWeight( + $taskWeight, + $shift, + $soldiers->count(), + $potentialSoldiers->count() + ) + ); + $this->shiftsData->push($shiftData); + } + + protected function getPotentialSoldiers($soldiers, Range $range) + { + $potentialSoldiers = $soldiers->filter(function (Soldier $soldier) use ($range) { + return $soldier->isAvailableByConstraints($range) != Availability::NO; + })->map(function (Soldier $soldier) use ($range) { + $availability = $soldier->isAvailableByConstraints($range); + + return new PotentialSoldierData( + $soldier->id, + $availability == Availability::BETTER_NOT + ); + }); + + return $potentialSoldiers; + } + + protected function getShiftWeight($taskWeight, Shift $shift, int $soldiersCount, int $availableSoldiersCount): float + { + $weight = $taskWeight['SHIFTS_RATIO'] + $shift->points > 0 ? $taskWeight['POINTS_RATIO'] : 0; + + if ($shift->isWeekend) { + $weight += $taskWeight['WEEKENDS_RATIO']; + } elseif ($shift->isNight) { + $weight += $taskWeight['NIGHTS_RATIO']; + } + $weight += $this->getShiftAvailabilityRatio($soldiersCount, $availableSoldiersCount) + * $this->SHIFT_DUMBBELLS['SHIFT_AVAILABILITY']; + + $weight += $this->getShiftBlockPoints($shift->points) * $this->SHIFT_DUMBBELLS['BLOCK_POINTS']; + + return $weight; + } + + protected function getShiftBlockPoints(float $points): float + { + if ($points == 0) { + return 0; + } + + return (float) $points / 3; + } + + protected function getShiftAvailabilityRatio(int $soldiersCount, int $availableSoldiers): float + { + if ($availableSoldiers == 0) { + return 0; + } + + return (float) ($soldiersCount - $availableSoldiers) / $soldiersCount; + } + + protected function initSoldiersData(): void + { + $this->soldiers->map(fn (Soldier $soldier) => $this->soldiersDict->put($soldier->id, $soldier)); + } + + protected function getSortedShiftsList() + { + return $this->shiftsData->sortByDesc('weight'); + } + + protected function assignShift(ShiftData $shiftData): bool + { + $soldiers = $this->getPotentialSoldiersData($shiftData); + foreach ($soldiers as $soldier) { + $success = $this->tryAssign($soldier, $shiftData->shift); + if ($success) { + return true; + } + } + + return false; + } + + protected function getPotentialSoldiersData(ShiftData $shiftData) + { + $soldiers = collect([]); + collect($shiftData->potentialSoldiers)->map(function (PotentialSoldierData $potentialSoldierData) use (&$soldiers, $shiftData) { + $soldiers->push($this->getSoldierAndWeight($potentialSoldierData, $shiftData->shift)); + }); + + return $this->getSortedPotentialSoldiers($soldiers); + } + + protected function getSoldierAndWeight(PotentialSoldierData $potentialSoldierData, Shift $shift) + { + $soldier = $this->soldiersDict[$potentialSoldierData->soldierId]; + $weightDict = [ + 'LOW_CONSTRAINT' => $potentialSoldierData->isLowConstraint ? 1 : 0, + 'POINTS_RELATIVE_LOAD' => $shift->points > 0 ? $soldier->pointsMaxData->calculatedRelativeLoad() : 0, + 'SHIFTS_RELATIVE_LOAD' => $soldier->shiftsMaxData->calculatedRelativeLoad(), + 'NIGHT_RELATIVE_LOAD' => ! $shift->isNight ? 0 : $soldier->nightsMaxData->calculatedRelativeLoad(), + 'WEEKEND_RELATIVE_LOAD' => ! $shift->isWeekend ? 0 : $soldier->weekendsMaxData->calculatedRelativeLoad(), + 'MULTITASKING_VALUE' => $this->getMultitaskingValue( + $soldier->qualifications->count() + ), + ]; + $weight = $this->getTotalWeight($weightDict); + + return [$soldier, $weight]; + } + + protected function getMultitaskingValue(int $qualificationsNumber): float + { + return (float) (1 - ((float) (1 / $qualificationsNumber))); + } + + protected function getTotalWeight($weightData): float + { + $weight = 0; + collect($weightData)->map(function ($value, $key) use (&$weight) { + $weight += (float) ($value * $this->SOLDIER_DUMBBELLS[$key]); + }); + + return $weight; + } + + protected function getSortedPotentialSoldiers($soldiers) + { + $sortedSoldiers = $soldiers->sortBy(function ($item) { + return $item[1]; + }); + + return $sortedSoldiers->map(fn ($soldier) => $soldier[0]); + } + + protected function tryAssign(Soldier $soldier, Shift $shift): bool + { + $spaces = $shift->getShiftSpaces($soldier->shifts); + if ($soldier->isAbleTake($shift, $spaces)) { + $soldier->assign($shift, $spaces); + $this->assignments->push(new Assignment($shift->id, $soldier->id)); + + return true; + } + + return false; + } + + protected function getRatio(float $required, float $available): float + { + if ($available == 0) { + return 0; + } + $ratio = (float) $required / $available; + + return (float) $this->maximumOne($ratio); + } + + protected function maximumOne(float $number): float + { + if ($number > 1) { + return 1; + } + + return $number; + } + + protected function updateDB() + { + collect($this->assignments)->map(fn (Assignment $assignment) => \App\Models\Shift::where('id', $assignment->shiftId)->update(['soldier_id' => $assignment->soldierId])); + } +} \ No newline at end of file diff --git a/app/Services/Shift.php b/app/Services/Shift.php index 79f0a58..bda7353 100644 --- a/app/Services/Shift.php +++ b/app/Services/Shift.php @@ -2,43 +2,86 @@ namespace App\Services; +use App\Enums\DaysInWeek; + class Shift { public $id; - public $task_name; + public $taskType; public $range; public $points; - public $is_assign; + public $isNight; + + public $isWeekend; - public function __construct($id, string $task_name, $start, $end, float $points) + public function __construct($id, string $taskType, $start, $end, float $points, bool $isNight, bool $isWeekend) { $this->id = $id; - $this->task_name = $task_name; + $this->taskType = $taskType; $this->range = new Range($start, $end); $this->points = $points; - $this->is_assign = false; + $this->isNight = $isNight; + $this->isWeekend = $isWeekend; } - protected function name(): string + public function getShiftSpaces($shifts) { - return $this->task_name.': from'.$this->range->start.' to'.$this->range->end; + if ($this->isWeekend) { + return $this->getWeekendSpaces($shifts); + } + if ($this->isNight) { + return $this->range->getNightSpaces(); + } + + return []; } - public function isWeekend(): bool + protected function getWeekendSpaces($shifts) { - return $this->range->isWeekend(); + if ($this->isFullWeekend($shifts)) { + return [$this->range->getDayAfterWeekend()]; + } } - public function isNight(): bool + protected function isFullWeekend($shifts) { - if ($this->isWeekend()) { - return false; + $isFriday = $this->isShiftInclude($this->range, DaysInWeek::FRIDAY); + $isSaturday = $this->isShiftInclude($this->range, DaysInWeek::SATURDAY); + if ($isFriday && $isSaturday) { + return true; + } + $dayToCheck = $isFriday ? DaysInWeek::SATURDAY : DaysInWeek::FRIDAY; + if (! empty($shifts)) { + $shiftsInWeekend = $shifts->filter(function ($shift) use ($dayToCheck): bool { + return $this->isShiftInclude($shift->range, $dayToCheck); + }); } - return $this->range->isNight(); + return ! empty($shiftsInWeekend) ? $this->isAttached($shiftsInWeekend, $this->range, $dayToCheck) : false; + } + + protected function isShiftInclude(Range $range, DaysInWeek $dayInWeek): bool + { + return $range->isRangeInclude($dayInWeek); + } + + protected function isAttached($shifts, $range, DaysInWeek $dayInWeek): bool + { + $expectedDate = $dayInWeek == DaysInWeek::FRIDAY ? $range->start->subDay()->startOfDay() : $range->end->addDay()->startOfDay(); + + return $shifts ? collect($shifts)->contains( + function ($shift) use ($expectedDate): bool { + return $shift->range->start->isSameDay($expectedDate); + } + ) : false; + } + + protected function name(): string + { + return $this->taskType.': from'.$this->range->start.' to'.$this->range->end; } } \ No newline at end of file diff --git a/app/Services/ShiftData.php b/app/Services/ShiftData.php new file mode 100644 index 0000000..5f8ae0e --- /dev/null +++ b/app/Services/ShiftData.php @@ -0,0 +1,19 @@ +shift = $shift; + $this->potentialSoldiers = collect($potentialSoldiers); + $this->weight = $weight; + } +} \ No newline at end of file diff --git a/app/Services/Soldier.php b/app/Services/Soldier.php index e86c392..b8e9ea8 100644 --- a/app/Services/Soldier.php +++ b/app/Services/Soldier.php @@ -4,19 +4,18 @@ use App\Enums\Availability; use App\Enums\Priority; -use App\Models\Shift; class Soldier { public $id; - public $points_max_data; + public $pointsMaxData; - public $shifts_max_data; + public $shiftsMaxData; - public $nights_max_data; + public $nightsMaxData; - public $weekends_max_data; + public $weekendsMaxData; public $qualifications; @@ -24,51 +23,66 @@ class Soldier public $shifts; - public function __construct($id, MaxData $max_points, MaxData $max_shifts, MaxData $max_nights, MaxData $max_weekends, $qualifications, $constraints) + public function __construct($id, MaxData $maxPoints, MaxData $maxShifts, MaxData $maxNights, MaxData $maxWeekends, $qualifications, $constraints, $shifts = []) { $this->id = $id; - $this->points_max_data = $max_points; - $this->shifts_max_data = $max_shifts; - $this->nights_max_data = $max_nights; - $this->weekends_max_data = $max_weekends; + $this->pointsMaxData = $maxPoints; + $this->shiftsMaxData = $maxShifts; + $this->nightsMaxData = $maxNights; + $this->weekendsMaxData = $maxWeekends; $this->qualifications = collect($qualifications); $this->constraints = collect($constraints); - $this->shifts = collect([]); + $this->shifts = collect($shifts); } - public function isQualified(string $task_name): bool + public function isQualified(string $taskType): bool { - return $this->qualifications->contains($task_name); + return $this->qualifications->contains($taskType); } - public function isAbleTake(\App\Services\Shift $shift): bool + public function isAbleTake(Shift $shift, $spaces): bool { - return $this->isAvailableByMaxes($shift) && $this->isAvailableByShifts($shift->range); + return $this->isAvailableByMaxes($shift) + && $this->isAvailableByShifts($shift->range) + && $this->isAvailableBySpaces($spaces); } - public function isAvailableByMaxes(\App\Services\Shift $shift): bool + public function isAvailableByMaxes(Shift $shift): bool { - if ($shift->isWeekend() && $this->weekends_max_data->remaining() < 1) { + if ($shift->isWeekend && $this->weekendsMaxData->remaining() < $shift->points) { return false; } - if ($shift->isNight() && $this->nights_max_data->remaining() < 1) { + if ($shift->isNight && $this->nightsMaxData->remaining() < $shift->points) { return false; } - return $this->points_max_data->remaining() >= $shift->points - && $this->shifts_max_data->remaining() >= 1; + return $this->pointsMaxData->remaining() >= $shift->points + && $this->shiftsMaxData->remaining() >= 1; } - protected function isAvailableByShifts(Range $range): bool + public function isAvailableByShifts(Range $range): bool { return ! $this->shifts->contains(function ($shift) use ($range) { return $shift->range->isConflict($range); }); } + public function isAvailableBySpaces($spaces): bool + { + if ($spaces) { + foreach ($spaces as $space) { + return ! $this->shifts->contains(function ($shift) use ($space) { + return $shift->range->isConflict($space); + }); + } + } + + return true; + } + public function isAvailableByConstraints(Range $range): Availability { - $conflicts = $this->constraints->filter(function ($constraint) use ($range) { + $conflicts = $this->constraints->filter(function (Constraint $constraint) use ($range) { return $constraint->range->isConflict($range); }); @@ -87,15 +101,26 @@ public function isAvailableByConstraints(Range $range): Availability return Availability::BETTER_NOT; } - public function assign(Shift $shift): void + public function assign(Shift $shift, $spaces): void { $this->shifts->push($shift); - $this->points_max_data->used += $shift->points; - $this->shifts_max_data->used += 1; - if ($shift->is_weekend()) { - $this->weekends_max_data->used += 1; - } elseif ($shift->is_night()) { - $this->nights_max_data->used += 1; + $this->addSpaces($spaces); + $this->pointsMaxData->used += $shift->points; + $this->shiftsMaxData->used += 1; + if ($shift->isWeekend) { + $this->weekendsMaxData->used += $shift->points; + } elseif ($shift->isNight) { + $this->nightsMaxData->used += $shift->points; } } + + protected function addSpaces($spaces) + { + collect($spaces)->map(fn ($space) => $this->shifts->push(new Shift(0, 'space', $space->start, $space->end, 0, false, false))); + } + + public function printMaxStatuses() + { + echo 'points: '.$this->pointsMaxData->status().', shifts: '.$this->shiftsMaxData->status().', weekends: '.$this->weekendsMaxData->status().', nights: '.$this->nightsMaxData->status(); + } } \ No newline at end of file diff --git a/app/Services/Test.php b/app/Services/Test.php new file mode 100644 index 0000000..f4847bb --- /dev/null +++ b/app/Services/Test.php @@ -0,0 +1,41 @@ +get()->groupBy('soldier_id'); + $soldiersDetails = collect(); + $shifts->each(callback: function ($shifts, $soldier_id) use ($soldiersDetails) { + $user = User::where('userable_id', $soldier_id)->first(); + $soldiersDetails->push([ + 'first_name' => $user->first_name, + 'last_name' => $user->last_name, + 'nights' => $this->howMuchNights($shifts), + 'weekends' => $this->howMuchWeekends($shifts), + 'shifts' => $shifts->count(), + 'points' => $this->howMuchPoints($shifts), + ]); + }); + } + + protected function howMuchNights($shifts) + { + return $shifts->filter(fn ($shift) => $shift->task->is_night)->count(); + } + + protected function howMuchWeekends($shifts) + { + return $shifts->filter(fn ($shift) => $shift->is_weekend != null ? $shift->is_weekend : $shift->task->is_weekend)->count(); + } + + protected function howMuchPoints($shifts) + { + return collect($shifts)->sum(fn ($shift) => $shift->parallel_weight != null ? $shift->parallel_weight : $shift->task->parallel_weight); + } +} diff --git a/bootstrap/app.php b/bootstrap/app.php index 9ffca43..b8c8c45 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -1,6 +1,7 @@ withSchedule(function (Schedule $schedule) { - $schedule->call(fn () => app(ReccurenceEvents::class)->recurrenceTask())->monthlyOn(20); + $schedule->call(fn () => app(RecurringEvents::class)->recurringTask())->monthlyOn(20, '08:00'); + $schedule->call(fn () => app(Algorithm::class)->run())->monthlyOn(20, '10:00'); }) ->withMiddleware(function (Middleware $middleware) {}) - ->withExceptions(function (Exceptions $exceptions) {})->create(); + ->withExceptions(function (Exceptions $exceptions) {})->create(); \ No newline at end of file diff --git a/database/factories/ConstraintFactory.php b/database/factories/ConstraintFactory.php index 8024319..7bf9579 100644 --- a/database/factories/ConstraintFactory.php +++ b/database/factories/ConstraintFactory.php @@ -2,7 +2,6 @@ namespace Database\Factories; -use App\Models\User; use Illuminate\Database\Eloquent\Factories\Factory; class ConstraintFactory extends Factory @@ -10,10 +9,7 @@ class ConstraintFactory extends Factory public function definition(): array { return [ - 'soldier_id' => User::factory()->create()->userable_id, - 'constraint_type' => 'Not task', - 'start_date' => '2024-09-01 12:00:00', - 'end_date' => '2024-09-03 12:00:00', + ]; } -} +} \ No newline at end of file diff --git a/database/factories/ShiftFactory.php b/database/factories/ShiftFactory.php index e51cf8b..4ababef 100644 --- a/database/factories/ShiftFactory.php +++ b/database/factories/ShiftFactory.php @@ -14,9 +14,9 @@ public function definition(): array return [ 'soldier_id' => User::factory()->create()->userable_id, 'task_id' => Task::factory()->create()->id, - 'start_date' => now(), 'is_weekend' => fake()->boolean(), 'parallel_weight' => fake()->randomDigit(), + 'start_date' => now(), 'end_date' => Carbon::now()->addDay(), ]; } diff --git a/database/factories/SoldierFactory.php b/database/factories/SoldierFactory.php index c5c8d08..df42288 100644 --- a/database/factories/SoldierFactory.php +++ b/database/factories/SoldierFactory.php @@ -19,7 +19,7 @@ public function definition(): array 'max_nights' => fake()->numberBetween(0, 31), 'max_weekends' => fake()->numberBetween(0, 5), 'capacity' => fake()->numberBetween(0, 12) / 4.0, - 'capacity_hold' => fake()->numberBetween(0, 12) / 4.0, + 'capacity_hold' => 0, 'is_trainee' => fake()->boolean(), 'is_mabat' => fake()->boolean(), 'is_reservist' => fake()->boolean(), diff --git a/database/factories/TaskFactory.php b/database/factories/TaskFactory.php index eabe746..497ea2e 100644 --- a/database/factories/TaskFactory.php +++ b/database/factories/TaskFactory.php @@ -18,7 +18,7 @@ public function definition(): array 'is_alert' => fake()->boolean(), 'is_weekend' => fake()->boolean(), 'is_night' => fake()->boolean(), - 'department_name' => fake()->text(), + 'department_name' => fake()->name(), 'recurrence' => json_encode([]), ]; } diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php index d7ae3fe..db2eed9 100644 --- a/database/factories/UserFactory.php +++ b/database/factories/UserFactory.php @@ -11,8 +11,8 @@ class UserFactory extends Factory public function definition(): array { return [ - 'first_name' => fake()->name(), - 'last_name' => fake()->name(), + 'first_name' => fake()->firstName(), + 'last_name' => fake()->lastName(), 'password' => static::$password ?? Hash::make((string) fake()->randomNumber(7)), 'userable_type' => Soldier::class, 'userable_id' => Soldier::factory(), diff --git a/database/migrations/2024_05_30_100244_create_task_table.php b/database/migrations/2024_05_30_100244_create_task_table.php index 6e99459..deef6ae 100644 --- a/database/migrations/2024_05_30_100244_create_task_table.php +++ b/database/migrations/2024_05_30_100244_create_task_table.php @@ -22,11 +22,16 @@ public function up(): void $table->string('department_name')->nullable(); $table->json('recurrence'); $table->timestamps(); + $table->softDeletes(); }); } public function down(): void { - Schema::dropIfExists('tasks'); + Schema::table('tasks', function (Blueprint $table) { + $table->dropIfExists(); + $table->dropSoftDeletes(); + }); + } }; diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 7ce00ea..f097938 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -2,162 +2,797 @@ namespace Database\Seeders; +use App\Enums\ConstraintType; +use App\Enums\DaysInWeek; +use App\Enums\RecurringType; +use App\Models\Constraint; use App\Models\Soldier; +use App\Models\Task; use App\Models\User; +use App\Services\RecurringEvents; +use Carbon\Carbon; +use Carbon\CarbonPeriod; use Illuminate\Database\Seeder; -use Illuminate\Support\Facades\Hash; -use App\Models\Task; -use App\Enums\RecurrenceType; -use App\Models\Department; -use App\Services\ReccurenceEvents; + class DatabaseSeeder extends Seeder { public function run(): void { - $user = User::factory()->create([ - 'first_name' => "name", - 'last_name' => "family", - 'password' => Hash::make(1234567), - 'userable_id' => Soldier::factory()->create()->id, - 'userable_type' => "App\Models\Soldier", - ]); - $this->call([ PermissionSeeder::class, ]); + + // Soldiers + + $user = User::factory()->create([ + 'first_name' => 'name', + 'last_name' => 'family', + 'password' => '1234567', + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => [], + 'capacity' => 10, + 'max_weekends' => 10, + 'max_shifts' => 10, + 'max_nights' => 10, + 'is_reservist' => false, + ])->id, + ]); $user->assignRole('manager'); - Department::factory()->create([ - 'name' => 'a1', + for ($i = 0; $i < 15; $i++) { + $user = User::factory()->create([ + 'first_name' => 'mefaked', + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['pikud'], + 'capacity' => 5.5, + 'max_weekends' => 5.5, + 'max_shifts' => 10, + 'max_nights' => 5.5, + 'is_reservist' => false, + ])->id, + ]); + $this->createConstraints($user->id); + } + + for ($i = 0; $i < 40; $i++) { + $user = User::factory()->create([ + 'first_name' => 'chayal pashut', + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['hatasa', 'tazpit', 'shmira'], + 'capacity' => 6, + 'max_weekends' => 6, + 'max_shifts' => 7, + 'max_nights' => 6, + 'is_reservist' => false, + ])->id, + ]); + $this->createConstraints($user->id); + } + + for ($i = 0; $i < 30; $i++) { + $user = User::factory()->create([ + 'first_name' => 'chayal beinony', + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['hatasa', 'tazpit', 'shmira', 'tichnun', 'pianuach'], + 'capacity' => 5.5, + 'max_weekends' => 5.5, + 'max_shifts' => 6, + 'max_nights' => 5.5, + 'is_reservist' => false, + ])->id, + ]); + $this->createConstraints($user->id); + } + + for ($i = 0; $i < 25; $i++) { + $user = User::factory()->create([ + 'first_name' => 'chayal vatik', + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['hatasa', 'bakara', 'tichnun', 'pianuach'], + 'capacity' => 5, + 'max_weekends' => 5, + 'max_shifts' => 5, + 'max_nights' => 5, + 'is_reservist' => false, + ])->id, + ]); + $this->createConstraints($user->id); + } + + for ($i = 0; $i < 10; $i++) { + $user = User::factory()->create([ + 'first_name' => 'menahalan', + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['minhal', 'bdikat ziud'], + 'capacity' => 0, + 'max_weekends' => 0, + 'max_shifts' => 4, + 'max_nights' => 0, + 'is_reservist' => false, + ])->id, + ]); + $this->createConstraints($user->id); + } + + for ($i = 0; $i < 8; $i++) { + $user = User::factory()->create([ + 'first_name' => 'navat', + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['nivut'], + 'capacity' => 10, + 'max_weekends' => 10, + 'max_shifts' => 12, + 'max_nights' => 10, + 'is_reservist' => false, + ])->id, + ]); + $this->createConstraints($user->id); + } + + // Tasks + // tichnun + Task::factory()->create([ + 'name' => 'tichnun א-ה בוקר', + 'start_hour' => '10:00:00', + 'duration' => 4, + 'parallel_weight' => 0, + 'type' => 'tichnun', + 'is_weekend' => false, + 'is_night' => false, + 'color' => '#b54b4b', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), ]); Task::factory()->create([ - 'name' => 'תכנון', - 'type' => 'תכנון', - 'start_hour' => '08:30:00', - 'duration' => 5, + 'name' => 'tichnun א-ה לילה', + 'start_hour' => '02:00:00', + 'duration' => 4, + 'parallel_weight' => 1, + 'type' => 'tichnun', + 'is_weekend' => false, + 'is_night' => true, + 'color' => '#b54b4b', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'tichnun 1 סופ"ש', + 'start_hour' => '10:30:00', + 'duration' => 25, + 'parallel_weight' => 2.5, + 'type' => 'tichnun', + 'is_weekend' => true, + 'is_night' => false, + 'color' => '#b54b4b', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'tichnun 2 סופ"ש', + 'start_hour' => '11:10:00', + 'duration' => 25, + 'parallel_weight' => 2.5, + 'type' => 'tichnun', + 'is_weekend' => true, + 'is_night' => false, + 'color' => '#b54b4b', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + // bakara + Task::factory()->create([ + 'name' => 'bakara ארבע פעמים בשבוע בוקר', + 'start_hour' => '10:00:00', + 'duration' => 4, 'parallel_weight' => 0, - 'department_name' => 'a1', - 'recurrence' => collect(['type' => RecurrenceType::WEEKLY, 'days_in_week' => ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday']]), + 'type' => 'bakara', + 'is_weekend' => false, + 'is_night' => false, + 'color' => '#4bb5ac', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), ]); Task::factory()->create([ - 'name' => 'תכנון סוף שבוע', - 'type' => 'תכנון', - 'start_hour' => '08:30:00', - 'duration' => 5, + 'name' => 'bakara שלוש פעמים בשבוע לילה', + 'start_hour' => '03:20:00', + 'duration' => 4, 'parallel_weight' => 1, - 'department_name' => 'a1', - 'recurrence' => collect(['type' => RecurrenceType::WEEKLY, 'days_in_week' => ['Friday', 'Saturday']]), + 'type' => 'bakara', + 'is_weekend' => false, + 'is_night' => true, + 'color' => '#4bb5ac', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'bakara סופ"ש', + 'start_hour' => '10:05:00', + 'duration' => 26, + 'parallel_weight' => 2.5, + 'type' => 'bakara', + 'is_weekend' => true, + 'is_night' => false, + 'color' => '#4bb5ac', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + // pikud + Task::factory()->create([ + 'name' => 'pikud 1 א-ה בוקר', + 'start_hour' => '10:00:00', + 'duration' => 4, + 'parallel_weight' => 0, + 'type' => 'pikud', + 'is_weekend' => false, + 'is_night' => false, + 'color' => '#4bb569', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'pikud 2 א-ה בוקר', + 'start_hour' => '10:00:00', + 'duration' => 4, + 'parallel_weight' => 0, + 'type' => 'pikud', + 'is_weekend' => false, + 'is_night' => false, + 'color' => '#4bb569', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'pikud 1 סופש', + 'start_hour' => '10:00:00', + 'duration' => 25, + 'parallel_weight' => 2.5, + 'type' => 'pikud', + 'is_weekend' => true, + 'is_night' => false, + 'color' => '#4bb569', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), ]); Task::factory()->create([ - 'name' => 'הטסה', - 'type' => 'הטסה', + 'name' => 'pikud 2 סופש', + 'start_hour' => '10:00:00', + 'duration' => 25, + 'parallel_weight' => 2.5, + 'type' => 'pikud', + 'is_weekend' => true, + 'is_night' => false, + 'color' => '#4bb569', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'pikud לילה א-ה', + 'start_hour' => '03:00:00', + 'duration' => 4, + 'parallel_weight' => 1, + 'type' => 'pikud', + 'is_weekend' => false, + 'is_night' => true, + 'color' => '#4bb569', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + // minhal + Task::factory()->create([ + 'name' => 'minhal שלוש פעמים בשבוע בוקר', + 'start_hour' => '13:00:00', + 'duration' => 2, + 'parallel_weight' => 0, + 'type' => 'minhal', + 'is_weekend' => false, + 'is_night' => false, + 'color' => '#c5d649', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::TUESDAY, DaysInWeek::THURSDAY], + ]), + ]); + // hatasa + Task::factory()->create([ + 'name' => 'hatasa א-ה בוקר', 'start_hour' => '09:00:00', 'duration' => 6, 'parallel_weight' => 0, - 'department_name' => 'a1', - 'recurrence' => collect(['type' => RecurrenceType::WEEKLY, 'days_in_week' => ['Sunday', 'Wednesday']]), + 'type' => 'hatasa', + 'is_weekend' => false, + 'is_night' => false, + 'color' => '#d649b5', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'hatasa א-ה בשבוע לילה', + 'start_hour' => '02:00:00', + 'duration' => 6, + 'parallel_weight' => 1, + 'type' => 'hatasa', + 'is_weekend' => false, + 'is_night' => true, + 'color' => '#d649b5', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'hatasa 1 סופש', + 'start_hour' => '06:00:00', + 'duration' => 26, + 'parallel_weight' => 2.5, + 'type' => 'hatasa', + 'is_weekend' => true, + 'is_night' => false, + 'color' => '#d649b5', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'hatasa 2 סופש', + 'start_hour' => '06:00:00', + 'duration' => 26, + 'parallel_weight' => 2.5, + 'type' => 'hatasa', + 'is_weekend' => true, + 'is_night' => false, + 'color' => '#d649b5', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), ]); + // shmira Task::factory()->create([ - 'name' => 'הטסת לילה', - 'type' => 'הטסה', - 'start_hour' => '00:00:00', + 'name' => 'shmira א-ה בוקר', + 'start_hour' => '07:00:00', 'duration' => 12, - 'parallel_weight' => 0.5, - 'department_name' => 'a1', - 'recurrence' => collect(['type' => RecurrenceType::WEEKLY, 'days_in_week' => ['Monday', 'Thursday']]), + 'parallel_weight' => 0, + 'type' => 'shmira', + 'is_weekend' => false, + 'is_night' => false, + 'color' => '#ee8559', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), ]); Task::factory()->create([ - 'name' => 'בקרה', - 'type' => 'בקרה', - 'start_hour' => '10:00:00', - 'duration' => 6, + 'name' => 'shmira א-ה לילה', + 'start_hour' => '01:00:00', + 'duration' => 7, + 'parallel_weight' => 1, + 'type' => 'shmira', + 'is_weekend' => false, + 'is_night' => true, + 'color' => '#ee8559', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'shmira 1 סופש', + 'start_hour' => '06:00:00', + 'duration' => 26, + 'parallel_weight' => 2.5, + 'type' => 'shmira', + 'is_weekend' => true, + 'is_night' => false, + 'color' => '#ee8559', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'shmira סופש 2', + 'start_hour' => '06:00:00', + 'duration' => 26, + 'parallel_weight' => 2.5, + 'type' => 'shmira', + 'is_weekend' => true, + 'is_night' => false, + 'color' => '#ee8559', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + // pianuach + Task::factory()->create([ + 'name' => 'pianuach א-ה בוקר', + 'start_hour' => '07:00:00', + 'duration' => 7, 'parallel_weight' => 0, - 'department_name' => 'a1', - 'recurrence' => collect(['type' => RecurrenceType::CUSTOM, 'dates_in_month' => [10]]), + 'type' => 'pianuach', + 'is_weekend' => false, + 'is_night' => false, + 'color' => '#3574fb', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), ]); - User::factory()->create([ - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['תכנון', 'בקרה'], - 'capacity' => 0, - 'max_nights' => 0, - 'max_weekends' => 0, - 'max_shifts' => 1, - ])->id, + Task::factory()->create([ + 'name' => 'pianuach א-ה לילה', + 'start_hour' => '01:00:00', + 'duration' => 5, + 'parallel_weight' => 1, + 'type' => 'pianuach', + 'is_weekend' => false, + 'is_night' => true, + 'color' => '#3574fb', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), ]); - User::factory()->create([ - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['תכנון', 'הטסה'], - 'capacity' => 2, - 'max_nights' => 1, - 'max_weekends' => 2, - 'max_shifts' => 8, - ])->id, + Task::factory()->create([ + 'name' => 'pianuach 1 סופש', + 'start_hour' => '07:00:00', + 'duration' => 27, + 'parallel_weight' => 2.5, + 'type' => 'pianuach', + 'is_weekend' => true, + 'is_night' => false, + 'color' => '#3574fb', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), ]); - User::factory()->create([ - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['תכנון', 'הטסה'], - 'capacity' => 2, - 'max_nights' => 1, - 'max_weekends' => 2, - 'max_shifts' => 8, - ])->id, + Task::factory()->create([ + 'name' => 'pianuach 2 סופש', + 'start_hour' => '07:00:00', + 'duration' => 27, + 'parallel_weight' => 2.5, + 'type' => 'pianuach', + 'is_weekend' => true, + 'is_night' => false, + 'color' => '#3574fb', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), ]); - User::factory()->create([ - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['תכנון', 'הטסה'], - 'capacity' => 3, - 'max_nights' => 1, - 'max_weekends' => 2, - 'max_shifts' => 12, - ])->id, + // nivut + Task::factory()->create([ + 'name' => 'nivut א-ה בוקר', + 'start_hour' => '11:00:00', + 'duration' => 2, + 'parallel_weight' => 0, + 'type' => 'nivut', + 'is_weekend' => false, + 'is_night' => false, + 'color' => '#ed8d8d8b', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), ]); - User::factory()->create([ - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['תכנון', 'הטסה'], - 'capacity' => 3, - 'max_nights' => 2, - 'max_weekends' => 2, - 'max_shifts' => 8, - ])->id, + Task::factory()->create([ + 'name' => 'nivut א-ה לילה', + 'start_hour' => '01:00:00', + 'duration' => 2.5, + 'parallel_weight' => 1, + 'type' => 'nivut', + 'is_weekend' => false, + 'is_night' => true, + 'color' => '#ed8d8d8b', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), ]); - User::factory()->create([ - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['תכנון', 'הטסה'], - 'capacity' => 0, - 'max_nights' => 0, - 'max_weekends' => 0, - 'max_shifts' => 10, - ])->id, + Task::factory()->create([ + 'name' => 'nivut 1 סופש', + 'start_hour' => '11:00:00', + 'duration' => 28, + 'parallel_weight' => 2.5, + 'type' => 'nivut', + 'is_weekend' => true, + 'is_night' => false, + 'color' => '#ed8d8d8b', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), ]); - User::factory()->create([ - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['תכנון', 'הטסה'], - 'capacity' => 3, - 'max_nights' => 0, - 'max_weekends' => 3, - 'max_shifts' => 10, - ])->id, + Task::factory()->create([ + 'name' => 'nivut 2 סופש', + 'start_hour' => '11:00:00', + 'duration' => 28, + 'parallel_weight' => 2.5, + 'type' => 'nivut', + 'is_weekend' => true, + 'is_night' => false, + 'color' => '#ed8d8d8b', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), ]); - User::factory()->create([ - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['תכנון', 'הטסה'], - 'capacity' => 3, - 'max_nights' => 0, - 'max_weekends' => 3, - 'max_shifts' => 10, - ])->id, + // tazpit + Task::factory()->create([ + 'name' => 'tazpit א-ה בוקר 1', + 'start_hour' => '08:00:00', + 'duration' => 10, + 'parallel_weight' => 0, + 'type' => 'tazpit', + 'is_weekend' => false, + 'is_night' => false, + 'color' => '#77ff23', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), ]); - User::factory()->create([ - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['תכנון', 'הטסה'], - 'capacity' => 1, - 'max_nights' => 1, - 'max_weekends' => 1, - 'max_shifts' => 4, - ])->id, + Task::factory()->create([ + 'name' => 'tazpit א-ה בוקר 2', + 'start_hour' => '08:00:00', + 'duration' => 10, + 'parallel_weight' => 0, + 'type' => 'tazpit', + 'is_weekend' => false, + 'is_night' => false, + 'color' => '#77ff23', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'tazpit א-ה לילה', + 'start_hour' => '01:30:00', + 'duration' => 6, + 'parallel_weight' => 1, + 'type' => 'tazpit', + 'is_weekend' => false, + 'is_night' => true, + 'color' => '#77ff23', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'tazpit 1 סופש', + 'start_hour' => '11:45:00', + 'duration' => 25, + 'parallel_weight' => 2.5, + 'type' => 'tazpit', + 'is_weekend' => true, + 'is_night' => false, + 'color' => '#77ff23', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), ]); - $reccurenceEvents = new ReccurenceEvents; - $reccurenceEvents->recurrenceTask(); + Task::factory()->create([ + 'name' => 'tazpit 2 סופש', + 'start_hour' => '11:00:00', + 'duration' => 25, + 'parallel_weight' => 2.5, + 'type' => 'tazpit', + 'is_weekend' => true, + 'is_night' => false, + 'color' => '#77ff23', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + // bdikat ziud + Task::factory()->create([ + 'name' => 'bdikat ziud פעם בשבוע בוקר', + 'start_hour' => '11:15:00', + 'duration' => 3.5, + 'parallel_weight' => 0, + 'type' => 'bdikat ziud', + 'is_weekend' => false, + 'is_night' => false, + 'color' => '#a7b2c3', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY], + ]), + ]); + + $recurringEvents = new RecurringEvents; + $recurringEvents->recurringTask(); + } + + protected function createConstraints(int $userId) + { + for ($i = 0; $i < count(ConstraintType::cases()); $i++) { + $times = ConstraintType::getLimit()[ConstraintType::cases()[$i]->value] > 0 + ? random_int(0, ConstraintType::getLimit()[ConstraintType::cases()[$i]->value]) : + random_int(0, random_int(0, 5)); + for ($j = 0; $j < $times; $j++) { + $startDate = call_user_func([$this, ConstraintType::cases()[$i]->name]); + Constraint::factory()->create([ + 'soldier_id' => User::find($userId)->userable_id, + 'constraint_type' => ConstraintType::cases()[$i], + 'start_date' => $startDate, + 'end_date' => $startDate->copy()->addHours(random_int(1, 5)), + ]); + } + } + } + + protected function getDatesOfMonth($month = null) + { + $month ??= now()->addMonth(); + + return CarbonPeriod::between($month->startOfMonth(), $month->copy()->endOfMonth()); + } + + protected function getThursday() + { + $period = $this->getDatesOfMonth(); + + return collect($period) + ->filter( + fn ($date) => Carbon::parse($date)->isThursday() + )->all(); + } + + protected function getWeekends() + { + $period = $this->getDatesOfMonth(); + + return collect($period) + ->filter( + fn ($date) => Carbon::parse($date)->isFriday() || Carbon::parse($date)->isSaturday() + ) + ->all(); + } + + protected function getTime() + { + return Carbon::now()->subSeconds(rand(0, 30 * 24 * 60 * 60)); + } + + protected function getNightHour() + { + $time = $this->getTime(); + if ($time->hour < 20 && $time->hour >= 8) { + return $time->addHours(20 - $time->hour); + } + + return $time; + } + + protected function NOT_WEEKEND() + { + $time = $this->getTime(); + + return Carbon::parse(collect($this->getWeekends())->random()) + ->setTime( + $time->hour, + $time->minute, + $time->second + ); + } + + protected function LOW_PRIORITY_NOT_WEEKEND() + { + $time = $this->getTime(); + + return Carbon::parse(collect($this->getWeekends())->random()) + ->setTime( + $time->hour, + $time->minute, + $time->second + ); + } + + protected function NOT_TASK() + { + $time = $this->getTime(); + + return Carbon::parse(collect($this->getDatesOfMonth())->random()) + ->setTime( + $time->hour, + $time->minute, + $time->second + ); + } + + protected function LOW_PRIORITY_NOT_TASK() + { + $time = $this->getTime(); + + return Carbon::parse(collect($this->getDatesOfMonth())->random()) + ->setTime( + $time->hour, + $time->minute, + $time->second + ); + } + + protected function NOT_EVENING() + { + $date = collect($this->getDatesOfMonth())->random(); + $nightTime = $this->getNightHour(); + + return $date->copy()->setTime($nightTime->hour, $nightTime->minute, $nightTime->second); + } + + protected function NOT_THURSDAY_EVENING() + { + $date = collect($this->getThursday())->random(); + $nightTime = $this->getNightHour(); + + return $date->copy()->setTime($nightTime->hour, $nightTime->minute, $nightTime->second); + } + + protected function VACATION() + { + $time = $this->getTime(); + + return Carbon::parse(collect($this->getDatesOfMonth())->random()) + ->setTime( + $time->hour, + $time->minute, + $time->second + ); + } + + protected function MEDICAL() + { + $time = $this->getTime(); + + return Carbon::parse(collect($this->getDatesOfMonth())->random()) + ->setTime( + $time->hour, + $time->minute, + $time->second + ); + } + + protected function SCHOOL() + { + $time = $this->getTime(); + return Carbon::parse(collect($this->getDatesOfMonth())->random()) + ->setTime( + $time->hour, + $time->minute, + $time->second + ); } -} +} \ No newline at end of file diff --git a/lang/he.json b/lang/he.json index 8aa4f83..24d2bb3 100644 --- a/lang/he.json +++ b/lang/he.json @@ -4,13 +4,18 @@ "Add member": "הוסף חבר לצוות", "Add team": "הוסף צוות", "Additional settings":"הגדרות נוספות", - "Alert": "התראה", + "Alert": "כונן", "All": "כולם", + "And": "ו", + "Assign soldier": "הקצה חייל", "Between":"בין", + "Between from":"מ", + "Between to":"עד", "Cancel":"ביטול", "Capacity": "מקסימום נקודות", "Capacity hold": "הנקודות שבוצעו", - "Select qualifications":"בחר כשירויות", + "Select qualifications":"בחר הסמכות", + "Changing the shifts is your sole responsibility! (pay attention to conflicts between shifts).":"החלפת המשמרות באחריותך בלבד! (שים לב להתנגשויות בין משמרות).", "Color": "צבע", "Columns": "עמודות", "Commander": "מפקד", @@ -22,16 +27,19 @@ "Course": "קורס", "Create":"צור", "Daily": "יומי", + "Daily range": "טווח יומי", + "Date": "תאריך", "Dates": "תאריכים", "Dates in month": "תאריכים בחודש", "Days in week": "ימים בשבוע", + "Delete":"מחק", "Department": "מדור", "Departments": "מדורים", + "Department name": "שם מדור", "Details":"פרטים", "Duration": "משך", "Edit":"ערוך", "End date": "תאריך סיום", - "EndDate": "תאריך סיום", "Enlist date": "תאריך גיוס", "Equal":"שווה", "Exemption": "פטור", @@ -44,14 +52,21 @@ "Gender": "מין", "Greater than":"יותר מ", "Greater than equal":"יותר או שווה", - "Is alert": "התראה", + "Is alert": "כונן", + "Is between": "בין", + "Is equal": "שווה", + "Is greater than": "גדול מ", + "Is greater than or equal": "גדול מ או שווה ל", + "Is less than":"פחות מ", + "Is less than or equal":"פחות מ או שווה", "Is mabat": "מב''ת", "Is night": "לילה", + "Is not equal": "שונה", "Is permanent": "קבע", "Is trainee": "חניך", "Is weekend": "סופ''ש", "Last name": "שם משפחה", - "Less than":":פחות מ", + "Less than":"פחות מ", "Less than equal":"פחות או שווה", "Low priority not task":"עדיפות נמוכה למשימה", "Low priority not weekend":"עדיפות נמוכה לסופ''ש", @@ -59,6 +74,7 @@ "Max nights": "מקסימום לילות", "Max shifts": "מקסימום משמרות", "Max weekends": "מקסימום סופ'ש", + "Me": "אני", "Medical":"מחלה", "Members": "חברים", "Monday":"שני", @@ -68,32 +84,34 @@ "My profile": "הפרופיל שלי", "My Shift": "המשמרת שלי", "My Shifts": "המשמרות שלי", + "My Soldiers": "החיילים שלי", "My Soldiers Constraints": "החיילים שלי", "My Soldiers Shift": "החיילים שלי", "My Soldiers Shifts": "החיילים שלי", - "My Soldiers": "החיילים שלי", "Name": "שם", "New":"חדש", + "New assignment":"הקצאה חדשה", "New task": "משימה חדשה", "Next reserve dates": "ימי מילואים לחודש הבא", "No":"לא", - "No qualifications": "אין כשירויות", + "No qualifications": "אין הסמכות", "Not evening":"ערב", "Not equal":"לא שווה", "Not task":"משימה", "Not Thursday evening":"חמישי ערב", "Not weekend":"סופ''ש", - "OneTime": "חד פעמי", + "One time": "חד פעמי", "Parallel weight": "משקל", "Personal Information": "נתונים אישיים", "Personal number": "מספר אישי", - "Qualifications": "כשירויות", + "Qualifications": "הסמכות", "Recurrence": "חזרתיות", "Recurrence type": "סוג חזרתיות", "Reserve": "מילואים", "Reserves": "מילואימניקים", "Reserve dates": "ימי מילואים בחודש הנוכחי", "Reservist": "מילואימניק", + "Reset filters":"אפס סננים", "Save": "שמור", "Save department": "שמור מדור", "Save team": "שמור צוות", @@ -103,18 +121,22 @@ "Select from dates": "בחר מתאריך", "Send": "שלח", "Shift": "משמרת", + "Shift change":"החלפת משמרות", "Shifts": "משמרות", "Soldier": "חייל", + "Soldier assignment": "הקצאת חייל", "Soldier details": "נתוני חייל", "Soldiers": "חיילים", + "Soldier type": "סוג חייל", "Start at": "שעת התחלה", - "Start date": "תאריך התחלה", + "Start date": "תאריך הַתחָלָה", "Start hour": "שעת התחלה", "StartDate": "תאריך התחלה", "Sunday":"ראשון", "Saturday":"שבת", "Task": "משימה", "Tasks": "משימות", + "Task type": "סוג משימה", "Team": "צוות", "Teams": "צוותים", "The commander you selected is already registered as a commander. His selection will leave his soldiers without a commander. Are you sure?": "המפקד שבחרת כבר רשום כמפקד. בחירתו תשאיר את חייליו ללא מפקד. אתה בטוח?", diff --git a/public/css/saade/filament-fullcalendar/override-filament-fullcalendar.css b/public/css/saade/filament-fullcalendar/override-filament-fullcalendar.css new file mode 100644 index 0000000..614d060 --- /dev/null +++ b/public/css/saade/filament-fullcalendar/override-filament-fullcalendar.css @@ -0,0 +1,20 @@ +@media (max-width:425px){ + .fi-section{ + overflow-x: auto; + } + .fi-section-content-ctn{ + width: 650px; + } + .filament-fullcalendar .fc-toolbar-title{ + font-size:1.875rem!important; + line-height:2.25rem!important + } + .filament-fullcalendar.fc .fc-button{ + min-height:2.25rem; + border-radius:.5rem; + padding:.25rem 6px; + font-size:.875rem; + line-height:1.25rem; + font-weight:500; + } +} diff --git a/public/images/logo.png b/public/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d4218bfaf5b873ac28707890a017cc31dadcf754 GIT binary patch literal 76636 zcma&NbyQT}A2tdi9TG}N#{j|*lG5D`0z=mT(k0@MlF~7B2uLYi(k0C>Aky7K_t1U$ z-Szr?@1J+CHF4Hi`|N$r{yfkA#B(Av)fMn@UgMykpx`Sh%4(yaJR5rYKZk|!^j*{W zvhL{z)k9lB8l~b7)y~twb6Y7jDHN3IINUo6^rvHNS49I46cmE)|9w#VU4DX5P#z1F zWToDJHr>DX3ZPVhZsB60ct1N^3P&E!h&$PM5B;${q`mY!fO}WWwzY_e6t(<_OO0)% zf8$MjM)R9wc>t%TM@BnIw(?F1#`Y3NH#t2ap(8pndg%R2Vxs?AHCGKxfZ@MpNh{k$ z_1{T1EC!3%@PF;y^8{`M*?)~HNHLA^zkUQ#Ohf;5Bl=25y!o$Jc(@E9w#UC-vOVfz0HrB1Zud_2_>CzViwXxek#m zPEiKTF3hFG409MP|NYhU#>fc3_;+$r$nIxlqOZ)iiRnpY&eUYZ%zroWhnB(O0Ywu` zAL<9}uU7-YjFgk6ryIadelmLe9F_KlrsD_A2{wO9D=U*@Q-VHv{ZjOCNF?6!F0RlX z%Zm8*@2=KF>4`TlQF_R6Pd2Ag9G#tE7*p%`i?T51vC>9-h;L=HBW zvATtEN2PrJuF2(R;^gj`YowEU_NzfLk*2hwLiv#N-$QkyA;dmK%>}Vi)Y7EFZTL-1 zx(!=7Rp1UazoZS5dkgsudb}NTrjuS)vTNzpl*zu{438-!>JHG!KYmt2`}y&UT3B;%}7Q{7}&@ruwI z*h{$9Tc~RQnkZm`xIuJbwb0EFR*$8=zM_YAM_J0PNJnPIbjQB>b~D}NMCo=Z;rYxB z`+(Gi<~er3ijOK@wxxVKC;yfx{4`i2gFDfaX9UqYS*KP@Oi5&Fm;hnyV-Fpa%WG#pzj5C?*& zH#0ukjk-FuDC58*H#Pi%hCW~)C@hl>7AkLNXP5LRh1t$wvH;vvSgeIq&U5?zh0yBl zpG_X67{Bv}}$PO{>gti6(AoIY# zle$8T1H;PE^F}yhQ$grWxv~_rV7;}{7l*H|F&IaE`+A?5A^y82JPuba%`N9Q7X%RD z9QXn`v>()D9IZiW?O4J(?tv@d7Kbj+mQFZU-d;Zk>}k|pF&&-Ni?6sK-8pnjiJh{s zbF$|XjBd^V2W1zrsTgE#lif%EqYiOu<9A)r^XT-8dU{jVrV-pBp9g`kP8LW}BUA6S zb-FDwJG*<0{_p(F&1)mzb9Q$Hqgp4U49aAxt->~bE~jC1JBQwyg%2cW|1l%O?@)%J zMs3LuCBltrm=Hx~S~8JZquCG_XS#;Fl9DH9W}S6WgmK`jrqVV8?-oP;x><4mfkr)U zp*WcL6=$t=km-M%8?tUpVxzajNJX`}2(o@UpExd8%dDY33~z)Yc4i^z-^^-2u#kY# z@?vO_Z@$_e2Nx&kpL*t8sVK?ciJ=!#X$R&Q*+6Joh(=x3H^O@9YdtSu}|&<&$&=Z6M$ zv;3n>28K1(clsd|kBD+&+-S$ag*&L)9A!=hZ;hz1IJ*^z2PuuSou}9pV0tyxnCn~l z@Mh}5;wbQ5jCyRE8VHLA17Q|jG`L|QRWASFKt!a_+eAMkTMaU%AM1sxs*b>quYN^G ztHG}jSks5*9J->ZeN9`P81V^JiiRdLVKltE{1{EdA zs-8>G_tWTW|JP5c#$-`XQz_&wJ{k@o-k4rTo=v8S`iNQ3ujx%q4I3_uWi@EJ>U%FU z4>p=kOiqHLH!hKC6-h}{E^Jz+NrQ8aihFWuHxz4GFy*2my4f&w7{Uk8U0+WJjZv}u z&*f>2Aps1P?opBw#~!I>3H^3aMn(~AHDCH?J?FH@&r&Ws{JDfaSRsuH2vwRjbTLAHLHZTfPKow z2@GPeya2tKv&VhWFDo97oP2QJInc{nfC^6Ic6CuxC_~vPPnBc&tLs9nA)JJWNhQE= zqPFQbf_{Ny?)4GlNxE6zO0bA{qVe((VE#TCkx>z`?dF>`!ua#2d$FTRn2S>~pA&ql z-dSay)Dvvf(QPYID%(^f%yNG2Szoj2lWhBs9eRx3ed@vsWHhFFfPs=|#i>(%aP>Pu z95x_hb4jVCXy4q`B9L{RoK0iXfNxI2Hd+-WIC`TpT1x_5Mix;T$Y$tDa)e|gzpfsM z3QxaVH#bjP?mXbsI?S9G#-*d{QbFGIX9O_)c$x9g2OLhH+eFB-MBzOCLR1s#pckC^ zEBc%E4segk2{hD$t^8D`1V5GrztC81fj;CqPFXW62y9R~=7CEIWRXcOoGe1p$AA&S ze+WHsree1U8&VtLoLgh;5T#A-A6X`MGX)tZ&o#f^adt^?Kr?aQGt9v|_sS5F_iW+g?LpH759cj)ZQ4g%dnJJ&r^B2#d@*0dc1VvoLr1Ph$*@& z&f92Rcz|AwVxQjh+0YH$Q2y!U2!4y{zZ@zZ%&|MRIBKb-P_^6e5-DF~)w=r+g!!vz z*tL&L@tmBf*O}ShQdzkAlYwyqjDVqa9XSu$5B5J(OM@5P_v|Yd8po{I&+7R2XONS! z{qG3lje%v>fS`HhlxjNmx6H}(eVaCKOO=#(dmwEez|F07Y!t@)Rnpxw9?FDnbw8c- zq!)^cWopiwoj#;GT4>gk3j(cQ`#ej3kfa1|NZMhPR#DFg#m2eWwSYO_08iR#nw?Xw zHqP-4)Gj#6od@Rn!l34W0p$Yh-iC;l&?d9zmInxmR6H!f{_1_1ifV1!vj^bjn5G#E z$8gLhnZFwRaZ@u6&tlZYWvXU6P=;yv-x416C=hO%)ZmR~W|+j=R`zZD=&#(E-Fus! zVZbdtwK!|9w;?i(8C@l{lz}{lLZ-odSX`?sShx*MF9%MLX-Q-X1vPwZ8?OL=*p;Df zO*6&|ZVdy39tKM8%=#=r^Kwq6Iy!WN=iii}EuQnQ2HZ`eXj~>os59nd?avmd5_p#4 z6l+=qLp)P^Ftp)sfxSiD7gj_d>lx=OP0rmPES@k!HV^{l%|Tpx(E>ARzs;zdf6*9UJ4q*Q)Kz z)4{~}D7Es)EV1&?B+*EwjkKAo`9Er*ihXfmv1xlXqOLxYdD|NoX9ka&CgJJ$#SrS- zX1sRy~MkDE>c&L66 z--Qq7WrDm;-Ym_`ELD?oeaI%`ALgpCH%!PYLRSNxs+HMcyo$H+_~y#~>(Ip!T|Wvx z*6FC(L^7$Nnv|tr!C0p(1@w*E@u1R~uB9a;l>=<}c;k_(0)=l3l`Ky$(&sEUF$7#8 zi+oRK@lOFRF0lE_f5uI8yB_?+05@T(tOm@E3nR)YIoqEMuo+0fWvQ1g_!%8MDZ_nX zGG&8}nygBn%)sGpkn5NvGWlfS3rd4}Eb_fm=&Z4p@J}X+i?mXHvPj2o(A67tz@Q0C zn#qE_(Ufo3&6tx8CIpzc!$`$tgndQ3!~nKkz2;&$Bvt`MS5sB4d$iiM_aACYEzu9) zs+87LwX&%+#}!gI)U@bH*3+-NYO6Q+$)Eh|s)?-MqS-r=$W)AY+a>hpV6tTFK@J1` zfO^V73wYUK9Q*WBF?hP~oMHJdtKiq>WbS3C#KT24bkl)nX4uB5&M3cQIdy`SCkD zW2uFDH$mz&4wuQ_k1a4RQV+}DU37ienaaQ-xt_8K=7&5aCy|+E;D)gp2y|HAXY1ZZ zpRZ;bmm|nhaig3A=jGyvH^kNMo0n+^+?}Ef5}mqenINfp4>(}TQkQV`gsT@0U7=4g zRPV;Cbp1SIV~}2+Y7jRUO9g4^g$OQM>J_;aK)@@;sjMfENk(rtXGR4?i>boZyGClE za;Fko&6AUydA~(#T`$q)cAqJ1VVg>Q|Mt44Em+ja#nDJ?v3=A9eBE)k+J3kBfKRdS zl$w!|A9@k>f3~fwiDT1{bp2bxNh;chpiLU!63VWSHs3gKGL>y6hAgt}iL=q% zHd|hY^GtyOgR}SdZZe!QdTzSrfUfIa>-0CAu%U%KK*~wBnYMPcNGP*M|KB?vh>M-4 zuHMX7bM|UxoW9r%@^Mb?@rr|x4&UDI#|n?DhD2D^)XK4k{!<(wLi=-GVFi&_dv(3P ztuXz8o=XI0#G)*urw8X8#l@w`-viaJ7gHM$IZ51)!!FM7;qRs%nQ!xG{^9$CG*&fD z2wOk&DYOs`5aS#%RhtRvFy>@L^P_e@+I-dIS3a$WynU6H)lgRf7HTw0+A>pYx{@8| zEe5vMEBV(XfRZde%O{-+dzK4Ca7DGqoxXzc;WLwN91;?%EAf0^KSQ|Y_dBdE%DWOwQEa0a&Lu8Jo5qDkb&~ z1r4Qg?ae-F4-c1@8%G^YjF&Di<|4m<8vcX$QeOfV?~j%CFX!iz14*Kg6ZyX6cUGte z2hRNZ(R;y*W3y8Qwny|P5ji~ctID9HD6RsYM^)wc%|flrZ5G+KmAB!ar1)^l`q2R} zLWFMz__QrW8qXRq2sDe~zow>3c{|EpMKzKEpa?(!0Pq6B;k=*A!|5(O2^@OXc22{0 z2`A(A+|EiT`*#~1Lb#aHRPU;fWKt5Hq{Tf`JHCUu@~L=D!_1^Ifjr-{s$r zH%YQuy>&hL(%@eiv9(GrJ}J9puG<@X!JL_NtpI>O9?$zAHx}uQhM45x{~WR_{#e;G z`q)N#)e#QRc4I0d$!0e^h`gclGM!T1gPu#bNsOdlnNr&{GX>cdo@7g_0y#_|-rUkQ zph_l|h4|hSPp+`0rla!kB00(PA+y@uU+v)RL~v748dOUe%GfJ7b-7N5rHzhd*dcT~r& zfv)Zv|4AXLEUtjsLl2GCKG!)PkS~Xx*34!h&ZPJCWisd|(#s|$5J2Wn8a`3REn|!g zl@~B`v#-Ad1m$u6rM`Q_-w|8%#ic4)$wtt%z9!lHTsNZZ*0y*6b z9~MhN4xup)HCkb@U%dVPqRP=zCX*P!Zlm_6Zb>uGmm?m`d^#yGA0h!GPC1hV zKroed-d>LkxYrcE@BZXPdnHDH~c zC@*50_Fu;i^`HBj%Um4ObV;EpE{=Q-)@r)azv`!l(DP-}8q>`R_)Zhw&v4>JIRbaF z3nhd0(gvnE(l@05a6zUYA+rnIX@B*nOTcsYiObBc>d**7sSko>uv1)i9wD8i>Nf*5 zMJE*LY3Zq!L@LN;$L(vtse;X$_>e}VSt5~s!|T%*&*1G&-D0qgZzJ*nFC*FGSI*oB zuEggNXg|vd{`5vMnKh?5k z9-(27dyeZ&SJCo@egOM>-3THKudvF2UtMow+yO&BHiU{LV9}E?5qrv_<%cPr!(0FU zc(ZV48NV0=<*w&%E%umm&*t*lD(9HcQuY4G6wu&0&s>O@UO0N&@gqk z2~QH9#|RsslhDEgzCv+!+cvunVdP|KwWFp*%kH zLkKR<&;B4wP9w#4xMYI2iuFGNu%4cvhqb4C$5M)Nk)b=#Xi=1Wz*?G$gA3zk@?G-HHE}e4jEuW;675}t%T~n+-n3JwjM{%Ys9jD(5t2K)8 z@lCK9RMeu&;>4VfP0Y}RwnDe0zr9S7J*7Y{XzEh}2W~_ZUDcJi5YtK!x<}=H4h^Mt z(S-bC3Do|?Mc%Ne`6Z5bsxQmiFHjGGn0{Uf=E%a}>U&qsrqAu;);lokK*84vCcSPQ zdj*vn$EO6+H^#rWH0%IMT(n#rd<1MFT(xb>KC?dFWOv!wcY-Y)YG#ky(=ju&-`g*y zPMslP!sdI;k@=~$tuk6nH9sCN5=&WKXbDoQ8?1*7PY#I*ZBa{4t8lrnc>;v?t`$SB z&9^lK$vAN2?JmA2v9u>2ya5d1a>>!bag0iYmw(7!+t9%{l+z;owaDXvhh(=`tf#U- zkzx0FAS;hJHG?tXfu%3oJ_(w)w>k{j6?qMif$k*ICp)j!;j9N}LsA+8U1ld`Q8n@E z4RaD!!43r?StJjH{M}(V-Z{A_!~Km#gJoTvhGnuKY*$orKHpPe><;wS8Nz?m>%lA9 zmoB*221agfnv-Fh%K zZ?d)*0p~ZqmJ<2F#|8c+B_&P)IsH*Hm=i>vDnf~@wy|1YCVm_^SkjWc^I`n3p-N%a zE>P80X#E{Yicq&!ztz0qV*2wuww*VDe{k(5l8OjiZp>*nivf{29Qs^5Gy2AM*7^LJ z(Cc?Tq3f4s{L$8=I16*NY?5w((YluH^$=}%+*5+5b{O!6D^?M*%koCezjVhZsxsOq z>`mxR{YuWlCw+J7OQ!q+p|3eL&=2&o#+y!;xY;4SS|F3SnSm=nhd(bzr96wHhycG! z0#{1Plp`t>e=n^o(&tqvtFF4Y8E#?9d%|Stwwd-|6MsU(n)~t(KZ5omNUY7KGWJ|e z;*>={Y&6laso8AIebMWFQPh*^=Tpsj;yHJNx@d(%+9i-J25T z-m%6tH3_lDB`3cU!5E19(JcwltY5N_smjRAENp8tF*G!El$6@~_}-NROLU~$gM*WE zaBePx`qG=B`pC1IENgGs?I*4EzM-rLs1?7b%D1dDY;Rh9X9#1Jj>x@kvJ zdg4=EaN5ejq14Ym6^MdcZs%T?XQwnj6Pe)E*7_jMgem-FVwgw)vO=vRB8;3=tw$=B zpNzZ7H%~JV5VNs%WO_UC_8dFSO!}G>2Qt5AgZaG?mtH>0W)BF^_@z;yNMMZC_kT@(kS0~!x+P>QsrF0o_A^HO8 z}6)uN6E1XxrQWay$^$`fOo!4iY1qW;J;0)JiNE7YHLigEjI=hM z)hO#c36;EiZi&R^zH#(j?M`gZ#}@D)&Qne#x5_D$RTaf~?>mit|RP}5oOTWm>zB=#;$5(I zW@gf&qoW6|t{M|`Mrf^9?YQp9Wus5q9JjM5WR08LTYAn%tI*E?-VC+LtMMozbR*lo+zPQmlNpS; zQJS`U{gBQh!_3MH9K_?sz{D&cy1BiLaXh#`@Lw_A+oPPT-~3gsHaIbnL}VMzcW=L) zO1{5sF27eKRXIO5XX%b6^mRt7g9sBXsFAyaZhU;4hhL0Qj+#zuq&1z7rz}*3HZ(K_ z)ly&o$L>!~2h212)KDgdQcw!ndzax4LaKHUkU?3wijq=x+m3EJe%O!P92{92ZK1v0 zeN74%-TMhwrlyDYQWT6XXZQp2h@PZft4Vgs?R9fU-mWa|A3qE-`m%m57f^n=8pF8b z2qLk84mW92{G59E>=m~edn*J?2fN;edASAF_IxF>$+K9g6+N$Ylu7A-1a4e!$>;G3 zIiYaqC$k1H&sK~8=0CB>{{FE2m)^$o=<1U~1OrPSFZ_K+`g^FTuu~~EK}ULupiV8R z2*h7Xp#tVU3Hnk@o%uHmmZPO2opqVwwoQ4~==|$eV6|31CF9sL%r!}w{`QK#B{Ws> z)fN7_%tCH*go9iZbUEcoHSr5k*j8>Zmw8IsLJoJgVtnYMY0B#}W^**6WjQw{=|I{O ziTK*t1yAKFr^*)hvwx0T%C!8QJ4^GBgXD1tqF%#FhSd1#yWWR?yL4FOHXY z{F7fBL^`e3hE+0Plk#+Ibe0oMd9c!$VnRx8>4S7Bk>LeKqpI zU}i+em!oq z$QcLIAJ1og*~bK3`(}k~Rz5O=rHR_v5Z1zKi8mH{HKLawwoEwGdUlr?0RNVwQnAMl zfM0eoFx7Do>ut}s5k!4A=delNjo5)O4sgjcI{`ZN^K~{Wha!C&P5*M^Cx?(bP#9W) zC6wr9f5u;@MD|3gsy{Q>B)9Y8?}%3WS*lVtAV9CdP6##rt?gJria(b3yh#n4*DXqf zeyDl5gh|-!ukzGrQsPBb=)jS<+4Cs4Be|6S@k-#`jz$3VsQva&St_f(d|E*;%1Mo| zj?kCS<7sqZk7pW>OpkXXkB&_Hd4x7dlxyFUwa|o8TK}ugfyshT!XQ@ENK5@9uZ{l8 zH@Jh(iF?imL=MT~%edOFq}%V1Doq|+u|(r9-jKcIlZ~>y-7|Y+>$pQk5pid~==~~v zs{Uv0FU_&4dfGM3GpwEUruK&$hbEuPiiEH52`z1bq*=2EB$XlW<78>L+9 z#@h!mRi0Ur@2nCKkOTAWd5{!biR`45z+->9YtZd5k%6IJd!hAEZZztQX*SUWveNUk z`1eQE8Ld}V*(i-xxo8gd5f6p;ZS`mvo9G*ct!{V)LWH)&JW@y@BYX4%jeS1(mT6joyhkVgLC9aIx89@Dp z9}*aA+wpvr*-bnoTK`)kjd@$A*m^79&+aeC?v7Vc9AFBS+x7mqn7`(efSe>$>y77w zr#TOJLitoP?rJab5m!^?M)FDYAds_oUnJb`c=V&0%>wRcd5m{S9TM=REmhk5_IEjV z$5|6ZIPuNFvibX5Xal@c))?Xw>|hEZg{3x8R^Cc|iM|wJCN1@y=AOmy8!#>Heg2@= z&%+ffI3=#>GAFQVW};;HdS>c24>Q7+_CmMAe!jH0V$>U^QcKYK8RH|UXZ|-^N6~?^ zw|5^9-rb!q{P!CV(sCnxf-8|@C;3A_qt)5v`EEUYH$i+~`wVxkgP{SGq@Wvs9~aG5 zoT-^^R>d=uP6BQYYWMO{INYJ!t8>iIeWA%*$6qI3!r+g8BgYV`RiUFZZrGP-xako= z%bVgu?V8GJn=Hm*Weip&5F}|UiztU#+dnpvTrMcx;Q22c=6I*5EjIWE$|2sftUfd} zHZq;!o?0CC-{m#M(;FcuzhT8wFvnzj&O|A8O-wr<4XWWe!L?^WIjVj){JYfBtDZdpW zak{zL>UvevO~bR~uH-;}Z3naCSkX?pr~V&{kxqz=~4o)Qup&BzNDQ zIaw|My7f1@TTAYJ{CzfQUCoIGjzC>4fWAAszUnEs_O!~yVIM46U=jX({*3!xYXfa7 z$bfY3@BPjF?cmi9ltBjvhw-u@k6xklOpaX?C#Cu%x_n;p?dIhQRli}|)O%=-)N{718 zg_7q_I+Ku??jN(sl0CPm=zAd)(t#SJvI#Y^5b2C>@Ap$%6My`nCw#III9X?x>QePZ zAqN~pzc?J|o4_(??$Z9vwYsC!^%KjLR7%IqF1wH4i_sw0^w49*!Qfk0jqHfM+^Pi} z`vR4Yt#>1mbGJiwL5gd>a||6Dydz(&v9&d_#mvZvlCY=1OD`qUimhHsKnn53f;&H^ zH;U?{I=;aTP(d*$;yjUhjBj|JHNua|yI;LuExniG9JsigEhR#`(0}HeUEVHro;9VG zzbjJe!>c``!SHf#&!MEjrmnrNV~kHkkezbwy9`!%oy(0>;7^KkbLJag{)BKHwdJaB;Oxlp1ig(f5S#hlov(ST4QRRTXI=X3IkG!&S__07#+ zd1D*KPl5jCD=jrOz}_YZU|7yTk0(Nx0)m9OmrXf@^)jJ1XeRelHKUlIr7uyl(t6=s zew5C1VdMH%NE=J}NNlam^Jj_Iba2(*Rz0$vM+e;dI=dh``1fZ5o`^14aetYQQRZrY zR5bKU@ypuUlM1X(sHD8{uQa6JX2+Hds zDxnb*ZSluDkEissC3iYT&?l;uY*DhyAB^ChqkMlX@{w+@uVS?<217iKrEIHY#MaiIGRZ?O;?JEA0=dVr zPcl5@MCib*qHyQMkmjLK>l-I&^)_hxUuKE3hgAF|${Tx2OXa0jid0y!Qf&y4Pa02N zEIpL)84yM-9B%u&dp%Zl)uyz3k}kAr@6Te#%lW7P@81Ds_McmlHNYrEgQZV04qvi7Gj^f zv1E5<%N#kK$M`>aT!P3ij-P3tU)*{(K$W^s}YCY{dwSW0^y;hEkHCLH(@&!e2Wcl%}8Euccf zPwHa(<1kK|Z^x}Dm82IjfECnBN%@gmrtPPAEY{S<>}=jng`n_CPI@|S!rNcRWwGZ} zru^dxTe?LQt;CQJjs*G->#3-S=`K=I83V~Qh|vI@7W&{I19eo!snksFaw~O+yUgQi ziWV!Mk_m@Pp%7P>)HQlnE3j5M4bmNGM0k&S+88f5I1Z=C8=^e_8OIni4?2gx|IW%oNW*f9L?NAo3YPONVJK`ulN2Ar5nz53!U@mo5#n>N2 z1ff1P6Qi76K`VsgFUTUZV@Ye7ms{top3eed4PT>~tSs8cmI3!-PMg`C1riIu z)|y7lM}}B3Od^{kHvD~)kO<*TW8(9VOW3^Ey$zm~))ZbZU!vqzCwl1+zo84JVjMBX z1V}w=ZPrM%u9wx7bo=)FGXaY!sE6Kkf{_{#3!U;%ynVwllIfL=_}as-wRv>_WeMnZ z)spn1gHODvAP1#Ge4f#t^Dsgl#&fCYh8%_Z{ZflnXz$D+%SR1IXqAbcyZ9j3}3-=;G{5L5PiOs3_X>4XnQ?G9&*vU@f!kPTp?^(S_3SI=Jnssl!oMEYG=y% zqK3caOyPVTtD+5jKbAjaF)b;jvA@#YFCEv;_IcgaU#_ZDR5JC1OwUL8nng3^3W#Fm zOCY>8#d2)vNxdxU|CVi8!uL(U{dLpb-G`a3KD9RyeK{18@e$metUXCSV`&#?ps<8oOkW5qh7b>`^MWoS6v$Anc(vlM`-h_c{XoSq#(zlCQJZ}Wz zA=NQ5kIfZF{S(wgLwC|vhng$}L;@{Ge_Bt0T{3ou+0vc4a)en+gRwkVbq0CyRO2Pe z+6WO#OU|d?j&=^;rsmd92^g^!sd?i1ZJn@Gl=m2uTs}$tw%>{rIiciB@(RnHQ8{R_=$b9@qM1GW;k@XhlREY`_eKkjJkJ279jkaS;ZR(hTIjk72G;9k>ps7qgV!N2%QD^jSTvA{ue z^l#V*~rN6 zPL><3{t5mX)%F1{>pC-WRu57(Xta}A_m9~$gcPnqGgttRC zNW+_)>Bp3CMn)YuRRpSMHkCr!X;bm1-y%XWUV$+x`nuq1O@4+eju9` z8-*!#oUg<-KF3bfN|n({)(=hZQ~J-z=2+)~JcXwHjd<$Hy_v;XUKu>;iKktdH*5g| z%MWM9{#P4?qLA;(HYGn9-PfYSvAuR zNg7Bd(LXrbiI32ATshVp<5iH4z;;BxB!gr`LZJ~d#mda?IXdUoVtbxOzGP>if?|$FVv3B?+I&wWl?Z6Ow zduB-D@8_O_vbXI8;*^x9^oQ;N9re>RwVP6TT$o+N!+50R@1mnys|&02J&!}Fv<|?Qn#JhudBQa9g-INV9#O}~rT0W7JdLiu6g_lmo18;VyIlVA#@l|3 z-ePGDG^ZoH!5?AoSN&?g9A201zCzv+s_^`ozk9*8D=sf?vLmOGwYBk}N`7+(odGH9 zP9wXniJ2lshczsnC)><0Rll1AxxPM)JQx|-@BzR_zV=&te;U0@-;oSA)N(+u5{3nv zhvwl#?9C~@ztzL*0u>nH#E_mm$?t9j(X<|Rm-s!}8a?au!!Vi)S`s6*tSj;3FsR%v zBnP;jnEG1NzRVQMzy<;a{?BO>Mn^(sYM~NIU)W_|;#7Y62CRKXb-np&+QMnOv9tE- z{-+8u5uOfL=NXN2&&6wX{-67o z=^;82|4f?EQkQuQo8&>=KHZ$lM>cRHJ8IY{DoPw z-($FE92eSv8@NBW8_(vEEr{qOS@y{41UeB_qD2PTt}cDg5ljE%_4B>W@D`Pz=hWn!Y(^np%MX)6UXvTRb`(Tz-6Lzgu)U8WhY~?13i^)d@+<%!@I0}tLCCfMn7F0D}Sca%SWW>CZ!RQ37nxnipm3bv0Imy}4|Q*f}hXq4>}z)s*5( zFa@z>yQm9-*Mz`SKs{~8_@@j5EB96B@~awO?ShGc@F|i+|3)rSdYfOFu?RD5t}1I} zO&-|W6cfXv7qXXi&(ZY*Lr-2to*ou*nx{G?7{O09z_THr{`U75DoMT8XnMAg(`KOL zCkjz+b0F!KV<7fY2^|@;NMud6OagZ&ZUYMVcCL;-6Gf?sdltS)UpOaN%0P^aPy55G zjFr%^!uiterREZ<&&^9U<{Y2j-`6!(P5nF0Y%>YrxuT;nzeuonf{PEcImi8`D@>B- zVcI(l&P%^$Hn!!<#tD~mMS>}F%rIAQWCPv`4TBemD5hisq|NXm#IdQC_I85}@odyf zVJbz{DmC#NVFHs~p29Vx2B2A}KBEqDor?=05#Vc&3*~Nd@kfP|keDAwjE{b`8S5Ut zn?to~(811+gnmP7VjePjdZ8~g?Dpn?A28sBpnW_}zgraaLNw$o^F0%L5;9ki0o93# z+~#rv$IK&oaSi(LgTwaRQo6&vri0pPuUFEH%x7$63Fvz}UghnR+=(*_9QAiakPYIk zIg7h1=Pok5oI6@ANIzx8t&r=7ed$u-#de@!+Gq{*l_Dj7t~K2Xpyy-*6E`wwOvj`K zr{ZE$m)88eww6TE za`$S~Ku zz_hL*mN!A=$S9HS*bJeu4rqgr;^^RD)ZLDUB4ql6avdc+`yp0;Pn8O6-j&;v>KFS? zSe5yl)>_5Sz)bpOjR(#RN{;bRfvhn>r71NuQ?QZ}((ZPjLCrXa8MW}aT~qfgk2G7I zq`&Ni((v2gI2yD;j?{unqj@q`1Mer5>c7jlbLjKoD;HI$(K0he!S|5fAC>+6i5Iy2 zz01Im&(e{&C7|~!PYm0yZ$*u$=uHiibJrx#ijzx!Win&SHyFgIe=D*PC8CdbVYZyo z@wn)Bz5WEjqxMD%PI7(BmV(+kSU3+tm|=}CaA6EY@7pG3;SVt)bhj{)=yofLAv9j$if=E`kTnBhy92AJj)Ai@Dy;sL=Z@ks~IY~+HaNkH^o!a3AeP&*(;&Gtf zqeWEcDVfOS!1so7GDpe~Hiwj_fqXLYOS%oI*aNiIRaK2(@gZDX`XmN#uS&M-(3|8a*TG~kMAJ&A^A1H_8C`VUu zW@PQTTqQrc`?QoH3z0?E##!tcLqvN*YksKJIKhNx_~)Op1NZ-`bF*%o;*0d8HxLWD zENPDU>fWY{JLs#*3Ye5YYPLV5n}3FZJp{N{hIMdEMtx2)|vb>#bO5UYv$NU^8{QAXmvUqIm3(eJ(e<9`A%EMwU0Kt7Y@ zuY#CgCcFXPD=ncgo+nA4uaj?5kNV4XlNh3Jc|^|AxMzkw7j`tVfN(K6?7F29M0I0VQl7B_ruA0$ZStc>55z8{yIxnDe#7{H$pItL+DbEOz2IR#F^Iq(BlEJ#bwa7mN)UC{vqlNBD z2K~8?C;x!+Nxn~6kjSssFJzfP5R*BvE+0vk9Rrx0LoC#e zb}Y=T<{CnWW3SUS@r=CY1k?$y#+lePJ3Au_#d)*(dEPEFC=cqFyw4T!t4&r`GrLb1 z05Z_f8n!Zp6na>#;Er*53^~XyE;;jB|3rtuJq0fNqa3gl z^M_@b1X+e)IT1Ziu)%Fxn~~<=rx?f|`EZhW5NQUK0cFJbC_wjRw#ggG1VE0RC3r4~ z69gISvOkx*jF1Pf>%F>;-?}w~#P{hzhP$$yCU{n?+0D(67gksd(Jvs)SvnsjE;&sY zIjBE#Nl@Z4H-~R2i`CHiTz-AXM6@++;|$s$iPSgk)MXY>+w9lY)|rcqh0D@yZT;o( zT}Fl>tyt=8@G!@lhNVDc6LI%8Za(tniV$V_esg=c*Z5f^@%99sL7+z>6GCE}w{I*oVRx44i z)e-mZ>!@Epq~$Z|Oz@vWIWw`ZyQ4+!+!&DGe-$EN;C}Jt-66R;*e$Is1?`|ezzRb= zy7HzH=2fYzF9veVs)Z|)QeGxh-k5GlZ*-qDD&@st-D+BV9rj6_qvX20K5yi^vYl9^ z%_2?G`=lCw#N`FACm~I^U!>hI=tz)j8nbs42Lai4QVAGQ^O_!l>=XRhKgq}m#{svP z@~l|JA8sZm~!iK8R$%Pn3*~&UPcyeCOq4Z#R(V|DxOfrCUv-r2nl+kH7g3DUJU{ zN)z8oY3fJ)-9x>`QzoQhvo`nRNr$Z-CkY)0@U;U8Z^ni#urd)W% z2wA4Qc$?tX%F_mN#q)HsWUdmJ27IVBAH4C~am~;KnIU#F0~zW8Ij0SHzAhuMMv+JI zi=_(E<{d8O65_)$2*PsOphU1$Nn*RSw6>X#ZtjHQzn(V8FFFdp(Al}7S(x!%=54UI zXK&W@`?&Ymz@as`V;CV$fSfZhYireV(sPKvyW4hlbpvwckx8&-lNh9(Rr`-Pd$6z) zgZrMIZW$a}SyN@=6Z|qs$G0D7TqLeTgQJs#3`3T&B>&Afx8-k@Fn@XHstomaN(;VDAJw7o z97!_buh-Ho;}IjVrNr{Qv7iK6$@3Dc8NQOz>?0{nf3IZt&r*8xuTmQM7b(5|A5wbx z|7!ZbW&7p-rRo1CTQB}E*?RT=Dw+Ntfk==2Ny+wiQdaU@GV=UVDv4zptF+dnJypcT z1fy2`Sc!t+ZWs_dNCb)=d8T7HSpGxfb|S@REH7A*oh*}>NavI24!YKP0ng_l(y%g< zh#SqTG&)4`NM6bJLEsvco0pxFR4lsqGgIbtpj_uP0a-xdx^kZ6SSU2uM8Ed-HnX7CYn@{0x(pzX=Esfi zGAgw&&5IFK#gun! zdS+JdzhKLdM|`?Kei-1>x3C}!u7J2g?fSvfkD!a0M9!dhTXj|vrce`v`MBPU9f>gG zkiVirJUu&allxwbOvvcOtSl}m;Z&B7V?T@^tHgc?%7)m05Qef%ENN+KP-5JrWcjN6 z;pFtoF#^YG+OG}RD$?8bAN(;B9K{B-kO-;IAu(;Av(^wltA2Z5Am4G)H8|a-U}yHBtSV(rwod)F0+r@%6`8+ zE%UpfEKKW1csALGYIaUQ+SYYxW1ZLja1J>xv2IQ1C2>3tFDp_No z7Ob1p)$YKE@}d1g5}D+N)pWjTOWwgz}CuxFuhYvZj_0#c(yxvo_*4IPqc?3PTv zSF-tj$u?b)4B_%xuS>S=wq!f*Yx>N#nO6PWGH9zCW~v)PMz)mbu1*C%=i)Odn??G8 zrXQsYK_36lK$zeBn~~@e7U)<1EhHt@+hhNsB>HWjfFq4bcwx#Fy>tcJx8D2rYH z<%}7KAb%D<%_BclUmmhdS$Lge>7CVNt`XY)ycGxe4!+B@{kAsTd)kZ$A2e_vItKE_ zn+^1zMQKS~Sh!x;672w25Xidnj0Jp9iAdvjj`&njSI30qCMC?RCPx?^T-J~uSF7|B zM8`mn6X6A83ln)05&I~-n=tE5*4DRVdT!Ck^62=C6c<>&GRzXkT7jbVPT*J1q)$mh z!?Fyi&gbi8u%|;lzkNl1`{gb9`u=sfIn*odtxcwgjumtOMEWobb6zsFEt0Kom#h-z zY`#yj%~vGbdQEbzwVCHO_mb`UO0wiP38 zl{`;M8H=_pMINor=K+vqCip>;53(#ffud7Q!`lOdgL9o=xMdl#%;Y}YFfKA#cJS=D z8ju$fmQ?EywQNvklmlr$kY~!z%aQXS$oLFHSRt-hcu{~S4fms_p0O@7SfaimQ#@Px zO@epw4nCu-*&-JZQFm9NOxUMP&I4GHjpdtpP0lK8Z0m^dkkps?GTWKqErBhIyojs9 zf)Ob?p}qOP$Ux?hFWfPxf150%vcQ|sox0XUe}}BoaYOnbi^O5x+x{;ykaeufSb35C z72T&@P(~&b$cH9m9MXb?-P}@i0KwZa+Q)vNf9GumZ#CQ%i1w7$d0dw^L|tGVxMPe= z%*goEoVjAqcu*ds13P&Ya4gGA@?x;Dww2a9ty-z%BIpc3M%N}z8lfxaub&MzdVBs$moTP4zeE4jhH z*Ypnwk^X~Z_4{n|HN8e_xXPj2f@;e(xo2#`3@pSoWnH$`DOrt-!kQa%L)YgyZ}*iw*tscn}Z zWSN04gc$;TSqL+)vypemGM09Hmm#ZRRl_tf$rxEdX0Y}_mQ8*R>Bk{FkYo=%$N9w7 z4L;Gk;QB0*gN2`gi>>~b#AW8Yh));jEMHX<`9TJ0m*}fBa3#YtVtsAH<{u%`$00xO zY~^$SD|*wJ;*v~E6=h~_QC8Q9!u5KlJ!tTS4$(P6SUU?*x9~Dd4#djLghBI# z{_nDlA2i2iA1dh{vB`+#(nciCrwqsdq{&0aJ$?Gr+ym%HX%EONvQKi7>kTpenR8A4 zb)SZvCd*it-KQ0+<3%RRj^Jk&Vl!h=C9ixorKaWJWw93=^W&5$q!gg&JT^0l0gSsw z95=W>N|m^~PSV{Kgzrq(X}up*Pn_d<sX{*T3jtr^X zZs3}+ifhKIy(Rfref3Taj?!3F!c44X$Z~Ok*E5^eFg!BGe&FE=B+W#UD$Qg|Q(lJp zI_2K2L0iS|8u69&7#8Yt2^w&&+APwza+uF^(~#ua?@6xbw@Q@%R;mVY-S~USS^7K4 z_5DF|U0+D1^+xcMCVn+!92W~h+p!=D;pTAPSb8I+;&Tg0XOjab{vsv(o8SDKg{|Ah z0zLIZ@RMGhFpINYC*s6_%%YUBWXjR?ga_N z1;g(Jc}B^m>wLeuB5$6&3~;d_|CEEf+nh(#5kFVSACqZVE}KXX+Re*3mdOOv?1`DYaUnoibNs05Hq%{1$ER~f!IYNj2>$>th8NpOAIDiOH-?(Ei zNTNK>E2*ls5OaBZW|qswdV_((^muX(`3DdfEbf#)b+Wv)qQ{s_b8$%w&+aY=Q%cIn z7X~5Vv0W<_-D(+7xA{V&kvvwcqy75Zkjnt%n6jXLeNcouCN4Tiz7BP*yvQ?_VPa6@ z&I4hF^tzn93q)jrU}K?gSHkV90s`(~|8kT1iae~ZXN1n`e`K(w zsZp-Wg~zs2pihP96Dk1oE_hos-BP zubLSoFjye(Sm03b=M{vGWA?dC{%heid6P8M?-Idue#s-{j(;z%84M_lQ0eiD3ZC6a znG!O5<`))2D7jGIyWJy}EJz`-h9QWAwW7nmENz&2-q@gSiH5RZ^-H^>4e*_lW%5h3 z3;ej-v>YJ41y+kh#*bJO5E{yow!s@H+6=LqL6A31`k%VlT{veUxB;oWp}Ml%B)1VJT4XUb$*~^nNW4acgEWMgGJRSug^)P zba^J-oE4B&CuGl`KR2R`8wSJ)62)sACrywDwg&;3r%}@3@*7Aokr4PTrnsIEWP?i`|?m;klor^{E(B$ zekwD(m7t7{3d#&!z*`NXWi&NIxVsDQlZ8j1ozXCoL#! zl818yB}3y9siARcLtt_rq2mhqdL2m;cQHBnQbIF_#krwFviLZ6e5PdiH;4yd{6=DJ4xN&)94!QyO3!HdBoRC4rYa@vjMnC)yf7@KnFmUozqOEb<;icQJo}53 z@qK1OV5)W^js`jjNEp7ckY#+9Ax&5_-NLwcve$l%Ei}v!Ynk(~Dq>w^f*+P;$g(fy zk?s&KJMc4O(7@z3tjvU&!?HvfQD%Xd94xn#m6K-9qtkRtFa(#*lY074P+ts;e4-y@ z-0PnEdfo2_p4|sYJRby#{6Ul%7~zIO{x1rutAo{$SL|4s>+A8a4}%pFbrwR1V)5Tp z(z0v>29m`xw3OvV0`f%r$Ms-tZr<|4K!ChDe4mcl+%c3SLhvApwlwc0>c}u0@J4NF zdfF_x!H*jPqWa33XqW(6r}-xT$VhW@!3Gi^QV#qEHw1%$~1khhqww($(^@NrrURl$9PUt&6NeoL^f!XN%(u zaaIytSsIlJF`)OwPHjb`04ahTL6EU3liUr1?`V+jg2BEk@x4IiX^0R8_902QA~3=4 z^Upswzh$>9e`;_mGgeoKB!h_Huc(7TEi1~*lo)#D08sAK0g3Y&;80KL34k9$*0?8D zYu+w!JqS4a9D^vO$$Ay3U4d1XLUP*O)2 zwJ_Q5^1LO5eBzE_Wuc^$g+j2%(RY}%YyCq;XwUAu%xY_4;PB!8`Lr)vh(dJ&lm7@$ zSBGl`U+(CHpkHlbram8$Oc><&#LS3K6EsnDG3}FN(IiLO{`Es|CDmD8dufNXxg_PK5h>Yff`2tv4PrXm zVkt}pJO-h-?0^uvWjXD$?AAp(2CR!|!VLBjJ15E{zQfuASz=`fW>WhTM8MlhVuCX5=3Dh@MWvt7PZ(j96q`c1G z(sz5{gqd^54`kV6E;C3#el8Nsz@g;FC;u_9!Qw|gC~p`)g==-bx=f| z^F3SiR~_=9vQA`-4kfs_ol!m?1H#kMUWfzE+l_|0dK;95`-V2ncE{HoKW5%)Xni4v z5uYmXVhHk)*3yZ{7&va<(U{ZQkHDe5I7*bxBlwC0()`xb?P1M)+OaX{!_mmFDATCe zLcEPYCZ~KdprTmJq`u9p&DoC6l`vy%PF4$Sx?(F2+OWw;v%6^U+k`aZ+sr=4H&>*x zJR#-c(`4nqZ_Qo9EX{+s{IN3>4ZLUifeA-FzC zkB*+>M+Nt!^M!0X@y3stPC0$A{lGKvd!C(r>K#`M@&;jMKtO&kTAlN_5J7xWAux~^ zUX|m^%&Sjx$xFS?q`Zx2DZzrkP@eBo2WJWDkG4*XUk1*_`J&|o*F)-!dL{9imq7#r zBFY2*Wy*&>@v;E_b1b%$1MW4%pbmprzGb4PbwcJUfh^#=%mBDqWrVkB2ep%m909IpB+oGR5J4*W$M4L3QiT<3|ZUXNitciC*x6_VYhcR5wVb&@Z{p&!wvO z_rbSW2{enMFk#Rv&6E+u*(}XTd7+q8X$9h}rCi>W3ck(rFGA!DCIZerlFG`2Sd8Z# ze58b2A~;#bvJ6>fVG@?UhB%>oQT`A)(qSFJUeZLT3Rz~d7gl8mGX&~Wwk)Rsse~j$ zmMJ4hCDti)iI*kYgMhyA1gJ->!;oc2GZtsJ5WWlC2XeG`q94{q>XW+XdHr5#@LSFa zgd(ioNM}!e@X;oJboy=$zi2>KeNhQpE?Y@rz7Uqnrfl&CbWmORG8=)x$~?a)>q*G3 z^9Y6FPNv(ONAwYo~2;~6s;F!6D} zK@Uq>6U8Fmm^b$c-aue!hwOeVxJFnmyG>fLTC2R()Ya^(H@CJ}k#WuHjJE>3-B{Op zqpl)8El}mOR|dHj=9mL62TAi}LtEvIMV5dJx=r^ZAA-YsbGCC&{%IVlxwsBaa#)?mpmm~gqjC}G$X`2 zD+DgB*eZb#=k4votx2B}Y{_jV1QLR-`x{#|aMwKp(u`|{rbL+spw09E_=tP#j|1RWyEHEmgDH9xG3yyio0(`5NDIALPT`B)UOnnIRIyq3r6 z81XhJE4Ri%Fqs@j*>RjsnuOBx&T&6@J)!t~0ECqp@=I)Hh%eVU2r!S?ezhb|O9%P~Ws!bTR9MFj?1^uQ#w!k-@TzoMHqZWFg!1gx(Lqy9u-25R%-| z+$bHbItna=Ne?_*NfjuhISn&^t3u`Bu`n+wVV)^2%GB(<%+4FH)L)tov`GKeGaI z3t5I7F~QF*%kHyEgThMeL=1!uov^oS@9ot{F@O#F_-0 zFz;9Pek>5R;1QrkN}6r4lg~A=oc3MGIY-@GV_hT(W_v6P@#fvdRS(@OhO3 z$UT$(Aot`$t9eIDl7A++;fjGTH-yTwKopOTo%OAWl++g<=xrQX>T}i1p)pn-WD0;EUzqUJ+dmH${b{0k9};6-H7uK z>Yqhx2rEdPZ`<46Fv#=oLrc~+ZG@R+v}+QhSj|W4=ywxly(t#vj@D*d-nyrwMFqRg zLNG&ojYRCI8U{gAXWz7kc7s(|9m{mlTN@9twuz<;$l4K>z=GVM5DzZMWT>E0oUO!GS`gC7a z!p6B}nOE>w8X-tDB(}j?=0qS>z6m(y9SOgIEJ2jqXBo>fkrEsew5AlTrV>QMn9V_$RdW0A=xsP*@2`9^@zw~;@z(M!q9Ec&$ z<%1=BmKiYNVgj+^`7aA71M-7~6`xY9iVzqqG?WG9U`r;eW}=)~SOU^qTwIW%l9=-t zF@xuXXe}-!#9m1v^-sMbDj@}#L9Wba*WwL_Ww04k?d#dt%_Tv9WH}Weg(dd2h=R zmm82{BD)~7YSGP9-;(nQa^1q7YA%P676#Z?&{pOI&;#^m|y2^pU%%Iezro*Z)e&<@)y z%|pSLxdYb>B4@N{Vfw4U&`G@od~ygomrN9_Y%D5K9+&dstB}@a^!VkS0O(3I4LSrY zjcLm=KFbg$6f5M2#^aV{|NUNhAu28cvq?1J~#G$Q0+` zLV_y>&+QZaAkmi%fiyO#yt`$wu#-<8JcK$3gUz+|H6t$O%RJA*66eeHj%UUaxwAT< z4yur~K(ctw(9X#dZ5d)nTW4^`KF2Q$u&QHa4-@C;i=Aw0IV8;hV;2@V^V??Bvj~(nCNed7eqqRA&WVucHlr(p?Hc6vC0IzFM zHGwqy=q@NpR)sP$qWk!{P0cOJ%i#%m^!$xHeLXG{Gpwlg=~+Gxhmya#7Rk0;lU(~9 z$+TXVOuk1eph*i9MWtm+Iq!5tTDoRs)`U{gykVVK4WZ5V9J$drPERVc)1aycfXMW4|Jne_jkuU%ZlcBIAV^Jo291D~{{J2)c z(Lq`AYIm<|2K7RxM>?oJfY-Zsq;#Itxm%DS#(ee;lDSo{o+0SA z@GK0nsDF3G@bGvC{r)0@GOnqqlS09lL2fen=lD*UXtT2pNVmKqWsu5by4|?O=YzoT zyo4jO=nDFLJSX+RmvEF{2_Y`c6gJ)APp-sgQ3msxLo#S2XBWLmqJL$ zrNw30QVxmKGH^$HseYFM;>ROTwBNeAdfne0e0?a6^lL(M;K$t6-YkQ?9WvP0A>AF# z7CD3VwY6Qc#DluLGD7vmN|+e9vbrvBrix0KN9DoeVR`m)OeSaMBWd0Xt>jE?n`D{> zl{nv&458*4yL9+nuU{e&bV4Y43Yw(H5`Sj1Hd6uHt5R8;mCEwC66Pt@kP9N_mXTD> zB>}>ZVt2xf{G~0+9u33EGUw76LXx}#3^Kcax%hYfJ-;(QJ0(p-MR1ZA@%})OQGQsN z@&CqZ3yEg%0g-tZai-4Gi4GLYGIdWh6i6|o&5z@TLE<sV8_?0$Ty|lEn8hNJuP(D~4@}fH57BV?UgS3c~ z0dI&ghVZ6{c8uP^V2Ir8%Eqn?qpt#C4*mYe;>dKn)~w708BoG}<4Ug#^>;~IGm8&o zWkW}HMwk=j$a9C3Sb{V|+goKRE-cHd(MkFF$*`pt!;>;QzbxBP$lr!`KvLgnahbC% zHzb?y)7~o|=q^2#S@WGVC(yDEAyf1iq2_SSSXa`#HWkS8*0TQO@|3fa<#Z#!;(&D# zvi#$ZKkm3;&{+b`b<6UHz&rngNL<9xK^-tr4l6CzT1Y6?dOB$U(It5&>B=w-*DuHc zbpuIb0w7jow)m@4|4yQj4LVn@%WwJJ-fO2nLnI&=JOj_gAc^P1!c0u*%W7SApik&< zAdUHBcHs+P0Pnc267+5$OXS&7MputAyF=Xop{f`XE2lD+G#mjpgyYxdKHTA26;`-@GX*YFl1e4sKNlECyQs zQT6amC(F2E;0qrNBOl+6kF4zxQYQcPcC^T?tG#mX#-I!hbeTUhiZ!gb;;%3v72$Vg zY1W6&Rb@59+cGn^D9>Jx%a4y4Cn=XBeB}LPq0VLaI%U%N!LRf9HVZ1 z5XAWq0VmCnWCl%-A3wHzET5dixoJ7r57akAf-TSEt{4zzNInFD`(9>HbrvY3r7_79lw;FNA zH6-2Es1u%rJVE%E+%;p?V@V$zi#_6Eg7(VW1T4!8`0!yyeoJN5(fYk7Yi*JnLp}1@?LoPFeL(uU+oVw+4xPvdfY{3(HjW1* z@jE67lBE@GwByrr^615geE0B$eE-WUd8(v&T8T7P>WBon8p+gmC}|#$Y-5kbYvx$R ztjHiOCP0P3T{8fy0B$ZzWxXgYY$98WcI=`9c|u`&g2d7>V?EqUmffb zD`z?u$hU{7a}vfYUK`~`d=Rh#Kt?_41eROeUMO>vWEg-4E8u>hew;9KJ{=|l87BAP z!_J!qqNJoJ`f+|*7SiB8T*vRtIdtAU7taS_=6R8+PXW9^bYE5mGZ2`@WD*?Zdm522{i^29#%jE^G&0$dPCyj2Kq?Jfrb zVV;xescBizve?`pelap0zSmZ!br`~C`hqPiCgQ&9`?Z&o0CGeaL)whVyX6=-I5M%(!Ln{XQO@xa}NzLtJ{R=0!|+}hr<1xo<+jXu&H)9?9Yh0fMC zCXW`RruumF^?PXp8dD=yW+lnDulLL6cdjUD?zeDrOaeqi@hREc$%Qa;S+h!TWMyqb z#wLsM%d=7W_UGsF?SmKcwosPtv+U#uiz2V$u_951C|M^*E|V^o?*hLe zIUvT|&qLKY5yN_AjWy!EL0#h7fV%^v*;fFhljb|h)yeCAuy&Hjgv$k%2=3d)3Vats>qV{TCbLw&g`6p@lB zGjC_MT()**tR6?mG8V@;s{ti_$pWkTsXkz3I9}PKGrawiH{Y67RqL8be#jr4EyVFS zUgMqzuo@bJh2q@24P;m^&n(+1HEn0U#8DHdimLb+D&{BK@b5YdpvoFF`J9 zYlFVxjTmjYKumAdVaI{oe^n&=M*<4OV%yb(P6y$|GR!jA>zXm#E_PnQ=_WKp%a$Vi z#VUa%I{XG-#o$i{p(Y{+iHRiMC_Y(`f1+M2PfBHRL@I03HlZ)LW9WB$Zx#^BDOFbH zvZ2D1tC4JNlVlq@G<8b`^37r>X8=eKL=WbZn-D*iNeLl`rf^J78M0cGj*N* z?PZ4#4qWzEln_I{cpZ)vm+!qyDdUp%2Uq~H5<+xHXVEq`HaE_baZy;;I)2722Kmq4ulAvK-)#`NVIFnkz4+0uPj*N(M=fiU>#?B7DWHJ zL3^Uz(WenYk2g2CBlzH-vHebpoN{o zVV?#H8RqpI`(%VBK<0>?!4{!kT3MIT@mYEJbVUC1$7k~AAD)_D^Xsu`S=I&~p}=oh ziEr>)*CHXyC~$lMX}}P5?#;7sJmUR9xiSEPjAF$_(P7nvm{Q(u z@jVPKA8hGFA>1fh2(w$9T#h{L2hQX7d{3v#L`0qm^1w53?4aLXW?&@YH7A`99WhqO zn%c0K2X%y=2kbN8z{4)sq$PHSpwB(L1m-jHa*x@_)q2=_7Iy)DcR9IbiOBLRZ!{*l4jtFnvRF1w8xR!Ajrzli1j(X48H9Kl zbIxJ)>2>7w!?oB?|MsBYa~|jW?{Eo$z++X$x=iT1%eqL(Q9-#twD1eYVrj%nJ2j4* zI?{hu_NxD>3#^s22V7XNbP?^~u=+brV30vKple1)-pI7-2cEZ7qEp(H1D=!T!y?z; z*Jl$@+uDLV#$`azyUQ{;iQXLxdRNIa^=7cLV9Ok(DsxHc>+h4HBoa(RGN0fqVC_}6 z_`p+lOxPqZTN|nmloL>QY0$=NYwNT=>#a`ldp=6Pa-KnZ`qV7Ud=RaIRY~a|UZKFFOM2X1yFi-P)|EIznw5y??`SAo5BH3k znu{&?9}1#dlowt}rTA1TO9^2PwgLUGWO>IWBY_HzRJPGFT0z=D;gZqVBiW{8^56v} z%zWnw@H>5a{8Rlur@ zSJq`|dCe@&6d>mjX~V9KiTYDPr7Y#uDJd&iF3&xY%JNw7VFoBWgytZ^jD@+X)+P*Q z^SzQS4BGZ0TbR?}cPI^#zpi&;bQA^2?;Yv;zUvuGZjV{nu@_G^*S*WC-gj_(F zgn0$R9NaA+FtmYmdFwCiKgN#Qx*BtNU=r8K`!f5RCsux(G_s6!8G;{tUunCX$2R!A z;(9Qs1d)!mOFP`N@V7oGFxaFV@Lk4b4XZo#XN1%G(lDqbq@E2N@ckU<-9#TanEqR3ZQ11_1dp8PxNsKb{=|#US7!x7!aV%&gAXYW>kg0dpc27el)> zpXHaY%pHU1C#$M&tdB*LzbCCLEbUidON;)b;zvCM8`Ppy8mdx3T#2n3WJ#*BN2X z5t^=933KD+A$Rb1f7Y`{cu4L(>_*>sk?SgR-SA zDcfMlT(;z-nKI^k(n0V#bn^Btnc$jEnCW0}y+|*A&a3ImM4~NWNK>K^vwA9gpp_BL2HZEL>&hC z$Y~#fH5otkp`k0b+9W>Am!+Q3OIT&GE)#Z>GGU-YWQkA?$bJYV2hr;4?66nalml;A z&VyTu*9H0&eZVVujA{&uwk;pw9NudCfQYCrSeS|ManbcKdhmS-GsF>@J}-565U>`r zv^9e|xB+=%fD2h39)2yODz}6S#088zx_+T1`HXzC4_PL!$S!2rA}#4>boO!MSO_zq z(bXcTSQ8rRR9KZftI!hSgBZ*xPV;Xzq5^3NZUtWHC|C**#T#5S@M+$ZB~^Zwlt8n* z_J#@yzpGJYN5i-8CloJVkj;jW7Qt20(o5La)_{5&1#ZRl#2n8gO=osjmC6yf_ zG4X)@hSH*V)Ye&C>7L#m>ulY+d>MdDQ!fw>^zGQ230w5R+mP22eKBq__%0Js;L4Rj z8z3^kIcgg_Y1nhB98rh3X7E-6;!IuuR!1|yXgxRo zbGykhmS)}@oJXK<*HnM-#shZ?Ce4qGj>w3TW#b2vQ_2q(O@^&sMd#DMC;4S?L}L$R zxmEhL{a#bDjQkQOpMg1La@;sJ!VGvoX4&Q&>!evncP)hm+pkv=4Z*dJPBU$<_B=Dj z@gOhZBhd0NR}TD|m$Xn97FTRp?fJ!JSzg8B?6IDcA1LsNK8XT4E7&T1i^EcxeWZjr z_%CxT!$1SFY{COU+(Q!e`%E$^FjJG4OnsN+ng%5cVa|8!F$nYNmQgwm z-$xd?CtH5&*GuED=kfDNT$B8fc9fUq3DQiuES>Oaf%>3coR~qH=`iRhQM8orL3MUi z@VlURL%jj&$|w5Wy?fUdD#3CQ>+fx#uS4Bzn&qFgwZ(uDBE}i|N81Dj652+!mR})X zu!skA=#=MS?e${-sUm_6uX4>or6ePCx`8CxvnlX(B~~kzxc-4Y>Fe#a!O~@UbIAZ6 z{feHY9L&1Byt|@qy8Izk7D{e#KnAZ2m>=_bdX=xOe5bu4bLaw(_JKNgU7$5=)yrpi z2w@E&%~+dRxZ*=~#aZIL2(u0f7?9c`Lt2L{I^%?yUXQZkddHuBeO;a@=vNYR*+}6n z0s7n*H!}Ggdn3amN|tqii#rB`JoB?xUC*^3%Py~eUHG0`mU$y`?b=ltx*A-n&@m^a zUyhY91FJYjI`y^YqEX1#D{*d=CMD0!y5%$O8=fKjP_|3E1rKyDC}c*I>)Jq8@o8R{ zg{4(lSYFk}qG@?e6D}M0IR}D>vco;(;zLVdWm3vYmP<1~O9gj~Rbnu&p$}9e=xCY7 zPYOpACbhcNvVb%ba;3Ile#^P0p+K04lA$E}EI@r8w}qMW-_wf{wv0 zDSi&W;XF?V!SB!cPP}O3Y`G=`j90#F{T>lV1LaDhKIj;EwM?f0`Judlm;YgPbP)Ir z*Y-C9$RIv{tmFq-#=^`J*vQGdWb9J|Wk+H{H+8eJvZ~u8bR2b~)qyJ>Bo)166S1)P zX-C%J7QYW@@9zTbZgq7IO zlITGrBVp1b5eKl&QX>?Dmj!wWJ=m=Shbu~$i9wC;=ea6}2-mXKDf$4nAlk0! z0G^jTagzRL9u;zCzVj+~X+3|DKwTbAm_z>qXjAkx3{0C?&OGUNAgh}?pvC=xE#caZ zEAbp}r%kIP^fazfKDfb>Y^zL8PZ=p5AD@&l79vsE92=joC@y?&10nq_Z>Pwg>vwX9 zKB0|+y4pG;%S=!;vOL71Qe7s?Ct1(OPM96;qQPXqwwAnfv=*eZtx4Kj3Q}m~RW&5Z z{Z4re8!XQVI-gAhR1iE=9TNgsA#hO%^GtC`re}48Qe2ec;jigd0lZY6fKc3e4-y=B6AkFwPv#d76nfAar#|7$>j(Tox-X^yZvlVgy zNesk&x2>{;9CvqjYDXJZm&7WE9=Z&mEYPjvS_Y$|yxyKvBC>3R$?FfWg-8+&1EM^r zgNLrpPCItq05Rm*A!J6xR+f!02YJ(a<-dOK#x|-N{Y$$xqlL;HR%e%iivsGBKItIB zOdaYewojy!8f{mEb7TvTB0L)d+9hqHOQu6Lu|1BY*CL{YO~%yEK}Rb=*1?P~N6+&z zaKps{c?{87G>sABa8kdUk$II>>XUf}TlBq2e$x8ETyFHg&6h)Fb+9|A?H00p1+v`L zZG)qe?qg4kFat8p>Pll`zRt029V5B4F;NkDfFv5a;@rxE2`>rKft>9)R2kDtx!W$N!F z2=igsOJGAoYqQz#H*emwSMHEzj&lyyGDgM_G(dwr?3qkPlka`&_v7Ax2F&%bRI)wp zJYHr5qE%(G6D*l4M$o7q%9yhJ5JF2Q#5GCO6XXp!V4`1oML#;+h+l(pr*0_6K$x|& zv<@%vWmecsc0JGK9U_BXryVpm6^^}gqaNw3r<5GBsvoP`(P={%(2pKM4dCO76|S$Z z$1GF5#2eP6p@VTHrQ8mm=8-7$!1Zfe$Y=vC4&Xah#vQcjw5 zdZWgjwr2 z#G=ON7|12YM)Jo#gT!?mKrSvVCd;AE?IbL@>CYdNik6D0V?`s$vk>K(nUIt);}V1w znJve727Hv!={zSy8Trg;y}90iEs=i`sIIQD!4Ki$8022No{;74E{ni(8g+Z3gxNvn zL!8H&ggiG$M{ARGb+kx#N2_j|rMTF5(DKgAxNPTLS^iLN=kN59{b;^vaL#OX++91 z52QTxy_9DkOJ#XNL`k&4TrpHA&>nAr&pI$DD={R5AEWW=ykzrzl2x({VI~fvvC|~XT$g(~d3DP&WSLj)pMCb35hN_l5LuKGoxfSiv;psSF1wxnK}esIzAp*5 zr2|Vd`^TBj%MRqiJB{#~kJtZU!3>Zt%frgm>xgSnKcQ0%69{?BfGY-W7$jnN;@=wU z=`e({q)uovBqK1Yn>o%aax^Ms=xu_IosNz2W(BU}wCExabi($ES4rZucGx@<_YKy` zAOl3kpdGf`M4>(z>>sd6QWuR#9Rzd^X+04ggZ@8E09=!eb(YK4dRF-Y$Q$yBYbbuM_EsaMe=ibT_w6Oj42md^ z@RlB~L|Y4kLf-t)hhbHoFX9R@W52UB6A1Hhrf_YxfiyFRfMBHj z{f#d=oD4bC|K!wIOxSyS3m3$NipkfI<14D4&9ba=i~KUNlflAi;8X~+0|n~-%`Huh z(%IfDJ)KIJb=$54y0r=GbAwG7H0!hZJqO?CrX=bHVe4w^s_i;}s2S#_F}G+$d2+fa z)4D&WLS;VBiNEub`9AAbNi<>WAls}k$nUqd%gQrD2TCn@1v-vbf$VcF9UWIn>r!4G zmGblhDNTGQrCD4tMztqcvhR)P?zm#?1C&G(9Rn+J7I%#1A<4Gi351y#%+>Y!{n;o( z6xwMKX0GW(8K5N7Wcl;YKi?rnKBMZb?Hd)RrVGAh`EeR94DE(jG#CvdpdJEXUGe6!ZOTs zgp{^d2N4eNNz7`e4tZfR63f>@*aCt3ctD)OYIaE|IVB3b;zc~tazWc`YA)CUB?J9^ zwq-)%VX|{kfH8=AfW!pf&~e+RY^W=W8ggZ2k_=vYy1Q+`7A8(%Z9eY<2cD07;+kQu z29PivL~pAc8eygygG$i6CZsue!w0ddt+`kWnRpv}n=mgL;UpiF2gXG9y-lJQ(UZ7K zuuS;Ef|6G4YZvB~w6a|NF()j=;Xe9#aly#35oFcV#7{;h(GffsdY5N(ea-U+H(UnT zq53Q-&tWi7ul*)O8J)~qKS=V`p&^SEZqYCrPCiU!8mCH_0hLMyDGVn6HRT&rVL_4` zj4(r-yE|K?ud7x1y4$6{TMJ4*ceXc~6}m;w!F?ldmgs7|7E5w7c?TicG>h`u+J=Ro zgDlT2tf-JJ7?GZsRzj_$dS(tcjuj)?ORK8vwK9pwv7w_@Ca&1XN3V%uq4ps9$EQ&D zTt{zG*;oqkmS-MHY4Y3Px4igTM*|D01+f@YXecrWbNJa?;6WkPgq%}ksv0HBa@cLR z0%2~sE}8l^z0BG9W71GgiZG{t=Y)vH>DTtjTo58G%a9{T5@ZQw>aXhfjax9CG;$%i&ac5S?t|hco%fFEynu2GokDokNZnvDgETWBaRu!4<8^QlTt4^> zb?+`Z_%0(C5C`h#UDt^SpqOlqiRw`5g!aR0a>`l1wZ!XkKAZocl4K_SHPo}HM6Fb5 z`~29lraqAgbPDbm=$NJD6>EQ78rg7HHGG%DE8P%p80#`C!(9eoSzKCLG^;YM7?cM@ z$*qx@jJwGw(bE1GD}PUSh!R3MFiB235)19>?S$=lNVHc6Q5W!+H-A|rY534GnT@=$ zP>zceVQNMB0fVIAnh_>o!#yra`zGJ}5oRXbF|n3@6ZsCv*x;1*h|30j80`|52M9KU z*^LuOTo)O$>+5~|UN$LE`#;yW4xTrif=p`Cy5cjs9zSgA3%O(!PFq-LaL^Kq>$J7A zD9h=GY&~_tydQAEsH=lK*BfE(RkA$L(;s@Qbf+tp_78y(4{!SAG#@6 zp_^0*j4bc>00<&v zIk;nFSPomsvH31{+>>0}9my01Bvaj}cRxENL8Cco!c3#&KCbAwE`-R*GL~hCk-K4d zLq(yw)fa*rEM{2Cc70{j4SPTMaX*J=;Td=q6dqfy!F^E#k(3=Bl$&=9PMDD;_9Y+3FMqmC7})BKTKPL zq!RWE0>d>v6x1nlU{=-fakDP-Dwx;wkOy2ts7=n})h^a5^V!uwQg3g!6bemt{4xN2 zML96xaa47zErY$XYVsc121F5(l9B3~Dzh*%*^wB`xGtch)>m2YVATdbwnzvD1U+`9 zNuL9sWr$yJ!w8n;ViDI%CXB5F3$qGZ2rsKOt}^E=NP%VI(0DD z*Ju9q_7+43b}X)g-uC|bv~ey7Goa!j&ctjc933tjOcHEsR)XA`w|&TRXIry$D|zlQ z3v`UJ6I?U14VPPx+GW&1tdt>z<*<(gFo-5;6}j8&i}1j!caHzdJNLc1XMRvSctj$I&1$I0o2WYgqdU1 zWoUnI%P+stKYE;|r?Q_7b?*sIlm2`>3AqaGjC$C06AAL>B-zjPXSQcm&|jkuIunaB zdO5rW>NC=eVS`16s7LaAR>LRC8C1G$h)zj)~wa-O4i$2nv}dZNJCu+ z)AG?EGbJTqD-#wCqdfbI66Oa|ntvj~;v^eNmT|8@+vA2|ME8LE>UkB2HP&T@bh$d4 z=$GsKTylMXBUL@WQ^I^*r7=&>5q@(67)mLB1mtTIlvoOYC*NWH$vO;}OFVxSYM~`fUC`dGQk|qUv zflOHks)_nQ-f+v|%>(s;j36&`suAx8UXepqpFDjgPaZ$9$!3sPCT5uhOgm516R1|5 z+tSi3*HrdD|Lnfpx_!$g0e&b5X-6E_=PzE!vu7{tITq&^gCBL$F(VBaJPKO3SgY>e zzo+f+mc?Gir}v@**>>Ia?Add9{N$OolMyA%#l#XBtaqMQ$|R@#9c`dd2ksU@!uq!m zqKvxYnn%;ZrvqvcA9(8t%L^=Wz4 z#x{HoLcx~xOiDA4f-A-xq2s1PGz^cm%p^bC9?+<*02l;phTr6raMpK7 zw(YhO<=;xK=MPfVaZjY7^WbZoB2J1hb1v6#B82kbbq-cT{FRSNmL2|_kmhf{{noa8 z#-hpnAkCy*C3P@(HlB;;V;`$Bq?rkaUw{3zJsZynNqg6|B0}9jkbn8*7bDFN9z4*_ zW5fnDzzH*HFDQQ>ym(#EaUvrSW(HPR9`S3Bct22{So>b-VCLD==kn^+Ynhswu~+*@ zwdu{It?JoI&>GDr@iQf^_wL=1uI_FlbngqI9@%~MeovLGztk;pUDsFF?SANT?g?pc z(E9G|Y?tfTuW9?cZG$7;FkA*8*H|4{q~zK2XY%~{3nf^S=DJ|{*LK13*I50m3KXat zOSaG70RKLGbH3n@$uqj{xA?qC{|`Jbydm~}0bkc(K)E8fl{6D!fwv21^;-XZa4=zB z)^>%#k2wILFCx*_koQpMi2=duQj2J(dXED;BC>nc@C?C zTL7&y-Vkwswm396XoDKsXm?MS>S*2sqd(4`zc|i~OU6;KD-@wZPykpCNLY!@7aFpw zqY*5`xOJFoM{7YkTJq-7VQwClf**8Sb2ukN>kd%f$O;1( zEX|#ro#x+q5jxTH1}|^Q7pwC6dRYCBiCI{?FlgvWR`z`6e99RgTC9J(A`ceO_v;vG zo4lgOXO{$7Mn0Id=5oL@p%)5;yy}5&BkIImrtZCsUu00G$p8F&(FT(tl-!j0_TIn80;TljfHw8R$`O&ydEjwZD3tEwaWol#@kWXb7$u zM9e@257HIq1w1!(w4V<%&khF)=P7MavP?U&NHn||Z*7&E{**b3<6hyE;)i?++D*l8&I(=cTedCgr(j zQl9xqN|Q>KXCByUezG>JoybOL*ygVcQ6?QED2P`e%Vx1g5!U2wML(P5*ZGx_<-3x} z_e-Yg{P<&{+>Vnl)6lpkzh|2!%e-cHpXKxfzoUX@L78$*?n8%!qGs!)nd|NCg!Y4f z&vp2n{~mCCo(*d!#Q8FG;3o;n4jHnQqf~y_I$;K09|yHn%AI-u$ej7iDN$xXMTjCk zN5cGJ2xZSiYX&u8QdSsbVgyiVGoWrLezq){!9WqRjQrygK%E>F)FaUmrc?$XiWB2u zp%ScEz}qf~I;8`))$9faZQ>9X=MU5A=L_VIK?2KxLG=WWuxm znlL9T{iX6p!s1L@!sUsT?|OQB%LzVRl$$ScQaF6^t}lfe;eS^4)c{ zq#7kJHAbr0=Q!v1WWo0azQrtYy<=5=B;{!(%Tqrqaeg9|#S#5pi8SXSFj#^~hmmEJ z0t&C9zk!HzUQL6=ScW9$y1rJ@{CQXgyS5pTG?Ea)1R=5rCKoz=Av|uv%(n zy3aC}WymtG+&`qzalTubNhl*H%}g@mz8vE`Plq9W4$o^NZM_D0;MsXbw=|!31%8%r z!i)?dKWvYKFf*uP%V+8!;{8FHqgRn{2s80mmzP(AoEu3C?ZCGrWF0a~s5c@Q(Agga z)FB=3oDxGKW0-Y$YTE8g9lIQabHfUs5C}wHzdl4En(LvA8!+0FIFt)Eb&a9cA(GAKl-*1l?97)_{#GF2_wHA z8=NJh?af9ZEM$TnIL~rG-Oz^iCCrw;Fi9QI{u*^K(5<8ICNS~htJ_*8nny?02 zTDRq_%SwtX^G~HT^FWF6PZnnx@?2S+R_R&Qb5+nG$V!x%$!h!7toOo?L6)&BYvM*# zb&_f9ksN-@U0*3-{!+>Eb?qTqWm~ez#E5l!eS^aALBm-n2paWq5oVMK*F$MIS;qg= z$ubsZUbBDf2$jyk84I(!WJJRJ;h@|hE?9o47c8H+XgFcEdQs7)3alP76?+3nr;1e! z|M8>9KGs4A1k3EAOU9Kn&(F;piT3(uOA7jdg-Sv!SGI-x(e88JK^bDj$3=;SN+<`c z%jhYjoV@3>d;w*K{CncJp&q;(Ft1!3kUvY72miE-Q1|G8-3izr4A8=I*=z}?cUr5& zeF(_gL4-Nzx$x$aE&j~7TwnmWa%I3svy)b29`~nUT|eH0yAz2?dJKH+KH8QWczdLS zValAzm_)8&l|Nj62-IM)(UW!xQDy~47LY>_c>_h=)aqdOJoSl@Fdql3)v5rLHl?yY zFXiPoQl5Vve3e<|dRmF{+*4b*&*CfVdCHLWzm9H6s@V8^Anf`oNbZJV5~XAivfO@K zvfW=BSul+~dM=5$0WGA11S;-7p}_OsIoA ze=J!BC?pyy&&NJW*IhH5@B;4R=^zB<7S83_`7PI=TsX!(u!NB!Y2F`{*>MqO${T_l z3G?xRvZv#tL$o-)tJ*ngdqK{<-1Q{=6WT8pPC7<9T?jK<2;RFSpZcCF&Z`b#`R6xg zU1n7?>X#5=4&;FL#4BRlF<9BJy{+ARBQFDJ4_NY<;D=iZx|R0fItBf>(-xA?ZUi7< z`NM*THP2FV{K6!E=ER+cK7>5F?qtg@GKp;9GE|jI+%xNf8yx98%LDD?Ai}(xKL~T^ zLwHNp-PI+1D(etui-2;fbz5WQNnMbz5>wvDA%kh!?xyMl^Fzm7DdY%M%tyxjgqsDlIS^hd z-dr%SE~C))>);dNpksk7mzm&)8-^ZZ5t4kjWLs}b4zf&YW0GH&l%+p6>o@M1+~VxN;`q{)f#uV5`639|d}nF$Y4Q;=+9 zpRM4RGdBz-`FTW)T8lS5u4MVy>oIvTJT6l+^LC8M4nzZCDe|*W4j)UHQ5@cw*r#)a z9N)cr*TRB1Sw0TS@?Ox`c}6F(5H!d#)@Gi^!F@d)1nA z=-7`FkuaZsSct1^#z-@S8OtxO8OS+h@9l$Xpp_8rthT1srahK&&0u zyc^m=ARUE#A(8cNON3QxYipPG);4KVVr71(T0R#l>2ov5jD+g}7YpaMf`}{JK8N`1p|ol0B@UsItfc? zhqtvsFZcj2YkC?vCR;o|t{JpjboN>IiIFhBCo0=Ig5O*cTcvMB$?&`q<+;a3kV_C{ zCifMeNts1R*5{r+x$fUc zmAPRkS#Idk?`uu)=9gCF#p`i-@btC37@3r%m38fi>ZG$>$w8}*$n(c%eSIGs7h$HO z;5=sK-nemNC!TSCf4_COCzUszkx?#No`uE^X~v>MqvzSuO5q>`rLaq?`5o6l0kTgy z(7_pb&}}5myNHDO{KLzij*n%H7Z;XfNjrGj3)qo=-KQ$-e3fws3wp|YAC>6tx1b31 z$2F&CW`b4q&6v#01*@uEGfAAs7BYl&d1z?RLdg}he&3~ME();DL7?zk#?nriSV%qX zYJ$!P6XEdV#jli!V62>GVfFe5qo`!LU5S+vPY9=x&t(6iq>gs-p!<+#CH^g~%|@*7 zjfIezUd4w#kq74RP$o7Z(g<^dG&MKd;w>y#c97mUOQ5fgPMEPUH`rhTy~f)W`mFN+ z%9b)GS^cQarhcd=^g8bX!lE;QFtZpEE?X!H3m2^Q8u~=?b9U`F66T{qg|f1>EalZH zsVplQUU+4G$>rGx!Kyq5QGTIBc~mNEMeW@;v|0mEh9HM17zYvMG*n0+*gm;Wk;&Ca zw!U4m%~un$jL-5HVcBaICQ-7CY%Q&B$msZtJbX4RzdRe2so8m{(T=FUr%i_XyKGr; z7GSYQIAwecVMZa4IM*#nCKL4;q3n0weHWua=Wl1~xFsP*LQ*9$@*KBS1VkOK?N^+Sz zw4Y^+YhYc*n#v*_EQd|~2dnCCy>m_Kw^d0LE?ba9>KQ_Q8QK!0kBODUogN>X&~liv zC88mRWDos;tdp>~LWUvBLszcY7N2fhGO$20h+tqrxg-A*b>S}ParUy%>=D{dLYWTxG7?7RV4em}z8XaflJ8R6c}3t0>@=x<~lSwIzSdB!4(6-a}Y^7PVjs@D@w>ar8H^g**FHAyd4C-;~H!| zZx8~M2cIbq6gr9foksr7J0fAeIDjt1pHzpAh5dzCHIs`xFRa@0Bki<~8p@AFr9rCK&IcHFt?ve!VE$`Pd!vrACzpa!@4GP zIQ?hHQ>ZIkX>hASkZIGQjzfRQ=d(cUh4%rAjg&VQ!eS%1R}d0z{I61a^Cu~ddHRbj zKvJ4}5~5=0`B;@rOYJN^qQz^%;pw2psK0?MLzMLzAvUv~&+2{6S8VmZT<`BB$CB5O zX2^0~tDY0cFP59){Ia}IlKkW2SMun2urA}q*4o^tq`ApfH)KN1WdRL}#^{nOTOwJiZV?AXhHzxvseMtABo`W?NH;?r- zCE?b|hVQu+uY2iGTbf(Ul8WmVuc>9Of71jX)7b4oj*V5_UtRg+)ss7-mhz z$G0iO8OJrjiOFS3fan*^P0d#SOlGwFs%~{n%$o?#g>W+1X3#yOgRqsAWi7+-MmOSQ z!2qSby+iu?dZkwfb8W3HHdr>23=e`2C4aF(7mFbh3d*mvHH|ijFV}iAxL@@BK?(D3CEN9xWLkzq>RNWl za!JYZ+`_Uvf30Ns(QEnn(Xfn8%vz_^(Oi)J?snDYYK%t(7LX~vR7r+C`=jEMLc)M>}qri8h( zt5XTgu0LhEQv`e_R{XNcIH53$^MM4WteT(itBaIzF)xCTo#li0AP z5)r~l(?tjEAN_!}kwsf(X69^w!9W7l;CbXcbUm&HVqspP7hK}TG4bG=JKJ+ZfjjXZw10#*DATD zYm)8!LUKL7SEBp}$##Du+4j4({B@?fpuZ2*7A(t4^6cf9{PpMO^4Fi9%Tp!JE34}k z4dY6GrwnOoRpOi;WnUIJF?Hg3ntDf| z1|Z4Lo;@?t{Nlw6vxJgYapAAknrs2MaTN3)drI|^HPMX2HtjrGo9^#B50a%e(i~!R7`0-=2I76E0Fe4%^ z0$7?Ee_0|CVBsVJ1|j5d8wi8QutjHL@q-l4&CQ#i<^mSKjnE;|hJp`gQNN!vGQGJO zCfS-Bg6UmtKdMK$KCj~47n;|Y0fv)h%7U#EW^@ylWs8Q<)@nYw z)W>B911R!}iyQ+cCmdM{r&klFQz zwYiG|^0;deoimFlA@(RY@)yb>oQD;^LG@3t?uU51Ze_jfAdgH0WYA=C(A=VfHYH&y zhrs>Zt<3cE_7;=Tm(9I}#J=n5h?50!%78k!X7tQYr>LTp7^trCcoA1e=uvZ zg^F7omh#G!5p8pupwhI~GCPy`G+`BnBp+l|cD`)N98IQ;&`9%c1Pt6SGEGCfM7jU( zlq~^3CKvwseSCmar->DOuz* z#Lm_8wLOuzVM;vNoF!X~)!K|Dt%$&;I>e{O5S)z?FAiv7@YGARnkNT?D}5C68k zDwWMesjN;ZNmkN3M+mrIln{R(qFP`<9{v~E9{CsDPbToOeD(Y@CCMX3lFRE#vbR?C zy5W_dTEJ!uqLbG*&(1*62!$Ti!INUSd>fpY&;+P9A~0lb%XXGN|X!ziTeeU z`jjL?mV17u?`TF(i7P1T%3%4@UsE^XH8F}+Nl!=q( z*RNm8lP6E)`Sa(dD0p>vT1p}!;$wg;(+ScZh!IQV1_-msFS=3@R;Gg(;+nB83kyp| z3@wU*5*aK@5XQ}ojkn|;;!OK8Yn3h95LT?C6Ap_UTzo(j($-}XZUjt(gd7IHa1i28 zql<7!pv>9-6ej!a1%rqXA*4xKl5()O4JKy+R&H7@yurXPes;EK6G~5$fJH!>3GrDl zvW%6PNy4m583wySPcXPah6zo%qyuU6!q~Wy=E)GA)&@DJP-PdBFe?GAY_BM}#m!3#?1ov3;dF&ev%Rs{8-MKrK{KGM7CA}@ixC= zZlXnFt{2t1)r#{i*5!SR4dt&1R|~f!msGjqg2AzDwON!Q!@2hR7WE?6uS6NLOvt#- z&n4S>JuE~5IZs)Yx3m+PEiTE^mt*qngXi*Z-$Isuksp3}A!C#J?0WCs?l$@2&X9cb z`3<>uYe2d?T2(>lGe?{XXv|nM2r&m~_Hc7_S}1QP&1uWu*@<7*d2!B$icP^>UBP0DPC%)>h4T84EK6feFCGu?;#TlpFh4Qqeg~ z_M>9t{F@QTv=8=m<+y868kZ~a{`1_ z6GCeiTNU8#HK}YYNO@%+5o7*xuJ#Vp<|MbHX`QLx} zMgHTv$MWFGh)m5b*sHdI-VXWV_7(Zf=hx-4+e0$g*D3kN%QMmMq5vh0WruKckY-#n zaMi%tMW+Q>-b#2$s|428T00{e2V2}e!U72w z9}qgCVGw&6(v0siQAK>f0a@k^BxOj12#7L-8C~RqlTQs{@KCD*H3kn#m|I&+?%Xv6 zpIFnw)`b&&B!ufT(ww}_h`ROkfIBJewyUet2y=H=m%SNq(wrW=FxXksLG{dR7*vmG zVt~!tr<2C{&?pHZCd3+(>xf{%M7zqe662*&DJ{IV33%n1U!*kkgOsPf4-qT~^@jDB zNqdBUW8xkOtMY_?kHwh@eikozTCcsJq#Jh&NOIYfEgG9;tHY{%#7`#i>ITA`BFj`5 z&xs3$kz$_NEyhklv6AJ7^6%e0l7~-6WV*O$3z1wM?2>PkDF4lGZp+vAuiFyX zgp?ydd&KDjBET!*t5>gDtavM|=?!}`{b#n};NBb-=`S8bKN^6HF~m&cSGzchD=($tT# zjT;3M^oIY3l+1Gc-=y^Vf0z%lEh1vB77*i~j7*p3o=Iu`RfvSKGA;s1W(7Wck`qgE zhAd+_#`>FVL*h8eY9yq$RE<8b5oNa`C&?NfBT?Pw+W0%yGnwy-WII1oa{M<^HGnnw zzerWzA0-QMZoi{Mc_6IThXs0%C1h=VQ^qIf%vbq8lpz1FKR=Lv{p&CC?SmKc;`M|q zF0D#^ZLN{xukYWGzx~Z!CCxYG=9OM)DKvhv3i7;wQL%@cBS!Onkuyj~A-ZWRGnOU@ zG8Q*nGq5xhVh77eM8tUqKBTNRN4PHt3h){N+mm>aj#v&vI z|7FNwSk=!5-=89amAOuuc=MnGDg0thHj;TgE^=N*L}7p^Gf<ZFkSuZm><1E5cB^2F8&B-S%X zrCVP$c{nw!uu5Jl7Um5r@{CQ;tE@}}SBa(3Fj-GYbD8+axLg#UNM-h^RCHS=%p2b= z4(s`E^tY42y<)8>87BJ~F-|PK`Ycw&R?wE|s^PlzhkU zaynwI(h9A~D^YGU*NSZOP?*ryp@f-btvl}9XPeB|&=suD*|#U8@JbD<^1{-Z43ACA zqh}*VkpJ@IGx_1+3wfqQd1`i1&nroLOF?d2?Umnrc3uAPL@Z;1Z^~KVM+DM34J&$kTf6Bq{DA2nE)vKS?iuu-~lr8MwE>#zfw}HY3a3Di;W!Po&mXDpEa^A zN{}r!G9;O2sGxMQ^y)KGP)daDbsvP-h;n)#CBkRUqfkjyM3O(>dJ+ZzBtCO}J%q~! zM7gd-Npg>pVMy{#$+03It`@jqwB3~);o+JFCEM5;VlLw!y@#N0Zk1$yaoLu%e)3{W zeth&wzWw>Re5Zu@!INQmIWnc+uj*rGrK_V^?%f!W-+ggYey?QttNT~w+F+NGWg50V zn380y_SA)y50-U>S<|iI^YEt+I=D}TFaw?uWkurIcy1@nY$18%$rbiNdEfgTzj4CM zH7Pf&C@2ZGe7>xRg!y74$Z;UN>l^E`ytHiAQ^KQBExw>hK$smLNDRN-Z42lUWPyEr zc9~TVN$ewztLlZ|zr25Yx=28-E$;02xQr@chB&iWNzfZiUPB+0O}`LEuB*FK2DBV{ z`}?dMh(~-G%HcSGn-8l)qJQy!rEHlnss*I~k-MNDO52oYcE?h0^G{S)oK-ne*Pjw$ z2Iy~A{G(nN*bpIRLkHR9nRZWpz0SxwMnnvbS{g=}>l^A#kH3pkdt~Dfu(f6c%)++e3yg($U5PQi#;b{?7*Y#4UWOo#DCt$gs|2{ha?*ruW8&Q$ zmSRn|eX3-c?;y&vN|mS>E1|)F=69&o(s!qLSA&j=_Tz9)^r3lIaQPwBa`yes@t~Juk>#KtZ<3&d#%oiJ>ZbFm- z28|0^cjy2J49ED+=U%wj^P9b?ta6W)6`c{5*X>cF*e5;RUFIKs9(BR{0$If(I;Aph z6Pw1y&A*lqXn`y+@W6-zNnpja7U}N`ud%x+2bJZ^P!7idl^T<;E!7_k)CkFm#Tfz? zw1J+pS$AVqLtc29Uv?=K|!n=f3cT7L)mVGA9nY9-ptXn0wmT-^2 za=i39M6OtPrOEeoYbhM75dMwx6PF4j$19V897DPx$V$coK~5~kiF*YFXC*@JjQ~Ub zbPG8)Vw@x^AWe3h^Ef{#F%v9JTHtRH;~ncUTh7saYfAb%$YyoDNNuxZ>f0rU%SB;O ziSjkcwB0g`GAZHp%ba%|TnFglHH+c=XC8 zt;1CYFgoC%Tq#4!p*k;_ng%_OGTD8W(*#1lA7Q4kUsl2lc-FL~nQ|~Ihb9_7pIres z(c7;a{Cl?PvVcUgrTiewyh_B< zSd`JX^$>zcgA#(2bcfQVl2RflATTsY4xK}ZAV_yJq=6>4-M4Pi0E8xRfoiW=;av3BU1_?~P4D;9WVz9+Jg)soQSmg+h<%0pPqcWin^xhsPc-|25#f}V&p0Zc zTGNK%z6-x9kN?WiwVCnj8zOzst4FerWt3I=^Tf+Sy3h6)X;xru%y|@j>$)SEB@UYf z{35rI<5HF*(=?I(3zS{gSA%0v>gIhy`DG&a#&e~1=Ark}c7zG#$j5X4QufW;2eU6m z^68BPk^~z~HI5q5&aIE<;HP(Id%iwEy0UUd8tniHVcSXm_P|S)YED>+^0<wOALcM5F(Td!p~LMP3R$chc9f0x={e;dJ9ZdLv; zLX5k0uo8o| zryt+w8wp(Dzg*F6{ap9~%KcB`;f+R&Q}o~_{`LKZ?#H#my=$)TyCbONx4c(>9w>By zTXJ)DPCtLvv-+gUb){f zjiNws=Ns0otKB9hi(6>$??{{-zE?pLXa~^gZftoPr0C5hbB+)1i|L>)6_0i9ODU`# zqqSmBbaIlKSxUtm)j~w4#?GyqJ&Tmvo7@xwE_(UchQ%Ds5=wDam&l%c)X8p1-5O>8 zC~Qly51Yfm{bCpXu#zrq@{aS5$Tv!B-jVN0A%YfWTjJUD1QU-*-n*x1lBAOdYCjfX z3VdbMAT4+046%L+@L67-Ox$iWT;DbtirG)Yp7ifHtLBgAr@K<4v|jsAr5MJkOePs; zT$9BwFf>n@o5eIT*#*9qzu#R+!wi-C*V5)}z&? zCQ?{rFG4CxP6XDrlPj~_g;D7w36hqUX)WQZ#-%u_F!&tp9mL5}fp_*r+Vo8VCDsM~ zi8x7z>@9FmgK!w4(On?hg0mJ*4D8aLz>oXD;wZ18)oSEJmE+>$W82@Q&g&Fd+J{En z{+756U_Pfwq!BlE?;_fnXCD2`k)efZ3$+hRA>bE{Irg6*#~3n_Rw+p1FboB?NRb@0 zSPE*B^0-h$cZE||VmQ4<3CJady({FO25*l;G8w2`rMIki$;EcaRES+Ttd}c{mBVtj z5BmxCl8W&1cR<08XM?KngN4SfMM{^|fm8@^{^(792Zee2y9rt`yY2KW$8Xm2dI@15 z0e-@=u2f`-k(qoA-#qINKgIr4vUlkbV1;H=Y({dyDt0mVedOMm@E39;d(z+1&pE1- z`cJeOa^ikyg&}^J0MnOyFJRDDdQqtu|65Vxq+Z19VNIPpAfBHj{Al#e)mH63YFWVP z%d4p6`RhWH*ljw>Kr8&K*jbvT4=6H^020EmJwJxAsJGh0iJ??1IFP$Z{M7i6E8_XT z7f!Z{Zv<?kBp7kntX!o^L3(mCcbe&Z(3&~iE>++%rf#W&0CPe-2#w71Z zIW#|vwl&rcoXMmsm8A;aWd_8}W_eb;FVpvZ zg)_;jKo{u>RrGx!ZN(z~X9djijbK{S^_$u^ntiH-3~f~39Hy+Yrth;wM8EM;=f|d9 zlRGg+$)tQ*-~M5g=tm>u6vqoEC#<1Zb7(hl9o2JuBH2KxOmKMU~9wmRj47+1` z7>C_6J)p-)M`~_;-G{z};!vjod)vu8tiWWDSudUWNn+h5V4kdh2=6BlTy_Uuq|n{0t%;MeL?Ch=X)s88n-1Gd?@n zUH<#mVf{2!eJbYR)|$weTo7f+pt~iC#Cqe~YcJ1=uaV}ah+>j4?B5*II!mGpq$skbpN*8~iM5G`h+xI;zZ&mN zD$i1ZUZPdMjLN{dfo3ri^re89XajMjH6>xDVy!#zbrS= zLh2N~ulqChxFR$#M7l=dHI@0>w$~=94v`5~WrOM)(>(!r=26Mb2IHLxQH)gyj)u{( z`$t&VtrhPbU0f8|ZGH+1i}H;Fqldd~3aGCB-TbJ;MEZCzynLlUpLLjrEd8fq)6TwK z;{Llf)Yah|!*ZlpMmyB&(~%Lfae&5WU!AkmSq=wLRn4m2Qx^(M63ndhu6U1+?Vmw9 zO6LNJAk~n72xZOu_4|piR1cMKG}DZ|e~YugCe)hUTM?Q*uc@C}Y20cZ`Q14>5|FdX zH|j9>@-qnqv5dwR{Vqy{1OFyzI3_R^7@`^E*W`zX=x!4b9w=x%YYI&d#hc=%wJjVT zvKkmpsnKe+WO}F1B@m*x#S+x=Rw;fqdG=Xk+M9t_x9%P^G`h`miH=Noe>O{`SZJ!Q zsY`>%$-i~lsEN!WhBsP`w6B0EgFP({ghEe!Lh@1Nif`_X0^)VR4e_gQ_%Pb+GIwwK z&vnB@Vh4F@pX*3}LG|W8AJ*L2mF?N1+6cg7nYSV9zx?1qHCHhOwE94 zChBYAxD#Oj50LE0;o+1O)z+L^!8j*!<8yFuI9d6n2uB6&eVBadcRmlB5Qi7~AJv?! z&Sk0F(0L1NBV-@mCX|n7%DK|2A+}tZ3N_swG5Nvz0KK@B?f1U5M1Njl9(Zh@5XI_7 z^eqd6PW~G?IX3*%`caj4v%!u5H@yn<-nI69f+Guqnywg^YG1}kPutvbCu#Zz=NFf( z>ys8eYM;Lue5hHRD1kZ7-7@extS|&xu%C6UIpUNU+PvF{B_F$F~LZV@9Fc4x1tzc(b)7^!KUHM znN%l7ZIa|w`WD_|k55Ie<=d`h@Aru}u|nwI{ywXvplKf_CjMMZ{X#!xo0@9G#^(T| z!{mPR#l&zP#7)It`hNHu=B|msI)|_p5BHIa2EV_%{#;;8if#;iJ3tO3A(V}$cAm|x zbT^I+9=aH%ZfMXPrk*ESv(5tc5V`wQc~+*m1brtJ{Z96841L0B_RT!InVVb!&wtKy zkO=ULx(>LIkLIHOCqnt=9jsnh-h}Ku|MB}n<>cBaj*VfXQV$imfo;-qm~j`;BVFb{ z4i%5~g-?=C3_i1rhOgW8J{HWb2-HlF%f{l~HBIXCP$e@i>tH<(sb7$lB0ooaRdkAa z__sp1m3Z5%C7hm?4AM1^&egwHig03&Ee%ZozJ*mw*C)WU65w%8?;8%oESZw@lSerW zR9{hT_f?pN&e>-WcFQUxiZL`9m2vN~CG^7GC#mQ#Ad;EFRp<0Z!ELudC8C(45)naR zrE=;JKX14EMf=m#QbOuIhH!gm^x|0YU>nR{5THt6dQ8F8nce&6DCJdoPEI`UVotU6 z=HUY42*lyQf-xE{(VyU7CNeE!=i&8fzAGE>_(-1~7M|JBy@~S}o0p=uMcc!NacwwL z%~Am__wptBesX)hRqk%na20lm;d~(vsNz+~Bhz~X1kA8*vR`4`OcT+$MyjA`+h9}@)Db1|VLCXoWrmF`lS@%GDp?=Zk* z{KtL-SO!!zdB`k4N2x;r>cH%o@jgc5OK=||7-)^wk;4pRNN1NS~w?-ag*G2=o z%}x^XllA-aZvUM5EK?hO(hl0P2UM}PzARe2%Nld##iZ<+2AGHiZdkJI$x<8KR!lb6f`5rBmO+`s`UbbW|(&u zUl>AF&lO;m$rQDL;JfQ(Gh(g}f{;ElkY6}7|4eH~Hjq`RDU^BRLY#glRb-G$?+Za^WB-@kTG4a$9 zy-8Q!m?vNk!HV6`Gx49j+Y*EA23)kR7p2At0lbx>{V4~vu~Q1IcsZkr225`MQLhRF zUJc_)x8E>RyyH}VBxm&YlR9@@vKc7Im!ckdLKtY|Xd55gQ2@C+u%T`ErVPlt4fw4P z=B-b!c8N$eu^wqi{z+9l`nZMt#6C$`Hc=w?>ilrI`6HJ2&GH3~zc@?fvp)!UV(aQ% z6~X@9mfV_dd%_{$6)(0xDc0mqiYon5Y(fYwCsU&Ip@Vs7nS|m%btXHxfBwd|>9;$_ zSE1QLPG1s(Kc?DKf!s-Laby&&q9xA6?r2lFa;{h zz2U3JLM?wc^fUQ~6f^Z0JRl9|a;6J2N{-^jiIzu2?+fMK9(?Y*#g2wNw-s2e`sm0j z*!jKwyHkBdqS8)ZiB4-~t47@m*g&=GjEgh1pol7#U3LM~WgFQ#3VQgp+=BM1j~`ha zl&_78T9L>b%fM6fyf$qF*F=~> zDhM@FWa1vv>Bimn#_@*65>SU3G`>vR67>{d(czZ~5X*hZXzQaHET3bow$C^e)CQXR z)kiJVd<0b|pz#HSpW}=cd{-t4m6ov)jn)cMB>p3JK%?xqX@!-6Md)R!Caz{LB72CR zX6*fafIc?FTdpsONT>{F=d!9$>r2$ud!lcpr96xM&oan=N!}02M*i(eD2O=7|ZW`l#zoa>Tx5$X4FX)&gzJh4!H^v>p$W!22DgZ6d{uOq^fy>{?69@j4 znL%tiY@fBZaW6X^xTQL_zU38QPd#3phB$pbjy=AOb`!H$v^4r%OX0_P`ZC>KH7=ft z^PaonY+C@O(v%G7GLJ>d84b_tu1DV7;qzRf$mc_n>%sOAjX)YV?jU5>t&x|DOI~XW zbiuf_W@fd?x1@D)-6suXWH<&(#Zib<%Y4;=jGGUJ5t;6?MkNRCiRxuVuR_Ae6Y)(K z_nV5nQ$?I;^<{m+YKb31gM)ypObnq zN4wNHWDHXJo!e^VKhc_?^u!4~eFl8<`?I+^D+;+&y0}<##t-%(W!TDTut+((b@5FR zYwLioJ?Pnp_`Qihr)F1Yo%A18@5F6!Ipr)v4d3I1bAj)S0gK2ZgwR@y{gWnQLEi5y zSk8=^lcVRR;tyLwTbR~0=@;V)v)Blm1NWjE%h{>_ew1HEl2cm5$#c5rV`RTm#)%S zq9ZIw7zOF-ShD9bx`E*xc>_KqXslI@|f(P2$5U&r^=>q1&MI)(n6s5n6q2| zPB@l#`TXZWy#TtYnNNU!(VL;3U_#yRnKYY2zPuoS5cfu!ctCP#w0StFtTyg0g~=e} zzIN1hSA%2%>UP3?;l<=jrB8B9#3WK6&DGZ3&w5GB+zcFr;pG( zK_{T`krR-s3hG<|UE2$YV*+I+^}t!L+E7+TFjZs?Iwd=DRpQR##AerkzY5ILfx7Z` zeKkJmOpu9Mkn3F3yMmDG^Zp4vQ1YSao2xZ^Uz4X3 z3v&1$Bi8!2ZzI|xkEHd+1!(=bg0AorX z>%k+R1)&7si)ZB!PS8O%mxv2?V3Y+}3}2aPbL3|IGK~>@P945dGDA}^lQ$F2)q@Y0 zt)Ts9v#{%$o5NHu>{oI}IhC@9b2#*J)sq4hsg?F3vj-*VM+YT;$Nj;MM#(nZ4ls$&!^W2NjMz2CA?El9)Uvws5GMC+}l=tbir zgnXzUey_>zjO>I0hHcD+g=i*%@t%Lp{jUcy^!(8Xr-i&I&~sUU5kI_@E=Ynu=*k1I zJBpWPGo@pcv&kU1oh{aUV@9xJrz`Q^E`5A__Rsi0p1;WlQjIMa!--9(*}q*?0?WVmAF3w;)i=S)NLZ6M!kjv z0=I>k8L%%5msq@{uO{Sii2w8O2e~tuDqR(bB%q7fV>iEy#zldRJ@20gO6~ChoRLDB zNEgDvaF~~Le*oR1ZjPWiY?_DS_1nA~(!huPBhbUW-m2W~Ug=S*RBX%q$z2rS+Rbe> z6usS|HoT2PPgt+NSJCfrhBC+A>g@$g?AppQGF^ikosS%_5#25KjiHTDebqH5*{hai z&nIDts&oI`z(4eKZ1_EO)FAl!_dZ5}D;g%3`I#9~5|vPf{|P`a-gVM$d5}*k%i>%q zV7QWkx3NGSu>NzHIOs7EP8aQm7xGK%SIxojL}krJXX%y7``yeV#sFgw0=>7ltz`l~ zk=e!;+>W5eN(e^S>ru7t>+vH9Xru?<@;O{)N?CaAl{jrxb;3J6w}BwJw#>i$YfFvI zsMe@w>%Qkz`=Tb6ycefkF-L0Ic}D9k{K>9he3p+AgQTvllaqk+fU? z_j`X7G0K=K(QFVY{XqC7*VhWZ03ZJN$(=s-AyN_s`g6ez3w3}K#z`ZRH!}tH9rn-U z;1Sfz_UrISl?Djz*MMfKY_g5pnP#W!m072~uI*K#IPi(hm5<%g$L*}Wwr!sOOZAQ*qW$g)Gnc$)5hs2&0v^+ZVkkvc9W}Xq zYku&Y#tAp(7m49{5bA%jAG1jPg;;_xu_vM^b`bRU1fdy~7Hq%4Vb9N%<7mCdL%<@* zC#S8@>PuFQhCg-tfS!>S1eTn6{cDUDfqYl?f8SG#CCC`r&}~{HNyEx`2O##*NM*!KjfbEqk~1=Ka+fBLIT=*8IO~3#P#AC`S{ z_G$(?$^a1mTd63OaZF{2B;1y`s9hkg>)w-&Slxh{X?_6w3^|nvz5A!#c=)vmcSvV- z#sOeeS*sa~+Fnh%guBh}J(~yAO%Mt&UG;PeoKw~ov@aV6#Naw?2TKvI&^?RISeM6n z&0<(UUGujwCI$>c&7v6jN|Vv=k`Qw-T6ugB?%mAt@*PJ1r>iw4jM3*-t%W6{NRB}0 z(vq;OdV*q0mWltznWe>}X!f(i{=zv9(E0EnG6@rl=&8ipx@A|V8e%YXXq>S~&qpmw zxQbrBnbPww7~yR>lu6=~G|n3xWF<7zxQU*vkZPOJ;P`O=JvKru^l?G*g|Lws>^2Uv zi}z@dQpK9&!CC=+l`3H3sRfZm0^5Aa*VR4TFhy#y)~0p3xXsKp{ElJgE3S%zQ#(oX zAA2`95xDIiDUUtffw^5MOzSEEwm(~{w~Dc8Lbon1E*_1fix|w2nvu~K%}s*Wx1fxnQg)c*rFB*{*hs{r;y$#HS4bZ2HRO9D2a&B+spPu)N#y-c zb#1_^=P5Ic=7C0|k+Z)!yd&Ni8w?e4SbE#qat#srp>QZHeKES{S|<;ydOs>J z9$7*{!c~llpYk^m( zNr#m(Ug*Hj&%gEksPJRGTbm(s*y3#OOlgdl{81ih;TWPe_?hW1K`3<;?Pl9L zpfoBuIr*p+dE_3;SZUdUKp>9xW_bvN@j9d@v)bnWwAlKT~%PT5E8OFW?f$FOc zl#9W#{FsxUQTCwy>Rj`}(($z;zk!9++2mJ~%n=ur9UU*v>|2v|D80Wgm*c4_+o6$x z@gak(?^9nWgM|lmVxwD$4m-XyJTd&<;8`|_sP0Z5sRdJ>U(n7M^)Pk)=(e>NdF7Zc z*|CUy)vtueC)#n6ke!(X8LQm5-Zh}ZP6T;;TYcczxWEoX3$?Q0C2b_}?i$I93Y*haRLE6bzAuo58bJI`F>1*n@* z0+gKN0r%@(B9I3yth9$8mp3LJBB>8P0E9qGNp1Ym3`V#o$MU|2_>uSZjO)TCW*7Gh z6&R`F-2JoaO%zhco5Q8Win=@J1e~t6UbIMgAw5YMWS?}jrGy*?Tz7jzWmMJ500jHd8d#B#^`#(e$mk*cc zXB%CTUr0(g9xEZrtGqJJ=oZ?bUB`vZ!-1Nj{#`p=kIBOBXQu)Eqww+| zy~dNXhebyeL*NxAuPguEpFK=E2A~^PKOo`n>O!y^M{G)!&;TGHvT zeuC~AUG6@K`EA0EtSjyngDqixCj%?J6_f$-wa1K%SOl3u1sWj3AhTL`rjU4J{hes) z&DN&0VGA|t-frWau`Jodq1t=a4!0l&;8y*m1AB`MmN(#4)CFP~gW#&A3O_9XpkwX7 zp{jTAO_yU7ET0KBSlUxq=hj<(-OT_;<7_=Id?F}kusv(AAIv^J_E%b$;FU<99A3+eAY=leG8r?c#>(sC&qdU`ybXU5XH8Oux1wl>2D(xsGOlENjenpwx5N9si@yEWDP z*u1?twdK^^nkFsoLXI9-TNbC=%UCajo!6fuU^D_8!|CAmib3eX%z6aWDlsnyKuf!Ag zd#2wAaoVm(h(>UOPh}&-(tqg^+9nnIB{EN=E0xJTqkyp#YHYIkuChD#q(N|mvT@RBR*2z zOT|%ylj1^uw#@bQL}#4|zZw;1NYW}85g^uqKMQ-^W)}~7;l&Z#jX+oEhFM=os?%DD zudlVII0>j4LjCTZBkSrf`vle2YNVX}3}5u`pEQ8`_rYntQ7N;(WwvwjXs1QE^!QQY zIRXrTWOL8nEg9p$B|i_ifm&DeQbB>w23wWm?hHHc=s>h2bO~*P_OXShyDp&>88$s6 zNDLD6!q|MPXM%8ICH!^qi@7-YhsQ@-6$?B*2pq=!5KZ@5?>A1`uiIP;D{=WyAG#ME zE)@j+NX5T$R?wfUg(-}1X7b8HE<8RmTtja6$35F<*9~vSv|f5#RPU`_w`qoGgVqa9 zTKr^}o8KJO>s+@{4t3W(Q!PH~`V;kXPqw0eNQXoCVbyEhiZd^+W5&-h`qg#IEZWg( zSj$-KZQmeVsi7HJdbuXc0QFT91x;wS5B5I?Ev2!6cxw89p17Cun%9j@O-YiM4Ze(F zf6D&6YyA?~AnTz4*KyA|6#z<)t4geG2>IDO0v(MQo%oHr&9h)mfurP+})=9Hv z&hbgY7h8*rbHC(1J^Mo5;qB*EAd4@)wszdmmU@ysygtr-%3{Jx!L*=CHKq|zJ>`hi zd*Xk8H0qc36wsVW98B@n#V#*XvQ6KH71BDTF>ZqVMOERUgZ3Cw%qh(RZQi)}#*wn* zTjtj7ZXC7w?Xt1Mr9DzpaCrOGA69O`&nus{0Ok3ZPrl0do^lEREV=O(BGn?BX%Q$C zLhNZy0(T_#mw@4d_^wM4ibNGjr9w|~LSmm;fk(-%dc3E*r@S9mJfDsSyifWG@sZij z2@9UWyIM5r;v83$jSBLGjZ=&p#>`+g6t*0D^<+a%pUf+O2X@03Lcx?CiMrn`D z5yyH++h(}tu+cisq`k(KOrG1@qI)ZSgSy?8N9({WdQO~6N5WC?xDiSpUFd)PHESTX zZf`WsaA6QjcxrQ0T#IGc` z+m@xXyT1$hc8v)q9+>tfG$BH?S&_ab(55sG3BQItNdHeox!A@~X<6{`@0;sPPzZHw zKCpH-8NNF0)r)?ve-`4s(EK~lKJu1?M+)WqYPPoOnJDRGZ!{+i&gRZ?>UDnr-nwgl z`#7VlIU}a-_yy(p-B4VLQK5QolOp>xF#0U}b|CZgtpzqiPpY;P7~*s4nv*z7|M2Zc zF(9VqwM{{rC6WnQ*%F98Y+MBepqG#Sb}JM74!BMfXjyKQQ^W7$e8`N_gQb_v!c}Q! z*R-2?nAq-)EPn^ZAQ$@oNVOU^6bx2NzM?BB+m^{S-;_>eO0@V6{mOGiXjs5-6JL{@ zTAJ0#bC{45%@J8%S@`mXy>%Uo*0{hBXJH2wzoMb85`8(tsjY580ol>Q(H8DkOny1c z8UoRT<2w8%ife4hyjE?eXo7eX5Glz^WKJ*jEvNh~i(^#;kAd7XFssgT=e%^0wd3nE zy@v_dGGz6=&8(S+z1&o4AA`rh!p;UrvguUo_}zhM zgXcjbvb@SNi^KmMA;5J7DYt{45judd11VP>UyJd@bF%+JQ2FIr?q?gh-k|urXNFkcO)7u%RU($p8X)WY4N%@fpV;|;Wk;ENjmG4) z&88l9x$FK@ZqSYK()I;TcDW)DtFHGYgaAi~G1vP9{iLMn6zybvMUBt~-rKB>d<1Vd zx`_$1`&^HN0$d^I@y`8h-v(5$u<>5mR0~s3kEQC-<_;0-GG~2XN`Aji=o9XK!IEQf z5RQisWP;0+fkD_BwtDk(*jbgVX~zc@EQdwb4n2x;;aGR~cQ>mcKLBH!M<+v@D;jP0 z?lSxKwkt>fLY}Gw5V6GK#<^kagVUH+#>cx!PRB&6E+yy-3Sgk0pCT?WEA!KxOCAT^WN?1)ONhnp? zGdVjULe`-pXRX-r2!H~n*8xCFwR>rm#lA}|$twoshU57XQOr2`5r16G=3F{9oJT5= zdgD|3#bwxx7ED6k`J-=j3LSB{a^#EyQ*hX>d@ifrR;Y`*Lf%3uF5him-<~sH{km6v zSb;H~wYgQcT6B@SUU8!M7-sth)2rk(B}zu^`lsa*6;N-tmbLA#wN@{1M)uz443JkI zec73aY1{K?m>o9$;*l!r!F0LvRqQM%FEt1Kx_0{+27lUP11yEAT zc+t&ay{kD2SG_GR*vX~L8o+O!X;^j1WA7p@AnvL^CLQS6Zan++(k5eCQIf0Dnsg^2 z+JAHms;=dU-uN*Z1r5fuu?P7ZO5l^r#)}|!yZy8qB0L;7OjM0WB4qqDkk|Lj90iCP z!>PhVuDys@!8e)?A&mtM>QXrhkWHJIk`wxL_|C~npY?!YCF6C*p+do()O*W(3I8ZQ z+wpv&I(t8otw{pFh|tZFH^T~n;H_|nASnjZ{`>TTlE!cK^n99uUhYb=<0N%;ZV$P6 zZ4CIg?y>xq@3w8L70|DBKjAU{uNhNff8^j5dnbeh7r*^F#*0De?oL1$jP4f>jh4x^ zVzwt1FV3jwSvD+tcWN5^W#AE+vwQGO^#niQceEC6Tn&}}xp}-;o67w!+>Xc2Z*q<0 zpOETi&c;4@6>PH-^b|3edXcdqmJi>1H_2)A?N1XYjX+1A5>4u*afXqr2-!$darJ0S zKXCz~^Ni+}Hc%*DNjc+r2%M=fT^Kdha;q|=UC%Z}B%C2btPN}iK40zlL|Hi;G$tGVxX_i1=w1n|+Ua35AmmvtJql8hSqgz{^xl*qZ_={*C zAC+n*JNaC z)4)>If(EKdLl1oCv*>`qV?cvY09q>6%#b-TRn~la(I17eSC#f^VRBrWRWU?;%;U4v zrmOdoYnLOSwWJ()dH3dW)j=wOnu(t{Qxo4r$>*zQ3OyC$pq4Mnt=Al6GW>3JW}bVr z8#f+aV_DcGJf!poCOaS+H`-48`JTO#(3b_0C13TIorF2$S}{FcZzmOcQqre+{VC?@ zCVxlSSfcx$U?I_+qSMF58%aypxnrr&%uf}cw!x2d7D~g(F^;y^b~QaYb)Uq=0k+Fa zl!>_h9}}gd)kr=2@~A)O(!EaiOYkITEL{=nXOw1%UHaR_%8DG0?Av>1C-C-LdhNqmgvqLt1qot=~vU);tJ@6<;5CS0jHq-AYi^%jA_w!bO_f zRX{E8$2+;%$TnFHp>bJsx-)%wZuG$l*k8&zOf2E%6WvKz( zy#oCz{$+Om7Glx%+9)x96U(o)2Ri;FyCGnbX>jb-c&K;@7rfyh(xQ=Mnndpv-{B2w zzx>;nW%OO>FENgi_c1LMPG;SuaA3u?!unSoS-QKio9^(*)B<1Gvu5AIlfchRo$EtR z49#$}%0xUfdHC3>->wJN*V{s;>wGLDOH*sz!PNHY&v!lgn~cpJBEsSL#2t1wyMn*H zf8A-Y7tXF_u+HMDW)3#Lu@ed!z_3;?)zr8ka5dTj;ZM@BsQj{1Cgo-nhH_TD<6BJ_ z_wgWNh`Y!t#2u##_lQ16w32P`3E)72Q|3tx_Igu`A|s{po*mW&~ z@0hi`gt1gaku%!AebR`>4uY=Z+zwrKLtH+#cgk|S%+rDETuBGQb>zetTEuQrb48Xo zp`%`amXW5{_$GgA&3>@ z*h;e3-q?nCVPjJ!Um{g0ZZI`&DRI;86%c3PVexYJ(id**`CvQ5BCl&kW@e*A&ptq- z!^4Z9?Fl*Y{HMHB4am@%o2x~BH%N+JC*IEO9&8;zEAl_g-{TL;EyT|$M4$2Rju{+j=nLN*={uWrVY%X zOzL#ybQ=SGMKnFkh_IZjzc&7)N2iv#r+C~;$421MaT_^693U)6-yts3k3r6iy7&Ts z@;)b#r@~sJCTaqx)7?{dkix**L9)4y%xid+(!b z8bafhV}kRCw%v-i56n!o-PBboBKQNpv~zyxy8+#s8Eq-7#B(B?!ZB!e%6PJwISV6L z$a^Ez6WHv^hX2$hKj^Vm?V{9%jz2I6R5!k+w5P4tOODfs=Kwi-M@O%`T%t8I4UgCk zAy4Y-_@(9ZlG||*C$7W7f+<1Zohk!OfX62<9MT*KwI(PNRL#bsLm=mMy0ci7GL}p4 z#*1-#^v595>e%@TL^aXhI5a;51hFv) zfprBaRRsi9v!`QZf!g=p^OqW01H`6Qxi8r6x?7DJ^T^6ieZ*b1Qe^9rfq9SH?B^BR3#B7(2Eh%se&@JP|*&61wQ>0!;QTS{c zJF2Z7a0>R2h_;oEPDlDoeK-+3Wn%BM#0HF}-2nCa5O1CWd`i0JO zVK$M+;GjNO`A7emT&jR{OYlYfN1zw0uPB~fd0n-6B<3qY6((!lM*PpfIu`<(*-Jo2gvZ**V(*2*9GhHyR1LkSwx6uSrM_5PVtPd*Vj_9mq5_Iw>Rj-YYi zvRwWk{Kq+oFO|I@01rp0HF*5hQII8(b+f9F?6C5kk3Z*cL>-*a5n z2ZRYZ;|;=%Aw_Q#X>aXzKSlaBM5{~{d6{55Pka1WZoyroW>j4 zMHxc+A=eQ(gj6cd=ffjTB(ma?8ji)f`ZDmUxxLBK`8=g=(DBWCt-F}WG3@Vz+xvVG zY+_3~ht6DT8AQFlSmCnkC(f}Sm%=B^B)@)&0AG#Os$o60J3gvp&`n?--cK1o%7Not z7o``K*&NsW4);dxpWe}h{ki_dz+{*hk)*1Z`V9BFV+=6B4rgc7!vSMFs$X(gS&mso ztK&rQ=Si3F^cS^fe9D|`(a67ieFF>+e^#>dP!$Z#6$Nt)kkaMHI@rzPxsEAiuvWbo z@ER4ZEoXnTGYDY8DhP4^)Ko@9hQdK&5VnKSo8^OM%a=xQh2CcCE zB{Nbq;-ehpG^*^pLCA4q(h=Lv(bD9U)UW#pkiizq4r;qslreIkVu;ZMBq%L_qMg|T zYF$~P3%(8llyxHw_1Nj`9R^iBg900r+xI3!?dDnaVeS$HgU&_2ZEEiZY+%)Q-Ykwz z0i?%BepvTJ|D%!4I_WNAfNbr8MyqBouY>5ltUq)2%U{$^p3~6IplXX%?8`ADQq$W- z*zPa62gcT2$nE&*2=#-S7~RF&B+SG|9!wXYYmq{t%zotPpz{TTa8}lKQ2IEpc2;i z%%u>+GQHXURe8RmS1DCltEvQ<)L25#_r|Is_;5S0e23Wia#aXM_v-8MB6oEao`B}X zC(0bH_xow9BL4sv&u`rUiq8{q@$!rhOP=3)Mi`gVyb-EH@IA_)QN&3bZy%NxUKh;T z%`;Xv^$^7)z>&sThRQ3`)*+%Fyz$+!T6~PshJ)xa^WoKEfYuq$EiFEX{v{~*qjgZ` zl)Gvr|B*3I(lT5jxiiNB&xOmXV|My-qu>C})4|~7QDHC2@m#imU2U`Q1-~2;Q1CSb zJxKht;8qDLi08JZ${+$OItX1!*N>V zgtCcAdlumQ9>?g{dqU#bE(X4dd1vhqfr>vRqzX7>EsYJ5R9U=CZSM`4fo<4SZ1sSo zgT^revYfJt?TF{n)hJ1BNQ_cZ$YAUJQLF0AUg-K;3h$>UpSCRHj_?m=*s){)S9)sC!-bo=&AX7vDln^_47wn zI2jWD!da|2h%5HYXRz@bM#}ojXnIQtGZT%4@`_{8T8o1(FD(iL87LJFS@9(dVlV_^ zf9YqAmZZdlv^c;RdolZ}UFq%SkS~ui8o^}^Y}NQ&<|^tx)DXHl;iR{ZborUZ4IANe zPfZoSyx57?==W;%^FkJ<(r3qd@)hGt^`*w0X&dqdBC0Ml{$E#T9Tipd_WJ>pkW^Gk zKoluax?up3E@_eOF3F)00g-_rhHmLrx*Nu!2I(Gz8EFQF9_sRY?|bii*FArpb@tkO zo&D^!&-w1>`+0~C;!BplE;w4j71U)8=WSYjP7KW!0Xz{+6Bl zV4fRgk)S)*%<=S{NKtcZBf_}qi?hY>b)L9wKlmxh5HfpWuv{s!Z*t2+{h@@&kRvkn z+lZO+^Bb$+gx^uc#m3)C@Xp`VSdDgPt5~Fin-sy7llS+RS{8$5yTpx*T?u4D!^0Zy z`MTJ3BXx!+0n7@=J%{;9m3H|3U_0of5EEfRxvJxbdnz%+z|+$5GHn{H4J{#1T% z^%SM(C|nXCvmqOq59AKf2H~Dz^&5AUb*$+JIo3rB_0NATp5lTZ-6tEu`>s{RoAfmG z`k!2=k&8-MECVj|mm?Ed_+0Zt-A>t&yfFg6D$C$d|GP!>^In>x~WU3jRe zn6D3M^#?*s+zOPQ+{XE>$oYmbf7Z>Z>A0FyJl0vLW6S-M;#h;_BG(ockS-17C5Y&BI9z#A5N2mIWuDvQ>MIW#n>4(r1T}zoPJ;l(z#%B$851Vzu;7Q#~d> zax4KbmHj{a_Hq8ugG5H^?;mn5RLeZyEPJ2;2vpw;V0$-KFY~)z$cK{9VS z7Cpo^^h#iXVGq(+xBl+yzUW@@tl3^M&w{o04^SmcdHHJ46u)~&4}!XzD`bS6ou4pVDDIeCx@W%qf>cXgbY2!|@~5GxIs5`G#i>LDgRToyc$3&5&WV_*9jDbe@jfI5upr?H2MQN~9 z_z0WyRKw93aYN_os8aVXzx`P>JDrfiVo|l9@6A=q@x8+ZI>H1db0% zr{a!$Uj^kPW&f@TdvoVQ#6-7uOo$LcgB?t-xk<6Tx_-ZP{T~lZ%^dpG_(-~K?gmC^ zm)7Bg7tqm{rgU?VQ{Z3o_XdH4S?mXXS%sW=S_}+_EiU)yOLh^ZHDOL}862?NC=NGi zZ0YL`Z3*w1ON+();I*i#2Z!F#6e%ey&grzm?S1jsddv@v%PG!1VyW@#g7lWhS_RPr^kHvGDYBSs3i3@K4IAawi)1H zBGFkasjm)Ow)#y~>W}`97W^Wu^z}&rPM(1X&X?f$j$Vn+-KOdpelOYq_+f)tYOt>Z z-?s|uG4GNw>BgLozWl9c7B;E8gRDPqit`dIHV`#++05)0Iq|p{Wlgb5Cm=Pe{$BO-1 zwo>WanJG>KNQ=6-%M22jy{*mcz|r94-BzwtZ>XV;nkK2GgnY{~#if`j={MupsR%mE zxOysp`H#s(ZSq2hx%2OvMDwrP$U!+HEUl0`V9Ff@(Yk*^CeJZ$ zXILlv>Ni5}iSP%ak;V8)4NmuI4;h5^h0hT<;MQ;@h05yNZ`q|nnah#yQfE_YrxCQ} z{=bM{Ha7cp0zOTZkX`>#enb1ET$Ap(;8;neohe^4sv*trh{x%g9l-0Uzx66?RtNAozw7v1hGQ;z=6j-x`JV;PpL

=ru z@G1WC2fNTGxV0Ofj41(3IJ5?MVsPqhT!7-~a$;b#mYyq9K4A(0?v0LEEc(%YZ@=Wv zAlF^WuZ0N0kIoSSgOdCgBj<@$?<5i@9chTZG<%hhXAhqTSEvAtom8E6O85E;u5HXy zfBUSLq=qp5OAlAd2IqTizF74C8#tra0S-8s0V*~O(9*Bl#^%R8t{hGAaxX#Fx=s&% z7L9JHId^-$_<#gp<}_u{x!uo(IvR{wVm^FfaBuFD4XxP_)3Y2! z*!sWALO_>BD-|M(hxnn&U#1Y>I1sfy-?I~+wP@E5R2_0@5*x5k=qM_5F^TKS+i)r1ë*C0WoFtoEMDK164SJk_z3 zR1PX|QJPEsO!(dOzR6*oD#^mLSB=hnN>H2Bdd4f^&AEDf025K(tB?ZVw)K|KjY@$i zr{)Q|OwSj=YdRXLuAVI7p0zCz*>$#Uh!2tY`I!ndCeZS=g^o~q;Q?PJlB-Tj^5LyMGpXpwu-19(CkdZ*rV7f2zXu?F zoDbS_I`7=2X$6Z=H5`h@lwT(em0=3cB#bN{72P`fQMcO2ISvL#?W4a+04KW;z{|?Z zwHQR3k%(JyPGW4+3B0F}qHXWsEbJ<}=CJO~9y>!|wo4Ua9jc5y`z>%o2$*=m2u%vtTgI#5`?2}H6K3zpY zG~#h+TKhbysmJvs!sBw^2KfJ_*VCl(Pko_@@13SV4KHKS;@S9VP@o+wiZ4?3&AeU6ItXHZ6|^svADbe z3YrNDzVta8*fZ=_ZYj~jm@BV@`3MQp>4%jn#wFDgt6o%Q}u0wm7ZSe>0_6(~?mYX*#Y4GX6w z0uz~`nh!vxgU>0FRq-CjFD9xh{|JeK;>XeE8cYH{#vj@5)9bCkL+=+8s_|*cJw%1>imcbEeIXNB2uB z2=9ky(s5{3t{09l;i;#t`?&V2EjnkOO&3#|sOAf%9$j`#dsbU&$Vh>0K zK0QcU`A2JSB(*L0MI3DUiQ(IbBdPHoli_<3ny3GcJ{A-^6RIo3;%5XcKDRqHfw80q zNw9PiR!8s_3e!$aENTHz6!$ef$H%ZGkErm&8kP(s)=e%RXtT$QVu^nnR~(6v^3vB2 zk2ljhKz#U?{K}bWrIU#4+-D+_v7&Z#B!t@^1tLdZ+n^zs?$ekr^pZ~PM1%yM=1}|OtdYe& zi=Gk$r|RU8tCUzdS35OMVS%4BI^Mq&%}KZ>c_hldp5K(9*??J&4*tmR>iyyD(@hn8uGF>p^Sb^*5^cTQ znHsPNP7cC3F!zRU&#vVolKkd4Chc-{Th8a(3)fkh`IVj?Reei0U1(%IhP9|V`-Lh=->bD!Rk4K z%=fTgOTnDbSU$d0JaOCKrlUq4>fW}8Oz2IxuMIKzkcOq7K&(IQ=IDs013OfdQjN06 ziBPc8EVs4f*|T!;#p?ul@K^C8`v%x?)p+5ML6d7DHckzE7xw%mI4oUsZY1imZ2 zGS^&sQa}dY2lN6O;#jnES^?t#?mYYG%It>=p_D0cvje$gv2!Ak>f#q5VG-xkVP`st zXUMh<*R6n+T3?=>uo^aHit{GtF(t;5(RY0HlYBCSu0d%vZLzXFwN|d+?|4y?4WI8! z_(wwPZL>YT-nt>H^7L5ZgI$9fM!K0)Ed~4*Xq1SJ8dGb`&%0TL8H`(Cj9gVN;&KFZUaX87P?9 zE4d?fjawTDX@wr^<>Mx8YpzXi12ac2rF;E_K(d{*IUscQFZsdJ&RNuA#w$ZoV$B3$)aGDvKX| zlv+(Pr;sM_9g|?Y)_Rv~QQ;6_S#Ia<%Zg<{)fqit&ACF@(Q}WdJT>m|ZH)U{#3W_M zapmxPLi0f$hN}qMO@q~?_mLEs4PLQt|M7_g6loFYtCsN*KziaV9CGM#=usjPTOG$N z>v=E8Upbps5~hiZcs%0MfJTI+Tbpq{Sx@eM3soyyIDR7ym7-P)K$V>}f z^Noq=b^0ujNC-d$0M!zPVqgSj z?3CCCK$MVp;oht8O1SKhDwL=+{UAZiK;s5~YT6p@uK1v_v0eF(bceXoi{y+8x7w6v zImaTVNp8OPo+Z7)CMVTS`@gAgWChUuIa4sKNx*43ssf)NFUvk3fCQIU0%Kqr?PUdd zKgvn$r{KkZr<`!J;e;Vb??)O}|JOGM+*~i|2O`6*|TzGV)(mS1Ibe*S0LxM)_nyn&Awe9@jSKI34jj>H0T{`di z+fLPj_F|fTe-0?WJqzuB*`gn$uq~+4Ig`s~&9>_NEgG@yI4{P67s{DFnW_<*n0v^b zdLhTQj3;ECJc4#mW(m=NJTDm}tgwn>60%iVe=;uIfR_`CBK<0{7Zvr1IFHu0b;DlV zYBW5G5*s0D6N6rck-=CKV|7E;%Y+ja3m#n)Zo_{@Bd;$9g{{<~%zJ;Tv#25|R#T59 z_dV@;Zz4M-n-{q@C}Xf zX&)LwmuZ(w&q$x8Ozd$84Tp7sYew4Ne;+zj8 z2zUK0`gSU#TFX?Oj2d~!qALHf)&l}uDR+!#MKXi@%uHV{^YLb+f1dS?} z02coHqJl4+a6%W1?fMkiT%o2F9BxB>Ga82anTb&ejV@U;|FjZUzQR};=2Dx`2lYe= zKG2Oa(lU&V0Nh<;rthukw^qou=2m8BJspjEdHq5u(=p*Ux>2M+%cG~}s$!O*5qH$Y zD`#VeX#**&OMH)xi)shBF|NeGSJI&Zip#!9l5c-D-J_7B71@RrrIj@DY3MZg^2w^~Bv$KBmC2kjddEZL;nJzo_jI*!)`mdl#d_z_4~DIAA38KGeb`k~_JwrmbgG z8tlmF-5_SxMMq%&C7o7RO0|W01eNC@*}ZEh;1dpM4~uh7dcB?ZHsuD}*1SW#<(U`L z)5~x{J8`^8WTqHfFK#C)3!rGnW;ENI&Z-o?8ds4cq^Vfwj0r?Zu6>wP|+Rv z=<*ki7MxNkLqv9=?Gr1p{dsX%$sKBMIPSPnEoX&49Vca*bclxud+~W*Sg}I-l8?gu z)AIa7GlKfv>Q?YJaiads_F5uD5{*&+QhRmz1g`0Y%vd7u}X6(y|NKIC2#*Y{&rhW ztmn7rrCIGsv5Oe@e?_-SzFCbL9-O;4i~{=-!aaAlyyjF(vQn z&|zks7l?vm*}nDJZyae+PmHWma~Kw9sl%5{^!N?ofvq!J*h{EggaX}ycKF%1zu>ED z*f^fOn9RRCkGDj81SNKHszchr0~s^-z9ztoY&7jUhJLcAJ?J(vtrEW(BYclE2-$6f z;5o10=XUfyVU~2t`@>Wh90YdrdqYkYpIM#aq_ffcZUEH9GtoJtL8IAnGd9Yml@guY z2u}3kjN#kdVm>i5?Myq#M71!oBZepQ?h@*w#L7`^bQDPM)|&s%wcP(MzmJ$S`_v{ckJx1 z2G|*j0y*VUV)_!Qz7_SZi-B0GE|=)%^r%~G(_}uu@$)|0O_|(5H|zG3Y}vr6N$+Rn zoh$cM+GeX^CfA`ifr}>Fns|zPPTjFfD$**kA)RLuD-JMOZ?{u&v;MD*ry3KatWuiB z_+#TQac^{$vtgI~Xffc1DYP^^P>1G+MvLWm(#9wMJsz=W|Kn>U;IH3xn6}xgnlC&6 z@{5d-)U~^X)2Ps?mnzcZC;4+dl%>RvC&bsEKSw%o=8V%oOhYeNz)Ngs_-33&s~T&R zezH`}ZEx46a69I~f=z*tRO1dR_vgNLwkzBSo9cG57$p!sALZlNo*JZUSBEK}d|7t$ z4`Z^M9J}L)F$YUp#7L({O*?^qe9nOKHx+T}!0l4lf|@iia$DiTKJyn)v+-MNNgxb4 zAq=sYP*#dZ7}omgJVO68va;xlxiSB}ej^P{W*nud$g$7SulKoRZWu`gDH z?F>LI)lVRl#z-Rdc?7=JN0pBRj|m9xYDvc?1UB%b7IT+KL+E^Azab)k;jZ7`v0f9(8Y26OBXHzy%vy@~0r$;^E$AXz3X*VN0 z4ouhDg^vUaQ=|UGUAgq~|K>{>ecs__Su`}Mby!z=zWo)9&lSKiVf4dCFt6wxozi0H zX7Kw+&v1&n-{=z|CI_9i)0g27m_9MNoZKN$JIRUZpDU#PMb}g&UOxEsfzVJN;n8P$ zQh_&u4H+_Gb?{b&=pGMyDA8@}s&?$mGv&~Gv%sp}tcSKpmE>-w;qln;zP%PGdn0L` z+$mY;y$!d{6Hz&yEl&_%6OelRg9Wjb&LNUhBLe%yydq5Nos9YF|12WIS{n<_^UPVUzi} z)uO6jMetQW|Mr(JyOZqhc4kp zZ>RP0iMC@OpayAaPYzC1KO3&UgI@-JhBN)unt>ND0?oYdbLey`q8v89i!(&|WWUE~ z#4=AmHE{7eW^@yig6L`~)NiP{gbJqHI-Q{XGKZWHD|)4mdLeAcYAybJ{ig@7$#i_! ze4XP@vnkL!%dSYyKQbsG^CPr#!S5w73!$ zlCwvoJK-A?fsH6xX22_cM{ z?b$OG)93jTZ5(22U9TfPWuI0UsFJSsn{tqnSLiS1-o zm*5O4-kEGNbL#Uf#N6h*pO`I7-<|Ep|K(kxX_P)$LIkDTgKxmmsw|9by=+?OGFyW! zjU>2_^f#2D$I;tbQw#EKt-o4m_-Nw^%}~Hii2DtZ){c&(+q$Xx1n$uGdwWIruWr%S z#YSb;8lQZTZ3%@0{$ajoZs2LRcw*c?G{4s2%nDHpoyV(7o3jHKt*ZW^fbb;IaGZsi%4p%9v!Lvz5e z##5?WG{}N-3|6ld|4Vkr9d1N#Lw?MbKvbI<6sCw#4we?24mAuf2F@~dpRy*j()CYM zn^(IRQ4YI#{{~XZ^jv<#&EATRQzn9+kn<)6j6r-8UL)`W%#m8o*x>$~AqGZN_DyFg z9JeppopgP@D7p%AY(o;mGjD4pkquESouu7auL%%lUN!3y7V)9A9YS$65^r<=qe(y# zzjegmcZgU`ZousW?FnW|%Z{{$kR3BrSf8m*nXBP=aN!cA1dmNU4EcBdsJU3DOE@*gni&_!J@Aa zYobcCEjqV8u}V+Bsi+J#01d4aJd9~yNJPS3*f2K)n#$#UB+H=XW6k%W$vRwpAPnk{wNp3+t)P=a4#UAHj?7fcBTsW=UoN+Y#?r zT*~Y5{)n=vp@PQm*76+i^#eARya(jd^&k zpAFA2pKXJmBWzI&-XBe?;p=Z^PWPV=t}sFs%Lm-v^MCg|tGQv)Z7@Vo#_;$5?%Tao zSZ4+!?)xnm0bXUK&ns^&*8ej0}al^^>4cZ-A4o*D6h!Z=DY z-b||}eVdP!_a@pwr@5XBm$JOZ`|5Y* GU;Y=Y0)8a` literal 0 HcmV?d00001 diff --git a/resources/views/picture.blade.php b/resources/views/picture.blade.php new file mode 100644 index 0000000..9df1a2e --- /dev/null +++ b/resources/views/picture.blade.php @@ -0,0 +1,3 @@ + diff --git a/tests/Feature/CalendarWidgetTest.php b/tests/Feature/CalendarWidgetTest.php index eca9699..1b546df 100644 --- a/tests/Feature/CalendarWidgetTest.php +++ b/tests/Feature/CalendarWidgetTest.php @@ -1,5 +1,6 @@ create(); + $constraint = Constraint::factory()->create([ + 'constraint_type' => ConstraintType::NOT_TASK->value, + 'start_date' => now('Asia/Jerusalem')->addDays(3), + 'end_date' => now('Asia/Jerusalem')->addDays(4), + ]); $event = [ 'allDay' => false, 'title' => $constraint->constraint_type, - 'start' => '2024-09-03 12:00:00', - 'end' => '2024-09-05 12:00:00', + 'start' => now('Asia/Jerusalem')->addDays(1), + 'end' => now('Asia/Jerusalem')->addDays(2), 'id' => $constraint->id, 'display' => 'block', 'backgroundColor' => $constraint->constraint_color, @@ -60,20 +65,24 @@ $this->assertDatabaseHas(Constraint::class, [ 'id' => $constraint->id, - 'start_date' => '2024-09-03 12:00:00', - 'end_date' => '2024-09-05 12:00:00', + 'start_date' => $event['start'], + 'end_date' => $event['end'], ]); }); it('clicking the cancel button will refresh the calendar', function () { - $constraint = Constraint::factory()->create(); + $constraint = Constraint::factory()->create([ + 'constraint_type' => ConstraintType::NOT_TASK->value, + 'start_date' => now('Asia/Jerusalem')->addDays(3), + 'end_date' => now('Asia/Jerusalem')->addDays(4), + ]); $event = [ 'allDay' => false, 'title' => $constraint->constraint_type, - 'start' => '2024-09-03 12:00:00', - 'end' => '2024-09-05 12:00:00', + 'start' => now('Asia/Jerusalem')->addDays(1), + 'end' => now('Asia/Jerusalem')->addDays(2), 'id' => $constraint->id, 'display' => 'block', 'backgroundColor' => $constraint->constraint_color, @@ -171,3 +180,38 @@ expect(Saade\FilamentFullCalendar\FilamentFullCalendarPlugin::get()->isSelectable())->toBeFalse(); expect(Saade\FilamentFullCalendar\FilamentFullCalendarPlugin::get()->isEditable())->toBeFalse(); }); + +it('should refresh the fullcalendar', function () { + livewire(CalendarWidget::class, [ + 'model' => Shift::class, + 'type' => 'my_soldiers', + ]) + ->mountAction('Filters') + ->callMountedAction(['submit' => true]) + ->assertDispatched('filament-fullcalendar--refresh'); +}); + +it('should filter the fullcalendar', function () { + $user = User::factory()->create(); + $task1 = Task::factory()->create(['type' => 'wash']); + $task2 = Task::factory()->create(['type' => 'clean']); + Shift::factory()->count(5)->create(['soldier_id' => $user->userable_id, 'task_id' => $task1->id]); + Shift::factory()->count(5)->create(['soldier_id' => $user->userable_id, 'task_id' => $task2->id]); + + $calendar = livewire(CalendarWidget::class, [ + 'model' => Shift::class, + 'keys' => collect([ + 'id', + 'task_name', + 'start_date', + 'end_date', + 'task_color', + ]), + 'type' => 'my_soldiers', + ]) + ->mountAction('Filters') + ->setActionData(['soldier_id' => [$user->userable_id], 'type' => [$task2->id]]) + ->callMountedAction(['submit' => true]) + ->call('fetchEvents', ['start' => Carbon::yesterday(), 'end' => Carbon::now()->addDays(5), 'timezone' => 'Asia\/Jerusalem']); + expect($calendar->effects['returns'][0])->toHaveCount(5); +}); \ No newline at end of file diff --git a/tests/Feature/DeleteTaskTest.php b/tests/Feature/DeleteTaskTest.php new file mode 100644 index 0000000..0c4b1e7 --- /dev/null +++ b/tests/Feature/DeleteTaskTest.php @@ -0,0 +1,82 @@ +seed(PermissionSeeder::class) + ->asUser('manager'); +}); + +it('should delete the shifts of the same task type whose time has not yet expired', function () { + $task = Task::factory()->create(); + Shift::factory()->count(5)->create([ + 'task_id' => $task->id, + 'start_date' => now()->addDay(), + 'end_date' => now()->addDays(2), + ]); + + livewire(EditTask::class, [ + 'record' => $task->getRouteKey(), + ]) + ->callAction(DeleteAction::class); + + $this->assertDatabaseCount('shifts', 0); +}); + +it('should not delete the shifts of the same task type whose time have already expired', function () { + $task = Task::factory()->create(); + Shift::factory()->count(3)->create([ + 'task_id' => $task->id, + 'start_date' => now()->addDay(), + 'end_date' => now()->addDays(2), + ]); + + Shift::factory()->create([ + 'task_id' => $task->id, + 'start_date' => '2024-10-02 10:00:00', + 'end_date' => '2024-10-03 10:00:00', + ]); + + livewire(EditTask::class, [ + 'record' => $task->getRouteKey(), + ]) + ->callAction(DeleteAction::class); + + $this->assertDatabaseCount('shifts', 1); +}); + +it('should update the capacity_hold field of the soldiers assigned to the shift', function () { + $task = Task::factory()->create(); + $soldier = Soldier::factory()->create([ + 'capacity_hold' => $task->parallel_weight, + ]); + User::factory()->create([ + 'userable_id' => $soldier->id, + ]); + Shift::factory()->create([ + 'soldier_id' => $soldier->id, + 'task_id' => $task->id, + 'start_date' => now()->addDay(), + 'end_date' => now()->addDays(2), + 'parallel_weight' => null, + ]); + + livewire(EditTask::class, [ + 'record' => $task->getRouteKey(), + ]) + ->callAction(DeleteAction::class); + + $this->assertDatabaseHas('soldiers', [ + 'id' => $soldier->id, + 'capacity_hold' => $soldier->capacity_hold - $task->parallel_weight, + ]); +}); diff --git a/tests/Feature/ListTaskTest.php b/tests/Feature/ListTaskTest.php new file mode 100644 index 0000000..04f8c26 --- /dev/null +++ b/tests/Feature/ListTaskTest.php @@ -0,0 +1,31 @@ +seed(PermissionSeeder::class) + ->asUser('manager'); +}); + +it('should filter the table in boolean filter', function () { + $tasks = Task::factory()->count(5)->create(); + livewire::test(ListTasks::class) + ->assertCanSeeTableRecords($tasks) + ->filterTable('is_alert', true) + ->assertCanSeeTableRecords($tasks->where('is_alert', true)) + ->assertCanNotSeeTableRecords($tasks->where('is_alert', false)); +}); + +it('should filter the table in NumberFilter filter', function () { + $tasks = Task::factory()->count(5)->create(); + $data = ['range_condition' => 'equal', 'range_equal' => 2.5]; + livewire::test(ListTasks::class) + ->assertCanSeeTableRecords($tasks) + ->filterTable('parallel_weight', $data) + ->assertCanSeeTableRecords($tasks->where('parallel_weight', '=', 2.5)) + ->assertCanNotSeeTableRecords($tasks->where('parallel_weight', '!=', 2.5)); +}); diff --git a/tests/Feature/ReccurenceEventsTest.php b/tests/Feature/RecurringEventsTest.php similarity index 54% rename from tests/Feature/ReccurenceEventsTest.php rename to tests/Feature/RecurringEventsTest.php index 4761148..8311abb 100644 --- a/tests/Feature/ReccurenceEventsTest.php +++ b/tests/Feature/RecurringEventsTest.php @@ -3,34 +3,33 @@ namespace Tests\Unit; use App\Models\Task; -use App\Services\ReccurenceEvents; +use App\Services\RecurringEvents; use Carbon\Carbon; beforeEach(function () { - $this->recurrenceEvents = new ReccurenceEvents; - $this->now = Carbon::now()->addMonth(); + $this->recurringEvents = new RecurringEvents(Carbon::now()); + $this->now = Carbon::now(); }); -it('should create shifts for daily recurrence', function () { +it('should create shifts for daily recurring', function () { $task = Task::factory()->create([ 'name' => 'Daily Task', - 'recurrence' => ['type' => 'Daily'], + 'recurring' => ['type' => 'Daily'], 'start_hour' => '09:00:00', 'duration' => 1, ]); - $this->recurrenceEvents->recurrenceTask(); + $this->recurringEvents->recurringTask(); $this->assertDatabaseHas('shifts', [ 'task_id' => $task->id, 'start_date' => Carbon::parse($this->now->startOfMonth()->format('Y-m-d').' '.$task['start_hour']), 'end_date' => Carbon::parse($this->now->startOfMonth()->format('Y-m-d').' '.$task['start_hour'])->addHours($task['duration']), - ]); }); -it('should create shifts for weekly recurrence', function () { +it('should create shifts for weekly recurring', function () { $task = Task::factory()->create([ 'name' => 'Weekly Task', - 'recurrence' => ['type' => 'days_in_week', 'days_in_week' => ['Sunday', 'Tuesday']], + 'recurring' => ['type' => 'Weekly', 'days_in_week' => ['Sunday', 'Tuesday']], 'start_hour' => '10:00:00', 'duration' => 2, ]); @@ -38,9 +37,7 @@ $this->now->startOfMonth()->next('Sunday')->format('Y-m-d'), $this->now->startOfMonth()->next('Tuesday')->format('Y-m-d'), ]); - - $this->recurrenceEvents->recurrenceTask(); - $this->assertDatabaseCount('shifts', 2); + $this->recurringEvents->recurringTask(); $this->assertDatabaseHas('shifts', [ 'task_id' => $task->id, 'start_date' => Carbon::parse($expectedShiftDates[0].' '.$task['start_hour']), @@ -51,22 +48,16 @@ 'start_date' => Carbon::parse($expectedShiftDates[1].' '.$task['start_hour']), 'end_date' => Carbon::parse($expectedShiftDates[1].' '.$task['start_hour'])->addHours($task['duration']), ]); - // $this->recurrenceEvents->recurrenceTask(); - // $this->assertDatabaseHas('shifts', [ - // 'task_id' => $task->id, - // 'start_date' => Carbon::parse($this->now->startOfMonth()->format('Y-m-d').' '.$task['start_hour']), - // 'end_date' => Carbon::parse($this->now->startOfMonth()->format('Y-m-d').' '.$task['start_hour'])->addHours($task['duration']), - // ]); }); -it('should create shifts for monthly recurrence', function () { +it('should create shift for monthly recurring', function () { $task = Task::factory()->create([ 'name' => 'Monthly Task', - 'recurrence' => ['type' => 'Monthly', 'dates_in_month' => 5], + 'recurring' => ['type' => 'Monthly', 'dates_in_month' => 5], 'start_hour' => '11:00:00', 'duration' => 2, ]); - $this->recurrenceEvents->recurrenceTask(); + $this->recurringEvents->recurringTask(); $this->assertDatabaseHas('shifts', [ 'task_id' => $task->id, 'start_date' => Carbon::create($this->now->year, $this->now->month, 5)->format('Y-m-d').' '.$task['start_hour'], @@ -74,15 +65,27 @@ $this->assertDatabaseCount('shifts', 1); }); -it('should create shifts for custom recurrence', function () { +it('should not create shift that already exists', function () { + Task::factory()->create([ + 'name' => 'Monthly Task', + 'recurring' => ['type' => 'Monthly', 'dates_in_month' => 5], + 'start_hour' => '11:00:00', + 'duration' => 2, + ]); + $this->recurringEvents->recurringTask(); + $this->recurringEvents->recurringTask(); + $this->assertDatabaseCount('shifts', 1); +}); + +it('should create shifts for custom recurring', function () { $task = Task::factory()->create([ 'name' => 'Custom Task', - 'recurrence' => ['type' => 'Custom', 'dates_in_month' => [10, 20]], + 'recurring' => ['type' => 'Custom', 'dates_in_month' => [10, 20]], 'start_hour' => '12:00:00', 'duration' => 2, ]); - $this->recurrenceEvents->recurrenceTask(); + $this->recurringEvents->recurringTask(); $this->assertDatabaseHas('shifts', [ 'task_id' => $task->id, 'start_date' => Carbon::create($this->now->year, $this->now->month, 10)->format('Y-m-d').' '.$task['start_hour'], @@ -90,15 +93,36 @@ $this->assertDatabaseCount('shifts', 2); }); -it('should create shifts for OneTime task', function () { +it('should create shift for One time task', function () { + $task = Task::factory()->create([ + 'name' => 'One time Task', + 'recurring' => ['type' => 'One time', 'date' => '2024-11-13'], + 'start_hour' => '13:00:00', + 'duration' => 1, + ]); + + $this->recurringEvents->oneTimeTask($task); + $date = Carbon::create( + 2024, + 11, + 13, + ); + $this->assertDatabaseHas('shifts', [ + 'task_id' => $task->id, + 'start_date' => Carbon::parse($date->format('Y-m-d').' '.$task['start_hour']), + 'end_date' => Carbon::parse($date->format('Y-m-d').' '.$task['start_hour'])->addHours($task['duration']), + ]); +}); + +it('should create shifts for Daily range task', function () { $task = Task::factory()->create([ - 'name' => 'OneTime Task', - 'recurrence' => ['type' => 'OneTime', 'start_date' => '2022-12-01', 'end_date' => '2022-12-05'], + 'name' => 'Daily range Task', + 'recurring' => ['type' => 'Daily range', 'start_date' => '2022-12-01', 'end_date' => '2022-12-05'], 'start_hour' => '13:00:00', 'duration' => 1, ]); - $this->recurrenceEvents->oneTimeTask($task); + $this->recurringEvents->dailyRangeTask($task); $this->assertDatabaseHas('shifts', [ 'task_id' => $task->id, diff --git a/tests/Pest.php b/tests/Pest.php index 7a9ea81..9465590 100644 --- a/tests/Pest.php +++ b/tests/Pest.php @@ -3,4 +3,4 @@ uses( Tests\TestCase::class, Illuminate\Foundation\Testing\LazilyRefreshDatabase::class -)->in('Feature'); + )->in('Feature', 'Unit'); diff --git a/tests/Unit/AlgorithmServiceTest.php b/tests/Unit/AlgorithmServiceTest.php new file mode 100644 index 0000000..10f0bca --- /dev/null +++ b/tests/Unit/AlgorithmServiceTest.php @@ -0,0 +1,58 @@ +getMethod('getShiftWithTasks'); + $method->setAccessible(true); + $task = Task::factory()->create(); + Shift::factory()->count(3)->create(['task_id' => $task->id]); + expect($method->invoke(new Algorithm))->toBeEmpty(); +}); + +it('should return shifts with their task details', function () { + $reflection = new ReflectionClass(Algorithm::class); + $method = $reflection->getMethod('getShiftWithTasks'); + $method->setAccessible(true); + $task = Task::factory()->create(); + Shift::factory()->count(3)->create([ + 'task_id' => $task->id, + 'soldier_id' => null, + ]); + $shiftsWithTasks = $method->invoke(new Algorithm); + $shiftsWithTasks->map(fn ($shift) => expect($shift->isNight)->toBe($task->is_night)); +}); + +it('should return only non-reserve soldiers', function () { + $reflection = new ReflectionClass(Algorithm::class); + $method = $reflection->getMethod('getSoldiersDetails'); + $method->setAccessible(true); + Soldier::factory()->create([ + 'is_reservist' => true, + ]); + $soldiers = $method->invoke(new Algorithm); + expect($soldiers)->toBeEmpty(); +}); + +it('should return soldiers with their constraints details', function () { + $reflection = new ReflectionClass(Algorithm::class); + $method = $reflection->getMethod('getSoldiersDetails'); + $method->setAccessible(true); + $soldier = Soldier::factory()->create([ + 'is_reservist' => false, + ]); + Constraint::factory()->count(3)->create([ + 'soldier_id' => $soldier->id, + 'constraint_type' => 'Not task', + 'start_date' => now(), + 'end_date' => Carbon::now()->addDay(), + ]); + $soldierWithConstraints = $method->invoke(new Algorithm); + expect($soldierWithConstraints[0]->constraints->count())->toBe(3); +}); \ No newline at end of file diff --git a/tests/Unit/MaxDataServiceTest.php b/tests/Unit/MaxDataServiceTest.php new file mode 100644 index 0000000..e5f083f --- /dev/null +++ b/tests/Unit/MaxDataServiceTest.php @@ -0,0 +1,18 @@ +remaining())->toBe(4.0); +}); + +it('should return the relative load of the max', function () { + $maxData = new MaxData(4); + expect($maxData->calculatedRelativeLoad())->toBe(0.05); +}); + +it('should return 0 if max is 0', function () { + $maxData = new MaxData(0); + expect($maxData->calculatedRelativeLoad())->toBe(0.0); +}); \ No newline at end of file diff --git a/tests/Unit/RangeServiceTest.php b/tests/Unit/RangeServiceTest.php new file mode 100644 index 0000000..f5c774c --- /dev/null +++ b/tests/Unit/RangeServiceTest.php @@ -0,0 +1,64 @@ +isConflict(new Range(Carbon::create(2024, 5, 14, 5), Carbon::create(2024, 5, 14, 18))))->toBeTrue(); +}); + +it('should return false if the date have not conflict', function () { + $range = new Range(Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 18)); + expect($range->isConflict(new Range(Carbon::create(2024, 5, 14, 5), Carbon::create(2024, 5, 14, 16))))->toBeFalse(); +}); + +it('should return true if range include the provided day', function () { + $range = new Range(Carbon::create(2024, 11, 3), Carbon::create(2024, 11, 11)); + expect($range->isRangeInclude(DaysInWeek::THURSDAY))->toBeTrue(); +}); + +it('should return false if range is not include the provided day', function () { + $range = new Range(Carbon::create(2024, 11, 3), Carbon::create(2024, 11, 4)); + expect($range->isRangeInclude(DaysInWeek::WEDNESDAY))->toBeFalse(); +}); +it('should return the next sunday', function () { + $range = new Range(Carbon::create(2024, 11, 7), Carbon::create(2024, 11, 8)); + $result = $range->getDayAfterWeekend(); + $expectedStart = Carbon::parse('2024-11-10 08:00:00'); + $expectedEnd = Carbon::parse('2024-11-11 08:00:00'); + + expect($result->start)->toEqual($expectedStart); + expect($result->end)->toEqual($expectedEnd); +}); + +it('should return the night spaces', function () { + $range = new Range('2024-11-07 22:00:00', '2024-11-08 05:00:00'); + $result = $range->getNightSpaces(); + $expect = [ + new Range('2024-11-06 20:00:00', '2024-11-07 22:00:00'), + new Range('2024-11-08 05:00:00', '2024-11-09 08:00:00'), + ]; + expect(count($result))->toBe(count($expect)); + foreach ($result as $index => $range) { + expect($range->start)->toEqual($expect[$index]->start); + expect($range->end)->toEqual($expect[$index]->end); + } +}); + +it('should return the day before night', function () { + $range = new Range('2024-11-07 22:00:00', '2024-11-08 05:00:00'); + $result = $range->getDayBeforeNight(); + $expect = new Range('2024-11-06 20:00:00', '2024-11-07 22:00:00'); + expect($result->start)->toEqual($expect->start); + expect($result->end)->toEqual($expect->end); +}); + +it('should return the day after night', function () { + $range = new Range(Carbon::create(2024, 11, 7, 22), Carbon::create(2024, 11, 8, 5)); + $result = $range->getDayAfterNight(); + $expect = new Range(Carbon::parse('2024-11-08 05:00:00'), Carbon::parse('2024-11-09 08:00:00')); + expect($result->start->toString())->toBe($expect->start->toString()); + expect($result->end->toString())->toBe($expect->end->toString()); +}); \ No newline at end of file diff --git a/tests/Unit/ScheduleServiceTest.php b/tests/Unit/ScheduleServiceTest.php new file mode 100644 index 0000000..73c0742 --- /dev/null +++ b/tests/Unit/ScheduleServiceTest.php @@ -0,0 +1,52 @@ +create([ + 'name' => 'Clean', + 'start_hour' => '14:00:00', + 'type' => 'Clean', + 'duration' => 1, + 'parallel_weight' => 0.25, + 'recurring' => collect(['type' => RecurringType::CUSTOM, 'dates_in_month' => [6]]), + ]); + + User::factory()->create([ + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => (['Clean']), + 'is_reservist' => false, + 'capacity' => 8, + 'max_shifts' => 8, + 'max_nights' => 8, + 'max_weekends' => 8, + ])->id, + ]); + + $recurringEvents = new RecurringEvents; + $recurringEvents->recurringTask(); + + $reflection = new ReflectionClass(Algorithm::class); + + $method = $reflection->getMethod('getShiftWithTasks'); + $method->setAccessible(true); + $shiftWithTasks = $method->invoke(new Algorithm); + + $method = $reflection->getMethod('getSoldiersDetails'); + $method->setAccessible(true); + $soldiersWithConstraints = $method->invoke(new Algorithm); + + $schedule = new Schedule($shiftWithTasks, $soldiersWithConstraints); + $schedule->schedule(); + $this->assertDatabaseHas(Shift::class, [ + 'id' => 1, + 'soldier_id' => 1, + ]); +}); \ No newline at end of file diff --git a/tests/Unit/ShiftServiceTest.php b/tests/Unit/ShiftServiceTest.php new file mode 100644 index 0000000..3d10362 --- /dev/null +++ b/tests/Unit/ShiftServiceTest.php @@ -0,0 +1,236 @@ +getShiftSpaces([]); + + $expected = [ + new Range(Carbon::parse('2024-12-16 20:00:00'), Carbon::parse('2024-12-17 22:30:00')), + new Range(Carbon::parse('2024-12-18 06:00:00'), Carbon::parse('2024-12-19 08:00:00')), + ]; + + expect(count($result))->toBe(count($expected)); + + foreach ($result as $index => $range) { + expect($range->start->toString())->toEqual($expected[$index]->start->toString()); + expect($range->end->toString())->toEqual($expected[$index]->end->toString()); + } +}); + +it('should return the next sunday if the shift is at weekend', function () { + $shift = new Shift( + 1, + 'test', + '2024-11-08 22:30:00', + '2024-11-09 09:00:00', + 0.25, + false, + true + ); + + $result = $shift->getShiftSpaces([]); + + $expected = [ + new Range(Carbon::parse('2024-11-10 08:00:00'), Carbon::parse('2024-11-11 08:00:00')), + ]; + + expect(count($result))->toBe(count($expected)); + + foreach ($result as $index => $range) { + expect($range->start->toString())->toEqual($expected[$index]->start->toString()); + expect($range->end->toString())->toEqual($expected[$index]->end->toString()); + } +}); + +it('should return the next sunday if the shift is full weekend', function () { + + $range = new Range('2024-11-08 16:30:00', '2024-11-09 22:00:00'); + + $shift = new Shift(1, 'test', '2024-11-08 16:30:00', '2024-11-09 22:00:00', 0.25, false, true); + $reflection = new ReflectionClass(Shift::class); + + $method = $reflection->getMethod('getWeekendSpaces'); + $method->setAccessible(true); + $result = $method->invoke($shift, $range, []); + + $expected = [ + new Range(Carbon::parse('2024-11-10 08:00:00'), Carbon::parse('2024-11-11 08:00:00')), + ]; + + expect(count($result))->toBe(count($expected)); + + foreach ($result as $index => $range) { + expect($range->start->toString())->toEqual($expected[$index]->start->toString()); + expect($range->end->toString())->toEqual($expected[$index]->end->toString()); + } +}); + +it('should not return the next sunday if the shift is not full weekend', function () { + $shift = new Shift( + 1, + 'test', + '2024-11-16 16:30:00', + '2024-11-16 18:30:00', + 0.25, + false, + true + ); + $reflection = new ReflectionClass(Shift::class); + + $method = $reflection->getMethod('getWeekendSpaces'); + $method->setAccessible(true); + $result = $method->invoke($shift, []); + + expect($result)->toBe(null); +}); + +it('should return true if the weekend is full', function () { + $shift = new App\Services\Shift( + 1, + 'test', + '2024-11-08 16:30:00', + '2024-11-09 18:30:00', + 0.25, + false, + true + ); + + $reflection = new ReflectionClass(Shift::class); + + $method = $reflection->getMethod('isFullWeekend'); + $method->setAccessible(true); + $result = $method->invoke($shift, []); + + expect($result)->toBeTrue(); +}); + +it('should return false if the weekend is not full', function () { + $shift = new App\Services\Shift( + 1, + 'test', + '2024-11-16 16:30:00', + '2024-11-16 18:30:00', + 0.25, + false, + true + ); + $reflection = new ReflectionClass(Shift::class); + + $method = $reflection->getMethod('isFullWeekend'); + $method->setAccessible(true); + $result = $method->invoke($shift, []); + + expect($result)->toBeFalse(); +}); + +it('should return true if the range includes the supplied day', function () { + $range = new Range('2024-11-08 16:30:00', '2024-11-11 18:00:00'); + $shift = new App\Services\Shift( + 1, + 'test', + '2024-11-08 16:30:00', + '2024-11-11 18:00:00', + 0.25, + false, + true + ); + $reflection = new ReflectionClass(Shift::class); + + $method = $reflection->getMethod('isShiftInclude'); + $method->setAccessible(true); + $result = $method->invoke($shift, $range, DaysInWeek::SUNDAY); + + expect($result)->toBeTrue(); +}); + +it('should return false if the range does not include the supplied day', function () { + $range = new Range('2024-11-08 16:30:00', '2024-11-11 18:00:00'); + $shift = new App\Services\Shift( + 1, + 'test', + '2024-11-08 16:30:00', + '2024-11-11 18:00:00', + 0.25, + false, + true + ); + $reflection = new ReflectionClass(Shift::class); + + $method = $reflection->getMethod('isShiftInclude'); + $method->setAccessible(true); + $result = $method->invoke($shift, $range, DaysInWeek::WEDNESDAY); + + expect($result)->toBeFalse(); +}); + +it('should return true if the shift date is adjacent to the selected date', function () { + $shifts = [new App\Services\Shift( + 1, + 'test', + '2024-11-09 16:30:00', + '2024-11-09 18:30:00', + 0.25, + false, + true + )]; + $shift = new App\Services\Shift( + 1, + 'test', + '2024-11-08 16:30:00', + '2024-11-08 18:00:00', + 0.25, + false, + true + ); + $range = new Range('2024-11-08 16:30:00', '2024-11-08 18:00:00'); + $reflection = new ReflectionClass(Shift::class); + + $method = $reflection->getMethod('isAttached'); + $method->setAccessible(true); + $result = $method->invoke($shift, $shifts, $range, DaysInWeek::SATURDAY); + + expect($result)->toBeTrue(); +}); + +it('should return false if the shift date is not adjacent to the selected date', function () { + $shifts = [new App\Services\Shift( + 1, + 'test', + '2024-11-16 16:30:00', + '2024-11-16 18:30:00', + 0.25, + false, + true + )]; + $range = new Range('2024-11-08 16:30:00', '2024-11-08 18:00:00'); + $shift = new App\Services\Shift( + 1, + 'test', + '2024-11-08 16:30:00', + '2024-11-08 18:00:00', + 0.25, + false, + true + ); + $reflection = new ReflectionClass(Shift::class); + + $method = $reflection->getMethod('isAttached'); + $method->setAccessible(true); + $result = $method->invoke($shift, $shifts, $range, DaysInWeek::SATURDAY); + + expect($result)->toBeFalse(); +}); \ No newline at end of file diff --git a/tests/Unit/SoldierServiceTest.php b/tests/Unit/SoldierServiceTest.php new file mode 100644 index 0000000..32946b8 --- /dev/null +++ b/tests/Unit/SoldierServiceTest.php @@ -0,0 +1,98 @@ +isAbleTake($shift, []))->toBeTrue(); +}); + +it('should return false if the soldier cant take the shift', function () { + $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(5), new MaxData(3), ['Run'], []); + $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 18), 4, false, false); + expect($soldier->isAbleTake($shift, []))->toBeFalse(); +}); + +it('should return true if the soldier available by maxes', function () { + $reflection = new ReflectionClass(Soldier::class); + $method = $reflection->getMethod('isAvailableByMaxes'); + $method->setAccessible(true); + $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(5), new MaxData(3), ['Run'], []); + $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 18), 1, false, false); + expect($method->invoke($soldier, $shift))->toBeTrue(); +}); + +it('should return false if the soldier is not available by maxes', function () { + $reflection = new ReflectionClass(Soldier::class); + $method = $reflection->getMethod('isAvailableByMaxes'); + $method->setAccessible(true); + $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(0), new MaxData(3), ['Run'], []); + $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 21), 1, true, false); + expect($method->invoke($soldier, $shift))->toBeFalse(); +}); + +it('should return true if the soldier is available by shifts', function () { + $reflection = new ReflectionClass(Soldier::class); + $method = $reflection->getMethod('isAvailableByShifts'); + $method->setAccessible(true); + $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 19), Carbon::create(2024, 5, 14, 21), 1, true, false); + $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(0), new MaxData(3), ['Run'], []); + $soldier->assign($shift, []); + $range = new Range(Carbon::create(2024, 5, 14, 16), Carbon::create(2024, 5, 14, 18)); + expect($method->invoke($soldier, $range))->toBeTrue(); +}); + +it('should return false if the soldier is not available by shifts', function () { + $reflection = new ReflectionClass(Soldier::class); + $method = $reflection->getMethod('isAvailableByShifts'); + $method->setAccessible(true); + $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 21), 1, true, false); + $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(0), new MaxData(3), ['Run'], []); + $soldier->assign($shift, []); + $range = new Range(Carbon::create(2024, 5, 14, 16), Carbon::create(2024, 5, 14, 18)); + expect($method->invoke($soldier, $range))->toBeFalse(); +}); + +it('should return better not availability if the soldier is not available by constraint in low priority', function () { + $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(0), new MaxData(3), ['Run'], [new Constraint(Carbon::create(2024, 5, 14, 20), Carbon::create(2024, 5, 15, 15), Priority::LOW)]); + expect($soldier->isAvailableByConstraints(new Range(Carbon::create(2024, 5, 14, 22), Carbon::create(2024, 5, 15, 8))))->toBe(Availability::BETTER_NOT); +}); + +it('should return no availability if the soldier is not available by constraint in high priority', function () { + $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(0), new MaxData(3), ['Run'], [new Constraint(Carbon::create(2024, 5, 14, 20), Carbon::create(2024, 5, 15, 15), Priority::HIGH)]); + expect($soldier->isAvailableByConstraints(new Range(Carbon::create(2024, 5, 14, 22), Carbon::create(2024, 5, 15, 8))))->toBe(Availability::NO); +}); + +it('should return yes availability if the soldier has no constraints', function () { + $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(0), new MaxData(3), ['Run'], []); + expect($soldier->isAvailableByConstraints(new Range(Carbon::create(2024, 5, 14, 22), Carbon::create(2024, 5, 15, 8))))->toBe(Availability::YES); +}); + +it('should assign shift to soldier and update all details', function () { + $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(0), new MaxData(3), ['Run'], []); + $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 21), 2.75, true, false); + $soldier->assign($shift, []); + expect($soldier->shifts->count())->toBe(1); + expect($soldier->pointsMaxData->used)->toBe(2.75); + expect($soldier->shiftsMaxData->used)->toBe(1.0); + expect($soldier->weekendsMaxData->used)->toBe(0.0); + expect($soldier->nightsMaxData->used)->toBe(2.75); +}); + +it('should return true if the soldier qualified to the task', function () { + $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(0), new MaxData(3), ['Run'], []); + expect($soldier->isQualified('Run'))->toBeTrue(); +}); + +it('should return false if the soldier is not qualified to the task', function () { + $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(0), new MaxData(3), ['Run'], []); + expect($soldier->isQualified('Clean'))->toBeFalse(); +}); \ No newline at end of file From 84bc98cb2e22eabbd773e8e231f118a538d82b42 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 1 Dec 2024 11:39:03 +0200 Subject: [PATCH 015/259] deploy --- .github/workflows/php-build-and-deploy.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index f84a5e1..095c35e 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -53,3 +53,4 @@ jobs: labels: ${{ steps.meta.outputs.labels }} tags: ${{ steps.meta.outputs.tags }} file: ./Dockerfile + From 6cabd55944299af622d65769b0be9aecc89fb749 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 1 Dec 2024 11:45:20 +0200 Subject: [PATCH 016/259] deploy --- .github/workflows/php-build-and-deploy.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 095c35e..f84a5e1 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -53,4 +53,3 @@ jobs: labels: ${{ steps.meta.outputs.labels }} tags: ${{ steps.meta.outputs.tags }} file: ./Dockerfile - From 72669c2a46a253d05b3cf93ce95757297f01d878 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 1 Dec 2024 11:52:46 +0200 Subject: [PATCH 017/259] deploy --- .github/workflows/php-build-and-deploy.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index f84a5e1..095c35e 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -53,3 +53,4 @@ jobs: labels: ${{ steps.meta.outputs.labels }} tags: ${{ steps.meta.outputs.tags }} file: ./Dockerfile + From 48677bff0f1ee8676b6b5c400abe9d8cb92b5761 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 1 Dec 2024 12:36:52 +0200 Subject: [PATCH 018/259] deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Enums/RecurrenceType.php | 25 ------------------- app/Filament/Widgets/CalendarWidget.php | 4 +-- database/factories/TaskFactory.php | 2 +- .../2024_05_30_100244_create_task_table.php | 2 +- lang/he.json | 4 +-- 6 files changed, 7 insertions(+), 32 deletions(-) delete mode 100644 app/Enums/RecurrenceType.php diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 095c35e..21bc816 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/start + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/start1 flavor: | latest=false tags: | diff --git a/app/Enums/RecurrenceType.php b/app/Enums/RecurrenceType.php deleted file mode 100644 index a3d7fc5..0000000 --- a/app/Enums/RecurrenceType.php +++ /dev/null @@ -1,25 +0,0 @@ - __('Daily'), - self::WEEKLY => __('Weekly'), - self::MONTHLY => __('Monthly'), - self::CUSTOM => __('Custom'), - self::ONETIME => __('One time'), - self::DAILY_RANGE => __('Daily range'), - }; - } -} diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index f5c03cf..a3fd918 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -294,7 +294,7 @@ protected function viewAction(): Action : [...$record->getAttributes(), 'start_date' => $arguments['event']['start'] ?? $record->start_date, 'end_date' => $arguments['event']['end'] ?? $record->end_date]; - }) - ->modalHeading(__('View').$this->model::getTitle()); + }); + // ->modalHeading(__('View').$this->model::getTitle()); } } \ No newline at end of file diff --git a/database/factories/TaskFactory.php b/database/factories/TaskFactory.php index 497ea2e..6acb30c 100644 --- a/database/factories/TaskFactory.php +++ b/database/factories/TaskFactory.php @@ -19,7 +19,7 @@ public function definition(): array 'is_weekend' => fake()->boolean(), 'is_night' => fake()->boolean(), 'department_name' => fake()->name(), - 'recurrence' => json_encode([]), + 'recurring' => json_encode([]), ]; } } diff --git a/database/migrations/2024_05_30_100244_create_task_table.php b/database/migrations/2024_05_30_100244_create_task_table.php index deef6ae..ba3b58f 100644 --- a/database/migrations/2024_05_30_100244_create_task_table.php +++ b/database/migrations/2024_05_30_100244_create_task_table.php @@ -20,7 +20,7 @@ public function up(): void $table->boolean('is_weekend'); $table->boolean('is_night'); $table->string('department_name')->nullable(); - $table->json('recurrence'); + $table->json('recurring'); $table->timestamps(); $table->softDeletes(); }); diff --git a/lang/he.json b/lang/he.json index 24d2bb3..bb26edb 100644 --- a/lang/he.json +++ b/lang/he.json @@ -105,8 +105,8 @@ "Personal Information": "נתונים אישיים", "Personal number": "מספר אישי", "Qualifications": "הסמכות", - "Recurrence": "חזרתיות", - "Recurrence type": "סוג חזרתיות", + "Recurring": "חזרתיות", + "Recurring type": "סוג חזרתיות", "Reserve": "מילואים", "Reserves": "מילואימניקים", "Reserve dates": "ימי מילואים בחודש הנוכחי", From d2d2dc9f8aa4354f949f4f88fe145aa4d6b14c11 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 1 Dec 2024 13:05:46 +0200 Subject: [PATCH 019/259] deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Models/User.php | 15 +++++++++++++-- app/Providers/AppServiceProvider.php | 9 +++++++-- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 21bc816..ee98b39 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/start1 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/start2 flavor: | latest=false tags: | diff --git a/app/Models/User.php b/app/Models/User.php index c09d1bb..0be79ac 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -10,8 +10,10 @@ use Illuminate\Notifications\Notifiable; use Spatie\Permission\Traits\HasPermissions; use Spatie\Permission\Traits\HasRoles; +use Filament\Models\Contracts\FilamentUser; +use Filament\Panel; -class User extends Authenticatable implements HasName +class User extends Authenticatable implements HasName,FilamentUser { use HasFactory, HasPermissions, HasRoles, Notifiable; @@ -43,4 +45,13 @@ public function getFilamentName(): string { return $this->displayName; } -} + + public function viewAny(User $user): bool + { + return $user->hasRole('manager'); + } + public function canAccessPanel(Panel $panel): bool + { + return true; + } +} \ No newline at end of file diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index f46db3c..99f22be 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -2,12 +2,14 @@ namespace App\Providers; -use Filament\Support\Assets\Css; -use Filament\Support\Facades\FilamentAsset; use Filament\Support\Facades\FilamentView; use Filament\View\PanelsRenderHook; use Illuminate\Support\Facades\Blade; use Illuminate\Support\ServiceProvider; +use Illuminate\Support\Facades\URL; +use Filament\Support\Assets\Css; +use Filament\Support\Facades\FilamentAsset; + class AppServiceProvider extends ServiceProvider { @@ -18,6 +20,9 @@ public function register(): void public function boot(): void { + if (config('app.env') !== 'local') { + URL::forceScheme('https'); + } FilamentView::registerRenderHook( PanelsRenderHook::USER_MENU_BEFORE, fn (): string => Blade::render('@livewire(\'set-locale\')'), From 8dc9a58331d4cf7310d416d3be8ea5a0f1fdffe0 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 1 Dec 2024 13:35:36 +0200 Subject: [PATCH 020/259] deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index ee98b39..ea8a196 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/start2 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/start3 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index a3fd918..f5c03cf 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -294,7 +294,7 @@ protected function viewAction(): Action : [...$record->getAttributes(), 'start_date' => $arguments['event']['start'] ?? $record->start_date, 'end_date' => $arguments['event']['end'] ?? $record->end_date]; - }); - // ->modalHeading(__('View').$this->model::getTitle()); + }) + ->modalHeading(__('View').$this->model::getTitle()); } } \ No newline at end of file From cf8aef23838475eb7ec544595c884540c512dbe9 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 1 Dec 2024 14:15:58 +0200 Subject: [PATCH 021/259] deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 24 +++++++++++----------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index ea8a196..844b693 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/start3 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/start4 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index f5c03cf..54af1d3 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -285,16 +285,16 @@ protected function modalActions(): array return []; } - protected function viewAction(): Action - { - return ViewAction::make() - ->fillForm(function (Model $record, array $arguments): array { - return method_exists($this->model, 'fillForm') - ? (new $this->model)->fillForm($record, $arguments) - : [...$record->getAttributes(), - 'start_date' => $arguments['event']['start'] ?? $record->start_date, - 'end_date' => $arguments['event']['end'] ?? $record->end_date]; - }) - ->modalHeading(__('View').$this->model::getTitle()); - } + // protected function viewAction(): Action + // { + // return ViewAction::make() + // ->fillForm(function (Model $record, array $arguments): array { + // return method_exists($this->model, 'fillForm') + // ? (new $this->model)->fillForm($record, $arguments) + // : [...$record->getAttributes(), + // 'start_date' => $arguments['event']['start'] ?? $record->start_date, + // 'end_date' => $arguments['event']['end'] ?? $record->end_date]; + // }) + // ->modalHeading(__('View').$this->model::getTitle()); + // } } \ No newline at end of file From fd08ce2290beb0da077724e51898d2abbb9ae1e6 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 1 Dec 2024 16:15:19 +0200 Subject: [PATCH 022/259] deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 844b693..ce3b5d1 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/start4 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/start5 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 54af1d3..5e76b7f 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -8,6 +8,7 @@ use App\Models\Task; use App\Services\RecurringEvents; use Carbon\Carbon; +use App\Services\Algorithm; use Filament\Actions\Action; use Filament\Forms\Form; use Illuminate\Database\Eloquent\Model; @@ -211,7 +212,11 @@ protected function activeFilters() } - protected function run() {} + protected function run() { + $algorithm = new Algorithm(); + $algorithm->run(); + $this->refreshRecords(); + } public function getConfig(): array { From 9e26ba74c278d01dffd7f3ad76f1872c03ca0126 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 1 Dec 2024 17:24:42 +0200 Subject: [PATCH 023/259] deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index ce3b5d1..2b97c21 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/start5 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/start6 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 5e76b7f..f682dba 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -147,7 +147,7 @@ protected function headerActions(): array ->visible(current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))), Action::make('Run Algorithm') - ->action(fn (): RecurringEvents => self::runEvents()) + ->action(fn () => self::run()) ->label(__('Run Algorithm')) ->icon('heroicon-o-play') ->visible(current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))), @@ -182,7 +182,6 @@ protected function runEvents() $recurringEvents = new RecurringEvents($this->currentMonth); $recurringEvents->recurringTask(); $this->refreshRecords(); - return $recurringEvents; } @@ -216,6 +215,7 @@ protected function run() { $algorithm = new Algorithm(); $algorithm->run(); $this->refreshRecords(); + } public function getConfig(): array From 838d02a653b135400225453dbf9e82b6d99d2e70 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 1 Dec 2024 17:44:38 +0200 Subject: [PATCH 024/259] deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 32 +++++++++++----------- database/seeders/DatabaseSeeder.php | 4 +-- lang/he.json | 2 ++ 4 files changed, 21 insertions(+), 19 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 2b97c21..c71c12d 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/start6 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/start7 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index f682dba..8d486a2 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -140,15 +140,15 @@ protected function headerActions(): array if (Task::exists()) { $actions = [ - Action::make('Shifts assignment') + Action::make('Create shifts') ->action(fn (): RecurringEvents => self::runEvents()) - ->label(__('Shifts assignment')) + ->label(__('Create shifts')) ->icon('heroicon-o-arrow-path') ->visible(current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))), - Action::make('Run Algorithm') + Action::make('Shifts assignment') ->action(fn () => self::run()) - ->label(__('Run Algorithm')) + ->label(__('Shifts assignment')) ->icon('heroicon-o-play') ->visible(current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))), ]; @@ -290,16 +290,16 @@ protected function modalActions(): array return []; } - // protected function viewAction(): Action - // { - // return ViewAction::make() - // ->fillForm(function (Model $record, array $arguments): array { - // return method_exists($this->model, 'fillForm') - // ? (new $this->model)->fillForm($record, $arguments) - // : [...$record->getAttributes(), - // 'start_date' => $arguments['event']['start'] ?? $record->start_date, - // 'end_date' => $arguments['event']['end'] ?? $record->end_date]; - // }) - // ->modalHeading(__('View').$this->model::getTitle()); - // } + protected function viewAction(): Action + { + return ViewAction::make() + ->fillForm(function (Model $record, array $arguments): array { + return method_exists($this->model, 'fillForm') + ? (new $this->model)->fillForm($record, $arguments) + : [...$record->getAttributes(), + 'start_date' => $arguments['event']['start'] ?? $record->start_date, + 'end_date' => $arguments['event']['end'] ?? $record->end_date]; + }) + ->modalHeading(__('View').$this->model::getTitle()); + } } \ No newline at end of file diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index f097938..4159c8b 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -631,8 +631,8 @@ public function run(): void ]), ]); - $recurringEvents = new RecurringEvents; - $recurringEvents->recurringTask(); + // $recurringEvents = new RecurringEvents; + // $recurringEvents->recurringTask(); } protected function createConstraints(int $userId) diff --git a/lang/he.json b/lang/he.json index bb26edb..842c535 100644 --- a/lang/he.json +++ b/lang/he.json @@ -26,6 +26,7 @@ "Constraints": "אילוצים", "Course": "קורס", "Create":"צור", + "Create shifts":"צור משמרות", "Daily": "יומי", "Daily range": "טווח יומי", "Date": "תאריך", @@ -123,6 +124,7 @@ "Shift": "משמרת", "Shift change":"החלפת משמרות", "Shifts": "משמרות", + "Shifts assignment":"שבץ משמרות", "Soldier": "חייל", "Soldier assignment": "הקצאת חייל", "Soldier details": "נתוני חייל", From d2d612d873d378b3dcb201f98403c7a4ea01755c Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 1 Dec 2024 17:55:57 +0200 Subject: [PATCH 025/259] deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index c71c12d..52b5a39 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/start7 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/start8 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 8d486a2..911f8ff 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -17,7 +17,7 @@ use Saade\FilamentFullCalendar\Actions\CreateAction; use Saade\FilamentFullCalendar\Actions\DeleteAction; use Saade\FilamentFullCalendar\Actions\EditAction; -use Saade\FilamentFullCalendar\Actions\viewAction; +use Saade\FilamentFullCalendar\Actions\ViewAction; use Saade\FilamentFullCalendar\FilamentFullCalendarPlugin; use Saade\FilamentFullCalendar\Widgets\FullCalendarWidget; From f82b5548717cbc1db827ca4f211768071b576a99 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 1 Dec 2024 18:02:58 +0200 Subject: [PATCH 026/259] deploy --- .github/workflows/php-build-and-deploy.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 52b5a39..779ad3e 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/start8 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/luy flavor: | latest=false tags: | @@ -54,3 +54,5 @@ jobs: tags: ${{ steps.meta.outputs.tags }} file: ./Dockerfile + + From 5fbe804d361b12a7eac25fe54aa86f4172c18a1c Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Mon, 2 Dec 2024 11:41:55 +0200 Subject: [PATCH 027/259] deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- .../override-filament-fullcalendar.css | 57 ++++++++++++++----- 2 files changed, 45 insertions(+), 14 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 779ad3e..1ae69c2 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/luy + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/luy1 flavor: | latest=false tags: | diff --git a/public/css/saade/filament-fullcalendar/override-filament-fullcalendar.css b/public/css/saade/filament-fullcalendar/override-filament-fullcalendar.css index 614d060..71798ef 100644 --- a/public/css/saade/filament-fullcalendar/override-filament-fullcalendar.css +++ b/public/css/saade/filament-fullcalendar/override-filament-fullcalendar.css @@ -1,20 +1,51 @@ -@media (max-width:425px){ - .fi-section{ +@media (max-width:700px) { + .fi-section { overflow-x: auto; } - .fi-section-content-ctn{ + + .fi-section-content-ctn { width: 650px; } - .filament-fullcalendar .fc-toolbar-title{ - font-size:1.875rem!important; - line-height:2.25rem!important + + .filament-fullcalendar .fc-toolbar-title { + font-size: 1.875rem !important; + line-height: 2.25rem !important + } + + .filament-fullcalendar.fc .fc-button { + min-height: 2.25rem; + border-radius: .5rem; + padding: .25rem 6px; + font-size: .875rem; + line-height: 1.25rem; + font-weight: 500; } - .filament-fullcalendar.fc .fc-button{ - min-height:2.25rem; - border-radius:.5rem; - padding:.25rem 6px; - font-size:.875rem; - line-height:1.25rem; - font-weight:500; + .fi-section-content-ctn{ + width: 300px; } } +@media (max-width:425px) { + .fi-section-content-ctn{ + width: 340px; + } +} +@media (max-width:375px) { + .fi-section-content-ctn{ + width: 290px; + } +} +@media (max-width:320px) { + .fi-section-content-ctn{ + width: 240px; + } +} + +.fc-day-past { + background-color:#ffffff ; + color: #d0d0d0; + cursor: not-allowed; +} + +.filament-fullcalendar .fc-day-past{ + --fc-highlight-color: #ffffff; +} \ No newline at end of file From 91df7a49b85a1353235034e06206b0ed36cf9b6f Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Mon, 2 Dec 2024 14:01:21 +0200 Subject: [PATCH 028/259] deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- .../override-filament-fullcalendar.css | 57 +++++-------------- 2 files changed, 14 insertions(+), 45 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 1ae69c2..fa137dd 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/luy1 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/luy2 flavor: | latest=false tags: | diff --git a/public/css/saade/filament-fullcalendar/override-filament-fullcalendar.css b/public/css/saade/filament-fullcalendar/override-filament-fullcalendar.css index 71798ef..614d060 100644 --- a/public/css/saade/filament-fullcalendar/override-filament-fullcalendar.css +++ b/public/css/saade/filament-fullcalendar/override-filament-fullcalendar.css @@ -1,51 +1,20 @@ -@media (max-width:700px) { - .fi-section { +@media (max-width:425px){ + .fi-section{ overflow-x: auto; } - - .fi-section-content-ctn { - width: 650px; - } - - .filament-fullcalendar .fc-toolbar-title { - font-size: 1.875rem !important; - line-height: 2.25rem !important - } - - .filament-fullcalendar.fc .fc-button { - min-height: 2.25rem; - border-radius: .5rem; - padding: .25rem 6px; - font-size: .875rem; - line-height: 1.25rem; - font-weight: 500; - } - .fi-section-content-ctn{ - width: 300px; - } -} -@media (max-width:425px) { .fi-section-content-ctn{ - width: 340px; + width: 650px; } -} -@media (max-width:375px) { - .fi-section-content-ctn{ - width: 290px; + .filament-fullcalendar .fc-toolbar-title{ + font-size:1.875rem!important; + line-height:2.25rem!important } -} -@media (max-width:320px) { - .fi-section-content-ctn{ - width: 240px; + .filament-fullcalendar.fc .fc-button{ + min-height:2.25rem; + border-radius:.5rem; + padding:.25rem 6px; + font-size:.875rem; + line-height:1.25rem; + font-weight:500; } } - -.fc-day-past { - background-color:#ffffff ; - color: #d0d0d0; - cursor: not-allowed; -} - -.filament-fullcalendar .fc-day-past{ - --fc-highlight-color: #ffffff; -} \ No newline at end of file From eeee42f2f1c25243caa74a83520d325796a7ab9f Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Tue, 3 Dec 2024 15:24:59 +0200 Subject: [PATCH 029/259] deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 109 ++++++++++-------- app/Models/Constraint.php | 22 ++-- app/Models/Shift.php | 1 + app/Resources/SoldierResource.php | 46 ++++---- app/Services/Algorithm.php | 103 +++++++++-------- app/Services/ManualAssignment.php | 91 ++++++++------- app/Services/Range.php | 5 +- app/Services/Schedule.php | 65 +++++------ app/Services/Shift.php | 4 +- app/Services/Soldier.php | 5 +- app/Services/Test.php | 48 +++++++- database/factories/ConstraintFactory.php | 4 +- database/factories/DepartmentFactory.php | 2 +- database/seeders/DatabaseSeeder.php | 4 +- .../override-filament-fullcalendar.css | 2 +- tests/Feature/ConstraintTest.php | 11 +- tests/Unit/AlgorithmServiceTest.php | 7 +- 18 files changed, 297 insertions(+), 234 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index fa137dd..ddfc567 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/luy2 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/luy4 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 911f8ff..af7dee0 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -6,9 +6,9 @@ use App\Models\Shift; use App\Models\Soldier; use App\Models\Task; +use App\Services\Algorithm; use App\Services\RecurringEvents; use Carbon\Carbon; -use App\Services\Algorithm; use Filament\Actions\Action; use Filament\Forms\Form; use Illuminate\Database\Eloquent\Model; @@ -17,7 +17,7 @@ use Saade\FilamentFullCalendar\Actions\CreateAction; use Saade\FilamentFullCalendar\Actions\DeleteAction; use Saade\FilamentFullCalendar\Actions\EditAction; -use Saade\FilamentFullCalendar\Actions\ViewAction; +use Saade\FilamentFullCalendar\Actions\viewAction; use Saade\FilamentFullCalendar\FilamentFullCalendarPlugin; use Saade\FilamentFullCalendar\Widgets\FullCalendarWidget; @@ -44,11 +44,9 @@ class CalendarWidget extends FullCalendarWidget public function fetchEvents(array $fetchInfo): array { - if (Carbon::parse($fetchInfo['start'])->day != 1) { - $this->currentMonth = Carbon::parse($fetchInfo['start'])->addMonth()->year.'-'.Carbon::parse($fetchInfo['start'])->addMonth()->month.'-'.'01'; - } else { - $this->currentMonth = Carbon::parse($fetchInfo['start'])->year.'-'.Carbon::parse($fetchInfo['start'])->month.'-'.'01'; - } + $this->currentMonth = (Carbon::parse($fetchInfo['start'])->day != 1) + ? Carbon::parse($fetchInfo['start'])->addMonth()->year . '-' . Carbon::parse($fetchInfo['start'])->addMonth()->month . '-' . '01' + : Carbon::parse($fetchInfo['start'])->year . '-' . Carbon::parse($fetchInfo['start'])->month . '-' . '01'; $events = $this->getEventsByRole(); @@ -85,18 +83,18 @@ public function getEventsByRole() ->orWhereNull('soldier_id') ->get() ->filter(function (Model $object) use ($current_user_id) { - $soldier = Soldier::where('id', '=', $object->soldier_id)->first(); + $soldier = Soldier::where('id', '=', $object->soldier_id)->first(); - return ! $soldier || $soldier?->team?->department?->commander_id == $current_user_id; - }), + return !$soldier || $soldier?->team?->department?->commander_id == $current_user_id; + }), 'team-commander' => $this->model::where('soldier_id', '!=', $current_user_id) ->orWhereNull('soldier_id') ->get() ->filter(function (Model $object) use ($current_user_id) { - $soldier = Soldier::where('id', '=', $object->soldier_id)->first(); + $soldier = Soldier::where('id', '=', $object->soldier_id)->first(); - return ! $soldier || $soldier?->team?->commander_id == $current_user_id; - }), + return !$soldier || $soldier?->team?->commander_id == $current_user_id; + }), } : $this->model::where('soldier_id', '=', $current_user_id)->get(); } @@ -124,13 +122,13 @@ protected function headerActions(): array 'end_date' => $arguments['end'] ?? null, ]); }) - ->label($this->model::getTitle().' '.__('New')) - ->modalHeading(__('Create').' '.$this->model::getTitle()) + ->label($this->model::getTitle() . ' ' . __('New')) + ->modalHeading(__('Create') . ' ' . $this->model::getTitle()) ->disabled(function (array $arguments) use ($today) { $startDate = Carbon::parse($arguments['start'] ?? null); return $startDate->isBefore($today); - }), + })->extraAttributes(['class' => 'fullcalendar']), ]; } } elseif ($this->model !== Shift::class) { @@ -141,16 +139,18 @@ protected function headerActions(): array if (Task::exists()) { $actions = [ Action::make('Create shifts') - ->action(fn (): RecurringEvents => self::runEvents()) + ->action(fn() => $this->runEvents()) ->label(__('Create shifts')) ->icon('heroicon-o-arrow-path') - ->visible(current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))), + ->visible(current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))) + ->extraAttributes(['class' => 'fullcalendar']), Action::make('Shifts assignment') - ->action(fn () => self::run()) + ->action(fn() => $this->runAlgorithm()) ->label(__('Shifts assignment')) ->icon('heroicon-o-play') - ->visible(current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))), + ->visible(current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))) + ->extraAttributes(['class' => 'fullcalendar']), ]; } } @@ -182,7 +182,13 @@ protected function runEvents() $recurringEvents = new RecurringEvents($this->currentMonth); $recurringEvents->recurringTask(); $this->refreshRecords(); - return $recurringEvents; + } + + protected function runAlgorithm() + { + $algorithm = new Algorithm($this->currentMonth); + $algorithm->run(); + $this->refreshRecords(); } protected function resetFilters() @@ -193,7 +199,8 @@ protected function resetFilters() $this->filter = false; $this->filterData = []; $this->refreshRecords(); - }); + }) + ->extraAttributes(['class' => 'fullcalendar']); } protected function activeFilters() @@ -204,20 +211,14 @@ protected function activeFilters() return Action::make($tag) ->label($tag) ->disabled() - ->badge(); + ->badge() + ->extraAttributes(['class' => 'fullcalendar']); }); return $tags->toArray(); } - protected function run() { - $algorithm = new Algorithm(); - $algorithm->run(); - $this->refreshRecords(); - - } - public function getConfig(): array { return array_merge(parent::getConfig(), [ @@ -231,27 +232,41 @@ protected function modalActions(): array EditAction::make() ->fillForm(function (Model $record, array $arguments): array { return method_exists($this->model, 'fillForm') - ? (new $this->model)->fillForm($record, $arguments) - : [...$record->getAttributes(), - 'start_date' => $arguments['event']['start'] ?? $record->start_date, - 'end_date' => $arguments['event']['end'] ?? $record->end_date]; + ? (new $this->model)->fillForm($record, $arguments) + : [ + ...$record->getAttributes(), + 'start_date' => $arguments['event']['start'] ?? $record->start_date, + 'end_date' => $arguments['event']['end'] ?? $record->end_date, + ]; }) ->modalCloseButton(false) ->modalCancelAction(false) ->modalSubmitAction(false) ->closeModalByClickingAway(false) - ->extraModalFooterActions(fn (Action $action): array => [ - $action->makeExtraModalAction(__('Save'), arguments: ['save' => true])->color('primary'), - $action->makeExtraModalAction(__('Cancel'), arguments: ['cancel' => true])->color('primary'), - ]) - ->modalHeading(__('Edit').' '.$this->model::getTitle()) + ->extraModalFooterActions(function (Action $action, array $arguments): array { + $canSave = empty($arguments) ? true : ( + isset($this->mountedActionsData[0]['constraint_type']) && + array_key_exists( + $this->mountedActionsData[0]['constraint_type'], + $this->model::getAvailableOptions($arguments['event']['start'], $arguments['event']['end']) + )); + + return [ + $action->makeExtraModalAction(__('Save'), arguments: ['save' => true]) + ->color('primary') + ->disabled(!$canSave), + $action->makeExtraModalAction(__('Cancel'), arguments: ['cancel' => true]) + ->color('primary'), + ]; + }) + ->modalHeading(__('Edit') . ' ' . $this->model::getTitle()) ->action(function (array $data, array $arguments, Model $record): void { $data = method_exists($this->model, 'setData') ? $data = $this->model::setData($record, $data) : $data; if ($arguments['cancel'] ?? false) { $this->refreshRecords(); } if ($arguments['save'] ?? false) { - $columns = Schema::getColumnListing(strtolower(class_basename($this->model)).'s'); + $columns = Schema::getColumnListing(strtolower(class_basename($this->model)) . 's'); $filteredData = array_intersect_key($data, array_flip($columns)); $record = $this->model::find($record['id']); if ($record) { @@ -270,7 +285,7 @@ protected function modalActions(): array if (method_exists($this->model, 'getAction')) { $action = $this->model::getAction($this) ->visible(function (): bool { - $record = is_array($this->mountedActionsData) && ! empty($this->mountedActionsData) + $record = is_array($this->mountedActionsData) && !empty($this->mountedActionsData) ? (object) $this->mountedActionsData[0] : (object) $this->mountedActionsData; @@ -295,11 +310,13 @@ protected function viewAction(): Action return ViewAction::make() ->fillForm(function (Model $record, array $arguments): array { return method_exists($this->model, 'fillForm') - ? (new $this->model)->fillForm($record, $arguments) - : [...$record->getAttributes(), - 'start_date' => $arguments['event']['start'] ?? $record->start_date, - 'end_date' => $arguments['event']['end'] ?? $record->end_date]; + ? (new $this->model)->fillForm($record, $arguments) + : [ + ...$record->getAttributes(), + 'start_date' => $arguments['event']['start'] ?? $record->start_date, + 'end_date' => $arguments['event']['end'] ?? $record->end_date, + ]; }) - ->modalHeading(__('View').$this->model::getTitle()); + ->modalHeading(__('View') . $this->model::getTitle()); } } \ No newline at end of file diff --git a/app/Models/Constraint.php b/app/Models/Constraint.php index 54f040b..e2b6025 100644 --- a/app/Models/Constraint.php +++ b/app/Models/Constraint.php @@ -28,8 +28,8 @@ class Constraint extends Model ]; protected $casts = [ - 'start_date' => 'datetime:Y-m-d H:i:s', - 'end_date' => 'datetime:Y-m-d H:i:s', + 'start_date' => 'datetime:Y-m-d', + 'end_date' => 'datetime:Y-m-d', ]; public function soldiers(): BelongsTo @@ -49,7 +49,7 @@ public static function getSchema(): array ->reactive() ->live() ->inline() - ->options(fn (Get $get) => self::availableOptions($get)) + ->options(fn (Get $get) => self::availableOptions($get('start_date'), $get('end_date'))) ->afterStateUpdated(fn (callable $set, $state, Get $get) => self::updateDates($set, $state, $get)), Hidden::make('start_date') ->required(), @@ -70,9 +70,9 @@ public static function getSchema(): array ]; } - private static function availableOptions($get): array + private static function availableOptions($startDate, $endDate): array { - $start_date = Carbon::parse($get('start_date')); + $start_date = Carbon::parse($startDate); $options = array_combine( array_map(fn ($enum) => $enum->value, ConstraintType::cases()), array_map(fn ($enum) => $enum->getLabel(), ConstraintType::cases()) @@ -86,13 +86,18 @@ private static function availableOptions($get): array unset($options[ConstraintType::NOT_WEEKEND->value]); unset($options[ConstraintType::LOW_PRIORITY_NOT_WEEKEND->value]); } - $usedCounts = self::getUsedCountsForCurrentMonth($get('start_date'), $get('end_date')); + $usedCounts = self::getUsedCountsForCurrentMonth($startDate, $endDate); $limits = ConstraintType::getLimit(); return array_filter($options, fn ($option) => ($limits[array_search($option, array_map(fn ($enum) => $enum->getLabel(), ConstraintType::cases()))] ?? 0) === 0 || ($usedCounts[array_search($option, array_map(fn ($enum) => $enum->getLabel(), ConstraintType::cases()))] ?? 0) < ($limits[array_search($option, array_map(fn ($enum) => $enum->getLabel(), ConstraintType::cases()))] ?? 0)); } + public static function getAvailableOptions($startDate, $endDate): array + { + return static::availableOptions($startDate, $endDate); + } + private static function getUsedCountsForCurrentMonth($startDate, $endDate): array { $currentUserId = auth()->user()->userable_id; @@ -137,7 +142,7 @@ public static function updateDates(callable $set, $state, Get $get) case 'Not weekend': case 'Low priority not weekend': $set('start_date', $startDate->startOfWeek(Carbon::THURSDAY)->toDateTimeString()); - $set('end_date', $endDate->next(Carbon::SUNDAY)->startOfDay()->toDateTimeString()); + $set('end_date', $endDate->endOfWeek(Carbon::SATURDAY)->setTime(23, 59, 0)->toDateTimeString()); break; default: @@ -190,6 +195,7 @@ public static function getFilters($calendar) return Action::make('Filters') ->label(__('Filter')) ->icon('heroicon-m-funnel') + ->extraAttributes(['class' => 'fullcalendar']) ->form(function () use ($calendar) { $constraints = $calendar->getEventsByRole(); $soldiersConstraints = array_filter($constraints->toArray(), fn ($constraint) => $constraint['soldier_id'] !== null); @@ -232,4 +238,4 @@ public static function getTitle(): string { return __('Constraint'); } -} +} \ No newline at end of file diff --git a/app/Models/Shift.php b/app/Models/Shift.php index 3b31615..6054378 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -198,6 +198,7 @@ public static function getFilters($calendar) return Action::make('Filters') ->label(__('Filter')) ->icon('heroicon-m-funnel') + ->extraAttributes(['class' => 'fullcalendar']) ->form(function () use ($calendar) { $shifts = $calendar->getEventsByRole(); $soldiersShifts = array_filter($shifts->toArray(), fn ($shift) => $shift['soldier_id'] !== null); diff --git a/app/Resources/SoldierResource.php b/app/Resources/SoldierResource.php index 0c3dd0d..86a64e1 100644 --- a/app/Resources/SoldierResource.php +++ b/app/Resources/SoldierResource.php @@ -51,7 +51,7 @@ public static function form(Form $form): Form ->schema([ Section::make()->schema([self::personalDetails()])->columns(), Section::make()->schema(self::soldierDetails())->columns(), - Section::make()->schema(self::reserveDays())->columns()->visible(fn (Get $get) => $get('is_reservist')), + Section::make()->schema(self::reserveDays())->columns()->visible(fn(Get $get) => $get('is_reservist')), Section::make()->schema(self::constraints())->columns(), ]); } @@ -64,7 +64,7 @@ public static function table(Table $table): Table TextColumn::make('user') ->label(__('Full name')) ->formatStateUsing(function ($record) { - return $record->user->last_name.' '.$record->user->first_name; + return $record->user->last_name . ' ' . $record->user->first_name; }) ->searchable(query: function ($query, $search) { $query->whereHas('user', function ($query) use ($search) { @@ -76,9 +76,9 @@ public static function table(Table $table): Table BooleanColumn::make('is_reservist')->label(__('Reservist')), BadgeColumn::make('gender') ->label(__('Gender')) - ->formatStateUsing(fn ($state) => $state ? __('Male') : __('Female')) + ->formatStateUsing(fn($state) => $state ? __('Male') : __('Female')) ->badge() - ->color(fn ($state) => $state ? 'info' : 'primary') + ->color(fn($state) => $state ? 'info' : 'primary') ->sortable(), TextColumn::make('reserve_dates')->label(__('Reserve dates'))->date()->listWithLineBreaks()->limitList(1)->expandableLimitedList()->placeholder('---')->toggleable(isToggledHiddenByDefault: true), TextColumn::make('next_reserve_dates')->label(__('Next reserve dates'))->date()->listWithLineBreaks()->limitList(1)->expandableLimitedList()->placeholder('---')->toggleable(isToggledHiddenByDefault: true), @@ -95,7 +95,7 @@ public static function table(Table $table): Table return $soldierShifts->filter(function (Shift $shift): bool { return Carbon::parse($shift->start_date)->month == now()->month || Carbon::parse($shift->end_date)->month == now()->month; - })->sum(fn (Shift $shift) => $shift->parallel_weight == 0 ? $shift->task->parallel_weight : $shift->parallel_weight); + })->sum(fn(Shift $shift) => $shift->parallel_weight == 0 ? $shift->task->parallel_weight : $shift->parallel_weight); }) ->label(__('Capacity hold')) ->numeric() @@ -110,7 +110,7 @@ public static function table(Table $table): Table } }) ->toggleColumnsTriggerAction( - fn (Action $action) => $action + fn(Action $action) => $action ->button() ->label(__('Columns')), ) @@ -141,19 +141,19 @@ public static function table(Table $table): Table ->default(null), Filter::make('reservist') ->label(__('Reservist')) - ->query(fn (Builder $query): Builder => $query->where('is_reservist', 1)) + ->query(fn(Builder $query): Builder => $query->where('is_reservist', 1)) ->toggle(), Filter::make('is_mabat') ->label(__('Is mabat')) - ->query(fn (Builder $query): Builder => $query->where('is_mabat', true)) + ->query(fn(Builder $query): Builder => $query->where('is_mabat', true)) ->toggle(), Filter::make('has_exemption') ->label(__('Exemption')) - ->query(fn (Builder $query): Builder => $query->where('has_exemption', true)) + ->query(fn(Builder $query): Builder => $query->where('has_exemption', true)) ->toggle(), Filter::make('is_trainee') ->label(__('Is trainee')) - ->query(fn (Builder $query): Builder => $query->where('is_trainee', true)) + ->query(fn(Builder $query): Builder => $query->where('is_trainee', true)) ->toggle(), Filter::make('enlist_date') ->form([ @@ -171,11 +171,11 @@ public static function table(Table $table): Table return $query ->when( $data['recruitment_from'], - fn (Builder $query, $date): Builder => $query->whereDate('enlist_date', '>=', $date), + fn(Builder $query, $date): Builder => $query->whereDate('enlist_date', '>=', $date), ) ->when( $data['recruitment_until'], - fn (Builder $query, $date): Builder => $query->whereDate('enlist_date', '<=', $date), + fn(Builder $query, $date): Builder => $query->whereDate('enlist_date', '<=', $date), ); }), @@ -183,7 +183,7 @@ public static function table(Table $table): Table ->filtersFormColumns(4) ->deferFilters() ->filtersTriggerAction( - fn (Action $action) => $action + fn(Action $action) => $action ->button() ->label(__('Filter')) ) @@ -192,7 +192,7 @@ public static function table(Table $table): Table EditAction::make(), DeleteAction::make() ->label(__('Delete')) - ->modalHeading(__('Delete').' '.self::getModelLabel()), + ->modalHeading(__('Delete') . ' ' . self::getModelLabel()), Action::make('update reserve days') ->label(__('Update reserve days')) ->icon('heroicon-o-pencil') @@ -212,7 +212,7 @@ public static function table(Table $table): Table $record->save(); }) ->closeModalByClickingAway(false) - ->hidden(fn ($record) => ! $record->is_reservist), + ->hidden(fn($record) => !$record->is_reservist), ReplicateAction::make() ->icon('heroicon-o-document-duplicate') ->color('success') @@ -323,21 +323,17 @@ public static function constraints(): array TextInput::make('max_weekends')->label(__('Max weekends'))->numeric()->minValue(0)->required()->default(0), ]) ->columns(3), - Split::make([ - Section::make([ - Toggle::make('is_trainee') - ->label(__('Is trainee')), - Toggle::make('is_mabat') - ->label(__('Is mabat')), - ]) - ->columns(2), + Section::make([ + Toggle::make('is_trainee') + ->label(__('Is trainee')), + Toggle::make('is_mabat') + ->label(__('Is mabat')), Select::make('qualifications') ->label(__('Qualifications')) ->multiple() ->placeholder(__('Select qualifications')) ->options(Task::all()->pluck('type', 'type')), - ])->columns(2) - ->columnSpan('full'), + ])->columns(3), ]; } diff --git a/app/Services/Algorithm.php b/app/Services/Algorithm.php index 0b3a162..bac1519 100644 --- a/app/Services/Algorithm.php +++ b/app/Services/Algorithm.php @@ -6,26 +6,30 @@ use App\Enums\Priority; use App\Models\Shift; use App\Models\Soldier; +use App\Services\Constraint as ConstraintService; +use App\Services\Shift as ShiftService; +use App\Services\Soldier as SoldierService; +use Carbon\Carbon; class Algorithm { + protected $date; + + public function __construct($date = null) + { + $this->date = $date ? Carbon::parse($date) : now()->addMonth(); + } + protected function getShiftWithTasks() { - $shifts = Shift::whereNull('soldier_id') + return Shift::whereNull('soldier_id') ->get() - ->map( - fn (Shift $shift) => new \App\Services\Shift( - $shift->id, - $shift->task->type, - $shift->start_date, - $shift->end_date, - $shift->parallel_weight == 0 ? $shift->task->parallel_weight : $shift->parallel_weight, - $shift->task->is_night, - $shift->is_weekend != null ? $shift->is_weekend : $shift->task->is_weekend - ) - ); - - return $shifts; + ->filter(function (Shift $shift) { + $range = new Range($shift->start_date, $shift->end_date); + + return $range->isSameMonth(new Range($this->date->copy()->startOfMonth(), $this->date->copy()->endOfMonth())); + }) + ->map(fn (Shift $shift): ShiftService => $this->buildShift($shift)); } protected function getSoldiersDetails() @@ -34,25 +38,31 @@ protected function getSoldiersDetails() ->where('is_reservist', false) ->get() ->map(function (Soldier $soldier) { - $constraints = $soldier->constraints->map( - fn ($constraint) => new \App\Services\Constraint( - $constraint->start_date, - $constraint->end_date, - ConstraintType::getPriority()[$constraint->constraint_type] == 1 ? Priority::HIGH : Priority::LOW - ) - ); + $constraints = $soldier->constraints + ->filter(function ($constraint) { + $range = new Range($constraint->start_date, $constraint->end_date); + + return $range->isSameMonth(new Range($this->date->copy()->startOfMonth(), $this->date->copy()->endOfMonth())); + }) + ->map( + fn ($constraint) => new ConstraintService( + $constraint->start_date, + $constraint->end_date, + ConstraintType::getPriority()[$constraint->constraint_type] == 1 ? Priority::HIGH : Priority::LOW + ) + ); $shifts = $this->getSoldiersShifts($soldier); $shifts->push(...$this->addShiftsSpaces($shifts)); - $soldierSums = $this->soldierSum($shifts); + $capacityHold = $this->capacityHold($shifts); - return new \App\Services\Soldier( + return new SoldierService( $soldier->id, - new MaxData($soldier->capacity, $soldierSums['points']), - new MaxData($soldier->max_shifts, $soldierSums['count']), - new MaxData($soldier->max_nights, $soldierSums['sumNights']), - new MaxData($soldier->max_weekends, $soldierSums['sumWeekends']), + new MaxData($soldier->capacity, $capacityHold['points']), + new MaxData($soldier->max_shifts, $capacityHold['count']), + new MaxData($soldier->max_nights, $capacityHold['sumNights']), + new MaxData($soldier->max_weekends, $capacityHold['sumWeekends']), $soldier->qualifications, $constraints, $shifts @@ -70,38 +80,39 @@ protected function getSoldiersShifts(Soldier $soldier) function (Shift $shift): bool { $range = new Range($shift->start_date, $shift->end_date); - return $range->isSameMonth(new Range(now()->addMonth(), now()->addMonth())); + return $range->isSameMonth(new Range($this->date->copy()->startOfMonth(), $this->date->copy()->endOfMonth())); } - )->map(fn (Shift $shift) => new \App\Services\Shift( - $shift->id, - $shift->task->type, - $shift->start_date, - $shift->end_date, - $shift->parallel_weight == 0 ? $shift->task->parallel_weight : $shift->parallel_weight, - $shift->task->is_night, - $shift->is_weekend != null ? $shift->is_weekend : $shift->task->is_weekend, - )); + ) + ->map(fn (Shift $shift): ShiftService => $this->buildShift($shift)); + } + + protected function buildShift(Shift $shift): ShiftService + { + return new ShiftService( + $shift->id, + $shift->task->type, + $shift->start_date, + $shift->end_date, + $shift->parallel_weight == 0 ? $shift->task->parallel_weight : $shift->parallel_weight, + $shift->task->is_night, + $shift->is_weekend != null ? $shift->is_weekend : $shift->task->is_weekend, + ); } protected function addShiftsSpaces($shifts) { $allSpaces = collect([]); - collect($shifts)->map(function (\App\Services\Shift $shift) use ($shifts, &$allSpaces) { - if ($shift->isWeekend) { - $spaces = $shift->getShiftSpaces($shifts); - } - if ($shift->isNight) { - $spaces = $shift->getShiftSpaces($shifts); - } + collect($shifts)->map(function (ShiftService $shift) use ($shifts, &$allSpaces) { + $spaces = $shift->isWeekend || $shift->isNight ? $shift->getShiftSpaces($shifts) : null; if (! empty($spaces)) { - collect($spaces)->map(fn (Range $space) => $allSpaces->push(new \App\Services\Shift(0, 'space', $space->start, $space->end, 0, false, false))); + collect($spaces)->map(fn (Range $space) => $allSpaces->push(new ShiftService(0, 'space', $space->start, $space->end, 0, false, false))); } }); return $allSpaces; } - protected function soldierSum($shifts) + protected function capacityHold($shifts): array { $points = 0; $nights = 0; diff --git a/app/Services/ManualAssignment.php b/app/Services/ManualAssignment.php index d763a03..0ac6e99 100644 --- a/app/Services/ManualAssignment.php +++ b/app/Services/ManualAssignment.php @@ -10,6 +10,9 @@ use App\Models\Shift; use App\Models\Soldier; use App\Models\User; +use App\Services\Constraint as ConstraintService; +use App\Services\Shift as ShiftService; +use App\Services\Soldier as SoldierService; use Illuminate\Support\Facades\Cache; class ManualAssignment @@ -22,15 +25,7 @@ class ManualAssignment public function __construct(Shift $shift, string $soldierType) { - $this->shift = new \App\Services\Shift( - $shift->id, - $shift->task->type, - $shift->start_date, - $shift->end_date, - $shift->parallel_weight == 0 ? $shift->task->parallel_weight : $shift->parallel_weight, - $shift->task->is_night, - $shift->is_weekend != null ? $shift->is_weekend : $shift->task->is_weekend - ); + $this->shift = $this->buildShift($shift); $this->soldierType = $soldierType; $this->soldiers = []; } @@ -118,14 +113,14 @@ function (User $user) use ($qualification) { $soldiersShifts->push(...$this->addShiftsSpaces($soldiersShifts)); - $soldierSums = $this->soldierSum($soldiersShifts); + $capacityHold = $this->capacityHold($soldiersShifts); - return new \App\Services\Soldier( + return new SoldierService( $soldier->id, - new MaxData($soldier->capacity, $soldierSums['points']), - new MaxData($soldier->max_shifts, $soldierSums['count']), - new MaxData($soldier->max_nights, $soldierSums['sumNights']), - new MaxData($soldier->max_weekends, $soldierSums['sumWeekends']), + new MaxData($soldier->capacity, $capacityHold['points']), + new MaxData($soldier->max_shifts, $capacityHold['count']), + new MaxData($soldier->max_nights, $capacityHold['sumNights']), + new MaxData($soldier->max_weekends, $capacityHold['sumWeekends']), $soldier->qualifications, $constraints, $soldiersShifts @@ -148,14 +143,14 @@ public function amIAvailable($qualification = null): bool $myShifts->push(...$this->addShiftsSpaces($myShifts)); - $soldierSums = $this->soldierSum($myShifts); + $capacityHold = $this->capacityHold($myShifts); - $soldier = new \App\Services\Soldier( + $soldier = new SoldierService( $me->id, - new MaxData($me->capacity, $soldierSums['points']), - new MaxData($me->max_shifts, $soldierSums['count']), - new MaxData($me->max_nights, $soldierSums['sumNights']), - new MaxData($me->max_weekends, $soldierSums['sumWeekends']), + new MaxData($me->capacity, $capacityHold['points']), + new MaxData($me->max_shifts, $capacityHold['count']), + new MaxData($me->max_nights, $capacityHold['sumNights']), + new MaxData($me->max_weekends, $capacityHold['sumWeekends']), $me->qualifications, $constraints, $myShifts @@ -183,30 +178,35 @@ protected function getSoldiersShifts(Soldier $soldier) return Shift::where('soldier_id', $soldier->id) ->get() ->filter( - fn (Shift $shift) => $this->shift->range->isSameMonth(new Range($shift->start_date, $shift->end_date)) - )->map(fn (Shift $shift) => new \App\Services\Shift( - $shift->id, - $shift->task->type, - $shift->start_date, - $shift->end_date, - $shift->parallel_weight == 0 ? $shift->task->parallel_weight : $shift->parallel_weight, - $shift->task->is_night, - $shift->is_weekend != null ? $shift->is_weekend : $shift->task->is_weekend, - )); + function (Shift $shift): bool { + $range = new Range($shift->start_date, $shift->end_date); + + return $range->isSameMonth(new Range($this->shift->range->start->startOfMonth(), $this->shift->range->end->endOfMonth())); + } + ) + ->map(fn (Shift $shift): ShiftService => $this->buildShift($shift)); + } + + protected function buildShift(Shift $shift): ShiftService + { + return new ShiftService( + $shift->id, + $shift->task->type, + $shift->start_date, + $shift->end_date, + $shift->parallel_weight == 0 ? $shift->task->parallel_weight : $shift->parallel_weight, + $shift->task->is_night, + $shift->is_weekend != null ? $shift->is_weekend : $shift->task->is_weekend, + ); } protected function addShiftsSpaces($shifts) { $allSpaces = collect([]); - collect($shifts)->map(function (\App\Services\Shift $shift) use ($shifts, &$allSpaces) { - if ($shift->isWeekend) { - $spaces = $shift->getShiftSpaces($shifts); - } - if ($shift->isNight) { - $spaces = $shift->getShiftSpaces($shifts); - } + collect($shifts)->map(function (ShiftService $shift) use ($shifts, &$allSpaces) { + $spaces = $shift->isWeekend || $shift->isNight ? $shift->getShiftSpaces($shifts) : null; if (! empty($spaces)) { - collect($spaces)->map(fn (Range $space) => $allSpaces->push(new \App\Services\Shift(0, 'space', $space->start, $space->end, 0, false, false))); + collect($spaces)->map(fn (Range $space) => $allSpaces->push(new ShiftService(0, 'space', $space->start, $space->end, 0, false, false))); } }); @@ -217,8 +217,13 @@ protected function getConstraintBy(int $soldierId) { return Constraint::where('soldier_id', $soldierId) ->get() + ->filter(function (Constraint $constraint) { + $range = new Range($constraint->start_date, $constraint->end_date); + + return $range->isSameMonth(new Range($this->shift->range->start->startOfMonth(), $this->shift->range->end->endOfMonth())); + }) ->map( - fn ($constraint) => new \App\Services\Constraint( + fn (Constraint $constraint): ConstraintService => new ConstraintService( $constraint->start_date, $constraint->end_date, ConstraintType::getPriority()[$constraint->constraint_type] == 1 ? Priority::HIGH : Priority::LOW @@ -226,7 +231,7 @@ protected function getConstraintBy(int $soldierId) ); } - protected function soldierSum($shifts) + protected function capacityHold($shifts) { $points = 0; $nights = 0; @@ -254,7 +259,7 @@ protected function soldierSum($shifts) protected function getAvailableSoldiers() { $availableSoldiers = $this->soldiers->filter( - fn (\App\Services\Soldier $soldier) => $soldier->isQualified($this->shift->taskType) + fn (SoldierService $soldier) => $soldier->isQualified($this->shift->taskType) && $soldier->isAvailableByMaxes($this->shift) && $soldier->isAvailableByConstraints($this->shift->range) != Availability::NO && $soldier->isAvailableByShifts($this->shift->range) @@ -262,7 +267,7 @@ protected function getAvailableSoldiers() ); return $availableSoldiers->mapWithKeys( - function (\App\Services\Soldier $soldier) { + function (SoldierService $soldier) { $user = User::where('userable_id', '=', $soldier->id)->first(); return [$user->userable_id => $user->displayName]; diff --git a/app/Services/Range.php b/app/Services/Range.php index 466f618..fc40dd6 100644 --- a/app/Services/Range.php +++ b/app/Services/Range.php @@ -63,10 +63,7 @@ public function isNight(): bool public function isSameMonth(Range $other): bool { - return $other->start->monthName == $this->start->monthName - || $other->start->monthName == $this->end->monthName - || $other->end->monthName == $this->start->monthName - || $other->end->monthName == $this->end->monthName; + return $this->isConflict($other); } public function isRangeInclude(DaysInWeek $dayInWeek): bool diff --git a/app/Services/Schedule.php b/app/Services/Schedule.php index 4d37e1f..953d553 100644 --- a/app/Services/Schedule.php +++ b/app/Services/Schedule.php @@ -3,6 +3,7 @@ namespace App\Services; use App\Enums\Availability; +use App\Models\Shift as ShiftModel; class Schedule { @@ -52,13 +53,7 @@ public function schedule(): void { $this->initShiftsData(); $this->initSoldiersData(); - $sortedShifts = $this->getSortedShiftsList(); - collect($sortedShifts)->map(function (ShiftData $shift) { - $success = $this->assignShift($shift); - if (! $success) { - $this->unAssignments->push($shift->shift); - } - }); + $this->assignShifts(); $this->updateDB(); } @@ -136,11 +131,21 @@ protected function addShiftData(Shift $shift, $soldiers, $taskWeight) $this->shiftsData->push($shiftData); } + protected function getRatio(float $required, float $available): float + { + return $available == 0 ? 0 : (float) $this->maximumOne((float) $required / $available); + } + + protected function maximumOne(float $number): float + { + return $number > 1 ? 1 : $number; + } + protected function getPotentialSoldiers($soldiers, Range $range) { $potentialSoldiers = $soldiers->filter(function (Soldier $soldier) use ($range) { return $soldier->isAvailableByConstraints($range) != Availability::NO; - })->map(function (Soldier $soldier) use ($range) { + })->map(function (Soldier $soldier) use ($range): PotentialSoldierData { $availability = $soldier->isAvailableByConstraints($range); return new PotentialSoldierData( @@ -169,22 +174,22 @@ protected function getShiftWeight($taskWeight, Shift $shift, int $soldiersCount, return $weight; } - protected function getShiftBlockPoints(float $points): float + protected function getShiftAvailabilityRatio(int $soldiersCount, int $availableSoldiers): float { - if ($points == 0) { + if ($availableSoldiers == 0) { return 0; } - return (float) $points / 3; + return (float) ($soldiersCount - $availableSoldiers) / $soldiersCount; } - protected function getShiftAvailabilityRatio(int $soldiersCount, int $availableSoldiers): float + protected function getShiftBlockPoints(float $points): float { - if ($availableSoldiers == 0) { + if ($points == 0) { return 0; } - return (float) ($soldiersCount - $availableSoldiers) / $soldiersCount; + return (float) $points / 3; } protected function initSoldiersData(): void @@ -192,6 +197,17 @@ protected function initSoldiersData(): void $this->soldiers->map(fn (Soldier $soldier) => $this->soldiersDict->put($soldier->id, $soldier)); } + protected function assignShifts() + { + $sortedShifts = $this->getSortedShiftsList(); + collect($sortedShifts)->map(function (ShiftData $shift) { + $success = $this->assignShift($shift); + if (! $success) { + $this->unAssignments->push($shift->shift); + } + }); + } + protected function getSortedShiftsList() { return $this->shiftsData->sortByDesc('weight'); @@ -275,27 +291,8 @@ protected function tryAssign(Soldier $soldier, Shift $shift): bool return false; } - protected function getRatio(float $required, float $available): float - { - if ($available == 0) { - return 0; - } - $ratio = (float) $required / $available; - - return (float) $this->maximumOne($ratio); - } - - protected function maximumOne(float $number): float - { - if ($number > 1) { - return 1; - } - - return $number; - } - protected function updateDB() { - collect($this->assignments)->map(fn (Assignment $assignment) => \App\Models\Shift::where('id', $assignment->shiftId)->update(['soldier_id' => $assignment->soldierId])); + collect($this->assignments)->map(fn (Assignment $assignment) => ShiftModel::where('id', $assignment->shiftId)->update(['soldier_id' => $assignment->soldierId])); } } \ No newline at end of file diff --git a/app/Services/Shift.php b/app/Services/Shift.php index bda7353..3b520cd 100644 --- a/app/Services/Shift.php +++ b/app/Services/Shift.php @@ -42,9 +42,7 @@ public function getShiftSpaces($shifts) protected function getWeekendSpaces($shifts) { - if ($this->isFullWeekend($shifts)) { - return [$this->range->getDayAfterWeekend()]; - } + return $this->isFullWeekend($shifts) ? [$this->range->getDayAfterWeekend()] : null; } protected function isFullWeekend($shifts) diff --git a/app/Services/Soldier.php b/app/Services/Soldier.php index b8e9ea8..e0a652e 100644 --- a/app/Services/Soldier.php +++ b/app/Services/Soldier.php @@ -49,10 +49,7 @@ public function isAbleTake(Shift $shift, $spaces): bool public function isAvailableByMaxes(Shift $shift): bool { - if ($shift->isWeekend && $this->weekendsMaxData->remaining() < $shift->points) { - return false; - } - if ($shift->isNight && $this->nightsMaxData->remaining() < $shift->points) { + if (($shift->isWeekend && $this->weekendsMaxData->remaining() < $shift->points) || ($shift->isNight && $this->nightsMaxData->remaining() < $shift->points)) { return false; } diff --git a/app/Services/Test.php b/app/Services/Test.php index f4847bb..3dfe155 100644 --- a/app/Services/Test.php +++ b/app/Services/Test.php @@ -2,17 +2,33 @@ namespace App\Services; +use App\Enums\ConstraintType; +use App\Models\Constraint as ConstraintModel; use App\Models\Shift; use App\Models\User; class Test { - public function test() + public function test($month = null) { - $shifts = Shift::whereNotNull('soldier_id')->get()->groupBy('soldier_id'); + $month ??= now()->addMonth(); + $shifts = Shift::whereNotNull('soldier_id') + ->get() + ->filter(function (Shift $shift) use ($month): bool { + $range = new Range( + $shift->start_date, + $shift->end_date, + ); + + return $range->isSameMonth(new Range($month->startOfMonth(), $month->endOfMonth())); + }) + ->groupBy('soldier_id'); + $soldiersDetails = collect(); - $shifts->each(callback: function ($shifts, $soldier_id) use ($soldiersDetails) { + + $shifts->each(function ($shifts, $soldier_id) use ($soldiersDetails) { $user = User::where('userable_id', $soldier_id)->first(); + $constraints = ConstraintModel::where('soldier_id', $soldier_id)->get(); $soldiersDetails->push([ 'first_name' => $user->first_name, 'last_name' => $user->last_name, @@ -20,6 +36,8 @@ public function test() 'weekends' => $this->howMuchWeekends($shifts), 'shifts' => $shifts->count(), 'points' => $this->howMuchPoints($shifts), + 'constraints' => $constraints, + 'lowConstraintsRejected' => $this->howMuchLowConstraintsRejected($constraints, $shifts), ]); }); } @@ -38,4 +56,26 @@ protected function howMuchPoints($shifts) { return collect($shifts)->sum(fn ($shift) => $shift->parallel_weight != null ? $shift->parallel_weight : $shift->task->parallel_weight); } -} + + protected function howMuchLowConstraintsRejected($constraints, $shifts): int + { + $count = 0; + $constraints->filter( + fn (ConstraintModel $constraint) => ConstraintType::getPriority()[$constraint->constraint_type] == 2 + ) + ->map( + function ($constraint) use ($count, $shifts) { + $shifts->map(function ($shift) use ($constraint, $count) { + $range = new Range( + $shift->start_date, + $shift->end_date, + ); + $range->isConflict(new Range($constraint->start_date, $constraint->end_date)) ? + $count++ : $count; + }); + } + ); + + return $count; + } +} \ No newline at end of file diff --git a/database/factories/ConstraintFactory.php b/database/factories/ConstraintFactory.php index 7bf9579..224cc5c 100644 --- a/database/factories/ConstraintFactory.php +++ b/database/factories/ConstraintFactory.php @@ -8,8 +8,6 @@ class ConstraintFactory extends Factory { public function definition(): array { - return [ - - ]; + return []; } } \ No newline at end of file diff --git a/database/factories/DepartmentFactory.php b/database/factories/DepartmentFactory.php index 8735667..a83ff00 100644 --- a/database/factories/DepartmentFactory.php +++ b/database/factories/DepartmentFactory.php @@ -14,4 +14,4 @@ public function definition(): array 'commander_id' => User::factory(), ]; } -} +} \ No newline at end of file diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 4159c8b..f097938 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -631,8 +631,8 @@ public function run(): void ]), ]); - // $recurringEvents = new RecurringEvents; - // $recurringEvents->recurringTask(); + $recurringEvents = new RecurringEvents; + $recurringEvents->recurringTask(); } protected function createConstraints(int $userId) diff --git a/public/css/saade/filament-fullcalendar/override-filament-fullcalendar.css b/public/css/saade/filament-fullcalendar/override-filament-fullcalendar.css index 614d060..659d6f8 100644 --- a/public/css/saade/filament-fullcalendar/override-filament-fullcalendar.css +++ b/public/css/saade/filament-fullcalendar/override-filament-fullcalendar.css @@ -2,7 +2,7 @@ .fi-section{ overflow-x: auto; } - .fi-section-content-ctn{ + .fi-section-content-ctn:has(.fullcalendar){ width: 650px; } .filament-fullcalendar .fc-toolbar-title{ diff --git a/tests/Feature/ConstraintTest.php b/tests/Feature/ConstraintTest.php index bb04961..58ee8c7 100644 --- a/tests/Feature/ConstraintTest.php +++ b/tests/Feature/ConstraintTest.php @@ -15,15 +15,14 @@ }); it('should return the correct available options based on start date and used counts', function () { - $get = function ($key) { - return $key == 'start_date' ? '2023-04-01 00:00:00' : '2023-04-01 23:59:00'; - }; + $startDate = '2023-04-01 00:00:00'; + $endDate = '2023-04-01 23:59:00'; $class = new ReflectionClass(Constraint::class); $availableOptionsMethod = $class->getMethod('availableOptions'); $availableOptionsMethod->setAccessible(true); - $result = $availableOptionsMethod->invoke(null, $get); + $result = $availableOptionsMethod->invoke(null, $startDate, $endDate); expect($result)->toBeArray(); expect($result)->toContain(__('Medical'), __('Vacation'), __('School'), __('Not task'), __('Low priority not task'), __('Not evening')); @@ -109,5 +108,5 @@ Constraint::updateDates($set, null, $getMock); expect($dates['start_date'])->toBe('2023-03-30 00:00:00'); - expect($dates['end_date'])->toBe('2023-04-02 00:00:00'); -}); + expect($dates['end_date'])->toBe('2023-04-01 23:59:00'); +}); \ No newline at end of file diff --git a/tests/Unit/AlgorithmServiceTest.php b/tests/Unit/AlgorithmServiceTest.php index 10f0bca..ec2c7d2 100644 --- a/tests/Unit/AlgorithmServiceTest.php +++ b/tests/Unit/AlgorithmServiceTest.php @@ -5,7 +5,6 @@ use App\Models\Soldier; use App\Models\Task; use App\Services\Algorithm; -use Carbon\Carbon; it('should return only unassigned shifts', function () { $reflection = new ReflectionClass(Algorithm::class); @@ -24,6 +23,8 @@ Shift::factory()->count(3)->create([ 'task_id' => $task->id, 'soldier_id' => null, + 'start_date' => now()->addMonth(), + 'end_date' => now()->addMonth()->addDay(), ]); $shiftsWithTasks = $method->invoke(new Algorithm); $shiftsWithTasks->map(fn ($shift) => expect($shift->isNight)->toBe($task->is_night)); @@ -50,8 +51,8 @@ Constraint::factory()->count(3)->create([ 'soldier_id' => $soldier->id, 'constraint_type' => 'Not task', - 'start_date' => now(), - 'end_date' => Carbon::now()->addDay(), + 'start_date' => now()->addMonth(), + 'end_date' => now()->addMonth()->addDay(), ]); $soldierWithConstraints = $method->invoke(new Algorithm); expect($soldierWithConstraints[0]->constraints->count())->toBe(3); From 8ec0623aa80494174f21388c0e5dfa2cf1057c1f Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Tue, 3 Dec 2024 15:42:59 +0200 Subject: [PATCH 030/259] deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index ddfc567..7b68be5 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/luy4 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/luy5 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index af7dee0..2758b40 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -17,7 +17,7 @@ use Saade\FilamentFullCalendar\Actions\CreateAction; use Saade\FilamentFullCalendar\Actions\DeleteAction; use Saade\FilamentFullCalendar\Actions\EditAction; -use Saade\FilamentFullCalendar\Actions\viewAction; +use Saade\FilamentFullCalendar\Actions\ViewAction; use Saade\FilamentFullCalendar\FilamentFullCalendarPlugin; use Saade\FilamentFullCalendar\Widgets\FullCalendarWidget; From a584004f4f6b9f5b0aa246c20ee797674cbc534a Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Tue, 3 Dec 2024 17:12:17 +0200 Subject: [PATCH 031/259] deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 39 +++++++++---------- app/Models/Constraint.php | 6 +-- app/Models/Soldier.php | 2 +- app/Models/User.php | 3 +- app/Providers/AppServiceProvider.php | 5 +-- .../ShiftResource/Pages/ListShifts.php | 2 +- app/Resources/SoldierResource.php | 35 +++++++++-------- app/Resources/TaskResource.php | 2 +- .../TaskResource/Pages/CreateTask.php | 2 +- app/Services/Algorithm.php | 2 +- app/Services/Assignment.php | 2 +- app/Services/ManualAssignment.php | 2 +- app/Services/MaxData.php | 2 +- app/Services/PotentialSoldierData.php | 2 +- app/Services/Range.php | 2 +- app/Services/RecurringEvents.php | 2 +- app/Services/Schedule.php | 2 +- app/Services/Shift.php | 2 +- app/Services/ShiftData.php | 2 +- app/Services/Soldier.php | 2 +- app/Services/Test.php | 2 +- bootstrap/app.php | 2 +- database/factories/ConstraintFactory.php | 2 +- database/factories/DepartmentFactory.php | 2 +- database/factories/SoldierFactory.php | 1 - ...2024_05_30_094012_create_soldier_table.php | 1 - .../2024_05_30_100244_create_task_table.php | 2 +- database/seeders/DatabaseSeeder.php | 2 +- lang/he.json | 3 +- .../override-filament-fullcalendar.css | 39 ++++++++++++------- tests/Feature/CalendarWidgetTest.php | 2 +- tests/Feature/ConstraintTest.php | 2 +- tests/Feature/DeleteTaskTest.php | 29 -------------- tests/Feature/ReplicateSoldierTest.php | 2 +- tests/Pest.php | 2 +- tests/Unit/AlgorithmServiceTest.php | 2 +- tests/Unit/MaxDataServiceTest.php | 2 +- tests/Unit/RangeServiceTest.php | 2 +- tests/Unit/ScheduleServiceTest.php | 2 +- tests/Unit/ShiftServiceTest.php | 2 +- tests/Unit/SoldierServiceTest.php | 2 +- 42 files changed, 103 insertions(+), 122 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 7b68be5..ac696c5 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/luy5 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/luy6 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 2758b40..d073a64 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -45,8 +45,8 @@ public function fetchEvents(array $fetchInfo): array { $this->currentMonth = (Carbon::parse($fetchInfo['start'])->day != 1) - ? Carbon::parse($fetchInfo['start'])->addMonth()->year . '-' . Carbon::parse($fetchInfo['start'])->addMonth()->month . '-' . '01' - : Carbon::parse($fetchInfo['start'])->year . '-' . Carbon::parse($fetchInfo['start'])->month . '-' . '01'; + ? Carbon::parse($fetchInfo['start'])->addMonth()->year.'-'.Carbon::parse($fetchInfo['start'])->addMonth()->month.'-'.'01' + : Carbon::parse($fetchInfo['start'])->year.'-'.Carbon::parse($fetchInfo['start'])->month.'-'.'01'; $events = $this->getEventsByRole(); @@ -83,18 +83,18 @@ public function getEventsByRole() ->orWhereNull('soldier_id') ->get() ->filter(function (Model $object) use ($current_user_id) { - $soldier = Soldier::where('id', '=', $object->soldier_id)->first(); + $soldier = Soldier::where('id', '=', $object->soldier_id)->first(); - return !$soldier || $soldier?->team?->department?->commander_id == $current_user_id; - }), + return ! $soldier || $soldier?->team?->department?->commander_id == $current_user_id; + }), 'team-commander' => $this->model::where('soldier_id', '!=', $current_user_id) ->orWhereNull('soldier_id') ->get() ->filter(function (Model $object) use ($current_user_id) { - $soldier = Soldier::where('id', '=', $object->soldier_id)->first(); + $soldier = Soldier::where('id', '=', $object->soldier_id)->first(); - return !$soldier || $soldier?->team?->commander_id == $current_user_id; - }), + return ! $soldier || $soldier?->team?->commander_id == $current_user_id; + }), } : $this->model::where('soldier_id', '=', $current_user_id)->get(); } @@ -122,8 +122,8 @@ protected function headerActions(): array 'end_date' => $arguments['end'] ?? null, ]); }) - ->label($this->model::getTitle() . ' ' . __('New')) - ->modalHeading(__('Create') . ' ' . $this->model::getTitle()) + ->label($this->model::getTitle().' '.__('New')) + ->modalHeading(__('Create').' '.$this->model::getTitle()) ->disabled(function (array $arguments) use ($today) { $startDate = Carbon::parse($arguments['start'] ?? null); @@ -139,14 +139,13 @@ protected function headerActions(): array if (Task::exists()) { $actions = [ Action::make('Create shifts') - ->action(fn() => $this->runEvents()) + ->action(fn () => $this->runEvents()) ->label(__('Create shifts')) ->icon('heroicon-o-arrow-path') ->visible(current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))) ->extraAttributes(['class' => 'fullcalendar']), - - Action::make('Shifts assignment') - ->action(fn() => $this->runAlgorithm()) + Action::make('Shifts assignment') + ->action(fn () => $this->runAlgorithm()) ->label(__('Shifts assignment')) ->icon('heroicon-o-play') ->visible(current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))) @@ -254,19 +253,19 @@ protected function modalActions(): array return [ $action->makeExtraModalAction(__('Save'), arguments: ['save' => true]) ->color('primary') - ->disabled(!$canSave), + ->disabled(! $canSave), $action->makeExtraModalAction(__('Cancel'), arguments: ['cancel' => true]) ->color('primary'), ]; }) - ->modalHeading(__('Edit') . ' ' . $this->model::getTitle()) + ->modalHeading(__('Edit').' '.$this->model::getTitle()) ->action(function (array $data, array $arguments, Model $record): void { $data = method_exists($this->model, 'setData') ? $data = $this->model::setData($record, $data) : $data; if ($arguments['cancel'] ?? false) { $this->refreshRecords(); } if ($arguments['save'] ?? false) { - $columns = Schema::getColumnListing(strtolower(class_basename($this->model)) . 's'); + $columns = Schema::getColumnListing(strtolower(class_basename($this->model)).'s'); $filteredData = array_intersect_key($data, array_flip($columns)); $record = $this->model::find($record['id']); if ($record) { @@ -285,7 +284,7 @@ protected function modalActions(): array if (method_exists($this->model, 'getAction')) { $action = $this->model::getAction($this) ->visible(function (): bool { - $record = is_array($this->mountedActionsData) && !empty($this->mountedActionsData) + $record = is_array($this->mountedActionsData) && ! empty($this->mountedActionsData) ? (object) $this->mountedActionsData[0] : (object) $this->mountedActionsData; @@ -317,6 +316,6 @@ protected function viewAction(): Action 'end_date' => $arguments['event']['end'] ?? $record->end_date, ]; }) - ->modalHeading(__('View') . $this->model::getTitle()); + ->modalHeading(__('View').$this->model::getTitle()); } -} \ No newline at end of file +} diff --git a/app/Models/Constraint.php b/app/Models/Constraint.php index e2b6025..6a06734 100644 --- a/app/Models/Constraint.php +++ b/app/Models/Constraint.php @@ -28,8 +28,8 @@ class Constraint extends Model ]; protected $casts = [ - 'start_date' => 'datetime:Y-m-d', - 'end_date' => 'datetime:Y-m-d', + 'start_date' => 'datetime:Y-m-d H:i:s', + 'end_date' => 'datetime:Y-m-d H:i:s', ]; public function soldiers(): BelongsTo @@ -238,4 +238,4 @@ public static function getTitle(): string { return __('Constraint'); } -} \ No newline at end of file +} diff --git a/app/Models/Soldier.php b/app/Models/Soldier.php index eb9efe8..ad3fc2e 100644 --- a/app/Models/Soldier.php +++ b/app/Models/Soldier.php @@ -86,4 +86,4 @@ public static function boot() $record->user()->delete(); }); } -} \ No newline at end of file +} diff --git a/app/Models/User.php b/app/Models/User.php index 0be79ac..5cceb72 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -45,7 +45,6 @@ public function getFilamentName(): string { return $this->displayName; } - public function viewAny(User $user): bool { return $user->hasRole('manager'); @@ -54,4 +53,4 @@ public function canAccessPanel(Panel $panel): bool { return true; } -} \ No newline at end of file +} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 99f22be..a94db51 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -2,14 +2,13 @@ namespace App\Providers; +use Filament\Support\Assets\Css; +use Filament\Support\Facades\FilamentAsset; use Filament\Support\Facades\FilamentView; use Filament\View\PanelsRenderHook; use Illuminate\Support\Facades\Blade; use Illuminate\Support\ServiceProvider; use Illuminate\Support\Facades\URL; -use Filament\Support\Assets\Css; -use Filament\Support\Facades\FilamentAsset; - class AppServiceProvider extends ServiceProvider { diff --git a/app/Resources/ShiftResource/Pages/ListShifts.php b/app/Resources/ShiftResource/Pages/ListShifts.php index 640b97e..dbf2005 100644 --- a/app/Resources/ShiftResource/Pages/ListShifts.php +++ b/app/Resources/ShiftResource/Pages/ListShifts.php @@ -28,4 +28,4 @@ protected function getHeaderWidgets(): array ]; } -} \ No newline at end of file +} diff --git a/app/Resources/SoldierResource.php b/app/Resources/SoldierResource.php index 86a64e1..7262de8 100644 --- a/app/Resources/SoldierResource.php +++ b/app/Resources/SoldierResource.php @@ -17,6 +17,7 @@ use Filament\Forms\Components\Section; use Filament\Forms\Components\Select; use Filament\Forms\Components\Split; + use Filament\Forms\Components\TextInput; use Filament\Forms\Components\Toggle; use Filament\Forms\Components\ToggleButtons; @@ -51,7 +52,7 @@ public static function form(Form $form): Form ->schema([ Section::make()->schema([self::personalDetails()])->columns(), Section::make()->schema(self::soldierDetails())->columns(), - Section::make()->schema(self::reserveDays())->columns()->visible(fn(Get $get) => $get('is_reservist')), + Section::make()->schema(self::reserveDays())->columns()->visible(fn (Get $get) => $get('is_reservist')), Section::make()->schema(self::constraints())->columns(), ]); } @@ -64,7 +65,7 @@ public static function table(Table $table): Table TextColumn::make('user') ->label(__('Full name')) ->formatStateUsing(function ($record) { - return $record->user->last_name . ' ' . $record->user->first_name; + return $record->user->last_name.' '.$record->user->first_name; }) ->searchable(query: function ($query, $search) { $query->whereHas('user', function ($query) use ($search) { @@ -76,9 +77,9 @@ public static function table(Table $table): Table BooleanColumn::make('is_reservist')->label(__('Reservist')), BadgeColumn::make('gender') ->label(__('Gender')) - ->formatStateUsing(fn($state) => $state ? __('Male') : __('Female')) + ->formatStateUsing(fn ($state) => $state ? __('Male') : __('Female')) ->badge() - ->color(fn($state) => $state ? 'info' : 'primary') + ->color(fn ($state) => $state ? 'info' : 'primary') ->sortable(), TextColumn::make('reserve_dates')->label(__('Reserve dates'))->date()->listWithLineBreaks()->limitList(1)->expandableLimitedList()->placeholder('---')->toggleable(isToggledHiddenByDefault: true), TextColumn::make('next_reserve_dates')->label(__('Next reserve dates'))->date()->listWithLineBreaks()->limitList(1)->expandableLimitedList()->placeholder('---')->toggleable(isToggledHiddenByDefault: true), @@ -95,7 +96,7 @@ public static function table(Table $table): Table return $soldierShifts->filter(function (Shift $shift): bool { return Carbon::parse($shift->start_date)->month == now()->month || Carbon::parse($shift->end_date)->month == now()->month; - })->sum(fn(Shift $shift) => $shift->parallel_weight == 0 ? $shift->task->parallel_weight : $shift->parallel_weight); + })->sum(fn (Shift $shift) => $shift->parallel_weight == 0 ? $shift->task->parallel_weight : $shift->parallel_weight); }) ->label(__('Capacity hold')) ->numeric() @@ -110,7 +111,7 @@ public static function table(Table $table): Table } }) ->toggleColumnsTriggerAction( - fn(Action $action) => $action + fn (Action $action) => $action ->button() ->label(__('Columns')), ) @@ -141,19 +142,19 @@ public static function table(Table $table): Table ->default(null), Filter::make('reservist') ->label(__('Reservist')) - ->query(fn(Builder $query): Builder => $query->where('is_reservist', 1)) + ->query(fn (Builder $query): Builder => $query->where('is_reservist', 1)) ->toggle(), Filter::make('is_mabat') ->label(__('Is mabat')) - ->query(fn(Builder $query): Builder => $query->where('is_mabat', true)) + ->query(fn (Builder $query): Builder => $query->where('is_mabat', true)) ->toggle(), Filter::make('has_exemption') ->label(__('Exemption')) - ->query(fn(Builder $query): Builder => $query->where('has_exemption', true)) + ->query(fn (Builder $query): Builder => $query->where('has_exemption', true)) ->toggle(), Filter::make('is_trainee') ->label(__('Is trainee')) - ->query(fn(Builder $query): Builder => $query->where('is_trainee', true)) + ->query(fn (Builder $query): Builder => $query->where('is_trainee', true)) ->toggle(), Filter::make('enlist_date') ->form([ @@ -171,11 +172,11 @@ public static function table(Table $table): Table return $query ->when( $data['recruitment_from'], - fn(Builder $query, $date): Builder => $query->whereDate('enlist_date', '>=', $date), + fn (Builder $query, $date): Builder => $query->whereDate('enlist_date', '>=', $date), ) ->when( $data['recruitment_until'], - fn(Builder $query, $date): Builder => $query->whereDate('enlist_date', '<=', $date), + fn (Builder $query, $date): Builder => $query->whereDate('enlist_date', '<=', $date), ); }), @@ -183,7 +184,7 @@ public static function table(Table $table): Table ->filtersFormColumns(4) ->deferFilters() ->filtersTriggerAction( - fn(Action $action) => $action + fn (Action $action) => $action ->button() ->label(__('Filter')) ) @@ -192,7 +193,7 @@ public static function table(Table $table): Table EditAction::make(), DeleteAction::make() ->label(__('Delete')) - ->modalHeading(__('Delete') . ' ' . self::getModelLabel()), + ->modalHeading(__('Delete').' '.self::getModelLabel()), Action::make('update reserve days') ->label(__('Update reserve days')) ->icon('heroicon-o-pencil') @@ -212,7 +213,7 @@ public static function table(Table $table): Table $record->save(); }) ->closeModalByClickingAway(false) - ->hidden(fn($record) => !$record->is_reservist), + ->hidden(fn ($record) => ! $record->is_reservist), ReplicateAction::make() ->icon('heroicon-o-document-duplicate') ->color('success') @@ -265,6 +266,7 @@ public static function personalDetails(): Fieldset ->password() ->revealable() ->length(7) + ->hiddenOn('edit') ->required(), ])->columns(3); } @@ -333,9 +335,8 @@ public static function constraints(): array ->multiple() ->placeholder(__('Select qualifications')) ->options(Task::all()->pluck('type', 'type')), - ])->columns(3), + ])->columns(3), ]; - } public static function getModelLabel(): string diff --git a/app/Resources/TaskResource.php b/app/Resources/TaskResource.php index f76e46b..1c387b2 100644 --- a/app/Resources/TaskResource.php +++ b/app/Resources/TaskResource.php @@ -440,4 +440,4 @@ protected static function taskDetails(Get $get) return $shift; } -} \ No newline at end of file +} diff --git a/app/Resources/TaskResource/Pages/CreateTask.php b/app/Resources/TaskResource/Pages/CreateTask.php index 6a826ed..22c5999 100644 --- a/app/Resources/TaskResource/Pages/CreateTask.php +++ b/app/Resources/TaskResource/Pages/CreateTask.php @@ -82,4 +82,4 @@ function (Get $get) { ), ]; } -} \ No newline at end of file +} diff --git a/app/Services/Algorithm.php b/app/Services/Algorithm.php index bac1519..d45a650 100644 --- a/app/Services/Algorithm.php +++ b/app/Services/Algorithm.php @@ -144,4 +144,4 @@ public function run() $scheduleAlgorithm = new Schedule($shifts, $soldiers); $scheduleAlgorithm->schedule(); } -} \ No newline at end of file +} diff --git a/app/Services/Assignment.php b/app/Services/Assignment.php index 5c32b5e..63939a4 100644 --- a/app/Services/Assignment.php +++ b/app/Services/Assignment.php @@ -13,4 +13,4 @@ public function __construct(int $shiftId, int $soldierId) $this->shiftId = $shiftId; $this->soldierId = $soldierId; } -} \ No newline at end of file +} diff --git a/app/Services/ManualAssignment.php b/app/Services/ManualAssignment.php index 0ac6e99..617ce99 100644 --- a/app/Services/ManualAssignment.php +++ b/app/Services/ManualAssignment.php @@ -274,4 +274,4 @@ function (SoldierService $soldier) { } ); } -} \ No newline at end of file +} diff --git a/app/Services/MaxData.php b/app/Services/MaxData.php index 92b8cdc..5a3e006 100644 --- a/app/Services/MaxData.php +++ b/app/Services/MaxData.php @@ -49,4 +49,4 @@ public function status(): string { return "{$this->used} / {$this->max}"; } -} \ No newline at end of file +} diff --git a/app/Services/PotentialSoldierData.php b/app/Services/PotentialSoldierData.php index b838ca1..9565dbb 100644 --- a/app/Services/PotentialSoldierData.php +++ b/app/Services/PotentialSoldierData.php @@ -13,4 +13,4 @@ public function __construct(int $soldierId, bool $isLowConstraint) $this->soldierId = $soldierId; $this->isLowConstraint = $isLowConstraint; } -} \ No newline at end of file +} diff --git a/app/Services/Range.php b/app/Services/Range.php index fc40dd6..1cc27bc 100644 --- a/app/Services/Range.php +++ b/app/Services/Range.php @@ -99,4 +99,4 @@ public function getDayAfterNight(): Range { return new Range($this->end, $this->end->copy()->addDay()->setTime(8, 0, 0)); } -} \ No newline at end of file +} diff --git a/app/Services/RecurringEvents.php b/app/Services/RecurringEvents.php index aedbf72..aa6e1d1 100644 --- a/app/Services/RecurringEvents.php +++ b/app/Services/RecurringEvents.php @@ -147,4 +147,4 @@ protected function createShifts(array $dates) } }); } -} \ No newline at end of file +} diff --git a/app/Services/Schedule.php b/app/Services/Schedule.php index 953d553..7a5ee65 100644 --- a/app/Services/Schedule.php +++ b/app/Services/Schedule.php @@ -295,4 +295,4 @@ protected function updateDB() { collect($this->assignments)->map(fn (Assignment $assignment) => ShiftModel::where('id', $assignment->shiftId)->update(['soldier_id' => $assignment->soldierId])); } -} \ No newline at end of file +} diff --git a/app/Services/Shift.php b/app/Services/Shift.php index 3b520cd..0641950 100644 --- a/app/Services/Shift.php +++ b/app/Services/Shift.php @@ -82,4 +82,4 @@ protected function name(): string { return $this->taskType.': from'.$this->range->start.' to'.$this->range->end; } -} \ No newline at end of file +} diff --git a/app/Services/ShiftData.php b/app/Services/ShiftData.php index 5f8ae0e..74606ea 100644 --- a/app/Services/ShiftData.php +++ b/app/Services/ShiftData.php @@ -16,4 +16,4 @@ public function __construct(Shift $shift, $potentialSoldiers, float $weight) $this->potentialSoldiers = collect($potentialSoldiers); $this->weight = $weight; } -} \ No newline at end of file +} diff --git a/app/Services/Soldier.php b/app/Services/Soldier.php index e0a652e..087a071 100644 --- a/app/Services/Soldier.php +++ b/app/Services/Soldier.php @@ -120,4 +120,4 @@ public function printMaxStatuses() { echo 'points: '.$this->pointsMaxData->status().', shifts: '.$this->shiftsMaxData->status().', weekends: '.$this->weekendsMaxData->status().', nights: '.$this->nightsMaxData->status(); } -} \ No newline at end of file +} diff --git a/app/Services/Test.php b/app/Services/Test.php index 3dfe155..d74cca6 100644 --- a/app/Services/Test.php +++ b/app/Services/Test.php @@ -78,4 +78,4 @@ function ($constraint) use ($count, $shifts) { return $count; } -} \ No newline at end of file +} diff --git a/bootstrap/app.php b/bootstrap/app.php index b8c8c45..2cf511c 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -17,4 +17,4 @@ $schedule->call(fn () => app(Algorithm::class)->run())->monthlyOn(20, '10:00'); }) ->withMiddleware(function (Middleware $middleware) {}) - ->withExceptions(function (Exceptions $exceptions) {})->create(); \ No newline at end of file + ->withExceptions(function (Exceptions $exceptions) {})->create(); diff --git a/database/factories/ConstraintFactory.php b/database/factories/ConstraintFactory.php index 224cc5c..aad38c7 100644 --- a/database/factories/ConstraintFactory.php +++ b/database/factories/ConstraintFactory.php @@ -10,4 +10,4 @@ public function definition(): array { return []; } -} \ No newline at end of file +} diff --git a/database/factories/DepartmentFactory.php b/database/factories/DepartmentFactory.php index a83ff00..8735667 100644 --- a/database/factories/DepartmentFactory.php +++ b/database/factories/DepartmentFactory.php @@ -14,4 +14,4 @@ public function definition(): array 'commander_id' => User::factory(), ]; } -} \ No newline at end of file +} diff --git a/database/factories/SoldierFactory.php b/database/factories/SoldierFactory.php index df42288..df371d6 100644 --- a/database/factories/SoldierFactory.php +++ b/database/factories/SoldierFactory.php @@ -19,7 +19,6 @@ public function definition(): array 'max_nights' => fake()->numberBetween(0, 31), 'max_weekends' => fake()->numberBetween(0, 5), 'capacity' => fake()->numberBetween(0, 12) / 4.0, - 'capacity_hold' => 0, 'is_trainee' => fake()->boolean(), 'is_mabat' => fake()->boolean(), 'is_reservist' => fake()->boolean(), diff --git a/database/migrations/2024_05_30_094012_create_soldier_table.php b/database/migrations/2024_05_30_094012_create_soldier_table.php index 8592eda..e33bcfc 100644 --- a/database/migrations/2024_05_30_094012_create_soldier_table.php +++ b/database/migrations/2024_05_30_094012_create_soldier_table.php @@ -20,7 +20,6 @@ public function up(): void $table->integer('max_nights')->default(0)->nullable(); $table->integer('max_weekends')->default(0)->nullable(); $table->integer('capacity'); - $table->integer('capacity_hold')->default(0); $table->boolean('is_trainee'); $table->boolean('is_mabat'); $table->json('qualifications'); diff --git a/database/migrations/2024_05_30_100244_create_task_table.php b/database/migrations/2024_05_30_100244_create_task_table.php index ba3b58f..7177670 100644 --- a/database/migrations/2024_05_30_100244_create_task_table.php +++ b/database/migrations/2024_05_30_100244_create_task_table.php @@ -13,7 +13,7 @@ public function up(): void $table->string('name'); $table->time('start_hour'); $table->integer('duration'); - $table->integer('parallel_weight'); + $table->integer('parallel_weight')->default(0); $table->string('type'); $table->string('color'); $table->boolean('is_alert'); diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index f097938..de81f64 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -795,4 +795,4 @@ protected function SCHOOL() $time->second ); } -} \ No newline at end of file +} diff --git a/lang/he.json b/lang/he.json index 842c535..cce6d67 100644 --- a/lang/he.json +++ b/lang/he.json @@ -26,7 +26,7 @@ "Constraints": "אילוצים", "Course": "קורס", "Create":"צור", - "Create shifts":"צור משמרות", + "Creating shifts":"יצירת משמרות", "Daily": "יומי", "Daily range": "טווח יומי", "Date": "תאריך", @@ -113,6 +113,7 @@ "Reserve dates": "ימי מילואים בחודש הנוכחי", "Reservist": "מילואימניק", "Reset filters":"אפס סננים", + "Run Algorithm":"הרץ אלגוריתם", "Save": "שמור", "Save department": "שמור מדור", "Save team": "שמור צוות", diff --git a/public/css/saade/filament-fullcalendar/override-filament-fullcalendar.css b/public/css/saade/filament-fullcalendar/override-filament-fullcalendar.css index 659d6f8..084cd7f 100644 --- a/public/css/saade/filament-fullcalendar/override-filament-fullcalendar.css +++ b/public/css/saade/filament-fullcalendar/override-filament-fullcalendar.css @@ -1,20 +1,33 @@ -@media (max-width:425px){ - .fi-section{ +@media (max-width:700px) { + .fi-section { overflow-x: auto; } - .fi-section-content-ctn:has(.fullcalendar){ + + .fi-section-content-ctn:has(.fullcalendar) { width: 650px; } - .filament-fullcalendar .fc-toolbar-title{ - font-size:1.875rem!important; - line-height:2.25rem!important + + .filament-fullcalendar .fc-toolbar-title { + font-size: 1.875rem !important; + line-height: 2.25rem !important } - .filament-fullcalendar.fc .fc-button{ - min-height:2.25rem; - border-radius:.5rem; - padding:.25rem 6px; - font-size:.875rem; - line-height:1.25rem; - font-weight:500; + + .filament-fullcalendar.fc .fc-button { + min-height: 2.25rem; + border-radius: .5rem; + padding: .25rem 6px; + font-size: .875rem; + line-height: 1.25rem; + font-weight: 500; } } + +.fc-day-past { + background-color:#ffffff ; + color: #d0d0d0; + cursor: not-allowed; +} + +.filament-fullcalendar .fc-day-past{ + --fc-highlight-color: #ffffff; +} diff --git a/tests/Feature/CalendarWidgetTest.php b/tests/Feature/CalendarWidgetTest.php index 1b546df..03e3830 100644 --- a/tests/Feature/CalendarWidgetTest.php +++ b/tests/Feature/CalendarWidgetTest.php @@ -214,4 +214,4 @@ ->callMountedAction(['submit' => true]) ->call('fetchEvents', ['start' => Carbon::yesterday(), 'end' => Carbon::now()->addDays(5), 'timezone' => 'Asia\/Jerusalem']); expect($calendar->effects['returns'][0])->toHaveCount(5); -}); \ No newline at end of file +}); diff --git a/tests/Feature/ConstraintTest.php b/tests/Feature/ConstraintTest.php index 58ee8c7..80221cf 100644 --- a/tests/Feature/ConstraintTest.php +++ b/tests/Feature/ConstraintTest.php @@ -109,4 +109,4 @@ expect($dates['start_date'])->toBe('2023-03-30 00:00:00'); expect($dates['end_date'])->toBe('2023-04-01 23:59:00'); -}); \ No newline at end of file +}); diff --git a/tests/Feature/DeleteTaskTest.php b/tests/Feature/DeleteTaskTest.php index 0c4b1e7..91f81cd 100644 --- a/tests/Feature/DeleteTaskTest.php +++ b/tests/Feature/DeleteTaskTest.php @@ -1,9 +1,7 @@ assertDatabaseCount('shifts', 1); }); - -it('should update the capacity_hold field of the soldiers assigned to the shift', function () { - $task = Task::factory()->create(); - $soldier = Soldier::factory()->create([ - 'capacity_hold' => $task->parallel_weight, - ]); - User::factory()->create([ - 'userable_id' => $soldier->id, - ]); - Shift::factory()->create([ - 'soldier_id' => $soldier->id, - 'task_id' => $task->id, - 'start_date' => now()->addDay(), - 'end_date' => now()->addDays(2), - 'parallel_weight' => null, - ]); - - livewire(EditTask::class, [ - 'record' => $task->getRouteKey(), - ]) - ->callAction(DeleteAction::class); - - $this->assertDatabaseHas('soldiers', [ - 'id' => $soldier->id, - 'capacity_hold' => $soldier->capacity_hold - $task->parallel_weight, - ]); -}); diff --git a/tests/Feature/ReplicateSoldierTest.php b/tests/Feature/ReplicateSoldierTest.php index e6288ff..9f7d909 100644 --- a/tests/Feature/ReplicateSoldierTest.php +++ b/tests/Feature/ReplicateSoldierTest.php @@ -4,7 +4,7 @@ use App\Resources\SoldierResource\Pages\ListSoldiers; use Database\Seeders\PermissionSeeder; -it('after replicating a soldier, it redirects to edit the replicated soldier', function () { +it('redirects to edit the replicated soldier after replicating a soldier', function () { $soldier = Soldier::factory()->create(); $this ->seed(PermissionSeeder::class) diff --git a/tests/Pest.php b/tests/Pest.php index 9465590..7ecd587 100644 --- a/tests/Pest.php +++ b/tests/Pest.php @@ -3,4 +3,4 @@ uses( Tests\TestCase::class, Illuminate\Foundation\Testing\LazilyRefreshDatabase::class - )->in('Feature', 'Unit'); +)->in('Feature', 'Unit'); diff --git a/tests/Unit/AlgorithmServiceTest.php b/tests/Unit/AlgorithmServiceTest.php index ec2c7d2..54261f9 100644 --- a/tests/Unit/AlgorithmServiceTest.php +++ b/tests/Unit/AlgorithmServiceTest.php @@ -56,4 +56,4 @@ ]); $soldierWithConstraints = $method->invoke(new Algorithm); expect($soldierWithConstraints[0]->constraints->count())->toBe(3); -}); \ No newline at end of file +}); diff --git a/tests/Unit/MaxDataServiceTest.php b/tests/Unit/MaxDataServiceTest.php index e5f083f..02e0ace 100644 --- a/tests/Unit/MaxDataServiceTest.php +++ b/tests/Unit/MaxDataServiceTest.php @@ -15,4 +15,4 @@ it('should return 0 if max is 0', function () { $maxData = new MaxData(0); expect($maxData->calculatedRelativeLoad())->toBe(0.0); -}); \ No newline at end of file +}); diff --git a/tests/Unit/RangeServiceTest.php b/tests/Unit/RangeServiceTest.php index f5c774c..6a8b370 100644 --- a/tests/Unit/RangeServiceTest.php +++ b/tests/Unit/RangeServiceTest.php @@ -61,4 +61,4 @@ $expect = new Range(Carbon::parse('2024-11-08 05:00:00'), Carbon::parse('2024-11-09 08:00:00')); expect($result->start->toString())->toBe($expect->start->toString()); expect($result->end->toString())->toBe($expect->end->toString()); -}); \ No newline at end of file +}); diff --git a/tests/Unit/ScheduleServiceTest.php b/tests/Unit/ScheduleServiceTest.php index 73c0742..22d6f09 100644 --- a/tests/Unit/ScheduleServiceTest.php +++ b/tests/Unit/ScheduleServiceTest.php @@ -49,4 +49,4 @@ 'id' => 1, 'soldier_id' => 1, ]); -}); \ No newline at end of file +}); diff --git a/tests/Unit/ShiftServiceTest.php b/tests/Unit/ShiftServiceTest.php index 3d10362..b47b138 100644 --- a/tests/Unit/ShiftServiceTest.php +++ b/tests/Unit/ShiftServiceTest.php @@ -233,4 +233,4 @@ $result = $method->invoke($shift, $shifts, $range, DaysInWeek::SATURDAY); expect($result)->toBeFalse(); -}); \ No newline at end of file +}); diff --git a/tests/Unit/SoldierServiceTest.php b/tests/Unit/SoldierServiceTest.php index 32946b8..cdfd666 100644 --- a/tests/Unit/SoldierServiceTest.php +++ b/tests/Unit/SoldierServiceTest.php @@ -95,4 +95,4 @@ it('should return false if the soldier is not qualified to the task', function () { $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(0), new MaxData(3), ['Run'], []); expect($soldier->isQualified('Clean'))->toBeFalse(); -}); \ No newline at end of file +}); From dea348959d84f3095433c229229b64b2021af266 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 4 Dec 2024 11:26:49 +0200 Subject: [PATCH 032/259] deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 8 ++++---- app/Models/User.php | 12 +----------- app/Providers/AppServiceProvider.php | 4 ---- app/Resources/SoldierResource.php | 2 -- database/seeders/DatabaseSeeder.php | 4 ++-- lang/he.json | 1 + 7 files changed, 9 insertions(+), 24 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index ac696c5..1ed5595 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/luy6 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/luy7 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index d073a64..d5aa88a 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -17,7 +17,7 @@ use Saade\FilamentFullCalendar\Actions\CreateAction; use Saade\FilamentFullCalendar\Actions\DeleteAction; use Saade\FilamentFullCalendar\Actions\EditAction; -use Saade\FilamentFullCalendar\Actions\ViewAction; +use Saade\FilamentFullCalendar\Actions\viewAction; use Saade\FilamentFullCalendar\FilamentFullCalendarPlugin; use Saade\FilamentFullCalendar\Widgets\FullCalendarWidget; @@ -138,13 +138,13 @@ protected function headerActions(): array if (Task::exists()) { $actions = [ - Action::make('Create shifts') + Action::make('Create Shifts') ->action(fn () => $this->runEvents()) - ->label(__('Create shifts')) + ->label(__('Create Shifts')) ->icon('heroicon-o-arrow-path') ->visible(current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))) ->extraAttributes(['class' => 'fullcalendar']), - Action::make('Shifts assignment') + Action::make('Shifts assignment') ->action(fn () => $this->runAlgorithm()) ->label(__('Shifts assignment')) ->icon('heroicon-o-play') diff --git a/app/Models/User.php b/app/Models/User.php index 5cceb72..c09d1bb 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -10,10 +10,8 @@ use Illuminate\Notifications\Notifiable; use Spatie\Permission\Traits\HasPermissions; use Spatie\Permission\Traits\HasRoles; -use Filament\Models\Contracts\FilamentUser; -use Filament\Panel; -class User extends Authenticatable implements HasName,FilamentUser +class User extends Authenticatable implements HasName { use HasFactory, HasPermissions, HasRoles, Notifiable; @@ -45,12 +43,4 @@ public function getFilamentName(): string { return $this->displayName; } - public function viewAny(User $user): bool - { - return $user->hasRole('manager'); - } - public function canAccessPanel(Panel $panel): bool - { - return true; - } } diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index a94db51..f46db3c 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -8,7 +8,6 @@ use Filament\View\PanelsRenderHook; use Illuminate\Support\Facades\Blade; use Illuminate\Support\ServiceProvider; -use Illuminate\Support\Facades\URL; class AppServiceProvider extends ServiceProvider { @@ -19,9 +18,6 @@ public function register(): void public function boot(): void { - if (config('app.env') !== 'local') { - URL::forceScheme('https'); - } FilamentView::registerRenderHook( PanelsRenderHook::USER_MENU_BEFORE, fn (): string => Blade::render('@livewire(\'set-locale\')'), diff --git a/app/Resources/SoldierResource.php b/app/Resources/SoldierResource.php index 7262de8..25c40f7 100644 --- a/app/Resources/SoldierResource.php +++ b/app/Resources/SoldierResource.php @@ -16,8 +16,6 @@ use Filament\Forms\Components\Fieldset; use Filament\Forms\Components\Section; use Filament\Forms\Components\Select; -use Filament\Forms\Components\Split; - use Filament\Forms\Components\TextInput; use Filament\Forms\Components\Toggle; use Filament\Forms\Components\ToggleButtons; diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index de81f64..71109b9 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -631,8 +631,8 @@ public function run(): void ]), ]); - $recurringEvents = new RecurringEvents; - $recurringEvents->recurringTask(); + // $recurringEvents = new RecurringEvents; + // $recurringEvents->recurringTask(); } protected function createConstraints(int $userId) diff --git a/lang/he.json b/lang/he.json index cce6d67..00051c2 100644 --- a/lang/he.json +++ b/lang/he.json @@ -27,6 +27,7 @@ "Course": "קורס", "Create":"צור", "Creating shifts":"יצירת משמרות", + "Create Shifts":"צור משמרות", "Daily": "יומי", "Daily range": "טווח יומי", "Date": "תאריך", From 998e8577e5f653cc6c5c85c17f51355206b0852d Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 4 Dec 2024 12:23:48 +0200 Subject: [PATCH 033/259] deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 8 ++++---- app/Resources/SoldierResource.php | 2 -- database/seeders/DatabaseSeeder.php | 4 ++-- lang/he.json | 1 + 5 files changed, 8 insertions(+), 9 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index ac696c5..2c5fe21 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/luy6 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/luy8 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index d073a64..d5aa88a 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -17,7 +17,7 @@ use Saade\FilamentFullCalendar\Actions\CreateAction; use Saade\FilamentFullCalendar\Actions\DeleteAction; use Saade\FilamentFullCalendar\Actions\EditAction; -use Saade\FilamentFullCalendar\Actions\ViewAction; +use Saade\FilamentFullCalendar\Actions\viewAction; use Saade\FilamentFullCalendar\FilamentFullCalendarPlugin; use Saade\FilamentFullCalendar\Widgets\FullCalendarWidget; @@ -138,13 +138,13 @@ protected function headerActions(): array if (Task::exists()) { $actions = [ - Action::make('Create shifts') + Action::make('Create Shifts') ->action(fn () => $this->runEvents()) - ->label(__('Create shifts')) + ->label(__('Create Shifts')) ->icon('heroicon-o-arrow-path') ->visible(current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))) ->extraAttributes(['class' => 'fullcalendar']), - Action::make('Shifts assignment') + Action::make('Shifts assignment') ->action(fn () => $this->runAlgorithm()) ->label(__('Shifts assignment')) ->icon('heroicon-o-play') diff --git a/app/Resources/SoldierResource.php b/app/Resources/SoldierResource.php index 7262de8..25c40f7 100644 --- a/app/Resources/SoldierResource.php +++ b/app/Resources/SoldierResource.php @@ -16,8 +16,6 @@ use Filament\Forms\Components\Fieldset; use Filament\Forms\Components\Section; use Filament\Forms\Components\Select; -use Filament\Forms\Components\Split; - use Filament\Forms\Components\TextInput; use Filament\Forms\Components\Toggle; use Filament\Forms\Components\ToggleButtons; diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index de81f64..71109b9 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -631,8 +631,8 @@ public function run(): void ]), ]); - $recurringEvents = new RecurringEvents; - $recurringEvents->recurringTask(); + // $recurringEvents = new RecurringEvents; + // $recurringEvents->recurringTask(); } protected function createConstraints(int $userId) diff --git a/lang/he.json b/lang/he.json index cce6d67..00051c2 100644 --- a/lang/he.json +++ b/lang/he.json @@ -27,6 +27,7 @@ "Course": "קורס", "Create":"צור", "Creating shifts":"יצירת משמרות", + "Create Shifts":"צור משמרות", "Daily": "יומי", "Daily range": "טווח יומי", "Date": "תאריך", From c857b2572c37bd26ea2a76daa266d9381a3174a7 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 4 Dec 2024 12:24:05 +0200 Subject: [PATCH 034/259] deploy --- app/Filament/Widgets/CalendarWidget.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index d5aa88a..5bc8b5e 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -17,7 +17,7 @@ use Saade\FilamentFullCalendar\Actions\CreateAction; use Saade\FilamentFullCalendar\Actions\DeleteAction; use Saade\FilamentFullCalendar\Actions\EditAction; -use Saade\FilamentFullCalendar\Actions\viewAction; +use Saade\FilamentFullCalendar\Actions\ViewAction; use Saade\FilamentFullCalendar\FilamentFullCalendarPlugin; use Saade\FilamentFullCalendar\Widgets\FullCalendarWidget; From be5e236a36bcde8bb1f971c8d946162cd0ad971b Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 4 Dec 2024 12:25:52 +0200 Subject: [PATCH 035/259] deploy --- app/Models/User.php | 12 +++++++++++- app/Providers/AppServiceProvider.php | 4 ++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/app/Models/User.php b/app/Models/User.php index c09d1bb..5cceb72 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -10,8 +10,10 @@ use Illuminate\Notifications\Notifiable; use Spatie\Permission\Traits\HasPermissions; use Spatie\Permission\Traits\HasRoles; +use Filament\Models\Contracts\FilamentUser; +use Filament\Panel; -class User extends Authenticatable implements HasName +class User extends Authenticatable implements HasName,FilamentUser { use HasFactory, HasPermissions, HasRoles, Notifiable; @@ -43,4 +45,12 @@ public function getFilamentName(): string { return $this->displayName; } + public function viewAny(User $user): bool + { + return $user->hasRole('manager'); + } + public function canAccessPanel(Panel $panel): bool + { + return true; + } } diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index f46db3c..a94db51 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -8,6 +8,7 @@ use Filament\View\PanelsRenderHook; use Illuminate\Support\Facades\Blade; use Illuminate\Support\ServiceProvider; +use Illuminate\Support\Facades\URL; class AppServiceProvider extends ServiceProvider { @@ -18,6 +19,9 @@ public function register(): void public function boot(): void { + if (config('app.env') !== 'local') { + URL::forceScheme('https'); + } FilamentView::registerRenderHook( PanelsRenderHook::USER_MENU_BEFORE, fn (): string => Blade::render('@livewire(\'set-locale\')'), From 4e9e425b4e2b0a57038b15ada147adc836a436b7 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 5 Dec 2024 10:19:42 +0200 Subject: [PATCH 036/259] deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 81 +++++++++++----------- app/Models/Constraint.php | 2 +- app/Models/Shift.php | 63 +++++++++-------- app/Models/User.php | 8 ++- app/Providers/AppServiceProvider.php | 2 +- app/Resources/TaskResource.php | 1 + app/Services/RecurringEvents.php | 1 - database/seeders/DatabaseSeeder.php | 4 +- lang/he.json | 3 +- tests/Feature/CalendarWidgetTest.php | 29 +++++++- 11 files changed, 117 insertions(+), 79 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 2c5fe21..fd81573 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/luy8 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/luy9 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 5bc8b5e..13f2cba 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -33,7 +33,7 @@ class CalendarWidget extends FullCalendarWidget public bool $filter = false; - public $filterData = []; + public $filterData; public $lastFilterData = []; @@ -131,49 +131,50 @@ protected function headerActions(): array })->extraAttributes(['class' => 'fullcalendar']), ]; } - } elseif ($this->model !== Shift::class) { - FilamentFullCalendarPlugin::get()->editable(false); - FilamentFullCalendarPlugin::get()->selectable(false); } else { - - if (Task::exists()) { - $actions = [ - Action::make('Create Shifts') - ->action(fn () => $this->runEvents()) - ->label(__('Create Shifts')) - ->icon('heroicon-o-arrow-path') - ->visible(current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))) - ->extraAttributes(['class' => 'fullcalendar']), - Action::make('Shifts assignment') - ->action(fn () => $this->runAlgorithm()) - ->label(__('Shifts assignment')) - ->icon('heroicon-o-play') - ->visible(current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))) - ->extraAttributes(['class' => 'fullcalendar']), - ]; + if ($this->model !== Shift::class) { + FilamentFullCalendarPlugin::get()->editable(false); + FilamentFullCalendarPlugin::get()->selectable(false); + } else { + if (Task::exists()) { + $actions = [ + Action::make('Create shifts') + ->action(fn () => $this->runEvents()) + ->label(__('Create shifts')) + ->icon('heroicon-o-arrow-path') + ->visible(current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))) + ->extraAttributes(['class' => 'fullcalendar']), + Action::make('Shifts assignment') + ->action(fn () => $this->runAlgorithm()) + ->label(__('Shifts assignment')) + ->icon('heroicon-o-play') + ->visible(current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))) + ->extraAttributes(['class' => 'fullcalendar']), + ]; + } + } + if ($this->lastFilterData != $this->filterData) { + $this->refreshRecords(); + $this->lastFilterData = $this->filterData; + } + if ($this->filter) { + return array_merge(self::activeFilters(), [ + self::resetFilters(), + $this->model::getFilters($this) + ->closeModalByClickingAway(false), + ]); } - } - - if ($this->lastFilterData != $this->filterData) { - $this->refreshRecords(); - $this->lastFilterData = $this->filterData; - } - if ($this->filter) { - return array_merge(self::activeFilters(), [ - self::resetFilters(), - $this->model::getFilters($this) - ->closeModalByClickingAway(false), - ]); + return array_merge( + $actions ?? [], + [ + $this->model::getFilters($this) + ->closeModalByClickingAway(false), + ] + ); } - return array_merge( - $actions ?? [], - [ - $this->model::getFilters($this) - ->closeModalByClickingAway(false), - ] - ); + return []; } protected function runEvents() @@ -208,7 +209,7 @@ protected function activeFilters() $tags = collect($activeFilters)->map(function ($tag) { return Action::make($tag) - ->label($tag) + ->label(__($tag)) ->disabled() ->badge() ->extraAttributes(['class' => 'fullcalendar']); diff --git a/app/Models/Constraint.php b/app/Models/Constraint.php index 6a06734..7b05b9e 100644 --- a/app/Models/Constraint.php +++ b/app/Models/Constraint.php @@ -142,7 +142,7 @@ public static function updateDates(callable $set, $state, Get $get) case 'Not weekend': case 'Low priority not weekend': $set('start_date', $startDate->startOfWeek(Carbon::THURSDAY)->toDateTimeString()); - $set('end_date', $endDate->endOfWeek(Carbon::SATURDAY)->setTime(23, 59, 0)->toDateTimeString()); + $set('end_date', $startDate->endOfWeek(Carbon::SATURDAY)->setTime(23, 59, 0)->toDateTimeString()); break; default: diff --git a/app/Models/Shift.php b/app/Models/Shift.php index 6054378..824b1b0 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -215,47 +215,56 @@ public static function getFilters($calendar) ->multiple(), ]; }) - ->modalSubmitActionLabel(__('Filter')) - ->action(function (array $data) use ($calendar) { - $calendar->filterData = $data; - $calendar->filter = $data['soldier_id'] === [] && $data['type'] === [] ? false : true; - $calendar->refreshRecords(); + ->modalSubmitAction(false) + ->extraModalFooterActions(fn (Action $action): array => [ + $action->makeModalSubmitAction('Filter', arguments: ['Filter' => true])->color('success')->label(__('Filter')), + $action->makeModalSubmitAction('Unassigned shifts', arguments: ['UnassignedShifts' => true])->color('primary')->label(__('Unassigned shifts')), + ]) + ->action(function (array $data, array $arguments) use ($calendar) { + if ($arguments['Filter'] ?? false) { + $calendar->filterData = $data; + $calendar->filter = ! ($data['soldier_id'] === [] && $data['type'] === []); + $calendar->refreshRecords(); + } + if ($arguments['UnassignedShifts'] ?? false) { + $calendar->filterData = 'UnassignedShifts'; + $calendar->filter = true; + $calendar->refreshRecords(); + } }); } public static function filter($events, $filterData) { - if ($filterData['soldier_id'] == []) { - return $events - ->whereIn('task_id', $filterData['type']) - ->values(); - } - if ($filterData['type'] == []) { - return $events - ->whereIn('soldier_id', $filterData['soldier_id']) - ->values(); - } - return $events - ->whereIn('soldier_id', $filterData['soldier_id']) - ->whereIn('task_id', $filterData['type']) + ->when($filterData === 'UnassignedShifts', fn ($query) => $query + ->where('soldier_id', null)) + ->when(! empty($filterData['soldier_id']), fn ($query) => $query + ->whereIn('soldier_id', $filterData['soldier_id'])) + ->when(! empty($filterData['type']), fn ($query) => $query + ->whereIn('task_id', $filterData['type'])) ->values(); } public static function activeFilters($calendar) { - $activeFilter = collect(); if ($calendar->filter) { - $soldiers = collect($calendar->filterData['soldier_id'])->map(function ($soldier_id) { - return User::where('userable_id', $soldier_id)->first()->displayName; - }); - $tasks = collect($calendar->filterData['type'])->map(function ($task_id) { - return Task::find($task_id)->name; - }); - $activeFilter = $soldiers->concat($tasks); + return $calendar->filterData === 'UnassignedShifts' + ? ['Unassigned shifts'] + : collect($calendar->filterData['soldier_id']) + ->map(function ($soldier_id) { + return User::where('userable_id', $soldier_id)->first()->displayName ?? null; + }) + ->concat( + collect($calendar->filterData['type'])->map(function ($task_id) { + return Task::find($task_id)?->name; + }) + ) + ->filter() + ->toArray(); } - return $activeFilter->toArray(); + return []; } public static function getTitle(): string diff --git a/app/Models/User.php b/app/Models/User.php index 5cceb72..70ecbe8 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -2,7 +2,9 @@ namespace App\Models; +use Filament\Models\Contracts\FilamentUser; use Filament\Models\Contracts\HasName; +use Filament\Panel; use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Relations\MorphTo; @@ -10,10 +12,8 @@ use Illuminate\Notifications\Notifiable; use Spatie\Permission\Traits\HasPermissions; use Spatie\Permission\Traits\HasRoles; -use Filament\Models\Contracts\FilamentUser; -use Filament\Panel; -class User extends Authenticatable implements HasName,FilamentUser +class User extends Authenticatable implements FilamentUser, HasName { use HasFactory, HasPermissions, HasRoles, Notifiable; @@ -45,10 +45,12 @@ public function getFilamentName(): string { return $this->displayName; } + public function viewAny(User $user): bool { return $user->hasRole('manager'); } + public function canAccessPanel(Panel $panel): bool { return true; diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index a94db51..4a7d272 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -7,8 +7,8 @@ use Filament\Support\Facades\FilamentView; use Filament\View\PanelsRenderHook; use Illuminate\Support\Facades\Blade; -use Illuminate\Support\ServiceProvider; use Illuminate\Support\Facades\URL; +use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { diff --git a/app/Resources/TaskResource.php b/app/Resources/TaskResource.php index 1c387b2..fc43e6c 100644 --- a/app/Resources/TaskResource.php +++ b/app/Resources/TaskResource.php @@ -272,6 +272,7 @@ public static function getTaskDetails(): array ->numeric() ->minValue(0) ->default(0) + ->step(0.25) ->label(__('Parallel weight')), ColorPicker::make('color') ->label(__('Color')) diff --git a/app/Services/RecurringEvents.php b/app/Services/RecurringEvents.php index aa6e1d1..0064e8d 100644 --- a/app/Services/RecurringEvents.php +++ b/app/Services/RecurringEvents.php @@ -25,7 +25,6 @@ public function setMonth($month) public function recurringTask(): void { - $tasks = Task::get(); $tasks->filter(function ($task) { return $task->recurring['type'] !== 'Daily range' && $task->recurring['type'] !== 'One time'; diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 71109b9..de81f64 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -631,8 +631,8 @@ public function run(): void ]), ]); - // $recurringEvents = new RecurringEvents; - // $recurringEvents->recurringTask(); + $recurringEvents = new RecurringEvents; + $recurringEvents->recurringTask(); } protected function createConstraints(int $userId) diff --git a/lang/he.json b/lang/he.json index 00051c2..1b22e3a 100644 --- a/lang/he.json +++ b/lang/he.json @@ -26,8 +26,8 @@ "Constraints": "אילוצים", "Course": "קורס", "Create":"צור", + "Create shifts":"צור משמרות", "Creating shifts":"יצירת משמרות", - "Create Shifts":"צור משמרות", "Daily": "יומי", "Daily range": "טווח יומי", "Date": "תאריך", @@ -148,6 +148,7 @@ "Thursday":"חמישי", "Tuesday":"שלישי", "Type": "סוג", + "Unassigned shifts":"משמרות שלא שובצו", "Until": "עד תאריך", "Update reserve days": "ימי מילואים לחודש הבא", "Vacation":"חופשה", diff --git a/tests/Feature/CalendarWidgetTest.php b/tests/Feature/CalendarWidgetTest.php index 03e3830..4c18d73 100644 --- a/tests/Feature/CalendarWidgetTest.php +++ b/tests/Feature/CalendarWidgetTest.php @@ -187,7 +187,7 @@ 'type' => 'my_soldiers', ]) ->mountAction('Filters') - ->callMountedAction(['submit' => true]) + ->callMountedAction(['Filter' => true]) ->assertDispatched('filament-fullcalendar--refresh'); }); @@ -211,7 +211,32 @@ ]) ->mountAction('Filters') ->setActionData(['soldier_id' => [$user->userable_id], 'type' => [$task2->id]]) - ->callMountedAction(['submit' => true]) + ->callMountedAction(['Filter' => true]) ->call('fetchEvents', ['start' => Carbon::yesterday(), 'end' => Carbon::now()->addDays(5), 'timezone' => 'Asia\/Jerusalem']); expect($calendar->effects['returns'][0])->toHaveCount(5); }); + +it('should filter the unassigned shifts', function () { + $task1 = Task::factory()->create(['type' => 'wash']); + $task2 = Task::factory()->create(['type' => 'clean']); + Shift::factory()->count(5)->create(['soldier_id' => 1, 'task_id' => $task1->id]); + Shift::factory()->count(5)->create(['soldier_id' => 1, 'task_id' => $task2->id]); + Shift::factory()->count(5)->create(['task_id' => $task1->id]); + Shift::factory()->count(5)->create(['task_id' => $task2->id]); + + $calendar = livewire(CalendarWidget::class, [ + 'model' => Shift::class, + 'keys' => collect([ + 'id', + 'task_name', + 'start_date', + 'end_date', + 'task_color', + ]), + 'type' => 'my_soldiers', + ]) + ->mountAction('Filters') + ->callMountedAction(['Unassigned shifts' => true]) + ->call('fetchEvents', ['start' => Carbon::yesterday(), 'end' => Carbon::now()->addDays(5), 'timezone' => 'Asia\/Jerusalem']); + expect($calendar->effects['returns'][0])->toHaveCount(10); +}); From 763f760ffc57ee1d85a6bbcfa32a4fbbc3a18545 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 5 Dec 2024 13:31:42 +0200 Subject: [PATCH 037/259] deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Models/Constraint.php | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index fd81573..7374b05 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/luy9 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/luy10 flavor: | latest=false tags: | diff --git a/app/Models/Constraint.php b/app/Models/Constraint.php index 7b05b9e..63e8ba6 100644 --- a/app/Models/Constraint.php +++ b/app/Models/Constraint.php @@ -121,7 +121,8 @@ public static function updateDates(callable $set, $state, Get $get) { $constraintType = $get('constraint_type'); $startDate = Carbon::parse($get('start_date')); - $endDate = Carbon::parse($get('end_date')); + // $endDate = Carbon::parse($get('end_date')); + $endDate = max($startDate,Carbon::parse($get('end_date'))); switch ($constraintType) { case 'Medical': From f30b3a625449aa9929376f2e40f3b410b6b250ee Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 5 Dec 2024 16:19:20 +0200 Subject: [PATCH 038/259] deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 35 +- app/Resources/TaskResource.php | 2 +- app/Services/ManualAssignment.php | 16 +- database/seeders/DatabaseSeeder.php | 1514 ++++++++++---------- 5 files changed, 785 insertions(+), 784 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 7374b05..b0bf1f8 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/luy10 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/luy11 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 13f2cba..7f02a0c 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -45,8 +45,8 @@ public function fetchEvents(array $fetchInfo): array { $this->currentMonth = (Carbon::parse($fetchInfo['start'])->day != 1) - ? Carbon::parse($fetchInfo['start'])->addMonth()->year.'-'.Carbon::parse($fetchInfo['start'])->addMonth()->month.'-'.'01' - : Carbon::parse($fetchInfo['start'])->year.'-'.Carbon::parse($fetchInfo['start'])->month.'-'.'01'; + ? Carbon::parse($fetchInfo['start'])->addMonth()->year . '-' . Carbon::parse($fetchInfo['start'])->addMonth()->month . '-' . '01' + : Carbon::parse($fetchInfo['start'])->year . '-' . Carbon::parse($fetchInfo['start'])->month . '-' . '01'; $events = $this->getEventsByRole(); @@ -83,18 +83,18 @@ public function getEventsByRole() ->orWhereNull('soldier_id') ->get() ->filter(function (Model $object) use ($current_user_id) { - $soldier = Soldier::where('id', '=', $object->soldier_id)->first(); + $soldier = Soldier::where('id', '=', $object->soldier_id)->first(); - return ! $soldier || $soldier?->team?->department?->commander_id == $current_user_id; - }), + return !$soldier || $soldier?->team?->department?->commander_id == $current_user_id; + }), 'team-commander' => $this->model::where('soldier_id', '!=', $current_user_id) ->orWhereNull('soldier_id') ->get() ->filter(function (Model $object) use ($current_user_id) { - $soldier = Soldier::where('id', '=', $object->soldier_id)->first(); + $soldier = Soldier::where('id', '=', $object->soldier_id)->first(); - return ! $soldier || $soldier?->team?->commander_id == $current_user_id; - }), + return !$soldier || $soldier?->team?->commander_id == $current_user_id; + }), } : $this->model::where('soldier_id', '=', $current_user_id)->get(); } @@ -122,8 +122,8 @@ protected function headerActions(): array 'end_date' => $arguments['end'] ?? null, ]); }) - ->label($this->model::getTitle().' '.__('New')) - ->modalHeading(__('Create').' '.$this->model::getTitle()) + ->label($this->model::getTitle() . ' ' . __('New')) + ->modalHeading(__('Create') . ' ' . $this->model::getTitle()) ->disabled(function (array $arguments) use ($today) { $startDate = Carbon::parse($arguments['start'] ?? null); @@ -139,13 +139,13 @@ protected function headerActions(): array if (Task::exists()) { $actions = [ Action::make('Create shifts') - ->action(fn () => $this->runEvents()) + ->action(fn() => $this->runEvents()) ->label(__('Create shifts')) ->icon('heroicon-o-arrow-path') ->visible(current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))) ->extraAttributes(['class' => 'fullcalendar']), Action::make('Shifts assignment') - ->action(fn () => $this->runAlgorithm()) + ->action(fn() => $this->runAlgorithm()) ->label(__('Shifts assignment')) ->icon('heroicon-o-play') ->visible(current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))) @@ -254,19 +254,19 @@ protected function modalActions(): array return [ $action->makeExtraModalAction(__('Save'), arguments: ['save' => true]) ->color('primary') - ->disabled(! $canSave), + ->disabled(!$canSave), $action->makeExtraModalAction(__('Cancel'), arguments: ['cancel' => true]) ->color('primary'), ]; }) - ->modalHeading(__('Edit').' '.$this->model::getTitle()) + ->modalHeading(__('Edit') . ' ' . $this->model::getTitle()) ->action(function (array $data, array $arguments, Model $record): void { $data = method_exists($this->model, 'setData') ? $data = $this->model::setData($record, $data) : $data; if ($arguments['cancel'] ?? false) { $this->refreshRecords(); } if ($arguments['save'] ?? false) { - $columns = Schema::getColumnListing(strtolower(class_basename($this->model)).'s'); + $columns = Schema::getColumnListing(strtolower(class_basename($this->model)) . 's'); $filteredData = array_intersect_key($data, array_flip($columns)); $record = $this->model::find($record['id']); if ($record) { @@ -279,13 +279,14 @@ protected function modalActions(): array } }), DeleteAction::make() + ->modalHeading(__('Delete')) ->label(__('Delete')), ]; if ($this->type === 'my' || ($this->type === 'my_soldiers' && $this->model === Shift::class)) { if (method_exists($this->model, 'getAction')) { $action = $this->model::getAction($this) ->visible(function (): bool { - $record = is_array($this->mountedActionsData) && ! empty($this->mountedActionsData) + $record = is_array($this->mountedActionsData) && !empty($this->mountedActionsData) ? (object) $this->mountedActionsData[0] : (object) $this->mountedActionsData; @@ -317,6 +318,6 @@ protected function viewAction(): Action 'end_date' => $arguments['event']['end'] ?? $record->end_date, ]; }) - ->modalHeading(__('View').$this->model::getTitle()); + ->modalHeading(__('View') . $this->model::getTitle()); } } diff --git a/app/Resources/TaskResource.php b/app/Resources/TaskResource.php index fc43e6c..1b79b53 100644 --- a/app/Resources/TaskResource.php +++ b/app/Resources/TaskResource.php @@ -436,7 +436,7 @@ protected static function taskDetails(Get $get) $shift->id = null; $shift->task = $task; $shift->start_date = Carbon::parse($task_date->format('Y-m-d').' '.$get('start_hour')); - $shift->end_date = $shift->start_date->addHours((float) ($get('duration'))); + $shift->end_date = $shift->start_date->copy()->addHours((float) ($get('duration'))); $shift->parallel_weight = $get('parallel_weight'); return $shift; diff --git a/app/Services/ManualAssignment.php b/app/Services/ManualAssignment.php index 617ce99..67ecae7 100644 --- a/app/Services/ManualAssignment.php +++ b/app/Services/ManualAssignment.php @@ -97,7 +97,7 @@ protected function filterAll() ->filter(function ($user) { $soldier = $this->getSoldierBy($user->userable_id); - return ! $soldier->is_reservist && $soldier->id != auth()->user()->userable_id; + return !$soldier->is_reservist && $soldier->id != auth()->user()->userable_id; }); } @@ -181,10 +181,10 @@ protected function getSoldiersShifts(Soldier $soldier) function (Shift $shift): bool { $range = new Range($shift->start_date, $shift->end_date); - return $range->isSameMonth(new Range($this->shift->range->start->startOfMonth(), $this->shift->range->end->endOfMonth())); + return $range->isSameMonth(new Range($this->shift->range->start->copy()->startOfMonth(), $this->shift->range->end->copy()->endOfMonth())); } ) - ->map(fn (Shift $shift): ShiftService => $this->buildShift($shift)); + ->map(fn(Shift $shift): ShiftService => $this->buildShift($shift)); } protected function buildShift(Shift $shift): ShiftService @@ -205,8 +205,8 @@ protected function addShiftsSpaces($shifts) $allSpaces = collect([]); collect($shifts)->map(function (ShiftService $shift) use ($shifts, &$allSpaces) { $spaces = $shift->isWeekend || $shift->isNight ? $shift->getShiftSpaces($shifts) : null; - if (! empty($spaces)) { - collect($spaces)->map(fn (Range $space) => $allSpaces->push(new ShiftService(0, 'space', $space->start, $space->end, 0, false, false))); + if (!empty($spaces)) { + collect($spaces)->map(fn(Range $space) => $allSpaces->push(new ShiftService(0, 'space', $space->start, $space->end, 0, false, false))); } }); @@ -220,10 +220,10 @@ protected function getConstraintBy(int $soldierId) ->filter(function (Constraint $constraint) { $range = new Range($constraint->start_date, $constraint->end_date); - return $range->isSameMonth(new Range($this->shift->range->start->startOfMonth(), $this->shift->range->end->endOfMonth())); + return $range->isSameMonth(new Range($this->shift->range->start->copy()->startOfMonth(), $this->shift->range->end->copy()->endOfMonth())); }) ->map( - fn (Constraint $constraint): ConstraintService => new ConstraintService( + fn(Constraint $constraint): ConstraintService => new ConstraintService( $constraint->start_date, $constraint->end_date, ConstraintType::getPriority()[$constraint->constraint_type] == 1 ? Priority::HIGH : Priority::LOW @@ -259,7 +259,7 @@ protected function capacityHold($shifts) protected function getAvailableSoldiers() { $availableSoldiers = $this->soldiers->filter( - fn (SoldierService $soldier) => $soldier->isQualified($this->shift->taskType) + fn(SoldierService $soldier) => $soldier->isQualified($this->shift->taskType) && $soldier->isAvailableByMaxes($this->shift) && $soldier->isAvailableByConstraints($this->shift->range) != Availability::NO && $soldier->isAvailableByShifts($this->shift->range) diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index de81f64..bdee9ba 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -25,8 +25,8 @@ public function run(): void // Soldiers $user = User::factory()->create([ - 'first_name' => 'name', - 'last_name' => 'family', + 'first_name' => 'newspace', + 'last_name' => 'newspace', 'password' => '1234567', 'userable_id' => Soldier::factory()->create([ 'qualifications' => [], @@ -39,760 +39,760 @@ public function run(): void ]); $user->assignRole('manager'); - for ($i = 0; $i < 15; $i++) { - $user = User::factory()->create([ - 'first_name' => 'mefaked', - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['pikud'], - 'capacity' => 5.5, - 'max_weekends' => 5.5, - 'max_shifts' => 10, - 'max_nights' => 5.5, - 'is_reservist' => false, - ])->id, - ]); - $this->createConstraints($user->id); - } - - for ($i = 0; $i < 40; $i++) { - $user = User::factory()->create([ - 'first_name' => 'chayal pashut', - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['hatasa', 'tazpit', 'shmira'], - 'capacity' => 6, - 'max_weekends' => 6, - 'max_shifts' => 7, - 'max_nights' => 6, - 'is_reservist' => false, - ])->id, - ]); - $this->createConstraints($user->id); - } - - for ($i = 0; $i < 30; $i++) { - $user = User::factory()->create([ - 'first_name' => 'chayal beinony', - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['hatasa', 'tazpit', 'shmira', 'tichnun', 'pianuach'], - 'capacity' => 5.5, - 'max_weekends' => 5.5, - 'max_shifts' => 6, - 'max_nights' => 5.5, - 'is_reservist' => false, - ])->id, - ]); - $this->createConstraints($user->id); - } - - for ($i = 0; $i < 25; $i++) { - $user = User::factory()->create([ - 'first_name' => 'chayal vatik', - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['hatasa', 'bakara', 'tichnun', 'pianuach'], - 'capacity' => 5, - 'max_weekends' => 5, - 'max_shifts' => 5, - 'max_nights' => 5, - 'is_reservist' => false, - ])->id, - ]); - $this->createConstraints($user->id); - } - - for ($i = 0; $i < 10; $i++) { - $user = User::factory()->create([ - 'first_name' => 'menahalan', - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['minhal', 'bdikat ziud'], - 'capacity' => 0, - 'max_weekends' => 0, - 'max_shifts' => 4, - 'max_nights' => 0, - 'is_reservist' => false, - ])->id, - ]); - $this->createConstraints($user->id); - } - - for ($i = 0; $i < 8; $i++) { - $user = User::factory()->create([ - 'first_name' => 'navat', - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['nivut'], - 'capacity' => 10, - 'max_weekends' => 10, - 'max_shifts' => 12, - 'max_nights' => 10, - 'is_reservist' => false, - ])->id, - ]); - $this->createConstraints($user->id); - } - - // Tasks - // tichnun - Task::factory()->create([ - 'name' => 'tichnun א-ה בוקר', - 'start_hour' => '10:00:00', - 'duration' => 4, - 'parallel_weight' => 0, - 'type' => 'tichnun', - 'is_weekend' => false, - 'is_night' => false, - 'color' => '#b54b4b', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'tichnun א-ה לילה', - 'start_hour' => '02:00:00', - 'duration' => 4, - 'parallel_weight' => 1, - 'type' => 'tichnun', - 'is_weekend' => false, - 'is_night' => true, - 'color' => '#b54b4b', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'tichnun 1 סופ"ש', - 'start_hour' => '10:30:00', - 'duration' => 25, - 'parallel_weight' => 2.5, - 'type' => 'tichnun', - 'is_weekend' => true, - 'is_night' => false, - 'color' => '#b54b4b', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'tichnun 2 סופ"ש', - 'start_hour' => '11:10:00', - 'duration' => 25, - 'parallel_weight' => 2.5, - 'type' => 'tichnun', - 'is_weekend' => true, - 'is_night' => false, - 'color' => '#b54b4b', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - // bakara - Task::factory()->create([ - 'name' => 'bakara ארבע פעמים בשבוע בוקר', - 'start_hour' => '10:00:00', - 'duration' => 4, - 'parallel_weight' => 0, - 'type' => 'bakara', - 'is_weekend' => false, - 'is_night' => false, - 'color' => '#4bb5ac', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'bakara שלוש פעמים בשבוע לילה', - 'start_hour' => '03:20:00', - 'duration' => 4, - 'parallel_weight' => 1, - 'type' => 'bakara', - 'is_weekend' => false, - 'is_night' => true, - 'color' => '#4bb5ac', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'bakara סופ"ש', - 'start_hour' => '10:05:00', - 'duration' => 26, - 'parallel_weight' => 2.5, - 'type' => 'bakara', - 'is_weekend' => true, - 'is_night' => false, - 'color' => '#4bb5ac', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - // pikud - Task::factory()->create([ - 'name' => 'pikud 1 א-ה בוקר', - 'start_hour' => '10:00:00', - 'duration' => 4, - 'parallel_weight' => 0, - 'type' => 'pikud', - 'is_weekend' => false, - 'is_night' => false, - 'color' => '#4bb569', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'pikud 2 א-ה בוקר', - 'start_hour' => '10:00:00', - 'duration' => 4, - 'parallel_weight' => 0, - 'type' => 'pikud', - 'is_weekend' => false, - 'is_night' => false, - 'color' => '#4bb569', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'pikud 1 סופש', - 'start_hour' => '10:00:00', - 'duration' => 25, - 'parallel_weight' => 2.5, - 'type' => 'pikud', - 'is_weekend' => true, - 'is_night' => false, - 'color' => '#4bb569', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'pikud 2 סופש', - 'start_hour' => '10:00:00', - 'duration' => 25, - 'parallel_weight' => 2.5, - 'type' => 'pikud', - 'is_weekend' => true, - 'is_night' => false, - 'color' => '#4bb569', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'pikud לילה א-ה', - 'start_hour' => '03:00:00', - 'duration' => 4, - 'parallel_weight' => 1, - 'type' => 'pikud', - 'is_weekend' => false, - 'is_night' => true, - 'color' => '#4bb569', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - // minhal - Task::factory()->create([ - 'name' => 'minhal שלוש פעמים בשבוע בוקר', - 'start_hour' => '13:00:00', - 'duration' => 2, - 'parallel_weight' => 0, - 'type' => 'minhal', - 'is_weekend' => false, - 'is_night' => false, - 'color' => '#c5d649', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::TUESDAY, DaysInWeek::THURSDAY], - ]), - ]); - // hatasa - Task::factory()->create([ - 'name' => 'hatasa א-ה בוקר', - 'start_hour' => '09:00:00', - 'duration' => 6, - 'parallel_weight' => 0, - 'type' => 'hatasa', - 'is_weekend' => false, - 'is_night' => false, - 'color' => '#d649b5', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'hatasa א-ה בשבוע לילה', - 'start_hour' => '02:00:00', - 'duration' => 6, - 'parallel_weight' => 1, - 'type' => 'hatasa', - 'is_weekend' => false, - 'is_night' => true, - 'color' => '#d649b5', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'hatasa 1 סופש', - 'start_hour' => '06:00:00', - 'duration' => 26, - 'parallel_weight' => 2.5, - 'type' => 'hatasa', - 'is_weekend' => true, - 'is_night' => false, - 'color' => '#d649b5', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'hatasa 2 סופש', - 'start_hour' => '06:00:00', - 'duration' => 26, - 'parallel_weight' => 2.5, - 'type' => 'hatasa', - 'is_weekend' => true, - 'is_night' => false, - 'color' => '#d649b5', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - // shmira - Task::factory()->create([ - 'name' => 'shmira א-ה בוקר', - 'start_hour' => '07:00:00', - 'duration' => 12, - 'parallel_weight' => 0, - 'type' => 'shmira', - 'is_weekend' => false, - 'is_night' => false, - 'color' => '#ee8559', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'shmira א-ה לילה', - 'start_hour' => '01:00:00', - 'duration' => 7, - 'parallel_weight' => 1, - 'type' => 'shmira', - 'is_weekend' => false, - 'is_night' => true, - 'color' => '#ee8559', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'shmira 1 סופש', - 'start_hour' => '06:00:00', - 'duration' => 26, - 'parallel_weight' => 2.5, - 'type' => 'shmira', - 'is_weekend' => true, - 'is_night' => false, - 'color' => '#ee8559', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'shmira סופש 2', - 'start_hour' => '06:00:00', - 'duration' => 26, - 'parallel_weight' => 2.5, - 'type' => 'shmira', - 'is_weekend' => true, - 'is_night' => false, - 'color' => '#ee8559', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - // pianuach - Task::factory()->create([ - 'name' => 'pianuach א-ה בוקר', - 'start_hour' => '07:00:00', - 'duration' => 7, - 'parallel_weight' => 0, - 'type' => 'pianuach', - 'is_weekend' => false, - 'is_night' => false, - 'color' => '#3574fb', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'pianuach א-ה לילה', - 'start_hour' => '01:00:00', - 'duration' => 5, - 'parallel_weight' => 1, - 'type' => 'pianuach', - 'is_weekend' => false, - 'is_night' => true, - 'color' => '#3574fb', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'pianuach 1 סופש', - 'start_hour' => '07:00:00', - 'duration' => 27, - 'parallel_weight' => 2.5, - 'type' => 'pianuach', - 'is_weekend' => true, - 'is_night' => false, - 'color' => '#3574fb', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'pianuach 2 סופש', - 'start_hour' => '07:00:00', - 'duration' => 27, - 'parallel_weight' => 2.5, - 'type' => 'pianuach', - 'is_weekend' => true, - 'is_night' => false, - 'color' => '#3574fb', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - // nivut - Task::factory()->create([ - 'name' => 'nivut א-ה בוקר', - 'start_hour' => '11:00:00', - 'duration' => 2, - 'parallel_weight' => 0, - 'type' => 'nivut', - 'is_weekend' => false, - 'is_night' => false, - 'color' => '#ed8d8d8b', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'nivut א-ה לילה', - 'start_hour' => '01:00:00', - 'duration' => 2.5, - 'parallel_weight' => 1, - 'type' => 'nivut', - 'is_weekend' => false, - 'is_night' => true, - 'color' => '#ed8d8d8b', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'nivut 1 סופש', - 'start_hour' => '11:00:00', - 'duration' => 28, - 'parallel_weight' => 2.5, - 'type' => 'nivut', - 'is_weekend' => true, - 'is_night' => false, - 'color' => '#ed8d8d8b', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'nivut 2 סופש', - 'start_hour' => '11:00:00', - 'duration' => 28, - 'parallel_weight' => 2.5, - 'type' => 'nivut', - 'is_weekend' => true, - 'is_night' => false, - 'color' => '#ed8d8d8b', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - // tazpit - Task::factory()->create([ - 'name' => 'tazpit א-ה בוקר 1', - 'start_hour' => '08:00:00', - 'duration' => 10, - 'parallel_weight' => 0, - 'type' => 'tazpit', - 'is_weekend' => false, - 'is_night' => false, - 'color' => '#77ff23', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'tazpit א-ה בוקר 2', - 'start_hour' => '08:00:00', - 'duration' => 10, - 'parallel_weight' => 0, - 'type' => 'tazpit', - 'is_weekend' => false, - 'is_night' => false, - 'color' => '#77ff23', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'tazpit א-ה לילה', - 'start_hour' => '01:30:00', - 'duration' => 6, - 'parallel_weight' => 1, - 'type' => 'tazpit', - 'is_weekend' => false, - 'is_night' => true, - 'color' => '#77ff23', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'tazpit 1 סופש', - 'start_hour' => '11:45:00', - 'duration' => 25, - 'parallel_weight' => 2.5, - 'type' => 'tazpit', - 'is_weekend' => true, - 'is_night' => false, - 'color' => '#77ff23', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'tazpit 2 סופש', - 'start_hour' => '11:00:00', - 'duration' => 25, - 'parallel_weight' => 2.5, - 'type' => 'tazpit', - 'is_weekend' => true, - 'is_night' => false, - 'color' => '#77ff23', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - // bdikat ziud - Task::factory()->create([ - 'name' => 'bdikat ziud פעם בשבוע בוקר', - 'start_hour' => '11:15:00', - 'duration' => 3.5, - 'parallel_weight' => 0, - 'type' => 'bdikat ziud', - 'is_weekend' => false, - 'is_night' => false, - 'color' => '#a7b2c3', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY], - ]), - ]); - - $recurringEvents = new RecurringEvents; - $recurringEvents->recurringTask(); - } - - protected function createConstraints(int $userId) - { - for ($i = 0; $i < count(ConstraintType::cases()); $i++) { - $times = ConstraintType::getLimit()[ConstraintType::cases()[$i]->value] > 0 - ? random_int(0, ConstraintType::getLimit()[ConstraintType::cases()[$i]->value]) : - random_int(0, random_int(0, 5)); - for ($j = 0; $j < $times; $j++) { - $startDate = call_user_func([$this, ConstraintType::cases()[$i]->name]); - Constraint::factory()->create([ - 'soldier_id' => User::find($userId)->userable_id, - 'constraint_type' => ConstraintType::cases()[$i], - 'start_date' => $startDate, - 'end_date' => $startDate->copy()->addHours(random_int(1, 5)), - ]); - } - } - } - - protected function getDatesOfMonth($month = null) - { - $month ??= now()->addMonth(); - - return CarbonPeriod::between($month->startOfMonth(), $month->copy()->endOfMonth()); - } - - protected function getThursday() - { - $period = $this->getDatesOfMonth(); - - return collect($period) - ->filter( - fn ($date) => Carbon::parse($date)->isThursday() - )->all(); - } - - protected function getWeekends() - { - $period = $this->getDatesOfMonth(); - - return collect($period) - ->filter( - fn ($date) => Carbon::parse($date)->isFriday() || Carbon::parse($date)->isSaturday() - ) - ->all(); - } - - protected function getTime() - { - return Carbon::now()->subSeconds(rand(0, 30 * 24 * 60 * 60)); - } - - protected function getNightHour() - { - $time = $this->getTime(); - if ($time->hour < 20 && $time->hour >= 8) { - return $time->addHours(20 - $time->hour); - } - - return $time; - } - - protected function NOT_WEEKEND() - { - $time = $this->getTime(); - - return Carbon::parse(collect($this->getWeekends())->random()) - ->setTime( - $time->hour, - $time->minute, - $time->second - ); - } - - protected function LOW_PRIORITY_NOT_WEEKEND() - { - $time = $this->getTime(); - - return Carbon::parse(collect($this->getWeekends())->random()) - ->setTime( - $time->hour, - $time->minute, - $time->second - ); - } - - protected function NOT_TASK() - { - $time = $this->getTime(); - - return Carbon::parse(collect($this->getDatesOfMonth())->random()) - ->setTime( - $time->hour, - $time->minute, - $time->second - ); - } - - protected function LOW_PRIORITY_NOT_TASK() - { - $time = $this->getTime(); - - return Carbon::parse(collect($this->getDatesOfMonth())->random()) - ->setTime( - $time->hour, - $time->minute, - $time->second - ); - } - - protected function NOT_EVENING() - { - $date = collect($this->getDatesOfMonth())->random(); - $nightTime = $this->getNightHour(); - - return $date->copy()->setTime($nightTime->hour, $nightTime->minute, $nightTime->second); - } - - protected function NOT_THURSDAY_EVENING() - { - $date = collect($this->getThursday())->random(); - $nightTime = $this->getNightHour(); - - return $date->copy()->setTime($nightTime->hour, $nightTime->minute, $nightTime->second); - } - - protected function VACATION() - { - $time = $this->getTime(); - - return Carbon::parse(collect($this->getDatesOfMonth())->random()) - ->setTime( - $time->hour, - $time->minute, - $time->second - ); - } - - protected function MEDICAL() - { - $time = $this->getTime(); - - return Carbon::parse(collect($this->getDatesOfMonth())->random()) - ->setTime( - $time->hour, - $time->minute, - $time->second - ); - } - - protected function SCHOOL() - { - $time = $this->getTime(); - - return Carbon::parse(collect($this->getDatesOfMonth())->random()) - ->setTime( - $time->hour, - $time->minute, - $time->second - ); + // for ($i = 0; $i < 15; $i++) { + // $user = User::factory()->create([ + // 'first_name' => 'mefaked', + // 'userable_id' => Soldier::factory()->create([ + // 'qualifications' => ['pikud'], + // 'capacity' => 5.5, + // 'max_weekends' => 5.5, + // 'max_shifts' => 10, + // 'max_nights' => 5.5, + // 'is_reservist' => false, + // ])->id, + // ]); + // $this->createConstraints($user->id); + // } + + // for ($i = 0; $i < 40; $i++) { + // $user = User::factory()->create([ + // 'first_name' => 'chayal pashut', + // 'userable_id' => Soldier::factory()->create([ + // 'qualifications' => ['hatasa', 'tazpit', 'shmira'], + // 'capacity' => 6, + // 'max_weekends' => 6, + // 'max_shifts' => 7, + // 'max_nights' => 6, + // 'is_reservist' => false, + // ])->id, + // ]); + // $this->createConstraints($user->id); + // } + + // for ($i = 0; $i < 30; $i++) { + // $user = User::factory()->create([ + // 'first_name' => 'chayal beinony', + // 'userable_id' => Soldier::factory()->create([ + // 'qualifications' => ['hatasa', 'tazpit', 'shmira', 'tichnun', 'pianuach'], + // 'capacity' => 5.5, + // 'max_weekends' => 5.5, + // 'max_shifts' => 6, + // 'max_nights' => 5.5, + // 'is_reservist' => false, + // ])->id, + // ]); + // $this->createConstraints($user->id); + // } + + // for ($i = 0; $i < 25; $i++) { + // $user = User::factory()->create([ + // 'first_name' => 'chayal vatik', + // 'userable_id' => Soldier::factory()->create([ + // 'qualifications' => ['hatasa', 'bakara', 'tichnun', 'pianuach'], + // 'capacity' => 5, + // 'max_weekends' => 5, + // 'max_shifts' => 5, + // 'max_nights' => 5, + // 'is_reservist' => false, + // ])->id, + // ]); + // $this->createConstraints($user->id); + // } + + // for ($i = 0; $i < 10; $i++) { + // $user = User::factory()->create([ + // 'first_name' => 'menahalan', + // 'userable_id' => Soldier::factory()->create([ + // 'qualifications' => ['minhal', 'bdikat ziud'], + // 'capacity' => 0, + // 'max_weekends' => 0, + // 'max_shifts' => 4, + // 'max_nights' => 0, + // 'is_reservist' => false, + // ])->id, + // ]); + // $this->createConstraints($user->id); + // } + + // for ($i = 0; $i < 8; $i++) { + // $user = User::factory()->create([ + // 'first_name' => 'navat', + // 'userable_id' => Soldier::factory()->create([ + // 'qualifications' => ['nivut'], + // 'capacity' => 10, + // 'max_weekends' => 10, + // 'max_shifts' => 12, + // 'max_nights' => 10, + // 'is_reservist' => false, + // ])->id, + // ]); + // $this->createConstraints($user->id); + // } + + // // Tasks + // // tichnun + // Task::factory()->create([ + // 'name' => 'tichnun א-ה בוקר', + // 'start_hour' => '10:00:00', + // 'duration' => 4, + // 'parallel_weight' => 0, + // 'type' => 'tichnun', + // 'is_weekend' => false, + // 'is_night' => false, + // 'color' => '#b54b4b', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'tichnun א-ה לילה', + // 'start_hour' => '02:00:00', + // 'duration' => 4, + // 'parallel_weight' => 1, + // 'type' => 'tichnun', + // 'is_weekend' => false, + // 'is_night' => true, + // 'color' => '#b54b4b', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'tichnun 1 סופ"ש', + // 'start_hour' => '10:30:00', + // 'duration' => 25, + // 'parallel_weight' => 2.5, + // 'type' => 'tichnun', + // 'is_weekend' => true, + // 'is_night' => false, + // 'color' => '#b54b4b', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::FRIDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'tichnun 2 סופ"ש', + // 'start_hour' => '11:10:00', + // 'duration' => 25, + // 'parallel_weight' => 2.5, + // 'type' => 'tichnun', + // 'is_weekend' => true, + // 'is_night' => false, + // 'color' => '#b54b4b', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::FRIDAY], + // ]), + // ]); + // // bakara + // Task::factory()->create([ + // 'name' => 'bakara ארבע פעמים בשבוע בוקר', + // 'start_hour' => '10:00:00', + // 'duration' => 4, + // 'parallel_weight' => 0, + // 'type' => 'bakara', + // 'is_weekend' => false, + // 'is_night' => false, + // 'color' => '#4bb5ac', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'bakara שלוש פעמים בשבוע לילה', + // 'start_hour' => '03:20:00', + // 'duration' => 4, + // 'parallel_weight' => 1, + // 'type' => 'bakara', + // 'is_weekend' => false, + // 'is_night' => true, + // 'color' => '#4bb5ac', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'bakara סופ"ש', + // 'start_hour' => '10:05:00', + // 'duration' => 26, + // 'parallel_weight' => 2.5, + // 'type' => 'bakara', + // 'is_weekend' => true, + // 'is_night' => false, + // 'color' => '#4bb5ac', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::FRIDAY], + // ]), + // ]); + // // pikud + // Task::factory()->create([ + // 'name' => 'pikud 1 א-ה בוקר', + // 'start_hour' => '10:00:00', + // 'duration' => 4, + // 'parallel_weight' => 0, + // 'type' => 'pikud', + // 'is_weekend' => false, + // 'is_night' => false, + // 'color' => '#4bb569', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'pikud 2 א-ה בוקר', + // 'start_hour' => '10:00:00', + // 'duration' => 4, + // 'parallel_weight' => 0, + // 'type' => 'pikud', + // 'is_weekend' => false, + // 'is_night' => false, + // 'color' => '#4bb569', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'pikud 1 סופש', + // 'start_hour' => '10:00:00', + // 'duration' => 25, + // 'parallel_weight' => 2.5, + // 'type' => 'pikud', + // 'is_weekend' => true, + // 'is_night' => false, + // 'color' => '#4bb569', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::FRIDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'pikud 2 סופש', + // 'start_hour' => '10:00:00', + // 'duration' => 25, + // 'parallel_weight' => 2.5, + // 'type' => 'pikud', + // 'is_weekend' => true, + // 'is_night' => false, + // 'color' => '#4bb569', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::FRIDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'pikud לילה א-ה', + // 'start_hour' => '03:00:00', + // 'duration' => 4, + // 'parallel_weight' => 1, + // 'type' => 'pikud', + // 'is_weekend' => false, + // 'is_night' => true, + // 'color' => '#4bb569', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // // minhal + // Task::factory()->create([ + // 'name' => 'minhal שלוש פעמים בשבוע בוקר', + // 'start_hour' => '13:00:00', + // 'duration' => 2, + // 'parallel_weight' => 0, + // 'type' => 'minhal', + // 'is_weekend' => false, + // 'is_night' => false, + // 'color' => '#c5d649', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::TUESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // // hatasa + // Task::factory()->create([ + // 'name' => 'hatasa א-ה בוקר', + // 'start_hour' => '09:00:00', + // 'duration' => 6, + // 'parallel_weight' => 0, + // 'type' => 'hatasa', + // 'is_weekend' => false, + // 'is_night' => false, + // 'color' => '#d649b5', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'hatasa א-ה בשבוע לילה', + // 'start_hour' => '02:00:00', + // 'duration' => 6, + // 'parallel_weight' => 1, + // 'type' => 'hatasa', + // 'is_weekend' => false, + // 'is_night' => true, + // 'color' => '#d649b5', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'hatasa 1 סופש', + // 'start_hour' => '06:00:00', + // 'duration' => 26, + // 'parallel_weight' => 2.5, + // 'type' => 'hatasa', + // 'is_weekend' => true, + // 'is_night' => false, + // 'color' => '#d649b5', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::FRIDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'hatasa 2 סופש', + // 'start_hour' => '06:00:00', + // 'duration' => 26, + // 'parallel_weight' => 2.5, + // 'type' => 'hatasa', + // 'is_weekend' => true, + // 'is_night' => false, + // 'color' => '#d649b5', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::FRIDAY], + // ]), + // ]); + // // shmira + // Task::factory()->create([ + // 'name' => 'shmira א-ה בוקר', + // 'start_hour' => '07:00:00', + // 'duration' => 12, + // 'parallel_weight' => 0, + // 'type' => 'shmira', + // 'is_weekend' => false, + // 'is_night' => false, + // 'color' => '#ee8559', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'shmira א-ה לילה', + // 'start_hour' => '01:00:00', + // 'duration' => 7, + // 'parallel_weight' => 1, + // 'type' => 'shmira', + // 'is_weekend' => false, + // 'is_night' => true, + // 'color' => '#ee8559', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'shmira 1 סופש', + // 'start_hour' => '06:00:00', + // 'duration' => 26, + // 'parallel_weight' => 2.5, + // 'type' => 'shmira', + // 'is_weekend' => true, + // 'is_night' => false, + // 'color' => '#ee8559', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::FRIDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'shmira סופש 2', + // 'start_hour' => '06:00:00', + // 'duration' => 26, + // 'parallel_weight' => 2.5, + // 'type' => 'shmira', + // 'is_weekend' => true, + // 'is_night' => false, + // 'color' => '#ee8559', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::FRIDAY], + // ]), + // ]); + // // pianuach + // Task::factory()->create([ + // 'name' => 'pianuach א-ה בוקר', + // 'start_hour' => '07:00:00', + // 'duration' => 7, + // 'parallel_weight' => 0, + // 'type' => 'pianuach', + // 'is_weekend' => false, + // 'is_night' => false, + // 'color' => '#3574fb', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'pianuach א-ה לילה', + // 'start_hour' => '01:00:00', + // 'duration' => 5, + // 'parallel_weight' => 1, + // 'type' => 'pianuach', + // 'is_weekend' => false, + // 'is_night' => true, + // 'color' => '#3574fb', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'pianuach 1 סופש', + // 'start_hour' => '07:00:00', + // 'duration' => 27, + // 'parallel_weight' => 2.5, + // 'type' => 'pianuach', + // 'is_weekend' => true, + // 'is_night' => false, + // 'color' => '#3574fb', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::FRIDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'pianuach 2 סופש', + // 'start_hour' => '07:00:00', + // 'duration' => 27, + // 'parallel_weight' => 2.5, + // 'type' => 'pianuach', + // 'is_weekend' => true, + // 'is_night' => false, + // 'color' => '#3574fb', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::FRIDAY], + // ]), + // ]); + // // nivut + // Task::factory()->create([ + // 'name' => 'nivut א-ה בוקר', + // 'start_hour' => '11:00:00', + // 'duration' => 2, + // 'parallel_weight' => 0, + // 'type' => 'nivut', + // 'is_weekend' => false, + // 'is_night' => false, + // 'color' => '#ed8d8d8b', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'nivut א-ה לילה', + // 'start_hour' => '01:00:00', + // 'duration' => 2.5, + // 'parallel_weight' => 1, + // 'type' => 'nivut', + // 'is_weekend' => false, + // 'is_night' => true, + // 'color' => '#ed8d8d8b', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'nivut 1 סופש', + // 'start_hour' => '11:00:00', + // 'duration' => 28, + // 'parallel_weight' => 2.5, + // 'type' => 'nivut', + // 'is_weekend' => true, + // 'is_night' => false, + // 'color' => '#ed8d8d8b', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::FRIDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'nivut 2 סופש', + // 'start_hour' => '11:00:00', + // 'duration' => 28, + // 'parallel_weight' => 2.5, + // 'type' => 'nivut', + // 'is_weekend' => true, + // 'is_night' => false, + // 'color' => '#ed8d8d8b', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::FRIDAY], + // ]), + // ]); + // // tazpit + // Task::factory()->create([ + // 'name' => 'tazpit א-ה בוקר 1', + // 'start_hour' => '08:00:00', + // 'duration' => 10, + // 'parallel_weight' => 0, + // 'type' => 'tazpit', + // 'is_weekend' => false, + // 'is_night' => false, + // 'color' => '#77ff23', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'tazpit א-ה בוקר 2', + // 'start_hour' => '08:00:00', + // 'duration' => 10, + // 'parallel_weight' => 0, + // 'type' => 'tazpit', + // 'is_weekend' => false, + // 'is_night' => false, + // 'color' => '#77ff23', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'tazpit א-ה לילה', + // 'start_hour' => '01:30:00', + // 'duration' => 6, + // 'parallel_weight' => 1, + // 'type' => 'tazpit', + // 'is_weekend' => false, + // 'is_night' => true, + // 'color' => '#77ff23', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'tazpit 1 סופש', + // 'start_hour' => '11:45:00', + // 'duration' => 25, + // 'parallel_weight' => 2.5, + // 'type' => 'tazpit', + // 'is_weekend' => true, + // 'is_night' => false, + // 'color' => '#77ff23', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::FRIDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'tazpit 2 סופש', + // 'start_hour' => '11:00:00', + // 'duration' => 25, + // 'parallel_weight' => 2.5, + // 'type' => 'tazpit', + // 'is_weekend' => true, + // 'is_night' => false, + // 'color' => '#77ff23', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::FRIDAY], + // ]), + // ]); + // // bdikat ziud + // Task::factory()->create([ + // 'name' => 'bdikat ziud פעם בשבוע בוקר', + // 'start_hour' => '11:15:00', + // 'duration' => 3.5, + // 'parallel_weight' => 0, + // 'type' => 'bdikat ziud', + // 'is_weekend' => false, + // 'is_night' => false, + // 'color' => '#a7b2c3', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY], + // ]), + // ]); + + // $recurringEvents = new RecurringEvents; + // $recurringEvents->recurringTask(); + // } + + // protected function createConstraints(int $userId) + // { + // for ($i = 0; $i < count(ConstraintType::cases()); $i++) { + // $times = ConstraintType::getLimit()[ConstraintType::cases()[$i]->value] > 0 + // ? random_int(0, ConstraintType::getLimit()[ConstraintType::cases()[$i]->value]) : + // random_int(0, random_int(0, 5)); + // for ($j = 0; $j < $times; $j++) { + // $startDate = call_user_func([$this, ConstraintType::cases()[$i]->name]); + // Constraint::factory()->create([ + // 'soldier_id' => User::find($userId)->userable_id, + // 'constraint_type' => ConstraintType::cases()[$i], + // 'start_date' => $startDate, + // 'end_date' => $startDate->copy()->addHours(random_int(1, 5)), + // ]); + // } + // } + // } + + // protected function getDatesOfMonth($month = null) + // { + // $month ??= now()->addMonth(); + + // return CarbonPeriod::between($month->startOfMonth(), $month->copy()->endOfMonth()); + // } + + // protected function getThursday() + // { + // $period = $this->getDatesOfMonth(); + + // return collect($period) + // ->filter( + // fn ($date) => Carbon::parse($date)->isThursday() + // )->all(); + // } + + // protected function getWeekends() + // { + // $period = $this->getDatesOfMonth(); + + // return collect($period) + // ->filter( + // fn ($date) => Carbon::parse($date)->isFriday() || Carbon::parse($date)->isSaturday() + // ) + // ->all(); + // } + + // protected function getTime() + // { + // return Carbon::now()->subSeconds(rand(0, 30 * 24 * 60 * 60)); + // } + + // protected function getNightHour() + // { + // $time = $this->getTime(); + // if ($time->hour < 20 && $time->hour >= 8) { + // return $time->addHours(20 - $time->hour); + // } + + // return $time; + // } + + // protected function NOT_WEEKEND() + // { + // $time = $this->getTime(); + + // return Carbon::parse(collect($this->getWeekends())->random()) + // ->setTime( + // $time->hour, + // $time->minute, + // $time->second + // ); + // } + + // protected function LOW_PRIORITY_NOT_WEEKEND() + // { + // $time = $this->getTime(); + + // return Carbon::parse(collect($this->getWeekends())->random()) + // ->setTime( + // $time->hour, + // $time->minute, + // $time->second + // ); + // } + + // protected function NOT_TASK() + // { + // $time = $this->getTime(); + + // return Carbon::parse(collect($this->getDatesOfMonth())->random()) + // ->setTime( + // $time->hour, + // $time->minute, + // $time->second + // ); + // } + + // protected function LOW_PRIORITY_NOT_TASK() + // { + // $time = $this->getTime(); + + // return Carbon::parse(collect($this->getDatesOfMonth())->random()) + // ->setTime( + // $time->hour, + // $time->minute, + // $time->second + // ); + // } + + // protected function NOT_EVENING() + // { + // $date = collect($this->getDatesOfMonth())->random(); + // $nightTime = $this->getNightHour(); + + // return $date->copy()->setTime($nightTime->hour, $nightTime->minute, $nightTime->second); + // } + + // protected function NOT_THURSDAY_EVENING() + // { + // $date = collect($this->getThursday())->random(); + // $nightTime = $this->getNightHour(); + + // return $date->copy()->setTime($nightTime->hour, $nightTime->minute, $nightTime->second); + // } + + // protected function VACATION() + // { + // $time = $this->getTime(); + + // return Carbon::parse(collect($this->getDatesOfMonth())->random()) + // ->setTime( + // $time->hour, + // $time->minute, + // $time->second + // ); + // } + + // protected function MEDICAL() + // { + // $time = $this->getTime(); + + // return Carbon::parse(collect($this->getDatesOfMonth())->random()) + // ->setTime( + // $time->hour, + // $time->minute, + // $time->second + // ); + // } + + // protected function SCHOOL() + // { + // $time = $this->getTime(); + + // return Carbon::parse(collect($this->getDatesOfMonth())->random()) + // ->setTime( + // $time->hour, + // $time->minute, + // $time->second + // ); } } From f9c944a5314c0b735d65ac93c5bd4a26c52f5645 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Tue, 24 Dec 2024 12:28:09 +0200 Subject: [PATCH 039/259] version2 --- .github/workflows/php-build-and-deploy.yml | 2 +- .github/workflows/php-lint.yaml | 29 + .github/workflows/php-tests.yaml | 36 + .github/workflows/pre-commit.yaml | 13 + .github/workflows/release.yaml | 30 + Dockerfile | 1 + app/Enums/Holidays.php | 51 + app/Exports/ShiftsExport.php | 73 + app/Filament/Widgets/CalendarWidget.php | 176 +- app/Models/Constraint.php | 19 +- app/Models/Shift.php | 3 +- app/Resources/DepartmentResource.php | 44 +- .../Pages/CreateDepartment.php | 4 +- .../Pages/EditDepartment.php | 2 +- app/Resources/SoldierResource.php | 34 +- app/Resources/TaskResource.php | 14 +- app/Resources/TeamResource.php | 10 +- .../TeamResource/Pages/CreateTeam.php | 7 - app/Resources/TeamResource/Pages/EditTeam.php | 8 - app/Services/Algorithm.php | 2 +- app/Services/Holidays.php | 35 + app/Services/ManualAssignment.php | 33 +- app/Services/RecurringEvents.php | 24 +- app/Services/ShiftAssignmentNotification.php | 36 + bootstrap/app.php | 2 + database/seeders/DatabaseSeeder.php | 1514 ++++++++--------- lang/en.json | 4 + lang/he.json | 25 +- public/css/filament/filament/app.css | 2 +- public/css/filament/forms/forms.css | 4 +- .../override-filament-fullcalendar.css | 6 +- .../forms/components/date-time-picker.js | 2 +- .../filament/forms/components/file-upload.js | 14 +- .../forms/components/markdown-editor.js | 2 +- .../filament/forms/components/rich-editor.js | 4 +- public/js/filament/support/support.js | 16 +- .../js/filament/widgets/components/chart.js | 4 +- tests/Feature/RecurringEventsTest.php | 22 +- 38 files changed, 1380 insertions(+), 927 deletions(-) create mode 100644 .github/workflows/php-lint.yaml create mode 100644 .github/workflows/php-tests.yaml create mode 100644 .github/workflows/pre-commit.yaml create mode 100644 .github/workflows/release.yaml create mode 100644 app/Enums/Holidays.php create mode 100644 app/Exports/ShiftsExport.php create mode 100644 app/Services/Holidays.php create mode 100644 app/Services/ShiftAssignmentNotification.php create mode 100644 lang/en.json diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index b0bf1f8..13ddda2 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/luy11 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_1 flavor: | latest=false tags: | diff --git a/.github/workflows/php-lint.yaml b/.github/workflows/php-lint.yaml new file mode 100644 index 0000000..7fd4d0e --- /dev/null +++ b/.github/workflows/php-lint.yaml @@ -0,0 +1,29 @@ +name: 💄 Lint + +on: + push: + +jobs: + build: + name: Run Linter + runs-on: ubuntu-latest + + steps: + - name: 📂 Checkout + uses: actions/checkout@v4 + + - name: 🐍 Install PHP + uses: shivammathur/setup-php@v2 + with: + php-version: '8.2' + extensions: pdo_pgsql + coverage: none + + - name: ⏬ Install dependencies + run: | + composer install -n --prefer-dist + composer require laravel/pint --dev + + - name: 💄 Run Pint + run: | + ./vendor/bin/pint --config pint.json --test diff --git a/.github/workflows/php-tests.yaml b/.github/workflows/php-tests.yaml new file mode 100644 index 0000000..4c16fed --- /dev/null +++ b/.github/workflows/php-tests.yaml @@ -0,0 +1,36 @@ +name: 🧪 Test + +on: + push: + +jobs: + tests: + name: Run tests + runs-on: ubuntu-latest + + steps: + - name: 📂 Checkout + uses: actions/checkout@v3 + + - name: 🐍 Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: '8.2' + extensions: pdo_pgsql + coverage: none + + - name: ⏬ Run Dependencies install + run: | + composer install -n --prefer-dist + npm install + npm run build + + - name: 🐍 Prepare Laravel Application + run: | + cp .env.example .env + php artisan key:generate + php artisan config:cache + php artisan migrate --env=testing + + - name: ✅ Run tests + run: php artisan test diff --git a/.github/workflows/pre-commit.yaml b/.github/workflows/pre-commit.yaml new file mode 100644 index 0000000..6eb55d4 --- /dev/null +++ b/.github/workflows/pre-commit.yaml @@ -0,0 +1,13 @@ +name: 🧹 Pre-commit + +on: + push: + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - name: 📁 Checkout repository + uses: actions/checkout@v4 + + - uses: pre-commit/action@v3.0.0 diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml new file mode 100644 index 0000000..aa9b0a9 --- /dev/null +++ b/.github/workflows/release.yaml @@ -0,0 +1,30 @@ +name: 🔖 release + +on: + release: + types: [created] + +jobs: + update-release: + runs-on: ubuntu-latest + + permissions: + issues: write + contents: write + + steps: + - name: 📂 Checkout code + uses: actions/checkout@v4 + + - name: 📦️ Create ZIP Archive + run: zip -r ${{ github.event.repository.name }}.zip . + + - name: ⬆️ upload-release-asset + uses: softprops/action-gh-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + files: ./${{ github.event.repository.name }}.zip + + - name: 📝 Update Release Description with Closed Issues and Assignees + run: bash github-scripts/find-closed-issues.sh ${{ secrets.GITHUB_TOKEN }} ${{ github.event.release.url }} diff --git a/Dockerfile b/Dockerfile index 1bf5804..f2d35cc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -53,6 +53,7 @@ RUN install-php-extensions \ opcache \ redis \ sockets \ + calendar\ zip RUN composer install diff --git a/app/Enums/Holidays.php b/app/Enums/Holidays.php new file mode 100644 index 0000000..cfa704a --- /dev/null +++ b/app/Enums/Holidays.php @@ -0,0 +1,51 @@ + 'א דר"ה', + self::ROSH_ASHANA_2 => 'ב דר"ה', + self::YOM_KIPUR => 'יוה"כ', + self::SUKOT => 'סוכות', + self::CHOL_HAMOHED_SUKOT_1 => 'א דחוה"מ סוכות', + self::CHOL_HAMOHED_SUKOT_2 => 'ב דחוה"מ סוכות', + self::CHOL_HAMOHED_SUKOT_3 => 'ג דחוה"מ סוכות', + self::CHOL_HAMOHED_SUKOT_4 => 'ד דחוה"מ סוכות', + self::CHOL_HAMOHED_SUKOT_5 => 'ה דחוה"מ סוכות', + self::HOSHAANA_RABA => 'הושענא רבה', + self::SIMCHAT_TORAH => 'שמחת תורה', + self::PESACH => 'פסח', + self::CHOL_HAMOHED_PESACH_1 => 'א דחוה"מ פסח', + self::CHOL_HAMOHED_PESACH_2 => 'ב דחוה"מ פסח', + self::CHOL_HAMOHED_PESACH_3 => 'ג דחוה"מ פסח', + self::CHOL_HAMOHED_PESACH_4 => 'ד דחוה"מ פסח', + self::CHOL_HAMOHED_PESACH_5 => 'ה דחוה"מ פסח', + self::SHVIHI_SHEL_PESACH => 'שביעי של פסח', + self::SHAVUOT => 'שבועות' + }; + } +} diff --git a/app/Exports/ShiftsExport.php b/app/Exports/ShiftsExport.php new file mode 100644 index 0000000..c7393f8 --- /dev/null +++ b/app/Exports/ShiftsExport.php @@ -0,0 +1,73 @@ +query = $query; + $this->month = $month; + } + + public function collection() + { + return $this->query + ->whereBetween('start_date', [Carbon::parse($this->month)->startOfMonth(), Carbon::parse($this->month)->endOfMonth()]) + ->sortBy('start_date') + ->map(function ($shift) { + $task = Task::find($shift->task_id); + + return [ + __('Start date') => $shift->start_date, + __('End date') => $shift->end_date, + __('Soldier') => User::where('userable_id', $shift->soldier_id)->first()?->displayName ?? __('Unknown'), + __('Shift name') => $task->name, + __('Is night') => $task->is_night ? __('Yes') : __('No'), + __('Is weekend') => $task->is_weekend ? __('Yes') : __('No'), + ]; + }); + } + + public function headings(): array + { + return [ + __('Start date'), + __('End date'), + __('Soldier'), + __('Shift name'), + __('Is night'), + __('Is weekend'), + ]; + } + + public function styles(Worksheet $sheet) + { + $sheet->setRightToLeft(true); + $sheet->getStyle('A1:F1')->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB('D3D3D3'); + + return [ + 1 => ['font' => ['bold' => true]], + ]; + } + + public function title(): string + { + return $this->month; + } +} diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 7f02a0c..b3a94c9 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -2,18 +2,23 @@ namespace App\Filament\Widgets; +use App\Exports\ShiftsExport; use App\Models\Constraint; use App\Models\Shift; use App\Models\Soldier; use App\Models\Task; use App\Services\Algorithm; +use App\Services\Holidays; use App\Services\RecurringEvents; use Carbon\Carbon; use Filament\Actions\Action; +use Filament\Actions\ActionGroup; use Filament\Forms\Form; +use Filament\Notifications\Notification; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Collection; use Illuminate\Support\Facades\Schema; +use Maatwebsite\Excel\Facades\Excel; use Saade\FilamentFullCalendar\Actions\CreateAction; use Saade\FilamentFullCalendar\Actions\DeleteAction; use Saade\FilamentFullCalendar\Actions\EditAction; @@ -41,20 +46,21 @@ class CalendarWidget extends FullCalendarWidget public $currentMonth; + public $startDate; + + public $lastMonth; + public function fetchEvents(array $fetchInfo): array { + $this->currentMonth = Carbon::parse($fetchInfo['start'])->addDays(7)->year.'-'.Carbon::parse($fetchInfo['start'])->addDays(7)->month; - $this->currentMonth = (Carbon::parse($fetchInfo['start'])->day != 1) - ? Carbon::parse($fetchInfo['start'])->addMonth()->year . '-' . Carbon::parse($fetchInfo['start'])->addMonth()->month . '-' . '01' - : Carbon::parse($fetchInfo['start'])->year . '-' . Carbon::parse($fetchInfo['start'])->month . '-' . '01'; + $this->headerActions(); $events = $this->getEventsByRole(); $events->where('start_date', '>=', $fetchInfo['start']) ->where('end_date', '<=', $fetchInfo['end']); - - return self::events($events) - + $eventDays = self::events($events) ->map(function (Model $event) { return [ 'id' => $event[$this->keys[0]], @@ -68,6 +74,36 @@ public function fetchEvents(array $fetchInfo): array ]; }) ->toArray(); + + $specialDays = []; + $startDate = Carbon::parse($fetchInfo['start']); + $endDate = Carbon::parse($fetchInfo['end']); + + while ($startDate->lte($endDate)) { + $holidays = $this->getHolidays($startDate->month, $startDate->day, $startDate->year); + if ($holidays[0]) { + $specialDays[] = [ + 'id' => null, + 'title' => $holidays[1], + 'start' => $startDate->toDateString(), + 'end' => $startDate->toDateString(), + 'backgroundColor' => 'rgba(var(--primary-600))', + 'borderColor' => '#ffffff', + 'textColor' => 'black', + 'display' => 'background', + ]; + } + $startDate->addDay(); + } + + return array_merge($eventDays, $specialDays); + } + + private function getHolidays($month, $day, $year): array + { + $holiday = new Holidays($month, $day, $year); + + return [$holiday->isHoliday, $holiday->holidayName]; } public function getEventsByRole() @@ -83,18 +119,18 @@ public function getEventsByRole() ->orWhereNull('soldier_id') ->get() ->filter(function (Model $object) use ($current_user_id) { - $soldier = Soldier::where('id', '=', $object->soldier_id)->first(); + $soldier = Soldier::where('id', '=', $object->soldier_id)->first(); - return !$soldier || $soldier?->team?->department?->commander_id == $current_user_id; - }), + return ! $soldier || $soldier?->team?->department?->commander_id == $current_user_id; + }), 'team-commander' => $this->model::where('soldier_id', '!=', $current_user_id) ->orWhereNull('soldier_id') ->get() ->filter(function (Model $object) use ($current_user_id) { - $soldier = Soldier::where('id', '=', $object->soldier_id)->first(); + $soldier = Soldier::where('id', '=', $object->soldier_id)->first(); - return !$soldier || $soldier?->team?->commander_id == $current_user_id; - }), + return ! $soldier || $soldier?->team?->commander_id == $current_user_id; + }), } : $this->model::where('soldier_id', '=', $current_user_id)->get(); } @@ -110,6 +146,12 @@ public function getFormSchema(): array protected function headerActions(): array { + $this->currentMonth ?? $this->currentMonth = Carbon::now()->year.'-'.Carbon::now()->month; + if ($this->lastFilterData != $this->filterData || $this->lastMonth !== $this->currentMonth) { + $this->refreshRecords(); + $this->lastFilterData = $this->filterData; + $this->lastMonth = $this->currentMonth; + } $today = now()->startOfDay(); $actions = []; if ($this->type === 'my') { @@ -122,13 +164,14 @@ protected function headerActions(): array 'end_date' => $arguments['end'] ?? null, ]); }) - ->label($this->model::getTitle() . ' ' . __('New')) - ->modalHeading(__('Create') . ' ' . $this->model::getTitle()) + ->label($this->model::getTitle().' '.__('New')) + ->modalHeading(__('Create').' '.$this->model::getTitle()) ->disabled(function (array $arguments) use ($today) { $startDate = Carbon::parse($arguments['start'] ?? null); return $startDate->isBefore($today); - })->extraAttributes(['class' => 'fullcalendar']), + })->extraAttributes(['class' => 'fullcalendar']) + ->hidden($this->model === Shift::class && $this->type === 'my' && ! array_intersect(auth()->user()->getRoleNames()->toArray(), ['manager', 'department-commander', 'team-commander'])), ]; } } else { @@ -138,25 +181,37 @@ protected function headerActions(): array } else { if (Task::exists()) { $actions = [ - Action::make('Create shifts') - ->action(fn() => $this->runEvents()) - ->label(__('Create shifts')) - ->icon('heroicon-o-arrow-path') - ->visible(current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))) - ->extraAttributes(['class' => 'fullcalendar']), - Action::make('Shifts assignment') - ->action(fn() => $this->runAlgorithm()) - ->label(__('Shifts assignment')) - ->icon('heroicon-o-play') - ->visible(current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))) - ->extraAttributes(['class' => 'fullcalendar']), + ActionGroup::make([ + Action::make('Download') + ->label(__('Download to excel')) + ->icon('heroicon-o-arrow-down-tray') + ->action(function () { + return Excel::download(new ShiftsExport($this->getEventsByRole(), $this->currentMonth), __('File name', [ + 'name' => auth()->user()->displayName, + 'month' => $this->currentMonth]).'.xlsx'); + }), + Action::make('Create shifts') + ->action(fn () => $this->runEvents()) + ->label(__('Create shifts')) + ->icon('heroicon-o-clipboard-document-check') + ->visible(current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) && Carbon::today()->startOfMonth() <= Carbon::parse($this->currentMonth)) + ->extraAttributes(['class' => 'fullcalendar']), + Action::make('Shifts assignment') + ->action(fn () => $this->runAlgorithm()) + ->label(__('Shifts assignment')) + ->icon('heroicon-o-play') + ->visible(current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) && Carbon::today()->startOfMonth() <= Carbon::parse($this->currentMonth)) + ->extraAttributes(['class' => 'fullcalendar']), + Action::make('Reset assignment') + ->action(fn () => $this->resetShifts()) + ->label(__('Reset assignment')) + ->icon('heroicon-o-arrow-path') + ->visible(current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) && Carbon::today()->startOfMonth() <= Carbon::parse($this->currentMonth)) + ->extraAttributes(['class' => 'fullcalendar']), + ]), ]; } } - if ($this->lastFilterData != $this->filterData) { - $this->refreshRecords(); - $this->lastFilterData = $this->filterData; - } if ($this->filter) { return array_merge(self::activeFilters(), [ self::resetFilters(), @@ -177,6 +232,17 @@ protected function headerActions(): array return []; } + protected function resetShifts() + { + $this->startDate = (Carbon::now()->format('m') == Carbon::parse($this->currentMonth)->format('m')) + ? Carbon::now()->addDay()->format('Y-m-d') + : Carbon::parse($this->currentMonth)->startOfMonth()->format('Y-m-d'); + Shift::whereNotNull('soldier_id') + ->whereBetween('start_date', [$this->startDate, (Carbon::parse($this->currentMonth)->endOfMonth()->addDay())->format('Y-m-d')]) + ->update(['soldier_id' => null]); + $this->refreshRecords(); + } + protected function runEvents() { $recurringEvents = new RecurringEvents($this->currentMonth); @@ -195,6 +261,8 @@ protected function resetFilters() { return Action::make('resetFilters') ->label(__('Reset filters')) + ->icon('heroicon-o-arrow-path') + ->iconButton() ->action(function () { $this->filter = false; $this->filterData = []; @@ -239,34 +307,53 @@ protected function modalActions(): array 'end_date' => $arguments['event']['end'] ?? $record->end_date, ]; }) + ->hidden($this->model === Shift::class && $this->type === 'my' && ! array_intersect(auth()->user()->getRoleNames()->toArray(), ['manager', 'department-commander', 'team-commander'])) ->modalCloseButton(false) ->modalCancelAction(false) ->modalSubmitAction(false) ->closeModalByClickingAway(false) ->extraModalFooterActions(function (Action $action, array $arguments): array { $canSave = empty($arguments) ? true : ( - isset($this->mountedActionsData[0]['constraint_type']) && - array_key_exists( - $this->mountedActionsData[0]['constraint_type'], - $this->model::getAvailableOptions($arguments['event']['start'], $arguments['event']['end']) - )); + ($this->model === Constraint::class) ? ( + isset($this->mountedActionsData[0]['constraint_type']) && + array_key_exists( + $this->mountedActionsData[0]['constraint_type'], + $this->model::getAvailableOptions($arguments['event']['start'], $arguments['event']['end']) + ) + ) : true + ); + $oldDate = date('l', strtotime($this->mountedActionsArguments[0]['oldEvent']['start'])); + $newDate = date('l', strtotime($this->mountedActionsData[0]['start_date'])); + $startOfWeek = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday']; + if ( + $this->model === Shift::class && + (in_array($oldDate, $startOfWeek) !== in_array($newDate, $startOfWeek)) + ) { + Notification::make() + ->info() + ->title(__('Update dragged shift details!')) + ->body(__('Pay attention to update the shift details according to the changes you made .')) + ->color('info') + ->persistent() + ->send(); + } return [ $action->makeExtraModalAction(__('Save'), arguments: ['save' => true]) ->color('primary') - ->disabled(!$canSave), + ->disabled(! $canSave), $action->makeExtraModalAction(__('Cancel'), arguments: ['cancel' => true]) ->color('primary'), ]; }) - ->modalHeading(__('Edit') . ' ' . $this->model::getTitle()) + ->modalHeading(__('Edit').' '.$this->model::getTitle()) ->action(function (array $data, array $arguments, Model $record): void { $data = method_exists($this->model, 'setData') ? $data = $this->model::setData($record, $data) : $data; if ($arguments['cancel'] ?? false) { $this->refreshRecords(); } if ($arguments['save'] ?? false) { - $columns = Schema::getColumnListing(strtolower(class_basename($this->model)) . 's'); + $columns = Schema::getColumnListing(strtolower(class_basename($this->model)).'s'); $filteredData = array_intersect_key($data, array_flip($columns)); $record = $this->model::find($record['id']); if ($record) { @@ -279,14 +366,15 @@ protected function modalActions(): array } }), DeleteAction::make() - ->modalHeading(__('Delete')) - ->label(__('Delete')), + ->label(__('Delete')) + ->hidden($this->model === Shift::class && $this->type === 'my' && ! array_intersect(auth()->user()->getRoleNames()->toArray(), ['manager', 'department-commander', 'team-commander'])), + ]; - if ($this->type === 'my' || ($this->type === 'my_soldiers' && $this->model === Shift::class)) { + if (($this->type === 'my' && $this->model === Constraint::class) || ($this->type === 'my_soldiers' && $this->model === Shift::class)) { if (method_exists($this->model, 'getAction')) { $action = $this->model::getAction($this) ->visible(function (): bool { - $record = is_array($this->mountedActionsData) && !empty($this->mountedActionsData) + $record = is_array($this->mountedActionsData) && ! empty($this->mountedActionsData) ? (object) $this->mountedActionsData[0] : (object) $this->mountedActionsData; @@ -318,6 +406,6 @@ protected function viewAction(): Action 'end_date' => $arguments['event']['end'] ?? $record->end_date, ]; }) - ->modalHeading(__('View') . $this->model::getTitle()); + ->modalHeading(__('View').$this->model::getTitle()); } } diff --git a/app/Models/Constraint.php b/app/Models/Constraint.php index 63e8ba6..a33ce3b 100644 --- a/app/Models/Constraint.php +++ b/app/Models/Constraint.php @@ -88,9 +88,18 @@ private static function availableOptions($startDate, $endDate): array } $usedCounts = self::getUsedCountsForCurrentMonth($startDate, $endDate); $limits = ConstraintType::getLimit(); + $constraintsWithinLimit = []; + foreach ($options as $constraint => $label) { + $used = $usedCounts[$constraint] ?? 0; + $limit = $limits[$constraint] ?? 0; + + if ($limit === 0 || $used < $limit) { + $constraintsWithinLimit[$constraint] = $label; + } + } + + return $constraintsWithinLimit; - return array_filter($options, fn ($option) => ($limits[array_search($option, array_map(fn ($enum) => $enum->getLabel(), ConstraintType::cases()))] ?? 0) === 0 - || ($usedCounts[array_search($option, array_map(fn ($enum) => $enum->getLabel(), ConstraintType::cases()))] ?? 0) < ($limits[array_search($option, array_map(fn ($enum) => $enum->getLabel(), ConstraintType::cases()))] ?? 0)); } public static function getAvailableOptions($startDate, $endDate): array @@ -121,8 +130,7 @@ public static function updateDates(callable $set, $state, Get $get) { $constraintType = $get('constraint_type'); $startDate = Carbon::parse($get('start_date')); - // $endDate = Carbon::parse($get('end_date')); - $endDate = max($startDate,Carbon::parse($get('end_date'))); + $endDate = max($startDate, Carbon::parse($get('end_date'))); switch ($constraintType) { case 'Medical': @@ -194,8 +202,9 @@ public function getConstraintColorAttribute() public static function getFilters($calendar) { return Action::make('Filters') + ->iconButton() ->label(__('Filter')) - ->icon('heroicon-m-funnel') + ->icon('heroicon-o-funnel') ->extraAttributes(['class' => 'fullcalendar']) ->form(function () use ($calendar) { $constraints = $calendar->getEventsByRole(); diff --git a/app/Models/Shift.php b/app/Models/Shift.php index 824b1b0..a44b69b 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -196,8 +196,9 @@ public static function getAction($calendar): Action public static function getFilters($calendar) { return Action::make('Filters') + ->iconButton() ->label(__('Filter')) - ->icon('heroicon-m-funnel') + ->icon('heroicon-o-funnel') ->extraAttributes(['class' => 'fullcalendar']) ->form(function () use ($calendar) { $shifts = $calendar->getEventsByRole(); diff --git a/app/Resources/DepartmentResource.php b/app/Resources/DepartmentResource.php index e579a4c..6f72804 100644 --- a/app/Resources/DepartmentResource.php +++ b/app/Resources/DepartmentResource.php @@ -10,6 +10,7 @@ use Filament\Forms\Components\Select; use Filament\Forms\Components\TextInput; use Filament\Forms\Form; +use Filament\Notifications\Actions as NotificationsService; use Filament\Notifications\Notification; use Filament\Resources\Resource; use Filament\Tables\Actions\Action; @@ -73,7 +74,7 @@ public static function table(Table $table): Table ->sortable(), TextColumn::make('commander.user') ->formatStateUsing(function ($state) { - return $state->last_name.', '.$state->first_name; + return $state->last_name.' '.$state->first_name; }) ->label(__(key: 'Commander')) ->searchable() @@ -115,26 +116,33 @@ public static function table(Table $table): Table public static function checkCommander($teams, $departments, $data) { + $isCommanderNull = $data['commander_id'] === null; + $type = $teams->isNotEmpty() ? 'soldiers' : 'teams'; + + $body = $isCommanderNull + ? __('You did not choose a commander. With your approval, you leave the team without a commander. Are you sure?', ['type' => $type]) + : __('The commander you selected is already registered as a commander. His selection will leave his :type without a commander. Are you sure?', ['type' => $type]); + $actions = array_filter([ + ! $isCommanderNull ? NotificationsService\Action::make($teams->isNotEmpty() ? __('View team') : __('View department')) + ->button() + ->url( + fn () => $teams->isNotEmpty() + ? route('filament.app.resources.teams.index', ['commander_id' => $data['commander_id']]) + : route('filament.app.resources.departments.index', ['commander_id' => $data['commander_id']]) + ) : null, + NotificationsService\Action::make('confirm') + ->label(__('Confirm')) + ->button() + ->dispatch('confirmCreate', data: ['teams' => $teams, 'departments' => $departments]), + NotificationsService\Action::make(__('Cancel')) + ->button() + ->close(), + ]); Notification::make() ->title(__('Save department')) ->persistent() - ->body(__('The commander you selected is already registered as a commander. His selection will leave his :type without a commander. Are you sure?', ['type' => $teams->isNotEmpty() ? 'soldiers' : 'teams'])) - ->actions([ - \Filament\Notifications\Actions\Action::make($teams->isNotEmpty() ? __('View team') : __('View department')) - ->button() - ->url( - fn () => $teams->isNotEmpty() ? - route('filament.app.resources.teams.index', ['commander_id' => $data['commander_id']]) : - route('filament.app.resources.departments.index', ['commander_id' => $data['commander_id']]) - ), - \Filament\Notifications\Actions\Action::make('confirm') - ->label(__('Confirm')) - ->button() - ->dispatch('confirmCreate', data: ['teams' => $teams, 'departments' => $departments]), - \Filament\Notifications\Actions\Action::make(__('Cancel')) - ->button() - ->close(), - ]) + ->body($body) + ->actions($actions) ->send(); } diff --git a/app/Resources/DepartmentResource/Pages/CreateDepartment.php b/app/Resources/DepartmentResource/Pages/CreateDepartment.php index 8e83d35..1992f4a 100644 --- a/app/Resources/DepartmentResource/Pages/CreateDepartment.php +++ b/app/Resources/DepartmentResource/Pages/CreateDepartment.php @@ -30,7 +30,7 @@ protected function beforeCreate(): void $teams = Team::where('commander_id', operator: $this->data['commander_id'])->get(); $departments = Department::where('commander_id', $this->data['commander_id'])->get(); - if ($teams->isNotEmpty() || $departments->isNotEmpty()) { + if ($teams->isNotEmpty() || $departments->isNotEmpty() || $this->data['commander_id'] == null) { DepartmentResource::checkCommander($teams, $departments, $this->data); $this->halt(); } @@ -81,6 +81,6 @@ protected function afterCreate() protected function assignRoles() { $user = User::where('userable_id', $this->record->commander_id)->first(); - $user->assignRole('department-commander'); + $user?->assignRole('department-commander'); } } diff --git a/app/Resources/DepartmentResource/Pages/EditDepartment.php b/app/Resources/DepartmentResource/Pages/EditDepartment.php index 4a2a83a..4ff729d 100644 --- a/app/Resources/DepartmentResource/Pages/EditDepartment.php +++ b/app/Resources/DepartmentResource/Pages/EditDepartment.php @@ -68,6 +68,6 @@ protected function afterSave() protected function assignRoles() { $user = User::where('userable_id', $this->record->commander_id)->first(); - $user->assignRole('department-commander'); + $user?->assignRole('department-commander'); } } diff --git a/app/Resources/SoldierResource.php b/app/Resources/SoldierResource.php index 25c40f7..44b3518 100644 --- a/app/Resources/SoldierResource.php +++ b/app/Resources/SoldierResource.php @@ -295,9 +295,13 @@ public static function soldierDetails(): array ->label(__('Capacity')) ->required(), Section::make([ - Toggle::make('is_reservist')->label(__('Reservist'))->live(), - Toggle::make('is_permanent')->label(__('Is permanent')), - Toggle::make('has_exemption')->label(__('Exemption')), + Toggle::make('is_reservist') + ->label(__('Reservist')) + ->live(), + Toggle::make('is_permanent') + ->label(__('Is permanent')), + Toggle::make('has_exemption') + ->label(__('Exemption')), ])->columns(3), ]; } @@ -318,9 +322,27 @@ public static function constraints(): array { return [ Section::make([ - TextInput::make('max_shifts')->label(__('Max shifts'))->numeric()->minValue(0)->required()->default(0), - TextInput::make('max_nights')->label(__('Max nights'))->numeric()->minValue(0)->required()->default(0), - TextInput::make('max_weekends')->label(__('Max weekends'))->numeric()->minValue(0)->required()->default(0), + TextInput::make('max_shifts') + ->label(__('Max shifts')) + ->numeric() + ->step(0.25) + ->minValue(0) + ->required() + ->default(0), + TextInput::make('max_nights') + ->label(__('Max nights')) + ->numeric() + ->step(0.25) + ->minValue(0) + ->required() + ->default(0), + TextInput::make('max_weekends') + ->label(__('Max weekends')) + ->numeric() + ->step(0.25) + ->minValue(0) + ->required() + ->default(0), ]) ->columns(3), Section::make([ diff --git a/app/Resources/TaskResource.php b/app/Resources/TaskResource.php index 1b79b53..ca48a81 100644 --- a/app/Resources/TaskResource.php +++ b/app/Resources/TaskResource.php @@ -158,7 +158,7 @@ public static function table(Table $table): Table ->size(TextColumnSize::Small) ->extraAttributes(['style' => 'margin-left: 15px;']), TextColumn::make('recurring.start_date') - ->description(__('StartDate'), position: 'above') + ->description(__('Start date'), position: 'above') ->size(TextColumnSize::Small) ->extraAttributes(['style' => 'margin-left: 15px;']), TextColumn::make('recurring.end_date') @@ -362,8 +362,10 @@ function (Get $get) { } ) ->default(null) - ->placeholder('Select soldier') - ->visible( + ->placeholder(function (Get $get) { + return self::getSoldiers($get)->isEmpty() ? __('No suitable soldiers') : __('Select a soldier'); + } + )->visible( fn (Get $get): bool => $get('soldier_type') && $get('soldier_type') != 'me' ), @@ -400,7 +402,7 @@ protected static function getOptions(Get $get): array ->put('me', __('Me')) ->toArray(); } - if (current(array: array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) != 'manager') { + if (current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) != 'manager') { return collect($options) ->put('my_soldiers', __('My Soldiers')) ->toArray(); @@ -414,7 +416,7 @@ protected static function amIAvailable($get) $shift = self::taskDetails($get); $manual_assignment = new ManualAssignment($shift, 'me'); - return $manual_assignment->amIAvailable($get('type')); + return $manual_assignment->amIAvailable(); } protected static function getSoldiers(Get $get) @@ -422,7 +424,7 @@ protected static function getSoldiers(Get $get) $shift = self::taskDetails($get); $manual_assignment = new ManualAssignment($shift, $get('soldier_type')); - return $manual_assignment->getSoldiers($get('type'), $get('department_name')); + return $manual_assignment->getSoldiers($get('department_name')); } protected static function taskDetails(Get $get) diff --git a/app/Resources/TeamResource.php b/app/Resources/TeamResource.php index 9d1bd0a..0c2624c 100644 --- a/app/Resources/TeamResource.php +++ b/app/Resources/TeamResource.php @@ -11,6 +11,7 @@ use Filament\Forms\Components\Select; use Filament\Forms\Components\TextInput; use Filament\Forms\Form; +use Filament\Notifications\Actions as NotificationsService; use Filament\Notifications\Notification; use Filament\Resources\Resource; use Filament\Tables\Actions\Action; @@ -95,7 +96,7 @@ public static function table(Table $table): Table TextColumn::make('commander.user') ->label(__('Commander')) ->formatStateUsing(function ($state) { - return $state->last_name.', '.$state->first_name; + return $state->last_name.' '.$state->first_name; }) ->label(__('Commander')) ->searchable() @@ -139,6 +140,7 @@ public static function table(Table $table): Table ->multiple() ->searchable(), ]) + ->closeModalByClickingAway(false) ->action(function (array $data, Team $record): void { collect($data['members'])->map(fn ($soldier_id) => Soldier::where('id', $soldier_id) ->update(['team_id' => $record->id])); @@ -169,17 +171,17 @@ public static function checkCommander($teams, $departments, $data) ->persistent() ->body(__('The commander you selected is already registered as a commander. His selection will leave his soldiers without a commander. Are you sure?')) ->actions([ - \Filament\Notifications\Actions\Action::make(__('View ').($teams->isNotEmpty() ? __('Team') : __('Department'))) + NotificationsService\Action::make(__('View ').($teams->isNotEmpty() ? __('Team') : __('Department'))) ->button() ->url( fn () => $teams->isNotEmpty() ? route('filament.app.resources.teams.index', ['commander_id' => $data['commander_id']]) : route('filament.app.resources.departments.index', ['commander_id' => $data['commander_id']]) ), - \Filament\Notifications\Actions\Action::make(__('Confirm')) + NotificationsService\Action::make(__('Confirm')) ->button() ->dispatch('confirmCreate', data: ['teams' => $teams, 'departments' => $departments]), - \Filament\Notifications\Actions\Action::make(__('Cancel')) + NotificationsService\Action::make(__('Cancel')) ->button() ->close(), ]) diff --git a/app/Resources/TeamResource/Pages/CreateTeam.php b/app/Resources/TeamResource/Pages/CreateTeam.php index 3372c06..02d3912 100644 --- a/app/Resources/TeamResource/Pages/CreateTeam.php +++ b/app/Resources/TeamResource/Pages/CreateTeam.php @@ -77,17 +77,10 @@ protected function getRedirectUrl(): string protected function afterCreate(): void { - $this->attachCommander(); $this->attachSoldiers(); $this->assignRoles(); } - protected function attachCommander(): void - { - Soldier::where('id', $this->data['commander_id']) - ->update(['team_id' => Team::latest()->pluck('id')->first()]); - } - protected function attachSoldiers(): void { collect($this->data['members'])->map(fn ($soldier_id) => Soldier::where('id', $soldier_id) diff --git a/app/Resources/TeamResource/Pages/EditTeam.php b/app/Resources/TeamResource/Pages/EditTeam.php index 3c9e252..003c410 100644 --- a/app/Resources/TeamResource/Pages/EditTeam.php +++ b/app/Resources/TeamResource/Pages/EditTeam.php @@ -3,7 +3,6 @@ namespace App\Resources\TeamResource\Pages; use App\Models\Department; -use App\Models\Soldier; use App\Models\Team; use App\Models\User; use App\Resources\TeamResource; @@ -63,16 +62,9 @@ protected function getRedirectUrl(): string protected function afterSave(): void { - $this->attachCommander(); $this->assignRoles(); } - protected function attachCommander(): void - { - Soldier::where('id', $this->data['commander_id']) - ->update(['team_id' => Team::latest()->pluck('id')->first()]); - } - protected function assignRoles() { $user = User::where('userable_id', $this->record->commander_id)->first(); diff --git a/app/Services/Algorithm.php b/app/Services/Algorithm.php index d45a650..8ce59c5 100644 --- a/app/Services/Algorithm.php +++ b/app/Services/Algorithm.php @@ -27,7 +27,7 @@ protected function getShiftWithTasks() ->filter(function (Shift $shift) { $range = new Range($shift->start_date, $shift->end_date); - return $range->isSameMonth(new Range($this->date->copy()->startOfMonth(), $this->date->copy()->endOfMonth())); + return $range->isSameMonth(new Range(max($this->date->copy()->startOfMonth(), Carbon::tomorrow()), $this->date->copy()->endOfMonth())); }) ->map(fn (Shift $shift): ShiftService => $this->buildShift($shift)); } diff --git a/app/Services/Holidays.php b/app/Services/Holidays.php new file mode 100644 index 0000000..565b7a0 --- /dev/null +++ b/app/Services/Holidays.php @@ -0,0 +1,35 @@ +isHoliday = $this->jewishDate($month, $day, $year); + } + + public function jewishDate($month, $day, $year): bool + { + $dayAndMonth = implode(' ', array_slice( + explode(' ', iconv('WINDOWS-1255', 'UTF-8', jdtojewish( + gregoriantojd($month, $day, $year), true) + )), 0, 2 + )); + + $this->setHolidayName($dayAndMonth); + + return HolidayEnum::tryFrom($dayAndMonth) !== null; + } + + public function setHolidayName(string $date): void + { + $this->holidayName = HolidayEnum::tryFrom($date)?->getLabel(); + } +} diff --git a/app/Services/ManualAssignment.php b/app/Services/ManualAssignment.php index 67ecae7..19a12a9 100644 --- a/app/Services/ManualAssignment.php +++ b/app/Services/ManualAssignment.php @@ -30,14 +30,14 @@ public function __construct(Shift $shift, string $soldierType) $this->soldiers = []; } - public function getSoldiers($qualification = null, $departmentName = null) + public function getSoldiers($departmentName = null) { - $this->initSoldiersData($qualification, $departmentName); + $this->initSoldiersData($departmentName); return $this->getAvailableSoldiers(); } - protected function initSoldiersData($qualification, $departmentName) + protected function initSoldiersData($departmentName) { $this->soldiers = Cache::remember('users', 30 * 60, function () { return User::all(); @@ -48,7 +48,7 @@ protected function initSoldiersData($qualification, $departmentName) 'department' => $this->filterDepartment($departmentName), 'all' => $this->filterAll() }; - $this->getSoldiersDetails($qualification); + $this->getSoldiersDetails(); } protected function filterReserves() @@ -97,17 +97,16 @@ protected function filterAll() ->filter(function ($user) { $soldier = $this->getSoldierBy($user->userable_id); - return !$soldier->is_reservist && $soldier->id != auth()->user()->userable_id; + return ! $soldier->is_reservist && $soldier->id != auth()->user()->userable_id; }); } - protected function getSoldiersDetails($qualification) + protected function getSoldiersDetails() { $this->soldiers = $this->soldiers ->map( - function (User $user) use ($qualification) { + function (User $user) { $soldier = $this->getSoldierBy($user->userable_id); - $soldier->qualifications = $this->mapQualifications($soldier->qualifications, $qualification); $constraints = $this->getConstraints($soldier); $soldiersShifts = $this->getSoldiersShifts($soldier); @@ -134,10 +133,9 @@ protected function getSoldierBy($userable_id) return Soldier::where('id', $userable_id)->first(); } - public function amIAvailable($qualification = null): bool + public function amIAvailable(): bool { $me = Soldier::find(auth()->user()->userable_id); - $me->qualifications = $this->mapQualifications($me->qualifications, $qualification); $constraints = $this->getConstraints($me); $myShifts = $this->getSoldiersShifts($me); @@ -163,11 +161,6 @@ public function amIAvailable($qualification = null): bool && $soldier->isAvailableBySpaces($this->shift->getShiftSpaces($soldier->shifts)); } - protected function mapQualifications($qualifications, $qualification) - { - return $qualification ? collect($qualifications)->push($qualification) : $qualifications; - } - protected function getConstraints(Soldier $soldier) { return $this->soldierType != 'reserves' ? $this->getConstraintBy($soldier->id) : collect([]); @@ -184,7 +177,7 @@ function (Shift $shift): bool { return $range->isSameMonth(new Range($this->shift->range->start->copy()->startOfMonth(), $this->shift->range->end->copy()->endOfMonth())); } ) - ->map(fn(Shift $shift): ShiftService => $this->buildShift($shift)); + ->map(fn (Shift $shift): ShiftService => $this->buildShift($shift)); } protected function buildShift(Shift $shift): ShiftService @@ -205,8 +198,8 @@ protected function addShiftsSpaces($shifts) $allSpaces = collect([]); collect($shifts)->map(function (ShiftService $shift) use ($shifts, &$allSpaces) { $spaces = $shift->isWeekend || $shift->isNight ? $shift->getShiftSpaces($shifts) : null; - if (!empty($spaces)) { - collect($spaces)->map(fn(Range $space) => $allSpaces->push(new ShiftService(0, 'space', $space->start, $space->end, 0, false, false))); + if (! empty($spaces)) { + collect($spaces)->map(fn (Range $space) => $allSpaces->push(new ShiftService(0, 'space', $space->start, $space->end, 0, false, false))); } }); @@ -223,7 +216,7 @@ protected function getConstraintBy(int $soldierId) return $range->isSameMonth(new Range($this->shift->range->start->copy()->startOfMonth(), $this->shift->range->end->copy()->endOfMonth())); }) ->map( - fn(Constraint $constraint): ConstraintService => new ConstraintService( + fn (Constraint $constraint): ConstraintService => new ConstraintService( $constraint->start_date, $constraint->end_date, ConstraintType::getPriority()[$constraint->constraint_type] == 1 ? Priority::HIGH : Priority::LOW @@ -259,7 +252,7 @@ protected function capacityHold($shifts) protected function getAvailableSoldiers() { $availableSoldiers = $this->soldiers->filter( - fn(SoldierService $soldier) => $soldier->isQualified($this->shift->taskType) + fn (SoldierService $soldier) => $soldier->isQualified($this->shift->taskType) && $soldier->isAvailableByMaxes($this->shift) && $soldier->isAvailableByConstraints($this->shift->range) != Availability::NO && $soldier->isAvailableByShifts($this->shift->range) diff --git a/app/Services/RecurringEvents.php b/app/Services/RecurringEvents.php index 0064e8d..26a4cbd 100644 --- a/app/Services/RecurringEvents.php +++ b/app/Services/RecurringEvents.php @@ -6,6 +6,7 @@ use App\Models\Task; use Carbon\Carbon; use Carbon\CarbonPeriod; +use Filament\Notifications\Notification; class RecurringEvents { @@ -123,8 +124,8 @@ protected function convertNumbersToDatesInMonth($dayNumbers) protected function createPeriod() { return $this->task->recurring['type'] == 'Daily range' ? - CarbonPeriod::between($this->task['recurring']['start_date'], $this->task['recurring']['end_date']) : - CarbonPeriod::between($this->month->copy()->startOfMonth(), $this->month->copy()->endOfMonth()); + CarbonPeriod::between(max($this->task['recurring']['start_date'], Carbon::tomorrow()), $this->task['recurring']['end_date']) : + CarbonPeriod::between(max($this->month->copy()->startOfMonth(), Carbon::tomorrow()), $this->month->copy()->endOfMonth()); } protected function createShifts(array $dates) @@ -139,9 +140,28 @@ protected function createShifts(array $dates) && checkdate($date->month, $date->day, $date->year) ) { $shift = new Shift; + $holiday = new Holidays($date->month, $date->day, $date->year); $shift->start_date = $date; $shift->end_date = $this->calculateEndDateTime($date); $shift->task_id = $this->task['id']; + if ($holiday->isHoliday) { + $shift->is_weekend = 1; + $shiftType = Task::where('id', $shift->task_id)->pluck('type')->first(); + $task = Task::where([['type', $shiftType], ['is_weekend', 1]])->pluck('parallel_weight')->first(); + $task ? + $shift->parallel_weight = $task + : Notification::make() + ->title(__('Update parallel weight of holiday shift')) + ->persistent() + ->body( + __('Holiday shift notification', [ + 'user' => auth()->user()->displayName, + 'task' => $shiftType, + 'start_date' => $shift->start_date, + ]) + ) + ->sendToDatabase(auth()->user(), true); + } $shift->save(); } }); diff --git a/app/Services/ShiftAssignmentNotification.php b/app/Services/ShiftAssignmentNotification.php new file mode 100644 index 0000000..27ef331 --- /dev/null +++ b/app/Services/ShiftAssignmentNotification.php @@ -0,0 +1,36 @@ +whereBetween('start_date', [Carbon::now()->startOfMonth(), Carbon::now()->endOfMonth()]) + ->get() + ->map(fn ($shift) => $shift->soldier_id) + ->unique() + ->values() + ->toArray(); + + $users = User::whereIn('userable_id', $users)->get(); + + $users->map(function ($user) { + Notification::make() + ->title(__('View assigned shifts')) + ->warning() + ->body(__('Go to view the schedule of shifts assigned to you for this month.')) + ->actions([Action::make(__('View your shift schedule')) + ->button() + ->url(route('filament.app.resources.my-shifts.index')), ]) + ->sendToDatabase($user, true); + }); + } +} diff --git a/bootstrap/app.php b/bootstrap/app.php index 2cf511c..aa1c4bd 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -2,6 +2,7 @@ use App\Services\Algorithm; use App\Services\RecurringEvents; +use App\Services\ShiftAssignmentNotification; use Illuminate\Console\Scheduling\Schedule; use Illuminate\Foundation\Application; use Illuminate\Foundation\Configuration\Exceptions; @@ -15,6 +16,7 @@ ->withSchedule(function (Schedule $schedule) { $schedule->call(fn () => app(RecurringEvents::class)->recurringTask())->monthlyOn(20, '08:00'); $schedule->call(fn () => app(Algorithm::class)->run())->monthlyOn(20, '10:00'); + $schedule->call(fn () => app(ShiftAssignmentNotification::class)->sendNotification())->monthlyOn(1, '08:00'); }) ->withMiddleware(function (Middleware $middleware) {}) ->withExceptions(function (Exceptions $exceptions) {})->create(); diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index bdee9ba..de81f64 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -25,8 +25,8 @@ public function run(): void // Soldiers $user = User::factory()->create([ - 'first_name' => 'newspace', - 'last_name' => 'newspace', + 'first_name' => 'name', + 'last_name' => 'family', 'password' => '1234567', 'userable_id' => Soldier::factory()->create([ 'qualifications' => [], @@ -39,760 +39,760 @@ public function run(): void ]); $user->assignRole('manager'); - // for ($i = 0; $i < 15; $i++) { - // $user = User::factory()->create([ - // 'first_name' => 'mefaked', - // 'userable_id' => Soldier::factory()->create([ - // 'qualifications' => ['pikud'], - // 'capacity' => 5.5, - // 'max_weekends' => 5.5, - // 'max_shifts' => 10, - // 'max_nights' => 5.5, - // 'is_reservist' => false, - // ])->id, - // ]); - // $this->createConstraints($user->id); - // } - - // for ($i = 0; $i < 40; $i++) { - // $user = User::factory()->create([ - // 'first_name' => 'chayal pashut', - // 'userable_id' => Soldier::factory()->create([ - // 'qualifications' => ['hatasa', 'tazpit', 'shmira'], - // 'capacity' => 6, - // 'max_weekends' => 6, - // 'max_shifts' => 7, - // 'max_nights' => 6, - // 'is_reservist' => false, - // ])->id, - // ]); - // $this->createConstraints($user->id); - // } - - // for ($i = 0; $i < 30; $i++) { - // $user = User::factory()->create([ - // 'first_name' => 'chayal beinony', - // 'userable_id' => Soldier::factory()->create([ - // 'qualifications' => ['hatasa', 'tazpit', 'shmira', 'tichnun', 'pianuach'], - // 'capacity' => 5.5, - // 'max_weekends' => 5.5, - // 'max_shifts' => 6, - // 'max_nights' => 5.5, - // 'is_reservist' => false, - // ])->id, - // ]); - // $this->createConstraints($user->id); - // } - - // for ($i = 0; $i < 25; $i++) { - // $user = User::factory()->create([ - // 'first_name' => 'chayal vatik', - // 'userable_id' => Soldier::factory()->create([ - // 'qualifications' => ['hatasa', 'bakara', 'tichnun', 'pianuach'], - // 'capacity' => 5, - // 'max_weekends' => 5, - // 'max_shifts' => 5, - // 'max_nights' => 5, - // 'is_reservist' => false, - // ])->id, - // ]); - // $this->createConstraints($user->id); - // } - - // for ($i = 0; $i < 10; $i++) { - // $user = User::factory()->create([ - // 'first_name' => 'menahalan', - // 'userable_id' => Soldier::factory()->create([ - // 'qualifications' => ['minhal', 'bdikat ziud'], - // 'capacity' => 0, - // 'max_weekends' => 0, - // 'max_shifts' => 4, - // 'max_nights' => 0, - // 'is_reservist' => false, - // ])->id, - // ]); - // $this->createConstraints($user->id); - // } - - // for ($i = 0; $i < 8; $i++) { - // $user = User::factory()->create([ - // 'first_name' => 'navat', - // 'userable_id' => Soldier::factory()->create([ - // 'qualifications' => ['nivut'], - // 'capacity' => 10, - // 'max_weekends' => 10, - // 'max_shifts' => 12, - // 'max_nights' => 10, - // 'is_reservist' => false, - // ])->id, - // ]); - // $this->createConstraints($user->id); - // } - - // // Tasks - // // tichnun - // Task::factory()->create([ - // 'name' => 'tichnun א-ה בוקר', - // 'start_hour' => '10:00:00', - // 'duration' => 4, - // 'parallel_weight' => 0, - // 'type' => 'tichnun', - // 'is_weekend' => false, - // 'is_night' => false, - // 'color' => '#b54b4b', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'tichnun א-ה לילה', - // 'start_hour' => '02:00:00', - // 'duration' => 4, - // 'parallel_weight' => 1, - // 'type' => 'tichnun', - // 'is_weekend' => false, - // 'is_night' => true, - // 'color' => '#b54b4b', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'tichnun 1 סופ"ש', - // 'start_hour' => '10:30:00', - // 'duration' => 25, - // 'parallel_weight' => 2.5, - // 'type' => 'tichnun', - // 'is_weekend' => true, - // 'is_night' => false, - // 'color' => '#b54b4b', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::FRIDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'tichnun 2 סופ"ש', - // 'start_hour' => '11:10:00', - // 'duration' => 25, - // 'parallel_weight' => 2.5, - // 'type' => 'tichnun', - // 'is_weekend' => true, - // 'is_night' => false, - // 'color' => '#b54b4b', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::FRIDAY], - // ]), - // ]); - // // bakara - // Task::factory()->create([ - // 'name' => 'bakara ארבע פעמים בשבוע בוקר', - // 'start_hour' => '10:00:00', - // 'duration' => 4, - // 'parallel_weight' => 0, - // 'type' => 'bakara', - // 'is_weekend' => false, - // 'is_night' => false, - // 'color' => '#4bb5ac', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'bakara שלוש פעמים בשבוע לילה', - // 'start_hour' => '03:20:00', - // 'duration' => 4, - // 'parallel_weight' => 1, - // 'type' => 'bakara', - // 'is_weekend' => false, - // 'is_night' => true, - // 'color' => '#4bb5ac', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'bakara סופ"ש', - // 'start_hour' => '10:05:00', - // 'duration' => 26, - // 'parallel_weight' => 2.5, - // 'type' => 'bakara', - // 'is_weekend' => true, - // 'is_night' => false, - // 'color' => '#4bb5ac', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::FRIDAY], - // ]), - // ]); - // // pikud - // Task::factory()->create([ - // 'name' => 'pikud 1 א-ה בוקר', - // 'start_hour' => '10:00:00', - // 'duration' => 4, - // 'parallel_weight' => 0, - // 'type' => 'pikud', - // 'is_weekend' => false, - // 'is_night' => false, - // 'color' => '#4bb569', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'pikud 2 א-ה בוקר', - // 'start_hour' => '10:00:00', - // 'duration' => 4, - // 'parallel_weight' => 0, - // 'type' => 'pikud', - // 'is_weekend' => false, - // 'is_night' => false, - // 'color' => '#4bb569', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'pikud 1 סופש', - // 'start_hour' => '10:00:00', - // 'duration' => 25, - // 'parallel_weight' => 2.5, - // 'type' => 'pikud', - // 'is_weekend' => true, - // 'is_night' => false, - // 'color' => '#4bb569', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::FRIDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'pikud 2 סופש', - // 'start_hour' => '10:00:00', - // 'duration' => 25, - // 'parallel_weight' => 2.5, - // 'type' => 'pikud', - // 'is_weekend' => true, - // 'is_night' => false, - // 'color' => '#4bb569', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::FRIDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'pikud לילה א-ה', - // 'start_hour' => '03:00:00', - // 'duration' => 4, - // 'parallel_weight' => 1, - // 'type' => 'pikud', - // 'is_weekend' => false, - // 'is_night' => true, - // 'color' => '#4bb569', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // // minhal - // Task::factory()->create([ - // 'name' => 'minhal שלוש פעמים בשבוע בוקר', - // 'start_hour' => '13:00:00', - // 'duration' => 2, - // 'parallel_weight' => 0, - // 'type' => 'minhal', - // 'is_weekend' => false, - // 'is_night' => false, - // 'color' => '#c5d649', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::TUESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // // hatasa - // Task::factory()->create([ - // 'name' => 'hatasa א-ה בוקר', - // 'start_hour' => '09:00:00', - // 'duration' => 6, - // 'parallel_weight' => 0, - // 'type' => 'hatasa', - // 'is_weekend' => false, - // 'is_night' => false, - // 'color' => '#d649b5', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'hatasa א-ה בשבוע לילה', - // 'start_hour' => '02:00:00', - // 'duration' => 6, - // 'parallel_weight' => 1, - // 'type' => 'hatasa', - // 'is_weekend' => false, - // 'is_night' => true, - // 'color' => '#d649b5', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'hatasa 1 סופש', - // 'start_hour' => '06:00:00', - // 'duration' => 26, - // 'parallel_weight' => 2.5, - // 'type' => 'hatasa', - // 'is_weekend' => true, - // 'is_night' => false, - // 'color' => '#d649b5', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::FRIDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'hatasa 2 סופש', - // 'start_hour' => '06:00:00', - // 'duration' => 26, - // 'parallel_weight' => 2.5, - // 'type' => 'hatasa', - // 'is_weekend' => true, - // 'is_night' => false, - // 'color' => '#d649b5', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::FRIDAY], - // ]), - // ]); - // // shmira - // Task::factory()->create([ - // 'name' => 'shmira א-ה בוקר', - // 'start_hour' => '07:00:00', - // 'duration' => 12, - // 'parallel_weight' => 0, - // 'type' => 'shmira', - // 'is_weekend' => false, - // 'is_night' => false, - // 'color' => '#ee8559', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'shmira א-ה לילה', - // 'start_hour' => '01:00:00', - // 'duration' => 7, - // 'parallel_weight' => 1, - // 'type' => 'shmira', - // 'is_weekend' => false, - // 'is_night' => true, - // 'color' => '#ee8559', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'shmira 1 סופש', - // 'start_hour' => '06:00:00', - // 'duration' => 26, - // 'parallel_weight' => 2.5, - // 'type' => 'shmira', - // 'is_weekend' => true, - // 'is_night' => false, - // 'color' => '#ee8559', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::FRIDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'shmira סופש 2', - // 'start_hour' => '06:00:00', - // 'duration' => 26, - // 'parallel_weight' => 2.5, - // 'type' => 'shmira', - // 'is_weekend' => true, - // 'is_night' => false, - // 'color' => '#ee8559', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::FRIDAY], - // ]), - // ]); - // // pianuach - // Task::factory()->create([ - // 'name' => 'pianuach א-ה בוקר', - // 'start_hour' => '07:00:00', - // 'duration' => 7, - // 'parallel_weight' => 0, - // 'type' => 'pianuach', - // 'is_weekend' => false, - // 'is_night' => false, - // 'color' => '#3574fb', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'pianuach א-ה לילה', - // 'start_hour' => '01:00:00', - // 'duration' => 5, - // 'parallel_weight' => 1, - // 'type' => 'pianuach', - // 'is_weekend' => false, - // 'is_night' => true, - // 'color' => '#3574fb', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'pianuach 1 סופש', - // 'start_hour' => '07:00:00', - // 'duration' => 27, - // 'parallel_weight' => 2.5, - // 'type' => 'pianuach', - // 'is_weekend' => true, - // 'is_night' => false, - // 'color' => '#3574fb', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::FRIDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'pianuach 2 סופש', - // 'start_hour' => '07:00:00', - // 'duration' => 27, - // 'parallel_weight' => 2.5, - // 'type' => 'pianuach', - // 'is_weekend' => true, - // 'is_night' => false, - // 'color' => '#3574fb', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::FRIDAY], - // ]), - // ]); - // // nivut - // Task::factory()->create([ - // 'name' => 'nivut א-ה בוקר', - // 'start_hour' => '11:00:00', - // 'duration' => 2, - // 'parallel_weight' => 0, - // 'type' => 'nivut', - // 'is_weekend' => false, - // 'is_night' => false, - // 'color' => '#ed8d8d8b', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'nivut א-ה לילה', - // 'start_hour' => '01:00:00', - // 'duration' => 2.5, - // 'parallel_weight' => 1, - // 'type' => 'nivut', - // 'is_weekend' => false, - // 'is_night' => true, - // 'color' => '#ed8d8d8b', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'nivut 1 סופש', - // 'start_hour' => '11:00:00', - // 'duration' => 28, - // 'parallel_weight' => 2.5, - // 'type' => 'nivut', - // 'is_weekend' => true, - // 'is_night' => false, - // 'color' => '#ed8d8d8b', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::FRIDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'nivut 2 סופש', - // 'start_hour' => '11:00:00', - // 'duration' => 28, - // 'parallel_weight' => 2.5, - // 'type' => 'nivut', - // 'is_weekend' => true, - // 'is_night' => false, - // 'color' => '#ed8d8d8b', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::FRIDAY], - // ]), - // ]); - // // tazpit - // Task::factory()->create([ - // 'name' => 'tazpit א-ה בוקר 1', - // 'start_hour' => '08:00:00', - // 'duration' => 10, - // 'parallel_weight' => 0, - // 'type' => 'tazpit', - // 'is_weekend' => false, - // 'is_night' => false, - // 'color' => '#77ff23', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'tazpit א-ה בוקר 2', - // 'start_hour' => '08:00:00', - // 'duration' => 10, - // 'parallel_weight' => 0, - // 'type' => 'tazpit', - // 'is_weekend' => false, - // 'is_night' => false, - // 'color' => '#77ff23', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'tazpit א-ה לילה', - // 'start_hour' => '01:30:00', - // 'duration' => 6, - // 'parallel_weight' => 1, - // 'type' => 'tazpit', - // 'is_weekend' => false, - // 'is_night' => true, - // 'color' => '#77ff23', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'tazpit 1 סופש', - // 'start_hour' => '11:45:00', - // 'duration' => 25, - // 'parallel_weight' => 2.5, - // 'type' => 'tazpit', - // 'is_weekend' => true, - // 'is_night' => false, - // 'color' => '#77ff23', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::FRIDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'tazpit 2 סופש', - // 'start_hour' => '11:00:00', - // 'duration' => 25, - // 'parallel_weight' => 2.5, - // 'type' => 'tazpit', - // 'is_weekend' => true, - // 'is_night' => false, - // 'color' => '#77ff23', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::FRIDAY], - // ]), - // ]); - // // bdikat ziud - // Task::factory()->create([ - // 'name' => 'bdikat ziud פעם בשבוע בוקר', - // 'start_hour' => '11:15:00', - // 'duration' => 3.5, - // 'parallel_weight' => 0, - // 'type' => 'bdikat ziud', - // 'is_weekend' => false, - // 'is_night' => false, - // 'color' => '#a7b2c3', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY], - // ]), - // ]); - - // $recurringEvents = new RecurringEvents; - // $recurringEvents->recurringTask(); - // } - - // protected function createConstraints(int $userId) - // { - // for ($i = 0; $i < count(ConstraintType::cases()); $i++) { - // $times = ConstraintType::getLimit()[ConstraintType::cases()[$i]->value] > 0 - // ? random_int(0, ConstraintType::getLimit()[ConstraintType::cases()[$i]->value]) : - // random_int(0, random_int(0, 5)); - // for ($j = 0; $j < $times; $j++) { - // $startDate = call_user_func([$this, ConstraintType::cases()[$i]->name]); - // Constraint::factory()->create([ - // 'soldier_id' => User::find($userId)->userable_id, - // 'constraint_type' => ConstraintType::cases()[$i], - // 'start_date' => $startDate, - // 'end_date' => $startDate->copy()->addHours(random_int(1, 5)), - // ]); - // } - // } - // } - - // protected function getDatesOfMonth($month = null) - // { - // $month ??= now()->addMonth(); - - // return CarbonPeriod::between($month->startOfMonth(), $month->copy()->endOfMonth()); - // } - - // protected function getThursday() - // { - // $period = $this->getDatesOfMonth(); - - // return collect($period) - // ->filter( - // fn ($date) => Carbon::parse($date)->isThursday() - // )->all(); - // } - - // protected function getWeekends() - // { - // $period = $this->getDatesOfMonth(); - - // return collect($period) - // ->filter( - // fn ($date) => Carbon::parse($date)->isFriday() || Carbon::parse($date)->isSaturday() - // ) - // ->all(); - // } - - // protected function getTime() - // { - // return Carbon::now()->subSeconds(rand(0, 30 * 24 * 60 * 60)); - // } - - // protected function getNightHour() - // { - // $time = $this->getTime(); - // if ($time->hour < 20 && $time->hour >= 8) { - // return $time->addHours(20 - $time->hour); - // } - - // return $time; - // } - - // protected function NOT_WEEKEND() - // { - // $time = $this->getTime(); - - // return Carbon::parse(collect($this->getWeekends())->random()) - // ->setTime( - // $time->hour, - // $time->minute, - // $time->second - // ); - // } - - // protected function LOW_PRIORITY_NOT_WEEKEND() - // { - // $time = $this->getTime(); - - // return Carbon::parse(collect($this->getWeekends())->random()) - // ->setTime( - // $time->hour, - // $time->minute, - // $time->second - // ); - // } - - // protected function NOT_TASK() - // { - // $time = $this->getTime(); - - // return Carbon::parse(collect($this->getDatesOfMonth())->random()) - // ->setTime( - // $time->hour, - // $time->minute, - // $time->second - // ); - // } - - // protected function LOW_PRIORITY_NOT_TASK() - // { - // $time = $this->getTime(); - - // return Carbon::parse(collect($this->getDatesOfMonth())->random()) - // ->setTime( - // $time->hour, - // $time->minute, - // $time->second - // ); - // } - - // protected function NOT_EVENING() - // { - // $date = collect($this->getDatesOfMonth())->random(); - // $nightTime = $this->getNightHour(); - - // return $date->copy()->setTime($nightTime->hour, $nightTime->minute, $nightTime->second); - // } - - // protected function NOT_THURSDAY_EVENING() - // { - // $date = collect($this->getThursday())->random(); - // $nightTime = $this->getNightHour(); - - // return $date->copy()->setTime($nightTime->hour, $nightTime->minute, $nightTime->second); - // } - - // protected function VACATION() - // { - // $time = $this->getTime(); - - // return Carbon::parse(collect($this->getDatesOfMonth())->random()) - // ->setTime( - // $time->hour, - // $time->minute, - // $time->second - // ); - // } - - // protected function MEDICAL() - // { - // $time = $this->getTime(); - - // return Carbon::parse(collect($this->getDatesOfMonth())->random()) - // ->setTime( - // $time->hour, - // $time->minute, - // $time->second - // ); - // } - - // protected function SCHOOL() - // { - // $time = $this->getTime(); - - // return Carbon::parse(collect($this->getDatesOfMonth())->random()) - // ->setTime( - // $time->hour, - // $time->minute, - // $time->second - // ); + for ($i = 0; $i < 15; $i++) { + $user = User::factory()->create([ + 'first_name' => 'mefaked', + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['pikud'], + 'capacity' => 5.5, + 'max_weekends' => 5.5, + 'max_shifts' => 10, + 'max_nights' => 5.5, + 'is_reservist' => false, + ])->id, + ]); + $this->createConstraints($user->id); + } + + for ($i = 0; $i < 40; $i++) { + $user = User::factory()->create([ + 'first_name' => 'chayal pashut', + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['hatasa', 'tazpit', 'shmira'], + 'capacity' => 6, + 'max_weekends' => 6, + 'max_shifts' => 7, + 'max_nights' => 6, + 'is_reservist' => false, + ])->id, + ]); + $this->createConstraints($user->id); + } + + for ($i = 0; $i < 30; $i++) { + $user = User::factory()->create([ + 'first_name' => 'chayal beinony', + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['hatasa', 'tazpit', 'shmira', 'tichnun', 'pianuach'], + 'capacity' => 5.5, + 'max_weekends' => 5.5, + 'max_shifts' => 6, + 'max_nights' => 5.5, + 'is_reservist' => false, + ])->id, + ]); + $this->createConstraints($user->id); + } + + for ($i = 0; $i < 25; $i++) { + $user = User::factory()->create([ + 'first_name' => 'chayal vatik', + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['hatasa', 'bakara', 'tichnun', 'pianuach'], + 'capacity' => 5, + 'max_weekends' => 5, + 'max_shifts' => 5, + 'max_nights' => 5, + 'is_reservist' => false, + ])->id, + ]); + $this->createConstraints($user->id); + } + + for ($i = 0; $i < 10; $i++) { + $user = User::factory()->create([ + 'first_name' => 'menahalan', + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['minhal', 'bdikat ziud'], + 'capacity' => 0, + 'max_weekends' => 0, + 'max_shifts' => 4, + 'max_nights' => 0, + 'is_reservist' => false, + ])->id, + ]); + $this->createConstraints($user->id); + } + + for ($i = 0; $i < 8; $i++) { + $user = User::factory()->create([ + 'first_name' => 'navat', + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['nivut'], + 'capacity' => 10, + 'max_weekends' => 10, + 'max_shifts' => 12, + 'max_nights' => 10, + 'is_reservist' => false, + ])->id, + ]); + $this->createConstraints($user->id); + } + + // Tasks + // tichnun + Task::factory()->create([ + 'name' => 'tichnun א-ה בוקר', + 'start_hour' => '10:00:00', + 'duration' => 4, + 'parallel_weight' => 0, + 'type' => 'tichnun', + 'is_weekend' => false, + 'is_night' => false, + 'color' => '#b54b4b', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'tichnun א-ה לילה', + 'start_hour' => '02:00:00', + 'duration' => 4, + 'parallel_weight' => 1, + 'type' => 'tichnun', + 'is_weekend' => false, + 'is_night' => true, + 'color' => '#b54b4b', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'tichnun 1 סופ"ש', + 'start_hour' => '10:30:00', + 'duration' => 25, + 'parallel_weight' => 2.5, + 'type' => 'tichnun', + 'is_weekend' => true, + 'is_night' => false, + 'color' => '#b54b4b', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'tichnun 2 סופ"ש', + 'start_hour' => '11:10:00', + 'duration' => 25, + 'parallel_weight' => 2.5, + 'type' => 'tichnun', + 'is_weekend' => true, + 'is_night' => false, + 'color' => '#b54b4b', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + // bakara + Task::factory()->create([ + 'name' => 'bakara ארבע פעמים בשבוע בוקר', + 'start_hour' => '10:00:00', + 'duration' => 4, + 'parallel_weight' => 0, + 'type' => 'bakara', + 'is_weekend' => false, + 'is_night' => false, + 'color' => '#4bb5ac', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'bakara שלוש פעמים בשבוע לילה', + 'start_hour' => '03:20:00', + 'duration' => 4, + 'parallel_weight' => 1, + 'type' => 'bakara', + 'is_weekend' => false, + 'is_night' => true, + 'color' => '#4bb5ac', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'bakara סופ"ש', + 'start_hour' => '10:05:00', + 'duration' => 26, + 'parallel_weight' => 2.5, + 'type' => 'bakara', + 'is_weekend' => true, + 'is_night' => false, + 'color' => '#4bb5ac', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + // pikud + Task::factory()->create([ + 'name' => 'pikud 1 א-ה בוקר', + 'start_hour' => '10:00:00', + 'duration' => 4, + 'parallel_weight' => 0, + 'type' => 'pikud', + 'is_weekend' => false, + 'is_night' => false, + 'color' => '#4bb569', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'pikud 2 א-ה בוקר', + 'start_hour' => '10:00:00', + 'duration' => 4, + 'parallel_weight' => 0, + 'type' => 'pikud', + 'is_weekend' => false, + 'is_night' => false, + 'color' => '#4bb569', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'pikud 1 סופש', + 'start_hour' => '10:00:00', + 'duration' => 25, + 'parallel_weight' => 2.5, + 'type' => 'pikud', + 'is_weekend' => true, + 'is_night' => false, + 'color' => '#4bb569', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'pikud 2 סופש', + 'start_hour' => '10:00:00', + 'duration' => 25, + 'parallel_weight' => 2.5, + 'type' => 'pikud', + 'is_weekend' => true, + 'is_night' => false, + 'color' => '#4bb569', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'pikud לילה א-ה', + 'start_hour' => '03:00:00', + 'duration' => 4, + 'parallel_weight' => 1, + 'type' => 'pikud', + 'is_weekend' => false, + 'is_night' => true, + 'color' => '#4bb569', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + // minhal + Task::factory()->create([ + 'name' => 'minhal שלוש פעמים בשבוע בוקר', + 'start_hour' => '13:00:00', + 'duration' => 2, + 'parallel_weight' => 0, + 'type' => 'minhal', + 'is_weekend' => false, + 'is_night' => false, + 'color' => '#c5d649', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::TUESDAY, DaysInWeek::THURSDAY], + ]), + ]); + // hatasa + Task::factory()->create([ + 'name' => 'hatasa א-ה בוקר', + 'start_hour' => '09:00:00', + 'duration' => 6, + 'parallel_weight' => 0, + 'type' => 'hatasa', + 'is_weekend' => false, + 'is_night' => false, + 'color' => '#d649b5', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'hatasa א-ה בשבוע לילה', + 'start_hour' => '02:00:00', + 'duration' => 6, + 'parallel_weight' => 1, + 'type' => 'hatasa', + 'is_weekend' => false, + 'is_night' => true, + 'color' => '#d649b5', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'hatasa 1 סופש', + 'start_hour' => '06:00:00', + 'duration' => 26, + 'parallel_weight' => 2.5, + 'type' => 'hatasa', + 'is_weekend' => true, + 'is_night' => false, + 'color' => '#d649b5', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'hatasa 2 סופש', + 'start_hour' => '06:00:00', + 'duration' => 26, + 'parallel_weight' => 2.5, + 'type' => 'hatasa', + 'is_weekend' => true, + 'is_night' => false, + 'color' => '#d649b5', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + // shmira + Task::factory()->create([ + 'name' => 'shmira א-ה בוקר', + 'start_hour' => '07:00:00', + 'duration' => 12, + 'parallel_weight' => 0, + 'type' => 'shmira', + 'is_weekend' => false, + 'is_night' => false, + 'color' => '#ee8559', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'shmira א-ה לילה', + 'start_hour' => '01:00:00', + 'duration' => 7, + 'parallel_weight' => 1, + 'type' => 'shmira', + 'is_weekend' => false, + 'is_night' => true, + 'color' => '#ee8559', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'shmira 1 סופש', + 'start_hour' => '06:00:00', + 'duration' => 26, + 'parallel_weight' => 2.5, + 'type' => 'shmira', + 'is_weekend' => true, + 'is_night' => false, + 'color' => '#ee8559', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'shmira סופש 2', + 'start_hour' => '06:00:00', + 'duration' => 26, + 'parallel_weight' => 2.5, + 'type' => 'shmira', + 'is_weekend' => true, + 'is_night' => false, + 'color' => '#ee8559', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + // pianuach + Task::factory()->create([ + 'name' => 'pianuach א-ה בוקר', + 'start_hour' => '07:00:00', + 'duration' => 7, + 'parallel_weight' => 0, + 'type' => 'pianuach', + 'is_weekend' => false, + 'is_night' => false, + 'color' => '#3574fb', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'pianuach א-ה לילה', + 'start_hour' => '01:00:00', + 'duration' => 5, + 'parallel_weight' => 1, + 'type' => 'pianuach', + 'is_weekend' => false, + 'is_night' => true, + 'color' => '#3574fb', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'pianuach 1 סופש', + 'start_hour' => '07:00:00', + 'duration' => 27, + 'parallel_weight' => 2.5, + 'type' => 'pianuach', + 'is_weekend' => true, + 'is_night' => false, + 'color' => '#3574fb', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'pianuach 2 סופש', + 'start_hour' => '07:00:00', + 'duration' => 27, + 'parallel_weight' => 2.5, + 'type' => 'pianuach', + 'is_weekend' => true, + 'is_night' => false, + 'color' => '#3574fb', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + // nivut + Task::factory()->create([ + 'name' => 'nivut א-ה בוקר', + 'start_hour' => '11:00:00', + 'duration' => 2, + 'parallel_weight' => 0, + 'type' => 'nivut', + 'is_weekend' => false, + 'is_night' => false, + 'color' => '#ed8d8d8b', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'nivut א-ה לילה', + 'start_hour' => '01:00:00', + 'duration' => 2.5, + 'parallel_weight' => 1, + 'type' => 'nivut', + 'is_weekend' => false, + 'is_night' => true, + 'color' => '#ed8d8d8b', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'nivut 1 סופש', + 'start_hour' => '11:00:00', + 'duration' => 28, + 'parallel_weight' => 2.5, + 'type' => 'nivut', + 'is_weekend' => true, + 'is_night' => false, + 'color' => '#ed8d8d8b', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'nivut 2 סופש', + 'start_hour' => '11:00:00', + 'duration' => 28, + 'parallel_weight' => 2.5, + 'type' => 'nivut', + 'is_weekend' => true, + 'is_night' => false, + 'color' => '#ed8d8d8b', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + // tazpit + Task::factory()->create([ + 'name' => 'tazpit א-ה בוקר 1', + 'start_hour' => '08:00:00', + 'duration' => 10, + 'parallel_weight' => 0, + 'type' => 'tazpit', + 'is_weekend' => false, + 'is_night' => false, + 'color' => '#77ff23', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'tazpit א-ה בוקר 2', + 'start_hour' => '08:00:00', + 'duration' => 10, + 'parallel_weight' => 0, + 'type' => 'tazpit', + 'is_weekend' => false, + 'is_night' => false, + 'color' => '#77ff23', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'tazpit א-ה לילה', + 'start_hour' => '01:30:00', + 'duration' => 6, + 'parallel_weight' => 1, + 'type' => 'tazpit', + 'is_weekend' => false, + 'is_night' => true, + 'color' => '#77ff23', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'tazpit 1 סופש', + 'start_hour' => '11:45:00', + 'duration' => 25, + 'parallel_weight' => 2.5, + 'type' => 'tazpit', + 'is_weekend' => true, + 'is_night' => false, + 'color' => '#77ff23', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'tazpit 2 סופש', + 'start_hour' => '11:00:00', + 'duration' => 25, + 'parallel_weight' => 2.5, + 'type' => 'tazpit', + 'is_weekend' => true, + 'is_night' => false, + 'color' => '#77ff23', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + // bdikat ziud + Task::factory()->create([ + 'name' => 'bdikat ziud פעם בשבוע בוקר', + 'start_hour' => '11:15:00', + 'duration' => 3.5, + 'parallel_weight' => 0, + 'type' => 'bdikat ziud', + 'is_weekend' => false, + 'is_night' => false, + 'color' => '#a7b2c3', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY], + ]), + ]); + + $recurringEvents = new RecurringEvents; + $recurringEvents->recurringTask(); + } + + protected function createConstraints(int $userId) + { + for ($i = 0; $i < count(ConstraintType::cases()); $i++) { + $times = ConstraintType::getLimit()[ConstraintType::cases()[$i]->value] > 0 + ? random_int(0, ConstraintType::getLimit()[ConstraintType::cases()[$i]->value]) : + random_int(0, random_int(0, 5)); + for ($j = 0; $j < $times; $j++) { + $startDate = call_user_func([$this, ConstraintType::cases()[$i]->name]); + Constraint::factory()->create([ + 'soldier_id' => User::find($userId)->userable_id, + 'constraint_type' => ConstraintType::cases()[$i], + 'start_date' => $startDate, + 'end_date' => $startDate->copy()->addHours(random_int(1, 5)), + ]); + } + } + } + + protected function getDatesOfMonth($month = null) + { + $month ??= now()->addMonth(); + + return CarbonPeriod::between($month->startOfMonth(), $month->copy()->endOfMonth()); + } + + protected function getThursday() + { + $period = $this->getDatesOfMonth(); + + return collect($period) + ->filter( + fn ($date) => Carbon::parse($date)->isThursday() + )->all(); + } + + protected function getWeekends() + { + $period = $this->getDatesOfMonth(); + + return collect($period) + ->filter( + fn ($date) => Carbon::parse($date)->isFriday() || Carbon::parse($date)->isSaturday() + ) + ->all(); + } + + protected function getTime() + { + return Carbon::now()->subSeconds(rand(0, 30 * 24 * 60 * 60)); + } + + protected function getNightHour() + { + $time = $this->getTime(); + if ($time->hour < 20 && $time->hour >= 8) { + return $time->addHours(20 - $time->hour); + } + + return $time; + } + + protected function NOT_WEEKEND() + { + $time = $this->getTime(); + + return Carbon::parse(collect($this->getWeekends())->random()) + ->setTime( + $time->hour, + $time->minute, + $time->second + ); + } + + protected function LOW_PRIORITY_NOT_WEEKEND() + { + $time = $this->getTime(); + + return Carbon::parse(collect($this->getWeekends())->random()) + ->setTime( + $time->hour, + $time->minute, + $time->second + ); + } + + protected function NOT_TASK() + { + $time = $this->getTime(); + + return Carbon::parse(collect($this->getDatesOfMonth())->random()) + ->setTime( + $time->hour, + $time->minute, + $time->second + ); + } + + protected function LOW_PRIORITY_NOT_TASK() + { + $time = $this->getTime(); + + return Carbon::parse(collect($this->getDatesOfMonth())->random()) + ->setTime( + $time->hour, + $time->minute, + $time->second + ); + } + + protected function NOT_EVENING() + { + $date = collect($this->getDatesOfMonth())->random(); + $nightTime = $this->getNightHour(); + + return $date->copy()->setTime($nightTime->hour, $nightTime->minute, $nightTime->second); + } + + protected function NOT_THURSDAY_EVENING() + { + $date = collect($this->getThursday())->random(); + $nightTime = $this->getNightHour(); + + return $date->copy()->setTime($nightTime->hour, $nightTime->minute, $nightTime->second); + } + + protected function VACATION() + { + $time = $this->getTime(); + + return Carbon::parse(collect($this->getDatesOfMonth())->random()) + ->setTime( + $time->hour, + $time->minute, + $time->second + ); + } + + protected function MEDICAL() + { + $time = $this->getTime(); + + return Carbon::parse(collect($this->getDatesOfMonth())->random()) + ->setTime( + $time->hour, + $time->minute, + $time->second + ); + } + + protected function SCHOOL() + { + $time = $this->getTime(); + + return Carbon::parse(collect($this->getDatesOfMonth())->random()) + ->setTime( + $time->hour, + $time->minute, + $time->second + ); } } diff --git a/lang/en.json b/lang/en.json new file mode 100644 index 0000000..0824bb6 --- /dev/null +++ b/lang/en.json @@ -0,0 +1,4 @@ +{ + "File name":":month month's shifts for :name", + "Holiday shift notification":"hello :user!
the shift weight must be updated :task which takes place on: :start_date " +} diff --git a/lang/he.json b/lang/he.json index 1b22e3a..a2a47f4 100644 --- a/lang/he.json +++ b/lang/he.json @@ -1,6 +1,6 @@ { "Add a team member":"הוסף חבר צוות", - "Add an identifier to the name so that it is not the same as another name. For example: ":"הוסף מזהה לשם כך שהוא לא יהיה זהה לשם אחר. לדוגמה: ", + "Add an identifier to the name so that it is not the same as another name.":"הוסף מזהה לשם כך שהוא לא יהיה זהה לשם אחר. ", "Add member": "הוסף חבר לצוות", "Add team": "הוסף צוות", "Additional settings":"הגדרות נוספות", @@ -14,7 +14,6 @@ "Cancel":"ביטול", "Capacity": "מקסימום נקודות", "Capacity hold": "הנקודות שבוצעו", - "Select qualifications":"בחר הסמכות", "Changing the shifts is your sole responsibility! (pay attention to conflicts between shifts).":"החלפת המשמרות באחריותך בלבד! (שים לב להתנגשויות בין משמרות).", "Color": "צבע", "Columns": "עמודות", @@ -39,6 +38,7 @@ "Departments": "מדורים", "Department name": "שם מדור", "Details":"פרטים", + "Download to excel":"הורדה לאקסל", "Duration": "משך", "Edit":"ערוך", "End date": "תאריך סיום", @@ -46,14 +46,17 @@ "Equal":"שווה", "Exemption": "פטור", "Female": "נקבה", + "File name":"משמרות של חודש :month עבור :name", "Filter": "סנן", "First name": "שם פרטי", "Friday":"שישי", "From": "מתאריך", "Full name": "שם מלא", "Gender": "מין", + "Go to view the schedule of shifts assigned to you for this month.":"עבור לצפות בלוח המשימות שהוקצו לך לחודש זה.", "Greater than":"יותר מ", "Greater than equal":"יותר או שווה", + "Holiday shift notification":"שלום :user!
יש לעדכן את המשקל של משמרת :task שמתקיימת בתאריך: :start_date ", "Is alert": "כונן", "Is between": "בין", "Is equal": "שווה", @@ -97,12 +100,14 @@ "Next reserve dates": "ימי מילואים לחודש הבא", "No":"לא", "No qualifications": "אין הסמכות", + "No suitable soldiers":"אין חיילים מתאימים", "Not evening":"ערב", "Not equal":"לא שווה", "Not task":"משימה", "Not Thursday evening":"חמישי ערב", "Not weekend":"סופ''ש", "One time": "חד פעמי", + "Pay attention to update the shift details according to the changes you made .": " שים לב לעדכן את פרטי המשמרת בהתאם לשינויים שביצעת.", "Parallel weight": "משקל", "Personal Information": "נתונים אישיים", "Personal number": "מספר אישי", @@ -113,6 +118,7 @@ "Reserves": "מילואימניקים", "Reserve dates": "ימי מילואים בחודש הנוכחי", "Reservist": "מילואימניק", + "Reset assignment":"אפס שיבוץ", "Reset filters":"אפס סננים", "Run Algorithm":"הרץ אלגוריתם", "Save": "שמור", @@ -122,9 +128,12 @@ "Select an option": "בחר", "Select condition": "בחר תנאי", "Select from dates": "בחר מתאריך", + "Select a soldier":"בחר חייל", + "Select qualifications":"בחר הסמכות", "Send": "שלח", "Shift": "משמרת", "Shift change":"החלפת משמרות", + "Shift name":"שם המשמרת", "Shifts": "משמרות", "Shifts assignment":"שבץ משמרות", "Soldier": "חייל", @@ -133,9 +142,8 @@ "Soldiers": "חיילים", "Soldier type": "סוג חייל", "Start at": "שעת התחלה", - "Start date": "תאריך הַתחָלָה", + "Start date": "תאריך התחלה", "Start hour": "שעת התחלה", - "StartDate": "תאריך התחלה", "Sunday":"ראשון", "Saturday":"שבת", "Task": "משימה", @@ -143,13 +151,15 @@ "Task type": "סוג משימה", "Team": "צוות", "Teams": "צוותים", - "The commander you selected is already registered as a commander. His selection will leave his soldiers without a commander. Are you sure?": "המפקד שבחרת כבר רשום כמפקד. בחירתו תשאיר את חייליו ללא מפקד. אתה בטוח?", + "The commander you selected is already registered as a commander. His selection will leave his :type without a commander. Are you sure?": "המפקד שבחרת כבר רשום כמפקד. בחירתו תשאיר את חייליו ללא מפקד. אתה בטוח?", "This name already exists in the system!":"השם הזה כבר קיים במערכת!", "Thursday":"חמישי", "Tuesday":"שלישי", "Type": "סוג", "Unassigned shifts":"משמרות שלא שובצו", "Until": "עד תאריך", + "Update parallel weight of holiday shift":"עדכון משקל של משמרת חג", + "Update dragged shift details!": "עדכון פרטי משמרת שנגררה", "Update reserve days": "ימי מילואים לחודש הבא", "Vacation":"חופשה", "View":"צפה ב", @@ -157,7 +167,10 @@ "View team": "צפה בצוות", "View teams":"צפה בצוותים", "View department": "צפה במדור", + "View assigned shifts":"צפה במשמרות שהוקצו עבורך", + "View your shift schedule":"הצג את לוח המשמרות שלך", "Wednesday":"רביעי", "Weekly": "שבועי", - "Yes":"כן" + "Yes":"כן", + "You did not choose a commander. With your approval, you leave the team without a commander. Are you sure?":"לא בחרת מפקד. באישורך אתה משאיר את הצוות ללא מפקד. האם אתה בטוח?" } diff --git a/public/css/filament/filament/app.css b/public/css/filament/filament/app.css index f383d7e..6fb1921 100644 --- a/public/css/filament/filament/app.css +++ b/public/css/filament/filament/app.css @@ -1 +1 @@ -/*! tailwindcss v3.4.3 | MIT License | https://tailwindcss.com*/*,:after,:before{border-color:rgba(var(--gray-200),1);border-style:solid;border-width:0;box-sizing:border-box}:after,:before{--tw-content:""}:host,html{-webkit-text-size-adjust:100%;font-feature-settings:normal;-webkit-tap-highlight-color:transparent;font-family:var(--font-family),ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-variation-settings:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-feature-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:rgba(var(--gray-400),1);opacity:1}input::placeholder,textarea::placeholder{color:rgba(var(--gray-400),1);opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}[multiple],[type=date],[type=datetime-local],[type=email],[type=month],[type=number],[type=password],[type=search],[type=tel],[type=text],[type=time],[type=url],[type=week],input:where(:not([type])),select,textarea{--tw-shadow:0 0 #0000;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:rgba(var(--gray-500),var(--tw-border-opacity,1));border-radius:0;border-width:1px;font-size:1rem;line-height:1.5rem;padding:.5rem .75rem}[multiple]:focus,[type=date]:focus,[type=datetime-local]:focus,[type=email]:focus,[type=month]:focus,[type=number]:focus,[type=password]:focus,[type=search]:focus,[type=tel]:focus,[type=text]:focus,[type=time]:focus,[type=url]:focus,[type=week]:focus,input:where(:not([type])):focus,select:focus,textarea:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);border-color:#2563eb;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid transparent;outline-offset:2px}input::-moz-placeholder,textarea::-moz-placeholder{color:rgba(var(--gray-500),var(--tw-text-opacity,1));opacity:1}input::placeholder,textarea::placeholder{color:rgba(var(--gray-500),var(--tw-text-opacity,1));opacity:1}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-date-and-time-value{min-height:1.5em;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-meridiem-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-year-field{padding-bottom:0;padding-top:0}select{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='rgba(var(--gray-500), var(--tw-stroke-opacity, 1))' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}[multiple],[size]:where(select:not([size="1"])){background-image:none;background-position:0 0;background-repeat:unset;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:unset;print-color-adjust:unset}[type=checkbox],[type=radio]{--tw-shadow:0 0 #0000;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;background-origin:border-box;border-color:rgba(var(--gray-500),var(--tw-border-opacity,1));border-width:1px;color:#2563eb;display:inline-block;flex-shrink:0;height:1rem;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:1rem}[type=checkbox]{border-radius:0}[type=radio]{border-radius:100%}[type=checkbox]:focus,[type=radio]:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:2px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid transparent;outline-offset:2px}[type=checkbox]:checked,[type=radio]:checked{background-color:currentColor;background-position:50%;background-repeat:no-repeat;background-size:100% 100%;border-color:transparent}[type=checkbox]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.207 4.793a1 1 0 0 1 0 1.414l-5 5a1 1 0 0 1-1.414 0l-2-2a1 1 0 0 1 1.414-1.414L6.5 9.086l4.293-4.293a1 1 0 0 1 1.414 0z'/%3E%3C/svg%3E")}@media (forced-colors:active) {[type=checkbox]:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=radio]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='8' cy='8' r='3'/%3E%3C/svg%3E")}@media (forced-colors:active) {[type=radio]:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=checkbox]:checked:focus,[type=checkbox]:checked:hover,[type=radio]:checked:focus,[type=radio]:checked:hover{background-color:currentColor;border-color:transparent}[type=checkbox]:indeterminate{background-color:currentColor;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3E%3Cpath stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:100% 100%;border-color:transparent}@media (forced-colors:active) {[type=checkbox]:indeterminate{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=checkbox]:indeterminate:focus,[type=checkbox]:indeterminate:hover{background-color:currentColor;border-color:transparent}[type=file]{background:unset;border-color:inherit;border-radius:0;border-width:0;font-size:unset;line-height:inherit;padding:0}[type=file]:focus{outline:1px solid ButtonText;outline:1px auto -webkit-focus-ring-color}:root.dark{color-scheme:dark}[data-field-wrapper]{scroll-margin-top:8rem}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-bottom:1.2em;margin-top:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);font-weight:500;text-decoration:underline}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-bottom:1.25em;margin-top:1.25em;padding-inline-start:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-bottom:1.25em;margin-top:1.25em;padding-inline-start:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-counters);font-weight:400}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-bottom:3em;margin-top:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){border-inline-start-color:var(--tw-prose-quote-borders);border-inline-start-width:.25rem;color:var(--tw-prose-quotes);font-style:italic;font-weight:500;margin-bottom:1.6em;margin-top:1.6em;padding-inline-start:1em;quotes:"\201C""\201D""\2018""\2019"}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-size:2.25em;font-weight:800;line-height:1.1111111;margin-bottom:.8888889em;margin-top:0}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:900}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-size:1.5em;font-weight:700;line-height:1.3333333;margin-bottom:1em;margin-top:2em}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:800}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-size:1.25em;font-weight:600;line-height:1.6;margin-bottom:.6em;margin-top:1.6em}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;line-height:1.5;margin-bottom:.5em;margin-top:1.5em}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-bottom:2em;margin-top:2em}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.3125rem;box-shadow:0 0 0 1px rgb(var(--tw-prose-kbd-shadows)/10%),0 3px 0 rgb(var(--tw-prose-kbd-shadows)/10%);color:var(--tw-prose-kbd);font-family:inherit;font-size:.875em;font-weight:500;padding-inline-end:.375em;padding-bottom:.1875em;padding-top:.1875em;padding-inline-start:.375em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-size:.875em;font-weight:600}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:var(--tw-prose-pre-bg);border-radius:.375rem;color:var(--tw-prose-pre-code);font-size:.875em;font-weight:400;line-height:1.7142857;margin-bottom:1.7142857em;margin-top:1.7142857em;overflow-x:auto;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-top:.8571429em;padding-inline-start:1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:transparent;border-radius:0;border-width:0;color:inherit;font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit;padding:0}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em;line-height:1.7142857;margin-bottom:2em;margin-top:2em;table-layout:auto;text-align:start;width:100%}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-color:var(--tw-prose-th-borders);border-bottom-width:1px}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em;vertical-align:bottom}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-color:var(--tw-prose-td-borders);border-bottom-width:1px}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-color:var(--tw-prose-th-borders);border-top-width:1px}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body:#374151;--tw-prose-headings:#111827;--tw-prose-lead:#4b5563;--tw-prose-links:#111827;--tw-prose-bold:#111827;--tw-prose-counters:#6b7280;--tw-prose-bullets:#d1d5db;--tw-prose-hr:#e5e7eb;--tw-prose-quotes:#111827;--tw-prose-quote-borders:#e5e7eb;--tw-prose-captions:#6b7280;--tw-prose-kbd:#111827;--tw-prose-kbd-shadows:17 24 39;--tw-prose-code:#111827;--tw-prose-pre-code:#e5e7eb;--tw-prose-pre-bg:#1f2937;--tw-prose-th-borders:#d1d5db;--tw-prose-td-borders:#e5e7eb;--tw-prose-invert-body:#d1d5db;--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:#9ca3af;--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:#9ca3af;--tw-prose-invert-bullets:#4b5563;--tw-prose-invert-hr:#374151;--tw-prose-invert-quotes:#f3f4f6;--tw-prose-invert-quote-borders:#374151;--tw-prose-invert-captions:#9ca3af;--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:255 255 255;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:#d1d5db;--tw-prose-invert-pre-bg:rgba(0,0,0,.5);--tw-prose-invert-th-borders:#4b5563;--tw-prose-invert-td-borders:#374151;font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.5em;margin-top:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.75em;margin-top:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.75em;margin-top:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-top:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose-sm{font-size:.875rem;line-height:1.7142857}.prose-sm :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em;margin-top:1.1428571em}.prose-sm :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.2857143em;line-height:1.5555556;margin-bottom:.8888889em;margin-top:.8888889em}.prose-sm :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em;padding-inline-start:1.1111111em}.prose-sm :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:2.1428571em;line-height:1.2;margin-bottom:.8em;margin-top:0}.prose-sm :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.4285714em;line-height:1.4;margin-bottom:.8em;margin-top:1.6em}.prose-sm :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.2857143em;line-height:1.5555556;margin-bottom:.4444444em;margin-top:1.5555556em}.prose-sm :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){line-height:1.4285714;margin-bottom:.5714286em;margin-top:1.4285714em}.prose-sm :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7142857em;margin-top:1.7142857em}.prose-sm :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7142857em;margin-top:1.7142857em}.prose-sm :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-sm :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7142857em;margin-top:1.7142857em}.prose-sm :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.3125rem;font-size:.8571429em;padding-inline-end:.3571429em;padding-bottom:.1428571em;padding-top:.1428571em;padding-inline-start:.3571429em}.prose-sm :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em}.prose-sm :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.9em}.prose-sm :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em}.prose-sm :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.25rem;font-size:.8571429em;line-height:1.6666667;margin-bottom:1.6666667em;margin-top:1.6666667em;padding-inline-end:1em;padding-bottom:.6666667em;padding-top:.6666667em;padding-inline-start:1em}.prose-sm :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em;margin-top:1.1428571em;padding-inline-start:1.5714286em}.prose-sm :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em;margin-top:1.1428571em;padding-inline-start:1.5714286em}.prose-sm :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.2857143em;margin-top:.2857143em}.prose-sm :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.4285714em}.prose-sm :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.4285714em}.prose-sm :where(.prose-sm>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.5714286em;margin-top:.5714286em}.prose-sm :where(.prose-sm>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em}.prose-sm :where(.prose-sm>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em}.prose-sm :where(.prose-sm>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em}.prose-sm :where(.prose-sm>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em}.prose-sm :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.5714286em;margin-top:.5714286em}.prose-sm :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em;margin-top:1.1428571em}.prose-sm :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em}.prose-sm :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.2857143em;padding-inline-start:1.5714286em}.prose-sm :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2.8571429em;margin-top:2.8571429em}.prose-sm :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em;line-height:1.5}.prose-sm :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:1em;padding-bottom:.6666667em;padding-inline-start:1em}.prose-sm :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-sm :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-sm :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:1em;padding-bottom:.6666667em;padding-top:.6666667em;padding-inline-start:1em}.prose-sm :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-sm :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-sm :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7142857em;margin-top:1.7142857em}.prose-sm :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-sm :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em;line-height:1.3333333;margin-top:.6666667em}.prose-sm :where(.prose-sm>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(.prose-sm>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose-base{font-size:1rem;line-height:1.75}.prose-base :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em}.prose-base :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.25em;line-height:1.6;margin-bottom:1.2em;margin-top:1.2em}.prose-base :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.6em;margin-top:1.6em;padding-inline-start:1em}.prose-base :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:2.25em;line-height:1.1111111;margin-bottom:.8888889em;margin-top:0}.prose-base :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.5em;line-height:1.3333333;margin-bottom:1em;margin-top:2em}.prose-base :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.25em;line-height:1.6;margin-bottom:.6em;margin-top:1.6em}.prose-base :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){line-height:1.5;margin-bottom:.5em;margin-top:1.5em}.prose-base :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose-base :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose-base :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-base :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose-base :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.3125rem;font-size:.875em;padding-inline-end:.375em;padding-bottom:.1875em;padding-top:.1875em;padding-inline-start:.375em}.prose-base :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em}.prose-base :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em}.prose-base :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.9em}.prose-base :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.375rem;font-size:.875em;line-height:1.7142857;margin-bottom:1.7142857em;margin-top:1.7142857em;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-top:.8571429em;padding-inline-start:1.1428571em}.prose-base :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em;padding-inline-start:1.625em}.prose-base :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em;padding-inline-start:1.625em}.prose-base :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.5em;margin-top:.5em}.prose-base :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose-base :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose-base :where(.prose-base>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.75em;margin-top:.75em}.prose-base :where(.prose-base>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose-base :where(.prose-base>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose-base :where(.prose-base>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose-base :where(.prose-base>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose-base :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.75em;margin-top:.75em}.prose-base :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em}.prose-base :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose-base :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose-base :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:3em;margin-top:3em}.prose-base :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-base :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-base :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-base :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-base :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em;line-height:1.7142857}.prose-base :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose-base :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-base :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-base :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-top:.5714286em;padding-inline-start:.5714286em}.prose-base :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-base :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-base :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose-base :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-base :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose-base :where(.prose-base>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-base :where(.prose-base>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose-lg{font-size:1.125rem;line-height:1.7777778}.prose-lg :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em}.prose-lg :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.2222222em;line-height:1.4545455;margin-bottom:1.0909091em;margin-top:1.0909091em}.prose-lg :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.6666667em;margin-top:1.6666667em;padding-inline-start:1em}.prose-lg :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:2.6666667em;line-height:1;margin-bottom:.8333333em;margin-top:0}.prose-lg :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.6666667em;line-height:1.3333333;margin-bottom:1.0666667em;margin-top:1.8666667em}.prose-lg :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.3333333em;line-height:1.5;margin-bottom:.6666667em;margin-top:1.6666667em}.prose-lg :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){line-height:1.5555556;margin-bottom:.4444444em;margin-top:1.7777778em}.prose-lg :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7777778em;margin-top:1.7777778em}.prose-lg :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7777778em;margin-top:1.7777778em}.prose-lg :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-lg :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7777778em;margin-top:1.7777778em}.prose-lg :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.3125rem;font-size:.8888889em;padding-inline-end:.4444444em;padding-bottom:.2222222em;padding-top:.2222222em;padding-inline-start:.4444444em}.prose-lg :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em}.prose-lg :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8666667em}.prose-lg :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em}.prose-lg :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.375rem;font-size:.8888889em;line-height:1.75;margin-bottom:2em;margin-top:2em;padding-inline-end:1.5em;padding-bottom:1em;padding-top:1em;padding-inline-start:1.5em}.prose-lg :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em;padding-inline-start:1.5555556em}.prose-lg :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em;padding-inline-start:1.5555556em}.prose-lg :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.6666667em;margin-top:.6666667em}.prose-lg :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.4444444em}.prose-lg :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.4444444em}.prose-lg :where(.prose-lg>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.8888889em;margin-top:.8888889em}.prose-lg :where(.prose-lg>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em}.prose-lg :where(.prose-lg>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em}.prose-lg :where(.prose-lg>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em}.prose-lg :where(.prose-lg>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em}.prose-lg :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.8888889em;margin-top:.8888889em}.prose-lg :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em}.prose-lg :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em}.prose-lg :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.6666667em;padding-inline-start:1.5555556em}.prose-lg :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:3.1111111em;margin-top:3.1111111em}.prose-lg :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-lg :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-lg :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-lg :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-lg :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em;line-height:1.5}.prose-lg :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:.75em;padding-bottom:.75em;padding-inline-start:.75em}.prose-lg :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-lg :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-lg :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:.75em;padding-bottom:.75em;padding-top:.75em;padding-inline-start:.75em}.prose-lg :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-lg :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-lg :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7777778em;margin-top:1.7777778em}.prose-lg :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-lg :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em;line-height:1.5;margin-top:1em}.prose-lg :where(.prose-lg>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-lg :where(.prose-lg>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.inset-4{inset:1rem}.inset-x-0{left:0;right:0}.inset-x-4{left:1rem;right:1rem}.inset-y-0{bottom:0;top:0}.-bottom-1\/2{bottom:-50%}.-top-1{top:-.25rem}.-top-1\/2{top:-50%}.-top-2{top:-.5rem}.-top-3{top:-.75rem}.bottom-0{bottom:0}.bottom-1\/2{bottom:50%}.end-0{inset-inline-end:0}.end-4{inset-inline-end:1rem}.end-6{inset-inline-end:1.5rem}.left-3{left:.75rem}.start-0{inset-inline-start:0}.start-full{inset-inline-start:100%}.top-0{top:0}.top-1{top:.25rem}.top-1\/2{top:50%}.top-4{top:1rem}.top-6{top:1.5rem}.isolate{isolation:isolate}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-\[1\]{z-index:1}.order-first{order:-9999}.col-\[--col-span-default\]{grid-column:var(--col-span-default)}.col-span-full{grid-column:1/-1}.col-start-2{grid-column-start:2}.col-start-3{grid-column-start:3}.col-start-\[--col-start-default\]{grid-column-start:var(--col-start-default)}.row-start-2{grid-row-start:2}.-m-0{margin:0}.-m-0\.5{margin:-.125rem}.-m-1{margin:-.25rem}.-m-1\.5{margin:-.375rem}.-m-2{margin:-.5rem}.-m-2\.5{margin:-.625rem}.-m-3{margin:-.75rem}.-m-3\.5{margin:-.875rem}.-mx-2{margin-left:-.5rem;margin-right:-.5rem}.-mx-4{margin-left:-1rem;margin-right:-1rem}.-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.-my-1{margin-bottom:-.25rem;margin-top:-.25rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.mx-auto{margin-left:auto;margin-right:auto}.my-16{margin-bottom:4rem;margin-top:4rem}.my-2{margin-bottom:.5rem;margin-top:.5rem}.my-4{margin-bottom:1rem;margin-top:1rem}.my-auto{margin-bottom:auto;margin-top:auto}.\!mt-0{margin-top:0!important}.-mb-4{margin-bottom:-1rem}.-mb-6{margin-bottom:-1.5rem}.-me-2{margin-inline-end:-.5rem}.-ms-0{margin-inline-start:0}.-ms-0\.5{margin-inline-start:-.125rem}.-ms-1{margin-inline-start:-.25rem}.-ms-2{margin-inline-start:-.5rem}.-mt-3{margin-top:-.75rem}.-mt-4{margin-top:-1rem}.-mt-6{margin-top:-1.5rem}.-mt-7{margin-top:-1.75rem}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.me-1{margin-inline-end:.25rem}.me-4{margin-inline-end:1rem}.me-6{margin-inline-end:1.5rem}.ml-auto{margin-left:auto}.ms-1{margin-inline-start:.25rem}.ms-auto{margin-inline-start:auto}.mt-0{margin-top:0}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-6{margin-top:1.5rem}.mt-auto{margin-top:auto}.line-clamp-\[--line-clamp\]{-webkit-box-orient:vertical;-webkit-line-clamp:var(--line-clamp);display:-webkit-box;overflow:hidden}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.inline-grid{display:inline-grid}.hidden{display:none}.h-0{height:0}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-16{height:4rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-32{height:8rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-96{height:24rem}.h-\[100dvh\],.h-dvh{height:100dvh}.h-full{height:100%}.h-screen{height:100vh}.max-h-96{max-height:24rem}.min-h-\[theme\(spacing\.48\)\]{min-height:12rem}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-1\/2{width:50%}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-16{width:4rem}.w-20{width:5rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-32{width:8rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-\[--sidebar-width\]{width:var(--sidebar-width)}.w-\[calc\(100\%\+2rem\)\]{width:calc(100% + 2rem)}.w-auto{width:auto}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.w-px{width:1px}.w-screen{width:100vw}.min-w-0{min-width:0}.min-w-\[theme\(spacing\.4\)\]{min-width:1rem}.min-w-\[theme\(spacing\.5\)\]{min-width:1.25rem}.min-w-\[theme\(spacing\.6\)\]{min-width:1.5rem}.min-w-\[theme\(spacing\.8\)\]{min-width:2rem}.\!max-w-2xl{max-width:42rem!important}.\!max-w-3xl{max-width:48rem!important}.\!max-w-4xl{max-width:56rem!important}.\!max-w-5xl{max-width:64rem!important}.\!max-w-6xl{max-width:72rem!important}.\!max-w-7xl{max-width:80rem!important}.\!max-w-\[14rem\]{max-width:14rem!important}.\!max-w-lg{max-width:32rem!important}.\!max-w-md{max-width:28rem!important}.\!max-w-sm{max-width:24rem!important}.\!max-w-xl{max-width:36rem!important}.\!max-w-xs{max-width:20rem!important}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-6xl{max-width:72rem}.max-w-7xl{max-width:80rem}.max-w-fit{max-width:-moz-fit-content;max-width:fit-content}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-max{max-width:-moz-max-content;max-width:max-content}.max-w-md{max-width:28rem}.max-w-min{max-width:-moz-min-content;max-width:min-content}.max-w-none{max-width:none}.max-w-prose{max-width:65ch}.max-w-screen-2xl{max-width:1536px}.max-w-screen-lg{max-width:1024px}.max-w-screen-md{max-width:768px}.max-w-screen-sm{max-width:640px}.max-w-screen-xl{max-width:1280px}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.table-auto{table-layout:auto}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.-translate-x-1\/4{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-1\/4{--tw-translate-x:-25%}.-translate-x-12{--tw-translate-x:-3rem}.-translate-x-12,.-translate-x-5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-5{--tw-translate-x:-1.25rem}.-translate-x-full{--tw-translate-x:-100%}.-translate-x-full,.-translate-y-1\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y:-50%}.-translate-y-12{--tw-translate-y:-3rem}.-translate-y-12,.-translate-y-3\/4{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-3\/4{--tw-translate-y:-75%}.translate-x-0{--tw-translate-x:0px}.translate-x-0,.translate-x-12{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-12{--tw-translate-x:3rem}.translate-x-5{--tw-translate-x:1.25rem}.translate-x-5,.translate-x-full{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-full{--tw-translate-x:100%}.translate-y-12{--tw-translate-y:3rem}.-rotate-180,.translate-y-12{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rotate-180{--tw-rotate:-180deg}.rotate-180{--tw-rotate:180deg}.rotate-180,.scale-100{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x:1;--tw-scale-y:1}.scale-95{--tw-scale-x:.95;--tw-scale-y:.95}.scale-95,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-move{cursor:move}.cursor-pointer{cursor:pointer}.cursor-wait{cursor:wait}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.resize-none{resize:none}.resize{resize:both}.scroll-mt-9{scroll-margin-top:2.25rem}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.columns-\[--cols-default\]{-moz-columns:var(--cols-default);columns:var(--cols-default)}.break-inside-avoid{-moz-column-break-inside:avoid;break-inside:avoid}.auto-cols-fr{grid-auto-columns:minmax(0,1fr)}.grid-flow-col{grid-auto-flow:column}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-\[--cols-default\]{grid-template-columns:var(--cols-default)}.grid-cols-\[1fr_auto_1fr\]{grid-template-columns:1fr auto 1fr}.grid-cols-\[repeat\(7\2c minmax\(theme\(spacing\.7\)\2c 1fr\)\)\]{grid-template-columns:repeat(7,minmax(1.75rem,1fr))}.grid-cols-\[repeat\(auto-fit\2c minmax\(0\2c 1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(0,1fr))}.grid-rows-\[1fr_auto_1fr\]{grid-template-rows:1fr auto 1fr}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.content-start{align-content:flex-start}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-items-start{justify-items:start}.justify-items-center{justify-items:center}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-x-1{-moz-column-gap:.25rem;column-gap:.25rem}.gap-x-1\.5{-moz-column-gap:.375rem;column-gap:.375rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.gap-x-2\.5{-moz-column-gap:.625rem;column-gap:.625rem}.gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-x-5{-moz-column-gap:1.25rem;column-gap:1.25rem}.gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.gap-y-1{row-gap:.25rem}.gap-y-1\.5{row-gap:.375rem}.gap-y-2{row-gap:.5rem}.gap-y-3{row-gap:.75rem}.gap-y-4{row-gap:1rem}.gap-y-6{row-gap:1.5rem}.gap-y-7{row-gap:1.75rem}.gap-y-8{row-gap:2rem}.gap-y-px{row-gap:1px}.-space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-.25rem*var(--tw-space-x-reverse))}.-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-.5rem*var(--tw-space-x-reverse))}.-space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-.75rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-.75rem*var(--tw-space-x-reverse))}.-space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-1rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-1rem*var(--tw-space-x-reverse))}.-space-x-5>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-1.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-1.25rem*var(--tw-space-x-reverse))}.-space-x-6>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-1.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-1.5rem*var(--tw-space-x-reverse))}.-space-x-7>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-1.75rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-1.75rem*var(--tw-space-x-reverse))}.-space-x-8>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-2rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-2rem*var(--tw-space-x-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.75rem*var(--tw-space-y-reverse));margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.5rem*var(--tw-space-y-reverse));margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)))}.divide-x>:not([hidden])~:not([hidden]){--tw-divide-x-reverse:0;border-left-width:calc(1px*(1 - var(--tw-divide-x-reverse)));border-right-width:calc(1px*var(--tw-divide-x-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(1px*var(--tw-divide-y-reverse));border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))}.divide-gray-100>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgba(var(--gray-100),var(--tw-divide-opacity))}.divide-gray-200>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgba(var(--gray-200),var(--tw-divide-opacity))}.self-start{align-self:flex-start}.self-stretch{align-self:stretch}.justify-self-start{justify-self:start}.justify-self-end{justify-self:end}.justify-self-center{justify-self:center}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-x-clip{overflow-x:clip}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.rounded-b-xl{border-bottom-left-radius:.75rem;border-bottom-right-radius:.75rem}.rounded-t-xl{border-top-left-radius:.75rem;border-top-right-radius:.75rem}.border{border-width:1px}.border-2{border-width:2px}.border-x-\[0\.5px\]{border-left-width:.5px;border-right-width:.5px}.border-y{border-bottom-width:1px;border-top-width:1px}.\!border-t-0{border-top-width:0!important}.border-b{border-bottom-width:1px}.border-b-0{border-bottom-width:0}.border-e{border-inline-end-width:1px}.border-s{border-inline-start-width:1px}.border-t{border-top-width:1px}.\!border-none{border-style:none!important}.border-none{border-style:none}.border-gray-100{--tw-border-opacity:1;border-color:rgba(var(--gray-100),var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity:1;border-color:rgba(var(--gray-200),var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgba(var(--gray-300),var(--tw-border-opacity))}.border-gray-600{--tw-border-opacity:1;border-color:rgba(var(--gray-600),var(--tw-border-opacity))}.border-primary-500{--tw-border-opacity:1;border-color:rgba(var(--primary-500),var(--tw-border-opacity))}.border-primary-600{--tw-border-opacity:1;border-color:rgba(var(--primary-600),var(--tw-border-opacity))}.border-transparent{border-color:transparent}.border-t-gray-200{--tw-border-opacity:1;border-top-color:rgba(var(--gray-200),var(--tw-border-opacity))}.\!bg-gray-50{--tw-bg-opacity:1!important;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))!important}.\!bg-gray-700{--tw-bg-opacity:1!important;background-color:rgba(var(--gray-700),var(--tw-bg-opacity))!important}.bg-black\/50{background-color:rgba(0,0,0,.5)}.bg-custom-100{--tw-bg-opacity:1;background-color:rgba(var(--c-100),var(--tw-bg-opacity))}.bg-custom-50{--tw-bg-opacity:1;background-color:rgba(var(--c-50),var(--tw-bg-opacity))}.bg-custom-600{--tw-bg-opacity:1;background-color:rgba(var(--c-600),var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgba(var(--gray-100),var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgba(var(--gray-200),var(--tw-bg-opacity))}.bg-gray-300{--tw-bg-opacity:1;background-color:rgba(var(--gray-300),var(--tw-bg-opacity))}.bg-gray-400{--tw-bg-opacity:1;background-color:rgba(var(--gray-400),var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.bg-gray-950\/50{background-color:rgba(var(--gray-950),.5)}.bg-primary-500{--tw-bg-opacity:1;background-color:rgba(var(--primary-500),var(--tw-bg-opacity))}.bg-primary-600{--tw-bg-opacity:1;background-color:rgba(var(--primary-600),var(--tw-bg-opacity))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-white\/0{background-color:hsla(0,0%,100%,0)}.bg-white\/5{background-color:hsla(0,0%,100%,.05)}.\!bg-none{background-image:none!important}.bg-cover{background-size:cover}.bg-center{background-position:50%}.object-cover{-o-object-fit:cover;object-fit:cover}.object-center{-o-object-position:center;object-position:center}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-0{padding-left:0;padding-right:0}.px-0\.5{padding-left:.125rem;padding-right:.125rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0{padding-bottom:0;padding-top:0}.py-0\.5{padding-bottom:.125rem;padding-top:.125rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.py-12{padding-bottom:3rem;padding-top:3rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-2\.5{padding-bottom:.625rem;padding-top:.625rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.py-3\.5{padding-bottom:.875rem;padding-top:.875rem}.py-4{padding-bottom:1rem;padding-top:1rem}.py-5{padding-bottom:1.25rem;padding-top:1.25rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.py-8{padding-bottom:2rem;padding-top:2rem}.pb-4{padding-bottom:1rem}.pb-6{padding-bottom:1.5rem}.pe-0{padding-inline-end:0}.pe-1{padding-inline-end:.25rem}.pe-2{padding-inline-end:.5rem}.pe-3{padding-inline-end:.75rem}.pe-4{padding-inline-end:1rem}.pe-6{padding-inline-end:1.5rem}.pe-8{padding-inline-end:2rem}.ps-0{padding-inline-start:0}.ps-1{padding-inline-start:.25rem}.ps-2{padding-inline-start:.5rem}.ps-3{padding-inline-start:.75rem}.ps-4{padding-inline-start:1rem}.ps-\[5\.25rem\]{padding-inline-start:5.25rem}.pt-0{padding-top:0}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-6{padding-top:1.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-justify{text-align:justify}.text-start{text-align:start}.text-end{text-align:end}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.align-bottom{vertical-align:bottom}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:var(--font-family),ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}.font-serif{font-family:ui-serif,Georgia,Cambria,Times New Roman,Times,serif}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-black{font-weight:900}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-extralight{font-weight:200}.font-light{font-weight:300}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.font-thin{font-weight:100}.capitalize{text-transform:capitalize}.italic{font-style:italic}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.leading-loose{line-height:2}.tracking-tight{letter-spacing:-.025em}.tracking-tighter{letter-spacing:-.05em}.text-custom-400{--tw-text-opacity:1;color:rgba(var(--c-400),var(--tw-text-opacity))}.text-custom-50{--tw-text-opacity:1;color:rgba(var(--c-50),var(--tw-text-opacity))}.text-custom-500{--tw-text-opacity:1;color:rgba(var(--c-500),var(--tw-text-opacity))}.text-custom-600{--tw-text-opacity:1;color:rgba(var(--c-600),var(--tw-text-opacity))}.text-custom-700\/50{color:rgba(var(--c-700),.5)}.text-danger-600{--tw-text-opacity:1;color:rgba(var(--danger-600),var(--tw-text-opacity))}.text-gray-100{--tw-text-opacity:1;color:rgba(var(--gray-100),var(--tw-text-opacity))}.text-gray-200{--tw-text-opacity:1;color:rgba(var(--gray-200),var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgba(var(--gray-600),var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgba(var(--gray-700),var(--tw-text-opacity))}.text-gray-700\/50{color:rgba(var(--gray-700),.5)}.text-gray-950{--tw-text-opacity:1;color:rgba(var(--gray-950),var(--tw-text-opacity))}.text-primary-400{--tw-text-opacity:1;color:rgba(var(--primary-400),var(--tw-text-opacity))}.text-primary-500{--tw-text-opacity:1;color:rgba(var(--primary-500),var(--tw-text-opacity))}.text-primary-600{--tw-text-opacity:1;color:rgba(var(--primary-600),var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.underline{text-decoration-line:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-sm,.shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}.outline-none{outline:2px solid transparent;outline-offset:2px}.ring{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring,.ring-0{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-1,.ring-2{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-4{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-inset{--tw-ring-inset:inset}.ring-custom-600{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--c-600),var(--tw-ring-opacity))}.ring-custom-600\/10{--tw-ring-color:rgba(var(--c-600),0.1)}.ring-custom-600\/20{--tw-ring-color:rgba(var(--c-600),0.2)}.ring-danger-600{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-600),var(--tw-ring-opacity))}.ring-gray-200{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--gray-200),var(--tw-ring-opacity))}.ring-gray-300{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--gray-300),var(--tw-ring-opacity))}.ring-gray-600\/10{--tw-ring-color:rgba(var(--gray-600),0.1)}.ring-gray-900\/10{--tw-ring-color:rgba(var(--gray-900),0.1)}.ring-gray-950\/10{--tw-ring-color:rgba(var(--gray-950),0.1)}.ring-gray-950\/5{--tw-ring-color:rgba(var(--gray-950),0.05)}.ring-white{--tw-ring-opacity:1;--tw-ring-color:rgb(255 255 255/var(--tw-ring-opacity))}.ring-white\/10{--tw-ring-color:hsla(0,0%,100%,.1)}.blur{--tw-blur:blur(8px)}.blur,.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.delay-100{transition-delay:.1s}.duration-100{transition-duration:.1s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.duration-75{transition-duration:75ms}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.\[transform\:translateZ\(0\)\]{transform:translateZ(0)}.dark\:prose-invert:is(.dark *){--tw-prose-body:var(--tw-prose-invert-body);--tw-prose-headings:var(--tw-prose-invert-headings);--tw-prose-lead:var(--tw-prose-invert-lead);--tw-prose-links:var(--tw-prose-invert-links);--tw-prose-bold:var(--tw-prose-invert-bold);--tw-prose-counters:var(--tw-prose-invert-counters);--tw-prose-bullets:var(--tw-prose-invert-bullets);--tw-prose-hr:var(--tw-prose-invert-hr);--tw-prose-quotes:var(--tw-prose-invert-quotes);--tw-prose-quote-borders:var(--tw-prose-invert-quote-borders);--tw-prose-captions:var(--tw-prose-invert-captions);--tw-prose-kbd:var(--tw-prose-invert-kbd);--tw-prose-kbd-shadows:var(--tw-prose-invert-kbd-shadows);--tw-prose-code:var(--tw-prose-invert-code);--tw-prose-pre-code:var(--tw-prose-invert-pre-code);--tw-prose-pre-bg:var(--tw-prose-invert-pre-bg);--tw-prose-th-borders:var(--tw-prose-invert-th-borders);--tw-prose-td-borders:var(--tw-prose-invert-td-borders)}.placeholder\:text-gray-400::-moz-placeholder{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.placeholder\:text-gray-400::placeholder{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:inset-y-0:before{bottom:0;content:var(--tw-content);top:0}.before\:start-0:before{content:var(--tw-content);inset-inline-start:0}.before\:h-full:before{content:var(--tw-content);height:100%}.before\:w-0:before{content:var(--tw-content);width:0}.before\:w-0\.5:before{content:var(--tw-content);width:.125rem}.before\:bg-primary-600:before{--tw-bg-opacity:1;background-color:rgba(var(--primary-600),var(--tw-bg-opacity));content:var(--tw-content)}.first\:border-s-0:first-child{border-inline-start-width:0}.first\:border-t-0:first-child{border-top-width:0}.last\:border-e-0:last-child{border-inline-end-width:0}.first-of-type\:ps-1:first-of-type{padding-inline-start:.25rem}.last-of-type\:pe-1:last-of-type{padding-inline-end:.25rem}.checked\:ring-0:checked{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-within\:bg-gray-50:focus-within{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.hover\:bg-custom-400\/10:hover{background-color:rgba(var(--c-400),.1)}.hover\:bg-custom-50:hover{--tw-bg-opacity:1;background-color:rgba(var(--c-50),var(--tw-bg-opacity))}.hover\:bg-custom-500:hover{--tw-bg-opacity:1;background-color:rgba(var(--c-500),var(--tw-bg-opacity))}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgba(var(--gray-100),var(--tw-bg-opacity))}.hover\:bg-gray-400\/10:hover{background-color:rgba(var(--gray-400),.1)}.hover\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.hover\:text-custom-600:hover{--tw-text-opacity:1;color:rgba(var(--c-600),var(--tw-text-opacity))}.hover\:text-custom-700\/75:hover{color:rgba(var(--c-700),.75)}.hover\:text-gray-500:hover{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.hover\:text-gray-700:hover{--tw-text-opacity:1;color:rgba(var(--gray-700),var(--tw-text-opacity))}.hover\:text-gray-700\/75:hover{color:rgba(var(--gray-700),.75)}.hover\:opacity-100:hover{opacity:1}.focus\:ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-0:focus,.focus\:ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-danger-600:focus{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-600),var(--tw-ring-opacity))}.focus\:ring-primary-600:focus{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-600),var(--tw-ring-opacity))}.focus\:ring-offset-0:focus{--tw-ring-offset-width:0px}.checked\:focus\:ring-danger-500\/50:focus:checked{--tw-ring-color:rgba(var(--danger-500),0.5)}.checked\:focus\:ring-primary-500\/50:focus:checked{--tw-ring-color:rgba(var(--primary-500),0.5)}.focus-visible\:z-10:focus-visible{z-index:10}.focus-visible\:border-primary-500:focus-visible{--tw-border-opacity:1;border-color:rgba(var(--primary-500),var(--tw-border-opacity))}.focus-visible\:bg-custom-50:focus-visible{--tw-bg-opacity:1;background-color:rgba(var(--c-50),var(--tw-bg-opacity))}.focus-visible\:bg-gray-100:focus-visible{--tw-bg-opacity:1;background-color:rgba(var(--gray-100),var(--tw-bg-opacity))}.focus-visible\:bg-gray-50:focus-visible{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.focus-visible\:text-custom-700\/75:focus-visible{color:rgba(var(--c-700),.75)}.focus-visible\:text-gray-500:focus-visible{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.focus-visible\:text-gray-700\/75:focus-visible{color:rgba(var(--gray-700),.75)}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-1:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\:ring-inset:focus-visible{--tw-ring-inset:inset}.focus-visible\:ring-custom-500\/50:focus-visible{--tw-ring-color:rgba(var(--c-500),0.5)}.focus-visible\:ring-custom-600:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--c-600),var(--tw-ring-opacity))}.focus-visible\:ring-gray-400\/40:focus-visible{--tw-ring-color:rgba(var(--gray-400),0.4)}.focus-visible\:ring-primary-500:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-500),var(--tw-ring-opacity))}.focus-visible\:ring-primary-600:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-600),var(--tw-ring-opacity))}.enabled\:cursor-wait:enabled{cursor:wait}.enabled\:opacity-70:enabled{opacity:.7}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:bg-gray-50:disabled{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.disabled\:text-gray-50:disabled{--tw-text-opacity:1;color:rgba(var(--gray-50),var(--tw-text-opacity))}.disabled\:text-gray-500:disabled{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.disabled\:opacity-70:disabled{opacity:.7}.disabled\:\[-webkit-text-fill-color\:theme\(colors\.gray\.500\)\]:disabled{-webkit-text-fill-color:rgba(var(--gray-500),1)}.disabled\:placeholder\:\[-webkit-text-fill-color\:theme\(colors\.gray\.400\)\]:disabled::-moz-placeholder{-webkit-text-fill-color:rgba(var(--gray-400),1)}.disabled\:placeholder\:\[-webkit-text-fill-color\:theme\(colors\.gray\.400\)\]:disabled::placeholder{-webkit-text-fill-color:rgba(var(--gray-400),1)}.disabled\:checked\:bg-current:checked:disabled{background-color:currentColor}.disabled\:checked\:text-gray-400:checked:disabled{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.group\/item:first-child .group-first\/item\:rounded-s-lg{border-end-start-radius:.5rem;border-start-start-radius:.5rem}.group\/item:last-child .group-last\/item\:rounded-e-lg{border-end-end-radius:.5rem;border-start-end-radius:.5rem}.group:hover .group-hover\:text-gray-500,.group\/button:hover .group-hover\/button\:text-gray-500{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.group:hover .group-hover\:text-gray-700{--tw-text-opacity:1;color:rgba(var(--gray-700),var(--tw-text-opacity))}.group\/item:hover .group-hover\/item\:underline,.group\/link:hover .group-hover\/link\:underline{text-decoration-line:underline}.group:focus-visible .group-focus-visible\:text-gray-500{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.group:focus-visible .group-focus-visible\:text-gray-700{--tw-text-opacity:1;color:rgba(var(--gray-700),var(--tw-text-opacity))}.group\/item:focus-visible .group-focus-visible\/item\:underline{text-decoration-line:underline}.group\/link:focus-visible .group-focus-visible\/link\:underline{text-decoration-line:underline}.dark\:flex:is(.dark *){display:flex}.dark\:hidden:is(.dark *){display:none}.dark\:divide-white\/10:is(.dark *)>:not([hidden])~:not([hidden]){border-color:hsla(0,0%,100%,.1)}.dark\:divide-white\/5:is(.dark *)>:not([hidden])~:not([hidden]){border-color:hsla(0,0%,100%,.05)}.dark\:border-gray-600:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--gray-600),var(--tw-border-opacity))}.dark\:border-gray-700:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--gray-700),var(--tw-border-opacity))}.dark\:border-primary-500:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--primary-500),var(--tw-border-opacity))}.dark\:border-white\/10:is(.dark *){border-color:hsla(0,0%,100%,.1)}.dark\:border-white\/5:is(.dark *){border-color:hsla(0,0%,100%,.05)}.dark\:border-t-white\/10:is(.dark *){border-top-color:hsla(0,0%,100%,.1)}.dark\:\!bg-gray-700:is(.dark *){--tw-bg-opacity:1!important;background-color:rgba(var(--gray-700),var(--tw-bg-opacity))!important}.dark\:bg-custom-400\/10:is(.dark *){background-color:rgba(var(--c-400),.1)}.dark\:bg-custom-500:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--c-500),var(--tw-bg-opacity))}.dark\:bg-custom-500\/20:is(.dark *){background-color:rgba(var(--c-500),.2)}.dark\:bg-gray-400\/10:is(.dark *){background-color:rgba(var(--gray-400),.1)}.dark\:bg-gray-500:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-500),var(--tw-bg-opacity))}.dark\:bg-gray-500\/20:is(.dark *){background-color:rgba(var(--gray-500),.2)}.dark\:bg-gray-600:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-600),var(--tw-bg-opacity))}.dark\:bg-gray-700:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-700),var(--tw-bg-opacity))}.dark\:bg-gray-800:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-800),var(--tw-bg-opacity))}.dark\:bg-gray-900:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-900),var(--tw-bg-opacity))}.dark\:bg-gray-900\/30:is(.dark *){background-color:rgba(var(--gray-900),.3)}.dark\:bg-gray-950:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-950),var(--tw-bg-opacity))}.dark\:bg-gray-950\/75:is(.dark *){background-color:rgba(var(--gray-950),.75)}.dark\:bg-primary-400:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--primary-400),var(--tw-bg-opacity))}.dark\:bg-primary-500:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--primary-500),var(--tw-bg-opacity))}.dark\:bg-transparent:is(.dark *){background-color:transparent}.dark\:bg-white\/10:is(.dark *){background-color:hsla(0,0%,100%,.1)}.dark\:bg-white\/5:is(.dark *){background-color:hsla(0,0%,100%,.05)}.dark\:fill-current:is(.dark *){fill:currentColor}.dark\:text-custom-300\/50:is(.dark *){color:rgba(var(--c-300),.5)}.dark\:text-custom-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--c-400),var(--tw-text-opacity))}.dark\:text-custom-400\/10:is(.dark *){color:rgba(var(--c-400),.1)}.dark\:text-danger-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--danger-400),var(--tw-text-opacity))}.dark\:text-danger-500:is(.dark *){--tw-text-opacity:1;color:rgba(var(--danger-500),var(--tw-text-opacity))}.dark\:text-gray-200:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-200),var(--tw-text-opacity))}.dark\:text-gray-300\/50:is(.dark *){color:rgba(var(--gray-300),.5)}.dark\:text-gray-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.dark\:text-gray-500:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.dark\:text-gray-700:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-700),var(--tw-text-opacity))}.dark\:text-gray-800:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-800),var(--tw-text-opacity))}.dark\:text-primary-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--primary-400),var(--tw-text-opacity))}.dark\:text-primary-500:is(.dark *){--tw-text-opacity:1;color:rgba(var(--primary-500),var(--tw-text-opacity))}.dark\:text-white:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.dark\:text-white\/5:is(.dark *){color:hsla(0,0%,100%,.05)}.dark\:ring-custom-400\/30:is(.dark *){--tw-ring-color:rgba(var(--c-400),0.3)}.dark\:ring-custom-500:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--c-500),var(--tw-ring-opacity))}.dark\:ring-danger-500:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-500),var(--tw-ring-opacity))}.dark\:ring-gray-400\/20:is(.dark *){--tw-ring-color:rgba(var(--gray-400),0.2)}.dark\:ring-gray-50\/10:is(.dark *){--tw-ring-color:rgba(var(--gray-50),0.1)}.dark\:ring-gray-700:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--gray-700),var(--tw-ring-opacity))}.dark\:ring-gray-900:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--gray-900),var(--tw-ring-opacity))}.dark\:ring-white\/10:is(.dark *){--tw-ring-color:hsla(0,0%,100%,.1)}.dark\:ring-white\/20:is(.dark *){--tw-ring-color:hsla(0,0%,100%,.2)}.dark\:placeholder\:text-gray-500:is(.dark *)::-moz-placeholder{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.dark\:placeholder\:text-gray-500:is(.dark *)::placeholder{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.dark\:before\:bg-primary-500:is(.dark *):before{--tw-bg-opacity:1;background-color:rgba(var(--primary-500),var(--tw-bg-opacity));content:var(--tw-content)}.dark\:checked\:bg-danger-500:checked:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--danger-500),var(--tw-bg-opacity))}.dark\:checked\:bg-primary-500:checked:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--primary-500),var(--tw-bg-opacity))}.dark\:focus-within\:bg-white\/5:focus-within:is(.dark *){background-color:hsla(0,0%,100%,.05)}.dark\:hover\:bg-custom-400:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--c-400),var(--tw-bg-opacity))}.dark\:hover\:bg-custom-400\/10:hover:is(.dark *){background-color:rgba(var(--c-400),.1)}.dark\:hover\:bg-white\/10:hover:is(.dark *){background-color:hsla(0,0%,100%,.1)}.dark\:hover\:bg-white\/5:hover:is(.dark *){background-color:hsla(0,0%,100%,.05)}.dark\:hover\:text-custom-300:hover:is(.dark *){--tw-text-opacity:1;color:rgba(var(--c-300),var(--tw-text-opacity))}.dark\:hover\:text-custom-300\/75:hover:is(.dark *){color:rgba(var(--c-300),.75)}.dark\:hover\:text-gray-200:hover:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-200),var(--tw-text-opacity))}.dark\:hover\:text-gray-300\/75:hover:is(.dark *){color:rgba(var(--gray-300),.75)}.dark\:hover\:text-gray-400:hover:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.dark\:hover\:ring-white\/20:hover:is(.dark *){--tw-ring-color:hsla(0,0%,100%,.2)}.dark\:focus\:ring-danger-500:focus:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-500),var(--tw-ring-opacity))}.dark\:focus\:ring-primary-500:focus:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-500),var(--tw-ring-opacity))}.dark\:checked\:focus\:ring-danger-400\/50:focus:checked:is(.dark *){--tw-ring-color:rgba(var(--danger-400),0.5)}.dark\:checked\:focus\:ring-primary-400\/50:focus:checked:is(.dark *){--tw-ring-color:rgba(var(--primary-400),0.5)}.dark\:focus-visible\:border-primary-500:focus-visible:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--primary-500),var(--tw-border-opacity))}.dark\:focus-visible\:bg-custom-400\/10:focus-visible:is(.dark *){background-color:rgba(var(--c-400),.1)}.dark\:focus-visible\:bg-white\/5:focus-visible:is(.dark *){background-color:hsla(0,0%,100%,.05)}.dark\:focus-visible\:text-custom-300\/75:focus-visible:is(.dark *){color:rgba(var(--c-300),.75)}.dark\:focus-visible\:text-gray-300\/75:focus-visible:is(.dark *){color:rgba(var(--gray-300),.75)}.dark\:focus-visible\:text-gray-400:focus-visible:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.dark\:focus-visible\:ring-custom-400\/50:focus-visible:is(.dark *){--tw-ring-color:rgba(var(--c-400),0.5)}.dark\:focus-visible\:ring-custom-500:focus-visible:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--c-500),var(--tw-ring-opacity))}.dark\:focus-visible\:ring-primary-500:focus-visible:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-500),var(--tw-ring-opacity))}.dark\:disabled\:bg-transparent:disabled:is(.dark *){background-color:transparent}.dark\:disabled\:text-gray-400:disabled:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.dark\:disabled\:ring-white\/10:disabled:is(.dark *){--tw-ring-color:hsla(0,0%,100%,.1)}.dark\:disabled\:\[-webkit-text-fill-color\:theme\(colors\.gray\.400\)\]:disabled:is(.dark *){-webkit-text-fill-color:rgba(var(--gray-400),1)}.dark\:disabled\:placeholder\:\[-webkit-text-fill-color\:theme\(colors\.gray\.500\)\]:disabled:is(.dark *)::-moz-placeholder{-webkit-text-fill-color:rgba(var(--gray-500),1)}.dark\:disabled\:placeholder\:\[-webkit-text-fill-color\:theme\(colors\.gray\.500\)\]:disabled:is(.dark *)::placeholder{-webkit-text-fill-color:rgba(var(--gray-500),1)}.dark\:disabled\:checked\:bg-gray-600:checked:disabled:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-600),var(--tw-bg-opacity))}.group\/button:hover .dark\:group-hover\/button\:text-gray-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.group:hover .dark\:group-hover\:text-gray-200:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-200),var(--tw-text-opacity))}.group:hover .dark\:group-hover\:text-gray-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.group:focus-visible .dark\:group-focus-visible\:text-gray-200:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-200),var(--tw-text-opacity))}.group:focus-visible .dark\:group-focus-visible\:text-gray-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}@media (min-width:640px){.sm\:relative{position:relative}.sm\:inset-x-auto{left:auto;right:auto}.sm\:end-0{inset-inline-end:0}.sm\:col-\[--col-span-sm\]{grid-column:var(--col-span-sm)}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:col-start-\[--col-start-sm\]{grid-column-start:var(--col-start-sm)}.sm\:-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.sm\:-my-2{margin-bottom:-.5rem;margin-top:-.5rem}.sm\:ms-auto{margin-inline-start:auto}.sm\:mt-7{margin-top:1.75rem}.sm\:block{display:block}.sm\:flex{display:flex}.sm\:table-cell{display:table-cell}.sm\:grid{display:grid}.sm\:inline-grid{display:inline-grid}.sm\:hidden{display:none}.sm\:w-\[calc\(100\%\+3rem\)\]{width:calc(100% + 3rem)}.sm\:w-screen{width:100vw}.sm\:max-w-2xl{max-width:42rem}.sm\:max-w-3xl{max-width:48rem}.sm\:max-w-4xl{max-width:56rem}.sm\:max-w-5xl{max-width:64rem}.sm\:max-w-6xl{max-width:72rem}.sm\:max-w-7xl{max-width:80rem}.sm\:max-w-lg{max-width:32rem}.sm\:max-w-md{max-width:28rem}.sm\:max-w-sm{max-width:24rem}.sm\:max-w-xl{max-width:36rem}.sm\:max-w-xs{max-width:20rem}.sm\:columns-\[--cols-sm\]{-moz-columns:var(--cols-sm);columns:var(--cols-sm)}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-\[--cols-sm\]{grid-template-columns:var(--cols-sm)}.sm\:grid-cols-\[repeat\(auto-fit\2c minmax\(0\2c 1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(0,1fr))}.sm\:grid-rows-\[1fr_auto_3fr\]{grid-template-rows:1fr auto 3fr}.sm\:flex-row{flex-direction:row}.sm\:flex-nowrap{flex-wrap:nowrap}.sm\:items-start{align-items:flex-start}.sm\:items-end{align-items:flex-end}.sm\:items-center{align-items:center}.sm\:justify-between{justify-content:space-between}.sm\:gap-1{gap:.25rem}.sm\:gap-3{gap:.75rem}.sm\:gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.sm\:rounded-xl{border-radius:.75rem}.sm\:p-10{padding:2.5rem}.sm\:px-12{padding-left:3rem;padding-right:3rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-1{padding-bottom:.25rem;padding-top:.25rem}.sm\:py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.sm\:pe-3{padding-inline-end:.75rem}.sm\:pe-6{padding-inline-end:1.5rem}.sm\:ps-3{padding-inline-start:.75rem}.sm\:ps-6{padding-inline-start:1.5rem}.sm\:pt-1{padding-top:.25rem}.sm\:pt-1\.5{padding-top:.375rem}.sm\:text-3xl{font-size:1.875rem;line-height:2.25rem}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}.sm\:leading-6{line-height:1.5rem}.sm\:first-of-type\:ps-3:first-of-type{padding-inline-start:.75rem}.sm\:first-of-type\:ps-6:first-of-type{padding-inline-start:1.5rem}.sm\:last-of-type\:pe-3:last-of-type{padding-inline-end:.75rem}.sm\:last-of-type\:pe-6:last-of-type{padding-inline-end:1.5rem}}@media (min-width:768px){.md\:bottom-4{bottom:1rem}.md\:order-first{order:-9999}.md\:col-\[--col-span-md\]{grid-column:var(--col-span-md)}.md\:col-span-2{grid-column:span 2/span 2}.md\:col-start-\[--col-start-md\]{grid-column-start:var(--col-start-md)}.md\:block{display:block}.md\:flex{display:flex}.md\:table-cell{display:table-cell}.md\:inline-grid{display:inline-grid}.md\:hidden{display:none}.md\:w-max{width:-moz-max-content;width:max-content}.md\:max-w-60{max-width:15rem}.md\:columns-\[--cols-md\]{-moz-columns:var(--cols-md);columns:var(--cols-md)}.md\:grid-flow-col{grid-auto-flow:column}.md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-\[--cols-md\]{grid-template-columns:var(--cols-md)}.md\:flex-row{flex-direction:row}.md\:items-start{align-items:flex-start}.md\:items-end{align-items:flex-end}.md\:items-center{align-items:center}.md\:justify-end{justify-content:flex-end}.md\:gap-1{gap:.25rem}.md\:gap-3{gap:.75rem}.md\:divide-y-0>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(0px*var(--tw-divide-y-reverse));border-top-width:calc(0px*(1 - var(--tw-divide-y-reverse)))}.md\:overflow-x-auto{overflow-x:auto}.md\:rounded-xl{border-radius:.75rem}.md\:p-20{padding:5rem}.md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\:pe-6{padding-inline-end:1.5rem}.md\:ps-3{padding-inline-start:.75rem}}@media (min-width:1024px){.lg\:sticky{position:sticky}.lg\:z-0{z-index:0}.lg\:col-\[--col-span-lg\]{grid-column:var(--col-span-lg)}.lg\:col-start-\[--col-start-lg\]{grid-column-start:var(--col-start-lg)}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:table-cell{display:table-cell}.lg\:inline-grid{display:inline-grid}.lg\:hidden{display:none}.lg\:h-full{height:100%}.lg\:max-w-xs{max-width:20rem}.lg\:-translate-x-full{--tw-translate-x:-100%}.lg\:-translate-x-full,.lg\:translate-x-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lg\:translate-x-0{--tw-translate-x:0px}.lg\:columns-\[--cols-lg\]{-moz-columns:var(--cols-lg);columns:var(--cols-lg)}.lg\:grid-cols-\[--cols-lg\]{grid-template-columns:var(--cols-lg)}.lg\:flex-row{flex-direction:row}.lg\:items-start{align-items:flex-start}.lg\:items-end{align-items:flex-end}.lg\:items-center{align-items:center}.lg\:gap-1{gap:.25rem}.lg\:gap-3{gap:.75rem}.lg\:bg-transparent{background-color:transparent}.lg\:px-8{padding-left:2rem;padding-right:2rem}.lg\:pe-8{padding-inline-end:2rem}.lg\:shadow-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}.lg\:shadow-none,.lg\:shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.lg\:shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.lg\:ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.lg\:transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.lg\:transition-none{transition-property:none}.lg\:delay-100{transition-delay:.1s}.dark\:lg\:bg-transparent:is(.dark *){background-color:transparent}}@media (min-width:1280px){.xl\:col-\[--col-span-xl\]{grid-column:var(--col-span-xl)}.xl\:col-start-\[--col-start-xl\]{grid-column-start:var(--col-start-xl)}.xl\:block{display:block}.xl\:table-cell{display:table-cell}.xl\:inline-grid{display:inline-grid}.xl\:hidden{display:none}.xl\:columns-\[--cols-xl\]{-moz-columns:var(--cols-xl);columns:var(--cols-xl)}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-\[--cols-xl\]{grid-template-columns:var(--cols-xl)}.xl\:flex-row{flex-direction:row}.xl\:items-start{align-items:flex-start}.xl\:items-end{align-items:flex-end}.xl\:items-center{align-items:center}.xl\:gap-1{gap:.25rem}.xl\:gap-3{gap:.75rem}}@media (min-width:1536px){.\32xl\:col-\[--col-span-2xl\]{grid-column:var(--col-span-2xl)}.\32xl\:col-start-\[--col-start-2xl\]{grid-column-start:var(--col-start-2xl)}.\32xl\:block{display:block}.\32xl\:table-cell{display:table-cell}.\32xl\:inline-grid{display:inline-grid}.\32xl\:hidden{display:none}.\32xl\:columns-\[--cols-2xl\]{-moz-columns:var(--cols-2xl);columns:var(--cols-2xl)}.\32xl\:grid-cols-\[--cols-2xl\]{grid-template-columns:var(--cols-2xl)}.\32xl\:flex-row{flex-direction:row}.\32xl\:items-start{align-items:flex-start}.\32xl\:items-end{align-items:flex-end}.\32xl\:items-center{align-items:center}.\32xl\:gap-1{gap:.25rem}.\32xl\:gap-3{gap:.75rem}}.ltr\:hidden:where([dir=ltr],[dir=ltr] *){display:none}.rtl\:hidden:where([dir=rtl],[dir=rtl] *){display:none}.rtl\:-translate-x-0:where([dir=rtl],[dir=rtl] *){--tw-translate-x:-0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:-translate-x-5:where([dir=rtl],[dir=rtl] *){--tw-translate-x:-1.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:-translate-x-full:where([dir=rtl],[dir=rtl] *){--tw-translate-x:-100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:translate-x-1\/2:where([dir=rtl],[dir=rtl] *){--tw-translate-x:50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:translate-x-1\/4:where([dir=rtl],[dir=rtl] *){--tw-translate-x:25%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:translate-x-full:where([dir=rtl],[dir=rtl] *){--tw-translate-x:100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:rotate-180:where([dir=rtl],[dir=rtl] *){--tw-rotate:180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:flex-row-reverse:where([dir=rtl],[dir=rtl] *){flex-direction:row-reverse}.rtl\:divide-x-reverse:where([dir=rtl],[dir=rtl] *)>:not([hidden])~:not([hidden]){--tw-divide-x-reverse:1}@media (min-width:1024px){.rtl\:lg\:-translate-x-0:where([dir=rtl],[dir=rtl] *){--tw-translate-x:-0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:lg\:translate-x-full:where([dir=rtl],[dir=rtl] *){--tw-translate-x:100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}}.\[\&\.trix-active\]\:bg-gray-50.trix-active{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.\[\&\.trix-active\]\:text-primary-600.trix-active{--tw-text-opacity:1;color:rgba(var(--primary-600),var(--tw-text-opacity))}.dark\:\[\&\.trix-active\]\:bg-white\/5.trix-active:is(.dark *){background-color:hsla(0,0%,100%,.05)}.dark\:\[\&\.trix-active\]\:text-primary-400.trix-active:is(.dark *){--tw-text-opacity:1;color:rgba(var(--primary-400),var(--tw-text-opacity))}.\[\&\:\:-ms-reveal\]\:hidden::-ms-reveal{display:none}.\[\&\:not\(\:first-of-type\)\]\:border-s:not(:first-of-type){border-inline-start-width:1px}.\[\&\:not\(\:has\(\.fi-ac-action\:focus\)\)\]\:focus-within\:ring-2:focus-within:not(:has(.fi-ac-action:focus)){--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.\[\&\:not\(\:has\(\.fi-ac-action\:focus\)\)\]\:focus-within\:ring-danger-600:focus-within:not(:has(.fi-ac-action:focus)){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-600),var(--tw-ring-opacity))}.\[\&\:not\(\:has\(\.fi-ac-action\:focus\)\)\]\:focus-within\:ring-primary-600:focus-within:not(:has(.fi-ac-action:focus)){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-600),var(--tw-ring-opacity))}.dark\:\[\&\:not\(\:has\(\.fi-ac-action\:focus\)\)\]\:focus-within\:ring-danger-500:focus-within:not(:has(.fi-ac-action:focus)):is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-500),var(--tw-ring-opacity))}.dark\:\[\&\:not\(\:has\(\.fi-ac-action\:focus\)\)\]\:focus-within\:ring-primary-500:focus-within:not(:has(.fi-ac-action:focus)):is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-500),var(--tw-ring-opacity))}.\[\&\:not\(\:last-of-type\)\]\:border-e:not(:last-of-type){border-inline-end-width:1px}.\[\&\:not\(\:nth-child\(1_of_\.fi-btn\)\)\]\:shadow-\[-1px_0_0_0_theme\(colors\.gray\.200\)\]:not(:nth-child(1 of .fi-btn)){--tw-shadow:-1px 0 0 0 rgba(var(--gray-200),1);--tw-shadow-colored:-1px 0 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.dark\:\[\&\:not\(\:nth-child\(1_of_\.fi-btn\)\)\]\:shadow-\[-1px_0_0_0_theme\(colors\.white\/20\%\)\]:not(:nth-child(1 of .fi-btn)):is(.dark *){--tw-shadow:-1px 0 0 0 hsla(0,0%,100%,.2);--tw-shadow-colored:-1px 0 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.\[\&\:not\(\:nth-last-child\(1_of_\.fi-btn\)\)\]\:me-px:not(:nth-last-child(1 of .fi-btn)){margin-inline-end:1px}.\[\&\:nth-child\(1_of_\.fi-btn\)\]\:rounded-s-lg:nth-child(1 of .fi-btn){border-end-start-radius:.5rem;border-start-start-radius:.5rem}.\[\&\:nth-last-child\(1_of_\.fi-btn\)\]\:rounded-e-lg:nth-last-child(1 of .fi-btn){border-end-end-radius:.5rem;border-start-end-radius:.5rem}.\[\&\>\*\:first-child\]\:relative>:first-child{position:relative}.\[\&\>\*\:first-child\]\:mt-0>:first-child{margin-top:0}.\[\&\>\*\:first-child\]\:before\:absolute>:first-child:before{content:var(--tw-content);position:absolute}.\[\&\>\*\:first-child\]\:before\:inset-y-0>:first-child:before{bottom:0;content:var(--tw-content);top:0}.\[\&\>\*\:first-child\]\:before\:start-0>:first-child:before{content:var(--tw-content);inset-inline-start:0}.\[\&\>\*\:first-child\]\:before\:w-0\.5>:first-child:before{content:var(--tw-content);width:.125rem}.\[\&\>\*\:first-child\]\:before\:bg-primary-600>:first-child:before{--tw-bg-opacity:1;background-color:rgba(var(--primary-600),var(--tw-bg-opacity));content:var(--tw-content)}.\[\&\>\*\:first-child\]\:dark\:before\:bg-primary-500:is(.dark *)>:first-child:before{--tw-bg-opacity:1;background-color:rgba(var(--primary-500),var(--tw-bg-opacity));content:var(--tw-content)}.\[\&\>\*\:last-child\]\:mb-0>:last-child{margin-bottom:0}.\[\&_\.choices\\_\\_inner\]\:ps-0 .choices__inner{padding-inline-start:0}.\[\&_\.fi-badge-delete-button\]\:hidden .fi-badge-delete-button{display:none}.\[\&_\.filepond--root\]\:font-sans .filepond--root{font-family:var(--font-family),ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}.\[\&_optgroup\]\:bg-white optgroup{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.\[\&_optgroup\]\:dark\:bg-gray-900:is(.dark *) optgroup{--tw-bg-opacity:1;background-color:rgba(var(--gray-900),var(--tw-bg-opacity))}.\[\&_option\]\:bg-white option{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.\[\&_option\]\:dark\:bg-gray-900:is(.dark *) option{--tw-bg-opacity:1;background-color:rgba(var(--gray-900),var(--tw-bg-opacity))}:checked+*>.\[\:checked\+\*\>\&\]\:text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}@media(hover:hover){.\[\@media\(hover\:hover\)\]\:transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.\[\@media\(hover\:hover\)\]\:duration-75{transition-duration:75ms}}input:checked+.\[input\:checked\+\&\]\:bg-custom-600{--tw-bg-opacity:1;background-color:rgba(var(--c-600),var(--tw-bg-opacity))}input:checked+.\[input\:checked\+\&\]\:bg-gray-400{--tw-bg-opacity:1;background-color:rgba(var(--gray-400),var(--tw-bg-opacity))}input:checked+.\[input\:checked\+\&\]\:text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}input:checked+.\[input\:checked\+\&\]\:ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}input:checked+.\[input\:checked\+\&\]\:hover\:bg-custom-500:hover{--tw-bg-opacity:1;background-color:rgba(var(--c-500),var(--tw-bg-opacity))}input:checked+.\[input\:checked\+\&\]\:hover\:bg-gray-300:hover{--tw-bg-opacity:1;background-color:rgba(var(--gray-300),var(--tw-bg-opacity))}input:checked+.dark\:\[input\:checked\+\&\]\:bg-custom-500:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--c-500),var(--tw-bg-opacity))}input:checked+.dark\:\[input\:checked\+\&\]\:bg-gray-600:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-600),var(--tw-bg-opacity))}input:checked+.dark\:\[input\:checked\+\&\]\:hover\:bg-custom-400:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--c-400),var(--tw-bg-opacity))}input:checked+.dark\:\[input\:checked\+\&\]\:hover\:bg-gray-500:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-500),var(--tw-bg-opacity))}input:checked:focus-visible+.\[input\:checked\:focus-visible\+\&\]\:ring-custom-500\/50{--tw-ring-color:rgba(var(--c-500),0.5)}input:checked:focus-visible+.dark\:\[input\:checked\:focus-visible\+\&\]\:ring-custom-400\/50:is(.dark *){--tw-ring-color:rgba(var(--c-400),0.5)}input:focus-visible+.\[input\:focus-visible\+\&\]\:z-10{z-index:10}input:focus-visible+.\[input\:focus-visible\+\&\]\:ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}input:focus-visible+.\[input\:focus-visible\+\&\]\:ring-gray-950\/10{--tw-ring-color:rgba(var(--gray-950),0.1)}input:focus-visible+.dark\:\[input\:focus-visible\+\&\]\:ring-white\/20:is(.dark *){--tw-ring-color:hsla(0,0%,100%,.2)} +*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.13 | MIT License | https://tailwindcss.com*/*,:after,:before{border-color:rgba(var(--gray-200),1);border-style:solid;border-width:0;box-sizing:border-box}:after,:before{--tw-content:""}:host,html{-webkit-text-size-adjust:100%;font-feature-settings:normal;-webkit-tap-highlight-color:transparent;font-family:var(--font-family),ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-variation-settings:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-feature-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:rgba(var(--gray-400),1);opacity:1}input::placeholder,textarea::placeholder{color:rgba(var(--gray-400),1);opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}[multiple],[type=date],[type=datetime-local],[type=email],[type=month],[type=number],[type=password],[type=search],[type=tel],[type=text],[type=time],[type=url],[type=week],input:where(:not([type])),select,textarea{--tw-shadow:0 0 #0000;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:rgba(var(--gray-500),var(--tw-border-opacity,1));border-radius:0;border-width:1px;font-size:1rem;line-height:1.5rem;padding:.5rem .75rem}[multiple]:focus,[type=date]:focus,[type=datetime-local]:focus,[type=email]:focus,[type=month]:focus,[type=number]:focus,[type=password]:focus,[type=search]:focus,[type=tel]:focus,[type=text]:focus,[type=time]:focus,[type=url]:focus,[type=week]:focus,input:where(:not([type])):focus,select:focus,textarea:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);border-color:#2563eb;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid transparent;outline-offset:2px}input::-moz-placeholder,textarea::-moz-placeholder{color:rgba(var(--gray-500),var(--tw-text-opacity,1));opacity:1}input::placeholder,textarea::placeholder{color:rgba(var(--gray-500),var(--tw-text-opacity,1));opacity:1}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-date-and-time-value{min-height:1.5em;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-meridiem-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-year-field{padding-bottom:0;padding-top:0}select{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}[multiple],[size]:where(select:not([size="1"])){background-image:none;background-position:0 0;background-repeat:unset;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:unset;print-color-adjust:unset}[type=checkbox],[type=radio]{--tw-shadow:0 0 #0000;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;background-origin:border-box;border-color:rgba(var(--gray-500),var(--tw-border-opacity,1));border-width:1px;color:#2563eb;display:inline-block;flex-shrink:0;height:1rem;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:1rem}[type=checkbox]{border-radius:0}[type=radio]{border-radius:100%}[type=checkbox]:focus,[type=radio]:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:2px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid transparent;outline-offset:2px}[type=checkbox]:checked,[type=radio]:checked{background-color:currentColor;background-position:50%;background-repeat:no-repeat;background-size:100% 100%;border-color:transparent}[type=checkbox]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.207 4.793a1 1 0 0 1 0 1.414l-5 5a1 1 0 0 1-1.414 0l-2-2a1 1 0 0 1 1.414-1.414L6.5 9.086l4.293-4.293a1 1 0 0 1 1.414 0z'/%3E%3C/svg%3E")}@media (forced-colors:active) {[type=checkbox]:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=radio]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='8' cy='8' r='3'/%3E%3C/svg%3E")}@media (forced-colors:active) {[type=radio]:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=checkbox]:checked:focus,[type=checkbox]:checked:hover,[type=radio]:checked:focus,[type=radio]:checked:hover{background-color:currentColor;border-color:transparent}[type=checkbox]:indeterminate{background-color:currentColor;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3E%3Cpath stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:100% 100%;border-color:transparent}@media (forced-colors:active) {[type=checkbox]:indeterminate{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=checkbox]:indeterminate:focus,[type=checkbox]:indeterminate:hover{background-color:currentColor;border-color:transparent}[type=file]{background:unset;border-color:inherit;border-radius:0;border-width:0;font-size:unset;line-height:inherit;padding:0}[type=file]:focus{outline:1px solid ButtonText;outline:1px auto -webkit-focus-ring-color}:root.dark{color-scheme:dark}[data-field-wrapper]{scroll-margin-top:8rem}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-bottom:1.2em;margin-top:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);font-weight:500;text-decoration:underline}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-bottom:1.25em;margin-top:1.25em;padding-inline-start:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-bottom:1.25em;margin-top:1.25em;padding-inline-start:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-counters);font-weight:400}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-bottom:3em;margin-top:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){border-inline-start-color:var(--tw-prose-quote-borders);border-inline-start-width:.25rem;color:var(--tw-prose-quotes);font-style:italic;font-weight:500;margin-bottom:1.6em;margin-top:1.6em;padding-inline-start:1em;quotes:"\201C""\201D""\2018""\2019"}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-size:2.25em;font-weight:800;line-height:1.1111111;margin-bottom:.8888889em;margin-top:0}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:900}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-size:1.5em;font-weight:700;line-height:1.3333333;margin-bottom:1em;margin-top:2em}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:800}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-size:1.25em;font-weight:600;line-height:1.6;margin-bottom:.6em;margin-top:1.6em}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;line-height:1.5;margin-bottom:.5em;margin-top:1.5em}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-bottom:2em;margin-top:2em}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.3125rem;box-shadow:0 0 0 1px rgb(var(--tw-prose-kbd-shadows)/10%),0 3px 0 rgb(var(--tw-prose-kbd-shadows)/10%);color:var(--tw-prose-kbd);font-family:inherit;font-size:.875em;font-weight:500;padding-inline-end:.375em;padding-bottom:.1875em;padding-top:.1875em;padding-inline-start:.375em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-size:.875em;font-weight:600}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:var(--tw-prose-pre-bg);border-radius:.375rem;color:var(--tw-prose-pre-code);font-size:.875em;font-weight:400;line-height:1.7142857;margin-bottom:1.7142857em;margin-top:1.7142857em;overflow-x:auto;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-top:.8571429em;padding-inline-start:1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:transparent;border-radius:0;border-width:0;color:inherit;font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit;padding:0}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em;line-height:1.7142857;margin-bottom:2em;margin-top:2em;table-layout:auto;width:100%}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-color:var(--tw-prose-th-borders);border-bottom-width:1px}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em;vertical-align:bottom}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-color:var(--tw-prose-td-borders);border-bottom-width:1px}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-color:var(--tw-prose-th-borders);border-top-width:1px}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body:#374151;--tw-prose-headings:#111827;--tw-prose-lead:#4b5563;--tw-prose-links:#111827;--tw-prose-bold:#111827;--tw-prose-counters:#6b7280;--tw-prose-bullets:#d1d5db;--tw-prose-hr:#e5e7eb;--tw-prose-quotes:#111827;--tw-prose-quote-borders:#e5e7eb;--tw-prose-captions:#6b7280;--tw-prose-kbd:#111827;--tw-prose-kbd-shadows:17 24 39;--tw-prose-code:#111827;--tw-prose-pre-code:#e5e7eb;--tw-prose-pre-bg:#1f2937;--tw-prose-th-borders:#d1d5db;--tw-prose-td-borders:#e5e7eb;--tw-prose-invert-body:#d1d5db;--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:#9ca3af;--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:#9ca3af;--tw-prose-invert-bullets:#4b5563;--tw-prose-invert-hr:#374151;--tw-prose-invert-quotes:#f3f4f6;--tw-prose-invert-quote-borders:#374151;--tw-prose-invert-captions:#9ca3af;--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:255 255 255;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:#d1d5db;--tw-prose-invert-pre-bg:rgba(0,0,0,.5);--tw-prose-invert-th-borders:#4b5563;--tw-prose-invert-td-borders:#374151;font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.5em;margin-top:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.75em;margin-top:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.75em;margin-top:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-top:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose-sm{font-size:.875rem;line-height:1.7142857}.prose-sm :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em;margin-top:1.1428571em}.prose-sm :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.2857143em;line-height:1.5555556;margin-bottom:.8888889em;margin-top:.8888889em}.prose-sm :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em;padding-inline-start:1.1111111em}.prose-sm :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:2.1428571em;line-height:1.2;margin-bottom:.8em;margin-top:0}.prose-sm :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.4285714em;line-height:1.4;margin-bottom:.8em;margin-top:1.6em}.prose-sm :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.2857143em;line-height:1.5555556;margin-bottom:.4444444em;margin-top:1.5555556em}.prose-sm :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){line-height:1.4285714;margin-bottom:.5714286em;margin-top:1.4285714em}.prose-sm :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7142857em;margin-top:1.7142857em}.prose-sm :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7142857em;margin-top:1.7142857em}.prose-sm :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-sm :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7142857em;margin-top:1.7142857em}.prose-sm :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.3125rem;font-size:.8571429em;padding-inline-end:.3571429em;padding-bottom:.1428571em;padding-top:.1428571em;padding-inline-start:.3571429em}.prose-sm :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em}.prose-sm :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.9em}.prose-sm :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em}.prose-sm :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.25rem;font-size:.8571429em;line-height:1.6666667;margin-bottom:1.6666667em;margin-top:1.6666667em;padding-inline-end:1em;padding-bottom:.6666667em;padding-top:.6666667em;padding-inline-start:1em}.prose-sm :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em;margin-top:1.1428571em;padding-inline-start:1.5714286em}.prose-sm :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em;margin-top:1.1428571em;padding-inline-start:1.5714286em}.prose-sm :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.2857143em;margin-top:.2857143em}.prose-sm :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.4285714em}.prose-sm :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.4285714em}.prose-sm :where(.prose-sm>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.5714286em;margin-top:.5714286em}.prose-sm :where(.prose-sm>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em}.prose-sm :where(.prose-sm>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em}.prose-sm :where(.prose-sm>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em}.prose-sm :where(.prose-sm>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em}.prose-sm :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.5714286em;margin-top:.5714286em}.prose-sm :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em;margin-top:1.1428571em}.prose-sm :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em}.prose-sm :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.2857143em;padding-inline-start:1.5714286em}.prose-sm :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2.8571429em;margin-top:2.8571429em}.prose-sm :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em;line-height:1.5}.prose-sm :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:1em;padding-bottom:.6666667em;padding-inline-start:1em}.prose-sm :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-sm :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-sm :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:1em;padding-bottom:.6666667em;padding-top:.6666667em;padding-inline-start:1em}.prose-sm :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-sm :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-sm :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7142857em;margin-top:1.7142857em}.prose-sm :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-sm :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em;line-height:1.3333333;margin-top:.6666667em}.prose-sm :where(.prose-sm>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(.prose-sm>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose-base{font-size:1rem;line-height:1.75}.prose-base :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em}.prose-base :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.25em;line-height:1.6;margin-bottom:1.2em;margin-top:1.2em}.prose-base :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.6em;margin-top:1.6em;padding-inline-start:1em}.prose-base :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:2.25em;line-height:1.1111111;margin-bottom:.8888889em;margin-top:0}.prose-base :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.5em;line-height:1.3333333;margin-bottom:1em;margin-top:2em}.prose-base :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.25em;line-height:1.6;margin-bottom:.6em;margin-top:1.6em}.prose-base :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){line-height:1.5;margin-bottom:.5em;margin-top:1.5em}.prose-base :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose-base :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose-base :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-base :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose-base :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.3125rem;font-size:.875em;padding-inline-end:.375em;padding-bottom:.1875em;padding-top:.1875em;padding-inline-start:.375em}.prose-base :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em}.prose-base :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em}.prose-base :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.9em}.prose-base :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.375rem;font-size:.875em;line-height:1.7142857;margin-bottom:1.7142857em;margin-top:1.7142857em;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-top:.8571429em;padding-inline-start:1.1428571em}.prose-base :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em;padding-inline-start:1.625em}.prose-base :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em;padding-inline-start:1.625em}.prose-base :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.5em;margin-top:.5em}.prose-base :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose-base :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose-base :where(.prose-base>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.75em;margin-top:.75em}.prose-base :where(.prose-base>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose-base :where(.prose-base>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose-base :where(.prose-base>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose-base :where(.prose-base>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose-base :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.75em;margin-top:.75em}.prose-base :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em}.prose-base :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose-base :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose-base :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:3em;margin-top:3em}.prose-base :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-base :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-base :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-base :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-base :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em;line-height:1.7142857}.prose-base :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose-base :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-base :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-base :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-top:.5714286em;padding-inline-start:.5714286em}.prose-base :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-base :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-base :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose-base :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-base :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose-base :where(.prose-base>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-base :where(.prose-base>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose-lg{font-size:1.125rem;line-height:1.7777778}.prose-lg :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em}.prose-lg :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.2222222em;line-height:1.4545455;margin-bottom:1.0909091em;margin-top:1.0909091em}.prose-lg :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.6666667em;margin-top:1.6666667em;padding-inline-start:1em}.prose-lg :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:2.6666667em;line-height:1;margin-bottom:.8333333em;margin-top:0}.prose-lg :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.6666667em;line-height:1.3333333;margin-bottom:1.0666667em;margin-top:1.8666667em}.prose-lg :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.3333333em;line-height:1.5;margin-bottom:.6666667em;margin-top:1.6666667em}.prose-lg :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){line-height:1.5555556;margin-bottom:.4444444em;margin-top:1.7777778em}.prose-lg :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7777778em;margin-top:1.7777778em}.prose-lg :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7777778em;margin-top:1.7777778em}.prose-lg :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-lg :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7777778em;margin-top:1.7777778em}.prose-lg :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.3125rem;font-size:.8888889em;padding-inline-end:.4444444em;padding-bottom:.2222222em;padding-top:.2222222em;padding-inline-start:.4444444em}.prose-lg :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em}.prose-lg :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8666667em}.prose-lg :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em}.prose-lg :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.375rem;font-size:.8888889em;line-height:1.75;margin-bottom:2em;margin-top:2em;padding-inline-end:1.5em;padding-bottom:1em;padding-top:1em;padding-inline-start:1.5em}.prose-lg :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em;padding-inline-start:1.5555556em}.prose-lg :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em;padding-inline-start:1.5555556em}.prose-lg :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.6666667em;margin-top:.6666667em}.prose-lg :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.4444444em}.prose-lg :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.4444444em}.prose-lg :where(.prose-lg>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.8888889em;margin-top:.8888889em}.prose-lg :where(.prose-lg>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em}.prose-lg :where(.prose-lg>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em}.prose-lg :where(.prose-lg>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em}.prose-lg :where(.prose-lg>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em}.prose-lg :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.8888889em;margin-top:.8888889em}.prose-lg :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em}.prose-lg :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em}.prose-lg :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.6666667em;padding-inline-start:1.5555556em}.prose-lg :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:3.1111111em;margin-top:3.1111111em}.prose-lg :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-lg :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-lg :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-lg :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-lg :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em;line-height:1.5}.prose-lg :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:.75em;padding-bottom:.75em;padding-inline-start:.75em}.prose-lg :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-lg :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-lg :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:.75em;padding-bottom:.75em;padding-top:.75em;padding-inline-start:.75em}.prose-lg :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-lg :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-lg :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7777778em;margin-top:1.7777778em}.prose-lg :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-lg :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em;line-height:1.5;margin-top:1em}.prose-lg :where(.prose-lg>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-lg :where(.prose-lg>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.inset-4{inset:1rem}.inset-x-0{left:0;right:0}.inset-x-4{left:1rem;right:1rem}.inset-y-0{bottom:0;top:0}.-bottom-1\/2{bottom:-50%}.-top-1{top:-.25rem}.-top-1\/2{top:-50%}.-top-2{top:-.5rem}.-top-3{top:-.75rem}.bottom-0{bottom:0}.bottom-1\/2{bottom:50%}.end-0{inset-inline-end:0}.end-4{inset-inline-end:1rem}.end-6{inset-inline-end:1.5rem}.left-3{left:.75rem}.start-0{inset-inline-start:0}.start-full{inset-inline-start:100%}.top-0{top:0}.top-1{top:.25rem}.top-1\/2{top:50%}.top-4{top:1rem}.top-6{top:1.5rem}.isolate{isolation:isolate}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-\[1\]{z-index:1}.order-first{order:-9999}.col-\[--col-span-default\]{grid-column:var(--col-span-default)}.col-span-full{grid-column:1/-1}.col-start-2{grid-column-start:2}.col-start-3{grid-column-start:3}.col-start-\[--col-start-default\]{grid-column-start:var(--col-start-default)}.row-start-2{grid-row-start:2}.-m-0\.5{margin:-.125rem}.-m-1{margin:-.25rem}.-m-1\.5{margin:-.375rem}.-m-2{margin:-.5rem}.-m-2\.5{margin:-.625rem}.-m-3{margin:-.75rem}.-m-3\.5{margin:-.875rem}.-mx-2{margin-left:-.5rem;margin-right:-.5rem}.-mx-4{margin-left:-1rem;margin-right:-1rem}.-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.-my-1{margin-bottom:-.25rem;margin-top:-.25rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.mx-auto{margin-left:auto;margin-right:auto}.my-16{margin-bottom:4rem;margin-top:4rem}.my-2{margin-bottom:.5rem;margin-top:.5rem}.my-4{margin-bottom:1rem;margin-top:1rem}.my-auto{margin-bottom:auto;margin-top:auto}.\!mt-0{margin-top:0!important}.-mb-4{margin-bottom:-1rem}.-mb-6{margin-bottom:-1.5rem}.-me-2{margin-inline-end:-.5rem}.-ms-0\.5{margin-inline-start:-.125rem}.-ms-1{margin-inline-start:-.25rem}.-ms-2{margin-inline-start:-.5rem}.-mt-3{margin-top:-.75rem}.-mt-4{margin-top:-1rem}.-mt-6{margin-top:-1.5rem}.-mt-7{margin-top:-1.75rem}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.me-1{margin-inline-end:.25rem}.me-3{margin-inline-end:.75rem}.me-4{margin-inline-end:1rem}.me-6{margin-inline-end:1.5rem}.ml-auto{margin-left:auto}.ms-1{margin-inline-start:.25rem}.ms-auto{margin-inline-start:auto}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-6{margin-top:1.5rem}.mt-auto{margin-top:auto}.line-clamp-\[--line-clamp\]{-webkit-box-orient:vertical;-webkit-line-clamp:var(--line-clamp);display:-webkit-box;overflow:hidden}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.inline-grid{display:inline-grid}.hidden{display:none}.h-0{height:0}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-16{height:4rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-32{height:8rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-96{height:24rem}.h-\[100dvh\],.h-dvh{height:100dvh}.h-full{height:100%}.h-screen{height:100vh}.max-h-96{max-height:24rem}.min-h-\[theme\(spacing\.48\)\]{min-height:12rem}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-1\/2{width:50%}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-16{width:4rem}.w-20{width:5rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-32{width:8rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-\[--sidebar-width\]{width:var(--sidebar-width)}.w-\[calc\(100\%\+2rem\)\]{width:calc(100% + 2rem)}.w-auto{width:auto}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.w-px{width:1px}.w-screen{width:100vw}.min-w-0{min-width:0}.min-w-\[theme\(spacing\.4\)\]{min-width:1rem}.min-w-\[theme\(spacing\.5\)\]{min-width:1.25rem}.min-w-\[theme\(spacing\.6\)\]{min-width:1.5rem}.min-w-\[theme\(spacing\.8\)\]{min-width:2rem}.\!max-w-2xl{max-width:42rem!important}.\!max-w-3xl{max-width:48rem!important}.\!max-w-4xl{max-width:56rem!important}.\!max-w-5xl{max-width:64rem!important}.\!max-w-6xl{max-width:72rem!important}.\!max-w-7xl{max-width:80rem!important}.\!max-w-\[14rem\]{max-width:14rem!important}.\!max-w-lg{max-width:32rem!important}.\!max-w-md{max-width:28rem!important}.\!max-w-sm{max-width:24rem!important}.\!max-w-xl{max-width:36rem!important}.\!max-w-xs{max-width:20rem!important}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-6xl{max-width:72rem}.max-w-7xl{max-width:80rem}.max-w-fit{max-width:-moz-fit-content;max-width:fit-content}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-max{max-width:-moz-max-content;max-width:max-content}.max-w-md{max-width:28rem}.max-w-min{max-width:-moz-min-content;max-width:min-content}.max-w-none{max-width:none}.max-w-prose{max-width:65ch}.max-w-screen-2xl{max-width:1536px}.max-w-screen-lg{max-width:1024px}.max-w-screen-md{max-width:768px}.max-w-screen-sm{max-width:640px}.max-w-screen-xl{max-width:1280px}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.table-auto{table-layout:auto}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.-translate-x-1\/4{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-1\/4{--tw-translate-x:-25%}.-translate-x-12{--tw-translate-x:-3rem}.-translate-x-12,.-translate-x-5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-5{--tw-translate-x:-1.25rem}.-translate-x-full{--tw-translate-x:-100%}.-translate-x-full,.-translate-y-1\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y:-50%}.-translate-y-12{--tw-translate-y:-3rem}.-translate-y-12,.-translate-y-3\/4{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-3\/4{--tw-translate-y:-75%}.translate-x-0{--tw-translate-x:0px}.translate-x-0,.translate-x-12{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-12{--tw-translate-x:3rem}.translate-x-5{--tw-translate-x:1.25rem}.translate-x-5,.translate-x-full{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-full{--tw-translate-x:100%}.translate-y-12{--tw-translate-y:3rem}.-rotate-180,.translate-y-12{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rotate-180{--tw-rotate:-180deg}.rotate-180{--tw-rotate:180deg}.rotate-180,.scale-100{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x:1;--tw-scale-y:1}.scale-95{--tw-scale-x:.95;--tw-scale-y:.95}.scale-95,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-move{cursor:move}.cursor-pointer{cursor:pointer}.cursor-wait{cursor:wait}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.resize-none{resize:none}.resize{resize:both}.scroll-mt-9{scroll-margin-top:2.25rem}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.columns-\[--cols-default\]{-moz-columns:var(--cols-default);columns:var(--cols-default)}.break-inside-avoid{-moz-column-break-inside:avoid;break-inside:avoid}.auto-cols-fr{grid-auto-columns:minmax(0,1fr)}.grid-flow-col{grid-auto-flow:column}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-\[--cols-default\]{grid-template-columns:var(--cols-default)}.grid-cols-\[1fr_auto_1fr\]{grid-template-columns:1fr auto 1fr}.grid-cols-\[repeat\(7\2c minmax\(theme\(spacing\.7\)\2c 1fr\)\)\]{grid-template-columns:repeat(7,minmax(1.75rem,1fr))}.grid-cols-\[repeat\(auto-fit\2c minmax\(0\2c 1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(0,1fr))}.grid-rows-\[1fr_auto_1fr\]{grid-template-rows:1fr auto 1fr}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.content-start{align-content:flex-start}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-items-start{justify-items:start}.justify-items-center{justify-items:center}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-x-1{-moz-column-gap:.25rem;column-gap:.25rem}.gap-x-1\.5{-moz-column-gap:.375rem;column-gap:.375rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.gap-x-2\.5{-moz-column-gap:.625rem;column-gap:.625rem}.gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-x-5{-moz-column-gap:1.25rem;column-gap:1.25rem}.gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.gap-y-1{row-gap:.25rem}.gap-y-1\.5{row-gap:.375rem}.gap-y-2{row-gap:.5rem}.gap-y-3{row-gap:.75rem}.gap-y-4{row-gap:1rem}.gap-y-6{row-gap:1.5rem}.gap-y-7{row-gap:1.75rem}.gap-y-8{row-gap:2rem}.gap-y-px{row-gap:1px}.-space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-.25rem*var(--tw-space-x-reverse))}.-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-.5rem*var(--tw-space-x-reverse))}.-space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-.75rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-.75rem*var(--tw-space-x-reverse))}.-space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-1rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-1rem*var(--tw-space-x-reverse))}.-space-x-5>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-1.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-1.25rem*var(--tw-space-x-reverse))}.-space-x-6>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-1.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-1.5rem*var(--tw-space-x-reverse))}.-space-x-7>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-1.75rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-1.75rem*var(--tw-space-x-reverse))}.-space-x-8>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-2rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-2rem*var(--tw-space-x-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.75rem*var(--tw-space-y-reverse));margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.5rem*var(--tw-space-y-reverse));margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)))}.divide-x>:not([hidden])~:not([hidden]){--tw-divide-x-reverse:0;border-left-width:calc(1px*(1 - var(--tw-divide-x-reverse)));border-right-width:calc(1px*var(--tw-divide-x-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(1px*var(--tw-divide-y-reverse));border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))}.divide-gray-100>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgba(var(--gray-100),var(--tw-divide-opacity))}.divide-gray-200>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgba(var(--gray-200),var(--tw-divide-opacity))}.self-start{align-self:flex-start}.self-stretch{align-self:stretch}.justify-self-start{justify-self:start}.justify-self-end{justify-self:end}.justify-self-center{justify-self:center}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-x-clip{overflow-x:clip}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.rounded-b-xl{border-bottom-left-radius:.75rem;border-bottom-right-radius:.75rem}.rounded-t-xl{border-top-left-radius:.75rem;border-top-right-radius:.75rem}.border{border-width:1px}.border-2{border-width:2px}.border-x-\[0\.5px\]{border-left-width:.5px;border-right-width:.5px}.border-y{border-bottom-width:1px;border-top-width:1px}.\!border-t-0{border-top-width:0!important}.border-b{border-bottom-width:1px}.border-b-0{border-bottom-width:0}.border-e{border-inline-end-width:1px}.border-s{border-inline-start-width:1px}.border-t{border-top-width:1px}.\!border-none{border-style:none!important}.border-none{border-style:none}.border-gray-100{--tw-border-opacity:1;border-color:rgba(var(--gray-100),var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity:1;border-color:rgba(var(--gray-200),var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgba(var(--gray-300),var(--tw-border-opacity))}.border-gray-600{--tw-border-opacity:1;border-color:rgba(var(--gray-600),var(--tw-border-opacity))}.border-primary-500{--tw-border-opacity:1;border-color:rgba(var(--primary-500),var(--tw-border-opacity))}.border-primary-600{--tw-border-opacity:1;border-color:rgba(var(--primary-600),var(--tw-border-opacity))}.border-transparent{border-color:transparent}.border-t-gray-200{--tw-border-opacity:1;border-top-color:rgba(var(--gray-200),var(--tw-border-opacity))}.\!bg-gray-50{--tw-bg-opacity:1!important;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))!important}.\!bg-gray-700{--tw-bg-opacity:1!important;background-color:rgba(var(--gray-700),var(--tw-bg-opacity))!important}.bg-black\/50{background-color:rgba(0,0,0,.5)}.bg-custom-100{--tw-bg-opacity:1;background-color:rgba(var(--c-100),var(--tw-bg-opacity))}.bg-custom-50{--tw-bg-opacity:1;background-color:rgba(var(--c-50),var(--tw-bg-opacity))}.bg-custom-600{--tw-bg-opacity:1;background-color:rgba(var(--c-600),var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgba(var(--gray-100),var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgba(var(--gray-200),var(--tw-bg-opacity))}.bg-gray-300{--tw-bg-opacity:1;background-color:rgba(var(--gray-300),var(--tw-bg-opacity))}.bg-gray-400{--tw-bg-opacity:1;background-color:rgba(var(--gray-400),var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.bg-gray-950\/50{background-color:rgba(var(--gray-950),.5)}.bg-primary-500{--tw-bg-opacity:1;background-color:rgba(var(--primary-500),var(--tw-bg-opacity))}.bg-primary-600{--tw-bg-opacity:1;background-color:rgba(var(--primary-600),var(--tw-bg-opacity))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-white\/0{background-color:hsla(0,0%,100%,0)}.bg-white\/5{background-color:hsla(0,0%,100%,.05)}.\!bg-none{background-image:none!important}.bg-cover{background-size:cover}.bg-center{background-position:50%}.object-cover{-o-object-fit:cover;object-fit:cover}.object-center{-o-object-position:center;object-position:center}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-0\.5{padding-left:.125rem;padding-right:.125rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-bottom:.125rem;padding-top:.125rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.py-12{padding-bottom:3rem;padding-top:3rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-2\.5{padding-bottom:.625rem;padding-top:.625rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.py-3\.5{padding-bottom:.875rem;padding-top:.875rem}.py-4{padding-bottom:1rem;padding-top:1rem}.py-5{padding-bottom:1.25rem;padding-top:1.25rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.py-8{padding-bottom:2rem;padding-top:2rem}.pb-4{padding-bottom:1rem}.pb-6{padding-bottom:1.5rem}.pe-0{padding-inline-end:0}.pe-1{padding-inline-end:.25rem}.pe-2{padding-inline-end:.5rem}.pe-3{padding-inline-end:.75rem}.pe-4{padding-inline-end:1rem}.pe-6{padding-inline-end:1.5rem}.pe-8{padding-inline-end:2rem}.ps-0{padding-inline-start:0}.ps-1{padding-inline-start:.25rem}.ps-2{padding-inline-start:.5rem}.ps-3{padding-inline-start:.75rem}.ps-4{padding-inline-start:1rem}.ps-\[5\.25rem\]{padding-inline-start:5.25rem}.pt-0{padding-top:0}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-6{padding-top:1.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-justify{text-align:justify}.text-start{text-align:start}.text-end{text-align:end}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.align-bottom{vertical-align:bottom}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:var(--font-family),ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}.font-serif{font-family:ui-serif,Georgia,Cambria,Times New Roman,Times,serif}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-black{font-weight:900}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-extralight{font-weight:200}.font-light{font-weight:300}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.font-thin{font-weight:100}.capitalize{text-transform:capitalize}.italic{font-style:italic}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.leading-loose{line-height:2}.tracking-tight{letter-spacing:-.025em}.tracking-tighter{letter-spacing:-.05em}.text-custom-400{--tw-text-opacity:1;color:rgba(var(--c-400),var(--tw-text-opacity))}.text-custom-50{--tw-text-opacity:1;color:rgba(var(--c-50),var(--tw-text-opacity))}.text-custom-500{--tw-text-opacity:1;color:rgba(var(--c-500),var(--tw-text-opacity))}.text-custom-600{--tw-text-opacity:1;color:rgba(var(--c-600),var(--tw-text-opacity))}.text-custom-700\/50{color:rgba(var(--c-700),.5)}.text-danger-600{--tw-text-opacity:1;color:rgba(var(--danger-600),var(--tw-text-opacity))}.text-gray-100{--tw-text-opacity:1;color:rgba(var(--gray-100),var(--tw-text-opacity))}.text-gray-200{--tw-text-opacity:1;color:rgba(var(--gray-200),var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgba(var(--gray-600),var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgba(var(--gray-700),var(--tw-text-opacity))}.text-gray-700\/50{color:rgba(var(--gray-700),.5)}.text-gray-950{--tw-text-opacity:1;color:rgba(var(--gray-950),var(--tw-text-opacity))}.text-primary-400{--tw-text-opacity:1;color:rgba(var(--primary-400),var(--tw-text-opacity))}.text-primary-500{--tw-text-opacity:1;color:rgba(var(--primary-500),var(--tw-text-opacity))}.text-primary-600{--tw-text-opacity:1;color:rgba(var(--primary-600),var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.underline{text-decoration-line:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-sm,.shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}.outline-none{outline:2px solid transparent;outline-offset:2px}.ring{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring,.ring-0{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-1,.ring-2{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-4{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-inset{--tw-ring-inset:inset}.ring-custom-600{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--c-600),var(--tw-ring-opacity))}.ring-custom-600\/10{--tw-ring-color:rgba(var(--c-600),0.1)}.ring-custom-600\/20{--tw-ring-color:rgba(var(--c-600),0.2)}.ring-danger-600{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-600),var(--tw-ring-opacity))}.ring-gray-200{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--gray-200),var(--tw-ring-opacity))}.ring-gray-300{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--gray-300),var(--tw-ring-opacity))}.ring-gray-600\/10{--tw-ring-color:rgba(var(--gray-600),0.1)}.ring-gray-900\/10{--tw-ring-color:rgba(var(--gray-900),0.1)}.ring-gray-950\/10{--tw-ring-color:rgba(var(--gray-950),0.1)}.ring-gray-950\/5{--tw-ring-color:rgba(var(--gray-950),0.05)}.ring-white{--tw-ring-opacity:1;--tw-ring-color:rgb(255 255 255/var(--tw-ring-opacity))}.ring-white\/10{--tw-ring-color:hsla(0,0%,100%,.1)}.blur{--tw-blur:blur(8px)}.blur,.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.delay-100{transition-delay:.1s}.duration-100{transition-duration:.1s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.duration-75{transition-duration:75ms}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.\[transform\:translateZ\(0\)\]{transform:translateZ(0)}.dark\:prose-invert:is(.dark *){--tw-prose-body:var(--tw-prose-invert-body);--tw-prose-headings:var(--tw-prose-invert-headings);--tw-prose-lead:var(--tw-prose-invert-lead);--tw-prose-links:var(--tw-prose-invert-links);--tw-prose-bold:var(--tw-prose-invert-bold);--tw-prose-counters:var(--tw-prose-invert-counters);--tw-prose-bullets:var(--tw-prose-invert-bullets);--tw-prose-hr:var(--tw-prose-invert-hr);--tw-prose-quotes:var(--tw-prose-invert-quotes);--tw-prose-quote-borders:var(--tw-prose-invert-quote-borders);--tw-prose-captions:var(--tw-prose-invert-captions);--tw-prose-kbd:var(--tw-prose-invert-kbd);--tw-prose-kbd-shadows:var(--tw-prose-invert-kbd-shadows);--tw-prose-code:var(--tw-prose-invert-code);--tw-prose-pre-code:var(--tw-prose-invert-pre-code);--tw-prose-pre-bg:var(--tw-prose-invert-pre-bg);--tw-prose-th-borders:var(--tw-prose-invert-th-borders);--tw-prose-td-borders:var(--tw-prose-invert-td-borders)}.placeholder\:text-gray-400::-moz-placeholder{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.placeholder\:text-gray-400::placeholder{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:inset-y-0:before{bottom:0;content:var(--tw-content);top:0}.before\:start-0:before{content:var(--tw-content);inset-inline-start:0}.before\:h-full:before{content:var(--tw-content);height:100%}.before\:w-0\.5:before{content:var(--tw-content);width:.125rem}.before\:bg-primary-600:before{--tw-bg-opacity:1;background-color:rgba(var(--primary-600),var(--tw-bg-opacity));content:var(--tw-content)}.first\:border-s-0:first-child{border-inline-start-width:0}.first\:border-t-0:first-child{border-top-width:0}.last\:border-e-0:last-child{border-inline-end-width:0}.first-of-type\:ps-1:first-of-type{padding-inline-start:.25rem}.last-of-type\:pe-1:last-of-type{padding-inline-end:.25rem}.checked\:ring-0:checked{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-within\:bg-gray-50:focus-within{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.hover\:bg-custom-400\/10:hover{background-color:rgba(var(--c-400),.1)}.hover\:bg-custom-50:hover{--tw-bg-opacity:1;background-color:rgba(var(--c-50),var(--tw-bg-opacity))}.hover\:bg-custom-500:hover{--tw-bg-opacity:1;background-color:rgba(var(--c-500),var(--tw-bg-opacity))}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgba(var(--gray-100),var(--tw-bg-opacity))}.hover\:bg-gray-400\/10:hover{background-color:rgba(var(--gray-400),.1)}.hover\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.hover\:text-custom-600:hover{--tw-text-opacity:1;color:rgba(var(--c-600),var(--tw-text-opacity))}.hover\:text-custom-700\/75:hover{color:rgba(var(--c-700),.75)}.hover\:text-gray-500:hover{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.hover\:text-gray-700:hover{--tw-text-opacity:1;color:rgba(var(--gray-700),var(--tw-text-opacity))}.hover\:text-gray-700\/75:hover{color:rgba(var(--gray-700),.75)}.hover\:opacity-100:hover{opacity:1}.focus\:ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-0:focus,.focus\:ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-danger-600:focus{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-600),var(--tw-ring-opacity))}.focus\:ring-primary-600:focus{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-600),var(--tw-ring-opacity))}.focus\:ring-offset-0:focus{--tw-ring-offset-width:0px}.checked\:focus\:ring-danger-500\/50:focus:checked{--tw-ring-color:rgba(var(--danger-500),0.5)}.checked\:focus\:ring-primary-500\/50:focus:checked{--tw-ring-color:rgba(var(--primary-500),0.5)}.focus-visible\:z-10:focus-visible{z-index:10}.focus-visible\:border-primary-500:focus-visible{--tw-border-opacity:1;border-color:rgba(var(--primary-500),var(--tw-border-opacity))}.focus-visible\:bg-custom-50:focus-visible{--tw-bg-opacity:1;background-color:rgba(var(--c-50),var(--tw-bg-opacity))}.focus-visible\:bg-gray-100:focus-visible{--tw-bg-opacity:1;background-color:rgba(var(--gray-100),var(--tw-bg-opacity))}.focus-visible\:bg-gray-50:focus-visible{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.focus-visible\:text-custom-700\/75:focus-visible{color:rgba(var(--c-700),.75)}.focus-visible\:text-gray-500:focus-visible{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.focus-visible\:text-gray-700\/75:focus-visible{color:rgba(var(--gray-700),.75)}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-1:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\:ring-inset:focus-visible{--tw-ring-inset:inset}.focus-visible\:ring-custom-500\/50:focus-visible{--tw-ring-color:rgba(var(--c-500),0.5)}.focus-visible\:ring-custom-600:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--c-600),var(--tw-ring-opacity))}.focus-visible\:ring-gray-400\/40:focus-visible{--tw-ring-color:rgba(var(--gray-400),0.4)}.focus-visible\:ring-primary-500:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-500),var(--tw-ring-opacity))}.focus-visible\:ring-primary-600:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-600),var(--tw-ring-opacity))}.enabled\:cursor-wait:enabled{cursor:wait}.enabled\:opacity-70:enabled{opacity:.7}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:bg-gray-50:disabled{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.disabled\:text-gray-50:disabled{--tw-text-opacity:1;color:rgba(var(--gray-50),var(--tw-text-opacity))}.disabled\:text-gray-500:disabled{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.disabled\:opacity-70:disabled{opacity:.7}.disabled\:\[-webkit-text-fill-color\:theme\(colors\.gray\.500\)\]:disabled{-webkit-text-fill-color:rgba(var(--gray-500),1)}.disabled\:placeholder\:\[-webkit-text-fill-color\:theme\(colors\.gray\.400\)\]:disabled::-moz-placeholder{-webkit-text-fill-color:rgba(var(--gray-400),1)}.disabled\:placeholder\:\[-webkit-text-fill-color\:theme\(colors\.gray\.400\)\]:disabled::placeholder{-webkit-text-fill-color:rgba(var(--gray-400),1)}.disabled\:checked\:bg-current:checked:disabled{background-color:currentColor}.disabled\:checked\:text-gray-400:checked:disabled{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.group\/item:first-child .group-first\/item\:rounded-s-lg{border-end-start-radius:.5rem;border-start-start-radius:.5rem}.group\/item:last-child .group-last\/item\:rounded-e-lg{border-end-end-radius:.5rem;border-start-end-radius:.5rem}.group:hover .group-hover\:text-gray-500,.group\/button:hover .group-hover\/button\:text-gray-500{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.group:hover .group-hover\:text-gray-700{--tw-text-opacity:1;color:rgba(var(--gray-700),var(--tw-text-opacity))}.group\/item:hover .group-hover\/item\:underline,.group\/link:hover .group-hover\/link\:underline{text-decoration-line:underline}.group:focus-visible .group-focus-visible\:text-gray-500{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.group:focus-visible .group-focus-visible\:text-gray-700{--tw-text-opacity:1;color:rgba(var(--gray-700),var(--tw-text-opacity))}.group\/item:focus-visible .group-focus-visible\/item\:underline{text-decoration-line:underline}.group\/link:focus-visible .group-focus-visible\/link\:underline{text-decoration-line:underline}.dark\:flex:is(.dark *){display:flex}.dark\:hidden:is(.dark *){display:none}.dark\:divide-white\/10:is(.dark *)>:not([hidden])~:not([hidden]){border-color:hsla(0,0%,100%,.1)}.dark\:divide-white\/5:is(.dark *)>:not([hidden])~:not([hidden]){border-color:hsla(0,0%,100%,.05)}.dark\:border-gray-600:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--gray-600),var(--tw-border-opacity))}.dark\:border-gray-700:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--gray-700),var(--tw-border-opacity))}.dark\:border-primary-500:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--primary-500),var(--tw-border-opacity))}.dark\:border-white\/10:is(.dark *){border-color:hsla(0,0%,100%,.1)}.dark\:border-white\/5:is(.dark *){border-color:hsla(0,0%,100%,.05)}.dark\:border-t-white\/10:is(.dark *){border-top-color:hsla(0,0%,100%,.1)}.dark\:\!bg-gray-700:is(.dark *){--tw-bg-opacity:1!important;background-color:rgba(var(--gray-700),var(--tw-bg-opacity))!important}.dark\:bg-custom-400\/10:is(.dark *){background-color:rgba(var(--c-400),.1)}.dark\:bg-custom-500:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--c-500),var(--tw-bg-opacity))}.dark\:bg-custom-500\/20:is(.dark *){background-color:rgba(var(--c-500),.2)}.dark\:bg-gray-400\/10:is(.dark *){background-color:rgba(var(--gray-400),.1)}.dark\:bg-gray-500:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-500),var(--tw-bg-opacity))}.dark\:bg-gray-500\/20:is(.dark *){background-color:rgba(var(--gray-500),.2)}.dark\:bg-gray-600:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-600),var(--tw-bg-opacity))}.dark\:bg-gray-700:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-700),var(--tw-bg-opacity))}.dark\:bg-gray-800:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-800),var(--tw-bg-opacity))}.dark\:bg-gray-900:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-900),var(--tw-bg-opacity))}.dark\:bg-gray-900\/30:is(.dark *){background-color:rgba(var(--gray-900),.3)}.dark\:bg-gray-950:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-950),var(--tw-bg-opacity))}.dark\:bg-gray-950\/75:is(.dark *){background-color:rgba(var(--gray-950),.75)}.dark\:bg-primary-400:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--primary-400),var(--tw-bg-opacity))}.dark\:bg-primary-500:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--primary-500),var(--tw-bg-opacity))}.dark\:bg-transparent:is(.dark *){background-color:transparent}.dark\:bg-white\/10:is(.dark *){background-color:hsla(0,0%,100%,.1)}.dark\:bg-white\/5:is(.dark *){background-color:hsla(0,0%,100%,.05)}.dark\:text-custom-300\/50:is(.dark *){color:rgba(var(--c-300),.5)}.dark\:text-custom-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--c-400),var(--tw-text-opacity))}.dark\:text-custom-400\/10:is(.dark *){color:rgba(var(--c-400),.1)}.dark\:text-danger-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--danger-400),var(--tw-text-opacity))}.dark\:text-danger-500:is(.dark *){--tw-text-opacity:1;color:rgba(var(--danger-500),var(--tw-text-opacity))}.dark\:text-gray-200:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-200),var(--tw-text-opacity))}.dark\:text-gray-300\/50:is(.dark *){color:rgba(var(--gray-300),.5)}.dark\:text-gray-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.dark\:text-gray-500:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.dark\:text-gray-700:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-700),var(--tw-text-opacity))}.dark\:text-gray-800:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-800),var(--tw-text-opacity))}.dark\:text-primary-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--primary-400),var(--tw-text-opacity))}.dark\:text-primary-500:is(.dark *){--tw-text-opacity:1;color:rgba(var(--primary-500),var(--tw-text-opacity))}.dark\:text-white:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.dark\:text-white\/5:is(.dark *){color:hsla(0,0%,100%,.05)}.dark\:ring-custom-400\/30:is(.dark *){--tw-ring-color:rgba(var(--c-400),0.3)}.dark\:ring-custom-500:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--c-500),var(--tw-ring-opacity))}.dark\:ring-danger-500:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-500),var(--tw-ring-opacity))}.dark\:ring-gray-400\/20:is(.dark *){--tw-ring-color:rgba(var(--gray-400),0.2)}.dark\:ring-gray-50\/10:is(.dark *){--tw-ring-color:rgba(var(--gray-50),0.1)}.dark\:ring-gray-700:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--gray-700),var(--tw-ring-opacity))}.dark\:ring-gray-900:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--gray-900),var(--tw-ring-opacity))}.dark\:ring-white\/10:is(.dark *){--tw-ring-color:hsla(0,0%,100%,.1)}.dark\:ring-white\/20:is(.dark *){--tw-ring-color:hsla(0,0%,100%,.2)}.dark\:placeholder\:text-gray-500:is(.dark *)::-moz-placeholder{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.dark\:placeholder\:text-gray-500:is(.dark *)::placeholder{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.dark\:before\:bg-primary-500:is(.dark *):before{--tw-bg-opacity:1;background-color:rgba(var(--primary-500),var(--tw-bg-opacity));content:var(--tw-content)}.dark\:checked\:bg-danger-500:checked:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--danger-500),var(--tw-bg-opacity))}.dark\:checked\:bg-primary-500:checked:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--primary-500),var(--tw-bg-opacity))}.dark\:focus-within\:bg-white\/5:focus-within:is(.dark *){background-color:hsla(0,0%,100%,.05)}.dark\:hover\:bg-custom-400:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--c-400),var(--tw-bg-opacity))}.dark\:hover\:bg-custom-400\/10:hover:is(.dark *){background-color:rgba(var(--c-400),.1)}.dark\:hover\:bg-white\/10:hover:is(.dark *){background-color:hsla(0,0%,100%,.1)}.dark\:hover\:bg-white\/5:hover:is(.dark *){background-color:hsla(0,0%,100%,.05)}.dark\:hover\:text-custom-300:hover:is(.dark *){--tw-text-opacity:1;color:rgba(var(--c-300),var(--tw-text-opacity))}.dark\:hover\:text-custom-300\/75:hover:is(.dark *){color:rgba(var(--c-300),.75)}.dark\:hover\:text-gray-200:hover:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-200),var(--tw-text-opacity))}.dark\:hover\:text-gray-300\/75:hover:is(.dark *){color:rgba(var(--gray-300),.75)}.dark\:hover\:text-gray-400:hover:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.dark\:hover\:ring-white\/20:hover:is(.dark *){--tw-ring-color:hsla(0,0%,100%,.2)}.dark\:focus\:ring-danger-500:focus:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-500),var(--tw-ring-opacity))}.dark\:focus\:ring-primary-500:focus:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-500),var(--tw-ring-opacity))}.dark\:checked\:focus\:ring-danger-400\/50:focus:checked:is(.dark *){--tw-ring-color:rgba(var(--danger-400),0.5)}.dark\:checked\:focus\:ring-primary-400\/50:focus:checked:is(.dark *){--tw-ring-color:rgba(var(--primary-400),0.5)}.dark\:focus-visible\:border-primary-500:focus-visible:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--primary-500),var(--tw-border-opacity))}.dark\:focus-visible\:bg-custom-400\/10:focus-visible:is(.dark *){background-color:rgba(var(--c-400),.1)}.dark\:focus-visible\:bg-white\/5:focus-visible:is(.dark *){background-color:hsla(0,0%,100%,.05)}.dark\:focus-visible\:text-custom-300\/75:focus-visible:is(.dark *){color:rgba(var(--c-300),.75)}.dark\:focus-visible\:text-gray-300\/75:focus-visible:is(.dark *){color:rgba(var(--gray-300),.75)}.dark\:focus-visible\:text-gray-400:focus-visible:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.dark\:focus-visible\:ring-custom-400\/50:focus-visible:is(.dark *){--tw-ring-color:rgba(var(--c-400),0.5)}.dark\:focus-visible\:ring-custom-500:focus-visible:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--c-500),var(--tw-ring-opacity))}.dark\:focus-visible\:ring-primary-500:focus-visible:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-500),var(--tw-ring-opacity))}.dark\:disabled\:bg-transparent:disabled:is(.dark *){background-color:transparent}.dark\:disabled\:text-gray-400:disabled:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.dark\:disabled\:ring-white\/10:disabled:is(.dark *){--tw-ring-color:hsla(0,0%,100%,.1)}.dark\:disabled\:\[-webkit-text-fill-color\:theme\(colors\.gray\.400\)\]:disabled:is(.dark *){-webkit-text-fill-color:rgba(var(--gray-400),1)}.dark\:disabled\:placeholder\:\[-webkit-text-fill-color\:theme\(colors\.gray\.500\)\]:disabled:is(.dark *)::-moz-placeholder{-webkit-text-fill-color:rgba(var(--gray-500),1)}.dark\:disabled\:placeholder\:\[-webkit-text-fill-color\:theme\(colors\.gray\.500\)\]:disabled:is(.dark *)::placeholder{-webkit-text-fill-color:rgba(var(--gray-500),1)}.dark\:disabled\:checked\:bg-gray-600:checked:disabled:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-600),var(--tw-bg-opacity))}.group\/button:hover .dark\:group-hover\/button\:text-gray-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.group:hover .dark\:group-hover\:text-gray-200:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-200),var(--tw-text-opacity))}.group:hover .dark\:group-hover\:text-gray-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.group:focus-visible .dark\:group-focus-visible\:text-gray-200:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-200),var(--tw-text-opacity))}.group:focus-visible .dark\:group-focus-visible\:text-gray-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}@media (min-width:640px){.sm\:relative{position:relative}.sm\:inset-x-auto{left:auto;right:auto}.sm\:end-0{inset-inline-end:0}.sm\:col-\[--col-span-sm\]{grid-column:var(--col-span-sm)}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:col-start-\[--col-start-sm\]{grid-column-start:var(--col-start-sm)}.sm\:-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.sm\:-my-2{margin-bottom:-.5rem;margin-top:-.5rem}.sm\:ms-auto{margin-inline-start:auto}.sm\:mt-7{margin-top:1.75rem}.sm\:block{display:block}.sm\:flex{display:flex}.sm\:table-cell{display:table-cell}.sm\:grid{display:grid}.sm\:inline-grid{display:inline-grid}.sm\:hidden{display:none}.sm\:w-\[calc\(100\%\+3rem\)\]{width:calc(100% + 3rem)}.sm\:w-screen{width:100vw}.sm\:max-w-2xl{max-width:42rem}.sm\:max-w-3xl{max-width:48rem}.sm\:max-w-4xl{max-width:56rem}.sm\:max-w-5xl{max-width:64rem}.sm\:max-w-6xl{max-width:72rem}.sm\:max-w-7xl{max-width:80rem}.sm\:max-w-lg{max-width:32rem}.sm\:max-w-md{max-width:28rem}.sm\:max-w-sm{max-width:24rem}.sm\:max-w-xl{max-width:36rem}.sm\:max-w-xs{max-width:20rem}.sm\:columns-\[--cols-sm\]{-moz-columns:var(--cols-sm);columns:var(--cols-sm)}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-\[--cols-sm\]{grid-template-columns:var(--cols-sm)}.sm\:grid-cols-\[repeat\(auto-fit\2c minmax\(0\2c 1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(0,1fr))}.sm\:grid-rows-\[1fr_auto_3fr\]{grid-template-rows:1fr auto 3fr}.sm\:flex-row{flex-direction:row}.sm\:flex-nowrap{flex-wrap:nowrap}.sm\:items-start{align-items:flex-start}.sm\:items-end{align-items:flex-end}.sm\:items-center{align-items:center}.sm\:justify-between{justify-content:space-between}.sm\:gap-1{gap:.25rem}.sm\:gap-3{gap:.75rem}.sm\:gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.sm\:rounded-xl{border-radius:.75rem}.sm\:p-10{padding:2.5rem}.sm\:px-12{padding-left:3rem;padding-right:3rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.sm\:pe-3{padding-inline-end:.75rem}.sm\:pe-6{padding-inline-end:1.5rem}.sm\:ps-3{padding-inline-start:.75rem}.sm\:ps-6{padding-inline-start:1.5rem}.sm\:pt-1\.5{padding-top:.375rem}.sm\:text-3xl{font-size:1.875rem;line-height:2.25rem}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}.sm\:leading-6{line-height:1.5rem}.sm\:first-of-type\:ps-3:first-of-type{padding-inline-start:.75rem}.sm\:first-of-type\:ps-6:first-of-type{padding-inline-start:1.5rem}.sm\:last-of-type\:pe-3:last-of-type{padding-inline-end:.75rem}.sm\:last-of-type\:pe-6:last-of-type{padding-inline-end:1.5rem}}@media (min-width:768px){.md\:bottom-4{bottom:1rem}.md\:order-first{order:-9999}.md\:col-\[--col-span-md\]{grid-column:var(--col-span-md)}.md\:col-span-2{grid-column:span 2/span 2}.md\:col-start-\[--col-start-md\]{grid-column-start:var(--col-start-md)}.md\:block{display:block}.md\:flex{display:flex}.md\:table-cell{display:table-cell}.md\:inline-grid{display:inline-grid}.md\:hidden{display:none}.md\:w-max{width:-moz-max-content;width:max-content}.md\:max-w-60{max-width:15rem}.md\:columns-\[--cols-md\]{-moz-columns:var(--cols-md);columns:var(--cols-md)}.md\:grid-flow-col{grid-auto-flow:column}.md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-\[--cols-md\]{grid-template-columns:var(--cols-md)}.md\:flex-row{flex-direction:row}.md\:items-start{align-items:flex-start}.md\:items-end{align-items:flex-end}.md\:items-center{align-items:center}.md\:justify-end{justify-content:flex-end}.md\:gap-1{gap:.25rem}.md\:gap-3{gap:.75rem}.md\:divide-y-0>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(0px*var(--tw-divide-y-reverse));border-top-width:calc(0px*(1 - var(--tw-divide-y-reverse)))}.md\:overflow-x-auto{overflow-x:auto}.md\:rounded-xl{border-radius:.75rem}.md\:p-20{padding:5rem}.md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\:pe-6{padding-inline-end:1.5rem}.md\:ps-3{padding-inline-start:.75rem}}@media (min-width:1024px){.lg\:sticky{position:sticky}.lg\:z-0{z-index:0}.lg\:col-\[--col-span-lg\]{grid-column:var(--col-span-lg)}.lg\:col-start-\[--col-start-lg\]{grid-column-start:var(--col-start-lg)}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:table-cell{display:table-cell}.lg\:inline-grid{display:inline-grid}.lg\:hidden{display:none}.lg\:h-full{height:100%}.lg\:max-w-xs{max-width:20rem}.lg\:-translate-x-full{--tw-translate-x:-100%}.lg\:-translate-x-full,.lg\:translate-x-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lg\:translate-x-0{--tw-translate-x:0px}.lg\:columns-\[--cols-lg\]{-moz-columns:var(--cols-lg);columns:var(--cols-lg)}.lg\:grid-cols-\[--cols-lg\]{grid-template-columns:var(--cols-lg)}.lg\:flex-row{flex-direction:row}.lg\:items-start{align-items:flex-start}.lg\:items-end{align-items:flex-end}.lg\:items-center{align-items:center}.lg\:gap-1{gap:.25rem}.lg\:gap-3{gap:.75rem}.lg\:bg-transparent{background-color:transparent}.lg\:px-8{padding-left:2rem;padding-right:2rem}.lg\:pe-8{padding-inline-end:2rem}.lg\:shadow-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}.lg\:shadow-none,.lg\:shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.lg\:shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.lg\:ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.lg\:transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.lg\:transition-none{transition-property:none}.lg\:delay-100{transition-delay:.1s}.dark\:lg\:bg-transparent:is(.dark *){background-color:transparent}}@media (min-width:1280px){.xl\:col-\[--col-span-xl\]{grid-column:var(--col-span-xl)}.xl\:col-start-\[--col-start-xl\]{grid-column-start:var(--col-start-xl)}.xl\:block{display:block}.xl\:table-cell{display:table-cell}.xl\:inline-grid{display:inline-grid}.xl\:hidden{display:none}.xl\:columns-\[--cols-xl\]{-moz-columns:var(--cols-xl);columns:var(--cols-xl)}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-\[--cols-xl\]{grid-template-columns:var(--cols-xl)}.xl\:flex-row{flex-direction:row}.xl\:items-start{align-items:flex-start}.xl\:items-end{align-items:flex-end}.xl\:items-center{align-items:center}.xl\:gap-1{gap:.25rem}.xl\:gap-3{gap:.75rem}}@media (min-width:1536px){.\32xl\:col-\[--col-span-2xl\]{grid-column:var(--col-span-2xl)}.\32xl\:col-start-\[--col-start-2xl\]{grid-column-start:var(--col-start-2xl)}.\32xl\:block{display:block}.\32xl\:table-cell{display:table-cell}.\32xl\:inline-grid{display:inline-grid}.\32xl\:hidden{display:none}.\32xl\:columns-\[--cols-2xl\]{-moz-columns:var(--cols-2xl);columns:var(--cols-2xl)}.\32xl\:grid-cols-\[--cols-2xl\]{grid-template-columns:var(--cols-2xl)}.\32xl\:flex-row{flex-direction:row}.\32xl\:items-start{align-items:flex-start}.\32xl\:items-end{align-items:flex-end}.\32xl\:items-center{align-items:center}.\32xl\:gap-1{gap:.25rem}.\32xl\:gap-3{gap:.75rem}}.ltr\:hidden:where([dir=ltr],[dir=ltr] *){display:none}.rtl\:hidden:where([dir=rtl],[dir=rtl] *){display:none}.rtl\:-translate-x-0:where([dir=rtl],[dir=rtl] *){--tw-translate-x:-0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:-translate-x-5:where([dir=rtl],[dir=rtl] *){--tw-translate-x:-1.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:-translate-x-full:where([dir=rtl],[dir=rtl] *){--tw-translate-x:-100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:translate-x-1\/2:where([dir=rtl],[dir=rtl] *){--tw-translate-x:50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:translate-x-1\/4:where([dir=rtl],[dir=rtl] *){--tw-translate-x:25%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:translate-x-full:where([dir=rtl],[dir=rtl] *){--tw-translate-x:100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:rotate-180:where([dir=rtl],[dir=rtl] *){--tw-rotate:180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:flex-row-reverse:where([dir=rtl],[dir=rtl] *){flex-direction:row-reverse}.rtl\:divide-x-reverse:where([dir=rtl],[dir=rtl] *)>:not([hidden])~:not([hidden]){--tw-divide-x-reverse:1}@media (min-width:1024px){.rtl\:lg\:-translate-x-0:where([dir=rtl],[dir=rtl] *){--tw-translate-x:-0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:lg\:translate-x-full:where([dir=rtl],[dir=rtl] *){--tw-translate-x:100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}}.\[\&\.trix-active\]\:bg-gray-50.trix-active{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.\[\&\.trix-active\]\:text-primary-600.trix-active{--tw-text-opacity:1;color:rgba(var(--primary-600),var(--tw-text-opacity))}.dark\:\[\&\.trix-active\]\:bg-white\/5.trix-active:is(.dark *){background-color:hsla(0,0%,100%,.05)}.dark\:\[\&\.trix-active\]\:text-primary-400.trix-active:is(.dark *){--tw-text-opacity:1;color:rgba(var(--primary-400),var(--tw-text-opacity))}.\[\&\:\:-ms-reveal\]\:hidden::-ms-reveal{display:none}.\[\&\:not\(\:first-of-type\)\]\:border-s:not(:first-of-type){border-inline-start-width:1px}.\[\&\:not\(\:has\(\.fi-ac-action\:focus\)\)\]\:focus-within\:ring-2:focus-within:not(:has(.fi-ac-action:focus)){--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.\[\&\:not\(\:has\(\.fi-ac-action\:focus\)\)\]\:focus-within\:ring-danger-600:focus-within:not(:has(.fi-ac-action:focus)){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-600),var(--tw-ring-opacity))}.\[\&\:not\(\:has\(\.fi-ac-action\:focus\)\)\]\:focus-within\:ring-primary-600:focus-within:not(:has(.fi-ac-action:focus)){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-600),var(--tw-ring-opacity))}.dark\:\[\&\:not\(\:has\(\.fi-ac-action\:focus\)\)\]\:focus-within\:ring-danger-500:focus-within:not(:has(.fi-ac-action:focus)):is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-500),var(--tw-ring-opacity))}.dark\:\[\&\:not\(\:has\(\.fi-ac-action\:focus\)\)\]\:focus-within\:ring-primary-500:focus-within:not(:has(.fi-ac-action:focus)):is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-500),var(--tw-ring-opacity))}.\[\&\:not\(\:last-of-type\)\]\:border-e:not(:last-of-type){border-inline-end-width:1px}.\[\&\:not\(\:nth-child\(1_of_\.fi-btn\)\)\]\:shadow-\[-1px_0_0_0_theme\(colors\.gray\.200\)\]:not(:nth-child(1 of .fi-btn)){--tw-shadow:-1px 0 0 0 rgba(var(--gray-200),1);--tw-shadow-colored:-1px 0 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.dark\:\[\&\:not\(\:nth-child\(1_of_\.fi-btn\)\)\]\:shadow-\[-1px_0_0_0_theme\(colors\.white\/20\%\)\]:not(:nth-child(1 of .fi-btn)):is(.dark *){--tw-shadow:-1px 0 0 0 hsla(0,0%,100%,.2);--tw-shadow-colored:-1px 0 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.\[\&\:not\(\:nth-last-child\(1_of_\.fi-btn\)\)\]\:me-px:not(:nth-last-child(1 of .fi-btn)){margin-inline-end:1px}.\[\&\:nth-child\(1_of_\.fi-btn\)\]\:rounded-s-lg:nth-child(1 of .fi-btn){border-end-start-radius:.5rem;border-start-start-radius:.5rem}.\[\&\:nth-last-child\(1_of_\.fi-btn\)\]\:rounded-e-lg:nth-last-child(1 of .fi-btn){border-end-end-radius:.5rem;border-start-end-radius:.5rem}.\[\&\>\*\:first-child\]\:relative>:first-child{position:relative}.\[\&\>\*\:first-child\]\:mt-0>:first-child{margin-top:0}.\[\&\>\*\:first-child\]\:before\:absolute>:first-child:before{content:var(--tw-content);position:absolute}.\[\&\>\*\:first-child\]\:before\:inset-y-0>:first-child:before{bottom:0;content:var(--tw-content);top:0}.\[\&\>\*\:first-child\]\:before\:start-0>:first-child:before{content:var(--tw-content);inset-inline-start:0}.\[\&\>\*\:first-child\]\:before\:w-0\.5>:first-child:before{content:var(--tw-content);width:.125rem}.\[\&\>\*\:first-child\]\:before\:bg-primary-600>:first-child:before{--tw-bg-opacity:1;background-color:rgba(var(--primary-600),var(--tw-bg-opacity));content:var(--tw-content)}.\[\&\>\*\:first-child\]\:dark\:before\:bg-primary-500:is(.dark *)>:first-child:before{--tw-bg-opacity:1;background-color:rgba(var(--primary-500),var(--tw-bg-opacity));content:var(--tw-content)}.\[\&\>\*\:last-child\]\:mb-0>:last-child{margin-bottom:0}.\[\&_\.choices\\_\\_inner\]\:ps-0 .choices__inner{padding-inline-start:0}.\[\&_\.fi-badge-delete-button\]\:hidden .fi-badge-delete-button{display:none}.\[\&_\.filepond--root\]\:font-sans .filepond--root{font-family:var(--font-family),ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}.\[\&_optgroup\]\:bg-white optgroup{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.\[\&_optgroup\]\:dark\:bg-gray-900:is(.dark *) optgroup{--tw-bg-opacity:1;background-color:rgba(var(--gray-900),var(--tw-bg-opacity))}.\[\&_option\]\:bg-white option{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.\[\&_option\]\:dark\:bg-gray-900:is(.dark *) option{--tw-bg-opacity:1;background-color:rgba(var(--gray-900),var(--tw-bg-opacity))}:checked+*>.\[\:checked\+\*\>\&\]\:text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}@media(hover:hover){.\[\@media\(hover\:hover\)\]\:transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.\[\@media\(hover\:hover\)\]\:duration-75{transition-duration:75ms}}input:checked+.\[input\:checked\+\&\]\:bg-custom-600{--tw-bg-opacity:1;background-color:rgba(var(--c-600),var(--tw-bg-opacity))}input:checked+.\[input\:checked\+\&\]\:bg-gray-400{--tw-bg-opacity:1;background-color:rgba(var(--gray-400),var(--tw-bg-opacity))}input:checked+.\[input\:checked\+\&\]\:text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}input:checked+.\[input\:checked\+\&\]\:ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}input:checked+.\[input\:checked\+\&\]\:hover\:bg-custom-500:hover{--tw-bg-opacity:1;background-color:rgba(var(--c-500),var(--tw-bg-opacity))}input:checked+.\[input\:checked\+\&\]\:hover\:bg-gray-300:hover{--tw-bg-opacity:1;background-color:rgba(var(--gray-300),var(--tw-bg-opacity))}input:checked+.dark\:\[input\:checked\+\&\]\:bg-custom-500:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--c-500),var(--tw-bg-opacity))}input:checked+.dark\:\[input\:checked\+\&\]\:bg-gray-600:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-600),var(--tw-bg-opacity))}input:checked+.dark\:\[input\:checked\+\&\]\:hover\:bg-custom-400:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--c-400),var(--tw-bg-opacity))}input:checked+.dark\:\[input\:checked\+\&\]\:hover\:bg-gray-500:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-500),var(--tw-bg-opacity))}input:checked:focus-visible+.\[input\:checked\:focus-visible\+\&\]\:ring-custom-500\/50{--tw-ring-color:rgba(var(--c-500),0.5)}input:checked:focus-visible+.dark\:\[input\:checked\:focus-visible\+\&\]\:ring-custom-400\/50:is(.dark *){--tw-ring-color:rgba(var(--c-400),0.5)}input:focus-visible+.\[input\:focus-visible\+\&\]\:z-10{z-index:10}input:focus-visible+.\[input\:focus-visible\+\&\]\:ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}input:focus-visible+.\[input\:focus-visible\+\&\]\:ring-gray-950\/10{--tw-ring-color:rgba(var(--gray-950),0.1)}input:focus-visible+.dark\:\[input\:focus-visible\+\&\]\:ring-white\/20:is(.dark *){--tw-ring-color:hsla(0,0%,100%,.2)} diff --git a/public/css/filament/forms/forms.css b/public/css/filament/forms/forms.css index 6d50ac4..ccb6e2c 100644 --- a/public/css/filament/forms/forms.css +++ b/public/css/filament/forms/forms.css @@ -1,4 +1,4 @@ -input::-webkit-datetime-edit{display:block;padding:0}.cropper-container{-webkit-touch-callout:none;direction:ltr;font-size:0;line-height:0;position:relative;touch-action:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.cropper-container img{backface-visibility:hidden;display:block;height:100%;image-orientation:0deg;max-height:none!important;max-width:none!important;min-height:0!important;min-width:0!important;width:100%}.cropper-canvas,.cropper-crop-box,.cropper-drag-box,.cropper-modal,.cropper-wrap-box{inset:0;position:absolute}.cropper-canvas,.cropper-wrap-box{overflow:hidden}.cropper-drag-box{background-color:#fff;opacity:0}.cropper-modal{background-color:#000;opacity:.5}.cropper-view-box{display:block;height:100%;outline:1px solid #39f;outline-color:#3399ffbf;overflow:hidden;width:100%}.cropper-dashed{border:0 dashed #eee;display:block;opacity:.5;position:absolute}.cropper-dashed.dashed-h{border-bottom-width:1px;border-top-width:1px;height:33.33333%;left:0;top:33.33333%;width:100%}.cropper-dashed.dashed-v{border-left-width:1px;border-right-width:1px;height:100%;left:33.33333%;top:0;width:33.33333%}.cropper-center{display:block;height:0;left:50%;opacity:.75;position:absolute;top:50%;width:0}.cropper-center:after,.cropper-center:before{background-color:#eee;content:" ";display:block;position:absolute}.cropper-center:before{height:1px;left:-3px;top:0;width:7px}.cropper-center:after{height:7px;left:0;top:-3px;width:1px}.cropper-face,.cropper-line,.cropper-point{display:block;height:100%;opacity:.1;position:absolute;width:100%}.cropper-face{background-color:#fff;left:0;top:0}.cropper-line{background-color:#39f}.cropper-line.line-e{cursor:ew-resize;right:-3px;top:0;width:5px}.cropper-line.line-n{cursor:ns-resize;height:5px;left:0;top:-3px}.cropper-line.line-w{cursor:ew-resize;left:-3px;top:0;width:5px}.cropper-line.line-s{bottom:-3px;cursor:ns-resize;height:5px;left:0}.cropper-point{background-color:#39f;height:5px;opacity:.75;width:5px}.cropper-point.point-e{cursor:ew-resize;margin-top:-3px;right:-3px;top:50%}.cropper-point.point-n{cursor:ns-resize;left:50%;margin-left:-3px;top:-3px}.cropper-point.point-w{cursor:ew-resize;left:-3px;margin-top:-3px;top:50%}.cropper-point.point-s{bottom:-3px;cursor:s-resize;left:50%;margin-left:-3px}.cropper-point.point-ne{cursor:nesw-resize;right:-3px;top:-3px}.cropper-point.point-nw{cursor:nwse-resize;left:-3px;top:-3px}.cropper-point.point-sw{bottom:-3px;cursor:nesw-resize;left:-3px}.cropper-point.point-se{bottom:-3px;cursor:nwse-resize;height:20px;opacity:1;right:-3px;width:20px}@media (min-width:768px){.cropper-point.point-se{height:15px;width:15px}}@media (min-width:992px){.cropper-point.point-se{height:10px;width:10px}}@media (min-width:1200px){.cropper-point.point-se{height:5px;opacity:.75;width:5px}}.cropper-point.point-se:before{background-color:#39f;bottom:-50%;content:" ";display:block;height:200%;opacity:0;position:absolute;right:-50%;width:200%}.cropper-invisible{opacity:0}.cropper-bg{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC)}.cropper-hide{display:block;height:0;position:absolute;width:0}.cropper-hidden{display:none!important}.cropper-move{cursor:move}.cropper-crop{cursor:crosshair}.cropper-disabled .cropper-drag-box,.cropper-disabled .cropper-face,.cropper-disabled .cropper-line,.cropper-disabled .cropper-point{cursor:not-allowed}.filepond--assistant{clip:rect(1px,1px,1px,1px);border:0;clip-path:inset(50%);height:1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.filepond--browser.filepond--browser{font-size:0;left:1em;margin:0;opacity:0;padding:0;position:absolute;top:1.75em;width:calc(100% - 2em)}.filepond--data{border:none;contain:strict;height:0;margin:0;padding:0;visibility:hidden;width:0}.filepond--data,.filepond--drip{pointer-events:none;position:absolute}.filepond--drip{background:rgba(0,0,0,.01);border-radius:.5em;inset:0;opacity:.1;overflow:hidden}.filepond--drip-blob{background:#292625;border-radius:50%;height:8em;margin-left:-4em;margin-top:-4em;transform-origin:center center;width:8em}.filepond--drip-blob,.filepond--drop-label{left:0;position:absolute;top:0;will-change:transform,opacity}.filepond--drop-label{align-items:center;color:#4f4f4f;display:flex;height:0;justify-content:center;margin:0;right:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.filepond--drop-label.filepond--drop-label label{display:block;margin:0;padding:.5em}.filepond--drop-label label{cursor:default;font-size:.875em;font-weight:400;line-height:1.5;text-align:center}.filepond--label-action{-webkit-text-decoration-skip:ink;cursor:pointer;text-decoration:underline;text-decoration-color:#a7a4a4;text-decoration-skip-ink:auto}.filepond--root[data-disabled] .filepond--drop-label label{opacity:.5}.filepond--file-action-button.filepond--file-action-button{border:none;font-family:inherit;font-size:1em;height:1.625em;line-height:inherit;margin:0;outline:none;padding:0;width:1.625em;will-change:transform,opacity}.filepond--file-action-button.filepond--file-action-button span{clip:rect(1px,1px,1px,1px);border:0;clip-path:inset(50%);height:1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.filepond--file-action-button.filepond--file-action-button svg{height:100%;width:100%}.filepond--file-action-button.filepond--file-action-button:after{content:"";inset:-.75em;position:absolute}.filepond--file-action-button{background-color:#00000080;background-image:none;border-radius:50%;box-shadow:0 0 #fff0;color:#fff;cursor:auto;transition:box-shadow .25s ease-in}.filepond--file-action-button:focus,.filepond--file-action-button:hover{box-shadow:0 0 0 .125em #ffffffe6}.filepond--file-action-button[disabled]{background-color:#00000040;color:#ffffff80}.filepond--file-action-button[hidden]{display:none}.filepond--file-info{align-items:flex-start;display:flex;flex:1;flex-direction:column;margin:0 .5em 0 0;min-width:0;pointer-events:none;position:static;-webkit-user-select:none;-moz-user-select:none;user-select:none;will-change:transform,opacity}.filepond--file-info *{margin:0}.filepond--file-info .filepond--file-info-main{font-size:.75em;line-height:1.2;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.filepond--file-info .filepond--file-info-sub{font-size:.625em;opacity:.5;transition:opacity .25s ease-in-out;white-space:nowrap}.filepond--file-info .filepond--file-info-sub:empty{display:none}.filepond--file-status{align-items:flex-end;display:flex;flex-direction:column;flex-grow:0;flex-shrink:0;margin:0;min-width:2.25em;pointer-events:none;position:static;text-align:right;-webkit-user-select:none;-moz-user-select:none;user-select:none;will-change:transform,opacity}.filepond--file-status *{margin:0;white-space:nowrap}.filepond--file-status .filepond--file-status-main{font-size:.75em;line-height:1.2}.filepond--file-status .filepond--file-status-sub{font-size:.625em;opacity:.5;transition:opacity .25s ease-in-out}.filepond--file-wrapper.filepond--file-wrapper{border:none;height:100%;margin:0;min-width:0;padding:0}.filepond--file-wrapper.filepond--file-wrapper>legend{clip:rect(1px,1px,1px,1px);border:0;clip-path:inset(50%);height:1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.filepond--file{align-items:flex-start;border-radius:.5em;color:#fff;display:flex;height:100%;padding:.5625em;position:static}.filepond--file .filepond--file-status{margin-left:auto;margin-right:2.25em}.filepond--file .filepond--processing-complete-indicator{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;z-index:3}.filepond--file .filepond--file-action-button,.filepond--file .filepond--processing-complete-indicator,.filepond--file .filepond--progress-indicator{position:absolute}.filepond--file [data-align*=left]{left:.5625em}.filepond--file [data-align*=right]{right:.5625em}.filepond--file [data-align*=center]{left:calc(50% - .8125em)}.filepond--file [data-align*=bottom]{bottom:1.125em}.filepond--file [data-align=center]{top:calc(50% - .8125em)}.filepond--file .filepond--progress-indicator{margin-top:.1875em}.filepond--file .filepond--progress-indicator[data-align*=right]{margin-right:.1875em}.filepond--file .filepond--progress-indicator[data-align*=left]{margin-left:.1875em}[data-filepond-item-state*=error] .filepond--file-info,[data-filepond-item-state*=invalid] .filepond--file-info,[data-filepond-item-state=cancelled] .filepond--file-info{margin-right:2.25em}[data-filepond-item-state~=processing] .filepond--file-status-sub{opacity:0}[data-filepond-item-state~=processing] .filepond--action-abort-item-processing~.filepond--file-status .filepond--file-status-sub{opacity:.5}[data-filepond-item-state=processing-error] .filepond--file-status-sub{opacity:0}[data-filepond-item-state=processing-error] .filepond--action-retry-item-processing~.filepond--file-status .filepond--file-status-sub{opacity:.5}[data-filepond-item-state=processing-complete] .filepond--action-revert-item-processing svg{animation:fall .5s linear .125s both}[data-filepond-item-state=processing-complete] .filepond--file-status-sub{opacity:.5}[data-filepond-item-state=processing-complete] .filepond--file-info-sub,[data-filepond-item-state=processing-complete] .filepond--processing-complete-indicator:not([style*=hidden])~.filepond--file-status .filepond--file-status-sub{opacity:0}[data-filepond-item-state=processing-complete] .filepond--action-revert-item-processing~.filepond--file-info .filepond--file-info-sub{opacity:.5}[data-filepond-item-state*=error] .filepond--file-wrapper,[data-filepond-item-state*=error] .filepond--panel,[data-filepond-item-state*=invalid] .filepond--file-wrapper,[data-filepond-item-state*=invalid] .filepond--panel{animation:shake .65s linear both}[data-filepond-item-state*=busy] .filepond--progress-indicator svg{animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@keyframes shake{10%,90%{transform:translate(-.0625em)}20%,80%{transform:translate(.125em)}30%,50%,70%{transform:translate(-.25em)}40%,60%{transform:translate(.25em)}}@keyframes fall{0%{animation-timing-function:ease-out;opacity:0;transform:scale(.5)}70%{animation-timing-function:ease-in-out;opacity:1;transform:scale(1.1)}to{animation-timing-function:ease-out;transform:scale(1)}}.filepond--hopper[data-hopper-state=drag-over]>*{pointer-events:none}.filepond--hopper[data-hopper-state=drag-over]:after{content:"";inset:0;position:absolute;z-index:100}.filepond--progress-indicator{z-index:103}.filepond--file-action-button{z-index:102}.filepond--file-status{z-index:101}.filepond--file-info{z-index:100}.filepond--item{left:0;margin:.25em;padding:0;position:absolute;right:0;top:0;touch-action:none;will-change:transform,opacity;z-index:1}.filepond--item>.filepond--panel{z-index:-1}.filepond--item>.filepond--panel .filepond--panel-bottom{box-shadow:0 .0625em .125em -.0625em #00000040}.filepond--item>.filepond--file-wrapper,.filepond--item>.filepond--panel{transition:opacity .15s ease-out}.filepond--item[data-drag-state]{cursor:grab}.filepond--item[data-drag-state]>.filepond--panel{box-shadow:0 0 0 transparent;transition:box-shadow .125s ease-in-out}.filepond--item[data-drag-state=drag]{cursor:grabbing}.filepond--item[data-drag-state=drag]>.filepond--panel{box-shadow:0 .125em .3125em #00000053}.filepond--item[data-drag-state]:not([data-drag-state=idle]){z-index:2}.filepond--item-panel{background-color:#64605e}[data-filepond-item-state=processing-complete] .filepond--item-panel{background-color:#369763}[data-filepond-item-state*=error] .filepond--item-panel,[data-filepond-item-state*=invalid] .filepond--item-panel{background-color:#c44e47}.filepond--item-panel{border-radius:.5em;transition:background-color .25s}.filepond--list-scroller{left:0;margin:0;position:absolute;right:0;top:0;will-change:transform}.filepond--list-scroller[data-state=overflow] .filepond--list{bottom:0;right:0}.filepond--list-scroller[data-state=overflow]{-webkit-overflow-scrolling:touch;-webkit-mask:linear-gradient(180deg,#000 calc(100% - .5em),transparent);mask:linear-gradient(180deg,#000 calc(100% - .5em),transparent);overflow-x:hidden;overflow-y:scroll}.filepond--list-scroller::-webkit-scrollbar{background:transparent}.filepond--list-scroller::-webkit-scrollbar:vertical{width:1em}.filepond--list-scroller::-webkit-scrollbar:horizontal{height:0}.filepond--list-scroller::-webkit-scrollbar-thumb{background-clip:content-box;background-color:#0000004d;border:.3125em solid transparent;border-radius:99999px}.filepond--list.filepond--list{list-style-type:none;margin:0;padding:0;position:absolute;top:0;will-change:transform}.filepond--list{left:.75em;right:.75em}.filepond--root[data-style-panel-layout~=integrated]{height:100%;margin:0;max-width:none;width:100%}.filepond--root[data-style-panel-layout~=circle] .filepond--panel-root,.filepond--root[data-style-panel-layout~=integrated] .filepond--panel-root{border-radius:0}.filepond--root[data-style-panel-layout~=circle] .filepond--panel-root>*,.filepond--root[data-style-panel-layout~=integrated] .filepond--panel-root>*{display:none}.filepond--root[data-style-panel-layout~=circle] .filepond--drop-label,.filepond--root[data-style-panel-layout~=integrated] .filepond--drop-label{align-items:center;bottom:0;display:flex;height:auto;justify-content:center;z-index:7}.filepond--root[data-style-panel-layout~=circle] .filepond--item-panel,.filepond--root[data-style-panel-layout~=integrated] .filepond--item-panel{display:none}.filepond--root[data-style-panel-layout~=compact] .filepond--list-scroller,.filepond--root[data-style-panel-layout~=integrated] .filepond--list-scroller{height:100%;margin-bottom:0;margin-top:0;overflow:hidden}.filepond--root[data-style-panel-layout~=compact] .filepond--list,.filepond--root[data-style-panel-layout~=integrated] .filepond--list{height:100%;left:0;right:0}.filepond--root[data-style-panel-layout~=compact] .filepond--item,.filepond--root[data-style-panel-layout~=integrated] .filepond--item{margin:0}.filepond--root[data-style-panel-layout~=compact] .filepond--file-wrapper,.filepond--root[data-style-panel-layout~=integrated] .filepond--file-wrapper{height:100%}.filepond--root[data-style-panel-layout~=compact] .filepond--drop-label,.filepond--root[data-style-panel-layout~=integrated] .filepond--drop-label{z-index:7}.filepond--root[data-style-panel-layout~=circle]{border-radius:99999rem;overflow:hidden}.filepond--root[data-style-panel-layout~=circle]>.filepond--panel{border-radius:inherit}.filepond--root[data-style-panel-layout~=circle] .filepond--file-info,.filepond--root[data-style-panel-layout~=circle] .filepond--file-status,.filepond--root[data-style-panel-layout~=circle]>.filepond--panel>*{display:none}@media not all and (-webkit-min-device-pixel-ratio:0),not all and (min-resolution:.001dpcm){@supports (-webkit-appearance:none) and (stroke-color:transparent){.filepond--root[data-style-panel-layout~=circle]{will-change:transform}}}.filepond--panel-root{background-color:#f1f0ef;border-radius:.5em}.filepond--panel{height:100%!important;left:0;margin:0;pointer-events:none;position:absolute;right:0;top:0}.filepond-panel:not([data-scalable=false]){height:auto!important}.filepond--panel[data-scalable=false]>div{display:none}.filepond--panel[data-scalable=true]{background-color:transparent!important;border:none!important;transform-style:preserve-3d}.filepond--panel-bottom,.filepond--panel-center,.filepond--panel-top{left:0;margin:0;padding:0;position:absolute;right:0;top:0}.filepond--panel-bottom,.filepond--panel-top{height:.5em}.filepond--panel-top{border-bottom:none!important;border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.filepond--panel-top:after{background-color:inherit;bottom:-1px;content:"";height:2px;left:0;position:absolute;right:0}.filepond--panel-bottom,.filepond--panel-center{backface-visibility:hidden;transform:translate3d(0,.5em,0);transform-origin:left top;will-change:transform}.filepond--panel-bottom{border-top:none!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.filepond--panel-bottom:before{background-color:inherit;content:"";height:2px;left:0;position:absolute;right:0;top:-1px}.filepond--panel-center{border-bottom:none!important;border-radius:0!important;border-top:none!important;height:100px!important}.filepond--panel-center:not([style]){visibility:hidden}.filepond--progress-indicator{color:#fff;height:1.25em;margin:0;pointer-events:none;position:static;width:1.25em;will-change:transform,opacity}.filepond--progress-indicator svg{height:100%;transform-box:fill-box;vertical-align:top;width:100%}.filepond--progress-indicator path{fill:none;stroke:currentColor}.filepond--list-scroller{z-index:6}.filepond--drop-label{z-index:5}.filepond--drip{z-index:3}.filepond--root>.filepond--panel{z-index:2}.filepond--browser{z-index:1}.filepond--root{box-sizing:border-box;contain:layout style size;direction:ltr;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:1rem;font-weight:450;line-height:normal;margin-bottom:1em;position:relative;text-align:left;text-rendering:optimizeLegibility}.filepond--root *{box-sizing:inherit;line-height:inherit}.filepond--root :not(text){font-size:inherit}.filepond--root[data-disabled]{pointer-events:none}.filepond--root[data-disabled] .filepond--list-scroller{pointer-events:all}.filepond--root[data-disabled] .filepond--list{pointer-events:none}.filepond--root .filepond--drop-label{min-height:4.75em}.filepond--root .filepond--list-scroller{margin-bottom:1em;margin-top:1em}.filepond--root .filepond--credits{bottom:-14px;color:inherit;font-size:11px;line-height:.85;opacity:.175;position:absolute;right:0;text-decoration:none;z-index:3}.filepond--root .filepond--credits[style]{bottom:auto;margin-top:14px;top:0}.filepond--action-edit-item.filepond--action-edit-item{height:2em;padding:.1875em;width:2em}.filepond--action-edit-item.filepond--action-edit-item[data-align*=center]{margin-left:-.1875em}.filepond--action-edit-item.filepond--action-edit-item[data-align*=bottom]{margin-bottom:-.1875em}.filepond--action-edit-item-alt{background:transparent;border:none;color:inherit;font-family:inherit;line-height:inherit;margin:0 0 0 .25em;outline:none;padding:0;pointer-events:all;position:absolute}.filepond--action-edit-item-alt svg{height:1.3125em;width:1.3125em}.filepond--action-edit-item-alt span{font-size:0;opacity:0}.filepond--root[data-style-panel-layout~=circle] .filepond--action-edit-item{opacity:1!important;visibility:visible!important}.filepond--image-preview-markup{left:0;position:absolute;top:0}.filepond--image-preview-wrapper{z-index:2}.filepond--image-preview-overlay{display:block;left:0;margin:0;max-height:7rem;min-height:5rem;opacity:0;pointer-events:none;position:absolute;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%;z-index:2}.filepond--image-preview-overlay svg{color:inherit;height:auto;max-height:inherit;width:100%}.filepond--image-preview-overlay-idle{color:#282828d9;mix-blend-mode:multiply}.filepond--image-preview-overlay-success{color:#369763;mix-blend-mode:normal}.filepond--image-preview-overlay-failure{color:#c44e47;mix-blend-mode:normal}@supports (-webkit-marquee-repetition:infinite) and ((-o-object-fit:fill) or (object-fit:fill)){.filepond--image-preview-overlay-idle{mix-blend-mode:normal}}.filepond--image-preview-wrapper{background:rgba(0,0,0,.01);border-radius:.45em;height:100%;left:0;margin:0;overflow:hidden;position:absolute;right:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.filepond--image-preview{align-items:center;background:#222;display:flex;height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%;will-change:transform,opacity;z-index:1}.filepond--image-clip{margin:0 auto;overflow:hidden;position:relative}.filepond--image-clip[data-transparency-indicator=grid] canvas,.filepond--image-clip[data-transparency-indicator=grid] img{background-color:#fff;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg' fill='%23eee'%3E%3Cpath d='M0 0h50v50H0M50 50h50v50H50'/%3E%3C/svg%3E");background-size:1.25em 1.25em}.filepond--image-bitmap,.filepond--image-vector{left:0;position:absolute;top:0;will-change:transform}.filepond--root[data-style-panel-layout~=integrated] .filepond--image-preview-wrapper{border-radius:0}.filepond--root[data-style-panel-layout~=integrated] .filepond--image-preview{align-items:center;display:flex;height:100%;justify-content:center}.filepond--root[data-style-panel-layout~=circle] .filepond--image-preview-wrapper{border-radius:99999rem}.filepond--root[data-style-panel-layout~=circle] .filepond--image-preview-overlay{bottom:0;top:auto;transform:scaleY(-1)}.filepond--root[data-style-panel-layout~=circle] .filepond--file .filepond--file-action-button[data-align*=bottom]:not([data-align*=center]){margin-bottom:.325em}.filepond--root[data-style-panel-layout~=circle] .filepond--file [data-align*=left]{left:calc(50% - 3em)}.filepond--root[data-style-panel-layout~=circle] .filepond--file [data-align*=right]{right:calc(50% - 3em)}.filepond--root[data-style-panel-layout~=circle] .filepond--progress-indicator[data-align*=bottom][data-align*=left],.filepond--root[data-style-panel-layout~=circle] .filepond--progress-indicator[data-align*=bottom][data-align*=right]{margin-bottom:.5125em}.filepond--root[data-style-panel-layout~=circle] .filepond--progress-indicator[data-align*=bottom][data-align*=center]{margin-bottom:.1875em;margin-left:.1875em;margin-top:0}.filepond--media-preview audio{display:none}.filepond--media-preview .audioplayer{margin:2.3em auto auto;width:calc(100% - 1.4em)}.filepond--media-preview .playpausebtn{background-position:50%;background-repeat:no-repeat;border:none;border-radius:25px;cursor:pointer;float:left;height:25px;margin-right:.3em;margin-top:.3em;outline:none;width:25px}.filepond--media-preview .playpausebtn:hover{background-color:#00000080}.filepond--media-preview .play{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAyElEQVQ4T9XUsWoCQRRG4XPaFL5SfIy8gKYKBCysrax8Ahs7qzQ2qVIFOwsrsbEWLEK6EBFGBrIQhN2d3dnGgalm+Jh7789Ix8uOPe4YDCH0gZ66atKW0pJDCE/AEngDXtRjCpwCRucbGANzNVTBqWBhfAJDdV+GNgWj8wtM41bPt3AbsDB2f69d/0dzwC0wUDe54A8wAWbqJbfkD+BZPeQO5QsYqYu6LKb0MIb7VT3VYfG8CnwEHtT3FKi4c8e/TZMyk3LYFrwCgMdHFbRDKS8AAAAASUVORK5CYII=)}.filepond--media-preview .pause{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAh0lEQVQ4T+2UsQkCURBE30PLMbAMMResQrAPsQ0TK9AqDKxGZeTLD74aGNwlhzfZssvADDMrPcOe+RggYZIJcG2s2KinMidZAvu6u6uzT8u+JCeZArfmcKUeK+EaONTdQy23bxgJX8aPHvIHsSnVuzTx36rn2pQFsGuqN//ZlK7vbIDvq6vkJ9yteBXzecYbAAAAAElFTkSuQmCC)}.filepond--media-preview .timeline{background:hsla(0,0%,100%,.3);border-radius:15px;float:left;height:3px;margin-top:1em;width:calc(100% - 2.5em)}.filepond--media-preview .playhead{background:#fff;border-radius:50%;height:13px;margin-top:-5px;width:13px}.filepond--media-preview-wrapper{background:rgba(0,0,0,.01);border-radius:.45em;height:100%;left:0;margin:0;overflow:hidden;pointer-events:auto;position:absolute;right:0;top:0}.filepond--media-preview-wrapper:before{background:linear-gradient(180deg,#000 0,transparent);content:" ";filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#000000",endColorstr="#00000000",GradientType=0);height:2em;position:absolute;width:100%;z-index:3}.filepond--media-preview{display:block;height:100%;position:relative;transform-origin:center center;width:100%;will-change:transform,opacity;z-index:1}.filepond--media-preview audio,.filepond--media-preview video{width:100%;will-change:transform}.filepond--root{--tw-bg-opacity:1;--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgba(var(--gray-950),0.1);background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.5rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);margin-bottom:0}.filepond--root:is(.dark *){--tw-ring-color:hsla(0,0%,100%,.2);background-color:hsla(0,0%,100%,.05)}.filepond--root[data-disabled=disabled]{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.filepond--root[data-disabled=disabled]:is(.dark *){--tw-ring-color:hsla(0,0%,100%,.1);background-color:transparent}.filepond--panel-root{background-color:transparent}.filepond--drop-label label{--tw-text-opacity:1;color:rgba(var(--gray-600),var(--tw-text-opacity));font-size:.875rem;line-height:1.25rem;padding:.75rem!important}.filepond--drop-label label:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.filepond--label-action{--tw-text-opacity:1;color:rgba(var(--primary-600),var(--tw-text-opacity));font-weight:500;text-decoration-line:none;transition-duration:75ms;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.filepond--label-action:hover{--tw-text-opacity:1;color:rgba(var(--primary-500),var(--tw-text-opacity))}.filepond--label-action:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.filepond--label-action:hover:is(.dark *){--tw-text-opacity:1;color:rgba(var(--primary-500),var(--tw-text-opacity))}.filepond--drip-blob{--tw-bg-opacity:1;background-color:rgba(var(--gray-400),var(--tw-bg-opacity))}.filepond--drip-blob:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-500),var(--tw-bg-opacity))}.filepond--root[data-style-panel-layout=grid] .filepond--item{display:inline;width:calc(50% - .5rem)}@media (min-width:1024px){.filepond--root[data-style-panel-layout=grid] .filepond--item{width:calc(33.33% - .5rem)}}.filepond--download-icon{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));display:inline-block;height:1rem;margin-inline-end:.25rem;pointer-events:auto;vertical-align:bottom;width:1rem}.filepond--download-icon:hover{background-color:hsla(0,0%,100%,.7)}.filepond--download-icon{-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBjbGFzcz0iZmVhdGhlciBmZWF0aGVyLWRvd25sb2FkIj48cGF0aCBkPSJNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNE03IDEwbDUgNSA1LTVNMTIgMTVWMyIvPjwvc3ZnPg==);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBjbGFzcz0iZmVhdGhlciBmZWF0aGVyLWRvd25sb2FkIj48cGF0aCBkPSJNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNE03IDEwbDUgNSA1LTVNMTIgMTVWMyIvPjwvc3ZnPg==);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100%;mask-size:100%}.filepond--open-icon{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));display:inline-block;height:1rem;margin-inline-end:.25rem;pointer-events:auto;vertical-align:bottom;width:1rem}.filepond--open-icon:hover{background-color:hsla(0,0%,100%,.7)}.filepond--open-icon{-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTYgdy02IiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPjxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgZD0iTTEwIDZINmEyIDIgMCAwIDAtMiAydjEwYTIgMiAwIDAgMCAyIDJoMTBhMiAyIDAgMCAwIDItMnYtNE0xNCA0aDZtMCAwdjZtMC02TDEwIDE0Ii8+PC9zdmc+);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTYgdy02IiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPjxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgZD0iTTEwIDZINmEyIDIgMCAwIDAtMiAydjEwYTIgMiAwIDAgMCAyIDJoMTBhMiAyIDAgMCAwIDItMnYtNE0xNCA0aDZtMCAwdjZtMC02TDEwIDE0Ii8+PC9zdmc+);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100%;mask-size:100%}.filepond--file-action-button.filepond--action-edit-item{background-color:rgba(0,0,0,.5)}.cropper-drag-box.cropper-crop.cropper-modal{background-color:rgba(var(--gray-100),.5);opacity:1}.cropper-drag-box.cropper-crop.cropper-modal:is(.dark *){background-color:rgba(var(--gray-900),.8)}.fi-fo-file-upload-circle-cropper .cropper-face,.fi-fo-file-upload-circle-cropper .cropper-view-box{border-radius:50%}.CodeMirror{color:#000;direction:ltr;font-family:monospace;height:300px}.CodeMirror-lines{padding:4px 0}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{background-color:#f7f7f7;border-right:1px solid #ddd;white-space:nowrap}.CodeMirror-linenumber{color:#999;min-width:20px;padding:0 3px 0 5px;text-align:right;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{background:#7e7;border:0!important;width:auto}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor .CodeMirror-line::selection,.cm-fat-cursor .CodeMirror-line>span::selection,.cm-fat-cursor .CodeMirror-line>span>span::selection{background:0 0}.cm-fat-cursor .CodeMirror-line::-moz-selection,.cm-fat-cursor .CodeMirror-line>span::-moz-selection,.cm-fat-cursor .CodeMirror-line>span>span::-moz-selection{background:0 0}.cm-fat-cursor{caret-color:transparent}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{inset:-50px 0 0;overflow:hidden;position:absolute}.CodeMirror-ruler{border-left:1px solid #ccc;bottom:0;position:absolute;top:0}.cm-s-default .cm-header{color:#00f}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-type,.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-invalidchar,.cm-s-default .cm-error{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{background:#fff;overflow:hidden;position:relative}.CodeMirror-scroll{height:100%;margin-bottom:-50px;margin-right:-50px;outline:0;overflow:scroll!important;padding-bottom:50px;position:relative;z-index:0}.CodeMirror-sizer{border-right:50px solid transparent;position:relative}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{display:none;outline:0;position:absolute;z-index:6}.CodeMirror-vscrollbar{overflow-x:hidden;overflow-y:scroll;right:0;top:0}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-x:scroll;overflow-y:hidden}.CodeMirror-scrollbar-filler{bottom:0;right:0}.CodeMirror-gutter-filler{bottom:0;left:0}.CodeMirror-gutters{left:0;min-height:100%;position:absolute;top:0;z-index:3}.CodeMirror-gutter{display:inline-block;height:100%;margin-bottom:-50px;vertical-align:top;white-space:normal}.CodeMirror-gutter-wrapper{background:0 0!important;border:none!important;position:absolute;z-index:4}.CodeMirror-gutter-background{bottom:0;position:absolute;top:0;z-index:4}.CodeMirror-gutter-elt{cursor:default;position:absolute;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{word-wrap:normal;-webkit-tap-highlight-color:transparent;background:0 0;border-radius:0;border-width:0;color:inherit;font-family:inherit;font-size:inherit;font-variant-ligatures:contextual;line-height:inherit;margin:0;overflow:visible;position:relative;white-space:pre;z-index:2}.CodeMirror-wrap pre.CodeMirror-line,.CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{inset:0;position:absolute;z-index:0}.CodeMirror-linewidget{padding:.1px;position:relative;z-index:2}.CodeMirror-code{outline:0}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{box-sizing:content-box}.CodeMirror-measure{height:0;overflow:hidden;position:absolute;visibility:hidden;width:100%}.CodeMirror-cursor{pointer-events:none;position:absolute}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{position:relative;visibility:hidden;z-index:3}.CodeMirror-focused div.CodeMirror-cursors,div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:#ff06}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:""}span.CodeMirror-selectedtext{background:0 0}.EasyMDEContainer{display:block}.CodeMirror-rtl pre{direction:rtl}.EasyMDEContainer.sided--no-fullscreen{display:flex;flex-direction:row;flex-wrap:wrap}.EasyMDEContainer .CodeMirror{word-wrap:break-word;border:1px solid #ced4da;border-bottom-left-radius:4px;border-bottom-right-radius:4px;box-sizing:border-box;font:inherit;height:auto;padding:10px;z-index:0}.EasyMDEContainer .CodeMirror-scroll{cursor:text}.EasyMDEContainer .CodeMirror-fullscreen{background:#fff;border-bottom-right-radius:0!important;border-right:none!important;height:auto;inset:50px 0 0;position:fixed!important;z-index:8}.EasyMDEContainer .CodeMirror-sided{width:50%!important}.EasyMDEContainer.sided--no-fullscreen .CodeMirror-sided{border-bottom-right-radius:0;border-right:none!important;flex:1 1 auto;position:relative}.EasyMDEContainer .CodeMirror-placeholder{opacity:.5}.EasyMDEContainer .CodeMirror-focused .CodeMirror-selected{background:#d9d9d9}.editor-toolbar{border-left:1px solid #ced4da;border-right:1px solid #ced4da;border-top:1px solid #ced4da;border-top-left-radius:4px;border-top-right-radius:4px;padding:9px 10px;position:relative;-webkit-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none}.editor-toolbar.fullscreen{background:#fff;border:0;box-sizing:border-box;height:50px;left:0;opacity:1;padding-bottom:10px;padding-top:10px;position:fixed;top:0;width:100%;z-index:9}.editor-toolbar.fullscreen:before{background:linear-gradient(90deg,#fff 0,hsla(0,0%,100%,0));height:50px;left:0;margin:0;padding:0;position:fixed;top:0;width:20px}.editor-toolbar.fullscreen:after{background:linear-gradient(90deg,hsla(0,0%,100%,0) 0,#fff);height:50px;margin:0;padding:0;position:fixed;right:0;top:0;width:20px}.EasyMDEContainer.sided--no-fullscreen .editor-toolbar{width:100%}.editor-toolbar .easymde-dropdown,.editor-toolbar button{background:0 0;border:1px solid transparent;border-radius:3px;cursor:pointer;display:inline-block;height:30px;margin:0;padding:0;text-align:center;text-decoration:none!important}.editor-toolbar button{font-weight:700;min-width:30px;padding:0 6px;white-space:nowrap}.editor-toolbar button.active,.editor-toolbar button:hover{background:#fcfcfc;border-color:#95a5a6}.editor-toolbar i.separator{border-left:1px solid #d9d9d9;border-right:1px solid #fff;color:transparent;display:inline-block;margin:0 6px;text-indent:-10px;width:0}.editor-toolbar button:after{font-family:Arial,Helvetica Neue,Helvetica,sans-serif;font-size:65%;position:relative;top:2px;vertical-align:text-bottom}.editor-toolbar button.heading-1:after{content:"1"}.editor-toolbar button.heading-2:after{content:"2"}.editor-toolbar button.heading-3:after{content:"3"}.editor-toolbar button.heading-bigger:after{content:"\25b2"}.editor-toolbar button.heading-smaller:after{content:"\25bc"}.editor-toolbar.disabled-for-preview button:not(.no-disable){opacity:.6;pointer-events:none}@media only screen and (max-width:700px){.editor-toolbar i.no-mobile{display:none}}.editor-statusbar{color:#959694;font-size:12px;padding:8px 10px;text-align:right}.EasyMDEContainer.sided--no-fullscreen .editor-statusbar{width:100%}.editor-statusbar span{display:inline-block;margin-left:1em;min-width:4em}.editor-statusbar .lines:before{content:"lines: "}.editor-statusbar .words:before{content:"words: "}.editor-statusbar .characters:before{content:"characters: "}.editor-preview-full{height:100%;left:0;position:absolute;top:0;width:100%;z-index:7}.editor-preview-full,.editor-preview-side{box-sizing:border-box;display:none;overflow:auto}.editor-preview-side{word-wrap:break-word;border:1px solid #ddd;bottom:0;position:fixed;right:0;top:50px;width:50%;z-index:9}.editor-preview-active-side{display:block}.EasyMDEContainer.sided--no-fullscreen .editor-preview-active-side{flex:1 1 auto;height:auto;position:static}.editor-preview-active{display:block}.editor-preview{background:#fafafa;padding:10px}.editor-preview>p{margin-top:0}.editor-preview pre{background:#eee;margin-bottom:10px}.editor-preview table td,.editor-preview table th{border:1px solid #ddd;padding:5px}.cm-s-easymde .cm-tag{color:#63a35c}.cm-s-easymde .cm-attribute{color:#795da3}.cm-s-easymde .cm-string{color:#183691}.cm-s-easymde .cm-header-1{font-size:calc(1.375rem + 1.5vw)}.cm-s-easymde .cm-header-2{font-size:calc(1.325rem + .9vw)}.cm-s-easymde .cm-header-3{font-size:calc(1.3rem + .6vw)}.cm-s-easymde .cm-header-4{font-size:calc(1.275rem + .3vw)}.cm-s-easymde .cm-header-5{font-size:1.25rem}.cm-s-easymde .cm-header-6{font-size:1rem}.cm-s-easymde .cm-header-1,.cm-s-easymde .cm-header-2,.cm-s-easymde .cm-header-3,.cm-s-easymde .cm-header-4,.cm-s-easymde .cm-header-5,.cm-s-easymde .cm-header-6{line-height:1.2;margin-bottom:.5rem}.cm-s-easymde .cm-comment{background:rgba(0,0,0,.05);border-radius:2px}.cm-s-easymde .cm-link{color:#7f8c8d}.cm-s-easymde .cm-url{color:#aab2b3}.cm-s-easymde .cm-quote{color:#7f8c8d;font-style:italic}.editor-toolbar .easymde-dropdown{border:1px solid #fff;border-radius:0;position:relative}.editor-toolbar .easymde-dropdown,.editor-toolbar .easymde-dropdown:hover{background:linear-gradient(to bottom right,#fff,#fff 84%,#333 0,#333)}.easymde-dropdown-content{background-color:#f9f9f9;box-shadow:0 8px 16px #0003;display:block;padding:8px;position:absolute;top:30px;visibility:hidden;z-index:2}.easymde-dropdown:active .easymde-dropdown-content,.easymde-dropdown:focus .easymde-dropdown-content,.easymde-dropdown:focus-within .easymde-dropdown-content{visibility:visible}.easymde-dropdown-content button{display:block}span[data-img-src]:after{background-image:var(--bg-image);background-repeat:no-repeat;background-size:contain;content:"";display:block;height:0;max-height:100%;max-width:100%;padding-top:var(--height);width:var(--width)}.CodeMirror .cm-spell-error:not(.cm-url):not(.cm-comment):not(.cm-tag):not(.cm-word){background:rgba(255,0,0,.15)}:root{--color-cm-red:#991b1b;--color-cm-orange:#9a3412;--color-cm-amber:#92400e;--color-cm-yellow:#854d0e;--color-cm-lime:#3f6212;--color-cm-green:#166534;--color-cm-emerald:#065f46;--color-cm-teal:#115e59;--color-cm-cyan:#155e75;--color-cm-sky:#075985;--color-cm-blue:#1e40af;--color-cm-indigo:#3730a3;--color-cm-violet:#5b21b6;--color-cm-purple:#6b21a8;--color-cm-fuchsia:#86198f;--color-cm-pink:#9d174d;--color-cm-rose:#9f1239;--color-cm-gray:#18181b;--color-cm-gray-muted:#71717a;--color-cm-gray-background:#e4e4e7}.dark{--color-cm-red:#f87171;--color-cm-orange:#fb923c;--color-cm-amber:#fbbf24;--color-cm-yellow:#facc15;--color-cm-lime:#a3e635;--color-cm-green:#4ade80;--color-cm-emerald:#4ade80;--color-cm-teal:#2dd4bf;--color-cm-cyan:#22d3ee;--color-cm-sky:#38bdf8;--color-cm-blue:#60a5fa;--color-cm-indigo:#818cf8;--color-cm-violet:#a78bfa;--color-cm-purple:#c084fc;--color-cm-fuchsia:#e879f9;--color-cm-pink:#f472b6;--color-cm-rose:#fb7185;--color-cm-gray:#fafafa;--color-cm-gray-muted:#a1a1aa;--color-cm-gray-background:#52525b}.cm-s-easymde .cm-comment{background-color:transparent;color:var(--color-cm-gray-muted)}.EasyMDEContainer .CodeMirror-cursor{border-color:currentColor}.dark .EasyMDEContainer .cm-s-easymde span.CodeMirror-selectedtext{filter:invert(100%)}.EasyMDEContainer .cm-s-easymde .cm-keyword{color:var(--color-cm-violet)}.EasyMDEContainer .cm-s-easymde .cm-atom{color:var(--color-cm-blue)}.EasyMDEContainer .cm-s-easymde .cm-number{color:var(--color-cm-green)}.EasyMDEContainer .cm-s-easymde .cm-def{color:var(--color-cm-blue)}.EasyMDEContainer .cm-s-easymde .cm-variable{color:var(--color-cm-yellow)}.EasyMDEContainer .cm-s-easymde .cm-variable-2{color:var(--color-cm-blue)}.EasyMDEContainer .cm-s-easymde .cm-variable-3{color:var(--color-cm-emerald)}.EasyMDEContainer .cm-s-easymde .cm-operator,.EasyMDEContainer .cm-s-easymde .cm-property{color:var(--color-cm-gray)}.EasyMDEContainer .cm-s-easymde .cm-string,.EasyMDEContainer .cm-s-easymde .cm-string-2{color:var(--color-cm-rose)}.EasyMDEContainer .cm-s-easymde .cm-meta{color:var(--color-cm-gray-muted)}.EasyMDEContainer .cm-s-easymde .cm-error{color:var(--color-cm-red)}.EasyMDEContainer .cm-s-easymde .cm-qualifier{color:var(--color-cm-gray-muted)}.EasyMDEContainer .cm-s-easymde .cm-builtin{color:var(--color-cm-violet)}.EasyMDEContainer .cm-s-easymde .cm-bracket{color:var(--color-cm-gray-muted)}.EasyMDEContainer .cm-s-easymde .cm-tag{color:var(--color-cm-green)}.EasyMDEContainer .cm-s-easymde .cm-attribute{color:var(--color-cm-blue)}.EasyMDEContainer .cm-s-easymde .cm-hr{color:var(--color-cm-gray-muted)}.EasyMDEContainer .cm-s-easymde .cm-formatting-quote{color:var(--color-cm-sky)}.EasyMDEContainer .cm-s-easymde .cm-formatting-quote+.cm-quote{color:var(--color-cm-gray-muted)}.EasyMDEContainer .cm-s-easymde .cm-formatting-list,.EasyMDEContainer .cm-s-easymde .cm-formatting-list+.cm-variable-2,.EasyMDEContainer .cm-s-easymde .cm-tab+.cm-variable-2{color:var(--color-cm-gray)}.EasyMDEContainer .cm-s-easymde .cm-link{color:var(--color-cm-blue)}.EasyMDEContainer .cm-s-easymde .cm-tag{color:var(--color-cm-red)}.EasyMDEContainer .cm-s-easymde .cm-attribute{color:var(--color-cm-amber)}.EasyMDEContainer .cm-s-easymde .cm-attribute+.cm-string{color:var(--color-cm-green)}.EasyMDEContainer .cm-s-easymde .cm-formatting-code+.cm-comment:not(.cm-formatting-code){background-color:var(--color-cm-gray-background);color:var(--color-cm-gray)}.EasyMDEContainer .cm-s-easymde .cm-header-1{font-size:1.875rem;line-height:2.25rem}.EasyMDEContainer .cm-s-easymde .cm-header-2{font-size:1.5rem;line-height:2rem}.EasyMDEContainer .cm-s-easymde .cm-header-3{font-size:1.25rem;line-height:1.75rem}.EasyMDEContainer .cm-s-easymde .cm-header-4{font-size:1.125rem;line-height:1.75rem}.EasyMDEContainer .cm-s-easymde .cm-header-5{font-size:1rem;line-height:1.5rem}.EasyMDEContainer .cm-s-easymde .cm-header-6{font-size:.875rem;line-height:1.25rem}.EasyMDEContainer .cm-s-easymde .cm-comment{background-image:none}.EasyMDEContainer .CodeMirror,.EasyMDEContainer .cm-s-easymde .cm-formatting-code-block,.EasyMDEContainer .cm-s-easymde .cm-tab+.cm-comment{background-color:transparent;color:inherit}.EasyMDEContainer .CodeMirror{border-style:none;padding:.375rem .75rem}.EasyMDEContainer .CodeMirror-scroll{height:auto}.EasyMDEContainer .editor-toolbar{--tw-border-opacity:1;border-color:rgba(var(--gray-200),var(--tw-border-opacity));border-radius:0;border-width:0 0 1px;-moz-column-gap:.25rem;column-gap:.25rem;display:flex;overflow-x:auto;padding:.5rem .625rem}.EasyMDEContainer .editor-toolbar:is(.dark *){border-color:hsla(0,0%,100%,.1)}.EasyMDEContainer .editor-toolbar button{border-radius:.5rem;border-style:none;cursor:pointer;display:grid;height:2rem;padding:0;place-content:center;transition-duration:75ms;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);width:2rem}.EasyMDEContainer .editor-toolbar button:hover{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.EasyMDEContainer .editor-toolbar button:focus-visible{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.EasyMDEContainer .editor-toolbar button:hover:is(.dark *){background-color:hsla(0,0%,100%,.05)}.EasyMDEContainer .editor-toolbar button:focus-visible:is(.dark *){background-color:hsla(0,0%,100%,.05)}.EasyMDEContainer .editor-toolbar button.active{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.EasyMDEContainer .editor-toolbar button.active:is(.dark *){background-color:hsla(0,0%,100%,.05)}.EasyMDEContainer .editor-toolbar button:before{--tw-bg-opacity:1;background-color:rgba(var(--gray-700),var(--tw-bg-opacity));display:block;height:1rem;width:1rem}.EasyMDEContainer .editor-toolbar button:is(.dark *):before{--tw-bg-opacity:1;background-color:rgba(var(--gray-300),var(--tw-bg-opacity))}.EasyMDEContainer .editor-toolbar button:before{content:"";-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.EasyMDEContainer .editor-toolbar button.active:before{--tw-bg-opacity:1;background-color:rgba(var(--primary-600),var(--tw-bg-opacity))}.EasyMDEContainer .editor-toolbar button.active:is(.dark *):before{--tw-bg-opacity:1;background-color:rgba(var(--primary-400),var(--tw-bg-opacity))}.EasyMDEContainer .editor-toolbar .separator{border-style:none;margin:0!important;width:.25rem}.EasyMDEContainer .editor-toolbar .bold:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 384 512'%3E%3Cpath d='M321.1 242.4c19-22.3 30.9-50.8 30.9-82.4 0-70.59-57.42-128-128-128l-192 .01c-17.67 0-32 14.31-32 32s14.33 32 32 32h16v320H32c-17.67 0-32 14.31-32 32s14.33 32 32 32h224c70.58 0 128-57.41 128-128 0-46.71-25.4-87.21-62.9-109.61zM112 96.01h112c35.3 0 64 28.72 64 64s-28.7 64-64 64H112v-128zM256 416H112V288h144c35.3 0 64 28.71 64 63.1S291.3 416 256 416z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 384 512'%3E%3Cpath d='M321.1 242.4c19-22.3 30.9-50.8 30.9-82.4 0-70.59-57.42-128-128-128l-192 .01c-17.67 0-32 14.31-32 32s14.33 32 32 32h16v320H32c-17.67 0-32 14.31-32 32s14.33 32 32 32h224c70.58 0 128-57.41 128-128 0-46.71-25.4-87.21-62.9-109.61zM112 96.01h112c35.3 0 64 28.72 64 64s-28.7 64-64 64H112v-128zM256 416H112V288h144c35.3 0 64 28.71 64 63.1S291.3 416 256 416z'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .italic:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 384 512'%3E%3Cpath d='M384 64.01c0 17.69-14.31 32-32 32h-58.67l-133.3 320H224c17.69 0 32 14.31 32 32s-14.31 32-32 32H32c-17.69 0-32-14.31-32-32s14.31-32 32-32h58.67l133.3-320H160c-17.69 0-32-14.31-32-32s14.31-32 32-32h192c17.7 0 32 14.32 32 32z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 384 512'%3E%3Cpath d='M384 64.01c0 17.69-14.31 32-32 32h-58.67l-133.3 320H224c17.69 0 32 14.31 32 32s-14.31 32-32 32H32c-17.69 0-32-14.31-32-32s14.31-32 32-32h58.67l133.3-320H160c-17.69 0-32-14.31-32-32s14.31-32 32-32h192c17.7 0 32 14.32 32 32z'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .strikethrough:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M332.2 319.9c17.22 12.17 22.33 26.51 18.61 48.21-3.031 17.59-10.88 29.34-24.72 36.99-35.44 19.75-108.5 11.96-186-19.68-16.34-6.686-35.03 1.156-41.72 17.53s1.188 35.05 17.53 41.71c31.75 12.93 95.69 35.37 157.6 35.37 29.62 0 58.81-5.156 83.72-18.96 30.81-17.09 50.44-45.46 56.72-82.11 3.998-23.27 2.168-42.58-3.488-59.05H332.2zm155.8-80-176.5-.03c-15.85-5.614-31.83-10.34-46.7-14.62-85.47-24.62-110.9-39.05-103.7-81.33 2.5-14.53 10.16-25.96 22.72-34.03 20.47-13.15 64.06-23.84 155.4.343 17.09 4.53 34.59-5.654 39.13-22.74 4.531-17.09-5.656-34.59-22.75-39.12-91.31-24.18-160.7-21.62-206.3 7.654C121.8 73.72 103.6 101.1 98.09 133.1c-8.83 51.4 9.81 84.2 39.11 106.8H24c-13.25 0-24 10.75-24 23.1 0 13.25 10.75 23.1 24 23.1h464c13.25 0 24-10.75 24-23.1 0-12.3-10.7-23.1-24-23.1z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M332.2 319.9c17.22 12.17 22.33 26.51 18.61 48.21-3.031 17.59-10.88 29.34-24.72 36.99-35.44 19.75-108.5 11.96-186-19.68-16.34-6.686-35.03 1.156-41.72 17.53s1.188 35.05 17.53 41.71c31.75 12.93 95.69 35.37 157.6 35.37 29.62 0 58.81-5.156 83.72-18.96 30.81-17.09 50.44-45.46 56.72-82.11 3.998-23.27 2.168-42.58-3.488-59.05H332.2zm155.8-80-176.5-.03c-15.85-5.614-31.83-10.34-46.7-14.62-85.47-24.62-110.9-39.05-103.7-81.33 2.5-14.53 10.16-25.96 22.72-34.03 20.47-13.15 64.06-23.84 155.4.343 17.09 4.53 34.59-5.654 39.13-22.74 4.531-17.09-5.656-34.59-22.75-39.12-91.31-24.18-160.7-21.62-206.3 7.654C121.8 73.72 103.6 101.1 98.09 133.1c-8.83 51.4 9.81 84.2 39.11 106.8H24c-13.25 0-24 10.75-24 23.1 0 13.25 10.75 23.1 24 23.1h464c13.25 0 24-10.75 24-23.1 0-12.3-10.7-23.1-24-23.1z'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .link:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 640 512'%3E%3Cpath d='M598.6 41.41C570.1 13.8 534.8 0 498.6 0s-72.36 13.8-99.96 41.41l-43.36 43.36c15.11 8.012 29.47 17.58 41.91 30.02 3.146 3.146 5.898 6.518 8.742 9.838l37.96-37.96C458.5 72.05 477.1 64 498.6 64c20.67 0 40.1 8.047 54.71 22.66 14.61 14.61 22.66 34.04 22.66 54.71s-8.049 40.1-22.66 54.71l-133.3 133.3C405.5 343.1 386 352 365.4 352s-40.1-8.048-54.71-22.66C296 314.7 287.1 295.3 287.1 274.6s8.047-40.1 22.66-54.71l4.44-3.49c-2.1-3.9-4.3-7.9-7.5-11.1-8.6-8.6-19.9-13.3-32.1-13.3-11.93 0-23.1 4.664-31.61 12.97-30.71 53.96-23.63 123.6 22.39 169.6C293 402.2 329.2 416 365.4 416c36.18 0 72.36-13.8 99.96-41.41L598.6 241.3c28.45-28.45 42.24-66.01 41.37-103.3-.87-35.9-14.57-69.84-41.37-96.59zM234 387.4l-37.9 37.9C181.5 439.1 162 448 141.4 448c-20.67 0-40.1-8.047-54.71-22.66-14.61-14.61-22.66-34.04-22.66-54.71s8.049-40.1 22.66-54.71l133.3-133.3C234.5 168 253.1 160 274.6 160s40.1 8.048 54.71 22.66c14.62 14.61 22.66 34.04 22.66 54.71s-8.047 40.1-22.66 54.71l-3.51 3.52c2.094 3.939 4.219 7.895 7.465 11.15C341.9 315.3 353.3 320 365.4 320c11.93 0 23.1-4.664 31.61-12.97 30.71-53.96 23.63-123.6-22.39-169.6C346.1 109.8 310.8 96 274.6 96c-36.2 0-72.3 13.8-99.9 41.4L41.41 270.7C13.81 298.3 0 334.48 0 370.66c0 36.18 13.8 72.36 41.41 99.97C69.01 498.2 105.2 512 141.4 512c36.18 0 72.36-13.8 99.96-41.41l43.36-43.36c-15.11-8.012-29.47-17.58-41.91-30.02-3.21-3.11-5.91-6.51-8.81-9.81z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 640 512'%3E%3Cpath d='M598.6 41.41C570.1 13.8 534.8 0 498.6 0s-72.36 13.8-99.96 41.41l-43.36 43.36c15.11 8.012 29.47 17.58 41.91 30.02 3.146 3.146 5.898 6.518 8.742 9.838l37.96-37.96C458.5 72.05 477.1 64 498.6 64c20.67 0 40.1 8.047 54.71 22.66 14.61 14.61 22.66 34.04 22.66 54.71s-8.049 40.1-22.66 54.71l-133.3 133.3C405.5 343.1 386 352 365.4 352s-40.1-8.048-54.71-22.66C296 314.7 287.1 295.3 287.1 274.6s8.047-40.1 22.66-54.71l4.44-3.49c-2.1-3.9-4.3-7.9-7.5-11.1-8.6-8.6-19.9-13.3-32.1-13.3-11.93 0-23.1 4.664-31.61 12.97-30.71 53.96-23.63 123.6 22.39 169.6C293 402.2 329.2 416 365.4 416c36.18 0 72.36-13.8 99.96-41.41L598.6 241.3c28.45-28.45 42.24-66.01 41.37-103.3-.87-35.9-14.57-69.84-41.37-96.59zM234 387.4l-37.9 37.9C181.5 439.1 162 448 141.4 448c-20.67 0-40.1-8.047-54.71-22.66-14.61-14.61-22.66-34.04-22.66-54.71s8.049-40.1 22.66-54.71l133.3-133.3C234.5 168 253.1 160 274.6 160s40.1 8.048 54.71 22.66c14.62 14.61 22.66 34.04 22.66 54.71s-8.047 40.1-22.66 54.71l-3.51 3.52c2.094 3.939 4.219 7.895 7.465 11.15C341.9 315.3 353.3 320 365.4 320c11.93 0 23.1-4.664 31.61-12.97 30.71-53.96 23.63-123.6-22.39-169.6C346.1 109.8 310.8 96 274.6 96c-36.2 0-72.3 13.8-99.9 41.4L41.41 270.7C13.81 298.3 0 334.48 0 370.66c0 36.18 13.8 72.36 41.41 99.97C69.01 498.2 105.2 512 141.4 512c36.18 0 72.36-13.8 99.96-41.41l43.36-43.36c-15.11-8.012-29.47-17.58-41.91-30.02-3.21-3.11-5.91-6.51-8.81-9.81z'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .heading:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'%3E%3Cpath d='M0 64c0-17.7 14.3-32 32-32h96c17.7 0 32 14.3 32 32s-14.3 32-32 32h-16v112h224V96h-16c-17.7 0-32-14.3-32-32s14.3-32 32-32h96c17.7 0 32 14.3 32 32s-14.3 32-32 32h-16v320h16c17.7 0 32 14.3 32 32s-14.3 32-32 32h-96c-17.7 0-32-14.3-32-32s14.3-32 32-32h16V272H112v144h16c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32h16V96H32C14.3 96 0 81.7 0 64z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'%3E%3Cpath d='M0 64c0-17.7 14.3-32 32-32h96c17.7 0 32 14.3 32 32s-14.3 32-32 32h-16v112h224V96h-16c-17.7 0-32-14.3-32-32s14.3-32 32-32h96c17.7 0 32 14.3 32 32s-14.3 32-32 32h-16v320h16c17.7 0 32 14.3 32 32s-14.3 32-32 32h-96c-17.7 0-32-14.3-32-32s14.3-32 32-32h16V272H112v144h16c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32h16V96H32C14.3 96 0 81.7 0 64z'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .quote:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'%3E%3Cpath d='M96 224c-11.28 0-21.95 2.3-32 5.9V224c0-35.3 28.7-64 64-64 17.67 0 32-14.33 32-32s-14.3-32-32-32C57.42 96 0 153.4 0 224v96c0 53.02 42.98 96 96 96s96-42.98 96-96-43-96-96-96zm256 0c-11.28 0-21.95 2.305-32 5.879V224c0-35.3 28.7-64 64-64 17.67 0 32-14.33 32-32s-14.33-32-32-32c-70.58 0-128 57.42-128 128v96c0 53.02 42.98 96 96 96s96-42.98 96-96-43-96-96-96z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'%3E%3Cpath d='M96 224c-11.28 0-21.95 2.3-32 5.9V224c0-35.3 28.7-64 64-64 17.67 0 32-14.33 32-32s-14.3-32-32-32C57.42 96 0 153.4 0 224v96c0 53.02 42.98 96 96 96s96-42.98 96-96-43-96-96-96zm256 0c-11.28 0-21.95 2.305-32 5.879V224c0-35.3 28.7-64 64-64 17.67 0 32-14.33 32-32s-14.33-32-32-32c-70.58 0-128 57.42-128 128v96c0 53.02 42.98 96 96 96s96-42.98 96-96-43-96-96-96z'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .code:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 640 512'%3E%3Cpath d='M416 31.94C416 21.75 408.1 0 384.1 0c-13.98 0-26.87 9.072-30.89 23.18l-128 448a31.933 31.933 0 0 0-1.241 8.801C223.1 490.3 232 512 256 512c13.92 0 26.73-9.157 30.75-23.22l128-448c.85-2.97 1.25-5.93 1.25-8.84zM176 143.1c0-18.28-14.95-32-32-32-8.188 0-16.38 3.125-22.62 9.376l-112 112C3.125 239.6 0 247.8 0 255.1s3.125 17.3 9.375 23.5l112 112c6.225 6.3 14.425 8.5 22.625 8.5 17.05 0 32-13.73 32-32 0-8.188-3.125-16.38-9.375-22.63L77.25 255.1l89.38-89.38c6.27-5.42 9.37-13.52 9.37-22.62zm464 112c0-8.188-3.125-16.38-9.375-22.63l-112-112C512.4 115.1 504.2 111.1 496 111.1c-17.05 0-32 13.73-32 32 0 8.188 3.125 16.38 9.375 22.63l89.38 89.38-89.38 89.38C467.1 351.6 464 359.8 464 367.1c0 18.28 14.95 32 32 32 8.188 0 16.38-3.125 22.62-9.376l112-112C636.9 272.4 640 264.2 640 255.1z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 640 512'%3E%3Cpath d='M416 31.94C416 21.75 408.1 0 384.1 0c-13.98 0-26.87 9.072-30.89 23.18l-128 448a31.933 31.933 0 0 0-1.241 8.801C223.1 490.3 232 512 256 512c13.92 0 26.73-9.157 30.75-23.22l128-448c.85-2.97 1.25-5.93 1.25-8.84zM176 143.1c0-18.28-14.95-32-32-32-8.188 0-16.38 3.125-22.62 9.376l-112 112C3.125 239.6 0 247.8 0 255.1s3.125 17.3 9.375 23.5l112 112c6.225 6.3 14.425 8.5 22.625 8.5 17.05 0 32-13.73 32-32 0-8.188-3.125-16.38-9.375-22.63L77.25 255.1l89.38-89.38c6.27-5.42 9.37-13.52 9.37-22.62zm464 112c0-8.188-3.125-16.38-9.375-22.63l-112-112C512.4 115.1 504.2 111.1 496 111.1c-17.05 0-32 13.73-32 32 0 8.188 3.125 16.38 9.375 22.63l89.38 89.38-89.38 89.38C467.1 351.6 464 359.8 464 367.1c0 18.28 14.95 32 32 32 8.188 0 16.38-3.125 22.62-9.376l112-112C636.9 272.4 640 264.2 640 255.1z'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .unordered-list:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M16 96c0-26.51 21.49-48 48-48s48 21.49 48 48c0 26.5-21.49 48-48 48s-48-21.5-48-48zm464-32c17.7 0 32 14.33 32 32 0 17.7-14.3 32-32 32H192c-17.7 0-32-14.3-32-32 0-17.67 14.3-32 32-32h288zm0 160c17.7 0 32 14.3 32 32s-14.3 32-32 32H192c-17.7 0-32-14.3-32-32s14.3-32 32-32h288zm0 160c17.7 0 32 14.3 32 32s-14.3 32-32 32H192c-17.7 0-32-14.3-32-32s14.3-32 32-32h288zM16 416c0-26.5 21.49-48 48-48s48 21.5 48 48-21.49 48-48 48-48-21.5-48-48zm96-160c0 26.5-21.49 48-48 48s-48-21.5-48-48 21.49-48 48-48 48 21.5 48 48z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M16 96c0-26.51 21.49-48 48-48s48 21.49 48 48c0 26.5-21.49 48-48 48s-48-21.5-48-48zm464-32c17.7 0 32 14.33 32 32 0 17.7-14.3 32-32 32H192c-17.7 0-32-14.3-32-32 0-17.67 14.3-32 32-32h288zm0 160c17.7 0 32 14.3 32 32s-14.3 32-32 32H192c-17.7 0-32-14.3-32-32s14.3-32 32-32h288zm0 160c17.7 0 32 14.3 32 32s-14.3 32-32 32H192c-17.7 0-32-14.3-32-32s14.3-32 32-32h288zM16 416c0-26.5 21.49-48 48-48s48 21.5 48 48-21.49 48-48 48-48-21.5-48-48zm96-160c0 26.5-21.49 48-48 48s-48-21.5-48-48 21.49-48 48-48 48 21.5 48 48z'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .ordered-list:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M55.1 56.04c0-13.26 11.64-24 24-24h32c14.2 0 24 10.74 24 24V176h16c14.2 0 24 10.8 24 24 0 13.3-9.8 24-24 24h-80c-12.36 0-24-10.7-24-24 0-13.2 11.64-24 24-24h16V80.04h-8c-12.36 0-24-10.75-24-24zm63.6 285.16c-6.6-7.4-18.3-6.9-24.05 1.2l-11.12 15.5c-7.7 10.8-22.69 13.3-33.48 5.6-10.79-7.7-13.28-22.7-5.58-33.4l11.12-15.6c23.74-33.3 72.31-35.7 99.21-4.9 21.3 23.5 20.8 60.9-1.1 84.7L118.8 432H152c13.3 0 24 10.7 24 24s-10.7 24-24 24H64c-9.53 0-18.16-5.6-21.98-14.4-3.83-8.7-2.12-18.9 4.34-25.9l72.04-78c5.3-5.8 5.4-14.6.3-20.5zM512 64c17.7 0 32 14.33 32 32 0 17.7-14.3 32-32 32H256c-17.7 0-32-14.3-32-32 0-17.67 14.3-32 32-32h256zm0 160c17.7 0 32 14.3 32 32s-14.3 32-32 32H256c-17.7 0-32-14.3-32-32s14.3-32 32-32h256zm0 160c17.7 0 32 14.3 32 32s-14.3 32-32 32H256c-17.7 0-32-14.3-32-32s14.3-32 32-32h256z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M55.1 56.04c0-13.26 11.64-24 24-24h32c14.2 0 24 10.74 24 24V176h16c14.2 0 24 10.8 24 24 0 13.3-9.8 24-24 24h-80c-12.36 0-24-10.7-24-24 0-13.2 11.64-24 24-24h16V80.04h-8c-12.36 0-24-10.75-24-24zm63.6 285.16c-6.6-7.4-18.3-6.9-24.05 1.2l-11.12 15.5c-7.7 10.8-22.69 13.3-33.48 5.6-10.79-7.7-13.28-22.7-5.58-33.4l11.12-15.6c23.74-33.3 72.31-35.7 99.21-4.9 21.3 23.5 20.8 60.9-1.1 84.7L118.8 432H152c13.3 0 24 10.7 24 24s-10.7 24-24 24H64c-9.53 0-18.16-5.6-21.98-14.4-3.83-8.7-2.12-18.9 4.34-25.9l72.04-78c5.3-5.8 5.4-14.6.3-20.5zM512 64c17.7 0 32 14.33 32 32 0 17.7-14.3 32-32 32H256c-17.7 0-32-14.3-32-32 0-17.67 14.3-32 32-32h256zm0 160c17.7 0 32 14.3 32 32s-14.3 32-32 32H256c-17.7 0-32-14.3-32-32s14.3-32 32-32h256zm0 160c17.7 0 32 14.3 32 32s-14.3 32-32 32H256c-17.7 0-32-14.3-32-32s14.3-32 32-32h256z'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .table:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1792 1792'%3E%3Cpath d='M576 1376v-192q0-14-9-23t-23-9H224q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm0-384V800q0-14-9-23t-23-9H224q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm512 384v-192q0-14-9-23t-23-9H736q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zM576 608V416q0-14-9-23t-23-9H224q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm512 384V800q0-14-9-23t-23-9H736q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm512 384v-192q0-14-9-23t-23-9h-320q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm-512-768V416q0-14-9-23t-23-9H736q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm512 384V800q0-14-9-23t-23-9h-320q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm0-384V416q0-14-9-23t-23-9h-320q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm128-320v1088q0 66-47 113t-113 47H224q-66 0-113-47t-47-113V288q0-66 47-113t113-47h1344q66 0 113 47t47 113z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1792 1792'%3E%3Cpath d='M576 1376v-192q0-14-9-23t-23-9H224q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm0-384V800q0-14-9-23t-23-9H224q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm512 384v-192q0-14-9-23t-23-9H736q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zM576 608V416q0-14-9-23t-23-9H224q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm512 384V800q0-14-9-23t-23-9H736q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm512 384v-192q0-14-9-23t-23-9h-320q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm-512-768V416q0-14-9-23t-23-9H736q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm512 384V800q0-14-9-23t-23-9h-320q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm0-384V416q0-14-9-23t-23-9h-320q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm128-320v1088q0 66-47 113t-113 47H224q-66 0-113-47t-47-113V288q0-66 47-113t113-47h1344q66 0 113 47t47 113z'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .upload-image:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M447.1 32h-484C28.64 32-.01 60.65-.01 96v320c0 35.35 28.65 64 63.1 64h384c35.35 0 64-28.65 64-64V96c.01-35.35-27.79-64-63.99-64zm-336 64c26.51 0 48 21.49 48 48s-20.6 48-48 48-48-21.49-48-48 22.38-48 48-48zm335 311.6c-2.8 5.2-8.2 8.4-14.1 8.4H82.01a15.993 15.993 0 0 1-14.26-8.75 16 16 0 0 1 1.334-16.68l70-96C142.1 290.4 146.9 288 152 288s9.916 2.441 12.93 6.574l32.46 44.51 93.3-139.1C293.7 194.7 298.7 192 304 192s10.35 2.672 13.31 7.125l128 192c3.29 4.875 3.59 11.175.79 16.475z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M447.1 32h-484C28.64 32-.01 60.65-.01 96v320c0 35.35 28.65 64 63.1 64h384c35.35 0 64-28.65 64-64V96c.01-35.35-27.79-64-63.99-64zm-336 64c26.51 0 48 21.49 48 48s-20.6 48-48 48-48-21.49-48-48 22.38-48 48-48zm335 311.6c-2.8 5.2-8.2 8.4-14.1 8.4H82.01a15.993 15.993 0 0 1-14.26-8.75 16 16 0 0 1 1.334-16.68l70-96C142.1 290.4 146.9 288 152 288s9.916 2.441 12.93 6.574l32.46 44.51 93.3-139.1C293.7 194.7 298.7 192 304 192s10.35 2.672 13.31 7.125l128 192c3.29 4.875 3.59 11.175.79 16.475z'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .undo:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M480 256c0 123.4-100.5 223.9-223.9 223.9-48.84 0-95.17-15.58-134.2-44.86-14.12-10.59-16.97-30.66-6.375-44.81 10.59-14.12 30.62-16.94 44.81-6.375 27.84 20.91 61 31.94 95.88 31.94C344.3 415.8 416 344.1 416 256S344.31 96.2 256.2 96.2c-37.46 0-73.09 13.49-101.3 36.64l45.12 45.14c17.01 17.02 4.955 46.1-19.1 46.1H35.17C24.58 224.1 16 215.5 16 204.9V59.04C16 35 45.07 22.96 62.07 39.97l47.6 47.63C149.9 52.71 201.5 32.11 256.1 32.11 379.5 32.11 480 132.6 480 256z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M480 256c0 123.4-100.5 223.9-223.9 223.9-48.84 0-95.17-15.58-134.2-44.86-14.12-10.59-16.97-30.66-6.375-44.81 10.59-14.12 30.62-16.94 44.81-6.375 27.84 20.91 61 31.94 95.88 31.94C344.3 415.8 416 344.1 416 256S344.31 96.2 256.2 96.2c-37.46 0-73.09 13.49-101.3 36.64l45.12 45.14c17.01 17.02 4.955 46.1-19.1 46.1H35.17C24.58 224.1 16 215.5 16 204.9V59.04C16 35 45.07 22.96 62.07 39.97l47.6 47.63C149.9 52.71 201.5 32.11 256.1 32.11 379.5 32.11 480 132.6 480 256z'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .redo:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M468.9 32.11c13.87 0 27.18 10.77 27.18 27.04v145.9c0 10.59-8.584 19.17-19.17 19.17h-145.7c-16.28 0-27.06-13.32-27.06-27.2 0-6.634 2.461-13.4 7.96-18.9l45.12-45.14c-28.22-23.14-63.85-36.64-101.3-36.64-88.09 0-159.8 71.69-159.8 159.8S167.8 415.9 255.9 415.9c73.14 0 89.44-38.31 115.1-38.31 18.48 0 31.97 15.04 31.97 31.96 0 35.04-81.59 70.41-147 70.41-123.4 0-223.9-100.5-223.9-223.9S132.6 32.44 256 32.44c54.6 0 106.2 20.39 146.4 55.26L450 40.07c5.5-5.5 12.3-7.96 18.9-7.96z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M468.9 32.11c13.87 0 27.18 10.77 27.18 27.04v145.9c0 10.59-8.584 19.17-19.17 19.17h-145.7c-16.28 0-27.06-13.32-27.06-27.2 0-6.634 2.461-13.4 7.96-18.9l45.12-45.14c-28.22-23.14-63.85-36.64-101.3-36.64-88.09 0-159.8 71.69-159.8 159.8S167.8 415.9 255.9 415.9c73.14 0 89.44-38.31 115.1-38.31 18.48 0 31.97 15.04 31.97 31.96 0 35.04-81.59 70.41-147 70.41-123.4 0-223.9-100.5-223.9-223.9S132.6 32.44 256 32.44c54.6 0 106.2 20.39 146.4 55.26L450 40.07c5.5-5.5 12.3-7.96 18.9-7.96z'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-statusbar{display:none}.fi-fo-rich-editor trix-toolbar .trix-dialogs{position:relative}.fi-fo-rich-editor trix-toolbar .trix-dialog{--tw-bg-opacity:1;--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);background-color:rgba(var(--gray-50),var(--tw-bg-opacity));border-radius:.5rem;bottom:auto;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);left:0;padding:.5rem;position:absolute;right:0;top:1rem}.fi-fo-rich-editor trix-toolbar .trix-dialog:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-800),var(--tw-bg-opacity))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields{display:flex;flex-direction:column;gap:.5rem;width:100%}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-button-group{display:flex;gap:.5rem}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgba(var(--gray-950),0.1);background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.375rem;border-style:none;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgba(var(--gray-950),var(--tw-text-opacity));display:block;font-size:.875rem;line-height:1.25rem;outline:2px solid transparent;outline-offset:2px;padding-bottom:.375rem;padding-inline-end:.75rem;padding-top:.375rem;padding-inline-start:.75rem;transition-duration:75ms;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);width:100%}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input::-moz-placeholder{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input::placeholder{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input:focus-within{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-600),var(--tw-ring-opacity))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input:is(.dark *){--tw-bg-opacity:1;--tw-text-opacity:1;--tw-ring-color:hsla(0,0%,100%,.2);background-color:rgba(var(--gray-700),var(--tw-bg-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input:is(.dark *)::-moz-placeholder{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input:is(.dark *)::placeholder{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input:focus-within:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-600),var(--tw-ring-opacity))}@media (min-width:640px){.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input{font-size:.875rem;line-height:1.5rem}}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-button-group .trix-button{--tw-bg-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgba(var(--gray-200),var(--tw-ring-opacity));background-color:rgba(var(--gray-50),var(--tw-bg-opacity));border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);font-size:.75rem;line-height:1rem;padding:.125rem .5rem}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-button-group .trix-button:is(.dark *){--tw-bg-opacity:1;--tw-ring-opacity:1;--tw-ring-color:rgba(var(--gray-600),var(--tw-ring-opacity));background-color:rgba(var(--gray-700),var(--tw-bg-opacity))}.fi-fo-rich-editor trix-editor:empty:before{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.fi-fo-rich-editor trix-editor:empty:is(.dark *):before{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.fi-fo-rich-editor trix-editor:empty:before{content:attr(placeholder)}.fi-fo-rich-editor trix-editor.prose :where(ol):not(:where([class~=not-prose] *)),.fi-fo-rich-editor trix-editor.prose :where(ul):not(:where([class~=not-prose] *)){padding-inline-end:0!important;padding-inline-start:1.625em!important}.fi-fo-rich-editor trix-editor.prose :where(ul>li):not(:where([class~=not-prose] *)){padding-inline-end:0!important;padding-inline-start:.375em!important}select:not(.choices){background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E")}[dir=rtl] select{background-position:left .5rem center!important}.choices{outline:2px solid transparent;outline-offset:2px;position:relative}.choices [hidden]{display:none!important}.choices[data-type*=select-one] .has-no-choices{display:none}.choices[data-type*=select-one] .choices__input{display:block;margin:0;width:100%}.choices__inner{background-repeat:no-repeat;outline:2px solid transparent;outline-offset:2px;padding-bottom:.375rem;padding-inline-end:2rem;padding-top:.375rem;padding-inline-start:.75rem}@media (min-width:640px){.choices__inner{font-size:.875rem;line-height:1.5rem}}.choices__inner{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E");background-position:right .5rem center;background-size:1.5em 1.5em}.choices.is-disabled .choices__inner{cursor:default}[dir=rtl] .choices__inner{background-position:left .5rem center}.choices__list--single{display:inline-block}.choices__list--single .choices__item{--tw-text-opacity:1;color:rgba(var(--gray-950),var(--tw-text-opacity))}.choices__list--single .choices__item:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.choices.is-disabled .choices__list--single .choices__item{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.choices.is-disabled .choices__list--single .choices__item:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.choices__list--multiple{display:flex;flex-wrap:wrap;gap:.375rem}.choices__list--multiple:not(:empty){margin-bottom:.25rem;margin-left:-.25rem;margin-right:-.25rem;padding-bottom:.125rem;padding-top:.125rem}.choices__list--multiple .choices__item{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-inset:inset;--tw-ring-color:rgba(var(--primary-600),0.1);align-items:center;background-color:rgba(var(--primary-50),var(--tw-bg-opacity));border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgba(var(--primary-600),var(--tw-text-opacity));display:inline-flex;font-size:.75rem;font-weight:500;gap:.25rem;line-height:1rem;padding:.25rem .5rem;word-break:break-all}.choices__list--multiple .choices__item:is(.dark *){--tw-text-opacity:1;--tw-ring-color:rgba(var(--primary-400),0.3);background-color:rgba(var(--primary-400),.1);color:rgba(var(--primary-400),var(--tw-text-opacity))}.choices__list--dropdown,.choices__list[aria-expanded]{--tw-bg-opacity:1;--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgba(var(--gray-950),0.05);background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.5rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);display:none;font-size:.875rem;line-height:1.25rem;margin-top:.5rem;overflow:hidden;overflow-wrap:break-word;position:absolute;top:100%;width:100%;will-change:visibility;z-index:10}.choices__list--dropdown:is(.dark *),.choices__list[aria-expanded]:is(.dark *){--tw-bg-opacity:1;--tw-ring-color:hsla(0,0%,100%,.1);background-color:rgba(var(--gray-900),var(--tw-bg-opacity))}.is-active.choices__list--dropdown,.is-active.choices__list[aria-expanded]{display:block;padding:.25rem}.choices__list--dropdown .choices__list,.choices__list[aria-expanded] .choices__list{max-height:15rem;overflow:auto;will-change:scroll-position}.choices__item--choice{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity));padding:.5rem;transition-duration:75ms;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.choices__item--choice:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.choices__item--choice.choices__item--selectable{--tw-text-opacity:1;border-radius:.375rem;color:rgba(var(--gray-950),var(--tw-text-opacity))}.choices__item--choice.choices__item--selectable:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.choices__list--dropdown .choices__item--selectable.is-highlighted,.choices__list[aria-expanded] .choices__item--selectable.is-highlighted{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.choices__list--dropdown .choices__item--selectable.is-highlighted:is(.dark *),.choices__list[aria-expanded] .choices__item--selectable.is-highlighted:is(.dark *){background-color:hsla(0,0%,100%,.05)}.choices__item{cursor:default}.choices__item--disabled{pointer-events:none}.choices__item--disabled:disabled{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.choices__item--disabled:disabled:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.choices.is-disabled .choices__placeholder.choices__item,.choices__placeholder.choices__item{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity));cursor:default}.choices.is-disabled .choices__placeholder.choices__item:is(.dark *),.choices__placeholder.choices__item:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.choices__button{background-color:transparent;background-position:50%;background-repeat:no-repeat;border-width:0;outline:2px solid transparent;outline-offset:2px;text-indent:-9999px}.choices[data-type*=select-one] .choices__button{height:1rem;inset-inline-end:0;margin-inline-end:2.25rem;opacity:.5;padding:0;position:absolute;transition-duration:75ms;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);width:1rem}.choices[data-type*=select-one] .choices__button:is(.dark *){opacity:.4}.choices[data-type*=select-one] .choices__button{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJtMi41OTIuMDQ0IDE4LjM2NCAxOC4zNjQtMi41NDggMi41NDhMLjA0NCAyLjU5MnoiLz48cGF0aCBkPSJNMCAxOC4zNjQgMTguMzY0IDBsMi41NDggMi41NDhMMi41NDggMjAuOTEyeiIvPjwvZz48L3N2Zz4=);background-size:.7142em .7142em;top:calc(50% - .5714em)}.dark .choices[data-type*=select-one] .choices__button{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJtMi41OTIuMDQ0IDE4LjM2NCAxOC4zNjQtMi41NDggMi41NDhMLjA0NCAyLjU5MnoiLz48cGF0aCBkPSJNMCAxOC4zNjQgMTguMzY0IDBsMi41NDggMi41NDhMMi41NDggMjAuOTEyeiIvPjwvZz48L3N2Zz4=)}.choices[data-type*=select-multiple] .choices__button{height:1rem;opacity:.5;width:1rem}.choices[data-type*=select-multiple] .choices__button:is(.dark *){opacity:.4}.choices[data-type*=select-multiple] .choices__button{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJtMi41OTIuMDQ0IDE4LjM2NCAxOC4zNjQtMi41NDggMi41NDhMLjA0NCAyLjU5MnoiLz48cGF0aCBkPSJNMCAxOC4zNjQgMTguMzY0IDBsMi41NDggMi41NDhMMi41NDggMjAuOTEyeiIvPjwvZz48L3N2Zz4=);background-size:.7142em .7142em}.dark .choices[data-type*=select-multiple] .choices__button{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJtMi41OTIuMDQ0IDE4LjM2NCAxOC4zNjQtMi41NDggMi41NDhMLjA0NCAyLjU5MnoiLz48cGF0aCBkPSJNMCAxOC4zNjQgMTguMzY0IDBsMi41NDggMi41NDhMMi41NDggMjAuOTEyeiIvPjwvZz48L3N2Zz4=)}.choices[data-type*=select-multiple] .choices__button:focus-visible,.choices[data-type*=select-multiple] .choices__button:hover,.choices[data-type*=select-one] .choices__button:focus-visible,.choices[data-type*=select-one] .choices__button:hover{opacity:.7}.choices[data-type*=select-multiple] .choices__button:focus-visible:is(.dark *),.choices[data-type*=select-multiple] .choices__button:hover:is(.dark *),.choices[data-type*=select-one] .choices__button:focus-visible:is(.dark *),.choices[data-type*=select-one] .choices__button:hover:is(.dark *){opacity:.6}.choices.is-disabled .choices__button,.choices[data-type*=select-one] .choices__item[data-value=""] .choices__button{display:none}.choices__input{--tw-text-opacity:1;background-color:transparent!important;border-style:none;color:rgba(var(--gray-950),var(--tw-text-opacity));font-size:1rem!important;line-height:1.5rem!important;padding:0!important;transition-duration:75ms;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.choices__input::-moz-placeholder{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.choices__input::placeholder{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.choices__input:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)!important;--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)!important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)!important}.choices__input:disabled{--tw-text-opacity:1;-webkit-text-fill-color:rgba(var(--gray-500),1);color:rgba(var(--gray-500),var(--tw-text-opacity))}.choices__input:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.choices__input:is(.dark *)::-moz-placeholder{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.choices__input:is(.dark *)::placeholder{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.choices__input:disabled:is(.dark *){--tw-text-opacity:1;-webkit-text-fill-color:rgba(var(--gray-400),1);color:rgba(var(--gray-400),var(--tw-text-opacity))}@media (min-width:640px){.choices__input{font-size:.875rem!important;line-height:1.5rem}}.choices__list--dropdown .choices__input{padding:.5rem!important}.choices__input::-webkit-search-cancel-button,.choices__input::-webkit-search-decoration,.choices__input::-webkit-search-results-button,.choices__input::-webkit-search-results-decoration{display:none}.choices__input::-ms-clear,.choices__input::-ms-reveal{display:none;height:0;width:0}.choices__group{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity));padding:1rem .5rem .5rem}.choices__group:first-child{padding-top:.5rem}.choices__group:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.webkit-calendar-picker-indicator\:opacity-0::-webkit-calendar-picker-indicator{opacity:0}/*! Bundled license information: +input::-webkit-datetime-edit{display:block;padding:0}.cropper-container{-webkit-touch-callout:none;direction:ltr;font-size:0;line-height:0;position:relative;touch-action:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.cropper-container img{backface-visibility:hidden;display:block;height:100%;image-orientation:0deg;max-height:none!important;max-width:none!important;min-height:0!important;min-width:0!important;width:100%}.cropper-canvas,.cropper-crop-box,.cropper-drag-box,.cropper-modal,.cropper-wrap-box{inset:0;position:absolute}.cropper-canvas,.cropper-wrap-box{overflow:hidden}.cropper-drag-box{background-color:#fff;opacity:0}.cropper-modal{background-color:#000;opacity:.5}.cropper-view-box{display:block;height:100%;outline:1px solid #39f;outline-color:#3399ffbf;overflow:hidden;width:100%}.cropper-dashed{border:0 dashed #eee;display:block;opacity:.5;position:absolute}.cropper-dashed.dashed-h{border-bottom-width:1px;border-top-width:1px;height:33.33333%;left:0;top:33.33333%;width:100%}.cropper-dashed.dashed-v{border-left-width:1px;border-right-width:1px;height:100%;left:33.33333%;top:0;width:33.33333%}.cropper-center{display:block;height:0;left:50%;opacity:.75;position:absolute;top:50%;width:0}.cropper-center:after,.cropper-center:before{background-color:#eee;content:" ";display:block;position:absolute}.cropper-center:before{height:1px;left:-3px;top:0;width:7px}.cropper-center:after{height:7px;left:0;top:-3px;width:1px}.cropper-face,.cropper-line,.cropper-point{display:block;height:100%;opacity:.1;position:absolute;width:100%}.cropper-face{background-color:#fff;left:0;top:0}.cropper-line{background-color:#39f}.cropper-line.line-e{cursor:ew-resize;right:-3px;top:0;width:5px}.cropper-line.line-n{cursor:ns-resize;height:5px;left:0;top:-3px}.cropper-line.line-w{cursor:ew-resize;left:-3px;top:0;width:5px}.cropper-line.line-s{bottom:-3px;cursor:ns-resize;height:5px;left:0}.cropper-point{background-color:#39f;height:5px;opacity:.75;width:5px}.cropper-point.point-e{cursor:ew-resize;margin-top:-3px;right:-3px;top:50%}.cropper-point.point-n{cursor:ns-resize;left:50%;margin-left:-3px;top:-3px}.cropper-point.point-w{cursor:ew-resize;left:-3px;margin-top:-3px;top:50%}.cropper-point.point-s{bottom:-3px;cursor:s-resize;left:50%;margin-left:-3px}.cropper-point.point-ne{cursor:nesw-resize;right:-3px;top:-3px}.cropper-point.point-nw{cursor:nwse-resize;left:-3px;top:-3px}.cropper-point.point-sw{bottom:-3px;cursor:nesw-resize;left:-3px}.cropper-point.point-se{bottom:-3px;cursor:nwse-resize;height:20px;opacity:1;right:-3px;width:20px}@media (min-width:768px){.cropper-point.point-se{height:15px;width:15px}}@media (min-width:992px){.cropper-point.point-se{height:10px;width:10px}}@media (min-width:1200px){.cropper-point.point-se{height:5px;opacity:.75;width:5px}}.cropper-point.point-se:before{background-color:#39f;bottom:-50%;content:" ";display:block;height:200%;opacity:0;position:absolute;right:-50%;width:200%}.cropper-invisible{opacity:0}.cropper-bg{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC)}.cropper-hide{display:block;height:0;position:absolute;width:0}.cropper-hidden{display:none!important}.cropper-move{cursor:move}.cropper-crop{cursor:crosshair}.cropper-disabled .cropper-drag-box,.cropper-disabled .cropper-face,.cropper-disabled .cropper-line,.cropper-disabled .cropper-point{cursor:not-allowed}.filepond--assistant{clip:rect(1px,1px,1px,1px);border:0;clip-path:inset(50%);height:1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.filepond--browser.filepond--browser{font-size:0;left:1em;margin:0;opacity:0;padding:0;position:absolute;top:1.75em;width:calc(100% - 2em)}.filepond--data{border:none;contain:strict;height:0;margin:0;padding:0;visibility:hidden;width:0}.filepond--data,.filepond--drip{pointer-events:none;position:absolute}.filepond--drip{background:rgba(0,0,0,.01);border-radius:.5em;inset:0;opacity:.1;overflow:hidden}.filepond--drip-blob{background:#292625;border-radius:50%;height:8em;margin-left:-4em;margin-top:-4em;transform-origin:center center;width:8em}.filepond--drip-blob,.filepond--drop-label{left:0;position:absolute;top:0;will-change:transform,opacity}.filepond--drop-label{align-items:center;color:#4f4f4f;display:flex;height:0;justify-content:center;margin:0;right:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.filepond--drop-label.filepond--drop-label label{display:block;margin:0;padding:.5em}.filepond--drop-label label{cursor:default;font-size:.875em;font-weight:400;line-height:1.5;text-align:center}.filepond--label-action{-webkit-text-decoration-skip:ink;cursor:pointer;text-decoration:underline;text-decoration-color:#a7a4a4;text-decoration-skip-ink:auto}.filepond--root[data-disabled] .filepond--drop-label label{opacity:.5}.filepond--file-action-button.filepond--file-action-button{border:none;font-family:inherit;font-size:1em;height:1.625em;line-height:inherit;margin:0;outline:none;padding:0;width:1.625em;will-change:transform,opacity}.filepond--file-action-button.filepond--file-action-button span{clip:rect(1px,1px,1px,1px);border:0;clip-path:inset(50%);height:1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.filepond--file-action-button.filepond--file-action-button svg{height:100%;width:100%}.filepond--file-action-button.filepond--file-action-button:after{content:"";inset:-.75em;position:absolute}.filepond--file-action-button{background-color:#00000080;background-image:none;border-radius:50%;box-shadow:0 0 #fff0;color:#fff;cursor:auto;transition:box-shadow .25s ease-in}.filepond--file-action-button:focus,.filepond--file-action-button:hover{box-shadow:0 0 0 .125em #ffffffe6}.filepond--file-action-button[disabled]{background-color:#00000040;color:#ffffff80}.filepond--file-action-button[hidden]{display:none}.filepond--file-info{align-items:flex-start;display:flex;flex:1;flex-direction:column;margin:0 .5em 0 0;min-width:0;pointer-events:none;position:static;-webkit-user-select:none;-moz-user-select:none;user-select:none;will-change:transform,opacity}.filepond--file-info *{margin:0}.filepond--file-info .filepond--file-info-main{font-size:.75em;line-height:1.2;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.filepond--file-info .filepond--file-info-sub{font-size:.625em;opacity:.5;transition:opacity .25s ease-in-out;white-space:nowrap}.filepond--file-info .filepond--file-info-sub:empty{display:none}.filepond--file-status{align-items:flex-end;display:flex;flex-direction:column;flex-grow:0;flex-shrink:0;margin:0;min-width:2.25em;pointer-events:none;position:static;text-align:right;-webkit-user-select:none;-moz-user-select:none;user-select:none;will-change:transform,opacity}.filepond--file-status *{margin:0;white-space:nowrap}.filepond--file-status .filepond--file-status-main{font-size:.75em;line-height:1.2}.filepond--file-status .filepond--file-status-sub{font-size:.625em;opacity:.5;transition:opacity .25s ease-in-out}.filepond--file-wrapper.filepond--file-wrapper{border:none;height:100%;margin:0;min-width:0;padding:0}.filepond--file-wrapper.filepond--file-wrapper>legend{clip:rect(1px,1px,1px,1px);border:0;clip-path:inset(50%);height:1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.filepond--file{align-items:flex-start;border-radius:.5em;color:#fff;display:flex;height:100%;padding:.5625em;position:static}.filepond--file .filepond--file-status{margin-left:auto;margin-right:2.25em}.filepond--file .filepond--processing-complete-indicator{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;z-index:3}.filepond--file .filepond--file-action-button,.filepond--file .filepond--processing-complete-indicator,.filepond--file .filepond--progress-indicator{position:absolute}.filepond--file [data-align*=left]{left:.5625em}.filepond--file [data-align*=right]{right:.5625em}.filepond--file [data-align*=center]{left:calc(50% - .8125em)}.filepond--file [data-align*=bottom]{bottom:1.125em}.filepond--file [data-align=center]{top:calc(50% - .8125em)}.filepond--file .filepond--progress-indicator{margin-top:.1875em}.filepond--file .filepond--progress-indicator[data-align*=right]{margin-right:.1875em}.filepond--file .filepond--progress-indicator[data-align*=left]{margin-left:.1875em}[data-filepond-item-state*=error] .filepond--file-info,[data-filepond-item-state*=invalid] .filepond--file-info,[data-filepond-item-state=cancelled] .filepond--file-info{margin-right:2.25em}[data-filepond-item-state~=processing] .filepond--file-status-sub{opacity:0}[data-filepond-item-state~=processing] .filepond--action-abort-item-processing~.filepond--file-status .filepond--file-status-sub{opacity:.5}[data-filepond-item-state=processing-error] .filepond--file-status-sub{opacity:0}[data-filepond-item-state=processing-error] .filepond--action-retry-item-processing~.filepond--file-status .filepond--file-status-sub{opacity:.5}[data-filepond-item-state=processing-complete] .filepond--action-revert-item-processing svg{animation:fall .5s linear .125s both}[data-filepond-item-state=processing-complete] .filepond--file-status-sub{opacity:.5}[data-filepond-item-state=processing-complete] .filepond--file-info-sub,[data-filepond-item-state=processing-complete] .filepond--processing-complete-indicator:not([style*=hidden])~.filepond--file-status .filepond--file-status-sub{opacity:0}[data-filepond-item-state=processing-complete] .filepond--action-revert-item-processing~.filepond--file-info .filepond--file-info-sub{opacity:.5}[data-filepond-item-state*=error] .filepond--file-wrapper,[data-filepond-item-state*=error] .filepond--panel,[data-filepond-item-state*=invalid] .filepond--file-wrapper,[data-filepond-item-state*=invalid] .filepond--panel{animation:shake .65s linear both}[data-filepond-item-state*=busy] .filepond--progress-indicator svg{animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@keyframes shake{10%,90%{transform:translate(-.0625em)}20%,80%{transform:translate(.125em)}30%,50%,70%{transform:translate(-.25em)}40%,60%{transform:translate(.25em)}}@keyframes fall{0%{animation-timing-function:ease-out;opacity:0;transform:scale(.5)}70%{animation-timing-function:ease-in-out;opacity:1;transform:scale(1.1)}to{animation-timing-function:ease-out;transform:scale(1)}}.filepond--hopper[data-hopper-state=drag-over]>*{pointer-events:none}.filepond--hopper[data-hopper-state=drag-over]:after{content:"";inset:0;position:absolute;z-index:100}.filepond--progress-indicator{z-index:103}.filepond--file-action-button{z-index:102}.filepond--file-status{z-index:101}.filepond--file-info{z-index:100}.filepond--item{left:0;margin:.25em;padding:0;position:absolute;right:0;top:0;touch-action:none;will-change:transform,opacity;z-index:1}.filepond--item>.filepond--panel{z-index:-1}.filepond--item>.filepond--panel .filepond--panel-bottom{box-shadow:0 .0625em .125em -.0625em #00000040}.filepond--item>.filepond--file-wrapper,.filepond--item>.filepond--panel{transition:opacity .15s ease-out}.filepond--item[data-drag-state]{cursor:grab}.filepond--item[data-drag-state]>.filepond--panel{box-shadow:0 0 0 transparent;transition:box-shadow .125s ease-in-out}.filepond--item[data-drag-state=drag]{cursor:grabbing}.filepond--item[data-drag-state=drag]>.filepond--panel{box-shadow:0 .125em .3125em #00000053}.filepond--item[data-drag-state]:not([data-drag-state=idle]){z-index:2}.filepond--item-panel{background-color:#64605e}[data-filepond-item-state=processing-complete] .filepond--item-panel{background-color:#369763}[data-filepond-item-state*=error] .filepond--item-panel,[data-filepond-item-state*=invalid] .filepond--item-panel{background-color:#c44e47}.filepond--item-panel{border-radius:.5em;transition:background-color .25s}.filepond--list-scroller{left:0;margin:0;position:absolute;right:0;top:0;will-change:transform}.filepond--list-scroller[data-state=overflow] .filepond--list{bottom:0;right:0}.filepond--list-scroller[data-state=overflow]{-webkit-overflow-scrolling:touch;-webkit-mask:linear-gradient(180deg,#000 calc(100% - .5em),transparent);mask:linear-gradient(180deg,#000 calc(100% - .5em),transparent);overflow-x:hidden;overflow-y:scroll}.filepond--list-scroller::-webkit-scrollbar{background:transparent}.filepond--list-scroller::-webkit-scrollbar:vertical{width:1em}.filepond--list-scroller::-webkit-scrollbar:horizontal{height:0}.filepond--list-scroller::-webkit-scrollbar-thumb{background-clip:content-box;background-color:#0000004d;border:.3125em solid transparent;border-radius:99999px}.filepond--list.filepond--list{list-style-type:none;margin:0;padding:0;position:absolute;top:0;will-change:transform}.filepond--list{left:.75em;right:.75em}.filepond--root[data-style-panel-layout~=integrated]{height:100%;margin:0;max-width:none;width:100%}.filepond--root[data-style-panel-layout~=circle] .filepond--panel-root,.filepond--root[data-style-panel-layout~=integrated] .filepond--panel-root{border-radius:0}.filepond--root[data-style-panel-layout~=circle] .filepond--panel-root>*,.filepond--root[data-style-panel-layout~=integrated] .filepond--panel-root>*{display:none}.filepond--root[data-style-panel-layout~=circle] .filepond--drop-label,.filepond--root[data-style-panel-layout~=integrated] .filepond--drop-label{align-items:center;bottom:0;display:flex;height:auto;justify-content:center;z-index:7}.filepond--root[data-style-panel-layout~=circle] .filepond--item-panel,.filepond--root[data-style-panel-layout~=integrated] .filepond--item-panel{display:none}.filepond--root[data-style-panel-layout~=compact] .filepond--list-scroller,.filepond--root[data-style-panel-layout~=integrated] .filepond--list-scroller{height:100%;margin-bottom:0;margin-top:0;overflow:hidden}.filepond--root[data-style-panel-layout~=compact] .filepond--list,.filepond--root[data-style-panel-layout~=integrated] .filepond--list{height:100%;left:0;right:0}.filepond--root[data-style-panel-layout~=compact] .filepond--item,.filepond--root[data-style-panel-layout~=integrated] .filepond--item{margin:0}.filepond--root[data-style-panel-layout~=compact] .filepond--file-wrapper,.filepond--root[data-style-panel-layout~=integrated] .filepond--file-wrapper{height:100%}.filepond--root[data-style-panel-layout~=compact] .filepond--drop-label,.filepond--root[data-style-panel-layout~=integrated] .filepond--drop-label{z-index:7}.filepond--root[data-style-panel-layout~=circle]{border-radius:99999rem;overflow:hidden}.filepond--root[data-style-panel-layout~=circle]>.filepond--panel{border-radius:inherit}.filepond--root[data-style-panel-layout~=circle] .filepond--file-info,.filepond--root[data-style-panel-layout~=circle] .filepond--file-status,.filepond--root[data-style-panel-layout~=circle]>.filepond--panel>*{display:none}@media not all and (-webkit-min-device-pixel-ratio:0),not all and (min-resolution:.001dpcm){@supports (-webkit-appearance:none) and (stroke-color:transparent){.filepond--root[data-style-panel-layout~=circle]{will-change:transform}}}.filepond--panel-root{background-color:#f1f0ef;border-radius:.5em}.filepond--panel{height:100%!important;left:0;margin:0;pointer-events:none;position:absolute;right:0;top:0}.filepond-panel:not([data-scalable=false]){height:auto!important}.filepond--panel[data-scalable=false]>div{display:none}.filepond--panel[data-scalable=true]{background-color:transparent!important;border:none!important;transform-style:preserve-3d}.filepond--panel-bottom,.filepond--panel-center,.filepond--panel-top{left:0;margin:0;padding:0;position:absolute;right:0;top:0}.filepond--panel-bottom,.filepond--panel-top{height:.5em}.filepond--panel-top{border-bottom:none!important;border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.filepond--panel-top:after{background-color:inherit;bottom:-1px;content:"";height:2px;left:0;position:absolute;right:0}.filepond--panel-bottom,.filepond--panel-center{backface-visibility:hidden;transform:translate3d(0,.5em,0);transform-origin:left top;will-change:transform}.filepond--panel-bottom{border-top:none!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.filepond--panel-bottom:before{background-color:inherit;content:"";height:2px;left:0;position:absolute;right:0;top:-1px}.filepond--panel-center{border-bottom:none!important;border-radius:0!important;border-top:none!important;height:100px!important}.filepond--panel-center:not([style]){visibility:hidden}.filepond--progress-indicator{color:#fff;height:1.25em;margin:0;pointer-events:none;position:static;width:1.25em;will-change:transform,opacity}.filepond--progress-indicator svg{height:100%;transform-box:fill-box;vertical-align:top;width:100%}.filepond--progress-indicator path{fill:none;stroke:currentColor}.filepond--list-scroller{z-index:6}.filepond--drop-label{z-index:5}.filepond--drip{z-index:3}.filepond--root>.filepond--panel{z-index:2}.filepond--browser{z-index:1}.filepond--root{box-sizing:border-box;contain:layout style size;direction:ltr;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:1rem;font-weight:450;line-height:normal;margin-bottom:1em;position:relative;text-align:left;text-rendering:optimizeLegibility}.filepond--root *{box-sizing:inherit;line-height:inherit}.filepond--root :not(text){font-size:inherit}.filepond--root[data-disabled]{pointer-events:none}.filepond--root[data-disabled] .filepond--list-scroller{pointer-events:all}.filepond--root[data-disabled] .filepond--list{pointer-events:none}.filepond--root .filepond--drop-label{min-height:4.75em}.filepond--root .filepond--list-scroller{margin-bottom:1em;margin-top:1em}.filepond--root .filepond--credits{bottom:-14px;color:inherit;font-size:11px;line-height:.85;opacity:.175;position:absolute;right:0;text-decoration:none;z-index:3}.filepond--root .filepond--credits[style]{bottom:auto;margin-top:14px;top:0}.filepond--action-edit-item.filepond--action-edit-item{height:2em;padding:.1875em;width:2em}.filepond--action-edit-item.filepond--action-edit-item[data-align*=center]{margin-left:-.1875em}.filepond--action-edit-item.filepond--action-edit-item[data-align*=bottom]{margin-bottom:-.1875em}.filepond--action-edit-item-alt{background:transparent;border:none;color:inherit;font-family:inherit;line-height:inherit;margin:0 0 0 .25em;outline:none;padding:0;pointer-events:all;position:absolute}.filepond--action-edit-item-alt svg{height:1.3125em;width:1.3125em}.filepond--action-edit-item-alt span{font-size:0;opacity:0}.filepond--root[data-style-panel-layout~=circle] .filepond--action-edit-item{opacity:1!important;visibility:visible!important}.filepond--image-preview-markup{left:0;position:absolute;top:0}.filepond--image-preview-wrapper{z-index:2}.filepond--image-preview-overlay{display:block;left:0;margin:0;max-height:7rem;min-height:5rem;opacity:0;pointer-events:none;position:absolute;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%;z-index:2}.filepond--image-preview-overlay svg{color:inherit;height:auto;max-height:inherit;width:100%}.filepond--image-preview-overlay-idle{color:#282828d9;mix-blend-mode:multiply}.filepond--image-preview-overlay-success{color:#369763;mix-blend-mode:normal}.filepond--image-preview-overlay-failure{color:#c44e47;mix-blend-mode:normal}@supports (-webkit-marquee-repetition:infinite) and ((-o-object-fit:fill) or (object-fit:fill)){.filepond--image-preview-overlay-idle{mix-blend-mode:normal}}.filepond--image-preview-wrapper{background:rgba(0,0,0,.01);border-radius:.45em;height:100%;left:0;margin:0;overflow:hidden;position:absolute;right:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.filepond--image-preview{align-items:center;background:#222;display:flex;height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%;will-change:transform,opacity;z-index:1}.filepond--image-clip{margin:0 auto;overflow:hidden;position:relative}.filepond--image-clip[data-transparency-indicator=grid] canvas,.filepond--image-clip[data-transparency-indicator=grid] img{background-color:#fff;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg' fill='%23eee'%3E%3Cpath d='M0 0h50v50H0M50 50h50v50H50'/%3E%3C/svg%3E");background-size:1.25em 1.25em}.filepond--image-bitmap,.filepond--image-vector{left:0;position:absolute;top:0;will-change:transform}.filepond--root[data-style-panel-layout~=integrated] .filepond--image-preview-wrapper{border-radius:0}.filepond--root[data-style-panel-layout~=integrated] .filepond--image-preview{align-items:center;display:flex;height:100%;justify-content:center}.filepond--root[data-style-panel-layout~=circle] .filepond--image-preview-wrapper{border-radius:99999rem}.filepond--root[data-style-panel-layout~=circle] .filepond--image-preview-overlay{bottom:0;top:auto;transform:scaleY(-1)}.filepond--root[data-style-panel-layout~=circle] .filepond--file .filepond--file-action-button[data-align*=bottom]:not([data-align*=center]){margin-bottom:.325em}.filepond--root[data-style-panel-layout~=circle] .filepond--file [data-align*=left]{left:calc(50% - 3em)}.filepond--root[data-style-panel-layout~=circle] .filepond--file [data-align*=right]{right:calc(50% - 3em)}.filepond--root[data-style-panel-layout~=circle] .filepond--progress-indicator[data-align*=bottom][data-align*=left],.filepond--root[data-style-panel-layout~=circle] .filepond--progress-indicator[data-align*=bottom][data-align*=right]{margin-bottom:.5125em}.filepond--root[data-style-panel-layout~=circle] .filepond--progress-indicator[data-align*=bottom][data-align*=center]{margin-bottom:.1875em;margin-left:.1875em;margin-top:0}.filepond--media-preview audio{display:none}.filepond--media-preview .audioplayer{margin:2.3em auto auto;width:calc(100% - 1.4em)}.filepond--media-preview .playpausebtn{background-position:50%;background-repeat:no-repeat;border:none;border-radius:25px;cursor:pointer;float:left;height:25px;margin-right:.3em;margin-top:.3em;outline:none;width:25px}.filepond--media-preview .playpausebtn:hover{background-color:#00000080}.filepond--media-preview .play{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAyElEQVQ4T9XUsWoCQRRG4XPaFL5SfIy8gKYKBCysrax8Ahs7qzQ2qVIFOwsrsbEWLEK6EBFGBrIQhN2d3dnGgalm+Jh7789Ix8uOPe4YDCH0gZ66atKW0pJDCE/AEngDXtRjCpwCRucbGANzNVTBqWBhfAJDdV+GNgWj8wtM41bPt3AbsDB2f69d/0dzwC0wUDe54A8wAWbqJbfkD+BZPeQO5QsYqYu6LKb0MIb7VT3VYfG8CnwEHtT3FKi4c8e/TZMyk3LYFrwCgMdHFbRDKS8AAAAASUVORK5CYII=)}.filepond--media-preview .pause{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAh0lEQVQ4T+2UsQkCURBE30PLMbAMMResQrAPsQ0TK9AqDKxGZeTLD74aGNwlhzfZssvADDMrPcOe+RggYZIJcG2s2KinMidZAvu6u6uzT8u+JCeZArfmcKUeK+EaONTdQy23bxgJX8aPHvIHsSnVuzTx36rn2pQFsGuqN//ZlK7vbIDvq6vkJ9yteBXzecYbAAAAAElFTkSuQmCC)}.filepond--media-preview .timeline{background:hsla(0,0%,100%,.3);border-radius:15px;float:left;height:3px;margin-top:1em;width:calc(100% - 2.5em)}.filepond--media-preview .playhead{background:#fff;border-radius:50%;height:13px;margin-top:-5px;width:13px}.filepond--media-preview-wrapper{background:rgba(0,0,0,.01);border-radius:.45em;height:100%;left:0;margin:0;overflow:hidden;pointer-events:auto;position:absolute;right:0;top:0}.filepond--media-preview-wrapper:before{background:linear-gradient(180deg,#000 0,transparent);content:" ";filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#000000",endColorstr="#00000000",GradientType=0);height:2em;position:absolute;width:100%;z-index:3}.filepond--media-preview{display:block;height:100%;position:relative;transform-origin:center center;width:100%;will-change:transform,opacity;z-index:1}.filepond--media-preview audio,.filepond--media-preview video{width:100%;will-change:transform}.filepond--root{--tw-bg-opacity:1;--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgba(var(--gray-950),0.1);background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.5rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);margin-bottom:0}.filepond--root:is(.dark *){--tw-ring-color:hsla(0,0%,100%,.2);background-color:hsla(0,0%,100%,.05)}.filepond--root[data-disabled=disabled]{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.filepond--root[data-disabled=disabled]:is(.dark *){--tw-ring-color:hsla(0,0%,100%,.1);background-color:transparent}.filepond--panel-root{background-color:transparent}.filepond--drop-label label{--tw-text-opacity:1;color:rgba(var(--gray-600),var(--tw-text-opacity));font-size:.875rem;line-height:1.25rem;padding:.75rem!important}.filepond--drop-label label:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.filepond--label-action{--tw-text-opacity:1;color:rgba(var(--primary-600),var(--tw-text-opacity));font-weight:500;text-decoration-line:none;transition-duration:75ms;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.filepond--label-action:hover{--tw-text-opacity:1;color:rgba(var(--primary-500),var(--tw-text-opacity))}.filepond--label-action:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.filepond--label-action:hover:is(.dark *){--tw-text-opacity:1;color:rgba(var(--primary-500),var(--tw-text-opacity))}.filepond--drip-blob{--tw-bg-opacity:1;background-color:rgba(var(--gray-400),var(--tw-bg-opacity))}.filepond--drip-blob:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-500),var(--tw-bg-opacity))}.filepond--root[data-style-panel-layout=grid] .filepond--item{display:inline;width:calc(50% - .5rem)}@media (min-width:1024px){.filepond--root[data-style-panel-layout=grid] .filepond--item{width:calc(33.33% - .5rem)}}.filepond--download-icon{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));display:inline-block;height:1rem;margin-inline-end:.25rem;pointer-events:auto;vertical-align:bottom;width:1rem}.filepond--download-icon:hover{background-color:hsla(0,0%,100%,.7)}.filepond--download-icon{-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBjbGFzcz0iZmVhdGhlciBmZWF0aGVyLWRvd25sb2FkIj48cGF0aCBkPSJNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNE03IDEwbDUgNSA1LTVNMTIgMTVWMyIvPjwvc3ZnPg==);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBjbGFzcz0iZmVhdGhlciBmZWF0aGVyLWRvd25sb2FkIj48cGF0aCBkPSJNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNE03IDEwbDUgNSA1LTVNMTIgMTVWMyIvPjwvc3ZnPg==);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100%;mask-size:100%}.filepond--open-icon{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));display:inline-block;height:1rem;margin-inline-end:.25rem;pointer-events:auto;vertical-align:bottom;width:1rem}.filepond--open-icon:hover{background-color:hsla(0,0%,100%,.7)}.filepond--open-icon{-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTYgdy02IiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPjxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgZD0iTTEwIDZINmEyIDIgMCAwIDAtMiAydjEwYTIgMiAwIDAgMCAyIDJoMTBhMiAyIDAgMCAwIDItMnYtNE0xNCA0aDZtMCAwdjZtMC02TDEwIDE0Ii8+PC9zdmc+);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTYgdy02IiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPjxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgZD0iTTEwIDZINmEyIDIgMCAwIDAtMiAydjEwYTIgMiAwIDAgMCAyIDJoMTBhMiAyIDAgMCAwIDItMnYtNE0xNCA0aDZtMCAwdjZtMC02TDEwIDE0Ii8+PC9zdmc+);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100%;mask-size:100%}.filepond--file-action-button.filepond--action-edit-item{background-color:rgba(0,0,0,.5)}.cropper-drag-box.cropper-crop.cropper-modal{background-color:rgba(var(--gray-100),.5);opacity:1}.cropper-drag-box.cropper-crop.cropper-modal:is(.dark *){background-color:rgba(var(--gray-900),.8)}.fi-fo-file-upload-circle-cropper .cropper-face,.fi-fo-file-upload-circle-cropper .cropper-view-box{border-radius:50%}.CodeMirror{color:#000;direction:ltr;font-family:monospace;height:300px}.CodeMirror-lines{padding:4px 0}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{background-color:#f7f7f7;border-right:1px solid #ddd;white-space:nowrap}.CodeMirror-linenumber{color:#999;min-width:20px;padding:0 3px 0 5px;text-align:right;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{background:#7e7;border:0!important;width:auto}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor .CodeMirror-line::selection,.cm-fat-cursor .CodeMirror-line>span::selection,.cm-fat-cursor .CodeMirror-line>span>span::selection{background:0 0}.cm-fat-cursor .CodeMirror-line::-moz-selection,.cm-fat-cursor .CodeMirror-line>span::-moz-selection,.cm-fat-cursor .CodeMirror-line>span>span::-moz-selection{background:0 0}.cm-fat-cursor{caret-color:transparent}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{inset:-50px 0 0;overflow:hidden;position:absolute}.CodeMirror-ruler{border-left:1px solid #ccc;bottom:0;position:absolute;top:0}.cm-s-default .cm-header{color:#00f}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-type,.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-invalidchar,.cm-s-default .cm-error{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{background:#fff;overflow:hidden;position:relative}.CodeMirror-scroll{height:100%;margin-bottom:-50px;margin-right:-50px;outline:0;overflow:scroll!important;padding-bottom:50px;position:relative;z-index:0}.CodeMirror-sizer{border-right:50px solid transparent;position:relative}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{display:none;outline:0;position:absolute;z-index:6}.CodeMirror-vscrollbar{overflow-x:hidden;overflow-y:scroll;right:0;top:0}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-x:scroll;overflow-y:hidden}.CodeMirror-scrollbar-filler{bottom:0;right:0}.CodeMirror-gutter-filler{bottom:0;left:0}.CodeMirror-gutters{left:0;min-height:100%;position:absolute;top:0;z-index:3}.CodeMirror-gutter{display:inline-block;height:100%;margin-bottom:-50px;vertical-align:top;white-space:normal}.CodeMirror-gutter-wrapper{background:0 0!important;border:none!important;position:absolute;z-index:4}.CodeMirror-gutter-background{bottom:0;position:absolute;top:0;z-index:4}.CodeMirror-gutter-elt{cursor:default;position:absolute;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{word-wrap:normal;-webkit-tap-highlight-color:transparent;background:0 0;border-radius:0;border-width:0;color:inherit;font-family:inherit;font-size:inherit;font-variant-ligatures:contextual;line-height:inherit;margin:0;overflow:visible;position:relative;white-space:pre;z-index:2}.CodeMirror-wrap pre.CodeMirror-line,.CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{inset:0;position:absolute;z-index:0}.CodeMirror-linewidget{padding:.1px;position:relative;z-index:2}.CodeMirror-code{outline:0}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{box-sizing:content-box}.CodeMirror-measure{height:0;overflow:hidden;position:absolute;visibility:hidden;width:100%}.CodeMirror-cursor{pointer-events:none;position:absolute}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{position:relative;visibility:hidden;z-index:3}.CodeMirror-focused div.CodeMirror-cursors,div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:#ff06}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:""}span.CodeMirror-selectedtext{background:0 0}.EasyMDEContainer{display:block}.CodeMirror-rtl pre{direction:rtl}.EasyMDEContainer.sided--no-fullscreen{display:flex;flex-direction:row;flex-wrap:wrap}.EasyMDEContainer .CodeMirror{word-wrap:break-word;border:1px solid #ced4da;border-bottom-left-radius:4px;border-bottom-right-radius:4px;box-sizing:border-box;font:inherit;height:auto;padding:10px;z-index:0}.EasyMDEContainer .CodeMirror-scroll{cursor:text}.EasyMDEContainer .CodeMirror-fullscreen{background:#fff;border-bottom-right-radius:0!important;border-right:none!important;height:auto;inset:50px 0 0;position:fixed!important;z-index:8}.EasyMDEContainer .CodeMirror-sided{width:50%!important}.EasyMDEContainer.sided--no-fullscreen .CodeMirror-sided{border-bottom-right-radius:0;border-right:none!important;flex:1 1 auto;position:relative}.EasyMDEContainer .CodeMirror-placeholder{opacity:.5}.EasyMDEContainer .CodeMirror-focused .CodeMirror-selected{background:#d9d9d9}.editor-toolbar{border-left:1px solid #ced4da;border-right:1px solid #ced4da;border-top:1px solid #ced4da;border-top-left-radius:4px;border-top-right-radius:4px;padding:9px 10px;position:relative;-webkit-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none}.editor-toolbar.fullscreen{background:#fff;border:0;box-sizing:border-box;height:50px;left:0;opacity:1;padding-bottom:10px;padding-top:10px;position:fixed;top:0;width:100%;z-index:9}.editor-toolbar.fullscreen:before{background:linear-gradient(90deg,#fff 0,hsla(0,0%,100%,0));height:50px;left:0;margin:0;padding:0;position:fixed;top:0;width:20px}.editor-toolbar.fullscreen:after{background:linear-gradient(90deg,hsla(0,0%,100%,0) 0,#fff);height:50px;margin:0;padding:0;position:fixed;right:0;top:0;width:20px}.EasyMDEContainer.sided--no-fullscreen .editor-toolbar{width:100%}.editor-toolbar .easymde-dropdown,.editor-toolbar button{background:0 0;border:1px solid transparent;border-radius:3px;cursor:pointer;display:inline-block;height:30px;margin:0;padding:0;text-align:center;text-decoration:none!important}.editor-toolbar button{font-weight:700;min-width:30px;padding:0 6px;white-space:nowrap}.editor-toolbar button.active,.editor-toolbar button:hover{background:#fcfcfc;border-color:#95a5a6}.editor-toolbar i.separator{border-left:1px solid #d9d9d9;border-right:1px solid #fff;color:transparent;display:inline-block;margin:0 6px;text-indent:-10px;width:0}.editor-toolbar button:after{font-family:Arial,Helvetica Neue,Helvetica,sans-serif;font-size:65%;position:relative;top:2px;vertical-align:text-bottom}.editor-toolbar button.heading-1:after{content:"1"}.editor-toolbar button.heading-2:after{content:"2"}.editor-toolbar button.heading-3:after{content:"3"}.editor-toolbar button.heading-bigger:after{content:"\25b2"}.editor-toolbar button.heading-smaller:after{content:"\25bc"}.editor-toolbar.disabled-for-preview button:not(.no-disable){opacity:.6;pointer-events:none}@media only screen and (max-width:700px){.editor-toolbar i.no-mobile{display:none}}.editor-statusbar{color:#959694;font-size:12px;padding:8px 10px;text-align:right}.EasyMDEContainer.sided--no-fullscreen .editor-statusbar{width:100%}.editor-statusbar span{display:inline-block;margin-left:1em;min-width:4em}.editor-statusbar .lines:before{content:"lines: "}.editor-statusbar .words:before{content:"words: "}.editor-statusbar .characters:before{content:"characters: "}.editor-preview-full{height:100%;left:0;position:absolute;top:0;width:100%;z-index:7}.editor-preview-full,.editor-preview-side{box-sizing:border-box;display:none;overflow:auto}.editor-preview-side{word-wrap:break-word;border:1px solid #ddd;bottom:0;position:fixed;right:0;top:50px;width:50%;z-index:9}.editor-preview-active-side{display:block}.EasyMDEContainer.sided--no-fullscreen .editor-preview-active-side{flex:1 1 auto;height:auto;position:static}.editor-preview-active{display:block}.editor-preview{background:#fafafa;padding:10px}.editor-preview>p{margin-top:0}.editor-preview pre{background:#eee;margin-bottom:10px}.editor-preview table td,.editor-preview table th{border:1px solid #ddd;padding:5px}.cm-s-easymde .cm-tag{color:#63a35c}.cm-s-easymde .cm-attribute{color:#795da3}.cm-s-easymde .cm-string{color:#183691}.cm-s-easymde .cm-header-1{font-size:calc(1.375rem + 1.5vw)}.cm-s-easymde .cm-header-2{font-size:calc(1.325rem + .9vw)}.cm-s-easymde .cm-header-3{font-size:calc(1.3rem + .6vw)}.cm-s-easymde .cm-header-4{font-size:calc(1.275rem + .3vw)}.cm-s-easymde .cm-header-5{font-size:1.25rem}.cm-s-easymde .cm-header-6{font-size:1rem}.cm-s-easymde .cm-header-1,.cm-s-easymde .cm-header-2,.cm-s-easymde .cm-header-3,.cm-s-easymde .cm-header-4,.cm-s-easymde .cm-header-5,.cm-s-easymde .cm-header-6{line-height:1.2;margin-bottom:.5rem}.cm-s-easymde .cm-comment{background:rgba(0,0,0,.05);border-radius:2px}.cm-s-easymde .cm-link{color:#7f8c8d}.cm-s-easymde .cm-url{color:#aab2b3}.cm-s-easymde .cm-quote{color:#7f8c8d;font-style:italic}.editor-toolbar .easymde-dropdown{border:1px solid #fff;border-radius:0;position:relative}.editor-toolbar .easymde-dropdown,.editor-toolbar .easymde-dropdown:hover{background:linear-gradient(to bottom right,#fff,#fff 84%,#333 0,#333)}.easymde-dropdown-content{background-color:#f9f9f9;box-shadow:0 8px 16px #0003;display:block;padding:8px;position:absolute;top:30px;visibility:hidden;z-index:2}.easymde-dropdown:active .easymde-dropdown-content,.easymde-dropdown:focus .easymde-dropdown-content,.easymde-dropdown:focus-within .easymde-dropdown-content{visibility:visible}.easymde-dropdown-content button{display:block}span[data-img-src]:after{background-image:var(--bg-image);background-repeat:no-repeat;background-size:contain;content:"";display:block;height:0;max-height:100%;max-width:100%;padding-top:var(--height);width:var(--width)}.CodeMirror .cm-spell-error:not(.cm-url):not(.cm-comment):not(.cm-tag):not(.cm-word){background:rgba(255,0,0,.15)}:root{--color-cm-red:#991b1b;--color-cm-orange:#9a3412;--color-cm-amber:#92400e;--color-cm-yellow:#854d0e;--color-cm-lime:#3f6212;--color-cm-green:#166534;--color-cm-emerald:#065f46;--color-cm-teal:#115e59;--color-cm-cyan:#155e75;--color-cm-sky:#075985;--color-cm-blue:#1e40af;--color-cm-indigo:#3730a3;--color-cm-violet:#5b21b6;--color-cm-purple:#6b21a8;--color-cm-fuchsia:#86198f;--color-cm-pink:#9d174d;--color-cm-rose:#9f1239;--color-cm-gray:#18181b;--color-cm-gray-muted:#71717a;--color-cm-gray-background:#e4e4e7}.dark{--color-cm-red:#f87171;--color-cm-orange:#fb923c;--color-cm-amber:#fbbf24;--color-cm-yellow:#facc15;--color-cm-lime:#a3e635;--color-cm-green:#4ade80;--color-cm-emerald:#4ade80;--color-cm-teal:#2dd4bf;--color-cm-cyan:#22d3ee;--color-cm-sky:#38bdf8;--color-cm-blue:#60a5fa;--color-cm-indigo:#818cf8;--color-cm-violet:#a78bfa;--color-cm-purple:#c084fc;--color-cm-fuchsia:#e879f9;--color-cm-pink:#f472b6;--color-cm-rose:#fb7185;--color-cm-gray:#fafafa;--color-cm-gray-muted:#a1a1aa;--color-cm-gray-background:#52525b}.cm-s-easymde .cm-comment{background-color:transparent;color:var(--color-cm-gray-muted)}.EasyMDEContainer .CodeMirror-cursor{border-color:currentColor}.dark .EasyMDEContainer .cm-s-easymde span.CodeMirror-selectedtext{filter:invert(100%)}.EasyMDEContainer .cm-s-easymde .cm-keyword{color:var(--color-cm-violet)}.EasyMDEContainer .cm-s-easymde .cm-atom{color:var(--color-cm-blue)}.EasyMDEContainer .cm-s-easymde .cm-number{color:var(--color-cm-green)}.EasyMDEContainer .cm-s-easymde .cm-def{color:var(--color-cm-blue)}.EasyMDEContainer .cm-s-easymde .cm-variable{color:var(--color-cm-yellow)}.EasyMDEContainer .cm-s-easymde .cm-variable-2{color:var(--color-cm-blue)}.EasyMDEContainer .cm-s-easymde .cm-variable-3{color:var(--color-cm-emerald)}.EasyMDEContainer .cm-s-easymde .cm-operator,.EasyMDEContainer .cm-s-easymde .cm-property{color:var(--color-cm-gray)}.EasyMDEContainer .cm-s-easymde .cm-string,.EasyMDEContainer .cm-s-easymde .cm-string-2{color:var(--color-cm-rose)}.EasyMDEContainer .cm-s-easymde .cm-meta{color:var(--color-cm-gray-muted)}.EasyMDEContainer .cm-s-easymde .cm-error{color:var(--color-cm-red)}.EasyMDEContainer .cm-s-easymde .cm-qualifier{color:var(--color-cm-gray-muted)}.EasyMDEContainer .cm-s-easymde .cm-builtin{color:var(--color-cm-violet)}.EasyMDEContainer .cm-s-easymde .cm-bracket{color:var(--color-cm-gray-muted)}.EasyMDEContainer .cm-s-easymde .cm-tag{color:var(--color-cm-green)}.EasyMDEContainer .cm-s-easymde .cm-attribute{color:var(--color-cm-blue)}.EasyMDEContainer .cm-s-easymde .cm-hr{color:var(--color-cm-gray-muted)}.EasyMDEContainer .cm-s-easymde .cm-formatting-quote{color:var(--color-cm-sky)}.EasyMDEContainer .cm-s-easymde .cm-formatting-quote+.cm-quote{color:var(--color-cm-gray-muted)}.EasyMDEContainer .cm-s-easymde .cm-formatting-list,.EasyMDEContainer .cm-s-easymde .cm-formatting-list+.cm-variable-2,.EasyMDEContainer .cm-s-easymde .cm-tab+.cm-variable-2{color:var(--color-cm-gray)}.EasyMDEContainer .cm-s-easymde .cm-link{color:var(--color-cm-blue)}.EasyMDEContainer .cm-s-easymde .cm-tag{color:var(--color-cm-red)}.EasyMDEContainer .cm-s-easymde .cm-attribute{color:var(--color-cm-amber)}.EasyMDEContainer .cm-s-easymde .cm-attribute+.cm-string{color:var(--color-cm-green)}.EasyMDEContainer .cm-s-easymde .cm-formatting-code+.cm-comment:not(.cm-formatting-code){background-color:var(--color-cm-gray-background);color:var(--color-cm-gray)}.EasyMDEContainer .cm-s-easymde .cm-header-1{font-size:1.875rem;line-height:2.25rem}.EasyMDEContainer .cm-s-easymde .cm-header-2{font-size:1.5rem;line-height:2rem}.EasyMDEContainer .cm-s-easymde .cm-header-3{font-size:1.25rem;line-height:1.75rem}.EasyMDEContainer .cm-s-easymde .cm-header-4{font-size:1.125rem;line-height:1.75rem}.EasyMDEContainer .cm-s-easymde .cm-header-5{font-size:1rem;line-height:1.5rem}.EasyMDEContainer .cm-s-easymde .cm-header-6{font-size:.875rem;line-height:1.25rem}.EasyMDEContainer .cm-s-easymde .cm-comment{background-image:none}.EasyMDEContainer .CodeMirror,.EasyMDEContainer .cm-s-easymde .cm-formatting-code-block,.EasyMDEContainer .cm-s-easymde .cm-tab+.cm-comment{background-color:transparent;color:inherit}.EasyMDEContainer .CodeMirror{border-style:none;padding:.375rem .75rem}.EasyMDEContainer .CodeMirror-scroll{height:auto}.EasyMDEContainer .editor-toolbar{--tw-border-opacity:1;border-color:rgba(var(--gray-200),var(--tw-border-opacity));border-radius:0;border-width:0 0 1px;-moz-column-gap:.25rem;column-gap:.25rem;display:flex;overflow-x:auto;padding:.5rem .625rem}.EasyMDEContainer .editor-toolbar:is(.dark *){border-color:hsla(0,0%,100%,.1)}.EasyMDEContainer .editor-toolbar button{border-radius:.5rem;border-style:none;cursor:pointer;display:grid;height:2rem;padding:0;place-content:center;transition-duration:75ms;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);width:2rem}.EasyMDEContainer .editor-toolbar button:hover{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.EasyMDEContainer .editor-toolbar button:focus-visible{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.EasyMDEContainer .editor-toolbar button:hover:is(.dark *){background-color:hsla(0,0%,100%,.05)}.EasyMDEContainer .editor-toolbar button:focus-visible:is(.dark *){background-color:hsla(0,0%,100%,.05)}.EasyMDEContainer .editor-toolbar button.active{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.EasyMDEContainer .editor-toolbar button.active:is(.dark *){background-color:hsla(0,0%,100%,.05)}.EasyMDEContainer .editor-toolbar button:before{--tw-bg-opacity:1;background-color:rgba(var(--gray-700),var(--tw-bg-opacity));display:block;height:1.25rem;width:1.25rem}.EasyMDEContainer .editor-toolbar button:is(.dark *):before{--tw-bg-opacity:1;background-color:rgba(var(--gray-300),var(--tw-bg-opacity))}.EasyMDEContainer .editor-toolbar button:before{content:"";-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.EasyMDEContainer .editor-toolbar button.active:before{--tw-bg-opacity:1;background-color:rgba(var(--primary-600),var(--tw-bg-opacity))}.EasyMDEContainer .editor-toolbar button.active:is(.dark *):before{--tw-bg-opacity:1;background-color:rgba(var(--primary-400),var(--tw-bg-opacity))}.EasyMDEContainer .editor-toolbar .separator{border-style:none;margin:0!important;width:.25rem}.EasyMDEContainer .editor-toolbar .bold:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M4 3a1 1 0 0 1 1-1h6a4.5 4.5 0 0 1 3.274 7.587A4.75 4.75 0 0 1 11.25 18H5a1 1 0 0 1-1-1V3Zm2.5 5.5v-4H11a2 2 0 1 1 0 4H6.5Zm0 2.5v4.5h4.75a2.25 2.25 0 0 0 0-4.5H6.5Z' clip-rule='evenodd'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M4 3a1 1 0 0 1 1-1h6a4.5 4.5 0 0 1 3.274 7.587A4.75 4.75 0 0 1 11.25 18H5a1 1 0 0 1-1-1V3Zm2.5 5.5v-4H11a2 2 0 1 1 0 4H6.5Zm0 2.5v4.5h4.75a2.25 2.25 0 0 0 0-4.5H6.5Z' clip-rule='evenodd'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .italic:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M8 2.75A.75.75 0 0 1 8.75 2h7.5a.75.75 0 0 1 0 1.5h-3.215l-4.483 13h2.698a.75.75 0 0 1 0 1.5h-7.5a.75.75 0 0 1 0-1.5h3.215l4.483-13H8.75A.75.75 0 0 1 8 2.75Z' clip-rule='evenodd'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M8 2.75A.75.75 0 0 1 8.75 2h7.5a.75.75 0 0 1 0 1.5h-3.215l-4.483 13h2.698a.75.75 0 0 1 0 1.5h-7.5a.75.75 0 0 1 0-1.5h3.215l4.483-13H8.75A.75.75 0 0 1 8 2.75Z' clip-rule='evenodd'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .strikethrough:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M11.617 3.963c-1.186-.318-2.418-.323-3.416.015-.992.336-1.49.91-1.642 1.476-.152.566-.007 1.313.684 2.1.528.6 1.273 1.1 2.128 1.446h7.879a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1 0-1.5h3.813a5.976 5.976 0 0 1-.447-.456C5.18 7.479 4.798 6.231 5.11 5.066c.312-1.164 1.268-2.055 2.61-2.509 1.336-.451 2.877-.42 4.286-.043.856.23 1.684.592 2.409 1.074a.75.75 0 1 1-.83 1.25 6.723 6.723 0 0 0-1.968-.875Zm1.909 8.123a.75.75 0 0 1 1.015.309c.53.99.607 2.062.18 3.01-.421.94-1.289 1.648-2.441 2.038-1.336.452-2.877.42-4.286.043-1.409-.377-2.759-1.121-3.69-2.18a.75.75 0 1 1 1.127-.99c.696.791 1.765 1.403 2.952 1.721 1.186.318 2.418.323 3.416-.015.853-.288 1.34-.756 1.555-1.232.21-.467.205-1.049-.136-1.69a.75.75 0 0 1 .308-1.014Z' clip-rule='evenodd'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M11.617 3.963c-1.186-.318-2.418-.323-3.416.015-.992.336-1.49.91-1.642 1.476-.152.566-.007 1.313.684 2.1.528.6 1.273 1.1 2.128 1.446h7.879a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1 0-1.5h3.813a5.976 5.976 0 0 1-.447-.456C5.18 7.479 4.798 6.231 5.11 5.066c.312-1.164 1.268-2.055 2.61-2.509 1.336-.451 2.877-.42 4.286-.043.856.23 1.684.592 2.409 1.074a.75.75 0 1 1-.83 1.25 6.723 6.723 0 0 0-1.968-.875Zm1.909 8.123a.75.75 0 0 1 1.015.309c.53.99.607 2.062.18 3.01-.421.94-1.289 1.648-2.441 2.038-1.336.452-2.877.42-4.286.043-1.409-.377-2.759-1.121-3.69-2.18a.75.75 0 1 1 1.127-.99c.696.791 1.765 1.403 2.952 1.721 1.186.318 2.418.323 3.416-.015.853-.288 1.34-.756 1.555-1.232.21-.467.205-1.049-.136-1.69a.75.75 0 0 1 .308-1.014Z' clip-rule='evenodd'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .link:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath d='M12.232 4.232a2.5 2.5 0 0 1 3.536 3.536l-1.225 1.224a.75.75 0 0 0 1.061 1.06l1.224-1.224a4 4 0 0 0-5.656-5.656l-3 3a4 4 0 0 0 .225 5.865.75.75 0 0 0 .977-1.138 2.5 2.5 0 0 1-.142-3.667l3-3Z'/%3E%3Cpath d='M11.603 7.963a.75.75 0 0 0-.977 1.138 2.5 2.5 0 0 1 .142 3.667l-3 3a2.5 2.5 0 0 1-3.536-3.536l1.225-1.224a.75.75 0 0 0-1.061-1.06l-1.224 1.224a4 4 0 1 0 5.656 5.656l3-3a4 4 0 0 0-.225-5.865Z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath d='M12.232 4.232a2.5 2.5 0 0 1 3.536 3.536l-1.225 1.224a.75.75 0 0 0 1.061 1.06l1.224-1.224a4 4 0 0 0-5.656-5.656l-3 3a4 4 0 0 0 .225 5.865.75.75 0 0 0 .977-1.138 2.5 2.5 0 0 1-.142-3.667l3-3Z'/%3E%3Cpath d='M11.603 7.963a.75.75 0 0 0-.977 1.138 2.5 2.5 0 0 1 .142 3.667l-3 3a2.5 2.5 0 0 1-3.536-3.536l1.225-1.224a.75.75 0 0 0-1.061-1.06l-1.224 1.224a4 4 0 1 0 5.656 5.656l3-3a4 4 0 0 0-.225-5.865Z'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .heading:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M2.75 4a.75.75 0 0 1 .75.75v4.5h5v-4.5a.75.75 0 0 1 1.5 0v10.5a.75.75 0 0 1-1.5 0v-4.5h-5v4.5a.75.75 0 0 1-1.5 0V4.75A.75.75 0 0 1 2.75 4ZM13 8.75a.75.75 0 0 1 .75-.75h1.75a.75.75 0 0 1 .75.75v5.75h1a.75.75 0 0 1 0 1.5h-3.5a.75.75 0 0 1 0-1.5h1v-5h-1a.75.75 0 0 1-.75-.75Z' clip-rule='evenodd'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M2.75 4a.75.75 0 0 1 .75.75v4.5h5v-4.5a.75.75 0 0 1 1.5 0v10.5a.75.75 0 0 1-1.5 0v-4.5h-5v4.5a.75.75 0 0 1-1.5 0V4.75A.75.75 0 0 1 2.75 4ZM13 8.75a.75.75 0 0 1 .75-.75h1.75a.75.75 0 0 1 .75.75v5.75h1a.75.75 0 0 1 0 1.5h-3.5a.75.75 0 0 1 0-1.5h1v-5h-1a.75.75 0 0 1-.75-.75Z' clip-rule='evenodd'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .quote:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M10 2c-2.236 0-4.43.18-6.57.524C1.993 2.755 1 4.014 1 5.426v5.148c0 1.413.993 2.67 2.43 2.902 1.168.188 2.352.327 3.55.414.28.02.521.18.642.413l1.713 3.293a.75.75 0 0 0 1.33 0l1.713-3.293a.783.783 0 0 1 .642-.413 41.102 41.102 0 0 0 3.55-.414c1.437-.231 2.43-1.49 2.43-2.902V5.426c0-1.413-.993-2.67-2.43-2.902A41.289 41.289 0 0 0 10 2ZM6.75 6a.75.75 0 0 0 0 1.5h6.5a.75.75 0 0 0 0-1.5h-6.5Zm0 2.5a.75.75 0 0 0 0 1.5h3.5a.75.75 0 0 0 0-1.5h-3.5Z' clip-rule='evenodd'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M10 2c-2.236 0-4.43.18-6.57.524C1.993 2.755 1 4.014 1 5.426v5.148c0 1.413.993 2.67 2.43 2.902 1.168.188 2.352.327 3.55.414.28.02.521.18.642.413l1.713 3.293a.75.75 0 0 0 1.33 0l1.713-3.293a.783.783 0 0 1 .642-.413 41.102 41.102 0 0 0 3.55-.414c1.437-.231 2.43-1.49 2.43-2.902V5.426c0-1.413-.993-2.67-2.43-2.902A41.289 41.289 0 0 0 10 2ZM6.75 6a.75.75 0 0 0 0 1.5h6.5a.75.75 0 0 0 0-1.5h-6.5Zm0 2.5a.75.75 0 0 0 0 1.5h3.5a.75.75 0 0 0 0-1.5h-3.5Z' clip-rule='evenodd'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .code:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M6.28 5.22a.75.75 0 0 1 0 1.06L2.56 10l3.72 3.72a.75.75 0 0 1-1.06 1.06L.97 10.53a.75.75 0 0 1 0-1.06l4.25-4.25a.75.75 0 0 1 1.06 0Zm7.44 0a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06-1.06L17.44 10l-3.72-3.72a.75.75 0 0 1 0-1.06Zm-2.343-3.209a.75.75 0 0 1 .612.867l-2.5 14.5a.75.75 0 0 1-1.478-.255l2.5-14.5a.75.75 0 0 1 .866-.612Z' clip-rule='evenodd'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M6.28 5.22a.75.75 0 0 1 0 1.06L2.56 10l3.72 3.72a.75.75 0 0 1-1.06 1.06L.97 10.53a.75.75 0 0 1 0-1.06l4.25-4.25a.75.75 0 0 1 1.06 0Zm7.44 0a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06-1.06L17.44 10l-3.72-3.72a.75.75 0 0 1 0-1.06Zm-2.343-3.209a.75.75 0 0 1 .612.867l-2.5 14.5a.75.75 0 0 1-1.478-.255l2.5-14.5a.75.75 0 0 1 .866-.612Z' clip-rule='evenodd'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .unordered-list:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M6 4.75A.75.75 0 0 1 6.75 4h10.5a.75.75 0 0 1 0 1.5H6.75A.75.75 0 0 1 6 4.75ZM6 10a.75.75 0 0 1 .75-.75h10.5a.75.75 0 0 1 0 1.5H6.75A.75.75 0 0 1 6 10Zm0 5.25a.75.75 0 0 1 .75-.75h10.5a.75.75 0 0 1 0 1.5H6.75a.75.75 0 0 1-.75-.75ZM1.99 4.75a1 1 0 0 1 1-1H3a1 1 0 0 1 1 1v.01a1 1 0 0 1-1 1h-.01a1 1 0 0 1-1-1v-.01Zm0 10.5a1 1 0 0 1 1-1H3a1 1 0 0 1 1 1v.01a1 1 0 0 1-1 1h-.01a1 1 0 0 1-1-1v-.01Zm0-5.25a1 1 0 0 1 1-1H3a1 1 0 0 1 1 1v.01a1 1 0 0 1-1 1h-.01a1 1 0 0 1-1-1V10Z' clip-rule='evenodd'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M6 4.75A.75.75 0 0 1 6.75 4h10.5a.75.75 0 0 1 0 1.5H6.75A.75.75 0 0 1 6 4.75ZM6 10a.75.75 0 0 1 .75-.75h10.5a.75.75 0 0 1 0 1.5H6.75A.75.75 0 0 1 6 10Zm0 5.25a.75.75 0 0 1 .75-.75h10.5a.75.75 0 0 1 0 1.5H6.75a.75.75 0 0 1-.75-.75ZM1.99 4.75a1 1 0 0 1 1-1H3a1 1 0 0 1 1 1v.01a1 1 0 0 1-1 1h-.01a1 1 0 0 1-1-1v-.01Zm0 10.5a1 1 0 0 1 1-1H3a1 1 0 0 1 1 1v.01a1 1 0 0 1-1 1h-.01a1 1 0 0 1-1-1v-.01Zm0-5.25a1 1 0 0 1 1-1H3a1 1 0 0 1 1 1v.01a1 1 0 0 1-1 1h-.01a1 1 0 0 1-1-1V10Z' clip-rule='evenodd'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .ordered-list:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath d='M3 1.25a.75.75 0 0 0 0 1.5h.25v2.5a.75.75 0 0 0 1.5 0V2A.75.75 0 0 0 4 1.25H3Zm-.03 7.404a3.5 3.5 0 0 1 1.524-.12.034.034 0 0 1-.012.012L2.415 9.579A.75.75 0 0 0 2 10.25v1c0 .414.336.75.75.75h2.5a.75.75 0 0 0 0-1.5H3.927l1.225-.613c.52-.26.848-.79.848-1.371 0-.647-.429-1.327-1.193-1.451a5.03 5.03 0 0 0-2.277.155.75.75 0 0 0 .44 1.434ZM7.75 3a.75.75 0 0 0 0 1.5h9.5a.75.75 0 0 0 0-1.5h-9.5Zm0 6.25a.75.75 0 0 0 0 1.5h9.5a.75.75 0 0 0 0-1.5h-9.5Zm0 6.25a.75.75 0 0 0 0 1.5h9.5a.75.75 0 0 0 0-1.5h-9.5Zm-5.125-1.625a.75.75 0 0 0 0 1.5h1.5a.125.125 0 0 1 0 .25H3.5a.75.75 0 0 0 0 1.5h.625a.125.125 0 0 1 0 .25h-1.5a.75.75 0 0 0 0 1.5h1.5a1.625 1.625 0 0 0 1.37-2.5 1.625 1.625 0 0 0-1.37-2.5h-1.5Z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath d='M3 1.25a.75.75 0 0 0 0 1.5h.25v2.5a.75.75 0 0 0 1.5 0V2A.75.75 0 0 0 4 1.25H3Zm-.03 7.404a3.5 3.5 0 0 1 1.524-.12.034.034 0 0 1-.012.012L2.415 9.579A.75.75 0 0 0 2 10.25v1c0 .414.336.75.75.75h2.5a.75.75 0 0 0 0-1.5H3.927l1.225-.613c.52-.26.848-.79.848-1.371 0-.647-.429-1.327-1.193-1.451a5.03 5.03 0 0 0-2.277.155.75.75 0 0 0 .44 1.434ZM7.75 3a.75.75 0 0 0 0 1.5h9.5a.75.75 0 0 0 0-1.5h-9.5Zm0 6.25a.75.75 0 0 0 0 1.5h9.5a.75.75 0 0 0 0-1.5h-9.5Zm0 6.25a.75.75 0 0 0 0 1.5h9.5a.75.75 0 0 0 0-1.5h-9.5Zm-5.125-1.625a.75.75 0 0 0 0 1.5h1.5a.125.125 0 0 1 0 .25H3.5a.75.75 0 0 0 0 1.5h.625a.125.125 0 0 1 0 .25h-1.5a.75.75 0 0 0 0 1.5h1.5a1.625 1.625 0 0 0 1.37-2.5 1.625 1.625 0 0 0-1.37-2.5h-1.5Z'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .table:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M.99 5.24A2.25 2.25 0 0 1 3.25 3h13.5A2.25 2.25 0 0 1 19 5.25l.01 9.5A2.25 2.25 0 0 1 16.76 17H3.26A2.267 2.267 0 0 1 1 14.74l-.01-9.5Zm8.26 9.52v-.625a.75.75 0 0 0-.75-.75H3.25a.75.75 0 0 0-.75.75v.615c0 .414.336.75.75.75h5.373a.75.75 0 0 0 .627-.74Zm1.5 0a.75.75 0 0 0 .627.74h5.373a.75.75 0 0 0 .75-.75v-.615a.75.75 0 0 0-.75-.75H11.5a.75.75 0 0 0-.75.75v.625Zm6.75-3.63v-.625a.75.75 0 0 0-.75-.75H11.5a.75.75 0 0 0-.75.75v.625c0 .414.336.75.75.75h5.25a.75.75 0 0 0 .75-.75Zm-8.25 0v-.625a.75.75 0 0 0-.75-.75H3.25a.75.75 0 0 0-.75.75v.625c0 .414.336.75.75.75H8.5a.75.75 0 0 0 .75-.75ZM17.5 7.5v-.625a.75.75 0 0 0-.75-.75H11.5a.75.75 0 0 0-.75.75V7.5c0 .414.336.75.75.75h5.25a.75.75 0 0 0 .75-.75Zm-8.25 0v-.625a.75.75 0 0 0-.75-.75H3.25a.75.75 0 0 0-.75.75V7.5c0 .414.336.75.75.75H8.5a.75.75 0 0 0 .75-.75Z' clip-rule='evenodd'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M.99 5.24A2.25 2.25 0 0 1 3.25 3h13.5A2.25 2.25 0 0 1 19 5.25l.01 9.5A2.25 2.25 0 0 1 16.76 17H3.26A2.267 2.267 0 0 1 1 14.74l-.01-9.5Zm8.26 9.52v-.625a.75.75 0 0 0-.75-.75H3.25a.75.75 0 0 0-.75.75v.615c0 .414.336.75.75.75h5.373a.75.75 0 0 0 .627-.74Zm1.5 0a.75.75 0 0 0 .627.74h5.373a.75.75 0 0 0 .75-.75v-.615a.75.75 0 0 0-.75-.75H11.5a.75.75 0 0 0-.75.75v.625Zm6.75-3.63v-.625a.75.75 0 0 0-.75-.75H11.5a.75.75 0 0 0-.75.75v.625c0 .414.336.75.75.75h5.25a.75.75 0 0 0 .75-.75Zm-8.25 0v-.625a.75.75 0 0 0-.75-.75H3.25a.75.75 0 0 0-.75.75v.625c0 .414.336.75.75.75H8.5a.75.75 0 0 0 .75-.75ZM17.5 7.5v-.625a.75.75 0 0 0-.75-.75H11.5a.75.75 0 0 0-.75.75V7.5c0 .414.336.75.75.75h5.25a.75.75 0 0 0 .75-.75Zm-8.25 0v-.625a.75.75 0 0 0-.75-.75H3.25a.75.75 0 0 0-.75.75V7.5c0 .414.336.75.75.75H8.5a.75.75 0 0 0 .75-.75Z' clip-rule='evenodd'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .upload-image:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M1 5.25A2.25 2.25 0 0 1 3.25 3h13.5A2.25 2.25 0 0 1 19 5.25v9.5A2.25 2.25 0 0 1 16.75 17H3.25A2.25 2.25 0 0 1 1 14.75v-9.5Zm1.5 5.81v3.69c0 .414.336.75.75.75h13.5a.75.75 0 0 0 .75-.75v-2.69l-2.22-2.219a.75.75 0 0 0-1.06 0l-1.91 1.909.47.47a.75.75 0 1 1-1.06 1.06L6.53 8.091a.75.75 0 0 0-1.06 0l-2.97 2.97ZM12 7a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z' clip-rule='evenodd'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M1 5.25A2.25 2.25 0 0 1 3.25 3h13.5A2.25 2.25 0 0 1 19 5.25v9.5A2.25 2.25 0 0 1 16.75 17H3.25A2.25 2.25 0 0 1 1 14.75v-9.5Zm1.5 5.81v3.69c0 .414.336.75.75.75h13.5a.75.75 0 0 0 .75-.75v-2.69l-2.22-2.219a.75.75 0 0 0-1.06 0l-1.91 1.909.47.47a.75.75 0 1 1-1.06 1.06L6.53 8.091a.75.75 0 0 0-1.06 0l-2.97 2.97ZM12 7a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z' clip-rule='evenodd'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .undo:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M7.793 2.232a.75.75 0 0 1-.025 1.06L3.622 7.25h10.003a5.375 5.375 0 0 1 0 10.75H10.75a.75.75 0 0 1 0-1.5h2.875a3.875 3.875 0 0 0 0-7.75H3.622l4.146 3.957a.75.75 0 0 1-1.036 1.085l-5.5-5.25a.75.75 0 0 1 0-1.085l5.5-5.25a.75.75 0 0 1 1.06.025Z' clip-rule='evenodd'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M7.793 2.232a.75.75 0 0 1-.025 1.06L3.622 7.25h10.003a5.375 5.375 0 0 1 0 10.75H10.75a.75.75 0 0 1 0-1.5h2.875a3.875 3.875 0 0 0 0-7.75H3.622l4.146 3.957a.75.75 0 0 1-1.036 1.085l-5.5-5.25a.75.75 0 0 1 0-1.085l5.5-5.25a.75.75 0 0 1 1.06.025Z' clip-rule='evenodd'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .redo:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M12.207 2.232a.75.75 0 0 0 .025 1.06l4.146 3.958H6.375a5.375 5.375 0 0 0 0 10.75H9.25a.75.75 0 0 0 0-1.5H6.375a3.875 3.875 0 0 1 0-7.75h10.003l-4.146 3.957a.75.75 0 0 0 1.036 1.085l5.5-5.25a.75.75 0 0 0 0-1.085l-5.5-5.25a.75.75 0 0 0-1.06.025Z' clip-rule='evenodd'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M12.207 2.232a.75.75 0 0 0 .025 1.06l4.146 3.958H6.375a5.375 5.375 0 0 0 0 10.75H9.25a.75.75 0 0 0 0-1.5H6.375a3.875 3.875 0 0 1 0-7.75h10.003l-4.146 3.957a.75.75 0 0 0 1.036 1.085l5.5-5.25a.75.75 0 0 0 0-1.085l-5.5-5.25a.75.75 0 0 0-1.06.025Z' clip-rule='evenodd'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-statusbar{display:none}.fi-fo-rich-editor trix-toolbar .trix-dialogs{position:relative}.fi-fo-rich-editor trix-toolbar .trix-dialog{--tw-bg-opacity:1;--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);background-color:rgba(var(--gray-50),var(--tw-bg-opacity));border-radius:.5rem;bottom:auto;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);left:0;padding:.5rem;position:absolute;right:0;top:1rem}.fi-fo-rich-editor trix-toolbar .trix-dialog:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-800),var(--tw-bg-opacity))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields{display:flex;flex-direction:column;gap:.5rem;width:100%}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-button-group{display:flex;gap:.5rem}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgba(var(--gray-950),0.1);background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.375rem;border-style:none;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgba(var(--gray-950),var(--tw-text-opacity));display:block;font-size:.875rem;line-height:1.25rem;outline:2px solid transparent;outline-offset:2px;padding-bottom:.375rem;padding-inline-end:.75rem;padding-top:.375rem;padding-inline-start:.75rem;transition-duration:75ms;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);width:100%}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input::-moz-placeholder{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input::placeholder{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input:focus-within{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-600),var(--tw-ring-opacity))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input:is(.dark *){--tw-bg-opacity:1;--tw-text-opacity:1;--tw-ring-color:hsla(0,0%,100%,.2);background-color:rgba(var(--gray-700),var(--tw-bg-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input:is(.dark *)::-moz-placeholder{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input:is(.dark *)::placeholder{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input:focus-within:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-600),var(--tw-ring-opacity))}@media (min-width:640px){.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input{font-size:.875rem;line-height:1.5rem}}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-button-group .trix-button{--tw-bg-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgba(var(--gray-200),var(--tw-ring-opacity));background-color:rgba(var(--gray-50),var(--tw-bg-opacity));border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);font-size:.75rem;line-height:1rem;padding:.125rem .5rem}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-button-group .trix-button:is(.dark *){--tw-bg-opacity:1;--tw-ring-opacity:1;--tw-ring-color:rgba(var(--gray-600),var(--tw-ring-opacity));background-color:rgba(var(--gray-700),var(--tw-bg-opacity))}.fi-fo-rich-editor trix-editor:empty:before{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.fi-fo-rich-editor trix-editor:empty:is(.dark *):before{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.fi-fo-rich-editor trix-editor:empty:before{content:attr(placeholder)}.fi-fo-rich-editor trix-editor.prose :where(ol):not(:where([class~=not-prose] *)),.fi-fo-rich-editor trix-editor.prose :where(ul):not(:where([class~=not-prose] *)){padding-inline-end:0!important;padding-inline-start:1.625em!important}.fi-fo-rich-editor trix-editor.prose :where(ul>li):not(:where([class~=not-prose] *)){padding-inline-end:0!important;padding-inline-start:.375em!important}select:not(.choices){background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E")}[dir=rtl] select{background-position:left .5rem center!important}.choices{outline:2px solid transparent;outline-offset:2px;position:relative}.choices [hidden]{display:none!important}.choices[data-type*=select-one] .has-no-choices{display:none}.choices[data-type*=select-one] .choices__input{display:block;margin:0;width:100%}.choices__inner{background-repeat:no-repeat;outline:2px solid transparent;outline-offset:2px;padding-bottom:.375rem;padding-inline-end:2rem;padding-top:.375rem;padding-inline-start:.75rem}@media (min-width:640px){.choices__inner{font-size:.875rem;line-height:1.5rem}}.choices__inner{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E");background-position:right .5rem center;background-size:1.5em 1.5em}.choices.is-disabled .choices__inner{cursor:default}[dir=rtl] .choices__inner{background-position:left .5rem center}.choices__list--single{display:inline-block}.choices__list--single .choices__item{--tw-text-opacity:1;color:rgba(var(--gray-950),var(--tw-text-opacity))}.choices__list--single .choices__item:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.choices.is-disabled .choices__list--single .choices__item{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.choices.is-disabled .choices__list--single .choices__item:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.choices__list--multiple{display:flex;flex-wrap:wrap;gap:.375rem}.choices__list--multiple:not(:empty){margin-bottom:.25rem;margin-left:-.25rem;margin-right:-.25rem;padding-bottom:.125rem;padding-top:.125rem}.choices__list--multiple .choices__item{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-inset:inset;--tw-ring-color:rgba(var(--primary-600),0.1);align-items:center;background-color:rgba(var(--primary-50),var(--tw-bg-opacity));border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgba(var(--primary-600),var(--tw-text-opacity));display:inline-flex;font-size:.75rem;font-weight:500;gap:.25rem;line-height:1rem;padding:.25rem .5rem;word-break:break-all}.choices__list--multiple .choices__item:is(.dark *){--tw-text-opacity:1;--tw-ring-color:rgba(var(--primary-400),0.3);background-color:rgba(var(--primary-400),.1);color:rgba(var(--primary-400),var(--tw-text-opacity))}.choices__list--dropdown,.choices__list[aria-expanded]{--tw-bg-opacity:1;--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgba(var(--gray-950),0.05);background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.5rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);display:none;font-size:.875rem;line-height:1.25rem;margin-top:.5rem;overflow:hidden;overflow-wrap:break-word;position:absolute;top:100%;width:100%;will-change:visibility;z-index:10}.choices__list--dropdown:is(.dark *),.choices__list[aria-expanded]:is(.dark *){--tw-bg-opacity:1;--tw-ring-color:hsla(0,0%,100%,.1);background-color:rgba(var(--gray-900),var(--tw-bg-opacity))}.is-active.choices__list--dropdown,.is-active.choices__list[aria-expanded]{display:block;padding:.25rem}.choices__list--dropdown .choices__list,.choices__list[aria-expanded] .choices__list{max-height:15rem;overflow:auto;will-change:scroll-position}.choices__item--choice{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity));padding:.5rem;transition-duration:75ms;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.choices__item--choice:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.choices__item--choice.choices__item--selectable{--tw-text-opacity:1;border-radius:.375rem;color:rgba(var(--gray-950),var(--tw-text-opacity))}.choices__item--choice.choices__item--selectable:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.choices__list--dropdown .choices__item--selectable.is-highlighted,.choices__list[aria-expanded] .choices__item--selectable.is-highlighted{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.choices__list--dropdown .choices__item--selectable.is-highlighted:is(.dark *),.choices__list[aria-expanded] .choices__item--selectable.is-highlighted:is(.dark *){background-color:hsla(0,0%,100%,.05)}.choices__item{cursor:default}.choices__item--disabled{pointer-events:none}.choices__item--disabled:disabled{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.choices__item--disabled:disabled:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.choices.is-disabled .choices__placeholder.choices__item,.choices__placeholder.choices__item{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity));cursor:default}.choices.is-disabled .choices__placeholder.choices__item:is(.dark *),.choices__placeholder.choices__item:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.choices__button{background-color:transparent;background-position:50%;background-repeat:no-repeat;border-width:0;outline:2px solid transparent;outline-offset:2px;text-indent:-9999px}.choices[data-type*=select-one] .choices__button{height:1rem;inset-inline-end:0;margin-inline-end:2.25rem;opacity:.5;padding:0;position:absolute;transition-duration:75ms;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);width:1rem}.choices[data-type*=select-one] .choices__button:is(.dark *){opacity:.4}.choices[data-type*=select-one] .choices__button{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJtMi41OTIuMDQ0IDE4LjM2NCAxOC4zNjQtMi41NDggMi41NDhMLjA0NCAyLjU5MnoiLz48cGF0aCBkPSJNMCAxOC4zNjQgMTguMzY0IDBsMi41NDggMi41NDhMMi41NDggMjAuOTEyeiIvPjwvZz48L3N2Zz4=);background-size:.7142em .7142em;top:calc(50% - .5714em)}.dark .choices[data-type*=select-one] .choices__button{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJtMi41OTIuMDQ0IDE4LjM2NCAxOC4zNjQtMi41NDggMi41NDhMLjA0NCAyLjU5MnoiLz48cGF0aCBkPSJNMCAxOC4zNjQgMTguMzY0IDBsMi41NDggMi41NDhMMi41NDggMjAuOTEyeiIvPjwvZz48L3N2Zz4=)}.choices[data-type*=select-multiple] .choices__button{height:1rem;opacity:.5;width:1rem}.choices[data-type*=select-multiple] .choices__button:is(.dark *){opacity:.4}.choices[data-type*=select-multiple] .choices__button{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJtMi41OTIuMDQ0IDE4LjM2NCAxOC4zNjQtMi41NDggMi41NDhMLjA0NCAyLjU5MnoiLz48cGF0aCBkPSJNMCAxOC4zNjQgMTguMzY0IDBsMi41NDggMi41NDhMMi41NDggMjAuOTEyeiIvPjwvZz48L3N2Zz4=);background-size:.7142em .7142em}.dark .choices[data-type*=select-multiple] .choices__button{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJtMi41OTIuMDQ0IDE4LjM2NCAxOC4zNjQtMi41NDggMi41NDhMLjA0NCAyLjU5MnoiLz48cGF0aCBkPSJNMCAxOC4zNjQgMTguMzY0IDBsMi41NDggMi41NDhMMi41NDggMjAuOTEyeiIvPjwvZz48L3N2Zz4=)}.choices[data-type*=select-multiple] .choices__button:focus-visible,.choices[data-type*=select-multiple] .choices__button:hover,.choices[data-type*=select-one] .choices__button:focus-visible,.choices[data-type*=select-one] .choices__button:hover{opacity:.7}.choices[data-type*=select-multiple] .choices__button:focus-visible:is(.dark *),.choices[data-type*=select-multiple] .choices__button:hover:is(.dark *),.choices[data-type*=select-one] .choices__button:focus-visible:is(.dark *),.choices[data-type*=select-one] .choices__button:hover:is(.dark *){opacity:.6}.choices.is-disabled .choices__button,.choices[data-type*=select-one] .choices__item[data-value=""] .choices__button{display:none}.choices__input{--tw-text-opacity:1;background-color:transparent!important;border-style:none;color:rgba(var(--gray-950),var(--tw-text-opacity));font-size:1rem!important;line-height:1.5rem!important;padding:0!important;transition-duration:75ms;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.choices__input::-moz-placeholder{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.choices__input::placeholder{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.choices__input:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)!important;--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)!important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)!important}.choices__input:disabled{--tw-text-opacity:1;-webkit-text-fill-color:rgba(var(--gray-500),1);color:rgba(var(--gray-500),var(--tw-text-opacity))}.choices__input:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.choices__input:is(.dark *)::-moz-placeholder{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.choices__input:is(.dark *)::placeholder{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.choices__input:disabled:is(.dark *){--tw-text-opacity:1;-webkit-text-fill-color:rgba(var(--gray-400),1);color:rgba(var(--gray-400),var(--tw-text-opacity))}@media (min-width:640px){.choices__input{font-size:.875rem!important;line-height:1.5rem}}.choices__list--dropdown .choices__input{padding:.5rem!important}.choices__input::-webkit-search-cancel-button,.choices__input::-webkit-search-decoration,.choices__input::-webkit-search-results-button,.choices__input::-webkit-search-results-decoration{display:none}.choices__input::-ms-clear,.choices__input::-ms-reveal{display:none;height:0;width:0}.choices__group{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity));padding:1rem .5rem .5rem}.choices__group:first-child{padding-top:.5rem}.choices__group:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.webkit-calendar-picker-indicator\:opacity-0::-webkit-calendar-picker-indicator{opacity:0}/*! Bundled license information: cropperjs/dist/cropper.min.css: (*! @@ -13,7 +13,7 @@ cropperjs/dist/cropper.min.css: filepond/dist/filepond.min.css: (*! - * FilePond 4.31.1 + * FilePond 4.31.4 * Licensed under MIT, https://opensource.org/licenses/MIT/ * Please visit https://pqina.nl/filepond/ for details. *) diff --git a/public/css/saade/filament-fullcalendar/override-filament-fullcalendar.css b/public/css/saade/filament-fullcalendar/override-filament-fullcalendar.css index 084cd7f..bc7899d 100644 --- a/public/css/saade/filament-fullcalendar/override-filament-fullcalendar.css +++ b/public/css/saade/filament-fullcalendar/override-filament-fullcalendar.css @@ -26,8 +26,8 @@ background-color:#ffffff ; color: #d0d0d0; cursor: not-allowed; -} - -.filament-fullcalendar .fc-day-past{ --fc-highlight-color: #ffffff; } +.fc-day-sat{ + background-color: #f5f2f2; +} diff --git a/public/js/filament/forms/components/date-time-picker.js b/public/js/filament/forms/components/date-time-picker.js index ca58c60..b4e38cd 100644 --- a/public/js/filament/forms/components/date-time-picker.js +++ b/public/js/filament/forms/components/date-time-picker.js @@ -1 +1 @@ -var Yi=Object.create;var un=Object.defineProperty;var pi=Object.getOwnPropertyDescriptor;var Di=Object.getOwnPropertyNames;var Li=Object.getPrototypeOf,vi=Object.prototype.hasOwnProperty;var S=(n,t)=>()=>(t||n((t={exports:{}}).exports,t),t.exports);var gi=(n,t,s,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of Di(t))!vi.call(n,e)&&e!==s&&un(n,e,{get:()=>t[e],enumerable:!(i=pi(t,e))||i.enumerable});return n};var de=(n,t,s)=>(s=n!=null?Yi(Li(n)):{},gi(t||!n||!n.__esModule?un(s,"default",{value:n,enumerable:!0}):s,n));var Ln=S((ge,Se)=>{(function(n,t){typeof ge=="object"&&typeof Se<"u"?Se.exports=t():typeof define=="function"&&define.amd?define(t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_plugin_advancedFormat=t()})(ge,function(){"use strict";return function(n,t){var s=t.prototype,i=s.format;s.format=function(e){var r=this,u=this.$locale();if(!this.isValid())return i.bind(this)(e);var a=this.$utils(),o=(e||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,function(d){switch(d){case"Q":return Math.ceil((r.$M+1)/3);case"Do":return u.ordinal(r.$D);case"gggg":return r.weekYear();case"GGGG":return r.isoWeekYear();case"wo":return u.ordinal(r.week(),"W");case"w":case"ww":return a.s(r.week(),d==="w"?1:2,"0");case"W":case"WW":return a.s(r.isoWeek(),d==="W"?1:2,"0");case"k":case"kk":return a.s(String(r.$H===0?24:r.$H),d==="k"?1:2,"0");case"X":return Math.floor(r.$d.getTime()/1e3);case"x":return r.$d.getTime();case"z":return"["+r.offsetName()+"]";case"zzz":return"["+r.offsetName("long")+"]";default:return d}});return i.bind(this)(o)}}})});var vn=S((be,ke)=>{(function(n,t){typeof be=="object"&&typeof ke<"u"?ke.exports=t():typeof define=="function"&&define.amd?define(t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_plugin_customParseFormat=t()})(be,function(){"use strict";var n={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},t=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|YYYY|YY?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,s=/\d\d/,i=/\d\d?/,e=/\d*[^-_:/,()\s\d]+/,r={},u=function(_){return(_=+_)+(_>68?1900:2e3)},a=function(_){return function(h){this[_]=+h}},o=[/[+-]\d\d:?(\d\d)?|Z/,function(_){(this.zone||(this.zone={})).offset=function(h){if(!h||h==="Z")return 0;var D=h.match(/([+-]|\d\d)/g),p=60*D[1]+(+D[2]||0);return p===0?0:D[0]==="+"?-p:p}(_)}],d=function(_){var h=r[_];return h&&(h.indexOf?h:h.s.concat(h.f))},f=function(_,h){var D,p=r.meridiem;if(p){for(var k=1;k<=24;k+=1)if(_.indexOf(p(k,0,h))>-1){D=k>12;break}}else D=_===(h?"pm":"PM");return D},y={A:[e,function(_){this.afternoon=f(_,!1)}],a:[e,function(_){this.afternoon=f(_,!0)}],S:[/\d/,function(_){this.milliseconds=100*+_}],SS:[s,function(_){this.milliseconds=10*+_}],SSS:[/\d{3}/,function(_){this.milliseconds=+_}],s:[i,a("seconds")],ss:[i,a("seconds")],m:[i,a("minutes")],mm:[i,a("minutes")],H:[i,a("hours")],h:[i,a("hours")],HH:[i,a("hours")],hh:[i,a("hours")],D:[i,a("day")],DD:[s,a("day")],Do:[e,function(_){var h=r.ordinal,D=_.match(/\d+/);if(this.day=D[0],h)for(var p=1;p<=31;p+=1)h(p).replace(/\[|\]/g,"")===_&&(this.day=p)}],M:[i,a("month")],MM:[s,a("month")],MMM:[e,function(_){var h=d("months"),D=(d("monthsShort")||h.map(function(p){return p.slice(0,3)})).indexOf(_)+1;if(D<1)throw new Error;this.month=D%12||D}],MMMM:[e,function(_){var h=d("months").indexOf(_)+1;if(h<1)throw new Error;this.month=h%12||h}],Y:[/[+-]?\d+/,a("year")],YY:[s,function(_){this.year=u(_)}],YYYY:[/\d{4}/,a("year")],Z:o,ZZ:o};function l(_){var h,D;h=_,D=r&&r.formats;for(var p=(_=h.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,function(x,w,H){var W=H&&H.toUpperCase();return w||D[H]||n[H]||D[W].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(G,L,M){return L||M.slice(1)})})).match(t),k=p.length,T=0;T-1)return new Date((Y==="X"?1e3:1)*m);var v=l(Y)(m),g=v.year,C=v.month,q=v.day,N=v.hours,E=v.minutes,U=v.seconds,ee=v.milliseconds,V=v.zone,B=new Date,Z=q||(g||C?1:B.getDate()),F=g||B.getFullYear(),P=0;g&&!C||(P=C>0?C-1:B.getMonth());var Q=N||0,te=E||0,ye=U||0,Ye=ee||0;return V?new Date(Date.UTC(F,P,Z,Q,te,ye,Ye+60*V.offset*1e3)):c?new Date(Date.UTC(F,P,Z,Q,te,ye,Ye)):new Date(F,P,Z,Q,te,ye,Ye)}catch{return new Date("")}}(b,I,$),this.init(),W&&W!==!0&&(this.$L=this.locale(W).$L),H&&b!=this.format(I)&&(this.$d=new Date("")),r={}}else if(I instanceof Array)for(var G=I.length,L=1;L<=G;L+=1){z[1]=I[L-1];var M=D.apply(this,z);if(M.isValid()){this.$d=M.$d,this.$L=M.$L,this.init();break}L===G&&(this.$d=new Date(""))}else k.call(this,T)}}})});var gn=S((He,je)=>{(function(n,t){typeof He=="object"&&typeof je<"u"?je.exports=t():typeof define=="function"&&define.amd?define(t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_plugin_localeData=t()})(He,function(){"use strict";return function(n,t,s){var i=t.prototype,e=function(d){return d&&(d.indexOf?d:d.s)},r=function(d,f,y,l,_){var h=d.name?d:d.$locale(),D=e(h[f]),p=e(h[y]),k=D||p.map(function(b){return b.slice(0,l)});if(!_)return k;var T=h.weekStart;return k.map(function(b,$){return k[($+(T||0))%7]})},u=function(){return s.Ls[s.locale()]},a=function(d,f){return d.formats[f]||function(y){return y.replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(l,_,h){return _||h.slice(1)})}(d.formats[f.toUpperCase()])},o=function(){var d=this;return{months:function(f){return f?f.format("MMMM"):r(d,"months")},monthsShort:function(f){return f?f.format("MMM"):r(d,"monthsShort","months",3)},firstDayOfWeek:function(){return d.$locale().weekStart||0},weekdays:function(f){return f?f.format("dddd"):r(d,"weekdays")},weekdaysMin:function(f){return f?f.format("dd"):r(d,"weekdaysMin","weekdays",2)},weekdaysShort:function(f){return f?f.format("ddd"):r(d,"weekdaysShort","weekdays",3)},longDateFormat:function(f){return a(d.$locale(),f)},meridiem:this.$locale().meridiem,ordinal:this.$locale().ordinal}};i.localeData=function(){return o.bind(this)()},s.localeData=function(){var d=u();return{firstDayOfWeek:function(){return d.weekStart||0},weekdays:function(){return s.weekdays()},weekdaysShort:function(){return s.weekdaysShort()},weekdaysMin:function(){return s.weekdaysMin()},months:function(){return s.months()},monthsShort:function(){return s.monthsShort()},longDateFormat:function(f){return a(d,f)},meridiem:d.meridiem,ordinal:d.ordinal}},s.months=function(){return r(u(),"months")},s.monthsShort=function(){return r(u(),"monthsShort","months",3)},s.weekdays=function(d){return r(u(),"weekdays",null,null,d)},s.weekdaysShort=function(d){return r(u(),"weekdaysShort","weekdays",3,d)},s.weekdaysMin=function(d){return r(u(),"weekdaysMin","weekdays",2,d)}}})});var Sn=S((Te,we)=>{(function(n,t){typeof Te=="object"&&typeof we<"u"?we.exports=t():typeof define=="function"&&define.amd?define(t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_plugin_timezone=t()})(Te,function(){"use strict";var n={year:0,month:1,day:2,hour:3,minute:4,second:5},t={};return function(s,i,e){var r,u=function(f,y,l){l===void 0&&(l={});var _=new Date(f),h=function(D,p){p===void 0&&(p={});var k=p.timeZoneName||"short",T=D+"|"+k,b=t[T];return b||(b=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:D,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",timeZoneName:k}),t[T]=b),b}(y,l);return h.formatToParts(_)},a=function(f,y){for(var l=u(f,y),_=[],h=0;h=0&&(_[T]=parseInt(k,10))}var b=_[3],$=b===24?0:b,z=_[0]+"-"+_[1]+"-"+_[2]+" "+$+":"+_[4]+":"+_[5]+":000",I=+f;return(e.utc(z).valueOf()-(I-=I%1e3))/6e4},o=i.prototype;o.tz=function(f,y){f===void 0&&(f=r);var l=this.utcOffset(),_=this.toDate(),h=_.toLocaleString("en-US",{timeZone:f}),D=Math.round((_-new Date(h))/1e3/60),p=e(h,{locale:this.$L}).$set("millisecond",this.$ms).utcOffset(15*-Math.round(_.getTimezoneOffset()/15)-D,!0);if(y){var k=p.utcOffset();p=p.add(l-k,"minute")}return p.$x.$timezone=f,p},o.offsetName=function(f){var y=this.$x.$timezone||e.tz.guess(),l=u(this.valueOf(),y,{timeZoneName:f}).find(function(_){return _.type.toLowerCase()==="timezonename"});return l&&l.value};var d=o.startOf;o.startOf=function(f,y){if(!this.$x||!this.$x.$timezone)return d.call(this,f,y);var l=e(this.format("YYYY-MM-DD HH:mm:ss:SSS"),{locale:this.$L});return d.call(l,f,y).tz(this.$x.$timezone,!0)},e.tz=function(f,y,l){var _=l&&y,h=l||y||r,D=a(+e(),h);if(typeof f!="string")return e(f).tz(h);var p=function($,z,I){var x=$-60*z*1e3,w=a(x,I);if(z===w)return[x,z];var H=a(x-=60*(w-z)*1e3,I);return w===H?[x,w]:[$-60*Math.min(w,H)*1e3,Math.max(w,H)]}(e.utc(f,_).valueOf(),D,h),k=p[0],T=p[1],b=e(k).utcOffset(T);return b.$x.$timezone=h,b},e.tz.guess=function(){return Intl.DateTimeFormat().resolvedOptions().timeZone},e.tz.setDefault=function(f){r=f}}})});var bn=S(($e,Ce)=>{(function(n,t){typeof $e=="object"&&typeof Ce<"u"?Ce.exports=t():typeof define=="function"&&define.amd?define(t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_plugin_utc=t()})($e,function(){"use strict";var n="minute",t=/[+-]\d\d(?::?\d\d)?/g,s=/([+-]|\d\d)/g;return function(i,e,r){var u=e.prototype;r.utc=function(_){var h={date:_,utc:!0,args:arguments};return new e(h)},u.utc=function(_){var h=r(this.toDate(),{locale:this.$L,utc:!0});return _?h.add(this.utcOffset(),n):h},u.local=function(){return r(this.toDate(),{locale:this.$L,utc:!1})};var a=u.parse;u.parse=function(_){_.utc&&(this.$u=!0),this.$utils().u(_.$offset)||(this.$offset=_.$offset),a.call(this,_)};var o=u.init;u.init=function(){if(this.$u){var _=this.$d;this.$y=_.getUTCFullYear(),this.$M=_.getUTCMonth(),this.$D=_.getUTCDate(),this.$W=_.getUTCDay(),this.$H=_.getUTCHours(),this.$m=_.getUTCMinutes(),this.$s=_.getUTCSeconds(),this.$ms=_.getUTCMilliseconds()}else o.call(this)};var d=u.utcOffset;u.utcOffset=function(_,h){var D=this.$utils().u;if(D(_))return this.$u?0:D(this.$offset)?d.call(this):this.$offset;if(typeof _=="string"&&(_=function(b){b===void 0&&(b="");var $=b.match(t);if(!$)return null;var z=(""+$[0]).match(s)||["-",0,0],I=z[0],x=60*+z[1]+ +z[2];return x===0?0:I==="+"?x:-x}(_),_===null))return this;var p=Math.abs(_)<=16?60*_:_,k=this;if(h)return k.$offset=p,k.$u=_===0,k;if(_!==0){var T=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(k=this.local().add(p+T,n)).$offset=p,k.$x.$localOffset=T}else k=this.utc();return k};var f=u.format;u.format=function(_){var h=_||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return f.call(this,h)},u.valueOf=function(){var _=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*_},u.isUTC=function(){return!!this.$u},u.toISOString=function(){return this.toDate().toISOString()},u.toString=function(){return this.toDate().toUTCString()};var y=u.toDate;u.toDate=function(_){return _==="s"&&this.$offset?r(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():y.call(this)};var l=u.diff;u.diff=function(_,h,D){if(_&&this.$u===_.$u)return l.call(this,_,h,D);var p=this.local(),k=r(_).local();return l.call(p,k,h,D)}}})});var j=S((Oe,ze)=>{(function(n,t){typeof Oe=="object"&&typeof ze<"u"?ze.exports=t():typeof define=="function"&&define.amd?define(t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs=t()})(Oe,function(){"use strict";var n=1e3,t=6e4,s=36e5,i="millisecond",e="second",r="minute",u="hour",a="day",o="week",d="month",f="quarter",y="year",l="date",_="Invalid Date",h=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,D=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,p={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(L){var M=["th","st","nd","rd"],m=L%100;return"["+L+(M[(m-20)%10]||M[m]||M[0])+"]"}},k=function(L,M,m){var Y=String(L);return!Y||Y.length>=M?L:""+Array(M+1-Y.length).join(m)+L},T={s:k,z:function(L){var M=-L.utcOffset(),m=Math.abs(M),Y=Math.floor(m/60),c=m%60;return(M<=0?"+":"-")+k(Y,2,"0")+":"+k(c,2,"0")},m:function L(M,m){if(M.date()1)return L(g[0])}else{var C=M.name;$[C]=M,c=C}return!Y&&c&&(b=c),c||!Y&&b},w=function(L,M){if(I(L))return L.clone();var m=typeof M=="object"?M:{};return m.date=L,m.args=arguments,new W(m)},H=T;H.l=x,H.i=I,H.w=function(L,M){return w(L,{locale:M.$L,utc:M.$u,x:M.$x,$offset:M.$offset})};var W=function(){function L(m){this.$L=x(m.locale,null,!0),this.parse(m),this.$x=this.$x||m.x||{},this[z]=!0}var M=L.prototype;return M.parse=function(m){this.$d=function(Y){var c=Y.date,v=Y.utc;if(c===null)return new Date(NaN);if(H.u(c))return new Date;if(c instanceof Date)return new Date(c);if(typeof c=="string"&&!/Z$/i.test(c)){var g=c.match(h);if(g){var C=g[2]-1||0,q=(g[7]||"0").substring(0,3);return v?new Date(Date.UTC(g[1],C,g[3]||1,g[4]||0,g[5]||0,g[6]||0,q)):new Date(g[1],C,g[3]||1,g[4]||0,g[5]||0,g[6]||0,q)}}return new Date(c)}(m),this.init()},M.init=function(){var m=this.$d;this.$y=m.getFullYear(),this.$M=m.getMonth(),this.$D=m.getDate(),this.$W=m.getDay(),this.$H=m.getHours(),this.$m=m.getMinutes(),this.$s=m.getSeconds(),this.$ms=m.getMilliseconds()},M.$utils=function(){return H},M.isValid=function(){return this.$d.toString()!==_},M.isSame=function(m,Y){var c=w(m);return this.startOf(Y)<=c&&c<=this.endOf(Y)},M.isAfter=function(m,Y){return w(m){(function(n,t){typeof Ae=="object"&&typeof Ie<"u"?Ie.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_ar=t(n.dayjs)})(Ae,function(n){"use strict";function t(a){return a&&typeof a=="object"&&"default"in a?a:{default:a}}var s=t(n),i="\u064A\u0646\u0627\u064A\u0631_\u0641\u0628\u0631\u0627\u064A\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064A\u0644_\u0645\u0627\u064A\u0648_\u064A\u0648\u0646\u064A\u0648_\u064A\u0648\u0644\u064A\u0648_\u0623\u063A\u0633\u0637\u0633_\u0633\u0628\u062A\u0645\u0628\u0631_\u0623\u0643\u062A\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062F\u064A\u0633\u0645\u0628\u0631".split("_"),e={1:"\u0661",2:"\u0662",3:"\u0663",4:"\u0664",5:"\u0665",6:"\u0666",7:"\u0667",8:"\u0668",9:"\u0669",0:"\u0660"},r={"\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u0660":"0"},u={name:"ar",weekdays:"\u0627\u0644\u0623\u062D\u062F_\u0627\u0644\u0625\u062B\u0646\u064A\u0646_\u0627\u0644\u062B\u0644\u0627\u062B\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062E\u0645\u064A\u0633_\u0627\u0644\u062C\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062A".split("_"),weekdaysShort:"\u0623\u062D\u062F_\u0625\u062B\u0646\u064A\u0646_\u062B\u0644\u0627\u062B\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062E\u0645\u064A\u0633_\u062C\u0645\u0639\u0629_\u0633\u0628\u062A".split("_"),weekdaysMin:"\u062D_\u0646_\u062B_\u0631_\u062E_\u062C_\u0633".split("_"),months:i,monthsShort:i,weekStart:6,meridiem:function(a){return a>12?"\u0645":"\u0635"},relativeTime:{future:"\u0628\u0639\u062F %s",past:"\u0645\u0646\u0630 %s",s:"\u062B\u0627\u0646\u064A\u0629 \u0648\u0627\u062D\u062F\u0629",m:"\u062F\u0642\u064A\u0642\u0629 \u0648\u0627\u062D\u062F\u0629",mm:"%d \u062F\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629 \u0648\u0627\u062D\u062F\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062A",d:"\u064A\u0648\u0645 \u0648\u0627\u062D\u062F",dd:"%d \u0623\u064A\u0627\u0645",M:"\u0634\u0647\u0631 \u0648\u0627\u062D\u062F",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0639\u0627\u0645 \u0648\u0627\u062D\u062F",yy:"%d \u0623\u0639\u0648\u0627\u0645"},preparse:function(a){return a.replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(o){return r[o]}).replace(/،/g,",")},postformat:function(a){return a.replace(/\d/g,function(o){return e[o]}).replace(/,/g,"\u060C")},ordinal:function(a){return a},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/\u200FM/\u200FYYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"}};return s.default.locale(u,null,!0),u})});var Hn=S((qe,xe)=>{(function(n,t){typeof qe=="object"&&typeof xe<"u"?xe.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_bs=t(n.dayjs)})(qe,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"bs",weekdays:"nedjelja_ponedjeljak_utorak_srijeda_\u010Detvrtak_petak_subota".split("_"),months:"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar".split("_"),weekStart:1,weekdaysShort:"ned._pon._uto._sri._\u010Det._pet._sub.".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010De_pe_su".split("_"),ordinal:function(e){return e},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"}};return s.default.locale(i,null,!0),i})});var jn=S((Ne,Ee)=>{(function(n,t){typeof Ne=="object"&&typeof Ee<"u"?Ee.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_ca=t(n.dayjs)})(Ne,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"ca",weekdays:"Diumenge_Dilluns_Dimarts_Dimecres_Dijous_Divendres_Dissabte".split("_"),weekdaysShort:"Dg._Dl._Dt._Dc._Dj._Dv._Ds.".split("_"),weekdaysMin:"Dg_Dl_Dt_Dc_Dj_Dv_Ds".split("_"),months:"Gener_Febrer_Mar\xE7_Abril_Maig_Juny_Juliol_Agost_Setembre_Octubre_Novembre_Desembre".split("_"),monthsShort:"Gen._Febr._Mar\xE7_Abr._Maig_Juny_Jul._Ag._Set._Oct._Nov._Des.".split("_"),weekStart:1,formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",LLL:"D MMMM [de] YYYY [a les] H:mm",LLLL:"dddd D MMMM [de] YYYY [a les] H:mm",ll:"D MMM YYYY",lll:"D MMM YYYY, H:mm",llll:"ddd D MMM YYYY, H:mm"},relativeTime:{future:"d'aqu\xED %s",past:"fa %s",s:"uns segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},ordinal:function(e){return""+e+(e===1||e===3?"r":e===2?"n":e===4?"t":"\xE8")}};return s.default.locale(i,null,!0),i})});var Fe=S((Me,Tn)=>{(function(n,t){typeof Me=="object"&&typeof Tn<"u"?t(Me,j()):typeof define=="function"&&define.amd?define(["exports","dayjs"],t):t((n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_ku={},n.dayjs)})(Me,function(n,t){"use strict";function s(o){return o&&typeof o=="object"&&"default"in o?o:{default:o}}var i=s(t),e={1:"\u0661",2:"\u0662",3:"\u0663",4:"\u0664",5:"\u0665",6:"\u0666",7:"\u0667",8:"\u0668",9:"\u0669",0:"\u0660"},r={"\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u0660":"0"},u=["\u06A9\u0627\u0646\u0648\u0648\u0646\u06CC \u062F\u0648\u0648\u06D5\u0645","\u0634\u0648\u0628\u0627\u062A","\u0626\u0627\u062F\u0627\u0631","\u0646\u06CC\u0633\u0627\u0646","\u0626\u0627\u06CC\u0627\u0631","\u062D\u0648\u0632\u06D5\u06CC\u0631\u0627\u0646","\u062A\u06D5\u0645\u0645\u0648\u0648\u0632","\u0626\u0627\u0628","\u0626\u06D5\u06CC\u0644\u0648\u0648\u0644","\u062A\u0634\u0631\u06CC\u0646\u06CC \u06CC\u06D5\u06A9\u06D5\u0645","\u062A\u0634\u0631\u06CC\u0646\u06CC \u062F\u0648\u0648\u06D5\u0645","\u06A9\u0627\u0646\u0648\u0648\u0646\u06CC \u06CC\u06D5\u06A9\u06D5\u0645"],a={name:"ku",months:u,monthsShort:u,weekdays:"\u06CC\u06D5\u06A9\u0634\u06D5\u0645\u0645\u06D5_\u062F\u0648\u0648\u0634\u06D5\u0645\u0645\u06D5_\u0633\u06CE\u0634\u06D5\u0645\u0645\u06D5_\u0686\u0648\u0627\u0631\u0634\u06D5\u0645\u0645\u06D5_\u067E\u06CE\u0646\u062C\u0634\u06D5\u0645\u0645\u06D5_\u0647\u06D5\u06CC\u0646\u06CC_\u0634\u06D5\u0645\u0645\u06D5".split("_"),weekdaysShort:"\u06CC\u06D5\u06A9\u0634\u06D5\u0645_\u062F\u0648\u0648\u0634\u06D5\u0645_\u0633\u06CE\u0634\u06D5\u0645_\u0686\u0648\u0627\u0631\u0634\u06D5\u0645_\u067E\u06CE\u0646\u062C\u0634\u06D5\u0645_\u0647\u06D5\u06CC\u0646\u06CC_\u0634\u06D5\u0645\u0645\u06D5".split("_"),weekStart:6,weekdaysMin:"\u06CC_\u062F_\u0633_\u0686_\u067E_\u0647\u0640_\u0634".split("_"),preparse:function(o){return o.replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(d){return r[d]}).replace(/،/g,",")},postformat:function(o){return o.replace(/\d/g,function(d){return e[d]}).replace(/,/g,"\u060C")},ordinal:function(o){return o},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiem:function(o){return o<12?"\u067E.\u0646":"\u062F.\u0646"},relativeTime:{future:"\u0644\u06D5 %s",past:"\u0644\u06D5\u0645\u06D5\u0648\u067E\u06CE\u0634 %s",s:"\u0686\u06D5\u0646\u062F \u0686\u0631\u06A9\u06D5\u06CC\u06D5\u06A9",m:"\u06CC\u06D5\u06A9 \u062E\u0648\u0644\u06D5\u06A9",mm:"%d \u062E\u0648\u0644\u06D5\u06A9",h:"\u06CC\u06D5\u06A9 \u06A9\u0627\u062A\u0698\u0645\u06CE\u0631",hh:"%d \u06A9\u0627\u062A\u0698\u0645\u06CE\u0631",d:"\u06CC\u06D5\u06A9 \u0695\u06C6\u0698",dd:"%d \u0695\u06C6\u0698",M:"\u06CC\u06D5\u06A9 \u0645\u0627\u0646\u06AF",MM:"%d \u0645\u0627\u0646\u06AF",y:"\u06CC\u06D5\u06A9 \u0633\u0627\u06B5",yy:"%d \u0633\u0627\u06B5"}};i.default.locale(a,null,!0),n.default=a,n.englishToArabicNumbersMap=e,Object.defineProperty(n,"__esModule",{value:!0})})});var wn=S((Je,We)=>{(function(n,t){typeof Je=="object"&&typeof We<"u"?We.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_cs=t(n.dayjs)})(Je,function(n){"use strict";function t(u){return u&&typeof u=="object"&&"default"in u?u:{default:u}}var s=t(n);function i(u){return u>1&&u<5&&~~(u/10)!=1}function e(u,a,o,d){var f=u+" ";switch(o){case"s":return a||d?"p\xE1r sekund":"p\xE1r sekundami";case"m":return a?"minuta":d?"minutu":"minutou";case"mm":return a||d?f+(i(u)?"minuty":"minut"):f+"minutami";case"h":return a?"hodina":d?"hodinu":"hodinou";case"hh":return a||d?f+(i(u)?"hodiny":"hodin"):f+"hodinami";case"d":return a||d?"den":"dnem";case"dd":return a||d?f+(i(u)?"dny":"dn\xED"):f+"dny";case"M":return a||d?"m\u011Bs\xEDc":"m\u011Bs\xEDcem";case"MM":return a||d?f+(i(u)?"m\u011Bs\xEDce":"m\u011Bs\xEDc\u016F"):f+"m\u011Bs\xEDci";case"y":return a||d?"rok":"rokem";case"yy":return a||d?f+(i(u)?"roky":"let"):f+"lety"}}var r={name:"cs",weekdays:"ned\u011Ble_pond\u011Bl\xED_\xFAter\xFD_st\u0159eda_\u010Dtvrtek_p\xE1tek_sobota".split("_"),weekdaysShort:"ne_po_\xFAt_st_\u010Dt_p\xE1_so".split("_"),weekdaysMin:"ne_po_\xFAt_st_\u010Dt_p\xE1_so".split("_"),months:"leden_\xFAnor_b\u0159ezen_duben_kv\u011Bten_\u010Derven_\u010Dervenec_srpen_z\xE1\u0159\xED_\u0159\xEDjen_listopad_prosinec".split("_"),monthsShort:"led_\xFAno_b\u0159e_dub_kv\u011B_\u010Dvn_\u010Dvc_srp_z\xE1\u0159_\u0159\xEDj_lis_pro".split("_"),weekStart:1,yearStart:4,ordinal:function(u){return u+"."},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},relativeTime:{future:"za %s",past:"p\u0159ed %s",s:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e}};return s.default.locale(r,null,!0),r})});var $n=S((Ue,Pe)=>{(function(n,t){typeof Ue=="object"&&typeof Pe<"u"?Pe.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_cy=t(n.dayjs)})(Ue,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"cy",weekdays:"Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn".split("_"),months:"Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr".split("_"),weekStart:1,weekdaysShort:"Sul_Llun_Maw_Mer_Iau_Gwe_Sad".split("_"),monthsShort:"Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag".split("_"),weekdaysMin:"Su_Ll_Ma_Me_Ia_Gw_Sa".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"mewn %s",past:"%s yn \xF4l",s:"ychydig eiliadau",m:"munud",mm:"%d munud",h:"awr",hh:"%d awr",d:"diwrnod",dd:"%d diwrnod",M:"mis",MM:"%d mis",y:"blwyddyn",yy:"%d flynedd"}};return s.default.locale(i,null,!0),i})});var Cn=S((Re,Ge)=>{(function(n,t){typeof Re=="object"&&typeof Ge<"u"?Ge.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_da=t(n.dayjs)})(Re,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"da",weekdays:"s\xF8ndag_mandag_tirsdag_onsdag_torsdag_fredag_l\xF8rdag".split("_"),weekdaysShort:"s\xF8n._man._tirs._ons._tors._fre._l\xF8r.".split("_"),weekdaysMin:"s\xF8._ma._ti._on._to._fr._l\xF8.".split("_"),months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj_juni_juli_aug._sept._okt._nov._dec.".split("_"),weekStart:1,yearStart:4,ordinal:function(e){return e+"."},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY [kl.] HH:mm"},relativeTime:{future:"om %s",past:"%s siden",s:"f\xE5 sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en m\xE5ned",MM:"%d m\xE5neder",y:"et \xE5r",yy:"%d \xE5r"}};return s.default.locale(i,null,!0),i})});var On=S((Ze,Ve)=>{(function(n,t){typeof Ze=="object"&&typeof Ve<"u"?Ve.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_de=t(n.dayjs)})(Ze,function(n){"use strict";function t(u){return u&&typeof u=="object"&&"default"in u?u:{default:u}}var s=t(n),i={s:"ein paar Sekunden",m:["eine Minute","einer Minute"],mm:"%d Minuten",h:["eine Stunde","einer Stunde"],hh:"%d Stunden",d:["ein Tag","einem Tag"],dd:["%d Tage","%d Tagen"],M:["ein Monat","einem Monat"],MM:["%d Monate","%d Monaten"],y:["ein Jahr","einem Jahr"],yy:["%d Jahre","%d Jahren"]};function e(u,a,o){var d=i[o];return Array.isArray(d)&&(d=d[a?0:1]),d.replace("%d",u)}var r={name:"de",weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),months:"Januar_Februar_M\xE4rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._M\xE4rz_Apr._Mai_Juni_Juli_Aug._Sept._Okt._Nov._Dez.".split("_"),ordinal:function(u){return u+"."},weekStart:1,yearStart:4,formats:{LTS:"HH:mm:ss",LT:"HH:mm",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},relativeTime:{future:"in %s",past:"vor %s",s:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e}};return s.default.locale(r,null,!0),r})});var zn=S((Ke,Xe)=>{(function(n,t){typeof Ke=="object"&&typeof Xe<"u"?Xe.exports=t():typeof define=="function"&&define.amd?define(t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_en=t()})(Ke,function(){"use strict";return{name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(n){var t=["th","st","nd","rd"],s=n%100;return"["+n+(t[(s-20)%10]||t[s]||t[0])+"]"}}})});var An=S((Be,Qe)=>{(function(n,t){typeof Be=="object"&&typeof Qe<"u"?Qe.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_es=t(n.dayjs)})(Be,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"es",monthsShort:"ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),weekdays:"domingo_lunes_martes_mi\xE9rcoles_jueves_viernes_s\xE1bado".split("_"),weekdaysShort:"dom._lun._mar._mi\xE9._jue._vie._s\xE1b.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_s\xE1".split("_"),months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),weekStart:1,formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un d\xEDa",dd:"%d d\xEDas",M:"un mes",MM:"%d meses",y:"un a\xF1o",yy:"%d a\xF1os"},ordinal:function(e){return e+"\xBA"}};return s.default.locale(i,null,!0),i})});var In=S((et,tt)=>{(function(n,t){typeof et=="object"&&typeof tt<"u"?tt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_et=t(n.dayjs)})(et,function(n){"use strict";function t(r){return r&&typeof r=="object"&&"default"in r?r:{default:r}}var s=t(n);function i(r,u,a,o){var d={s:["m\xF5ne sekundi","m\xF5ni sekund","paar sekundit"],m:["\xFChe minuti","\xFCks minut"],mm:["%d minuti","%d minutit"],h:["\xFChe tunni","tund aega","\xFCks tund"],hh:["%d tunni","%d tundi"],d:["\xFChe p\xE4eva","\xFCks p\xE4ev"],M:["kuu aja","kuu aega","\xFCks kuu"],MM:["%d kuu","%d kuud"],y:["\xFChe aasta","aasta","\xFCks aasta"],yy:["%d aasta","%d aastat"]};return u?(d[a][2]?d[a][2]:d[a][1]).replace("%d",r):(o?d[a][0]:d[a][1]).replace("%d",r)}var e={name:"et",weekdays:"p\xFChap\xE4ev_esmasp\xE4ev_teisip\xE4ev_kolmap\xE4ev_neljap\xE4ev_reede_laup\xE4ev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),months:"jaanuar_veebruar_m\xE4rts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_m\xE4rts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),ordinal:function(r){return r+"."},weekStart:1,relativeTime:{future:"%s p\xE4rast",past:"%s tagasi",s:i,m:i,mm:i,h:i,hh:i,d:i,dd:"%d p\xE4eva",M:i,MM:i,y:i,yy:i},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"}};return s.default.locale(e,null,!0),e})});var qn=S((nt,it)=>{(function(n,t){typeof nt=="object"&&typeof it<"u"?it.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_fa=t(n.dayjs)})(nt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"fa",weekdays:"\u06CC\u06A9\u200C\u0634\u0646\u0628\u0647_\u062F\u0648\u0634\u0646\u0628\u0647_\u0633\u0647\u200C\u0634\u0646\u0628\u0647_\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647_\u067E\u0646\u062C\u200C\u0634\u0646\u0628\u0647_\u062C\u0645\u0639\u0647_\u0634\u0646\u0628\u0647".split("_"),weekdaysShort:"\u06CC\u06A9\u200C\u0634\u0646\u0628\u0647_\u062F\u0648\u0634\u0646\u0628\u0647_\u0633\u0647\u200C\u0634\u0646\u0628\u0647_\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647_\u067E\u0646\u062C\u200C\u0634\u0646\u0628\u0647_\u062C\u0645\u0639\u0647_\u0634\u0646\u0628\u0647".split("_"),weekdaysMin:"\u06CC_\u062F_\u0633_\u0686_\u067E_\u062C_\u0634".split("_"),weekStart:6,months:"\u0698\u0627\u0646\u0648\u06CC\u0647_\u0641\u0648\u0631\u06CC\u0647_\u0645\u0627\u0631\u0633_\u0622\u0648\u0631\u06CC\u0644_\u0645\u0647_\u0698\u0648\u0626\u0646_\u0698\u0648\u0626\u06CC\u0647_\u0627\u0648\u062A_\u0633\u067E\u062A\u0627\u0645\u0628\u0631_\u0627\u06A9\u062A\u0628\u0631_\u0646\u0648\u0627\u0645\u0628\u0631_\u062F\u0633\u0627\u0645\u0628\u0631".split("_"),monthsShort:"\u0698\u0627\u0646\u0648\u06CC\u0647_\u0641\u0648\u0631\u06CC\u0647_\u0645\u0627\u0631\u0633_\u0622\u0648\u0631\u06CC\u0644_\u0645\u0647_\u0698\u0648\u0626\u0646_\u0698\u0648\u0626\u06CC\u0647_\u0627\u0648\u062A_\u0633\u067E\u062A\u0627\u0645\u0628\u0631_\u0627\u06A9\u062A\u0628\u0631_\u0646\u0648\u0627\u0645\u0628\u0631_\u062F\u0633\u0627\u0645\u0628\u0631".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"\u062F\u0631 %s",past:"%s \u067E\u06CC\u0634",s:"\u0686\u0646\u062F \u062B\u0627\u0646\u06CC\u0647",m:"\u06CC\u06A9 \u062F\u0642\u06CC\u0642\u0647",mm:"%d \u062F\u0642\u06CC\u0642\u0647",h:"\u06CC\u06A9 \u0633\u0627\u0639\u062A",hh:"%d \u0633\u0627\u0639\u062A",d:"\u06CC\u06A9 \u0631\u0648\u0632",dd:"%d \u0631\u0648\u0632",M:"\u06CC\u06A9 \u0645\u0627\u0647",MM:"%d \u0645\u0627\u0647",y:"\u06CC\u06A9 \u0633\u0627\u0644",yy:"%d \u0633\u0627\u0644"}};return s.default.locale(i,null,!0),i})});var xn=S((st,rt)=>{(function(n,t){typeof st=="object"&&typeof rt<"u"?rt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_fi=t(n.dayjs)})(st,function(n){"use strict";function t(r){return r&&typeof r=="object"&&"default"in r?r:{default:r}}var s=t(n);function i(r,u,a,o){var d={s:"muutama sekunti",m:"minuutti",mm:"%d minuuttia",h:"tunti",hh:"%d tuntia",d:"p\xE4iv\xE4",dd:"%d p\xE4iv\xE4\xE4",M:"kuukausi",MM:"%d kuukautta",y:"vuosi",yy:"%d vuotta",numbers:"nolla_yksi_kaksi_kolme_nelj\xE4_viisi_kuusi_seitsem\xE4n_kahdeksan_yhdeks\xE4n".split("_")},f={s:"muutaman sekunnin",m:"minuutin",mm:"%d minuutin",h:"tunnin",hh:"%d tunnin",d:"p\xE4iv\xE4n",dd:"%d p\xE4iv\xE4n",M:"kuukauden",MM:"%d kuukauden",y:"vuoden",yy:"%d vuoden",numbers:"nollan_yhden_kahden_kolmen_nelj\xE4n_viiden_kuuden_seitsem\xE4n_kahdeksan_yhdeks\xE4n".split("_")},y=o&&!u?f:d,l=y[a];return r<10?l.replace("%d",y.numbers[r]):l.replace("%d",r)}var e={name:"fi",weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kes\xE4kuu_hein\xE4kuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kes\xE4_hein\xE4_elo_syys_loka_marras_joulu".split("_"),ordinal:function(r){return r+"."},weekStart:1,yearStart:4,relativeTime:{future:"%s p\xE4\xE4st\xE4",past:"%s sitten",s:i,m:i,mm:i,h:i,hh:i,d:i,dd:i,M:i,MM:i,y:i,yy:i},formats:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM[ta] YYYY",LLL:"D. MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, D. MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"D. MMM YYYY",lll:"D. MMM YYYY, [klo] HH.mm",llll:"ddd, D. MMM YYYY, [klo] HH.mm"}};return s.default.locale(e,null,!0),e})});var Nn=S((at,ut)=>{(function(n,t){typeof at=="object"&&typeof ut<"u"?ut.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_fr=t(n.dayjs)})(at,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"fr",weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),months:"janvier_f\xE9vrier_mars_avril_mai_juin_juillet_ao\xFBt_septembre_octobre_novembre_d\xE9cembre".split("_"),monthsShort:"janv._f\xE9vr._mars_avr._mai_juin_juil._ao\xFBt_sept._oct._nov._d\xE9c.".split("_"),weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},ordinal:function(e){return""+e+(e===1?"er":"")}};return s.default.locale(i,null,!0),i})});var En=S((ot,dt)=>{(function(n,t){typeof ot=="object"&&typeof dt<"u"?dt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_hi=t(n.dayjs)})(ot,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"hi",weekdays:"\u0930\u0935\u093F\u0935\u093E\u0930_\u0938\u094B\u092E\u0935\u093E\u0930_\u092E\u0902\u0917\u0932\u0935\u093E\u0930_\u092C\u0941\u0927\u0935\u093E\u0930_\u0917\u0941\u0930\u0942\u0935\u093E\u0930_\u0936\u0941\u0915\u094D\u0930\u0935\u093E\u0930_\u0936\u0928\u093F\u0935\u093E\u0930".split("_"),months:"\u091C\u0928\u0935\u0930\u0940_\u092B\u093C\u0930\u0935\u0930\u0940_\u092E\u093E\u0930\u094D\u091A_\u0905\u092A\u094D\u0930\u0948\u0932_\u092E\u0908_\u091C\u0942\u0928_\u091C\u0941\u0932\u093E\u0908_\u0905\u0917\u0938\u094D\u0924_\u0938\u093F\u0924\u092E\u094D\u092C\u0930_\u0905\u0915\u094D\u091F\u0942\u092C\u0930_\u0928\u0935\u092E\u094D\u092C\u0930_\u0926\u093F\u0938\u092E\u094D\u092C\u0930".split("_"),weekdaysShort:"\u0930\u0935\u093F_\u0938\u094B\u092E_\u092E\u0902\u0917\u0932_\u092C\u0941\u0927_\u0917\u0941\u0930\u0942_\u0936\u0941\u0915\u094D\u0930_\u0936\u0928\u093F".split("_"),monthsShort:"\u091C\u0928._\u092B\u093C\u0930._\u092E\u093E\u0930\u094D\u091A_\u0905\u092A\u094D\u0930\u0948._\u092E\u0908_\u091C\u0942\u0928_\u091C\u0941\u0932._\u0905\u0917._\u0938\u093F\u0924._\u0905\u0915\u094D\u091F\u0942._\u0928\u0935._\u0926\u093F\u0938.".split("_"),weekdaysMin:"\u0930_\u0938\u094B_\u092E\u0902_\u092C\u0941_\u0917\u0941_\u0936\u0941_\u0936".split("_"),ordinal:function(e){return e},formats:{LT:"A h:mm \u092C\u091C\u0947",LTS:"A h:mm:ss \u092C\u091C\u0947",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u092C\u091C\u0947",LLLL:"dddd, D MMMM YYYY, A h:mm \u092C\u091C\u0947"},relativeTime:{future:"%s \u092E\u0947\u0902",past:"%s \u092A\u0939\u0932\u0947",s:"\u0915\u0941\u091B \u0939\u0940 \u0915\u094D\u0937\u0923",m:"\u090F\u0915 \u092E\u093F\u0928\u091F",mm:"%d \u092E\u093F\u0928\u091F",h:"\u090F\u0915 \u0918\u0902\u091F\u093E",hh:"%d \u0918\u0902\u091F\u0947",d:"\u090F\u0915 \u0926\u093F\u0928",dd:"%d \u0926\u093F\u0928",M:"\u090F\u0915 \u092E\u0939\u0940\u0928\u0947",MM:"%d \u092E\u0939\u0940\u0928\u0947",y:"\u090F\u0915 \u0935\u0930\u094D\u0937",yy:"%d \u0935\u0930\u094D\u0937"}};return s.default.locale(i,null,!0),i})});var Fn=S((_t,ft)=>{(function(n,t){typeof _t=="object"&&typeof ft<"u"?ft.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_hu=t(n.dayjs)})(_t,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"hu",weekdays:"vas\xE1rnap_h\xE9tf\u0151_kedd_szerda_cs\xFCt\xF6rt\xF6k_p\xE9ntek_szombat".split("_"),weekdaysShort:"vas_h\xE9t_kedd_sze_cs\xFCt_p\xE9n_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),months:"janu\xE1r_febru\xE1r_m\xE1rcius_\xE1prilis_m\xE1jus_j\xFAnius_j\xFAlius_augusztus_szeptember_okt\xF3ber_november_december".split("_"),monthsShort:"jan_feb_m\xE1rc_\xE1pr_m\xE1j_j\xFAn_j\xFAl_aug_szept_okt_nov_dec".split("_"),ordinal:function(e){return e+"."},weekStart:1,relativeTime:{future:"%s m\xFAlva",past:"%s",s:function(e,r,u,a){return"n\xE9h\xE1ny m\xE1sodperc"+(a||r?"":"e")},m:function(e,r,u,a){return"egy perc"+(a||r?"":"e")},mm:function(e,r,u,a){return e+" perc"+(a||r?"":"e")},h:function(e,r,u,a){return"egy "+(a||r?"\xF3ra":"\xF3r\xE1ja")},hh:function(e,r,u,a){return e+" "+(a||r?"\xF3ra":"\xF3r\xE1ja")},d:function(e,r,u,a){return"egy "+(a||r?"nap":"napja")},dd:function(e,r,u,a){return e+" "+(a||r?"nap":"napja")},M:function(e,r,u,a){return"egy "+(a||r?"h\xF3nap":"h\xF3napja")},MM:function(e,r,u,a){return e+" "+(a||r?"h\xF3nap":"h\xF3napja")},y:function(e,r,u,a){return"egy "+(a||r?"\xE9v":"\xE9ve")},yy:function(e,r,u,a){return e+" "+(a||r?"\xE9v":"\xE9ve")}},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D. H:mm",LLLL:"YYYY. MMMM D., dddd H:mm"}};return s.default.locale(i,null,!0),i})});var Jn=S((lt,mt)=>{(function(n,t){typeof lt=="object"&&typeof mt<"u"?mt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_hy_am=t(n.dayjs)})(lt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"hy-am",weekdays:"\u056F\u056B\u0580\u0561\u056F\u056B_\u0565\u0580\u056F\u0578\u0582\u0577\u0561\u0562\u0569\u056B_\u0565\u0580\u0565\u0584\u0577\u0561\u0562\u0569\u056B_\u0579\u0578\u0580\u0565\u0584\u0577\u0561\u0562\u0569\u056B_\u0570\u056B\u0576\u0563\u0577\u0561\u0562\u0569\u056B_\u0578\u0582\u0580\u0562\u0561\u0569_\u0577\u0561\u0562\u0561\u0569".split("_"),months:"\u0570\u0578\u0582\u0576\u057E\u0561\u0580\u056B_\u0583\u0565\u057F\u0580\u057E\u0561\u0580\u056B_\u0574\u0561\u0580\u057F\u056B_\u0561\u057A\u0580\u056B\u056C\u056B_\u0574\u0561\u0575\u056B\u057D\u056B_\u0570\u0578\u0582\u0576\u056B\u057D\u056B_\u0570\u0578\u0582\u056C\u056B\u057D\u056B_\u0585\u0563\u0578\u057D\u057F\u0578\u057D\u056B_\u057D\u0565\u057A\u057F\u0565\u0574\u0562\u0565\u0580\u056B_\u0570\u0578\u056F\u057F\u0565\u0574\u0562\u0565\u0580\u056B_\u0576\u0578\u0575\u0565\u0574\u0562\u0565\u0580\u056B_\u0564\u0565\u056F\u057F\u0565\u0574\u0562\u0565\u0580\u056B".split("_"),weekStart:1,weekdaysShort:"\u056F\u0580\u056F_\u0565\u0580\u056F_\u0565\u0580\u0584_\u0579\u0580\u0584_\u0570\u0576\u0563_\u0578\u0582\u0580\u0562_\u0577\u0562\u0569".split("_"),monthsShort:"\u0570\u0576\u057E_\u0583\u057F\u0580_\u0574\u0580\u057F_\u0561\u057A\u0580_\u0574\u0575\u057D_\u0570\u0576\u057D_\u0570\u056C\u057D_\u0585\u0563\u057D_\u057D\u057A\u057F_\u0570\u056F\u057F_\u0576\u0574\u0562_\u0564\u056F\u057F".split("_"),weekdaysMin:"\u056F\u0580\u056F_\u0565\u0580\u056F_\u0565\u0580\u0584_\u0579\u0580\u0584_\u0570\u0576\u0563_\u0578\u0582\u0580\u0562_\u0577\u0562\u0569".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0569.",LLL:"D MMMM YYYY \u0569., HH:mm",LLLL:"dddd, D MMMM YYYY \u0569., HH:mm"},relativeTime:{future:"%s \u0570\u0565\u057F\u0578",past:"%s \u0561\u057C\u0561\u057B",s:"\u0574\u056B \u0584\u0561\u0576\u056B \u057E\u0561\u0575\u0580\u056F\u0575\u0561\u0576",m:"\u0580\u0578\u057A\u0565",mm:"%d \u0580\u0578\u057A\u0565",h:"\u056A\u0561\u0574",hh:"%d \u056A\u0561\u0574",d:"\u0585\u0580",dd:"%d \u0585\u0580",M:"\u0561\u0574\u056B\u057D",MM:"%d \u0561\u0574\u056B\u057D",y:"\u057F\u0561\u0580\u056B",yy:"%d \u057F\u0561\u0580\u056B"}};return s.default.locale(i,null,!0),i})});var Wn=S((ct,ht)=>{(function(n,t){typeof ct=="object"&&typeof ht<"u"?ht.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_id=t(n.dayjs)})(ct,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"id",weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),weekStart:1,formats:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},ordinal:function(e){return e+"."}};return s.default.locale(i,null,!0),i})});var Un=S((Mt,yt)=>{(function(n,t){typeof Mt=="object"&&typeof yt<"u"?yt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_it=t(n.dayjs)})(Mt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"it",weekdays:"domenica_luned\xEC_marted\xEC_mercoled\xEC_gioved\xEC_venerd\xEC_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),weekStart:1,monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"tra %s",past:"%s fa",s:"qualche secondo",m:"un minuto",mm:"%d minuti",h:"un' ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},ordinal:function(e){return e+"\xBA"}};return s.default.locale(i,null,!0),i})});var Pn=S((Yt,pt)=>{(function(n,t){typeof Yt=="object"&&typeof pt<"u"?pt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_ja=t(n.dayjs)})(Yt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"ja",weekdays:"\u65E5\u66DC\u65E5_\u6708\u66DC\u65E5_\u706B\u66DC\u65E5_\u6C34\u66DC\u65E5_\u6728\u66DC\u65E5_\u91D1\u66DC\u65E5_\u571F\u66DC\u65E5".split("_"),weekdaysShort:"\u65E5_\u6708_\u706B_\u6C34_\u6728_\u91D1_\u571F".split("_"),weekdaysMin:"\u65E5_\u6708_\u706B_\u6C34_\u6728_\u91D1_\u571F".split("_"),months:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),ordinal:function(e){return e+"\u65E5"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5E74M\u6708D\u65E5",LLL:"YYYY\u5E74M\u6708D\u65E5 HH:mm",LLLL:"YYYY\u5E74M\u6708D\u65E5 dddd HH:mm",l:"YYYY/MM/DD",ll:"YYYY\u5E74M\u6708D\u65E5",lll:"YYYY\u5E74M\u6708D\u65E5 HH:mm",llll:"YYYY\u5E74M\u6708D\u65E5(ddd) HH:mm"},meridiem:function(e){return e<12?"\u5348\u524D":"\u5348\u5F8C"},relativeTime:{future:"%s\u5F8C",past:"%s\u524D",s:"\u6570\u79D2",m:"1\u5206",mm:"%d\u5206",h:"1\u6642\u9593",hh:"%d\u6642\u9593",d:"1\u65E5",dd:"%d\u65E5",M:"1\u30F6\u6708",MM:"%d\u30F6\u6708",y:"1\u5E74",yy:"%d\u5E74"}};return s.default.locale(i,null,!0),i})});var Rn=S((Dt,Lt)=>{(function(n,t){typeof Dt=="object"&&typeof Lt<"u"?Lt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_ka=t(n.dayjs)})(Dt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"ka",weekdays:"\u10D9\u10D5\u10D8\u10E0\u10D0_\u10DD\u10E0\u10E8\u10D0\u10D1\u10D0\u10D7\u10D8_\u10E1\u10D0\u10DB\u10E8\u10D0\u10D1\u10D0\u10D7\u10D8_\u10DD\u10D7\u10EE\u10E8\u10D0\u10D1\u10D0\u10D7\u10D8_\u10EE\u10E3\u10D7\u10E8\u10D0\u10D1\u10D0\u10D7\u10D8_\u10DE\u10D0\u10E0\u10D0\u10E1\u10D9\u10D4\u10D5\u10D8_\u10E8\u10D0\u10D1\u10D0\u10D7\u10D8".split("_"),weekdaysShort:"\u10D9\u10D5\u10D8_\u10DD\u10E0\u10E8_\u10E1\u10D0\u10DB_\u10DD\u10D7\u10EE_\u10EE\u10E3\u10D7_\u10DE\u10D0\u10E0_\u10E8\u10D0\u10D1".split("_"),weekdaysMin:"\u10D9\u10D5_\u10DD\u10E0_\u10E1\u10D0_\u10DD\u10D7_\u10EE\u10E3_\u10DE\u10D0_\u10E8\u10D0".split("_"),months:"\u10D8\u10D0\u10DC\u10D5\u10D0\u10E0\u10D8_\u10D7\u10D4\u10D1\u10D4\u10E0\u10D5\u10D0\u10DA\u10D8_\u10DB\u10D0\u10E0\u10E2\u10D8_\u10D0\u10DE\u10E0\u10D8\u10DA\u10D8_\u10DB\u10D0\u10D8\u10E1\u10D8_\u10D8\u10D5\u10DC\u10D8\u10E1\u10D8_\u10D8\u10D5\u10DA\u10D8\u10E1\u10D8_\u10D0\u10D2\u10D5\u10D8\u10E1\u10E2\u10DD_\u10E1\u10D4\u10E5\u10E2\u10D4\u10DB\u10D1\u10D4\u10E0\u10D8_\u10DD\u10E5\u10E2\u10DD\u10DB\u10D1\u10D4\u10E0\u10D8_\u10DC\u10DD\u10D4\u10DB\u10D1\u10D4\u10E0\u10D8_\u10D3\u10D4\u10D9\u10D4\u10DB\u10D1\u10D4\u10E0\u10D8".split("_"),monthsShort:"\u10D8\u10D0\u10DC_\u10D7\u10D4\u10D1_\u10DB\u10D0\u10E0_\u10D0\u10DE\u10E0_\u10DB\u10D0\u10D8_\u10D8\u10D5\u10DC_\u10D8\u10D5\u10DA_\u10D0\u10D2\u10D5_\u10E1\u10D4\u10E5_\u10DD\u10E5\u10E2_\u10DC\u10DD\u10D4_\u10D3\u10D4\u10D9".split("_"),weekStart:1,formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},relativeTime:{future:"%s \u10E8\u10D4\u10DB\u10D3\u10D4\u10D2",past:"%s \u10EC\u10D8\u10DC",s:"\u10EC\u10D0\u10DB\u10D8",m:"\u10EC\u10E3\u10D7\u10D8",mm:"%d \u10EC\u10E3\u10D7\u10D8",h:"\u10E1\u10D0\u10D0\u10D7\u10D8",hh:"%d \u10E1\u10D0\u10D0\u10D7\u10D8\u10E1",d:"\u10D3\u10E6\u10D4\u10E1",dd:"%d \u10D3\u10E6\u10D8\u10E1 \u10D2\u10D0\u10DC\u10DB\u10D0\u10D5\u10DA\u10DD\u10D1\u10D0\u10E8\u10D8",M:"\u10D7\u10D5\u10D8\u10E1",MM:"%d \u10D7\u10D5\u10D8\u10E1",y:"\u10EC\u10D4\u10DA\u10D8",yy:"%d \u10EC\u10DA\u10D8\u10E1"},ordinal:function(e){return e}};return s.default.locale(i,null,!0),i})});var Gn=S((vt,gt)=>{(function(n,t){typeof vt=="object"&&typeof gt<"u"?gt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_km=t(n.dayjs)})(vt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"km",weekdays:"\u17A2\u17B6\u1791\u17B7\u178F\u17D2\u1799_\u1785\u17D0\u1793\u17D2\u1791_\u17A2\u1784\u17D2\u1782\u17B6\u179A_\u1796\u17BB\u1792_\u1796\u17D2\u179A\u17A0\u179F\u17D2\u1794\u178F\u17B7\u17CD_\u179F\u17BB\u1780\u17D2\u179A_\u179F\u17C5\u179A\u17CD".split("_"),months:"\u1798\u1780\u179A\u17B6_\u1780\u17BB\u1798\u17D2\u1797\u17C8_\u1798\u17B8\u1793\u17B6_\u1798\u17C1\u179F\u17B6_\u17A7\u179F\u1797\u17B6_\u1798\u17B7\u1790\u17BB\u1793\u17B6_\u1780\u1780\u17D2\u1780\u178A\u17B6_\u179F\u17B8\u17A0\u17B6_\u1780\u1789\u17D2\u1789\u17B6_\u178F\u17BB\u179B\u17B6_\u179C\u17B7\u1785\u17D2\u1786\u17B7\u1780\u17B6_\u1792\u17D2\u1793\u17BC".split("_"),weekStart:1,weekdaysShort:"\u17A2\u17B6_\u1785_\u17A2_\u1796_\u1796\u17D2\u179A_\u179F\u17BB_\u179F".split("_"),monthsShort:"\u1798\u1780\u179A\u17B6_\u1780\u17BB\u1798\u17D2\u1797\u17C8_\u1798\u17B8\u1793\u17B6_\u1798\u17C1\u179F\u17B6_\u17A7\u179F\u1797\u17B6_\u1798\u17B7\u1790\u17BB\u1793\u17B6_\u1780\u1780\u17D2\u1780\u178A\u17B6_\u179F\u17B8\u17A0\u17B6_\u1780\u1789\u17D2\u1789\u17B6_\u178F\u17BB\u179B\u17B6_\u179C\u17B7\u1785\u17D2\u1786\u17B7\u1780\u17B6_\u1792\u17D2\u1793\u17BC".split("_"),weekdaysMin:"\u17A2\u17B6_\u1785_\u17A2_\u1796_\u1796\u17D2\u179A_\u179F\u17BB_\u179F".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"%s\u1791\u17C0\u178F",past:"%s\u1798\u17BB\u1793",s:"\u1794\u17C9\u17BB\u1793\u17D2\u1798\u17B6\u1793\u179C\u17B7\u1793\u17B6\u1791\u17B8",m:"\u1798\u17BD\u1799\u1793\u17B6\u1791\u17B8",mm:"%d \u1793\u17B6\u1791\u17B8",h:"\u1798\u17BD\u1799\u1798\u17C9\u17C4\u1784",hh:"%d \u1798\u17C9\u17C4\u1784",d:"\u1798\u17BD\u1799\u1790\u17D2\u1784\u17C3",dd:"%d \u1790\u17D2\u1784\u17C3",M:"\u1798\u17BD\u1799\u1781\u17C2",MM:"%d \u1781\u17C2",y:"\u1798\u17BD\u1799\u1786\u17D2\u1793\u17B6\u17C6",yy:"%d \u1786\u17D2\u1793\u17B6\u17C6"}};return s.default.locale(i,null,!0),i})});var Zn=S((St,bt)=>{(function(n,t){typeof St=="object"&&typeof bt<"u"?bt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_lt=t(n.dayjs)})(St,function(n){"use strict";function t(o){return o&&typeof o=="object"&&"default"in o?o:{default:o}}var s=t(n),i="sausio_vasario_kovo_baland\u017Eio_gegu\u017E\u0117s_bir\u017Eelio_liepos_rugpj\u016B\u010Dio_rugs\u0117jo_spalio_lapkri\u010Dio_gruod\u017Eio".split("_"),e="sausis_vasaris_kovas_balandis_gegu\u017E\u0117_bir\u017Eelis_liepa_rugpj\u016Btis_rugs\u0117jis_spalis_lapkritis_gruodis".split("_"),r=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/,u=function(o,d){return r.test(d)?i[o.month()]:e[o.month()]};u.s=e,u.f=i;var a={name:"lt",weekdays:"sekmadienis_pirmadienis_antradienis_tre\u010Diadienis_ketvirtadienis_penktadienis_\u0161e\u0161tadienis".split("_"),weekdaysShort:"sek_pir_ant_tre_ket_pen_\u0161e\u0161".split("_"),weekdaysMin:"s_p_a_t_k_pn_\u0161".split("_"),months:u,monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),ordinal:function(o){return o+"."},weekStart:1,relativeTime:{future:"u\u017E %s",past:"prie\u0161 %s",s:"kelias sekundes",m:"minut\u0119",mm:"%d minutes",h:"valand\u0105",hh:"%d valandas",d:"dien\u0105",dd:"%d dienas",M:"m\u0117nes\u012F",MM:"%d m\u0117nesius",y:"metus",yy:"%d metus"},format:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"}};return s.default.locale(a,null,!0),a})});var Vn=S((kt,Ht)=>{(function(n,t){typeof kt=="object"&&typeof Ht<"u"?Ht.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_lv=t(n.dayjs)})(kt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"lv",weekdays:"sv\u0113tdiena_pirmdiena_otrdiena_tre\u0161diena_ceturtdiena_piektdiena_sestdiena".split("_"),months:"janv\u0101ris_febru\u0101ris_marts_apr\u012Blis_maijs_j\u016Bnijs_j\u016Blijs_augusts_septembris_oktobris_novembris_decembris".split("_"),weekStart:1,weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),monthsShort:"jan_feb_mar_apr_mai_j\u016Bn_j\u016Bl_aug_sep_okt_nov_dec".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY.",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, HH:mm",LLLL:"YYYY. [gada] D. MMMM, dddd, HH:mm"},relativeTime:{future:"p\u0113c %s",past:"pirms %s",s:"da\u017E\u0101m sekund\u0113m",m:"min\u016Btes",mm:"%d min\u016Bt\u0113m",h:"stundas",hh:"%d stund\u0101m",d:"dienas",dd:"%d dien\u0101m",M:"m\u0113ne\u0161a",MM:"%d m\u0113ne\u0161iem",y:"gada",yy:"%d gadiem"}};return s.default.locale(i,null,!0),i})});var Kn=S((jt,Tt)=>{(function(n,t){typeof jt=="object"&&typeof Tt<"u"?Tt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_ms=t(n.dayjs)})(jt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"ms",weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekStart:1,formats:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH.mm",LLLL:"dddd, D MMMM YYYY HH.mm"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},ordinal:function(e){return e+"."}};return s.default.locale(i,null,!0),i})});var Xn=S((wt,$t)=>{(function(n,t){typeof wt=="object"&&typeof $t<"u"?$t.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_my=t(n.dayjs)})(wt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"my",weekdays:"\u1010\u1014\u1004\u103A\u1039\u1002\u1014\u103D\u1031_\u1010\u1014\u1004\u103A\u1039\u101C\u102C_\u1021\u1004\u103A\u1039\u1002\u102B_\u1017\u102F\u1012\u1039\u1013\u101F\u1030\u1038_\u1000\u103C\u102C\u101E\u1015\u1010\u1031\u1038_\u101E\u1031\u102C\u1000\u103C\u102C_\u1005\u1014\u1031".split("_"),months:"\u1007\u1014\u103A\u1014\u101D\u102B\u101B\u102E_\u1016\u1031\u1016\u1031\u102C\u103A\u101D\u102B\u101B\u102E_\u1019\u1010\u103A_\u1027\u1015\u103C\u102E_\u1019\u1031_\u1007\u103D\u1014\u103A_\u1007\u1030\u101C\u102D\u102F\u1004\u103A_\u101E\u103C\u1002\u102F\u1010\u103A_\u1005\u1000\u103A\u1010\u1004\u103A\u1018\u102C_\u1021\u1031\u102C\u1000\u103A\u1010\u102D\u102F\u1018\u102C_\u1014\u102D\u102F\u101D\u1004\u103A\u1018\u102C_\u1012\u102E\u1007\u1004\u103A\u1018\u102C".split("_"),weekStart:1,weekdaysShort:"\u1014\u103D\u1031_\u101C\u102C_\u1002\u102B_\u101F\u1030\u1038_\u1000\u103C\u102C_\u101E\u1031\u102C_\u1014\u1031".split("_"),monthsShort:"\u1007\u1014\u103A_\u1016\u1031_\u1019\u1010\u103A_\u1015\u103C\u102E_\u1019\u1031_\u1007\u103D\u1014\u103A_\u101C\u102D\u102F\u1004\u103A_\u101E\u103C_\u1005\u1000\u103A_\u1021\u1031\u102C\u1000\u103A_\u1014\u102D\u102F_\u1012\u102E".split("_"),weekdaysMin:"\u1014\u103D\u1031_\u101C\u102C_\u1002\u102B_\u101F\u1030\u1038_\u1000\u103C\u102C_\u101E\u1031\u102C_\u1014\u1031".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"\u101C\u102C\u1019\u100A\u103A\u1037 %s \u1019\u103E\u102C",past:"\u101C\u103D\u1014\u103A\u1001\u1032\u1037\u101E\u1031\u102C %s \u1000",s:"\u1005\u1000\u1039\u1000\u1014\u103A.\u1021\u1014\u100A\u103A\u1038\u1004\u101A\u103A",m:"\u1010\u1005\u103A\u1019\u102D\u1014\u1005\u103A",mm:"%d \u1019\u102D\u1014\u1005\u103A",h:"\u1010\u1005\u103A\u1014\u102C\u101B\u102E",hh:"%d \u1014\u102C\u101B\u102E",d:"\u1010\u1005\u103A\u101B\u1000\u103A",dd:"%d \u101B\u1000\u103A",M:"\u1010\u1005\u103A\u101C",MM:"%d \u101C",y:"\u1010\u1005\u103A\u1014\u103E\u1005\u103A",yy:"%d \u1014\u103E\u1005\u103A"}};return s.default.locale(i,null,!0),i})});var Bn=S((Ct,Ot)=>{(function(n,t){typeof Ct=="object"&&typeof Ot<"u"?Ot.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_nl=t(n.dayjs)})(Ct,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"nl",weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),ordinal:function(e){return"["+e+(e===1||e===8||e>=20?"ste":"de")+"]"},weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",m:"een minuut",mm:"%d minuten",h:"een uur",hh:"%d uur",d:"een dag",dd:"%d dagen",M:"een maand",MM:"%d maanden",y:"een jaar",yy:"%d jaar"}};return s.default.locale(i,null,!0),i})});var Qn=S((zt,At)=>{(function(n,t){typeof zt=="object"&&typeof At<"u"?At.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_nb=t(n.dayjs)})(zt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"nb",weekdays:"s\xF8ndag_mandag_tirsdag_onsdag_torsdag_fredag_l\xF8rdag".split("_"),weekdaysShort:"s\xF8._ma._ti._on._to._fr._l\xF8.".split("_"),weekdaysMin:"s\xF8_ma_ti_on_to_fr_l\xF8".split("_"),months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.".split("_"),ordinal:function(e){return e+"."},weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] HH:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},relativeTime:{future:"om %s",past:"%s siden",s:"noen sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",M:"en m\xE5ned",MM:"%d m\xE5neder",y:"ett \xE5r",yy:"%d \xE5r"}};return s.default.locale(i,null,!0),i})});var ei=S((It,qt)=>{(function(n,t){typeof It=="object"&&typeof qt<"u"?qt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_pl=t(n.dayjs)})(It,function(n){"use strict";function t(f){return f&&typeof f=="object"&&"default"in f?f:{default:f}}var s=t(n);function i(f){return f%10<5&&f%10>1&&~~(f/10)%10!=1}function e(f,y,l){var _=f+" ";switch(l){case"m":return y?"minuta":"minut\u0119";case"mm":return _+(i(f)?"minuty":"minut");case"h":return y?"godzina":"godzin\u0119";case"hh":return _+(i(f)?"godziny":"godzin");case"MM":return _+(i(f)?"miesi\u0105ce":"miesi\u0119cy");case"yy":return _+(i(f)?"lata":"lat")}}var r="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_wrze\u015Bnia_pa\u017Adziernika_listopada_grudnia".split("_"),u="stycze\u0144_luty_marzec_kwiecie\u0144_maj_czerwiec_lipiec_sierpie\u0144_wrzesie\u0144_pa\u017Adziernik_listopad_grudzie\u0144".split("_"),a=/D MMMM/,o=function(f,y){return a.test(y)?r[f.month()]:u[f.month()]};o.s=u,o.f=r;var d={name:"pl",weekdays:"niedziela_poniedzia\u0142ek_wtorek_\u015Broda_czwartek_pi\u0105tek_sobota".split("_"),weekdaysShort:"ndz_pon_wt_\u015Br_czw_pt_sob".split("_"),weekdaysMin:"Nd_Pn_Wt_\u015Ar_Cz_Pt_So".split("_"),months:o,monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_pa\u017A_lis_gru".split("_"),ordinal:function(f){return f+"."},weekStart:1,yearStart:4,relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",m:e,mm:e,h:e,hh:e,d:"1 dzie\u0144",dd:"%d dni",M:"miesi\u0105c",MM:e,y:"rok",yy:e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"}};return s.default.locale(d,null,!0),d})});var ti=S((xt,Nt)=>{(function(n,t){typeof xt=="object"&&typeof Nt<"u"?Nt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_pt_br=t(n.dayjs)})(xt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"pt-br",weekdays:"domingo_segunda-feira_ter\xE7a-feira_quarta-feira_quinta-feira_sexta-feira_s\xE1bado".split("_"),weekdaysShort:"dom_seg_ter_qua_qui_sex_s\xE1b".split("_"),weekdaysMin:"Do_2\xAA_3\xAA_4\xAA_5\xAA_6\xAA_S\xE1".split("_"),months:"janeiro_fevereiro_mar\xE7o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),ordinal:function(e){return e+"\xBA"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [\xE0s] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [\xE0s] HH:mm"},relativeTime:{future:"em %s",past:"h\xE1 %s",s:"poucos segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um m\xEAs",MM:"%d meses",y:"um ano",yy:"%d anos"}};return s.default.locale(i,null,!0),i})});var ni=S((Et,Ft)=>{(function(n,t){typeof Et=="object"&&typeof Ft<"u"?Ft.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_pt=t(n.dayjs)})(Et,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"pt",weekdays:"domingo_segunda-feira_ter\xE7a-feira_quarta-feira_quinta-feira_sexta-feira_s\xE1bado".split("_"),weekdaysShort:"dom_seg_ter_qua_qui_sex_sab".split("_"),weekdaysMin:"Do_2\xAA_3\xAA_4\xAA_5\xAA_6\xAA_Sa".split("_"),months:"janeiro_fevereiro_mar\xE7o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),ordinal:function(e){return e+"\xBA"},weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [\xE0s] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [\xE0s] HH:mm"},relativeTime:{future:"em %s",past:"h\xE1 %s",s:"alguns segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um m\xEAs",MM:"%d meses",y:"um ano",yy:"%d anos"}};return s.default.locale(i,null,!0),i})});var ii=S((Jt,Wt)=>{(function(n,t){typeof Jt=="object"&&typeof Wt<"u"?Wt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_ro=t(n.dayjs)})(Jt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"ro",weekdays:"Duminic\u0103_Luni_Mar\u021Bi_Miercuri_Joi_Vineri_S\xE2mb\u0103t\u0103".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_S\xE2m".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_S\xE2".split("_"),months:"Ianuarie_Februarie_Martie_Aprilie_Mai_Iunie_Iulie_August_Septembrie_Octombrie_Noiembrie_Decembrie".split("_"),monthsShort:"Ian._Febr._Mart._Apr._Mai_Iun._Iul._Aug._Sept._Oct._Nov._Dec.".split("_"),weekStart:1,formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},relativeTime:{future:"peste %s",past:"acum %s",s:"c\xE2teva secunde",m:"un minut",mm:"%d minute",h:"o or\u0103",hh:"%d ore",d:"o zi",dd:"%d zile",M:"o lun\u0103",MM:"%d luni",y:"un an",yy:"%d ani"},ordinal:function(e){return e}};return s.default.locale(i,null,!0),i})});var si=S((Ut,Pt)=>{(function(n,t){typeof Ut=="object"&&typeof Pt<"u"?Pt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_ru=t(n.dayjs)})(Ut,function(n){"use strict";function t(l){return l&&typeof l=="object"&&"default"in l?l:{default:l}}var s=t(n),i="\u044F\u043D\u0432\u0430\u0440\u044F_\u0444\u0435\u0432\u0440\u0430\u043B\u044F_\u043C\u0430\u0440\u0442\u0430_\u0430\u043F\u0440\u0435\u043B\u044F_\u043C\u0430\u044F_\u0438\u044E\u043D\u044F_\u0438\u044E\u043B\u044F_\u0430\u0432\u0433\u0443\u0441\u0442\u0430_\u0441\u0435\u043D\u0442\u044F\u0431\u0440\u044F_\u043E\u043A\u0442\u044F\u0431\u0440\u044F_\u043D\u043E\u044F\u0431\u0440\u044F_\u0434\u0435\u043A\u0430\u0431\u0440\u044F".split("_"),e="\u044F\u043D\u0432\u0430\u0440\u044C_\u0444\u0435\u0432\u0440\u0430\u043B\u044C_\u043C\u0430\u0440\u0442_\u0430\u043F\u0440\u0435\u043B\u044C_\u043C\u0430\u0439_\u0438\u044E\u043D\u044C_\u0438\u044E\u043B\u044C_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043D\u0442\u044F\u0431\u0440\u044C_\u043E\u043A\u0442\u044F\u0431\u0440\u044C_\u043D\u043E\u044F\u0431\u0440\u044C_\u0434\u0435\u043A\u0430\u0431\u0440\u044C".split("_"),r="\u044F\u043D\u0432._\u0444\u0435\u0432\u0440._\u043C\u0430\u0440._\u0430\u043F\u0440._\u043C\u0430\u044F_\u0438\u044E\u043D\u044F_\u0438\u044E\u043B\u044F_\u0430\u0432\u0433._\u0441\u0435\u043D\u0442._\u043E\u043A\u0442._\u043D\u043E\u044F\u0431._\u0434\u0435\u043A.".split("_"),u="\u044F\u043D\u0432._\u0444\u0435\u0432\u0440._\u043C\u0430\u0440\u0442_\u0430\u043F\u0440._\u043C\u0430\u0439_\u0438\u044E\u043D\u044C_\u0438\u044E\u043B\u044C_\u0430\u0432\u0433._\u0441\u0435\u043D\u0442._\u043E\u043A\u0442._\u043D\u043E\u044F\u0431._\u0434\u0435\u043A.".split("_"),a=/D[oD]?(\[[^[\]]*\]|\s)+MMMM?/;function o(l,_,h){var D,p;return h==="m"?_?"\u043C\u0438\u043D\u0443\u0442\u0430":"\u043C\u0438\u043D\u0443\u0442\u0443":l+" "+(D=+l,p={mm:_?"\u043C\u0438\u043D\u0443\u0442\u0430_\u043C\u0438\u043D\u0443\u0442\u044B_\u043C\u0438\u043D\u0443\u0442":"\u043C\u0438\u043D\u0443\u0442\u0443_\u043C\u0438\u043D\u0443\u0442\u044B_\u043C\u0438\u043D\u0443\u0442",hh:"\u0447\u0430\u0441_\u0447\u0430\u0441\u0430_\u0447\u0430\u0441\u043E\u0432",dd:"\u0434\u0435\u043D\u044C_\u0434\u043D\u044F_\u0434\u043D\u0435\u0439",MM:"\u043C\u0435\u0441\u044F\u0446_\u043C\u0435\u0441\u044F\u0446\u0430_\u043C\u0435\u0441\u044F\u0446\u0435\u0432",yy:"\u0433\u043E\u0434_\u0433\u043E\u0434\u0430_\u043B\u0435\u0442"}[h].split("_"),D%10==1&&D%100!=11?p[0]:D%10>=2&&D%10<=4&&(D%100<10||D%100>=20)?p[1]:p[2])}var d=function(l,_){return a.test(_)?i[l.month()]:e[l.month()]};d.s=e,d.f=i;var f=function(l,_){return a.test(_)?r[l.month()]:u[l.month()]};f.s=u,f.f=r;var y={name:"ru",weekdays:"\u0432\u043E\u0441\u043A\u0440\u0435\u0441\u0435\u043D\u044C\u0435_\u043F\u043E\u043D\u0435\u0434\u0435\u043B\u044C\u043D\u0438\u043A_\u0432\u0442\u043E\u0440\u043D\u0438\u043A_\u0441\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0435\u0440\u0433_\u043F\u044F\u0442\u043D\u0438\u0446\u0430_\u0441\u0443\u0431\u0431\u043E\u0442\u0430".split("_"),weekdaysShort:"\u0432\u0441\u043A_\u043F\u043D\u0434_\u0432\u0442\u0440_\u0441\u0440\u0434_\u0447\u0442\u0432_\u043F\u0442\u043D_\u0441\u0431\u0442".split("_"),weekdaysMin:"\u0432\u0441_\u043F\u043D_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043F\u0442_\u0441\u0431".split("_"),months:d,monthsShort:f,weekStart:1,yearStart:4,formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0433.",LLL:"D MMMM YYYY \u0433., H:mm",LLLL:"dddd, D MMMM YYYY \u0433., H:mm"},relativeTime:{future:"\u0447\u0435\u0440\u0435\u0437 %s",past:"%s \u043D\u0430\u0437\u0430\u0434",s:"\u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0441\u0435\u043A\u0443\u043D\u0434",m:o,mm:o,h:"\u0447\u0430\u0441",hh:o,d:"\u0434\u0435\u043D\u044C",dd:o,M:"\u043C\u0435\u0441\u044F\u0446",MM:o,y:"\u0433\u043E\u0434",yy:o},ordinal:function(l){return l},meridiem:function(l){return l<4?"\u043D\u043E\u0447\u0438":l<12?"\u0443\u0442\u0440\u0430":l<17?"\u0434\u043D\u044F":"\u0432\u0435\u0447\u0435\u0440\u0430"}};return s.default.locale(y,null,!0),y})});var ri=S((Rt,Gt)=>{(function(n,t){typeof Rt=="object"&&typeof Gt<"u"?Gt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_sv=t(n.dayjs)})(Rt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"sv",weekdays:"s\xF6ndag_m\xE5ndag_tisdag_onsdag_torsdag_fredag_l\xF6rdag".split("_"),weekdaysShort:"s\xF6n_m\xE5n_tis_ons_tor_fre_l\xF6r".split("_"),weekdaysMin:"s\xF6_m\xE5_ti_on_to_fr_l\xF6".split("_"),months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekStart:1,yearStart:4,ordinal:function(e){var r=e%10;return"["+e+(r===1||r===2?"a":"e")+"]"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},relativeTime:{future:"om %s",past:"f\xF6r %s sedan",s:"n\xE5gra sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en m\xE5nad",MM:"%d m\xE5nader",y:"ett \xE5r",yy:"%d \xE5r"}};return s.default.locale(i,null,!0),i})});var ai=S((Zt,Vt)=>{(function(n,t){typeof Zt=="object"&&typeof Vt<"u"?Vt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_th=t(n.dayjs)})(Zt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"th",weekdays:"\u0E2D\u0E32\u0E17\u0E34\u0E15\u0E22\u0E4C_\u0E08\u0E31\u0E19\u0E17\u0E23\u0E4C_\u0E2D\u0E31\u0E07\u0E04\u0E32\u0E23_\u0E1E\u0E38\u0E18_\u0E1E\u0E24\u0E2B\u0E31\u0E2A\u0E1A\u0E14\u0E35_\u0E28\u0E38\u0E01\u0E23\u0E4C_\u0E40\u0E2A\u0E32\u0E23\u0E4C".split("_"),weekdaysShort:"\u0E2D\u0E32\u0E17\u0E34\u0E15\u0E22\u0E4C_\u0E08\u0E31\u0E19\u0E17\u0E23\u0E4C_\u0E2D\u0E31\u0E07\u0E04\u0E32\u0E23_\u0E1E\u0E38\u0E18_\u0E1E\u0E24\u0E2B\u0E31\u0E2A_\u0E28\u0E38\u0E01\u0E23\u0E4C_\u0E40\u0E2A\u0E32\u0E23\u0E4C".split("_"),weekdaysMin:"\u0E2D\u0E32._\u0E08._\u0E2D._\u0E1E._\u0E1E\u0E24._\u0E28._\u0E2A.".split("_"),months:"\u0E21\u0E01\u0E23\u0E32\u0E04\u0E21_\u0E01\u0E38\u0E21\u0E20\u0E32\u0E1E\u0E31\u0E19\u0E18\u0E4C_\u0E21\u0E35\u0E19\u0E32\u0E04\u0E21_\u0E40\u0E21\u0E29\u0E32\u0E22\u0E19_\u0E1E\u0E24\u0E29\u0E20\u0E32\u0E04\u0E21_\u0E21\u0E34\u0E16\u0E38\u0E19\u0E32\u0E22\u0E19_\u0E01\u0E23\u0E01\u0E0E\u0E32\u0E04\u0E21_\u0E2A\u0E34\u0E07\u0E2B\u0E32\u0E04\u0E21_\u0E01\u0E31\u0E19\u0E22\u0E32\u0E22\u0E19_\u0E15\u0E38\u0E25\u0E32\u0E04\u0E21_\u0E1E\u0E24\u0E28\u0E08\u0E34\u0E01\u0E32\u0E22\u0E19_\u0E18\u0E31\u0E19\u0E27\u0E32\u0E04\u0E21".split("_"),monthsShort:"\u0E21.\u0E04._\u0E01.\u0E1E._\u0E21\u0E35.\u0E04._\u0E40\u0E21.\u0E22._\u0E1E.\u0E04._\u0E21\u0E34.\u0E22._\u0E01.\u0E04._\u0E2A.\u0E04._\u0E01.\u0E22._\u0E15.\u0E04._\u0E1E.\u0E22._\u0E18.\u0E04.".split("_"),formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY \u0E40\u0E27\u0E25\u0E32 H:mm",LLLL:"\u0E27\u0E31\u0E19dddd\u0E17\u0E35\u0E48 D MMMM YYYY \u0E40\u0E27\u0E25\u0E32 H:mm"},relativeTime:{future:"\u0E2D\u0E35\u0E01 %s",past:"%s\u0E17\u0E35\u0E48\u0E41\u0E25\u0E49\u0E27",s:"\u0E44\u0E21\u0E48\u0E01\u0E35\u0E48\u0E27\u0E34\u0E19\u0E32\u0E17\u0E35",m:"1 \u0E19\u0E32\u0E17\u0E35",mm:"%d \u0E19\u0E32\u0E17\u0E35",h:"1 \u0E0A\u0E31\u0E48\u0E27\u0E42\u0E21\u0E07",hh:"%d \u0E0A\u0E31\u0E48\u0E27\u0E42\u0E21\u0E07",d:"1 \u0E27\u0E31\u0E19",dd:"%d \u0E27\u0E31\u0E19",M:"1 \u0E40\u0E14\u0E37\u0E2D\u0E19",MM:"%d \u0E40\u0E14\u0E37\u0E2D\u0E19",y:"1 \u0E1B\u0E35",yy:"%d \u0E1B\u0E35"},ordinal:function(e){return e+"."}};return s.default.locale(i,null,!0),i})});var ui=S((Kt,Xt)=>{(function(n,t){typeof Kt=="object"&&typeof Xt<"u"?Xt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_tr=t(n.dayjs)})(Kt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"tr",weekdays:"Pazar_Pazartesi_Sal\u0131_\xC7ar\u015Famba_Per\u015Fembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pts_Sal_\xC7ar_Per_Cum_Cts".split("_"),weekdaysMin:"Pz_Pt_Sa_\xC7a_Pe_Cu_Ct".split("_"),months:"Ocak_\u015Eubat_Mart_Nisan_May\u0131s_Haziran_Temmuz_A\u011Fustos_Eyl\xFCl_Ekim_Kas\u0131m_Aral\u0131k".split("_"),monthsShort:"Oca_\u015Eub_Mar_Nis_May_Haz_Tem_A\u011Fu_Eyl_Eki_Kas_Ara".split("_"),weekStart:1,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"%s sonra",past:"%s \xF6nce",s:"birka\xE7 saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir g\xFCn",dd:"%d g\xFCn",M:"bir ay",MM:"%d ay",y:"bir y\u0131l",yy:"%d y\u0131l"},ordinal:function(e){return e+"."}};return s.default.locale(i,null,!0),i})});var oi=S((Bt,Qt)=>{(function(n,t){typeof Bt=="object"&&typeof Qt<"u"?Qt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_uk=t(n.dayjs)})(Bt,function(n){"use strict";function t(d){return d&&typeof d=="object"&&"default"in d?d:{default:d}}var s=t(n),i="\u0441\u0456\u0447\u043D\u044F_\u043B\u044E\u0442\u043E\u0433\u043E_\u0431\u0435\u0440\u0435\u0437\u043D\u044F_\u043A\u0432\u0456\u0442\u043D\u044F_\u0442\u0440\u0430\u0432\u043D\u044F_\u0447\u0435\u0440\u0432\u043D\u044F_\u043B\u0438\u043F\u043D\u044F_\u0441\u0435\u0440\u043F\u043D\u044F_\u0432\u0435\u0440\u0435\u0441\u043D\u044F_\u0436\u043E\u0432\u0442\u043D\u044F_\u043B\u0438\u0441\u0442\u043E\u043F\u0430\u0434\u0430_\u0433\u0440\u0443\u0434\u043D\u044F".split("_"),e="\u0441\u0456\u0447\u0435\u043D\u044C_\u043B\u044E\u0442\u0438\u0439_\u0431\u0435\u0440\u0435\u0437\u0435\u043D\u044C_\u043A\u0432\u0456\u0442\u0435\u043D\u044C_\u0442\u0440\u0430\u0432\u0435\u043D\u044C_\u0447\u0435\u0440\u0432\u0435\u043D\u044C_\u043B\u0438\u043F\u0435\u043D\u044C_\u0441\u0435\u0440\u043F\u0435\u043D\u044C_\u0432\u0435\u0440\u0435\u0441\u0435\u043D\u044C_\u0436\u043E\u0432\u0442\u0435\u043D\u044C_\u043B\u0438\u0441\u0442\u043E\u043F\u0430\u0434_\u0433\u0440\u0443\u0434\u0435\u043D\u044C".split("_"),r=/D[oD]?(\[[^[\]]*\]|\s)+MMMM?/;function u(d,f,y){var l,_;return y==="m"?f?"\u0445\u0432\u0438\u043B\u0438\u043D\u0430":"\u0445\u0432\u0438\u043B\u0438\u043D\u0443":y==="h"?f?"\u0433\u043E\u0434\u0438\u043D\u0430":"\u0433\u043E\u0434\u0438\u043D\u0443":d+" "+(l=+d,_={ss:f?"\u0441\u0435\u043A\u0443\u043D\u0434\u0430_\u0441\u0435\u043A\u0443\u043D\u0434\u0438_\u0441\u0435\u043A\u0443\u043D\u0434":"\u0441\u0435\u043A\u0443\u043D\u0434\u0443_\u0441\u0435\u043A\u0443\u043D\u0434\u0438_\u0441\u0435\u043A\u0443\u043D\u0434",mm:f?"\u0445\u0432\u0438\u043B\u0438\u043D\u0430_\u0445\u0432\u0438\u043B\u0438\u043D\u0438_\u0445\u0432\u0438\u043B\u0438\u043D":"\u0445\u0432\u0438\u043B\u0438\u043D\u0443_\u0445\u0432\u0438\u043B\u0438\u043D\u0438_\u0445\u0432\u0438\u043B\u0438\u043D",hh:f?"\u0433\u043E\u0434\u0438\u043D\u0430_\u0433\u043E\u0434\u0438\u043D\u0438_\u0433\u043E\u0434\u0438\u043D":"\u0433\u043E\u0434\u0438\u043D\u0443_\u0433\u043E\u0434\u0438\u043D\u0438_\u0433\u043E\u0434\u0438\u043D",dd:"\u0434\u0435\u043D\u044C_\u0434\u043D\u0456_\u0434\u043D\u0456\u0432",MM:"\u043C\u0456\u0441\u044F\u0446\u044C_\u043C\u0456\u0441\u044F\u0446\u0456_\u043C\u0456\u0441\u044F\u0446\u0456\u0432",yy:"\u0440\u0456\u043A_\u0440\u043E\u043A\u0438_\u0440\u043E\u043A\u0456\u0432"}[y].split("_"),l%10==1&&l%100!=11?_[0]:l%10>=2&&l%10<=4&&(l%100<10||l%100>=20)?_[1]:_[2])}var a=function(d,f){return r.test(f)?i[d.month()]:e[d.month()]};a.s=e,a.f=i;var o={name:"uk",weekdays:"\u043D\u0435\u0434\u0456\u043B\u044F_\u043F\u043E\u043D\u0435\u0434\u0456\u043B\u043E\u043A_\u0432\u0456\u0432\u0442\u043E\u0440\u043E\u043A_\u0441\u0435\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0435\u0440_\u043F\u2019\u044F\u0442\u043D\u0438\u0446\u044F_\u0441\u0443\u0431\u043E\u0442\u0430".split("_"),weekdaysShort:"\u043D\u0434\u043B_\u043F\u043D\u0434_\u0432\u0442\u0440_\u0441\u0440\u0434_\u0447\u0442\u0432_\u043F\u0442\u043D_\u0441\u0431\u0442".split("_"),weekdaysMin:"\u043D\u0434_\u043F\u043D_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043F\u0442_\u0441\u0431".split("_"),months:a,monthsShort:"\u0441\u0456\u0447_\u043B\u044E\u0442_\u0431\u0435\u0440_\u043A\u0432\u0456\u0442_\u0442\u0440\u0430\u0432_\u0447\u0435\u0440\u0432_\u043B\u0438\u043F_\u0441\u0435\u0440\u043F_\u0432\u0435\u0440_\u0436\u043E\u0432\u0442_\u043B\u0438\u0441\u0442_\u0433\u0440\u0443\u0434".split("_"),weekStart:1,relativeTime:{future:"\u0437\u0430 %s",past:"%s \u0442\u043E\u043C\u0443",s:"\u0434\u0435\u043A\u0456\u043B\u044C\u043A\u0430 \u0441\u0435\u043A\u0443\u043D\u0434",m:u,mm:u,h:u,hh:u,d:"\u0434\u0435\u043D\u044C",dd:u,M:"\u043C\u0456\u0441\u044F\u0446\u044C",MM:u,y:"\u0440\u0456\u043A",yy:u},ordinal:function(d){return d},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0440.",LLL:"D MMMM YYYY \u0440., HH:mm",LLLL:"dddd, D MMMM YYYY \u0440., HH:mm"}};return s.default.locale(o,null,!0),o})});var di=S((en,tn)=>{(function(n,t){typeof en=="object"&&typeof tn<"u"?tn.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_vi=t(n.dayjs)})(en,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"vi",weekdays:"ch\u1EE7 nh\u1EADt_th\u1EE9 hai_th\u1EE9 ba_th\u1EE9 t\u01B0_th\u1EE9 n\u0103m_th\u1EE9 s\xE1u_th\u1EE9 b\u1EA3y".split("_"),months:"th\xE1ng 1_th\xE1ng 2_th\xE1ng 3_th\xE1ng 4_th\xE1ng 5_th\xE1ng 6_th\xE1ng 7_th\xE1ng 8_th\xE1ng 9_th\xE1ng 10_th\xE1ng 11_th\xE1ng 12".split("_"),weekStart:1,weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),monthsShort:"Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [n\u0103m] YYYY",LLL:"D MMMM [n\u0103m] YYYY HH:mm",LLLL:"dddd, D MMMM [n\u0103m] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},relativeTime:{future:"%s t\u1EDBi",past:"%s tr\u01B0\u1EDBc",s:"v\xE0i gi\xE2y",m:"m\u1ED9t ph\xFAt",mm:"%d ph\xFAt",h:"m\u1ED9t gi\u1EDD",hh:"%d gi\u1EDD",d:"m\u1ED9t ng\xE0y",dd:"%d ng\xE0y",M:"m\u1ED9t th\xE1ng",MM:"%d th\xE1ng",y:"m\u1ED9t n\u0103m",yy:"%d n\u0103m"}};return s.default.locale(i,null,!0),i})});var _i=S((nn,sn)=>{(function(n,t){typeof nn=="object"&&typeof sn<"u"?sn.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_zh_cn=t(n.dayjs)})(nn,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"zh-cn",weekdays:"\u661F\u671F\u65E5_\u661F\u671F\u4E00_\u661F\u671F\u4E8C_\u661F\u671F\u4E09_\u661F\u671F\u56DB_\u661F\u671F\u4E94_\u661F\u671F\u516D".split("_"),weekdaysShort:"\u5468\u65E5_\u5468\u4E00_\u5468\u4E8C_\u5468\u4E09_\u5468\u56DB_\u5468\u4E94_\u5468\u516D".split("_"),weekdaysMin:"\u65E5_\u4E00_\u4E8C_\u4E09_\u56DB_\u4E94_\u516D".split("_"),months:"\u4E00\u6708_\u4E8C\u6708_\u4E09\u6708_\u56DB\u6708_\u4E94\u6708_\u516D\u6708_\u4E03\u6708_\u516B\u6708_\u4E5D\u6708_\u5341\u6708_\u5341\u4E00\u6708_\u5341\u4E8C\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),ordinal:function(e,r){return r==="W"?e+"\u5468":e+"\u65E5"},weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5E74M\u6708D\u65E5",LLL:"YYYY\u5E74M\u6708D\u65E5Ah\u70B9mm\u5206",LLLL:"YYYY\u5E74M\u6708D\u65E5ddddAh\u70B9mm\u5206",l:"YYYY/M/D",ll:"YYYY\u5E74M\u6708D\u65E5",lll:"YYYY\u5E74M\u6708D\u65E5 HH:mm",llll:"YYYY\u5E74M\u6708D\u65E5dddd HH:mm"},relativeTime:{future:"%s\u5185",past:"%s\u524D",s:"\u51E0\u79D2",m:"1 \u5206\u949F",mm:"%d \u5206\u949F",h:"1 \u5C0F\u65F6",hh:"%d \u5C0F\u65F6",d:"1 \u5929",dd:"%d \u5929",M:"1 \u4E2A\u6708",MM:"%d \u4E2A\u6708",y:"1 \u5E74",yy:"%d \u5E74"},meridiem:function(e,r){var u=100*e+r;return u<600?"\u51CC\u6668":u<900?"\u65E9\u4E0A":u<1100?"\u4E0A\u5348":u<1300?"\u4E2D\u5348":u<1800?"\u4E0B\u5348":"\u665A\u4E0A"}};return s.default.locale(i,null,!0),i})});var fi=S((rn,an)=>{(function(n,t){typeof rn=="object"&&typeof an<"u"?an.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_zh_tw=t(n.dayjs)})(rn,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"zh-tw",weekdays:"\u661F\u671F\u65E5_\u661F\u671F\u4E00_\u661F\u671F\u4E8C_\u661F\u671F\u4E09_\u661F\u671F\u56DB_\u661F\u671F\u4E94_\u661F\u671F\u516D".split("_"),weekdaysShort:"\u9031\u65E5_\u9031\u4E00_\u9031\u4E8C_\u9031\u4E09_\u9031\u56DB_\u9031\u4E94_\u9031\u516D".split("_"),weekdaysMin:"\u65E5_\u4E00_\u4E8C_\u4E09_\u56DB_\u4E94_\u516D".split("_"),months:"\u4E00\u6708_\u4E8C\u6708_\u4E09\u6708_\u56DB\u6708_\u4E94\u6708_\u516D\u6708_\u4E03\u6708_\u516B\u6708_\u4E5D\u6708_\u5341\u6708_\u5341\u4E00\u6708_\u5341\u4E8C\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),ordinal:function(e,r){return r==="W"?e+"\u9031":e+"\u65E5"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5E74M\u6708D\u65E5",LLL:"YYYY\u5E74M\u6708D\u65E5 HH:mm",LLLL:"YYYY\u5E74M\u6708D\u65E5dddd HH:mm",l:"YYYY/M/D",ll:"YYYY\u5E74M\u6708D\u65E5",lll:"YYYY\u5E74M\u6708D\u65E5 HH:mm",llll:"YYYY\u5E74M\u6708D\u65E5dddd HH:mm"},relativeTime:{future:"%s\u5167",past:"%s\u524D",s:"\u5E7E\u79D2",m:"1 \u5206\u9418",mm:"%d \u5206\u9418",h:"1 \u5C0F\u6642",hh:"%d \u5C0F\u6642",d:"1 \u5929",dd:"%d \u5929",M:"1 \u500B\u6708",MM:"%d \u500B\u6708",y:"1 \u5E74",yy:"%d \u5E74"},meridiem:function(e,r){var u=100*e+r;return u<600?"\u51CC\u6668":u<900?"\u65E9\u4E0A":u<1100?"\u4E0A\u5348":u<1300?"\u4E2D\u5348":u<1800?"\u4E0B\u5348":"\u665A\u4E0A"}};return s.default.locale(i,null,!0),i})});var on=60,dn=on*60,_n=dn*24,Si=_n*7,ae=1e3,le=on*ae,pe=dn*ae,fn=_n*ae,ln=Si*ae,_e="millisecond",ne="second",ie="minute",se="hour",K="day",oe="week",R="month",me="quarter",X="year",re="date",mn="YYYY-MM-DDTHH:mm:ssZ",De="Invalid Date",cn=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,hn=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g;var yn={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(t){var s=["th","st","nd","rd"],i=t%100;return"["+t+(s[(i-20)%10]||s[i]||s[0])+"]"}};var Le=function(t,s,i){var e=String(t);return!e||e.length>=s?t:""+Array(s+1-e.length).join(i)+t},bi=function(t){var s=-t.utcOffset(),i=Math.abs(s),e=Math.floor(i/60),r=i%60;return(s<=0?"+":"-")+Le(e,2,"0")+":"+Le(r,2,"0")},ki=function n(t,s){if(t.date()1)return n(u[0])}else{var a=t.name;ue[a]=t,e=a}return!i&&e&&(fe=e),e||!i&&fe},J=function(t,s){if(ve(t))return t.clone();var i=typeof s=="object"?s:{};return i.date=t,i.args=arguments,new he(i)},wi=function(t,s){return J(t,{locale:s.$L,utc:s.$u,x:s.$x,$offset:s.$offset})},A=Yn;A.l=ce;A.i=ve;A.w=wi;var $i=function(t){var s=t.date,i=t.utc;if(s===null)return new Date(NaN);if(A.u(s))return new Date;if(s instanceof Date)return new Date(s);if(typeof s=="string"&&!/Z$/i.test(s)){var e=s.match(cn);if(e){var r=e[2]-1||0,u=(e[7]||"0").substring(0,3);return i?new Date(Date.UTC(e[1],r,e[3]||1,e[4]||0,e[5]||0,e[6]||0,u)):new Date(e[1],r,e[3]||1,e[4]||0,e[5]||0,e[6]||0,u)}}return new Date(s)},he=function(){function n(s){this.$L=ce(s.locale,null,!0),this.parse(s),this.$x=this.$x||s.x||{},this[pn]=!0}var t=n.prototype;return t.parse=function(i){this.$d=$i(i),this.init()},t.init=function(){var i=this.$d;this.$y=i.getFullYear(),this.$M=i.getMonth(),this.$D=i.getDate(),this.$W=i.getDay(),this.$H=i.getHours(),this.$m=i.getMinutes(),this.$s=i.getSeconds(),this.$ms=i.getMilliseconds()},t.$utils=function(){return A},t.isValid=function(){return this.$d.toString()!==De},t.isSame=function(i,e){var r=J(i);return this.startOf(e)<=r&&r<=this.endOf(e)},t.isAfter=function(i,e){return J(i)this.togglePanelVisibility(this.$refs.button)),this.$watch("focusedMonth",()=>{this.focusedMonth=+this.focusedMonth,this.focusedDate.month()!==this.focusedMonth&&(this.focusedDate=this.focusedDate.month(this.focusedMonth))}),this.$watch("focusedYear",()=>{if(this.focusedYear?.length>4&&(this.focusedYear=this.focusedYear.substring(0,4)),!this.focusedYear||this.focusedYear?.length!==4)return;let o=+this.focusedYear;Number.isInteger(o)||(o=O().tz(u).year(),this.focusedYear=o),this.focusedDate.year()!==o&&(this.focusedDate=this.focusedDate.year(o))}),this.$watch("focusedDate",()=>{let o=this.focusedDate.month(),d=this.focusedDate.year();this.focusedMonth!==o&&(this.focusedMonth=o),this.focusedYear!==d&&(this.focusedYear=d),this.setupDaysGrid()}),this.$watch("hour",()=>{let o=+this.hour;if(Number.isInteger(o)?o>23?this.hour=0:o<0?this.hour=23:this.hour=o:this.hour=0,this.isClearingState)return;let d=this.getSelectedDate()??this.focusedDate;this.setState(d.hour(this.hour??0))}),this.$watch("minute",()=>{let o=+this.minute;if(Number.isInteger(o)?o>59?this.minute=0:o<0?this.minute=59:this.minute=o:this.minute=0,this.isClearingState)return;let d=this.getSelectedDate()??this.focusedDate;this.setState(d.minute(this.minute??0))}),this.$watch("second",()=>{let o=+this.second;if(Number.isInteger(o)?o>59?this.second=0:o<0?this.second=59:this.second=o:this.second=0,this.isClearingState)return;let d=this.getSelectedDate()??this.focusedDate;this.setState(d.second(this.second??0))}),this.$watch("state",()=>{if(this.state===void 0)return;let o=this.getSelectedDate();if(o===null){this.clearState();return}this.getMaxDate()!==null&&o?.isAfter(this.getMaxDate())&&(o=null),this.getMinDate()!==null&&o?.isBefore(this.getMinDate())&&(o=null);let d=o?.hour()??0;this.hour!==d&&(this.hour=d);let f=o?.minute()??0;this.minute!==f&&(this.minute=f);let y=o?.second()??0;this.second!==y&&(this.second=y),this.setDisplayText()})},clearState:function(){this.isClearingState=!0,this.setState(null),this.hour=0,this.minute=0,this.second=0,this.$nextTick(()=>this.isClearingState=!1)},dateIsDisabled:function(a){return!!(this.$refs?.disabledDates&&JSON.parse(this.$refs.disabledDates.value??[]).some(o=>(o=O(o),o.isValid()?o.isSame(a,"day"):!1))||this.getMaxDate()&&a.isAfter(this.getMaxDate(),"day")||this.getMinDate()&&a.isBefore(this.getMinDate(),"day"))},dayIsDisabled:function(a){return this.focusedDate??(this.focusedDate=O().tz(u)),this.dateIsDisabled(this.focusedDate.date(a))},dayIsSelected:function(a){let o=this.getSelectedDate();return o===null?!1:(this.focusedDate??(this.focusedDate=O().tz(u)),o.date()===a&&o.month()===this.focusedDate.month()&&o.year()===this.focusedDate.year())},dayIsToday:function(a){let o=O().tz(u);return this.focusedDate??(this.focusedDate=o),o.date()===a&&o.month()===this.focusedDate.month()&&o.year()===this.focusedDate.year()},focusPreviousDay:function(){this.focusedDate??(this.focusedDate=O().tz(u)),this.focusedDate=this.focusedDate.subtract(1,"day")},focusPreviousWeek:function(){this.focusedDate??(this.focusedDate=O().tz(u)),this.focusedDate=this.focusedDate.subtract(1,"week")},focusNextDay:function(){this.focusedDate??(this.focusedDate=O().tz(u)),this.focusedDate=this.focusedDate.add(1,"day")},focusNextWeek:function(){this.focusedDate??(this.focusedDate=O().tz(u)),this.focusedDate=this.focusedDate.add(1,"week")},getDayLabels:function(){let a=O.weekdaysShort();return t===0?a:[...a.slice(t),...a.slice(0,t)]},getMaxDate:function(){let a=O(this.$refs.maxDate?.value);return a.isValid()?a:null},getMinDate:function(){let a=O(this.$refs.minDate?.value);return a.isValid()?a:null},getSelectedDate:function(){if(this.state===void 0||this.state===null)return null;let a=O(this.state);return a.isValid()?a:null},togglePanelVisibility:function(){this.isOpen()||(this.focusedDate=this.getSelectedDate()??this.getMinDate()??O().tz(u),this.setupDaysGrid()),this.$refs.panel.toggle(this.$refs.button)},selectDate:function(a=null){a&&this.setFocusedDay(a),this.focusedDate??(this.focusedDate=O().tz(u)),this.setState(this.focusedDate),e&&this.togglePanelVisibility()},setDisplayText:function(){this.displayText=this.getSelectedDate()?this.getSelectedDate().format(n):""},setMonths:function(){this.months=O.months()},setDayLabels:function(){this.dayLabels=this.getDayLabels()},setupDaysGrid:function(){this.focusedDate??(this.focusedDate=O().tz(u)),this.emptyDaysInFocusedMonth=Array.from({length:this.focusedDate.date(8-t).day()},(a,o)=>o+1),this.daysInFocusedMonth=Array.from({length:this.focusedDate.daysInMonth()},(a,o)=>o+1)},setFocusedDay:function(a){this.focusedDate=(this.focusedDate??O().tz(u)).date(a)},setState:function(a){if(a===null){this.state=null,this.setDisplayText();return}this.dateIsDisabled(a)||(this.state=a.hour(this.hour??0).minute(this.minute??0).second(this.second??0).format("YYYY-MM-DD HH:mm:ss"),this.setDisplayText())},isOpen:function(){return this.$refs.panel?.style.display==="block"}}}var li={ar:kn(),bs:Hn(),ca:jn(),ckb:Fe(),cs:wn(),cy:$n(),da:Cn(),de:On(),en:zn(),es:An(),et:In(),fa:qn(),fi:xn(),fr:Nn(),hi:En(),hu:Fn(),hy:Jn(),id:Wn(),it:Un(),ja:Pn(),ka:Rn(),km:Gn(),ku:Fe(),lt:Zn(),lv:Vn(),ms:Kn(),my:Xn(),nl:Bn(),no:Qn(),pl:ei(),pt_BR:ti(),pt_PT:ni(),ro:ii(),ru:si(),sv:ri(),th:ai(),tr:ui(),uk:oi(),vi:di(),zh_CN:_i(),zh_TW:fi()};export{Ci as default}; +var vi=Object.create;var fn=Object.defineProperty;var gi=Object.getOwnPropertyDescriptor;var Si=Object.getOwnPropertyNames;var bi=Object.getPrototypeOf,ki=Object.prototype.hasOwnProperty;var k=(n,t)=>()=>(t||n((t={exports:{}}).exports,t),t.exports);var Hi=(n,t,s,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of Si(t))!ki.call(n,e)&&e!==s&&fn(n,e,{get:()=>t[e],enumerable:!(i=gi(t,e))||i.enumerable});return n};var de=(n,t,s)=>(s=n!=null?vi(bi(n)):{},Hi(t||!n||!n.__esModule?fn(s,"default",{value:n,enumerable:!0}):s,n));var bn=k((He,je)=>{(function(n,t){typeof He=="object"&&typeof je<"u"?je.exports=t():typeof define=="function"&&define.amd?define(t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_plugin_advancedFormat=t()})(He,function(){"use strict";return function(n,t){var s=t.prototype,i=s.format;s.format=function(e){var r=this,a=this.$locale();if(!this.isValid())return i.bind(this)(e);var u=this.$utils(),o=(e||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,function(d){switch(d){case"Q":return Math.ceil((r.$M+1)/3);case"Do":return a.ordinal(r.$D);case"gggg":return r.weekYear();case"GGGG":return r.isoWeekYear();case"wo":return a.ordinal(r.week(),"W");case"w":case"ww":return u.s(r.week(),d==="w"?1:2,"0");case"W":case"WW":return u.s(r.isoWeek(),d==="W"?1:2,"0");case"k":case"kk":return u.s(String(r.$H===0?24:r.$H),d==="k"?1:2,"0");case"X":return Math.floor(r.$d.getTime()/1e3);case"x":return r.$d.getTime();case"z":return"["+r.offsetName()+"]";case"zzz":return"["+r.offsetName("long")+"]";default:return d}});return i.bind(this)(o)}}})});var kn=k((Te,we)=>{(function(n,t){typeof Te=="object"&&typeof we<"u"?we.exports=t():typeof define=="function"&&define.amd?define(t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_plugin_customParseFormat=t()})(Te,function(){"use strict";var n={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},t=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,s=/\d/,i=/\d\d/,e=/\d\d?/,r=/\d*[^-_:/,()\s\d]+/,a={},u=function(m){return(m=+m)+(m>68?1900:2e3)},o=function(m){return function(Y){this[m]=+Y}},d=[/[+-]\d\d:?(\d\d)?|Z/,function(m){(this.zone||(this.zone={})).offset=function(Y){if(!Y||Y==="Z")return 0;var L=Y.match(/([+-]|\d\d)/g),D=60*L[1]+(+L[2]||0);return D===0?0:L[0]==="+"?-D:D}(m)}],_=function(m){var Y=a[m];return Y&&(Y.indexOf?Y:Y.s.concat(Y.f))},y=function(m,Y){var L,D=a.meridiem;if(D){for(var w=1;w<=24;w+=1)if(m.indexOf(D(w,0,Y))>-1){L=w>12;break}}else L=m===(Y?"pm":"PM");return L},l={A:[r,function(m){this.afternoon=y(m,!1)}],a:[r,function(m){this.afternoon=y(m,!0)}],Q:[s,function(m){this.month=3*(m-1)+1}],S:[s,function(m){this.milliseconds=100*+m}],SS:[i,function(m){this.milliseconds=10*+m}],SSS:[/\d{3}/,function(m){this.milliseconds=+m}],s:[e,o("seconds")],ss:[e,o("seconds")],m:[e,o("minutes")],mm:[e,o("minutes")],H:[e,o("hours")],h:[e,o("hours")],HH:[e,o("hours")],hh:[e,o("hours")],D:[e,o("day")],DD:[i,o("day")],Do:[r,function(m){var Y=a.ordinal,L=m.match(/\d+/);if(this.day=L[0],Y)for(var D=1;D<=31;D+=1)Y(D).replace(/\[|\]/g,"")===m&&(this.day=D)}],w:[e,o("week")],ww:[i,o("week")],M:[e,o("month")],MM:[i,o("month")],MMM:[r,function(m){var Y=_("months"),L=(_("monthsShort")||Y.map(function(D){return D.slice(0,3)})).indexOf(m)+1;if(L<1)throw new Error;this.month=L%12||L}],MMMM:[r,function(m){var Y=_("months").indexOf(m)+1;if(Y<1)throw new Error;this.month=Y%12||Y}],Y:[/[+-]?\d+/,o("year")],YY:[i,function(m){this.year=u(m)}],YYYY:[/\d{4}/,o("year")],Z:d,ZZ:d};function f(m){var Y,L;Y=m,L=a&&a.formats;for(var D=(m=Y.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,function($,H,W){var U=W&&W.toUpperCase();return H||L[W]||n[W]||L[U].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(v,h,c){return h||c.slice(1)})})).match(t),w=D.length,g=0;g-1)return new Date((M==="X"?1e3:1)*p);var T=f(M)(p),I=T.year,N=T.month,E=T.day,P=T.hours,B=T.minutes,Q=T.seconds,re=T.milliseconds,Z=T.zone,J=T.week,G=new Date,X=E||(I||N?1:G.getDate()),ee=I||G.getFullYear(),le=0;I&&!N||(le=N>0?N-1:G.getMonth());var me,pe=P||0,De=B||0,Le=Q||0,ve=re||0;return Z?new Date(Date.UTC(ee,le,X,pe,De,Le,ve+60*Z.offset*1e3)):S?new Date(Date.UTC(ee,le,X,pe,De,Le,ve)):(me=new Date(ee,le,X,pe,De,Le,ve),J&&(me=b(me).week(J).toDate()),me)}catch{return new Date("")}}(C,x,A,L),this.init(),U&&U!==!0&&(this.$L=this.locale(U).$L),W&&C!=this.format(x)&&(this.$d=new Date("")),a={}}else if(x instanceof Array)for(var v=x.length,h=1;h<=v;h+=1){q[1]=x[h-1];var c=L.apply(this,q);if(c.isValid()){this.$d=c.$d,this.$L=c.$L,this.init();break}h===v&&(this.$d=new Date(""))}else w.call(this,g)}}})});var Hn=k(($e,Ce)=>{(function(n,t){typeof $e=="object"&&typeof Ce<"u"?Ce.exports=t():typeof define=="function"&&define.amd?define(t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_plugin_localeData=t()})($e,function(){"use strict";return function(n,t,s){var i=t.prototype,e=function(d){return d&&(d.indexOf?d:d.s)},r=function(d,_,y,l,f){var m=d.name?d:d.$locale(),Y=e(m[_]),L=e(m[y]),D=Y||L.map(function(g){return g.slice(0,l)});if(!f)return D;var w=m.weekStart;return D.map(function(g,C){return D[(C+(w||0))%7]})},a=function(){return s.Ls[s.locale()]},u=function(d,_){return d.formats[_]||function(y){return y.replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(l,f,m){return f||m.slice(1)})}(d.formats[_.toUpperCase()])},o=function(){var d=this;return{months:function(_){return _?_.format("MMMM"):r(d,"months")},monthsShort:function(_){return _?_.format("MMM"):r(d,"monthsShort","months",3)},firstDayOfWeek:function(){return d.$locale().weekStart||0},weekdays:function(_){return _?_.format("dddd"):r(d,"weekdays")},weekdaysMin:function(_){return _?_.format("dd"):r(d,"weekdaysMin","weekdays",2)},weekdaysShort:function(_){return _?_.format("ddd"):r(d,"weekdaysShort","weekdays",3)},longDateFormat:function(_){return u(d.$locale(),_)},meridiem:this.$locale().meridiem,ordinal:this.$locale().ordinal}};i.localeData=function(){return o.bind(this)()},s.localeData=function(){var d=a();return{firstDayOfWeek:function(){return d.weekStart||0},weekdays:function(){return s.weekdays()},weekdaysShort:function(){return s.weekdaysShort()},weekdaysMin:function(){return s.weekdaysMin()},months:function(){return s.months()},monthsShort:function(){return s.monthsShort()},longDateFormat:function(_){return u(d,_)},meridiem:d.meridiem,ordinal:d.ordinal}},s.months=function(){return r(a(),"months")},s.monthsShort=function(){return r(a(),"monthsShort","months",3)},s.weekdays=function(d){return r(a(),"weekdays",null,null,d)},s.weekdaysShort=function(d){return r(a(),"weekdaysShort","weekdays",3,d)},s.weekdaysMin=function(d){return r(a(),"weekdaysMin","weekdays",2,d)}}})});var jn=k((Oe,ze)=>{(function(n,t){typeof Oe=="object"&&typeof ze<"u"?ze.exports=t():typeof define=="function"&&define.amd?define(t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_plugin_timezone=t()})(Oe,function(){"use strict";var n={year:0,month:1,day:2,hour:3,minute:4,second:5},t={};return function(s,i,e){var r,a=function(_,y,l){l===void 0&&(l={});var f=new Date(_),m=function(Y,L){L===void 0&&(L={});var D=L.timeZoneName||"short",w=Y+"|"+D,g=t[w];return g||(g=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:Y,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",timeZoneName:D}),t[w]=g),g}(y,l);return m.formatToParts(f)},u=function(_,y){for(var l=a(_,y),f=[],m=0;m=0&&(f[w]=parseInt(D,10))}var g=f[3],C=g===24?0:g,A=f[0]+"-"+f[1]+"-"+f[2]+" "+C+":"+f[4]+":"+f[5]+":000",q=+_;return(e.utc(A).valueOf()-(q-=q%1e3))/6e4},o=i.prototype;o.tz=function(_,y){_===void 0&&(_=r);var l,f=this.utcOffset(),m=this.toDate(),Y=m.toLocaleString("en-US",{timeZone:_}),L=Math.round((m-new Date(Y))/1e3/60),D=15*-Math.round(m.getTimezoneOffset()/15)-L;if(!Number(D))l=this.utcOffset(0,y);else if(l=e(Y,{locale:this.$L}).$set("millisecond",this.$ms).utcOffset(D,!0),y){var w=l.utcOffset();l=l.add(f-w,"minute")}return l.$x.$timezone=_,l},o.offsetName=function(_){var y=this.$x.$timezone||e.tz.guess(),l=a(this.valueOf(),y,{timeZoneName:_}).find(function(f){return f.type.toLowerCase()==="timezonename"});return l&&l.value};var d=o.startOf;o.startOf=function(_,y){if(!this.$x||!this.$x.$timezone)return d.call(this,_,y);var l=e(this.format("YYYY-MM-DD HH:mm:ss:SSS"),{locale:this.$L});return d.call(l,_,y).tz(this.$x.$timezone,!0)},e.tz=function(_,y,l){var f=l&&y,m=l||y||r,Y=u(+e(),m);if(typeof _!="string")return e(_).tz(m);var L=function(C,A,q){var x=C-60*A*1e3,$=u(x,q);if(A===$)return[x,A];var H=u(x-=60*($-A)*1e3,q);return $===H?[x,$]:[C-60*Math.min($,H)*1e3,Math.max($,H)]}(e.utc(_,f).valueOf(),Y,m),D=L[0],w=L[1],g=e(D).utcOffset(w);return g.$x.$timezone=m,g},e.tz.guess=function(){return Intl.DateTimeFormat().resolvedOptions().timeZone},e.tz.setDefault=function(_){r=_}}})});var Tn=k((Ae,Ie)=>{(function(n,t){typeof Ae=="object"&&typeof Ie<"u"?Ie.exports=t():typeof define=="function"&&define.amd?define(t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_plugin_utc=t()})(Ae,function(){"use strict";var n="minute",t=/[+-]\d\d(?::?\d\d)?/g,s=/([+-]|\d\d)/g;return function(i,e,r){var a=e.prototype;r.utc=function(f){var m={date:f,utc:!0,args:arguments};return new e(m)},a.utc=function(f){var m=r(this.toDate(),{locale:this.$L,utc:!0});return f?m.add(this.utcOffset(),n):m},a.local=function(){return r(this.toDate(),{locale:this.$L,utc:!1})};var u=a.parse;a.parse=function(f){f.utc&&(this.$u=!0),this.$utils().u(f.$offset)||(this.$offset=f.$offset),u.call(this,f)};var o=a.init;a.init=function(){if(this.$u){var f=this.$d;this.$y=f.getUTCFullYear(),this.$M=f.getUTCMonth(),this.$D=f.getUTCDate(),this.$W=f.getUTCDay(),this.$H=f.getUTCHours(),this.$m=f.getUTCMinutes(),this.$s=f.getUTCSeconds(),this.$ms=f.getUTCMilliseconds()}else o.call(this)};var d=a.utcOffset;a.utcOffset=function(f,m){var Y=this.$utils().u;if(Y(f))return this.$u?0:Y(this.$offset)?d.call(this):this.$offset;if(typeof f=="string"&&(f=function(g){g===void 0&&(g="");var C=g.match(t);if(!C)return null;var A=(""+C[0]).match(s)||["-",0,0],q=A[0],x=60*+A[1]+ +A[2];return x===0?0:q==="+"?x:-x}(f),f===null))return this;var L=Math.abs(f)<=16?60*f:f,D=this;if(m)return D.$offset=L,D.$u=f===0,D;if(f!==0){var w=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(D=this.local().add(L+w,n)).$offset=L,D.$x.$localOffset=w}else D=this.utc();return D};var _=a.format;a.format=function(f){var m=f||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return _.call(this,m)},a.valueOf=function(){var f=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*f},a.isUTC=function(){return!!this.$u},a.toISOString=function(){return this.toDate().toISOString()},a.toString=function(){return this.toDate().toUTCString()};var y=a.toDate;a.toDate=function(f){return f==="s"&&this.$offset?r(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():y.call(this)};var l=a.diff;a.diff=function(f,m,Y){if(f&&this.$u===f.$u)return l.call(this,f,m,Y);var L=this.local(),D=r(f).local();return l.call(L,D,m,Y)}}})});var j=k((qe,xe)=>{(function(n,t){typeof qe=="object"&&typeof xe<"u"?xe.exports=t():typeof define=="function"&&define.amd?define(t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs=t()})(qe,function(){"use strict";var n=1e3,t=6e4,s=36e5,i="millisecond",e="second",r="minute",a="hour",u="day",o="week",d="month",_="quarter",y="year",l="date",f="Invalid Date",m=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,Y=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,L={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(v){var h=["th","st","nd","rd"],c=v%100;return"["+v+(h[(c-20)%10]||h[c]||h[0])+"]"}},D=function(v,h,c){var p=String(v);return!p||p.length>=h?v:""+Array(h+1-p.length).join(c)+v},w={s:D,z:function(v){var h=-v.utcOffset(),c=Math.abs(h),p=Math.floor(c/60),M=c%60;return(h<=0?"+":"-")+D(p,2,"0")+":"+D(M,2,"0")},m:function v(h,c){if(h.date()1)return v(b[0])}else{var T=h.name;C[T]=h,M=T}return!p&&M&&(g=M),M||!p&&g},$=function(v,h){if(q(v))return v.clone();var c=typeof h=="object"?h:{};return c.date=v,c.args=arguments,new W(c)},H=w;H.l=x,H.i=q,H.w=function(v,h){return $(v,{locale:h.$L,utc:h.$u,x:h.$x,$offset:h.$offset})};var W=function(){function v(c){this.$L=x(c.locale,null,!0),this.parse(c),this.$x=this.$x||c.x||{},this[A]=!0}var h=v.prototype;return h.parse=function(c){this.$d=function(p){var M=p.date,S=p.utc;if(M===null)return new Date(NaN);if(H.u(M))return new Date;if(M instanceof Date)return new Date(M);if(typeof M=="string"&&!/Z$/i.test(M)){var b=M.match(m);if(b){var T=b[2]-1||0,I=(b[7]||"0").substring(0,3);return S?new Date(Date.UTC(b[1],T,b[3]||1,b[4]||0,b[5]||0,b[6]||0,I)):new Date(b[1],T,b[3]||1,b[4]||0,b[5]||0,b[6]||0,I)}}return new Date(M)}(c),this.init()},h.init=function(){var c=this.$d;this.$y=c.getFullYear(),this.$M=c.getMonth(),this.$D=c.getDate(),this.$W=c.getDay(),this.$H=c.getHours(),this.$m=c.getMinutes(),this.$s=c.getSeconds(),this.$ms=c.getMilliseconds()},h.$utils=function(){return H},h.isValid=function(){return this.$d.toString()!==f},h.isSame=function(c,p){var M=$(c);return this.startOf(p)<=M&&M<=this.endOf(p)},h.isAfter=function(c,p){return $(c){(function(n,t){typeof Ne=="object"&&typeof Ee<"u"?Ee.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_ar=t(n.dayjs)})(Ne,function(n){"use strict";function t(u){return u&&typeof u=="object"&&"default"in u?u:{default:u}}var s=t(n),i="\u064A\u0646\u0627\u064A\u0631_\u0641\u0628\u0631\u0627\u064A\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064A\u0644_\u0645\u0627\u064A\u0648_\u064A\u0648\u0646\u064A\u0648_\u064A\u0648\u0644\u064A\u0648_\u0623\u063A\u0633\u0637\u0633_\u0633\u0628\u062A\u0645\u0628\u0631_\u0623\u0643\u062A\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062F\u064A\u0633\u0645\u0628\u0631".split("_"),e={1:"\u0661",2:"\u0662",3:"\u0663",4:"\u0664",5:"\u0665",6:"\u0666",7:"\u0667",8:"\u0668",9:"\u0669",0:"\u0660"},r={"\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u0660":"0"},a={name:"ar",weekdays:"\u0627\u0644\u0623\u062D\u062F_\u0627\u0644\u0625\u062B\u0646\u064A\u0646_\u0627\u0644\u062B\u0644\u0627\u062B\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062E\u0645\u064A\u0633_\u0627\u0644\u062C\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062A".split("_"),weekdaysShort:"\u0623\u062D\u062F_\u0625\u062B\u0646\u064A\u0646_\u062B\u0644\u0627\u062B\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062E\u0645\u064A\u0633_\u062C\u0645\u0639\u0629_\u0633\u0628\u062A".split("_"),weekdaysMin:"\u062D_\u0646_\u062B_\u0631_\u062E_\u062C_\u0633".split("_"),months:i,monthsShort:i,weekStart:6,meridiem:function(u){return u>12?"\u0645":"\u0635"},relativeTime:{future:"\u0628\u0639\u062F %s",past:"\u0645\u0646\u0630 %s",s:"\u062B\u0627\u0646\u064A\u0629 \u0648\u0627\u062D\u062F\u0629",m:"\u062F\u0642\u064A\u0642\u0629 \u0648\u0627\u062D\u062F\u0629",mm:"%d \u062F\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629 \u0648\u0627\u062D\u062F\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062A",d:"\u064A\u0648\u0645 \u0648\u0627\u062D\u062F",dd:"%d \u0623\u064A\u0627\u0645",M:"\u0634\u0647\u0631 \u0648\u0627\u062D\u062F",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0639\u0627\u0645 \u0648\u0627\u062D\u062F",yy:"%d \u0623\u0639\u0648\u0627\u0645"},preparse:function(u){return u.replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(o){return r[o]}).replace(/،/g,",")},postformat:function(u){return u.replace(/\d/g,function(o){return e[o]}).replace(/,/g,"\u060C")},ordinal:function(u){return u},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/\u200FM/\u200FYYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"}};return s.default.locale(a,null,!0),a})});var $n=k((Fe,Je)=>{(function(n,t){typeof Fe=="object"&&typeof Je<"u"?Je.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_bs=t(n.dayjs)})(Fe,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"bs",weekdays:"nedjelja_ponedjeljak_utorak_srijeda_\u010Detvrtak_petak_subota".split("_"),months:"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar".split("_"),weekStart:1,weekdaysShort:"ned._pon._uto._sri._\u010Det._pet._sub.".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010De_pe_su".split("_"),ordinal:function(e){return e},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"}};return s.default.locale(i,null,!0),i})});var Cn=k((We,Ue)=>{(function(n,t){typeof We=="object"&&typeof Ue<"u"?Ue.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_ca=t(n.dayjs)})(We,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"ca",weekdays:"Diumenge_Dilluns_Dimarts_Dimecres_Dijous_Divendres_Dissabte".split("_"),weekdaysShort:"Dg._Dl._Dt._Dc._Dj._Dv._Ds.".split("_"),weekdaysMin:"Dg_Dl_Dt_Dc_Dj_Dv_Ds".split("_"),months:"Gener_Febrer_Mar\xE7_Abril_Maig_Juny_Juliol_Agost_Setembre_Octubre_Novembre_Desembre".split("_"),monthsShort:"Gen._Febr._Mar\xE7_Abr._Maig_Juny_Jul._Ag._Set._Oct._Nov._Des.".split("_"),weekStart:1,formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",LLL:"D MMMM [de] YYYY [a les] H:mm",LLLL:"dddd D MMMM [de] YYYY [a les] H:mm",ll:"D MMM YYYY",lll:"D MMM YYYY, H:mm",llll:"ddd D MMM YYYY, H:mm"},relativeTime:{future:"d'aqu\xED %s",past:"fa %s",s:"uns segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},ordinal:function(e){return""+e+(e===1||e===3?"r":e===2?"n":e===4?"t":"\xE8")}};return s.default.locale(i,null,!0),i})});var Pe=k((Ye,On)=>{(function(n,t){typeof Ye=="object"&&typeof On<"u"?t(Ye,j()):typeof define=="function"&&define.amd?define(["exports","dayjs"],t):t((n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_ku={},n.dayjs)})(Ye,function(n,t){"use strict";function s(o){return o&&typeof o=="object"&&"default"in o?o:{default:o}}var i=s(t),e={1:"\u0661",2:"\u0662",3:"\u0663",4:"\u0664",5:"\u0665",6:"\u0666",7:"\u0667",8:"\u0668",9:"\u0669",0:"\u0660"},r={"\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u0660":"0"},a=["\u06A9\u0627\u0646\u0648\u0648\u0646\u06CC \u062F\u0648\u0648\u06D5\u0645","\u0634\u0648\u0628\u0627\u062A","\u0626\u0627\u062F\u0627\u0631","\u0646\u06CC\u0633\u0627\u0646","\u0626\u0627\u06CC\u0627\u0631","\u062D\u0648\u0632\u06D5\u06CC\u0631\u0627\u0646","\u062A\u06D5\u0645\u0645\u0648\u0648\u0632","\u0626\u0627\u0628","\u0626\u06D5\u06CC\u0644\u0648\u0648\u0644","\u062A\u0634\u0631\u06CC\u0646\u06CC \u06CC\u06D5\u06A9\u06D5\u0645","\u062A\u0634\u0631\u06CC\u0646\u06CC \u062F\u0648\u0648\u06D5\u0645","\u06A9\u0627\u0646\u0648\u0648\u0646\u06CC \u06CC\u06D5\u06A9\u06D5\u0645"],u={name:"ku",months:a,monthsShort:a,weekdays:"\u06CC\u06D5\u06A9\u0634\u06D5\u0645\u0645\u06D5_\u062F\u0648\u0648\u0634\u06D5\u0645\u0645\u06D5_\u0633\u06CE\u0634\u06D5\u0645\u0645\u06D5_\u0686\u0648\u0627\u0631\u0634\u06D5\u0645\u0645\u06D5_\u067E\u06CE\u0646\u062C\u0634\u06D5\u0645\u0645\u06D5_\u0647\u06D5\u06CC\u0646\u06CC_\u0634\u06D5\u0645\u0645\u06D5".split("_"),weekdaysShort:"\u06CC\u06D5\u06A9\u0634\u06D5\u0645_\u062F\u0648\u0648\u0634\u06D5\u0645_\u0633\u06CE\u0634\u06D5\u0645_\u0686\u0648\u0627\u0631\u0634\u06D5\u0645_\u067E\u06CE\u0646\u062C\u0634\u06D5\u0645_\u0647\u06D5\u06CC\u0646\u06CC_\u0634\u06D5\u0645\u0645\u06D5".split("_"),weekStart:6,weekdaysMin:"\u06CC_\u062F_\u0633_\u0686_\u067E_\u0647\u0640_\u0634".split("_"),preparse:function(o){return o.replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(d){return r[d]}).replace(/،/g,",")},postformat:function(o){return o.replace(/\d/g,function(d){return e[d]}).replace(/,/g,"\u060C")},ordinal:function(o){return o},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiem:function(o){return o<12?"\u067E.\u0646":"\u062F.\u0646"},relativeTime:{future:"\u0644\u06D5 %s",past:"\u0644\u06D5\u0645\u06D5\u0648\u067E\u06CE\u0634 %s",s:"\u0686\u06D5\u0646\u062F \u0686\u0631\u06A9\u06D5\u06CC\u06D5\u06A9",m:"\u06CC\u06D5\u06A9 \u062E\u0648\u0644\u06D5\u06A9",mm:"%d \u062E\u0648\u0644\u06D5\u06A9",h:"\u06CC\u06D5\u06A9 \u06A9\u0627\u062A\u0698\u0645\u06CE\u0631",hh:"%d \u06A9\u0627\u062A\u0698\u0645\u06CE\u0631",d:"\u06CC\u06D5\u06A9 \u0695\u06C6\u0698",dd:"%d \u0695\u06C6\u0698",M:"\u06CC\u06D5\u06A9 \u0645\u0627\u0646\u06AF",MM:"%d \u0645\u0627\u0646\u06AF",y:"\u06CC\u06D5\u06A9 \u0633\u0627\u06B5",yy:"%d \u0633\u0627\u06B5"}};i.default.locale(u,null,!0),n.default=u,n.englishToArabicNumbersMap=e,Object.defineProperty(n,"__esModule",{value:!0})})});var zn=k((Re,Ge)=>{(function(n,t){typeof Re=="object"&&typeof Ge<"u"?Ge.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_cs=t(n.dayjs)})(Re,function(n){"use strict";function t(a){return a&&typeof a=="object"&&"default"in a?a:{default:a}}var s=t(n);function i(a){return a>1&&a<5&&~~(a/10)!=1}function e(a,u,o,d){var _=a+" ";switch(o){case"s":return u||d?"p\xE1r sekund":"p\xE1r sekundami";case"m":return u?"minuta":d?"minutu":"minutou";case"mm":return u||d?_+(i(a)?"minuty":"minut"):_+"minutami";case"h":return u?"hodina":d?"hodinu":"hodinou";case"hh":return u||d?_+(i(a)?"hodiny":"hodin"):_+"hodinami";case"d":return u||d?"den":"dnem";case"dd":return u||d?_+(i(a)?"dny":"dn\xED"):_+"dny";case"M":return u||d?"m\u011Bs\xEDc":"m\u011Bs\xEDcem";case"MM":return u||d?_+(i(a)?"m\u011Bs\xEDce":"m\u011Bs\xEDc\u016F"):_+"m\u011Bs\xEDci";case"y":return u||d?"rok":"rokem";case"yy":return u||d?_+(i(a)?"roky":"let"):_+"lety"}}var r={name:"cs",weekdays:"ned\u011Ble_pond\u011Bl\xED_\xFAter\xFD_st\u0159eda_\u010Dtvrtek_p\xE1tek_sobota".split("_"),weekdaysShort:"ne_po_\xFAt_st_\u010Dt_p\xE1_so".split("_"),weekdaysMin:"ne_po_\xFAt_st_\u010Dt_p\xE1_so".split("_"),months:"leden_\xFAnor_b\u0159ezen_duben_kv\u011Bten_\u010Derven_\u010Dervenec_srpen_z\xE1\u0159\xED_\u0159\xEDjen_listopad_prosinec".split("_"),monthsShort:"led_\xFAno_b\u0159e_dub_kv\u011B_\u010Dvn_\u010Dvc_srp_z\xE1\u0159_\u0159\xEDj_lis_pro".split("_"),weekStart:1,yearStart:4,ordinal:function(a){return a+"."},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},relativeTime:{future:"za %s",past:"p\u0159ed %s",s:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e}};return s.default.locale(r,null,!0),r})});var An=k((Ze,Ve)=>{(function(n,t){typeof Ze=="object"&&typeof Ve<"u"?Ve.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_cy=t(n.dayjs)})(Ze,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"cy",weekdays:"Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn".split("_"),months:"Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr".split("_"),weekStart:1,weekdaysShort:"Sul_Llun_Maw_Mer_Iau_Gwe_Sad".split("_"),monthsShort:"Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag".split("_"),weekdaysMin:"Su_Ll_Ma_Me_Ia_Gw_Sa".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"mewn %s",past:"%s yn \xF4l",s:"ychydig eiliadau",m:"munud",mm:"%d munud",h:"awr",hh:"%d awr",d:"diwrnod",dd:"%d diwrnod",M:"mis",MM:"%d mis",y:"blwyddyn",yy:"%d flynedd"}};return s.default.locale(i,null,!0),i})});var In=k((Ke,Qe)=>{(function(n,t){typeof Ke=="object"&&typeof Qe<"u"?Qe.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_da=t(n.dayjs)})(Ke,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"da",weekdays:"s\xF8ndag_mandag_tirsdag_onsdag_torsdag_fredag_l\xF8rdag".split("_"),weekdaysShort:"s\xF8n._man._tirs._ons._tors._fre._l\xF8r.".split("_"),weekdaysMin:"s\xF8._ma._ti._on._to._fr._l\xF8.".split("_"),months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj_juni_juli_aug._sept._okt._nov._dec.".split("_"),weekStart:1,yearStart:4,ordinal:function(e){return e+"."},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY [kl.] HH:mm"},relativeTime:{future:"om %s",past:"%s siden",s:"f\xE5 sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en m\xE5ned",MM:"%d m\xE5neder",y:"et \xE5r",yy:"%d \xE5r"}};return s.default.locale(i,null,!0),i})});var qn=k((Xe,Be)=>{(function(n,t){typeof Xe=="object"&&typeof Be<"u"?Be.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_de=t(n.dayjs)})(Xe,function(n){"use strict";function t(a){return a&&typeof a=="object"&&"default"in a?a:{default:a}}var s=t(n),i={s:"ein paar Sekunden",m:["eine Minute","einer Minute"],mm:"%d Minuten",h:["eine Stunde","einer Stunde"],hh:"%d Stunden",d:["ein Tag","einem Tag"],dd:["%d Tage","%d Tagen"],M:["ein Monat","einem Monat"],MM:["%d Monate","%d Monaten"],y:["ein Jahr","einem Jahr"],yy:["%d Jahre","%d Jahren"]};function e(a,u,o){var d=i[o];return Array.isArray(d)&&(d=d[u?0:1]),d.replace("%d",a)}var r={name:"de",weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),months:"Januar_Februar_M\xE4rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._M\xE4rz_Apr._Mai_Juni_Juli_Aug._Sept._Okt._Nov._Dez.".split("_"),ordinal:function(a){return a+"."},weekStart:1,yearStart:4,formats:{LTS:"HH:mm:ss",LT:"HH:mm",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},relativeTime:{future:"in %s",past:"vor %s",s:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e}};return s.default.locale(r,null,!0),r})});var xn=k((et,tt)=>{(function(n,t){typeof et=="object"&&typeof tt<"u"?tt.exports=t():typeof define=="function"&&define.amd?define(t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_en=t()})(et,function(){"use strict";return{name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(n){var t=["th","st","nd","rd"],s=n%100;return"["+n+(t[(s-20)%10]||t[s]||t[0])+"]"}}})});var Nn=k((nt,it)=>{(function(n,t){typeof nt=="object"&&typeof it<"u"?it.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_es=t(n.dayjs)})(nt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"es",monthsShort:"ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),weekdays:"domingo_lunes_martes_mi\xE9rcoles_jueves_viernes_s\xE1bado".split("_"),weekdaysShort:"dom._lun._mar._mi\xE9._jue._vie._s\xE1b.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_s\xE1".split("_"),months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),weekStart:1,formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un d\xEDa",dd:"%d d\xEDas",M:"un mes",MM:"%d meses",y:"un a\xF1o",yy:"%d a\xF1os"},ordinal:function(e){return e+"\xBA"}};return s.default.locale(i,null,!0),i})});var En=k((st,rt)=>{(function(n,t){typeof st=="object"&&typeof rt<"u"?rt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_et=t(n.dayjs)})(st,function(n){"use strict";function t(r){return r&&typeof r=="object"&&"default"in r?r:{default:r}}var s=t(n);function i(r,a,u,o){var d={s:["m\xF5ne sekundi","m\xF5ni sekund","paar sekundit"],m:["\xFChe minuti","\xFCks minut"],mm:["%d minuti","%d minutit"],h:["\xFChe tunni","tund aega","\xFCks tund"],hh:["%d tunni","%d tundi"],d:["\xFChe p\xE4eva","\xFCks p\xE4ev"],M:["kuu aja","kuu aega","\xFCks kuu"],MM:["%d kuu","%d kuud"],y:["\xFChe aasta","aasta","\xFCks aasta"],yy:["%d aasta","%d aastat"]};return a?(d[u][2]?d[u][2]:d[u][1]).replace("%d",r):(o?d[u][0]:d[u][1]).replace("%d",r)}var e={name:"et",weekdays:"p\xFChap\xE4ev_esmasp\xE4ev_teisip\xE4ev_kolmap\xE4ev_neljap\xE4ev_reede_laup\xE4ev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),months:"jaanuar_veebruar_m\xE4rts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_m\xE4rts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),ordinal:function(r){return r+"."},weekStart:1,relativeTime:{future:"%s p\xE4rast",past:"%s tagasi",s:i,m:i,mm:i,h:i,hh:i,d:i,dd:"%d p\xE4eva",M:i,MM:i,y:i,yy:i},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"}};return s.default.locale(e,null,!0),e})});var Fn=k((at,ut)=>{(function(n,t){typeof at=="object"&&typeof ut<"u"?ut.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_fa=t(n.dayjs)})(at,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"fa",weekdays:"\u06CC\u06A9\u200C\u0634\u0646\u0628\u0647_\u062F\u0648\u0634\u0646\u0628\u0647_\u0633\u0647\u200C\u0634\u0646\u0628\u0647_\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647_\u067E\u0646\u062C\u200C\u0634\u0646\u0628\u0647_\u062C\u0645\u0639\u0647_\u0634\u0646\u0628\u0647".split("_"),weekdaysShort:"\u06CC\u06A9\u200C\u0634\u0646\u0628\u0647_\u062F\u0648\u0634\u0646\u0628\u0647_\u0633\u0647\u200C\u0634\u0646\u0628\u0647_\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647_\u067E\u0646\u062C\u200C\u0634\u0646\u0628\u0647_\u062C\u0645\u0639\u0647_\u0634\u0646\u0628\u0647".split("_"),weekdaysMin:"\u06CC_\u062F_\u0633_\u0686_\u067E_\u062C_\u0634".split("_"),weekStart:6,months:"\u0698\u0627\u0646\u0648\u06CC\u0647_\u0641\u0648\u0631\u06CC\u0647_\u0645\u0627\u0631\u0633_\u0622\u0648\u0631\u06CC\u0644_\u0645\u0647_\u0698\u0648\u0626\u0646_\u0698\u0648\u0626\u06CC\u0647_\u0627\u0648\u062A_\u0633\u067E\u062A\u0627\u0645\u0628\u0631_\u0627\u06A9\u062A\u0628\u0631_\u0646\u0648\u0627\u0645\u0628\u0631_\u062F\u0633\u0627\u0645\u0628\u0631".split("_"),monthsShort:"\u0698\u0627\u0646\u0648\u06CC\u0647_\u0641\u0648\u0631\u06CC\u0647_\u0645\u0627\u0631\u0633_\u0622\u0648\u0631\u06CC\u0644_\u0645\u0647_\u0698\u0648\u0626\u0646_\u0698\u0648\u0626\u06CC\u0647_\u0627\u0648\u062A_\u0633\u067E\u062A\u0627\u0645\u0628\u0631_\u0627\u06A9\u062A\u0628\u0631_\u0646\u0648\u0627\u0645\u0628\u0631_\u062F\u0633\u0627\u0645\u0628\u0631".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"\u062F\u0631 %s",past:"%s \u067E\u06CC\u0634",s:"\u0686\u0646\u062F \u062B\u0627\u0646\u06CC\u0647",m:"\u06CC\u06A9 \u062F\u0642\u06CC\u0642\u0647",mm:"%d \u062F\u0642\u06CC\u0642\u0647",h:"\u06CC\u06A9 \u0633\u0627\u0639\u062A",hh:"%d \u0633\u0627\u0639\u062A",d:"\u06CC\u06A9 \u0631\u0648\u0632",dd:"%d \u0631\u0648\u0632",M:"\u06CC\u06A9 \u0645\u0627\u0647",MM:"%d \u0645\u0627\u0647",y:"\u06CC\u06A9 \u0633\u0627\u0644",yy:"%d \u0633\u0627\u0644"}};return s.default.locale(i,null,!0),i})});var Jn=k((ot,dt)=>{(function(n,t){typeof ot=="object"&&typeof dt<"u"?dt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_fi=t(n.dayjs)})(ot,function(n){"use strict";function t(r){return r&&typeof r=="object"&&"default"in r?r:{default:r}}var s=t(n);function i(r,a,u,o){var d={s:"muutama sekunti",m:"minuutti",mm:"%d minuuttia",h:"tunti",hh:"%d tuntia",d:"p\xE4iv\xE4",dd:"%d p\xE4iv\xE4\xE4",M:"kuukausi",MM:"%d kuukautta",y:"vuosi",yy:"%d vuotta",numbers:"nolla_yksi_kaksi_kolme_nelj\xE4_viisi_kuusi_seitsem\xE4n_kahdeksan_yhdeks\xE4n".split("_")},_={s:"muutaman sekunnin",m:"minuutin",mm:"%d minuutin",h:"tunnin",hh:"%d tunnin",d:"p\xE4iv\xE4n",dd:"%d p\xE4iv\xE4n",M:"kuukauden",MM:"%d kuukauden",y:"vuoden",yy:"%d vuoden",numbers:"nollan_yhden_kahden_kolmen_nelj\xE4n_viiden_kuuden_seitsem\xE4n_kahdeksan_yhdeks\xE4n".split("_")},y=o&&!a?_:d,l=y[u];return r<10?l.replace("%d",y.numbers[r]):l.replace("%d",r)}var e={name:"fi",weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kes\xE4kuu_hein\xE4kuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kes\xE4_hein\xE4_elo_syys_loka_marras_joulu".split("_"),ordinal:function(r){return r+"."},weekStart:1,yearStart:4,relativeTime:{future:"%s p\xE4\xE4st\xE4",past:"%s sitten",s:i,m:i,mm:i,h:i,hh:i,d:i,dd:i,M:i,MM:i,y:i,yy:i},formats:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM[ta] YYYY",LLL:"D. MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, D. MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"D. MMM YYYY",lll:"D. MMM YYYY, [klo] HH.mm",llll:"ddd, D. MMM YYYY, [klo] HH.mm"}};return s.default.locale(e,null,!0),e})});var Wn=k((_t,ft)=>{(function(n,t){typeof _t=="object"&&typeof ft<"u"?ft.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_fr=t(n.dayjs)})(_t,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"fr",weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),months:"janvier_f\xE9vrier_mars_avril_mai_juin_juillet_ao\xFBt_septembre_octobre_novembre_d\xE9cembre".split("_"),monthsShort:"janv._f\xE9vr._mars_avr._mai_juin_juil._ao\xFBt_sept._oct._nov._d\xE9c.".split("_"),weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},ordinal:function(e){return""+e+(e===1?"er":"")}};return s.default.locale(i,null,!0),i})});var Un=k((lt,mt)=>{(function(n,t){typeof lt=="object"&&typeof mt<"u"?mt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_hi=t(n.dayjs)})(lt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"hi",weekdays:"\u0930\u0935\u093F\u0935\u093E\u0930_\u0938\u094B\u092E\u0935\u093E\u0930_\u092E\u0902\u0917\u0932\u0935\u093E\u0930_\u092C\u0941\u0927\u0935\u093E\u0930_\u0917\u0941\u0930\u0942\u0935\u093E\u0930_\u0936\u0941\u0915\u094D\u0930\u0935\u093E\u0930_\u0936\u0928\u093F\u0935\u093E\u0930".split("_"),months:"\u091C\u0928\u0935\u0930\u0940_\u092B\u093C\u0930\u0935\u0930\u0940_\u092E\u093E\u0930\u094D\u091A_\u0905\u092A\u094D\u0930\u0948\u0932_\u092E\u0908_\u091C\u0942\u0928_\u091C\u0941\u0932\u093E\u0908_\u0905\u0917\u0938\u094D\u0924_\u0938\u093F\u0924\u092E\u094D\u092C\u0930_\u0905\u0915\u094D\u091F\u0942\u092C\u0930_\u0928\u0935\u092E\u094D\u092C\u0930_\u0926\u093F\u0938\u092E\u094D\u092C\u0930".split("_"),weekdaysShort:"\u0930\u0935\u093F_\u0938\u094B\u092E_\u092E\u0902\u0917\u0932_\u092C\u0941\u0927_\u0917\u0941\u0930\u0942_\u0936\u0941\u0915\u094D\u0930_\u0936\u0928\u093F".split("_"),monthsShort:"\u091C\u0928._\u092B\u093C\u0930._\u092E\u093E\u0930\u094D\u091A_\u0905\u092A\u094D\u0930\u0948._\u092E\u0908_\u091C\u0942\u0928_\u091C\u0941\u0932._\u0905\u0917._\u0938\u093F\u0924._\u0905\u0915\u094D\u091F\u0942._\u0928\u0935._\u0926\u093F\u0938.".split("_"),weekdaysMin:"\u0930_\u0938\u094B_\u092E\u0902_\u092C\u0941_\u0917\u0941_\u0936\u0941_\u0936".split("_"),ordinal:function(e){return e},formats:{LT:"A h:mm \u092C\u091C\u0947",LTS:"A h:mm:ss \u092C\u091C\u0947",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u092C\u091C\u0947",LLLL:"dddd, D MMMM YYYY, A h:mm \u092C\u091C\u0947"},relativeTime:{future:"%s \u092E\u0947\u0902",past:"%s \u092A\u0939\u0932\u0947",s:"\u0915\u0941\u091B \u0939\u0940 \u0915\u094D\u0937\u0923",m:"\u090F\u0915 \u092E\u093F\u0928\u091F",mm:"%d \u092E\u093F\u0928\u091F",h:"\u090F\u0915 \u0918\u0902\u091F\u093E",hh:"%d \u0918\u0902\u091F\u0947",d:"\u090F\u0915 \u0926\u093F\u0928",dd:"%d \u0926\u093F\u0928",M:"\u090F\u0915 \u092E\u0939\u0940\u0928\u0947",MM:"%d \u092E\u0939\u0940\u0928\u0947",y:"\u090F\u0915 \u0935\u0930\u094D\u0937",yy:"%d \u0935\u0930\u094D\u0937"}};return s.default.locale(i,null,!0),i})});var Pn=k((ct,ht)=>{(function(n,t){typeof ct=="object"&&typeof ht<"u"?ht.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_hu=t(n.dayjs)})(ct,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"hu",weekdays:"vas\xE1rnap_h\xE9tf\u0151_kedd_szerda_cs\xFCt\xF6rt\xF6k_p\xE9ntek_szombat".split("_"),weekdaysShort:"vas_h\xE9t_kedd_sze_cs\xFCt_p\xE9n_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),months:"janu\xE1r_febru\xE1r_m\xE1rcius_\xE1prilis_m\xE1jus_j\xFAnius_j\xFAlius_augusztus_szeptember_okt\xF3ber_november_december".split("_"),monthsShort:"jan_feb_m\xE1rc_\xE1pr_m\xE1j_j\xFAn_j\xFAl_aug_szept_okt_nov_dec".split("_"),ordinal:function(e){return e+"."},weekStart:1,relativeTime:{future:"%s m\xFAlva",past:"%s",s:function(e,r,a,u){return"n\xE9h\xE1ny m\xE1sodperc"+(u||r?"":"e")},m:function(e,r,a,u){return"egy perc"+(u||r?"":"e")},mm:function(e,r,a,u){return e+" perc"+(u||r?"":"e")},h:function(e,r,a,u){return"egy "+(u||r?"\xF3ra":"\xF3r\xE1ja")},hh:function(e,r,a,u){return e+" "+(u||r?"\xF3ra":"\xF3r\xE1ja")},d:function(e,r,a,u){return"egy "+(u||r?"nap":"napja")},dd:function(e,r,a,u){return e+" "+(u||r?"nap":"napja")},M:function(e,r,a,u){return"egy "+(u||r?"h\xF3nap":"h\xF3napja")},MM:function(e,r,a,u){return e+" "+(u||r?"h\xF3nap":"h\xF3napja")},y:function(e,r,a,u){return"egy "+(u||r?"\xE9v":"\xE9ve")},yy:function(e,r,a,u){return e+" "+(u||r?"\xE9v":"\xE9ve")}},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D. H:mm",LLLL:"YYYY. MMMM D., dddd H:mm"}};return s.default.locale(i,null,!0),i})});var Rn=k((Mt,yt)=>{(function(n,t){typeof Mt=="object"&&typeof yt<"u"?yt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_hy_am=t(n.dayjs)})(Mt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"hy-am",weekdays:"\u056F\u056B\u0580\u0561\u056F\u056B_\u0565\u0580\u056F\u0578\u0582\u0577\u0561\u0562\u0569\u056B_\u0565\u0580\u0565\u0584\u0577\u0561\u0562\u0569\u056B_\u0579\u0578\u0580\u0565\u0584\u0577\u0561\u0562\u0569\u056B_\u0570\u056B\u0576\u0563\u0577\u0561\u0562\u0569\u056B_\u0578\u0582\u0580\u0562\u0561\u0569_\u0577\u0561\u0562\u0561\u0569".split("_"),months:"\u0570\u0578\u0582\u0576\u057E\u0561\u0580\u056B_\u0583\u0565\u057F\u0580\u057E\u0561\u0580\u056B_\u0574\u0561\u0580\u057F\u056B_\u0561\u057A\u0580\u056B\u056C\u056B_\u0574\u0561\u0575\u056B\u057D\u056B_\u0570\u0578\u0582\u0576\u056B\u057D\u056B_\u0570\u0578\u0582\u056C\u056B\u057D\u056B_\u0585\u0563\u0578\u057D\u057F\u0578\u057D\u056B_\u057D\u0565\u057A\u057F\u0565\u0574\u0562\u0565\u0580\u056B_\u0570\u0578\u056F\u057F\u0565\u0574\u0562\u0565\u0580\u056B_\u0576\u0578\u0575\u0565\u0574\u0562\u0565\u0580\u056B_\u0564\u0565\u056F\u057F\u0565\u0574\u0562\u0565\u0580\u056B".split("_"),weekStart:1,weekdaysShort:"\u056F\u0580\u056F_\u0565\u0580\u056F_\u0565\u0580\u0584_\u0579\u0580\u0584_\u0570\u0576\u0563_\u0578\u0582\u0580\u0562_\u0577\u0562\u0569".split("_"),monthsShort:"\u0570\u0576\u057E_\u0583\u057F\u0580_\u0574\u0580\u057F_\u0561\u057A\u0580_\u0574\u0575\u057D_\u0570\u0576\u057D_\u0570\u056C\u057D_\u0585\u0563\u057D_\u057D\u057A\u057F_\u0570\u056F\u057F_\u0576\u0574\u0562_\u0564\u056F\u057F".split("_"),weekdaysMin:"\u056F\u0580\u056F_\u0565\u0580\u056F_\u0565\u0580\u0584_\u0579\u0580\u0584_\u0570\u0576\u0563_\u0578\u0582\u0580\u0562_\u0577\u0562\u0569".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0569.",LLL:"D MMMM YYYY \u0569., HH:mm",LLLL:"dddd, D MMMM YYYY \u0569., HH:mm"},relativeTime:{future:"%s \u0570\u0565\u057F\u0578",past:"%s \u0561\u057C\u0561\u057B",s:"\u0574\u056B \u0584\u0561\u0576\u056B \u057E\u0561\u0575\u0580\u056F\u0575\u0561\u0576",m:"\u0580\u0578\u057A\u0565",mm:"%d \u0580\u0578\u057A\u0565",h:"\u056A\u0561\u0574",hh:"%d \u056A\u0561\u0574",d:"\u0585\u0580",dd:"%d \u0585\u0580",M:"\u0561\u0574\u056B\u057D",MM:"%d \u0561\u0574\u056B\u057D",y:"\u057F\u0561\u0580\u056B",yy:"%d \u057F\u0561\u0580\u056B"}};return s.default.locale(i,null,!0),i})});var Gn=k((Yt,pt)=>{(function(n,t){typeof Yt=="object"&&typeof pt<"u"?pt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_id=t(n.dayjs)})(Yt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"id",weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),weekStart:1,formats:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},ordinal:function(e){return e+"."}};return s.default.locale(i,null,!0),i})});var Zn=k((Dt,Lt)=>{(function(n,t){typeof Dt=="object"&&typeof Lt<"u"?Lt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_it=t(n.dayjs)})(Dt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"it",weekdays:"domenica_luned\xEC_marted\xEC_mercoled\xEC_gioved\xEC_venerd\xEC_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),weekStart:1,monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"tra %s",past:"%s fa",s:"qualche secondo",m:"un minuto",mm:"%d minuti",h:"un' ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},ordinal:function(e){return e+"\xBA"}};return s.default.locale(i,null,!0),i})});var Vn=k((vt,gt)=>{(function(n,t){typeof vt=="object"&&typeof gt<"u"?gt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_ja=t(n.dayjs)})(vt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"ja",weekdays:"\u65E5\u66DC\u65E5_\u6708\u66DC\u65E5_\u706B\u66DC\u65E5_\u6C34\u66DC\u65E5_\u6728\u66DC\u65E5_\u91D1\u66DC\u65E5_\u571F\u66DC\u65E5".split("_"),weekdaysShort:"\u65E5_\u6708_\u706B_\u6C34_\u6728_\u91D1_\u571F".split("_"),weekdaysMin:"\u65E5_\u6708_\u706B_\u6C34_\u6728_\u91D1_\u571F".split("_"),months:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),ordinal:function(e){return e+"\u65E5"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5E74M\u6708D\u65E5",LLL:"YYYY\u5E74M\u6708D\u65E5 HH:mm",LLLL:"YYYY\u5E74M\u6708D\u65E5 dddd HH:mm",l:"YYYY/MM/DD",ll:"YYYY\u5E74M\u6708D\u65E5",lll:"YYYY\u5E74M\u6708D\u65E5 HH:mm",llll:"YYYY\u5E74M\u6708D\u65E5(ddd) HH:mm"},meridiem:function(e){return e<12?"\u5348\u524D":"\u5348\u5F8C"},relativeTime:{future:"%s\u5F8C",past:"%s\u524D",s:"\u6570\u79D2",m:"1\u5206",mm:"%d\u5206",h:"1\u6642\u9593",hh:"%d\u6642\u9593",d:"1\u65E5",dd:"%d\u65E5",M:"1\u30F6\u6708",MM:"%d\u30F6\u6708",y:"1\u5E74",yy:"%d\u5E74"}};return s.default.locale(i,null,!0),i})});var Kn=k((St,bt)=>{(function(n,t){typeof St=="object"&&typeof bt<"u"?bt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_ka=t(n.dayjs)})(St,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"ka",weekdays:"\u10D9\u10D5\u10D8\u10E0\u10D0_\u10DD\u10E0\u10E8\u10D0\u10D1\u10D0\u10D7\u10D8_\u10E1\u10D0\u10DB\u10E8\u10D0\u10D1\u10D0\u10D7\u10D8_\u10DD\u10D7\u10EE\u10E8\u10D0\u10D1\u10D0\u10D7\u10D8_\u10EE\u10E3\u10D7\u10E8\u10D0\u10D1\u10D0\u10D7\u10D8_\u10DE\u10D0\u10E0\u10D0\u10E1\u10D9\u10D4\u10D5\u10D8_\u10E8\u10D0\u10D1\u10D0\u10D7\u10D8".split("_"),weekdaysShort:"\u10D9\u10D5\u10D8_\u10DD\u10E0\u10E8_\u10E1\u10D0\u10DB_\u10DD\u10D7\u10EE_\u10EE\u10E3\u10D7_\u10DE\u10D0\u10E0_\u10E8\u10D0\u10D1".split("_"),weekdaysMin:"\u10D9\u10D5_\u10DD\u10E0_\u10E1\u10D0_\u10DD\u10D7_\u10EE\u10E3_\u10DE\u10D0_\u10E8\u10D0".split("_"),months:"\u10D8\u10D0\u10DC\u10D5\u10D0\u10E0\u10D8_\u10D7\u10D4\u10D1\u10D4\u10E0\u10D5\u10D0\u10DA\u10D8_\u10DB\u10D0\u10E0\u10E2\u10D8_\u10D0\u10DE\u10E0\u10D8\u10DA\u10D8_\u10DB\u10D0\u10D8\u10E1\u10D8_\u10D8\u10D5\u10DC\u10D8\u10E1\u10D8_\u10D8\u10D5\u10DA\u10D8\u10E1\u10D8_\u10D0\u10D2\u10D5\u10D8\u10E1\u10E2\u10DD_\u10E1\u10D4\u10E5\u10E2\u10D4\u10DB\u10D1\u10D4\u10E0\u10D8_\u10DD\u10E5\u10E2\u10DD\u10DB\u10D1\u10D4\u10E0\u10D8_\u10DC\u10DD\u10D4\u10DB\u10D1\u10D4\u10E0\u10D8_\u10D3\u10D4\u10D9\u10D4\u10DB\u10D1\u10D4\u10E0\u10D8".split("_"),monthsShort:"\u10D8\u10D0\u10DC_\u10D7\u10D4\u10D1_\u10DB\u10D0\u10E0_\u10D0\u10DE\u10E0_\u10DB\u10D0\u10D8_\u10D8\u10D5\u10DC_\u10D8\u10D5\u10DA_\u10D0\u10D2\u10D5_\u10E1\u10D4\u10E5_\u10DD\u10E5\u10E2_\u10DC\u10DD\u10D4_\u10D3\u10D4\u10D9".split("_"),weekStart:1,formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},relativeTime:{future:"%s \u10E8\u10D4\u10DB\u10D3\u10D4\u10D2",past:"%s \u10EC\u10D8\u10DC",s:"\u10EC\u10D0\u10DB\u10D8",m:"\u10EC\u10E3\u10D7\u10D8",mm:"%d \u10EC\u10E3\u10D7\u10D8",h:"\u10E1\u10D0\u10D0\u10D7\u10D8",hh:"%d \u10E1\u10D0\u10D0\u10D7\u10D8\u10E1",d:"\u10D3\u10E6\u10D4\u10E1",dd:"%d \u10D3\u10E6\u10D8\u10E1 \u10D2\u10D0\u10DC\u10DB\u10D0\u10D5\u10DA\u10DD\u10D1\u10D0\u10E8\u10D8",M:"\u10D7\u10D5\u10D8\u10E1",MM:"%d \u10D7\u10D5\u10D8\u10E1",y:"\u10EC\u10D4\u10DA\u10D8",yy:"%d \u10EC\u10DA\u10D8\u10E1"},ordinal:function(e){return e}};return s.default.locale(i,null,!0),i})});var Qn=k((kt,Ht)=>{(function(n,t){typeof kt=="object"&&typeof Ht<"u"?Ht.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_km=t(n.dayjs)})(kt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"km",weekdays:"\u17A2\u17B6\u1791\u17B7\u178F\u17D2\u1799_\u1785\u17D0\u1793\u17D2\u1791_\u17A2\u1784\u17D2\u1782\u17B6\u179A_\u1796\u17BB\u1792_\u1796\u17D2\u179A\u17A0\u179F\u17D2\u1794\u178F\u17B7\u17CD_\u179F\u17BB\u1780\u17D2\u179A_\u179F\u17C5\u179A\u17CD".split("_"),months:"\u1798\u1780\u179A\u17B6_\u1780\u17BB\u1798\u17D2\u1797\u17C8_\u1798\u17B8\u1793\u17B6_\u1798\u17C1\u179F\u17B6_\u17A7\u179F\u1797\u17B6_\u1798\u17B7\u1790\u17BB\u1793\u17B6_\u1780\u1780\u17D2\u1780\u178A\u17B6_\u179F\u17B8\u17A0\u17B6_\u1780\u1789\u17D2\u1789\u17B6_\u178F\u17BB\u179B\u17B6_\u179C\u17B7\u1785\u17D2\u1786\u17B7\u1780\u17B6_\u1792\u17D2\u1793\u17BC".split("_"),weekStart:1,weekdaysShort:"\u17A2\u17B6_\u1785_\u17A2_\u1796_\u1796\u17D2\u179A_\u179F\u17BB_\u179F".split("_"),monthsShort:"\u1798\u1780\u179A\u17B6_\u1780\u17BB\u1798\u17D2\u1797\u17C8_\u1798\u17B8\u1793\u17B6_\u1798\u17C1\u179F\u17B6_\u17A7\u179F\u1797\u17B6_\u1798\u17B7\u1790\u17BB\u1793\u17B6_\u1780\u1780\u17D2\u1780\u178A\u17B6_\u179F\u17B8\u17A0\u17B6_\u1780\u1789\u17D2\u1789\u17B6_\u178F\u17BB\u179B\u17B6_\u179C\u17B7\u1785\u17D2\u1786\u17B7\u1780\u17B6_\u1792\u17D2\u1793\u17BC".split("_"),weekdaysMin:"\u17A2\u17B6_\u1785_\u17A2_\u1796_\u1796\u17D2\u179A_\u179F\u17BB_\u179F".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"%s\u1791\u17C0\u178F",past:"%s\u1798\u17BB\u1793",s:"\u1794\u17C9\u17BB\u1793\u17D2\u1798\u17B6\u1793\u179C\u17B7\u1793\u17B6\u1791\u17B8",m:"\u1798\u17BD\u1799\u1793\u17B6\u1791\u17B8",mm:"%d \u1793\u17B6\u1791\u17B8",h:"\u1798\u17BD\u1799\u1798\u17C9\u17C4\u1784",hh:"%d \u1798\u17C9\u17C4\u1784",d:"\u1798\u17BD\u1799\u1790\u17D2\u1784\u17C3",dd:"%d \u1790\u17D2\u1784\u17C3",M:"\u1798\u17BD\u1799\u1781\u17C2",MM:"%d \u1781\u17C2",y:"\u1798\u17BD\u1799\u1786\u17D2\u1793\u17B6\u17C6",yy:"%d \u1786\u17D2\u1793\u17B6\u17C6"}};return s.default.locale(i,null,!0),i})});var Xn=k((jt,Tt)=>{(function(n,t){typeof jt=="object"&&typeof Tt<"u"?Tt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_lt=t(n.dayjs)})(jt,function(n){"use strict";function t(o){return o&&typeof o=="object"&&"default"in o?o:{default:o}}var s=t(n),i="sausio_vasario_kovo_baland\u017Eio_gegu\u017E\u0117s_bir\u017Eelio_liepos_rugpj\u016B\u010Dio_rugs\u0117jo_spalio_lapkri\u010Dio_gruod\u017Eio".split("_"),e="sausis_vasaris_kovas_balandis_gegu\u017E\u0117_bir\u017Eelis_liepa_rugpj\u016Btis_rugs\u0117jis_spalis_lapkritis_gruodis".split("_"),r=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/,a=function(o,d){return r.test(d)?i[o.month()]:e[o.month()]};a.s=e,a.f=i;var u={name:"lt",weekdays:"sekmadienis_pirmadienis_antradienis_tre\u010Diadienis_ketvirtadienis_penktadienis_\u0161e\u0161tadienis".split("_"),weekdaysShort:"sek_pir_ant_tre_ket_pen_\u0161e\u0161".split("_"),weekdaysMin:"s_p_a_t_k_pn_\u0161".split("_"),months:a,monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),ordinal:function(o){return o+"."},weekStart:1,relativeTime:{future:"u\u017E %s",past:"prie\u0161 %s",s:"kelias sekundes",m:"minut\u0119",mm:"%d minutes",h:"valand\u0105",hh:"%d valandas",d:"dien\u0105",dd:"%d dienas",M:"m\u0117nes\u012F",MM:"%d m\u0117nesius",y:"metus",yy:"%d metus"},format:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"}};return s.default.locale(u,null,!0),u})});var Bn=k((wt,$t)=>{(function(n,t){typeof wt=="object"&&typeof $t<"u"?$t.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_lv=t(n.dayjs)})(wt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"lv",weekdays:"sv\u0113tdiena_pirmdiena_otrdiena_tre\u0161diena_ceturtdiena_piektdiena_sestdiena".split("_"),months:"janv\u0101ris_febru\u0101ris_marts_apr\u012Blis_maijs_j\u016Bnijs_j\u016Blijs_augusts_septembris_oktobris_novembris_decembris".split("_"),weekStart:1,weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),monthsShort:"jan_feb_mar_apr_mai_j\u016Bn_j\u016Bl_aug_sep_okt_nov_dec".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY.",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, HH:mm",LLLL:"YYYY. [gada] D. MMMM, dddd, HH:mm"},relativeTime:{future:"p\u0113c %s",past:"pirms %s",s:"da\u017E\u0101m sekund\u0113m",m:"min\u016Btes",mm:"%d min\u016Bt\u0113m",h:"stundas",hh:"%d stund\u0101m",d:"dienas",dd:"%d dien\u0101m",M:"m\u0113ne\u0161a",MM:"%d m\u0113ne\u0161iem",y:"gada",yy:"%d gadiem"}};return s.default.locale(i,null,!0),i})});var ei=k((Ct,Ot)=>{(function(n,t){typeof Ct=="object"&&typeof Ot<"u"?Ot.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_ms=t(n.dayjs)})(Ct,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"ms",weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekStart:1,formats:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH.mm",LLLL:"dddd, D MMMM YYYY HH.mm"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},ordinal:function(e){return e+"."}};return s.default.locale(i,null,!0),i})});var ti=k((zt,At)=>{(function(n,t){typeof zt=="object"&&typeof At<"u"?At.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_my=t(n.dayjs)})(zt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"my",weekdays:"\u1010\u1014\u1004\u103A\u1039\u1002\u1014\u103D\u1031_\u1010\u1014\u1004\u103A\u1039\u101C\u102C_\u1021\u1004\u103A\u1039\u1002\u102B_\u1017\u102F\u1012\u1039\u1013\u101F\u1030\u1038_\u1000\u103C\u102C\u101E\u1015\u1010\u1031\u1038_\u101E\u1031\u102C\u1000\u103C\u102C_\u1005\u1014\u1031".split("_"),months:"\u1007\u1014\u103A\u1014\u101D\u102B\u101B\u102E_\u1016\u1031\u1016\u1031\u102C\u103A\u101D\u102B\u101B\u102E_\u1019\u1010\u103A_\u1027\u1015\u103C\u102E_\u1019\u1031_\u1007\u103D\u1014\u103A_\u1007\u1030\u101C\u102D\u102F\u1004\u103A_\u101E\u103C\u1002\u102F\u1010\u103A_\u1005\u1000\u103A\u1010\u1004\u103A\u1018\u102C_\u1021\u1031\u102C\u1000\u103A\u1010\u102D\u102F\u1018\u102C_\u1014\u102D\u102F\u101D\u1004\u103A\u1018\u102C_\u1012\u102E\u1007\u1004\u103A\u1018\u102C".split("_"),weekStart:1,weekdaysShort:"\u1014\u103D\u1031_\u101C\u102C_\u1002\u102B_\u101F\u1030\u1038_\u1000\u103C\u102C_\u101E\u1031\u102C_\u1014\u1031".split("_"),monthsShort:"\u1007\u1014\u103A_\u1016\u1031_\u1019\u1010\u103A_\u1015\u103C\u102E_\u1019\u1031_\u1007\u103D\u1014\u103A_\u101C\u102D\u102F\u1004\u103A_\u101E\u103C_\u1005\u1000\u103A_\u1021\u1031\u102C\u1000\u103A_\u1014\u102D\u102F_\u1012\u102E".split("_"),weekdaysMin:"\u1014\u103D\u1031_\u101C\u102C_\u1002\u102B_\u101F\u1030\u1038_\u1000\u103C\u102C_\u101E\u1031\u102C_\u1014\u1031".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"\u101C\u102C\u1019\u100A\u103A\u1037 %s \u1019\u103E\u102C",past:"\u101C\u103D\u1014\u103A\u1001\u1032\u1037\u101E\u1031\u102C %s \u1000",s:"\u1005\u1000\u1039\u1000\u1014\u103A.\u1021\u1014\u100A\u103A\u1038\u1004\u101A\u103A",m:"\u1010\u1005\u103A\u1019\u102D\u1014\u1005\u103A",mm:"%d \u1019\u102D\u1014\u1005\u103A",h:"\u1010\u1005\u103A\u1014\u102C\u101B\u102E",hh:"%d \u1014\u102C\u101B\u102E",d:"\u1010\u1005\u103A\u101B\u1000\u103A",dd:"%d \u101B\u1000\u103A",M:"\u1010\u1005\u103A\u101C",MM:"%d \u101C",y:"\u1010\u1005\u103A\u1014\u103E\u1005\u103A",yy:"%d \u1014\u103E\u1005\u103A"}};return s.default.locale(i,null,!0),i})});var ni=k((It,qt)=>{(function(n,t){typeof It=="object"&&typeof qt<"u"?qt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_nl=t(n.dayjs)})(It,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"nl",weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),ordinal:function(e){return"["+e+(e===1||e===8||e>=20?"ste":"de")+"]"},weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",m:"een minuut",mm:"%d minuten",h:"een uur",hh:"%d uur",d:"een dag",dd:"%d dagen",M:"een maand",MM:"%d maanden",y:"een jaar",yy:"%d jaar"}};return s.default.locale(i,null,!0),i})});var ii=k((xt,Nt)=>{(function(n,t){typeof xt=="object"&&typeof Nt<"u"?Nt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_nb=t(n.dayjs)})(xt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"nb",weekdays:"s\xF8ndag_mandag_tirsdag_onsdag_torsdag_fredag_l\xF8rdag".split("_"),weekdaysShort:"s\xF8._ma._ti._on._to._fr._l\xF8.".split("_"),weekdaysMin:"s\xF8_ma_ti_on_to_fr_l\xF8".split("_"),months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.".split("_"),ordinal:function(e){return e+"."},weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] HH:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},relativeTime:{future:"om %s",past:"%s siden",s:"noen sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",M:"en m\xE5ned",MM:"%d m\xE5neder",y:"ett \xE5r",yy:"%d \xE5r"}};return s.default.locale(i,null,!0),i})});var si=k((Et,Ft)=>{(function(n,t){typeof Et=="object"&&typeof Ft<"u"?Ft.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_pl=t(n.dayjs)})(Et,function(n){"use strict";function t(_){return _&&typeof _=="object"&&"default"in _?_:{default:_}}var s=t(n);function i(_){return _%10<5&&_%10>1&&~~(_/10)%10!=1}function e(_,y,l){var f=_+" ";switch(l){case"m":return y?"minuta":"minut\u0119";case"mm":return f+(i(_)?"minuty":"minut");case"h":return y?"godzina":"godzin\u0119";case"hh":return f+(i(_)?"godziny":"godzin");case"MM":return f+(i(_)?"miesi\u0105ce":"miesi\u0119cy");case"yy":return f+(i(_)?"lata":"lat")}}var r="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_wrze\u015Bnia_pa\u017Adziernika_listopada_grudnia".split("_"),a="stycze\u0144_luty_marzec_kwiecie\u0144_maj_czerwiec_lipiec_sierpie\u0144_wrzesie\u0144_pa\u017Adziernik_listopad_grudzie\u0144".split("_"),u=/D MMMM/,o=function(_,y){return u.test(y)?r[_.month()]:a[_.month()]};o.s=a,o.f=r;var d={name:"pl",weekdays:"niedziela_poniedzia\u0142ek_wtorek_\u015Broda_czwartek_pi\u0105tek_sobota".split("_"),weekdaysShort:"ndz_pon_wt_\u015Br_czw_pt_sob".split("_"),weekdaysMin:"Nd_Pn_Wt_\u015Ar_Cz_Pt_So".split("_"),months:o,monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_pa\u017A_lis_gru".split("_"),ordinal:function(_){return _+"."},weekStart:1,yearStart:4,relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",m:e,mm:e,h:e,hh:e,d:"1 dzie\u0144",dd:"%d dni",M:"miesi\u0105c",MM:e,y:"rok",yy:e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"}};return s.default.locale(d,null,!0),d})});var ri=k((Jt,Wt)=>{(function(n,t){typeof Jt=="object"&&typeof Wt<"u"?Wt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_pt_br=t(n.dayjs)})(Jt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"pt-br",weekdays:"domingo_segunda-feira_ter\xE7a-feira_quarta-feira_quinta-feira_sexta-feira_s\xE1bado".split("_"),weekdaysShort:"dom_seg_ter_qua_qui_sex_s\xE1b".split("_"),weekdaysMin:"Do_2\xAA_3\xAA_4\xAA_5\xAA_6\xAA_S\xE1".split("_"),months:"janeiro_fevereiro_mar\xE7o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),ordinal:function(e){return e+"\xBA"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [\xE0s] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [\xE0s] HH:mm"},relativeTime:{future:"em %s",past:"h\xE1 %s",s:"poucos segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um m\xEAs",MM:"%d meses",y:"um ano",yy:"%d anos"}};return s.default.locale(i,null,!0),i})});var ai=k((Ut,Pt)=>{(function(n,t){typeof Ut=="object"&&typeof Pt<"u"?Pt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_pt=t(n.dayjs)})(Ut,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"pt",weekdays:"domingo_segunda-feira_ter\xE7a-feira_quarta-feira_quinta-feira_sexta-feira_s\xE1bado".split("_"),weekdaysShort:"dom_seg_ter_qua_qui_sex_sab".split("_"),weekdaysMin:"Do_2\xAA_3\xAA_4\xAA_5\xAA_6\xAA_Sa".split("_"),months:"janeiro_fevereiro_mar\xE7o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),ordinal:function(e){return e+"\xBA"},weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [\xE0s] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [\xE0s] HH:mm"},relativeTime:{future:"em %s",past:"h\xE1 %s",s:"alguns segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um m\xEAs",MM:"%d meses",y:"um ano",yy:"%d anos"}};return s.default.locale(i,null,!0),i})});var ui=k((Rt,Gt)=>{(function(n,t){typeof Rt=="object"&&typeof Gt<"u"?Gt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_ro=t(n.dayjs)})(Rt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"ro",weekdays:"Duminic\u0103_Luni_Mar\u021Bi_Miercuri_Joi_Vineri_S\xE2mb\u0103t\u0103".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_S\xE2m".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_S\xE2".split("_"),months:"Ianuarie_Februarie_Martie_Aprilie_Mai_Iunie_Iulie_August_Septembrie_Octombrie_Noiembrie_Decembrie".split("_"),monthsShort:"Ian._Febr._Mart._Apr._Mai_Iun._Iul._Aug._Sept._Oct._Nov._Dec.".split("_"),weekStart:1,formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},relativeTime:{future:"peste %s",past:"acum %s",s:"c\xE2teva secunde",m:"un minut",mm:"%d minute",h:"o or\u0103",hh:"%d ore",d:"o zi",dd:"%d zile",M:"o lun\u0103",MM:"%d luni",y:"un an",yy:"%d ani"},ordinal:function(e){return e}};return s.default.locale(i,null,!0),i})});var oi=k((Zt,Vt)=>{(function(n,t){typeof Zt=="object"&&typeof Vt<"u"?Vt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_ru=t(n.dayjs)})(Zt,function(n){"use strict";function t(l){return l&&typeof l=="object"&&"default"in l?l:{default:l}}var s=t(n),i="\u044F\u043D\u0432\u0430\u0440\u044F_\u0444\u0435\u0432\u0440\u0430\u043B\u044F_\u043C\u0430\u0440\u0442\u0430_\u0430\u043F\u0440\u0435\u043B\u044F_\u043C\u0430\u044F_\u0438\u044E\u043D\u044F_\u0438\u044E\u043B\u044F_\u0430\u0432\u0433\u0443\u0441\u0442\u0430_\u0441\u0435\u043D\u0442\u044F\u0431\u0440\u044F_\u043E\u043A\u0442\u044F\u0431\u0440\u044F_\u043D\u043E\u044F\u0431\u0440\u044F_\u0434\u0435\u043A\u0430\u0431\u0440\u044F".split("_"),e="\u044F\u043D\u0432\u0430\u0440\u044C_\u0444\u0435\u0432\u0440\u0430\u043B\u044C_\u043C\u0430\u0440\u0442_\u0430\u043F\u0440\u0435\u043B\u044C_\u043C\u0430\u0439_\u0438\u044E\u043D\u044C_\u0438\u044E\u043B\u044C_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043D\u0442\u044F\u0431\u0440\u044C_\u043E\u043A\u0442\u044F\u0431\u0440\u044C_\u043D\u043E\u044F\u0431\u0440\u044C_\u0434\u0435\u043A\u0430\u0431\u0440\u044C".split("_"),r="\u044F\u043D\u0432._\u0444\u0435\u0432\u0440._\u043C\u0430\u0440._\u0430\u043F\u0440._\u043C\u0430\u044F_\u0438\u044E\u043D\u044F_\u0438\u044E\u043B\u044F_\u0430\u0432\u0433._\u0441\u0435\u043D\u0442._\u043E\u043A\u0442._\u043D\u043E\u044F\u0431._\u0434\u0435\u043A.".split("_"),a="\u044F\u043D\u0432._\u0444\u0435\u0432\u0440._\u043C\u0430\u0440\u0442_\u0430\u043F\u0440._\u043C\u0430\u0439_\u0438\u044E\u043D\u044C_\u0438\u044E\u043B\u044C_\u0430\u0432\u0433._\u0441\u0435\u043D\u0442._\u043E\u043A\u0442._\u043D\u043E\u044F\u0431._\u0434\u0435\u043A.".split("_"),u=/D[oD]?(\[[^[\]]*\]|\s)+MMMM?/;function o(l,f,m){var Y,L;return m==="m"?f?"\u043C\u0438\u043D\u0443\u0442\u0430":"\u043C\u0438\u043D\u0443\u0442\u0443":l+" "+(Y=+l,L={mm:f?"\u043C\u0438\u043D\u0443\u0442\u0430_\u043C\u0438\u043D\u0443\u0442\u044B_\u043C\u0438\u043D\u0443\u0442":"\u043C\u0438\u043D\u0443\u0442\u0443_\u043C\u0438\u043D\u0443\u0442\u044B_\u043C\u0438\u043D\u0443\u0442",hh:"\u0447\u0430\u0441_\u0447\u0430\u0441\u0430_\u0447\u0430\u0441\u043E\u0432",dd:"\u0434\u0435\u043D\u044C_\u0434\u043D\u044F_\u0434\u043D\u0435\u0439",MM:"\u043C\u0435\u0441\u044F\u0446_\u043C\u0435\u0441\u044F\u0446\u0430_\u043C\u0435\u0441\u044F\u0446\u0435\u0432",yy:"\u0433\u043E\u0434_\u0433\u043E\u0434\u0430_\u043B\u0435\u0442"}[m].split("_"),Y%10==1&&Y%100!=11?L[0]:Y%10>=2&&Y%10<=4&&(Y%100<10||Y%100>=20)?L[1]:L[2])}var d=function(l,f){return u.test(f)?i[l.month()]:e[l.month()]};d.s=e,d.f=i;var _=function(l,f){return u.test(f)?r[l.month()]:a[l.month()]};_.s=a,_.f=r;var y={name:"ru",weekdays:"\u0432\u043E\u0441\u043A\u0440\u0435\u0441\u0435\u043D\u044C\u0435_\u043F\u043E\u043D\u0435\u0434\u0435\u043B\u044C\u043D\u0438\u043A_\u0432\u0442\u043E\u0440\u043D\u0438\u043A_\u0441\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0435\u0440\u0433_\u043F\u044F\u0442\u043D\u0438\u0446\u0430_\u0441\u0443\u0431\u0431\u043E\u0442\u0430".split("_"),weekdaysShort:"\u0432\u0441\u043A_\u043F\u043D\u0434_\u0432\u0442\u0440_\u0441\u0440\u0434_\u0447\u0442\u0432_\u043F\u0442\u043D_\u0441\u0431\u0442".split("_"),weekdaysMin:"\u0432\u0441_\u043F\u043D_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043F\u0442_\u0441\u0431".split("_"),months:d,monthsShort:_,weekStart:1,yearStart:4,formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0433.",LLL:"D MMMM YYYY \u0433., H:mm",LLLL:"dddd, D MMMM YYYY \u0433., H:mm"},relativeTime:{future:"\u0447\u0435\u0440\u0435\u0437 %s",past:"%s \u043D\u0430\u0437\u0430\u0434",s:"\u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0441\u0435\u043A\u0443\u043D\u0434",m:o,mm:o,h:"\u0447\u0430\u0441",hh:o,d:"\u0434\u0435\u043D\u044C",dd:o,M:"\u043C\u0435\u0441\u044F\u0446",MM:o,y:"\u0433\u043E\u0434",yy:o},ordinal:function(l){return l},meridiem:function(l){return l<4?"\u043D\u043E\u0447\u0438":l<12?"\u0443\u0442\u0440\u0430":l<17?"\u0434\u043D\u044F":"\u0432\u0435\u0447\u0435\u0440\u0430"}};return s.default.locale(y,null,!0),y})});var di=k((Kt,Qt)=>{(function(n,t){typeof Kt=="object"&&typeof Qt<"u"?Qt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_sv=t(n.dayjs)})(Kt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"sv",weekdays:"s\xF6ndag_m\xE5ndag_tisdag_onsdag_torsdag_fredag_l\xF6rdag".split("_"),weekdaysShort:"s\xF6n_m\xE5n_tis_ons_tor_fre_l\xF6r".split("_"),weekdaysMin:"s\xF6_m\xE5_ti_on_to_fr_l\xF6".split("_"),months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekStart:1,yearStart:4,ordinal:function(e){var r=e%10;return"["+e+(r===1||r===2?"a":"e")+"]"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},relativeTime:{future:"om %s",past:"f\xF6r %s sedan",s:"n\xE5gra sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en m\xE5nad",MM:"%d m\xE5nader",y:"ett \xE5r",yy:"%d \xE5r"}};return s.default.locale(i,null,!0),i})});var _i=k((Xt,Bt)=>{(function(n,t){typeof Xt=="object"&&typeof Bt<"u"?Bt.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_th=t(n.dayjs)})(Xt,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"th",weekdays:"\u0E2D\u0E32\u0E17\u0E34\u0E15\u0E22\u0E4C_\u0E08\u0E31\u0E19\u0E17\u0E23\u0E4C_\u0E2D\u0E31\u0E07\u0E04\u0E32\u0E23_\u0E1E\u0E38\u0E18_\u0E1E\u0E24\u0E2B\u0E31\u0E2A\u0E1A\u0E14\u0E35_\u0E28\u0E38\u0E01\u0E23\u0E4C_\u0E40\u0E2A\u0E32\u0E23\u0E4C".split("_"),weekdaysShort:"\u0E2D\u0E32\u0E17\u0E34\u0E15\u0E22\u0E4C_\u0E08\u0E31\u0E19\u0E17\u0E23\u0E4C_\u0E2D\u0E31\u0E07\u0E04\u0E32\u0E23_\u0E1E\u0E38\u0E18_\u0E1E\u0E24\u0E2B\u0E31\u0E2A_\u0E28\u0E38\u0E01\u0E23\u0E4C_\u0E40\u0E2A\u0E32\u0E23\u0E4C".split("_"),weekdaysMin:"\u0E2D\u0E32._\u0E08._\u0E2D._\u0E1E._\u0E1E\u0E24._\u0E28._\u0E2A.".split("_"),months:"\u0E21\u0E01\u0E23\u0E32\u0E04\u0E21_\u0E01\u0E38\u0E21\u0E20\u0E32\u0E1E\u0E31\u0E19\u0E18\u0E4C_\u0E21\u0E35\u0E19\u0E32\u0E04\u0E21_\u0E40\u0E21\u0E29\u0E32\u0E22\u0E19_\u0E1E\u0E24\u0E29\u0E20\u0E32\u0E04\u0E21_\u0E21\u0E34\u0E16\u0E38\u0E19\u0E32\u0E22\u0E19_\u0E01\u0E23\u0E01\u0E0E\u0E32\u0E04\u0E21_\u0E2A\u0E34\u0E07\u0E2B\u0E32\u0E04\u0E21_\u0E01\u0E31\u0E19\u0E22\u0E32\u0E22\u0E19_\u0E15\u0E38\u0E25\u0E32\u0E04\u0E21_\u0E1E\u0E24\u0E28\u0E08\u0E34\u0E01\u0E32\u0E22\u0E19_\u0E18\u0E31\u0E19\u0E27\u0E32\u0E04\u0E21".split("_"),monthsShort:"\u0E21.\u0E04._\u0E01.\u0E1E._\u0E21\u0E35.\u0E04._\u0E40\u0E21.\u0E22._\u0E1E.\u0E04._\u0E21\u0E34.\u0E22._\u0E01.\u0E04._\u0E2A.\u0E04._\u0E01.\u0E22._\u0E15.\u0E04._\u0E1E.\u0E22._\u0E18.\u0E04.".split("_"),formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY \u0E40\u0E27\u0E25\u0E32 H:mm",LLLL:"\u0E27\u0E31\u0E19dddd\u0E17\u0E35\u0E48 D MMMM YYYY \u0E40\u0E27\u0E25\u0E32 H:mm"},relativeTime:{future:"\u0E2D\u0E35\u0E01 %s",past:"%s\u0E17\u0E35\u0E48\u0E41\u0E25\u0E49\u0E27",s:"\u0E44\u0E21\u0E48\u0E01\u0E35\u0E48\u0E27\u0E34\u0E19\u0E32\u0E17\u0E35",m:"1 \u0E19\u0E32\u0E17\u0E35",mm:"%d \u0E19\u0E32\u0E17\u0E35",h:"1 \u0E0A\u0E31\u0E48\u0E27\u0E42\u0E21\u0E07",hh:"%d \u0E0A\u0E31\u0E48\u0E27\u0E42\u0E21\u0E07",d:"1 \u0E27\u0E31\u0E19",dd:"%d \u0E27\u0E31\u0E19",M:"1 \u0E40\u0E14\u0E37\u0E2D\u0E19",MM:"%d \u0E40\u0E14\u0E37\u0E2D\u0E19",y:"1 \u0E1B\u0E35",yy:"%d \u0E1B\u0E35"},ordinal:function(e){return e+"."}};return s.default.locale(i,null,!0),i})});var fi=k((en,tn)=>{(function(n,t){typeof en=="object"&&typeof tn<"u"?tn.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_tr=t(n.dayjs)})(en,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"tr",weekdays:"Pazar_Pazartesi_Sal\u0131_\xC7ar\u015Famba_Per\u015Fembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pts_Sal_\xC7ar_Per_Cum_Cts".split("_"),weekdaysMin:"Pz_Pt_Sa_\xC7a_Pe_Cu_Ct".split("_"),months:"Ocak_\u015Eubat_Mart_Nisan_May\u0131s_Haziran_Temmuz_A\u011Fustos_Eyl\xFCl_Ekim_Kas\u0131m_Aral\u0131k".split("_"),monthsShort:"Oca_\u015Eub_Mar_Nis_May_Haz_Tem_A\u011Fu_Eyl_Eki_Kas_Ara".split("_"),weekStart:1,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"%s sonra",past:"%s \xF6nce",s:"birka\xE7 saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir g\xFCn",dd:"%d g\xFCn",M:"bir ay",MM:"%d ay",y:"bir y\u0131l",yy:"%d y\u0131l"},ordinal:function(e){return e+"."}};return s.default.locale(i,null,!0),i})});var li=k((nn,sn)=>{(function(n,t){typeof nn=="object"&&typeof sn<"u"?sn.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_uk=t(n.dayjs)})(nn,function(n){"use strict";function t(d){return d&&typeof d=="object"&&"default"in d?d:{default:d}}var s=t(n),i="\u0441\u0456\u0447\u043D\u044F_\u043B\u044E\u0442\u043E\u0433\u043E_\u0431\u0435\u0440\u0435\u0437\u043D\u044F_\u043A\u0432\u0456\u0442\u043D\u044F_\u0442\u0440\u0430\u0432\u043D\u044F_\u0447\u0435\u0440\u0432\u043D\u044F_\u043B\u0438\u043F\u043D\u044F_\u0441\u0435\u0440\u043F\u043D\u044F_\u0432\u0435\u0440\u0435\u0441\u043D\u044F_\u0436\u043E\u0432\u0442\u043D\u044F_\u043B\u0438\u0441\u0442\u043E\u043F\u0430\u0434\u0430_\u0433\u0440\u0443\u0434\u043D\u044F".split("_"),e="\u0441\u0456\u0447\u0435\u043D\u044C_\u043B\u044E\u0442\u0438\u0439_\u0431\u0435\u0440\u0435\u0437\u0435\u043D\u044C_\u043A\u0432\u0456\u0442\u0435\u043D\u044C_\u0442\u0440\u0430\u0432\u0435\u043D\u044C_\u0447\u0435\u0440\u0432\u0435\u043D\u044C_\u043B\u0438\u043F\u0435\u043D\u044C_\u0441\u0435\u0440\u043F\u0435\u043D\u044C_\u0432\u0435\u0440\u0435\u0441\u0435\u043D\u044C_\u0436\u043E\u0432\u0442\u0435\u043D\u044C_\u043B\u0438\u0441\u0442\u043E\u043F\u0430\u0434_\u0433\u0440\u0443\u0434\u0435\u043D\u044C".split("_"),r=/D[oD]?(\[[^[\]]*\]|\s)+MMMM?/;function a(d,_,y){var l,f;return y==="m"?_?"\u0445\u0432\u0438\u043B\u0438\u043D\u0430":"\u0445\u0432\u0438\u043B\u0438\u043D\u0443":y==="h"?_?"\u0433\u043E\u0434\u0438\u043D\u0430":"\u0433\u043E\u0434\u0438\u043D\u0443":d+" "+(l=+d,f={ss:_?"\u0441\u0435\u043A\u0443\u043D\u0434\u0430_\u0441\u0435\u043A\u0443\u043D\u0434\u0438_\u0441\u0435\u043A\u0443\u043D\u0434":"\u0441\u0435\u043A\u0443\u043D\u0434\u0443_\u0441\u0435\u043A\u0443\u043D\u0434\u0438_\u0441\u0435\u043A\u0443\u043D\u0434",mm:_?"\u0445\u0432\u0438\u043B\u0438\u043D\u0430_\u0445\u0432\u0438\u043B\u0438\u043D\u0438_\u0445\u0432\u0438\u043B\u0438\u043D":"\u0445\u0432\u0438\u043B\u0438\u043D\u0443_\u0445\u0432\u0438\u043B\u0438\u043D\u0438_\u0445\u0432\u0438\u043B\u0438\u043D",hh:_?"\u0433\u043E\u0434\u0438\u043D\u0430_\u0433\u043E\u0434\u0438\u043D\u0438_\u0433\u043E\u0434\u0438\u043D":"\u0433\u043E\u0434\u0438\u043D\u0443_\u0433\u043E\u0434\u0438\u043D\u0438_\u0433\u043E\u0434\u0438\u043D",dd:"\u0434\u0435\u043D\u044C_\u0434\u043D\u0456_\u0434\u043D\u0456\u0432",MM:"\u043C\u0456\u0441\u044F\u0446\u044C_\u043C\u0456\u0441\u044F\u0446\u0456_\u043C\u0456\u0441\u044F\u0446\u0456\u0432",yy:"\u0440\u0456\u043A_\u0440\u043E\u043A\u0438_\u0440\u043E\u043A\u0456\u0432"}[y].split("_"),l%10==1&&l%100!=11?f[0]:l%10>=2&&l%10<=4&&(l%100<10||l%100>=20)?f[1]:f[2])}var u=function(d,_){return r.test(_)?i[d.month()]:e[d.month()]};u.s=e,u.f=i;var o={name:"uk",weekdays:"\u043D\u0435\u0434\u0456\u043B\u044F_\u043F\u043E\u043D\u0435\u0434\u0456\u043B\u043E\u043A_\u0432\u0456\u0432\u0442\u043E\u0440\u043E\u043A_\u0441\u0435\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0435\u0440_\u043F\u2019\u044F\u0442\u043D\u0438\u0446\u044F_\u0441\u0443\u0431\u043E\u0442\u0430".split("_"),weekdaysShort:"\u043D\u0434\u043B_\u043F\u043D\u0434_\u0432\u0442\u0440_\u0441\u0440\u0434_\u0447\u0442\u0432_\u043F\u0442\u043D_\u0441\u0431\u0442".split("_"),weekdaysMin:"\u043D\u0434_\u043F\u043D_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043F\u0442_\u0441\u0431".split("_"),months:u,monthsShort:"\u0441\u0456\u0447_\u043B\u044E\u0442_\u0431\u0435\u0440_\u043A\u0432\u0456\u0442_\u0442\u0440\u0430\u0432_\u0447\u0435\u0440\u0432_\u043B\u0438\u043F_\u0441\u0435\u0440\u043F_\u0432\u0435\u0440_\u0436\u043E\u0432\u0442_\u043B\u0438\u0441\u0442_\u0433\u0440\u0443\u0434".split("_"),weekStart:1,relativeTime:{future:"\u0437\u0430 %s",past:"%s \u0442\u043E\u043C\u0443",s:"\u0434\u0435\u043A\u0456\u043B\u044C\u043A\u0430 \u0441\u0435\u043A\u0443\u043D\u0434",m:a,mm:a,h:a,hh:a,d:"\u0434\u0435\u043D\u044C",dd:a,M:"\u043C\u0456\u0441\u044F\u0446\u044C",MM:a,y:"\u0440\u0456\u043A",yy:a},ordinal:function(d){return d},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0440.",LLL:"D MMMM YYYY \u0440., HH:mm",LLLL:"dddd, D MMMM YYYY \u0440., HH:mm"}};return s.default.locale(o,null,!0),o})});var mi=k((rn,an)=>{(function(n,t){typeof rn=="object"&&typeof an<"u"?an.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_vi=t(n.dayjs)})(rn,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"vi",weekdays:"ch\u1EE7 nh\u1EADt_th\u1EE9 hai_th\u1EE9 ba_th\u1EE9 t\u01B0_th\u1EE9 n\u0103m_th\u1EE9 s\xE1u_th\u1EE9 b\u1EA3y".split("_"),months:"th\xE1ng 1_th\xE1ng 2_th\xE1ng 3_th\xE1ng 4_th\xE1ng 5_th\xE1ng 6_th\xE1ng 7_th\xE1ng 8_th\xE1ng 9_th\xE1ng 10_th\xE1ng 11_th\xE1ng 12".split("_"),weekStart:1,weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),monthsShort:"Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [n\u0103m] YYYY",LLL:"D MMMM [n\u0103m] YYYY HH:mm",LLLL:"dddd, D MMMM [n\u0103m] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},relativeTime:{future:"%s t\u1EDBi",past:"%s tr\u01B0\u1EDBc",s:"v\xE0i gi\xE2y",m:"m\u1ED9t ph\xFAt",mm:"%d ph\xFAt",h:"m\u1ED9t gi\u1EDD",hh:"%d gi\u1EDD",d:"m\u1ED9t ng\xE0y",dd:"%d ng\xE0y",M:"m\u1ED9t th\xE1ng",MM:"%d th\xE1ng",y:"m\u1ED9t n\u0103m",yy:"%d n\u0103m"}};return s.default.locale(i,null,!0),i})});var ci=k((un,on)=>{(function(n,t){typeof un=="object"&&typeof on<"u"?on.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_zh_cn=t(n.dayjs)})(un,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"zh-cn",weekdays:"\u661F\u671F\u65E5_\u661F\u671F\u4E00_\u661F\u671F\u4E8C_\u661F\u671F\u4E09_\u661F\u671F\u56DB_\u661F\u671F\u4E94_\u661F\u671F\u516D".split("_"),weekdaysShort:"\u5468\u65E5_\u5468\u4E00_\u5468\u4E8C_\u5468\u4E09_\u5468\u56DB_\u5468\u4E94_\u5468\u516D".split("_"),weekdaysMin:"\u65E5_\u4E00_\u4E8C_\u4E09_\u56DB_\u4E94_\u516D".split("_"),months:"\u4E00\u6708_\u4E8C\u6708_\u4E09\u6708_\u56DB\u6708_\u4E94\u6708_\u516D\u6708_\u4E03\u6708_\u516B\u6708_\u4E5D\u6708_\u5341\u6708_\u5341\u4E00\u6708_\u5341\u4E8C\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),ordinal:function(e,r){return r==="W"?e+"\u5468":e+"\u65E5"},weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5E74M\u6708D\u65E5",LLL:"YYYY\u5E74M\u6708D\u65E5Ah\u70B9mm\u5206",LLLL:"YYYY\u5E74M\u6708D\u65E5ddddAh\u70B9mm\u5206",l:"YYYY/M/D",ll:"YYYY\u5E74M\u6708D\u65E5",lll:"YYYY\u5E74M\u6708D\u65E5 HH:mm",llll:"YYYY\u5E74M\u6708D\u65E5dddd HH:mm"},relativeTime:{future:"%s\u5185",past:"%s\u524D",s:"\u51E0\u79D2",m:"1 \u5206\u949F",mm:"%d \u5206\u949F",h:"1 \u5C0F\u65F6",hh:"%d \u5C0F\u65F6",d:"1 \u5929",dd:"%d \u5929",M:"1 \u4E2A\u6708",MM:"%d \u4E2A\u6708",y:"1 \u5E74",yy:"%d \u5E74"},meridiem:function(e,r){var a=100*e+r;return a<600?"\u51CC\u6668":a<900?"\u65E9\u4E0A":a<1100?"\u4E0A\u5348":a<1300?"\u4E2D\u5348":a<1800?"\u4E0B\u5348":"\u665A\u4E0A"}};return s.default.locale(i,null,!0),i})});var hi=k((dn,_n)=>{(function(n,t){typeof dn=="object"&&typeof _n<"u"?_n.exports=t(j()):typeof define=="function"&&define.amd?define(["dayjs"],t):(n=typeof globalThis<"u"?globalThis:n||self).dayjs_locale_zh_tw=t(n.dayjs)})(dn,function(n){"use strict";function t(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var s=t(n),i={name:"zh-tw",weekdays:"\u661F\u671F\u65E5_\u661F\u671F\u4E00_\u661F\u671F\u4E8C_\u661F\u671F\u4E09_\u661F\u671F\u56DB_\u661F\u671F\u4E94_\u661F\u671F\u516D".split("_"),weekdaysShort:"\u9031\u65E5_\u9031\u4E00_\u9031\u4E8C_\u9031\u4E09_\u9031\u56DB_\u9031\u4E94_\u9031\u516D".split("_"),weekdaysMin:"\u65E5_\u4E00_\u4E8C_\u4E09_\u56DB_\u4E94_\u516D".split("_"),months:"\u4E00\u6708_\u4E8C\u6708_\u4E09\u6708_\u56DB\u6708_\u4E94\u6708_\u516D\u6708_\u4E03\u6708_\u516B\u6708_\u4E5D\u6708_\u5341\u6708_\u5341\u4E00\u6708_\u5341\u4E8C\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),ordinal:function(e,r){return r==="W"?e+"\u9031":e+"\u65E5"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5E74M\u6708D\u65E5",LLL:"YYYY\u5E74M\u6708D\u65E5 HH:mm",LLLL:"YYYY\u5E74M\u6708D\u65E5dddd HH:mm",l:"YYYY/M/D",ll:"YYYY\u5E74M\u6708D\u65E5",lll:"YYYY\u5E74M\u6708D\u65E5 HH:mm",llll:"YYYY\u5E74M\u6708D\u65E5dddd HH:mm"},relativeTime:{future:"%s\u5167",past:"%s\u524D",s:"\u5E7E\u79D2",m:"1 \u5206\u9418",mm:"%d \u5206\u9418",h:"1 \u5C0F\u6642",hh:"%d \u5C0F\u6642",d:"1 \u5929",dd:"%d \u5929",M:"1 \u500B\u6708",MM:"%d \u500B\u6708",y:"1 \u5E74",yy:"%d \u5E74"},meridiem:function(e,r){var a=100*e+r;return a<600?"\u51CC\u6668":a<900?"\u65E9\u4E0A":a<1100?"\u4E0A\u5348":a<1300?"\u4E2D\u5348":a<1800?"\u4E0B\u5348":"\u665A\u4E0A"}};return s.default.locale(i,null,!0),i})});var ln=60,mn=ln*60,cn=mn*24,ji=cn*7,ae=1e3,ce=ln*ae,ge=mn*ae,hn=cn*ae,Mn=ji*ae,_e="millisecond",te="second",ne="minute",ie="hour",V="day",oe="week",R="month",he="quarter",K="year",se="date",yn="YYYY-MM-DDTHH:mm:ssZ",Se="Invalid Date",Yn=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,pn=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g;var Ln={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(t){var s=["th","st","nd","rd"],i=t%100;return"["+t+(s[(i-20)%10]||s[i]||s[0])+"]"}};var be=function(t,s,i){var e=String(t);return!e||e.length>=s?t:""+Array(s+1-e.length).join(i)+t},Ti=function(t){var s=-t.utcOffset(),i=Math.abs(s),e=Math.floor(i/60),r=i%60;return(s<=0?"+":"-")+be(e,2,"0")+":"+be(r,2,"0")},wi=function n(t,s){if(t.date()1)return n(a[0])}else{var u=t.name;ue[u]=t,e=u}return!i&&e&&(fe=e),e||!i&&fe},F=function(t,s){if(ke(t))return t.clone();var i=typeof s=="object"?s:{};return i.date=t,i.args=arguments,new ye(i)},zi=function(t,s){return F(t,{locale:s.$L,utc:s.$u,x:s.$x,$offset:s.$offset})},z=vn;z.l=Me;z.i=ke;z.w=zi;var Ai=function(t){var s=t.date,i=t.utc;if(s===null)return new Date(NaN);if(z.u(s))return new Date;if(s instanceof Date)return new Date(s);if(typeof s=="string"&&!/Z$/i.test(s)){var e=s.match(Yn);if(e){var r=e[2]-1||0,a=(e[7]||"0").substring(0,3);return i?new Date(Date.UTC(e[1],r,e[3]||1,e[4]||0,e[5]||0,e[6]||0,a)):new Date(e[1],r,e[3]||1,e[4]||0,e[5]||0,e[6]||0,a)}}return new Date(s)},ye=function(){function n(s){this.$L=Me(s.locale,null,!0),this.parse(s),this.$x=this.$x||s.x||{},this[gn]=!0}var t=n.prototype;return t.parse=function(i){this.$d=Ai(i),this.init()},t.init=function(){var i=this.$d;this.$y=i.getFullYear(),this.$M=i.getMonth(),this.$D=i.getDate(),this.$W=i.getDay(),this.$H=i.getHours(),this.$m=i.getMinutes(),this.$s=i.getSeconds(),this.$ms=i.getMilliseconds()},t.$utils=function(){return z},t.isValid=function(){return this.$d.toString()!==Se},t.isSame=function(i,e){var r=F(i);return this.startOf(e)<=r&&r<=this.endOf(e)},t.isAfter=function(i,e){return F(i)this.togglePanelVisibility(this.$refs.button)),this.$watch("focusedMonth",()=>{this.focusedMonth=+this.focusedMonth,this.focusedDate.month()!==this.focusedMonth&&(this.focusedDate=this.focusedDate.month(this.focusedMonth))}),this.$watch("focusedYear",()=>{if(this.focusedYear?.length>4&&(this.focusedYear=this.focusedYear.substring(0,4)),!this.focusedYear||this.focusedYear?.length!==4)return;let o=+this.focusedYear;Number.isInteger(o)||(o=O().tz(a).year(),this.focusedYear=o),this.focusedDate.year()!==o&&(this.focusedDate=this.focusedDate.year(o))}),this.$watch("focusedDate",()=>{let o=this.focusedDate.month(),d=this.focusedDate.year();this.focusedMonth!==o&&(this.focusedMonth=o),this.focusedYear!==d&&(this.focusedYear=d),this.setupDaysGrid()}),this.$watch("hour",()=>{let o=+this.hour;if(Number.isInteger(o)?o>23?this.hour=0:o<0?this.hour=23:this.hour=o:this.hour=0,this.isClearingState)return;let d=this.getSelectedDate()??this.focusedDate;this.setState(d.hour(this.hour??0))}),this.$watch("minute",()=>{let o=+this.minute;if(Number.isInteger(o)?o>59?this.minute=0:o<0?this.minute=59:this.minute=o:this.minute=0,this.isClearingState)return;let d=this.getSelectedDate()??this.focusedDate;this.setState(d.minute(this.minute??0))}),this.$watch("second",()=>{let o=+this.second;if(Number.isInteger(o)?o>59?this.second=0:o<0?this.second=59:this.second=o:this.second=0,this.isClearingState)return;let d=this.getSelectedDate()??this.focusedDate;this.setState(d.second(this.second??0))}),this.$watch("state",()=>{if(this.state===void 0)return;let o=this.getSelectedDate();if(o===null){this.clearState();return}this.getMaxDate()!==null&&o?.isAfter(this.getMaxDate())&&(o=null),this.getMinDate()!==null&&o?.isBefore(this.getMinDate())&&(o=null);let d=o?.hour()??0;this.hour!==d&&(this.hour=d);let _=o?.minute()??0;this.minute!==_&&(this.minute=_);let y=o?.second()??0;this.second!==y&&(this.second=y),this.setDisplayText()})},clearState:function(){this.isClearingState=!0,this.setState(null),this.hour=0,this.minute=0,this.second=0,this.$nextTick(()=>this.isClearingState=!1)},dateIsDisabled:function(u){return!!(this.$refs?.disabledDates&&JSON.parse(this.$refs.disabledDates.value??[]).some(o=>(o=O(o),o.isValid()?o.isSame(u,"day"):!1))||this.getMaxDate()&&u.isAfter(this.getMaxDate(),"day")||this.getMinDate()&&u.isBefore(this.getMinDate(),"day"))},dayIsDisabled:function(u){return this.focusedDate??(this.focusedDate=O().tz(a)),this.dateIsDisabled(this.focusedDate.date(u))},dayIsSelected:function(u){let o=this.getSelectedDate();return o===null?!1:(this.focusedDate??(this.focusedDate=O().tz(a)),o.date()===u&&o.month()===this.focusedDate.month()&&o.year()===this.focusedDate.year())},dayIsToday:function(u){let o=O().tz(a);return this.focusedDate??(this.focusedDate=o),o.date()===u&&o.month()===this.focusedDate.month()&&o.year()===this.focusedDate.year()},focusPreviousDay:function(){this.focusedDate??(this.focusedDate=O().tz(a)),this.focusedDate=this.focusedDate.subtract(1,"day")},focusPreviousWeek:function(){this.focusedDate??(this.focusedDate=O().tz(a)),this.focusedDate=this.focusedDate.subtract(1,"week")},focusNextDay:function(){this.focusedDate??(this.focusedDate=O().tz(a)),this.focusedDate=this.focusedDate.add(1,"day")},focusNextWeek:function(){this.focusedDate??(this.focusedDate=O().tz(a)),this.focusedDate=this.focusedDate.add(1,"week")},getDayLabels:function(){let u=O.weekdaysShort();return t===0?u:[...u.slice(t),...u.slice(0,t)]},getMaxDate:function(){let u=O(this.$refs.maxDate?.value);return u.isValid()?u:null},getMinDate:function(){let u=O(this.$refs.minDate?.value);return u.isValid()?u:null},getSelectedDate:function(){if(this.state===void 0||this.state===null)return null;let u=O(this.state);return u.isValid()?u:null},togglePanelVisibility:function(){this.isOpen()||(this.focusedDate=this.getSelectedDate()??this.getMinDate()??O().tz(a),this.setupDaysGrid()),this.$refs.panel.toggle(this.$refs.button)},selectDate:function(u=null){u&&this.setFocusedDay(u),this.focusedDate??(this.focusedDate=O().tz(a)),this.setState(this.focusedDate),e&&this.togglePanelVisibility()},setDisplayText:function(){this.displayText=this.getSelectedDate()?this.getSelectedDate().format(n):""},setMonths:function(){this.months=O.months()},setDayLabels:function(){this.dayLabels=this.getDayLabels()},setupDaysGrid:function(){this.focusedDate??(this.focusedDate=O().tz(a)),this.emptyDaysInFocusedMonth=Array.from({length:this.focusedDate.date(8-t).day()},(u,o)=>o+1),this.daysInFocusedMonth=Array.from({length:this.focusedDate.daysInMonth()},(u,o)=>o+1)},setFocusedDay:function(u){this.focusedDate=(this.focusedDate??O().tz(a)).date(u)},setState:function(u){if(u===null){this.state=null,this.setDisplayText();return}this.dateIsDisabled(u)||(this.state=u.hour(this.hour??0).minute(this.minute??0).second(this.second??0).format("YYYY-MM-DD HH:mm:ss"),this.setDisplayText())},isOpen:function(){return this.$refs.panel?.style.display==="block"}}}var Mi={ar:wn(),bs:$n(),ca:Cn(),ckb:Pe(),cs:zn(),cy:An(),da:In(),de:qn(),en:xn(),es:Nn(),et:En(),fa:Fn(),fi:Jn(),fr:Wn(),hi:Un(),hu:Pn(),hy:Rn(),id:Gn(),it:Zn(),ja:Vn(),ka:Kn(),km:Qn(),ku:Pe(),lt:Xn(),lv:Bn(),ms:ei(),my:ti(),nl:ni(),no:ii(),pl:si(),pt_BR:ri(),pt_PT:ai(),ro:ui(),ru:oi(),sv:di(),th:_i(),tr:fi(),uk:li(),vi:mi(),zh_CN:ci(),zh_TW:hi()};export{Ii as default}; diff --git a/public/js/filament/forms/components/file-upload.js b/public/js/filament/forms/components/file-upload.js index a5ad4ef..1152644 100644 --- a/public/js/filament/forms/components/file-upload.js +++ b/public/js/filament/forms/components/file-upload.js @@ -1,6 +1,6 @@ -var Jl=Object.defineProperty;var er=(e,t)=>{for(var i in t)Jl(e,i,{get:t[i],enumerable:!0})};var na={};er(na,{FileOrigin:()=>zt,FileStatus:()=>Et,OptionTypes:()=>Gi,Status:()=>no,create:()=>ut,destroy:()=>ft,find:()=>Wi,getOptions:()=>Hi,parse:()=>Ui,registerPlugin:()=>ve,setOptions:()=>Dt,supported:()=>Vi});var tr=e=>e instanceof HTMLElement,ir=(e,t=[],i=[])=>{let a={...e},n=[],o=[],l=()=>({...a}),r=()=>{let f=[...n];return n.length=0,f},s=()=>{let f=[...o];o.length=0,f.forEach(({type:h,data:g})=>{p(h,g)})},p=(f,h,g)=>{if(g&&!document.hidden){o.push({type:f,data:h});return}u[f]&&u[f](h),n.push({type:f,data:h})},c=(f,...h)=>m[f]?m[f](...h):null,d={getState:l,processActionQueue:r,processDispatchQueue:s,dispatch:p,query:c},m={};t.forEach(f=>{m={...f(a),...m}});let u={};return i.forEach(f=>{u={...f(p,c,a),...u}}),d},ar=(e,t,i)=>{if(typeof i=="function"){e[t]=i;return}Object.defineProperty(e,t,{...i})},te=(e,t)=>{for(let i in e)e.hasOwnProperty(i)&&t(i,e[i])},We=e=>{let t={};return te(e,i=>{ar(t,i,e[i])}),t},ne=(e,t,i=null)=>{if(i===null)return e.getAttribute(t)||e.hasAttribute(t);e.setAttribute(t,i)},nr="http://www.w3.org/2000/svg",or=["svg","path"],Oa=e=>or.includes(e),ni=(e,t,i={})=>{typeof t=="object"&&(i=t,t=null);let a=Oa(e)?document.createElementNS(nr,e):document.createElement(e);return t&&(Oa(e)?ne(a,"class",t):a.className=t),te(i,(n,o)=>{ne(a,n,o)}),a},lr=e=>(t,i)=>{typeof i<"u"&&e.children[i]?e.insertBefore(t,e.children[i]):e.appendChild(t)},rr=(e,t)=>(i,a)=>(typeof a<"u"?t.splice(a,0,i):t.push(i),i),sr=(e,t)=>i=>(t.splice(t.indexOf(i),1),i.element.parentNode&&e.removeChild(i.element),i),cr=(()=>typeof window<"u"&&typeof window.document<"u")(),En=()=>cr,dr=En()?ni("svg"):{},pr="children"in dr?e=>e.children.length:e=>e.childNodes.length,bn=(e,t,i,a)=>{let n=i[0]||e.left,o=i[1]||e.top,l=n+e.width,r=o+e.height*(a[1]||1),s={element:{...e},inner:{left:e.left,top:e.top,right:e.right,bottom:e.bottom},outer:{left:n,top:o,right:l,bottom:r}};return t.filter(p=>!p.isRectIgnored()).map(p=>p.rect).forEach(p=>{Pa(s.inner,{...p.inner}),Pa(s.outer,{...p.outer})}),Da(s.inner),s.outer.bottom+=s.element.marginBottom,s.outer.right+=s.element.marginRight,Da(s.outer),s},Pa=(e,t)=>{t.top+=e.top,t.right+=e.left,t.bottom+=e.top,t.left+=e.left,t.bottom>e.bottom&&(e.bottom=t.bottom),t.right>e.right&&(e.right=t.right)},Da=e=>{e.width=e.right-e.left,e.height=e.bottom-e.top},$e=e=>typeof e=="number",mr=(e,t,i,a=.001)=>Math.abs(e-t){let a=null,n=null,o=0,l=!1,p=We({interpolate:(c,d)=>{if(l)return;if(!($e(a)&&$e(n))){l=!0,o=0;return}let m=-(n-a)*e;o+=m/i,n+=o,o*=t,mr(n,a,o)||d?(n=a,o=0,l=!0,p.onupdate(n),p.oncomplete(n)):p.onupdate(n)},target:{set:c=>{if($e(c)&&!$e(n)&&(n=c),a===null&&(a=c,n=c),a=c,n===a||typeof a>"u"){l=!0,o=0,p.onupdate(n),p.oncomplete(n);return}l=!1},get:()=>a},resting:{get:()=>l},onupdate:c=>{},oncomplete:c=>{}});return p};var fr=e=>e<.5?2*e*e:-1+(4-2*e)*e,hr=({duration:e=500,easing:t=fr,delay:i=0}={})=>{let a=null,n,o,l=!0,r=!1,s=null,c=We({interpolate:(d,m)=>{l||s===null||(a===null&&(a=d),!(d-a=e||m?(n=1,o=r?0:1,c.onupdate(o*s),c.oncomplete(o*s),l=!0):(o=n/e,c.onupdate((n>=0?t(r?1-o:o):0)*s))))},target:{get:()=>r?0:s,set:d=>{if(s===null){s=d,c.onupdate(d),c.oncomplete(d);return}dl},onupdate:d=>{},oncomplete:d=>{}});return c},Fa={spring:ur,tween:hr},gr=(e,t,i)=>{let a=e[t]&&typeof e[t][i]=="object"?e[t][i]:e[t]||e,n=typeof a=="string"?a:a.type,o=typeof a=="object"?{...a}:{};return Fa[n]?Fa[n](o):null},ji=(e,t,i,a=!1)=>{t=Array.isArray(t)?t:[t],t.forEach(n=>{e.forEach(o=>{let l=o,r=()=>i[o],s=p=>i[o]=p;typeof o=="object"&&(l=o.key,r=o.getter||r,s=o.setter||s),!(n[l]&&!a)&&(n[l]={get:r,set:s})})})},Er=({mixinConfig:e,viewProps:t,viewInternalAPI:i,viewExternalAPI:a})=>{let n={...t},o=[];return te(e,(l,r)=>{let s=gr(r);if(!s)return;s.onupdate=c=>{t[l]=c},s.target=n[l],ji([{key:l,setter:c=>{s.target!==c&&(s.target=c)},getter:()=>t[l]}],[i,a],t,!0),o.push(s)}),{write:l=>{let r=document.hidden,s=!0;return o.forEach(p=>{p.resting||(s=!1),p.interpolate(l,r)}),s},destroy:()=>{}}},br=e=>(t,i)=>{e.addEventListener(t,i)},Tr=e=>(t,i)=>{e.removeEventListener(t,i)},Ir=({mixinConfig:e,viewProps:t,viewInternalAPI:i,viewExternalAPI:a,viewState:n,view:o})=>{let l=[],r=br(o.element),s=Tr(o.element);return a.on=(p,c)=>{l.push({type:p,fn:c}),r(p,c)},a.off=(p,c)=>{l.splice(l.findIndex(d=>d.type===p&&d.fn===c),1),s(p,c)},{write:()=>!0,destroy:()=>{l.forEach(p=>{s(p.type,p.fn)})}}},vr=({mixinConfig:e,viewProps:t,viewExternalAPI:i})=>{ji(e,i,t)},ue=e=>e!=null,xr={opacity:1,scaleX:1,scaleY:1,translateX:0,translateY:0,rotateX:0,rotateY:0,rotateZ:0,originX:0,originY:0},yr=({mixinConfig:e,viewProps:t,viewInternalAPI:i,viewExternalAPI:a,view:n})=>{let o={...t},l={};ji(e,[i,a],t);let r=()=>[t.translateX||0,t.translateY||0],s=()=>[t.scaleX||0,t.scaleY||0],p=()=>n.rect?bn(n.rect,n.childViews,r(),s()):null;return i.rect={get:p},a.rect={get:p},e.forEach(c=>{t[c]=typeof o[c]>"u"?xr[c]:o[c]}),{write:()=>{if(_r(l,t))return Rr(n.element,t),Object.assign(l,{...t}),!0},destroy:()=>{}}},_r=(e,t)=>{if(Object.keys(e).length!==Object.keys(t).length)return!0;for(let i in t)if(t[i]!==e[i])return!0;return!1},Rr=(e,{opacity:t,perspective:i,translateX:a,translateY:n,scaleX:o,scaleY:l,rotateX:r,rotateY:s,rotateZ:p,originX:c,originY:d,width:m,height:u})=>{let f="",h="";(ue(c)||ue(d))&&(h+=`transform-origin: ${c||0}px ${d||0}px;`),ue(i)&&(f+=`perspective(${i}px) `),(ue(a)||ue(n))&&(f+=`translate3d(${a||0}px, ${n||0}px, 0) `),(ue(o)||ue(l))&&(f+=`scale3d(${ue(o)?o:1}, ${ue(l)?l:1}, 1) `),ue(p)&&(f+=`rotateZ(${p}rad) `),ue(r)&&(f+=`rotateX(${r}rad) `),ue(s)&&(f+=`rotateY(${s}rad) `),f.length&&(h+=`transform:${f};`),ue(t)&&(h+=`opacity:${t};`,t===0&&(h+="visibility:hidden;"),t<1&&(h+="pointer-events:none;")),ue(u)&&(h+=`height:${u}px;`),ue(m)&&(h+=`width:${m}px;`);let g=e.elementCurrentStyle||"";(h.length!==g.length||h!==g)&&(e.style.cssText=h,e.elementCurrentStyle=h)},wr={styles:yr,listeners:Ir,animations:Er,apis:vr},za=(e={},t={},i={})=>(t.layoutCalculated||(e.paddingTop=parseInt(i.paddingTop,10)||0,e.marginTop=parseInt(i.marginTop,10)||0,e.marginRight=parseInt(i.marginRight,10)||0,e.marginBottom=parseInt(i.marginBottom,10)||0,e.marginLeft=parseInt(i.marginLeft,10)||0,t.layoutCalculated=!0),e.left=t.offsetLeft||0,e.top=t.offsetTop||0,e.width=t.offsetWidth||0,e.height=t.offsetHeight||0,e.right=e.left+e.width,e.bottom=e.top+e.height,e.scrollTop=t.scrollTop,e.hidden=t.offsetParent===null,e),oe=({tag:e="div",name:t=null,attributes:i={},read:a=()=>{},write:n=()=>{},create:o=()=>{},destroy:l=()=>{},filterFrameActionsForChild:r=(u,f)=>f,didCreateView:s=()=>{},didWriteView:p=()=>{},ignoreRect:c=!1,ignoreRectUpdate:d=!1,mixins:m=[]}={})=>(u,f={})=>{let h=ni(e,`filepond--${t}`,i),g=window.getComputedStyle(h,null),I=za(),E=null,T=!1,v=[],y=[],b={},w={},x=[n],_=[a],P=[l],O=()=>h,M=()=>v.concat(),C=()=>b,S=G=>(H,q)=>H(G,q),F=()=>E||(E=bn(I,v,[0,0],[1,1]),E),R=()=>g,L=()=>{E=null,v.forEach(q=>q._read()),!(d&&I.width&&I.height)&&za(I,h,g);let H={root:Q,props:f,rect:I};_.forEach(q=>q(H))},z=(G,H,q)=>{let re=H.length===0;return x.forEach(ee=>{ee({props:f,root:Q,actions:H,timestamp:G,shouldOptimize:q})===!1&&(re=!1)}),y.forEach(ee=>{ee.write(G)===!1&&(re=!1)}),v.filter(ee=>!!ee.element.parentNode).forEach(ee=>{ee._write(G,r(ee,H),q)||(re=!1)}),v.forEach((ee,V)=>{ee.element.parentNode||(Q.appendChild(ee.element,V),ee._read(),ee._write(G,r(ee,H),q),re=!1)}),T=re,p({props:f,root:Q,actions:H,timestamp:G}),re},D=()=>{y.forEach(G=>G.destroy()),P.forEach(G=>{G({root:Q,props:f})}),v.forEach(G=>G._destroy())},k={element:{get:O},style:{get:R},childViews:{get:M}},B={...k,rect:{get:F},ref:{get:C},is:G=>t===G,appendChild:lr(h),createChildView:S(u),linkView:G=>(v.push(G),G),unlinkView:G=>{v.splice(v.indexOf(G),1)},appendChildView:rr(h,v),removeChildView:sr(h,v),registerWriter:G=>x.push(G),registerReader:G=>_.push(G),registerDestroyer:G=>P.push(G),invalidateLayout:()=>h.layoutCalculated=!1,dispatch:u.dispatch,query:u.query},X={element:{get:O},childViews:{get:M},rect:{get:F},resting:{get:()=>T},isRectIgnored:()=>c,_read:L,_write:z,_destroy:D},Y={...k,rect:{get:()=>I}};Object.keys(m).sort((G,H)=>G==="styles"?1:H==="styles"?-1:0).forEach(G=>{let H=wr[G]({mixinConfig:m[G],viewProps:f,viewState:w,viewInternalAPI:B,viewExternalAPI:X,view:We(Y)});H&&y.push(H)});let Q=We(B);o({root:Q,props:f});let pe=pr(h);return v.forEach((G,H)=>{Q.appendChild(G.element,pe+H)}),s(Q),We(X)},Sr=(e,t,i=60)=>{let a="__framePainter";if(window[a]){window[a].readers.push(e),window[a].writers.push(t);return}window[a]={readers:[e],writers:[t]};let n=window[a],o=1e3/i,l=null,r=null,s=null,p=null,c=()=>{document.hidden?(s=()=>window.setTimeout(()=>d(performance.now()),o),p=()=>window.clearTimeout(r)):(s=()=>window.requestAnimationFrame(d),p=()=>window.cancelAnimationFrame(r))};document.addEventListener("visibilitychange",()=>{p&&p(),c(),d(performance.now())});let d=m=>{r=s(d),l||(l=m);let u=m-l;u<=o||(l=m-u%o,n.readers.forEach(f=>f()),n.writers.forEach(f=>f(m)))};return c(),d(performance.now()),{pause:()=>{p(r)}}},he=(e,t)=>({root:i,props:a,actions:n=[],timestamp:o,shouldOptimize:l})=>{n.filter(r=>e[r.type]).forEach(r=>e[r.type]({root:i,props:a,action:r.data,timestamp:o,shouldOptimize:l})),t&&t({root:i,props:a,actions:n,timestamp:o,shouldOptimize:l})},Ca=(e,t)=>t.parentNode.insertBefore(e,t),Na=(e,t)=>t.parentNode.insertBefore(e,t.nextSibling),si=e=>Array.isArray(e),Be=e=>e==null,Lr=e=>e.trim(),ci=e=>""+e,Ar=(e,t=",")=>Be(e)?[]:si(e)?e:ci(e).split(t).map(Lr).filter(i=>i.length),Tn=e=>typeof e=="boolean",In=e=>Tn(e)?e:e==="true",fe=e=>typeof e=="string",vn=e=>$e(e)?e:fe(e)?ci(e).replace(/[a-z]+/gi,""):0,ai=e=>parseInt(vn(e),10),Ba=e=>parseFloat(vn(e)),gt=e=>$e(e)&&isFinite(e)&&Math.floor(e)===e,ka=(e,t=1e3)=>{if(gt(e))return e;let i=ci(e).trim();return/MB$/i.test(i)?(i=i.replace(/MB$i/,"").trim(),ai(i)*t*t):/KB/i.test(i)?(i=i.replace(/KB$i/,"").trim(),ai(i)*t):ai(i)},Xe=e=>typeof e=="function",Mr=e=>{let t=self,i=e.split("."),a=null;for(;a=i.shift();)if(t=t[a],!t)return null;return t},Va={process:"POST",patch:"PATCH",revert:"DELETE",fetch:"GET",restore:"GET",load:"GET"},Or=e=>{let t={};return t.url=fe(e)?e:e.url||"",t.timeout=e.timeout?parseInt(e.timeout,10):0,t.headers=e.headers?e.headers:{},te(Va,i=>{t[i]=Pr(i,e[i],Va[i],t.timeout,t.headers)}),t.process=e.process||fe(e)||e.url?t.process:null,t.remove=e.remove||null,delete t.headers,t},Pr=(e,t,i,a,n)=>{if(t===null)return null;if(typeof t=="function")return t;let o={url:i==="GET"||i==="PATCH"?`?${e}=`:"",method:i,headers:n,withCredentials:!1,timeout:a,onload:null,ondata:null,onerror:null};if(fe(t))return o.url=t,o;if(Object.assign(o,t),fe(o.headers)){let l=o.headers.split(/:(.+)/);o.headers={header:l[0],value:l[1]}}return o.withCredentials=In(o.withCredentials),o},Dr=e=>Or(e),Fr=e=>e===null,ce=e=>typeof e=="object"&&e!==null,zr=e=>ce(e)&&fe(e.url)&&ce(e.process)&&ce(e.revert)&&ce(e.restore)&&ce(e.fetch),Pi=e=>si(e)?"array":Fr(e)?"null":gt(e)?"int":/^[0-9]+ ?(?:GB|MB|KB)$/gi.test(e)?"bytes":zr(e)?"api":typeof e,Cr=e=>e.replace(/{\s*'/g,'{"').replace(/'\s*}/g,'"}').replace(/'\s*:/g,'":').replace(/:\s*'/g,':"').replace(/,\s*'/g,',"').replace(/'\s*,/g,'",'),Nr={array:Ar,boolean:In,int:e=>Pi(e)==="bytes"?ka(e):ai(e),number:Ba,float:Ba,bytes:ka,string:e=>Xe(e)?e:ci(e),function:e=>Mr(e),serverapi:Dr,object:e=>{try{return JSON.parse(Cr(e))}catch{return null}}},Br=(e,t)=>Nr[t](e),xn=(e,t,i)=>{if(e===t)return e;let a=Pi(e);if(a!==i){let n=Br(e,i);if(a=Pi(n),n===null)throw`Trying to assign value with incorrect type to "${option}", allowed type: "${i}"`;e=n}return e},kr=(e,t)=>{let i=e;return{enumerable:!0,get:()=>i,set:a=>{i=xn(a,e,t)}}},Vr=e=>{let t={};return te(e,i=>{let a=e[i];t[i]=kr(a[0],a[1])}),We(t)},Gr=e=>({items:[],listUpdateTimeout:null,itemUpdateTimeout:null,processingQueue:[],options:Vr(e)}),di=(e,t="-")=>e.split(/(?=[A-Z])/).map(i=>i.toLowerCase()).join(t),Ur=(e,t)=>{let i={};return te(t,a=>{i[a]={get:()=>e.getState().options[a],set:n=>{e.dispatch(`SET_${di(a,"_").toUpperCase()}`,{value:n})}}}),i},Wr=e=>(t,i,a)=>{let n={};return te(e,o=>{let l=di(o,"_").toUpperCase();n[`SET_${l}`]=r=>{try{a.options[o]=r.value}catch{}t(`DID_SET_${l}`,{value:a.options[o]})}}),n},Hr=e=>t=>{let i={};return te(e,a=>{i[`GET_${di(a,"_").toUpperCase()}`]=n=>t.options[a]}),i},_e={API:1,DROP:2,BROWSE:3,PASTE:4,NONE:5},qi=()=>Math.random().toString(36).substring(2,11),Yi=(e,t)=>e.splice(t,1),jr=(e,t)=>{t?e():document.hidden?Promise.resolve(1).then(e):setTimeout(e,0)},pi=()=>{let e=[],t=(a,n)=>{Yi(e,e.findIndex(o=>o.event===a&&(o.cb===n||!n)))},i=(a,n,o)=>{e.filter(l=>l.event===a).map(l=>l.cb).forEach(l=>jr(()=>l(...n),o))};return{fireSync:(a,...n)=>{i(a,n,!0)},fire:(a,...n)=>{i(a,n,!1)},on:(a,n)=>{e.push({event:a,cb:n})},onOnce:(a,n)=>{e.push({event:a,cb:(...o)=>{t(a,n),n(...o)}})},off:t}},yn=(e,t,i)=>{Object.getOwnPropertyNames(e).filter(a=>!i.includes(a)).forEach(a=>Object.defineProperty(t,a,Object.getOwnPropertyDescriptor(e,a)))},qr=["fire","process","revert","load","on","off","onOnce","retryLoad","extend","archive","archived","release","released","requestProcessing","freeze"],ge=e=>{let t={};return yn(e,t,qr),t},Yr=e=>{e.forEach((t,i)=>{t.released&&Yi(e,i)})},W={INIT:1,IDLE:2,PROCESSING_QUEUED:9,PROCESSING:3,PROCESSING_COMPLETE:5,PROCESSING_ERROR:6,PROCESSING_REVERT_ERROR:10,LOADING:7,LOAD_ERROR:8},se={INPUT:1,LIMBO:2,LOCAL:3},_n=e=>/[^0-9]+/.exec(e),Rn=()=>_n(1.1.toLocaleString())[0],$r=()=>{let e=Rn(),t=1e3.toLocaleString(),i=1e3.toString();return t!==i?_n(t)[0]:e==="."?",":"."},A={BOOLEAN:"boolean",INT:"int",NUMBER:"number",STRING:"string",ARRAY:"array",OBJECT:"object",FUNCTION:"function",ACTION:"action",SERVER_API:"serverapi",REGEX:"regex"},$i=[],Ae=(e,t,i)=>new Promise((a,n)=>{let o=$i.filter(r=>r.key===e).map(r=>r.cb);if(o.length===0){a(t);return}let l=o.shift();o.reduce((r,s)=>r.then(p=>s(p,i)),l(t,i)).then(r=>a(r)).catch(r=>n(r))}),tt=(e,t,i)=>$i.filter(a=>a.key===e).map(a=>a.cb(t,i)),Xr=(e,t)=>$i.push({key:e,cb:t}),Qr=e=>Object.assign(dt,e),oi=()=>({...dt}),Zr=e=>{te(e,(t,i)=>{dt[t]&&(dt[t][0]=xn(i,dt[t][0],dt[t][1]))})},dt={id:[null,A.STRING],name:["filepond",A.STRING],disabled:[!1,A.BOOLEAN],className:[null,A.STRING],required:[!1,A.BOOLEAN],captureMethod:[null,A.STRING],allowSyncAcceptAttribute:[!0,A.BOOLEAN],allowDrop:[!0,A.BOOLEAN],allowBrowse:[!0,A.BOOLEAN],allowPaste:[!0,A.BOOLEAN],allowMultiple:[!1,A.BOOLEAN],allowReplace:[!0,A.BOOLEAN],allowRevert:[!0,A.BOOLEAN],allowRemove:[!0,A.BOOLEAN],allowProcess:[!0,A.BOOLEAN],allowReorder:[!1,A.BOOLEAN],allowDirectoriesOnly:[!1,A.BOOLEAN],storeAsFile:[!1,A.BOOLEAN],forceRevert:[!1,A.BOOLEAN],maxFiles:[null,A.INT],checkValidity:[!1,A.BOOLEAN],itemInsertLocationFreedom:[!0,A.BOOLEAN],itemInsertLocation:["before",A.STRING],itemInsertInterval:[75,A.INT],dropOnPage:[!1,A.BOOLEAN],dropOnElement:[!0,A.BOOLEAN],dropValidation:[!1,A.BOOLEAN],ignoredFiles:[[".ds_store","thumbs.db","desktop.ini"],A.ARRAY],instantUpload:[!0,A.BOOLEAN],maxParallelUploads:[2,A.INT],allowMinimumUploadDuration:[!0,A.BOOLEAN],chunkUploads:[!1,A.BOOLEAN],chunkForce:[!1,A.BOOLEAN],chunkSize:[5e6,A.INT],chunkRetryDelays:[[500,1e3,3e3],A.ARRAY],server:[null,A.SERVER_API],fileSizeBase:[1e3,A.INT],labelFileSizeBytes:["bytes",A.STRING],labelFileSizeKilobytes:["KB",A.STRING],labelFileSizeMegabytes:["MB",A.STRING],labelFileSizeGigabytes:["GB",A.STRING],labelDecimalSeparator:[Rn(),A.STRING],labelThousandsSeparator:[$r(),A.STRING],labelIdle:['Drag & Drop your files or Browse',A.STRING],labelInvalidField:["Field contains invalid files",A.STRING],labelFileWaitingForSize:["Waiting for size",A.STRING],labelFileSizeNotAvailable:["Size not available",A.STRING],labelFileCountSingular:["file in list",A.STRING],labelFileCountPlural:["files in list",A.STRING],labelFileLoading:["Loading",A.STRING],labelFileAdded:["Added",A.STRING],labelFileLoadError:["Error during load",A.STRING],labelFileRemoved:["Removed",A.STRING],labelFileRemoveError:["Error during remove",A.STRING],labelFileProcessing:["Uploading",A.STRING],labelFileProcessingComplete:["Upload complete",A.STRING],labelFileProcessingAborted:["Upload cancelled",A.STRING],labelFileProcessingError:["Error during upload",A.STRING],labelFileProcessingRevertError:["Error during revert",A.STRING],labelTapToCancel:["tap to cancel",A.STRING],labelTapToRetry:["tap to retry",A.STRING],labelTapToUndo:["tap to undo",A.STRING],labelButtonRemoveItem:["Remove",A.STRING],labelButtonAbortItemLoad:["Abort",A.STRING],labelButtonRetryItemLoad:["Retry",A.STRING],labelButtonAbortItemProcessing:["Cancel",A.STRING],labelButtonUndoItemProcessing:["Undo",A.STRING],labelButtonRetryItemProcessing:["Retry",A.STRING],labelButtonProcessItem:["Upload",A.STRING],iconRemove:['',A.STRING],iconProcess:['',A.STRING],iconRetry:['',A.STRING],iconUndo:['',A.STRING],iconDone:['',A.STRING],oninit:[null,A.FUNCTION],onwarning:[null,A.FUNCTION],onerror:[null,A.FUNCTION],onactivatefile:[null,A.FUNCTION],oninitfile:[null,A.FUNCTION],onaddfilestart:[null,A.FUNCTION],onaddfileprogress:[null,A.FUNCTION],onaddfile:[null,A.FUNCTION],onprocessfilestart:[null,A.FUNCTION],onprocessfileprogress:[null,A.FUNCTION],onprocessfileabort:[null,A.FUNCTION],onprocessfilerevert:[null,A.FUNCTION],onprocessfile:[null,A.FUNCTION],onprocessfiles:[null,A.FUNCTION],onremovefile:[null,A.FUNCTION],onpreparefile:[null,A.FUNCTION],onupdatefiles:[null,A.FUNCTION],onreorderfiles:[null,A.FUNCTION],beforeDropFile:[null,A.FUNCTION],beforeAddFile:[null,A.FUNCTION],beforeRemoveFile:[null,A.FUNCTION],beforePrepareFile:[null,A.FUNCTION],stylePanelLayout:[null,A.STRING],stylePanelAspectRatio:[null,A.STRING],styleItemPanelAspectRatio:[null,A.STRING],styleButtonRemoveItemPosition:["left",A.STRING],styleButtonProcessItemPosition:["right",A.STRING],styleLoadIndicatorPosition:["right",A.STRING],styleProgressIndicatorPosition:["right",A.STRING],styleButtonRemoveItemAlign:[!1,A.BOOLEAN],files:[[],A.ARRAY],credits:[["https://pqina.nl/","Powered by PQINA"],A.ARRAY]},Qe=(e,t)=>Be(t)?e[0]||null:gt(t)?e[t]||null:(typeof t=="object"&&(t=t.id),e.find(i=>i.id===t)||null),wn=e=>{if(Be(e))return e;if(/:/.test(e)){let t=e.split(":");return t[1]/t[0]}return parseFloat(e)},Me=e=>e.filter(t=>!t.archived),Sn={EMPTY:0,IDLE:1,ERROR:2,BUSY:3,READY:4},Zt=null,Kr=()=>{if(Zt===null)try{let e=new DataTransfer;e.items.add(new File(["hello world"],"This_Works.txt"));let t=document.createElement("input");t.setAttribute("type","file"),t.files=e.files,Zt=t.files.length===1}catch{Zt=!1}return Zt},Jr=[W.LOAD_ERROR,W.PROCESSING_ERROR,W.PROCESSING_REVERT_ERROR],es=[W.LOADING,W.PROCESSING,W.PROCESSING_QUEUED,W.INIT],ts=[W.PROCESSING_COMPLETE],is=e=>Jr.includes(e.status),as=e=>es.includes(e.status),ns=e=>ts.includes(e.status),Ga=e=>ce(e.options.server)&&(ce(e.options.server.process)||Xe(e.options.server.process)),os=e=>({GET_STATUS:()=>{let t=Me(e.items),{EMPTY:i,ERROR:a,BUSY:n,IDLE:o,READY:l}=Sn;return t.length===0?i:t.some(is)?a:t.some(as)?n:t.some(ns)?l:o},GET_ITEM:t=>Qe(e.items,t),GET_ACTIVE_ITEM:t=>Qe(Me(e.items),t),GET_ACTIVE_ITEMS:()=>Me(e.items),GET_ITEMS:()=>e.items,GET_ITEM_NAME:t=>{let i=Qe(e.items,t);return i?i.filename:null},GET_ITEM_SIZE:t=>{let i=Qe(e.items,t);return i?i.fileSize:null},GET_STYLES:()=>Object.keys(e.options).filter(t=>/^style/.test(t)).map(t=>({name:t,value:e.options[t]})),GET_PANEL_ASPECT_RATIO:()=>/circle/.test(e.options.stylePanelLayout)?1:wn(e.options.stylePanelAspectRatio),GET_ITEM_PANEL_ASPECT_RATIO:()=>e.options.styleItemPanelAspectRatio,GET_ITEMS_BY_STATUS:t=>Me(e.items).filter(i=>i.status===t),GET_TOTAL_ITEMS:()=>Me(e.items).length,SHOULD_UPDATE_FILE_INPUT:()=>e.options.storeAsFile&&Kr()&&!Ga(e),IS_ASYNC:()=>Ga(e),GET_FILE_SIZE_LABELS:t=>({labelBytes:t("GET_LABEL_FILE_SIZE_BYTES")||void 0,labelKilobytes:t("GET_LABEL_FILE_SIZE_KILOBYTES")||void 0,labelMegabytes:t("GET_LABEL_FILE_SIZE_MEGABYTES")||void 0,labelGigabytes:t("GET_LABEL_FILE_SIZE_GIGABYTES")||void 0})}),ls=e=>{let t=Me(e.items).length;if(!e.options.allowMultiple)return t===0;let i=e.options.maxFiles;return i===null||tMath.max(Math.min(i,e),t),rs=(e,t,i)=>e.splice(t,0,i),ss=(e,t,i)=>Be(t)?null:typeof i>"u"?(e.push(t),t):(i=Ln(i,0,e.length),rs(e,i,t),t),Di=e=>/^\s*data:([a-z]+\/[a-z0-9-+.]+(;[a-z-]+=[a-z0-9-]+)?)?(;base64)?,([a-z0-9!$&',()*+;=\-._~:@\/?%\s]*)\s*$/i.test(e),Ft=e=>`${e}`.split("/").pop().split("?").shift(),mi=e=>e.split(".").pop(),cs=e=>{if(typeof e!="string")return"";let t=e.split("/").pop();return/svg/.test(t)?"svg":/zip|compressed/.test(t)?"zip":/plain/.test(t)?"txt":/msword/.test(t)?"doc":/[a-z]+/.test(t)?t==="jpeg"?"jpg":t:""},At=(e,t="")=>(t+e).slice(-t.length),An=(e=new Date)=>`${e.getFullYear()}-${At(e.getMonth()+1,"00")}-${At(e.getDate(),"00")}_${At(e.getHours(),"00")}-${At(e.getMinutes(),"00")}-${At(e.getSeconds(),"00")}`,ht=(e,t,i=null,a=null)=>{let n=typeof i=="string"?e.slice(0,e.size,i):e.slice(0,e.size,e.type);return n.lastModifiedDate=new Date,e._relativePath&&(n._relativePath=e._relativePath),fe(t)||(t=An()),t&&a===null&&mi(t)?n.name=t:(a=a||cs(n.type),n.name=t+(a?"."+a:"")),n},ds=()=>window.BlobBuilder=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder,Mn=(e,t)=>{let i=ds();if(i){let a=new i;return a.append(e),a.getBlob(t)}return new Blob([e],{type:t})},ps=(e,t)=>{let i=new ArrayBuffer(e.length),a=new Uint8Array(i);for(let n=0;n(/^data:(.+);/.exec(e)||[])[1]||null,ms=e=>e.split(",")[1].replace(/\s/g,""),us=e=>atob(ms(e)),fs=e=>{let t=On(e),i=us(e);return ps(i,t)},hs=(e,t,i)=>ht(fs(e),t,null,i),gs=e=>{if(!/^content-disposition:/i.test(e))return null;let t=e.split(/filename=|filename\*=.+''/).splice(1).map(i=>i.trim().replace(/^["']|[;"']{0,2}$/g,"")).filter(i=>i.length);return t.length?decodeURI(t[t.length-1]):null},Es=e=>{if(/content-length:/i.test(e)){let t=e.match(/[0-9]+/)[0];return t?parseInt(t,10):null}return null},bs=e=>/x-content-transfer-id:/i.test(e)&&(e.split(":")[1]||"").trim()||null,Xi=e=>{let t={source:null,name:null,size:null},i=e.split(` -`);for(let a of i){let n=gs(a);if(n){t.name=n;continue}let o=Es(a);if(o){t.size=o;continue}let l=bs(a);if(l){t.source=l;continue}}return t},Ts=e=>{let t={source:null,complete:!1,progress:0,size:null,timestamp:null,duration:0,request:null},i=()=>t.progress,a=()=>{t.request&&t.request.abort&&t.request.abort()},n=()=>{let r=t.source;l.fire("init",r),r instanceof File?l.fire("load",r):r instanceof Blob?l.fire("load",ht(r,r.name)):Di(r)?l.fire("load",hs(r)):o(r)},o=r=>{if(!e){l.fire("error",{type:"error",body:"Can't load URL",code:400});return}t.timestamp=Date.now(),t.request=e(r,s=>{t.duration=Date.now()-t.timestamp,t.complete=!0,s instanceof Blob&&(s=ht(s,s.name||Ft(r))),l.fire("load",s instanceof Blob?s:s?s.body:null)},s=>{l.fire("error",typeof s=="string"?{type:"error",code:0,body:s}:s)},(s,p,c)=>{if(c&&(t.size=c),t.duration=Date.now()-t.timestamp,!s){t.progress=null;return}t.progress=p/c,l.fire("progress",t.progress)},()=>{l.fire("abort")},s=>{let p=Xi(typeof s=="string"?s:s.headers);l.fire("meta",{size:t.size||p.size,filename:p.name,source:p.source})})},l={...pi(),setSource:r=>t.source=r,getProgress:i,abort:a,load:n};return l},Ua=e=>/GET|HEAD/.test(e),Ze=(e,t,i)=>{let a={onheaders:()=>{},onprogress:()=>{},onload:()=>{},ontimeout:()=>{},onerror:()=>{},onabort:()=>{},abort:()=>{n=!0,l.abort()}},n=!1,o=!1;i={method:"POST",headers:{},withCredentials:!1,...i},t=encodeURI(t),Ua(i.method)&&e&&(t=`${t}${encodeURIComponent(typeof e=="string"?e:JSON.stringify(e))}`);let l=new XMLHttpRequest,r=Ua(i.method)?l:l.upload;return r.onprogress=s=>{n||a.onprogress(s.lengthComputable,s.loaded,s.total)},l.onreadystatechange=()=>{l.readyState<2||l.readyState===4&&l.status===0||o||(o=!0,a.onheaders(l))},l.onload=()=>{l.status>=200&&l.status<300?a.onload(l):a.onerror(l)},l.onerror=()=>a.onerror(l),l.onabort=()=>{n=!0,a.onabort()},l.ontimeout=()=>a.ontimeout(l),l.open(i.method,t,!0),gt(i.timeout)&&(l.timeout=i.timeout),Object.keys(i.headers).forEach(s=>{let p=unescape(encodeURIComponent(i.headers[s]));l.setRequestHeader(s,p)}),i.responseType&&(l.responseType=i.responseType),i.withCredentials&&(l.withCredentials=!0),l.send(e),a},ie=(e,t,i,a)=>({type:e,code:t,body:i,headers:a}),Ke=e=>t=>{e(ie("error",0,"Timeout",t.getAllResponseHeaders()))},Wa=e=>/\?/.test(e),Pt=(...e)=>{let t="";return e.forEach(i=>{t+=Wa(t)&&Wa(i)?i.replace(/\?/,"&"):i}),t},wi=(e="",t)=>{if(typeof t=="function")return t;if(!t||!fe(t.url))return null;let i=t.onload||(n=>n),a=t.onerror||(n=>null);return(n,o,l,r,s,p)=>{let c=Ze(n,Pt(e,t.url),{...t,responseType:"blob"});return c.onload=d=>{let m=d.getAllResponseHeaders(),u=Xi(m).name||Ft(n);o(ie("load",d.status,t.method==="HEAD"?null:ht(i(d.response),u),m))},c.onerror=d=>{l(ie("error",d.status,a(d.response)||d.statusText,d.getAllResponseHeaders()))},c.onheaders=d=>{p(ie("headers",d.status,null,d.getAllResponseHeaders()))},c.ontimeout=Ke(l),c.onprogress=r,c.onabort=s,c}},xe={QUEUED:0,COMPLETE:1,PROCESSING:2,ERROR:3,WAITING:4},Is=(e,t,i,a,n,o,l,r,s,p,c)=>{let d=[],{chunkTransferId:m,chunkServer:u,chunkSize:f,chunkRetryDelays:h}=c,g={serverId:m,aborted:!1},I=t.ondata||(S=>S),E=t.onload||((S,F)=>F==="HEAD"?S.getResponseHeader("Upload-Offset"):S.response),T=t.onerror||(S=>null),v=S=>{let F=new FormData;ce(n)&&F.append(i,JSON.stringify(n));let R=typeof t.headers=="function"?t.headers(a,n):{...t.headers,"Upload-Length":a.size},L={...t,headers:R},z=Ze(I(F),Pt(e,t.url),L);z.onload=D=>S(E(D,L.method)),z.onerror=D=>l(ie("error",D.status,T(D.response)||D.statusText,D.getAllResponseHeaders())),z.ontimeout=Ke(l)},y=S=>{let F=Pt(e,u.url,g.serverId),L={headers:typeof t.headers=="function"?t.headers(g.serverId):{...t.headers},method:"HEAD"},z=Ze(null,F,L);z.onload=D=>S(E(D,L.method)),z.onerror=D=>l(ie("error",D.status,T(D.response)||D.statusText,D.getAllResponseHeaders())),z.ontimeout=Ke(l)},b=Math.floor(a.size/f);for(let S=0;S<=b;S++){let F=S*f,R=a.slice(F,F+f,"application/offset+octet-stream");d[S]={index:S,size:R.size,offset:F,data:R,file:a,progress:0,retries:[...h],status:xe.QUEUED,error:null,request:null,timeout:null}}let w=()=>o(g.serverId),x=S=>S.status===xe.QUEUED||S.status===xe.ERROR,_=S=>{if(g.aborted)return;if(S=S||d.find(x),!S){d.every(k=>k.status===xe.COMPLETE)&&w();return}S.status=xe.PROCESSING,S.progress=null;let F=u.ondata||(k=>k),R=u.onerror||(k=>null),L=Pt(e,u.url,g.serverId),z=typeof u.headers=="function"?u.headers(S):{...u.headers,"Content-Type":"application/offset+octet-stream","Upload-Offset":S.offset,"Upload-Length":a.size,"Upload-Name":a.name},D=S.request=Ze(F(S.data),L,{...u,headers:z});D.onload=()=>{S.status=xe.COMPLETE,S.request=null,M()},D.onprogress=(k,B,X)=>{S.progress=k?B:null,O()},D.onerror=k=>{S.status=xe.ERROR,S.request=null,S.error=R(k.response)||k.statusText,P(S)||l(ie("error",k.status,R(k.response)||k.statusText,k.getAllResponseHeaders()))},D.ontimeout=k=>{S.status=xe.ERROR,S.request=null,P(S)||Ke(l)(k)},D.onabort=()=>{S.status=xe.QUEUED,S.request=null,s()}},P=S=>S.retries.length===0?!1:(S.status=xe.WAITING,clearTimeout(S.timeout),S.timeout=setTimeout(()=>{_(S)},S.retries.shift()),!0),O=()=>{let S=d.reduce((R,L)=>R===null||L.progress===null?null:R+L.progress,0);if(S===null)return r(!1,0,0);let F=d.reduce((R,L)=>R+L.size,0);r(!0,S,F)},M=()=>{d.filter(F=>F.status===xe.PROCESSING).length>=1||_()},C=()=>{d.forEach(S=>{clearTimeout(S.timeout),S.request&&S.request.abort()})};return g.serverId?y(S=>{g.aborted||(d.filter(F=>F.offset{F.status=xe.COMPLETE,F.progress=F.size}),M())}):v(S=>{g.aborted||(p(S),g.serverId=S,M())}),{abort:()=>{g.aborted=!0,C()}}},vs=(e,t,i,a)=>(n,o,l,r,s,p,c)=>{if(!n)return;let d=a.chunkUploads,m=d&&n.size>a.chunkSize,u=d&&(m||a.chunkForce);if(n instanceof Blob&&u)return Is(e,t,i,n,o,l,r,s,p,c,a);let f=t.ondata||(y=>y),h=t.onload||(y=>y),g=t.onerror||(y=>null),I=typeof t.headers=="function"?t.headers(n,o)||{}:{...t.headers},E={...t,headers:I};var T=new FormData;ce(o)&&T.append(i,JSON.stringify(o)),(n instanceof Blob?[{name:null,file:n}]:n).forEach(y=>{T.append(i,y.file,y.name===null?y.file.name:`${y.name}${y.file.name}`)});let v=Ze(f(T),Pt(e,t.url),E);return v.onload=y=>{l(ie("load",y.status,h(y.response),y.getAllResponseHeaders()))},v.onerror=y=>{r(ie("error",y.status,g(y.response)||y.statusText,y.getAllResponseHeaders()))},v.ontimeout=Ke(r),v.onprogress=s,v.onabort=p,v},xs=(e="",t,i,a)=>typeof t=="function"?(...n)=>t(i,...n,a):!t||!fe(t.url)?null:vs(e,t,i,a),Mt=(e="",t)=>{if(typeof t=="function")return t;if(!t||!fe(t.url))return(n,o)=>o();let i=t.onload||(n=>n),a=t.onerror||(n=>null);return(n,o,l)=>{let r=Ze(n,e+t.url,t);return r.onload=s=>{o(ie("load",s.status,i(s.response),s.getAllResponseHeaders()))},r.onerror=s=>{l(ie("error",s.status,a(s.response)||s.statusText,s.getAllResponseHeaders()))},r.ontimeout=Ke(l),r}},Pn=(e=0,t=1)=>e+Math.random()*(t-e),ys=(e,t=1e3,i=0,a=25,n=250)=>{let o=null,l=Date.now(),r=()=>{let s=Date.now()-l,p=Pn(a,n);s+p>t&&(p=s+p-t);let c=s/t;if(c>=1||document.hidden){e(1);return}e(c),o=setTimeout(r,p)};return t>0&&r(),{clear:()=>{clearTimeout(o)}}},_s=(e,t)=>{let i={complete:!1,perceivedProgress:0,perceivedPerformanceUpdater:null,progress:null,timestamp:null,perceivedDuration:0,duration:0,request:null,response:null},{allowMinimumUploadDuration:a}=t,n=(c,d)=>{let m=()=>{i.duration===0||i.progress===null||p.fire("progress",p.getProgress())},u=()=>{i.complete=!0,p.fire("load-perceived",i.response.body)};p.fire("start"),i.timestamp=Date.now(),i.perceivedPerformanceUpdater=ys(f=>{i.perceivedProgress=f,i.perceivedDuration=Date.now()-i.timestamp,m(),i.response&&i.perceivedProgress===1&&!i.complete&&u()},a?Pn(750,1500):0),i.request=e(c,d,f=>{i.response=ce(f)?f:{type:"load",code:200,body:`${f}`,headers:{}},i.duration=Date.now()-i.timestamp,i.progress=1,p.fire("load",i.response.body),(!a||a&&i.perceivedProgress===1)&&u()},f=>{i.perceivedPerformanceUpdater.clear(),p.fire("error",ce(f)?f:{type:"error",code:0,body:`${f}`})},(f,h,g)=>{i.duration=Date.now()-i.timestamp,i.progress=f?h/g:null,m()},()=>{i.perceivedPerformanceUpdater.clear(),p.fire("abort",i.response?i.response.body:null)},f=>{p.fire("transfer",f)})},o=()=>{i.request&&(i.perceivedPerformanceUpdater.clear(),i.request.abort&&i.request.abort(),i.complete=!0)},l=()=>{o(),i.complete=!1,i.perceivedProgress=0,i.progress=0,i.timestamp=null,i.perceivedDuration=0,i.duration=0,i.request=null,i.response=null},r=a?()=>i.progress?Math.min(i.progress,i.perceivedProgress):null:()=>i.progress||null,s=a?()=>Math.min(i.duration,i.perceivedDuration):()=>i.duration,p={...pi(),process:n,abort:o,getProgress:r,getDuration:s,reset:l};return p},Dn=e=>e.substring(0,e.lastIndexOf("."))||e,Rs=e=>{let t=[e.name,e.size,e.type];return e instanceof Blob||Di(e)?t[0]=e.name||An():Di(e)?(t[1]=e.length,t[2]=On(e)):fe(e)&&(t[0]=Ft(e),t[1]=0,t[2]="application/octet-stream"),{name:t[0],size:t[1],type:t[2]}},Je=e=>!!(e instanceof File||e instanceof Blob&&e.name),Fn=e=>{if(!ce(e))return e;let t=si(e)?[]:{};for(let i in e){if(!e.hasOwnProperty(i))continue;let a=e[i];t[i]=a&&ce(a)?Fn(a):a}return t},ws=(e=null,t=null,i=null)=>{let a=qi(),n={archived:!1,frozen:!1,released:!1,source:null,file:i,serverFileReference:t,transferId:null,processingAborted:!1,status:t?W.PROCESSING_COMPLETE:W.INIT,activeLoader:null,activeProcessor:null},o=null,l={},r=x=>n.status=x,s=(x,..._)=>{n.released||n.frozen||b.fire(x,..._)},p=()=>mi(n.file.name),c=()=>n.file.type,d=()=>n.file.size,m=()=>n.file,u=(x,_,P)=>{if(n.source=x,b.fireSync("init"),n.file){b.fireSync("load-skip");return}n.file=Rs(x),_.on("init",()=>{s("load-init")}),_.on("meta",O=>{n.file.size=O.size,n.file.filename=O.filename,O.source&&(e=se.LIMBO,n.serverFileReference=O.source,n.status=W.PROCESSING_COMPLETE),s("load-meta")}),_.on("progress",O=>{r(W.LOADING),s("load-progress",O)}),_.on("error",O=>{r(W.LOAD_ERROR),s("load-request-error",O)}),_.on("abort",()=>{r(W.INIT),s("load-abort")}),_.on("load",O=>{n.activeLoader=null;let M=S=>{n.file=Je(S)?S:n.file,e===se.LIMBO&&n.serverFileReference?r(W.PROCESSING_COMPLETE):r(W.IDLE),s("load")},C=S=>{n.file=O,s("load-meta"),r(W.LOAD_ERROR),s("load-file-error",S)};if(n.serverFileReference){M(O);return}P(O,M,C)}),_.setSource(x),n.activeLoader=_,_.load()},f=()=>{n.activeLoader&&n.activeLoader.load()},h=()=>{if(n.activeLoader){n.activeLoader.abort();return}r(W.INIT),s("load-abort")},g=(x,_)=>{if(n.processingAborted){n.processingAborted=!1;return}if(r(W.PROCESSING),o=null,!(n.file instanceof Blob)){b.on("load",()=>{g(x,_)});return}x.on("load",M=>{n.transferId=null,n.serverFileReference=M}),x.on("transfer",M=>{n.transferId=M}),x.on("load-perceived",M=>{n.activeProcessor=null,n.transferId=null,n.serverFileReference=M,r(W.PROCESSING_COMPLETE),s("process-complete",M)}),x.on("start",()=>{s("process-start")}),x.on("error",M=>{n.activeProcessor=null,r(W.PROCESSING_ERROR),s("process-error",M)}),x.on("abort",M=>{n.activeProcessor=null,n.serverFileReference=M,r(W.IDLE),s("process-abort"),o&&o()}),x.on("progress",M=>{s("process-progress",M)});let P=M=>{n.archived||x.process(M,{...l})},O=console.error;_(n.file,P,O),n.activeProcessor=x},I=()=>{n.processingAborted=!1,r(W.PROCESSING_QUEUED)},E=()=>new Promise(x=>{if(!n.activeProcessor){n.processingAborted=!0,r(W.IDLE),s("process-abort"),x();return}o=()=>{x()},n.activeProcessor.abort()}),T=(x,_)=>new Promise((P,O)=>{let M=n.serverFileReference!==null?n.serverFileReference:n.transferId;if(M===null){P();return}x(M,()=>{n.serverFileReference=null,n.transferId=null,P()},C=>{if(!_){P();return}r(W.PROCESSING_REVERT_ERROR),s("process-revert-error"),O(C)}),r(W.IDLE),s("process-revert")}),v=(x,_,P)=>{let O=x.split("."),M=O[0],C=O.pop(),S=l;O.forEach(F=>S=S[F]),JSON.stringify(S[C])!==JSON.stringify(_)&&(S[C]=_,s("metadata-update",{key:M,value:l[M],silent:P}))},b={id:{get:()=>a},origin:{get:()=>e,set:x=>e=x},serverId:{get:()=>n.serverFileReference},transferId:{get:()=>n.transferId},status:{get:()=>n.status},filename:{get:()=>n.file.name},filenameWithoutExtension:{get:()=>Dn(n.file.name)},fileExtension:{get:p},fileType:{get:c},fileSize:{get:d},file:{get:m},relativePath:{get:()=>n.file._relativePath},source:{get:()=>n.source},getMetadata:x=>Fn(x?l[x]:l),setMetadata:(x,_,P)=>{if(ce(x)){let O=x;return Object.keys(O).forEach(M=>{v(M,O[M],_)}),x}return v(x,_,P),_},extend:(x,_)=>w[x]=_,abortLoad:h,retryLoad:f,requestProcessing:I,abortProcessing:E,load:u,process:g,revert:T,...pi(),freeze:()=>n.frozen=!0,release:()=>n.released=!0,released:{get:()=>n.released},archive:()=>n.archived=!0,archived:{get:()=>n.archived},setFile:x=>n.file=x},w=We(b);return w},Ss=(e,t)=>Be(t)?0:fe(t)?e.findIndex(i=>i.id===t):-1,Ha=(e,t)=>{let i=Ss(e,t);if(!(i<0))return e[i]||null},ja=(e,t,i,a,n,o)=>{let l=Ze(null,e,{method:"GET",responseType:"blob"});return l.onload=r=>{let s=r.getAllResponseHeaders(),p=Xi(s).name||Ft(e);t(ie("load",r.status,ht(r.response,p),s))},l.onerror=r=>{i(ie("error",r.status,r.statusText,r.getAllResponseHeaders()))},l.onheaders=r=>{o(ie("headers",r.status,null,r.getAllResponseHeaders()))},l.ontimeout=Ke(i),l.onprogress=a,l.onabort=n,l},qa=e=>(e.indexOf("//")===0&&(e=location.protocol+e),e.toLowerCase().replace("blob:","").replace(/([a-z])?:\/\//,"$1").split("/")[0]),Ls=e=>(e.indexOf(":")>-1||e.indexOf("//")>-1)&&qa(location.href)!==qa(e),Kt=e=>(...t)=>Xe(e)?e(...t):e,As=e=>!Je(e.file),Si=(e,t)=>{clearTimeout(t.listUpdateTimeout),t.listUpdateTimeout=setTimeout(()=>{e("DID_UPDATE_ITEMS",{items:Me(t.items)})},0)},Ya=(e,...t)=>new Promise(i=>{if(!e)return i(!0);let a=e(...t);if(a==null)return i(!0);if(typeof a=="boolean")return i(a);typeof a.then=="function"&&a.then(i)}),Li=(e,t)=>{e.items.sort((i,a)=>t(ge(i),ge(a)))},ye=(e,t)=>({query:i,success:a=()=>{},failure:n=()=>{},...o}={})=>{let l=Qe(e.items,i);if(!l){n({error:ie("error",0,"Item not found"),file:null});return}t(l,a,n,o||{})},Ms=(e,t,i)=>({ABORT_ALL:()=>{Me(i.items).forEach(a=>{a.freeze(),a.abortLoad(),a.abortProcessing()})},DID_SET_FILES:({value:a=[]})=>{let n=a.map(l=>({source:l.source?l.source:l,options:l.options})),o=Me(i.items);o.forEach(l=>{n.find(r=>r.source===l.source||r.source===l.file)||e("REMOVE_ITEM",{query:l,remove:!1})}),o=Me(i.items),n.forEach((l,r)=>{o.find(s=>s.source===l.source||s.file===l.source)||e("ADD_ITEM",{...l,interactionMethod:_e.NONE,index:r})})},DID_UPDATE_ITEM_METADATA:({id:a,action:n,change:o})=>{o.silent||(clearTimeout(i.itemUpdateTimeout),i.itemUpdateTimeout=setTimeout(()=>{let l=Ha(i.items,a);if(!t("IS_ASYNC")){Ae("SHOULD_PREPARE_OUTPUT",!1,{item:l,query:t,action:n,change:o}).then(c=>{let d=t("GET_BEFORE_PREPARE_FILE");d&&(c=d(l,c)),c&&e("REQUEST_PREPARE_OUTPUT",{query:a,item:l,success:m=>{e("DID_PREPARE_OUTPUT",{id:a,file:m})}},!0)});return}l.origin===se.LOCAL&&e("DID_LOAD_ITEM",{id:l.id,error:null,serverFileReference:l.source});let r=()=>{setTimeout(()=>{e("REQUEST_ITEM_PROCESSING",{query:a})},32)},s=c=>{l.revert(Mt(i.options.server.url,i.options.server.revert),t("GET_FORCE_REVERT")).then(c?r:()=>{}).catch(()=>{})},p=c=>{l.abortProcessing().then(c?r:()=>{})};if(l.status===W.PROCESSING_COMPLETE)return s(i.options.instantUpload);if(l.status===W.PROCESSING)return p(i.options.instantUpload);i.options.instantUpload&&r()},0))},MOVE_ITEM:({query:a,index:n})=>{let o=Qe(i.items,a);if(!o)return;let l=i.items.indexOf(o);n=Ln(n,0,i.items.length-1),l!==n&&i.items.splice(n,0,i.items.splice(l,1)[0])},SORT:({compare:a})=>{Li(i,a),e("DID_SORT_ITEMS",{items:t("GET_ACTIVE_ITEMS")})},ADD_ITEMS:({items:a,index:n,interactionMethod:o,success:l=()=>{},failure:r=()=>{}})=>{let s=n;if(n===-1||typeof n>"u"){let u=t("GET_ITEM_INSERT_LOCATION"),f=t("GET_TOTAL_ITEMS");s=u==="before"?0:f}let p=t("GET_IGNORED_FILES"),c=u=>Je(u)?!p.includes(u.name.toLowerCase()):!Be(u),m=a.filter(c).map(u=>new Promise((f,h)=>{e("ADD_ITEM",{interactionMethod:o,source:u.source||u,success:f,failure:h,index:s++,options:u.options||{}})}));Promise.all(m).then(l).catch(r)},ADD_ITEM:({source:a,index:n=-1,interactionMethod:o,success:l=()=>{},failure:r=()=>{},options:s={}})=>{if(Be(a)){r({error:ie("error",0,"No source"),file:null});return}if(Je(a)&&i.options.ignoredFiles.includes(a.name.toLowerCase()))return;if(!ls(i)){if(i.options.allowMultiple||!i.options.allowMultiple&&!i.options.allowReplace){let E=ie("warning",0,"Max files");e("DID_THROW_MAX_FILES",{source:a,error:E}),r({error:E,file:null});return}let I=Me(i.items)[0];if(I.status===W.PROCESSING_COMPLETE||I.status===W.PROCESSING_REVERT_ERROR){let E=t("GET_FORCE_REVERT");if(I.revert(Mt(i.options.server.url,i.options.server.revert),E).then(()=>{E&&e("ADD_ITEM",{source:a,index:n,interactionMethod:o,success:l,failure:r,options:s})}).catch(()=>{}),E)return}e("REMOVE_ITEM",{query:I.id})}let p=s.type==="local"?se.LOCAL:s.type==="limbo"?se.LIMBO:se.INPUT,c=ws(p,p===se.INPUT?null:a,s.file);Object.keys(s.metadata||{}).forEach(I=>{c.setMetadata(I,s.metadata[I])}),tt("DID_CREATE_ITEM",c,{query:t,dispatch:e});let d=t("GET_ITEM_INSERT_LOCATION");i.options.itemInsertLocationFreedom||(n=d==="before"?-1:i.items.length),ss(i.items,c,n),Xe(d)&&a&&Li(i,d);let m=c.id;c.on("init",()=>{e("DID_INIT_ITEM",{id:m})}),c.on("load-init",()=>{e("DID_START_ITEM_LOAD",{id:m})}),c.on("load-meta",()=>{e("DID_UPDATE_ITEM_META",{id:m})}),c.on("load-progress",I=>{e("DID_UPDATE_ITEM_LOAD_PROGRESS",{id:m,progress:I})}),c.on("load-request-error",I=>{let E=Kt(i.options.labelFileLoadError)(I);if(I.code>=400&&I.code<500){e("DID_THROW_ITEM_INVALID",{id:m,error:I,status:{main:E,sub:`${I.code} (${I.body})`}}),r({error:I,file:ge(c)});return}e("DID_THROW_ITEM_LOAD_ERROR",{id:m,error:I,status:{main:E,sub:i.options.labelTapToRetry}})}),c.on("load-file-error",I=>{e("DID_THROW_ITEM_INVALID",{id:m,error:I.status,status:I.status}),r({error:I.status,file:ge(c)})}),c.on("load-abort",()=>{e("REMOVE_ITEM",{query:m})}),c.on("load-skip",()=>{c.on("metadata-update",I=>{Je(c.file)&&e("DID_UPDATE_ITEM_METADATA",{id:m,change:I})}),e("COMPLETE_LOAD_ITEM",{query:m,item:c,data:{source:a,success:l}})}),c.on("load",()=>{let I=E=>{if(!E){e("REMOVE_ITEM",{query:m});return}c.on("metadata-update",T=>{e("DID_UPDATE_ITEM_METADATA",{id:m,change:T})}),Ae("SHOULD_PREPARE_OUTPUT",!1,{item:c,query:t}).then(T=>{let v=t("GET_BEFORE_PREPARE_FILE");v&&(T=v(c,T));let y=()=>{e("COMPLETE_LOAD_ITEM",{query:m,item:c,data:{source:a,success:l}}),Si(e,i)};if(T){e("REQUEST_PREPARE_OUTPUT",{query:m,item:c,success:b=>{e("DID_PREPARE_OUTPUT",{id:m,file:b}),y()}},!0);return}y()})};Ae("DID_LOAD_ITEM",c,{query:t,dispatch:e}).then(()=>{Ya(t("GET_BEFORE_ADD_FILE"),ge(c)).then(I)}).catch(E=>{if(!E||!E.error||!E.status)return I(!1);e("DID_THROW_ITEM_INVALID",{id:m,error:E.error,status:E.status})})}),c.on("process-start",()=>{e("DID_START_ITEM_PROCESSING",{id:m})}),c.on("process-progress",I=>{e("DID_UPDATE_ITEM_PROCESS_PROGRESS",{id:m,progress:I})}),c.on("process-error",I=>{e("DID_THROW_ITEM_PROCESSING_ERROR",{id:m,error:I,status:{main:Kt(i.options.labelFileProcessingError)(I),sub:i.options.labelTapToRetry}})}),c.on("process-revert-error",I=>{e("DID_THROW_ITEM_PROCESSING_REVERT_ERROR",{id:m,error:I,status:{main:Kt(i.options.labelFileProcessingRevertError)(I),sub:i.options.labelTapToRetry}})}),c.on("process-complete",I=>{e("DID_COMPLETE_ITEM_PROCESSING",{id:m,error:null,serverFileReference:I}),e("DID_DEFINE_VALUE",{id:m,value:I})}),c.on("process-abort",()=>{e("DID_ABORT_ITEM_PROCESSING",{id:m})}),c.on("process-revert",()=>{e("DID_REVERT_ITEM_PROCESSING",{id:m}),e("DID_DEFINE_VALUE",{id:m,value:null})}),e("DID_ADD_ITEM",{id:m,index:n,interactionMethod:o}),Si(e,i);let{url:u,load:f,restore:h,fetch:g}=i.options.server||{};c.load(a,Ts(p===se.INPUT?fe(a)&&Ls(a)&&g?wi(u,g):ja:p===se.LIMBO?wi(u,h):wi(u,f)),(I,E,T)=>{Ae("LOAD_FILE",I,{query:t}).then(E).catch(T)})},REQUEST_PREPARE_OUTPUT:({item:a,success:n,failure:o=()=>{}})=>{let l={error:ie("error",0,"Item not found"),file:null};if(a.archived)return o(l);Ae("PREPARE_OUTPUT",a.file,{query:t,item:a}).then(r=>{Ae("COMPLETE_PREPARE_OUTPUT",r,{query:t,item:a}).then(s=>{if(a.archived)return o(l);n(s)})})},COMPLETE_LOAD_ITEM:({item:a,data:n})=>{let{success:o,source:l}=n,r=t("GET_ITEM_INSERT_LOCATION");if(Xe(r)&&l&&Li(i,r),e("DID_LOAD_ITEM",{id:a.id,error:null,serverFileReference:a.origin===se.INPUT?null:l}),o(ge(a)),a.origin===se.LOCAL){e("DID_LOAD_LOCAL_ITEM",{id:a.id});return}if(a.origin===se.LIMBO){e("DID_COMPLETE_ITEM_PROCESSING",{id:a.id,error:null,serverFileReference:l}),e("DID_DEFINE_VALUE",{id:a.id,value:a.serverId||l});return}t("IS_ASYNC")&&i.options.instantUpload&&e("REQUEST_ITEM_PROCESSING",{query:a.id})},RETRY_ITEM_LOAD:ye(i,a=>{a.retryLoad()}),REQUEST_ITEM_PREPARE:ye(i,(a,n,o)=>{e("REQUEST_PREPARE_OUTPUT",{query:a.id,item:a,success:l=>{e("DID_PREPARE_OUTPUT",{id:a.id,file:l}),n({file:a,output:l})},failure:o},!0)}),REQUEST_ITEM_PROCESSING:ye(i,(a,n,o)=>{if(!(a.status===W.IDLE||a.status===W.PROCESSING_ERROR)){let r=()=>e("REQUEST_ITEM_PROCESSING",{query:a,success:n,failure:o}),s=()=>document.hidden?r():setTimeout(r,32);a.status===W.PROCESSING_COMPLETE||a.status===W.PROCESSING_REVERT_ERROR?a.revert(Mt(i.options.server.url,i.options.server.revert),t("GET_FORCE_REVERT")).then(s).catch(()=>{}):a.status===W.PROCESSING&&a.abortProcessing().then(s);return}a.status!==W.PROCESSING_QUEUED&&(a.requestProcessing(),e("DID_REQUEST_ITEM_PROCESSING",{id:a.id}),e("PROCESS_ITEM",{query:a,success:n,failure:o},!0))}),PROCESS_ITEM:ye(i,(a,n,o)=>{let l=t("GET_MAX_PARALLEL_UPLOADS");if(t("GET_ITEMS_BY_STATUS",W.PROCESSING).length===l){i.processingQueue.push({id:a.id,success:n,failure:o});return}if(a.status===W.PROCESSING)return;let s=()=>{let c=i.processingQueue.shift();if(!c)return;let{id:d,success:m,failure:u}=c,f=Qe(i.items,d);if(!f||f.archived){s();return}e("PROCESS_ITEM",{query:d,success:m,failure:u},!0)};a.onOnce("process-complete",()=>{n(ge(a)),s();let c=i.options.server;if(i.options.instantUpload&&a.origin===se.LOCAL&&Xe(c.remove)){let u=()=>{};a.origin=se.LIMBO,i.options.server.remove(a.source,u,u)}t("GET_ITEMS_BY_STATUS",W.PROCESSING_COMPLETE).length===i.items.length&&e("DID_COMPLETE_ITEM_PROCESSING_ALL")}),a.onOnce("process-error",c=>{o({error:c,file:ge(a)}),s()});let p=i.options;a.process(_s(xs(p.server.url,p.server.process,p.name,{chunkTransferId:a.transferId,chunkServer:p.server.patch,chunkUploads:p.chunkUploads,chunkForce:p.chunkForce,chunkSize:p.chunkSize,chunkRetryDelays:p.chunkRetryDelays}),{allowMinimumUploadDuration:t("GET_ALLOW_MINIMUM_UPLOAD_DURATION")}),(c,d,m)=>{Ae("PREPARE_OUTPUT",c,{query:t,item:a}).then(u=>{e("DID_PREPARE_OUTPUT",{id:a.id,file:u}),d(u)}).catch(m)})}),RETRY_ITEM_PROCESSING:ye(i,a=>{e("REQUEST_ITEM_PROCESSING",{query:a})}),REQUEST_REMOVE_ITEM:ye(i,a=>{Ya(t("GET_BEFORE_REMOVE_FILE"),ge(a)).then(n=>{n&&e("REMOVE_ITEM",{query:a})})}),RELEASE_ITEM:ye(i,a=>{a.release()}),REMOVE_ITEM:ye(i,(a,n,o,l)=>{let r=()=>{let p=a.id;Ha(i.items,p).archive(),e("DID_REMOVE_ITEM",{error:null,id:p,item:a}),Si(e,i),n(ge(a))},s=i.options.server;a.origin===se.LOCAL&&s&&Xe(s.remove)&&l.remove!==!1?(e("DID_START_ITEM_REMOVE",{id:a.id}),s.remove(a.source,()=>r(),p=>{e("DID_THROW_ITEM_REMOVE_ERROR",{id:a.id,error:ie("error",0,p,null),status:{main:Kt(i.options.labelFileRemoveError)(p),sub:i.options.labelTapToRetry}})})):((l.revert&&a.origin!==se.LOCAL&&a.serverId!==null||i.options.chunkUploads&&a.file.size>i.options.chunkSize||i.options.chunkUploads&&i.options.chunkForce)&&a.revert(Mt(i.options.server.url,i.options.server.revert),t("GET_FORCE_REVERT")),r())}),ABORT_ITEM_LOAD:ye(i,a=>{a.abortLoad()}),ABORT_ITEM_PROCESSING:ye(i,a=>{if(a.serverId){e("REVERT_ITEM_PROCESSING",{id:a.id});return}a.abortProcessing().then(()=>{i.options.instantUpload&&e("REMOVE_ITEM",{query:a.id})})}),REQUEST_REVERT_ITEM_PROCESSING:ye(i,a=>{if(!i.options.instantUpload){e("REVERT_ITEM_PROCESSING",{query:a});return}let n=r=>{r&&e("REVERT_ITEM_PROCESSING",{query:a})},o=t("GET_BEFORE_REMOVE_FILE");if(!o)return n(!0);let l=o(ge(a));if(l==null)return n(!0);if(typeof l=="boolean")return n(l);typeof l.then=="function"&&l.then(n)}),REVERT_ITEM_PROCESSING:ye(i,a=>{a.revert(Mt(i.options.server.url,i.options.server.revert),t("GET_FORCE_REVERT")).then(()=>{(i.options.instantUpload||As(a))&&e("REMOVE_ITEM",{query:a.id})}).catch(()=>{})}),SET_OPTIONS:({options:a})=>{let n=Object.keys(a),o=Os.filter(r=>n.includes(r));[...o,...Object.keys(a).filter(r=>!o.includes(r))].forEach(r=>{e(`SET_${di(r,"_").toUpperCase()}`,{value:a[r]})})}}),Os=["server"],Qi=e=>e,ke=e=>document.createElement(e),ae=(e,t)=>{let i=e.childNodes[0];i?t!==i.nodeValue&&(i.nodeValue=t):(i=document.createTextNode(t),e.appendChild(i))},$a=(e,t,i,a)=>{let n=(a%360-90)*Math.PI/180;return{x:e+i*Math.cos(n),y:t+i*Math.sin(n)}},Ps=(e,t,i,a,n,o)=>{let l=$a(e,t,i,n),r=$a(e,t,i,a);return["M",l.x,l.y,"A",i,i,0,o,0,r.x,r.y].join(" ")},Ds=(e,t,i,a,n)=>{let o=1;return n>a&&n-a<=.5&&(o=0),a>n&&a-n>=.5&&(o=0),Ps(e,t,i,Math.min(.9999,a)*360,Math.min(.9999,n)*360,o)},Fs=({root:e,props:t})=>{t.spin=!1,t.progress=0,t.opacity=0;let i=ni("svg");e.ref.path=ni("path",{"stroke-width":2,"stroke-linecap":"round"}),i.appendChild(e.ref.path),e.ref.svg=i,e.appendChild(i)},zs=({root:e,props:t})=>{if(t.opacity===0)return;t.align&&(e.element.dataset.align=t.align);let i=parseInt(ne(e.ref.path,"stroke-width"),10),a=e.rect.element.width*.5,n=0,o=0;t.spin?(n=0,o=.5):(n=0,o=t.progress);let l=Ds(a,a,a-i,n,o);ne(e.ref.path,"d",l),ne(e.ref.path,"stroke-opacity",t.spin||t.progress>0?1:0)},Xa=oe({tag:"div",name:"progress-indicator",ignoreRectUpdate:!0,ignoreRect:!0,create:Fs,write:zs,mixins:{apis:["progress","spin","align"],styles:["opacity"],animations:{opacity:{type:"tween",duration:500},progress:{type:"spring",stiffness:.95,damping:.65,mass:10}}}}),Cs=({root:e,props:t})=>{e.element.innerHTML=(t.icon||"")+`${t.label}`,t.isDisabled=!1},Ns=({root:e,props:t})=>{let{isDisabled:i}=t,a=e.query("GET_DISABLED")||t.opacity===0;a&&!i?(t.isDisabled=!0,ne(e.element,"disabled","disabled")):!a&&i&&(t.isDisabled=!1,e.element.removeAttribute("disabled"))},zn=oe({tag:"button",attributes:{type:"button"},ignoreRect:!0,ignoreRectUpdate:!0,name:"file-action-button",mixins:{apis:["label"],styles:["translateX","translateY","scaleX","scaleY","opacity"],animations:{scaleX:"spring",scaleY:"spring",translateX:"spring",translateY:"spring",opacity:{type:"tween",duration:250}},listeners:!0},create:Cs,write:Ns}),Cn=(e,t=".",i=1e3,a={})=>{let{labelBytes:n="bytes",labelKilobytes:o="KB",labelMegabytes:l="MB",labelGigabytes:r="GB"}=a;e=Math.round(Math.abs(e));let s=i,p=i*i,c=i*i*i;return ee.toFixed(t).split(".").filter(a=>a!=="0").join(i),Bs=({root:e,props:t})=>{let i=ke("span");i.className="filepond--file-info-main",ne(i,"aria-hidden","true"),e.appendChild(i),e.ref.fileName=i;let a=ke("span");a.className="filepond--file-info-sub",e.appendChild(a),e.ref.fileSize=a,ae(a,e.query("GET_LABEL_FILE_WAITING_FOR_SIZE")),ae(i,Qi(e.query("GET_ITEM_NAME",t.id)))},Fi=({root:e,props:t})=>{ae(e.ref.fileSize,Cn(e.query("GET_ITEM_SIZE",t.id),".",e.query("GET_FILE_SIZE_BASE"),e.query("GET_FILE_SIZE_LABELS",e.query))),ae(e.ref.fileName,Qi(e.query("GET_ITEM_NAME",t.id)))},Za=({root:e,props:t})=>{if(gt(e.query("GET_ITEM_SIZE",t.id))){Fi({root:e,props:t});return}ae(e.ref.fileSize,e.query("GET_LABEL_FILE_SIZE_NOT_AVAILABLE"))},ks=oe({name:"file-info",ignoreRect:!0,ignoreRectUpdate:!0,write:he({DID_LOAD_ITEM:Fi,DID_UPDATE_ITEM_META:Fi,DID_THROW_ITEM_LOAD_ERROR:Za,DID_THROW_ITEM_INVALID:Za}),didCreateView:e=>{tt("CREATE_VIEW",{...e,view:e})},create:Bs,mixins:{styles:["translateX","translateY"],animations:{translateX:"spring",translateY:"spring"}}}),Nn=e=>Math.round(e*100),Vs=({root:e})=>{let t=ke("span");t.className="filepond--file-status-main",e.appendChild(t),e.ref.main=t;let i=ke("span");i.className="filepond--file-status-sub",e.appendChild(i),e.ref.sub=i,Bn({root:e,action:{progress:null}})},Bn=({root:e,action:t})=>{let i=t.progress===null?e.query("GET_LABEL_FILE_LOADING"):`${e.query("GET_LABEL_FILE_LOADING")} ${Nn(t.progress)}%`;ae(e.ref.main,i),ae(e.ref.sub,e.query("GET_LABEL_TAP_TO_CANCEL"))},Gs=({root:e,action:t})=>{let i=t.progress===null?e.query("GET_LABEL_FILE_PROCESSING"):`${e.query("GET_LABEL_FILE_PROCESSING")} ${Nn(t.progress)}%`;ae(e.ref.main,i),ae(e.ref.sub,e.query("GET_LABEL_TAP_TO_CANCEL"))},Us=({root:e})=>{ae(e.ref.main,e.query("GET_LABEL_FILE_PROCESSING")),ae(e.ref.sub,e.query("GET_LABEL_TAP_TO_CANCEL"))},Ws=({root:e})=>{ae(e.ref.main,e.query("GET_LABEL_FILE_PROCESSING_ABORTED")),ae(e.ref.sub,e.query("GET_LABEL_TAP_TO_RETRY"))},Hs=({root:e})=>{ae(e.ref.main,e.query("GET_LABEL_FILE_PROCESSING_COMPLETE")),ae(e.ref.sub,e.query("GET_LABEL_TAP_TO_UNDO"))},Ka=({root:e})=>{ae(e.ref.main,""),ae(e.ref.sub,"")},Ot=({root:e,action:t})=>{ae(e.ref.main,t.status.main),ae(e.ref.sub,t.status.sub)},js=oe({name:"file-status",ignoreRect:!0,ignoreRectUpdate:!0,write:he({DID_LOAD_ITEM:Ka,DID_REVERT_ITEM_PROCESSING:Ka,DID_REQUEST_ITEM_PROCESSING:Us,DID_ABORT_ITEM_PROCESSING:Ws,DID_COMPLETE_ITEM_PROCESSING:Hs,DID_UPDATE_ITEM_PROCESS_PROGRESS:Gs,DID_UPDATE_ITEM_LOAD_PROGRESS:Bn,DID_THROW_ITEM_LOAD_ERROR:Ot,DID_THROW_ITEM_INVALID:Ot,DID_THROW_ITEM_PROCESSING_ERROR:Ot,DID_THROW_ITEM_PROCESSING_REVERT_ERROR:Ot,DID_THROW_ITEM_REMOVE_ERROR:Ot}),didCreateView:e=>{tt("CREATE_VIEW",{...e,view:e})},create:Vs,mixins:{styles:["translateX","translateY","opacity"],animations:{opacity:{type:"tween",duration:250},translateX:"spring",translateY:"spring"}}}),zi={AbortItemLoad:{label:"GET_LABEL_BUTTON_ABORT_ITEM_LOAD",action:"ABORT_ITEM_LOAD",className:"filepond--action-abort-item-load",align:"LOAD_INDICATOR_POSITION"},RetryItemLoad:{label:"GET_LABEL_BUTTON_RETRY_ITEM_LOAD",action:"RETRY_ITEM_LOAD",icon:"GET_ICON_RETRY",className:"filepond--action-retry-item-load",align:"BUTTON_PROCESS_ITEM_POSITION"},RemoveItem:{label:"GET_LABEL_BUTTON_REMOVE_ITEM",action:"REQUEST_REMOVE_ITEM",icon:"GET_ICON_REMOVE",className:"filepond--action-remove-item",align:"BUTTON_REMOVE_ITEM_POSITION"},ProcessItem:{label:"GET_LABEL_BUTTON_PROCESS_ITEM",action:"REQUEST_ITEM_PROCESSING",icon:"GET_ICON_PROCESS",className:"filepond--action-process-item",align:"BUTTON_PROCESS_ITEM_POSITION"},AbortItemProcessing:{label:"GET_LABEL_BUTTON_ABORT_ITEM_PROCESSING",action:"ABORT_ITEM_PROCESSING",className:"filepond--action-abort-item-processing",align:"BUTTON_PROCESS_ITEM_POSITION"},RetryItemProcessing:{label:"GET_LABEL_BUTTON_RETRY_ITEM_PROCESSING",action:"RETRY_ITEM_PROCESSING",icon:"GET_ICON_RETRY",className:"filepond--action-retry-item-processing",align:"BUTTON_PROCESS_ITEM_POSITION"},RevertItemProcessing:{label:"GET_LABEL_BUTTON_UNDO_ITEM_PROCESSING",action:"REQUEST_REVERT_ITEM_PROCESSING",icon:"GET_ICON_UNDO",className:"filepond--action-revert-item-processing",align:"BUTTON_PROCESS_ITEM_POSITION"}},Ci=[];te(zi,e=>{Ci.push(e)});var Ie=e=>{if(Ni(e)==="right")return 0;let t=e.ref.buttonRemoveItem.rect.element;return t.hidden?null:t.width+t.left},qs=e=>e.ref.buttonAbortItemLoad.rect.element.width,Jt=e=>Math.floor(e.ref.buttonRemoveItem.rect.element.height/4),Ys=e=>Math.floor(e.ref.buttonRemoveItem.rect.element.left/2),$s=e=>e.query("GET_STYLE_LOAD_INDICATOR_POSITION"),Xs=e=>e.query("GET_STYLE_PROGRESS_INDICATOR_POSITION"),Ni=e=>e.query("GET_STYLE_BUTTON_REMOVE_ITEM_POSITION"),Qs={buttonAbortItemLoad:{opacity:0},buttonRetryItemLoad:{opacity:0},buttonRemoveItem:{opacity:0},buttonProcessItem:{opacity:0},buttonAbortItemProcessing:{opacity:0},buttonRetryItemProcessing:{opacity:0},buttonRevertItemProcessing:{opacity:0},loadProgressIndicator:{opacity:0,align:$s},processProgressIndicator:{opacity:0,align:Xs},processingCompleteIndicator:{opacity:0,scaleX:.75,scaleY:.75},info:{translateX:0,translateY:0,opacity:0},status:{translateX:0,translateY:0,opacity:0}},Ja={buttonRemoveItem:{opacity:1},buttonProcessItem:{opacity:1},info:{translateX:Ie},status:{translateX:Ie}},Ai={buttonAbortItemProcessing:{opacity:1},processProgressIndicator:{opacity:1},status:{opacity:1}},pt={DID_THROW_ITEM_INVALID:{buttonRemoveItem:{opacity:1},info:{translateX:Ie},status:{translateX:Ie,opacity:1}},DID_START_ITEM_LOAD:{buttonAbortItemLoad:{opacity:1},loadProgressIndicator:{opacity:1},status:{opacity:1}},DID_THROW_ITEM_LOAD_ERROR:{buttonRetryItemLoad:{opacity:1},buttonRemoveItem:{opacity:1},info:{translateX:Ie},status:{opacity:1}},DID_START_ITEM_REMOVE:{processProgressIndicator:{opacity:1,align:Ni},info:{translateX:Ie},status:{opacity:0}},DID_THROW_ITEM_REMOVE_ERROR:{processProgressIndicator:{opacity:0,align:Ni},buttonRemoveItem:{opacity:1},info:{translateX:Ie},status:{opacity:1,translateX:Ie}},DID_LOAD_ITEM:Ja,DID_LOAD_LOCAL_ITEM:{buttonRemoveItem:{opacity:1},info:{translateX:Ie},status:{translateX:Ie}},DID_START_ITEM_PROCESSING:Ai,DID_REQUEST_ITEM_PROCESSING:Ai,DID_UPDATE_ITEM_PROCESS_PROGRESS:Ai,DID_COMPLETE_ITEM_PROCESSING:{buttonRevertItemProcessing:{opacity:1},info:{opacity:1},status:{opacity:1}},DID_THROW_ITEM_PROCESSING_ERROR:{buttonRemoveItem:{opacity:1},buttonRetryItemProcessing:{opacity:1},status:{opacity:1},info:{translateX:Ie}},DID_THROW_ITEM_PROCESSING_REVERT_ERROR:{buttonRevertItemProcessing:{opacity:1},status:{opacity:1},info:{opacity:1}},DID_ABORT_ITEM_PROCESSING:{buttonRemoveItem:{opacity:1},buttonProcessItem:{opacity:1},info:{translateX:Ie},status:{opacity:1}},DID_REVERT_ITEM_PROCESSING:Ja},Zs=oe({create:({root:e})=>{e.element.innerHTML=e.query("GET_ICON_DONE")},name:"processing-complete-indicator",ignoreRect:!0,mixins:{styles:["scaleX","scaleY","opacity"],animations:{scaleX:"spring",scaleY:"spring",opacity:{type:"tween",duration:250}}}}),Ks=({root:e,props:t})=>{let i=Object.keys(zi).reduce((f,h)=>(f[h]={...zi[h]},f),{}),{id:a}=t,n=e.query("GET_ALLOW_REVERT"),o=e.query("GET_ALLOW_REMOVE"),l=e.query("GET_ALLOW_PROCESS"),r=e.query("GET_INSTANT_UPLOAD"),s=e.query("IS_ASYNC"),p=e.query("GET_STYLE_BUTTON_REMOVE_ITEM_ALIGN"),c;s?l&&!n?c=f=>!/RevertItemProcessing/.test(f):!l&&n?c=f=>!/ProcessItem|RetryItemProcessing|AbortItemProcessing/.test(f):!l&&!n&&(c=f=>!/Process/.test(f)):c=f=>!/Process/.test(f);let d=c?Ci.filter(c):Ci.concat();if(r&&n&&(i.RevertItemProcessing.label="GET_LABEL_BUTTON_REMOVE_ITEM",i.RevertItemProcessing.icon="GET_ICON_REMOVE"),s&&!n){let f=pt.DID_COMPLETE_ITEM_PROCESSING;f.info.translateX=Ys,f.info.translateY=Jt,f.status.translateY=Jt,f.processingCompleteIndicator={opacity:1,scaleX:1,scaleY:1}}if(s&&!l&&(["DID_START_ITEM_PROCESSING","DID_REQUEST_ITEM_PROCESSING","DID_UPDATE_ITEM_PROCESS_PROGRESS","DID_THROW_ITEM_PROCESSING_ERROR"].forEach(f=>{pt[f].status.translateY=Jt}),pt.DID_THROW_ITEM_PROCESSING_ERROR.status.translateX=qs),p&&n){i.RevertItemProcessing.align="BUTTON_REMOVE_ITEM_POSITION";let f=pt.DID_COMPLETE_ITEM_PROCESSING;f.info.translateX=Ie,f.status.translateY=Jt,f.processingCompleteIndicator={opacity:1,scaleX:1,scaleY:1}}o||(i.RemoveItem.disabled=!0),te(i,(f,h)=>{let g=e.createChildView(zn,{label:e.query(h.label),icon:e.query(h.icon),opacity:0});d.includes(f)&&e.appendChildView(g),h.disabled&&(g.element.setAttribute("disabled","disabled"),g.element.setAttribute("hidden","hidden")),g.element.dataset.align=e.query(`GET_STYLE_${h.align}`),g.element.classList.add(h.className),g.on("click",I=>{I.stopPropagation(),!h.disabled&&e.dispatch(h.action,{query:a})}),e.ref[`button${f}`]=g}),e.ref.processingCompleteIndicator=e.appendChildView(e.createChildView(Zs)),e.ref.processingCompleteIndicator.element.dataset.align=e.query("GET_STYLE_BUTTON_PROCESS_ITEM_POSITION"),e.ref.info=e.appendChildView(e.createChildView(ks,{id:a})),e.ref.status=e.appendChildView(e.createChildView(js,{id:a}));let m=e.appendChildView(e.createChildView(Xa,{opacity:0,align:e.query("GET_STYLE_LOAD_INDICATOR_POSITION")}));m.element.classList.add("filepond--load-indicator"),e.ref.loadProgressIndicator=m;let u=e.appendChildView(e.createChildView(Xa,{opacity:0,align:e.query("GET_STYLE_PROGRESS_INDICATOR_POSITION")}));u.element.classList.add("filepond--process-indicator"),e.ref.processProgressIndicator=u,e.ref.activeStyles=[]},Js=({root:e,actions:t,props:i})=>{ec({root:e,actions:t,props:i});let a=t.concat().filter(n=>/^DID_/.test(n.type)).reverse().find(n=>pt[n.type]);if(a){e.ref.activeStyles=[];let n=pt[a.type];te(Qs,(o,l)=>{let r=e.ref[o];te(l,(s,p)=>{let c=n[o]&&typeof n[o][s]<"u"?n[o][s]:p;e.ref.activeStyles.push({control:r,key:s,value:c})})})}e.ref.activeStyles.forEach(({control:n,key:o,value:l})=>{n[o]=typeof l=="function"?l(e):l})},ec=he({DID_SET_LABEL_BUTTON_ABORT_ITEM_PROCESSING:({root:e,action:t})=>{e.ref.buttonAbortItemProcessing.label=t.value},DID_SET_LABEL_BUTTON_ABORT_ITEM_LOAD:({root:e,action:t})=>{e.ref.buttonAbortItemLoad.label=t.value},DID_SET_LABEL_BUTTON_ABORT_ITEM_REMOVAL:({root:e,action:t})=>{e.ref.buttonAbortItemRemoval.label=t.value},DID_REQUEST_ITEM_PROCESSING:({root:e})=>{e.ref.processProgressIndicator.spin=!0,e.ref.processProgressIndicator.progress=0},DID_START_ITEM_LOAD:({root:e})=>{e.ref.loadProgressIndicator.spin=!0,e.ref.loadProgressIndicator.progress=0},DID_START_ITEM_REMOVE:({root:e})=>{e.ref.processProgressIndicator.spin=!0,e.ref.processProgressIndicator.progress=0},DID_UPDATE_ITEM_LOAD_PROGRESS:({root:e,action:t})=>{e.ref.loadProgressIndicator.spin=!1,e.ref.loadProgressIndicator.progress=t.progress},DID_UPDATE_ITEM_PROCESS_PROGRESS:({root:e,action:t})=>{e.ref.processProgressIndicator.spin=!1,e.ref.processProgressIndicator.progress=t.progress}}),tc=oe({create:Ks,write:Js,didCreateView:e=>{tt("CREATE_VIEW",{...e,view:e})},name:"file"}),ic=({root:e,props:t})=>{e.ref.fileName=ke("legend"),e.appendChild(e.ref.fileName),e.ref.file=e.appendChildView(e.createChildView(tc,{id:t.id})),e.ref.data=!1},ac=({root:e,props:t})=>{ae(e.ref.fileName,Qi(e.query("GET_ITEM_NAME",t.id)))},nc=oe({create:ic,ignoreRect:!0,write:he({DID_LOAD_ITEM:ac}),didCreateView:e=>{tt("CREATE_VIEW",{...e,view:e})},tag:"fieldset",name:"file-wrapper"}),en={type:"spring",damping:.6,mass:7},oc=({root:e,props:t})=>{[{name:"top"},{name:"center",props:{translateY:null,scaleY:null},mixins:{animations:{scaleY:en},styles:["translateY","scaleY"]}},{name:"bottom",props:{translateY:null},mixins:{animations:{translateY:en},styles:["translateY"]}}].forEach(i=>{lc(e,i,t.name)}),e.element.classList.add(`filepond--${t.name}`),e.ref.scalable=null},lc=(e,t,i)=>{let a=oe({name:`panel-${t.name} filepond--${i}`,mixins:t.mixins,ignoreRectUpdate:!0}),n=e.createChildView(a,t.props);e.ref[t.name]=e.appendChildView(n)},rc=({root:e,props:t})=>{if((e.ref.scalable===null||t.scalable!==e.ref.scalable)&&(e.ref.scalable=Tn(t.scalable)?t.scalable:!0,e.element.dataset.scalable=e.ref.scalable),!t.height)return;let i=e.ref.top.rect.element,a=e.ref.bottom.rect.element,n=Math.max(i.height+a.height,t.height);e.ref.center.translateY=i.height,e.ref.center.scaleY=(n-i.height-a.height)/100,e.ref.bottom.translateY=n-a.height},kn=oe({name:"panel",read:({root:e,props:t})=>t.heightCurrent=e.ref.bottom.translateY,write:rc,create:oc,ignoreRect:!0,mixins:{apis:["height","heightCurrent","scalable"]}}),sc=e=>{let t=e.map(a=>a.id),i;return{setIndex:a=>{i=a},getIndex:()=>i,getItemIndex:a=>t.indexOf(a.id)}},tn={type:"spring",stiffness:.75,damping:.45,mass:10},an="spring",nn={DID_START_ITEM_LOAD:"busy",DID_UPDATE_ITEM_LOAD_PROGRESS:"loading",DID_THROW_ITEM_INVALID:"load-invalid",DID_THROW_ITEM_LOAD_ERROR:"load-error",DID_LOAD_ITEM:"idle",DID_THROW_ITEM_REMOVE_ERROR:"remove-error",DID_START_ITEM_REMOVE:"busy",DID_START_ITEM_PROCESSING:"busy processing",DID_REQUEST_ITEM_PROCESSING:"busy processing",DID_UPDATE_ITEM_PROCESS_PROGRESS:"processing",DID_COMPLETE_ITEM_PROCESSING:"processing-complete",DID_THROW_ITEM_PROCESSING_ERROR:"processing-error",DID_THROW_ITEM_PROCESSING_REVERT_ERROR:"processing-revert-error",DID_ABORT_ITEM_PROCESSING:"cancelled",DID_REVERT_ITEM_PROCESSING:"idle"},cc=({root:e,props:t})=>{if(e.ref.handleClick=a=>e.dispatch("DID_ACTIVATE_ITEM",{id:t.id}),e.element.id=`filepond--item-${t.id}`,e.element.addEventListener("click",e.ref.handleClick),e.ref.container=e.appendChildView(e.createChildView(nc,{id:t.id})),e.ref.panel=e.appendChildView(e.createChildView(kn,{name:"item-panel"})),e.ref.panel.height=null,t.markedForRemoval=!1,!e.query("GET_ALLOW_REORDER"))return;e.element.dataset.dragState="idle";let i=a=>{if(!a.isPrimary)return;let n=!1,o={x:a.pageX,y:a.pageY};t.dragOrigin={x:e.translateX,y:e.translateY},t.dragCenter={x:a.offsetX,y:a.offsetY};let l=sc(e.query("GET_ACTIVE_ITEMS"));e.dispatch("DID_GRAB_ITEM",{id:t.id,dragState:l});let r=d=>{if(!d.isPrimary)return;d.stopPropagation(),d.preventDefault(),t.dragOffset={x:d.pageX-o.x,y:d.pageY-o.y},t.dragOffset.x*t.dragOffset.x+t.dragOffset.y*t.dragOffset.y>16&&!n&&(n=!0,e.element.removeEventListener("click",e.ref.handleClick)),e.dispatch("DID_DRAG_ITEM",{id:t.id,dragState:l})},s=d=>{d.isPrimary&&(t.dragOffset={x:d.pageX-o.x,y:d.pageY-o.y},c())},p=()=>{c()},c=()=>{document.removeEventListener("pointercancel",p),document.removeEventListener("pointermove",r),document.removeEventListener("pointerup",s),e.dispatch("DID_DROP_ITEM",{id:t.id,dragState:l}),n&&setTimeout(()=>e.element.addEventListener("click",e.ref.handleClick),0)};document.addEventListener("pointercancel",p),document.addEventListener("pointermove",r),document.addEventListener("pointerup",s)};e.element.addEventListener("pointerdown",i)},dc=he({DID_UPDATE_PANEL_HEIGHT:({root:e,action:t})=>{e.height=t.height}}),pc=he({DID_GRAB_ITEM:({root:e,props:t})=>{t.dragOrigin={x:e.translateX,y:e.translateY}},DID_DRAG_ITEM:({root:e})=>{e.element.dataset.dragState="drag"},DID_DROP_ITEM:({root:e,props:t})=>{t.dragOffset=null,t.dragOrigin=null,e.element.dataset.dragState="drop"}},({root:e,actions:t,props:i,shouldOptimize:a})=>{e.element.dataset.dragState==="drop"&&e.scaleX<=1&&(e.element.dataset.dragState="idle");let n=t.concat().filter(l=>/^DID_/.test(l.type)).reverse().find(l=>nn[l.type]);n&&n.type!==i.currentState&&(i.currentState=n.type,e.element.dataset.filepondItemState=nn[i.currentState]||"");let o=e.query("GET_ITEM_PANEL_ASPECT_RATIO")||e.query("GET_PANEL_ASPECT_RATIO");o?a||(e.height=e.rect.element.width*o):(dc({root:e,actions:t,props:i}),!e.height&&e.ref.container.rect.element.height>0&&(e.height=e.ref.container.rect.element.height)),a&&(e.ref.panel.height=null),e.ref.panel.height=e.height}),mc=oe({create:cc,write:pc,destroy:({root:e,props:t})=>{e.element.removeEventListener("click",e.ref.handleClick),e.dispatch("RELEASE_ITEM",{query:t.id})},tag:"li",name:"item",mixins:{apis:["id","interactionMethod","markedForRemoval","spawnDate","dragCenter","dragOrigin","dragOffset"],styles:["translateX","translateY","scaleX","scaleY","opacity","height"],animations:{scaleX:an,scaleY:an,translateX:tn,translateY:tn,opacity:{type:"tween",duration:150}}}}),Zi=(e,t)=>Math.max(1,Math.floor((e+1)/t)),Ki=(e,t,i)=>{if(!i)return;let a=e.rect.element.width,n=t.length,o=null;if(n===0||i.topE){if(i.left{ne(e.element,"role","list"),e.ref.lastItemSpanwDate=Date.now()},fc=({root:e,action:t})=>{let{id:i,index:a,interactionMethod:n}=t;e.ref.addIndex=a;let o=Date.now(),l=o,r=1;if(n!==_e.NONE){r=0;let s=e.query("GET_ITEM_INSERT_INTERVAL"),p=o-e.ref.lastItemSpanwDate;l=p{e.dragOffset?(e.translateX=null,e.translateY=null,e.translateX=e.dragOrigin.x+e.dragOffset.x,e.translateY=e.dragOrigin.y+e.dragOffset.y,e.scaleX=1.025,e.scaleY=1.025):(e.translateX=t,e.translateY=i,Date.now()>e.spawnDate&&(e.opacity===0&&hc(e,t,i,a,n),e.scaleX=1,e.scaleY=1,e.opacity=1))},hc=(e,t,i,a,n)=>{e.interactionMethod===_e.NONE?(e.translateX=null,e.translateX=t,e.translateY=null,e.translateY=i):e.interactionMethod===_e.DROP?(e.translateX=null,e.translateX=t-a*20,e.translateY=null,e.translateY=i-n*10,e.scaleX=.8,e.scaleY=.8):e.interactionMethod===_e.BROWSE?(e.translateY=null,e.translateY=i-30):e.interactionMethod===_e.API&&(e.translateX=null,e.translateX=t-30,e.translateY=null)},gc=({root:e,action:t})=>{let{id:i}=t,a=e.childViews.find(n=>n.id===i);a&&(a.scaleX=.9,a.scaleY=.9,a.opacity=0,a.markedForRemoval=!0)},Mi=e=>e.rect.element.height+e.rect.element.marginBottom*.5+e.rect.element.marginTop*.5,Ec=e=>e.rect.element.width+e.rect.element.marginLeft*.5+e.rect.element.marginRight*.5,bc=({root:e,action:t})=>{let{id:i,dragState:a}=t,n=e.query("GET_ITEM",{id:i}),o=e.childViews.find(g=>g.id===i),l=e.childViews.length,r=a.getItemIndex(n);if(!o)return;let s={x:o.dragOrigin.x+o.dragOffset.x+o.dragCenter.x,y:o.dragOrigin.y+o.dragOffset.y+o.dragCenter.y},p=Mi(o),c=Ec(o),d=Math.floor(e.rect.outer.width/c);d>l&&(d=l);let m=Math.floor(l/d+1);ei.setHeight=p*m,ei.setWidth=c*d;var u={y:Math.floor(s.y/p),x:Math.floor(s.x/c),getGridIndex:function(){return s.y>ei.getHeight||s.y<0||s.x>ei.getWidth||s.x<0?r:this.y*d+this.x},getColIndex:function(){let I=e.query("GET_ACTIVE_ITEMS"),E=e.childViews.filter(O=>O.rect.element.height),T=I.map(O=>E.find(M=>M.id===O.id)),v=T.findIndex(O=>O===o),y=Mi(o),b=T.length,w=b,x=0,_=0,P=0;for(let O=0;OO){if(s.y1?u.getGridIndex():u.getColIndex();e.dispatch("MOVE_ITEM",{query:o,index:f});let h=a.getIndex();if(h===void 0||h!==f){if(a.setIndex(f),h===void 0)return;e.dispatch("DID_REORDER_ITEMS",{items:e.query("GET_ACTIVE_ITEMS"),origin:r,target:f})}},Tc=he({DID_ADD_ITEM:fc,DID_REMOVE_ITEM:gc,DID_DRAG_ITEM:bc}),Ic=({root:e,props:t,actions:i,shouldOptimize:a})=>{Tc({root:e,props:t,actions:i});let{dragCoordinates:n}=t,o=e.rect.element.width,l=e.childViews.filter(T=>T.rect.element.height),r=e.query("GET_ACTIVE_ITEMS").map(T=>l.find(v=>v.id===T.id)).filter(T=>T),s=n?Ki(e,r,n):null,p=e.ref.addIndex||null;e.ref.addIndex=null;let c=0,d=0,m=0;if(r.length===0)return;let u=r[0].rect.element,f=u.marginTop+u.marginBottom,h=u.marginLeft+u.marginRight,g=u.width+h,I=u.height+f,E=Zi(o,g);if(E===1){let T=0,v=0;r.forEach((y,b)=>{if(s){let _=b-s;_===-2?v=-f*.25:_===-1?v=-f*.75:_===0?v=f*.75:_===1?v=f*.25:v=0}a&&(y.translateX=null,y.translateY=null),y.markedForRemoval||on(y,0,T+v);let x=(y.rect.element.height+f)*(y.markedForRemoval?y.opacity:1);T+=x})}else{let T=0,v=0;r.forEach((y,b)=>{b===s&&(c=1),b===p&&(m+=1),y.markedForRemoval&&y.opacity<.5&&(d-=1);let w=b+m+c+d,x=w%E,_=Math.floor(w/E),P=x*g,O=_*I,M=Math.sign(P-T),C=Math.sign(O-v);T=P,v=O,!y.markedForRemoval&&(a&&(y.translateX=null,y.translateY=null),on(y,P,O,M,C))})}},vc=(e,t)=>t.filter(i=>i.data&&i.data.id?e.id===i.data.id:!0),xc=oe({create:uc,write:Ic,tag:"ul",name:"list",didWriteView:({root:e})=>{e.childViews.filter(t=>t.markedForRemoval&&t.opacity===0&&t.resting).forEach(t=>{t._destroy(),e.removeChildView(t)})},filterFrameActionsForChild:vc,mixins:{apis:["dragCoordinates"]}}),yc=({root:e,props:t})=>{e.ref.list=e.appendChildView(e.createChildView(xc)),t.dragCoordinates=null,t.overflowing=!1},_c=({root:e,props:t,action:i})=>{e.query("GET_ITEM_INSERT_LOCATION_FREEDOM")&&(t.dragCoordinates={left:i.position.scopeLeft-e.ref.list.rect.element.left,top:i.position.scopeTop-(e.rect.outer.top+e.rect.element.marginTop+e.rect.element.scrollTop)})},Rc=({props:e})=>{e.dragCoordinates=null},wc=he({DID_DRAG:_c,DID_END_DRAG:Rc}),Sc=({root:e,props:t,actions:i})=>{if(wc({root:e,props:t,actions:i}),e.ref.list.dragCoordinates=t.dragCoordinates,t.overflowing&&!t.overflow&&(t.overflowing=!1,e.element.dataset.state="",e.height=null),t.overflow){let a=Math.round(t.overflow);a!==e.height&&(t.overflowing=!0,e.element.dataset.state="overflow",e.height=a)}},Lc=oe({create:yc,write:Sc,name:"list-scroller",mixins:{apis:["overflow","dragCoordinates"],styles:["height","translateY"],animations:{translateY:"spring"}}}),Oe=(e,t,i,a="")=>{i?ne(e,t,a):e.removeAttribute(t)},Ac=e=>{if(!(!e||e.value==="")){try{e.value=""}catch{}if(e.value){let t=ke("form"),i=e.parentNode,a=e.nextSibling;t.appendChild(e),t.reset(),a?i.insertBefore(e,a):i.appendChild(e)}}},Mc=({root:e,props:t})=>{e.element.id=`filepond--browser-${t.id}`,ne(e.element,"name",e.query("GET_NAME")),ne(e.element,"aria-controls",`filepond--assistant-${t.id}`),ne(e.element,"aria-labelledby",`filepond--drop-label-${t.id}`),Vn({root:e,action:{value:e.query("GET_ACCEPTED_FILE_TYPES")}}),Gn({root:e,action:{value:e.query("GET_ALLOW_MULTIPLE")}}),Un({root:e,action:{value:e.query("GET_ALLOW_DIRECTORIES_ONLY")}}),Bi({root:e}),Wn({root:e,action:{value:e.query("GET_REQUIRED")}}),Hn({root:e,action:{value:e.query("GET_CAPTURE_METHOD")}}),e.ref.handleChange=i=>{if(!e.element.value)return;let a=Array.from(e.element.files).map(n=>(n._relativePath=n.webkitRelativePath,n));setTimeout(()=>{t.onload(a),Ac(e.element)},250)},e.element.addEventListener("change",e.ref.handleChange)},Vn=({root:e,action:t})=>{e.query("GET_ALLOW_SYNC_ACCEPT_ATTRIBUTE")&&Oe(e.element,"accept",!!t.value,t.value?t.value.join(","):"")},Gn=({root:e,action:t})=>{Oe(e.element,"multiple",t.value)},Un=({root:e,action:t})=>{Oe(e.element,"webkitdirectory",t.value)},Bi=({root:e})=>{let t=e.query("GET_DISABLED"),i=e.query("GET_ALLOW_BROWSE"),a=t||!i;Oe(e.element,"disabled",a)},Wn=({root:e,action:t})=>{t.value?e.query("GET_TOTAL_ITEMS")===0&&Oe(e.element,"required",!0):Oe(e.element,"required",!1)},Hn=({root:e,action:t})=>{Oe(e.element,"capture",!!t.value,t.value===!0?"":t.value)},ln=({root:e})=>{let{element:t}=e;e.query("GET_TOTAL_ITEMS")>0?(Oe(t,"required",!1),Oe(t,"name",!1)):(Oe(t,"name",!0,e.query("GET_NAME")),e.query("GET_CHECK_VALIDITY")&&t.setCustomValidity(""),e.query("GET_REQUIRED")&&Oe(t,"required",!0))},Oc=({root:e})=>{e.query("GET_CHECK_VALIDITY")&&e.element.setCustomValidity(e.query("GET_LABEL_INVALID_FIELD"))},Pc=oe({tag:"input",name:"browser",ignoreRect:!0,ignoreRectUpdate:!0,attributes:{type:"file"},create:Mc,destroy:({root:e})=>{e.element.removeEventListener("change",e.ref.handleChange)},write:he({DID_LOAD_ITEM:ln,DID_REMOVE_ITEM:ln,DID_THROW_ITEM_INVALID:Oc,DID_SET_DISABLED:Bi,DID_SET_ALLOW_BROWSE:Bi,DID_SET_ALLOW_DIRECTORIES_ONLY:Un,DID_SET_ALLOW_MULTIPLE:Gn,DID_SET_ACCEPTED_FILE_TYPES:Vn,DID_SET_CAPTURE_METHOD:Hn,DID_SET_REQUIRED:Wn})}),rn={ENTER:13,SPACE:32},Dc=({root:e,props:t})=>{let i=ke("label");ne(i,"for",`filepond--browser-${t.id}`),ne(i,"id",`filepond--drop-label-${t.id}`),ne(i,"aria-hidden","true"),e.ref.handleKeyDown=a=>{(a.keyCode===rn.ENTER||a.keyCode===rn.SPACE)&&(a.preventDefault(),e.ref.label.click())},e.ref.handleClick=a=>{a.target===i||i.contains(a.target)||e.ref.label.click()},i.addEventListener("keydown",e.ref.handleKeyDown),e.element.addEventListener("click",e.ref.handleClick),jn(i,t.caption),e.appendChild(i),e.ref.label=i},jn=(e,t)=>{e.innerHTML=t;let i=e.querySelector(".filepond--label-action");return i&&ne(i,"tabindex","0"),t},Fc=oe({name:"drop-label",ignoreRect:!0,create:Dc,destroy:({root:e})=>{e.ref.label.addEventListener("keydown",e.ref.handleKeyDown),e.element.removeEventListener("click",e.ref.handleClick)},write:he({DID_SET_LABEL_IDLE:({root:e,action:t})=>{jn(e.ref.label,t.value)}}),mixins:{styles:["opacity","translateX","translateY"],animations:{opacity:{type:"tween",duration:150},translateX:"spring",translateY:"spring"}}}),zc=oe({name:"drip-blob",ignoreRect:!0,mixins:{styles:["translateX","translateY","scaleX","scaleY","opacity"],animations:{scaleX:"spring",scaleY:"spring",translateX:"spring",translateY:"spring",opacity:{type:"tween",duration:250}}}}),Cc=({root:e})=>{let t=e.rect.element.width*.5,i=e.rect.element.height*.5;e.ref.blob=e.appendChildView(e.createChildView(zc,{opacity:0,scaleX:2.5,scaleY:2.5,translateX:t,translateY:i}))},Nc=({root:e,action:t})=>{if(!e.ref.blob){Cc({root:e});return}e.ref.blob.translateX=t.position.scopeLeft,e.ref.blob.translateY=t.position.scopeTop,e.ref.blob.scaleX=1,e.ref.blob.scaleY=1,e.ref.blob.opacity=1},Bc=({root:e})=>{e.ref.blob&&(e.ref.blob.opacity=0)},kc=({root:e})=>{e.ref.blob&&(e.ref.blob.scaleX=2.5,e.ref.blob.scaleY=2.5,e.ref.blob.opacity=0)},Vc=({root:e,props:t,actions:i})=>{Gc({root:e,props:t,actions:i});let{blob:a}=e.ref;i.length===0&&a&&a.opacity===0&&(e.removeChildView(a),e.ref.blob=null)},Gc=he({DID_DRAG:Nc,DID_DROP:kc,DID_END_DRAG:Bc}),Uc=oe({ignoreRect:!0,ignoreRectUpdate:!0,name:"drip",write:Vc}),qn=(e,t)=>{try{let i=new DataTransfer;t.forEach(a=>{a instanceof File?i.items.add(a):i.items.add(new File([a],a.name,{type:a.type}))}),e.files=i.files}catch{return!1}return!0},Wc=({root:e})=>e.ref.fields={},ui=(e,t)=>e.ref.fields[t],Ji=e=>{e.query("GET_ACTIVE_ITEMS").forEach(t=>{e.ref.fields[t.id]&&e.element.appendChild(e.ref.fields[t.id])})},sn=({root:e})=>Ji(e),Hc=({root:e,action:t})=>{let n=!(e.query("GET_ITEM",t.id).origin===se.LOCAL)&&e.query("SHOULD_UPDATE_FILE_INPUT"),o=ke("input");o.type=n?"file":"hidden",o.name=e.query("GET_NAME"),o.disabled=e.query("GET_DISABLED"),e.ref.fields[t.id]=o,Ji(e)},jc=({root:e,action:t})=>{let i=ui(e,t.id);if(!i||(t.serverFileReference!==null&&(i.value=t.serverFileReference),!e.query("SHOULD_UPDATE_FILE_INPUT")))return;let a=e.query("GET_ITEM",t.id);qn(i,[a.file])},qc=({root:e,action:t})=>{e.query("SHOULD_UPDATE_FILE_INPUT")&&setTimeout(()=>{let i=ui(e,t.id);i&&qn(i,[t.file])},0)},Yc=({root:e})=>{e.element.disabled=e.query("GET_DISABLED")},$c=({root:e,action:t})=>{let i=ui(e,t.id);i&&(i.parentNode&&i.parentNode.removeChild(i),delete e.ref.fields[t.id])},Xc=({root:e,action:t})=>{let i=ui(e,t.id);i&&(t.value===null?i.removeAttribute("value"):i.type!="file"&&(i.value=t.value),Ji(e))},Qc=he({DID_SET_DISABLED:Yc,DID_ADD_ITEM:Hc,DID_LOAD_ITEM:jc,DID_REMOVE_ITEM:$c,DID_DEFINE_VALUE:Xc,DID_PREPARE_OUTPUT:qc,DID_REORDER_ITEMS:sn,DID_SORT_ITEMS:sn}),Zc=oe({tag:"fieldset",name:"data",create:Wc,write:Qc,ignoreRect:!0}),Kc=e=>"getRootNode"in e?e.getRootNode():document,Jc=["jpg","jpeg","png","gif","bmp","webp","svg","tiff"],ed=["css","csv","html","txt"],td={zip:"zip|compressed",epub:"application/epub+zip"},Yn=(e="")=>(e=e.toLowerCase(),Jc.includes(e)?"image/"+(e==="jpg"?"jpeg":e==="svg"?"svg+xml":e):ed.includes(e)?"text/"+e:td[e]||""),ea=e=>new Promise((t,i)=>{let a=cd(e);if(a.length&&!id(e))return t(a);ad(e).then(t)}),id=e=>e.files?e.files.length>0:!1,ad=e=>new Promise((t,i)=>{let a=(e.items?Array.from(e.items):[]).filter(n=>nd(n)).map(n=>od(n));if(!a.length){t(e.files?Array.from(e.files):[]);return}Promise.all(a).then(n=>{let o=[];n.forEach(l=>{o.push.apply(o,l)}),t(o.filter(l=>l).map(l=>(l._relativePath||(l._relativePath=l.webkitRelativePath),l)))}).catch(console.error)}),nd=e=>{if($n(e)){let t=ta(e);if(t)return t.isFile||t.isDirectory}return e.kind==="file"},od=e=>new Promise((t,i)=>{if(sd(e)){ld(ta(e)).then(t).catch(i);return}t([e.getAsFile()])}),ld=e=>new Promise((t,i)=>{let a=[],n=0,o=0,l=()=>{o===0&&n===0&&t(a)},r=s=>{n++;let p=s.createReader(),c=()=>{p.readEntries(d=>{if(d.length===0){n--,l();return}d.forEach(m=>{m.isDirectory?r(m):(o++,m.file(u=>{let f=rd(u);m.fullPath&&(f._relativePath=m.fullPath),a.push(f),o--,l()}))}),c()},i)};c()};r(e)}),rd=e=>{if(e.type.length)return e;let t=e.lastModifiedDate,i=e.name,a=Yn(mi(e.name));return a.length&&(e=e.slice(0,e.size,a),e.name=i,e.lastModifiedDate=t),e},sd=e=>$n(e)&&(ta(e)||{}).isDirectory,$n=e=>"webkitGetAsEntry"in e,ta=e=>e.webkitGetAsEntry(),cd=e=>{let t=[];try{if(t=pd(e),t.length)return t;t=dd(e)}catch{}return t},dd=e=>{let t=e.getData("url");return typeof t=="string"&&t.length?[t]:[]},pd=e=>{let t=e.getData("text/html");if(typeof t=="string"&&t.length){let i=t.match(/src\s*=\s*"(.+?)"/);if(i)return[i[1]]}return[]},li=[],et=e=>({pageLeft:e.pageX,pageTop:e.pageY,scopeLeft:e.offsetX||e.layerX,scopeTop:e.offsetY||e.layerY}),md=(e,t,i)=>{let a=ud(t),n={element:e,filterElement:i,state:null,ondrop:()=>{},onenter:()=>{},ondrag:()=>{},onexit:()=>{},onload:()=>{},allowdrop:()=>{}};return n.destroy=a.addListener(n),n},ud=e=>{let t=li.find(a=>a.element===e);if(t)return t;let i=fd(e);return li.push(i),i},fd=e=>{let t=[],i={dragenter:gd,dragover:Ed,dragleave:Td,drop:bd},a={};te(i,(o,l)=>{a[o]=l(e,t),e.addEventListener(o,a[o],!1)});let n={element:e,addListener:o=>(t.push(o),()=>{t.splice(t.indexOf(o),1),t.length===0&&(li.splice(li.indexOf(n),1),te(i,l=>{e.removeEventListener(l,a[l],!1)}))})};return n},hd=(e,t)=>("elementFromPoint"in e||(e=document),e.elementFromPoint(t.x,t.y)),ia=(e,t)=>{let i=Kc(t),a=hd(i,{x:e.pageX-window.pageXOffset,y:e.pageY-window.pageYOffset});return a===t||t.contains(a)},Xn=null,ti=(e,t)=>{try{e.dropEffect=t}catch{}},gd=(e,t)=>i=>{i.preventDefault(),Xn=i.target,t.forEach(a=>{let{element:n,onenter:o}=a;ia(i,n)&&(a.state="enter",o(et(i)))})},Ed=(e,t)=>i=>{i.preventDefault();let a=i.dataTransfer;ea(a).then(n=>{let o=!1;t.some(l=>{let{filterElement:r,element:s,onenter:p,onexit:c,ondrag:d,allowdrop:m}=l;ti(a,"copy");let u=m(n);if(!u){ti(a,"none");return}if(ia(i,s)){if(o=!0,l.state===null){l.state="enter",p(et(i));return}if(l.state="over",r&&!u){ti(a,"none");return}d(et(i))}else r&&!o&&ti(a,"none"),l.state&&(l.state=null,c(et(i)))})})},bd=(e,t)=>i=>{i.preventDefault();let a=i.dataTransfer;ea(a).then(n=>{t.forEach(o=>{let{filterElement:l,element:r,ondrop:s,onexit:p,allowdrop:c}=o;if(o.state=null,!(l&&!ia(i,r))){if(!c(n))return p(et(i));s(et(i),n)}})})},Td=(e,t)=>i=>{Xn===i.target&&t.forEach(a=>{let{onexit:n}=a;a.state=null,n(et(i))})},Id=(e,t,i)=>{e.classList.add("filepond--hopper");let{catchesDropsOnPage:a,requiresDropOnElement:n,filterItems:o=c=>c}=i,l=md(e,a?document.documentElement:e,n),r="",s="";l.allowdrop=c=>t(o(c)),l.ondrop=(c,d)=>{let m=o(d);if(!t(m)){p.ondragend(c);return}s="drag-drop",p.onload(m,c)},l.ondrag=c=>{p.ondrag(c)},l.onenter=c=>{s="drag-over",p.ondragstart(c)},l.onexit=c=>{s="drag-exit",p.ondragend(c)};let p={updateHopperState:()=>{r!==s&&(e.dataset.hopperState=s,r=s)},onload:()=>{},ondragstart:()=>{},ondrag:()=>{},ondragend:()=>{},destroy:()=>{l.destroy()}};return p},ki=!1,mt=[],Qn=e=>{let t=document.activeElement;if(t&&/textarea|input/i.test(t.nodeName)){let i=!1,a=t;for(;a!==document.body;){if(a.classList.contains("filepond--root")){i=!0;break}a=a.parentNode}if(!i)return}ea(e.clipboardData).then(i=>{i.length&&mt.forEach(a=>a(i))})},vd=e=>{mt.includes(e)||(mt.push(e),!ki&&(ki=!0,document.addEventListener("paste",Qn)))},xd=e=>{Yi(mt,mt.indexOf(e)),mt.length===0&&(document.removeEventListener("paste",Qn),ki=!1)},yd=()=>{let e=i=>{t.onload(i)},t={destroy:()=>{xd(e)},onload:()=>{}};return vd(e),t},_d=({root:e,props:t})=>{e.element.id=`filepond--assistant-${t.id}`,ne(e.element,"role","status"),ne(e.element,"aria-live","polite"),ne(e.element,"aria-relevant","additions")},cn=null,dn=null,Oi=[],fi=(e,t)=>{e.element.textContent=t},Rd=e=>{e.element.textContent=""},Zn=(e,t,i)=>{let a=e.query("GET_TOTAL_ITEMS");fi(e,`${i} ${t}, ${a} ${a===1?e.query("GET_LABEL_FILE_COUNT_SINGULAR"):e.query("GET_LABEL_FILE_COUNT_PLURAL")}`),clearTimeout(dn),dn=setTimeout(()=>{Rd(e)},1500)},Kn=e=>e.element.parentNode.contains(document.activeElement),wd=({root:e,action:t})=>{if(!Kn(e))return;e.element.textContent="";let i=e.query("GET_ITEM",t.id);Oi.push(i.filename),clearTimeout(cn),cn=setTimeout(()=>{Zn(e,Oi.join(", "),e.query("GET_LABEL_FILE_ADDED")),Oi.length=0},750)},Sd=({root:e,action:t})=>{if(!Kn(e))return;let i=t.item;Zn(e,i.filename,e.query("GET_LABEL_FILE_REMOVED"))},Ld=({root:e,action:t})=>{let a=e.query("GET_ITEM",t.id).filename,n=e.query("GET_LABEL_FILE_PROCESSING_COMPLETE");fi(e,`${a} ${n}`)},pn=({root:e,action:t})=>{let a=e.query("GET_ITEM",t.id).filename,n=e.query("GET_LABEL_FILE_PROCESSING_ABORTED");fi(e,`${a} ${n}`)},ii=({root:e,action:t})=>{let a=e.query("GET_ITEM",t.id).filename;fi(e,`${t.status.main} ${a} ${t.status.sub}`)},Ad=oe({create:_d,ignoreRect:!0,ignoreRectUpdate:!0,write:he({DID_LOAD_ITEM:wd,DID_REMOVE_ITEM:Sd,DID_COMPLETE_ITEM_PROCESSING:Ld,DID_ABORT_ITEM_PROCESSING:pn,DID_REVERT_ITEM_PROCESSING:pn,DID_THROW_ITEM_REMOVE_ERROR:ii,DID_THROW_ITEM_LOAD_ERROR:ii,DID_THROW_ITEM_INVALID:ii,DID_THROW_ITEM_PROCESSING_ERROR:ii}),tag:"span",name:"assistant"}),Jn=(e,t="-")=>e.replace(new RegExp(`${t}.`,"g"),i=>i.charAt(1).toUpperCase()),eo=(e,t=16,i=!0)=>{let a=Date.now(),n=null;return(...o)=>{clearTimeout(n);let l=Date.now()-a,r=()=>{a=Date.now(),e(...o)};le.preventDefault(),Od=({root:e,props:t})=>{let i=e.query("GET_ID");i&&(e.element.id=i);let a=e.query("GET_CLASS_NAME");a&&a.split(" ").filter(s=>s.length).forEach(s=>{e.element.classList.add(s)}),e.ref.label=e.appendChildView(e.createChildView(Fc,{...t,translateY:null,caption:e.query("GET_LABEL_IDLE")})),e.ref.list=e.appendChildView(e.createChildView(Lc,{translateY:null})),e.ref.panel=e.appendChildView(e.createChildView(kn,{name:"panel-root"})),e.ref.assistant=e.appendChildView(e.createChildView(Ad,{...t})),e.ref.data=e.appendChildView(e.createChildView(Zc,{...t})),e.ref.measure=ke("div"),e.ref.measure.style.height="100%",e.element.appendChild(e.ref.measure),e.ref.bounds=null,e.query("GET_STYLES").filter(s=>!Be(s.value)).map(({name:s,value:p})=>{e.element.dataset[s]=p}),e.ref.widthPrevious=null,e.ref.widthUpdated=eo(()=>{e.ref.updateHistory=[],e.dispatch("DID_RESIZE_ROOT")},250),e.ref.previousAspectRatio=null,e.ref.updateHistory=[];let n=window.matchMedia("(pointer: fine) and (hover: hover)").matches,o="PointerEvent"in window;e.query("GET_ALLOW_REORDER")&&o&&!n&&(e.element.addEventListener("touchmove",ri,{passive:!1}),e.element.addEventListener("gesturestart",ri));let l=e.query("GET_CREDITS");if(l.length===2){let s=document.createElement("a");s.className="filepond--credits",s.setAttribute("aria-hidden","true"),s.href=l[0],s.tabindex=-1,s.target="_blank",s.rel="noopener noreferrer",s.textContent=l[1],e.element.appendChild(s),e.ref.credits=s}},Pd=({root:e,props:t,actions:i})=>{if(Nd({root:e,props:t,actions:i}),i.filter(b=>/^DID_SET_STYLE_/.test(b.type)).filter(b=>!Be(b.data.value)).map(({type:b,data:w})=>{let x=Jn(b.substring(8).toLowerCase(),"_");e.element.dataset[x]=w.value,e.invalidateLayout()}),e.rect.element.hidden)return;e.rect.element.width!==e.ref.widthPrevious&&(e.ref.widthPrevious=e.rect.element.width,e.ref.widthUpdated());let a=e.ref.bounds;a||(a=e.ref.bounds=zd(e),e.element.removeChild(e.ref.measure),e.ref.measure=null);let{hopper:n,label:o,list:l,panel:r}=e.ref;n&&n.updateHopperState();let s=e.query("GET_PANEL_ASPECT_RATIO"),p=e.query("GET_ALLOW_MULTIPLE"),c=e.query("GET_TOTAL_ITEMS"),d=p?e.query("GET_MAX_FILES")||Md:1,m=c===d,u=i.find(b=>b.type==="DID_ADD_ITEM");if(m&&u){let b=u.data.interactionMethod;o.opacity=0,p?o.translateY=-40:b===_e.API?o.translateX=40:b===_e.BROWSE?o.translateY=40:o.translateY=30}else m||(o.opacity=1,o.translateX=0,o.translateY=0);let f=Dd(e),h=Fd(e),g=o.rect.element.height,I=!p||m?0:g,E=m?l.rect.element.marginTop:0,T=c===0?0:l.rect.element.marginBottom,v=I+E+h.visual+T,y=I+E+h.bounds+T;if(l.translateY=Math.max(0,I-l.rect.element.marginTop)-f.top,s){let b=e.rect.element.width,w=b*s;s!==e.ref.previousAspectRatio&&(e.ref.previousAspectRatio=s,e.ref.updateHistory=[]);let x=e.ref.updateHistory;x.push(b);let _=2;if(x.length>_*2){let O=x.length,M=O-10,C=0;for(let S=O;S>=M;S--)if(x[S]===x[S-2]&&C++,C>=_)return}r.scalable=!1,r.height=w;let P=w-I-(T-f.bottom)-(m?E:0);h.visual>P?l.overflow=P:l.overflow=null,e.height=w}else if(a.fixedHeight){r.scalable=!1;let b=a.fixedHeight-I-(T-f.bottom)-(m?E:0);h.visual>b?l.overflow=b:l.overflow=null}else if(a.cappedHeight){let b=v>=a.cappedHeight,w=Math.min(a.cappedHeight,v);r.scalable=!0,r.height=b?w:w-f.top-f.bottom;let x=w-I-(T-f.bottom)-(m?E:0);v>a.cappedHeight&&h.visual>x?l.overflow=x:l.overflow=null,e.height=Math.min(a.cappedHeight,y-f.top-f.bottom)}else{let b=c>0?f.top+f.bottom:0;r.scalable=!0,r.height=Math.max(g,v-b),e.height=Math.max(g,y-b)}e.ref.credits&&r.heightCurrent&&(e.ref.credits.style.transform=`translateY(${r.heightCurrent}px)`)},Dd=e=>{let t=e.ref.list.childViews[0].childViews[0];return t?{top:t.rect.element.marginTop,bottom:t.rect.element.marginBottom}:{top:0,bottom:0}},Fd=e=>{let t=0,i=0,a=e.ref.list,n=a.childViews[0],o=n.childViews.filter(E=>E.rect.element.height),l=e.query("GET_ACTIVE_ITEMS").map(E=>o.find(T=>T.id===E.id)).filter(E=>E);if(l.length===0)return{visual:t,bounds:i};let r=n.rect.element.width,s=Ki(n,l,a.dragCoordinates),p=l[0].rect.element,c=p.marginTop+p.marginBottom,d=p.marginLeft+p.marginRight,m=p.width+d,u=p.height+c,f=typeof s<"u"&&s>=0?1:0,h=l.find(E=>E.markedForRemoval&&E.opacity<.45)?-1:0,g=l.length+f+h,I=Zi(r,m);return I===1?l.forEach(E=>{let T=E.rect.element.height+c;i+=T,t+=T*E.opacity}):(i=Math.ceil(g/I)*u,t=i),{visual:t,bounds:i}},zd=e=>{let t=e.ref.measureHeight||null;return{cappedHeight:parseInt(e.style.maxHeight,10)||null,fixedHeight:t===0?null:t}},aa=(e,t)=>{let i=e.query("GET_ALLOW_REPLACE"),a=e.query("GET_ALLOW_MULTIPLE"),n=e.query("GET_TOTAL_ITEMS"),o=e.query("GET_MAX_FILES"),l=t.length;return!a&&l>1?(e.dispatch("DID_THROW_MAX_FILES",{source:t,error:ie("warning",0,"Max files")}),!0):(o=a?o:1,!a&&i?!1:gt(o)&&n+l>o?(e.dispatch("DID_THROW_MAX_FILES",{source:t,error:ie("warning",0,"Max files")}),!0):!1)},Cd=(e,t,i)=>{let a=e.childViews[0];return Ki(a,t,{left:i.scopeLeft-a.rect.element.left,top:i.scopeTop-(e.rect.outer.top+e.rect.element.marginTop+e.rect.element.scrollTop)})},mn=e=>{let t=e.query("GET_ALLOW_DROP"),i=e.query("GET_DISABLED"),a=t&&!i;if(a&&!e.ref.hopper){let n=Id(e.element,o=>{let l=e.query("GET_BEFORE_DROP_FILE")||(()=>!0);return e.query("GET_DROP_VALIDATION")?o.every(s=>tt("ALLOW_HOPPER_ITEM",s,{query:e.query}).every(p=>p===!0)&&l(s)):!0},{filterItems:o=>{let l=e.query("GET_IGNORED_FILES");return o.filter(r=>Je(r)?!l.includes(r.name.toLowerCase()):!0)},catchesDropsOnPage:e.query("GET_DROP_ON_PAGE"),requiresDropOnElement:e.query("GET_DROP_ON_ELEMENT")});n.onload=(o,l)=>{let s=e.ref.list.childViews[0].childViews.filter(c=>c.rect.element.height),p=e.query("GET_ACTIVE_ITEMS").map(c=>s.find(d=>d.id===c.id)).filter(c=>c);Ae("ADD_ITEMS",o,{dispatch:e.dispatch}).then(c=>{if(aa(e,c))return!1;e.dispatch("ADD_ITEMS",{items:c,index:Cd(e.ref.list,p,l),interactionMethod:_e.DROP})}),e.dispatch("DID_DROP",{position:l}),e.dispatch("DID_END_DRAG",{position:l})},n.ondragstart=o=>{e.dispatch("DID_START_DRAG",{position:o})},n.ondrag=eo(o=>{e.dispatch("DID_DRAG",{position:o})}),n.ondragend=o=>{e.dispatch("DID_END_DRAG",{position:o})},e.ref.hopper=n,e.ref.drip=e.appendChildView(e.createChildView(Uc))}else!a&&e.ref.hopper&&(e.ref.hopper.destroy(),e.ref.hopper=null,e.removeChildView(e.ref.drip))},un=(e,t)=>{let i=e.query("GET_ALLOW_BROWSE"),a=e.query("GET_DISABLED"),n=i&&!a;n&&!e.ref.browser?e.ref.browser=e.appendChildView(e.createChildView(Pc,{...t,onload:o=>{Ae("ADD_ITEMS",o,{dispatch:e.dispatch}).then(l=>{if(aa(e,l))return!1;e.dispatch("ADD_ITEMS",{items:l,index:-1,interactionMethod:_e.BROWSE})})}}),0):!n&&e.ref.browser&&(e.removeChildView(e.ref.browser),e.ref.browser=null)},fn=e=>{let t=e.query("GET_ALLOW_PASTE"),i=e.query("GET_DISABLED"),a=t&&!i;a&&!e.ref.paster?(e.ref.paster=yd(),e.ref.paster.onload=n=>{Ae("ADD_ITEMS",n,{dispatch:e.dispatch}).then(o=>{if(aa(e,o))return!1;e.dispatch("ADD_ITEMS",{items:o,index:-1,interactionMethod:_e.PASTE})})}):!a&&e.ref.paster&&(e.ref.paster.destroy(),e.ref.paster=null)},Nd=he({DID_SET_ALLOW_BROWSE:({root:e,props:t})=>{un(e,t)},DID_SET_ALLOW_DROP:({root:e})=>{mn(e)},DID_SET_ALLOW_PASTE:({root:e})=>{fn(e)},DID_SET_DISABLED:({root:e,props:t})=>{mn(e),fn(e),un(e,t),e.query("GET_DISABLED")?e.element.dataset.disabled="disabled":e.element.removeAttribute("data-disabled")}}),Bd=oe({name:"root",read:({root:e})=>{e.ref.measure&&(e.ref.measureHeight=e.ref.measure.offsetHeight)},create:Od,write:Pd,destroy:({root:e})=>{e.ref.paster&&e.ref.paster.destroy(),e.ref.hopper&&e.ref.hopper.destroy(),e.element.removeEventListener("touchmove",ri),e.element.removeEventListener("gesturestart",ri)},mixins:{styles:["height"]}}),kd=(e={})=>{let t=null,i=oi(),a=ir(Gr(i),[os,Hr(i)],[Ms,Wr(i)]);a.dispatch("SET_OPTIONS",{options:e});let n=()=>{document.hidden||a.dispatch("KICK")};document.addEventListener("visibilitychange",n);let o=null,l=!1,r=!1,s=null,p=null,c=()=>{l||(l=!0),clearTimeout(o),o=setTimeout(()=>{l=!1,s=null,p=null,r&&(r=!1,a.dispatch("DID_STOP_RESIZE"))},500)};window.addEventListener("resize",c);let d=Bd(a,{id:qi()}),m=!1,u=!1,f={_read:()=>{l&&(p=window.innerWidth,s||(s=p),!r&&p!==s&&(a.dispatch("DID_START_RESIZE"),r=!0)),u&&m&&(m=d.element.offsetParent===null),!m&&(d._read(),u=d.rect.element.hidden)},_write:R=>{let L=a.processActionQueue().filter(z=>!/^SET_/.test(z.type));m&&!L.length||(E(L),m=d._write(R,L,r),Yr(a.query("GET_ITEMS")),m&&a.processDispatchQueue())}},h=R=>L=>{let z={type:R};if(!L)return z;if(L.hasOwnProperty("error")&&(z.error=L.error?{...L.error}:null),L.status&&(z.status={...L.status}),L.file&&(z.output=L.file),L.source)z.file=L.source;else if(L.item||L.id){let D=L.item?L.item:a.query("GET_ITEM",L.id);z.file=D?ge(D):null}return L.items&&(z.items=L.items.map(ge)),/progress/.test(R)&&(z.progress=L.progress),L.hasOwnProperty("origin")&&L.hasOwnProperty("target")&&(z.origin=L.origin,z.target=L.target),z},g={DID_DESTROY:h("destroy"),DID_INIT:h("init"),DID_THROW_MAX_FILES:h("warning"),DID_INIT_ITEM:h("initfile"),DID_START_ITEM_LOAD:h("addfilestart"),DID_UPDATE_ITEM_LOAD_PROGRESS:h("addfileprogress"),DID_LOAD_ITEM:h("addfile"),DID_THROW_ITEM_INVALID:[h("error"),h("addfile")],DID_THROW_ITEM_LOAD_ERROR:[h("error"),h("addfile")],DID_THROW_ITEM_REMOVE_ERROR:[h("error"),h("removefile")],DID_PREPARE_OUTPUT:h("preparefile"),DID_START_ITEM_PROCESSING:h("processfilestart"),DID_UPDATE_ITEM_PROCESS_PROGRESS:h("processfileprogress"),DID_ABORT_ITEM_PROCESSING:h("processfileabort"),DID_COMPLETE_ITEM_PROCESSING:h("processfile"),DID_COMPLETE_ITEM_PROCESSING_ALL:h("processfiles"),DID_REVERT_ITEM_PROCESSING:h("processfilerevert"),DID_THROW_ITEM_PROCESSING_ERROR:[h("error"),h("processfile")],DID_REMOVE_ITEM:h("removefile"),DID_UPDATE_ITEMS:h("updatefiles"),DID_ACTIVATE_ITEM:h("activatefile"),DID_REORDER_ITEMS:h("reorderfiles")},I=R=>{let L={pond:F,...R};delete L.type,d.element.dispatchEvent(new CustomEvent(`FilePond:${R.type}`,{detail:L,bubbles:!0,cancelable:!0,composed:!0}));let z=[];R.hasOwnProperty("error")&&z.push(R.error),R.hasOwnProperty("file")&&z.push(R.file);let D=["type","error","file"];Object.keys(R).filter(B=>!D.includes(B)).forEach(B=>z.push(R[B])),F.fire(R.type,...z);let k=a.query(`GET_ON${R.type.toUpperCase()}`);k&&k(...z)},E=R=>{R.length&&R.filter(L=>g[L.type]).forEach(L=>{let z=g[L.type];(Array.isArray(z)?z:[z]).forEach(D=>{L.type==="DID_INIT_ITEM"?I(D(L.data)):setTimeout(()=>{I(D(L.data))},0)})})},T=R=>a.dispatch("SET_OPTIONS",{options:R}),v=R=>a.query("GET_ACTIVE_ITEM",R),y=R=>new Promise((L,z)=>{a.dispatch("REQUEST_ITEM_PREPARE",{query:R,success:D=>{L(D)},failure:D=>{z(D)}})}),b=(R,L={})=>new Promise((z,D)=>{_([{source:R,options:L}],{index:L.index}).then(k=>z(k&&k[0])).catch(D)}),w=R=>R.file&&R.id,x=(R,L)=>(typeof R=="object"&&!w(R)&&!L&&(L=R,R=void 0),a.dispatch("REMOVE_ITEM",{...L,query:R}),a.query("GET_ACTIVE_ITEM",R)===null),_=(...R)=>new Promise((L,z)=>{let D=[],k={};if(si(R[0]))D.push.apply(D,R[0]),Object.assign(k,R[1]||{});else{let B=R[R.length-1];typeof B=="object"&&!(B instanceof Blob)&&Object.assign(k,R.pop()),D.push(...R)}a.dispatch("ADD_ITEMS",{items:D,index:k.index,interactionMethod:_e.API,success:L,failure:z})}),P=()=>a.query("GET_ACTIVE_ITEMS"),O=R=>new Promise((L,z)=>{a.dispatch("REQUEST_ITEM_PROCESSING",{query:R,success:D=>{L(D)},failure:D=>{z(D)}})}),M=(...R)=>{let L=Array.isArray(R[0])?R[0]:R,z=L.length?L:P();return Promise.all(z.map(y))},C=(...R)=>{let L=Array.isArray(R[0])?R[0]:R;if(!L.length){let z=P().filter(D=>!(D.status===W.IDLE&&D.origin===se.LOCAL)&&D.status!==W.PROCESSING&&D.status!==W.PROCESSING_COMPLETE&&D.status!==W.PROCESSING_REVERT_ERROR);return Promise.all(z.map(O))}return Promise.all(L.map(O))},S=(...R)=>{let L=Array.isArray(R[0])?R[0]:R,z;typeof L[L.length-1]=="object"?z=L.pop():Array.isArray(R[0])&&(z=R[1]);let D=P();return L.length?L.map(B=>$e(B)?D[B]?D[B].id:null:B).filter(B=>B).map(B=>x(B,z)):Promise.all(D.map(B=>x(B,z)))},F={...pi(),...f,...Ur(a,i),setOptions:T,addFile:b,addFiles:_,getFile:v,processFile:O,prepareFile:y,removeFile:x,moveFile:(R,L)=>a.dispatch("MOVE_ITEM",{query:R,index:L}),getFiles:P,processFiles:C,removeFiles:S,prepareFiles:M,sort:R=>a.dispatch("SORT",{compare:R}),browse:()=>{var R=d.element.querySelector("input[type=file]");R&&R.click()},destroy:()=>{F.fire("destroy",d.element),a.dispatch("ABORT_ALL"),d._destroy(),window.removeEventListener("resize",c),document.removeEventListener("visibilitychange",n),a.dispatch("DID_DESTROY")},insertBefore:R=>Ca(d.element,R),insertAfter:R=>Na(d.element,R),appendTo:R=>R.appendChild(d.element),replaceElement:R=>{Ca(d.element,R),R.parentNode.removeChild(R),t=R},restoreElement:()=>{t&&(Na(t,d.element),d.element.parentNode.removeChild(d.element),t=null)},isAttachedTo:R=>d.element===R||t===R,element:{get:()=>d.element},status:{get:()=>a.query("GET_STATUS")}};return a.dispatch("DID_INIT"),We(F)},to=(e={})=>{let t={};return te(oi(),(a,n)=>{t[a]=n[0]}),kd({...t,...e})},Vd=e=>e.charAt(0).toLowerCase()+e.slice(1),Gd=e=>Jn(e.replace(/^data-/,"")),io=(e,t)=>{te(t,(i,a)=>{te(e,(n,o)=>{let l=new RegExp(i);if(!l.test(n)||(delete e[n],a===!1))return;if(fe(a)){e[a]=o;return}let s=a.group;ce(a)&&!e[s]&&(e[s]={}),e[s][Vd(n.replace(l,""))]=o}),a.mapping&&io(e[a.group],a.mapping)})},Ud=(e,t={})=>{let i=[];te(e.attributes,n=>{i.push(e.attributes[n])});let a=i.filter(n=>n.name).reduce((n,o)=>{let l=ne(e,o.name);return n[Gd(o.name)]=l===o.name?!0:l,n},{});return io(a,t),a},Wd=(e,t={})=>{let i={"^class$":"className","^multiple$":"allowMultiple","^capture$":"captureMethod","^webkitdirectory$":"allowDirectoriesOnly","^server":{group:"server",mapping:{"^process":{group:"process"},"^revert":{group:"revert"},"^fetch":{group:"fetch"},"^restore":{group:"restore"},"^load":{group:"load"}}},"^type$":!1,"^files$":!1};tt("SET_ATTRIBUTE_TO_OPTION_MAP",i);let a={...t},n=Ud(e.nodeName==="FIELDSET"?e.querySelector("input[type=file]"):e,i);Object.keys(n).forEach(l=>{ce(n[l])?(ce(a[l])||(a[l]={}),Object.assign(a[l],n[l])):a[l]=n[l]}),a.files=(t.files||[]).concat(Array.from(e.querySelectorAll("input:not([type=file])")).map(l=>({source:l.value,options:{type:l.dataset.type}})));let o=to(a);return e.files&&Array.from(e.files).forEach(l=>{o.addFile(l)}),o.replaceElement(e),o},Hd=(...e)=>tr(e[0])?Wd(...e):to(...e),jd=["fire","_read","_write"],hn=e=>{let t={};return yn(e,t,jd),t},qd=(e,t)=>e.replace(/(?:{([a-zA-Z]+)})/g,(i,a)=>t[a]),Yd=e=>{let t=new Blob(["(",e.toString(),")()"],{type:"application/javascript"}),i=URL.createObjectURL(t),a=new Worker(i);return{transfer:(n,o)=>{},post:(n,o,l)=>{let r=qi();a.onmessage=s=>{s.data.id===r&&o(s.data.message)},a.postMessage({id:r,message:n},l)},terminate:()=>{a.terminate(),URL.revokeObjectURL(i)}}},$d=e=>new Promise((t,i)=>{let a=new Image;a.onload=()=>{t(a)},a.onerror=n=>{i(n)},a.src=e}),ao=(e,t)=>{let i=e.slice(0,e.size,e.type);return i.lastModifiedDate=e.lastModifiedDate,i.name=t,i},Xd=e=>ao(e,e.name),gn=[],Qd=e=>{if(gn.includes(e))return;gn.push(e);let t=e({addFilter:Xr,utils:{Type:A,forin:te,isString:fe,isFile:Je,toNaturalFileSize:Cn,replaceInString:qd,getExtensionFromFilename:mi,getFilenameWithoutExtension:Dn,guesstimateMimeType:Yn,getFileFromBlob:ht,getFilenameFromURL:Ft,createRoute:he,createWorker:Yd,createView:oe,createItemAPI:ge,loadImage:$d,copyFile:Xd,renameFile:ao,createBlob:Mn,applyFilterChain:Ae,text:ae,getNumericAspectRatioFromString:wn},views:{fileActionButton:zn}});Qr(t.options)},Zd=()=>Object.prototype.toString.call(window.operamini)==="[object OperaMini]",Kd=()=>"Promise"in window,Jd=()=>"slice"in Blob.prototype,ep=()=>"URL"in window&&"createObjectURL"in window.URL,tp=()=>"visibilityState"in document,ip=()=>"performance"in window,ap=()=>"supports"in(window.CSS||{}),np=()=>/MSIE|Trident/.test(window.navigator.userAgent),Vi=(()=>{let e=En()&&!Zd()&&tp()&&Kd()&&Jd()&&ep()&&ip()&&(ap()||np());return()=>e})(),Ue={apps:[]},op="filepond",it=()=>{},no={},Et={},zt={},Gi={},ut=it,ft=it,Ui=it,Wi=it,ve=it,Hi=it,Dt=it;if(Vi()){Sr(()=>{Ue.apps.forEach(i=>i._read())},i=>{Ue.apps.forEach(a=>a._write(i))});let e=()=>{document.dispatchEvent(new CustomEvent("FilePond:loaded",{detail:{supported:Vi,create:ut,destroy:ft,parse:Ui,find:Wi,registerPlugin:ve,setOptions:Dt}})),document.removeEventListener("DOMContentLoaded",e)};document.readyState!=="loading"?setTimeout(()=>e(),0):document.addEventListener("DOMContentLoaded",e);let t=()=>te(oi(),(i,a)=>{Gi[i]=a[1]});no={...Sn},zt={...se},Et={...W},Gi={},t(),ut=(...i)=>{let a=Hd(...i);return a.on("destroy",ft),Ue.apps.push(a),hn(a)},ft=i=>{let a=Ue.apps.findIndex(n=>n.isAttachedTo(i));return a>=0?(Ue.apps.splice(a,1)[0].restoreElement(),!0):!1},Ui=i=>Array.from(i.querySelectorAll(`.${op}`)).filter(o=>!Ue.apps.find(l=>l.isAttachedTo(o))).map(o=>ut(o)),Wi=i=>{let a=Ue.apps.find(n=>n.isAttachedTo(i));return a?hn(a):null},ve=(...i)=>{i.forEach(Qd),t()},Hi=()=>{let i={};return te(oi(),(a,n)=>{i[a]=n[0]}),i},Dt=i=>(ce(i)&&(Ue.apps.forEach(a=>{a.setOptions(i)}),Zr(i)),Hi())}function oo(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable})),i.push.apply(i,a)}return i}function xo(e){for(var t=1;te.length)&&(t=e.length);for(var i=0,a=new Array(t);i

',yp=Number.isNaN||Fe.isNaN;function j(e){return typeof e=="number"&&!yp(e)}var To=function(t){return t>0&&t<1/0};function oa(e){return typeof e>"u"}function ot(e){return ra(e)==="object"&&e!==null}var _p=Object.prototype.hasOwnProperty;function Tt(e){if(!ot(e))return!1;try{var t=e.constructor,i=t.prototype;return t&&i&&_p.call(i,"isPrototypeOf")}catch{return!1}}function Ee(e){return typeof e=="function"}var Rp=Array.prototype.slice;function Po(e){return Array.from?Array.from(e):Rp.call(e)}function le(e,t){return e&&Ee(t)&&(Array.isArray(e)||j(e.length)?Po(e).forEach(function(i,a){t.call(e,i,a,e)}):ot(e)&&Object.keys(e).forEach(function(i){t.call(e,e[i],i,e)})),e}var J=Object.assign||function(t){for(var i=arguments.length,a=new Array(i>1?i-1:0),n=1;n0&&a.forEach(function(o){ot(o)&&Object.keys(o).forEach(function(l){t[l]=o[l]})}),t},wp=/\.\d*(?:0|9){12}\d*$/;function vt(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1e11;return wp.test(e)?Math.round(e*t)/t:e}var Sp=/^width|height|left|top|marginLeft|marginTop$/;function je(e,t){var i=e.style;le(t,function(a,n){Sp.test(n)&&j(a)&&(a="".concat(a,"px")),i[n]=a})}function Lp(e,t){return e.classList?e.classList.contains(t):e.className.indexOf(t)>-1}function de(e,t){if(t){if(j(e.length)){le(e,function(a){de(a,t)});return}if(e.classList){e.classList.add(t);return}var i=e.className.trim();i?i.indexOf(t)<0&&(e.className="".concat(i," ").concat(t)):e.className=t}}function De(e,t){if(t){if(j(e.length)){le(e,function(i){De(i,t)});return}if(e.classList){e.classList.remove(t);return}e.className.indexOf(t)>=0&&(e.className=e.className.replace(t,""))}}function It(e,t,i){if(t){if(j(e.length)){le(e,function(a){It(a,t,i)});return}i?de(e,t):De(e,t)}}var Ap=/([a-z\d])([A-Z])/g;function va(e){return e.replace(Ap,"$1-$2").toLowerCase()}function ga(e,t){return ot(e[t])?e[t]:e.dataset?e.dataset[t]:e.getAttribute("data-".concat(va(t)))}function Ut(e,t,i){ot(i)?e[t]=i:e.dataset?e.dataset[t]=i:e.setAttribute("data-".concat(va(t)),i)}function Mp(e,t){if(ot(e[t]))try{delete e[t]}catch{e[t]=void 0}else if(e.dataset)try{delete e.dataset[t]}catch{e.dataset[t]=void 0}else e.removeAttribute("data-".concat(va(t)))}var Do=/\s\s*/,Fo=function(){var e=!1;if(bi){var t=!1,i=function(){},a=Object.defineProperty({},"once",{get:function(){return e=!0,t},set:function(o){t=o}});Fe.addEventListener("test",i,a),Fe.removeEventListener("test",i,a)}return e}();function Pe(e,t,i){var a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},n=i;t.trim().split(Do).forEach(function(o){if(!Fo){var l=e.listeners;l&&l[o]&&l[o][i]&&(n=l[o][i],delete l[o][i],Object.keys(l[o]).length===0&&delete l[o],Object.keys(l).length===0&&delete e.listeners)}e.removeEventListener(o,n,a)})}function Re(e,t,i){var a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},n=i;t.trim().split(Do).forEach(function(o){if(a.once&&!Fo){var l=e.listeners,r=l===void 0?{}:l;n=function(){delete r[o][i],e.removeEventListener(o,n,a);for(var p=arguments.length,c=new Array(p),d=0;dMath.abs(i)&&(i=m)})}),i}function gi(e,t){var i=e.pageX,a=e.pageY,n={endX:i,endY:a};return t?n:xo({startX:i,startY:a},n)}function Dp(e){var t=0,i=0,a=0;return le(e,function(n){var o=n.startX,l=n.startY;t+=o,i+=l,a+=1}),t/=a,i/=a,{pageX:t,pageY:i}}function qe(e){var t=e.aspectRatio,i=e.height,a=e.width,n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"contain",o=To(a),l=To(i);if(o&&l){var r=i*t;n==="contain"&&r>a||n==="cover"&&r90?{width:s,height:r}:{width:r,height:s}}function zp(e,t,i,a){var n=t.aspectRatio,o=t.naturalWidth,l=t.naturalHeight,r=t.rotate,s=r===void 0?0:r,p=t.scaleX,c=p===void 0?1:p,d=t.scaleY,m=d===void 0?1:d,u=i.aspectRatio,f=i.naturalWidth,h=i.naturalHeight,g=a.fillColor,I=g===void 0?"transparent":g,E=a.imageSmoothingEnabled,T=E===void 0?!0:E,v=a.imageSmoothingQuality,y=v===void 0?"low":v,b=a.maxWidth,w=b===void 0?1/0:b,x=a.maxHeight,_=x===void 0?1/0:x,P=a.minWidth,O=P===void 0?0:P,M=a.minHeight,C=M===void 0?0:M,S=document.createElement("canvas"),F=S.getContext("2d"),R=qe({aspectRatio:u,width:w,height:_}),L=qe({aspectRatio:u,width:O,height:C},"cover"),z=Math.min(R.width,Math.max(L.width,f)),D=Math.min(R.height,Math.max(L.height,h)),k=qe({aspectRatio:n,width:w,height:_}),B=qe({aspectRatio:n,width:O,height:C},"cover"),X=Math.min(k.width,Math.max(B.width,o)),Y=Math.min(k.height,Math.max(B.height,l)),Q=[-X/2,-Y/2,X,Y];return S.width=vt(z),S.height=vt(D),F.fillStyle=I,F.fillRect(0,0,z,D),F.save(),F.translate(z/2,D/2),F.rotate(s*Math.PI/180),F.scale(c,m),F.imageSmoothingEnabled=T,F.imageSmoothingQuality=y,F.drawImage.apply(F,[e].concat(_o(Q.map(function(pe){return Math.floor(vt(pe))})))),F.restore(),S}var Co=String.fromCharCode;function Cp(e,t,i){var a="";i+=t;for(var n=t;n0;)i.push(Co.apply(null,Po(n.subarray(0,a)))),n=n.subarray(a);return"data:".concat(t,";base64,").concat(btoa(i.join("")))}function Vp(e){var t=new DataView(e),i;try{var a,n,o;if(t.getUint8(0)===255&&t.getUint8(1)===216)for(var l=t.byteLength,r=2;r+1=8&&(o=p+d)}}}if(o){var m=t.getUint16(o,a),u,f;for(f=0;f=0?o:Mo),height:Math.max(a.offsetHeight,l>=0?l:Oo)};this.containerData=r,je(n,{width:r.width,height:r.height}),de(t,be),De(n,be)},initCanvas:function(){var t=this.containerData,i=this.imageData,a=this.options.viewMode,n=Math.abs(i.rotate)%180===90,o=n?i.naturalHeight:i.naturalWidth,l=n?i.naturalWidth:i.naturalHeight,r=o/l,s=t.width,p=t.height;t.height*r>t.width?a===3?s=t.height*r:p=t.width/r:a===3?p=t.width/r:s=t.height*r;var c={aspectRatio:r,naturalWidth:o,naturalHeight:l,width:s,height:p};this.canvasData=c,this.limited=a===1||a===2,this.limitCanvas(!0,!0),c.width=Math.min(Math.max(c.width,c.minWidth),c.maxWidth),c.height=Math.min(Math.max(c.height,c.minHeight),c.maxHeight),c.left=(t.width-c.width)/2,c.top=(t.height-c.height)/2,c.oldLeft=c.left,c.oldTop=c.top,this.initialCanvasData=J({},c)},limitCanvas:function(t,i){var a=this.options,n=this.containerData,o=this.canvasData,l=this.cropBoxData,r=a.viewMode,s=o.aspectRatio,p=this.cropped&&l;if(t){var c=Number(a.minCanvasWidth)||0,d=Number(a.minCanvasHeight)||0;r>1?(c=Math.max(c,n.width),d=Math.max(d,n.height),r===3&&(d*s>c?c=d*s:d=c/s)):r>0&&(c?c=Math.max(c,p?l.width:0):d?d=Math.max(d,p?l.height:0):p&&(c=l.width,d=l.height,d*s>c?c=d*s:d=c/s));var m=qe({aspectRatio:s,width:c,height:d});c=m.width,d=m.height,o.minWidth=c,o.minHeight=d,o.maxWidth=1/0,o.maxHeight=1/0}if(i)if(r>(p?0:1)){var u=n.width-o.width,f=n.height-o.height;o.minLeft=Math.min(0,u),o.minTop=Math.min(0,f),o.maxLeft=Math.max(0,u),o.maxTop=Math.max(0,f),p&&this.limited&&(o.minLeft=Math.min(l.left,l.left+(l.width-o.width)),o.minTop=Math.min(l.top,l.top+(l.height-o.height)),o.maxLeft=l.left,o.maxTop=l.top,r===2&&(o.width>=n.width&&(o.minLeft=Math.min(0,u),o.maxLeft=Math.max(0,u)),o.height>=n.height&&(o.minTop=Math.min(0,f),o.maxTop=Math.max(0,f))))}else o.minLeft=-o.width,o.minTop=-o.height,o.maxLeft=n.width,o.maxTop=n.height},renderCanvas:function(t,i){var a=this.canvasData,n=this.imageData;if(i){var o=Fp({width:n.naturalWidth*Math.abs(n.scaleX||1),height:n.naturalHeight*Math.abs(n.scaleY||1),degree:n.rotate||0}),l=o.width,r=o.height,s=a.width*(l/a.naturalWidth),p=a.height*(r/a.naturalHeight);a.left-=(s-a.width)/2,a.top-=(p-a.height)/2,a.width=s,a.height=p,a.aspectRatio=l/r,a.naturalWidth=l,a.naturalHeight=r,this.limitCanvas(!0,!1)}(a.width>a.maxWidth||a.widtha.maxHeight||a.heighti.width?o.height=o.width/a:o.width=o.height*a),this.cropBoxData=o,this.limitCropBox(!0,!0),o.width=Math.min(Math.max(o.width,o.minWidth),o.maxWidth),o.height=Math.min(Math.max(o.height,o.minHeight),o.maxHeight),o.width=Math.max(o.minWidth,o.width*n),o.height=Math.max(o.minHeight,o.height*n),o.left=i.left+(i.width-o.width)/2,o.top=i.top+(i.height-o.height)/2,o.oldLeft=o.left,o.oldTop=o.top,this.initialCropBoxData=J({},o)},limitCropBox:function(t,i){var a=this.options,n=this.containerData,o=this.canvasData,l=this.cropBoxData,r=this.limited,s=a.aspectRatio;if(t){var p=Number(a.minCropBoxWidth)||0,c=Number(a.minCropBoxHeight)||0,d=r?Math.min(n.width,o.width,o.width+o.left,n.width-o.left):n.width,m=r?Math.min(n.height,o.height,o.height+o.top,n.height-o.top):n.height;p=Math.min(p,n.width),c=Math.min(c,n.height),s&&(p&&c?c*s>p?c=p/s:p=c*s:p?c=p/s:c&&(p=c*s),m*s>d?m=d/s:d=m*s),l.minWidth=Math.min(p,d),l.minHeight=Math.min(c,m),l.maxWidth=d,l.maxHeight=m}i&&(r?(l.minLeft=Math.max(0,o.left),l.minTop=Math.max(0,o.top),l.maxLeft=Math.min(n.width,o.left+o.width)-l.width,l.maxTop=Math.min(n.height,o.top+o.height)-l.height):(l.minLeft=0,l.minTop=0,l.maxLeft=n.width-l.width,l.maxTop=n.height-l.height))},renderCropBox:function(){var t=this.options,i=this.containerData,a=this.cropBoxData;(a.width>a.maxWidth||a.widtha.maxHeight||a.height=i.width&&a.height>=i.height?wo:Ta),je(this.cropBox,J({width:a.width,height:a.height},Vt({translateX:a.left,translateY:a.top}))),this.cropped&&this.limited&&this.limitCanvas(!0,!0),this.disabled||this.output()},output:function(){this.preview(),xt(this.element,pa,this.getData())}},Wp={initPreview:function(){var t=this.element,i=this.crossOrigin,a=this.options.preview,n=i?this.crossOriginUrl:this.url,o=t.alt||"The image to preview",l=document.createElement("img");if(i&&(l.crossOrigin=i),l.src=n,l.alt=o,this.viewBox.appendChild(l),this.viewBoxImage=l,!!a){var r=a;typeof a=="string"?r=t.ownerDocument.querySelectorAll(a):a.querySelector&&(r=[a]),this.previews=r,le(r,function(s){var p=document.createElement("img");Ut(s,hi,{width:s.offsetWidth,height:s.offsetHeight,html:s.innerHTML}),i&&(p.crossOrigin=i),p.src=n,p.alt=o,p.style.cssText='display:block;width:100%;height:auto;min-width:0!important;min-height:0!important;max-width:none!important;max-height:none!important;image-orientation:0deg!important;"',s.innerHTML="",s.appendChild(p)})}},resetPreview:function(){le(this.previews,function(t){var i=ga(t,hi);je(t,{width:i.width,height:i.height}),t.innerHTML=i.html,Mp(t,hi)})},preview:function(){var t=this.imageData,i=this.canvasData,a=this.cropBoxData,n=a.width,o=a.height,l=t.width,r=t.height,s=a.left-i.left-t.left,p=a.top-i.top-t.top;!this.cropped||this.disabled||(je(this.viewBoxImage,J({width:l,height:r},Vt(J({translateX:-s,translateY:-p},t)))),le(this.previews,function(c){var d=ga(c,hi),m=d.width,u=d.height,f=m,h=u,g=1;n&&(g=m/n,h=o*g),o&&h>u&&(g=u/o,f=n*g,h=u),je(c,{width:f,height:h}),je(c.getElementsByTagName("img")[0],J({width:l*g,height:r*g},Vt(J({translateX:-s*g,translateY:-p*g},t))))}))}},Hp={bind:function(){var t=this.element,i=this.options,a=this.cropper;Ee(i.cropstart)&&Re(t,fa,i.cropstart),Ee(i.cropmove)&&Re(t,ua,i.cropmove),Ee(i.cropend)&&Re(t,ma,i.cropend),Ee(i.crop)&&Re(t,pa,i.crop),Ee(i.zoom)&&Re(t,ha,i.zoom),Re(a,po,this.onCropStart=this.cropStart.bind(this)),i.zoomable&&i.zoomOnWheel&&Re(a,go,this.onWheel=this.wheel.bind(this),{passive:!1,capture:!0}),i.toggleDragModeOnDblclick&&Re(a,co,this.onDblclick=this.dblclick.bind(this)),Re(t.ownerDocument,mo,this.onCropMove=this.cropMove.bind(this)),Re(t.ownerDocument,uo,this.onCropEnd=this.cropEnd.bind(this)),i.responsive&&Re(window,ho,this.onResize=this.resize.bind(this))},unbind:function(){var t=this.element,i=this.options,a=this.cropper;Ee(i.cropstart)&&Pe(t,fa,i.cropstart),Ee(i.cropmove)&&Pe(t,ua,i.cropmove),Ee(i.cropend)&&Pe(t,ma,i.cropend),Ee(i.crop)&&Pe(t,pa,i.crop),Ee(i.zoom)&&Pe(t,ha,i.zoom),Pe(a,po,this.onCropStart),i.zoomable&&i.zoomOnWheel&&Pe(a,go,this.onWheel,{passive:!1,capture:!0}),i.toggleDragModeOnDblclick&&Pe(a,co,this.onDblclick),Pe(t.ownerDocument,mo,this.onCropMove),Pe(t.ownerDocument,uo,this.onCropEnd),i.responsive&&Pe(window,ho,this.onResize)}},jp={resize:function(){if(!this.disabled){var t=this.options,i=this.container,a=this.containerData,n=i.offsetWidth/a.width,o=i.offsetHeight/a.height,l=Math.abs(n-1)>Math.abs(o-1)?n:o;if(l!==1){var r,s;t.restore&&(r=this.getCanvasData(),s=this.getCropBoxData()),this.render(),t.restore&&(this.setCanvasData(le(r,function(p,c){r[c]=p*l})),this.setCropBoxData(le(s,function(p,c){s[c]=p*l})))}}},dblclick:function(){this.disabled||this.options.dragMode===Ao||this.setDragMode(Lp(this.dragBox,ca)?Lo:Ia)},wheel:function(t){var i=this,a=Number(this.options.wheelZoomRatio)||.1,n=1;this.disabled||(t.preventDefault(),!this.wheeling&&(this.wheeling=!0,setTimeout(function(){i.wheeling=!1},50),t.deltaY?n=t.deltaY>0?1:-1:t.wheelDelta?n=-t.wheelDelta/120:t.detail&&(n=t.detail>0?1:-1),this.zoom(-n*a,t)))},cropStart:function(t){var i=t.buttons,a=t.button;if(!(this.disabled||(t.type==="mousedown"||t.type==="pointerdown"&&t.pointerType==="mouse")&&(j(i)&&i!==1||j(a)&&a!==0||t.ctrlKey))){var n=this.options,o=this.pointers,l;t.changedTouches?le(t.changedTouches,function(r){o[r.identifier]=gi(r)}):o[t.pointerId||0]=gi(t),Object.keys(o).length>1&&n.zoomable&&n.zoomOnTouch?l=So:l=ga(t.target,Gt),bp.test(l)&&xt(this.element,fa,{originalEvent:t,action:l})!==!1&&(t.preventDefault(),this.action=l,this.cropping=!1,l===Ro&&(this.cropping=!0,de(this.dragBox,Ei)))}},cropMove:function(t){var i=this.action;if(!(this.disabled||!i)){var a=this.pointers;t.preventDefault(),xt(this.element,ua,{originalEvent:t,action:i})!==!1&&(t.changedTouches?le(t.changedTouches,function(n){J(a[n.identifier]||{},gi(n,!0))}):J(a[t.pointerId||0]||{},gi(t,!0)),this.change(t))}},cropEnd:function(t){if(!this.disabled){var i=this.action,a=this.pointers;t.changedTouches?le(t.changedTouches,function(n){delete a[n.identifier]}):delete a[t.pointerId||0],i&&(t.preventDefault(),Object.keys(a).length||(this.action=""),this.cropping&&(this.cropping=!1,It(this.dragBox,Ei,this.cropped&&this.options.modal)),xt(this.element,ma,{originalEvent:t,action:i}))}}},qp={change:function(t){var i=this.options,a=this.canvasData,n=this.containerData,o=this.cropBoxData,l=this.pointers,r=this.action,s=i.aspectRatio,p=o.left,c=o.top,d=o.width,m=o.height,u=p+d,f=c+m,h=0,g=0,I=n.width,E=n.height,T=!0,v;!s&&t.shiftKey&&(s=d&&m?d/m:1),this.limited&&(h=o.minLeft,g=o.minTop,I=h+Math.min(n.width,a.width,a.left+a.width),E=g+Math.min(n.height,a.height,a.top+a.height));var y=l[Object.keys(l)[0]],b={x:y.endX-y.startX,y:y.endY-y.startY},w=function(_){switch(_){case at:u+b.x>I&&(b.x=I-u);break;case nt:p+b.xE&&(b.y=E-f);break}};switch(r){case Ta:p+=b.x,c+=b.y;break;case at:if(b.x>=0&&(u>=I||s&&(c<=g||f>=E))){T=!1;break}w(at),d+=b.x,d<0&&(r=nt,d=-d,p-=d),s&&(m=d/s,c+=(o.height-m)/2);break;case He:if(b.y<=0&&(c<=g||s&&(p<=h||u>=I))){T=!1;break}w(He),m-=b.y,c+=b.y,m<0&&(r=bt,m=-m,c-=m),s&&(d=m*s,p+=(o.width-d)/2);break;case nt:if(b.x<=0&&(p<=h||s&&(c<=g||f>=E))){T=!1;break}w(nt),d-=b.x,p+=b.x,d<0&&(r=at,d=-d,p-=d),s&&(m=d/s,c+=(o.height-m)/2);break;case bt:if(b.y>=0&&(f>=E||s&&(p<=h||u>=I))){T=!1;break}w(bt),m+=b.y,m<0&&(r=He,m=-m,c-=m),s&&(d=m*s,p+=(o.width-d)/2);break;case Ct:if(s){if(b.y<=0&&(c<=g||u>=I)){T=!1;break}w(He),m-=b.y,c+=b.y,d=m*s}else w(He),w(at),b.x>=0?ug&&(m-=b.y,c+=b.y):(m-=b.y,c+=b.y);d<0&&m<0?(r=kt,m=-m,d=-d,c-=m,p-=d):d<0?(r=Nt,d=-d,p-=d):m<0&&(r=Bt,m=-m,c-=m);break;case Nt:if(s){if(b.y<=0&&(c<=g||p<=h)){T=!1;break}w(He),m-=b.y,c+=b.y,d=m*s,p+=o.width-d}else w(He),w(nt),b.x<=0?p>h?(d-=b.x,p+=b.x):b.y<=0&&c<=g&&(T=!1):(d-=b.x,p+=b.x),b.y<=0?c>g&&(m-=b.y,c+=b.y):(m-=b.y,c+=b.y);d<0&&m<0?(r=Bt,m=-m,d=-d,c-=m,p-=d):d<0?(r=Ct,d=-d,p-=d):m<0&&(r=kt,m=-m,c-=m);break;case kt:if(s){if(b.x<=0&&(p<=h||f>=E)){T=!1;break}w(nt),d-=b.x,p+=b.x,m=d/s}else w(bt),w(nt),b.x<=0?p>h?(d-=b.x,p+=b.x):b.y>=0&&f>=E&&(T=!1):(d-=b.x,p+=b.x),b.y>=0?f=0&&(u>=I||f>=E)){T=!1;break}w(at),d+=b.x,m=d/s}else w(bt),w(at),b.x>=0?u=0&&f>=E&&(T=!1):d+=b.x,b.y>=0?f0?r=b.y>0?Bt:Ct:b.x<0&&(p-=d,r=b.y>0?kt:Nt),b.y<0&&(c-=m),this.cropped||(De(this.cropBox,be),this.cropped=!0,this.limited&&this.limitCropBox(!0,!0));break}T&&(o.width=d,o.height=m,o.left=p,o.top=c,this.action=r,this.renderCropBox()),le(l,function(x){x.startX=x.endX,x.startY=x.endY})}},Yp={crop:function(){return this.ready&&!this.cropped&&!this.disabled&&(this.cropped=!0,this.limitCropBox(!0,!0),this.options.modal&&de(this.dragBox,Ei),De(this.cropBox,be),this.setCropBoxData(this.initialCropBoxData)),this},reset:function(){return this.ready&&!this.disabled&&(this.imageData=J({},this.initialImageData),this.canvasData=J({},this.initialCanvasData),this.cropBoxData=J({},this.initialCropBoxData),this.renderCanvas(),this.cropped&&this.renderCropBox()),this},clear:function(){return this.cropped&&!this.disabled&&(J(this.cropBoxData,{left:0,top:0,width:0,height:0}),this.cropped=!1,this.renderCropBox(),this.limitCanvas(!0,!0),this.renderCanvas(),De(this.dragBox,Ei),de(this.cropBox,be)),this},replace:function(t){var i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;return!this.disabled&&t&&(this.isImg&&(this.element.src=t),i?(this.url=t,this.image.src=t,this.ready&&(this.viewBoxImage.src=t,le(this.previews,function(a){a.getElementsByTagName("img")[0].src=t}))):(this.isImg&&(this.replaced=!0),this.options.data=null,this.uncreate(),this.load(t))),this},enable:function(){return this.ready&&this.disabled&&(this.disabled=!1,De(this.cropper,ro)),this},disable:function(){return this.ready&&!this.disabled&&(this.disabled=!0,de(this.cropper,ro)),this},destroy:function(){var t=this.element;return t[K]?(t[K]=void 0,this.isImg&&this.replaced&&(t.src=this.originalUrl),this.uncreate(),this):this},move:function(t){var i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:t,a=this.canvasData,n=a.left,o=a.top;return this.moveTo(oa(t)?t:n+Number(t),oa(i)?i:o+Number(i))},moveTo:function(t){var i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:t,a=this.canvasData,n=!1;return t=Number(t),i=Number(i),this.ready&&!this.disabled&&this.options.movable&&(j(t)&&(a.left=t,n=!0),j(i)&&(a.top=i,n=!0),n&&this.renderCanvas(!0)),this},zoom:function(t,i){var a=this.canvasData;return t=Number(t),t<0?t=1/(1-t):t=1+t,this.zoomTo(a.width*t/a.naturalWidth,null,i)},zoomTo:function(t,i,a){var n=this.options,o=this.canvasData,l=o.width,r=o.height,s=o.naturalWidth,p=o.naturalHeight;if(t=Number(t),t>=0&&this.ready&&!this.disabled&&n.zoomable){var c=s*t,d=p*t;if(xt(this.element,ha,{ratio:t,oldRatio:l/s,originalEvent:a})===!1)return this;if(a){var m=this.pointers,u=zo(this.cropper),f=m&&Object.keys(m).length?Dp(m):{pageX:a.pageX,pageY:a.pageY};o.left-=(c-l)*((f.pageX-u.left-o.left)/l),o.top-=(d-r)*((f.pageY-u.top-o.top)/r)}else Tt(i)&&j(i.x)&&j(i.y)?(o.left-=(c-l)*((i.x-o.left)/l),o.top-=(d-r)*((i.y-o.top)/r)):(o.left-=(c-l)/2,o.top-=(d-r)/2);o.width=c,o.height=d,this.renderCanvas(!0)}return this},rotate:function(t){return this.rotateTo((this.imageData.rotate||0)+Number(t))},rotateTo:function(t){return t=Number(t),j(t)&&this.ready&&!this.disabled&&this.options.rotatable&&(this.imageData.rotate=t%360,this.renderCanvas(!0,!0)),this},scaleX:function(t){var i=this.imageData.scaleY;return this.scale(t,j(i)?i:1)},scaleY:function(t){var i=this.imageData.scaleX;return this.scale(j(i)?i:1,t)},scale:function(t){var i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:t,a=this.imageData,n=!1;return t=Number(t),i=Number(i),this.ready&&!this.disabled&&this.options.scalable&&(j(t)&&(a.scaleX=t,n=!0),j(i)&&(a.scaleY=i,n=!0),n&&this.renderCanvas(!0,!0)),this},getData:function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,i=this.options,a=this.imageData,n=this.canvasData,o=this.cropBoxData,l;if(this.ready&&this.cropped){l={x:o.left-n.left,y:o.top-n.top,width:o.width,height:o.height};var r=a.width/a.naturalWidth;if(le(l,function(c,d){l[d]=c/r}),t){var s=Math.round(l.y+l.height),p=Math.round(l.x+l.width);l.x=Math.round(l.x),l.y=Math.round(l.y),l.width=p-l.x,l.height=s-l.y}}else l={x:0,y:0,width:0,height:0};return i.rotatable&&(l.rotate=a.rotate||0),i.scalable&&(l.scaleX=a.scaleX||1,l.scaleY=a.scaleY||1),l},setData:function(t){var i=this.options,a=this.imageData,n=this.canvasData,o={};if(this.ready&&!this.disabled&&Tt(t)){var l=!1;i.rotatable&&j(t.rotate)&&t.rotate!==a.rotate&&(a.rotate=t.rotate,l=!0),i.scalable&&(j(t.scaleX)&&t.scaleX!==a.scaleX&&(a.scaleX=t.scaleX,l=!0),j(t.scaleY)&&t.scaleY!==a.scaleY&&(a.scaleY=t.scaleY,l=!0)),l&&this.renderCanvas(!0,!0);var r=a.width/a.naturalWidth;j(t.x)&&(o.left=t.x*r+n.left),j(t.y)&&(o.top=t.y*r+n.top),j(t.width)&&(o.width=t.width*r),j(t.height)&&(o.height=t.height*r),this.setCropBoxData(o)}return this},getContainerData:function(){return this.ready?J({},this.containerData):{}},getImageData:function(){return this.sized?J({},this.imageData):{}},getCanvasData:function(){var t=this.canvasData,i={};return this.ready&&le(["left","top","width","height","naturalWidth","naturalHeight"],function(a){i[a]=t[a]}),i},setCanvasData:function(t){var i=this.canvasData,a=i.aspectRatio;return this.ready&&!this.disabled&&Tt(t)&&(j(t.left)&&(i.left=t.left),j(t.top)&&(i.top=t.top),j(t.width)?(i.width=t.width,i.height=t.width/a):j(t.height)&&(i.height=t.height,i.width=t.height*a),this.renderCanvas(!0)),this},getCropBoxData:function(){var t=this.cropBoxData,i;return this.ready&&this.cropped&&(i={left:t.left,top:t.top,width:t.width,height:t.height}),i||{}},setCropBoxData:function(t){var i=this.cropBoxData,a=this.options.aspectRatio,n,o;return this.ready&&this.cropped&&!this.disabled&&Tt(t)&&(j(t.left)&&(i.left=t.left),j(t.top)&&(i.top=t.top),j(t.width)&&t.width!==i.width&&(n=!0,i.width=t.width),j(t.height)&&t.height!==i.height&&(o=!0,i.height=t.height),a&&(n?i.height=i.width/a:o&&(i.width=i.height*a)),this.renderCropBox()),this},getCroppedCanvas:function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!this.ready||!window.HTMLCanvasElement)return null;var i=this.canvasData,a=zp(this.image,this.imageData,i,t);if(!this.cropped)return a;var n=this.getData(t.rounded),o=n.x,l=n.y,r=n.width,s=n.height,p=a.width/Math.floor(i.naturalWidth);p!==1&&(o*=p,l*=p,r*=p,s*=p);var c=r/s,d=qe({aspectRatio:c,width:t.maxWidth||1/0,height:t.maxHeight||1/0}),m=qe({aspectRatio:c,width:t.minWidth||0,height:t.minHeight||0},"cover"),u=qe({aspectRatio:c,width:t.width||(p!==1?a.width:r),height:t.height||(p!==1?a.height:s)}),f=u.width,h=u.height;f=Math.min(d.width,Math.max(m.width,f)),h=Math.min(d.height,Math.max(m.height,h));var g=document.createElement("canvas"),I=g.getContext("2d");g.width=vt(f),g.height=vt(h),I.fillStyle=t.fillColor||"transparent",I.fillRect(0,0,f,h);var E=t.imageSmoothingEnabled,T=E===void 0?!0:E,v=t.imageSmoothingQuality;I.imageSmoothingEnabled=T,v&&(I.imageSmoothingQuality=v);var y=a.width,b=a.height,w=o,x=l,_,P,O,M,C,S;w<=-r||w>y?(w=0,_=0,O=0,C=0):w<=0?(O=-w,w=0,_=Math.min(y,r+w),C=_):w<=y&&(O=0,_=Math.min(r,y-w),C=_),_<=0||x<=-s||x>b?(x=0,P=0,M=0,S=0):x<=0?(M=-x,x=0,P=Math.min(b,s+x),S=P):x<=b&&(M=0,P=Math.min(s,b-x),S=P);var F=[w,x,_,P];if(C>0&&S>0){var R=f/r;F.push(O*R,M*R,C*R,S*R)}return I.drawImage.apply(I,[a].concat(_o(F.map(function(L){return Math.floor(vt(L))})))),g},setAspectRatio:function(t){var i=this.options;return!this.disabled&&!oa(t)&&(i.aspectRatio=Math.max(0,t)||NaN,this.ready&&(this.initCropBox(),this.cropped&&this.renderCropBox())),this},setDragMode:function(t){var i=this.options,a=this.dragBox,n=this.face;if(this.ready&&!this.disabled){var o=t===Ia,l=i.movable&&t===Lo;t=o||l?t:Ao,i.dragMode=t,Ut(a,Gt,t),It(a,ca,o),It(a,da,l),i.cropBoxMovable||(Ut(n,Gt,t),It(n,ca,o),It(n,da,l))}return this}},$p=Fe.Cropper,xa=function(){function e(t){var i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(rp(this,e),!t||!vp.test(t.tagName))throw new Error("The first argument is required and must be an or element.");this.element=t,this.options=J({},bo,Tt(i)&&i),this.cropped=!1,this.disabled=!1,this.pointers={},this.ready=!1,this.reloading=!1,this.replaced=!1,this.sized=!1,this.sizing=!1,this.init()}return sp(e,[{key:"init",value:function(){var i=this.element,a=i.tagName.toLowerCase(),n;if(!i[K]){if(i[K]=this,a==="img"){if(this.isImg=!0,n=i.getAttribute("src")||"",this.originalUrl=n,!n)return;n=i.src}else a==="canvas"&&window.HTMLCanvasElement&&(n=i.toDataURL());this.load(n)}}},{key:"load",value:function(i){var a=this;if(i){this.url=i,this.imageData={};var n=this.element,o=this.options;if(!o.rotatable&&!o.scalable&&(o.checkOrientation=!1),!o.checkOrientation||!window.ArrayBuffer){this.clone();return}if(Tp.test(i)){Ip.test(i)?this.read(Bp(i)):this.clone();return}var l=new XMLHttpRequest,r=this.clone.bind(this);this.reloading=!0,this.xhr=l,l.onabort=r,l.onerror=r,l.ontimeout=r,l.onprogress=function(){l.getResponseHeader("content-type")!==Eo&&l.abort()},l.onload=function(){a.read(l.response)},l.onloadend=function(){a.reloading=!1,a.xhr=null},o.checkCrossOrigin&&Io(i)&&n.crossOrigin&&(i=vo(i)),l.open("GET",i,!0),l.responseType="arraybuffer",l.withCredentials=n.crossOrigin==="use-credentials",l.send()}}},{key:"read",value:function(i){var a=this.options,n=this.imageData,o=Vp(i),l=0,r=1,s=1;if(o>1){this.url=kp(i,Eo);var p=Gp(o);l=p.rotate,r=p.scaleX,s=p.scaleY}a.rotatable&&(n.rotate=l),a.scalable&&(n.scaleX=r,n.scaleY=s),this.clone()}},{key:"clone",value:function(){var i=this.element,a=this.url,n=i.crossOrigin,o=a;this.options.checkCrossOrigin&&Io(a)&&(n||(n="anonymous"),o=vo(a)),this.crossOrigin=n,this.crossOriginUrl=o;var l=document.createElement("img");n&&(l.crossOrigin=n),l.src=o||a,l.alt=i.alt||"The image to crop",this.image=l,l.onload=this.start.bind(this),l.onerror=this.stop.bind(this),de(l,so),i.parentNode.insertBefore(l,i.nextSibling)}},{key:"start",value:function(){var i=this,a=this.image;a.onload=null,a.onerror=null,this.sizing=!0;var n=Fe.navigator&&/(?:iPad|iPhone|iPod).*?AppleWebKit/i.test(Fe.navigator.userAgent),o=function(p,c){J(i.imageData,{naturalWidth:p,naturalHeight:c,aspectRatio:p/c}),i.initialImageData=J({},i.imageData),i.sizing=!1,i.sized=!0,i.build()};if(a.naturalWidth&&!n){o(a.naturalWidth,a.naturalHeight);return}var l=document.createElement("img"),r=document.body||document.documentElement;this.sizingImage=l,l.onload=function(){o(l.width,l.height),n||r.removeChild(l)},l.src=a.src,n||(l.style.cssText="left:0;max-height:none!important;max-width:none!important;min-height:0!important;min-width:0!important;opacity:0;position:absolute;top:0;z-index:-1;",r.appendChild(l))}},{key:"stop",value:function(){var i=this.image;i.onload=null,i.onerror=null,i.parentNode.removeChild(i),this.image=null}},{key:"build",value:function(){if(!(!this.sized||this.ready)){var i=this.element,a=this.options,n=this.image,o=i.parentNode,l=document.createElement("div");l.innerHTML=xp;var r=l.querySelector(".".concat(K,"-container")),s=r.querySelector(".".concat(K,"-canvas")),p=r.querySelector(".".concat(K,"-drag-box")),c=r.querySelector(".".concat(K,"-crop-box")),d=c.querySelector(".".concat(K,"-face"));this.container=o,this.cropper=r,this.canvas=s,this.dragBox=p,this.cropBox=c,this.viewBox=r.querySelector(".".concat(K,"-view-box")),this.face=d,s.appendChild(n),de(i,be),o.insertBefore(r,i.nextSibling),De(n,so),this.initPreview(),this.bind(),a.initialAspectRatio=Math.max(0,a.initialAspectRatio)||NaN,a.aspectRatio=Math.max(0,a.aspectRatio)||NaN,a.viewMode=Math.max(0,Math.min(3,Math.round(a.viewMode)))||0,de(c,be),a.guides||de(c.getElementsByClassName("".concat(K,"-dashed")),be),a.center||de(c.getElementsByClassName("".concat(K,"-center")),be),a.background&&de(r,"".concat(K,"-bg")),a.highlight||de(d,fp),a.cropBoxMovable&&(de(d,da),Ut(d,Gt,Ta)),a.cropBoxResizable||(de(c.getElementsByClassName("".concat(K,"-line")),be),de(c.getElementsByClassName("".concat(K,"-point")),be)),this.render(),this.ready=!0,this.setDragMode(a.dragMode),a.autoCrop&&this.crop(),this.setData(a.data),Ee(a.ready)&&Re(i,fo,a.ready,{once:!0}),xt(i,fo)}}},{key:"unbuild",value:function(){if(this.ready){this.ready=!1,this.unbind(),this.resetPreview();var i=this.cropper.parentNode;i&&i.removeChild(this.cropper),De(this.element,be)}}},{key:"uncreate",value:function(){this.ready?(this.unbuild(),this.ready=!1,this.cropped=!1):this.sizing?(this.sizingImage.onload=null,this.sizing=!1,this.sized=!1):this.reloading?(this.xhr.onabort=null,this.xhr.abort()):this.image&&this.stop()}}],[{key:"noConflict",value:function(){return window.Cropper=$p,e}},{key:"setDefaults",value:function(i){J(bo,Tt(i)&&i)}}])}();J(xa.prototype,Up,Wp,Hp,jp,qp,Yp);var No={"application/prs.cww":["cww"],"application/prs.xsf+xml":["xsf"],"application/vnd.1000minds.decision-model+xml":["1km"],"application/vnd.3gpp.pic-bw-large":["plb"],"application/vnd.3gpp.pic-bw-small":["psb"],"application/vnd.3gpp.pic-bw-var":["pvb"],"application/vnd.3gpp2.tcap":["tcap"],"application/vnd.3m.post-it-notes":["pwn"],"application/vnd.accpac.simply.aso":["aso"],"application/vnd.accpac.simply.imp":["imp"],"application/vnd.acucobol":["acu"],"application/vnd.acucorp":["atc","acutc"],"application/vnd.adobe.air-application-installer-package+zip":["air"],"application/vnd.adobe.formscentral.fcdt":["fcdt"],"application/vnd.adobe.fxp":["fxp","fxpl"],"application/vnd.adobe.xdp+xml":["xdp"],"application/vnd.adobe.xfdf":["*xfdf"],"application/vnd.age":["age"],"application/vnd.ahead.space":["ahead"],"application/vnd.airzip.filesecure.azf":["azf"],"application/vnd.airzip.filesecure.azs":["azs"],"application/vnd.amazon.ebook":["azw"],"application/vnd.americandynamics.acc":["acc"],"application/vnd.amiga.ami":["ami"],"application/vnd.android.package-archive":["apk"],"application/vnd.anser-web-certificate-issue-initiation":["cii"],"application/vnd.anser-web-funds-transfer-initiation":["fti"],"application/vnd.antix.game-component":["atx"],"application/vnd.apple.installer+xml":["mpkg"],"application/vnd.apple.keynote":["key"],"application/vnd.apple.mpegurl":["m3u8"],"application/vnd.apple.numbers":["numbers"],"application/vnd.apple.pages":["pages"],"application/vnd.apple.pkpass":["pkpass"],"application/vnd.aristanetworks.swi":["swi"],"application/vnd.astraea-software.iota":["iota"],"application/vnd.audiograph":["aep"],"application/vnd.balsamiq.bmml+xml":["bmml"],"application/vnd.blueice.multipass":["mpm"],"application/vnd.bmi":["bmi"],"application/vnd.businessobjects":["rep"],"application/vnd.chemdraw+xml":["cdxml"],"application/vnd.chipnuts.karaoke-mmd":["mmd"],"application/vnd.cinderella":["cdy"],"application/vnd.citationstyles.style+xml":["csl"],"application/vnd.claymore":["cla"],"application/vnd.cloanto.rp9":["rp9"],"application/vnd.clonk.c4group":["c4g","c4d","c4f","c4p","c4u"],"application/vnd.cluetrust.cartomobile-config":["c11amc"],"application/vnd.cluetrust.cartomobile-config-pkg":["c11amz"],"application/vnd.commonspace":["csp"],"application/vnd.contact.cmsg":["cdbcmsg"],"application/vnd.cosmocaller":["cmc"],"application/vnd.crick.clicker":["clkx"],"application/vnd.crick.clicker.keyboard":["clkk"],"application/vnd.crick.clicker.palette":["clkp"],"application/vnd.crick.clicker.template":["clkt"],"application/vnd.crick.clicker.wordbank":["clkw"],"application/vnd.criticaltools.wbs+xml":["wbs"],"application/vnd.ctc-posml":["pml"],"application/vnd.cups-ppd":["ppd"],"application/vnd.curl.car":["car"],"application/vnd.curl.pcurl":["pcurl"],"application/vnd.dart":["dart"],"application/vnd.data-vision.rdz":["rdz"],"application/vnd.dbf":["dbf"],"application/vnd.dece.data":["uvf","uvvf","uvd","uvvd"],"application/vnd.dece.ttml+xml":["uvt","uvvt"],"application/vnd.dece.unspecified":["uvx","uvvx"],"application/vnd.dece.zip":["uvz","uvvz"],"application/vnd.denovo.fcselayout-link":["fe_launch"],"application/vnd.dna":["dna"],"application/vnd.dolby.mlp":["mlp"],"application/vnd.dpgraph":["dpg"],"application/vnd.dreamfactory":["dfac"],"application/vnd.ds-keypoint":["kpxx"],"application/vnd.dvb.ait":["ait"],"application/vnd.dvb.service":["svc"],"application/vnd.dynageo":["geo"],"application/vnd.ecowin.chart":["mag"],"application/vnd.enliven":["nml"],"application/vnd.epson.esf":["esf"],"application/vnd.epson.msf":["msf"],"application/vnd.epson.quickanime":["qam"],"application/vnd.epson.salt":["slt"],"application/vnd.epson.ssf":["ssf"],"application/vnd.eszigno3+xml":["es3","et3"],"application/vnd.ezpix-album":["ez2"],"application/vnd.ezpix-package":["ez3"],"application/vnd.fdf":["*fdf"],"application/vnd.fdsn.mseed":["mseed"],"application/vnd.fdsn.seed":["seed","dataless"],"application/vnd.flographit":["gph"],"application/vnd.fluxtime.clip":["ftc"],"application/vnd.framemaker":["fm","frame","maker","book"],"application/vnd.frogans.fnc":["fnc"],"application/vnd.frogans.ltf":["ltf"],"application/vnd.fsc.weblaunch":["fsc"],"application/vnd.fujitsu.oasys":["oas"],"application/vnd.fujitsu.oasys2":["oa2"],"application/vnd.fujitsu.oasys3":["oa3"],"application/vnd.fujitsu.oasysgp":["fg5"],"application/vnd.fujitsu.oasysprs":["bh2"],"application/vnd.fujixerox.ddd":["ddd"],"application/vnd.fujixerox.docuworks":["xdw"],"application/vnd.fujixerox.docuworks.binder":["xbd"],"application/vnd.fuzzysheet":["fzs"],"application/vnd.genomatix.tuxedo":["txd"],"application/vnd.geogebra.file":["ggb"],"application/vnd.geogebra.tool":["ggt"],"application/vnd.geometry-explorer":["gex","gre"],"application/vnd.geonext":["gxt"],"application/vnd.geoplan":["g2w"],"application/vnd.geospace":["g3w"],"application/vnd.gmx":["gmx"],"application/vnd.google-apps.document":["gdoc"],"application/vnd.google-apps.presentation":["gslides"],"application/vnd.google-apps.spreadsheet":["gsheet"],"application/vnd.google-earth.kml+xml":["kml"],"application/vnd.google-earth.kmz":["kmz"],"application/vnd.grafeq":["gqf","gqs"],"application/vnd.groove-account":["gac"],"application/vnd.groove-help":["ghf"],"application/vnd.groove-identity-message":["gim"],"application/vnd.groove-injector":["grv"],"application/vnd.groove-tool-message":["gtm"],"application/vnd.groove-tool-template":["tpl"],"application/vnd.groove-vcard":["vcg"],"application/vnd.hal+xml":["hal"],"application/vnd.handheld-entertainment+xml":["zmm"],"application/vnd.hbci":["hbci"],"application/vnd.hhe.lesson-player":["les"],"application/vnd.hp-hpgl":["hpgl"],"application/vnd.hp-hpid":["hpid"],"application/vnd.hp-hps":["hps"],"application/vnd.hp-jlyt":["jlt"],"application/vnd.hp-pcl":["pcl"],"application/vnd.hp-pclxl":["pclxl"],"application/vnd.hydrostatix.sof-data":["sfd-hdstx"],"application/vnd.ibm.minipay":["mpy"],"application/vnd.ibm.modcap":["afp","listafp","list3820"],"application/vnd.ibm.rights-management":["irm"],"application/vnd.ibm.secure-container":["sc"],"application/vnd.iccprofile":["icc","icm"],"application/vnd.igloader":["igl"],"application/vnd.immervision-ivp":["ivp"],"application/vnd.immervision-ivu":["ivu"],"application/vnd.insors.igm":["igm"],"application/vnd.intercon.formnet":["xpw","xpx"],"application/vnd.intergeo":["i2g"],"application/vnd.intu.qbo":["qbo"],"application/vnd.intu.qfx":["qfx"],"application/vnd.ipunplugged.rcprofile":["rcprofile"],"application/vnd.irepository.package+xml":["irp"],"application/vnd.is-xpr":["xpr"],"application/vnd.isac.fcs":["fcs"],"application/vnd.jam":["jam"],"application/vnd.jcp.javame.midlet-rms":["rms"],"application/vnd.jisp":["jisp"],"application/vnd.joost.joda-archive":["joda"],"application/vnd.kahootz":["ktz","ktr"],"application/vnd.kde.karbon":["karbon"],"application/vnd.kde.kchart":["chrt"],"application/vnd.kde.kformula":["kfo"],"application/vnd.kde.kivio":["flw"],"application/vnd.kde.kontour":["kon"],"application/vnd.kde.kpresenter":["kpr","kpt"],"application/vnd.kde.kspread":["ksp"],"application/vnd.kde.kword":["kwd","kwt"],"application/vnd.kenameaapp":["htke"],"application/vnd.kidspiration":["kia"],"application/vnd.kinar":["kne","knp"],"application/vnd.koan":["skp","skd","skt","skm"],"application/vnd.kodak-descriptor":["sse"],"application/vnd.las.las+xml":["lasxml"],"application/vnd.llamagraphics.life-balance.desktop":["lbd"],"application/vnd.llamagraphics.life-balance.exchange+xml":["lbe"],"application/vnd.lotus-1-2-3":["123"],"application/vnd.lotus-approach":["apr"],"application/vnd.lotus-freelance":["pre"],"application/vnd.lotus-notes":["nsf"],"application/vnd.lotus-organizer":["org"],"application/vnd.lotus-screencam":["scm"],"application/vnd.lotus-wordpro":["lwp"],"application/vnd.macports.portpkg":["portpkg"],"application/vnd.mapbox-vector-tile":["mvt"],"application/vnd.mcd":["mcd"],"application/vnd.medcalcdata":["mc1"],"application/vnd.mediastation.cdkey":["cdkey"],"application/vnd.mfer":["mwf"],"application/vnd.mfmp":["mfm"],"application/vnd.micrografx.flo":["flo"],"application/vnd.micrografx.igx":["igx"],"application/vnd.mif":["mif"],"application/vnd.mobius.daf":["daf"],"application/vnd.mobius.dis":["dis"],"application/vnd.mobius.mbk":["mbk"],"application/vnd.mobius.mqy":["mqy"],"application/vnd.mobius.msl":["msl"],"application/vnd.mobius.plc":["plc"],"application/vnd.mobius.txf":["txf"],"application/vnd.mophun.application":["mpn"],"application/vnd.mophun.certificate":["mpc"],"application/vnd.mozilla.xul+xml":["xul"],"application/vnd.ms-artgalry":["cil"],"application/vnd.ms-cab-compressed":["cab"],"application/vnd.ms-excel":["xls","xlm","xla","xlc","xlt","xlw"],"application/vnd.ms-excel.addin.macroenabled.12":["xlam"],"application/vnd.ms-excel.sheet.binary.macroenabled.12":["xlsb"],"application/vnd.ms-excel.sheet.macroenabled.12":["xlsm"],"application/vnd.ms-excel.template.macroenabled.12":["xltm"],"application/vnd.ms-fontobject":["eot"],"application/vnd.ms-htmlhelp":["chm"],"application/vnd.ms-ims":["ims"],"application/vnd.ms-lrm":["lrm"],"application/vnd.ms-officetheme":["thmx"],"application/vnd.ms-outlook":["msg"],"application/vnd.ms-pki.seccat":["cat"],"application/vnd.ms-pki.stl":["*stl"],"application/vnd.ms-powerpoint":["ppt","pps","pot"],"application/vnd.ms-powerpoint.addin.macroenabled.12":["ppam"],"application/vnd.ms-powerpoint.presentation.macroenabled.12":["pptm"],"application/vnd.ms-powerpoint.slide.macroenabled.12":["sldm"],"application/vnd.ms-powerpoint.slideshow.macroenabled.12":["ppsm"],"application/vnd.ms-powerpoint.template.macroenabled.12":["potm"],"application/vnd.ms-project":["*mpp","mpt"],"application/vnd.ms-word.document.macroenabled.12":["docm"],"application/vnd.ms-word.template.macroenabled.12":["dotm"],"application/vnd.ms-works":["wps","wks","wcm","wdb"],"application/vnd.ms-wpl":["wpl"],"application/vnd.ms-xpsdocument":["xps"],"application/vnd.mseq":["mseq"],"application/vnd.musician":["mus"],"application/vnd.muvee.style":["msty"],"application/vnd.mynfc":["taglet"],"application/vnd.neurolanguage.nlu":["nlu"],"application/vnd.nitf":["ntf","nitf"],"application/vnd.noblenet-directory":["nnd"],"application/vnd.noblenet-sealer":["nns"],"application/vnd.noblenet-web":["nnw"],"application/vnd.nokia.n-gage.ac+xml":["*ac"],"application/vnd.nokia.n-gage.data":["ngdat"],"application/vnd.nokia.n-gage.symbian.install":["n-gage"],"application/vnd.nokia.radio-preset":["rpst"],"application/vnd.nokia.radio-presets":["rpss"],"application/vnd.novadigm.edm":["edm"],"application/vnd.novadigm.edx":["edx"],"application/vnd.novadigm.ext":["ext"],"application/vnd.oasis.opendocument.chart":["odc"],"application/vnd.oasis.opendocument.chart-template":["otc"],"application/vnd.oasis.opendocument.database":["odb"],"application/vnd.oasis.opendocument.formula":["odf"],"application/vnd.oasis.opendocument.formula-template":["odft"],"application/vnd.oasis.opendocument.graphics":["odg"],"application/vnd.oasis.opendocument.graphics-template":["otg"],"application/vnd.oasis.opendocument.image":["odi"],"application/vnd.oasis.opendocument.image-template":["oti"],"application/vnd.oasis.opendocument.presentation":["odp"],"application/vnd.oasis.opendocument.presentation-template":["otp"],"application/vnd.oasis.opendocument.spreadsheet":["ods"],"application/vnd.oasis.opendocument.spreadsheet-template":["ots"],"application/vnd.oasis.opendocument.text":["odt"],"application/vnd.oasis.opendocument.text-master":["odm"],"application/vnd.oasis.opendocument.text-template":["ott"],"application/vnd.oasis.opendocument.text-web":["oth"],"application/vnd.olpc-sugar":["xo"],"application/vnd.oma.dd2+xml":["dd2"],"application/vnd.openblox.game+xml":["obgx"],"application/vnd.openofficeorg.extension":["oxt"],"application/vnd.openstreetmap.data+xml":["osm"],"application/vnd.openxmlformats-officedocument.presentationml.presentation":["pptx"],"application/vnd.openxmlformats-officedocument.presentationml.slide":["sldx"],"application/vnd.openxmlformats-officedocument.presentationml.slideshow":["ppsx"],"application/vnd.openxmlformats-officedocument.presentationml.template":["potx"],"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":["xlsx"],"application/vnd.openxmlformats-officedocument.spreadsheetml.template":["xltx"],"application/vnd.openxmlformats-officedocument.wordprocessingml.document":["docx"],"application/vnd.openxmlformats-officedocument.wordprocessingml.template":["dotx"],"application/vnd.osgeo.mapguide.package":["mgp"],"application/vnd.osgi.dp":["dp"],"application/vnd.osgi.subsystem":["esa"],"application/vnd.palm":["pdb","pqa","oprc"],"application/vnd.pawaafile":["paw"],"application/vnd.pg.format":["str"],"application/vnd.pg.osasli":["ei6"],"application/vnd.picsel":["efif"],"application/vnd.pmi.widget":["wg"],"application/vnd.pocketlearn":["plf"],"application/vnd.powerbuilder6":["pbd"],"application/vnd.previewsystems.box":["box"],"application/vnd.proteus.magazine":["mgz"],"application/vnd.publishare-delta-tree":["qps"],"application/vnd.pvi.ptid1":["ptid"],"application/vnd.pwg-xhtml-print+xml":["xhtm"],"application/vnd.quark.quarkxpress":["qxd","qxt","qwd","qwt","qxl","qxb"],"application/vnd.rar":["rar"],"application/vnd.realvnc.bed":["bed"],"application/vnd.recordare.musicxml":["mxl"],"application/vnd.recordare.musicxml+xml":["musicxml"],"application/vnd.rig.cryptonote":["cryptonote"],"application/vnd.rim.cod":["cod"],"application/vnd.rn-realmedia":["rm"],"application/vnd.rn-realmedia-vbr":["rmvb"],"application/vnd.route66.link66+xml":["link66"],"application/vnd.sailingtracker.track":["st"],"application/vnd.seemail":["see"],"application/vnd.sema":["sema"],"application/vnd.semd":["semd"],"application/vnd.semf":["semf"],"application/vnd.shana.informed.formdata":["ifm"],"application/vnd.shana.informed.formtemplate":["itp"],"application/vnd.shana.informed.interchange":["iif"],"application/vnd.shana.informed.package":["ipk"],"application/vnd.simtech-mindmapper":["twd","twds"],"application/vnd.smaf":["mmf"],"application/vnd.smart.teacher":["teacher"],"application/vnd.software602.filler.form+xml":["fo"],"application/vnd.solent.sdkm+xml":["sdkm","sdkd"],"application/vnd.spotfire.dxp":["dxp"],"application/vnd.spotfire.sfs":["sfs"],"application/vnd.stardivision.calc":["sdc"],"application/vnd.stardivision.draw":["sda"],"application/vnd.stardivision.impress":["sdd"],"application/vnd.stardivision.math":["smf"],"application/vnd.stardivision.writer":["sdw","vor"],"application/vnd.stardivision.writer-global":["sgl"],"application/vnd.stepmania.package":["smzip"],"application/vnd.stepmania.stepchart":["sm"],"application/vnd.sun.wadl+xml":["wadl"],"application/vnd.sun.xml.calc":["sxc"],"application/vnd.sun.xml.calc.template":["stc"],"application/vnd.sun.xml.draw":["sxd"],"application/vnd.sun.xml.draw.template":["std"],"application/vnd.sun.xml.impress":["sxi"],"application/vnd.sun.xml.impress.template":["sti"],"application/vnd.sun.xml.math":["sxm"],"application/vnd.sun.xml.writer":["sxw"],"application/vnd.sun.xml.writer.global":["sxg"],"application/vnd.sun.xml.writer.template":["stw"],"application/vnd.sus-calendar":["sus","susp"],"application/vnd.svd":["svd"],"application/vnd.symbian.install":["sis","sisx"],"application/vnd.syncml+xml":["xsm"],"application/vnd.syncml.dm+wbxml":["bdm"],"application/vnd.syncml.dm+xml":["xdm"],"application/vnd.syncml.dmddf+xml":["ddf"],"application/vnd.tao.intent-module-archive":["tao"],"application/vnd.tcpdump.pcap":["pcap","cap","dmp"],"application/vnd.tmobile-livetv":["tmo"],"application/vnd.trid.tpt":["tpt"],"application/vnd.triscape.mxs":["mxs"],"application/vnd.trueapp":["tra"],"application/vnd.ufdl":["ufd","ufdl"],"application/vnd.uiq.theme":["utz"],"application/vnd.umajin":["umj"],"application/vnd.unity":["unityweb"],"application/vnd.uoml+xml":["uoml","uo"],"application/vnd.vcx":["vcx"],"application/vnd.visio":["vsd","vst","vss","vsw"],"application/vnd.visionary":["vis"],"application/vnd.vsf":["vsf"],"application/vnd.wap.wbxml":["wbxml"],"application/vnd.wap.wmlc":["wmlc"],"application/vnd.wap.wmlscriptc":["wmlsc"],"application/vnd.webturbo":["wtb"],"application/vnd.wolfram.player":["nbp"],"application/vnd.wordperfect":["wpd"],"application/vnd.wqd":["wqd"],"application/vnd.wt.stf":["stf"],"application/vnd.xara":["xar"],"application/vnd.xfdl":["xfdl"],"application/vnd.yamaha.hv-dic":["hvd"],"application/vnd.yamaha.hv-script":["hvs"],"application/vnd.yamaha.hv-voice":["hvp"],"application/vnd.yamaha.openscoreformat":["osf"],"application/vnd.yamaha.openscoreformat.osfpvg+xml":["osfpvg"],"application/vnd.yamaha.smaf-audio":["saf"],"application/vnd.yamaha.smaf-phrase":["spf"],"application/vnd.yellowriver-custom-menu":["cmp"],"application/vnd.zul":["zir","zirz"],"application/vnd.zzazz.deck+xml":["zaz"],"application/x-7z-compressed":["7z"],"application/x-abiword":["abw"],"application/x-ace-compressed":["ace"],"application/x-apple-diskimage":["*dmg"],"application/x-arj":["arj"],"application/x-authorware-bin":["aab","x32","u32","vox"],"application/x-authorware-map":["aam"],"application/x-authorware-seg":["aas"],"application/x-bcpio":["bcpio"],"application/x-bdoc":["*bdoc"],"application/x-bittorrent":["torrent"],"application/x-blorb":["blb","blorb"],"application/x-bzip":["bz"],"application/x-bzip2":["bz2","boz"],"application/x-cbr":["cbr","cba","cbt","cbz","cb7"],"application/x-cdlink":["vcd"],"application/x-cfs-compressed":["cfs"],"application/x-chat":["chat"],"application/x-chess-pgn":["pgn"],"application/x-chrome-extension":["crx"],"application/x-cocoa":["cco"],"application/x-conference":["nsc"],"application/x-cpio":["cpio"],"application/x-csh":["csh"],"application/x-debian-package":["*deb","udeb"],"application/x-dgc-compressed":["dgc"],"application/x-director":["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"],"application/x-doom":["wad"],"application/x-dtbncx+xml":["ncx"],"application/x-dtbook+xml":["dtb"],"application/x-dtbresource+xml":["res"],"application/x-dvi":["dvi"],"application/x-envoy":["evy"],"application/x-eva":["eva"],"application/x-font-bdf":["bdf"],"application/x-font-ghostscript":["gsf"],"application/x-font-linux-psf":["psf"],"application/x-font-pcf":["pcf"],"application/x-font-snf":["snf"],"application/x-font-type1":["pfa","pfb","pfm","afm"],"application/x-freearc":["arc"],"application/x-futuresplash":["spl"],"application/x-gca-compressed":["gca"],"application/x-glulx":["ulx"],"application/x-gnumeric":["gnumeric"],"application/x-gramps-xml":["gramps"],"application/x-gtar":["gtar"],"application/x-hdf":["hdf"],"application/x-httpd-php":["php"],"application/x-install-instructions":["install"],"application/x-iso9660-image":["*iso"],"application/x-iwork-keynote-sffkey":["*key"],"application/x-iwork-numbers-sffnumbers":["*numbers"],"application/x-iwork-pages-sffpages":["*pages"],"application/x-java-archive-diff":["jardiff"],"application/x-java-jnlp-file":["jnlp"],"application/x-keepass2":["kdbx"],"application/x-latex":["latex"],"application/x-lua-bytecode":["luac"],"application/x-lzh-compressed":["lzh","lha"],"application/x-makeself":["run"],"application/x-mie":["mie"],"application/x-mobipocket-ebook":["*prc","mobi"],"application/x-ms-application":["application"],"application/x-ms-shortcut":["lnk"],"application/x-ms-wmd":["wmd"],"application/x-ms-wmz":["wmz"],"application/x-ms-xbap":["xbap"],"application/x-msaccess":["mdb"],"application/x-msbinder":["obd"],"application/x-mscardfile":["crd"],"application/x-msclip":["clp"],"application/x-msdos-program":["*exe"],"application/x-msdownload":["*exe","*dll","com","bat","*msi"],"application/x-msmediaview":["mvb","m13","m14"],"application/x-msmetafile":["*wmf","*wmz","*emf","emz"],"application/x-msmoney":["mny"],"application/x-mspublisher":["pub"],"application/x-msschedule":["scd"],"application/x-msterminal":["trm"],"application/x-mswrite":["wri"],"application/x-netcdf":["nc","cdf"],"application/x-ns-proxy-autoconfig":["pac"],"application/x-nzb":["nzb"],"application/x-perl":["pl","pm"],"application/x-pilot":["*prc","*pdb"],"application/x-pkcs12":["p12","pfx"],"application/x-pkcs7-certificates":["p7b","spc"],"application/x-pkcs7-certreqresp":["p7r"],"application/x-rar-compressed":["*rar"],"application/x-redhat-package-manager":["rpm"],"application/x-research-info-systems":["ris"],"application/x-sea":["sea"],"application/x-sh":["sh"],"application/x-shar":["shar"],"application/x-shockwave-flash":["swf"],"application/x-silverlight-app":["xap"],"application/x-sql":["*sql"],"application/x-stuffit":["sit"],"application/x-stuffitx":["sitx"],"application/x-subrip":["srt"],"application/x-sv4cpio":["sv4cpio"],"application/x-sv4crc":["sv4crc"],"application/x-t3vm-image":["t3"],"application/x-tads":["gam"],"application/x-tar":["tar"],"application/x-tcl":["tcl","tk"],"application/x-tex":["tex"],"application/x-tex-tfm":["tfm"],"application/x-texinfo":["texinfo","texi"],"application/x-tgif":["*obj"],"application/x-ustar":["ustar"],"application/x-virtualbox-hdd":["hdd"],"application/x-virtualbox-ova":["ova"],"application/x-virtualbox-ovf":["ovf"],"application/x-virtualbox-vbox":["vbox"],"application/x-virtualbox-vbox-extpack":["vbox-extpack"],"application/x-virtualbox-vdi":["vdi"],"application/x-virtualbox-vhd":["vhd"],"application/x-virtualbox-vmdk":["vmdk"],"application/x-wais-source":["src"],"application/x-web-app-manifest+json":["webapp"],"application/x-x509-ca-cert":["der","crt","pem"],"application/x-xfig":["fig"],"application/x-xliff+xml":["*xlf"],"application/x-xpinstall":["xpi"],"application/x-xz":["xz"],"application/x-zmachine":["z1","z2","z3","z4","z5","z6","z7","z8"],"audio/vnd.dece.audio":["uva","uvva"],"audio/vnd.digital-winds":["eol"],"audio/vnd.dra":["dra"],"audio/vnd.dts":["dts"],"audio/vnd.dts.hd":["dtshd"],"audio/vnd.lucent.voice":["lvp"],"audio/vnd.ms-playready.media.pya":["pya"],"audio/vnd.nuera.ecelp4800":["ecelp4800"],"audio/vnd.nuera.ecelp7470":["ecelp7470"],"audio/vnd.nuera.ecelp9600":["ecelp9600"],"audio/vnd.rip":["rip"],"audio/x-aac":["*aac"],"audio/x-aiff":["aif","aiff","aifc"],"audio/x-caf":["caf"],"audio/x-flac":["flac"],"audio/x-m4a":["*m4a"],"audio/x-matroska":["mka"],"audio/x-mpegurl":["m3u"],"audio/x-ms-wax":["wax"],"audio/x-ms-wma":["wma"],"audio/x-pn-realaudio":["ram","ra"],"audio/x-pn-realaudio-plugin":["rmp"],"audio/x-realaudio":["*ra"],"audio/x-wav":["*wav"],"chemical/x-cdx":["cdx"],"chemical/x-cif":["cif"],"chemical/x-cmdf":["cmdf"],"chemical/x-cml":["cml"],"chemical/x-csml":["csml"],"chemical/x-xyz":["xyz"],"image/prs.btif":["btif","btf"],"image/prs.pti":["pti"],"image/vnd.adobe.photoshop":["psd"],"image/vnd.airzip.accelerator.azv":["azv"],"image/vnd.dece.graphic":["uvi","uvvi","uvg","uvvg"],"image/vnd.djvu":["djvu","djv"],"image/vnd.dvb.subtitle":["*sub"],"image/vnd.dwg":["dwg"],"image/vnd.dxf":["dxf"],"image/vnd.fastbidsheet":["fbs"],"image/vnd.fpx":["fpx"],"image/vnd.fst":["fst"],"image/vnd.fujixerox.edmics-mmr":["mmr"],"image/vnd.fujixerox.edmics-rlc":["rlc"],"image/vnd.microsoft.icon":["ico"],"image/vnd.ms-dds":["dds"],"image/vnd.ms-modi":["mdi"],"image/vnd.ms-photo":["wdp"],"image/vnd.net-fpx":["npx"],"image/vnd.pco.b16":["b16"],"image/vnd.tencent.tap":["tap"],"image/vnd.valve.source.texture":["vtf"],"image/vnd.wap.wbmp":["wbmp"],"image/vnd.xiff":["xif"],"image/vnd.zbrush.pcx":["pcx"],"image/x-3ds":["3ds"],"image/x-cmu-raster":["ras"],"image/x-cmx":["cmx"],"image/x-freehand":["fh","fhc","fh4","fh5","fh7"],"image/x-icon":["*ico"],"image/x-jng":["jng"],"image/x-mrsid-image":["sid"],"image/x-ms-bmp":["*bmp"],"image/x-pcx":["*pcx"],"image/x-pict":["pic","pct"],"image/x-portable-anymap":["pnm"],"image/x-portable-bitmap":["pbm"],"image/x-portable-graymap":["pgm"],"image/x-portable-pixmap":["ppm"],"image/x-rgb":["rgb"],"image/x-tga":["tga"],"image/x-xbitmap":["xbm"],"image/x-xpixmap":["xpm"],"image/x-xwindowdump":["xwd"],"message/vnd.wfa.wsc":["wsc"],"model/vnd.cld":["cld"],"model/vnd.collada+xml":["dae"],"model/vnd.dwf":["dwf"],"model/vnd.gdl":["gdl"],"model/vnd.gtw":["gtw"],"model/vnd.mts":["mts"],"model/vnd.opengex":["ogex"],"model/vnd.parasolid.transmit.binary":["x_b"],"model/vnd.parasolid.transmit.text":["x_t"],"model/vnd.pytha.pyox":["pyo","pyox"],"model/vnd.sap.vds":["vds"],"model/vnd.usda":["usda"],"model/vnd.usdz+zip":["usdz"],"model/vnd.valve.source.compiled-map":["bsp"],"model/vnd.vtu":["vtu"],"text/prs.lines.tag":["dsc"],"text/vnd.curl":["curl"],"text/vnd.curl.dcurl":["dcurl"],"text/vnd.curl.mcurl":["mcurl"],"text/vnd.curl.scurl":["scurl"],"text/vnd.dvb.subtitle":["sub"],"text/vnd.familysearch.gedcom":["ged"],"text/vnd.fly":["fly"],"text/vnd.fmi.flexstor":["flx"],"text/vnd.graphviz":["gv"],"text/vnd.in3d.3dml":["3dml"],"text/vnd.in3d.spot":["spot"],"text/vnd.sun.j2me.app-descriptor":["jad"],"text/vnd.wap.wml":["wml"],"text/vnd.wap.wmlscript":["wmls"],"text/x-asm":["s","asm"],"text/x-c":["c","cc","cxx","cpp","h","hh","dic"],"text/x-component":["htc"],"text/x-fortran":["f","for","f77","f90"],"text/x-handlebars-template":["hbs"],"text/x-java-source":["java"],"text/x-lua":["lua"],"text/x-markdown":["mkd"],"text/x-nfo":["nfo"],"text/x-opml":["opml"],"text/x-org":["*org"],"text/x-pascal":["p","pas"],"text/x-processing":["pde"],"text/x-sass":["sass"],"text/x-scss":["scss"],"text/x-setext":["etx"],"text/x-sfv":["sfv"],"text/x-suse-ymp":["ymp"],"text/x-uuencode":["uu"],"text/x-vcalendar":["vcs"],"text/x-vcard":["vcf"],"video/vnd.dece.hd":["uvh","uvvh"],"video/vnd.dece.mobile":["uvm","uvvm"],"video/vnd.dece.pd":["uvp","uvvp"],"video/vnd.dece.sd":["uvs","uvvs"],"video/vnd.dece.video":["uvv","uvvv"],"video/vnd.dvb.file":["dvb"],"video/vnd.fvt":["fvt"],"video/vnd.mpegurl":["mxu","m4u"],"video/vnd.ms-playready.media.pyv":["pyv"],"video/vnd.uvvu.mp4":["uvu","uvvu"],"video/vnd.vivo":["viv"],"video/x-f4v":["f4v"],"video/x-fli":["fli"],"video/x-flv":["flv"],"video/x-m4v":["m4v"],"video/x-matroska":["mkv","mk3d","mks"],"video/x-mng":["mng"],"video/x-ms-asf":["asf","asx"],"video/x-ms-vob":["vob"],"video/x-ms-wm":["wm"],"video/x-ms-wmv":["wmv"],"video/x-ms-wmx":["wmx"],"video/x-ms-wvx":["wvx"],"video/x-msvideo":["avi"],"video/x-sgi-movie":["movie"],"video/x-smv":["smv"],"x-conference/x-cooltalk":["ice"]};Object.freeze(No);var Bo=No;var ko={"application/andrew-inset":["ez"],"application/appinstaller":["appinstaller"],"application/applixware":["aw"],"application/appx":["appx"],"application/appxbundle":["appxbundle"],"application/atom+xml":["atom"],"application/atomcat+xml":["atomcat"],"application/atomdeleted+xml":["atomdeleted"],"application/atomsvc+xml":["atomsvc"],"application/atsc-dwd+xml":["dwd"],"application/atsc-held+xml":["held"],"application/atsc-rsat+xml":["rsat"],"application/automationml-aml+xml":["aml"],"application/automationml-amlx+zip":["amlx"],"application/bdoc":["bdoc"],"application/calendar+xml":["xcs"],"application/ccxml+xml":["ccxml"],"application/cdfx+xml":["cdfx"],"application/cdmi-capability":["cdmia"],"application/cdmi-container":["cdmic"],"application/cdmi-domain":["cdmid"],"application/cdmi-object":["cdmio"],"application/cdmi-queue":["cdmiq"],"application/cpl+xml":["cpl"],"application/cu-seeme":["cu"],"application/cwl":["cwl"],"application/dash+xml":["mpd"],"application/dash-patch+xml":["mpp"],"application/davmount+xml":["davmount"],"application/docbook+xml":["dbk"],"application/dssc+der":["dssc"],"application/dssc+xml":["xdssc"],"application/ecmascript":["ecma"],"application/emma+xml":["emma"],"application/emotionml+xml":["emotionml"],"application/epub+zip":["epub"],"application/exi":["exi"],"application/express":["exp"],"application/fdf":["fdf"],"application/fdt+xml":["fdt"],"application/font-tdpfr":["pfr"],"application/geo+json":["geojson"],"application/gml+xml":["gml"],"application/gpx+xml":["gpx"],"application/gxf":["gxf"],"application/gzip":["gz"],"application/hjson":["hjson"],"application/hyperstudio":["stk"],"application/inkml+xml":["ink","inkml"],"application/ipfix":["ipfix"],"application/its+xml":["its"],"application/java-archive":["jar","war","ear"],"application/java-serialized-object":["ser"],"application/java-vm":["class"],"application/javascript":["*js"],"application/json":["json","map"],"application/json5":["json5"],"application/jsonml+json":["jsonml"],"application/ld+json":["jsonld"],"application/lgr+xml":["lgr"],"application/lost+xml":["lostxml"],"application/mac-binhex40":["hqx"],"application/mac-compactpro":["cpt"],"application/mads+xml":["mads"],"application/manifest+json":["webmanifest"],"application/marc":["mrc"],"application/marcxml+xml":["mrcx"],"application/mathematica":["ma","nb","mb"],"application/mathml+xml":["mathml"],"application/mbox":["mbox"],"application/media-policy-dataset+xml":["mpf"],"application/mediaservercontrol+xml":["mscml"],"application/metalink+xml":["metalink"],"application/metalink4+xml":["meta4"],"application/mets+xml":["mets"],"application/mmt-aei+xml":["maei"],"application/mmt-usd+xml":["musd"],"application/mods+xml":["mods"],"application/mp21":["m21","mp21"],"application/mp4":["*mp4","*mpg4","mp4s","m4p"],"application/msix":["msix"],"application/msixbundle":["msixbundle"],"application/msword":["doc","dot"],"application/mxf":["mxf"],"application/n-quads":["nq"],"application/n-triples":["nt"],"application/node":["cjs"],"application/octet-stream":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"],"application/oda":["oda"],"application/oebps-package+xml":["opf"],"application/ogg":["ogx"],"application/omdoc+xml":["omdoc"],"application/onenote":["onetoc","onetoc2","onetmp","onepkg"],"application/oxps":["oxps"],"application/p2p-overlay+xml":["relo"],"application/patch-ops-error+xml":["xer"],"application/pdf":["pdf"],"application/pgp-encrypted":["pgp"],"application/pgp-keys":["asc"],"application/pgp-signature":["sig","*asc"],"application/pics-rules":["prf"],"application/pkcs10":["p10"],"application/pkcs7-mime":["p7m","p7c"],"application/pkcs7-signature":["p7s"],"application/pkcs8":["p8"],"application/pkix-attr-cert":["ac"],"application/pkix-cert":["cer"],"application/pkix-crl":["crl"],"application/pkix-pkipath":["pkipath"],"application/pkixcmp":["pki"],"application/pls+xml":["pls"],"application/postscript":["ai","eps","ps"],"application/provenance+xml":["provx"],"application/pskc+xml":["pskcxml"],"application/raml+yaml":["raml"],"application/rdf+xml":["rdf","owl"],"application/reginfo+xml":["rif"],"application/relax-ng-compact-syntax":["rnc"],"application/resource-lists+xml":["rl"],"application/resource-lists-diff+xml":["rld"],"application/rls-services+xml":["rs"],"application/route-apd+xml":["rapd"],"application/route-s-tsid+xml":["sls"],"application/route-usd+xml":["rusd"],"application/rpki-ghostbusters":["gbr"],"application/rpki-manifest":["mft"],"application/rpki-roa":["roa"],"application/rsd+xml":["rsd"],"application/rss+xml":["rss"],"application/rtf":["rtf"],"application/sbml+xml":["sbml"],"application/scvp-cv-request":["scq"],"application/scvp-cv-response":["scs"],"application/scvp-vp-request":["spq"],"application/scvp-vp-response":["spp"],"application/sdp":["sdp"],"application/senml+xml":["senmlx"],"application/sensml+xml":["sensmlx"],"application/set-payment-initiation":["setpay"],"application/set-registration-initiation":["setreg"],"application/shf+xml":["shf"],"application/sieve":["siv","sieve"],"application/smil+xml":["smi","smil"],"application/sparql-query":["rq"],"application/sparql-results+xml":["srx"],"application/sql":["sql"],"application/srgs":["gram"],"application/srgs+xml":["grxml"],"application/sru+xml":["sru"],"application/ssdl+xml":["ssdl"],"application/ssml+xml":["ssml"],"application/swid+xml":["swidtag"],"application/tei+xml":["tei","teicorpus"],"application/thraud+xml":["tfi"],"application/timestamped-data":["tsd"],"application/toml":["toml"],"application/trig":["trig"],"application/ttml+xml":["ttml"],"application/ubjson":["ubj"],"application/urc-ressheet+xml":["rsheet"],"application/urc-targetdesc+xml":["td"],"application/voicexml+xml":["vxml"],"application/wasm":["wasm"],"application/watcherinfo+xml":["wif"],"application/widget":["wgt"],"application/winhlp":["hlp"],"application/wsdl+xml":["wsdl"],"application/wspolicy+xml":["wspolicy"],"application/xaml+xml":["xaml"],"application/xcap-att+xml":["xav"],"application/xcap-caps+xml":["xca"],"application/xcap-diff+xml":["xdf"],"application/xcap-el+xml":["xel"],"application/xcap-ns+xml":["xns"],"application/xenc+xml":["xenc"],"application/xfdf":["xfdf"],"application/xhtml+xml":["xhtml","xht"],"application/xliff+xml":["xlf"],"application/xml":["xml","xsl","xsd","rng"],"application/xml-dtd":["dtd"],"application/xop+xml":["xop"],"application/xproc+xml":["xpl"],"application/xslt+xml":["*xsl","xslt"],"application/xspf+xml":["xspf"],"application/xv+xml":["mxml","xhvml","xvml","xvm"],"application/yang":["yang"],"application/yin+xml":["yin"],"application/zip":["zip"],"audio/3gpp":["*3gpp"],"audio/aac":["adts","aac"],"audio/adpcm":["adp"],"audio/amr":["amr"],"audio/basic":["au","snd"],"audio/midi":["mid","midi","kar","rmi"],"audio/mobile-xmf":["mxmf"],"audio/mp3":["*mp3"],"audio/mp4":["m4a","mp4a"],"audio/mpeg":["mpga","mp2","mp2a","mp3","m2a","m3a"],"audio/ogg":["oga","ogg","spx","opus"],"audio/s3m":["s3m"],"audio/silk":["sil"],"audio/wav":["wav"],"audio/wave":["*wav"],"audio/webm":["weba"],"audio/xm":["xm"],"font/collection":["ttc"],"font/otf":["otf"],"font/ttf":["ttf"],"font/woff":["woff"],"font/woff2":["woff2"],"image/aces":["exr"],"image/apng":["apng"],"image/avci":["avci"],"image/avcs":["avcs"],"image/avif":["avif"],"image/bmp":["bmp","dib"],"image/cgm":["cgm"],"image/dicom-rle":["drle"],"image/dpx":["dpx"],"image/emf":["emf"],"image/fits":["fits"],"image/g3fax":["g3"],"image/gif":["gif"],"image/heic":["heic"],"image/heic-sequence":["heics"],"image/heif":["heif"],"image/heif-sequence":["heifs"],"image/hej2k":["hej2"],"image/hsj2":["hsj2"],"image/ief":["ief"],"image/jls":["jls"],"image/jp2":["jp2","jpg2"],"image/jpeg":["jpeg","jpg","jpe"],"image/jph":["jph"],"image/jphc":["jhc"],"image/jpm":["jpm","jpgm"],"image/jpx":["jpx","jpf"],"image/jxr":["jxr"],"image/jxra":["jxra"],"image/jxrs":["jxrs"],"image/jxs":["jxs"],"image/jxsc":["jxsc"],"image/jxsi":["jxsi"],"image/jxss":["jxss"],"image/ktx":["ktx"],"image/ktx2":["ktx2"],"image/png":["png"],"image/sgi":["sgi"],"image/svg+xml":["svg","svgz"],"image/t38":["t38"],"image/tiff":["tif","tiff"],"image/tiff-fx":["tfx"],"image/webp":["webp"],"image/wmf":["wmf"],"message/disposition-notification":["disposition-notification"],"message/global":["u8msg"],"message/global-delivery-status":["u8dsn"],"message/global-disposition-notification":["u8mdn"],"message/global-headers":["u8hdr"],"message/rfc822":["eml","mime"],"model/3mf":["3mf"],"model/gltf+json":["gltf"],"model/gltf-binary":["glb"],"model/iges":["igs","iges"],"model/jt":["jt"],"model/mesh":["msh","mesh","silo"],"model/mtl":["mtl"],"model/obj":["obj"],"model/prc":["prc"],"model/step+xml":["stpx"],"model/step+zip":["stpz"],"model/step-xml+zip":["stpxz"],"model/stl":["stl"],"model/u3d":["u3d"],"model/vrml":["wrl","vrml"],"model/x3d+binary":["*x3db","x3dbz"],"model/x3d+fastinfoset":["x3db"],"model/x3d+vrml":["*x3dv","x3dvz"],"model/x3d+xml":["x3d","x3dz"],"model/x3d-vrml":["x3dv"],"text/cache-manifest":["appcache","manifest"],"text/calendar":["ics","ifb"],"text/coffeescript":["coffee","litcoffee"],"text/css":["css"],"text/csv":["csv"],"text/html":["html","htm","shtml"],"text/jade":["jade"],"text/javascript":["js","mjs"],"text/jsx":["jsx"],"text/less":["less"],"text/markdown":["md","markdown"],"text/mathml":["mml"],"text/mdx":["mdx"],"text/n3":["n3"],"text/plain":["txt","text","conf","def","list","log","in","ini"],"text/richtext":["rtx"],"text/rtf":["*rtf"],"text/sgml":["sgml","sgm"],"text/shex":["shex"],"text/slim":["slim","slm"],"text/spdx":["spdx"],"text/stylus":["stylus","styl"],"text/tab-separated-values":["tsv"],"text/troff":["t","tr","roff","man","me","ms"],"text/turtle":["ttl"],"text/uri-list":["uri","uris","urls"],"text/vcard":["vcard"],"text/vtt":["vtt"],"text/wgsl":["wgsl"],"text/xml":["*xml"],"text/yaml":["yaml","yml"],"video/3gpp":["3gp","3gpp"],"video/3gpp2":["3g2"],"video/h261":["h261"],"video/h263":["h263"],"video/h264":["h264"],"video/iso.segment":["m4s"],"video/jpeg":["jpgv"],"video/jpm":["*jpm","*jpgm"],"video/mj2":["mj2","mjp2"],"video/mp2t":["ts"],"video/mp4":["mp4","mp4v","mpg4"],"video/mpeg":["mpeg","mpg","mpe","m1v","m2v"],"video/ogg":["ogv"],"video/quicktime":["qt","mov"],"video/webm":["webm"]};Object.freeze(ko);var Vo=ko;var we=function(e,t,i,a){if(i==="a"&&!a)throw new TypeError("Private accessor was defined without a getter");if(typeof t=="function"?e!==t||!a:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return i==="m"?a:i==="a"?a.call(e):a?a.value:t.get(e)},yt,Wt,lt,ya=class{constructor(...t){yt.set(this,new Map),Wt.set(this,new Map),lt.set(this,new Map);for(let i of t)this.define(i)}define(t,i=!1){for(let[a,n]of Object.entries(t)){a=a.toLowerCase(),n=n.map(r=>r.toLowerCase()),we(this,lt,"f").has(a)||we(this,lt,"f").set(a,new Set);let o=we(this,lt,"f").get(a),l=!0;for(let r of n){let s=r.startsWith("*");if(r=s?r.slice(1):r,o?.add(r),l&&we(this,Wt,"f").set(a,r),l=!1,s)continue;let p=we(this,yt,"f").get(r);if(p&&p!=a&&!i)throw new Error(`"${a} -> ${r}" conflicts with "${p} -> ${r}". Pass \`force=true\` to override this definition.`);we(this,yt,"f").set(r,a)}}return this}getType(t){if(typeof t!="string")return null;let i=t.replace(/^.*[/\\]/,"").toLowerCase(),a=i.replace(/^.*\./,"").toLowerCase(),n=i.length{throw new Error("define() not allowed for built-in Mime objects. See https://github.com/broofa/mime/blob/main/README.md#custom-mime-instances")},Object.freeze(this);for(let t of we(this,lt,"f").values())Object.freeze(t);return this}_getTestState(){return{types:we(this,yt,"f"),extensions:we(this,Wt,"f")}}};yt=new WeakMap,Wt=new WeakMap,lt=new WeakMap;var _a=ya;var Go=new _a(Vo,Bo)._freeze();var Uo=({addFilter:e,utils:t})=>{let{Type:i,replaceInString:a,toNaturalFileSize:n}=t;return e("ALLOW_HOPPER_ITEM",(o,{query:l})=>{if(!l("GET_ALLOW_FILE_SIZE_VALIDATION"))return!0;let r=l("GET_MAX_FILE_SIZE");if(r!==null&&o.size>r)return!1;let s=l("GET_MIN_FILE_SIZE");return!(s!==null&&o.sizenew Promise((r,s)=>{if(!l("GET_ALLOW_FILE_SIZE_VALIDATION"))return r(o);let p=l("GET_FILE_VALIDATE_SIZE_FILTER");if(p&&!p(o))return r(o);let c=l("GET_MAX_FILE_SIZE");if(c!==null&&o.size>c){s({status:{main:l("GET_LABEL_MAX_FILE_SIZE_EXCEEDED"),sub:a(l("GET_LABEL_MAX_FILE_SIZE"),{filesize:n(c,".",l("GET_FILE_SIZE_BASE"),l("GET_FILE_SIZE_LABELS",l))})}});return}let d=l("GET_MIN_FILE_SIZE");if(d!==null&&o.sizef+h.fileSize,0)>m){s({status:{main:l("GET_LABEL_MAX_TOTAL_FILE_SIZE_EXCEEDED"),sub:a(l("GET_LABEL_MAX_TOTAL_FILE_SIZE"),{filesize:n(m,".",l("GET_FILE_SIZE_BASE"),l("GET_FILE_SIZE_LABELS",l))})}});return}r(o)})),{options:{allowFileSizeValidation:[!0,i.BOOLEAN],maxFileSize:[null,i.INT],minFileSize:[null,i.INT],maxTotalFileSize:[null,i.INT],fileValidateSizeFilter:[null,i.FUNCTION],labelMinFileSizeExceeded:["File is too small",i.STRING],labelMinFileSize:["Minimum file size is {filesize}",i.STRING],labelMaxFileSizeExceeded:["File is too large",i.STRING],labelMaxFileSize:["Maximum file size is {filesize}",i.STRING],labelMaxTotalFileSizeExceeded:["Maximum total size exceeded",i.STRING],labelMaxTotalFileSize:["Maximum total file size is {filesize}",i.STRING]}}},Xp=typeof window<"u"&&typeof window.document<"u";Xp&&document.dispatchEvent(new CustomEvent("FilePond:pluginloaded",{detail:Uo}));var Wo=Uo;var Ho=({addFilter:e,utils:t})=>{let{Type:i,isString:a,replaceInString:n,guesstimateMimeType:o,getExtensionFromFilename:l,getFilenameFromURL:r}=t,s=(u,f)=>{let h=(/^[^/]+/.exec(u)||[]).pop(),g=f.slice(0,-2);return h===g},p=(u,f)=>u.some(h=>/\*$/.test(h)?s(f,h):h===f),c=u=>{let f="";if(a(u)){let h=r(u),g=l(h);g&&(f=o(g))}else f=u.type;return f},d=(u,f,h)=>{if(f.length===0)return!0;let g=c(u);return h?new Promise((I,E)=>{h(u,g).then(T=>{p(f,T)?I():E()}).catch(E)}):p(f,g)},m=u=>f=>u[f]===null?!1:u[f]||f;return e("SET_ATTRIBUTE_TO_OPTION_MAP",u=>Object.assign(u,{accept:"acceptedFileTypes"})),e("ALLOW_HOPPER_ITEM",(u,{query:f})=>f("GET_ALLOW_FILE_TYPE_VALIDATION")?d(u,f("GET_ACCEPTED_FILE_TYPES")):!0),e("LOAD_FILE",(u,{query:f})=>new Promise((h,g)=>{if(!f("GET_ALLOW_FILE_TYPE_VALIDATION")){h(u);return}let I=f("GET_ACCEPTED_FILE_TYPES"),E=f("GET_FILE_VALIDATE_TYPE_DETECT_TYPE"),T=d(u,I,E),v=()=>{let y=I.map(m(f("GET_FILE_VALIDATE_TYPE_LABEL_EXPECTED_TYPES_MAP"))).filter(w=>w!==!1),b=y.filter((w,x)=>y.indexOf(w)===x);g({status:{main:f("GET_LABEL_FILE_TYPE_NOT_ALLOWED"),sub:n(f("GET_FILE_VALIDATE_TYPE_LABEL_EXPECTED_TYPES"),{allTypes:b.join(", "),allButLastType:b.slice(0,-1).join(", "),lastType:b[b.length-1]})}})};if(typeof T=="boolean")return T?h(u):v();T.then(()=>{h(u)}).catch(v)})),{options:{allowFileTypeValidation:[!0,i.BOOLEAN],acceptedFileTypes:[[],i.ARRAY],labelFileTypeNotAllowed:["File is of invalid type",i.STRING],fileValidateTypeLabelExpectedTypes:["Expects {allButLastType} or {lastType}",i.STRING],fileValidateTypeLabelExpectedTypesMap:[{},i.OBJECT],fileValidateTypeDetectType:[null,i.FUNCTION]}}},Qp=typeof window<"u"&&typeof window.document<"u";Qp&&document.dispatchEvent(new CustomEvent("FilePond:pluginloaded",{detail:Ho}));var jo=Ho;var qo=e=>/^image/.test(e.type),Yo=({addFilter:e,utils:t})=>{let{Type:i,isFile:a,getNumericAspectRatioFromString:n}=t,o=(p,c)=>!(!qo(p.file)||!c("GET_ALLOW_IMAGE_CROP")),l=p=>typeof p=="object",r=p=>typeof p=="number",s=(p,c)=>p.setMetadata("crop",Object.assign({},p.getMetadata("crop"),c));return e("DID_CREATE_ITEM",(p,{query:c})=>{p.extend("setImageCrop",d=>{if(!(!o(p,c)||!l(center)))return p.setMetadata("crop",d),d}),p.extend("setImageCropCenter",d=>{if(!(!o(p,c)||!l(d)))return s(p,{center:d})}),p.extend("setImageCropZoom",d=>{if(!(!o(p,c)||!r(d)))return s(p,{zoom:Math.max(1,d)})}),p.extend("setImageCropRotation",d=>{if(!(!o(p,c)||!r(d)))return s(p,{rotation:d})}),p.extend("setImageCropFlip",d=>{if(!(!o(p,c)||!l(d)))return s(p,{flip:d})}),p.extend("setImageCropAspectRatio",d=>{if(!o(p,c)||typeof d>"u")return;let m=p.getMetadata("crop"),u=n(d),f={center:{x:.5,y:.5},flip:m?Object.assign({},m.flip):{horizontal:!1,vertical:!1},rotation:0,zoom:1,aspectRatio:u};return p.setMetadata("crop",f),f})}),e("DID_LOAD_ITEM",(p,{query:c})=>new Promise((d,m)=>{let u=p.file;if(!a(u)||!qo(u)||!c("GET_ALLOW_IMAGE_CROP")||p.getMetadata("crop"))return d(p);let h=c("GET_IMAGE_CROP_ASPECT_RATIO");p.setMetadata("crop",{center:{x:.5,y:.5},flip:{horizontal:!1,vertical:!1},rotation:0,zoom:1,aspectRatio:h?n(h):null}),d(p)})),{options:{allowImageCrop:[!0,i.BOOLEAN],imageCropAspectRatio:[null,i.STRING]}}},Zp=typeof window<"u"&&typeof window.document<"u";Zp&&document.dispatchEvent(new CustomEvent("FilePond:pluginloaded",{detail:Yo}));var $o=Yo;var Ra=e=>/^image/.test(e.type),Xo=e=>{let{addFilter:t,utils:i,views:a}=e,{Type:n,createRoute:o,createItemAPI:l=c=>c}=i,{fileActionButton:r}=a;t("SHOULD_REMOVE_ON_REVERT",(c,{item:d,query:m})=>new Promise(u=>{let{file:f}=d,h=m("GET_ALLOW_IMAGE_EDIT")&&m("GET_IMAGE_EDIT_ALLOW_EDIT")&&Ra(f);u(!h)})),t("DID_LOAD_ITEM",(c,{query:d,dispatch:m})=>new Promise((u,f)=>{if(c.origin>1){u(c);return}let{file:h}=c;if(!d("GET_ALLOW_IMAGE_EDIT")||!d("GET_IMAGE_EDIT_INSTANT_EDIT")){u(c);return}if(!Ra(h)){u(c);return}let g=(E,T,v)=>y=>{s.shift(),y?T(E):v(E),m("KICK"),I()},I=()=>{if(!s.length)return;let{item:E,resolve:T,reject:v}=s[0];m("EDIT_ITEM",{id:E.id,handleEditorResponse:g(E,T,v)})};p({item:c,resolve:u,reject:f}),s.length===1&&I()})),t("DID_CREATE_ITEM",(c,{query:d,dispatch:m})=>{c.extend("edit",()=>{m("EDIT_ITEM",{id:c.id})})});let s=[],p=c=>(s.push(c),c);return t("CREATE_VIEW",c=>{let{is:d,view:m,query:u}=c;if(!u("GET_ALLOW_IMAGE_EDIT"))return;let f=u("GET_ALLOW_IMAGE_PREVIEW");if(!(d("file-info")&&!f||d("file")&&f))return;let g=u("GET_IMAGE_EDIT_EDITOR");if(!g)return;g.filepondCallbackBridge||(g.outputData=!0,g.outputFile=!1,g.filepondCallbackBridge={onconfirm:g.onconfirm||(()=>{}),oncancel:g.oncancel||(()=>{})});let I=({root:v,props:y,action:b})=>{let{id:w}=y,{handleEditorResponse:x}=b;g.cropAspectRatio=v.query("GET_IMAGE_CROP_ASPECT_RATIO")||g.cropAspectRatio,g.outputCanvasBackgroundColor=v.query("GET_IMAGE_TRANSFORM_CANVAS_BACKGROUND_COLOR")||g.outputCanvasBackgroundColor;let _=v.query("GET_ITEM",w);if(!_)return;let P=_.file,O=_.getMetadata("crop"),M={center:{x:.5,y:.5},flip:{horizontal:!1,vertical:!1},zoom:1,rotation:0,aspectRatio:null},C=_.getMetadata("resize"),S=_.getMetadata("filter")||null,F=_.getMetadata("filters")||null,R=_.getMetadata("colors")||null,L=_.getMetadata("markup")||null,z={crop:O||M,size:C?{upscale:C.upscale,mode:C.mode,width:C.size.width,height:C.size.height}:null,filter:F?F.id||F.matrix:v.query("GET_ALLOW_IMAGE_FILTER")&&v.query("GET_IMAGE_FILTER_COLOR_MATRIX")&&!R?S:null,color:R,markup:L};g.onconfirm=({data:D})=>{let{crop:k,size:B,filter:X,color:Y,colorMatrix:Q,markup:pe}=D,G={};if(k&&(G.crop=k),B){let H=(_.getMetadata("resize")||{}).size,q={width:B.width,height:B.height};!(q.width&&q.height)&&H&&(q.width=H.width,q.height=H.height),(q.width||q.height)&&(G.resize={upscale:B.upscale,mode:B.mode,size:q})}pe&&(G.markup=pe),G.colors=Y,G.filters=X,G.filter=Q,_.setMetadata(G),g.filepondCallbackBridge.onconfirm(D,l(_)),x&&(g.onclose=()=>{x(!0),g.onclose=null})},g.oncancel=()=>{g.filepondCallbackBridge.oncancel(l(_)),x&&(g.onclose=()=>{x(!1),g.onclose=null})},g.open(P,z)},E=({root:v,props:y})=>{if(!u("GET_IMAGE_EDIT_ALLOW_EDIT"))return;let{id:b}=y,w=u("GET_ITEM",b);if(!w)return;let x=w.file;if(Ra(x))if(v.ref.handleEdit=_=>{_.stopPropagation(),v.dispatch("EDIT_ITEM",{id:b})},f){let _=m.createChildView(r,{label:"edit",icon:u("GET_IMAGE_EDIT_ICON_EDIT"),opacity:0});_.element.classList.add("filepond--action-edit-item"),_.element.dataset.align=u("GET_STYLE_IMAGE_EDIT_BUTTON_EDIT_ITEM_POSITION"),_.on("click",v.ref.handleEdit),v.ref.buttonEditItem=m.appendChildView(_)}else{let _=m.element.querySelector(".filepond--file-info-main"),P=document.createElement("button");P.className="filepond--action-edit-item-alt",P.innerHTML=u("GET_IMAGE_EDIT_ICON_EDIT")+"edit",P.addEventListener("click",v.ref.handleEdit),_.appendChild(P),v.ref.editButton=P}};m.registerDestroyer(({root:v})=>{v.ref.buttonEditItem&&v.ref.buttonEditItem.off("click",v.ref.handleEdit),v.ref.editButton&&v.ref.editButton.removeEventListener("click",v.ref.handleEdit)});let T={EDIT_ITEM:I,DID_LOAD_ITEM:E};if(f){let v=({root:y})=>{y.ref.buttonEditItem&&(y.ref.buttonEditItem.opacity=1)};T.DID_IMAGE_PREVIEW_SHOW=v}m.registerWriter(o(T))}),{options:{allowImageEdit:[!0,n.BOOLEAN],styleImageEditButtonEditItemPosition:["bottom center",n.STRING],imageEditInstantEdit:[!1,n.BOOLEAN],imageEditAllowEdit:[!0,n.BOOLEAN],imageEditIconEdit:['',n.STRING],imageEditEditor:[null,n.OBJECT]}}},Kp=typeof window<"u"&&typeof window.document<"u";Kp&&document.dispatchEvent(new CustomEvent("FilePond:pluginloaded",{detail:Xo}));var Qo=Xo;var Jp=e=>/^image\/jpeg/.test(e.type),rt={JPEG:65496,APP1:65505,EXIF:1165519206,TIFF:18761,Orientation:274,Unknown:65280},st=(e,t,i=!1)=>e.getUint16(t,i),Zo=(e,t,i=!1)=>e.getUint32(t,i),em=e=>new Promise((t,i)=>{let a=new FileReader;a.onload=function(n){let o=new DataView(n.target.result);if(st(o,0)!==rt.JPEG){t(-1);return}let l=o.byteLength,r=2;for(;rtypeof window<"u"&&typeof window.document<"u")(),im=()=>tm,am="data:image/jpg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/4QA6RXhpZgAATU0AKgAAAAgAAwESAAMAAAABAAYAAAEoAAMAAAABAAIAAAITAAMAAAABAAEAAAAAAAD/2wBDAP//////////////////////////////////////////////////////////////////////////////////////wAALCAABAAIBASIA/8QAJgABAAAAAAAAAAAAAAAAAAAAAxABAAAAAAAAAAAAAAAAAAAAAP/aAAgBAQAAPwBH/9k=",Ko,Ti=im()?new Image:{};Ti.onload=()=>Ko=Ti.naturalWidth>Ti.naturalHeight;Ti.src=am;var nm=()=>Ko,Jo=({addFilter:e,utils:t})=>{let{Type:i,isFile:a}=t;return e("DID_LOAD_ITEM",(n,{query:o})=>new Promise((l,r)=>{let s=n.file;if(!a(s)||!Jp(s)||!o("GET_ALLOW_IMAGE_EXIF_ORIENTATION")||!nm())return l(n);em(s).then(p=>{n.setMetadata("exif",{orientation:p}),l(n)})})),{options:{allowImageExifOrientation:[!0,i.BOOLEAN]}}},om=typeof window<"u"&&typeof window.document<"u";om&&document.dispatchEvent(new CustomEvent("FilePond:pluginloaded",{detail:Jo}));var el=Jo;var lm=e=>/^image/.test(e.type),tl=(e,t)=>jt(e.x*t,e.y*t),il=(e,t)=>jt(e.x+t.x,e.y+t.y),rm=e=>{let t=Math.sqrt(e.x*e.x+e.y*e.y);return t===0?{x:0,y:0}:jt(e.x/t,e.y/t)},Ii=(e,t,i)=>{let a=Math.cos(t),n=Math.sin(t),o=jt(e.x-i.x,e.y-i.y);return jt(i.x+a*o.x-n*o.y,i.y+n*o.x+a*o.y)},jt=(e=0,t=0)=>({x:e,y:t}),Te=(e,t,i=1,a)=>{if(typeof e=="string")return parseFloat(e)*i;if(typeof e=="number")return e*(a?t[a]:Math.min(t.width,t.height))},sm=(e,t,i)=>{let a=e.borderStyle||e.lineStyle||"solid",n=e.backgroundColor||e.fontColor||"transparent",o=e.borderColor||e.lineColor||"transparent",l=Te(e.borderWidth||e.lineWidth,t,i),r=e.lineCap||"round",s=e.lineJoin||"round",p=typeof a=="string"?"":a.map(d=>Te(d,t,i)).join(","),c=e.opacity||1;return{"stroke-linecap":r,"stroke-linejoin":s,"stroke-width":l||0,"stroke-dasharray":p,stroke:o,fill:n,opacity:c}},Se=e=>e!=null,cm=(e,t,i=1)=>{let a=Te(e.x,t,i,"width")||Te(e.left,t,i,"width"),n=Te(e.y,t,i,"height")||Te(e.top,t,i,"height"),o=Te(e.width,t,i,"width"),l=Te(e.height,t,i,"height"),r=Te(e.right,t,i,"width"),s=Te(e.bottom,t,i,"height");return Se(n)||(Se(l)&&Se(s)?n=t.height-l-s:n=s),Se(a)||(Se(o)&&Se(r)?a=t.width-o-r:a=r),Se(o)||(Se(a)&&Se(r)?o=t.width-a-r:o=0),Se(l)||(Se(n)&&Se(s)?l=t.height-n-s:l=0),{x:a||0,y:n||0,width:o||0,height:l||0}},dm=e=>e.map((t,i)=>`${i===0?"M":"L"} ${t.x} ${t.y}`).join(" "),Ce=(e,t)=>Object.keys(t).forEach(i=>e.setAttribute(i,t[i])),pm="http://www.w3.org/2000/svg",_t=(e,t)=>{let i=document.createElementNS(pm,e);return t&&Ce(i,t),i},mm=e=>Ce(e,{...e.rect,...e.styles}),um=e=>{let t=e.rect.x+e.rect.width*.5,i=e.rect.y+e.rect.height*.5,a=e.rect.width*.5,n=e.rect.height*.5;return Ce(e,{cx:t,cy:i,rx:a,ry:n,...e.styles})},fm={contain:"xMidYMid meet",cover:"xMidYMid slice"},hm=(e,t)=>{Ce(e,{...e.rect,...e.styles,preserveAspectRatio:fm[t.fit]||"none"})},gm={left:"start",center:"middle",right:"end"},Em=(e,t,i,a)=>{let n=Te(t.fontSize,i,a),o=t.fontFamily||"sans-serif",l=t.fontWeight||"normal",r=gm[t.textAlign]||"start";Ce(e,{...e.rect,...e.styles,"stroke-width":0,"font-weight":l,"font-size":n,"font-family":o,"text-anchor":r}),e.text!==t.text&&(e.text=t.text,e.textContent=t.text.length?t.text:" ")},bm=(e,t,i,a)=>{Ce(e,{...e.rect,...e.styles,fill:"none"});let n=e.childNodes[0],o=e.childNodes[1],l=e.childNodes[2],r=e.rect,s={x:e.rect.x+e.rect.width,y:e.rect.y+e.rect.height};if(Ce(n,{x1:r.x,y1:r.y,x2:s.x,y2:s.y}),!t.lineDecoration)return;o.style.display="none",l.style.display="none";let p=rm({x:s.x-r.x,y:s.y-r.y}),c=Te(.05,i,a);if(t.lineDecoration.indexOf("arrow-begin")!==-1){let d=tl(p,c),m=il(r,d),u=Ii(r,2,m),f=Ii(r,-2,m);Ce(o,{style:"display:block;",d:`M${u.x},${u.y} L${r.x},${r.y} L${f.x},${f.y}`})}if(t.lineDecoration.indexOf("arrow-end")!==-1){let d=tl(p,-c),m=il(s,d),u=Ii(s,2,m),f=Ii(s,-2,m);Ce(l,{style:"display:block;",d:`M${u.x},${u.y} L${s.x},${s.y} L${f.x},${f.y}`})}},Tm=(e,t,i,a)=>{Ce(e,{...e.styles,fill:"none",d:dm(t.points.map(n=>({x:Te(n.x,i,a,"width"),y:Te(n.y,i,a,"height")})))})},vi=e=>t=>_t(e,{id:t.id}),Im=e=>{let t=_t("image",{id:e.id,"stroke-linecap":"round","stroke-linejoin":"round",opacity:"0"});return t.onload=()=>{t.setAttribute("opacity",e.opacity||1)},t.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",e.src),t},vm=e=>{let t=_t("g",{id:e.id,"stroke-linecap":"round","stroke-linejoin":"round"}),i=_t("line");t.appendChild(i);let a=_t("path");t.appendChild(a);let n=_t("path");return t.appendChild(n),t},xm={image:Im,rect:vi("rect"),ellipse:vi("ellipse"),text:vi("text"),path:vi("path"),line:vm},ym={rect:mm,ellipse:um,image:hm,text:Em,path:Tm,line:bm},_m=(e,t)=>xm[e](t),Rm=(e,t,i,a,n)=>{t!=="path"&&(e.rect=cm(i,a,n)),e.styles=sm(i,a,n),ym[t](e,i,a,n)},wm=["x","y","left","top","right","bottom","width","height"],Sm=e=>typeof e=="string"&&/%/.test(e)?parseFloat(e)/100:e,Lm=e=>{let[t,i]=e,a=i.points?{}:wm.reduce((n,o)=>(n[o]=Sm(i[o]),n),{});return[t,{zIndex:0,...i,...a}]},Am=(e,t)=>e[1].zIndex>t[1].zIndex?1:e[1].zIndexe.utils.createView({name:"image-preview-markup",tag:"svg",ignoreRect:!0,mixins:{apis:["width","height","crop","markup","resize","dirty"]},write:({root:t,props:i})=>{if(!i.dirty)return;let{crop:a,resize:n,markup:o}=i,l=i.width,r=i.height,s=a.width,p=a.height;if(n){let{size:u}=n,f=u&&u.width,h=u&&u.height,g=n.mode,I=n.upscale;f&&!h&&(h=f),h&&!f&&(f=h);let E=s{let[f,h]=u,g=_m(f,h);Rm(g,f,h,c,d),t.element.appendChild(g)})}}),Ht=(e,t)=>({x:e,y:t}),Om=(e,t)=>e.x*t.x+e.y*t.y,al=(e,t)=>Ht(e.x-t.x,e.y-t.y),Pm=(e,t)=>Om(al(e,t),al(e,t)),nl=(e,t)=>Math.sqrt(Pm(e,t)),ol=(e,t)=>{let i=e,a=1.5707963267948966,n=t,o=1.5707963267948966-t,l=Math.sin(a),r=Math.sin(n),s=Math.sin(o),p=Math.cos(o),c=i/l,d=c*r,m=c*s;return Ht(p*d,p*m)},Dm=(e,t)=>{let i=e.width,a=e.height,n=ol(i,t),o=ol(a,t),l=Ht(e.x+Math.abs(n.x),e.y-Math.abs(n.y)),r=Ht(e.x+e.width+Math.abs(o.y),e.y+Math.abs(o.x)),s=Ht(e.x-Math.abs(o.y),e.y+e.height-Math.abs(o.x));return{width:nl(l,r),height:nl(l,s)}},Fm=(e,t,i=1)=>{let a=e.height/e.width,n=1,o=t,l=1,r=a;r>o&&(r=o,l=r/a);let s=Math.max(n/l,o/r),p=e.width/(i*s*l),c=p*t;return{width:p,height:c}},rl=(e,t,i,a)=>{let n=a.x>.5?1-a.x:a.x,o=a.y>.5?1-a.y:a.y,l=n*2*e.width,r=o*2*e.height,s=Dm(t,i);return Math.max(s.width/l,s.height/r)},sl=(e,t)=>{let i=e.width,a=i*t;a>e.height&&(a=e.height,i=a/t);let n=(e.width-i)*.5,o=(e.height-a)*.5;return{x:n,y:o,width:i,height:a}},zm=(e,t={})=>{let{zoom:i,rotation:a,center:n,aspectRatio:o}=t;o||(o=e.height/e.width);let l=Fm(e,o,i),r={x:l.width*.5,y:l.height*.5},s={x:0,y:0,width:l.width,height:l.height,center:r},p=typeof t.scaleToFit>"u"||t.scaleToFit,c=rl(e,sl(s,o),a,p?n:{x:.5,y:.5}),d=i*c;return{widthFloat:l.width/d,heightFloat:l.height/d,width:Math.round(l.width/d),height:Math.round(l.height/d)}},ze={type:"spring",stiffness:.5,damping:.45,mass:10},Cm=e=>e.utils.createView({name:"image-bitmap",ignoreRect:!0,mixins:{styles:["scaleX","scaleY"]},create:({root:t,props:i})=>{t.appendChild(i.image)}}),Nm=e=>e.utils.createView({name:"image-canvas-wrapper",tag:"div",ignoreRect:!0,mixins:{apis:["crop","width","height"],styles:["originX","originY","translateX","translateY","scaleX","scaleY","rotateZ"],animations:{originX:ze,originY:ze,scaleX:ze,scaleY:ze,translateX:ze,translateY:ze,rotateZ:ze}},create:({root:t,props:i})=>{i.width=i.image.width,i.height=i.image.height,t.ref.bitmap=t.appendChildView(t.createChildView(Cm(e),{image:i.image}))},write:({root:t,props:i})=>{let{flip:a}=i.crop,{bitmap:n}=t.ref;n.scaleX=a.horizontal?-1:1,n.scaleY=a.vertical?-1:1}}),Bm=e=>e.utils.createView({name:"image-clip",tag:"div",ignoreRect:!0,mixins:{apis:["crop","markup","resize","width","height","dirty","background"],styles:["width","height","opacity"],animations:{opacity:{type:"tween",duration:250}}},didWriteView:function({root:t,props:i}){i.background&&(t.element.style.backgroundColor=i.background)},create:({root:t,props:i})=>{t.ref.image=t.appendChildView(t.createChildView(Nm(e),Object.assign({},i))),t.ref.createMarkup=()=>{t.ref.markup||(t.ref.markup=t.appendChildView(t.createChildView(Mm(e),Object.assign({},i))))},t.ref.destroyMarkup=()=>{t.ref.markup&&(t.removeChildView(t.ref.markup),t.ref.markup=null)};let a=t.query("GET_IMAGE_PREVIEW_TRANSPARENCY_INDICATOR");a!==null&&(a==="grid"?t.element.dataset.transparencyIndicator=a:t.element.dataset.transparencyIndicator="color")},write:({root:t,props:i,shouldOptimize:a})=>{let{crop:n,markup:o,resize:l,dirty:r,width:s,height:p}=i;t.ref.image.crop=n;let c={x:0,y:0,width:s,height:p,center:{x:s*.5,y:p*.5}},d={width:t.ref.image.width,height:t.ref.image.height},m={x:n.center.x*d.width,y:n.center.y*d.height},u={x:c.center.x-d.width*n.center.x,y:c.center.y-d.height*n.center.y},f=Math.PI*2+n.rotation%(Math.PI*2),h=n.aspectRatio||d.height/d.width,g=typeof n.scaleToFit>"u"||n.scaleToFit,I=rl(d,sl(c,h),f,g?n.center:{x:.5,y:.5}),E=n.zoom*I;o&&o.length?(t.ref.createMarkup(),t.ref.markup.width=s,t.ref.markup.height=p,t.ref.markup.resize=l,t.ref.markup.dirty=r,t.ref.markup.markup=o,t.ref.markup.crop=zm(d,n)):t.ref.markup&&t.ref.destroyMarkup();let T=t.ref.image;if(a){T.originX=null,T.originY=null,T.translateX=null,T.translateY=null,T.rotateZ=null,T.scaleX=null,T.scaleY=null;return}T.originX=m.x,T.originY=m.y,T.translateX=u.x,T.translateY=u.y,T.rotateZ=f,T.scaleX=E,T.scaleY=E}}),km=e=>e.utils.createView({name:"image-preview",tag:"div",ignoreRect:!0,mixins:{apis:["image","crop","markup","resize","dirty","background"],styles:["translateY","scaleX","scaleY","opacity"],animations:{scaleX:ze,scaleY:ze,translateY:ze,opacity:{type:"tween",duration:400}}},create:({root:t,props:i})=>{t.ref.clip=t.appendChildView(t.createChildView(Bm(e),{id:i.id,image:i.image,crop:i.crop,markup:i.markup,resize:i.resize,dirty:i.dirty,background:i.background}))},write:({root:t,props:i,shouldOptimize:a})=>{let{clip:n}=t.ref,{image:o,crop:l,markup:r,resize:s,dirty:p}=i;if(n.crop=l,n.markup=r,n.resize=s,n.dirty=p,n.opacity=a?0:1,a||t.rect.element.hidden)return;let c=o.height/o.width,d=l.aspectRatio||c,m=t.rect.inner.width,u=t.rect.inner.height,f=t.query("GET_IMAGE_PREVIEW_HEIGHT"),h=t.query("GET_IMAGE_PREVIEW_MIN_HEIGHT"),g=t.query("GET_IMAGE_PREVIEW_MAX_HEIGHT"),I=t.query("GET_PANEL_ASPECT_RATIO"),E=t.query("GET_ALLOW_MULTIPLE");I&&!E&&(f=m*I,d=I);let T=f!==null?f:Math.max(h,Math.min(m*d,g)),v=T/d;v>m&&(v=m,T=v*d),T>u&&(T=u,v=u/d),n.width=v,n.height=T}}),Vm=` +var Jl=Object.defineProperty;var er=(e,t)=>{for(var i in t)Jl(e,i,{get:t[i],enumerable:!0})};var na={};er(na,{FileOrigin:()=>zt,FileStatus:()=>Et,OptionTypes:()=>Gi,Status:()=>no,create:()=>ut,destroy:()=>ft,find:()=>Wi,getOptions:()=>Hi,parse:()=>Ui,registerPlugin:()=>ve,setOptions:()=>Dt,supported:()=>Vi});var tr=e=>e instanceof HTMLElement,ir=(e,t=[],i=[])=>{let a={...e},n=[],o=[],l=()=>({...a}),r=()=>{let f=[...n];return n.length=0,f},s=()=>{let f=[...o];o.length=0,f.forEach(({type:h,data:g})=>{p(h,g)})},p=(f,h,g)=>{if(g&&!document.hidden){o.push({type:f,data:h});return}u[f]&&u[f](h),n.push({type:f,data:h})},c=(f,...h)=>m[f]?m[f](...h):null,d={getState:l,processActionQueue:r,processDispatchQueue:s,dispatch:p,query:c},m={};t.forEach(f=>{m={...f(a),...m}});let u={};return i.forEach(f=>{u={...f(p,c,a),...u}}),d},ar=(e,t,i)=>{if(typeof i=="function"){e[t]=i;return}Object.defineProperty(e,t,{...i})},te=(e,t)=>{for(let i in e)e.hasOwnProperty(i)&&t(i,e[i])},We=e=>{let t={};return te(e,i=>{ar(t,i,e[i])}),t},se=(e,t,i=null)=>{if(i===null)return e.getAttribute(t)||e.hasAttribute(t);e.setAttribute(t,i)},nr="http://www.w3.org/2000/svg",or=["svg","path"],Oa=e=>or.includes(e),ni=(e,t,i={})=>{typeof t=="object"&&(i=t,t=null);let a=Oa(e)?document.createElementNS(nr,e):document.createElement(e);return t&&(Oa(e)?se(a,"class",t):a.className=t),te(i,(n,o)=>{se(a,n,o)}),a},lr=e=>(t,i)=>{typeof i<"u"&&e.children[i]?e.insertBefore(t,e.children[i]):e.appendChild(t)},rr=(e,t)=>(i,a)=>(typeof a<"u"?t.splice(a,0,i):t.push(i),i),sr=(e,t)=>i=>(t.splice(t.indexOf(i),1),i.element.parentNode&&e.removeChild(i.element),i),cr=(()=>typeof window<"u"&&typeof window.document<"u")(),En=()=>cr,dr=En()?ni("svg"):{},pr="children"in dr?e=>e.children.length:e=>e.childNodes.length,bn=(e,t,i,a)=>{let n=i[0]||e.left,o=i[1]||e.top,l=n+e.width,r=o+e.height*(a[1]||1),s={element:{...e},inner:{left:e.left,top:e.top,right:e.right,bottom:e.bottom},outer:{left:n,top:o,right:l,bottom:r}};return t.filter(p=>!p.isRectIgnored()).map(p=>p.rect).forEach(p=>{Pa(s.inner,{...p.inner}),Pa(s.outer,{...p.outer})}),Da(s.inner),s.outer.bottom+=s.element.marginBottom,s.outer.right+=s.element.marginRight,Da(s.outer),s},Pa=(e,t)=>{t.top+=e.top,t.right+=e.left,t.bottom+=e.top,t.left+=e.left,t.bottom>e.bottom&&(e.bottom=t.bottom),t.right>e.right&&(e.right=t.right)},Da=e=>{e.width=e.right-e.left,e.height=e.bottom-e.top},$e=e=>typeof e=="number",mr=(e,t,i,a=.001)=>Math.abs(e-t){let a=null,n=null,o=0,l=!1,p=We({interpolate:(c,d)=>{if(l)return;if(!($e(a)&&$e(n))){l=!0,o=0;return}let m=-(n-a)*e;o+=m/i,n+=o,o*=t,mr(n,a,o)||d?(n=a,o=0,l=!0,p.onupdate(n),p.oncomplete(n)):p.onupdate(n)},target:{set:c=>{if($e(c)&&!$e(n)&&(n=c),a===null&&(a=c,n=c),a=c,n===a||typeof a>"u"){l=!0,o=0,p.onupdate(n),p.oncomplete(n);return}l=!1},get:()=>a},resting:{get:()=>l},onupdate:c=>{},oncomplete:c=>{}});return p};var fr=e=>e<.5?2*e*e:-1+(4-2*e)*e,hr=({duration:e=500,easing:t=fr,delay:i=0}={})=>{let a=null,n,o,l=!0,r=!1,s=null,c=We({interpolate:(d,m)=>{l||s===null||(a===null&&(a=d),!(d-a=e||m?(n=1,o=r?0:1,c.onupdate(o*s),c.oncomplete(o*s),l=!0):(o=n/e,c.onupdate((n>=0?t(r?1-o:o):0)*s))))},target:{get:()=>r?0:s,set:d=>{if(s===null){s=d,c.onupdate(d),c.oncomplete(d);return}dl},onupdate:d=>{},oncomplete:d=>{}});return c},Fa={spring:ur,tween:hr},gr=(e,t,i)=>{let a=e[t]&&typeof e[t][i]=="object"?e[t][i]:e[t]||e,n=typeof a=="string"?a:a.type,o=typeof a=="object"?{...a}:{};return Fa[n]?Fa[n](o):null},ji=(e,t,i,a=!1)=>{t=Array.isArray(t)?t:[t],t.forEach(n=>{e.forEach(o=>{let l=o,r=()=>i[o],s=p=>i[o]=p;typeof o=="object"&&(l=o.key,r=o.getter||r,s=o.setter||s),!(n[l]&&!a)&&(n[l]={get:r,set:s})})})},Er=({mixinConfig:e,viewProps:t,viewInternalAPI:i,viewExternalAPI:a})=>{let n={...t},o=[];return te(e,(l,r)=>{let s=gr(r);if(!s)return;s.onupdate=c=>{t[l]=c},s.target=n[l],ji([{key:l,setter:c=>{s.target!==c&&(s.target=c)},getter:()=>t[l]}],[i,a],t,!0),o.push(s)}),{write:l=>{let r=document.hidden,s=!0;return o.forEach(p=>{p.resting||(s=!1),p.interpolate(l,r)}),s},destroy:()=>{}}},br=e=>(t,i)=>{e.addEventListener(t,i)},Tr=e=>(t,i)=>{e.removeEventListener(t,i)},Ir=({mixinConfig:e,viewProps:t,viewInternalAPI:i,viewExternalAPI:a,viewState:n,view:o})=>{let l=[],r=br(o.element),s=Tr(o.element);return a.on=(p,c)=>{l.push({type:p,fn:c}),r(p,c)},a.off=(p,c)=>{l.splice(l.findIndex(d=>d.type===p&&d.fn===c),1),s(p,c)},{write:()=>!0,destroy:()=>{l.forEach(p=>{s(p.type,p.fn)})}}},vr=({mixinConfig:e,viewProps:t,viewExternalAPI:i})=>{ji(e,i,t)},ue=e=>e!=null,xr={opacity:1,scaleX:1,scaleY:1,translateX:0,translateY:0,rotateX:0,rotateY:0,rotateZ:0,originX:0,originY:0},yr=({mixinConfig:e,viewProps:t,viewInternalAPI:i,viewExternalAPI:a,view:n})=>{let o={...t},l={};ji(e,[i,a],t);let r=()=>[t.translateX||0,t.translateY||0],s=()=>[t.scaleX||0,t.scaleY||0],p=()=>n.rect?bn(n.rect,n.childViews,r(),s()):null;return i.rect={get:p},a.rect={get:p},e.forEach(c=>{t[c]=typeof o[c]>"u"?xr[c]:o[c]}),{write:()=>{if(_r(l,t))return Rr(n.element,t),Object.assign(l,{...t}),!0},destroy:()=>{}}},_r=(e,t)=>{if(Object.keys(e).length!==Object.keys(t).length)return!0;for(let i in t)if(t[i]!==e[i])return!0;return!1},Rr=(e,{opacity:t,perspective:i,translateX:a,translateY:n,scaleX:o,scaleY:l,rotateX:r,rotateY:s,rotateZ:p,originX:c,originY:d,width:m,height:u})=>{let f="",h="";(ue(c)||ue(d))&&(h+=`transform-origin: ${c||0}px ${d||0}px;`),ue(i)&&(f+=`perspective(${i}px) `),(ue(a)||ue(n))&&(f+=`translate3d(${a||0}px, ${n||0}px, 0) `),(ue(o)||ue(l))&&(f+=`scale3d(${ue(o)?o:1}, ${ue(l)?l:1}, 1) `),ue(p)&&(f+=`rotateZ(${p}rad) `),ue(r)&&(f+=`rotateX(${r}rad) `),ue(s)&&(f+=`rotateY(${s}rad) `),f.length&&(h+=`transform:${f};`),ue(t)&&(h+=`opacity:${t};`,t===0&&(h+="visibility:hidden;"),t<1&&(h+="pointer-events:none;")),ue(u)&&(h+=`height:${u}px;`),ue(m)&&(h+=`width:${m}px;`);let g=e.elementCurrentStyle||"";(h.length!==g.length||h!==g)&&(e.style.cssText=h,e.elementCurrentStyle=h)},wr={styles:yr,listeners:Ir,animations:Er,apis:vr},za=(e={},t={},i={})=>(t.layoutCalculated||(e.paddingTop=parseInt(i.paddingTop,10)||0,e.marginTop=parseInt(i.marginTop,10)||0,e.marginRight=parseInt(i.marginRight,10)||0,e.marginBottom=parseInt(i.marginBottom,10)||0,e.marginLeft=parseInt(i.marginLeft,10)||0,t.layoutCalculated=!0),e.left=t.offsetLeft||0,e.top=t.offsetTop||0,e.width=t.offsetWidth||0,e.height=t.offsetHeight||0,e.right=e.left+e.width,e.bottom=e.top+e.height,e.scrollTop=t.scrollTop,e.hidden=t.offsetParent===null,e),ne=({tag:e="div",name:t=null,attributes:i={},read:a=()=>{},write:n=()=>{},create:o=()=>{},destroy:l=()=>{},filterFrameActionsForChild:r=(u,f)=>f,didCreateView:s=()=>{},didWriteView:p=()=>{},ignoreRect:c=!1,ignoreRectUpdate:d=!1,mixins:m=[]}={})=>(u,f={})=>{let h=ni(e,`filepond--${t}`,i),g=window.getComputedStyle(h,null),I=za(),E=null,T=!1,v=[],y=[],b={},w={},x=[n],_=[a],P=[l],O=()=>h,M=()=>v.concat(),C=()=>b,S=G=>(H,Y)=>H(G,Y),F=()=>E||(E=bn(I,v,[0,0],[1,1]),E),R=()=>g,L=()=>{E=null,v.forEach(Y=>Y._read()),!(d&&I.width&&I.height)&&za(I,h,g);let H={root:Q,props:f,rect:I};_.forEach(Y=>Y(H))},z=(G,H,Y)=>{let le=H.length===0;return x.forEach(ee=>{ee({props:f,root:Q,actions:H,timestamp:G,shouldOptimize:Y})===!1&&(le=!1)}),y.forEach(ee=>{ee.write(G)===!1&&(le=!1)}),v.filter(ee=>!!ee.element.parentNode).forEach(ee=>{ee._write(G,r(ee,H),Y)||(le=!1)}),v.forEach((ee,V)=>{ee.element.parentNode||(Q.appendChild(ee.element,V),ee._read(),ee._write(G,r(ee,H),Y),le=!1)}),T=le,p({props:f,root:Q,actions:H,timestamp:G}),le},D=()=>{y.forEach(G=>G.destroy()),P.forEach(G=>{G({root:Q,props:f})}),v.forEach(G=>G._destroy())},k={element:{get:O},style:{get:R},childViews:{get:M}},B={...k,rect:{get:F},ref:{get:C},is:G=>t===G,appendChild:lr(h),createChildView:S(u),linkView:G=>(v.push(G),G),unlinkView:G=>{v.splice(v.indexOf(G),1)},appendChildView:rr(h,v),removeChildView:sr(h,v),registerWriter:G=>x.push(G),registerReader:G=>_.push(G),registerDestroyer:G=>P.push(G),invalidateLayout:()=>h.layoutCalculated=!1,dispatch:u.dispatch,query:u.query},X={element:{get:O},childViews:{get:M},rect:{get:F},resting:{get:()=>T},isRectIgnored:()=>c,_read:L,_write:z,_destroy:D},q={...k,rect:{get:()=>I}};Object.keys(m).sort((G,H)=>G==="styles"?1:H==="styles"?-1:0).forEach(G=>{let H=wr[G]({mixinConfig:m[G],viewProps:f,viewState:w,viewInternalAPI:B,viewExternalAPI:X,view:We(q)});H&&y.push(H)});let Q=We(B);o({root:Q,props:f});let pe=pr(h);return v.forEach((G,H)=>{Q.appendChild(G.element,pe+H)}),s(Q),We(X)},Sr=(e,t,i=60)=>{let a="__framePainter";if(window[a]){window[a].readers.push(e),window[a].writers.push(t);return}window[a]={readers:[e],writers:[t]};let n=window[a],o=1e3/i,l=null,r=null,s=null,p=null,c=()=>{document.hidden?(s=()=>window.setTimeout(()=>d(performance.now()),o),p=()=>window.clearTimeout(r)):(s=()=>window.requestAnimationFrame(d),p=()=>window.cancelAnimationFrame(r))};document.addEventListener("visibilitychange",()=>{p&&p(),c(),d(performance.now())});let d=m=>{r=s(d),l||(l=m);let u=m-l;u<=o||(l=m-u%o,n.readers.forEach(f=>f()),n.writers.forEach(f=>f(m)))};return c(),d(performance.now()),{pause:()=>{p(r)}}},he=(e,t)=>({root:i,props:a,actions:n=[],timestamp:o,shouldOptimize:l})=>{n.filter(r=>e[r.type]).forEach(r=>e[r.type]({root:i,props:a,action:r.data,timestamp:o,shouldOptimize:l})),t&&t({root:i,props:a,actions:n,timestamp:o,shouldOptimize:l})},Ca=(e,t)=>t.parentNode.insertBefore(e,t),Na=(e,t)=>t.parentNode.insertBefore(e,t.nextSibling),si=e=>Array.isArray(e),Be=e=>e==null,Lr=e=>e.trim(),ci=e=>""+e,Ar=(e,t=",")=>Be(e)?[]:si(e)?e:ci(e).split(t).map(Lr).filter(i=>i.length),Tn=e=>typeof e=="boolean",In=e=>Tn(e)?e:e==="true",fe=e=>typeof e=="string",vn=e=>$e(e)?e:fe(e)?ci(e).replace(/[a-z]+/gi,""):0,ai=e=>parseInt(vn(e),10),Ba=e=>parseFloat(vn(e)),gt=e=>$e(e)&&isFinite(e)&&Math.floor(e)===e,ka=(e,t=1e3)=>{if(gt(e))return e;let i=ci(e).trim();return/MB$/i.test(i)?(i=i.replace(/MB$i/,"").trim(),ai(i)*t*t):/KB/i.test(i)?(i=i.replace(/KB$i/,"").trim(),ai(i)*t):ai(i)},Xe=e=>typeof e=="function",Mr=e=>{let t=self,i=e.split("."),a=null;for(;a=i.shift();)if(t=t[a],!t)return null;return t},Va={process:"POST",patch:"PATCH",revert:"DELETE",fetch:"GET",restore:"GET",load:"GET"},Or=e=>{let t={};return t.url=fe(e)?e:e.url||"",t.timeout=e.timeout?parseInt(e.timeout,10):0,t.headers=e.headers?e.headers:{},te(Va,i=>{t[i]=Pr(i,e[i],Va[i],t.timeout,t.headers)}),t.process=e.process||fe(e)||e.url?t.process:null,t.remove=e.remove||null,delete t.headers,t},Pr=(e,t,i,a,n)=>{if(t===null)return null;if(typeof t=="function")return t;let o={url:i==="GET"||i==="PATCH"?`?${e}=`:"",method:i,headers:n,withCredentials:!1,timeout:a,onload:null,ondata:null,onerror:null};if(fe(t))return o.url=t,o;if(Object.assign(o,t),fe(o.headers)){let l=o.headers.split(/:(.+)/);o.headers={header:l[0],value:l[1]}}return o.withCredentials=In(o.withCredentials),o},Dr=e=>Or(e),Fr=e=>e===null,ce=e=>typeof e=="object"&&e!==null,zr=e=>ce(e)&&fe(e.url)&&ce(e.process)&&ce(e.revert)&&ce(e.restore)&&ce(e.fetch),Pi=e=>si(e)?"array":Fr(e)?"null":gt(e)?"int":/^[0-9]+ ?(?:GB|MB|KB)$/gi.test(e)?"bytes":zr(e)?"api":typeof e,Cr=e=>e.replace(/{\s*'/g,'{"').replace(/'\s*}/g,'"}').replace(/'\s*:/g,'":').replace(/:\s*'/g,':"').replace(/,\s*'/g,',"').replace(/'\s*,/g,'",'),Nr={array:Ar,boolean:In,int:e=>Pi(e)==="bytes"?ka(e):ai(e),number:Ba,float:Ba,bytes:ka,string:e=>Xe(e)?e:ci(e),function:e=>Mr(e),serverapi:Dr,object:e=>{try{return JSON.parse(Cr(e))}catch{return null}}},Br=(e,t)=>Nr[t](e),xn=(e,t,i)=>{if(e===t)return e;let a=Pi(e);if(a!==i){let n=Br(e,i);if(a=Pi(n),n===null)throw`Trying to assign value with incorrect type to "${option}", allowed type: "${i}"`;e=n}return e},kr=(e,t)=>{let i=e;return{enumerable:!0,get:()=>i,set:a=>{i=xn(a,e,t)}}},Vr=e=>{let t={};return te(e,i=>{let a=e[i];t[i]=kr(a[0],a[1])}),We(t)},Gr=e=>({items:[],listUpdateTimeout:null,itemUpdateTimeout:null,processingQueue:[],options:Vr(e)}),di=(e,t="-")=>e.split(/(?=[A-Z])/).map(i=>i.toLowerCase()).join(t),Ur=(e,t)=>{let i={};return te(t,a=>{i[a]={get:()=>e.getState().options[a],set:n=>{e.dispatch(`SET_${di(a,"_").toUpperCase()}`,{value:n})}}}),i},Wr=e=>(t,i,a)=>{let n={};return te(e,o=>{let l=di(o,"_").toUpperCase();n[`SET_${l}`]=r=>{try{a.options[o]=r.value}catch{}t(`DID_SET_${l}`,{value:a.options[o]})}}),n},Hr=e=>t=>{let i={};return te(e,a=>{i[`GET_${di(a,"_").toUpperCase()}`]=n=>t.options[a]}),i},_e={API:1,DROP:2,BROWSE:3,PASTE:4,NONE:5},Yi=()=>Math.random().toString(36).substring(2,11),qi=(e,t)=>e.splice(t,1),jr=(e,t)=>{t?e():document.hidden?Promise.resolve(1).then(e):setTimeout(e,0)},pi=()=>{let e=[],t=(a,n)=>{qi(e,e.findIndex(o=>o.event===a&&(o.cb===n||!n)))},i=(a,n,o)=>{e.filter(l=>l.event===a).map(l=>l.cb).forEach(l=>jr(()=>l(...n),o))};return{fireSync:(a,...n)=>{i(a,n,!0)},fire:(a,...n)=>{i(a,n,!1)},on:(a,n)=>{e.push({event:a,cb:n})},onOnce:(a,n)=>{e.push({event:a,cb:(...o)=>{t(a,n),n(...o)}})},off:t}},yn=(e,t,i)=>{Object.getOwnPropertyNames(e).filter(a=>!i.includes(a)).forEach(a=>Object.defineProperty(t,a,Object.getOwnPropertyDescriptor(e,a)))},Yr=["fire","process","revert","load","on","off","onOnce","retryLoad","extend","archive","archived","release","released","requestProcessing","freeze"],ge=e=>{let t={};return yn(e,t,Yr),t},qr=e=>{e.forEach((t,i)=>{t.released&&qi(e,i)})},W={INIT:1,IDLE:2,PROCESSING_QUEUED:9,PROCESSING:3,PROCESSING_COMPLETE:5,PROCESSING_ERROR:6,PROCESSING_REVERT_ERROR:10,LOADING:7,LOAD_ERROR:8},re={INPUT:1,LIMBO:2,LOCAL:3},_n=e=>/[^0-9]+/.exec(e),Rn=()=>_n(1.1.toLocaleString())[0],$r=()=>{let e=Rn(),t=1e3.toLocaleString(),i=1e3.toString();return t!==i?_n(t)[0]:e==="."?",":"."},A={BOOLEAN:"boolean",INT:"int",NUMBER:"number",STRING:"string",ARRAY:"array",OBJECT:"object",FUNCTION:"function",ACTION:"action",SERVER_API:"serverapi",REGEX:"regex"},$i=[],Ae=(e,t,i)=>new Promise((a,n)=>{let o=$i.filter(r=>r.key===e).map(r=>r.cb);if(o.length===0){a(t);return}let l=o.shift();o.reduce((r,s)=>r.then(p=>s(p,i)),l(t,i)).then(r=>a(r)).catch(r=>n(r))}),tt=(e,t,i)=>$i.filter(a=>a.key===e).map(a=>a.cb(t,i)),Xr=(e,t)=>$i.push({key:e,cb:t}),Qr=e=>Object.assign(dt,e),oi=()=>({...dt}),Zr=e=>{te(e,(t,i)=>{dt[t]&&(dt[t][0]=xn(i,dt[t][0],dt[t][1]))})},dt={id:[null,A.STRING],name:["filepond",A.STRING],disabled:[!1,A.BOOLEAN],className:[null,A.STRING],required:[!1,A.BOOLEAN],captureMethod:[null,A.STRING],allowSyncAcceptAttribute:[!0,A.BOOLEAN],allowDrop:[!0,A.BOOLEAN],allowBrowse:[!0,A.BOOLEAN],allowPaste:[!0,A.BOOLEAN],allowMultiple:[!1,A.BOOLEAN],allowReplace:[!0,A.BOOLEAN],allowRevert:[!0,A.BOOLEAN],allowRemove:[!0,A.BOOLEAN],allowProcess:[!0,A.BOOLEAN],allowReorder:[!1,A.BOOLEAN],allowDirectoriesOnly:[!1,A.BOOLEAN],storeAsFile:[!1,A.BOOLEAN],forceRevert:[!1,A.BOOLEAN],maxFiles:[null,A.INT],checkValidity:[!1,A.BOOLEAN],itemInsertLocationFreedom:[!0,A.BOOLEAN],itemInsertLocation:["before",A.STRING],itemInsertInterval:[75,A.INT],dropOnPage:[!1,A.BOOLEAN],dropOnElement:[!0,A.BOOLEAN],dropValidation:[!1,A.BOOLEAN],ignoredFiles:[[".ds_store","thumbs.db","desktop.ini"],A.ARRAY],instantUpload:[!0,A.BOOLEAN],maxParallelUploads:[2,A.INT],allowMinimumUploadDuration:[!0,A.BOOLEAN],chunkUploads:[!1,A.BOOLEAN],chunkForce:[!1,A.BOOLEAN],chunkSize:[5e6,A.INT],chunkRetryDelays:[[500,1e3,3e3],A.ARRAY],server:[null,A.SERVER_API],fileSizeBase:[1e3,A.INT],labelFileSizeBytes:["bytes",A.STRING],labelFileSizeKilobytes:["KB",A.STRING],labelFileSizeMegabytes:["MB",A.STRING],labelFileSizeGigabytes:["GB",A.STRING],labelDecimalSeparator:[Rn(),A.STRING],labelThousandsSeparator:[$r(),A.STRING],labelIdle:['Drag & Drop your files or Browse',A.STRING],labelInvalidField:["Field contains invalid files",A.STRING],labelFileWaitingForSize:["Waiting for size",A.STRING],labelFileSizeNotAvailable:["Size not available",A.STRING],labelFileCountSingular:["file in list",A.STRING],labelFileCountPlural:["files in list",A.STRING],labelFileLoading:["Loading",A.STRING],labelFileAdded:["Added",A.STRING],labelFileLoadError:["Error during load",A.STRING],labelFileRemoved:["Removed",A.STRING],labelFileRemoveError:["Error during remove",A.STRING],labelFileProcessing:["Uploading",A.STRING],labelFileProcessingComplete:["Upload complete",A.STRING],labelFileProcessingAborted:["Upload cancelled",A.STRING],labelFileProcessingError:["Error during upload",A.STRING],labelFileProcessingRevertError:["Error during revert",A.STRING],labelTapToCancel:["tap to cancel",A.STRING],labelTapToRetry:["tap to retry",A.STRING],labelTapToUndo:["tap to undo",A.STRING],labelButtonRemoveItem:["Remove",A.STRING],labelButtonAbortItemLoad:["Abort",A.STRING],labelButtonRetryItemLoad:["Retry",A.STRING],labelButtonAbortItemProcessing:["Cancel",A.STRING],labelButtonUndoItemProcessing:["Undo",A.STRING],labelButtonRetryItemProcessing:["Retry",A.STRING],labelButtonProcessItem:["Upload",A.STRING],iconRemove:['',A.STRING],iconProcess:['',A.STRING],iconRetry:['',A.STRING],iconUndo:['',A.STRING],iconDone:['',A.STRING],oninit:[null,A.FUNCTION],onwarning:[null,A.FUNCTION],onerror:[null,A.FUNCTION],onactivatefile:[null,A.FUNCTION],oninitfile:[null,A.FUNCTION],onaddfilestart:[null,A.FUNCTION],onaddfileprogress:[null,A.FUNCTION],onaddfile:[null,A.FUNCTION],onprocessfilestart:[null,A.FUNCTION],onprocessfileprogress:[null,A.FUNCTION],onprocessfileabort:[null,A.FUNCTION],onprocessfilerevert:[null,A.FUNCTION],onprocessfile:[null,A.FUNCTION],onprocessfiles:[null,A.FUNCTION],onremovefile:[null,A.FUNCTION],onpreparefile:[null,A.FUNCTION],onupdatefiles:[null,A.FUNCTION],onreorderfiles:[null,A.FUNCTION],beforeDropFile:[null,A.FUNCTION],beforeAddFile:[null,A.FUNCTION],beforeRemoveFile:[null,A.FUNCTION],beforePrepareFile:[null,A.FUNCTION],stylePanelLayout:[null,A.STRING],stylePanelAspectRatio:[null,A.STRING],styleItemPanelAspectRatio:[null,A.STRING],styleButtonRemoveItemPosition:["left",A.STRING],styleButtonProcessItemPosition:["right",A.STRING],styleLoadIndicatorPosition:["right",A.STRING],styleProgressIndicatorPosition:["right",A.STRING],styleButtonRemoveItemAlign:[!1,A.BOOLEAN],files:[[],A.ARRAY],credits:[["https://pqina.nl/","Powered by PQINA"],A.ARRAY]},Qe=(e,t)=>Be(t)?e[0]||null:gt(t)?e[t]||null:(typeof t=="object"&&(t=t.id),e.find(i=>i.id===t)||null),wn=e=>{if(Be(e))return e;if(/:/.test(e)){let t=e.split(":");return t[1]/t[0]}return parseFloat(e)},Me=e=>e.filter(t=>!t.archived),Sn={EMPTY:0,IDLE:1,ERROR:2,BUSY:3,READY:4},Zt=null,Kr=()=>{if(Zt===null)try{let e=new DataTransfer;e.items.add(new File(["hello world"],"This_Works.txt"));let t=document.createElement("input");t.setAttribute("type","file"),t.files=e.files,Zt=t.files.length===1}catch{Zt=!1}return Zt},Jr=[W.LOAD_ERROR,W.PROCESSING_ERROR,W.PROCESSING_REVERT_ERROR],es=[W.LOADING,W.PROCESSING,W.PROCESSING_QUEUED,W.INIT],ts=[W.PROCESSING_COMPLETE],is=e=>Jr.includes(e.status),as=e=>es.includes(e.status),ns=e=>ts.includes(e.status),Ga=e=>ce(e.options.server)&&(ce(e.options.server.process)||Xe(e.options.server.process)),os=e=>({GET_STATUS:()=>{let t=Me(e.items),{EMPTY:i,ERROR:a,BUSY:n,IDLE:o,READY:l}=Sn;return t.length===0?i:t.some(is)?a:t.some(as)?n:t.some(ns)?l:o},GET_ITEM:t=>Qe(e.items,t),GET_ACTIVE_ITEM:t=>Qe(Me(e.items),t),GET_ACTIVE_ITEMS:()=>Me(e.items),GET_ITEMS:()=>e.items,GET_ITEM_NAME:t=>{let i=Qe(e.items,t);return i?i.filename:null},GET_ITEM_SIZE:t=>{let i=Qe(e.items,t);return i?i.fileSize:null},GET_STYLES:()=>Object.keys(e.options).filter(t=>/^style/.test(t)).map(t=>({name:t,value:e.options[t]})),GET_PANEL_ASPECT_RATIO:()=>/circle/.test(e.options.stylePanelLayout)?1:wn(e.options.stylePanelAspectRatio),GET_ITEM_PANEL_ASPECT_RATIO:()=>e.options.styleItemPanelAspectRatio,GET_ITEMS_BY_STATUS:t=>Me(e.items).filter(i=>i.status===t),GET_TOTAL_ITEMS:()=>Me(e.items).length,SHOULD_UPDATE_FILE_INPUT:()=>e.options.storeAsFile&&Kr()&&!Ga(e),IS_ASYNC:()=>Ga(e),GET_FILE_SIZE_LABELS:t=>({labelBytes:t("GET_LABEL_FILE_SIZE_BYTES")||void 0,labelKilobytes:t("GET_LABEL_FILE_SIZE_KILOBYTES")||void 0,labelMegabytes:t("GET_LABEL_FILE_SIZE_MEGABYTES")||void 0,labelGigabytes:t("GET_LABEL_FILE_SIZE_GIGABYTES")||void 0})}),ls=e=>{let t=Me(e.items).length;if(!e.options.allowMultiple)return t===0;let i=e.options.maxFiles;return i===null||tMath.max(Math.min(i,e),t),rs=(e,t,i)=>e.splice(t,0,i),ss=(e,t,i)=>Be(t)?null:typeof i>"u"?(e.push(t),t):(i=Ln(i,0,e.length),rs(e,i,t),t),Di=e=>/^\s*data:([a-z]+\/[a-z0-9-+.]+(;[a-z-]+=[a-z0-9-]+)?)?(;base64)?,([a-z0-9!$&',()*+;=\-._~:@\/?%\s]*)\s*$/i.test(e),Ft=e=>`${e}`.split("/").pop().split("?").shift(),mi=e=>e.split(".").pop(),cs=e=>{if(typeof e!="string")return"";let t=e.split("/").pop();return/svg/.test(t)?"svg":/zip|compressed/.test(t)?"zip":/plain/.test(t)?"txt":/msword/.test(t)?"doc":/[a-z]+/.test(t)?t==="jpeg"?"jpg":t:""},At=(e,t="")=>(t+e).slice(-t.length),An=(e=new Date)=>`${e.getFullYear()}-${At(e.getMonth()+1,"00")}-${At(e.getDate(),"00")}_${At(e.getHours(),"00")}-${At(e.getMinutes(),"00")}-${At(e.getSeconds(),"00")}`,ht=(e,t,i=null,a=null)=>{let n=typeof i=="string"?e.slice(0,e.size,i):e.slice(0,e.size,e.type);return n.lastModifiedDate=new Date,e._relativePath&&(n._relativePath=e._relativePath),fe(t)||(t=An()),t&&a===null&&mi(t)?n.name=t:(a=a||cs(n.type),n.name=t+(a?"."+a:"")),n},ds=()=>window.BlobBuilder=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder,Mn=(e,t)=>{let i=ds();if(i){let a=new i;return a.append(e),a.getBlob(t)}return new Blob([e],{type:t})},ps=(e,t)=>{let i=new ArrayBuffer(e.length),a=new Uint8Array(i);for(let n=0;n(/^data:(.+);/.exec(e)||[])[1]||null,ms=e=>e.split(",")[1].replace(/\s/g,""),us=e=>atob(ms(e)),fs=e=>{let t=On(e),i=us(e);return ps(i,t)},hs=(e,t,i)=>ht(fs(e),t,null,i),gs=e=>{if(!/^content-disposition:/i.test(e))return null;let t=e.split(/filename=|filename\*=.+''/).splice(1).map(i=>i.trim().replace(/^["']|[;"']{0,2}$/g,"")).filter(i=>i.length);return t.length?decodeURI(t[t.length-1]):null},Es=e=>{if(/content-length:/i.test(e)){let t=e.match(/[0-9]+/)[0];return t?parseInt(t,10):null}return null},bs=e=>/x-content-transfer-id:/i.test(e)&&(e.split(":")[1]||"").trim()||null,Xi=e=>{let t={source:null,name:null,size:null},i=e.split(` +`);for(let a of i){let n=gs(a);if(n){t.name=n;continue}let o=Es(a);if(o){t.size=o;continue}let l=bs(a);if(l){t.source=l;continue}}return t},Ts=e=>{let t={source:null,complete:!1,progress:0,size:null,timestamp:null,duration:0,request:null},i=()=>t.progress,a=()=>{t.request&&t.request.abort&&t.request.abort()},n=()=>{let r=t.source;l.fire("init",r),r instanceof File?l.fire("load",r):r instanceof Blob?l.fire("load",ht(r,r.name)):Di(r)?l.fire("load",hs(r)):o(r)},o=r=>{if(!e){l.fire("error",{type:"error",body:"Can't load URL",code:400});return}t.timestamp=Date.now(),t.request=e(r,s=>{t.duration=Date.now()-t.timestamp,t.complete=!0,s instanceof Blob&&(s=ht(s,s.name||Ft(r))),l.fire("load",s instanceof Blob?s:s?s.body:null)},s=>{l.fire("error",typeof s=="string"?{type:"error",code:0,body:s}:s)},(s,p,c)=>{if(c&&(t.size=c),t.duration=Date.now()-t.timestamp,!s){t.progress=null;return}t.progress=p/c,l.fire("progress",t.progress)},()=>{l.fire("abort")},s=>{let p=Xi(typeof s=="string"?s:s.headers);l.fire("meta",{size:t.size||p.size,filename:p.name,source:p.source})})},l={...pi(),setSource:r=>t.source=r,getProgress:i,abort:a,load:n};return l},Ua=e=>/GET|HEAD/.test(e),Ze=(e,t,i)=>{let a={onheaders:()=>{},onprogress:()=>{},onload:()=>{},ontimeout:()=>{},onerror:()=>{},onabort:()=>{},abort:()=>{n=!0,l.abort()}},n=!1,o=!1;i={method:"POST",headers:{},withCredentials:!1,...i},t=encodeURI(t),Ua(i.method)&&e&&(t=`${t}${encodeURIComponent(typeof e=="string"?e:JSON.stringify(e))}`);let l=new XMLHttpRequest,r=Ua(i.method)?l:l.upload;return r.onprogress=s=>{n||a.onprogress(s.lengthComputable,s.loaded,s.total)},l.onreadystatechange=()=>{l.readyState<2||l.readyState===4&&l.status===0||o||(o=!0,a.onheaders(l))},l.onload=()=>{l.status>=200&&l.status<300?a.onload(l):a.onerror(l)},l.onerror=()=>a.onerror(l),l.onabort=()=>{n=!0,a.onabort()},l.ontimeout=()=>a.ontimeout(l),l.open(i.method,t,!0),gt(i.timeout)&&(l.timeout=i.timeout),Object.keys(i.headers).forEach(s=>{let p=unescape(encodeURIComponent(i.headers[s]));l.setRequestHeader(s,p)}),i.responseType&&(l.responseType=i.responseType),i.withCredentials&&(l.withCredentials=!0),l.send(e),a},ie=(e,t,i,a)=>({type:e,code:t,body:i,headers:a}),Ke=e=>t=>{e(ie("error",0,"Timeout",t.getAllResponseHeaders()))},Wa=e=>/\?/.test(e),Pt=(...e)=>{let t="";return e.forEach(i=>{t+=Wa(t)&&Wa(i)?i.replace(/\?/,"&"):i}),t},wi=(e="",t)=>{if(typeof t=="function")return t;if(!t||!fe(t.url))return null;let i=t.onload||(n=>n),a=t.onerror||(n=>null);return(n,o,l,r,s,p)=>{let c=Ze(n,Pt(e,t.url),{...t,responseType:"blob"});return c.onload=d=>{let m=d.getAllResponseHeaders(),u=Xi(m).name||Ft(n);o(ie("load",d.status,t.method==="HEAD"?null:ht(i(d.response),u),m))},c.onerror=d=>{l(ie("error",d.status,a(d.response)||d.statusText,d.getAllResponseHeaders()))},c.onheaders=d=>{p(ie("headers",d.status,null,d.getAllResponseHeaders()))},c.ontimeout=Ke(l),c.onprogress=r,c.onabort=s,c}},xe={QUEUED:0,COMPLETE:1,PROCESSING:2,ERROR:3,WAITING:4},Is=(e,t,i,a,n,o,l,r,s,p,c)=>{let d=[],{chunkTransferId:m,chunkServer:u,chunkSize:f,chunkRetryDelays:h}=c,g={serverId:m,aborted:!1},I=t.ondata||(S=>S),E=t.onload||((S,F)=>F==="HEAD"?S.getResponseHeader("Upload-Offset"):S.response),T=t.onerror||(S=>null),v=S=>{let F=new FormData;ce(n)&&F.append(i,JSON.stringify(n));let R=typeof t.headers=="function"?t.headers(a,n):{...t.headers,"Upload-Length":a.size},L={...t,headers:R},z=Ze(I(F),Pt(e,t.url),L);z.onload=D=>S(E(D,L.method)),z.onerror=D=>l(ie("error",D.status,T(D.response)||D.statusText,D.getAllResponseHeaders())),z.ontimeout=Ke(l)},y=S=>{let F=Pt(e,u.url,g.serverId),L={headers:typeof t.headers=="function"?t.headers(g.serverId):{...t.headers},method:"HEAD"},z=Ze(null,F,L);z.onload=D=>S(E(D,L.method)),z.onerror=D=>l(ie("error",D.status,T(D.response)||D.statusText,D.getAllResponseHeaders())),z.ontimeout=Ke(l)},b=Math.floor(a.size/f);for(let S=0;S<=b;S++){let F=S*f,R=a.slice(F,F+f,"application/offset+octet-stream");d[S]={index:S,size:R.size,offset:F,data:R,file:a,progress:0,retries:[...h],status:xe.QUEUED,error:null,request:null,timeout:null}}let w=()=>o(g.serverId),x=S=>S.status===xe.QUEUED||S.status===xe.ERROR,_=S=>{if(g.aborted)return;if(S=S||d.find(x),!S){d.every(k=>k.status===xe.COMPLETE)&&w();return}S.status=xe.PROCESSING,S.progress=null;let F=u.ondata||(k=>k),R=u.onerror||(k=>null),L=Pt(e,u.url,g.serverId),z=typeof u.headers=="function"?u.headers(S):{...u.headers,"Content-Type":"application/offset+octet-stream","Upload-Offset":S.offset,"Upload-Length":a.size,"Upload-Name":a.name},D=S.request=Ze(F(S.data),L,{...u,headers:z});D.onload=()=>{S.status=xe.COMPLETE,S.request=null,M()},D.onprogress=(k,B,X)=>{S.progress=k?B:null,O()},D.onerror=k=>{S.status=xe.ERROR,S.request=null,S.error=R(k.response)||k.statusText,P(S)||l(ie("error",k.status,R(k.response)||k.statusText,k.getAllResponseHeaders()))},D.ontimeout=k=>{S.status=xe.ERROR,S.request=null,P(S)||Ke(l)(k)},D.onabort=()=>{S.status=xe.QUEUED,S.request=null,s()}},P=S=>S.retries.length===0?!1:(S.status=xe.WAITING,clearTimeout(S.timeout),S.timeout=setTimeout(()=>{_(S)},S.retries.shift()),!0),O=()=>{let S=d.reduce((R,L)=>R===null||L.progress===null?null:R+L.progress,0);if(S===null)return r(!1,0,0);let F=d.reduce((R,L)=>R+L.size,0);r(!0,S,F)},M=()=>{d.filter(F=>F.status===xe.PROCESSING).length>=1||_()},C=()=>{d.forEach(S=>{clearTimeout(S.timeout),S.request&&S.request.abort()})};return g.serverId?y(S=>{g.aborted||(d.filter(F=>F.offset{F.status=xe.COMPLETE,F.progress=F.size}),M())}):v(S=>{g.aborted||(p(S),g.serverId=S,M())}),{abort:()=>{g.aborted=!0,C()}}},vs=(e,t,i,a)=>(n,o,l,r,s,p,c)=>{if(!n)return;let d=a.chunkUploads,m=d&&n.size>a.chunkSize,u=d&&(m||a.chunkForce);if(n instanceof Blob&&u)return Is(e,t,i,n,o,l,r,s,p,c,a);let f=t.ondata||(y=>y),h=t.onload||(y=>y),g=t.onerror||(y=>null),I=typeof t.headers=="function"?t.headers(n,o)||{}:{...t.headers},E={...t,headers:I};var T=new FormData;ce(o)&&T.append(i,JSON.stringify(o)),(n instanceof Blob?[{name:null,file:n}]:n).forEach(y=>{T.append(i,y.file,y.name===null?y.file.name:`${y.name}${y.file.name}`)});let v=Ze(f(T),Pt(e,t.url),E);return v.onload=y=>{l(ie("load",y.status,h(y.response),y.getAllResponseHeaders()))},v.onerror=y=>{r(ie("error",y.status,g(y.response)||y.statusText,y.getAllResponseHeaders()))},v.ontimeout=Ke(r),v.onprogress=s,v.onabort=p,v},xs=(e="",t,i,a)=>typeof t=="function"?(...n)=>t(i,...n,a):!t||!fe(t.url)?null:vs(e,t,i,a),Mt=(e="",t)=>{if(typeof t=="function")return t;if(!t||!fe(t.url))return(n,o)=>o();let i=t.onload||(n=>n),a=t.onerror||(n=>null);return(n,o,l)=>{let r=Ze(n,e+t.url,t);return r.onload=s=>{o(ie("load",s.status,i(s.response),s.getAllResponseHeaders()))},r.onerror=s=>{l(ie("error",s.status,a(s.response)||s.statusText,s.getAllResponseHeaders()))},r.ontimeout=Ke(l),r}},Pn=(e=0,t=1)=>e+Math.random()*(t-e),ys=(e,t=1e3,i=0,a=25,n=250)=>{let o=null,l=Date.now(),r=()=>{let s=Date.now()-l,p=Pn(a,n);s+p>t&&(p=s+p-t);let c=s/t;if(c>=1||document.hidden){e(1);return}e(c),o=setTimeout(r,p)};return t>0&&r(),{clear:()=>{clearTimeout(o)}}},_s=(e,t)=>{let i={complete:!1,perceivedProgress:0,perceivedPerformanceUpdater:null,progress:null,timestamp:null,perceivedDuration:0,duration:0,request:null,response:null},{allowMinimumUploadDuration:a}=t,n=(c,d)=>{let m=()=>{i.duration===0||i.progress===null||p.fire("progress",p.getProgress())},u=()=>{i.complete=!0,p.fire("load-perceived",i.response.body)};p.fire("start"),i.timestamp=Date.now(),i.perceivedPerformanceUpdater=ys(f=>{i.perceivedProgress=f,i.perceivedDuration=Date.now()-i.timestamp,m(),i.response&&i.perceivedProgress===1&&!i.complete&&u()},a?Pn(750,1500):0),i.request=e(c,d,f=>{i.response=ce(f)?f:{type:"load",code:200,body:`${f}`,headers:{}},i.duration=Date.now()-i.timestamp,i.progress=1,p.fire("load",i.response.body),(!a||a&&i.perceivedProgress===1)&&u()},f=>{i.perceivedPerformanceUpdater.clear(),p.fire("error",ce(f)?f:{type:"error",code:0,body:`${f}`})},(f,h,g)=>{i.duration=Date.now()-i.timestamp,i.progress=f?h/g:null,m()},()=>{i.perceivedPerformanceUpdater.clear(),p.fire("abort",i.response?i.response.body:null)},f=>{p.fire("transfer",f)})},o=()=>{i.request&&(i.perceivedPerformanceUpdater.clear(),i.request.abort&&i.request.abort(),i.complete=!0)},l=()=>{o(),i.complete=!1,i.perceivedProgress=0,i.progress=0,i.timestamp=null,i.perceivedDuration=0,i.duration=0,i.request=null,i.response=null},r=a?()=>i.progress?Math.min(i.progress,i.perceivedProgress):null:()=>i.progress||null,s=a?()=>Math.min(i.duration,i.perceivedDuration):()=>i.duration,p={...pi(),process:n,abort:o,getProgress:r,getDuration:s,reset:l};return p},Dn=e=>e.substring(0,e.lastIndexOf("."))||e,Rs=e=>{let t=[e.name,e.size,e.type];return e instanceof Blob||Di(e)?t[0]=e.name||An():Di(e)?(t[1]=e.length,t[2]=On(e)):fe(e)&&(t[0]=Ft(e),t[1]=0,t[2]="application/octet-stream"),{name:t[0],size:t[1],type:t[2]}},Je=e=>!!(e instanceof File||e instanceof Blob&&e.name),Fn=e=>{if(!ce(e))return e;let t=si(e)?[]:{};for(let i in e){if(!e.hasOwnProperty(i))continue;let a=e[i];t[i]=a&&ce(a)?Fn(a):a}return t},ws=(e=null,t=null,i=null)=>{let a=Yi(),n={archived:!1,frozen:!1,released:!1,source:null,file:i,serverFileReference:t,transferId:null,processingAborted:!1,status:t?W.PROCESSING_COMPLETE:W.INIT,activeLoader:null,activeProcessor:null},o=null,l={},r=x=>n.status=x,s=(x,..._)=>{n.released||n.frozen||b.fire(x,..._)},p=()=>mi(n.file.name),c=()=>n.file.type,d=()=>n.file.size,m=()=>n.file,u=(x,_,P)=>{if(n.source=x,b.fireSync("init"),n.file){b.fireSync("load-skip");return}n.file=Rs(x),_.on("init",()=>{s("load-init")}),_.on("meta",O=>{n.file.size=O.size,n.file.filename=O.filename,O.source&&(e=re.LIMBO,n.serverFileReference=O.source,n.status=W.PROCESSING_COMPLETE),s("load-meta")}),_.on("progress",O=>{r(W.LOADING),s("load-progress",O)}),_.on("error",O=>{r(W.LOAD_ERROR),s("load-request-error",O)}),_.on("abort",()=>{r(W.INIT),s("load-abort")}),_.on("load",O=>{n.activeLoader=null;let M=S=>{n.file=Je(S)?S:n.file,e===re.LIMBO&&n.serverFileReference?r(W.PROCESSING_COMPLETE):r(W.IDLE),s("load")},C=S=>{n.file=O,s("load-meta"),r(W.LOAD_ERROR),s("load-file-error",S)};if(n.serverFileReference){M(O);return}P(O,M,C)}),_.setSource(x),n.activeLoader=_,_.load()},f=()=>{n.activeLoader&&n.activeLoader.load()},h=()=>{if(n.activeLoader){n.activeLoader.abort();return}r(W.INIT),s("load-abort")},g=(x,_)=>{if(n.processingAborted){n.processingAborted=!1;return}if(r(W.PROCESSING),o=null,!(n.file instanceof Blob)){b.on("load",()=>{g(x,_)});return}x.on("load",M=>{n.transferId=null,n.serverFileReference=M}),x.on("transfer",M=>{n.transferId=M}),x.on("load-perceived",M=>{n.activeProcessor=null,n.transferId=null,n.serverFileReference=M,r(W.PROCESSING_COMPLETE),s("process-complete",M)}),x.on("start",()=>{s("process-start")}),x.on("error",M=>{n.activeProcessor=null,r(W.PROCESSING_ERROR),s("process-error",M)}),x.on("abort",M=>{n.activeProcessor=null,n.serverFileReference=M,r(W.IDLE),s("process-abort"),o&&o()}),x.on("progress",M=>{s("process-progress",M)});let P=M=>{n.archived||x.process(M,{...l})},O=console.error;_(n.file,P,O),n.activeProcessor=x},I=()=>{n.processingAborted=!1,r(W.PROCESSING_QUEUED)},E=()=>new Promise(x=>{if(!n.activeProcessor){n.processingAborted=!0,r(W.IDLE),s("process-abort"),x();return}o=()=>{x()},n.activeProcessor.abort()}),T=(x,_)=>new Promise((P,O)=>{let M=n.serverFileReference!==null?n.serverFileReference:n.transferId;if(M===null){P();return}x(M,()=>{n.serverFileReference=null,n.transferId=null,P()},C=>{if(!_){P();return}r(W.PROCESSING_REVERT_ERROR),s("process-revert-error"),O(C)}),r(W.IDLE),s("process-revert")}),v=(x,_,P)=>{let O=x.split("."),M=O[0],C=O.pop(),S=l;O.forEach(F=>S=S[F]),JSON.stringify(S[C])!==JSON.stringify(_)&&(S[C]=_,s("metadata-update",{key:M,value:l[M],silent:P}))},b={id:{get:()=>a},origin:{get:()=>e,set:x=>e=x},serverId:{get:()=>n.serverFileReference},transferId:{get:()=>n.transferId},status:{get:()=>n.status},filename:{get:()=>n.file.name},filenameWithoutExtension:{get:()=>Dn(n.file.name)},fileExtension:{get:p},fileType:{get:c},fileSize:{get:d},file:{get:m},relativePath:{get:()=>n.file._relativePath},source:{get:()=>n.source},getMetadata:x=>Fn(x?l[x]:l),setMetadata:(x,_,P)=>{if(ce(x)){let O=x;return Object.keys(O).forEach(M=>{v(M,O[M],_)}),x}return v(x,_,P),_},extend:(x,_)=>w[x]=_,abortLoad:h,retryLoad:f,requestProcessing:I,abortProcessing:E,load:u,process:g,revert:T,...pi(),freeze:()=>n.frozen=!0,release:()=>n.released=!0,released:{get:()=>n.released},archive:()=>n.archived=!0,archived:{get:()=>n.archived},setFile:x=>n.file=x},w=We(b);return w},Ss=(e,t)=>Be(t)?0:fe(t)?e.findIndex(i=>i.id===t):-1,Ha=(e,t)=>{let i=Ss(e,t);if(!(i<0))return e[i]||null},ja=(e,t,i,a,n,o)=>{let l=Ze(null,e,{method:"GET",responseType:"blob"});return l.onload=r=>{let s=r.getAllResponseHeaders(),p=Xi(s).name||Ft(e);t(ie("load",r.status,ht(r.response,p),s))},l.onerror=r=>{i(ie("error",r.status,r.statusText,r.getAllResponseHeaders()))},l.onheaders=r=>{o(ie("headers",r.status,null,r.getAllResponseHeaders()))},l.ontimeout=Ke(i),l.onprogress=a,l.onabort=n,l},Ya=e=>(e.indexOf("//")===0&&(e=location.protocol+e),e.toLowerCase().replace("blob:","").replace(/([a-z])?:\/\//,"$1").split("/")[0]),Ls=e=>(e.indexOf(":")>-1||e.indexOf("//")>-1)&&Ya(location.href)!==Ya(e),Kt=e=>(...t)=>Xe(e)?e(...t):e,As=e=>!Je(e.file),Si=(e,t)=>{clearTimeout(t.listUpdateTimeout),t.listUpdateTimeout=setTimeout(()=>{e("DID_UPDATE_ITEMS",{items:Me(t.items)})},0)},qa=(e,...t)=>new Promise(i=>{if(!e)return i(!0);let a=e(...t);if(a==null)return i(!0);if(typeof a=="boolean")return i(a);typeof a.then=="function"&&a.then(i)}),Li=(e,t)=>{e.items.sort((i,a)=>t(ge(i),ge(a)))},ye=(e,t)=>({query:i,success:a=()=>{},failure:n=()=>{},...o}={})=>{let l=Qe(e.items,i);if(!l){n({error:ie("error",0,"Item not found"),file:null});return}t(l,a,n,o||{})},Ms=(e,t,i)=>({ABORT_ALL:()=>{Me(i.items).forEach(a=>{a.freeze(),a.abortLoad(),a.abortProcessing()})},DID_SET_FILES:({value:a=[]})=>{let n=a.map(l=>({source:l.source?l.source:l,options:l.options})),o=Me(i.items);o.forEach(l=>{n.find(r=>r.source===l.source||r.source===l.file)||e("REMOVE_ITEM",{query:l,remove:!1})}),o=Me(i.items),n.forEach((l,r)=>{o.find(s=>s.source===l.source||s.file===l.source)||e("ADD_ITEM",{...l,interactionMethod:_e.NONE,index:r})})},DID_UPDATE_ITEM_METADATA:({id:a,action:n,change:o})=>{o.silent||(clearTimeout(i.itemUpdateTimeout),i.itemUpdateTimeout=setTimeout(()=>{let l=Ha(i.items,a);if(!t("IS_ASYNC")){Ae("SHOULD_PREPARE_OUTPUT",!1,{item:l,query:t,action:n,change:o}).then(c=>{let d=t("GET_BEFORE_PREPARE_FILE");d&&(c=d(l,c)),c&&e("REQUEST_PREPARE_OUTPUT",{query:a,item:l,success:m=>{e("DID_PREPARE_OUTPUT",{id:a,file:m})}},!0)});return}l.origin===re.LOCAL&&e("DID_LOAD_ITEM",{id:l.id,error:null,serverFileReference:l.source});let r=()=>{setTimeout(()=>{e("REQUEST_ITEM_PROCESSING",{query:a})},32)},s=c=>{l.revert(Mt(i.options.server.url,i.options.server.revert),t("GET_FORCE_REVERT")).then(c?r:()=>{}).catch(()=>{})},p=c=>{l.abortProcessing().then(c?r:()=>{})};if(l.status===W.PROCESSING_COMPLETE)return s(i.options.instantUpload);if(l.status===W.PROCESSING)return p(i.options.instantUpload);i.options.instantUpload&&r()},0))},MOVE_ITEM:({query:a,index:n})=>{let o=Qe(i.items,a);if(!o)return;let l=i.items.indexOf(o);n=Ln(n,0,i.items.length-1),l!==n&&i.items.splice(n,0,i.items.splice(l,1)[0])},SORT:({compare:a})=>{Li(i,a),e("DID_SORT_ITEMS",{items:t("GET_ACTIVE_ITEMS")})},ADD_ITEMS:({items:a,index:n,interactionMethod:o,success:l=()=>{},failure:r=()=>{}})=>{let s=n;if(n===-1||typeof n>"u"){let u=t("GET_ITEM_INSERT_LOCATION"),f=t("GET_TOTAL_ITEMS");s=u==="before"?0:f}let p=t("GET_IGNORED_FILES"),c=u=>Je(u)?!p.includes(u.name.toLowerCase()):!Be(u),m=a.filter(c).map(u=>new Promise((f,h)=>{e("ADD_ITEM",{interactionMethod:o,source:u.source||u,success:f,failure:h,index:s++,options:u.options||{}})}));Promise.all(m).then(l).catch(r)},ADD_ITEM:({source:a,index:n=-1,interactionMethod:o,success:l=()=>{},failure:r=()=>{},options:s={}})=>{if(Be(a)){r({error:ie("error",0,"No source"),file:null});return}if(Je(a)&&i.options.ignoredFiles.includes(a.name.toLowerCase()))return;if(!ls(i)){if(i.options.allowMultiple||!i.options.allowMultiple&&!i.options.allowReplace){let E=ie("warning",0,"Max files");e("DID_THROW_MAX_FILES",{source:a,error:E}),r({error:E,file:null});return}let I=Me(i.items)[0];if(I.status===W.PROCESSING_COMPLETE||I.status===W.PROCESSING_REVERT_ERROR){let E=t("GET_FORCE_REVERT");if(I.revert(Mt(i.options.server.url,i.options.server.revert),E).then(()=>{E&&e("ADD_ITEM",{source:a,index:n,interactionMethod:o,success:l,failure:r,options:s})}).catch(()=>{}),E)return}e("REMOVE_ITEM",{query:I.id})}let p=s.type==="local"?re.LOCAL:s.type==="limbo"?re.LIMBO:re.INPUT,c=ws(p,p===re.INPUT?null:a,s.file);Object.keys(s.metadata||{}).forEach(I=>{c.setMetadata(I,s.metadata[I])}),tt("DID_CREATE_ITEM",c,{query:t,dispatch:e});let d=t("GET_ITEM_INSERT_LOCATION");i.options.itemInsertLocationFreedom||(n=d==="before"?-1:i.items.length),ss(i.items,c,n),Xe(d)&&a&&Li(i,d);let m=c.id;c.on("init",()=>{e("DID_INIT_ITEM",{id:m})}),c.on("load-init",()=>{e("DID_START_ITEM_LOAD",{id:m})}),c.on("load-meta",()=>{e("DID_UPDATE_ITEM_META",{id:m})}),c.on("load-progress",I=>{e("DID_UPDATE_ITEM_LOAD_PROGRESS",{id:m,progress:I})}),c.on("load-request-error",I=>{let E=Kt(i.options.labelFileLoadError)(I);if(I.code>=400&&I.code<500){e("DID_THROW_ITEM_INVALID",{id:m,error:I,status:{main:E,sub:`${I.code} (${I.body})`}}),r({error:I,file:ge(c)});return}e("DID_THROW_ITEM_LOAD_ERROR",{id:m,error:I,status:{main:E,sub:i.options.labelTapToRetry}})}),c.on("load-file-error",I=>{e("DID_THROW_ITEM_INVALID",{id:m,error:I.status,status:I.status}),r({error:I.status,file:ge(c)})}),c.on("load-abort",()=>{e("REMOVE_ITEM",{query:m})}),c.on("load-skip",()=>{c.on("metadata-update",I=>{Je(c.file)&&e("DID_UPDATE_ITEM_METADATA",{id:m,change:I})}),e("COMPLETE_LOAD_ITEM",{query:m,item:c,data:{source:a,success:l}})}),c.on("load",()=>{let I=E=>{if(!E){e("REMOVE_ITEM",{query:m});return}c.on("metadata-update",T=>{e("DID_UPDATE_ITEM_METADATA",{id:m,change:T})}),Ae("SHOULD_PREPARE_OUTPUT",!1,{item:c,query:t}).then(T=>{let v=t("GET_BEFORE_PREPARE_FILE");v&&(T=v(c,T));let y=()=>{e("COMPLETE_LOAD_ITEM",{query:m,item:c,data:{source:a,success:l}}),Si(e,i)};if(T){e("REQUEST_PREPARE_OUTPUT",{query:m,item:c,success:b=>{e("DID_PREPARE_OUTPUT",{id:m,file:b}),y()}},!0);return}y()})};Ae("DID_LOAD_ITEM",c,{query:t,dispatch:e}).then(()=>{qa(t("GET_BEFORE_ADD_FILE"),ge(c)).then(I)}).catch(E=>{if(!E||!E.error||!E.status)return I(!1);e("DID_THROW_ITEM_INVALID",{id:m,error:E.error,status:E.status})})}),c.on("process-start",()=>{e("DID_START_ITEM_PROCESSING",{id:m})}),c.on("process-progress",I=>{e("DID_UPDATE_ITEM_PROCESS_PROGRESS",{id:m,progress:I})}),c.on("process-error",I=>{e("DID_THROW_ITEM_PROCESSING_ERROR",{id:m,error:I,status:{main:Kt(i.options.labelFileProcessingError)(I),sub:i.options.labelTapToRetry}})}),c.on("process-revert-error",I=>{e("DID_THROW_ITEM_PROCESSING_REVERT_ERROR",{id:m,error:I,status:{main:Kt(i.options.labelFileProcessingRevertError)(I),sub:i.options.labelTapToRetry}})}),c.on("process-complete",I=>{e("DID_COMPLETE_ITEM_PROCESSING",{id:m,error:null,serverFileReference:I}),e("DID_DEFINE_VALUE",{id:m,value:I})}),c.on("process-abort",()=>{e("DID_ABORT_ITEM_PROCESSING",{id:m})}),c.on("process-revert",()=>{e("DID_REVERT_ITEM_PROCESSING",{id:m}),e("DID_DEFINE_VALUE",{id:m,value:null})}),e("DID_ADD_ITEM",{id:m,index:n,interactionMethod:o}),Si(e,i);let{url:u,load:f,restore:h,fetch:g}=i.options.server||{};c.load(a,Ts(p===re.INPUT?fe(a)&&Ls(a)&&g?wi(u,g):ja:p===re.LIMBO?wi(u,h):wi(u,f)),(I,E,T)=>{Ae("LOAD_FILE",I,{query:t}).then(E).catch(T)})},REQUEST_PREPARE_OUTPUT:({item:a,success:n,failure:o=()=>{}})=>{let l={error:ie("error",0,"Item not found"),file:null};if(a.archived)return o(l);Ae("PREPARE_OUTPUT",a.file,{query:t,item:a}).then(r=>{Ae("COMPLETE_PREPARE_OUTPUT",r,{query:t,item:a}).then(s=>{if(a.archived)return o(l);n(s)})})},COMPLETE_LOAD_ITEM:({item:a,data:n})=>{let{success:o,source:l}=n,r=t("GET_ITEM_INSERT_LOCATION");if(Xe(r)&&l&&Li(i,r),e("DID_LOAD_ITEM",{id:a.id,error:null,serverFileReference:a.origin===re.INPUT?null:l}),o(ge(a)),a.origin===re.LOCAL){e("DID_LOAD_LOCAL_ITEM",{id:a.id});return}if(a.origin===re.LIMBO){e("DID_COMPLETE_ITEM_PROCESSING",{id:a.id,error:null,serverFileReference:l}),e("DID_DEFINE_VALUE",{id:a.id,value:a.serverId||l});return}t("IS_ASYNC")&&i.options.instantUpload&&e("REQUEST_ITEM_PROCESSING",{query:a.id})},RETRY_ITEM_LOAD:ye(i,a=>{a.retryLoad()}),REQUEST_ITEM_PREPARE:ye(i,(a,n,o)=>{e("REQUEST_PREPARE_OUTPUT",{query:a.id,item:a,success:l=>{e("DID_PREPARE_OUTPUT",{id:a.id,file:l}),n({file:a,output:l})},failure:o},!0)}),REQUEST_ITEM_PROCESSING:ye(i,(a,n,o)=>{if(!(a.status===W.IDLE||a.status===W.PROCESSING_ERROR)){let r=()=>e("REQUEST_ITEM_PROCESSING",{query:a,success:n,failure:o}),s=()=>document.hidden?r():setTimeout(r,32);a.status===W.PROCESSING_COMPLETE||a.status===W.PROCESSING_REVERT_ERROR?a.revert(Mt(i.options.server.url,i.options.server.revert),t("GET_FORCE_REVERT")).then(s).catch(()=>{}):a.status===W.PROCESSING&&a.abortProcessing().then(s);return}a.status!==W.PROCESSING_QUEUED&&(a.requestProcessing(),e("DID_REQUEST_ITEM_PROCESSING",{id:a.id}),e("PROCESS_ITEM",{query:a,success:n,failure:o},!0))}),PROCESS_ITEM:ye(i,(a,n,o)=>{let l=t("GET_MAX_PARALLEL_UPLOADS");if(t("GET_ITEMS_BY_STATUS",W.PROCESSING).length===l){i.processingQueue.push({id:a.id,success:n,failure:o});return}if(a.status===W.PROCESSING)return;let s=()=>{let c=i.processingQueue.shift();if(!c)return;let{id:d,success:m,failure:u}=c,f=Qe(i.items,d);if(!f||f.archived){s();return}e("PROCESS_ITEM",{query:d,success:m,failure:u},!0)};a.onOnce("process-complete",()=>{n(ge(a)),s();let c=i.options.server;if(i.options.instantUpload&&a.origin===re.LOCAL&&Xe(c.remove)){let u=()=>{};a.origin=re.LIMBO,i.options.server.remove(a.source,u,u)}t("GET_ITEMS_BY_STATUS",W.PROCESSING_COMPLETE).length===i.items.length&&e("DID_COMPLETE_ITEM_PROCESSING_ALL")}),a.onOnce("process-error",c=>{o({error:c,file:ge(a)}),s()});let p=i.options;a.process(_s(xs(p.server.url,p.server.process,p.name,{chunkTransferId:a.transferId,chunkServer:p.server.patch,chunkUploads:p.chunkUploads,chunkForce:p.chunkForce,chunkSize:p.chunkSize,chunkRetryDelays:p.chunkRetryDelays}),{allowMinimumUploadDuration:t("GET_ALLOW_MINIMUM_UPLOAD_DURATION")}),(c,d,m)=>{Ae("PREPARE_OUTPUT",c,{query:t,item:a}).then(u=>{e("DID_PREPARE_OUTPUT",{id:a.id,file:u}),d(u)}).catch(m)})}),RETRY_ITEM_PROCESSING:ye(i,a=>{e("REQUEST_ITEM_PROCESSING",{query:a})}),REQUEST_REMOVE_ITEM:ye(i,a=>{qa(t("GET_BEFORE_REMOVE_FILE"),ge(a)).then(n=>{n&&e("REMOVE_ITEM",{query:a})})}),RELEASE_ITEM:ye(i,a=>{a.release()}),REMOVE_ITEM:ye(i,(a,n,o,l)=>{let r=()=>{let p=a.id;Ha(i.items,p).archive(),e("DID_REMOVE_ITEM",{error:null,id:p,item:a}),Si(e,i),n(ge(a))},s=i.options.server;a.origin===re.LOCAL&&s&&Xe(s.remove)&&l.remove!==!1?(e("DID_START_ITEM_REMOVE",{id:a.id}),s.remove(a.source,()=>r(),p=>{e("DID_THROW_ITEM_REMOVE_ERROR",{id:a.id,error:ie("error",0,p,null),status:{main:Kt(i.options.labelFileRemoveError)(p),sub:i.options.labelTapToRetry}})})):((l.revert&&a.origin!==re.LOCAL&&a.serverId!==null||i.options.chunkUploads&&a.file.size>i.options.chunkSize||i.options.chunkUploads&&i.options.chunkForce)&&a.revert(Mt(i.options.server.url,i.options.server.revert),t("GET_FORCE_REVERT")),r())}),ABORT_ITEM_LOAD:ye(i,a=>{a.abortLoad()}),ABORT_ITEM_PROCESSING:ye(i,a=>{if(a.serverId){e("REVERT_ITEM_PROCESSING",{id:a.id});return}a.abortProcessing().then(()=>{i.options.instantUpload&&e("REMOVE_ITEM",{query:a.id})})}),REQUEST_REVERT_ITEM_PROCESSING:ye(i,a=>{if(!i.options.instantUpload){e("REVERT_ITEM_PROCESSING",{query:a});return}let n=r=>{r&&e("REVERT_ITEM_PROCESSING",{query:a})},o=t("GET_BEFORE_REMOVE_FILE");if(!o)return n(!0);let l=o(ge(a));if(l==null)return n(!0);if(typeof l=="boolean")return n(l);typeof l.then=="function"&&l.then(n)}),REVERT_ITEM_PROCESSING:ye(i,a=>{a.revert(Mt(i.options.server.url,i.options.server.revert),t("GET_FORCE_REVERT")).then(()=>{(i.options.instantUpload||As(a))&&e("REMOVE_ITEM",{query:a.id})}).catch(()=>{})}),SET_OPTIONS:({options:a})=>{let n=Object.keys(a),o=Os.filter(r=>n.includes(r));[...o,...Object.keys(a).filter(r=>!o.includes(r))].forEach(r=>{e(`SET_${di(r,"_").toUpperCase()}`,{value:a[r]})})}}),Os=["server"],Qi=e=>e,ke=e=>document.createElement(e),ae=(e,t)=>{let i=e.childNodes[0];i?t!==i.nodeValue&&(i.nodeValue=t):(i=document.createTextNode(t),e.appendChild(i))},$a=(e,t,i,a)=>{let n=(a%360-90)*Math.PI/180;return{x:e+i*Math.cos(n),y:t+i*Math.sin(n)}},Ps=(e,t,i,a,n,o)=>{let l=$a(e,t,i,n),r=$a(e,t,i,a);return["M",l.x,l.y,"A",i,i,0,o,0,r.x,r.y].join(" ")},Ds=(e,t,i,a,n)=>{let o=1;return n>a&&n-a<=.5&&(o=0),a>n&&a-n>=.5&&(o=0),Ps(e,t,i,Math.min(.9999,a)*360,Math.min(.9999,n)*360,o)},Fs=({root:e,props:t})=>{t.spin=!1,t.progress=0,t.opacity=0;let i=ni("svg");e.ref.path=ni("path",{"stroke-width":2,"stroke-linecap":"round"}),i.appendChild(e.ref.path),e.ref.svg=i,e.appendChild(i)},zs=({root:e,props:t})=>{if(t.opacity===0)return;t.align&&(e.element.dataset.align=t.align);let i=parseInt(se(e.ref.path,"stroke-width"),10),a=e.rect.element.width*.5,n=0,o=0;t.spin?(n=0,o=.5):(n=0,o=t.progress);let l=Ds(a,a,a-i,n,o);se(e.ref.path,"d",l),se(e.ref.path,"stroke-opacity",t.spin||t.progress>0?1:0)},Xa=ne({tag:"div",name:"progress-indicator",ignoreRectUpdate:!0,ignoreRect:!0,create:Fs,write:zs,mixins:{apis:["progress","spin","align"],styles:["opacity"],animations:{opacity:{type:"tween",duration:500},progress:{type:"spring",stiffness:.95,damping:.65,mass:10}}}}),Cs=({root:e,props:t})=>{e.element.innerHTML=(t.icon||"")+`${t.label}`,t.isDisabled=!1},Ns=({root:e,props:t})=>{let{isDisabled:i}=t,a=e.query("GET_DISABLED")||t.opacity===0;a&&!i?(t.isDisabled=!0,se(e.element,"disabled","disabled")):!a&&i&&(t.isDisabled=!1,e.element.removeAttribute("disabled"))},zn=ne({tag:"button",attributes:{type:"button"},ignoreRect:!0,ignoreRectUpdate:!0,name:"file-action-button",mixins:{apis:["label"],styles:["translateX","translateY","scaleX","scaleY","opacity"],animations:{scaleX:"spring",scaleY:"spring",translateX:"spring",translateY:"spring",opacity:{type:"tween",duration:250}},listeners:!0},create:Cs,write:Ns}),Cn=(e,t=".",i=1e3,a={})=>{let{labelBytes:n="bytes",labelKilobytes:o="KB",labelMegabytes:l="MB",labelGigabytes:r="GB"}=a;e=Math.round(Math.abs(e));let s=i,p=i*i,c=i*i*i;return ee.toFixed(t).split(".").filter(a=>a!=="0").join(i),Bs=({root:e,props:t})=>{let i=ke("span");i.className="filepond--file-info-main",se(i,"aria-hidden","true"),e.appendChild(i),e.ref.fileName=i;let a=ke("span");a.className="filepond--file-info-sub",e.appendChild(a),e.ref.fileSize=a,ae(a,e.query("GET_LABEL_FILE_WAITING_FOR_SIZE")),ae(i,Qi(e.query("GET_ITEM_NAME",t.id)))},Fi=({root:e,props:t})=>{ae(e.ref.fileSize,Cn(e.query("GET_ITEM_SIZE",t.id),".",e.query("GET_FILE_SIZE_BASE"),e.query("GET_FILE_SIZE_LABELS",e.query))),ae(e.ref.fileName,Qi(e.query("GET_ITEM_NAME",t.id)))},Za=({root:e,props:t})=>{if(gt(e.query("GET_ITEM_SIZE",t.id))){Fi({root:e,props:t});return}ae(e.ref.fileSize,e.query("GET_LABEL_FILE_SIZE_NOT_AVAILABLE"))},ks=ne({name:"file-info",ignoreRect:!0,ignoreRectUpdate:!0,write:he({DID_LOAD_ITEM:Fi,DID_UPDATE_ITEM_META:Fi,DID_THROW_ITEM_LOAD_ERROR:Za,DID_THROW_ITEM_INVALID:Za}),didCreateView:e=>{tt("CREATE_VIEW",{...e,view:e})},create:Bs,mixins:{styles:["translateX","translateY"],animations:{translateX:"spring",translateY:"spring"}}}),Nn=e=>Math.round(e*100),Vs=({root:e})=>{let t=ke("span");t.className="filepond--file-status-main",e.appendChild(t),e.ref.main=t;let i=ke("span");i.className="filepond--file-status-sub",e.appendChild(i),e.ref.sub=i,Bn({root:e,action:{progress:null}})},Bn=({root:e,action:t})=>{let i=t.progress===null?e.query("GET_LABEL_FILE_LOADING"):`${e.query("GET_LABEL_FILE_LOADING")} ${Nn(t.progress)}%`;ae(e.ref.main,i),ae(e.ref.sub,e.query("GET_LABEL_TAP_TO_CANCEL"))},Gs=({root:e,action:t})=>{let i=t.progress===null?e.query("GET_LABEL_FILE_PROCESSING"):`${e.query("GET_LABEL_FILE_PROCESSING")} ${Nn(t.progress)}%`;ae(e.ref.main,i),ae(e.ref.sub,e.query("GET_LABEL_TAP_TO_CANCEL"))},Us=({root:e})=>{ae(e.ref.main,e.query("GET_LABEL_FILE_PROCESSING")),ae(e.ref.sub,e.query("GET_LABEL_TAP_TO_CANCEL"))},Ws=({root:e})=>{ae(e.ref.main,e.query("GET_LABEL_FILE_PROCESSING_ABORTED")),ae(e.ref.sub,e.query("GET_LABEL_TAP_TO_RETRY"))},Hs=({root:e})=>{ae(e.ref.main,e.query("GET_LABEL_FILE_PROCESSING_COMPLETE")),ae(e.ref.sub,e.query("GET_LABEL_TAP_TO_UNDO"))},Ka=({root:e})=>{ae(e.ref.main,""),ae(e.ref.sub,"")},Ot=({root:e,action:t})=>{ae(e.ref.main,t.status.main),ae(e.ref.sub,t.status.sub)},js=ne({name:"file-status",ignoreRect:!0,ignoreRectUpdate:!0,write:he({DID_LOAD_ITEM:Ka,DID_REVERT_ITEM_PROCESSING:Ka,DID_REQUEST_ITEM_PROCESSING:Us,DID_ABORT_ITEM_PROCESSING:Ws,DID_COMPLETE_ITEM_PROCESSING:Hs,DID_UPDATE_ITEM_PROCESS_PROGRESS:Gs,DID_UPDATE_ITEM_LOAD_PROGRESS:Bn,DID_THROW_ITEM_LOAD_ERROR:Ot,DID_THROW_ITEM_INVALID:Ot,DID_THROW_ITEM_PROCESSING_ERROR:Ot,DID_THROW_ITEM_PROCESSING_REVERT_ERROR:Ot,DID_THROW_ITEM_REMOVE_ERROR:Ot}),didCreateView:e=>{tt("CREATE_VIEW",{...e,view:e})},create:Vs,mixins:{styles:["translateX","translateY","opacity"],animations:{opacity:{type:"tween",duration:250},translateX:"spring",translateY:"spring"}}}),zi={AbortItemLoad:{label:"GET_LABEL_BUTTON_ABORT_ITEM_LOAD",action:"ABORT_ITEM_LOAD",className:"filepond--action-abort-item-load",align:"LOAD_INDICATOR_POSITION"},RetryItemLoad:{label:"GET_LABEL_BUTTON_RETRY_ITEM_LOAD",action:"RETRY_ITEM_LOAD",icon:"GET_ICON_RETRY",className:"filepond--action-retry-item-load",align:"BUTTON_PROCESS_ITEM_POSITION"},RemoveItem:{label:"GET_LABEL_BUTTON_REMOVE_ITEM",action:"REQUEST_REMOVE_ITEM",icon:"GET_ICON_REMOVE",className:"filepond--action-remove-item",align:"BUTTON_REMOVE_ITEM_POSITION"},ProcessItem:{label:"GET_LABEL_BUTTON_PROCESS_ITEM",action:"REQUEST_ITEM_PROCESSING",icon:"GET_ICON_PROCESS",className:"filepond--action-process-item",align:"BUTTON_PROCESS_ITEM_POSITION"},AbortItemProcessing:{label:"GET_LABEL_BUTTON_ABORT_ITEM_PROCESSING",action:"ABORT_ITEM_PROCESSING",className:"filepond--action-abort-item-processing",align:"BUTTON_PROCESS_ITEM_POSITION"},RetryItemProcessing:{label:"GET_LABEL_BUTTON_RETRY_ITEM_PROCESSING",action:"RETRY_ITEM_PROCESSING",icon:"GET_ICON_RETRY",className:"filepond--action-retry-item-processing",align:"BUTTON_PROCESS_ITEM_POSITION"},RevertItemProcessing:{label:"GET_LABEL_BUTTON_UNDO_ITEM_PROCESSING",action:"REQUEST_REVERT_ITEM_PROCESSING",icon:"GET_ICON_UNDO",className:"filepond--action-revert-item-processing",align:"BUTTON_PROCESS_ITEM_POSITION"}},Ci=[];te(zi,e=>{Ci.push(e)});var Ie=e=>{if(Ni(e)==="right")return 0;let t=e.ref.buttonRemoveItem.rect.element;return t.hidden?null:t.width+t.left},Ys=e=>e.ref.buttonAbortItemLoad.rect.element.width,Jt=e=>Math.floor(e.ref.buttonRemoveItem.rect.element.height/4),qs=e=>Math.floor(e.ref.buttonRemoveItem.rect.element.left/2),$s=e=>e.query("GET_STYLE_LOAD_INDICATOR_POSITION"),Xs=e=>e.query("GET_STYLE_PROGRESS_INDICATOR_POSITION"),Ni=e=>e.query("GET_STYLE_BUTTON_REMOVE_ITEM_POSITION"),Qs={buttonAbortItemLoad:{opacity:0},buttonRetryItemLoad:{opacity:0},buttonRemoveItem:{opacity:0},buttonProcessItem:{opacity:0},buttonAbortItemProcessing:{opacity:0},buttonRetryItemProcessing:{opacity:0},buttonRevertItemProcessing:{opacity:0},loadProgressIndicator:{opacity:0,align:$s},processProgressIndicator:{opacity:0,align:Xs},processingCompleteIndicator:{opacity:0,scaleX:.75,scaleY:.75},info:{translateX:0,translateY:0,opacity:0},status:{translateX:0,translateY:0,opacity:0}},Ja={buttonRemoveItem:{opacity:1},buttonProcessItem:{opacity:1},info:{translateX:Ie},status:{translateX:Ie}},Ai={buttonAbortItemProcessing:{opacity:1},processProgressIndicator:{opacity:1},status:{opacity:1}},pt={DID_THROW_ITEM_INVALID:{buttonRemoveItem:{opacity:1},info:{translateX:Ie},status:{translateX:Ie,opacity:1}},DID_START_ITEM_LOAD:{buttonAbortItemLoad:{opacity:1},loadProgressIndicator:{opacity:1},status:{opacity:1}},DID_THROW_ITEM_LOAD_ERROR:{buttonRetryItemLoad:{opacity:1},buttonRemoveItem:{opacity:1},info:{translateX:Ie},status:{opacity:1}},DID_START_ITEM_REMOVE:{processProgressIndicator:{opacity:1,align:Ni},info:{translateX:Ie},status:{opacity:0}},DID_THROW_ITEM_REMOVE_ERROR:{processProgressIndicator:{opacity:0,align:Ni},buttonRemoveItem:{opacity:1},info:{translateX:Ie},status:{opacity:1,translateX:Ie}},DID_LOAD_ITEM:Ja,DID_LOAD_LOCAL_ITEM:{buttonRemoveItem:{opacity:1},info:{translateX:Ie},status:{translateX:Ie}},DID_START_ITEM_PROCESSING:Ai,DID_REQUEST_ITEM_PROCESSING:Ai,DID_UPDATE_ITEM_PROCESS_PROGRESS:Ai,DID_COMPLETE_ITEM_PROCESSING:{buttonRevertItemProcessing:{opacity:1},info:{opacity:1},status:{opacity:1}},DID_THROW_ITEM_PROCESSING_ERROR:{buttonRemoveItem:{opacity:1},buttonRetryItemProcessing:{opacity:1},status:{opacity:1},info:{translateX:Ie}},DID_THROW_ITEM_PROCESSING_REVERT_ERROR:{buttonRevertItemProcessing:{opacity:1},status:{opacity:1},info:{opacity:1}},DID_ABORT_ITEM_PROCESSING:{buttonRemoveItem:{opacity:1},buttonProcessItem:{opacity:1},info:{translateX:Ie},status:{opacity:1}},DID_REVERT_ITEM_PROCESSING:Ja},Zs=ne({create:({root:e})=>{e.element.innerHTML=e.query("GET_ICON_DONE")},name:"processing-complete-indicator",ignoreRect:!0,mixins:{styles:["scaleX","scaleY","opacity"],animations:{scaleX:"spring",scaleY:"spring",opacity:{type:"tween",duration:250}}}}),Ks=({root:e,props:t})=>{let i=Object.keys(zi).reduce((f,h)=>(f[h]={...zi[h]},f),{}),{id:a}=t,n=e.query("GET_ALLOW_REVERT"),o=e.query("GET_ALLOW_REMOVE"),l=e.query("GET_ALLOW_PROCESS"),r=e.query("GET_INSTANT_UPLOAD"),s=e.query("IS_ASYNC"),p=e.query("GET_STYLE_BUTTON_REMOVE_ITEM_ALIGN"),c;s?l&&!n?c=f=>!/RevertItemProcessing/.test(f):!l&&n?c=f=>!/ProcessItem|RetryItemProcessing|AbortItemProcessing/.test(f):!l&&!n&&(c=f=>!/Process/.test(f)):c=f=>!/Process/.test(f);let d=c?Ci.filter(c):Ci.concat();if(r&&n&&(i.RevertItemProcessing.label="GET_LABEL_BUTTON_REMOVE_ITEM",i.RevertItemProcessing.icon="GET_ICON_REMOVE"),s&&!n){let f=pt.DID_COMPLETE_ITEM_PROCESSING;f.info.translateX=qs,f.info.translateY=Jt,f.status.translateY=Jt,f.processingCompleteIndicator={opacity:1,scaleX:1,scaleY:1}}if(s&&!l&&(["DID_START_ITEM_PROCESSING","DID_REQUEST_ITEM_PROCESSING","DID_UPDATE_ITEM_PROCESS_PROGRESS","DID_THROW_ITEM_PROCESSING_ERROR"].forEach(f=>{pt[f].status.translateY=Jt}),pt.DID_THROW_ITEM_PROCESSING_ERROR.status.translateX=Ys),p&&n){i.RevertItemProcessing.align="BUTTON_REMOVE_ITEM_POSITION";let f=pt.DID_COMPLETE_ITEM_PROCESSING;f.info.translateX=Ie,f.status.translateY=Jt,f.processingCompleteIndicator={opacity:1,scaleX:1,scaleY:1}}o||(i.RemoveItem.disabled=!0),te(i,(f,h)=>{let g=e.createChildView(zn,{label:e.query(h.label),icon:e.query(h.icon),opacity:0});d.includes(f)&&e.appendChildView(g),h.disabled&&(g.element.setAttribute("disabled","disabled"),g.element.setAttribute("hidden","hidden")),g.element.dataset.align=e.query(`GET_STYLE_${h.align}`),g.element.classList.add(h.className),g.on("click",I=>{I.stopPropagation(),!h.disabled&&e.dispatch(h.action,{query:a})}),e.ref[`button${f}`]=g}),e.ref.processingCompleteIndicator=e.appendChildView(e.createChildView(Zs)),e.ref.processingCompleteIndicator.element.dataset.align=e.query("GET_STYLE_BUTTON_PROCESS_ITEM_POSITION"),e.ref.info=e.appendChildView(e.createChildView(ks,{id:a})),e.ref.status=e.appendChildView(e.createChildView(js,{id:a}));let m=e.appendChildView(e.createChildView(Xa,{opacity:0,align:e.query("GET_STYLE_LOAD_INDICATOR_POSITION")}));m.element.classList.add("filepond--load-indicator"),e.ref.loadProgressIndicator=m;let u=e.appendChildView(e.createChildView(Xa,{opacity:0,align:e.query("GET_STYLE_PROGRESS_INDICATOR_POSITION")}));u.element.classList.add("filepond--process-indicator"),e.ref.processProgressIndicator=u,e.ref.activeStyles=[]},Js=({root:e,actions:t,props:i})=>{ec({root:e,actions:t,props:i});let a=t.concat().filter(n=>/^DID_/.test(n.type)).reverse().find(n=>pt[n.type]);if(a){e.ref.activeStyles=[];let n=pt[a.type];te(Qs,(o,l)=>{let r=e.ref[o];te(l,(s,p)=>{let c=n[o]&&typeof n[o][s]<"u"?n[o][s]:p;e.ref.activeStyles.push({control:r,key:s,value:c})})})}e.ref.activeStyles.forEach(({control:n,key:o,value:l})=>{n[o]=typeof l=="function"?l(e):l})},ec=he({DID_SET_LABEL_BUTTON_ABORT_ITEM_PROCESSING:({root:e,action:t})=>{e.ref.buttonAbortItemProcessing.label=t.value},DID_SET_LABEL_BUTTON_ABORT_ITEM_LOAD:({root:e,action:t})=>{e.ref.buttonAbortItemLoad.label=t.value},DID_SET_LABEL_BUTTON_ABORT_ITEM_REMOVAL:({root:e,action:t})=>{e.ref.buttonAbortItemRemoval.label=t.value},DID_REQUEST_ITEM_PROCESSING:({root:e})=>{e.ref.processProgressIndicator.spin=!0,e.ref.processProgressIndicator.progress=0},DID_START_ITEM_LOAD:({root:e})=>{e.ref.loadProgressIndicator.spin=!0,e.ref.loadProgressIndicator.progress=0},DID_START_ITEM_REMOVE:({root:e})=>{e.ref.processProgressIndicator.spin=!0,e.ref.processProgressIndicator.progress=0},DID_UPDATE_ITEM_LOAD_PROGRESS:({root:e,action:t})=>{e.ref.loadProgressIndicator.spin=!1,e.ref.loadProgressIndicator.progress=t.progress},DID_UPDATE_ITEM_PROCESS_PROGRESS:({root:e,action:t})=>{e.ref.processProgressIndicator.spin=!1,e.ref.processProgressIndicator.progress=t.progress}}),tc=ne({create:Ks,write:Js,didCreateView:e=>{tt("CREATE_VIEW",{...e,view:e})},name:"file"}),ic=({root:e,props:t})=>{e.ref.fileName=ke("legend"),e.appendChild(e.ref.fileName),e.ref.file=e.appendChildView(e.createChildView(tc,{id:t.id})),e.ref.data=!1},ac=({root:e,props:t})=>{ae(e.ref.fileName,Qi(e.query("GET_ITEM_NAME",t.id)))},nc=ne({create:ic,ignoreRect:!0,write:he({DID_LOAD_ITEM:ac}),didCreateView:e=>{tt("CREATE_VIEW",{...e,view:e})},tag:"fieldset",name:"file-wrapper"}),en={type:"spring",damping:.6,mass:7},oc=({root:e,props:t})=>{[{name:"top"},{name:"center",props:{translateY:null,scaleY:null},mixins:{animations:{scaleY:en},styles:["translateY","scaleY"]}},{name:"bottom",props:{translateY:null},mixins:{animations:{translateY:en},styles:["translateY"]}}].forEach(i=>{lc(e,i,t.name)}),e.element.classList.add(`filepond--${t.name}`),e.ref.scalable=null},lc=(e,t,i)=>{let a=ne({name:`panel-${t.name} filepond--${i}`,mixins:t.mixins,ignoreRectUpdate:!0}),n=e.createChildView(a,t.props);e.ref[t.name]=e.appendChildView(n)},rc=({root:e,props:t})=>{if((e.ref.scalable===null||t.scalable!==e.ref.scalable)&&(e.ref.scalable=Tn(t.scalable)?t.scalable:!0,e.element.dataset.scalable=e.ref.scalable),!t.height)return;let i=e.ref.top.rect.element,a=e.ref.bottom.rect.element,n=Math.max(i.height+a.height,t.height);e.ref.center.translateY=i.height,e.ref.center.scaleY=(n-i.height-a.height)/100,e.ref.bottom.translateY=n-a.height},kn=ne({name:"panel",read:({root:e,props:t})=>t.heightCurrent=e.ref.bottom.translateY,write:rc,create:oc,ignoreRect:!0,mixins:{apis:["height","heightCurrent","scalable"]}}),sc=e=>{let t=e.map(a=>a.id),i;return{setIndex:a=>{i=a},getIndex:()=>i,getItemIndex:a=>t.indexOf(a.id)}},tn={type:"spring",stiffness:.75,damping:.45,mass:10},an="spring",nn={DID_START_ITEM_LOAD:"busy",DID_UPDATE_ITEM_LOAD_PROGRESS:"loading",DID_THROW_ITEM_INVALID:"load-invalid",DID_THROW_ITEM_LOAD_ERROR:"load-error",DID_LOAD_ITEM:"idle",DID_THROW_ITEM_REMOVE_ERROR:"remove-error",DID_START_ITEM_REMOVE:"busy",DID_START_ITEM_PROCESSING:"busy processing",DID_REQUEST_ITEM_PROCESSING:"busy processing",DID_UPDATE_ITEM_PROCESS_PROGRESS:"processing",DID_COMPLETE_ITEM_PROCESSING:"processing-complete",DID_THROW_ITEM_PROCESSING_ERROR:"processing-error",DID_THROW_ITEM_PROCESSING_REVERT_ERROR:"processing-revert-error",DID_ABORT_ITEM_PROCESSING:"cancelled",DID_REVERT_ITEM_PROCESSING:"idle"},cc=({root:e,props:t})=>{if(e.ref.handleClick=a=>e.dispatch("DID_ACTIVATE_ITEM",{id:t.id}),e.element.id=`filepond--item-${t.id}`,e.element.addEventListener("click",e.ref.handleClick),e.ref.container=e.appendChildView(e.createChildView(nc,{id:t.id})),e.ref.panel=e.appendChildView(e.createChildView(kn,{name:"item-panel"})),e.ref.panel.height=null,t.markedForRemoval=!1,!e.query("GET_ALLOW_REORDER"))return;e.element.dataset.dragState="idle";let i=a=>{if(!a.isPrimary)return;let n=!1,o={x:a.pageX,y:a.pageY};t.dragOrigin={x:e.translateX,y:e.translateY},t.dragCenter={x:a.offsetX,y:a.offsetY};let l=sc(e.query("GET_ACTIVE_ITEMS"));e.dispatch("DID_GRAB_ITEM",{id:t.id,dragState:l});let r=d=>{if(!d.isPrimary)return;d.stopPropagation(),d.preventDefault(),t.dragOffset={x:d.pageX-o.x,y:d.pageY-o.y},t.dragOffset.x*t.dragOffset.x+t.dragOffset.y*t.dragOffset.y>16&&!n&&(n=!0,e.element.removeEventListener("click",e.ref.handleClick)),e.dispatch("DID_DRAG_ITEM",{id:t.id,dragState:l})},s=d=>{d.isPrimary&&(t.dragOffset={x:d.pageX-o.x,y:d.pageY-o.y},c())},p=()=>{c()},c=()=>{document.removeEventListener("pointercancel",p),document.removeEventListener("pointermove",r),document.removeEventListener("pointerup",s),e.dispatch("DID_DROP_ITEM",{id:t.id,dragState:l}),n&&setTimeout(()=>e.element.addEventListener("click",e.ref.handleClick),0)};document.addEventListener("pointercancel",p),document.addEventListener("pointermove",r),document.addEventListener("pointerup",s)};e.element.addEventListener("pointerdown",i)},dc=he({DID_UPDATE_PANEL_HEIGHT:({root:e,action:t})=>{e.height=t.height}}),pc=he({DID_GRAB_ITEM:({root:e,props:t})=>{t.dragOrigin={x:e.translateX,y:e.translateY}},DID_DRAG_ITEM:({root:e})=>{e.element.dataset.dragState="drag"},DID_DROP_ITEM:({root:e,props:t})=>{t.dragOffset=null,t.dragOrigin=null,e.element.dataset.dragState="drop"}},({root:e,actions:t,props:i,shouldOptimize:a})=>{e.element.dataset.dragState==="drop"&&e.scaleX<=1&&(e.element.dataset.dragState="idle");let n=t.concat().filter(l=>/^DID_/.test(l.type)).reverse().find(l=>nn[l.type]);n&&n.type!==i.currentState&&(i.currentState=n.type,e.element.dataset.filepondItemState=nn[i.currentState]||"");let o=e.query("GET_ITEM_PANEL_ASPECT_RATIO")||e.query("GET_PANEL_ASPECT_RATIO");o?a||(e.height=e.rect.element.width*o):(dc({root:e,actions:t,props:i}),!e.height&&e.ref.container.rect.element.height>0&&(e.height=e.ref.container.rect.element.height)),a&&(e.ref.panel.height=null),e.ref.panel.height=e.height}),mc=ne({create:cc,write:pc,destroy:({root:e,props:t})=>{e.element.removeEventListener("click",e.ref.handleClick),e.dispatch("RELEASE_ITEM",{query:t.id})},tag:"li",name:"item",mixins:{apis:["id","interactionMethod","markedForRemoval","spawnDate","dragCenter","dragOrigin","dragOffset"],styles:["translateX","translateY","scaleX","scaleY","opacity","height"],animations:{scaleX:an,scaleY:an,translateX:tn,translateY:tn,opacity:{type:"tween",duration:150}}}}),Zi=(e,t)=>Math.max(1,Math.floor((e+1)/t)),Ki=(e,t,i)=>{if(!i)return;let a=e.rect.element.width,n=t.length,o=null;if(n===0||i.topE){if(i.left{se(e.element,"role","list"),e.ref.lastItemSpanwDate=Date.now()},fc=({root:e,action:t})=>{let{id:i,index:a,interactionMethod:n}=t;e.ref.addIndex=a;let o=Date.now(),l=o,r=1;if(n!==_e.NONE){r=0;let s=e.query("GET_ITEM_INSERT_INTERVAL"),p=o-e.ref.lastItemSpanwDate;l=p{e.dragOffset?(e.translateX=null,e.translateY=null,e.translateX=e.dragOrigin.x+e.dragOffset.x,e.translateY=e.dragOrigin.y+e.dragOffset.y,e.scaleX=1.025,e.scaleY=1.025):(e.translateX=t,e.translateY=i,Date.now()>e.spawnDate&&(e.opacity===0&&hc(e,t,i,a,n),e.scaleX=1,e.scaleY=1,e.opacity=1))},hc=(e,t,i,a,n)=>{e.interactionMethod===_e.NONE?(e.translateX=null,e.translateX=t,e.translateY=null,e.translateY=i):e.interactionMethod===_e.DROP?(e.translateX=null,e.translateX=t-a*20,e.translateY=null,e.translateY=i-n*10,e.scaleX=.8,e.scaleY=.8):e.interactionMethod===_e.BROWSE?(e.translateY=null,e.translateY=i-30):e.interactionMethod===_e.API&&(e.translateX=null,e.translateX=t-30,e.translateY=null)},gc=({root:e,action:t})=>{let{id:i}=t,a=e.childViews.find(n=>n.id===i);a&&(a.scaleX=.9,a.scaleY=.9,a.opacity=0,a.markedForRemoval=!0)},Mi=e=>e.rect.element.height+e.rect.element.marginBottom*.5+e.rect.element.marginTop*.5,Ec=e=>e.rect.element.width+e.rect.element.marginLeft*.5+e.rect.element.marginRight*.5,bc=({root:e,action:t})=>{let{id:i,dragState:a}=t,n=e.query("GET_ITEM",{id:i}),o=e.childViews.find(g=>g.id===i),l=e.childViews.length,r=a.getItemIndex(n);if(!o)return;let s={x:o.dragOrigin.x+o.dragOffset.x+o.dragCenter.x,y:o.dragOrigin.y+o.dragOffset.y+o.dragCenter.y},p=Mi(o),c=Ec(o),d=Math.floor(e.rect.outer.width/c);d>l&&(d=l);let m=Math.floor(l/d+1);ei.setHeight=p*m,ei.setWidth=c*d;var u={y:Math.floor(s.y/p),x:Math.floor(s.x/c),getGridIndex:function(){return s.y>ei.getHeight||s.y<0||s.x>ei.getWidth||s.x<0?r:this.y*d+this.x},getColIndex:function(){let I=e.query("GET_ACTIVE_ITEMS"),E=e.childViews.filter(O=>O.rect.element.height),T=I.map(O=>E.find(M=>M.id===O.id)),v=T.findIndex(O=>O===o),y=Mi(o),b=T.length,w=b,x=0,_=0,P=0;for(let O=0;OO){if(s.y1?u.getGridIndex():u.getColIndex();e.dispatch("MOVE_ITEM",{query:o,index:f});let h=a.getIndex();if(h===void 0||h!==f){if(a.setIndex(f),h===void 0)return;e.dispatch("DID_REORDER_ITEMS",{items:e.query("GET_ACTIVE_ITEMS"),origin:r,target:f})}},Tc=he({DID_ADD_ITEM:fc,DID_REMOVE_ITEM:gc,DID_DRAG_ITEM:bc}),Ic=({root:e,props:t,actions:i,shouldOptimize:a})=>{Tc({root:e,props:t,actions:i});let{dragCoordinates:n}=t,o=e.rect.element.width,l=e.childViews.filter(T=>T.rect.element.height),r=e.query("GET_ACTIVE_ITEMS").map(T=>l.find(v=>v.id===T.id)).filter(T=>T),s=n?Ki(e,r,n):null,p=e.ref.addIndex||null;e.ref.addIndex=null;let c=0,d=0,m=0;if(r.length===0)return;let u=r[0].rect.element,f=u.marginTop+u.marginBottom,h=u.marginLeft+u.marginRight,g=u.width+h,I=u.height+f,E=Zi(o,g);if(E===1){let T=0,v=0;r.forEach((y,b)=>{if(s){let _=b-s;_===-2?v=-f*.25:_===-1?v=-f*.75:_===0?v=f*.75:_===1?v=f*.25:v=0}a&&(y.translateX=null,y.translateY=null),y.markedForRemoval||on(y,0,T+v);let x=(y.rect.element.height+f)*(y.markedForRemoval?y.opacity:1);T+=x})}else{let T=0,v=0;r.forEach((y,b)=>{b===s&&(c=1),b===p&&(m+=1),y.markedForRemoval&&y.opacity<.5&&(d-=1);let w=b+m+c+d,x=w%E,_=Math.floor(w/E),P=x*g,O=_*I,M=Math.sign(P-T),C=Math.sign(O-v);T=P,v=O,!y.markedForRemoval&&(a&&(y.translateX=null,y.translateY=null),on(y,P,O,M,C))})}},vc=(e,t)=>t.filter(i=>i.data&&i.data.id?e.id===i.data.id:!0),xc=ne({create:uc,write:Ic,tag:"ul",name:"list",didWriteView:({root:e})=>{e.childViews.filter(t=>t.markedForRemoval&&t.opacity===0&&t.resting).forEach(t=>{t._destroy(),e.removeChildView(t)})},filterFrameActionsForChild:vc,mixins:{apis:["dragCoordinates"]}}),yc=({root:e,props:t})=>{e.ref.list=e.appendChildView(e.createChildView(xc)),t.dragCoordinates=null,t.overflowing=!1},_c=({root:e,props:t,action:i})=>{e.query("GET_ITEM_INSERT_LOCATION_FREEDOM")&&(t.dragCoordinates={left:i.position.scopeLeft-e.ref.list.rect.element.left,top:i.position.scopeTop-(e.rect.outer.top+e.rect.element.marginTop+e.rect.element.scrollTop)})},Rc=({props:e})=>{e.dragCoordinates=null},wc=he({DID_DRAG:_c,DID_END_DRAG:Rc}),Sc=({root:e,props:t,actions:i})=>{if(wc({root:e,props:t,actions:i}),e.ref.list.dragCoordinates=t.dragCoordinates,t.overflowing&&!t.overflow&&(t.overflowing=!1,e.element.dataset.state="",e.height=null),t.overflow){let a=Math.round(t.overflow);a!==e.height&&(t.overflowing=!0,e.element.dataset.state="overflow",e.height=a)}},Lc=ne({create:yc,write:Sc,name:"list-scroller",mixins:{apis:["overflow","dragCoordinates"],styles:["height","translateY"],animations:{translateY:"spring"}}}),Oe=(e,t,i,a="")=>{i?se(e,t,a):e.removeAttribute(t)},Ac=e=>{if(!(!e||e.value==="")){try{e.value=""}catch{}if(e.value){let t=ke("form"),i=e.parentNode,a=e.nextSibling;t.appendChild(e),t.reset(),a?i.insertBefore(e,a):i.appendChild(e)}}},Mc=({root:e,props:t})=>{e.element.id=`filepond--browser-${t.id}`,se(e.element,"name",e.query("GET_NAME")),se(e.element,"aria-controls",`filepond--assistant-${t.id}`),se(e.element,"aria-labelledby",`filepond--drop-label-${t.id}`),Vn({root:e,action:{value:e.query("GET_ACCEPTED_FILE_TYPES")}}),Gn({root:e,action:{value:e.query("GET_ALLOW_MULTIPLE")}}),Un({root:e,action:{value:e.query("GET_ALLOW_DIRECTORIES_ONLY")}}),Bi({root:e}),Wn({root:e,action:{value:e.query("GET_REQUIRED")}}),Hn({root:e,action:{value:e.query("GET_CAPTURE_METHOD")}}),e.ref.handleChange=i=>{if(!e.element.value)return;let a=Array.from(e.element.files).map(n=>(n._relativePath=n.webkitRelativePath,n));setTimeout(()=>{t.onload(a),Ac(e.element)},250)},e.element.addEventListener("change",e.ref.handleChange)},Vn=({root:e,action:t})=>{e.query("GET_ALLOW_SYNC_ACCEPT_ATTRIBUTE")&&Oe(e.element,"accept",!!t.value,t.value?t.value.join(","):"")},Gn=({root:e,action:t})=>{Oe(e.element,"multiple",t.value)},Un=({root:e,action:t})=>{Oe(e.element,"webkitdirectory",t.value)},Bi=({root:e})=>{let t=e.query("GET_DISABLED"),i=e.query("GET_ALLOW_BROWSE"),a=t||!i;Oe(e.element,"disabled",a)},Wn=({root:e,action:t})=>{t.value?e.query("GET_TOTAL_ITEMS")===0&&Oe(e.element,"required",!0):Oe(e.element,"required",!1)},Hn=({root:e,action:t})=>{Oe(e.element,"capture",!!t.value,t.value===!0?"":t.value)},ln=({root:e})=>{let{element:t}=e;e.query("GET_TOTAL_ITEMS")>0?(Oe(t,"required",!1),Oe(t,"name",!1)):(Oe(t,"name",!0,e.query("GET_NAME")),e.query("GET_CHECK_VALIDITY")&&t.setCustomValidity(""),e.query("GET_REQUIRED")&&Oe(t,"required",!0))},Oc=({root:e})=>{e.query("GET_CHECK_VALIDITY")&&e.element.setCustomValidity(e.query("GET_LABEL_INVALID_FIELD"))},Pc=ne({tag:"input",name:"browser",ignoreRect:!0,ignoreRectUpdate:!0,attributes:{type:"file"},create:Mc,destroy:({root:e})=>{e.element.removeEventListener("change",e.ref.handleChange)},write:he({DID_LOAD_ITEM:ln,DID_REMOVE_ITEM:ln,DID_THROW_ITEM_INVALID:Oc,DID_SET_DISABLED:Bi,DID_SET_ALLOW_BROWSE:Bi,DID_SET_ALLOW_DIRECTORIES_ONLY:Un,DID_SET_ALLOW_MULTIPLE:Gn,DID_SET_ACCEPTED_FILE_TYPES:Vn,DID_SET_CAPTURE_METHOD:Hn,DID_SET_REQUIRED:Wn})}),rn={ENTER:13,SPACE:32},Dc=({root:e,props:t})=>{let i=ke("label");se(i,"for",`filepond--browser-${t.id}`),se(i,"id",`filepond--drop-label-${t.id}`),e.ref.handleKeyDown=a=>{(a.keyCode===rn.ENTER||a.keyCode===rn.SPACE)&&(a.preventDefault(),e.ref.label.click())},e.ref.handleClick=a=>{a.target===i||i.contains(a.target)||e.ref.label.click()},i.addEventListener("keydown",e.ref.handleKeyDown),e.element.addEventListener("click",e.ref.handleClick),jn(i,t.caption),e.appendChild(i),e.ref.label=i},jn=(e,t)=>{e.innerHTML=t;let i=e.querySelector(".filepond--label-action");return i&&se(i,"tabindex","0"),t},Fc=ne({name:"drop-label",ignoreRect:!0,create:Dc,destroy:({root:e})=>{e.ref.label.addEventListener("keydown",e.ref.handleKeyDown),e.element.removeEventListener("click",e.ref.handleClick)},write:he({DID_SET_LABEL_IDLE:({root:e,action:t})=>{jn(e.ref.label,t.value)}}),mixins:{styles:["opacity","translateX","translateY"],animations:{opacity:{type:"tween",duration:150},translateX:"spring",translateY:"spring"}}}),zc=ne({name:"drip-blob",ignoreRect:!0,mixins:{styles:["translateX","translateY","scaleX","scaleY","opacity"],animations:{scaleX:"spring",scaleY:"spring",translateX:"spring",translateY:"spring",opacity:{type:"tween",duration:250}}}}),Cc=({root:e})=>{let t=e.rect.element.width*.5,i=e.rect.element.height*.5;e.ref.blob=e.appendChildView(e.createChildView(zc,{opacity:0,scaleX:2.5,scaleY:2.5,translateX:t,translateY:i}))},Nc=({root:e,action:t})=>{if(!e.ref.blob){Cc({root:e});return}e.ref.blob.translateX=t.position.scopeLeft,e.ref.blob.translateY=t.position.scopeTop,e.ref.blob.scaleX=1,e.ref.blob.scaleY=1,e.ref.blob.opacity=1},Bc=({root:e})=>{e.ref.blob&&(e.ref.blob.opacity=0)},kc=({root:e})=>{e.ref.blob&&(e.ref.blob.scaleX=2.5,e.ref.blob.scaleY=2.5,e.ref.blob.opacity=0)},Vc=({root:e,props:t,actions:i})=>{Gc({root:e,props:t,actions:i});let{blob:a}=e.ref;i.length===0&&a&&a.opacity===0&&(e.removeChildView(a),e.ref.blob=null)},Gc=he({DID_DRAG:Nc,DID_DROP:kc,DID_END_DRAG:Bc}),Uc=ne({ignoreRect:!0,ignoreRectUpdate:!0,name:"drip",write:Vc}),Yn=(e,t)=>{try{let i=new DataTransfer;t.forEach(a=>{a instanceof File?i.items.add(a):i.items.add(new File([a],a.name,{type:a.type}))}),e.files=i.files}catch{return!1}return!0},Wc=({root:e})=>e.ref.fields={},ui=(e,t)=>e.ref.fields[t],Ji=e=>{e.query("GET_ACTIVE_ITEMS").forEach(t=>{e.ref.fields[t.id]&&e.element.appendChild(e.ref.fields[t.id])})},sn=({root:e})=>Ji(e),Hc=({root:e,action:t})=>{let n=!(e.query("GET_ITEM",t.id).origin===re.LOCAL)&&e.query("SHOULD_UPDATE_FILE_INPUT"),o=ke("input");o.type=n?"file":"hidden",o.name=e.query("GET_NAME"),e.ref.fields[t.id]=o,Ji(e)},jc=({root:e,action:t})=>{let i=ui(e,t.id);if(!i||(t.serverFileReference!==null&&(i.value=t.serverFileReference),!e.query("SHOULD_UPDATE_FILE_INPUT")))return;let a=e.query("GET_ITEM",t.id);Yn(i,[a.file])},Yc=({root:e,action:t})=>{e.query("SHOULD_UPDATE_FILE_INPUT")&&setTimeout(()=>{let i=ui(e,t.id);i&&Yn(i,[t.file])},0)},qc=({root:e})=>{e.element.disabled=e.query("GET_DISABLED")},$c=({root:e,action:t})=>{let i=ui(e,t.id);i&&(i.parentNode&&i.parentNode.removeChild(i),delete e.ref.fields[t.id])},Xc=({root:e,action:t})=>{let i=ui(e,t.id);i&&(t.value===null?i.removeAttribute("value"):i.type!="file"&&(i.value=t.value),Ji(e))},Qc=he({DID_SET_DISABLED:qc,DID_ADD_ITEM:Hc,DID_LOAD_ITEM:jc,DID_REMOVE_ITEM:$c,DID_DEFINE_VALUE:Xc,DID_PREPARE_OUTPUT:Yc,DID_REORDER_ITEMS:sn,DID_SORT_ITEMS:sn}),Zc=ne({tag:"fieldset",name:"data",create:Wc,write:Qc,ignoreRect:!0}),Kc=e=>"getRootNode"in e?e.getRootNode():document,Jc=["jpg","jpeg","png","gif","bmp","webp","svg","tiff"],ed=["css","csv","html","txt"],td={zip:"zip|compressed",epub:"application/epub+zip"},qn=(e="")=>(e=e.toLowerCase(),Jc.includes(e)?"image/"+(e==="jpg"?"jpeg":e==="svg"?"svg+xml":e):ed.includes(e)?"text/"+e:td[e]||""),ea=e=>new Promise((t,i)=>{let a=cd(e);if(a.length&&!id(e))return t(a);ad(e).then(t)}),id=e=>e.files?e.files.length>0:!1,ad=e=>new Promise((t,i)=>{let a=(e.items?Array.from(e.items):[]).filter(n=>nd(n)).map(n=>od(n));if(!a.length){t(e.files?Array.from(e.files):[]);return}Promise.all(a).then(n=>{let o=[];n.forEach(l=>{o.push.apply(o,l)}),t(o.filter(l=>l).map(l=>(l._relativePath||(l._relativePath=l.webkitRelativePath),l)))}).catch(console.error)}),nd=e=>{if($n(e)){let t=ta(e);if(t)return t.isFile||t.isDirectory}return e.kind==="file"},od=e=>new Promise((t,i)=>{if(sd(e)){ld(ta(e)).then(t).catch(i);return}t([e.getAsFile()])}),ld=e=>new Promise((t,i)=>{let a=[],n=0,o=0,l=()=>{o===0&&n===0&&t(a)},r=s=>{n++;let p=s.createReader(),c=()=>{p.readEntries(d=>{if(d.length===0){n--,l();return}d.forEach(m=>{m.isDirectory?r(m):(o++,m.file(u=>{let f=rd(u);m.fullPath&&(f._relativePath=m.fullPath),a.push(f),o--,l()}))}),c()},i)};c()};r(e)}),rd=e=>{if(e.type.length)return e;let t=e.lastModifiedDate,i=e.name,a=qn(mi(e.name));return a.length&&(e=e.slice(0,e.size,a),e.name=i,e.lastModifiedDate=t),e},sd=e=>$n(e)&&(ta(e)||{}).isDirectory,$n=e=>"webkitGetAsEntry"in e,ta=e=>e.webkitGetAsEntry(),cd=e=>{let t=[];try{if(t=pd(e),t.length)return t;t=dd(e)}catch{}return t},dd=e=>{let t=e.getData("url");return typeof t=="string"&&t.length?[t]:[]},pd=e=>{let t=e.getData("text/html");if(typeof t=="string"&&t.length){let i=t.match(/src\s*=\s*"(.+?)"/);if(i)return[i[1]]}return[]},li=[],et=e=>({pageLeft:e.pageX,pageTop:e.pageY,scopeLeft:e.offsetX||e.layerX,scopeTop:e.offsetY||e.layerY}),md=(e,t,i)=>{let a=ud(t),n={element:e,filterElement:i,state:null,ondrop:()=>{},onenter:()=>{},ondrag:()=>{},onexit:()=>{},onload:()=>{},allowdrop:()=>{}};return n.destroy=a.addListener(n),n},ud=e=>{let t=li.find(a=>a.element===e);if(t)return t;let i=fd(e);return li.push(i),i},fd=e=>{let t=[],i={dragenter:gd,dragover:Ed,dragleave:Td,drop:bd},a={};te(i,(o,l)=>{a[o]=l(e,t),e.addEventListener(o,a[o],!1)});let n={element:e,addListener:o=>(t.push(o),()=>{t.splice(t.indexOf(o),1),t.length===0&&(li.splice(li.indexOf(n),1),te(i,l=>{e.removeEventListener(l,a[l],!1)}))})};return n},hd=(e,t)=>("elementFromPoint"in e||(e=document),e.elementFromPoint(t.x,t.y)),ia=(e,t)=>{let i=Kc(t),a=hd(i,{x:e.pageX-window.pageXOffset,y:e.pageY-window.pageYOffset});return a===t||t.contains(a)},Xn=null,ti=(e,t)=>{try{e.dropEffect=t}catch{}},gd=(e,t)=>i=>{i.preventDefault(),Xn=i.target,t.forEach(a=>{let{element:n,onenter:o}=a;ia(i,n)&&(a.state="enter",o(et(i)))})},Ed=(e,t)=>i=>{i.preventDefault();let a=i.dataTransfer;ea(a).then(n=>{let o=!1;t.some(l=>{let{filterElement:r,element:s,onenter:p,onexit:c,ondrag:d,allowdrop:m}=l;ti(a,"copy");let u=m(n);if(!u){ti(a,"none");return}if(ia(i,s)){if(o=!0,l.state===null){l.state="enter",p(et(i));return}if(l.state="over",r&&!u){ti(a,"none");return}d(et(i))}else r&&!o&&ti(a,"none"),l.state&&(l.state=null,c(et(i)))})})},bd=(e,t)=>i=>{i.preventDefault();let a=i.dataTransfer;ea(a).then(n=>{t.forEach(o=>{let{filterElement:l,element:r,ondrop:s,onexit:p,allowdrop:c}=o;if(o.state=null,!(l&&!ia(i,r))){if(!c(n))return p(et(i));s(et(i),n)}})})},Td=(e,t)=>i=>{Xn===i.target&&t.forEach(a=>{let{onexit:n}=a;a.state=null,n(et(i))})},Id=(e,t,i)=>{e.classList.add("filepond--hopper");let{catchesDropsOnPage:a,requiresDropOnElement:n,filterItems:o=c=>c}=i,l=md(e,a?document.documentElement:e,n),r="",s="";l.allowdrop=c=>t(o(c)),l.ondrop=(c,d)=>{let m=o(d);if(!t(m)){p.ondragend(c);return}s="drag-drop",p.onload(m,c)},l.ondrag=c=>{p.ondrag(c)},l.onenter=c=>{s="drag-over",p.ondragstart(c)},l.onexit=c=>{s="drag-exit",p.ondragend(c)};let p={updateHopperState:()=>{r!==s&&(e.dataset.hopperState=s,r=s)},onload:()=>{},ondragstart:()=>{},ondrag:()=>{},ondragend:()=>{},destroy:()=>{l.destroy()}};return p},ki=!1,mt=[],Qn=e=>{let t=document.activeElement;if(t&&(/textarea|input/i.test(t.nodeName)||t.getAttribute("contenteditable")==="true")){let a=!1,n=t;for(;n!==document.body;){if(n.classList.contains("filepond--root")){a=!0;break}n=n.parentNode}if(!a)return}ea(e.clipboardData).then(a=>{a.length&&mt.forEach(n=>n(a))})},vd=e=>{mt.includes(e)||(mt.push(e),!ki&&(ki=!0,document.addEventListener("paste",Qn)))},xd=e=>{qi(mt,mt.indexOf(e)),mt.length===0&&(document.removeEventListener("paste",Qn),ki=!1)},yd=()=>{let e=i=>{t.onload(i)},t={destroy:()=>{xd(e)},onload:()=>{}};return vd(e),t},_d=({root:e,props:t})=>{e.element.id=`filepond--assistant-${t.id}`,se(e.element,"role","status"),se(e.element,"aria-live","polite"),se(e.element,"aria-relevant","additions")},cn=null,dn=null,Oi=[],fi=(e,t)=>{e.element.textContent=t},Rd=e=>{e.element.textContent=""},Zn=(e,t,i)=>{let a=e.query("GET_TOTAL_ITEMS");fi(e,`${i} ${t}, ${a} ${a===1?e.query("GET_LABEL_FILE_COUNT_SINGULAR"):e.query("GET_LABEL_FILE_COUNT_PLURAL")}`),clearTimeout(dn),dn=setTimeout(()=>{Rd(e)},1500)},Kn=e=>e.element.parentNode.contains(document.activeElement),wd=({root:e,action:t})=>{if(!Kn(e))return;e.element.textContent="";let i=e.query("GET_ITEM",t.id);Oi.push(i.filename),clearTimeout(cn),cn=setTimeout(()=>{Zn(e,Oi.join(", "),e.query("GET_LABEL_FILE_ADDED")),Oi.length=0},750)},Sd=({root:e,action:t})=>{if(!Kn(e))return;let i=t.item;Zn(e,i.filename,e.query("GET_LABEL_FILE_REMOVED"))},Ld=({root:e,action:t})=>{let a=e.query("GET_ITEM",t.id).filename,n=e.query("GET_LABEL_FILE_PROCESSING_COMPLETE");fi(e,`${a} ${n}`)},pn=({root:e,action:t})=>{let a=e.query("GET_ITEM",t.id).filename,n=e.query("GET_LABEL_FILE_PROCESSING_ABORTED");fi(e,`${a} ${n}`)},ii=({root:e,action:t})=>{let a=e.query("GET_ITEM",t.id).filename;fi(e,`${t.status.main} ${a} ${t.status.sub}`)},Ad=ne({create:_d,ignoreRect:!0,ignoreRectUpdate:!0,write:he({DID_LOAD_ITEM:wd,DID_REMOVE_ITEM:Sd,DID_COMPLETE_ITEM_PROCESSING:Ld,DID_ABORT_ITEM_PROCESSING:pn,DID_REVERT_ITEM_PROCESSING:pn,DID_THROW_ITEM_REMOVE_ERROR:ii,DID_THROW_ITEM_LOAD_ERROR:ii,DID_THROW_ITEM_INVALID:ii,DID_THROW_ITEM_PROCESSING_ERROR:ii}),tag:"span",name:"assistant"}),Jn=(e,t="-")=>e.replace(new RegExp(`${t}.`,"g"),i=>i.charAt(1).toUpperCase()),eo=(e,t=16,i=!0)=>{let a=Date.now(),n=null;return(...o)=>{clearTimeout(n);let l=Date.now()-a,r=()=>{a=Date.now(),e(...o)};le.preventDefault(),Od=({root:e,props:t})=>{let i=e.query("GET_ID");i&&(e.element.id=i);let a=e.query("GET_CLASS_NAME");a&&a.split(" ").filter(s=>s.length).forEach(s=>{e.element.classList.add(s)}),e.ref.label=e.appendChildView(e.createChildView(Fc,{...t,translateY:null,caption:e.query("GET_LABEL_IDLE")})),e.ref.list=e.appendChildView(e.createChildView(Lc,{translateY:null})),e.ref.panel=e.appendChildView(e.createChildView(kn,{name:"panel-root"})),e.ref.assistant=e.appendChildView(e.createChildView(Ad,{...t})),e.ref.data=e.appendChildView(e.createChildView(Zc,{...t})),e.ref.measure=ke("div"),e.ref.measure.style.height="100%",e.element.appendChild(e.ref.measure),e.ref.bounds=null,e.query("GET_STYLES").filter(s=>!Be(s.value)).map(({name:s,value:p})=>{e.element.dataset[s]=p}),e.ref.widthPrevious=null,e.ref.widthUpdated=eo(()=>{e.ref.updateHistory=[],e.dispatch("DID_RESIZE_ROOT")},250),e.ref.previousAspectRatio=null,e.ref.updateHistory=[];let n=window.matchMedia("(pointer: fine) and (hover: hover)").matches,o="PointerEvent"in window;e.query("GET_ALLOW_REORDER")&&o&&!n&&(e.element.addEventListener("touchmove",ri,{passive:!1}),e.element.addEventListener("gesturestart",ri));let l=e.query("GET_CREDITS");if(l.length===2){let s=document.createElement("a");s.className="filepond--credits",s.href=l[0],s.tabIndex=-1,s.target="_blank",s.rel="noopener noreferrer",s.textContent=l[1],e.element.appendChild(s),e.ref.credits=s}},Pd=({root:e,props:t,actions:i})=>{if(Nd({root:e,props:t,actions:i}),i.filter(b=>/^DID_SET_STYLE_/.test(b.type)).filter(b=>!Be(b.data.value)).map(({type:b,data:w})=>{let x=Jn(b.substring(8).toLowerCase(),"_");e.element.dataset[x]=w.value,e.invalidateLayout()}),e.rect.element.hidden)return;e.rect.element.width!==e.ref.widthPrevious&&(e.ref.widthPrevious=e.rect.element.width,e.ref.widthUpdated());let a=e.ref.bounds;a||(a=e.ref.bounds=zd(e),e.element.removeChild(e.ref.measure),e.ref.measure=null);let{hopper:n,label:o,list:l,panel:r}=e.ref;n&&n.updateHopperState();let s=e.query("GET_PANEL_ASPECT_RATIO"),p=e.query("GET_ALLOW_MULTIPLE"),c=e.query("GET_TOTAL_ITEMS"),d=p?e.query("GET_MAX_FILES")||Md:1,m=c===d,u=i.find(b=>b.type==="DID_ADD_ITEM");if(m&&u){let b=u.data.interactionMethod;o.opacity=0,p?o.translateY=-40:b===_e.API?o.translateX=40:b===_e.BROWSE?o.translateY=40:o.translateY=30}else m||(o.opacity=1,o.translateX=0,o.translateY=0);let f=Dd(e),h=Fd(e),g=o.rect.element.height,I=!p||m?0:g,E=m?l.rect.element.marginTop:0,T=c===0?0:l.rect.element.marginBottom,v=I+E+h.visual+T,y=I+E+h.bounds+T;if(l.translateY=Math.max(0,I-l.rect.element.marginTop)-f.top,s){let b=e.rect.element.width,w=b*s;s!==e.ref.previousAspectRatio&&(e.ref.previousAspectRatio=s,e.ref.updateHistory=[]);let x=e.ref.updateHistory;x.push(b);let _=2;if(x.length>_*2){let O=x.length,M=O-10,C=0;for(let S=O;S>=M;S--)if(x[S]===x[S-2]&&C++,C>=_)return}r.scalable=!1,r.height=w;let P=w-I-(T-f.bottom)-(m?E:0);h.visual>P?l.overflow=P:l.overflow=null,e.height=w}else if(a.fixedHeight){r.scalable=!1;let b=a.fixedHeight-I-(T-f.bottom)-(m?E:0);h.visual>b?l.overflow=b:l.overflow=null}else if(a.cappedHeight){let b=v>=a.cappedHeight,w=Math.min(a.cappedHeight,v);r.scalable=!0,r.height=b?w:w-f.top-f.bottom;let x=w-I-(T-f.bottom)-(m?E:0);v>a.cappedHeight&&h.visual>x?l.overflow=x:l.overflow=null,e.height=Math.min(a.cappedHeight,y-f.top-f.bottom)}else{let b=c>0?f.top+f.bottom:0;r.scalable=!0,r.height=Math.max(g,v-b),e.height=Math.max(g,y-b)}e.ref.credits&&r.heightCurrent&&(e.ref.credits.style.transform=`translateY(${r.heightCurrent}px)`)},Dd=e=>{let t=e.ref.list.childViews[0].childViews[0];return t?{top:t.rect.element.marginTop,bottom:t.rect.element.marginBottom}:{top:0,bottom:0}},Fd=e=>{let t=0,i=0,a=e.ref.list,n=a.childViews[0],o=n.childViews.filter(E=>E.rect.element.height),l=e.query("GET_ACTIVE_ITEMS").map(E=>o.find(T=>T.id===E.id)).filter(E=>E);if(l.length===0)return{visual:t,bounds:i};let r=n.rect.element.width,s=Ki(n,l,a.dragCoordinates),p=l[0].rect.element,c=p.marginTop+p.marginBottom,d=p.marginLeft+p.marginRight,m=p.width+d,u=p.height+c,f=typeof s<"u"&&s>=0?1:0,h=l.find(E=>E.markedForRemoval&&E.opacity<.45)?-1:0,g=l.length+f+h,I=Zi(r,m);return I===1?l.forEach(E=>{let T=E.rect.element.height+c;i+=T,t+=T*E.opacity}):(i=Math.ceil(g/I)*u,t=i),{visual:t,bounds:i}},zd=e=>{let t=e.ref.measureHeight||null;return{cappedHeight:parseInt(e.style.maxHeight,10)||null,fixedHeight:t===0?null:t}},aa=(e,t)=>{let i=e.query("GET_ALLOW_REPLACE"),a=e.query("GET_ALLOW_MULTIPLE"),n=e.query("GET_TOTAL_ITEMS"),o=e.query("GET_MAX_FILES"),l=t.length;return!a&&l>1?(e.dispatch("DID_THROW_MAX_FILES",{source:t,error:ie("warning",0,"Max files")}),!0):(o=a?o:1,!a&&i?!1:gt(o)&&n+l>o?(e.dispatch("DID_THROW_MAX_FILES",{source:t,error:ie("warning",0,"Max files")}),!0):!1)},Cd=(e,t,i)=>{let a=e.childViews[0];return Ki(a,t,{left:i.scopeLeft-a.rect.element.left,top:i.scopeTop-(e.rect.outer.top+e.rect.element.marginTop+e.rect.element.scrollTop)})},mn=e=>{let t=e.query("GET_ALLOW_DROP"),i=e.query("GET_DISABLED"),a=t&&!i;if(a&&!e.ref.hopper){let n=Id(e.element,o=>{let l=e.query("GET_BEFORE_DROP_FILE")||(()=>!0);return e.query("GET_DROP_VALIDATION")?o.every(s=>tt("ALLOW_HOPPER_ITEM",s,{query:e.query}).every(p=>p===!0)&&l(s)):!0},{filterItems:o=>{let l=e.query("GET_IGNORED_FILES");return o.filter(r=>Je(r)?!l.includes(r.name.toLowerCase()):!0)},catchesDropsOnPage:e.query("GET_DROP_ON_PAGE"),requiresDropOnElement:e.query("GET_DROP_ON_ELEMENT")});n.onload=(o,l)=>{let s=e.ref.list.childViews[0].childViews.filter(c=>c.rect.element.height),p=e.query("GET_ACTIVE_ITEMS").map(c=>s.find(d=>d.id===c.id)).filter(c=>c);Ae("ADD_ITEMS",o,{dispatch:e.dispatch}).then(c=>{if(aa(e,c))return!1;e.dispatch("ADD_ITEMS",{items:c,index:Cd(e.ref.list,p,l),interactionMethod:_e.DROP})}),e.dispatch("DID_DROP",{position:l}),e.dispatch("DID_END_DRAG",{position:l})},n.ondragstart=o=>{e.dispatch("DID_START_DRAG",{position:o})},n.ondrag=eo(o=>{e.dispatch("DID_DRAG",{position:o})}),n.ondragend=o=>{e.dispatch("DID_END_DRAG",{position:o})},e.ref.hopper=n,e.ref.drip=e.appendChildView(e.createChildView(Uc))}else!a&&e.ref.hopper&&(e.ref.hopper.destroy(),e.ref.hopper=null,e.removeChildView(e.ref.drip))},un=(e,t)=>{let i=e.query("GET_ALLOW_BROWSE"),a=e.query("GET_DISABLED"),n=i&&!a;n&&!e.ref.browser?e.ref.browser=e.appendChildView(e.createChildView(Pc,{...t,onload:o=>{Ae("ADD_ITEMS",o,{dispatch:e.dispatch}).then(l=>{if(aa(e,l))return!1;e.dispatch("ADD_ITEMS",{items:l,index:-1,interactionMethod:_e.BROWSE})})}}),0):!n&&e.ref.browser&&(e.removeChildView(e.ref.browser),e.ref.browser=null)},fn=e=>{let t=e.query("GET_ALLOW_PASTE"),i=e.query("GET_DISABLED"),a=t&&!i;a&&!e.ref.paster?(e.ref.paster=yd(),e.ref.paster.onload=n=>{Ae("ADD_ITEMS",n,{dispatch:e.dispatch}).then(o=>{if(aa(e,o))return!1;e.dispatch("ADD_ITEMS",{items:o,index:-1,interactionMethod:_e.PASTE})})}):!a&&e.ref.paster&&(e.ref.paster.destroy(),e.ref.paster=null)},Nd=he({DID_SET_ALLOW_BROWSE:({root:e,props:t})=>{un(e,t)},DID_SET_ALLOW_DROP:({root:e})=>{mn(e)},DID_SET_ALLOW_PASTE:({root:e})=>{fn(e)},DID_SET_DISABLED:({root:e,props:t})=>{mn(e),fn(e),un(e,t),e.query("GET_DISABLED")?e.element.dataset.disabled="disabled":e.element.removeAttribute("data-disabled")}}),Bd=ne({name:"root",read:({root:e})=>{e.ref.measure&&(e.ref.measureHeight=e.ref.measure.offsetHeight)},create:Od,write:Pd,destroy:({root:e})=>{e.ref.paster&&e.ref.paster.destroy(),e.ref.hopper&&e.ref.hopper.destroy(),e.element.removeEventListener("touchmove",ri),e.element.removeEventListener("gesturestart",ri)},mixins:{styles:["height"]}}),kd=(e={})=>{let t=null,i=oi(),a=ir(Gr(i),[os,Hr(i)],[Ms,Wr(i)]);a.dispatch("SET_OPTIONS",{options:e});let n=()=>{document.hidden||a.dispatch("KICK")};document.addEventListener("visibilitychange",n);let o=null,l=!1,r=!1,s=null,p=null,c=()=>{l||(l=!0),clearTimeout(o),o=setTimeout(()=>{l=!1,s=null,p=null,r&&(r=!1,a.dispatch("DID_STOP_RESIZE"))},500)};window.addEventListener("resize",c);let d=Bd(a,{id:Yi()}),m=!1,u=!1,f={_read:()=>{l&&(p=window.innerWidth,s||(s=p),!r&&p!==s&&(a.dispatch("DID_START_RESIZE"),r=!0)),u&&m&&(m=d.element.offsetParent===null),!m&&(d._read(),u=d.rect.element.hidden)},_write:R=>{let L=a.processActionQueue().filter(z=>!/^SET_/.test(z.type));m&&!L.length||(E(L),m=d._write(R,L,r),qr(a.query("GET_ITEMS")),m&&a.processDispatchQueue())}},h=R=>L=>{let z={type:R};if(!L)return z;if(L.hasOwnProperty("error")&&(z.error=L.error?{...L.error}:null),L.status&&(z.status={...L.status}),L.file&&(z.output=L.file),L.source)z.file=L.source;else if(L.item||L.id){let D=L.item?L.item:a.query("GET_ITEM",L.id);z.file=D?ge(D):null}return L.items&&(z.items=L.items.map(ge)),/progress/.test(R)&&(z.progress=L.progress),L.hasOwnProperty("origin")&&L.hasOwnProperty("target")&&(z.origin=L.origin,z.target=L.target),z},g={DID_DESTROY:h("destroy"),DID_INIT:h("init"),DID_THROW_MAX_FILES:h("warning"),DID_INIT_ITEM:h("initfile"),DID_START_ITEM_LOAD:h("addfilestart"),DID_UPDATE_ITEM_LOAD_PROGRESS:h("addfileprogress"),DID_LOAD_ITEM:h("addfile"),DID_THROW_ITEM_INVALID:[h("error"),h("addfile")],DID_THROW_ITEM_LOAD_ERROR:[h("error"),h("addfile")],DID_THROW_ITEM_REMOVE_ERROR:[h("error"),h("removefile")],DID_PREPARE_OUTPUT:h("preparefile"),DID_START_ITEM_PROCESSING:h("processfilestart"),DID_UPDATE_ITEM_PROCESS_PROGRESS:h("processfileprogress"),DID_ABORT_ITEM_PROCESSING:h("processfileabort"),DID_COMPLETE_ITEM_PROCESSING:h("processfile"),DID_COMPLETE_ITEM_PROCESSING_ALL:h("processfiles"),DID_REVERT_ITEM_PROCESSING:h("processfilerevert"),DID_THROW_ITEM_PROCESSING_ERROR:[h("error"),h("processfile")],DID_REMOVE_ITEM:h("removefile"),DID_UPDATE_ITEMS:h("updatefiles"),DID_ACTIVATE_ITEM:h("activatefile"),DID_REORDER_ITEMS:h("reorderfiles")},I=R=>{let L={pond:F,...R};delete L.type,d.element.dispatchEvent(new CustomEvent(`FilePond:${R.type}`,{detail:L,bubbles:!0,cancelable:!0,composed:!0}));let z=[];R.hasOwnProperty("error")&&z.push(R.error),R.hasOwnProperty("file")&&z.push(R.file);let D=["type","error","file"];Object.keys(R).filter(B=>!D.includes(B)).forEach(B=>z.push(R[B])),F.fire(R.type,...z);let k=a.query(`GET_ON${R.type.toUpperCase()}`);k&&k(...z)},E=R=>{R.length&&R.filter(L=>g[L.type]).forEach(L=>{let z=g[L.type];(Array.isArray(z)?z:[z]).forEach(D=>{L.type==="DID_INIT_ITEM"?I(D(L.data)):setTimeout(()=>{I(D(L.data))},0)})})},T=R=>a.dispatch("SET_OPTIONS",{options:R}),v=R=>a.query("GET_ACTIVE_ITEM",R),y=R=>new Promise((L,z)=>{a.dispatch("REQUEST_ITEM_PREPARE",{query:R,success:D=>{L(D)},failure:D=>{z(D)}})}),b=(R,L={})=>new Promise((z,D)=>{_([{source:R,options:L}],{index:L.index}).then(k=>z(k&&k[0])).catch(D)}),w=R=>R.file&&R.id,x=(R,L)=>(typeof R=="object"&&!w(R)&&!L&&(L=R,R=void 0),a.dispatch("REMOVE_ITEM",{...L,query:R}),a.query("GET_ACTIVE_ITEM",R)===null),_=(...R)=>new Promise((L,z)=>{let D=[],k={};if(si(R[0]))D.push.apply(D,R[0]),Object.assign(k,R[1]||{});else{let B=R[R.length-1];typeof B=="object"&&!(B instanceof Blob)&&Object.assign(k,R.pop()),D.push(...R)}a.dispatch("ADD_ITEMS",{items:D,index:k.index,interactionMethod:_e.API,success:L,failure:z})}),P=()=>a.query("GET_ACTIVE_ITEMS"),O=R=>new Promise((L,z)=>{a.dispatch("REQUEST_ITEM_PROCESSING",{query:R,success:D=>{L(D)},failure:D=>{z(D)}})}),M=(...R)=>{let L=Array.isArray(R[0])?R[0]:R,z=L.length?L:P();return Promise.all(z.map(y))},C=(...R)=>{let L=Array.isArray(R[0])?R[0]:R;if(!L.length){let z=P().filter(D=>!(D.status===W.IDLE&&D.origin===re.LOCAL)&&D.status!==W.PROCESSING&&D.status!==W.PROCESSING_COMPLETE&&D.status!==W.PROCESSING_REVERT_ERROR);return Promise.all(z.map(O))}return Promise.all(L.map(O))},S=(...R)=>{let L=Array.isArray(R[0])?R[0]:R,z;typeof L[L.length-1]=="object"?z=L.pop():Array.isArray(R[0])&&(z=R[1]);let D=P();return L.length?L.map(B=>$e(B)?D[B]?D[B].id:null:B).filter(B=>B).map(B=>x(B,z)):Promise.all(D.map(B=>x(B,z)))},F={...pi(),...f,...Ur(a,i),setOptions:T,addFile:b,addFiles:_,getFile:v,processFile:O,prepareFile:y,removeFile:x,moveFile:(R,L)=>a.dispatch("MOVE_ITEM",{query:R,index:L}),getFiles:P,processFiles:C,removeFiles:S,prepareFiles:M,sort:R=>a.dispatch("SORT",{compare:R}),browse:()=>{var R=d.element.querySelector("input[type=file]");R&&R.click()},destroy:()=>{F.fire("destroy",d.element),a.dispatch("ABORT_ALL"),d._destroy(),window.removeEventListener("resize",c),document.removeEventListener("visibilitychange",n),a.dispatch("DID_DESTROY")},insertBefore:R=>Ca(d.element,R),insertAfter:R=>Na(d.element,R),appendTo:R=>R.appendChild(d.element),replaceElement:R=>{Ca(d.element,R),R.parentNode.removeChild(R),t=R},restoreElement:()=>{t&&(Na(t,d.element),d.element.parentNode.removeChild(d.element),t=null)},isAttachedTo:R=>d.element===R||t===R,element:{get:()=>d.element},status:{get:()=>a.query("GET_STATUS")}};return a.dispatch("DID_INIT"),We(F)},to=(e={})=>{let t={};return te(oi(),(a,n)=>{t[a]=n[0]}),kd({...t,...e})},Vd=e=>e.charAt(0).toLowerCase()+e.slice(1),Gd=e=>Jn(e.replace(/^data-/,"")),io=(e,t)=>{te(t,(i,a)=>{te(e,(n,o)=>{let l=new RegExp(i);if(!l.test(n)||(delete e[n],a===!1))return;if(fe(a)){e[a]=o;return}let s=a.group;ce(a)&&!e[s]&&(e[s]={}),e[s][Vd(n.replace(l,""))]=o}),a.mapping&&io(e[a.group],a.mapping)})},Ud=(e,t={})=>{let i=[];te(e.attributes,n=>{i.push(e.attributes[n])});let a=i.filter(n=>n.name).reduce((n,o)=>{let l=se(e,o.name);return n[Gd(o.name)]=l===o.name?!0:l,n},{});return io(a,t),a},Wd=(e,t={})=>{let i={"^class$":"className","^multiple$":"allowMultiple","^capture$":"captureMethod","^webkitdirectory$":"allowDirectoriesOnly","^server":{group:"server",mapping:{"^process":{group:"process"},"^revert":{group:"revert"},"^fetch":{group:"fetch"},"^restore":{group:"restore"},"^load":{group:"load"}}},"^type$":!1,"^files$":!1};tt("SET_ATTRIBUTE_TO_OPTION_MAP",i);let a={...t},n=Ud(e.nodeName==="FIELDSET"?e.querySelector("input[type=file]"):e,i);Object.keys(n).forEach(l=>{ce(n[l])?(ce(a[l])||(a[l]={}),Object.assign(a[l],n[l])):a[l]=n[l]}),a.files=(t.files||[]).concat(Array.from(e.querySelectorAll("input:not([type=file])")).map(l=>({source:l.value,options:{type:l.dataset.type}})));let o=to(a);return e.files&&Array.from(e.files).forEach(l=>{o.addFile(l)}),o.replaceElement(e),o},Hd=(...e)=>tr(e[0])?Wd(...e):to(...e),jd=["fire","_read","_write"],hn=e=>{let t={};return yn(e,t,jd),t},Yd=(e,t)=>e.replace(/(?:{([a-zA-Z]+)})/g,(i,a)=>t[a]),qd=e=>{let t=new Blob(["(",e.toString(),")()"],{type:"application/javascript"}),i=URL.createObjectURL(t),a=new Worker(i);return{transfer:(n,o)=>{},post:(n,o,l)=>{let r=Yi();a.onmessage=s=>{s.data.id===r&&o(s.data.message)},a.postMessage({id:r,message:n},l)},terminate:()=>{a.terminate(),URL.revokeObjectURL(i)}}},$d=e=>new Promise((t,i)=>{let a=new Image;a.onload=()=>{t(a)},a.onerror=n=>{i(n)},a.src=e}),ao=(e,t)=>{let i=e.slice(0,e.size,e.type);return i.lastModifiedDate=e.lastModifiedDate,i.name=t,i},Xd=e=>ao(e,e.name),gn=[],Qd=e=>{if(gn.includes(e))return;gn.push(e);let t=e({addFilter:Xr,utils:{Type:A,forin:te,isString:fe,isFile:Je,toNaturalFileSize:Cn,replaceInString:Yd,getExtensionFromFilename:mi,getFilenameWithoutExtension:Dn,guesstimateMimeType:qn,getFileFromBlob:ht,getFilenameFromURL:Ft,createRoute:he,createWorker:qd,createView:ne,createItemAPI:ge,loadImage:$d,copyFile:Xd,renameFile:ao,createBlob:Mn,applyFilterChain:Ae,text:ae,getNumericAspectRatioFromString:wn},views:{fileActionButton:zn}});Qr(t.options)},Zd=()=>Object.prototype.toString.call(window.operamini)==="[object OperaMini]",Kd=()=>"Promise"in window,Jd=()=>"slice"in Blob.prototype,ep=()=>"URL"in window&&"createObjectURL"in window.URL,tp=()=>"visibilityState"in document,ip=()=>"performance"in window,ap=()=>"supports"in(window.CSS||{}),np=()=>/MSIE|Trident/.test(window.navigator.userAgent),Vi=(()=>{let e=En()&&!Zd()&&tp()&&Kd()&&Jd()&&ep()&&ip()&&(ap()||np());return()=>e})(),Ue={apps:[]},op="filepond",it=()=>{},no={},Et={},zt={},Gi={},ut=it,ft=it,Ui=it,Wi=it,ve=it,Hi=it,Dt=it;if(Vi()){Sr(()=>{Ue.apps.forEach(i=>i._read())},i=>{Ue.apps.forEach(a=>a._write(i))});let e=()=>{document.dispatchEvent(new CustomEvent("FilePond:loaded",{detail:{supported:Vi,create:ut,destroy:ft,parse:Ui,find:Wi,registerPlugin:ve,setOptions:Dt}})),document.removeEventListener("DOMContentLoaded",e)};document.readyState!=="loading"?setTimeout(()=>e(),0):document.addEventListener("DOMContentLoaded",e);let t=()=>te(oi(),(i,a)=>{Gi[i]=a[1]});no={...Sn},zt={...re},Et={...W},Gi={},t(),ut=(...i)=>{let a=Hd(...i);return a.on("destroy",ft),Ue.apps.push(a),hn(a)},ft=i=>{let a=Ue.apps.findIndex(n=>n.isAttachedTo(i));return a>=0?(Ue.apps.splice(a,1)[0].restoreElement(),!0):!1},Ui=i=>Array.from(i.querySelectorAll(`.${op}`)).filter(o=>!Ue.apps.find(l=>l.isAttachedTo(o))).map(o=>ut(o)),Wi=i=>{let a=Ue.apps.find(n=>n.isAttachedTo(i));return a?hn(a):null},ve=(...i)=>{i.forEach(Qd),t()},Hi=()=>{let i={};return te(oi(),(a,n)=>{i[a]=n[0]}),i},Dt=i=>(ce(i)&&(Ue.apps.forEach(a=>{a.setOptions(i)}),Zr(i)),Hi())}function oo(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable})),i.push.apply(i,a)}return i}function xo(e){for(var t=1;te.length)&&(t=e.length);for(var i=0,a=new Array(t);i
',yp=Number.isNaN||Fe.isNaN;function j(e){return typeof e=="number"&&!yp(e)}var To=function(t){return t>0&&t<1/0};function oa(e){return typeof e>"u"}function ot(e){return ra(e)==="object"&&e!==null}var _p=Object.prototype.hasOwnProperty;function Tt(e){if(!ot(e))return!1;try{var t=e.constructor,i=t.prototype;return t&&i&&_p.call(i,"isPrototypeOf")}catch{return!1}}function Ee(e){return typeof e=="function"}var Rp=Array.prototype.slice;function Po(e){return Array.from?Array.from(e):Rp.call(e)}function oe(e,t){return e&&Ee(t)&&(Array.isArray(e)||j(e.length)?Po(e).forEach(function(i,a){t.call(e,i,a,e)}):ot(e)&&Object.keys(e).forEach(function(i){t.call(e,e[i],i,e)})),e}var J=Object.assign||function(t){for(var i=arguments.length,a=new Array(i>1?i-1:0),n=1;n0&&a.forEach(function(o){ot(o)&&Object.keys(o).forEach(function(l){t[l]=o[l]})}),t},wp=/\.\d*(?:0|9){12}\d*$/;function vt(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1e11;return wp.test(e)?Math.round(e*t)/t:e}var Sp=/^width|height|left|top|marginLeft|marginTop$/;function je(e,t){var i=e.style;oe(t,function(a,n){Sp.test(n)&&j(a)&&(a="".concat(a,"px")),i[n]=a})}function Lp(e,t){return e.classList?e.classList.contains(t):e.className.indexOf(t)>-1}function de(e,t){if(t){if(j(e.length)){oe(e,function(a){de(a,t)});return}if(e.classList){e.classList.add(t);return}var i=e.className.trim();i?i.indexOf(t)<0&&(e.className="".concat(i," ").concat(t)):e.className=t}}function De(e,t){if(t){if(j(e.length)){oe(e,function(i){De(i,t)});return}if(e.classList){e.classList.remove(t);return}e.className.indexOf(t)>=0&&(e.className=e.className.replace(t,""))}}function It(e,t,i){if(t){if(j(e.length)){oe(e,function(a){It(a,t,i)});return}i?de(e,t):De(e,t)}}var Ap=/([a-z\d])([A-Z])/g;function va(e){return e.replace(Ap,"$1-$2").toLowerCase()}function ga(e,t){return ot(e[t])?e[t]:e.dataset?e.dataset[t]:e.getAttribute("data-".concat(va(t)))}function Ut(e,t,i){ot(i)?e[t]=i:e.dataset?e.dataset[t]=i:e.setAttribute("data-".concat(va(t)),i)}function Mp(e,t){if(ot(e[t]))try{delete e[t]}catch{e[t]=void 0}else if(e.dataset)try{delete e.dataset[t]}catch{e.dataset[t]=void 0}else e.removeAttribute("data-".concat(va(t)))}var Do=/\s\s*/,Fo=function(){var e=!1;if(bi){var t=!1,i=function(){},a=Object.defineProperty({},"once",{get:function(){return e=!0,t},set:function(o){t=o}});Fe.addEventListener("test",i,a),Fe.removeEventListener("test",i,a)}return e}();function Pe(e,t,i){var a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},n=i;t.trim().split(Do).forEach(function(o){if(!Fo){var l=e.listeners;l&&l[o]&&l[o][i]&&(n=l[o][i],delete l[o][i],Object.keys(l[o]).length===0&&delete l[o],Object.keys(l).length===0&&delete e.listeners)}e.removeEventListener(o,n,a)})}function Re(e,t,i){var a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},n=i;t.trim().split(Do).forEach(function(o){if(a.once&&!Fo){var l=e.listeners,r=l===void 0?{}:l;n=function(){delete r[o][i],e.removeEventListener(o,n,a);for(var p=arguments.length,c=new Array(p),d=0;dMath.abs(i)&&(i=m)})}),i}function gi(e,t){var i=e.pageX,a=e.pageY,n={endX:i,endY:a};return t?n:xo({startX:i,startY:a},n)}function Dp(e){var t=0,i=0,a=0;return oe(e,function(n){var o=n.startX,l=n.startY;t+=o,i+=l,a+=1}),t/=a,i/=a,{pageX:t,pageY:i}}function Ye(e){var t=e.aspectRatio,i=e.height,a=e.width,n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"contain",o=To(a),l=To(i);if(o&&l){var r=i*t;n==="contain"&&r>a||n==="cover"&&r90?{width:s,height:r}:{width:r,height:s}}function zp(e,t,i,a){var n=t.aspectRatio,o=t.naturalWidth,l=t.naturalHeight,r=t.rotate,s=r===void 0?0:r,p=t.scaleX,c=p===void 0?1:p,d=t.scaleY,m=d===void 0?1:d,u=i.aspectRatio,f=i.naturalWidth,h=i.naturalHeight,g=a.fillColor,I=g===void 0?"transparent":g,E=a.imageSmoothingEnabled,T=E===void 0?!0:E,v=a.imageSmoothingQuality,y=v===void 0?"low":v,b=a.maxWidth,w=b===void 0?1/0:b,x=a.maxHeight,_=x===void 0?1/0:x,P=a.minWidth,O=P===void 0?0:P,M=a.minHeight,C=M===void 0?0:M,S=document.createElement("canvas"),F=S.getContext("2d"),R=Ye({aspectRatio:u,width:w,height:_}),L=Ye({aspectRatio:u,width:O,height:C},"cover"),z=Math.min(R.width,Math.max(L.width,f)),D=Math.min(R.height,Math.max(L.height,h)),k=Ye({aspectRatio:n,width:w,height:_}),B=Ye({aspectRatio:n,width:O,height:C},"cover"),X=Math.min(k.width,Math.max(B.width,o)),q=Math.min(k.height,Math.max(B.height,l)),Q=[-X/2,-q/2,X,q];return S.width=vt(z),S.height=vt(D),F.fillStyle=I,F.fillRect(0,0,z,D),F.save(),F.translate(z/2,D/2),F.rotate(s*Math.PI/180),F.scale(c,m),F.imageSmoothingEnabled=T,F.imageSmoothingQuality=y,F.drawImage.apply(F,[e].concat(_o(Q.map(function(pe){return Math.floor(vt(pe))})))),F.restore(),S}var Co=String.fromCharCode;function Cp(e,t,i){var a="";i+=t;for(var n=t;n0;)i.push(Co.apply(null,Po(n.subarray(0,a)))),n=n.subarray(a);return"data:".concat(t,";base64,").concat(btoa(i.join("")))}function Vp(e){var t=new DataView(e),i;try{var a,n,o;if(t.getUint8(0)===255&&t.getUint8(1)===216)for(var l=t.byteLength,r=2;r+1=8&&(o=p+d)}}}if(o){var m=t.getUint16(o,a),u,f;for(f=0;f=0?o:Mo),height:Math.max(a.offsetHeight,l>=0?l:Oo)};this.containerData=r,je(n,{width:r.width,height:r.height}),de(t,be),De(n,be)},initCanvas:function(){var t=this.containerData,i=this.imageData,a=this.options.viewMode,n=Math.abs(i.rotate)%180===90,o=n?i.naturalHeight:i.naturalWidth,l=n?i.naturalWidth:i.naturalHeight,r=o/l,s=t.width,p=t.height;t.height*r>t.width?a===3?s=t.height*r:p=t.width/r:a===3?p=t.width/r:s=t.height*r;var c={aspectRatio:r,naturalWidth:o,naturalHeight:l,width:s,height:p};this.canvasData=c,this.limited=a===1||a===2,this.limitCanvas(!0,!0),c.width=Math.min(Math.max(c.width,c.minWidth),c.maxWidth),c.height=Math.min(Math.max(c.height,c.minHeight),c.maxHeight),c.left=(t.width-c.width)/2,c.top=(t.height-c.height)/2,c.oldLeft=c.left,c.oldTop=c.top,this.initialCanvasData=J({},c)},limitCanvas:function(t,i){var a=this.options,n=this.containerData,o=this.canvasData,l=this.cropBoxData,r=a.viewMode,s=o.aspectRatio,p=this.cropped&&l;if(t){var c=Number(a.minCanvasWidth)||0,d=Number(a.minCanvasHeight)||0;r>1?(c=Math.max(c,n.width),d=Math.max(d,n.height),r===3&&(d*s>c?c=d*s:d=c/s)):r>0&&(c?c=Math.max(c,p?l.width:0):d?d=Math.max(d,p?l.height:0):p&&(c=l.width,d=l.height,d*s>c?c=d*s:d=c/s));var m=Ye({aspectRatio:s,width:c,height:d});c=m.width,d=m.height,o.minWidth=c,o.minHeight=d,o.maxWidth=1/0,o.maxHeight=1/0}if(i)if(r>(p?0:1)){var u=n.width-o.width,f=n.height-o.height;o.minLeft=Math.min(0,u),o.minTop=Math.min(0,f),o.maxLeft=Math.max(0,u),o.maxTop=Math.max(0,f),p&&this.limited&&(o.minLeft=Math.min(l.left,l.left+(l.width-o.width)),o.minTop=Math.min(l.top,l.top+(l.height-o.height)),o.maxLeft=l.left,o.maxTop=l.top,r===2&&(o.width>=n.width&&(o.minLeft=Math.min(0,u),o.maxLeft=Math.max(0,u)),o.height>=n.height&&(o.minTop=Math.min(0,f),o.maxTop=Math.max(0,f))))}else o.minLeft=-o.width,o.minTop=-o.height,o.maxLeft=n.width,o.maxTop=n.height},renderCanvas:function(t,i){var a=this.canvasData,n=this.imageData;if(i){var o=Fp({width:n.naturalWidth*Math.abs(n.scaleX||1),height:n.naturalHeight*Math.abs(n.scaleY||1),degree:n.rotate||0}),l=o.width,r=o.height,s=a.width*(l/a.naturalWidth),p=a.height*(r/a.naturalHeight);a.left-=(s-a.width)/2,a.top-=(p-a.height)/2,a.width=s,a.height=p,a.aspectRatio=l/r,a.naturalWidth=l,a.naturalHeight=r,this.limitCanvas(!0,!1)}(a.width>a.maxWidth||a.widtha.maxHeight||a.heighti.width?o.height=o.width/a:o.width=o.height*a),this.cropBoxData=o,this.limitCropBox(!0,!0),o.width=Math.min(Math.max(o.width,o.minWidth),o.maxWidth),o.height=Math.min(Math.max(o.height,o.minHeight),o.maxHeight),o.width=Math.max(o.minWidth,o.width*n),o.height=Math.max(o.minHeight,o.height*n),o.left=i.left+(i.width-o.width)/2,o.top=i.top+(i.height-o.height)/2,o.oldLeft=o.left,o.oldTop=o.top,this.initialCropBoxData=J({},o)},limitCropBox:function(t,i){var a=this.options,n=this.containerData,o=this.canvasData,l=this.cropBoxData,r=this.limited,s=a.aspectRatio;if(t){var p=Number(a.minCropBoxWidth)||0,c=Number(a.minCropBoxHeight)||0,d=r?Math.min(n.width,o.width,o.width+o.left,n.width-o.left):n.width,m=r?Math.min(n.height,o.height,o.height+o.top,n.height-o.top):n.height;p=Math.min(p,n.width),c=Math.min(c,n.height),s&&(p&&c?c*s>p?c=p/s:p=c*s:p?c=p/s:c&&(p=c*s),m*s>d?m=d/s:d=m*s),l.minWidth=Math.min(p,d),l.minHeight=Math.min(c,m),l.maxWidth=d,l.maxHeight=m}i&&(r?(l.minLeft=Math.max(0,o.left),l.minTop=Math.max(0,o.top),l.maxLeft=Math.min(n.width,o.left+o.width)-l.width,l.maxTop=Math.min(n.height,o.top+o.height)-l.height):(l.minLeft=0,l.minTop=0,l.maxLeft=n.width-l.width,l.maxTop=n.height-l.height))},renderCropBox:function(){var t=this.options,i=this.containerData,a=this.cropBoxData;(a.width>a.maxWidth||a.widtha.maxHeight||a.height=i.width&&a.height>=i.height?wo:Ta),je(this.cropBox,J({width:a.width,height:a.height},Vt({translateX:a.left,translateY:a.top}))),this.cropped&&this.limited&&this.limitCanvas(!0,!0),this.disabled||this.output()},output:function(){this.preview(),xt(this.element,pa,this.getData())}},Wp={initPreview:function(){var t=this.element,i=this.crossOrigin,a=this.options.preview,n=i?this.crossOriginUrl:this.url,o=t.alt||"The image to preview",l=document.createElement("img");if(i&&(l.crossOrigin=i),l.src=n,l.alt=o,this.viewBox.appendChild(l),this.viewBoxImage=l,!!a){var r=a;typeof a=="string"?r=t.ownerDocument.querySelectorAll(a):a.querySelector&&(r=[a]),this.previews=r,oe(r,function(s){var p=document.createElement("img");Ut(s,hi,{width:s.offsetWidth,height:s.offsetHeight,html:s.innerHTML}),i&&(p.crossOrigin=i),p.src=n,p.alt=o,p.style.cssText='display:block;width:100%;height:auto;min-width:0!important;min-height:0!important;max-width:none!important;max-height:none!important;image-orientation:0deg!important;"',s.innerHTML="",s.appendChild(p)})}},resetPreview:function(){oe(this.previews,function(t){var i=ga(t,hi);je(t,{width:i.width,height:i.height}),t.innerHTML=i.html,Mp(t,hi)})},preview:function(){var t=this.imageData,i=this.canvasData,a=this.cropBoxData,n=a.width,o=a.height,l=t.width,r=t.height,s=a.left-i.left-t.left,p=a.top-i.top-t.top;!this.cropped||this.disabled||(je(this.viewBoxImage,J({width:l,height:r},Vt(J({translateX:-s,translateY:-p},t)))),oe(this.previews,function(c){var d=ga(c,hi),m=d.width,u=d.height,f=m,h=u,g=1;n&&(g=m/n,h=o*g),o&&h>u&&(g=u/o,f=n*g,h=u),je(c,{width:f,height:h}),je(c.getElementsByTagName("img")[0],J({width:l*g,height:r*g},Vt(J({translateX:-s*g,translateY:-p*g},t))))}))}},Hp={bind:function(){var t=this.element,i=this.options,a=this.cropper;Ee(i.cropstart)&&Re(t,fa,i.cropstart),Ee(i.cropmove)&&Re(t,ua,i.cropmove),Ee(i.cropend)&&Re(t,ma,i.cropend),Ee(i.crop)&&Re(t,pa,i.crop),Ee(i.zoom)&&Re(t,ha,i.zoom),Re(a,po,this.onCropStart=this.cropStart.bind(this)),i.zoomable&&i.zoomOnWheel&&Re(a,go,this.onWheel=this.wheel.bind(this),{passive:!1,capture:!0}),i.toggleDragModeOnDblclick&&Re(a,co,this.onDblclick=this.dblclick.bind(this)),Re(t.ownerDocument,mo,this.onCropMove=this.cropMove.bind(this)),Re(t.ownerDocument,uo,this.onCropEnd=this.cropEnd.bind(this)),i.responsive&&Re(window,ho,this.onResize=this.resize.bind(this))},unbind:function(){var t=this.element,i=this.options,a=this.cropper;Ee(i.cropstart)&&Pe(t,fa,i.cropstart),Ee(i.cropmove)&&Pe(t,ua,i.cropmove),Ee(i.cropend)&&Pe(t,ma,i.cropend),Ee(i.crop)&&Pe(t,pa,i.crop),Ee(i.zoom)&&Pe(t,ha,i.zoom),Pe(a,po,this.onCropStart),i.zoomable&&i.zoomOnWheel&&Pe(a,go,this.onWheel,{passive:!1,capture:!0}),i.toggleDragModeOnDblclick&&Pe(a,co,this.onDblclick),Pe(t.ownerDocument,mo,this.onCropMove),Pe(t.ownerDocument,uo,this.onCropEnd),i.responsive&&Pe(window,ho,this.onResize)}},jp={resize:function(){if(!this.disabled){var t=this.options,i=this.container,a=this.containerData,n=i.offsetWidth/a.width,o=i.offsetHeight/a.height,l=Math.abs(n-1)>Math.abs(o-1)?n:o;if(l!==1){var r,s;t.restore&&(r=this.getCanvasData(),s=this.getCropBoxData()),this.render(),t.restore&&(this.setCanvasData(oe(r,function(p,c){r[c]=p*l})),this.setCropBoxData(oe(s,function(p,c){s[c]=p*l})))}}},dblclick:function(){this.disabled||this.options.dragMode===Ao||this.setDragMode(Lp(this.dragBox,ca)?Lo:Ia)},wheel:function(t){var i=this,a=Number(this.options.wheelZoomRatio)||.1,n=1;this.disabled||(t.preventDefault(),!this.wheeling&&(this.wheeling=!0,setTimeout(function(){i.wheeling=!1},50),t.deltaY?n=t.deltaY>0?1:-1:t.wheelDelta?n=-t.wheelDelta/120:t.detail&&(n=t.detail>0?1:-1),this.zoom(-n*a,t)))},cropStart:function(t){var i=t.buttons,a=t.button;if(!(this.disabled||(t.type==="mousedown"||t.type==="pointerdown"&&t.pointerType==="mouse")&&(j(i)&&i!==1||j(a)&&a!==0||t.ctrlKey))){var n=this.options,o=this.pointers,l;t.changedTouches?oe(t.changedTouches,function(r){o[r.identifier]=gi(r)}):o[t.pointerId||0]=gi(t),Object.keys(o).length>1&&n.zoomable&&n.zoomOnTouch?l=So:l=ga(t.target,Gt),bp.test(l)&&xt(this.element,fa,{originalEvent:t,action:l})!==!1&&(t.preventDefault(),this.action=l,this.cropping=!1,l===Ro&&(this.cropping=!0,de(this.dragBox,Ei)))}},cropMove:function(t){var i=this.action;if(!(this.disabled||!i)){var a=this.pointers;t.preventDefault(),xt(this.element,ua,{originalEvent:t,action:i})!==!1&&(t.changedTouches?oe(t.changedTouches,function(n){J(a[n.identifier]||{},gi(n,!0))}):J(a[t.pointerId||0]||{},gi(t,!0)),this.change(t))}},cropEnd:function(t){if(!this.disabled){var i=this.action,a=this.pointers;t.changedTouches?oe(t.changedTouches,function(n){delete a[n.identifier]}):delete a[t.pointerId||0],i&&(t.preventDefault(),Object.keys(a).length||(this.action=""),this.cropping&&(this.cropping=!1,It(this.dragBox,Ei,this.cropped&&this.options.modal)),xt(this.element,ma,{originalEvent:t,action:i}))}}},Yp={change:function(t){var i=this.options,a=this.canvasData,n=this.containerData,o=this.cropBoxData,l=this.pointers,r=this.action,s=i.aspectRatio,p=o.left,c=o.top,d=o.width,m=o.height,u=p+d,f=c+m,h=0,g=0,I=n.width,E=n.height,T=!0,v;!s&&t.shiftKey&&(s=d&&m?d/m:1),this.limited&&(h=o.minLeft,g=o.minTop,I=h+Math.min(n.width,a.width,a.left+a.width),E=g+Math.min(n.height,a.height,a.top+a.height));var y=l[Object.keys(l)[0]],b={x:y.endX-y.startX,y:y.endY-y.startY},w=function(_){switch(_){case at:u+b.x>I&&(b.x=I-u);break;case nt:p+b.xE&&(b.y=E-f);break}};switch(r){case Ta:p+=b.x,c+=b.y;break;case at:if(b.x>=0&&(u>=I||s&&(c<=g||f>=E))){T=!1;break}w(at),d+=b.x,d<0&&(r=nt,d=-d,p-=d),s&&(m=d/s,c+=(o.height-m)/2);break;case He:if(b.y<=0&&(c<=g||s&&(p<=h||u>=I))){T=!1;break}w(He),m-=b.y,c+=b.y,m<0&&(r=bt,m=-m,c-=m),s&&(d=m*s,p+=(o.width-d)/2);break;case nt:if(b.x<=0&&(p<=h||s&&(c<=g||f>=E))){T=!1;break}w(nt),d-=b.x,p+=b.x,d<0&&(r=at,d=-d,p-=d),s&&(m=d/s,c+=(o.height-m)/2);break;case bt:if(b.y>=0&&(f>=E||s&&(p<=h||u>=I))){T=!1;break}w(bt),m+=b.y,m<0&&(r=He,m=-m,c-=m),s&&(d=m*s,p+=(o.width-d)/2);break;case Ct:if(s){if(b.y<=0&&(c<=g||u>=I)){T=!1;break}w(He),m-=b.y,c+=b.y,d=m*s}else w(He),w(at),b.x>=0?ug&&(m-=b.y,c+=b.y):(m-=b.y,c+=b.y);d<0&&m<0?(r=kt,m=-m,d=-d,c-=m,p-=d):d<0?(r=Nt,d=-d,p-=d):m<0&&(r=Bt,m=-m,c-=m);break;case Nt:if(s){if(b.y<=0&&(c<=g||p<=h)){T=!1;break}w(He),m-=b.y,c+=b.y,d=m*s,p+=o.width-d}else w(He),w(nt),b.x<=0?p>h?(d-=b.x,p+=b.x):b.y<=0&&c<=g&&(T=!1):(d-=b.x,p+=b.x),b.y<=0?c>g&&(m-=b.y,c+=b.y):(m-=b.y,c+=b.y);d<0&&m<0?(r=Bt,m=-m,d=-d,c-=m,p-=d):d<0?(r=Ct,d=-d,p-=d):m<0&&(r=kt,m=-m,c-=m);break;case kt:if(s){if(b.x<=0&&(p<=h||f>=E)){T=!1;break}w(nt),d-=b.x,p+=b.x,m=d/s}else w(bt),w(nt),b.x<=0?p>h?(d-=b.x,p+=b.x):b.y>=0&&f>=E&&(T=!1):(d-=b.x,p+=b.x),b.y>=0?f=0&&(u>=I||f>=E)){T=!1;break}w(at),d+=b.x,m=d/s}else w(bt),w(at),b.x>=0?u=0&&f>=E&&(T=!1):d+=b.x,b.y>=0?f0?r=b.y>0?Bt:Ct:b.x<0&&(p-=d,r=b.y>0?kt:Nt),b.y<0&&(c-=m),this.cropped||(De(this.cropBox,be),this.cropped=!0,this.limited&&this.limitCropBox(!0,!0));break}T&&(o.width=d,o.height=m,o.left=p,o.top=c,this.action=r,this.renderCropBox()),oe(l,function(x){x.startX=x.endX,x.startY=x.endY})}},qp={crop:function(){return this.ready&&!this.cropped&&!this.disabled&&(this.cropped=!0,this.limitCropBox(!0,!0),this.options.modal&&de(this.dragBox,Ei),De(this.cropBox,be),this.setCropBoxData(this.initialCropBoxData)),this},reset:function(){return this.ready&&!this.disabled&&(this.imageData=J({},this.initialImageData),this.canvasData=J({},this.initialCanvasData),this.cropBoxData=J({},this.initialCropBoxData),this.renderCanvas(),this.cropped&&this.renderCropBox()),this},clear:function(){return this.cropped&&!this.disabled&&(J(this.cropBoxData,{left:0,top:0,width:0,height:0}),this.cropped=!1,this.renderCropBox(),this.limitCanvas(!0,!0),this.renderCanvas(),De(this.dragBox,Ei),de(this.cropBox,be)),this},replace:function(t){var i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;return!this.disabled&&t&&(this.isImg&&(this.element.src=t),i?(this.url=t,this.image.src=t,this.ready&&(this.viewBoxImage.src=t,oe(this.previews,function(a){a.getElementsByTagName("img")[0].src=t}))):(this.isImg&&(this.replaced=!0),this.options.data=null,this.uncreate(),this.load(t))),this},enable:function(){return this.ready&&this.disabled&&(this.disabled=!1,De(this.cropper,ro)),this},disable:function(){return this.ready&&!this.disabled&&(this.disabled=!0,de(this.cropper,ro)),this},destroy:function(){var t=this.element;return t[K]?(t[K]=void 0,this.isImg&&this.replaced&&(t.src=this.originalUrl),this.uncreate(),this):this},move:function(t){var i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:t,a=this.canvasData,n=a.left,o=a.top;return this.moveTo(oa(t)?t:n+Number(t),oa(i)?i:o+Number(i))},moveTo:function(t){var i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:t,a=this.canvasData,n=!1;return t=Number(t),i=Number(i),this.ready&&!this.disabled&&this.options.movable&&(j(t)&&(a.left=t,n=!0),j(i)&&(a.top=i,n=!0),n&&this.renderCanvas(!0)),this},zoom:function(t,i){var a=this.canvasData;return t=Number(t),t<0?t=1/(1-t):t=1+t,this.zoomTo(a.width*t/a.naturalWidth,null,i)},zoomTo:function(t,i,a){var n=this.options,o=this.canvasData,l=o.width,r=o.height,s=o.naturalWidth,p=o.naturalHeight;if(t=Number(t),t>=0&&this.ready&&!this.disabled&&n.zoomable){var c=s*t,d=p*t;if(xt(this.element,ha,{ratio:t,oldRatio:l/s,originalEvent:a})===!1)return this;if(a){var m=this.pointers,u=zo(this.cropper),f=m&&Object.keys(m).length?Dp(m):{pageX:a.pageX,pageY:a.pageY};o.left-=(c-l)*((f.pageX-u.left-o.left)/l),o.top-=(d-r)*((f.pageY-u.top-o.top)/r)}else Tt(i)&&j(i.x)&&j(i.y)?(o.left-=(c-l)*((i.x-o.left)/l),o.top-=(d-r)*((i.y-o.top)/r)):(o.left-=(c-l)/2,o.top-=(d-r)/2);o.width=c,o.height=d,this.renderCanvas(!0)}return this},rotate:function(t){return this.rotateTo((this.imageData.rotate||0)+Number(t))},rotateTo:function(t){return t=Number(t),j(t)&&this.ready&&!this.disabled&&this.options.rotatable&&(this.imageData.rotate=t%360,this.renderCanvas(!0,!0)),this},scaleX:function(t){var i=this.imageData.scaleY;return this.scale(t,j(i)?i:1)},scaleY:function(t){var i=this.imageData.scaleX;return this.scale(j(i)?i:1,t)},scale:function(t){var i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:t,a=this.imageData,n=!1;return t=Number(t),i=Number(i),this.ready&&!this.disabled&&this.options.scalable&&(j(t)&&(a.scaleX=t,n=!0),j(i)&&(a.scaleY=i,n=!0),n&&this.renderCanvas(!0,!0)),this},getData:function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,i=this.options,a=this.imageData,n=this.canvasData,o=this.cropBoxData,l;if(this.ready&&this.cropped){l={x:o.left-n.left,y:o.top-n.top,width:o.width,height:o.height};var r=a.width/a.naturalWidth;if(oe(l,function(c,d){l[d]=c/r}),t){var s=Math.round(l.y+l.height),p=Math.round(l.x+l.width);l.x=Math.round(l.x),l.y=Math.round(l.y),l.width=p-l.x,l.height=s-l.y}}else l={x:0,y:0,width:0,height:0};return i.rotatable&&(l.rotate=a.rotate||0),i.scalable&&(l.scaleX=a.scaleX||1,l.scaleY=a.scaleY||1),l},setData:function(t){var i=this.options,a=this.imageData,n=this.canvasData,o={};if(this.ready&&!this.disabled&&Tt(t)){var l=!1;i.rotatable&&j(t.rotate)&&t.rotate!==a.rotate&&(a.rotate=t.rotate,l=!0),i.scalable&&(j(t.scaleX)&&t.scaleX!==a.scaleX&&(a.scaleX=t.scaleX,l=!0),j(t.scaleY)&&t.scaleY!==a.scaleY&&(a.scaleY=t.scaleY,l=!0)),l&&this.renderCanvas(!0,!0);var r=a.width/a.naturalWidth;j(t.x)&&(o.left=t.x*r+n.left),j(t.y)&&(o.top=t.y*r+n.top),j(t.width)&&(o.width=t.width*r),j(t.height)&&(o.height=t.height*r),this.setCropBoxData(o)}return this},getContainerData:function(){return this.ready?J({},this.containerData):{}},getImageData:function(){return this.sized?J({},this.imageData):{}},getCanvasData:function(){var t=this.canvasData,i={};return this.ready&&oe(["left","top","width","height","naturalWidth","naturalHeight"],function(a){i[a]=t[a]}),i},setCanvasData:function(t){var i=this.canvasData,a=i.aspectRatio;return this.ready&&!this.disabled&&Tt(t)&&(j(t.left)&&(i.left=t.left),j(t.top)&&(i.top=t.top),j(t.width)?(i.width=t.width,i.height=t.width/a):j(t.height)&&(i.height=t.height,i.width=t.height*a),this.renderCanvas(!0)),this},getCropBoxData:function(){var t=this.cropBoxData,i;return this.ready&&this.cropped&&(i={left:t.left,top:t.top,width:t.width,height:t.height}),i||{}},setCropBoxData:function(t){var i=this.cropBoxData,a=this.options.aspectRatio,n,o;return this.ready&&this.cropped&&!this.disabled&&Tt(t)&&(j(t.left)&&(i.left=t.left),j(t.top)&&(i.top=t.top),j(t.width)&&t.width!==i.width&&(n=!0,i.width=t.width),j(t.height)&&t.height!==i.height&&(o=!0,i.height=t.height),a&&(n?i.height=i.width/a:o&&(i.width=i.height*a)),this.renderCropBox()),this},getCroppedCanvas:function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!this.ready||!window.HTMLCanvasElement)return null;var i=this.canvasData,a=zp(this.image,this.imageData,i,t);if(!this.cropped)return a;var n=this.getData(t.rounded),o=n.x,l=n.y,r=n.width,s=n.height,p=a.width/Math.floor(i.naturalWidth);p!==1&&(o*=p,l*=p,r*=p,s*=p);var c=r/s,d=Ye({aspectRatio:c,width:t.maxWidth||1/0,height:t.maxHeight||1/0}),m=Ye({aspectRatio:c,width:t.minWidth||0,height:t.minHeight||0},"cover"),u=Ye({aspectRatio:c,width:t.width||(p!==1?a.width:r),height:t.height||(p!==1?a.height:s)}),f=u.width,h=u.height;f=Math.min(d.width,Math.max(m.width,f)),h=Math.min(d.height,Math.max(m.height,h));var g=document.createElement("canvas"),I=g.getContext("2d");g.width=vt(f),g.height=vt(h),I.fillStyle=t.fillColor||"transparent",I.fillRect(0,0,f,h);var E=t.imageSmoothingEnabled,T=E===void 0?!0:E,v=t.imageSmoothingQuality;I.imageSmoothingEnabled=T,v&&(I.imageSmoothingQuality=v);var y=a.width,b=a.height,w=o,x=l,_,P,O,M,C,S;w<=-r||w>y?(w=0,_=0,O=0,C=0):w<=0?(O=-w,w=0,_=Math.min(y,r+w),C=_):w<=y&&(O=0,_=Math.min(r,y-w),C=_),_<=0||x<=-s||x>b?(x=0,P=0,M=0,S=0):x<=0?(M=-x,x=0,P=Math.min(b,s+x),S=P):x<=b&&(M=0,P=Math.min(s,b-x),S=P);var F=[w,x,_,P];if(C>0&&S>0){var R=f/r;F.push(O*R,M*R,C*R,S*R)}return I.drawImage.apply(I,[a].concat(_o(F.map(function(L){return Math.floor(vt(L))})))),g},setAspectRatio:function(t){var i=this.options;return!this.disabled&&!oa(t)&&(i.aspectRatio=Math.max(0,t)||NaN,this.ready&&(this.initCropBox(),this.cropped&&this.renderCropBox())),this},setDragMode:function(t){var i=this.options,a=this.dragBox,n=this.face;if(this.ready&&!this.disabled){var o=t===Ia,l=i.movable&&t===Lo;t=o||l?t:Ao,i.dragMode=t,Ut(a,Gt,t),It(a,ca,o),It(a,da,l),i.cropBoxMovable||(Ut(n,Gt,t),It(n,ca,o),It(n,da,l))}return this}},$p=Fe.Cropper,xa=function(){function e(t){var i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(rp(this,e),!t||!vp.test(t.tagName))throw new Error("The first argument is required and must be an or element.");this.element=t,this.options=J({},bo,Tt(i)&&i),this.cropped=!1,this.disabled=!1,this.pointers={},this.ready=!1,this.reloading=!1,this.replaced=!1,this.sized=!1,this.sizing=!1,this.init()}return sp(e,[{key:"init",value:function(){var i=this.element,a=i.tagName.toLowerCase(),n;if(!i[K]){if(i[K]=this,a==="img"){if(this.isImg=!0,n=i.getAttribute("src")||"",this.originalUrl=n,!n)return;n=i.src}else a==="canvas"&&window.HTMLCanvasElement&&(n=i.toDataURL());this.load(n)}}},{key:"load",value:function(i){var a=this;if(i){this.url=i,this.imageData={};var n=this.element,o=this.options;if(!o.rotatable&&!o.scalable&&(o.checkOrientation=!1),!o.checkOrientation||!window.ArrayBuffer){this.clone();return}if(Tp.test(i)){Ip.test(i)?this.read(Bp(i)):this.clone();return}var l=new XMLHttpRequest,r=this.clone.bind(this);this.reloading=!0,this.xhr=l,l.onabort=r,l.onerror=r,l.ontimeout=r,l.onprogress=function(){l.getResponseHeader("content-type")!==Eo&&l.abort()},l.onload=function(){a.read(l.response)},l.onloadend=function(){a.reloading=!1,a.xhr=null},o.checkCrossOrigin&&Io(i)&&n.crossOrigin&&(i=vo(i)),l.open("GET",i,!0),l.responseType="arraybuffer",l.withCredentials=n.crossOrigin==="use-credentials",l.send()}}},{key:"read",value:function(i){var a=this.options,n=this.imageData,o=Vp(i),l=0,r=1,s=1;if(o>1){this.url=kp(i,Eo);var p=Gp(o);l=p.rotate,r=p.scaleX,s=p.scaleY}a.rotatable&&(n.rotate=l),a.scalable&&(n.scaleX=r,n.scaleY=s),this.clone()}},{key:"clone",value:function(){var i=this.element,a=this.url,n=i.crossOrigin,o=a;this.options.checkCrossOrigin&&Io(a)&&(n||(n="anonymous"),o=vo(a)),this.crossOrigin=n,this.crossOriginUrl=o;var l=document.createElement("img");n&&(l.crossOrigin=n),l.src=o||a,l.alt=i.alt||"The image to crop",this.image=l,l.onload=this.start.bind(this),l.onerror=this.stop.bind(this),de(l,so),i.parentNode.insertBefore(l,i.nextSibling)}},{key:"start",value:function(){var i=this,a=this.image;a.onload=null,a.onerror=null,this.sizing=!0;var n=Fe.navigator&&/(?:iPad|iPhone|iPod).*?AppleWebKit/i.test(Fe.navigator.userAgent),o=function(p,c){J(i.imageData,{naturalWidth:p,naturalHeight:c,aspectRatio:p/c}),i.initialImageData=J({},i.imageData),i.sizing=!1,i.sized=!0,i.build()};if(a.naturalWidth&&!n){o(a.naturalWidth,a.naturalHeight);return}var l=document.createElement("img"),r=document.body||document.documentElement;this.sizingImage=l,l.onload=function(){o(l.width,l.height),n||r.removeChild(l)},l.src=a.src,n||(l.style.cssText="left:0;max-height:none!important;max-width:none!important;min-height:0!important;min-width:0!important;opacity:0;position:absolute;top:0;z-index:-1;",r.appendChild(l))}},{key:"stop",value:function(){var i=this.image;i.onload=null,i.onerror=null,i.parentNode.removeChild(i),this.image=null}},{key:"build",value:function(){if(!(!this.sized||this.ready)){var i=this.element,a=this.options,n=this.image,o=i.parentNode,l=document.createElement("div");l.innerHTML=xp;var r=l.querySelector(".".concat(K,"-container")),s=r.querySelector(".".concat(K,"-canvas")),p=r.querySelector(".".concat(K,"-drag-box")),c=r.querySelector(".".concat(K,"-crop-box")),d=c.querySelector(".".concat(K,"-face"));this.container=o,this.cropper=r,this.canvas=s,this.dragBox=p,this.cropBox=c,this.viewBox=r.querySelector(".".concat(K,"-view-box")),this.face=d,s.appendChild(n),de(i,be),o.insertBefore(r,i.nextSibling),De(n,so),this.initPreview(),this.bind(),a.initialAspectRatio=Math.max(0,a.initialAspectRatio)||NaN,a.aspectRatio=Math.max(0,a.aspectRatio)||NaN,a.viewMode=Math.max(0,Math.min(3,Math.round(a.viewMode)))||0,de(c,be),a.guides||de(c.getElementsByClassName("".concat(K,"-dashed")),be),a.center||de(c.getElementsByClassName("".concat(K,"-center")),be),a.background&&de(r,"".concat(K,"-bg")),a.highlight||de(d,fp),a.cropBoxMovable&&(de(d,da),Ut(d,Gt,Ta)),a.cropBoxResizable||(de(c.getElementsByClassName("".concat(K,"-line")),be),de(c.getElementsByClassName("".concat(K,"-point")),be)),this.render(),this.ready=!0,this.setDragMode(a.dragMode),a.autoCrop&&this.crop(),this.setData(a.data),Ee(a.ready)&&Re(i,fo,a.ready,{once:!0}),xt(i,fo)}}},{key:"unbuild",value:function(){if(this.ready){this.ready=!1,this.unbind(),this.resetPreview();var i=this.cropper.parentNode;i&&i.removeChild(this.cropper),De(this.element,be)}}},{key:"uncreate",value:function(){this.ready?(this.unbuild(),this.ready=!1,this.cropped=!1):this.sizing?(this.sizingImage.onload=null,this.sizing=!1,this.sized=!1):this.reloading?(this.xhr.onabort=null,this.xhr.abort()):this.image&&this.stop()}}],[{key:"noConflict",value:function(){return window.Cropper=$p,e}},{key:"setDefaults",value:function(i){J(bo,Tt(i)&&i)}}])}();J(xa.prototype,Up,Wp,Hp,jp,Yp,qp);var No={"application/prs.cww":["cww"],"application/prs.xsf+xml":["xsf"],"application/vnd.1000minds.decision-model+xml":["1km"],"application/vnd.3gpp.pic-bw-large":["plb"],"application/vnd.3gpp.pic-bw-small":["psb"],"application/vnd.3gpp.pic-bw-var":["pvb"],"application/vnd.3gpp2.tcap":["tcap"],"application/vnd.3m.post-it-notes":["pwn"],"application/vnd.accpac.simply.aso":["aso"],"application/vnd.accpac.simply.imp":["imp"],"application/vnd.acucobol":["acu"],"application/vnd.acucorp":["atc","acutc"],"application/vnd.adobe.air-application-installer-package+zip":["air"],"application/vnd.adobe.formscentral.fcdt":["fcdt"],"application/vnd.adobe.fxp":["fxp","fxpl"],"application/vnd.adobe.xdp+xml":["xdp"],"application/vnd.adobe.xfdf":["*xfdf"],"application/vnd.age":["age"],"application/vnd.ahead.space":["ahead"],"application/vnd.airzip.filesecure.azf":["azf"],"application/vnd.airzip.filesecure.azs":["azs"],"application/vnd.amazon.ebook":["azw"],"application/vnd.americandynamics.acc":["acc"],"application/vnd.amiga.ami":["ami"],"application/vnd.android.package-archive":["apk"],"application/vnd.anser-web-certificate-issue-initiation":["cii"],"application/vnd.anser-web-funds-transfer-initiation":["fti"],"application/vnd.antix.game-component":["atx"],"application/vnd.apple.installer+xml":["mpkg"],"application/vnd.apple.keynote":["key"],"application/vnd.apple.mpegurl":["m3u8"],"application/vnd.apple.numbers":["numbers"],"application/vnd.apple.pages":["pages"],"application/vnd.apple.pkpass":["pkpass"],"application/vnd.aristanetworks.swi":["swi"],"application/vnd.astraea-software.iota":["iota"],"application/vnd.audiograph":["aep"],"application/vnd.balsamiq.bmml+xml":["bmml"],"application/vnd.blueice.multipass":["mpm"],"application/vnd.bmi":["bmi"],"application/vnd.businessobjects":["rep"],"application/vnd.chemdraw+xml":["cdxml"],"application/vnd.chipnuts.karaoke-mmd":["mmd"],"application/vnd.cinderella":["cdy"],"application/vnd.citationstyles.style+xml":["csl"],"application/vnd.claymore":["cla"],"application/vnd.cloanto.rp9":["rp9"],"application/vnd.clonk.c4group":["c4g","c4d","c4f","c4p","c4u"],"application/vnd.cluetrust.cartomobile-config":["c11amc"],"application/vnd.cluetrust.cartomobile-config-pkg":["c11amz"],"application/vnd.commonspace":["csp"],"application/vnd.contact.cmsg":["cdbcmsg"],"application/vnd.cosmocaller":["cmc"],"application/vnd.crick.clicker":["clkx"],"application/vnd.crick.clicker.keyboard":["clkk"],"application/vnd.crick.clicker.palette":["clkp"],"application/vnd.crick.clicker.template":["clkt"],"application/vnd.crick.clicker.wordbank":["clkw"],"application/vnd.criticaltools.wbs+xml":["wbs"],"application/vnd.ctc-posml":["pml"],"application/vnd.cups-ppd":["ppd"],"application/vnd.curl.car":["car"],"application/vnd.curl.pcurl":["pcurl"],"application/vnd.dart":["dart"],"application/vnd.data-vision.rdz":["rdz"],"application/vnd.dbf":["dbf"],"application/vnd.dece.data":["uvf","uvvf","uvd","uvvd"],"application/vnd.dece.ttml+xml":["uvt","uvvt"],"application/vnd.dece.unspecified":["uvx","uvvx"],"application/vnd.dece.zip":["uvz","uvvz"],"application/vnd.denovo.fcselayout-link":["fe_launch"],"application/vnd.dna":["dna"],"application/vnd.dolby.mlp":["mlp"],"application/vnd.dpgraph":["dpg"],"application/vnd.dreamfactory":["dfac"],"application/vnd.ds-keypoint":["kpxx"],"application/vnd.dvb.ait":["ait"],"application/vnd.dvb.service":["svc"],"application/vnd.dynageo":["geo"],"application/vnd.ecowin.chart":["mag"],"application/vnd.enliven":["nml"],"application/vnd.epson.esf":["esf"],"application/vnd.epson.msf":["msf"],"application/vnd.epson.quickanime":["qam"],"application/vnd.epson.salt":["slt"],"application/vnd.epson.ssf":["ssf"],"application/vnd.eszigno3+xml":["es3","et3"],"application/vnd.ezpix-album":["ez2"],"application/vnd.ezpix-package":["ez3"],"application/vnd.fdf":["*fdf"],"application/vnd.fdsn.mseed":["mseed"],"application/vnd.fdsn.seed":["seed","dataless"],"application/vnd.flographit":["gph"],"application/vnd.fluxtime.clip":["ftc"],"application/vnd.framemaker":["fm","frame","maker","book"],"application/vnd.frogans.fnc":["fnc"],"application/vnd.frogans.ltf":["ltf"],"application/vnd.fsc.weblaunch":["fsc"],"application/vnd.fujitsu.oasys":["oas"],"application/vnd.fujitsu.oasys2":["oa2"],"application/vnd.fujitsu.oasys3":["oa3"],"application/vnd.fujitsu.oasysgp":["fg5"],"application/vnd.fujitsu.oasysprs":["bh2"],"application/vnd.fujixerox.ddd":["ddd"],"application/vnd.fujixerox.docuworks":["xdw"],"application/vnd.fujixerox.docuworks.binder":["xbd"],"application/vnd.fuzzysheet":["fzs"],"application/vnd.genomatix.tuxedo":["txd"],"application/vnd.geogebra.file":["ggb"],"application/vnd.geogebra.tool":["ggt"],"application/vnd.geometry-explorer":["gex","gre"],"application/vnd.geonext":["gxt"],"application/vnd.geoplan":["g2w"],"application/vnd.geospace":["g3w"],"application/vnd.gmx":["gmx"],"application/vnd.google-apps.document":["gdoc"],"application/vnd.google-apps.presentation":["gslides"],"application/vnd.google-apps.spreadsheet":["gsheet"],"application/vnd.google-earth.kml+xml":["kml"],"application/vnd.google-earth.kmz":["kmz"],"application/vnd.grafeq":["gqf","gqs"],"application/vnd.groove-account":["gac"],"application/vnd.groove-help":["ghf"],"application/vnd.groove-identity-message":["gim"],"application/vnd.groove-injector":["grv"],"application/vnd.groove-tool-message":["gtm"],"application/vnd.groove-tool-template":["tpl"],"application/vnd.groove-vcard":["vcg"],"application/vnd.hal+xml":["hal"],"application/vnd.handheld-entertainment+xml":["zmm"],"application/vnd.hbci":["hbci"],"application/vnd.hhe.lesson-player":["les"],"application/vnd.hp-hpgl":["hpgl"],"application/vnd.hp-hpid":["hpid"],"application/vnd.hp-hps":["hps"],"application/vnd.hp-jlyt":["jlt"],"application/vnd.hp-pcl":["pcl"],"application/vnd.hp-pclxl":["pclxl"],"application/vnd.hydrostatix.sof-data":["sfd-hdstx"],"application/vnd.ibm.minipay":["mpy"],"application/vnd.ibm.modcap":["afp","listafp","list3820"],"application/vnd.ibm.rights-management":["irm"],"application/vnd.ibm.secure-container":["sc"],"application/vnd.iccprofile":["icc","icm"],"application/vnd.igloader":["igl"],"application/vnd.immervision-ivp":["ivp"],"application/vnd.immervision-ivu":["ivu"],"application/vnd.insors.igm":["igm"],"application/vnd.intercon.formnet":["xpw","xpx"],"application/vnd.intergeo":["i2g"],"application/vnd.intu.qbo":["qbo"],"application/vnd.intu.qfx":["qfx"],"application/vnd.ipunplugged.rcprofile":["rcprofile"],"application/vnd.irepository.package+xml":["irp"],"application/vnd.is-xpr":["xpr"],"application/vnd.isac.fcs":["fcs"],"application/vnd.jam":["jam"],"application/vnd.jcp.javame.midlet-rms":["rms"],"application/vnd.jisp":["jisp"],"application/vnd.joost.joda-archive":["joda"],"application/vnd.kahootz":["ktz","ktr"],"application/vnd.kde.karbon":["karbon"],"application/vnd.kde.kchart":["chrt"],"application/vnd.kde.kformula":["kfo"],"application/vnd.kde.kivio":["flw"],"application/vnd.kde.kontour":["kon"],"application/vnd.kde.kpresenter":["kpr","kpt"],"application/vnd.kde.kspread":["ksp"],"application/vnd.kde.kword":["kwd","kwt"],"application/vnd.kenameaapp":["htke"],"application/vnd.kidspiration":["kia"],"application/vnd.kinar":["kne","knp"],"application/vnd.koan":["skp","skd","skt","skm"],"application/vnd.kodak-descriptor":["sse"],"application/vnd.las.las+xml":["lasxml"],"application/vnd.llamagraphics.life-balance.desktop":["lbd"],"application/vnd.llamagraphics.life-balance.exchange+xml":["lbe"],"application/vnd.lotus-1-2-3":["123"],"application/vnd.lotus-approach":["apr"],"application/vnd.lotus-freelance":["pre"],"application/vnd.lotus-notes":["nsf"],"application/vnd.lotus-organizer":["org"],"application/vnd.lotus-screencam":["scm"],"application/vnd.lotus-wordpro":["lwp"],"application/vnd.macports.portpkg":["portpkg"],"application/vnd.mapbox-vector-tile":["mvt"],"application/vnd.mcd":["mcd"],"application/vnd.medcalcdata":["mc1"],"application/vnd.mediastation.cdkey":["cdkey"],"application/vnd.mfer":["mwf"],"application/vnd.mfmp":["mfm"],"application/vnd.micrografx.flo":["flo"],"application/vnd.micrografx.igx":["igx"],"application/vnd.mif":["mif"],"application/vnd.mobius.daf":["daf"],"application/vnd.mobius.dis":["dis"],"application/vnd.mobius.mbk":["mbk"],"application/vnd.mobius.mqy":["mqy"],"application/vnd.mobius.msl":["msl"],"application/vnd.mobius.plc":["plc"],"application/vnd.mobius.txf":["txf"],"application/vnd.mophun.application":["mpn"],"application/vnd.mophun.certificate":["mpc"],"application/vnd.mozilla.xul+xml":["xul"],"application/vnd.ms-artgalry":["cil"],"application/vnd.ms-cab-compressed":["cab"],"application/vnd.ms-excel":["xls","xlm","xla","xlc","xlt","xlw"],"application/vnd.ms-excel.addin.macroenabled.12":["xlam"],"application/vnd.ms-excel.sheet.binary.macroenabled.12":["xlsb"],"application/vnd.ms-excel.sheet.macroenabled.12":["xlsm"],"application/vnd.ms-excel.template.macroenabled.12":["xltm"],"application/vnd.ms-fontobject":["eot"],"application/vnd.ms-htmlhelp":["chm"],"application/vnd.ms-ims":["ims"],"application/vnd.ms-lrm":["lrm"],"application/vnd.ms-officetheme":["thmx"],"application/vnd.ms-outlook":["msg"],"application/vnd.ms-pki.seccat":["cat"],"application/vnd.ms-pki.stl":["*stl"],"application/vnd.ms-powerpoint":["ppt","pps","pot"],"application/vnd.ms-powerpoint.addin.macroenabled.12":["ppam"],"application/vnd.ms-powerpoint.presentation.macroenabled.12":["pptm"],"application/vnd.ms-powerpoint.slide.macroenabled.12":["sldm"],"application/vnd.ms-powerpoint.slideshow.macroenabled.12":["ppsm"],"application/vnd.ms-powerpoint.template.macroenabled.12":["potm"],"application/vnd.ms-project":["*mpp","mpt"],"application/vnd.ms-word.document.macroenabled.12":["docm"],"application/vnd.ms-word.template.macroenabled.12":["dotm"],"application/vnd.ms-works":["wps","wks","wcm","wdb"],"application/vnd.ms-wpl":["wpl"],"application/vnd.ms-xpsdocument":["xps"],"application/vnd.mseq":["mseq"],"application/vnd.musician":["mus"],"application/vnd.muvee.style":["msty"],"application/vnd.mynfc":["taglet"],"application/vnd.neurolanguage.nlu":["nlu"],"application/vnd.nitf":["ntf","nitf"],"application/vnd.noblenet-directory":["nnd"],"application/vnd.noblenet-sealer":["nns"],"application/vnd.noblenet-web":["nnw"],"application/vnd.nokia.n-gage.ac+xml":["*ac"],"application/vnd.nokia.n-gage.data":["ngdat"],"application/vnd.nokia.n-gage.symbian.install":["n-gage"],"application/vnd.nokia.radio-preset":["rpst"],"application/vnd.nokia.radio-presets":["rpss"],"application/vnd.novadigm.edm":["edm"],"application/vnd.novadigm.edx":["edx"],"application/vnd.novadigm.ext":["ext"],"application/vnd.oasis.opendocument.chart":["odc"],"application/vnd.oasis.opendocument.chart-template":["otc"],"application/vnd.oasis.opendocument.database":["odb"],"application/vnd.oasis.opendocument.formula":["odf"],"application/vnd.oasis.opendocument.formula-template":["odft"],"application/vnd.oasis.opendocument.graphics":["odg"],"application/vnd.oasis.opendocument.graphics-template":["otg"],"application/vnd.oasis.opendocument.image":["odi"],"application/vnd.oasis.opendocument.image-template":["oti"],"application/vnd.oasis.opendocument.presentation":["odp"],"application/vnd.oasis.opendocument.presentation-template":["otp"],"application/vnd.oasis.opendocument.spreadsheet":["ods"],"application/vnd.oasis.opendocument.spreadsheet-template":["ots"],"application/vnd.oasis.opendocument.text":["odt"],"application/vnd.oasis.opendocument.text-master":["odm"],"application/vnd.oasis.opendocument.text-template":["ott"],"application/vnd.oasis.opendocument.text-web":["oth"],"application/vnd.olpc-sugar":["xo"],"application/vnd.oma.dd2+xml":["dd2"],"application/vnd.openblox.game+xml":["obgx"],"application/vnd.openofficeorg.extension":["oxt"],"application/vnd.openstreetmap.data+xml":["osm"],"application/vnd.openxmlformats-officedocument.presentationml.presentation":["pptx"],"application/vnd.openxmlformats-officedocument.presentationml.slide":["sldx"],"application/vnd.openxmlformats-officedocument.presentationml.slideshow":["ppsx"],"application/vnd.openxmlformats-officedocument.presentationml.template":["potx"],"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":["xlsx"],"application/vnd.openxmlformats-officedocument.spreadsheetml.template":["xltx"],"application/vnd.openxmlformats-officedocument.wordprocessingml.document":["docx"],"application/vnd.openxmlformats-officedocument.wordprocessingml.template":["dotx"],"application/vnd.osgeo.mapguide.package":["mgp"],"application/vnd.osgi.dp":["dp"],"application/vnd.osgi.subsystem":["esa"],"application/vnd.palm":["pdb","pqa","oprc"],"application/vnd.pawaafile":["paw"],"application/vnd.pg.format":["str"],"application/vnd.pg.osasli":["ei6"],"application/vnd.picsel":["efif"],"application/vnd.pmi.widget":["wg"],"application/vnd.pocketlearn":["plf"],"application/vnd.powerbuilder6":["pbd"],"application/vnd.previewsystems.box":["box"],"application/vnd.proteus.magazine":["mgz"],"application/vnd.publishare-delta-tree":["qps"],"application/vnd.pvi.ptid1":["ptid"],"application/vnd.pwg-xhtml-print+xml":["xhtm"],"application/vnd.quark.quarkxpress":["qxd","qxt","qwd","qwt","qxl","qxb"],"application/vnd.rar":["rar"],"application/vnd.realvnc.bed":["bed"],"application/vnd.recordare.musicxml":["mxl"],"application/vnd.recordare.musicxml+xml":["musicxml"],"application/vnd.rig.cryptonote":["cryptonote"],"application/vnd.rim.cod":["cod"],"application/vnd.rn-realmedia":["rm"],"application/vnd.rn-realmedia-vbr":["rmvb"],"application/vnd.route66.link66+xml":["link66"],"application/vnd.sailingtracker.track":["st"],"application/vnd.seemail":["see"],"application/vnd.sema":["sema"],"application/vnd.semd":["semd"],"application/vnd.semf":["semf"],"application/vnd.shana.informed.formdata":["ifm"],"application/vnd.shana.informed.formtemplate":["itp"],"application/vnd.shana.informed.interchange":["iif"],"application/vnd.shana.informed.package":["ipk"],"application/vnd.simtech-mindmapper":["twd","twds"],"application/vnd.smaf":["mmf"],"application/vnd.smart.teacher":["teacher"],"application/vnd.software602.filler.form+xml":["fo"],"application/vnd.solent.sdkm+xml":["sdkm","sdkd"],"application/vnd.spotfire.dxp":["dxp"],"application/vnd.spotfire.sfs":["sfs"],"application/vnd.stardivision.calc":["sdc"],"application/vnd.stardivision.draw":["sda"],"application/vnd.stardivision.impress":["sdd"],"application/vnd.stardivision.math":["smf"],"application/vnd.stardivision.writer":["sdw","vor"],"application/vnd.stardivision.writer-global":["sgl"],"application/vnd.stepmania.package":["smzip"],"application/vnd.stepmania.stepchart":["sm"],"application/vnd.sun.wadl+xml":["wadl"],"application/vnd.sun.xml.calc":["sxc"],"application/vnd.sun.xml.calc.template":["stc"],"application/vnd.sun.xml.draw":["sxd"],"application/vnd.sun.xml.draw.template":["std"],"application/vnd.sun.xml.impress":["sxi"],"application/vnd.sun.xml.impress.template":["sti"],"application/vnd.sun.xml.math":["sxm"],"application/vnd.sun.xml.writer":["sxw"],"application/vnd.sun.xml.writer.global":["sxg"],"application/vnd.sun.xml.writer.template":["stw"],"application/vnd.sus-calendar":["sus","susp"],"application/vnd.svd":["svd"],"application/vnd.symbian.install":["sis","sisx"],"application/vnd.syncml+xml":["xsm"],"application/vnd.syncml.dm+wbxml":["bdm"],"application/vnd.syncml.dm+xml":["xdm"],"application/vnd.syncml.dmddf+xml":["ddf"],"application/vnd.tao.intent-module-archive":["tao"],"application/vnd.tcpdump.pcap":["pcap","cap","dmp"],"application/vnd.tmobile-livetv":["tmo"],"application/vnd.trid.tpt":["tpt"],"application/vnd.triscape.mxs":["mxs"],"application/vnd.trueapp":["tra"],"application/vnd.ufdl":["ufd","ufdl"],"application/vnd.uiq.theme":["utz"],"application/vnd.umajin":["umj"],"application/vnd.unity":["unityweb"],"application/vnd.uoml+xml":["uoml","uo"],"application/vnd.vcx":["vcx"],"application/vnd.visio":["vsd","vst","vss","vsw"],"application/vnd.visionary":["vis"],"application/vnd.vsf":["vsf"],"application/vnd.wap.wbxml":["wbxml"],"application/vnd.wap.wmlc":["wmlc"],"application/vnd.wap.wmlscriptc":["wmlsc"],"application/vnd.webturbo":["wtb"],"application/vnd.wolfram.player":["nbp"],"application/vnd.wordperfect":["wpd"],"application/vnd.wqd":["wqd"],"application/vnd.wt.stf":["stf"],"application/vnd.xara":["xar"],"application/vnd.xfdl":["xfdl"],"application/vnd.yamaha.hv-dic":["hvd"],"application/vnd.yamaha.hv-script":["hvs"],"application/vnd.yamaha.hv-voice":["hvp"],"application/vnd.yamaha.openscoreformat":["osf"],"application/vnd.yamaha.openscoreformat.osfpvg+xml":["osfpvg"],"application/vnd.yamaha.smaf-audio":["saf"],"application/vnd.yamaha.smaf-phrase":["spf"],"application/vnd.yellowriver-custom-menu":["cmp"],"application/vnd.zul":["zir","zirz"],"application/vnd.zzazz.deck+xml":["zaz"],"application/x-7z-compressed":["7z"],"application/x-abiword":["abw"],"application/x-ace-compressed":["ace"],"application/x-apple-diskimage":["*dmg"],"application/x-arj":["arj"],"application/x-authorware-bin":["aab","x32","u32","vox"],"application/x-authorware-map":["aam"],"application/x-authorware-seg":["aas"],"application/x-bcpio":["bcpio"],"application/x-bdoc":["*bdoc"],"application/x-bittorrent":["torrent"],"application/x-blorb":["blb","blorb"],"application/x-bzip":["bz"],"application/x-bzip2":["bz2","boz"],"application/x-cbr":["cbr","cba","cbt","cbz","cb7"],"application/x-cdlink":["vcd"],"application/x-cfs-compressed":["cfs"],"application/x-chat":["chat"],"application/x-chess-pgn":["pgn"],"application/x-chrome-extension":["crx"],"application/x-cocoa":["cco"],"application/x-conference":["nsc"],"application/x-cpio":["cpio"],"application/x-csh":["csh"],"application/x-debian-package":["*deb","udeb"],"application/x-dgc-compressed":["dgc"],"application/x-director":["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"],"application/x-doom":["wad"],"application/x-dtbncx+xml":["ncx"],"application/x-dtbook+xml":["dtb"],"application/x-dtbresource+xml":["res"],"application/x-dvi":["dvi"],"application/x-envoy":["evy"],"application/x-eva":["eva"],"application/x-font-bdf":["bdf"],"application/x-font-ghostscript":["gsf"],"application/x-font-linux-psf":["psf"],"application/x-font-pcf":["pcf"],"application/x-font-snf":["snf"],"application/x-font-type1":["pfa","pfb","pfm","afm"],"application/x-freearc":["arc"],"application/x-futuresplash":["spl"],"application/x-gca-compressed":["gca"],"application/x-glulx":["ulx"],"application/x-gnumeric":["gnumeric"],"application/x-gramps-xml":["gramps"],"application/x-gtar":["gtar"],"application/x-hdf":["hdf"],"application/x-httpd-php":["php"],"application/x-install-instructions":["install"],"application/x-iso9660-image":["*iso"],"application/x-iwork-keynote-sffkey":["*key"],"application/x-iwork-numbers-sffnumbers":["*numbers"],"application/x-iwork-pages-sffpages":["*pages"],"application/x-java-archive-diff":["jardiff"],"application/x-java-jnlp-file":["jnlp"],"application/x-keepass2":["kdbx"],"application/x-latex":["latex"],"application/x-lua-bytecode":["luac"],"application/x-lzh-compressed":["lzh","lha"],"application/x-makeself":["run"],"application/x-mie":["mie"],"application/x-mobipocket-ebook":["*prc","mobi"],"application/x-ms-application":["application"],"application/x-ms-shortcut":["lnk"],"application/x-ms-wmd":["wmd"],"application/x-ms-wmz":["wmz"],"application/x-ms-xbap":["xbap"],"application/x-msaccess":["mdb"],"application/x-msbinder":["obd"],"application/x-mscardfile":["crd"],"application/x-msclip":["clp"],"application/x-msdos-program":["*exe"],"application/x-msdownload":["*exe","*dll","com","bat","*msi"],"application/x-msmediaview":["mvb","m13","m14"],"application/x-msmetafile":["*wmf","*wmz","*emf","emz"],"application/x-msmoney":["mny"],"application/x-mspublisher":["pub"],"application/x-msschedule":["scd"],"application/x-msterminal":["trm"],"application/x-mswrite":["wri"],"application/x-netcdf":["nc","cdf"],"application/x-ns-proxy-autoconfig":["pac"],"application/x-nzb":["nzb"],"application/x-perl":["pl","pm"],"application/x-pilot":["*prc","*pdb"],"application/x-pkcs12":["p12","pfx"],"application/x-pkcs7-certificates":["p7b","spc"],"application/x-pkcs7-certreqresp":["p7r"],"application/x-rar-compressed":["*rar"],"application/x-redhat-package-manager":["rpm"],"application/x-research-info-systems":["ris"],"application/x-sea":["sea"],"application/x-sh":["sh"],"application/x-shar":["shar"],"application/x-shockwave-flash":["swf"],"application/x-silverlight-app":["xap"],"application/x-sql":["*sql"],"application/x-stuffit":["sit"],"application/x-stuffitx":["sitx"],"application/x-subrip":["srt"],"application/x-sv4cpio":["sv4cpio"],"application/x-sv4crc":["sv4crc"],"application/x-t3vm-image":["t3"],"application/x-tads":["gam"],"application/x-tar":["tar"],"application/x-tcl":["tcl","tk"],"application/x-tex":["tex"],"application/x-tex-tfm":["tfm"],"application/x-texinfo":["texinfo","texi"],"application/x-tgif":["*obj"],"application/x-ustar":["ustar"],"application/x-virtualbox-hdd":["hdd"],"application/x-virtualbox-ova":["ova"],"application/x-virtualbox-ovf":["ovf"],"application/x-virtualbox-vbox":["vbox"],"application/x-virtualbox-vbox-extpack":["vbox-extpack"],"application/x-virtualbox-vdi":["vdi"],"application/x-virtualbox-vhd":["vhd"],"application/x-virtualbox-vmdk":["vmdk"],"application/x-wais-source":["src"],"application/x-web-app-manifest+json":["webapp"],"application/x-x509-ca-cert":["der","crt","pem"],"application/x-xfig":["fig"],"application/x-xliff+xml":["*xlf"],"application/x-xpinstall":["xpi"],"application/x-xz":["xz"],"application/x-zmachine":["z1","z2","z3","z4","z5","z6","z7","z8"],"audio/vnd.dece.audio":["uva","uvva"],"audio/vnd.digital-winds":["eol"],"audio/vnd.dra":["dra"],"audio/vnd.dts":["dts"],"audio/vnd.dts.hd":["dtshd"],"audio/vnd.lucent.voice":["lvp"],"audio/vnd.ms-playready.media.pya":["pya"],"audio/vnd.nuera.ecelp4800":["ecelp4800"],"audio/vnd.nuera.ecelp7470":["ecelp7470"],"audio/vnd.nuera.ecelp9600":["ecelp9600"],"audio/vnd.rip":["rip"],"audio/x-aac":["*aac"],"audio/x-aiff":["aif","aiff","aifc"],"audio/x-caf":["caf"],"audio/x-flac":["flac"],"audio/x-m4a":["*m4a"],"audio/x-matroska":["mka"],"audio/x-mpegurl":["m3u"],"audio/x-ms-wax":["wax"],"audio/x-ms-wma":["wma"],"audio/x-pn-realaudio":["ram","ra"],"audio/x-pn-realaudio-plugin":["rmp"],"audio/x-realaudio":["*ra"],"audio/x-wav":["*wav"],"chemical/x-cdx":["cdx"],"chemical/x-cif":["cif"],"chemical/x-cmdf":["cmdf"],"chemical/x-cml":["cml"],"chemical/x-csml":["csml"],"chemical/x-xyz":["xyz"],"image/prs.btif":["btif","btf"],"image/prs.pti":["pti"],"image/vnd.adobe.photoshop":["psd"],"image/vnd.airzip.accelerator.azv":["azv"],"image/vnd.dece.graphic":["uvi","uvvi","uvg","uvvg"],"image/vnd.djvu":["djvu","djv"],"image/vnd.dvb.subtitle":["*sub"],"image/vnd.dwg":["dwg"],"image/vnd.dxf":["dxf"],"image/vnd.fastbidsheet":["fbs"],"image/vnd.fpx":["fpx"],"image/vnd.fst":["fst"],"image/vnd.fujixerox.edmics-mmr":["mmr"],"image/vnd.fujixerox.edmics-rlc":["rlc"],"image/vnd.microsoft.icon":["ico"],"image/vnd.ms-dds":["dds"],"image/vnd.ms-modi":["mdi"],"image/vnd.ms-photo":["wdp"],"image/vnd.net-fpx":["npx"],"image/vnd.pco.b16":["b16"],"image/vnd.tencent.tap":["tap"],"image/vnd.valve.source.texture":["vtf"],"image/vnd.wap.wbmp":["wbmp"],"image/vnd.xiff":["xif"],"image/vnd.zbrush.pcx":["pcx"],"image/x-3ds":["3ds"],"image/x-cmu-raster":["ras"],"image/x-cmx":["cmx"],"image/x-freehand":["fh","fhc","fh4","fh5","fh7"],"image/x-icon":["*ico"],"image/x-jng":["jng"],"image/x-mrsid-image":["sid"],"image/x-ms-bmp":["*bmp"],"image/x-pcx":["*pcx"],"image/x-pict":["pic","pct"],"image/x-portable-anymap":["pnm"],"image/x-portable-bitmap":["pbm"],"image/x-portable-graymap":["pgm"],"image/x-portable-pixmap":["ppm"],"image/x-rgb":["rgb"],"image/x-tga":["tga"],"image/x-xbitmap":["xbm"],"image/x-xpixmap":["xpm"],"image/x-xwindowdump":["xwd"],"message/vnd.wfa.wsc":["wsc"],"model/vnd.cld":["cld"],"model/vnd.collada+xml":["dae"],"model/vnd.dwf":["dwf"],"model/vnd.gdl":["gdl"],"model/vnd.gtw":["gtw"],"model/vnd.mts":["mts"],"model/vnd.opengex":["ogex"],"model/vnd.parasolid.transmit.binary":["x_b"],"model/vnd.parasolid.transmit.text":["x_t"],"model/vnd.pytha.pyox":["pyo","pyox"],"model/vnd.sap.vds":["vds"],"model/vnd.usda":["usda"],"model/vnd.usdz+zip":["usdz"],"model/vnd.valve.source.compiled-map":["bsp"],"model/vnd.vtu":["vtu"],"text/prs.lines.tag":["dsc"],"text/vnd.curl":["curl"],"text/vnd.curl.dcurl":["dcurl"],"text/vnd.curl.mcurl":["mcurl"],"text/vnd.curl.scurl":["scurl"],"text/vnd.dvb.subtitle":["sub"],"text/vnd.familysearch.gedcom":["ged"],"text/vnd.fly":["fly"],"text/vnd.fmi.flexstor":["flx"],"text/vnd.graphviz":["gv"],"text/vnd.in3d.3dml":["3dml"],"text/vnd.in3d.spot":["spot"],"text/vnd.sun.j2me.app-descriptor":["jad"],"text/vnd.wap.wml":["wml"],"text/vnd.wap.wmlscript":["wmls"],"text/x-asm":["s","asm"],"text/x-c":["c","cc","cxx","cpp","h","hh","dic"],"text/x-component":["htc"],"text/x-fortran":["f","for","f77","f90"],"text/x-handlebars-template":["hbs"],"text/x-java-source":["java"],"text/x-lua":["lua"],"text/x-markdown":["mkd"],"text/x-nfo":["nfo"],"text/x-opml":["opml"],"text/x-org":["*org"],"text/x-pascal":["p","pas"],"text/x-processing":["pde"],"text/x-sass":["sass"],"text/x-scss":["scss"],"text/x-setext":["etx"],"text/x-sfv":["sfv"],"text/x-suse-ymp":["ymp"],"text/x-uuencode":["uu"],"text/x-vcalendar":["vcs"],"text/x-vcard":["vcf"],"video/vnd.dece.hd":["uvh","uvvh"],"video/vnd.dece.mobile":["uvm","uvvm"],"video/vnd.dece.pd":["uvp","uvvp"],"video/vnd.dece.sd":["uvs","uvvs"],"video/vnd.dece.video":["uvv","uvvv"],"video/vnd.dvb.file":["dvb"],"video/vnd.fvt":["fvt"],"video/vnd.mpegurl":["mxu","m4u"],"video/vnd.ms-playready.media.pyv":["pyv"],"video/vnd.uvvu.mp4":["uvu","uvvu"],"video/vnd.vivo":["viv"],"video/x-f4v":["f4v"],"video/x-fli":["fli"],"video/x-flv":["flv"],"video/x-m4v":["m4v"],"video/x-matroska":["mkv","mk3d","mks"],"video/x-mng":["mng"],"video/x-ms-asf":["asf","asx"],"video/x-ms-vob":["vob"],"video/x-ms-wm":["wm"],"video/x-ms-wmv":["wmv"],"video/x-ms-wmx":["wmx"],"video/x-ms-wvx":["wvx"],"video/x-msvideo":["avi"],"video/x-sgi-movie":["movie"],"video/x-smv":["smv"],"x-conference/x-cooltalk":["ice"]};Object.freeze(No);var Bo=No;var ko={"application/andrew-inset":["ez"],"application/appinstaller":["appinstaller"],"application/applixware":["aw"],"application/appx":["appx"],"application/appxbundle":["appxbundle"],"application/atom+xml":["atom"],"application/atomcat+xml":["atomcat"],"application/atomdeleted+xml":["atomdeleted"],"application/atomsvc+xml":["atomsvc"],"application/atsc-dwd+xml":["dwd"],"application/atsc-held+xml":["held"],"application/atsc-rsat+xml":["rsat"],"application/automationml-aml+xml":["aml"],"application/automationml-amlx+zip":["amlx"],"application/bdoc":["bdoc"],"application/calendar+xml":["xcs"],"application/ccxml+xml":["ccxml"],"application/cdfx+xml":["cdfx"],"application/cdmi-capability":["cdmia"],"application/cdmi-container":["cdmic"],"application/cdmi-domain":["cdmid"],"application/cdmi-object":["cdmio"],"application/cdmi-queue":["cdmiq"],"application/cpl+xml":["cpl"],"application/cu-seeme":["cu"],"application/cwl":["cwl"],"application/dash+xml":["mpd"],"application/dash-patch+xml":["mpp"],"application/davmount+xml":["davmount"],"application/docbook+xml":["dbk"],"application/dssc+der":["dssc"],"application/dssc+xml":["xdssc"],"application/ecmascript":["ecma"],"application/emma+xml":["emma"],"application/emotionml+xml":["emotionml"],"application/epub+zip":["epub"],"application/exi":["exi"],"application/express":["exp"],"application/fdf":["fdf"],"application/fdt+xml":["fdt"],"application/font-tdpfr":["pfr"],"application/geo+json":["geojson"],"application/gml+xml":["gml"],"application/gpx+xml":["gpx"],"application/gxf":["gxf"],"application/gzip":["gz"],"application/hjson":["hjson"],"application/hyperstudio":["stk"],"application/inkml+xml":["ink","inkml"],"application/ipfix":["ipfix"],"application/its+xml":["its"],"application/java-archive":["jar","war","ear"],"application/java-serialized-object":["ser"],"application/java-vm":["class"],"application/javascript":["*js"],"application/json":["json","map"],"application/json5":["json5"],"application/jsonml+json":["jsonml"],"application/ld+json":["jsonld"],"application/lgr+xml":["lgr"],"application/lost+xml":["lostxml"],"application/mac-binhex40":["hqx"],"application/mac-compactpro":["cpt"],"application/mads+xml":["mads"],"application/manifest+json":["webmanifest"],"application/marc":["mrc"],"application/marcxml+xml":["mrcx"],"application/mathematica":["ma","nb","mb"],"application/mathml+xml":["mathml"],"application/mbox":["mbox"],"application/media-policy-dataset+xml":["mpf"],"application/mediaservercontrol+xml":["mscml"],"application/metalink+xml":["metalink"],"application/metalink4+xml":["meta4"],"application/mets+xml":["mets"],"application/mmt-aei+xml":["maei"],"application/mmt-usd+xml":["musd"],"application/mods+xml":["mods"],"application/mp21":["m21","mp21"],"application/mp4":["*mp4","*mpg4","mp4s","m4p"],"application/msix":["msix"],"application/msixbundle":["msixbundle"],"application/msword":["doc","dot"],"application/mxf":["mxf"],"application/n-quads":["nq"],"application/n-triples":["nt"],"application/node":["cjs"],"application/octet-stream":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"],"application/oda":["oda"],"application/oebps-package+xml":["opf"],"application/ogg":["ogx"],"application/omdoc+xml":["omdoc"],"application/onenote":["onetoc","onetoc2","onetmp","onepkg"],"application/oxps":["oxps"],"application/p2p-overlay+xml":["relo"],"application/patch-ops-error+xml":["xer"],"application/pdf":["pdf"],"application/pgp-encrypted":["pgp"],"application/pgp-keys":["asc"],"application/pgp-signature":["sig","*asc"],"application/pics-rules":["prf"],"application/pkcs10":["p10"],"application/pkcs7-mime":["p7m","p7c"],"application/pkcs7-signature":["p7s"],"application/pkcs8":["p8"],"application/pkix-attr-cert":["ac"],"application/pkix-cert":["cer"],"application/pkix-crl":["crl"],"application/pkix-pkipath":["pkipath"],"application/pkixcmp":["pki"],"application/pls+xml":["pls"],"application/postscript":["ai","eps","ps"],"application/provenance+xml":["provx"],"application/pskc+xml":["pskcxml"],"application/raml+yaml":["raml"],"application/rdf+xml":["rdf","owl"],"application/reginfo+xml":["rif"],"application/relax-ng-compact-syntax":["rnc"],"application/resource-lists+xml":["rl"],"application/resource-lists-diff+xml":["rld"],"application/rls-services+xml":["rs"],"application/route-apd+xml":["rapd"],"application/route-s-tsid+xml":["sls"],"application/route-usd+xml":["rusd"],"application/rpki-ghostbusters":["gbr"],"application/rpki-manifest":["mft"],"application/rpki-roa":["roa"],"application/rsd+xml":["rsd"],"application/rss+xml":["rss"],"application/rtf":["rtf"],"application/sbml+xml":["sbml"],"application/scvp-cv-request":["scq"],"application/scvp-cv-response":["scs"],"application/scvp-vp-request":["spq"],"application/scvp-vp-response":["spp"],"application/sdp":["sdp"],"application/senml+xml":["senmlx"],"application/sensml+xml":["sensmlx"],"application/set-payment-initiation":["setpay"],"application/set-registration-initiation":["setreg"],"application/shf+xml":["shf"],"application/sieve":["siv","sieve"],"application/smil+xml":["smi","smil"],"application/sparql-query":["rq"],"application/sparql-results+xml":["srx"],"application/sql":["sql"],"application/srgs":["gram"],"application/srgs+xml":["grxml"],"application/sru+xml":["sru"],"application/ssdl+xml":["ssdl"],"application/ssml+xml":["ssml"],"application/swid+xml":["swidtag"],"application/tei+xml":["tei","teicorpus"],"application/thraud+xml":["tfi"],"application/timestamped-data":["tsd"],"application/toml":["toml"],"application/trig":["trig"],"application/ttml+xml":["ttml"],"application/ubjson":["ubj"],"application/urc-ressheet+xml":["rsheet"],"application/urc-targetdesc+xml":["td"],"application/voicexml+xml":["vxml"],"application/wasm":["wasm"],"application/watcherinfo+xml":["wif"],"application/widget":["wgt"],"application/winhlp":["hlp"],"application/wsdl+xml":["wsdl"],"application/wspolicy+xml":["wspolicy"],"application/xaml+xml":["xaml"],"application/xcap-att+xml":["xav"],"application/xcap-caps+xml":["xca"],"application/xcap-diff+xml":["xdf"],"application/xcap-el+xml":["xel"],"application/xcap-ns+xml":["xns"],"application/xenc+xml":["xenc"],"application/xfdf":["xfdf"],"application/xhtml+xml":["xhtml","xht"],"application/xliff+xml":["xlf"],"application/xml":["xml","xsl","xsd","rng"],"application/xml-dtd":["dtd"],"application/xop+xml":["xop"],"application/xproc+xml":["xpl"],"application/xslt+xml":["*xsl","xslt"],"application/xspf+xml":["xspf"],"application/xv+xml":["mxml","xhvml","xvml","xvm"],"application/yang":["yang"],"application/yin+xml":["yin"],"application/zip":["zip"],"audio/3gpp":["*3gpp"],"audio/aac":["adts","aac"],"audio/adpcm":["adp"],"audio/amr":["amr"],"audio/basic":["au","snd"],"audio/midi":["mid","midi","kar","rmi"],"audio/mobile-xmf":["mxmf"],"audio/mp3":["*mp3"],"audio/mp4":["m4a","mp4a"],"audio/mpeg":["mpga","mp2","mp2a","mp3","m2a","m3a"],"audio/ogg":["oga","ogg","spx","opus"],"audio/s3m":["s3m"],"audio/silk":["sil"],"audio/wav":["wav"],"audio/wave":["*wav"],"audio/webm":["weba"],"audio/xm":["xm"],"font/collection":["ttc"],"font/otf":["otf"],"font/ttf":["ttf"],"font/woff":["woff"],"font/woff2":["woff2"],"image/aces":["exr"],"image/apng":["apng"],"image/avci":["avci"],"image/avcs":["avcs"],"image/avif":["avif"],"image/bmp":["bmp","dib"],"image/cgm":["cgm"],"image/dicom-rle":["drle"],"image/dpx":["dpx"],"image/emf":["emf"],"image/fits":["fits"],"image/g3fax":["g3"],"image/gif":["gif"],"image/heic":["heic"],"image/heic-sequence":["heics"],"image/heif":["heif"],"image/heif-sequence":["heifs"],"image/hej2k":["hej2"],"image/hsj2":["hsj2"],"image/ief":["ief"],"image/jls":["jls"],"image/jp2":["jp2","jpg2"],"image/jpeg":["jpeg","jpg","jpe"],"image/jph":["jph"],"image/jphc":["jhc"],"image/jpm":["jpm","jpgm"],"image/jpx":["jpx","jpf"],"image/jxr":["jxr"],"image/jxra":["jxra"],"image/jxrs":["jxrs"],"image/jxs":["jxs"],"image/jxsc":["jxsc"],"image/jxsi":["jxsi"],"image/jxss":["jxss"],"image/ktx":["ktx"],"image/ktx2":["ktx2"],"image/png":["png"],"image/sgi":["sgi"],"image/svg+xml":["svg","svgz"],"image/t38":["t38"],"image/tiff":["tif","tiff"],"image/tiff-fx":["tfx"],"image/webp":["webp"],"image/wmf":["wmf"],"message/disposition-notification":["disposition-notification"],"message/global":["u8msg"],"message/global-delivery-status":["u8dsn"],"message/global-disposition-notification":["u8mdn"],"message/global-headers":["u8hdr"],"message/rfc822":["eml","mime"],"model/3mf":["3mf"],"model/gltf+json":["gltf"],"model/gltf-binary":["glb"],"model/iges":["igs","iges"],"model/jt":["jt"],"model/mesh":["msh","mesh","silo"],"model/mtl":["mtl"],"model/obj":["obj"],"model/prc":["prc"],"model/step+xml":["stpx"],"model/step+zip":["stpz"],"model/step-xml+zip":["stpxz"],"model/stl":["stl"],"model/u3d":["u3d"],"model/vrml":["wrl","vrml"],"model/x3d+binary":["*x3db","x3dbz"],"model/x3d+fastinfoset":["x3db"],"model/x3d+vrml":["*x3dv","x3dvz"],"model/x3d+xml":["x3d","x3dz"],"model/x3d-vrml":["x3dv"],"text/cache-manifest":["appcache","manifest"],"text/calendar":["ics","ifb"],"text/coffeescript":["coffee","litcoffee"],"text/css":["css"],"text/csv":["csv"],"text/html":["html","htm","shtml"],"text/jade":["jade"],"text/javascript":["js","mjs"],"text/jsx":["jsx"],"text/less":["less"],"text/markdown":["md","markdown"],"text/mathml":["mml"],"text/mdx":["mdx"],"text/n3":["n3"],"text/plain":["txt","text","conf","def","list","log","in","ini"],"text/richtext":["rtx"],"text/rtf":["*rtf"],"text/sgml":["sgml","sgm"],"text/shex":["shex"],"text/slim":["slim","slm"],"text/spdx":["spdx"],"text/stylus":["stylus","styl"],"text/tab-separated-values":["tsv"],"text/troff":["t","tr","roff","man","me","ms"],"text/turtle":["ttl"],"text/uri-list":["uri","uris","urls"],"text/vcard":["vcard"],"text/vtt":["vtt"],"text/wgsl":["wgsl"],"text/xml":["*xml"],"text/yaml":["yaml","yml"],"video/3gpp":["3gp","3gpp"],"video/3gpp2":["3g2"],"video/h261":["h261"],"video/h263":["h263"],"video/h264":["h264"],"video/iso.segment":["m4s"],"video/jpeg":["jpgv"],"video/jpm":["*jpm","*jpgm"],"video/mj2":["mj2","mjp2"],"video/mp2t":["ts"],"video/mp4":["mp4","mp4v","mpg4"],"video/mpeg":["mpeg","mpg","mpe","m1v","m2v"],"video/ogg":["ogv"],"video/quicktime":["qt","mov"],"video/webm":["webm"]};Object.freeze(ko);var Vo=ko;var we=function(e,t,i,a){if(i==="a"&&!a)throw new TypeError("Private accessor was defined without a getter");if(typeof t=="function"?e!==t||!a:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return i==="m"?a:i==="a"?a.call(e):a?a.value:t.get(e)},yt,Wt,lt,ya=class{constructor(...t){yt.set(this,new Map),Wt.set(this,new Map),lt.set(this,new Map);for(let i of t)this.define(i)}define(t,i=!1){for(let[a,n]of Object.entries(t)){a=a.toLowerCase(),n=n.map(r=>r.toLowerCase()),we(this,lt,"f").has(a)||we(this,lt,"f").set(a,new Set);let o=we(this,lt,"f").get(a),l=!0;for(let r of n){let s=r.startsWith("*");if(r=s?r.slice(1):r,o?.add(r),l&&we(this,Wt,"f").set(a,r),l=!1,s)continue;let p=we(this,yt,"f").get(r);if(p&&p!=a&&!i)throw new Error(`"${a} -> ${r}" conflicts with "${p} -> ${r}". Pass \`force=true\` to override this definition.`);we(this,yt,"f").set(r,a)}}return this}getType(t){if(typeof t!="string")return null;let i=t.replace(/^.*[/\\]/,"").toLowerCase(),a=i.replace(/^.*\./,"").toLowerCase(),n=i.length{throw new Error("define() not allowed for built-in Mime objects. See https://github.com/broofa/mime/blob/main/README.md#custom-mime-instances")},Object.freeze(this);for(let t of we(this,lt,"f").values())Object.freeze(t);return this}_getTestState(){return{types:we(this,yt,"f"),extensions:we(this,Wt,"f")}}};yt=new WeakMap,Wt=new WeakMap,lt=new WeakMap;var _a=ya;var Go=new _a(Vo,Bo)._freeze();var Uo=({addFilter:e,utils:t})=>{let{Type:i,replaceInString:a,toNaturalFileSize:n}=t;return e("ALLOW_HOPPER_ITEM",(o,{query:l})=>{if(!l("GET_ALLOW_FILE_SIZE_VALIDATION"))return!0;let r=l("GET_MAX_FILE_SIZE");if(r!==null&&o.size>r)return!1;let s=l("GET_MIN_FILE_SIZE");return!(s!==null&&o.sizenew Promise((r,s)=>{if(!l("GET_ALLOW_FILE_SIZE_VALIDATION"))return r(o);let p=l("GET_FILE_VALIDATE_SIZE_FILTER");if(p&&!p(o))return r(o);let c=l("GET_MAX_FILE_SIZE");if(c!==null&&o.size>c){s({status:{main:l("GET_LABEL_MAX_FILE_SIZE_EXCEEDED"),sub:a(l("GET_LABEL_MAX_FILE_SIZE"),{filesize:n(c,".",l("GET_FILE_SIZE_BASE"),l("GET_FILE_SIZE_LABELS",l))})}});return}let d=l("GET_MIN_FILE_SIZE");if(d!==null&&o.sizef+h.fileSize,0)>m){s({status:{main:l("GET_LABEL_MAX_TOTAL_FILE_SIZE_EXCEEDED"),sub:a(l("GET_LABEL_MAX_TOTAL_FILE_SIZE"),{filesize:n(m,".",l("GET_FILE_SIZE_BASE"),l("GET_FILE_SIZE_LABELS",l))})}});return}r(o)})),{options:{allowFileSizeValidation:[!0,i.BOOLEAN],maxFileSize:[null,i.INT],minFileSize:[null,i.INT],maxTotalFileSize:[null,i.INT],fileValidateSizeFilter:[null,i.FUNCTION],labelMinFileSizeExceeded:["File is too small",i.STRING],labelMinFileSize:["Minimum file size is {filesize}",i.STRING],labelMaxFileSizeExceeded:["File is too large",i.STRING],labelMaxFileSize:["Maximum file size is {filesize}",i.STRING],labelMaxTotalFileSizeExceeded:["Maximum total size exceeded",i.STRING],labelMaxTotalFileSize:["Maximum total file size is {filesize}",i.STRING]}}},Xp=typeof window<"u"&&typeof window.document<"u";Xp&&document.dispatchEvent(new CustomEvent("FilePond:pluginloaded",{detail:Uo}));var Wo=Uo;var Ho=({addFilter:e,utils:t})=>{let{Type:i,isString:a,replaceInString:n,guesstimateMimeType:o,getExtensionFromFilename:l,getFilenameFromURL:r}=t,s=(u,f)=>{let h=(/^[^/]+/.exec(u)||[]).pop(),g=f.slice(0,-2);return h===g},p=(u,f)=>u.some(h=>/\*$/.test(h)?s(f,h):h===f),c=u=>{let f="";if(a(u)){let h=r(u),g=l(h);g&&(f=o(g))}else f=u.type;return f},d=(u,f,h)=>{if(f.length===0)return!0;let g=c(u);return h?new Promise((I,E)=>{h(u,g).then(T=>{p(f,T)?I():E()}).catch(E)}):p(f,g)},m=u=>f=>u[f]===null?!1:u[f]||f;return e("SET_ATTRIBUTE_TO_OPTION_MAP",u=>Object.assign(u,{accept:"acceptedFileTypes"})),e("ALLOW_HOPPER_ITEM",(u,{query:f})=>f("GET_ALLOW_FILE_TYPE_VALIDATION")?d(u,f("GET_ACCEPTED_FILE_TYPES")):!0),e("LOAD_FILE",(u,{query:f})=>new Promise((h,g)=>{if(!f("GET_ALLOW_FILE_TYPE_VALIDATION")){h(u);return}let I=f("GET_ACCEPTED_FILE_TYPES"),E=f("GET_FILE_VALIDATE_TYPE_DETECT_TYPE"),T=d(u,I,E),v=()=>{let y=I.map(m(f("GET_FILE_VALIDATE_TYPE_LABEL_EXPECTED_TYPES_MAP"))).filter(w=>w!==!1),b=y.filter((w,x)=>y.indexOf(w)===x);g({status:{main:f("GET_LABEL_FILE_TYPE_NOT_ALLOWED"),sub:n(f("GET_FILE_VALIDATE_TYPE_LABEL_EXPECTED_TYPES"),{allTypes:b.join(", "),allButLastType:b.slice(0,-1).join(", "),lastType:b[b.length-1]})}})};if(typeof T=="boolean")return T?h(u):v();T.then(()=>{h(u)}).catch(v)})),{options:{allowFileTypeValidation:[!0,i.BOOLEAN],acceptedFileTypes:[[],i.ARRAY],labelFileTypeNotAllowed:["File is of invalid type",i.STRING],fileValidateTypeLabelExpectedTypes:["Expects {allButLastType} or {lastType}",i.STRING],fileValidateTypeLabelExpectedTypesMap:[{},i.OBJECT],fileValidateTypeDetectType:[null,i.FUNCTION]}}},Qp=typeof window<"u"&&typeof window.document<"u";Qp&&document.dispatchEvent(new CustomEvent("FilePond:pluginloaded",{detail:Ho}));var jo=Ho;var Yo=e=>/^image/.test(e.type),qo=({addFilter:e,utils:t})=>{let{Type:i,isFile:a,getNumericAspectRatioFromString:n}=t,o=(p,c)=>!(!Yo(p.file)||!c("GET_ALLOW_IMAGE_CROP")),l=p=>typeof p=="object",r=p=>typeof p=="number",s=(p,c)=>p.setMetadata("crop",Object.assign({},p.getMetadata("crop"),c));return e("DID_CREATE_ITEM",(p,{query:c})=>{p.extend("setImageCrop",d=>{if(!(!o(p,c)||!l(center)))return p.setMetadata("crop",d),d}),p.extend("setImageCropCenter",d=>{if(!(!o(p,c)||!l(d)))return s(p,{center:d})}),p.extend("setImageCropZoom",d=>{if(!(!o(p,c)||!r(d)))return s(p,{zoom:Math.max(1,d)})}),p.extend("setImageCropRotation",d=>{if(!(!o(p,c)||!r(d)))return s(p,{rotation:d})}),p.extend("setImageCropFlip",d=>{if(!(!o(p,c)||!l(d)))return s(p,{flip:d})}),p.extend("setImageCropAspectRatio",d=>{if(!o(p,c)||typeof d>"u")return;let m=p.getMetadata("crop"),u=n(d),f={center:{x:.5,y:.5},flip:m?Object.assign({},m.flip):{horizontal:!1,vertical:!1},rotation:0,zoom:1,aspectRatio:u};return p.setMetadata("crop",f),f})}),e("DID_LOAD_ITEM",(p,{query:c})=>new Promise((d,m)=>{let u=p.file;if(!a(u)||!Yo(u)||!c("GET_ALLOW_IMAGE_CROP")||p.getMetadata("crop"))return d(p);let h=c("GET_IMAGE_CROP_ASPECT_RATIO");p.setMetadata("crop",{center:{x:.5,y:.5},flip:{horizontal:!1,vertical:!1},rotation:0,zoom:1,aspectRatio:h?n(h):null}),d(p)})),{options:{allowImageCrop:[!0,i.BOOLEAN],imageCropAspectRatio:[null,i.STRING]}}},Zp=typeof window<"u"&&typeof window.document<"u";Zp&&document.dispatchEvent(new CustomEvent("FilePond:pluginloaded",{detail:qo}));var $o=qo;var Ra=e=>/^image/.test(e.type),Xo=e=>{let{addFilter:t,utils:i,views:a}=e,{Type:n,createRoute:o,createItemAPI:l=c=>c}=i,{fileActionButton:r}=a;t("SHOULD_REMOVE_ON_REVERT",(c,{item:d,query:m})=>new Promise(u=>{let{file:f}=d,h=m("GET_ALLOW_IMAGE_EDIT")&&m("GET_IMAGE_EDIT_ALLOW_EDIT")&&Ra(f);u(!h)})),t("DID_LOAD_ITEM",(c,{query:d,dispatch:m})=>new Promise((u,f)=>{if(c.origin>1){u(c);return}let{file:h}=c;if(!d("GET_ALLOW_IMAGE_EDIT")||!d("GET_IMAGE_EDIT_INSTANT_EDIT")){u(c);return}if(!Ra(h)){u(c);return}let g=(E,T,v)=>y=>{s.shift(),y?T(E):v(E),m("KICK"),I()},I=()=>{if(!s.length)return;let{item:E,resolve:T,reject:v}=s[0];m("EDIT_ITEM",{id:E.id,handleEditorResponse:g(E,T,v)})};p({item:c,resolve:u,reject:f}),s.length===1&&I()})),t("DID_CREATE_ITEM",(c,{query:d,dispatch:m})=>{c.extend("edit",()=>{m("EDIT_ITEM",{id:c.id})})});let s=[],p=c=>(s.push(c),c);return t("CREATE_VIEW",c=>{let{is:d,view:m,query:u}=c;if(!u("GET_ALLOW_IMAGE_EDIT"))return;let f=u("GET_ALLOW_IMAGE_PREVIEW");if(!(d("file-info")&&!f||d("file")&&f))return;let g=u("GET_IMAGE_EDIT_EDITOR");if(!g)return;g.filepondCallbackBridge||(g.outputData=!0,g.outputFile=!1,g.filepondCallbackBridge={onconfirm:g.onconfirm||(()=>{}),oncancel:g.oncancel||(()=>{})});let I=({root:v,props:y,action:b})=>{let{id:w}=y,{handleEditorResponse:x}=b;g.cropAspectRatio=v.query("GET_IMAGE_CROP_ASPECT_RATIO")||g.cropAspectRatio,g.outputCanvasBackgroundColor=v.query("GET_IMAGE_TRANSFORM_CANVAS_BACKGROUND_COLOR")||g.outputCanvasBackgroundColor;let _=v.query("GET_ITEM",w);if(!_)return;let P=_.file,O=_.getMetadata("crop"),M={center:{x:.5,y:.5},flip:{horizontal:!1,vertical:!1},zoom:1,rotation:0,aspectRatio:null},C=_.getMetadata("resize"),S=_.getMetadata("filter")||null,F=_.getMetadata("filters")||null,R=_.getMetadata("colors")||null,L=_.getMetadata("markup")||null,z={crop:O||M,size:C?{upscale:C.upscale,mode:C.mode,width:C.size.width,height:C.size.height}:null,filter:F?F.id||F.matrix:v.query("GET_ALLOW_IMAGE_FILTER")&&v.query("GET_IMAGE_FILTER_COLOR_MATRIX")&&!R?S:null,color:R,markup:L};g.onconfirm=({data:D})=>{let{crop:k,size:B,filter:X,color:q,colorMatrix:Q,markup:pe}=D,G={};if(k&&(G.crop=k),B){let H=(_.getMetadata("resize")||{}).size,Y={width:B.width,height:B.height};!(Y.width&&Y.height)&&H&&(Y.width=H.width,Y.height=H.height),(Y.width||Y.height)&&(G.resize={upscale:B.upscale,mode:B.mode,size:Y})}pe&&(G.markup=pe),G.colors=q,G.filters=X,G.filter=Q,_.setMetadata(G),g.filepondCallbackBridge.onconfirm(D,l(_)),x&&(g.onclose=()=>{x(!0),g.onclose=null})},g.oncancel=()=>{g.filepondCallbackBridge.oncancel(l(_)),x&&(g.onclose=()=>{x(!1),g.onclose=null})},g.open(P,z)},E=({root:v,props:y})=>{if(!u("GET_IMAGE_EDIT_ALLOW_EDIT"))return;let{id:b}=y,w=u("GET_ITEM",b);if(!w)return;let x=w.file;if(Ra(x))if(v.ref.handleEdit=_=>{_.stopPropagation(),v.dispatch("EDIT_ITEM",{id:b})},f){let _=m.createChildView(r,{label:"edit",icon:u("GET_IMAGE_EDIT_ICON_EDIT"),opacity:0});_.element.classList.add("filepond--action-edit-item"),_.element.dataset.align=u("GET_STYLE_IMAGE_EDIT_BUTTON_EDIT_ITEM_POSITION"),_.on("click",v.ref.handleEdit),v.ref.buttonEditItem=m.appendChildView(_)}else{let _=m.element.querySelector(".filepond--file-info-main"),P=document.createElement("button");P.className="filepond--action-edit-item-alt",P.innerHTML=u("GET_IMAGE_EDIT_ICON_EDIT")+"edit",P.addEventListener("click",v.ref.handleEdit),_.appendChild(P),v.ref.editButton=P}};m.registerDestroyer(({root:v})=>{v.ref.buttonEditItem&&v.ref.buttonEditItem.off("click",v.ref.handleEdit),v.ref.editButton&&v.ref.editButton.removeEventListener("click",v.ref.handleEdit)});let T={EDIT_ITEM:I,DID_LOAD_ITEM:E};if(f){let v=({root:y})=>{y.ref.buttonEditItem&&(y.ref.buttonEditItem.opacity=1)};T.DID_IMAGE_PREVIEW_SHOW=v}m.registerWriter(o(T))}),{options:{allowImageEdit:[!0,n.BOOLEAN],styleImageEditButtonEditItemPosition:["bottom center",n.STRING],imageEditInstantEdit:[!1,n.BOOLEAN],imageEditAllowEdit:[!0,n.BOOLEAN],imageEditIconEdit:['',n.STRING],imageEditEditor:[null,n.OBJECT]}}},Kp=typeof window<"u"&&typeof window.document<"u";Kp&&document.dispatchEvent(new CustomEvent("FilePond:pluginloaded",{detail:Xo}));var Qo=Xo;var Jp=e=>/^image\/jpeg/.test(e.type),rt={JPEG:65496,APP1:65505,EXIF:1165519206,TIFF:18761,Orientation:274,Unknown:65280},st=(e,t,i=!1)=>e.getUint16(t,i),Zo=(e,t,i=!1)=>e.getUint32(t,i),em=e=>new Promise((t,i)=>{let a=new FileReader;a.onload=function(n){let o=new DataView(n.target.result);if(st(o,0)!==rt.JPEG){t(-1);return}let l=o.byteLength,r=2;for(;rtypeof window<"u"&&typeof window.document<"u")(),im=()=>tm,am="data:image/jpg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/4QA6RXhpZgAATU0AKgAAAAgAAwESAAMAAAABAAYAAAEoAAMAAAABAAIAAAITAAMAAAABAAEAAAAAAAD/2wBDAP//////////////////////////////////////////////////////////////////////////////////////wAALCAABAAIBASIA/8QAJgABAAAAAAAAAAAAAAAAAAAAAxABAAAAAAAAAAAAAAAAAAAAAP/aAAgBAQAAPwBH/9k=",Ko,Ti=im()?new Image:{};Ti.onload=()=>Ko=Ti.naturalWidth>Ti.naturalHeight;Ti.src=am;var nm=()=>Ko,Jo=({addFilter:e,utils:t})=>{let{Type:i,isFile:a}=t;return e("DID_LOAD_ITEM",(n,{query:o})=>new Promise((l,r)=>{let s=n.file;if(!a(s)||!Jp(s)||!o("GET_ALLOW_IMAGE_EXIF_ORIENTATION")||!nm())return l(n);em(s).then(p=>{n.setMetadata("exif",{orientation:p}),l(n)})})),{options:{allowImageExifOrientation:[!0,i.BOOLEAN]}}},om=typeof window<"u"&&typeof window.document<"u";om&&document.dispatchEvent(new CustomEvent("FilePond:pluginloaded",{detail:Jo}));var el=Jo;var lm=e=>/^image/.test(e.type),tl=(e,t)=>jt(e.x*t,e.y*t),il=(e,t)=>jt(e.x+t.x,e.y+t.y),rm=e=>{let t=Math.sqrt(e.x*e.x+e.y*e.y);return t===0?{x:0,y:0}:jt(e.x/t,e.y/t)},Ii=(e,t,i)=>{let a=Math.cos(t),n=Math.sin(t),o=jt(e.x-i.x,e.y-i.y);return jt(i.x+a*o.x-n*o.y,i.y+n*o.x+a*o.y)},jt=(e=0,t=0)=>({x:e,y:t}),Te=(e,t,i=1,a)=>{if(typeof e=="string")return parseFloat(e)*i;if(typeof e=="number")return e*(a?t[a]:Math.min(t.width,t.height))},sm=(e,t,i)=>{let a=e.borderStyle||e.lineStyle||"solid",n=e.backgroundColor||e.fontColor||"transparent",o=e.borderColor||e.lineColor||"transparent",l=Te(e.borderWidth||e.lineWidth,t,i),r=e.lineCap||"round",s=e.lineJoin||"round",p=typeof a=="string"?"":a.map(d=>Te(d,t,i)).join(","),c=e.opacity||1;return{"stroke-linecap":r,"stroke-linejoin":s,"stroke-width":l||0,"stroke-dasharray":p,stroke:o,fill:n,opacity:c}},Se=e=>e!=null,cm=(e,t,i=1)=>{let a=Te(e.x,t,i,"width")||Te(e.left,t,i,"width"),n=Te(e.y,t,i,"height")||Te(e.top,t,i,"height"),o=Te(e.width,t,i,"width"),l=Te(e.height,t,i,"height"),r=Te(e.right,t,i,"width"),s=Te(e.bottom,t,i,"height");return Se(n)||(Se(l)&&Se(s)?n=t.height-l-s:n=s),Se(a)||(Se(o)&&Se(r)?a=t.width-o-r:a=r),Se(o)||(Se(a)&&Se(r)?o=t.width-a-r:o=0),Se(l)||(Se(n)&&Se(s)?l=t.height-n-s:l=0),{x:a||0,y:n||0,width:o||0,height:l||0}},dm=e=>e.map((t,i)=>`${i===0?"M":"L"} ${t.x} ${t.y}`).join(" "),Ce=(e,t)=>Object.keys(t).forEach(i=>e.setAttribute(i,t[i])),pm="http://www.w3.org/2000/svg",_t=(e,t)=>{let i=document.createElementNS(pm,e);return t&&Ce(i,t),i},mm=e=>Ce(e,{...e.rect,...e.styles}),um=e=>{let t=e.rect.x+e.rect.width*.5,i=e.rect.y+e.rect.height*.5,a=e.rect.width*.5,n=e.rect.height*.5;return Ce(e,{cx:t,cy:i,rx:a,ry:n,...e.styles})},fm={contain:"xMidYMid meet",cover:"xMidYMid slice"},hm=(e,t)=>{Ce(e,{...e.rect,...e.styles,preserveAspectRatio:fm[t.fit]||"none"})},gm={left:"start",center:"middle",right:"end"},Em=(e,t,i,a)=>{let n=Te(t.fontSize,i,a),o=t.fontFamily||"sans-serif",l=t.fontWeight||"normal",r=gm[t.textAlign]||"start";Ce(e,{...e.rect,...e.styles,"stroke-width":0,"font-weight":l,"font-size":n,"font-family":o,"text-anchor":r}),e.text!==t.text&&(e.text=t.text,e.textContent=t.text.length?t.text:" ")},bm=(e,t,i,a)=>{Ce(e,{...e.rect,...e.styles,fill:"none"});let n=e.childNodes[0],o=e.childNodes[1],l=e.childNodes[2],r=e.rect,s={x:e.rect.x+e.rect.width,y:e.rect.y+e.rect.height};if(Ce(n,{x1:r.x,y1:r.y,x2:s.x,y2:s.y}),!t.lineDecoration)return;o.style.display="none",l.style.display="none";let p=rm({x:s.x-r.x,y:s.y-r.y}),c=Te(.05,i,a);if(t.lineDecoration.indexOf("arrow-begin")!==-1){let d=tl(p,c),m=il(r,d),u=Ii(r,2,m),f=Ii(r,-2,m);Ce(o,{style:"display:block;",d:`M${u.x},${u.y} L${r.x},${r.y} L${f.x},${f.y}`})}if(t.lineDecoration.indexOf("arrow-end")!==-1){let d=tl(p,-c),m=il(s,d),u=Ii(s,2,m),f=Ii(s,-2,m);Ce(l,{style:"display:block;",d:`M${u.x},${u.y} L${s.x},${s.y} L${f.x},${f.y}`})}},Tm=(e,t,i,a)=>{Ce(e,{...e.styles,fill:"none",d:dm(t.points.map(n=>({x:Te(n.x,i,a,"width"),y:Te(n.y,i,a,"height")})))})},vi=e=>t=>_t(e,{id:t.id}),Im=e=>{let t=_t("image",{id:e.id,"stroke-linecap":"round","stroke-linejoin":"round",opacity:"0"});return t.onload=()=>{t.setAttribute("opacity",e.opacity||1)},t.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",e.src),t},vm=e=>{let t=_t("g",{id:e.id,"stroke-linecap":"round","stroke-linejoin":"round"}),i=_t("line");t.appendChild(i);let a=_t("path");t.appendChild(a);let n=_t("path");return t.appendChild(n),t},xm={image:Im,rect:vi("rect"),ellipse:vi("ellipse"),text:vi("text"),path:vi("path"),line:vm},ym={rect:mm,ellipse:um,image:hm,text:Em,path:Tm,line:bm},_m=(e,t)=>xm[e](t),Rm=(e,t,i,a,n)=>{t!=="path"&&(e.rect=cm(i,a,n)),e.styles=sm(i,a,n),ym[t](e,i,a,n)},wm=["x","y","left","top","right","bottom","width","height"],Sm=e=>typeof e=="string"&&/%/.test(e)?parseFloat(e)/100:e,Lm=e=>{let[t,i]=e,a=i.points?{}:wm.reduce((n,o)=>(n[o]=Sm(i[o]),n),{});return[t,{zIndex:0,...i,...a}]},Am=(e,t)=>e[1].zIndex>t[1].zIndex?1:e[1].zIndexe.utils.createView({name:"image-preview-markup",tag:"svg",ignoreRect:!0,mixins:{apis:["width","height","crop","markup","resize","dirty"]},write:({root:t,props:i})=>{if(!i.dirty)return;let{crop:a,resize:n,markup:o}=i,l=i.width,r=i.height,s=a.width,p=a.height;if(n){let{size:u}=n,f=u&&u.width,h=u&&u.height,g=n.mode,I=n.upscale;f&&!h&&(h=f),h&&!f&&(f=h);let E=s{let[f,h]=u,g=_m(f,h);Rm(g,f,h,c,d),t.element.appendChild(g)})}}),Ht=(e,t)=>({x:e,y:t}),Om=(e,t)=>e.x*t.x+e.y*t.y,al=(e,t)=>Ht(e.x-t.x,e.y-t.y),Pm=(e,t)=>Om(al(e,t),al(e,t)),nl=(e,t)=>Math.sqrt(Pm(e,t)),ol=(e,t)=>{let i=e,a=1.5707963267948966,n=t,o=1.5707963267948966-t,l=Math.sin(a),r=Math.sin(n),s=Math.sin(o),p=Math.cos(o),c=i/l,d=c*r,m=c*s;return Ht(p*d,p*m)},Dm=(e,t)=>{let i=e.width,a=e.height,n=ol(i,t),o=ol(a,t),l=Ht(e.x+Math.abs(n.x),e.y-Math.abs(n.y)),r=Ht(e.x+e.width+Math.abs(o.y),e.y+Math.abs(o.x)),s=Ht(e.x-Math.abs(o.y),e.y+e.height-Math.abs(o.x));return{width:nl(l,r),height:nl(l,s)}},Fm=(e,t,i=1)=>{let a=e.height/e.width,n=1,o=t,l=1,r=a;r>o&&(r=o,l=r/a);let s=Math.max(n/l,o/r),p=e.width/(i*s*l),c=p*t;return{width:p,height:c}},rl=(e,t,i,a)=>{let n=a.x>.5?1-a.x:a.x,o=a.y>.5?1-a.y:a.y,l=n*2*e.width,r=o*2*e.height,s=Dm(t,i);return Math.max(s.width/l,s.height/r)},sl=(e,t)=>{let i=e.width,a=i*t;a>e.height&&(a=e.height,i=a/t);let n=(e.width-i)*.5,o=(e.height-a)*.5;return{x:n,y:o,width:i,height:a}},zm=(e,t={})=>{let{zoom:i,rotation:a,center:n,aspectRatio:o}=t;o||(o=e.height/e.width);let l=Fm(e,o,i),r={x:l.width*.5,y:l.height*.5},s={x:0,y:0,width:l.width,height:l.height,center:r},p=typeof t.scaleToFit>"u"||t.scaleToFit,c=rl(e,sl(s,o),a,p?n:{x:.5,y:.5}),d=i*c;return{widthFloat:l.width/d,heightFloat:l.height/d,width:Math.round(l.width/d),height:Math.round(l.height/d)}},ze={type:"spring",stiffness:.5,damping:.45,mass:10},Cm=e=>e.utils.createView({name:"image-bitmap",ignoreRect:!0,mixins:{styles:["scaleX","scaleY"]},create:({root:t,props:i})=>{t.appendChild(i.image)}}),Nm=e=>e.utils.createView({name:"image-canvas-wrapper",tag:"div",ignoreRect:!0,mixins:{apis:["crop","width","height"],styles:["originX","originY","translateX","translateY","scaleX","scaleY","rotateZ"],animations:{originX:ze,originY:ze,scaleX:ze,scaleY:ze,translateX:ze,translateY:ze,rotateZ:ze}},create:({root:t,props:i})=>{i.width=i.image.width,i.height=i.image.height,t.ref.bitmap=t.appendChildView(t.createChildView(Cm(e),{image:i.image}))},write:({root:t,props:i})=>{let{flip:a}=i.crop,{bitmap:n}=t.ref;n.scaleX=a.horizontal?-1:1,n.scaleY=a.vertical?-1:1}}),Bm=e=>e.utils.createView({name:"image-clip",tag:"div",ignoreRect:!0,mixins:{apis:["crop","markup","resize","width","height","dirty","background"],styles:["width","height","opacity"],animations:{opacity:{type:"tween",duration:250}}},didWriteView:function({root:t,props:i}){i.background&&(t.element.style.backgroundColor=i.background)},create:({root:t,props:i})=>{t.ref.image=t.appendChildView(t.createChildView(Nm(e),Object.assign({},i))),t.ref.createMarkup=()=>{t.ref.markup||(t.ref.markup=t.appendChildView(t.createChildView(Mm(e),Object.assign({},i))))},t.ref.destroyMarkup=()=>{t.ref.markup&&(t.removeChildView(t.ref.markup),t.ref.markup=null)};let a=t.query("GET_IMAGE_PREVIEW_TRANSPARENCY_INDICATOR");a!==null&&(a==="grid"?t.element.dataset.transparencyIndicator=a:t.element.dataset.transparencyIndicator="color")},write:({root:t,props:i,shouldOptimize:a})=>{let{crop:n,markup:o,resize:l,dirty:r,width:s,height:p}=i;t.ref.image.crop=n;let c={x:0,y:0,width:s,height:p,center:{x:s*.5,y:p*.5}},d={width:t.ref.image.width,height:t.ref.image.height},m={x:n.center.x*d.width,y:n.center.y*d.height},u={x:c.center.x-d.width*n.center.x,y:c.center.y-d.height*n.center.y},f=Math.PI*2+n.rotation%(Math.PI*2),h=n.aspectRatio||d.height/d.width,g=typeof n.scaleToFit>"u"||n.scaleToFit,I=rl(d,sl(c,h),f,g?n.center:{x:.5,y:.5}),E=n.zoom*I;o&&o.length?(t.ref.createMarkup(),t.ref.markup.width=s,t.ref.markup.height=p,t.ref.markup.resize=l,t.ref.markup.dirty=r,t.ref.markup.markup=o,t.ref.markup.crop=zm(d,n)):t.ref.markup&&t.ref.destroyMarkup();let T=t.ref.image;if(a){T.originX=null,T.originY=null,T.translateX=null,T.translateY=null,T.rotateZ=null,T.scaleX=null,T.scaleY=null;return}T.originX=m.x,T.originY=m.y,T.translateX=u.x,T.translateY=u.y,T.rotateZ=f,T.scaleX=E,T.scaleY=E}}),km=e=>e.utils.createView({name:"image-preview",tag:"div",ignoreRect:!0,mixins:{apis:["image","crop","markup","resize","dirty","background"],styles:["translateY","scaleX","scaleY","opacity"],animations:{scaleX:ze,scaleY:ze,translateY:ze,opacity:{type:"tween",duration:400}}},create:({root:t,props:i})=>{t.ref.clip=t.appendChildView(t.createChildView(Bm(e),{id:i.id,image:i.image,crop:i.crop,markup:i.markup,resize:i.resize,dirty:i.dirty,background:i.background}))},write:({root:t,props:i,shouldOptimize:a})=>{let{clip:n}=t.ref,{image:o,crop:l,markup:r,resize:s,dirty:p}=i;if(n.crop=l,n.markup=r,n.resize=s,n.dirty=p,n.opacity=a?0:1,a||t.rect.element.hidden)return;let c=o.height/o.width,d=l.aspectRatio||c,m=t.rect.inner.width,u=t.rect.inner.height,f=t.query("GET_IMAGE_PREVIEW_HEIGHT"),h=t.query("GET_IMAGE_PREVIEW_MIN_HEIGHT"),g=t.query("GET_IMAGE_PREVIEW_MAX_HEIGHT"),I=t.query("GET_PANEL_ASPECT_RATIO"),E=t.query("GET_ALLOW_MULTIPLE");I&&!E&&(f=m*I,d=I);let T=f!==null?f:Math.max(h,Math.min(m*d,g)),v=T/d;v>m&&(v=m,T=v*d),T>u&&(T=u,v=u/d),n.width=v,n.height=T}}),Vm=` @@ -18,13 +18,13 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho -`,ll=0,Gm=e=>e.utils.createView({name:"image-preview-overlay",tag:"div",ignoreRect:!0,create:({root:t,props:i})=>{let a=Vm;if(document.querySelector("base")){let n=new URL(window.location.href.replace(window.location.hash,"")).href;a=a.replace(/url\(\#/g,"url("+n+"#")}ll++,t.element.classList.add(`filepond--image-preview-overlay-${i.status}`),t.element.innerHTML=a.replace(/__UID__/g,ll)},mixins:{styles:["opacity"],animations:{opacity:{type:"spring",mass:25}}}}),Um=function(){self.onmessage=e=>{createImageBitmap(e.data.message.file).then(t=>{self.postMessage({id:e.data.id,message:t},[t])})}},Wm=function(){self.onmessage=e=>{let t=e.data.message.imageData,i=e.data.message.colorMatrix,a=t.data,n=a.length,o=i[0],l=i[1],r=i[2],s=i[3],p=i[4],c=i[5],d=i[6],m=i[7],u=i[8],f=i[9],h=i[10],g=i[11],I=i[12],E=i[13],T=i[14],v=i[15],y=i[16],b=i[17],w=i[18],x=i[19],_=0,P=0,O=0,M=0,C=0;for(;_{let i=new Image;i.onload=()=>{let a=i.naturalWidth,n=i.naturalHeight;i=null,t(a,n)},i.src=e},jm={1:()=>[1,0,0,1,0,0],2:e=>[-1,0,0,1,e,0],3:(e,t)=>[-1,0,0,-1,e,t],4:(e,t)=>[1,0,0,-1,0,t],5:()=>[0,1,1,0,0,0],6:(e,t)=>[0,1,-1,0,t,0],7:(e,t)=>[0,-1,-1,0,t,e],8:e=>[0,-1,1,0,0,e]},qm=(e,t,i,a)=>{a!==-1&&e.transform.apply(e,jm[a](t,i))},Ym=(e,t,i,a)=>{t=Math.round(t),i=Math.round(i);let n=document.createElement("canvas");n.width=t,n.height=i;let o=n.getContext("2d");return a>=5&&a<=8&&([t,i]=[i,t]),qm(o,t,i,a),o.drawImage(e,0,0,t,i),n},cl=e=>/^image/.test(e.type)&&!/svg/.test(e.type),$m=10,Xm=10,Qm=e=>{let t=Math.min($m/e.width,Xm/e.height),i=document.createElement("canvas"),a=i.getContext("2d"),n=i.width=Math.ceil(e.width*t),o=i.height=Math.ceil(e.height*t);a.drawImage(e,0,0,n,o);let l=null;try{l=a.getImageData(0,0,n,o).data}catch{return null}let r=l.length,s=0,p=0,c=0,d=0;for(;dMath.floor(Math.sqrt(e/(t/4))),Zm=(e,t)=>(t=t||document.createElement("canvas"),t.width=e.width,t.height=e.height,t.getContext("2d").drawImage(e,0,0),t),Km=e=>{let t;try{t=new ImageData(e.width,e.height)}catch{t=document.createElement("canvas").getContext("2d").createImageData(e.width,e.height)}return t.data.set(new Uint8ClampedArray(e.data)),t},Jm=e=>new Promise((t,i)=>{let a=new Image;a.crossOrigin="Anonymous",a.onload=()=>{t(a)},a.onerror=n=>{i(n)},a.src=e}),eu=e=>{let t=Gm(e),i=km(e),{createWorker:a}=e.utils,n=(E,T,v)=>new Promise(y=>{E.ref.imageData||(E.ref.imageData=v.getContext("2d").getImageData(0,0,v.width,v.height));let b=Km(E.ref.imageData);if(!T||T.length!==20)return v.getContext("2d").putImageData(b,0,0),y();let w=a(Wm);w.post({imageData:b,colorMatrix:T},x=>{v.getContext("2d").putImageData(x,0,0),w.terminate(),y()},[b.data.buffer])}),o=(E,T)=>{E.removeChildView(T),T.image.width=1,T.image.height=1,T._destroy()},l=({root:E})=>{let T=E.ref.images.shift();return T.opacity=0,T.translateY=-15,E.ref.imageViewBin.push(T),T},r=({root:E,props:T,image:v})=>{let y=T.id,b=E.query("GET_ITEM",{id:y});if(!b)return;let w=b.getMetadata("crop")||{center:{x:.5,y:.5},flip:{horizontal:!1,vertical:!1},zoom:1,rotation:0,aspectRatio:null},x=E.query("GET_IMAGE_TRANSFORM_CANVAS_BACKGROUND_COLOR"),_,P,O=!1;E.query("GET_IMAGE_PREVIEW_MARKUP_SHOW")&&(_=b.getMetadata("markup")||[],P=b.getMetadata("resize"),O=!0);let M=E.appendChildView(E.createChildView(i,{id:y,image:v,crop:w,resize:P,markup:_,dirty:O,background:x,opacity:0,scaleX:1.15,scaleY:1.15,translateY:15}),E.childViews.length);E.ref.images.push(M),M.opacity=1,M.scaleX=1,M.scaleY=1,M.translateY=0,setTimeout(()=>{E.dispatch("DID_IMAGE_PREVIEW_SHOW",{id:y})},250)},s=({root:E,props:T})=>{let v=E.query("GET_ITEM",{id:T.id});if(!v)return;let y=E.ref.images[E.ref.images.length-1];y.crop=v.getMetadata("crop"),y.background=E.query("GET_IMAGE_TRANSFORM_CANVAS_BACKGROUND_COLOR"),E.query("GET_IMAGE_PREVIEW_MARKUP_SHOW")&&(y.dirty=!0,y.resize=v.getMetadata("resize"),y.markup=v.getMetadata("markup"))},p=({root:E,props:T,action:v})=>{if(!/crop|filter|markup|resize/.test(v.change.key)||!E.ref.images.length)return;let y=E.query("GET_ITEM",{id:T.id});if(y){if(/filter/.test(v.change.key)){let b=E.ref.images[E.ref.images.length-1];n(E,v.change.value,b.image);return}if(/crop|markup|resize/.test(v.change.key)){let b=y.getMetadata("crop"),w=E.ref.images[E.ref.images.length-1];if(b&&b.aspectRatio&&w.crop&&w.crop.aspectRatio&&Math.abs(b.aspectRatio-w.crop.aspectRatio)>1e-5){let x=l({root:E});r({root:E,props:T,image:Zm(x.image)})}else s({root:E,props:T})}}},c=E=>{let v=window.navigator.userAgent.match(/Firefox\/([0-9]+)\./),y=v?parseInt(v[1]):null;return y!==null&&y<=58?!1:"createImageBitmap"in window&&cl(E)},d=({root:E,props:T})=>{let{id:v}=T,y=E.query("GET_ITEM",v);if(!y)return;let b=URL.createObjectURL(y.file);Hm(b,(w,x)=>{E.dispatch("DID_IMAGE_PREVIEW_CALCULATE_SIZE",{id:v,width:w,height:x})})},m=({root:E,props:T})=>{let{id:v}=T,y=E.query("GET_ITEM",v);if(!y)return;let b=URL.createObjectURL(y.file),w=()=>{Jm(b).then(x)},x=_=>{URL.revokeObjectURL(b);let O=(y.getMetadata("exif")||{}).orientation||-1,{width:M,height:C}=_;if(!M||!C)return;O>=5&&O<=8&&([M,C]=[C,M]);let S=Math.max(1,window.devicePixelRatio*.75),R=E.query("GET_IMAGE_PREVIEW_ZOOM_FACTOR")*S,L=C/M,z=E.rect.element.width,D=E.rect.element.height,k=z,B=k*L;L>1?(k=Math.min(M,z*R),B=k*L):(B=Math.min(C,D*R),k=B/L);let X=Ym(_,k,B,O),Y=()=>{let pe=E.query("GET_IMAGE_PREVIEW_CALCULATE_AVERAGE_IMAGE_COLOR")?Qm(data):null;y.setMetadata("color",pe,!0),"close"in _&&_.close(),E.ref.overlayShadow.opacity=1,r({root:E,props:T,image:X})},Q=y.getMetadata("filter");Q?n(E,Q,X).then(Y):Y()};if(c(y.file)){let _=a(Um);_.post({file:y.file},P=>{if(_.terminate(),!P){w();return}x(P)})}else w()},u=({root:E})=>{let T=E.ref.images[E.ref.images.length-1];T.translateY=0,T.scaleX=1,T.scaleY=1,T.opacity=1},f=({root:E})=>{E.ref.overlayShadow.opacity=1,E.ref.overlayError.opacity=0,E.ref.overlaySuccess.opacity=0},h=({root:E})=>{E.ref.overlayShadow.opacity=.25,E.ref.overlayError.opacity=1},g=({root:E})=>{E.ref.overlayShadow.opacity=.25,E.ref.overlaySuccess.opacity=1},I=({root:E})=>{E.ref.images=[],E.ref.imageData=null,E.ref.imageViewBin=[],E.ref.overlayShadow=E.appendChildView(E.createChildView(t,{opacity:0,status:"idle"})),E.ref.overlaySuccess=E.appendChildView(E.createChildView(t,{opacity:0,status:"success"})),E.ref.overlayError=E.appendChildView(E.createChildView(t,{opacity:0,status:"failure"}))};return e.utils.createView({name:"image-preview-wrapper",create:I,styles:["height"],apis:["height"],destroy:({root:E})=>{E.ref.images.forEach(T=>{T.image.width=1,T.image.height=1})},didWriteView:({root:E})=>{E.ref.images.forEach(T=>{T.dirty=!1})},write:e.utils.createRoute({DID_IMAGE_PREVIEW_DRAW:u,DID_IMAGE_PREVIEW_CONTAINER_CREATE:d,DID_FINISH_CALCULATE_PREVIEWSIZE:m,DID_UPDATE_ITEM_METADATA:p,DID_THROW_ITEM_LOAD_ERROR:h,DID_THROW_ITEM_PROCESSING_ERROR:h,DID_THROW_ITEM_INVALID:h,DID_COMPLETE_ITEM_PROCESSING:g,DID_START_ITEM_PROCESSING:f,DID_REVERT_ITEM_PROCESSING:f},({root:E})=>{let T=E.ref.imageViewBin.filter(v=>v.opacity===0);E.ref.imageViewBin=E.ref.imageViewBin.filter(v=>v.opacity>0),T.forEach(v=>o(E,v)),T.length=0})})},dl=e=>{let{addFilter:t,utils:i}=e,{Type:a,createRoute:n,isFile:o}=i,l=eu(e);return t("CREATE_VIEW",r=>{let{is:s,view:p,query:c}=r;if(!s("file")||!c("GET_ALLOW_IMAGE_PREVIEW"))return;let d=({root:g,props:I})=>{let{id:E}=I,T=c("GET_ITEM",E);if(!T||!o(T.file)||T.archived)return;let v=T.file;if(!lm(v)||!c("GET_IMAGE_PREVIEW_FILTER_ITEM")(T))return;let y="createImageBitmap"in(window||{}),b=c("GET_IMAGE_PREVIEW_MAX_FILE_SIZE");if(!y&&b&&v.size>b)return;g.ref.imagePreview=p.appendChildView(p.createChildView(l,{id:E}));let w=g.query("GET_IMAGE_PREVIEW_HEIGHT");w&&g.dispatch("DID_UPDATE_PANEL_HEIGHT",{id:T.id,height:w});let x=!y&&v.size>c("GET_IMAGE_PREVIEW_MAX_INSTANT_PREVIEW_FILE_SIZE");g.dispatch("DID_IMAGE_PREVIEW_CONTAINER_CREATE",{id:E},x)},m=(g,I)=>{if(!g.ref.imagePreview)return;let{id:E}=I,T=g.query("GET_ITEM",{id:E});if(!T)return;let v=g.query("GET_PANEL_ASPECT_RATIO"),y=g.query("GET_ITEM_PANEL_ASPECT_RATIO"),b=g.query("GET_IMAGE_PREVIEW_HEIGHT");if(v||y||b)return;let{imageWidth:w,imageHeight:x}=g.ref;if(!w||!x)return;let _=g.query("GET_IMAGE_PREVIEW_MIN_HEIGHT"),P=g.query("GET_IMAGE_PREVIEW_MAX_HEIGHT"),M=(T.getMetadata("exif")||{}).orientation||-1;if(M>=5&&M<=8&&([w,x]=[x,w]),!cl(T.file)||g.query("GET_IMAGE_PREVIEW_UPSCALE")){let z=2048/w;w*=z,x*=z}let C=x/w,S=(T.getMetadata("crop")||{}).aspectRatio||C,F=Math.max(_,Math.min(x,P)),R=g.rect.element.width,L=Math.min(R*S,F);g.dispatch("DID_UPDATE_PANEL_HEIGHT",{id:T.id,height:L})},u=({root:g})=>{g.ref.shouldRescale=!0},f=({root:g,action:I})=>{I.change.key==="crop"&&(g.ref.shouldRescale=!0)},h=({root:g,action:I})=>{g.ref.imageWidth=I.width,g.ref.imageHeight=I.height,g.ref.shouldRescale=!0,g.ref.shouldDrawPreview=!0,g.dispatch("KICK")};p.registerWriter(n({DID_RESIZE_ROOT:u,DID_STOP_RESIZE:u,DID_LOAD_ITEM:d,DID_IMAGE_PREVIEW_CALCULATE_SIZE:h,DID_UPDATE_ITEM_METADATA:f},({root:g,props:I})=>{g.ref.imagePreview&&(g.rect.element.hidden||(g.ref.shouldRescale&&(m(g,I),g.ref.shouldRescale=!1),g.ref.shouldDrawPreview&&(requestAnimationFrame(()=>{requestAnimationFrame(()=>{g.dispatch("DID_FINISH_CALCULATE_PREVIEWSIZE",{id:I.id})})}),g.ref.shouldDrawPreview=!1)))}))}),{options:{allowImagePreview:[!0,a.BOOLEAN],imagePreviewFilterItem:[()=>!0,a.FUNCTION],imagePreviewHeight:[null,a.INT],imagePreviewMinHeight:[44,a.INT],imagePreviewMaxHeight:[256,a.INT],imagePreviewMaxFileSize:[null,a.INT],imagePreviewZoomFactor:[2,a.INT],imagePreviewUpscale:[!1,a.BOOLEAN],imagePreviewMaxInstantPreviewFileSize:[1e6,a.INT],imagePreviewTransparencyIndicator:[null,a.STRING],imagePreviewCalculateAverageImageColor:[!1,a.BOOLEAN],imagePreviewMarkupShow:[!0,a.BOOLEAN],imagePreviewMarkupFilter:[()=>!0,a.FUNCTION]}}},tu=typeof window<"u"&&typeof window.document<"u";tu&&document.dispatchEvent(new CustomEvent("FilePond:pluginloaded",{detail:dl}));var pl=dl;var iu=e=>/^image/.test(e.type),au=(e,t)=>{let i=new Image;i.onload=()=>{let a=i.naturalWidth,n=i.naturalHeight;i=null,t({width:a,height:n})},i.onerror=()=>t(null),i.src=e},ml=({addFilter:e,utils:t})=>{let{Type:i}=t;return e("DID_LOAD_ITEM",(a,{query:n})=>new Promise((o,l)=>{let r=a.file;if(!iu(r)||!n("GET_ALLOW_IMAGE_RESIZE"))return o(a);let s=n("GET_IMAGE_RESIZE_MODE"),p=n("GET_IMAGE_RESIZE_TARGET_WIDTH"),c=n("GET_IMAGE_RESIZE_TARGET_HEIGHT"),d=n("GET_IMAGE_RESIZE_UPSCALE");if(p===null&&c===null)return o(a);let m=p===null?c:p,u=c===null?m:c,f=URL.createObjectURL(r);au(f,h=>{if(URL.revokeObjectURL(f),!h)return o(a);let{width:g,height:I}=h,E=(a.getMetadata("exif")||{}).orientation||-1;if(E>=5&&E<=8&&([g,I]=[I,g]),g===m&&I===u)return o(a);if(!d){if(s==="cover"){if(g<=m||I<=u)return o(a)}else if(g<=m&&I<=m)return o(a)}a.setMetadata("resize",{mode:s,upscale:d,size:{width:m,height:u}}),o(a)})})),{options:{allowImageResize:[!0,i.BOOLEAN],imageResizeMode:["cover",i.STRING],imageResizeUpscale:[!0,i.BOOLEAN],imageResizeTargetWidth:[null,i.INT],imageResizeTargetHeight:[null,i.INT]}}},nu=typeof window<"u"&&typeof window.document<"u";nu&&document.dispatchEvent(new CustomEvent("FilePond:pluginloaded",{detail:ml}));var ul=ml;var ou=e=>/^image/.test(e.type),lu=e=>e.substr(0,e.lastIndexOf("."))||e,ru={jpeg:"jpg","svg+xml":"svg"},su=(e,t)=>{let i=lu(e),a=t.split("/")[1],n=ru[a]||a;return`${i}.${n}`},cu=e=>/jpeg|png|svg\+xml/.test(e)?e:"image/jpeg",du=e=>/^image/.test(e.type),pu={1:()=>[1,0,0,1,0,0],2:e=>[-1,0,0,1,e,0],3:(e,t)=>[-1,0,0,-1,e,t],4:(e,t)=>[1,0,0,-1,0,t],5:()=>[0,1,1,0,0,0],6:(e,t)=>[0,1,-1,0,t,0],7:(e,t)=>[0,-1,-1,0,t,e],8:e=>[0,-1,1,0,0,e]},mu=(e,t,i)=>(i===-1&&(i=1),pu[i](e,t)),qt=(e,t)=>({x:e,y:t}),uu=(e,t)=>e.x*t.x+e.y*t.y,fl=(e,t)=>qt(e.x-t.x,e.y-t.y),fu=(e,t)=>uu(fl(e,t),fl(e,t)),hl=(e,t)=>Math.sqrt(fu(e,t)),gl=(e,t)=>{let i=e,a=1.5707963267948966,n=t,o=1.5707963267948966-t,l=Math.sin(a),r=Math.sin(n),s=Math.sin(o),p=Math.cos(o),c=i/l,d=c*r,m=c*s;return qt(p*d,p*m)},hu=(e,t)=>{let i=e.width,a=e.height,n=gl(i,t),o=gl(a,t),l=qt(e.x+Math.abs(n.x),e.y-Math.abs(n.y)),r=qt(e.x+e.width+Math.abs(o.y),e.y+Math.abs(o.x)),s=qt(e.x-Math.abs(o.y),e.y+e.height-Math.abs(o.x));return{width:hl(l,r),height:hl(l,s)}},Tl=(e,t,i=0,a={x:.5,y:.5})=>{let n=a.x>.5?1-a.x:a.x,o=a.y>.5?1-a.y:a.y,l=n*2*e.width,r=o*2*e.height,s=hu(t,i);return Math.max(s.width/l,s.height/r)},Il=(e,t)=>{let i=e.width,a=i*t;a>e.height&&(a=e.height,i=a/t);let n=(e.width-i)*.5,o=(e.height-a)*.5;return{x:n,y:o,width:i,height:a}},El=(e,t,i=1)=>{let a=e.height/e.width,n=1,o=t,l=1,r=a;r>o&&(r=o,l=r/a);let s=Math.max(n/l,o/r),p=e.width/(i*s*l),c=p*t;return{width:p,height:c}},vl=e=>{e.width=1,e.height=1,e.getContext("2d").clearRect(0,0,1,1)},bl=e=>e&&(e.horizontal||e.vertical),gu=(e,t,i)=>{if(t<=1&&!bl(i))return e.width=e.naturalWidth,e.height=e.naturalHeight,e;let a=document.createElement("canvas"),n=e.naturalWidth,o=e.naturalHeight,l=t>=5&&t<=8;l?(a.width=o,a.height=n):(a.width=n,a.height=o);let r=a.getContext("2d");if(t&&r.transform.apply(r,mu(n,o,t)),bl(i)){let s=[1,0,0,1,0,0];(!l&&i.horizontal||l&i.vertical)&&(s[0]=-1,s[4]=n),(!l&&i.vertical||l&&i.horizontal)&&(s[3]=-1,s[5]=o),r.transform(...s)}return r.drawImage(e,0,0,n,o),a},Eu=(e,t,i={},a={})=>{let{canvasMemoryLimit:n,background:o=null}=a,l=i.zoom||1,r=gu(e,t,i.flip),s={width:r.width,height:r.height},p=i.aspectRatio||s.height/s.width,c=El(s,p,l);if(n){let T=c.width*c.height;if(T>n){let v=Math.sqrt(n)/Math.sqrt(T);s.width=Math.floor(s.width*v),s.height=Math.floor(s.height*v),c=El(s,p,l)}}let d=document.createElement("canvas"),m={x:c.width*.5,y:c.height*.5},u={x:0,y:0,width:c.width,height:c.height,center:m},f=typeof i.scaleToFit>"u"||i.scaleToFit,h=l*Tl(s,Il(u,p),i.rotation,f?i.center:{x:.5,y:.5});d.width=Math.round(c.width/h),d.height=Math.round(c.height/h),m.x/=h,m.y/=h;let g={x:m.x-s.width*(i.center?i.center.x:.5),y:m.y-s.height*(i.center?i.center.y:.5)},I=d.getContext("2d");o&&(I.fillStyle=o,I.fillRect(0,0,d.width,d.height)),I.translate(m.x,m.y),I.rotate(i.rotation||0),I.drawImage(r,g.x-m.x,g.y-m.y,s.width,s.height);let E=I.getImageData(0,0,d.width,d.height);return vl(d),E},bu=(()=>typeof window<"u"&&typeof window.document<"u")();bu&&(HTMLCanvasElement.prototype.toBlob||Object.defineProperty(HTMLCanvasElement.prototype,"toBlob",{value:function(e,t,i){var a=this.toDataURL(t,i).split(",")[1];setTimeout(function(){for(var n=atob(a),o=n.length,l=new Uint8Array(o),r=0;rnew Promise(a=>{let n=i?i(e):e;Promise.resolve(n).then(o=>{o.toBlob(a,t.type,t.quality)})}),yi=(e,t)=>Yt(e.x*t,e.y*t),_i=(e,t)=>Yt(e.x+t.x,e.y+t.y),xl=e=>{let t=Math.sqrt(e.x*e.x+e.y*e.y);return t===0?{x:0,y:0}:Yt(e.x/t,e.y/t)},Ye=(e,t,i)=>{let a=Math.cos(t),n=Math.sin(t),o=Yt(e.x-i.x,e.y-i.y);return Yt(i.x+a*o.x-n*o.y,i.y+n*o.x+a*o.y)},Yt=(e=0,t=0)=>({x:e,y:t}),me=(e,t,i=1,a)=>{if(typeof e=="string")return parseFloat(e)*i;if(typeof e=="number")return e*(a?t[a]:Math.min(t.width,t.height))},ct=(e,t,i)=>{let a=e.borderStyle||e.lineStyle||"solid",n=e.backgroundColor||e.fontColor||"transparent",o=e.borderColor||e.lineColor||"transparent",l=me(e.borderWidth||e.lineWidth,t,i),r=e.lineCap||"round",s=e.lineJoin||"round",p=typeof a=="string"?"":a.map(d=>me(d,t,i)).join(","),c=e.opacity||1;return{"stroke-linecap":r,"stroke-linejoin":s,"stroke-width":l||0,"stroke-dasharray":p,stroke:o,fill:n,opacity:c}},Le=e=>e!=null,wt=(e,t,i=1)=>{let a=me(e.x,t,i,"width")||me(e.left,t,i,"width"),n=me(e.y,t,i,"height")||me(e.top,t,i,"height"),o=me(e.width,t,i,"width"),l=me(e.height,t,i,"height"),r=me(e.right,t,i,"width"),s=me(e.bottom,t,i,"height");return Le(n)||(Le(l)&&Le(s)?n=t.height-l-s:n=s),Le(a)||(Le(o)&&Le(r)?a=t.width-o-r:a=r),Le(o)||(Le(a)&&Le(r)?o=t.width-a-r:o=0),Le(l)||(Le(n)&&Le(s)?l=t.height-n-s:l=0),{x:a||0,y:n||0,width:o||0,height:l||0}},Iu=e=>e.map((t,i)=>`${i===0?"M":"L"} ${t.x} ${t.y}`).join(" "),Ne=(e,t)=>Object.keys(t).forEach(i=>e.setAttribute(i,t[i])),vu="http://www.w3.org/2000/svg",Rt=(e,t)=>{let i=document.createElementNS(vu,e);return t&&Ne(i,t),i},xu=e=>Ne(e,{...e.rect,...e.styles}),yu=e=>{let t=e.rect.x+e.rect.width*.5,i=e.rect.y+e.rect.height*.5,a=e.rect.width*.5,n=e.rect.height*.5;return Ne(e,{cx:t,cy:i,rx:a,ry:n,...e.styles})},_u={contain:"xMidYMid meet",cover:"xMidYMid slice"},Ru=(e,t)=>{Ne(e,{...e.rect,...e.styles,preserveAspectRatio:_u[t.fit]||"none"})},wu={left:"start",center:"middle",right:"end"},Su=(e,t,i,a)=>{let n=me(t.fontSize,i,a),o=t.fontFamily||"sans-serif",l=t.fontWeight||"normal",r=wu[t.textAlign]||"start";Ne(e,{...e.rect,...e.styles,"stroke-width":0,"font-weight":l,"font-size":n,"font-family":o,"text-anchor":r}),e.text!==t.text&&(e.text=t.text,e.textContent=t.text.length?t.text:" ")},Lu=(e,t,i,a)=>{Ne(e,{...e.rect,...e.styles,fill:"none"});let n=e.childNodes[0],o=e.childNodes[1],l=e.childNodes[2],r=e.rect,s={x:e.rect.x+e.rect.width,y:e.rect.y+e.rect.height};if(Ne(n,{x1:r.x,y1:r.y,x2:s.x,y2:s.y}),!t.lineDecoration)return;o.style.display="none",l.style.display="none";let p=xl({x:s.x-r.x,y:s.y-r.y}),c=me(.05,i,a);if(t.lineDecoration.indexOf("arrow-begin")!==-1){let d=yi(p,c),m=_i(r,d),u=Ye(r,2,m),f=Ye(r,-2,m);Ne(o,{style:"display:block;",d:`M${u.x},${u.y} L${r.x},${r.y} L${f.x},${f.y}`})}if(t.lineDecoration.indexOf("arrow-end")!==-1){let d=yi(p,-c),m=_i(s,d),u=Ye(s,2,m),f=Ye(s,-2,m);Ne(l,{style:"display:block;",d:`M${u.x},${u.y} L${s.x},${s.y} L${f.x},${f.y}`})}},Au=(e,t,i,a)=>{Ne(e,{...e.styles,fill:"none",d:Iu(t.points.map(n=>({x:me(n.x,i,a,"width"),y:me(n.y,i,a,"height")})))})},xi=e=>t=>Rt(e,{id:t.id}),Mu=e=>{let t=Rt("image",{id:e.id,"stroke-linecap":"round","stroke-linejoin":"round",opacity:"0"});return t.onload=()=>{t.setAttribute("opacity",e.opacity||1)},t.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",e.src),t},Ou=e=>{let t=Rt("g",{id:e.id,"stroke-linecap":"round","stroke-linejoin":"round"}),i=Rt("line");t.appendChild(i);let a=Rt("path");t.appendChild(a);let n=Rt("path");return t.appendChild(n),t},Pu={image:Mu,rect:xi("rect"),ellipse:xi("ellipse"),text:xi("text"),path:xi("path"),line:Ou},Du={rect:xu,ellipse:yu,image:Ru,text:Su,path:Au,line:Lu},Fu=(e,t)=>Pu[e](t),zu=(e,t,i,a,n)=>{t!=="path"&&(e.rect=wt(i,a,n)),e.styles=ct(i,a,n),Du[t](e,i,a,n)},yl=(e,t)=>e[1].zIndex>t[1].zIndex?1:e[1].zIndexnew Promise(n=>{let{background:o=null}=a,l=new FileReader;l.onloadend=()=>{let r=l.result,s=document.createElement("div");s.style.cssText="position:absolute;pointer-events:none;width:0;height:0;visibility:hidden;",s.innerHTML=r;let p=s.querySelector("svg");document.body.appendChild(s);let c=p.getBBox();s.parentNode.removeChild(s);let d=s.querySelector("title"),m=p.getAttribute("viewBox")||"",u=p.getAttribute("width")||"",f=p.getAttribute("height")||"",h=parseFloat(u)||null,g=parseFloat(f)||null,I=(u.match(/[a-z]+/)||[])[0]||"",E=(f.match(/[a-z]+/)||[])[0]||"",T=m.split(" ").map(parseFloat),v=T.length?{x:T[0],y:T[1],width:T[2],height:T[3]}:c,y=h??v.width,b=g??v.height;p.style.overflow="visible",p.setAttribute("width",y),p.setAttribute("height",b);let w="";if(i&&i.length){let Q={width:y,height:b};w=i.sort(yl).reduce((pe,G)=>{let H=Fu(G[0],G[1]);return zu(H,G[0],G[1],Q),H.removeAttribute("id"),H.getAttribute("opacity")===1&&H.removeAttribute("opacity"),pe+` +`,ll=0,Gm=e=>e.utils.createView({name:"image-preview-overlay",tag:"div",ignoreRect:!0,create:({root:t,props:i})=>{let a=Vm;if(document.querySelector("base")){let n=new URL(window.location.href.replace(window.location.hash,"")).href;a=a.replace(/url\(\#/g,"url("+n+"#")}ll++,t.element.classList.add(`filepond--image-preview-overlay-${i.status}`),t.element.innerHTML=a.replace(/__UID__/g,ll)},mixins:{styles:["opacity"],animations:{opacity:{type:"spring",mass:25}}}}),Um=function(){self.onmessage=e=>{createImageBitmap(e.data.message.file).then(t=>{self.postMessage({id:e.data.id,message:t},[t])})}},Wm=function(){self.onmessage=e=>{let t=e.data.message.imageData,i=e.data.message.colorMatrix,a=t.data,n=a.length,o=i[0],l=i[1],r=i[2],s=i[3],p=i[4],c=i[5],d=i[6],m=i[7],u=i[8],f=i[9],h=i[10],g=i[11],I=i[12],E=i[13],T=i[14],v=i[15],y=i[16],b=i[17],w=i[18],x=i[19],_=0,P=0,O=0,M=0,C=0;for(;_{let i=new Image;i.onload=()=>{let a=i.naturalWidth,n=i.naturalHeight;i=null,t(a,n)},i.src=e},jm={1:()=>[1,0,0,1,0,0],2:e=>[-1,0,0,1,e,0],3:(e,t)=>[-1,0,0,-1,e,t],4:(e,t)=>[1,0,0,-1,0,t],5:()=>[0,1,1,0,0,0],6:(e,t)=>[0,1,-1,0,t,0],7:(e,t)=>[0,-1,-1,0,t,e],8:e=>[0,-1,1,0,0,e]},Ym=(e,t,i,a)=>{a!==-1&&e.transform.apply(e,jm[a](t,i))},qm=(e,t,i,a)=>{t=Math.round(t),i=Math.round(i);let n=document.createElement("canvas");n.width=t,n.height=i;let o=n.getContext("2d");return a>=5&&a<=8&&([t,i]=[i,t]),Ym(o,t,i,a),o.drawImage(e,0,0,t,i),n},cl=e=>/^image/.test(e.type)&&!/svg/.test(e.type),$m=10,Xm=10,Qm=e=>{let t=Math.min($m/e.width,Xm/e.height),i=document.createElement("canvas"),a=i.getContext("2d"),n=i.width=Math.ceil(e.width*t),o=i.height=Math.ceil(e.height*t);a.drawImage(e,0,0,n,o);let l=null;try{l=a.getImageData(0,0,n,o).data}catch{return null}let r=l.length,s=0,p=0,c=0,d=0;for(;dMath.floor(Math.sqrt(e/(t/4))),Zm=(e,t)=>(t=t||document.createElement("canvas"),t.width=e.width,t.height=e.height,t.getContext("2d").drawImage(e,0,0),t),Km=e=>{let t;try{t=new ImageData(e.width,e.height)}catch{t=document.createElement("canvas").getContext("2d").createImageData(e.width,e.height)}return t.data.set(new Uint8ClampedArray(e.data)),t},Jm=e=>new Promise((t,i)=>{let a=new Image;a.crossOrigin="Anonymous",a.onload=()=>{t(a)},a.onerror=n=>{i(n)},a.src=e}),eu=e=>{let t=Gm(e),i=km(e),{createWorker:a}=e.utils,n=(E,T,v)=>new Promise(y=>{E.ref.imageData||(E.ref.imageData=v.getContext("2d").getImageData(0,0,v.width,v.height));let b=Km(E.ref.imageData);if(!T||T.length!==20)return v.getContext("2d").putImageData(b,0,0),y();let w=a(Wm);w.post({imageData:b,colorMatrix:T},x=>{v.getContext("2d").putImageData(x,0,0),w.terminate(),y()},[b.data.buffer])}),o=(E,T)=>{E.removeChildView(T),T.image.width=1,T.image.height=1,T._destroy()},l=({root:E})=>{let T=E.ref.images.shift();return T.opacity=0,T.translateY=-15,E.ref.imageViewBin.push(T),T},r=({root:E,props:T,image:v})=>{let y=T.id,b=E.query("GET_ITEM",{id:y});if(!b)return;let w=b.getMetadata("crop")||{center:{x:.5,y:.5},flip:{horizontal:!1,vertical:!1},zoom:1,rotation:0,aspectRatio:null},x=E.query("GET_IMAGE_TRANSFORM_CANVAS_BACKGROUND_COLOR"),_,P,O=!1;E.query("GET_IMAGE_PREVIEW_MARKUP_SHOW")&&(_=b.getMetadata("markup")||[],P=b.getMetadata("resize"),O=!0);let M=E.appendChildView(E.createChildView(i,{id:y,image:v,crop:w,resize:P,markup:_,dirty:O,background:x,opacity:0,scaleX:1.15,scaleY:1.15,translateY:15}),E.childViews.length);E.ref.images.push(M),M.opacity=1,M.scaleX=1,M.scaleY=1,M.translateY=0,setTimeout(()=>{E.dispatch("DID_IMAGE_PREVIEW_SHOW",{id:y})},250)},s=({root:E,props:T})=>{let v=E.query("GET_ITEM",{id:T.id});if(!v)return;let y=E.ref.images[E.ref.images.length-1];y.crop=v.getMetadata("crop"),y.background=E.query("GET_IMAGE_TRANSFORM_CANVAS_BACKGROUND_COLOR"),E.query("GET_IMAGE_PREVIEW_MARKUP_SHOW")&&(y.dirty=!0,y.resize=v.getMetadata("resize"),y.markup=v.getMetadata("markup"))},p=({root:E,props:T,action:v})=>{if(!/crop|filter|markup|resize/.test(v.change.key)||!E.ref.images.length)return;let y=E.query("GET_ITEM",{id:T.id});if(y){if(/filter/.test(v.change.key)){let b=E.ref.images[E.ref.images.length-1];n(E,v.change.value,b.image);return}if(/crop|markup|resize/.test(v.change.key)){let b=y.getMetadata("crop"),w=E.ref.images[E.ref.images.length-1];if(b&&b.aspectRatio&&w.crop&&w.crop.aspectRatio&&Math.abs(b.aspectRatio-w.crop.aspectRatio)>1e-5){let x=l({root:E});r({root:E,props:T,image:Zm(x.image)})}else s({root:E,props:T})}}},c=E=>{let v=window.navigator.userAgent.match(/Firefox\/([0-9]+)\./),y=v?parseInt(v[1]):null;return y!==null&&y<=58?!1:"createImageBitmap"in window&&cl(E)},d=({root:E,props:T})=>{let{id:v}=T,y=E.query("GET_ITEM",v);if(!y)return;let b=URL.createObjectURL(y.file);Hm(b,(w,x)=>{E.dispatch("DID_IMAGE_PREVIEW_CALCULATE_SIZE",{id:v,width:w,height:x})})},m=({root:E,props:T})=>{let{id:v}=T,y=E.query("GET_ITEM",v);if(!y)return;let b=URL.createObjectURL(y.file),w=()=>{Jm(b).then(x)},x=_=>{URL.revokeObjectURL(b);let O=(y.getMetadata("exif")||{}).orientation||-1,{width:M,height:C}=_;if(!M||!C)return;O>=5&&O<=8&&([M,C]=[C,M]);let S=Math.max(1,window.devicePixelRatio*.75),R=E.query("GET_IMAGE_PREVIEW_ZOOM_FACTOR")*S,L=C/M,z=E.rect.element.width,D=E.rect.element.height,k=z,B=k*L;L>1?(k=Math.min(M,z*R),B=k*L):(B=Math.min(C,D*R),k=B/L);let X=qm(_,k,B,O),q=()=>{let pe=E.query("GET_IMAGE_PREVIEW_CALCULATE_AVERAGE_IMAGE_COLOR")?Qm(data):null;y.setMetadata("color",pe,!0),"close"in _&&_.close(),E.ref.overlayShadow.opacity=1,r({root:E,props:T,image:X})},Q=y.getMetadata("filter");Q?n(E,Q,X).then(q):q()};if(c(y.file)){let _=a(Um);_.post({file:y.file},P=>{if(_.terminate(),!P){w();return}x(P)})}else w()},u=({root:E})=>{let T=E.ref.images[E.ref.images.length-1];T.translateY=0,T.scaleX=1,T.scaleY=1,T.opacity=1},f=({root:E})=>{E.ref.overlayShadow.opacity=1,E.ref.overlayError.opacity=0,E.ref.overlaySuccess.opacity=0},h=({root:E})=>{E.ref.overlayShadow.opacity=.25,E.ref.overlayError.opacity=1},g=({root:E})=>{E.ref.overlayShadow.opacity=.25,E.ref.overlaySuccess.opacity=1},I=({root:E})=>{E.ref.images=[],E.ref.imageData=null,E.ref.imageViewBin=[],E.ref.overlayShadow=E.appendChildView(E.createChildView(t,{opacity:0,status:"idle"})),E.ref.overlaySuccess=E.appendChildView(E.createChildView(t,{opacity:0,status:"success"})),E.ref.overlayError=E.appendChildView(E.createChildView(t,{opacity:0,status:"failure"}))};return e.utils.createView({name:"image-preview-wrapper",create:I,styles:["height"],apis:["height"],destroy:({root:E})=>{E.ref.images.forEach(T=>{T.image.width=1,T.image.height=1})},didWriteView:({root:E})=>{E.ref.images.forEach(T=>{T.dirty=!1})},write:e.utils.createRoute({DID_IMAGE_PREVIEW_DRAW:u,DID_IMAGE_PREVIEW_CONTAINER_CREATE:d,DID_FINISH_CALCULATE_PREVIEWSIZE:m,DID_UPDATE_ITEM_METADATA:p,DID_THROW_ITEM_LOAD_ERROR:h,DID_THROW_ITEM_PROCESSING_ERROR:h,DID_THROW_ITEM_INVALID:h,DID_COMPLETE_ITEM_PROCESSING:g,DID_START_ITEM_PROCESSING:f,DID_REVERT_ITEM_PROCESSING:f},({root:E})=>{let T=E.ref.imageViewBin.filter(v=>v.opacity===0);E.ref.imageViewBin=E.ref.imageViewBin.filter(v=>v.opacity>0),T.forEach(v=>o(E,v)),T.length=0})})},dl=e=>{let{addFilter:t,utils:i}=e,{Type:a,createRoute:n,isFile:o}=i,l=eu(e);return t("CREATE_VIEW",r=>{let{is:s,view:p,query:c}=r;if(!s("file")||!c("GET_ALLOW_IMAGE_PREVIEW"))return;let d=({root:g,props:I})=>{let{id:E}=I,T=c("GET_ITEM",E);if(!T||!o(T.file)||T.archived)return;let v=T.file;if(!lm(v)||!c("GET_IMAGE_PREVIEW_FILTER_ITEM")(T))return;let y="createImageBitmap"in(window||{}),b=c("GET_IMAGE_PREVIEW_MAX_FILE_SIZE");if(!y&&b&&v.size>b)return;g.ref.imagePreview=p.appendChildView(p.createChildView(l,{id:E}));let w=g.query("GET_IMAGE_PREVIEW_HEIGHT");w&&g.dispatch("DID_UPDATE_PANEL_HEIGHT",{id:T.id,height:w});let x=!y&&v.size>c("GET_IMAGE_PREVIEW_MAX_INSTANT_PREVIEW_FILE_SIZE");g.dispatch("DID_IMAGE_PREVIEW_CONTAINER_CREATE",{id:E},x)},m=(g,I)=>{if(!g.ref.imagePreview)return;let{id:E}=I,T=g.query("GET_ITEM",{id:E});if(!T)return;let v=g.query("GET_PANEL_ASPECT_RATIO"),y=g.query("GET_ITEM_PANEL_ASPECT_RATIO"),b=g.query("GET_IMAGE_PREVIEW_HEIGHT");if(v||y||b)return;let{imageWidth:w,imageHeight:x}=g.ref;if(!w||!x)return;let _=g.query("GET_IMAGE_PREVIEW_MIN_HEIGHT"),P=g.query("GET_IMAGE_PREVIEW_MAX_HEIGHT"),M=(T.getMetadata("exif")||{}).orientation||-1;if(M>=5&&M<=8&&([w,x]=[x,w]),!cl(T.file)||g.query("GET_IMAGE_PREVIEW_UPSCALE")){let z=2048/w;w*=z,x*=z}let C=x/w,S=(T.getMetadata("crop")||{}).aspectRatio||C,F=Math.max(_,Math.min(x,P)),R=g.rect.element.width,L=Math.min(R*S,F);g.dispatch("DID_UPDATE_PANEL_HEIGHT",{id:T.id,height:L})},u=({root:g})=>{g.ref.shouldRescale=!0},f=({root:g,action:I})=>{I.change.key==="crop"&&(g.ref.shouldRescale=!0)},h=({root:g,action:I})=>{g.ref.imageWidth=I.width,g.ref.imageHeight=I.height,g.ref.shouldRescale=!0,g.ref.shouldDrawPreview=!0,g.dispatch("KICK")};p.registerWriter(n({DID_RESIZE_ROOT:u,DID_STOP_RESIZE:u,DID_LOAD_ITEM:d,DID_IMAGE_PREVIEW_CALCULATE_SIZE:h,DID_UPDATE_ITEM_METADATA:f},({root:g,props:I})=>{g.ref.imagePreview&&(g.rect.element.hidden||(g.ref.shouldRescale&&(m(g,I),g.ref.shouldRescale=!1),g.ref.shouldDrawPreview&&(requestAnimationFrame(()=>{requestAnimationFrame(()=>{g.dispatch("DID_FINISH_CALCULATE_PREVIEWSIZE",{id:I.id})})}),g.ref.shouldDrawPreview=!1)))}))}),{options:{allowImagePreview:[!0,a.BOOLEAN],imagePreviewFilterItem:[()=>!0,a.FUNCTION],imagePreviewHeight:[null,a.INT],imagePreviewMinHeight:[44,a.INT],imagePreviewMaxHeight:[256,a.INT],imagePreviewMaxFileSize:[null,a.INT],imagePreviewZoomFactor:[2,a.INT],imagePreviewUpscale:[!1,a.BOOLEAN],imagePreviewMaxInstantPreviewFileSize:[1e6,a.INT],imagePreviewTransparencyIndicator:[null,a.STRING],imagePreviewCalculateAverageImageColor:[!1,a.BOOLEAN],imagePreviewMarkupShow:[!0,a.BOOLEAN],imagePreviewMarkupFilter:[()=>!0,a.FUNCTION]}}},tu=typeof window<"u"&&typeof window.document<"u";tu&&document.dispatchEvent(new CustomEvent("FilePond:pluginloaded",{detail:dl}));var pl=dl;var iu=e=>/^image/.test(e.type),au=(e,t)=>{let i=new Image;i.onload=()=>{let a=i.naturalWidth,n=i.naturalHeight;i=null,t({width:a,height:n})},i.onerror=()=>t(null),i.src=e},ml=({addFilter:e,utils:t})=>{let{Type:i}=t;return e("DID_LOAD_ITEM",(a,{query:n})=>new Promise((o,l)=>{let r=a.file;if(!iu(r)||!n("GET_ALLOW_IMAGE_RESIZE"))return o(a);let s=n("GET_IMAGE_RESIZE_MODE"),p=n("GET_IMAGE_RESIZE_TARGET_WIDTH"),c=n("GET_IMAGE_RESIZE_TARGET_HEIGHT"),d=n("GET_IMAGE_RESIZE_UPSCALE");if(p===null&&c===null)return o(a);let m=p===null?c:p,u=c===null?m:c,f=URL.createObjectURL(r);au(f,h=>{if(URL.revokeObjectURL(f),!h)return o(a);let{width:g,height:I}=h,E=(a.getMetadata("exif")||{}).orientation||-1;if(E>=5&&E<=8&&([g,I]=[I,g]),g===m&&I===u)return o(a);if(!d){if(s==="cover"){if(g<=m||I<=u)return o(a)}else if(g<=m&&I<=m)return o(a)}a.setMetadata("resize",{mode:s,upscale:d,size:{width:m,height:u}}),o(a)})})),{options:{allowImageResize:[!0,i.BOOLEAN],imageResizeMode:["cover",i.STRING],imageResizeUpscale:[!0,i.BOOLEAN],imageResizeTargetWidth:[null,i.INT],imageResizeTargetHeight:[null,i.INT]}}},nu=typeof window<"u"&&typeof window.document<"u";nu&&document.dispatchEvent(new CustomEvent("FilePond:pluginloaded",{detail:ml}));var ul=ml;var ou=e=>/^image/.test(e.type),lu=e=>e.substr(0,e.lastIndexOf("."))||e,ru={jpeg:"jpg","svg+xml":"svg"},su=(e,t)=>{let i=lu(e),a=t.split("/")[1],n=ru[a]||a;return`${i}.${n}`},cu=e=>/jpeg|png|svg\+xml/.test(e)?e:"image/jpeg",du=e=>/^image/.test(e.type),pu={1:()=>[1,0,0,1,0,0],2:e=>[-1,0,0,1,e,0],3:(e,t)=>[-1,0,0,-1,e,t],4:(e,t)=>[1,0,0,-1,0,t],5:()=>[0,1,1,0,0,0],6:(e,t)=>[0,1,-1,0,t,0],7:(e,t)=>[0,-1,-1,0,t,e],8:e=>[0,-1,1,0,0,e]},mu=(e,t,i)=>(i===-1&&(i=1),pu[i](e,t)),Yt=(e,t)=>({x:e,y:t}),uu=(e,t)=>e.x*t.x+e.y*t.y,fl=(e,t)=>Yt(e.x-t.x,e.y-t.y),fu=(e,t)=>uu(fl(e,t),fl(e,t)),hl=(e,t)=>Math.sqrt(fu(e,t)),gl=(e,t)=>{let i=e,a=1.5707963267948966,n=t,o=1.5707963267948966-t,l=Math.sin(a),r=Math.sin(n),s=Math.sin(o),p=Math.cos(o),c=i/l,d=c*r,m=c*s;return Yt(p*d,p*m)},hu=(e,t)=>{let i=e.width,a=e.height,n=gl(i,t),o=gl(a,t),l=Yt(e.x+Math.abs(n.x),e.y-Math.abs(n.y)),r=Yt(e.x+e.width+Math.abs(o.y),e.y+Math.abs(o.x)),s=Yt(e.x-Math.abs(o.y),e.y+e.height-Math.abs(o.x));return{width:hl(l,r),height:hl(l,s)}},Tl=(e,t,i=0,a={x:.5,y:.5})=>{let n=a.x>.5?1-a.x:a.x,o=a.y>.5?1-a.y:a.y,l=n*2*e.width,r=o*2*e.height,s=hu(t,i);return Math.max(s.width/l,s.height/r)},Il=(e,t)=>{let i=e.width,a=i*t;a>e.height&&(a=e.height,i=a/t);let n=(e.width-i)*.5,o=(e.height-a)*.5;return{x:n,y:o,width:i,height:a}},El=(e,t,i=1)=>{let a=e.height/e.width,n=1,o=t,l=1,r=a;r>o&&(r=o,l=r/a);let s=Math.max(n/l,o/r),p=e.width/(i*s*l),c=p*t;return{width:p,height:c}},vl=e=>{e.width=1,e.height=1,e.getContext("2d").clearRect(0,0,1,1)},bl=e=>e&&(e.horizontal||e.vertical),gu=(e,t,i)=>{if(t<=1&&!bl(i))return e.width=e.naturalWidth,e.height=e.naturalHeight,e;let a=document.createElement("canvas"),n=e.naturalWidth,o=e.naturalHeight,l=t>=5&&t<=8;l?(a.width=o,a.height=n):(a.width=n,a.height=o);let r=a.getContext("2d");if(t&&r.transform.apply(r,mu(n,o,t)),bl(i)){let s=[1,0,0,1,0,0];(!l&&i.horizontal||l&i.vertical)&&(s[0]=-1,s[4]=n),(!l&&i.vertical||l&&i.horizontal)&&(s[3]=-1,s[5]=o),r.transform(...s)}return r.drawImage(e,0,0,n,o),a},Eu=(e,t,i={},a={})=>{let{canvasMemoryLimit:n,background:o=null}=a,l=i.zoom||1,r=gu(e,t,i.flip),s={width:r.width,height:r.height},p=i.aspectRatio||s.height/s.width,c=El(s,p,l);if(n){let T=c.width*c.height;if(T>n){let v=Math.sqrt(n)/Math.sqrt(T);s.width=Math.floor(s.width*v),s.height=Math.floor(s.height*v),c=El(s,p,l)}}let d=document.createElement("canvas"),m={x:c.width*.5,y:c.height*.5},u={x:0,y:0,width:c.width,height:c.height,center:m},f=typeof i.scaleToFit>"u"||i.scaleToFit,h=l*Tl(s,Il(u,p),i.rotation,f?i.center:{x:.5,y:.5});d.width=Math.round(c.width/h),d.height=Math.round(c.height/h),m.x/=h,m.y/=h;let g={x:m.x-s.width*(i.center?i.center.x:.5),y:m.y-s.height*(i.center?i.center.y:.5)},I=d.getContext("2d");o&&(I.fillStyle=o,I.fillRect(0,0,d.width,d.height)),I.translate(m.x,m.y),I.rotate(i.rotation||0),I.drawImage(r,g.x-m.x,g.y-m.y,s.width,s.height);let E=I.getImageData(0,0,d.width,d.height);return vl(d),E},bu=(()=>typeof window<"u"&&typeof window.document<"u")();bu&&(HTMLCanvasElement.prototype.toBlob||Object.defineProperty(HTMLCanvasElement.prototype,"toBlob",{value:function(e,t,i){var a=this.toDataURL(t,i).split(",")[1];setTimeout(function(){for(var n=atob(a),o=n.length,l=new Uint8Array(o),r=0;rnew Promise(a=>{let n=i?i(e):e;Promise.resolve(n).then(o=>{o.toBlob(a,t.type,t.quality)})}),yi=(e,t)=>qt(e.x*t,e.y*t),_i=(e,t)=>qt(e.x+t.x,e.y+t.y),xl=e=>{let t=Math.sqrt(e.x*e.x+e.y*e.y);return t===0?{x:0,y:0}:qt(e.x/t,e.y/t)},qe=(e,t,i)=>{let a=Math.cos(t),n=Math.sin(t),o=qt(e.x-i.x,e.y-i.y);return qt(i.x+a*o.x-n*o.y,i.y+n*o.x+a*o.y)},qt=(e=0,t=0)=>({x:e,y:t}),me=(e,t,i=1,a)=>{if(typeof e=="string")return parseFloat(e)*i;if(typeof e=="number")return e*(a?t[a]:Math.min(t.width,t.height))},ct=(e,t,i)=>{let a=e.borderStyle||e.lineStyle||"solid",n=e.backgroundColor||e.fontColor||"transparent",o=e.borderColor||e.lineColor||"transparent",l=me(e.borderWidth||e.lineWidth,t,i),r=e.lineCap||"round",s=e.lineJoin||"round",p=typeof a=="string"?"":a.map(d=>me(d,t,i)).join(","),c=e.opacity||1;return{"stroke-linecap":r,"stroke-linejoin":s,"stroke-width":l||0,"stroke-dasharray":p,stroke:o,fill:n,opacity:c}},Le=e=>e!=null,wt=(e,t,i=1)=>{let a=me(e.x,t,i,"width")||me(e.left,t,i,"width"),n=me(e.y,t,i,"height")||me(e.top,t,i,"height"),o=me(e.width,t,i,"width"),l=me(e.height,t,i,"height"),r=me(e.right,t,i,"width"),s=me(e.bottom,t,i,"height");return Le(n)||(Le(l)&&Le(s)?n=t.height-l-s:n=s),Le(a)||(Le(o)&&Le(r)?a=t.width-o-r:a=r),Le(o)||(Le(a)&&Le(r)?o=t.width-a-r:o=0),Le(l)||(Le(n)&&Le(s)?l=t.height-n-s:l=0),{x:a||0,y:n||0,width:o||0,height:l||0}},Iu=e=>e.map((t,i)=>`${i===0?"M":"L"} ${t.x} ${t.y}`).join(" "),Ne=(e,t)=>Object.keys(t).forEach(i=>e.setAttribute(i,t[i])),vu="http://www.w3.org/2000/svg",Rt=(e,t)=>{let i=document.createElementNS(vu,e);return t&&Ne(i,t),i},xu=e=>Ne(e,{...e.rect,...e.styles}),yu=e=>{let t=e.rect.x+e.rect.width*.5,i=e.rect.y+e.rect.height*.5,a=e.rect.width*.5,n=e.rect.height*.5;return Ne(e,{cx:t,cy:i,rx:a,ry:n,...e.styles})},_u={contain:"xMidYMid meet",cover:"xMidYMid slice"},Ru=(e,t)=>{Ne(e,{...e.rect,...e.styles,preserveAspectRatio:_u[t.fit]||"none"})},wu={left:"start",center:"middle",right:"end"},Su=(e,t,i,a)=>{let n=me(t.fontSize,i,a),o=t.fontFamily||"sans-serif",l=t.fontWeight||"normal",r=wu[t.textAlign]||"start";Ne(e,{...e.rect,...e.styles,"stroke-width":0,"font-weight":l,"font-size":n,"font-family":o,"text-anchor":r}),e.text!==t.text&&(e.text=t.text,e.textContent=t.text.length?t.text:" ")},Lu=(e,t,i,a)=>{Ne(e,{...e.rect,...e.styles,fill:"none"});let n=e.childNodes[0],o=e.childNodes[1],l=e.childNodes[2],r=e.rect,s={x:e.rect.x+e.rect.width,y:e.rect.y+e.rect.height};if(Ne(n,{x1:r.x,y1:r.y,x2:s.x,y2:s.y}),!t.lineDecoration)return;o.style.display="none",l.style.display="none";let p=xl({x:s.x-r.x,y:s.y-r.y}),c=me(.05,i,a);if(t.lineDecoration.indexOf("arrow-begin")!==-1){let d=yi(p,c),m=_i(r,d),u=qe(r,2,m),f=qe(r,-2,m);Ne(o,{style:"display:block;",d:`M${u.x},${u.y} L${r.x},${r.y} L${f.x},${f.y}`})}if(t.lineDecoration.indexOf("arrow-end")!==-1){let d=yi(p,-c),m=_i(s,d),u=qe(s,2,m),f=qe(s,-2,m);Ne(l,{style:"display:block;",d:`M${u.x},${u.y} L${s.x},${s.y} L${f.x},${f.y}`})}},Au=(e,t,i,a)=>{Ne(e,{...e.styles,fill:"none",d:Iu(t.points.map(n=>({x:me(n.x,i,a,"width"),y:me(n.y,i,a,"height")})))})},xi=e=>t=>Rt(e,{id:t.id}),Mu=e=>{let t=Rt("image",{id:e.id,"stroke-linecap":"round","stroke-linejoin":"round",opacity:"0"});return t.onload=()=>{t.setAttribute("opacity",e.opacity||1)},t.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",e.src),t},Ou=e=>{let t=Rt("g",{id:e.id,"stroke-linecap":"round","stroke-linejoin":"round"}),i=Rt("line");t.appendChild(i);let a=Rt("path");t.appendChild(a);let n=Rt("path");return t.appendChild(n),t},Pu={image:Mu,rect:xi("rect"),ellipse:xi("ellipse"),text:xi("text"),path:xi("path"),line:Ou},Du={rect:xu,ellipse:yu,image:Ru,text:Su,path:Au,line:Lu},Fu=(e,t)=>Pu[e](t),zu=(e,t,i,a,n)=>{t!=="path"&&(e.rect=wt(i,a,n)),e.styles=ct(i,a,n),Du[t](e,i,a,n)},yl=(e,t)=>e[1].zIndex>t[1].zIndex?1:e[1].zIndexnew Promise(n=>{let{background:o=null}=a,l=new FileReader;l.onloadend=()=>{let r=l.result,s=document.createElement("div");s.style.cssText="position:absolute;pointer-events:none;width:0;height:0;visibility:hidden;",s.innerHTML=r;let p=s.querySelector("svg");document.body.appendChild(s);let c=p.getBBox();s.parentNode.removeChild(s);let d=s.querySelector("title"),m=p.getAttribute("viewBox")||"",u=p.getAttribute("width")||"",f=p.getAttribute("height")||"",h=parseFloat(u)||null,g=parseFloat(f)||null,I=(u.match(/[a-z]+/)||[])[0]||"",E=(f.match(/[a-z]+/)||[])[0]||"",T=m.split(" ").map(parseFloat),v=T.length?{x:T[0],y:T[1],width:T[2],height:T[3]}:c,y=h??v.width,b=g??v.height;p.style.overflow="visible",p.setAttribute("width",y),p.setAttribute("height",b);let w="";if(i&&i.length){let Q={width:y,height:b};w=i.sort(yl).reduce((pe,G)=>{let H=Fu(G[0],G[1]);return zu(H,G[0],G[1],Q),H.removeAttribute("id"),H.getAttribute("opacity")===1&&H.removeAttribute("opacity"),pe+` `+H.outerHTML+` `},""),w=` ${w.replace(/ /g," ")} -`}let x=t.aspectRatio||b/y,_=y,P=_*x,O=typeof t.scaleToFit>"u"||t.scaleToFit,M=t.center?t.center.x:.5,C=t.center?t.center.y:.5,S=Tl({width:y,height:b},Il({width:_,height:P},x),t.rotation,O?{x:M,y:C}:{x:.5,y:.5}),F=t.zoom*S,R=t.rotation*(180/Math.PI),L={x:_*.5,y:P*.5},z={x:L.x-y*M,y:L.y-b*C},D=[`rotate(${R} ${L.x} ${L.y})`,`translate(${L.x} ${L.y})`,`scale(${F})`,`translate(${-L.x} ${-L.y})`,`translate(${z.x} ${z.y})`],k=t.flip&&t.flip.horizontal,B=t.flip&&t.flip.vertical,X=[`scale(${k?-1:1} ${B?-1:1})`,`translate(${k?-y:0} ${B?-b:0})`],Y=` +`}let x=t.aspectRatio||b/y,_=y,P=_*x,O=typeof t.scaleToFit>"u"||t.scaleToFit,M=t.center?t.center.x:.5,C=t.center?t.center.y:.5,S=Tl({width:y,height:b},Il({width:_,height:P},x),t.rotation,O?{x:M,y:C}:{x:.5,y:.5}),F=t.zoom*S,R=t.rotation*(180/Math.PI),L={x:_*.5,y:P*.5},z={x:L.x-y*M,y:L.y-b*C},D=[`rotate(${R} ${L.x} ${L.y})`,`translate(${L.x} ${L.y})`,`scale(${F})`,`translate(${-L.x} ${-L.y})`,`translate(${z.x} ${z.y})`],k=t.flip&&t.flip.horizontal,B=t.flip&&t.flip.vertical,X=[`scale(${k?-1:1} ${B?-1:1})`,`translate(${k?-y:0} ${B?-b:0})`],q=` ${p.outerHTML}${w} -`;n(Y)},l.readAsText(e)}),Nu=e=>{let t;try{t=new ImageData(e.width,e.height)}catch{t=document.createElement("canvas").getContext("2d").createImageData(e.width,e.height)}return t.data.set(e.data),t},Bu=()=>{let e={resize:c,filter:p},t=(d,m)=>(d.forEach(u=>{m=e[u.type](m,u.data)}),m),i=(d,m)=>{let u=d.transforms,f=null;if(u.forEach(h=>{h.type==="filter"&&(f=h)}),f){let h=null;u.forEach(g=>{g.type==="resize"&&(h=g)}),h&&(h.data.matrix=f.data,u=u.filter(g=>g.type!=="filter"))}m(t(u,d.imageData))};self.onmessage=d=>{i(d.data.message,m=>{self.postMessage({id:d.data.id,message:m},[m.data.buffer])})};let a=1,n=1,o=1;function l(d,m,u){let f=m[d]/255,h=m[d+1]/255,g=m[d+2]/255,I=m[d+3]/255,E=f*u[0]+h*u[1]+g*u[2]+I*u[3]+u[4],T=f*u[5]+h*u[6]+g*u[7]+I*u[8]+u[9],v=f*u[10]+h*u[11]+g*u[12]+I*u[13]+u[14],y=f*u[15]+h*u[16]+g*u[17]+I*u[18]+u[19],b=Math.max(0,E*y)+a*(1-y),w=Math.max(0,T*y)+n*(1-y),x=Math.max(0,v*y)+o*(1-y);m[d]=Math.max(0,Math.min(1,b))*255,m[d+1]=Math.max(0,Math.min(1,w))*255,m[d+2]=Math.max(0,Math.min(1,x))*255}let r=self.JSON.stringify([1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0]);function s(d){return self.JSON.stringify(d||[])===r}function p(d,m){if(!m||s(m))return d;let u=d.data,f=u.length,h=m[0],g=m[1],I=m[2],E=m[3],T=m[4],v=m[5],y=m[6],b=m[7],w=m[8],x=m[9],_=m[10],P=m[11],O=m[12],M=m[13],C=m[14],S=m[15],F=m[16],R=m[17],L=m[18],z=m[19],D=0,k=0,B=0,X=0,Y=0,Q=0,pe=0,G=0,H=0,q=0,re=0,ee=0;for(;D1&&f===!1)return p(d,I);h=d.width*S,g=d.height*S}let E=d.width,T=d.height,v=Math.round(h),y=Math.round(g),b=d.data,w=new Uint8ClampedArray(v*y*4),x=E/v,_=T/y,P=Math.ceil(x*.5),O=Math.ceil(_*.5);for(let M=0;M=-1&&re<=1&&(F=2*re*re*re-3*re*re+1,F>0)){q=4*(H+Y*E);let ee=b[q+3];B+=F*ee,L+=F,ee<255&&(F=F*ee/250),z+=F*b[q],D+=F*b[q+1],k+=F*b[q+2],R+=F}}}w[S]=z/R,w[S+1]=D/R,w[S+2]=k/R,w[S+3]=B/L,I&&l(S,w,I)}return{data:w,width:v,height:y}}},ku=(e,t)=>{if(e.getUint32(t+4,!1)!==1165519206)return;t+=4;let i=e.getUint16(t+=6,!1)===18761;t+=e.getUint32(t+4,i);let a=e.getUint16(t,i);t+=2;for(let n=0;n{let t=new DataView(e);if(t.getUint16(0)!==65496)return null;let i=2,a,n,o=!1;for(;i=65504&&a<=65519||a===65534)||(o||(o=ku(t,i,n)),i+n>t.byteLength)));)i+=n;return e.slice(0,i)},Gu=e=>new Promise(t=>{let i=new FileReader;i.onload=()=>t(Vu(i.result)||null),i.readAsArrayBuffer(e.slice(0,256*1024))}),Uu=()=>window.BlobBuilder=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder,Wu=(e,t)=>{let i=Uu();if(i){let a=new i;return a.append(e),a.getBlob(t)}return new Blob([e],{type:t})},Hu=()=>Math.random().toString(36).substr(2,9),ju=e=>{let t=new Blob(["(",e.toString(),")()"],{type:"application/javascript"}),i=URL.createObjectURL(t),a=new Worker(i),n=[];return{transfer:()=>{},post:(o,l,r)=>{let s=Hu();n[s]=l,a.onmessage=p=>{let c=n[p.data.id];c&&(c(p.data.message),delete n[p.data.id])},a.postMessage({id:s,message:o},r)},terminate:()=>{a.terminate(),URL.revokeObjectURL(i)}}},qu=e=>new Promise((t,i)=>{let a=new Image;a.onload=()=>{t(a)},a.onerror=n=>{i(n)},a.src=e}),Yu=e=>e.reduce((t,i)=>t.then(a=>i().then(Array.prototype.concat.bind(a))),Promise.resolve([])),$u=(e,t)=>new Promise(i=>{let a={width:e.width,height:e.height},n=e.getContext("2d"),o=t.sort(yl).map(l=>()=>new Promise(r=>{tf[l[0]](n,a,l[1],r)&&r()}));Yu(o).then(()=>i(e))}),St=(e,t)=>{e.beginPath(),e.lineCap=t["stroke-linecap"],e.lineJoin=t["stroke-linejoin"],e.lineWidth=t["stroke-width"],t["stroke-dasharray"].length&&e.setLineDash(t["stroke-dasharray"].split(",")),e.fillStyle=t.fill,e.strokeStyle=t.stroke,e.globalAlpha=t.opacity||1},Lt=e=>{e.fill(),e.stroke(),e.globalAlpha=1},Xu=(e,t,i)=>{let a=wt(i,t),n=ct(i,t);return St(e,n),e.rect(a.x,a.y,a.width,a.height),Lt(e,n),!0},Qu=(e,t,i)=>{let a=wt(i,t),n=ct(i,t);St(e,n);let o=a.x,l=a.y,r=a.width,s=a.height,p=.5522848,c=r/2*p,d=s/2*p,m=o+r,u=l+s,f=o+r/2,h=l+s/2;return e.moveTo(o,h),e.bezierCurveTo(o,h-d,f-c,l,f,l),e.bezierCurveTo(f+c,l,m,h-d,m,h),e.bezierCurveTo(m,h+d,f+c,u,f,u),e.bezierCurveTo(f-c,u,o,h+d,o,h),Lt(e,n),!0},Zu=(e,t,i,a)=>{let n=wt(i,t),o=ct(i,t);St(e,o);let l=new Image;new URL(i.src,window.location.href).origin!==window.location.origin&&(l.crossOrigin=""),l.onload=()=>{if(i.fit==="cover"){let s=n.width/n.height,p=s>1?l.width:l.height*s,c=s>1?l.width/s:l.height,d=l.width*.5-p*.5,m=l.height*.5-c*.5;e.drawImage(l,d,m,p,c,n.x,n.y,n.width,n.height)}else if(i.fit==="contain"){let s=Math.min(n.width/l.width,n.height/l.height),p=s*l.width,c=s*l.height,d=n.x+n.width*.5-p*.5,m=n.y+n.height*.5-c*.5;e.drawImage(l,0,0,l.width,l.height,d,m,p,c)}else e.drawImage(l,0,0,l.width,l.height,n.x,n.y,n.width,n.height);Lt(e,o),a()},l.src=i.src},Ku=(e,t,i)=>{let a=wt(i,t),n=ct(i,t);St(e,n);let o=me(i.fontSize,t),l=i.fontFamily||"sans-serif",r=i.fontWeight||"normal",s=i.textAlign||"left";return e.font=`${r} ${o}px ${l}`,e.textAlign=s,e.fillText(i.text,a.x,a.y),Lt(e,n),!0},Ju=(e,t,i)=>{let a=ct(i,t);St(e,a),e.beginPath();let n=i.points.map(l=>({x:me(l.x,t,1,"width"),y:me(l.y,t,1,"height")}));e.moveTo(n[0].x,n[0].y);let o=n.length;for(let l=1;l{let a=wt(i,t),n=ct(i,t);St(e,n),e.beginPath();let o={x:a.x,y:a.y},l={x:a.x+a.width,y:a.y+a.height};e.moveTo(o.x,o.y),e.lineTo(l.x,l.y);let r=xl({x:l.x-o.x,y:l.y-o.y}),s=.04*Math.min(t.width,t.height);if(i.lineDecoration.indexOf("arrow-begin")!==-1){let p=yi(r,s),c=_i(o,p),d=Ye(o,2,c),m=Ye(o,-2,c);e.moveTo(d.x,d.y),e.lineTo(o.x,o.y),e.lineTo(m.x,m.y)}if(i.lineDecoration.indexOf("arrow-end")!==-1){let p=yi(r,-s),c=_i(l,p),d=Ye(l,2,c),m=Ye(l,-2,c);e.moveTo(d.x,d.y),e.lineTo(l.x,l.y),e.lineTo(m.x,m.y)}return Lt(e,n),!0},tf={rect:Xu,ellipse:Qu,image:Zu,text:Ku,line:ef,path:Ju},af=e=>{let t=document.createElement("canvas");return t.width=e.width,t.height=e.height,t.getContext("2d").putImageData(e,0,0),t},nf=(e,t,i={})=>new Promise((a,n)=>{if(!e||!du(e))return n({status:"not an image file",file:e});let{stripImageHead:o,beforeCreateBlob:l,afterCreateBlob:r,canvasMemoryLimit:s}=i,{crop:p,size:c,filter:d,markup:m,output:u}=t,f=t.image&&t.image.orientation?Math.max(1,Math.min(8,t.image.orientation)):null,h=u&&u.quality,g=h===null?null:h/100,I=u&&u.type||null,E=u&&u.background||null,T=[];c&&(typeof c.width=="number"||typeof c.height=="number")&&T.push({type:"resize",data:c}),d&&d.length===20&&T.push({type:"filter",data:d});let v=w=>{let x=r?r(w):w;Promise.resolve(x).then(a)},y=(w,x)=>{let _=af(w),P=m.length?$u(_,m):_;Promise.resolve(P).then(O=>{Tu(O,x,l).then(M=>{if(vl(O),o)return v(M);Gu(e).then(C=>{C!==null&&(M=new Blob([C,M.slice(20)],{type:M.type})),v(M)})}).catch(n)})};if(/svg/.test(e.type)&&I===null)return Cu(e,p,m,{background:E}).then(w=>{a(Wu(w,"image/svg+xml"))});let b=URL.createObjectURL(e);qu(b).then(w=>{URL.revokeObjectURL(b);let x=Eu(w,f,p,{canvasMemoryLimit:s,background:E}),_={quality:g,type:I||e.type};if(!T.length)return y(x,_);let P=ju(Bu);P.post({transforms:T,imageData:x},O=>{y(Nu(O),_),P.terminate()},[x.data.buffer])}).catch(n)}),of=["x","y","left","top","right","bottom","width","height"],lf=e=>typeof e=="string"&&/%/.test(e)?parseFloat(e)/100:e,rf=e=>{let[t,i]=e,a=i.points?{}:of.reduce((n,o)=>(n[o]=lf(i[o]),n),{});return[t,{zIndex:0,...i,...a}]},sf=e=>new Promise((t,i)=>{let a=new Image;a.src=URL.createObjectURL(e);let n=()=>{let l=a.naturalWidth,r=a.naturalHeight;l&&r&&(URL.revokeObjectURL(a.src),clearInterval(o),t({width:l,height:r}))};a.onerror=l=>{URL.revokeObjectURL(a.src),clearInterval(o),i(l)};let o=setInterval(n,1);n()});typeof window<"u"&&typeof window.document<"u"&&(HTMLCanvasElement.prototype.toBlob||Object.defineProperty(HTMLCanvasElement.prototype,"toBlob",{value:function(e,t,i){let a=this;setTimeout(()=>{let n=a.toDataURL(t,i).split(",")[1],o=atob(n),l=o.length,r=new Uint8Array(l);for(;l--;)r[l]=o.charCodeAt(l);e(new Blob([r],{type:t||"image/png"}))})}}));var Sa=typeof window<"u"&&typeof window.document<"u",cf=Sa&&/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream,_l=({addFilter:e,utils:t})=>{let{Type:i,forin:a,getFileFromBlob:n,isFile:o}=t,l=["crop","resize","filter","markup","output"],r=c=>(d,m,u)=>d(m,c?c(u):u),s=c=>c.aspectRatio===null&&c.rotation===0&&c.zoom===1&&c.center&&c.center.x===.5&&c.center.y===.5&&c.flip&&c.flip.horizontal===!1&&c.flip.vertical===!1;e("SHOULD_PREPARE_OUTPUT",(c,{query:d})=>new Promise(m=>{m(!d("IS_ASYNC"))}));let p=(c,d,m)=>new Promise(u=>{if(!c("GET_ALLOW_IMAGE_TRANSFORM")||m.archived||!o(d)||!ou(d))return u(!1);sf(d).then(()=>{let f=c("GET_IMAGE_TRANSFORM_IMAGE_FILTER");if(f){let h=f(d);if(h==null)return handleRevert(!0);if(typeof h=="boolean")return u(h);if(typeof h.then=="function")return h.then(u)}u(!0)}).catch(f=>{u(!1)})});return e("DID_CREATE_ITEM",(c,{query:d,dispatch:m})=>{d("GET_ALLOW_IMAGE_TRANSFORM")&&c.extend("requestPrepare",()=>new Promise((u,f)=>{m("REQUEST_PREPARE_OUTPUT",{query:c.id,item:c,success:u,failure:f},!0)}))}),e("PREPARE_OUTPUT",(c,{query:d,item:m})=>new Promise(u=>{p(d,c,m).then(f=>{if(!f)return u(c);let h=[];d("GET_IMAGE_TRANSFORM_VARIANTS_INCLUDE_ORIGINAL")&&h.push(()=>new Promise(x=>{x({name:d("GET_IMAGE_TRANSFORM_VARIANTS_ORIGINAL_NAME"),file:c})})),d("GET_IMAGE_TRANSFORM_VARIANTS_INCLUDE_DEFAULT")&&h.push((x,_,P)=>new Promise(O=>{x(_,P).then(M=>O({name:d("GET_IMAGE_TRANSFORM_VARIANTS_DEFAULT_NAME"),file:M}))}));let g=d("GET_IMAGE_TRANSFORM_VARIANTS")||{};a(g,(x,_)=>{let P=r(_);h.push((O,M,C)=>new Promise(S=>{P(O,M,C).then(F=>S({name:x,file:F}))}))});let I=d("GET_IMAGE_TRANSFORM_OUTPUT_QUALITY"),E=d("GET_IMAGE_TRANSFORM_OUTPUT_QUALITY_MODE"),T=I===null?null:I/100,v=d("GET_IMAGE_TRANSFORM_OUTPUT_MIME_TYPE"),y=d("GET_IMAGE_TRANSFORM_CLIENT_TRANSFORMS")||l;m.setMetadata("output",{type:v,quality:T,client:y},!0);let b=(x,_)=>new Promise((P,O)=>{let M={..._};Object.keys(M).filter(B=>B!=="exif").forEach(B=>{y.indexOf(B)===-1&&delete M[B]});let{resize:C,exif:S,output:F,crop:R,filter:L,markup:z}=M,D={image:{orientation:S?S.orientation:null},output:F&&(F.type||typeof F.quality=="number"||F.background)?{type:F.type,quality:typeof F.quality=="number"?F.quality*100:null,background:F.background||d("GET_IMAGE_TRANSFORM_CANVAS_BACKGROUND_COLOR")||null}:void 0,size:C&&(C.size.width||C.size.height)?{mode:C.mode,upscale:C.upscale,...C.size}:void 0,crop:R&&!s(R)?{...R}:void 0,markup:z&&z.length?z.map(rf):[],filter:L};if(D.output){let B=F.type?F.type!==x.type:!1,X=/\/jpe?g$/.test(x.type),Y=F.quality!==null?X&&E==="always":!1;if(!!!(D.size||D.crop||D.filter||B||Y))return P(x)}let k={beforeCreateBlob:d("GET_IMAGE_TRANSFORM_BEFORE_CREATE_BLOB"),afterCreateBlob:d("GET_IMAGE_TRANSFORM_AFTER_CREATE_BLOB"),canvasMemoryLimit:d("GET_IMAGE_TRANSFORM_CANVAS_MEMORY_LIMIT"),stripImageHead:d("GET_IMAGE_TRANSFORM_OUTPUT_STRIP_IMAGE_HEAD")};nf(x,D,k).then(B=>{let X=n(B,su(x.name,cu(B.type)));P(X)}).catch(O)}),w=h.map(x=>x(b,c,m.getMetadata()));Promise.all(w).then(x=>{u(x.length===1&&x[0].name===null?x[0].file:x)})})})),{options:{allowImageTransform:[!0,i.BOOLEAN],imageTransformImageFilter:[null,i.FUNCTION],imageTransformOutputMimeType:[null,i.STRING],imageTransformOutputQuality:[null,i.INT],imageTransformOutputStripImageHead:[!0,i.BOOLEAN],imageTransformClientTransforms:[null,i.ARRAY],imageTransformOutputQualityMode:["always",i.STRING],imageTransformVariants:[null,i.OBJECT],imageTransformVariantsIncludeDefault:[!0,i.BOOLEAN],imageTransformVariantsDefaultName:[null,i.STRING],imageTransformVariantsIncludeOriginal:[!1,i.BOOLEAN],imageTransformVariantsOriginalName:["original_",i.STRING],imageTransformBeforeCreateBlob:[null,i.FUNCTION],imageTransformAfterCreateBlob:[null,i.FUNCTION],imageTransformCanvasMemoryLimit:[Sa&&cf?4096*4096:null,i.INT],imageTransformCanvasBackgroundColor:[null,i.STRING]}}};Sa&&document.dispatchEvent(new CustomEvent("FilePond:pluginloaded",{detail:_l}));var Rl=_l;var La=e=>/^video/.test(e.type),$t=e=>/^audio/.test(e.type),Aa=class{constructor(t,i){this.mediaEl=t,this.audioElems=i,this.onplayhead=!1,this.duration=0,this.timelineWidth=this.audioElems.timeline.offsetWidth-this.audioElems.playhead.offsetWidth,this.moveplayheadFn=this.moveplayhead.bind(this),this.registerListeners()}registerListeners(){this.mediaEl.addEventListener("timeupdate",this.timeUpdate.bind(this),!1),this.mediaEl.addEventListener("canplaythrough",()=>this.duration=this.mediaEl.duration,!1),this.audioElems.timeline.addEventListener("click",this.timelineClicked.bind(this),!1),this.audioElems.button.addEventListener("click",this.play.bind(this)),this.audioElems.playhead.addEventListener("mousedown",this.mouseDown.bind(this),!1),window.addEventListener("mouseup",this.mouseUp.bind(this),!1)}play(){this.mediaEl.paused?this.mediaEl.play():this.mediaEl.pause(),this.audioElems.button.classList.toggle("play"),this.audioElems.button.classList.toggle("pause")}timeUpdate(){let t=this.mediaEl.currentTime/this.duration*100;this.audioElems.playhead.style.marginLeft=t+"%",this.mediaEl.currentTime===this.duration&&(this.audioElems.button.classList.toggle("play"),this.audioElems.button.classList.toggle("pause"))}moveplayhead(t){let i=t.clientX-this.getPosition(this.audioElems.timeline);i>=0&&i<=this.timelineWidth&&(this.audioElems.playhead.style.marginLeft=i+"px"),i<0&&(this.audioElems.playhead.style.marginLeft="0px"),i>this.timelineWidth&&(this.audioElems.playhead.style.marginLeft=this.timelineWidth-4+"px")}timelineClicked(t){this.moveplayhead(t),this.mediaEl.currentTime=this.duration*this.clickPercent(t)}mouseDown(){this.onplayhead=!0,window.addEventListener("mousemove",this.moveplayheadFn,!0),this.mediaEl.removeEventListener("timeupdate",this.timeUpdate.bind(this),!1)}mouseUp(t){window.removeEventListener("mousemove",this.moveplayheadFn,!0),this.onplayhead==!0&&(this.moveplayhead(t),this.mediaEl.currentTime=this.duration*this.clickPercent(t),this.mediaEl.addEventListener("timeupdate",this.timeUpdate.bind(this),!1)),this.onplayhead=!1}clickPercent(t){return(t.clientX-this.getPosition(this.audioElems.timeline))/this.timelineWidth}getPosition(t){return t.getBoundingClientRect().left}},df=e=>e.utils.createView({name:"media-preview",tag:"div",ignoreRect:!0,create:({root:t,props:i})=>{let{id:a}=i,n=t.query("GET_ITEM",{id:i.id}),o=$t(n.file)?"audio":"video";if(t.ref.media=document.createElement(o),t.ref.media.setAttribute("controls",!0),t.element.appendChild(t.ref.media),$t(n.file)){let l=document.createDocumentFragment();t.ref.audio=[],t.ref.audio.container=document.createElement("div"),t.ref.audio.button=document.createElement("span"),t.ref.audio.timeline=document.createElement("div"),t.ref.audio.playhead=document.createElement("div"),t.ref.audio.container.className="audioplayer",t.ref.audio.button.className="playpausebtn play",t.ref.audio.timeline.className="timeline",t.ref.audio.playhead.className="playhead",t.ref.audio.timeline.appendChild(t.ref.audio.playhead),t.ref.audio.container.appendChild(t.ref.audio.button),t.ref.audio.container.appendChild(t.ref.audio.timeline),l.appendChild(t.ref.audio.container),t.element.appendChild(l)}},write:e.utils.createRoute({DID_MEDIA_PREVIEW_LOAD:({root:t,props:i})=>{let{id:a}=i,n=t.query("GET_ITEM",{id:i.id});if(!n)return;let o=window.URL||window.webkitURL,l=new Blob([n.file],{type:n.file.type});t.ref.media.type=n.file.type,t.ref.media.src=n.file.mock&&n.file.url||o.createObjectURL(l),$t(n.file)&&new Aa(t.ref.media,t.ref.audio),t.ref.media.addEventListener("loadeddata",()=>{let r=75;if(La(n.file)){let s=t.ref.media.offsetWidth,p=t.ref.media.videoWidth/s;r=t.ref.media.videoHeight/p}t.dispatch("DID_UPDATE_PANEL_HEIGHT",{id:i.id,height:r})},!1)}})}),pf=e=>{let t=({root:a,props:n})=>{let{id:o}=n;a.query("GET_ITEM",o)&&a.dispatch("DID_MEDIA_PREVIEW_LOAD",{id:o})},i=({root:a,props:n})=>{let o=df(e);a.ref.media=a.appendChildView(a.createChildView(o,{id:n.id}))};return e.utils.createView({name:"media-preview-wrapper",create:i,write:e.utils.createRoute({DID_MEDIA_PREVIEW_CONTAINER_CREATE:t})})},Ma=e=>{let{addFilter:t,utils:i}=e,{Type:a,createRoute:n}=i,o=pf(e);return t("CREATE_VIEW",l=>{let{is:r,view:s,query:p}=l;if(!r("file"))return;let c=({root:d,props:m})=>{let{id:u}=m,f=p("GET_ITEM",u),h=p("GET_ALLOW_VIDEO_PREVIEW"),g=p("GET_ALLOW_AUDIO_PREVIEW");!f||f.archived||(!La(f.file)||!h)&&(!$t(f.file)||!g)||(d.ref.mediaPreview=s.appendChildView(s.createChildView(o,{id:u})),d.dispatch("DID_MEDIA_PREVIEW_CONTAINER_CREATE",{id:u}))};s.registerWriter(n({DID_LOAD_ITEM:c},({root:d,props:m})=>{let{id:u}=m,f=p("GET_ITEM",u),h=d.query("GET_ALLOW_VIDEO_PREVIEW"),g=d.query("GET_ALLOW_AUDIO_PREVIEW");!f||(!La(f.file)||!h)&&(!$t(f.file)||!g)||d.rect.element.hidden}))}),{options:{allowVideoPreview:[!0,a.BOOLEAN],allowAudioPreview:[!0,a.BOOLEAN]}}},mf=typeof window<"u"&&typeof window.document<"u";mf&&document.dispatchEvent(new CustomEvent("FilePond:pluginloaded",{detail:Ma}));var wl={labelIdle:'\u0627\u0633\u062D\u0628 \u0648 \u0627\u062F\u0631\u062C \u0645\u0644\u0641\u0627\u062A\u0643 \u0623\u0648 \u062A\u0635\u0641\u062D ',labelInvalidField:"\u0627\u0644\u062D\u0642\u0644 \u064A\u062D\u062A\u0648\u064A \u0639\u0644\u0649 \u0645\u0644\u0641\u0627\u062A \u063A\u064A\u0631 \u0635\u0627\u0644\u062D\u0629",labelFileWaitingForSize:"\u0628\u0627\u0646\u062A\u0638\u0627\u0631 \u0627\u0644\u062D\u062C\u0645",labelFileSizeNotAvailable:"\u0627\u0644\u062D\u062C\u0645 \u063A\u064A\u0631 \u0645\u062A\u0627\u062D",labelFileLoading:"\u0628\u0627\u0644\u0625\u0646\u062A\u0638\u0627\u0631",labelFileLoadError:"\u062D\u062F\u062B \u062E\u0637\u0623 \u0623\u062B\u0646\u0627\u0621 \u0627\u0644\u062A\u062D\u0645\u064A\u0644",labelFileProcessing:"\u064A\u062A\u0645 \u0627\u0644\u0631\u0641\u0639",labelFileProcessingComplete:"\u062A\u0645 \u0627\u0644\u0631\u0641\u0639",labelFileProcessingAborted:"\u062A\u0645 \u0625\u0644\u063A\u0627\u0621 \u0627\u0644\u0631\u0641\u0639",labelFileProcessingError:"\u062D\u062F\u062B \u062E\u0637\u0623 \u0623\u062B\u0646\u0627\u0621 \u0627\u0644\u0631\u0641\u0639",labelFileProcessingRevertError:"\u062D\u062F\u062B \u062E\u0637\u0623 \u0623\u062B\u0646\u0627\u0621 \u0627\u0644\u062A\u0631\u0627\u062C\u0639",labelFileRemoveError:"\u062D\u062F\u062B \u062E\u0637\u0623 \u0623\u062B\u0646\u0627\u0621 \u0627\u0644\u062D\u0630\u0641",labelTapToCancel:"\u0627\u0646\u0642\u0631 \u0644\u0644\u0625\u0644\u063A\u0627\u0621",labelTapToRetry:"\u0627\u0646\u0642\u0631 \u0644\u0625\u0639\u0627\u062F\u0629 \u0627\u0644\u0645\u062D\u0627\u0648\u0644\u0629",labelTapToUndo:"\u0627\u0646\u0642\u0631 \u0644\u0644\u062A\u0631\u0627\u062C\u0639",labelButtonRemoveItem:"\u0645\u0633\u062D",labelButtonAbortItemLoad:"\u0625\u0644\u063A\u0627\u0621",labelButtonRetryItemLoad:"\u0625\u0639\u0627\u062F\u0629",labelButtonAbortItemProcessing:"\u0625\u0644\u063A\u0627\u0621",labelButtonUndoItemProcessing:"\u062A\u0631\u0627\u062C\u0639",labelButtonRetryItemProcessing:"\u0625\u0639\u0627\u062F\u0629",labelButtonProcessItem:"\u0631\u0641\u0639",labelMaxFileSizeExceeded:"\u0627\u0644\u0645\u0644\u0641 \u0643\u0628\u064A\u0631 \u062C\u062F\u0627",labelMaxFileSize:"\u062D\u062C\u0645 \u0627\u0644\u0645\u0644\u0641 \u0627\u0644\u0623\u0642\u0635\u0649: {filesize}",labelMaxTotalFileSizeExceeded:"\u062A\u0645 \u062A\u062C\u0627\u0648\u0632 \u0627\u0644\u062D\u062F \u0627\u0644\u0623\u0642\u0635\u0649 \u0644\u0644\u062D\u062C\u0645 \u0627\u0644\u0625\u062C\u0645\u0627\u0644\u064A",labelMaxTotalFileSize:"\u0627\u0644\u062D\u062F \u0627\u0644\u0623\u0642\u0635\u0649 \u0644\u062D\u062C\u0645 \u0627\u0644\u0645\u0644\u0641: {filesize}",labelFileTypeNotAllowed:"\u0645\u0644\u0641 \u0645\u0646 \u0646\u0648\u0639 \u063A\u064A\u0631 \u0635\u0627\u0644\u062D",fileValidateTypeLabelExpectedTypes:"\u062A\u062A\u0648\u0642\u0639 {allButLastType} \u0645\u0646 {lastType}",imageValidateSizeLabelFormatError:"\u0646\u0648\u0639 \u0627\u0644\u0635\u0648\u0631\u0629 \u063A\u064A\u0631 \u0645\u062F\u0639\u0648\u0645",imageValidateSizeLabelImageSizeTooSmall:"\u0627\u0644\u0635\u0648\u0631\u0629 \u0635\u063A\u064A\u0631 \u062C\u062F\u0627",imageValidateSizeLabelImageSizeTooBig:"\u0627\u0644\u0635\u0648\u0631\u0629 \u0643\u0628\u064A\u0631\u0629 \u062C\u062F\u0627",imageValidateSizeLabelExpectedMinSize:"\u0627\u0644\u062D\u062F \u0627\u0644\u0623\u062F\u0646\u0649 \u0644\u0644\u0623\u0628\u0639\u0627\u062F \u0647\u0648: {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"\u0627\u0644\u062D\u062F \u0627\u0644\u0623\u0642\u0635\u0649 \u0644\u0644\u0623\u0628\u0639\u0627\u062F \u0647\u0648: {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"\u0627\u0644\u062F\u0642\u0629 \u0636\u0639\u064A\u0641\u0629 \u062C\u062F\u0627",imageValidateSizeLabelImageResolutionTooHigh:"\u0627\u0644\u062F\u0642\u0629 \u0645\u0631\u062A\u0641\u0639\u0629 \u062C\u062F\u0627",imageValidateSizeLabelExpectedMinResolution:"\u0623\u0642\u0644 \u062F\u0642\u0629: {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"\u0623\u0642\u0635\u0649 \u062F\u0642\u0629: {maxResolution}"};var Sl={labelIdle:'Arrossega i deixa els teus fitxers o Navega ',labelInvalidField:"El camp cont\xE9 fitxers inv\xE0lids",labelFileWaitingForSize:"Esperant mida",labelFileSizeNotAvailable:"Mida no disponible",labelFileLoading:"Carregant",labelFileLoadError:"Error durant la c\xE0rrega",labelFileProcessing:"Pujant",labelFileProcessingComplete:"Pujada completada",labelFileProcessingAborted:"Pujada cancel\xB7lada",labelFileProcessingError:"Error durant la pujada",labelFileProcessingRevertError:"Error durant la reversi\xF3",labelFileRemoveError:"Error durant l'eliminaci\xF3",labelTapToCancel:"toca per cancel\xB7lar",labelTapToRetry:"toca per reintentar",labelTapToUndo:"toca per desfer",labelButtonRemoveItem:"Eliminar",labelButtonAbortItemLoad:"Cancel\xB7lar",labelButtonRetryItemLoad:"Reintentar",labelButtonAbortItemProcessing:"Cancel\xB7lar",labelButtonUndoItemProcessing:"Desfer",labelButtonRetryItemProcessing:"Reintentar",labelButtonProcessItem:"Pujar",labelMaxFileSizeExceeded:"El fitxer \xE9s massa gran",labelMaxFileSize:"La mida m\xE0xima del fitxer \xE9s {filesize}",labelMaxTotalFileSizeExceeded:"Mida m\xE0xima total excedida",labelMaxTotalFileSize:"La mida m\xE0xima total del fitxer \xE9s {filesize}",labelFileTypeNotAllowed:"Fitxer de tipus inv\xE0lid",fileValidateTypeLabelExpectedTypes:"Espera {allButLastType} o {lastType}",imageValidateSizeLabelFormatError:"Tipus d'imatge no suportada",imageValidateSizeLabelImageSizeTooSmall:"La imatge \xE9s massa petita",imageValidateSizeLabelImageSizeTooBig:"La imatge \xE9s massa gran",imageValidateSizeLabelExpectedMinSize:"La mida m\xEDnima \xE9s {minWidth} x {minHeight}",imageValidateSizeLabelExpectedMaxSize:"La mida m\xE0xima \xE9s {maxWidth} x {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"La resoluci\xF3 \xE9s massa baixa",imageValidateSizeLabelImageResolutionTooHigh:"La resoluci\xF3 \xE9s massa alta",imageValidateSizeLabelExpectedMinResolution:"La resoluci\xF3 m\xEDnima \xE9s {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"La resoluci\xF3 m\xE0xima \xE9s {maxResolution}"};var Ll={labelIdle:'\u067E\u06D5\u0695\u06AF\u06D5\u06A9\u0627\u0646 \u0641\u0695\u06CE \u0628\u062F\u06D5 \u0626\u06CE\u0631\u06D5 \u0628\u06C6 \u0628\u0627\u0631\u06A9\u0631\u062F\u0646 \u06CC\u0627\u0646 \u0647\u06D5\u06B5\u0628\u0698\u06CE\u0631\u06D5 ',labelInvalidField:"\u067E\u06D5\u0695\u06AF\u06D5\u06CC \u0646\u0627\u062F\u0631\u0648\u0633\u062A\u06CC \u062A\u06CE\u062F\u0627\u06CC\u06D5",labelFileWaitingForSize:"\u0686\u0627\u0648\u06D5\u0695\u0648\u0627\u0646\u06CC\u06CC \u0642\u06D5\u0628\u0627\u0631\u06D5",labelFileSizeNotAvailable:"\u0642\u06D5\u0628\u0627\u0631\u06D5 \u0628\u06D5\u0631\u062F\u06D5\u0633\u062A \u0646\u06CC\u06D5",labelFileLoading:"\u0628\u0627\u0631\u06A9\u0631\u062F\u0646",labelFileLoadError:"\u0647\u06D5\u06B5\u06D5 \u0644\u06D5\u0645\u0627\u0648\u06D5\u06CC \u0628\u0627\u0631\u06A9\u0631\u062F\u0646",labelFileProcessing:"\u0628\u0627\u0631\u06A9\u0631\u062F\u0646",labelFileProcessingComplete:"\u0628\u0627\u0631\u06A9\u0631\u062F\u0646 \u062A\u06D5\u0648\u0627\u0648 \u0628\u0648\u0648",labelFileProcessingAborted:"\u0628\u0627\u0631\u06A9\u0631\u062F\u0646 \u0647\u06D5\u06B5\u0648\u06D5\u0634\u0627\u06CC\u06D5\u0648\u06D5",labelFileProcessingError:"\u0647\u06D5\u06B5\u06D5 \u0644\u06D5\u06A9\u0627\u062A\u06CC \u0628\u0627\u0631\u06A9\u0631\u062F\u0646\u062F\u0627",labelFileProcessingRevertError:"\u0647\u06D5\u06B5\u06D5 \u0644\u06D5 \u06A9\u0627\u062A\u06CC \u06AF\u06D5\u0695\u0627\u0646\u06D5\u0648\u06D5",labelFileRemoveError:"\u0647\u06D5\u06B5\u06D5 \u0644\u06D5 \u06A9\u0627\u062A\u06CC \u0633\u0695\u06CC\u0646\u06D5\u0648\u06D5",labelTapToCancel:"\u0628\u06C6 \u0647\u06D5\u06B5\u0648\u06D5\u0634\u0627\u0646\u062F\u0646\u06D5\u0648\u06D5 Tab \u062F\u0627\u0628\u06AF\u0631\u06D5",labelTapToRetry:"tap \u062F\u0627\u0628\u06AF\u0631\u06D5 \u0628\u06C6 \u062F\u0648\u0648\u0628\u0627\u0631\u06D5\u06A9\u0631\u062F\u0646\u06D5\u0648\u06D5",labelTapToUndo:"tap \u062F\u0627\u0628\u06AF\u0631\u06D5 \u0628\u06C6 \u06AF\u06D5\u0695\u0627\u0646\u062F\u0646\u06D5\u0648\u06D5",labelButtonRemoveItem:"\u0633\u0695\u06CC\u0646\u06D5\u0648\u06D5",labelButtonAbortItemLoad:"\u0647\u06D5\u06B5\u0648\u06D5\u0634\u0627\u0646\u062F\u0646\u06D5\u0648\u06D5",labelButtonRetryItemLoad:"\u0647\u06D5\u0648\u06B5\u062F\u0627\u0646\u06D5\u0648\u06D5",labelButtonAbortItemProcessing:"\u067E\u06D5\u0634\u06CC\u0645\u0627\u0646\u0628\u0648\u0648\u0646\u06D5\u0648\u06D5",labelButtonUndoItemProcessing:"\u06AF\u06D5\u0695\u0627\u0646\u062F\u0646\u06D5\u0648\u06D5",labelButtonRetryItemProcessing:"\u0647\u06D5\u0648\u06B5\u062F\u0627\u0646\u06D5\u0648\u06D5",labelButtonProcessItem:"\u0628\u0627\u0631\u06A9\u0631\u062F\u0646",labelMaxFileSizeExceeded:"\u067E\u06D5\u0695\u06AF\u06D5 \u0632\u06C6\u0631 \u06AF\u06D5\u0648\u0631\u06D5\u06CC\u06D5",labelMaxFileSize:"\u0632\u06C6\u0631\u062A\u0631\u06CC\u0646 \u0642\u06D5\u0628\u0627\u0631\u06D5 {filesize}",labelMaxTotalFileSizeExceeded:"\u0632\u06C6\u0631\u062A\u0631\u06CC\u0646 \u0642\u06D5\u0628\u0627\u0631\u06D5\u06CC \u06A9\u06C6\u06CC \u06AF\u0634\u062A\u06CC \u062A\u06CE\u067E\u06D5\u0695\u06CE\u0646\u062F\u0631\u0627",labelMaxTotalFileSize:"\u0632\u06C6\u0631\u062A\u0631\u06CC\u0646 \u0642\u06D5\u0628\u0627\u0631\u06D5\u06CC \u06A9\u06C6\u06CC \u067E\u06D5\u0695\u06AF\u06D5 {filesize}",labelFileTypeNotAllowed:"\u062C\u06C6\u0631\u06CC \u067E\u06D5\u0695\u06AF\u06D5\u06A9\u06D5 \u0646\u0627\u062F\u0631\u0648\u0633\u062A\u06D5",fileValidateTypeLabelExpectedTypes:"\u062C\u06AF\u06D5 \u0644\u06D5 {allButLastType} \u06CC\u0627\u0646 {lastType}",imageValidateSizeLabelFormatError:"\u062C\u06C6\u0631\u06CC \u0648\u06CE\u0646\u06D5 \u067E\u0627\u06B5\u067E\u0634\u062A\u06CC\u06CC \u0646\u06D5\u06A9\u0631\u0627\u0648\u06D5",imageValidateSizeLabelImageSizeTooSmall:"\u0648\u06CE\u0646\u06D5\u06A9\u06D5 \u0632\u06C6\u0631 \u0628\u0686\u0648\u0648\u06A9\u06D5",imageValidateSizeLabelImageSizeTooBig:"\u0648\u06CE\u0646\u06D5\u06A9\u06D5 \u0632\u06C6\u0631 \u06AF\u06D5\u0648\u0631\u06D5\u06CC\u06D5",imageValidateSizeLabelExpectedMinSize:"\u06A9\u06D5\u0645\u062A\u0631\u06CC\u0646 \u0642\u06D5\u0628\u0627\u0631\u06D5 {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"\u0632\u06C6\u0631\u062A\u0631\u06CC\u0646 \u0642\u06D5\u0628\u0627\u0631\u06D5 {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"\u0648\u0631\u062F\u0628\u06CC\u0646\u06CC\u06CC\u06D5\u06A9\u06D5\u06CC \u0632\u06C6\u0631 \u06A9\u06D5\u0645\u06D5",imageValidateSizeLabelImageResolutionTooHigh:"\u0648\u0631\u062F\u0628\u06CC\u0646\u06CC\u06CC\u06D5\u06A9\u06D5\u06CC \u0632\u06C6\u0631 \u0628\u06D5\u0631\u0632\u06D5",imageValidateSizeLabelExpectedMinResolution:"\u06A9\u06D5\u0645\u062A\u0631\u06CC\u0646 \u0648\u0631\u062F\u0628\u06CC\u0646\u06CC\u06CC {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"\u0632\u06C6\u0631\u062A\u0631\u06CC\u0646 \u0648\u0631\u062F\u0628\u06CC\u0646\u06CC {maxResolution}"};var Al={labelIdle:'P\u0159et\xE1hn\u011Bte soubor sem (drag&drop) nebo Vyhledat ',labelInvalidField:"Pole obsahuje chybn\xE9 soubory",labelFileWaitingForSize:"Zji\u0161\u0165uje se velikost",labelFileSizeNotAvailable:"Velikost nen\xED zn\xE1m\xE1",labelFileLoading:"P\u0159en\xE1\u0161\xED se",labelFileLoadError:"Chyba p\u0159i p\u0159enosu",labelFileProcessing:"Prob\xEDh\xE1 upload",labelFileProcessingComplete:"Upload dokon\u010Den",labelFileProcessingAborted:"Upload stornov\xE1n",labelFileProcessingError:"Chyba p\u0159i uploadu",labelFileProcessingRevertError:"Chyba p\u0159i obnov\u011B",labelFileRemoveError:"Chyba p\u0159i odstran\u011Bn\xED",labelTapToCancel:"klepn\u011Bte pro storno",labelTapToRetry:"klepn\u011Bte pro opakov\xE1n\xED",labelTapToUndo:"klepn\u011Bte pro vr\xE1cen\xED",labelButtonRemoveItem:"Odstranit",labelButtonAbortItemLoad:"Storno",labelButtonRetryItemLoad:"Opakovat",labelButtonAbortItemProcessing:"Zp\u011Bt",labelButtonUndoItemProcessing:"Vr\xE1tit",labelButtonRetryItemProcessing:"Opakovat",labelButtonProcessItem:"Upload",labelMaxFileSizeExceeded:"Soubor je p\u0159\xEDli\u0161 velk\xFD",labelMaxFileSize:"Nejv\u011Bt\u0161\xED velikost souboru je {filesize}",labelMaxTotalFileSizeExceeded:"P\u0159ekro\u010Dena maxim\xE1ln\xED celkov\xE1 velikost souboru",labelMaxTotalFileSize:"Maxim\xE1ln\xED celkov\xE1 velikost souboru je {filesize}",labelFileTypeNotAllowed:"Soubor je nespr\xE1vn\xE9ho typu",fileValidateTypeLabelExpectedTypes:"O\u010Dek\xE1v\xE1 se {allButLastType} nebo {lastType}",imageValidateSizeLabelFormatError:"Obr\xE1zek tohoto typu nen\xED podporov\xE1n",imageValidateSizeLabelImageSizeTooSmall:"Obr\xE1zek je p\u0159\xEDli\u0161 mal\xFD",imageValidateSizeLabelImageSizeTooBig:"Obr\xE1zek je p\u0159\xEDli\u0161 velk\xFD",imageValidateSizeLabelExpectedMinSize:"Minim\xE1ln\xED rozm\u011Br je {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"Maxim\xE1ln\xED rozm\u011Br je {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"Rozli\u0161en\xED je p\u0159\xEDli\u0161 mal\xE9",imageValidateSizeLabelImageResolutionTooHigh:"Rozli\u0161en\xED je p\u0159\xEDli\u0161 velk\xE9",imageValidateSizeLabelExpectedMinResolution:"Minim\xE1ln\xED rozli\u0161en\xED je {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Maxim\xE1ln\xED rozli\u0161en\xED je {maxResolution}"};var Ml={labelIdle:'Tr\xE6k & slip filer eller Gennemse ',labelInvalidField:"Felt indeholder ugyldige filer",labelFileWaitingForSize:"Venter p\xE5 st\xF8rrelse",labelFileSizeNotAvailable:"St\xF8rrelse ikke tilg\xE6ngelig",labelFileLoading:"Loader",labelFileLoadError:"Load fejlede",labelFileProcessing:"Uploader",labelFileProcessingComplete:"Upload f\xE6rdig",labelFileProcessingAborted:"Upload annulleret",labelFileProcessingError:"Upload fejlede",labelFileProcessingRevertError:"Fortryd fejlede",labelFileRemoveError:"Fjern fejlede",labelTapToCancel:"tryk for at annullere",labelTapToRetry:"tryk for at pr\xF8ve igen",labelTapToUndo:"tryk for at fortryde",labelButtonRemoveItem:"Fjern",labelButtonAbortItemLoad:"Annuller",labelButtonRetryItemLoad:"Fors\xF8g igen",labelButtonAbortItemProcessing:"Annuller",labelButtonUndoItemProcessing:"Fortryd",labelButtonRetryItemProcessing:"Pr\xF8v igen",labelButtonProcessItem:"Upload",labelMaxFileSizeExceeded:"Filen er for stor",labelMaxFileSize:"Maksimal filst\xF8rrelse er {filesize}",labelMaxTotalFileSizeExceeded:"Maksimal totalst\xF8rrelse overskredet",labelMaxTotalFileSize:"Maksimal total filst\xF8rrelse er {filesize}",labelFileTypeNotAllowed:"Ugyldig filtype",fileValidateTypeLabelExpectedTypes:"Forventer {allButLastType} eller {lastType}",imageValidateSizeLabelFormatError:"Ugyldigt format",imageValidateSizeLabelImageSizeTooSmall:"Billedet er for lille",imageValidateSizeLabelImageSizeTooBig:"Billedet er for stort",imageValidateSizeLabelExpectedMinSize:"Minimum st\xF8rrelse er {minBredde} \xD7 {minH\xF8jde}",imageValidateSizeLabelExpectedMaxSize:"Maksimal st\xF8rrelse er {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"For lav opl\xF8sning",imageValidateSizeLabelImageResolutionTooHigh:"For h\xF8j opl\xF8sning",imageValidateSizeLabelExpectedMinResolution:"Minimum opl\xF8sning er {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Maksimal opl\xF8sning er {maxResolution}"};var Ol={labelIdle:'Dateien ablegen oder ausw\xE4hlen ',labelInvalidField:"Feld beinhaltet ung\xFCltige Dateien",labelFileWaitingForSize:"Dateigr\xF6\xDFe berechnen",labelFileSizeNotAvailable:"Dateigr\xF6\xDFe nicht verf\xFCgbar",labelFileLoading:"Laden",labelFileLoadError:"Fehler beim Laden",labelFileProcessing:"Upload l\xE4uft",labelFileProcessingComplete:"Upload abgeschlossen",labelFileProcessingAborted:"Upload abgebrochen",labelFileProcessingError:"Fehler beim Upload",labelFileProcessingRevertError:"Fehler beim Wiederherstellen",labelFileRemoveError:"Fehler beim L\xF6schen",labelTapToCancel:"abbrechen",labelTapToRetry:"erneut versuchen",labelTapToUndo:"r\xFCckg\xE4ngig",labelButtonRemoveItem:"Entfernen",labelButtonAbortItemLoad:"Verwerfen",labelButtonRetryItemLoad:"Erneut versuchen",labelButtonAbortItemProcessing:"Abbrechen",labelButtonUndoItemProcessing:"R\xFCckg\xE4ngig",labelButtonRetryItemProcessing:"Erneut versuchen",labelButtonProcessItem:"Upload",labelMaxFileSizeExceeded:"Datei ist zu gro\xDF",labelMaxFileSize:"Maximale Dateigr\xF6\xDFe: {filesize}",labelMaxTotalFileSizeExceeded:"Maximale gesamte Dateigr\xF6\xDFe \xFCberschritten",labelMaxTotalFileSize:"Maximale gesamte Dateigr\xF6\xDFe: {filesize}",labelFileTypeNotAllowed:"Dateityp ung\xFCltig",fileValidateTypeLabelExpectedTypes:"Erwartet {allButLastType} oder {lastType}",imageValidateSizeLabelFormatError:"Bildtyp nicht unterst\xFCtzt",imageValidateSizeLabelImageSizeTooSmall:"Bild ist zu klein",imageValidateSizeLabelImageSizeTooBig:"Bild ist zu gro\xDF",imageValidateSizeLabelExpectedMinSize:"Mindestgr\xF6\xDFe: {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"Maximale Gr\xF6\xDFe: {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"Aufl\xF6sung ist zu niedrig",imageValidateSizeLabelImageResolutionTooHigh:"Aufl\xF6sung ist zu hoch",imageValidateSizeLabelExpectedMinResolution:"Mindestaufl\xF6sung: {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Maximale Aufl\xF6sung: {maxResolution}"};var Pl={labelIdle:'Drag & Drop your files or Browse ',labelInvalidField:"Field contains invalid files",labelFileWaitingForSize:"Waiting for size",labelFileSizeNotAvailable:"Size not available",labelFileLoading:"Loading",labelFileLoadError:"Error during load",labelFileProcessing:"Uploading",labelFileProcessingComplete:"Upload complete",labelFileProcessingAborted:"Upload cancelled",labelFileProcessingError:"Error during upload",labelFileProcessingRevertError:"Error during revert",labelFileRemoveError:"Error during remove",labelTapToCancel:"tap to cancel",labelTapToRetry:"tap to retry",labelTapToUndo:"tap to undo",labelButtonRemoveItem:"Remove",labelButtonAbortItemLoad:"Abort",labelButtonRetryItemLoad:"Retry",labelButtonAbortItemProcessing:"Cancel",labelButtonUndoItemProcessing:"Undo",labelButtonRetryItemProcessing:"Retry",labelButtonProcessItem:"Upload",labelMaxFileSizeExceeded:"File is too large",labelMaxFileSize:"Maximum file size is {filesize}",labelMaxTotalFileSizeExceeded:"Maximum total size exceeded",labelMaxTotalFileSize:"Maximum total file size is {filesize}",labelFileTypeNotAllowed:"File of invalid type",fileValidateTypeLabelExpectedTypes:"Expects {allButLastType} or {lastType}",imageValidateSizeLabelFormatError:"Image type not supported",imageValidateSizeLabelImageSizeTooSmall:"Image is too small",imageValidateSizeLabelImageSizeTooBig:"Image is too big",imageValidateSizeLabelExpectedMinSize:"Minimum size is {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"Maximum size is {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"Resolution is too low",imageValidateSizeLabelImageResolutionTooHigh:"Resolution is too high",imageValidateSizeLabelExpectedMinResolution:"Minimum resolution is {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Maximum resolution is {maxResolution}"};var Dl={labelIdle:'Arrastra y suelta tus archivos o Examina ',labelInvalidField:"El campo contiene archivos inv\xE1lidos",labelFileWaitingForSize:"Esperando tama\xF1o",labelFileSizeNotAvailable:"Tama\xF1o no disponible",labelFileLoading:"Cargando",labelFileLoadError:"Error durante la carga",labelFileProcessing:"Subiendo",labelFileProcessingComplete:"Subida completa",labelFileProcessingAborted:"Subida cancelada",labelFileProcessingError:"Error durante la subida",labelFileProcessingRevertError:"Error durante la reversi\xF3n",labelFileRemoveError:"Error durante la eliminaci\xF3n",labelTapToCancel:"toca para cancelar",labelTapToRetry:"tocar para reintentar",labelTapToUndo:"tocar para deshacer",labelButtonRemoveItem:"Eliminar",labelButtonAbortItemLoad:"Cancelar",labelButtonRetryItemLoad:"Reintentar",labelButtonAbortItemProcessing:"Cancelar",labelButtonUndoItemProcessing:"Deshacer",labelButtonRetryItemProcessing:"Reintentar",labelButtonProcessItem:"Subir",labelMaxFileSizeExceeded:"El archivo es demasiado grande",labelMaxFileSize:"El tama\xF1o m\xE1ximo del archivo es {filesize}",labelMaxTotalFileSizeExceeded:"Tama\xF1o total m\xE1ximo excedido",labelMaxTotalFileSize:"El tama\xF1o total m\xE1ximo del archivo es {filesize}",labelFileTypeNotAllowed:"Archivo de tipo inv\xE1lido",fileValidateTypeLabelExpectedTypes:"Espera {allButLastType} o {lastType}",imageValidateSizeLabelFormatError:"Tipo de imagen no soportada",imageValidateSizeLabelImageSizeTooSmall:"La imagen es demasiado peque\xF1a",imageValidateSizeLabelImageSizeTooBig:"La imagen es demasiado grande",imageValidateSizeLabelExpectedMinSize:"El tama\xF1o m\xEDnimo es {minWidth} x {minHeight}",imageValidateSizeLabelExpectedMaxSize:"El tama\xF1o m\xE1ximo es {maxWidth} x {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"La resoluci\xF3n es demasiado baja",imageValidateSizeLabelImageResolutionTooHigh:"La resoluci\xF3n es demasiado alta",imageValidateSizeLabelExpectedMinResolution:"La resoluci\xF3n m\xEDnima es {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"La resoluci\xF3n m\xE1xima es {maxResolution}"};var Fl={labelIdle:'\u0641\u0627\u06CC\u0644 \u0631\u0627 \u0627\u06CC\u0646\u062C\u0627 \u0628\u06A9\u0634\u06CC\u062F \u0648 \u0631\u0647\u0627 \u06A9\u0646\u06CC\u062F\u060C \u06CC\u0627 \u062C\u0633\u062A\u062C\u0648 \u06A9\u0646\u06CC\u062F ',labelInvalidField:"\u0641\u06CC\u0644\u062F \u062F\u0627\u0631\u0627\u06CC \u0641\u0627\u06CC\u0644 \u0647\u0627\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631 \u0627\u0633\u062A",labelFileWaitingForSize:"Waiting for size",labelFileSizeNotAvailable:"\u062D\u062C\u0645 \u0641\u0627\u06CC\u0644 \u0645\u062C\u0627\u0632 \u0646\u06CC\u0633\u062A",labelFileLoading:"\u062F\u0631\u062D\u0627\u0644 \u0628\u0627\u0631\u06AF\u0630\u0627\u0631\u06CC",labelFileLoadError:"\u062E\u0637\u0627 \u062F\u0631 \u0632\u0645\u0627\u0646 \u0627\u062C\u0631\u0627",labelFileProcessing:"\u062F\u0631\u062D\u0627\u0644 \u0628\u0627\u0631\u06AF\u0630\u0627\u0631\u06CC",labelFileProcessingComplete:"\u0628\u0627\u0631\u06AF\u0630\u0627\u0631\u06CC \u06A9\u0627\u0645\u0644 \u0634\u062F",labelFileProcessingAborted:"\u0628\u0627\u0631\u06AF\u0630\u0627\u0631\u06CC \u0644\u063A\u0648 \u0634\u062F",labelFileProcessingError:"\u062E\u0637\u0627 \u062F\u0631 \u0632\u0645\u0627\u0646 \u0628\u0627\u0631\u06AF\u0630\u0627\u0631\u06CC",labelFileProcessingRevertError:"\u062E\u0637\u0627 \u062F\u0631 \u0632\u0645\u0627\u0646 \u062D\u0630\u0641",labelFileRemoveError:"\u062E\u0637\u0627 \u062F\u0631 \u0632\u0645\u0627\u0646 \u062D\u0630\u0641",labelTapToCancel:"\u0628\u0631\u0627\u06CC \u0644\u063A\u0648 \u0636\u0631\u0628\u0647 \u0628\u0632\u0646\u06CC\u062F",labelTapToRetry:"\u0628\u0631\u0627\u06CC \u062A\u06A9\u0631\u0627\u0631 \u06A9\u0644\u06CC\u06A9 \u06A9\u0646\u06CC\u062F",labelTapToUndo:"\u0628\u0631\u0627\u06CC \u0628\u0631\u06AF\u0634\u062A \u06A9\u0644\u06CC\u06A9 \u06A9\u0646\u06CC\u062F",labelButtonRemoveItem:"\u062D\u0630\u0641",labelButtonAbortItemLoad:"\u0644\u063A\u0648",labelButtonRetryItemLoad:"\u062A\u06A9\u0631\u0627\u0631",labelButtonAbortItemProcessing:"\u0644\u063A\u0648",labelButtonUndoItemProcessing:"\u0628\u0631\u06AF\u0634\u062A",labelButtonRetryItemProcessing:"\u062A\u06A9\u0631\u0627\u0631",labelButtonProcessItem:"\u0628\u0627\u0631\u06AF\u0630\u0627\u0631\u06CC",labelMaxFileSizeExceeded:"\u0641\u0627\u06CC\u0644 \u0628\u0633\u06CC\u0627\u0631 \u062D\u062C\u06CC\u0645 \u0627\u0633\u062A",labelMaxFileSize:"\u062D\u062F\u0627\u06A9\u062B\u0631 \u0645\u062C\u0627\u0632 \u0641\u0627\u06CC\u0644 {filesize} \u0627\u0633\u062A",labelMaxTotalFileSizeExceeded:"\u0627\u0632 \u062D\u062F\u0627\u06A9\u062B\u0631 \u062D\u062C\u0645 \u0641\u0627\u06CC\u0644 \u0628\u06CC\u0634\u062A\u0631 \u0634\u062F",labelMaxTotalFileSize:"\u062D\u062F\u0627\u06A9\u062B\u0631 \u062D\u062C\u0645 \u0641\u0627\u06CC\u0644 {filesize} \u0627\u0633\u062A",labelFileTypeNotAllowed:"\u0646\u0648\u0639 \u0641\u0627\u06CC\u0644 \u0646\u0627\u0645\u0639\u062A\u0628\u0631 \u0627\u0633\u062A",fileValidateTypeLabelExpectedTypes:"\u062F\u0631 \u0627\u0646\u062A\u0638\u0627\u0631 {allButLastType} \u06CC\u0627 {lastType}",imageValidateSizeLabelFormatError:"\u0641\u0631\u0645\u062A \u062A\u0635\u0648\u06CC\u0631 \u067E\u0634\u062A\u06CC\u0628\u0627\u0646\u06CC \u0646\u0645\u06CC \u0634\u0648\u062F",imageValidateSizeLabelImageSizeTooSmall:"\u062A\u0635\u0648\u06CC\u0631 \u0628\u0633\u06CC\u0627\u0631 \u06A9\u0648\u0686\u06A9 \u0627\u0633\u062A",imageValidateSizeLabelImageSizeTooBig:"\u062A\u0635\u0648\u06CC\u0631 \u0628\u0633\u06CC\u0627\u0631 \u0628\u0632\u0631\u06AF \u0627\u0633\u062A",imageValidateSizeLabelExpectedMinSize:"\u062D\u062F\u0627\u0642\u0644 \u0627\u0646\u062F\u0627\u0632\u0647 {minWidth} \xD7 {minHeight} \u0627\u0633\u062A",imageValidateSizeLabelExpectedMaxSize:"\u062D\u062F\u0627\u06A9\u062B\u0631 \u0627\u0646\u062F\u0627\u0632\u0647 {maxWidth} \xD7 {maxHeight} \u0627\u0633\u062A",imageValidateSizeLabelImageResolutionTooLow:"\u0648\u0636\u0648\u062D \u062A\u0635\u0648\u06CC\u0631 \u0628\u0633\u06CC\u0627\u0631 \u06A9\u0645 \u0627\u0633\u062A",imageValidateSizeLabelImageResolutionTooHigh:"\u0648\u0636\u0648\u0639 \u062A\u0635\u0648\u06CC\u0631 \u0628\u0633\u06CC\u0627\u0631 \u0632\u06CC\u0627\u062F \u0627\u0633\u062A",imageValidateSizeLabelExpectedMinResolution:"\u062D\u062F\u0627\u0642\u0644 \u0648\u0636\u0648\u062D \u062A\u0635\u0648\u06CC\u0631 {minResolution} \u0627\u0633\u062A",imageValidateSizeLabelExpectedMaxResolution:"\u062D\u062F\u0627\u06A9\u062B\u0631 \u0648\u0636\u0648\u062D \u062A\u0635\u0648\u06CC\u0631 {maxResolution} \u0627\u0633\u062A"};var zl={labelIdle:'Ved\xE4 ja pudota tiedostoja tai Selaa ',labelInvalidField:"Kent\xE4ss\xE4 on virheellisi\xE4 tiedostoja",labelFileWaitingForSize:"Odotetaan kokoa",labelFileSizeNotAvailable:"Kokoa ei saatavilla",labelFileLoading:"Ladataan",labelFileLoadError:"Virhe latauksessa",labelFileProcessing:"L\xE4hetet\xE4\xE4n",labelFileProcessingComplete:"L\xE4hetys valmis",labelFileProcessingAborted:"L\xE4hetys peruttu",labelFileProcessingError:"Virhe l\xE4hetyksess\xE4",labelFileProcessingRevertError:"Virhe palautuksessa",labelFileRemoveError:"Virhe poistamisessa",labelTapToCancel:"peruuta napauttamalla",labelTapToRetry:"yrit\xE4 uudelleen napauttamalla",labelTapToUndo:"kumoa napauttamalla",labelButtonRemoveItem:"Poista",labelButtonAbortItemLoad:"Keskeyt\xE4",labelButtonRetryItemLoad:"Yrit\xE4 uudelleen",labelButtonAbortItemProcessing:"Peruuta",labelButtonUndoItemProcessing:"Kumoa",labelButtonRetryItemProcessing:"Yrit\xE4 uudelleen",labelButtonProcessItem:"L\xE4het\xE4",labelMaxFileSizeExceeded:"Tiedoston koko on liian suuri",labelMaxFileSize:"Tiedoston maksimikoko on {filesize}",labelMaxTotalFileSizeExceeded:"Tiedostojen yhdistetty maksimikoko ylitetty",labelMaxTotalFileSize:"Tiedostojen yhdistetty maksimikoko on {filesize}",labelFileTypeNotAllowed:"Tiedostotyyppi\xE4 ei sallita",fileValidateTypeLabelExpectedTypes:"Sallitaan {allButLastType} tai {lastType}",imageValidateSizeLabelFormatError:"Kuvatyyppi\xE4 ei tueta",imageValidateSizeLabelImageSizeTooSmall:"Kuva on liian pieni",imageValidateSizeLabelImageSizeTooBig:"Kuva on liian suuri",imageValidateSizeLabelExpectedMinSize:"Minimikoko on {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"Maksimikoko on {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"Resoluutio on liian pieni",imageValidateSizeLabelImageResolutionTooHigh:"Resoluutio on liian suuri",imageValidateSizeLabelExpectedMinResolution:"Minimiresoluutio on {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Maksimiresoluutio on {maxResolution}"};var Cl={labelIdle:'Faites glisser vos fichiers ou Parcourir ',labelInvalidField:"Le champ contient des fichiers invalides",labelFileWaitingForSize:"En attente de taille",labelFileSizeNotAvailable:"Taille non disponible",labelFileLoading:"Chargement",labelFileLoadError:"Erreur durant le chargement",labelFileProcessing:"Traitement",labelFileProcessingComplete:"Traitement effectu\xE9",labelFileProcessingAborted:"Traitement interrompu",labelFileProcessingError:"Erreur durant le traitement",labelFileProcessingRevertError:"Erreur durant la restauration",labelFileRemoveError:"Erreur durant la suppression",labelTapToCancel:"appuyer pour annuler",labelTapToRetry:"appuyer pour r\xE9essayer",labelTapToUndo:"appuyer pour revenir en arri\xE8re",labelButtonRemoveItem:"Retirer",labelButtonAbortItemLoad:"Annuler",labelButtonRetryItemLoad:"Recommencer",labelButtonAbortItemProcessing:"Annuler",labelButtonUndoItemProcessing:"Revenir en arri\xE8re",labelButtonRetryItemProcessing:"Recommencer",labelButtonProcessItem:"Transf\xE9rer",labelMaxFileSizeExceeded:"Le fichier est trop volumineux",labelMaxFileSize:"La taille maximale de fichier est {filesize}",labelMaxTotalFileSizeExceeded:"Taille totale maximale d\xE9pass\xE9e",labelMaxTotalFileSize:"La taille totale maximale des fichiers est {filesize}",labelFileTypeNotAllowed:"Fichier non valide",fileValidateTypeLabelExpectedTypes:"Attendu {allButLastType} ou {lastType}",imageValidateSizeLabelFormatError:"Type d'image non pris en charge",imageValidateSizeLabelImageSizeTooSmall:"L'image est trop petite",imageValidateSizeLabelImageSizeTooBig:"L'image est trop grande",imageValidateSizeLabelExpectedMinSize:"La taille minimale est {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"La taille maximale est {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"La r\xE9solution est trop faible",imageValidateSizeLabelImageResolutionTooHigh:"La r\xE9solution est trop \xE9lev\xE9e",imageValidateSizeLabelExpectedMinResolution:"La r\xE9solution minimale est {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"La r\xE9solution maximale est {maxResolution}"};var Nl={labelIdle:'Mozgasd ide a f\xE1jlt a felt\xF6lt\xE9shez, vagy tall\xF3z\xE1s ',labelInvalidField:"A mez\u0151 \xE9rv\xE9nytelen f\xE1jlokat tartalmaz",labelFileWaitingForSize:"F\xE1ljm\xE9ret kisz\xE1mol\xE1sa",labelFileSizeNotAvailable:"A f\xE1jlm\xE9ret nem el\xE9rhet\u0151",labelFileLoading:"T\xF6lt\xE9s",labelFileLoadError:"Hiba a bet\xF6lt\xE9s sor\xE1n",labelFileProcessing:"Felt\xF6lt\xE9s",labelFileProcessingComplete:"Sikeres felt\xF6lt\xE9s",labelFileProcessingAborted:"A felt\xF6lt\xE9s megszak\xEDtva",labelFileProcessingError:"Hiba t\xF6rt\xE9nt a felt\xF6lt\xE9s sor\xE1n",labelFileProcessingRevertError:"Hiba a vissza\xE1ll\xEDt\xE1s sor\xE1n",labelFileRemoveError:"Hiba t\xF6rt\xE9nt az elt\xE1vol\xEDt\xE1s sor\xE1n",labelTapToCancel:"koppints a t\xF6rl\xE9shez",labelTapToRetry:"koppints az \xFAjrakezd\xE9shez",labelTapToUndo:"koppints a visszavon\xE1shoz",labelButtonRemoveItem:"Elt\xE1vol\xEDt\xE1s",labelButtonAbortItemLoad:"Megszak\xEDt\xE1s",labelButtonRetryItemLoad:"\xDAjrapr\xF3b\xE1lkoz\xE1s",labelButtonAbortItemProcessing:"Megszak\xEDt\xE1s",labelButtonUndoItemProcessing:"Visszavon\xE1s",labelButtonRetryItemProcessing:"\xDAjrapr\xF3b\xE1lkoz\xE1s",labelButtonProcessItem:"Felt\xF6lt\xE9s",labelMaxFileSizeExceeded:"A f\xE1jl t\xFAll\xE9pte a maxim\xE1lis m\xE9retet",labelMaxFileSize:"Maxim\xE1lis f\xE1jlm\xE9ret: {filesize}",labelMaxTotalFileSizeExceeded:"T\xFAll\xE9pte a maxim\xE1lis teljes m\xE9retet",labelMaxTotalFileSize:"A maxim\xE1is teljes f\xE1jlm\xE9ret: {filesize}",labelFileTypeNotAllowed:"\xC9rv\xE9nytelen t\xEDpus\xFA f\xE1jl",fileValidateTypeLabelExpectedTypes:"Enged\xE9lyezett t\xEDpusok {allButLastType} vagy {lastType}",imageValidateSizeLabelFormatError:"A k\xE9pt\xEDpus nem t\xE1mogatott",imageValidateSizeLabelImageSizeTooSmall:"A k\xE9p t\xFAl kicsi",imageValidateSizeLabelImageSizeTooBig:"A k\xE9p t\xFAl nagy",imageValidateSizeLabelExpectedMinSize:"Minimum m\xE9ret: {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"Maximum m\xE9ret: {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"A felbont\xE1s t\xFAl alacsony",imageValidateSizeLabelImageResolutionTooHigh:"A felbont\xE1s t\xFAl magas",imageValidateSizeLabelExpectedMinResolution:"Minim\xE1is felbont\xE1s: {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Maxim\xE1lis felbont\xE1s: {maxResolution}"};var Bl={labelIdle:'Seret & Jatuhkan berkas Anda atau Jelajahi',labelInvalidField:"Isian berisi berkas yang tidak valid",labelFileWaitingForSize:"Menunggu ukuran berkas",labelFileSizeNotAvailable:"Ukuran berkas tidak tersedia",labelFileLoading:"Memuat",labelFileLoadError:"Kesalahan saat memuat",labelFileProcessing:"Mengunggah",labelFileProcessingComplete:"Pengunggahan selesai",labelFileProcessingAborted:"Pengunggahan dibatalkan",labelFileProcessingError:"Kesalahan saat pengunggahan",labelFileProcessingRevertError:"Kesalahan saat pemulihan",labelFileRemoveError:"Kesalahan saat penghapusan",labelTapToCancel:"ketuk untuk membatalkan",labelTapToRetry:"ketuk untuk mencoba lagi",labelTapToUndo:"ketuk untuk mengurungkan",labelButtonRemoveItem:"Hapus",labelButtonAbortItemLoad:"Batalkan",labelButtonRetryItemLoad:"Coba Kembali",labelButtonAbortItemProcessing:"Batalkan",labelButtonUndoItemProcessing:"Urungkan",labelButtonRetryItemProcessing:"Coba Kembali",labelButtonProcessItem:"Unggah",labelMaxFileSizeExceeded:"Berkas terlalu besar",labelMaxFileSize:"Ukuran berkas maksimum adalah {filesize}",labelMaxTotalFileSizeExceeded:"Jumlah berkas maksimum terlampaui",labelMaxTotalFileSize:"Jumlah berkas maksimum adalah {filesize}",labelFileTypeNotAllowed:"Jenis berkas tidak valid",fileValidateTypeLabelExpectedTypes:"Mengharapkan {allButLastType} atau {lastType}",imageValidateSizeLabelFormatError:"Jenis citra tidak didukung",imageValidateSizeLabelImageSizeTooSmall:"Citra terlalu kecil",imageValidateSizeLabelImageSizeTooBig:"Citra terlalu besar",imageValidateSizeLabelExpectedMinSize:"Ukuran minimum adalah {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"Ukuran maksimum adalah {minWidth} \xD7 {minHeight}",imageValidateSizeLabelImageResolutionTooLow:"Resolusi terlalu rendah",imageValidateSizeLabelImageResolutionTooHigh:"Resolusi terlalu tinggi",imageValidateSizeLabelExpectedMinResolution:"Resolusi minimum adalah {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Resolusi maksimum adalah {maxResolution}"};var kl={labelIdle:'Trascina e rilascia i tuoi file oppure Carica ',labelInvalidField:"Il campo contiene dei file non validi",labelFileWaitingForSize:"Aspettando le dimensioni",labelFileSizeNotAvailable:"Dimensioni non disponibili",labelFileLoading:"Caricamento",labelFileLoadError:"Errore durante il caricamento",labelFileProcessing:"Caricamento",labelFileProcessingComplete:"Caricamento completato",labelFileProcessingAborted:"Caricamento cancellato",labelFileProcessingError:"Errore durante il caricamento",labelFileProcessingRevertError:"Errore durante il ripristino",labelFileRemoveError:"Errore durante l'eliminazione",labelTapToCancel:"tocca per cancellare",labelTapToRetry:"tocca per riprovare",labelTapToUndo:"tocca per ripristinare",labelButtonRemoveItem:"Elimina",labelButtonAbortItemLoad:"Cancella",labelButtonRetryItemLoad:"Ritenta",labelButtonAbortItemProcessing:"Camcella",labelButtonUndoItemProcessing:"Indietro",labelButtonRetryItemProcessing:"Ritenta",labelButtonProcessItem:"Carica",labelMaxFileSizeExceeded:"Il peso del file \xE8 eccessivo",labelMaxFileSize:"Il peso massimo del file \xE8 {filesize}",labelMaxTotalFileSizeExceeded:"Dimensione totale massima superata",labelMaxTotalFileSize:"La dimensione massima totale del file \xE8 {filesize}",labelFileTypeNotAllowed:"File non supportato",fileValidateTypeLabelExpectedTypes:"Aspetta {allButLastType} o {lastType}",imageValidateSizeLabelFormatError:"Tipo di immagine non compatibile",imageValidateSizeLabelImageSizeTooSmall:"L'immagine \xE8 troppo piccola",imageValidateSizeLabelImageSizeTooBig:"L'immagine \xE8 troppo grande",imageValidateSizeLabelExpectedMinSize:"La dimensione minima \xE8 {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"La dimensione massima \xE8 {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"La risoluzione \xE8 troppo bassa",imageValidateSizeLabelImageResolutionTooHigh:"La risoluzione \xE8 troppo alta",imageValidateSizeLabelExpectedMinResolution:"La risoluzione minima \xE8 {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"La risoluzione massima \xE8 {maxResolution}"};var Vl={labelIdle:'\u1791\u17B6\u1789&\u178A\u17B6\u1780\u17CB\u17A0\u17D2\u179C\u17B6\u179B\u17CB\u17AF\u1780\u179F\u17B6\u179A\u179A\u1794\u179F\u17CB\u17A2\u17D2\u1793\u1780 \u17AC \u179F\u17D2\u179C\u17C2\u1784\u179A\u1780 ',labelInvalidField:"\u1785\u1793\u17D2\u179B\u17C4\u17C7\u1798\u17B6\u1793\u17AF\u1780\u179F\u17B6\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C",labelFileWaitingForSize:"\u1780\u17C6\u1796\u17BB\u1784\u179A\u1784\u17CB\u1785\u17B6\u17C6\u1791\u17C6\u17A0\u17C6",labelFileSizeNotAvailable:"\u1791\u17C6\u17A0\u17C6\u1798\u17B7\u1793\u17A2\u17B6\u1785\u1794\u17D2\u179A\u17BE\u1794\u17B6\u1793",labelFileLoading:"\u1780\u17C6\u1796\u17BB\u1784\u178A\u17C6\u178E\u17BE\u179A\u1780\u17B6\u179A",labelFileLoadError:"\u1798\u17B6\u1793\u1794\u1789\u17D2\u17A0\u17B6\u1780\u17C6\u17A1\u17BB\u1784\u1796\u17C1\u179B\u178A\u17C6\u178E\u17BE\u179A\u1780\u17B6\u179A",labelFileProcessing:"\u1780\u17C6\u1796\u17BB\u1784\u1795\u17D2\u1791\u17BB\u1780\u17A1\u17BE\u1784",labelFileProcessingComplete:"\u1780\u17B6\u179A\u1795\u17D2\u1791\u17BB\u1780\u17A1\u17BE\u1784\u1796\u17C1\u1789\u179B\u17C1\u1789",labelFileProcessingAborted:"\u1780\u17B6\u179A\u1794\u1784\u17D2\u17A0\u17C4\u17C7\u178F\u17D2\u179A\u17BC\u179C\u1794\u17B6\u1793\u1794\u17C4\u17C7\u1794\u1784\u17CB",labelFileProcessingError:"\u1798\u17B6\u1793\u1794\u1789\u17D2\u17A0\u17B6\u1780\u17C6\u17A1\u17BB\u1784\u1796\u17C1\u179B\u1780\u17C6\u1796\u17BB\u1784\u1795\u17D2\u1791\u17BB\u1780\u17A1\u17BE\u1784",labelFileProcessingRevertError:"\u1798\u17B6\u1793\u1794\u1789\u17D2\u17A0\u17B6\u1780\u17C6\u17A1\u17BB\u1784\u1796\u17C1\u179B\u178F\u17D2\u179A\u17A1\u1794\u17CB",labelFileRemoveError:"\u1798\u17B6\u1793\u1794\u1789\u17D2\u17A0\u17B6\u1780\u17C6\u17A1\u17BB\u1784\u1796\u17C1\u179B\u178A\u1780\u1785\u17C1\u1789",labelTapToCancel:"\u1785\u17BB\u1785\u178A\u17BE\u1798\u17D2\u1794\u17B8\u1794\u17C4\u17C7\u1794\u1784\u17CB",labelTapToRetry:"\u1785\u17BB\u1785\u178A\u17BE\u1798\u17D2\u1794\u17B8\u1796\u17D2\u1799\u17B6\u1799\u17B6\u1798\u1798\u17D2\u178F\u1784\u1791\u17C0\u178F",labelTapToUndo:"\u1785\u17BB\u1785\u178A\u17BE\u1798\u17D2\u1794\u17B8\u1798\u17B7\u1793\u1792\u17D2\u179C\u17BE\u179C\u17B7\u1789",labelButtonRemoveItem:"\u1799\u1780\u1785\u17C1\u1789",labelButtonAbortItemLoad:"\u1794\u17C4\u17C7\u1794\u1784\u17CB",labelButtonRetryItemLoad:"\u1796\u17D2\u1799\u17B6\u1799\u17B6\u1798\u1798\u17D2\u178F\u1784\u1791\u17C0\u178F",labelButtonAbortItemProcessing:"\u1794\u17C4\u17C7\u1794\u1784\u17CB",labelButtonUndoItemProcessing:"\u1798\u17B7\u1793\u1792\u17D2\u179C\u17BE\u179C\u17B7\u1789",labelButtonRetryItemProcessing:"\u1796\u17D2\u1799\u17B6\u1799\u17B6\u1798\u1798\u17D2\u178F\u1784\u1791\u17C0\u178F",labelButtonProcessItem:"\u1795\u17D2\u1791\u17BB\u1780\u17A1\u17BE\u1784",labelMaxFileSizeExceeded:"\u17AF\u1780\u179F\u17B6\u179A\u1792\u17C6\u1796\u17C1\u1780",labelMaxFileSize:"\u1791\u17C6\u17A0\u17C6\u17AF\u1780\u179F\u17B6\u179A\u17A2\u178F\u17B7\u1794\u179A\u1798\u17B6\u1782\u17BA {filesize}",labelMaxTotalFileSizeExceeded:"\u179B\u17BE\u179F\u1791\u17C6\u17A0\u17C6\u179F\u179A\u17BB\u1794\u17A2\u178F\u17B7\u1794\u179A\u1798\u17B6",labelMaxTotalFileSize:"\u1791\u17C6\u17A0\u17C6\u17AF\u1780\u179F\u17B6\u179A\u179F\u179A\u17BB\u1794\u17A2\u178F\u17B7\u1794\u179A\u1798\u17B6\u1782\u17BA {filesize}",labelFileTypeNotAllowed:"\u1794\u17D2\u179A\u1797\u17C1\u1791\u17AF\u1780\u179F\u17B6\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C",fileValidateTypeLabelExpectedTypes:"\u179A\u17C6\u1796\u17B9\u1784\u1790\u17B6 {allButLastType} \u17AC {lastType}",imageValidateSizeLabelFormatError:"\u1794\u17D2\u179A\u1797\u17C1\u1791\u179A\u17BC\u1794\u1797\u17B6\u1796\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C",imageValidateSizeLabelImageSizeTooSmall:"\u179A\u17BC\u1794\u1797\u17B6\u1796\u178F\u17BC\u1785\u1796\u17C1\u1780",imageValidateSizeLabelImageSizeTooBig:"\u179A\u17BC\u1794\u1797\u17B6\u1796\u1792\u17C6\u1796\u17C1\u1780",imageValidateSizeLabelExpectedMinSize:"\u1791\u17C6\u17A0\u17C6\u17A2\u1794\u17D2\u1794\u1794\u179A\u1798\u17B6\u1782\u17BA {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"\u1791\u17C6\u17A0\u17C6\u17A2\u178F\u17B7\u1794\u179A\u1798\u17B6\u1782\u17BA {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"\u1782\u17BB\u178E\u1797\u17B6\u1796\u1794\u1784\u17D2\u17A0\u17B6\u1789\u1791\u17B6\u1794\u1796\u17C1\u1780",imageValidateSizeLabelImageResolutionTooHigh:"\u1782\u17BB\u178E\u1797\u17B6\u1796\u1794\u1784\u17D2\u17A0\u17B6\u1789\u1781\u17D2\u1796\u179F\u17CB\u1796\u17C1\u1780",imageValidateSizeLabelExpectedMinResolution:"\u1782\u17BB\u178E\u1797\u17B6\u1796\u1794\u1784\u17D2\u17A0\u17B6\u1789\u17A2\u1794\u17D2\u1794\u1794\u179A\u1798\u17B6\u1782\u17BA {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"\u1782\u17BB\u178E\u1797\u17B6\u1796\u1794\u1784\u17D2\u17A0\u17B6\u1789\u17A2\u178F\u17B7\u1794\u179A\u1798\u17B6\u1782\u17BA {maxResolution}"};var Gl={labelIdle:'Drag & Drop je bestanden of Bladeren ',labelInvalidField:"Veld bevat ongeldige bestanden",labelFileWaitingForSize:"Wachten op grootte",labelFileSizeNotAvailable:"Grootte niet beschikbaar",labelFileLoading:"Laden",labelFileLoadError:"Fout tijdens laden",labelFileProcessing:"Uploaden",labelFileProcessingComplete:"Upload afgerond",labelFileProcessingAborted:"Upload geannuleerd",labelFileProcessingError:"Fout tijdens upload",labelFileProcessingRevertError:"Fout bij herstellen",labelFileRemoveError:"Fout bij verwijderen",labelTapToCancel:"tik om te annuleren",labelTapToRetry:"tik om opnieuw te proberen",labelTapToUndo:"tik om ongedaan te maken",labelButtonRemoveItem:"Verwijderen",labelButtonAbortItemLoad:"Afbreken",labelButtonRetryItemLoad:"Opnieuw proberen",labelButtonAbortItemProcessing:"Annuleren",labelButtonUndoItemProcessing:"Ongedaan maken",labelButtonRetryItemProcessing:"Opnieuw proberen",labelButtonProcessItem:"Upload",labelMaxFileSizeExceeded:"Bestand is te groot",labelMaxFileSize:"Maximale bestandsgrootte is {filesize}",labelMaxTotalFileSizeExceeded:"Maximale totale grootte overschreden",labelMaxTotalFileSize:"Maximale totale bestandsgrootte is {filesize}",labelFileTypeNotAllowed:"Ongeldig bestandstype",fileValidateTypeLabelExpectedTypes:"Verwacht {allButLastType} of {lastType}",imageValidateSizeLabelFormatError:"Afbeeldingstype niet ondersteund",imageValidateSizeLabelImageSizeTooSmall:"Afbeelding is te klein",imageValidateSizeLabelImageSizeTooBig:"Afbeelding is te groot",imageValidateSizeLabelExpectedMinSize:"Minimale afmeting is {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"Maximale afmeting is {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"Resolutie is te laag",imageValidateSizeLabelImageResolutionTooHigh:"Resolution is too high",imageValidateSizeLabelExpectedMinResolution:"Minimale resolutie is {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Maximale resolutie is {maxResolution}"};var Ul={labelIdle:'Dra og slipp filene dine, eller Bla gjennom... ',labelInvalidField:"Feltet inneholder ugyldige filer",labelFileWaitingForSize:"Venter p\xE5 st\xF8rrelse",labelFileSizeNotAvailable:"St\xF8rrelse ikke tilgjengelig",labelFileLoading:"Laster",labelFileLoadError:"Feil under lasting",labelFileProcessing:"Laster opp",labelFileProcessingComplete:"Opplasting ferdig",labelFileProcessingAborted:"Opplasting avbrutt",labelFileProcessingError:"Feil under opplasting",labelFileProcessingRevertError:"Feil under reversering",labelFileRemoveError:"Feil under flytting",labelTapToCancel:"klikk for \xE5 avbryte",labelTapToRetry:"klikk for \xE5 pr\xF8ve p\xE5 nytt",labelTapToUndo:"klikk for \xE5 angre",labelButtonRemoveItem:"Fjern",labelButtonAbortItemLoad:"Avbryt",labelButtonRetryItemLoad:"Pr\xF8v p\xE5 nytt",labelButtonAbortItemProcessing:"Avbryt",labelButtonUndoItemProcessing:"Angre",labelButtonRetryItemProcessing:"Pr\xF8v p\xE5 nytt",labelButtonProcessItem:"Last opp",labelMaxFileSizeExceeded:"Filen er for stor",labelMaxFileSize:"Maksimal filst\xF8rrelse er {filesize}",labelMaxTotalFileSizeExceeded:"Maksimal total st\xF8rrelse oversteget",labelMaxTotalFileSize:"Maksimal total st\xF8rrelse er {filesize}",labelFileTypeNotAllowed:"Ugyldig filtype",fileValidateTypeLabelExpectedTypes:"Forventer {allButLastType} eller {lastType}",imageValidateSizeLabelFormatError:"Bildeformat ikke st\xF8ttet",imageValidateSizeLabelImageSizeTooSmall:"Bildet er for lite",imageValidateSizeLabelImageSizeTooBig:"Bildet er for stort",imageValidateSizeLabelExpectedMinSize:"Minimumsst\xF8rrelse er {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"Maksimumsst\xF8rrelse er {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"Oppl\xF8sningen er for lav",imageValidateSizeLabelImageResolutionTooHigh:"Oppl\xF8sningen er for h\xF8y",imageValidateSizeLabelExpectedMinResolution:"Minimum oppl\xF8sning er {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Maksimal oppl\xF8sning er {maxResolution}"};var Wl={labelIdle:'Przeci\u0105gnij i upu\u015B\u0107 lub wybierz pliki',labelInvalidField:"Nieprawid\u0142owe pliki",labelFileWaitingForSize:"Pobieranie rozmiaru",labelFileSizeNotAvailable:"Nieznany rozmiar",labelFileLoading:"Wczytywanie",labelFileLoadError:"B\u0142\u0105d wczytywania",labelFileProcessing:"Przesy\u0142anie",labelFileProcessingComplete:"Przes\u0142ano",labelFileProcessingAborted:"Przerwano",labelFileProcessingError:"Przesy\u0142anie nie powiod\u0142o si\u0119",labelFileProcessingRevertError:"Co\u015B posz\u0142o nie tak",labelFileRemoveError:"Nieudane usuni\u0119cie",labelTapToCancel:"Anuluj",labelTapToRetry:"Pon\xF3w",labelTapToUndo:"Cofnij",labelButtonRemoveItem:"Usu\u0144",labelButtonAbortItemLoad:"Przerwij",labelButtonRetryItemLoad:"Pon\xF3w",labelButtonAbortItemProcessing:"Anuluj",labelButtonUndoItemProcessing:"Cofnij",labelButtonRetryItemProcessing:"Pon\xF3w",labelButtonProcessItem:"Prze\u015Blij",labelMaxFileSizeExceeded:"Plik jest zbyt du\u017Cy",labelMaxFileSize:"Dopuszczalna wielko\u015B\u0107 pliku to {filesize}",labelMaxTotalFileSizeExceeded:"Przekroczono \u0142\u0105czny rozmiar plik\xF3w",labelMaxTotalFileSize:"\u0141\u0105czny rozmiar plik\xF3w nie mo\u017Ce przekroczy\u0107 {filesize}",labelFileTypeNotAllowed:"Niedozwolony rodzaj pliku",fileValidateTypeLabelExpectedTypes:"Oczekiwano {allButLastType} lub {lastType}",imageValidateSizeLabelFormatError:"Nieobs\u0142ugiwany format obrazu",imageValidateSizeLabelImageSizeTooSmall:"Obraz jest zbyt ma\u0142y",imageValidateSizeLabelImageSizeTooBig:"Obraz jest zbyt du\u017Cy",imageValidateSizeLabelExpectedMinSize:"Minimalne wymiary obrazu to {minWidth}\xD7{minHeight}",imageValidateSizeLabelExpectedMaxSize:"Maksymalna wymiary obrazu to {maxWidth}\xD7{maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"Rozdzielczo\u015B\u0107 jest zbyt niska",imageValidateSizeLabelImageResolutionTooHigh:"Rozdzielczo\u015B\u0107 jest zbyt wysoka",imageValidateSizeLabelExpectedMinResolution:"Minimalna rozdzielczo\u015B\u0107 to {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Maksymalna rozdzielczo\u015B\u0107 to {maxResolution}"};var Ri={labelIdle:'Arraste e solte os arquivos ou Clique aqui ',labelInvalidField:"Arquivos inv\xE1lidos",labelFileWaitingForSize:"Calculando o tamanho do arquivo",labelFileSizeNotAvailable:"Tamanho do arquivo indispon\xEDvel",labelFileLoading:"Carregando",labelFileLoadError:"Erro durante o carregamento",labelFileProcessing:"Enviando",labelFileProcessingComplete:"Envio finalizado",labelFileProcessingAborted:"Envio cancelado",labelFileProcessingError:"Erro durante o envio",labelFileProcessingRevertError:"Erro ao reverter o envio",labelFileRemoveError:"Erro ao remover o arquivo",labelTapToCancel:"clique para cancelar",labelTapToRetry:"clique para reenviar",labelTapToUndo:"clique para desfazer",labelButtonRemoveItem:"Remover",labelButtonAbortItemLoad:"Abortar",labelButtonRetryItemLoad:"Reenviar",labelButtonAbortItemProcessing:"Cancelar",labelButtonUndoItemProcessing:"Desfazer",labelButtonRetryItemProcessing:"Reenviar",labelButtonProcessItem:"Enviar",labelMaxFileSizeExceeded:"Arquivo \xE9 muito grande",labelMaxFileSize:"O tamanho m\xE1ximo permitido: {filesize}",labelMaxTotalFileSizeExceeded:"Tamanho total dos arquivos excedido",labelMaxTotalFileSize:"Tamanho total permitido: {filesize}",labelFileTypeNotAllowed:"Tipo de arquivo inv\xE1lido",fileValidateTypeLabelExpectedTypes:"Tipos de arquivo suportados s\xE3o {allButLastType} ou {lastType}",imageValidateSizeLabelFormatError:"Tipo de imagem inv\xE1lida",imageValidateSizeLabelImageSizeTooSmall:"Imagem muito pequena",imageValidateSizeLabelImageSizeTooBig:"Imagem muito grande",imageValidateSizeLabelExpectedMinSize:"Tamanho m\xEDnimo permitida: {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"Tamanho m\xE1ximo permitido: {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"Resolu\xE7\xE3o muito baixa",imageValidateSizeLabelImageResolutionTooHigh:"Resolu\xE7\xE3o muito alta",imageValidateSizeLabelExpectedMinResolution:"Resolu\xE7\xE3o m\xEDnima permitida: {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Resolu\xE7\xE3o m\xE1xima permitida: {maxResolution}"};var Hl={labelIdle:'Trage \u0219i plaseaz\u0103 fi\u0219iere sau Caut\u0103-le ',labelInvalidField:"C\xE2mpul con\u021Bine fi\u0219iere care nu sunt valide",labelFileWaitingForSize:"\xCEn a\u0219teptarea dimensiunii",labelFileSizeNotAvailable:"Dimensiunea nu este diponibil\u0103",labelFileLoading:"Se \xEEncarc\u0103",labelFileLoadError:"Eroare la \xEEnc\u0103rcare",labelFileProcessing:"Se \xEEncarc\u0103",labelFileProcessingComplete:"\xCEnc\u0103rcare finalizat\u0103",labelFileProcessingAborted:"\xCEnc\u0103rcare anulat\u0103",labelFileProcessingError:"Eroare la \xEEnc\u0103rcare",labelFileProcessingRevertError:"Eroare la anulare",labelFileRemoveError:"Eroare la \u015Ftergere",labelTapToCancel:"apas\u0103 pentru a anula",labelTapToRetry:"apas\u0103 pentru a re\xEEncerca",labelTapToUndo:"apas\u0103 pentru a anula",labelButtonRemoveItem:"\u015Eterge",labelButtonAbortItemLoad:"Anuleaz\u0103",labelButtonRetryItemLoad:"Re\xEEncearc\u0103",labelButtonAbortItemProcessing:"Anuleaz\u0103",labelButtonUndoItemProcessing:"Anuleaz\u0103",labelButtonRetryItemProcessing:"Re\xEEncearc\u0103",labelButtonProcessItem:"\xCEncarc\u0103",labelMaxFileSizeExceeded:"Fi\u0219ierul este prea mare",labelMaxFileSize:"Dimensiunea maxim\u0103 a unui fi\u0219ier este de {filesize}",labelMaxTotalFileSizeExceeded:"Dimensiunea total\u0103 maxim\u0103 a fost dep\u0103\u0219it\u0103",labelMaxTotalFileSize:"Dimensiunea total\u0103 maxim\u0103 a fi\u0219ierelor este de {filesize}",labelFileTypeNotAllowed:"Tipul fi\u0219ierului nu este valid",fileValidateTypeLabelExpectedTypes:"Se a\u0219teapt\u0103 {allButLastType} sau {lastType}",imageValidateSizeLabelFormatError:"Formatul imaginii nu este acceptat",imageValidateSizeLabelImageSizeTooSmall:"Imaginea este prea mic\u0103",imageValidateSizeLabelImageSizeTooBig:"Imaginea este prea mare",imageValidateSizeLabelExpectedMinSize:"M\u0103rimea minim\u0103 este de {maxWidth} x {maxHeight}",imageValidateSizeLabelExpectedMaxSize:"M\u0103rimea maxim\u0103 este de {maxWidth} x {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"Rezolu\u021Bia este prea mic\u0103",imageValidateSizeLabelImageResolutionTooHigh:"Rezolu\u021Bia este prea mare",imageValidateSizeLabelExpectedMinResolution:"Rezolu\u021Bia minim\u0103 este de {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Rezolu\u021Bia maxim\u0103 este de {maxResolution}"};var jl={labelIdle:'\u041F\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u0435 \u0444\u0430\u0439\u043B\u044B \u0438\u043B\u0438 \u0432\u044B\u0431\u0435\u0440\u0438\u0442\u0435 ',labelInvalidField:"\u041F\u043E\u043B\u0435 \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u0442 \u043D\u0435\u0434\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u044B\u0435 \u0444\u0430\u0439\u043B\u044B",labelFileWaitingForSize:"\u0423\u043A\u0430\u0436\u0438\u0442\u0435 \u0440\u0430\u0437\u043C\u0435\u0440",labelFileSizeNotAvailable:"\u0420\u0430\u0437\u043C\u0435\u0440 \u043D\u0435 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044F",labelFileLoading:"\u041E\u0436\u0438\u0434\u0430\u043D\u0438\u0435",labelFileLoadError:"\u041E\u0448\u0438\u0431\u043A\u0430 \u043F\u0440\u0438 \u043E\u0436\u0438\u0434\u0430\u043D\u0438\u0438",labelFileProcessing:"\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430",labelFileProcessingComplete:"\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0430",labelFileProcessingAborted:"\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430 \u043E\u0442\u043C\u0435\u043D\u0435\u043D\u0430",labelFileProcessingError:"\u041E\u0448\u0438\u0431\u043A\u0430 \u043F\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043A\u0435",labelFileProcessingRevertError:"\u041E\u0448\u0438\u0431\u043A\u0430 \u043F\u0440\u0438 \u0432\u043E\u0437\u0432\u0440\u0430\u0442\u0435",labelFileRemoveError:"\u041E\u0448\u0438\u0431\u043A\u0430 \u043F\u0440\u0438 \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0438",labelTapToCancel:"\u043D\u0430\u0436\u043C\u0438\u0442\u0435 \u0434\u043B\u044F \u043E\u0442\u043C\u0435\u043D\u044B",labelTapToRetry:"\u043D\u0430\u0436\u043C\u0438\u0442\u0435, \u0447\u0442\u043E\u0431\u044B \u043F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u044C \u043F\u043E\u043F\u044B\u0442\u043A\u0443",labelTapToUndo:"\u043D\u0430\u0436\u043C\u0438\u0442\u0435 \u0434\u043B\u044F \u043E\u0442\u043C\u0435\u043D\u044B \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0433\u043E \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F",labelButtonRemoveItem:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C",labelButtonAbortItemLoad:"\u041F\u0440\u0435\u043A\u0440\u0430\u0449\u0435\u043D\u043E",labelButtonRetryItemLoad:"\u041F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u0435 \u043F\u043E\u043F\u044B\u0442\u043A\u0443",labelButtonAbortItemProcessing:"\u041E\u0442\u043C\u0435\u043D\u0430",labelButtonUndoItemProcessing:"\u041E\u0442\u043C\u0435\u043D\u0430 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0433\u043E \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F",labelButtonRetryItemProcessing:"\u041F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u0435 \u043F\u043E\u043F\u044B\u0442\u043A\u0443",labelButtonProcessItem:"\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430",labelMaxFileSizeExceeded:"\u0424\u0430\u0439\u043B \u0441\u043B\u0438\u0448\u043A\u043E\u043C \u0431\u043E\u043B\u044C\u0448\u043E\u0439",labelMaxFileSize:"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0440\u0430\u0437\u043C\u0435\u0440 \u0444\u0430\u0439\u043B\u0430: {filesize}",labelMaxTotalFileSizeExceeded:"\u041F\u0440\u0435\u0432\u044B\u0448\u0435\u043D \u043C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0440\u0430\u0437\u043C\u0435\u0440",labelMaxTotalFileSize:"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0440\u0430\u0437\u043C\u0435\u0440 \u0444\u0430\u0439\u043B\u0430: {filesize}",labelFileTypeNotAllowed:"\u0424\u0430\u0439\u043B \u043D\u0435\u0432\u0435\u0440\u043D\u043E\u0433\u043E \u0442\u0438\u043F\u0430",fileValidateTypeLabelExpectedTypes:"\u041E\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044F {allButLastType} \u0438\u043B\u0438 {lastType}",imageValidateSizeLabelFormatError:"\u0422\u0438\u043F \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F \u043D\u0435 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044F",imageValidateSizeLabelImageSizeTooSmall:"\u0418\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 \u0441\u043B\u0438\u0448\u043A\u043E\u043C \u043C\u0430\u043B\u0435\u043D\u044C\u043A\u043E\u0435",imageValidateSizeLabelImageSizeTooBig:"\u0418\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 \u0441\u043B\u0438\u0448\u043A\u043E\u043C \u0431\u043E\u043B\u044C\u0448\u043E\u0435",imageValidateSizeLabelExpectedMinSize:"\u041C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0440\u0430\u0437\u043C\u0435\u0440: {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0440\u0430\u0437\u043C\u0435\u0440: {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"\u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u0438\u0435 \u0441\u043B\u0438\u0448\u043A\u043E\u043C \u043D\u0438\u0437\u043A\u043E\u0435",imageValidateSizeLabelImageResolutionTooHigh:"\u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u0438\u0435 \u0441\u043B\u0438\u0448\u043A\u043E\u043C \u0432\u044B\u0441\u043E\u043A\u043E\u0435",imageValidateSizeLabelExpectedMinResolution:"\u041C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u0438\u0435: {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u0438\u0435: {maxResolution}"};var ql={labelIdle:'Drag och sl\xE4pp dina filer eller Bl\xE4ddra ',labelInvalidField:"F\xE4ltet inneh\xE5ller felaktiga filer",labelFileWaitingForSize:"V\xE4ntar p\xE5 storlek",labelFileSizeNotAvailable:"Storleken finns inte tillg\xE4nglig",labelFileLoading:"Laddar",labelFileLoadError:"Fel under laddning",labelFileProcessing:"Laddar upp",labelFileProcessingComplete:"Uppladdning klar",labelFileProcessingAborted:"Uppladdning avbruten",labelFileProcessingError:"Fel under uppladdning",labelFileProcessingRevertError:"Fel under \xE5terst\xE4llning",labelFileRemoveError:"Fel under borttagning",labelTapToCancel:"tryck f\xF6r att avbryta",labelTapToRetry:"tryck f\xF6r att f\xF6rs\xF6ka igen",labelTapToUndo:"tryck f\xF6r att \xE5ngra",labelButtonRemoveItem:"Tabort",labelButtonAbortItemLoad:"Avbryt",labelButtonRetryItemLoad:"F\xF6rs\xF6k igen",labelButtonAbortItemProcessing:"Avbryt",labelButtonUndoItemProcessing:"\xC5ngra",labelButtonRetryItemProcessing:"F\xF6rs\xF6k igen",labelButtonProcessItem:"Ladda upp",labelMaxFileSizeExceeded:"Filen \xE4r f\xF6r stor",labelMaxFileSize:"St\xF6rsta till\xE5tna filstorlek \xE4r {filesize}",labelMaxTotalFileSizeExceeded:"Maximal uppladdningsstorlek uppn\xE5d",labelMaxTotalFileSize:"Maximal uppladdningsstorlek \xE4r {filesize}",labelFileTypeNotAllowed:"Felaktig filtyp",fileValidateTypeLabelExpectedTypes:"Godk\xE4nda filtyper {allButLastType} eller {lastType}",imageValidateSizeLabelFormatError:"Bildtypen saknar st\xF6d",imageValidateSizeLabelImageSizeTooSmall:"Bilden \xE4r f\xF6r liten",imageValidateSizeLabelImageSizeTooBig:"Bilden \xE4r f\xF6r stor",imageValidateSizeLabelExpectedMinSize:"Minimal storlek \xE4r {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"Maximal storlek \xE4r {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"Uppl\xF6sningen \xE4r f\xF6r l\xE5g",imageValidateSizeLabelImageResolutionTooHigh:"Uppl\xF6sningen \xE4r f\xF6r h\xF6g",imageValidateSizeLabelExpectedMinResolution:"Minsta till\xE5tna uppl\xF6sning \xE4r {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"H\xF6gsta till\xE5tna uppl\xF6sning \xE4r {maxResolution}"};var Yl={labelIdle:'Dosyan\u0131z\u0131 S\xFCr\xFCkleyin & B\u0131rak\u0131n ya da Se\xE7in ',labelInvalidField:"Alan ge\xE7ersiz dosyalar i\xE7eriyor",labelFileWaitingForSize:"Boyut hesaplan\u0131yor",labelFileSizeNotAvailable:"Boyut mevcut de\u011Fil",labelFileLoading:"Y\xFCkleniyor",labelFileLoadError:"Y\xFCkleme s\u0131ras\u0131nda hata olu\u015Ftu",labelFileProcessing:"Y\xFCkleniyor",labelFileProcessingComplete:"Y\xFCkleme tamamland\u0131",labelFileProcessingAborted:"Y\xFCkleme iptal edildi",labelFileProcessingError:"Y\xFCklerken hata olu\u015Ftu",labelFileProcessingRevertError:"Geri \xE7ekerken hata olu\u015Ftu",labelFileRemoveError:"Kald\u0131r\u0131rken hata olu\u015Ftu",labelTapToCancel:"\u0130ptal etmek i\xE7in t\u0131klay\u0131n",labelTapToRetry:"Tekrar denemek i\xE7in t\u0131klay\u0131n",labelTapToUndo:"Geri almak i\xE7in t\u0131klay\u0131n",labelButtonRemoveItem:"Kald\u0131r",labelButtonAbortItemLoad:"\u0130ptal Et",labelButtonRetryItemLoad:"Tekrar dene",labelButtonAbortItemProcessing:"\u0130ptal et",labelButtonUndoItemProcessing:"Geri Al",labelButtonRetryItemProcessing:"Tekrar dene",labelButtonProcessItem:"Y\xFCkle",labelMaxFileSizeExceeded:"Dosya \xE7ok b\xFCy\xFCk",labelMaxFileSize:"En fazla dosya boyutu: {filesize}",labelMaxTotalFileSizeExceeded:"Maximum boyut a\u015F\u0131ld\u0131",labelMaxTotalFileSize:"Maximum dosya boyutu :{filesize}",labelFileTypeNotAllowed:"Ge\xE7ersiz dosya tipi",fileValidateTypeLabelExpectedTypes:"\u015Eu {allButLastType} ya da \u015Fu dosya olmas\u0131 gerekir: {lastType}",imageValidateSizeLabelFormatError:"Resim tipi desteklenmiyor",imageValidateSizeLabelImageSizeTooSmall:"Resim \xE7ok k\xFC\xE7\xFCk",imageValidateSizeLabelImageSizeTooBig:"Resim \xE7ok b\xFCy\xFCk",imageValidateSizeLabelExpectedMinSize:"Minimum boyut {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"Maximum boyut {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"\xC7\xF6z\xFCn\xFCrl\xFCk \xE7ok d\xFC\u015F\xFCk",imageValidateSizeLabelImageResolutionTooHigh:"\xC7\xF6z\xFCn\xFCrl\xFCk \xE7ok y\xFCksek",imageValidateSizeLabelExpectedMinResolution:"Minimum \xE7\xF6z\xFCn\xFCrl\xFCk {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Maximum \xE7\xF6z\xFCn\xFCrl\xFCk {maxResolution}"};var $l={labelIdle:'\u041F\u0435\u0440\u0435\u0442\u044F\u0433\u043D\u0456\u0442\u044C \u0444\u0430\u0439\u043B\u0438 \u0430\u0431\u043E \u0432\u0438\u0431\u0435\u0440\u0456\u0442\u044C ',labelInvalidField:"\u041F\u043E\u043B\u0435 \u043C\u0456\u0441\u0442\u0438\u0442\u044C \u043D\u0435\u0434\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u0456 \u0444\u0430\u0439\u043B\u0438",labelFileWaitingForSize:"\u0412\u043A\u0430\u0436\u0456\u0442\u044C \u0440\u043E\u0437\u043C\u0456\u0440",labelFileSizeNotAvailable:"\u0420\u043E\u0437\u043C\u0456\u0440 \u043D\u0435 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0438\u0439",labelFileLoading:"\u041E\u0447\u0456\u043A\u0443\u0432\u0430\u043D\u043D\u044F",labelFileLoadError:"\u041F\u043E\u043C\u0438\u043B\u043A\u0430 \u043F\u0440\u0438 \u043E\u0447\u0456\u043A\u0443\u0432\u0430\u043D\u043D\u0456",labelFileProcessing:"\u0417\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0435\u043D\u043D\u044F",labelFileProcessingComplete:"\u0417\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0435\u043D\u043D\u044F \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u043E",labelFileProcessingAborted:"\u0417\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0435\u043D\u043D\u044F \u0441\u043A\u0430\u0441\u043E\u0432\u0430\u043D\u043E",labelFileProcessingError:"\u041F\u043E\u043C\u0438\u043B\u043A\u0430 \u043F\u0440\u0438 \u0437\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0435\u043D\u043D\u0456",labelFileProcessingRevertError:"\u041F\u043E\u043C\u0438\u043B\u043A\u0430 \u043F\u0440\u0438 \u0432\u0456\u0434\u043D\u043E\u0432\u043B\u0435\u043D\u043D\u0456",labelFileRemoveError:"\u041F\u043E\u043C\u0438\u043B\u043A\u0430 \u043F\u0440\u0438 \u0432\u0438\u0434\u0430\u043B\u0435\u043D\u043D\u0456",labelTapToCancel:"\u0412\u0456\u0434\u043C\u0456\u043D\u0438\u0442\u0438",labelTapToRetry:"\u041D\u0430\u0442\u0438\u0441\u043D\u0456\u0442\u044C, \u0449\u043E\u0431 \u043F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u0438 \u0441\u043F\u0440\u043E\u0431\u0443",labelTapToUndo:"\u041D\u0430\u0442\u0438\u0441\u043D\u0456\u0442\u044C, \u0449\u043E\u0431 \u0432\u0456\u0434\u043C\u0456\u043D\u0438\u0442\u0438 \u043E\u0441\u0442\u0430\u043D\u043D\u044E \u0434\u0456\u044E",labelButtonRemoveItem:"\u0412\u0438\u0434\u0430\u043B\u0438\u0442\u0438",labelButtonAbortItemLoad:"\u0412\u0456\u0434\u043C\u0456\u043D\u0438\u0442\u0438",labelButtonRetryItemLoad:"\u041F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u0438 \u0441\u043F\u0440\u043E\u0431\u0443",labelButtonAbortItemProcessing:"\u0412\u0456\u0434\u043C\u0456\u043D\u0438\u0442\u0438",labelButtonUndoItemProcessing:"\u0412\u0456\u0434\u043C\u0456\u043D\u0438\u0442\u0438 \u043E\u0441\u0442\u0430\u043D\u043D\u044E \u0434\u0456\u044E",labelButtonRetryItemProcessing:"\u041F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u0438 \u0441\u043F\u0440\u043E\u0431\u0443",labelButtonProcessItem:"\u0417\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0435\u043D\u043D\u044F",labelMaxFileSizeExceeded:"\u0424\u0430\u0439\u043B \u0437\u0430\u043D\u0430\u0434\u0442\u043E \u0432\u0435\u043B\u0438\u043A\u0438\u0439",labelMaxFileSize:"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0438\u0439 \u0440\u043E\u0437\u043C\u0456\u0440 \u0444\u0430\u0439\u043B\u0443: {filesize}",labelMaxTotalFileSizeExceeded:"\u041F\u0435\u0440\u0435\u0432\u0438\u0449\u0435\u043D\u043E \u043C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0438\u0439 \u0437\u0430\u0433\u0430\u043B\u044C\u043D\u0438\u0439 \u0440\u043E\u0437\u043C\u0456\u0440",labelMaxTotalFileSize:"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0438\u0439 \u0437\u0430\u0433\u0430\u043B\u044C\u043D\u0438\u0439 \u0440\u043E\u0437\u043C\u0456\u0440: {filesize}",labelFileTypeNotAllowed:"\u0424\u043E\u0440\u043C\u0430\u0442 \u0444\u0430\u0439\u043B\u0443 \u043D\u0435 \u043F\u0456\u0434\u0442\u0440\u0438\u043C\u0443\u0454\u0442\u044C\u0441\u044F",fileValidateTypeLabelExpectedTypes:"\u041E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F {allButLastType} \u0430\u0431\u043E {lastType}",imageValidateSizeLabelFormatError:"\u0424\u043E\u0440\u043C\u0430\u0442 \u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u043D\u044F \u043D\u0435 \u043F\u0456\u0434\u0442\u0440\u0438\u043C\u0443\u0454\u0442\u044C\u0441\u044F",imageValidateSizeLabelImageSizeTooSmall:"\u0417\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u043D\u044F \u0437\u0430\u043D\u0430\u0434\u0442\u043E \u043C\u0430\u043B\u0435\u043D\u044C\u043A\u0435",imageValidateSizeLabelImageSizeTooBig:"\u0417\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u043D\u044F \u0437\u0430\u043D\u0430\u0434\u0442\u043E \u0432\u0435\u043B\u0438\u043A\u0435",imageValidateSizeLabelExpectedMinSize:"\u041C\u0456\u043D\u0456\u043C\u0430\u043B\u044C\u043D\u0438\u0439 \u0440\u043E\u0437\u043C\u0456\u0440: {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0438\u0439 \u0440\u043E\u0437\u043C\u0456\u0440: {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"\u0420\u043E\u0437\u043C\u0456\u0440\u0438 \u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u043D\u044F \u0437\u0430\u043D\u0430\u0434\u0442\u043E \u043C\u0430\u043B\u0435\u043D\u044C\u043A\u0456",imageValidateSizeLabelImageResolutionTooHigh:"\u0420\u043E\u0437\u043C\u0456\u0440\u0438 \u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u043D\u044F \u0437\u0430\u043D\u0430\u0434\u0442\u043E \u0432\u0435\u043B\u0438\u043A\u0456",imageValidateSizeLabelExpectedMinResolution:"\u041C\u0456\u043D\u0456\u043C\u0430\u043B\u044C\u043D\u0456 \u0440\u043E\u0437\u043C\u0456\u0440\u0438: {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0456 \u0440\u043E\u0437\u043C\u0456\u0440\u0438: {maxResolution}"};var Xl={labelIdle:'K\xE9o th\u1EA3 t\u1EC7p c\u1EE7a b\u1EA1n ho\u1EB7c T\xECm ki\u1EBFm ',labelInvalidField:"Tr\u01B0\u1EDDng ch\u1EE9a c\xE1c t\u1EC7p kh\xF4ng h\u1EE3p l\u1EC7",labelFileWaitingForSize:"\u0110ang ch\u1EDD k\xEDch th\u01B0\u1EDBc",labelFileSizeNotAvailable:"K\xEDch th\u01B0\u1EDBc kh\xF4ng c\xF3 s\u1EB5n",labelFileLoading:"\u0110ang t\u1EA3i",labelFileLoadError:"L\u1ED7i khi t\u1EA3i",labelFileProcessing:"\u0110ang t\u1EA3i l\xEAn",labelFileProcessingComplete:"T\u1EA3i l\xEAn th\xE0nh c\xF4ng",labelFileProcessingAborted:"\u0110\xE3 hu\u1EF7 t\u1EA3i l\xEAn",labelFileProcessingError:"L\u1ED7i khi t\u1EA3i l\xEAn",labelFileProcessingRevertError:"L\u1ED7i khi ho\xE0n nguy\xEAn",labelFileRemoveError:"L\u1ED7i khi x\xF3a",labelTapToCancel:"nh\u1EA5n \u0111\u1EC3 h\u1EE7y",labelTapToRetry:"nh\u1EA5n \u0111\u1EC3 th\u1EED l\u1EA1i",labelTapToUndo:"nh\u1EA5n \u0111\u1EC3 ho\xE0n t\xE1c",labelButtonRemoveItem:"Xo\xE1",labelButtonAbortItemLoad:"Hu\u1EF7 b\u1ECF",labelButtonRetryItemLoad:"Th\u1EED l\u1EA1i",labelButtonAbortItemProcessing:"H\u1EE7y b\u1ECF",labelButtonUndoItemProcessing:"Ho\xE0n t\xE1c",labelButtonRetryItemProcessing:"Th\u1EED l\u1EA1i",labelButtonProcessItem:"T\u1EA3i l\xEAn",labelMaxFileSizeExceeded:"T\u1EADp tin qu\xE1 l\u1EDBn",labelMaxFileSize:"K\xEDch th\u01B0\u1EDBc t\u1EC7p t\u1ED1i \u0111a l\xE0 {filesize}",labelMaxTotalFileSizeExceeded:"\u0110\xE3 v\u01B0\u1EE3t qu\xE1 t\u1ED5ng k\xEDch th\u01B0\u1EDBc t\u1ED1i \u0111a",labelMaxTotalFileSize:"T\u1ED5ng k\xEDch th\u01B0\u1EDBc t\u1EC7p t\u1ED1i \u0111a l\xE0 {filesize}",labelFileTypeNotAllowed:"T\u1EC7p thu\u1ED9c lo\u1EA1i kh\xF4ng h\u1EE3p l\u1EC7",fileValidateTypeLabelExpectedTypes:"Ki\u1EC3u t\u1EC7p h\u1EE3p l\u1EC7 l\xE0 {allButLastType} ho\u1EB7c {lastType}",imageValidateSizeLabelFormatError:"Lo\u1EA1i h\xECnh \u1EA3nh kh\xF4ng \u0111\u01B0\u1EE3c h\u1ED7 tr\u1EE3",imageValidateSizeLabelImageSizeTooSmall:"H\xECnh \u1EA3nh qu\xE1 nh\u1ECF",imageValidateSizeLabelImageSizeTooBig:"H\xECnh \u1EA3nh qu\xE1 l\u1EDBn",imageValidateSizeLabelExpectedMinSize:"K\xEDch th\u01B0\u1EDBc t\u1ED1i thi\u1EC3u l\xE0 {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"K\xEDch th\u01B0\u1EDBc t\u1ED1i \u0111a l\xE0 {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"\u0110\u1ED9 ph\xE2n gi\u1EA3i qu\xE1 th\u1EA5p",imageValidateSizeLabelImageResolutionTooHigh:"\u0110\u1ED9 ph\xE2n gi\u1EA3i qu\xE1 cao",imageValidateSizeLabelExpectedMinResolution:"\u0110\u1ED9 ph\xE2n gi\u1EA3i t\u1ED1i thi\u1EC3u l\xE0 {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"\u0110\u1ED9 ph\xE2n gi\u1EA3i t\u1ED1i \u0111a l\xE0 {maxResolution}"};var Ql={labelIdle:'\u62D6\u653E\u6587\u4EF6\uFF0C\u6216\u8005 \u6D4F\u89C8 ',labelInvalidField:"\u5B57\u6BB5\u5305\u542B\u65E0\u6548\u6587\u4EF6",labelFileWaitingForSize:"\u8BA1\u7B97\u6587\u4EF6\u5927\u5C0F",labelFileSizeNotAvailable:"\u6587\u4EF6\u5927\u5C0F\u4E0D\u53EF\u7528",labelFileLoading:"\u52A0\u8F7D",labelFileLoadError:"\u52A0\u8F7D\u9519\u8BEF",labelFileProcessing:"\u4E0A\u4F20",labelFileProcessingComplete:"\u5DF2\u4E0A\u4F20",labelFileProcessingAborted:"\u4E0A\u4F20\u5DF2\u53D6\u6D88",labelFileProcessingError:"\u4E0A\u4F20\u51FA\u9519",labelFileProcessingRevertError:"\u8FD8\u539F\u51FA\u9519",labelFileRemoveError:"\u5220\u9664\u51FA\u9519",labelTapToCancel:"\u70B9\u51FB\u53D6\u6D88",labelTapToRetry:"\u70B9\u51FB\u91CD\u8BD5",labelTapToUndo:"\u70B9\u51FB\u64A4\u6D88",labelButtonRemoveItem:"\u5220\u9664",labelButtonAbortItemLoad:"\u4E2D\u6B62",labelButtonRetryItemLoad:"\u91CD\u8BD5",labelButtonAbortItemProcessing:"\u53D6\u6D88",labelButtonUndoItemProcessing:"\u64A4\u6D88",labelButtonRetryItemProcessing:"\u91CD\u8BD5",labelButtonProcessItem:"\u4E0A\u4F20",labelMaxFileSizeExceeded:"\u6587\u4EF6\u592A\u5927",labelMaxFileSize:"\u6700\u5927\u503C: {filesize}",labelMaxTotalFileSizeExceeded:"\u8D85\u8FC7\u6700\u5927\u6587\u4EF6\u5927\u5C0F",labelMaxTotalFileSize:"\u6700\u5927\u6587\u4EF6\u5927\u5C0F\uFF1A{filesize}",labelFileTypeNotAllowed:"\u6587\u4EF6\u7C7B\u578B\u65E0\u6548",fileValidateTypeLabelExpectedTypes:"\u5E94\u4E3A {allButLastType} \u6216 {lastType}",imageValidateSizeLabelFormatError:"\u4E0D\u652F\u6301\u56FE\u50CF\u7C7B\u578B",imageValidateSizeLabelImageSizeTooSmall:"\u56FE\u50CF\u592A\u5C0F",imageValidateSizeLabelImageSizeTooBig:"\u56FE\u50CF\u592A\u5927",imageValidateSizeLabelExpectedMinSize:"\u6700\u5C0F\u503C: {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"\u6700\u5927\u503C: {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"\u5206\u8FA8\u7387\u592A\u4F4E",imageValidateSizeLabelImageResolutionTooHigh:"\u5206\u8FA8\u7387\u592A\u9AD8",imageValidateSizeLabelExpectedMinResolution:"\u6700\u5C0F\u5206\u8FA8\u7387\uFF1A{minResolution}",imageValidateSizeLabelExpectedMaxResolution:"\u6700\u5927\u5206\u8FA8\u7387\uFF1A{maxResolution}"};var Zl={labelIdle:'\u62D6\u653E\u6A94\u6848\uFF0C\u6216\u8005 \u700F\u89BD ',labelInvalidField:"\u4E0D\u652F\u63F4\u6B64\u6A94\u6848",labelFileWaitingForSize:"\u6B63\u5728\u8A08\u7B97\u6A94\u6848\u5927\u5C0F",labelFileSizeNotAvailable:"\u6A94\u6848\u5927\u5C0F\u4E0D\u7B26",labelFileLoading:"\u8B80\u53D6\u4E2D",labelFileLoadError:"\u8B80\u53D6\u932F\u8AA4",labelFileProcessing:"\u4E0A\u50B3",labelFileProcessingComplete:"\u5DF2\u4E0A\u50B3",labelFileProcessingAborted:"\u4E0A\u50B3\u5DF2\u53D6\u6D88",labelFileProcessingError:"\u4E0A\u50B3\u767C\u751F\u932F\u8AA4",labelFileProcessingRevertError:"\u9084\u539F\u932F\u8AA4",labelFileRemoveError:"\u522A\u9664\u932F\u8AA4",labelTapToCancel:"\u9EDE\u64CA\u53D6\u6D88",labelTapToRetry:"\u9EDE\u64CA\u91CD\u8A66",labelTapToUndo:"\u9EDE\u64CA\u9084\u539F",labelButtonRemoveItem:"\u522A\u9664",labelButtonAbortItemLoad:"\u505C\u6B62",labelButtonRetryItemLoad:"\u91CD\u8A66",labelButtonAbortItemProcessing:"\u53D6\u6D88",labelButtonUndoItemProcessing:"\u53D6\u6D88",labelButtonRetryItemProcessing:"\u91CD\u8A66",labelButtonProcessItem:"\u4E0A\u50B3",labelMaxFileSizeExceeded:"\u6A94\u6848\u904E\u5927",labelMaxFileSize:"\u6700\u5927\u503C\uFF1A{filesize}",labelMaxTotalFileSizeExceeded:"\u8D85\u904E\u6700\u5927\u53EF\u4E0A\u50B3\u5927\u5C0F",labelMaxTotalFileSize:"\u6700\u5927\u53EF\u4E0A\u50B3\u5927\u5C0F\uFF1A{filesize}",labelFileTypeNotAllowed:"\u4E0D\u652F\u63F4\u6B64\u985E\u578B\u6A94\u6848",fileValidateTypeLabelExpectedTypes:"\u61C9\u70BA {allButLastType} \u6216 {lastType}",imageValidateSizeLabelFormatError:"\u4E0D\u652F\u6301\u6B64\u985E\u5716\u7247\u985E\u578B",imageValidateSizeLabelImageSizeTooSmall:"\u5716\u7247\u904E\u5C0F",imageValidateSizeLabelImageSizeTooBig:"\u5716\u7247\u904E\u5927",imageValidateSizeLabelExpectedMinSize:"\u6700\u5C0F\u5C3A\u5BF8\uFF1A{minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"\u6700\u5927\u5C3A\u5BF8\uFF1A{maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"\u89E3\u6790\u5EA6\u904E\u4F4E",imageValidateSizeLabelImageResolutionTooHigh:"\u89E3\u6790\u5EA6\u904E\u9AD8",imageValidateSizeLabelExpectedMinResolution:"\u6700\u4F4E\u89E3\u6790\u5EA6\uFF1A{minResolution}",imageValidateSizeLabelExpectedMaxResolution:"\u6700\u9AD8\u89E3\u6790\u5EA6\uFF1A{maxResolution}"};ve(Wo);ve(jo);ve($o);ve(Qo);ve(el);ve(pl);ve(ul);ve(Rl);ve(Ma);window.FilePond=na;function uf({acceptedFileTypes:e,imageEditorEmptyFillColor:t,imageEditorMode:i,imageEditorViewportHeight:a,imageEditorViewportWidth:n,deleteUploadedFileUsing:o,isDeletable:l,isDisabled:r,getUploadedFilesUsing:s,imageCropAspectRatio:p,imagePreviewHeight:c,imageResizeMode:d,imageResizeTargetHeight:m,imageResizeTargetWidth:u,imageResizeUpscale:f,isAvatar:h,hasImageEditor:g,hasCircleCropper:I,canEditSvgs:E,isSvgEditingConfirmed:T,confirmSvgEditingMessage:v,disabledSvgEditingMessage:y,isDownloadable:b,isMultiple:w,isOpenable:x,isPreviewable:_,isReorderable:P,itemPanelAspectRatio:O,loadingIndicatorPosition:M,locale:C,maxFiles:S,maxSize:F,minSize:R,panelAspectRatio:L,panelLayout:z,placeholder:D,removeUploadedFileButtonPosition:k,removeUploadedFileUsing:B,reorderUploadedFilesUsing:X,shouldAppendFiles:Y,shouldOrientImageFromExif:Q,shouldTransformImage:pe,state:G,uploadButtonPosition:H,uploadingMessage:q,uploadProgressIndicatorPosition:re,uploadUsing:ee}){return{fileKeyIndex:{},pond:null,shouldUpdateState:!0,state:G,lastState:null,error:null,uploadedFileIndex:{},isEditorOpen:!1,editingFile:{},currentRatio:"",editor:{},init:async function(){Dt(Kl[C]??Kl.en),this.pond=ut(this.$refs.input,{acceptedFileTypes:e,allowImageExifOrientation:Q,allowPaste:!1,allowRemove:l,allowReorder:P,allowImagePreview:_,allowVideoPreview:_,allowAudioPreview:_,allowImageTransform:pe,credits:!1,files:await this.getFiles(),imageCropAspectRatio:p,imagePreviewHeight:c,imageResizeTargetHeight:m,imageResizeTargetWidth:u,imageResizeMode:d,imageResizeUpscale:f,itemInsertLocation:Y?"after":"before",...D&&{labelIdle:D},maxFiles:S,maxFileSize:F,minFileSize:R,styleButtonProcessItemPosition:H,styleButtonRemoveItemPosition:k,styleItemPanelAspectRatio:O,styleLoadIndicatorPosition:M,stylePanelAspectRatio:L,stylePanelLayout:z,styleProgressIndicatorPosition:re,server:{load:async(N,U)=>{let Z=await(await fetch(N,{cache:"no-store"})).blob();U(Z)},process:(N,U,$,Z,Ve,Ge)=>{this.shouldUpdateState=!1;let Xt=([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g,Qt=>(Qt^crypto.getRandomValues(new Uint8Array(1))[0]&15>>Qt/4).toString(16));ee(Xt,U,Qt=>{this.shouldUpdateState=!0,Z(Qt)},Ve,Ge)},remove:async(N,U)=>{let $=this.uploadedFileIndex[N]??null;$&&(await o($),U())},revert:async(N,U)=>{await B(N),U()}},allowImageEdit:g,imageEditEditor:{open:N=>this.loadEditor(N),onconfirm:()=>{},oncancel:()=>this.closeEditor(),onclose:()=>this.closeEditor()},fileValidateTypeDetectType:(N,U)=>new Promise(($,Z)=>{let Ve=U||Go.getType(N.name.split(".").pop());Ve?$(Ve):Z()})}),this.$watch("state",async()=>{if(this.pond&&this.shouldUpdateState&&this.state!==void 0){if(this.state!==null&&Object.values(this.state).filter(N=>N.startsWith("livewire-file:")).length){this.lastState=null;return}JSON.stringify(this.state)!==this.lastState&&(this.lastState=JSON.stringify(this.state),this.pond.files=await this.getFiles())}}),this.pond.on("reorderfiles",async N=>{let U=N.map($=>$.source instanceof File?$.serverId:this.uploadedFileIndex[$.source]??null).filter($=>$);await X(Y?U:U.reverse())}),this.pond.on("initfile",async N=>{b&&(h||this.insertDownloadLink(N))}),this.pond.on("initfile",async N=>{x&&(h||this.insertOpenLink(N))}),this.pond.on("addfilestart",async N=>{N.status===Et.PROCESSING_QUEUED&&this.dispatchFormEvent("form-processing-started",{message:q})});let V=async()=>{this.pond.getFiles().filter(N=>N.status===Et.PROCESSING||N.status===Et.PROCESSING_QUEUED).length||this.dispatchFormEvent("form-processing-finished")};this.pond.on("processfile",V),this.pond.on("processfileabort",V),this.pond.on("processfilerevert",V),z==="compact circle"&&(this.pond.on("error",N=>{this.error=`${N.main}: ${N.sub}`.replace("Expects or","Expects")}),this.pond.on("removefile",()=>this.error=null))},destroy:function(){this.destroyEditor(),ft(this.$refs.input),this.pond=null},dispatchFormEvent:function(V,N={}){this.$el.closest("form")?.dispatchEvent(new CustomEvent(V,{composed:!0,cancelable:!0,detail:N}))},getUploadedFiles:async function(){let V=await s();this.fileKeyIndex=V??{},this.uploadedFileIndex=Object.entries(this.fileKeyIndex).filter(([N,U])=>U?.url).reduce((N,[U,$])=>(N[$.url]=U,N),{})},getFiles:async function(){await this.getUploadedFiles();let V=[];for(let N of Object.values(this.fileKeyIndex))N&&V.push({source:N.url,options:{type:"local",...!N.type||_&&(/^audio/.test(N.type)||/^image/.test(N.type)||/^video/.test(N.type))?{}:{file:{name:N.name,size:N.size,type:N.type}}}});return Y?V:V.reverse()},insertDownloadLink:function(V){if(V.origin!==zt.LOCAL)return;let N=this.getDownloadLink(V);N&&document.getElementById(`filepond--item-${V.id}`).querySelector(".filepond--file-info-main").prepend(N)},insertOpenLink:function(V){if(V.origin!==zt.LOCAL)return;let N=this.getOpenLink(V);N&&document.getElementById(`filepond--item-${V.id}`).querySelector(".filepond--file-info-main").prepend(N)},getDownloadLink:function(V){let N=V.source;if(!N)return;let U=document.createElement("a");return U.className="filepond--download-icon",U.href=N,U.download=V.file.name,U},getOpenLink:function(V){let N=V.source;if(!N)return;let U=document.createElement("a");return U.className="filepond--open-icon",U.href=N,U.target="_blank",U},initEditor:function(){r||g&&(this.editor=new xa(this.$refs.editor,{aspectRatio:n/a,autoCropArea:1,center:!0,crop:V=>{this.$refs.xPositionInput.value=Math.round(V.detail.x),this.$refs.yPositionInput.value=Math.round(V.detail.y),this.$refs.heightInput.value=Math.round(V.detail.height),this.$refs.widthInput.value=Math.round(V.detail.width),this.$refs.rotationInput.value=V.detail.rotate},cropBoxResizable:!0,guides:!0,highlight:!0,responsive:!0,toggleDragModeOnDblclick:!0,viewMode:i,wheelZoomRatio:.02}))},closeEditor:function(){this.editingFile={},this.isEditorOpen=!1,this.destroyEditor()},fixImageDimensions:function(V,N){if(V.type!=="image/svg+xml")return N(V);let U=new FileReader;U.onload=$=>{let Z=new DOMParser().parseFromString($.target.result,"image/svg+xml")?.querySelector("svg");if(!Z)return N(V);let Ve=["viewBox","ViewBox","viewbox"].find(Xt=>Z.hasAttribute(Xt));if(!Ve)return N(V);let Ge=Z.getAttribute(Ve).split(" ");return!Ge||Ge.length!==4?N(V):(Z.setAttribute("width",parseFloat(Ge[2])+"pt"),Z.setAttribute("height",parseFloat(Ge[3])+"pt"),N(new File([new Blob([new XMLSerializer().serializeToString(Z)],{type:"image/svg+xml"})],V.name,{type:"image/svg+xml",_relativePath:""})))},U.readAsText(V)},loadEditor:function(V){if(r||!g||!V)return;let N=V.type==="image/svg+xml";if(!E&&N){alert(y);return}T&&N&&!confirm(v)||this.fixImageDimensions(V,U=>{this.editingFile=U,this.initEditor();let $=new FileReader;$.onload=Z=>{this.isEditorOpen=!0,setTimeout(()=>this.editor.replace(Z.target.result),200)},$.readAsDataURL(V)})},getRoundedCanvas:function(V){let N=V.width,U=V.height,$=document.createElement("canvas");$.width=N,$.height=U;let Z=$.getContext("2d");return Z.imageSmoothingEnabled=!0,Z.drawImage(V,0,0,N,U),Z.globalCompositeOperation="destination-in",Z.beginPath(),Z.ellipse(N/2,U/2,N/2,U/2,0,0,2*Math.PI),Z.fill(),$},saveEditor:function(){if(r||!g)return;let V=this.editor.getCroppedCanvas({fillColor:t??"transparent",height:m,imageSmoothingEnabled:!0,imageSmoothingQuality:"high",width:u});I&&(V=this.getRoundedCanvas(V)),V.toBlob(N=>{w&&this.pond.removeFile(this.pond.getFiles().find(U=>U.filename===this.editingFile.name)?.id,{revert:!0}),this.$nextTick(()=>{this.shouldUpdateState=!1;let U=this.editingFile.name.slice(0,this.editingFile.name.lastIndexOf(".")),$=this.editingFile.name.split(".").pop();$==="svg"&&($="png");let Z=/-v(\d+)/;Z.test(U)?U=U.replace(Z,(Ve,Ge)=>`-v${Number(Ge)+1}`):U+="-v1",this.pond.addFile(new File([N],`${U}.${$}`,{type:this.editingFile.type==="image/svg+xml"||I?"image/png":this.editingFile.type,lastModified:new Date().getTime()})).then(()=>{this.closeEditor()}).catch(()=>{this.closeEditor()})})},I?"image/png":this.editingFile.type)},destroyEditor:function(){this.editor&&typeof this.editor.destroy=="function"&&this.editor.destroy(),this.editor=null}}}var Kl={ar:wl,ca:Sl,ckb:Ll,cs:Al,da:Ml,de:Ol,en:Pl,es:Dl,fa:Fl,fi:zl,fr:Cl,hu:Nl,id:Bl,it:kl,km:Vl,nl:Gl,no:Ul,pl:Wl,pt_BR:Ri,pt_PT:Ri,ro:Hl,ru:jl,sv:ql,tr:Yl,uk:$l,vi:Xl,zh_CN:Ql,zh_TW:Zl};export{uf as default}; +`;n(q)},l.readAsText(e)}),Nu=e=>{let t;try{t=new ImageData(e.width,e.height)}catch{t=document.createElement("canvas").getContext("2d").createImageData(e.width,e.height)}return t.data.set(e.data),t},Bu=()=>{let e={resize:c,filter:p},t=(d,m)=>(d.forEach(u=>{m=e[u.type](m,u.data)}),m),i=(d,m)=>{let u=d.transforms,f=null;if(u.forEach(h=>{h.type==="filter"&&(f=h)}),f){let h=null;u.forEach(g=>{g.type==="resize"&&(h=g)}),h&&(h.data.matrix=f.data,u=u.filter(g=>g.type!=="filter"))}m(t(u,d.imageData))};self.onmessage=d=>{i(d.data.message,m=>{self.postMessage({id:d.data.id,message:m},[m.data.buffer])})};let a=1,n=1,o=1;function l(d,m,u){let f=m[d]/255,h=m[d+1]/255,g=m[d+2]/255,I=m[d+3]/255,E=f*u[0]+h*u[1]+g*u[2]+I*u[3]+u[4],T=f*u[5]+h*u[6]+g*u[7]+I*u[8]+u[9],v=f*u[10]+h*u[11]+g*u[12]+I*u[13]+u[14],y=f*u[15]+h*u[16]+g*u[17]+I*u[18]+u[19],b=Math.max(0,E*y)+a*(1-y),w=Math.max(0,T*y)+n*(1-y),x=Math.max(0,v*y)+o*(1-y);m[d]=Math.max(0,Math.min(1,b))*255,m[d+1]=Math.max(0,Math.min(1,w))*255,m[d+2]=Math.max(0,Math.min(1,x))*255}let r=self.JSON.stringify([1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0]);function s(d){return self.JSON.stringify(d||[])===r}function p(d,m){if(!m||s(m))return d;let u=d.data,f=u.length,h=m[0],g=m[1],I=m[2],E=m[3],T=m[4],v=m[5],y=m[6],b=m[7],w=m[8],x=m[9],_=m[10],P=m[11],O=m[12],M=m[13],C=m[14],S=m[15],F=m[16],R=m[17],L=m[18],z=m[19],D=0,k=0,B=0,X=0,q=0,Q=0,pe=0,G=0,H=0,Y=0,le=0,ee=0;for(;D1&&f===!1)return p(d,I);h=d.width*S,g=d.height*S}let E=d.width,T=d.height,v=Math.round(h),y=Math.round(g),b=d.data,w=new Uint8ClampedArray(v*y*4),x=E/v,_=T/y,P=Math.ceil(x*.5),O=Math.ceil(_*.5);for(let M=0;M=-1&&le<=1&&(F=2*le*le*le-3*le*le+1,F>0)){Y=4*(H+q*E);let ee=b[Y+3];B+=F*ee,L+=F,ee<255&&(F=F*ee/250),z+=F*b[Y],D+=F*b[Y+1],k+=F*b[Y+2],R+=F}}}w[S]=z/R,w[S+1]=D/R,w[S+2]=k/R,w[S+3]=B/L,I&&l(S,w,I)}return{data:w,width:v,height:y}}},ku=(e,t)=>{if(e.getUint32(t+4,!1)!==1165519206)return;t+=4;let i=e.getUint16(t+=6,!1)===18761;t+=e.getUint32(t+4,i);let a=e.getUint16(t,i);t+=2;for(let n=0;n{let t=new DataView(e);if(t.getUint16(0)!==65496)return null;let i=2,a,n,o=!1;for(;i=65504&&a<=65519||a===65534)||(o||(o=ku(t,i,n)),i+n>t.byteLength)));)i+=n;return e.slice(0,i)},Gu=e=>new Promise(t=>{let i=new FileReader;i.onload=()=>t(Vu(i.result)||null),i.readAsArrayBuffer(e.slice(0,256*1024))}),Uu=()=>window.BlobBuilder=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder,Wu=(e,t)=>{let i=Uu();if(i){let a=new i;return a.append(e),a.getBlob(t)}return new Blob([e],{type:t})},Hu=()=>Math.random().toString(36).substr(2,9),ju=e=>{let t=new Blob(["(",e.toString(),")()"],{type:"application/javascript"}),i=URL.createObjectURL(t),a=new Worker(i),n=[];return{transfer:()=>{},post:(o,l,r)=>{let s=Hu();n[s]=l,a.onmessage=p=>{let c=n[p.data.id];c&&(c(p.data.message),delete n[p.data.id])},a.postMessage({id:s,message:o},r)},terminate:()=>{a.terminate(),URL.revokeObjectURL(i)}}},Yu=e=>new Promise((t,i)=>{let a=new Image;a.onload=()=>{t(a)},a.onerror=n=>{i(n)},a.src=e}),qu=e=>e.reduce((t,i)=>t.then(a=>i().then(Array.prototype.concat.bind(a))),Promise.resolve([])),$u=(e,t)=>new Promise(i=>{let a={width:e.width,height:e.height},n=e.getContext("2d"),o=t.sort(yl).map(l=>()=>new Promise(r=>{tf[l[0]](n,a,l[1],r)&&r()}));qu(o).then(()=>i(e))}),St=(e,t)=>{e.beginPath(),e.lineCap=t["stroke-linecap"],e.lineJoin=t["stroke-linejoin"],e.lineWidth=t["stroke-width"],t["stroke-dasharray"].length&&e.setLineDash(t["stroke-dasharray"].split(",")),e.fillStyle=t.fill,e.strokeStyle=t.stroke,e.globalAlpha=t.opacity||1},Lt=e=>{e.fill(),e.stroke(),e.globalAlpha=1},Xu=(e,t,i)=>{let a=wt(i,t),n=ct(i,t);return St(e,n),e.rect(a.x,a.y,a.width,a.height),Lt(e,n),!0},Qu=(e,t,i)=>{let a=wt(i,t),n=ct(i,t);St(e,n);let o=a.x,l=a.y,r=a.width,s=a.height,p=.5522848,c=r/2*p,d=s/2*p,m=o+r,u=l+s,f=o+r/2,h=l+s/2;return e.moveTo(o,h),e.bezierCurveTo(o,h-d,f-c,l,f,l),e.bezierCurveTo(f+c,l,m,h-d,m,h),e.bezierCurveTo(m,h+d,f+c,u,f,u),e.bezierCurveTo(f-c,u,o,h+d,o,h),Lt(e,n),!0},Zu=(e,t,i,a)=>{let n=wt(i,t),o=ct(i,t);St(e,o);let l=new Image;new URL(i.src,window.location.href).origin!==window.location.origin&&(l.crossOrigin=""),l.onload=()=>{if(i.fit==="cover"){let s=n.width/n.height,p=s>1?l.width:l.height*s,c=s>1?l.width/s:l.height,d=l.width*.5-p*.5,m=l.height*.5-c*.5;e.drawImage(l,d,m,p,c,n.x,n.y,n.width,n.height)}else if(i.fit==="contain"){let s=Math.min(n.width/l.width,n.height/l.height),p=s*l.width,c=s*l.height,d=n.x+n.width*.5-p*.5,m=n.y+n.height*.5-c*.5;e.drawImage(l,0,0,l.width,l.height,d,m,p,c)}else e.drawImage(l,0,0,l.width,l.height,n.x,n.y,n.width,n.height);Lt(e,o),a()},l.src=i.src},Ku=(e,t,i)=>{let a=wt(i,t),n=ct(i,t);St(e,n);let o=me(i.fontSize,t),l=i.fontFamily||"sans-serif",r=i.fontWeight||"normal",s=i.textAlign||"left";return e.font=`${r} ${o}px ${l}`,e.textAlign=s,e.fillText(i.text,a.x,a.y),Lt(e,n),!0},Ju=(e,t,i)=>{let a=ct(i,t);St(e,a),e.beginPath();let n=i.points.map(l=>({x:me(l.x,t,1,"width"),y:me(l.y,t,1,"height")}));e.moveTo(n[0].x,n[0].y);let o=n.length;for(let l=1;l{let a=wt(i,t),n=ct(i,t);St(e,n),e.beginPath();let o={x:a.x,y:a.y},l={x:a.x+a.width,y:a.y+a.height};e.moveTo(o.x,o.y),e.lineTo(l.x,l.y);let r=xl({x:l.x-o.x,y:l.y-o.y}),s=.04*Math.min(t.width,t.height);if(i.lineDecoration.indexOf("arrow-begin")!==-1){let p=yi(r,s),c=_i(o,p),d=qe(o,2,c),m=qe(o,-2,c);e.moveTo(d.x,d.y),e.lineTo(o.x,o.y),e.lineTo(m.x,m.y)}if(i.lineDecoration.indexOf("arrow-end")!==-1){let p=yi(r,-s),c=_i(l,p),d=qe(l,2,c),m=qe(l,-2,c);e.moveTo(d.x,d.y),e.lineTo(l.x,l.y),e.lineTo(m.x,m.y)}return Lt(e,n),!0},tf={rect:Xu,ellipse:Qu,image:Zu,text:Ku,line:ef,path:Ju},af=e=>{let t=document.createElement("canvas");return t.width=e.width,t.height=e.height,t.getContext("2d").putImageData(e,0,0),t},nf=(e,t,i={})=>new Promise((a,n)=>{if(!e||!du(e))return n({status:"not an image file",file:e});let{stripImageHead:o,beforeCreateBlob:l,afterCreateBlob:r,canvasMemoryLimit:s}=i,{crop:p,size:c,filter:d,markup:m,output:u}=t,f=t.image&&t.image.orientation?Math.max(1,Math.min(8,t.image.orientation)):null,h=u&&u.quality,g=h===null?null:h/100,I=u&&u.type||null,E=u&&u.background||null,T=[];c&&(typeof c.width=="number"||typeof c.height=="number")&&T.push({type:"resize",data:c}),d&&d.length===20&&T.push({type:"filter",data:d});let v=w=>{let x=r?r(w):w;Promise.resolve(x).then(a)},y=(w,x)=>{let _=af(w),P=m.length?$u(_,m):_;Promise.resolve(P).then(O=>{Tu(O,x,l).then(M=>{if(vl(O),o)return v(M);Gu(e).then(C=>{C!==null&&(M=new Blob([C,M.slice(20)],{type:M.type})),v(M)})}).catch(n)})};if(/svg/.test(e.type)&&I===null)return Cu(e,p,m,{background:E}).then(w=>{a(Wu(w,"image/svg+xml"))});let b=URL.createObjectURL(e);Yu(b).then(w=>{URL.revokeObjectURL(b);let x=Eu(w,f,p,{canvasMemoryLimit:s,background:E}),_={quality:g,type:I||e.type};if(!T.length)return y(x,_);let P=ju(Bu);P.post({transforms:T,imageData:x},O=>{y(Nu(O),_),P.terminate()},[x.data.buffer])}).catch(n)}),of=["x","y","left","top","right","bottom","width","height"],lf=e=>typeof e=="string"&&/%/.test(e)?parseFloat(e)/100:e,rf=e=>{let[t,i]=e,a=i.points?{}:of.reduce((n,o)=>(n[o]=lf(i[o]),n),{});return[t,{zIndex:0,...i,...a}]},sf=e=>new Promise((t,i)=>{let a=new Image;a.src=URL.createObjectURL(e);let n=()=>{let l=a.naturalWidth,r=a.naturalHeight;l&&r&&(URL.revokeObjectURL(a.src),clearInterval(o),t({width:l,height:r}))};a.onerror=l=>{URL.revokeObjectURL(a.src),clearInterval(o),i(l)};let o=setInterval(n,1);n()});typeof window<"u"&&typeof window.document<"u"&&(HTMLCanvasElement.prototype.toBlob||Object.defineProperty(HTMLCanvasElement.prototype,"toBlob",{value:function(e,t,i){let a=this;setTimeout(()=>{let n=a.toDataURL(t,i).split(",")[1],o=atob(n),l=o.length,r=new Uint8Array(l);for(;l--;)r[l]=o.charCodeAt(l);e(new Blob([r],{type:t||"image/png"}))})}}));var Sa=typeof window<"u"&&typeof window.document<"u",cf=Sa&&/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream,_l=({addFilter:e,utils:t})=>{let{Type:i,forin:a,getFileFromBlob:n,isFile:o}=t,l=["crop","resize","filter","markup","output"],r=c=>(d,m,u)=>d(m,c?c(u):u),s=c=>c.aspectRatio===null&&c.rotation===0&&c.zoom===1&&c.center&&c.center.x===.5&&c.center.y===.5&&c.flip&&c.flip.horizontal===!1&&c.flip.vertical===!1;e("SHOULD_PREPARE_OUTPUT",(c,{query:d})=>new Promise(m=>{m(!d("IS_ASYNC"))}));let p=(c,d,m)=>new Promise(u=>{if(!c("GET_ALLOW_IMAGE_TRANSFORM")||m.archived||!o(d)||!ou(d))return u(!1);sf(d).then(()=>{let f=c("GET_IMAGE_TRANSFORM_IMAGE_FILTER");if(f){let h=f(d);if(h==null)return handleRevert(!0);if(typeof h=="boolean")return u(h);if(typeof h.then=="function")return h.then(u)}u(!0)}).catch(f=>{u(!1)})});return e("DID_CREATE_ITEM",(c,{query:d,dispatch:m})=>{d("GET_ALLOW_IMAGE_TRANSFORM")&&c.extend("requestPrepare",()=>new Promise((u,f)=>{m("REQUEST_PREPARE_OUTPUT",{query:c.id,item:c,success:u,failure:f},!0)}))}),e("PREPARE_OUTPUT",(c,{query:d,item:m})=>new Promise(u=>{p(d,c,m).then(f=>{if(!f)return u(c);let h=[];d("GET_IMAGE_TRANSFORM_VARIANTS_INCLUDE_ORIGINAL")&&h.push(()=>new Promise(x=>{x({name:d("GET_IMAGE_TRANSFORM_VARIANTS_ORIGINAL_NAME"),file:c})})),d("GET_IMAGE_TRANSFORM_VARIANTS_INCLUDE_DEFAULT")&&h.push((x,_,P)=>new Promise(O=>{x(_,P).then(M=>O({name:d("GET_IMAGE_TRANSFORM_VARIANTS_DEFAULT_NAME"),file:M}))}));let g=d("GET_IMAGE_TRANSFORM_VARIANTS")||{};a(g,(x,_)=>{let P=r(_);h.push((O,M,C)=>new Promise(S=>{P(O,M,C).then(F=>S({name:x,file:F}))}))});let I=d("GET_IMAGE_TRANSFORM_OUTPUT_QUALITY"),E=d("GET_IMAGE_TRANSFORM_OUTPUT_QUALITY_MODE"),T=I===null?null:I/100,v=d("GET_IMAGE_TRANSFORM_OUTPUT_MIME_TYPE"),y=d("GET_IMAGE_TRANSFORM_CLIENT_TRANSFORMS")||l;m.setMetadata("output",{type:v,quality:T,client:y},!0);let b=(x,_)=>new Promise((P,O)=>{let M={..._};Object.keys(M).filter(B=>B!=="exif").forEach(B=>{y.indexOf(B)===-1&&delete M[B]});let{resize:C,exif:S,output:F,crop:R,filter:L,markup:z}=M,D={image:{orientation:S?S.orientation:null},output:F&&(F.type||typeof F.quality=="number"||F.background)?{type:F.type,quality:typeof F.quality=="number"?F.quality*100:null,background:F.background||d("GET_IMAGE_TRANSFORM_CANVAS_BACKGROUND_COLOR")||null}:void 0,size:C&&(C.size.width||C.size.height)?{mode:C.mode,upscale:C.upscale,...C.size}:void 0,crop:R&&!s(R)?{...R}:void 0,markup:z&&z.length?z.map(rf):[],filter:L};if(D.output){let B=F.type?F.type!==x.type:!1,X=/\/jpe?g$/.test(x.type),q=F.quality!==null?X&&E==="always":!1;if(!!!(D.size||D.crop||D.filter||B||q))return P(x)}let k={beforeCreateBlob:d("GET_IMAGE_TRANSFORM_BEFORE_CREATE_BLOB"),afterCreateBlob:d("GET_IMAGE_TRANSFORM_AFTER_CREATE_BLOB"),canvasMemoryLimit:d("GET_IMAGE_TRANSFORM_CANVAS_MEMORY_LIMIT"),stripImageHead:d("GET_IMAGE_TRANSFORM_OUTPUT_STRIP_IMAGE_HEAD")};nf(x,D,k).then(B=>{let X=n(B,su(x.name,cu(B.type)));P(X)}).catch(O)}),w=h.map(x=>x(b,c,m.getMetadata()));Promise.all(w).then(x=>{u(x.length===1&&x[0].name===null?x[0].file:x)})})})),{options:{allowImageTransform:[!0,i.BOOLEAN],imageTransformImageFilter:[null,i.FUNCTION],imageTransformOutputMimeType:[null,i.STRING],imageTransformOutputQuality:[null,i.INT],imageTransformOutputStripImageHead:[!0,i.BOOLEAN],imageTransformClientTransforms:[null,i.ARRAY],imageTransformOutputQualityMode:["always",i.STRING],imageTransformVariants:[null,i.OBJECT],imageTransformVariantsIncludeDefault:[!0,i.BOOLEAN],imageTransformVariantsDefaultName:[null,i.STRING],imageTransformVariantsIncludeOriginal:[!1,i.BOOLEAN],imageTransformVariantsOriginalName:["original_",i.STRING],imageTransformBeforeCreateBlob:[null,i.FUNCTION],imageTransformAfterCreateBlob:[null,i.FUNCTION],imageTransformCanvasMemoryLimit:[Sa&&cf?4096*4096:null,i.INT],imageTransformCanvasBackgroundColor:[null,i.STRING]}}};Sa&&document.dispatchEvent(new CustomEvent("FilePond:pluginloaded",{detail:_l}));var Rl=_l;var La=e=>/^video/.test(e.type),$t=e=>/^audio/.test(e.type),Aa=class{constructor(t,i){this.mediaEl=t,this.audioElems=i,this.onplayhead=!1,this.duration=0,this.timelineWidth=this.audioElems.timeline.offsetWidth-this.audioElems.playhead.offsetWidth,this.moveplayheadFn=this.moveplayhead.bind(this),this.registerListeners()}registerListeners(){this.mediaEl.addEventListener("timeupdate",this.timeUpdate.bind(this),!1),this.mediaEl.addEventListener("canplaythrough",()=>this.duration=this.mediaEl.duration,!1),this.audioElems.timeline.addEventListener("click",this.timelineClicked.bind(this),!1),this.audioElems.button.addEventListener("click",this.play.bind(this)),this.audioElems.playhead.addEventListener("mousedown",this.mouseDown.bind(this),!1),window.addEventListener("mouseup",this.mouseUp.bind(this),!1)}play(){this.mediaEl.paused?this.mediaEl.play():this.mediaEl.pause(),this.audioElems.button.classList.toggle("play"),this.audioElems.button.classList.toggle("pause")}timeUpdate(){let t=this.mediaEl.currentTime/this.duration*100;this.audioElems.playhead.style.marginLeft=t+"%",this.mediaEl.currentTime===this.duration&&(this.audioElems.button.classList.toggle("play"),this.audioElems.button.classList.toggle("pause"))}moveplayhead(t){let i=t.clientX-this.getPosition(this.audioElems.timeline);i>=0&&i<=this.timelineWidth&&(this.audioElems.playhead.style.marginLeft=i+"px"),i<0&&(this.audioElems.playhead.style.marginLeft="0px"),i>this.timelineWidth&&(this.audioElems.playhead.style.marginLeft=this.timelineWidth-4+"px")}timelineClicked(t){this.moveplayhead(t),this.mediaEl.currentTime=this.duration*this.clickPercent(t)}mouseDown(){this.onplayhead=!0,window.addEventListener("mousemove",this.moveplayheadFn,!0),this.mediaEl.removeEventListener("timeupdate",this.timeUpdate.bind(this),!1)}mouseUp(t){window.removeEventListener("mousemove",this.moveplayheadFn,!0),this.onplayhead==!0&&(this.moveplayhead(t),this.mediaEl.currentTime=this.duration*this.clickPercent(t),this.mediaEl.addEventListener("timeupdate",this.timeUpdate.bind(this),!1)),this.onplayhead=!1}clickPercent(t){return(t.clientX-this.getPosition(this.audioElems.timeline))/this.timelineWidth}getPosition(t){return t.getBoundingClientRect().left}},df=e=>e.utils.createView({name:"media-preview",tag:"div",ignoreRect:!0,create:({root:t,props:i})=>{let{id:a}=i,n=t.query("GET_ITEM",{id:i.id}),o=$t(n.file)?"audio":"video";if(t.ref.media=document.createElement(o),t.ref.media.setAttribute("controls",!0),t.element.appendChild(t.ref.media),$t(n.file)){let l=document.createDocumentFragment();t.ref.audio=[],t.ref.audio.container=document.createElement("div"),t.ref.audio.button=document.createElement("span"),t.ref.audio.timeline=document.createElement("div"),t.ref.audio.playhead=document.createElement("div"),t.ref.audio.container.className="audioplayer",t.ref.audio.button.className="playpausebtn play",t.ref.audio.timeline.className="timeline",t.ref.audio.playhead.className="playhead",t.ref.audio.timeline.appendChild(t.ref.audio.playhead),t.ref.audio.container.appendChild(t.ref.audio.button),t.ref.audio.container.appendChild(t.ref.audio.timeline),l.appendChild(t.ref.audio.container),t.element.appendChild(l)}},write:e.utils.createRoute({DID_MEDIA_PREVIEW_LOAD:({root:t,props:i})=>{let{id:a}=i,n=t.query("GET_ITEM",{id:i.id});if(!n)return;let o=window.URL||window.webkitURL,l=new Blob([n.file],{type:n.file.type});t.ref.media.type=n.file.type,t.ref.media.src=n.file.mock&&n.file.url||o.createObjectURL(l),$t(n.file)&&new Aa(t.ref.media,t.ref.audio),t.ref.media.addEventListener("loadeddata",()=>{let r=75;if(La(n.file)){let s=t.ref.media.offsetWidth,p=t.ref.media.videoWidth/s;r=t.ref.media.videoHeight/p}t.dispatch("DID_UPDATE_PANEL_HEIGHT",{id:i.id,height:r})},!1)}})}),pf=e=>{let t=({root:a,props:n})=>{let{id:o}=n;a.query("GET_ITEM",o)&&a.dispatch("DID_MEDIA_PREVIEW_LOAD",{id:o})},i=({root:a,props:n})=>{let o=df(e);a.ref.media=a.appendChildView(a.createChildView(o,{id:n.id}))};return e.utils.createView({name:"media-preview-wrapper",create:i,write:e.utils.createRoute({DID_MEDIA_PREVIEW_CONTAINER_CREATE:t})})},Ma=e=>{let{addFilter:t,utils:i}=e,{Type:a,createRoute:n}=i,o=pf(e);return t("CREATE_VIEW",l=>{let{is:r,view:s,query:p}=l;if(!r("file"))return;let c=({root:d,props:m})=>{let{id:u}=m,f=p("GET_ITEM",u),h=p("GET_ALLOW_VIDEO_PREVIEW"),g=p("GET_ALLOW_AUDIO_PREVIEW");!f||f.archived||(!La(f.file)||!h)&&(!$t(f.file)||!g)||(d.ref.mediaPreview=s.appendChildView(s.createChildView(o,{id:u})),d.dispatch("DID_MEDIA_PREVIEW_CONTAINER_CREATE",{id:u}))};s.registerWriter(n({DID_LOAD_ITEM:c},({root:d,props:m})=>{let{id:u}=m,f=p("GET_ITEM",u),h=d.query("GET_ALLOW_VIDEO_PREVIEW"),g=d.query("GET_ALLOW_AUDIO_PREVIEW");!f||(!La(f.file)||!h)&&(!$t(f.file)||!g)||d.rect.element.hidden}))}),{options:{allowVideoPreview:[!0,a.BOOLEAN],allowAudioPreview:[!0,a.BOOLEAN]}}},mf=typeof window<"u"&&typeof window.document<"u";mf&&document.dispatchEvent(new CustomEvent("FilePond:pluginloaded",{detail:Ma}));var wl={labelIdle:'\u0627\u0633\u062D\u0628 \u0648 \u0627\u062F\u0631\u062C \u0645\u0644\u0641\u0627\u062A\u0643 \u0623\u0648 \u062A\u0635\u0641\u062D ',labelInvalidField:"\u0627\u0644\u062D\u0642\u0644 \u064A\u062D\u062A\u0648\u064A \u0639\u0644\u0649 \u0645\u0644\u0641\u0627\u062A \u063A\u064A\u0631 \u0635\u0627\u0644\u062D\u0629",labelFileWaitingForSize:"\u0628\u0627\u0646\u062A\u0638\u0627\u0631 \u0627\u0644\u062D\u062C\u0645",labelFileSizeNotAvailable:"\u0627\u0644\u062D\u062C\u0645 \u063A\u064A\u0631 \u0645\u062A\u0627\u062D",labelFileLoading:"\u0628\u0627\u0644\u0625\u0646\u062A\u0638\u0627\u0631",labelFileLoadError:"\u062D\u062F\u062B \u062E\u0637\u0623 \u0623\u062B\u0646\u0627\u0621 \u0627\u0644\u062A\u062D\u0645\u064A\u0644",labelFileProcessing:"\u064A\u062A\u0645 \u0627\u0644\u0631\u0641\u0639",labelFileProcessingComplete:"\u062A\u0645 \u0627\u0644\u0631\u0641\u0639",labelFileProcessingAborted:"\u062A\u0645 \u0625\u0644\u063A\u0627\u0621 \u0627\u0644\u0631\u0641\u0639",labelFileProcessingError:"\u062D\u062F\u062B \u062E\u0637\u0623 \u0623\u062B\u0646\u0627\u0621 \u0627\u0644\u0631\u0641\u0639",labelFileProcessingRevertError:"\u062D\u062F\u062B \u062E\u0637\u0623 \u0623\u062B\u0646\u0627\u0621 \u0627\u0644\u062A\u0631\u0627\u062C\u0639",labelFileRemoveError:"\u062D\u062F\u062B \u062E\u0637\u0623 \u0623\u062B\u0646\u0627\u0621 \u0627\u0644\u062D\u0630\u0641",labelTapToCancel:"\u0627\u0646\u0642\u0631 \u0644\u0644\u0625\u0644\u063A\u0627\u0621",labelTapToRetry:"\u0627\u0646\u0642\u0631 \u0644\u0625\u0639\u0627\u062F\u0629 \u0627\u0644\u0645\u062D\u0627\u0648\u0644\u0629",labelTapToUndo:"\u0627\u0646\u0642\u0631 \u0644\u0644\u062A\u0631\u0627\u062C\u0639",labelButtonRemoveItem:"\u0645\u0633\u062D",labelButtonAbortItemLoad:"\u0625\u0644\u063A\u0627\u0621",labelButtonRetryItemLoad:"\u0625\u0639\u0627\u062F\u0629",labelButtonAbortItemProcessing:"\u0625\u0644\u063A\u0627\u0621",labelButtonUndoItemProcessing:"\u062A\u0631\u0627\u062C\u0639",labelButtonRetryItemProcessing:"\u0625\u0639\u0627\u062F\u0629",labelButtonProcessItem:"\u0631\u0641\u0639",labelMaxFileSizeExceeded:"\u0627\u0644\u0645\u0644\u0641 \u0643\u0628\u064A\u0631 \u062C\u062F\u0627",labelMaxFileSize:"\u062D\u062C\u0645 \u0627\u0644\u0645\u0644\u0641 \u0627\u0644\u0623\u0642\u0635\u0649: {filesize}",labelMaxTotalFileSizeExceeded:"\u062A\u0645 \u062A\u062C\u0627\u0648\u0632 \u0627\u0644\u062D\u062F \u0627\u0644\u0623\u0642\u0635\u0649 \u0644\u0644\u062D\u062C\u0645 \u0627\u0644\u0625\u062C\u0645\u0627\u0644\u064A",labelMaxTotalFileSize:"\u0627\u0644\u062D\u062F \u0627\u0644\u0623\u0642\u0635\u0649 \u0644\u062D\u062C\u0645 \u0627\u0644\u0645\u0644\u0641: {filesize}",labelFileTypeNotAllowed:"\u0645\u0644\u0641 \u0645\u0646 \u0646\u0648\u0639 \u063A\u064A\u0631 \u0635\u0627\u0644\u062D",fileValidateTypeLabelExpectedTypes:"\u062A\u062A\u0648\u0642\u0639 {allButLastType} \u0645\u0646 {lastType}",imageValidateSizeLabelFormatError:"\u0646\u0648\u0639 \u0627\u0644\u0635\u0648\u0631\u0629 \u063A\u064A\u0631 \u0645\u062F\u0639\u0648\u0645",imageValidateSizeLabelImageSizeTooSmall:"\u0627\u0644\u0635\u0648\u0631\u0629 \u0635\u063A\u064A\u0631 \u062C\u062F\u0627",imageValidateSizeLabelImageSizeTooBig:"\u0627\u0644\u0635\u0648\u0631\u0629 \u0643\u0628\u064A\u0631\u0629 \u062C\u062F\u0627",imageValidateSizeLabelExpectedMinSize:"\u0627\u0644\u062D\u062F \u0627\u0644\u0623\u062F\u0646\u0649 \u0644\u0644\u0623\u0628\u0639\u0627\u062F \u0647\u0648: {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"\u0627\u0644\u062D\u062F \u0627\u0644\u0623\u0642\u0635\u0649 \u0644\u0644\u0623\u0628\u0639\u0627\u062F \u0647\u0648: {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"\u0627\u0644\u062F\u0642\u0629 \u0636\u0639\u064A\u0641\u0629 \u062C\u062F\u0627",imageValidateSizeLabelImageResolutionTooHigh:"\u0627\u0644\u062F\u0642\u0629 \u0645\u0631\u062A\u0641\u0639\u0629 \u062C\u062F\u0627",imageValidateSizeLabelExpectedMinResolution:"\u0623\u0642\u0644 \u062F\u0642\u0629: {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"\u0623\u0642\u0635\u0649 \u062F\u0642\u0629: {maxResolution}"};var Sl={labelIdle:'Arrossega i deixa anar els teus fitxers o Navega ',labelInvalidField:"El camp cont\xE9 fitxers inv\xE0lids",labelFileWaitingForSize:"Esperant mida",labelFileSizeNotAvailable:"Mida no disponible",labelFileLoading:"Carregant",labelFileLoadError:"Error durant la c\xE0rrega",labelFileProcessing:"Pujant",labelFileProcessingComplete:"Pujada completada",labelFileProcessingAborted:"Pujada cancel\xB7lada",labelFileProcessingError:"Error durant la pujada",labelFileProcessingRevertError:"Error durant la reversi\xF3",labelFileRemoveError:"Error durant l'eliminaci\xF3",labelTapToCancel:"toca per cancel\xB7lar",labelTapToRetry:"toca per reintentar",labelTapToUndo:"toca per desfer",labelButtonRemoveItem:"Eliminar",labelButtonAbortItemLoad:"Cancel\xB7lar",labelButtonRetryItemLoad:"Reintentar",labelButtonAbortItemProcessing:"Cancel\xB7lar",labelButtonUndoItemProcessing:"Desfer",labelButtonRetryItemProcessing:"Reintentar",labelButtonProcessItem:"Pujar",labelMaxFileSizeExceeded:"El fitxer \xE9s massa gran",labelMaxFileSize:"La mida m\xE0xima del fitxer \xE9s {filesize}",labelMaxTotalFileSizeExceeded:"Mida m\xE0xima total excedida",labelMaxTotalFileSize:"La mida m\xE0xima total del fitxer \xE9s {filesize}",labelFileTypeNotAllowed:"Fitxer de tipus inv\xE0lid",fileValidateTypeLabelExpectedTypes:"Espera {allButLastType} o {lastType}",imageValidateSizeLabelFormatError:"Tipus d'imatge no suportada",imageValidateSizeLabelImageSizeTooSmall:"La imatge \xE9s massa petita",imageValidateSizeLabelImageSizeTooBig:"La imatge \xE9s massa gran",imageValidateSizeLabelExpectedMinSize:"La mida m\xEDnima \xE9s {minWidth} x {minHeight}",imageValidateSizeLabelExpectedMaxSize:"La mida m\xE0xima \xE9s {maxWidth} x {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"La resoluci\xF3 \xE9s massa baixa",imageValidateSizeLabelImageResolutionTooHigh:"La resoluci\xF3 \xE9s massa alta",imageValidateSizeLabelExpectedMinResolution:"La resoluci\xF3 m\xEDnima \xE9s {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"La resoluci\xF3 m\xE0xima \xE9s {maxResolution}"};var Ll={labelIdle:'\u067E\u06D5\u0695\u06AF\u06D5\u06A9\u0627\u0646 \u0641\u0695\u06CE \u0628\u062F\u06D5 \u0626\u06CE\u0631\u06D5 \u0628\u06C6 \u0628\u0627\u0631\u06A9\u0631\u062F\u0646 \u06CC\u0627\u0646 \u0647\u06D5\u06B5\u0628\u0698\u06CE\u0631\u06D5 ',labelInvalidField:"\u067E\u06D5\u0695\u06AF\u06D5\u06CC \u0646\u0627\u062F\u0631\u0648\u0633\u062A\u06CC \u062A\u06CE\u062F\u0627\u06CC\u06D5",labelFileWaitingForSize:"\u0686\u0627\u0648\u06D5\u0695\u0648\u0627\u0646\u06CC\u06CC \u0642\u06D5\u0628\u0627\u0631\u06D5",labelFileSizeNotAvailable:"\u0642\u06D5\u0628\u0627\u0631\u06D5 \u0628\u06D5\u0631\u062F\u06D5\u0633\u062A \u0646\u06CC\u06D5",labelFileLoading:"\u0628\u0627\u0631\u06A9\u0631\u062F\u0646",labelFileLoadError:"\u0647\u06D5\u06B5\u06D5 \u0644\u06D5\u0645\u0627\u0648\u06D5\u06CC \u0628\u0627\u0631\u06A9\u0631\u062F\u0646",labelFileProcessing:"\u0628\u0627\u0631\u06A9\u0631\u062F\u0646",labelFileProcessingComplete:"\u0628\u0627\u0631\u06A9\u0631\u062F\u0646 \u062A\u06D5\u0648\u0627\u0648 \u0628\u0648\u0648",labelFileProcessingAborted:"\u0628\u0627\u0631\u06A9\u0631\u062F\u0646 \u0647\u06D5\u06B5\u0648\u06D5\u0634\u0627\u06CC\u06D5\u0648\u06D5",labelFileProcessingError:"\u0647\u06D5\u06B5\u06D5 \u0644\u06D5\u06A9\u0627\u062A\u06CC \u0628\u0627\u0631\u06A9\u0631\u062F\u0646\u062F\u0627",labelFileProcessingRevertError:"\u0647\u06D5\u06B5\u06D5 \u0644\u06D5 \u06A9\u0627\u062A\u06CC \u06AF\u06D5\u0695\u0627\u0646\u06D5\u0648\u06D5",labelFileRemoveError:"\u0647\u06D5\u06B5\u06D5 \u0644\u06D5 \u06A9\u0627\u062A\u06CC \u0633\u0695\u06CC\u0646\u06D5\u0648\u06D5",labelTapToCancel:"\u0628\u06C6 \u0647\u06D5\u06B5\u0648\u06D5\u0634\u0627\u0646\u062F\u0646\u06D5\u0648\u06D5 Tab \u062F\u0627\u0628\u06AF\u0631\u06D5",labelTapToRetry:"tap \u062F\u0627\u0628\u06AF\u0631\u06D5 \u0628\u06C6 \u062F\u0648\u0648\u0628\u0627\u0631\u06D5\u06A9\u0631\u062F\u0646\u06D5\u0648\u06D5",labelTapToUndo:"tap \u062F\u0627\u0628\u06AF\u0631\u06D5 \u0628\u06C6 \u06AF\u06D5\u0695\u0627\u0646\u062F\u0646\u06D5\u0648\u06D5",labelButtonRemoveItem:"\u0633\u0695\u06CC\u0646\u06D5\u0648\u06D5",labelButtonAbortItemLoad:"\u0647\u06D5\u06B5\u0648\u06D5\u0634\u0627\u0646\u062F\u0646\u06D5\u0648\u06D5",labelButtonRetryItemLoad:"\u0647\u06D5\u0648\u06B5\u062F\u0627\u0646\u06D5\u0648\u06D5",labelButtonAbortItemProcessing:"\u067E\u06D5\u0634\u06CC\u0645\u0627\u0646\u0628\u0648\u0648\u0646\u06D5\u0648\u06D5",labelButtonUndoItemProcessing:"\u06AF\u06D5\u0695\u0627\u0646\u062F\u0646\u06D5\u0648\u06D5",labelButtonRetryItemProcessing:"\u0647\u06D5\u0648\u06B5\u062F\u0627\u0646\u06D5\u0648\u06D5",labelButtonProcessItem:"\u0628\u0627\u0631\u06A9\u0631\u062F\u0646",labelMaxFileSizeExceeded:"\u067E\u06D5\u0695\u06AF\u06D5 \u0632\u06C6\u0631 \u06AF\u06D5\u0648\u0631\u06D5\u06CC\u06D5",labelMaxFileSize:"\u0632\u06C6\u0631\u062A\u0631\u06CC\u0646 \u0642\u06D5\u0628\u0627\u0631\u06D5 {filesize}",labelMaxTotalFileSizeExceeded:"\u0632\u06C6\u0631\u062A\u0631\u06CC\u0646 \u0642\u06D5\u0628\u0627\u0631\u06D5\u06CC \u06A9\u06C6\u06CC \u06AF\u0634\u062A\u06CC \u062A\u06CE\u067E\u06D5\u0695\u06CE\u0646\u062F\u0631\u0627",labelMaxTotalFileSize:"\u0632\u06C6\u0631\u062A\u0631\u06CC\u0646 \u0642\u06D5\u0628\u0627\u0631\u06D5\u06CC \u06A9\u06C6\u06CC \u067E\u06D5\u0695\u06AF\u06D5 {filesize}",labelFileTypeNotAllowed:"\u062C\u06C6\u0631\u06CC \u067E\u06D5\u0695\u06AF\u06D5\u06A9\u06D5 \u0646\u0627\u062F\u0631\u0648\u0633\u062A\u06D5",fileValidateTypeLabelExpectedTypes:"\u062C\u06AF\u06D5 \u0644\u06D5 {allButLastType} \u06CC\u0627\u0646 {lastType}",imageValidateSizeLabelFormatError:"\u062C\u06C6\u0631\u06CC \u0648\u06CE\u0646\u06D5 \u067E\u0627\u06B5\u067E\u0634\u062A\u06CC\u06CC \u0646\u06D5\u06A9\u0631\u0627\u0648\u06D5",imageValidateSizeLabelImageSizeTooSmall:"\u0648\u06CE\u0646\u06D5\u06A9\u06D5 \u0632\u06C6\u0631 \u0628\u0686\u0648\u0648\u06A9\u06D5",imageValidateSizeLabelImageSizeTooBig:"\u0648\u06CE\u0646\u06D5\u06A9\u06D5 \u0632\u06C6\u0631 \u06AF\u06D5\u0648\u0631\u06D5\u06CC\u06D5",imageValidateSizeLabelExpectedMinSize:"\u06A9\u06D5\u0645\u062A\u0631\u06CC\u0646 \u0642\u06D5\u0628\u0627\u0631\u06D5 {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"\u0632\u06C6\u0631\u062A\u0631\u06CC\u0646 \u0642\u06D5\u0628\u0627\u0631\u06D5 {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"\u0648\u0631\u062F\u0628\u06CC\u0646\u06CC\u06CC\u06D5\u06A9\u06D5\u06CC \u0632\u06C6\u0631 \u06A9\u06D5\u0645\u06D5",imageValidateSizeLabelImageResolutionTooHigh:"\u0648\u0631\u062F\u0628\u06CC\u0646\u06CC\u06CC\u06D5\u06A9\u06D5\u06CC \u0632\u06C6\u0631 \u0628\u06D5\u0631\u0632\u06D5",imageValidateSizeLabelExpectedMinResolution:"\u06A9\u06D5\u0645\u062A\u0631\u06CC\u0646 \u0648\u0631\u062F\u0628\u06CC\u0646\u06CC\u06CC {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"\u0632\u06C6\u0631\u062A\u0631\u06CC\u0646 \u0648\u0631\u062F\u0628\u06CC\u0646\u06CC {maxResolution}"};var Al={labelIdle:'P\u0159et\xE1hn\u011Bte soubor sem (drag&drop) nebo Vyhledat ',labelInvalidField:"Pole obsahuje chybn\xE9 soubory",labelFileWaitingForSize:"Zji\u0161\u0165uje se velikost",labelFileSizeNotAvailable:"Velikost nen\xED zn\xE1m\xE1",labelFileLoading:"P\u0159en\xE1\u0161\xED se",labelFileLoadError:"Chyba p\u0159i p\u0159enosu",labelFileProcessing:"Prob\xEDh\xE1 upload",labelFileProcessingComplete:"Upload dokon\u010Den",labelFileProcessingAborted:"Upload stornov\xE1n",labelFileProcessingError:"Chyba p\u0159i uploadu",labelFileProcessingRevertError:"Chyba p\u0159i obnov\u011B",labelFileRemoveError:"Chyba p\u0159i odstran\u011Bn\xED",labelTapToCancel:"klepn\u011Bte pro storno",labelTapToRetry:"klepn\u011Bte pro opakov\xE1n\xED",labelTapToUndo:"klepn\u011Bte pro vr\xE1cen\xED",labelButtonRemoveItem:"Odstranit",labelButtonAbortItemLoad:"Storno",labelButtonRetryItemLoad:"Opakovat",labelButtonAbortItemProcessing:"Zp\u011Bt",labelButtonUndoItemProcessing:"Vr\xE1tit",labelButtonRetryItemProcessing:"Opakovat",labelButtonProcessItem:"Upload",labelMaxFileSizeExceeded:"Soubor je p\u0159\xEDli\u0161 velk\xFD",labelMaxFileSize:"Nejv\u011Bt\u0161\xED velikost souboru je {filesize}",labelMaxTotalFileSizeExceeded:"P\u0159ekro\u010Dena maxim\xE1ln\xED celkov\xE1 velikost souboru",labelMaxTotalFileSize:"Maxim\xE1ln\xED celkov\xE1 velikost souboru je {filesize}",labelFileTypeNotAllowed:"Soubor je nespr\xE1vn\xE9ho typu",fileValidateTypeLabelExpectedTypes:"O\u010Dek\xE1v\xE1 se {allButLastType} nebo {lastType}",imageValidateSizeLabelFormatError:"Obr\xE1zek tohoto typu nen\xED podporov\xE1n",imageValidateSizeLabelImageSizeTooSmall:"Obr\xE1zek je p\u0159\xEDli\u0161 mal\xFD",imageValidateSizeLabelImageSizeTooBig:"Obr\xE1zek je p\u0159\xEDli\u0161 velk\xFD",imageValidateSizeLabelExpectedMinSize:"Minim\xE1ln\xED rozm\u011Br je {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"Maxim\xE1ln\xED rozm\u011Br je {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"Rozli\u0161en\xED je p\u0159\xEDli\u0161 mal\xE9",imageValidateSizeLabelImageResolutionTooHigh:"Rozli\u0161en\xED je p\u0159\xEDli\u0161 velk\xE9",imageValidateSizeLabelExpectedMinResolution:"Minim\xE1ln\xED rozli\u0161en\xED je {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Maxim\xE1ln\xED rozli\u0161en\xED je {maxResolution}"};var Ml={labelIdle:'Tr\xE6k & slip filer eller Gennemse ',labelInvalidField:"Felt indeholder ugyldige filer",labelFileWaitingForSize:"Venter p\xE5 st\xF8rrelse",labelFileSizeNotAvailable:"St\xF8rrelse ikke tilg\xE6ngelig",labelFileLoading:"Loader",labelFileLoadError:"Load fejlede",labelFileProcessing:"Uploader",labelFileProcessingComplete:"Upload f\xE6rdig",labelFileProcessingAborted:"Upload annulleret",labelFileProcessingError:"Upload fejlede",labelFileProcessingRevertError:"Fortryd fejlede",labelFileRemoveError:"Fjern fejlede",labelTapToCancel:"tryk for at annullere",labelTapToRetry:"tryk for at pr\xF8ve igen",labelTapToUndo:"tryk for at fortryde",labelButtonRemoveItem:"Fjern",labelButtonAbortItemLoad:"Annuller",labelButtonRetryItemLoad:"Fors\xF8g igen",labelButtonAbortItemProcessing:"Annuller",labelButtonUndoItemProcessing:"Fortryd",labelButtonRetryItemProcessing:"Pr\xF8v igen",labelButtonProcessItem:"Upload",labelMaxFileSizeExceeded:"Filen er for stor",labelMaxFileSize:"Maksimal filst\xF8rrelse er {filesize}",labelMaxTotalFileSizeExceeded:"Maksimal totalst\xF8rrelse overskredet",labelMaxTotalFileSize:"Maksimal total filst\xF8rrelse er {filesize}",labelFileTypeNotAllowed:"Ugyldig filtype",fileValidateTypeLabelExpectedTypes:"Forventer {allButLastType} eller {lastType}",imageValidateSizeLabelFormatError:"Ugyldigt format",imageValidateSizeLabelImageSizeTooSmall:"Billedet er for lille",imageValidateSizeLabelImageSizeTooBig:"Billedet er for stort",imageValidateSizeLabelExpectedMinSize:"Minimum st\xF8rrelse er {minBredde} \xD7 {minH\xF8jde}",imageValidateSizeLabelExpectedMaxSize:"Maksimal st\xF8rrelse er {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"For lav opl\xF8sning",imageValidateSizeLabelImageResolutionTooHigh:"For h\xF8j opl\xF8sning",imageValidateSizeLabelExpectedMinResolution:"Minimum opl\xF8sning er {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Maksimal opl\xF8sning er {maxResolution}"};var Ol={labelIdle:'Dateien ablegen oder ausw\xE4hlen ',labelInvalidField:"Feld beinhaltet ung\xFCltige Dateien",labelFileWaitingForSize:"Dateigr\xF6\xDFe berechnen",labelFileSizeNotAvailable:"Dateigr\xF6\xDFe nicht verf\xFCgbar",labelFileLoading:"Laden",labelFileLoadError:"Fehler beim Laden",labelFileProcessing:"Upload l\xE4uft",labelFileProcessingComplete:"Upload abgeschlossen",labelFileProcessingAborted:"Upload abgebrochen",labelFileProcessingError:"Fehler beim Upload",labelFileProcessingRevertError:"Fehler beim Wiederherstellen",labelFileRemoveError:"Fehler beim L\xF6schen",labelTapToCancel:"abbrechen",labelTapToRetry:"erneut versuchen",labelTapToUndo:"r\xFCckg\xE4ngig",labelButtonRemoveItem:"Entfernen",labelButtonAbortItemLoad:"Verwerfen",labelButtonRetryItemLoad:"Erneut versuchen",labelButtonAbortItemProcessing:"Abbrechen",labelButtonUndoItemProcessing:"R\xFCckg\xE4ngig",labelButtonRetryItemProcessing:"Erneut versuchen",labelButtonProcessItem:"Upload",labelMaxFileSizeExceeded:"Datei ist zu gro\xDF",labelMaxFileSize:"Maximale Dateigr\xF6\xDFe: {filesize}",labelMaxTotalFileSizeExceeded:"Maximale gesamte Dateigr\xF6\xDFe \xFCberschritten",labelMaxTotalFileSize:"Maximale gesamte Dateigr\xF6\xDFe: {filesize}",labelFileTypeNotAllowed:"Dateityp ung\xFCltig",fileValidateTypeLabelExpectedTypes:"Erwartet {allButLastType} oder {lastType}",imageValidateSizeLabelFormatError:"Bildtyp nicht unterst\xFCtzt",imageValidateSizeLabelImageSizeTooSmall:"Bild ist zu klein",imageValidateSizeLabelImageSizeTooBig:"Bild ist zu gro\xDF",imageValidateSizeLabelExpectedMinSize:"Mindestgr\xF6\xDFe: {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"Maximale Gr\xF6\xDFe: {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"Aufl\xF6sung ist zu niedrig",imageValidateSizeLabelImageResolutionTooHigh:"Aufl\xF6sung ist zu hoch",imageValidateSizeLabelExpectedMinResolution:"Mindestaufl\xF6sung: {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Maximale Aufl\xF6sung: {maxResolution}"};var Pl={labelIdle:'Drag & Drop your files or Browse ',labelInvalidField:"Field contains invalid files",labelFileWaitingForSize:"Waiting for size",labelFileSizeNotAvailable:"Size not available",labelFileLoading:"Loading",labelFileLoadError:"Error during load",labelFileProcessing:"Uploading",labelFileProcessingComplete:"Upload complete",labelFileProcessingAborted:"Upload cancelled",labelFileProcessingError:"Error during upload",labelFileProcessingRevertError:"Error during revert",labelFileRemoveError:"Error during remove",labelTapToCancel:"tap to cancel",labelTapToRetry:"tap to retry",labelTapToUndo:"tap to undo",labelButtonRemoveItem:"Remove",labelButtonAbortItemLoad:"Abort",labelButtonRetryItemLoad:"Retry",labelButtonAbortItemProcessing:"Cancel",labelButtonUndoItemProcessing:"Undo",labelButtonRetryItemProcessing:"Retry",labelButtonProcessItem:"Upload",labelMaxFileSizeExceeded:"File is too large",labelMaxFileSize:"Maximum file size is {filesize}",labelMaxTotalFileSizeExceeded:"Maximum total size exceeded",labelMaxTotalFileSize:"Maximum total file size is {filesize}",labelFileTypeNotAllowed:"File of invalid type",fileValidateTypeLabelExpectedTypes:"Expects {allButLastType} or {lastType}",imageValidateSizeLabelFormatError:"Image type not supported",imageValidateSizeLabelImageSizeTooSmall:"Image is too small",imageValidateSizeLabelImageSizeTooBig:"Image is too big",imageValidateSizeLabelExpectedMinSize:"Minimum size is {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"Maximum size is {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"Resolution is too low",imageValidateSizeLabelImageResolutionTooHigh:"Resolution is too high",imageValidateSizeLabelExpectedMinResolution:"Minimum resolution is {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Maximum resolution is {maxResolution}"};var Dl={labelIdle:'Arrastra y suelta tus archivos o Examina ',labelInvalidField:"El campo contiene archivos inv\xE1lidos",labelFileWaitingForSize:"Esperando tama\xF1o",labelFileSizeNotAvailable:"Tama\xF1o no disponible",labelFileLoading:"Cargando",labelFileLoadError:"Error durante la carga",labelFileProcessing:"Subiendo",labelFileProcessingComplete:"Subida completa",labelFileProcessingAborted:"Subida cancelada",labelFileProcessingError:"Error durante la subida",labelFileProcessingRevertError:"Error durante la reversi\xF3n",labelFileRemoveError:"Error durante la eliminaci\xF3n",labelTapToCancel:"toca para cancelar",labelTapToRetry:"tocar para reintentar",labelTapToUndo:"tocar para deshacer",labelButtonRemoveItem:"Eliminar",labelButtonAbortItemLoad:"Cancelar",labelButtonRetryItemLoad:"Reintentar",labelButtonAbortItemProcessing:"Cancelar",labelButtonUndoItemProcessing:"Deshacer",labelButtonRetryItemProcessing:"Reintentar",labelButtonProcessItem:"Subir",labelMaxFileSizeExceeded:"El archivo es demasiado grande",labelMaxFileSize:"El tama\xF1o m\xE1ximo del archivo es {filesize}",labelMaxTotalFileSizeExceeded:"Tama\xF1o total m\xE1ximo excedido",labelMaxTotalFileSize:"El tama\xF1o total m\xE1ximo del archivo es {filesize}",labelFileTypeNotAllowed:"Archivo de tipo inv\xE1lido",fileValidateTypeLabelExpectedTypes:"Espera {allButLastType} o {lastType}",imageValidateSizeLabelFormatError:"Tipo de imagen no soportada",imageValidateSizeLabelImageSizeTooSmall:"La imagen es demasiado peque\xF1a",imageValidateSizeLabelImageSizeTooBig:"La imagen es demasiado grande",imageValidateSizeLabelExpectedMinSize:"El tama\xF1o m\xEDnimo es {minWidth} x {minHeight}",imageValidateSizeLabelExpectedMaxSize:"El tama\xF1o m\xE1ximo es {maxWidth} x {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"La resoluci\xF3n es demasiado baja",imageValidateSizeLabelImageResolutionTooHigh:"La resoluci\xF3n es demasiado alta",imageValidateSizeLabelExpectedMinResolution:"La resoluci\xF3n m\xEDnima es {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"La resoluci\xF3n m\xE1xima es {maxResolution}"};var Fl={labelIdle:'\u0641\u0627\u06CC\u0644 \u0631\u0627 \u0627\u06CC\u0646\u062C\u0627 \u0628\u06A9\u0634\u06CC\u062F \u0648 \u0631\u0647\u0627 \u06A9\u0646\u06CC\u062F\u060C \u06CC\u0627 \u062C\u0633\u062A\u062C\u0648 \u06A9\u0646\u06CC\u062F ',labelInvalidField:"\u0641\u06CC\u0644\u062F \u062F\u0627\u0631\u0627\u06CC \u0641\u0627\u06CC\u0644 \u0647\u0627\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631 \u0627\u0633\u062A",labelFileWaitingForSize:"Waiting for size",labelFileSizeNotAvailable:"\u062D\u062C\u0645 \u0641\u0627\u06CC\u0644 \u0645\u062C\u0627\u0632 \u0646\u06CC\u0633\u062A",labelFileLoading:"\u062F\u0631\u062D\u0627\u0644 \u0628\u0627\u0631\u06AF\u0630\u0627\u0631\u06CC",labelFileLoadError:"\u062E\u0637\u0627 \u062F\u0631 \u0632\u0645\u0627\u0646 \u0627\u062C\u0631\u0627",labelFileProcessing:"\u062F\u0631\u062D\u0627\u0644 \u0628\u0627\u0631\u06AF\u0630\u0627\u0631\u06CC",labelFileProcessingComplete:"\u0628\u0627\u0631\u06AF\u0630\u0627\u0631\u06CC \u06A9\u0627\u0645\u0644 \u0634\u062F",labelFileProcessingAborted:"\u0628\u0627\u0631\u06AF\u0630\u0627\u0631\u06CC \u0644\u063A\u0648 \u0634\u062F",labelFileProcessingError:"\u062E\u0637\u0627 \u062F\u0631 \u0632\u0645\u0627\u0646 \u0628\u0627\u0631\u06AF\u0630\u0627\u0631\u06CC",labelFileProcessingRevertError:"\u062E\u0637\u0627 \u062F\u0631 \u0632\u0645\u0627\u0646 \u062D\u0630\u0641",labelFileRemoveError:"\u062E\u0637\u0627 \u062F\u0631 \u0632\u0645\u0627\u0646 \u062D\u0630\u0641",labelTapToCancel:"\u0628\u0631\u0627\u06CC \u0644\u063A\u0648 \u0636\u0631\u0628\u0647 \u0628\u0632\u0646\u06CC\u062F",labelTapToRetry:"\u0628\u0631\u0627\u06CC \u062A\u06A9\u0631\u0627\u0631 \u06A9\u0644\u06CC\u06A9 \u06A9\u0646\u06CC\u062F",labelTapToUndo:"\u0628\u0631\u0627\u06CC \u0628\u0631\u06AF\u0634\u062A \u06A9\u0644\u06CC\u06A9 \u06A9\u0646\u06CC\u062F",labelButtonRemoveItem:"\u062D\u0630\u0641",labelButtonAbortItemLoad:"\u0644\u063A\u0648",labelButtonRetryItemLoad:"\u062A\u06A9\u0631\u0627\u0631",labelButtonAbortItemProcessing:"\u0644\u063A\u0648",labelButtonUndoItemProcessing:"\u0628\u0631\u06AF\u0634\u062A",labelButtonRetryItemProcessing:"\u062A\u06A9\u0631\u0627\u0631",labelButtonProcessItem:"\u0628\u0627\u0631\u06AF\u0630\u0627\u0631\u06CC",labelMaxFileSizeExceeded:"\u0641\u0627\u06CC\u0644 \u0628\u0633\u06CC\u0627\u0631 \u062D\u062C\u06CC\u0645 \u0627\u0633\u062A",labelMaxFileSize:"\u062D\u062F\u0627\u06A9\u062B\u0631 \u0645\u062C\u0627\u0632 \u0641\u0627\u06CC\u0644 {filesize} \u0627\u0633\u062A",labelMaxTotalFileSizeExceeded:"\u0627\u0632 \u062D\u062F\u0627\u06A9\u062B\u0631 \u062D\u062C\u0645 \u0641\u0627\u06CC\u0644 \u0628\u06CC\u0634\u062A\u0631 \u0634\u062F",labelMaxTotalFileSize:"\u062D\u062F\u0627\u06A9\u062B\u0631 \u062D\u062C\u0645 \u0641\u0627\u06CC\u0644 {filesize} \u0627\u0633\u062A",labelFileTypeNotAllowed:"\u0646\u0648\u0639 \u0641\u0627\u06CC\u0644 \u0646\u0627\u0645\u0639\u062A\u0628\u0631 \u0627\u0633\u062A",fileValidateTypeLabelExpectedTypes:"\u062F\u0631 \u0627\u0646\u062A\u0638\u0627\u0631 {allButLastType} \u06CC\u0627 {lastType}",imageValidateSizeLabelFormatError:"\u0641\u0631\u0645\u062A \u062A\u0635\u0648\u06CC\u0631 \u067E\u0634\u062A\u06CC\u0628\u0627\u0646\u06CC \u0646\u0645\u06CC \u0634\u0648\u062F",imageValidateSizeLabelImageSizeTooSmall:"\u062A\u0635\u0648\u06CC\u0631 \u0628\u0633\u06CC\u0627\u0631 \u06A9\u0648\u0686\u06A9 \u0627\u0633\u062A",imageValidateSizeLabelImageSizeTooBig:"\u062A\u0635\u0648\u06CC\u0631 \u0628\u0633\u06CC\u0627\u0631 \u0628\u0632\u0631\u06AF \u0627\u0633\u062A",imageValidateSizeLabelExpectedMinSize:"\u062D\u062F\u0627\u0642\u0644 \u0627\u0646\u062F\u0627\u0632\u0647 {minWidth} \xD7 {minHeight} \u0627\u0633\u062A",imageValidateSizeLabelExpectedMaxSize:"\u062D\u062F\u0627\u06A9\u062B\u0631 \u0627\u0646\u062F\u0627\u0632\u0647 {maxWidth} \xD7 {maxHeight} \u0627\u0633\u062A",imageValidateSizeLabelImageResolutionTooLow:"\u0648\u0636\u0648\u062D \u062A\u0635\u0648\u06CC\u0631 \u0628\u0633\u06CC\u0627\u0631 \u06A9\u0645 \u0627\u0633\u062A",imageValidateSizeLabelImageResolutionTooHigh:"\u0648\u0636\u0648\u0639 \u062A\u0635\u0648\u06CC\u0631 \u0628\u0633\u06CC\u0627\u0631 \u0632\u06CC\u0627\u062F \u0627\u0633\u062A",imageValidateSizeLabelExpectedMinResolution:"\u062D\u062F\u0627\u0642\u0644 \u0648\u0636\u0648\u062D \u062A\u0635\u0648\u06CC\u0631 {minResolution} \u0627\u0633\u062A",imageValidateSizeLabelExpectedMaxResolution:"\u062D\u062F\u0627\u06A9\u062B\u0631 \u0648\u0636\u0648\u062D \u062A\u0635\u0648\u06CC\u0631 {maxResolution} \u0627\u0633\u062A"};var zl={labelIdle:'Ved\xE4 ja pudota tiedostoja tai Selaa ',labelInvalidField:"Kent\xE4ss\xE4 on virheellisi\xE4 tiedostoja",labelFileWaitingForSize:"Odotetaan kokoa",labelFileSizeNotAvailable:"Kokoa ei saatavilla",labelFileLoading:"Ladataan",labelFileLoadError:"Virhe latauksessa",labelFileProcessing:"L\xE4hetet\xE4\xE4n",labelFileProcessingComplete:"L\xE4hetys valmis",labelFileProcessingAborted:"L\xE4hetys peruttu",labelFileProcessingError:"Virhe l\xE4hetyksess\xE4",labelFileProcessingRevertError:"Virhe palautuksessa",labelFileRemoveError:"Virhe poistamisessa",labelTapToCancel:"peruuta napauttamalla",labelTapToRetry:"yrit\xE4 uudelleen napauttamalla",labelTapToUndo:"kumoa napauttamalla",labelButtonRemoveItem:"Poista",labelButtonAbortItemLoad:"Keskeyt\xE4",labelButtonRetryItemLoad:"Yrit\xE4 uudelleen",labelButtonAbortItemProcessing:"Peruuta",labelButtonUndoItemProcessing:"Kumoa",labelButtonRetryItemProcessing:"Yrit\xE4 uudelleen",labelButtonProcessItem:"L\xE4het\xE4",labelMaxFileSizeExceeded:"Tiedoston koko on liian suuri",labelMaxFileSize:"Tiedoston maksimikoko on {filesize}",labelMaxTotalFileSizeExceeded:"Tiedostojen yhdistetty maksimikoko ylitetty",labelMaxTotalFileSize:"Tiedostojen yhdistetty maksimikoko on {filesize}",labelFileTypeNotAllowed:"Tiedostotyyppi\xE4 ei sallita",fileValidateTypeLabelExpectedTypes:"Sallitaan {allButLastType} tai {lastType}",imageValidateSizeLabelFormatError:"Kuvatyyppi\xE4 ei tueta",imageValidateSizeLabelImageSizeTooSmall:"Kuva on liian pieni",imageValidateSizeLabelImageSizeTooBig:"Kuva on liian suuri",imageValidateSizeLabelExpectedMinSize:"Minimikoko on {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"Maksimikoko on {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"Resoluutio on liian pieni",imageValidateSizeLabelImageResolutionTooHigh:"Resoluutio on liian suuri",imageValidateSizeLabelExpectedMinResolution:"Minimiresoluutio on {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Maksimiresoluutio on {maxResolution}"};var Cl={labelIdle:'Faites glisser vos fichiers ou Parcourir ',labelInvalidField:"Le champ contient des fichiers invalides",labelFileWaitingForSize:"En attente de taille",labelFileSizeNotAvailable:"Taille non disponible",labelFileLoading:"Chargement",labelFileLoadError:"Erreur durant le chargement",labelFileProcessing:"Traitement",labelFileProcessingComplete:"Traitement effectu\xE9",labelFileProcessingAborted:"Traitement interrompu",labelFileProcessingError:"Erreur durant le traitement",labelFileProcessingRevertError:"Erreur durant la restauration",labelFileRemoveError:"Erreur durant la suppression",labelTapToCancel:"appuyer pour annuler",labelTapToRetry:"appuyer pour r\xE9essayer",labelTapToUndo:"appuyer pour revenir en arri\xE8re",labelButtonRemoveItem:"Retirer",labelButtonAbortItemLoad:"Annuler",labelButtonRetryItemLoad:"Recommencer",labelButtonAbortItemProcessing:"Annuler",labelButtonUndoItemProcessing:"Revenir en arri\xE8re",labelButtonRetryItemProcessing:"Recommencer",labelButtonProcessItem:"Transf\xE9rer",labelMaxFileSizeExceeded:"Le fichier est trop volumineux",labelMaxFileSize:"La taille maximale de fichier est {filesize}",labelMaxTotalFileSizeExceeded:"Taille totale maximale d\xE9pass\xE9e",labelMaxTotalFileSize:"La taille totale maximale des fichiers est {filesize}",labelFileTypeNotAllowed:"Fichier non valide",fileValidateTypeLabelExpectedTypes:"Attendu {allButLastType} ou {lastType}",imageValidateSizeLabelFormatError:"Type d'image non pris en charge",imageValidateSizeLabelImageSizeTooSmall:"L'image est trop petite",imageValidateSizeLabelImageSizeTooBig:"L'image est trop grande",imageValidateSizeLabelExpectedMinSize:"La taille minimale est {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"La taille maximale est {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"La r\xE9solution est trop faible",imageValidateSizeLabelImageResolutionTooHigh:"La r\xE9solution est trop \xE9lev\xE9e",imageValidateSizeLabelExpectedMinResolution:"La r\xE9solution minimale est {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"La r\xE9solution maximale est {maxResolution}"};var Nl={labelIdle:'Mozgasd ide a f\xE1jlt a felt\xF6lt\xE9shez, vagy tall\xF3z\xE1s ',labelInvalidField:"A mez\u0151 \xE9rv\xE9nytelen f\xE1jlokat tartalmaz",labelFileWaitingForSize:"F\xE1ljm\xE9ret kisz\xE1mol\xE1sa",labelFileSizeNotAvailable:"A f\xE1jlm\xE9ret nem el\xE9rhet\u0151",labelFileLoading:"T\xF6lt\xE9s",labelFileLoadError:"Hiba a bet\xF6lt\xE9s sor\xE1n",labelFileProcessing:"Felt\xF6lt\xE9s",labelFileProcessingComplete:"Sikeres felt\xF6lt\xE9s",labelFileProcessingAborted:"A felt\xF6lt\xE9s megszak\xEDtva",labelFileProcessingError:"Hiba t\xF6rt\xE9nt a felt\xF6lt\xE9s sor\xE1n",labelFileProcessingRevertError:"Hiba a vissza\xE1ll\xEDt\xE1s sor\xE1n",labelFileRemoveError:"Hiba t\xF6rt\xE9nt az elt\xE1vol\xEDt\xE1s sor\xE1n",labelTapToCancel:"koppints a t\xF6rl\xE9shez",labelTapToRetry:"koppints az \xFAjrakezd\xE9shez",labelTapToUndo:"koppints a visszavon\xE1shoz",labelButtonRemoveItem:"Elt\xE1vol\xEDt\xE1s",labelButtonAbortItemLoad:"Megszak\xEDt\xE1s",labelButtonRetryItemLoad:"\xDAjrapr\xF3b\xE1lkoz\xE1s",labelButtonAbortItemProcessing:"Megszak\xEDt\xE1s",labelButtonUndoItemProcessing:"Visszavon\xE1s",labelButtonRetryItemProcessing:"\xDAjrapr\xF3b\xE1lkoz\xE1s",labelButtonProcessItem:"Felt\xF6lt\xE9s",labelMaxFileSizeExceeded:"A f\xE1jl t\xFAll\xE9pte a maxim\xE1lis m\xE9retet",labelMaxFileSize:"Maxim\xE1lis f\xE1jlm\xE9ret: {filesize}",labelMaxTotalFileSizeExceeded:"T\xFAll\xE9pte a maxim\xE1lis teljes m\xE9retet",labelMaxTotalFileSize:"A maxim\xE1is teljes f\xE1jlm\xE9ret: {filesize}",labelFileTypeNotAllowed:"\xC9rv\xE9nytelen t\xEDpus\xFA f\xE1jl",fileValidateTypeLabelExpectedTypes:"Enged\xE9lyezett t\xEDpusok {allButLastType} vagy {lastType}",imageValidateSizeLabelFormatError:"A k\xE9pt\xEDpus nem t\xE1mogatott",imageValidateSizeLabelImageSizeTooSmall:"A k\xE9p t\xFAl kicsi",imageValidateSizeLabelImageSizeTooBig:"A k\xE9p t\xFAl nagy",imageValidateSizeLabelExpectedMinSize:"Minimum m\xE9ret: {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"Maximum m\xE9ret: {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"A felbont\xE1s t\xFAl alacsony",imageValidateSizeLabelImageResolutionTooHigh:"A felbont\xE1s t\xFAl magas",imageValidateSizeLabelExpectedMinResolution:"Minim\xE1is felbont\xE1s: {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Maxim\xE1lis felbont\xE1s: {maxResolution}"};var Bl={labelIdle:'Seret & Jatuhkan berkas Anda atau Jelajahi',labelInvalidField:"Isian berisi berkas yang tidak valid",labelFileWaitingForSize:"Menunggu ukuran berkas",labelFileSizeNotAvailable:"Ukuran berkas tidak tersedia",labelFileLoading:"Memuat",labelFileLoadError:"Kesalahan saat memuat",labelFileProcessing:"Mengunggah",labelFileProcessingComplete:"Pengunggahan selesai",labelFileProcessingAborted:"Pengunggahan dibatalkan",labelFileProcessingError:"Kesalahan saat pengunggahan",labelFileProcessingRevertError:"Kesalahan saat pemulihan",labelFileRemoveError:"Kesalahan saat penghapusan",labelTapToCancel:"ketuk untuk membatalkan",labelTapToRetry:"ketuk untuk mencoba lagi",labelTapToUndo:"ketuk untuk mengurungkan",labelButtonRemoveItem:"Hapus",labelButtonAbortItemLoad:"Batalkan",labelButtonRetryItemLoad:"Coba Kembali",labelButtonAbortItemProcessing:"Batalkan",labelButtonUndoItemProcessing:"Urungkan",labelButtonRetryItemProcessing:"Coba Kembali",labelButtonProcessItem:"Unggah",labelMaxFileSizeExceeded:"Berkas terlalu besar",labelMaxFileSize:"Ukuran berkas maksimum adalah {filesize}",labelMaxTotalFileSizeExceeded:"Jumlah berkas maksimum terlampaui",labelMaxTotalFileSize:"Jumlah berkas maksimum adalah {filesize}",labelFileTypeNotAllowed:"Jenis berkas tidak valid",fileValidateTypeLabelExpectedTypes:"Mengharapkan {allButLastType} atau {lastType}",imageValidateSizeLabelFormatError:"Jenis citra tidak didukung",imageValidateSizeLabelImageSizeTooSmall:"Citra terlalu kecil",imageValidateSizeLabelImageSizeTooBig:"Citra terlalu besar",imageValidateSizeLabelExpectedMinSize:"Ukuran minimum adalah {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"Ukuran maksimum adalah {minWidth} \xD7 {minHeight}",imageValidateSizeLabelImageResolutionTooLow:"Resolusi terlalu rendah",imageValidateSizeLabelImageResolutionTooHigh:"Resolusi terlalu tinggi",imageValidateSizeLabelExpectedMinResolution:"Resolusi minimum adalah {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Resolusi maksimum adalah {maxResolution}"};var kl={labelIdle:'Trascina e rilascia i tuoi file oppure Carica ',labelInvalidField:"Il campo contiene dei file non validi",labelFileWaitingForSize:"Aspettando le dimensioni",labelFileSizeNotAvailable:"Dimensioni non disponibili",labelFileLoading:"Caricamento",labelFileLoadError:"Errore durante il caricamento",labelFileProcessing:"Caricamento",labelFileProcessingComplete:"Caricamento completato",labelFileProcessingAborted:"Caricamento cancellato",labelFileProcessingError:"Errore durante il caricamento",labelFileProcessingRevertError:"Errore durante il ripristino",labelFileRemoveError:"Errore durante l'eliminazione",labelTapToCancel:"tocca per cancellare",labelTapToRetry:"tocca per riprovare",labelTapToUndo:"tocca per ripristinare",labelButtonRemoveItem:"Elimina",labelButtonAbortItemLoad:"Cancella",labelButtonRetryItemLoad:"Ritenta",labelButtonAbortItemProcessing:"Camcella",labelButtonUndoItemProcessing:"Indietro",labelButtonRetryItemProcessing:"Ritenta",labelButtonProcessItem:"Carica",labelMaxFileSizeExceeded:"Il peso del file \xE8 eccessivo",labelMaxFileSize:"Il peso massimo del file \xE8 {filesize}",labelMaxTotalFileSizeExceeded:"Dimensione totale massima superata",labelMaxTotalFileSize:"La dimensione massima totale del file \xE8 {filesize}",labelFileTypeNotAllowed:"File non supportato",fileValidateTypeLabelExpectedTypes:"Aspetta {allButLastType} o {lastType}",imageValidateSizeLabelFormatError:"Tipo di immagine non compatibile",imageValidateSizeLabelImageSizeTooSmall:"L'immagine \xE8 troppo piccola",imageValidateSizeLabelImageSizeTooBig:"L'immagine \xE8 troppo grande",imageValidateSizeLabelExpectedMinSize:"La dimensione minima \xE8 {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"La dimensione massima \xE8 {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"La risoluzione \xE8 troppo bassa",imageValidateSizeLabelImageResolutionTooHigh:"La risoluzione \xE8 troppo alta",imageValidateSizeLabelExpectedMinResolution:"La risoluzione minima \xE8 {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"La risoluzione massima \xE8 {maxResolution}"};var Vl={labelIdle:'\u1791\u17B6\u1789&\u178A\u17B6\u1780\u17CB\u17A0\u17D2\u179C\u17B6\u179B\u17CB\u17AF\u1780\u179F\u17B6\u179A\u179A\u1794\u179F\u17CB\u17A2\u17D2\u1793\u1780 \u17AC \u179F\u17D2\u179C\u17C2\u1784\u179A\u1780 ',labelInvalidField:"\u1785\u1793\u17D2\u179B\u17C4\u17C7\u1798\u17B6\u1793\u17AF\u1780\u179F\u17B6\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C",labelFileWaitingForSize:"\u1780\u17C6\u1796\u17BB\u1784\u179A\u1784\u17CB\u1785\u17B6\u17C6\u1791\u17C6\u17A0\u17C6",labelFileSizeNotAvailable:"\u1791\u17C6\u17A0\u17C6\u1798\u17B7\u1793\u17A2\u17B6\u1785\u1794\u17D2\u179A\u17BE\u1794\u17B6\u1793",labelFileLoading:"\u1780\u17C6\u1796\u17BB\u1784\u178A\u17C6\u178E\u17BE\u179A\u1780\u17B6\u179A",labelFileLoadError:"\u1798\u17B6\u1793\u1794\u1789\u17D2\u17A0\u17B6\u1780\u17C6\u17A1\u17BB\u1784\u1796\u17C1\u179B\u178A\u17C6\u178E\u17BE\u179A\u1780\u17B6\u179A",labelFileProcessing:"\u1780\u17C6\u1796\u17BB\u1784\u1795\u17D2\u1791\u17BB\u1780\u17A1\u17BE\u1784",labelFileProcessingComplete:"\u1780\u17B6\u179A\u1795\u17D2\u1791\u17BB\u1780\u17A1\u17BE\u1784\u1796\u17C1\u1789\u179B\u17C1\u1789",labelFileProcessingAborted:"\u1780\u17B6\u179A\u1794\u1784\u17D2\u17A0\u17C4\u17C7\u178F\u17D2\u179A\u17BC\u179C\u1794\u17B6\u1793\u1794\u17C4\u17C7\u1794\u1784\u17CB",labelFileProcessingError:"\u1798\u17B6\u1793\u1794\u1789\u17D2\u17A0\u17B6\u1780\u17C6\u17A1\u17BB\u1784\u1796\u17C1\u179B\u1780\u17C6\u1796\u17BB\u1784\u1795\u17D2\u1791\u17BB\u1780\u17A1\u17BE\u1784",labelFileProcessingRevertError:"\u1798\u17B6\u1793\u1794\u1789\u17D2\u17A0\u17B6\u1780\u17C6\u17A1\u17BB\u1784\u1796\u17C1\u179B\u178F\u17D2\u179A\u17A1\u1794\u17CB",labelFileRemoveError:"\u1798\u17B6\u1793\u1794\u1789\u17D2\u17A0\u17B6\u1780\u17C6\u17A1\u17BB\u1784\u1796\u17C1\u179B\u178A\u1780\u1785\u17C1\u1789",labelTapToCancel:"\u1785\u17BB\u1785\u178A\u17BE\u1798\u17D2\u1794\u17B8\u1794\u17C4\u17C7\u1794\u1784\u17CB",labelTapToRetry:"\u1785\u17BB\u1785\u178A\u17BE\u1798\u17D2\u1794\u17B8\u1796\u17D2\u1799\u17B6\u1799\u17B6\u1798\u1798\u17D2\u178F\u1784\u1791\u17C0\u178F",labelTapToUndo:"\u1785\u17BB\u1785\u178A\u17BE\u1798\u17D2\u1794\u17B8\u1798\u17B7\u1793\u1792\u17D2\u179C\u17BE\u179C\u17B7\u1789",labelButtonRemoveItem:"\u1799\u1780\u1785\u17C1\u1789",labelButtonAbortItemLoad:"\u1794\u17C4\u17C7\u1794\u1784\u17CB",labelButtonRetryItemLoad:"\u1796\u17D2\u1799\u17B6\u1799\u17B6\u1798\u1798\u17D2\u178F\u1784\u1791\u17C0\u178F",labelButtonAbortItemProcessing:"\u1794\u17C4\u17C7\u1794\u1784\u17CB",labelButtonUndoItemProcessing:"\u1798\u17B7\u1793\u1792\u17D2\u179C\u17BE\u179C\u17B7\u1789",labelButtonRetryItemProcessing:"\u1796\u17D2\u1799\u17B6\u1799\u17B6\u1798\u1798\u17D2\u178F\u1784\u1791\u17C0\u178F",labelButtonProcessItem:"\u1795\u17D2\u1791\u17BB\u1780\u17A1\u17BE\u1784",labelMaxFileSizeExceeded:"\u17AF\u1780\u179F\u17B6\u179A\u1792\u17C6\u1796\u17C1\u1780",labelMaxFileSize:"\u1791\u17C6\u17A0\u17C6\u17AF\u1780\u179F\u17B6\u179A\u17A2\u178F\u17B7\u1794\u179A\u1798\u17B6\u1782\u17BA {filesize}",labelMaxTotalFileSizeExceeded:"\u179B\u17BE\u179F\u1791\u17C6\u17A0\u17C6\u179F\u179A\u17BB\u1794\u17A2\u178F\u17B7\u1794\u179A\u1798\u17B6",labelMaxTotalFileSize:"\u1791\u17C6\u17A0\u17C6\u17AF\u1780\u179F\u17B6\u179A\u179F\u179A\u17BB\u1794\u17A2\u178F\u17B7\u1794\u179A\u1798\u17B6\u1782\u17BA {filesize}",labelFileTypeNotAllowed:"\u1794\u17D2\u179A\u1797\u17C1\u1791\u17AF\u1780\u179F\u17B6\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C",fileValidateTypeLabelExpectedTypes:"\u179A\u17C6\u1796\u17B9\u1784\u1790\u17B6 {allButLastType} \u17AC {lastType}",imageValidateSizeLabelFormatError:"\u1794\u17D2\u179A\u1797\u17C1\u1791\u179A\u17BC\u1794\u1797\u17B6\u1796\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C",imageValidateSizeLabelImageSizeTooSmall:"\u179A\u17BC\u1794\u1797\u17B6\u1796\u178F\u17BC\u1785\u1796\u17C1\u1780",imageValidateSizeLabelImageSizeTooBig:"\u179A\u17BC\u1794\u1797\u17B6\u1796\u1792\u17C6\u1796\u17C1\u1780",imageValidateSizeLabelExpectedMinSize:"\u1791\u17C6\u17A0\u17C6\u17A2\u1794\u17D2\u1794\u1794\u179A\u1798\u17B6\u1782\u17BA {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"\u1791\u17C6\u17A0\u17C6\u17A2\u178F\u17B7\u1794\u179A\u1798\u17B6\u1782\u17BA {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"\u1782\u17BB\u178E\u1797\u17B6\u1796\u1794\u1784\u17D2\u17A0\u17B6\u1789\u1791\u17B6\u1794\u1796\u17C1\u1780",imageValidateSizeLabelImageResolutionTooHigh:"\u1782\u17BB\u178E\u1797\u17B6\u1796\u1794\u1784\u17D2\u17A0\u17B6\u1789\u1781\u17D2\u1796\u179F\u17CB\u1796\u17C1\u1780",imageValidateSizeLabelExpectedMinResolution:"\u1782\u17BB\u178E\u1797\u17B6\u1796\u1794\u1784\u17D2\u17A0\u17B6\u1789\u17A2\u1794\u17D2\u1794\u1794\u179A\u1798\u17B6\u1782\u17BA {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"\u1782\u17BB\u178E\u1797\u17B6\u1796\u1794\u1784\u17D2\u17A0\u17B6\u1789\u17A2\u178F\u17B7\u1794\u179A\u1798\u17B6\u1782\u17BA {maxResolution}"};var Gl={labelIdle:'Drag & Drop je bestanden of Bladeren ',labelInvalidField:"Veld bevat ongeldige bestanden",labelFileWaitingForSize:"Wachten op grootte",labelFileSizeNotAvailable:"Grootte niet beschikbaar",labelFileLoading:"Laden",labelFileLoadError:"Fout tijdens laden",labelFileProcessing:"Uploaden",labelFileProcessingComplete:"Upload afgerond",labelFileProcessingAborted:"Upload geannuleerd",labelFileProcessingError:"Fout tijdens upload",labelFileProcessingRevertError:"Fout bij herstellen",labelFileRemoveError:"Fout bij verwijderen",labelTapToCancel:"tik om te annuleren",labelTapToRetry:"tik om opnieuw te proberen",labelTapToUndo:"tik om ongedaan te maken",labelButtonRemoveItem:"Verwijderen",labelButtonAbortItemLoad:"Afbreken",labelButtonRetryItemLoad:"Opnieuw proberen",labelButtonAbortItemProcessing:"Annuleren",labelButtonUndoItemProcessing:"Ongedaan maken",labelButtonRetryItemProcessing:"Opnieuw proberen",labelButtonProcessItem:"Upload",labelMaxFileSizeExceeded:"Bestand is te groot",labelMaxFileSize:"Maximale bestandsgrootte is {filesize}",labelMaxTotalFileSizeExceeded:"Maximale totale grootte overschreden",labelMaxTotalFileSize:"Maximale totale bestandsgrootte is {filesize}",labelFileTypeNotAllowed:"Ongeldig bestandstype",fileValidateTypeLabelExpectedTypes:"Verwacht {allButLastType} of {lastType}",imageValidateSizeLabelFormatError:"Afbeeldingstype niet ondersteund",imageValidateSizeLabelImageSizeTooSmall:"Afbeelding is te klein",imageValidateSizeLabelImageSizeTooBig:"Afbeelding is te groot",imageValidateSizeLabelExpectedMinSize:"Minimale afmeting is {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"Maximale afmeting is {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"Resolutie is te laag",imageValidateSizeLabelImageResolutionTooHigh:"Resolution is too high",imageValidateSizeLabelExpectedMinResolution:"Minimale resolutie is {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Maximale resolutie is {maxResolution}"};var Ul={labelIdle:'Dra og slipp filene dine, eller Bla gjennom... ',labelInvalidField:"Feltet inneholder ugyldige filer",labelFileWaitingForSize:"Venter p\xE5 st\xF8rrelse",labelFileSizeNotAvailable:"St\xF8rrelse ikke tilgjengelig",labelFileLoading:"Laster",labelFileLoadError:"Feil under lasting",labelFileProcessing:"Laster opp",labelFileProcessingComplete:"Opplasting ferdig",labelFileProcessingAborted:"Opplasting avbrutt",labelFileProcessingError:"Feil under opplasting",labelFileProcessingRevertError:"Feil under reversering",labelFileRemoveError:"Feil under flytting",labelTapToCancel:"klikk for \xE5 avbryte",labelTapToRetry:"klikk for \xE5 pr\xF8ve p\xE5 nytt",labelTapToUndo:"klikk for \xE5 angre",labelButtonRemoveItem:"Fjern",labelButtonAbortItemLoad:"Avbryt",labelButtonRetryItemLoad:"Pr\xF8v p\xE5 nytt",labelButtonAbortItemProcessing:"Avbryt",labelButtonUndoItemProcessing:"Angre",labelButtonRetryItemProcessing:"Pr\xF8v p\xE5 nytt",labelButtonProcessItem:"Last opp",labelMaxFileSizeExceeded:"Filen er for stor",labelMaxFileSize:"Maksimal filst\xF8rrelse er {filesize}",labelMaxTotalFileSizeExceeded:"Maksimal total st\xF8rrelse oversteget",labelMaxTotalFileSize:"Maksimal total st\xF8rrelse er {filesize}",labelFileTypeNotAllowed:"Ugyldig filtype",fileValidateTypeLabelExpectedTypes:"Forventer {allButLastType} eller {lastType}",imageValidateSizeLabelFormatError:"Bildeformat ikke st\xF8ttet",imageValidateSizeLabelImageSizeTooSmall:"Bildet er for lite",imageValidateSizeLabelImageSizeTooBig:"Bildet er for stort",imageValidateSizeLabelExpectedMinSize:"Minimumsst\xF8rrelse er {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"Maksimumsst\xF8rrelse er {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"Oppl\xF8sningen er for lav",imageValidateSizeLabelImageResolutionTooHigh:"Oppl\xF8sningen er for h\xF8y",imageValidateSizeLabelExpectedMinResolution:"Minimum oppl\xF8sning er {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Maksimal oppl\xF8sning er {maxResolution}"};var Wl={labelIdle:'Przeci\u0105gnij i upu\u015B\u0107 lub wybierz pliki',labelInvalidField:"Nieprawid\u0142owe pliki",labelFileWaitingForSize:"Pobieranie rozmiaru",labelFileSizeNotAvailable:"Nieznany rozmiar",labelFileLoading:"Wczytywanie",labelFileLoadError:"B\u0142\u0105d wczytywania",labelFileProcessing:"Przesy\u0142anie",labelFileProcessingComplete:"Przes\u0142ano",labelFileProcessingAborted:"Przerwano",labelFileProcessingError:"Przesy\u0142anie nie powiod\u0142o si\u0119",labelFileProcessingRevertError:"Co\u015B posz\u0142o nie tak",labelFileRemoveError:"Nieudane usuni\u0119cie",labelTapToCancel:"Anuluj",labelTapToRetry:"Pon\xF3w",labelTapToUndo:"Cofnij",labelButtonRemoveItem:"Usu\u0144",labelButtonAbortItemLoad:"Przerwij",labelButtonRetryItemLoad:"Pon\xF3w",labelButtonAbortItemProcessing:"Anuluj",labelButtonUndoItemProcessing:"Cofnij",labelButtonRetryItemProcessing:"Pon\xF3w",labelButtonProcessItem:"Prze\u015Blij",labelMaxFileSizeExceeded:"Plik jest zbyt du\u017Cy",labelMaxFileSize:"Dopuszczalna wielko\u015B\u0107 pliku to {filesize}",labelMaxTotalFileSizeExceeded:"Przekroczono \u0142\u0105czny rozmiar plik\xF3w",labelMaxTotalFileSize:"\u0141\u0105czny rozmiar plik\xF3w nie mo\u017Ce przekroczy\u0107 {filesize}",labelFileTypeNotAllowed:"Niedozwolony rodzaj pliku",fileValidateTypeLabelExpectedTypes:"Oczekiwano {allButLastType} lub {lastType}",imageValidateSizeLabelFormatError:"Nieobs\u0142ugiwany format obrazu",imageValidateSizeLabelImageSizeTooSmall:"Obraz jest zbyt ma\u0142y",imageValidateSizeLabelImageSizeTooBig:"Obraz jest zbyt du\u017Cy",imageValidateSizeLabelExpectedMinSize:"Minimalne wymiary obrazu to {minWidth}\xD7{minHeight}",imageValidateSizeLabelExpectedMaxSize:"Maksymalna wymiary obrazu to {maxWidth}\xD7{maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"Rozdzielczo\u015B\u0107 jest zbyt niska",imageValidateSizeLabelImageResolutionTooHigh:"Rozdzielczo\u015B\u0107 jest zbyt wysoka",imageValidateSizeLabelExpectedMinResolution:"Minimalna rozdzielczo\u015B\u0107 to {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Maksymalna rozdzielczo\u015B\u0107 to {maxResolution}"};var Ri={labelIdle:'Arraste e solte os arquivos ou Clique aqui ',labelInvalidField:"Arquivos inv\xE1lidos",labelFileWaitingForSize:"Calculando o tamanho do arquivo",labelFileSizeNotAvailable:"Tamanho do arquivo indispon\xEDvel",labelFileLoading:"Carregando",labelFileLoadError:"Erro durante o carregamento",labelFileProcessing:"Enviando",labelFileProcessingComplete:"Envio finalizado",labelFileProcessingAborted:"Envio cancelado",labelFileProcessingError:"Erro durante o envio",labelFileProcessingRevertError:"Erro ao reverter o envio",labelFileRemoveError:"Erro ao remover o arquivo",labelTapToCancel:"clique para cancelar",labelTapToRetry:"clique para reenviar",labelTapToUndo:"clique para desfazer",labelButtonRemoveItem:"Remover",labelButtonAbortItemLoad:"Abortar",labelButtonRetryItemLoad:"Reenviar",labelButtonAbortItemProcessing:"Cancelar",labelButtonUndoItemProcessing:"Desfazer",labelButtonRetryItemProcessing:"Reenviar",labelButtonProcessItem:"Enviar",labelMaxFileSizeExceeded:"Arquivo \xE9 muito grande",labelMaxFileSize:"O tamanho m\xE1ximo permitido: {filesize}",labelMaxTotalFileSizeExceeded:"Tamanho total dos arquivos excedido",labelMaxTotalFileSize:"Tamanho total permitido: {filesize}",labelFileTypeNotAllowed:"Tipo de arquivo inv\xE1lido",fileValidateTypeLabelExpectedTypes:"Tipos de arquivo suportados s\xE3o {allButLastType} ou {lastType}",imageValidateSizeLabelFormatError:"Tipo de imagem inv\xE1lida",imageValidateSizeLabelImageSizeTooSmall:"Imagem muito pequena",imageValidateSizeLabelImageSizeTooBig:"Imagem muito grande",imageValidateSizeLabelExpectedMinSize:"Tamanho m\xEDnimo permitida: {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"Tamanho m\xE1ximo permitido: {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"Resolu\xE7\xE3o muito baixa",imageValidateSizeLabelImageResolutionTooHigh:"Resolu\xE7\xE3o muito alta",imageValidateSizeLabelExpectedMinResolution:"Resolu\xE7\xE3o m\xEDnima permitida: {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Resolu\xE7\xE3o m\xE1xima permitida: {maxResolution}"};var Hl={labelIdle:'Trage \u0219i plaseaz\u0103 fi\u0219iere sau Caut\u0103-le ',labelInvalidField:"C\xE2mpul con\u021Bine fi\u0219iere care nu sunt valide",labelFileWaitingForSize:"\xCEn a\u0219teptarea dimensiunii",labelFileSizeNotAvailable:"Dimensiunea nu este diponibil\u0103",labelFileLoading:"Se \xEEncarc\u0103",labelFileLoadError:"Eroare la \xEEnc\u0103rcare",labelFileProcessing:"Se \xEEncarc\u0103",labelFileProcessingComplete:"\xCEnc\u0103rcare finalizat\u0103",labelFileProcessingAborted:"\xCEnc\u0103rcare anulat\u0103",labelFileProcessingError:"Eroare la \xEEnc\u0103rcare",labelFileProcessingRevertError:"Eroare la anulare",labelFileRemoveError:"Eroare la \u015Ftergere",labelTapToCancel:"apas\u0103 pentru a anula",labelTapToRetry:"apas\u0103 pentru a re\xEEncerca",labelTapToUndo:"apas\u0103 pentru a anula",labelButtonRemoveItem:"\u015Eterge",labelButtonAbortItemLoad:"Anuleaz\u0103",labelButtonRetryItemLoad:"Re\xEEncearc\u0103",labelButtonAbortItemProcessing:"Anuleaz\u0103",labelButtonUndoItemProcessing:"Anuleaz\u0103",labelButtonRetryItemProcessing:"Re\xEEncearc\u0103",labelButtonProcessItem:"\xCEncarc\u0103",labelMaxFileSizeExceeded:"Fi\u0219ierul este prea mare",labelMaxFileSize:"Dimensiunea maxim\u0103 a unui fi\u0219ier este de {filesize}",labelMaxTotalFileSizeExceeded:"Dimensiunea total\u0103 maxim\u0103 a fost dep\u0103\u0219it\u0103",labelMaxTotalFileSize:"Dimensiunea total\u0103 maxim\u0103 a fi\u0219ierelor este de {filesize}",labelFileTypeNotAllowed:"Tipul fi\u0219ierului nu este valid",fileValidateTypeLabelExpectedTypes:"Se a\u0219teapt\u0103 {allButLastType} sau {lastType}",imageValidateSizeLabelFormatError:"Formatul imaginii nu este acceptat",imageValidateSizeLabelImageSizeTooSmall:"Imaginea este prea mic\u0103",imageValidateSizeLabelImageSizeTooBig:"Imaginea este prea mare",imageValidateSizeLabelExpectedMinSize:"M\u0103rimea minim\u0103 este de {maxWidth} x {maxHeight}",imageValidateSizeLabelExpectedMaxSize:"M\u0103rimea maxim\u0103 este de {maxWidth} x {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"Rezolu\u021Bia este prea mic\u0103",imageValidateSizeLabelImageResolutionTooHigh:"Rezolu\u021Bia este prea mare",imageValidateSizeLabelExpectedMinResolution:"Rezolu\u021Bia minim\u0103 este de {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Rezolu\u021Bia maxim\u0103 este de {maxResolution}"};var jl={labelIdle:'\u041F\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u0435 \u0444\u0430\u0439\u043B\u044B \u0438\u043B\u0438 \u0432\u044B\u0431\u0435\u0440\u0438\u0442\u0435 ',labelInvalidField:"\u041F\u043E\u043B\u0435 \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u0442 \u043D\u0435\u0434\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u044B\u0435 \u0444\u0430\u0439\u043B\u044B",labelFileWaitingForSize:"\u0423\u043A\u0430\u0436\u0438\u0442\u0435 \u0440\u0430\u0437\u043C\u0435\u0440",labelFileSizeNotAvailable:"\u0420\u0430\u0437\u043C\u0435\u0440 \u043D\u0435 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044F",labelFileLoading:"\u041E\u0436\u0438\u0434\u0430\u043D\u0438\u0435",labelFileLoadError:"\u041E\u0448\u0438\u0431\u043A\u0430 \u043F\u0440\u0438 \u043E\u0436\u0438\u0434\u0430\u043D\u0438\u0438",labelFileProcessing:"\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430",labelFileProcessingComplete:"\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0430",labelFileProcessingAborted:"\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430 \u043E\u0442\u043C\u0435\u043D\u0435\u043D\u0430",labelFileProcessingError:"\u041E\u0448\u0438\u0431\u043A\u0430 \u043F\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043A\u0435",labelFileProcessingRevertError:"\u041E\u0448\u0438\u0431\u043A\u0430 \u043F\u0440\u0438 \u0432\u043E\u0437\u0432\u0440\u0430\u0442\u0435",labelFileRemoveError:"\u041E\u0448\u0438\u0431\u043A\u0430 \u043F\u0440\u0438 \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0438",labelTapToCancel:"\u043D\u0430\u0436\u043C\u0438\u0442\u0435 \u0434\u043B\u044F \u043E\u0442\u043C\u0435\u043D\u044B",labelTapToRetry:"\u043D\u0430\u0436\u043C\u0438\u0442\u0435, \u0447\u0442\u043E\u0431\u044B \u043F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u044C \u043F\u043E\u043F\u044B\u0442\u043A\u0443",labelTapToUndo:"\u043D\u0430\u0436\u043C\u0438\u0442\u0435 \u0434\u043B\u044F \u043E\u0442\u043C\u0435\u043D\u044B \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0433\u043E \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F",labelButtonRemoveItem:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C",labelButtonAbortItemLoad:"\u041F\u0440\u0435\u043A\u0440\u0430\u0449\u0435\u043D\u043E",labelButtonRetryItemLoad:"\u041F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u0435 \u043F\u043E\u043F\u044B\u0442\u043A\u0443",labelButtonAbortItemProcessing:"\u041E\u0442\u043C\u0435\u043D\u0430",labelButtonUndoItemProcessing:"\u041E\u0442\u043C\u0435\u043D\u0430 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0433\u043E \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F",labelButtonRetryItemProcessing:"\u041F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u0435 \u043F\u043E\u043F\u044B\u0442\u043A\u0443",labelButtonProcessItem:"\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430",labelMaxFileSizeExceeded:"\u0424\u0430\u0439\u043B \u0441\u043B\u0438\u0448\u043A\u043E\u043C \u0431\u043E\u043B\u044C\u0448\u043E\u0439",labelMaxFileSize:"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0440\u0430\u0437\u043C\u0435\u0440 \u0444\u0430\u0439\u043B\u0430: {filesize}",labelMaxTotalFileSizeExceeded:"\u041F\u0440\u0435\u0432\u044B\u0448\u0435\u043D \u043C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0440\u0430\u0437\u043C\u0435\u0440",labelMaxTotalFileSize:"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0440\u0430\u0437\u043C\u0435\u0440 \u0444\u0430\u0439\u043B\u0430: {filesize}",labelFileTypeNotAllowed:"\u0424\u0430\u0439\u043B \u043D\u0435\u0432\u0435\u0440\u043D\u043E\u0433\u043E \u0442\u0438\u043F\u0430",fileValidateTypeLabelExpectedTypes:"\u041E\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044F {allButLastType} \u0438\u043B\u0438 {lastType}",imageValidateSizeLabelFormatError:"\u0422\u0438\u043F \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F \u043D\u0435 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044F",imageValidateSizeLabelImageSizeTooSmall:"\u0418\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 \u0441\u043B\u0438\u0448\u043A\u043E\u043C \u043C\u0430\u043B\u0435\u043D\u044C\u043A\u043E\u0435",imageValidateSizeLabelImageSizeTooBig:"\u0418\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 \u0441\u043B\u0438\u0448\u043A\u043E\u043C \u0431\u043E\u043B\u044C\u0448\u043E\u0435",imageValidateSizeLabelExpectedMinSize:"\u041C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0440\u0430\u0437\u043C\u0435\u0440: {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0440\u0430\u0437\u043C\u0435\u0440: {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"\u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u0438\u0435 \u0441\u043B\u0438\u0448\u043A\u043E\u043C \u043D\u0438\u0437\u043A\u043E\u0435",imageValidateSizeLabelImageResolutionTooHigh:"\u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u0438\u0435 \u0441\u043B\u0438\u0448\u043A\u043E\u043C \u0432\u044B\u0441\u043E\u043A\u043E\u0435",imageValidateSizeLabelExpectedMinResolution:"\u041C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u0438\u0435: {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u0438\u0435: {maxResolution}"};var Yl={labelIdle:'Drag och sl\xE4pp dina filer eller Bl\xE4ddra ',labelInvalidField:"F\xE4ltet inneh\xE5ller felaktiga filer",labelFileWaitingForSize:"V\xE4ntar p\xE5 storlek",labelFileSizeNotAvailable:"Storleken finns inte tillg\xE4nglig",labelFileLoading:"Laddar",labelFileLoadError:"Fel under laddning",labelFileProcessing:"Laddar upp",labelFileProcessingComplete:"Uppladdning klar",labelFileProcessingAborted:"Uppladdning avbruten",labelFileProcessingError:"Fel under uppladdning",labelFileProcessingRevertError:"Fel under \xE5terst\xE4llning",labelFileRemoveError:"Fel under borttagning",labelTapToCancel:"tryck f\xF6r att avbryta",labelTapToRetry:"tryck f\xF6r att f\xF6rs\xF6ka igen",labelTapToUndo:"tryck f\xF6r att \xE5ngra",labelButtonRemoveItem:"Tabort",labelButtonAbortItemLoad:"Avbryt",labelButtonRetryItemLoad:"F\xF6rs\xF6k igen",labelButtonAbortItemProcessing:"Avbryt",labelButtonUndoItemProcessing:"\xC5ngra",labelButtonRetryItemProcessing:"F\xF6rs\xF6k igen",labelButtonProcessItem:"Ladda upp",labelMaxFileSizeExceeded:"Filen \xE4r f\xF6r stor",labelMaxFileSize:"St\xF6rsta till\xE5tna filstorlek \xE4r {filesize}",labelMaxTotalFileSizeExceeded:"Maximal uppladdningsstorlek uppn\xE5d",labelMaxTotalFileSize:"Maximal uppladdningsstorlek \xE4r {filesize}",labelFileTypeNotAllowed:"Felaktig filtyp",fileValidateTypeLabelExpectedTypes:"Godk\xE4nda filtyper {allButLastType} eller {lastType}",imageValidateSizeLabelFormatError:"Bildtypen saknar st\xF6d",imageValidateSizeLabelImageSizeTooSmall:"Bilden \xE4r f\xF6r liten",imageValidateSizeLabelImageSizeTooBig:"Bilden \xE4r f\xF6r stor",imageValidateSizeLabelExpectedMinSize:"Minimal storlek \xE4r {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"Maximal storlek \xE4r {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"Uppl\xF6sningen \xE4r f\xF6r l\xE5g",imageValidateSizeLabelImageResolutionTooHigh:"Uppl\xF6sningen \xE4r f\xF6r h\xF6g",imageValidateSizeLabelExpectedMinResolution:"Minsta till\xE5tna uppl\xF6sning \xE4r {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"H\xF6gsta till\xE5tna uppl\xF6sning \xE4r {maxResolution}"};var ql={labelIdle:'Dosyan\u0131z\u0131 S\xFCr\xFCkleyin & B\u0131rak\u0131n ya da Se\xE7in ',labelInvalidField:"Alan ge\xE7ersiz dosyalar i\xE7eriyor",labelFileWaitingForSize:"Boyut hesaplan\u0131yor",labelFileSizeNotAvailable:"Boyut mevcut de\u011Fil",labelFileLoading:"Y\xFCkleniyor",labelFileLoadError:"Y\xFCkleme s\u0131ras\u0131nda hata olu\u015Ftu",labelFileProcessing:"Y\xFCkleniyor",labelFileProcessingComplete:"Y\xFCkleme tamamland\u0131",labelFileProcessingAborted:"Y\xFCkleme iptal edildi",labelFileProcessingError:"Y\xFCklerken hata olu\u015Ftu",labelFileProcessingRevertError:"Geri \xE7ekerken hata olu\u015Ftu",labelFileRemoveError:"Kald\u0131r\u0131rken hata olu\u015Ftu",labelTapToCancel:"\u0130ptal etmek i\xE7in t\u0131klay\u0131n",labelTapToRetry:"Tekrar denemek i\xE7in t\u0131klay\u0131n",labelTapToUndo:"Geri almak i\xE7in t\u0131klay\u0131n",labelButtonRemoveItem:"Kald\u0131r",labelButtonAbortItemLoad:"\u0130ptal Et",labelButtonRetryItemLoad:"Tekrar dene",labelButtonAbortItemProcessing:"\u0130ptal et",labelButtonUndoItemProcessing:"Geri Al",labelButtonRetryItemProcessing:"Tekrar dene",labelButtonProcessItem:"Y\xFCkle",labelMaxFileSizeExceeded:"Dosya \xE7ok b\xFCy\xFCk",labelMaxFileSize:"En fazla dosya boyutu: {filesize}",labelMaxTotalFileSizeExceeded:"Maximum boyut a\u015F\u0131ld\u0131",labelMaxTotalFileSize:"Maximum dosya boyutu :{filesize}",labelFileTypeNotAllowed:"Ge\xE7ersiz dosya tipi",fileValidateTypeLabelExpectedTypes:"\u015Eu {allButLastType} ya da \u015Fu dosya olmas\u0131 gerekir: {lastType}",imageValidateSizeLabelFormatError:"Resim tipi desteklenmiyor",imageValidateSizeLabelImageSizeTooSmall:"Resim \xE7ok k\xFC\xE7\xFCk",imageValidateSizeLabelImageSizeTooBig:"Resim \xE7ok b\xFCy\xFCk",imageValidateSizeLabelExpectedMinSize:"Minimum boyut {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"Maximum boyut {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"\xC7\xF6z\xFCn\xFCrl\xFCk \xE7ok d\xFC\u015F\xFCk",imageValidateSizeLabelImageResolutionTooHigh:"\xC7\xF6z\xFCn\xFCrl\xFCk \xE7ok y\xFCksek",imageValidateSizeLabelExpectedMinResolution:"Minimum \xE7\xF6z\xFCn\xFCrl\xFCk {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"Maximum \xE7\xF6z\xFCn\xFCrl\xFCk {maxResolution}"};var $l={labelIdle:'\u041F\u0435\u0440\u0435\u0442\u044F\u0433\u043D\u0456\u0442\u044C \u0444\u0430\u0439\u043B\u0438 \u0430\u0431\u043E \u0432\u0438\u0431\u0435\u0440\u0456\u0442\u044C ',labelInvalidField:"\u041F\u043E\u043B\u0435 \u043C\u0456\u0441\u0442\u0438\u0442\u044C \u043D\u0435\u0434\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u0456 \u0444\u0430\u0439\u043B\u0438",labelFileWaitingForSize:"\u0412\u043A\u0430\u0436\u0456\u0442\u044C \u0440\u043E\u0437\u043C\u0456\u0440",labelFileSizeNotAvailable:"\u0420\u043E\u0437\u043C\u0456\u0440 \u043D\u0435 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0438\u0439",labelFileLoading:"\u041E\u0447\u0456\u043A\u0443\u0432\u0430\u043D\u043D\u044F",labelFileLoadError:"\u041F\u043E\u043C\u0438\u043B\u043A\u0430 \u043F\u0440\u0438 \u043E\u0447\u0456\u043A\u0443\u0432\u0430\u043D\u043D\u0456",labelFileProcessing:"\u0417\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0435\u043D\u043D\u044F",labelFileProcessingComplete:"\u0417\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0435\u043D\u043D\u044F \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u043E",labelFileProcessingAborted:"\u0417\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0435\u043D\u043D\u044F \u0441\u043A\u0430\u0441\u043E\u0432\u0430\u043D\u043E",labelFileProcessingError:"\u041F\u043E\u043C\u0438\u043B\u043A\u0430 \u043F\u0440\u0438 \u0437\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0435\u043D\u043D\u0456",labelFileProcessingRevertError:"\u041F\u043E\u043C\u0438\u043B\u043A\u0430 \u043F\u0440\u0438 \u0432\u0456\u0434\u043D\u043E\u0432\u043B\u0435\u043D\u043D\u0456",labelFileRemoveError:"\u041F\u043E\u043C\u0438\u043B\u043A\u0430 \u043F\u0440\u0438 \u0432\u0438\u0434\u0430\u043B\u0435\u043D\u043D\u0456",labelTapToCancel:"\u0412\u0456\u0434\u043C\u0456\u043D\u0438\u0442\u0438",labelTapToRetry:"\u041D\u0430\u0442\u0438\u0441\u043D\u0456\u0442\u044C, \u0449\u043E\u0431 \u043F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u0438 \u0441\u043F\u0440\u043E\u0431\u0443",labelTapToUndo:"\u041D\u0430\u0442\u0438\u0441\u043D\u0456\u0442\u044C, \u0449\u043E\u0431 \u0432\u0456\u0434\u043C\u0456\u043D\u0438\u0442\u0438 \u043E\u0441\u0442\u0430\u043D\u043D\u044E \u0434\u0456\u044E",labelButtonRemoveItem:"\u0412\u0438\u0434\u0430\u043B\u0438\u0442\u0438",labelButtonAbortItemLoad:"\u0412\u0456\u0434\u043C\u0456\u043D\u0438\u0442\u0438",labelButtonRetryItemLoad:"\u041F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u0438 \u0441\u043F\u0440\u043E\u0431\u0443",labelButtonAbortItemProcessing:"\u0412\u0456\u0434\u043C\u0456\u043D\u0438\u0442\u0438",labelButtonUndoItemProcessing:"\u0412\u0456\u0434\u043C\u0456\u043D\u0438\u0442\u0438 \u043E\u0441\u0442\u0430\u043D\u043D\u044E \u0434\u0456\u044E",labelButtonRetryItemProcessing:"\u041F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u0438 \u0441\u043F\u0440\u043E\u0431\u0443",labelButtonProcessItem:"\u0417\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0435\u043D\u043D\u044F",labelMaxFileSizeExceeded:"\u0424\u0430\u0439\u043B \u0437\u0430\u043D\u0430\u0434\u0442\u043E \u0432\u0435\u043B\u0438\u043A\u0438\u0439",labelMaxFileSize:"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0438\u0439 \u0440\u043E\u0437\u043C\u0456\u0440 \u0444\u0430\u0439\u043B\u0443: {filesize}",labelMaxTotalFileSizeExceeded:"\u041F\u0435\u0440\u0435\u0432\u0438\u0449\u0435\u043D\u043E \u043C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0438\u0439 \u0437\u0430\u0433\u0430\u043B\u044C\u043D\u0438\u0439 \u0440\u043E\u0437\u043C\u0456\u0440",labelMaxTotalFileSize:"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0438\u0439 \u0437\u0430\u0433\u0430\u043B\u044C\u043D\u0438\u0439 \u0440\u043E\u0437\u043C\u0456\u0440: {filesize}",labelFileTypeNotAllowed:"\u0424\u043E\u0440\u043C\u0430\u0442 \u0444\u0430\u0439\u043B\u0443 \u043D\u0435 \u043F\u0456\u0434\u0442\u0440\u0438\u043C\u0443\u0454\u0442\u044C\u0441\u044F",fileValidateTypeLabelExpectedTypes:"\u041E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F {allButLastType} \u0430\u0431\u043E {lastType}",imageValidateSizeLabelFormatError:"\u0424\u043E\u0440\u043C\u0430\u0442 \u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u043D\u044F \u043D\u0435 \u043F\u0456\u0434\u0442\u0440\u0438\u043C\u0443\u0454\u0442\u044C\u0441\u044F",imageValidateSizeLabelImageSizeTooSmall:"\u0417\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u043D\u044F \u0437\u0430\u043D\u0430\u0434\u0442\u043E \u043C\u0430\u043B\u0435\u043D\u044C\u043A\u0435",imageValidateSizeLabelImageSizeTooBig:"\u0417\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u043D\u044F \u0437\u0430\u043D\u0430\u0434\u0442\u043E \u0432\u0435\u043B\u0438\u043A\u0435",imageValidateSizeLabelExpectedMinSize:"\u041C\u0456\u043D\u0456\u043C\u0430\u043B\u044C\u043D\u0438\u0439 \u0440\u043E\u0437\u043C\u0456\u0440: {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0438\u0439 \u0440\u043E\u0437\u043C\u0456\u0440: {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"\u0420\u043E\u0437\u043C\u0456\u0440\u0438 \u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u043D\u044F \u0437\u0430\u043D\u0430\u0434\u0442\u043E \u043C\u0430\u043B\u0435\u043D\u044C\u043A\u0456",imageValidateSizeLabelImageResolutionTooHigh:"\u0420\u043E\u0437\u043C\u0456\u0440\u0438 \u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u043D\u044F \u0437\u0430\u043D\u0430\u0434\u0442\u043E \u0432\u0435\u043B\u0438\u043A\u0456",imageValidateSizeLabelExpectedMinResolution:"\u041C\u0456\u043D\u0456\u043C\u0430\u043B\u044C\u043D\u0456 \u0440\u043E\u0437\u043C\u0456\u0440\u0438: {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0456 \u0440\u043E\u0437\u043C\u0456\u0440\u0438: {maxResolution}"};var Xl={labelIdle:'K\xE9o th\u1EA3 t\u1EC7p c\u1EE7a b\u1EA1n ho\u1EB7c T\xECm ki\u1EBFm ',labelInvalidField:"Tr\u01B0\u1EDDng ch\u1EE9a c\xE1c t\u1EC7p kh\xF4ng h\u1EE3p l\u1EC7",labelFileWaitingForSize:"\u0110ang ch\u1EDD k\xEDch th\u01B0\u1EDBc",labelFileSizeNotAvailable:"K\xEDch th\u01B0\u1EDBc kh\xF4ng c\xF3 s\u1EB5n",labelFileLoading:"\u0110ang t\u1EA3i",labelFileLoadError:"L\u1ED7i khi t\u1EA3i",labelFileProcessing:"\u0110ang t\u1EA3i l\xEAn",labelFileProcessingComplete:"T\u1EA3i l\xEAn th\xE0nh c\xF4ng",labelFileProcessingAborted:"\u0110\xE3 hu\u1EF7 t\u1EA3i l\xEAn",labelFileProcessingError:"L\u1ED7i khi t\u1EA3i l\xEAn",labelFileProcessingRevertError:"L\u1ED7i khi ho\xE0n nguy\xEAn",labelFileRemoveError:"L\u1ED7i khi x\xF3a",labelTapToCancel:"nh\u1EA5n \u0111\u1EC3 h\u1EE7y",labelTapToRetry:"nh\u1EA5n \u0111\u1EC3 th\u1EED l\u1EA1i",labelTapToUndo:"nh\u1EA5n \u0111\u1EC3 ho\xE0n t\xE1c",labelButtonRemoveItem:"Xo\xE1",labelButtonAbortItemLoad:"Hu\u1EF7 b\u1ECF",labelButtonRetryItemLoad:"Th\u1EED l\u1EA1i",labelButtonAbortItemProcessing:"H\u1EE7y b\u1ECF",labelButtonUndoItemProcessing:"Ho\xE0n t\xE1c",labelButtonRetryItemProcessing:"Th\u1EED l\u1EA1i",labelButtonProcessItem:"T\u1EA3i l\xEAn",labelMaxFileSizeExceeded:"T\u1EADp tin qu\xE1 l\u1EDBn",labelMaxFileSize:"K\xEDch th\u01B0\u1EDBc t\u1EC7p t\u1ED1i \u0111a l\xE0 {filesize}",labelMaxTotalFileSizeExceeded:"\u0110\xE3 v\u01B0\u1EE3t qu\xE1 t\u1ED5ng k\xEDch th\u01B0\u1EDBc t\u1ED1i \u0111a",labelMaxTotalFileSize:"T\u1ED5ng k\xEDch th\u01B0\u1EDBc t\u1EC7p t\u1ED1i \u0111a l\xE0 {filesize}",labelFileTypeNotAllowed:"T\u1EC7p thu\u1ED9c lo\u1EA1i kh\xF4ng h\u1EE3p l\u1EC7",fileValidateTypeLabelExpectedTypes:"Ki\u1EC3u t\u1EC7p h\u1EE3p l\u1EC7 l\xE0 {allButLastType} ho\u1EB7c {lastType}",imageValidateSizeLabelFormatError:"Lo\u1EA1i h\xECnh \u1EA3nh kh\xF4ng \u0111\u01B0\u1EE3c h\u1ED7 tr\u1EE3",imageValidateSizeLabelImageSizeTooSmall:"H\xECnh \u1EA3nh qu\xE1 nh\u1ECF",imageValidateSizeLabelImageSizeTooBig:"H\xECnh \u1EA3nh qu\xE1 l\u1EDBn",imageValidateSizeLabelExpectedMinSize:"K\xEDch th\u01B0\u1EDBc t\u1ED1i thi\u1EC3u l\xE0 {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"K\xEDch th\u01B0\u1EDBc t\u1ED1i \u0111a l\xE0 {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"\u0110\u1ED9 ph\xE2n gi\u1EA3i qu\xE1 th\u1EA5p",imageValidateSizeLabelImageResolutionTooHigh:"\u0110\u1ED9 ph\xE2n gi\u1EA3i qu\xE1 cao",imageValidateSizeLabelExpectedMinResolution:"\u0110\u1ED9 ph\xE2n gi\u1EA3i t\u1ED1i thi\u1EC3u l\xE0 {minResolution}",imageValidateSizeLabelExpectedMaxResolution:"\u0110\u1ED9 ph\xE2n gi\u1EA3i t\u1ED1i \u0111a l\xE0 {maxResolution}"};var Ql={labelIdle:'\u62D6\u653E\u6587\u4EF6\uFF0C\u6216\u8005 \u6D4F\u89C8 ',labelInvalidField:"\u5B57\u6BB5\u5305\u542B\u65E0\u6548\u6587\u4EF6",labelFileWaitingForSize:"\u8BA1\u7B97\u6587\u4EF6\u5927\u5C0F",labelFileSizeNotAvailable:"\u6587\u4EF6\u5927\u5C0F\u4E0D\u53EF\u7528",labelFileLoading:"\u52A0\u8F7D",labelFileLoadError:"\u52A0\u8F7D\u9519\u8BEF",labelFileProcessing:"\u4E0A\u4F20",labelFileProcessingComplete:"\u5DF2\u4E0A\u4F20",labelFileProcessingAborted:"\u4E0A\u4F20\u5DF2\u53D6\u6D88",labelFileProcessingError:"\u4E0A\u4F20\u51FA\u9519",labelFileProcessingRevertError:"\u8FD8\u539F\u51FA\u9519",labelFileRemoveError:"\u5220\u9664\u51FA\u9519",labelTapToCancel:"\u70B9\u51FB\u53D6\u6D88",labelTapToRetry:"\u70B9\u51FB\u91CD\u8BD5",labelTapToUndo:"\u70B9\u51FB\u64A4\u6D88",labelButtonRemoveItem:"\u5220\u9664",labelButtonAbortItemLoad:"\u4E2D\u6B62",labelButtonRetryItemLoad:"\u91CD\u8BD5",labelButtonAbortItemProcessing:"\u53D6\u6D88",labelButtonUndoItemProcessing:"\u64A4\u6D88",labelButtonRetryItemProcessing:"\u91CD\u8BD5",labelButtonProcessItem:"\u4E0A\u4F20",labelMaxFileSizeExceeded:"\u6587\u4EF6\u592A\u5927",labelMaxFileSize:"\u6700\u5927\u503C: {filesize}",labelMaxTotalFileSizeExceeded:"\u8D85\u8FC7\u6700\u5927\u6587\u4EF6\u5927\u5C0F",labelMaxTotalFileSize:"\u6700\u5927\u6587\u4EF6\u5927\u5C0F\uFF1A{filesize}",labelFileTypeNotAllowed:"\u6587\u4EF6\u7C7B\u578B\u65E0\u6548",fileValidateTypeLabelExpectedTypes:"\u5E94\u4E3A {allButLastType} \u6216 {lastType}",imageValidateSizeLabelFormatError:"\u4E0D\u652F\u6301\u56FE\u50CF\u7C7B\u578B",imageValidateSizeLabelImageSizeTooSmall:"\u56FE\u50CF\u592A\u5C0F",imageValidateSizeLabelImageSizeTooBig:"\u56FE\u50CF\u592A\u5927",imageValidateSizeLabelExpectedMinSize:"\u6700\u5C0F\u503C: {minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"\u6700\u5927\u503C: {maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"\u5206\u8FA8\u7387\u592A\u4F4E",imageValidateSizeLabelImageResolutionTooHigh:"\u5206\u8FA8\u7387\u592A\u9AD8",imageValidateSizeLabelExpectedMinResolution:"\u6700\u5C0F\u5206\u8FA8\u7387\uFF1A{minResolution}",imageValidateSizeLabelExpectedMaxResolution:"\u6700\u5927\u5206\u8FA8\u7387\uFF1A{maxResolution}"};var Zl={labelIdle:'\u62D6\u653E\u6A94\u6848\uFF0C\u6216\u8005 \u700F\u89BD ',labelInvalidField:"\u4E0D\u652F\u63F4\u6B64\u6A94\u6848",labelFileWaitingForSize:"\u6B63\u5728\u8A08\u7B97\u6A94\u6848\u5927\u5C0F",labelFileSizeNotAvailable:"\u6A94\u6848\u5927\u5C0F\u4E0D\u7B26",labelFileLoading:"\u8B80\u53D6\u4E2D",labelFileLoadError:"\u8B80\u53D6\u932F\u8AA4",labelFileProcessing:"\u4E0A\u50B3",labelFileProcessingComplete:"\u5DF2\u4E0A\u50B3",labelFileProcessingAborted:"\u4E0A\u50B3\u5DF2\u53D6\u6D88",labelFileProcessingError:"\u4E0A\u50B3\u767C\u751F\u932F\u8AA4",labelFileProcessingRevertError:"\u9084\u539F\u932F\u8AA4",labelFileRemoveError:"\u522A\u9664\u932F\u8AA4",labelTapToCancel:"\u9EDE\u64CA\u53D6\u6D88",labelTapToRetry:"\u9EDE\u64CA\u91CD\u8A66",labelTapToUndo:"\u9EDE\u64CA\u9084\u539F",labelButtonRemoveItem:"\u522A\u9664",labelButtonAbortItemLoad:"\u505C\u6B62",labelButtonRetryItemLoad:"\u91CD\u8A66",labelButtonAbortItemProcessing:"\u53D6\u6D88",labelButtonUndoItemProcessing:"\u53D6\u6D88",labelButtonRetryItemProcessing:"\u91CD\u8A66",labelButtonProcessItem:"\u4E0A\u50B3",labelMaxFileSizeExceeded:"\u6A94\u6848\u904E\u5927",labelMaxFileSize:"\u6700\u5927\u503C\uFF1A{filesize}",labelMaxTotalFileSizeExceeded:"\u8D85\u904E\u6700\u5927\u53EF\u4E0A\u50B3\u5927\u5C0F",labelMaxTotalFileSize:"\u6700\u5927\u53EF\u4E0A\u50B3\u5927\u5C0F\uFF1A{filesize}",labelFileTypeNotAllowed:"\u4E0D\u652F\u63F4\u6B64\u985E\u578B\u6A94\u6848",fileValidateTypeLabelExpectedTypes:"\u61C9\u70BA {allButLastType} \u6216 {lastType}",imageValidateSizeLabelFormatError:"\u4E0D\u652F\u6301\u6B64\u985E\u5716\u7247\u985E\u578B",imageValidateSizeLabelImageSizeTooSmall:"\u5716\u7247\u904E\u5C0F",imageValidateSizeLabelImageSizeTooBig:"\u5716\u7247\u904E\u5927",imageValidateSizeLabelExpectedMinSize:"\u6700\u5C0F\u5C3A\u5BF8\uFF1A{minWidth} \xD7 {minHeight}",imageValidateSizeLabelExpectedMaxSize:"\u6700\u5927\u5C3A\u5BF8\uFF1A{maxWidth} \xD7 {maxHeight}",imageValidateSizeLabelImageResolutionTooLow:"\u89E3\u6790\u5EA6\u904E\u4F4E",imageValidateSizeLabelImageResolutionTooHigh:"\u89E3\u6790\u5EA6\u904E\u9AD8",imageValidateSizeLabelExpectedMinResolution:"\u6700\u4F4E\u89E3\u6790\u5EA6\uFF1A{minResolution}",imageValidateSizeLabelExpectedMaxResolution:"\u6700\u9AD8\u89E3\u6790\u5EA6\uFF1A{maxResolution}"};ve(Wo);ve(jo);ve($o);ve(Qo);ve(el);ve(pl);ve(ul);ve(Rl);ve(Ma);window.FilePond=na;function uf({acceptedFileTypes:e,imageEditorEmptyFillColor:t,imageEditorMode:i,imageEditorViewportHeight:a,imageEditorViewportWidth:n,deleteUploadedFileUsing:o,isDeletable:l,isDisabled:r,getUploadedFilesUsing:s,imageCropAspectRatio:p,imagePreviewHeight:c,imageResizeMode:d,imageResizeTargetHeight:m,imageResizeTargetWidth:u,imageResizeUpscale:f,isAvatar:h,hasImageEditor:g,hasCircleCropper:I,canEditSvgs:E,isSvgEditingConfirmed:T,confirmSvgEditingMessage:v,disabledSvgEditingMessage:y,isDownloadable:b,isMultiple:w,isOpenable:x,isPreviewable:_,isReorderable:P,itemPanelAspectRatio:O,loadingIndicatorPosition:M,locale:C,maxFiles:S,maxSize:F,minSize:R,panelAspectRatio:L,panelLayout:z,placeholder:D,removeUploadedFileButtonPosition:k,removeUploadedFileUsing:B,reorderUploadedFilesUsing:X,shouldAppendFiles:q,shouldOrientImageFromExif:Q,shouldTransformImage:pe,state:G,uploadButtonPosition:H,uploadingMessage:Y,uploadProgressIndicatorPosition:le,uploadUsing:ee}){return{fileKeyIndex:{},pond:null,shouldUpdateState:!0,state:G,lastState:null,error:null,uploadedFileIndex:{},isEditorOpen:!1,editingFile:{},currentRatio:"",editor:{},init:async function(){Dt(Kl[C]??Kl.en),this.pond=ut(this.$refs.input,{acceptedFileTypes:e,allowImageExifOrientation:Q,allowPaste:!1,allowRemove:l,allowReorder:P,allowImagePreview:_,allowVideoPreview:_,allowAudioPreview:_,allowImageTransform:pe,credits:!1,files:await this.getFiles(),imageCropAspectRatio:p,imagePreviewHeight:c,imageResizeTargetHeight:m,imageResizeTargetWidth:u,imageResizeMode:d,imageResizeUpscale:f,imageTransformOutputStripImageHead:!1,itemInsertLocation:q?"after":"before",...D&&{labelIdle:D},maxFiles:S,maxFileSize:F,minFileSize:R,styleButtonProcessItemPosition:H,styleButtonRemoveItemPosition:k,styleItemPanelAspectRatio:O,styleLoadIndicatorPosition:M,stylePanelAspectRatio:L,stylePanelLayout:z,styleProgressIndicatorPosition:le,server:{load:async(N,U)=>{let Z=await(await fetch(N,{cache:"no-store"})).blob();U(Z)},process:(N,U,$,Z,Ve,Ge)=>{this.shouldUpdateState=!1;let Xt=([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g,Qt=>(Qt^crypto.getRandomValues(new Uint8Array(1))[0]&15>>Qt/4).toString(16));ee(Xt,U,Qt=>{this.shouldUpdateState=!0,Z(Qt)},Ve,Ge)},remove:async(N,U)=>{let $=this.uploadedFileIndex[N]??null;$&&(await o($),U())},revert:async(N,U)=>{await B(N),U()}},allowImageEdit:g,imageEditEditor:{open:N=>this.loadEditor(N),onconfirm:()=>{},oncancel:()=>this.closeEditor(),onclose:()=>this.closeEditor()},fileValidateTypeDetectType:(N,U)=>new Promise(($,Z)=>{let Ve=U||Go.getType(N.name.split(".").pop());Ve?$(Ve):Z()})}),this.$watch("state",async()=>{if(this.pond&&this.shouldUpdateState&&this.state!==void 0){if(this.state!==null&&Object.values(this.state).filter(N=>N.startsWith("livewire-file:")).length){this.lastState=null;return}JSON.stringify(this.state)!==this.lastState&&(this.lastState=JSON.stringify(this.state),this.pond.files=await this.getFiles())}}),this.pond.on("reorderfiles",async N=>{let U=N.map($=>$.source instanceof File?$.serverId:this.uploadedFileIndex[$.source]??null).filter($=>$);await X(q?U:U.reverse())}),this.pond.on("initfile",async N=>{b&&(h||this.insertDownloadLink(N))}),this.pond.on("initfile",async N=>{x&&(h||this.insertOpenLink(N))}),this.pond.on("addfilestart",async N=>{N.status===Et.PROCESSING_QUEUED&&this.dispatchFormEvent("form-processing-started",{message:Y})});let V=async()=>{this.pond.getFiles().filter(N=>N.status===Et.PROCESSING||N.status===Et.PROCESSING_QUEUED).length||this.dispatchFormEvent("form-processing-finished")};this.pond.on("processfile",V),this.pond.on("processfileabort",V),this.pond.on("processfilerevert",V),z==="compact circle"&&(this.pond.on("error",N=>{this.error=`${N.main}: ${N.sub}`.replace("Expects or","Expects")}),this.pond.on("removefile",()=>this.error=null))},destroy:function(){this.destroyEditor(),ft(this.$refs.input),this.pond=null},dispatchFormEvent:function(V,N={}){this.$el.closest("form")?.dispatchEvent(new CustomEvent(V,{composed:!0,cancelable:!0,detail:N}))},getUploadedFiles:async function(){let V=await s();this.fileKeyIndex=V??{},this.uploadedFileIndex=Object.entries(this.fileKeyIndex).filter(([N,U])=>U?.url).reduce((N,[U,$])=>(N[$.url]=U,N),{})},getFiles:async function(){await this.getUploadedFiles();let V=[];for(let N of Object.values(this.fileKeyIndex))N&&V.push({source:N.url,options:{type:"local",...!N.type||_&&(/^audio/.test(N.type)||/^image/.test(N.type)||/^video/.test(N.type))?{}:{file:{name:N.name,size:N.size,type:N.type}}}});return q?V:V.reverse()},insertDownloadLink:function(V){if(V.origin!==zt.LOCAL)return;let N=this.getDownloadLink(V);N&&document.getElementById(`filepond--item-${V.id}`).querySelector(".filepond--file-info-main").prepend(N)},insertOpenLink:function(V){if(V.origin!==zt.LOCAL)return;let N=this.getOpenLink(V);N&&document.getElementById(`filepond--item-${V.id}`).querySelector(".filepond--file-info-main").prepend(N)},getDownloadLink:function(V){let N=V.source;if(!N)return;let U=document.createElement("a");return U.className="filepond--download-icon",U.href=N,U.download=V.file.name,U},getOpenLink:function(V){let N=V.source;if(!N)return;let U=document.createElement("a");return U.className="filepond--open-icon",U.href=N,U.target="_blank",U},initEditor:function(){r||g&&(this.editor=new xa(this.$refs.editor,{aspectRatio:n/a,autoCropArea:1,center:!0,crop:V=>{this.$refs.xPositionInput.value=Math.round(V.detail.x),this.$refs.yPositionInput.value=Math.round(V.detail.y),this.$refs.heightInput.value=Math.round(V.detail.height),this.$refs.widthInput.value=Math.round(V.detail.width),this.$refs.rotationInput.value=V.detail.rotate},cropBoxResizable:!0,guides:!0,highlight:!0,responsive:!0,toggleDragModeOnDblclick:!0,viewMode:i,wheelZoomRatio:.02}))},closeEditor:function(){this.editingFile={},this.isEditorOpen=!1,this.destroyEditor()},fixImageDimensions:function(V,N){if(V.type!=="image/svg+xml")return N(V);let U=new FileReader;U.onload=$=>{let Z=new DOMParser().parseFromString($.target.result,"image/svg+xml")?.querySelector("svg");if(!Z)return N(V);let Ve=["viewBox","ViewBox","viewbox"].find(Xt=>Z.hasAttribute(Xt));if(!Ve)return N(V);let Ge=Z.getAttribute(Ve).split(" ");return!Ge||Ge.length!==4?N(V):(Z.setAttribute("width",parseFloat(Ge[2])+"pt"),Z.setAttribute("height",parseFloat(Ge[3])+"pt"),N(new File([new Blob([new XMLSerializer().serializeToString(Z)],{type:"image/svg+xml"})],V.name,{type:"image/svg+xml",_relativePath:""})))},U.readAsText(V)},loadEditor:function(V){if(r||!g||!V)return;let N=V.type==="image/svg+xml";if(!E&&N){alert(y);return}T&&N&&!confirm(v)||this.fixImageDimensions(V,U=>{this.editingFile=U,this.initEditor();let $=new FileReader;$.onload=Z=>{this.isEditorOpen=!0,setTimeout(()=>this.editor.replace(Z.target.result),200)},$.readAsDataURL(V)})},getRoundedCanvas:function(V){let N=V.width,U=V.height,$=document.createElement("canvas");$.width=N,$.height=U;let Z=$.getContext("2d");return Z.imageSmoothingEnabled=!0,Z.drawImage(V,0,0,N,U),Z.globalCompositeOperation="destination-in",Z.beginPath(),Z.ellipse(N/2,U/2,N/2,U/2,0,0,2*Math.PI),Z.fill(),$},saveEditor:function(){if(r||!g)return;let V=this.editor.getCroppedCanvas({fillColor:t??"transparent",height:m,imageSmoothingEnabled:!0,imageSmoothingQuality:"high",width:u});I&&(V=this.getRoundedCanvas(V)),V.toBlob(N=>{w&&this.pond.removeFile(this.pond.getFiles().find(U=>U.filename===this.editingFile.name)?.id,{revert:!0}),this.$nextTick(()=>{this.shouldUpdateState=!1;let U=this.editingFile.name.slice(0,this.editingFile.name.lastIndexOf(".")),$=this.editingFile.name.split(".").pop();$==="svg"&&($="png");let Z=/-v(\d+)/;Z.test(U)?U=U.replace(Z,(Ve,Ge)=>`-v${Number(Ge)+1}`):U+="-v1",this.pond.addFile(new File([N],`${U}.${$}`,{type:this.editingFile.type==="image/svg+xml"||I?"image/png":this.editingFile.type,lastModified:new Date().getTime()})).then(()=>{this.closeEditor()}).catch(()=>{this.closeEditor()})})},I?"image/png":this.editingFile.type)},destroyEditor:function(){this.editor&&typeof this.editor.destroy=="function"&&this.editor.destroy(),this.editor=null}}}var Kl={ar:wl,ca:Sl,ckb:Ll,cs:Al,da:Ml,de:Ol,en:Pl,es:Dl,fa:Fl,fi:zl,fr:Cl,hu:Nl,id:Bl,it:kl,km:Vl,nl:Gl,no:Ul,pl:Wl,pt_BR:Ri,pt_PT:Ri,ro:Hl,ru:jl,sv:Yl,tr:ql,uk:$l,vi:Xl,zh_CN:Ql,zh_TW:Zl};export{uf as default}; /*! Bundled license information: filepond/dist/filepond.esm.js: (*! - * FilePond 4.31.1 + * FilePond 4.31.4 * Licensed under MIT, https://opensource.org/licenses/MIT/ * Please visit https://pqina.nl/filepond/ for details. *) diff --git a/public/js/filament/forms/components/markdown-editor.js b/public/js/filament/forms/components/markdown-editor.js index f42cab6..c586184 100644 --- a/public/js/filament/forms/components/markdown-editor.js +++ b/public/js/filament/forms/components/markdown-editor.js @@ -21,7 +21,7 @@ b`.split(/\n/).length!=3?function(e){for(var t=0,n=[],r=e.length;t<=r;){var i=e. `)>-1?n.value=e.prevInput="":e.prevInput=i,e.composing&&(e.composing.range.clear(),e.composing.range=t.markText(e.composing.start,t.getCursor("to"),{className:"CodeMirror-composing"}))}),!0},st.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},st.prototype.onKeyPress=function(){s&&h>=9&&(this.hasSelection=null),this.fastPoll()},st.prototype.onContextMenu=function(e){var t=this,n=t.cm,r=n.display,i=t.textarea;t.contextMenuPending&&t.contextMenuPending();var a=Mr(n,e),l=r.scroller.scrollTop;if(!a||d)return;var u=n.options.resetSelectionOnContextMenu;u&&n.doc.sel.contains(a)==-1&>(n,wt)(n.doc,yr(a),ke);var f=i.style.cssText,m=t.wrapper.style.cssText,A=t.wrapper.offsetParent.getBoundingClientRect();t.wrapper.style.cssText="position: static",i.style.cssText=`position: absolute; width: 30px; height: 30px; top: `+(e.clientY-A.top-5)+"px; left: "+(e.clientX-A.left-5)+`px; z-index: 1000; background: `+(s?"rgba(255, 255, 255, .05)":"transparent")+`; - outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);`;var P;g&&(P=i.ownerDocument.defaultView.scrollY),r.input.focus(),g&&i.ownerDocument.defaultView.scrollTo(null,P),r.input.reset(),n.somethingSelected()||(i.value=t.prevInput=" "),t.contextMenuPending=Y,r.selForContextMenu=n.doc.sel,clearTimeout(r.detectingSelectAll);function J(){if(i.selectionStart!=null){var ue=n.somethingSelected(),me="\u200B"+(ue?i.value:"");i.value="\u21DA",i.value=me,t.prevInput=ue?"":"\u200B",i.selectionStart=1,i.selectionEnd=me.length,r.selForContextMenu=n.doc.sel}}function Y(){if(t.contextMenuPending==Y&&(t.contextMenuPending=!1,t.wrapper.style.cssText=m,i.style.cssText=f,s&&h<9&&r.scrollbars.setScrollTop(r.scroller.scrollTop=l),i.selectionStart!=null)){(!s||s&&h<9)&&J();var ue=0,me=function(){r.selForContextMenu==n.doc.sel&&i.selectionStart==0&&i.selectionEnd>0&&t.prevInput=="\u200B"?gt(n,Ll)(n):ue++<10?r.detectingSelectAll=setTimeout(me,500):(r.selForContextMenu=null,r.input.reset())};r.detectingSelectAll=setTimeout(me,200)}}if(s&&h>=9&&J(),F){dr(e);var ie=function(){_t(window,"mouseup",ie),setTimeout(Y,20)};Fe(window,"mouseup",ie)}else setTimeout(Y,50)},st.prototype.readOnlyChanged=function(e){e||this.reset(),this.textarea.disabled=e=="nocursor",this.textarea.readOnly=!!e},st.prototype.setUneditable=function(){},st.prototype.needsContentAttribute=!1;function _d(e,t){if(t=t?ge(t):{},t.value=e.value,!t.tabindex&&e.tabIndex&&(t.tabindex=e.tabIndex),!t.placeholder&&e.placeholder&&(t.placeholder=e.placeholder),t.autofocus==null){var n=B(ze(e));t.autofocus=n==e||e.getAttribute("autofocus")!=null&&n==document.body}function r(){e.value=u.getValue()}var i;if(e.form&&(Fe(e.form,"submit",r),!t.leaveSubmitMethodAlone)){var a=e.form;i=a.submit;try{var l=a.submit=function(){r(),a.submit=i,a.submit(),a.submit=l}}catch{}}t.finishInit=function(f){f.save=r,f.getTextArea=function(){return e},f.toTextArea=function(){f.toTextArea=isNaN,r(),e.parentNode.removeChild(f.getWrapperElement()),e.style.display="",e.form&&(_t(e.form,"submit",r),!t.leaveSubmitMethodAlone&&typeof e.form.submit=="function"&&(e.form.submit=i))}},e.style.display="none";var u=tt(function(f){return e.parentNode.insertBefore(f,e.nextSibling)},t);return u}function kd(e){e.off=_t,e.on=Fe,e.wheelEventPixels=zf,e.Doc=Mt,e.splitLines=Bt,e.countColumn=Oe,e.findColumn=Ge,e.isWordChar=we,e.Pass=Ze,e.signal=it,e.Line=Xr,e.changeEnd=xr,e.scrollbarModel=rl,e.Pos=ne,e.cmpPos=ye,e.modes=Wr,e.mimeModes=Kt,e.resolveMode=Ur,e.getMode=$r,e.modeExtensions=gr,e.extendMode=Kr,e.copyState=Vt,e.startState=Gr,e.innerMode=_n,e.commands=$n,e.keyMap=ur,e.keyName=Bl,e.isModifierKey=Rl,e.lookupKey=un,e.normalizeKeyMap=Qf,e.StringStream=at,e.SharedTextMarker=Bn,e.TextMarker=kr,e.LineWidget=Hn,e.e_preventDefault=kt,e.e_stopPropagation=Hr,e.e_stop=dr,e.addClass=le,e.contains=I,e.rmClass=Q,e.keyNames=wr}pd(tt),vd(tt);var wd="iter insert remove copy getEditor constructor".split(" ");for(var Ai in Mt.prototype)Mt.prototype.hasOwnProperty(Ai)&&Se(wd,Ai)<0&&(tt.prototype[Ai]=function(e){return function(){return e.apply(this.doc,arguments)}}(Mt.prototype[Ai]));return Wt(Mt),tt.inputStyles={textarea:st,contenteditable:Qe},tt.defineMode=function(e){!tt.defaults.mode&&e!="null"&&(tt.defaults.mode=e),Gt.apply(this,arguments)},tt.defineMIME=Cr,tt.defineMode("null",function(){return{token:function(e){return e.skipToEnd()}}}),tt.defineMIME("text/plain","null"),tt.defineExtension=function(e,t){tt.prototype[e]=t},tt.defineDocExtension=function(e,t){Mt.prototype[e]=t},tt.fromTextArea=_d,kd(tt),tt.version="5.65.16",tt})});var Yn=Ke((us,cs)=>{(function(o){typeof us=="object"&&typeof cs=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";o.overlayMode=function(p,v,C){return{startState:function(){return{base:o.startState(p),overlay:o.startState(v),basePos:0,baseCur:null,overlayPos:0,overlayCur:null,streamSeen:null}},copyState:function(b){return{base:o.copyState(p,b.base),overlay:o.copyState(v,b.overlay),basePos:b.basePos,baseCur:null,overlayPos:b.overlayPos,overlayCur:null}},token:function(b,S){return(b!=S.streamSeen||Math.min(S.basePos,S.overlayPos){(function(o){typeof fs=="object"&&typeof ds=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";var p=/^(\s*)(>[> ]*|[*+-] \[[x ]\]\s|[*+-]\s|(\d+)([.)]))(\s*)/,v=/^(\s*)(>[> ]*|[*+-] \[[x ]\]|[*+-]|(\d+)[.)])(\s*)$/,C=/[*+-]\s/;o.commands.newlineAndIndentContinueMarkdownList=function(S){if(S.getOption("disableInput"))return o.Pass;for(var s=S.listSelections(),h=[],g=0;g\s*$/.test(E),M=!/>\s*$/.test(E);(R||M)&&S.replaceRange("",{line:T.line,ch:0},{line:T.line,ch:T.ch+1}),h[g]=` + outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);`;var P;g&&(P=i.ownerDocument.defaultView.scrollY),r.input.focus(),g&&i.ownerDocument.defaultView.scrollTo(null,P),r.input.reset(),n.somethingSelected()||(i.value=t.prevInput=" "),t.contextMenuPending=Y,r.selForContextMenu=n.doc.sel,clearTimeout(r.detectingSelectAll);function J(){if(i.selectionStart!=null){var ue=n.somethingSelected(),me="\u200B"+(ue?i.value:"");i.value="\u21DA",i.value=me,t.prevInput=ue?"":"\u200B",i.selectionStart=1,i.selectionEnd=me.length,r.selForContextMenu=n.doc.sel}}function Y(){if(t.contextMenuPending==Y&&(t.contextMenuPending=!1,t.wrapper.style.cssText=m,i.style.cssText=f,s&&h<9&&r.scrollbars.setScrollTop(r.scroller.scrollTop=l),i.selectionStart!=null)){(!s||s&&h<9)&&J();var ue=0,me=function(){r.selForContextMenu==n.doc.sel&&i.selectionStart==0&&i.selectionEnd>0&&t.prevInput=="\u200B"?gt(n,Ll)(n):ue++<10?r.detectingSelectAll=setTimeout(me,500):(r.selForContextMenu=null,r.input.reset())};r.detectingSelectAll=setTimeout(me,200)}}if(s&&h>=9&&J(),F){dr(e);var ie=function(){_t(window,"mouseup",ie),setTimeout(Y,20)};Fe(window,"mouseup",ie)}else setTimeout(Y,50)},st.prototype.readOnlyChanged=function(e){e||this.reset(),this.textarea.disabled=e=="nocursor",this.textarea.readOnly=!!e},st.prototype.setUneditable=function(){},st.prototype.needsContentAttribute=!1;function _d(e,t){if(t=t?ge(t):{},t.value=e.value,!t.tabindex&&e.tabIndex&&(t.tabindex=e.tabIndex),!t.placeholder&&e.placeholder&&(t.placeholder=e.placeholder),t.autofocus==null){var n=B(ze(e));t.autofocus=n==e||e.getAttribute("autofocus")!=null&&n==document.body}function r(){e.value=u.getValue()}var i;if(e.form&&(Fe(e.form,"submit",r),!t.leaveSubmitMethodAlone)){var a=e.form;i=a.submit;try{var l=a.submit=function(){r(),a.submit=i,a.submit(),a.submit=l}}catch{}}t.finishInit=function(f){f.save=r,f.getTextArea=function(){return e},f.toTextArea=function(){f.toTextArea=isNaN,r(),e.parentNode.removeChild(f.getWrapperElement()),e.style.display="",e.form&&(_t(e.form,"submit",r),!t.leaveSubmitMethodAlone&&typeof e.form.submit=="function"&&(e.form.submit=i))}},e.style.display="none";var u=tt(function(f){return e.parentNode.insertBefore(f,e.nextSibling)},t);return u}function kd(e){e.off=_t,e.on=Fe,e.wheelEventPixels=zf,e.Doc=Mt,e.splitLines=Bt,e.countColumn=Oe,e.findColumn=Ge,e.isWordChar=we,e.Pass=Ze,e.signal=it,e.Line=Xr,e.changeEnd=xr,e.scrollbarModel=rl,e.Pos=ne,e.cmpPos=ye,e.modes=Wr,e.mimeModes=Kt,e.resolveMode=Ur,e.getMode=$r,e.modeExtensions=gr,e.extendMode=Kr,e.copyState=Vt,e.startState=Gr,e.innerMode=_n,e.commands=$n,e.keyMap=ur,e.keyName=Bl,e.isModifierKey=Rl,e.lookupKey=un,e.normalizeKeyMap=Qf,e.StringStream=at,e.SharedTextMarker=Bn,e.TextMarker=kr,e.LineWidget=Hn,e.e_preventDefault=kt,e.e_stopPropagation=Hr,e.e_stop=dr,e.addClass=le,e.contains=I,e.rmClass=Q,e.keyNames=wr}pd(tt),vd(tt);var wd="iter insert remove copy getEditor constructor".split(" ");for(var Ai in Mt.prototype)Mt.prototype.hasOwnProperty(Ai)&&Se(wd,Ai)<0&&(tt.prototype[Ai]=function(e){return function(){return e.apply(this.doc,arguments)}}(Mt.prototype[Ai]));return Wt(Mt),tt.inputStyles={textarea:st,contenteditable:Qe},tt.defineMode=function(e){!tt.defaults.mode&&e!="null"&&(tt.defaults.mode=e),Gt.apply(this,arguments)},tt.defineMIME=Cr,tt.defineMode("null",function(){return{token:function(e){return e.skipToEnd()}}}),tt.defineMIME("text/plain","null"),tt.defineExtension=function(e,t){tt.prototype[e]=t},tt.defineDocExtension=function(e,t){Mt.prototype[e]=t},tt.fromTextArea=_d,kd(tt),tt.version="5.65.18",tt})});var Yn=Ke((us,cs)=>{(function(o){typeof us=="object"&&typeof cs=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";o.overlayMode=function(p,v,C){return{startState:function(){return{base:o.startState(p),overlay:o.startState(v),basePos:0,baseCur:null,overlayPos:0,overlayCur:null,streamSeen:null}},copyState:function(b){return{base:o.copyState(p,b.base),overlay:o.copyState(v,b.overlay),basePos:b.basePos,baseCur:null,overlayPos:b.overlayPos,overlayCur:null}},token:function(b,S){return(b!=S.streamSeen||Math.min(S.basePos,S.overlayPos){(function(o){typeof fs=="object"&&typeof ds=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";var p=/^(\s*)(>[> ]*|[*+-] \[[x ]\]\s|[*+-]\s|(\d+)([.)]))(\s*)/,v=/^(\s*)(>[> ]*|[*+-] \[[x ]\]|[*+-]|(\d+)[.)])(\s*)$/,C=/[*+-]\s/;o.commands.newlineAndIndentContinueMarkdownList=function(S){if(S.getOption("disableInput"))return o.Pass;for(var s=S.listSelections(),h=[],g=0;g\s*$/.test(E),M=!/>\s*$/.test(E);(R||M)&&S.replaceRange("",{line:T.line,ch:0},{line:T.line,ch:T.ch+1}),h[g]=` `}else{var H=z[1],Z=z[5],ee=!(C.test(z[2])||z[2].indexOf(">")>=0),re=ee?parseInt(z[3],10)+1+z[4]:z[2].replace("x"," ");h[g]=` `+H+re+Z,ee&&b(S,T)}}S.replaceSelections(h)};function b(S,s){var h=s.line,g=0,T=0,x=p.exec(S.getLine(h)),c=x[1];do{g+=1;var d=h+g,w=S.getLine(d),E=p.exec(w);if(E){var z=E[1],y=parseInt(x[3],10)+g-T,R=parseInt(E[3],10),M=R;if(c===z&&!isNaN(R))y===R&&(M=R+1),y>R&&(M=y+1),S.replaceRange(w.replace(p,z+M+E[4]+E[5]),{line:d,ch:0},{line:d,ch:w.length});else{if(c.length>z.length||c.length{(function(o){typeof hs=="object"&&typeof gs=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){o.defineOption("placeholder","",function(h,g,T){var x=T&&T!=o.Init;if(g&&!x)h.on("blur",b),h.on("change",S),h.on("swapDoc",S),o.on(h.getInputField(),"compositionupdate",h.state.placeholderCompose=function(){C(h)}),S(h);else if(!g&&x){h.off("blur",b),h.off("change",S),h.off("swapDoc",S),o.off(h.getInputField(),"compositionupdate",h.state.placeholderCompose),p(h);var c=h.getWrapperElement();c.className=c.className.replace(" CodeMirror-empty","")}g&&!h.hasFocus()&&b(h)});function p(h){h.state.placeholder&&(h.state.placeholder.parentNode.removeChild(h.state.placeholder),h.state.placeholder=null)}function v(h){p(h);var g=h.state.placeholder=document.createElement("pre");g.style.cssText="height: 0; overflow: visible",g.style.direction=h.getOption("direction"),g.className="CodeMirror-placeholder CodeMirror-line-like";var T=h.getOption("placeholder");typeof T=="string"&&(T=document.createTextNode(T)),g.appendChild(T),h.display.lineSpace.insertBefore(g,h.display.lineSpace.firstChild)}function C(h){setTimeout(function(){var g=!1;if(h.lineCount()==1){var T=h.getInputField();g=T.nodeName=="TEXTAREA"?!h.getLine(0).length:!/[^\u200b]/.test(T.querySelector(".CodeMirror-line").textContent)}g?v(h):p(h)},20)}function b(h){s(h)&&v(h)}function S(h){var g=h.getWrapperElement(),T=s(h);g.className=g.className.replace(" CodeMirror-empty","")+(T?" CodeMirror-empty":""),T?v(h):p(h)}function s(h){return h.lineCount()===1&&h.getLine(0)===""}})});var ys=Ke((vs,bs)=>{(function(o){typeof vs=="object"&&typeof bs=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";o.defineOption("styleSelectedText",!1,function(x,c,d){var w=d&&d!=o.Init;c&&!w?(x.state.markedSelection=[],x.state.markedSelectionStyle=typeof c=="string"?c:"CodeMirror-selectedtext",g(x),x.on("cursorActivity",p),x.on("change",v)):!c&&w&&(x.off("cursorActivity",p),x.off("change",v),h(x),x.state.markedSelection=x.state.markedSelectionStyle=null)});function p(x){x.state.markedSelection&&x.operation(function(){T(x)})}function v(x){x.state.markedSelection&&x.state.markedSelection.length&&x.operation(function(){h(x)})}var C=8,b=o.Pos,S=o.cmpPos;function s(x,c,d,w){if(S(c,d)!=0)for(var E=x.state.markedSelection,z=x.state.markedSelectionStyle,y=c.line;;){var R=y==c.line?c:b(y,0),M=y+C,H=M>=d.line,Z=H?d:b(M,0),ee=x.markText(R,Z,{className:z});if(w==null?E.push(ee):E.splice(w++,0,ee),H)break;y=M}}function h(x){for(var c=x.state.markedSelection,d=0;d1)return g(x);var c=x.getCursor("start"),d=x.getCursor("end"),w=x.state.markedSelection;if(!w.length)return s(x,c,d);var E=w[0].find(),z=w[w.length-1].find();if(!E||!z||d.line-c.line<=C||S(c,z.to)>=0||S(d,E.from)<=0)return g(x);for(;S(c,E.from)>0;)w.shift().clear(),E=w[0].find();for(S(c,E.from)<0&&(E.to.line-c.line0&&(d.line-z.from.line{(function(o){typeof xs=="object"&&typeof _s=="object"?o(We()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],o):o(CodeMirror)})(function(o){"use strict";var p=o.Pos;function v(y){var R=y.flags;return R??(y.ignoreCase?"i":"")+(y.global?"g":"")+(y.multiline?"m":"")}function C(y,R){for(var M=v(y),H=M,Z=0;Zre);N++){var F=y.getLine(ee++);H=H==null?F:H+` `+F}Z=Z*2,R.lastIndex=M.ch;var D=R.exec(H);if(D){var Q=H.slice(0,D.index).split(` diff --git a/public/js/filament/forms/components/rich-editor.js b/public/js/filament/forms/components/rich-editor.js index 740bf99..c884da2 100644 --- a/public/js/filament/forms/components/rich-editor.js +++ b/public/js/filament/forms/components/rich-editor.js @@ -1,4 +1,4 @@ -var Mi="2.1.4",K="[data-trix-attachment]",je={preview:{presentation:"gallery",caption:{name:!0,size:!0}},file:{caption:{size:!0}}},y={default:{tagName:"div",parse:!1},quote:{tagName:"blockquote",nestable:!0},heading1:{tagName:"h1",terminal:!0,breakOnReturn:!0,group:!1},code:{tagName:"pre",terminal:!0,htmlAttributes:["language"],text:{plaintext:!0}},bulletList:{tagName:"ul",parse:!1},bullet:{tagName:"li",listAttribute:"bulletList",group:!1,nestable:!0,test(n){return Je(n.parentNode)===y[this.listAttribute].tagName}},numberList:{tagName:"ol",parse:!1},number:{tagName:"li",listAttribute:"numberList",group:!1,nestable:!0,test(n){return Je(n.parentNode)===y[this.listAttribute].tagName}},attachmentGallery:{tagName:"div",exclusive:!0,terminal:!0,parse:!1,group:!1}},Je=n=>{var t;return n==null||(t=n.tagName)===null||t===void 0?void 0:t.toLowerCase()},Ke=navigator.userAgent.match(/android\s([0-9]+.*Chrome)/i),se=Ke&&parseInt(Ke[1]),St={composesExistingText:/Android.*Chrome/.test(navigator.userAgent),recentAndroid:se&&se>12,samsungAndroid:se&&navigator.userAgent.match(/Android.*SM-/),forcesObjectResizing:/Trident.*rv:11/.test(navigator.userAgent),supportsInputEvents:typeof InputEvent<"u"&&["data","getTargetRanges","inputType"].every(n=>n in InputEvent.prototype)},h={attachFiles:"Attach Files",bold:"Bold",bullets:"Bullets",byte:"Byte",bytes:"Bytes",captionPlaceholder:"Add a caption\u2026",code:"Code",heading1:"Heading",indent:"Increase Level",italic:"Italic",link:"Link",numbers:"Numbers",outdent:"Decrease Level",quote:"Quote",redo:"Redo",remove:"Remove",strike:"Strikethrough",undo:"Undo",unlink:"Unlink",url:"URL",urlPlaceholder:"Enter a URL\u2026",GB:"GB",KB:"KB",MB:"MB",PB:"PB",TB:"TB"},ji=[h.bytes,h.KB,h.MB,h.GB,h.TB,h.PB],vi={prefix:"IEC",precision:2,formatter(n){switch(n){case 0:return"0 ".concat(h.bytes);case 1:return"1 ".concat(h.byte);default:let t;this.prefix==="SI"?t=1e3:this.prefix==="IEC"&&(t=1024);let e=Math.floor(Math.log(n)/Math.log(t)),i=(n/Math.pow(t,e)).toFixed(this.precision).replace(/0*$/,"").replace(/\.$/,"");return"".concat(i," ").concat(ji[e])}}},te="\uFEFF",U="\xA0",Ai=function(n){for(let t in n){let e=n[t];this[t]=e}return this},We=document.documentElement,Wi=We.matches,p=function(n){let{onElement:t,matchingSelector:e,withCallback:i,inPhase:r,preventDefault:o,times:s}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},a=t||We,l=e,c=r==="capturing",u=function(b){s!=null&&--s==0&&u.destroy();let A=q(b.target,{matchingSelector:l});A!=null&&(i?.call(A,b,A),o&&b.preventDefault())};return u.destroy=()=>a.removeEventListener(n,u,c),a.addEventListener(n,u,c),u},vt=function(n){let{onElement:t,bubbles:e,cancelable:i,attributes:r}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},o=t??We;e=e!==!1,i=i!==!1;let s=document.createEvent("Events");return s.initEvent(n,e,i),r!=null&&Ai.call(s,r),o.dispatchEvent(s)},xi=function(n,t){if(n?.nodeType===1)return Wi.call(n,t)},q=function(n){let{matchingSelector:t,untilNode:e}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};for(;n&&n.nodeType!==Node.ELEMENT_NODE;)n=n.parentNode;if(n!=null){if(t==null)return n;if(n.closest&&e==null)return n.closest(t);for(;n&&n!==e;){if(xi(n,t))return n;n=n.parentNode}}},Ue=n=>document.activeElement!==n&&J(n,document.activeElement),J=function(n,t){if(n&&t)for(;t;){if(t===n)return!0;t=t.parentNode}},ae=function(n){var t;if((t=n)===null||t===void 0||!t.parentNode)return;let e=0;for(n=n.previousSibling;n;)e++,n=n.previousSibling;return e},V=n=>{var t;return n==null||(t=n.parentNode)===null||t===void 0?void 0:t.removeChild(n)},Ft=function(n){let{onlyNodesOfType:t,usingFilter:e,expandEntityReferences:i}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=(()=>{switch(t){case"element":return NodeFilter.SHOW_ELEMENT;case"text":return NodeFilter.SHOW_TEXT;case"comment":return NodeFilter.SHOW_COMMENT;default:return NodeFilter.SHOW_ALL}})();return document.createTreeWalker(n,r,e??null,i===!0)},x=n=>{var t;return n==null||(t=n.tagName)===null||t===void 0?void 0:t.toLowerCase()},d=function(n){let t,e,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};typeof n=="object"?(i=n,n=i.tagName):i={attributes:i};let r=document.createElement(n);if(i.editable!=null&&(i.attributes==null&&(i.attributes={}),i.attributes.contenteditable=i.editable),i.attributes)for(t in i.attributes)e=i.attributes[t],r.setAttribute(t,e);if(i.style)for(t in i.style)e=i.style[t],r.style[t]=e;if(i.data)for(t in i.data)e=i.data[t],r.dataset[t]=e;return i.className&&i.className.split(" ").forEach(o=>{r.classList.add(o)}),i.textContent&&(r.textContent=i.textContent),i.childNodes&&[].concat(i.childNodes).forEach(o=>{r.appendChild(o)}),r},pt,At=function(){if(pt!=null)return pt;pt=[];for(let n in y){let t=y[n];t.tagName&&pt.push(t.tagName)}return pt},le=n=>ot(n?.firstChild),$e=function(n){let{strict:t}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{strict:!0};return t?ot(n):ot(n)||!ot(n.firstChild)&&function(e){return At().includes(x(e))&&!At().includes(x(e.firstChild))}(n)},ot=n=>Ui(n)&&n?.data==="block",Ui=n=>n?.nodeType===Node.COMMENT_NODE,st=function(n){let{name:t}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(n)return xt(n)?n.data===te?!t||n.parentNode.dataset.trixCursorTarget===t:void 0:st(n.firstChild)},$=n=>xi(n,K),yi=n=>xt(n)&&n?.data==="",xt=n=>n?.nodeType===Node.TEXT_NODE,qe={level2Enabled:!0,getLevel(){return this.level2Enabled&&St.supportsInputEvents?2:0},pickFiles(n){let t=d("input",{type:"file",multiple:!0,hidden:!0,id:this.fileInputId});t.addEventListener("change",()=>{n(t.files),V(t)}),V(document.getElementById(this.fileInputId)),document.body.appendChild(t),t.click()}},Tt={removeBlankTableCells:!1,tableCellSeparator:" | ",tableRowSeparator:` +var Mi="2.1.5",K="[data-trix-attachment]",je={preview:{presentation:"gallery",caption:{name:!0,size:!0}},file:{caption:{size:!0}}},y={default:{tagName:"div",parse:!1},quote:{tagName:"blockquote",nestable:!0},heading1:{tagName:"h1",terminal:!0,breakOnReturn:!0,group:!1},code:{tagName:"pre",terminal:!0,htmlAttributes:["language"],text:{plaintext:!0}},bulletList:{tagName:"ul",parse:!1},bullet:{tagName:"li",listAttribute:"bulletList",group:!1,nestable:!0,test(n){return Je(n.parentNode)===y[this.listAttribute].tagName}},numberList:{tagName:"ol",parse:!1},number:{tagName:"li",listAttribute:"numberList",group:!1,nestable:!0,test(n){return Je(n.parentNode)===y[this.listAttribute].tagName}},attachmentGallery:{tagName:"div",exclusive:!0,terminal:!0,parse:!1,group:!1}},Je=n=>{var t;return n==null||(t=n.tagName)===null||t===void 0?void 0:t.toLowerCase()},Ke=navigator.userAgent.match(/android\s([0-9]+.*Chrome)/i),se=Ke&&parseInt(Ke[1]),St={composesExistingText:/Android.*Chrome/.test(navigator.userAgent),recentAndroid:se&&se>12,samsungAndroid:se&&navigator.userAgent.match(/Android.*SM-/),forcesObjectResizing:/Trident.*rv:11/.test(navigator.userAgent),supportsInputEvents:typeof InputEvent<"u"&&["data","getTargetRanges","inputType"].every(n=>n in InputEvent.prototype)},h={attachFiles:"Attach Files",bold:"Bold",bullets:"Bullets",byte:"Byte",bytes:"Bytes",captionPlaceholder:"Add a caption\u2026",code:"Code",heading1:"Heading",indent:"Increase Level",italic:"Italic",link:"Link",numbers:"Numbers",outdent:"Decrease Level",quote:"Quote",redo:"Redo",remove:"Remove",strike:"Strikethrough",undo:"Undo",unlink:"Unlink",url:"URL",urlPlaceholder:"Enter a URL\u2026",GB:"GB",KB:"KB",MB:"MB",PB:"PB",TB:"TB"},ji=[h.bytes,h.KB,h.MB,h.GB,h.TB,h.PB],vi={prefix:"IEC",precision:2,formatter(n){switch(n){case 0:return"0 ".concat(h.bytes);case 1:return"1 ".concat(h.byte);default:let t;this.prefix==="SI"?t=1e3:this.prefix==="IEC"&&(t=1024);let e=Math.floor(Math.log(n)/Math.log(t)),i=(n/Math.pow(t,e)).toFixed(this.precision).replace(/0*$/,"").replace(/\.$/,"");return"".concat(i," ").concat(ji[e])}}},te="\uFEFF",U="\xA0",Ai=function(n){for(let t in n){let e=n[t];this[t]=e}return this},We=document.documentElement,Wi=We.matches,p=function(n){let{onElement:t,matchingSelector:e,withCallback:i,inPhase:r,preventDefault:o,times:s}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},a=t||We,l=e,c=r==="capturing",u=function(b){s!=null&&--s==0&&u.destroy();let A=q(b.target,{matchingSelector:l});A!=null&&(i?.call(A,b,A),o&&b.preventDefault())};return u.destroy=()=>a.removeEventListener(n,u,c),a.addEventListener(n,u,c),u},vt=function(n){let{onElement:t,bubbles:e,cancelable:i,attributes:r}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},o=t??We;e=e!==!1,i=i!==!1;let s=document.createEvent("Events");return s.initEvent(n,e,i),r!=null&&Ai.call(s,r),o.dispatchEvent(s)},xi=function(n,t){if(n?.nodeType===1)return Wi.call(n,t)},q=function(n){let{matchingSelector:t,untilNode:e}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};for(;n&&n.nodeType!==Node.ELEMENT_NODE;)n=n.parentNode;if(n!=null){if(t==null)return n;if(n.closest&&e==null)return n.closest(t);for(;n&&n!==e;){if(xi(n,t))return n;n=n.parentNode}}},Ue=n=>document.activeElement!==n&&J(n,document.activeElement),J=function(n,t){if(n&&t)for(;t;){if(t===n)return!0;t=t.parentNode}},ae=function(n){var t;if((t=n)===null||t===void 0||!t.parentNode)return;let e=0;for(n=n.previousSibling;n;)e++,n=n.previousSibling;return e},V=n=>{var t;return n==null||(t=n.parentNode)===null||t===void 0?void 0:t.removeChild(n)},Ft=function(n){let{onlyNodesOfType:t,usingFilter:e,expandEntityReferences:i}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=(()=>{switch(t){case"element":return NodeFilter.SHOW_ELEMENT;case"text":return NodeFilter.SHOW_TEXT;case"comment":return NodeFilter.SHOW_COMMENT;default:return NodeFilter.SHOW_ALL}})();return document.createTreeWalker(n,r,e??null,i===!0)},x=n=>{var t;return n==null||(t=n.tagName)===null||t===void 0?void 0:t.toLowerCase()},d=function(n){let t,e,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};typeof n=="object"?(i=n,n=i.tagName):i={attributes:i};let r=document.createElement(n);if(i.editable!=null&&(i.attributes==null&&(i.attributes={}),i.attributes.contenteditable=i.editable),i.attributes)for(t in i.attributes)e=i.attributes[t],r.setAttribute(t,e);if(i.style)for(t in i.style)e=i.style[t],r.style[t]=e;if(i.data)for(t in i.data)e=i.data[t],r.dataset[t]=e;return i.className&&i.className.split(" ").forEach(o=>{r.classList.add(o)}),i.textContent&&(r.textContent=i.textContent),i.childNodes&&[].concat(i.childNodes).forEach(o=>{r.appendChild(o)}),r},pt,At=function(){if(pt!=null)return pt;pt=[];for(let n in y){let t=y[n];t.tagName&&pt.push(t.tagName)}return pt},le=n=>ot(n?.firstChild),$e=function(n){let{strict:t}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{strict:!0};return t?ot(n):ot(n)||!ot(n.firstChild)&&function(e){return At().includes(x(e))&&!At().includes(x(e.firstChild))}(n)},ot=n=>Ui(n)&&n?.data==="block",Ui=n=>n?.nodeType===Node.COMMENT_NODE,st=function(n){let{name:t}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(n)return xt(n)?n.data===te?!t||n.parentNode.dataset.trixCursorTarget===t:void 0:st(n.firstChild)},$=n=>xi(n,K),yi=n=>xt(n)&&n?.data==="",xt=n=>n?.nodeType===Node.TEXT_NODE,qe={level2Enabled:!0,getLevel(){return this.level2Enabled&&St.supportsInputEvents?2:0},pickFiles(n){let t=d("input",{type:"file",multiple:!0,hidden:!0,id:this.fileInputId});t.addEventListener("change",()=>{n(t.files),V(t)}),V(document.getElementById(this.fileInputId)),document.body.appendChild(t),t.click()}},Tt={removeBlankTableCells:!1,tableCellSeparator:" | ",tableRowSeparator:` `},Y={bold:{tagName:"strong",inheritable:!0,parser(n){let t=window.getComputedStyle(n);return t.fontWeight==="bold"||t.fontWeight>=600}},italic:{tagName:"em",inheritable:!0,parser:n=>window.getComputedStyle(n).fontStyle==="italic"},href:{groupTagName:"a",parser(n){let t="a:not(".concat(K,")"),e=n.closest(t);if(e)return e.getAttribute("href")}},strike:{tagName:"del",inheritable:!0},frozen:{style:{backgroundColor:"highlight"}}},Ci={getDefaultHTML:()=>`
@@ -93,7 +93,7 @@ var Mi="2.1.4",K="[data-trix-attachment]",je={preview:{presentation:"gallery",ca display: block; } -%t:empty:not(:focus)::before { +%t:empty::before { content: attr(placeholder); color: graytext; cursor: text; diff --git a/public/js/filament/support/support.js b/public/js/filament/support/support.js index 1a088c9..9616ced 100644 --- a/public/js/filament/support/support.js +++ b/public/js/filament/support/support.js @@ -1,28 +1,28 @@ -(()=>{var jo=Object.create;var Di=Object.defineProperty;var Bo=Object.getOwnPropertyDescriptor;var Ho=Object.getOwnPropertyNames;var $o=Object.getPrototypeOf,Wo=Object.prototype.hasOwnProperty;var Kr=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Vo=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Ho(e))!Wo.call(t,i)&&i!==r&&Di(t,i,{get:()=>e[i],enumerable:!(n=Bo(e,i))||n.enumerable});return t};var zo=(t,e,r)=>(r=t!=null?jo($o(t)):{},Vo(e||!t||!t.__esModule?Di(r,"default",{value:t,enumerable:!0}):r,t));var oo=Kr(()=>{});var ao=Kr(()=>{});var so=Kr((Os,yr)=>{(function(){"use strict";var t="input is invalid type",e="finalize already called",r=typeof window=="object",n=r?window:{};n.JS_MD5_NO_WINDOW&&(r=!1);var i=!r&&typeof self=="object",o=!n.JS_MD5_NO_NODE_JS&&typeof process=="object"&&process.versions&&process.versions.node;o?n=global:i&&(n=self);var l=!n.JS_MD5_NO_COMMON_JS&&typeof yr=="object"&&yr.exports,h=typeof define=="function"&&define.amd,u=!n.JS_MD5_NO_ARRAY_BUFFER&&typeof ArrayBuffer<"u",f="0123456789abcdef".split(""),y=[128,32768,8388608,-2147483648],b=[0,8,16,24],A=["hex","array","digest","buffer","arrayBuffer","base64"],E="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""),O=[],P;if(u){var R=new ArrayBuffer(68);P=new Uint8Array(R),O=new Uint32Array(R)}var $=Array.isArray;(n.JS_MD5_NO_NODE_JS||!$)&&($=function(s){return Object.prototype.toString.call(s)==="[object Array]"});var B=ArrayBuffer.isView;u&&(n.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW||!B)&&(B=function(s){return typeof s=="object"&&s.buffer&&s.buffer.constructor===ArrayBuffer});var K=function(s){var p=typeof s;if(p==="string")return[s,!0];if(p!=="object"||s===null)throw new Error(t);if(u&&s.constructor===ArrayBuffer)return[new Uint8Array(s),!1];if(!$(s)&&!B(s))throw new Error(t);return[s,!1]},X=function(s){return function(p){return new U(!0).update(p)[s]()}},ne=function(){var s=X("hex");o&&(s=J(s)),s.create=function(){return new U},s.update=function(d){return s.create().update(d)};for(var p=0;p>>6,Ue[_++]=128|d&63):d<55296||d>=57344?(Ue[_++]=224|d>>>12,Ue[_++]=128|d>>>6&63,Ue[_++]=128|d&63):(d=65536+((d&1023)<<10|s.charCodeAt(++N)&1023),Ue[_++]=240|d>>>18,Ue[_++]=128|d>>>12&63,Ue[_++]=128|d>>>6&63,Ue[_++]=128|d&63);else for(_=this.start;N>>2]|=d<>>2]|=(192|d>>>6)<>>2]|=(128|d&63)<=57344?(Q[_>>>2]|=(224|d>>>12)<>>2]|=(128|d>>>6&63)<>>2]|=(128|d&63)<>>2]|=(240|d>>>18)<>>2]|=(128|d>>>12&63)<>>2]|=(128|d>>>6&63)<>>2]|=(128|d&63)<>>2]|=s[N]<=64?(this.start=_-64,this.hash(),this.hashed=!0):this.start=_}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296<<0,this.bytes=this.bytes%4294967296),this},U.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var s=this.blocks,p=this.lastByteIndex;s[p>>>2]|=y[p&3],p>=56&&(this.hashed||this.hash(),s[0]=s[16],s[16]=s[1]=s[2]=s[3]=s[4]=s[5]=s[6]=s[7]=s[8]=s[9]=s[10]=s[11]=s[12]=s[13]=s[14]=s[15]=0),s[14]=this.bytes<<3,s[15]=this.hBytes<<3|this.bytes>>>29,this.hash()}},U.prototype.hash=function(){var s,p,v,d,N,_,M=this.blocks;this.first?(s=M[0]-680876937,s=(s<<7|s>>>25)-271733879<<0,d=(-1732584194^s&2004318071)+M[1]-117830708,d=(d<<12|d>>>20)+s<<0,v=(-271733879^d&(s^-271733879))+M[2]-1126478375,v=(v<<17|v>>>15)+d<<0,p=(s^v&(d^s))+M[3]-1316259209,p=(p<<22|p>>>10)+v<<0):(s=this.h0,p=this.h1,v=this.h2,d=this.h3,s+=(d^p&(v^d))+M[0]-680876936,s=(s<<7|s>>>25)+p<<0,d+=(v^s&(p^v))+M[1]-389564586,d=(d<<12|d>>>20)+s<<0,v+=(p^d&(s^p))+M[2]+606105819,v=(v<<17|v>>>15)+d<<0,p+=(s^v&(d^s))+M[3]-1044525330,p=(p<<22|p>>>10)+v<<0),s+=(d^p&(v^d))+M[4]-176418897,s=(s<<7|s>>>25)+p<<0,d+=(v^s&(p^v))+M[5]+1200080426,d=(d<<12|d>>>20)+s<<0,v+=(p^d&(s^p))+M[6]-1473231341,v=(v<<17|v>>>15)+d<<0,p+=(s^v&(d^s))+M[7]-45705983,p=(p<<22|p>>>10)+v<<0,s+=(d^p&(v^d))+M[8]+1770035416,s=(s<<7|s>>>25)+p<<0,d+=(v^s&(p^v))+M[9]-1958414417,d=(d<<12|d>>>20)+s<<0,v+=(p^d&(s^p))+M[10]-42063,v=(v<<17|v>>>15)+d<<0,p+=(s^v&(d^s))+M[11]-1990404162,p=(p<<22|p>>>10)+v<<0,s+=(d^p&(v^d))+M[12]+1804603682,s=(s<<7|s>>>25)+p<<0,d+=(v^s&(p^v))+M[13]-40341101,d=(d<<12|d>>>20)+s<<0,v+=(p^d&(s^p))+M[14]-1502002290,v=(v<<17|v>>>15)+d<<0,p+=(s^v&(d^s))+M[15]+1236535329,p=(p<<22|p>>>10)+v<<0,s+=(v^d&(p^v))+M[1]-165796510,s=(s<<5|s>>>27)+p<<0,d+=(p^v&(s^p))+M[6]-1069501632,d=(d<<9|d>>>23)+s<<0,v+=(s^p&(d^s))+M[11]+643717713,v=(v<<14|v>>>18)+d<<0,p+=(d^s&(v^d))+M[0]-373897302,p=(p<<20|p>>>12)+v<<0,s+=(v^d&(p^v))+M[5]-701558691,s=(s<<5|s>>>27)+p<<0,d+=(p^v&(s^p))+M[10]+38016083,d=(d<<9|d>>>23)+s<<0,v+=(s^p&(d^s))+M[15]-660478335,v=(v<<14|v>>>18)+d<<0,p+=(d^s&(v^d))+M[4]-405537848,p=(p<<20|p>>>12)+v<<0,s+=(v^d&(p^v))+M[9]+568446438,s=(s<<5|s>>>27)+p<<0,d+=(p^v&(s^p))+M[14]-1019803690,d=(d<<9|d>>>23)+s<<0,v+=(s^p&(d^s))+M[3]-187363961,v=(v<<14|v>>>18)+d<<0,p+=(d^s&(v^d))+M[8]+1163531501,p=(p<<20|p>>>12)+v<<0,s+=(v^d&(p^v))+M[13]-1444681467,s=(s<<5|s>>>27)+p<<0,d+=(p^v&(s^p))+M[2]-51403784,d=(d<<9|d>>>23)+s<<0,v+=(s^p&(d^s))+M[7]+1735328473,v=(v<<14|v>>>18)+d<<0,p+=(d^s&(v^d))+M[12]-1926607734,p=(p<<20|p>>>12)+v<<0,N=p^v,s+=(N^d)+M[5]-378558,s=(s<<4|s>>>28)+p<<0,d+=(N^s)+M[8]-2022574463,d=(d<<11|d>>>21)+s<<0,_=d^s,v+=(_^p)+M[11]+1839030562,v=(v<<16|v>>>16)+d<<0,p+=(_^v)+M[14]-35309556,p=(p<<23|p>>>9)+v<<0,N=p^v,s+=(N^d)+M[1]-1530992060,s=(s<<4|s>>>28)+p<<0,d+=(N^s)+M[4]+1272893353,d=(d<<11|d>>>21)+s<<0,_=d^s,v+=(_^p)+M[7]-155497632,v=(v<<16|v>>>16)+d<<0,p+=(_^v)+M[10]-1094730640,p=(p<<23|p>>>9)+v<<0,N=p^v,s+=(N^d)+M[13]+681279174,s=(s<<4|s>>>28)+p<<0,d+=(N^s)+M[0]-358537222,d=(d<<11|d>>>21)+s<<0,_=d^s,v+=(_^p)+M[3]-722521979,v=(v<<16|v>>>16)+d<<0,p+=(_^v)+M[6]+76029189,p=(p<<23|p>>>9)+v<<0,N=p^v,s+=(N^d)+M[9]-640364487,s=(s<<4|s>>>28)+p<<0,d+=(N^s)+M[12]-421815835,d=(d<<11|d>>>21)+s<<0,_=d^s,v+=(_^p)+M[15]+530742520,v=(v<<16|v>>>16)+d<<0,p+=(_^v)+M[2]-995338651,p=(p<<23|p>>>9)+v<<0,s+=(v^(p|~d))+M[0]-198630844,s=(s<<6|s>>>26)+p<<0,d+=(p^(s|~v))+M[7]+1126891415,d=(d<<10|d>>>22)+s<<0,v+=(s^(d|~p))+M[14]-1416354905,v=(v<<15|v>>>17)+d<<0,p+=(d^(v|~s))+M[5]-57434055,p=(p<<21|p>>>11)+v<<0,s+=(v^(p|~d))+M[12]+1700485571,s=(s<<6|s>>>26)+p<<0,d+=(p^(s|~v))+M[3]-1894986606,d=(d<<10|d>>>22)+s<<0,v+=(s^(d|~p))+M[10]-1051523,v=(v<<15|v>>>17)+d<<0,p+=(d^(v|~s))+M[1]-2054922799,p=(p<<21|p>>>11)+v<<0,s+=(v^(p|~d))+M[8]+1873313359,s=(s<<6|s>>>26)+p<<0,d+=(p^(s|~v))+M[15]-30611744,d=(d<<10|d>>>22)+s<<0,v+=(s^(d|~p))+M[6]-1560198380,v=(v<<15|v>>>17)+d<<0,p+=(d^(v|~s))+M[13]+1309151649,p=(p<<21|p>>>11)+v<<0,s+=(v^(p|~d))+M[4]-145523070,s=(s<<6|s>>>26)+p<<0,d+=(p^(s|~v))+M[11]-1120210379,d=(d<<10|d>>>22)+s<<0,v+=(s^(d|~p))+M[2]+718787259,v=(v<<15|v>>>17)+d<<0,p+=(d^(v|~s))+M[9]-343485551,p=(p<<21|p>>>11)+v<<0,this.first?(this.h0=s+1732584193<<0,this.h1=p-271733879<<0,this.h2=v-1732584194<<0,this.h3=d+271733878<<0,this.first=!1):(this.h0=this.h0+s<<0,this.h1=this.h1+p<<0,this.h2=this.h2+v<<0,this.h3=this.h3+d<<0)},U.prototype.hex=function(){this.finalize();var s=this.h0,p=this.h1,v=this.h2,d=this.h3;return f[s>>>4&15]+f[s&15]+f[s>>>12&15]+f[s>>>8&15]+f[s>>>20&15]+f[s>>>16&15]+f[s>>>28&15]+f[s>>>24&15]+f[p>>>4&15]+f[p&15]+f[p>>>12&15]+f[p>>>8&15]+f[p>>>20&15]+f[p>>>16&15]+f[p>>>28&15]+f[p>>>24&15]+f[v>>>4&15]+f[v&15]+f[v>>>12&15]+f[v>>>8&15]+f[v>>>20&15]+f[v>>>16&15]+f[v>>>28&15]+f[v>>>24&15]+f[d>>>4&15]+f[d&15]+f[d>>>12&15]+f[d>>>8&15]+f[d>>>20&15]+f[d>>>16&15]+f[d>>>28&15]+f[d>>>24&15]},U.prototype.toString=U.prototype.hex,U.prototype.digest=function(){this.finalize();var s=this.h0,p=this.h1,v=this.h2,d=this.h3;return[s&255,s>>>8&255,s>>>16&255,s>>>24&255,p&255,p>>>8&255,p>>>16&255,p>>>24&255,v&255,v>>>8&255,v>>>16&255,v>>>24&255,d&255,d>>>8&255,d>>>16&255,d>>>24&255]},U.prototype.array=U.prototype.digest,U.prototype.arrayBuffer=function(){this.finalize();var s=new ArrayBuffer(16),p=new Uint32Array(s);return p[0]=this.h0,p[1]=this.h1,p[2]=this.h2,p[3]=this.h3,s},U.prototype.buffer=U.prototype.arrayBuffer,U.prototype.base64=function(){for(var s,p,v,d="",N=this.array(),_=0;_<15;)s=N[_++],p=N[_++],v=N[_++],d+=E[s>>>2]+E[(s<<4|p>>>4)&63]+E[(p<<2|v>>>6)&63]+E[v&63];return s=N[_],d+=E[s>>>2]+E[s<<4&63]+"==",d};function Z(s,p){var v,d=K(s);if(s=d[0],d[1]){var N=[],_=s.length,M=0,Q;for(v=0;v<_;++v)Q=s.charCodeAt(v),Q<128?N[M++]=Q:Q<2048?(N[M++]=192|Q>>>6,N[M++]=128|Q&63):Q<55296||Q>=57344?(N[M++]=224|Q>>>12,N[M++]=128|Q>>>6&63,N[M++]=128|Q&63):(Q=65536+((Q&1023)<<10|s.charCodeAt(++v)&1023),N[M++]=240|Q>>>18,N[M++]=128|Q>>>12&63,N[M++]=128|Q>>>6&63,N[M++]=128|Q&63);s=N}s.length>64&&(s=new U(!0).update(s).array());var Ue=[],Rt=[];for(v=0;v<64;++v){var Vt=s[v]||0;Ue[v]=92^Vt,Rt[v]=54^Vt}U.call(this,p),this.update(Rt),this.oKeyPad=Ue,this.inner=!0,this.sharedMemory=p}Z.prototype=new U,Z.prototype.finalize=function(){if(U.prototype.finalize.call(this),this.inner){this.inner=!1;var s=this.array();U.call(this,this.sharedMemory),this.update(this.oKeyPad),this.update(s),U.prototype.finalize.call(this)}};var me=ne();me.md5=me,me.md5.hmac=de(),l?yr.exports=me:(n.md5=me,h&&define(function(){return me}))})()});var ji=["top","right","bottom","left"],Ti=["start","end"],_i=ji.reduce((t,e)=>t.concat(e,e+"-"+Ti[0],e+"-"+Ti[1]),[]),Et=Math.min,tt=Math.max,hr=Math.round,pr=Math.floor,nn=t=>({x:t,y:t}),Uo={left:"right",right:"left",bottom:"top",top:"bottom"},Yo={start:"end",end:"start"};function Jr(t,e,r){return tt(t,Et(e,r))}function jt(t,e){return typeof t=="function"?t(e):t}function pt(t){return t.split("-")[0]}function xt(t){return t.split("-")[1]}function Bi(t){return t==="x"?"y":"x"}function Zr(t){return t==="y"?"height":"width"}function Pn(t){return["top","bottom"].includes(pt(t))?"y":"x"}function Qr(t){return Bi(Pn(t))}function Hi(t,e,r){r===void 0&&(r=!1);let n=xt(t),i=Qr(t),o=Zr(i),l=i==="x"?n===(r?"end":"start")?"right":"left":n==="start"?"bottom":"top";return e.reference[o]>e.floating[o]&&(l=mr(l)),[l,mr(l)]}function Xo(t){let e=mr(t);return[vr(t),e,vr(e)]}function vr(t){return t.replace(/start|end/g,e=>Yo[e])}function qo(t,e,r){let n=["left","right"],i=["right","left"],o=["top","bottom"],l=["bottom","top"];switch(t){case"top":case"bottom":return r?e?i:n:e?n:i;case"left":case"right":return e?o:l;default:return[]}}function Go(t,e,r,n){let i=xt(t),o=qo(pt(t),r==="start",n);return i&&(o=o.map(l=>l+"-"+i),e&&(o=o.concat(o.map(vr)))),o}function mr(t){return t.replace(/left|right|bottom|top/g,e=>Uo[e])}function Ko(t){return{top:0,right:0,bottom:0,left:0,...t}}function ei(t){return typeof t!="number"?Ko(t):{top:t,right:t,bottom:t,left:t}}function Dn(t){return{...t,top:t.y,left:t.x,right:t.x+t.width,bottom:t.y+t.height}}function Pi(t,e,r){let{reference:n,floating:i}=t,o=Pn(e),l=Qr(e),h=Zr(l),u=pt(e),f=o==="y",y=n.x+n.width/2-i.width/2,b=n.y+n.height/2-i.height/2,A=n[h]/2-i[h]/2,E;switch(u){case"top":E={x:y,y:n.y-i.height};break;case"bottom":E={x:y,y:n.y+n.height};break;case"right":E={x:n.x+n.width,y:b};break;case"left":E={x:n.x-i.width,y:b};break;default:E={x:n.x,y:n.y}}switch(xt(e)){case"start":E[l]-=A*(r&&f?-1:1);break;case"end":E[l]+=A*(r&&f?-1:1);break}return E}var Jo=async(t,e,r)=>{let{placement:n="bottom",strategy:i="absolute",middleware:o=[],platform:l}=r,h=o.filter(Boolean),u=await(l.isRTL==null?void 0:l.isRTL(e)),f=await l.getElementRects({reference:t,floating:e,strategy:i}),{x:y,y:b}=Pi(f,n,u),A=n,E={},O=0;for(let P=0;P({name:"arrow",options:t,async fn(e){let{x:r,y:n,placement:i,rects:o,platform:l,elements:h,middlewareData:u}=e,{element:f,padding:y=0}=jt(t,e)||{};if(f==null)return{};let b=ei(y),A={x:r,y:n},E=Qr(i),O=Zr(E),P=await l.getDimensions(f),R=E==="y",$=R?"top":"left",B=R?"bottom":"right",K=R?"clientHeight":"clientWidth",X=o.reference[O]+o.reference[E]-A[E]-o.floating[O],ne=A[E]-o.reference[E],J=await(l.getOffsetParent==null?void 0:l.getOffsetParent(f)),V=J?J[K]:0;(!V||!await(l.isElement==null?void 0:l.isElement(J)))&&(V=h.floating[K]||o.floating[O]);let de=X/2-ne/2,U=V/2-P[O]/2-1,Z=Et(b[$],U),me=Et(b[B],U),s=Z,p=V-P[O]-me,v=V/2-P[O]/2+de,d=Jr(s,v,p),N=!u.arrow&&xt(i)!=null&&v!==d&&o.reference[O]/2-(vxt(i)===t),...r.filter(i=>xt(i)!==t)]:r.filter(i=>pt(i)===i)).filter(i=>t?xt(i)===t||(e?vr(i)!==i:!1):!0)}var ea=function(t){return t===void 0&&(t={}),{name:"autoPlacement",options:t,async fn(e){var r,n,i;let{rects:o,middlewareData:l,placement:h,platform:u,elements:f}=e,{crossAxis:y=!1,alignment:b,allowedPlacements:A=_i,autoAlignment:E=!0,...O}=jt(t,e),P=b!==void 0||A===_i?Qo(b||null,E,A):A,R=await Tn(e,O),$=((r=l.autoPlacement)==null?void 0:r.index)||0,B=P[$];if(B==null)return{};let K=Hi(B,o,await(u.isRTL==null?void 0:u.isRTL(f.floating)));if(h!==B)return{reset:{placement:P[0]}};let X=[R[pt(B)],R[K[0]],R[K[1]]],ne=[...((n=l.autoPlacement)==null?void 0:n.overflows)||[],{placement:B,overflows:X}],J=P[$+1];if(J)return{data:{index:$+1,overflows:ne},reset:{placement:J}};let V=ne.map(Z=>{let me=xt(Z.placement);return[Z.placement,me&&y?Z.overflows.slice(0,2).reduce((s,p)=>s+p,0):Z.overflows[0],Z.overflows]}).sort((Z,me)=>Z[1]-me[1]),U=((i=V.filter(Z=>Z[2].slice(0,xt(Z[0])?2:3).every(me=>me<=0))[0])==null?void 0:i[0])||V[0][0];return U!==h?{data:{index:$+1,overflows:ne},reset:{placement:U}}:{}}}},ta=function(t){return t===void 0&&(t={}),{name:"flip",options:t,async fn(e){var r,n;let{placement:i,middlewareData:o,rects:l,initialPlacement:h,platform:u,elements:f}=e,{mainAxis:y=!0,crossAxis:b=!0,fallbackPlacements:A,fallbackStrategy:E="bestFit",fallbackAxisSideDirection:O="none",flipAlignment:P=!0,...R}=jt(t,e);if((r=o.arrow)!=null&&r.alignmentOffset)return{};let $=pt(i),B=pt(h)===h,K=await(u.isRTL==null?void 0:u.isRTL(f.floating)),X=A||(B||!P?[mr(h)]:Xo(h));!A&&O!=="none"&&X.push(...Go(h,P,O,K));let ne=[h,...X],J=await Tn(e,R),V=[],de=((n=o.flip)==null?void 0:n.overflows)||[];if(y&&V.push(J[$]),b){let s=Hi(i,l,K);V.push(J[s[0]],J[s[1]])}if(de=[...de,{placement:i,overflows:V}],!V.every(s=>s<=0)){var U,Z;let s=(((U=o.flip)==null?void 0:U.index)||0)+1,p=ne[s];if(p)return{data:{index:s,overflows:de},reset:{placement:p}};let v=(Z=de.filter(d=>d.overflows[0]<=0).sort((d,N)=>d.overflows[1]-N.overflows[1])[0])==null?void 0:Z.placement;if(!v)switch(E){case"bestFit":{var me;let d=(me=de.map(N=>[N.placement,N.overflows.filter(_=>_>0).reduce((_,M)=>_+M,0)]).sort((N,_)=>N[1]-_[1])[0])==null?void 0:me[0];d&&(v=d);break}case"initialPlacement":v=h;break}if(i!==v)return{reset:{placement:v}}}return{}}}};function Mi(t,e){return{top:t.top-e.height,right:t.right-e.width,bottom:t.bottom-e.height,left:t.left-e.width}}function Ri(t){return ji.some(e=>t[e]>=0)}var na=function(t){return t===void 0&&(t={}),{name:"hide",options:t,async fn(e){let{rects:r}=e,{strategy:n="referenceHidden",...i}=jt(t,e);switch(n){case"referenceHidden":{let o=await Tn(e,{...i,elementContext:"reference"}),l=Mi(o,r.reference);return{data:{referenceHiddenOffsets:l,referenceHidden:Ri(l)}}}case"escaped":{let o=await Tn(e,{...i,altBoundary:!0}),l=Mi(o,r.floating);return{data:{escapedOffsets:l,escaped:Ri(l)}}}default:return{}}}}};function $i(t){let e=Et(...t.map(o=>o.left)),r=Et(...t.map(o=>o.top)),n=tt(...t.map(o=>o.right)),i=tt(...t.map(o=>o.bottom));return{x:e,y:r,width:n-e,height:i-r}}function ra(t){let e=t.slice().sort((i,o)=>i.y-o.y),r=[],n=null;for(let i=0;in.height/2?r.push([o]):r[r.length-1].push(o),n=o}return r.map(i=>Dn($i(i)))}var ia=function(t){return t===void 0&&(t={}),{name:"inline",options:t,async fn(e){let{placement:r,elements:n,rects:i,platform:o,strategy:l}=e,{padding:h=2,x:u,y:f}=jt(t,e),y=Array.from(await(o.getClientRects==null?void 0:o.getClientRects(n.reference))||[]),b=ra(y),A=Dn($i(y)),E=ei(h);function O(){if(b.length===2&&b[0].left>b[1].right&&u!=null&&f!=null)return b.find(R=>u>R.left-E.left&&uR.top-E.top&&f=2){if(Pn(r)==="y"){let Z=b[0],me=b[b.length-1],s=pt(r)==="top",p=Z.top,v=me.bottom,d=s?Z.left:me.left,N=s?Z.right:me.right,_=N-d,M=v-p;return{top:p,bottom:v,left:d,right:N,width:_,height:M,x:d,y:p}}let R=pt(r)==="left",$=tt(...b.map(Z=>Z.right)),B=Et(...b.map(Z=>Z.left)),K=b.filter(Z=>R?Z.left===B:Z.right===$),X=K[0].top,ne=K[K.length-1].bottom,J=B,V=$,de=V-J,U=ne-X;return{top:X,bottom:ne,left:J,right:V,width:de,height:U,x:J,y:X}}return A}let P=await o.getElementRects({reference:{getBoundingClientRect:O},floating:n.floating,strategy:l});return i.reference.x!==P.reference.x||i.reference.y!==P.reference.y||i.reference.width!==P.reference.width||i.reference.height!==P.reference.height?{reset:{rects:P}}:{}}}};async function oa(t,e){let{placement:r,platform:n,elements:i}=t,o=await(n.isRTL==null?void 0:n.isRTL(i.floating)),l=pt(r),h=xt(r),u=Pn(r)==="y",f=["left","top"].includes(l)?-1:1,y=o&&u?-1:1,b=jt(e,t),{mainAxis:A,crossAxis:E,alignmentAxis:O}=typeof b=="number"?{mainAxis:b,crossAxis:0,alignmentAxis:null}:{mainAxis:0,crossAxis:0,alignmentAxis:null,...b};return h&&typeof O=="number"&&(E=h==="end"?O*-1:O),u?{x:E*y,y:A*f}:{x:A*f,y:E*y}}var Wi=function(t){return t===void 0&&(t=0),{name:"offset",options:t,async fn(e){var r,n;let{x:i,y:o,placement:l,middlewareData:h}=e,u=await oa(e,t);return l===((r=h.offset)==null?void 0:r.placement)&&(n=h.arrow)!=null&&n.alignmentOffset?{}:{x:i+u.x,y:o+u.y,data:{...u,placement:l}}}}},aa=function(t){return t===void 0&&(t={}),{name:"shift",options:t,async fn(e){let{x:r,y:n,placement:i}=e,{mainAxis:o=!0,crossAxis:l=!1,limiter:h={fn:R=>{let{x:$,y:B}=R;return{x:$,y:B}}},...u}=jt(t,e),f={x:r,y:n},y=await Tn(e,u),b=Pn(pt(i)),A=Bi(b),E=f[A],O=f[b];if(o){let R=A==="y"?"top":"left",$=A==="y"?"bottom":"right",B=E+y[R],K=E-y[$];E=Jr(B,E,K)}if(l){let R=b==="y"?"top":"left",$=b==="y"?"bottom":"right",B=O+y[R],K=O-y[$];O=Jr(B,O,K)}let P=h.fn({...e,[A]:E,[b]:O});return{...P,data:{x:P.x-r,y:P.y-n}}}}},sa=function(t){return t===void 0&&(t={}),{name:"size",options:t,async fn(e){let{placement:r,rects:n,platform:i,elements:o}=e,{apply:l=()=>{},...h}=jt(t,e),u=await Tn(e,h),f=pt(r),y=xt(r),b=Pn(r)==="y",{width:A,height:E}=n.floating,O,P;f==="top"||f==="bottom"?(O=f,P=y===(await(i.isRTL==null?void 0:i.isRTL(o.floating))?"start":"end")?"left":"right"):(P=f,O=y==="end"?"top":"bottom");let R=E-u[O],$=A-u[P],B=!e.middlewareData.shift,K=R,X=$;if(b){let J=A-u.left-u.right;X=y||B?Et($,J):J}else{let J=E-u.top-u.bottom;K=y||B?Et(R,J):J}if(B&&!y){let J=tt(u.left,0),V=tt(u.right,0),de=tt(u.top,0),U=tt(u.bottom,0);b?X=A-2*(J!==0||V!==0?J+V:tt(u.left,u.right)):K=E-2*(de!==0||U!==0?de+U:tt(u.top,u.bottom))}await l({...e,availableWidth:X,availableHeight:K});let ne=await i.getDimensions(o.floating);return A!==ne.width||E!==ne.height?{reset:{rects:!0}}:{}}}};function rn(t){return Vi(t)?(t.nodeName||"").toLowerCase():"#document"}function lt(t){var e;return(t==null||(e=t.ownerDocument)==null?void 0:e.defaultView)||window}function Bt(t){var e;return(e=(Vi(t)?t.ownerDocument:t.document)||window.document)==null?void 0:e.documentElement}function Vi(t){return t instanceof Node||t instanceof lt(t).Node}function kt(t){return t instanceof Element||t instanceof lt(t).Element}function _t(t){return t instanceof HTMLElement||t instanceof lt(t).HTMLElement}function Ii(t){return typeof ShadowRoot>"u"?!1:t instanceof ShadowRoot||t instanceof lt(t).ShadowRoot}function Un(t){let{overflow:e,overflowX:r,overflowY:n,display:i}=ht(t);return/auto|scroll|overlay|hidden|clip/.test(e+n+r)&&!["inline","contents"].includes(i)}function la(t){return["table","td","th"].includes(rn(t))}function ti(t){let e=ni(),r=ht(t);return r.transform!=="none"||r.perspective!=="none"||(r.containerType?r.containerType!=="normal":!1)||!e&&(r.backdropFilter?r.backdropFilter!=="none":!1)||!e&&(r.filter?r.filter!=="none":!1)||["transform","perspective","filter"].some(n=>(r.willChange||"").includes(n))||["paint","layout","strict","content"].some(n=>(r.contain||"").includes(n))}function ca(t){let e=_n(t);for(;_t(e)&&!gr(e);){if(ti(e))return e;e=_n(e)}return null}function ni(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}function gr(t){return["html","body","#document"].includes(rn(t))}function ht(t){return lt(t).getComputedStyle(t)}function br(t){return kt(t)?{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}:{scrollLeft:t.pageXOffset,scrollTop:t.pageYOffset}}function _n(t){if(rn(t)==="html")return t;let e=t.assignedSlot||t.parentNode||Ii(t)&&t.host||Bt(t);return Ii(e)?e.host:e}function zi(t){let e=_n(t);return gr(e)?t.ownerDocument?t.ownerDocument.body:t.body:_t(e)&&Un(e)?e:zi(e)}function zn(t,e,r){var n;e===void 0&&(e=[]),r===void 0&&(r=!0);let i=zi(t),o=i===((n=t.ownerDocument)==null?void 0:n.body),l=lt(i);return o?e.concat(l,l.visualViewport||[],Un(i)?i:[],l.frameElement&&r?zn(l.frameElement):[]):e.concat(i,zn(i,[],r))}function Ui(t){let e=ht(t),r=parseFloat(e.width)||0,n=parseFloat(e.height)||0,i=_t(t),o=i?t.offsetWidth:r,l=i?t.offsetHeight:n,h=hr(r)!==o||hr(n)!==l;return h&&(r=o,n=l),{width:r,height:n,$:h}}function ri(t){return kt(t)?t:t.contextElement}function Cn(t){let e=ri(t);if(!_t(e))return nn(1);let r=e.getBoundingClientRect(),{width:n,height:i,$:o}=Ui(e),l=(o?hr(r.width):r.width)/n,h=(o?hr(r.height):r.height)/i;return(!l||!Number.isFinite(l))&&(l=1),(!h||!Number.isFinite(h))&&(h=1),{x:l,y:h}}var fa=nn(0);function Yi(t){let e=lt(t);return!ni()||!e.visualViewport?fa:{x:e.visualViewport.offsetLeft,y:e.visualViewport.offsetTop}}function ua(t,e,r){return e===void 0&&(e=!1),!r||e&&r!==lt(t)?!1:e}function vn(t,e,r,n){e===void 0&&(e=!1),r===void 0&&(r=!1);let i=t.getBoundingClientRect(),o=ri(t),l=nn(1);e&&(n?kt(n)&&(l=Cn(n)):l=Cn(t));let h=ua(o,r,n)?Yi(o):nn(0),u=(i.left+h.x)/l.x,f=(i.top+h.y)/l.y,y=i.width/l.x,b=i.height/l.y;if(o){let A=lt(o),E=n&&kt(n)?lt(n):n,O=A,P=O.frameElement;for(;P&&n&&E!==O;){let R=Cn(P),$=P.getBoundingClientRect(),B=ht(P),K=$.left+(P.clientLeft+parseFloat(B.paddingLeft))*R.x,X=$.top+(P.clientTop+parseFloat(B.paddingTop))*R.y;u*=R.x,f*=R.y,y*=R.x,b*=R.y,u+=K,f+=X,O=lt(P),P=O.frameElement}}return Dn({width:y,height:b,x:u,y:f})}var da=[":popover-open",":modal"];function Xi(t){return da.some(e=>{try{return t.matches(e)}catch{return!1}})}function pa(t){let{elements:e,rect:r,offsetParent:n,strategy:i}=t,o=i==="fixed",l=Bt(n),h=e?Xi(e.floating):!1;if(n===l||h&&o)return r;let u={scrollLeft:0,scrollTop:0},f=nn(1),y=nn(0),b=_t(n);if((b||!b&&!o)&&((rn(n)!=="body"||Un(l))&&(u=br(n)),_t(n))){let A=vn(n);f=Cn(n),y.x=A.x+n.clientLeft,y.y=A.y+n.clientTop}return{width:r.width*f.x,height:r.height*f.y,x:r.x*f.x-u.scrollLeft*f.x+y.x,y:r.y*f.y-u.scrollTop*f.y+y.y}}function ha(t){return Array.from(t.getClientRects())}function qi(t){return vn(Bt(t)).left+br(t).scrollLeft}function va(t){let e=Bt(t),r=br(t),n=t.ownerDocument.body,i=tt(e.scrollWidth,e.clientWidth,n.scrollWidth,n.clientWidth),o=tt(e.scrollHeight,e.clientHeight,n.scrollHeight,n.clientHeight),l=-r.scrollLeft+qi(t),h=-r.scrollTop;return ht(n).direction==="rtl"&&(l+=tt(e.clientWidth,n.clientWidth)-i),{width:i,height:o,x:l,y:h}}function ma(t,e){let r=lt(t),n=Bt(t),i=r.visualViewport,o=n.clientWidth,l=n.clientHeight,h=0,u=0;if(i){o=i.width,l=i.height;let f=ni();(!f||f&&e==="fixed")&&(h=i.offsetLeft,u=i.offsetTop)}return{width:o,height:l,x:h,y:u}}function ga(t,e){let r=vn(t,!0,e==="fixed"),n=r.top+t.clientTop,i=r.left+t.clientLeft,o=_t(t)?Cn(t):nn(1),l=t.clientWidth*o.x,h=t.clientHeight*o.y,u=i*o.x,f=n*o.y;return{width:l,height:h,x:u,y:f}}function Fi(t,e,r){let n;if(e==="viewport")n=ma(t,r);else if(e==="document")n=va(Bt(t));else if(kt(e))n=ga(e,r);else{let i=Yi(t);n={...e,x:e.x-i.x,y:e.y-i.y}}return Dn(n)}function Gi(t,e){let r=_n(t);return r===e||!kt(r)||gr(r)?!1:ht(r).position==="fixed"||Gi(r,e)}function ba(t,e){let r=e.get(t);if(r)return r;let n=zn(t,[],!1).filter(h=>kt(h)&&rn(h)!=="body"),i=null,o=ht(t).position==="fixed",l=o?_n(t):t;for(;kt(l)&&!gr(l);){let h=ht(l),u=ti(l);!u&&h.position==="fixed"&&(i=null),(o?!u&&!i:!u&&h.position==="static"&&!!i&&["absolute","fixed"].includes(i.position)||Un(l)&&!u&&Gi(t,l))?n=n.filter(y=>y!==l):i=h,l=_n(l)}return e.set(t,n),n}function ya(t){let{element:e,boundary:r,rootBoundary:n,strategy:i}=t,l=[...r==="clippingAncestors"?ba(e,this._c):[].concat(r),n],h=l[0],u=l.reduce((f,y)=>{let b=Fi(e,y,i);return f.top=tt(b.top,f.top),f.right=Et(b.right,f.right),f.bottom=Et(b.bottom,f.bottom),f.left=tt(b.left,f.left),f},Fi(e,h,i));return{width:u.right-u.left,height:u.bottom-u.top,x:u.left,y:u.top}}function wa(t){let{width:e,height:r}=Ui(t);return{width:e,height:r}}function xa(t,e,r){let n=_t(e),i=Bt(e),o=r==="fixed",l=vn(t,!0,o,e),h={scrollLeft:0,scrollTop:0},u=nn(0);if(n||!n&&!o)if((rn(e)!=="body"||Un(i))&&(h=br(e)),n){let b=vn(e,!0,o,e);u.x=b.x+e.clientLeft,u.y=b.y+e.clientTop}else i&&(u.x=qi(i));let f=l.left+h.scrollLeft-u.x,y=l.top+h.scrollTop-u.y;return{x:f,y,width:l.width,height:l.height}}function Li(t,e){return!_t(t)||ht(t).position==="fixed"?null:e?e(t):t.offsetParent}function Ki(t,e){let r=lt(t);if(!_t(t)||Xi(t))return r;let n=Li(t,e);for(;n&&la(n)&&ht(n).position==="static";)n=Li(n,e);return n&&(rn(n)==="html"||rn(n)==="body"&&ht(n).position==="static"&&!ti(n))?r:n||ca(t)||r}var Ea=async function(t){let e=this.getOffsetParent||Ki,r=this.getDimensions;return{reference:xa(t.reference,await e(t.floating),t.strategy),floating:{x:0,y:0,...await r(t.floating)}}};function Oa(t){return ht(t).direction==="rtl"}var Sa={convertOffsetParentRelativeRectToViewportRelativeRect:pa,getDocumentElement:Bt,getClippingRect:ya,getOffsetParent:Ki,getElementRects:Ea,getClientRects:ha,getDimensions:wa,getScale:Cn,isElement:kt,isRTL:Oa};function Aa(t,e){let r=null,n,i=Bt(t);function o(){var h;clearTimeout(n),(h=r)==null||h.disconnect(),r=null}function l(h,u){h===void 0&&(h=!1),u===void 0&&(u=1),o();let{left:f,top:y,width:b,height:A}=t.getBoundingClientRect();if(h||e(),!b||!A)return;let E=pr(y),O=pr(i.clientWidth-(f+b)),P=pr(i.clientHeight-(y+A)),R=pr(f),B={rootMargin:-E+"px "+-O+"px "+-P+"px "+-R+"px",threshold:tt(0,Et(1,u))||1},K=!0;function X(ne){let J=ne[0].intersectionRatio;if(J!==u){if(!K)return l();J?l(!1,J):n=setTimeout(()=>{l(!1,1e-7)},100)}K=!1}try{r=new IntersectionObserver(X,{...B,root:i.ownerDocument})}catch{r=new IntersectionObserver(X,B)}r.observe(t)}return l(!0),o}function Ni(t,e,r,n){n===void 0&&(n={});let{ancestorScroll:i=!0,ancestorResize:o=!0,elementResize:l=typeof ResizeObserver=="function",layoutShift:h=typeof IntersectionObserver=="function",animationFrame:u=!1}=n,f=ri(t),y=i||o?[...f?zn(f):[],...zn(e)]:[];y.forEach($=>{i&&$.addEventListener("scroll",r,{passive:!0}),o&&$.addEventListener("resize",r)});let b=f&&h?Aa(f,r):null,A=-1,E=null;l&&(E=new ResizeObserver($=>{let[B]=$;B&&B.target===f&&E&&(E.unobserve(e),cancelAnimationFrame(A),A=requestAnimationFrame(()=>{var K;(K=E)==null||K.observe(e)})),r()}),f&&!u&&E.observe(f),E.observe(e));let O,P=u?vn(t):null;u&&R();function R(){let $=vn(t);P&&($.x!==P.x||$.y!==P.y||$.width!==P.width||$.height!==P.height)&&r(),P=$,O=requestAnimationFrame(R)}return r(),()=>{var $;y.forEach(B=>{i&&B.removeEventListener("scroll",r),o&&B.removeEventListener("resize",r)}),b?.(),($=E)==null||$.disconnect(),E=null,u&&cancelAnimationFrame(O)}}var ii=ea,Ji=aa,Zi=ta,Qi=sa,eo=na,to=Zo,no=ia,ki=(t,e,r)=>{let n=new Map,i={platform:Sa,...r},o={...i.platform,_c:n};return Jo(t,e,{...i,platform:o})},Ca=t=>{let e={placement:"bottom",strategy:"absolute",middleware:[]},r=Object.keys(t),n=i=>t[i];return r.includes("offset")&&e.middleware.push(Wi(n("offset"))),r.includes("teleport")&&(e.strategy="fixed"),r.includes("placement")&&(e.placement=n("placement")),r.includes("autoPlacement")&&!r.includes("flip")&&e.middleware.push(ii(n("autoPlacement"))),r.includes("flip")&&e.middleware.push(Zi(n("flip"))),r.includes("shift")&&e.middleware.push(Ji(n("shift"))),r.includes("inline")&&e.middleware.push(no(n("inline"))),r.includes("arrow")&&e.middleware.push(to(n("arrow"))),r.includes("hide")&&e.middleware.push(eo(n("hide"))),r.includes("size")&&e.middleware.push(Qi(n("size"))),e},Da=(t,e)=>{let r={component:{trap:!1},float:{placement:"bottom",strategy:"absolute",middleware:[]}},n=i=>t[t.indexOf(i)+1];if(t.includes("trap")&&(r.component.trap=!0),t.includes("teleport")&&(r.float.strategy="fixed"),t.includes("offset")&&r.float.middleware.push(Wi(e.offset||10)),t.includes("placement")&&(r.float.placement=n("placement")),t.includes("autoPlacement")&&!t.includes("flip")&&r.float.middleware.push(ii(e.autoPlacement)),t.includes("flip")&&r.float.middleware.push(Zi(e.flip)),t.includes("shift")&&r.float.middleware.push(Ji(e.shift)),t.includes("inline")&&r.float.middleware.push(no(e.inline)),t.includes("arrow")&&r.float.middleware.push(to(e.arrow)),t.includes("hide")&&r.float.middleware.push(eo(e.hide)),t.includes("size")){let i=e.size?.availableWidth??null,o=e.size?.availableHeight??null;i&&delete e.size.availableWidth,o&&delete e.size.availableHeight,r.float.middleware.push(Qi({...e.size,apply({availableWidth:l,availableHeight:h,elements:u}){Object.assign(u.floating.style,{maxWidth:`${i??l}px`,maxHeight:`${o??h}px`})}}))}return r},Ta=t=>{var e="0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz".split(""),r="";t||(t=Math.floor(Math.random()*e.length));for(var n=0;n{}){let r=!1;return function(){r?e.apply(this,arguments):(r=!0,t.apply(this,arguments))}}function Pa(t){let e={dismissable:!0,trap:!1};function r(n,i=null){if(n){if(n.hasAttribute("aria-expanded")||n.setAttribute("aria-expanded",!1),i.hasAttribute("id"))n.setAttribute("aria-controls",i.getAttribute("id"));else{let o=`panel-${Ta(8)}`;n.setAttribute("aria-controls",o),i.setAttribute("id",o)}i.setAttribute("aria-modal",!0),i.setAttribute("role","dialog")}}t.magic("float",n=>(i={},o={})=>{let l={...e,...o},h=Object.keys(i).length>0?Ca(i):{middleware:[ii()]},u=n,f=n.parentElement.closest("[x-data]"),y=f.querySelector('[x-ref="panel"]');r(u,y);function b(){return y.style.display=="block"}function A(){y.style.display="none",u.setAttribute("aria-expanded","false"),l.trap&&y.setAttribute("x-trap","false"),Ni(n,y,P)}function E(){y.style.display="block",u.setAttribute("aria-expanded","true"),l.trap&&y.setAttribute("x-trap","true"),P()}function O(){b()?A():E()}async function P(){return await ki(n,y,h).then(({middlewareData:R,placement:$,x:B,y:K})=>{if(R.arrow){let X=R.arrow?.x,ne=R.arrow?.y,J=h.middleware.filter(de=>de.name=="arrow")[0].options.element,V={top:"bottom",right:"left",bottom:"top",left:"right"}[$.split("-")[0]];Object.assign(J.style,{left:X!=null?`${X}px`:"",top:ne!=null?`${ne}px`:"",right:"",bottom:"",[V]:"-4px"})}if(R.hide){let{referenceHidden:X}=R.hide;Object.assign(y.style,{visibility:X?"hidden":"visible"})}Object.assign(y.style,{left:`${B}px`,top:`${K}px`})})}l.dismissable&&(window.addEventListener("click",R=>{!f.contains(R.target)&&b()&&O()}),window.addEventListener("keydown",R=>{R.key==="Escape"&&b()&&O()},!0)),O()}),t.directive("float",(n,{modifiers:i,expression:o},{evaluate:l,effect:h})=>{let u=o?l(o):{},f=i.length>0?Da(i,u):{},y=null;f.float.strategy=="fixed"&&(n.style.position="fixed");let b=V=>n.parentElement&&!n.parentElement.closest("[x-data]").contains(V.target)?n.close():null,A=V=>V.key==="Escape"?n.close():null,E=n.getAttribute("x-ref"),O=n.parentElement.closest("[x-data]"),P=O.querySelectorAll(`[\\@click^="$refs.${E}"]`),R=O.querySelectorAll(`[x-on\\:click^="$refs.${E}"]`);n.style.setProperty("display","none"),r([...P,...R][0],n),n._x_isShown=!1,n.trigger=null,n._x_doHide||(n._x_doHide=()=>{n.style.setProperty("display","none",i.includes("important")?"important":void 0)}),n._x_doShow||(n._x_doShow=()=>{n.style.setProperty("display","block",i.includes("important")?"important":void 0)});let $=()=>{n._x_doHide(),n._x_isShown=!1},B=()=>{n._x_doShow(),n._x_isShown=!0},K=()=>setTimeout(B),X=_a(V=>V?B():$(),V=>{typeof n._x_toggleAndCascadeWithTransitions=="function"?n._x_toggleAndCascadeWithTransitions(n,V,B,$):V?K():$()}),ne,J=!0;h(()=>l(V=>{!J&&V===ne||(i.includes("immediate")&&(V?K():$()),X(V),ne=V,J=!1)})),n.open=async function(V){n.trigger=V.currentTarget?V.currentTarget:V,X(!0),n.trigger.setAttribute("aria-expanded","true"),f.component.trap&&n.setAttribute("x-trap","true"),y=Ni(n.trigger,n,()=>{ki(n.trigger,n,f.float).then(({middlewareData:de,placement:U,x:Z,y:me})=>{if(de.arrow){let s=de.arrow?.x,p=de.arrow?.y,v=f.float.middleware.filter(N=>N.name=="arrow")[0].options.element,d={top:"bottom",right:"left",bottom:"top",left:"right"}[U.split("-")[0]];Object.assign(v.style,{left:s!=null?`${s}px`:"",top:p!=null?`${p}px`:"",right:"",bottom:"",[d]:"-4px"})}if(de.hide){let{referenceHidden:s}=de.hide;Object.assign(n.style,{visibility:s?"hidden":"visible"})}Object.assign(n.style,{left:`${Z}px`,top:`${me}px`})})}),window.addEventListener("click",b),window.addEventListener("keydown",A,!0)},n.close=function(){if(!n._x_isShown)return!1;X(!1),n.trigger.setAttribute("aria-expanded","false"),f.component.trap&&n.setAttribute("x-trap","false"),y(),window.removeEventListener("click",b),window.removeEventListener("keydown",A,!1)},n.toggle=function(V){n._x_isShown?n.close():n.open(V)}})}var ro=Pa;function Ma(t){t.store("lazyLoadedAssets",{loaded:new Set,check(l){return Array.isArray(l)?l.every(h=>this.loaded.has(h)):this.loaded.has(l)},markLoaded(l){Array.isArray(l)?l.forEach(h=>this.loaded.add(h)):this.loaded.add(l)}});function e(l){return new CustomEvent(l,{bubbles:!0,composed:!0,cancelable:!0})}function r(l,h={},u,f){let y=document.createElement(l);for(let[b,A]of Object.entries(h))y[b]=A;return u&&(f?u.insertBefore(y,f):u.appendChild(y)),y}function n(l,h,u={},f=null,y=null){let b=l==="link"?`link[href="${h}"]`:`script[src="${h}"]`;if(document.querySelector(b)||t.store("lazyLoadedAssets").check(h))return Promise.resolve();let A=l==="link"?{...u,href:h}:{...u,src:h},E=r(l,A,f,y);return new Promise((O,P)=>{E.onload=()=>{t.store("lazyLoadedAssets").markLoaded(h),O()},E.onerror=()=>{P(new Error(`Failed to load ${l}: ${h}`))}})}async function i(l,h,u=null,f=null){let y={type:"text/css",rel:"stylesheet"};h&&(y.media=h);let b=document.head,A=null;if(u&&f){let E=document.querySelector(`link[href*="${f}"]`);E?(b=E.parentNode,A=u==="before"?E:E.nextSibling):console.warn(`Target (${f}) not found for ${l}. Appending to head.`)}await n("link",l,y,b,A)}async function o(l,h,u=null,f=null){let y,b;u&&f&&(y=document.querySelector(`script[src*="${f}"]`),y?b=u==="before"?y:y.nextSibling:console.warn(`Target (${f}) not found for ${l}. Appending to body.`));let A=h.has("body-start")?"prepend":"append";await n("script",l,{},y||document[h.has("body-end")?"body":"head"],b)}t.directive("load-css",(l,{expression:h},{evaluate:u})=>{let f=u(h),y=l.media,b=l.getAttribute("data-dispatch"),A=l.getAttribute("data-css-before")?"before":l.getAttribute("data-css-after")?"after":null,E=l.getAttribute("data-css-before")||l.getAttribute("data-css-after")||null;Promise.all(f.map(O=>i(O,y,A,E))).then(()=>{b&&window.dispatchEvent(e(b+"-css"))}).catch(O=>{console.error(O)})}),t.directive("load-js",(l,{expression:h,modifiers:u},{evaluate:f})=>{let y=f(h),b=new Set(u),A=l.getAttribute("data-js-before")?"before":l.getAttribute("data-js-after")?"after":null,E=l.getAttribute("data-js-before")||l.getAttribute("data-js-after")||null,O=l.getAttribute("data-dispatch");Promise.all(y.map(P=>o(P,b,A,E))).then(()=>{O&&window.dispatchEvent(e(O+"-js"))}).catch(P=>{console.error(P)})})}var io=Ma;var ko=zo(so(),1);function lo(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),r.push.apply(r,n)}return r}function Mt(t){for(var e=1;e=0)&&(r[i]=t[i]);return r}function Fa(t,e){if(t==null)return{};var r=Ia(t,e),n,i;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(i=0;i=0)&&Object.prototype.propertyIsEnumerable.call(t,n)&&(r[n]=t[n])}return r}var La="1.15.2";function Ht(t){if(typeof window<"u"&&window.navigator)return!!navigator.userAgent.match(t)}var Wt=Ht(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i),er=Ht(/Edge/i),co=Ht(/firefox/i),Gn=Ht(/safari/i)&&!Ht(/chrome/i)&&!Ht(/android/i),bo=Ht(/iP(ad|od|hone)/i),yo=Ht(/chrome/i)&&Ht(/android/i),wo={capture:!1,passive:!1};function Ce(t,e,r){t.addEventListener(e,r,!Wt&&wo)}function Oe(t,e,r){t.removeEventListener(e,r,!Wt&&wo)}function _r(t,e){if(e){if(e[0]===">"&&(e=e.substring(1)),t)try{if(t.matches)return t.matches(e);if(t.msMatchesSelector)return t.msMatchesSelector(e);if(t.webkitMatchesSelector)return t.webkitMatchesSelector(e)}catch{return!1}return!1}}function Na(t){return t.host&&t!==document&&t.host.nodeType?t.host:t.parentNode}function St(t,e,r,n){if(t){r=r||document;do{if(e!=null&&(e[0]===">"?t.parentNode===r&&_r(t,e):_r(t,e))||n&&t===r)return t;if(t===r)break}while(t=Na(t))}return null}var fo=/\s+/g;function ct(t,e,r){if(t&&e)if(t.classList)t.classList[r?"add":"remove"](e);else{var n=(" "+t.className+" ").replace(fo," ").replace(" "+e+" "," ");t.className=(n+(r?" "+e:"")).replace(fo," ")}}function ae(t,e,r){var n=t&&t.style;if(n){if(r===void 0)return document.defaultView&&document.defaultView.getComputedStyle?r=document.defaultView.getComputedStyle(t,""):t.currentStyle&&(r=t.currentStyle),e===void 0?r:r[e];!(e in n)&&e.indexOf("webkit")===-1&&(e="-webkit-"+e),n[e]=r+(typeof r=="string"?"":"px")}}function Ln(t,e){var r="";if(typeof t=="string")r=t;else do{var n=ae(t,"transform");n&&n!=="none"&&(r=n+" "+r)}while(!e&&(t=t.parentNode));var i=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return i&&new i(r)}function xo(t,e,r){if(t){var n=t.getElementsByTagName(e),i=0,o=n.length;if(r)for(;i=o:l=i<=o,!l)return n;if(n===Pt())break;n=sn(n,!1)}return!1}function Nn(t,e,r,n){for(var i=0,o=0,l=t.children;o2&&arguments[2]!==void 0?arguments[2]:{},i=n.evt,o=Fa(n,za);tr.pluginEvent.bind(se)(e,r,Mt({dragEl:L,parentEl:ze,ghostEl:ue,rootEl:ke,nextEl:bn,lastDownEl:Ar,cloneEl:We,cloneHidden:an,dragStarted:Yn,putSortable:Ze,activeSortable:se.active,originalEvent:i,oldIndex:Fn,oldDraggableIndex:Jn,newIndex:ft,newDraggableIndex:on,hideGhostForTarget:_o,unhideGhostForTarget:Po,cloneNowHidden:function(){an=!0},cloneNowShown:function(){an=!1},dispatchSortableEvent:function(h){it({sortable:r,name:h,originalEvent:i})}},o))};function it(t){Va(Mt({putSortable:Ze,cloneEl:We,targetEl:L,rootEl:ke,oldIndex:Fn,oldDraggableIndex:Jn,newIndex:ft,newDraggableIndex:on},t))}var L,ze,ue,ke,bn,Ar,We,an,Fn,ft,Jn,on,wr,Ze,In=!1,Pr=!1,Mr=[],mn,Ot,si,li,ho,vo,Yn,Rn,Zn,Qn=!1,xr=!1,Cr,nt,ci=[],hi=!1,Rr=[],Fr=typeof document<"u",Er=bo,mo=er||Wt?"cssFloat":"float",Ua=Fr&&!yo&&!bo&&"draggable"in document.createElement("div"),Co=function(){if(Fr){if(Wt)return!1;var t=document.createElement("x");return t.style.cssText="pointer-events:auto",t.style.pointerEvents==="auto"}}(),Do=function(e,r){var n=ae(e),i=parseInt(n.width)-parseInt(n.paddingLeft)-parseInt(n.paddingRight)-parseInt(n.borderLeftWidth)-parseInt(n.borderRightWidth),o=Nn(e,0,r),l=Nn(e,1,r),h=o&&ae(o),u=l&&ae(l),f=h&&parseInt(h.marginLeft)+parseInt(h.marginRight)+qe(o).width,y=u&&parseInt(u.marginLeft)+parseInt(u.marginRight)+qe(l).width;if(n.display==="flex")return n.flexDirection==="column"||n.flexDirection==="column-reverse"?"vertical":"horizontal";if(n.display==="grid")return n.gridTemplateColumns.split(" ").length<=1?"vertical":"horizontal";if(o&&h.float&&h.float!=="none"){var b=h.float==="left"?"left":"right";return l&&(u.clear==="both"||u.clear===b)?"vertical":"horizontal"}return o&&(h.display==="block"||h.display==="flex"||h.display==="table"||h.display==="grid"||f>=i&&n[mo]==="none"||l&&n[mo]==="none"&&f+y>i)?"vertical":"horizontal"},Ya=function(e,r,n){var i=n?e.left:e.top,o=n?e.right:e.bottom,l=n?e.width:e.height,h=n?r.left:r.top,u=n?r.right:r.bottom,f=n?r.width:r.height;return i===h||o===u||i+l/2===h+f/2},Xa=function(e,r){var n;return Mr.some(function(i){var o=i[ut].options.emptyInsertThreshold;if(!(!o||bi(i))){var l=qe(i),h=e>=l.left-o&&e<=l.right+o,u=r>=l.top-o&&r<=l.bottom+o;if(h&&u)return n=i}}),n},To=function(e){function r(o,l){return function(h,u,f,y){var b=h.options.group.name&&u.options.group.name&&h.options.group.name===u.options.group.name;if(o==null&&(l||b))return!0;if(o==null||o===!1)return!1;if(l&&o==="clone")return o;if(typeof o=="function")return r(o(h,u,f,y),l)(h,u,f,y);var A=(l?h:u).options.group.name;return o===!0||typeof o=="string"&&o===A||o.join&&o.indexOf(A)>-1}}var n={},i=e.group;(!i||Sr(i)!="object")&&(i={name:i}),n.name=i.name,n.checkPull=r(i.pull,!0),n.checkPut=r(i.put),n.revertClone=i.revertClone,e.group=n},_o=function(){!Co&&ue&&ae(ue,"display","none")},Po=function(){!Co&&ue&&ae(ue,"display","")};Fr&&!yo&&document.addEventListener("click",function(t){if(Pr)return t.preventDefault(),t.stopPropagation&&t.stopPropagation(),t.stopImmediatePropagation&&t.stopImmediatePropagation(),Pr=!1,!1},!0);var gn=function(e){if(L){e=e.touches?e.touches[0]:e;var r=Xa(e.clientX,e.clientY);if(r){var n={};for(var i in e)e.hasOwnProperty(i)&&(n[i]=e[i]);n.target=n.rootEl=r,n.preventDefault=void 0,n.stopPropagation=void 0,r[ut]._onDragOver(n)}}},qa=function(e){L&&L.parentNode[ut]._isOutsideThisEl(e.target)};function se(t,e){if(!(t&&t.nodeType&&t.nodeType===1))throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(t));this.el=t,this.options=e=$t({},e),t[ut]=this;var r={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(t.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return Do(t,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(l,h){l.setData("Text",h.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:se.supportPointer!==!1&&"PointerEvent"in window&&!Gn,emptyInsertThreshold:5};tr.initializePlugins(this,t,r);for(var n in r)!(n in e)&&(e[n]=r[n]);To(e);for(var i in this)i.charAt(0)==="_"&&typeof this[i]=="function"&&(this[i]=this[i].bind(this));this.nativeDraggable=e.forceFallback?!1:Ua,this.nativeDraggable&&(this.options.touchStartThreshold=1),e.supportPointer?Ce(t,"pointerdown",this._onTapStart):(Ce(t,"mousedown",this._onTapStart),Ce(t,"touchstart",this._onTapStart)),this.nativeDraggable&&(Ce(t,"dragover",this),Ce(t,"dragenter",this)),Mr.push(this.el),e.store&&e.store.get&&this.sort(e.store.get(this)||[]),$t(this,Ha())}se.prototype={constructor:se,_isOutsideThisEl:function(e){!this.el.contains(e)&&e!==this.el&&(Rn=null)},_getDirection:function(e,r){return typeof this.options.direction=="function"?this.options.direction.call(this,e,r,L):this.options.direction},_onTapStart:function(e){if(e.cancelable){var r=this,n=this.el,i=this.options,o=i.preventOnFilter,l=e.type,h=e.touches&&e.touches[0]||e.pointerType&&e.pointerType==="touch"&&e,u=(h||e).target,f=e.target.shadowRoot&&(e.path&&e.path[0]||e.composedPath&&e.composedPath()[0])||u,y=i.filter;if(ns(n),!L&&!(/mousedown|pointerdown/.test(l)&&e.button!==0||i.disabled)&&!f.isContentEditable&&!(!this.nativeDraggable&&Gn&&u&&u.tagName.toUpperCase()==="SELECT")&&(u=St(u,i.draggable,n,!1),!(u&&u.animated)&&Ar!==u)){if(Fn=vt(u),Jn=vt(u,i.draggable),typeof y=="function"){if(y.call(this,e,u,this)){it({sortable:r,rootEl:f,name:"filter",targetEl:u,toEl:n,fromEl:n}),at("filter",r,{evt:e}),o&&e.cancelable&&e.preventDefault();return}}else if(y&&(y=y.split(",").some(function(b){if(b=St(f,b.trim(),n,!1),b)return it({sortable:r,rootEl:b,name:"filter",targetEl:u,fromEl:n,toEl:n}),at("filter",r,{evt:e}),!0}),y)){o&&e.cancelable&&e.preventDefault();return}i.handle&&!St(f,i.handle,n,!1)||this._prepareDragStart(e,h,u)}}},_prepareDragStart:function(e,r,n){var i=this,o=i.el,l=i.options,h=o.ownerDocument,u;if(n&&!L&&n.parentNode===o){var f=qe(n);if(ke=o,L=n,ze=L.parentNode,bn=L.nextSibling,Ar=n,wr=l.group,se.dragged=L,mn={target:L,clientX:(r||e).clientX,clientY:(r||e).clientY},ho=mn.clientX-f.left,vo=mn.clientY-f.top,this._lastX=(r||e).clientX,this._lastY=(r||e).clientY,L.style["will-change"]="all",u=function(){if(at("delayEnded",i,{evt:e}),se.eventCanceled){i._onDrop();return}i._disableDelayedDragEvents(),!co&&i.nativeDraggable&&(L.draggable=!0),i._triggerDragStart(e,r),it({sortable:i,name:"choose",originalEvent:e}),ct(L,l.chosenClass,!0)},l.ignore.split(",").forEach(function(y){xo(L,y.trim(),fi)}),Ce(h,"dragover",gn),Ce(h,"mousemove",gn),Ce(h,"touchmove",gn),Ce(h,"mouseup",i._onDrop),Ce(h,"touchend",i._onDrop),Ce(h,"touchcancel",i._onDrop),co&&this.nativeDraggable&&(this.options.touchStartThreshold=4,L.draggable=!0),at("delayStart",this,{evt:e}),l.delay&&(!l.delayOnTouchOnly||r)&&(!this.nativeDraggable||!(er||Wt))){if(se.eventCanceled){this._onDrop();return}Ce(h,"mouseup",i._disableDelayedDrag),Ce(h,"touchend",i._disableDelayedDrag),Ce(h,"touchcancel",i._disableDelayedDrag),Ce(h,"mousemove",i._delayedDragTouchMoveHandler),Ce(h,"touchmove",i._delayedDragTouchMoveHandler),l.supportPointer&&Ce(h,"pointermove",i._delayedDragTouchMoveHandler),i._dragStartTimer=setTimeout(u,l.delay)}else u()}},_delayedDragTouchMoveHandler:function(e){var r=e.touches?e.touches[0]:e;Math.max(Math.abs(r.clientX-this._lastX),Math.abs(r.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){L&&fi(L),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var e=this.el.ownerDocument;Oe(e,"mouseup",this._disableDelayedDrag),Oe(e,"touchend",this._disableDelayedDrag),Oe(e,"touchcancel",this._disableDelayedDrag),Oe(e,"mousemove",this._delayedDragTouchMoveHandler),Oe(e,"touchmove",this._delayedDragTouchMoveHandler),Oe(e,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(e,r){r=r||e.pointerType=="touch"&&e,!this.nativeDraggable||r?this.options.supportPointer?Ce(document,"pointermove",this._onTouchMove):r?Ce(document,"touchmove",this._onTouchMove):Ce(document,"mousemove",this._onTouchMove):(Ce(L,"dragend",this),Ce(ke,"dragstart",this._onDragStart));try{document.selection?Dr(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch{}},_dragStarted:function(e,r){if(In=!1,ke&&L){at("dragStarted",this,{evt:r}),this.nativeDraggable&&Ce(document,"dragover",qa);var n=this.options;!e&&ct(L,n.dragClass,!1),ct(L,n.ghostClass,!0),se.active=this,e&&this._appendGhost(),it({sortable:this,name:"start",originalEvent:r})}else this._nulling()},_emulateDragOver:function(){if(Ot){this._lastX=Ot.clientX,this._lastY=Ot.clientY,_o();for(var e=document.elementFromPoint(Ot.clientX,Ot.clientY),r=e;e&&e.shadowRoot&&(e=e.shadowRoot.elementFromPoint(Ot.clientX,Ot.clientY),e!==r);)r=e;if(L.parentNode[ut]._isOutsideThisEl(e),r)do{if(r[ut]){var n=void 0;if(n=r[ut]._onDragOver({clientX:Ot.clientX,clientY:Ot.clientY,target:e,rootEl:r}),n&&!this.options.dragoverBubble)break}e=r}while(r=r.parentNode);Po()}},_onTouchMove:function(e){if(mn){var r=this.options,n=r.fallbackTolerance,i=r.fallbackOffset,o=e.touches?e.touches[0]:e,l=ue&&Ln(ue,!0),h=ue&&l&&l.a,u=ue&&l&&l.d,f=Er&&nt&&po(nt),y=(o.clientX-mn.clientX+i.x)/(h||1)+(f?f[0]-ci[0]:0)/(h||1),b=(o.clientY-mn.clientY+i.y)/(u||1)+(f?f[1]-ci[1]:0)/(u||1);if(!se.active&&!In){if(n&&Math.max(Math.abs(o.clientX-this._lastX),Math.abs(o.clientY-this._lastY))=0&&(it({rootEl:ze,name:"add",toEl:ze,fromEl:ke,originalEvent:e}),it({sortable:this,name:"remove",toEl:ze,originalEvent:e}),it({rootEl:ze,name:"sort",toEl:ze,fromEl:ke,originalEvent:e}),it({sortable:this,name:"sort",toEl:ze,originalEvent:e})),Ze&&Ze.save()):ft!==Fn&&ft>=0&&(it({sortable:this,name:"update",toEl:ze,originalEvent:e}),it({sortable:this,name:"sort",toEl:ze,originalEvent:e})),se.active&&((ft==null||ft===-1)&&(ft=Fn,on=Jn),it({sortable:this,name:"end",toEl:ze,originalEvent:e}),this.save()))),this._nulling()},_nulling:function(){at("nulling",this),ke=L=ze=ue=bn=We=Ar=an=mn=Ot=Yn=ft=on=Fn=Jn=Rn=Zn=Ze=wr=se.dragged=se.ghost=se.clone=se.active=null,Rr.forEach(function(e){e.checked=!0}),Rr.length=si=li=0},handleEvent:function(e){switch(e.type){case"drop":case"dragend":this._onDrop(e);break;case"dragenter":case"dragover":L&&(this._onDragOver(e),Ga(e));break;case"selectstart":e.preventDefault();break}},toArray:function(){for(var e=[],r,n=this.el.children,i=0,o=n.length,l=this.options;ii.right+o||t.clientY>n.bottom&&t.clientX>n.left:t.clientY>i.bottom+o||t.clientX>n.right&&t.clientY>n.top}function Qa(t,e,r,n,i,o,l,h){var u=n?t.clientY:t.clientX,f=n?r.height:r.width,y=n?r.top:r.left,b=n?r.bottom:r.right,A=!1;if(!l){if(h&&Cry+f*o/2:ub-Cr)return-Zn}else if(u>y+f*(1-i)/2&&ub-f*o/2)?u>y+f/2?1:-1:0}function es(t){return vt(L){t.directive("sortable",e=>{let r=parseInt(e.dataset?.sortableAnimationDuration);r!==0&&!r&&(r=300),e.sortable=xi.create(e,{group:e.getAttribute("x-sortable-group"),draggable:"[x-sortable-item]",handle:"[x-sortable-handle]",dataIdAttr:"x-sortable-item",animation:r,ghostClass:"fi-sortable-ghost"})})};var is=Object.create,Si=Object.defineProperty,os=Object.getPrototypeOf,as=Object.prototype.hasOwnProperty,ss=Object.getOwnPropertyNames,ls=Object.getOwnPropertyDescriptor,cs=t=>Si(t,"__esModule",{value:!0}),Io=(t,e)=>()=>(e||(e={exports:{}},t(e.exports,e)),e.exports),fs=(t,e,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of ss(e))!as.call(t,n)&&n!=="default"&&Si(t,n,{get:()=>e[n],enumerable:!(r=ls(e,n))||r.enumerable});return t},Fo=t=>fs(cs(Si(t!=null?is(os(t)):{},"default",t&&t.__esModule&&"default"in t?{get:()=>t.default,enumerable:!0}:{value:t,enumerable:!0})),t),us=Io(t=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});function e(c){var a=c.getBoundingClientRect();return{width:a.width,height:a.height,top:a.top,right:a.right,bottom:a.bottom,left:a.left,x:a.left,y:a.top}}function r(c){if(c==null)return window;if(c.toString()!=="[object Window]"){var a=c.ownerDocument;return a&&a.defaultView||window}return c}function n(c){var a=r(c),g=a.pageXOffset,D=a.pageYOffset;return{scrollLeft:g,scrollTop:D}}function i(c){var a=r(c).Element;return c instanceof a||c instanceof Element}function o(c){var a=r(c).HTMLElement;return c instanceof a||c instanceof HTMLElement}function l(c){if(typeof ShadowRoot>"u")return!1;var a=r(c).ShadowRoot;return c instanceof a||c instanceof ShadowRoot}function h(c){return{scrollLeft:c.scrollLeft,scrollTop:c.scrollTop}}function u(c){return c===r(c)||!o(c)?n(c):h(c)}function f(c){return c?(c.nodeName||"").toLowerCase():null}function y(c){return((i(c)?c.ownerDocument:c.document)||window.document).documentElement}function b(c){return e(y(c)).left+n(c).scrollLeft}function A(c){return r(c).getComputedStyle(c)}function E(c){var a=A(c),g=a.overflow,D=a.overflowX,T=a.overflowY;return/auto|scroll|overlay|hidden/.test(g+T+D)}function O(c,a,g){g===void 0&&(g=!1);var D=y(a),T=e(c),F=o(a),W={scrollLeft:0,scrollTop:0},j={x:0,y:0};return(F||!F&&!g)&&((f(a)!=="body"||E(D))&&(W=u(a)),o(a)?(j=e(a),j.x+=a.clientLeft,j.y+=a.clientTop):D&&(j.x=b(D))),{x:T.left+W.scrollLeft-j.x,y:T.top+W.scrollTop-j.y,width:T.width,height:T.height}}function P(c){var a=e(c),g=c.offsetWidth,D=c.offsetHeight;return Math.abs(a.width-g)<=1&&(g=a.width),Math.abs(a.height-D)<=1&&(D=a.height),{x:c.offsetLeft,y:c.offsetTop,width:g,height:D}}function R(c){return f(c)==="html"?c:c.assignedSlot||c.parentNode||(l(c)?c.host:null)||y(c)}function $(c){return["html","body","#document"].indexOf(f(c))>=0?c.ownerDocument.body:o(c)&&E(c)?c:$(R(c))}function B(c,a){var g;a===void 0&&(a=[]);var D=$(c),T=D===((g=c.ownerDocument)==null?void 0:g.body),F=r(D),W=T?[F].concat(F.visualViewport||[],E(D)?D:[]):D,j=a.concat(W);return T?j:j.concat(B(R(W)))}function K(c){return["table","td","th"].indexOf(f(c))>=0}function X(c){return!o(c)||A(c).position==="fixed"?null:c.offsetParent}function ne(c){var a=navigator.userAgent.toLowerCase().indexOf("firefox")!==-1,g=navigator.userAgent.indexOf("Trident")!==-1;if(g&&o(c)){var D=A(c);if(D.position==="fixed")return null}for(var T=R(c);o(T)&&["html","body"].indexOf(f(T))<0;){var F=A(T);if(F.transform!=="none"||F.perspective!=="none"||F.contain==="paint"||["transform","perspective"].indexOf(F.willChange)!==-1||a&&F.willChange==="filter"||a&&F.filter&&F.filter!=="none")return T;T=T.parentNode}return null}function J(c){for(var a=r(c),g=X(c);g&&K(g)&&A(g).position==="static";)g=X(g);return g&&(f(g)==="html"||f(g)==="body"&&A(g).position==="static")?a:g||ne(c)||a}var V="top",de="bottom",U="right",Z="left",me="auto",s=[V,de,U,Z],p="start",v="end",d="clippingParents",N="viewport",_="popper",M="reference",Q=s.reduce(function(c,a){return c.concat([a+"-"+p,a+"-"+v])},[]),Ue=[].concat(s,[me]).reduce(function(c,a){return c.concat([a,a+"-"+p,a+"-"+v])},[]),Rt="beforeRead",Vt="read",Lr="afterRead",Nr="beforeMain",kr="main",zt="afterMain",nr="beforeWrite",jr="write",rr="afterWrite",It=[Rt,Vt,Lr,Nr,kr,zt,nr,jr,rr];function Br(c){var a=new Map,g=new Set,D=[];c.forEach(function(F){a.set(F.name,F)});function T(F){g.add(F.name);var W=[].concat(F.requires||[],F.requiresIfExists||[]);W.forEach(function(j){if(!g.has(j)){var q=a.get(j);q&&T(q)}}),D.push(F)}return c.forEach(function(F){g.has(F.name)||T(F)}),D}function mt(c){var a=Br(c);return It.reduce(function(g,D){return g.concat(a.filter(function(T){return T.phase===D}))},[])}function Ut(c){var a;return function(){return a||(a=new Promise(function(g){Promise.resolve().then(function(){a=void 0,g(c())})})),a}}function At(c){for(var a=arguments.length,g=new Array(a>1?a-1:0),D=1;D=0,D=g&&o(c)?J(c):c;return i(D)?a.filter(function(T){return i(T)&&kn(T,D)&&f(T)!=="body"}):[]}function wn(c,a,g){var D=a==="clippingParents"?yn(c):[].concat(a),T=[].concat(D,[g]),F=T[0],W=T.reduce(function(j,q){var oe=sr(c,q);return j.top=gt(oe.top,j.top),j.right=ln(oe.right,j.right),j.bottom=ln(oe.bottom,j.bottom),j.left=gt(oe.left,j.left),j},sr(c,F));return W.width=W.right-W.left,W.height=W.bottom-W.top,W.x=W.left,W.y=W.top,W}function cn(c){return c.split("-")[1]}function dt(c){return["top","bottom"].indexOf(c)>=0?"x":"y"}function lr(c){var a=c.reference,g=c.element,D=c.placement,T=D?ot(D):null,F=D?cn(D):null,W=a.x+a.width/2-g.width/2,j=a.y+a.height/2-g.height/2,q;switch(T){case V:q={x:W,y:a.y-g.height};break;case de:q={x:W,y:a.y+a.height};break;case U:q={x:a.x+a.width,y:j};break;case Z:q={x:a.x-g.width,y:j};break;default:q={x:a.x,y:a.y}}var oe=T?dt(T):null;if(oe!=null){var z=oe==="y"?"height":"width";switch(F){case p:q[oe]=q[oe]-(a[z]/2-g[z]/2);break;case v:q[oe]=q[oe]+(a[z]/2-g[z]/2);break}}return q}function cr(){return{top:0,right:0,bottom:0,left:0}}function fr(c){return Object.assign({},cr(),c)}function ur(c,a){return a.reduce(function(g,D){return g[D]=c,g},{})}function qt(c,a){a===void 0&&(a={});var g=a,D=g.placement,T=D===void 0?c.placement:D,F=g.boundary,W=F===void 0?d:F,j=g.rootBoundary,q=j===void 0?N:j,oe=g.elementContext,z=oe===void 0?_:oe,De=g.altBoundary,Le=De===void 0?!1:De,Ae=g.padding,xe=Ae===void 0?0:Ae,Me=fr(typeof xe!="number"?xe:ur(xe,s)),Ee=z===_?M:_,Be=c.elements.reference,Re=c.rects.popper,He=c.elements[Le?Ee:z],ce=wn(i(He)?He:He.contextElement||y(c.elements.popper),W,q),Pe=e(Be),Te=lr({reference:Pe,element:Re,strategy:"absolute",placement:T}),Ne=Xt(Object.assign({},Re,Te)),Fe=z===_?Ne:Pe,Ye={top:ce.top-Fe.top+Me.top,bottom:Fe.bottom-ce.bottom+Me.bottom,left:ce.left-Fe.left+Me.left,right:Fe.right-ce.right+Me.right},$e=c.modifiersData.offset;if(z===_&&$e){var Ve=$e[T];Object.keys(Ye).forEach(function(wt){var et=[U,de].indexOf(wt)>=0?1:-1,Lt=[V,de].indexOf(wt)>=0?"y":"x";Ye[wt]+=Ve[Lt]*et})}return Ye}var dr="Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.",zr="Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.",xn={placement:"bottom",modifiers:[],strategy:"absolute"};function fn(){for(var c=arguments.length,a=new Array(c),g=0;g100){console.error(zr);break}if(z.reset===!0){z.reset=!1,Pe=-1;continue}var Te=z.orderedModifiers[Pe],Ne=Te.fn,Fe=Te.options,Ye=Fe===void 0?{}:Fe,$e=Te.name;typeof Ne=="function"&&(z=Ne({state:z,options:Ye,name:$e,instance:Ae})||z)}}},update:Ut(function(){return new Promise(function(Ee){Ae.forceUpdate(),Ee(z)})}),destroy:function(){Me(),Le=!0}};if(!fn(j,q))return console.error(dr),Ae;Ae.setOptions(oe).then(function(Ee){!Le&&oe.onFirstUpdate&&oe.onFirstUpdate(Ee)});function xe(){z.orderedModifiers.forEach(function(Ee){var Be=Ee.name,Re=Ee.options,He=Re===void 0?{}:Re,ce=Ee.effect;if(typeof ce=="function"){var Pe=ce({state:z,name:Be,instance:Ae,options:He}),Te=function(){};De.push(Pe||Te)}})}function Me(){De.forEach(function(Ee){return Ee()}),De=[]}return Ae}}var On={passive:!0};function Ur(c){var a=c.state,g=c.instance,D=c.options,T=D.scroll,F=T===void 0?!0:T,W=D.resize,j=W===void 0?!0:W,q=r(a.elements.popper),oe=[].concat(a.scrollParents.reference,a.scrollParents.popper);return F&&oe.forEach(function(z){z.addEventListener("scroll",g.update,On)}),j&&q.addEventListener("resize",g.update,On),function(){F&&oe.forEach(function(z){z.removeEventListener("scroll",g.update,On)}),j&&q.removeEventListener("resize",g.update,On)}}var jn={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:Ur,data:{}};function Yr(c){var a=c.state,g=c.name;a.modifiersData[g]=lr({reference:a.rects.reference,element:a.rects.popper,strategy:"absolute",placement:a.placement})}var Bn={name:"popperOffsets",enabled:!0,phase:"read",fn:Yr,data:{}},Xr={top:"auto",right:"auto",bottom:"auto",left:"auto"};function qr(c){var a=c.x,g=c.y,D=window,T=D.devicePixelRatio||1;return{x:Yt(Yt(a*T)/T)||0,y:Yt(Yt(g*T)/T)||0}}function Hn(c){var a,g=c.popper,D=c.popperRect,T=c.placement,F=c.offsets,W=c.position,j=c.gpuAcceleration,q=c.adaptive,oe=c.roundOffsets,z=oe===!0?qr(F):typeof oe=="function"?oe(F):F,De=z.x,Le=De===void 0?0:De,Ae=z.y,xe=Ae===void 0?0:Ae,Me=F.hasOwnProperty("x"),Ee=F.hasOwnProperty("y"),Be=Z,Re=V,He=window;if(q){var ce=J(g),Pe="clientHeight",Te="clientWidth";ce===r(g)&&(ce=y(g),A(ce).position!=="static"&&(Pe="scrollHeight",Te="scrollWidth")),ce=ce,T===V&&(Re=de,xe-=ce[Pe]-D.height,xe*=j?1:-1),T===Z&&(Be=U,Le-=ce[Te]-D.width,Le*=j?1:-1)}var Ne=Object.assign({position:W},q&&Xr);if(j){var Fe;return Object.assign({},Ne,(Fe={},Fe[Re]=Ee?"0":"",Fe[Be]=Me?"0":"",Fe.transform=(He.devicePixelRatio||1)<2?"translate("+Le+"px, "+xe+"px)":"translate3d("+Le+"px, "+xe+"px, 0)",Fe))}return Object.assign({},Ne,(a={},a[Re]=Ee?xe+"px":"",a[Be]=Me?Le+"px":"",a.transform="",a))}function m(c){var a=c.state,g=c.options,D=g.gpuAcceleration,T=D===void 0?!0:D,F=g.adaptive,W=F===void 0?!0:F,j=g.roundOffsets,q=j===void 0?!0:j,oe=A(a.elements.popper).transitionProperty||"";W&&["transform","top","right","bottom","left"].some(function(De){return oe.indexOf(De)>=0})&&console.warn(["Popper: Detected CSS transitions on at least one of the following",'CSS properties: "transform", "top", "right", "bottom", "left".',` +(()=>{var Bo=Object.create;var Di=Object.defineProperty;var Ho=Object.getOwnPropertyDescriptor;var $o=Object.getOwnPropertyNames;var Wo=Object.getPrototypeOf,Vo=Object.prototype.hasOwnProperty;var Kr=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var zo=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of $o(e))!Vo.call(t,i)&&i!==r&&Di(t,i,{get:()=>e[i],enumerable:!(n=Ho(e,i))||n.enumerable});return t};var Uo=(t,e,r)=>(r=t!=null?Bo(Wo(t)):{},zo(e||!t||!t.__esModule?Di(r,"default",{value:t,enumerable:!0}):r,t));var oo=Kr(()=>{});var ao=Kr(()=>{});var so=Kr((Os,yr)=>{(function(){"use strict";var t="input is invalid type",e="finalize already called",r=typeof window=="object",n=r?window:{};n.JS_MD5_NO_WINDOW&&(r=!1);var i=!r&&typeof self=="object",o=!n.JS_MD5_NO_NODE_JS&&typeof process=="object"&&process.versions&&process.versions.node;o?n=global:i&&(n=self);var s=!n.JS_MD5_NO_COMMON_JS&&typeof yr=="object"&&yr.exports,h=typeof define=="function"&&define.amd,u=!n.JS_MD5_NO_ARRAY_BUFFER&&typeof ArrayBuffer<"u",f="0123456789abcdef".split(""),w=[128,32768,8388608,-2147483648],m=[0,8,16,24],E=["hex","array","digest","buffer","arrayBuffer","base64"],O="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""),S=[],P;if(u){var R=new ArrayBuffer(68);P=new Uint8Array(R),S=new Uint32Array(R)}var $=Array.isArray;(n.JS_MD5_NO_NODE_JS||!$)&&($=function(l){return Object.prototype.toString.call(l)==="[object Array]"});var B=ArrayBuffer.isView;u&&(n.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW||!B)&&(B=function(l){return typeof l=="object"&&l.buffer&&l.buffer.constructor===ArrayBuffer});var K=function(l){var p=typeof l;if(p==="string")return[l,!0];if(p!=="object"||l===null)throw new Error(t);if(u&&l.constructor===ArrayBuffer)return[new Uint8Array(l),!1];if(!$(l)&&!B(l))throw new Error(t);return[l,!1]},X=function(l){return function(p){return new U(!0).update(p)[l]()}},ne=function(){var l=X("hex");o&&(l=J(l)),l.create=function(){return new U},l.update=function(d){return l.create().update(d)};for(var p=0;p>>6,Ue[_++]=128|d&63):d<55296||d>=57344?(Ue[_++]=224|d>>>12,Ue[_++]=128|d>>>6&63,Ue[_++]=128|d&63):(d=65536+((d&1023)<<10|l.charCodeAt(++N)&1023),Ue[_++]=240|d>>>18,Ue[_++]=128|d>>>12&63,Ue[_++]=128|d>>>6&63,Ue[_++]=128|d&63);else for(_=this.start;N>>2]|=d<>>2]|=(192|d>>>6)<>>2]|=(128|d&63)<=57344?(Q[_>>>2]|=(224|d>>>12)<>>2]|=(128|d>>>6&63)<>>2]|=(128|d&63)<>>2]|=(240|d>>>18)<>>2]|=(128|d>>>12&63)<>>2]|=(128|d>>>6&63)<>>2]|=(128|d&63)<>>2]|=l[N]<=64?(this.start=_-64,this.hash(),this.hashed=!0):this.start=_}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296<<0,this.bytes=this.bytes%4294967296),this},U.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var l=this.blocks,p=this.lastByteIndex;l[p>>>2]|=w[p&3],p>=56&&(this.hashed||this.hash(),l[0]=l[16],l[16]=l[1]=l[2]=l[3]=l[4]=l[5]=l[6]=l[7]=l[8]=l[9]=l[10]=l[11]=l[12]=l[13]=l[14]=l[15]=0),l[14]=this.bytes<<3,l[15]=this.hBytes<<3|this.bytes>>>29,this.hash()}},U.prototype.hash=function(){var l,p,v,d,N,_,M=this.blocks;this.first?(l=M[0]-680876937,l=(l<<7|l>>>25)-271733879<<0,d=(-1732584194^l&2004318071)+M[1]-117830708,d=(d<<12|d>>>20)+l<<0,v=(-271733879^d&(l^-271733879))+M[2]-1126478375,v=(v<<17|v>>>15)+d<<0,p=(l^v&(d^l))+M[3]-1316259209,p=(p<<22|p>>>10)+v<<0):(l=this.h0,p=this.h1,v=this.h2,d=this.h3,l+=(d^p&(v^d))+M[0]-680876936,l=(l<<7|l>>>25)+p<<0,d+=(v^l&(p^v))+M[1]-389564586,d=(d<<12|d>>>20)+l<<0,v+=(p^d&(l^p))+M[2]+606105819,v=(v<<17|v>>>15)+d<<0,p+=(l^v&(d^l))+M[3]-1044525330,p=(p<<22|p>>>10)+v<<0),l+=(d^p&(v^d))+M[4]-176418897,l=(l<<7|l>>>25)+p<<0,d+=(v^l&(p^v))+M[5]+1200080426,d=(d<<12|d>>>20)+l<<0,v+=(p^d&(l^p))+M[6]-1473231341,v=(v<<17|v>>>15)+d<<0,p+=(l^v&(d^l))+M[7]-45705983,p=(p<<22|p>>>10)+v<<0,l+=(d^p&(v^d))+M[8]+1770035416,l=(l<<7|l>>>25)+p<<0,d+=(v^l&(p^v))+M[9]-1958414417,d=(d<<12|d>>>20)+l<<0,v+=(p^d&(l^p))+M[10]-42063,v=(v<<17|v>>>15)+d<<0,p+=(l^v&(d^l))+M[11]-1990404162,p=(p<<22|p>>>10)+v<<0,l+=(d^p&(v^d))+M[12]+1804603682,l=(l<<7|l>>>25)+p<<0,d+=(v^l&(p^v))+M[13]-40341101,d=(d<<12|d>>>20)+l<<0,v+=(p^d&(l^p))+M[14]-1502002290,v=(v<<17|v>>>15)+d<<0,p+=(l^v&(d^l))+M[15]+1236535329,p=(p<<22|p>>>10)+v<<0,l+=(v^d&(p^v))+M[1]-165796510,l=(l<<5|l>>>27)+p<<0,d+=(p^v&(l^p))+M[6]-1069501632,d=(d<<9|d>>>23)+l<<0,v+=(l^p&(d^l))+M[11]+643717713,v=(v<<14|v>>>18)+d<<0,p+=(d^l&(v^d))+M[0]-373897302,p=(p<<20|p>>>12)+v<<0,l+=(v^d&(p^v))+M[5]-701558691,l=(l<<5|l>>>27)+p<<0,d+=(p^v&(l^p))+M[10]+38016083,d=(d<<9|d>>>23)+l<<0,v+=(l^p&(d^l))+M[15]-660478335,v=(v<<14|v>>>18)+d<<0,p+=(d^l&(v^d))+M[4]-405537848,p=(p<<20|p>>>12)+v<<0,l+=(v^d&(p^v))+M[9]+568446438,l=(l<<5|l>>>27)+p<<0,d+=(p^v&(l^p))+M[14]-1019803690,d=(d<<9|d>>>23)+l<<0,v+=(l^p&(d^l))+M[3]-187363961,v=(v<<14|v>>>18)+d<<0,p+=(d^l&(v^d))+M[8]+1163531501,p=(p<<20|p>>>12)+v<<0,l+=(v^d&(p^v))+M[13]-1444681467,l=(l<<5|l>>>27)+p<<0,d+=(p^v&(l^p))+M[2]-51403784,d=(d<<9|d>>>23)+l<<0,v+=(l^p&(d^l))+M[7]+1735328473,v=(v<<14|v>>>18)+d<<0,p+=(d^l&(v^d))+M[12]-1926607734,p=(p<<20|p>>>12)+v<<0,N=p^v,l+=(N^d)+M[5]-378558,l=(l<<4|l>>>28)+p<<0,d+=(N^l)+M[8]-2022574463,d=(d<<11|d>>>21)+l<<0,_=d^l,v+=(_^p)+M[11]+1839030562,v=(v<<16|v>>>16)+d<<0,p+=(_^v)+M[14]-35309556,p=(p<<23|p>>>9)+v<<0,N=p^v,l+=(N^d)+M[1]-1530992060,l=(l<<4|l>>>28)+p<<0,d+=(N^l)+M[4]+1272893353,d=(d<<11|d>>>21)+l<<0,_=d^l,v+=(_^p)+M[7]-155497632,v=(v<<16|v>>>16)+d<<0,p+=(_^v)+M[10]-1094730640,p=(p<<23|p>>>9)+v<<0,N=p^v,l+=(N^d)+M[13]+681279174,l=(l<<4|l>>>28)+p<<0,d+=(N^l)+M[0]-358537222,d=(d<<11|d>>>21)+l<<0,_=d^l,v+=(_^p)+M[3]-722521979,v=(v<<16|v>>>16)+d<<0,p+=(_^v)+M[6]+76029189,p=(p<<23|p>>>9)+v<<0,N=p^v,l+=(N^d)+M[9]-640364487,l=(l<<4|l>>>28)+p<<0,d+=(N^l)+M[12]-421815835,d=(d<<11|d>>>21)+l<<0,_=d^l,v+=(_^p)+M[15]+530742520,v=(v<<16|v>>>16)+d<<0,p+=(_^v)+M[2]-995338651,p=(p<<23|p>>>9)+v<<0,l+=(v^(p|~d))+M[0]-198630844,l=(l<<6|l>>>26)+p<<0,d+=(p^(l|~v))+M[7]+1126891415,d=(d<<10|d>>>22)+l<<0,v+=(l^(d|~p))+M[14]-1416354905,v=(v<<15|v>>>17)+d<<0,p+=(d^(v|~l))+M[5]-57434055,p=(p<<21|p>>>11)+v<<0,l+=(v^(p|~d))+M[12]+1700485571,l=(l<<6|l>>>26)+p<<0,d+=(p^(l|~v))+M[3]-1894986606,d=(d<<10|d>>>22)+l<<0,v+=(l^(d|~p))+M[10]-1051523,v=(v<<15|v>>>17)+d<<0,p+=(d^(v|~l))+M[1]-2054922799,p=(p<<21|p>>>11)+v<<0,l+=(v^(p|~d))+M[8]+1873313359,l=(l<<6|l>>>26)+p<<0,d+=(p^(l|~v))+M[15]-30611744,d=(d<<10|d>>>22)+l<<0,v+=(l^(d|~p))+M[6]-1560198380,v=(v<<15|v>>>17)+d<<0,p+=(d^(v|~l))+M[13]+1309151649,p=(p<<21|p>>>11)+v<<0,l+=(v^(p|~d))+M[4]-145523070,l=(l<<6|l>>>26)+p<<0,d+=(p^(l|~v))+M[11]-1120210379,d=(d<<10|d>>>22)+l<<0,v+=(l^(d|~p))+M[2]+718787259,v=(v<<15|v>>>17)+d<<0,p+=(d^(v|~l))+M[9]-343485551,p=(p<<21|p>>>11)+v<<0,this.first?(this.h0=l+1732584193<<0,this.h1=p-271733879<<0,this.h2=v-1732584194<<0,this.h3=d+271733878<<0,this.first=!1):(this.h0=this.h0+l<<0,this.h1=this.h1+p<<0,this.h2=this.h2+v<<0,this.h3=this.h3+d<<0)},U.prototype.hex=function(){this.finalize();var l=this.h0,p=this.h1,v=this.h2,d=this.h3;return f[l>>>4&15]+f[l&15]+f[l>>>12&15]+f[l>>>8&15]+f[l>>>20&15]+f[l>>>16&15]+f[l>>>28&15]+f[l>>>24&15]+f[p>>>4&15]+f[p&15]+f[p>>>12&15]+f[p>>>8&15]+f[p>>>20&15]+f[p>>>16&15]+f[p>>>28&15]+f[p>>>24&15]+f[v>>>4&15]+f[v&15]+f[v>>>12&15]+f[v>>>8&15]+f[v>>>20&15]+f[v>>>16&15]+f[v>>>28&15]+f[v>>>24&15]+f[d>>>4&15]+f[d&15]+f[d>>>12&15]+f[d>>>8&15]+f[d>>>20&15]+f[d>>>16&15]+f[d>>>28&15]+f[d>>>24&15]},U.prototype.toString=U.prototype.hex,U.prototype.digest=function(){this.finalize();var l=this.h0,p=this.h1,v=this.h2,d=this.h3;return[l&255,l>>>8&255,l>>>16&255,l>>>24&255,p&255,p>>>8&255,p>>>16&255,p>>>24&255,v&255,v>>>8&255,v>>>16&255,v>>>24&255,d&255,d>>>8&255,d>>>16&255,d>>>24&255]},U.prototype.array=U.prototype.digest,U.prototype.arrayBuffer=function(){this.finalize();var l=new ArrayBuffer(16),p=new Uint32Array(l);return p[0]=this.h0,p[1]=this.h1,p[2]=this.h2,p[3]=this.h3,l},U.prototype.buffer=U.prototype.arrayBuffer,U.prototype.base64=function(){for(var l,p,v,d="",N=this.array(),_=0;_<15;)l=N[_++],p=N[_++],v=N[_++],d+=O[l>>>2]+O[(l<<4|p>>>4)&63]+O[(p<<2|v>>>6)&63]+O[v&63];return l=N[_],d+=O[l>>>2]+O[l<<4&63]+"==",d};function Z(l,p){var v,d=K(l);if(l=d[0],d[1]){var N=[],_=l.length,M=0,Q;for(v=0;v<_;++v)Q=l.charCodeAt(v),Q<128?N[M++]=Q:Q<2048?(N[M++]=192|Q>>>6,N[M++]=128|Q&63):Q<55296||Q>=57344?(N[M++]=224|Q>>>12,N[M++]=128|Q>>>6&63,N[M++]=128|Q&63):(Q=65536+((Q&1023)<<10|l.charCodeAt(++v)&1023),N[M++]=240|Q>>>18,N[M++]=128|Q>>>12&63,N[M++]=128|Q>>>6&63,N[M++]=128|Q&63);l=N}l.length>64&&(l=new U(!0).update(l).array());var Ue=[],Rt=[];for(v=0;v<64;++v){var Vt=l[v]||0;Ue[v]=92^Vt,Rt[v]=54^Vt}U.call(this,p),this.update(Rt),this.oKeyPad=Ue,this.inner=!0,this.sharedMemory=p}Z.prototype=new U,Z.prototype.finalize=function(){if(U.prototype.finalize.call(this),this.inner){this.inner=!1;var l=this.array();U.call(this,this.sharedMemory),this.update(this.oKeyPad),this.update(l),U.prototype.finalize.call(this)}};var me=ne();me.md5=me,me.md5.hmac=de(),s?yr.exports=me:(n.md5=me,h&&define(function(){return me}))})()});var ji=["top","right","bottom","left"],Ti=["start","end"],_i=ji.reduce((t,e)=>t.concat(e,e+"-"+Ti[0],e+"-"+Ti[1]),[]),Et=Math.min,tt=Math.max,hr=Math.round,pr=Math.floor,nn=t=>({x:t,y:t}),Yo={left:"right",right:"left",bottom:"top",top:"bottom"},Xo={start:"end",end:"start"};function Jr(t,e,r){return tt(t,Et(e,r))}function jt(t,e){return typeof t=="function"?t(e):t}function pt(t){return t.split("-")[0]}function xt(t){return t.split("-")[1]}function Bi(t){return t==="x"?"y":"x"}function Zr(t){return t==="y"?"height":"width"}function Pn(t){return["top","bottom"].includes(pt(t))?"y":"x"}function Qr(t){return Bi(Pn(t))}function Hi(t,e,r){r===void 0&&(r=!1);let n=xt(t),i=Qr(t),o=Zr(i),s=i==="x"?n===(r?"end":"start")?"right":"left":n==="start"?"bottom":"top";return e.reference[o]>e.floating[o]&&(s=mr(s)),[s,mr(s)]}function qo(t){let e=mr(t);return[vr(t),e,vr(e)]}function vr(t){return t.replace(/start|end/g,e=>Xo[e])}function Go(t,e,r){let n=["left","right"],i=["right","left"],o=["top","bottom"],s=["bottom","top"];switch(t){case"top":case"bottom":return r?e?i:n:e?n:i;case"left":case"right":return e?o:s;default:return[]}}function Ko(t,e,r,n){let i=xt(t),o=Go(pt(t),r==="start",n);return i&&(o=o.map(s=>s+"-"+i),e&&(o=o.concat(o.map(vr)))),o}function mr(t){return t.replace(/left|right|bottom|top/g,e=>Yo[e])}function Jo(t){return{top:0,right:0,bottom:0,left:0,...t}}function ei(t){return typeof t!="number"?Jo(t):{top:t,right:t,bottom:t,left:t}}function Dn(t){return{...t,top:t.y,left:t.x,right:t.x+t.width,bottom:t.y+t.height}}function Pi(t,e,r){let{reference:n,floating:i}=t,o=Pn(e),s=Qr(e),h=Zr(s),u=pt(e),f=o==="y",w=n.x+n.width/2-i.width/2,m=n.y+n.height/2-i.height/2,E=n[h]/2-i[h]/2,O;switch(u){case"top":O={x:w,y:n.y-i.height};break;case"bottom":O={x:w,y:n.y+n.height};break;case"right":O={x:n.x+n.width,y:m};break;case"left":O={x:n.x-i.width,y:m};break;default:O={x:n.x,y:n.y}}switch(xt(e)){case"start":O[s]-=E*(r&&f?-1:1);break;case"end":O[s]+=E*(r&&f?-1:1);break}return O}var Zo=async(t,e,r)=>{let{placement:n="bottom",strategy:i="absolute",middleware:o=[],platform:s}=r,h=o.filter(Boolean),u=await(s.isRTL==null?void 0:s.isRTL(e)),f=await s.getElementRects({reference:t,floating:e,strategy:i}),{x:w,y:m}=Pi(f,n,u),E=n,O={},S=0;for(let P=0;P({name:"arrow",options:t,async fn(e){let{x:r,y:n,placement:i,rects:o,platform:s,elements:h,middlewareData:u}=e,{element:f,padding:w=0}=jt(t,e)||{};if(f==null)return{};let m=ei(w),E={x:r,y:n},O=Qr(i),S=Zr(O),P=await s.getDimensions(f),R=O==="y",$=R?"top":"left",B=R?"bottom":"right",K=R?"clientHeight":"clientWidth",X=o.reference[S]+o.reference[O]-E[O]-o.floating[S],ne=E[O]-o.reference[O],J=await(s.getOffsetParent==null?void 0:s.getOffsetParent(f)),V=J?J[K]:0;(!V||!await(s.isElement==null?void 0:s.isElement(J)))&&(V=h.floating[K]||o.floating[S]);let de=X/2-ne/2,U=V/2-P[S]/2-1,Z=Et(m[$],U),me=Et(m[B],U),l=Z,p=V-P[S]-me,v=V/2-P[S]/2+de,d=Jr(l,v,p),N=!u.arrow&&xt(i)!=null&&v!==d&&o.reference[S]/2-(vxt(i)===t),...r.filter(i=>xt(i)!==t)]:r.filter(i=>pt(i)===i)).filter(i=>t?xt(i)===t||(e?vr(i)!==i:!1):!0)}var ta=function(t){return t===void 0&&(t={}),{name:"autoPlacement",options:t,async fn(e){var r,n,i;let{rects:o,middlewareData:s,placement:h,platform:u,elements:f}=e,{crossAxis:w=!1,alignment:m,allowedPlacements:E=_i,autoAlignment:O=!0,...S}=jt(t,e),P=m!==void 0||E===_i?ea(m||null,O,E):E,R=await Tn(e,S),$=((r=s.autoPlacement)==null?void 0:r.index)||0,B=P[$];if(B==null)return{};let K=Hi(B,o,await(u.isRTL==null?void 0:u.isRTL(f.floating)));if(h!==B)return{reset:{placement:P[0]}};let X=[R[pt(B)],R[K[0]],R[K[1]]],ne=[...((n=s.autoPlacement)==null?void 0:n.overflows)||[],{placement:B,overflows:X}],J=P[$+1];if(J)return{data:{index:$+1,overflows:ne},reset:{placement:J}};let V=ne.map(Z=>{let me=xt(Z.placement);return[Z.placement,me&&w?Z.overflows.slice(0,2).reduce((l,p)=>l+p,0):Z.overflows[0],Z.overflows]}).sort((Z,me)=>Z[1]-me[1]),U=((i=V.filter(Z=>Z[2].slice(0,xt(Z[0])?2:3).every(me=>me<=0))[0])==null?void 0:i[0])||V[0][0];return U!==h?{data:{index:$+1,overflows:ne},reset:{placement:U}}:{}}}},na=function(t){return t===void 0&&(t={}),{name:"flip",options:t,async fn(e){var r,n;let{placement:i,middlewareData:o,rects:s,initialPlacement:h,platform:u,elements:f}=e,{mainAxis:w=!0,crossAxis:m=!0,fallbackPlacements:E,fallbackStrategy:O="bestFit",fallbackAxisSideDirection:S="none",flipAlignment:P=!0,...R}=jt(t,e);if((r=o.arrow)!=null&&r.alignmentOffset)return{};let $=pt(i),B=pt(h)===h,K=await(u.isRTL==null?void 0:u.isRTL(f.floating)),X=E||(B||!P?[mr(h)]:qo(h));!E&&S!=="none"&&X.push(...Ko(h,P,S,K));let ne=[h,...X],J=await Tn(e,R),V=[],de=((n=o.flip)==null?void 0:n.overflows)||[];if(w&&V.push(J[$]),m){let l=Hi(i,s,K);V.push(J[l[0]],J[l[1]])}if(de=[...de,{placement:i,overflows:V}],!V.every(l=>l<=0)){var U,Z;let l=(((U=o.flip)==null?void 0:U.index)||0)+1,p=ne[l];if(p)return{data:{index:l,overflows:de},reset:{placement:p}};let v=(Z=de.filter(d=>d.overflows[0]<=0).sort((d,N)=>d.overflows[1]-N.overflows[1])[0])==null?void 0:Z.placement;if(!v)switch(O){case"bestFit":{var me;let d=(me=de.map(N=>[N.placement,N.overflows.filter(_=>_>0).reduce((_,M)=>_+M,0)]).sort((N,_)=>N[1]-_[1])[0])==null?void 0:me[0];d&&(v=d);break}case"initialPlacement":v=h;break}if(i!==v)return{reset:{placement:v}}}return{}}}};function Mi(t,e){return{top:t.top-e.height,right:t.right-e.width,bottom:t.bottom-e.height,left:t.left-e.width}}function Ri(t){return ji.some(e=>t[e]>=0)}var ra=function(t){return t===void 0&&(t={}),{name:"hide",options:t,async fn(e){let{rects:r}=e,{strategy:n="referenceHidden",...i}=jt(t,e);switch(n){case"referenceHidden":{let o=await Tn(e,{...i,elementContext:"reference"}),s=Mi(o,r.reference);return{data:{referenceHiddenOffsets:s,referenceHidden:Ri(s)}}}case"escaped":{let o=await Tn(e,{...i,altBoundary:!0}),s=Mi(o,r.floating);return{data:{escapedOffsets:s,escaped:Ri(s)}}}default:return{}}}}};function $i(t){let e=Et(...t.map(o=>o.left)),r=Et(...t.map(o=>o.top)),n=tt(...t.map(o=>o.right)),i=tt(...t.map(o=>o.bottom));return{x:e,y:r,width:n-e,height:i-r}}function ia(t){let e=t.slice().sort((i,o)=>i.y-o.y),r=[],n=null;for(let i=0;in.height/2?r.push([o]):r[r.length-1].push(o),n=o}return r.map(i=>Dn($i(i)))}var oa=function(t){return t===void 0&&(t={}),{name:"inline",options:t,async fn(e){let{placement:r,elements:n,rects:i,platform:o,strategy:s}=e,{padding:h=2,x:u,y:f}=jt(t,e),w=Array.from(await(o.getClientRects==null?void 0:o.getClientRects(n.reference))||[]),m=ia(w),E=Dn($i(w)),O=ei(h);function S(){if(m.length===2&&m[0].left>m[1].right&&u!=null&&f!=null)return m.find(R=>u>R.left-O.left&&uR.top-O.top&&f=2){if(Pn(r)==="y"){let Z=m[0],me=m[m.length-1],l=pt(r)==="top",p=Z.top,v=me.bottom,d=l?Z.left:me.left,N=l?Z.right:me.right,_=N-d,M=v-p;return{top:p,bottom:v,left:d,right:N,width:_,height:M,x:d,y:p}}let R=pt(r)==="left",$=tt(...m.map(Z=>Z.right)),B=Et(...m.map(Z=>Z.left)),K=m.filter(Z=>R?Z.left===B:Z.right===$),X=K[0].top,ne=K[K.length-1].bottom,J=B,V=$,de=V-J,U=ne-X;return{top:X,bottom:ne,left:J,right:V,width:de,height:U,x:J,y:X}}return E}let P=await o.getElementRects({reference:{getBoundingClientRect:S},floating:n.floating,strategy:s});return i.reference.x!==P.reference.x||i.reference.y!==P.reference.y||i.reference.width!==P.reference.width||i.reference.height!==P.reference.height?{reset:{rects:P}}:{}}}};async function aa(t,e){let{placement:r,platform:n,elements:i}=t,o=await(n.isRTL==null?void 0:n.isRTL(i.floating)),s=pt(r),h=xt(r),u=Pn(r)==="y",f=["left","top"].includes(s)?-1:1,w=o&&u?-1:1,m=jt(e,t),{mainAxis:E,crossAxis:O,alignmentAxis:S}=typeof m=="number"?{mainAxis:m,crossAxis:0,alignmentAxis:null}:{mainAxis:0,crossAxis:0,alignmentAxis:null,...m};return h&&typeof S=="number"&&(O=h==="end"?S*-1:S),u?{x:O*w,y:E*f}:{x:E*f,y:O*w}}var Wi=function(t){return t===void 0&&(t=0),{name:"offset",options:t,async fn(e){var r,n;let{x:i,y:o,placement:s,middlewareData:h}=e,u=await aa(e,t);return s===((r=h.offset)==null?void 0:r.placement)&&(n=h.arrow)!=null&&n.alignmentOffset?{}:{x:i+u.x,y:o+u.y,data:{...u,placement:s}}}}},sa=function(t){return t===void 0&&(t={}),{name:"shift",options:t,async fn(e){let{x:r,y:n,placement:i}=e,{mainAxis:o=!0,crossAxis:s=!1,limiter:h={fn:R=>{let{x:$,y:B}=R;return{x:$,y:B}}},...u}=jt(t,e),f={x:r,y:n},w=await Tn(e,u),m=Pn(pt(i)),E=Bi(m),O=f[E],S=f[m];if(o){let R=E==="y"?"top":"left",$=E==="y"?"bottom":"right",B=O+w[R],K=O-w[$];O=Jr(B,O,K)}if(s){let R=m==="y"?"top":"left",$=m==="y"?"bottom":"right",B=S+w[R],K=S-w[$];S=Jr(B,S,K)}let P=h.fn({...e,[E]:O,[m]:S});return{...P,data:{x:P.x-r,y:P.y-n}}}}},la=function(t){return t===void 0&&(t={}),{name:"size",options:t,async fn(e){let{placement:r,rects:n,platform:i,elements:o}=e,{apply:s=()=>{},...h}=jt(t,e),u=await Tn(e,h),f=pt(r),w=xt(r),m=Pn(r)==="y",{width:E,height:O}=n.floating,S,P;f==="top"||f==="bottom"?(S=f,P=w===(await(i.isRTL==null?void 0:i.isRTL(o.floating))?"start":"end")?"left":"right"):(P=f,S=w==="end"?"top":"bottom");let R=O-u[S],$=E-u[P],B=!e.middlewareData.shift,K=R,X=$;if(m){let J=E-u.left-u.right;X=w||B?Et($,J):J}else{let J=O-u.top-u.bottom;K=w||B?Et(R,J):J}if(B&&!w){let J=tt(u.left,0),V=tt(u.right,0),de=tt(u.top,0),U=tt(u.bottom,0);m?X=E-2*(J!==0||V!==0?J+V:tt(u.left,u.right)):K=O-2*(de!==0||U!==0?de+U:tt(u.top,u.bottom))}await s({...e,availableWidth:X,availableHeight:K});let ne=await i.getDimensions(o.floating);return E!==ne.width||O!==ne.height?{reset:{rects:!0}}:{}}}};function rn(t){return Vi(t)?(t.nodeName||"").toLowerCase():"#document"}function ct(t){var e;return(t==null||(e=t.ownerDocument)==null?void 0:e.defaultView)||window}function Bt(t){var e;return(e=(Vi(t)?t.ownerDocument:t.document)||window.document)==null?void 0:e.documentElement}function Vi(t){return t instanceof Node||t instanceof ct(t).Node}function kt(t){return t instanceof Element||t instanceof ct(t).Element}function _t(t){return t instanceof HTMLElement||t instanceof ct(t).HTMLElement}function Ii(t){return typeof ShadowRoot>"u"?!1:t instanceof ShadowRoot||t instanceof ct(t).ShadowRoot}function Un(t){let{overflow:e,overflowX:r,overflowY:n,display:i}=ht(t);return/auto|scroll|overlay|hidden|clip/.test(e+n+r)&&!["inline","contents"].includes(i)}function ca(t){return["table","td","th"].includes(rn(t))}function ti(t){let e=ni(),r=ht(t);return r.transform!=="none"||r.perspective!=="none"||(r.containerType?r.containerType!=="normal":!1)||!e&&(r.backdropFilter?r.backdropFilter!=="none":!1)||!e&&(r.filter?r.filter!=="none":!1)||["transform","perspective","filter"].some(n=>(r.willChange||"").includes(n))||["paint","layout","strict","content"].some(n=>(r.contain||"").includes(n))}function fa(t){let e=_n(t);for(;_t(e)&&!gr(e);){if(ti(e))return e;e=_n(e)}return null}function ni(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}function gr(t){return["html","body","#document"].includes(rn(t))}function ht(t){return ct(t).getComputedStyle(t)}function br(t){return kt(t)?{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}:{scrollLeft:t.pageXOffset,scrollTop:t.pageYOffset}}function _n(t){if(rn(t)==="html")return t;let e=t.assignedSlot||t.parentNode||Ii(t)&&t.host||Bt(t);return Ii(e)?e.host:e}function zi(t){let e=_n(t);return gr(e)?t.ownerDocument?t.ownerDocument.body:t.body:_t(e)&&Un(e)?e:zi(e)}function zn(t,e,r){var n;e===void 0&&(e=[]),r===void 0&&(r=!0);let i=zi(t),o=i===((n=t.ownerDocument)==null?void 0:n.body),s=ct(i);return o?e.concat(s,s.visualViewport||[],Un(i)?i:[],s.frameElement&&r?zn(s.frameElement):[]):e.concat(i,zn(i,[],r))}function Ui(t){let e=ht(t),r=parseFloat(e.width)||0,n=parseFloat(e.height)||0,i=_t(t),o=i?t.offsetWidth:r,s=i?t.offsetHeight:n,h=hr(r)!==o||hr(n)!==s;return h&&(r=o,n=s),{width:r,height:n,$:h}}function ri(t){return kt(t)?t:t.contextElement}function Cn(t){let e=ri(t);if(!_t(e))return nn(1);let r=e.getBoundingClientRect(),{width:n,height:i,$:o}=Ui(e),s=(o?hr(r.width):r.width)/n,h=(o?hr(r.height):r.height)/i;return(!s||!Number.isFinite(s))&&(s=1),(!h||!Number.isFinite(h))&&(h=1),{x:s,y:h}}var ua=nn(0);function Yi(t){let e=ct(t);return!ni()||!e.visualViewport?ua:{x:e.visualViewport.offsetLeft,y:e.visualViewport.offsetTop}}function da(t,e,r){return e===void 0&&(e=!1),!r||e&&r!==ct(t)?!1:e}function vn(t,e,r,n){e===void 0&&(e=!1),r===void 0&&(r=!1);let i=t.getBoundingClientRect(),o=ri(t),s=nn(1);e&&(n?kt(n)&&(s=Cn(n)):s=Cn(t));let h=da(o,r,n)?Yi(o):nn(0),u=(i.left+h.x)/s.x,f=(i.top+h.y)/s.y,w=i.width/s.x,m=i.height/s.y;if(o){let E=ct(o),O=n&&kt(n)?ct(n):n,S=E,P=S.frameElement;for(;P&&n&&O!==S;){let R=Cn(P),$=P.getBoundingClientRect(),B=ht(P),K=$.left+(P.clientLeft+parseFloat(B.paddingLeft))*R.x,X=$.top+(P.clientTop+parseFloat(B.paddingTop))*R.y;u*=R.x,f*=R.y,w*=R.x,m*=R.y,u+=K,f+=X,S=ct(P),P=S.frameElement}}return Dn({width:w,height:m,x:u,y:f})}var pa=[":popover-open",":modal"];function Xi(t){return pa.some(e=>{try{return t.matches(e)}catch{return!1}})}function ha(t){let{elements:e,rect:r,offsetParent:n,strategy:i}=t,o=i==="fixed",s=Bt(n),h=e?Xi(e.floating):!1;if(n===s||h&&o)return r;let u={scrollLeft:0,scrollTop:0},f=nn(1),w=nn(0),m=_t(n);if((m||!m&&!o)&&((rn(n)!=="body"||Un(s))&&(u=br(n)),_t(n))){let E=vn(n);f=Cn(n),w.x=E.x+n.clientLeft,w.y=E.y+n.clientTop}return{width:r.width*f.x,height:r.height*f.y,x:r.x*f.x-u.scrollLeft*f.x+w.x,y:r.y*f.y-u.scrollTop*f.y+w.y}}function va(t){return Array.from(t.getClientRects())}function qi(t){return vn(Bt(t)).left+br(t).scrollLeft}function ma(t){let e=Bt(t),r=br(t),n=t.ownerDocument.body,i=tt(e.scrollWidth,e.clientWidth,n.scrollWidth,n.clientWidth),o=tt(e.scrollHeight,e.clientHeight,n.scrollHeight,n.clientHeight),s=-r.scrollLeft+qi(t),h=-r.scrollTop;return ht(n).direction==="rtl"&&(s+=tt(e.clientWidth,n.clientWidth)-i),{width:i,height:o,x:s,y:h}}function ga(t,e){let r=ct(t),n=Bt(t),i=r.visualViewport,o=n.clientWidth,s=n.clientHeight,h=0,u=0;if(i){o=i.width,s=i.height;let f=ni();(!f||f&&e==="fixed")&&(h=i.offsetLeft,u=i.offsetTop)}return{width:o,height:s,x:h,y:u}}function ba(t,e){let r=vn(t,!0,e==="fixed"),n=r.top+t.clientTop,i=r.left+t.clientLeft,o=_t(t)?Cn(t):nn(1),s=t.clientWidth*o.x,h=t.clientHeight*o.y,u=i*o.x,f=n*o.y;return{width:s,height:h,x:u,y:f}}function Fi(t,e,r){let n;if(e==="viewport")n=ga(t,r);else if(e==="document")n=ma(Bt(t));else if(kt(e))n=ba(e,r);else{let i=Yi(t);n={...e,x:e.x-i.x,y:e.y-i.y}}return Dn(n)}function Gi(t,e){let r=_n(t);return r===e||!kt(r)||gr(r)?!1:ht(r).position==="fixed"||Gi(r,e)}function ya(t,e){let r=e.get(t);if(r)return r;let n=zn(t,[],!1).filter(h=>kt(h)&&rn(h)!=="body"),i=null,o=ht(t).position==="fixed",s=o?_n(t):t;for(;kt(s)&&!gr(s);){let h=ht(s),u=ti(s);!u&&h.position==="fixed"&&(i=null),(o?!u&&!i:!u&&h.position==="static"&&!!i&&["absolute","fixed"].includes(i.position)||Un(s)&&!u&&Gi(t,s))?n=n.filter(w=>w!==s):i=h,s=_n(s)}return e.set(t,n),n}function wa(t){let{element:e,boundary:r,rootBoundary:n,strategy:i}=t,s=[...r==="clippingAncestors"?ya(e,this._c):[].concat(r),n],h=s[0],u=s.reduce((f,w)=>{let m=Fi(e,w,i);return f.top=tt(m.top,f.top),f.right=Et(m.right,f.right),f.bottom=Et(m.bottom,f.bottom),f.left=tt(m.left,f.left),f},Fi(e,h,i));return{width:u.right-u.left,height:u.bottom-u.top,x:u.left,y:u.top}}function xa(t){let{width:e,height:r}=Ui(t);return{width:e,height:r}}function Ea(t,e,r){let n=_t(e),i=Bt(e),o=r==="fixed",s=vn(t,!0,o,e),h={scrollLeft:0,scrollTop:0},u=nn(0);if(n||!n&&!o)if((rn(e)!=="body"||Un(i))&&(h=br(e)),n){let m=vn(e,!0,o,e);u.x=m.x+e.clientLeft,u.y=m.y+e.clientTop}else i&&(u.x=qi(i));let f=s.left+h.scrollLeft-u.x,w=s.top+h.scrollTop-u.y;return{x:f,y:w,width:s.width,height:s.height}}function Li(t,e){return!_t(t)||ht(t).position==="fixed"?null:e?e(t):t.offsetParent}function Ki(t,e){let r=ct(t);if(!_t(t)||Xi(t))return r;let n=Li(t,e);for(;n&&ca(n)&&ht(n).position==="static";)n=Li(n,e);return n&&(rn(n)==="html"||rn(n)==="body"&&ht(n).position==="static"&&!ti(n))?r:n||fa(t)||r}var Oa=async function(t){let e=this.getOffsetParent||Ki,r=this.getDimensions;return{reference:Ea(t.reference,await e(t.floating),t.strategy),floating:{x:0,y:0,...await r(t.floating)}}};function Sa(t){return ht(t).direction==="rtl"}var Aa={convertOffsetParentRelativeRectToViewportRelativeRect:ha,getDocumentElement:Bt,getClippingRect:wa,getOffsetParent:Ki,getElementRects:Oa,getClientRects:va,getDimensions:xa,getScale:Cn,isElement:kt,isRTL:Sa};function Ca(t,e){let r=null,n,i=Bt(t);function o(){var h;clearTimeout(n),(h=r)==null||h.disconnect(),r=null}function s(h,u){h===void 0&&(h=!1),u===void 0&&(u=1),o();let{left:f,top:w,width:m,height:E}=t.getBoundingClientRect();if(h||e(),!m||!E)return;let O=pr(w),S=pr(i.clientWidth-(f+m)),P=pr(i.clientHeight-(w+E)),R=pr(f),B={rootMargin:-O+"px "+-S+"px "+-P+"px "+-R+"px",threshold:tt(0,Et(1,u))||1},K=!0;function X(ne){let J=ne[0].intersectionRatio;if(J!==u){if(!K)return s();J?s(!1,J):n=setTimeout(()=>{s(!1,1e-7)},100)}K=!1}try{r=new IntersectionObserver(X,{...B,root:i.ownerDocument})}catch{r=new IntersectionObserver(X,B)}r.observe(t)}return s(!0),o}function Ni(t,e,r,n){n===void 0&&(n={});let{ancestorScroll:i=!0,ancestorResize:o=!0,elementResize:s=typeof ResizeObserver=="function",layoutShift:h=typeof IntersectionObserver=="function",animationFrame:u=!1}=n,f=ri(t),w=i||o?[...f?zn(f):[],...zn(e)]:[];w.forEach($=>{i&&$.addEventListener("scroll",r,{passive:!0}),o&&$.addEventListener("resize",r)});let m=f&&h?Ca(f,r):null,E=-1,O=null;s&&(O=new ResizeObserver($=>{let[B]=$;B&&B.target===f&&O&&(O.unobserve(e),cancelAnimationFrame(E),E=requestAnimationFrame(()=>{var K;(K=O)==null||K.observe(e)})),r()}),f&&!u&&O.observe(f),O.observe(e));let S,P=u?vn(t):null;u&&R();function R(){let $=vn(t);P&&($.x!==P.x||$.y!==P.y||$.width!==P.width||$.height!==P.height)&&r(),P=$,S=requestAnimationFrame(R)}return r(),()=>{var $;w.forEach(B=>{i&&B.removeEventListener("scroll",r),o&&B.removeEventListener("resize",r)}),m?.(),($=O)==null||$.disconnect(),O=null,u&&cancelAnimationFrame(S)}}var ii=ta,Ji=sa,Zi=na,Qi=la,eo=ra,to=Qo,no=oa,ki=(t,e,r)=>{let n=new Map,i={platform:Aa,...r},o={...i.platform,_c:n};return Zo(t,e,{...i,platform:o})},Da=t=>{let e={placement:"bottom",strategy:"absolute",middleware:[]},r=Object.keys(t),n=i=>t[i];return r.includes("offset")&&e.middleware.push(Wi(n("offset"))),r.includes("teleport")&&(e.strategy="fixed"),r.includes("placement")&&(e.placement=n("placement")),r.includes("autoPlacement")&&!r.includes("flip")&&e.middleware.push(ii(n("autoPlacement"))),r.includes("flip")&&e.middleware.push(Zi(n("flip"))),r.includes("shift")&&e.middleware.push(Ji(n("shift"))),r.includes("inline")&&e.middleware.push(no(n("inline"))),r.includes("arrow")&&e.middleware.push(to(n("arrow"))),r.includes("hide")&&e.middleware.push(eo(n("hide"))),r.includes("size")&&e.middleware.push(Qi(n("size"))),e},Ta=(t,e)=>{let r={component:{trap:!1},float:{placement:"bottom",strategy:"absolute",middleware:[]}},n=i=>t[t.indexOf(i)+1];if(t.includes("trap")&&(r.component.trap=!0),t.includes("teleport")&&(r.float.strategy="fixed"),t.includes("offset")&&r.float.middleware.push(Wi(e.offset||10)),t.includes("placement")&&(r.float.placement=n("placement")),t.includes("autoPlacement")&&!t.includes("flip")&&r.float.middleware.push(ii(e.autoPlacement)),t.includes("flip")&&r.float.middleware.push(Zi(e.flip)),t.includes("shift")&&r.float.middleware.push(Ji(e.shift)),t.includes("inline")&&r.float.middleware.push(no(e.inline)),t.includes("arrow")&&r.float.middleware.push(to(e.arrow)),t.includes("hide")&&r.float.middleware.push(eo(e.hide)),t.includes("size")){let i=e.size?.availableWidth??null,o=e.size?.availableHeight??null;i&&delete e.size.availableWidth,o&&delete e.size.availableHeight,r.float.middleware.push(Qi({...e.size,apply({availableWidth:s,availableHeight:h,elements:u}){Object.assign(u.floating.style,{maxWidth:`${i??s}px`,maxHeight:`${o??h}px`})}}))}return r},_a=t=>{var e="0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz".split(""),r="";t||(t=Math.floor(Math.random()*e.length));for(var n=0;n{}){let r=!1;return function(){r?e.apply(this,arguments):(r=!0,t.apply(this,arguments))}}function Ma(t){let e={dismissable:!0,trap:!1};function r(n,i=null){if(n){if(n.hasAttribute("aria-expanded")||n.setAttribute("aria-expanded",!1),i.hasAttribute("id"))n.setAttribute("aria-controls",i.getAttribute("id"));else{let o=`panel-${_a(8)}`;n.setAttribute("aria-controls",o),i.setAttribute("id",o)}i.setAttribute("aria-modal",!0),i.setAttribute("role","dialog")}}t.magic("float",n=>(i={},o={})=>{let s={...e,...o},h=Object.keys(i).length>0?Da(i):{middleware:[ii()]},u=n,f=n.parentElement.closest("[x-data]"),w=f.querySelector('[x-ref="panel"]');r(u,w);function m(){return w.style.display=="block"}function E(){w.style.display="none",u.setAttribute("aria-expanded","false"),s.trap&&w.setAttribute("x-trap","false"),Ni(n,w,P)}function O(){w.style.display="block",u.setAttribute("aria-expanded","true"),s.trap&&w.setAttribute("x-trap","true"),P()}function S(){m()?E():O()}async function P(){return await ki(n,w,h).then(({middlewareData:R,placement:$,x:B,y:K})=>{if(R.arrow){let X=R.arrow?.x,ne=R.arrow?.y,J=h.middleware.filter(de=>de.name=="arrow")[0].options.element,V={top:"bottom",right:"left",bottom:"top",left:"right"}[$.split("-")[0]];Object.assign(J.style,{left:X!=null?`${X}px`:"",top:ne!=null?`${ne}px`:"",right:"",bottom:"",[V]:"-4px"})}if(R.hide){let{referenceHidden:X}=R.hide;Object.assign(w.style,{visibility:X?"hidden":"visible"})}Object.assign(w.style,{left:`${B}px`,top:`${K}px`})})}s.dismissable&&(window.addEventListener("click",R=>{!f.contains(R.target)&&m()&&S()}),window.addEventListener("keydown",R=>{R.key==="Escape"&&m()&&S()},!0)),S()}),t.directive("float",(n,{modifiers:i,expression:o},{evaluate:s,effect:h})=>{let u=o?s(o):{},f=i.length>0?Ta(i,u):{},w=null;f.float.strategy=="fixed"&&(n.style.position="fixed");let m=V=>n.parentElement&&!n.parentElement.closest("[x-data]").contains(V.target)?n.close():null,E=V=>V.key==="Escape"?n.close():null,O=n.getAttribute("x-ref"),S=n.parentElement.closest("[x-data]"),P=S.querySelectorAll(`[\\@click^="$refs.${O}"]`),R=S.querySelectorAll(`[x-on\\:click^="$refs.${O}"]`);n.style.setProperty("display","none"),r([...P,...R][0],n),n._x_isShown=!1,n.trigger=null,n._x_doHide||(n._x_doHide=()=>{n.style.setProperty("display","none",i.includes("important")?"important":void 0)}),n._x_doShow||(n._x_doShow=()=>{n.style.setProperty("display","block",i.includes("important")?"important":void 0)});let $=()=>{n._x_doHide(),n._x_isShown=!1},B=()=>{n._x_doShow(),n._x_isShown=!0},K=()=>setTimeout(B),X=Pa(V=>V?B():$(),V=>{typeof n._x_toggleAndCascadeWithTransitions=="function"?n._x_toggleAndCascadeWithTransitions(n,V,B,$):V?K():$()}),ne,J=!0;h(()=>s(V=>{!J&&V===ne||(i.includes("immediate")&&(V?K():$()),X(V),ne=V,J=!1)})),n.open=async function(V){n.trigger=V.currentTarget?V.currentTarget:V,X(!0),n.trigger.setAttribute("aria-expanded","true"),f.component.trap&&n.setAttribute("x-trap","true"),w=Ni(n.trigger,n,()=>{ki(n.trigger,n,f.float).then(({middlewareData:de,placement:U,x:Z,y:me})=>{if(de.arrow){let l=de.arrow?.x,p=de.arrow?.y,v=f.float.middleware.filter(N=>N.name=="arrow")[0].options.element,d={top:"bottom",right:"left",bottom:"top",left:"right"}[U.split("-")[0]];Object.assign(v.style,{left:l!=null?`${l}px`:"",top:p!=null?`${p}px`:"",right:"",bottom:"",[d]:"-4px"})}if(de.hide){let{referenceHidden:l}=de.hide;Object.assign(n.style,{visibility:l?"hidden":"visible"})}Object.assign(n.style,{left:`${Z}px`,top:`${me}px`})})}),window.addEventListener("click",m),window.addEventListener("keydown",E,!0)},n.close=function(){if(!n._x_isShown)return!1;X(!1),n.trigger.setAttribute("aria-expanded","false"),f.component.trap&&n.setAttribute("x-trap","false"),w(),window.removeEventListener("click",m),window.removeEventListener("keydown",E,!1)},n.toggle=function(V){n._x_isShown?n.close():n.open(V)}})}var ro=Ma;function Ra(t){t.store("lazyLoadedAssets",{loaded:new Set,check(s){return Array.isArray(s)?s.every(h=>this.loaded.has(h)):this.loaded.has(s)},markLoaded(s){Array.isArray(s)?s.forEach(h=>this.loaded.add(h)):this.loaded.add(s)}});let e=s=>new CustomEvent(s,{bubbles:!0,composed:!0,cancelable:!0}),r=(s,h={},u,f)=>{let w=document.createElement(s);return Object.entries(h).forEach(([m,E])=>w[m]=E),u&&(f?u.insertBefore(w,f):u.appendChild(w)),w},n=(s,h,u={},f=null,w=null)=>{let m=s==="link"?`link[href="${h}"]`:`script[src="${h}"]`;if(document.querySelector(m)||t.store("lazyLoadedAssets").check(h))return Promise.resolve();let E=s==="link"?{...u,href:h}:{...u,src:h},O=r(s,E,f,w);return new Promise((S,P)=>{O.onload=()=>{t.store("lazyLoadedAssets").markLoaded(h),S()},O.onerror=()=>{P(new Error(`Failed to load ${s}: ${h}`))}})},i=async(s,h,u=null,f=null)=>{let w={type:"text/css",rel:"stylesheet"};h&&(w.media=h);let m=document.head,E=null;if(u&&f){let O=document.querySelector(`link[href*="${f}"]`);O?(m=O.parentElement,E=u==="before"?O:O.nextSibling):(console.warn(`Target (${f}) not found for ${s}. Appending to head.`),m=document.head,E=null)}await n("link",s,w,m,E)},o=async(s,h,u=null,f=null,w=null)=>{let m=document.head,E=null;if(u&&f){let S=document.querySelector(`script[src*="${f}"]`);S?(m=S.parentElement,E=u==="before"?S:S.nextSibling):(console.warn(`Target (${f}) not found for ${s}. Falling back to head or body.`),m=document.head,E=null)}else(h.has("body-start")||h.has("body-end"))&&(m=document.body,h.has("body-start")&&(E=document.body.firstChild));let O={};w&&(O.type="module"),await n("script",s,O,m,E)};t.directive("load-css",(s,{expression:h},{evaluate:u})=>{let f=u(h),w=s.media,m=s.getAttribute("data-dispatch"),E=s.getAttribute("data-css-before")?"before":s.getAttribute("data-css-after")?"after":null,O=s.getAttribute("data-css-before")||s.getAttribute("data-css-after")||null;Promise.all(f.map(S=>i(S,w,E,O))).then(()=>{m&&window.dispatchEvent(e(`${m}-css`))}).catch(console.error)}),t.directive("load-js",(s,{expression:h,modifiers:u},{evaluate:f})=>{let w=f(h),m=new Set(u),E=s.getAttribute("data-js-before")?"before":s.getAttribute("data-js-after")?"after":null,O=s.getAttribute("data-js-before")||s.getAttribute("data-js-after")||null,S=s.getAttribute("data-js-as-module")||s.getAttribute("data-as-module")||!1,P=s.getAttribute("data-dispatch");Promise.all(w.map(R=>o(R,m,E,O,S))).then(()=>{P&&window.dispatchEvent(e(`${P}-js`))}).catch(console.error)})}var io=Ra;var jo=Uo(so(),1);function lo(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),r.push.apply(r,n)}return r}function Mt(t){for(var e=1;e=0)&&(r[i]=t[i]);return r}function La(t,e){if(t==null)return{};var r=Fa(t,e),n,i;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(i=0;i=0)&&Object.prototype.propertyIsEnumerable.call(t,n)&&(r[n]=t[n])}return r}var Na="1.15.3";function Ht(t){if(typeof window<"u"&&window.navigator)return!!navigator.userAgent.match(t)}var Wt=Ht(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i),er=Ht(/Edge/i),co=Ht(/firefox/i),Gn=Ht(/safari/i)&&!Ht(/chrome/i)&&!Ht(/android/i),bo=Ht(/iP(ad|od|hone)/i),yo=Ht(/chrome/i)&&Ht(/android/i),wo={capture:!1,passive:!1};function Ce(t,e,r){t.addEventListener(e,r,!Wt&&wo)}function Oe(t,e,r){t.removeEventListener(e,r,!Wt&&wo)}function _r(t,e){if(e){if(e[0]===">"&&(e=e.substring(1)),t)try{if(t.matches)return t.matches(e);if(t.msMatchesSelector)return t.msMatchesSelector(e);if(t.webkitMatchesSelector)return t.webkitMatchesSelector(e)}catch{return!1}return!1}}function xo(t){return t.host&&t!==document&&t.host.nodeType?t.host:t.parentNode}function St(t,e,r,n){if(t){r=r||document;do{if(e!=null&&(e[0]===">"?t.parentNode===r&&_r(t,e):_r(t,e))||n&&t===r)return t;if(t===r)break}while(t=xo(t))}return null}var fo=/\s+/g;function ft(t,e,r){if(t&&e)if(t.classList)t.classList[r?"add":"remove"](e);else{var n=(" "+t.className+" ").replace(fo," ").replace(" "+e+" "," ");t.className=(n+(r?" "+e:"")).replace(fo," ")}}function ae(t,e,r){var n=t&&t.style;if(n){if(r===void 0)return document.defaultView&&document.defaultView.getComputedStyle?r=document.defaultView.getComputedStyle(t,""):t.currentStyle&&(r=t.currentStyle),e===void 0?r:r[e];!(e in n)&&e.indexOf("webkit")===-1&&(e="-webkit-"+e),n[e]=r+(typeof r=="string"?"":"px")}}function Ln(t,e){var r="";if(typeof t=="string")r=t;else do{var n=ae(t,"transform");n&&n!=="none"&&(r=n+" "+r)}while(!e&&(t=t.parentNode));var i=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return i&&new i(r)}function Eo(t,e,r){if(t){var n=t.getElementsByTagName(e),i=0,o=n.length;if(r)for(;i=o:s=i<=o,!s)return n;if(n===Pt())break;n=sn(n,!1)}return!1}function Nn(t,e,r,n){for(var i=0,o=0,s=t.children;o2&&arguments[2]!==void 0?arguments[2]:{},i=n.evt,o=La(n,za);tr.pluginEvent.bind(se)(e,r,Mt({dragEl:L,parentEl:ze,ghostEl:ue,rootEl:ke,nextEl:bn,lastDownEl:Ar,cloneEl:We,cloneHidden:an,dragStarted:Yn,putSortable:Ze,activeSortable:se.active,originalEvent:i,oldIndex:Fn,oldDraggableIndex:Jn,newIndex:ut,newDraggableIndex:on,hideGhostForTarget:Po,unhideGhostForTarget:Mo,cloneNowHidden:function(){an=!0},cloneNowShown:function(){an=!1},dispatchSortableEvent:function(h){it({sortable:r,name:h,originalEvent:i})}},o))};function it(t){Va(Mt({putSortable:Ze,cloneEl:We,targetEl:L,rootEl:ke,oldIndex:Fn,oldDraggableIndex:Jn,newIndex:ut,newDraggableIndex:on},t))}var L,ze,ue,ke,bn,Ar,We,an,Fn,ut,Jn,on,wr,Ze,In=!1,Pr=!1,Mr=[],mn,Ot,si,li,ho,vo,Yn,Rn,Zn,Qn=!1,xr=!1,Cr,nt,ci=[],hi=!1,Rr=[],Fr=typeof document<"u",Er=bo,mo=er||Wt?"cssFloat":"float",Ua=Fr&&!yo&&!bo&&"draggable"in document.createElement("div"),Do=function(){if(Fr){if(Wt)return!1;var t=document.createElement("x");return t.style.cssText="pointer-events:auto",t.style.pointerEvents==="auto"}}(),To=function(e,r){var n=ae(e),i=parseInt(n.width)-parseInt(n.paddingLeft)-parseInt(n.paddingRight)-parseInt(n.borderLeftWidth)-parseInt(n.borderRightWidth),o=Nn(e,0,r),s=Nn(e,1,r),h=o&&ae(o),u=s&&ae(s),f=h&&parseInt(h.marginLeft)+parseInt(h.marginRight)+qe(o).width,w=u&&parseInt(u.marginLeft)+parseInt(u.marginRight)+qe(s).width;if(n.display==="flex")return n.flexDirection==="column"||n.flexDirection==="column-reverse"?"vertical":"horizontal";if(n.display==="grid")return n.gridTemplateColumns.split(" ").length<=1?"vertical":"horizontal";if(o&&h.float&&h.float!=="none"){var m=h.float==="left"?"left":"right";return s&&(u.clear==="both"||u.clear===m)?"vertical":"horizontal"}return o&&(h.display==="block"||h.display==="flex"||h.display==="table"||h.display==="grid"||f>=i&&n[mo]==="none"||s&&n[mo]==="none"&&f+w>i)?"vertical":"horizontal"},Ya=function(e,r,n){var i=n?e.left:e.top,o=n?e.right:e.bottom,s=n?e.width:e.height,h=n?r.left:r.top,u=n?r.right:r.bottom,f=n?r.width:r.height;return i===h||o===u||i+s/2===h+f/2},Xa=function(e,r){var n;return Mr.some(function(i){var o=i[st].options.emptyInsertThreshold;if(!(!o||bi(i))){var s=qe(i),h=e>=s.left-o&&e<=s.right+o,u=r>=s.top-o&&r<=s.bottom+o;if(h&&u)return n=i}}),n},_o=function(e){function r(o,s){return function(h,u,f,w){var m=h.options.group.name&&u.options.group.name&&h.options.group.name===u.options.group.name;if(o==null&&(s||m))return!0;if(o==null||o===!1)return!1;if(s&&o==="clone")return o;if(typeof o=="function")return r(o(h,u,f,w),s)(h,u,f,w);var E=(s?h:u).options.group.name;return o===!0||typeof o=="string"&&o===E||o.join&&o.indexOf(E)>-1}}var n={},i=e.group;(!i||Sr(i)!="object")&&(i={name:i}),n.name=i.name,n.checkPull=r(i.pull,!0),n.checkPut=r(i.put),n.revertClone=i.revertClone,e.group=n},Po=function(){!Do&&ue&&ae(ue,"display","none")},Mo=function(){!Do&&ue&&ae(ue,"display","")};Fr&&!yo&&document.addEventListener("click",function(t){if(Pr)return t.preventDefault(),t.stopPropagation&&t.stopPropagation(),t.stopImmediatePropagation&&t.stopImmediatePropagation(),Pr=!1,!1},!0);var gn=function(e){if(L){e=e.touches?e.touches[0]:e;var r=Xa(e.clientX,e.clientY);if(r){var n={};for(var i in e)e.hasOwnProperty(i)&&(n[i]=e[i]);n.target=n.rootEl=r,n.preventDefault=void 0,n.stopPropagation=void 0,r[st]._onDragOver(n)}}},qa=function(e){L&&L.parentNode[st]._isOutsideThisEl(e.target)};function se(t,e){if(!(t&&t.nodeType&&t.nodeType===1))throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(t));this.el=t,this.options=e=$t({},e),t[st]=this;var r={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(t.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return To(t,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(s,h){s.setData("Text",h.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:se.supportPointer!==!1&&"PointerEvent"in window&&!Gn,emptyInsertThreshold:5};tr.initializePlugins(this,t,r);for(var n in r)!(n in e)&&(e[n]=r[n]);_o(e);for(var i in this)i.charAt(0)==="_"&&typeof this[i]=="function"&&(this[i]=this[i].bind(this));this.nativeDraggable=e.forceFallback?!1:Ua,this.nativeDraggable&&(this.options.touchStartThreshold=1),e.supportPointer?Ce(t,"pointerdown",this._onTapStart):(Ce(t,"mousedown",this._onTapStart),Ce(t,"touchstart",this._onTapStart)),this.nativeDraggable&&(Ce(t,"dragover",this),Ce(t,"dragenter",this)),Mr.push(this.el),e.store&&e.store.get&&this.sort(e.store.get(this)||[]),$t(this,Ha())}se.prototype={constructor:se,_isOutsideThisEl:function(e){!this.el.contains(e)&&e!==this.el&&(Rn=null)},_getDirection:function(e,r){return typeof this.options.direction=="function"?this.options.direction.call(this,e,r,L):this.options.direction},_onTapStart:function(e){if(e.cancelable){var r=this,n=this.el,i=this.options,o=i.preventOnFilter,s=e.type,h=e.touches&&e.touches[0]||e.pointerType&&e.pointerType==="touch"&&e,u=(h||e).target,f=e.target.shadowRoot&&(e.path&&e.path[0]||e.composedPath&&e.composedPath()[0])||u,w=i.filter;if(ns(n),!L&&!(/mousedown|pointerdown/.test(s)&&e.button!==0||i.disabled)&&!f.isContentEditable&&!(!this.nativeDraggable&&Gn&&u&&u.tagName.toUpperCase()==="SELECT")&&(u=St(u,i.draggable,n,!1),!(u&&u.animated)&&Ar!==u)){if(Fn=vt(u),Jn=vt(u,i.draggable),typeof w=="function"){if(w.call(this,e,u,this)){it({sortable:r,rootEl:f,name:"filter",targetEl:u,toEl:n,fromEl:n}),at("filter",r,{evt:e}),o&&e.cancelable&&e.preventDefault();return}}else if(w&&(w=w.split(",").some(function(m){if(m=St(f,m.trim(),n,!1),m)return it({sortable:r,rootEl:m,name:"filter",targetEl:u,fromEl:n,toEl:n}),at("filter",r,{evt:e}),!0}),w)){o&&e.cancelable&&e.preventDefault();return}i.handle&&!St(f,i.handle,n,!1)||this._prepareDragStart(e,h,u)}}},_prepareDragStart:function(e,r,n){var i=this,o=i.el,s=i.options,h=o.ownerDocument,u;if(n&&!L&&n.parentNode===o){var f=qe(n);if(ke=o,L=n,ze=L.parentNode,bn=L.nextSibling,Ar=n,wr=s.group,se.dragged=L,mn={target:L,clientX:(r||e).clientX,clientY:(r||e).clientY},ho=mn.clientX-f.left,vo=mn.clientY-f.top,this._lastX=(r||e).clientX,this._lastY=(r||e).clientY,L.style["will-change"]="all",u=function(){if(at("delayEnded",i,{evt:e}),se.eventCanceled){i._onDrop();return}i._disableDelayedDragEvents(),!co&&i.nativeDraggable&&(L.draggable=!0),i._triggerDragStart(e,r),it({sortable:i,name:"choose",originalEvent:e}),ft(L,s.chosenClass,!0)},s.ignore.split(",").forEach(function(w){Eo(L,w.trim(),fi)}),Ce(h,"dragover",gn),Ce(h,"mousemove",gn),Ce(h,"touchmove",gn),Ce(h,"mouseup",i._onDrop),Ce(h,"touchend",i._onDrop),Ce(h,"touchcancel",i._onDrop),co&&this.nativeDraggable&&(this.options.touchStartThreshold=4,L.draggable=!0),at("delayStart",this,{evt:e}),s.delay&&(!s.delayOnTouchOnly||r)&&(!this.nativeDraggable||!(er||Wt))){if(se.eventCanceled){this._onDrop();return}Ce(h,"mouseup",i._disableDelayedDrag),Ce(h,"touchend",i._disableDelayedDrag),Ce(h,"touchcancel",i._disableDelayedDrag),Ce(h,"mousemove",i._delayedDragTouchMoveHandler),Ce(h,"touchmove",i._delayedDragTouchMoveHandler),s.supportPointer&&Ce(h,"pointermove",i._delayedDragTouchMoveHandler),i._dragStartTimer=setTimeout(u,s.delay)}else u()}},_delayedDragTouchMoveHandler:function(e){var r=e.touches?e.touches[0]:e;Math.max(Math.abs(r.clientX-this._lastX),Math.abs(r.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){L&&fi(L),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var e=this.el.ownerDocument;Oe(e,"mouseup",this._disableDelayedDrag),Oe(e,"touchend",this._disableDelayedDrag),Oe(e,"touchcancel",this._disableDelayedDrag),Oe(e,"mousemove",this._delayedDragTouchMoveHandler),Oe(e,"touchmove",this._delayedDragTouchMoveHandler),Oe(e,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(e,r){r=r||e.pointerType=="touch"&&e,!this.nativeDraggable||r?this.options.supportPointer?Ce(document,"pointermove",this._onTouchMove):r?Ce(document,"touchmove",this._onTouchMove):Ce(document,"mousemove",this._onTouchMove):(Ce(L,"dragend",this),Ce(ke,"dragstart",this._onDragStart));try{document.selection?Dr(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch{}},_dragStarted:function(e,r){if(In=!1,ke&&L){at("dragStarted",this,{evt:r}),this.nativeDraggable&&Ce(document,"dragover",qa);var n=this.options;!e&&ft(L,n.dragClass,!1),ft(L,n.ghostClass,!0),se.active=this,e&&this._appendGhost(),it({sortable:this,name:"start",originalEvent:r})}else this._nulling()},_emulateDragOver:function(){if(Ot){this._lastX=Ot.clientX,this._lastY=Ot.clientY,Po();for(var e=document.elementFromPoint(Ot.clientX,Ot.clientY),r=e;e&&e.shadowRoot&&(e=e.shadowRoot.elementFromPoint(Ot.clientX,Ot.clientY),e!==r);)r=e;if(L.parentNode[st]._isOutsideThisEl(e),r)do{if(r[st]){var n=void 0;if(n=r[st]._onDragOver({clientX:Ot.clientX,clientY:Ot.clientY,target:e,rootEl:r}),n&&!this.options.dragoverBubble)break}e=r}while(r=xo(r));Mo()}},_onTouchMove:function(e){if(mn){var r=this.options,n=r.fallbackTolerance,i=r.fallbackOffset,o=e.touches?e.touches[0]:e,s=ue&&Ln(ue,!0),h=ue&&s&&s.a,u=ue&&s&&s.d,f=Er&&nt&&po(nt),w=(o.clientX-mn.clientX+i.x)/(h||1)+(f?f[0]-ci[0]:0)/(h||1),m=(o.clientY-mn.clientY+i.y)/(u||1)+(f?f[1]-ci[1]:0)/(u||1);if(!se.active&&!In){if(n&&Math.max(Math.abs(o.clientX-this._lastX),Math.abs(o.clientY-this._lastY))=0&&(it({rootEl:ze,name:"add",toEl:ze,fromEl:ke,originalEvent:e}),it({sortable:this,name:"remove",toEl:ze,originalEvent:e}),it({rootEl:ze,name:"sort",toEl:ze,fromEl:ke,originalEvent:e}),it({sortable:this,name:"sort",toEl:ze,originalEvent:e})),Ze&&Ze.save()):ut!==Fn&&ut>=0&&(it({sortable:this,name:"update",toEl:ze,originalEvent:e}),it({sortable:this,name:"sort",toEl:ze,originalEvent:e})),se.active&&((ut==null||ut===-1)&&(ut=Fn,on=Jn),it({sortable:this,name:"end",toEl:ze,originalEvent:e}),this.save()))),this._nulling()},_nulling:function(){at("nulling",this),ke=L=ze=ue=bn=We=Ar=an=mn=Ot=Yn=ut=on=Fn=Jn=Rn=Zn=Ze=wr=se.dragged=se.ghost=se.clone=se.active=null,Rr.forEach(function(e){e.checked=!0}),Rr.length=si=li=0},handleEvent:function(e){switch(e.type){case"drop":case"dragend":this._onDrop(e);break;case"dragenter":case"dragover":L&&(this._onDragOver(e),Ga(e));break;case"selectstart":e.preventDefault();break}},toArray:function(){for(var e=[],r,n=this.el.children,i=0,o=n.length,s=this.options;ii.right+o||t.clientY>n.bottom&&t.clientX>n.left:t.clientY>i.bottom+o||t.clientX>n.right&&t.clientY>n.top}function Qa(t,e,r,n,i,o,s,h){var u=n?t.clientY:t.clientX,f=n?r.height:r.width,w=n?r.top:r.left,m=n?r.bottom:r.right,E=!1;if(!s){if(h&&Crw+f*o/2:um-Cr)return-Zn}else if(u>w+f*(1-i)/2&&um-f*o/2)?u>w+f/2?1:-1:0}function es(t){return vt(L){t.directive("sortable",e=>{let r=parseInt(e.dataset?.sortableAnimationDuration);r!==0&&!r&&(r=300),e.sortable=xi.create(e,{group:e.getAttribute("x-sortable-group"),draggable:"[x-sortable-item]",handle:"[x-sortable-handle]",dataIdAttr:"x-sortable-item",animation:r,ghostClass:"fi-sortable-ghost"})})};var is=Object.create,Si=Object.defineProperty,os=Object.getPrototypeOf,as=Object.prototype.hasOwnProperty,ss=Object.getOwnPropertyNames,ls=Object.getOwnPropertyDescriptor,cs=t=>Si(t,"__esModule",{value:!0}),Fo=(t,e)=>()=>(e||(e={exports:{}},t(e.exports,e)),e.exports),fs=(t,e,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of ss(e))!as.call(t,n)&&n!=="default"&&Si(t,n,{get:()=>e[n],enumerable:!(r=ls(e,n))||r.enumerable});return t},Lo=t=>fs(cs(Si(t!=null?is(os(t)):{},"default",t&&t.__esModule&&"default"in t?{get:()=>t.default,enumerable:!0}:{value:t,enumerable:!0})),t),us=Fo(t=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});function e(c){var a=c.getBoundingClientRect();return{width:a.width,height:a.height,top:a.top,right:a.right,bottom:a.bottom,left:a.left,x:a.left,y:a.top}}function r(c){if(c==null)return window;if(c.toString()!=="[object Window]"){var a=c.ownerDocument;return a&&a.defaultView||window}return c}function n(c){var a=r(c),b=a.pageXOffset,D=a.pageYOffset;return{scrollLeft:b,scrollTop:D}}function i(c){var a=r(c).Element;return c instanceof a||c instanceof Element}function o(c){var a=r(c).HTMLElement;return c instanceof a||c instanceof HTMLElement}function s(c){if(typeof ShadowRoot>"u")return!1;var a=r(c).ShadowRoot;return c instanceof a||c instanceof ShadowRoot}function h(c){return{scrollLeft:c.scrollLeft,scrollTop:c.scrollTop}}function u(c){return c===r(c)||!o(c)?n(c):h(c)}function f(c){return c?(c.nodeName||"").toLowerCase():null}function w(c){return((i(c)?c.ownerDocument:c.document)||window.document).documentElement}function m(c){return e(w(c)).left+n(c).scrollLeft}function E(c){return r(c).getComputedStyle(c)}function O(c){var a=E(c),b=a.overflow,D=a.overflowX,T=a.overflowY;return/auto|scroll|overlay|hidden/.test(b+T+D)}function S(c,a,b){b===void 0&&(b=!1);var D=w(a),T=e(c),F=o(a),W={scrollLeft:0,scrollTop:0},j={x:0,y:0};return(F||!F&&!b)&&((f(a)!=="body"||O(D))&&(W=u(a)),o(a)?(j=e(a),j.x+=a.clientLeft,j.y+=a.clientTop):D&&(j.x=m(D))),{x:T.left+W.scrollLeft-j.x,y:T.top+W.scrollTop-j.y,width:T.width,height:T.height}}function P(c){var a=e(c),b=c.offsetWidth,D=c.offsetHeight;return Math.abs(a.width-b)<=1&&(b=a.width),Math.abs(a.height-D)<=1&&(D=a.height),{x:c.offsetLeft,y:c.offsetTop,width:b,height:D}}function R(c){return f(c)==="html"?c:c.assignedSlot||c.parentNode||(s(c)?c.host:null)||w(c)}function $(c){return["html","body","#document"].indexOf(f(c))>=0?c.ownerDocument.body:o(c)&&O(c)?c:$(R(c))}function B(c,a){var b;a===void 0&&(a=[]);var D=$(c),T=D===((b=c.ownerDocument)==null?void 0:b.body),F=r(D),W=T?[F].concat(F.visualViewport||[],O(D)?D:[]):D,j=a.concat(W);return T?j:j.concat(B(R(W)))}function K(c){return["table","td","th"].indexOf(f(c))>=0}function X(c){return!o(c)||E(c).position==="fixed"?null:c.offsetParent}function ne(c){var a=navigator.userAgent.toLowerCase().indexOf("firefox")!==-1,b=navigator.userAgent.indexOf("Trident")!==-1;if(b&&o(c)){var D=E(c);if(D.position==="fixed")return null}for(var T=R(c);o(T)&&["html","body"].indexOf(f(T))<0;){var F=E(T);if(F.transform!=="none"||F.perspective!=="none"||F.contain==="paint"||["transform","perspective"].indexOf(F.willChange)!==-1||a&&F.willChange==="filter"||a&&F.filter&&F.filter!=="none")return T;T=T.parentNode}return null}function J(c){for(var a=r(c),b=X(c);b&&K(b)&&E(b).position==="static";)b=X(b);return b&&(f(b)==="html"||f(b)==="body"&&E(b).position==="static")?a:b||ne(c)||a}var V="top",de="bottom",U="right",Z="left",me="auto",l=[V,de,U,Z],p="start",v="end",d="clippingParents",N="viewport",_="popper",M="reference",Q=l.reduce(function(c,a){return c.concat([a+"-"+p,a+"-"+v])},[]),Ue=[].concat(l,[me]).reduce(function(c,a){return c.concat([a,a+"-"+p,a+"-"+v])},[]),Rt="beforeRead",Vt="read",Lr="afterRead",Nr="beforeMain",kr="main",zt="afterMain",nr="beforeWrite",jr="write",rr="afterWrite",It=[Rt,Vt,Lr,Nr,kr,zt,nr,jr,rr];function Br(c){var a=new Map,b=new Set,D=[];c.forEach(function(F){a.set(F.name,F)});function T(F){b.add(F.name);var W=[].concat(F.requires||[],F.requiresIfExists||[]);W.forEach(function(j){if(!b.has(j)){var q=a.get(j);q&&T(q)}}),D.push(F)}return c.forEach(function(F){b.has(F.name)||T(F)}),D}function mt(c){var a=Br(c);return It.reduce(function(b,D){return b.concat(a.filter(function(T){return T.phase===D}))},[])}function Ut(c){var a;return function(){return a||(a=new Promise(function(b){Promise.resolve().then(function(){a=void 0,b(c())})})),a}}function At(c){for(var a=arguments.length,b=new Array(a>1?a-1:0),D=1;D=0,D=b&&o(c)?J(c):c;return i(D)?a.filter(function(T){return i(T)&&kn(T,D)&&f(T)!=="body"}):[]}function wn(c,a,b){var D=a==="clippingParents"?yn(c):[].concat(a),T=[].concat(D,[b]),F=T[0],W=T.reduce(function(j,q){var oe=sr(c,q);return j.top=gt(oe.top,j.top),j.right=ln(oe.right,j.right),j.bottom=ln(oe.bottom,j.bottom),j.left=gt(oe.left,j.left),j},sr(c,F));return W.width=W.right-W.left,W.height=W.bottom-W.top,W.x=W.left,W.y=W.top,W}function cn(c){return c.split("-")[1]}function dt(c){return["top","bottom"].indexOf(c)>=0?"x":"y"}function lr(c){var a=c.reference,b=c.element,D=c.placement,T=D?ot(D):null,F=D?cn(D):null,W=a.x+a.width/2-b.width/2,j=a.y+a.height/2-b.height/2,q;switch(T){case V:q={x:W,y:a.y-b.height};break;case de:q={x:W,y:a.y+a.height};break;case U:q={x:a.x+a.width,y:j};break;case Z:q={x:a.x-b.width,y:j};break;default:q={x:a.x,y:a.y}}var oe=T?dt(T):null;if(oe!=null){var z=oe==="y"?"height":"width";switch(F){case p:q[oe]=q[oe]-(a[z]/2-b[z]/2);break;case v:q[oe]=q[oe]+(a[z]/2-b[z]/2);break}}return q}function cr(){return{top:0,right:0,bottom:0,left:0}}function fr(c){return Object.assign({},cr(),c)}function ur(c,a){return a.reduce(function(b,D){return b[D]=c,b},{})}function qt(c,a){a===void 0&&(a={});var b=a,D=b.placement,T=D===void 0?c.placement:D,F=b.boundary,W=F===void 0?d:F,j=b.rootBoundary,q=j===void 0?N:j,oe=b.elementContext,z=oe===void 0?_:oe,De=b.altBoundary,Le=De===void 0?!1:De,Ae=b.padding,xe=Ae===void 0?0:Ae,Me=fr(typeof xe!="number"?xe:ur(xe,l)),Ee=z===_?M:_,Be=c.elements.reference,Re=c.rects.popper,He=c.elements[Le?Ee:z],ce=wn(i(He)?He:He.contextElement||w(c.elements.popper),W,q),Pe=e(Be),Te=lr({reference:Pe,element:Re,strategy:"absolute",placement:T}),Ne=Xt(Object.assign({},Re,Te)),Fe=z===_?Ne:Pe,Ye={top:ce.top-Fe.top+Me.top,bottom:Fe.bottom-ce.bottom+Me.bottom,left:ce.left-Fe.left+Me.left,right:Fe.right-ce.right+Me.right},$e=c.modifiersData.offset;if(z===_&&$e){var Ve=$e[T];Object.keys(Ye).forEach(function(wt){var et=[U,de].indexOf(wt)>=0?1:-1,Lt=[V,de].indexOf(wt)>=0?"y":"x";Ye[wt]+=Ve[Lt]*et})}return Ye}var dr="Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.",zr="Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.",xn={placement:"bottom",modifiers:[],strategy:"absolute"};function fn(){for(var c=arguments.length,a=new Array(c),b=0;b100){console.error(zr);break}if(z.reset===!0){z.reset=!1,Pe=-1;continue}var Te=z.orderedModifiers[Pe],Ne=Te.fn,Fe=Te.options,Ye=Fe===void 0?{}:Fe,$e=Te.name;typeof Ne=="function"&&(z=Ne({state:z,options:Ye,name:$e,instance:Ae})||z)}}},update:Ut(function(){return new Promise(function(Ee){Ae.forceUpdate(),Ee(z)})}),destroy:function(){Me(),Le=!0}};if(!fn(j,q))return console.error(dr),Ae;Ae.setOptions(oe).then(function(Ee){!Le&&oe.onFirstUpdate&&oe.onFirstUpdate(Ee)});function xe(){z.orderedModifiers.forEach(function(Ee){var Be=Ee.name,Re=Ee.options,He=Re===void 0?{}:Re,ce=Ee.effect;if(typeof ce=="function"){var Pe=ce({state:z,name:Be,instance:Ae,options:He}),Te=function(){};De.push(Pe||Te)}})}function Me(){De.forEach(function(Ee){return Ee()}),De=[]}return Ae}}var On={passive:!0};function Ur(c){var a=c.state,b=c.instance,D=c.options,T=D.scroll,F=T===void 0?!0:T,W=D.resize,j=W===void 0?!0:W,q=r(a.elements.popper),oe=[].concat(a.scrollParents.reference,a.scrollParents.popper);return F&&oe.forEach(function(z){z.addEventListener("scroll",b.update,On)}),j&&q.addEventListener("resize",b.update,On),function(){F&&oe.forEach(function(z){z.removeEventListener("scroll",b.update,On)}),j&&q.removeEventListener("resize",b.update,On)}}var jn={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:Ur,data:{}};function Yr(c){var a=c.state,b=c.name;a.modifiersData[b]=lr({reference:a.rects.reference,element:a.rects.popper,strategy:"absolute",placement:a.placement})}var Bn={name:"popperOffsets",enabled:!0,phase:"read",fn:Yr,data:{}},Xr={top:"auto",right:"auto",bottom:"auto",left:"auto"};function qr(c){var a=c.x,b=c.y,D=window,T=D.devicePixelRatio||1;return{x:Yt(Yt(a*T)/T)||0,y:Yt(Yt(b*T)/T)||0}}function Hn(c){var a,b=c.popper,D=c.popperRect,T=c.placement,F=c.offsets,W=c.position,j=c.gpuAcceleration,q=c.adaptive,oe=c.roundOffsets,z=oe===!0?qr(F):typeof oe=="function"?oe(F):F,De=z.x,Le=De===void 0?0:De,Ae=z.y,xe=Ae===void 0?0:Ae,Me=F.hasOwnProperty("x"),Ee=F.hasOwnProperty("y"),Be=Z,Re=V,He=window;if(q){var ce=J(b),Pe="clientHeight",Te="clientWidth";ce===r(b)&&(ce=w(b),E(ce).position!=="static"&&(Pe="scrollHeight",Te="scrollWidth")),ce=ce,T===V&&(Re=de,xe-=ce[Pe]-D.height,xe*=j?1:-1),T===Z&&(Be=U,Le-=ce[Te]-D.width,Le*=j?1:-1)}var Ne=Object.assign({position:W},q&&Xr);if(j){var Fe;return Object.assign({},Ne,(Fe={},Fe[Re]=Ee?"0":"",Fe[Be]=Me?"0":"",Fe.transform=(He.devicePixelRatio||1)<2?"translate("+Le+"px, "+xe+"px)":"translate3d("+Le+"px, "+xe+"px, 0)",Fe))}return Object.assign({},Ne,(a={},a[Re]=Ee?xe+"px":"",a[Be]=Me?Le+"px":"",a.transform="",a))}function g(c){var a=c.state,b=c.options,D=b.gpuAcceleration,T=D===void 0?!0:D,F=b.adaptive,W=F===void 0?!0:F,j=b.roundOffsets,q=j===void 0?!0:j,oe=E(a.elements.popper).transitionProperty||"";W&&["transform","top","right","bottom","left"].some(function(De){return oe.indexOf(De)>=0})&&console.warn(["Popper: Detected CSS transitions on at least one of the following",'CSS properties: "transform", "top", "right", "bottom", "left".',` `,'Disable the "computeStyles" modifier\'s `adaptive` option to allow',"for smooth transitions, or remove these properties from the CSS","transition declaration on the popper element if only transitioning","opacity or background-color for example.",` -`,"We recommend using the popper element as a wrapper around an inner","element that can have any CSS property transitioned for animations."].join(" "));var z={placement:ot(a.placement),popper:a.elements.popper,popperRect:a.rects.popper,gpuAcceleration:T};a.modifiersData.popperOffsets!=null&&(a.styles.popper=Object.assign({},a.styles.popper,Hn(Object.assign({},z,{offsets:a.modifiersData.popperOffsets,position:a.options.strategy,adaptive:W,roundOffsets:q})))),a.modifiersData.arrow!=null&&(a.styles.arrow=Object.assign({},a.styles.arrow,Hn(Object.assign({},z,{offsets:a.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:q})))),a.attributes.popper=Object.assign({},a.attributes.popper,{"data-popper-placement":a.placement})}var w={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:m,data:{}};function S(c){var a=c.state;Object.keys(a.elements).forEach(function(g){var D=a.styles[g]||{},T=a.attributes[g]||{},F=a.elements[g];!o(F)||!f(F)||(Object.assign(F.style,D),Object.keys(T).forEach(function(W){var j=T[W];j===!1?F.removeAttribute(W):F.setAttribute(W,j===!0?"":j)}))})}function I(c){var a=c.state,g={popper:{position:a.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(a.elements.popper.style,g.popper),a.styles=g,a.elements.arrow&&Object.assign(a.elements.arrow.style,g.arrow),function(){Object.keys(a.elements).forEach(function(D){var T=a.elements[D],F=a.attributes[D]||{},W=Object.keys(a.styles.hasOwnProperty(D)?a.styles[D]:g[D]),j=W.reduce(function(q,oe){return q[oe]="",q},{});!o(T)||!f(T)||(Object.assign(T.style,j),Object.keys(F).forEach(function(q){T.removeAttribute(q)}))})}}var Y={name:"applyStyles",enabled:!0,phase:"write",fn:S,effect:I,requires:["computeStyles"]};function H(c,a,g){var D=ot(c),T=[Z,V].indexOf(D)>=0?-1:1,F=typeof g=="function"?g(Object.assign({},a,{placement:c})):g,W=F[0],j=F[1];return W=W||0,j=(j||0)*T,[Z,U].indexOf(D)>=0?{x:j,y:W}:{x:W,y:j}}function k(c){var a=c.state,g=c.options,D=c.name,T=g.offset,F=T===void 0?[0,0]:T,W=Ue.reduce(function(z,De){return z[De]=H(De,a.rects,F),z},{}),j=W[a.placement],q=j.x,oe=j.y;a.modifiersData.popperOffsets!=null&&(a.modifiersData.popperOffsets.x+=q,a.modifiersData.popperOffsets.y+=oe),a.modifiersData[D]=W}var be={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:k},le={left:"right",right:"left",bottom:"top",top:"bottom"};function pe(c){return c.replace(/left|right|bottom|top/g,function(a){return le[a]})}var ye={start:"end",end:"start"};function _e(c){return c.replace(/start|end/g,function(a){return ye[a]})}function je(c,a){a===void 0&&(a={});var g=a,D=g.placement,T=g.boundary,F=g.rootBoundary,W=g.padding,j=g.flipVariations,q=g.allowedAutoPlacements,oe=q===void 0?Ue:q,z=cn(D),De=z?j?Q:Q.filter(function(xe){return cn(xe)===z}):s,Le=De.filter(function(xe){return oe.indexOf(xe)>=0});Le.length===0&&(Le=De,console.error(["Popper: The `allowedAutoPlacements` option did not allow any","placements. Ensure the `placement` option matches the variation","of the allowed placements.",'For example, "auto" cannot be used to allow "bottom-start".','Use "auto-start" instead.'].join(" ")));var Ae=Le.reduce(function(xe,Me){return xe[Me]=qt(c,{placement:Me,boundary:T,rootBoundary:F,padding:W})[ot(Me)],xe},{});return Object.keys(Ae).sort(function(xe,Me){return Ae[xe]-Ae[Me]})}function Se(c){if(ot(c)===me)return[];var a=pe(c);return[_e(c),a,_e(a)]}function Ie(c){var a=c.state,g=c.options,D=c.name;if(!a.modifiersData[D]._skip){for(var T=g.mainAxis,F=T===void 0?!0:T,W=g.altAxis,j=W===void 0?!0:W,q=g.fallbackPlacements,oe=g.padding,z=g.boundary,De=g.rootBoundary,Le=g.altBoundary,Ae=g.flipVariations,xe=Ae===void 0?!0:Ae,Me=g.allowedAutoPlacements,Ee=a.options.placement,Be=ot(Ee),Re=Be===Ee,He=q||(Re||!xe?[pe(Ee)]:Se(Ee)),ce=[Ee].concat(He).reduce(function(te,ge){return te.concat(ot(ge)===me?je(a,{placement:ge,boundary:z,rootBoundary:De,padding:oe,flipVariations:xe,allowedAutoPlacements:Me}):ge)},[]),Pe=a.rects.reference,Te=a.rects.popper,Ne=new Map,Fe=!0,Ye=ce[0],$e=0;$e=0,dn=Lt?"width":"height",Zt=qt(a,{placement:Ve,boundary:z,rootBoundary:De,altBoundary:Le,padding:oe}),Nt=Lt?et?U:Z:et?de:V;Pe[dn]>Te[dn]&&(Nt=pe(Nt));var $n=pe(Nt),Qt=[];if(F&&Qt.push(Zt[wt]<=0),j&&Qt.push(Zt[Nt]<=0,Zt[$n]<=0),Qt.every(function(te){return te})){Ye=Ve,Fe=!1;break}Ne.set(Ve,Qt)}if(Fe)for(var Sn=xe?3:1,Wn=function(ge){var we=ce.find(function(Ke){var Je=Ne.get(Ke);if(Je)return Je.slice(0,ge).every(function(Dt){return Dt})});if(we)return Ye=we,"break"},C=Sn;C>0;C--){var G=Wn(C);if(G==="break")break}a.placement!==Ye&&(a.modifiersData[D]._skip=!0,a.placement=Ye,a.reset=!0)}}var re={name:"flip",enabled:!0,phase:"main",fn:Ie,requiresIfExists:["offset"],data:{_skip:!1}};function he(c){return c==="x"?"y":"x"}function ve(c,a,g){return gt(c,ln(a,g))}function ee(c){var a=c.state,g=c.options,D=c.name,T=g.mainAxis,F=T===void 0?!0:T,W=g.altAxis,j=W===void 0?!1:W,q=g.boundary,oe=g.rootBoundary,z=g.altBoundary,De=g.padding,Le=g.tether,Ae=Le===void 0?!0:Le,xe=g.tetherOffset,Me=xe===void 0?0:xe,Ee=qt(a,{boundary:q,rootBoundary:oe,padding:De,altBoundary:z}),Be=ot(a.placement),Re=cn(a.placement),He=!Re,ce=dt(Be),Pe=he(ce),Te=a.modifiersData.popperOffsets,Ne=a.rects.reference,Fe=a.rects.popper,Ye=typeof Me=="function"?Me(Object.assign({},a.rects,{placement:a.placement})):Me,$e={x:0,y:0};if(Te){if(F||j){var Ve=ce==="y"?V:Z,wt=ce==="y"?de:U,et=ce==="y"?"height":"width",Lt=Te[ce],dn=Te[ce]+Ee[Ve],Zt=Te[ce]-Ee[wt],Nt=Ae?-Fe[et]/2:0,$n=Re===p?Ne[et]:Fe[et],Qt=Re===p?-Fe[et]:-Ne[et],Sn=a.elements.arrow,Wn=Ae&&Sn?P(Sn):{width:0,height:0},C=a.modifiersData["arrow#persistent"]?a.modifiersData["arrow#persistent"].padding:cr(),G=C[Ve],te=C[wt],ge=ve(0,Ne[et],Wn[et]),we=He?Ne[et]/2-Nt-ge-G-Ye:$n-ge-G-Ye,Ke=He?-Ne[et]/2+Nt+ge+te+Ye:Qt+ge+te+Ye,Je=a.elements.arrow&&J(a.elements.arrow),Dt=Je?ce==="y"?Je.clientTop||0:Je.clientLeft||0:0,Vn=a.modifiersData.offset?a.modifiersData.offset[a.placement][ce]:0,Tt=Te[ce]+we-Vn-Dt,An=Te[ce]+Ke-Vn;if(F){var pn=ve(Ae?ln(dn,Tt):dn,Lt,Ae?gt(Zt,An):Zt);Te[ce]=pn,$e[ce]=pn-Lt}if(j){var en=ce==="x"?V:Z,Gr=ce==="x"?de:U,tn=Te[Pe],hn=tn+Ee[en],Ai=tn-Ee[Gr],Ci=ve(Ae?ln(hn,Tt):hn,tn,Ae?gt(Ai,An):Ai);Te[Pe]=Ci,$e[Pe]=Ci-tn}}a.modifiersData[D]=$e}}var ie={name:"preventOverflow",enabled:!0,phase:"main",fn:ee,requiresIfExists:["offset"]},x=function(a,g){return a=typeof a=="function"?a(Object.assign({},g.rects,{placement:g.placement})):a,fr(typeof a!="number"?a:ur(a,s))};function Ge(c){var a,g=c.state,D=c.name,T=c.options,F=g.elements.arrow,W=g.modifiersData.popperOffsets,j=ot(g.placement),q=dt(j),oe=[Z,U].indexOf(j)>=0,z=oe?"height":"width";if(!(!F||!W)){var De=x(T.padding,g),Le=P(F),Ae=q==="y"?V:Z,xe=q==="y"?de:U,Me=g.rects.reference[z]+g.rects.reference[q]-W[q]-g.rects.popper[z],Ee=W[q]-g.rects.reference[q],Be=J(F),Re=Be?q==="y"?Be.clientHeight||0:Be.clientWidth||0:0,He=Me/2-Ee/2,ce=De[Ae],Pe=Re-Le[z]-De[xe],Te=Re/2-Le[z]/2+He,Ne=ve(ce,Te,Pe),Fe=q;g.modifiersData[D]=(a={},a[Fe]=Ne,a.centerOffset=Ne-Te,a)}}function fe(c){var a=c.state,g=c.options,D=g.element,T=D===void 0?"[data-popper-arrow]":D;if(T!=null&&!(typeof T=="string"&&(T=a.elements.popper.querySelector(T),!T))){if(o(T)||console.error(['Popper: "arrow" element must be an HTMLElement (not an SVGElement).',"To use an SVG arrow, wrap it in an HTMLElement that will be used as","the arrow."].join(" ")),!kn(a.elements.popper,T)){console.error(['Popper: "arrow" modifier\'s `element` must be a child of the popper',"element."].join(" "));return}a.elements.arrow=T}}var Ft={name:"arrow",enabled:!0,phase:"main",fn:Ge,effect:fe,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function bt(c,a,g){return g===void 0&&(g={x:0,y:0}),{top:c.top-a.height-g.y,right:c.right-a.width+g.x,bottom:c.bottom-a.height+g.y,left:c.left-a.width-g.x}}function Gt(c){return[V,U,de,Z].some(function(a){return c[a]>=0})}function Kt(c){var a=c.state,g=c.name,D=a.rects.reference,T=a.rects.popper,F=a.modifiersData.preventOverflow,W=qt(a,{elementContext:"reference"}),j=qt(a,{altBoundary:!0}),q=bt(W,D),oe=bt(j,T,F),z=Gt(q),De=Gt(oe);a.modifiersData[g]={referenceClippingOffsets:q,popperEscapeOffsets:oe,isReferenceHidden:z,hasPopperEscaped:De},a.attributes.popper=Object.assign({},a.attributes.popper,{"data-popper-reference-hidden":z,"data-popper-escaped":De})}var Jt={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:Kt},rt=[jn,Bn,w,Y],st=En({defaultModifiers:rt}),yt=[jn,Bn,w,Y,be,re,ie,Ft,Jt],un=En({defaultModifiers:yt});t.applyStyles=Y,t.arrow=Ft,t.computeStyles=w,t.createPopper=un,t.createPopperLite=st,t.defaultModifiers=yt,t.detectOverflow=qt,t.eventListeners=jn,t.flip=re,t.hide=Jt,t.offset=be,t.popperGenerator=En,t.popperOffsets=Bn,t.preventOverflow=ie}),Lo=Io(t=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var e=us(),r='',n="tippy-box",i="tippy-content",o="tippy-backdrop",l="tippy-arrow",h="tippy-svg-arrow",u={passive:!0,capture:!0};function f(m,w){return{}.hasOwnProperty.call(m,w)}function y(m,w,S){if(Array.isArray(m)){var I=m[w];return I??(Array.isArray(S)?S[w]:S)}return m}function b(m,w){var S={}.toString.call(m);return S.indexOf("[object")===0&&S.indexOf(w+"]")>-1}function A(m,w){return typeof m=="function"?m.apply(void 0,w):m}function E(m,w){if(w===0)return m;var S;return function(I){clearTimeout(S),S=setTimeout(function(){m(I)},w)}}function O(m,w){var S=Object.assign({},m);return w.forEach(function(I){delete S[I]}),S}function P(m){return m.split(/\s+/).filter(Boolean)}function R(m){return[].concat(m)}function $(m,w){m.indexOf(w)===-1&&m.push(w)}function B(m){return m.filter(function(w,S){return m.indexOf(w)===S})}function K(m){return m.split("-")[0]}function X(m){return[].slice.call(m)}function ne(m){return Object.keys(m).reduce(function(w,S){return m[S]!==void 0&&(w[S]=m[S]),w},{})}function J(){return document.createElement("div")}function V(m){return["Element","Fragment"].some(function(w){return b(m,w)})}function de(m){return b(m,"NodeList")}function U(m){return b(m,"MouseEvent")}function Z(m){return!!(m&&m._tippy&&m._tippy.reference===m)}function me(m){return V(m)?[m]:de(m)?X(m):Array.isArray(m)?m:X(document.querySelectorAll(m))}function s(m,w){m.forEach(function(S){S&&(S.style.transitionDuration=w+"ms")})}function p(m,w){m.forEach(function(S){S&&S.setAttribute("data-state",w)})}function v(m){var w,S=R(m),I=S[0];return!(I==null||(w=I.ownerDocument)==null)&&w.body?I.ownerDocument:document}function d(m,w){var S=w.clientX,I=w.clientY;return m.every(function(Y){var H=Y.popperRect,k=Y.popperState,be=Y.props,le=be.interactiveBorder,pe=K(k.placement),ye=k.modifiersData.offset;if(!ye)return!0;var _e=pe==="bottom"?ye.top.y:0,je=pe==="top"?ye.bottom.y:0,Se=pe==="right"?ye.left.x:0,Ie=pe==="left"?ye.right.x:0,re=H.top-I+_e>le,he=I-H.bottom-je>le,ve=H.left-S+Se>le,ee=S-H.right-Ie>le;return re||he||ve||ee})}function N(m,w,S){var I=w+"EventListener";["transitionend","webkitTransitionEnd"].forEach(function(Y){m[I](Y,S)})}var _={isTouch:!1},M=0;function Q(){_.isTouch||(_.isTouch=!0,window.performance&&document.addEventListener("mousemove",Ue))}function Ue(){var m=performance.now();m-M<20&&(_.isTouch=!1,document.removeEventListener("mousemove",Ue)),M=m}function Rt(){var m=document.activeElement;if(Z(m)){var w=m._tippy;m.blur&&!w.state.isVisible&&m.blur()}}function Vt(){document.addEventListener("touchstart",Q,u),window.addEventListener("blur",Rt)}var Lr=typeof window<"u"&&typeof document<"u",Nr=Lr?navigator.userAgent:"",kr=/MSIE |Trident\//.test(Nr);function zt(m){var w=m==="destroy"?"n already-":" ";return[m+"() was called on a"+w+"destroyed instance. This is a no-op but","indicates a potential memory leak."].join(" ")}function nr(m){var w=/[ \t]{2,}/g,S=/^[ \t]*/gm;return m.replace(w," ").replace(S,"").trim()}function jr(m){return nr(` +`,"We recommend using the popper element as a wrapper around an inner","element that can have any CSS property transitioned for animations."].join(" "));var z={placement:ot(a.placement),popper:a.elements.popper,popperRect:a.rects.popper,gpuAcceleration:T};a.modifiersData.popperOffsets!=null&&(a.styles.popper=Object.assign({},a.styles.popper,Hn(Object.assign({},z,{offsets:a.modifiersData.popperOffsets,position:a.options.strategy,adaptive:W,roundOffsets:q})))),a.modifiersData.arrow!=null&&(a.styles.arrow=Object.assign({},a.styles.arrow,Hn(Object.assign({},z,{offsets:a.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:q})))),a.attributes.popper=Object.assign({},a.attributes.popper,{"data-popper-placement":a.placement})}var y={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:g,data:{}};function A(c){var a=c.state;Object.keys(a.elements).forEach(function(b){var D=a.styles[b]||{},T=a.attributes[b]||{},F=a.elements[b];!o(F)||!f(F)||(Object.assign(F.style,D),Object.keys(T).forEach(function(W){var j=T[W];j===!1?F.removeAttribute(W):F.setAttribute(W,j===!0?"":j)}))})}function I(c){var a=c.state,b={popper:{position:a.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(a.elements.popper.style,b.popper),a.styles=b,a.elements.arrow&&Object.assign(a.elements.arrow.style,b.arrow),function(){Object.keys(a.elements).forEach(function(D){var T=a.elements[D],F=a.attributes[D]||{},W=Object.keys(a.styles.hasOwnProperty(D)?a.styles[D]:b[D]),j=W.reduce(function(q,oe){return q[oe]="",q},{});!o(T)||!f(T)||(Object.assign(T.style,j),Object.keys(F).forEach(function(q){T.removeAttribute(q)}))})}}var Y={name:"applyStyles",enabled:!0,phase:"write",fn:A,effect:I,requires:["computeStyles"]};function H(c,a,b){var D=ot(c),T=[Z,V].indexOf(D)>=0?-1:1,F=typeof b=="function"?b(Object.assign({},a,{placement:c})):b,W=F[0],j=F[1];return W=W||0,j=(j||0)*T,[Z,U].indexOf(D)>=0?{x:j,y:W}:{x:W,y:j}}function k(c){var a=c.state,b=c.options,D=c.name,T=b.offset,F=T===void 0?[0,0]:T,W=Ue.reduce(function(z,De){return z[De]=H(De,a.rects,F),z},{}),j=W[a.placement],q=j.x,oe=j.y;a.modifiersData.popperOffsets!=null&&(a.modifiersData.popperOffsets.x+=q,a.modifiersData.popperOffsets.y+=oe),a.modifiersData[D]=W}var be={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:k},le={left:"right",right:"left",bottom:"top",top:"bottom"};function pe(c){return c.replace(/left|right|bottom|top/g,function(a){return le[a]})}var ye={start:"end",end:"start"};function _e(c){return c.replace(/start|end/g,function(a){return ye[a]})}function je(c,a){a===void 0&&(a={});var b=a,D=b.placement,T=b.boundary,F=b.rootBoundary,W=b.padding,j=b.flipVariations,q=b.allowedAutoPlacements,oe=q===void 0?Ue:q,z=cn(D),De=z?j?Q:Q.filter(function(xe){return cn(xe)===z}):l,Le=De.filter(function(xe){return oe.indexOf(xe)>=0});Le.length===0&&(Le=De,console.error(["Popper: The `allowedAutoPlacements` option did not allow any","placements. Ensure the `placement` option matches the variation","of the allowed placements.",'For example, "auto" cannot be used to allow "bottom-start".','Use "auto-start" instead.'].join(" ")));var Ae=Le.reduce(function(xe,Me){return xe[Me]=qt(c,{placement:Me,boundary:T,rootBoundary:F,padding:W})[ot(Me)],xe},{});return Object.keys(Ae).sort(function(xe,Me){return Ae[xe]-Ae[Me]})}function Se(c){if(ot(c)===me)return[];var a=pe(c);return[_e(c),a,_e(a)]}function Ie(c){var a=c.state,b=c.options,D=c.name;if(!a.modifiersData[D]._skip){for(var T=b.mainAxis,F=T===void 0?!0:T,W=b.altAxis,j=W===void 0?!0:W,q=b.fallbackPlacements,oe=b.padding,z=b.boundary,De=b.rootBoundary,Le=b.altBoundary,Ae=b.flipVariations,xe=Ae===void 0?!0:Ae,Me=b.allowedAutoPlacements,Ee=a.options.placement,Be=ot(Ee),Re=Be===Ee,He=q||(Re||!xe?[pe(Ee)]:Se(Ee)),ce=[Ee].concat(He).reduce(function(te,ge){return te.concat(ot(ge)===me?je(a,{placement:ge,boundary:z,rootBoundary:De,padding:oe,flipVariations:xe,allowedAutoPlacements:Me}):ge)},[]),Pe=a.rects.reference,Te=a.rects.popper,Ne=new Map,Fe=!0,Ye=ce[0],$e=0;$e=0,dn=Lt?"width":"height",Zt=qt(a,{placement:Ve,boundary:z,rootBoundary:De,altBoundary:Le,padding:oe}),Nt=Lt?et?U:Z:et?de:V;Pe[dn]>Te[dn]&&(Nt=pe(Nt));var $n=pe(Nt),Qt=[];if(F&&Qt.push(Zt[wt]<=0),j&&Qt.push(Zt[Nt]<=0,Zt[$n]<=0),Qt.every(function(te){return te})){Ye=Ve,Fe=!1;break}Ne.set(Ve,Qt)}if(Fe)for(var Sn=xe?3:1,Wn=function(ge){var we=ce.find(function(Ke){var Je=Ne.get(Ke);if(Je)return Je.slice(0,ge).every(function(Dt){return Dt})});if(we)return Ye=we,"break"},C=Sn;C>0;C--){var G=Wn(C);if(G==="break")break}a.placement!==Ye&&(a.modifiersData[D]._skip=!0,a.placement=Ye,a.reset=!0)}}var re={name:"flip",enabled:!0,phase:"main",fn:Ie,requiresIfExists:["offset"],data:{_skip:!1}};function he(c){return c==="x"?"y":"x"}function ve(c,a,b){return gt(c,ln(a,b))}function ee(c){var a=c.state,b=c.options,D=c.name,T=b.mainAxis,F=T===void 0?!0:T,W=b.altAxis,j=W===void 0?!1:W,q=b.boundary,oe=b.rootBoundary,z=b.altBoundary,De=b.padding,Le=b.tether,Ae=Le===void 0?!0:Le,xe=b.tetherOffset,Me=xe===void 0?0:xe,Ee=qt(a,{boundary:q,rootBoundary:oe,padding:De,altBoundary:z}),Be=ot(a.placement),Re=cn(a.placement),He=!Re,ce=dt(Be),Pe=he(ce),Te=a.modifiersData.popperOffsets,Ne=a.rects.reference,Fe=a.rects.popper,Ye=typeof Me=="function"?Me(Object.assign({},a.rects,{placement:a.placement})):Me,$e={x:0,y:0};if(Te){if(F||j){var Ve=ce==="y"?V:Z,wt=ce==="y"?de:U,et=ce==="y"?"height":"width",Lt=Te[ce],dn=Te[ce]+Ee[Ve],Zt=Te[ce]-Ee[wt],Nt=Ae?-Fe[et]/2:0,$n=Re===p?Ne[et]:Fe[et],Qt=Re===p?-Fe[et]:-Ne[et],Sn=a.elements.arrow,Wn=Ae&&Sn?P(Sn):{width:0,height:0},C=a.modifiersData["arrow#persistent"]?a.modifiersData["arrow#persistent"].padding:cr(),G=C[Ve],te=C[wt],ge=ve(0,Ne[et],Wn[et]),we=He?Ne[et]/2-Nt-ge-G-Ye:$n-ge-G-Ye,Ke=He?-Ne[et]/2+Nt+ge+te+Ye:Qt+ge+te+Ye,Je=a.elements.arrow&&J(a.elements.arrow),Dt=Je?ce==="y"?Je.clientTop||0:Je.clientLeft||0:0,Vn=a.modifiersData.offset?a.modifiersData.offset[a.placement][ce]:0,Tt=Te[ce]+we-Vn-Dt,An=Te[ce]+Ke-Vn;if(F){var pn=ve(Ae?ln(dn,Tt):dn,Lt,Ae?gt(Zt,An):Zt);Te[ce]=pn,$e[ce]=pn-Lt}if(j){var en=ce==="x"?V:Z,Gr=ce==="x"?de:U,tn=Te[Pe],hn=tn+Ee[en],Ai=tn-Ee[Gr],Ci=ve(Ae?ln(hn,Tt):hn,tn,Ae?gt(Ai,An):Ai);Te[Pe]=Ci,$e[Pe]=Ci-tn}}a.modifiersData[D]=$e}}var ie={name:"preventOverflow",enabled:!0,phase:"main",fn:ee,requiresIfExists:["offset"]},x=function(a,b){return a=typeof a=="function"?a(Object.assign({},b.rects,{placement:b.placement})):a,fr(typeof a!="number"?a:ur(a,l))};function Ge(c){var a,b=c.state,D=c.name,T=c.options,F=b.elements.arrow,W=b.modifiersData.popperOffsets,j=ot(b.placement),q=dt(j),oe=[Z,U].indexOf(j)>=0,z=oe?"height":"width";if(!(!F||!W)){var De=x(T.padding,b),Le=P(F),Ae=q==="y"?V:Z,xe=q==="y"?de:U,Me=b.rects.reference[z]+b.rects.reference[q]-W[q]-b.rects.popper[z],Ee=W[q]-b.rects.reference[q],Be=J(F),Re=Be?q==="y"?Be.clientHeight||0:Be.clientWidth||0:0,He=Me/2-Ee/2,ce=De[Ae],Pe=Re-Le[z]-De[xe],Te=Re/2-Le[z]/2+He,Ne=ve(ce,Te,Pe),Fe=q;b.modifiersData[D]=(a={},a[Fe]=Ne,a.centerOffset=Ne-Te,a)}}function fe(c){var a=c.state,b=c.options,D=b.element,T=D===void 0?"[data-popper-arrow]":D;if(T!=null&&!(typeof T=="string"&&(T=a.elements.popper.querySelector(T),!T))){if(o(T)||console.error(['Popper: "arrow" element must be an HTMLElement (not an SVGElement).',"To use an SVG arrow, wrap it in an HTMLElement that will be used as","the arrow."].join(" ")),!kn(a.elements.popper,T)){console.error(['Popper: "arrow" modifier\'s `element` must be a child of the popper',"element."].join(" "));return}a.elements.arrow=T}}var Ft={name:"arrow",enabled:!0,phase:"main",fn:Ge,effect:fe,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function bt(c,a,b){return b===void 0&&(b={x:0,y:0}),{top:c.top-a.height-b.y,right:c.right-a.width+b.x,bottom:c.bottom-a.height+b.y,left:c.left-a.width-b.x}}function Gt(c){return[V,U,de,Z].some(function(a){return c[a]>=0})}function Kt(c){var a=c.state,b=c.name,D=a.rects.reference,T=a.rects.popper,F=a.modifiersData.preventOverflow,W=qt(a,{elementContext:"reference"}),j=qt(a,{altBoundary:!0}),q=bt(W,D),oe=bt(j,T,F),z=Gt(q),De=Gt(oe);a.modifiersData[b]={referenceClippingOffsets:q,popperEscapeOffsets:oe,isReferenceHidden:z,hasPopperEscaped:De},a.attributes.popper=Object.assign({},a.attributes.popper,{"data-popper-reference-hidden":z,"data-popper-escaped":De})}var Jt={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:Kt},rt=[jn,Bn,y,Y],lt=En({defaultModifiers:rt}),yt=[jn,Bn,y,Y,be,re,ie,Ft,Jt],un=En({defaultModifiers:yt});t.applyStyles=Y,t.arrow=Ft,t.computeStyles=y,t.createPopper=un,t.createPopperLite=lt,t.defaultModifiers=yt,t.detectOverflow=qt,t.eventListeners=jn,t.flip=re,t.hide=Jt,t.offset=be,t.popperGenerator=En,t.popperOffsets=Bn,t.preventOverflow=ie}),No=Fo(t=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var e=us(),r='',n="tippy-box",i="tippy-content",o="tippy-backdrop",s="tippy-arrow",h="tippy-svg-arrow",u={passive:!0,capture:!0};function f(g,y){return{}.hasOwnProperty.call(g,y)}function w(g,y,A){if(Array.isArray(g)){var I=g[y];return I??(Array.isArray(A)?A[y]:A)}return g}function m(g,y){var A={}.toString.call(g);return A.indexOf("[object")===0&&A.indexOf(y+"]")>-1}function E(g,y){return typeof g=="function"?g.apply(void 0,y):g}function O(g,y){if(y===0)return g;var A;return function(I){clearTimeout(A),A=setTimeout(function(){g(I)},y)}}function S(g,y){var A=Object.assign({},g);return y.forEach(function(I){delete A[I]}),A}function P(g){return g.split(/\s+/).filter(Boolean)}function R(g){return[].concat(g)}function $(g,y){g.indexOf(y)===-1&&g.push(y)}function B(g){return g.filter(function(y,A){return g.indexOf(y)===A})}function K(g){return g.split("-")[0]}function X(g){return[].slice.call(g)}function ne(g){return Object.keys(g).reduce(function(y,A){return g[A]!==void 0&&(y[A]=g[A]),y},{})}function J(){return document.createElement("div")}function V(g){return["Element","Fragment"].some(function(y){return m(g,y)})}function de(g){return m(g,"NodeList")}function U(g){return m(g,"MouseEvent")}function Z(g){return!!(g&&g._tippy&&g._tippy.reference===g)}function me(g){return V(g)?[g]:de(g)?X(g):Array.isArray(g)?g:X(document.querySelectorAll(g))}function l(g,y){g.forEach(function(A){A&&(A.style.transitionDuration=y+"ms")})}function p(g,y){g.forEach(function(A){A&&A.setAttribute("data-state",y)})}function v(g){var y,A=R(g),I=A[0];return!(I==null||(y=I.ownerDocument)==null)&&y.body?I.ownerDocument:document}function d(g,y){var A=y.clientX,I=y.clientY;return g.every(function(Y){var H=Y.popperRect,k=Y.popperState,be=Y.props,le=be.interactiveBorder,pe=K(k.placement),ye=k.modifiersData.offset;if(!ye)return!0;var _e=pe==="bottom"?ye.top.y:0,je=pe==="top"?ye.bottom.y:0,Se=pe==="right"?ye.left.x:0,Ie=pe==="left"?ye.right.x:0,re=H.top-I+_e>le,he=I-H.bottom-je>le,ve=H.left-A+Se>le,ee=A-H.right-Ie>le;return re||he||ve||ee})}function N(g,y,A){var I=y+"EventListener";["transitionend","webkitTransitionEnd"].forEach(function(Y){g[I](Y,A)})}var _={isTouch:!1},M=0;function Q(){_.isTouch||(_.isTouch=!0,window.performance&&document.addEventListener("mousemove",Ue))}function Ue(){var g=performance.now();g-M<20&&(_.isTouch=!1,document.removeEventListener("mousemove",Ue)),M=g}function Rt(){var g=document.activeElement;if(Z(g)){var y=g._tippy;g.blur&&!y.state.isVisible&&g.blur()}}function Vt(){document.addEventListener("touchstart",Q,u),window.addEventListener("blur",Rt)}var Lr=typeof window<"u"&&typeof document<"u",Nr=Lr?navigator.userAgent:"",kr=/MSIE |Trident\//.test(Nr);function zt(g){var y=g==="destroy"?"n already-":" ";return[g+"() was called on a"+y+"destroyed instance. This is a no-op but","indicates a potential memory leak."].join(" ")}function nr(g){var y=/[ \t]{2,}/g,A=/^[ \t]*/gm;return g.replace(y," ").replace(A,"").trim()}function jr(g){return nr(` %ctippy.js - %c`+nr(m)+` + %c`+nr(g)+` %c\u{1F477}\u200D This is a development-only message. It will be removed in production. - `)}function rr(m){return[jr(m),"color: #00C584; font-size: 1.3em; font-weight: bold;","line-height: 1.5","color: #a6a095;"]}var It;Br();function Br(){It=new Set}function mt(m,w){if(m&&!It.has(w)){var S;It.add(w),(S=console).warn.apply(S,rr(w))}}function Ut(m,w){if(m&&!It.has(w)){var S;It.add(w),(S=console).error.apply(S,rr(w))}}function At(m){var w=!m,S=Object.prototype.toString.call(m)==="[object Object]"&&!m.addEventListener;Ut(w,["tippy() was passed","`"+String(m)+"`","as its targets (first) argument. Valid types are: String, Element,","Element[], or NodeList."].join(" ")),Ut(S,["tippy() was passed a plain object which is not supported as an argument","for virtual positioning. Use props.getReferenceClientRect instead."].join(" "))}var Ct={animateFill:!1,followCursor:!1,inlinePositioning:!1,sticky:!1},Hr={allowHTML:!1,animation:"fade",arrow:!0,content:"",inertia:!1,maxWidth:350,role:"tooltip",theme:"",zIndex:9999},Qe=Object.assign({appendTo:function(){return document.body},aria:{content:"auto",expanded:"auto"},delay:0,duration:[300,250],getReferenceClientRect:null,hideOnClick:!0,ignoreAttributes:!1,interactive:!1,interactiveBorder:2,interactiveDebounce:0,moveTransition:"",offset:[0,10],onAfterUpdate:function(){},onBeforeUpdate:function(){},onCreate:function(){},onDestroy:function(){},onHidden:function(){},onHide:function(){},onMount:function(){},onShow:function(){},onShown:function(){},onTrigger:function(){},onUntrigger:function(){},onClickOutside:function(){},placement:"top",plugins:[],popperOptions:{},render:null,showOnCreate:!1,touch:!0,trigger:"mouseenter focus",triggerTarget:null},Ct,{},Hr),$r=Object.keys(Qe),Wr=function(w){gt(w,[]);var S=Object.keys(w);S.forEach(function(I){Qe[I]=w[I]})};function ot(m){var w=m.plugins||[],S=w.reduce(function(I,Y){var H=Y.name,k=Y.defaultValue;return H&&(I[H]=m[H]!==void 0?m[H]:k),I},{});return Object.assign({},m,{},S)}function Vr(m,w){var S=w?Object.keys(ot(Object.assign({},Qe,{plugins:w}))):$r,I=S.reduce(function(Y,H){var k=(m.getAttribute("data-tippy-"+H)||"").trim();if(!k)return Y;if(H==="content")Y[H]=k;else try{Y[H]=JSON.parse(k)}catch{Y[H]=k}return Y},{});return I}function ir(m,w){var S=Object.assign({},w,{content:A(w.content,[m])},w.ignoreAttributes?{}:Vr(m,w.plugins));return S.aria=Object.assign({},Qe.aria,{},S.aria),S.aria={expanded:S.aria.expanded==="auto"?w.interactive:S.aria.expanded,content:S.aria.content==="auto"?w.interactive?null:"describedby":S.aria.content},S}function gt(m,w){m===void 0&&(m={}),w===void 0&&(w=[]);var S=Object.keys(m);S.forEach(function(I){var Y=O(Qe,Object.keys(Ct)),H=!f(Y,I);H&&(H=w.filter(function(k){return k.name===I}).length===0),mt(H,["`"+I+"`","is not a valid prop. You may have spelled it incorrectly, or if it's","a plugin, forgot to pass it in an array as props.plugins.",` + `)}function rr(g){return[jr(g),"color: #00C584; font-size: 1.3em; font-weight: bold;","line-height: 1.5","color: #a6a095;"]}var It;Br();function Br(){It=new Set}function mt(g,y){if(g&&!It.has(y)){var A;It.add(y),(A=console).warn.apply(A,rr(y))}}function Ut(g,y){if(g&&!It.has(y)){var A;It.add(y),(A=console).error.apply(A,rr(y))}}function At(g){var y=!g,A=Object.prototype.toString.call(g)==="[object Object]"&&!g.addEventListener;Ut(y,["tippy() was passed","`"+String(g)+"`","as its targets (first) argument. Valid types are: String, Element,","Element[], or NodeList."].join(" ")),Ut(A,["tippy() was passed a plain object which is not supported as an argument","for virtual positioning. Use props.getReferenceClientRect instead."].join(" "))}var Ct={animateFill:!1,followCursor:!1,inlinePositioning:!1,sticky:!1},Hr={allowHTML:!1,animation:"fade",arrow:!0,content:"",inertia:!1,maxWidth:350,role:"tooltip",theme:"",zIndex:9999},Qe=Object.assign({appendTo:function(){return document.body},aria:{content:"auto",expanded:"auto"},delay:0,duration:[300,250],getReferenceClientRect:null,hideOnClick:!0,ignoreAttributes:!1,interactive:!1,interactiveBorder:2,interactiveDebounce:0,moveTransition:"",offset:[0,10],onAfterUpdate:function(){},onBeforeUpdate:function(){},onCreate:function(){},onDestroy:function(){},onHidden:function(){},onHide:function(){},onMount:function(){},onShow:function(){},onShown:function(){},onTrigger:function(){},onUntrigger:function(){},onClickOutside:function(){},placement:"top",plugins:[],popperOptions:{},render:null,showOnCreate:!1,touch:!0,trigger:"mouseenter focus",triggerTarget:null},Ct,{},Hr),$r=Object.keys(Qe),Wr=function(y){gt(y,[]);var A=Object.keys(y);A.forEach(function(I){Qe[I]=y[I]})};function ot(g){var y=g.plugins||[],A=y.reduce(function(I,Y){var H=Y.name,k=Y.defaultValue;return H&&(I[H]=g[H]!==void 0?g[H]:k),I},{});return Object.assign({},g,{},A)}function Vr(g,y){var A=y?Object.keys(ot(Object.assign({},Qe,{plugins:y}))):$r,I=A.reduce(function(Y,H){var k=(g.getAttribute("data-tippy-"+H)||"").trim();if(!k)return Y;if(H==="content")Y[H]=k;else try{Y[H]=JSON.parse(k)}catch{Y[H]=k}return Y},{});return I}function ir(g,y){var A=Object.assign({},y,{content:E(y.content,[g])},y.ignoreAttributes?{}:Vr(g,y.plugins));return A.aria=Object.assign({},Qe.aria,{},A.aria),A.aria={expanded:A.aria.expanded==="auto"?y.interactive:A.aria.expanded,content:A.aria.content==="auto"?y.interactive?null:"describedby":A.aria.content},A}function gt(g,y){g===void 0&&(g={}),y===void 0&&(y=[]);var A=Object.keys(g);A.forEach(function(I){var Y=S(Qe,Object.keys(Ct)),H=!f(Y,I);H&&(H=y.filter(function(k){return k.name===I}).length===0),mt(H,["`"+I+"`","is not a valid prop. You may have spelled it incorrectly, or if it's","a plugin, forgot to pass it in an array as props.plugins.",` `,`All props: https://atomiks.github.io/tippyjs/v6/all-props/ -`,"Plugins: https://atomiks.github.io/tippyjs/v6/plugins/"].join(" "))})}var ln=function(){return"innerHTML"};function Yt(m,w){m[ln()]=w}function or(m){var w=J();return m===!0?w.className=l:(w.className=h,V(m)?w.appendChild(m):Yt(w,m)),w}function kn(m,w){V(w.content)?(Yt(m,""),m.appendChild(w.content)):typeof w.content!="function"&&(w.allowHTML?Yt(m,w.content):m.textContent=w.content)}function Xt(m){var w=m.firstElementChild,S=X(w.children);return{box:w,content:S.find(function(I){return I.classList.contains(i)}),arrow:S.find(function(I){return I.classList.contains(l)||I.classList.contains(h)}),backdrop:S.find(function(I){return I.classList.contains(o)})}}function ar(m){var w=J(),S=J();S.className=n,S.setAttribute("data-state","hidden"),S.setAttribute("tabindex","-1");var I=J();I.className=i,I.setAttribute("data-state","hidden"),kn(I,m.props),w.appendChild(S),S.appendChild(I),Y(m.props,m.props);function Y(H,k){var be=Xt(w),le=be.box,pe=be.content,ye=be.arrow;k.theme?le.setAttribute("data-theme",k.theme):le.removeAttribute("data-theme"),typeof k.animation=="string"?le.setAttribute("data-animation",k.animation):le.removeAttribute("data-animation"),k.inertia?le.setAttribute("data-inertia",""):le.removeAttribute("data-inertia"),le.style.maxWidth=typeof k.maxWidth=="number"?k.maxWidth+"px":k.maxWidth,k.role?le.setAttribute("role",k.role):le.removeAttribute("role"),(H.content!==k.content||H.allowHTML!==k.allowHTML)&&kn(pe,m.props),k.arrow?ye?H.arrow!==k.arrow&&(le.removeChild(ye),le.appendChild(or(k.arrow))):le.appendChild(or(k.arrow)):ye&&le.removeChild(ye)}return{popper:w,onUpdate:Y}}ar.$$tippy=!0;var sr=1,yn=[],wn=[];function cn(m,w){var S=ir(m,Object.assign({},Qe,{},ot(ne(w)))),I,Y,H,k=!1,be=!1,le=!1,pe=!1,ye,_e,je,Se=[],Ie=E(Re,S.interactiveDebounce),re,he=sr++,ve=null,ee=B(S.plugins),ie={isEnabled:!0,isVisible:!1,isDestroyed:!1,isMounted:!1,isShown:!1},x={id:he,reference:m,popper:J(),popperInstance:ve,props:S,state:ie,plugins:ee,clearDelayTimeouts:Lt,setProps:dn,setContent:Zt,show:Nt,hide:$n,hideWithInteractivity:Qt,enable:wt,disable:et,unmount:Sn,destroy:Wn};if(!S.render)return Ut(!0,"render() function has not been supplied."),x;var Ge=S.render(x),fe=Ge.popper,Ft=Ge.onUpdate;fe.setAttribute("data-tippy-root",""),fe.id="tippy-"+x.id,x.popper=fe,m._tippy=x,fe._tippy=x;var bt=ee.map(function(C){return C.fn(x)}),Gt=m.hasAttribute("aria-expanded");return Me(),T(),a(),g("onCreate",[x]),S.showOnCreate&&$e(),fe.addEventListener("mouseenter",function(){x.props.interactive&&x.state.isVisible&&x.clearDelayTimeouts()}),fe.addEventListener("mouseleave",function(C){x.props.interactive&&x.props.trigger.indexOf("mouseenter")>=0&&(yt().addEventListener("mousemove",Ie),Ie(C))}),x;function Kt(){var C=x.props.touch;return Array.isArray(C)?C:[C,0]}function Jt(){return Kt()[0]==="hold"}function rt(){var C;return!!((C=x.props.render)!=null&&C.$$tippy)}function st(){return re||m}function yt(){var C=st().parentNode;return C?v(C):document}function un(){return Xt(fe)}function c(C){return x.state.isMounted&&!x.state.isVisible||_.isTouch||ye&&ye.type==="focus"?0:y(x.props.delay,C?0:1,Qe.delay)}function a(){fe.style.pointerEvents=x.props.interactive&&x.state.isVisible?"":"none",fe.style.zIndex=""+x.props.zIndex}function g(C,G,te){if(te===void 0&&(te=!0),bt.forEach(function(we){we[C]&&we[C].apply(void 0,G)}),te){var ge;(ge=x.props)[C].apply(ge,G)}}function D(){var C=x.props.aria;if(C.content){var G="aria-"+C.content,te=fe.id,ge=R(x.props.triggerTarget||m);ge.forEach(function(we){var Ke=we.getAttribute(G);if(x.state.isVisible)we.setAttribute(G,Ke?Ke+" "+te:te);else{var Je=Ke&&Ke.replace(te,"").trim();Je?we.setAttribute(G,Je):we.removeAttribute(G)}})}}function T(){if(!(Gt||!x.props.aria.expanded)){var C=R(x.props.triggerTarget||m);C.forEach(function(G){x.props.interactive?G.setAttribute("aria-expanded",x.state.isVisible&&G===st()?"true":"false"):G.removeAttribute("aria-expanded")})}}function F(){yt().removeEventListener("mousemove",Ie),yn=yn.filter(function(C){return C!==Ie})}function W(C){if(!(_.isTouch&&(le||C.type==="mousedown"))&&!(x.props.interactive&&fe.contains(C.target))){if(st().contains(C.target)){if(_.isTouch||x.state.isVisible&&x.props.trigger.indexOf("click")>=0)return}else g("onClickOutside",[x,C]);x.props.hideOnClick===!0&&(x.clearDelayTimeouts(),x.hide(),be=!0,setTimeout(function(){be=!1}),x.state.isMounted||z())}}function j(){le=!0}function q(){le=!1}function oe(){var C=yt();C.addEventListener("mousedown",W,!0),C.addEventListener("touchend",W,u),C.addEventListener("touchstart",q,u),C.addEventListener("touchmove",j,u)}function z(){var C=yt();C.removeEventListener("mousedown",W,!0),C.removeEventListener("touchend",W,u),C.removeEventListener("touchstart",q,u),C.removeEventListener("touchmove",j,u)}function De(C,G){Ae(C,function(){!x.state.isVisible&&fe.parentNode&&fe.parentNode.contains(fe)&&G()})}function Le(C,G){Ae(C,G)}function Ae(C,G){var te=un().box;function ge(we){we.target===te&&(N(te,"remove",ge),G())}if(C===0)return G();N(te,"remove",_e),N(te,"add",ge),_e=ge}function xe(C,G,te){te===void 0&&(te=!1);var ge=R(x.props.triggerTarget||m);ge.forEach(function(we){we.addEventListener(C,G,te),Se.push({node:we,eventType:C,handler:G,options:te})})}function Me(){Jt()&&(xe("touchstart",Be,{passive:!0}),xe("touchend",He,{passive:!0})),P(x.props.trigger).forEach(function(C){if(C!=="manual")switch(xe(C,Be),C){case"mouseenter":xe("mouseleave",He);break;case"focus":xe(kr?"focusout":"blur",ce);break;case"focusin":xe("focusout",ce);break}})}function Ee(){Se.forEach(function(C){var G=C.node,te=C.eventType,ge=C.handler,we=C.options;G.removeEventListener(te,ge,we)}),Se=[]}function Be(C){var G,te=!1;if(!(!x.state.isEnabled||Pe(C)||be)){var ge=((G=ye)==null?void 0:G.type)==="focus";ye=C,re=C.currentTarget,T(),!x.state.isVisible&&U(C)&&yn.forEach(function(we){return we(C)}),C.type==="click"&&(x.props.trigger.indexOf("mouseenter")<0||k)&&x.props.hideOnClick!==!1&&x.state.isVisible?te=!0:$e(C),C.type==="click"&&(k=!te),te&&!ge&&Ve(C)}}function Re(C){var G=C.target,te=st().contains(G)||fe.contains(G);if(!(C.type==="mousemove"&&te)){var ge=Ye().concat(fe).map(function(we){var Ke,Je=we._tippy,Dt=(Ke=Je.popperInstance)==null?void 0:Ke.state;return Dt?{popperRect:we.getBoundingClientRect(),popperState:Dt,props:S}:null}).filter(Boolean);d(ge,C)&&(F(),Ve(C))}}function He(C){var G=Pe(C)||x.props.trigger.indexOf("click")>=0&&k;if(!G){if(x.props.interactive){x.hideWithInteractivity(C);return}Ve(C)}}function ce(C){x.props.trigger.indexOf("focusin")<0&&C.target!==st()||x.props.interactive&&C.relatedTarget&&fe.contains(C.relatedTarget)||Ve(C)}function Pe(C){return _.isTouch?Jt()!==C.type.indexOf("touch")>=0:!1}function Te(){Ne();var C=x.props,G=C.popperOptions,te=C.placement,ge=C.offset,we=C.getReferenceClientRect,Ke=C.moveTransition,Je=rt()?Xt(fe).arrow:null,Dt=we?{getBoundingClientRect:we,contextElement:we.contextElement||st()}:m,Vn={name:"$$tippy",enabled:!0,phase:"beforeWrite",requires:["computeStyles"],fn:function(pn){var en=pn.state;if(rt()){var Gr=un(),tn=Gr.box;["placement","reference-hidden","escaped"].forEach(function(hn){hn==="placement"?tn.setAttribute("data-placement",en.placement):en.attributes.popper["data-popper-"+hn]?tn.setAttribute("data-"+hn,""):tn.removeAttribute("data-"+hn)}),en.attributes.popper={}}}},Tt=[{name:"offset",options:{offset:ge}},{name:"preventOverflow",options:{padding:{top:2,bottom:2,left:5,right:5}}},{name:"flip",options:{padding:5}},{name:"computeStyles",options:{adaptive:!Ke}},Vn];rt()&&Je&&Tt.push({name:"arrow",options:{element:Je,padding:3}}),Tt.push.apply(Tt,G?.modifiers||[]),x.popperInstance=e.createPopper(Dt,fe,Object.assign({},G,{placement:te,onFirstUpdate:je,modifiers:Tt}))}function Ne(){x.popperInstance&&(x.popperInstance.destroy(),x.popperInstance=null)}function Fe(){var C=x.props.appendTo,G,te=st();x.props.interactive&&C===Qe.appendTo||C==="parent"?G=te.parentNode:G=A(C,[te]),G.contains(fe)||G.appendChild(fe),Te(),mt(x.props.interactive&&C===Qe.appendTo&&te.nextElementSibling!==fe,["Interactive tippy element may not be accessible via keyboard","navigation because it is not directly after the reference element","in the DOM source order.",` +`,"Plugins: https://atomiks.github.io/tippyjs/v6/plugins/"].join(" "))})}var ln=function(){return"innerHTML"};function Yt(g,y){g[ln()]=y}function or(g){var y=J();return g===!0?y.className=s:(y.className=h,V(g)?y.appendChild(g):Yt(y,g)),y}function kn(g,y){V(y.content)?(Yt(g,""),g.appendChild(y.content)):typeof y.content!="function"&&(y.allowHTML?Yt(g,y.content):g.textContent=y.content)}function Xt(g){var y=g.firstElementChild,A=X(y.children);return{box:y,content:A.find(function(I){return I.classList.contains(i)}),arrow:A.find(function(I){return I.classList.contains(s)||I.classList.contains(h)}),backdrop:A.find(function(I){return I.classList.contains(o)})}}function ar(g){var y=J(),A=J();A.className=n,A.setAttribute("data-state","hidden"),A.setAttribute("tabindex","-1");var I=J();I.className=i,I.setAttribute("data-state","hidden"),kn(I,g.props),y.appendChild(A),A.appendChild(I),Y(g.props,g.props);function Y(H,k){var be=Xt(y),le=be.box,pe=be.content,ye=be.arrow;k.theme?le.setAttribute("data-theme",k.theme):le.removeAttribute("data-theme"),typeof k.animation=="string"?le.setAttribute("data-animation",k.animation):le.removeAttribute("data-animation"),k.inertia?le.setAttribute("data-inertia",""):le.removeAttribute("data-inertia"),le.style.maxWidth=typeof k.maxWidth=="number"?k.maxWidth+"px":k.maxWidth,k.role?le.setAttribute("role",k.role):le.removeAttribute("role"),(H.content!==k.content||H.allowHTML!==k.allowHTML)&&kn(pe,g.props),k.arrow?ye?H.arrow!==k.arrow&&(le.removeChild(ye),le.appendChild(or(k.arrow))):le.appendChild(or(k.arrow)):ye&&le.removeChild(ye)}return{popper:y,onUpdate:Y}}ar.$$tippy=!0;var sr=1,yn=[],wn=[];function cn(g,y){var A=ir(g,Object.assign({},Qe,{},ot(ne(y)))),I,Y,H,k=!1,be=!1,le=!1,pe=!1,ye,_e,je,Se=[],Ie=O(Re,A.interactiveDebounce),re,he=sr++,ve=null,ee=B(A.plugins),ie={isEnabled:!0,isVisible:!1,isDestroyed:!1,isMounted:!1,isShown:!1},x={id:he,reference:g,popper:J(),popperInstance:ve,props:A,state:ie,plugins:ee,clearDelayTimeouts:Lt,setProps:dn,setContent:Zt,show:Nt,hide:$n,hideWithInteractivity:Qt,enable:wt,disable:et,unmount:Sn,destroy:Wn};if(!A.render)return Ut(!0,"render() function has not been supplied."),x;var Ge=A.render(x),fe=Ge.popper,Ft=Ge.onUpdate;fe.setAttribute("data-tippy-root",""),fe.id="tippy-"+x.id,x.popper=fe,g._tippy=x,fe._tippy=x;var bt=ee.map(function(C){return C.fn(x)}),Gt=g.hasAttribute("aria-expanded");return Me(),T(),a(),b("onCreate",[x]),A.showOnCreate&&$e(),fe.addEventListener("mouseenter",function(){x.props.interactive&&x.state.isVisible&&x.clearDelayTimeouts()}),fe.addEventListener("mouseleave",function(C){x.props.interactive&&x.props.trigger.indexOf("mouseenter")>=0&&(yt().addEventListener("mousemove",Ie),Ie(C))}),x;function Kt(){var C=x.props.touch;return Array.isArray(C)?C:[C,0]}function Jt(){return Kt()[0]==="hold"}function rt(){var C;return!!((C=x.props.render)!=null&&C.$$tippy)}function lt(){return re||g}function yt(){var C=lt().parentNode;return C?v(C):document}function un(){return Xt(fe)}function c(C){return x.state.isMounted&&!x.state.isVisible||_.isTouch||ye&&ye.type==="focus"?0:w(x.props.delay,C?0:1,Qe.delay)}function a(){fe.style.pointerEvents=x.props.interactive&&x.state.isVisible?"":"none",fe.style.zIndex=""+x.props.zIndex}function b(C,G,te){if(te===void 0&&(te=!0),bt.forEach(function(we){we[C]&&we[C].apply(void 0,G)}),te){var ge;(ge=x.props)[C].apply(ge,G)}}function D(){var C=x.props.aria;if(C.content){var G="aria-"+C.content,te=fe.id,ge=R(x.props.triggerTarget||g);ge.forEach(function(we){var Ke=we.getAttribute(G);if(x.state.isVisible)we.setAttribute(G,Ke?Ke+" "+te:te);else{var Je=Ke&&Ke.replace(te,"").trim();Je?we.setAttribute(G,Je):we.removeAttribute(G)}})}}function T(){if(!(Gt||!x.props.aria.expanded)){var C=R(x.props.triggerTarget||g);C.forEach(function(G){x.props.interactive?G.setAttribute("aria-expanded",x.state.isVisible&&G===lt()?"true":"false"):G.removeAttribute("aria-expanded")})}}function F(){yt().removeEventListener("mousemove",Ie),yn=yn.filter(function(C){return C!==Ie})}function W(C){if(!(_.isTouch&&(le||C.type==="mousedown"))&&!(x.props.interactive&&fe.contains(C.target))){if(lt().contains(C.target)){if(_.isTouch||x.state.isVisible&&x.props.trigger.indexOf("click")>=0)return}else b("onClickOutside",[x,C]);x.props.hideOnClick===!0&&(x.clearDelayTimeouts(),x.hide(),be=!0,setTimeout(function(){be=!1}),x.state.isMounted||z())}}function j(){le=!0}function q(){le=!1}function oe(){var C=yt();C.addEventListener("mousedown",W,!0),C.addEventListener("touchend",W,u),C.addEventListener("touchstart",q,u),C.addEventListener("touchmove",j,u)}function z(){var C=yt();C.removeEventListener("mousedown",W,!0),C.removeEventListener("touchend",W,u),C.removeEventListener("touchstart",q,u),C.removeEventListener("touchmove",j,u)}function De(C,G){Ae(C,function(){!x.state.isVisible&&fe.parentNode&&fe.parentNode.contains(fe)&&G()})}function Le(C,G){Ae(C,G)}function Ae(C,G){var te=un().box;function ge(we){we.target===te&&(N(te,"remove",ge),G())}if(C===0)return G();N(te,"remove",_e),N(te,"add",ge),_e=ge}function xe(C,G,te){te===void 0&&(te=!1);var ge=R(x.props.triggerTarget||g);ge.forEach(function(we){we.addEventListener(C,G,te),Se.push({node:we,eventType:C,handler:G,options:te})})}function Me(){Jt()&&(xe("touchstart",Be,{passive:!0}),xe("touchend",He,{passive:!0})),P(x.props.trigger).forEach(function(C){if(C!=="manual")switch(xe(C,Be),C){case"mouseenter":xe("mouseleave",He);break;case"focus":xe(kr?"focusout":"blur",ce);break;case"focusin":xe("focusout",ce);break}})}function Ee(){Se.forEach(function(C){var G=C.node,te=C.eventType,ge=C.handler,we=C.options;G.removeEventListener(te,ge,we)}),Se=[]}function Be(C){var G,te=!1;if(!(!x.state.isEnabled||Pe(C)||be)){var ge=((G=ye)==null?void 0:G.type)==="focus";ye=C,re=C.currentTarget,T(),!x.state.isVisible&&U(C)&&yn.forEach(function(we){return we(C)}),C.type==="click"&&(x.props.trigger.indexOf("mouseenter")<0||k)&&x.props.hideOnClick!==!1&&x.state.isVisible?te=!0:$e(C),C.type==="click"&&(k=!te),te&&!ge&&Ve(C)}}function Re(C){var G=C.target,te=lt().contains(G)||fe.contains(G);if(!(C.type==="mousemove"&&te)){var ge=Ye().concat(fe).map(function(we){var Ke,Je=we._tippy,Dt=(Ke=Je.popperInstance)==null?void 0:Ke.state;return Dt?{popperRect:we.getBoundingClientRect(),popperState:Dt,props:A}:null}).filter(Boolean);d(ge,C)&&(F(),Ve(C))}}function He(C){var G=Pe(C)||x.props.trigger.indexOf("click")>=0&&k;if(!G){if(x.props.interactive){x.hideWithInteractivity(C);return}Ve(C)}}function ce(C){x.props.trigger.indexOf("focusin")<0&&C.target!==lt()||x.props.interactive&&C.relatedTarget&&fe.contains(C.relatedTarget)||Ve(C)}function Pe(C){return _.isTouch?Jt()!==C.type.indexOf("touch")>=0:!1}function Te(){Ne();var C=x.props,G=C.popperOptions,te=C.placement,ge=C.offset,we=C.getReferenceClientRect,Ke=C.moveTransition,Je=rt()?Xt(fe).arrow:null,Dt=we?{getBoundingClientRect:we,contextElement:we.contextElement||lt()}:g,Vn={name:"$$tippy",enabled:!0,phase:"beforeWrite",requires:["computeStyles"],fn:function(pn){var en=pn.state;if(rt()){var Gr=un(),tn=Gr.box;["placement","reference-hidden","escaped"].forEach(function(hn){hn==="placement"?tn.setAttribute("data-placement",en.placement):en.attributes.popper["data-popper-"+hn]?tn.setAttribute("data-"+hn,""):tn.removeAttribute("data-"+hn)}),en.attributes.popper={}}}},Tt=[{name:"offset",options:{offset:ge}},{name:"preventOverflow",options:{padding:{top:2,bottom:2,left:5,right:5}}},{name:"flip",options:{padding:5}},{name:"computeStyles",options:{adaptive:!Ke}},Vn];rt()&&Je&&Tt.push({name:"arrow",options:{element:Je,padding:3}}),Tt.push.apply(Tt,G?.modifiers||[]),x.popperInstance=e.createPopper(Dt,fe,Object.assign({},G,{placement:te,onFirstUpdate:je,modifiers:Tt}))}function Ne(){x.popperInstance&&(x.popperInstance.destroy(),x.popperInstance=null)}function Fe(){var C=x.props.appendTo,G,te=lt();x.props.interactive&&C===Qe.appendTo||C==="parent"?G=te.parentNode:G=E(C,[te]),G.contains(fe)||G.appendChild(fe),Te(),mt(x.props.interactive&&C===Qe.appendTo&&te.nextElementSibling!==fe,["Interactive tippy element may not be accessible via keyboard","navigation because it is not directly after the reference element","in the DOM source order.",` `,"Using a wrapper
or tag around the reference element","solves this by creating a new parentNode context.",` `,"Specifying `appendTo: document.body` silences this warning, but it","assumes you are using a focus management solution to handle","keyboard navigation.",` -`,"See: https://atomiks.github.io/tippyjs/v6/accessibility/#interactivity"].join(" "))}function Ye(){return X(fe.querySelectorAll("[data-tippy-root]"))}function $e(C){x.clearDelayTimeouts(),C&&g("onTrigger",[x,C]),oe();var G=c(!0),te=Kt(),ge=te[0],we=te[1];_.isTouch&&ge==="hold"&&we&&(G=we),G?I=setTimeout(function(){x.show()},G):x.show()}function Ve(C){if(x.clearDelayTimeouts(),g("onUntrigger",[x,C]),!x.state.isVisible){z();return}if(!(x.props.trigger.indexOf("mouseenter")>=0&&x.props.trigger.indexOf("click")>=0&&["mouseleave","mousemove"].indexOf(C.type)>=0&&k)){var G=c(!1);G?Y=setTimeout(function(){x.state.isVisible&&x.hide()},G):H=requestAnimationFrame(function(){x.hide()})}}function wt(){x.state.isEnabled=!0}function et(){x.hide(),x.state.isEnabled=!1}function Lt(){clearTimeout(I),clearTimeout(Y),cancelAnimationFrame(H)}function dn(C){if(mt(x.state.isDestroyed,zt("setProps")),!x.state.isDestroyed){g("onBeforeUpdate",[x,C]),Ee();var G=x.props,te=ir(m,Object.assign({},x.props,{},C,{ignoreAttributes:!0}));x.props=te,Me(),G.interactiveDebounce!==te.interactiveDebounce&&(F(),Ie=E(Re,te.interactiveDebounce)),G.triggerTarget&&!te.triggerTarget?R(G.triggerTarget).forEach(function(ge){ge.removeAttribute("aria-expanded")}):te.triggerTarget&&m.removeAttribute("aria-expanded"),T(),a(),Ft&&Ft(G,te),x.popperInstance&&(Te(),Ye().forEach(function(ge){requestAnimationFrame(ge._tippy.popperInstance.forceUpdate)})),g("onAfterUpdate",[x,C])}}function Zt(C){x.setProps({content:C})}function Nt(){mt(x.state.isDestroyed,zt("show"));var C=x.state.isVisible,G=x.state.isDestroyed,te=!x.state.isEnabled,ge=_.isTouch&&!x.props.touch,we=y(x.props.duration,0,Qe.duration);if(!(C||G||te||ge)&&!st().hasAttribute("disabled")&&(g("onShow",[x],!1),x.props.onShow(x)!==!1)){if(x.state.isVisible=!0,rt()&&(fe.style.visibility="visible"),a(),oe(),x.state.isMounted||(fe.style.transition="none"),rt()){var Ke=un(),Je=Ke.box,Dt=Ke.content;s([Je,Dt],0)}je=function(){var Tt;if(!(!x.state.isVisible||pe)){if(pe=!0,fe.offsetHeight,fe.style.transition=x.props.moveTransition,rt()&&x.props.animation){var An=un(),pn=An.box,en=An.content;s([pn,en],we),p([pn,en],"visible")}D(),T(),$(wn,x),(Tt=x.popperInstance)==null||Tt.forceUpdate(),x.state.isMounted=!0,g("onMount",[x]),x.props.animation&&rt()&&Le(we,function(){x.state.isShown=!0,g("onShown",[x])})}},Fe()}}function $n(){mt(x.state.isDestroyed,zt("hide"));var C=!x.state.isVisible,G=x.state.isDestroyed,te=!x.state.isEnabled,ge=y(x.props.duration,1,Qe.duration);if(!(C||G||te)&&(g("onHide",[x],!1),x.props.onHide(x)!==!1)){if(x.state.isVisible=!1,x.state.isShown=!1,pe=!1,k=!1,rt()&&(fe.style.visibility="hidden"),F(),z(),a(),rt()){var we=un(),Ke=we.box,Je=we.content;x.props.animation&&(s([Ke,Je],ge),p([Ke,Je],"hidden"))}D(),T(),x.props.animation?rt()&&De(ge,x.unmount):x.unmount()}}function Qt(C){mt(x.state.isDestroyed,zt("hideWithInteractivity")),yt().addEventListener("mousemove",Ie),$(yn,Ie),Ie(C)}function Sn(){mt(x.state.isDestroyed,zt("unmount")),x.state.isVisible&&x.hide(),x.state.isMounted&&(Ne(),Ye().forEach(function(C){C._tippy.unmount()}),fe.parentNode&&fe.parentNode.removeChild(fe),wn=wn.filter(function(C){return C!==x}),x.state.isMounted=!1,g("onHidden",[x]))}function Wn(){mt(x.state.isDestroyed,zt("destroy")),!x.state.isDestroyed&&(x.clearDelayTimeouts(),x.unmount(),Ee(),delete m._tippy,x.state.isDestroyed=!0,g("onDestroy",[x]))}}function dt(m,w){w===void 0&&(w={});var S=Qe.plugins.concat(w.plugins||[]);At(m),gt(w,S),Vt();var I=Object.assign({},w,{plugins:S}),Y=me(m),H=V(I.content),k=Y.length>1;mt(H&&k,["tippy() was passed an Element as the `content` prop, but more than","one tippy instance was created by this invocation. This means the","content element will only be appended to the last tippy instance.",` +`,"See: https://atomiks.github.io/tippyjs/v6/accessibility/#interactivity"].join(" "))}function Ye(){return X(fe.querySelectorAll("[data-tippy-root]"))}function $e(C){x.clearDelayTimeouts(),C&&b("onTrigger",[x,C]),oe();var G=c(!0),te=Kt(),ge=te[0],we=te[1];_.isTouch&&ge==="hold"&&we&&(G=we),G?I=setTimeout(function(){x.show()},G):x.show()}function Ve(C){if(x.clearDelayTimeouts(),b("onUntrigger",[x,C]),!x.state.isVisible){z();return}if(!(x.props.trigger.indexOf("mouseenter")>=0&&x.props.trigger.indexOf("click")>=0&&["mouseleave","mousemove"].indexOf(C.type)>=0&&k)){var G=c(!1);G?Y=setTimeout(function(){x.state.isVisible&&x.hide()},G):H=requestAnimationFrame(function(){x.hide()})}}function wt(){x.state.isEnabled=!0}function et(){x.hide(),x.state.isEnabled=!1}function Lt(){clearTimeout(I),clearTimeout(Y),cancelAnimationFrame(H)}function dn(C){if(mt(x.state.isDestroyed,zt("setProps")),!x.state.isDestroyed){b("onBeforeUpdate",[x,C]),Ee();var G=x.props,te=ir(g,Object.assign({},x.props,{},C,{ignoreAttributes:!0}));x.props=te,Me(),G.interactiveDebounce!==te.interactiveDebounce&&(F(),Ie=O(Re,te.interactiveDebounce)),G.triggerTarget&&!te.triggerTarget?R(G.triggerTarget).forEach(function(ge){ge.removeAttribute("aria-expanded")}):te.triggerTarget&&g.removeAttribute("aria-expanded"),T(),a(),Ft&&Ft(G,te),x.popperInstance&&(Te(),Ye().forEach(function(ge){requestAnimationFrame(ge._tippy.popperInstance.forceUpdate)})),b("onAfterUpdate",[x,C])}}function Zt(C){x.setProps({content:C})}function Nt(){mt(x.state.isDestroyed,zt("show"));var C=x.state.isVisible,G=x.state.isDestroyed,te=!x.state.isEnabled,ge=_.isTouch&&!x.props.touch,we=w(x.props.duration,0,Qe.duration);if(!(C||G||te||ge)&&!lt().hasAttribute("disabled")&&(b("onShow",[x],!1),x.props.onShow(x)!==!1)){if(x.state.isVisible=!0,rt()&&(fe.style.visibility="visible"),a(),oe(),x.state.isMounted||(fe.style.transition="none"),rt()){var Ke=un(),Je=Ke.box,Dt=Ke.content;l([Je,Dt],0)}je=function(){var Tt;if(!(!x.state.isVisible||pe)){if(pe=!0,fe.offsetHeight,fe.style.transition=x.props.moveTransition,rt()&&x.props.animation){var An=un(),pn=An.box,en=An.content;l([pn,en],we),p([pn,en],"visible")}D(),T(),$(wn,x),(Tt=x.popperInstance)==null||Tt.forceUpdate(),x.state.isMounted=!0,b("onMount",[x]),x.props.animation&&rt()&&Le(we,function(){x.state.isShown=!0,b("onShown",[x])})}},Fe()}}function $n(){mt(x.state.isDestroyed,zt("hide"));var C=!x.state.isVisible,G=x.state.isDestroyed,te=!x.state.isEnabled,ge=w(x.props.duration,1,Qe.duration);if(!(C||G||te)&&(b("onHide",[x],!1),x.props.onHide(x)!==!1)){if(x.state.isVisible=!1,x.state.isShown=!1,pe=!1,k=!1,rt()&&(fe.style.visibility="hidden"),F(),z(),a(),rt()){var we=un(),Ke=we.box,Je=we.content;x.props.animation&&(l([Ke,Je],ge),p([Ke,Je],"hidden"))}D(),T(),x.props.animation?rt()&&De(ge,x.unmount):x.unmount()}}function Qt(C){mt(x.state.isDestroyed,zt("hideWithInteractivity")),yt().addEventListener("mousemove",Ie),$(yn,Ie),Ie(C)}function Sn(){mt(x.state.isDestroyed,zt("unmount")),x.state.isVisible&&x.hide(),x.state.isMounted&&(Ne(),Ye().forEach(function(C){C._tippy.unmount()}),fe.parentNode&&fe.parentNode.removeChild(fe),wn=wn.filter(function(C){return C!==x}),x.state.isMounted=!1,b("onHidden",[x]))}function Wn(){mt(x.state.isDestroyed,zt("destroy")),!x.state.isDestroyed&&(x.clearDelayTimeouts(),x.unmount(),Ee(),delete g._tippy,x.state.isDestroyed=!0,b("onDestroy",[x]))}}function dt(g,y){y===void 0&&(y={});var A=Qe.plugins.concat(y.plugins||[]);At(g),gt(y,A),Vt();var I=Object.assign({},y,{plugins:A}),Y=me(g),H=V(I.content),k=Y.length>1;mt(H&&k,["tippy() was passed an Element as the `content` prop, but more than","one tippy instance was created by this invocation. This means the","content element will only be appended to the last tippy instance.",` `,"Instead, pass the .innerHTML of the element, or use a function that","returns a cloned version of the element instead.",` `,`1) content: element.innerHTML -`,"2) content: () => element.cloneNode(true)"].join(" "));var be=Y.reduce(function(le,pe){var ye=pe&&cn(pe,I);return ye&&le.push(ye),le},[]);return V(m)?be[0]:be}dt.defaultProps=Qe,dt.setDefaultProps=Wr,dt.currentInput=_;var lr=function(w){var S=w===void 0?{}:w,I=S.exclude,Y=S.duration;wn.forEach(function(H){var k=!1;if(I&&(k=Z(I)?H.reference===I:H.popper===I.popper),!k){var be=H.props.duration;H.setProps({duration:Y}),H.hide(),H.state.isDestroyed||H.setProps({duration:be})}})},cr=Object.assign({},e.applyStyles,{effect:function(w){var S=w.state,I={popper:{position:S.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};Object.assign(S.elements.popper.style,I.popper),S.styles=I,S.elements.arrow&&Object.assign(S.elements.arrow.style,I.arrow)}}),fr=function(w,S){var I;S===void 0&&(S={}),Ut(!Array.isArray(w),["The first argument passed to createSingleton() must be an array of","tippy instances. The passed value was",String(w)].join(" "));var Y=w,H=[],k,be=S.overrides,le=[],pe=!1;function ye(){H=Y.map(function(ee){return ee.reference})}function _e(ee){Y.forEach(function(ie){ee?ie.enable():ie.disable()})}function je(ee){return Y.map(function(ie){var x=ie.setProps;return ie.setProps=function(Ge){x(Ge),ie.reference===k&&ee.setProps(Ge)},function(){ie.setProps=x}})}function Se(ee,ie){var x=H.indexOf(ie);if(ie!==k){k=ie;var Ge=(be||[]).concat("content").reduce(function(fe,Ft){return fe[Ft]=Y[x].props[Ft],fe},{});ee.setProps(Object.assign({},Ge,{getReferenceClientRect:typeof Ge.getReferenceClientRect=="function"?Ge.getReferenceClientRect:function(){return ie.getBoundingClientRect()}}))}}_e(!1),ye();var Ie={fn:function(){return{onDestroy:function(){_e(!0)},onHidden:function(){k=null},onClickOutside:function(x){x.props.showOnCreate&&!pe&&(pe=!0,k=null)},onShow:function(x){x.props.showOnCreate&&!pe&&(pe=!0,Se(x,H[0]))},onTrigger:function(x,Ge){Se(x,Ge.currentTarget)}}}},re=dt(J(),Object.assign({},O(S,["overrides"]),{plugins:[Ie].concat(S.plugins||[]),triggerTarget:H,popperOptions:Object.assign({},S.popperOptions,{modifiers:[].concat(((I=S.popperOptions)==null?void 0:I.modifiers)||[],[cr])})})),he=re.show;re.show=function(ee){if(he(),!k&&ee==null)return Se(re,H[0]);if(!(k&&ee==null)){if(typeof ee=="number")return H[ee]&&Se(re,H[ee]);if(Y.includes(ee)){var ie=ee.reference;return Se(re,ie)}if(H.includes(ee))return Se(re,ee)}},re.showNext=function(){var ee=H[0];if(!k)return re.show(0);var ie=H.indexOf(k);re.show(H[ie+1]||ee)},re.showPrevious=function(){var ee=H[H.length-1];if(!k)return re.show(ee);var ie=H.indexOf(k),x=H[ie-1]||ee;re.show(x)};var ve=re.setProps;return re.setProps=function(ee){be=ee.overrides||be,ve(ee)},re.setInstances=function(ee){_e(!0),le.forEach(function(ie){return ie()}),Y=ee,_e(!1),ye(),je(re),re.setProps({triggerTarget:H})},le=je(re),re},ur={mouseover:"mouseenter",focusin:"focus",click:"click"};function qt(m,w){Ut(!(w&&w.target),["You must specity a `target` prop indicating a CSS selector string matching","the target elements that should receive a tippy."].join(" "));var S=[],I=[],Y=!1,H=w.target,k=O(w,["target"]),be=Object.assign({},k,{trigger:"manual",touch:!1}),le=Object.assign({},k,{showOnCreate:!0}),pe=dt(m,be),ye=R(pe);function _e(he){if(!(!he.target||Y)){var ve=he.target.closest(H);if(ve){var ee=ve.getAttribute("data-tippy-trigger")||w.trigger||Qe.trigger;if(!ve._tippy&&!(he.type==="touchstart"&&typeof le.touch=="boolean")&&!(he.type!=="touchstart"&&ee.indexOf(ur[he.type])<0)){var ie=dt(ve,le);ie&&(I=I.concat(ie))}}}}function je(he,ve,ee,ie){ie===void 0&&(ie=!1),he.addEventListener(ve,ee,ie),S.push({node:he,eventType:ve,handler:ee,options:ie})}function Se(he){var ve=he.reference;je(ve,"touchstart",_e,u),je(ve,"mouseover",_e),je(ve,"focusin",_e),je(ve,"click",_e)}function Ie(){S.forEach(function(he){var ve=he.node,ee=he.eventType,ie=he.handler,x=he.options;ve.removeEventListener(ee,ie,x)}),S=[]}function re(he){var ve=he.destroy,ee=he.enable,ie=he.disable;he.destroy=function(x){x===void 0&&(x=!0),x&&I.forEach(function(Ge){Ge.destroy()}),I=[],Ie(),ve()},he.enable=function(){ee(),I.forEach(function(x){return x.enable()}),Y=!1},he.disable=function(){ie(),I.forEach(function(x){return x.disable()}),Y=!0},Se(he)}return ye.forEach(re),pe}var dr={name:"animateFill",defaultValue:!1,fn:function(w){var S;if(!((S=w.props.render)!=null&&S.$$tippy))return Ut(w.props.animateFill,"The `animateFill` plugin requires the default render function."),{};var I=Xt(w.popper),Y=I.box,H=I.content,k=w.props.animateFill?zr():null;return{onCreate:function(){k&&(Y.insertBefore(k,Y.firstElementChild),Y.setAttribute("data-animatefill",""),Y.style.overflow="hidden",w.setProps({arrow:!1,animation:"shift-away"}))},onMount:function(){if(k){var le=Y.style.transitionDuration,pe=Number(le.replace("ms",""));H.style.transitionDelay=Math.round(pe/10)+"ms",k.style.transitionDuration=le,p([k],"visible")}},onShow:function(){k&&(k.style.transitionDuration="0ms")},onHide:function(){k&&p([k],"hidden")}}}};function zr(){var m=J();return m.className=o,p([m],"hidden"),m}var xn={clientX:0,clientY:0},fn=[];function En(m){var w=m.clientX,S=m.clientY;xn={clientX:w,clientY:S}}function On(m){m.addEventListener("mousemove",En)}function Ur(m){m.removeEventListener("mousemove",En)}var jn={name:"followCursor",defaultValue:!1,fn:function(w){var S=w.reference,I=v(w.props.triggerTarget||S),Y=!1,H=!1,k=!0,be=w.props;function le(){return w.props.followCursor==="initial"&&w.state.isVisible}function pe(){I.addEventListener("mousemove",je)}function ye(){I.removeEventListener("mousemove",je)}function _e(){Y=!0,w.setProps({getReferenceClientRect:null}),Y=!1}function je(re){var he=re.target?S.contains(re.target):!0,ve=w.props.followCursor,ee=re.clientX,ie=re.clientY,x=S.getBoundingClientRect(),Ge=ee-x.left,fe=ie-x.top;(he||!w.props.interactive)&&w.setProps({getReferenceClientRect:function(){var bt=S.getBoundingClientRect(),Gt=ee,Kt=ie;ve==="initial"&&(Gt=bt.left+Ge,Kt=bt.top+fe);var Jt=ve==="horizontal"?bt.top:Kt,rt=ve==="vertical"?bt.right:Gt,st=ve==="horizontal"?bt.bottom:Kt,yt=ve==="vertical"?bt.left:Gt;return{width:rt-yt,height:st-Jt,top:Jt,right:rt,bottom:st,left:yt}}})}function Se(){w.props.followCursor&&(fn.push({instance:w,doc:I}),On(I))}function Ie(){fn=fn.filter(function(re){return re.instance!==w}),fn.filter(function(re){return re.doc===I}).length===0&&Ur(I)}return{onCreate:Se,onDestroy:Ie,onBeforeUpdate:function(){be=w.props},onAfterUpdate:function(he,ve){var ee=ve.followCursor;Y||ee!==void 0&&be.followCursor!==ee&&(Ie(),ee?(Se(),w.state.isMounted&&!H&&!le()&&pe()):(ye(),_e()))},onMount:function(){w.props.followCursor&&!H&&(k&&(je(xn),k=!1),le()||pe())},onTrigger:function(he,ve){U(ve)&&(xn={clientX:ve.clientX,clientY:ve.clientY}),H=ve.type==="focus"},onHidden:function(){w.props.followCursor&&(_e(),ye(),k=!0)}}}};function Yr(m,w){var S;return{popperOptions:Object.assign({},m.popperOptions,{modifiers:[].concat((((S=m.popperOptions)==null?void 0:S.modifiers)||[]).filter(function(I){var Y=I.name;return Y!==w.name}),[w])})}}var Bn={name:"inlinePositioning",defaultValue:!1,fn:function(w){var S=w.reference;function I(){return!!w.props.inlinePositioning}var Y,H=-1,k=!1,be={name:"tippyInlinePositioning",enabled:!0,phase:"afterWrite",fn:function(je){var Se=je.state;I()&&(Y!==Se.placement&&w.setProps({getReferenceClientRect:function(){return le(Se.placement)}}),Y=Se.placement)}};function le(_e){return Xr(K(_e),S.getBoundingClientRect(),X(S.getClientRects()),H)}function pe(_e){k=!0,w.setProps(_e),k=!1}function ye(){k||pe(Yr(w.props,be))}return{onCreate:ye,onAfterUpdate:ye,onTrigger:function(je,Se){if(U(Se)){var Ie=X(w.reference.getClientRects()),re=Ie.find(function(he){return he.left-2<=Se.clientX&&he.right+2>=Se.clientX&&he.top-2<=Se.clientY&&he.bottom+2>=Se.clientY});H=Ie.indexOf(re)}},onUntrigger:function(){H=-1}}}};function Xr(m,w,S,I){if(S.length<2||m===null)return w;if(S.length===2&&I>=0&&S[0].left>S[1].right)return S[I]||w;switch(m){case"top":case"bottom":{var Y=S[0],H=S[S.length-1],k=m==="top",be=Y.top,le=H.bottom,pe=k?Y.left:H.left,ye=k?Y.right:H.right,_e=ye-pe,je=le-be;return{top:be,bottom:le,left:pe,right:ye,width:_e,height:je}}case"left":case"right":{var Se=Math.min.apply(Math,S.map(function(fe){return fe.left})),Ie=Math.max.apply(Math,S.map(function(fe){return fe.right})),re=S.filter(function(fe){return m==="left"?fe.left===Se:fe.right===Ie}),he=re[0].top,ve=re[re.length-1].bottom,ee=Se,ie=Ie,x=ie-ee,Ge=ve-he;return{top:he,bottom:ve,left:ee,right:ie,width:x,height:Ge}}default:return w}}var qr={name:"sticky",defaultValue:!1,fn:function(w){var S=w.reference,I=w.popper;function Y(){return w.popperInstance?w.popperInstance.state.elements.reference:S}function H(pe){return w.props.sticky===!0||w.props.sticky===pe}var k=null,be=null;function le(){var pe=H("reference")?Y().getBoundingClientRect():null,ye=H("popper")?I.getBoundingClientRect():null;(pe&&Hn(k,pe)||ye&&Hn(be,ye))&&w.popperInstance&&w.popperInstance.update(),k=pe,be=ye,w.state.isMounted&&requestAnimationFrame(le)}return{onMount:function(){w.props.sticky&&le()}}}};function Hn(m,w){return m&&w?m.top!==w.top||m.right!==w.right||m.bottom!==w.bottom||m.left!==w.left:!0}dt.setDefaultProps({render:ar}),t.animateFill=dr,t.createSingleton=fr,t.default=dt,t.delegate=qt,t.followCursor=jn,t.hideAll=lr,t.inlinePositioning=Bn,t.roundArrow=r,t.sticky=qr}),Ei=Fo(Lo()),ds=Fo(Lo()),ps=t=>{let e={plugins:[]},r=i=>t[t.indexOf(i)+1];if(t.includes("animation")&&(e.animation=r("animation")),t.includes("duration")&&(e.duration=parseInt(r("duration"))),t.includes("delay")){let i=r("delay");e.delay=i.includes("-")?i.split("-").map(o=>parseInt(o)):parseInt(i)}if(t.includes("cursor")){e.plugins.push(ds.followCursor);let i=r("cursor");["x","initial"].includes(i)?e.followCursor=i==="x"?"horizontal":"initial":e.followCursor=!0}t.includes("on")&&(e.trigger=r("on")),t.includes("arrowless")&&(e.arrow=!1),t.includes("html")&&(e.allowHTML=!0),t.includes("interactive")&&(e.interactive=!0),t.includes("border")&&e.interactive&&(e.interactiveBorder=parseInt(r("border"))),t.includes("debounce")&&e.interactive&&(e.interactiveDebounce=parseInt(r("debounce"))),t.includes("max-width")&&(e.maxWidth=parseInt(r("max-width"))),t.includes("theme")&&(e.theme=r("theme")),t.includes("placement")&&(e.placement=r("placement"));let n={};return t.includes("no-flip")&&(n.modifiers||(n.modifiers=[]),n.modifiers.push({name:"flip",enabled:!1})),e.popperOptions=n,e};function Oi(t){t.magic("tooltip",e=>(r,n={})=>{let i=n.timeout;delete n.timeout;let o=(0,Ei.default)(e,{content:r,trigger:"manual",...n});o.show(),setTimeout(()=>{o.hide(),setTimeout(()=>o.destroy(),n.duration||300)},i||2e3)}),t.directive("tooltip",(e,{modifiers:r,expression:n},{evaluateLater:i,effect:o})=>{let l=r.length>0?ps(r):{};e.__x_tippy||(e.__x_tippy=(0,Ei.default)(e,l));let h=()=>e.__x_tippy.enable(),u=()=>e.__x_tippy.disable(),f=y=>{y?(h(),e.__x_tippy.setContent(y)):u()};if(r.includes("raw"))f(n);else{let y=i(n);o(()=>{y(b=>{typeof b=="object"?(e.__x_tippy.setProps(b),h()):f(b)})})}})}Oi.defaultProps=t=>(Ei.default.setDefaultProps(t),Oi);var hs=Oi,No=hs;document.addEventListener("alpine:init",()=>{window.Alpine.plugin(ro),window.Alpine.plugin(io),window.Alpine.plugin(Ro),window.Alpine.plugin(No)});var vs=function(t,e,r){function n(y,b){for(let A of y){let E=i(A,b);if(E!==null)return E}}function i(y,b){let A=y.match(/^[\{\[]([^\[\]\{\}]*)[\}\]](.*)/s);if(A===null||A.length!==3)return null;let E=A[1],O=A[2];if(E.includes(",")){let[P,R]=E.split(",",2);if(R==="*"&&b>=P)return O;if(P==="*"&&b<=R)return O;if(b>=P&&b<=R)return O}return E==b?O:null}function o(y){return y.toString().charAt(0).toUpperCase()+y.toString().slice(1)}function l(y,b){if(b.length===0)return y;let A={};for(let[E,O]of Object.entries(b))A[":"+o(E??"")]=o(O??""),A[":"+E.toUpperCase()]=O.toString().toUpperCase(),A[":"+E]=O;return Object.entries(A).forEach(([E,O])=>{y=y.replaceAll(E,O)}),y}function h(y){return y.map(b=>b.replace(/^[\{\[]([^\[\]\{\}]*)[\}\]]/,""))}let u=t.split("|"),f=n(u,e);return f!=null?l(f.trim(),r):(u=h(u),l(u.length>1&&e>1?u[1]:u[0],r))};window.jsMd5=ko.md5;window.pluralize=vs;})(); +`,"2) content: () => element.cloneNode(true)"].join(" "));var be=Y.reduce(function(le,pe){var ye=pe&&cn(pe,I);return ye&&le.push(ye),le},[]);return V(g)?be[0]:be}dt.defaultProps=Qe,dt.setDefaultProps=Wr,dt.currentInput=_;var lr=function(y){var A=y===void 0?{}:y,I=A.exclude,Y=A.duration;wn.forEach(function(H){var k=!1;if(I&&(k=Z(I)?H.reference===I:H.popper===I.popper),!k){var be=H.props.duration;H.setProps({duration:Y}),H.hide(),H.state.isDestroyed||H.setProps({duration:be})}})},cr=Object.assign({},e.applyStyles,{effect:function(y){var A=y.state,I={popper:{position:A.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};Object.assign(A.elements.popper.style,I.popper),A.styles=I,A.elements.arrow&&Object.assign(A.elements.arrow.style,I.arrow)}}),fr=function(y,A){var I;A===void 0&&(A={}),Ut(!Array.isArray(y),["The first argument passed to createSingleton() must be an array of","tippy instances. The passed value was",String(y)].join(" "));var Y=y,H=[],k,be=A.overrides,le=[],pe=!1;function ye(){H=Y.map(function(ee){return ee.reference})}function _e(ee){Y.forEach(function(ie){ee?ie.enable():ie.disable()})}function je(ee){return Y.map(function(ie){var x=ie.setProps;return ie.setProps=function(Ge){x(Ge),ie.reference===k&&ee.setProps(Ge)},function(){ie.setProps=x}})}function Se(ee,ie){var x=H.indexOf(ie);if(ie!==k){k=ie;var Ge=(be||[]).concat("content").reduce(function(fe,Ft){return fe[Ft]=Y[x].props[Ft],fe},{});ee.setProps(Object.assign({},Ge,{getReferenceClientRect:typeof Ge.getReferenceClientRect=="function"?Ge.getReferenceClientRect:function(){return ie.getBoundingClientRect()}}))}}_e(!1),ye();var Ie={fn:function(){return{onDestroy:function(){_e(!0)},onHidden:function(){k=null},onClickOutside:function(x){x.props.showOnCreate&&!pe&&(pe=!0,k=null)},onShow:function(x){x.props.showOnCreate&&!pe&&(pe=!0,Se(x,H[0]))},onTrigger:function(x,Ge){Se(x,Ge.currentTarget)}}}},re=dt(J(),Object.assign({},S(A,["overrides"]),{plugins:[Ie].concat(A.plugins||[]),triggerTarget:H,popperOptions:Object.assign({},A.popperOptions,{modifiers:[].concat(((I=A.popperOptions)==null?void 0:I.modifiers)||[],[cr])})})),he=re.show;re.show=function(ee){if(he(),!k&&ee==null)return Se(re,H[0]);if(!(k&&ee==null)){if(typeof ee=="number")return H[ee]&&Se(re,H[ee]);if(Y.includes(ee)){var ie=ee.reference;return Se(re,ie)}if(H.includes(ee))return Se(re,ee)}},re.showNext=function(){var ee=H[0];if(!k)return re.show(0);var ie=H.indexOf(k);re.show(H[ie+1]||ee)},re.showPrevious=function(){var ee=H[H.length-1];if(!k)return re.show(ee);var ie=H.indexOf(k),x=H[ie-1]||ee;re.show(x)};var ve=re.setProps;return re.setProps=function(ee){be=ee.overrides||be,ve(ee)},re.setInstances=function(ee){_e(!0),le.forEach(function(ie){return ie()}),Y=ee,_e(!1),ye(),je(re),re.setProps({triggerTarget:H})},le=je(re),re},ur={mouseover:"mouseenter",focusin:"focus",click:"click"};function qt(g,y){Ut(!(y&&y.target),["You must specity a `target` prop indicating a CSS selector string matching","the target elements that should receive a tippy."].join(" "));var A=[],I=[],Y=!1,H=y.target,k=S(y,["target"]),be=Object.assign({},k,{trigger:"manual",touch:!1}),le=Object.assign({},k,{showOnCreate:!0}),pe=dt(g,be),ye=R(pe);function _e(he){if(!(!he.target||Y)){var ve=he.target.closest(H);if(ve){var ee=ve.getAttribute("data-tippy-trigger")||y.trigger||Qe.trigger;if(!ve._tippy&&!(he.type==="touchstart"&&typeof le.touch=="boolean")&&!(he.type!=="touchstart"&&ee.indexOf(ur[he.type])<0)){var ie=dt(ve,le);ie&&(I=I.concat(ie))}}}}function je(he,ve,ee,ie){ie===void 0&&(ie=!1),he.addEventListener(ve,ee,ie),A.push({node:he,eventType:ve,handler:ee,options:ie})}function Se(he){var ve=he.reference;je(ve,"touchstart",_e,u),je(ve,"mouseover",_e),je(ve,"focusin",_e),je(ve,"click",_e)}function Ie(){A.forEach(function(he){var ve=he.node,ee=he.eventType,ie=he.handler,x=he.options;ve.removeEventListener(ee,ie,x)}),A=[]}function re(he){var ve=he.destroy,ee=he.enable,ie=he.disable;he.destroy=function(x){x===void 0&&(x=!0),x&&I.forEach(function(Ge){Ge.destroy()}),I=[],Ie(),ve()},he.enable=function(){ee(),I.forEach(function(x){return x.enable()}),Y=!1},he.disable=function(){ie(),I.forEach(function(x){return x.disable()}),Y=!0},Se(he)}return ye.forEach(re),pe}var dr={name:"animateFill",defaultValue:!1,fn:function(y){var A;if(!((A=y.props.render)!=null&&A.$$tippy))return Ut(y.props.animateFill,"The `animateFill` plugin requires the default render function."),{};var I=Xt(y.popper),Y=I.box,H=I.content,k=y.props.animateFill?zr():null;return{onCreate:function(){k&&(Y.insertBefore(k,Y.firstElementChild),Y.setAttribute("data-animatefill",""),Y.style.overflow="hidden",y.setProps({arrow:!1,animation:"shift-away"}))},onMount:function(){if(k){var le=Y.style.transitionDuration,pe=Number(le.replace("ms",""));H.style.transitionDelay=Math.round(pe/10)+"ms",k.style.transitionDuration=le,p([k],"visible")}},onShow:function(){k&&(k.style.transitionDuration="0ms")},onHide:function(){k&&p([k],"hidden")}}}};function zr(){var g=J();return g.className=o,p([g],"hidden"),g}var xn={clientX:0,clientY:0},fn=[];function En(g){var y=g.clientX,A=g.clientY;xn={clientX:y,clientY:A}}function On(g){g.addEventListener("mousemove",En)}function Ur(g){g.removeEventListener("mousemove",En)}var jn={name:"followCursor",defaultValue:!1,fn:function(y){var A=y.reference,I=v(y.props.triggerTarget||A),Y=!1,H=!1,k=!0,be=y.props;function le(){return y.props.followCursor==="initial"&&y.state.isVisible}function pe(){I.addEventListener("mousemove",je)}function ye(){I.removeEventListener("mousemove",je)}function _e(){Y=!0,y.setProps({getReferenceClientRect:null}),Y=!1}function je(re){var he=re.target?A.contains(re.target):!0,ve=y.props.followCursor,ee=re.clientX,ie=re.clientY,x=A.getBoundingClientRect(),Ge=ee-x.left,fe=ie-x.top;(he||!y.props.interactive)&&y.setProps({getReferenceClientRect:function(){var bt=A.getBoundingClientRect(),Gt=ee,Kt=ie;ve==="initial"&&(Gt=bt.left+Ge,Kt=bt.top+fe);var Jt=ve==="horizontal"?bt.top:Kt,rt=ve==="vertical"?bt.right:Gt,lt=ve==="horizontal"?bt.bottom:Kt,yt=ve==="vertical"?bt.left:Gt;return{width:rt-yt,height:lt-Jt,top:Jt,right:rt,bottom:lt,left:yt}}})}function Se(){y.props.followCursor&&(fn.push({instance:y,doc:I}),On(I))}function Ie(){fn=fn.filter(function(re){return re.instance!==y}),fn.filter(function(re){return re.doc===I}).length===0&&Ur(I)}return{onCreate:Se,onDestroy:Ie,onBeforeUpdate:function(){be=y.props},onAfterUpdate:function(he,ve){var ee=ve.followCursor;Y||ee!==void 0&&be.followCursor!==ee&&(Ie(),ee?(Se(),y.state.isMounted&&!H&&!le()&&pe()):(ye(),_e()))},onMount:function(){y.props.followCursor&&!H&&(k&&(je(xn),k=!1),le()||pe())},onTrigger:function(he,ve){U(ve)&&(xn={clientX:ve.clientX,clientY:ve.clientY}),H=ve.type==="focus"},onHidden:function(){y.props.followCursor&&(_e(),ye(),k=!0)}}}};function Yr(g,y){var A;return{popperOptions:Object.assign({},g.popperOptions,{modifiers:[].concat((((A=g.popperOptions)==null?void 0:A.modifiers)||[]).filter(function(I){var Y=I.name;return Y!==y.name}),[y])})}}var Bn={name:"inlinePositioning",defaultValue:!1,fn:function(y){var A=y.reference;function I(){return!!y.props.inlinePositioning}var Y,H=-1,k=!1,be={name:"tippyInlinePositioning",enabled:!0,phase:"afterWrite",fn:function(je){var Se=je.state;I()&&(Y!==Se.placement&&y.setProps({getReferenceClientRect:function(){return le(Se.placement)}}),Y=Se.placement)}};function le(_e){return Xr(K(_e),A.getBoundingClientRect(),X(A.getClientRects()),H)}function pe(_e){k=!0,y.setProps(_e),k=!1}function ye(){k||pe(Yr(y.props,be))}return{onCreate:ye,onAfterUpdate:ye,onTrigger:function(je,Se){if(U(Se)){var Ie=X(y.reference.getClientRects()),re=Ie.find(function(he){return he.left-2<=Se.clientX&&he.right+2>=Se.clientX&&he.top-2<=Se.clientY&&he.bottom+2>=Se.clientY});H=Ie.indexOf(re)}},onUntrigger:function(){H=-1}}}};function Xr(g,y,A,I){if(A.length<2||g===null)return y;if(A.length===2&&I>=0&&A[0].left>A[1].right)return A[I]||y;switch(g){case"top":case"bottom":{var Y=A[0],H=A[A.length-1],k=g==="top",be=Y.top,le=H.bottom,pe=k?Y.left:H.left,ye=k?Y.right:H.right,_e=ye-pe,je=le-be;return{top:be,bottom:le,left:pe,right:ye,width:_e,height:je}}case"left":case"right":{var Se=Math.min.apply(Math,A.map(function(fe){return fe.left})),Ie=Math.max.apply(Math,A.map(function(fe){return fe.right})),re=A.filter(function(fe){return g==="left"?fe.left===Se:fe.right===Ie}),he=re[0].top,ve=re[re.length-1].bottom,ee=Se,ie=Ie,x=ie-ee,Ge=ve-he;return{top:he,bottom:ve,left:ee,right:ie,width:x,height:Ge}}default:return y}}var qr={name:"sticky",defaultValue:!1,fn:function(y){var A=y.reference,I=y.popper;function Y(){return y.popperInstance?y.popperInstance.state.elements.reference:A}function H(pe){return y.props.sticky===!0||y.props.sticky===pe}var k=null,be=null;function le(){var pe=H("reference")?Y().getBoundingClientRect():null,ye=H("popper")?I.getBoundingClientRect():null;(pe&&Hn(k,pe)||ye&&Hn(be,ye))&&y.popperInstance&&y.popperInstance.update(),k=pe,be=ye,y.state.isMounted&&requestAnimationFrame(le)}return{onMount:function(){y.props.sticky&&le()}}}};function Hn(g,y){return g&&y?g.top!==y.top||g.right!==y.right||g.bottom!==y.bottom||g.left!==y.left:!0}dt.setDefaultProps({render:ar}),t.animateFill=dr,t.createSingleton=fr,t.default=dt,t.delegate=qt,t.followCursor=jn,t.hideAll=lr,t.inlinePositioning=Bn,t.roundArrow=r,t.sticky=qr}),Ei=Lo(No()),ds=Lo(No()),ps=t=>{let e={plugins:[]},r=i=>t[t.indexOf(i)+1];if(t.includes("animation")&&(e.animation=r("animation")),t.includes("duration")&&(e.duration=parseInt(r("duration"))),t.includes("delay")){let i=r("delay");e.delay=i.includes("-")?i.split("-").map(o=>parseInt(o)):parseInt(i)}if(t.includes("cursor")){e.plugins.push(ds.followCursor);let i=r("cursor");["x","initial"].includes(i)?e.followCursor=i==="x"?"horizontal":"initial":e.followCursor=!0}t.includes("on")&&(e.trigger=r("on")),t.includes("arrowless")&&(e.arrow=!1),t.includes("html")&&(e.allowHTML=!0),t.includes("interactive")&&(e.interactive=!0),t.includes("border")&&e.interactive&&(e.interactiveBorder=parseInt(r("border"))),t.includes("debounce")&&e.interactive&&(e.interactiveDebounce=parseInt(r("debounce"))),t.includes("max-width")&&(e.maxWidth=parseInt(r("max-width"))),t.includes("theme")&&(e.theme=r("theme")),t.includes("placement")&&(e.placement=r("placement"));let n={};return t.includes("no-flip")&&(n.modifiers||(n.modifiers=[]),n.modifiers.push({name:"flip",enabled:!1})),e.popperOptions=n,e};function Oi(t){t.magic("tooltip",e=>(r,n={})=>{let i=n.timeout;delete n.timeout;let o=(0,Ei.default)(e,{content:r,trigger:"manual",...n});o.show(),setTimeout(()=>{o.hide(),setTimeout(()=>o.destroy(),n.duration||300)},i||2e3)}),t.directive("tooltip",(e,{modifiers:r,expression:n},{evaluateLater:i,effect:o,cleanup:s})=>{let h=r.length>0?ps(r):{};e.__x_tippy||(e.__x_tippy=(0,Ei.default)(e,h)),s(()=>{e.__x_tippy&&(e.__x_tippy.destroy(),delete e.__x_tippy)});let u=()=>e.__x_tippy.enable(),f=()=>e.__x_tippy.disable(),w=m=>{m?(u(),e.__x_tippy.setContent(m)):f()};if(r.includes("raw"))w(n);else{let m=i(n);o(()=>{m(E=>{typeof E=="object"?(e.__x_tippy.setProps(E),u()):w(E)})})}})}Oi.defaultProps=t=>(Ei.default.setDefaultProps(t),Oi);var hs=Oi,ko=hs;document.addEventListener("alpine:init",()=>{window.Alpine.plugin(ro),window.Alpine.plugin(io),window.Alpine.plugin(Io),window.Alpine.plugin(ko)});var vs=function(t,e,r){function n(w,m){for(let E of w){let O=i(E,m);if(O!==null)return O}}function i(w,m){let E=w.match(/^[\{\[]([^\[\]\{\}]*)[\}\]](.*)/s);if(E===null||E.length!==3)return null;let O=E[1],S=E[2];if(O.includes(",")){let[P,R]=O.split(",",2);if(R==="*"&&m>=P)return S;if(P==="*"&&m<=R)return S;if(m>=P&&m<=R)return S}return O==m?S:null}function o(w){return w.toString().charAt(0).toUpperCase()+w.toString().slice(1)}function s(w,m){if(m.length===0)return w;let E={};for(let[O,S]of Object.entries(m))E[":"+o(O??"")]=o(S??""),E[":"+O.toUpperCase()]=S.toString().toUpperCase(),E[":"+O]=S;return Object.entries(E).forEach(([O,S])=>{w=w.replaceAll(O,S)}),w}function h(w){return w.map(m=>m.replace(/^[\{\[]([^\[\]\{\}]*)[\}\]]/,""))}let u=t.split("|"),f=n(u,e);return f!=null?s(f.trim(),r):(u=h(u),s(u.length>1&&e>1?u[1]:u[0],r))};window.jsMd5=jo.md5;window.pluralize=vs;})(); /*! Bundled license information: js-md5/src/md5.js: @@ -38,7 +38,7 @@ js-md5/src/md5.js: sortablejs/modular/sortable.esm.js: (**! - * Sortable 1.15.2 + * Sortable 1.15.3 * @author RubaXa * @author owenm * @license MIT diff --git a/public/js/filament/widgets/components/chart.js b/public/js/filament/widgets/components/chart.js index 5e13664..e7dd5bb 100644 --- a/public/js/filament/widgets/components/chart.js +++ b/public/js/filament/widgets/components/chart.js @@ -1,6 +1,6 @@ -function Ft(){}var Mo=function(){let s=0;return function(){return s++}}();function R(s){return s===null||typeof s>"u"}function $(s){if(Array.isArray&&Array.isArray(s))return!0;let t=Object.prototype.toString.call(s);return t.slice(0,7)==="[object"&&t.slice(-6)==="Array]"}function A(s){return s!==null&&Object.prototype.toString.call(s)==="[object Object]"}var K=s=>(typeof s=="number"||s instanceof Number)&&isFinite(+s);function mt(s,t){return K(s)?s:t}function I(s,t){return typeof s>"u"?t:s}var To=(s,t)=>typeof s=="string"&&s.endsWith("%")?parseFloat(s)/100:s/t,Tn=(s,t)=>typeof s=="string"&&s.endsWith("%")?parseFloat(s)/100*t:+s;function j(s,t,e){if(s&&typeof s.call=="function")return s.apply(e,t)}function H(s,t,e,i){let n,r,o;if($(s))if(r=s.length,i)for(n=r-1;n>=0;n--)t.call(e,s[n],n);else for(n=0;ns,x:s=>s.x,y:s=>s.y};function Bt(s,t){return(co[t]||(co[t]=Tc(t)))(s)}function Tc(s){let t=vc(s);return e=>{for(let i of t){if(i==="")break;e=e&&e[i]}return e}}function vc(s){let t=s.split("."),e=[],i="";for(let n of t)i+=n,i.endsWith("\\")?i=i.slice(0,-1)+".":(e.push(i),i="");return e}function Mi(s){return s.charAt(0).toUpperCase()+s.slice(1)}var ft=s=>typeof s<"u",Ht=s=>typeof s=="function",vn=(s,t)=>{if(s.size!==t.size)return!1;for(let e of s)if(!t.has(e))return!1;return!0};function Oo(s){return s.type==="mouseup"||s.type==="click"||s.type==="contextmenu"}var Y=Math.PI,B=2*Y,Oc=B+Y,wi=Number.POSITIVE_INFINITY,Dc=Y/180,Z=Y/2,gs=Y/4,ho=Y*2/3,gt=Math.log10,Tt=Math.sign;function On(s){let t=Math.round(s);s=Ne(s,t,s/1e3)?t:s;let e=Math.pow(10,Math.floor(gt(s))),i=s/e;return(i<=1?1:i<=2?2:i<=5?5:10)*e}function Do(s){let t=[],e=Math.sqrt(s),i;for(i=1;in-r).pop(),t}function pe(s){return!isNaN(parseFloat(s))&&isFinite(s)}function Ne(s,t,e){return Math.abs(s-t)=s}function Dn(s,t,e){let i,n,r;for(i=0,n=s.length;il&&c=Math.min(t,e)-i&&s<=Math.max(t,e)+i}function vi(s,t,e){e=e||(o=>s[o]1;)r=n+i>>1,e(r)?n=r:i=r;return{lo:n,hi:i}}var Ct=(s,t,e,i)=>vi(s,e,i?n=>s[n][t]<=e:n=>s[n][t]vi(s,e,i=>s[i][t]>=e);function Fo(s,t,e){let i=0,n=s.length;for(;ii&&s[n-1]>e;)n--;return i>0||n{let i="_onData"+Mi(e),n=s[e];Object.defineProperty(s,e,{configurable:!0,enumerable:!1,value(...r){let o=n.apply(this,r);return s._chartjs.listeners.forEach(a=>{typeof a[i]=="function"&&a[i](...r)}),o}})})}function Cn(s,t){let e=s._chartjs;if(!e)return;let i=e.listeners,n=i.indexOf(t);n!==-1&&i.splice(n,1),!(i.length>0)&&(Ao.forEach(r=>{delete s[r]}),delete s._chartjs)}function Fn(s){let t=new Set,e,i;for(e=0,i=s.length;e"u"?function(s){return s()}:window.requestAnimationFrame}();function Ln(s,t,e){let i=e||(o=>Array.prototype.slice.call(o)),n=!1,r=[];return function(...o){r=i(o),n||(n=!0,An.call(window,()=>{n=!1,s.apply(t,r)}))}}function Po(s,t){let e;return function(...i){return t?(clearTimeout(e),e=setTimeout(s,t,i)):s.apply(this,i),t}}var Oi=s=>s==="start"?"left":s==="end"?"right":"center",ot=(s,t,e)=>s==="start"?t:s==="end"?e:(t+e)/2,No=(s,t,e,i)=>s===(i?"left":"right")?e:s==="center"?(t+e)/2:t;function Pn(s,t,e){let i=t.length,n=0,r=i;if(s._sorted){let{iScale:o,_parsed:a}=s,l=o.axis,{min:c,max:h,minDefined:u,maxDefined:d}=o.getUserBounds();u&&(n=it(Math.min(Ct(a,o.axis,c).lo,e?i:Ct(t,l,o.getPixelForValue(c)).lo),0,i-1)),d?r=it(Math.max(Ct(a,o.axis,h,!0).hi+1,e?0:Ct(t,l,o.getPixelForValue(h),!0).hi+1),n,i)-n:r=i-n}return{start:n,count:r}}function Nn(s){let{xScale:t,yScale:e,_scaleRanges:i}=s,n={xmin:t.min,xmax:t.max,ymin:e.min,ymax:e.max};if(!i)return s._scaleRanges=n,!0;let r=i.xmin!==t.min||i.xmax!==t.max||i.ymin!==e.min||i.ymax!==e.max;return Object.assign(i,n),r}var gi=s=>s===0||s===1,uo=(s,t,e)=>-(Math.pow(2,10*(s-=1))*Math.sin((s-t)*B/e)),fo=(s,t,e)=>Math.pow(2,-10*s)*Math.sin((s-t)*B/e)+1,Ie={linear:s=>s,easeInQuad:s=>s*s,easeOutQuad:s=>-s*(s-2),easeInOutQuad:s=>(s/=.5)<1?.5*s*s:-.5*(--s*(s-2)-1),easeInCubic:s=>s*s*s,easeOutCubic:s=>(s-=1)*s*s+1,easeInOutCubic:s=>(s/=.5)<1?.5*s*s*s:.5*((s-=2)*s*s+2),easeInQuart:s=>s*s*s*s,easeOutQuart:s=>-((s-=1)*s*s*s-1),easeInOutQuart:s=>(s/=.5)<1?.5*s*s*s*s:-.5*((s-=2)*s*s*s-2),easeInQuint:s=>s*s*s*s*s,easeOutQuint:s=>(s-=1)*s*s*s*s+1,easeInOutQuint:s=>(s/=.5)<1?.5*s*s*s*s*s:.5*((s-=2)*s*s*s*s+2),easeInSine:s=>-Math.cos(s*Z)+1,easeOutSine:s=>Math.sin(s*Z),easeInOutSine:s=>-.5*(Math.cos(Y*s)-1),easeInExpo:s=>s===0?0:Math.pow(2,10*(s-1)),easeOutExpo:s=>s===1?1:-Math.pow(2,-10*s)+1,easeInOutExpo:s=>gi(s)?s:s<.5?.5*Math.pow(2,10*(s*2-1)):.5*(-Math.pow(2,-10*(s*2-1))+2),easeInCirc:s=>s>=1?s:-(Math.sqrt(1-s*s)-1),easeOutCirc:s=>Math.sqrt(1-(s-=1)*s),easeInOutCirc:s=>(s/=.5)<1?-.5*(Math.sqrt(1-s*s)-1):.5*(Math.sqrt(1-(s-=2)*s)+1),easeInElastic:s=>gi(s)?s:uo(s,.075,.3),easeOutElastic:s=>gi(s)?s:fo(s,.075,.3),easeInOutElastic(s){return gi(s)?s:s<.5?.5*uo(s*2,.1125,.45):.5+.5*fo(s*2-1,.1125,.45)},easeInBack(s){return s*s*((1.70158+1)*s-1.70158)},easeOutBack(s){return(s-=1)*s*((1.70158+1)*s+1.70158)+1},easeInOutBack(s){let t=1.70158;return(s/=.5)<1?.5*(s*s*(((t*=1.525)+1)*s-t)):.5*((s-=2)*s*(((t*=1.525)+1)*s+t)+2)},easeInBounce:s=>1-Ie.easeOutBounce(1-s),easeOutBounce(s){return s<1/2.75?7.5625*s*s:s<2/2.75?7.5625*(s-=1.5/2.75)*s+.75:s<2.5/2.75?7.5625*(s-=2.25/2.75)*s+.9375:7.5625*(s-=2.625/2.75)*s+.984375},easeInOutBounce:s=>s<.5?Ie.easeInBounce(s*2)*.5:Ie.easeOutBounce(s*2-1)*.5+.5};function _s(s){return s+.5|0}var Kt=(s,t,e)=>Math.max(Math.min(s,e),t);function ps(s){return Kt(_s(s*2.55),0,255)}function Jt(s){return Kt(_s(s*255),0,255)}function Vt(s){return Kt(_s(s/2.55)/100,0,1)}function mo(s){return Kt(_s(s*100),0,100)}var _t={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},kn=[..."0123456789ABCDEF"],Ic=s=>kn[s&15],Cc=s=>kn[(s&240)>>4]+kn[s&15],pi=s=>(s&240)>>4===(s&15),Fc=s=>pi(s.r)&&pi(s.g)&&pi(s.b)&&pi(s.a);function Ac(s){var t=s.length,e;return s[0]==="#"&&(t===4||t===5?e={r:255&_t[s[1]]*17,g:255&_t[s[2]]*17,b:255&_t[s[3]]*17,a:t===5?_t[s[4]]*17:255}:(t===7||t===9)&&(e={r:_t[s[1]]<<4|_t[s[2]],g:_t[s[3]]<<4|_t[s[4]],b:_t[s[5]]<<4|_t[s[6]],a:t===9?_t[s[7]]<<4|_t[s[8]]:255})),e}var Lc=(s,t)=>s<255?t(s):"";function Pc(s){var t=Fc(s)?Ic:Cc;return s?"#"+t(s.r)+t(s.g)+t(s.b)+Lc(s.a,t):void 0}var Nc=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function Ro(s,t,e){let i=t*Math.min(e,1-e),n=(r,o=(r+s/30)%12)=>e-i*Math.max(Math.min(o-3,9-o,1),-1);return[n(0),n(8),n(4)]}function Rc(s,t,e){let i=(n,r=(n+s/60)%6)=>e-e*t*Math.max(Math.min(r,4-r,1),0);return[i(5),i(3),i(1)]}function Wc(s,t,e){let i=Ro(s,1,.5),n;for(t+e>1&&(n=1/(t+e),t*=n,e*=n),n=0;n<3;n++)i[n]*=1-t-e,i[n]+=t;return i}function zc(s,t,e,i,n){return s===n?(t-e)/i+(t.5?h/(2-r-o):h/(r+o),l=zc(e,i,n,h,r),l=l*60+.5),[l|0,c||0,a]}function Wn(s,t,e,i){return(Array.isArray(t)?s(t[0],t[1],t[2]):s(t,e,i)).map(Jt)}function zn(s,t,e){return Wn(Ro,s,t,e)}function Vc(s,t,e){return Wn(Wc,s,t,e)}function Hc(s,t,e){return Wn(Rc,s,t,e)}function Wo(s){return(s%360+360)%360}function Bc(s){let t=Nc.exec(s),e=255,i;if(!t)return;t[5]!==i&&(e=t[6]?ps(+t[5]):Jt(+t[5]));let n=Wo(+t[2]),r=+t[3]/100,o=+t[4]/100;return t[1]==="hwb"?i=Vc(n,r,o):t[1]==="hsv"?i=Hc(n,r,o):i=zn(n,r,o),{r:i[0],g:i[1],b:i[2],a:e}}function $c(s,t){var e=Rn(s);e[0]=Wo(e[0]+t),e=zn(e),s.r=e[0],s.g=e[1],s.b=e[2]}function jc(s){if(!s)return;let t=Rn(s),e=t[0],i=mo(t[1]),n=mo(t[2]);return s.a<255?`hsla(${e}, ${i}%, ${n}%, ${Vt(s.a)})`:`hsl(${e}, ${i}%, ${n}%)`}var go={x:"dark",Z:"light",Y:"re",X:"blu",W:"gr",V:"medium",U:"slate",A:"ee",T:"ol",S:"or",B:"ra",C:"lateg",D:"ights",R:"in",Q:"turquois",E:"hi",P:"ro",O:"al",N:"le",M:"de",L:"yello",F:"en",K:"ch",G:"arks",H:"ea",I:"ightg",J:"wh"},po={OiceXe:"f0f8ff",antiquewEte:"faebd7",aqua:"ffff",aquamarRe:"7fffd4",azuY:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"0",blanKedOmond:"ffebcd",Xe:"ff",XeviTet:"8a2be2",bPwn:"a52a2a",burlywood:"deb887",caMtXe:"5f9ea0",KartYuse:"7fff00",KocTate:"d2691e",cSO:"ff7f50",cSnflowerXe:"6495ed",cSnsilk:"fff8dc",crimson:"dc143c",cyan:"ffff",xXe:"8b",xcyan:"8b8b",xgTMnPd:"b8860b",xWay:"a9a9a9",xgYF:"6400",xgYy:"a9a9a9",xkhaki:"bdb76b",xmagFta:"8b008b",xTivegYF:"556b2f",xSange:"ff8c00",xScEd:"9932cc",xYd:"8b0000",xsOmon:"e9967a",xsHgYF:"8fbc8f",xUXe:"483d8b",xUWay:"2f4f4f",xUgYy:"2f4f4f",xQe:"ced1",xviTet:"9400d3",dAppRk:"ff1493",dApskyXe:"bfff",dimWay:"696969",dimgYy:"696969",dodgerXe:"1e90ff",fiYbrick:"b22222",flSOwEte:"fffaf0",foYstWAn:"228b22",fuKsia:"ff00ff",gaRsbSo:"dcdcdc",ghostwEte:"f8f8ff",gTd:"ffd700",gTMnPd:"daa520",Way:"808080",gYF:"8000",gYFLw:"adff2f",gYy:"808080",honeyMw:"f0fff0",hotpRk:"ff69b4",RdianYd:"cd5c5c",Rdigo:"4b0082",ivSy:"fffff0",khaki:"f0e68c",lavFMr:"e6e6fa",lavFMrXsh:"fff0f5",lawngYF:"7cfc00",NmoncEffon:"fffacd",ZXe:"add8e6",ZcSO:"f08080",Zcyan:"e0ffff",ZgTMnPdLw:"fafad2",ZWay:"d3d3d3",ZgYF:"90ee90",ZgYy:"d3d3d3",ZpRk:"ffb6c1",ZsOmon:"ffa07a",ZsHgYF:"20b2aa",ZskyXe:"87cefa",ZUWay:"778899",ZUgYy:"778899",ZstAlXe:"b0c4de",ZLw:"ffffe0",lime:"ff00",limegYF:"32cd32",lRF:"faf0e6",magFta:"ff00ff",maPon:"800000",VaquamarRe:"66cdaa",VXe:"cd",VScEd:"ba55d3",VpurpN:"9370db",VsHgYF:"3cb371",VUXe:"7b68ee",VsprRggYF:"fa9a",VQe:"48d1cc",VviTetYd:"c71585",midnightXe:"191970",mRtcYam:"f5fffa",mistyPse:"ffe4e1",moccasR:"ffe4b5",navajowEte:"ffdead",navy:"80",Tdlace:"fdf5e6",Tive:"808000",TivedBb:"6b8e23",Sange:"ffa500",SangeYd:"ff4500",ScEd:"da70d6",pOegTMnPd:"eee8aa",pOegYF:"98fb98",pOeQe:"afeeee",pOeviTetYd:"db7093",papayawEp:"ffefd5",pHKpuff:"ffdab9",peru:"cd853f",pRk:"ffc0cb",plum:"dda0dd",powMrXe:"b0e0e6",purpN:"800080",YbeccapurpN:"663399",Yd:"ff0000",Psybrown:"bc8f8f",PyOXe:"4169e1",saddNbPwn:"8b4513",sOmon:"fa8072",sandybPwn:"f4a460",sHgYF:"2e8b57",sHshell:"fff5ee",siFna:"a0522d",silver:"c0c0c0",skyXe:"87ceeb",UXe:"6a5acd",UWay:"708090",UgYy:"708090",snow:"fffafa",sprRggYF:"ff7f",stAlXe:"4682b4",tan:"d2b48c",teO:"8080",tEstN:"d8bfd8",tomato:"ff6347",Qe:"40e0d0",viTet:"ee82ee",JHt:"f5deb3",wEte:"ffffff",wEtesmoke:"f5f5f5",Lw:"ffff00",LwgYF:"9acd32"};function Uc(){let s={},t=Object.keys(po),e=Object.keys(go),i,n,r,o,a;for(i=0;i>16&255,r>>8&255,r&255]}return s}var yi;function Yc(s){yi||(yi=Uc(),yi.transparent=[0,0,0,0]);let t=yi[s.toLowerCase()];return t&&{r:t[0],g:t[1],b:t[2],a:t.length===4?t[3]:255}}var Zc=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;function qc(s){let t=Zc.exec(s),e=255,i,n,r;if(t){if(t[7]!==i){let o=+t[7];e=t[8]?ps(o):Kt(o*255,0,255)}return i=+t[1],n=+t[3],r=+t[5],i=255&(t[2]?ps(i):Kt(i,0,255)),n=255&(t[4]?ps(n):Kt(n,0,255)),r=255&(t[6]?ps(r):Kt(r,0,255)),{r:i,g:n,b:r,a:e}}}function Gc(s){return s&&(s.a<255?`rgba(${s.r}, ${s.g}, ${s.b}, ${Vt(s.a)})`:`rgb(${s.r}, ${s.g}, ${s.b})`)}var xn=s=>s<=.0031308?s*12.92:Math.pow(s,1/2.4)*1.055-.055,Ee=s=>s<=.04045?s/12.92:Math.pow((s+.055)/1.055,2.4);function Xc(s,t,e){let i=Ee(Vt(s.r)),n=Ee(Vt(s.g)),r=Ee(Vt(s.b));return{r:Jt(xn(i+e*(Ee(Vt(t.r))-i))),g:Jt(xn(n+e*(Ee(Vt(t.g))-n))),b:Jt(xn(r+e*(Ee(Vt(t.b))-r))),a:s.a+e*(t.a-s.a)}}function bi(s,t,e){if(s){let i=Rn(s);i[t]=Math.max(0,Math.min(i[t]+i[t]*e,t===0?360:1)),i=zn(i),s.r=i[0],s.g=i[1],s.b=i[2]}}function zo(s,t){return s&&Object.assign(t||{},s)}function yo(s){var t={r:0,g:0,b:0,a:255};return Array.isArray(s)?s.length>=3&&(t={r:s[0],g:s[1],b:s[2],a:255},s.length>3&&(t.a=Jt(s[3]))):(t=zo(s,{r:0,g:0,b:0,a:1}),t.a=Jt(t.a)),t}function Kc(s){return s.charAt(0)==="r"?qc(s):Bc(s)}var Fe=class{constructor(t){if(t instanceof Fe)return t;let e=typeof t,i;e==="object"?i=yo(t):e==="string"&&(i=Ac(t)||Yc(t)||Kc(t)),this._rgb=i,this._valid=!!i}get valid(){return this._valid}get rgb(){var t=zo(this._rgb);return t&&(t.a=Vt(t.a)),t}set rgb(t){this._rgb=yo(t)}rgbString(){return this._valid?Gc(this._rgb):void 0}hexString(){return this._valid?Pc(this._rgb):void 0}hslString(){return this._valid?jc(this._rgb):void 0}mix(t,e){if(t){let i=this.rgb,n=t.rgb,r,o=e===r?.5:e,a=2*o-1,l=i.a-n.a,c=((a*l===-1?a:(a+l)/(1+a*l))+1)/2;r=1-c,i.r=255&c*i.r+r*n.r+.5,i.g=255&c*i.g+r*n.g+.5,i.b=255&c*i.b+r*n.b+.5,i.a=o*i.a+(1-o)*n.a,this.rgb=i}return this}interpolate(t,e){return t&&(this._rgb=Xc(this._rgb,t._rgb,e)),this}clone(){return new Fe(this.rgb)}alpha(t){return this._rgb.a=Jt(t),this}clearer(t){let e=this._rgb;return e.a*=1-t,this}greyscale(){let t=this._rgb,e=_s(t.r*.3+t.g*.59+t.b*.11);return t.r=t.g=t.b=e,this}opaquer(t){let e=this._rgb;return e.a*=1+t,this}negate(){let t=this._rgb;return t.r=255-t.r,t.g=255-t.g,t.b=255-t.b,this}lighten(t){return bi(this._rgb,2,t),this}darken(t){return bi(this._rgb,2,-t),this}saturate(t){return bi(this._rgb,1,t),this}desaturate(t){return bi(this._rgb,1,-t),this}rotate(t){return $c(this._rgb,t),this}};function Vo(s){return new Fe(s)}function Ho(s){if(s&&typeof s=="object"){let t=s.toString();return t==="[object CanvasPattern]"||t==="[object CanvasGradient]"}return!1}function Vn(s){return Ho(s)?s:Vo(s)}function _n(s){return Ho(s)?s:Vo(s).saturate(.5).darken(.1).hexString()}var Qt=Object.create(null),Di=Object.create(null);function ys(s,t){if(!t)return s;let e=t.split(".");for(let i=0,n=e.length;ie.chart.platform.getDevicePixelRatio(),this.elements={},this.events=["mousemove","mouseout","click","touchstart","touchmove"],this.font={family:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",size:12,style:"normal",lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(e,i)=>_n(i.backgroundColor),this.hoverBorderColor=(e,i)=>_n(i.borderColor),this.hoverColor=(e,i)=>_n(i.color),this.indexAxis="x",this.interaction={mode:"nearest",intersect:!0,includeInvisible:!1},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(t)}set(t,e){return wn(this,t,e)}get(t){return ys(this,t)}describe(t,e){return wn(Di,t,e)}override(t,e){return wn(Qt,t,e)}route(t,e,i,n){let r=ys(this,t),o=ys(this,i),a="_"+e;Object.defineProperties(r,{[a]:{value:r[e],writable:!0},[e]:{enumerable:!0,get(){let l=this[a],c=o[n];return A(l)?Object.assign({},c,l):I(l,c)},set(l){this[a]=l}}})}},L=new Mn({_scriptable:s=>!s.startsWith("on"),_indexable:s=>s!=="events",hover:{_fallback:"interaction"},interaction:{_scriptable:!1,_indexable:!1}});function Jc(s){return!s||R(s.size)||R(s.family)?null:(s.style?s.style+" ":"")+(s.weight?s.weight+" ":"")+s.size+"px "+s.family}function bs(s,t,e,i,n){let r=t[n];return r||(r=t[n]=s.measureText(n).width,e.push(n)),r>i&&(i=r),i}function Bo(s,t,e,i){i=i||{};let n=i.data=i.data||{},r=i.garbageCollect=i.garbageCollect||[];i.font!==t&&(n=i.data={},r=i.garbageCollect=[],i.font=t),s.save(),s.font=t;let o=0,a=e.length,l,c,h,u,d;for(l=0;le.length){for(l=0;l0&&s.stroke()}}function Ae(s,t,e){return e=e||.5,!t||s&&s.x>t.left-e&&s.xt.top-e&&s.y0&&r.strokeColor!=="",l,c;for(s.save(),s.font=n.string,Qc(s,r),l=0;l+s||0;function Ii(s,t){let e={},i=A(t),n=i?Object.keys(t):t,r=A(s)?i?o=>I(s[o],s[t[o]]):o=>s[o]:()=>s;for(let o of n)e[o]=nh(r(o));return e}function $n(s){return Ii(s,{top:"y",right:"x",bottom:"y",left:"x"})}function se(s){return Ii(s,["topLeft","topRight","bottomLeft","bottomRight"])}function at(s){let t=$n(s);return t.width=t.left+t.right,t.height=t.top+t.bottom,t}function et(s,t){s=s||{},t=t||L.font;let e=I(s.size,t.size);typeof e=="string"&&(e=parseInt(e,10));let i=I(s.style,t.style);i&&!(""+i).match(sh)&&(console.warn('Invalid font style specified: "'+i+'"'),i="");let n={family:I(s.family,t.family),lineHeight:ih(I(s.lineHeight,t.lineHeight),e),size:e,style:i,weight:I(s.weight,t.weight),string:""};return n.string=Jc(n),n}function ze(s,t,e,i){let n=!0,r,o,a;for(r=0,o=s.length;re&&a===0?0:a+l;return{min:o(i,-Math.abs(r)),max:o(n,r)}}function $t(s,t){return Object.assign(Object.create(s),t)}function Ci(s,t=[""],e=s,i,n=()=>s[0]){ft(i)||(i=qo("_fallback",s));let r={[Symbol.toStringTag]:"Object",_cacheable:!0,_scopes:s,_rootScopes:e,_fallback:i,_getTarget:n,override:o=>Ci([o,...s],t,e,i)};return new Proxy(r,{deleteProperty(o,a){return delete o[a],delete o._keys,delete s[0][a],!0},get(o,a){return Yo(o,a,()=>dh(a,t,s,o))},getOwnPropertyDescriptor(o,a){return Reflect.getOwnPropertyDescriptor(o._scopes[0],a)},getPrototypeOf(){return Reflect.getPrototypeOf(s[0])},has(o,a){return xo(o).includes(a)},ownKeys(o){return xo(o)},set(o,a,l){let c=o._storage||(o._storage=n());return o[a]=c[a]=l,delete o._keys,!0}})}function ge(s,t,e,i){let n={_cacheable:!1,_proxy:s,_context:t,_subProxy:e,_stack:new Set,_descriptors:jn(s,i),setContext:r=>ge(s,r,e,i),override:r=>ge(s.override(r),t,e,i)};return new Proxy(n,{deleteProperty(r,o){return delete r[o],delete s[o],!0},get(r,o,a){return Yo(r,o,()=>oh(r,o,a))},getOwnPropertyDescriptor(r,o){return r._descriptors.allKeys?Reflect.has(s,o)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(s,o)},getPrototypeOf(){return Reflect.getPrototypeOf(s)},has(r,o){return Reflect.has(s,o)},ownKeys(){return Reflect.ownKeys(s)},set(r,o,a){return s[o]=a,delete r[o],!0}})}function jn(s,t={scriptable:!0,indexable:!0}){let{_scriptable:e=t.scriptable,_indexable:i=t.indexable,_allKeys:n=t.allKeys}=s;return{allKeys:n,scriptable:e,indexable:i,isScriptable:Ht(e)?e:()=>e,isIndexable:Ht(i)?i:()=>i}}var rh=(s,t)=>s?s+Mi(t):t,Un=(s,t)=>A(t)&&s!=="adapters"&&(Object.getPrototypeOf(t)===null||t.constructor===Object);function Yo(s,t,e){if(Object.prototype.hasOwnProperty.call(s,t))return s[t];let i=e();return s[t]=i,i}function oh(s,t,e){let{_proxy:i,_context:n,_subProxy:r,_descriptors:o}=s,a=i[t];return Ht(a)&&o.isScriptable(t)&&(a=ah(t,a,s,e)),$(a)&&a.length&&(a=lh(t,a,s,o.isIndexable)),Un(t,a)&&(a=ge(a,n,r&&r[t],o)),a}function ah(s,t,e,i){let{_proxy:n,_context:r,_subProxy:o,_stack:a}=e;if(a.has(s))throw new Error("Recursion detected: "+Array.from(a).join("->")+"->"+s);return a.add(s),t=t(r,o||i),a.delete(s),Un(s,t)&&(t=Yn(n._scopes,n,s,t)),t}function lh(s,t,e,i){let{_proxy:n,_context:r,_subProxy:o,_descriptors:a}=e;if(ft(r.index)&&i(s))t=t[r.index%t.length];else if(A(t[0])){let l=t,c=n._scopes.filter(h=>h!==l);t=[];for(let h of l){let u=Yn(c,n,s,h);t.push(ge(u,r,o&&o[s],a))}}return t}function Zo(s,t,e){return Ht(s)?s(t,e):s}var ch=(s,t)=>s===!0?t:typeof s=="string"?Bt(t,s):void 0;function hh(s,t,e,i,n){for(let r of t){let o=ch(e,r);if(o){s.add(o);let a=Zo(o._fallback,e,n);if(ft(a)&&a!==e&&a!==i)return a}else if(o===!1&&ft(i)&&e!==i)return null}return!1}function Yn(s,t,e,i){let n=t._rootScopes,r=Zo(t._fallback,e,i),o=[...s,...n],a=new Set;a.add(i);let l=bo(a,o,e,r||e,i);return l===null||ft(r)&&r!==e&&(l=bo(a,o,r,l,i),l===null)?!1:Ci(Array.from(a),[""],n,r,()=>uh(t,e,i))}function bo(s,t,e,i,n){for(;e;)e=hh(s,t,e,i,n);return e}function uh(s,t,e){let i=s._getTarget();t in i||(i[t]={});let n=i[t];return $(n)&&A(e)?e:n}function dh(s,t,e,i){let n;for(let r of t)if(n=qo(rh(r,s),e),ft(n))return Un(s,n)?Yn(e,i,s,n):n}function qo(s,t){for(let e of t){if(!e)continue;let i=e[s];if(ft(i))return i}}function xo(s){let t=s._keys;return t||(t=s._keys=fh(s._scopes)),t}function fh(s){let t=new Set;for(let e of s)for(let i of Object.keys(e).filter(n=>!n.startsWith("_")))t.add(i);return Array.from(t)}function Zn(s,t,e,i){let{iScale:n}=s,{key:r="r"}=this._parsing,o=new Array(i),a,l,c,h;for(a=0,l=i;ats==="x"?"y":"x";function gh(s,t,e,i){let n=s.skip?t:s,r=t,o=e.skip?t:e,a=Si(r,n),l=Si(o,r),c=a/(a+l),h=l/(a+l);c=isNaN(c)?0:c,h=isNaN(h)?0:h;let u=i*c,d=i*h;return{previous:{x:r.x-u*(o.x-n.x),y:r.y-u*(o.y-n.y)},next:{x:r.x+d*(o.x-n.x),y:r.y+d*(o.y-n.y)}}}function ph(s,t,e){let i=s.length,n,r,o,a,l,c=Le(s,0);for(let h=0;h!c.skip)),t.cubicInterpolationMode==="monotone")bh(s,n);else{let c=i?s[s.length-1]:s[0];for(r=0,o=s.length;rwindow.getComputedStyle(s,null);function _h(s,t){return Ai(s).getPropertyValue(t)}var wh=["top","right","bottom","left"];function me(s,t,e){let i={};e=e?"-"+e:"";for(let n=0;n<4;n++){let r=wh[n];i[r]=parseFloat(s[t+"-"+r+e])||0}return i.width=i.left+i.right,i.height=i.top+i.bottom,i}var Sh=(s,t,e)=>(s>0||t>0)&&(!e||!e.shadowRoot);function kh(s,t){let e=s.touches,i=e&&e.length?e[0]:s,{offsetX:n,offsetY:r}=i,o=!1,a,l;if(Sh(n,r,s.target))a=n,l=r;else{let c=t.getBoundingClientRect();a=i.clientX-c.left,l=i.clientY-c.top,o=!0}return{x:a,y:l,box:o}}function ie(s,t){if("native"in s)return s;let{canvas:e,currentDevicePixelRatio:i}=t,n=Ai(e),r=n.boxSizing==="border-box",o=me(n,"padding"),a=me(n,"border","width"),{x:l,y:c,box:h}=kh(s,e),u=o.left+(h&&a.left),d=o.top+(h&&a.top),{width:f,height:m}=t;return r&&(f-=o.width+a.width,m-=o.height+a.height),{x:Math.round((l-u)/f*e.width/i),y:Math.round((c-d)/m*e.height/i)}}function Mh(s,t,e){let i,n;if(t===void 0||e===void 0){let r=Fi(s);if(!r)t=s.clientWidth,e=s.clientHeight;else{let o=r.getBoundingClientRect(),a=Ai(r),l=me(a,"border","width"),c=me(a,"padding");t=o.width-c.width-l.width,e=o.height-c.height-l.height,i=ki(a.maxWidth,r,"clientWidth"),n=ki(a.maxHeight,r,"clientHeight")}}return{width:t,height:e,maxWidth:i||wi,maxHeight:n||wi}}var Sn=s=>Math.round(s*10)/10;function Ko(s,t,e,i){let n=Ai(s),r=me(n,"margin"),o=ki(n.maxWidth,s,"clientWidth")||wi,a=ki(n.maxHeight,s,"clientHeight")||wi,l=Mh(s,t,e),{width:c,height:h}=l;if(n.boxSizing==="content-box"){let u=me(n,"border","width"),d=me(n,"padding");c-=d.width+u.width,h-=d.height+u.height}return c=Math.max(0,c-r.width),h=Math.max(0,i?Math.floor(c/i):h-r.height),c=Sn(Math.min(c,o,l.maxWidth)),h=Sn(Math.min(h,a,l.maxHeight)),c&&!h&&(h=Sn(c/2)),{width:c,height:h}}function Gn(s,t,e){let i=t||1,n=Math.floor(s.height*i),r=Math.floor(s.width*i);s.height=n/i,s.width=r/i;let o=s.canvas;return o.style&&(e||!o.style.height&&!o.style.width)&&(o.style.height=`${s.height}px`,o.style.width=`${s.width}px`),s.currentDevicePixelRatio!==i||o.height!==n||o.width!==r?(s.currentDevicePixelRatio=i,o.height=n,o.width=r,s.ctx.setTransform(i,0,0,i,0,0),!0):!1}var Jo=function(){let s=!1;try{let t={get passive(){return s=!0,!1}};window.addEventListener("test",null,t),window.removeEventListener("test",null,t)}catch{}return s}();function Xn(s,t){let e=_h(s,t),i=e&&e.match(/^(\d+)(\.\d+)?px$/);return i?+i[1]:void 0}function Xt(s,t,e,i){return{x:s.x+e*(t.x-s.x),y:s.y+e*(t.y-s.y)}}function Qo(s,t,e,i){return{x:s.x+e*(t.x-s.x),y:i==="middle"?e<.5?s.y:t.y:i==="after"?e<1?s.y:t.y:e>0?t.y:s.y}}function ta(s,t,e,i){let n={x:s.cp2x,y:s.cp2y},r={x:t.cp1x,y:t.cp1y},o=Xt(s,n,e),a=Xt(n,r,e),l=Xt(r,t,e),c=Xt(o,a,e),h=Xt(a,l,e);return Xt(c,h,e)}var _o=new Map;function Th(s,t){t=t||{};let e=s+JSON.stringify(t),i=_o.get(e);return i||(i=new Intl.NumberFormat(s,t),_o.set(e,i)),i}function Ve(s,t,e){return Th(t,e).format(s)}var vh=function(s,t){return{x(e){return s+s+t-e},setWidth(e){t=e},textAlign(e){return e==="center"?e:e==="right"?"left":"right"},xPlus(e,i){return e-i},leftForLtr(e,i){return e-i}}},Oh=function(){return{x(s){return s},setWidth(s){},textAlign(s){return s},xPlus(s,t){return s+t},leftForLtr(s,t){return s}}};function ye(s,t,e){return s?vh(t,e):Oh()}function Kn(s,t){let e,i;(t==="ltr"||t==="rtl")&&(e=s.canvas.style,i=[e.getPropertyValue("direction"),e.getPropertyPriority("direction")],e.setProperty("direction",t,"important"),s.prevTextDirection=i)}function Jn(s,t){t!==void 0&&(delete s.prevTextDirection,s.canvas.style.setProperty("direction",t[0],t[1]))}function ea(s){return s==="angle"?{between:Re,compare:Ec,normalize:ht}:{between:At,compare:(t,e)=>t-e,normalize:t=>t}}function wo({start:s,end:t,count:e,loop:i,style:n}){return{start:s%e,end:t%e,loop:i&&(t-s+1)%e===0,style:n}}function Dh(s,t,e){let{property:i,start:n,end:r}=e,{between:o,normalize:a}=ea(i),l=t.length,{start:c,end:h,loop:u}=s,d,f;if(u){for(c+=l,h+=l,d=0,f=l;dl(n,_,y)&&a(n,_)!==0,x=()=>a(r,y)===0||l(r,_,y),S=()=>g||w(),k=()=>!g||x();for(let O=h,T=h;O<=u;++O)b=t[O%o],!b.skip&&(y=c(b[i]),y!==_&&(g=l(y,n,r),p===null&&S()&&(p=a(y,n)===0?O:T),p!==null&&k()&&(m.push(wo({start:p,end:O,loop:d,count:o,style:f})),p=null),T=O,_=y));return p!==null&&m.push(wo({start:p,end:u,loop:d,count:o,style:f})),m}function tr(s,t){let e=[],i=s.segments;for(let n=0;nn&&s[r%t].skip;)r--;return r%=t,{start:n,end:r}}function Ih(s,t,e,i){let n=s.length,r=[],o=t,a=s[t],l;for(l=t+1;l<=e;++l){let c=s[l%n];c.skip||c.stop?a.skip||(i=!1,r.push({start:t%n,end:(l-1)%n,loop:i}),t=o=c.stop?l:null):(o=l,a.skip&&(t=l)),a=c}return o!==null&&r.push({start:t%n,end:o%n,loop:i}),r}function sa(s,t){let e=s.points,i=s.options.spanGaps,n=e.length;if(!n)return[];let r=!!s._loop,{start:o,end:a}=Eh(e,n,r,i);if(i===!0)return So(s,[{start:o,end:a,loop:r}],e,t);let l=aa({chart:t,initial:e.initial,numSteps:o,currentStep:Math.min(i-e.start,o)}))}_refresh(){this._request||(this._running=!0,this._request=An.call(window,()=>{this._update(),this._request=null,this._running&&this._refresh()}))}_update(t=Date.now()){let e=0;this._charts.forEach((i,n)=>{if(!i.running||!i.items.length)return;let r=i.items,o=r.length-1,a=!1,l;for(;o>=0;--o)l=r[o],l._active?(l._total>i.duration&&(i.duration=l._total),l.tick(t),a=!0):(r[o]=r[r.length-1],r.pop());a&&(n.draw(),this._notify(n,i,t,"progress")),r.length||(i.running=!1,this._notify(n,i,t,"complete"),i.initial=!1),e+=r.length}),this._lastDate=t,e===0&&(this._running=!1)}_getAnims(t){let e=this._charts,i=e.get(t);return i||(i={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},e.set(t,i)),i}listen(t,e,i){this._getAnims(t).listeners[e].push(i)}add(t,e){!e||!e.length||this._getAnims(t).items.push(...e)}has(t){return this._getAnims(t).items.length>0}start(t){let e=this._charts.get(t);e&&(e.running=!0,e.start=Date.now(),e.duration=e.items.reduce((i,n)=>Math.max(i,n._duration),0),this._refresh())}running(t){if(!this._running)return!1;let e=this._charts.get(t);return!(!e||!e.running||!e.items.length)}stop(t){let e=this._charts.get(t);if(!e||!e.items.length)return;let i=e.items,n=i.length-1;for(;n>=0;--n)i[n].cancel();e.items=[],this._notify(t,e,Date.now(),"complete")}remove(t){return this._charts.delete(t)}},jt=new hr,ia="transparent",Ah={boolean(s,t,e){return e>.5?t:s},color(s,t,e){let i=Vn(s||ia),n=i.valid&&Vn(t||ia);return n&&n.valid?n.mix(i,e).hexString():t},number(s,t,e){return s+(t-s)*e}},ur=class{constructor(t,e,i,n){let r=e[i];n=ze([t.to,n,r,t.from]);let o=ze([t.from,r,n]);this._active=!0,this._fn=t.fn||Ah[t.type||typeof o],this._easing=Ie[t.easing]||Ie.linear,this._start=Math.floor(Date.now()+(t.delay||0)),this._duration=this._total=Math.floor(t.duration),this._loop=!!t.loop,this._target=e,this._prop=i,this._from=o,this._to=n,this._promises=void 0}active(){return this._active}update(t,e,i){if(this._active){this._notify(!1);let n=this._target[this._prop],r=i-this._start,o=this._duration-r;this._start=i,this._duration=Math.floor(Math.max(o,t.duration)),this._total+=r,this._loop=!!t.loop,this._to=ze([t.to,e,n,t.from]),this._from=ze([t.from,n,e])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(t){let e=t-this._start,i=this._duration,n=this._prop,r=this._from,o=this._loop,a=this._to,l;if(this._active=r!==a&&(o||e1?2-l:l,l=this._easing(Math.min(1,Math.max(0,l))),this._target[n]=this._fn(r,a,l)}wait(){let t=this._promises||(this._promises=[]);return new Promise((e,i)=>{t.push({res:e,rej:i})})}_notify(t){let e=t?"res":"rej",i=this._promises||[];for(let n=0;ns!=="onProgress"&&s!=="onComplete"&&s!=="fn"});L.set("animations",{colors:{type:"color",properties:Ph},numbers:{type:"number",properties:Lh}});L.describe("animations",{_fallback:"animation"});L.set("transitions",{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:"transparent"},visible:{type:"boolean",duration:0}}},hide:{animations:{colors:{to:"transparent"},visible:{type:"boolean",easing:"linear",fn:s=>s|0}}}});var Hi=class{constructor(t,e){this._chart=t,this._properties=new Map,this.configure(e)}configure(t){if(!A(t))return;let e=this._properties;Object.getOwnPropertyNames(t).forEach(i=>{let n=t[i];if(!A(n))return;let r={};for(let o of Nh)r[o]=n[o];($(n.properties)&&n.properties||[i]).forEach(o=>{(o===i||!e.has(o))&&e.set(o,r)})})}_animateOptions(t,e){let i=e.options,n=Wh(t,i);if(!n)return[];let r=this._createAnimations(n,i);return i.$shared&&Rh(t.options.$animations,i).then(()=>{t.options=i},()=>{}),r}_createAnimations(t,e){let i=this._properties,n=[],r=t.$animations||(t.$animations={}),o=Object.keys(e),a=Date.now(),l;for(l=o.length-1;l>=0;--l){let c=o[l];if(c.charAt(0)==="$")continue;if(c==="options"){n.push(...this._animateOptions(t,e));continue}let h=e[c],u=r[c],d=i.get(c);if(u)if(d&&u.active()){u.update(d,h,a);continue}else u.cancel();if(!d||!d.duration){t[c]=h;continue}r[c]=u=new ur(d,t,c,h),n.push(u)}return n}update(t,e){if(this._properties.size===0){Object.assign(t,e);return}let i=this._createAnimations(t,e);if(i.length)return jt.add(this._chart,i),!0}};function Rh(s,t){let e=[],i=Object.keys(t);for(let n=0;n0||!e&&r<0)return n.index}return null}function la(s,t){let{chart:e,_cachedMeta:i}=s,n=e._stacks||(e._stacks={}),{iScale:r,vScale:o,index:a}=i,l=r.axis,c=o.axis,h=Bh(r,o,i),u=t.length,d;for(let f=0;fe[i].axis===t).shift()}function Uh(s,t){return $t(s,{active:!1,dataset:void 0,datasetIndex:t,index:t,mode:"default",type:"dataset"})}function Yh(s,t,e){return $t(s,{active:!1,dataIndex:t,parsed:void 0,raw:void 0,element:e,index:t,mode:"default",type:"data"})}function ks(s,t){let e=s.controller.index,i=s.vScale&&s.vScale.axis;if(i){t=t||s._parsed;for(let n of t){let r=n._stacks;if(!r||r[i]===void 0||r[i][e]===void 0)return;delete r[i][e]}}}var sr=s=>s==="reset"||s==="none",ca=(s,t)=>t?s:Object.assign({},s),Zh=(s,t,e)=>s&&!t.hidden&&t._stacked&&{keys:qa(e,!0),values:null},pt=class{constructor(t,e){this.chart=t,this._ctx=t.ctx,this.index=e,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.initialize()}initialize(){let t=this._cachedMeta;this.configure(),this.linkScales(),t._stacked=oa(t.vScale,t),this.addElements()}updateIndex(t){this.index!==t&&ks(this._cachedMeta),this.index=t}linkScales(){let t=this.chart,e=this._cachedMeta,i=this.getDataset(),n=(u,d,f,m)=>u==="x"?d:u==="r"?m:f,r=e.xAxisID=I(i.xAxisID,er(t,"x")),o=e.yAxisID=I(i.yAxisID,er(t,"y")),a=e.rAxisID=I(i.rAxisID,er(t,"r")),l=e.indexAxis,c=e.iAxisID=n(l,r,o,a),h=e.vAxisID=n(l,o,r,a);e.xScale=this.getScaleForId(r),e.yScale=this.getScaleForId(o),e.rScale=this.getScaleForId(a),e.iScale=this.getScaleForId(c),e.vScale=this.getScaleForId(h)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(t){return this.chart.scales[t]}_getOtherScale(t){let e=this._cachedMeta;return t===e.iScale?e.vScale:e.iScale}reset(){this._update("reset")}_destroy(){let t=this._cachedMeta;this._data&&Cn(this._data,this),t._stacked&&ks(t)}_dataCheck(){let t=this.getDataset(),e=t.data||(t.data=[]),i=this._data;if(A(e))this._data=Hh(e);else if(i!==e){if(i){Cn(i,this);let n=this._cachedMeta;ks(n),n._parsed=[]}e&&Object.isExtensible(e)&&Lo(e,this),this._syncList=[],this._data=e}}addElements(){let t=this._cachedMeta;this._dataCheck(),this.datasetElementType&&(t.dataset=new this.datasetElementType)}buildOrUpdateElements(t){let e=this._cachedMeta,i=this.getDataset(),n=!1;this._dataCheck();let r=e._stacked;e._stacked=oa(e.vScale,e),e.stack!==i.stack&&(n=!0,ks(e),e.stack=i.stack),this._resyncElements(t),(n||r!==e._stacked)&&la(this,e._parsed)}configure(){let t=this.chart.config,e=t.datasetScopeKeys(this._type),i=t.getOptionScopes(this.getDataset(),e,!0);this.options=t.createResolver(i,this.getContext()),this._parsing=this.options.parsing,this._cachedDataOpts={}}parse(t,e){let{_cachedMeta:i,_data:n}=this,{iScale:r,_stacked:o}=i,a=r.axis,l=t===0&&e===n.length?!0:i._sorted,c=t>0&&i._parsed[t-1],h,u,d;if(this._parsing===!1)i._parsed=n,i._sorted=!0,d=n;else{$(n[t])?d=this.parseArrayData(i,n,t,e):A(n[t])?d=this.parseObjectData(i,n,t,e):d=this.parsePrimitiveData(i,n,t,e);let f=()=>u[a]===null||c&&u[a]g||u=0;--d)if(!m()){this.updateRangeFromParsed(c,t,f,l);break}}return c}getAllParsedValues(t){let e=this._cachedMeta._parsed,i=[],n,r,o;for(n=0,r=e.length;n=0&&tthis.getContext(i,n),g=c.resolveNamedOptions(d,f,m,u);return g.$shared&&(g.$shared=l,r[o]=Object.freeze(ca(g,l))),g}_resolveAnimations(t,e,i){let n=this.chart,r=this._cachedDataOpts,o=`animation-${e}`,a=r[o];if(a)return a;let l;if(n.options.animation!==!1){let h=this.chart.config,u=h.datasetAnimationScopeKeys(this._type,e),d=h.getOptionScopes(this.getDataset(),u);l=h.createResolver(d,this.getContext(t,i,e))}let c=new Hi(n,l&&l.animations);return l&&l._cacheable&&(r[o]=Object.freeze(c)),c}getSharedOptions(t){if(t.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},t))}includeOptions(t,e){return!e||sr(t)||this.chart._animationsDisabled}_getSharedOptions(t,e){let i=this.resolveDataElementOptions(t,e),n=this._sharedOptions,r=this.getSharedOptions(i),o=this.includeOptions(e,r)||r!==n;return this.updateSharedOptions(r,e,i),{sharedOptions:r,includeOptions:o}}updateElement(t,e,i,n){sr(n)?Object.assign(t,i):this._resolveAnimations(e,n).update(t,i)}updateSharedOptions(t,e,i){t&&!sr(e)&&this._resolveAnimations(void 0,e).update(t,i)}_setStyle(t,e,i,n){t.active=n;let r=this.getStyle(e,n);this._resolveAnimations(e,i,n).update(t,{options:!n&&this.getSharedOptions(r)||r})}removeHoverStyle(t,e,i){this._setStyle(t,i,"active",!1)}setHoverStyle(t,e,i){this._setStyle(t,i,"active",!0)}_removeDatasetHoverStyle(){let t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!1)}_setDatasetHoverStyle(){let t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!0)}_resyncElements(t){let e=this._data,i=this._cachedMeta.data;for(let[a,l,c]of this._syncList)this[a](l,c);this._syncList=[];let n=i.length,r=e.length,o=Math.min(r,n);o&&this.parse(0,o),r>n?this._insertElements(n,r-n,t):r{for(c.length+=e,a=c.length-1;a>=o;a--)c[a]=c[a-e]};for(l(r),a=t;an-r))}return s._cache.$bar}function Gh(s){let t=s.iScale,e=qh(t,s.type),i=t._length,n,r,o,a,l=()=>{o===32767||o===-32768||(ft(a)&&(i=Math.min(i,Math.abs(o-a)||i)),a=o)};for(n=0,r=e.length;n0?n[s-1]:null,a=sMath.abs(a)&&(l=a,c=o),t[e.axis]=c,t._custom={barStart:l,barEnd:c,start:n,end:r,min:o,max:a}}function Ga(s,t,e,i){return $(s)?Jh(s,t,e,i):t[e.axis]=e.parse(s,i),t}function ha(s,t,e,i){let n=s.iScale,r=s.vScale,o=n.getLabels(),a=n===r,l=[],c,h,u,d;for(c=e,h=e+i;c=e?1:-1)}function tu(s){let t,e,i,n,r;return s.horizontal?(t=s.base>s.x,e="left",i="right"):(t=s.basel.controller.options.grouped),r=i.options.stacked,o=[],a=l=>{let c=l.controller.getParsed(e),h=c&&c[l.vScale.axis];if(R(h)||isNaN(h))return!0};for(let l of n)if(!(e!==void 0&&a(l))&&((r===!1||o.indexOf(l.stack)===-1||r===void 0&&l.stack===void 0)&&o.push(l.stack),l.index===t))break;return o.length||o.push(void 0),o}_getStackCount(t){return this._getStacks(void 0,t).length}_getStackIndex(t,e,i){let n=this._getStacks(t,i),r=e!==void 0?n.indexOf(e):-1;return r===-1?n.length-1:r}_getRuler(){let t=this.options,e=this._cachedMeta,i=e.iScale,n=[],r,o;for(r=0,o=e.data.length;r=0;--i)e=Math.max(e,t[i].size(this.resolveDataElementOptions(i))/2);return e>0&&e}getLabelAndValue(t){let e=this._cachedMeta,{xScale:i,yScale:n}=e,r=this.getParsed(t),o=i.getLabelForValue(r.x),a=n.getLabelForValue(r.y),l=r._custom;return{label:e.label,value:"("+o+", "+a+(l?", "+l:"")+")"}}update(t){let e=this._cachedMeta.data;this.updateElements(e,0,e.length,t)}updateElements(t,e,i,n){let r=n==="reset",{iScale:o,vScale:a}=this._cachedMeta,{sharedOptions:l,includeOptions:c}=this._getSharedOptions(e,n),h=o.axis,u=a.axis;for(let d=e;dRe(_,a,l,!0)?1:Math.max(w,w*e,x,x*e),m=(_,w,x)=>Re(_,a,l,!0)?-1:Math.min(w,w*e,x,x*e),g=f(0,c,u),p=f(Z,h,d),y=m(Y,c,u),b=m(Y+Z,h,d);i=(g-y)/2,n=(p-b)/2,r=-(g+y)/2,o=-(p+b)/2}return{ratioX:i,ratioY:n,offsetX:r,offsetY:o}}var oe=class extends pt{constructor(t,e){super(t,e),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(t,e){let i=this.getDataset().data,n=this._cachedMeta;if(this._parsing===!1)n._parsed=i;else{let r=l=>+i[l];if(A(i[t])){let{key:l="value"}=this._parsing;r=c=>+Bt(i[c],l)}let o,a;for(o=t,a=t+e;o0&&!isNaN(t)?B*(Math.abs(t)/e):0}getLabelAndValue(t){let e=this._cachedMeta,i=this.chart,n=i.data.labels||[],r=Ve(e._parsed[t],i.options.locale);return{label:n[t]||"",value:r}}getMaxBorderWidth(t){let e=0,i=this.chart,n,r,o,a,l;if(!t){for(n=0,r=i.data.datasets.length;ns!=="spacing",_indexable:s=>s!=="spacing"};oe.overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(s){let t=s.data;if(t.labels.length&&t.datasets.length){let{labels:{pointStyle:e}}=s.legend.options;return t.labels.map((i,n)=>{let o=s.getDatasetMeta(0).controller.getStyle(n);return{text:i,fillStyle:o.backgroundColor,strokeStyle:o.borderColor,lineWidth:o.borderWidth,pointStyle:e,hidden:!s.getDataVisibility(n),index:n}})}return[]}},onClick(s,t,e){e.chart.toggleDataVisibility(t.index),e.chart.update()}},tooltip:{callbacks:{title(){return""},label(s){let t=s.label,e=": "+s.formattedValue;return $(t)?(t=t.slice(),t[0]+=e):t+=e,t}}}}};var Ue=class extends pt{initialize(){this.enableOptionSharing=!0,this.supportsDecimation=!0,super.initialize()}update(t){let e=this._cachedMeta,{dataset:i,data:n=[],_dataset:r}=e,o=this.chart._animationsDisabled,{start:a,count:l}=Pn(e,n,o);this._drawStart=a,this._drawCount=l,Nn(e)&&(a=0,l=n.length),i._chart=this.chart,i._datasetIndex=this.index,i._decimated=!!r._decimated,i.points=n;let c=this.resolveDatasetElementOptions(t);this.options.showLine||(c.borderWidth=0),c.segment=this.options.segment,this.updateElement(i,void 0,{animated:!o,options:c},t),this.updateElements(n,a,l,t)}updateElements(t,e,i,n){let r=n==="reset",{iScale:o,vScale:a,_stacked:l,_dataset:c}=this._cachedMeta,{sharedOptions:h,includeOptions:u}=this._getSharedOptions(e,n),d=o.axis,f=a.axis,{spanGaps:m,segment:g}=this.options,p=pe(m)?m:Number.POSITIVE_INFINITY,y=this.chart._animationsDisabled||r||n==="none",b=e>0&&this.getParsed(e-1);for(let _=e;_0&&Math.abs(x[d]-b[d])>p,g&&(S.parsed=x,S.raw=c.data[_]),u&&(S.options=h||this.resolveDataElementOptions(_,w.active?"active":n)),y||this.updateElement(w,_,S,n),b=x}}getMaxOverflow(){let t=this._cachedMeta,e=t.dataset,i=e.options&&e.options.borderWidth||0,n=t.data||[];if(!n.length)return i;let r=n[0].size(this.resolveDataElementOptions(0)),o=n[n.length-1].size(this.resolveDataElementOptions(n.length-1));return Math.max(i,r,o)/2}draw(){let t=this._cachedMeta;t.dataset.updateControlPoints(this.chart.chartArea,t.iScale.axis),super.draw()}};Ue.id="line";Ue.defaults={datasetElementType:"line",dataElementType:"point",showLine:!0,spanGaps:!1};Ue.overrides={scales:{_index_:{type:"category"},_value_:{type:"linear"}}};var Ye=class extends pt{constructor(t,e){super(t,e),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(t){let e=this._cachedMeta,i=this.chart,n=i.data.labels||[],r=Ve(e._parsed[t].r,i.options.locale);return{label:n[t]||"",value:r}}parseObjectData(t,e,i,n){return Zn.bind(this)(t,e,i,n)}update(t){let e=this._cachedMeta.data;this._updateRadius(),this.updateElements(e,0,e.length,t)}getMinMax(){let t=this._cachedMeta,e={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY};return t.data.forEach((i,n)=>{let r=this.getParsed(n).r;!isNaN(r)&&this.chart.getDataVisibility(n)&&(re.max&&(e.max=r))}),e}_updateRadius(){let t=this.chart,e=t.chartArea,i=t.options,n=Math.min(e.right-e.left,e.bottom-e.top),r=Math.max(n/2,0),o=Math.max(i.cutoutPercentage?r/100*i.cutoutPercentage:1,0),a=(r-o)/t.getVisibleDatasetCount();this.outerRadius=r-a*this.index,this.innerRadius=this.outerRadius-a}updateElements(t,e,i,n){let r=n==="reset",o=this.chart,l=o.options.animation,c=this._cachedMeta.rScale,h=c.xCenter,u=c.yCenter,d=c.getIndexAngle(0)-.5*Y,f=d,m,g=360/this.countVisibleElements();for(m=0;m{!isNaN(this.getParsed(n).r)&&this.chart.getDataVisibility(n)&&e++}),e}_computeAngle(t,e,i){return this.chart.getDataVisibility(t)?wt(this.resolveDataElementOptions(t,e).angle||i):0}};Ye.id="polarArea";Ye.defaults={dataElementType:"arc",animation:{animateRotate:!0,animateScale:!0},animations:{numbers:{type:"number",properties:["x","y","startAngle","endAngle","innerRadius","outerRadius"]}},indexAxis:"r",startAngle:0};Ye.overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(s){let t=s.data;if(t.labels.length&&t.datasets.length){let{labels:{pointStyle:e}}=s.legend.options;return t.labels.map((i,n)=>{let o=s.getDatasetMeta(0).controller.getStyle(n);return{text:i,fillStyle:o.backgroundColor,strokeStyle:o.borderColor,lineWidth:o.borderWidth,pointStyle:e,hidden:!s.getDataVisibility(n),index:n}})}return[]}},onClick(s,t,e){e.chart.toggleDataVisibility(t.index),e.chart.update()}},tooltip:{callbacks:{title(){return""},label(s){return s.chart.data.labels[s.dataIndex]+": "+s.formattedValue}}}},scales:{r:{type:"radialLinear",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}};var Is=class extends oe{};Is.id="pie";Is.defaults={cutout:0,rotation:0,circumference:360,radius:"100%"};var Ze=class extends pt{getLabelAndValue(t){let e=this._cachedMeta.vScale,i=this.getParsed(t);return{label:e.getLabels()[t],value:""+e.getLabelForValue(i[e.axis])}}parseObjectData(t,e,i,n){return Zn.bind(this)(t,e,i,n)}update(t){let e=this._cachedMeta,i=e.dataset,n=e.data||[],r=e.iScale.getLabels();if(i.points=n,t!=="resize"){let o=this.resolveDatasetElementOptions(t);this.options.showLine||(o.borderWidth=0);let a={_loop:!0,_fullLoop:r.length===n.length,options:o};this.updateElement(i,void 0,a,t)}this.updateElements(n,0,n.length,t)}updateElements(t,e,i,n){let r=this._cachedMeta.rScale,o=n==="reset";for(let a=e;a{n[r]=i[r]&&i[r].active()?i[r]._to:this[r]}),n}};yt.defaults={};yt.defaultRoutes=void 0;var Xa={values(s){return $(s)?s:""+s},numeric(s,t,e){if(s===0)return"0";let i=this.chart.options.locale,n,r=s;if(e.length>1){let c=Math.max(Math.abs(e[0].value),Math.abs(e[e.length-1].value));(c<1e-4||c>1e15)&&(n="scientific"),r=ru(s,e)}let o=gt(Math.abs(r)),a=Math.max(Math.min(-1*Math.floor(o),20),0),l={notation:n,minimumFractionDigits:a,maximumFractionDigits:a};return Object.assign(l,this.options.ticks.format),Ve(s,i,l)},logarithmic(s,t,e){if(s===0)return"0";let i=s/Math.pow(10,Math.floor(gt(s)));return i===1||i===2||i===5?Xa.numeric.call(this,s,t,e):""}};function ru(s,t){let e=t.length>3?t[2].value-t[1].value:t[1].value-t[0].value;return Math.abs(e)>=1&&s!==Math.floor(s)&&(e=s-Math.floor(s)),e}var Zi={formatters:Xa};L.set("scale",{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:"ticks",grace:0,grid:{display:!0,lineWidth:1,drawBorder:!0,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(s,t)=>t.lineWidth,tickColor:(s,t)=>t.color,offset:!1,borderDash:[],borderDashOffset:0,borderWidth:1},title:{display:!1,text:"",padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:"",padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:Zi.formatters.values,minor:{},major:{},align:"center",crossAlign:"near",showLabelBackdrop:!1,backdropColor:"rgba(255, 255, 255, 0.75)",backdropPadding:2}});L.route("scale.ticks","color","","color");L.route("scale.grid","color","","borderColor");L.route("scale.grid","borderColor","","borderColor");L.route("scale.title","color","","color");L.describe("scale",{_fallback:!1,_scriptable:s=>!s.startsWith("before")&&!s.startsWith("after")&&s!=="callback"&&s!=="parser",_indexable:s=>s!=="borderDash"&&s!=="tickBorderDash"});L.describe("scales",{_fallback:"scale"});L.describe("scale.ticks",{_scriptable:s=>s!=="backdropPadding"&&s!=="callback",_indexable:s=>s!=="backdropPadding"});function ou(s,t){let e=s.options.ticks,i=e.maxTicksLimit||au(s),n=e.major.enabled?cu(t):[],r=n.length,o=n[0],a=n[r-1],l=[];if(r>i)return hu(t,l,n,r/i),l;let c=lu(n,t,i);if(r>0){let h,u,d=r>1?Math.round((a-o)/(r-1)):null;for(Li(t,l,c,R(d)?0:o-d,o),h=0,u=r-1;hn)return l}return Math.max(n,1)}function cu(s){let t=[],e,i;for(e=0,i=s.length;es==="left"?"right":s==="right"?"left":s,fa=(s,t,e)=>t==="top"||t==="left"?s[t]+e:s[t]-e;function ma(s,t){let e=[],i=s.length/t,n=s.length,r=0;for(;ro+a)))return l}function mu(s,t){H(s,e=>{let i=e.gc,n=i.length/2,r;if(n>t){for(r=0;ri?i:e,i=n&&e>i?e:i,{min:mt(e,mt(i,e)),max:mt(i,mt(e,i))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){let t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){j(this.options.beforeUpdate,[this])}update(t,e,i){let{beginAtZero:n,grace:r,ticks:o}=this.options,a=o.sampleSize;this.beforeUpdate(),this.maxWidth=t,this.maxHeight=e,this._margins=i=Object.assign({left:0,right:0,top:0,bottom:0},i),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+i.left+i.right:this.height+i.top+i.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=Uo(this,r,n),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();let l=a=r||i<=1||!this.isHorizontal()){this.labelRotation=n;return}let h=this._getLabelSizes(),u=h.widest.width,d=h.highest.height,f=it(this.chart.width-u,0,this.maxWidth);a=t.offset?this.maxWidth/i:f/(i-1),u+6>a&&(a=f/(i-(t.offset?.5:1)),l=this.maxHeight-Ms(t.grid)-e.padding-ga(t.title,this.chart.options.font),c=Math.sqrt(u*u+d*d),o=Ti(Math.min(Math.asin(it((h.highest.height+6)/a,-1,1)),Math.asin(it(l/c,-1,1))-Math.asin(it(d/c,-1,1)))),o=Math.max(n,Math.min(r,o))),this.labelRotation=o}afterCalculateLabelRotation(){j(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){j(this.options.beforeFit,[this])}fit(){let t={width:0,height:0},{chart:e,options:{ticks:i,title:n,grid:r}}=this,o=this._isVisible(),a=this.isHorizontal();if(o){let l=ga(n,e.options.font);if(a?(t.width=this.maxWidth,t.height=Ms(r)+l):(t.height=this.maxHeight,t.width=Ms(r)+l),i.display&&this.ticks.length){let{first:c,last:h,widest:u,highest:d}=this._getLabelSizes(),f=i.padding*2,m=wt(this.labelRotation),g=Math.cos(m),p=Math.sin(m);if(a){let y=i.mirror?0:p*u.width+g*d.height;t.height=Math.min(this.maxHeight,t.height+y+f)}else{let y=i.mirror?0:g*u.width+p*d.height;t.width=Math.min(this.maxWidth,t.width+y+f)}this._calculatePadding(c,h,p,g)}}this._handleMargins(),a?(this.width=this._length=e.width-this._margins.left-this._margins.right,this.height=t.height):(this.width=t.width,this.height=this._length=e.height-this._margins.top-this._margins.bottom)}_calculatePadding(t,e,i,n){let{ticks:{align:r,padding:o},position:a}=this.options,l=this.labelRotation!==0,c=a!=="top"&&this.axis==="x";if(this.isHorizontal()){let h=this.getPixelForTick(0)-this.left,u=this.right-this.getPixelForTick(this.ticks.length-1),d=0,f=0;l?c?(d=n*t.width,f=i*e.height):(d=i*t.height,f=n*e.width):r==="start"?f=e.width:r==="end"?d=t.width:r!=="inner"&&(d=t.width/2,f=e.width/2),this.paddingLeft=Math.max((d-h+o)*this.width/(this.width-h),0),this.paddingRight=Math.max((f-u+o)*this.width/(this.width-u),0)}else{let h=e.height/2,u=t.height/2;r==="start"?(h=0,u=t.height):r==="end"&&(h=e.height,u=0),this.paddingTop=h+o,this.paddingBottom=u+o}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){j(this.options.afterFit,[this])}isHorizontal(){let{axis:t,position:e}=this.options;return e==="top"||e==="bottom"||t==="x"}isFullSize(){return this.options.fullSize}_convertTicksToLabels(t){this.beforeTickToLabelConversion(),this.generateTickLabels(t);let e,i;for(e=0,i=t.length;e({width:r[k]||0,height:o[k]||0});return{first:S(0),last:S(e-1),widest:S(w),highest:S(x),widths:r,heights:o}}getLabelForValue(t){return t}getPixelForValue(t,e){return NaN}getValueForPixel(t){}getPixelForTick(t){let e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getPixelForDecimal(t){this._reversePixels&&(t=1-t);let e=this._startPixel+t*this._length;return Io(this._alignToPixels?te(this.chart,e,0):e)}getDecimalForPixel(t){let e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){let{min:t,max:e}=this;return t<0&&e<0?e:t>0&&e>0?t:0}getContext(t){let e=this.ticks||[];if(t>=0&&ta*n?a/i:l/n:l*n0}_computeGridLineItems(t){let e=this.axis,i=this.chart,n=this.options,{grid:r,position:o}=n,a=r.offset,l=this.isHorizontal(),h=this.ticks.length+(a?1:0),u=Ms(r),d=[],f=r.setContext(this.getContext()),m=f.drawBorder?f.borderWidth:0,g=m/2,p=function(E){return te(i,E,m)},y,b,_,w,x,S,k,O,T,F,W,P;if(o==="top")y=p(this.bottom),S=this.bottom-u,O=y-g,F=p(t.top)+g,P=t.bottom;else if(o==="bottom")y=p(this.top),F=t.top,P=p(t.bottom)-g,S=y+g,O=this.top+u;else if(o==="left")y=p(this.right),x=this.right-u,k=y-g,T=p(t.left)+g,W=t.right;else if(o==="right")y=p(this.left),T=t.left,W=p(t.right)-g,x=y+g,k=this.left+u;else if(e==="x"){if(o==="center")y=p((t.top+t.bottom)/2+.5);else if(A(o)){let E=Object.keys(o)[0],tt=o[E];y=p(this.chart.scales[E].getPixelForValue(tt))}F=t.top,P=t.bottom,S=y+g,O=S+u}else if(e==="y"){if(o==="center")y=p((t.left+t.right)/2);else if(A(o)){let E=Object.keys(o)[0],tt=o[E];y=p(this.chart.scales[E].getPixelForValue(tt))}x=y-g,k=x-u,T=t.left,W=t.right}let Q=I(n.ticks.maxTicksLimit,h),ct=Math.max(1,Math.ceil(h/Q));for(b=0;br.value===t);return n>=0?e.setContext(this.getContext(n)).lineWidth:0}drawGrid(t){let e=this.options.grid,i=this.ctx,n=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(t)),r,o,a=(l,c,h)=>{!h.width||!h.color||(i.save(),i.lineWidth=h.width,i.strokeStyle=h.color,i.setLineDash(h.borderDash||[]),i.lineDashOffset=h.borderDashOffset,i.beginPath(),i.moveTo(l.x,l.y),i.lineTo(c.x,c.y),i.stroke(),i.restore())};if(e.display)for(r=0,o=n.length;r{this.draw(n)}}]:[{z:i,draw:n=>{this.drawBackground(),this.drawGrid(n),this.drawTitle()}},{z:i+1,draw:()=>{this.drawBorder()}},{z:e,draw:n=>{this.drawLabels(n)}}]}getMatchingVisibleMetas(t){let e=this.chart.getSortedVisibleDatasetMetas(),i=this.axis+"AxisID",n=[],r,o;for(r=0,o=e.length;r{let i=e.split("."),n=i.pop(),r=[s].concat(i).join("."),o=t[e].split("."),a=o.pop(),l=o.join(".");L.route(r,n,l,a)})}function wu(s){return"id"in s&&"defaults"in s}var dr=class{constructor(){this.controllers=new Be(pt,"datasets",!0),this.elements=new Be(yt,"elements"),this.plugins=new Be(Object,"plugins"),this.scales=new Be(Yt,"scales"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...t){this._each("register",t)}remove(...t){this._each("unregister",t)}addControllers(...t){this._each("register",t,this.controllers)}addElements(...t){this._each("register",t,this.elements)}addPlugins(...t){this._each("register",t,this.plugins)}addScales(...t){this._each("register",t,this.scales)}getController(t){return this._get(t,this.controllers,"controller")}getElement(t){return this._get(t,this.elements,"element")}getPlugin(t){return this._get(t,this.plugins,"plugin")}getScale(t){return this._get(t,this.scales,"scale")}removeControllers(...t){this._each("unregister",t,this.controllers)}removeElements(...t){this._each("unregister",t,this.elements)}removePlugins(...t){this._each("unregister",t,this.plugins)}removeScales(...t){this._each("unregister",t,this.scales)}_each(t,e,i){[...e].forEach(n=>{let r=i||this._getRegistryForType(n);i||r.isForType(n)||r===this.plugins&&n.id?this._exec(t,r,n):H(n,o=>{let a=i||this._getRegistryForType(o);this._exec(t,a,o)})})}_exec(t,e,i){let n=Mi(t);j(i["before"+n],[],i),e[t](i),j(i["after"+n],[],i)}_getRegistryForType(t){for(let e=0;e0&&this.getParsed(e-1);for(let w=e;w0&&Math.abs(S[f]-_[f])>y,p&&(k.parsed=S,k.raw=c.data[w]),d&&(k.options=u||this.resolveDataElementOptions(w,x.active?"active":n)),b||this.updateElement(x,w,k,n),_=S}this.updateSharedOptions(u,n,h)}getMaxOverflow(){let t=this._cachedMeta,e=t.data||[];if(!this.options.showLine){let a=0;for(let l=e.length-1;l>=0;--l)a=Math.max(a,e[l].size(this.resolveDataElementOptions(l))/2);return a>0&&a}let i=t.dataset,n=i.options&&i.options.borderWidth||0;if(!e.length)return n;let r=e[0].size(this.resolveDataElementOptions(0)),o=e[e.length-1].size(this.resolveDataElementOptions(e.length-1));return Math.max(n,r,o)/2}};qe.id="scatter";qe.defaults={datasetElementType:!1,dataElementType:"point",showLine:!1,fill:!1};qe.overrides={interaction:{mode:"point"},plugins:{tooltip:{callbacks:{title(){return""},label(s){return"("+s.label+", "+s.formattedValue+")"}}}},scales:{x:{type:"linear"},y:{type:"linear"}}};var Su=Object.freeze({__proto__:null,BarController:$e,BubbleController:je,DoughnutController:oe,LineController:Ue,PolarAreaController:Ye,PieController:Is,RadarController:Ze,ScatterController:qe});function be(){throw new Error("This method is not implemented: Check that a complete date adapter is provided.")}var Cs=class{constructor(t){this.options=t||{}}init(t){}formats(){return be()}parse(t,e){return be()}format(t,e){return be()}add(t,e,i){return be()}diff(t,e,i){return be()}startOf(t,e,i){return be()}endOf(t,e){return be()}};Cs.override=function(s){Object.assign(Cs.prototype,s)};var kr={_date:Cs};function ku(s,t,e,i){let{controller:n,data:r,_sorted:o}=s,a=n._cachedMeta.iScale;if(a&&t===a.axis&&t!=="r"&&o&&r.length){let l=a._reversePixels?Co:Ct;if(i){if(n._sharedOptions){let c=r[0],h=typeof c.getRange=="function"&&c.getRange(t);if(h){let u=l(r,t,e-h),d=l(r,t,e+h);return{lo:u.lo,hi:d.hi}}}}else return l(r,t,e)}return{lo:0,hi:r.length-1}}function Ws(s,t,e,i,n){let r=s.getSortedVisibleDatasetMetas(),o=e[t];for(let a=0,l=r.length;a{l[o](t[e],n)&&(r.push({element:l,datasetIndex:c,index:h}),a=a||l.inRange(t.x,t.y,n))}),i&&!a?[]:r}var Ou={evaluateInteractionItems:Ws,modes:{index(s,t,e,i){let n=ie(t,s),r=e.axis||"x",o=e.includeInvisible||!1,a=e.intersect?nr(s,n,r,i,o):rr(s,n,r,!1,i,o),l=[];return a.length?(s.getSortedVisibleDatasetMetas().forEach(c=>{let h=a[0].index,u=c.data[h];u&&!u.skip&&l.push({element:u,datasetIndex:c.index,index:h})}),l):[]},dataset(s,t,e,i){let n=ie(t,s),r=e.axis||"xy",o=e.includeInvisible||!1,a=e.intersect?nr(s,n,r,i,o):rr(s,n,r,!1,i,o);if(a.length>0){let l=a[0].datasetIndex,c=s.getDatasetMeta(l).data;a=[];for(let h=0;he.pos===t)}function ya(s,t){return s.filter(e=>Ka.indexOf(e.pos)===-1&&e.box.axis===t)}function vs(s,t){return s.sort((e,i)=>{let n=t?i:e,r=t?e:i;return n.weight===r.weight?n.index-r.index:n.weight-r.weight})}function Du(s){let t=[],e,i,n,r,o,a;for(e=0,i=(s||[]).length;ec.box.fullSize),!0),i=vs(Ts(t,"left"),!0),n=vs(Ts(t,"right")),r=vs(Ts(t,"top"),!0),o=vs(Ts(t,"bottom")),a=ya(t,"x"),l=ya(t,"y");return{fullSize:e,leftAndTop:i.concat(r),rightAndBottom:n.concat(l).concat(o).concat(a),chartArea:Ts(t,"chartArea"),vertical:i.concat(n).concat(l),horizontal:r.concat(o).concat(a)}}function ba(s,t,e,i){return Math.max(s[e],t[e])+Math.max(s[i],t[i])}function Ja(s,t){s.top=Math.max(s.top,t.top),s.left=Math.max(s.left,t.left),s.bottom=Math.max(s.bottom,t.bottom),s.right=Math.max(s.right,t.right)}function Fu(s,t,e,i){let{pos:n,box:r}=e,o=s.maxPadding;if(!A(n)){e.size&&(s[n]-=e.size);let u=i[e.stack]||{size:0,count:1};u.size=Math.max(u.size,e.horizontal?r.height:r.width),e.size=u.size/u.count,s[n]+=e.size}r.getPadding&&Ja(o,r.getPadding());let a=Math.max(0,t.outerWidth-ba(o,s,"left","right")),l=Math.max(0,t.outerHeight-ba(o,s,"top","bottom")),c=a!==s.w,h=l!==s.h;return s.w=a,s.h=l,e.horizontal?{same:c,other:h}:{same:h,other:c}}function Au(s){let t=s.maxPadding;function e(i){let n=Math.max(t[i]-s[i],0);return s[i]+=n,n}s.y+=e("top"),s.x+=e("left"),e("right"),e("bottom")}function Lu(s,t){let e=t.maxPadding;function i(n){let r={left:0,top:0,right:0,bottom:0};return n.forEach(o=>{r[o]=Math.max(t[o],e[o])}),r}return i(s?["left","right"]:["top","bottom"])}function Ds(s,t,e,i){let n=[],r,o,a,l,c,h;for(r=0,o=s.length,c=0;r{typeof g.beforeLayout=="function"&&g.beforeLayout()});let h=l.reduce((g,p)=>p.box.options&&p.box.options.display===!1?g:g+1,0)||1,u=Object.freeze({outerWidth:t,outerHeight:e,padding:n,availableWidth:r,availableHeight:o,vBoxMaxWidth:r/2/h,hBoxMaxHeight:o/2}),d=Object.assign({},n);Ja(d,at(i));let f=Object.assign({maxPadding:d,w:r,h:o,x:n.left,y:n.top},n),m=Iu(l.concat(c),u);Ds(a.fullSize,f,u,m),Ds(l,f,u,m),Ds(c,f,u,m)&&Ds(l,f,u,m),Au(f),xa(a.leftAndTop,f,u,m),f.x+=f.w,f.y+=f.h,xa(a.rightAndBottom,f,u,m),s.chartArea={left:f.left,top:f.top,right:f.left+f.w,bottom:f.top+f.h,height:f.h,width:f.w},H(a.chartArea,g=>{let p=g.box;Object.assign(p,s.chartArea),p.update(f.w,f.h,{left:0,top:0,right:0,bottom:0})})}},Bi=class{acquireContext(t,e){}releaseContext(t){return!1}addEventListener(t,e,i){}removeEventListener(t,e,i){}getDevicePixelRatio(){return 1}getMaximumSize(t,e,i,n){return e=Math.max(0,e||t.width),i=i||t.height,{width:e,height:Math.max(0,n?Math.floor(e/n):i)}}isAttached(t){return!0}updateConfig(t){}},fr=class extends Bi{acquireContext(t){return t&&t.getContext&&t.getContext("2d")||null}updateConfig(t){t.options.animation=!1}},Vi="$chartjs",Pu={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"},_a=s=>s===null||s==="";function Nu(s,t){let e=s.style,i=s.getAttribute("height"),n=s.getAttribute("width");if(s[Vi]={initial:{height:i,width:n,style:{display:e.display,height:e.height,width:e.width}}},e.display=e.display||"block",e.boxSizing=e.boxSizing||"border-box",_a(n)){let r=Xn(s,"width");r!==void 0&&(s.width=r)}if(_a(i))if(s.style.height==="")s.height=s.width/(t||2);else{let r=Xn(s,"height");r!==void 0&&(s.height=r)}return s}var Qa=Jo?{passive:!0}:!1;function Ru(s,t,e){s.addEventListener(t,e,Qa)}function Wu(s,t,e){s.canvas.removeEventListener(t,e,Qa)}function zu(s,t){let e=Pu[s.type]||s.type,{x:i,y:n}=ie(s,t);return{type:e,chart:t,native:s,x:i!==void 0?i:null,y:n!==void 0?n:null}}function $i(s,t){for(let e of s)if(e===t||e.contains(t))return!0}function Vu(s,t,e){let i=s.canvas,n=new MutationObserver(r=>{let o=!1;for(let a of r)o=o||$i(a.addedNodes,i),o=o&&!$i(a.removedNodes,i);o&&e()});return n.observe(document,{childList:!0,subtree:!0}),n}function Hu(s,t,e){let i=s.canvas,n=new MutationObserver(r=>{let o=!1;for(let a of r)o=o||$i(a.removedNodes,i),o=o&&!$i(a.addedNodes,i);o&&e()});return n.observe(document,{childList:!0,subtree:!0}),n}var Fs=new Map,wa=0;function tl(){let s=window.devicePixelRatio;s!==wa&&(wa=s,Fs.forEach((t,e)=>{e.currentDevicePixelRatio!==s&&t()}))}function Bu(s,t){Fs.size||window.addEventListener("resize",tl),Fs.set(s,t)}function $u(s){Fs.delete(s),Fs.size||window.removeEventListener("resize",tl)}function ju(s,t,e){let i=s.canvas,n=i&&Fi(i);if(!n)return;let r=Ln((a,l)=>{let c=n.clientWidth;e(a,l),c{let l=a[0],c=l.contentRect.width,h=l.contentRect.height;c===0&&h===0||r(c,h)});return o.observe(n),Bu(s,r),o}function or(s,t,e){e&&e.disconnect(),t==="resize"&&$u(s)}function Uu(s,t,e){let i=s.canvas,n=Ln(r=>{s.ctx!==null&&e(zu(r,s))},s,r=>{let o=r[0];return[o,o.offsetX,o.offsetY]});return Ru(i,t,n),n}var mr=class extends Bi{acquireContext(t,e){let i=t&&t.getContext&&t.getContext("2d");return i&&i.canvas===t?(Nu(t,e),i):null}releaseContext(t){let e=t.canvas;if(!e[Vi])return!1;let i=e[Vi].initial;["height","width"].forEach(r=>{let o=i[r];R(o)?e.removeAttribute(r):e.setAttribute(r,o)});let n=i.style||{};return Object.keys(n).forEach(r=>{e.style[r]=n[r]}),e.width=e.width,delete e[Vi],!0}addEventListener(t,e,i){this.removeEventListener(t,e);let n=t.$proxies||(t.$proxies={}),o={attach:Vu,detach:Hu,resize:ju}[e]||Uu;n[e]=o(t,e,i)}removeEventListener(t,e){let i=t.$proxies||(t.$proxies={}),n=i[e];if(!n)return;({attach:or,detach:or,resize:or}[e]||Wu)(t,e,n),i[e]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(t,e,i,n){return Ko(t,e,i,n)}isAttached(t){let e=Fi(t);return!!(e&&e.isConnected)}};function Yu(s){return!qn()||typeof OffscreenCanvas<"u"&&s instanceof OffscreenCanvas?fr:mr}var gr=class{constructor(){this._init=[]}notify(t,e,i,n){e==="beforeInit"&&(this._init=this._createDescriptors(t,!0),this._notify(this._init,t,"install"));let r=n?this._descriptors(t).filter(n):this._descriptors(t),o=this._notify(r,t,e,i);return e==="afterDestroy"&&(this._notify(r,t,"stop"),this._notify(this._init,t,"uninstall")),o}_notify(t,e,i,n){n=n||{};for(let r of t){let o=r.plugin,a=o[i],l=[e,n,r.options];if(j(a,l,o)===!1&&n.cancelable)return!1}return!0}invalidate(){R(this._cache)||(this._oldCache=this._cache,this._cache=void 0)}_descriptors(t){if(this._cache)return this._cache;let e=this._cache=this._createDescriptors(t);return this._notifyStateChanges(t),e}_createDescriptors(t,e){let i=t&&t.config,n=I(i.options&&i.options.plugins,{}),r=Zu(i);return n===!1&&!e?[]:Gu(t,r,n,e)}_notifyStateChanges(t){let e=this._oldCache||[],i=this._cache,n=(r,o)=>r.filter(a=>!o.some(l=>a.plugin.id===l.plugin.id));this._notify(n(e,i),t,"stop"),this._notify(n(i,e),t,"start")}};function Zu(s){let t={},e=[],i=Object.keys(Pt.plugins.items);for(let r=0;r{let l=i[a];if(!A(l))return console.error(`Invalid scale configuration for scale: ${a}`);if(l._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${a}`);let c=yr(a,l),h=Ju(c,n),u=e.scales||{};r[c]=r[c]||a,o[a]=Pe(Object.create(null),[{axis:c},l,u[c],u[h]])}),s.data.datasets.forEach(a=>{let l=a.type||s.type,c=a.indexAxis||pr(l,t),u=(Qt[l]||{}).scales||{};Object.keys(u).forEach(d=>{let f=Ku(d,c),m=a[f+"AxisID"]||r[f]||f;o[m]=o[m]||Object.create(null),Pe(o[m],[{axis:f},i[m],u[d]])})}),Object.keys(o).forEach(a=>{let l=o[a];Pe(l,[L.scales[l.type],L.scale])}),o}function el(s){let t=s.options||(s.options={});t.plugins=I(t.plugins,{}),t.scales=td(s,t)}function sl(s){return s=s||{},s.datasets=s.datasets||[],s.labels=s.labels||[],s}function ed(s){return s=s||{},s.data=sl(s.data),el(s),s}var Sa=new Map,il=new Set;function Ni(s,t){let e=Sa.get(s);return e||(e=t(),Sa.set(s,e),il.add(e)),e}var Os=(s,t,e)=>{let i=Bt(t,e);i!==void 0&&s.add(i)},br=class{constructor(t){this._config=ed(t),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(t){this._config.type=t}get data(){return this._config.data}set data(t){this._config.data=sl(t)}get options(){return this._config.options}set options(t){this._config.options=t}get plugins(){return this._config.plugins}update(){let t=this._config;this.clearCache(),el(t)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(t){return Ni(t,()=>[[`datasets.${t}`,""]])}datasetAnimationScopeKeys(t,e){return Ni(`${t}.transition.${e}`,()=>[[`datasets.${t}.transitions.${e}`,`transitions.${e}`],[`datasets.${t}`,""]])}datasetElementScopeKeys(t,e){return Ni(`${t}-${e}`,()=>[[`datasets.${t}.elements.${e}`,`datasets.${t}`,`elements.${e}`,""]])}pluginScopeKeys(t){let e=t.id,i=this.type;return Ni(`${i}-plugin-${e}`,()=>[[`plugins.${e}`,...t.additionalOptionScopes||[]]])}_cachedScopes(t,e){let i=this._scopeCache,n=i.get(t);return(!n||e)&&(n=new Map,i.set(t,n)),n}getOptionScopes(t,e,i){let{options:n,type:r}=this,o=this._cachedScopes(t,i),a=o.get(e);if(a)return a;let l=new Set;e.forEach(h=>{t&&(l.add(t),h.forEach(u=>Os(l,t,u))),h.forEach(u=>Os(l,n,u)),h.forEach(u=>Os(l,Qt[r]||{},u)),h.forEach(u=>Os(l,L,u)),h.forEach(u=>Os(l,Di,u))});let c=Array.from(l);return c.length===0&&c.push(Object.create(null)),il.has(e)&&o.set(e,c),c}chartOptionScopes(){let{options:t,type:e}=this;return[t,Qt[e]||{},L.datasets[e]||{},{type:e},L,Di]}resolveNamedOptions(t,e,i,n=[""]){let r={$shared:!0},{resolver:o,subPrefixes:a}=ka(this._resolverCache,t,n),l=o;if(id(o,e)){r.$shared=!1,i=Ht(i)?i():i;let c=this.createResolver(t,i,a);l=ge(o,i,c)}for(let c of e)r[c]=l[c];return r}createResolver(t,e,i=[""],n){let{resolver:r}=ka(this._resolverCache,t,i);return A(e)?ge(r,e,void 0,n):r}};function ka(s,t,e){let i=s.get(t);i||(i=new Map,s.set(t,i));let n=e.join(),r=i.get(n);return r||(r={resolver:Ci(t,e),subPrefixes:e.filter(a=>!a.toLowerCase().includes("hover"))},i.set(n,r)),r}var sd=s=>A(s)&&Object.getOwnPropertyNames(s).reduce((t,e)=>t||Ht(s[e]),!1);function id(s,t){let{isScriptable:e,isIndexable:i}=jn(s);for(let n of t){let r=e(n),o=i(n),a=(o||r)&&s[n];if(r&&(Ht(a)||sd(a))||o&&$(a))return!0}return!1}var nd="3.9.1",rd=["top","bottom","left","right","chartArea"];function Ma(s,t){return s==="top"||s==="bottom"||rd.indexOf(s)===-1&&t==="x"}function Ta(s,t){return function(e,i){return e[s]===i[s]?e[t]-i[t]:e[s]-i[s]}}function va(s){let t=s.chart,e=t.options.animation;t.notifyPlugins("afterRender"),j(e&&e.onComplete,[s],t)}function od(s){let t=s.chart,e=t.options.animation;j(e&&e.onProgress,[s],t)}function nl(s){return qn()&&typeof s=="string"?s=document.getElementById(s):s&&s.length&&(s=s[0]),s&&s.canvas&&(s=s.canvas),s}var ji={},rl=s=>{let t=nl(s);return Object.values(ji).filter(e=>e.canvas===t).pop()};function ad(s,t,e){let i=Object.keys(s);for(let n of i){let r=+n;if(r>=t){let o=s[n];delete s[n],(e>0||r>t)&&(s[r+e]=o)}}}function ld(s,t,e,i){return!e||s.type==="mouseout"?null:i?t:s}var xe=class{constructor(t,e){let i=this.config=new br(e),n=nl(t),r=rl(n);if(r)throw new Error("Canvas is already in use. Chart with ID '"+r.id+"' must be destroyed before the canvas with ID '"+r.canvas.id+"' can be reused.");let o=i.createResolver(i.chartOptionScopes(),this.getContext());this.platform=new(i.platform||Yu(n)),this.platform.updateConfig(i);let a=this.platform.acquireContext(n,o.aspectRatio),l=a&&a.canvas,c=l&&l.height,h=l&&l.width;if(this.id=Mo(),this.ctx=a,this.canvas=l,this.width=h,this.height=c,this._options=o,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new gr,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=Po(u=>this.update(u),o.resizeDelay||0),this._dataChanges=[],ji[this.id]=this,!a||!l){console.error("Failed to create chart: can't acquire context from the given item");return}jt.listen(this,"complete",va),jt.listen(this,"progress",od),this._initialize(),this.attached&&this.update()}get aspectRatio(){let{options:{aspectRatio:t,maintainAspectRatio:e},width:i,height:n,_aspectRatio:r}=this;return R(t)?e&&r?r:n?i/n:null:t}get data(){return this.config.data}set data(t){this.config.data=t}get options(){return this._options}set options(t){this.config.options=t}_initialize(){return this.notifyPlugins("beforeInit"),this.options.responsive?this.resize():Gn(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins("afterInit"),this}clear(){return Hn(this.canvas,this.ctx),this}stop(){return jt.stop(this),this}resize(t,e){jt.running(this)?this._resizeBeforeDraw={width:t,height:e}:this._resize(t,e)}_resize(t,e){let i=this.options,n=this.canvas,r=i.maintainAspectRatio&&this.aspectRatio,o=this.platform.getMaximumSize(n,t,e,r),a=i.devicePixelRatio||this.platform.getDevicePixelRatio(),l=this.width?"resize":"attach";this.width=o.width,this.height=o.height,this._aspectRatio=this.aspectRatio,Gn(this,a,!0)&&(this.notifyPlugins("resize",{size:o}),j(i.onResize,[this,o],this),this.attached&&this._doResize(l)&&this.render())}ensureScalesHaveIDs(){let e=this.options.scales||{};H(e,(i,n)=>{i.id=n})}buildOrUpdateScales(){let t=this.options,e=t.scales,i=this.scales,n=Object.keys(i).reduce((o,a)=>(o[a]=!1,o),{}),r=[];e&&(r=r.concat(Object.keys(e).map(o=>{let a=e[o],l=yr(o,a),c=l==="r",h=l==="x";return{options:a,dposition:c?"chartArea":h?"bottom":"left",dtype:c?"radialLinear":h?"category":"linear"}}))),H(r,o=>{let a=o.options,l=a.id,c=yr(l,a),h=I(a.type,o.dtype);(a.position===void 0||Ma(a.position,c)!==Ma(o.dposition))&&(a.position=o.dposition),n[l]=!0;let u=null;if(l in i&&i[l].type===h)u=i[l];else{let d=Pt.getScale(h);u=new d({id:l,type:h,ctx:this.ctx,chart:this}),i[u.id]=u}u.init(a,t)}),H(n,(o,a)=>{o||delete i[a]}),H(i,o=>{lt.configure(this,o,o.options),lt.addBox(this,o)})}_updateMetasets(){let t=this._metasets,e=this.data.datasets.length,i=t.length;if(t.sort((n,r)=>n.index-r.index),i>e){for(let n=e;ne.length&&delete this._stacks,t.forEach((i,n)=>{e.filter(r=>r===i._dataset).length===0&&this._destroyDatasetMeta(n)})}buildOrUpdateControllers(){let t=[],e=this.data.datasets,i,n;for(this._removeUnreferencedMetasets(),i=0,n=e.length;i{this.getDatasetMeta(e).controller.reset()},this)}reset(){this._resetElements(),this.notifyPlugins("reset")}update(t){let e=this.config;e.update();let i=this._options=e.createResolver(e.chartOptionScopes(),this.getContext()),n=this._animationsDisabled=!i.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),this.notifyPlugins("beforeUpdate",{mode:t,cancelable:!0})===!1)return;let r=this.buildOrUpdateControllers();this.notifyPlugins("beforeElementsUpdate");let o=0;for(let c=0,h=this.data.datasets.length;c{c.reset()}),this._updateDatasets(t),this.notifyPlugins("afterUpdate",{mode:t}),this._layers.sort(Ta("z","_idx"));let{_active:a,_lastEvent:l}=this;l?this._eventHandler(l,!0):a.length&&this._updateHoverStyles(a,a,!0),this.render()}_updateScales(){H(this.scales,t=>{lt.removeBox(this,t)}),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){let t=this.options,e=new Set(Object.keys(this._listeners)),i=new Set(t.events);(!vn(e,i)||!!this._responsiveListeners!==t.responsive)&&(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){let{_hiddenIndices:t}=this,e=this._getUniformDataChanges()||[];for(let{method:i,start:n,count:r}of e){let o=i==="_removeElements"?-r:r;ad(t,n,o)}}_getUniformDataChanges(){let t=this._dataChanges;if(!t||!t.length)return;this._dataChanges=[];let e=this.data.datasets.length,i=r=>new Set(t.filter(o=>o[0]===r).map((o,a)=>a+","+o.splice(1).join(","))),n=i(0);for(let r=1;rr.split(",")).map(r=>({method:r[1],start:+r[2],count:+r[3]}))}_updateLayout(t){if(this.notifyPlugins("beforeLayout",{cancelable:!0})===!1)return;lt.update(this,this.width,this.height,t);let e=this.chartArea,i=e.width<=0||e.height<=0;this._layers=[],H(this.boxes,n=>{i&&n.position==="chartArea"||(n.configure&&n.configure(),this._layers.push(...n._layers()))},this),this._layers.forEach((n,r)=>{n._idx=r}),this.notifyPlugins("afterLayout")}_updateDatasets(t){if(this.notifyPlugins("beforeDatasetsUpdate",{mode:t,cancelable:!0})!==!1){for(let e=0,i=this.data.datasets.length;e=0;--e)this._drawDataset(t[e]);this.notifyPlugins("afterDatasetsDraw")}_drawDataset(t){let e=this.ctx,i=t._clip,n=!i.disabled,r=this.chartArea,o={meta:t,index:t.index,cancelable:!0};this.notifyPlugins("beforeDatasetDraw",o)!==!1&&(n&&ws(e,{left:i.left===!1?0:r.left-i.left,right:i.right===!1?this.width:r.right+i.right,top:i.top===!1?0:r.top-i.top,bottom:i.bottom===!1?this.height:r.bottom+i.bottom}),t.controller.draw(),n&&Ss(e),o.cancelable=!1,this.notifyPlugins("afterDatasetDraw",o))}isPointInArea(t){return Ae(t,this.chartArea,this._minPadding)}getElementsAtEventForMode(t,e,i,n){let r=Ou.modes[e];return typeof r=="function"?r(this,t,i,n):[]}getDatasetMeta(t){let e=this.data.datasets[t],i=this._metasets,n=i.filter(r=>r&&r._dataset===e).pop();return n||(n={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e&&e.order||0,index:t,_dataset:e,_parsed:[],_sorted:!1},i.push(n)),n}getContext(){return this.$context||(this.$context=$t(null,{chart:this,type:"chart"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(t){let e=this.data.datasets[t];if(!e)return!1;let i=this.getDatasetMeta(t);return typeof i.hidden=="boolean"?!i.hidden:!e.hidden}setDatasetVisibility(t,e){let i=this.getDatasetMeta(t);i.hidden=!e}toggleDataVisibility(t){this._hiddenIndices[t]=!this._hiddenIndices[t]}getDataVisibility(t){return!this._hiddenIndices[t]}_updateVisibility(t,e,i){let n=i?"show":"hide",r=this.getDatasetMeta(t),o=r.controller._resolveAnimations(void 0,n);ft(e)?(r.data[e].hidden=!i,this.update()):(this.setDatasetVisibility(t,i),o.update(r,{visible:i}),this.update(a=>a.datasetIndex===t?n:void 0))}hide(t,e){this._updateVisibility(t,e,!1)}show(t,e){this._updateVisibility(t,e,!0)}_destroyDatasetMeta(t){let e=this._metasets[t];e&&e.controller&&e.controller._destroy(),delete this._metasets[t]}_stop(){let t,e;for(this.stop(),jt.remove(this),t=0,e=this.data.datasets.length;t{e.addEventListener(this,r,o),t[r]=o},n=(r,o,a)=>{r.offsetX=o,r.offsetY=a,this._eventHandler(r)};H(this.options.events,r=>i(r,n))}bindResponsiveEvents(){this._responsiveListeners||(this._responsiveListeners={});let t=this._responsiveListeners,e=this.platform,i=(l,c)=>{e.addEventListener(this,l,c),t[l]=c},n=(l,c)=>{t[l]&&(e.removeEventListener(this,l,c),delete t[l])},r=(l,c)=>{this.canvas&&this.resize(l,c)},o,a=()=>{n("attach",a),this.attached=!0,this.resize(),i("resize",r),i("detach",o)};o=()=>{this.attached=!1,n("resize",r),this._stop(),this._resize(0,0),i("attach",a)},e.isAttached(this.canvas)?a():o()}unbindEvents(){H(this._listeners,(t,e)=>{this.platform.removeEventListener(this,e,t)}),this._listeners={},H(this._responsiveListeners,(t,e)=>{this.platform.removeEventListener(this,e,t)}),this._responsiveListeners=void 0}updateHoverStyle(t,e,i){let n=i?"set":"remove",r,o,a,l;for(e==="dataset"&&(r=this.getDatasetMeta(t[0].datasetIndex),r.controller["_"+n+"DatasetHoverStyle"]()),a=0,l=t.length;a{let a=this.getDatasetMeta(r);if(!a)throw new Error("No dataset found at index "+r);return{datasetIndex:r,element:a.data[o],index:o}});!xs(i,e)&&(this._active=i,this._lastEvent=null,this._updateHoverStyles(i,e))}notifyPlugins(t,e,i){return this._plugins.notify(this,t,e,i)}_updateHoverStyles(t,e,i){let n=this.options.hover,r=(l,c)=>l.filter(h=>!c.some(u=>h.datasetIndex===u.datasetIndex&&h.index===u.index)),o=r(e,t),a=i?t:r(t,e);o.length&&this.updateHoverStyle(o,n.mode,!1),a.length&&n.mode&&this.updateHoverStyle(a,n.mode,!0)}_eventHandler(t,e){let i={event:t,replay:e,cancelable:!0,inChartArea:this.isPointInArea(t)},n=o=>(o.options.events||this.options.events).includes(t.native.type);if(this.notifyPlugins("beforeEvent",i,n)===!1)return;let r=this._handleEvent(t,e,i.inChartArea);return i.cancelable=!1,this.notifyPlugins("afterEvent",i,n),(r||i.changed)&&this.render(),this}_handleEvent(t,e,i){let{_active:n=[],options:r}=this,o=e,a=this._getActiveElements(t,n,i,o),l=Oo(t),c=ld(t,this._lastEvent,i,l);i&&(this._lastEvent=null,j(r.onHover,[t,a,this],this),l&&j(r.onClick,[t,a,this],this));let h=!xs(a,n);return(h||e)&&(this._active=a,this._updateHoverStyles(a,n,e)),this._lastEvent=c,h}_getActiveElements(t,e,i,n){if(t.type==="mouseout")return[];if(!i)return e;let r=this.options.hover;return this.getElementsAtEventForMode(t,r.mode,r,n)}},Oa=()=>H(xe.instances,s=>s._plugins.invalidate()),ne=!0;Object.defineProperties(xe,{defaults:{enumerable:ne,value:L},instances:{enumerable:ne,value:ji},overrides:{enumerable:ne,value:Qt},registry:{enumerable:ne,value:Pt},version:{enumerable:ne,value:nd},getChart:{enumerable:ne,value:rl},register:{enumerable:ne,value:(...s)=>{Pt.add(...s),Oa()}},unregister:{enumerable:ne,value:(...s)=>{Pt.remove(...s),Oa()}}});function ol(s,t,e){let{startAngle:i,pixelMargin:n,x:r,y:o,outerRadius:a,innerRadius:l}=t,c=n/a;s.beginPath(),s.arc(r,o,a,i-c,e+c),l>n?(c=n/l,s.arc(r,o,l,e+c,i-c,!0)):s.arc(r,o,n,e+Z,i-Z),s.closePath(),s.clip()}function cd(s){return Ii(s,["outerStart","outerEnd","innerStart","innerEnd"])}function hd(s,t,e,i){let n=cd(s.options.borderRadius),r=(e-t)/2,o=Math.min(r,i*t/2),a=l=>{let c=(e-Math.min(r,l))*i/2;return it(l,0,Math.min(r,c))};return{outerStart:a(n.outerStart),outerEnd:a(n.outerEnd),innerStart:it(n.innerStart,0,o),innerEnd:it(n.innerEnd,0,o)}}function He(s,t,e,i){return{x:e+s*Math.cos(t),y:i+s*Math.sin(t)}}function xr(s,t,e,i,n,r){let{x:o,y:a,startAngle:l,pixelMargin:c,innerRadius:h}=t,u=Math.max(t.outerRadius+i+e-c,0),d=h>0?h+i+e+c:0,f=0,m=n-l;if(i){let E=h>0?h-i:0,tt=u>0?u-i:0,J=(E+tt)/2,fe=J!==0?m*J/(J+i):m;f=(m-fe)/2}let g=Math.max(.001,m*u-e/Y)/u,p=(m-g)/2,y=l+p+f,b=n-p-f,{outerStart:_,outerEnd:w,innerStart:x,innerEnd:S}=hd(t,d,u,b-y),k=u-_,O=u-w,T=y+_/k,F=b-w/O,W=d+x,P=d+S,Q=y+x/W,ct=b-S/P;if(s.beginPath(),r){if(s.arc(o,a,u,T,F),w>0){let J=He(O,F,o,a);s.arc(J.x,J.y,w,F,b+Z)}let E=He(P,b,o,a);if(s.lineTo(E.x,E.y),S>0){let J=He(P,ct,o,a);s.arc(J.x,J.y,S,b+Z,ct+Math.PI)}if(s.arc(o,a,d,b-S/d,y+x/d,!0),x>0){let J=He(W,Q,o,a);s.arc(J.x,J.y,x,Q+Math.PI,y-Z)}let tt=He(k,y,o,a);if(s.lineTo(tt.x,tt.y),_>0){let J=He(k,T,o,a);s.arc(J.x,J.y,_,y-Z,T)}}else{s.moveTo(o,a);let E=Math.cos(T)*u+o,tt=Math.sin(T)*u+a;s.lineTo(E,tt);let J=Math.cos(F)*u+o,fe=Math.sin(F)*u+a;s.lineTo(J,fe)}s.closePath()}function ud(s,t,e,i,n){let{fullCircles:r,startAngle:o,circumference:a}=t,l=t.endAngle;if(r){xr(s,t,e,i,o+B,n);for(let c=0;c=B||Re(r,a,l),g=At(o,c+d,h+d);return m&&g}getCenterPoint(t){let{x:e,y:i,startAngle:n,endAngle:r,innerRadius:o,outerRadius:a}=this.getProps(["x","y","startAngle","endAngle","innerRadius","outerRadius","circumference"],t),{offset:l,spacing:c}=this.options,h=(n+r)/2,u=(o+a+c+l)/2;return{x:e+Math.cos(h)*u,y:i+Math.sin(h)*u}}tooltipPosition(t){return this.getCenterPoint(t)}draw(t){let{options:e,circumference:i}=this,n=(e.offset||0)/2,r=(e.spacing||0)/2,o=e.circular;if(this.pixelMargin=e.borderAlign==="inner"?.33:0,this.fullCircles=i>B?Math.floor(i/B):0,i===0||this.innerRadius<0||this.outerRadius<0)return;t.save();let a=0;if(n){a=n/2;let c=(this.startAngle+this.endAngle)/2;t.translate(Math.cos(c)*a,Math.sin(c)*a),this.circumference>=Y&&(a=n)}t.fillStyle=e.backgroundColor,t.strokeStyle=e.borderColor;let l=ud(t,this,a,r,o);fd(t,this,a,r,l,o),t.restore()}};Ge.id="arc";Ge.defaults={borderAlign:"center",borderColor:"#fff",borderJoinStyle:void 0,borderRadius:0,borderWidth:2,offset:0,spacing:0,angle:void 0,circular:!0};Ge.defaultRoutes={backgroundColor:"backgroundColor"};function al(s,t,e=t){s.lineCap=I(e.borderCapStyle,t.borderCapStyle),s.setLineDash(I(e.borderDash,t.borderDash)),s.lineDashOffset=I(e.borderDashOffset,t.borderDashOffset),s.lineJoin=I(e.borderJoinStyle,t.borderJoinStyle),s.lineWidth=I(e.borderWidth,t.borderWidth),s.strokeStyle=I(e.borderColor,t.borderColor)}function md(s,t,e){s.lineTo(e.x,e.y)}function gd(s){return s.stepped?$o:s.tension||s.cubicInterpolationMode==="monotone"?jo:md}function ll(s,t,e={}){let i=s.length,{start:n=0,end:r=i-1}=e,{start:o,end:a}=t,l=Math.max(n,o),c=Math.min(r,a),h=na&&r>a;return{count:i,start:l,loop:t.loop,ilen:c(o+(c?a-w:w))%r,_=()=>{g!==p&&(s.lineTo(h,p),s.lineTo(h,g),s.lineTo(h,y))};for(l&&(f=n[b(0)],s.moveTo(f.x,f.y)),d=0;d<=a;++d){if(f=n[b(d)],f.skip)continue;let w=f.x,x=f.y,S=w|0;S===m?(xp&&(p=x),h=(u*h+w)/++u):(_(),s.lineTo(w,x),m=S,u=0,g=p=x),y=x}_()}function _r(s){let t=s.options,e=t.borderDash&&t.borderDash.length;return!s._decimated&&!s._loop&&!t.tension&&t.cubicInterpolationMode!=="monotone"&&!t.stepped&&!e?yd:pd}function bd(s){return s.stepped?Qo:s.tension||s.cubicInterpolationMode==="monotone"?ta:Xt}function xd(s,t,e,i){let n=t._path;n||(n=t._path=new Path2D,t.path(n,e,i)&&n.closePath()),al(s,t.options),s.stroke(n)}function _d(s,t,e,i){let{segments:n,options:r}=t,o=_r(t);for(let a of n)al(s,r,a.style),s.beginPath(),o(s,t,a,{start:e,end:e+i-1})&&s.closePath(),s.stroke()}var wd=typeof Path2D=="function";function Sd(s,t,e,i){wd&&!t.options.segment?xd(s,t,e,i):_d(s,t,e,i)}var Nt=class extends yt{constructor(t){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,t&&Object.assign(this,t)}updateControlPoints(t,e){let i=this.options;if((i.tension||i.cubicInterpolationMode==="monotone")&&!i.stepped&&!this._pointsUpdated){let n=i.spanGaps?this._loop:this._fullLoop;Xo(this._points,i,t,n,e),this._pointsUpdated=!0}}set points(t){this._points=t,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=sa(this,this.options.segment))}first(){let t=this.segments,e=this.points;return t.length&&e[t[0].start]}last(){let t=this.segments,e=this.points,i=t.length;return i&&e[t[i-1].end]}interpolate(t,e){let i=this.options,n=t[e],r=this.points,o=tr(this,{property:e,start:n,end:n});if(!o.length)return;let a=[],l=bd(i),c,h;for(c=0,h=o.length;cs!=="borderDash"&&s!=="fill"};function Da(s,t,e,i){let n=s.options,{[e]:r}=s.getProps([e],i);return Math.abs(t-r)=e)return s.slice(t,t+e);let o=[],a=(e-2)/(r-2),l=0,c=t+e-1,h=t,u,d,f,m,g;for(o[l++]=s[h],u=0;uf&&(f=m,d=s[b],g=b);o[l++]=d,h=g}return o[l++]=s[c],o}function Id(s,t,e,i){let n=0,r=0,o,a,l,c,h,u,d,f,m,g,p=[],y=t+e-1,b=s[t].x,w=s[y].x-b;for(o=t;og&&(g=c,d=o),n=(r*n+a.x)/++r;else{let S=o-1;if(!R(u)&&!R(d)){let k=Math.min(u,d),O=Math.max(u,d);k!==f&&k!==S&&p.push({...s[k],x:n}),O!==f&&O!==S&&p.push({...s[O],x:n})}o>0&&S!==f&&p.push(s[S]),p.push(a),h=x,r=0,m=g=c,u=d=f=o}}return p}function hl(s){if(s._decimated){let t=s._data;delete s._decimated,delete s._data,Object.defineProperty(s,"data",{value:t})}}function Ea(s){s.data.datasets.forEach(t=>{hl(t)})}function Cd(s,t){let e=t.length,i=0,n,{iScale:r}=s,{min:o,max:a,minDefined:l,maxDefined:c}=r.getUserBounds();return l&&(i=it(Ct(t,r.axis,o).lo,0,e-1)),c?n=it(Ct(t,r.axis,a).hi+1,i,e)-i:n=e-i,{start:i,count:n}}var Fd={id:"decimation",defaults:{algorithm:"min-max",enabled:!1},beforeElementsUpdate:(s,t,e)=>{if(!e.enabled){Ea(s);return}let i=s.width;s.data.datasets.forEach((n,r)=>{let{_data:o,indexAxis:a}=n,l=s.getDatasetMeta(r),c=o||n.data;if(ze([a,s.options.indexAxis])==="y"||!l.controller.supportsDecimation)return;let h=s.scales[l.xAxisID];if(h.type!=="linear"&&h.type!=="time"||s.options.parsing)return;let{start:u,count:d}=Cd(l,c),f=e.threshold||4*i;if(d<=f){hl(n);return}R(o)&&(n._data=c,delete n.data,Object.defineProperty(n,"data",{configurable:!0,enumerable:!0,get:function(){return this._decimated},set:function(g){this._data=g}}));let m;switch(e.algorithm){case"lttb":m=Ed(c,u,d,i,e);break;case"min-max":m=Id(c,u,d,i);break;default:throw new Error(`Unsupported decimation algorithm '${e.algorithm}'`)}n._decimated=m})},destroy(s){Ea(s)}};function Ad(s,t,e){let i=s.segments,n=s.points,r=t.points,o=[];for(let a of i){let{start:l,end:c}=a;c=Mr(l,c,n);let h=wr(e,n[l],n[c],a.loop);if(!t.segments){o.push({source:a,target:h,start:n[l],end:n[c]});continue}let u=tr(t,h);for(let d of u){let f=wr(e,r[d.start],r[d.end],d.loop),m=Qn(a,n,f);for(let g of m)o.push({source:g,target:d,start:{[e]:Ia(h,f,"start",Math.max)},end:{[e]:Ia(h,f,"end",Math.min)}})}}return o}function wr(s,t,e,i){if(i)return;let n=t[s],r=e[s];return s==="angle"&&(n=ht(n),r=ht(r)),{property:s,start:n,end:r}}function Ld(s,t){let{x:e=null,y:i=null}=s||{},n=t.points,r=[];return t.segments.forEach(({start:o,end:a})=>{a=Mr(o,a,n);let l=n[o],c=n[a];i!==null?(r.push({x:l.x,y:i}),r.push({x:c.x,y:i})):e!==null&&(r.push({x:e,y:l.y}),r.push({x:e,y:c.y}))}),r}function Mr(s,t,e){for(;t>s;t--){let i=e[t];if(!isNaN(i.x)&&!isNaN(i.y))break}return t}function Ia(s,t,e,i){return s&&t?i(s[e],t[e]):s?s[e]:t?t[e]:0}function ul(s,t){let e=[],i=!1;return $(s)?(i=!0,e=s):e=Ld(s,t),e.length?new Nt({points:e,options:{tension:0},_loop:i,_fullLoop:i}):null}function Ca(s){return s&&s.fill!==!1}function Pd(s,t,e){let n=s[t].fill,r=[t],o;if(!e)return n;for(;n!==!1&&r.indexOf(n)===-1;){if(!K(n))return n;if(o=s[n],!o)return!1;if(o.visible)return n;r.push(n),n=o.fill}return!1}function Nd(s,t,e){let i=Vd(s);if(A(i))return isNaN(i.value)?!1:i;let n=parseFloat(i);return K(n)&&Math.floor(n)===n?Rd(i[0],t,n,e):["origin","start","end","stack","shape"].indexOf(i)>=0&&i}function Rd(s,t,e,i){return(s==="-"||s==="+")&&(e=t+e),e===t||e<0||e>=i?!1:e}function Wd(s,t){let e=null;return s==="start"?e=t.bottom:s==="end"?e=t.top:A(s)?e=t.getPixelForValue(s.value):t.getBasePixel&&(e=t.getBasePixel()),e}function zd(s,t,e){let i;return s==="start"?i=e:s==="end"?i=t.options.reverse?t.min:t.max:A(s)?i=s.value:i=t.getBaseValue(),i}function Vd(s){let t=s.options,e=t.fill,i=I(e&&e.target,e);return i===void 0&&(i=!!t.backgroundColor),i===!1||i===null?!1:i===!0?"origin":i}function Hd(s){let{scale:t,index:e,line:i}=s,n=[],r=i.segments,o=i.points,a=Bd(t,e);a.push(ul({x:null,y:t.bottom},i));for(let l=0;l=0;--o){let a=n[o].$filler;a&&(a.line.updateControlPoints(r,a.axis),i&&a.fill&&cr(s.ctx,a,r))}},beforeDatasetsDraw(s,t,e){if(e.drawTime!=="beforeDatasetsDraw")return;let i=s.getSortedVisibleDatasetMetas();for(let n=i.length-1;n>=0;--n){let r=i[n].$filler;Ca(r)&&cr(s.ctx,r,s.chartArea)}},beforeDatasetDraw(s,t,e){let i=t.meta.$filler;!Ca(i)||e.drawTime!=="beforeDatasetDraw"||cr(s.ctx,i,s.chartArea)},defaults:{propagate:!0,drawTime:"beforeDatasetDraw"}},Pa=(s,t)=>{let{boxHeight:e=t,boxWidth:i=t}=s;return s.usePointStyle&&(e=Math.min(e,t),i=s.pointStyleWidth||Math.min(i,t)),{boxWidth:i,boxHeight:e,itemHeight:Math.max(t,e)}},Qd=(s,t)=>s!==null&&t!==null&&s.datasetIndex===t.datasetIndex&&s.index===t.index,Yi=class extends yt{constructor(t){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e,i){this.maxWidth=t,this.maxHeight=e,this._margins=i,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){let t=this.options.labels||{},e=j(t.generateLabels,[this.chart],this)||[];t.filter&&(e=e.filter(i=>t.filter(i,this.chart.data))),t.sort&&(e=e.sort((i,n)=>t.sort(i,n,this.chart.data))),this.options.reverse&&e.reverse(),this.legendItems=e}fit(){let{options:t,ctx:e}=this;if(!t.display){this.width=this.height=0;return}let i=t.labels,n=et(i.font),r=n.size,o=this._computeTitleHeight(),{boxWidth:a,itemHeight:l}=Pa(i,r),c,h;e.font=n.string,this.isHorizontal()?(c=this.maxWidth,h=this._fitRows(o,r,a,l)+10):(h=this.maxHeight,c=this._fitCols(o,r,a,l)+10),this.width=Math.min(c,t.maxWidth||this.maxWidth),this.height=Math.min(h,t.maxHeight||this.maxHeight)}_fitRows(t,e,i,n){let{ctx:r,maxWidth:o,options:{labels:{padding:a}}}=this,l=this.legendHitBoxes=[],c=this.lineWidths=[0],h=n+a,u=t;r.textAlign="left",r.textBaseline="middle";let d=-1,f=-h;return this.legendItems.forEach((m,g)=>{let p=i+e/2+r.measureText(m.text).width;(g===0||c[c.length-1]+p+2*a>o)&&(u+=h,c[c.length-(g>0?0:1)]=0,f+=h,d++),l[g]={left:0,top:f,row:d,width:p,height:n},c[c.length-1]+=p+a}),u}_fitCols(t,e,i,n){let{ctx:r,maxHeight:o,options:{labels:{padding:a}}}=this,l=this.legendHitBoxes=[],c=this.columnSizes=[],h=o-t,u=a,d=0,f=0,m=0,g=0;return this.legendItems.forEach((p,y)=>{let b=i+e/2+r.measureText(p.text).width;y>0&&f+n+2*a>h&&(u+=d+a,c.push({width:d,height:f}),m+=d+a,g++,d=f=0),l[y]={left:m,top:f,col:g,width:b,height:n},d=Math.max(d,b),f+=n+a}),u+=d,c.push({width:d,height:f}),u}adjustHitBoxes(){if(!this.options.display)return;let t=this._computeTitleHeight(),{legendHitBoxes:e,options:{align:i,labels:{padding:n},rtl:r}}=this,o=ye(r,this.left,this.width);if(this.isHorizontal()){let a=0,l=ot(i,this.left+n,this.right-this.lineWidths[a]);for(let c of e)a!==c.row&&(a=c.row,l=ot(i,this.left+n,this.right-this.lineWidths[a])),c.top+=this.top+t+n,c.left=o.leftForLtr(o.x(l),c.width),l+=c.width+n}else{let a=0,l=ot(i,this.top+t+n,this.bottom-this.columnSizes[a].height);for(let c of e)c.col!==a&&(a=c.col,l=ot(i,this.top+t+n,this.bottom-this.columnSizes[a].height)),c.top=l,c.left+=this.left+n,c.left=o.leftForLtr(o.x(c.left),c.width),l+=c.height+n}}isHorizontal(){return this.options.position==="top"||this.options.position==="bottom"}draw(){if(this.options.display){let t=this.ctx;ws(t,this),this._draw(),Ss(t)}}_draw(){let{options:t,columnSizes:e,lineWidths:i,ctx:n}=this,{align:r,labels:o}=t,a=L.color,l=ye(t.rtl,this.left,this.width),c=et(o.font),{color:h,padding:u}=o,d=c.size,f=d/2,m;this.drawTitle(),n.textAlign=l.textAlign("left"),n.textBaseline="middle",n.lineWidth=.5,n.font=c.string;let{boxWidth:g,boxHeight:p,itemHeight:y}=Pa(o,d),b=function(k,O,T){if(isNaN(g)||g<=0||isNaN(p)||p<0)return;n.save();let F=I(T.lineWidth,1);if(n.fillStyle=I(T.fillStyle,a),n.lineCap=I(T.lineCap,"butt"),n.lineDashOffset=I(T.lineDashOffset,0),n.lineJoin=I(T.lineJoin,"miter"),n.lineWidth=F,n.strokeStyle=I(T.strokeStyle,a),n.setLineDash(I(T.lineDash,[])),o.usePointStyle){let W={radius:p*Math.SQRT2/2,pointStyle:T.pointStyle,rotation:T.rotation,borderWidth:F},P=l.xPlus(k,g/2),Q=O+f;Bn(n,W,P,Q,o.pointStyleWidth&&g)}else{let W=O+Math.max((d-p)/2,0),P=l.leftForLtr(k,g),Q=se(T.borderRadius);n.beginPath(),Object.values(Q).some(ct=>ct!==0)?We(n,{x:P,y:W,w:g,h:p,radius:Q}):n.rect(P,W,g,p),n.fill(),F!==0&&n.stroke()}n.restore()},_=function(k,O,T){ee(n,T.text,k,O+y/2,c,{strikethrough:T.hidden,textAlign:l.textAlign(T.textAlign)})},w=this.isHorizontal(),x=this._computeTitleHeight();w?m={x:ot(r,this.left+u,this.right-i[0]),y:this.top+u+x,line:0}:m={x:this.left+u,y:ot(r,this.top+x+u,this.bottom-e[0].height),line:0},Kn(this.ctx,t.textDirection);let S=y+u;this.legendItems.forEach((k,O)=>{n.strokeStyle=k.fontColor||h,n.fillStyle=k.fontColor||h;let T=n.measureText(k.text).width,F=l.textAlign(k.textAlign||(k.textAlign=o.textAlign)),W=g+f+T,P=m.x,Q=m.y;l.setWidth(this.width),w?O>0&&P+W+u>this.right&&(Q=m.y+=S,m.line++,P=m.x=ot(r,this.left+u,this.right-i[m.line])):O>0&&Q+S>this.bottom&&(P=m.x=P+e[m.line].width+u,m.line++,Q=m.y=ot(r,this.top+x+u,this.bottom-e[m.line].height));let ct=l.x(P);b(ct,Q,k),P=No(F,P+g+f,w?P+W:this.right,t.rtl),_(l.x(P),Q,k),w?m.x+=W+u:m.y+=S}),Jn(this.ctx,t.textDirection)}drawTitle(){let t=this.options,e=t.title,i=et(e.font),n=at(e.padding);if(!e.display)return;let r=ye(t.rtl,this.left,this.width),o=this.ctx,a=e.position,l=i.size/2,c=n.top+l,h,u=this.left,d=this.width;if(this.isHorizontal())d=Math.max(...this.lineWidths),h=this.top+c,u=ot(t.align,u,this.right-d);else{let m=this.columnSizes.reduce((g,p)=>Math.max(g,p.height),0);h=c+ot(t.align,this.top,this.bottom-m-t.labels.padding-this._computeTitleHeight())}let f=ot(a,u,u+d);o.textAlign=r.textAlign(Oi(a)),o.textBaseline="middle",o.strokeStyle=e.color,o.fillStyle=e.color,o.font=i.string,ee(o,e.text,f,h,i)}_computeTitleHeight(){let t=this.options.title,e=et(t.font),i=at(t.padding);return t.display?e.lineHeight+i.height:0}_getLegendItemAt(t,e){let i,n,r;if(At(t,this.left,this.right)&&At(e,this.top,this.bottom)){for(r=this.legendHitBoxes,i=0;is.chart.options.color,boxWidth:40,padding:10,generateLabels(s){let t=s.data.datasets,{labels:{usePointStyle:e,pointStyle:i,textAlign:n,color:r}}=s.legend.options;return s._getSortedDatasetMetas().map(o=>{let a=o.controller.getStyle(e?0:void 0),l=at(a.borderWidth);return{text:t[o.index].label,fillStyle:a.backgroundColor,fontColor:r,hidden:!o.visible,lineCap:a.borderCapStyle,lineDash:a.borderDash,lineDashOffset:a.borderDashOffset,lineJoin:a.borderJoinStyle,lineWidth:(l.width+l.height)/4,strokeStyle:a.borderColor,pointStyle:i||a.pointStyle,rotation:a.rotation,textAlign:n||a.textAlign,borderRadius:0,datasetIndex:o.index}},this)}},title:{color:s=>s.chart.options.color,display:!1,position:"center",text:""}},descriptors:{_scriptable:s=>!s.startsWith("on"),labels:{_scriptable:s=>!["generateLabels","filter","sort"].includes(s)}}},As=class extends yt{constructor(t){super(),this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this._padding=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e){let i=this.options;if(this.left=0,this.top=0,!i.display){this.width=this.height=this.right=this.bottom=0;return}this.width=this.right=t,this.height=this.bottom=e;let n=$(i.text)?i.text.length:1;this._padding=at(i.padding);let r=n*et(i.font).lineHeight+this._padding.height;this.isHorizontal()?this.height=r:this.width=r}isHorizontal(){let t=this.options.position;return t==="top"||t==="bottom"}_drawArgs(t){let{top:e,left:i,bottom:n,right:r,options:o}=this,a=o.align,l=0,c,h,u;return this.isHorizontal()?(h=ot(a,i,r),u=e+t,c=r-i):(o.position==="left"?(h=i+t,u=ot(a,n,e),l=Y*-.5):(h=r-t,u=ot(a,e,n),l=Y*.5),c=n-e),{titleX:h,titleY:u,maxWidth:c,rotation:l}}draw(){let t=this.ctx,e=this.options;if(!e.display)return;let i=et(e.font),r=i.lineHeight/2+this._padding.top,{titleX:o,titleY:a,maxWidth:l,rotation:c}=this._drawArgs(r);ee(t,e.text,0,0,i,{color:e.color,maxWidth:l,rotation:c,textAlign:Oi(e.align),textBaseline:"middle",translation:[o,a]})}};function sf(s,t){let e=new As({ctx:s.ctx,options:t,chart:s});lt.configure(s,e,t),lt.addBox(s,e),s.titleBlock=e}var nf={id:"title",_element:As,start(s,t,e){sf(s,e)},stop(s){let t=s.titleBlock;lt.removeBox(s,t),delete s.titleBlock},beforeUpdate(s,t,e){let i=s.titleBlock;lt.configure(s,i,e),i.options=e},defaults:{align:"center",display:!1,font:{weight:"bold"},fullSize:!0,padding:10,position:"top",text:"",weight:2e3},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}},Ri=new WeakMap,rf={id:"subtitle",start(s,t,e){let i=new As({ctx:s.ctx,options:e,chart:s});lt.configure(s,i,e),lt.addBox(s,i),Ri.set(s,i)},stop(s){lt.removeBox(s,Ri.get(s)),Ri.delete(s)},beforeUpdate(s,t,e){let i=Ri.get(s);lt.configure(s,i,e),i.options=e},defaults:{align:"center",display:!1,font:{weight:"normal"},fullSize:!0,padding:0,position:"top",text:"",weight:1500},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}},Es={average(s){if(!s.length)return!1;let t,e,i=0,n=0,r=0;for(t=0,e=s.length;t"u"}function $(s){if(Array.isArray&&Array.isArray(s))return!0;let t=Object.prototype.toString.call(s);return t.slice(0,7)==="[object"&&t.slice(-6)==="Array]"}function A(s){return s!==null&&Object.prototype.toString.call(s)==="[object Object]"}var K=s=>(typeof s=="number"||s instanceof Number)&&isFinite(+s);function mt(s,t){return K(s)?s:t}function C(s,t){return typeof s>"u"?t:s}var Eo=(s,t)=>typeof s=="string"&&s.endsWith("%")?parseFloat(s)/100:s/t,En=(s,t)=>typeof s=="string"&&s.endsWith("%")?parseFloat(s)/100*t:+s;function j(s,t,e){if(s&&typeof s.call=="function")return s.apply(e,t)}function H(s,t,e,i){let n,r,o;if($(s))if(r=s.length,i)for(n=r-1;n>=0;n--)t.call(e,s[n],n);else for(n=0;ns,x:s=>s.x,y:s=>s.y};function Bt(s,t){return(mo[t]||(mo[t]=Cc(t)))(s)}function Cc(s){let t=Ic(s);return e=>{for(let i of t){if(i==="")break;e=e&&e[i]}return e}}function Ic(s){let t=s.split("."),e=[],i="";for(let n of t)i+=n,i.endsWith("\\")?i=i.slice(0,-1)+".":(e.push(i),i="");return e}function Oi(s){return s.charAt(0).toUpperCase()+s.slice(1)}var ft=s=>typeof s<"u",Ht=s=>typeof s=="function",Cn=(s,t)=>{if(s.size!==t.size)return!1;for(let e of s)if(!t.has(e))return!1;return!0};function Io(s){return s.type==="mouseup"||s.type==="click"||s.type==="contextmenu"}var Y=Math.PI,B=2*Y,Fc=B+Y,Mi=Number.POSITIVE_INFINITY,Ac=Y/180,Z=Y/2,ys=Y/4,go=Y*2/3,gt=Math.log10,Tt=Math.sign;function In(s){let t=Math.round(s);s=Re(s,t,s/1e3)?t:s;let e=Math.pow(10,Math.floor(gt(s))),i=s/e;return(i<=1?1:i<=2?2:i<=5?5:10)*e}function Fo(s){let t=[],e=Math.sqrt(s),i;for(i=1;in-r).pop(),t}function pe(s){return!isNaN(parseFloat(s))&&isFinite(s)}function Re(s,t,e){return Math.abs(s-t)=s}function Fn(s,t,e){let i,n,r;for(i=0,n=s.length;il&&c=Math.min(t,e)-i&&s<=Math.max(t,e)+i}function Ei(s,t,e){e=e||(o=>s[o]1;)r=n+i>>1,e(r)?n=r:i=r;return{lo:n,hi:i}}var Ft=(s,t,e,i)=>Ei(s,e,i?n=>s[n][t]<=e:n=>s[n][t]Ei(s,e,i=>s[i][t]>=e);function Ro(s,t,e){let i=0,n=s.length;for(;ii&&s[n-1]>e;)n--;return i>0||n{let i="_onData"+Oi(e),n=s[e];Object.defineProperty(s,e,{configurable:!0,enumerable:!1,value(...r){let o=n.apply(this,r);return s._chartjs.listeners.forEach(a=>{typeof a[i]=="function"&&a[i](...r)}),o}})})}function Pn(s,t){let e=s._chartjs;if(!e)return;let i=e.listeners,n=i.indexOf(t);n!==-1&&i.splice(n,1),!(i.length>0)&&(No.forEach(r=>{delete s[r]}),delete s._chartjs)}function Rn(s){let t=new Set,e,i;for(e=0,i=s.length;e"u"?function(s){return s()}:window.requestAnimationFrame}();function Wn(s,t,e){let i=e||(o=>Array.prototype.slice.call(o)),n=!1,r=[];return function(...o){r=i(o),n||(n=!0,Nn.call(window,()=>{n=!1,s.apply(t,r)}))}}function zo(s,t){let e;return function(...i){return t?(clearTimeout(e),e=setTimeout(s,t,i)):s.apply(this,i),t}}var Ci=s=>s==="start"?"left":s==="end"?"right":"center",ot=(s,t,e)=>s==="start"?t:s==="end"?e:(t+e)/2,Vo=(s,t,e,i)=>s===(i?"left":"right")?e:s==="center"?(t+e)/2:t;function zn(s,t,e){let i=t.length,n=0,r=i;if(s._sorted){let{iScale:o,_parsed:a}=s,l=o.axis,{min:c,max:h,minDefined:u,maxDefined:d}=o.getUserBounds();u&&(n=it(Math.min(Ft(a,o.axis,c).lo,e?i:Ft(t,l,o.getPixelForValue(c)).lo),0,i-1)),d?r=it(Math.max(Ft(a,o.axis,h,!0).hi+1,e?0:Ft(t,l,o.getPixelForValue(h),!0).hi+1),n,i)-n:r=i-n}return{start:n,count:r}}function Vn(s){let{xScale:t,yScale:e,_scaleRanges:i}=s,n={xmin:t.min,xmax:t.max,ymin:e.min,ymax:e.max};if(!i)return s._scaleRanges=n,!0;let r=i.xmin!==t.min||i.xmax!==t.max||i.ymin!==e.min||i.ymax!==e.max;return Object.assign(i,n),r}var bi=s=>s===0||s===1,po=(s,t,e)=>-(Math.pow(2,10*(s-=1))*Math.sin((s-t)*B/e)),yo=(s,t,e)=>Math.pow(2,-10*s)*Math.sin((s-t)*B/e)+1,Ce={linear:s=>s,easeInQuad:s=>s*s,easeOutQuad:s=>-s*(s-2),easeInOutQuad:s=>(s/=.5)<1?.5*s*s:-.5*(--s*(s-2)-1),easeInCubic:s=>s*s*s,easeOutCubic:s=>(s-=1)*s*s+1,easeInOutCubic:s=>(s/=.5)<1?.5*s*s*s:.5*((s-=2)*s*s+2),easeInQuart:s=>s*s*s*s,easeOutQuart:s=>-((s-=1)*s*s*s-1),easeInOutQuart:s=>(s/=.5)<1?.5*s*s*s*s:-.5*((s-=2)*s*s*s-2),easeInQuint:s=>s*s*s*s*s,easeOutQuint:s=>(s-=1)*s*s*s*s+1,easeInOutQuint:s=>(s/=.5)<1?.5*s*s*s*s*s:.5*((s-=2)*s*s*s*s+2),easeInSine:s=>-Math.cos(s*Z)+1,easeOutSine:s=>Math.sin(s*Z),easeInOutSine:s=>-.5*(Math.cos(Y*s)-1),easeInExpo:s=>s===0?0:Math.pow(2,10*(s-1)),easeOutExpo:s=>s===1?1:-Math.pow(2,-10*s)+1,easeInOutExpo:s=>bi(s)?s:s<.5?.5*Math.pow(2,10*(s*2-1)):.5*(-Math.pow(2,-10*(s*2-1))+2),easeInCirc:s=>s>=1?s:-(Math.sqrt(1-s*s)-1),easeOutCirc:s=>Math.sqrt(1-(s-=1)*s),easeInOutCirc:s=>(s/=.5)<1?-.5*(Math.sqrt(1-s*s)-1):.5*(Math.sqrt(1-(s-=2)*s)+1),easeInElastic:s=>bi(s)?s:po(s,.075,.3),easeOutElastic:s=>bi(s)?s:yo(s,.075,.3),easeInOutElastic(s){return bi(s)?s:s<.5?.5*po(s*2,.1125,.45):.5+.5*yo(s*2-1,.1125,.45)},easeInBack(s){return s*s*((1.70158+1)*s-1.70158)},easeOutBack(s){return(s-=1)*s*((1.70158+1)*s+1.70158)+1},easeInOutBack(s){let t=1.70158;return(s/=.5)<1?.5*(s*s*(((t*=1.525)+1)*s-t)):.5*((s-=2)*s*(((t*=1.525)+1)*s+t)+2)},easeInBounce:s=>1-Ce.easeOutBounce(1-s),easeOutBounce(s){return s<1/2.75?7.5625*s*s:s<2/2.75?7.5625*(s-=1.5/2.75)*s+.75:s<2.5/2.75?7.5625*(s-=2.25/2.75)*s+.9375:7.5625*(s-=2.625/2.75)*s+.984375},easeInOutBounce:s=>s<.5?Ce.easeInBounce(s*2)*.5:Ce.easeOutBounce(s*2-1)*.5+.5};function Ss(s){return s+.5|0}var Kt=(s,t,e)=>Math.max(Math.min(s,e),t);function bs(s){return Kt(Ss(s*2.55),0,255)}function Jt(s){return Kt(Ss(s*255),0,255)}function Vt(s){return Kt(Ss(s/2.55)/100,0,1)}function bo(s){return Kt(Ss(s*100),0,100)}var _t={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},On=[..."0123456789ABCDEF"],Pc=s=>On[s&15],Rc=s=>On[(s&240)>>4]+On[s&15],xi=s=>(s&240)>>4===(s&15),Nc=s=>xi(s.r)&&xi(s.g)&&xi(s.b)&&xi(s.a);function Wc(s){var t=s.length,e;return s[0]==="#"&&(t===4||t===5?e={r:255&_t[s[1]]*17,g:255&_t[s[2]]*17,b:255&_t[s[3]]*17,a:t===5?_t[s[4]]*17:255}:(t===7||t===9)&&(e={r:_t[s[1]]<<4|_t[s[2]],g:_t[s[3]]<<4|_t[s[4]],b:_t[s[5]]<<4|_t[s[6]],a:t===9?_t[s[7]]<<4|_t[s[8]]:255})),e}var zc=(s,t)=>s<255?t(s):"";function Vc(s){var t=Nc(s)?Pc:Rc;return s?"#"+t(s.r)+t(s.g)+t(s.b)+zc(s.a,t):void 0}var Hc=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function Ho(s,t,e){let i=t*Math.min(e,1-e),n=(r,o=(r+s/30)%12)=>e-i*Math.max(Math.min(o-3,9-o,1),-1);return[n(0),n(8),n(4)]}function Bc(s,t,e){let i=(n,r=(n+s/60)%6)=>e-e*t*Math.max(Math.min(r,4-r,1),0);return[i(5),i(3),i(1)]}function $c(s,t,e){let i=Ho(s,1,.5),n;for(t+e>1&&(n=1/(t+e),t*=n,e*=n),n=0;n<3;n++)i[n]*=1-t-e,i[n]+=t;return i}function jc(s,t,e,i,n){return s===n?(t-e)/i+(t.5?h/(2-r-o):h/(r+o),l=jc(e,i,n,h,r),l=l*60+.5),[l|0,c||0,a]}function Bn(s,t,e,i){return(Array.isArray(t)?s(t[0],t[1],t[2]):s(t,e,i)).map(Jt)}function $n(s,t,e){return Bn(Ho,s,t,e)}function Uc(s,t,e){return Bn($c,s,t,e)}function Yc(s,t,e){return Bn(Bc,s,t,e)}function Bo(s){return(s%360+360)%360}function Zc(s){let t=Hc.exec(s),e=255,i;if(!t)return;t[5]!==i&&(e=t[6]?bs(+t[5]):Jt(+t[5]));let n=Bo(+t[2]),r=+t[3]/100,o=+t[4]/100;return t[1]==="hwb"?i=Uc(n,r,o):t[1]==="hsv"?i=Yc(n,r,o):i=$n(n,r,o),{r:i[0],g:i[1],b:i[2],a:e}}function qc(s,t){var e=Hn(s);e[0]=Bo(e[0]+t),e=$n(e),s.r=e[0],s.g=e[1],s.b=e[2]}function Gc(s){if(!s)return;let t=Hn(s),e=t[0],i=bo(t[1]),n=bo(t[2]);return s.a<255?`hsla(${e}, ${i}%, ${n}%, ${Vt(s.a)})`:`hsl(${e}, ${i}%, ${n}%)`}var xo={x:"dark",Z:"light",Y:"re",X:"blu",W:"gr",V:"medium",U:"slate",A:"ee",T:"ol",S:"or",B:"ra",C:"lateg",D:"ights",R:"in",Q:"turquois",E:"hi",P:"ro",O:"al",N:"le",M:"de",L:"yello",F:"en",K:"ch",G:"arks",H:"ea",I:"ightg",J:"wh"},_o={OiceXe:"f0f8ff",antiquewEte:"faebd7",aqua:"ffff",aquamarRe:"7fffd4",azuY:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"0",blanKedOmond:"ffebcd",Xe:"ff",XeviTet:"8a2be2",bPwn:"a52a2a",burlywood:"deb887",caMtXe:"5f9ea0",KartYuse:"7fff00",KocTate:"d2691e",cSO:"ff7f50",cSnflowerXe:"6495ed",cSnsilk:"fff8dc",crimson:"dc143c",cyan:"ffff",xXe:"8b",xcyan:"8b8b",xgTMnPd:"b8860b",xWay:"a9a9a9",xgYF:"6400",xgYy:"a9a9a9",xkhaki:"bdb76b",xmagFta:"8b008b",xTivegYF:"556b2f",xSange:"ff8c00",xScEd:"9932cc",xYd:"8b0000",xsOmon:"e9967a",xsHgYF:"8fbc8f",xUXe:"483d8b",xUWay:"2f4f4f",xUgYy:"2f4f4f",xQe:"ced1",xviTet:"9400d3",dAppRk:"ff1493",dApskyXe:"bfff",dimWay:"696969",dimgYy:"696969",dodgerXe:"1e90ff",fiYbrick:"b22222",flSOwEte:"fffaf0",foYstWAn:"228b22",fuKsia:"ff00ff",gaRsbSo:"dcdcdc",ghostwEte:"f8f8ff",gTd:"ffd700",gTMnPd:"daa520",Way:"808080",gYF:"8000",gYFLw:"adff2f",gYy:"808080",honeyMw:"f0fff0",hotpRk:"ff69b4",RdianYd:"cd5c5c",Rdigo:"4b0082",ivSy:"fffff0",khaki:"f0e68c",lavFMr:"e6e6fa",lavFMrXsh:"fff0f5",lawngYF:"7cfc00",NmoncEffon:"fffacd",ZXe:"add8e6",ZcSO:"f08080",Zcyan:"e0ffff",ZgTMnPdLw:"fafad2",ZWay:"d3d3d3",ZgYF:"90ee90",ZgYy:"d3d3d3",ZpRk:"ffb6c1",ZsOmon:"ffa07a",ZsHgYF:"20b2aa",ZskyXe:"87cefa",ZUWay:"778899",ZUgYy:"778899",ZstAlXe:"b0c4de",ZLw:"ffffe0",lime:"ff00",limegYF:"32cd32",lRF:"faf0e6",magFta:"ff00ff",maPon:"800000",VaquamarRe:"66cdaa",VXe:"cd",VScEd:"ba55d3",VpurpN:"9370db",VsHgYF:"3cb371",VUXe:"7b68ee",VsprRggYF:"fa9a",VQe:"48d1cc",VviTetYd:"c71585",midnightXe:"191970",mRtcYam:"f5fffa",mistyPse:"ffe4e1",moccasR:"ffe4b5",navajowEte:"ffdead",navy:"80",Tdlace:"fdf5e6",Tive:"808000",TivedBb:"6b8e23",Sange:"ffa500",SangeYd:"ff4500",ScEd:"da70d6",pOegTMnPd:"eee8aa",pOegYF:"98fb98",pOeQe:"afeeee",pOeviTetYd:"db7093",papayawEp:"ffefd5",pHKpuff:"ffdab9",peru:"cd853f",pRk:"ffc0cb",plum:"dda0dd",powMrXe:"b0e0e6",purpN:"800080",YbeccapurpN:"663399",Yd:"ff0000",Psybrown:"bc8f8f",PyOXe:"4169e1",saddNbPwn:"8b4513",sOmon:"fa8072",sandybPwn:"f4a460",sHgYF:"2e8b57",sHshell:"fff5ee",siFna:"a0522d",silver:"c0c0c0",skyXe:"87ceeb",UXe:"6a5acd",UWay:"708090",UgYy:"708090",snow:"fffafa",sprRggYF:"ff7f",stAlXe:"4682b4",tan:"d2b48c",teO:"8080",tEstN:"d8bfd8",tomato:"ff6347",Qe:"40e0d0",viTet:"ee82ee",JHt:"f5deb3",wEte:"ffffff",wEtesmoke:"f5f5f5",Lw:"ffff00",LwgYF:"9acd32"};function Xc(){let s={},t=Object.keys(_o),e=Object.keys(xo),i,n,r,o,a;for(i=0;i>16&255,r>>8&255,r&255]}return s}var _i;function Kc(s){_i||(_i=Xc(),_i.transparent=[0,0,0,0]);let t=_i[s.toLowerCase()];return t&&{r:t[0],g:t[1],b:t[2],a:t.length===4?t[3]:255}}var Jc=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;function Qc(s){let t=Jc.exec(s),e=255,i,n,r;if(t){if(t[7]!==i){let o=+t[7];e=t[8]?bs(o):Kt(o*255,0,255)}return i=+t[1],n=+t[3],r=+t[5],i=255&(t[2]?bs(i):Kt(i,0,255)),n=255&(t[4]?bs(n):Kt(n,0,255)),r=255&(t[6]?bs(r):Kt(r,0,255)),{r:i,g:n,b:r,a:e}}}function th(s){return s&&(s.a<255?`rgba(${s.r}, ${s.g}, ${s.b}, ${Vt(s.a)})`:`rgb(${s.r}, ${s.g}, ${s.b})`)}var kn=s=>s<=.0031308?s*12.92:Math.pow(s,1/2.4)*1.055-.055,Ee=s=>s<=.04045?s/12.92:Math.pow((s+.055)/1.055,2.4);function eh(s,t,e){let i=Ee(Vt(s.r)),n=Ee(Vt(s.g)),r=Ee(Vt(s.b));return{r:Jt(kn(i+e*(Ee(Vt(t.r))-i))),g:Jt(kn(n+e*(Ee(Vt(t.g))-n))),b:Jt(kn(r+e*(Ee(Vt(t.b))-r))),a:s.a+e*(t.a-s.a)}}function wi(s,t,e){if(s){let i=Hn(s);i[t]=Math.max(0,Math.min(i[t]+i[t]*e,t===0?360:1)),i=$n(i),s.r=i[0],s.g=i[1],s.b=i[2]}}function $o(s,t){return s&&Object.assign(t||{},s)}function wo(s){var t={r:0,g:0,b:0,a:255};return Array.isArray(s)?s.length>=3&&(t={r:s[0],g:s[1],b:s[2],a:255},s.length>3&&(t.a=Jt(s[3]))):(t=$o(s,{r:0,g:0,b:0,a:1}),t.a=Jt(t.a)),t}function sh(s){return s.charAt(0)==="r"?Qc(s):Zc(s)}var Fe=class{constructor(t){if(t instanceof Fe)return t;let e=typeof t,i;e==="object"?i=wo(t):e==="string"&&(i=Wc(t)||Kc(t)||sh(t)),this._rgb=i,this._valid=!!i}get valid(){return this._valid}get rgb(){var t=$o(this._rgb);return t&&(t.a=Vt(t.a)),t}set rgb(t){this._rgb=wo(t)}rgbString(){return this._valid?th(this._rgb):void 0}hexString(){return this._valid?Vc(this._rgb):void 0}hslString(){return this._valid?Gc(this._rgb):void 0}mix(t,e){if(t){let i=this.rgb,n=t.rgb,r,o=e===r?.5:e,a=2*o-1,l=i.a-n.a,c=((a*l===-1?a:(a+l)/(1+a*l))+1)/2;r=1-c,i.r=255&c*i.r+r*n.r+.5,i.g=255&c*i.g+r*n.g+.5,i.b=255&c*i.b+r*n.b+.5,i.a=o*i.a+(1-o)*n.a,this.rgb=i}return this}interpolate(t,e){return t&&(this._rgb=eh(this._rgb,t._rgb,e)),this}clone(){return new Fe(this.rgb)}alpha(t){return this._rgb.a=Jt(t),this}clearer(t){let e=this._rgb;return e.a*=1-t,this}greyscale(){let t=this._rgb,e=Ss(t.r*.3+t.g*.59+t.b*.11);return t.r=t.g=t.b=e,this}opaquer(t){let e=this._rgb;return e.a*=1+t,this}negate(){let t=this._rgb;return t.r=255-t.r,t.g=255-t.g,t.b=255-t.b,this}lighten(t){return wi(this._rgb,2,t),this}darken(t){return wi(this._rgb,2,-t),this}saturate(t){return wi(this._rgb,1,t),this}desaturate(t){return wi(this._rgb,1,-t),this}rotate(t){return qc(this._rgb,t),this}};function jo(s){return new Fe(s)}function Uo(s){if(s&&typeof s=="object"){let t=s.toString();return t==="[object CanvasPattern]"||t==="[object CanvasGradient]"}return!1}function jn(s){return Uo(s)?s:jo(s)}function Mn(s){return Uo(s)?s:jo(s).saturate(.5).darken(.1).hexString()}var Qt=Object.create(null),Ii=Object.create(null);function xs(s,t){if(!t)return s;let e=t.split(".");for(let i=0,n=e.length;ie.chart.platform.getDevicePixelRatio(),this.elements={},this.events=["mousemove","mouseout","click","touchstart","touchmove"],this.font={family:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",size:12,style:"normal",lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(e,i)=>Mn(i.backgroundColor),this.hoverBorderColor=(e,i)=>Mn(i.borderColor),this.hoverColor=(e,i)=>Mn(i.color),this.indexAxis="x",this.interaction={mode:"nearest",intersect:!0,includeInvisible:!1},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(t)}set(t,e){return Tn(this,t,e)}get(t){return xs(this,t)}describe(t,e){return Tn(Ii,t,e)}override(t,e){return Tn(Qt,t,e)}route(t,e,i,n){let r=xs(this,t),o=xs(this,i),a="_"+e;Object.defineProperties(r,{[a]:{value:r[e],writable:!0},[e]:{enumerable:!0,get(){let l=this[a],c=o[n];return A(l)?Object.assign({},c,l):C(l,c)},set(l){this[a]=l}}})}},L=new Dn({_scriptable:s=>!s.startsWith("on"),_indexable:s=>s!=="events",hover:{_fallback:"interaction"},interaction:{_scriptable:!1,_indexable:!1}});function ih(s){return!s||N(s.size)||N(s.family)?null:(s.style?s.style+" ":"")+(s.weight?s.weight+" ":"")+s.size+"px "+s.family}function _s(s,t,e,i,n){let r=t[n];return r||(r=t[n]=s.measureText(n).width,e.push(n)),r>i&&(i=r),i}function Yo(s,t,e,i){i=i||{};let n=i.data=i.data||{},r=i.garbageCollect=i.garbageCollect||[];i.font!==t&&(n=i.data={},r=i.garbageCollect=[],i.font=t),s.save(),s.font=t;let o=0,a=e.length,l,c,h,u,d;for(l=0;le.length){for(l=0;l0&&s.stroke()}}function Ae(s,t,e){return e=e||.5,!t||s&&s.x>t.left-e&&s.xt.top-e&&s.y0&&r.strokeColor!=="",l,c;for(s.save(),s.font=n.string,nh(s,r),l=0;l+s||0;function Ai(s,t){let e={},i=A(t),n=i?Object.keys(t):t,r=A(s)?i?o=>C(s[o],s[t[o]]):o=>s[o]:()=>s;for(let o of n)e[o]=ch(r(o));return e}function Zn(s){return Ai(s,{top:"y",right:"x",bottom:"y",left:"x"})}function se(s){return Ai(s,["topLeft","topRight","bottomLeft","bottomRight"])}function at(s){let t=Zn(s);return t.width=t.left+t.right,t.height=t.top+t.bottom,t}function st(s,t){s=s||{},t=t||L.font;let e=C(s.size,t.size);typeof e=="string"&&(e=parseInt(e,10));let i=C(s.style,t.style);i&&!(""+i).match(ah)&&(console.warn('Invalid font style specified: "'+i+'"'),i="");let n={family:C(s.family,t.family),lineHeight:lh(C(s.lineHeight,t.lineHeight),e),size:e,style:i,weight:C(s.weight,t.weight),string:""};return n.string=ih(n),n}function ze(s,t,e,i){let n=!0,r,o,a;for(r=0,o=s.length;re&&a===0?0:a+l;return{min:o(i,-Math.abs(r)),max:o(n,r)}}function $t(s,t){return Object.assign(Object.create(s),t)}function Li(s,t=[""],e=s,i,n=()=>s[0]){ft(i)||(i=Jo("_fallback",s));let r={[Symbol.toStringTag]:"Object",_cacheable:!0,_scopes:s,_rootScopes:e,_fallback:i,_getTarget:n,override:o=>Li([o,...s],t,e,i)};return new Proxy(r,{deleteProperty(o,a){return delete o[a],delete o._keys,delete s[0][a],!0},get(o,a){return Xo(o,a,()=>yh(a,t,s,o))},getOwnPropertyDescriptor(o,a){return Reflect.getOwnPropertyDescriptor(o._scopes[0],a)},getPrototypeOf(){return Reflect.getPrototypeOf(s[0])},has(o,a){return ko(o).includes(a)},ownKeys(o){return ko(o)},set(o,a,l){let c=o._storage||(o._storage=n());return o[a]=c[a]=l,delete o._keys,!0}})}function ge(s,t,e,i){let n={_cacheable:!1,_proxy:s,_context:t,_subProxy:e,_stack:new Set,_descriptors:qn(s,i),setContext:r=>ge(s,r,e,i),override:r=>ge(s.override(r),t,e,i)};return new Proxy(n,{deleteProperty(r,o){return delete r[o],delete s[o],!0},get(r,o,a){return Xo(r,o,()=>uh(r,o,a))},getOwnPropertyDescriptor(r,o){return r._descriptors.allKeys?Reflect.has(s,o)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(s,o)},getPrototypeOf(){return Reflect.getPrototypeOf(s)},has(r,o){return Reflect.has(s,o)},ownKeys(){return Reflect.ownKeys(s)},set(r,o,a){return s[o]=a,delete r[o],!0}})}function qn(s,t={scriptable:!0,indexable:!0}){let{_scriptable:e=t.scriptable,_indexable:i=t.indexable,_allKeys:n=t.allKeys}=s;return{allKeys:n,scriptable:e,indexable:i,isScriptable:Ht(e)?e:()=>e,isIndexable:Ht(i)?i:()=>i}}var hh=(s,t)=>s?s+Oi(t):t,Gn=(s,t)=>A(t)&&s!=="adapters"&&(Object.getPrototypeOf(t)===null||t.constructor===Object);function Xo(s,t,e){if(Object.prototype.hasOwnProperty.call(s,t))return s[t];let i=e();return s[t]=i,i}function uh(s,t,e){let{_proxy:i,_context:n,_subProxy:r,_descriptors:o}=s,a=i[t];return Ht(a)&&o.isScriptable(t)&&(a=dh(t,a,s,e)),$(a)&&a.length&&(a=fh(t,a,s,o.isIndexable)),Gn(t,a)&&(a=ge(a,n,r&&r[t],o)),a}function dh(s,t,e,i){let{_proxy:n,_context:r,_subProxy:o,_stack:a}=e;if(a.has(s))throw new Error("Recursion detected: "+Array.from(a).join("->")+"->"+s);return a.add(s),t=t(r,o||i),a.delete(s),Gn(s,t)&&(t=Xn(n._scopes,n,s,t)),t}function fh(s,t,e,i){let{_proxy:n,_context:r,_subProxy:o,_descriptors:a}=e;if(ft(r.index)&&i(s))t=t[r.index%t.length];else if(A(t[0])){let l=t,c=n._scopes.filter(h=>h!==l);t=[];for(let h of l){let u=Xn(c,n,s,h);t.push(ge(u,r,o&&o[s],a))}}return t}function Ko(s,t,e){return Ht(s)?s(t,e):s}var mh=(s,t)=>s===!0?t:typeof s=="string"?Bt(t,s):void 0;function gh(s,t,e,i,n){for(let r of t){let o=mh(e,r);if(o){s.add(o);let a=Ko(o._fallback,e,n);if(ft(a)&&a!==e&&a!==i)return a}else if(o===!1&&ft(i)&&e!==i)return null}return!1}function Xn(s,t,e,i){let n=t._rootScopes,r=Ko(t._fallback,e,i),o=[...s,...n],a=new Set;a.add(i);let l=So(a,o,e,r||e,i);return l===null||ft(r)&&r!==e&&(l=So(a,o,r,l,i),l===null)?!1:Li(Array.from(a),[""],n,r,()=>ph(t,e,i))}function So(s,t,e,i,n){for(;e;)e=gh(s,t,e,i,n);return e}function ph(s,t,e){let i=s._getTarget();t in i||(i[t]={});let n=i[t];return $(n)&&A(e)?e:n}function yh(s,t,e,i){let n;for(let r of t)if(n=Jo(hh(r,s),e),ft(n))return Gn(s,n)?Xn(e,i,s,n):n}function Jo(s,t){for(let e of t){if(!e)continue;let i=e[s];if(ft(i))return i}}function ko(s){let t=s._keys;return t||(t=s._keys=bh(s._scopes)),t}function bh(s){let t=new Set;for(let e of s)for(let i of Object.keys(e).filter(n=>!n.startsWith("_")))t.add(i);return Array.from(t)}function Kn(s,t,e,i){let{iScale:n}=s,{key:r="r"}=this._parsing,o=new Array(i),a,l,c,h;for(a=0,l=i;ats==="x"?"y":"x";function _h(s,t,e,i){let n=s.skip?t:s,r=t,o=e.skip?t:e,a=Ti(r,n),l=Ti(o,r),c=a/(a+l),h=l/(a+l);c=isNaN(c)?0:c,h=isNaN(h)?0:h;let u=i*c,d=i*h;return{previous:{x:r.x-u*(o.x-n.x),y:r.y-u*(o.y-n.y)},next:{x:r.x+d*(o.x-n.x),y:r.y+d*(o.y-n.y)}}}function wh(s,t,e){let i=s.length,n,r,o,a,l,c=Le(s,0);for(let h=0;h!c.skip)),t.cubicInterpolationMode==="monotone")kh(s,n);else{let c=i?s[s.length-1]:s[0];for(r=0,o=s.length;rwindow.getComputedStyle(s,null);function Th(s,t){return Ri(s).getPropertyValue(t)}var vh=["top","right","bottom","left"];function me(s,t,e){let i={};e=e?"-"+e:"";for(let n=0;n<4;n++){let r=vh[n];i[r]=parseFloat(s[t+"-"+r+e])||0}return i.width=i.left+i.right,i.height=i.top+i.bottom,i}var Oh=(s,t,e)=>(s>0||t>0)&&(!e||!e.shadowRoot);function Dh(s,t){let e=s.touches,i=e&&e.length?e[0]:s,{offsetX:n,offsetY:r}=i,o=!1,a,l;if(Oh(n,r,s.target))a=n,l=r;else{let c=t.getBoundingClientRect();a=i.clientX-c.left,l=i.clientY-c.top,o=!0}return{x:a,y:l,box:o}}function ie(s,t){if("native"in s)return s;let{canvas:e,currentDevicePixelRatio:i}=t,n=Ri(e),r=n.boxSizing==="border-box",o=me(n,"padding"),a=me(n,"border","width"),{x:l,y:c,box:h}=Dh(s,e),u=o.left+(h&&a.left),d=o.top+(h&&a.top),{width:f,height:m}=t;return r&&(f-=o.width+a.width,m-=o.height+a.height),{x:Math.round((l-u)/f*e.width/i),y:Math.round((c-d)/m*e.height/i)}}function Eh(s,t,e){let i,n;if(t===void 0||e===void 0){let r=Pi(s);if(!r)t=s.clientWidth,e=s.clientHeight;else{let o=r.getBoundingClientRect(),a=Ri(r),l=me(a,"border","width"),c=me(a,"padding");t=o.width-c.width-l.width,e=o.height-c.height-l.height,i=vi(a.maxWidth,r,"clientWidth"),n=vi(a.maxHeight,r,"clientHeight")}}return{width:t,height:e,maxWidth:i||Mi,maxHeight:n||Mi}}var vn=s=>Math.round(s*10)/10;function ea(s,t,e,i){let n=Ri(s),r=me(n,"margin"),o=vi(n.maxWidth,s,"clientWidth")||Mi,a=vi(n.maxHeight,s,"clientHeight")||Mi,l=Eh(s,t,e),{width:c,height:h}=l;if(n.boxSizing==="content-box"){let u=me(n,"border","width"),d=me(n,"padding");c-=d.width+u.width,h-=d.height+u.height}return c=Math.max(0,c-r.width),h=Math.max(0,i?Math.floor(c/i):h-r.height),c=vn(Math.min(c,o,l.maxWidth)),h=vn(Math.min(h,a,l.maxHeight)),c&&!h&&(h=vn(c/2)),{width:c,height:h}}function Qn(s,t,e){let i=t||1,n=Math.floor(s.height*i),r=Math.floor(s.width*i);s.height=n/i,s.width=r/i;let o=s.canvas;return o.style&&(e||!o.style.height&&!o.style.width)&&(o.style.height=`${s.height}px`,o.style.width=`${s.width}px`),s.currentDevicePixelRatio!==i||o.height!==n||o.width!==r?(s.currentDevicePixelRatio=i,o.height=n,o.width=r,s.ctx.setTransform(i,0,0,i,0,0),!0):!1}var sa=function(){let s=!1;try{let t={get passive(){return s=!0,!1}};window.addEventListener("test",null,t),window.removeEventListener("test",null,t)}catch{}return s}();function tr(s,t){let e=Th(s,t),i=e&&e.match(/^(\d+)(\.\d+)?px$/);return i?+i[1]:void 0}function Xt(s,t,e,i){return{x:s.x+e*(t.x-s.x),y:s.y+e*(t.y-s.y)}}function ia(s,t,e,i){return{x:s.x+e*(t.x-s.x),y:i==="middle"?e<.5?s.y:t.y:i==="after"?e<1?s.y:t.y:e>0?t.y:s.y}}function na(s,t,e,i){let n={x:s.cp2x,y:s.cp2y},r={x:t.cp1x,y:t.cp1y},o=Xt(s,n,e),a=Xt(n,r,e),l=Xt(r,t,e),c=Xt(o,a,e),h=Xt(a,l,e);return Xt(c,h,e)}var Mo=new Map;function Ch(s,t){t=t||{};let e=s+JSON.stringify(t),i=Mo.get(e);return i||(i=new Intl.NumberFormat(s,t),Mo.set(e,i)),i}function Ve(s,t,e){return Ch(t,e).format(s)}var Ih=function(s,t){return{x(e){return s+s+t-e},setWidth(e){t=e},textAlign(e){return e==="center"?e:e==="right"?"left":"right"},xPlus(e,i){return e-i},leftForLtr(e,i){return e-i}}},Fh=function(){return{x(s){return s},setWidth(s){},textAlign(s){return s},xPlus(s,t){return s+t},leftForLtr(s,t){return s}}};function ye(s,t,e){return s?Ih(t,e):Fh()}function er(s,t){let e,i;(t==="ltr"||t==="rtl")&&(e=s.canvas.style,i=[e.getPropertyValue("direction"),e.getPropertyPriority("direction")],e.setProperty("direction",t,"important"),s.prevTextDirection=i)}function sr(s,t){t!==void 0&&(delete s.prevTextDirection,s.canvas.style.setProperty("direction",t[0],t[1]))}function ra(s){return s==="angle"?{between:Ne,compare:Lc,normalize:ht}:{between:Lt,compare:(t,e)=>t-e,normalize:t=>t}}function To({start:s,end:t,count:e,loop:i,style:n}){return{start:s%e,end:t%e,loop:i&&(t-s+1)%e===0,style:n}}function Ah(s,t,e){let{property:i,start:n,end:r}=e,{between:o,normalize:a}=ra(i),l=t.length,{start:c,end:h,loop:u}=s,d,f;if(u){for(c+=l,h+=l,d=0,f=l;dl(n,_,y)&&a(n,_)!==0,x=()=>a(r,y)===0||l(r,_,y),S=()=>g||w(),k=()=>!g||x();for(let O=h,v=h;O<=u;++O)b=t[O%o],!b.skip&&(y=c(b[i]),y!==_&&(g=l(y,n,r),p===null&&S()&&(p=a(y,n)===0?O:v),p!==null&&k()&&(m.push(To({start:p,end:O,loop:d,count:o,style:f})),p=null),v=O,_=y));return p!==null&&m.push(To({start:p,end:u,loop:d,count:o,style:f})),m}function nr(s,t){let e=[],i=s.segments;for(let n=0;nn&&s[r%t].skip;)r--;return r%=t,{start:n,end:r}}function Ph(s,t,e,i){let n=s.length,r=[],o=t,a=s[t],l;for(l=t+1;l<=e;++l){let c=s[l%n];c.skip||c.stop?a.skip||(i=!1,r.push({start:t%n,end:(l-1)%n,loop:i}),t=o=c.stop?l:null):(o=l,a.skip&&(t=l)),a=c}return o!==null&&r.push({start:t%n,end:o%n,loop:i}),r}function oa(s,t){let e=s.points,i=s.options.spanGaps,n=e.length;if(!n)return[];let r=!!s._loop,{start:o,end:a}=Lh(e,n,r,i);if(i===!0)return vo(s,[{start:o,end:a,loop:r}],e,t);let l=aa({chart:t,initial:e.initial,numSteps:o,currentStep:Math.min(i-e.start,o)}))}_refresh(){this._request||(this._running=!0,this._request=Nn.call(window,()=>{this._update(),this._request=null,this._running&&this._refresh()}))}_update(t=Date.now()){let e=0;this._charts.forEach((i,n)=>{if(!i.running||!i.items.length)return;let r=i.items,o=r.length-1,a=!1,l;for(;o>=0;--o)l=r[o],l._active?(l._total>i.duration&&(i.duration=l._total),l.tick(t),a=!0):(r[o]=r[r.length-1],r.pop());a&&(n.draw(),this._notify(n,i,t,"progress")),r.length||(i.running=!1,this._notify(n,i,t,"complete"),i.initial=!1),e+=r.length}),this._lastDate=t,e===0&&(this._running=!1)}_getAnims(t){let e=this._charts,i=e.get(t);return i||(i={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},e.set(t,i)),i}listen(t,e,i){this._getAnims(t).listeners[e].push(i)}add(t,e){!e||!e.length||this._getAnims(t).items.push(...e)}has(t){return this._getAnims(t).items.length>0}start(t){let e=this._charts.get(t);e&&(e.running=!0,e.start=Date.now(),e.duration=e.items.reduce((i,n)=>Math.max(i,n._duration),0),this._refresh())}running(t){if(!this._running)return!1;let e=this._charts.get(t);return!(!e||!e.running||!e.items.length)}stop(t){let e=this._charts.get(t);if(!e||!e.items.length)return;let i=e.items,n=i.length-1;for(;n>=0;--n)i[n].cancel();e.items=[],this._notify(t,e,Date.now(),"complete")}remove(t){return this._charts.delete(t)}},jt=new mr,aa="transparent",Wh={boolean(s,t,e){return e>.5?t:s},color(s,t,e){let i=jn(s||aa),n=i.valid&&jn(t||aa);return n&&n.valid?n.mix(i,e).hexString():t},number(s,t,e){return s+(t-s)*e}},gr=class{constructor(t,e,i,n){let r=e[i];n=ze([t.to,n,r,t.from]);let o=ze([t.from,r,n]);this._active=!0,this._fn=t.fn||Wh[t.type||typeof o],this._easing=Ce[t.easing]||Ce.linear,this._start=Math.floor(Date.now()+(t.delay||0)),this._duration=this._total=Math.floor(t.duration),this._loop=!!t.loop,this._target=e,this._prop=i,this._from=o,this._to=n,this._promises=void 0}active(){return this._active}update(t,e,i){if(this._active){this._notify(!1);let n=this._target[this._prop],r=i-this._start,o=this._duration-r;this._start=i,this._duration=Math.floor(Math.max(o,t.duration)),this._total+=r,this._loop=!!t.loop,this._to=ze([t.to,e,n,t.from]),this._from=ze([t.from,n,e])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(t){let e=t-this._start,i=this._duration,n=this._prop,r=this._from,o=this._loop,a=this._to,l;if(this._active=r!==a&&(o||e1?2-l:l,l=this._easing(Math.min(1,Math.max(0,l))),this._target[n]=this._fn(r,a,l)}wait(){let t=this._promises||(this._promises=[]);return new Promise((e,i)=>{t.push({res:e,rej:i})})}_notify(t){let e=t?"res":"rej",i=this._promises||[];for(let n=0;ns!=="onProgress"&&s!=="onComplete"&&s!=="fn"});L.set("animations",{colors:{type:"color",properties:Vh},numbers:{type:"number",properties:zh}});L.describe("animations",{_fallback:"animation"});L.set("transitions",{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:"transparent"},visible:{type:"boolean",duration:0}}},hide:{animations:{colors:{to:"transparent"},visible:{type:"boolean",easing:"linear",fn:s=>s|0}}}});var ji=class{constructor(t,e){this._chart=t,this._properties=new Map,this.configure(e)}configure(t){if(!A(t))return;let e=this._properties;Object.getOwnPropertyNames(t).forEach(i=>{let n=t[i];if(!A(n))return;let r={};for(let o of Hh)r[o]=n[o];($(n.properties)&&n.properties||[i]).forEach(o=>{(o===i||!e.has(o))&&e.set(o,r)})})}_animateOptions(t,e){let i=e.options,n=$h(t,i);if(!n)return[];let r=this._createAnimations(n,i);return i.$shared&&Bh(t.options.$animations,i).then(()=>{t.options=i},()=>{}),r}_createAnimations(t,e){let i=this._properties,n=[],r=t.$animations||(t.$animations={}),o=Object.keys(e),a=Date.now(),l;for(l=o.length-1;l>=0;--l){let c=o[l];if(c.charAt(0)==="$")continue;if(c==="options"){n.push(...this._animateOptions(t,e));continue}let h=e[c],u=r[c],d=i.get(c);if(u)if(d&&u.active()){u.update(d,h,a);continue}else u.cancel();if(!d||!d.duration){t[c]=h;continue}r[c]=u=new gr(d,t,c,h),n.push(u)}return n}update(t,e){if(this._properties.size===0){Object.assign(t,e);return}let i=this._createAnimations(t,e);if(i.length)return jt.add(this._chart,i),!0}};function Bh(s,t){let e=[],i=Object.keys(t);for(let n=0;n0||!e&&r<0)return n.index}return null}function da(s,t){let{chart:e,_cachedMeta:i}=s,n=e._stacks||(e._stacks={}),{iScale:r,vScale:o,index:a}=i,l=r.axis,c=o.axis,h=Zh(r,o,i),u=t.length,d;for(let f=0;fe[i].axis===t).shift()}function Xh(s,t){return $t(s,{active:!1,dataset:void 0,datasetIndex:t,index:t,mode:"default",type:"dataset"})}function Kh(s,t,e){return $t(s,{active:!1,dataIndex:t,parsed:void 0,raw:void 0,element:e,index:t,mode:"default",type:"data"})}function Ts(s,t){let e=s.controller.index,i=s.vScale&&s.vScale.axis;if(i){t=t||s._parsed;for(let n of t){let r=n._stacks;if(!r||r[i]===void 0||r[i][e]===void 0)return;delete r[i][e]}}}var or=s=>s==="reset"||s==="none",fa=(s,t)=>t?s:Object.assign({},s),Jh=(s,t,e)=>s&&!t.hidden&&t._stacked&&{keys:Ja(e,!0),values:null},pt=class{constructor(t,e){this.chart=t,this._ctx=t.ctx,this.index=e,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.initialize()}initialize(){let t=this._cachedMeta;this.configure(),this.linkScales(),t._stacked=ha(t.vScale,t),this.addElements()}updateIndex(t){this.index!==t&&Ts(this._cachedMeta),this.index=t}linkScales(){let t=this.chart,e=this._cachedMeta,i=this.getDataset(),n=(u,d,f,m)=>u==="x"?d:u==="r"?m:f,r=e.xAxisID=C(i.xAxisID,rr(t,"x")),o=e.yAxisID=C(i.yAxisID,rr(t,"y")),a=e.rAxisID=C(i.rAxisID,rr(t,"r")),l=e.indexAxis,c=e.iAxisID=n(l,r,o,a),h=e.vAxisID=n(l,o,r,a);e.xScale=this.getScaleForId(r),e.yScale=this.getScaleForId(o),e.rScale=this.getScaleForId(a),e.iScale=this.getScaleForId(c),e.vScale=this.getScaleForId(h)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(t){return this.chart.scales[t]}_getOtherScale(t){let e=this._cachedMeta;return t===e.iScale?e.vScale:e.iScale}reset(){this._update("reset")}_destroy(){let t=this._cachedMeta;this._data&&Pn(this._data,this),t._stacked&&Ts(t)}_dataCheck(){let t=this.getDataset(),e=t.data||(t.data=[]),i=this._data;if(A(e))this._data=Yh(e);else if(i!==e){if(i){Pn(i,this);let n=this._cachedMeta;Ts(n),n._parsed=[]}e&&Object.isExtensible(e)&&Wo(e,this),this._syncList=[],this._data=e}}addElements(){let t=this._cachedMeta;this._dataCheck(),this.datasetElementType&&(t.dataset=new this.datasetElementType)}buildOrUpdateElements(t){let e=this._cachedMeta,i=this.getDataset(),n=!1;this._dataCheck();let r=e._stacked;e._stacked=ha(e.vScale,e),e.stack!==i.stack&&(n=!0,Ts(e),e.stack=i.stack),this._resyncElements(t),(n||r!==e._stacked)&&da(this,e._parsed)}configure(){let t=this.chart.config,e=t.datasetScopeKeys(this._type),i=t.getOptionScopes(this.getDataset(),e,!0);this.options=t.createResolver(i,this.getContext()),this._parsing=this.options.parsing,this._cachedDataOpts={}}parse(t,e){let{_cachedMeta:i,_data:n}=this,{iScale:r,_stacked:o}=i,a=r.axis,l=t===0&&e===n.length?!0:i._sorted,c=t>0&&i._parsed[t-1],h,u,d;if(this._parsing===!1)i._parsed=n,i._sorted=!0,d=n;else{$(n[t])?d=this.parseArrayData(i,n,t,e):A(n[t])?d=this.parseObjectData(i,n,t,e):d=this.parsePrimitiveData(i,n,t,e);let f=()=>u[a]===null||c&&u[a]g||u=0;--d)if(!m()){this.updateRangeFromParsed(c,t,f,l);break}}return c}getAllParsedValues(t){let e=this._cachedMeta._parsed,i=[],n,r,o;for(n=0,r=e.length;n=0&&tthis.getContext(i,n),g=c.resolveNamedOptions(d,f,m,u);return g.$shared&&(g.$shared=l,r[o]=Object.freeze(fa(g,l))),g}_resolveAnimations(t,e,i){let n=this.chart,r=this._cachedDataOpts,o=`animation-${e}`,a=r[o];if(a)return a;let l;if(n.options.animation!==!1){let h=this.chart.config,u=h.datasetAnimationScopeKeys(this._type,e),d=h.getOptionScopes(this.getDataset(),u);l=h.createResolver(d,this.getContext(t,i,e))}let c=new ji(n,l&&l.animations);return l&&l._cacheable&&(r[o]=Object.freeze(c)),c}getSharedOptions(t){if(t.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},t))}includeOptions(t,e){return!e||or(t)||this.chart._animationsDisabled}_getSharedOptions(t,e){let i=this.resolveDataElementOptions(t,e),n=this._sharedOptions,r=this.getSharedOptions(i),o=this.includeOptions(e,r)||r!==n;return this.updateSharedOptions(r,e,i),{sharedOptions:r,includeOptions:o}}updateElement(t,e,i,n){or(n)?Object.assign(t,i):this._resolveAnimations(e,n).update(t,i)}updateSharedOptions(t,e,i){t&&!or(e)&&this._resolveAnimations(void 0,e).update(t,i)}_setStyle(t,e,i,n){t.active=n;let r=this.getStyle(e,n);this._resolveAnimations(e,i,n).update(t,{options:!n&&this.getSharedOptions(r)||r})}removeHoverStyle(t,e,i){this._setStyle(t,i,"active",!1)}setHoverStyle(t,e,i){this._setStyle(t,i,"active",!0)}_removeDatasetHoverStyle(){let t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!1)}_setDatasetHoverStyle(){let t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!0)}_resyncElements(t){let e=this._data,i=this._cachedMeta.data;for(let[a,l,c]of this._syncList)this[a](l,c);this._syncList=[];let n=i.length,r=e.length,o=Math.min(r,n);o&&this.parse(0,o),r>n?this._insertElements(n,r-n,t):r{for(c.length+=e,a=c.length-1;a>=o;a--)c[a]=c[a-e]};for(l(r),a=t;an-r))}return s._cache.$bar}function tu(s){let t=s.iScale,e=Qh(t,s.type),i=t._length,n,r,o,a,l=()=>{o===32767||o===-32768||(ft(a)&&(i=Math.min(i,Math.abs(o-a)||i)),a=o)};for(n=0,r=e.length;n0?n[s-1]:null,a=sMath.abs(a)&&(l=a,c=o),t[e.axis]=c,t._custom={barStart:l,barEnd:c,start:n,end:r,min:o,max:a}}function Qa(s,t,e,i){return $(s)?iu(s,t,e,i):t[e.axis]=e.parse(s,i),t}function ma(s,t,e,i){let n=s.iScale,r=s.vScale,o=n.getLabels(),a=n===r,l=[],c,h,u,d;for(c=e,h=e+i;c=e?1:-1)}function ru(s){let t,e,i,n,r;return s.horizontal?(t=s.base>s.x,e="left",i="right"):(t=s.basel.controller.options.grouped),r=i.options.stacked,o=[],a=l=>{let c=l.controller.getParsed(e),h=c&&c[l.vScale.axis];if(N(h)||isNaN(h))return!0};for(let l of n)if(!(e!==void 0&&a(l))&&((r===!1||o.indexOf(l.stack)===-1||r===void 0&&l.stack===void 0)&&o.push(l.stack),l.index===t))break;return o.length||o.push(void 0),o}_getStackCount(t){return this._getStacks(void 0,t).length}_getStackIndex(t,e,i){let n=this._getStacks(t,i),r=e!==void 0?n.indexOf(e):-1;return r===-1?n.length-1:r}_getRuler(){let t=this.options,e=this._cachedMeta,i=e.iScale,n=[],r,o;for(r=0,o=e.data.length;r=0;--i)e=Math.max(e,t[i].size(this.resolveDataElementOptions(i))/2);return e>0&&e}getLabelAndValue(t){let e=this._cachedMeta,{xScale:i,yScale:n}=e,r=this.getParsed(t),o=i.getLabelForValue(r.x),a=n.getLabelForValue(r.y),l=r._custom;return{label:e.label,value:"("+o+", "+a+(l?", "+l:"")+")"}}update(t){let e=this._cachedMeta.data;this.updateElements(e,0,e.length,t)}updateElements(t,e,i,n){let r=n==="reset",{iScale:o,vScale:a}=this._cachedMeta,{sharedOptions:l,includeOptions:c}=this._getSharedOptions(e,n),h=o.axis,u=a.axis;for(let d=e;dNe(_,a,l,!0)?1:Math.max(w,w*e,x,x*e),m=(_,w,x)=>Ne(_,a,l,!0)?-1:Math.min(w,w*e,x,x*e),g=f(0,c,u),p=f(Z,h,d),y=m(Y,c,u),b=m(Y+Z,h,d);i=(g-y)/2,n=(p-b)/2,r=-(g+y)/2,o=-(p+b)/2}return{ratioX:i,ratioY:n,offsetX:r,offsetY:o}}var oe=class extends pt{constructor(t,e){super(t,e),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(t,e){let i=this.getDataset().data,n=this._cachedMeta;if(this._parsing===!1)n._parsed=i;else{let r=l=>+i[l];if(A(i[t])){let{key:l="value"}=this._parsing;r=c=>+Bt(i[c],l)}let o,a;for(o=t,a=t+e;o0&&!isNaN(t)?B*(Math.abs(t)/e):0}getLabelAndValue(t){let e=this._cachedMeta,i=this.chart,n=i.data.labels||[],r=Ve(e._parsed[t],i.options.locale);return{label:n[t]||"",value:r}}getMaxBorderWidth(t){let e=0,i=this.chart,n,r,o,a,l;if(!t){for(n=0,r=i.data.datasets.length;ns!=="spacing",_indexable:s=>s!=="spacing"};oe.overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(s){let t=s.data;if(t.labels.length&&t.datasets.length){let{labels:{pointStyle:e}}=s.legend.options;return t.labels.map((i,n)=>{let o=s.getDatasetMeta(0).controller.getStyle(n);return{text:i,fillStyle:o.backgroundColor,strokeStyle:o.borderColor,lineWidth:o.borderWidth,pointStyle:e,hidden:!s.getDataVisibility(n),index:n}})}return[]}},onClick(s,t,e){e.chart.toggleDataVisibility(t.index),e.chart.update()}},tooltip:{callbacks:{title(){return""},label(s){let t=s.label,e=": "+s.formattedValue;return $(t)?(t=t.slice(),t[0]+=e):t+=e,t}}}}};var Ue=class extends pt{initialize(){this.enableOptionSharing=!0,this.supportsDecimation=!0,super.initialize()}update(t){let e=this._cachedMeta,{dataset:i,data:n=[],_dataset:r}=e,o=this.chart._animationsDisabled,{start:a,count:l}=zn(e,n,o);this._drawStart=a,this._drawCount=l,Vn(e)&&(a=0,l=n.length),i._chart=this.chart,i._datasetIndex=this.index,i._decimated=!!r._decimated,i.points=n;let c=this.resolveDatasetElementOptions(t);this.options.showLine||(c.borderWidth=0),c.segment=this.options.segment,this.updateElement(i,void 0,{animated:!o,options:c},t),this.updateElements(n,a,l,t)}updateElements(t,e,i,n){let r=n==="reset",{iScale:o,vScale:a,_stacked:l,_dataset:c}=this._cachedMeta,{sharedOptions:h,includeOptions:u}=this._getSharedOptions(e,n),d=o.axis,f=a.axis,{spanGaps:m,segment:g}=this.options,p=pe(m)?m:Number.POSITIVE_INFINITY,y=this.chart._animationsDisabled||r||n==="none",b=e>0&&this.getParsed(e-1);for(let _=e;_0&&Math.abs(x[d]-b[d])>p,g&&(S.parsed=x,S.raw=c.data[_]),u&&(S.options=h||this.resolveDataElementOptions(_,w.active?"active":n)),y||this.updateElement(w,_,S,n),b=x}}getMaxOverflow(){let t=this._cachedMeta,e=t.dataset,i=e.options&&e.options.borderWidth||0,n=t.data||[];if(!n.length)return i;let r=n[0].size(this.resolveDataElementOptions(0)),o=n[n.length-1].size(this.resolveDataElementOptions(n.length-1));return Math.max(i,r,o)/2}draw(){let t=this._cachedMeta;t.dataset.updateControlPoints(this.chart.chartArea,t.iScale.axis),super.draw()}};Ue.id="line";Ue.defaults={datasetElementType:"line",dataElementType:"point",showLine:!0,spanGaps:!1};Ue.overrides={scales:{_index_:{type:"category"},_value_:{type:"linear"}}};var Ye=class extends pt{constructor(t,e){super(t,e),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(t){let e=this._cachedMeta,i=this.chart,n=i.data.labels||[],r=Ve(e._parsed[t].r,i.options.locale);return{label:n[t]||"",value:r}}parseObjectData(t,e,i,n){return Kn.bind(this)(t,e,i,n)}update(t){let e=this._cachedMeta.data;this._updateRadius(),this.updateElements(e,0,e.length,t)}getMinMax(){let t=this._cachedMeta,e={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY};return t.data.forEach((i,n)=>{let r=this.getParsed(n).r;!isNaN(r)&&this.chart.getDataVisibility(n)&&(re.max&&(e.max=r))}),e}_updateRadius(){let t=this.chart,e=t.chartArea,i=t.options,n=Math.min(e.right-e.left,e.bottom-e.top),r=Math.max(n/2,0),o=Math.max(i.cutoutPercentage?r/100*i.cutoutPercentage:1,0),a=(r-o)/t.getVisibleDatasetCount();this.outerRadius=r-a*this.index,this.innerRadius=this.outerRadius-a}updateElements(t,e,i,n){let r=n==="reset",o=this.chart,l=o.options.animation,c=this._cachedMeta.rScale,h=c.xCenter,u=c.yCenter,d=c.getIndexAngle(0)-.5*Y,f=d,m,g=360/this.countVisibleElements();for(m=0;m{!isNaN(this.getParsed(n).r)&&this.chart.getDataVisibility(n)&&e++}),e}_computeAngle(t,e,i){return this.chart.getDataVisibility(t)?wt(this.resolveDataElementOptions(t,e).angle||i):0}};Ye.id="polarArea";Ye.defaults={dataElementType:"arc",animation:{animateRotate:!0,animateScale:!0},animations:{numbers:{type:"number",properties:["x","y","startAngle","endAngle","innerRadius","outerRadius"]}},indexAxis:"r",startAngle:0};Ye.overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(s){let t=s.data;if(t.labels.length&&t.datasets.length){let{labels:{pointStyle:e}}=s.legend.options;return t.labels.map((i,n)=>{let o=s.getDatasetMeta(0).controller.getStyle(n);return{text:i,fillStyle:o.backgroundColor,strokeStyle:o.borderColor,lineWidth:o.borderWidth,pointStyle:e,hidden:!s.getDataVisibility(n),index:n}})}return[]}},onClick(s,t,e){e.chart.toggleDataVisibility(t.index),e.chart.update()}},tooltip:{callbacks:{title(){return""},label(s){return s.chart.data.labels[s.dataIndex]+": "+s.formattedValue}}}},scales:{r:{type:"radialLinear",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}};var Fs=class extends oe{};Fs.id="pie";Fs.defaults={cutout:0,rotation:0,circumference:360,radius:"100%"};var Ze=class extends pt{getLabelAndValue(t){let e=this._cachedMeta.vScale,i=this.getParsed(t);return{label:e.getLabels()[t],value:""+e.getLabelForValue(i[e.axis])}}parseObjectData(t,e,i,n){return Kn.bind(this)(t,e,i,n)}update(t){let e=this._cachedMeta,i=e.dataset,n=e.data||[],r=e.iScale.getLabels();if(i.points=n,t!=="resize"){let o=this.resolveDatasetElementOptions(t);this.options.showLine||(o.borderWidth=0);let a={_loop:!0,_fullLoop:r.length===n.length,options:o};this.updateElement(i,void 0,a,t)}this.updateElements(n,0,n.length,t)}updateElements(t,e,i,n){let r=this._cachedMeta.rScale,o=n==="reset";for(let a=e;a{n[r]=i[r]&&i[r].active()?i[r]._to:this[r]}),n}};yt.defaults={};yt.defaultRoutes=void 0;var tl={values(s){return $(s)?s:""+s},numeric(s,t,e){if(s===0)return"0";let i=this.chart.options.locale,n,r=s;if(e.length>1){let c=Math.max(Math.abs(e[0].value),Math.abs(e[e.length-1].value));(c<1e-4||c>1e15)&&(n="scientific"),r=hu(s,e)}let o=gt(Math.abs(r)),a=Math.max(Math.min(-1*Math.floor(o),20),0),l={notation:n,minimumFractionDigits:a,maximumFractionDigits:a};return Object.assign(l,this.options.ticks.format),Ve(s,i,l)},logarithmic(s,t,e){if(s===0)return"0";let i=s/Math.pow(10,Math.floor(gt(s)));return i===1||i===2||i===5?tl.numeric.call(this,s,t,e):""}};function hu(s,t){let e=t.length>3?t[2].value-t[1].value:t[1].value-t[0].value;return Math.abs(e)>=1&&s!==Math.floor(s)&&(e=s-Math.floor(s)),e}var Xi={formatters:tl};L.set("scale",{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:"ticks",grace:0,grid:{display:!0,lineWidth:1,drawBorder:!0,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(s,t)=>t.lineWidth,tickColor:(s,t)=>t.color,offset:!1,borderDash:[],borderDashOffset:0,borderWidth:1},title:{display:!1,text:"",padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:"",padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:Xi.formatters.values,minor:{},major:{},align:"center",crossAlign:"near",showLabelBackdrop:!1,backdropColor:"rgba(255, 255, 255, 0.75)",backdropPadding:2}});L.route("scale.ticks","color","","color");L.route("scale.grid","color","","borderColor");L.route("scale.grid","borderColor","","borderColor");L.route("scale.title","color","","color");L.describe("scale",{_fallback:!1,_scriptable:s=>!s.startsWith("before")&&!s.startsWith("after")&&s!=="callback"&&s!=="parser",_indexable:s=>s!=="borderDash"&&s!=="tickBorderDash"});L.describe("scales",{_fallback:"scale"});L.describe("scale.ticks",{_scriptable:s=>s!=="backdropPadding"&&s!=="callback",_indexable:s=>s!=="backdropPadding"});function uu(s,t){let e=s.options.ticks,i=e.maxTicksLimit||du(s),n=e.major.enabled?mu(t):[],r=n.length,o=n[0],a=n[r-1],l=[];if(r>i)return gu(t,l,n,r/i),l;let c=fu(n,t,i);if(r>0){let h,u,d=r>1?Math.round((a-o)/(r-1)):null;for(Ni(t,l,c,N(d)?0:o-d,o),h=0,u=r-1;hn)return l}return Math.max(n,1)}function mu(s){let t=[],e,i;for(e=0,i=s.length;es==="left"?"right":s==="right"?"left":s,ya=(s,t,e)=>t==="top"||t==="left"?s[t]+e:s[t]-e;function ba(s,t){let e=[],i=s.length/t,n=s.length,r=0;for(;ro+a)))return l}function xu(s,t){H(s,e=>{let i=e.gc,n=i.length/2,r;if(n>t){for(r=0;ri?i:e,i=n&&e>i?e:i,{min:mt(e,mt(i,e)),max:mt(i,mt(e,i))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){let t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){j(this.options.beforeUpdate,[this])}update(t,e,i){let{beginAtZero:n,grace:r,ticks:o}=this.options,a=o.sampleSize;this.beforeUpdate(),this.maxWidth=t,this.maxHeight=e,this._margins=i=Object.assign({left:0,right:0,top:0,bottom:0},i),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+i.left+i.right:this.height+i.top+i.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=Go(this,r,n),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();let l=a=r||i<=1||!this.isHorizontal()){this.labelRotation=n;return}let h=this._getLabelSizes(),u=h.widest.width,d=h.highest.height,f=it(this.chart.width-u,0,this.maxWidth);a=t.offset?this.maxWidth/i:f/(i-1),u+6>a&&(a=f/(i-(t.offset?.5:1)),l=this.maxHeight-vs(t.grid)-e.padding-xa(t.title,this.chart.options.font),c=Math.sqrt(u*u+d*d),o=Di(Math.min(Math.asin(it((h.highest.height+6)/a,-1,1)),Math.asin(it(l/c,-1,1))-Math.asin(it(d/c,-1,1)))),o=Math.max(n,Math.min(r,o))),this.labelRotation=o}afterCalculateLabelRotation(){j(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){j(this.options.beforeFit,[this])}fit(){let t={width:0,height:0},{chart:e,options:{ticks:i,title:n,grid:r}}=this,o=this._isVisible(),a=this.isHorizontal();if(o){let l=xa(n,e.options.font);if(a?(t.width=this.maxWidth,t.height=vs(r)+l):(t.height=this.maxHeight,t.width=vs(r)+l),i.display&&this.ticks.length){let{first:c,last:h,widest:u,highest:d}=this._getLabelSizes(),f=i.padding*2,m=wt(this.labelRotation),g=Math.cos(m),p=Math.sin(m);if(a){let y=i.mirror?0:p*u.width+g*d.height;t.height=Math.min(this.maxHeight,t.height+y+f)}else{let y=i.mirror?0:g*u.width+p*d.height;t.width=Math.min(this.maxWidth,t.width+y+f)}this._calculatePadding(c,h,p,g)}}this._handleMargins(),a?(this.width=this._length=e.width-this._margins.left-this._margins.right,this.height=t.height):(this.width=t.width,this.height=this._length=e.height-this._margins.top-this._margins.bottom)}_calculatePadding(t,e,i,n){let{ticks:{align:r,padding:o},position:a}=this.options,l=this.labelRotation!==0,c=a!=="top"&&this.axis==="x";if(this.isHorizontal()){let h=this.getPixelForTick(0)-this.left,u=this.right-this.getPixelForTick(this.ticks.length-1),d=0,f=0;l?c?(d=n*t.width,f=i*e.height):(d=i*t.height,f=n*e.width):r==="start"?f=e.width:r==="end"?d=t.width:r!=="inner"&&(d=t.width/2,f=e.width/2),this.paddingLeft=Math.max((d-h+o)*this.width/(this.width-h),0),this.paddingRight=Math.max((f-u+o)*this.width/(this.width-u),0)}else{let h=e.height/2,u=t.height/2;r==="start"?(h=0,u=t.height):r==="end"&&(h=e.height,u=0),this.paddingTop=h+o,this.paddingBottom=u+o}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){j(this.options.afterFit,[this])}isHorizontal(){let{axis:t,position:e}=this.options;return e==="top"||e==="bottom"||t==="x"}isFullSize(){return this.options.fullSize}_convertTicksToLabels(t){this.beforeTickToLabelConversion(),this.generateTickLabels(t);let e,i;for(e=0,i=t.length;e({width:r[k]||0,height:o[k]||0});return{first:S(0),last:S(e-1),widest:S(w),highest:S(x),widths:r,heights:o}}getLabelForValue(t){return t}getPixelForValue(t,e){return NaN}getValueForPixel(t){}getPixelForTick(t){let e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getPixelForDecimal(t){this._reversePixels&&(t=1-t);let e=this._startPixel+t*this._length;return Lo(this._alignToPixels?te(this.chart,e,0):e)}getDecimalForPixel(t){let e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){let{min:t,max:e}=this;return t<0&&e<0?e:t>0&&e>0?t:0}getContext(t){let e=this.ticks||[];if(t>=0&&ta*n?a/i:l/n:l*n0}_computeGridLineItems(t){let e=this.axis,i=this.chart,n=this.options,{grid:r,position:o}=n,a=r.offset,l=this.isHorizontal(),h=this.ticks.length+(a?1:0),u=vs(r),d=[],f=r.setContext(this.getContext()),m=f.drawBorder?f.borderWidth:0,g=m/2,p=function(E){return te(i,E,m)},y,b,_,w,x,S,k,O,v,F,W,R;if(o==="top")y=p(this.bottom),S=this.bottom-u,O=y-g,F=p(t.top)+g,R=t.bottom;else if(o==="bottom")y=p(this.top),F=t.top,R=p(t.bottom)-g,S=y+g,O=this.top+u;else if(o==="left")y=p(this.right),x=this.right-u,k=y-g,v=p(t.left)+g,W=t.right;else if(o==="right")y=p(this.left),v=t.left,W=p(t.right)-g,x=y+g,k=this.left+u;else if(e==="x"){if(o==="center")y=p((t.top+t.bottom)/2+.5);else if(A(o)){let E=Object.keys(o)[0],et=o[E];y=p(this.chart.scales[E].getPixelForValue(et))}F=t.top,R=t.bottom,S=y+g,O=S+u}else if(e==="y"){if(o==="center")y=p((t.left+t.right)/2);else if(A(o)){let E=Object.keys(o)[0],et=o[E];y=p(this.chart.scales[E].getPixelForValue(et))}x=y-g,k=x-u,v=t.left,W=t.right}let tt=C(n.ticks.maxTicksLimit,h),ct=Math.max(1,Math.ceil(h/tt));for(b=0;br.value===t);return n>=0?e.setContext(this.getContext(n)).lineWidth:0}drawGrid(t){let e=this.options.grid,i=this.ctx,n=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(t)),r,o,a=(l,c,h)=>{!h.width||!h.color||(i.save(),i.lineWidth=h.width,i.strokeStyle=h.color,i.setLineDash(h.borderDash||[]),i.lineDashOffset=h.borderDashOffset,i.beginPath(),i.moveTo(l.x,l.y),i.lineTo(c.x,c.y),i.stroke(),i.restore())};if(e.display)for(r=0,o=n.length;r{this.draw(n)}}]:[{z:i,draw:n=>{this.drawBackground(),this.drawGrid(n),this.drawTitle()}},{z:i+1,draw:()=>{this.drawBorder()}},{z:e,draw:n=>{this.drawLabels(n)}}]}getMatchingVisibleMetas(t){let e=this.chart.getSortedVisibleDatasetMetas(),i=this.axis+"AxisID",n=[],r,o;for(r=0,o=e.length;r{let i=e.split("."),n=i.pop(),r=[s].concat(i).join("."),o=t[e].split("."),a=o.pop(),l=o.join(".");L.route(r,n,l,a)})}function vu(s){return"id"in s&&"defaults"in s}var pr=class{constructor(){this.controllers=new Be(pt,"datasets",!0),this.elements=new Be(yt,"elements"),this.plugins=new Be(Object,"plugins"),this.scales=new Be(Yt,"scales"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...t){this._each("register",t)}remove(...t){this._each("unregister",t)}addControllers(...t){this._each("register",t,this.controllers)}addElements(...t){this._each("register",t,this.elements)}addPlugins(...t){this._each("register",t,this.plugins)}addScales(...t){this._each("register",t,this.scales)}getController(t){return this._get(t,this.controllers,"controller")}getElement(t){return this._get(t,this.elements,"element")}getPlugin(t){return this._get(t,this.plugins,"plugin")}getScale(t){return this._get(t,this.scales,"scale")}removeControllers(...t){this._each("unregister",t,this.controllers)}removeElements(...t){this._each("unregister",t,this.elements)}removePlugins(...t){this._each("unregister",t,this.plugins)}removeScales(...t){this._each("unregister",t,this.scales)}_each(t,e,i){[...e].forEach(n=>{let r=i||this._getRegistryForType(n);i||r.isForType(n)||r===this.plugins&&n.id?this._exec(t,r,n):H(n,o=>{let a=i||this._getRegistryForType(o);this._exec(t,a,o)})})}_exec(t,e,i){let n=Oi(t);j(i["before"+n],[],i),e[t](i),j(i["after"+n],[],i)}_getRegistryForType(t){for(let e=0;e0&&this.getParsed(e-1);for(let w=e;w0&&Math.abs(S[f]-_[f])>y,p&&(k.parsed=S,k.raw=c.data[w]),d&&(k.options=u||this.resolveDataElementOptions(w,x.active?"active":n)),b||this.updateElement(x,w,k,n),_=S}this.updateSharedOptions(u,n,h)}getMaxOverflow(){let t=this._cachedMeta,e=t.data||[];if(!this.options.showLine){let a=0;for(let l=e.length-1;l>=0;--l)a=Math.max(a,e[l].size(this.resolveDataElementOptions(l))/2);return a>0&&a}let i=t.dataset,n=i.options&&i.options.borderWidth||0;if(!e.length)return n;let r=e[0].size(this.resolveDataElementOptions(0)),o=e[e.length-1].size(this.resolveDataElementOptions(e.length-1));return Math.max(n,r,o)/2}};qe.id="scatter";qe.defaults={datasetElementType:!1,dataElementType:"point",showLine:!1,fill:!1};qe.overrides={interaction:{mode:"point"},plugins:{tooltip:{callbacks:{title(){return""},label(s){return"("+s.label+", "+s.formattedValue+")"}}}},scales:{x:{type:"linear"},y:{type:"linear"}}};var Ou=Object.freeze({__proto__:null,BarController:$e,BubbleController:je,DoughnutController:oe,LineController:Ue,PolarAreaController:Ye,PieController:Fs,RadarController:Ze,ScatterController:qe});function be(){throw new Error("This method is not implemented: Check that a complete date adapter is provided.")}var As=class{constructor(t){this.options=t||{}}init(t){}formats(){return be()}parse(t,e){return be()}format(t,e){return be()}add(t,e,i){return be()}diff(t,e,i){return be()}startOf(t,e,i){return be()}endOf(t,e){return be()}};As.override=function(s){Object.assign(As.prototype,s)};var Or={_date:As};function Du(s,t,e,i){let{controller:n,data:r,_sorted:o}=s,a=n._cachedMeta.iScale;if(a&&t===a.axis&&t!=="r"&&o&&r.length){let l=a._reversePixels?Po:Ft;if(i){if(n._sharedOptions){let c=r[0],h=typeof c.getRange=="function"&&c.getRange(t);if(h){let u=l(r,t,e-h),d=l(r,t,e+h);return{lo:u.lo,hi:d.hi}}}}else return l(r,t,e)}return{lo:0,hi:r.length-1}}function Vs(s,t,e,i,n){let r=s.getSortedVisibleDatasetMetas(),o=e[t];for(let a=0,l=r.length;a{l[o](t[e],n)&&(r.push({element:l,datasetIndex:c,index:h}),a=a||l.inRange(t.x,t.y,n))}),i&&!a?[]:r}var Fu={evaluateInteractionItems:Vs,modes:{index(s,t,e,i){let n=ie(t,s),r=e.axis||"x",o=e.includeInvisible||!1,a=e.intersect?lr(s,n,r,i,o):cr(s,n,r,!1,i,o),l=[];return a.length?(s.getSortedVisibleDatasetMetas().forEach(c=>{let h=a[0].index,u=c.data[h];u&&!u.skip&&l.push({element:u,datasetIndex:c.index,index:h})}),l):[]},dataset(s,t,e,i){let n=ie(t,s),r=e.axis||"xy",o=e.includeInvisible||!1,a=e.intersect?lr(s,n,r,i,o):cr(s,n,r,!1,i,o);if(a.length>0){let l=a[0].datasetIndex,c=s.getDatasetMeta(l).data;a=[];for(let h=0;he.pos===t)}function wa(s,t){return s.filter(e=>el.indexOf(e.pos)===-1&&e.box.axis===t)}function Ds(s,t){return s.sort((e,i)=>{let n=t?i:e,r=t?e:i;return n.weight===r.weight?n.index-r.index:n.weight-r.weight})}function Au(s){let t=[],e,i,n,r,o,a;for(e=0,i=(s||[]).length;ec.box.fullSize),!0),i=Ds(Os(t,"left"),!0),n=Ds(Os(t,"right")),r=Ds(Os(t,"top"),!0),o=Ds(Os(t,"bottom")),a=wa(t,"x"),l=wa(t,"y");return{fullSize:e,leftAndTop:i.concat(r),rightAndBottom:n.concat(l).concat(o).concat(a),chartArea:Os(t,"chartArea"),vertical:i.concat(n).concat(l),horizontal:r.concat(o).concat(a)}}function Sa(s,t,e,i){return Math.max(s[e],t[e])+Math.max(s[i],t[i])}function sl(s,t){s.top=Math.max(s.top,t.top),s.left=Math.max(s.left,t.left),s.bottom=Math.max(s.bottom,t.bottom),s.right=Math.max(s.right,t.right)}function Nu(s,t,e,i){let{pos:n,box:r}=e,o=s.maxPadding;if(!A(n)){e.size&&(s[n]-=e.size);let u=i[e.stack]||{size:0,count:1};u.size=Math.max(u.size,e.horizontal?r.height:r.width),e.size=u.size/u.count,s[n]+=e.size}r.getPadding&&sl(o,r.getPadding());let a=Math.max(0,t.outerWidth-Sa(o,s,"left","right")),l=Math.max(0,t.outerHeight-Sa(o,s,"top","bottom")),c=a!==s.w,h=l!==s.h;return s.w=a,s.h=l,e.horizontal?{same:c,other:h}:{same:h,other:c}}function Wu(s){let t=s.maxPadding;function e(i){let n=Math.max(t[i]-s[i],0);return s[i]+=n,n}s.y+=e("top"),s.x+=e("left"),e("right"),e("bottom")}function zu(s,t){let e=t.maxPadding;function i(n){let r={left:0,top:0,right:0,bottom:0};return n.forEach(o=>{r[o]=Math.max(t[o],e[o])}),r}return i(s?["left","right"]:["top","bottom"])}function Cs(s,t,e,i){let n=[],r,o,a,l,c,h;for(r=0,o=s.length,c=0;r{typeof g.beforeLayout=="function"&&g.beforeLayout()});let h=l.reduce((g,p)=>p.box.options&&p.box.options.display===!1?g:g+1,0)||1,u=Object.freeze({outerWidth:t,outerHeight:e,padding:n,availableWidth:r,availableHeight:o,vBoxMaxWidth:r/2/h,hBoxMaxHeight:o/2}),d=Object.assign({},n);sl(d,at(i));let f=Object.assign({maxPadding:d,w:r,h:o,x:n.left,y:n.top},n),m=Pu(l.concat(c),u);Cs(a.fullSize,f,u,m),Cs(l,f,u,m),Cs(c,f,u,m)&&Cs(l,f,u,m),Wu(f),ka(a.leftAndTop,f,u,m),f.x+=f.w,f.y+=f.h,ka(a.rightAndBottom,f,u,m),s.chartArea={left:f.left,top:f.top,right:f.left+f.w,bottom:f.top+f.h,height:f.h,width:f.w},H(a.chartArea,g=>{let p=g.box;Object.assign(p,s.chartArea),p.update(f.w,f.h,{left:0,top:0,right:0,bottom:0})})}},Ui=class{acquireContext(t,e){}releaseContext(t){return!1}addEventListener(t,e,i){}removeEventListener(t,e,i){}getDevicePixelRatio(){return 1}getMaximumSize(t,e,i,n){return e=Math.max(0,e||t.width),i=i||t.height,{width:e,height:Math.max(0,n?Math.floor(e/n):i)}}isAttached(t){return!0}updateConfig(t){}},yr=class extends Ui{acquireContext(t){return t&&t.getContext&&t.getContext("2d")||null}updateConfig(t){t.options.animation=!1}},$i="$chartjs",Vu={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"},Ma=s=>s===null||s==="";function Hu(s,t){let e=s.style,i=s.getAttribute("height"),n=s.getAttribute("width");if(s[$i]={initial:{height:i,width:n,style:{display:e.display,height:e.height,width:e.width}}},e.display=e.display||"block",e.boxSizing=e.boxSizing||"border-box",Ma(n)){let r=tr(s,"width");r!==void 0&&(s.width=r)}if(Ma(i))if(s.style.height==="")s.height=s.width/(t||2);else{let r=tr(s,"height");r!==void 0&&(s.height=r)}return s}var il=sa?{passive:!0}:!1;function Bu(s,t,e){s.addEventListener(t,e,il)}function $u(s,t,e){s.canvas.removeEventListener(t,e,il)}function ju(s,t){let e=Vu[s.type]||s.type,{x:i,y:n}=ie(s,t);return{type:e,chart:t,native:s,x:i!==void 0?i:null,y:n!==void 0?n:null}}function Yi(s,t){for(let e of s)if(e===t||e.contains(t))return!0}function Uu(s,t,e){let i=s.canvas,n=new MutationObserver(r=>{let o=!1;for(let a of r)o=o||Yi(a.addedNodes,i),o=o&&!Yi(a.removedNodes,i);o&&e()});return n.observe(document,{childList:!0,subtree:!0}),n}function Yu(s,t,e){let i=s.canvas,n=new MutationObserver(r=>{let o=!1;for(let a of r)o=o||Yi(a.removedNodes,i),o=o&&!Yi(a.addedNodes,i);o&&e()});return n.observe(document,{childList:!0,subtree:!0}),n}var Ls=new Map,Ta=0;function nl(){let s=window.devicePixelRatio;s!==Ta&&(Ta=s,Ls.forEach((t,e)=>{e.currentDevicePixelRatio!==s&&t()}))}function Zu(s,t){Ls.size||window.addEventListener("resize",nl),Ls.set(s,t)}function qu(s){Ls.delete(s),Ls.size||window.removeEventListener("resize",nl)}function Gu(s,t,e){let i=s.canvas,n=i&&Pi(i);if(!n)return;let r=Wn((a,l)=>{let c=n.clientWidth;e(a,l),c{let l=a[0],c=l.contentRect.width,h=l.contentRect.height;c===0&&h===0||r(c,h)});return o.observe(n),Zu(s,r),o}function hr(s,t,e){e&&e.disconnect(),t==="resize"&&qu(s)}function Xu(s,t,e){let i=s.canvas,n=Wn(r=>{s.ctx!==null&&e(ju(r,s))},s,r=>{let o=r[0];return[o,o.offsetX,o.offsetY]});return Bu(i,t,n),n}var br=class extends Ui{acquireContext(t,e){let i=t&&t.getContext&&t.getContext("2d");return i&&i.canvas===t?(Hu(t,e),i):null}releaseContext(t){let e=t.canvas;if(!e[$i])return!1;let i=e[$i].initial;["height","width"].forEach(r=>{let o=i[r];N(o)?e.removeAttribute(r):e.setAttribute(r,o)});let n=i.style||{};return Object.keys(n).forEach(r=>{e.style[r]=n[r]}),e.width=e.width,delete e[$i],!0}addEventListener(t,e,i){this.removeEventListener(t,e);let n=t.$proxies||(t.$proxies={}),o={attach:Uu,detach:Yu,resize:Gu}[e]||Xu;n[e]=o(t,e,i)}removeEventListener(t,e){let i=t.$proxies||(t.$proxies={}),n=i[e];if(!n)return;({attach:hr,detach:hr,resize:hr}[e]||$u)(t,e,n),i[e]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(t,e,i,n){return ea(t,e,i,n)}isAttached(t){let e=Pi(t);return!!(e&&e.isConnected)}};function Ku(s){return!Jn()||typeof OffscreenCanvas<"u"&&s instanceof OffscreenCanvas?yr:br}var xr=class{constructor(){this._init=[]}notify(t,e,i,n){e==="beforeInit"&&(this._init=this._createDescriptors(t,!0),this._notify(this._init,t,"install"));let r=n?this._descriptors(t).filter(n):this._descriptors(t),o=this._notify(r,t,e,i);return e==="afterDestroy"&&(this._notify(r,t,"stop"),this._notify(this._init,t,"uninstall")),o}_notify(t,e,i,n){n=n||{};for(let r of t){let o=r.plugin,a=o[i],l=[e,n,r.options];if(j(a,l,o)===!1&&n.cancelable)return!1}return!0}invalidate(){N(this._cache)||(this._oldCache=this._cache,this._cache=void 0)}_descriptors(t){if(this._cache)return this._cache;let e=this._cache=this._createDescriptors(t);return this._notifyStateChanges(t),e}_createDescriptors(t,e){let i=t&&t.config,n=C(i.options&&i.options.plugins,{}),r=Ju(i);return n===!1&&!e?[]:td(t,r,n,e)}_notifyStateChanges(t){let e=this._oldCache||[],i=this._cache,n=(r,o)=>r.filter(a=>!o.some(l=>a.plugin.id===l.plugin.id));this._notify(n(e,i),t,"stop"),this._notify(n(i,e),t,"start")}};function Ju(s){let t={},e=[],i=Object.keys(Rt.plugins.items);for(let r=0;r{let l=i[a];if(!A(l))return console.error(`Invalid scale configuration for scale: ${a}`);if(l._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${a}`);let c=wr(a,l),h=id(c,n),u=e.scales||{};r[c]=r[c]||a,o[a]=Pe(Object.create(null),[{axis:c},l,u[c],u[h]])}),s.data.datasets.forEach(a=>{let l=a.type||s.type,c=a.indexAxis||_r(l,t),u=(Qt[l]||{}).scales||{};Object.keys(u).forEach(d=>{let f=sd(d,c),m=a[f+"AxisID"]||r[f]||f;o[m]=o[m]||Object.create(null),Pe(o[m],[{axis:f},i[m],u[d]])})}),Object.keys(o).forEach(a=>{let l=o[a];Pe(l,[L.scales[l.type],L.scale])}),o}function rl(s){let t=s.options||(s.options={});t.plugins=C(t.plugins,{}),t.scales=rd(s,t)}function ol(s){return s=s||{},s.datasets=s.datasets||[],s.labels=s.labels||[],s}function od(s){return s=s||{},s.data=ol(s.data),rl(s),s}var va=new Map,al=new Set;function zi(s,t){let e=va.get(s);return e||(e=t(),va.set(s,e),al.add(e)),e}var Es=(s,t,e)=>{let i=Bt(t,e);i!==void 0&&s.add(i)},Sr=class{constructor(t){this._config=od(t),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(t){this._config.type=t}get data(){return this._config.data}set data(t){this._config.data=ol(t)}get options(){return this._config.options}set options(t){this._config.options=t}get plugins(){return this._config.plugins}update(){let t=this._config;this.clearCache(),rl(t)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(t){return zi(t,()=>[[`datasets.${t}`,""]])}datasetAnimationScopeKeys(t,e){return zi(`${t}.transition.${e}`,()=>[[`datasets.${t}.transitions.${e}`,`transitions.${e}`],[`datasets.${t}`,""]])}datasetElementScopeKeys(t,e){return zi(`${t}-${e}`,()=>[[`datasets.${t}.elements.${e}`,`datasets.${t}`,`elements.${e}`,""]])}pluginScopeKeys(t){let e=t.id,i=this.type;return zi(`${i}-plugin-${e}`,()=>[[`plugins.${e}`,...t.additionalOptionScopes||[]]])}_cachedScopes(t,e){let i=this._scopeCache,n=i.get(t);return(!n||e)&&(n=new Map,i.set(t,n)),n}getOptionScopes(t,e,i){let{options:n,type:r}=this,o=this._cachedScopes(t,i),a=o.get(e);if(a)return a;let l=new Set;e.forEach(h=>{t&&(l.add(t),h.forEach(u=>Es(l,t,u))),h.forEach(u=>Es(l,n,u)),h.forEach(u=>Es(l,Qt[r]||{},u)),h.forEach(u=>Es(l,L,u)),h.forEach(u=>Es(l,Ii,u))});let c=Array.from(l);return c.length===0&&c.push(Object.create(null)),al.has(e)&&o.set(e,c),c}chartOptionScopes(){let{options:t,type:e}=this;return[t,Qt[e]||{},L.datasets[e]||{},{type:e},L,Ii]}resolveNamedOptions(t,e,i,n=[""]){let r={$shared:!0},{resolver:o,subPrefixes:a}=Oa(this._resolverCache,t,n),l=o;if(ld(o,e)){r.$shared=!1,i=Ht(i)?i():i;let c=this.createResolver(t,i,a);l=ge(o,i,c)}for(let c of e)r[c]=l[c];return r}createResolver(t,e,i=[""],n){let{resolver:r}=Oa(this._resolverCache,t,i);return A(e)?ge(r,e,void 0,n):r}};function Oa(s,t,e){let i=s.get(t);i||(i=new Map,s.set(t,i));let n=e.join(),r=i.get(n);return r||(r={resolver:Li(t,e),subPrefixes:e.filter(a=>!a.toLowerCase().includes("hover"))},i.set(n,r)),r}var ad=s=>A(s)&&Object.getOwnPropertyNames(s).reduce((t,e)=>t||Ht(s[e]),!1);function ld(s,t){let{isScriptable:e,isIndexable:i}=qn(s);for(let n of t){let r=e(n),o=i(n),a=(o||r)&&s[n];if(r&&(Ht(a)||ad(a))||o&&$(a))return!0}return!1}var cd="3.9.1",hd=["top","bottom","left","right","chartArea"];function Da(s,t){return s==="top"||s==="bottom"||hd.indexOf(s)===-1&&t==="x"}function Ea(s,t){return function(e,i){return e[s]===i[s]?e[t]-i[t]:e[s]-i[s]}}function Ca(s){let t=s.chart,e=t.options.animation;t.notifyPlugins("afterRender"),j(e&&e.onComplete,[s],t)}function ud(s){let t=s.chart,e=t.options.animation;j(e&&e.onProgress,[s],t)}function ll(s){return Jn()&&typeof s=="string"?s=document.getElementById(s):s&&s.length&&(s=s[0]),s&&s.canvas&&(s=s.canvas),s}var Zi={},cl=s=>{let t=ll(s);return Object.values(Zi).filter(e=>e.canvas===t).pop()};function dd(s,t,e){let i=Object.keys(s);for(let n of i){let r=+n;if(r>=t){let o=s[n];delete s[n],(e>0||r>t)&&(s[r+e]=o)}}}function fd(s,t,e,i){return!e||s.type==="mouseout"?null:i?t:s}var xe=class{constructor(t,e){let i=this.config=new Sr(e),n=ll(t),r=cl(n);if(r)throw new Error("Canvas is already in use. Chart with ID '"+r.id+"' must be destroyed before the canvas with ID '"+r.canvas.id+"' can be reused.");let o=i.createResolver(i.chartOptionScopes(),this.getContext());this.platform=new(i.platform||Ku(n)),this.platform.updateConfig(i);let a=this.platform.acquireContext(n,o.aspectRatio),l=a&&a.canvas,c=l&&l.height,h=l&&l.width;if(this.id=Do(),this.ctx=a,this.canvas=l,this.width=h,this.height=c,this._options=o,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new xr,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=zo(u=>this.update(u),o.resizeDelay||0),this._dataChanges=[],Zi[this.id]=this,!a||!l){console.error("Failed to create chart: can't acquire context from the given item");return}jt.listen(this,"complete",Ca),jt.listen(this,"progress",ud),this._initialize(),this.attached&&this.update()}get aspectRatio(){let{options:{aspectRatio:t,maintainAspectRatio:e},width:i,height:n,_aspectRatio:r}=this;return N(t)?e&&r?r:n?i/n:null:t}get data(){return this.config.data}set data(t){this.config.data=t}get options(){return this._options}set options(t){this.config.options=t}_initialize(){return this.notifyPlugins("beforeInit"),this.options.responsive?this.resize():Qn(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins("afterInit"),this}clear(){return Un(this.canvas,this.ctx),this}stop(){return jt.stop(this),this}resize(t,e){jt.running(this)?this._resizeBeforeDraw={width:t,height:e}:this._resize(t,e)}_resize(t,e){let i=this.options,n=this.canvas,r=i.maintainAspectRatio&&this.aspectRatio,o=this.platform.getMaximumSize(n,t,e,r),a=i.devicePixelRatio||this.platform.getDevicePixelRatio(),l=this.width?"resize":"attach";this.width=o.width,this.height=o.height,this._aspectRatio=this.aspectRatio,Qn(this,a,!0)&&(this.notifyPlugins("resize",{size:o}),j(i.onResize,[this,o],this),this.attached&&this._doResize(l)&&this.render())}ensureScalesHaveIDs(){let e=this.options.scales||{};H(e,(i,n)=>{i.id=n})}buildOrUpdateScales(){let t=this.options,e=t.scales,i=this.scales,n=Object.keys(i).reduce((o,a)=>(o[a]=!1,o),{}),r=[];e&&(r=r.concat(Object.keys(e).map(o=>{let a=e[o],l=wr(o,a),c=l==="r",h=l==="x";return{options:a,dposition:c?"chartArea":h?"bottom":"left",dtype:c?"radialLinear":h?"category":"linear"}}))),H(r,o=>{let a=o.options,l=a.id,c=wr(l,a),h=C(a.type,o.dtype);(a.position===void 0||Da(a.position,c)!==Da(o.dposition))&&(a.position=o.dposition),n[l]=!0;let u=null;if(l in i&&i[l].type===h)u=i[l];else{let d=Rt.getScale(h);u=new d({id:l,type:h,ctx:this.ctx,chart:this}),i[u.id]=u}u.init(a,t)}),H(n,(o,a)=>{o||delete i[a]}),H(i,o=>{lt.configure(this,o,o.options),lt.addBox(this,o)})}_updateMetasets(){let t=this._metasets,e=this.data.datasets.length,i=t.length;if(t.sort((n,r)=>n.index-r.index),i>e){for(let n=e;ne.length&&delete this._stacks,t.forEach((i,n)=>{e.filter(r=>r===i._dataset).length===0&&this._destroyDatasetMeta(n)})}buildOrUpdateControllers(){let t=[],e=this.data.datasets,i,n;for(this._removeUnreferencedMetasets(),i=0,n=e.length;i{this.getDatasetMeta(e).controller.reset()},this)}reset(){this._resetElements(),this.notifyPlugins("reset")}update(t){let e=this.config;e.update();let i=this._options=e.createResolver(e.chartOptionScopes(),this.getContext()),n=this._animationsDisabled=!i.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),this.notifyPlugins("beforeUpdate",{mode:t,cancelable:!0})===!1)return;let r=this.buildOrUpdateControllers();this.notifyPlugins("beforeElementsUpdate");let o=0;for(let c=0,h=this.data.datasets.length;c{c.reset()}),this._updateDatasets(t),this.notifyPlugins("afterUpdate",{mode:t}),this._layers.sort(Ea("z","_idx"));let{_active:a,_lastEvent:l}=this;l?this._eventHandler(l,!0):a.length&&this._updateHoverStyles(a,a,!0),this.render()}_updateScales(){H(this.scales,t=>{lt.removeBox(this,t)}),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){let t=this.options,e=new Set(Object.keys(this._listeners)),i=new Set(t.events);(!Cn(e,i)||!!this._responsiveListeners!==t.responsive)&&(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){let{_hiddenIndices:t}=this,e=this._getUniformDataChanges()||[];for(let{method:i,start:n,count:r}of e){let o=i==="_removeElements"?-r:r;dd(t,n,o)}}_getUniformDataChanges(){let t=this._dataChanges;if(!t||!t.length)return;this._dataChanges=[];let e=this.data.datasets.length,i=r=>new Set(t.filter(o=>o[0]===r).map((o,a)=>a+","+o.splice(1).join(","))),n=i(0);for(let r=1;rr.split(",")).map(r=>({method:r[1],start:+r[2],count:+r[3]}))}_updateLayout(t){if(this.notifyPlugins("beforeLayout",{cancelable:!0})===!1)return;lt.update(this,this.width,this.height,t);let e=this.chartArea,i=e.width<=0||e.height<=0;this._layers=[],H(this.boxes,n=>{i&&n.position==="chartArea"||(n.configure&&n.configure(),this._layers.push(...n._layers()))},this),this._layers.forEach((n,r)=>{n._idx=r}),this.notifyPlugins("afterLayout")}_updateDatasets(t){if(this.notifyPlugins("beforeDatasetsUpdate",{mode:t,cancelable:!0})!==!1){for(let e=0,i=this.data.datasets.length;e=0;--e)this._drawDataset(t[e]);this.notifyPlugins("afterDatasetsDraw")}_drawDataset(t){let e=this.ctx,i=t._clip,n=!i.disabled,r=this.chartArea,o={meta:t,index:t.index,cancelable:!0};this.notifyPlugins("beforeDatasetDraw",o)!==!1&&(n&&ks(e,{left:i.left===!1?0:r.left-i.left,right:i.right===!1?this.width:r.right+i.right,top:i.top===!1?0:r.top-i.top,bottom:i.bottom===!1?this.height:r.bottom+i.bottom}),t.controller.draw(),n&&Ms(e),o.cancelable=!1,this.notifyPlugins("afterDatasetDraw",o))}isPointInArea(t){return Ae(t,this.chartArea,this._minPadding)}getElementsAtEventForMode(t,e,i,n){let r=Fu.modes[e];return typeof r=="function"?r(this,t,i,n):[]}getDatasetMeta(t){let e=this.data.datasets[t],i=this._metasets,n=i.filter(r=>r&&r._dataset===e).pop();return n||(n={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e&&e.order||0,index:t,_dataset:e,_parsed:[],_sorted:!1},i.push(n)),n}getContext(){return this.$context||(this.$context=$t(null,{chart:this,type:"chart"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(t){let e=this.data.datasets[t];if(!e)return!1;let i=this.getDatasetMeta(t);return typeof i.hidden=="boolean"?!i.hidden:!e.hidden}setDatasetVisibility(t,e){let i=this.getDatasetMeta(t);i.hidden=!e}toggleDataVisibility(t){this._hiddenIndices[t]=!this._hiddenIndices[t]}getDataVisibility(t){return!this._hiddenIndices[t]}_updateVisibility(t,e,i){let n=i?"show":"hide",r=this.getDatasetMeta(t),o=r.controller._resolveAnimations(void 0,n);ft(e)?(r.data[e].hidden=!i,this.update()):(this.setDatasetVisibility(t,i),o.update(r,{visible:i}),this.update(a=>a.datasetIndex===t?n:void 0))}hide(t,e){this._updateVisibility(t,e,!1)}show(t,e){this._updateVisibility(t,e,!0)}_destroyDatasetMeta(t){let e=this._metasets[t];e&&e.controller&&e.controller._destroy(),delete this._metasets[t]}_stop(){let t,e;for(this.stop(),jt.remove(this),t=0,e=this.data.datasets.length;t{e.addEventListener(this,r,o),t[r]=o},n=(r,o,a)=>{r.offsetX=o,r.offsetY=a,this._eventHandler(r)};H(this.options.events,r=>i(r,n))}bindResponsiveEvents(){this._responsiveListeners||(this._responsiveListeners={});let t=this._responsiveListeners,e=this.platform,i=(l,c)=>{e.addEventListener(this,l,c),t[l]=c},n=(l,c)=>{t[l]&&(e.removeEventListener(this,l,c),delete t[l])},r=(l,c)=>{this.canvas&&this.resize(l,c)},o,a=()=>{n("attach",a),this.attached=!0,this.resize(),i("resize",r),i("detach",o)};o=()=>{this.attached=!1,n("resize",r),this._stop(),this._resize(0,0),i("attach",a)},e.isAttached(this.canvas)?a():o()}unbindEvents(){H(this._listeners,(t,e)=>{this.platform.removeEventListener(this,e,t)}),this._listeners={},H(this._responsiveListeners,(t,e)=>{this.platform.removeEventListener(this,e,t)}),this._responsiveListeners=void 0}updateHoverStyle(t,e,i){let n=i?"set":"remove",r,o,a,l;for(e==="dataset"&&(r=this.getDatasetMeta(t[0].datasetIndex),r.controller["_"+n+"DatasetHoverStyle"]()),a=0,l=t.length;a{let a=this.getDatasetMeta(r);if(!a)throw new Error("No dataset found at index "+r);return{datasetIndex:r,element:a.data[o],index:o}});!ws(i,e)&&(this._active=i,this._lastEvent=null,this._updateHoverStyles(i,e))}notifyPlugins(t,e,i){return this._plugins.notify(this,t,e,i)}_updateHoverStyles(t,e,i){let n=this.options.hover,r=(l,c)=>l.filter(h=>!c.some(u=>h.datasetIndex===u.datasetIndex&&h.index===u.index)),o=r(e,t),a=i?t:r(t,e);o.length&&this.updateHoverStyle(o,n.mode,!1),a.length&&n.mode&&this.updateHoverStyle(a,n.mode,!0)}_eventHandler(t,e){let i={event:t,replay:e,cancelable:!0,inChartArea:this.isPointInArea(t)},n=o=>(o.options.events||this.options.events).includes(t.native.type);if(this.notifyPlugins("beforeEvent",i,n)===!1)return;let r=this._handleEvent(t,e,i.inChartArea);return i.cancelable=!1,this.notifyPlugins("afterEvent",i,n),(r||i.changed)&&this.render(),this}_handleEvent(t,e,i){let{_active:n=[],options:r}=this,o=e,a=this._getActiveElements(t,n,i,o),l=Io(t),c=fd(t,this._lastEvent,i,l);i&&(this._lastEvent=null,j(r.onHover,[t,a,this],this),l&&j(r.onClick,[t,a,this],this));let h=!ws(a,n);return(h||e)&&(this._active=a,this._updateHoverStyles(a,n,e)),this._lastEvent=c,h}_getActiveElements(t,e,i,n){if(t.type==="mouseout")return[];if(!i)return e;let r=this.options.hover;return this.getElementsAtEventForMode(t,r.mode,r,n)}},Ia=()=>H(xe.instances,s=>s._plugins.invalidate()),ne=!0;Object.defineProperties(xe,{defaults:{enumerable:ne,value:L},instances:{enumerable:ne,value:Zi},overrides:{enumerable:ne,value:Qt},registry:{enumerable:ne,value:Rt},version:{enumerable:ne,value:cd},getChart:{enumerable:ne,value:cl},register:{enumerable:ne,value:(...s)=>{Rt.add(...s),Ia()}},unregister:{enumerable:ne,value:(...s)=>{Rt.remove(...s),Ia()}}});function hl(s,t,e){let{startAngle:i,pixelMargin:n,x:r,y:o,outerRadius:a,innerRadius:l}=t,c=n/a;s.beginPath(),s.arc(r,o,a,i-c,e+c),l>n?(c=n/l,s.arc(r,o,l,e+c,i-c,!0)):s.arc(r,o,n,e+Z,i-Z),s.closePath(),s.clip()}function md(s){return Ai(s,["outerStart","outerEnd","innerStart","innerEnd"])}function gd(s,t,e,i){let n=md(s.options.borderRadius),r=(e-t)/2,o=Math.min(r,i*t/2),a=l=>{let c=(e-Math.min(r,l))*i/2;return it(l,0,Math.min(r,c))};return{outerStart:a(n.outerStart),outerEnd:a(n.outerEnd),innerStart:it(n.innerStart,0,o),innerEnd:it(n.innerEnd,0,o)}}function He(s,t,e,i){return{x:e+s*Math.cos(t),y:i+s*Math.sin(t)}}function kr(s,t,e,i,n,r){let{x:o,y:a,startAngle:l,pixelMargin:c,innerRadius:h}=t,u=Math.max(t.outerRadius+i+e-c,0),d=h>0?h+i+e+c:0,f=0,m=n-l;if(i){let E=h>0?h-i:0,et=u>0?u-i:0,Q=(E+et)/2,fe=Q!==0?m*Q/(Q+i):m;f=(m-fe)/2}let g=Math.max(.001,m*u-e/Y)/u,p=(m-g)/2,y=l+p+f,b=n-p-f,{outerStart:_,outerEnd:w,innerStart:x,innerEnd:S}=gd(t,d,u,b-y),k=u-_,O=u-w,v=y+_/k,F=b-w/O,W=d+x,R=d+S,tt=y+x/W,ct=b-S/R;if(s.beginPath(),r){if(s.arc(o,a,u,v,F),w>0){let Q=He(O,F,o,a);s.arc(Q.x,Q.y,w,F,b+Z)}let E=He(R,b,o,a);if(s.lineTo(E.x,E.y),S>0){let Q=He(R,ct,o,a);s.arc(Q.x,Q.y,S,b+Z,ct+Math.PI)}if(s.arc(o,a,d,b-S/d,y+x/d,!0),x>0){let Q=He(W,tt,o,a);s.arc(Q.x,Q.y,x,tt+Math.PI,y-Z)}let et=He(k,y,o,a);if(s.lineTo(et.x,et.y),_>0){let Q=He(k,v,o,a);s.arc(Q.x,Q.y,_,y-Z,v)}}else{s.moveTo(o,a);let E=Math.cos(v)*u+o,et=Math.sin(v)*u+a;s.lineTo(E,et);let Q=Math.cos(F)*u+o,fe=Math.sin(F)*u+a;s.lineTo(Q,fe)}s.closePath()}function pd(s,t,e,i,n){let{fullCircles:r,startAngle:o,circumference:a}=t,l=t.endAngle;if(r){kr(s,t,e,i,o+B,n);for(let c=0;c=B||Ne(r,a,l),g=Lt(o,c+d,h+d);return m&&g}getCenterPoint(t){let{x:e,y:i,startAngle:n,endAngle:r,innerRadius:o,outerRadius:a}=this.getProps(["x","y","startAngle","endAngle","innerRadius","outerRadius","circumference"],t),{offset:l,spacing:c}=this.options,h=(n+r)/2,u=(o+a+c+l)/2;return{x:e+Math.cos(h)*u,y:i+Math.sin(h)*u}}tooltipPosition(t){return this.getCenterPoint(t)}draw(t){let{options:e,circumference:i}=this,n=(e.offset||0)/2,r=(e.spacing||0)/2,o=e.circular;if(this.pixelMargin=e.borderAlign==="inner"?.33:0,this.fullCircles=i>B?Math.floor(i/B):0,i===0||this.innerRadius<0||this.outerRadius<0)return;t.save();let a=0;if(n){a=n/2;let c=(this.startAngle+this.endAngle)/2;t.translate(Math.cos(c)*a,Math.sin(c)*a),this.circumference>=Y&&(a=n)}t.fillStyle=e.backgroundColor,t.strokeStyle=e.borderColor;let l=pd(t,this,a,r,o);bd(t,this,a,r,l,o),t.restore()}};Ge.id="arc";Ge.defaults={borderAlign:"center",borderColor:"#fff",borderJoinStyle:void 0,borderRadius:0,borderWidth:2,offset:0,spacing:0,angle:void 0,circular:!0};Ge.defaultRoutes={backgroundColor:"backgroundColor"};function ul(s,t,e=t){s.lineCap=C(e.borderCapStyle,t.borderCapStyle),s.setLineDash(C(e.borderDash,t.borderDash)),s.lineDashOffset=C(e.borderDashOffset,t.borderDashOffset),s.lineJoin=C(e.borderJoinStyle,t.borderJoinStyle),s.lineWidth=C(e.borderWidth,t.borderWidth),s.strokeStyle=C(e.borderColor,t.borderColor)}function xd(s,t,e){s.lineTo(e.x,e.y)}function _d(s){return s.stepped?Zo:s.tension||s.cubicInterpolationMode==="monotone"?qo:xd}function dl(s,t,e={}){let i=s.length,{start:n=0,end:r=i-1}=e,{start:o,end:a}=t,l=Math.max(n,o),c=Math.min(r,a),h=na&&r>a;return{count:i,start:l,loop:t.loop,ilen:c(o+(c?a-w:w))%r,_=()=>{g!==p&&(s.lineTo(h,p),s.lineTo(h,g),s.lineTo(h,y))};for(l&&(f=n[b(0)],s.moveTo(f.x,f.y)),d=0;d<=a;++d){if(f=n[b(d)],f.skip)continue;let w=f.x,x=f.y,S=w|0;S===m?(xp&&(p=x),h=(u*h+w)/++u):(_(),s.lineTo(w,x),m=S,u=0,g=p=x),y=x}_()}function Mr(s){let t=s.options,e=t.borderDash&&t.borderDash.length;return!s._decimated&&!s._loop&&!t.tension&&t.cubicInterpolationMode!=="monotone"&&!t.stepped&&!e?Sd:wd}function kd(s){return s.stepped?ia:s.tension||s.cubicInterpolationMode==="monotone"?na:Xt}function Md(s,t,e,i){let n=t._path;n||(n=t._path=new Path2D,t.path(n,e,i)&&n.closePath()),ul(s,t.options),s.stroke(n)}function Td(s,t,e,i){let{segments:n,options:r}=t,o=Mr(t);for(let a of n)ul(s,r,a.style),s.beginPath(),o(s,t,a,{start:e,end:e+i-1})&&s.closePath(),s.stroke()}var vd=typeof Path2D=="function";function Od(s,t,e,i){vd&&!t.options.segment?Md(s,t,e,i):Td(s,t,e,i)}var Nt=class extends yt{constructor(t){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,t&&Object.assign(this,t)}updateControlPoints(t,e){let i=this.options;if((i.tension||i.cubicInterpolationMode==="monotone")&&!i.stepped&&!this._pointsUpdated){let n=i.spanGaps?this._loop:this._fullLoop;ta(this._points,i,t,n,e),this._pointsUpdated=!0}}set points(t){this._points=t,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=oa(this,this.options.segment))}first(){let t=this.segments,e=this.points;return t.length&&e[t[0].start]}last(){let t=this.segments,e=this.points,i=t.length;return i&&e[t[i-1].end]}interpolate(t,e){let i=this.options,n=t[e],r=this.points,o=nr(this,{property:e,start:n,end:n});if(!o.length)return;let a=[],l=kd(i),c,h;for(c=0,h=o.length;cs!=="borderDash"&&s!=="fill"};function Fa(s,t,e,i){let n=s.options,{[e]:r}=s.getProps([e],i);return Math.abs(t-r)=e)return s.slice(t,t+e);let o=[],a=(e-2)/(r-2),l=0,c=t+e-1,h=t,u,d,f,m,g;for(o[l++]=s[h],u=0;uf&&(f=m,d=s[b],g=b);o[l++]=d,h=g}return o[l++]=s[c],o}function Pd(s,t,e,i){let n=0,r=0,o,a,l,c,h,u,d,f,m,g,p=[],y=t+e-1,b=s[t].x,w=s[y].x-b;for(o=t;og&&(g=c,d=o),n=(r*n+a.x)/++r;else{let S=o-1;if(!N(u)&&!N(d)){let k=Math.min(u,d),O=Math.max(u,d);k!==f&&k!==S&&p.push({...s[k],x:n}),O!==f&&O!==S&&p.push({...s[O],x:n})}o>0&&S!==f&&p.push(s[S]),p.push(a),h=x,r=0,m=g=c,u=d=f=o}}return p}function ml(s){if(s._decimated){let t=s._data;delete s._decimated,delete s._data,Object.defineProperty(s,"data",{value:t})}}function Aa(s){s.data.datasets.forEach(t=>{ml(t)})}function Rd(s,t){let e=t.length,i=0,n,{iScale:r}=s,{min:o,max:a,minDefined:l,maxDefined:c}=r.getUserBounds();return l&&(i=it(Ft(t,r.axis,o).lo,0,e-1)),c?n=it(Ft(t,r.axis,a).hi+1,i,e)-i:n=e-i,{start:i,count:n}}var Nd={id:"decimation",defaults:{algorithm:"min-max",enabled:!1},beforeElementsUpdate:(s,t,e)=>{if(!e.enabled){Aa(s);return}let i=s.width;s.data.datasets.forEach((n,r)=>{let{_data:o,indexAxis:a}=n,l=s.getDatasetMeta(r),c=o||n.data;if(ze([a,s.options.indexAxis])==="y"||!l.controller.supportsDecimation)return;let h=s.scales[l.xAxisID];if(h.type!=="linear"&&h.type!=="time"||s.options.parsing)return;let{start:u,count:d}=Rd(l,c),f=e.threshold||4*i;if(d<=f){ml(n);return}N(o)&&(n._data=c,delete n.data,Object.defineProperty(n,"data",{configurable:!0,enumerable:!0,get:function(){return this._decimated},set:function(g){this._data=g}}));let m;switch(e.algorithm){case"lttb":m=Ld(c,u,d,i,e);break;case"min-max":m=Pd(c,u,d,i);break;default:throw new Error(`Unsupported decimation algorithm '${e.algorithm}'`)}n._decimated=m})},destroy(s){Aa(s)}};function Wd(s,t,e){let i=s.segments,n=s.points,r=t.points,o=[];for(let a of i){let{start:l,end:c}=a;c=Dr(l,c,n);let h=Tr(e,n[l],n[c],a.loop);if(!t.segments){o.push({source:a,target:h,start:n[l],end:n[c]});continue}let u=nr(t,h);for(let d of u){let f=Tr(e,r[d.start],r[d.end],d.loop),m=ir(a,n,f);for(let g of m)o.push({source:g,target:d,start:{[e]:La(h,f,"start",Math.max)},end:{[e]:La(h,f,"end",Math.min)}})}}return o}function Tr(s,t,e,i){if(i)return;let n=t[s],r=e[s];return s==="angle"&&(n=ht(n),r=ht(r)),{property:s,start:n,end:r}}function zd(s,t){let{x:e=null,y:i=null}=s||{},n=t.points,r=[];return t.segments.forEach(({start:o,end:a})=>{a=Dr(o,a,n);let l=n[o],c=n[a];i!==null?(r.push({x:l.x,y:i}),r.push({x:c.x,y:i})):e!==null&&(r.push({x:e,y:l.y}),r.push({x:e,y:c.y}))}),r}function Dr(s,t,e){for(;t>s;t--){let i=e[t];if(!isNaN(i.x)&&!isNaN(i.y))break}return t}function La(s,t,e,i){return s&&t?i(s[e],t[e]):s?s[e]:t?t[e]:0}function gl(s,t){let e=[],i=!1;return $(s)?(i=!0,e=s):e=zd(s,t),e.length?new Nt({points:e,options:{tension:0},_loop:i,_fullLoop:i}):null}function Pa(s){return s&&s.fill!==!1}function Vd(s,t,e){let n=s[t].fill,r=[t],o;if(!e)return n;for(;n!==!1&&r.indexOf(n)===-1;){if(!K(n))return n;if(o=s[n],!o)return!1;if(o.visible)return n;r.push(n),n=o.fill}return!1}function Hd(s,t,e){let i=Ud(s);if(A(i))return isNaN(i.value)?!1:i;let n=parseFloat(i);return K(n)&&Math.floor(n)===n?Bd(i[0],t,n,e):["origin","start","end","stack","shape"].indexOf(i)>=0&&i}function Bd(s,t,e,i){return(s==="-"||s==="+")&&(e=t+e),e===t||e<0||e>=i?!1:e}function $d(s,t){let e=null;return s==="start"?e=t.bottom:s==="end"?e=t.top:A(s)?e=t.getPixelForValue(s.value):t.getBasePixel&&(e=t.getBasePixel()),e}function jd(s,t,e){let i;return s==="start"?i=e:s==="end"?i=t.options.reverse?t.min:t.max:A(s)?i=s.value:i=t.getBaseValue(),i}function Ud(s){let t=s.options,e=t.fill,i=C(e&&e.target,e);return i===void 0&&(i=!!t.backgroundColor),i===!1||i===null?!1:i===!0?"origin":i}function Yd(s){let{scale:t,index:e,line:i}=s,n=[],r=i.segments,o=i.points,a=Zd(t,e);a.push(gl({x:null,y:t.bottom},i));for(let l=0;l=0;--o){let a=n[o].$filler;a&&(a.line.updateControlPoints(r,a.axis),i&&a.fill&&fr(s.ctx,a,r))}},beforeDatasetsDraw(s,t,e){if(e.drawTime!=="beforeDatasetsDraw")return;let i=s.getSortedVisibleDatasetMetas();for(let n=i.length-1;n>=0;--n){let r=i[n].$filler;Pa(r)&&fr(s.ctx,r,s.chartArea)}},beforeDatasetDraw(s,t,e){let i=t.meta.$filler;!Pa(i)||e.drawTime!=="beforeDatasetDraw"||fr(s.ctx,i,s.chartArea)},defaults:{propagate:!0,drawTime:"beforeDatasetDraw"}},za=(s,t)=>{let{boxHeight:e=t,boxWidth:i=t}=s;return s.usePointStyle&&(e=Math.min(e,t),i=s.pointStyleWidth||Math.min(i,t)),{boxWidth:i,boxHeight:e,itemHeight:Math.max(t,e)}},rf=(s,t)=>s!==null&&t!==null&&s.datasetIndex===t.datasetIndex&&s.index===t.index,Gi=class extends yt{constructor(t){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e,i){this.maxWidth=t,this.maxHeight=e,this._margins=i,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){let t=this.options.labels||{},e=j(t.generateLabels,[this.chart],this)||[];t.filter&&(e=e.filter(i=>t.filter(i,this.chart.data))),t.sort&&(e=e.sort((i,n)=>t.sort(i,n,this.chart.data))),this.options.reverse&&e.reverse(),this.legendItems=e}fit(){let{options:t,ctx:e}=this;if(!t.display){this.width=this.height=0;return}let i=t.labels,n=st(i.font),r=n.size,o=this._computeTitleHeight(),{boxWidth:a,itemHeight:l}=za(i,r),c,h;e.font=n.string,this.isHorizontal()?(c=this.maxWidth,h=this._fitRows(o,r,a,l)+10):(h=this.maxHeight,c=this._fitCols(o,r,a,l)+10),this.width=Math.min(c,t.maxWidth||this.maxWidth),this.height=Math.min(h,t.maxHeight||this.maxHeight)}_fitRows(t,e,i,n){let{ctx:r,maxWidth:o,options:{labels:{padding:a}}}=this,l=this.legendHitBoxes=[],c=this.lineWidths=[0],h=n+a,u=t;r.textAlign="left",r.textBaseline="middle";let d=-1,f=-h;return this.legendItems.forEach((m,g)=>{let p=i+e/2+r.measureText(m.text).width;(g===0||c[c.length-1]+p+2*a>o)&&(u+=h,c[c.length-(g>0?0:1)]=0,f+=h,d++),l[g]={left:0,top:f,row:d,width:p,height:n},c[c.length-1]+=p+a}),u}_fitCols(t,e,i,n){let{ctx:r,maxHeight:o,options:{labels:{padding:a}}}=this,l=this.legendHitBoxes=[],c=this.columnSizes=[],h=o-t,u=a,d=0,f=0,m=0,g=0;return this.legendItems.forEach((p,y)=>{let b=i+e/2+r.measureText(p.text).width;y>0&&f+n+2*a>h&&(u+=d+a,c.push({width:d,height:f}),m+=d+a,g++,d=f=0),l[y]={left:m,top:f,col:g,width:b,height:n},d=Math.max(d,b),f+=n+a}),u+=d,c.push({width:d,height:f}),u}adjustHitBoxes(){if(!this.options.display)return;let t=this._computeTitleHeight(),{legendHitBoxes:e,options:{align:i,labels:{padding:n},rtl:r}}=this,o=ye(r,this.left,this.width);if(this.isHorizontal()){let a=0,l=ot(i,this.left+n,this.right-this.lineWidths[a]);for(let c of e)a!==c.row&&(a=c.row,l=ot(i,this.left+n,this.right-this.lineWidths[a])),c.top+=this.top+t+n,c.left=o.leftForLtr(o.x(l),c.width),l+=c.width+n}else{let a=0,l=ot(i,this.top+t+n,this.bottom-this.columnSizes[a].height);for(let c of e)c.col!==a&&(a=c.col,l=ot(i,this.top+t+n,this.bottom-this.columnSizes[a].height)),c.top=l,c.left+=this.left+n,c.left=o.leftForLtr(o.x(c.left),c.width),l+=c.height+n}}isHorizontal(){return this.options.position==="top"||this.options.position==="bottom"}draw(){if(this.options.display){let t=this.ctx;ks(t,this),this._draw(),Ms(t)}}_draw(){let{options:t,columnSizes:e,lineWidths:i,ctx:n}=this,{align:r,labels:o}=t,a=L.color,l=ye(t.rtl,this.left,this.width),c=st(o.font),{color:h,padding:u}=o,d=c.size,f=d/2,m;this.drawTitle(),n.textAlign=l.textAlign("left"),n.textBaseline="middle",n.lineWidth=.5,n.font=c.string;let{boxWidth:g,boxHeight:p,itemHeight:y}=za(o,d),b=function(k,O,v){if(isNaN(g)||g<=0||isNaN(p)||p<0)return;n.save();let F=C(v.lineWidth,1);if(n.fillStyle=C(v.fillStyle,a),n.lineCap=C(v.lineCap,"butt"),n.lineDashOffset=C(v.lineDashOffset,0),n.lineJoin=C(v.lineJoin,"miter"),n.lineWidth=F,n.strokeStyle=C(v.strokeStyle,a),n.setLineDash(C(v.lineDash,[])),o.usePointStyle){let W={radius:p*Math.SQRT2/2,pointStyle:v.pointStyle,rotation:v.rotation,borderWidth:F},R=l.xPlus(k,g/2),tt=O+f;Yn(n,W,R,tt,o.pointStyleWidth&&g)}else{let W=O+Math.max((d-p)/2,0),R=l.leftForLtr(k,g),tt=se(v.borderRadius);n.beginPath(),Object.values(tt).some(ct=>ct!==0)?We(n,{x:R,y:W,w:g,h:p,radius:tt}):n.rect(R,W,g,p),n.fill(),F!==0&&n.stroke()}n.restore()},_=function(k,O,v){ee(n,v.text,k,O+y/2,c,{strikethrough:v.hidden,textAlign:l.textAlign(v.textAlign)})},w=this.isHorizontal(),x=this._computeTitleHeight();w?m={x:ot(r,this.left+u,this.right-i[0]),y:this.top+u+x,line:0}:m={x:this.left+u,y:ot(r,this.top+x+u,this.bottom-e[0].height),line:0},er(this.ctx,t.textDirection);let S=y+u;this.legendItems.forEach((k,O)=>{n.strokeStyle=k.fontColor||h,n.fillStyle=k.fontColor||h;let v=n.measureText(k.text).width,F=l.textAlign(k.textAlign||(k.textAlign=o.textAlign)),W=g+f+v,R=m.x,tt=m.y;l.setWidth(this.width),w?O>0&&R+W+u>this.right&&(tt=m.y+=S,m.line++,R=m.x=ot(r,this.left+u,this.right-i[m.line])):O>0&&tt+S>this.bottom&&(R=m.x=R+e[m.line].width+u,m.line++,tt=m.y=ot(r,this.top+x+u,this.bottom-e[m.line].height));let ct=l.x(R);b(ct,tt,k),R=Vo(F,R+g+f,w?R+W:this.right,t.rtl),_(l.x(R),tt,k),w?m.x+=W+u:m.y+=S}),sr(this.ctx,t.textDirection)}drawTitle(){let t=this.options,e=t.title,i=st(e.font),n=at(e.padding);if(!e.display)return;let r=ye(t.rtl,this.left,this.width),o=this.ctx,a=e.position,l=i.size/2,c=n.top+l,h,u=this.left,d=this.width;if(this.isHorizontal())d=Math.max(...this.lineWidths),h=this.top+c,u=ot(t.align,u,this.right-d);else{let m=this.columnSizes.reduce((g,p)=>Math.max(g,p.height),0);h=c+ot(t.align,this.top,this.bottom-m-t.labels.padding-this._computeTitleHeight())}let f=ot(a,u,u+d);o.textAlign=r.textAlign(Ci(a)),o.textBaseline="middle",o.strokeStyle=e.color,o.fillStyle=e.color,o.font=i.string,ee(o,e.text,f,h,i)}_computeTitleHeight(){let t=this.options.title,e=st(t.font),i=at(t.padding);return t.display?e.lineHeight+i.height:0}_getLegendItemAt(t,e){let i,n,r;if(Lt(t,this.left,this.right)&&Lt(e,this.top,this.bottom)){for(r=this.legendHitBoxes,i=0;is.chart.options.color,boxWidth:40,padding:10,generateLabels(s){let t=s.data.datasets,{labels:{usePointStyle:e,pointStyle:i,textAlign:n,color:r}}=s.legend.options;return s._getSortedDatasetMetas().map(o=>{let a=o.controller.getStyle(e?0:void 0),l=at(a.borderWidth);return{text:t[o.index].label,fillStyle:a.backgroundColor,fontColor:r,hidden:!o.visible,lineCap:a.borderCapStyle,lineDash:a.borderDash,lineDashOffset:a.borderDashOffset,lineJoin:a.borderJoinStyle,lineWidth:(l.width+l.height)/4,strokeStyle:a.borderColor,pointStyle:i||a.pointStyle,rotation:a.rotation,textAlign:n||a.textAlign,borderRadius:0,datasetIndex:o.index}},this)}},title:{color:s=>s.chart.options.color,display:!1,position:"center",text:""}},descriptors:{_scriptable:s=>!s.startsWith("on"),labels:{_scriptable:s=>!["generateLabels","filter","sort"].includes(s)}}},Ps=class extends yt{constructor(t){super(),this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this._padding=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e){let i=this.options;if(this.left=0,this.top=0,!i.display){this.width=this.height=this.right=this.bottom=0;return}this.width=this.right=t,this.height=this.bottom=e;let n=$(i.text)?i.text.length:1;this._padding=at(i.padding);let r=n*st(i.font).lineHeight+this._padding.height;this.isHorizontal()?this.height=r:this.width=r}isHorizontal(){let t=this.options.position;return t==="top"||t==="bottom"}_drawArgs(t){let{top:e,left:i,bottom:n,right:r,options:o}=this,a=o.align,l=0,c,h,u;return this.isHorizontal()?(h=ot(a,i,r),u=e+t,c=r-i):(o.position==="left"?(h=i+t,u=ot(a,n,e),l=Y*-.5):(h=r-t,u=ot(a,e,n),l=Y*.5),c=n-e),{titleX:h,titleY:u,maxWidth:c,rotation:l}}draw(){let t=this.ctx,e=this.options;if(!e.display)return;let i=st(e.font),r=i.lineHeight/2+this._padding.top,{titleX:o,titleY:a,maxWidth:l,rotation:c}=this._drawArgs(r);ee(t,e.text,0,0,i,{color:e.color,maxWidth:l,rotation:c,textAlign:Ci(e.align),textBaseline:"middle",translation:[o,a]})}};function lf(s,t){let e=new Ps({ctx:s.ctx,options:t,chart:s});lt.configure(s,e,t),lt.addBox(s,e),s.titleBlock=e}var cf={id:"title",_element:Ps,start(s,t,e){lf(s,e)},stop(s){let t=s.titleBlock;lt.removeBox(s,t),delete s.titleBlock},beforeUpdate(s,t,e){let i=s.titleBlock;lt.configure(s,i,e),i.options=e},defaults:{align:"center",display:!1,font:{weight:"bold"},fullSize:!0,padding:10,position:"top",text:"",weight:2e3},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}},Vi=new WeakMap,hf={id:"subtitle",start(s,t,e){let i=new Ps({ctx:s.ctx,options:e,chart:s});lt.configure(s,i,e),lt.addBox(s,i),Vi.set(s,i)},stop(s){lt.removeBox(s,Vi.get(s)),Vi.delete(s)},beforeUpdate(s,t,e){let i=Vi.get(s);lt.configure(s,i,e),i.options=e},defaults:{align:"center",display:!1,font:{weight:"normal"},fullSize:!0,padding:0,position:"top",text:"",weight:1500},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}},Is={average(s){if(!s.length)return!1;let t,e,i=0,n=0,r=0;for(t=0,e=s.length;t-1?s.split(` -`):s}function of(s,t){let{element:e,datasetIndex:i,index:n}=t,r=s.getDatasetMeta(i).controller,{label:o,value:a}=r.getLabelAndValue(n);return{chart:s,label:o,parsed:r.getParsed(n),raw:s.data.datasets[i].data[n],formattedValue:a,dataset:r.getDataset(),dataIndex:n,datasetIndex:i,element:e}}function Na(s,t){let e=s.chart.ctx,{body:i,footer:n,title:r}=s,{boxWidth:o,boxHeight:a}=t,l=et(t.bodyFont),c=et(t.titleFont),h=et(t.footerFont),u=r.length,d=n.length,f=i.length,m=at(t.padding),g=m.height,p=0,y=i.reduce((w,x)=>w+x.before.length+x.lines.length+x.after.length,0);if(y+=s.beforeBody.length+s.afterBody.length,u&&(g+=u*c.lineHeight+(u-1)*t.titleSpacing+t.titleMarginBottom),y){let w=t.displayColors?Math.max(a,l.lineHeight):l.lineHeight;g+=f*w+(y-f)*l.lineHeight+(y-1)*t.bodySpacing}d&&(g+=t.footerMarginTop+d*h.lineHeight+(d-1)*t.footerSpacing);let b=0,_=function(w){p=Math.max(p,e.measureText(w).width+b)};return e.save(),e.font=c.string,H(s.title,_),e.font=l.string,H(s.beforeBody.concat(s.afterBody),_),b=t.displayColors?o+2+t.boxPadding:0,H(i,w=>{H(w.before,_),H(w.lines,_),H(w.after,_)}),b=0,e.font=h.string,H(s.footer,_),e.restore(),p+=m.width,{width:p,height:g}}function af(s,t){let{y:e,height:i}=t;return es.height-i/2?"bottom":"center"}function lf(s,t,e,i){let{x:n,width:r}=i,o=e.caretSize+e.caretPadding;if(s==="left"&&n+r+o>t.width||s==="right"&&n-r-o<0)return!0}function cf(s,t,e,i){let{x:n,width:r}=e,{width:o,chartArea:{left:a,right:l}}=s,c="center";return i==="center"?c=n<=(a+l)/2?"left":"right":n<=r/2?c="left":n>=o-r/2&&(c="right"),lf(c,s,t,e)&&(c="center"),c}function Ra(s,t,e){let i=e.yAlign||t.yAlign||af(s,e);return{xAlign:e.xAlign||t.xAlign||cf(s,t,e,i),yAlign:i}}function hf(s,t){let{x:e,width:i}=s;return t==="right"?e-=i:t==="center"&&(e-=i/2),e}function uf(s,t,e){let{y:i,height:n}=s;return t==="top"?i+=e:t==="bottom"?i-=n+e:i-=n/2,i}function Wa(s,t,e,i){let{caretSize:n,caretPadding:r,cornerRadius:o}=s,{xAlign:a,yAlign:l}=e,c=n+r,{topLeft:h,topRight:u,bottomLeft:d,bottomRight:f}=se(o),m=hf(t,a),g=uf(t,l,c);return l==="center"?a==="left"?m+=c:a==="right"&&(m-=c):a==="left"?m-=Math.max(h,d)+n:a==="right"&&(m+=Math.max(u,f)+n),{x:it(m,0,i.width-t.width),y:it(g,0,i.height-t.height)}}function Wi(s,t,e){let i=at(e.padding);return t==="center"?s.x+s.width/2:t==="right"?s.x+s.width-i.right:s.x+i.left}function za(s){return Lt([],Ut(s))}function df(s,t,e){return $t(s,{tooltip:t,tooltipItems:e,type:"tooltip"})}function Va(s,t){let e=t&&t.dataset&&t.dataset.tooltip&&t.dataset.tooltip.callbacks;return e?s.override(e):s}var Ls=class extends yt{constructor(t){super(),this.opacity=0,this._active=[],this._eventPosition=void 0,this._size=void 0,this._cachedAnimations=void 0,this._tooltipItems=[],this.$animations=void 0,this.$context=void 0,this.chart=t.chart||t._chart,this._chart=this.chart,this.options=t.options,this.dataPoints=void 0,this.title=void 0,this.beforeBody=void 0,this.body=void 0,this.afterBody=void 0,this.footer=void 0,this.xAlign=void 0,this.yAlign=void 0,this.x=void 0,this.y=void 0,this.height=void 0,this.width=void 0,this.caretX=void 0,this.caretY=void 0,this.labelColors=void 0,this.labelPointStyles=void 0,this.labelTextColors=void 0}initialize(t){this.options=t,this._cachedAnimations=void 0,this.$context=void 0}_resolveAnimations(){let t=this._cachedAnimations;if(t)return t;let e=this.chart,i=this.options.setContext(this.getContext()),n=i.enabled&&e.options.animation&&i.animations,r=new Hi(this.chart,n);return n._cacheable&&(this._cachedAnimations=Object.freeze(r)),r}getContext(){return this.$context||(this.$context=df(this.chart.getContext(),this,this._tooltipItems))}getTitle(t,e){let{callbacks:i}=e,n=i.beforeTitle.apply(this,[t]),r=i.title.apply(this,[t]),o=i.afterTitle.apply(this,[t]),a=[];return a=Lt(a,Ut(n)),a=Lt(a,Ut(r)),a=Lt(a,Ut(o)),a}getBeforeBody(t,e){return za(e.callbacks.beforeBody.apply(this,[t]))}getBody(t,e){let{callbacks:i}=e,n=[];return H(t,r=>{let o={before:[],lines:[],after:[]},a=Va(i,r);Lt(o.before,Ut(a.beforeLabel.call(this,r))),Lt(o.lines,a.label.call(this,r)),Lt(o.after,Ut(a.afterLabel.call(this,r))),n.push(o)}),n}getAfterBody(t,e){return za(e.callbacks.afterBody.apply(this,[t]))}getFooter(t,e){let{callbacks:i}=e,n=i.beforeFooter.apply(this,[t]),r=i.footer.apply(this,[t]),o=i.afterFooter.apply(this,[t]),a=[];return a=Lt(a,Ut(n)),a=Lt(a,Ut(r)),a=Lt(a,Ut(o)),a}_createItems(t){let e=this._active,i=this.chart.data,n=[],r=[],o=[],a=[],l,c;for(l=0,c=e.length;lt.filter(h,u,d,i))),t.itemSort&&(a=a.sort((h,u)=>t.itemSort(h,u,i))),H(a,h=>{let u=Va(t.callbacks,h);n.push(u.labelColor.call(this,h)),r.push(u.labelPointStyle.call(this,h)),o.push(u.labelTextColor.call(this,h))}),this.labelColors=n,this.labelPointStyles=r,this.labelTextColors=o,this.dataPoints=a,a}update(t,e){let i=this.options.setContext(this.getContext()),n=this._active,r,o=[];if(!n.length)this.opacity!==0&&(r={opacity:0});else{let a=Es[i.position].call(this,n,this._eventPosition);o=this._createItems(i),this.title=this.getTitle(o,i),this.beforeBody=this.getBeforeBody(o,i),this.body=this.getBody(o,i),this.afterBody=this.getAfterBody(o,i),this.footer=this.getFooter(o,i);let l=this._size=Na(this,i),c=Object.assign({},a,l),h=Ra(this.chart,i,c),u=Wa(i,c,h,this.chart);this.xAlign=h.xAlign,this.yAlign=h.yAlign,r={opacity:1,x:u.x,y:u.y,width:l.width,height:l.height,caretX:a.x,caretY:a.y}}this._tooltipItems=o,this.$context=void 0,r&&this._resolveAnimations().update(this,r),t&&i.external&&i.external.call(this,{chart:this.chart,tooltip:this,replay:e})}drawCaret(t,e,i,n){let r=this.getCaretPosition(t,i,n);e.lineTo(r.x1,r.y1),e.lineTo(r.x2,r.y2),e.lineTo(r.x3,r.y3)}getCaretPosition(t,e,i){let{xAlign:n,yAlign:r}=this,{caretSize:o,cornerRadius:a}=i,{topLeft:l,topRight:c,bottomLeft:h,bottomRight:u}=se(a),{x:d,y:f}=t,{width:m,height:g}=e,p,y,b,_,w,x;return r==="center"?(w=f+g/2,n==="left"?(p=d,y=p-o,_=w+o,x=w-o):(p=d+m,y=p+o,_=w-o,x=w+o),b=p):(n==="left"?y=d+Math.max(l,h)+o:n==="right"?y=d+m-Math.max(c,u)-o:y=this.caretX,r==="top"?(_=f,w=_-o,p=y-o,b=y+o):(_=f+g,w=_+o,p=y+o,b=y-o),x=_),{x1:p,x2:y,x3:b,y1:_,y2:w,y3:x}}drawTitle(t,e,i){let n=this.title,r=n.length,o,a,l;if(r){let c=ye(i.rtl,this.x,this.width);for(t.x=Wi(this,i.titleAlign,i),e.textAlign=c.textAlign(i.titleAlign),e.textBaseline="middle",o=et(i.titleFont),a=i.titleSpacing,e.fillStyle=i.titleColor,e.font=o.string,l=0;l_!==0)?(t.beginPath(),t.fillStyle=r.multiKeyBackground,We(t,{x:p,y:g,w:c,h:l,radius:b}),t.fill(),t.stroke(),t.fillStyle=o.backgroundColor,t.beginPath(),We(t,{x:y,y:g+1,w:c-2,h:l-2,radius:b}),t.fill()):(t.fillStyle=r.multiKeyBackground,t.fillRect(p,g,c,l),t.strokeRect(p,g,c,l),t.fillStyle=o.backgroundColor,t.fillRect(y,g+1,c-2,l-2))}t.fillStyle=this.labelTextColors[i]}drawBody(t,e,i){let{body:n}=this,{bodySpacing:r,bodyAlign:o,displayColors:a,boxHeight:l,boxWidth:c,boxPadding:h}=i,u=et(i.bodyFont),d=u.lineHeight,f=0,m=ye(i.rtl,this.x,this.width),g=function(O){e.fillText(O,m.x(t.x+f),t.y+d/2),t.y+=d+r},p=m.textAlign(o),y,b,_,w,x,S,k;for(e.textAlign=o,e.textBaseline="middle",e.font=u.string,t.x=Wi(this,p,i),e.fillStyle=i.bodyColor,H(this.beforeBody,g),f=a&&p!=="right"?o==="center"?c/2+h:c+2+h:0,w=0,S=n.length;w0&&e.stroke()}_updateAnimationTarget(t){let e=this.chart,i=this.$animations,n=i&&i.x,r=i&&i.y;if(n||r){let o=Es[t.position].call(this,this._active,this._eventPosition);if(!o)return;let a=this._size=Na(this,t),l=Object.assign({},o,this._size),c=Ra(e,t,l),h=Wa(t,l,c,e);(n._to!==h.x||r._to!==h.y)&&(this.xAlign=c.xAlign,this.yAlign=c.yAlign,this.width=a.width,this.height=a.height,this.caretX=o.x,this.caretY=o.y,this._resolveAnimations().update(this,h))}}_willRender(){return!!this.opacity}draw(t){let e=this.options.setContext(this.getContext()),i=this.opacity;if(!i)return;this._updateAnimationTarget(e);let n={width:this.width,height:this.height},r={x:this.x,y:this.y};i=Math.abs(i)<.001?0:i;let o=at(e.padding),a=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;e.enabled&&a&&(t.save(),t.globalAlpha=i,this.drawBackground(r,t,n,e),Kn(t,e.textDirection),r.y+=o.top,this.drawTitle(r,t,e),this.drawBody(r,t,e),this.drawFooter(r,t,e),Jn(t,e.textDirection),t.restore())}getActiveElements(){return this._active||[]}setActiveElements(t,e){let i=this._active,n=t.map(({datasetIndex:a,index:l})=>{let c=this.chart.getDatasetMeta(a);if(!c)throw new Error("Cannot find a dataset at index "+a);return{datasetIndex:a,element:c.data[l],index:l}}),r=!xs(i,n),o=this._positionChanged(n,e);(r||o)&&(this._active=n,this._eventPosition=e,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(t,e,i=!0){if(e&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;let n=this.options,r=this._active||[],o=this._getActiveElements(t,r,e,i),a=this._positionChanged(o,t),l=e||!xs(o,r)||a;return l&&(this._active=o,(n.enabled||n.external)&&(this._eventPosition={x:t.x,y:t.y},this.update(!0,e))),l}_getActiveElements(t,e,i,n){let r=this.options;if(t.type==="mouseout")return[];if(!n)return e;let o=this.chart.getElementsAtEventForMode(t,r.mode,r,i);return r.reverse&&o.reverse(),o}_positionChanged(t,e){let{caretX:i,caretY:n,options:r}=this,o=Es[r.position].call(this,t,e);return o!==!1&&(i!==o.x||n!==o.y)}};Ls.positioners=Es;var ff={id:"tooltip",_element:Ls,positioners:Es,afterInit(s,t,e){e&&(s.tooltip=new Ls({chart:s,options:e}))},beforeUpdate(s,t,e){s.tooltip&&s.tooltip.initialize(e)},reset(s,t,e){s.tooltip&&s.tooltip.initialize(e)},afterDraw(s){let t=s.tooltip;if(t&&t._willRender()){let e={tooltip:t};if(s.notifyPlugins("beforeTooltipDraw",e)===!1)return;t.draw(s.ctx),s.notifyPlugins("afterTooltipDraw",e)}},afterEvent(s,t){if(s.tooltip){let e=t.replay;s.tooltip.handleEvent(t.event,e,t.inChartArea)&&(t.changed=!0)}},defaults:{enabled:!0,external:null,position:"average",backgroundColor:"rgba(0,0,0,0.8)",titleColor:"#fff",titleFont:{weight:"bold"},titleSpacing:2,titleMarginBottom:6,titleAlign:"left",bodyColor:"#fff",bodySpacing:2,bodyFont:{},bodyAlign:"left",footerColor:"#fff",footerSpacing:2,footerMarginTop:6,footerFont:{weight:"bold"},footerAlign:"left",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(s,t)=>t.bodyFont.size,boxWidth:(s,t)=>t.bodyFont.size,multiKeyBackground:"#fff",displayColors:!0,boxPadding:0,borderColor:"rgba(0,0,0,0)",borderWidth:0,animation:{duration:400,easing:"easeOutQuart"},animations:{numbers:{type:"number",properties:["x","y","width","height","caretX","caretY"]},opacity:{easing:"linear",duration:200}},callbacks:{beforeTitle:Ft,title(s){if(s.length>0){let t=s[0],e=t.chart.data.labels,i=e?e.length:0;if(this&&this.options&&this.options.mode==="dataset")return t.dataset.label||"";if(t.label)return t.label;if(i>0&&t.dataIndexs!=="filter"&&s!=="itemSort"&&s!=="external",_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]},mf=Object.freeze({__proto__:null,Decimation:Fd,Filler:Jd,Legend:ef,SubTitle:rf,Title:nf,Tooltip:ff}),gf=(s,t,e,i)=>(typeof t=="string"?(e=s.push(t)-1,i.unshift({index:e,label:t})):isNaN(t)&&(e=null),e);function pf(s,t,e,i){let n=s.indexOf(t);if(n===-1)return gf(s,t,e,i);let r=s.lastIndexOf(t);return n!==r?e:n}var yf=(s,t)=>s===null?null:it(Math.round(s),0,t),Je=class extends Yt{constructor(t){super(t),this._startValue=void 0,this._valueRange=0,this._addedLabels=[]}init(t){let e=this._addedLabels;if(e.length){let i=this.getLabels();for(let{index:n,label:r}of e)i[n]===r&&i.splice(n,1);this._addedLabels=[]}super.init(t)}parse(t,e){if(R(t))return null;let i=this.getLabels();return e=isFinite(e)&&i[e]===t?e:pf(i,t,I(e,t),this._addedLabels),yf(e,i.length-1)}determineDataLimits(){let{minDefined:t,maxDefined:e}=this.getUserBounds(),{min:i,max:n}=this.getMinMax(!0);this.options.bounds==="ticks"&&(t||(i=0),e||(n=this.getLabels().length-1)),this.min=i,this.max=n}buildTicks(){let t=this.min,e=this.max,i=this.options.offset,n=[],r=this.getLabels();r=t===0&&e===r.length-1?r:r.slice(t,e+1),this._valueRange=Math.max(r.length-(i?0:1),1),this._startValue=this.min-(i?.5:0);for(let o=t;o<=e;o++)n.push({value:o});return n}getLabelForValue(t){let e=this.getLabels();return t>=0&&te.length-1?null:this.getPixelForValue(e[t].value)}getValueForPixel(t){return Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange)}getBasePixel(){return this.bottom}};Je.id="category";Je.defaults={ticks:{callback:Je.prototype.getLabelForValue}};function bf(s,t){let e=[],{bounds:n,step:r,min:o,max:a,precision:l,count:c,maxTicks:h,maxDigits:u,includeBounds:d}=s,f=r||1,m=h-1,{min:g,max:p}=t,y=!R(o),b=!R(a),_=!R(c),w=(p-g)/(u+1),x=On((p-g)/m/f)*f,S,k,O,T;if(x<1e-14&&!y&&!b)return[{value:g},{value:p}];T=Math.ceil(p/x)-Math.floor(g/x),T>m&&(x=On(T*x/m/f)*f),R(l)||(S=Math.pow(10,l),x=Math.ceil(x*S)/S),n==="ticks"?(k=Math.floor(g/x)*x,O=Math.ceil(p/x)*x):(k=g,O=p),y&&b&&r&&Eo((a-o)/r,x/1e3)?(T=Math.round(Math.min((a-o)/x,h)),x=(a-o)/T,k=o,O=a):_?(k=y?o:k,O=b?a:O,T=c-1,x=(O-k)/T):(T=(O-k)/x,Ne(T,Math.round(T),x/1e3)?T=Math.round(T):T=Math.ceil(T));let F=Math.max(En(x),En(k));S=Math.pow(10,R(l)?F:l),k=Math.round(k*S)/S,O=Math.round(O*S)/S;let W=0;for(y&&(d&&k!==o?(e.push({value:o}),kn=e?n:l,a=l=>r=i?r:l;if(t){let l=Tt(n),c=Tt(r);l<0&&c<0?a(0):l>0&&c>0&&o(0)}if(n===r){let l=1;(r>=Number.MAX_SAFE_INTEGER||n<=Number.MIN_SAFE_INTEGER)&&(l=Math.abs(r*.05)),a(r+l),t||o(n-l)}this.min=n,this.max=r}getTickLimit(){let t=this.options.ticks,{maxTicksLimit:e,stepSize:i}=t,n;return i?(n=Math.ceil(this.max/i)-Math.floor(this.min/i)+1,n>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${i} would result generating up to ${n} ticks. Limiting to 1000.`),n=1e3)):(n=this.computeTickLimit(),e=e||11),e&&(n=Math.min(e,n)),n}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){let t=this.options,e=t.ticks,i=this.getTickLimit();i=Math.max(2,i);let n={maxTicks:i,bounds:t.bounds,min:t.min,max:t.max,precision:e.precision,step:e.stepSize,count:e.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:e.minRotation||0,includeBounds:e.includeBounds!==!1},r=this._range||this,o=bf(n,r);return t.bounds==="ticks"&&Dn(o,this,"value"),t.reverse?(o.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),o}configure(){let t=this.ticks,e=this.min,i=this.max;if(super.configure(),this.options.offset&&t.length){let n=(i-e)/Math.max(t.length-1,1)/2;e-=n,i+=n}this._startValue=e,this._endValue=i,this._valueRange=i-e}getLabelForValue(t){return Ve(t,this.chart.options.locale,this.options.ticks.format)}},Ps=class extends Qe{determineDataLimits(){let{min:t,max:e}=this.getMinMax(!0);this.min=K(t)?t:0,this.max=K(e)?e:1,this.handleTickRangeOptions()}computeTickLimit(){let t=this.isHorizontal(),e=t?this.width:this.height,i=wt(this.options.ticks.minRotation),n=(t?Math.sin(i):Math.cos(i))||.001,r=this._resolveTickFontOptions(0);return Math.ceil(e/Math.min(40,r.lineHeight/n))}getPixelForValue(t){return t===null?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getValueForPixel(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange}};Ps.id="linear";Ps.defaults={ticks:{callback:Zi.formatters.numeric}};function Ba(s){return s/Math.pow(10,Math.floor(gt(s)))===1}function xf(s,t){let e=Math.floor(gt(t.max)),i=Math.ceil(t.max/Math.pow(10,e)),n=[],r=mt(s.min,Math.pow(10,Math.floor(gt(t.min)))),o=Math.floor(gt(r)),a=Math.floor(r/Math.pow(10,o)),l=o<0?Math.pow(10,Math.abs(o)):1;do n.push({value:r,major:Ba(r)}),++a,a===10&&(a=1,++o,l=o>=0?1:l),r=Math.round(a*Math.pow(10,o)*l)/l;while(o0?i:null}determineDataLimits(){let{min:t,max:e}=this.getMinMax(!0);this.min=K(t)?Math.max(0,t):null,this.max=K(e)?Math.max(0,e):null,this.options.beginAtZero&&(this._zero=!0),this.handleTickRangeOptions()}handleTickRangeOptions(){let{minDefined:t,maxDefined:e}=this.getUserBounds(),i=this.min,n=this.max,r=l=>i=t?i:l,o=l=>n=e?n:l,a=(l,c)=>Math.pow(10,Math.floor(gt(l))+c);i===n&&(i<=0?(r(1),o(10)):(r(a(i,-1)),o(a(n,1)))),i<=0&&r(a(n,-1)),n<=0&&o(a(i,1)),this._zero&&this.min!==this._suggestedMin&&i===a(this.min,0)&&r(a(i,-1)),this.min=i,this.max=n}buildTicks(){let t=this.options,e={min:this._userMin,max:this._userMax},i=xf(e,this);return t.bounds==="ticks"&&Dn(i,this,"value"),t.reverse?(i.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),i}getLabelForValue(t){return t===void 0?"0":Ve(t,this.chart.options.locale,this.options.ticks.format)}configure(){let t=this.min;super.configure(),this._startValue=gt(t),this._valueRange=gt(this.max)-gt(t)}getPixelForValue(t){return(t===void 0||t===0)&&(t=this.min),t===null||isNaN(t)?NaN:this.getPixelForDecimal(t===this.min?0:(gt(t)-this._startValue)/this._valueRange)}getValueForPixel(t){let e=this.getDecimalForPixel(t);return Math.pow(10,this._startValue+e*this._valueRange)}};Ns.id="logarithmic";Ns.defaults={ticks:{callback:Zi.formatters.logarithmic,major:{enabled:!0}}};function Sr(s){let t=s.ticks;if(t.display&&s.display){let e=at(t.backdropPadding);return I(t.font&&t.font.size,L.font.size)+e.height}return 0}function _f(s,t,e){return e=$(e)?e:[e],{w:Bo(s,t.string,e),h:e.length*t.lineHeight}}function $a(s,t,e,i,n){return s===i||s===n?{start:t-e/2,end:t+e/2}:sn?{start:t-e,end:t}:{start:t,end:t+e}}function wf(s){let t={l:s.left+s._padding.left,r:s.right-s._padding.right,t:s.top+s._padding.top,b:s.bottom-s._padding.bottom},e=Object.assign({},t),i=[],n=[],r=s._pointLabels.length,o=s.options.pointLabels,a=o.centerPointLabels?Y/r:0;for(let l=0;lt.r&&(a=(i.end-t.r)/r,s.r=Math.max(s.r,t.r+a)),n.startt.b&&(l=(n.end-t.b)/o,s.b=Math.max(s.b,t.b+l))}function kf(s,t,e){let i=[],n=s._pointLabels.length,r=s.options,o=Sr(r)/2,a=s.drawingArea,l=r.pointLabels.centerPointLabels?Y/n:0;for(let c=0;c270||e<90)&&(s-=t),s}function Of(s,t){let{ctx:e,options:{pointLabels:i}}=s;for(let n=t-1;n>=0;n--){let r=i.setContext(s.getPointLabelContext(n)),o=et(r.font),{x:a,y:l,textAlign:c,left:h,top:u,right:d,bottom:f}=s._pointLabelItems[n],{backdropColor:m}=r;if(!R(m)){let g=se(r.borderRadius),p=at(r.backdropPadding);e.fillStyle=m;let y=h-p.left,b=u-p.top,_=d-h+p.width,w=f-u+p.height;Object.values(g).some(x=>x!==0)?(e.beginPath(),We(e,{x:y,y:b,w:_,h:w,radius:g}),e.fill()):e.fillRect(y,b,_,w)}ee(e,s._pointLabels[n],a,l+o.lineHeight/2,o,{color:r.color,textAlign:c,textBaseline:"middle"})}}function dl(s,t,e,i){let{ctx:n}=s;if(e)n.arc(s.xCenter,s.yCenter,t,0,B);else{let r=s.getPointPosition(0,t);n.moveTo(r.x,r.y);for(let o=1;o{let n=j(this.options.pointLabels.callback,[e,i],this);return n||n===0?n:""}).filter((e,i)=>this.chart.getDataVisibility(i))}fit(){let t=this.options;t.display&&t.pointLabels.display?wf(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(t,e,i,n){this.xCenter+=Math.floor((t-e)/2),this.yCenter+=Math.floor((i-n)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(t,e,i,n))}getIndexAngle(t){let e=B/(this._pointLabels.length||1),i=this.options.startAngle||0;return ht(t*e+wt(i))}getDistanceFromCenterForValue(t){if(R(t))return NaN;let e=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-t)*e:(t-this.min)*e}getValueForDistanceFromCenter(t){if(R(t))return NaN;let e=t/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-e:this.min+e}getPointLabelContext(t){let e=this._pointLabels||[];if(t>=0&&t{if(h!==0){a=this.getDistanceFromCenterForValue(c.value);let u=n.setContext(this.getContext(h-1));Df(this,u,a,r)}}),i.display){for(t.save(),o=r-1;o>=0;o--){let c=i.setContext(this.getPointLabelContext(o)),{color:h,lineWidth:u}=c;!u||!h||(t.lineWidth=u,t.strokeStyle=h,t.setLineDash(c.borderDash),t.lineDashOffset=c.borderDashOffset,a=this.getDistanceFromCenterForValue(e.ticks.reverse?this.min:this.max),l=this.getPointPosition(o,a),t.beginPath(),t.moveTo(this.xCenter,this.yCenter),t.lineTo(l.x,l.y),t.stroke())}t.restore()}}drawBorder(){}drawLabels(){let t=this.ctx,e=this.options,i=e.ticks;if(!i.display)return;let n=this.getIndexAngle(0),r,o;t.save(),t.translate(this.xCenter,this.yCenter),t.rotate(n),t.textAlign="center",t.textBaseline="middle",this.ticks.forEach((a,l)=>{if(l===0&&!e.reverse)return;let c=i.setContext(this.getContext(l)),h=et(c.font);if(r=this.getDistanceFromCenterForValue(this.ticks[l].value),c.showLabelBackdrop){t.font=h.string,o=t.measureText(a.label).width,t.fillStyle=c.backdropColor;let u=at(c.backdropPadding);t.fillRect(-o/2-u.left,-r-h.size/2-u.top,o+u.width,h.size+u.height)}ee(t,a.label,0,-r,h,{color:c.color})}),t.restore()}drawTitle(){}};_e.id="radialLinear";_e.defaults={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,lineWidth:1,borderDash:[],borderDashOffset:0},grid:{circular:!1},startAngle:0,ticks:{showLabelBackdrop:!0,callback:Zi.formatters.numeric},pointLabels:{backdropColor:void 0,backdropPadding:2,display:!0,font:{size:10},callback(s){return s},padding:5,centerPointLabels:!1}};_e.defaultRoutes={"angleLines.color":"borderColor","pointLabels.color":"color","ticks.color":"color"};_e.descriptors={angleLines:{_fallback:"grid"}};var qi={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},ut=Object.keys(qi);function If(s,t){return s-t}function ja(s,t){if(R(t))return null;let e=s._adapter,{parser:i,round:n,isoWeekday:r}=s._parseOpts,o=t;return typeof i=="function"&&(o=i(o)),K(o)||(o=typeof i=="string"?e.parse(o,i):e.parse(o)),o===null?null:(n&&(o=n==="week"&&(pe(r)||r===!0)?e.startOf(o,"isoWeek",r):e.startOf(o,n)),+o)}function Ua(s,t,e,i){let n=ut.length;for(let r=ut.indexOf(s);r=ut.indexOf(e);r--){let o=ut[r];if(qi[o].common&&s._adapter.diff(n,i,o)>=t-1)return o}return ut[e?ut.indexOf(e):0]}function Ff(s){for(let t=ut.indexOf(s)+1,e=ut.length;t=t?e[i]:e[n];s[r]=!0}}function Af(s,t,e,i){let n=s._adapter,r=+n.startOf(t[0].value,i),o=t[t.length-1].value,a,l;for(a=r;a<=o;a=+n.add(a,1,i))l=e[a],l>=0&&(t[l].major=!0);return t}function Za(s,t,e){let i=[],n={},r=t.length,o,a;for(o=0;o+t.value))}initOffsets(t){let e=0,i=0,n,r;this.options.offset&&t.length&&(n=this.getDecimalForValue(t[0]),t.length===1?e=1-n:e=(this.getDecimalForValue(t[1])-n)/2,r=this.getDecimalForValue(t[t.length-1]),t.length===1?i=r:i=(r-this.getDecimalForValue(t[t.length-2]))/2);let o=t.length<3?.5:.25;e=it(e,0,o),i=it(i,0,o),this._offsets={start:e,end:i,factor:1/(e+1+i)}}_generate(){let t=this._adapter,e=this.min,i=this.max,n=this.options,r=n.time,o=r.unit||Ua(r.minUnit,e,i,this._getLabelCapacity(e)),a=I(r.stepSize,1),l=o==="week"?r.isoWeekday:!1,c=pe(l)||l===!0,h={},u=e,d,f;if(c&&(u=+t.startOf(u,"isoWeek",l)),u=+t.startOf(u,c?"day":o),t.diff(i,e,o)>1e5*a)throw new Error(e+" and "+i+" are too far apart with stepSize of "+a+" "+o);let m=n.ticks.source==="data"&&this.getDataTimestamps();for(d=u,f=0;dg-p).map(g=>+g)}getLabelForValue(t){let e=this._adapter,i=this.options.time;return i.tooltipFormat?e.format(t,i.tooltipFormat):e.format(t,i.displayFormats.datetime)}_tickFormatFunction(t,e,i,n){let r=this.options,o=r.time.displayFormats,a=this._unit,l=this._majorUnit,c=a&&o[a],h=l&&o[l],u=i[e],d=l&&h&&u&&u.major,f=this._adapter.format(t,n||(d?h:c)),m=r.ticks.callback;return m?j(m,[f,e,i],this):f}generateTickLabels(t){let e,i,n;for(e=0,i=t.length;e0?a:1}getDataTimestamps(){let t=this._cache.data||[],e,i;if(t.length)return t;let n=this.getMatchingVisibleMetas();if(this._normalized&&n.length)return this._cache.data=n[0].controller.getAllParsedValues(this);for(e=0,i=n.length;e=s[i].pos&&t<=s[n].pos&&({lo:i,hi:n}=Ct(s,"pos",t)),{pos:r,time:a}=s[i],{pos:o,time:l}=s[n]):(t>=s[i].time&&t<=s[n].time&&({lo:i,hi:n}=Ct(s,"time",t)),{time:r,pos:a}=s[i],{time:o,pos:l}=s[n]);let c=o-r;return c?a+(l-a)*(t-r)/c:a}var Rs=class extends we{constructor(t){super(t),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){let t=this._getTimestampsForTable(),e=this._table=this.buildLookupTable(t);this._minPos=zi(e,this.min),this._tableRange=zi(e,this.max)-this._minPos,super.initOffsets(t)}buildLookupTable(t){let{min:e,max:i}=this,n=[],r=[],o,a,l,c,h;for(o=0,a=t.length;o=e&&c<=i&&n.push(c);if(n.length<2)return[{time:e,pos:0},{time:i,pos:1}];for(o=0,a=n.length;o=0?m:1e3+m,(d-f)/(60*1e3)}equals(t){return t.type==="iana"&&t.name===this.name}get isValid(){return this.valid}};var ml={};function zf(s,t={}){let e=JSON.stringify([s,t]),i=ml[e];return i||(i=new Intl.ListFormat(s,t),ml[e]=i),i}var Dr={};function Er(s,t={}){let e=JSON.stringify([s,t]),i=Dr[e];return i||(i=new Intl.DateTimeFormat(s,t),Dr[e]=i),i}var Ir={};function Vf(s,t={}){let e=JSON.stringify([s,t]),i=Ir[e];return i||(i=new Intl.NumberFormat(s,t),Ir[e]=i),i}var Cr={};function Hf(s,t={}){let{base:e,...i}=t,n=JSON.stringify([s,i]),r=Cr[n];return r||(r=new Intl.RelativeTimeFormat(s,t),Cr[n]=r),r}var ni=null;function Bf(){return ni||(ni=new Intl.DateTimeFormat().resolvedOptions().locale,ni)}var gl={};function $f(s){let t=gl[s];if(!t){let e=new Intl.Locale(s);t="getWeekInfo"in e?e.getWeekInfo():e.weekInfo,gl[s]=t}return t}function jf(s){let t=s.indexOf("-x-");t!==-1&&(s=s.substring(0,t));let e=s.indexOf("-u-");if(e===-1)return[s];{let i,n;try{i=Er(s).resolvedOptions(),n=s}catch{let l=s.substring(0,e);i=Er(l).resolvedOptions(),n=l}let{numberingSystem:r,calendar:o}=i;return[n,r,o]}}function Uf(s,t,e){return(e||t)&&(s.includes("-u-")||(s+="-u"),e&&(s+=`-ca-${e}`),t&&(s+=`-nu-${t}`)),s}function Yf(s){let t=[];for(let e=1;e<=12;e++){let i=v.utc(2009,e,1);t.push(s(i))}return t}function Zf(s){let t=[];for(let e=1;e<=7;e++){let i=v.utc(2016,11,13+e);t.push(s(i))}return t}function sn(s,t,e,i){let n=s.listingMode();return n==="error"?null:n==="en"?e(t):i(t)}function qf(s){return s.numberingSystem&&s.numberingSystem!=="latn"?!1:s.numberingSystem==="latn"||!s.locale||s.locale.startsWith("en")||new Intl.DateTimeFormat(s.intl).resolvedOptions().numberingSystem==="latn"}var Fr=class{constructor(t,e,i){this.padTo=i.padTo||0,this.floor=i.floor||!1;let{padTo:n,floor:r,...o}=i;if(!e||Object.keys(o).length>0){let a={useGrouping:!1,...i};i.padTo>0&&(a.minimumIntegerDigits=i.padTo),this.inf=Vf(t,a)}}format(t){if(this.inf){let e=this.floor?Math.floor(t):t;return this.inf.format(e)}else{let e=this.floor?Math.floor(t):ss(t,3);return q(e,this.padTo)}}},Ar=class{constructor(t,e,i){this.opts=i,this.originalZone=void 0;let n;if(this.opts.timeZone)this.dt=t;else if(t.zone.type==="fixed"){let o=-1*(t.offset/60),a=o>=0?`Etc/GMT+${o}`:`Etc/GMT${o}`;t.offset!==0&&nt.create(a).valid?(n=a,this.dt=t):(n="UTC",this.dt=t.offset===0?t:t.setZone("UTC").plus({minutes:t.offset}),this.originalZone=t.zone)}else t.zone.type==="system"?this.dt=t:t.zone.type==="iana"?(this.dt=t,n=t.zone.name):(n="UTC",this.dt=t.setZone("UTC").plus({minutes:t.offset}),this.originalZone=t.zone);let r={...this.opts};r.timeZone=r.timeZone||n,this.dtf=Er(e,r)}format(){return this.originalZone?this.formatToParts().map(({value:t})=>t).join(""):this.dtf.format(this.dt.toJSDate())}formatToParts(){let t=this.dtf.formatToParts(this.dt.toJSDate());return this.originalZone?t.map(e=>{if(e.type==="timeZoneName"){let i=this.originalZone.offsetName(this.dt.ts,{locale:this.dt.locale,format:this.opts.timeZoneName});return{...e,value:i}}else return e}):t}resolvedOptions(){return this.dtf.resolvedOptions()}},Lr=class{constructor(t,e,i){this.opts={style:"long",...i},!e&&nn()&&(this.rtf=Hf(t,i))}format(t,e){return this.rtf?this.rtf.format(t,e):pl(e,t,this.opts.numeric,this.opts.style!=="long")}formatToParts(t,e){return this.rtf?this.rtf.formatToParts(t,e):[]}},Gf={firstDay:1,minimalDays:4,weekend:[6,7]},N=class{static fromOpts(t){return N.create(t.locale,t.numberingSystem,t.outputCalendar,t.weekSettings,t.defaultToEN)}static create(t,e,i,n,r=!1){let o=t||z.defaultLocale,a=o||(r?"en-US":Bf()),l=e||z.defaultNumberingSystem,c=i||z.defaultOutputCalendar,h=ri(n)||z.defaultWeekSettings;return new N(a,l,c,h,o)}static resetCache(){ni=null,Dr={},Ir={},Cr={}}static fromObject({locale:t,numberingSystem:e,outputCalendar:i,weekSettings:n}={}){return N.create(t,e,i,n)}constructor(t,e,i,n,r){let[o,a,l]=jf(t);this.locale=o,this.numberingSystem=e||a||null,this.outputCalendar=i||l||null,this.weekSettings=n,this.intl=Uf(this.locale,this.numberingSystem,this.outputCalendar),this.weekdaysCache={format:{},standalone:{}},this.monthsCache={format:{},standalone:{}},this.meridiemCache=null,this.eraCache={},this.specifiedLocale=r,this.fastNumbersCached=null}get fastNumbers(){return this.fastNumbersCached==null&&(this.fastNumbersCached=qf(this)),this.fastNumbersCached}listingMode(){let t=this.isEnglish(),e=(this.numberingSystem===null||this.numberingSystem==="latn")&&(this.outputCalendar===null||this.outputCalendar==="gregory");return t&&e?"en":"intl"}clone(t){return!t||Object.getOwnPropertyNames(t).length===0?this:N.create(t.locale||this.specifiedLocale,t.numberingSystem||this.numberingSystem,t.outputCalendar||this.outputCalendar,ri(t.weekSettings)||this.weekSettings,t.defaultToEN||!1)}redefaultToEN(t={}){return this.clone({...t,defaultToEN:!0})}redefaultToSystem(t={}){return this.clone({...t,defaultToEN:!1})}months(t,e=!1){return sn(this,t,Pr,()=>{let i=e?{month:t,day:"numeric"}:{month:t},n=e?"format":"standalone";return this.monthsCache[n][t]||(this.monthsCache[n][t]=Yf(r=>this.extract(r,i,"month"))),this.monthsCache[n][t]})}weekdays(t,e=!1){return sn(this,t,Nr,()=>{let i=e?{weekday:t,year:"numeric",month:"long",day:"numeric"}:{weekday:t},n=e?"format":"standalone";return this.weekdaysCache[n][t]||(this.weekdaysCache[n][t]=Zf(r=>this.extract(r,i,"weekday"))),this.weekdaysCache[n][t]})}meridiems(){return sn(this,void 0,()=>Rr,()=>{if(!this.meridiemCache){let t={hour:"numeric",hourCycle:"h12"};this.meridiemCache=[v.utc(2016,11,13,9),v.utc(2016,11,13,19)].map(e=>this.extract(e,t,"dayperiod"))}return this.meridiemCache})}eras(t){return sn(this,t,Wr,()=>{let e={era:t};return this.eraCache[t]||(this.eraCache[t]=[v.utc(-40,1,1),v.utc(2017,1,1)].map(i=>this.extract(i,e,"era"))),this.eraCache[t]})}extract(t,e,i){let n=this.dtFormatter(t,e),r=n.formatToParts(),o=r.find(a=>a.type.toLowerCase()===i);return o?o.value:null}numberFormatter(t={}){return new Fr(this.intl,t.forceSimple||this.fastNumbers,t)}dtFormatter(t,e={}){return new Ar(t,this.intl,e)}relFormatter(t={}){return new Lr(this.intl,this.isEnglish(),t)}listFormatter(t={}){return zf(this.intl,t)}isEnglish(){return this.locale==="en"||this.locale.toLowerCase()==="en-us"||new Intl.DateTimeFormat(this.intl).resolvedOptions().locale.startsWith("en-us")}getWeekSettings(){return this.weekSettings?this.weekSettings:rn()?$f(this.locale):Gf}getStartOfWeek(){return this.getWeekSettings().firstDay}getMinDaysInFirstWeek(){return this.getWeekSettings().minimalDays}getWeekendDays(){return this.getWeekSettings().weekend}equals(t){return this.locale===t.locale&&this.numberingSystem===t.numberingSystem&&this.outputCalendar===t.outputCalendar}};var Vr=null,G=class extends dt{static get utcInstance(){return Vr===null&&(Vr=new G(0)),Vr}static instance(t){return t===0?G.utcInstance:new G(t)}static parseSpecifier(t){if(t){let e=t.match(/^utc(?:([+-]\d{1,2})(?::(\d{2}))?)?$/i);if(e)return new G(Se(e[1],e[2]))}return null}constructor(t){super(),this.fixed=t}get type(){return"fixed"}get name(){return this.fixed===0?"UTC":`UTC${le(this.fixed,"narrow")}`}get ianaName(){return this.fixed===0?"Etc/UTC":`Etc/GMT${le(-this.fixed,"narrow")}`}offsetName(){return this.name}formatOffset(t,e){return le(this.fixed,e)}get isUniversal(){return!0}offset(){return this.fixed}equals(t){return t.type==="fixed"&&t.fixed===this.fixed}get isValid(){return!0}};var is=class extends dt{constructor(t){super(),this.zoneName=t}get type(){return"invalid"}get name(){return this.zoneName}get isUniversal(){return!1}offsetName(){return null}formatOffset(){return""}offset(){return NaN}equals(){return!1}get isValid(){return!1}};function Et(s,t){let e;if(D(s)||s===null)return t;if(s instanceof dt)return s;if(yl(s)){let i=s.toLowerCase();return i==="default"?t:i==="local"||i==="system"?Wt.instance:i==="utc"||i==="gmt"?G.utcInstance:G.parseSpecifier(i)||nt.create(s)}else return zt(s)?G.instance(s):typeof s=="object"&&"offset"in s&&typeof s.offset=="function"?s:new is(s)}var bl=()=>Date.now(),xl="system",_l=null,wl=null,Sl=null,kl=60,Ml,Tl=null,z=class{static get now(){return bl}static set now(t){bl=t}static set defaultZone(t){xl=t}static get defaultZone(){return Et(xl,Wt.instance)}static get defaultLocale(){return _l}static set defaultLocale(t){_l=t}static get defaultNumberingSystem(){return wl}static set defaultNumberingSystem(t){wl=t}static get defaultOutputCalendar(){return Sl}static set defaultOutputCalendar(t){Sl=t}static get defaultWeekSettings(){return Tl}static set defaultWeekSettings(t){Tl=ri(t)}static get twoDigitCutoffYear(){return kl}static set twoDigitCutoffYear(t){kl=t%100}static get throwOnInvalid(){return Ml}static set throwOnInvalid(t){Ml=t}static resetCaches(){N.resetCache(),nt.resetCache()}};var rt=class{constructor(t,e){this.reason=t,this.explanation=e}toMessage(){return this.explanation?`${this.reason}: ${this.explanation}`:this.reason}};var vl=[0,31,59,90,120,151,181,212,243,273,304,334],Ol=[0,31,60,91,121,152,182,213,244,274,305,335];function St(s,t){return new rt("unit out of range",`you specified ${t} (of type ${typeof t}) as a ${s}, which is invalid`)}function on(s,t,e){let i=new Date(Date.UTC(s,t-1,e));s<100&&s>=0&&i.setUTCFullYear(i.getUTCFullYear()-1900);let n=i.getUTCDay();return n===0?7:n}function Dl(s,t,e){return e+(Me(s)?Ol:vl)[t-1]}function El(s,t){let e=Me(s)?Ol:vl,i=e.findIndex(r=>rke(i,t,e)?(c=i+1,l=1):c=i,{weekYear:c,weekNumber:l,weekday:a,...li(s)}}function Hr(s,t=4,e=1){let{weekYear:i,weekNumber:n,weekday:r}=s,o=an(on(i,1,t),e),a=ce(i),l=n*7+r-o-7+t,c;l<1?(c=i-1,l+=ce(c)):l>a?(c=i+1,l-=ce(i)):c=i;let{month:h,day:u}=El(c,l);return{year:c,month:h,day:u,...li(s)}}function ln(s){let{year:t,month:e,day:i}=s,n=Dl(t,e,i);return{year:t,ordinal:n,...li(s)}}function Br(s){let{year:t,ordinal:e}=s,{month:i,day:n}=El(t,e);return{year:t,month:i,day:n,...li(s)}}function $r(s,t){if(!D(s.localWeekday)||!D(s.localWeekNumber)||!D(s.localWeekYear)){if(!D(s.weekday)||!D(s.weekNumber)||!D(s.weekYear))throw new vt("Cannot mix locale-based week fields with ISO-based week fields");return D(s.localWeekday)||(s.weekday=s.localWeekday),D(s.localWeekNumber)||(s.weekNumber=s.localWeekNumber),D(s.localWeekYear)||(s.weekYear=s.localWeekYear),delete s.localWeekday,delete s.localWeekNumber,delete s.localWeekYear,{minDaysInFirstWeek:t.getMinDaysInFirstWeek(),startOfWeek:t.getStartOfWeek()}}else return{minDaysInFirstWeek:4,startOfWeek:1}}function Il(s,t=4,e=1){let i=ai(s.weekYear),n=xt(s.weekNumber,1,ke(s.weekYear,t,e)),r=xt(s.weekday,1,7);return i?n?r?!1:St("weekday",s.weekday):St("week",s.weekNumber):St("weekYear",s.weekYear)}function Cl(s){let t=ai(s.year),e=xt(s.ordinal,1,ce(s.year));return t?e?!1:St("ordinal",s.ordinal):St("year",s.year)}function jr(s){let t=ai(s.year),e=xt(s.month,1,12),i=xt(s.day,1,ns(s.year,s.month));return t?e?i?!1:St("day",s.day):St("month",s.month):St("year",s.year)}function Ur(s){let{hour:t,minute:e,second:i,millisecond:n}=s,r=xt(t,0,23)||t===24&&e===0&&i===0&&n===0,o=xt(e,0,59),a=xt(i,0,59),l=xt(n,0,999);return r?o?a?l?!1:St("millisecond",n):St("second",i):St("minute",e):St("hour",t)}function D(s){return typeof s>"u"}function zt(s){return typeof s=="number"}function ai(s){return typeof s=="number"&&s%1===0}function yl(s){return typeof s=="string"}function Al(s){return Object.prototype.toString.call(s)==="[object Date]"}function nn(){try{return typeof Intl<"u"&&!!Intl.RelativeTimeFormat}catch{return!1}}function rn(){try{return typeof Intl<"u"&&!!Intl.Locale&&("weekInfo"in Intl.Locale.prototype||"getWeekInfo"in Intl.Locale.prototype)}catch{return!1}}function Ll(s){return Array.isArray(s)?s:[s]}function Yr(s,t,e){if(s.length!==0)return s.reduce((i,n)=>{let r=[t(n),n];return i&&e(i[0],r[0])===i[0]?i:r},null)[1]}function Pl(s,t){return t.reduce((e,i)=>(e[i]=s[i],e),{})}function he(s,t){return Object.prototype.hasOwnProperty.call(s,t)}function ri(s){if(s==null)return null;if(typeof s!="object")throw new st("Week settings must be an object");if(!xt(s.firstDay,1,7)||!xt(s.minimalDays,1,7)||!Array.isArray(s.weekend)||s.weekend.some(t=>!xt(t,1,7)))throw new st("Invalid week settings");return{firstDay:s.firstDay,minimalDays:s.minimalDays,weekend:Array.from(s.weekend)}}function xt(s,t,e){return ai(s)&&s>=t&&s<=e}function Xf(s,t){return s-t*Math.floor(s/t)}function q(s,t=2){let e=s<0,i;return e?i="-"+(""+-s).padStart(t,"0"):i=(""+s).padStart(t,"0"),i}function qt(s){if(!(D(s)||s===null||s===""))return parseInt(s,10)}function ue(s){if(!(D(s)||s===null||s===""))return parseFloat(s)}function ci(s){if(!(D(s)||s===null||s==="")){let t=parseFloat("0."+s)*1e3;return Math.floor(t)}}function ss(s,t,e=!1){let i=10**t;return(e?Math.trunc:Math.round)(s*i)/i}function Me(s){return s%4===0&&(s%100!==0||s%400===0)}function ce(s){return Me(s)?366:365}function ns(s,t){let e=Xf(t-1,12)+1,i=s+(t-e)/12;return e===2?Me(i)?29:28:[31,null,31,30,31,30,31,31,30,31,30,31][e-1]}function es(s){let t=Date.UTC(s.year,s.month-1,s.day,s.hour,s.minute,s.second,s.millisecond);return s.year<100&&s.year>=0&&(t=new Date(t),t.setUTCFullYear(s.year,s.month-1,s.day)),+t}function Fl(s,t,e){return-an(on(s,1,t),e)+t-1}function ke(s,t=4,e=1){let i=Fl(s,t,e),n=Fl(s+1,t,e);return(ce(s)-i+n)/7}function hi(s){return s>99?s:s>z.twoDigitCutoffYear?1900+s:2e3+s}function Qi(s,t,e,i=null){let n=new Date(s),r={hourCycle:"h23",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"};i&&(r.timeZone=i);let o={timeZoneName:t,...r},a=new Intl.DateTimeFormat(e,o).formatToParts(n).find(l=>l.type.toLowerCase()==="timezonename");return a?a.value:null}function Se(s,t){let e=parseInt(s,10);Number.isNaN(e)&&(e=0);let i=parseInt(t,10)||0,n=e<0||Object.is(e,-0)?-i:i;return e*60+n}function Zr(s){let t=Number(s);if(typeof s=="boolean"||s===""||Number.isNaN(t))throw new st(`Invalid unit value ${s}`);return t}function rs(s,t){let e={};for(let i in s)if(he(s,i)){let n=s[i];if(n==null)continue;e[t(i)]=Zr(n)}return e}function le(s,t){let e=Math.trunc(Math.abs(s/60)),i=Math.trunc(Math.abs(s%60)),n=s>=0?"+":"-";switch(t){case"short":return`${n}${q(e,2)}:${q(i,2)}`;case"narrow":return`${n}${e}${i>0?`:${i}`:""}`;case"techie":return`${n}${q(e,2)}${q(i,2)}`;default:throw new RangeError(`Value format ${t} is out of range for property format`)}}function li(s){return Pl(s,["hour","minute","second","millisecond"])}var Kf=["January","February","March","April","May","June","July","August","September","October","November","December"],qr=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],Jf=["J","F","M","A","M","J","J","A","S","O","N","D"];function Pr(s){switch(s){case"narrow":return[...Jf];case"short":return[...qr];case"long":return[...Kf];case"numeric":return["1","2","3","4","5","6","7","8","9","10","11","12"];case"2-digit":return["01","02","03","04","05","06","07","08","09","10","11","12"];default:return null}}var Gr=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],Xr=["Mon","Tue","Wed","Thu","Fri","Sat","Sun"],Qf=["M","T","W","T","F","S","S"];function Nr(s){switch(s){case"narrow":return[...Qf];case"short":return[...Xr];case"long":return[...Gr];case"numeric":return["1","2","3","4","5","6","7"];default:return null}}var Rr=["AM","PM"],tm=["Before Christ","Anno Domini"],em=["BC","AD"],sm=["B","A"];function Wr(s){switch(s){case"narrow":return[...sm];case"short":return[...em];case"long":return[...tm];default:return null}}function Nl(s){return Rr[s.hour<12?0:1]}function Rl(s,t){return Nr(t)[s.weekday-1]}function Wl(s,t){return Pr(t)[s.month-1]}function zl(s,t){return Wr(t)[s.year<0?0:1]}function pl(s,t,e="always",i=!1){let n={years:["year","yr."],quarters:["quarter","qtr."],months:["month","mo."],weeks:["week","wk."],days:["day","day","days"],hours:["hour","hr."],minutes:["minute","min."],seconds:["second","sec."]},r=["hours","minutes","seconds"].indexOf(s)===-1;if(e==="auto"&&r){let u=s==="days";switch(t){case 1:return u?"tomorrow":`next ${n[s][0]}`;case-1:return u?"yesterday":`last ${n[s][0]}`;case 0:return u?"today":`this ${n[s][0]}`;default:}}let o=Object.is(t,-0)||t<0,a=Math.abs(t),l=a===1,c=n[s],h=i?l?c[1]:c[2]||c[1]:l?n[s][0]:s;return o?`${a} ${h} ago`:`in ${a} ${h}`}function Vl(s,t){let e="";for(let i of s)i.literal?e+=i.val:e+=t(i.val);return e}var im={D:ae,DD:zs,DDD:Vs,DDDD:Hs,t:Bs,tt:$s,ttt:js,tttt:Us,T:Ys,TT:Zs,TTT:qs,TTTT:Gs,f:Xs,ff:Js,fff:ti,ffff:si,F:Ks,FF:Qs,FFF:ei,FFFF:ii},X=class{static create(t,e={}){return new X(t,e)}static parseFormat(t){let e=null,i="",n=!1,r=[];for(let o=0;o0&&r.push({literal:n||/^\s+$/.test(i),val:i}),e=null,i="",n=!n):n||a===e?i+=a:(i.length>0&&r.push({literal:/^\s+$/.test(i),val:i}),i=a,e=a)}return i.length>0&&r.push({literal:n||/^\s+$/.test(i),val:i}),r}static macroTokenToFormatOpts(t){return im[t]}constructor(t,e){this.opts=e,this.loc=t,this.systemLoc=null}formatWithSystemDefault(t,e){return this.systemLoc===null&&(this.systemLoc=this.loc.redefaultToSystem()),this.systemLoc.dtFormatter(t,{...this.opts,...e}).format()}dtFormatter(t,e={}){return this.loc.dtFormatter(t,{...this.opts,...e})}formatDateTime(t,e){return this.dtFormatter(t,e).format()}formatDateTimeParts(t,e){return this.dtFormatter(t,e).formatToParts()}formatInterval(t,e){return this.dtFormatter(t.start,e).dtf.formatRange(t.start.toJSDate(),t.end.toJSDate())}resolvedOptions(t,e){return this.dtFormatter(t,e).resolvedOptions()}num(t,e=0){if(this.opts.forceSimple)return q(t,e);let i={...this.opts};return e>0&&(i.padTo=e),this.loc.numberFormatter(i).format(t)}formatDateTimeFromString(t,e){let i=this.loc.listingMode()==="en",n=this.loc.outputCalendar&&this.loc.outputCalendar!=="gregory",r=(f,m)=>this.loc.extract(t,f,m),o=f=>t.isOffsetFixed&&t.offset===0&&f.allowZ?"Z":t.isValid?t.zone.formatOffset(t.ts,f.format):"",a=()=>i?Nl(t):r({hour:"numeric",hourCycle:"h12"},"dayperiod"),l=(f,m)=>i?Wl(t,f):r(m?{month:f}:{month:f,day:"numeric"},"month"),c=(f,m)=>i?Rl(t,f):r(m?{weekday:f}:{weekday:f,month:"long",day:"numeric"},"weekday"),h=f=>{let m=X.macroTokenToFormatOpts(f);return m?this.formatWithSystemDefault(t,m):f},u=f=>i?zl(t,f):r({era:f},"era"),d=f=>{switch(f){case"S":return this.num(t.millisecond);case"u":case"SSS":return this.num(t.millisecond,3);case"s":return this.num(t.second);case"ss":return this.num(t.second,2);case"uu":return this.num(Math.floor(t.millisecond/10),2);case"uuu":return this.num(Math.floor(t.millisecond/100));case"m":return this.num(t.minute);case"mm":return this.num(t.minute,2);case"h":return this.num(t.hour%12===0?12:t.hour%12);case"hh":return this.num(t.hour%12===0?12:t.hour%12,2);case"H":return this.num(t.hour);case"HH":return this.num(t.hour,2);case"Z":return o({format:"narrow",allowZ:this.opts.allowZ});case"ZZ":return o({format:"short",allowZ:this.opts.allowZ});case"ZZZ":return o({format:"techie",allowZ:this.opts.allowZ});case"ZZZZ":return t.zone.offsetName(t.ts,{format:"short",locale:this.loc.locale});case"ZZZZZ":return t.zone.offsetName(t.ts,{format:"long",locale:this.loc.locale});case"z":return t.zoneName;case"a":return a();case"d":return n?r({day:"numeric"},"day"):this.num(t.day);case"dd":return n?r({day:"2-digit"},"day"):this.num(t.day,2);case"c":return this.num(t.weekday);case"ccc":return c("short",!0);case"cccc":return c("long",!0);case"ccccc":return c("narrow",!0);case"E":return this.num(t.weekday);case"EEE":return c("short",!1);case"EEEE":return c("long",!1);case"EEEEE":return c("narrow",!1);case"L":return n?r({month:"numeric",day:"numeric"},"month"):this.num(t.month);case"LL":return n?r({month:"2-digit",day:"numeric"},"month"):this.num(t.month,2);case"LLL":return l("short",!0);case"LLLL":return l("long",!0);case"LLLLL":return l("narrow",!0);case"M":return n?r({month:"numeric"},"month"):this.num(t.month);case"MM":return n?r({month:"2-digit"},"month"):this.num(t.month,2);case"MMM":return l("short",!1);case"MMMM":return l("long",!1);case"MMMMM":return l("narrow",!1);case"y":return n?r({year:"numeric"},"year"):this.num(t.year);case"yy":return n?r({year:"2-digit"},"year"):this.num(t.year.toString().slice(-2),2);case"yyyy":return n?r({year:"numeric"},"year"):this.num(t.year,4);case"yyyyyy":return n?r({year:"numeric"},"year"):this.num(t.year,6);case"G":return u("short");case"GG":return u("long");case"GGGGG":return u("narrow");case"kk":return this.num(t.weekYear.toString().slice(-2),2);case"kkkk":return this.num(t.weekYear,4);case"W":return this.num(t.weekNumber);case"WW":return this.num(t.weekNumber,2);case"n":return this.num(t.localWeekNumber);case"nn":return this.num(t.localWeekNumber,2);case"ii":return this.num(t.localWeekYear.toString().slice(-2),2);case"iiii":return this.num(t.localWeekYear,4);case"o":return this.num(t.ordinal);case"ooo":return this.num(t.ordinal,3);case"q":return this.num(t.quarter);case"qq":return this.num(t.quarter,2);case"X":return this.num(Math.floor(t.ts/1e3));case"x":return this.num(t.ts);default:return h(f)}};return Vl(X.parseFormat(e),d)}formatDurationFromString(t,e){let i=l=>{switch(l[0]){case"S":return"millisecond";case"s":return"second";case"m":return"minute";case"h":return"hour";case"d":return"day";case"w":return"week";case"M":return"month";case"y":return"year";default:return null}},n=l=>c=>{let h=i(c);return h?this.num(l.get(h),c.length):c},r=X.parseFormat(e),o=r.reduce((l,{literal:c,val:h})=>c?l:l.concat(h),[]),a=t.shiftTo(...o.map(i).filter(l=>l));return Vl(r,n(a))}};var Bl=/[A-Za-z_+-]{1,256}(?::?\/[A-Za-z0-9_+-]{1,256}(?:\/[A-Za-z0-9_+-]{1,256})?)?/;function as(...s){let t=s.reduce((e,i)=>e+i.source,"");return RegExp(`^${t}$`)}function ls(...s){return t=>s.reduce(([e,i,n],r)=>{let[o,a,l]=r(t,n);return[{...e,...o},a||i,l]},[{},null,1]).slice(0,2)}function cs(s,...t){if(s==null)return[null,null];for(let[e,i]of t){let n=e.exec(s);if(n)return i(n)}return[null,null]}function $l(...s){return(t,e)=>{let i={},n;for(n=0;nf!==void 0&&(m||f&&h)?-f:f;return[{years:d(ue(e)),months:d(ue(i)),weeks:d(ue(n)),days:d(ue(r)),hours:d(ue(o)),minutes:d(ue(a)),seconds:d(ue(l),l==="-0"),milliseconds:d(ci(c),u)}]}var pm={GMT:0,EDT:-4*60,EST:-5*60,CDT:-5*60,CST:-6*60,MDT:-6*60,MST:-7*60,PDT:-7*60,PST:-8*60};function Qr(s,t,e,i,n,r,o){let a={year:t.length===2?hi(qt(t)):qt(t),month:qr.indexOf(e)+1,day:qt(i),hour:qt(n),minute:qt(r)};return o&&(a.second=qt(o)),s&&(a.weekday=s.length>3?Gr.indexOf(s)+1:Xr.indexOf(s)+1),a}var ym=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\d\d)(\d\d)))$/;function bm(s){let[,t,e,i,n,r,o,a,l,c,h,u]=s,d=Qr(t,n,i,e,r,o,a),f;return l?f=pm[l]:c?f=0:f=Se(h,u),[d,new G(f)]}function xm(s){return s.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").trim()}var _m=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d\d):(\d\d):(\d\d) GMT$/,wm=/^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\d\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d\d) (\d\d):(\d\d):(\d\d) GMT$/,Sm=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \d|\d\d) (\d\d):(\d\d):(\d\d) (\d{4})$/;function Hl(s){let[,t,e,i,n,r,o,a]=s;return[Qr(t,n,i,e,r,o,a),G.utcInstance]}function km(s){let[,t,e,i,n,r,o,a]=s;return[Qr(t,a,e,i,n,r,o),G.utcInstance]}var Mm=as(rm,Jr),Tm=as(om,Jr),vm=as(am,Jr),Om=as(Ul),Zl=ls(dm,hs,ui,di),Dm=ls(lm,hs,ui,di),Em=ls(cm,hs,ui,di),Im=ls(hs,ui,di);function ql(s){return cs(s,[Mm,Zl],[Tm,Dm],[vm,Em],[Om,Im])}function Gl(s){return cs(xm(s),[ym,bm])}function Xl(s){return cs(s,[_m,Hl],[wm,Hl],[Sm,km])}function Kl(s){return cs(s,[mm,gm])}var Cm=ls(hs);function Jl(s){return cs(s,[fm,Cm])}var Fm=as(hm,um),Am=as(Yl),Lm=ls(hs,ui,di);function Ql(s){return cs(s,[Fm,Zl],[Am,Lm])}var tc="Invalid Duration",sc={weeks:{days:7,hours:7*24,minutes:7*24*60,seconds:7*24*60*60,milliseconds:7*24*60*60*1e3},days:{hours:24,minutes:24*60,seconds:24*60*60,milliseconds:24*60*60*1e3},hours:{minutes:60,seconds:60*60,milliseconds:60*60*1e3},minutes:{seconds:60,milliseconds:60*1e3},seconds:{milliseconds:1e3}},Pm={years:{quarters:4,months:12,weeks:52,days:365,hours:365*24,minutes:365*24*60,seconds:365*24*60*60,milliseconds:365*24*60*60*1e3},quarters:{months:3,weeks:13,days:91,hours:91*24,minutes:91*24*60,seconds:91*24*60*60,milliseconds:91*24*60*60*1e3},months:{weeks:4,days:30,hours:30*24,minutes:30*24*60,seconds:30*24*60*60,milliseconds:30*24*60*60*1e3},...sc},kt=146097/400,us=146097/4800,Nm={years:{quarters:4,months:12,weeks:kt/7,days:kt,hours:kt*24,minutes:kt*24*60,seconds:kt*24*60*60,milliseconds:kt*24*60*60*1e3},quarters:{months:3,weeks:kt/28,days:kt/4,hours:kt*24/4,minutes:kt*24*60/4,seconds:kt*24*60*60/4,milliseconds:kt*24*60*60*1e3/4},months:{weeks:us/7,days:us,hours:us*24,minutes:us*24*60,seconds:us*24*60*60,milliseconds:us*24*60*60*1e3},...sc},Te=["years","quarters","months","weeks","days","hours","minutes","seconds","milliseconds"],Rm=Te.slice(0).reverse();function de(s,t,e=!1){let i={values:e?t.values:{...s.values,...t.values||{}},loc:s.loc.clone(t.loc),conversionAccuracy:t.conversionAccuracy||s.conversionAccuracy,matrix:t.matrix||s.matrix};return new C(i)}function ic(s,t){let e=t.milliseconds??0;for(let i of Rm.slice(1))t[i]&&(e+=t[i]*s[i].milliseconds);return e}function ec(s,t){let e=ic(s,t)<0?-1:1;Te.reduceRight((i,n)=>{if(D(t[n]))return i;if(i){let r=t[i]*e,o=s[n][i],a=Math.floor(r/o);t[n]+=a*e,t[i]-=a*o*e}return n},null),Te.reduce((i,n)=>{if(D(t[n]))return i;if(i){let r=t[i]%1;t[i]-=r,t[n]+=r*s[i][n]}return n},null)}function Wm(s){let t={};for(let[e,i]of Object.entries(s))i!==0&&(t[e]=i);return t}var C=class{constructor(t){let e=t.conversionAccuracy==="longterm"||!1,i=e?Nm:Pm;t.matrix&&(i=t.matrix),this.values=t.values,this.loc=t.loc||N.create(),this.conversionAccuracy=e?"longterm":"casual",this.invalid=t.invalid||null,this.matrix=i,this.isLuxonDuration=!0}static fromMillis(t,e){return C.fromObject({milliseconds:t},e)}static fromObject(t,e={}){if(t==null||typeof t!="object")throw new st(`Duration.fromObject: argument expected to be an object, got ${t===null?"null":typeof t}`);return new C({values:rs(t,C.normalizeUnit),loc:N.fromObject(e),conversionAccuracy:e.conversionAccuracy,matrix:e.matrix})}static fromDurationLike(t){if(zt(t))return C.fromMillis(t);if(C.isDuration(t))return t;if(typeof t=="object")return C.fromObject(t);throw new st(`Unknown duration argument ${t} of type ${typeof t}`)}static fromISO(t,e){let[i]=Kl(t);return i?C.fromObject(i,e):C.invalid("unparsable",`the input "${t}" can't be parsed as ISO 8601`)}static fromISOTime(t,e){let[i]=Jl(t);return i?C.fromObject(i,e):C.invalid("unparsable",`the input "${t}" can't be parsed as ISO 8601`)}static invalid(t,e=null){if(!t)throw new st("need to specify a reason the Duration is invalid");let i=t instanceof rt?t:new rt(t,e);if(z.throwOnInvalid)throw new Ki(i);return new C({invalid:i})}static normalizeUnit(t){let e={year:"years",years:"years",quarter:"quarters",quarters:"quarters",month:"months",months:"months",week:"weeks",weeks:"weeks",day:"days",days:"days",hour:"hours",hours:"hours",minute:"minutes",minutes:"minutes",second:"seconds",seconds:"seconds",millisecond:"milliseconds",milliseconds:"milliseconds"}[t&&t.toLowerCase()];if(!e)throw new ts(t);return e}static isDuration(t){return t&&t.isLuxonDuration||!1}get locale(){return this.isValid?this.loc.locale:null}get numberingSystem(){return this.isValid?this.loc.numberingSystem:null}toFormat(t,e={}){let i={...e,floor:e.round!==!1&&e.floor!==!1};return this.isValid?X.create(this.loc,i).formatDurationFromString(this,t):tc}toHuman(t={}){if(!this.isValid)return tc;let e=Te.map(i=>{let n=this.values[i];return D(n)?null:this.loc.numberFormatter({style:"unit",unitDisplay:"long",...t,unit:i.slice(0,-1)}).format(n)}).filter(i=>i);return this.loc.listFormatter({type:"conjunction",style:t.listStyle||"narrow",...t}).format(e)}toObject(){return this.isValid?{...this.values}:{}}toISO(){if(!this.isValid)return null;let t="P";return this.years!==0&&(t+=this.years+"Y"),(this.months!==0||this.quarters!==0)&&(t+=this.months+this.quarters*3+"M"),this.weeks!==0&&(t+=this.weeks+"W"),this.days!==0&&(t+=this.days+"D"),(this.hours!==0||this.minutes!==0||this.seconds!==0||this.milliseconds!==0)&&(t+="T"),this.hours!==0&&(t+=this.hours+"H"),this.minutes!==0&&(t+=this.minutes+"M"),(this.seconds!==0||this.milliseconds!==0)&&(t+=ss(this.seconds+this.milliseconds/1e3,3)+"S"),t==="P"&&(t+="T0S"),t}toISOTime(t={}){if(!this.isValid)return null;let e=this.toMillis();return e<0||e>=864e5?null:(t={suppressMilliseconds:!1,suppressSeconds:!1,includePrefix:!1,format:"extended",...t,includeOffset:!1},v.fromMillis(e,{zone:"UTC"}).toISOTime(t))}toJSON(){return this.toISO()}toString(){return this.toISO()}[Symbol.for("nodejs.util.inspect.custom")](){return this.isValid?`Duration { values: ${JSON.stringify(this.values)} }`:`Duration { Invalid, reason: ${this.invalidReason} }`}toMillis(){return this.isValid?ic(this.matrix,this.values):NaN}valueOf(){return this.toMillis()}plus(t){if(!this.isValid)return this;let e=C.fromDurationLike(t),i={};for(let n of Te)(he(e.values,n)||he(this.values,n))&&(i[n]=e.get(n)+this.get(n));return de(this,{values:i},!0)}minus(t){if(!this.isValid)return this;let e=C.fromDurationLike(t);return this.plus(e.negate())}mapUnits(t){if(!this.isValid)return this;let e={};for(let i of Object.keys(this.values))e[i]=Zr(t(this.values[i],i));return de(this,{values:e},!0)}get(t){return this[C.normalizeUnit(t)]}set(t){if(!this.isValid)return this;let e={...this.values,...rs(t,C.normalizeUnit)};return de(this,{values:e})}reconfigure({locale:t,numberingSystem:e,conversionAccuracy:i,matrix:n}={}){let o={loc:this.loc.clone({locale:t,numberingSystem:e}),matrix:n,conversionAccuracy:i};return de(this,o)}as(t){return this.isValid?this.shiftTo(t).get(t):NaN}normalize(){if(!this.isValid)return this;let t=this.toObject();return ec(this.matrix,t),de(this,{values:t},!0)}rescale(){if(!this.isValid)return this;let t=Wm(this.normalize().shiftToAll().toObject());return de(this,{values:t},!0)}shiftTo(...t){if(!this.isValid)return this;if(t.length===0)return this;t=t.map(o=>C.normalizeUnit(o));let e={},i={},n=this.toObject(),r;for(let o of Te)if(t.indexOf(o)>=0){r=o;let a=0;for(let c in i)a+=this.matrix[c][o]*i[c],i[c]=0;zt(n[o])&&(a+=n[o]);let l=Math.trunc(a);e[o]=l,i[o]=(a*1e3-l*1e3)/1e3}else zt(n[o])&&(i[o]=n[o]);for(let o in i)i[o]!==0&&(e[r]+=o===r?i[o]:i[o]/this.matrix[r][o]);return ec(this.matrix,e),de(this,{values:e},!0)}shiftToAll(){return this.isValid?this.shiftTo("years","months","weeks","days","hours","minutes","seconds","milliseconds"):this}negate(){if(!this.isValid)return this;let t={};for(let e of Object.keys(this.values))t[e]=this.values[e]===0?0:-this.values[e];return de(this,{values:t},!0)}get years(){return this.isValid?this.values.years||0:NaN}get quarters(){return this.isValid?this.values.quarters||0:NaN}get months(){return this.isValid?this.values.months||0:NaN}get weeks(){return this.isValid?this.values.weeks||0:NaN}get days(){return this.isValid?this.values.days||0:NaN}get hours(){return this.isValid?this.values.hours||0:NaN}get minutes(){return this.isValid?this.values.minutes||0:NaN}get seconds(){return this.isValid?this.values.seconds||0:NaN}get milliseconds(){return this.isValid?this.values.milliseconds||0:NaN}get isValid(){return this.invalid===null}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}equals(t){if(!this.isValid||!t.isValid||!this.loc.equals(t.loc))return!1;function e(i,n){return i===void 0||i===0?n===void 0||n===0:i===n}for(let i of Te)if(!e(this.values[i],t.values[i]))return!1;return!0}};var ds="Invalid Interval";function zm(s,t){return!s||!s.isValid?U.invalid("missing or invalid start"):!t||!t.isValid?U.invalid("missing or invalid end"):tt:!1}isBefore(t){return this.isValid?this.e<=t:!1}contains(t){return this.isValid?this.s<=t&&this.e>t:!1}set({start:t,end:e}={}){return this.isValid?U.fromDateTimes(t||this.s,e||this.e):this}splitAt(...t){if(!this.isValid)return[];let e=t.map(fs).filter(o=>this.contains(o)).sort((o,a)=>o.toMillis()-a.toMillis()),i=[],{s:n}=this,r=0;for(;n+this.e?this.e:o;i.push(U.fromDateTimes(n,a)),n=a,r+=1}return i}splitBy(t){let e=C.fromDurationLike(t);if(!this.isValid||!e.isValid||e.as("milliseconds")===0)return[];let{s:i}=this,n=1,r,o=[];for(;il*n));r=+a>+this.e?this.e:a,o.push(U.fromDateTimes(i,r)),i=r,n+=1}return o}divideEqually(t){return this.isValid?this.splitBy(this.length()/t).slice(0,t):[]}overlaps(t){return this.e>t.s&&this.s=t.e:!1}equals(t){return!this.isValid||!t.isValid?!1:this.s.equals(t.s)&&this.e.equals(t.e)}intersection(t){if(!this.isValid)return this;let e=this.s>t.s?this.s:t.s,i=this.e=i?null:U.fromDateTimes(e,i)}union(t){if(!this.isValid)return this;let e=this.st.e?this.e:t.e;return U.fromDateTimes(e,i)}static merge(t){let[e,i]=t.sort((n,r)=>n.s-r.s).reduce(([n,r],o)=>r?r.overlaps(o)||r.abutsStart(o)?[n,r.union(o)]:[n.concat([r]),o]:[n,o],[[],null]);return i&&e.push(i),e}static xor(t){let e=null,i=0,n=[],r=t.map(l=>[{time:l.s,type:"s"},{time:l.e,type:"e"}]),o=Array.prototype.concat(...r),a=o.sort((l,c)=>l.time-c.time);for(let l of a)i+=l.type==="s"?1:-1,i===1?e=l.time:(e&&+e!=+l.time&&n.push(U.fromDateTimes(e,l.time)),e=null);return U.merge(n)}difference(...t){return U.xor([this].concat(t)).map(e=>this.intersection(e)).filter(e=>e&&!e.isEmpty())}toString(){return this.isValid?`[${this.s.toISO()} \u2013 ${this.e.toISO()})`:ds}[Symbol.for("nodejs.util.inspect.custom")](){return this.isValid?`Interval { start: ${this.s.toISO()}, end: ${this.e.toISO()} }`:`Interval { Invalid, reason: ${this.invalidReason} }`}toLocaleString(t=ae,e={}){return this.isValid?X.create(this.s.loc.clone(e),t).formatInterval(this):ds}toISO(t){return this.isValid?`${this.s.toISO(t)}/${this.e.toISO(t)}`:ds}toISODate(){return this.isValid?`${this.s.toISODate()}/${this.e.toISODate()}`:ds}toISOTime(t){return this.isValid?`${this.s.toISOTime(t)}/${this.e.toISOTime(t)}`:ds}toFormat(t,{separator:e=" \u2013 "}={}){return this.isValid?`${this.s.toFormat(t)}${e}${this.e.toFormat(t)}`:ds}toDuration(t,e){return this.isValid?this.e.diff(this.s,t,e):C.invalid(this.invalidReason)}mapEndpoints(t){return U.fromDateTimes(t(this.s),t(this.e))}};var Gt=class{static hasDST(t=z.defaultZone){let e=v.now().setZone(t).set({month:12});return!t.isUniversal&&e.offset!==e.set({month:6}).offset}static isValidIANAZone(t){return nt.isValidZone(t)}static normalizeZone(t){return Et(t,z.defaultZone)}static getStartOfWeek({locale:t=null,locObj:e=null}={}){return(e||N.create(t)).getStartOfWeek()}static getMinimumDaysInFirstWeek({locale:t=null,locObj:e=null}={}){return(e||N.create(t)).getMinDaysInFirstWeek()}static getWeekendWeekdays({locale:t=null,locObj:e=null}={}){return(e||N.create(t)).getWeekendDays().slice()}static months(t="long",{locale:e=null,numberingSystem:i=null,locObj:n=null,outputCalendar:r="gregory"}={}){return(n||N.create(e,i,r)).months(t)}static monthsFormat(t="long",{locale:e=null,numberingSystem:i=null,locObj:n=null,outputCalendar:r="gregory"}={}){return(n||N.create(e,i,r)).months(t,!0)}static weekdays(t="long",{locale:e=null,numberingSystem:i=null,locObj:n=null}={}){return(n||N.create(e,i,null)).weekdays(t)}static weekdaysFormat(t="long",{locale:e=null,numberingSystem:i=null,locObj:n=null}={}){return(n||N.create(e,i,null)).weekdays(t,!0)}static meridiems({locale:t=null}={}){return N.create(t).meridiems()}static eras(t="short",{locale:e=null}={}){return N.create(e,null,"gregory").eras(t)}static features(){return{relative:nn(),localeWeek:rn()}}};function nc(s,t){let e=n=>n.toUTC(0,{keepLocalTime:!0}).startOf("day").valueOf(),i=e(t)-e(s);return Math.floor(C.fromMillis(i).as("days"))}function Vm(s,t,e){let i=[["years",(l,c)=>c.year-l.year],["quarters",(l,c)=>c.quarter-l.quarter+(c.year-l.year)*4],["months",(l,c)=>c.month-l.month+(c.year-l.year)*12],["weeks",(l,c)=>{let h=nc(l,c);return(h-h%7)/7}],["days",nc]],n={},r=s,o,a;for(let[l,c]of i)e.indexOf(l)>=0&&(o=l,n[l]=c(s,t),a=r.plus(n),a>t?(n[l]--,s=r.plus(n),s>t&&(a=s,n[l]--,s=r.plus(n))):s=a);return[s,n,a,o]}function rc(s,t,e,i){let[n,r,o,a]=Vm(s,t,e),l=t-n,c=e.filter(u=>["hours","minutes","seconds","milliseconds"].indexOf(u)>=0);c.length===0&&(o0?C.fromMillis(l,i).shiftTo(...c).plus(h):h}var to={arab:"[\u0660-\u0669]",arabext:"[\u06F0-\u06F9]",bali:"[\u1B50-\u1B59]",beng:"[\u09E6-\u09EF]",deva:"[\u0966-\u096F]",fullwide:"[\uFF10-\uFF19]",gujr:"[\u0AE6-\u0AEF]",hanidec:"[\u3007|\u4E00|\u4E8C|\u4E09|\u56DB|\u4E94|\u516D|\u4E03|\u516B|\u4E5D]",khmr:"[\u17E0-\u17E9]",knda:"[\u0CE6-\u0CEF]",laoo:"[\u0ED0-\u0ED9]",limb:"[\u1946-\u194F]",mlym:"[\u0D66-\u0D6F]",mong:"[\u1810-\u1819]",mymr:"[\u1040-\u1049]",orya:"[\u0B66-\u0B6F]",tamldec:"[\u0BE6-\u0BEF]",telu:"[\u0C66-\u0C6F]",thai:"[\u0E50-\u0E59]",tibt:"[\u0F20-\u0F29]",latn:"\\d"},oc={arab:[1632,1641],arabext:[1776,1785],bali:[6992,7001],beng:[2534,2543],deva:[2406,2415],fullwide:[65296,65303],gujr:[2790,2799],khmr:[6112,6121],knda:[3302,3311],laoo:[3792,3801],limb:[6470,6479],mlym:[3430,3439],mong:[6160,6169],mymr:[4160,4169],orya:[2918,2927],tamldec:[3046,3055],telu:[3174,3183],thai:[3664,3673],tibt:[3872,3881]},Hm=to.hanidec.replace(/[\[|\]]/g,"").split("");function ac(s){let t=parseInt(s,10);if(isNaN(t)){t="";for(let e=0;e=r&&i<=o&&(t+=i-r)}}return parseInt(t,10)}else return t}function Mt({numberingSystem:s},t=""){return new RegExp(`${to[s||"latn"]}${t}`)}var Bm="missing Intl.DateTimeFormat.formatToParts support";function V(s,t=e=>e){return{regex:s,deser:([e])=>t(ac(e))}}var $m=String.fromCharCode(160),hc=`[ ${$m}]`,uc=new RegExp(hc,"g");function jm(s){return s.replace(/\./g,"\\.?").replace(uc,hc)}function lc(s){return s.replace(/\./g,"").replace(uc," ").toLowerCase()}function It(s,t){return s===null?null:{regex:RegExp(s.map(jm).join("|")),deser:([e])=>s.findIndex(i=>lc(e)===lc(i))+t}}function cc(s,t){return{regex:s,deser:([,e,i])=>Se(e,i),groups:t}}function cn(s){return{regex:s,deser:([t])=>t}}function Um(s){return s.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")}function Ym(s,t){let e=Mt(t),i=Mt(t,"{2}"),n=Mt(t,"{3}"),r=Mt(t,"{4}"),o=Mt(t,"{6}"),a=Mt(t,"{1,2}"),l=Mt(t,"{1,3}"),c=Mt(t,"{1,6}"),h=Mt(t,"{1,9}"),u=Mt(t,"{2,4}"),d=Mt(t,"{4,6}"),f=p=>({regex:RegExp(Um(p.val)),deser:([y])=>y,literal:!0}),g=(p=>{if(s.literal)return f(p);switch(p.val){case"G":return It(t.eras("short"),0);case"GG":return It(t.eras("long"),0);case"y":return V(c);case"yy":return V(u,hi);case"yyyy":return V(r);case"yyyyy":return V(d);case"yyyyyy":return V(o);case"M":return V(a);case"MM":return V(i);case"MMM":return It(t.months("short",!0),1);case"MMMM":return It(t.months("long",!0),1);case"L":return V(a);case"LL":return V(i);case"LLL":return It(t.months("short",!1),1);case"LLLL":return It(t.months("long",!1),1);case"d":return V(a);case"dd":return V(i);case"o":return V(l);case"ooo":return V(n);case"HH":return V(i);case"H":return V(a);case"hh":return V(i);case"h":return V(a);case"mm":return V(i);case"m":return V(a);case"q":return V(a);case"qq":return V(i);case"s":return V(a);case"ss":return V(i);case"S":return V(l);case"SSS":return V(n);case"u":return cn(h);case"uu":return cn(a);case"uuu":return V(e);case"a":return It(t.meridiems(),0);case"kkkk":return V(r);case"kk":return V(u,hi);case"W":return V(a);case"WW":return V(i);case"E":case"c":return V(e);case"EEE":return It(t.weekdays("short",!1),1);case"EEEE":return It(t.weekdays("long",!1),1);case"ccc":return It(t.weekdays("short",!0),1);case"cccc":return It(t.weekdays("long",!0),1);case"Z":case"ZZ":return cc(new RegExp(`([+-]${a.source})(?::(${i.source}))?`),2);case"ZZZ":return cc(new RegExp(`([+-]${a.source})(${i.source})?`),2);case"z":return cn(/[a-z_+-/]{1,256}?/i);case" ":return cn(/[^\S\n\r]/);default:return f(p)}})(s)||{invalidReason:Bm};return g.token=s,g}var Zm={year:{"2-digit":"yy",numeric:"yyyyy"},month:{numeric:"M","2-digit":"MM",short:"MMM",long:"MMMM"},day:{numeric:"d","2-digit":"dd"},weekday:{short:"EEE",long:"EEEE"},dayperiod:"a",dayPeriod:"a",hour12:{numeric:"h","2-digit":"hh"},hour24:{numeric:"H","2-digit":"HH"},minute:{numeric:"m","2-digit":"mm"},second:{numeric:"s","2-digit":"ss"},timeZoneName:{long:"ZZZZZ",short:"ZZZ"}};function qm(s,t,e){let{type:i,value:n}=s;if(i==="literal"){let l=/^\s+$/.test(n);return{literal:!l,val:l?" ":n}}let r=t[i],o=i;i==="hour"&&(t.hour12!=null?o=t.hour12?"hour12":"hour24":t.hourCycle!=null?t.hourCycle==="h11"||t.hourCycle==="h12"?o="hour12":o="hour24":o=e.hour12?"hour12":"hour24");let a=Zm[o];if(typeof a=="object"&&(a=a[r]),a)return{literal:!1,val:a}}function Gm(s){return[`^${s.map(e=>e.regex).reduce((e,i)=>`${e}(${i.source})`,"")}$`,s]}function Xm(s,t,e){let i=s.match(t);if(i){let n={},r=1;for(let o in e)if(he(e,o)){let a=e[o],l=a.groups?a.groups+1:1;!a.literal&&a.token&&(n[a.token.val[0]]=a.deser(i.slice(r,r+l))),r+=l}return[i,n]}else return[i,{}]}function Km(s){let t=r=>{switch(r){case"S":return"millisecond";case"s":return"second";case"m":return"minute";case"h":case"H":return"hour";case"d":return"day";case"o":return"ordinal";case"L":case"M":return"month";case"y":return"year";case"E":case"c":return"weekday";case"W":return"weekNumber";case"k":return"weekYear";case"q":return"quarter";default:return null}},e=null,i;return D(s.z)||(e=nt.create(s.z)),D(s.Z)||(e||(e=new G(s.Z)),i=s.Z),D(s.q)||(s.M=(s.q-1)*3+1),D(s.h)||(s.h<12&&s.a===1?s.h+=12:s.h===12&&s.a===0&&(s.h=0)),s.G===0&&s.y&&(s.y=-s.y),D(s.u)||(s.S=ci(s.u)),[Object.keys(s).reduce((r,o)=>{let a=t(o);return a&&(r[a]=s[o]),r},{}),e,i]}var eo=null;function Jm(){return eo||(eo=v.fromMillis(1555555555555)),eo}function Qm(s,t){if(s.literal)return s;let e=X.macroTokenToFormatOpts(s.val),i=no(e,t);return i==null||i.includes(void 0)?s:i}function so(s,t){return Array.prototype.concat(...s.map(e=>Qm(e,t)))}function io(s,t,e){let i=so(X.parseFormat(e),s),n=i.map(o=>Ym(o,s)),r=n.find(o=>o.invalidReason);if(r)return{input:t,tokens:i,invalidReason:r.invalidReason};{let[o,a]=Gm(n),l=RegExp(o,"i"),[c,h]=Xm(t,l,a),[u,d,f]=h?Km(h):[null,null,void 0];if(he(h,"a")&&he(h,"H"))throw new vt("Can't include meridiem when specifying 24-hour format");return{input:t,tokens:i,regex:l,rawMatches:c,matches:h,result:u,zone:d,specificOffset:f}}}function dc(s,t,e){let{result:i,zone:n,specificOffset:r,invalidReason:o}=io(s,t,e);return[i,n,r,o]}function no(s,t){if(!s)return null;let i=X.create(t,s).dtFormatter(Jm()),n=i.formatToParts(),r=i.resolvedOptions();return n.map(o=>qm(o,s,r))}var ro="Invalid DateTime",fc=864e13;function hn(s){return new rt("unsupported zone",`the zone "${s.name}" is not supported`)}function oo(s){return s.weekData===null&&(s.weekData=oi(s.c)),s.weekData}function ao(s){return s.localWeekData===null&&(s.localWeekData=oi(s.c,s.loc.getMinDaysInFirstWeek(),s.loc.getStartOfWeek())),s.localWeekData}function ve(s,t){let e={ts:s.ts,zone:s.zone,c:s.c,o:s.o,loc:s.loc,invalid:s.invalid};return new v({...e,...t,old:e})}function _c(s,t,e){let i=s-t*60*1e3,n=e.offset(i);if(t===n)return[i,t];i-=(n-t)*60*1e3;let r=e.offset(i);return n===r?[i,n]:[s-Math.min(n,r)*60*1e3,Math.max(n,r)]}function un(s,t){s+=t*60*1e3;let e=new Date(s);return{year:e.getUTCFullYear(),month:e.getUTCMonth()+1,day:e.getUTCDate(),hour:e.getUTCHours(),minute:e.getUTCMinutes(),second:e.getUTCSeconds(),millisecond:e.getUTCMilliseconds()}}function fn(s,t,e){return _c(es(s),t,e)}function mc(s,t){let e=s.o,i=s.c.year+Math.trunc(t.years),n=s.c.month+Math.trunc(t.months)+Math.trunc(t.quarters)*3,r={...s.c,year:i,month:n,day:Math.min(s.c.day,ns(i,n))+Math.trunc(t.days)+Math.trunc(t.weeks)*7},o=C.fromObject({years:t.years-Math.trunc(t.years),quarters:t.quarters-Math.trunc(t.quarters),months:t.months-Math.trunc(t.months),weeks:t.weeks-Math.trunc(t.weeks),days:t.days-Math.trunc(t.days),hours:t.hours,minutes:t.minutes,seconds:t.seconds,milliseconds:t.milliseconds}).as("milliseconds"),a=es(r),[l,c]=_c(a,e,s.zone);return o!==0&&(l+=o,c=s.zone.offset(l)),{ts:l,o:c}}function fi(s,t,e,i,n,r){let{setZone:o,zone:a}=e;if(s&&Object.keys(s).length!==0||t){let l=t||a,c=v.fromObject(s,{...e,zone:l,specificOffset:r});return o?c:c.setZone(a)}else return v.invalid(new rt("unparsable",`the input "${n}" can't be parsed as ${i}`))}function dn(s,t,e=!0){return s.isValid?X.create(N.create("en-US"),{allowZ:e,forceSimple:!0}).formatDateTimeFromString(s,t):null}function lo(s,t){let e=s.c.year>9999||s.c.year<0,i="";return e&&s.c.year>=0&&(i+="+"),i+=q(s.c.year,e?6:4),t?(i+="-",i+=q(s.c.month),i+="-",i+=q(s.c.day)):(i+=q(s.c.month),i+=q(s.c.day)),i}function gc(s,t,e,i,n,r){let o=q(s.c.hour);return t?(o+=":",o+=q(s.c.minute),(s.c.millisecond!==0||s.c.second!==0||!e)&&(o+=":")):o+=q(s.c.minute),(s.c.millisecond!==0||s.c.second!==0||!e)&&(o+=q(s.c.second),(s.c.millisecond!==0||!i)&&(o+=".",o+=q(s.c.millisecond,3))),n&&(s.isOffsetFixed&&s.offset===0&&!r?o+="Z":s.o<0?(o+="-",o+=q(Math.trunc(-s.o/60)),o+=":",o+=q(Math.trunc(-s.o%60))):(o+="+",o+=q(Math.trunc(s.o/60)),o+=":",o+=q(Math.trunc(s.o%60)))),r&&(o+="["+s.zone.ianaName+"]"),o}var wc={month:1,day:1,hour:0,minute:0,second:0,millisecond:0},tg={weekNumber:1,weekday:1,hour:0,minute:0,second:0,millisecond:0},eg={ordinal:1,hour:0,minute:0,second:0,millisecond:0},Sc=["year","month","day","hour","minute","second","millisecond"],sg=["weekYear","weekNumber","weekday","hour","minute","second","millisecond"],ig=["year","ordinal","hour","minute","second","millisecond"];function ng(s){let t={year:"year",years:"year",month:"month",months:"month",day:"day",days:"day",hour:"hour",hours:"hour",minute:"minute",minutes:"minute",quarter:"quarter",quarters:"quarter",second:"second",seconds:"second",millisecond:"millisecond",milliseconds:"millisecond",weekday:"weekday",weekdays:"weekday",weeknumber:"weekNumber",weeksnumber:"weekNumber",weeknumbers:"weekNumber",weekyear:"weekYear",weekyears:"weekYear",ordinal:"ordinal"}[s.toLowerCase()];if(!t)throw new ts(s);return t}function pc(s){switch(s.toLowerCase()){case"localweekday":case"localweekdays":return"localWeekday";case"localweeknumber":case"localweeknumbers":return"localWeekNumber";case"localweekyear":case"localweekyears":return"localWeekYear";default:return ng(s)}}function yc(s,t){let e=Et(t.zone,z.defaultZone),i=N.fromObject(t),n=z.now(),r,o;if(D(s.year))r=n;else{for(let c of Sc)D(s[c])&&(s[c]=wc[c]);let a=jr(s)||Ur(s);if(a)return v.invalid(a);let l=e.offset(n);[r,o]=fn(s,l,e)}return new v({ts:r,zone:e,loc:i,o})}function bc(s,t,e){let i=D(e.round)?!0:e.round,n=(o,a)=>(o=ss(o,i||e.calendary?0:2,!0),t.loc.clone(e).relFormatter(e).format(o,a)),r=o=>e.calendary?t.hasSame(s,o)?0:t.startOf(o).diff(s.startOf(o),o).get(o):t.diff(s,o).get(o);if(e.unit)return n(r(e.unit),e.unit);for(let o of e.units){let a=r(o);if(Math.abs(a)>=1)return n(a,o)}return n(s>t?-0:0,e.units[e.units.length-1])}function xc(s){let t={},e;return s.length>0&&typeof s[s.length-1]=="object"?(t=s[s.length-1],e=Array.from(s).slice(0,s.length-1)):e=Array.from(s),[t,e]}var v=class{constructor(t){let e=t.zone||z.defaultZone,i=t.invalid||(Number.isNaN(t.ts)?new rt("invalid input"):null)||(e.isValid?null:hn(e));this.ts=D(t.ts)?z.now():t.ts;let n=null,r=null;if(!i)if(t.old&&t.old.ts===this.ts&&t.old.zone.equals(e))[n,r]=[t.old.c,t.old.o];else{let a=e.offset(this.ts);n=un(this.ts,a),i=Number.isNaN(n.year)?new rt("invalid input"):null,n=i?null:n,r=i?null:a}this._zone=e,this.loc=t.loc||N.create(),this.invalid=i,this.weekData=null,this.localWeekData=null,this.c=n,this.o=r,this.isLuxonDateTime=!0}static now(){return new v({})}static local(){let[t,e]=xc(arguments),[i,n,r,o,a,l,c]=e;return yc({year:i,month:n,day:r,hour:o,minute:a,second:l,millisecond:c},t)}static utc(){let[t,e]=xc(arguments),[i,n,r,o,a,l,c]=e;return t.zone=G.utcInstance,yc({year:i,month:n,day:r,hour:o,minute:a,second:l,millisecond:c},t)}static fromJSDate(t,e={}){let i=Al(t)?t.valueOf():NaN;if(Number.isNaN(i))return v.invalid("invalid input");let n=Et(e.zone,z.defaultZone);return n.isValid?new v({ts:i,zone:n,loc:N.fromObject(e)}):v.invalid(hn(n))}static fromMillis(t,e={}){if(zt(t))return t<-fc||t>fc?v.invalid("Timestamp out of range"):new v({ts:t,zone:Et(e.zone,z.defaultZone),loc:N.fromObject(e)});throw new st(`fromMillis requires a numerical input, but received a ${typeof t} with value ${t}`)}static fromSeconds(t,e={}){if(zt(t))return new v({ts:t*1e3,zone:Et(e.zone,z.defaultZone),loc:N.fromObject(e)});throw new st("fromSeconds requires a numerical input")}static fromObject(t,e={}){t=t||{};let i=Et(e.zone,z.defaultZone);if(!i.isValid)return v.invalid(hn(i));let n=N.fromObject(e),r=rs(t,pc),{minDaysInFirstWeek:o,startOfWeek:a}=$r(r,n),l=z.now(),c=D(e.specificOffset)?i.offset(l):e.specificOffset,h=!D(r.ordinal),u=!D(r.year),d=!D(r.month)||!D(r.day),f=u||d,m=r.weekYear||r.weekNumber;if((f||h)&&m)throw new vt("Can't mix weekYear/weekNumber units with year/month/day or ordinals");if(d&&h)throw new vt("Can't mix ordinal dates with month/day");let g=m||r.weekday&&!f,p,y,b=un(l,c);g?(p=sg,y=tg,b=oi(b,o,a)):h?(p=ig,y=eg,b=ln(b)):(p=Sc,y=wc);let _=!1;for(let F of p){let W=r[F];D(W)?_?r[F]=y[F]:r[F]=b[F]:_=!0}let w=g?Il(r,o,a):h?Cl(r):jr(r),x=w||Ur(r);if(x)return v.invalid(x);let S=g?Hr(r,o,a):h?Br(r):r,[k,O]=fn(S,c,i),T=new v({ts:k,zone:i,o:O,loc:n});return r.weekday&&f&&t.weekday!==T.weekday?v.invalid("mismatched weekday",`you can't specify both a weekday of ${r.weekday} and a date of ${T.toISO()}`):T}static fromISO(t,e={}){let[i,n]=ql(t);return fi(i,n,e,"ISO 8601",t)}static fromRFC2822(t,e={}){let[i,n]=Gl(t);return fi(i,n,e,"RFC 2822",t)}static fromHTTP(t,e={}){let[i,n]=Xl(t);return fi(i,n,e,"HTTP",e)}static fromFormat(t,e,i={}){if(D(t)||D(e))throw new st("fromFormat requires an input string and a format");let{locale:n=null,numberingSystem:r=null}=i,o=N.fromOpts({locale:n,numberingSystem:r,defaultToEN:!0}),[a,l,c,h]=dc(o,t,e);return h?v.invalid(h):fi(a,l,i,`format ${e}`,t,c)}static fromString(t,e,i={}){return v.fromFormat(t,e,i)}static fromSQL(t,e={}){let[i,n]=Ql(t);return fi(i,n,e,"SQL",t)}static invalid(t,e=null){if(!t)throw new st("need to specify a reason the DateTime is invalid");let i=t instanceof rt?t:new rt(t,e);if(z.throwOnInvalid)throw new Gi(i);return new v({invalid:i})}static isDateTime(t){return t&&t.isLuxonDateTime||!1}static parseFormatForOpts(t,e={}){let i=no(t,N.fromObject(e));return i?i.map(n=>n?n.val:null).join(""):null}static expandFormat(t,e={}){return so(X.parseFormat(t),N.fromObject(e)).map(n=>n.val).join("")}get(t){return this[t]}get isValid(){return this.invalid===null}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}get locale(){return this.isValid?this.loc.locale:null}get numberingSystem(){return this.isValid?this.loc.numberingSystem:null}get outputCalendar(){return this.isValid?this.loc.outputCalendar:null}get zone(){return this._zone}get zoneName(){return this.isValid?this.zone.name:null}get year(){return this.isValid?this.c.year:NaN}get quarter(){return this.isValid?Math.ceil(this.c.month/3):NaN}get month(){return this.isValid?this.c.month:NaN}get day(){return this.isValid?this.c.day:NaN}get hour(){return this.isValid?this.c.hour:NaN}get minute(){return this.isValid?this.c.minute:NaN}get second(){return this.isValid?this.c.second:NaN}get millisecond(){return this.isValid?this.c.millisecond:NaN}get weekYear(){return this.isValid?oo(this).weekYear:NaN}get weekNumber(){return this.isValid?oo(this).weekNumber:NaN}get weekday(){return this.isValid?oo(this).weekday:NaN}get isWeekend(){return this.isValid&&this.loc.getWeekendDays().includes(this.weekday)}get localWeekday(){return this.isValid?ao(this).weekday:NaN}get localWeekNumber(){return this.isValid?ao(this).weekNumber:NaN}get localWeekYear(){return this.isValid?ao(this).weekYear:NaN}get ordinal(){return this.isValid?ln(this.c).ordinal:NaN}get monthShort(){return this.isValid?Gt.months("short",{locObj:this.loc})[this.month-1]:null}get monthLong(){return this.isValid?Gt.months("long",{locObj:this.loc})[this.month-1]:null}get weekdayShort(){return this.isValid?Gt.weekdays("short",{locObj:this.loc})[this.weekday-1]:null}get weekdayLong(){return this.isValid?Gt.weekdays("long",{locObj:this.loc})[this.weekday-1]:null}get offset(){return this.isValid?+this.o:NaN}get offsetNameShort(){return this.isValid?this.zone.offsetName(this.ts,{format:"short",locale:this.locale}):null}get offsetNameLong(){return this.isValid?this.zone.offsetName(this.ts,{format:"long",locale:this.locale}):null}get isOffsetFixed(){return this.isValid?this.zone.isUniversal:null}get isInDST(){return this.isOffsetFixed?!1:this.offset>this.set({month:1,day:1}).offset||this.offset>this.set({month:5}).offset}getPossibleOffsets(){if(!this.isValid||this.isOffsetFixed)return[this];let t=864e5,e=6e4,i=es(this.c),n=this.zone.offset(i-t),r=this.zone.offset(i+t),o=this.zone.offset(i-n*e),a=this.zone.offset(i-r*e);if(o===a)return[this];let l=i-o*e,c=i-a*e,h=un(l,o),u=un(c,a);return h.hour===u.hour&&h.minute===u.minute&&h.second===u.second&&h.millisecond===u.millisecond?[ve(this,{ts:l}),ve(this,{ts:c})]:[this]}get isInLeapYear(){return Me(this.year)}get daysInMonth(){return ns(this.year,this.month)}get daysInYear(){return this.isValid?ce(this.year):NaN}get weeksInWeekYear(){return this.isValid?ke(this.weekYear):NaN}get weeksInLocalWeekYear(){return this.isValid?ke(this.localWeekYear,this.loc.getMinDaysInFirstWeek(),this.loc.getStartOfWeek()):NaN}resolvedLocaleOptions(t={}){let{locale:e,numberingSystem:i,calendar:n}=X.create(this.loc.clone(t),t).resolvedOptions(this);return{locale:e,numberingSystem:i,outputCalendar:n}}toUTC(t=0,e={}){return this.setZone(G.instance(t),e)}toLocal(){return this.setZone(z.defaultZone)}setZone(t,{keepLocalTime:e=!1,keepCalendarTime:i=!1}={}){if(t=Et(t,z.defaultZone),t.equals(this.zone))return this;if(t.isValid){let n=this.ts;if(e||i){let r=t.offset(this.ts),o=this.toObject();[n]=fn(o,r,t)}return ve(this,{ts:n,zone:t})}else return v.invalid(hn(t))}reconfigure({locale:t,numberingSystem:e,outputCalendar:i}={}){let n=this.loc.clone({locale:t,numberingSystem:e,outputCalendar:i});return ve(this,{loc:n})}setLocale(t){return this.reconfigure({locale:t})}set(t){if(!this.isValid)return this;let e=rs(t,pc),{minDaysInFirstWeek:i,startOfWeek:n}=$r(e,this.loc),r=!D(e.weekYear)||!D(e.weekNumber)||!D(e.weekday),o=!D(e.ordinal),a=!D(e.year),l=!D(e.month)||!D(e.day),c=a||l,h=e.weekYear||e.weekNumber;if((c||o)&&h)throw new vt("Can't mix weekYear/weekNumber units with year/month/day or ordinals");if(l&&o)throw new vt("Can't mix ordinal dates with month/day");let u;r?u=Hr({...oi(this.c,i,n),...e},i,n):D(e.ordinal)?(u={...this.toObject(),...e},D(e.day)&&(u.day=Math.min(ns(u.year,u.month),u.day))):u=Br({...ln(this.c),...e});let[d,f]=fn(u,this.o,this.zone);return ve(this,{ts:d,o:f})}plus(t){if(!this.isValid)return this;let e=C.fromDurationLike(t);return ve(this,mc(this,e))}minus(t){if(!this.isValid)return this;let e=C.fromDurationLike(t).negate();return ve(this,mc(this,e))}startOf(t,{useLocaleWeeks:e=!1}={}){if(!this.isValid)return this;let i={},n=C.normalizeUnit(t);switch(n){case"years":i.month=1;case"quarters":case"months":i.day=1;case"weeks":case"days":i.hour=0;case"hours":i.minute=0;case"minutes":i.second=0;case"seconds":i.millisecond=0;break;case"milliseconds":break}if(n==="weeks")if(e){let r=this.loc.getStartOfWeek(),{weekday:o}=this;othis.valueOf(),a=o?this:t,l=o?t:this,c=rc(a,l,r,n);return o?c.negate():c}diffNow(t="milliseconds",e={}){return this.diff(v.now(),t,e)}until(t){return this.isValid?U.fromDateTimes(this,t):this}hasSame(t,e,i){if(!this.isValid)return!1;let n=t.valueOf(),r=this.setZone(t.zone,{keepLocalTime:!0});return r.startOf(e,i)<=n&&n<=r.endOf(e,i)}equals(t){return this.isValid&&t.isValid&&this.valueOf()===t.valueOf()&&this.zone.equals(t.zone)&&this.loc.equals(t.loc)}toRelative(t={}){if(!this.isValid)return null;let e=t.base||v.fromObject({},{zone:this.zone}),i=t.padding?thise.valueOf(),Math.min)}static max(...t){if(!t.every(v.isDateTime))throw new st("max requires all arguments be DateTimes");return Yr(t,e=>e.valueOf(),Math.max)}static fromFormatExplain(t,e,i={}){let{locale:n=null,numberingSystem:r=null}=i,o=N.fromOpts({locale:n,numberingSystem:r,defaultToEN:!0});return io(o,t,e)}static fromStringExplain(t,e,i={}){return v.fromFormatExplain(t,e,i)}static get DATE_SHORT(){return ae}static get DATE_MED(){return zs}static get DATE_MED_WITH_WEEKDAY(){return Tr}static get DATE_FULL(){return Vs}static get DATE_HUGE(){return Hs}static get TIME_SIMPLE(){return Bs}static get TIME_WITH_SECONDS(){return $s}static get TIME_WITH_SHORT_OFFSET(){return js}static get TIME_WITH_LONG_OFFSET(){return Us}static get TIME_24_SIMPLE(){return Ys}static get TIME_24_WITH_SECONDS(){return Zs}static get TIME_24_WITH_SHORT_OFFSET(){return qs}static get TIME_24_WITH_LONG_OFFSET(){return Gs}static get DATETIME_SHORT(){return Xs}static get DATETIME_SHORT_WITH_SECONDS(){return Ks}static get DATETIME_MED(){return Js}static get DATETIME_MED_WITH_SECONDS(){return Qs}static get DATETIME_MED_WITH_WEEKDAY(){return vr}static get DATETIME_FULL(){return ti}static get DATETIME_FULL_WITH_SECONDS(){return ei}static get DATETIME_HUGE(){return si}static get DATETIME_HUGE_WITH_SECONDS(){return ii}};function fs(s){if(v.isDateTime(s))return s;if(s&&s.valueOf&&zt(s.valueOf()))return v.fromJSDate(s);if(s&&typeof s=="object")return v.fromObject(s);throw new st(`Unknown datetime argument: ${s}, of type ${typeof s}`)}var rg={datetime:v.DATETIME_MED_WITH_SECONDS,millisecond:"h:mm:ss.SSS a",second:v.TIME_WITH_SECONDS,minute:v.TIME_SIMPLE,hour:{hour:"numeric"},day:{day:"numeric",month:"short"},week:"DD",month:{month:"short",year:"numeric"},quarter:"'Q'q - yyyy",year:{year:"numeric"}};kr._date.override({_id:"luxon",_create:function(s){return v.fromMillis(s,this.options)},init(s){this.options.locale||(this.options.locale=s.locale)},formats:function(){return rg},parse:function(s,t){let e=this.options,i=typeof s;return s===null||i==="undefined"?null:(i==="number"?s=this._create(s):i==="string"?typeof t=="string"?s=v.fromFormat(s,t,e):s=v.fromISO(s,e):s instanceof Date?s=v.fromJSDate(s,e):i==="object"&&!(s instanceof v)&&(s=v.fromObject(s,e)),s.isValid?s.valueOf():null)},format:function(s,t){let e=this._create(s);return typeof t=="string"?e.toFormat(t):e.toLocaleString(t)},add:function(s,t,e){let i={};return i[e]=t,this._create(s).plus(i).valueOf()},diff:function(s,t,e){return this._create(s).diff(this._create(t)).as(e).valueOf()},startOf:function(s,t,e){if(t==="isoWeek"){e=Math.trunc(Math.min(Math.max(0,e),6));let i=this._create(s);return i.minus({days:(i.weekday-e+7)%7}).startOf("day").valueOf()}return t?this._create(s).startOf(t).valueOf():s},endOf:function(s,t){return this._create(s).endOf(t).valueOf()}});function mn({cachedData:s,options:t,type:e}){return{init:function(){this.initChart(),this.$wire.$on("updateChartData",({data:i})=>{mn=this.getChart(),mn.data=i,mn.update("resize")}),Alpine.effect(()=>{Alpine.store("theme"),this.$nextTick(()=>{this.getChart()&&(this.getChart().destroy(),this.initChart())})}),window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",()=>{Alpine.store("theme")==="system"&&this.$nextTick(()=>{this.getChart().destroy(),this.initChart()})})},initChart:function(i=null){var o,a,l,c,h,u,d;Rt.defaults.animation.duration=0,Rt.defaults.backgroundColor=getComputedStyle(this.$refs.backgroundColorElement).color;let n=getComputedStyle(this.$refs.borderColorElement).color;Rt.defaults.borderColor=n,Rt.defaults.color=getComputedStyle(this.$refs.textColorElement).color,Rt.defaults.font.family=getComputedStyle(this.$el).fontFamily,Rt.defaults.plugins.legend.labels.boxWidth=12,Rt.defaults.plugins.legend.position="bottom";let r=getComputedStyle(this.$refs.gridColorElement).color;return t??(t={}),t.borderWidth??(t.borderWidth=2),t.pointBackgroundColor??(t.pointBackgroundColor=n),t.pointHitRadius??(t.pointHitRadius=4),t.pointRadius??(t.pointRadius=2),t.scales??(t.scales={}),(o=t.scales).x??(o.x={}),(a=t.scales.x).grid??(a.grid={}),t.scales.x.grid.color=r,(l=t.scales.x.grid).display??(l.display=!1),(c=t.scales.x.grid).drawBorder??(c.drawBorder=!1),(h=t.scales).y??(h.y={}),(u=t.scales.y).grid??(u.grid={}),t.scales.y.grid.color=r,(d=t.scales.y.grid).drawBorder??(d.drawBorder=!1),new Rt(this.$refs.canvas,{type:e,data:i??s,options:t,plugins:window.filamentChartJsPlugins??[]})},getChart:function(){return Rt.getChart(this.$refs.canvas)}}}export{mn as default}; +`):s}function uf(s,t){let{element:e,datasetIndex:i,index:n}=t,r=s.getDatasetMeta(i).controller,{label:o,value:a}=r.getLabelAndValue(n);return{chart:s,label:o,parsed:r.getParsed(n),raw:s.data.datasets[i].data[n],formattedValue:a,dataset:r.getDataset(),dataIndex:n,datasetIndex:i,element:e}}function Va(s,t){let e=s.chart.ctx,{body:i,footer:n,title:r}=s,{boxWidth:o,boxHeight:a}=t,l=st(t.bodyFont),c=st(t.titleFont),h=st(t.footerFont),u=r.length,d=n.length,f=i.length,m=at(t.padding),g=m.height,p=0,y=i.reduce((w,x)=>w+x.before.length+x.lines.length+x.after.length,0);if(y+=s.beforeBody.length+s.afterBody.length,u&&(g+=u*c.lineHeight+(u-1)*t.titleSpacing+t.titleMarginBottom),y){let w=t.displayColors?Math.max(a,l.lineHeight):l.lineHeight;g+=f*w+(y-f)*l.lineHeight+(y-1)*t.bodySpacing}d&&(g+=t.footerMarginTop+d*h.lineHeight+(d-1)*t.footerSpacing);let b=0,_=function(w){p=Math.max(p,e.measureText(w).width+b)};return e.save(),e.font=c.string,H(s.title,_),e.font=l.string,H(s.beforeBody.concat(s.afterBody),_),b=t.displayColors?o+2+t.boxPadding:0,H(i,w=>{H(w.before,_),H(w.lines,_),H(w.after,_)}),b=0,e.font=h.string,H(s.footer,_),e.restore(),p+=m.width,{width:p,height:g}}function df(s,t){let{y:e,height:i}=t;return es.height-i/2?"bottom":"center"}function ff(s,t,e,i){let{x:n,width:r}=i,o=e.caretSize+e.caretPadding;if(s==="left"&&n+r+o>t.width||s==="right"&&n-r-o<0)return!0}function mf(s,t,e,i){let{x:n,width:r}=e,{width:o,chartArea:{left:a,right:l}}=s,c="center";return i==="center"?c=n<=(a+l)/2?"left":"right":n<=r/2?c="left":n>=o-r/2&&(c="right"),ff(c,s,t,e)&&(c="center"),c}function Ha(s,t,e){let i=e.yAlign||t.yAlign||df(s,e);return{xAlign:e.xAlign||t.xAlign||mf(s,t,e,i),yAlign:i}}function gf(s,t){let{x:e,width:i}=s;return t==="right"?e-=i:t==="center"&&(e-=i/2),e}function pf(s,t,e){let{y:i,height:n}=s;return t==="top"?i+=e:t==="bottom"?i-=n+e:i-=n/2,i}function Ba(s,t,e,i){let{caretSize:n,caretPadding:r,cornerRadius:o}=s,{xAlign:a,yAlign:l}=e,c=n+r,{topLeft:h,topRight:u,bottomLeft:d,bottomRight:f}=se(o),m=gf(t,a),g=pf(t,l,c);return l==="center"?a==="left"?m+=c:a==="right"&&(m-=c):a==="left"?m-=Math.max(h,d)+n:a==="right"&&(m+=Math.max(u,f)+n),{x:it(m,0,i.width-t.width),y:it(g,0,i.height-t.height)}}function Hi(s,t,e){let i=at(e.padding);return t==="center"?s.x+s.width/2:t==="right"?s.x+s.width-i.right:s.x+i.left}function $a(s){return Pt([],Ut(s))}function yf(s,t,e){return $t(s,{tooltip:t,tooltipItems:e,type:"tooltip"})}function ja(s,t){let e=t&&t.dataset&&t.dataset.tooltip&&t.dataset.tooltip.callbacks;return e?s.override(e):s}var Rs=class extends yt{constructor(t){super(),this.opacity=0,this._active=[],this._eventPosition=void 0,this._size=void 0,this._cachedAnimations=void 0,this._tooltipItems=[],this.$animations=void 0,this.$context=void 0,this.chart=t.chart||t._chart,this._chart=this.chart,this.options=t.options,this.dataPoints=void 0,this.title=void 0,this.beforeBody=void 0,this.body=void 0,this.afterBody=void 0,this.footer=void 0,this.xAlign=void 0,this.yAlign=void 0,this.x=void 0,this.y=void 0,this.height=void 0,this.width=void 0,this.caretX=void 0,this.caretY=void 0,this.labelColors=void 0,this.labelPointStyles=void 0,this.labelTextColors=void 0}initialize(t){this.options=t,this._cachedAnimations=void 0,this.$context=void 0}_resolveAnimations(){let t=this._cachedAnimations;if(t)return t;let e=this.chart,i=this.options.setContext(this.getContext()),n=i.enabled&&e.options.animation&&i.animations,r=new ji(this.chart,n);return n._cacheable&&(this._cachedAnimations=Object.freeze(r)),r}getContext(){return this.$context||(this.$context=yf(this.chart.getContext(),this,this._tooltipItems))}getTitle(t,e){let{callbacks:i}=e,n=i.beforeTitle.apply(this,[t]),r=i.title.apply(this,[t]),o=i.afterTitle.apply(this,[t]),a=[];return a=Pt(a,Ut(n)),a=Pt(a,Ut(r)),a=Pt(a,Ut(o)),a}getBeforeBody(t,e){return $a(e.callbacks.beforeBody.apply(this,[t]))}getBody(t,e){let{callbacks:i}=e,n=[];return H(t,r=>{let o={before:[],lines:[],after:[]},a=ja(i,r);Pt(o.before,Ut(a.beforeLabel.call(this,r))),Pt(o.lines,a.label.call(this,r)),Pt(o.after,Ut(a.afterLabel.call(this,r))),n.push(o)}),n}getAfterBody(t,e){return $a(e.callbacks.afterBody.apply(this,[t]))}getFooter(t,e){let{callbacks:i}=e,n=i.beforeFooter.apply(this,[t]),r=i.footer.apply(this,[t]),o=i.afterFooter.apply(this,[t]),a=[];return a=Pt(a,Ut(n)),a=Pt(a,Ut(r)),a=Pt(a,Ut(o)),a}_createItems(t){let e=this._active,i=this.chart.data,n=[],r=[],o=[],a=[],l,c;for(l=0,c=e.length;lt.filter(h,u,d,i))),t.itemSort&&(a=a.sort((h,u)=>t.itemSort(h,u,i))),H(a,h=>{let u=ja(t.callbacks,h);n.push(u.labelColor.call(this,h)),r.push(u.labelPointStyle.call(this,h)),o.push(u.labelTextColor.call(this,h))}),this.labelColors=n,this.labelPointStyles=r,this.labelTextColors=o,this.dataPoints=a,a}update(t,e){let i=this.options.setContext(this.getContext()),n=this._active,r,o=[];if(!n.length)this.opacity!==0&&(r={opacity:0});else{let a=Is[i.position].call(this,n,this._eventPosition);o=this._createItems(i),this.title=this.getTitle(o,i),this.beforeBody=this.getBeforeBody(o,i),this.body=this.getBody(o,i),this.afterBody=this.getAfterBody(o,i),this.footer=this.getFooter(o,i);let l=this._size=Va(this,i),c=Object.assign({},a,l),h=Ha(this.chart,i,c),u=Ba(i,c,h,this.chart);this.xAlign=h.xAlign,this.yAlign=h.yAlign,r={opacity:1,x:u.x,y:u.y,width:l.width,height:l.height,caretX:a.x,caretY:a.y}}this._tooltipItems=o,this.$context=void 0,r&&this._resolveAnimations().update(this,r),t&&i.external&&i.external.call(this,{chart:this.chart,tooltip:this,replay:e})}drawCaret(t,e,i,n){let r=this.getCaretPosition(t,i,n);e.lineTo(r.x1,r.y1),e.lineTo(r.x2,r.y2),e.lineTo(r.x3,r.y3)}getCaretPosition(t,e,i){let{xAlign:n,yAlign:r}=this,{caretSize:o,cornerRadius:a}=i,{topLeft:l,topRight:c,bottomLeft:h,bottomRight:u}=se(a),{x:d,y:f}=t,{width:m,height:g}=e,p,y,b,_,w,x;return r==="center"?(w=f+g/2,n==="left"?(p=d,y=p-o,_=w+o,x=w-o):(p=d+m,y=p+o,_=w-o,x=w+o),b=p):(n==="left"?y=d+Math.max(l,h)+o:n==="right"?y=d+m-Math.max(c,u)-o:y=this.caretX,r==="top"?(_=f,w=_-o,p=y-o,b=y+o):(_=f+g,w=_+o,p=y+o,b=y-o),x=_),{x1:p,x2:y,x3:b,y1:_,y2:w,y3:x}}drawTitle(t,e,i){let n=this.title,r=n.length,o,a,l;if(r){let c=ye(i.rtl,this.x,this.width);for(t.x=Hi(this,i.titleAlign,i),e.textAlign=c.textAlign(i.titleAlign),e.textBaseline="middle",o=st(i.titleFont),a=i.titleSpacing,e.fillStyle=i.titleColor,e.font=o.string,l=0;l_!==0)?(t.beginPath(),t.fillStyle=r.multiKeyBackground,We(t,{x:p,y:g,w:c,h:l,radius:b}),t.fill(),t.stroke(),t.fillStyle=o.backgroundColor,t.beginPath(),We(t,{x:y,y:g+1,w:c-2,h:l-2,radius:b}),t.fill()):(t.fillStyle=r.multiKeyBackground,t.fillRect(p,g,c,l),t.strokeRect(p,g,c,l),t.fillStyle=o.backgroundColor,t.fillRect(y,g+1,c-2,l-2))}t.fillStyle=this.labelTextColors[i]}drawBody(t,e,i){let{body:n}=this,{bodySpacing:r,bodyAlign:o,displayColors:a,boxHeight:l,boxWidth:c,boxPadding:h}=i,u=st(i.bodyFont),d=u.lineHeight,f=0,m=ye(i.rtl,this.x,this.width),g=function(O){e.fillText(O,m.x(t.x+f),t.y+d/2),t.y+=d+r},p=m.textAlign(o),y,b,_,w,x,S,k;for(e.textAlign=o,e.textBaseline="middle",e.font=u.string,t.x=Hi(this,p,i),e.fillStyle=i.bodyColor,H(this.beforeBody,g),f=a&&p!=="right"?o==="center"?c/2+h:c+2+h:0,w=0,S=n.length;w0&&e.stroke()}_updateAnimationTarget(t){let e=this.chart,i=this.$animations,n=i&&i.x,r=i&&i.y;if(n||r){let o=Is[t.position].call(this,this._active,this._eventPosition);if(!o)return;let a=this._size=Va(this,t),l=Object.assign({},o,this._size),c=Ha(e,t,l),h=Ba(t,l,c,e);(n._to!==h.x||r._to!==h.y)&&(this.xAlign=c.xAlign,this.yAlign=c.yAlign,this.width=a.width,this.height=a.height,this.caretX=o.x,this.caretY=o.y,this._resolveAnimations().update(this,h))}}_willRender(){return!!this.opacity}draw(t){let e=this.options.setContext(this.getContext()),i=this.opacity;if(!i)return;this._updateAnimationTarget(e);let n={width:this.width,height:this.height},r={x:this.x,y:this.y};i=Math.abs(i)<.001?0:i;let o=at(e.padding),a=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;e.enabled&&a&&(t.save(),t.globalAlpha=i,this.drawBackground(r,t,n,e),er(t,e.textDirection),r.y+=o.top,this.drawTitle(r,t,e),this.drawBody(r,t,e),this.drawFooter(r,t,e),sr(t,e.textDirection),t.restore())}getActiveElements(){return this._active||[]}setActiveElements(t,e){let i=this._active,n=t.map(({datasetIndex:a,index:l})=>{let c=this.chart.getDatasetMeta(a);if(!c)throw new Error("Cannot find a dataset at index "+a);return{datasetIndex:a,element:c.data[l],index:l}}),r=!ws(i,n),o=this._positionChanged(n,e);(r||o)&&(this._active=n,this._eventPosition=e,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(t,e,i=!0){if(e&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;let n=this.options,r=this._active||[],o=this._getActiveElements(t,r,e,i),a=this._positionChanged(o,t),l=e||!ws(o,r)||a;return l&&(this._active=o,(n.enabled||n.external)&&(this._eventPosition={x:t.x,y:t.y},this.update(!0,e))),l}_getActiveElements(t,e,i,n){let r=this.options;if(t.type==="mouseout")return[];if(!n)return e;let o=this.chart.getElementsAtEventForMode(t,r.mode,r,i);return r.reverse&&o.reverse(),o}_positionChanged(t,e){let{caretX:i,caretY:n,options:r}=this,o=Is[r.position].call(this,t,e);return o!==!1&&(i!==o.x||n!==o.y)}};Rs.positioners=Is;var bf={id:"tooltip",_element:Rs,positioners:Is,afterInit(s,t,e){e&&(s.tooltip=new Rs({chart:s,options:e}))},beforeUpdate(s,t,e){s.tooltip&&s.tooltip.initialize(e)},reset(s,t,e){s.tooltip&&s.tooltip.initialize(e)},afterDraw(s){let t=s.tooltip;if(t&&t._willRender()){let e={tooltip:t};if(s.notifyPlugins("beforeTooltipDraw",e)===!1)return;t.draw(s.ctx),s.notifyPlugins("afterTooltipDraw",e)}},afterEvent(s,t){if(s.tooltip){let e=t.replay;s.tooltip.handleEvent(t.event,e,t.inChartArea)&&(t.changed=!0)}},defaults:{enabled:!0,external:null,position:"average",backgroundColor:"rgba(0,0,0,0.8)",titleColor:"#fff",titleFont:{weight:"bold"},titleSpacing:2,titleMarginBottom:6,titleAlign:"left",bodyColor:"#fff",bodySpacing:2,bodyFont:{},bodyAlign:"left",footerColor:"#fff",footerSpacing:2,footerMarginTop:6,footerFont:{weight:"bold"},footerAlign:"left",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(s,t)=>t.bodyFont.size,boxWidth:(s,t)=>t.bodyFont.size,multiKeyBackground:"#fff",displayColors:!0,boxPadding:0,borderColor:"rgba(0,0,0,0)",borderWidth:0,animation:{duration:400,easing:"easeOutQuart"},animations:{numbers:{type:"number",properties:["x","y","width","height","caretX","caretY"]},opacity:{easing:"linear",duration:200}},callbacks:{beforeTitle:At,title(s){if(s.length>0){let t=s[0],e=t.chart.data.labels,i=e?e.length:0;if(this&&this.options&&this.options.mode==="dataset")return t.dataset.label||"";if(t.label)return t.label;if(i>0&&t.dataIndexs!=="filter"&&s!=="itemSort"&&s!=="external",_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]},xf=Object.freeze({__proto__:null,Decimation:Nd,Filler:nf,Legend:af,SubTitle:hf,Title:cf,Tooltip:bf}),_f=(s,t,e,i)=>(typeof t=="string"?(e=s.push(t)-1,i.unshift({index:e,label:t})):isNaN(t)&&(e=null),e);function wf(s,t,e,i){let n=s.indexOf(t);if(n===-1)return _f(s,t,e,i);let r=s.lastIndexOf(t);return n!==r?e:n}var Sf=(s,t)=>s===null?null:it(Math.round(s),0,t),Je=class extends Yt{constructor(t){super(t),this._startValue=void 0,this._valueRange=0,this._addedLabels=[]}init(t){let e=this._addedLabels;if(e.length){let i=this.getLabels();for(let{index:n,label:r}of e)i[n]===r&&i.splice(n,1);this._addedLabels=[]}super.init(t)}parse(t,e){if(N(t))return null;let i=this.getLabels();return e=isFinite(e)&&i[e]===t?e:wf(i,t,C(e,t),this._addedLabels),Sf(e,i.length-1)}determineDataLimits(){let{minDefined:t,maxDefined:e}=this.getUserBounds(),{min:i,max:n}=this.getMinMax(!0);this.options.bounds==="ticks"&&(t||(i=0),e||(n=this.getLabels().length-1)),this.min=i,this.max=n}buildTicks(){let t=this.min,e=this.max,i=this.options.offset,n=[],r=this.getLabels();r=t===0&&e===r.length-1?r:r.slice(t,e+1),this._valueRange=Math.max(r.length-(i?0:1),1),this._startValue=this.min-(i?.5:0);for(let o=t;o<=e;o++)n.push({value:o});return n}getLabelForValue(t){let e=this.getLabels();return t>=0&&te.length-1?null:this.getPixelForValue(e[t].value)}getValueForPixel(t){return Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange)}getBasePixel(){return this.bottom}};Je.id="category";Je.defaults={ticks:{callback:Je.prototype.getLabelForValue}};function kf(s,t){let e=[],{bounds:n,step:r,min:o,max:a,precision:l,count:c,maxTicks:h,maxDigits:u,includeBounds:d}=s,f=r||1,m=h-1,{min:g,max:p}=t,y=!N(o),b=!N(a),_=!N(c),w=(p-g)/(u+1),x=In((p-g)/m/f)*f,S,k,O,v;if(x<1e-14&&!y&&!b)return[{value:g},{value:p}];v=Math.ceil(p/x)-Math.floor(g/x),v>m&&(x=In(v*x/m/f)*f),N(l)||(S=Math.pow(10,l),x=Math.ceil(x*S)/S),n==="ticks"?(k=Math.floor(g/x)*x,O=Math.ceil(p/x)*x):(k=g,O=p),y&&b&&r&&Ao((a-o)/r,x/1e3)?(v=Math.round(Math.min((a-o)/x,h)),x=(a-o)/v,k=o,O=a):_?(k=y?o:k,O=b?a:O,v=c-1,x=(O-k)/v):(v=(O-k)/x,Re(v,Math.round(v),x/1e3)?v=Math.round(v):v=Math.ceil(v));let F=Math.max(An(x),An(k));S=Math.pow(10,N(l)?F:l),k=Math.round(k*S)/S,O=Math.round(O*S)/S;let W=0;for(y&&(d&&k!==o?(e.push({value:o}),kn=e?n:l,a=l=>r=i?r:l;if(t){let l=Tt(n),c=Tt(r);l<0&&c<0?a(0):l>0&&c>0&&o(0)}if(n===r){let l=1;(r>=Number.MAX_SAFE_INTEGER||n<=Number.MIN_SAFE_INTEGER)&&(l=Math.abs(r*.05)),a(r+l),t||o(n-l)}this.min=n,this.max=r}getTickLimit(){let t=this.options.ticks,{maxTicksLimit:e,stepSize:i}=t,n;return i?(n=Math.ceil(this.max/i)-Math.floor(this.min/i)+1,n>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${i} would result generating up to ${n} ticks. Limiting to 1000.`),n=1e3)):(n=this.computeTickLimit(),e=e||11),e&&(n=Math.min(e,n)),n}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){let t=this.options,e=t.ticks,i=this.getTickLimit();i=Math.max(2,i);let n={maxTicks:i,bounds:t.bounds,min:t.min,max:t.max,precision:e.precision,step:e.stepSize,count:e.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:e.minRotation||0,includeBounds:e.includeBounds!==!1},r=this._range||this,o=kf(n,r);return t.bounds==="ticks"&&Fn(o,this,"value"),t.reverse?(o.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),o}configure(){let t=this.ticks,e=this.min,i=this.max;if(super.configure(),this.options.offset&&t.length){let n=(i-e)/Math.max(t.length-1,1)/2;e-=n,i+=n}this._startValue=e,this._endValue=i,this._valueRange=i-e}getLabelForValue(t){return Ve(t,this.chart.options.locale,this.options.ticks.format)}},Ns=class extends Qe{determineDataLimits(){let{min:t,max:e}=this.getMinMax(!0);this.min=K(t)?t:0,this.max=K(e)?e:1,this.handleTickRangeOptions()}computeTickLimit(){let t=this.isHorizontal(),e=t?this.width:this.height,i=wt(this.options.ticks.minRotation),n=(t?Math.sin(i):Math.cos(i))||.001,r=this._resolveTickFontOptions(0);return Math.ceil(e/Math.min(40,r.lineHeight/n))}getPixelForValue(t){return t===null?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getValueForPixel(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange}};Ns.id="linear";Ns.defaults={ticks:{callback:Xi.formatters.numeric}};function Ya(s){return s/Math.pow(10,Math.floor(gt(s)))===1}function Mf(s,t){let e=Math.floor(gt(t.max)),i=Math.ceil(t.max/Math.pow(10,e)),n=[],r=mt(s.min,Math.pow(10,Math.floor(gt(t.min)))),o=Math.floor(gt(r)),a=Math.floor(r/Math.pow(10,o)),l=o<0?Math.pow(10,Math.abs(o)):1;do n.push({value:r,major:Ya(r)}),++a,a===10&&(a=1,++o,l=o>=0?1:l),r=Math.round(a*Math.pow(10,o)*l)/l;while(o0?i:null}determineDataLimits(){let{min:t,max:e}=this.getMinMax(!0);this.min=K(t)?Math.max(0,t):null,this.max=K(e)?Math.max(0,e):null,this.options.beginAtZero&&(this._zero=!0),this.handleTickRangeOptions()}handleTickRangeOptions(){let{minDefined:t,maxDefined:e}=this.getUserBounds(),i=this.min,n=this.max,r=l=>i=t?i:l,o=l=>n=e?n:l,a=(l,c)=>Math.pow(10,Math.floor(gt(l))+c);i===n&&(i<=0?(r(1),o(10)):(r(a(i,-1)),o(a(n,1)))),i<=0&&r(a(n,-1)),n<=0&&o(a(i,1)),this._zero&&this.min!==this._suggestedMin&&i===a(this.min,0)&&r(a(i,-1)),this.min=i,this.max=n}buildTicks(){let t=this.options,e={min:this._userMin,max:this._userMax},i=Mf(e,this);return t.bounds==="ticks"&&Fn(i,this,"value"),t.reverse?(i.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),i}getLabelForValue(t){return t===void 0?"0":Ve(t,this.chart.options.locale,this.options.ticks.format)}configure(){let t=this.min;super.configure(),this._startValue=gt(t),this._valueRange=gt(this.max)-gt(t)}getPixelForValue(t){return(t===void 0||t===0)&&(t=this.min),t===null||isNaN(t)?NaN:this.getPixelForDecimal(t===this.min?0:(gt(t)-this._startValue)/this._valueRange)}getValueForPixel(t){let e=this.getDecimalForPixel(t);return Math.pow(10,this._startValue+e*this._valueRange)}};Ws.id="logarithmic";Ws.defaults={ticks:{callback:Xi.formatters.logarithmic,major:{enabled:!0}}};function vr(s){let t=s.ticks;if(t.display&&s.display){let e=at(t.backdropPadding);return C(t.font&&t.font.size,L.font.size)+e.height}return 0}function Tf(s,t,e){return e=$(e)?e:[e],{w:Yo(s,t.string,e),h:e.length*t.lineHeight}}function Za(s,t,e,i,n){return s===i||s===n?{start:t-e/2,end:t+e/2}:sn?{start:t-e,end:t}:{start:t,end:t+e}}function vf(s){let t={l:s.left+s._padding.left,r:s.right-s._padding.right,t:s.top+s._padding.top,b:s.bottom-s._padding.bottom},e=Object.assign({},t),i=[],n=[],r=s._pointLabels.length,o=s.options.pointLabels,a=o.centerPointLabels?Y/r:0;for(let l=0;lt.r&&(a=(i.end-t.r)/r,s.r=Math.max(s.r,t.r+a)),n.startt.b&&(l=(n.end-t.b)/o,s.b=Math.max(s.b,t.b+l))}function Df(s,t,e){let i=[],n=s._pointLabels.length,r=s.options,o=vr(r)/2,a=s.drawingArea,l=r.pointLabels.centerPointLabels?Y/n:0;for(let c=0;c270||e<90)&&(s-=t),s}function Ff(s,t){let{ctx:e,options:{pointLabels:i}}=s;for(let n=t-1;n>=0;n--){let r=i.setContext(s.getPointLabelContext(n)),o=st(r.font),{x:a,y:l,textAlign:c,left:h,top:u,right:d,bottom:f}=s._pointLabelItems[n],{backdropColor:m}=r;if(!N(m)){let g=se(r.borderRadius),p=at(r.backdropPadding);e.fillStyle=m;let y=h-p.left,b=u-p.top,_=d-h+p.width,w=f-u+p.height;Object.values(g).some(x=>x!==0)?(e.beginPath(),We(e,{x:y,y:b,w:_,h:w,radius:g}),e.fill()):e.fillRect(y,b,_,w)}ee(e,s._pointLabels[n],a,l+o.lineHeight/2,o,{color:r.color,textAlign:c,textBaseline:"middle"})}}function pl(s,t,e,i){let{ctx:n}=s;if(e)n.arc(s.xCenter,s.yCenter,t,0,B);else{let r=s.getPointPosition(0,t);n.moveTo(r.x,r.y);for(let o=1;o{let n=j(this.options.pointLabels.callback,[e,i],this);return n||n===0?n:""}).filter((e,i)=>this.chart.getDataVisibility(i))}fit(){let t=this.options;t.display&&t.pointLabels.display?vf(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(t,e,i,n){this.xCenter+=Math.floor((t-e)/2),this.yCenter+=Math.floor((i-n)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(t,e,i,n))}getIndexAngle(t){let e=B/(this._pointLabels.length||1),i=this.options.startAngle||0;return ht(t*e+wt(i))}getDistanceFromCenterForValue(t){if(N(t))return NaN;let e=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-t)*e:(t-this.min)*e}getValueForDistanceFromCenter(t){if(N(t))return NaN;let e=t/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-e:this.min+e}getPointLabelContext(t){let e=this._pointLabels||[];if(t>=0&&t{if(h!==0){a=this.getDistanceFromCenterForValue(c.value);let u=n.setContext(this.getContext(h-1));Af(this,u,a,r)}}),i.display){for(t.save(),o=r-1;o>=0;o--){let c=i.setContext(this.getPointLabelContext(o)),{color:h,lineWidth:u}=c;!u||!h||(t.lineWidth=u,t.strokeStyle=h,t.setLineDash(c.borderDash),t.lineDashOffset=c.borderDashOffset,a=this.getDistanceFromCenterForValue(e.ticks.reverse?this.min:this.max),l=this.getPointPosition(o,a),t.beginPath(),t.moveTo(this.xCenter,this.yCenter),t.lineTo(l.x,l.y),t.stroke())}t.restore()}}drawBorder(){}drawLabels(){let t=this.ctx,e=this.options,i=e.ticks;if(!i.display)return;let n=this.getIndexAngle(0),r,o;t.save(),t.translate(this.xCenter,this.yCenter),t.rotate(n),t.textAlign="center",t.textBaseline="middle",this.ticks.forEach((a,l)=>{if(l===0&&!e.reverse)return;let c=i.setContext(this.getContext(l)),h=st(c.font);if(r=this.getDistanceFromCenterForValue(this.ticks[l].value),c.showLabelBackdrop){t.font=h.string,o=t.measureText(a.label).width,t.fillStyle=c.backdropColor;let u=at(c.backdropPadding);t.fillRect(-o/2-u.left,-r-h.size/2-u.top,o+u.width,h.size+u.height)}ee(t,a.label,0,-r,h,{color:c.color})}),t.restore()}drawTitle(){}};_e.id="radialLinear";_e.defaults={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,lineWidth:1,borderDash:[],borderDashOffset:0},grid:{circular:!1},startAngle:0,ticks:{showLabelBackdrop:!0,callback:Xi.formatters.numeric},pointLabels:{backdropColor:void 0,backdropPadding:2,display:!0,font:{size:10},callback(s){return s},padding:5,centerPointLabels:!1}};_e.defaultRoutes={"angleLines.color":"borderColor","pointLabels.color":"color","ticks.color":"color"};_e.descriptors={angleLines:{_fallback:"grid"}};var Ki={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},ut=Object.keys(Ki);function Pf(s,t){return s-t}function qa(s,t){if(N(t))return null;let e=s._adapter,{parser:i,round:n,isoWeekday:r}=s._parseOpts,o=t;return typeof i=="function"&&(o=i(o)),K(o)||(o=typeof i=="string"?e.parse(o,i):e.parse(o)),o===null?null:(n&&(o=n==="week"&&(pe(r)||r===!0)?e.startOf(o,"isoWeek",r):e.startOf(o,n)),+o)}function Ga(s,t,e,i){let n=ut.length;for(let r=ut.indexOf(s);r=ut.indexOf(e);r--){let o=ut[r];if(Ki[o].common&&s._adapter.diff(n,i,o)>=t-1)return o}return ut[e?ut.indexOf(e):0]}function Nf(s){for(let t=ut.indexOf(s)+1,e=ut.length;t=t?e[i]:e[n];s[r]=!0}}function Wf(s,t,e,i){let n=s._adapter,r=+n.startOf(t[0].value,i),o=t[t.length-1].value,a,l;for(a=r;a<=o;a=+n.add(a,1,i))l=e[a],l>=0&&(t[l].major=!0);return t}function Ka(s,t,e){let i=[],n={},r=t.length,o,a;for(o=0;o+t.value))}initOffsets(t){let e=0,i=0,n,r;this.options.offset&&t.length&&(n=this.getDecimalForValue(t[0]),t.length===1?e=1-n:e=(this.getDecimalForValue(t[1])-n)/2,r=this.getDecimalForValue(t[t.length-1]),t.length===1?i=r:i=(r-this.getDecimalForValue(t[t.length-2]))/2);let o=t.length<3?.5:.25;e=it(e,0,o),i=it(i,0,o),this._offsets={start:e,end:i,factor:1/(e+1+i)}}_generate(){let t=this._adapter,e=this.min,i=this.max,n=this.options,r=n.time,o=r.unit||Ga(r.minUnit,e,i,this._getLabelCapacity(e)),a=C(r.stepSize,1),l=o==="week"?r.isoWeekday:!1,c=pe(l)||l===!0,h={},u=e,d,f;if(c&&(u=+t.startOf(u,"isoWeek",l)),u=+t.startOf(u,c?"day":o),t.diff(i,e,o)>1e5*a)throw new Error(e+" and "+i+" are too far apart with stepSize of "+a+" "+o);let m=n.ticks.source==="data"&&this.getDataTimestamps();for(d=u,f=0;dg-p).map(g=>+g)}getLabelForValue(t){let e=this._adapter,i=this.options.time;return i.tooltipFormat?e.format(t,i.tooltipFormat):e.format(t,i.displayFormats.datetime)}_tickFormatFunction(t,e,i,n){let r=this.options,o=r.time.displayFormats,a=this._unit,l=this._majorUnit,c=a&&o[a],h=l&&o[l],u=i[e],d=l&&h&&u&&u.major,f=this._adapter.format(t,n||(d?h:c)),m=r.ticks.callback;return m?j(m,[f,e,i],this):f}generateTickLabels(t){let e,i,n;for(e=0,i=t.length;e0?a:1}getDataTimestamps(){let t=this._cache.data||[],e,i;if(t.length)return t;let n=this.getMatchingVisibleMetas();if(this._normalized&&n.length)return this._cache.data=n[0].controller.getAllParsedValues(this);for(e=0,i=n.length;e=s[i].pos&&t<=s[n].pos&&({lo:i,hi:n}=Ft(s,"pos",t)),{pos:r,time:a}=s[i],{pos:o,time:l}=s[n]):(t>=s[i].time&&t<=s[n].time&&({lo:i,hi:n}=Ft(s,"time",t)),{time:r,pos:a}=s[i],{time:o,pos:l}=s[n]);let c=o-r;return c?a+(l-a)*(t-r)/c:a}var zs=class extends we{constructor(t){super(t),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){let t=this._getTimestampsForTable(),e=this._table=this.buildLookupTable(t);this._minPos=Bi(e,this.min),this._tableRange=Bi(e,this.max)-this._minPos,super.initOffsets(t)}buildLookupTable(t){let{min:e,max:i}=this,n=[],r=[],o,a,l,c,h;for(o=0,a=t.length;o=e&&c<=i&&n.push(c);if(n.length<2)return[{time:e,pos:0},{time:i,pos:1}];for(o=0,a=n.length;o=0?m:1e3+m,(d-f)/(60*1e3)}equals(t){return t.type==="iana"&&t.name===this.name}get isValid(){return this.valid}};var bl={};function jf(s,t={}){let e=JSON.stringify([s,t]),i=bl[e];return i||(i=new Intl.ListFormat(s,t),bl[e]=i),i}var Fr={};function Ar(s,t={}){let e=JSON.stringify([s,t]),i=Fr[e];return i||(i=new Intl.DateTimeFormat(s,t),Fr[e]=i),i}var Lr={};function Uf(s,t={}){let e=JSON.stringify([s,t]),i=Lr[e];return i||(i=new Intl.NumberFormat(s,t),Lr[e]=i),i}var Pr={};function Yf(s,t={}){let{base:e,...i}=t,n=JSON.stringify([s,i]),r=Pr[n];return r||(r=new Intl.RelativeTimeFormat(s,t),Pr[n]=r),r}var oi=null;function Zf(){return oi||(oi=new Intl.DateTimeFormat().resolvedOptions().locale,oi)}var xl={};function qf(s){let t=xl[s];if(!t){let e=new Intl.Locale(s);t="getWeekInfo"in e?e.getWeekInfo():e.weekInfo,xl[s]=t}return t}function Gf(s){let t=s.indexOf("-x-");t!==-1&&(s=s.substring(0,t));let e=s.indexOf("-u-");if(e===-1)return[s];{let i,n;try{i=Ar(s).resolvedOptions(),n=s}catch{let l=s.substring(0,e);i=Ar(l).resolvedOptions(),n=l}let{numberingSystem:r,calendar:o}=i;return[n,r,o]}}function Xf(s,t,e){return(e||t)&&(s.includes("-u-")||(s+="-u"),e&&(s+=`-ca-${e}`),t&&(s+=`-nu-${t}`)),s}function Kf(s){let t=[];for(let e=1;e<=12;e++){let i=T.utc(2009,e,1);t.push(s(i))}return t}function Jf(s){let t=[];for(let e=1;e<=7;e++){let i=T.utc(2016,11,13+e);t.push(s(i))}return t}function on(s,t,e,i){let n=s.listingMode();return n==="error"?null:n==="en"?e(t):i(t)}function Qf(s){return s.numberingSystem&&s.numberingSystem!=="latn"?!1:s.numberingSystem==="latn"||!s.locale||s.locale.startsWith("en")||new Intl.DateTimeFormat(s.intl).resolvedOptions().numberingSystem==="latn"}var Rr=class{constructor(t,e,i){this.padTo=i.padTo||0,this.floor=i.floor||!1;let{padTo:n,floor:r,...o}=i;if(!e||Object.keys(o).length>0){let a={useGrouping:!1,...i};i.padTo>0&&(a.minimumIntegerDigits=i.padTo),this.inf=Uf(t,a)}}format(t){if(this.inf){let e=this.floor?Math.floor(t):t;return this.inf.format(e)}else{let e=this.floor?Math.floor(t):ss(t,3);return q(e,this.padTo)}}},Nr=class{constructor(t,e,i){this.opts=i,this.originalZone=void 0;let n;if(this.opts.timeZone)this.dt=t;else if(t.zone.type==="fixed"){let o=-1*(t.offset/60),a=o>=0?`Etc/GMT+${o}`:`Etc/GMT${o}`;t.offset!==0&&nt.create(a).valid?(n=a,this.dt=t):(n="UTC",this.dt=t.offset===0?t:t.setZone("UTC").plus({minutes:t.offset}),this.originalZone=t.zone)}else t.zone.type==="system"?this.dt=t:t.zone.type==="iana"?(this.dt=t,n=t.zone.name):(n="UTC",this.dt=t.setZone("UTC").plus({minutes:t.offset}),this.originalZone=t.zone);let r={...this.opts};r.timeZone=r.timeZone||n,this.dtf=Ar(e,r)}format(){return this.originalZone?this.formatToParts().map(({value:t})=>t).join(""):this.dtf.format(this.dt.toJSDate())}formatToParts(){let t=this.dtf.formatToParts(this.dt.toJSDate());return this.originalZone?t.map(e=>{if(e.type==="timeZoneName"){let i=this.originalZone.offsetName(this.dt.ts,{locale:this.dt.locale,format:this.opts.timeZoneName});return{...e,value:i}}else return e}):t}resolvedOptions(){return this.dtf.resolvedOptions()}},Wr=class{constructor(t,e,i){this.opts={style:"long",...i},!e&&an()&&(this.rtf=Yf(t,i))}format(t,e){return this.rtf?this.rtf.format(t,e):_l(e,t,this.opts.numeric,this.opts.style!=="long")}formatToParts(t,e){return this.rtf?this.rtf.formatToParts(t,e):[]}},tm={firstDay:1,minimalDays:4,weekend:[6,7]},P=class{static fromOpts(t){return P.create(t.locale,t.numberingSystem,t.outputCalendar,t.weekSettings,t.defaultToEN)}static create(t,e,i,n,r=!1){let o=t||z.defaultLocale,a=o||(r?"en-US":Zf()),l=e||z.defaultNumberingSystem,c=i||z.defaultOutputCalendar,h=ai(n)||z.defaultWeekSettings;return new P(a,l,c,h,o)}static resetCache(){oi=null,Fr={},Lr={},Pr={}}static fromObject({locale:t,numberingSystem:e,outputCalendar:i,weekSettings:n}={}){return P.create(t,e,i,n)}constructor(t,e,i,n,r){let[o,a,l]=Gf(t);this.locale=o,this.numberingSystem=e||a||null,this.outputCalendar=i||l||null,this.weekSettings=n,this.intl=Xf(this.locale,this.numberingSystem,this.outputCalendar),this.weekdaysCache={format:{},standalone:{}},this.monthsCache={format:{},standalone:{}},this.meridiemCache=null,this.eraCache={},this.specifiedLocale=r,this.fastNumbersCached=null}get fastNumbers(){return this.fastNumbersCached==null&&(this.fastNumbersCached=Qf(this)),this.fastNumbersCached}listingMode(){let t=this.isEnglish(),e=(this.numberingSystem===null||this.numberingSystem==="latn")&&(this.outputCalendar===null||this.outputCalendar==="gregory");return t&&e?"en":"intl"}clone(t){return!t||Object.getOwnPropertyNames(t).length===0?this:P.create(t.locale||this.specifiedLocale,t.numberingSystem||this.numberingSystem,t.outputCalendar||this.outputCalendar,ai(t.weekSettings)||this.weekSettings,t.defaultToEN||!1)}redefaultToEN(t={}){return this.clone({...t,defaultToEN:!0})}redefaultToSystem(t={}){return this.clone({...t,defaultToEN:!1})}months(t,e=!1){return on(this,t,zr,()=>{let i=e?{month:t,day:"numeric"}:{month:t},n=e?"format":"standalone";return this.monthsCache[n][t]||(this.monthsCache[n][t]=Kf(r=>this.extract(r,i,"month"))),this.monthsCache[n][t]})}weekdays(t,e=!1){return on(this,t,Vr,()=>{let i=e?{weekday:t,year:"numeric",month:"long",day:"numeric"}:{weekday:t},n=e?"format":"standalone";return this.weekdaysCache[n][t]||(this.weekdaysCache[n][t]=Jf(r=>this.extract(r,i,"weekday"))),this.weekdaysCache[n][t]})}meridiems(){return on(this,void 0,()=>Hr,()=>{if(!this.meridiemCache){let t={hour:"numeric",hourCycle:"h12"};this.meridiemCache=[T.utc(2016,11,13,9),T.utc(2016,11,13,19)].map(e=>this.extract(e,t,"dayperiod"))}return this.meridiemCache})}eras(t){return on(this,t,Br,()=>{let e={era:t};return this.eraCache[t]||(this.eraCache[t]=[T.utc(-40,1,1),T.utc(2017,1,1)].map(i=>this.extract(i,e,"era"))),this.eraCache[t]})}extract(t,e,i){let n=this.dtFormatter(t,e),r=n.formatToParts(),o=r.find(a=>a.type.toLowerCase()===i);return o?o.value:null}numberFormatter(t={}){return new Rr(this.intl,t.forceSimple||this.fastNumbers,t)}dtFormatter(t,e={}){return new Nr(t,this.intl,e)}relFormatter(t={}){return new Wr(this.intl,this.isEnglish(),t)}listFormatter(t={}){return jf(this.intl,t)}isEnglish(){return this.locale==="en"||this.locale.toLowerCase()==="en-us"||new Intl.DateTimeFormat(this.intl).resolvedOptions().locale.startsWith("en-us")}getWeekSettings(){return this.weekSettings?this.weekSettings:ln()?qf(this.locale):tm}getStartOfWeek(){return this.getWeekSettings().firstDay}getMinDaysInFirstWeek(){return this.getWeekSettings().minimalDays}getWeekendDays(){return this.getWeekSettings().weekend}equals(t){return this.locale===t.locale&&this.numberingSystem===t.numberingSystem&&this.outputCalendar===t.outputCalendar}toString(){return`Locale(${this.locale}, ${this.numberingSystem}, ${this.outputCalendar})`}};var jr=null,G=class extends dt{static get utcInstance(){return jr===null&&(jr=new G(0)),jr}static instance(t){return t===0?G.utcInstance:new G(t)}static parseSpecifier(t){if(t){let e=t.match(/^utc(?:([+-]\d{1,2})(?::(\d{2}))?)?$/i);if(e)return new G(Se(e[1],e[2]))}return null}constructor(t){super(),this.fixed=t}get type(){return"fixed"}get name(){return this.fixed===0?"UTC":`UTC${le(this.fixed,"narrow")}`}get ianaName(){return this.fixed===0?"Etc/UTC":`Etc/GMT${le(-this.fixed,"narrow")}`}offsetName(){return this.name}formatOffset(t,e){return le(this.fixed,e)}get isUniversal(){return!0}offset(){return this.fixed}equals(t){return t.type==="fixed"&&t.fixed===this.fixed}get isValid(){return!0}};var is=class extends dt{constructor(t){super(),this.zoneName=t}get type(){return"invalid"}get name(){return this.zoneName}get isUniversal(){return!1}offsetName(){return null}formatOffset(){return""}offset(){return NaN}equals(){return!1}get isValid(){return!1}};function Et(s,t){let e;if(D(s)||s===null)return t;if(s instanceof dt)return s;if(wl(s)){let i=s.toLowerCase();return i==="default"?t:i==="local"||i==="system"?zt.instance:i==="utc"||i==="gmt"?G.utcInstance:G.parseSpecifier(i)||nt.create(s)}else return Ct(s)?G.instance(s):typeof s=="object"&&"offset"in s&&typeof s.offset=="function"?s:new is(s)}var Ur={arab:"[\u0660-\u0669]",arabext:"[\u06F0-\u06F9]",bali:"[\u1B50-\u1B59]",beng:"[\u09E6-\u09EF]",deva:"[\u0966-\u096F]",fullwide:"[\uFF10-\uFF19]",gujr:"[\u0AE6-\u0AEF]",hanidec:"[\u3007|\u4E00|\u4E8C|\u4E09|\u56DB|\u4E94|\u516D|\u4E03|\u516B|\u4E5D]",khmr:"[\u17E0-\u17E9]",knda:"[\u0CE6-\u0CEF]",laoo:"[\u0ED0-\u0ED9]",limb:"[\u1946-\u194F]",mlym:"[\u0D66-\u0D6F]",mong:"[\u1810-\u1819]",mymr:"[\u1040-\u1049]",orya:"[\u0B66-\u0B6F]",tamldec:"[\u0BE6-\u0BEF]",telu:"[\u0C66-\u0C6F]",thai:"[\u0E50-\u0E59]",tibt:"[\u0F20-\u0F29]",latn:"\\d"},Sl={arab:[1632,1641],arabext:[1776,1785],bali:[6992,7001],beng:[2534,2543],deva:[2406,2415],fullwide:[65296,65303],gujr:[2790,2799],khmr:[6112,6121],knda:[3302,3311],laoo:[3792,3801],limb:[6470,6479],mlym:[3430,3439],mong:[6160,6169],mymr:[4160,4169],orya:[2918,2927],tamldec:[3046,3055],telu:[3174,3183],thai:[3664,3673],tibt:[3872,3881]},em=Ur.hanidec.replace(/[\[|\]]/g,"").split("");function kl(s){let t=parseInt(s,10);if(isNaN(t)){t="";for(let e=0;e=r&&i<=o&&(t+=i-r)}}return parseInt(t,10)}else return t}var ns={};function Ml(){ns={}}function St({numberingSystem:s},t=""){let e=s||"latn";return ns[e]||(ns[e]={}),ns[e][t]||(ns[e][t]=new RegExp(`${Ur[e]}${t}`)),ns[e][t]}var Tl=()=>Date.now(),vl="system",Ol=null,Dl=null,El=null,Cl=60,Il,Fl=null,z=class{static get now(){return Tl}static set now(t){Tl=t}static set defaultZone(t){vl=t}static get defaultZone(){return Et(vl,zt.instance)}static get defaultLocale(){return Ol}static set defaultLocale(t){Ol=t}static get defaultNumberingSystem(){return Dl}static set defaultNumberingSystem(t){Dl=t}static get defaultOutputCalendar(){return El}static set defaultOutputCalendar(t){El=t}static get defaultWeekSettings(){return Fl}static set defaultWeekSettings(t){Fl=ai(t)}static get twoDigitCutoffYear(){return Cl}static set twoDigitCutoffYear(t){Cl=t%100}static get throwOnInvalid(){return Il}static set throwOnInvalid(t){Il=t}static resetCaches(){P.resetCache(),nt.resetCache(),T.resetCache(),Ml()}};var rt=class{constructor(t,e){this.reason=t,this.explanation=e}toMessage(){return this.explanation?`${this.reason}: ${this.explanation}`:this.reason}};var Al=[0,31,59,90,120,151,181,212,243,273,304,334],Ll=[0,31,60,91,121,152,182,213,244,274,305,335];function kt(s,t){return new rt("unit out of range",`you specified ${t} (of type ${typeof t}) as a ${s}, which is invalid`)}function cn(s,t,e){let i=new Date(Date.UTC(s,t-1,e));s<100&&s>=0&&i.setUTCFullYear(i.getUTCFullYear()-1900);let n=i.getUTCDay();return n===0?7:n}function Pl(s,t,e){return e+(Me(s)?Ll:Al)[t-1]}function Rl(s,t){let e=Me(s)?Ll:Al,i=e.findIndex(r=>rke(i,t,e)?(c=i+1,l=1):c=i,{weekYear:c,weekNumber:l,weekday:a,...hi(s)}}function Yr(s,t=4,e=1){let{weekYear:i,weekNumber:n,weekday:r}=s,o=hn(cn(i,1,t),e),a=ce(i),l=n*7+r-o-7+t,c;l<1?(c=i-1,l+=ce(c)):l>a?(c=i+1,l-=ce(i)):c=i;let{month:h,day:u}=Rl(c,l);return{year:c,month:h,day:u,...hi(s)}}function un(s){let{year:t,month:e,day:i}=s,n=Pl(t,e,i);return{year:t,ordinal:n,...hi(s)}}function Zr(s){let{year:t,ordinal:e}=s,{month:i,day:n}=Rl(t,e);return{year:t,month:i,day:n,...hi(s)}}function qr(s,t){if(!D(s.localWeekday)||!D(s.localWeekNumber)||!D(s.localWeekYear)){if(!D(s.weekday)||!D(s.weekNumber)||!D(s.weekYear))throw new vt("Cannot mix locale-based week fields with ISO-based week fields");return D(s.localWeekday)||(s.weekday=s.localWeekday),D(s.localWeekNumber)||(s.weekNumber=s.localWeekNumber),D(s.localWeekYear)||(s.weekYear=s.localWeekYear),delete s.localWeekday,delete s.localWeekNumber,delete s.localWeekYear,{minDaysInFirstWeek:t.getMinDaysInFirstWeek(),startOfWeek:t.getStartOfWeek()}}else return{minDaysInFirstWeek:4,startOfWeek:1}}function Nl(s,t=4,e=1){let i=ci(s.weekYear),n=xt(s.weekNumber,1,ke(s.weekYear,t,e)),r=xt(s.weekday,1,7);return i?n?r?!1:kt("weekday",s.weekday):kt("week",s.weekNumber):kt("weekYear",s.weekYear)}function Wl(s){let t=ci(s.year),e=xt(s.ordinal,1,ce(s.year));return t?e?!1:kt("ordinal",s.ordinal):kt("year",s.year)}function Gr(s){let t=ci(s.year),e=xt(s.month,1,12),i=xt(s.day,1,rs(s.year,s.month));return t?e?i?!1:kt("day",s.day):kt("month",s.month):kt("year",s.year)}function Xr(s){let{hour:t,minute:e,second:i,millisecond:n}=s,r=xt(t,0,23)||t===24&&e===0&&i===0&&n===0,o=xt(e,0,59),a=xt(i,0,59),l=xt(n,0,999);return r?o?a?l?!1:kt("millisecond",n):kt("second",i):kt("minute",e):kt("hour",t)}function D(s){return typeof s>"u"}function Ct(s){return typeof s=="number"}function ci(s){return typeof s=="number"&&s%1===0}function wl(s){return typeof s=="string"}function Vl(s){return Object.prototype.toString.call(s)==="[object Date]"}function an(){try{return typeof Intl<"u"&&!!Intl.RelativeTimeFormat}catch{return!1}}function ln(){try{return typeof Intl<"u"&&!!Intl.Locale&&("weekInfo"in Intl.Locale.prototype||"getWeekInfo"in Intl.Locale.prototype)}catch{return!1}}function Hl(s){return Array.isArray(s)?s:[s]}function Kr(s,t,e){if(s.length!==0)return s.reduce((i,n)=>{let r=[t(n),n];return i&&e(i[0],r[0])===i[0]?i:r},null)[1]}function Bl(s,t){return t.reduce((e,i)=>(e[i]=s[i],e),{})}function he(s,t){return Object.prototype.hasOwnProperty.call(s,t)}function ai(s){if(s==null)return null;if(typeof s!="object")throw new J("Week settings must be an object");if(!xt(s.firstDay,1,7)||!xt(s.minimalDays,1,7)||!Array.isArray(s.weekend)||s.weekend.some(t=>!xt(t,1,7)))throw new J("Invalid week settings");return{firstDay:s.firstDay,minimalDays:s.minimalDays,weekend:Array.from(s.weekend)}}function xt(s,t,e){return ci(s)&&s>=t&&s<=e}function sm(s,t){return s-t*Math.floor(s/t)}function q(s,t=2){let e=s<0,i;return e?i="-"+(""+-s).padStart(t,"0"):i=(""+s).padStart(t,"0"),i}function qt(s){if(!(D(s)||s===null||s===""))return parseInt(s,10)}function ue(s){if(!(D(s)||s===null||s===""))return parseFloat(s)}function ui(s){if(!(D(s)||s===null||s==="")){let t=parseFloat("0."+s)*1e3;return Math.floor(t)}}function ss(s,t,e=!1){let i=10**t;return(e?Math.trunc:Math.round)(s*i)/i}function Me(s){return s%4===0&&(s%100!==0||s%400===0)}function ce(s){return Me(s)?366:365}function rs(s,t){let e=sm(t-1,12)+1,i=s+(t-e)/12;return e===2?Me(i)?29:28:[31,null,31,30,31,30,31,31,30,31,30,31][e-1]}function es(s){let t=Date.UTC(s.year,s.month-1,s.day,s.hour,s.minute,s.second,s.millisecond);return s.year<100&&s.year>=0&&(t=new Date(t),t.setUTCFullYear(s.year,s.month-1,s.day)),+t}function zl(s,t,e){return-hn(cn(s,1,t),e)+t-1}function ke(s,t=4,e=1){let i=zl(s,t,e),n=zl(s+1,t,e);return(ce(s)-i+n)/7}function di(s){return s>99?s:s>z.twoDigitCutoffYear?1900+s:2e3+s}function sn(s,t,e,i=null){let n=new Date(s),r={hourCycle:"h23",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"};i&&(r.timeZone=i);let o={timeZoneName:t,...r},a=new Intl.DateTimeFormat(e,o).formatToParts(n).find(l=>l.type.toLowerCase()==="timezonename");return a?a.value:null}function Se(s,t){let e=parseInt(s,10);Number.isNaN(e)&&(e=0);let i=parseInt(t,10)||0,n=e<0||Object.is(e,-0)?-i:i;return e*60+n}function Jr(s){let t=Number(s);if(typeof s=="boolean"||s===""||Number.isNaN(t))throw new J(`Invalid unit value ${s}`);return t}function os(s,t){let e={};for(let i in s)if(he(s,i)){let n=s[i];if(n==null)continue;e[t(i)]=Jr(n)}return e}function le(s,t){let e=Math.trunc(Math.abs(s/60)),i=Math.trunc(Math.abs(s%60)),n=s>=0?"+":"-";switch(t){case"short":return`${n}${q(e,2)}:${q(i,2)}`;case"narrow":return`${n}${e}${i>0?`:${i}`:""}`;case"techie":return`${n}${q(e,2)}${q(i,2)}`;default:throw new RangeError(`Value format ${t} is out of range for property format`)}}function hi(s){return Bl(s,["hour","minute","second","millisecond"])}var im=["January","February","March","April","May","June","July","August","September","October","November","December"],Qr=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],nm=["J","F","M","A","M","J","J","A","S","O","N","D"];function zr(s){switch(s){case"narrow":return[...nm];case"short":return[...Qr];case"long":return[...im];case"numeric":return["1","2","3","4","5","6","7","8","9","10","11","12"];case"2-digit":return["01","02","03","04","05","06","07","08","09","10","11","12"];default:return null}}var to=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],eo=["Mon","Tue","Wed","Thu","Fri","Sat","Sun"],rm=["M","T","W","T","F","S","S"];function Vr(s){switch(s){case"narrow":return[...rm];case"short":return[...eo];case"long":return[...to];case"numeric":return["1","2","3","4","5","6","7"];default:return null}}var Hr=["AM","PM"],om=["Before Christ","Anno Domini"],am=["BC","AD"],lm=["B","A"];function Br(s){switch(s){case"narrow":return[...lm];case"short":return[...am];case"long":return[...om];default:return null}}function $l(s){return Hr[s.hour<12?0:1]}function jl(s,t){return Vr(t)[s.weekday-1]}function Ul(s,t){return zr(t)[s.month-1]}function Yl(s,t){return Br(t)[s.year<0?0:1]}function _l(s,t,e="always",i=!1){let n={years:["year","yr."],quarters:["quarter","qtr."],months:["month","mo."],weeks:["week","wk."],days:["day","day","days"],hours:["hour","hr."],minutes:["minute","min."],seconds:["second","sec."]},r=["hours","minutes","seconds"].indexOf(s)===-1;if(e==="auto"&&r){let u=s==="days";switch(t){case 1:return u?"tomorrow":`next ${n[s][0]}`;case-1:return u?"yesterday":`last ${n[s][0]}`;case 0:return u?"today":`this ${n[s][0]}`;default:}}let o=Object.is(t,-0)||t<0,a=Math.abs(t),l=a===1,c=n[s],h=i?l?c[1]:c[2]||c[1]:l?n[s][0]:s;return o?`${a} ${h} ago`:`in ${a} ${h}`}function Zl(s,t){let e="";for(let i of s)i.literal?e+=i.val:e+=t(i.val);return e}var cm={D:ae,DD:Hs,DDD:Bs,DDDD:$s,t:js,tt:Us,ttt:Ys,tttt:Zs,T:qs,TT:Gs,TTT:Xs,TTTT:Ks,f:Js,ff:ti,fff:si,ffff:ni,F:Qs,FF:ei,FFF:ii,FFFF:ri},X=class{static create(t,e={}){return new X(t,e)}static parseFormat(t){let e=null,i="",n=!1,r=[];for(let o=0;o0&&r.push({literal:n||/^\s+$/.test(i),val:i}),e=null,i="",n=!n):n||a===e?i+=a:(i.length>0&&r.push({literal:/^\s+$/.test(i),val:i}),i=a,e=a)}return i.length>0&&r.push({literal:n||/^\s+$/.test(i),val:i}),r}static macroTokenToFormatOpts(t){return cm[t]}constructor(t,e){this.opts=e,this.loc=t,this.systemLoc=null}formatWithSystemDefault(t,e){return this.systemLoc===null&&(this.systemLoc=this.loc.redefaultToSystem()),this.systemLoc.dtFormatter(t,{...this.opts,...e}).format()}dtFormatter(t,e={}){return this.loc.dtFormatter(t,{...this.opts,...e})}formatDateTime(t,e){return this.dtFormatter(t,e).format()}formatDateTimeParts(t,e){return this.dtFormatter(t,e).formatToParts()}formatInterval(t,e){return this.dtFormatter(t.start,e).dtf.formatRange(t.start.toJSDate(),t.end.toJSDate())}resolvedOptions(t,e){return this.dtFormatter(t,e).resolvedOptions()}num(t,e=0){if(this.opts.forceSimple)return q(t,e);let i={...this.opts};return e>0&&(i.padTo=e),this.loc.numberFormatter(i).format(t)}formatDateTimeFromString(t,e){let i=this.loc.listingMode()==="en",n=this.loc.outputCalendar&&this.loc.outputCalendar!=="gregory",r=(f,m)=>this.loc.extract(t,f,m),o=f=>t.isOffsetFixed&&t.offset===0&&f.allowZ?"Z":t.isValid?t.zone.formatOffset(t.ts,f.format):"",a=()=>i?$l(t):r({hour:"numeric",hourCycle:"h12"},"dayperiod"),l=(f,m)=>i?Ul(t,f):r(m?{month:f}:{month:f,day:"numeric"},"month"),c=(f,m)=>i?jl(t,f):r(m?{weekday:f}:{weekday:f,month:"long",day:"numeric"},"weekday"),h=f=>{let m=X.macroTokenToFormatOpts(f);return m?this.formatWithSystemDefault(t,m):f},u=f=>i?Yl(t,f):r({era:f},"era"),d=f=>{switch(f){case"S":return this.num(t.millisecond);case"u":case"SSS":return this.num(t.millisecond,3);case"s":return this.num(t.second);case"ss":return this.num(t.second,2);case"uu":return this.num(Math.floor(t.millisecond/10),2);case"uuu":return this.num(Math.floor(t.millisecond/100));case"m":return this.num(t.minute);case"mm":return this.num(t.minute,2);case"h":return this.num(t.hour%12===0?12:t.hour%12);case"hh":return this.num(t.hour%12===0?12:t.hour%12,2);case"H":return this.num(t.hour);case"HH":return this.num(t.hour,2);case"Z":return o({format:"narrow",allowZ:this.opts.allowZ});case"ZZ":return o({format:"short",allowZ:this.opts.allowZ});case"ZZZ":return o({format:"techie",allowZ:this.opts.allowZ});case"ZZZZ":return t.zone.offsetName(t.ts,{format:"short",locale:this.loc.locale});case"ZZZZZ":return t.zone.offsetName(t.ts,{format:"long",locale:this.loc.locale});case"z":return t.zoneName;case"a":return a();case"d":return n?r({day:"numeric"},"day"):this.num(t.day);case"dd":return n?r({day:"2-digit"},"day"):this.num(t.day,2);case"c":return this.num(t.weekday);case"ccc":return c("short",!0);case"cccc":return c("long",!0);case"ccccc":return c("narrow",!0);case"E":return this.num(t.weekday);case"EEE":return c("short",!1);case"EEEE":return c("long",!1);case"EEEEE":return c("narrow",!1);case"L":return n?r({month:"numeric",day:"numeric"},"month"):this.num(t.month);case"LL":return n?r({month:"2-digit",day:"numeric"},"month"):this.num(t.month,2);case"LLL":return l("short",!0);case"LLLL":return l("long",!0);case"LLLLL":return l("narrow",!0);case"M":return n?r({month:"numeric"},"month"):this.num(t.month);case"MM":return n?r({month:"2-digit"},"month"):this.num(t.month,2);case"MMM":return l("short",!1);case"MMMM":return l("long",!1);case"MMMMM":return l("narrow",!1);case"y":return n?r({year:"numeric"},"year"):this.num(t.year);case"yy":return n?r({year:"2-digit"},"year"):this.num(t.year.toString().slice(-2),2);case"yyyy":return n?r({year:"numeric"},"year"):this.num(t.year,4);case"yyyyyy":return n?r({year:"numeric"},"year"):this.num(t.year,6);case"G":return u("short");case"GG":return u("long");case"GGGGG":return u("narrow");case"kk":return this.num(t.weekYear.toString().slice(-2),2);case"kkkk":return this.num(t.weekYear,4);case"W":return this.num(t.weekNumber);case"WW":return this.num(t.weekNumber,2);case"n":return this.num(t.localWeekNumber);case"nn":return this.num(t.localWeekNumber,2);case"ii":return this.num(t.localWeekYear.toString().slice(-2),2);case"iiii":return this.num(t.localWeekYear,4);case"o":return this.num(t.ordinal);case"ooo":return this.num(t.ordinal,3);case"q":return this.num(t.quarter);case"qq":return this.num(t.quarter,2);case"X":return this.num(Math.floor(t.ts/1e3));case"x":return this.num(t.ts);default:return h(f)}};return Zl(X.parseFormat(e),d)}formatDurationFromString(t,e){let i=l=>{switch(l[0]){case"S":return"millisecond";case"s":return"second";case"m":return"minute";case"h":return"hour";case"d":return"day";case"w":return"week";case"M":return"month";case"y":return"year";default:return null}},n=l=>c=>{let h=i(c);return h?this.num(l.get(h),c.length):c},r=X.parseFormat(e),o=r.reduce((l,{literal:c,val:h})=>c?l:l.concat(h),[]),a=t.shiftTo(...o.map(i).filter(l=>l));return Zl(r,n(a))}};var Gl=/[A-Za-z_+-]{1,256}(?::?\/[A-Za-z0-9_+-]{1,256}(?:\/[A-Za-z0-9_+-]{1,256})?)?/;function ls(...s){let t=s.reduce((e,i)=>e+i.source,"");return RegExp(`^${t}$`)}function cs(...s){return t=>s.reduce(([e,i,n],r)=>{let[o,a,l]=r(t,n);return[{...e,...o},a||i,l]},[{},null,1]).slice(0,2)}function hs(s,...t){if(s==null)return[null,null];for(let[e,i]of t){let n=e.exec(s);if(n)return i(n)}return[null,null]}function Xl(...s){return(t,e)=>{let i={},n;for(n=0;nf!==void 0&&(m||f&&h)?-f:f;return[{years:d(ue(e)),months:d(ue(i)),weeks:d(ue(n)),days:d(ue(r)),hours:d(ue(o)),minutes:d(ue(a)),seconds:d(ue(l),l==="-0"),milliseconds:d(ui(c),u)}]}var Sm={GMT:0,EDT:-4*60,EST:-5*60,CDT:-5*60,CST:-6*60,MDT:-6*60,MST:-7*60,PDT:-7*60,PST:-8*60};function no(s,t,e,i,n,r,o){let a={year:t.length===2?di(qt(t)):qt(t),month:Qr.indexOf(e)+1,day:qt(i),hour:qt(n),minute:qt(r)};return o&&(a.second=qt(o)),s&&(a.weekday=s.length>3?to.indexOf(s)+1:eo.indexOf(s)+1),a}var km=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\d\d)(\d\d)))$/;function Mm(s){let[,t,e,i,n,r,o,a,l,c,h,u]=s,d=no(t,n,i,e,r,o,a),f;return l?f=Sm[l]:c?f=0:f=Se(h,u),[d,new G(f)]}function Tm(s){return s.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").trim()}var vm=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d\d):(\d\d):(\d\d) GMT$/,Om=/^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\d\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d\d) (\d\d):(\d\d):(\d\d) GMT$/,Dm=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \d|\d\d) (\d\d):(\d\d):(\d\d) (\d{4})$/;function ql(s){let[,t,e,i,n,r,o,a]=s;return[no(t,n,i,e,r,o,a),G.utcInstance]}function Em(s){let[,t,e,i,n,r,o,a]=s;return[no(t,a,e,i,n,r,o),G.utcInstance]}var Cm=ls(um,io),Im=ls(dm,io),Fm=ls(fm,io),Am=ls(Jl),tc=cs(bm,us,fi,mi),Lm=cs(mm,us,fi,mi),Pm=cs(gm,us,fi,mi),Rm=cs(us,fi,mi);function ec(s){return hs(s,[Cm,tc],[Im,Lm],[Fm,Pm],[Am,Rm])}function sc(s){return hs(Tm(s),[km,Mm])}function ic(s){return hs(s,[vm,ql],[Om,ql],[Dm,Em])}function nc(s){return hs(s,[_m,wm])}var Nm=cs(us);function rc(s){return hs(s,[xm,Nm])}var Wm=ls(pm,ym),zm=ls(Ql),Vm=cs(us,fi,mi);function oc(s){return hs(s,[Wm,tc],[zm,Vm])}var ac="Invalid Duration",cc={weeks:{days:7,hours:7*24,minutes:7*24*60,seconds:7*24*60*60,milliseconds:7*24*60*60*1e3},days:{hours:24,minutes:24*60,seconds:24*60*60,milliseconds:24*60*60*1e3},hours:{minutes:60,seconds:60*60,milliseconds:60*60*1e3},minutes:{seconds:60,milliseconds:60*1e3},seconds:{milliseconds:1e3}},Hm={years:{quarters:4,months:12,weeks:52,days:365,hours:365*24,minutes:365*24*60,seconds:365*24*60*60,milliseconds:365*24*60*60*1e3},quarters:{months:3,weeks:13,days:91,hours:91*24,minutes:91*24*60,seconds:91*24*60*60,milliseconds:91*24*60*60*1e3},months:{weeks:4,days:30,hours:30*24,minutes:30*24*60,seconds:30*24*60*60,milliseconds:30*24*60*60*1e3},...cc},Mt=146097/400,ds=146097/4800,Bm={years:{quarters:4,months:12,weeks:Mt/7,days:Mt,hours:Mt*24,minutes:Mt*24*60,seconds:Mt*24*60*60,milliseconds:Mt*24*60*60*1e3},quarters:{months:3,weeks:Mt/28,days:Mt/4,hours:Mt*24/4,minutes:Mt*24*60/4,seconds:Mt*24*60*60/4,milliseconds:Mt*24*60*60*1e3/4},months:{weeks:ds/7,days:ds,hours:ds*24,minutes:ds*24*60,seconds:ds*24*60*60,milliseconds:ds*24*60*60*1e3},...cc},Te=["years","quarters","months","weeks","days","hours","minutes","seconds","milliseconds"],$m=Te.slice(0).reverse();function de(s,t,e=!1){let i={values:e?t.values:{...s.values,...t.values||{}},loc:s.loc.clone(t.loc),conversionAccuracy:t.conversionAccuracy||s.conversionAccuracy,matrix:t.matrix||s.matrix};return new I(i)}function hc(s,t){let e=t.milliseconds??0;for(let i of $m.slice(1))t[i]&&(e+=t[i]*s[i].milliseconds);return e}function lc(s,t){let e=hc(s,t)<0?-1:1;Te.reduceRight((i,n)=>{if(D(t[n]))return i;if(i){let r=t[i]*e,o=s[n][i],a=Math.floor(r/o);t[n]+=a*e,t[i]-=a*o*e}return n},null),Te.reduce((i,n)=>{if(D(t[n]))return i;if(i){let r=t[i]%1;t[i]-=r,t[n]+=r*s[i][n]}return n},null)}function jm(s){let t={};for(let[e,i]of Object.entries(s))i!==0&&(t[e]=i);return t}var I=class{constructor(t){let e=t.conversionAccuracy==="longterm"||!1,i=e?Bm:Hm;t.matrix&&(i=t.matrix),this.values=t.values,this.loc=t.loc||P.create(),this.conversionAccuracy=e?"longterm":"casual",this.invalid=t.invalid||null,this.matrix=i,this.isLuxonDuration=!0}static fromMillis(t,e){return I.fromObject({milliseconds:t},e)}static fromObject(t,e={}){if(t==null||typeof t!="object")throw new J(`Duration.fromObject: argument expected to be an object, got ${t===null?"null":typeof t}`);return new I({values:os(t,I.normalizeUnit),loc:P.fromObject(e),conversionAccuracy:e.conversionAccuracy,matrix:e.matrix})}static fromDurationLike(t){if(Ct(t))return I.fromMillis(t);if(I.isDuration(t))return t;if(typeof t=="object")return I.fromObject(t);throw new J(`Unknown duration argument ${t} of type ${typeof t}`)}static fromISO(t,e){let[i]=nc(t);return i?I.fromObject(i,e):I.invalid("unparsable",`the input "${t}" can't be parsed as ISO 8601`)}static fromISOTime(t,e){let[i]=rc(t);return i?I.fromObject(i,e):I.invalid("unparsable",`the input "${t}" can't be parsed as ISO 8601`)}static invalid(t,e=null){if(!t)throw new J("need to specify a reason the Duration is invalid");let i=t instanceof rt?t:new rt(t,e);if(z.throwOnInvalid)throw new tn(i);return new I({invalid:i})}static normalizeUnit(t){let e={year:"years",years:"years",quarter:"quarters",quarters:"quarters",month:"months",months:"months",week:"weeks",weeks:"weeks",day:"days",days:"days",hour:"hours",hours:"hours",minute:"minutes",minutes:"minutes",second:"seconds",seconds:"seconds",millisecond:"milliseconds",milliseconds:"milliseconds"}[t&&t.toLowerCase()];if(!e)throw new ts(t);return e}static isDuration(t){return t&&t.isLuxonDuration||!1}get locale(){return this.isValid?this.loc.locale:null}get numberingSystem(){return this.isValid?this.loc.numberingSystem:null}toFormat(t,e={}){let i={...e,floor:e.round!==!1&&e.floor!==!1};return this.isValid?X.create(this.loc,i).formatDurationFromString(this,t):ac}toHuman(t={}){if(!this.isValid)return ac;let e=Te.map(i=>{let n=this.values[i];return D(n)?null:this.loc.numberFormatter({style:"unit",unitDisplay:"long",...t,unit:i.slice(0,-1)}).format(n)}).filter(i=>i);return this.loc.listFormatter({type:"conjunction",style:t.listStyle||"narrow",...t}).format(e)}toObject(){return this.isValid?{...this.values}:{}}toISO(){if(!this.isValid)return null;let t="P";return this.years!==0&&(t+=this.years+"Y"),(this.months!==0||this.quarters!==0)&&(t+=this.months+this.quarters*3+"M"),this.weeks!==0&&(t+=this.weeks+"W"),this.days!==0&&(t+=this.days+"D"),(this.hours!==0||this.minutes!==0||this.seconds!==0||this.milliseconds!==0)&&(t+="T"),this.hours!==0&&(t+=this.hours+"H"),this.minutes!==0&&(t+=this.minutes+"M"),(this.seconds!==0||this.milliseconds!==0)&&(t+=ss(this.seconds+this.milliseconds/1e3,3)+"S"),t==="P"&&(t+="T0S"),t}toISOTime(t={}){if(!this.isValid)return null;let e=this.toMillis();return e<0||e>=864e5?null:(t={suppressMilliseconds:!1,suppressSeconds:!1,includePrefix:!1,format:"extended",...t,includeOffset:!1},T.fromMillis(e,{zone:"UTC"}).toISOTime(t))}toJSON(){return this.toISO()}toString(){return this.toISO()}[Symbol.for("nodejs.util.inspect.custom")](){return this.isValid?`Duration { values: ${JSON.stringify(this.values)} }`:`Duration { Invalid, reason: ${this.invalidReason} }`}toMillis(){return this.isValid?hc(this.matrix,this.values):NaN}valueOf(){return this.toMillis()}plus(t){if(!this.isValid)return this;let e=I.fromDurationLike(t),i={};for(let n of Te)(he(e.values,n)||he(this.values,n))&&(i[n]=e.get(n)+this.get(n));return de(this,{values:i},!0)}minus(t){if(!this.isValid)return this;let e=I.fromDurationLike(t);return this.plus(e.negate())}mapUnits(t){if(!this.isValid)return this;let e={};for(let i of Object.keys(this.values))e[i]=Jr(t(this.values[i],i));return de(this,{values:e},!0)}get(t){return this[I.normalizeUnit(t)]}set(t){if(!this.isValid)return this;let e={...this.values,...os(t,I.normalizeUnit)};return de(this,{values:e})}reconfigure({locale:t,numberingSystem:e,conversionAccuracy:i,matrix:n}={}){let o={loc:this.loc.clone({locale:t,numberingSystem:e}),matrix:n,conversionAccuracy:i};return de(this,o)}as(t){return this.isValid?this.shiftTo(t).get(t):NaN}normalize(){if(!this.isValid)return this;let t=this.toObject();return lc(this.matrix,t),de(this,{values:t},!0)}rescale(){if(!this.isValid)return this;let t=jm(this.normalize().shiftToAll().toObject());return de(this,{values:t},!0)}shiftTo(...t){if(!this.isValid)return this;if(t.length===0)return this;t=t.map(o=>I.normalizeUnit(o));let e={},i={},n=this.toObject(),r;for(let o of Te)if(t.indexOf(o)>=0){r=o;let a=0;for(let c in i)a+=this.matrix[c][o]*i[c],i[c]=0;Ct(n[o])&&(a+=n[o]);let l=Math.trunc(a);e[o]=l,i[o]=(a*1e3-l*1e3)/1e3}else Ct(n[o])&&(i[o]=n[o]);for(let o in i)i[o]!==0&&(e[r]+=o===r?i[o]:i[o]/this.matrix[r][o]);return lc(this.matrix,e),de(this,{values:e},!0)}shiftToAll(){return this.isValid?this.shiftTo("years","months","weeks","days","hours","minutes","seconds","milliseconds"):this}negate(){if(!this.isValid)return this;let t={};for(let e of Object.keys(this.values))t[e]=this.values[e]===0?0:-this.values[e];return de(this,{values:t},!0)}get years(){return this.isValid?this.values.years||0:NaN}get quarters(){return this.isValid?this.values.quarters||0:NaN}get months(){return this.isValid?this.values.months||0:NaN}get weeks(){return this.isValid?this.values.weeks||0:NaN}get days(){return this.isValid?this.values.days||0:NaN}get hours(){return this.isValid?this.values.hours||0:NaN}get minutes(){return this.isValid?this.values.minutes||0:NaN}get seconds(){return this.isValid?this.values.seconds||0:NaN}get milliseconds(){return this.isValid?this.values.milliseconds||0:NaN}get isValid(){return this.invalid===null}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}equals(t){if(!this.isValid||!t.isValid||!this.loc.equals(t.loc))return!1;function e(i,n){return i===void 0||i===0?n===void 0||n===0:i===n}for(let i of Te)if(!e(this.values[i],t.values[i]))return!1;return!0}};var fs="Invalid Interval";function Um(s,t){return!s||!s.isValid?U.invalid("missing or invalid start"):!t||!t.isValid?U.invalid("missing or invalid end"):tt:!1}isBefore(t){return this.isValid?this.e<=t:!1}contains(t){return this.isValid?this.s<=t&&this.e>t:!1}set({start:t,end:e}={}){return this.isValid?U.fromDateTimes(t||this.s,e||this.e):this}splitAt(...t){if(!this.isValid)return[];let e=t.map(ms).filter(o=>this.contains(o)).sort((o,a)=>o.toMillis()-a.toMillis()),i=[],{s:n}=this,r=0;for(;n+this.e?this.e:o;i.push(U.fromDateTimes(n,a)),n=a,r+=1}return i}splitBy(t){let e=I.fromDurationLike(t);if(!this.isValid||!e.isValid||e.as("milliseconds")===0)return[];let{s:i}=this,n=1,r,o=[];for(;il*n));r=+a>+this.e?this.e:a,o.push(U.fromDateTimes(i,r)),i=r,n+=1}return o}divideEqually(t){return this.isValid?this.splitBy(this.length()/t).slice(0,t):[]}overlaps(t){return this.e>t.s&&this.s=t.e:!1}equals(t){return!this.isValid||!t.isValid?!1:this.s.equals(t.s)&&this.e.equals(t.e)}intersection(t){if(!this.isValid)return this;let e=this.s>t.s?this.s:t.s,i=this.e=i?null:U.fromDateTimes(e,i)}union(t){if(!this.isValid)return this;let e=this.st.e?this.e:t.e;return U.fromDateTimes(e,i)}static merge(t){let[e,i]=t.sort((n,r)=>n.s-r.s).reduce(([n,r],o)=>r?r.overlaps(o)||r.abutsStart(o)?[n,r.union(o)]:[n.concat([r]),o]:[n,o],[[],null]);return i&&e.push(i),e}static xor(t){let e=null,i=0,n=[],r=t.map(l=>[{time:l.s,type:"s"},{time:l.e,type:"e"}]),o=Array.prototype.concat(...r),a=o.sort((l,c)=>l.time-c.time);for(let l of a)i+=l.type==="s"?1:-1,i===1?e=l.time:(e&&+e!=+l.time&&n.push(U.fromDateTimes(e,l.time)),e=null);return U.merge(n)}difference(...t){return U.xor([this].concat(t)).map(e=>this.intersection(e)).filter(e=>e&&!e.isEmpty())}toString(){return this.isValid?`[${this.s.toISO()} \u2013 ${this.e.toISO()})`:fs}[Symbol.for("nodejs.util.inspect.custom")](){return this.isValid?`Interval { start: ${this.s.toISO()}, end: ${this.e.toISO()} }`:`Interval { Invalid, reason: ${this.invalidReason} }`}toLocaleString(t=ae,e={}){return this.isValid?X.create(this.s.loc.clone(e),t).formatInterval(this):fs}toISO(t){return this.isValid?`${this.s.toISO(t)}/${this.e.toISO(t)}`:fs}toISODate(){return this.isValid?`${this.s.toISODate()}/${this.e.toISODate()}`:fs}toISOTime(t){return this.isValid?`${this.s.toISOTime(t)}/${this.e.toISOTime(t)}`:fs}toFormat(t,{separator:e=" \u2013 "}={}){return this.isValid?`${this.s.toFormat(t)}${e}${this.e.toFormat(t)}`:fs}toDuration(t,e){return this.isValid?this.e.diff(this.s,t,e):I.invalid(this.invalidReason)}mapEndpoints(t){return U.fromDateTimes(t(this.s),t(this.e))}};var Gt=class{static hasDST(t=z.defaultZone){let e=T.now().setZone(t).set({month:12});return!t.isUniversal&&e.offset!==e.set({month:6}).offset}static isValidIANAZone(t){return nt.isValidZone(t)}static normalizeZone(t){return Et(t,z.defaultZone)}static getStartOfWeek({locale:t=null,locObj:e=null}={}){return(e||P.create(t)).getStartOfWeek()}static getMinimumDaysInFirstWeek({locale:t=null,locObj:e=null}={}){return(e||P.create(t)).getMinDaysInFirstWeek()}static getWeekendWeekdays({locale:t=null,locObj:e=null}={}){return(e||P.create(t)).getWeekendDays().slice()}static months(t="long",{locale:e=null,numberingSystem:i=null,locObj:n=null,outputCalendar:r="gregory"}={}){return(n||P.create(e,i,r)).months(t)}static monthsFormat(t="long",{locale:e=null,numberingSystem:i=null,locObj:n=null,outputCalendar:r="gregory"}={}){return(n||P.create(e,i,r)).months(t,!0)}static weekdays(t="long",{locale:e=null,numberingSystem:i=null,locObj:n=null}={}){return(n||P.create(e,i,null)).weekdays(t)}static weekdaysFormat(t="long",{locale:e=null,numberingSystem:i=null,locObj:n=null}={}){return(n||P.create(e,i,null)).weekdays(t,!0)}static meridiems({locale:t=null}={}){return P.create(t).meridiems()}static eras(t="short",{locale:e=null}={}){return P.create(e,null,"gregory").eras(t)}static features(){return{relative:an(),localeWeek:ln()}}};function uc(s,t){let e=n=>n.toUTC(0,{keepLocalTime:!0}).startOf("day").valueOf(),i=e(t)-e(s);return Math.floor(I.fromMillis(i).as("days"))}function Ym(s,t,e){let i=[["years",(l,c)=>c.year-l.year],["quarters",(l,c)=>c.quarter-l.quarter+(c.year-l.year)*4],["months",(l,c)=>c.month-l.month+(c.year-l.year)*12],["weeks",(l,c)=>{let h=uc(l,c);return(h-h%7)/7}],["days",uc]],n={},r=s,o,a;for(let[l,c]of i)e.indexOf(l)>=0&&(o=l,n[l]=c(s,t),a=r.plus(n),a>t?(n[l]--,s=r.plus(n),s>t&&(a=s,n[l]--,s=r.plus(n))):s=a);return[s,n,a,o]}function dc(s,t,e,i){let[n,r,o,a]=Ym(s,t,e),l=t-n,c=e.filter(u=>["hours","minutes","seconds","milliseconds"].indexOf(u)>=0);c.length===0&&(o0?I.fromMillis(l,i).shiftTo(...c).plus(h):h}var Zm="missing Intl.DateTimeFormat.formatToParts support";function V(s,t=e=>e){return{regex:s,deser:([e])=>t(kl(e))}}var qm=String.fromCharCode(160),gc=`[ ${qm}]`,pc=new RegExp(gc,"g");function Gm(s){return s.replace(/\./g,"\\.?").replace(pc,gc)}function fc(s){return s.replace(/\./g,"").replace(pc," ").toLowerCase()}function It(s,t){return s===null?null:{regex:RegExp(s.map(Gm).join("|")),deser:([e])=>s.findIndex(i=>fc(e)===fc(i))+t}}function mc(s,t){return{regex:s,deser:([,e,i])=>Se(e,i),groups:t}}function dn(s){return{regex:s,deser:([t])=>t}}function Xm(s){return s.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")}function Km(s,t){let e=St(t),i=St(t,"{2}"),n=St(t,"{3}"),r=St(t,"{4}"),o=St(t,"{6}"),a=St(t,"{1,2}"),l=St(t,"{1,3}"),c=St(t,"{1,6}"),h=St(t,"{1,9}"),u=St(t,"{2,4}"),d=St(t,"{4,6}"),f=p=>({regex:RegExp(Xm(p.val)),deser:([y])=>y,literal:!0}),g=(p=>{if(s.literal)return f(p);switch(p.val){case"G":return It(t.eras("short"),0);case"GG":return It(t.eras("long"),0);case"y":return V(c);case"yy":return V(u,di);case"yyyy":return V(r);case"yyyyy":return V(d);case"yyyyyy":return V(o);case"M":return V(a);case"MM":return V(i);case"MMM":return It(t.months("short",!0),1);case"MMMM":return It(t.months("long",!0),1);case"L":return V(a);case"LL":return V(i);case"LLL":return It(t.months("short",!1),1);case"LLLL":return It(t.months("long",!1),1);case"d":return V(a);case"dd":return V(i);case"o":return V(l);case"ooo":return V(n);case"HH":return V(i);case"H":return V(a);case"hh":return V(i);case"h":return V(a);case"mm":return V(i);case"m":return V(a);case"q":return V(a);case"qq":return V(i);case"s":return V(a);case"ss":return V(i);case"S":return V(l);case"SSS":return V(n);case"u":return dn(h);case"uu":return dn(a);case"uuu":return V(e);case"a":return It(t.meridiems(),0);case"kkkk":return V(r);case"kk":return V(u,di);case"W":return V(a);case"WW":return V(i);case"E":case"c":return V(e);case"EEE":return It(t.weekdays("short",!1),1);case"EEEE":return It(t.weekdays("long",!1),1);case"ccc":return It(t.weekdays("short",!0),1);case"cccc":return It(t.weekdays("long",!0),1);case"Z":case"ZZ":return mc(new RegExp(`([+-]${a.source})(?::(${i.source}))?`),2);case"ZZZ":return mc(new RegExp(`([+-]${a.source})(${i.source})?`),2);case"z":return dn(/[a-z_+-/]{1,256}?/i);case" ":return dn(/[^\S\n\r]/);default:return f(p)}})(s)||{invalidReason:Zm};return g.token=s,g}var Jm={year:{"2-digit":"yy",numeric:"yyyyy"},month:{numeric:"M","2-digit":"MM",short:"MMM",long:"MMMM"},day:{numeric:"d","2-digit":"dd"},weekday:{short:"EEE",long:"EEEE"},dayperiod:"a",dayPeriod:"a",hour12:{numeric:"h","2-digit":"hh"},hour24:{numeric:"H","2-digit":"HH"},minute:{numeric:"m","2-digit":"mm"},second:{numeric:"s","2-digit":"ss"},timeZoneName:{long:"ZZZZZ",short:"ZZZ"}};function Qm(s,t,e){let{type:i,value:n}=s;if(i==="literal"){let l=/^\s+$/.test(n);return{literal:!l,val:l?" ":n}}let r=t[i],o=i;i==="hour"&&(t.hour12!=null?o=t.hour12?"hour12":"hour24":t.hourCycle!=null?t.hourCycle==="h11"||t.hourCycle==="h12"?o="hour12":o="hour24":o=e.hour12?"hour12":"hour24");let a=Jm[o];if(typeof a=="object"&&(a=a[r]),a)return{literal:!1,val:a}}function tg(s){return[`^${s.map(e=>e.regex).reduce((e,i)=>`${e}(${i.source})`,"")}$`,s]}function eg(s,t,e){let i=s.match(t);if(i){let n={},r=1;for(let o in e)if(he(e,o)){let a=e[o],l=a.groups?a.groups+1:1;!a.literal&&a.token&&(n[a.token.val[0]]=a.deser(i.slice(r,r+l))),r+=l}return[i,n]}else return[i,{}]}function sg(s){let t=r=>{switch(r){case"S":return"millisecond";case"s":return"second";case"m":return"minute";case"h":case"H":return"hour";case"d":return"day";case"o":return"ordinal";case"L":case"M":return"month";case"y":return"year";case"E":case"c":return"weekday";case"W":return"weekNumber";case"k":return"weekYear";case"q":return"quarter";default:return null}},e=null,i;return D(s.z)||(e=nt.create(s.z)),D(s.Z)||(e||(e=new G(s.Z)),i=s.Z),D(s.q)||(s.M=(s.q-1)*3+1),D(s.h)||(s.h<12&&s.a===1?s.h+=12:s.h===12&&s.a===0&&(s.h=0)),s.G===0&&s.y&&(s.y=-s.y),D(s.u)||(s.S=ui(s.u)),[Object.keys(s).reduce((r,o)=>{let a=t(o);return a&&(r[a]=s[o]),r},{}),e,i]}var ro=null;function ig(){return ro||(ro=T.fromMillis(1555555555555)),ro}function ng(s,t){if(s.literal)return s;let e=X.macroTokenToFormatOpts(s.val),i=lo(e,t);return i==null||i.includes(void 0)?s:i}function oo(s,t){return Array.prototype.concat(...s.map(e=>ng(e,t)))}var gi=class{constructor(t,e){if(this.locale=t,this.format=e,this.tokens=oo(X.parseFormat(e),t),this.units=this.tokens.map(i=>Km(i,t)),this.disqualifyingUnit=this.units.find(i=>i.invalidReason),!this.disqualifyingUnit){let[i,n]=tg(this.units);this.regex=RegExp(i,"i"),this.handlers=n}}explainFromTokens(t){if(this.isValid){let[e,i]=eg(t,this.regex,this.handlers),[n,r,o]=i?sg(i):[null,null,void 0];if(he(i,"a")&&he(i,"H"))throw new vt("Can't include meridiem when specifying 24-hour format");return{input:t,tokens:this.tokens,regex:this.regex,rawMatches:e,matches:i,result:n,zone:r,specificOffset:o}}else return{input:t,tokens:this.tokens,invalidReason:this.invalidReason}}get isValid(){return!this.disqualifyingUnit}get invalidReason(){return this.disqualifyingUnit?this.disqualifyingUnit.invalidReason:null}};function ao(s,t,e){return new gi(s,e).explainFromTokens(t)}function yc(s,t,e){let{result:i,zone:n,specificOffset:r,invalidReason:o}=ao(s,t,e);return[i,n,r,o]}function lo(s,t){if(!s)return null;let i=X.create(t,s).dtFormatter(ig()),n=i.formatToParts(),r=i.resolvedOptions();return n.map(o=>Qm(o,s,r))}var co="Invalid DateTime",bc=864e13;function pi(s){return new rt("unsupported zone",`the zone "${s.name}" is not supported`)}function ho(s){return s.weekData===null&&(s.weekData=li(s.c)),s.weekData}function uo(s){return s.localWeekData===null&&(s.localWeekData=li(s.c,s.loc.getMinDaysInFirstWeek(),s.loc.getStartOfWeek())),s.localWeekData}function ve(s,t){let e={ts:s.ts,zone:s.zone,c:s.c,o:s.o,loc:s.loc,invalid:s.invalid};return new T({...e,...t,old:e})}function Tc(s,t,e){let i=s-t*60*1e3,n=e.offset(i);if(t===n)return[i,t];i-=(n-t)*60*1e3;let r=e.offset(i);return n===r?[i,n]:[s-Math.min(n,r)*60*1e3,Math.max(n,r)]}function fn(s,t){s+=t*60*1e3;let e=new Date(s);return{year:e.getUTCFullYear(),month:e.getUTCMonth()+1,day:e.getUTCDate(),hour:e.getUTCHours(),minute:e.getUTCMinutes(),second:e.getUTCSeconds(),millisecond:e.getUTCMilliseconds()}}function gn(s,t,e){return Tc(es(s),t,e)}function xc(s,t){let e=s.o,i=s.c.year+Math.trunc(t.years),n=s.c.month+Math.trunc(t.months)+Math.trunc(t.quarters)*3,r={...s.c,year:i,month:n,day:Math.min(s.c.day,rs(i,n))+Math.trunc(t.days)+Math.trunc(t.weeks)*7},o=I.fromObject({years:t.years-Math.trunc(t.years),quarters:t.quarters-Math.trunc(t.quarters),months:t.months-Math.trunc(t.months),weeks:t.weeks-Math.trunc(t.weeks),days:t.days-Math.trunc(t.days),hours:t.hours,minutes:t.minutes,seconds:t.seconds,milliseconds:t.milliseconds}).as("milliseconds"),a=es(r),[l,c]=Tc(a,e,s.zone);return o!==0&&(l+=o,c=s.zone.offset(l)),{ts:l,o:c}}function gs(s,t,e,i,n,r){let{setZone:o,zone:a}=e;if(s&&Object.keys(s).length!==0||t){let l=t||a,c=T.fromObject(s,{...e,zone:l,specificOffset:r});return o?c:c.setZone(a)}else return T.invalid(new rt("unparsable",`the input "${n}" can't be parsed as ${i}`))}function mn(s,t,e=!0){return s.isValid?X.create(P.create("en-US"),{allowZ:e,forceSimple:!0}).formatDateTimeFromString(s,t):null}function fo(s,t){let e=s.c.year>9999||s.c.year<0,i="";return e&&s.c.year>=0&&(i+="+"),i+=q(s.c.year,e?6:4),t?(i+="-",i+=q(s.c.month),i+="-",i+=q(s.c.day)):(i+=q(s.c.month),i+=q(s.c.day)),i}function _c(s,t,e,i,n,r){let o=q(s.c.hour);return t?(o+=":",o+=q(s.c.minute),(s.c.millisecond!==0||s.c.second!==0||!e)&&(o+=":")):o+=q(s.c.minute),(s.c.millisecond!==0||s.c.second!==0||!e)&&(o+=q(s.c.second),(s.c.millisecond!==0||!i)&&(o+=".",o+=q(s.c.millisecond,3))),n&&(s.isOffsetFixed&&s.offset===0&&!r?o+="Z":s.o<0?(o+="-",o+=q(Math.trunc(-s.o/60)),o+=":",o+=q(Math.trunc(-s.o%60))):(o+="+",o+=q(Math.trunc(s.o/60)),o+=":",o+=q(Math.trunc(s.o%60)))),r&&(o+="["+s.zone.ianaName+"]"),o}var vc={month:1,day:1,hour:0,minute:0,second:0,millisecond:0},rg={weekNumber:1,weekday:1,hour:0,minute:0,second:0,millisecond:0},og={ordinal:1,hour:0,minute:0,second:0,millisecond:0},Oc=["year","month","day","hour","minute","second","millisecond"],ag=["weekYear","weekNumber","weekday","hour","minute","second","millisecond"],lg=["year","ordinal","hour","minute","second","millisecond"];function cg(s){let t={year:"year",years:"year",month:"month",months:"month",day:"day",days:"day",hour:"hour",hours:"hour",minute:"minute",minutes:"minute",quarter:"quarter",quarters:"quarter",second:"second",seconds:"second",millisecond:"millisecond",milliseconds:"millisecond",weekday:"weekday",weekdays:"weekday",weeknumber:"weekNumber",weeksnumber:"weekNumber",weeknumbers:"weekNumber",weekyear:"weekYear",weekyears:"weekYear",ordinal:"ordinal"}[s.toLowerCase()];if(!t)throw new ts(s);return t}function wc(s){switch(s.toLowerCase()){case"localweekday":case"localweekdays":return"localWeekday";case"localweeknumber":case"localweeknumbers":return"localWeekNumber";case"localweekyear":case"localweekyears":return"localWeekYear";default:return cg(s)}}function hg(s){return yn[s]||(pn===void 0&&(pn=z.now()),yn[s]=s.offset(pn)),yn[s]}function Sc(s,t){let e=Et(t.zone,z.defaultZone);if(!e.isValid)return T.invalid(pi(e));let i=P.fromObject(t),n,r;if(D(s.year))n=z.now();else{for(let l of Oc)D(s[l])&&(s[l]=vc[l]);let o=Gr(s)||Xr(s);if(o)return T.invalid(o);let a=hg(e);[n,r]=gn(s,a,e)}return new T({ts:n,zone:e,loc:i,o:r})}function kc(s,t,e){let i=D(e.round)?!0:e.round,n=(o,a)=>(o=ss(o,i||e.calendary?0:2,!0),t.loc.clone(e).relFormatter(e).format(o,a)),r=o=>e.calendary?t.hasSame(s,o)?0:t.startOf(o).diff(s.startOf(o),o).get(o):t.diff(s,o).get(o);if(e.unit)return n(r(e.unit),e.unit);for(let o of e.units){let a=r(o);if(Math.abs(a)>=1)return n(a,o)}return n(s>t?-0:0,e.units[e.units.length-1])}function Mc(s){let t={},e;return s.length>0&&typeof s[s.length-1]=="object"?(t=s[s.length-1],e=Array.from(s).slice(0,s.length-1)):e=Array.from(s),[t,e]}var pn,yn={},T=class{constructor(t){let e=t.zone||z.defaultZone,i=t.invalid||(Number.isNaN(t.ts)?new rt("invalid input"):null)||(e.isValid?null:pi(e));this.ts=D(t.ts)?z.now():t.ts;let n=null,r=null;if(!i)if(t.old&&t.old.ts===this.ts&&t.old.zone.equals(e))[n,r]=[t.old.c,t.old.o];else{let a=Ct(t.o)&&!t.old?t.o:e.offset(this.ts);n=fn(this.ts,a),i=Number.isNaN(n.year)?new rt("invalid input"):null,n=i?null:n,r=i?null:a}this._zone=e,this.loc=t.loc||P.create(),this.invalid=i,this.weekData=null,this.localWeekData=null,this.c=n,this.o=r,this.isLuxonDateTime=!0}static now(){return new T({})}static local(){let[t,e]=Mc(arguments),[i,n,r,o,a,l,c]=e;return Sc({year:i,month:n,day:r,hour:o,minute:a,second:l,millisecond:c},t)}static utc(){let[t,e]=Mc(arguments),[i,n,r,o,a,l,c]=e;return t.zone=G.utcInstance,Sc({year:i,month:n,day:r,hour:o,minute:a,second:l,millisecond:c},t)}static fromJSDate(t,e={}){let i=Vl(t)?t.valueOf():NaN;if(Number.isNaN(i))return T.invalid("invalid input");let n=Et(e.zone,z.defaultZone);return n.isValid?new T({ts:i,zone:n,loc:P.fromObject(e)}):T.invalid(pi(n))}static fromMillis(t,e={}){if(Ct(t))return t<-bc||t>bc?T.invalid("Timestamp out of range"):new T({ts:t,zone:Et(e.zone,z.defaultZone),loc:P.fromObject(e)});throw new J(`fromMillis requires a numerical input, but received a ${typeof t} with value ${t}`)}static fromSeconds(t,e={}){if(Ct(t))return new T({ts:t*1e3,zone:Et(e.zone,z.defaultZone),loc:P.fromObject(e)});throw new J("fromSeconds requires a numerical input")}static fromObject(t,e={}){t=t||{};let i=Et(e.zone,z.defaultZone);if(!i.isValid)return T.invalid(pi(i));let n=P.fromObject(e),r=os(t,wc),{minDaysInFirstWeek:o,startOfWeek:a}=qr(r,n),l=z.now(),c=D(e.specificOffset)?i.offset(l):e.specificOffset,h=!D(r.ordinal),u=!D(r.year),d=!D(r.month)||!D(r.day),f=u||d,m=r.weekYear||r.weekNumber;if((f||h)&&m)throw new vt("Can't mix weekYear/weekNumber units with year/month/day or ordinals");if(d&&h)throw new vt("Can't mix ordinal dates with month/day");let g=m||r.weekday&&!f,p,y,b=fn(l,c);g?(p=ag,y=rg,b=li(b,o,a)):h?(p=lg,y=og,b=un(b)):(p=Oc,y=vc);let _=!1;for(let F of p){let W=r[F];D(W)?_?r[F]=y[F]:r[F]=b[F]:_=!0}let w=g?Nl(r,o,a):h?Wl(r):Gr(r),x=w||Xr(r);if(x)return T.invalid(x);let S=g?Yr(r,o,a):h?Zr(r):r,[k,O]=gn(S,c,i),v=new T({ts:k,zone:i,o:O,loc:n});return r.weekday&&f&&t.weekday!==v.weekday?T.invalid("mismatched weekday",`you can't specify both a weekday of ${r.weekday} and a date of ${v.toISO()}`):v.isValid?v:T.invalid(v.invalid)}static fromISO(t,e={}){let[i,n]=ec(t);return gs(i,n,e,"ISO 8601",t)}static fromRFC2822(t,e={}){let[i,n]=sc(t);return gs(i,n,e,"RFC 2822",t)}static fromHTTP(t,e={}){let[i,n]=ic(t);return gs(i,n,e,"HTTP",e)}static fromFormat(t,e,i={}){if(D(t)||D(e))throw new J("fromFormat requires an input string and a format");let{locale:n=null,numberingSystem:r=null}=i,o=P.fromOpts({locale:n,numberingSystem:r,defaultToEN:!0}),[a,l,c,h]=yc(o,t,e);return h?T.invalid(h):gs(a,l,i,`format ${e}`,t,c)}static fromString(t,e,i={}){return T.fromFormat(t,e,i)}static fromSQL(t,e={}){let[i,n]=oc(t);return gs(i,n,e,"SQL",t)}static invalid(t,e=null){if(!t)throw new J("need to specify a reason the DateTime is invalid");let i=t instanceof rt?t:new rt(t,e);if(z.throwOnInvalid)throw new Ji(i);return new T({invalid:i})}static isDateTime(t){return t&&t.isLuxonDateTime||!1}static parseFormatForOpts(t,e={}){let i=lo(t,P.fromObject(e));return i?i.map(n=>n?n.val:null).join(""):null}static expandFormat(t,e={}){return oo(X.parseFormat(t),P.fromObject(e)).map(n=>n.val).join("")}static resetCache(){pn=void 0,yn={}}get(t){return this[t]}get isValid(){return this.invalid===null}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}get locale(){return this.isValid?this.loc.locale:null}get numberingSystem(){return this.isValid?this.loc.numberingSystem:null}get outputCalendar(){return this.isValid?this.loc.outputCalendar:null}get zone(){return this._zone}get zoneName(){return this.isValid?this.zone.name:null}get year(){return this.isValid?this.c.year:NaN}get quarter(){return this.isValid?Math.ceil(this.c.month/3):NaN}get month(){return this.isValid?this.c.month:NaN}get day(){return this.isValid?this.c.day:NaN}get hour(){return this.isValid?this.c.hour:NaN}get minute(){return this.isValid?this.c.minute:NaN}get second(){return this.isValid?this.c.second:NaN}get millisecond(){return this.isValid?this.c.millisecond:NaN}get weekYear(){return this.isValid?ho(this).weekYear:NaN}get weekNumber(){return this.isValid?ho(this).weekNumber:NaN}get weekday(){return this.isValid?ho(this).weekday:NaN}get isWeekend(){return this.isValid&&this.loc.getWeekendDays().includes(this.weekday)}get localWeekday(){return this.isValid?uo(this).weekday:NaN}get localWeekNumber(){return this.isValid?uo(this).weekNumber:NaN}get localWeekYear(){return this.isValid?uo(this).weekYear:NaN}get ordinal(){return this.isValid?un(this.c).ordinal:NaN}get monthShort(){return this.isValid?Gt.months("short",{locObj:this.loc})[this.month-1]:null}get monthLong(){return this.isValid?Gt.months("long",{locObj:this.loc})[this.month-1]:null}get weekdayShort(){return this.isValid?Gt.weekdays("short",{locObj:this.loc})[this.weekday-1]:null}get weekdayLong(){return this.isValid?Gt.weekdays("long",{locObj:this.loc})[this.weekday-1]:null}get offset(){return this.isValid?+this.o:NaN}get offsetNameShort(){return this.isValid?this.zone.offsetName(this.ts,{format:"short",locale:this.locale}):null}get offsetNameLong(){return this.isValid?this.zone.offsetName(this.ts,{format:"long",locale:this.locale}):null}get isOffsetFixed(){return this.isValid?this.zone.isUniversal:null}get isInDST(){return this.isOffsetFixed?!1:this.offset>this.set({month:1,day:1}).offset||this.offset>this.set({month:5}).offset}getPossibleOffsets(){if(!this.isValid||this.isOffsetFixed)return[this];let t=864e5,e=6e4,i=es(this.c),n=this.zone.offset(i-t),r=this.zone.offset(i+t),o=this.zone.offset(i-n*e),a=this.zone.offset(i-r*e);if(o===a)return[this];let l=i-o*e,c=i-a*e,h=fn(l,o),u=fn(c,a);return h.hour===u.hour&&h.minute===u.minute&&h.second===u.second&&h.millisecond===u.millisecond?[ve(this,{ts:l}),ve(this,{ts:c})]:[this]}get isInLeapYear(){return Me(this.year)}get daysInMonth(){return rs(this.year,this.month)}get daysInYear(){return this.isValid?ce(this.year):NaN}get weeksInWeekYear(){return this.isValid?ke(this.weekYear):NaN}get weeksInLocalWeekYear(){return this.isValid?ke(this.localWeekYear,this.loc.getMinDaysInFirstWeek(),this.loc.getStartOfWeek()):NaN}resolvedLocaleOptions(t={}){let{locale:e,numberingSystem:i,calendar:n}=X.create(this.loc.clone(t),t).resolvedOptions(this);return{locale:e,numberingSystem:i,outputCalendar:n}}toUTC(t=0,e={}){return this.setZone(G.instance(t),e)}toLocal(){return this.setZone(z.defaultZone)}setZone(t,{keepLocalTime:e=!1,keepCalendarTime:i=!1}={}){if(t=Et(t,z.defaultZone),t.equals(this.zone))return this;if(t.isValid){let n=this.ts;if(e||i){let r=t.offset(this.ts),o=this.toObject();[n]=gn(o,r,t)}return ve(this,{ts:n,zone:t})}else return T.invalid(pi(t))}reconfigure({locale:t,numberingSystem:e,outputCalendar:i}={}){let n=this.loc.clone({locale:t,numberingSystem:e,outputCalendar:i});return ve(this,{loc:n})}setLocale(t){return this.reconfigure({locale:t})}set(t){if(!this.isValid)return this;let e=os(t,wc),{minDaysInFirstWeek:i,startOfWeek:n}=qr(e,this.loc),r=!D(e.weekYear)||!D(e.weekNumber)||!D(e.weekday),o=!D(e.ordinal),a=!D(e.year),l=!D(e.month)||!D(e.day),c=a||l,h=e.weekYear||e.weekNumber;if((c||o)&&h)throw new vt("Can't mix weekYear/weekNumber units with year/month/day or ordinals");if(l&&o)throw new vt("Can't mix ordinal dates with month/day");let u;r?u=Yr({...li(this.c,i,n),...e},i,n):D(e.ordinal)?(u={...this.toObject(),...e},D(e.day)&&(u.day=Math.min(rs(u.year,u.month),u.day))):u=Zr({...un(this.c),...e});let[d,f]=gn(u,this.o,this.zone);return ve(this,{ts:d,o:f})}plus(t){if(!this.isValid)return this;let e=I.fromDurationLike(t);return ve(this,xc(this,e))}minus(t){if(!this.isValid)return this;let e=I.fromDurationLike(t).negate();return ve(this,xc(this,e))}startOf(t,{useLocaleWeeks:e=!1}={}){if(!this.isValid)return this;let i={},n=I.normalizeUnit(t);switch(n){case"years":i.month=1;case"quarters":case"months":i.day=1;case"weeks":case"days":i.hour=0;case"hours":i.minute=0;case"minutes":i.second=0;case"seconds":i.millisecond=0;break;case"milliseconds":break}if(n==="weeks")if(e){let r=this.loc.getStartOfWeek(),{weekday:o}=this;othis.valueOf(),a=o?this:t,l=o?t:this,c=dc(a,l,r,n);return o?c.negate():c}diffNow(t="milliseconds",e={}){return this.diff(T.now(),t,e)}until(t){return this.isValid?U.fromDateTimes(this,t):this}hasSame(t,e,i){if(!this.isValid)return!1;let n=t.valueOf(),r=this.setZone(t.zone,{keepLocalTime:!0});return r.startOf(e,i)<=n&&n<=r.endOf(e,i)}equals(t){return this.isValid&&t.isValid&&this.valueOf()===t.valueOf()&&this.zone.equals(t.zone)&&this.loc.equals(t.loc)}toRelative(t={}){if(!this.isValid)return null;let e=t.base||T.fromObject({},{zone:this.zone}),i=t.padding?thise.valueOf(),Math.min)}static max(...t){if(!t.every(T.isDateTime))throw new J("max requires all arguments be DateTimes");return Kr(t,e=>e.valueOf(),Math.max)}static fromFormatExplain(t,e,i={}){let{locale:n=null,numberingSystem:r=null}=i,o=P.fromOpts({locale:n,numberingSystem:r,defaultToEN:!0});return ao(o,t,e)}static fromStringExplain(t,e,i={}){return T.fromFormatExplain(t,e,i)}static buildFormatParser(t,e={}){let{locale:i=null,numberingSystem:n=null}=e,r=P.fromOpts({locale:i,numberingSystem:n,defaultToEN:!0});return new gi(r,t)}static fromFormatParser(t,e,i={}){if(D(t)||D(e))throw new J("fromFormatParser requires an input string and a format parser");let{locale:n=null,numberingSystem:r=null}=i,o=P.fromOpts({locale:n,numberingSystem:r,defaultToEN:!0});if(!o.equals(e.locale))throw new J(`fromFormatParser called with a locale of ${o}, but the format parser was created for ${e.locale}`);let{result:a,zone:l,specificOffset:c,invalidReason:h}=e.explainFromTokens(t);return h?T.invalid(h):gs(a,l,i,`format ${e.format}`,t,c)}static get DATE_SHORT(){return ae}static get DATE_MED(){return Hs}static get DATE_MED_WITH_WEEKDAY(){return Er}static get DATE_FULL(){return Bs}static get DATE_HUGE(){return $s}static get TIME_SIMPLE(){return js}static get TIME_WITH_SECONDS(){return Us}static get TIME_WITH_SHORT_OFFSET(){return Ys}static get TIME_WITH_LONG_OFFSET(){return Zs}static get TIME_24_SIMPLE(){return qs}static get TIME_24_WITH_SECONDS(){return Gs}static get TIME_24_WITH_SHORT_OFFSET(){return Xs}static get TIME_24_WITH_LONG_OFFSET(){return Ks}static get DATETIME_SHORT(){return Js}static get DATETIME_SHORT_WITH_SECONDS(){return Qs}static get DATETIME_MED(){return ti}static get DATETIME_MED_WITH_SECONDS(){return ei}static get DATETIME_MED_WITH_WEEKDAY(){return Cr}static get DATETIME_FULL(){return si}static get DATETIME_FULL_WITH_SECONDS(){return ii}static get DATETIME_HUGE(){return ni}static get DATETIME_HUGE_WITH_SECONDS(){return ri}};function ms(s){if(T.isDateTime(s))return s;if(s&&s.valueOf&&Ct(s.valueOf()))return T.fromJSDate(s);if(s&&typeof s=="object")return T.fromObject(s);throw new J(`Unknown datetime argument: ${s}, of type ${typeof s}`)}var ug={datetime:T.DATETIME_MED_WITH_SECONDS,millisecond:"h:mm:ss.SSS a",second:T.TIME_WITH_SECONDS,minute:T.TIME_SIMPLE,hour:{hour:"numeric"},day:{day:"numeric",month:"short"},week:"DD",month:{month:"short",year:"numeric"},quarter:"'Q'q - yyyy",year:{year:"numeric"}};Or._date.override({_id:"luxon",_create:function(s){return T.fromMillis(s,this.options)},init(s){this.options.locale||(this.options.locale=s.locale)},formats:function(){return ug},parse:function(s,t){let e=this.options,i=typeof s;return s===null||i==="undefined"?null:(i==="number"?s=this._create(s):i==="string"?typeof t=="string"?s=T.fromFormat(s,t,e):s=T.fromISO(s,e):s instanceof Date?s=T.fromJSDate(s,e):i==="object"&&!(s instanceof T)&&(s=T.fromObject(s,e)),s.isValid?s.valueOf():null)},format:function(s,t){let e=this._create(s);return typeof t=="string"?e.toFormat(t):e.toLocaleString(t)},add:function(s,t,e){let i={};return i[e]=t,this._create(s).plus(i).valueOf()},diff:function(s,t,e){return this._create(s).diff(this._create(t)).as(e).valueOf()},startOf:function(s,t,e){if(t==="isoWeek"){e=Math.trunc(Math.min(Math.max(0,e),6));let i=this._create(s);return i.minus({days:(i.weekday-e+7)%7}).startOf("day").valueOf()}return t?this._create(s).startOf(t).valueOf():s},endOf:function(s,t){return this._create(s).endOf(t).valueOf()}});function bn({cachedData:s,options:t,type:e}){return{init:function(){this.initChart(),this.$wire.$on("updateChartData",({data:i})=>{bn=this.getChart(),bn.data=i,bn.update("resize")}),Alpine.effect(()=>{Alpine.store("theme"),this.$nextTick(()=>{this.getChart()&&(this.getChart().destroy(),this.initChart())})}),window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",()=>{Alpine.store("theme")==="system"&&this.$nextTick(()=>{this.getChart().destroy(),this.initChart()})})},initChart:function(i=null){var o,a,l,c,h,u,d;Wt.defaults.animation.duration=0,Wt.defaults.backgroundColor=getComputedStyle(this.$refs.backgroundColorElement).color;let n=getComputedStyle(this.$refs.borderColorElement).color;Wt.defaults.borderColor=n,Wt.defaults.color=getComputedStyle(this.$refs.textColorElement).color,Wt.defaults.font.family=getComputedStyle(this.$el).fontFamily,Wt.defaults.plugins.legend.labels.boxWidth=12,Wt.defaults.plugins.legend.position="bottom";let r=getComputedStyle(this.$refs.gridColorElement).color;return t??(t={}),t.borderWidth??(t.borderWidth=2),t.pointBackgroundColor??(t.pointBackgroundColor=n),t.pointHitRadius??(t.pointHitRadius=4),t.pointRadius??(t.pointRadius=2),t.scales??(t.scales={}),(o=t.scales).x??(o.x={}),(a=t.scales.x).grid??(a.grid={}),t.scales.x.grid.color=r,(l=t.scales.x.grid).display??(l.display=!1),(c=t.scales.x.grid).drawBorder??(c.drawBorder=!1),(h=t.scales).y??(h.y={}),(u=t.scales.y).grid??(u.grid={}),t.scales.y.grid.color=r,(d=t.scales.y.grid).drawBorder??(d.drawBorder=!1),new Wt(this.$refs.canvas,{type:e,data:i??s,options:t,plugins:window.filamentChartJsPlugins??[]})},getChart:function(){return Wt.getChart(this.$refs.canvas)}}}export{bn as default}; /*! Bundled license information: chart.js/dist/chunks/helpers.segment.mjs: diff --git a/tests/Feature/RecurringEventsTest.php b/tests/Feature/RecurringEventsTest.php index 8311abb..c038df9 100644 --- a/tests/Feature/RecurringEventsTest.php +++ b/tests/Feature/RecurringEventsTest.php @@ -21,8 +21,8 @@ $this->recurringEvents->recurringTask(); $this->assertDatabaseHas('shifts', [ 'task_id' => $task->id, - 'start_date' => Carbon::parse($this->now->startOfMonth()->format('Y-m-d').' '.$task['start_hour']), - 'end_date' => Carbon::parse($this->now->startOfMonth()->format('Y-m-d').' '.$task['start_hour'])->addHours($task['duration']), + 'start_date' => Carbon::parse($this->now->tomorrow()->format('Y-m-d').' '.$task['start_hour']), + 'end_date' => Carbon::parse($this->now->tomorrow()->format('Y-m-d').' '.$task['start_hour'])->addHours($task['duration']), ]); }); @@ -34,8 +34,8 @@ 'duration' => 2, ]); $expectedShiftDates = collect([ - $this->now->startOfMonth()->next('Sunday')->format('Y-m-d'), - $this->now->startOfMonth()->next('Tuesday')->format('Y-m-d'), + $this->now->tomorrow()->next('Sunday')->format('Y-m-d'), + $this->now->tomorrow()->next('Tuesday')->format('Y-m-d'), ]); $this->recurringEvents->recurringTask(); $this->assertDatabaseHas('shifts', [ @@ -96,16 +96,16 @@ it('should create shift for One time task', function () { $task = Task::factory()->create([ 'name' => 'One time Task', - 'recurring' => ['type' => 'One time', 'date' => '2024-11-13'], + 'recurring' => ['type' => 'One time', 'date' => Carbon::tomorrow()->toDateString()], 'start_hour' => '13:00:00', 'duration' => 1, ]); $this->recurringEvents->oneTimeTask($task); $date = Carbon::create( - 2024, - 11, - 13, + Carbon::tomorrow()->year, + Carbon::tomorrow()->month, + Carbon::tomorrow()->day, ); $this->assertDatabaseHas('shifts', [ 'task_id' => $task->id, @@ -117,7 +117,7 @@ it('should create shifts for Daily range task', function () { $task = Task::factory()->create([ 'name' => 'Daily range Task', - 'recurring' => ['type' => 'Daily range', 'start_date' => '2022-12-01', 'end_date' => '2022-12-05'], + 'recurring' => ['type' => 'Daily range', 'start_date' => Carbon::tomorrow()->toDateString(), 'end_date' => Carbon::tomorrow()->addDays(5)->toDateString()], 'start_hour' => '13:00:00', 'duration' => 1, ]); @@ -126,7 +126,7 @@ $this->assertDatabaseHas('shifts', [ 'task_id' => $task->id, - 'start_date' => Carbon::parse('2022-12-01'.' '.$task['start_hour']), - 'end_date' => Carbon::parse('2022-12-01'.' '.$task['start_hour'])->addHours($task['duration']), + 'start_date' => Carbon::parse(Carbon::tomorrow()->toDateString().' '.$task['start_hour']), + 'end_date' => Carbon::parse(Carbon::tomorrow()->toDateString().' '.$task['start_hour'])->addHours($task['duration']), ]); }); From 2e1819ccaf8c78837787a24c656bc4f2aabdd02f Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Tue, 24 Dec 2024 13:00:15 +0200 Subject: [PATCH 040/259] version2 --- .github/workflows/php-build-and-deploy.yml | 4 +--- Dockerfile | 1 - 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 13ddda2..0c2f75f 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -53,6 +53,4 @@ jobs: labels: ${{ steps.meta.outputs.labels }} tags: ${{ steps.meta.outputs.tags }} file: ./Dockerfile - - - + \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index f2d35cc..1bf5804 100644 --- a/Dockerfile +++ b/Dockerfile @@ -53,7 +53,6 @@ RUN install-php-extensions \ opcache \ redis \ sockets \ - calendar\ zip RUN composer install From a6f43134c5ebc694b1ac6b01391341332385739d Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Tue, 24 Dec 2024 13:18:47 +0200 Subject: [PATCH 041/259] version2 --- .github/workflows/php-build-and-deploy.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index b0bf1f8..c77d111 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/luy11 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/luy14 flavor: | latest=false tags: | @@ -53,6 +53,3 @@ jobs: labels: ${{ steps.meta.outputs.labels }} tags: ${{ steps.meta.outputs.tags }} file: ./Dockerfile - - - From adc26b8ad8765082e6a9f3aeba7149fc8446f50d Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Tue, 24 Dec 2024 13:20:08 +0200 Subject: [PATCH 042/259] version2 --- .github/workflows/php-build-and-deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index c77d111..3d2275a 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/luy14 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/luy15 flavor: | latest=false tags: | From 236b67030345744309c9b5580a39efe1035fe5a4 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Tue, 24 Dec 2024 13:22:51 +0200 Subject: [PATCH 043/259] version2 --- .github/workflows/php-build-and-deploy.yml | 2 +- .github/workflows/php-lint.yaml | 29 ----------------- .github/workflows/php-tests.yaml | 36 ---------------------- .github/workflows/pre-commit.yaml | 13 -------- .github/workflows/release.yaml | 30 ------------------ 5 files changed, 1 insertion(+), 109 deletions(-) delete mode 100644 .github/workflows/php-lint.yaml delete mode 100644 .github/workflows/php-tests.yaml delete mode 100644 .github/workflows/pre-commit.yaml delete mode 100644 .github/workflows/release.yaml diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index b0bf1f8..269100b 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/luy11 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version1_1 flavor: | latest=false tags: | diff --git a/.github/workflows/php-lint.yaml b/.github/workflows/php-lint.yaml deleted file mode 100644 index 7fd4d0e..0000000 --- a/.github/workflows/php-lint.yaml +++ /dev/null @@ -1,29 +0,0 @@ -name: 💄 Lint - -on: - push: - -jobs: - build: - name: Run Linter - runs-on: ubuntu-latest - - steps: - - name: 📂 Checkout - uses: actions/checkout@v4 - - - name: 🐍 Install PHP - uses: shivammathur/setup-php@v2 - with: - php-version: '8.2' - extensions: pdo_pgsql - coverage: none - - - name: ⏬ Install dependencies - run: | - composer install -n --prefer-dist - composer require laravel/pint --dev - - - name: 💄 Run Pint - run: | - ./vendor/bin/pint --config pint.json --test diff --git a/.github/workflows/php-tests.yaml b/.github/workflows/php-tests.yaml deleted file mode 100644 index 4c16fed..0000000 --- a/.github/workflows/php-tests.yaml +++ /dev/null @@ -1,36 +0,0 @@ -name: 🧪 Test - -on: - push: - -jobs: - tests: - name: Run tests - runs-on: ubuntu-latest - - steps: - - name: 📂 Checkout - uses: actions/checkout@v3 - - - name: 🐍 Setup PHP - uses: shivammathur/setup-php@v2 - with: - php-version: '8.2' - extensions: pdo_pgsql - coverage: none - - - name: ⏬ Run Dependencies install - run: | - composer install -n --prefer-dist - npm install - npm run build - - - name: 🐍 Prepare Laravel Application - run: | - cp .env.example .env - php artisan key:generate - php artisan config:cache - php artisan migrate --env=testing - - - name: ✅ Run tests - run: php artisan test diff --git a/.github/workflows/pre-commit.yaml b/.github/workflows/pre-commit.yaml deleted file mode 100644 index 6eb55d4..0000000 --- a/.github/workflows/pre-commit.yaml +++ /dev/null @@ -1,13 +0,0 @@ -name: 🧹 Pre-commit - -on: - push: - -jobs: - lint: - runs-on: ubuntu-latest - steps: - - name: 📁 Checkout repository - uses: actions/checkout@v4 - - - uses: pre-commit/action@v3.0.0 diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml deleted file mode 100644 index aa9b0a9..0000000 --- a/.github/workflows/release.yaml +++ /dev/null @@ -1,30 +0,0 @@ -name: 🔖 release - -on: - release: - types: [created] - -jobs: - update-release: - runs-on: ubuntu-latest - - permissions: - issues: write - contents: write - - steps: - - name: 📂 Checkout code - uses: actions/checkout@v4 - - - name: 📦️ Create ZIP Archive - run: zip -r ${{ github.event.repository.name }}.zip . - - - name: ⬆️ upload-release-asset - uses: softprops/action-gh-release@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - files: ./${{ github.event.repository.name }}.zip - - - name: 📝 Update Release Description with Closed Issues and Assignees - run: bash github-scripts/find-closed-issues.sh ${{ secrets.GITHUB_TOKEN }} ${{ github.event.release.url }} From 0f8002afee88e2315ff57967c144516c9439eab4 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Tue, 24 Dec 2024 13:40:30 +0200 Subject: [PATCH 044/259] version2 --- .github/workflows/php-build-and-deploy.yml | 2 +- composer.json | 1 + composer.lock | 13132 ------------------- 3 files changed, 2 insertions(+), 13133 deletions(-) delete mode 100644 composer.lock diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 269100b..4722135 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version1_1 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version1_2 flavor: | latest=false tags: | diff --git a/composer.json b/composer.json index 9367328..aa76294 100644 --- a/composer.json +++ b/composer.json @@ -11,6 +11,7 @@ "laravel/framework": "^11.1", "laravel/tinker": "^2.9", "league/flysystem-aws-s3-v3": "^3.0", + "maatwebsite/excel": "^3.1", "predis/predis": "^2.2", "saade/filament-fullcalendar": "^3.0", "spatie/laravel-permission": "^6.9" diff --git a/composer.lock b/composer.lock deleted file mode 100644 index 5cf4171..0000000 --- a/composer.lock +++ /dev/null @@ -1,13132 +0,0 @@ -{ - "_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": "3a979e253c0da76bcd43199271a1fc27", - "packages": [ - { - "name": "anourvalar/eloquent-serialize", - "version": "1.2.24", - "source": { - "type": "git", - "url": "https://github.com/AnourValar/eloquent-serialize.git", - "reference": "77e3fc7da44fa96b6148a1613dd76fe954a5f279" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/AnourValar/eloquent-serialize/zipball/77e3fc7da44fa96b6148a1613dd76fe954a5f279", - "reference": "77e3fc7da44fa96b6148a1613dd76fe954a5f279", - "shasum": "" - }, - "require": { - "laravel/framework": "^8.0|^9.0|^10.0|^11.0", - "php": "^7.4|^8.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3.26", - "laravel/legacy-factories": "^1.1", - "orchestra/testbench": "^6.0|^7.0|^8.0|^9.0", - "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^9.5|^10.5", - "psalm/plugin-laravel": "^2.8", - "squizlabs/php_codesniffer": "^3.7" - }, - "type": "library", - "extra": { - "laravel": { - "aliases": { - "EloquentSerialize": "AnourValar\\EloquentSerialize\\Facades\\EloquentSerializeFacade" - } - } - }, - "autoload": { - "psr-4": { - "AnourValar\\EloquentSerialize\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Laravel Query Builder (Eloquent) serialization", - "homepage": "https://github.com/AnourValar/eloquent-serialize", - "keywords": [ - "anourvalar", - "builder", - "copy", - "eloquent", - "job", - "laravel", - "query", - "querybuilder", - "queue", - "serializable", - "serialization", - "serialize" - ], - "support": { - "issues": "https://github.com/AnourValar/eloquent-serialize/issues", - "source": "https://github.com/AnourValar/eloquent-serialize/tree/1.2.24" - }, - "time": "2024-09-08T15:57:08+00:00" - }, - { - "name": "aws/aws-crt-php", - "version": "v1.2.6", - "source": { - "type": "git", - "url": "https://github.com/awslabs/aws-crt-php.git", - "reference": "a63485b65b6b3367039306496d49737cf1995408" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/a63485b65b6b3367039306496d49737cf1995408", - "reference": "a63485b65b6b3367039306496d49737cf1995408", - "shasum": "" - }, - "require": { - "php": ">=5.5" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35||^5.6.3||^9.5", - "yoast/phpunit-polyfills": "^1.0" - }, - "suggest": { - "ext-awscrt": "Make sure you install awscrt native extension to use any of the functionality." - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "AWS SDK Common Runtime Team", - "email": "aws-sdk-common-runtime@amazon.com" - } - ], - "description": "AWS Common Runtime for PHP", - "homepage": "https://github.com/awslabs/aws-crt-php", - "keywords": [ - "amazon", - "aws", - "crt", - "sdk" - ], - "support": { - "issues": "https://github.com/awslabs/aws-crt-php/issues", - "source": "https://github.com/awslabs/aws-crt-php/tree/v1.2.6" - }, - "time": "2024-06-13T17:21:28+00:00" - }, - { - "name": "aws/aws-sdk-php", - "version": "3.321.11", - "source": { - "type": "git", - "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "bbd357d246350ffcd0dd8df30951d2d46c5ddadb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/bbd357d246350ffcd0dd8df30951d2d46c5ddadb", - "reference": "bbd357d246350ffcd0dd8df30951d2d46c5ddadb", - "shasum": "" - }, - "require": { - "aws/aws-crt-php": "^1.2.3", - "ext-json": "*", - "ext-pcre": "*", - "ext-simplexml": "*", - "guzzlehttp/guzzle": "^6.5.8 || ^7.4.5", - "guzzlehttp/promises": "^1.4.0 || ^2.0", - "guzzlehttp/psr7": "^1.9.1 || ^2.4.5", - "mtdowling/jmespath.php": "^2.6", - "php": ">=7.2.5", - "psr/http-message": "^1.0 || ^2.0" - }, - "require-dev": { - "andrewsville/php-token-reflection": "^1.4", - "aws/aws-php-sns-message-validator": "~1.0", - "behat/behat": "~3.0", - "composer/composer": "^1.10.22", - "dms/phpunit-arraysubset-asserts": "^0.4.0", - "doctrine/cache": "~1.4", - "ext-dom": "*", - "ext-openssl": "*", - "ext-pcntl": "*", - "ext-sockets": "*", - "nette/neon": "^2.3", - "paragonie/random_compat": ">= 2", - "phpunit/phpunit": "^5.6.3 || ^8.5 || ^9.5", - "psr/cache": "^1.0", - "psr/simple-cache": "^1.0", - "sebastian/comparator": "^1.2.3 || ^4.0", - "yoast/phpunit-polyfills": "^1.0" - }, - "suggest": { - "aws/aws-php-sns-message-validator": "To validate incoming SNS notifications", - "doctrine/cache": "To use the DoctrineCacheAdapter", - "ext-curl": "To send requests using cURL", - "ext-openssl": "Allows working with CloudFront private distributions and verifying received SNS messages", - "ext-sockets": "To use client-side monitoring" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Aws\\": "src/" - }, - "exclude-from-classmap": [ - "src/data/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Amazon Web Services", - "homepage": "http://aws.amazon.com" - } - ], - "description": "AWS SDK for PHP - Use Amazon Web Services in your PHP project", - "homepage": "http://aws.amazon.com/sdkforphp", - "keywords": [ - "amazon", - "aws", - "cloud", - "dynamodb", - "ec2", - "glacier", - "s3", - "sdk" - ], - "support": { - "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", - "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.321.11" - }, - "time": "2024-09-13T18:05:10+00:00" - }, - { - "name": "blade-ui-kit/blade-heroicons", - "version": "2.4.0", - "source": { - "type": "git", - "url": "https://github.com/blade-ui-kit/blade-heroicons.git", - "reference": "a7c377a4ef88cd54712e3e15cbed30446820da0b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/blade-ui-kit/blade-heroicons/zipball/a7c377a4ef88cd54712e3e15cbed30446820da0b", - "reference": "a7c377a4ef88cd54712e3e15cbed30446820da0b", - "shasum": "" - }, - "require": { - "blade-ui-kit/blade-icons": "^1.6", - "illuminate/support": "^9.0|^10.0|^11.0", - "php": "^8.0" - }, - "require-dev": { - "orchestra/testbench": "^7.0|^8.0|^9.0", - "phpunit/phpunit": "^9.0|^10.5|^11.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "BladeUI\\Heroicons\\BladeHeroiconsServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "BladeUI\\Heroicons\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Dries Vints", - "homepage": "https://driesvints.com" - } - ], - "description": "A package to easily make use of Heroicons in your Laravel Blade views.", - "homepage": "https://github.com/blade-ui-kit/blade-heroicons", - "keywords": [ - "Heroicons", - "blade", - "laravel" - ], - "support": { - "issues": "https://github.com/blade-ui-kit/blade-heroicons/issues", - "source": "https://github.com/blade-ui-kit/blade-heroicons/tree/2.4.0" - }, - "funding": [ - { - "url": "https://github.com/sponsors/driesvints", - "type": "github" - }, - { - "url": "https://www.paypal.com/paypalme/driesvints", - "type": "paypal" - } - ], - "time": "2024-07-16T07:00:01+00:00" - }, - { - "name": "blade-ui-kit/blade-icons", - "version": "1.7.1", - "source": { - "type": "git", - "url": "https://github.com/blade-ui-kit/blade-icons.git", - "reference": "8f787baf09d88cdfd6ec4dbaba11ebfa885f0595" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/blade-ui-kit/blade-icons/zipball/8f787baf09d88cdfd6ec4dbaba11ebfa885f0595", - "reference": "8f787baf09d88cdfd6ec4dbaba11ebfa885f0595", - "shasum": "" - }, - "require": { - "illuminate/contracts": "^8.0|^9.0|^10.0|^11.0", - "illuminate/filesystem": "^8.0|^9.0|^10.0|^11.0", - "illuminate/support": "^8.0|^9.0|^10.0|^11.0", - "illuminate/view": "^8.0|^9.0|^10.0|^11.0", - "php": "^7.4|^8.0", - "symfony/console": "^5.3|^6.0|^7.0", - "symfony/finder": "^5.3|^6.0|^7.0" - }, - "require-dev": { - "mockery/mockery": "^1.5.1", - "orchestra/testbench": "^6.0|^7.0|^8.0|^9.0", - "phpunit/phpunit": "^9.0|^10.5|^11.0" - }, - "bin": [ - "bin/blade-icons-generate" - ], - "type": "library", - "extra": { - "laravel": { - "providers": [ - "BladeUI\\Icons\\BladeIconsServiceProvider" - ] - } - }, - "autoload": { - "files": [ - "src/helpers.php" - ], - "psr-4": { - "BladeUI\\Icons\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Dries Vints", - "homepage": "https://driesvints.com" - } - ], - "description": "A package to easily make use of icons in your Laravel Blade views.", - "homepage": "https://github.com/blade-ui-kit/blade-icons", - "keywords": [ - "blade", - "icons", - "laravel", - "svg" - ], - "support": { - "issues": "https://github.com/blade-ui-kit/blade-icons/issues", - "source": "https://github.com/blade-ui-kit/blade-icons" - }, - "funding": [ - { - "url": "https://github.com/sponsors/driesvints", - "type": "github" - }, - { - "url": "https://www.paypal.com/paypalme/driesvints", - "type": "paypal" - } - ], - "time": "2024-08-14T14:25:11+00:00" - }, - { - "name": "brick/math", - "version": "0.12.1", - "source": { - "type": "git", - "url": "https://github.com/brick/math.git", - "reference": "f510c0a40911935b77b86859eb5223d58d660df1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/f510c0a40911935b77b86859eb5223d58d660df1", - "reference": "f510c0a40911935b77b86859eb5223d58d660df1", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^10.1", - "vimeo/psalm": "5.16.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Brick\\Math\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Arbitrary-precision arithmetic library", - "keywords": [ - "Arbitrary-precision", - "BigInteger", - "BigRational", - "arithmetic", - "bigdecimal", - "bignum", - "bignumber", - "brick", - "decimal", - "integer", - "math", - "mathematics", - "rational" - ], - "support": { - "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.12.1" - }, - "funding": [ - { - "url": "https://github.com/BenMorel", - "type": "github" - } - ], - "time": "2023-11-29T23:19:16+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": "danharrin/date-format-converter", - "version": "v0.3.1", - "source": { - "type": "git", - "url": "https://github.com/danharrin/date-format-converter.git", - "reference": "7c31171bc981e48726729a5f3a05a2d2b63f0b1e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/danharrin/date-format-converter/zipball/7c31171bc981e48726729a5f3a05a2d2b63f0b1e", - "reference": "7c31171bc981e48726729a5f3a05a2d2b63f0b1e", - "shasum": "" - }, - "require": { - "php": "^7.2|^8.0" - }, - "type": "library", - "autoload": { - "files": [ - "src/helpers.php", - "src/standards.php" - ], - "psr-4": { - "DanHarrin\\DateFormatConverter\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Dan Harrin", - "email": "dan@danharrin.com" - } - ], - "description": "Convert token-based date formats between standards.", - "homepage": "https://github.com/danharrin/date-format-converter", - "support": { - "issues": "https://github.com/danharrin/date-format-converter/issues", - "source": "https://github.com/danharrin/date-format-converter" - }, - "funding": [ - { - "url": "https://github.com/danharrin", - "type": "github" - } - ], - "time": "2024-06-13T09:38:44+00:00" - }, - { - "name": "danharrin/livewire-rate-limiting", - "version": "v1.3.1", - "source": { - "type": "git", - "url": "https://github.com/danharrin/livewire-rate-limiting.git", - "reference": "1a1b299e20de61f88ed6e94ea0bbcfc33aab1ddb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/danharrin/livewire-rate-limiting/zipball/1a1b299e20de61f88ed6e94ea0bbcfc33aab1ddb", - "reference": "1a1b299e20de61f88ed6e94ea0bbcfc33aab1ddb", - "shasum": "" - }, - "require": { - "illuminate/support": "^9.0|^10.0|^11.0", - "php": "^8.0" - }, - "require-dev": { - "livewire/livewire": "^3.0", - "livewire/volt": "^1.3", - "orchestra/testbench": "^7.0|^8.0|^9.0", - "phpunit/phpunit": "^9.0|^10.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "DanHarrin\\LivewireRateLimiting\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Dan Harrin", - "email": "dan@danharrin.com" - } - ], - "description": "Apply rate limiters to Laravel Livewire actions.", - "homepage": "https://github.com/danharrin/livewire-rate-limiting", - "support": { - "issues": "https://github.com/danharrin/livewire-rate-limiting/issues", - "source": "https://github.com/danharrin/livewire-rate-limiting" - }, - "funding": [ - { - "url": "https://github.com/danharrin", - "type": "github" - } - ], - "time": "2024-05-06T09:10:03+00:00" - }, - { - "name": "dflydev/dot-access-data", - "version": "v3.0.3", - "source": { - "type": "git", - "url": "https://github.com/dflydev/dflydev-dot-access-data.git", - "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/a23a2bf4f31d3518f3ecb38660c95715dfead60f", - "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^0.12.42", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", - "scrutinizer/ocular": "1.6.0", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^4.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Dflydev\\DotAccessData\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Dragonfly Development Inc.", - "email": "info@dflydev.com", - "homepage": "http://dflydev.com" - }, - { - "name": "Beau Simensen", - "email": "beau@dflydev.com", - "homepage": "http://beausimensen.com" - }, - { - "name": "Carlos Frutos", - "email": "carlos@kiwing.it", - "homepage": "https://github.com/cfrutos" - }, - { - "name": "Colin O'Dell", - "email": "colinodell@gmail.com", - "homepage": "https://www.colinodell.com" - } - ], - "description": "Given a deep data structure, access data by dot notation.", - "homepage": "https://github.com/dflydev/dflydev-dot-access-data", - "keywords": [ - "access", - "data", - "dot", - "notation" - ], - "support": { - "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", - "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.3" - }, - "time": "2024-07-08T12:26:09+00:00" - }, - { - "name": "doctrine/dbal", - "version": "4.1.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/dbal.git", - "reference": "7a8252418689feb860ea8dfeab66d64a56a64df8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/7a8252418689feb860ea8dfeab66d64a56a64df8", - "reference": "7a8252418689feb860ea8dfeab66d64a56a64df8", - "shasum": "" - }, - "require": { - "doctrine/deprecations": "^0.5.3|^1", - "php": "^8.1", - "psr/cache": "^1|^2|^3", - "psr/log": "^1|^2|^3" - }, - "require-dev": { - "doctrine/coding-standard": "12.0.0", - "fig/log-test": "^1", - "jetbrains/phpstorm-stubs": "2023.2", - "phpstan/phpstan": "1.12.0", - "phpstan/phpstan-phpunit": "1.4.0", - "phpstan/phpstan-strict-rules": "^1.6", - "phpunit/phpunit": "10.5.30", - "psalm/plugin-phpunit": "0.19.0", - "slevomat/coding-standard": "8.13.1", - "squizlabs/php_codesniffer": "3.10.2", - "symfony/cache": "^6.3.8|^7.0", - "symfony/console": "^5.4|^6.3|^7.0", - "vimeo/psalm": "5.25.0" - }, - "suggest": { - "symfony/console": "For helpful console commands such as SQL execution and import of files." - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\DBAL\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - } - ], - "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.", - "homepage": "https://www.doctrine-project.org/projects/dbal.html", - "keywords": [ - "abstraction", - "database", - "db2", - "dbal", - "mariadb", - "mssql", - "mysql", - "oci8", - "oracle", - "pdo", - "pgsql", - "postgresql", - "queryobject", - "sasql", - "sql", - "sqlite", - "sqlserver", - "sqlsrv" - ], - "support": { - "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/4.1.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%2Fdbal", - "type": "tidelift" - } - ], - "time": "2024-09-03T08:58:39+00:00" - }, - { - "name": "doctrine/deprecations", - "version": "1.1.3", - "source": { - "type": "git", - "url": "https://github.com/doctrine/deprecations.git", - "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", - "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9", - "phpstan/phpstan": "1.4.10 || 1.10.15", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psalm/plugin-phpunit": "0.18.4", - "psr/log": "^1 || ^2 || ^3", - "vimeo/psalm": "4.30.0 || 5.12.0" - }, - "suggest": { - "psr/log": "Allows logging deprecations via PSR-3 logger implementation" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", - "homepage": "https://www.doctrine-project.org/", - "support": { - "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.3" - }, - "time": "2024-01-30T19:34:25+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": "dragonmantank/cron-expression", - "version": "v3.3.3", - "source": { - "type": "git", - "url": "https://github.com/dragonmantank/cron-expression.git", - "reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/adfb1f505deb6384dc8b39804c5065dd3c8c8c0a", - "reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a", - "shasum": "" - }, - "require": { - "php": "^7.2|^8.0", - "webmozart/assert": "^1.0" - }, - "replace": { - "mtdowling/cron-expression": "^1.0" - }, - "require-dev": { - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^1.0", - "phpstan/phpstan-webmozart-assert": "^1.0", - "phpunit/phpunit": "^7.0|^8.0|^9.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Cron\\": "src/Cron/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Chris Tankersley", - "email": "chris@ctankersley.com", - "homepage": "https://github.com/dragonmantank" - } - ], - "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", - "keywords": [ - "cron", - "schedule" - ], - "support": { - "issues": "https://github.com/dragonmantank/cron-expression/issues", - "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.3" - }, - "funding": [ - { - "url": "https://github.com/dragonmantank", - "type": "github" - } - ], - "time": "2023-08-10T19:36:49+00:00" - }, - { - "name": "egulias/email-validator", - "version": "4.0.2", - "source": { - "type": "git", - "url": "https://github.com/egulias/EmailValidator.git", - "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ebaaf5be6c0286928352e054f2d5125608e5405e", - "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e", - "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.2" - }, - "funding": [ - { - "url": "https://github.com/egulias", - "type": "github" - } - ], - "time": "2023-10-06T06:47:41+00:00" - }, - { - "name": "filament/actions", - "version": "v3.2.112", - "source": { - "type": "git", - "url": "https://github.com/filamentphp/actions.git", - "reference": "df3310607b49dad302b03516c558c93cb82c5164" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/filamentphp/actions/zipball/df3310607b49dad302b03516c558c93cb82c5164", - "reference": "df3310607b49dad302b03516c558c93cb82c5164", - "shasum": "" - }, - "require": { - "anourvalar/eloquent-serialize": "^1.2", - "filament/forms": "self.version", - "filament/infolists": "self.version", - "filament/notifications": "self.version", - "filament/support": "self.version", - "illuminate/contracts": "^10.45|^11.0", - "illuminate/database": "^10.45|^11.0", - "illuminate/support": "^10.45|^11.0", - "league/csv": "^9.14", - "openspout/openspout": "^4.23", - "php": "^8.1", - "spatie/laravel-package-tools": "^1.9" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Filament\\Actions\\ActionsServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Filament\\Actions\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Easily add beautiful action modals to any Livewire component.", - "homepage": "https://github.com/filamentphp/filament", - "support": { - "issues": "https://github.com/filamentphp/filament/issues", - "source": "https://github.com/filamentphp/filament" - }, - "time": "2024-09-11T08:25:31+00:00" - }, - { - "name": "filament/filament", - "version": "v3.2.112", - "source": { - "type": "git", - "url": "https://github.com/filamentphp/panels.git", - "reference": "86aa182deceedce5970560c60ceae30c2c40632d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/filamentphp/panels/zipball/86aa182deceedce5970560c60ceae30c2c40632d", - "reference": "86aa182deceedce5970560c60ceae30c2c40632d", - "shasum": "" - }, - "require": { - "danharrin/livewire-rate-limiting": "^0.3|^1.0", - "filament/actions": "self.version", - "filament/forms": "self.version", - "filament/infolists": "self.version", - "filament/notifications": "self.version", - "filament/support": "self.version", - "filament/tables": "self.version", - "filament/widgets": "self.version", - "illuminate/auth": "^10.45|^11.0", - "illuminate/console": "^10.45|^11.0", - "illuminate/contracts": "^10.45|^11.0", - "illuminate/cookie": "^10.45|^11.0", - "illuminate/database": "^10.45|^11.0", - "illuminate/http": "^10.45|^11.0", - "illuminate/routing": "^10.45|^11.0", - "illuminate/session": "^10.45|^11.0", - "illuminate/support": "^10.45|^11.0", - "illuminate/view": "^10.45|^11.0", - "php": "^8.1", - "spatie/laravel-package-tools": "^1.9" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Filament\\FilamentServiceProvider" - ] - } - }, - "autoload": { - "files": [ - "src/global_helpers.php", - "src/helpers.php" - ], - "psr-4": { - "Filament\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A collection of full-stack components for accelerated Laravel app development.", - "homepage": "https://github.com/filamentphp/filament", - "support": { - "issues": "https://github.com/filamentphp/filament/issues", - "source": "https://github.com/filamentphp/filament" - }, - "time": "2024-09-11T08:25:51+00:00" - }, - { - "name": "filament/forms", - "version": "v3.2.112", - "source": { - "type": "git", - "url": "https://github.com/filamentphp/forms.git", - "reference": "99d72777f1e6dc5d42d936e7deb53148e4233ec3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/filamentphp/forms/zipball/99d72777f1e6dc5d42d936e7deb53148e4233ec3", - "reference": "99d72777f1e6dc5d42d936e7deb53148e4233ec3", - "shasum": "" - }, - "require": { - "danharrin/date-format-converter": "^0.3", - "filament/actions": "self.version", - "filament/support": "self.version", - "illuminate/console": "^10.45|^11.0", - "illuminate/contracts": "^10.45|^11.0", - "illuminate/database": "^10.45|^11.0", - "illuminate/filesystem": "^10.45|^11.0", - "illuminate/support": "^10.45|^11.0", - "illuminate/validation": "^10.45|^11.0", - "illuminate/view": "^10.45|^11.0", - "php": "^8.1", - "spatie/laravel-package-tools": "^1.9" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Filament\\Forms\\FormsServiceProvider" - ] - } - }, - "autoload": { - "files": [ - "src/helpers.php" - ], - "psr-4": { - "Filament\\Forms\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Easily add beautiful forms to any Livewire component.", - "homepage": "https://github.com/filamentphp/filament", - "support": { - "issues": "https://github.com/filamentphp/filament/issues", - "source": "https://github.com/filamentphp/filament" - }, - "time": "2024-09-12T12:27:13+00:00" - }, - { - "name": "filament/infolists", - "version": "v3.2.112", - "source": { - "type": "git", - "url": "https://github.com/filamentphp/infolists.git", - "reference": "e50bd9a5fc623320bd79508e3bfb72ff9e309edf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/filamentphp/infolists/zipball/e50bd9a5fc623320bd79508e3bfb72ff9e309edf", - "reference": "e50bd9a5fc623320bd79508e3bfb72ff9e309edf", - "shasum": "" - }, - "require": { - "filament/actions": "self.version", - "filament/support": "self.version", - "illuminate/console": "^10.45|^11.0", - "illuminate/contracts": "^10.45|^11.0", - "illuminate/database": "^10.45|^11.0", - "illuminate/filesystem": "^10.45|^11.0", - "illuminate/support": "^10.45|^11.0", - "illuminate/view": "^10.45|^11.0", - "php": "^8.1", - "spatie/laravel-package-tools": "^1.9" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Filament\\Infolists\\InfolistsServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Filament\\Infolists\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Easily add beautiful read-only infolists to any Livewire component.", - "homepage": "https://github.com/filamentphp/filament", - "support": { - "issues": "https://github.com/filamentphp/filament/issues", - "source": "https://github.com/filamentphp/filament" - }, - "time": "2024-09-11T08:25:25+00:00" - }, - { - "name": "filament/notifications", - "version": "v3.2.112", - "source": { - "type": "git", - "url": "https://github.com/filamentphp/notifications.git", - "reference": "03ea56e0729c98c65831ab0215285a7cb1c4117f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/filamentphp/notifications/zipball/03ea56e0729c98c65831ab0215285a7cb1c4117f", - "reference": "03ea56e0729c98c65831ab0215285a7cb1c4117f", - "shasum": "" - }, - "require": { - "filament/actions": "self.version", - "filament/support": "self.version", - "illuminate/contracts": "^10.45|^11.0", - "illuminate/filesystem": "^10.45|^11.0", - "illuminate/notifications": "^10.45|^11.0", - "illuminate/support": "^10.45|^11.0", - "php": "^8.1", - "spatie/laravel-package-tools": "^1.9" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Filament\\Notifications\\NotificationsServiceProvider" - ] - } - }, - "autoload": { - "files": [ - "src/Testing/Autoload.php" - ], - "psr-4": { - "Filament\\Notifications\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Easily add beautiful notifications to any Livewire app.", - "homepage": "https://github.com/filamentphp/filament", - "support": { - "issues": "https://github.com/filamentphp/filament/issues", - "source": "https://github.com/filamentphp/filament" - }, - "time": "2024-07-31T11:53:11+00:00" - }, - { - "name": "filament/support", - "version": "v3.2.112", - "source": { - "type": "git", - "url": "https://github.com/filamentphp/support.git", - "reference": "d07086506d39f318398c13a0b8d689f75cbc14d6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/filamentphp/support/zipball/d07086506d39f318398c13a0b8d689f75cbc14d6", - "reference": "d07086506d39f318398c13a0b8d689f75cbc14d6", - "shasum": "" - }, - "require": { - "blade-ui-kit/blade-heroicons": "^2.2.1", - "doctrine/dbal": "^3.2|^4.0", - "ext-intl": "*", - "illuminate/contracts": "^10.45|^11.0", - "illuminate/support": "^10.45|^11.0", - "illuminate/view": "^10.45|^11.0", - "kirschbaum-development/eloquent-power-joins": "^3.0", - "livewire/livewire": "^3.4.10", - "php": "^8.1", - "ryangjchandler/blade-capture-directive": "^0.2|^0.3|^1.0", - "spatie/color": "^1.5", - "spatie/invade": "^1.0|^2.0", - "spatie/laravel-package-tools": "^1.9", - "symfony/console": "^6.0|^7.0", - "symfony/html-sanitizer": "^6.1|^7.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Filament\\Support\\SupportServiceProvider" - ] - } - }, - "autoload": { - "files": [ - "src/helpers.php" - ], - "psr-4": { - "Filament\\Support\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Core helper methods and foundation code for all Filament packages.", - "homepage": "https://github.com/filamentphp/filament", - "support": { - "issues": "https://github.com/filamentphp/filament/issues", - "source": "https://github.com/filamentphp/filament" - }, - "time": "2024-09-11T08:25:46+00:00" - }, - { - "name": "filament/tables", - "version": "v3.2.112", - "source": { - "type": "git", - "url": "https://github.com/filamentphp/tables.git", - "reference": "4285a031dd36250a86710631a5b1fea1372097a1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/filamentphp/tables/zipball/4285a031dd36250a86710631a5b1fea1372097a1", - "reference": "4285a031dd36250a86710631a5b1fea1372097a1", - "shasum": "" - }, - "require": { - "filament/actions": "self.version", - "filament/forms": "self.version", - "filament/support": "self.version", - "illuminate/console": "^10.45|^11.0", - "illuminate/contracts": "^10.45|^11.0", - "illuminate/database": "^10.45|^11.0", - "illuminate/filesystem": "^10.45|^11.0", - "illuminate/support": "^10.45|^11.0", - "illuminate/view": "^10.45|^11.0", - "php": "^8.1", - "spatie/laravel-package-tools": "^1.9" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Filament\\Tables\\TablesServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Filament\\Tables\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Easily add beautiful tables to any Livewire component.", - "homepage": "https://github.com/filamentphp/filament", - "support": { - "issues": "https://github.com/filamentphp/filament/issues", - "source": "https://github.com/filamentphp/filament" - }, - "time": "2024-09-11T08:25:43+00:00" - }, - { - "name": "filament/widgets", - "version": "v3.2.112", - "source": { - "type": "git", - "url": "https://github.com/filamentphp/widgets.git", - "reference": "909fc82bae2cf41d70b3cd7dda8982245b2ea723" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/filamentphp/widgets/zipball/909fc82bae2cf41d70b3cd7dda8982245b2ea723", - "reference": "909fc82bae2cf41d70b3cd7dda8982245b2ea723", - "shasum": "" - }, - "require": { - "filament/support": "self.version", - "php": "^8.1", - "spatie/laravel-package-tools": "^1.9" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Filament\\Widgets\\WidgetsServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Filament\\Widgets\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Easily add beautiful dashboard widgets to any Livewire component.", - "homepage": "https://github.com/filamentphp/filament", - "support": { - "issues": "https://github.com/filamentphp/filament/issues", - "source": "https://github.com/filamentphp/filament" - }, - "time": "2024-07-31T11:53:30+00:00" - }, - { - "name": "fruitcake/php-cors", - "version": "v1.3.0", - "source": { - "type": "git", - "url": "https://github.com/fruitcake/php-cors.git", - "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/3d158f36e7875e2f040f37bc0573956240a5a38b", - "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b", - "shasum": "" - }, - "require": { - "php": "^7.4|^8.0", - "symfony/http-foundation": "^4.4|^5.4|^6|^7" - }, - "require-dev": { - "phpstan/phpstan": "^1.4", - "phpunit/phpunit": "^9", - "squizlabs/php_codesniffer": "^3.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2-dev" - } - }, - "autoload": { - "psr-4": { - "Fruitcake\\Cors\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fruitcake", - "homepage": "https://fruitcake.nl" - }, - { - "name": "Barryvdh", - "email": "barryvdh@gmail.com" - } - ], - "description": "Cross-origin resource sharing library for the Symfony HttpFoundation", - "homepage": "https://github.com/fruitcake/php-cors", - "keywords": [ - "cors", - "laravel", - "symfony" - ], - "support": { - "issues": "https://github.com/fruitcake/php-cors/issues", - "source": "https://github.com/fruitcake/php-cors/tree/v1.3.0" - }, - "funding": [ - { - "url": "https://fruitcake.nl", - "type": "custom" - }, - { - "url": "https://github.com/barryvdh", - "type": "github" - } - ], - "time": "2023-10-12T05:21:21+00:00" - }, - { - "name": "graham-campbell/result-type", - "version": "v1.1.3", - "source": { - "type": "git", - "url": "https://github.com/GrahamCampbell/Result-Type.git", - "reference": "3ba905c11371512af9d9bdd27d99b782216b6945" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/3ba905c11371512af9d9bdd27d99b782216b6945", - "reference": "3ba905c11371512af9d9bdd27d99b782216b6945", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9.3" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" - }, - "type": "library", - "autoload": { - "psr-4": { - "GrahamCampbell\\ResultType\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - } - ], - "description": "An Implementation Of The Result Type", - "keywords": [ - "Graham Campbell", - "GrahamCampbell", - "Result Type", - "Result-Type", - "result" - ], - "support": { - "issues": "https://github.com/GrahamCampbell/Result-Type/issues", - "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.3" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", - "type": "tidelift" - } - ], - "time": "2024-07-20T21:45:45+00:00" - }, - { - "name": "guzzlehttp/guzzle", - "version": "7.9.2", - "source": { - "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "d281ed313b989f213357e3be1a179f02196ac99b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d281ed313b989f213357e3be1a179f02196ac99b", - "reference": "d281ed313b989f213357e3be1a179f02196ac99b", - "shasum": "" - }, - "require": { - "ext-json": "*", - "guzzlehttp/promises": "^1.5.3 || ^2.0.3", - "guzzlehttp/psr7": "^2.7.0", - "php": "^7.2.5 || ^8.0", - "psr/http-client": "^1.0", - "symfony/deprecation-contracts": "^2.2 || ^3.0" - }, - "provide": { - "psr/http-client-implementation": "1.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", - "ext-curl": "*", - "guzzle/client-integration-tests": "3.0.2", - "php-http/message-factory": "^1.1", - "phpunit/phpunit": "^8.5.39 || ^9.6.20", - "psr/log": "^1.1 || ^2.0 || ^3.0" - }, - "suggest": { - "ext-curl": "Required for CURL handler support", - "ext-intl": "Required for Internationalized Domain Name (IDN) support", - "psr/log": "Required for using the Log middleware" - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - } - }, - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "GuzzleHttp\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Jeremy Lindblom", - "email": "jeremeamia@gmail.com", - "homepage": "https://github.com/jeremeamia" - }, - { - "name": "George Mponos", - "email": "gmponos@gmail.com", - "homepage": "https://github.com/gmponos" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://github.com/sagikazarmark" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - } - ], - "description": "Guzzle is a PHP HTTP client library", - "keywords": [ - "client", - "curl", - "framework", - "http", - "http client", - "psr-18", - "psr-7", - "rest", - "web service" - ], - "support": { - "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.9.2" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", - "type": "tidelift" - } - ], - "time": "2024-07-24T11:22:20+00:00" - }, - { - "name": "guzzlehttp/promises", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/guzzle/promises.git", - "reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8", - "reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.39 || ^9.6.20" - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - } - ], - "description": "Guzzle promises library", - "keywords": [ - "promise" - ], - "support": { - "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.0.3" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", - "type": "tidelift" - } - ], - "time": "2024-07-18T10:29:17+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": "guzzlehttp/uri-template", - "version": "v1.0.3", - "source": { - "type": "git", - "url": "https://github.com/guzzle/uri-template.git", - "reference": "ecea8feef63bd4fef1f037ecb288386999ecc11c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/uri-template/zipball/ecea8feef63bd4fef1f037ecb288386999ecc11c", - "reference": "ecea8feef63bd4fef1f037ecb288386999ecc11c", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0", - "symfony/polyfill-php80": "^1.24" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.36 || ^9.6.15", - "uri-template/tests": "1.0.0" - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\UriTemplate\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "George Mponos", - "email": "gmponos@gmail.com", - "homepage": "https://github.com/gmponos" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - } - ], - "description": "A polyfill class for uri_template of PHP", - "keywords": [ - "guzzlehttp", - "uri-template" - ], - "support": { - "issues": "https://github.com/guzzle/uri-template/issues", - "source": "https://github.com/guzzle/uri-template/tree/v1.0.3" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/uri-template", - "type": "tidelift" - } - ], - "time": "2023-12-03T19:50:20+00:00" - }, - { - "name": "kirschbaum-development/eloquent-power-joins", - "version": "3.5.8", - "source": { - "type": "git", - "url": "https://github.com/kirschbaum-development/eloquent-power-joins.git", - "reference": "397ef08f15ceff48111fd7f57d9f1fd41bf1a453" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/kirschbaum-development/eloquent-power-joins/zipball/397ef08f15ceff48111fd7f57d9f1fd41bf1a453", - "reference": "397ef08f15ceff48111fd7f57d9f1fd41bf1a453", - "shasum": "" - }, - "require": { - "illuminate/database": "^8.0|^9.0|^10.0|^11.0", - "illuminate/support": "^8.0|^9.0|^10.0|^11.0", - "php": "^8.0" - }, - "require-dev": { - "laravel/legacy-factories": "^1.0@dev", - "orchestra/testbench": "^4.0|^5.0|^6.0|^7.0|^8.0|^9.0", - "phpunit/phpunit": "^8.0|^9.0|^10.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Kirschbaum\\PowerJoins\\PowerJoinsServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Kirschbaum\\PowerJoins\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Luis Dalmolin", - "email": "luis.nh@gmail.com", - "role": "Developer" - } - ], - "description": "The Laravel magic applied to joins.", - "homepage": "https://github.com/kirschbaum-development/eloquent-power-joins", - "keywords": [ - "eloquent", - "join", - "laravel", - "mysql" - ], - "support": { - "issues": "https://github.com/kirschbaum-development/eloquent-power-joins/issues", - "source": "https://github.com/kirschbaum-development/eloquent-power-joins/tree/3.5.8" - }, - "time": "2024-09-10T10:28:05+00:00" - }, - { - "name": "laravel/framework", - "version": "v11.23.5", - "source": { - "type": "git", - "url": "https://github.com/laravel/framework.git", - "reference": "16b31ab0e1dad5cb2ed6dcc1818c02f02fc48453" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/16b31ab0e1dad5cb2ed6dcc1818c02f02fc48453", - "reference": "16b31ab0e1dad5cb2ed6dcc1818c02f02fc48453", - "shasum": "" - }, - "require": { - "brick/math": "^0.9.3|^0.10.2|^0.11|^0.12", - "composer-runtime-api": "^2.2", - "doctrine/inflector": "^2.0.5", - "dragonmantank/cron-expression": "^3.3.2", - "egulias/email-validator": "^3.2.1|^4.0", - "ext-ctype": "*", - "ext-filter": "*", - "ext-hash": "*", - "ext-mbstring": "*", - "ext-openssl": "*", - "ext-session": "*", - "ext-tokenizer": "*", - "fruitcake/php-cors": "^1.3", - "guzzlehttp/guzzle": "^7.8", - "guzzlehttp/uri-template": "^1.0", - "laravel/prompts": "^0.1.18", - "laravel/serializable-closure": "^1.3", - "league/commonmark": "^2.2.1", - "league/flysystem": "^3.8.0", - "monolog/monolog": "^3.0", - "nesbot/carbon": "^2.72.2|^3.0", - "nunomaduro/termwind": "^2.0", - "php": "^8.2", - "psr/container": "^1.1.1|^2.0.1", - "psr/log": "^1.0|^2.0|^3.0", - "psr/simple-cache": "^1.0|^2.0|^3.0", - "ramsey/uuid": "^4.7", - "symfony/console": "^7.0", - "symfony/error-handler": "^7.0", - "symfony/finder": "^7.0", - "symfony/http-foundation": "^7.0", - "symfony/http-kernel": "^7.0", - "symfony/mailer": "^7.0", - "symfony/mime": "^7.0", - "symfony/polyfill-php83": "^1.28", - "symfony/process": "^7.0", - "symfony/routing": "^7.0", - "symfony/uid": "^7.0", - "symfony/var-dumper": "^7.0", - "tijsverkoyen/css-to-inline-styles": "^2.2.5", - "vlucas/phpdotenv": "^5.4.1", - "voku/portable-ascii": "^2.0" - }, - "conflict": { - "mockery/mockery": "1.6.8", - "tightenco/collect": "<5.5.33" - }, - "provide": { - "psr/container-implementation": "1.1|2.0", - "psr/log-implementation": "1.0|2.0|3.0", - "psr/simple-cache-implementation": "1.0|2.0|3.0" - }, - "replace": { - "illuminate/auth": "self.version", - "illuminate/broadcasting": "self.version", - "illuminate/bus": "self.version", - "illuminate/cache": "self.version", - "illuminate/collections": "self.version", - "illuminate/concurrency": "self.version", - "illuminate/conditionable": "self.version", - "illuminate/config": "self.version", - "illuminate/console": "self.version", - "illuminate/container": "self.version", - "illuminate/contracts": "self.version", - "illuminate/cookie": "self.version", - "illuminate/database": "self.version", - "illuminate/encryption": "self.version", - "illuminate/events": "self.version", - "illuminate/filesystem": "self.version", - "illuminate/hashing": "self.version", - "illuminate/http": "self.version", - "illuminate/log": "self.version", - "illuminate/macroable": "self.version", - "illuminate/mail": "self.version", - "illuminate/notifications": "self.version", - "illuminate/pagination": "self.version", - "illuminate/pipeline": "self.version", - "illuminate/process": "self.version", - "illuminate/queue": "self.version", - "illuminate/redis": "self.version", - "illuminate/routing": "self.version", - "illuminate/session": "self.version", - "illuminate/support": "self.version", - "illuminate/testing": "self.version", - "illuminate/translation": "self.version", - "illuminate/validation": "self.version", - "illuminate/view": "self.version", - "spatie/once": "*" - }, - "require-dev": { - "ably/ably-php": "^1.0", - "aws/aws-sdk-php": "^3.235.5", - "ext-gmp": "*", - "fakerphp/faker": "^1.23", - "league/flysystem-aws-s3-v3": "^3.0", - "league/flysystem-ftp": "^3.0", - "league/flysystem-path-prefixing": "^3.3", - "league/flysystem-read-only": "^3.3", - "league/flysystem-sftp-v3": "^3.0", - "mockery/mockery": "^1.6", - "nyholm/psr7": "^1.2", - "orchestra/testbench-core": "^9.4.0", - "pda/pheanstalk": "^5.0", - "phpstan/phpstan": "^1.11.5", - "phpunit/phpunit": "^10.5|^11.0", - "predis/predis": "^2.0.2", - "resend/resend-php": "^0.10.0", - "symfony/cache": "^7.0", - "symfony/http-client": "^7.0", - "symfony/psr-http-message-bridge": "^7.0" - }, - "suggest": { - "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", - "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.235.5).", - "brianium/paratest": "Required to run tests in parallel (^7.0|^8.0).", - "ext-apcu": "Required to use the APC cache driver.", - "ext-fileinfo": "Required to use the Filesystem class.", - "ext-ftp": "Required to use the Flysystem FTP driver.", - "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", - "ext-memcached": "Required to use the memcache cache driver.", - "ext-pcntl": "Required to use all features of the queue worker and console signal trapping.", - "ext-pdo": "Required to use all database features.", - "ext-posix": "Required to use all features of the queue worker.", - "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0|^6.0).", - "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", - "filp/whoops": "Required for friendly error pages in development (^2.14.3).", - "laravel/tinker": "Required to use the tinker console command (^2.0).", - "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.0).", - "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.0).", - "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.3).", - "league/flysystem-read-only": "Required to use read-only disks (^3.3)", - "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.0).", - "mockery/mockery": "Required to use mocking (^1.6).", - "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", - "pda/pheanstalk": "Required to use the beanstalk queue driver (^5.0).", - "phpunit/phpunit": "Required to use assertions and run tests (^10.5|^11.0).", - "predis/predis": "Required to use the predis connector (^2.0.2).", - "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", - "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", - "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0).", - "symfony/cache": "Required to PSR-6 cache bridge (^7.0).", - "symfony/filesystem": "Required to enable support for relative symbolic links (^7.0).", - "symfony/http-client": "Required to enable support for the Symfony API mail transports (^7.0).", - "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^7.0).", - "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^7.0).", - "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^7.0)." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "11.x-dev" - } - }, - "autoload": { - "files": [ - "src/Illuminate/Collections/helpers.php", - "src/Illuminate/Events/functions.php", - "src/Illuminate/Filesystem/functions.php", - "src/Illuminate/Foundation/helpers.php", - "src/Illuminate/Log/functions.php", - "src/Illuminate/Support/helpers.php" - ], - "psr-4": { - "Illuminate\\": "src/Illuminate/", - "Illuminate\\Support\\": [ - "src/Illuminate/Macroable/", - "src/Illuminate/Collections/", - "src/Illuminate/Conditionable/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Laravel Framework.", - "homepage": "https://laravel.com", - "keywords": [ - "framework", - "laravel" - ], - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2024-09-13T13:36:30+00:00" - }, - { - "name": "laravel/prompts", - "version": "v0.1.25", - "source": { - "type": "git", - "url": "https://github.com/laravel/prompts.git", - "reference": "7b4029a84c37cb2725fc7f011586e2997040bc95" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/prompts/zipball/7b4029a84c37cb2725fc7f011586e2997040bc95", - "reference": "7b4029a84c37cb2725fc7f011586e2997040bc95", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "illuminate/collections": "^10.0|^11.0", - "php": "^8.1", - "symfony/console": "^6.2|^7.0" - }, - "conflict": { - "illuminate/console": ">=10.17.0 <10.25.0", - "laravel/framework": ">=10.17.0 <10.25.0" - }, - "require-dev": { - "mockery/mockery": "^1.5", - "pestphp/pest": "^2.3", - "phpstan/phpstan": "^1.11", - "phpstan/phpstan-mockery": "^1.1" - }, - "suggest": { - "ext-pcntl": "Required for the spinner to be animated." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "0.1.x-dev" - } - }, - "autoload": { - "files": [ - "src/helpers.php" - ], - "psr-4": { - "Laravel\\Prompts\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Add beautiful and user-friendly forms to your command-line applications.", - "support": { - "issues": "https://github.com/laravel/prompts/issues", - "source": "https://github.com/laravel/prompts/tree/v0.1.25" - }, - "time": "2024-08-12T22:06:33+00:00" - }, - { - "name": "laravel/serializable-closure", - "version": "v1.3.4", - "source": { - "type": "git", - "url": "https://github.com/laravel/serializable-closure.git", - "reference": "61b87392d986dc49ad5ef64e75b1ff5fee24ef81" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/61b87392d986dc49ad5ef64e75b1ff5fee24ef81", - "reference": "61b87392d986dc49ad5ef64e75b1ff5fee24ef81", - "shasum": "" - }, - "require": { - "php": "^7.3|^8.0" - }, - "require-dev": { - "illuminate/support": "^8.0|^9.0|^10.0|^11.0", - "nesbot/carbon": "^2.61|^3.0", - "pestphp/pest": "^1.21.3", - "phpstan/phpstan": "^1.8.2", - "symfony/var-dumper": "^5.4.11|^6.2.0|^7.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Laravel\\SerializableClosure\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - }, - { - "name": "Nuno Maduro", - "email": "nuno@laravel.com" - } - ], - "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.", - "keywords": [ - "closure", - "laravel", - "serializable" - ], - "support": { - "issues": "https://github.com/laravel/serializable-closure/issues", - "source": "https://github.com/laravel/serializable-closure" - }, - "time": "2024-08-02T07:48:17+00:00" - }, - { - "name": "laravel/tinker", - "version": "v2.9.0", - "source": { - "type": "git", - "url": "https://github.com/laravel/tinker.git", - "reference": "502e0fe3f0415d06d5db1f83a472f0f3b754bafe" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/tinker/zipball/502e0fe3f0415d06d5db1f83a472f0f3b754bafe", - "reference": "502e0fe3f0415d06d5db1f83a472f0f3b754bafe", - "shasum": "" - }, - "require": { - "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", - "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", - "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", - "php": "^7.2.5|^8.0", - "psy/psysh": "^0.11.1|^0.12.0", - "symfony/var-dumper": "^4.3.4|^5.0|^6.0|^7.0" - }, - "require-dev": { - "mockery/mockery": "~1.3.3|^1.4.2", - "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^8.5.8|^9.3.3" - }, - "suggest": { - "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0|^11.0)." - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Laravel\\Tinker\\TinkerServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Laravel\\Tinker\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "Powerful REPL for the Laravel framework.", - "keywords": [ - "REPL", - "Tinker", - "laravel", - "psysh" - ], - "support": { - "issues": "https://github.com/laravel/tinker/issues", - "source": "https://github.com/laravel/tinker/tree/v2.9.0" - }, - "time": "2024-01-04T16:10:04+00:00" - }, - { - "name": "league/commonmark", - "version": "2.5.3", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/commonmark.git", - "reference": "b650144166dfa7703e62a22e493b853b58d874b0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/b650144166dfa7703e62a22e493b853b58d874b0", - "reference": "b650144166dfa7703e62a22e493b853b58d874b0", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "league/config": "^1.1.1", - "php": "^7.4 || ^8.0", - "psr/event-dispatcher": "^1.0", - "symfony/deprecation-contracts": "^2.1 || ^3.0", - "symfony/polyfill-php80": "^1.16" - }, - "require-dev": { - "cebe/markdown": "^1.0", - "commonmark/cmark": "0.31.1", - "commonmark/commonmark.js": "0.31.1", - "composer/package-versions-deprecated": "^1.8", - "embed/embed": "^4.4", - "erusev/parsedown": "^1.0", - "ext-json": "*", - "github/gfm": "0.29.0", - "michelf/php-markdown": "^1.4 || ^2.0", - "nyholm/psr7": "^1.5", - "phpstan/phpstan": "^1.8.2", - "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0", - "scrutinizer/ocular": "^1.8.1", - "symfony/finder": "^5.3 | ^6.0 || ^7.0", - "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 || ^7.0", - "unleashedtech/php-coding-standard": "^3.1.1", - "vimeo/psalm": "^4.24.0 || ^5.0.0" - }, - "suggest": { - "symfony/yaml": "v2.3+ required if using the Front Matter extension" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.6-dev" - } - }, - "autoload": { - "psr-4": { - "League\\CommonMark\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Colin O'Dell", - "email": "colinodell@gmail.com", - "homepage": "https://www.colinodell.com", - "role": "Lead Developer" - } - ], - "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)", - "homepage": "https://commonmark.thephpleague.com", - "keywords": [ - "commonmark", - "flavored", - "gfm", - "github", - "github-flavored", - "markdown", - "md", - "parser" - ], - "support": { - "docs": "https://commonmark.thephpleague.com/", - "forum": "https://github.com/thephpleague/commonmark/discussions", - "issues": "https://github.com/thephpleague/commonmark/issues", - "rss": "https://github.com/thephpleague/commonmark/releases.atom", - "source": "https://github.com/thephpleague/commonmark" - }, - "funding": [ - { - "url": "https://www.colinodell.com/sponsor", - "type": "custom" - }, - { - "url": "https://www.paypal.me/colinpodell/10.00", - "type": "custom" - }, - { - "url": "https://github.com/colinodell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/league/commonmark", - "type": "tidelift" - } - ], - "time": "2024-08-16T11:46:16+00:00" - }, - { - "name": "league/config", - "version": "v1.2.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/config.git", - "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/config/zipball/754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", - "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", - "shasum": "" - }, - "require": { - "dflydev/dot-access-data": "^3.0.1", - "nette/schema": "^1.2", - "php": "^7.4 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.8.2", - "phpunit/phpunit": "^9.5.5", - "scrutinizer/ocular": "^1.8.1", - "unleashedtech/php-coding-standard": "^3.1", - "vimeo/psalm": "^4.7.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.2-dev" - } - }, - "autoload": { - "psr-4": { - "League\\Config\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Colin O'Dell", - "email": "colinodell@gmail.com", - "homepage": "https://www.colinodell.com", - "role": "Lead Developer" - } - ], - "description": "Define configuration arrays with strict schemas and access values with dot notation", - "homepage": "https://config.thephpleague.com", - "keywords": [ - "array", - "config", - "configuration", - "dot", - "dot-access", - "nested", - "schema" - ], - "support": { - "docs": "https://config.thephpleague.com/", - "issues": "https://github.com/thephpleague/config/issues", - "rss": "https://github.com/thephpleague/config/releases.atom", - "source": "https://github.com/thephpleague/config" - }, - "funding": [ - { - "url": "https://www.colinodell.com/sponsor", - "type": "custom" - }, - { - "url": "https://www.paypal.me/colinpodell/10.00", - "type": "custom" - }, - { - "url": "https://github.com/colinodell", - "type": "github" - } - ], - "time": "2022-12-11T20:36:23+00:00" - }, - { - "name": "league/csv", - "version": "9.16.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/csv.git", - "reference": "998280c6c34bd67d8125fdc8b45bae28d761b440" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/csv/zipball/998280c6c34bd67d8125fdc8b45bae28d761b440", - "reference": "998280c6c34bd67d8125fdc8b45bae28d761b440", - "shasum": "" - }, - "require": { - "ext-filter": "*", - "php": "^8.1.2" - }, - "require-dev": { - "doctrine/collections": "^2.2.2", - "ext-dom": "*", - "ext-xdebug": "*", - "friendsofphp/php-cs-fixer": "^3.57.1", - "phpbench/phpbench": "^1.2.15", - "phpstan/phpstan": "^1.11.1", - "phpstan/phpstan-deprecation-rules": "^1.2.0", - "phpstan/phpstan-phpunit": "^1.4.0", - "phpstan/phpstan-strict-rules": "^1.6.0", - "phpunit/phpunit": "^10.5.16 || ^11.1.3", - "symfony/var-dumper": "^6.4.6 || ^7.0.7" - }, - "suggest": { - "ext-dom": "Required to use the XMLConverter and the HTMLConverter classes", - "ext-iconv": "Needed to ease transcoding CSV using iconv stream filters", - "ext-mbstring": "Needed to ease transcoding CSV using mb stream filters" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.x-dev" - } - }, - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "League\\Csv\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ignace Nyamagana Butera", - "email": "nyamsprod@gmail.com", - "homepage": "https://github.com/nyamsprod/", - "role": "Developer" - } - ], - "description": "CSV data manipulation made easy in PHP", - "homepage": "https://csv.thephpleague.com", - "keywords": [ - "convert", - "csv", - "export", - "filter", - "import", - "read", - "transform", - "write" - ], - "support": { - "docs": "https://csv.thephpleague.com", - "issues": "https://github.com/thephpleague/csv/issues", - "rss": "https://github.com/thephpleague/csv/releases.atom", - "source": "https://github.com/thephpleague/csv" - }, - "funding": [ - { - "url": "https://github.com/sponsors/nyamsprod", - "type": "github" - } - ], - "time": "2024-05-24T11:04:54+00:00" - }, - { - "name": "league/flysystem", - "version": "3.28.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/flysystem.git", - "reference": "e611adab2b1ae2e3072fa72d62c62f52c2bf1f0c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/e611adab2b1ae2e3072fa72d62c62f52c2bf1f0c", - "reference": "e611adab2b1ae2e3072fa72d62c62f52c2bf1f0c", - "shasum": "" - }, - "require": { - "league/flysystem-local": "^3.0.0", - "league/mime-type-detection": "^1.0.0", - "php": "^8.0.2" - }, - "conflict": { - "async-aws/core": "<1.19.0", - "async-aws/s3": "<1.14.0", - "aws/aws-sdk-php": "3.209.31 || 3.210.0", - "guzzlehttp/guzzle": "<7.0", - "guzzlehttp/ringphp": "<1.1.1", - "phpseclib/phpseclib": "3.0.15", - "symfony/http-client": "<5.2" - }, - "require-dev": { - "async-aws/s3": "^1.5 || ^2.0", - "async-aws/simple-s3": "^1.1 || ^2.0", - "aws/aws-sdk-php": "^3.295.10", - "composer/semver": "^3.0", - "ext-fileinfo": "*", - "ext-ftp": "*", - "ext-mongodb": "^1.3", - "ext-zip": "*", - "friendsofphp/php-cs-fixer": "^3.5", - "google/cloud-storage": "^1.23", - "guzzlehttp/psr7": "^2.6", - "microsoft/azure-storage-blob": "^1.1", - "mongodb/mongodb": "^1.2", - "phpseclib/phpseclib": "^3.0.36", - "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^9.5.11|^10.0", - "sabre/dav": "^4.6.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "League\\Flysystem\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Frank de Jonge", - "email": "info@frankdejonge.nl" - } - ], - "description": "File storage abstraction for PHP", - "keywords": [ - "WebDAV", - "aws", - "cloud", - "file", - "files", - "filesystem", - "filesystems", - "ftp", - "s3", - "sftp", - "storage" - ], - "support": { - "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/3.28.0" - }, - "time": "2024-05-22T10:09:12+00:00" - }, - { - "name": "league/flysystem-aws-s3-v3", - "version": "3.28.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git", - "reference": "22071ef1604bc776f5ff2468ac27a752514665c8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/22071ef1604bc776f5ff2468ac27a752514665c8", - "reference": "22071ef1604bc776f5ff2468ac27a752514665c8", - "shasum": "" - }, - "require": { - "aws/aws-sdk-php": "^3.295.10", - "league/flysystem": "^3.10.0", - "league/mime-type-detection": "^1.0.0", - "php": "^8.0.2" - }, - "conflict": { - "guzzlehttp/guzzle": "<7.0", - "guzzlehttp/ringphp": "<1.1.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "League\\Flysystem\\AwsS3V3\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Frank de Jonge", - "email": "info@frankdejonge.nl" - } - ], - "description": "AWS S3 filesystem adapter for Flysystem.", - "keywords": [ - "Flysystem", - "aws", - "file", - "files", - "filesystem", - "s3", - "storage" - ], - "support": { - "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.28.0" - }, - "time": "2024-05-06T20:05:52+00:00" - }, - { - "name": "league/flysystem-local", - "version": "3.28.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/flysystem-local.git", - "reference": "13f22ea8be526ea58c2ddff9e158ef7c296e4f40" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/13f22ea8be526ea58c2ddff9e158ef7c296e4f40", - "reference": "13f22ea8be526ea58c2ddff9e158ef7c296e4f40", - "shasum": "" - }, - "require": { - "ext-fileinfo": "*", - "league/flysystem": "^3.0.0", - "league/mime-type-detection": "^1.0.0", - "php": "^8.0.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "League\\Flysystem\\Local\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Frank de Jonge", - "email": "info@frankdejonge.nl" - } - ], - "description": "Local filesystem adapter for Flysystem.", - "keywords": [ - "Flysystem", - "file", - "files", - "filesystem", - "local" - ], - "support": { - "source": "https://github.com/thephpleague/flysystem-local/tree/3.28.0" - }, - "time": "2024-05-06T20:05:52+00:00" - }, - { - "name": "league/mime-type-detection", - "version": "1.15.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/mime-type-detection.git", - "reference": "ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301", - "reference": "ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301", - "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.15.0" - }, - "funding": [ - { - "url": "https://github.com/frankdejonge", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/league/flysystem", - "type": "tidelift" - } - ], - "time": "2024-01-28T23:22:08+00:00" - }, - { - "name": "league/uri", - "version": "7.4.1", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/uri.git", - "reference": "bedb6e55eff0c933668addaa7efa1e1f2c417cc4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri/zipball/bedb6e55eff0c933668addaa7efa1e1f2c417cc4", - "reference": "bedb6e55eff0c933668addaa7efa1e1f2c417cc4", - "shasum": "" - }, - "require": { - "league/uri-interfaces": "^7.3", - "php": "^8.1" - }, - "conflict": { - "league/uri-schemes": "^1.0" - }, - "suggest": { - "ext-bcmath": "to improve IPV4 host parsing", - "ext-fileinfo": "to create Data URI from file contennts", - "ext-gmp": "to improve IPV4 host parsing", - "ext-intl": "to handle IDN host with the best performance", - "jeremykendall/php-domain-parser": "to resolve Public Suffix and Top Level Domain", - "league/uri-components": "Needed to easily manipulate URI objects components", - "php-64bit": "to improve IPV4 host parsing", - "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "7.x-dev" - } - }, - "autoload": { - "psr-4": { - "League\\Uri\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ignace Nyamagana Butera", - "email": "nyamsprod@gmail.com", - "homepage": "https://nyamsprod.com" - } - ], - "description": "URI manipulation library", - "homepage": "https://uri.thephpleague.com", - "keywords": [ - "data-uri", - "file-uri", - "ftp", - "hostname", - "http", - "https", - "middleware", - "parse_str", - "parse_url", - "psr-7", - "query-string", - "querystring", - "rfc3986", - "rfc3987", - "rfc6570", - "uri", - "uri-template", - "url", - "ws" - ], - "support": { - "docs": "https://uri.thephpleague.com", - "forum": "https://thephpleague.slack.com", - "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri/tree/7.4.1" - }, - "funding": [ - { - "url": "https://github.com/sponsors/nyamsprod", - "type": "github" - } - ], - "time": "2024-03-23T07:42:40+00:00" - }, - { - "name": "league/uri-interfaces", - "version": "7.4.1", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/uri-interfaces.git", - "reference": "8d43ef5c841032c87e2de015972c06f3865ef718" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/8d43ef5c841032c87e2de015972c06f3865ef718", - "reference": "8d43ef5c841032c87e2de015972c06f3865ef718", - "shasum": "" - }, - "require": { - "ext-filter": "*", - "php": "^8.1", - "psr/http-factory": "^1", - "psr/http-message": "^1.1 || ^2.0" - }, - "suggest": { - "ext-bcmath": "to improve IPV4 host parsing", - "ext-gmp": "to improve IPV4 host parsing", - "ext-intl": "to handle IDN host with the best performance", - "php-64bit": "to improve IPV4 host parsing", - "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "7.x-dev" - } - }, - "autoload": { - "psr-4": { - "League\\Uri\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ignace Nyamagana Butera", - "email": "nyamsprod@gmail.com", - "homepage": "https://nyamsprod.com" - } - ], - "description": "Common interfaces and classes for URI representation and interaction", - "homepage": "https://uri.thephpleague.com", - "keywords": [ - "data-uri", - "file-uri", - "ftp", - "hostname", - "http", - "https", - "parse_str", - "parse_url", - "psr-7", - "query-string", - "querystring", - "rfc3986", - "rfc3987", - "rfc6570", - "uri", - "url", - "ws" - ], - "support": { - "docs": "https://uri.thephpleague.com", - "forum": "https://thephpleague.slack.com", - "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri-interfaces/tree/7.4.1" - }, - "funding": [ - { - "url": "https://github.com/sponsors/nyamsprod", - "type": "github" - } - ], - "time": "2024-03-23T07:42:40+00:00" - }, - { - "name": "livewire/livewire", - "version": "v3.5.6", - "source": { - "type": "git", - "url": "https://github.com/livewire/livewire.git", - "reference": "597a2808d8d3001cc3ed5ce89a6ebab00f83b80f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/livewire/livewire/zipball/597a2808d8d3001cc3ed5ce89a6ebab00f83b80f", - "reference": "597a2808d8d3001cc3ed5ce89a6ebab00f83b80f", - "shasum": "" - }, - "require": { - "illuminate/database": "^10.0|^11.0", - "illuminate/routing": "^10.0|^11.0", - "illuminate/support": "^10.0|^11.0", - "illuminate/validation": "^10.0|^11.0", - "laravel/prompts": "^0.1.24", - "league/mime-type-detection": "^1.9", - "php": "^8.1", - "symfony/console": "^6.0|^7.0", - "symfony/http-kernel": "^6.2|^7.0" - }, - "require-dev": { - "calebporzio/sushi": "^2.1", - "laravel/framework": "^10.15.0|^11.0", - "mockery/mockery": "^1.3.1", - "orchestra/testbench": "^8.21.0|^9.0", - "orchestra/testbench-dusk": "^8.24|^9.1", - "phpunit/phpunit": "^10.4", - "psy/psysh": "^0.11.22|^0.12" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Livewire\\LivewireServiceProvider" - ], - "aliases": { - "Livewire": "Livewire\\Livewire" - } - } - }, - "autoload": { - "files": [ - "src/helpers.php" - ], - "psr-4": { - "Livewire\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Caleb Porzio", - "email": "calebporzio@gmail.com" - } - ], - "description": "A front-end framework for Laravel.", - "support": { - "issues": "https://github.com/livewire/livewire/issues", - "source": "https://github.com/livewire/livewire/tree/v3.5.6" - }, - "funding": [ - { - "url": "https://github.com/livewire", - "type": "github" - } - ], - "time": "2024-08-19T11:52:18+00:00" - }, - { - "name": "masterminds/html5", - "version": "2.9.0", - "source": { - "type": "git", - "url": "https://github.com/Masterminds/html5-php.git", - "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/f5ac2c0b0a2eefca70b2ce32a5809992227e75a6", - "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "php": ">=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8 || ^9" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.7-dev" - } - }, - "autoload": { - "psr-4": { - "Masterminds\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Matt Butcher", - "email": "technosophos@gmail.com" - }, - { - "name": "Matt Farina", - "email": "matt@mattfarina.com" - }, - { - "name": "Asmir Mustafic", - "email": "goetas@gmail.com" - } - ], - "description": "An HTML5 parser and serializer.", - "homepage": "http://masterminds.github.io/html5-php", - "keywords": [ - "HTML5", - "dom", - "html", - "parser", - "querypath", - "serializer", - "xml" - ], - "support": { - "issues": "https://github.com/Masterminds/html5-php/issues", - "source": "https://github.com/Masterminds/html5-php/tree/2.9.0" - }, - "time": "2024-03-31T07:05:07+00:00" - }, - { - "name": "monolog/monolog", - "version": "3.7.0", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/monolog.git", - "reference": "f4393b648b78a5408747de94fca38beb5f7e9ef8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f4393b648b78a5408747de94fca38beb5f7e9ef8", - "reference": "f4393b648b78a5408747de94fca38beb5f7e9ef8", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "psr/log": "^2.0 || ^3.0" - }, - "provide": { - "psr/log-implementation": "3.0.0" - }, - "require-dev": { - "aws/aws-sdk-php": "^3.0", - "doctrine/couchdb": "~1.0@dev", - "elasticsearch/elasticsearch": "^7 || ^8", - "ext-json": "*", - "graylog2/gelf-php": "^1.4.2 || ^2.0", - "guzzlehttp/guzzle": "^7.4.5", - "guzzlehttp/psr7": "^2.2", - "mongodb/mongodb": "^1.8", - "php-amqplib/php-amqplib": "~2.4 || ^3", - "phpstan/phpstan": "^1.9", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-strict-rules": "^1.4", - "phpunit/phpunit": "^10.5.17", - "predis/predis": "^1.1 || ^2", - "ruflin/elastica": "^7", - "symfony/mailer": "^5.4 || ^6", - "symfony/mime": "^5.4 || ^6" - }, - "suggest": { - "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", - "doctrine/couchdb": "Allow sending log messages to a CouchDB server", - "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", - "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", - "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", - "ext-mbstring": "Allow to work properly with unicode symbols", - "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", - "ext-openssl": "Required to send log messages using SSL", - "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", - "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", - "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", - "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", - "rollbar/rollbar": "Allow sending log messages to Rollbar", - "ruflin/elastica": "Allow sending log messages to an Elastic Search server" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Monolog\\": "src/Monolog" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "https://seld.be" - } - ], - "description": "Sends your logs to files, sockets, inboxes, databases and various web services", - "homepage": "https://github.com/Seldaek/monolog", - "keywords": [ - "log", - "logging", - "psr-3" - ], - "support": { - "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.7.0" - }, - "funding": [ - { - "url": "https://github.com/Seldaek", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", - "type": "tidelift" - } - ], - "time": "2024-06-28T09:40:51+00:00" - }, - { - "name": "mtdowling/jmespath.php", - "version": "2.8.0", - "source": { - "type": "git", - "url": "https://github.com/jmespath/jmespath.php.git", - "reference": "a2a865e05d5f420b50cc2f85bb78d565db12a6bc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/a2a865e05d5f420b50cc2f85bb78d565db12a6bc", - "reference": "a2a865e05d5f420b50cc2f85bb78d565db12a6bc", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0", - "symfony/polyfill-mbstring": "^1.17" - }, - "require-dev": { - "composer/xdebug-handler": "^3.0.3", - "phpunit/phpunit": "^8.5.33" - }, - "bin": [ - "bin/jp.php" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.8-dev" - } - }, - "autoload": { - "files": [ - "src/JmesPath.php" - ], - "psr-4": { - "JmesPath\\": "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" - } - ], - "description": "Declaratively specify how to extract elements from a JSON document", - "keywords": [ - "json", - "jsonpath" - ], - "support": { - "issues": "https://github.com/jmespath/jmespath.php/issues", - "source": "https://github.com/jmespath/jmespath.php/tree/2.8.0" - }, - "time": "2024-09-04T18:46:31+00:00" - }, - { - "name": "nesbot/carbon", - "version": "3.8.0", - "source": { - "type": "git", - "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "bbd3eef89af8ba66a3aa7952b5439168fbcc529f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/bbd3eef89af8ba66a3aa7952b5439168fbcc529f", - "reference": "bbd3eef89af8ba66a3aa7952b5439168fbcc529f", - "shasum": "" - }, - "require": { - "carbonphp/carbon-doctrine-types": "*", - "ext-json": "*", - "php": "^8.1", - "psr/clock": "^1.0", - "symfony/clock": "^6.3 || ^7.0", - "symfony/polyfill-mbstring": "^1.0", - "symfony/translation": "^4.4.18 || ^5.2.1|| ^6.0 || ^7.0" - }, - "provide": { - "psr/clock-implementation": "1.0" - }, - "require-dev": { - "doctrine/dbal": "^3.6.3 || ^4.0", - "doctrine/orm": "^2.15.2 || ^3.0", - "friendsofphp/php-cs-fixer": "^3.57.2", - "kylekatarnls/multi-tester": "^2.5.3", - "ondrejmirtes/better-reflection": "^6.25.0.4", - "phpmd/phpmd": "^2.15.0", - "phpstan/extension-installer": "^1.3.1", - "phpstan/phpstan": "^1.11.2", - "phpunit/phpunit": "^10.5.20", - "squizlabs/php_codesniffer": "^3.9.0" - }, - "bin": [ - "bin/carbon" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev", - "dev-2.x": "2.x-dev" - }, - "laravel": { - "providers": [ - "Carbon\\Laravel\\ServiceProvider" - ] - }, - "phpstan": { - "includes": [ - "extension.neon" - ] - } - }, - "autoload": { - "psr-4": { - "Carbon\\": "src/Carbon/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Brian Nesbitt", - "email": "brian@nesbot.com", - "homepage": "https://markido.com" - }, - { - "name": "kylekatarnls", - "homepage": "https://github.com/kylekatarnls" - } - ], - "description": "An API extension for DateTime that supports 281 different languages.", - "homepage": "https://carbon.nesbot.com", - "keywords": [ - "date", - "datetime", - "time" - ], - "support": { - "docs": "https://carbon.nesbot.com/docs", - "issues": "https://github.com/briannesbitt/Carbon/issues", - "source": "https://github.com/briannesbitt/Carbon" - }, - "funding": [ - { - "url": "https://github.com/sponsors/kylekatarnls", - "type": "github" - }, - { - "url": "https://opencollective.com/Carbon#sponsor", - "type": "opencollective" - }, - { - "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme", - "type": "tidelift" - } - ], - "time": "2024-08-19T06:22:39+00:00" - }, - { - "name": "nette/schema", - "version": "v1.3.0", - "source": { - "type": "git", - "url": "https://github.com/nette/schema.git", - "reference": "a6d3a6d1f545f01ef38e60f375d1cf1f4de98188" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/schema/zipball/a6d3a6d1f545f01ef38e60f375d1cf1f4de98188", - "reference": "a6d3a6d1f545f01ef38e60f375d1cf1f4de98188", - "shasum": "" - }, - "require": { - "nette/utils": "^4.0", - "php": "8.1 - 8.3" - }, - "require-dev": { - "nette/tester": "^2.4", - "phpstan/phpstan-nette": "^1.0", - "tracy/tracy": "^2.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0-only", - "GPL-3.0-only" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "📐 Nette Schema: validating data structures against a given Schema.", - "homepage": "https://nette.org", - "keywords": [ - "config", - "nette" - ], - "support": { - "issues": "https://github.com/nette/schema/issues", - "source": "https://github.com/nette/schema/tree/v1.3.0" - }, - "time": "2023-12-11T11:54:22+00:00" - }, - { - "name": "nette/utils", - "version": "v4.0.5", - "source": { - "type": "git", - "url": "https://github.com/nette/utils.git", - "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/736c567e257dbe0fcf6ce81b4d6dbe05c6899f96", - "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96", - "shasum": "" - }, - "require": { - "php": "8.0 - 8.4" - }, - "conflict": { - "nette/finder": "<3", - "nette/schema": "<1.2.2" - }, - "require-dev": { - "jetbrains/phpstorm-attributes": "dev-master", - "nette/tester": "^2.5", - "phpstan/phpstan": "^1.0", - "tracy/tracy": "^2.9" - }, - "suggest": { - "ext-gd": "to use Image", - "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", - "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", - "ext-json": "to use Nette\\Utils\\Json", - "ext-mbstring": "to use Strings::lower() etc...", - "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0-only", - "GPL-3.0-only" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", - "homepage": "https://nette.org", - "keywords": [ - "array", - "core", - "datetime", - "images", - "json", - "nette", - "paginator", - "password", - "slugify", - "string", - "unicode", - "utf-8", - "utility", - "validation" - ], - "support": { - "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v4.0.5" - }, - "time": "2024-08-07T15:39:19+00:00" - }, - { - "name": "nikic/php-parser", - "version": "v5.2.0", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "23c79fbbfb725fb92af9bcf41065c8e9a0d49ddb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/23c79fbbfb725fb92af9bcf41065c8e9a0d49ddb", - "reference": "23c79fbbfb725fb92af9bcf41065c8e9a0d49ddb", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "ext-json": "*", - "ext-tokenizer": "*", - "php": ">=7.4" - }, - "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^9.0" - }, - "bin": [ - "bin/php-parse" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], - "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.2.0" - }, - "time": "2024-09-15T16:40:33+00:00" - }, - { - "name": "nunomaduro/termwind", - "version": "v2.1.0", - "source": { - "type": "git", - "url": "https://github.com/nunomaduro/termwind.git", - "reference": "e5f21eade88689536c0cdad4c3cd75f3ed26e01a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/e5f21eade88689536c0cdad4c3cd75f3ed26e01a", - "reference": "e5f21eade88689536c0cdad4c3cd75f3ed26e01a", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "php": "^8.2", - "symfony/console": "^7.0.4" - }, - "require-dev": { - "ergebnis/phpstan-rules": "^2.2.0", - "illuminate/console": "^11.1.1", - "laravel/pint": "^1.15.0", - "mockery/mockery": "^1.6.11", - "pestphp/pest": "^2.34.6", - "phpstan/phpstan": "^1.10.66", - "phpstan/phpstan-strict-rules": "^1.5.2", - "symfony/var-dumper": "^7.0.4", - "thecodingmachine/phpstan-strict-rules": "^1.0.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Termwind\\Laravel\\TermwindServiceProvider" - ] - }, - "branch-alias": { - "dev-2.x": "2.x-dev" - } - }, - "autoload": { - "files": [ - "src/Functions.php" - ], - "psr-4": { - "Termwind\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" - } - ], - "description": "Its like Tailwind CSS, but for the console.", - "keywords": [ - "cli", - "console", - "css", - "package", - "php", - "style" - ], - "support": { - "issues": "https://github.com/nunomaduro/termwind/issues", - "source": "https://github.com/nunomaduro/termwind/tree/v2.1.0" - }, - "funding": [ - { - "url": "https://www.paypal.com/paypalme/enunomaduro", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - }, - { - "url": "https://github.com/xiCO2k", - "type": "github" - } - ], - "time": "2024-09-05T15:25:50+00:00" - }, - { - "name": "openspout/openspout", - "version": "v4.24.5", - "source": { - "type": "git", - "url": "https://github.com/openspout/openspout.git", - "reference": "393299ae21153f042f48b185f2adeb4b157d1d93" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/openspout/openspout/zipball/393299ae21153f042f48b185f2adeb4b157d1d93", - "reference": "393299ae21153f042f48b185f2adeb4b157d1d93", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-fileinfo": "*", - "ext-filter": "*", - "ext-libxml": "*", - "ext-xmlreader": "*", - "ext-zip": "*", - "php": "~8.1.0 || ~8.2.0 || ~8.3.0" - }, - "require-dev": { - "ext-zlib": "*", - "friendsofphp/php-cs-fixer": "^3.60.0", - "infection/infection": "^0.29.6", - "phpbench/phpbench": "^1.3.1", - "phpstan/phpstan": "^1.11.8", - "phpstan/phpstan-phpunit": "^1.4.0", - "phpstan/phpstan-strict-rules": "^1.6.0", - "phpunit/phpunit": "^10.5.20 || ^11.2.8" - }, - "suggest": { - "ext-iconv": "To handle non UTF-8 CSV files (if \"php-mbstring\" is not already installed or is too limited)", - "ext-mbstring": "To handle non UTF-8 CSV files (if \"iconv\" is not already installed)" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.3.x-dev" - } - }, - "autoload": { - "psr-4": { - "OpenSpout\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Adrien Loison", - "email": "adrien@box.com" - } - ], - "description": "PHP Library to read and write spreadsheet files (CSV, XLSX and ODS), in a fast and scalable way", - "homepage": "https://github.com/openspout/openspout", - "keywords": [ - "OOXML", - "csv", - "excel", - "memory", - "odf", - "ods", - "office", - "open", - "php", - "read", - "scale", - "spreadsheet", - "stream", - "write", - "xlsx" - ], - "support": { - "issues": "https://github.com/openspout/openspout/issues", - "source": "https://github.com/openspout/openspout/tree/v4.24.5" - }, - "funding": [ - { - "url": "https://paypal.me/filippotessarotto", - "type": "custom" - }, - { - "url": "https://github.com/Slamdunk", - "type": "github" - } - ], - "time": "2024-07-26T05:48:04+00:00" - }, - { - "name": "phpoption/phpoption", - "version": "1.9.3", - "source": { - "type": "git", - "url": "https://github.com/schmittjoh/php-option.git", - "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/e3fac8b24f56113f7cb96af14958c0dd16330f54", - "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - }, - "branch-alias": { - "dev-master": "1.9-dev" - } - }, - "autoload": { - "psr-4": { - "PhpOption\\": "src/PhpOption/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Johannes M. Schmitt", - "email": "schmittjoh@gmail.com", - "homepage": "https://github.com/schmittjoh" - }, - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - } - ], - "description": "Option Type for PHP", - "keywords": [ - "language", - "option", - "php", - "type" - ], - "support": { - "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.9.3" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", - "type": "tidelift" - } - ], - "time": "2024-07-20T21:41:07+00:00" - }, - { - "name": "predis/predis", - "version": "v2.2.2", - "source": { - "type": "git", - "url": "https://github.com/predis/predis.git", - "reference": "b1d3255ed9ad4d7254f9f9bba386c99f4bb983d1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/predis/predis/zipball/b1d3255ed9ad4d7254f9f9bba386c99f4bb983d1", - "reference": "b1d3255ed9ad4d7254f9f9bba386c99f4bb983d1", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3.3", - "phpstan/phpstan": "^1.9", - "phpunit/phpunit": "^8.0 || ~9.4.4" - }, - "suggest": { - "ext-relay": "Faster connection with in-memory caching (>=0.6.2)" - }, - "type": "library", - "autoload": { - "psr-4": { - "Predis\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Till Krüss", - "homepage": "https://till.im", - "role": "Maintainer" - } - ], - "description": "A flexible and feature-complete Redis client for PHP.", - "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/v2.2.2" - }, - "funding": [ - { - "url": "https://github.com/sponsors/tillkruss", - "type": "github" - } - ], - "time": "2023-09-13T16:42:03+00:00" - }, - { - "name": "psr/cache", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/cache.git", - "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", - "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", - "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/3.0.0" - }, - "time": "2021-02-03T23:26:27+00:00" - }, - { - "name": "psr/clock", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/clock.git", - "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", - "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", - "shasum": "" - }, - "require": { - "php": "^7.0 || ^8.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Psr\\Clock\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for reading the clock.", - "homepage": "https://github.com/php-fig/clock", - "keywords": [ - "clock", - "now", - "psr", - "psr-20", - "time" - ], - "support": { - "issues": "https://github.com/php-fig/clock/issues", - "source": "https://github.com/php-fig/clock/tree/1.0.0" - }, - "time": "2022-11-25T14:36:26+00:00" - }, - { - "name": "psr/container", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", - "shasum": "" - }, - "require": { - "php": ">=7.4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", - "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" - ], - "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/2.0.2" - }, - "time": "2021-11-05T16:47:00+00:00" - }, - { - "name": "psr/event-dispatcher", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/event-dispatcher.git", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", - "shasum": "" - }, - "require": { - "php": ">=7.2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\EventDispatcher\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Standard interfaces for event handling.", - "keywords": [ - "events", - "psr", - "psr-14" - ], - "support": { - "issues": "https://github.com/php-fig/event-dispatcher/issues", - "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" - }, - "time": "2019-01-08T18:20:26+00:00" - }, - { - "name": "psr/http-client", - "version": "1.0.3", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-client.git", - "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", - "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", - "shasum": "" - }, - "require": { - "php": "^7.0 || ^8.0", - "psr/http-message": "^1.0 || ^2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Client\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP clients", - "homepage": "https://github.com/php-fig/http-client", - "keywords": [ - "http", - "http-client", - "psr", - "psr-18" - ], - "support": { - "source": "https://github.com/php-fig/http-client" - }, - "time": "2023-09-23T14:17:50+00:00" - }, - { - "name": "psr/http-factory", - "version": "1.1.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-factory.git", - "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", - "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", - "shasum": "" - }, - "require": { - "php": ">=7.1", - "psr/http-message": "^1.0 || ^2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", - "keywords": [ - "factory", - "http", - "message", - "psr", - "psr-17", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-factory" - }, - "time": "2024-04-15T12:06:14+00:00" - }, - { - "name": "psr/http-message", - "version": "2.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", - "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-message/tree/2.0" - }, - "time": "2023-04-04T09:54:51+00:00" - }, - { - "name": "psr/log", - "version": "3.0.2", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", - "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", - "shasum": "" - }, - "require": { - "php": ">=8.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Log\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "support": { - "source": "https://github.com/php-fig/log/tree/3.0.2" - }, - "time": "2024-09-11T13:17:53+00:00" - }, - { - "name": "psr/simple-cache", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/simple-cache.git", - "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", - "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", - "shasum": "" - }, - "require": { - "php": ">=8.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\SimpleCache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interfaces for simple caching", - "keywords": [ - "cache", - "caching", - "psr", - "psr-16", - "simple-cache" - ], - "support": { - "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" - }, - "time": "2021-10-29T13:26:27+00:00" - }, - { - "name": "psy/psysh", - "version": "v0.12.4", - "source": { - "type": "git", - "url": "https://github.com/bobthecow/psysh.git", - "reference": "2fd717afa05341b4f8152547f142cd2f130f6818" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/2fd717afa05341b4f8152547f142cd2f130f6818", - "reference": "2fd717afa05341b4f8152547f142cd2f130f6818", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-tokenizer": "*", - "nikic/php-parser": "^5.0 || ^4.0", - "php": "^8.0 || ^7.4", - "symfony/console": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4", - "symfony/var-dumper": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4" - }, - "conflict": { - "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.2" - }, - "suggest": { - "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", - "ext-pdo-sqlite": "The doc command requires SQLite to work.", - "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well." - }, - "bin": [ - "bin/psysh" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "0.12.x-dev" - }, - "bamarni-bin": { - "bin-links": false, - "forward-command": false - } - }, - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Psy\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Justin Hileman", - "email": "justin@justinhileman.info", - "homepage": "http://justinhileman.com" - } - ], - "description": "An interactive shell for modern PHP.", - "homepage": "http://psysh.org", - "keywords": [ - "REPL", - "console", - "interactive", - "shell" - ], - "support": { - "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.12.4" - }, - "time": "2024-06-10T01:18:23+00:00" - }, - { - "name": "ralouphie/getallheaders", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/ralouphie/getallheaders.git", - "reference": "120b605dfeb996808c31b6477290a714d356e822" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", - "reference": "120b605dfeb996808c31b6477290a714d356e822", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^5 || ^6.5" - }, - "type": "library", - "autoload": { - "files": [ - "src/getallheaders.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ralph Khattar", - "email": "ralph.khattar@gmail.com" - } - ], - "description": "A polyfill for getallheaders.", - "support": { - "issues": "https://github.com/ralouphie/getallheaders/issues", - "source": "https://github.com/ralouphie/getallheaders/tree/develop" - }, - "time": "2019-03-08T08:55:37+00:00" - }, - { - "name": "ramsey/collection", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/ramsey/collection.git", - "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ramsey/collection/zipball/a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", - "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "captainhook/plugin-composer": "^5.3", - "ergebnis/composer-normalize": "^2.28.3", - "fakerphp/faker": "^1.21", - "hamcrest/hamcrest-php": "^2.0", - "jangregor/phpstan-prophecy": "^1.0", - "mockery/mockery": "^1.5", - "php-parallel-lint/php-console-highlighter": "^1.0", - "php-parallel-lint/php-parallel-lint": "^1.3", - "phpcsstandards/phpcsutils": "^1.0.0-rc1", - "phpspec/prophecy-phpunit": "^2.0", - "phpstan/extension-installer": "^1.2", - "phpstan/phpstan": "^1.9", - "phpstan/phpstan-mockery": "^1.1", - "phpstan/phpstan-phpunit": "^1.3", - "phpunit/phpunit": "^9.5", - "psalm/plugin-mockery": "^1.1", - "psalm/plugin-phpunit": "^0.18.4", - "ramsey/coding-standard": "^2.0.3", - "ramsey/conventional-commits": "^1.3", - "vimeo/psalm": "^5.4" - }, - "type": "library", - "extra": { - "captainhook": { - "force-install": true - }, - "ramsey/conventional-commits": { - "configFile": "conventional-commits.json" - } - }, - "autoload": { - "psr-4": { - "Ramsey\\Collection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ben Ramsey", - "email": "ben@benramsey.com", - "homepage": "https://benramsey.com" - } - ], - "description": "A PHP library for representing and manipulating collections.", - "keywords": [ - "array", - "collection", - "hash", - "map", - "queue", - "set" - ], - "support": { - "issues": "https://github.com/ramsey/collection/issues", - "source": "https://github.com/ramsey/collection/tree/2.0.0" - }, - "funding": [ - { - "url": "https://github.com/ramsey", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", - "type": "tidelift" - } - ], - "time": "2022-12-31T21:50:55+00:00" - }, - { - "name": "ramsey/uuid", - "version": "4.7.6", - "source": { - "type": "git", - "url": "https://github.com/ramsey/uuid.git", - "reference": "91039bc1faa45ba123c4328958e620d382ec7088" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/91039bc1faa45ba123c4328958e620d382ec7088", - "reference": "91039bc1faa45ba123c4328958e620d382ec7088", - "shasum": "" - }, - "require": { - "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12", - "ext-json": "*", - "php": "^8.0", - "ramsey/collection": "^1.2 || ^2.0" - }, - "replace": { - "rhumsaa/uuid": "self.version" - }, - "require-dev": { - "captainhook/captainhook": "^5.10", - "captainhook/plugin-composer": "^5.3", - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", - "doctrine/annotations": "^1.8", - "ergebnis/composer-normalize": "^2.15", - "mockery/mockery": "^1.3", - "paragonie/random-lib": "^2", - "php-mock/php-mock": "^2.2", - "php-mock/php-mock-mockery": "^1.3", - "php-parallel-lint/php-parallel-lint": "^1.1", - "phpbench/phpbench": "^1.0", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-mockery": "^1.1", - "phpstan/phpstan-phpunit": "^1.1", - "phpunit/phpunit": "^8.5 || ^9", - "ramsey/composer-repl": "^1.4", - "slevomat/coding-standard": "^8.4", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^4.9" - }, - "suggest": { - "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", - "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", - "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", - "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", - "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." - }, - "type": "library", - "extra": { - "captainhook": { - "force-install": true - } - }, - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Ramsey\\Uuid\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", - "keywords": [ - "guid", - "identifier", - "uuid" - ], - "support": { - "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.7.6" - }, - "funding": [ - { - "url": "https://github.com/ramsey", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid", - "type": "tidelift" - } - ], - "time": "2024-04-27T21:32:50+00:00" - }, - { - "name": "ryangjchandler/blade-capture-directive", - "version": "v1.0.0", - "source": { - "type": "git", - "url": "https://github.com/ryangjchandler/blade-capture-directive.git", - "reference": "cb6f58663d97f17bece176295240b740835e14f1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ryangjchandler/blade-capture-directive/zipball/cb6f58663d97f17bece176295240b740835e14f1", - "reference": "cb6f58663d97f17bece176295240b740835e14f1", - "shasum": "" - }, - "require": { - "illuminate/contracts": "^10.0|^11.0", - "php": "^8.1", - "spatie/laravel-package-tools": "^1.9.2" - }, - "require-dev": { - "nunomaduro/collision": "^7.0|^8.0", - "nunomaduro/larastan": "^2.0", - "orchestra/testbench": "^8.0|^9.0", - "pestphp/pest": "^2.0", - "pestphp/pest-plugin-laravel": "^2.0", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^10.0", - "spatie/laravel-ray": "^1.26" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "RyanChandler\\BladeCaptureDirective\\BladeCaptureDirectiveServiceProvider" - ], - "aliases": { - "BladeCaptureDirective": "RyanChandler\\BladeCaptureDirective\\Facades\\BladeCaptureDirective" - } - } - }, - "autoload": { - "psr-4": { - "RyanChandler\\BladeCaptureDirective\\": "src", - "RyanChandler\\BladeCaptureDirective\\Database\\Factories\\": "database/factories" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ryan Chandler", - "email": "support@ryangjchandler.co.uk", - "role": "Developer" - } - ], - "description": "Create inline partials in your Blade templates with ease.", - "homepage": "https://github.com/ryangjchandler/blade-capture-directive", - "keywords": [ - "blade-capture-directive", - "laravel", - "ryangjchandler" - ], - "support": { - "issues": "https://github.com/ryangjchandler/blade-capture-directive/issues", - "source": "https://github.com/ryangjchandler/blade-capture-directive/tree/v1.0.0" - }, - "funding": [ - { - "url": "https://github.com/ryangjchandler", - "type": "github" - } - ], - "time": "2024-02-26T18:08:49+00:00" - }, - { - "name": "saade/filament-fullcalendar", - "version": "v3.2.2", - "source": { - "type": "git", - "url": "https://github.com/saade/filament-fullcalendar.git", - "reference": "d40410e6bc46057628fb9fa8f62b6090452914d3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/saade/filament-fullcalendar/zipball/d40410e6bc46057628fb9fa8f62b6090452914d3", - "reference": "d40410e6bc46057628fb9fa8f62b6090452914d3", - "shasum": "" - }, - "require": { - "filament/filament": "^3.0", - "illuminate/contracts": "^10.0|^11.0", - "php": "^8.1", - "spatie/laravel-package-tools": "^1.13.5" - }, - "require-dev": { - "nunomaduro/collision": "^7.0|^8.0", - "nunomaduro/larastan": "^2.0", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-phpunit": "^1.0", - "spatie/laravel-ray": "^1.26" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Saade\\FilamentFullCalendar\\FilamentFullCalendarServiceProvider" - ] - } - }, - "autoload": { - "files": [ - "src/helpers.php" - ], - "psr-4": { - "Saade\\FilamentFullCalendar\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Saade", - "email": "saade@outlook.com.br", - "role": "Developer" - } - ], - "description": "The Most Popular JavaScript Calendar integrated with Filament 💛", - "homepage": "https://github.com/saade/filament-fullcalendar", - "keywords": [ - "filament-fullcalendar", - "laravel", - "saade" - ], - "support": { - "issues": "https://github.com/saade/filament-fullcalendar/issues", - "source": "https://github.com/saade/filament-fullcalendar/tree/v3.2.2" - }, - "funding": [ - { - "url": "https://github.com/saade", - "type": "github" - } - ], - "time": "2024-05-02T13:04:39+00:00" - }, - { - "name": "spatie/color", - "version": "1.5.3", - "source": { - "type": "git", - "url": "https://github.com/spatie/color.git", - "reference": "49739265900cabce4640cd26c3266fd8d2cca390" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/color/zipball/49739265900cabce4640cd26c3266fd8d2cca390", - "reference": "49739265900cabce4640cd26c3266fd8d2cca390", - "shasum": "" - }, - "require": { - "php": "^7.3|^8.0" - }, - "require-dev": { - "pestphp/pest": "^1.22", - "phpunit/phpunit": "^6.5||^9.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Spatie\\Color\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Sebastian De Deyne", - "email": "sebastian@spatie.be", - "homepage": "https://spatie.be", - "role": "Developer" - } - ], - "description": "A little library to handle color conversions", - "homepage": "https://github.com/spatie/color", - "keywords": [ - "color", - "conversion", - "rgb", - "spatie" - ], - "support": { - "issues": "https://github.com/spatie/color/issues", - "source": "https://github.com/spatie/color/tree/1.5.3" - }, - "funding": [ - { - "url": "https://github.com/spatie", - "type": "github" - } - ], - "time": "2022-12-18T12:58:32+00:00" - }, - { - "name": "spatie/invade", - "version": "2.1.0", - "source": { - "type": "git", - "url": "https://github.com/spatie/invade.git", - "reference": "b920f6411d21df4e8610a138e2e87ae4957d7f63" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/invade/zipball/b920f6411d21df4e8610a138e2e87ae4957d7f63", - "reference": "b920f6411d21df4e8610a138e2e87ae4957d7f63", - "shasum": "" - }, - "require": { - "php": "^8.0" - }, - "require-dev": { - "pestphp/pest": "^1.20", - "phpstan/phpstan": "^1.4", - "spatie/ray": "^1.28" - }, - "type": "library", - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Spatie\\Invade\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Freek Van der Herten", - "email": "freek@spatie.be", - "role": "Developer" - } - ], - "description": "A PHP function to work with private properties and methods", - "homepage": "https://github.com/spatie/invade", - "keywords": [ - "invade", - "spatie" - ], - "support": { - "source": "https://github.com/spatie/invade/tree/2.1.0" - }, - "funding": [ - { - "url": "https://github.com/spatie", - "type": "github" - } - ], - "time": "2024-05-17T09:06:10+00:00" - }, - { - "name": "spatie/laravel-package-tools", - "version": "1.16.5", - "source": { - "type": "git", - "url": "https://github.com/spatie/laravel-package-tools.git", - "reference": "c7413972cf22ffdff97b68499c22baa04eddb6a2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/c7413972cf22ffdff97b68499c22baa04eddb6a2", - "reference": "c7413972cf22ffdff97b68499c22baa04eddb6a2", - "shasum": "" - }, - "require": { - "illuminate/contracts": "^9.28|^10.0|^11.0", - "php": "^8.0" - }, - "require-dev": { - "mockery/mockery": "^1.5", - "orchestra/testbench": "^7.7|^8.0", - "pestphp/pest": "^1.22", - "phpunit/phpunit": "^9.5.24", - "spatie/pest-plugin-test-time": "^1.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "Spatie\\LaravelPackageTools\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Freek Van der Herten", - "email": "freek@spatie.be", - "role": "Developer" - } - ], - "description": "Tools for creating Laravel packages", - "homepage": "https://github.com/spatie/laravel-package-tools", - "keywords": [ - "laravel-package-tools", - "spatie" - ], - "support": { - "issues": "https://github.com/spatie/laravel-package-tools/issues", - "source": "https://github.com/spatie/laravel-package-tools/tree/1.16.5" - }, - "funding": [ - { - "url": "https://github.com/spatie", - "type": "github" - } - ], - "time": "2024-08-27T18:56:10+00:00" - }, - { - "name": "spatie/laravel-permission", - "version": "6.9.0", - "source": { - "type": "git", - "url": "https://github.com/spatie/laravel-permission.git", - "reference": "fe973a58b44380d0e8620107259b7bda22f70408" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-permission/zipball/fe973a58b44380d0e8620107259b7bda22f70408", - "reference": "fe973a58b44380d0e8620107259b7bda22f70408", - "shasum": "" - }, - "require": { - "illuminate/auth": "^8.12|^9.0|^10.0|^11.0", - "illuminate/container": "^8.12|^9.0|^10.0|^11.0", - "illuminate/contracts": "^8.12|^9.0|^10.0|^11.0", - "illuminate/database": "^8.12|^9.0|^10.0|^11.0", - "php": "^8.0" - }, - "require-dev": { - "laravel/passport": "^11.0|^12.0", - "orchestra/testbench": "^6.23|^7.0|^8.0|^9.0", - "phpunit/phpunit": "^9.4|^10.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "6.x-dev", - "dev-master": "6.x-dev" - }, - "laravel": { - "providers": [ - "Spatie\\Permission\\PermissionServiceProvider" - ] - } - }, - "autoload": { - "files": [ - "src/helpers.php" - ], - "psr-4": { - "Spatie\\Permission\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Freek Van der Herten", - "email": "freek@spatie.be", - "homepage": "https://spatie.be", - "role": "Developer" - } - ], - "description": "Permission handling for Laravel 8.0 and up", - "homepage": "https://github.com/spatie/laravel-permission", - "keywords": [ - "acl", - "laravel", - "permission", - "permissions", - "rbac", - "roles", - "security", - "spatie" - ], - "support": { - "issues": "https://github.com/spatie/laravel-permission/issues", - "source": "https://github.com/spatie/laravel-permission/tree/6.9.0" - }, - "funding": [ - { - "url": "https://github.com/spatie", - "type": "github" - } - ], - "time": "2024-06-22T23:04:52+00:00" - }, - { - "name": "symfony/clock", - "version": "v7.1.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/clock.git", - "reference": "3dfc8b084853586de51dd1441c6242c76a28cbe7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/clock/zipball/3dfc8b084853586de51dd1441c6242c76a28cbe7", - "reference": "3dfc8b084853586de51dd1441c6242c76a28cbe7", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "psr/clock": "^1.0", - "symfony/polyfill-php83": "^1.28" - }, - "provide": { - "psr/clock-implementation": "1.0" - }, - "type": "library", - "autoload": { - "files": [ - "Resources/now.php" - ], - "psr-4": { - "Symfony\\Component\\Clock\\": "" - }, - "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": "Decouples applications from the system clock", - "homepage": "https://symfony.com", - "keywords": [ - "clock", - "psr20", - "time" - ], - "support": { - "source": "https://github.com/symfony/clock/tree/v7.1.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-05-31T14:57:53+00:00" - }, - { - "name": "symfony/console", - "version": "v7.1.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "1eed7af6961d763e7832e874d7f9b21c3ea9c111" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/1eed7af6961d763e7832e874d7f9b21c3ea9c111", - "reference": "1eed7af6961d763e7832e874d7f9b21c3ea9c111", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/polyfill-mbstring": "~1.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^6.4|^7.0" - }, - "conflict": { - "symfony/dependency-injection": "<6.4", - "symfony/dotenv": "<6.4", - "symfony/event-dispatcher": "<6.4", - "symfony/lock": "<6.4", - "symfony/process": "<6.4" - }, - "provide": { - "psr/log-implementation": "1.0|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/event-dispatcher": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/lock": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0", - "symfony/stopwatch": "^6.4|^7.0", - "symfony/var-dumper": "^6.4|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Eases the creation of beautiful and testable command line interfaces", - "homepage": "https://symfony.com", - "keywords": [ - "cli", - "command-line", - "console", - "terminal" - ], - "support": { - "source": "https://github.com/symfony/console/tree/v7.1.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-08-15T22:48:53+00:00" - }, - { - "name": "symfony/css-selector", - "version": "v7.1.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/css-selector.git", - "reference": "1c7cee86c6f812896af54434f8ce29c8d94f9ff4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/1c7cee86c6f812896af54434f8ce29c8d94f9ff4", - "reference": "1c7cee86c6f812896af54434f8ce29c8d94f9ff4", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\CssSelector\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Jean-François Simon", - "email": "jeanfrancois.simon@sensiolabs.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Converts CSS selectors to XPath expressions", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/css-selector/tree/v7.1.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-05-31T14:57:53+00:00" - }, - { - "name": "symfony/deprecation-contracts", - "version": "v3.5.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", - "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "files": [ - "function.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "A generic function and convention to trigger deprecation notices", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.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-04-18T09:32:20+00:00" - }, - { - "name": "symfony/error-handler", - "version": "v7.1.3", - "source": { - "type": "git", - "url": "https://github.com/symfony/error-handler.git", - "reference": "432bb369952795c61ca1def65e078c4a80dad13c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/432bb369952795c61ca1def65e078c4a80dad13c", - "reference": "432bb369952795c61ca1def65e078c4a80dad13c", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^6.4|^7.0" - }, - "conflict": { - "symfony/deprecation-contracts": "<2.5", - "symfony/http-kernel": "<6.4" - }, - "require-dev": { - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/serializer": "^6.4|^7.0" - }, - "bin": [ - "Resources/bin/patch-type-declarations" - ], - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\ErrorHandler\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides tools to manage errors and ease debugging PHP code", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/error-handler/tree/v7.1.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": "2024-07-26T13:02:51+00:00" - }, - { - "name": "symfony/event-dispatcher", - "version": "v7.1.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7", - "reference": "9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7", - "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.1.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-05-31T14:57:53+00:00" - }, - { - "name": "symfony/event-dispatcher-contracts", - "version": "v3.5.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/8f93aec25d41b72493c6ddff14e916177c9efc50", - "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "psr/event-dispatcher": "^1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\EventDispatcher\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to dispatching event", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.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-04-18T09:32:20+00:00" - }, - { - "name": "symfony/finder", - "version": "v7.1.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "d95bbf319f7d052082fb7af147e0f835a695e823" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/d95bbf319f7d052082fb7af147e0f835a695e823", - "reference": "d95bbf319f7d052082fb7af147e0f835a695e823", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "symfony/filesystem": "^6.4|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Finds files and directories via an intuitive fluent interface", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/finder/tree/v7.1.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-08-13T14:28:19+00:00" - }, - { - "name": "symfony/html-sanitizer", - "version": "v7.1.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/html-sanitizer.git", - "reference": "737cbaa8082b696d0574afd91b9f471eca67fc65" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/html-sanitizer/zipball/737cbaa8082b696d0574afd91b9f471eca67fc65", - "reference": "737cbaa8082b696d0574afd91b9f471eca67fc65", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "league/uri": "^6.5|^7.0", - "masterminds/html5": "^2.7.2", - "php": ">=8.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\HtmlSanitizer\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Titouan Galopin", - "email": "galopintitouan@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides an object-oriented API to sanitize untrusted HTML input for safe insertion into a document's DOM.", - "homepage": "https://symfony.com", - "keywords": [ - "Purifier", - "html", - "sanitizer" - ], - "support": { - "source": "https://github.com/symfony/html-sanitizer/tree/v7.1.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-05-31T14:55:39+00:00" - }, - { - "name": "symfony/http-foundation", - "version": "v7.1.3", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-foundation.git", - "reference": "f602d5c17d1fa02f8019ace2687d9d136b7f4a1a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/f602d5c17d1fa02f8019ace2687d9d136b7f4a1a", - "reference": "f602d5c17d1fa02f8019ace2687d9d136b7f4a1a", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php83": "^1.27" - }, - "conflict": { - "doctrine/dbal": "<3.6", - "symfony/cache": "<6.4" - }, - "require-dev": { - "doctrine/dbal": "^3.6|^4", - "predis/predis": "^1.1|^2.0", - "symfony/cache": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/mime": "^6.4|^7.0", - "symfony/rate-limiter": "^6.4|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\HttpFoundation\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Defines an object-oriented layer for the HTTP specification", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/http-foundation/tree/v7.1.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": "2024-07-26T12:41:01+00:00" - }, - { - "name": "symfony/http-kernel", - "version": "v7.1.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-kernel.git", - "reference": "6efcbd1b3f444f631c386504fc83eeca25963747" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/6efcbd1b3f444f631c386504fc83eeca25963747", - "reference": "6efcbd1b3f444f631c386504fc83eeca25963747", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "psr/log": "^1|^2|^3", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/error-handler": "^6.4|^7.0", - "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "symfony/browser-kit": "<6.4", - "symfony/cache": "<6.4", - "symfony/config": "<6.4", - "symfony/console": "<6.4", - "symfony/dependency-injection": "<6.4", - "symfony/doctrine-bridge": "<6.4", - "symfony/form": "<6.4", - "symfony/http-client": "<6.4", - "symfony/http-client-contracts": "<2.5", - "symfony/mailer": "<6.4", - "symfony/messenger": "<6.4", - "symfony/translation": "<6.4", - "symfony/translation-contracts": "<2.5", - "symfony/twig-bridge": "<6.4", - "symfony/validator": "<6.4", - "symfony/var-dumper": "<6.4", - "twig/twig": "<3.0.4" - }, - "provide": { - "psr/log-implementation": "1.0|2.0|3.0" - }, - "require-dev": { - "psr/cache": "^1.0|^2.0|^3.0", - "symfony/browser-kit": "^6.4|^7.0", - "symfony/clock": "^6.4|^7.0", - "symfony/config": "^6.4|^7.0", - "symfony/console": "^6.4|^7.0", - "symfony/css-selector": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/dom-crawler": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/finder": "^6.4|^7.0", - "symfony/http-client-contracts": "^2.5|^3", - "symfony/process": "^6.4|^7.0", - "symfony/property-access": "^7.1", - "symfony/routing": "^6.4|^7.0", - "symfony/serializer": "^7.1", - "symfony/stopwatch": "^6.4|^7.0", - "symfony/translation": "^6.4|^7.0", - "symfony/translation-contracts": "^2.5|^3", - "symfony/uid": "^6.4|^7.0", - "symfony/validator": "^6.4|^7.0", - "symfony/var-dumper": "^6.4|^7.0", - "symfony/var-exporter": "^6.4|^7.0", - "twig/twig": "^3.0.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\HttpKernel\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides a structured process for converting a Request into a Response", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/http-kernel/tree/v7.1.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-08-30T17:02:28+00:00" - }, - { - "name": "symfony/mailer", - "version": "v7.1.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/mailer.git", - "reference": "8fcff0af9043c8f8a8e229437cea363e282f9aee" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/8fcff0af9043c8f8a8e229437cea363e282f9aee", - "reference": "8fcff0af9043c8f8a8e229437cea363e282f9aee", - "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": "^6.4|^7.0", - "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.1.2" - }, - "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-06-28T08:00:31+00:00" - }, - { - "name": "symfony/mime", - "version": "v7.1.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/mime.git", - "reference": "ccaa6c2503db867f472a587291e764d6a1e58758" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/ccaa6c2503db867f472a587291e764d6a1e58758", - "reference": "ccaa6c2503db867f472a587291e764d6a1e58758", - "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.1.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-08-13T14:28:19+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": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], - "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.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": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's grapheme_* functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "grapheme", - "intl", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.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": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Laurent Bassin", - "email": "laurent@bassin.info" - }, - { - "name": "Trevor Rowbotham", - "email": "trevor.rowbotham@pm.me" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "idn", - "intl", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.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": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's Normalizer class and related functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "intl", - "normalizer", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.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": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.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": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.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-php83", - "version": "v1.31.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491", - "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "type": "library", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php83\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.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-uuid", - "version": "v1.31.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-uuid.git", - "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/21533be36c24be3f4b1669c4725c7d1d2bab4ae2", - "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "provide": { - "ext-uuid": "*" - }, - "suggest": { - "ext-uuid": "For best performance" - }, - "type": "library", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Uuid\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Grégoire Pineau", - "email": "lyrixx@lyrixx.info" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for uuid functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "uuid" - ], - "support": { - "source": "https://github.com/symfony/polyfill-uuid/tree/v1.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/process", - "version": "v7.1.3", - "source": { - "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "7f2f542c668ad6c313dc4a5e9c3321f733197eca" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/7f2f542c668ad6c313dc4a5e9c3321f733197eca", - "reference": "7f2f542c668ad6c313dc4a5e9c3321f733197eca", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Process\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Executes commands in sub-processes", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/process/tree/v7.1.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": "2024-07-26T12:44:47+00:00" - }, - { - "name": "symfony/routing", - "version": "v7.1.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/routing.git", - "reference": "1500aee0094a3ce1c92626ed8cf3c2037e86f5a7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/1500aee0094a3ce1c92626ed8cf3c2037e86f5a7", - "reference": "1500aee0094a3ce1c92626ed8cf3c2037e86f5a7", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3" - }, - "conflict": { - "symfony/config": "<6.4", - "symfony/dependency-injection": "<6.4", - "symfony/yaml": "<6.4" - }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/yaml": "^6.4|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Routing\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Maps an HTTP request to a set of configuration variables", - "homepage": "https://symfony.com", - "keywords": [ - "router", - "routing", - "uri", - "url" - ], - "support": { - "source": "https://github.com/symfony/routing/tree/v7.1.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-08-29T08:16:25+00:00" - }, - { - "name": "symfony/service-contracts", - "version": "v3.5.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", - "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", - "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": { - "branch-alias": { - "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Service\\": "" - }, - "exclude-from-classmap": [ - "/Test/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to writing services", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.5.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-04-18T09:32:20+00:00" - }, - { - "name": "symfony/string", - "version": "v7.1.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/string.git", - "reference": "6cd670a6d968eaeb1c77c2e76091c45c56bc367b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/6cd670a6d968eaeb1c77c2e76091c45c56bc367b", - "reference": "6cd670a6d968eaeb1c77c2e76091c45c56bc367b", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "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/emoji": "^7.1", - "symfony/error-handler": "^6.4|^7.0", - "symfony/http-client": "^6.4|^7.0", - "symfony/intl": "^6.4|^7.0", - "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^6.4|^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/v7.1.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-08-12T09:59:40+00:00" - }, - { - "name": "symfony/translation", - "version": "v7.1.3", - "source": { - "type": "git", - "url": "https://github.com/symfony/translation.git", - "reference": "8d5e50c813ba2859a6dfc99a0765c550507934a1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/8d5e50c813ba2859a6dfc99a0765c550507934a1", - "reference": "8d5e50c813ba2859a6dfc99a0765c550507934a1", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/polyfill-mbstring": "~1.0", - "symfony/translation-contracts": "^2.5|^3.0" - }, - "conflict": { - "symfony/config": "<6.4", - "symfony/console": "<6.4", - "symfony/dependency-injection": "<6.4", - "symfony/http-client-contracts": "<2.5", - "symfony/http-kernel": "<6.4", - "symfony/service-contracts": "<2.5", - "symfony/twig-bundle": "<6.4", - "symfony/yaml": "<6.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": "^6.4|^7.0", - "symfony/console": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/finder": "^6.4|^7.0", - "symfony/http-client-contracts": "^2.5|^3.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/intl": "^6.4|^7.0", - "symfony/polyfill-intl-icu": "^1.21", - "symfony/routing": "^6.4|^7.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^6.4|^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/v7.1.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": "2024-07-26T12:41:01+00:00" - }, - { - "name": "symfony/translation-contracts", - "version": "v3.5.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/translation-contracts.git", - "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", - "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Translation\\": "" - }, - "exclude-from-classmap": [ - "/Test/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to translation", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.5.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-04-18T09:32:20+00:00" - }, - { - "name": "symfony/uid", - "version": "v7.1.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/uid.git", - "reference": "82177535395109075cdb45a70533aa3d7a521cdf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/82177535395109075cdb45a70533aa3d7a521cdf", - "reference": "82177535395109075cdb45a70533aa3d7a521cdf", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/polyfill-uuid": "^1.15" - }, - "require-dev": { - "symfony/console": "^6.4|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Uid\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Grégoire Pineau", - "email": "lyrixx@lyrixx.info" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides an object-oriented API to generate and represent UIDs", - "homepage": "https://symfony.com", - "keywords": [ - "UID", - "ulid", - "uuid" - ], - "support": { - "source": "https://github.com/symfony/uid/tree/v7.1.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-08-12T09:59:40+00:00" - }, - { - "name": "symfony/var-dumper", - "version": "v7.1.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/var-dumper.git", - "reference": "a5fa7481b199090964d6fd5dab6294d5a870c7aa" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/a5fa7481b199090964d6fd5dab6294d5a870c7aa", - "reference": "a5fa7481b199090964d6fd5dab6294d5a870c7aa", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "symfony/console": "<6.4" - }, - "require-dev": { - "ext-iconv": "*", - "symfony/console": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0", - "symfony/uid": "^6.4|^7.0", - "twig/twig": "^3.0.4" - }, - "bin": [ - "Resources/bin/var-dump-server" - ], - "type": "library", - "autoload": { - "files": [ - "Resources/functions/dump.php" - ], - "psr-4": { - "Symfony\\Component\\VarDumper\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides mechanisms for walking through any arbitrary PHP variable", - "homepage": "https://symfony.com", - "keywords": [ - "debug", - "dump" - ], - "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.1.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-08-30T16:12:47+00:00" - }, - { - "name": "tijsverkoyen/css-to-inline-styles", - "version": "v2.2.7", - "source": { - "type": "git", - "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "83ee6f38df0a63106a9e4536e3060458b74ccedb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/83ee6f38df0a63106a9e4536e3060458b74ccedb", - "reference": "83ee6f38df0a63106a9e4536e3060458b74ccedb", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "php": "^5.5 || ^7.0 || ^8.0", - "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2.x-dev" - } - }, - "autoload": { - "psr-4": { - "TijsVerkoyen\\CssToInlineStyles\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Tijs Verkoyen", - "email": "css_to_inline_styles@verkoyen.eu", - "role": "Developer" - } - ], - "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", - "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", - "support": { - "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", - "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.2.7" - }, - "time": "2023-12-08T13:03:43+00:00" - }, - { - "name": "vlucas/phpdotenv", - "version": "v5.6.1", - "source": { - "type": "git", - "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/a59a13791077fe3d44f90e7133eb68e7d22eaff2", - "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2", - "shasum": "" - }, - "require": { - "ext-pcre": "*", - "graham-campbell/result-type": "^1.1.3", - "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9.3", - "symfony/polyfill-ctype": "^1.24", - "symfony/polyfill-mbstring": "^1.24", - "symfony/polyfill-php80": "^1.24" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", - "ext-filter": "*", - "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" - }, - "suggest": { - "ext-filter": "Required to use the boolean validator." - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - }, - "branch-alias": { - "dev-master": "5.6-dev" - } - }, - "autoload": { - "psr-4": { - "Dotenv\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Vance Lucas", - "email": "vance@vancelucas.com", - "homepage": "https://github.com/vlucas" - } - ], - "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", - "keywords": [ - "dotenv", - "env", - "environment" - ], - "support": { - "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.1" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", - "type": "tidelift" - } - ], - "time": "2024-07-20T21:52:34+00:00" - }, - { - "name": "voku/portable-ascii", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/voku/portable-ascii.git", - "reference": "b56450eed252f6801410d810c8e1727224ae0743" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b56450eed252f6801410d810c8e1727224ae0743", - "reference": "b56450eed252f6801410d810c8e1727224ae0743", - "shasum": "" - }, - "require": { - "php": ">=7.0.0" - }, - "require-dev": { - "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" - }, - "suggest": { - "ext-intl": "Use Intl for transliterator_transliterate() support" - }, - "type": "library", - "autoload": { - "psr-4": { - "voku\\": "src/voku/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Lars Moelleken", - "homepage": "http://www.moelleken.org/" - } - ], - "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", - "homepage": "https://github.com/voku/portable-ascii", - "keywords": [ - "ascii", - "clean", - "php" - ], - "support": { - "issues": "https://github.com/voku/portable-ascii/issues", - "source": "https://github.com/voku/portable-ascii/tree/2.0.1" - }, - "funding": [ - { - "url": "https://www.paypal.me/moelleken", - "type": "custom" - }, - { - "url": "https://github.com/voku", - "type": "github" - }, - { - "url": "https://opencollective.com/portable-ascii", - "type": "open_collective" - }, - { - "url": "https://www.patreon.com/voku", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", - "type": "tidelift" - } - ], - "time": "2022-03-08T17:03:00+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.11.0", - "source": { - "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "php": "^7.2 || ^8.0" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.11.0" - }, - "time": "2022-06-03T18:03:27+00:00" - } - ], - "packages-dev": [ - { - "name": "archtechx/enums", - "version": "v1.1.0", - "source": { - "type": "git", - "url": "https://github.com/archtechx/enums.git", - "reference": "37326d5e26cdfcc2810f4664cdd625ea4fd528d7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/archtechx/enums/zipball/37326d5e26cdfcc2810f4664cdd625ea4fd528d7", - "reference": "37326d5e26cdfcc2810f4664cdd625ea4fd528d7", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "larastan/larastan": "^2.4", - "orchestra/testbench": "^8.0", - "pestphp/pest": "^2.0", - "pestphp/pest-plugin-laravel": "^2.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "ArchTech\\Enums\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Samuel Štancl", - "email": "samuel@archte.ch" - } - ], - "description": "Helpers for making PHP enums more lovable.", - "support": { - "issues": "https://github.com/archtechx/enums/issues", - "source": "https://github.com/archtechx/enums/tree/v1.1.0" - }, - "time": "2024-07-15T14:28:34+00:00" - }, - { - "name": "brianium/paratest", - "version": "v7.4.3", - "source": { - "type": "git", - "url": "https://github.com/paratestphp/paratest.git", - "reference": "64fcfd0e28a6b8078a19dbf9127be2ee645b92ec" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/paratestphp/paratest/zipball/64fcfd0e28a6b8078a19dbf9127be2ee645b92ec", - "reference": "64fcfd0e28a6b8078a19dbf9127be2ee645b92ec", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-pcre": "*", - "ext-reflection": "*", - "ext-simplexml": "*", - "fidry/cpu-core-counter": "^1.1.0", - "jean85/pretty-package-versions": "^2.0.5", - "php": "~8.2.0 || ~8.3.0", - "phpunit/php-code-coverage": "^10.1.11 || ^11.0.0", - "phpunit/php-file-iterator": "^4.1.0 || ^5.0.0", - "phpunit/php-timer": "^6.0.0 || ^7.0.0", - "phpunit/phpunit": "^10.5.9 || ^11.0.3", - "sebastian/environment": "^6.0.1 || ^7.0.0", - "symfony/console": "^6.4.3 || ^7.0.3", - "symfony/process": "^6.4.3 || ^7.0.3" - }, - "require-dev": { - "doctrine/coding-standard": "^12.0.0", - "ext-pcov": "*", - "ext-posix": "*", - "phpstan/phpstan": "^1.10.58", - "phpstan/phpstan-deprecation-rules": "^1.1.4", - "phpstan/phpstan-phpunit": "^1.3.15", - "phpstan/phpstan-strict-rules": "^1.5.2", - "squizlabs/php_codesniffer": "^3.9.0", - "symfony/filesystem": "^6.4.3 || ^7.0.3" - }, - "bin": [ - "bin/paratest", - "bin/paratest.bat", - "bin/paratest_for_phpstorm" - ], - "type": "library", - "autoload": { - "psr-4": { - "ParaTest\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Brian Scaturro", - "email": "scaturrob@gmail.com", - "role": "Developer" - }, - { - "name": "Filippo Tessarotto", - "email": "zoeslam@gmail.com", - "role": "Developer" - } - ], - "description": "Parallel testing for PHP", - "homepage": "https://github.com/paratestphp/paratest", - "keywords": [ - "concurrent", - "parallel", - "phpunit", - "testing" - ], - "support": { - "issues": "https://github.com/paratestphp/paratest/issues", - "source": "https://github.com/paratestphp/paratest/tree/v7.4.3" - }, - "funding": [ - { - "url": "https://github.com/sponsors/Slamdunk", - "type": "github" - }, - { - "url": "https://paypal.me/filippotessarotto", - "type": "paypal" - } - ], - "time": "2024-02-20T07:24:02+00:00" - }, - { - "name": "composer/class-map-generator", - "version": "1.3.4", - "source": { - "type": "git", - "url": "https://github.com/composer/class-map-generator.git", - "reference": "b1b3fd0b4eaf3ddf3ee230bc340bf3fff454a1a3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/class-map-generator/zipball/b1b3fd0b4eaf3ddf3ee230bc340bf3fff454a1a3", - "reference": "b1b3fd0b4eaf3ddf3ee230bc340bf3fff454a1a3", - "shasum": "" - }, - "require": { - "composer/pcre": "^2.1 || ^3.1", - "php": "^7.2 || ^8.0", - "symfony/finder": "^4.4 || ^5.3 || ^6 || ^7" - }, - "require-dev": { - "phpstan/phpstan": "^1.6", - "phpstan/phpstan-deprecation-rules": "^1", - "phpstan/phpstan-phpunit": "^1", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/filesystem": "^5.4 || ^6", - "symfony/phpunit-bridge": "^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\ClassMapGenerator\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "https://seld.be" - } - ], - "description": "Utilities to scan PHP code and generate class maps.", - "keywords": [ - "classmap" - ], - "support": { - "issues": "https://github.com/composer/class-map-generator/issues", - "source": "https://github.com/composer/class-map-generator/tree/1.3.4" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2024-06-12T14:13:04+00:00" - }, - { - "name": "composer/pcre", - "version": "3.3.1", - "source": { - "type": "git", - "url": "https://github.com/composer/pcre.git", - "reference": "63aaeac21d7e775ff9bc9d45021e1745c97521c4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/63aaeac21d7e775ff9bc9d45021e1745c97521c4", - "reference": "63aaeac21d7e775ff9bc9d45021e1745c97521c4", - "shasum": "" - }, - "require": { - "php": "^7.4 || ^8.0" - }, - "conflict": { - "phpstan/phpstan": "<1.11.10" - }, - "require-dev": { - "phpstan/phpstan": "^1.11.10", - "phpstan/phpstan-strict-rules": "^1.1", - "phpunit/phpunit": "^8 || ^9" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - }, - "phpstan": { - "includes": [ - "extension.neon" - ] - } - }, - "autoload": { - "psr-4": { - "Composer\\Pcre\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "PCRE wrapping library that offers type-safe preg_* replacements.", - "keywords": [ - "PCRE", - "preg", - "regex", - "regular expression" - ], - "support": { - "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.3.1" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2024-08-27T18:44:43+00:00" - }, - { - "name": "composer/semver", - "version": "3.4.2", - "source": { - "type": "git", - "url": "https://github.com/composer/semver.git", - "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/c51258e759afdb17f1fd1fe83bc12baaef6309d6", - "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.4", - "symfony/phpunit-bridge": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Semver\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - }, - { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "http://robbast.nl" - } - ], - "description": "Semver library that offers utilities, version constraint parsing and validation.", - "keywords": [ - "semantic", - "semver", - "validation", - "versioning" - ], - "support": { - "irc": "ircs://irc.libera.chat:6697/composer", - "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.2" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2024-07-12T11:35:52+00:00" - }, - { - "name": "dragon-code/contracts", - "version": "2.23.0", - "source": { - "type": "git", - "url": "https://github.com/TheDragonCode/contracts.git", - "reference": "44dbad923f152e0dc2699fbac2d33b65dd6a8f7d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/TheDragonCode/contracts/zipball/44dbad923f152e0dc2699fbac2d33b65dd6a8f7d", - "reference": "44dbad923f152e0dc2699fbac2d33b65dd6a8f7d", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0", - "psr/http-message": "^1.0.1 || ^2.0", - "symfony/http-kernel": "^4.0 || ^5.0 || ^6.0 || ^7.0", - "symfony/polyfill-php80": "^1.23" - }, - "conflict": { - "andrey-helldar/contracts": "*" - }, - "require-dev": { - "illuminate/database": "^10.0 || ^11.0", - "phpdocumentor/reflection-docblock": "^5.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "DragonCode\\Contracts\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro", - "homepage": "https://dragon-code.pro" - } - ], - "description": "A set of contracts for any project", - "keywords": [ - "contracts", - "interfaces" - ], - "support": { - "source": "https://github.com/TheDragonCode/contracts" - }, - "funding": [ - { - "url": "https://boosty.to/dragon-code", - "type": "boosty" - }, - { - "url": "https://www.donationalerts.com/r/dragon_code", - "type": "donationalerts" - }, - { - "url": "https://yoomoney.ru/to/410012608840929", - "type": "yoomoney" - } - ], - "time": "2024-03-11T20:15:12+00:00" - }, - { - "name": "dragon-code/pretty-array", - "version": "v4.1.0", - "source": { - "type": "git", - "url": "https://github.com/TheDragonCode/pretty-array.git", - "reference": "6c84e2454491b414efbd37985c322712cdf9012f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/TheDragonCode/pretty-array/zipball/6c84e2454491b414efbd37985c322712cdf9012f", - "reference": "6c84e2454491b414efbd37985c322712cdf9012f", - "shasum": "" - }, - "require": { - "dragon-code/contracts": "^2.20", - "dragon-code/support": "^6.11.2", - "ext-dom": "*", - "ext-mbstring": "*", - "php": "^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.6 || ^10.2" - }, - "suggest": { - "symfony/thanks": "Give thanks (in the form of a GitHub) to your fellow PHP package maintainers" - }, - "type": "library", - "autoload": { - "psr-4": { - "DragonCode\\PrettyArray\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro", - "homepage": "https://github.com/andrey-helldar" - } - ], - "description": "Simple conversion of an array to a pretty view", - "keywords": [ - "andrey helldar", - "array", - "dragon", - "dragon code", - "pretty", - "pretty array" - ], - "support": { - "issues": "https://github.com/TheDragonCode/pretty-array/issues", - "source": "https://github.com/TheDragonCode/pretty-array" - }, - "funding": [ - { - "url": "https://boosty.to/dragon-code", - "type": "boosty" - }, - { - "url": "https://github.com/sponsors/TheDragonCode", - "type": "github" - }, - { - "url": "https://opencollective.com/dragon-code", - "type": "open_collective" - }, - { - "url": "https://yoomoney.ru/to/410012608840929", - "type": "yoomoney" - } - ], - "time": "2023-06-02T11:37:44+00:00" - }, - { - "name": "dragon-code/support", - "version": "6.15.0", - "source": { - "type": "git", - "url": "https://github.com/TheDragonCode/support.git", - "reference": "087d7baaa963cdbb24e901dc27e10cdc31c2529c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/TheDragonCode/support/zipball/087d7baaa963cdbb24e901dc27e10cdc31c2529c", - "reference": "087d7baaa963cdbb24e901dc27e10cdc31c2529c", - "shasum": "" - }, - "require": { - "dragon-code/contracts": "^2.22.0", - "ext-bcmath": "*", - "ext-ctype": "*", - "ext-dom": "*", - "ext-json": "*", - "ext-mbstring": "*", - "php": "^8.1", - "psr/http-message": "^1.0.1 || ^2.0", - "symfony/polyfill-php81": "^1.25", - "voku/portable-ascii": "^1.4.8 || ^2.0.1" - }, - "conflict": { - "andrey-helldar/support": "*" - }, - "require-dev": { - "illuminate/contracts": "^9.0 || ^10.0 || ^11.0", - "phpunit/phpunit": "^9.6 || ^11.0", - "symfony/var-dumper": "^6.0 || ^7.0" - }, - "suggest": { - "dragon-code/laravel-support": "Various helper files for the Laravel and Lumen frameworks", - "symfony/thanks": "Give thanks (in the form of a GitHub) to your fellow PHP package maintainers" - }, - "type": "library", - "extra": { - "dragon-code": { - "docs-generator": { - "preview": { - "brand": "php", - "vendor": "The Dragon Code" - } - } - } - }, - "autoload": { - "psr-4": { - "DragonCode\\Support\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro", - "homepage": "https://dragon-code.pro" - } - ], - "description": "Support package is a collection of helpers and tools for any project.", - "keywords": [ - "dragon", - "dragon-code", - "framework", - "helper", - "helpers", - "laravel", - "php", - "support", - "symfony", - "yii", - "yii2" - ], - "support": { - "issues": "https://github.com/TheDragonCode/support/issues", - "source": "https://github.com/TheDragonCode/support" - }, - "funding": [ - { - "url": "https://boosty.to/dragon-code", - "type": "boosty" - }, - { - "url": "https://www.donationalerts.com/r/dragon_code", - "type": "donationalerts" - }, - { - "url": "https://yoomoney.ru/to/410012608840929", - "type": "yoomoney" - } - ], - "time": "2024-09-07T13:27:37+00:00" - }, - { - "name": "fakerphp/faker", - "version": "v1.23.1", - "source": { - "type": "git", - "url": "https://github.com/FakerPHP/Faker.git", - "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/bfb4fe148adbf78eff521199619b93a52ae3554b", - "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b", - "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.23.1" - }, - "time": "2024-01-02T13:46:09+00:00" - }, - { - "name": "fidry/cpu-core-counter", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/theofidry/cpu-core-counter.git", - "reference": "8520451a140d3f46ac33042715115e290cf5785f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/8520451a140d3f46ac33042715115e290cf5785f", - "reference": "8520451a140d3f46ac33042715115e290cf5785f", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "fidry/makefile": "^0.2.0", - "fidry/php-cs-fixer-config": "^1.1.2", - "phpstan/extension-installer": "^1.2.0", - "phpstan/phpstan": "^1.9.2", - "phpstan/phpstan-deprecation-rules": "^1.0.0", - "phpstan/phpstan-phpunit": "^1.2.2", - "phpstan/phpstan-strict-rules": "^1.4.4", - "phpunit/phpunit": "^8.5.31 || ^9.5.26", - "webmozarts/strict-phpunit": "^7.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "Fidry\\CpuCoreCounter\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Théo FIDRY", - "email": "theo.fidry@gmail.com" - } - ], - "description": "Tiny utility to get the number of CPU cores.", - "keywords": [ - "CPU", - "core" - ], - "support": { - "issues": "https://github.com/theofidry/cpu-core-counter/issues", - "source": "https://github.com/theofidry/cpu-core-counter/tree/1.2.0" - }, - "funding": [ - { - "url": "https://github.com/theofidry", - "type": "github" - } - ], - "time": "2024-08-06T10:04:20+00:00" - }, - { - "name": "filp/whoops", - "version": "2.15.4", - "source": { - "type": "git", - "url": "https://github.com/filp/whoops.git", - "reference": "a139776fa3f5985a50b509f2a02ff0f709d2a546" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/a139776fa3f5985a50b509f2a02ff0f709d2a546", - "reference": "a139776fa3f5985a50b509f2a02ff0f709d2a546", - "shasum": "" - }, - "require": { - "php": "^5.5.9 || ^7.0 || ^8.0", - "psr/log": "^1.0.1 || ^2.0 || ^3.0" - }, - "require-dev": { - "mockery/mockery": "^0.9 || ^1.0", - "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.3", - "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0" - }, - "suggest": { - "symfony/var-dumper": "Pretty print complex values better with var-dumper available", - "whoops/soap": "Formats errors as SOAP responses" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.7-dev" - } - }, - "autoload": { - "psr-4": { - "Whoops\\": "src/Whoops/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Filipe Dobreira", - "homepage": "https://github.com/filp", - "role": "Developer" - } - ], - "description": "php error handling for cool kids", - "homepage": "https://filp.github.io/whoops/", - "keywords": [ - "error", - "exception", - "handling", - "library", - "throwable", - "whoops" - ], - "support": { - "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.15.4" - }, - "funding": [ - { - "url": "https://github.com/denis-sokolov", - "type": "github" - } - ], - "time": "2023-11-03T12:00:00+00:00" - }, - { - "name": "hamcrest/hamcrest-php", - "version": "v2.0.1", - "source": { - "type": "git", - "url": "https://github.com/hamcrest/hamcrest-php.git", - "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", - "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", - "shasum": "" - }, - "require": { - "php": "^5.3|^7.0|^8.0" - }, - "replace": { - "cordoval/hamcrest-php": "*", - "davedevelopment/hamcrest-php": "*", - "kodova/hamcrest-php": "*" - }, - "require-dev": { - "phpunit/php-file-iterator": "^1.4 || ^2.0", - "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - }, - "autoload": { - "classmap": [ - "hamcrest" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "This is the PHP port of Hamcrest Matchers", - "keywords": [ - "test" - ], - "support": { - "issues": "https://github.com/hamcrest/hamcrest-php/issues", - "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" - }, - "time": "2020-07-09T08:09:16+00:00" - }, - { - "name": "jean85/pretty-package-versions", - "version": "2.0.6", - "source": { - "type": "git", - "url": "https://github.com/Jean85/pretty-package-versions.git", - "reference": "f9fdd29ad8e6d024f52678b570e5593759b550b4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/f9fdd29ad8e6d024f52678b570e5593759b550b4", - "reference": "f9fdd29ad8e6d024f52678b570e5593759b550b4", - "shasum": "" - }, - "require": { - "composer-runtime-api": "^2.0.0", - "php": "^7.1|^8.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3.2", - "jean85/composer-provided-replaced-stub-package": "^1.0", - "phpstan/phpstan": "^1.4", - "phpunit/phpunit": "^7.5|^8.5|^9.4", - "vimeo/psalm": "^4.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Jean85\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Alessandro Lai", - "email": "alessandro.lai85@gmail.com" - } - ], - "description": "A library to get pretty versions strings of installed dependencies", - "keywords": [ - "composer", - "package", - "release", - "versions" - ], - "support": { - "issues": "https://github.com/Jean85/pretty-package-versions/issues", - "source": "https://github.com/Jean85/pretty-package-versions/tree/2.0.6" - }, - "time": "2024-03-08T09:58:59+00:00" - }, - { - "name": "larastan/larastan", - "version": "v2.9.8", - "source": { - "type": "git", - "url": "https://github.com/larastan/larastan.git", - "reference": "340badd89b0eb5bddbc503a4829c08cf9a2819d7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/larastan/larastan/zipball/340badd89b0eb5bddbc503a4829c08cf9a2819d7", - "reference": "340badd89b0eb5bddbc503a4829c08cf9a2819d7", - "shasum": "" - }, - "require": { - "ext-json": "*", - "illuminate/console": "^9.52.16 || ^10.28.0 || ^11.0", - "illuminate/container": "^9.52.16 || ^10.28.0 || ^11.0", - "illuminate/contracts": "^9.52.16 || ^10.28.0 || ^11.0", - "illuminate/database": "^9.52.16 || ^10.28.0 || ^11.0", - "illuminate/http": "^9.52.16 || ^10.28.0 || ^11.0", - "illuminate/pipeline": "^9.52.16 || ^10.28.0 || ^11.0", - "illuminate/support": "^9.52.16 || ^10.28.0 || ^11.0", - "php": "^8.0.2", - "phpmyadmin/sql-parser": "^5.9.0", - "phpstan/phpstan": "^1.11.2" - }, - "require-dev": { - "doctrine/coding-standard": "^12.0", - "nikic/php-parser": "^4.19.1", - "orchestra/canvas": "^7.11.1 || ^8.11.0 || ^9.0.2", - "orchestra/testbench": "^7.33.0 || ^8.13.0 || ^9.0.3", - "phpunit/phpunit": "^9.6.13 || ^10.5.16" - }, - "suggest": { - "orchestra/testbench": "Using Larastan for analysing a package needs Testbench" - }, - "type": "phpstan-extension", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - }, - "phpstan": { - "includes": [ - "extension.neon" - ] - } - }, - "autoload": { - "psr-4": { - "Larastan\\Larastan\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Can Vural", - "email": "can9119@gmail.com" - }, - { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" - } - ], - "description": "Larastan - Discover bugs in your code without running it. A phpstan/phpstan wrapper for Laravel", - "keywords": [ - "PHPStan", - "code analyse", - "code analysis", - "larastan", - "laravel", - "package", - "php", - "static analysis" - ], - "support": { - "issues": "https://github.com/larastan/larastan/issues", - "source": "https://github.com/larastan/larastan/tree/v2.9.8" - }, - "funding": [ - { - "url": "https://www.paypal.com/paypalme/enunomaduro", - "type": "custom" - }, - { - "url": "https://github.com/canvural", - "type": "github" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - }, - { - "url": "https://www.patreon.com/nunomaduro", - "type": "patreon" - } - ], - "time": "2024-07-06T17:46:02+00:00" - }, - { - "name": "laravel-lang/actions", - "version": "1.8.5", - "source": { - "type": "git", - "url": "https://github.com/Laravel-Lang/actions.git", - "reference": "bc59d4a92e13d35d07a45265552a830c47fbe878" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Laravel-Lang/actions/zipball/bc59d4a92e13d35d07a45265552a830c47fbe878", - "reference": "bc59d4a92e13d35d07a45265552a830c47fbe878", - "shasum": "" - }, - "require": { - "ext-json": "*", - "laravel-lang/publisher": "^14.0 || ^15.0 || ^16.0", - "php": "^8.1" - }, - "require-dev": { - "laravel-lang/status-generator": "^2.3.1", - "phpunit/phpunit": "^10.0", - "symfony/var-dumper": "^6.3 || ^7.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "LaravelLang\\Actions\\ServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "LaravelLang\\Actions\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro", - "homepage": "https://dragon-code.pro" - }, - { - "name": "Laravel Lang Team", - "homepage": "https://laravel-lang.com" - } - ], - "description": "Translation of buttons and other action elements", - "keywords": [ - "actions", - "buttons", - "lang", - "languages", - "laravel", - "translations" - ], - "support": { - "issues": "https://github.com/Laravel-Lang/actions/issues", - "source": "https://github.com/Laravel-Lang/actions/tree/1.8.5" - }, - "time": "2024-09-07T11:55:41+00:00" - }, - { - "name": "laravel-lang/attributes", - "version": "2.10.8", - "source": { - "type": "git", - "url": "https://github.com/Laravel-Lang/attributes.git", - "reference": "cf53eb18a47692045ac135e5be1e3fa979232504" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Laravel-Lang/attributes/zipball/cf53eb18a47692045ac135e5be1e3fa979232504", - "reference": "cf53eb18a47692045ac135e5be1e3fa979232504", - "shasum": "" - }, - "require": { - "ext-json": "*", - "laravel-lang/publisher": "^14.0 || ^15.0 || ^16.0", - "php": "^8.1" - }, - "require-dev": { - "laravel-lang/status-generator": "^1.19 || ^2.0", - "phpunit/phpunit": "^10.0", - "symfony/var-dumper": "^6.0 || ^7.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "LaravelLang\\Attributes\\ServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "LaravelLang\\Attributes\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro" - }, - { - "name": "Laravel-Lang Team", - "homepage": "https://github.com/Laravel-Lang" - } - ], - "description": "List of 126 languages for form field names", - "keywords": [ - "attributes", - "fields", - "form", - "lang", - "languages", - "laravel", - "messages", - "translations", - "validation" - ], - "support": { - "issues": "https://github.com/Laravel-Lang/attributes/issues", - "source": "https://github.com/Laravel-Lang/attributes/tree/2.10.8" - }, - "time": "2024-08-30T09:34:14+00:00" - }, - { - "name": "laravel-lang/common", - "version": "6.4.0", - "source": { - "type": "git", - "url": "https://github.com/Laravel-Lang/common.git", - "reference": "36c0270180f71420c1166c26f38dc25e1c8b7f64" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Laravel-Lang/common/zipball/36c0270180f71420c1166c26f38dc25e1c8b7f64", - "reference": "36c0270180f71420c1166c26f38dc25e1c8b7f64", - "shasum": "" - }, - "require": { - "laravel-lang/actions": "^1.8.3", - "laravel-lang/attributes": "^2.10.7", - "laravel-lang/http-statuses": "^3.8.3", - "laravel-lang/json-fallback": "^2.1", - "laravel-lang/lang": "^13.12 || ^14.0 || ^15.5.1", - "laravel-lang/locales": "^2.8", - "laravel-lang/models": "^1.0", - "laravel-lang/publisher": "^16.4", - "laravel-lang/routes": "^1.0", - "php": "^8.1" - }, - "require-dev": { - "dragon-code/support": "^6.13", - "orchestra/testbench": "^8.17 || ^9.1.2", - "phpunit/phpunit": "^10.5.20", - "symfony/var-dumper": "^6.4 || ^7.1.1" - }, - "type": "library", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Laravel-Lang Team", - "homepage": "https://github.com/Laravel-Lang" - }, - { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro", - "homepage": "https://dragon-code.pro" - } - ], - "description": "Easily connect the necessary language packs to the application", - "keywords": [ - "Laravel-lang", - "actions", - "attribute", - "attributes", - "breeze", - "buttons", - "cashier", - "fortify", - "framework", - "http", - "http-status", - "http-status-code", - "i18n", - "jetstream", - "lang", - "language", - "languages", - "laravel", - "locale", - "locales", - "localization", - "localizations", - "nova", - "publisher", - "spark", - "translation", - "translations", - "ui" - ], - "support": { - "issues": "https://github.com/Laravel-Lang/common/issues", - "source": "https://github.com/Laravel-Lang/common" - }, - "time": "2024-07-06T16:48:35+00:00" - }, - { - "name": "laravel-lang/config", - "version": "1.10.0", - "source": { - "type": "git", - "url": "https://github.com/Laravel-Lang/config.git", - "reference": "67c9273a2e5487441a7034c2422bb1527200bce5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Laravel-Lang/config/zipball/67c9273a2e5487441a7034c2422bb1527200bce5", - "reference": "67c9273a2e5487441a7034c2422bb1527200bce5", - "shasum": "" - }, - "require": { - "archtechx/enums": "^1.0", - "illuminate/config": "^10.0 || ^11.0", - "illuminate/support": "^10.0 || ^11.0", - "laravel-lang/locale-list": "^1.4", - "php": "^8.1" - }, - "require-dev": { - "orchestra/testbench": "^8.23 || ^9.1", - "pestphp/pest": "^2.34" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "LaravelLang\\Config\\ServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "LaravelLang\\Config\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro", - "homepage": "https://dragon-code.pro" - }, - { - "name": "Laravel-Lang Team", - "homepage": "https://laravel-lang.com" - } - ], - "description": "The Laravel-Lang config package", - "keywords": [ - "Laravel-lang", - "Settings", - "config", - "lang", - "languages", - "laravel", - "locale", - "locales", - "localization", - "localizations", - "translation", - "translations" - ], - "support": { - "issues": "https://github.com/Laravel-Lang/config/issues", - "source": "https://github.com/Laravel-Lang/config/tree/1.10.0" - }, - "time": "2024-09-07T11:28:53+00:00" - }, - { - "name": "laravel-lang/http-statuses", - "version": "3.8.4", - "source": { - "type": "git", - "url": "https://github.com/Laravel-Lang/http-statuses.git", - "reference": "0e8b1af2835f951f5587f6c635ea6b929f275415" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Laravel-Lang/http-statuses/zipball/0e8b1af2835f951f5587f6c635ea6b929f275415", - "reference": "0e8b1af2835f951f5587f6c635ea6b929f275415", - "shasum": "" - }, - "require": { - "ext-json": "*", - "laravel-lang/publisher": "^14.1 || ^15.0 || ^16.0", - "php": "^8.1" - }, - "require-dev": { - "laravel-lang/status-generator": "^1.19 || ^2.0", - "phpunit/phpunit": "^10.0", - "symfony/var-dumper": "^6.0 || ^7.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "LaravelLang\\HttpStatuses\\ServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "LaravelLang\\HttpStatuses\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro" - }, - { - "name": "Laravel-Lang Team", - "homepage": "https://github.com/Laravel-Lang" - } - ], - "description": "List of 126 languages for HTTP statuses", - "keywords": [ - "http", - "lang", - "languages", - "laravel", - "messages", - "status", - "translations" - ], - "support": { - "issues": "https://github.com/Laravel-Lang/http-statuses/issues", - "source": "https://github.com/Laravel-Lang/http-statuses/tree/3.8.4" - }, - "time": "2024-07-20T18:15:58+00:00" - }, - { - "name": "laravel-lang/json-fallback", - "version": "2.1.0", - "source": { - "type": "git", - "url": "https://github.com/Laravel-Lang/json-fallback.git", - "reference": "597865ffcef81b7e92227ea73ff3a9a3372fb91a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Laravel-Lang/json-fallback/zipball/597865ffcef81b7e92227ea73ff3a9a3372fb91a", - "reference": "597865ffcef81b7e92227ea73ff3a9a3372fb91a", - "shasum": "" - }, - "require": { - "illuminate/support": "^10.0 || ^11.0", - "illuminate/translation": "^10.0 || ^11.0", - "php": "^8.1" - }, - "require-dev": { - "orchestra/testbench": "^8.0 || ^9.0", - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "LaravelLang\\JsonFallback\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro", - "homepage": "https://github.com/andrey-helldar" - }, - { - "name": "Felipe Dsdev", - "homepage": "https://github.com/felipe-dsdev" - } - ], - "description": "Adds support for fallback JSON string translation", - "support": { - "issues": "https://github.com/Laravel-Lang/json-fallback/issues", - "source": "https://github.com/Laravel-Lang/json-fallback/tree/2.1.0" - }, - "time": "2024-03-13T09:18:03+00:00" - }, - { - "name": "laravel-lang/lang", - "version": "15.7.3", - "source": { - "type": "git", - "url": "https://github.com/Laravel-Lang/lang.git", - "reference": "0877b8d0881cfe0881a4addd4e9319b736bd5c77" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Laravel-Lang/lang/zipball/0877b8d0881cfe0881a4addd4e9319b736bd5c77", - "reference": "0877b8d0881cfe0881a4addd4e9319b736bd5c77", - "shasum": "" - }, - "require": { - "ext-json": "*", - "laravel-lang/publisher": "^16.0", - "php": "^8.2" - }, - "conflict": { - "laravel/framework": "<11.0.7" - }, - "require-dev": { - "laravel-lang/status-generator": "^2.11", - "phpunit/phpunit": "^10.0", - "symfony/var-dumper": "^7.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "LaravelLang\\Lang\\ServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "LaravelLang\\Lang\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Laravel-Lang Team", - "homepage": "https://github.com/Laravel-Lang" - } - ], - "description": "List of 126 languages for Laravel Framework, Laravel Jetstream, Laravel Fortify, Laravel Breeze, Laravel Cashier, Laravel Nova, Laravel Spark and Laravel UI", - "keywords": [ - "lang", - "languages", - "laravel", - "lpm" - ], - "support": { - "issues": "https://github.com/Laravel-Lang/lang/issues", - "source": "https://github.com/Laravel-Lang/lang" - }, - "time": "2024-08-28T08:28:47+00:00" - }, - { - "name": "laravel-lang/locale-list", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/Laravel-Lang/locale-list.git", - "reference": "48b8e4304f8b1ad34456270d35d44ca0c3e6ea0d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Laravel-Lang/locale-list/zipball/48b8e4304f8b1ad34456270d35d44ca0c3e6ea0d", - "reference": "48b8e4304f8b1ad34456270d35d44ca0c3e6ea0d", - "shasum": "" - }, - "require": { - "archtechx/enums": "^0.3.2 || ^1.0", - "php": "^8.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "LaravelLang\\LocaleList\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro", - "homepage": "https://dragon-code.pro" - }, - { - "name": "Laravel-Lang Team", - "homepage": "https://laravel-lang.com" - } - ], - "description": "List of localizations available in Laravel Lang projects", - "keywords": [ - "Laravel-lang", - "lang", - "languages", - "laravel", - "locale", - "locales", - "localization", - "translation", - "translations" - ], - "support": { - "issues": "https://github.com/Laravel-Lang/locale-list/issues", - "source": "https://github.com/Laravel-Lang/locale-list" - }, - "time": "2024-06-01T00:24:42+00:00" - }, - { - "name": "laravel-lang/locales", - "version": "2.9.2", - "source": { - "type": "git", - "url": "https://github.com/Laravel-Lang/locales.git", - "reference": "e7914ccfb91432ebebacf46697b573a330d702c7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Laravel-Lang/locales/zipball/e7914ccfb91432ebebacf46697b573a330d702c7", - "reference": "e7914ccfb91432ebebacf46697b573a330d702c7", - "shasum": "" - }, - "require": { - "archtechx/enums": "^0.3.2 || ^1.0", - "dragon-code/support": "^6.11.3", - "ext-json": "*", - "illuminate/collections": "^10.0 || ^11.0", - "laravel-lang/config": "^1.0.2", - "laravel-lang/locale-list": "^1.2", - "laravel-lang/native-country-names": "^1.3", - "laravel-lang/native-currency-names": "^1.3", - "laravel-lang/native-locale-names": "^2.2", - "php": "^8.1" - }, - "require-dev": { - "orchestra/testbench": "^8.0 || ^9.0", - "pestphp/pest": "^2.24.1", - "symfony/var-dumper": "^6.0 || ^7.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "LaravelLang\\Locales\\ServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "LaravelLang\\Locales\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro" - }, - { - "name": "Laravel-Lang Team", - "homepage": "https://laravel-lang.com" - } - ], - "description": "Basic functionality for working with localizations", - "keywords": [ - "laravel", - "locale", - "locales", - "localization", - "translation", - "translations" - ], - "support": { - "issues": "https://github.com/Laravel-Lang/locales/issues", - "source": "https://github.com/Laravel-Lang/locales" - }, - "time": "2024-06-24T09:56:41+00:00" - }, - { - "name": "laravel-lang/models", - "version": "1.1.0", - "source": { - "type": "git", - "url": "https://github.com/Laravel-Lang/models.git", - "reference": "b46f5ff2990755c79ac408255e70b5c8a38063e0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Laravel-Lang/models/zipball/b46f5ff2990755c79ac408255e70b5c8a38063e0", - "reference": "b46f5ff2990755c79ac408255e70b5c8a38063e0", - "shasum": "" - }, - "require": { - "composer/class-map-generator": "^1.3", - "dragon-code/support": "^6.13", - "illuminate/database": "^10.0 || ^11.0", - "illuminate/support": "^10.0 || ^11.0", - "laravel-lang/config": "^1.9", - "laravel-lang/locales": "^2.9.2", - "laravel/prompts": "^0.1.24", - "php": "^8.1" - }, - "require-dev": { - "orchestra/testbench": "^8.0 || ^9.0", - "pestphp/pest": "^2.34", - "pestphp/pest-plugin-laravel": "^2.4", - "symfony/var-dumper": "^6.0 || ^7.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "LaravelLang\\Models\\ServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "LaravelLang\\Models\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro", - "homepage": "https://dragon-code.pro", - "role": "Maintainer" - }, - { - "name": "Andrey Sokolov", - "email": "walfireru@gmail.com", - "homepage": "https://github.com/Quiss", - "role": "Usability consultant" - }, - { - "name": "Laravel-Lang Team", - "homepage": "https://github.com/Laravel-Lang" - } - ], - "description": "Easy and fast way to localize models", - "keywords": [ - "database", - "l18n", - "languages", - "laravel", - "locales", - "localization", - "models", - "translate", - "translations" - ], - "support": { - "issues": "https://github.com/Laravel-Lang/models/issues", - "source": "https://github.com/Laravel-Lang/models" - }, - "time": "2024-08-31T15:47:28+00:00" - }, - { - "name": "laravel-lang/native-country-names", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/Laravel-Lang/native-country-names.git", - "reference": "cddca6627c8732770a2e2c11c921753b6d0adb66" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Laravel-Lang/native-country-names/zipball/cddca6627c8732770a2e2c11c921753b6d0adb66", - "reference": "cddca6627c8732770a2e2c11c921753b6d0adb66", - "shasum": "" - }, - "require": { - "dragon-code/support": "^6.11", - "ext-json": "*", - "illuminate/collections": "^10.0 || ^11.0", - "php": "^8.1" - }, - "require-dev": { - "illuminate/support": "^10.0 || ^11.0", - "laravel-lang/locale-list": "^1.2", - "pestphp/pest": "^2.24.3", - "punic/punic": "^3.8", - "symfony/console": "^6.3 || ^7.0", - "symfony/process": "^6.3 || ^7.0", - "symfony/var-dumper": "^6.3 || ^7.0", - "vlucas/phpdotenv": "^5.6" - }, - "type": "library", - "autoload": { - "psr-4": { - "LaravelLang\\NativeCountryNames\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro" - }, - { - "name": "Laravel-Lang Team", - "homepage": "https://laravel-lang.com" - } - ], - "description": "The project contains native translations of country names", - "keywords": [ - "Laravel-lang", - "countries", - "country", - "lang", - "languages", - "laravel", - "locale", - "locales", - "localization", - "territories", - "territory", - "translation", - "translations" - ], - "support": { - "issues": "https://github.com/Laravel-Lang/native-country-names/issues", - "source": "https://github.com/Laravel-Lang/native-country-names" - }, - "time": "2024-03-13T09:34:55+00:00" - }, - { - "name": "laravel-lang/native-currency-names", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/Laravel-Lang/native-currency-names.git", - "reference": "2e0fbe039421ac753b4fd5256bd239147a0a88fe" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Laravel-Lang/native-currency-names/zipball/2e0fbe039421ac753b4fd5256bd239147a0a88fe", - "reference": "2e0fbe039421ac753b4fd5256bd239147a0a88fe", - "shasum": "" - }, - "require": { - "dragon-code/support": "^6.11", - "ext-json": "*", - "illuminate/collections": "^10.0 || ^11.0", - "php": "^8.1" - }, - "require-dev": { - "illuminate/support": "^10.0 || ^11.0", - "laravel-lang/locale-list": "^1.2", - "pestphp/pest": "^2.24.3", - "punic/punic": "^3.8", - "symfony/console": "^6.3 || ^7.0", - "symfony/process": "^6.3 || ^7.0", - "symfony/var-dumper": "^6.3 || ^7.0", - "vlucas/phpdotenv": "^5.6" - }, - "type": "library", - "autoload": { - "psr-4": { - "LaravelLang\\NativeCurrencyNames\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro" - }, - { - "name": "Laravel-Lang Team", - "homepage": "https://laravel-lang.com" - } - ], - "description": "The project contains native translations of currency names", - "keywords": [ - "Laravel-lang", - "currency", - "lang", - "languages", - "laravel", - "locale", - "locales", - "localization", - "translation", - "translations" - ], - "support": { - "issues": "https://github.com/Laravel-Lang/native-currency-names/issues", - "source": "https://github.com/Laravel-Lang/native-currency-names" - }, - "time": "2024-03-13T09:40:02+00:00" - }, - { - "name": "laravel-lang/native-locale-names", - "version": "2.3.0", - "source": { - "type": "git", - "url": "https://github.com/Laravel-Lang/native-locale-names.git", - "reference": "39ef3330938b74277456049bf386453109e4d05c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Laravel-Lang/native-locale-names/zipball/39ef3330938b74277456049bf386453109e4d05c", - "reference": "39ef3330938b74277456049bf386453109e4d05c", - "shasum": "" - }, - "require": { - "dragon-code/support": "^6.11", - "ext-json": "*", - "php": "^8.1" - }, - "require-dev": { - "illuminate/support": "^10.31 || ^11.0", - "laravel-lang/locale-list": "^1.2", - "pestphp/pest": "^2.24.3", - "punic/punic": "^3.8", - "symfony/console": "^6.3 || ^7.0", - "symfony/process": "^6.3 || ^7.0", - "symfony/var-dumper": "^6.3 || ^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "LaravelLang\\NativeLocaleNames\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro" - }, - { - "name": "Laravel-Lang Team", - "homepage": "https://laravel-lang.com" - } - ], - "description": "The project contains native translations of locale names", - "keywords": [ - "Laravel-lang", - "lang", - "languages", - "laravel", - "locale", - "locales", - "localization", - "translation", - "translations" - ], - "support": { - "issues": "https://github.com/Laravel-Lang/native-locale-names/issues", - "source": "https://github.com/Laravel-Lang/native-locale-names" - }, - "time": "2024-03-13T09:28:19+00:00" - }, - { - "name": "laravel-lang/publisher", - "version": "16.4.0", - "source": { - "type": "git", - "url": "https://github.com/Laravel-Lang/publisher.git", - "reference": "7812e7a07e6f2fdb7d258f3ab1d481d1cbf7f32c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Laravel-Lang/publisher/zipball/7812e7a07e6f2fdb7d258f3ab1d481d1cbf7f32c", - "reference": "7812e7a07e6f2fdb7d258f3ab1d481d1cbf7f32c", - "shasum": "" - }, - "require": { - "composer/semver": "^3.4", - "dragon-code/pretty-array": "^4.1", - "dragon-code/support": "^6.11.3", - "ext-json": "*", - "illuminate/collections": "^10.0 || ^11.0", - "illuminate/console": "^10.0 || ^11.0", - "illuminate/support": "^10.0 || ^11.0", - "laravel-lang/config": "^1.0", - "laravel-lang/locales": "^2.3", - "league/commonmark": "^2.4.1", - "league/config": "^1.2", - "php": "^8.1" - }, - "conflict": { - "laravel-lang/attributes": "<2.0", - "laravel-lang/http-statuses": "<3.0", - "laravel-lang/lang": "<11.0" - }, - "require-dev": { - "laravel-lang/json-fallback": "^2.0", - "orchestra/testbench": "^8.14 || ^9.0", - "phpunit/phpunit": "^10.4.2", - "symfony/var-dumper": "^6.3.6 || ^7.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "LaravelLang\\Publisher\\ServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "LaravelLang\\Publisher\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro" - }, - { - "name": "Laravel-Lang Team", - "homepage": "https://laravel-lang.com" - } - ], - "description": "Publisher lang files for the Laravel and Lumen Frameworks, Jetstream, Fortify, Cashier, Spark and Nova from Laravel-Lang/lang", - "keywords": [ - "Laravel-lang", - "breeze", - "cashier", - "fortify", - "framework", - "i18n", - "jetstream", - "lang", - "languages", - "laravel", - "locale", - "locales", - "localization", - "localizations", - "lpm", - "lumen", - "nova", - "publisher", - "spark", - "trans", - "translation", - "translations", - "validations" - ], - "support": { - "issues": "https://github.com/Laravel-Lang/publisher/issues", - "source": "https://github.com/Laravel-Lang/publisher" - }, - "time": "2024-06-02T00:22:33+00:00" - }, - { - "name": "laravel-lang/routes", - "version": "1.5.0", - "source": { - "type": "git", - "url": "https://github.com/Laravel-Lang/routes.git", - "reference": "addc4438fac481389e66e349ac3b93670aa4301b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Laravel-Lang/routes/zipball/addc4438fac481389e66e349ac3b93670aa4301b", - "reference": "addc4438fac481389e66e349ac3b93670aa4301b", - "shasum": "" - }, - "require": { - "dragon-code/support": "^6.13", - "illuminate/config": "^10.0 || ^11.0", - "illuminate/http": "^10.0 || ^11.0", - "illuminate/routing": "^10.0 || ^11.0", - "illuminate/support": "^10.0 || ^11.0", - "laravel-lang/config": "^1.6", - "laravel-lang/locales": "^2.8", - "php": "^8.1" - }, - "require-dev": { - "orchestra/testbench": "^8.23 || ^9.1", - "pestphp/pest": "^2.34", - "pestphp/pest-plugin-laravel": "^2.4", - "symfony/var-dumper": "^6.0 || ^7.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "LaravelLang\\Routes\\ServiceProvider" - ] - } - }, - "autoload": { - "files": [ - "helpers/functions.php" - ], - "psr-4": { - "LaravelLang\\Routes\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro", - "homepage": "https://dragon-code.pro" - }, - { - "name": "Laravel-Lang Team", - "homepage": "https://github.com/Laravel-Lang" - } - ], - "description": "Easy and fast way to localize routes", - "keywords": [ - "l18n", - "languages", - "laravel", - "localization", - "routes", - "translate", - "translations" - ], - "support": { - "issues": "https://github.com/Laravel-Lang/routes/issues", - "source": "https://github.com/Laravel-Lang/routes" - }, - "time": "2024-07-10T10:28:26+00:00" - }, - { - "name": "laravel/pint", - "version": "v1.17.3", - "source": { - "type": "git", - "url": "https://github.com/laravel/pint.git", - "reference": "9d77be916e145864f10788bb94531d03e1f7b482" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/pint/zipball/9d77be916e145864f10788bb94531d03e1f7b482", - "reference": "9d77be916e145864f10788bb94531d03e1f7b482", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-mbstring": "*", - "ext-tokenizer": "*", - "ext-xml": "*", - "php": "^8.1.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3.64.0", - "illuminate/view": "^10.48.20", - "larastan/larastan": "^2.9.8", - "laravel-zero/framework": "^10.4.0", - "mockery/mockery": "^1.6.12", - "nunomaduro/termwind": "^1.15.1", - "pestphp/pest": "^2.35.1" - }, - "bin": [ - "builds/pint" - ], - "type": "project", - "autoload": { - "psr-4": { - "App\\": "app/", - "Database\\Seeders\\": "database/seeders/", - "Database\\Factories\\": "database/factories/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" - } - ], - "description": "An opinionated code formatter for PHP.", - "homepage": "https://laravel.com", - "keywords": [ - "format", - "formatter", - "lint", - "linter", - "php" - ], - "support": { - "issues": "https://github.com/laravel/pint/issues", - "source": "https://github.com/laravel/pint" - }, - "time": "2024-09-03T15:00:28+00:00" - }, - { - "name": "mockery/mockery", - "version": "1.6.12", - "source": { - "type": "git", - "url": "https://github.com/mockery/mockery.git", - "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/1f4efdd7d3beafe9807b08156dfcb176d18f1699", - "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699", - "shasum": "" - }, - "require": { - "hamcrest/hamcrest-php": "^2.0.1", - "lib-pcre": ">=7.0", - "php": ">=7.3" - }, - "conflict": { - "phpunit/phpunit": "<8.0" - }, - "require-dev": { - "phpunit/phpunit": "^8.5 || ^9.6.17", - "symplify/easy-coding-standard": "^12.1.14" - }, - "type": "library", - "autoload": { - "files": [ - "library/helpers.php", - "library/Mockery.php" - ], - "psr-4": { - "Mockery\\": "library/Mockery" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Pádraic Brady", - "email": "padraic.brady@gmail.com", - "homepage": "https://github.com/padraic", - "role": "Author" - }, - { - "name": "Dave Marshall", - "email": "dave.marshall@atstsolutions.co.uk", - "homepage": "https://davedevelopment.co.uk", - "role": "Developer" - }, - { - "name": "Nathanael Esayeas", - "email": "nathanael.esayeas@protonmail.com", - "homepage": "https://github.com/ghostwriter", - "role": "Lead Developer" - } - ], - "description": "Mockery is a simple yet flexible PHP mock object framework", - "homepage": "https://github.com/mockery/mockery", - "keywords": [ - "BDD", - "TDD", - "library", - "mock", - "mock objects", - "mockery", - "stub", - "test", - "test double", - "testing" - ], - "support": { - "docs": "https://docs.mockery.io/", - "issues": "https://github.com/mockery/mockery/issues", - "rss": "https://github.com/mockery/mockery/releases.atom", - "security": "https://github.com/mockery/mockery/security/advisories", - "source": "https://github.com/mockery/mockery" - }, - "time": "2024-05-16T03:13:13+00:00" - }, - { - "name": "myclabs/deep-copy", - "version": "1.12.0", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", - "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "conflict": { - "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3 <3.2.2" - }, - "require-dev": { - "doctrine/collections": "^1.6.8", - "doctrine/common": "^2.13.3 || ^3.2.2", - "phpspec/prophecy": "^1.10", - "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" - }, - "type": "library", - "autoload": { - "files": [ - "src/DeepCopy/deep_copy.php" - ], - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" - ], - "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.12.0" - }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" - } - ], - "time": "2024-06-12T14:39:25+00:00" - }, - { - "name": "nunomaduro/collision", - "version": "v8.4.0", - "source": { - "type": "git", - "url": "https://github.com/nunomaduro/collision.git", - "reference": "e7d1aa8ed753f63fa816932bbc89678238843b4a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/e7d1aa8ed753f63fa816932bbc89678238843b4a", - "reference": "e7d1aa8ed753f63fa816932bbc89678238843b4a", - "shasum": "" - }, - "require": { - "filp/whoops": "^2.15.4", - "nunomaduro/termwind": "^2.0.1", - "php": "^8.2.0", - "symfony/console": "^7.1.3" - }, - "conflict": { - "laravel/framework": "<11.0.0 || >=12.0.0", - "phpunit/phpunit": "<10.5.1 || >=12.0.0" - }, - "require-dev": { - "larastan/larastan": "^2.9.8", - "laravel/framework": "^11.19.0", - "laravel/pint": "^1.17.1", - "laravel/sail": "^1.31.0", - "laravel/sanctum": "^4.0.2", - "laravel/tinker": "^2.9.0", - "orchestra/testbench-core": "^9.2.3", - "pestphp/pest": "^2.35.0 || ^3.0.0", - "sebastian/environment": "^6.1.0 || ^7.0.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" - ] - }, - "branch-alias": { - "dev-8.x": "8.x-dev" - } - }, - "autoload": { - "files": [ - "./src/Adapters/Phpunit/Autoload.php" - ], - "psr-4": { - "NunoMaduro\\Collision\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" - } - ], - "description": "Cli error handling for console/command-line PHP applications.", - "keywords": [ - "artisan", - "cli", - "command-line", - "console", - "error", - "handling", - "laravel", - "laravel-zero", - "php", - "symfony" - ], - "support": { - "issues": "https://github.com/nunomaduro/collision/issues", - "source": "https://github.com/nunomaduro/collision" - }, - "funding": [ - { - "url": "https://www.paypal.com/paypalme/enunomaduro", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - }, - { - "url": "https://www.patreon.com/nunomaduro", - "type": "patreon" - } - ], - "time": "2024-08-03T15:32:23+00:00" - }, - { - "name": "pestphp/pest", - "version": "v2.35.1", - "source": { - "type": "git", - "url": "https://github.com/pestphp/pest.git", - "reference": "b13acb630df52c06123588d321823c31fc685545" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest/zipball/b13acb630df52c06123588d321823c31fc685545", - "reference": "b13acb630df52c06123588d321823c31fc685545", - "shasum": "" - }, - "require": { - "brianium/paratest": "^7.3.1", - "nunomaduro/collision": "^7.10.0|^8.4.0", - "nunomaduro/termwind": "^1.15.1|^2.0.1", - "pestphp/pest-plugin": "^2.1.1", - "pestphp/pest-plugin-arch": "^2.7.0", - "php": "^8.1.0", - "phpunit/phpunit": "^10.5.17" - }, - "conflict": { - "phpunit/phpunit": ">10.5.17", - "sebastian/exporter": "<5.1.0", - "webmozart/assert": "<1.11.0" - }, - "require-dev": { - "pestphp/pest-dev-tools": "^2.16.0", - "pestphp/pest-plugin-type-coverage": "^2.8.5", - "symfony/process": "^6.4.0|^7.1.3" - }, - "bin": [ - "bin/pest" - ], - "type": "library", - "extra": { - "pest": { - "plugins": [ - "Pest\\Plugins\\Bail", - "Pest\\Plugins\\Cache", - "Pest\\Plugins\\Coverage", - "Pest\\Plugins\\Init", - "Pest\\Plugins\\Environment", - "Pest\\Plugins\\Help", - "Pest\\Plugins\\Memory", - "Pest\\Plugins\\Only", - "Pest\\Plugins\\Printer", - "Pest\\Plugins\\ProcessIsolation", - "Pest\\Plugins\\Profile", - "Pest\\Plugins\\Retry", - "Pest\\Plugins\\Snapshot", - "Pest\\Plugins\\Verbose", - "Pest\\Plugins\\Version", - "Pest\\Plugins\\Parallel" - ] - }, - "phpstan": { - "includes": [ - "extension.neon" - ] - } - }, - "autoload": { - "files": [ - "src/Functions.php", - "src/Pest.php" - ], - "psr-4": { - "Pest\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" - } - ], - "description": "The elegant PHP Testing Framework.", - "keywords": [ - "framework", - "pest", - "php", - "test", - "testing", - "unit" - ], - "support": { - "issues": "https://github.com/pestphp/pest/issues", - "source": "https://github.com/pestphp/pest/tree/v2.35.1" - }, - "funding": [ - { - "url": "https://www.paypal.com/paypalme/enunomaduro", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - } - ], - "time": "2024-08-20T21:41:50+00:00" - }, - { - "name": "pestphp/pest-plugin", - "version": "v2.1.1", - "source": { - "type": "git", - "url": "https://github.com/pestphp/pest-plugin.git", - "reference": "e05d2859e08c2567ee38ce8b005d044e72648c0b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest-plugin/zipball/e05d2859e08c2567ee38ce8b005d044e72648c0b", - "reference": "e05d2859e08c2567ee38ce8b005d044e72648c0b", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^2.0.0", - "composer-runtime-api": "^2.2.2", - "php": "^8.1" - }, - "conflict": { - "pestphp/pest": "<2.2.3" - }, - "require-dev": { - "composer/composer": "^2.5.8", - "pestphp/pest": "^2.16.0", - "pestphp/pest-dev-tools": "^2.16.0" - }, - "type": "composer-plugin", - "extra": { - "class": "Pest\\Plugin\\Manager" - }, - "autoload": { - "psr-4": { - "Pest\\Plugin\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "The Pest plugin manager", - "keywords": [ - "framework", - "manager", - "pest", - "php", - "plugin", - "test", - "testing", - "unit" - ], - "support": { - "source": "https://github.com/pestphp/pest-plugin/tree/v2.1.1" - }, - "funding": [ - { - "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - }, - { - "url": "https://www.patreon.com/nunomaduro", - "type": "patreon" - } - ], - "time": "2023-08-22T08:40:06+00:00" - }, - { - "name": "pestphp/pest-plugin-arch", - "version": "v2.7.0", - "source": { - "type": "git", - "url": "https://github.com/pestphp/pest-plugin-arch.git", - "reference": "d23b2d7498475354522c3818c42ef355dca3fcda" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest-plugin-arch/zipball/d23b2d7498475354522c3818c42ef355dca3fcda", - "reference": "d23b2d7498475354522c3818c42ef355dca3fcda", - "shasum": "" - }, - "require": { - "nunomaduro/collision": "^7.10.0|^8.1.0", - "pestphp/pest-plugin": "^2.1.1", - "php": "^8.1", - "ta-tikoma/phpunit-architecture-test": "^0.8.4" - }, - "require-dev": { - "pestphp/pest": "^2.33.0", - "pestphp/pest-dev-tools": "^2.16.0" - }, - "type": "library", - "extra": { - "pest": { - "plugins": [ - "Pest\\Arch\\Plugin" - ] - } - }, - "autoload": { - "files": [ - "src/Autoload.php" - ], - "psr-4": { - "Pest\\Arch\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "The Arch plugin for Pest PHP.", - "keywords": [ - "arch", - "architecture", - "framework", - "pest", - "php", - "plugin", - "test", - "testing", - "unit" - ], - "support": { - "source": "https://github.com/pestphp/pest-plugin-arch/tree/v2.7.0" - }, - "funding": [ - { - "url": "https://www.paypal.com/paypalme/enunomaduro", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - } - ], - "time": "2024-01-26T09:46:42+00:00" - }, - { - "name": "pestphp/pest-plugin-laravel", - "version": "v2.4.0", - "source": { - "type": "git", - "url": "https://github.com/pestphp/pest-plugin-laravel.git", - "reference": "53df51169a7f9595e06839cce638c73e59ace5e8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest-plugin-laravel/zipball/53df51169a7f9595e06839cce638c73e59ace5e8", - "reference": "53df51169a7f9595e06839cce638c73e59ace5e8", - "shasum": "" - }, - "require": { - "laravel/framework": "^10.48.9|^11.5.0", - "pestphp/pest": "^2.34.7", - "php": "^8.1.0" - }, - "require-dev": { - "laravel/dusk": "^7.13.0", - "orchestra/testbench": "^8.22.3|^9.0.4", - "pestphp/pest-dev-tools": "^2.16.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Pest\\Laravel\\PestServiceProvider" - ] - }, - "pest": { - "plugins": [ - "Pest\\Laravel\\Plugin" - ] - } - }, - "autoload": { - "files": [ - "src/Autoload.php" - ], - "psr-4": { - "Pest\\Laravel\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "The Pest Laravel Plugin", - "keywords": [ - "framework", - "laravel", - "pest", - "php", - "test", - "testing", - "unit" - ], - "support": { - "source": "https://github.com/pestphp/pest-plugin-laravel/tree/v2.4.0" - }, - "funding": [ - { - "url": "https://www.paypal.com/paypalme/enunomaduro", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - } - ], - "time": "2024-04-27T10:41:54+00:00" - }, - { - "name": "pestphp/pest-plugin-livewire", - "version": "v2.1.0", - "source": { - "type": "git", - "url": "https://github.com/pestphp/pest-plugin-livewire.git", - "reference": "e72a2f850f727dfdb6bfa6e2ee6ff478ccc93f97" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest-plugin-livewire/zipball/e72a2f850f727dfdb6bfa6e2ee6ff478ccc93f97", - "reference": "e72a2f850f727dfdb6bfa6e2ee6ff478ccc93f97", - "shasum": "" - }, - "require": { - "livewire/livewire": "^2.12.3|^3.0", - "pestphp/pest": "^2.9.1", - "php": "^8.1" - }, - "require-dev": { - "orchestra/testbench": "^8.5.10", - "pestphp/pest-dev-tools": "^2.12.0" - }, - "type": "library", - "autoload": { - "files": [ - "src/Autoload.php" - ], - "psr-4": { - "Pest\\Livewire\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "The Pest Livewire Plugin", - "keywords": [ - "framework", - "livewire", - "pest", - "php", - "plugin", - "test", - "testing", - "unit" - ], - "support": { - "source": "https://github.com/pestphp/pest-plugin-livewire/tree/v2.1.0" - }, - "funding": [ - { - "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - }, - { - "url": "https://www.patreon.com/nunomaduro", - "type": "patreon" - } - ], - "time": "2023-07-20T16:28:21+00:00" - }, - { - "name": "phar-io/manifest", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "54750ef60c58e43759730615a392c31c80e23176" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", - "reference": "54750ef60c58e43759730615a392c31c80e23176", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "support": { - "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2024-03-03T12:33:53+00:00" - }, - { - "name": "phar-io/version", - "version": "3.2.1", - "source": { - "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Library for handling version information and constraints", - "support": { - "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.2.1" - }, - "time": "2022-02-21T01:04:05+00:00" - }, - { - "name": "phpdocumentor/reflection-common", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-2.x": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" - }, - "time": "2020-06-27T09:03:43+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "5.4.1", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c", - "reference": "9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c", - "shasum": "" - }, - "require": { - "doctrine/deprecations": "^1.1", - "ext-filter": "*", - "php": "^7.4 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.7", - "phpstan/phpdoc-parser": "^1.7", - "webmozart/assert": "^1.9.1" - }, - "require-dev": { - "mockery/mockery": "~1.3.5", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-mockery": "^1.1", - "phpstan/phpstan-webmozart-assert": "^1.2", - "phpunit/phpunit": "^9.5", - "vimeo/psalm": "^5.13" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - }, - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.4.1" - }, - "time": "2024-05-21T05:55:05+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "1.8.2", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "153ae662783729388a584b4361f2545e4d841e3c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/153ae662783729388a584b4361f2545e4d841e3c", - "reference": "153ae662783729388a584b4361f2545e4d841e3c", - "shasum": "" - }, - "require": { - "doctrine/deprecations": "^1.0", - "php": "^7.3 || ^8.0", - "phpdocumentor/reflection-common": "^2.0", - "phpstan/phpdoc-parser": "^1.13" - }, - "require-dev": { - "ext-tokenizer": "*", - "phpbench/phpbench": "^1.2", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-phpunit": "^1.1", - "phpunit/phpunit": "^9.5", - "rector/rector": "^0.13.9", - "vimeo/psalm": "^4.25" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "support": { - "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.8.2" - }, - "time": "2024-02-23T11:10:43+00:00" - }, - { - "name": "phpmyadmin/sql-parser", - "version": "5.10.0", - "source": { - "type": "git", - "url": "https://github.com/phpmyadmin/sql-parser.git", - "reference": "91d980ab76c3f152481e367f62b921adc38af451" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpmyadmin/sql-parser/zipball/91d980ab76c3f152481e367f62b921adc38af451", - "reference": "91d980ab76c3f152481e367f62b921adc38af451", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "symfony/polyfill-mbstring": "^1.3", - "symfony/polyfill-php80": "^1.16" - }, - "conflict": { - "phpmyadmin/motranslator": "<3.0" - }, - "require-dev": { - "phpbench/phpbench": "^1.1", - "phpmyadmin/coding-standard": "^3.0", - "phpmyadmin/motranslator": "^4.0 || ^5.0", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.9.12", - "phpstan/phpstan-phpunit": "^1.3.3", - "phpunit/phpunit": "^8.5 || ^9.6", - "psalm/plugin-phpunit": "^0.16.1", - "vimeo/psalm": "^4.11", - "zumba/json-serializer": "~3.0.2" - }, - "suggest": { - "ext-mbstring": "For best performance", - "phpmyadmin/motranslator": "Translate messages to your favorite locale" - }, - "bin": [ - "bin/highlight-query", - "bin/lint-query", - "bin/sql-parser", - "bin/tokenize-query" - ], - "type": "library", - "autoload": { - "psr-4": { - "PhpMyAdmin\\SqlParser\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "The phpMyAdmin Team", - "email": "developers@phpmyadmin.net", - "homepage": "https://www.phpmyadmin.net/team/" - } - ], - "description": "A validating SQL lexer and parser with a focus on MySQL dialect.", - "homepage": "https://github.com/phpmyadmin/sql-parser", - "keywords": [ - "analysis", - "lexer", - "parser", - "query linter", - "sql", - "sql lexer", - "sql linter", - "sql parser", - "sql syntax highlighter", - "sql tokenizer" - ], - "support": { - "issues": "https://github.com/phpmyadmin/sql-parser/issues", - "source": "https://github.com/phpmyadmin/sql-parser" - }, - "funding": [ - { - "url": "https://www.phpmyadmin.net/donate/", - "type": "other" - } - ], - "time": "2024-08-29T20:56:34+00:00" - }, - { - "name": "phpstan/phpdoc-parser", - "version": "1.30.1", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "51b95ec8670af41009e2b2b56873bad96682413e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/51b95ec8670af41009e2b2b56873bad96682413e", - "reference": "51b95ec8670af41009e2b2b56873bad96682413e", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "doctrine/annotations": "^2.0", - "nikic/php-parser": "^4.15", - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^1.5", - "phpstan/phpstan-phpunit": "^1.1", - "phpstan/phpstan-strict-rules": "^1.0", - "phpunit/phpunit": "^9.5", - "symfony/process": "^5.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "PHPStan\\PhpDocParser\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHPDoc parser with support for nullable, intersection and generic types", - "support": { - "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.30.1" - }, - "time": "2024-09-07T20:13:05+00:00" - }, - { - "name": "phpstan/phpstan", - "version": "1.12.3", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpstan.git", - "reference": "0fcbf194ab63d8159bb70d9aa3e1350051632009" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/0fcbf194ab63d8159bb70d9aa3e1350051632009", - "reference": "0fcbf194ab63d8159bb70d9aa3e1350051632009", - "shasum": "" - }, - "require": { - "php": "^7.2|^8.0" - }, - "conflict": { - "phpstan/phpstan-shim": "*" - }, - "bin": [ - "phpstan", - "phpstan.phar" - ], - "type": "library", - "autoload": { - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHPStan - PHP Static Analysis Tool", - "keywords": [ - "dev", - "static analysis" - ], - "support": { - "docs": "https://phpstan.org/user-guide/getting-started", - "forum": "https://github.com/phpstan/phpstan/discussions", - "issues": "https://github.com/phpstan/phpstan/issues", - "security": "https://github.com/phpstan/phpstan/security/policy", - "source": "https://github.com/phpstan/phpstan-src" - }, - "funding": [ - { - "url": "https://github.com/ondrejmirtes", - "type": "github" - }, - { - "url": "https://github.com/phpstan", - "type": "github" - } - ], - "time": "2024-09-09T08:10:35+00:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "10.1.16", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "7e308268858ed6baedc8704a304727d20bc07c77" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7e308268858ed6baedc8704a304727d20bc07c77", - "reference": "7e308268858ed6baedc8704a304727d20bc07c77", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^4.19.1 || ^5.1.0", - "php": ">=8.1", - "phpunit/php-file-iterator": "^4.1.0", - "phpunit/php-text-template": "^3.0.1", - "sebastian/code-unit-reverse-lookup": "^3.0.0", - "sebastian/complexity": "^3.2.0", - "sebastian/environment": "^6.1.0", - "sebastian/lines-of-code": "^2.0.2", - "sebastian/version": "^4.0.1", - "theseer/tokenizer": "^1.2.3" - }, - "require-dev": { - "phpunit/phpunit": "^10.1" - }, - "suggest": { - "ext-pcov": "PHP extension that provides line coverage", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "10.1.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.16" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-08-22T04:31:57+00:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "4.1.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c", - "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-08-31T06:24:48+00:00" - }, - { - "name": "phpunit/php-invoker", - "version": "4.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", - "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "ext-pcntl": "*", - "phpunit/phpunit": "^10.0" - }, - "suggest": { - "ext-pcntl": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Invoke callables with a timeout", - "homepage": "https://github.com/sebastianbergmann/php-invoker/", - "keywords": [ - "process" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:56:09+00:00" - }, - { - "name": "phpunit/php-text-template", - "version": "3.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748", - "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-08-31T14:07:24+00:00" - }, - { - "name": "phpunit/php-timer", - "version": "6.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", - "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "6.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:57:52+00:00" - }, - { - "name": "phpunit/phpunit", - "version": "10.5.17", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "c1f736a473d21957ead7e94fcc029f571895abf5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c1f736a473d21957ead7e94fcc029f571895abf5", - "reference": "c1f736a473d21957ead7e94fcc029f571895abf5", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.3", - "phar-io/version": "^3.0.2", - "php": ">=8.1", - "phpunit/php-code-coverage": "^10.1.5", - "phpunit/php-file-iterator": "^4.0", - "phpunit/php-invoker": "^4.0", - "phpunit/php-text-template": "^3.0", - "phpunit/php-timer": "^6.0", - "sebastian/cli-parser": "^2.0", - "sebastian/code-unit": "^2.0", - "sebastian/comparator": "^5.0", - "sebastian/diff": "^5.0", - "sebastian/environment": "^6.0", - "sebastian/exporter": "^5.1", - "sebastian/global-state": "^6.0.1", - "sebastian/object-enumerator": "^5.0", - "sebastian/recursion-context": "^5.0", - "sebastian/type": "^4.0", - "sebastian/version": "^4.0" - }, - "suggest": { - "ext-soap": "To be able to generate mocks based on WSDL files" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "10.5-dev" - } - }, - "autoload": { - "files": [ - "src/Framework/Assert/Functions.php" - ], - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.17" - }, - "funding": [ - { - "url": "https://phpunit.de/sponsors.html", - "type": "custom" - }, - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", - "type": "tidelift" - } - ], - "time": "2024-04-05T04:39:01+00:00" - }, - { - "name": "sebastian/cli-parser", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c34583b87e7b7a8055bf6c450c2c77ce32a24084", - "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for parsing CLI options", - "homepage": "https://github.com/sebastianbergmann/cli-parser", - "support": { - "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-02T07:12:49+00:00" - }, - { - "name": "sebastian/code-unit", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", - "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the PHP code units", - "homepage": "https://github.com/sebastianbergmann/code-unit", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:58:43+00:00" - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", - "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:59:15+00:00" - }, - { - "name": "sebastian/comparator", - "version": "5.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "2d3e04c3b4c1e84a5e7382221ad8883c8fbc4f53" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2d3e04c3b4c1e84a5e7382221ad8883c8fbc4f53", - "reference": "2d3e04c3b4c1e84a5e7382221ad8883c8fbc4f53", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-mbstring": "*", - "php": ">=8.1", - "sebastian/diff": "^5.0", - "sebastian/exporter": "^5.0" - }, - "require-dev": { - "phpunit/phpunit": "^10.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/comparator/issues", - "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-08-12T06:03:08+00:00" - }, - { - "name": "sebastian/complexity", - "version": "3.2.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "68ff824baeae169ec9f2137158ee529584553799" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799", - "reference": "68ff824baeae169ec9f2137158ee529584553799", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.2-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for calculating the complexity of PHP code units", - "homepage": "https://github.com/sebastianbergmann/complexity", - "support": { - "issues": "https://github.com/sebastianbergmann/complexity/issues", - "security": "https://github.com/sebastianbergmann/complexity/security/policy", - "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-12-21T08:37:17+00:00" - }, - { - "name": "sebastian/diff", - "version": "5.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e", - "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0", - "symfony/process": "^6.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "security": "https://github.com/sebastianbergmann/diff/security/policy", - "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-02T07:15:17+00:00" - }, - { - "name": "sebastian/environment", - "version": "6.1.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "8074dbcd93529b357029f5cc5058fd3e43666984" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/8074dbcd93529b357029f5cc5058fd3e43666984", - "reference": "8074dbcd93529b357029f5cc5058fd3e43666984", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "suggest": { - "ext-posix": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "6.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "https://github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/environment/issues", - "security": "https://github.com/sebastianbergmann/environment/security/policy", - "source": "https://github.com/sebastianbergmann/environment/tree/6.1.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-23T08:47:14+00:00" - }, - { - "name": "sebastian/exporter", - "version": "5.1.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "955288482d97c19a372d3f31006ab3f37da47adf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/955288482d97c19a372d3f31006ab3f37da47adf", - "reference": "955288482d97c19a372d3f31006ab3f37da47adf", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "php": ">=8.1", - "sebastian/recursion-context": "^5.0" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "https://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/exporter/issues", - "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-02T07:17:12+00:00" - }, - { - "name": "sebastian/global-state", - "version": "6.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", - "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "sebastian/object-reflector": "^3.0", - "sebastian/recursion-context": "^5.0" - }, - "require-dev": { - "ext-dom": "*", - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "6.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "https://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/global-state/issues", - "security": "https://github.com/sebastianbergmann/global-state/security/policy", - "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-02T07:19:19+00:00" - }, - { - "name": "sebastian/lines-of-code", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0", - "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for counting the lines of code in PHP source code", - "homepage": "https://github.com/sebastianbergmann/lines-of-code", - "support": { - "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-12-21T08:38:20+00:00" - }, - { - "name": "sebastian/object-enumerator", - "version": "5.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", - "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "sebastian/object-reflector": "^3.0", - "sebastian/recursion-context": "^5.0" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T07:08:32+00:00" - }, - { - "name": "sebastian/object-reflector", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", - "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T07:06:18+00:00" - }, - { - "name": "sebastian/recursion-context", - "version": "5.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "05909fb5bc7df4c52992396d0116aed689f93712" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712", - "reference": "05909fb5bc7df4c52992396d0116aed689f93712", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "https://github.com/sebastianbergmann/recursion-context", - "support": { - "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T07:05:40+00:00" - }, - { - "name": "sebastian/type", - "version": "4.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", - "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", - "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T07:10:45+00:00" - }, - { - "name": "sebastian/version", - "version": "4.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17", - "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/4.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-07T11:34:05+00:00" - }, - { - "name": "spatie/backtrace", - "version": "1.6.2", - "source": { - "type": "git", - "url": "https://github.com/spatie/backtrace.git", - "reference": "1a9a145b044677ae3424693f7b06479fc8c137a9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/backtrace/zipball/1a9a145b044677ae3424693f7b06479fc8c137a9", - "reference": "1a9a145b044677ae3424693f7b06479fc8c137a9", - "shasum": "" - }, - "require": { - "php": "^7.3|^8.0" - }, - "require-dev": { - "ext-json": "*", - "laravel/serializable-closure": "^1.3", - "phpunit/phpunit": "^9.3", - "spatie/phpunit-snapshot-assertions": "^4.2", - "symfony/var-dumper": "^5.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "Spatie\\Backtrace\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Freek Van de Herten", - "email": "freek@spatie.be", - "homepage": "https://spatie.be", - "role": "Developer" - } - ], - "description": "A better backtrace", - "homepage": "https://github.com/spatie/backtrace", - "keywords": [ - "Backtrace", - "spatie" - ], - "support": { - "source": "https://github.com/spatie/backtrace/tree/1.6.2" - }, - "funding": [ - { - "url": "https://github.com/sponsors/spatie", - "type": "github" - }, - { - "url": "https://spatie.be/open-source/support-us", - "type": "other" - } - ], - "time": "2024-07-22T08:21:24+00:00" - }, - { - "name": "spatie/error-solutions", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/spatie/error-solutions.git", - "reference": "ae7393122eda72eed7cc4f176d1e96ea444f2d67" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/error-solutions/zipball/ae7393122eda72eed7cc4f176d1e96ea444f2d67", - "reference": "ae7393122eda72eed7cc4f176d1e96ea444f2d67", - "shasum": "" - }, - "require": { - "php": "^8.0" - }, - "require-dev": { - "illuminate/broadcasting": "^10.0|^11.0", - "illuminate/cache": "^10.0|^11.0", - "illuminate/support": "^10.0|^11.0", - "livewire/livewire": "^2.11|^3.3.5", - "openai-php/client": "^0.10.1", - "orchestra/testbench": "^7.0|8.22.3|^9.0", - "pestphp/pest": "^2.20", - "phpstan/phpstan": "^1.11", - "psr/simple-cache": "^3.0", - "psr/simple-cache-implementation": "^3.0", - "spatie/ray": "^1.28", - "symfony/cache": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0", - "vlucas/phpdotenv": "^5.5" - }, - "suggest": { - "openai-php/client": "Require get solutions from OpenAI", - "simple-cache-implementation": "To cache solutions from OpenAI" - }, - "type": "library", - "autoload": { - "psr-4": { - "Spatie\\Ignition\\": "legacy/ignition", - "Spatie\\ErrorSolutions\\": "src", - "Spatie\\LaravelIgnition\\": "legacy/laravel-ignition" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ruben Van Assche", - "email": "ruben@spatie.be", - "role": "Developer" - } - ], - "description": "This is my package error-solutions", - "homepage": "https://github.com/spatie/error-solutions", - "keywords": [ - "error-solutions", - "spatie" - ], - "support": { - "issues": "https://github.com/spatie/error-solutions/issues", - "source": "https://github.com/spatie/error-solutions/tree/1.1.1" - }, - "funding": [ - { - "url": "https://github.com/Spatie", - "type": "github" - } - ], - "time": "2024-07-25T11:06:04+00:00" - }, - { - "name": "spatie/flare-client-php", - "version": "1.8.0", - "source": { - "type": "git", - "url": "https://github.com/spatie/flare-client-php.git", - "reference": "180f8ca4c0d0d6fc51477bd8c53ce37ab5a96122" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/180f8ca4c0d0d6fc51477bd8c53ce37ab5a96122", - "reference": "180f8ca4c0d0d6fc51477bd8c53ce37ab5a96122", - "shasum": "" - }, - "require": { - "illuminate/pipeline": "^8.0|^9.0|^10.0|^11.0", - "php": "^8.0", - "spatie/backtrace": "^1.6.1", - "symfony/http-foundation": "^5.2|^6.0|^7.0", - "symfony/mime": "^5.2|^6.0|^7.0", - "symfony/process": "^5.2|^6.0|^7.0", - "symfony/var-dumper": "^5.2|^6.0|^7.0" - }, - "require-dev": { - "dms/phpunit-arraysubset-asserts": "^0.5.0", - "pestphp/pest": "^1.20|^2.0", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-phpunit": "^1.0", - "spatie/pest-plugin-snapshots": "^1.0|^2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.3.x-dev" - } - }, - "autoload": { - "files": [ - "src/helpers.php" - ], - "psr-4": { - "Spatie\\FlareClient\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Send PHP errors to Flare", - "homepage": "https://github.com/spatie/flare-client-php", - "keywords": [ - "exception", - "flare", - "reporting", - "spatie" - ], - "support": { - "issues": "https://github.com/spatie/flare-client-php/issues", - "source": "https://github.com/spatie/flare-client-php/tree/1.8.0" - }, - "funding": [ - { - "url": "https://github.com/spatie", - "type": "github" - } - ], - "time": "2024-08-01T08:27:26+00:00" - }, - { - "name": "spatie/ignition", - "version": "1.15.0", - "source": { - "type": "git", - "url": "https://github.com/spatie/ignition.git", - "reference": "e3a68e137371e1eb9edc7f78ffa733f3b98991d2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/ignition/zipball/e3a68e137371e1eb9edc7f78ffa733f3b98991d2", - "reference": "e3a68e137371e1eb9edc7f78ffa733f3b98991d2", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-mbstring": "*", - "php": "^8.0", - "spatie/error-solutions": "^1.0", - "spatie/flare-client-php": "^1.7", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/var-dumper": "^5.4|^6.0|^7.0" - }, - "require-dev": { - "illuminate/cache": "^9.52|^10.0|^11.0", - "mockery/mockery": "^1.4", - "pestphp/pest": "^1.20|^2.0", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-phpunit": "^1.0", - "psr/simple-cache-implementation": "*", - "symfony/cache": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0", - "vlucas/phpdotenv": "^5.5" - }, - "suggest": { - "openai-php/client": "Require get solutions from OpenAI", - "simple-cache-implementation": "To cache solutions from OpenAI" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.5.x-dev" - } - }, - "autoload": { - "psr-4": { - "Spatie\\Ignition\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Spatie", - "email": "info@spatie.be", - "role": "Developer" - } - ], - "description": "A beautiful error page for PHP applications.", - "homepage": "https://flareapp.io/ignition", - "keywords": [ - "error", - "flare", - "laravel", - "page" - ], - "support": { - "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", - "forum": "https://twitter.com/flareappio", - "issues": "https://github.com/spatie/ignition/issues", - "source": "https://github.com/spatie/ignition" - }, - "funding": [ - { - "url": "https://github.com/spatie", - "type": "github" - } - ], - "time": "2024-06-12T14:55:22+00:00" - }, - { - "name": "spatie/laravel-ignition", - "version": "2.8.0", - "source": { - "type": "git", - "url": "https://github.com/spatie/laravel-ignition.git", - "reference": "3c067b75bfb50574db8f7e2c3978c65eed71126c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/3c067b75bfb50574db8f7e2c3978c65eed71126c", - "reference": "3c067b75bfb50574db8f7e2c3978c65eed71126c", - "shasum": "" - }, - "require": { - "ext-curl": "*", - "ext-json": "*", - "ext-mbstring": "*", - "illuminate/support": "^10.0|^11.0", - "php": "^8.1", - "spatie/ignition": "^1.15", - "symfony/console": "^6.2.3|^7.0", - "symfony/var-dumper": "^6.2.3|^7.0" - }, - "require-dev": { - "livewire/livewire": "^2.11|^3.3.5", - "mockery/mockery": "^1.5.1", - "openai-php/client": "^0.8.1", - "orchestra/testbench": "8.22.3|^9.0", - "pestphp/pest": "^2.34", - "phpstan/extension-installer": "^1.3.1", - "phpstan/phpstan-deprecation-rules": "^1.1.1", - "phpstan/phpstan-phpunit": "^1.3.16", - "vlucas/phpdotenv": "^5.5" - }, - "suggest": { - "openai-php/client": "Require get solutions from OpenAI", - "psr/simple-cache-implementation": "Needed to cache solutions from OpenAI" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Spatie\\LaravelIgnition\\IgnitionServiceProvider" - ], - "aliases": { - "Flare": "Spatie\\LaravelIgnition\\Facades\\Flare" - } - } - }, - "autoload": { - "files": [ - "src/helpers.php" - ], - "psr-4": { - "Spatie\\LaravelIgnition\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Spatie", - "email": "info@spatie.be", - "role": "Developer" - } - ], - "description": "A beautiful error page for Laravel applications.", - "homepage": "https://flareapp.io/ignition", - "keywords": [ - "error", - "flare", - "laravel", - "page" - ], - "support": { - "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", - "forum": "https://twitter.com/flareappio", - "issues": "https://github.com/spatie/laravel-ignition/issues", - "source": "https://github.com/spatie/laravel-ignition" - }, - "funding": [ - { - "url": "https://github.com/spatie", - "type": "github" - } - ], - "time": "2024-06-12T15:01:18+00:00" - }, - { - "name": "symfony/polyfill-php81", - "version": "v1.31.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", - "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "type": "library", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.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": "ta-tikoma/phpunit-architecture-test", - "version": "0.8.4", - "source": { - "type": "git", - "url": "https://github.com/ta-tikoma/phpunit-architecture-test.git", - "reference": "89f0dea1cb0f0d5744d3ec1764a286af5e006636" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ta-tikoma/phpunit-architecture-test/zipball/89f0dea1cb0f0d5744d3ec1764a286af5e006636", - "reference": "89f0dea1cb0f0d5744d3ec1764a286af5e006636", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.18.0 || ^5.0.0", - "php": "^8.1.0", - "phpdocumentor/reflection-docblock": "^5.3.0", - "phpunit/phpunit": "^10.5.5 || ^11.0.0", - "symfony/finder": "^6.4.0 || ^7.0.0" - }, - "require-dev": { - "laravel/pint": "^1.13.7", - "phpstan/phpstan": "^1.10.52" - }, - "type": "library", - "autoload": { - "psr-4": { - "PHPUnit\\Architecture\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ni Shi", - "email": "futik0ma011@gmail.com" - }, - { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" - } - ], - "description": "Methods for testing application architecture", - "keywords": [ - "architecture", - "phpunit", - "stucture", - "test", - "testing" - ], - "support": { - "issues": "https://github.com/ta-tikoma/phpunit-architecture-test/issues", - "source": "https://github.com/ta-tikoma/phpunit-architecture-test/tree/0.8.4" - }, - "time": "2024-01-05T14:10:56+00:00" - }, - { - "name": "theseer/tokenizer", - "version": "1.2.3", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - } - ], - "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "support": { - "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.3" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2024-03-03T12:36:25+00:00" - } - ], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": [], - "prefer-stable": true, - "prefer-lowest": false, - "platform": { - "php": "^8.2" - }, - "platform-dev": [], - "plugin-api-version": "2.6.0" -} From b8fbec25da80df5101bc06dbcca14dc41c9fc8d4 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Tue, 24 Dec 2024 15:04:36 +0200 Subject: [PATCH 045/259] version2 --- .github/workflows/php-build-and-deploy.yml | 4 ++-- app/Filament/Widgets/CalendarWidget.php | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 4722135..79ed1c5 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,14 +35,14 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version1_2 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version1_3 flavor: | latest=false tags: | type=raw,value=latest type=semver,pattern=v{{version}} type=semver,pattern=v{{major}}.{{minor}} - + - name: 🐳 Docker Build & Push uses: docker/build-push-action@v5 id: docker_build diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index b3a94c9..4e3aefc 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -147,10 +147,9 @@ public function getFormSchema(): array protected function headerActions(): array { $this->currentMonth ?? $this->currentMonth = Carbon::now()->year.'-'.Carbon::now()->month; - if ($this->lastFilterData != $this->filterData || $this->lastMonth !== $this->currentMonth) { + if ($this->lastFilterData != $this->filterData) { $this->refreshRecords(); $this->lastFilterData = $this->filterData; - $this->lastMonth = $this->currentMonth; } $today = now()->startOfDay(); $actions = []; From 174fd9bb722431704654439e219800e4ba4f6d3e Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 25 Dec 2024 11:47:00 +0200 Subject: [PATCH 046/259] version2 --- .github/workflows/php-build-and-deploy.yml | 2 +- .gitignore | 4 + composer.json | 1 + config/octane.php | 224 +++++++++++++++++++++ entrypoint.sh | 5 +- 5 files changed, 232 insertions(+), 4 deletions(-) create mode 100644 config/octane.php diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 79ed1c5..4b22295 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version1_3 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version1_4 flavor: | latest=false tags: | diff --git a/.gitignore b/.gitignore index 7fe978f..9605900 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,7 @@ yarn-error.log /.fleet /.idea /.vscode + +**/caddy +frankenphp +frankenphp-worker.php diff --git a/composer.json b/composer.json index aa76294..9c3a261 100644 --- a/composer.json +++ b/composer.json @@ -9,6 +9,7 @@ "filament/filament": "^3.2", "guzzlehttp/guzzle": "^7.2", "laravel/framework": "^11.1", + "laravel/octane": "^2.6", "laravel/tinker": "^2.9", "league/flysystem-aws-s3-v3": "^3.0", "maatwebsite/excel": "^3.1", diff --git a/config/octane.php b/config/octane.php new file mode 100644 index 0000000..8cfba01 --- /dev/null +++ b/config/octane.php @@ -0,0 +1,224 @@ + env('OCTANE_SERVER', 'roadrunner'), + + /* + |-------------------------------------------------------------------------- + | Force HTTPS + |-------------------------------------------------------------------------- + | + | When this configuration value is set to "true", Octane will inform the + | framework that all absolute links must be generated using the HTTPS + | protocol. Otherwise your links may be generated using plain HTTP. + | + */ + + 'https' => env('OCTANE_HTTPS', false), + + /* + |-------------------------------------------------------------------------- + | Octane Listeners + |-------------------------------------------------------------------------- + | + | All of the event listeners for Octane's events are defined below. These + | listeners are responsible for resetting your application's state for + | the next request. You may even add your own listeners to the list. + | + */ + + 'listeners' => [ + WorkerStarting::class => [ + EnsureUploadedFilesAreValid::class, + EnsureUploadedFilesCanBeMoved::class, + ], + + RequestReceived::class => [ + ...Octane::prepareApplicationForNextOperation(), + ...Octane::prepareApplicationForNextRequest(), + // + ], + + RequestHandled::class => [ + // + ], + + RequestTerminated::class => [ + // FlushUploadedFiles::class, + ], + + TaskReceived::class => [ + ...Octane::prepareApplicationForNextOperation(), + // + ], + + TaskTerminated::class => [ + // + ], + + TickReceived::class => [ + ...Octane::prepareApplicationForNextOperation(), + // + ], + + TickTerminated::class => [ + // + ], + + OperationTerminated::class => [ + FlushOnce::class, + FlushTemporaryContainerInstances::class, + // DisconnectFromDatabases::class, + // CollectGarbage::class, + ], + + WorkerErrorOccurred::class => [ + ReportException::class, + StopWorkerIfNecessary::class, + ], + + WorkerStopping::class => [ + CloseMonologHandlers::class, + ], + ], + + /* + |-------------------------------------------------------------------------- + | Warm / Flush Bindings + |-------------------------------------------------------------------------- + | + | The bindings listed below will either be pre-warmed when a worker boots + | or they will be flushed before every new request. Flushing a binding + | will force the container to resolve that binding again when asked. + | + */ + + 'warm' => [ + ...Octane::defaultServicesToWarm(), + ], + + 'flush' => [ + // + ], + + /* + |-------------------------------------------------------------------------- + | Octane Swoole Tables + |-------------------------------------------------------------------------- + | + | While using Swoole, you may define additional tables as required by the + | application. These tables can be used to store data that needs to be + | quickly accessed by other workers on the particular Swoole server. + | + */ + + 'tables' => [ + 'example:1000' => [ + 'name' => 'string:1000', + 'votes' => 'int', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Octane Swoole Cache Table + |-------------------------------------------------------------------------- + | + | While using Swoole, you may leverage the Octane cache, which is powered + | by a Swoole table. You may set the maximum number of rows as well as + | the number of bytes per row using the configuration options below. + | + */ + + 'cache' => [ + 'rows' => 1000, + 'bytes' => 10000, + ], + + /* + |-------------------------------------------------------------------------- + | File Watching + |-------------------------------------------------------------------------- + | + | The following list of files and directories will be watched when using + | the --watch option offered by Octane. If any of the directories and + | files are changed, Octane will automatically reload your workers. + | + */ + + 'watch' => [ + 'app', + 'bootstrap', + 'config/**/*.php', + 'database/**/*.php', + 'public/**/*.php', + 'resources/**/*.php', + 'routes', + 'composer.lock', + '.env', + ], + + /* + |-------------------------------------------------------------------------- + | Garbage Collection Threshold + |-------------------------------------------------------------------------- + | + | When executing long-lived PHP scripts such as Octane, memory can build + | up before being cleared by PHP. You can force Octane to run garbage + | collection if your application consumes this amount of megabytes. + | + */ + + 'garbage' => 50, + + /* + |-------------------------------------------------------------------------- + | Maximum Execution Time + |-------------------------------------------------------------------------- + | + | The following setting configures the maximum execution time for requests + | being handled by Octane. You may set this value to 0 to indicate that + | there isn't a specific time limit on Octane request execution time. + | + */ + + 'max_execution_time' => 30, + +]; diff --git a/entrypoint.sh b/entrypoint.sh index 1059cda..5e1e3e4 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -70,10 +70,9 @@ _run() { case "${CONTAINER_MODE}" in app) echo "🚀 Running octane..." - # composer require laravel/octane - # ${ARTISAN} octane:frankenphp --host=0.0.0.0 --port="${CONTAINER_PORT}" ${ARTISAN} schedule:work & - ${ARTISAN} serve --host=0.0.0.0 --port="${CONTAINER_PORT}" + ${ARTISAN} octane:frankenphp --host=0.0.0.0 --port="${CONTAINER_PORT}" + # ${ARTISAN} serve --host=0.0.0.0 --port="${CONTAINER_PORT}" ;; worker) echo "⏳ Running the queue..." From 6788ad7d56bd4d1f725e534cf46acaa16e9aee53 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 25 Dec 2024 13:32:36 +0200 Subject: [PATCH 047/259] version2 --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 15 ++++++++-- app/Resources/DepartmentResource.php | 2 +- app/Resources/SoldierResource.php | 32 ++++++++++++++++++-- app/Resources/TeamResource.php | 3 +- app/Services/DailyShiftNotification.php | 34 ++++++++++++++++++++++ bootstrap/app.php | 2 ++ lang/en.json | 3 +- lang/he.json | 10 +++++-- tests/Feature/HierarchyTest.php | 9 ++++-- tests/Feature/ReplicateSoldierTest.php | 2 ++ tests/Feature/ReservistsTest.php | 13 +++++++-- 12 files changed, 110 insertions(+), 17 deletions(-) create mode 100644 app/Services/DailyShiftNotification.php diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 4b22295..790c54a 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version1_4 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version1_5 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 4e3aefc..e277f8b 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -147,7 +147,7 @@ public function getFormSchema(): array protected function headerActions(): array { $this->currentMonth ?? $this->currentMonth = Carbon::now()->year.'-'.Carbon::now()->month; - if ($this->lastFilterData != $this->filterData) { + if ($this->lastFilterData != $this->filterData ) { $this->refreshRecords(); $this->lastFilterData = $this->filterData; } @@ -187,7 +187,8 @@ protected function headerActions(): array ->action(function () { return Excel::download(new ShiftsExport($this->getEventsByRole(), $this->currentMonth), __('File name', [ 'name' => auth()->user()->displayName, - 'month' => $this->currentMonth]).'.xlsx'); + 'month' => $this->currentMonth, + ]).'.xlsx'); }), Action::make('Create shifts') ->action(fn () => $this->runEvents()) @@ -407,4 +408,14 @@ protected function viewAction(): Action }) ->modalHeading(__('View').$this->model::getTitle()); } + + public function eventDidMount(): string + { + return <<<'JS' + function({ event, timeText, isStart, isEnd, isMirror, isPast, isFuture, isToday, el, view }){ + el.setAttribute("x-tooltip", "tooltip"); + el.setAttribute("x-data", "{ tooltip: '"+event.title+"' }"); + } + JS; + } } diff --git a/app/Resources/DepartmentResource.php b/app/Resources/DepartmentResource.php index 6f72804..26e1f92 100644 --- a/app/Resources/DepartmentResource.php +++ b/app/Resources/DepartmentResource.php @@ -120,7 +120,7 @@ public static function checkCommander($teams, $departments, $data) $type = $teams->isNotEmpty() ? 'soldiers' : 'teams'; $body = $isCommanderNull - ? __('You did not choose a commander. With your approval, you leave the team without a commander. Are you sure?', ['type' => $type]) + ? __('You did not choose a commander. With your approval, you leave the department without a commander. Are you sure?', ['type' => $type]) : __('The commander you selected is already registered as a commander. His selection will leave his :type without a commander. Are you sure?', ['type' => $type]); $actions = array_filter([ ! $isCommanderNull ? NotificationsService\Action::make($teams->isNotEmpty() ? __('View team') : __('View department')) diff --git a/app/Resources/SoldierResource.php b/app/Resources/SoldierResource.php index 44b3518..58111df 100644 --- a/app/Resources/SoldierResource.php +++ b/app/Resources/SoldierResource.php @@ -79,6 +79,29 @@ public static function table(Table $table): Table ->badge() ->color(fn ($state) => $state ? 'info' : 'primary') ->sortable(), + TextColumn::make('role') + ->label(__('Role')) + ->visible(collect(auth()->user()->getRoleNames())->intersect(['manager', 'department-commander'])->isNotEmpty()) + ->default( + function ($record) { + $roles = Soldier::find($record->id)->user->getRoleNames()->first(); + + return match ($roles) { + 'manager' => __('Manager'), + 'department-commander' => __('Department commander'), + 'team-commander' => __('Team commander'), + 'soldier' => __('Soldier'), + default => null, + }; + } + ), + TextColumn::make('teamSoldier') + ->label(__('Team')) + ->default(function ($record) { + $soldier = Soldier::find($record->id); + + return $soldier->team ? $soldier->team->name : null; + }), TextColumn::make('reserve_dates')->label(__('Reserve dates'))->date()->listWithLineBreaks()->limitList(1)->expandableLimitedList()->placeholder('---')->toggleable(isToggledHiddenByDefault: true), TextColumn::make('next_reserve_dates')->label(__('Next reserve dates'))->date()->listWithLineBreaks()->limitList(1)->expandableLimitedList()->placeholder('---')->toggleable(isToggledHiddenByDefault: true), TextColumn::make('enlist_date')->label(__('Enlist date'))->sortable()->date()->toggleable(), @@ -235,8 +258,10 @@ public static function getEloquentQuery(): Builder return parent::getEloquentQuery()->where('id', '!=', User::where('userable_id', auth()->user()->id)->value('userable_id')); } - return parent::getEloquentQuery()->where('team_id', Team::select('id')->where('commander_id', auth()->user()->userable_id)) - ->orWhere('team_id', Team::select('id')->where('department_id', Department::select('id')->where('commander_id', auth()->user()->userable_id))); + return parent::getEloquentQuery() + ->whereIn('team_id', Team::select('id')->where('department_id', Department::select('id')->where('commander_id', auth()->user()->userable_id))) + ->orWhere('team_id', Team::select('id')->where('commander_id', auth()->user()->userable_id)); + } public static function getPages(): array @@ -287,7 +312,8 @@ public static function soldierDetails(): array TextInput::make('course') ->label(__('Course')) ->numeric() - ->minValue(0), + ->minValue(0) + ->required(), TextInput::make('capacity') ->numeric() ->step(0.25) diff --git a/app/Resources/TeamResource.php b/app/Resources/TeamResource.php index 0c2624c..dc82ece 100644 --- a/app/Resources/TeamResource.php +++ b/app/Resources/TeamResource.php @@ -169,8 +169,7 @@ public static function checkCommander($teams, $departments, $data) Notification::make() ->title(__('Save team')) ->persistent() - ->body(__('The commander you selected is already registered as a commander. His selection will leave his soldiers without a commander. Are you sure?')) - ->actions([ + ->body(__('The commander you selected is already registered as a commander. His selection will leave his :type without a commander. Are you sure?'))->actions([ NotificationsService\Action::make(__('View ').($teams->isNotEmpty() ? __('Team') : __('Department'))) ->button() ->url( diff --git a/app/Services/DailyShiftNotification.php b/app/Services/DailyShiftNotification.php new file mode 100644 index 0000000..f24b040 --- /dev/null +++ b/app/Services/DailyShiftNotification.php @@ -0,0 +1,34 @@ +whereDate('start_date', Carbon::today()) + ->get(); + $shifts->map(function ($shift) { + $user = User::where('userable_id', $shift->soldier_id)->get(); + Notification::make() + ->title(__('Your shifts for today').':') + ->warning() + ->body( + __('Assigned to shift today', [ + 'today' => Carbon::parse($shift->start_date)->format('d/m/y'), + 'user' => Soldier::find($shift->soldier_id)->user->displayName, + 'task' => $shift->task->name, + 'startShift' => Carbon::parse($shift->start_date)->format('H:i'), + ]) + ) + ->sendToDatabase($user, true); + }); + } +} diff --git a/bootstrap/app.php b/bootstrap/app.php index aa1c4bd..1692fdd 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -1,6 +1,7 @@ call(fn () => app(RecurringEvents::class)->recurringTask())->monthlyOn(20, '08:00'); $schedule->call(fn () => app(Algorithm::class)->run())->monthlyOn(20, '10:00'); $schedule->call(fn () => app(ShiftAssignmentNotification::class)->sendNotification())->monthlyOn(1, '08:00'); + $schedule->call(fn () => app(DailyShiftNotification::class)->beforeShift())->dailyAt('06:00'); }) ->withMiddleware(function (Middleware $middleware) {}) ->withExceptions(function (Exceptions $exceptions) {})->create(); diff --git a/lang/en.json b/lang/en.json index 0824bb6..d2a8448 100644 --- a/lang/en.json +++ b/lang/en.json @@ -1,4 +1,5 @@ { "File name":":month month's shifts for :name", - "Holiday shift notification":"hello :user!
the shift weight must be updated :task which takes place on: :start_date " + "Holiday shift notification":"hello :user!
the shift weight must be updated :task which takes place on: :start_date ", + "Assigned to shift today":":today
Hello :user!!
Your :task shift will start at :startShift" } diff --git a/lang/he.json b/lang/he.json index a2a47f4..da85d3f 100644 --- a/lang/he.json +++ b/lang/he.json @@ -8,6 +8,7 @@ "All": "כולם", "And": "ו", "Assign soldier": "הקצה חייל", + "Assigned to shift today":":today
שלום :user!!
המשמרת :task שלך, תחל בשעה :startShift", "Between":"בין", "Between from":"מ", "Between to":"עד", @@ -36,6 +37,7 @@ "Delete":"מחק", "Department": "מדור", "Departments": "מדורים", + "Department commander": "מפקד מדור", "Department name": "שם מדור", "Details":"פרטים", "Download to excel":"הורדה לאקסל", @@ -76,6 +78,7 @@ "Low priority not task":"עדיפות נמוכה למשימה", "Low priority not weekend":"עדיפות נמוכה לסופ''ש", "Male": "זכר", + "Manager": "מנהל", "Max nights": "מקסימום לילות", "Max shifts": "מקסימום משמרות", "Max weekends": "מקסימום סופ'ש", @@ -107,7 +110,7 @@ "Not Thursday evening":"חמישי ערב", "Not weekend":"סופ''ש", "One time": "חד פעמי", - "Pay attention to update the shift details according to the changes you made .": " שים לב לעדכן את פרטי המשמרת בהתאם לשינויים שביצעת.", + "Pay attention to update the shift details according to the changes you made .": " שים לב לעדכן את פרטי המשמרת בהתאם לשינויים שביצעת .", "Parallel weight": "משקל", "Personal Information": "נתונים אישיים", "Personal number": "מספר אישי", @@ -120,6 +123,7 @@ "Reservist": "מילואימניק", "Reset assignment":"אפס שיבוץ", "Reset filters":"אפס סננים", + "Role":"תפקיד", "Run Algorithm":"הרץ אלגוריתם", "Save": "שמור", "Save department": "שמור מדור", @@ -151,6 +155,7 @@ "Task type": "סוג משימה", "Team": "צוות", "Teams": "צוותים", + "Team commander": "מפקד צוות", "The commander you selected is already registered as a commander. His selection will leave his :type without a commander. Are you sure?": "המפקד שבחרת כבר רשום כמפקד. בחירתו תשאיר את חייליו ללא מפקד. אתה בטוח?", "This name already exists in the system!":"השם הזה כבר קיים במערכת!", "Thursday":"חמישי", @@ -172,5 +177,6 @@ "Wednesday":"רביעי", "Weekly": "שבועי", "Yes":"כן", - "You did not choose a commander. With your approval, you leave the team without a commander. Are you sure?":"לא בחרת מפקד. באישורך אתה משאיר את הצוות ללא מפקד. האם אתה בטוח?" + "You did not choose a commander. With your approval, you leave the team without a commander. Are you sure?":"לא בחרת מפקד. באישורך אתה משאיר את הצוות ללא מפקד. האם אתה בטוח?", + "Your shifts for today":"המשמרות שלך להיום" } diff --git a/tests/Feature/HierarchyTest.php b/tests/Feature/HierarchyTest.php index 52a4a17..799c37f 100644 --- a/tests/Feature/HierarchyTest.php +++ b/tests/Feature/HierarchyTest.php @@ -10,15 +10,18 @@ it('allows department commander to view his soldiers', function () { $department_commander_user = User::factory()->create([ - 'userable_id' => Soldier::factory()->create()->id, + 'userable_id' => $departmentCommanderSoldier = Soldier::factory()->create()->id, ]); $soldiers = Soldier::factory()->count(10)->create([ 'team_id' => Team::factory()->create([ 'department_id' => Department::factory()->create([ - 'commander_id' => $department_commander_user->userable_id, + 'commander_id' => $departmentCommanderSoldier, ])->id, ])->id, - ]); + ])->each(function ($soldier) { + User::factory()->create(['userable_id' => $soldier->id]); + }); + $newSoldiers = Soldier::factory()->count(10)->create([]); $this ->seed(PermissionSeeder::class) diff --git a/tests/Feature/ReplicateSoldierTest.php b/tests/Feature/ReplicateSoldierTest.php index 9f7d909..80b13dd 100644 --- a/tests/Feature/ReplicateSoldierTest.php +++ b/tests/Feature/ReplicateSoldierTest.php @@ -1,11 +1,13 @@ create(); + User::factory()->create(['userable_id' => $soldier->id]); $this ->seed(PermissionSeeder::class) ->asUser('manager') diff --git a/tests/Feature/ReservistsTest.php b/tests/Feature/ReservistsTest.php index beb1959..6a0df34 100644 --- a/tests/Feature/ReservistsTest.php +++ b/tests/Feature/ReservistsTest.php @@ -1,6 +1,8 @@ + create(['is_reservist' => false]); + User::factory()->create(['userable_id' => $soldier->id]); livewire(ListSoldiers::class) ->assertTableActionHidden('update reserve days', $soldier); }); @@ -26,8 +29,12 @@ }); it('can filter soldiers by `is_reservist`', function () { - $soldier = Soldier::factory()->count(5)->create(['is_reservist' => false]); - $reservist = Soldier::factory()->count(5)->create(['is_reservist' => true]); + $soldier = Soldier::factory()->count(5)->create(['is_reservist' => false])->each(function ($s) { + User::factory()->create(['userable_id' => $s->id])->assignRole('soldier'); + }); + $reservist = Soldier::factory()->count(5)->create(['is_reservist' => true])->each(function ($r) { + User::factory()->create(['userable_id' => $r->id])->assignRole('soldier'); + }); livewire(ListSoldiers::class) ->assertCanSeeTableRecords($soldier) @@ -38,6 +45,8 @@ it('if you edit from a reserve soldier to a simple soldier, the reserve days are updated to null', function () { $soldier = Soldier::factory()->create(['is_reservist' => true, 'reserve_dates' => ['2023-04-01', '2023-04-05', '2023-04-19']]); + User::factory()->create(['userable_id' => $soldier->id]); + $soldier->user->assignRole('soldier'); livewire(ListSoldiers::class) ->callTableAction('edit', $soldier, ['is_reservist' => false]); $this->assertDatabaseHas('soldiers', [ From 9c53857540d2fda2e87765c0f2bba83026a11f79 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 25 Dec 2024 14:39:12 +0200 Subject: [PATCH 048/259] version2 --- .github/workflows/php-build-and-deploy.yml | 2 +- .../filament-fullcalendar/filament-fullcalendar-styles.css | 2 +- .../filament-fullcalendar/override-filament-fullcalendar.css | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 790c54a..a4d2bdc 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version1_5 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version1_6 flavor: | latest=false tags: | diff --git a/public/css/saade/filament-fullcalendar/filament-fullcalendar-styles.css b/public/css/saade/filament-fullcalendar/filament-fullcalendar-styles.css index a4cad56..fb85098 100644 --- a/public/css/saade/filament-fullcalendar/filament-fullcalendar-styles.css +++ b/public/css/saade/filament-fullcalendar/filament-fullcalendar-styles.css @@ -1 +1 @@ -.resize{resize:both}.filament-fullcalendar{--fc-small-font-size:0.85em;--fc-page-bg-color:#d0d0d04d;--fc-neutral-bg-color:rgba(var(--gray-50),var(--tw-bg-opacity));--fc-neutral-text-color:grey;--fc-border-color:rgba(var(--gray-200));--fc-button-text-color:#fff;--fc-button-bg-color:rgba(var(--primary-600));--fc-button-border-color:rgba(var(--primary-600));--fc-button-hover-bg-color:rgba(var(--primary-500));--fc-button-hover-border-color:rgba(var(--primary-500));--fc-button-active-bg-color:rgba(var(--primary-500));--fc-button-active-border-color:rgba(var(--primary-500));--fc-event-bg-color:rgba(var(--primary-600));--fc-event-border-color:rgba(var(--primary-600));--fc-event-text-color:#fff;--fc-event-selected-overlay-color:#00000040;--fc-more-link-bg-color:#d0d0d0;--fc-more-link-text-color:inherit;--fc-event-resizer-thickness:8px;--fc-event-resizer-dot-total-width:8px;--fc-event-resizer-dot-border-width:1px;--fc-non-business-color:#d7d7d74d;--fc-bg-event-color:#8fdf82;--fc-bg-event-opacity:0.3;--fc-highlight-color:rgba(var(--primary-500),0.1);--fc-today-bg-color:rgba(var(--primary-500),0.2);--fc-now-indicator-color:red;--fc-list-event-hover-bg-color:rgba(var(--gray-50),var(--tw-bg-opacity))}html.dark .filament-fullcalendar{--fc-neutral-bg-color:rgba(var(--gray-800),.8);--fc-border-color:rgba(var(--gray-700),.5);--fc-button-bg-color:rgba(var(--primary-500));--fc-button-border-color:rgba(var(--primary-600));--fc-button-hover-bg-color:rgba(var(--primary-400));--fc-button-hover-border-color:rgba(var(--primary-500));--fc-button-active-bg-color:rgba(var(--primary-400));--fc-button-active-border-color:rgba(var(--primary-500));--fc-event-bg-color:rgba(var(--primary-500));--fc-event-border-color:rgba(var(--primary-600));--fc-list-event-hover-bg-color:rgba(var(--gray-800),.8)}.filament-fullcalendar .fc-toolbar-chunk>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.filament-fullcalendar .fc-toolbar-title{font-size:1.125rem!important;line-height:1.25rem}@media (min-width:768px){.filament-fullcalendar .fc-toolbar-title{font-size:1.875rem!important;line-height:2.25rem!important}}.filament-fullcalendar.fc .fc-button{min-height:2.25rem;border-radius:.5rem;padding:.25rem 6px;font-size:.875rem;line-height:1.25rem;font-weight:500;--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);outline:2px solid #0000;outline-offset:2px;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}@media (min-width:768px){.filament-fullcalendar.fc .fc-button{padding-left:1rem;padding-right:1rem}}.filament-fullcalendar.fc .fc-button-primary:disabled{opacity:.7}.filament-fullcalendar.fc .fc-button-primary:not(:disabled).fc-button-active,.filament-fullcalendar.fc .fc-button-primary:not(:disabled):active{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.filament-fullcalendar .fc-list,.filament-fullcalendar .fc-view table,.filament-fullcalendar .fc-view:not(.fc-list) table th{border-top-left-radius:.75rem;border-top-right-radius:.75rem}.filament-fullcalendar .fc-list{overflow:hidden}.filament-fullcalendar .fc-list .fc-list-event-title a{cursor:pointer}.filament-fullcalendar .fc-list-sticky .fc-list-day th{background-color:inherit} +.resize{resize:both}.filament-fullcalendar{--fc-small-font-size:0.85em;--fc-page-bg-color:#d0d0d04d;--fc-neutral-bg-color:rgba(var(--gray-50),var(--tw-bg-opacity));--fc-neutral-text-color:grey;--fc-border-color:rgba(var(--gray-200));--fc-button-text-color:#fff;--fc-button-bg-color:rgba(var(--primary-600));--fc-button-border-color:rgba(var(--primary-600));--fc-button-hover-bg-color:rgba(var(--primary-500));--fc-button-hover-border-color:rgba(var(--primary-500));--fc-button-active-bg-color:rgba(var(--primary-500));--fc-button-active-border-color:rgba(var(--primary-500));--fc-event-bg-color:rgba(var(--primary-600));--fc-event-border-color:rgba(var(--primary-600));--fc-event-text-color:#fff;--fc-event-selected-overlay-color:#00000040;--fc-more-link-bg-color:#d0d0d0;--fc-more-link-text-color:inherit;--fc-event-resizer-thickness:8px;--fc-event-resizer-dot-total-width:8px;--fc-event-resizer-dot-border-width:1px;--fc-non-business-color:#d7d7d74d;--fc-bg-event-color:#8fdf82;--fc-bg-event-opacity:0.3;--fc-highlight-color:rgba(var(--primary-500),0.1);--fc-today-bg-color:rgba(var(--primary-500),0.2);--fc-now-indicator-color:red;--fc-list-event-hover-bg-color:rgba(var(--gray-50),var(--tw-bg-opacity))}html.dark .filament-fullcalendar{--fc-neutral-bg-color:rgba(var(--gray-800),.8);--fc-border-color:rgba(var(--gray-700),.5);--fc-button-bg-color:rgba(var(--primary-500));--fc-button-border-color:rgba(var(--primary-600));--fc-button-hover-bg-color:rgba(var(--primary-400));--fc-button-hover-border-color:rgba(var(--primary-500));--fc-button-active-bg-color:rgba(var(--primary-400));--fc-button-active-border-color:rgba(var(--primary-500));--fc-event-bg-color:rgba(var(--primary-500));--fc-event-border-color:rgba(var(--primary-600));--fc-list-event-hover-bg-color:rgba(var(--gray-800),.8)}.filament-fullcalendar .fc-toolbar-chunk>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.filament-fullcalendar .fc-toolbar-title{font-size:1.125rem!important;line-height:1.25rem}@media (min-width:768px){.filament-fullcalendar .fc-toolbar-title{font-size:1.875rem!important;line-height:2.25rem!important}}.filament-fullcalendar.fc .fc-button{min-height:2.25rem;border-radius:.5rem;padding:.25rem 6px;font-size:.875rem;line-height:1.25rem;font-weight:500;--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);outline:2px solid #0000;outline-offset:2px;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}@media (min-width:768px){.filament-fullcalendar.fc .fc-button{padding-left:1rem;padding-right:1rem}}.filament-fullcalendar.fc .fc-button-primary:disabled{opacity:.7}.filament-fullcalendar.fc .fc-button-primary:not(:disabled).fc-button-active,.filament-fullcalendar.fc .fc-button-primary:not(:disabled):active{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.filament-fullcalendar .fc-list,.filament-fullcalendar .fc-view table,.filament-fullcalendar .fc-view:not(.fc-list) table th{border-top-left-radius:.75rem;border-top-right-radius:.75rem}.filament-fullcalendar .fc-list{overflow:hidden}.filament-fullcalendar .fc-list .fc-list-event-title a{cursor:pointer}.filament-fullcalendar .fc-list-sticky .fc-list-day th{background-color:inherit} \ No newline at end of file diff --git a/public/css/saade/filament-fullcalendar/override-filament-fullcalendar.css b/public/css/saade/filament-fullcalendar/override-filament-fullcalendar.css index bc7899d..ca8da66 100644 --- a/public/css/saade/filament-fullcalendar/override-filament-fullcalendar.css +++ b/public/css/saade/filament-fullcalendar/override-filament-fullcalendar.css @@ -30,4 +30,4 @@ } .fc-day-sat{ background-color: #f5f2f2; -} +} \ No newline at end of file From cd26f40b9e3ab0e64ffe1ac2f252706d25017cca Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 26 Dec 2024 09:39:49 +0200 Subject: [PATCH 049/259] version2 --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Casts/Integer.php | 4 +- app/Filament/Widgets/CalendarWidget.php | 110 ++-- app/Livewire/MyDatabaseNotifications.php | 490 +++++++++++++++++ app/Models/Shift.php | 500 ++++++++++++++++-- app/Providers/AppServiceProvider.php | 5 + app/Resources/DepartmentResource.php | 4 +- .../Pages/CreateDepartment.php | 2 +- app/Resources/ProfileResource.php | 2 +- app/Resources/SoldierResource.php | 15 +- .../SoldierResource/Pages/EditSoldier.php | 2 + app/Resources/TaskResource.php | 2 +- app/Resources/TeamResource.php | 6 +- app/Services/Algorithm.php | 100 +--- app/Services/ChangeAssignment.php | 112 ++++ app/Services/Helpers.php | 118 +++++ app/Services/ManualAssignment.php | 131 +---- app/Services/Range.php | 5 + app/Services/Schedule.php | 2 +- app/Services/Soldier.php | 5 - app/Services/Test.php | 6 +- database/seeders/DatabaseSeeder.php | 6 +- lang/en.json | 18 + lang/he.json | 43 +- .../filament-fullcalendar-styles.css | 2 +- .../override-filament-fullcalendar.css | 2 +- tests/Unit/ChangeAssignmentServiceTest.php | 200 +++++++ tests/Unit/HelpersServiceTest.php | 98 ++++ tests/Unit/RangeServiceTest.php | 20 + 29 files changed, 1683 insertions(+), 329 deletions(-) create mode 100644 app/Livewire/MyDatabaseNotifications.php create mode 100644 app/Services/ChangeAssignment.php create mode 100644 app/Services/Helpers.php create mode 100644 tests/Unit/ChangeAssignmentServiceTest.php create mode 100644 tests/Unit/HelpersServiceTest.php diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index a4d2bdc..a97d3ce 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version1_6 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version1_7 flavor: | latest=false tags: | diff --git a/app/Casts/Integer.php b/app/Casts/Integer.php index a35374b..9e6ccfb 100644 --- a/app/Casts/Integer.php +++ b/app/Casts/Integer.php @@ -14,7 +14,7 @@ class Integer implements CastsAttributes */ public function get(Model $model, string $key, mixed $value, array $attributes): mixed { - return (float) $value / 100; + return $value !== null ? (float) $value / 100 : null; } /** @@ -24,6 +24,6 @@ public function get(Model $model, string $key, mixed $value, array $attributes): */ public function set(Model $model, string $key, mixed $value, array $attributes): mixed { - return (int) ($value * 100); + return $value !== null ? (int) ($value * 100) : null; } } diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index e277f8b..45c240b 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -9,6 +9,7 @@ use App\Models\Task; use App\Services\Algorithm; use App\Services\Holidays; +use App\Services\Range; use App\Services\RecurringEvents; use Carbon\Carbon; use Filament\Actions\Action; @@ -109,7 +110,7 @@ private function getHolidays($month, $day, $year): array public function getEventsByRole() { $current_user_id = auth()->user()->userable_id; - $role = current(array: array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])); + $role = current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])); return ($this->type === 'my_soldiers') ? match ($role) { 'manager' => $this->model::where('soldier_id', '!=', $current_user_id) @@ -147,9 +148,10 @@ public function getFormSchema(): array protected function headerActions(): array { $this->currentMonth ?? $this->currentMonth = Carbon::now()->year.'-'.Carbon::now()->month; - if ($this->lastFilterData != $this->filterData ) { + if ($this->lastFilterData != $this->filterData || $this->lastMonth !== $this->currentMonth) { $this->refreshRecords(); $this->lastFilterData = $this->filterData; + $this->lastMonth = $this->currentMonth; } $today = now()->startOfDay(); $actions = []; @@ -296,7 +298,32 @@ public function getConfig(): array protected function modalActions(): array { - $basicActions = [ + $basicActions = $this->getBasicActions(); + $changeAction = $this->getChangeActions(); + + if ( + ($this->model == Constraint::class && $this->type == 'my') + || ($this->model == Shift::class && $this->type == 'my_soldiers') + || ($this->model == Shift::class && $this->type == 'my' && array_intersect(auth()->user()->getRoleNames()->toArray(), ['manager', 'department-commander', 'team-commander'])) + ) { + if ($this->model == Shift::class) { + return array_merge($basicActions, $changeAction); + } + + return $basicActions; + } + if ($this->model == Shift::class && $this->type == 'my') { + return $changeAction; + } + FilamentFullCalendarPlugin::get()->editable(false); + FilamentFullCalendarPlugin::get()->selectable(false); + + return []; + } + + protected function getBasicActions() + { + return [ EditAction::make() ->fillForm(function (Model $record, array $arguments): array { return method_exists($this->model, 'fillForm') @@ -307,7 +334,6 @@ protected function modalActions(): array 'end_date' => $arguments['event']['end'] ?? $record->end_date, ]; }) - ->hidden($this->model === Shift::class && $this->type === 'my' && ! array_intersect(auth()->user()->getRoleNames()->toArray(), ['manager', 'department-commander', 'team-commander'])) ->modalCloseButton(false) ->modalCancelAction(false) ->modalSubmitAction(false) @@ -322,27 +348,26 @@ protected function modalActions(): array ) ) : true ); - $oldDate = date('l', strtotime($this->mountedActionsArguments[0]['oldEvent']['start'])); - $newDate = date('l', strtotime($this->mountedActionsData[0]['start_date'])); - $startOfWeek = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday']; - if ( - $this->model === Shift::class && - (in_array($oldDate, $startOfWeek) !== in_array($newDate, $startOfWeek)) - ) { - Notification::make() - ->info() - ->title(__('Update dragged shift details!')) - ->body(__('Pay attention to update the shift details according to the changes you made .')) - ->color('info') - ->persistent() - ->send(); + if (! empty($arguments) && $this->model === Shift::class) { + $oldDate = date('l', strtotime($this->mountedActionsArguments[0]['oldEvent']['start'])); + $newDate = date('l', strtotime($this->mountedActionsData[0]['start_date'])); + $startOfWeek = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday']; + if ((in_array($oldDate, $startOfWeek) !== in_array($newDate, $startOfWeek))) { + Notification::make() + ->info() + ->title(__('Update dragged shift details!')) + ->body(__('Pay attention to update the shift details according to the changes you made .')) + ->color('info') + ->persistent() + ->send(); + } } return [ - $action->makeExtraModalAction(__('Save'), arguments: ['save' => true]) + $action->makeExtraModalAction(__('Save'), ['save' => true]) ->color('primary') ->disabled(! $canSave), - $action->makeExtraModalAction(__('Cancel'), arguments: ['cancel' => true]) + $action->makeExtraModalAction(__('Cancel'), ['cancel' => true]) ->color('primary'), ]; }) @@ -366,32 +391,30 @@ protected function modalActions(): array } }), DeleteAction::make() - ->label(__('Delete')) - ->hidden($this->model === Shift::class && $this->type === 'my' && ! array_intersect(auth()->user()->getRoleNames()->toArray(), ['manager', 'department-commander', 'team-commander'])), + ->label(__('Delete')), + ]; + } + protected function getChangeActions() + { + return [ + Shift::exchangeAction() + ->visible(fn (): bool => $this->displayButton()) + ->cancelParentActions(), + Shift::changeAction() + ->visible(fn (): bool => $this->displayButton()) + ->cancelParentActions(), ]; - if (($this->type === 'my' && $this->model === Constraint::class) || ($this->type === 'my_soldiers' && $this->model === Shift::class)) { - if (method_exists($this->model, 'getAction')) { - $action = $this->model::getAction($this) - ->visible(function (): bool { - $record = is_array($this->mountedActionsData) && ! empty($this->mountedActionsData) - ? (object) $this->mountedActionsData[0] - : (object) $this->mountedActionsData; - - return $this->model === 'App\Models\Shift' && $record->soldier_id !== null; - }) - ->closeModalByClickingAway(false) - ->cancelParentActions(); - - return array_merge($basicActions, [$action]); - } + } - return $basicActions; - } - FilamentFullCalendarPlugin::get()->editable(false); - FilamentFullCalendarPlugin::get()->selectable(false); + protected function displayButton(): bool + { + $record = is_array($this->mountedActionsData) && ! empty($this->mountedActionsData) + ? (object) $this->mountedActionsData[0] + : (object) $this->mountedActionsData; + $range = new Range($record->start_date, $record->end_date); - return []; + return $record->soldier_id !== null && ! $range->isPass(); } protected function viewAction(): Action @@ -406,6 +429,9 @@ protected function viewAction(): Action 'end_date' => $arguments['event']['end'] ?? $record->end_date, ]; }) + ->modalFooterActions(fn (FullCalendarWidget $livewire) => [ + ...$livewire->getCachedModalActions(), + ]) ->modalHeading(__('View').$this->model::getTitle()); } diff --git a/app/Livewire/MyDatabaseNotifications.php b/app/Livewire/MyDatabaseNotifications.php new file mode 100644 index 0000000..437683d --- /dev/null +++ b/app/Livewire/MyDatabaseNotifications.php @@ -0,0 +1,490 @@ +confirmExchangeByRole($approverRole, $requestingSoldier, $approvingSoldier, $shiftA, $shiftB); + } + + protected function confirmExchangeByRole($approverRole, $requestingSoldier, $approvingSoldier, $shiftA, $shiftB) + { + $approverRole ? + $this->commanderConfirmExchange($requestingSoldier, $approvingSoldier, $shiftA, $shiftB) : + $this->soldierConfirmExchange($requestingSoldier, $approvingSoldier, $shiftA, $shiftB); + } + + protected function commanderConfirmExchange($requestingSoldier, $approvingSoldier, $shiftA, $shiftB) + { + $requestingSoldier = Soldier::find($requestingSoldier); + $approvingSoldier = Soldier::find($approvingSoldier); + $shiftA = Shift::find($shiftA); + $shiftB = Shift::find($shiftB); + $changeAssignment = new ChangeAssignment($shiftA); + $changeAssignment->exchange($shiftB); + $this->dispatch('filament-fullcalendar--refresh'); + $requestingSoldier->team->commander->id != $approvingSoldier->id ? + $this->sendNotification( + __('Approve exchange shift request'), + __( + 'Commander notification of approving exchange shift request for the requesting soldier', + [ + 'requestingSoldierName' => $requestingSoldier->user->displayName, + 'shiftAName' => $shiftA->task->name, + 'shiftAStart' => $shiftA->start_date, + 'shiftAEnd' => $shiftA->end_date, + 'approvingSoldierName' => $approvingSoldier->user->displayName, + 'shiftBName' => $shiftB->task->name, + 'shiftBStart' => $shiftB->start_date, + 'shiftBEnd' => $shiftB->end_date, + 'commanderName' => $requestingSoldier->team->commander->user->displayName, + ] + ), + [], + $requestingSoldier->user + + ) + && + $this->endNotification( + __('Approve exchange shift request'), + __( + 'Commander notification of approving exchange shift request for the approving soldier', + [ + 'approvingSoldierName' => $approvingSoldier->user->displayName, + 'requestingSoldierName' => $requestingSoldier->user->displayName, + 'shiftBName' => $shiftB->task->name, + 'shiftBStart' => $shiftB->start_date, + 'shiftBEnd' => $shiftB->end_date, + 'shiftAName' => $shiftA->task->name, + 'shiftAStart' => $shiftA->start_date, + 'shiftAEnd' => $shiftA->end_date, + 'commanderName' => $requestingSoldier->team->commander->user->displayName, + ] + ), + [], + $approvingSoldier->user + ) + + : + $this->sendNotification( + __('Approve exchange shift request'), + __( + 'Commander notification of approving exchange shift request for the requesting soldier', + [ + 'requestingSoldierName' => $requestingSoldier->user->displayName, + 'shiftAName' => $shiftA->task->name, + 'shiftAStart' => $shiftA->start_date, + 'shiftAEnd' => $shiftA->end_date, + 'approvingSoldierName' => $approvingSoldier->user->displayName, + 'shiftBName' => $shiftB->task->name, + 'shiftBStart' => $shiftB->start_date, + 'shiftBEnd' => $shiftB->end_date, + 'commanderName' => $requestingSoldier->team->commander->user->displayName, + ] + ), + [], + $requestingSoldier->user + ); + } + + protected function soldierConfirmExchange($requestingSoldier, $approvingSoldier, $shiftA, $shiftB) + { + $requestingSoldier = Soldier::find($requestingSoldier); + $approvingSoldier = Soldier::find($approvingSoldier); + $shiftA = Shift::find($shiftA); + $shiftB = Shift::find($shiftB); + $commander = $requestingSoldier->team->commander->user; + $this->sendNotification( + __('Request for shift exchange'), + __( + 'Request for shift exchange from commander', + [ + 'commanderName' => $commander->displayName, + 'requestingSoldierName' => $requestingSoldier->user->displayName, + 'shiftAName' => $shiftA->task->name, + 'shiftAStart' => $shiftA->start_date, + 'shiftAEnd' => $shiftA->end_date, + 'approvingSoldierName' => $approvingSoldier->user->displayName, + 'shiftBName' => $shiftB->task->name, + 'shiftBStart' => $shiftB->start_date, + 'shiftBEnd' => $shiftB->end_date, + ] + ), + [ + NotificationAction::make('confirm') + ->label(__('Confirm')) + ->color('success') + ->icon('heroicon-s-hand-thumb-up') + ->button() + ->dispatch('confirmExchange', [ + 'approverRole' => 'commander', + 'requestingSoldier' => $requestingSoldier->id, + 'approvingSoldier' => $approvingSoldier->id, + 'shiftA' => $shiftA->id, + 'shiftB' => $shiftB->id, + ]) + ->close(), + NotificationAction::make('deny') + ->label(__('Deny')) + ->color('danger') + ->icon('heroicon-m-hand-thumb-down') + ->button() + ->dispatch('denyExchange', [ + 'rejectorRole' => 'commander', + 'requestingSoldier' => $requestingSoldier->id, + 'rejectingSoldier' => $approvingSoldier->id, + 'shiftA' => $shiftA->id, + 'shiftB' => $shiftB->id, + ]) + ->close(), + ], + $commander + ); + } + + #[On('denyExchange')] + public function denyExchange($rejectorRole, $requestingSoldier, $rejectingSoldier, $shiftA, $shiftB): void + { + $this->denyExchangeByRole($rejectorRole, $requestingSoldier, $rejectingSoldier, $shiftA, $shiftB); + } + + protected function denyExchangeByRole($rejectorRole, $requestingSoldier, $rejectingSoldier, $shiftA, $shiftB) + { + $rejectorRole ? + $this->commanderDenyExchange($requestingSoldier, $rejectingSoldier, $shiftA, $shiftB) : + $this->soldierDenyExchange($requestingSoldier, $rejectingSoldier, $shiftA, $shiftB); + } + + protected function commanderDenyExchange($requestingSoldier, $rejectingSoldier, $shiftA, $shiftB) + { + $requestingSoldier = Soldier::find($requestingSoldier); + $rejectingSoldier = Soldier::find($rejectingSoldier); + $shiftA = Shift::find($shiftA); + $shiftB = Shift::find($shiftB); + $requestingSoldier->team->commander->id != $rejectingSoldier->id ? + $this->sendNotification( + __('Deny exchange shift request'), + __( + 'Commander notification of rejection exchange shift request for the requesting soldier', + [ + 'requestingSoldierName' => $requestingSoldier->user->displayName, + 'shiftAName' => $shiftA->task->name, + 'shiftAStart' => $shiftA->start_date, + 'shiftAEnd' => $shiftA->end_date, + 'rejectingSoldierName' => $rejectingSoldier->user->displayName, + 'shiftBName' => $shiftB->task->name, + 'shiftBStart' => $shiftB->start_date, + 'shiftBEnd' => $shiftB->end_date, + 'commanderName' => $requestingSoldier->team->commander->user->displayName, + ] + ), + [], + $requestingSoldier->user + ) + && + $this->sendNotification( + __('Deny exchange shift request'), + __( + 'Commander notification of rejection exchange shift request for the rejection soldier', + [ + 'rejectingSoldierName' => $rejectingSoldier->user->displayName, + 'requestingSoldierName' => $requestingSoldier->user->displayName, + 'shiftBName' => $shiftB->task->name, + 'shiftBStart' => $shiftB->start_date, + 'shiftBEnd' => $shiftB->end_date, + 'shiftAName' => $shiftA->task->name, + 'shiftAStart' => $shiftA->start_date, + 'shiftAEnd' => $shiftA->end_date, + 'commanderName' => $requestingSoldier->team->commander->user->displayName, + ] + ), + [], + $rejectingSoldier->user + ) + + : + $this->sendNotification( + __('Deny exchange shift request'), + __( + 'Commander notification of rejection exchange shift request for the requesting soldier', + [ + 'requestingSoldierName' => $requestingSoldier->user->displayName, + 'shiftAName' => $shiftA->task->name, + 'shiftAStart' => $shiftA->start_date, + 'shiftAEnd' => $shiftA->end_date, + 'rejectingSoldierName' => $rejectingSoldier->user->displayName, + 'shiftBName' => $shiftB->task->name, + 'shiftBStart' => $shiftB->start_date, + 'shiftBEnd' => $shiftB->end_date, + 'commanderName' => $requestingSoldier->team->commander->user->displayName, + ] + ), + [], + $requestingSoldier->user + ); + } + + protected function soldierDenyExchange($requestingSoldier, $rejectingSoldier, $shiftA, $shiftB) + { + $requestingSoldier = Soldier::find($requestingSoldier); + $rejectingSoldier = Soldier::find($rejectingSoldier); + $shiftA = Shift::find($shiftA); + $shiftB = Shift::find($shiftB); + $this->sendNotification( + __('Deny exchange shift request'), + __( + 'Soldier notification of rejection exchange shift request', + [ + 'requestingSoldierName' => $requestingSoldier->user->displayName, + 'shiftBName' => $shiftB->task->name, + 'shiftBStart' => $shiftB->start_date, + 'shiftBEnd' => $shiftB->end_date, + 'shiftAName' => $shiftA->task->name, + 'shiftAStart' => $shiftA->start_date, + 'shiftAEnd' => $shiftA->end_date, + 'rejectingSoldierName' => $rejectingSoldier->user->displayName, + ] + ), + [], + $requestingSoldier->user + ); + } + + #[On('confirmChange')] + public function confirmChange($approverRole, $shift, $soldierId) + { + $this->confirmChangeByRole($approverRole, $shift, $soldierId); + } + + protected function confirmChangeByRole($approverRole, $shift, $soldierId) + { + $approverRole ? + $this->commanderConfirmChange($shift, $soldierId) : + $this->soldierConfirmChange($shift, $soldierId); + } + + protected function commanderConfirmChange($shift, $soldierId) + { + $shift = Shift::find($shift->id); + $requestingSoldier = Soldier::find($shift->soldier_id); + $approvingSoldier = Soldier::find($soldierId); + Shift::where('id', $shift->id)->update(['soldier_id' => $soldierId]); + $this->dispatch('filament-fullcalendar--refresh'); + $requestingSoldier->team->commander->id != $approvingSoldier->id ? + $this->sendNotification( + __('Approve change shift request'), + __( + 'Commander notification of approving change shift request for the requesting soldier', + [ + 'requestingSoldierName' => $requestingSoldier->user->displayName, + 'shiftName' => $shift->task->name, + 'shiftStart' => $shift->start_date, + 'shiftEnd' => $shift->end_date, + 'commanderName' => $requestingSoldier->team->commander->user->displayName, + ] + ), + [], + $requestingSoldier->user + ) + && + $this->sendNotification( + __('Approve change shift request'), + __( + 'Commander notification of approving change shift request for the approving soldier', + [ + 'approvingSoldierName' => $approvingSoldier->user->displayName, + 'requestingSoldierName' => $requestingSoldier->user->displayName, + 'shiftName' => $shift->task->name, + 'shiftStart' => $shift->start_date, + 'shiftEnd' => $shift->end_date, + 'commanderName' => $requestingSoldier->team->commander->user->displayName, + ] + ), + [], + $approvingSoldier->user + ) + : + $this->sendNotification( + __('Approve change shift request'), + __( + 'Commander notification of approving change shift request for the requesting soldier', + [ + 'requestingSoldierName' => $requestingSoldier->user->displayName, + 'shiftName' => $shift->task->name, + 'shiftStart' => $shift->start_date, + 'shiftEnd' => $shift->end_date, + 'commanderName' => $requestingSoldier->team->commander->user->displayName, + ] + ), + [], + $requestingSoldier->user + ); + } + + protected function soldierConfirmChange($shift, $soldierId) + { + $shift = Shift::find($shift); + $requestingSoldier = Soldier::find($shift->soldier_id); + $approvingSoldier = Soldier::find($soldierId); + + $commander = $requestingSoldier->team->commander->user; + $this->sendNotification( + __('Request for shift change'), + __( + 'Request for shift change from commander', + [ + 'commanderName' => $commander->displayName, + 'requestingSoldierName' => $requestingSoldier->user->displayName, + 'shiftName' => $shift->task->name, + 'shiftStart' => $shift->start_date, + 'shiftEnd' => $shift->end_date, + 'approvingSoldierName' => $approvingSoldier->user->displayName, + ] + ), + [ + NotificationAction::make('confirm') + ->label(__('Confirm')) + ->color('success') + ->icon('heroicon-s-hand-thumb-up') + ->button() + ->dispatch('confirmChange', [ + 'approverRole' => current(array_diff(collect(Soldier::find($shift->soldier_id)->user->getRoleNames())->toArray(), ['soldier'])), + 'shift' => $shift->id, + 'soldierId' => $soldierId, + ]) + ->close(), + NotificationAction::make('deny') + ->label(__('Deny')) + ->color('danger') + ->icon('heroicon-m-hand-thumb-down') + ->button() + ->dispatch('denyChange', [ + 'rejectorRole' => current(array_diff(collect(Soldier::find($shift->soldier_id)->user->getRoleNames())->toArray(), ['soldier'])), + 'shift' => $shift->id, + 'soldierId' => $soldierId, + ]) + ->close(), + ], + $commander + ); + } + + #[On('denyChange')] + public function denyChange($rejectorRole, $shift, $soldierId): void + { + $this->denyChangeByRole($rejectorRole, $shift, $soldierId); + } + + protected function denyChangeByRole($rejectorRole, $shift, $soldierId) + { + $rejectorRole ? + $this->commanderDenyChange($shift, $soldierId) : + $this->soldierDenyChange($shift, $soldierId); + } + + protected function commanderDenyChange($shift, $soldierId) + { + $shift = Shift::find($shift); + $requestingSoldier = Soldier::find($shift->soldier_id); + $approvingSoldier = Soldier::find($soldierId); + $requestingSoldier->team->commander->id != $approvingSoldier->id ? + $this->sendNotification( + __('Deny change shift request'), + __( + 'Commander notification of rejection change shift request for the requesting soldier', + [ + 'requestingSoldierName' => $requestingSoldier->user->displayName, + 'shiftName' => $shift->task->name, + 'shiftStart' => $shift->start_date, + 'shiftEnd' => $shift->end_date, + 'approvingSoldierName' => $approvingSoldier->user->displayName, + 'commanderName' => $requestingSoldier->team->commander->user->displayName, + ] + ), + [], + $requestingSoldier->user + ) + + && + $this->sendNotification( + __('Deny change shift request'), + __( + 'Commander notification of rejection change shift request for the approving soldier', + [ + 'approvingSoldierName' => $approvingSoldier->user->displayName, + 'requestingSoldierName' => $requestingSoldier->user->displayName, + 'shiftName' => $shift->task->name, + 'shiftStart' => $shift->start_date, + 'shiftEnd' => $shift->end_date, + 'commanderName' => $requestingSoldier->team->commander->user->displayName, + ] + ), + [], + $approvingSoldier->user + ) + : + $this->sendNotification( + __('Deny change shift request'), + __( + 'Commander notification of rejection change shift request for the requesting soldier', + [ + 'requestingSoldierName' => $requestingSoldier->user->displayName, + 'shiftName' => $shift->task->name, + 'shiftStart' => $shift->start_date, + 'shiftEnd' => $shift->end_date, + 'approvingSoldierName' => $approvingSoldier->user->displayName, + 'commanderName' => $requestingSoldier->team->commander->user->displayName, + ] + ), + [], + $requestingSoldier->user + ); + } + + protected function soldierDenyChange($shift, $soldierId) + { + $shift = Shift::find($shift); + $requestingSoldier = Soldier::find($shift->soldier_id); + $rejectingSoldier = Soldier::find($soldierId); + $this->sendNotification( + __('Deny change shift request'), + __( + 'Soldier notification of rejection change shift request', + [ + 'requestingSoldierName' => $requestingSoldier->user->displayName, + 'shiftName' => $shift->task->name, + 'shiftStart' => $shift->start_date, + 'shiftEnd' => $shift->end_date, + 'rejectingSoldierName' => $rejectingSoldier->user->displayName, + ] + ), + [], + $requestingSoldier->user + ); + } + + protected function sendNotification($title, $body, $actions, $user) + { + Notification::make() + ->title($title) + ->persistent() + ->body( + $body + ) + ->actions( + $actions + ) + ->sendToDatabase($user, true); + } +} diff --git a/app/Models/Shift.php b/app/Models/Shift.php index a44b69b..8f94238 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -3,21 +3,26 @@ namespace App\Models; use App\Casts\Integer; +use App\Services\ChangeAssignment; use App\Services\ManualAssignment; +use Cache; use Filament\Actions\Action; use Filament\Forms\Components\DateTimePicker; use Filament\Forms\Components\Grid; use Filament\Forms\Components\Placeholder; +use Filament\Forms\Components\Radio; use Filament\Forms\Components\Section; use Filament\Forms\Components\Select; use Filament\Forms\Components\TextInput; use Filament\Forms\Components\Toggle; use Filament\Forms\Components\ToggleButtons; use Filament\Forms\Get; +use Filament\Notifications\Actions\Action as NotificationAction; +use Filament\Notifications\Notification; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; -use Illuminate\Support\Facades\Cache; +use Livewire\Component; class Shift extends Model { @@ -50,8 +55,8 @@ public function getTaskNameAttribute() $user_name = User::where('userable_id', $this->soldier_id)->get(['first_name', 'last_name']); return $this->soldier_id == auth()->user()->userable_id - ? $this->task?->name - : $this->task?->name.' '.$user_name->first()?->first_name.' '.$user_name->first()?->last_name; + ? $this->task?->name + : $this->task?->name.' '.$user_name->first()?->first_name.' '.$user_name->first()?->last_name; } public function getTaskColorAttribute() @@ -80,7 +85,7 @@ public static function getSchema(): array $set('soldier_id', null); }), Select::make('soldier_id') - ->label('Soldier assignment') + ->label(__('Soldier assignment')) ->options( function (?Shift $shift, Get $get) { $manual_assignment = new ManualAssignment($shift, $get('soldier_type')); @@ -148,7 +153,7 @@ protected static function getOptions($shift): array ->put('me', __('Me')) ->toArray(); } - if (current(array: array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) != 'manager') { + if (current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) != 'manager') { return collect($options) ->put('my_soldiers', __('My Soldiers')) ->toArray(); @@ -157,42 +162,437 @@ protected static function getOptions($shift): array return $options; } - public static function getAction($calendar): Action + public static function exchangeAction(): Action { - $record = is_array($calendar->mountedActionsData) && ! empty($calendar->mountedActionsData) ? (object) $calendar->mountedActionsData[0] : (object) $calendar->mountedActionsData; + return Action::make('Exchange') + ->label(__('Exchange')) + ->icon('heroicon-s-arrow-path') + ->cancelParentActions() + ->closeModalByClickingAway(false) + ->modalCancelAction(false) + ->modalSubmitAction(false) + ->modalCloseButton(false) + ->form( + function ($record) { + session()->put('selected_shift', false); + $changeAssignment = new ChangeAssignment($record); + $sections = $changeAssignment->getMatchingShifts() + ->map( + function ($shifts, $soldierId) { + return Section::make() + ->id($soldierId) + ->description(__('Exchange with').' '.Soldier::find($soldierId)->user->displayName) + ->schema( + $shifts->map( + function ($shift) { + return Section::make() + ->id($shift->id) + ->schema([ + Radio::make('selected_shift') + ->label(__('')) + ->options([ + $shift->id => __('Task').': '.Task::find($shift->task_id)->name.' '.__('Time').': '.__('From').' '.$shift->start_date.' '.__('To').' '.$shift->end_date, + ]) + ->default(null) + ->afterStateUpdated(fn () => session()->put('selected_shift', true)) + ->live() + ->reactive(), + ]); + } + ) + ->toArray() + ) + ->collapsed(); + } + ); - return Action::make('Shift change') - ->label(__('Shift change')) - ->color('success') - ->form(function () use ($record) { + return array_merge( + [ + Placeholder::make('') + ->content(fn (Shift $shift) => $shift->task_name) + ->inlineLabel(), + Placeholder::make('') + ->content(fn (Shift $shift) => $shift->start_date.' - '.$shift->end_date) + ->inlineLabel(), + ], + $sections->toArray() + ); + } + ) + ->extraModalFooterActions(function (Action $action) { return [ - Placeholder::make('') - ->content(fn (Shift $shift) => $shift->task_name) - ->inlineLabel(), - Placeholder::make('') - ->content(__('Changing the shifts is your sole responsibility! (pay attention to conflicts between shifts).')) - ->extraAttributes(['style' => 'color: red; font-family: Arial, Helvetica, sans-serif; font-size: 20px']), - Select::make('soldier_id') - ->label(__('New assignment')) - ->required() - ->options( - fn () => Cache::remember('users', 30 * 60, function () { - return User::all(); - })->where('userable_id', '!=', $record->soldier_id) - ->mapWithKeys(function ($user) { - return [$user->userable_id => $user->displayName]; - }) - ), + $action->makeExtraModalAction('exchange', ['exchange' => true]) + ->label(__('Exchange assignment')) + ->icon('heroicon-s-arrow-path') + ->color('primary') + ->disabled(fn (): bool => ! session()->get('selected_shift')) + ->visible(fn (): bool => current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))), + $action->makeExtraModalAction(__('Request'), ['request' => true]) + ->icon('heroicon-s-arrow-path') + ->disabled(fn (): bool => ! session()->get('selected_shift')) + ->color('primary') + ->visible(fn (): bool => ! current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))), + $action->makeExtraModalAction(__('Cancel'), ['cancel' => true]), ]; }) - ->action(function (array $data) use ($record, $calendar) { - $shift = Shift::where('soldier_id', $record->soldier_id)->first(); - $shift->soldier_id = (int) $data['soldier_id']; - $shift->save(); - $calendar->refreshRecords(); + ->action(function (array $data, array $arguments, Model $record, Component $livewire): void { + session()->put('selected_shift', false); + if ($arguments['exchange'] ?? false) { + self::commanderExchange($record, Shift::find($data['selected_shift'])); + $livewire->dispatch('filament-fullcalendar--refresh'); + } + if ($arguments['request'] ?? false) { + self::soldierExchange($record, Shift::find($data['selected_shift'])); + $livewire->dispatch('filament-fullcalendar--refresh'); + } + if ($arguments['cancel'] ?? false) { + $livewire->dispatch('filament-fullcalendar--refresh'); + } + }); + } + + protected static function commanderExchange($record, $shift) + { + self::sendExchangeNotifications($record, $shift); + $changeAssignment = new ChangeAssignment($record); + $changeAssignment->exchange($shift); + } + + protected static function sendExchangeNotifications($shiftA, $shiftB) + { + $soldierA = Soldier::find($shiftA->soldier_id); + $soldierB = Soldier::find($shiftB->soldier_id); + + $soldierA->id != auth()->user()->userable_id ? + self::sendNotification( + __('Exchange shift'), + __( + 'Commander notification of exchanging shifts for first soldier', + [ + 'soldierAName' => $soldierA->user->displayName, + 'shiftAName' => $shiftA->task->name, + 'shiftAStart' => $shiftA->start_date, + 'shiftAEnd' => $shiftA->end_date, + 'soldierBName' => $soldierB->user->displayName, + 'shiftBName' => $shiftB->task->name, + 'shiftBStart' => $shiftB->start_date, + 'shiftBEnd' => $shiftB->end_date, + 'commander' => auth()->user()->displayName, + ] + ), + [], + $soldierA->user + ) && + self::sendNotification( + __('Exchange shift'), + __( + 'Commander notification of exchanging shifts for second soldier', + [ + 'soldierBName' => $soldierB->user->displayName, + 'shiftBName' => $shiftB->task->name, + 'shiftBStart' => $shiftB->start_date, + 'shiftBEnd' => $shiftB->end_date, + 'soldierAName' => $soldierA->user->displayName, + 'shiftAName' => $shiftA->task->name, + 'shiftAStart' => $shiftA->start_date, + 'shiftAEnd' => $shiftA->end_date, + 'commander' => auth()->user()->displayName, + ] + ), + [], + $soldierB->user + ) : + self::sendNotification( + __('Exchange shift'), + __( + 'Commander notification of exchanging shifts for second soldier', + [ + 'soldierBName' => $soldierB->user->displayName, + 'shiftBName' => $shiftB->task->name, + 'shiftBStart' => $shiftB->start_date, + 'shiftBEnd' => $shiftB->end_date, + 'soldierAName' => $soldierA->user->displayName, + 'shiftAName' => $shiftA->task->name, + 'shiftAStart' => $shiftA->start_date, + 'shiftAEnd' => $shiftA->end_date, + 'commander' => auth()->user()->displayName, + ] + ), + [], + $soldierB->user + ); + + } + + protected static function soldierExchange($record, $shift) + { + $user = Soldier::find($shift->soldier_id)->user; + self::sendNotification( + __('Request for shift exchange'), + __( + 'Request for shift exchange from soldier', + [ + 'soldierAName' => $user->displayName, + 'shiftAName' => $shift->task->name, + 'shiftAStart' => $shift->start_date, + 'shiftAEnd' => $shift->end_date, + 'shiftBName' => $record->task->name, + 'shiftBStart' => $record->start_date, + 'shiftBEnd' => $record->end_date, + 'soldierBName' => Soldier::find($record->soldier_id)->user->displayName, + ] + ), + [ + NotificationAction::make('confirm') + ->label(__('Confirm')) + ->color('success') + ->icon('heroicon-s-hand-thumb-up') + ->button() + ->dispatch('confirmExchange', [ + 'approverRole' => current(array_diff(collect(Soldier::find($shift->soldier_id)->user->getRoleNames())->toArray(), ['soldier'])), + 'requestingSoldier' => $record->soldier_id, + 'approvingSoldier' => $shift->soldier_id, + 'shiftA' => $record->id, + 'shiftB' => $shift->id, + ]) + ->close(), + NotificationAction::make('deny') + ->label(__('Deny')) + ->color('danger') + ->icon('heroicon-m-hand-thumb-down') + ->button() + ->dispatch('denyExchange', [ + 'rejectorRole' => current(array_diff(collect(Soldier::find($shift->soldier_id)->user->getRoleNames())->toArray(), ['soldier'])), + 'requestingSoldier' => $record->soldier_id, + 'rejectingSoldier' => $shift->soldier_id, + 'shiftA' => $record->id, + 'shiftB' => $shift->id, + ]) + ->close(), + ], + $user + ); + } + + public static function changeAction(): Action + { + return Action::make('Change') + ->label(__('Change')) + ->icon('heroicon-o-arrow-uturn-up') + ->cancelParentActions() + ->closeModalByClickingAway(false) + ->modalCancelAction(false) + ->modalSubmitAction(false) + ->modalCloseButton(false) + ->form( + function ($record) use (&$soldiers) { + $changeAssignment = new ChangeAssignment($record); + session()->put('selected_soldier', false); + + return [ + Section::make() + ->id($record->id) + ->description(__('Change shift')) + ->schema( + [ + Placeholder::make(__('Task')) + ->content(Task::find($record->task_id)->name), + Placeholder::make(__('Soldier')) + ->content(Soldier::find($record->soldier_id)->user->displayName), + Placeholder::make(__('Time')) + ->content(__('From').' '.$record->start_date.' '.__('To').' '.$record->end_date), + Placeholder::make('') + ->content(__('Changing the shifts is your sole responsibility! (pay attention to conflicts between shifts).')) + ->extraAttributes(['style' => 'color: red; font-family: Arial, Helvetica, sans-serif; font-size: 20px']) + ->live() + ->visible(fn (Get $get) => $get('soldiers') == 'all'), + ToggleButtons::make('soldiers') + ->label('') + ->options(['all' => __('All soldiers'), 'matching' => __('Matching soldiers')]) + ->inline() + ->live() + ->default(fn () => 'matching') + ->visible(fn (): bool => current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))) + ->afterStateUpdated(function (callable $set) { + $set('soldier', null); + session()->put('selected_soldier', false); + }), + Select::make('soldier') + ->label(__('Soldier')) + ->options( + fn (Get $get) => match ($get('soldiers')) { + 'all' => Cache::remember('users', 30 * 60, function () { + return User::all(); + })->where('userable_id', '!=', $record->soldier_id) + ->mapWithKeys(function ($user) { + return [$user->userable_id => $user->displayName]; + }), + 'matching' => $changeAssignment->getMatchingSoldiers(), + default => $changeAssignment->getMatchingSoldiers(), + } + ) + ->placeholder(__('Select a soldier')) + ->afterStateUpdated( + fn () => session()->put('selected_soldier', true) + ) + ->live() + ->reactive(), + ] + ), + ]; + } + ) + ->extraModalFooterActions( + function (Action $action): array { + return [ + $action->makeExtraModalAction('change', ['change' => true]) + ->label(__('Change assignment')) + ->icon('heroicon-o-arrow-uturn-up') + ->color('primary') + ->disabled(fn (): bool => ! session()->get('selected_soldier')) + ->visible(fn (): bool => current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))), + $action->makeExtraModalAction(__('Request'), ['request' => true]) + ->icon('heroicon-o-arrow-uturn-up') + ->disabled(fn (): bool => ! session()->get('selected_soldier')) + ->color('primary') + ->visible(fn (): bool => ! current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))), + $action->makeExtraModalAction(__('Cancel'), ['cancel' => true]), + ]; + } + ) + ->action(function (array $data, array $arguments, Model $record, Component $livewire): void { + session()->put('selected_soldier', false); + if ($arguments['change'] ?? false) { + self::commanderChange($record, $data['soldier']); + $livewire->dispatch('filament-fullcalendar--refresh'); + } + if ($arguments['request'] ?? false) { + self::soldierChange($record, $data['soldier']); + $livewire->dispatch('filament-fullcalendar--refresh'); + } + if ($arguments['cancel'] ?? false) { + $livewire->dispatch('filament-fullcalendar--refresh'); + } }); } + protected static function commanderChange($shift, $soldierId) + { + self::sendChangeNotifications($shift, $soldierId); + Shift::where('id', $shift->id)->update(['soldier_id' => $soldierId]); + } + + protected static function sendChangeNotifications($shift, $soldierId) + { + $soldier = Soldier::find($soldierId); + $shift->soldier_id != auth()->user()->userable_id ? + self::sendNotification( + __('Change assignment'), + __( + 'Commander notification of changing shifts for first soldier', + [ + 'soldierName' => $soldier->user->displayName, + 'shiftName' => $shift->task->name, + 'shiftStart' => $shift->start_date, + 'shiftEnd' => $shift->end_date, + 'commander' => auth()->user()->displayName, + ] + ), + [], + $soldier->user + ) + && + self::sendNotification( + __('Change assignment'), + __( + 'Commander notification of changing shifts for second soldier', + [ + 'soldierName' => Soldier::find($shift->soldier_id)->user->displayName, + 'shiftName' => $shift->task->name, + 'shiftStart' => $shift->start_date, + 'shiftEnd' => $shift->end_date, + 'commander' => auth()->user()->displayName, + ] + ), + [], + Soldier::find($shift->soldier_id)->user + ) + + : + self::sendNotification( + __('Change assignment'), + __( + 'Commander notification of changing shifts for first soldier', + [ + 'soldierName' => $soldier->user->displayName, + 'shiftName' => $shift->task->name, + 'shiftStart' => $shift->start_date, + 'shiftEnd' => $shift->end_date, + 'commander' => auth()->user()->displayName, + ] + ), + [], + $soldier->user + ); + } + + protected static function soldierChange($record, $soldierId) + { + $soldier = Soldier::find($soldierId); + self::sendNotification( + __('Request for shift change'), + __( + 'Request for shift change from soldier', + [ + 'soldierName' => $soldier->user->displayName, + 'shiftName' => $record->task->name, + 'shiftStart' => $record->start_date, + 'shiftEnd' => $record->end_date, + 'requestingSoldierName' => Soldier::find($record->soldier_id)->user->displayName, + ] + ), + [ + NotificationAction::make('confirm') + ->label(__('Confirm')) + ->color('success') + ->icon('heroicon-s-hand-thumb-up') + ->button() + ->dispatch('confirmChange', [ + 'approverRole' => current(array_diff(collect(Soldier::find($record->soldier_id)->user->getRoleNames())->toArray(), ['soldier'])), + 'shift' => $record->id, + 'soldierId' => $soldierId, + ]) + ->close(), + NotificationAction::make('deny') + ->label(__('Deny')) + ->color('danger') + ->icon('heroicon-m-hand-thumb-down') + ->button() + ->dispatch('denyChange', [ + 'rejectorRole' => current(array_diff(collect(Soldier::find($record->soldier_id)->user->getRoleNames())->toArray(), ['soldier'])), + 'shift' => $record->id, + 'soldierId' => $soldierId, + ]) + ->close(), + ], + $soldier->user + ); + } + + protected static function sendNotification($title, $body, $actions, $user) + { + Notification::make() + ->title($title) + ->persistent() + ->body( + $body + ) + ->actions( + $actions + ) + ->sendToDatabase($user, true); + } + public static function getFilters($calendar) { return Action::make('Filters') @@ -207,8 +607,10 @@ public static function getFilters($calendar) return [ Select::make('soldier_id') ->label(__('Soldier')) - ->options(fn (): array => collect($soldiersShifts)->mapWithKeys(fn ($shift) => [$shift['soldier_id'] => User::where('userable_id', $shift['soldier_id']) - ->first()?->displayName])->toArray()) + ->options(fn (): array => collect($soldiersShifts)->mapWithKeys(fn ($shift) => [ + $shift['soldier_id'] => User::where('userable_id', $shift['soldier_id']) + ->first()?->displayName, + ])->toArray()) ->multiple(), Select::make('type') ->label(__('Type')) @@ -251,18 +653,18 @@ public static function activeFilters($calendar) { if ($calendar->filter) { return $calendar->filterData === 'UnassignedShifts' - ? ['Unassigned shifts'] - : collect($calendar->filterData['soldier_id']) - ->map(function ($soldier_id) { - return User::where('userable_id', $soldier_id)->first()->displayName ?? null; - }) - ->concat( - collect($calendar->filterData['type'])->map(function ($task_id) { - return Task::find($task_id)?->name; + ? ['Unassigned shifts'] + : collect($calendar->filterData['soldier_id']) + ->map(function ($soldier_id) { + return User::where('userable_id', $soldier_id)->first()->displayName ?? null; }) - ) - ->filter() - ->toArray(); + ->concat( + collect($calendar->filterData['type'])->map(function ($task_id) { + return Task::find($task_id)?->name; + }) + ) + ->filter() + ->toArray(); } return []; @@ -276,8 +678,8 @@ public static function getTitle(): string public static function setData($record, $data) { $record->is_weekend ?? $data['is_weekend'] = $record->task->is_weekend === $data['is_weekend'] ? null : $data['is_weekend']; - if ($record->parallel_weight == 0) { - $data['parallel_weight'] = $record->task->parallel_weight === $data['parallel_weight'] ? 0 : $data['parallel_weight']; + if ($record->parallel_weight === null) { + $data['parallel_weight'] = $record->task->parallel_weight === $data['parallel_weight'] ? null : $data['parallel_weight']; } return $data; @@ -288,7 +690,7 @@ public static function fillForm($record, $arguments) return [ ...$record->getAttributes(), 'is_weekend' => $record->is_weekend === null ? $record->task->is_weekend : $record->is_weekend, - 'parallel_weight' => $record->parallel_weight == 0 ? $record->task->parallel_weight : $record->parallel_weight, + 'parallel_weight' => $record->parallel_weight === null ? $record->task->parallel_weight : $record->parallel_weight, 'start_date' => $arguments['event']['start'] ?? $record->start_date, 'end_date' => $arguments['event']['end'] ?? $record->end_date, ]; diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 4a7d272..628350b 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -27,6 +27,11 @@ public function boot(): void fn (): string => Blade::render('@livewire(\'set-locale\')'), ); + FilamentView::registerRenderHook( + PanelsRenderHook::USER_MENU_BEFORE, + fn (): string => Blade::render('@livewire(\'my-database-notifications\')'), + ); + FilamentView::registerRenderHook( PanelsRenderHook::SIDEBAR_FOOTER, fn (): string => Blade::render('picture'), diff --git a/app/Resources/DepartmentResource.php b/app/Resources/DepartmentResource.php index 26e1f92..f3648b1 100644 --- a/app/Resources/DepartmentResource.php +++ b/app/Resources/DepartmentResource.php @@ -3,6 +3,7 @@ namespace App\Resources; use App\Models\Department; +use App\Models\Soldier; use App\Models\Team; use App\Models\User; use App\Resources\DepartmentResource\Pages; @@ -58,6 +59,7 @@ public static function form(Form $form): Form return [$user->userable_id => $user->displayName]; }) ) + ->optionsLimit(Soldier::count()) ->searchable(), ])->columns(2), @@ -133,7 +135,7 @@ public static function checkCommander($teams, $departments, $data) NotificationsService\Action::make('confirm') ->label(__('Confirm')) ->button() - ->dispatch('confirmCreate', data: ['teams' => $teams, 'departments' => $departments]), + ->dispatch('confirmCreate', ['teams' => $teams, 'departments' => $departments]), NotificationsService\Action::make(__('Cancel')) ->button() ->close(), diff --git a/app/Resources/DepartmentResource/Pages/CreateDepartment.php b/app/Resources/DepartmentResource/Pages/CreateDepartment.php index 1992f4a..c7f2bfa 100644 --- a/app/Resources/DepartmentResource/Pages/CreateDepartment.php +++ b/app/Resources/DepartmentResource/Pages/CreateDepartment.php @@ -28,7 +28,7 @@ protected function beforeCreate(): void $this->halt(); } - $teams = Team::where('commander_id', operator: $this->data['commander_id'])->get(); + $teams = Team::where('commander_id', $this->data['commander_id'])->get(); $departments = Department::where('commander_id', $this->data['commander_id'])->get(); if ($teams->isNotEmpty() || $departments->isNotEmpty() || $this->data['commander_id'] == null) { DepartmentResource::checkCommander($teams, $departments, $this->data); diff --git a/app/Resources/ProfileResource.php b/app/Resources/ProfileResource.php index e84dc64..e819933 100644 --- a/app/Resources/ProfileResource.php +++ b/app/Resources/ProfileResource.php @@ -102,7 +102,7 @@ public static function table(Table $table): Table return $soldierShifts->filter(function (Shift $shift): bool { return Carbon::parse($shift->start_date)->month == now()->month || Carbon::parse($shift->end_date)->month == now()->month; - })->sum(fn (Shift $shift) => $shift->parallel_weight == 0 ? $shift->task->parallel_weight : $shift->parallel_weight); + })->sum(fn (Shift $shift) => $shift->parallel_weight === null ? $shift->task->parallel_weight : $shift->parallel_weight); }) ->weight(weight: FontWeight::SemiBold) ->description(__('Capacity hold'), position: 'above') diff --git a/app/Resources/SoldierResource.php b/app/Resources/SoldierResource.php index 58111df..6f215cd 100644 --- a/app/Resources/SoldierResource.php +++ b/app/Resources/SoldierResource.php @@ -37,6 +37,7 @@ use Filament\Tables\Filters\SelectFilter; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; +use Illuminate\Support\Facades\Session; class SoldierResource extends Resource { @@ -57,8 +58,9 @@ public static function form(Form $form): Form public static function table(Table $table): Table { - return $table + Session::put('is_replica', false); + return $table ->columns([ TextColumn::make('user') ->label(__('Full name')) @@ -117,7 +119,7 @@ function ($record) { return $soldierShifts->filter(function (Shift $shift): bool { return Carbon::parse($shift->start_date)->month == now()->month || Carbon::parse($shift->end_date)->month == now()->month; - })->sum(fn (Shift $shift) => $shift->parallel_weight == 0 ? $shift->task->parallel_weight : $shift->parallel_weight); + })->sum(fn (Shift $shift) => $shift->parallel_weight === null ? $shift->task->parallel_weight : $shift->parallel_weight); }) ->label(__('Capacity hold')) ->numeric() @@ -238,6 +240,7 @@ function ($record) { ReplicateAction::make() ->icon('heroicon-o-document-duplicate') ->color('success') + ->before(fn () => Session::put('is_replica', true)) ->after(function (Soldier $replica): void { redirect()->route('filament.app.resources.soldiers.edit', ['record' => $replica->id]); }) @@ -289,7 +292,11 @@ public static function personalDetails(): Fieldset ->password() ->revealable() ->length(7) - ->hiddenOn('edit') + ->hidden(function () { + $isReplica = Session::get('is_replica'); + + return request()->route()->getName() === 'filament.app.resources.soldiers.edit' && ! $isReplica; + }) ->required(), ])->columns(3); } @@ -351,7 +358,7 @@ public static function constraints(): array TextInput::make('max_shifts') ->label(__('Max shifts')) ->numeric() - ->step(0.25) + ->step(1) ->minValue(0) ->required() ->default(0), diff --git a/app/Resources/SoldierResource/Pages/EditSoldier.php b/app/Resources/SoldierResource/Pages/EditSoldier.php index 15e3651..8de5f13 100644 --- a/app/Resources/SoldierResource/Pages/EditSoldier.php +++ b/app/Resources/SoldierResource/Pages/EditSoldier.php @@ -4,6 +4,7 @@ use App\Resources\SoldierResource; use Filament\Resources\Pages\EditRecord; +use Illuminate\Support\Facades\Session; class EditSoldier extends EditRecord { @@ -28,5 +29,6 @@ protected function afterSave(): void { $user = $this->record->user; $user->getRoleNames()->isEmpty() ? $user->assignRole('soldier') : null; + Session::put('is_replica', false); } } diff --git a/app/Resources/TaskResource.php b/app/Resources/TaskResource.php index ca48a81..221292b 100644 --- a/app/Resources/TaskResource.php +++ b/app/Resources/TaskResource.php @@ -162,7 +162,7 @@ public static function table(Table $table): Table ->size(TextColumnSize::Small) ->extraAttributes(['style' => 'margin-left: 15px;']), TextColumn::make('recurring.end_date') - ->description(__('EndDate'), position: 'above') + ->description(__('End date'), position: 'above') ->size(TextColumnSize::Small) ->extraAttributes(['style' => 'margin-left: 15px;']), ]) diff --git a/app/Resources/TeamResource.php b/app/Resources/TeamResource.php index dc82ece..3b35ada 100644 --- a/app/Resources/TeamResource.php +++ b/app/Resources/TeamResource.php @@ -59,6 +59,7 @@ public static function form(Form $form): Form return [$user->userable_id => $user->displayName]; }) ) + ->optionsLimit(Soldier::count()) ->searchable() ->required(), Select::make('department_id') @@ -77,6 +78,7 @@ public static function form(Form $form): Form return [$user->userable_id => $user->displayName]; }) ) + ->optionsLimit(Soldier::count()) ->placeholder(__('Add a team member')) ->multiple() ->searchable(), @@ -137,6 +139,7 @@ public static function table(Table $table): Table return [$user->userable_id => $user->displayName]; }) ) + ->optionsLimit(Soldier::count()) ->multiple() ->searchable(), ]) @@ -169,7 +172,8 @@ public static function checkCommander($teams, $departments, $data) Notification::make() ->title(__('Save team')) ->persistent() - ->body(__('The commander you selected is already registered as a commander. His selection will leave his :type without a commander. Are you sure?'))->actions([ + ->body(__('The commander you selected is already registered as a commander. His selection will leave his :type without a commander. Are you sure?')) + ->actions([ NotificationsService\Action::make(__('View ').($teams->isNotEmpty() ? __('Team') : __('Department'))) ->button() ->url( diff --git a/app/Services/Algorithm.php b/app/Services/Algorithm.php index 8ce59c5..afd51ef 100644 --- a/app/Services/Algorithm.php +++ b/app/Services/Algorithm.php @@ -2,13 +2,9 @@ namespace App\Services; -use App\Enums\ConstraintType; -use App\Enums\Priority; use App\Models\Shift; use App\Models\Soldier; -use App\Services\Constraint as ConstraintService; use App\Services\Shift as ShiftService; -use App\Services\Soldier as SoldierService; use Carbon\Carbon; class Algorithm @@ -29,7 +25,7 @@ protected function getShiftWithTasks() return $range->isSameMonth(new Range(max($this->date->copy()->startOfMonth(), Carbon::tomorrow()), $this->date->copy()->endOfMonth())); }) - ->map(fn (Shift $shift): ShiftService => $this->buildShift($shift)); + ->map(fn (Shift $shift): ShiftService => Helpers::buildShift($shift)); } protected function getSoldiersDetails() @@ -38,103 +34,23 @@ protected function getSoldiersDetails() ->where('is_reservist', false) ->get() ->map(function (Soldier $soldier) { - $constraints = $soldier->constraints - ->filter(function ($constraint) { - $range = new Range($constraint->start_date, $constraint->end_date); + $constraints = Helpers::buildConstraints($soldier->constraints, new Range($this->date->copy()->startOfMonth(), $this->date->copy()->endOfMonth())); - return $range->isSameMonth(new Range($this->date->copy()->startOfMonth(), $this->date->copy()->endOfMonth())); - }) - ->map( - fn ($constraint) => new ConstraintService( - $constraint->start_date, - $constraint->end_date, - ConstraintType::getPriority()[$constraint->constraint_type] == 1 ? Priority::HIGH : Priority::LOW - ) - ); - $shifts = $this->getSoldiersShifts($soldier); + $shifts = $this->getSoldiersShifts($soldier->id); - $shifts->push(...$this->addShiftsSpaces($shifts)); + $shifts->push(...Helpers::addShiftsSpaces($shifts)); - $capacityHold = $this->capacityHold($shifts); + $capacityHold = Helpers::capacityHold($shifts); - return new SoldierService( - $soldier->id, - new MaxData($soldier->capacity, $capacityHold['points']), - new MaxData($soldier->max_shifts, $capacityHold['count']), - new MaxData($soldier->max_nights, $capacityHold['sumNights']), - new MaxData($soldier->max_weekends, $capacityHold['sumWeekends']), - $soldier->qualifications, - $constraints, - $shifts - ); + return Helpers::buildSoldier($soldier, $constraints, $shifts, $capacityHold); }) ->shuffle() ->toArray(); } - protected function getSoldiersShifts(Soldier $soldier) + protected function getSoldiersShifts($soldierId) { - return Shift::where('soldier_id', $soldier->id) - ->get() - ->filter( - function (Shift $shift): bool { - $range = new Range($shift->start_date, $shift->end_date); - - return $range->isSameMonth(new Range($this->date->copy()->startOfMonth(), $this->date->copy()->endOfMonth())); - } - ) - ->map(fn (Shift $shift): ShiftService => $this->buildShift($shift)); - } - - protected function buildShift(Shift $shift): ShiftService - { - return new ShiftService( - $shift->id, - $shift->task->type, - $shift->start_date, - $shift->end_date, - $shift->parallel_weight == 0 ? $shift->task->parallel_weight : $shift->parallel_weight, - $shift->task->is_night, - $shift->is_weekend != null ? $shift->is_weekend : $shift->task->is_weekend, - ); - } - - protected function addShiftsSpaces($shifts) - { - $allSpaces = collect([]); - collect($shifts)->map(function (ShiftService $shift) use ($shifts, &$allSpaces) { - $spaces = $shift->isWeekend || $shift->isNight ? $shift->getShiftSpaces($shifts) : null; - if (! empty($spaces)) { - collect($spaces)->map(fn (Range $space) => $allSpaces->push(new ShiftService(0, 'space', $space->start, $space->end, 0, false, false))); - } - }); - - return $allSpaces; - } - - protected function capacityHold($shifts): array - { - $points = 0; - $nights = 0; - $weekends = 0; - $count = 0; - collect($shifts) - ->filter(function ($shift) { - return $shift->id != 0; - }) - ->map(function ($shift) use (&$count, &$points, &$nights, &$weekends) { - $count++; - $points += $shift->points; - $shift->isWeekend ? $weekends += $shift->points : $weekends; - $shift->isNight ? $nights += $shift->points : $nights; - }); - - return [ - 'count' => $count, - 'points' => $points, - 'sumWeekends' => $weekends, - 'sumNights' => $nights, - ]; + return Helpers::getSoldiersShifts($soldierId, new Range($this->date->copy()->startOfMonth(), $this->date->copy()->endOfMonth())); } public function run() diff --git a/app/Services/ChangeAssignment.php b/app/Services/ChangeAssignment.php new file mode 100644 index 0000000..e749ea7 --- /dev/null +++ b/app/Services/ChangeAssignment.php @@ -0,0 +1,112 @@ +shift = $shift; + $this->soldier = $this->buildSoldier(); + } + + protected function buildSoldier(): SoldierService + { + $soldier = Soldier::find($this->shift->soldier_id); + $constraints = $this->getConstraints($soldier); + $shifts = $this->getSoldiersShifts($soldier->id); + + return Helpers::buildSoldier($soldier, $constraints, $shifts, []); + } + + public function getMatchingSoldiers() + { + return Soldier::where('id', '!=', $this->soldier->id) + ->get() + ->map(function ($soldier) { + $constraints = $this->getConstraints($soldier); + $soldierShifts = $this->getSoldiersShifts($soldier->id); + + return Helpers::buildSoldier($soldier, $constraints, $soldierShifts, []); + }) + ->filter(function (SoldierService $soldier) { + return $soldier->isQualified($this->shift->task->type) + && ! $this->isConflictWithConstraints($soldier, new Range($this->shift->start_date, $this->shift->end_date)) + && ! $this->isConflictWithShifts($soldier, new Range($this->shift->start_date, $this->shift->end_date)); + }) + ->mapWithKeys(function (SoldierService $soldier) { + return [$soldier->id => Soldier::find($soldier->id)->user->displayName]; + }) + ->toArray(); + } + + public function getMatchingShifts() + { + return Shift::whereNotNull('soldier_id') + ->where('soldier_id', '!=', $this->soldier->id) + ->get() + ->filter(function (Shift $shift) { + $range = new Range($shift->start_date, $shift->end_date); + + return + ! $range->isPass() + && $range->isSameMonth(new Range($this->shift->start_date->copy()->startOfMonth(), $this->shift->end_date->copy()->endOfMonth())) + && $this->soldier->isQualified($shift->task->type) + && ! $this->isConflictWithConstraints($this->soldier, $range) + && ! $this->isConflictWithShifts($this->soldier, $range); + }) + ->groupBy('soldier_id') + ->filter(function ($shifts, $soldier_id) { + $soldierDetails = Soldier::find($soldier_id); + $constraints = $this->getConstraints($soldierDetails); + $soldierShifts = $this->getSoldiersShifts($soldierDetails->id); + $soldier = Helpers::buildSoldier($soldierDetails, $constraints, $soldierShifts, []); + + return $soldier->isQualified($this->shift->task->type) + && ! $this->isConflictWithConstraints($soldier, new Range($this->shift->start_date, $this->shift->end_date)) + && ! $this->isConflictWithShifts($soldier, new Range($this->shift->start_date, $this->shift->end_date)); + }); + } + + protected function getConstraints(Soldier $soldier) + { + return ! $soldier->is_reservist ? Helpers::getConstraintBy($soldier->id, new Range($this->shift->start_date->copy()->startOfMonth(), $this->shift->end_date->copy()->endOfMonth())) : collect([]); + } + + protected function getSoldiersShifts($soldierId) + { + return Helpers::getSoldiersShifts($soldierId, new Range($this->shift->start_date->copy()->startOfMonth(), $this->shift->end_date->copy()->endOfMonth())); + } + + protected function isConflictWithConstraints($soldier, $range): bool + { + return $soldier->constraints->contains(function (ConstraintService $constraint) use ($range): bool { + return $constraint->range->isConflict($range); + }); + } + + protected function isConflictWithShifts($soldier, $range): bool + { + return $soldier->shifts->contains(function (ShiftService $shift) use ($range): bool { + return $shift->range->isConflict($range); + }); + } + + public function exchange($shift) + { + Shift::where('id', $this->shift->id)->update(['soldier_id' => $shift->soldier_id]); + Shift::where('id', $shift->id)->update(['soldier_id' => $this->shift->soldier_id]); + } +} diff --git a/app/Services/Helpers.php b/app/Services/Helpers.php new file mode 100644 index 0000000..b7b6c7a --- /dev/null +++ b/app/Services/Helpers.php @@ -0,0 +1,118 @@ +id, + $shift->task->type, + $shift->start_date, + $shift->end_date, + $shift->parallel_weight === null ? $shift->task->parallel_weight : $shift->parallel_weight, + $shift->task->is_night, + $shift->is_weekend !== null ? $shift->is_weekend : $shift->task->is_weekend, + ); + } + + public static function buildSoldier($soldier, $constraints, $shifts, array $capacityHold): SoldierService + { + return new SoldierService( + $soldier->id, + new MaxData($soldier->capacity, $capacityHold['points'] ?? 0), + new MaxData($soldier->max_shifts, $capacityHold['count'] ?? 0), + new MaxData($soldier->max_nights, $capacityHold['sumNights'] ?? 0), + new MaxData($soldier->max_weekends, $capacityHold['sumWeekends'] ?? 0), + $soldier->qualifications, + $constraints, + $shifts + ); + } + + public static function buildConstraints($constraints, $newRange) + { + return $constraints + ->filter(function (Constraint $constraint) use ($newRange) { + $range = new Range($constraint->start_date, $constraint->end_date); + + return $range->isSameMonth($newRange); + }) + ->map( + fn (Constraint $constraint): ConstraintService => new ConstraintService( + $constraint->start_date, + $constraint->end_date, + ConstraintType::getPriority()[$constraint->constraint_type] == 1 ? Priority::HIGH : Priority::LOW + ) + ); + } + + public static function capacityHold($shifts): array + { + $points = 0; + $nights = 0; + $weekends = 0; + $count = 0; + collect($shifts) + ->filter(function ($shift) { + return $shift->id != 0; + }) + ->map(function ($shift) use (&$count, &$points, &$nights, &$weekends) { + $count++; + $points += $shift->points; + $shift->isWeekend ? $weekends += $shift->points : $weekends; + $shift->isNight ? $nights += $shift->points : $nights; + }); + + return [ + 'count' => $count, + 'points' => $points, + 'sumWeekends' => $weekends, + 'sumNights' => $nights, + ]; + } + + public static function addShiftsSpaces($shifts) + { + $allSpaces = collect([]); + collect($shifts)->map(function (ShiftService $shift) use ($shifts, &$allSpaces) { + $spaces = $shift->isWeekend || $shift->isNight ? $shift->getShiftSpaces($shifts) : null; + if (! empty($spaces)) { + collect($spaces)->map(fn (Range $space) => $allSpaces->push(new ShiftService(0, 'space', $space->start, $space->end, 0, false, false))); + } + }); + + return $allSpaces; + } + + public static function getSoldiersShifts($soldierId, $newRange) + { + return Shift::where('soldier_id', $soldierId) + ->get() + ->filter( + function (Shift $shift) use ($newRange): bool { + $range = new Range($shift->start_date, $shift->end_date); + + return $range->isSameMonth($newRange); + } + ) + ->map(fn (Shift $shift): ShiftService => self::buildShift($shift)); + } + + public static function getConstraintBy(int $soldierId, $newRange) + { + $constraint = Constraint::where('soldier_id', $soldierId) + ->get(); + + return self::buildConstraints($constraint, $newRange); + } +} diff --git a/app/Services/ManualAssignment.php b/app/Services/ManualAssignment.php index 19a12a9..698d46a 100644 --- a/app/Services/ManualAssignment.php +++ b/app/Services/ManualAssignment.php @@ -3,15 +3,10 @@ namespace App\Services; use App\Enums\Availability; -use App\Enums\ConstraintType; -use App\Enums\Priority; -use App\Models\Constraint; use App\Models\Department; use App\Models\Shift; use App\Models\Soldier; use App\Models\User; -use App\Services\Constraint as ConstraintService; -use App\Services\Shift as ShiftService; use App\Services\Soldier as SoldierService; use Illuminate\Support\Facades\Cache; @@ -25,7 +20,7 @@ class ManualAssignment public function __construct(Shift $shift, string $soldierType) { - $this->shift = $this->buildShift($shift); + $this->shift = Helpers::buildShift($shift); $this->soldierType = $soldierType; $this->soldiers = []; } @@ -108,22 +103,13 @@ protected function getSoldiersDetails() function (User $user) { $soldier = $this->getSoldierBy($user->userable_id); $constraints = $this->getConstraints($soldier); - $soldiersShifts = $this->getSoldiersShifts($soldier); - - $soldiersShifts->push(...$this->addShiftsSpaces($soldiersShifts)); - - $capacityHold = $this->capacityHold($soldiersShifts); - - return new SoldierService( - $soldier->id, - new MaxData($soldier->capacity, $capacityHold['points']), - new MaxData($soldier->max_shifts, $capacityHold['count']), - new MaxData($soldier->max_nights, $capacityHold['sumNights']), - new MaxData($soldier->max_weekends, $capacityHold['sumWeekends']), - $soldier->qualifications, - $constraints, - $soldiersShifts - ); + $soldiersShifts = $this->getSoldiersShifts($soldier->id); + + $soldiersShifts->push(...Helpers::addShiftsSpaces($soldiersShifts)); + + $capacityHold = Helpers::capacityHold($soldiersShifts); + + return Helpers::buildSoldier($soldier, $constraints, $soldiersShifts, $capacityHold); } ); } @@ -137,22 +123,13 @@ public function amIAvailable(): bool { $me = Soldier::find(auth()->user()->userable_id); $constraints = $this->getConstraints($me); - $myShifts = $this->getSoldiersShifts($me); + $myShifts = $this->getSoldiersShifts($me->id); - $myShifts->push(...$this->addShiftsSpaces($myShifts)); + $myShifts->push(...Helpers::addShiftsSpaces($myShifts)); - $capacityHold = $this->capacityHold($myShifts); + $capacityHold = Helpers::capacityHold($myShifts); - $soldier = new SoldierService( - $me->id, - new MaxData($me->capacity, $capacityHold['points']), - new MaxData($me->max_shifts, $capacityHold['count']), - new MaxData($me->max_nights, $capacityHold['sumNights']), - new MaxData($me->max_weekends, $capacityHold['sumWeekends']), - $me->qualifications, - $constraints, - $myShifts - ); + $soldier = Helpers::buildSoldier($me, $constraints, $myShifts, $capacityHold); return $soldier->isQualified($this->shift->taskType) && $soldier->isAvailableByMaxes($this->shift) @@ -163,90 +140,12 @@ public function amIAvailable(): bool protected function getConstraints(Soldier $soldier) { - return $this->soldierType != 'reserves' ? $this->getConstraintBy($soldier->id) : collect([]); - } - - protected function getSoldiersShifts(Soldier $soldier) - { - return Shift::where('soldier_id', $soldier->id) - ->get() - ->filter( - function (Shift $shift): bool { - $range = new Range($shift->start_date, $shift->end_date); - - return $range->isSameMonth(new Range($this->shift->range->start->copy()->startOfMonth(), $this->shift->range->end->copy()->endOfMonth())); - } - ) - ->map(fn (Shift $shift): ShiftService => $this->buildShift($shift)); + return $this->soldierType != 'reserves' ? Helpers::getConstraintBy($soldier->id, new Range($this->shift->range->start->copy()->startOfMonth(), $this->shift->range->end->copy()->endOfMonth())) : collect([]); } - protected function buildShift(Shift $shift): ShiftService + protected function getSoldiersShifts($soldierId) { - return new ShiftService( - $shift->id, - $shift->task->type, - $shift->start_date, - $shift->end_date, - $shift->parallel_weight == 0 ? $shift->task->parallel_weight : $shift->parallel_weight, - $shift->task->is_night, - $shift->is_weekend != null ? $shift->is_weekend : $shift->task->is_weekend, - ); - } - - protected function addShiftsSpaces($shifts) - { - $allSpaces = collect([]); - collect($shifts)->map(function (ShiftService $shift) use ($shifts, &$allSpaces) { - $spaces = $shift->isWeekend || $shift->isNight ? $shift->getShiftSpaces($shifts) : null; - if (! empty($spaces)) { - collect($spaces)->map(fn (Range $space) => $allSpaces->push(new ShiftService(0, 'space', $space->start, $space->end, 0, false, false))); - } - }); - - return $allSpaces; - } - - protected function getConstraintBy(int $soldierId) - { - return Constraint::where('soldier_id', $soldierId) - ->get() - ->filter(function (Constraint $constraint) { - $range = new Range($constraint->start_date, $constraint->end_date); - - return $range->isSameMonth(new Range($this->shift->range->start->copy()->startOfMonth(), $this->shift->range->end->copy()->endOfMonth())); - }) - ->map( - fn (Constraint $constraint): ConstraintService => new ConstraintService( - $constraint->start_date, - $constraint->end_date, - ConstraintType::getPriority()[$constraint->constraint_type] == 1 ? Priority::HIGH : Priority::LOW - ) - ); - } - - protected function capacityHold($shifts) - { - $points = 0; - $nights = 0; - $weekends = 0; - $count = 0; - collect($shifts) - ->filter(function ($shift) { - return $shift->id != 0; - }) - ->map(function ($shift) use (&$count, &$points, &$nights, &$weekends) { - $count++; - $points += $shift->points; - $shift->isWeekend ? $weekends += $shift->points : $weekends; - $shift->isNight ? $nights += $shift->points : $nights; - }); - - return [ - 'count' => $count, - 'points' => $points, - 'sumWeekends' => $weekends, - 'sumNights' => $nights, - ]; + return Helpers::getSoldiersShifts($soldierId, new Range($this->shift->range->start->copy()->startOfMonth(), $this->shift->range->end->copy()->endOfMonth())); } protected function getAvailableSoldiers() diff --git a/app/Services/Range.php b/app/Services/Range.php index 1cc27bc..f169abb 100644 --- a/app/Services/Range.php +++ b/app/Services/Range.php @@ -66,6 +66,11 @@ public function isSameMonth(Range $other): bool return $this->isConflict($other); } + public function isPass(): bool + { + return Carbon::now()->greaterThan($this->start) || Carbon::now()->greaterThan($this->end); + } + public function isRangeInclude(DaysInWeek $dayInWeek): bool { $startDayIndex = $this->start->dayOfWeek; diff --git a/app/Services/Schedule.php b/app/Services/Schedule.php index 7a5ee65..645558a 100644 --- a/app/Services/Schedule.php +++ b/app/Services/Schedule.php @@ -60,7 +60,7 @@ public function schedule(): void protected function initShiftsData(): void { $groupedShifts = collect($this->shifts)->groupBy('taskType'); - $groupedShifts->each(callback: function ($shifts, $taskType) { + $groupedShifts->each(function ($shifts, $taskType) { $this->addShiftsDataByTask($taskType, collect($shifts)); }); } diff --git a/app/Services/Soldier.php b/app/Services/Soldier.php index 087a071..a7a5843 100644 --- a/app/Services/Soldier.php +++ b/app/Services/Soldier.php @@ -115,9 +115,4 @@ protected function addSpaces($spaces) { collect($spaces)->map(fn ($space) => $this->shifts->push(new Shift(0, 'space', $space->start, $space->end, 0, false, false))); } - - public function printMaxStatuses() - { - echo 'points: '.$this->pointsMaxData->status().', shifts: '.$this->shiftsMaxData->status().', weekends: '.$this->weekendsMaxData->status().', nights: '.$this->nightsMaxData->status(); - } } diff --git a/app/Services/Test.php b/app/Services/Test.php index d74cca6..b216971 100644 --- a/app/Services/Test.php +++ b/app/Services/Test.php @@ -20,7 +20,7 @@ public function test($month = null) $shift->end_date, ); - return $range->isSameMonth(new Range($month->startOfMonth(), $month->endOfMonth())); + return $range->isSameMonth(new Range($month->copy()->startOfMonth(), $month->copy()->endOfMonth())); }) ->groupBy('soldier_id'); @@ -49,12 +49,12 @@ protected function howMuchNights($shifts) protected function howMuchWeekends($shifts) { - return $shifts->filter(fn ($shift) => $shift->is_weekend != null ? $shift->is_weekend : $shift->task->is_weekend)->count(); + return $shifts->filter(fn ($shift) => $shift->is_weekend !== null ? $shift->is_weekend : $shift->task->is_weekend)->count(); } protected function howMuchPoints($shifts) { - return collect($shifts)->sum(fn ($shift) => $shift->parallel_weight != null ? $shift->parallel_weight : $shift->task->parallel_weight); + return collect($shifts)->sum(fn ($shift) => $shift->parallel_weight !== null ? $shift->parallel_weight : $shift->task->parallel_weight); } protected function howMuchLowConstraintsRejected($constraints, $shifts): int diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index de81f64..1155777 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -9,7 +9,6 @@ use App\Models\Soldier; use App\Models\Task; use App\Models\User; -use App\Services\RecurringEvents; use Carbon\Carbon; use Carbon\CarbonPeriod; use Illuminate\Database\Seeder; @@ -332,7 +331,7 @@ public function run(): void ]), ]); Task::factory()->create([ - 'name' => 'hatasa א-ה בשבוע לילה', + 'name' => 'hatasa א-ה לילה', 'start_hour' => '02:00:00', 'duration' => 6, 'parallel_weight' => 1, @@ -630,9 +629,6 @@ public function run(): void 'days_in_week' => [DaysInWeek::SUNDAY], ]), ]); - - $recurringEvents = new RecurringEvents; - $recurringEvents->recurringTask(); } protected function createConstraints(int $userId) diff --git a/lang/en.json b/lang/en.json index d2a8448..4213935 100644 --- a/lang/en.json +++ b/lang/en.json @@ -1,4 +1,22 @@ { + "Commander notification of approving exchange shift request for the requesting soldier": "Hello :requestingSoldierName!
Your request to exchange your :shiftAName shift
From :shiftAStart to :shiftAEnd
With :approvingSoldierName soldier for :shiftBName shift
From :shiftBStart to :shiftBEnd
Has been approved and the exchange has been made
Have a good day!
:commanderName", + "Commander notification of approving exchange shift request for the approving soldier": "Hello :approvingSoldierName!
:requestingSoldierName 's request to exchange your :shiftBName shift
From :shiftBStart to :shiftBEnd
With his :shiftAName shift
From :shiftAStart to :shiftAEnd
Has been approved and the exchange has been made
Have a good day!
:commanderName", + "Request for shift exchange from commander": "Hello :commanderName!
Do you authorize :requestingSoldierName to exchange his :shiftAName shift
From :shiftAStart to :shiftAEnd
With :approvingSoldierName in favor of :shiftBName shift
From :shiftBStart to :shiftBEnd?", + "Commander notification of rejection exchange shift request for the requesting soldier": "Hello :requestingSoldierName!
Your request to exchange your :shiftAName shift
From :shiftAStart to :shiftAEnd
With :rejectingSoldierName soldier for :shiftBName shift
From :shiftBStart to :shiftBEnd
Has been rejected.
Have a good day!
:commanderName", + "Commander notification of rejection exchange shift request for the rejection soldier": "Hello :rejectingSoldierName!
The :requestingSoldierName 's request to exchange your :shiftBName shift
From :shiftBStart to :shiftBEnd
With his :shiftAName shift
From :shiftAStart to :shiftAEnd
Has been rejected.
Have a good day!
:commanderName", + "Soldier notification of rejection exchange shift request":"Hello :requestingSoldierName!
Your request to exchange my :shiftBName shift
From :shiftBStart to :shiftBEnd
With :shiftAName shift
From :shiftAStart to :shiftAEnd
Has been rejected.
Have a good day!
:rejectingSoldierName", + "Commander notification of approving change shift request for the requesting soldier":"Hello :requestingSoldierName!
Your request to change your :shiftName shift
From :shiftStart to :shiftEnd
Has been approved and the change has been made.
Have a good day!
:commanderName", + "Commander notification of approving change shift request for the approving soldier": "Hello :approvingSoldierName!
:requestingSoldierName 's request to change his :shiftName shift
From :shiftStart to :shiftEnd
With you, has been approved and the change has been made.
Have a good day!
:commanderName", + "Request for shift change from commander":"Hello :commanderName!
Do you authorize :requestingSoldierName to change his :shiftName shift
From :shiftStart to :shiftEnd
With :approvingSoldierName ?", + "Commander notification of rejection change shift request for the requesting soldier": "Hello :requestingSoldierName!
Your request to change your :shiftName shift
From :shiftStart to :shiftEnd
With :approvingSoldierName
Has been rejected.
Have a good day!
:commanderName", + "Commander notification of rejection change shift request for the approving soldier":"Hello :approvingSoldierName!
The :requestingSoldierName 's request to change his :shiftName shift
From :shiftStart to :shiftEnd
With you has been rejected.
Have a good day!
:commanderName", + "Soldier notification of rejection change shift request":"Hello :requestingSoldierName!
Your request to change your :shiftName shift
From :shiftStart to :shiftEnd
With me, has been rejected.
Have a good day!
:rejectingSoldierName", + "Commander notification of exchanging shifts for first soldier":"Hello :soldierAName!
Your :shiftAName shift
From :shiftAStart to :shiftAEnd
Replaced with :soldierBName
for :shiftBName shift
From :shiftBStart to :shiftBEnd
Have a good day!
:commander", + "Commander notification of exchanging shifts for second soldier":"Hello :soldierBName!
Your :shiftBName shift
From :shiftBStart to :shiftBEnd
Replaced with :soldierAName
for :shiftAName shift
From :shiftAStart to :shiftAEnd
Have a good day!
:commander", + "Request for shift exchange from soldier":"Hello :soldierAName!
Would you like to exchange your
:shiftAName shift
From :shiftAStart to :shiftAEnd
With my :shiftBName shift
From :shiftBStart to :shiftBEnd ?
:soldierBName", + "Commander notification of changing shifts for first soldier":"Hello :soldierName!:shiftName shift
From :shiftStart to :shiftEnd
Has been assigned to you.
Have a good day!
:commander", + "Commander notification of changing shifts for second soldier":"Hello :soldierName!
Your :shiftName shift
From :shiftStart to :shiftEnd
Has been removed from your assignment.
Have a good day!
:commander", + "Request for shift change from soldier":"Hello :soldierName!
Would you like to get my
:shiftName shift
From :shiftStart to :shiftEnd ?
:requestingSoldierName", "File name":":month month's shifts for :name", "Holiday shift notification":"hello :user!
the shift weight must be updated :task which takes place on: :start_date ", "Assigned to shift today":":today
Hello :user!!
Your :task shift will start at :startShift" diff --git a/lang/he.json b/lang/he.json index da85d3f..1712ba5 100644 --- a/lang/he.json +++ b/lang/he.json @@ -6,13 +6,36 @@ "Additional settings":"הגדרות נוספות", "Alert": "כונן", "All": "כולם", + "All soldiers":"כל החיילים", "And": "ו", "Assign soldier": "הקצה חייל", + "Approve exchange shift request":"אישור בקשת החלפת משמרת", + "Commander notification of approving exchange shift request for the requesting soldier": "שלום :requestingSoldierName!
בקשתך להחלפת משמרת :shiftAName
מ :shiftAStart עד :shiftAEnd
עם החייל :approvingSoldierName בעבור משמרת :shiftBName
מ :shiftBStart עד :shiftBEnd
אושרה וההחלפה בוצעה.
יום מוצלח!
:commanderName", + "Commander notification of approving exchange shift request for the approving soldier": "שלום :approvingSoldierName!
בקשת :requestingSoldierName להחליף את המשמרת :shiftBName שלך
מ :shiftBStart עד :shiftBEnd
עם המשמרת :shiftAName שלו
מ :shiftAStart עד :shiftAEnd
אושרה וההחלפה בוצעה.
יום מוצלח!
:commanderName", + "Request for shift exchange":"בקשה להחלפת משמרת", + "Request for shift exchange from commander": "שלום :commanderName!
האם אתה מאשר לחייל :requestingSoldierName להחליף את המשמרת :shiftAName שלו
מ :shiftAStart עד :shiftAEnd
עם החייל :approvingSoldierName בעבור המשמרת :shiftBName
מ :shiftBStart עד :shiftBEnd?", + "Commander notification of rejection exchange shift request for the requesting soldier": "שלום :requestingSoldierName!
בקשתך להחלפת משמרת :shiftAName
מ :shiftAStart עד :shiftAEnd
עם החייל :rejectingSoldierName בעבור משמרת :shiftBName
מ :shiftBStart עד :shiftBEnd
נדחתה.
יום נעים!
:commanderName", + "Commander notification of rejection exchange shift request for the rejection soldier":"שלום :rejectingSoldierName!
בקשת החייל :requestingSoldierName להחליף את המשמרת :shiftBName שלך
מ :shiftBStart עד :shiftBEnd
עם המשמרת :shiftAName שלו
מ :shiftAStart עד :shiftAEnd
נדחתה.
יום טוב!
:commanderName", + "Soldier notification of rejection exchange shift request":"שלום :requestingSoldierName!
בקשתך להחלפת משמרת :shiftBName
מ :shiftBStart עד :shiftBEnd
עם המשמרת :shiftAName שלי
מ :shiftAStart עד :shiftAEnd
נדחתה.
המשך יום קסום!
:rejectingSoldierName", + "Commander notification of approving change shift request for the requesting soldier":"שלום :requestingSoldierName!
בקשתך להחלפת המשמרת :shiftName שלך
מ :shiftStart עד :shiftEnd
אושרה והשינוי בוצע.
יום טוב!
:commanderName", + "Commander notification of approving change shift request for the approving soldier": "שלום :approvingSoldierName!
בקשת החייל:requestingSoldierName להחליף את המשמרת :shiftName שלו
מ :shiftStart עד :shiftEnd
איתך, אושרה והשינוי בוצע.
המשך יום טוב!
:commanderName", + "Request for shift change":"בקשה לשינוי משמרת", + "Approve change shift request":"אישור בקשת שינוי משמרת", + "Request for shift change from commander":"שלום :commanderName!
האם אתה מאשר לחייל:requestingSoldierName להחליף את המשמרת :shiftName שלו
מ :shiftStart עד :shiftEnd
עם החייל :approvingSoldierName ?", + "Commander notification of rejection change shift request for the requesting soldier": "שלום :requestingSoldierName!
בקשתך לשינוי המשמרת :shiftName שלך
מ :shiftStart עד :shiftEnd
עם :approvingSoldierName
נדחתה.
יום טוב!
:commanderName", + "Commander notification of rejection change shift request for the approving soldier":"שלום :approvingSoldierName!
בקשת החייל :requestingSoldierName לשינוי המשמרת :shiftName שלו
מ :shiftStart עד :shiftEnd
איתך - נדחתה.
המשך יום טוב!
:commanderName", + "Soldier notification of rejection change shift request":"שלום :requestingSoldierName!
בקשתך לשינוי המשמרת :shiftName שלך
מ :shiftStart עד :shiftEnd
איתי, נדחתה.
המשך יום טוב!
:rejectingSoldierName", + "Commander notification of exchanging shifts for first soldier":"שלום :soldierAName!
המשמרת :shiftAName שלך
מ :shiftAStart עד :shiftAEnd
הוחלפה עם :soldierBName
עבור המשמרת :shiftBName
מ :shiftBStart עד :shiftBEnd
יום קסום!
:commander", + "Commander notification of exchanging shifts for second soldier":"שלום :soldierBName!
המשמרת :shiftBName שלך
מ :shiftBStart עד :shiftBEnd
הוחלפה עם :soldierAName
עבור המשמרת :shiftAName
מ :shiftAStart עד :shiftAEnd
יום קסום!
:commander", + "Request for shift exchange from soldier":"שלום :soldierAName!
האם תרצה להחליף את המשמרת
:shiftAName שלך
מ :shiftAStart עד :shiftAEnd
עם המשמרת:shiftBName שלי
מ :shiftBStart עד :shiftBEnd ?
:soldierBName", + "Commander notification of changing shifts for first soldier":"שלום :soldierName!
המשמרת :shiftName
מ :shiftStart עד :shiftEnd
הוקצתה לך.
המשך יום טוב!
:commander", + "Commander notification of changing shifts for second soldier":"שלום :soldierName!
המשמרת :shiftName שלך
מ :shiftStart עד :shiftEnd
הוסרה מהקצאתך.
המשך יום טוב!
:commander", + "Request for shift change from soldier":"שלום :soldierName!
האם תרצה לבצע את המשמרת
:shiftName שלי
מ :shiftStart עד :shiftEnd ?
:requestingSoldierName", "Assigned to shift today":":today
שלום :user!!
המשמרת :task שלך, תחל בשעה :startShift", "Between":"בין", "Between from":"מ", "Between to":"עד", - "Cancel":"ביטול", + "Cancel":"בטל", "Capacity": "מקסימום נקודות", "Capacity hold": "הנקודות שבוצעו", "Changing the shifts is your sole responsibility! (pay attention to conflicts between shifts).":"החלפת המשמרות באחריותך בלבד! (שים לב להתנגשויות בין משמרות).", @@ -28,6 +51,11 @@ "Create":"צור", "Create shifts":"צור משמרות", "Creating shifts":"יצירת משמרות", + "Close":"סגור", + "Change":"שנה", + "Change shift":"שינוי משמרת", + "Change assignment":"שנה שיבוץ", + "Request for change assignment":"בקשה לשינוי הקצאת משמרת", "Daily": "יומי", "Daily range": "טווח יומי", "Date": "תאריך", @@ -40,12 +68,19 @@ "Department commander": "מפקד מדור", "Department name": "שם מדור", "Details":"פרטים", + "Deny":"דחה", + "Deny exchange shift request":"דחית בקשה להחלפת משמרת", + "Deny change shift request":"דחיית בקשה לשינוי משמרת", "Download to excel":"הורדה לאקסל", "Duration": "משך", "Edit":"ערוך", "End date": "תאריך סיום", "Enlist date": "תאריך גיוס", "Equal":"שווה", + "Exchange":"החלף", + "Exchange with":"החלף עם", + "Exchange shift":"החלפת משמרת", + "Exchange assignment":"החלף שיבוץ", "Exemption": "פטור", "Female": "נקבה", "File name":"משמרות של חודש :month עבור :name", @@ -78,6 +113,7 @@ "Low priority not task":"עדיפות נמוכה למשימה", "Low priority not weekend":"עדיפות נמוכה לסופ''ש", "Male": "זכר", + "Matching soldiers":"החיילים המתאימים", "Manager": "מנהל", "Max nights": "מקסימום לילות", "Max shifts": "מקסימום משמרות", @@ -110,7 +146,8 @@ "Not Thursday evening":"חמישי ערב", "Not weekend":"סופ''ש", "One time": "חד פעמי", - "Pay attention to update the shift details according to the changes you made .": " שים לב לעדכן את פרטי המשמרת בהתאם לשינויים שביצעת .", + "Time":"זמן", + "Pay attention to update the shift details according to the changes you made .": " שים לב לעדכן את פרטי המשמרת בהתאם לשינויים שביצעת.", "Parallel weight": "משקל", "Personal Information": "נתונים אישיים", "Personal number": "מספר אישי", @@ -123,6 +160,7 @@ "Reservist": "מילואימניק", "Reset assignment":"אפס שיבוץ", "Reset filters":"אפס סננים", + "Request":"בקש", "Role":"תפקיד", "Run Algorithm":"הרץ אלגוריתם", "Save": "שמור", @@ -161,6 +199,7 @@ "Thursday":"חמישי", "Tuesday":"שלישי", "Type": "סוג", + "To":"עד", "Unassigned shifts":"משמרות שלא שובצו", "Until": "עד תאריך", "Update parallel weight of holiday shift":"עדכון משקל של משמרת חג", diff --git a/public/css/saade/filament-fullcalendar/filament-fullcalendar-styles.css b/public/css/saade/filament-fullcalendar/filament-fullcalendar-styles.css index fb85098..a4cad56 100644 --- a/public/css/saade/filament-fullcalendar/filament-fullcalendar-styles.css +++ b/public/css/saade/filament-fullcalendar/filament-fullcalendar-styles.css @@ -1 +1 @@ -.resize{resize:both}.filament-fullcalendar{--fc-small-font-size:0.85em;--fc-page-bg-color:#d0d0d04d;--fc-neutral-bg-color:rgba(var(--gray-50),var(--tw-bg-opacity));--fc-neutral-text-color:grey;--fc-border-color:rgba(var(--gray-200));--fc-button-text-color:#fff;--fc-button-bg-color:rgba(var(--primary-600));--fc-button-border-color:rgba(var(--primary-600));--fc-button-hover-bg-color:rgba(var(--primary-500));--fc-button-hover-border-color:rgba(var(--primary-500));--fc-button-active-bg-color:rgba(var(--primary-500));--fc-button-active-border-color:rgba(var(--primary-500));--fc-event-bg-color:rgba(var(--primary-600));--fc-event-border-color:rgba(var(--primary-600));--fc-event-text-color:#fff;--fc-event-selected-overlay-color:#00000040;--fc-more-link-bg-color:#d0d0d0;--fc-more-link-text-color:inherit;--fc-event-resizer-thickness:8px;--fc-event-resizer-dot-total-width:8px;--fc-event-resizer-dot-border-width:1px;--fc-non-business-color:#d7d7d74d;--fc-bg-event-color:#8fdf82;--fc-bg-event-opacity:0.3;--fc-highlight-color:rgba(var(--primary-500),0.1);--fc-today-bg-color:rgba(var(--primary-500),0.2);--fc-now-indicator-color:red;--fc-list-event-hover-bg-color:rgba(var(--gray-50),var(--tw-bg-opacity))}html.dark .filament-fullcalendar{--fc-neutral-bg-color:rgba(var(--gray-800),.8);--fc-border-color:rgba(var(--gray-700),.5);--fc-button-bg-color:rgba(var(--primary-500));--fc-button-border-color:rgba(var(--primary-600));--fc-button-hover-bg-color:rgba(var(--primary-400));--fc-button-hover-border-color:rgba(var(--primary-500));--fc-button-active-bg-color:rgba(var(--primary-400));--fc-button-active-border-color:rgba(var(--primary-500));--fc-event-bg-color:rgba(var(--primary-500));--fc-event-border-color:rgba(var(--primary-600));--fc-list-event-hover-bg-color:rgba(var(--gray-800),.8)}.filament-fullcalendar .fc-toolbar-chunk>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.filament-fullcalendar .fc-toolbar-title{font-size:1.125rem!important;line-height:1.25rem}@media (min-width:768px){.filament-fullcalendar .fc-toolbar-title{font-size:1.875rem!important;line-height:2.25rem!important}}.filament-fullcalendar.fc .fc-button{min-height:2.25rem;border-radius:.5rem;padding:.25rem 6px;font-size:.875rem;line-height:1.25rem;font-weight:500;--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);outline:2px solid #0000;outline-offset:2px;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}@media (min-width:768px){.filament-fullcalendar.fc .fc-button{padding-left:1rem;padding-right:1rem}}.filament-fullcalendar.fc .fc-button-primary:disabled{opacity:.7}.filament-fullcalendar.fc .fc-button-primary:not(:disabled).fc-button-active,.filament-fullcalendar.fc .fc-button-primary:not(:disabled):active{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.filament-fullcalendar .fc-list,.filament-fullcalendar .fc-view table,.filament-fullcalendar .fc-view:not(.fc-list) table th{border-top-left-radius:.75rem;border-top-right-radius:.75rem}.filament-fullcalendar .fc-list{overflow:hidden}.filament-fullcalendar .fc-list .fc-list-event-title a{cursor:pointer}.filament-fullcalendar .fc-list-sticky .fc-list-day th{background-color:inherit} \ No newline at end of file +.resize{resize:both}.filament-fullcalendar{--fc-small-font-size:0.85em;--fc-page-bg-color:#d0d0d04d;--fc-neutral-bg-color:rgba(var(--gray-50),var(--tw-bg-opacity));--fc-neutral-text-color:grey;--fc-border-color:rgba(var(--gray-200));--fc-button-text-color:#fff;--fc-button-bg-color:rgba(var(--primary-600));--fc-button-border-color:rgba(var(--primary-600));--fc-button-hover-bg-color:rgba(var(--primary-500));--fc-button-hover-border-color:rgba(var(--primary-500));--fc-button-active-bg-color:rgba(var(--primary-500));--fc-button-active-border-color:rgba(var(--primary-500));--fc-event-bg-color:rgba(var(--primary-600));--fc-event-border-color:rgba(var(--primary-600));--fc-event-text-color:#fff;--fc-event-selected-overlay-color:#00000040;--fc-more-link-bg-color:#d0d0d0;--fc-more-link-text-color:inherit;--fc-event-resizer-thickness:8px;--fc-event-resizer-dot-total-width:8px;--fc-event-resizer-dot-border-width:1px;--fc-non-business-color:#d7d7d74d;--fc-bg-event-color:#8fdf82;--fc-bg-event-opacity:0.3;--fc-highlight-color:rgba(var(--primary-500),0.1);--fc-today-bg-color:rgba(var(--primary-500),0.2);--fc-now-indicator-color:red;--fc-list-event-hover-bg-color:rgba(var(--gray-50),var(--tw-bg-opacity))}html.dark .filament-fullcalendar{--fc-neutral-bg-color:rgba(var(--gray-800),.8);--fc-border-color:rgba(var(--gray-700),.5);--fc-button-bg-color:rgba(var(--primary-500));--fc-button-border-color:rgba(var(--primary-600));--fc-button-hover-bg-color:rgba(var(--primary-400));--fc-button-hover-border-color:rgba(var(--primary-500));--fc-button-active-bg-color:rgba(var(--primary-400));--fc-button-active-border-color:rgba(var(--primary-500));--fc-event-bg-color:rgba(var(--primary-500));--fc-event-border-color:rgba(var(--primary-600));--fc-list-event-hover-bg-color:rgba(var(--gray-800),.8)}.filament-fullcalendar .fc-toolbar-chunk>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.filament-fullcalendar .fc-toolbar-title{font-size:1.125rem!important;line-height:1.25rem}@media (min-width:768px){.filament-fullcalendar .fc-toolbar-title{font-size:1.875rem!important;line-height:2.25rem!important}}.filament-fullcalendar.fc .fc-button{min-height:2.25rem;border-radius:.5rem;padding:.25rem 6px;font-size:.875rem;line-height:1.25rem;font-weight:500;--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);outline:2px solid #0000;outline-offset:2px;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}@media (min-width:768px){.filament-fullcalendar.fc .fc-button{padding-left:1rem;padding-right:1rem}}.filament-fullcalendar.fc .fc-button-primary:disabled{opacity:.7}.filament-fullcalendar.fc .fc-button-primary:not(:disabled).fc-button-active,.filament-fullcalendar.fc .fc-button-primary:not(:disabled):active{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.filament-fullcalendar .fc-list,.filament-fullcalendar .fc-view table,.filament-fullcalendar .fc-view:not(.fc-list) table th{border-top-left-radius:.75rem;border-top-right-radius:.75rem}.filament-fullcalendar .fc-list{overflow:hidden}.filament-fullcalendar .fc-list .fc-list-event-title a{cursor:pointer}.filament-fullcalendar .fc-list-sticky .fc-list-day th{background-color:inherit} diff --git a/public/css/saade/filament-fullcalendar/override-filament-fullcalendar.css b/public/css/saade/filament-fullcalendar/override-filament-fullcalendar.css index ca8da66..bc7899d 100644 --- a/public/css/saade/filament-fullcalendar/override-filament-fullcalendar.css +++ b/public/css/saade/filament-fullcalendar/override-filament-fullcalendar.css @@ -30,4 +30,4 @@ } .fc-day-sat{ background-color: #f5f2f2; -} \ No newline at end of file +} diff --git a/tests/Unit/ChangeAssignmentServiceTest.php b/tests/Unit/ChangeAssignmentServiceTest.php new file mode 100644 index 0000000..7b17db2 --- /dev/null +++ b/tests/Unit/ChangeAssignmentServiceTest.php @@ -0,0 +1,200 @@ +create([ + 'soldier_id' => Soldier::factory()->create()->id, + 'task_id' => Task::factory()->create([ + 'type' => 'clean', + 'is_night' => false, + ])->id, + 'is_weekend' => false, + 'start_date' => now(), + 'end_date' => now()->addHour(), + ]); + $soldier1 = Soldier::factory()->create([ + 'qualifications' => ['clean', 'jump'], + 'is_reservist' => false, + ]); + $soldier2 = Soldier::factory()->create([ + 'qualifications' => ['run'], + 'is_reservist' => false, + ]); + $soldier3 = Soldier::factory()->create([ + 'qualifications' => ['clean', 'run'], + 'is_reservist' => false, + ]); + $soldier4 = Soldier::factory()->create([ + 'qualifications' => ['jump'], + 'is_reservist' => false, + ]); + $soldier5 = Soldier::factory()->create([ + 'qualifications' => ['clean'], + 'is_reservist' => false, + ]); + $soldier6 = Soldier::factory()->create([ + 'qualifications' => ['clean'], + 'is_reservist' => false, + ]); + for ($i = 2; $i <= 7; $i++) { + User::factory()->create(['userable_id' => Soldier::find($i)->id]); + } + Shift::factory()->create([ + 'soldier_id' => $soldier5->id, + 'task_id' => Task::factory()->create([ + 'type' => 'clean', + ])->id, + 'start_date' => now()->isStartOfMonth() ? now() : now()->subHours(2), + 'end_date' => now()->isLastOfMonth() ? now()->addHour() : now()->addHours(2), + ]); + Constraint::factory()->create([ + 'soldier_id' => $soldier6->id, + 'constraint_type' => ConstraintType::NOT_TASK->value, + 'start_date' => now()->isStartOfMonth() ? now()->subDay() : now()->subHour(), + 'end_date' => now()->isLastOfMonth() ? now()->addDay() : now()->addHours(4), + ]); + + $result = [ + $soldier1->id => Soldier::find($soldier1->id)->user->displayName, + $soldier3->id => Soldier::find($soldier3->id)->user->displayName, + ]; + $changeAssignment = new ChangeAssignment($shiftForChange); + + expect($changeAssignment->getMatchingSoldiers())->toHaveCount(2); + expect($changeAssignment->getMatchingSoldiers())->toEqual($result); +}); + +it('should return the matching shifts for exchanging', function () { + $shiftForExchange = Shift::factory()->create([ + 'soldier_id' => User::factory()->create([ + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['clean', 'jump', 'sing'], + 'is_reservist' => false, + ])->id, + ])->userable_id, + 'task_id' => Task::factory()->create([ + 'type' => 'clean', + 'is_night' => false, + ])->id, + 'is_weekend' => false, + 'start_date' => now(), + 'end_date' => now()->addHour(), + ]); + $shift1 = Shift::factory()->create([ + 'soldier_id' => User::factory()->create([ + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['clean', 'jump'], + 'is_reservist' => false, + ])->id, + ])->userable_id, + 'task_id' => Task::factory()->create([ + 'type' => 'jump', + ])->id, + 'start_date' => now()->isLastOfMonth() ? now()->subDays(8) : now()->addHours(5), + 'end_date' => now()->isLastOfMonth() ? now()->subDays(7) : now()->addHours(6), + ]); + $shift2 = Shift::factory()->create([ + 'soldier_id' => User::factory()->create([ + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['run'], + 'is_reservist' => false, + ])->id, + ])->userable_id, + 'task_id' => Task::factory()->create([ + 'type' => 'run', + ])->id, + 'start_date' => now()->isLastOfMonth() ? now()->subDays(8) : now()->addHours(5), + 'end_date' => now()->isLastOfMonth() ? now()->subDays(7) : now()->addHours(6), + ]); + $shift3 = Shift::factory()->create([ + 'soldier_id' => User::factory()->create([ + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['clean', 'run'], + 'is_reservist' => false, + ])->id, + ])->userable_id, + 'task_id' => Task::factory()->create([ + 'type' => 'run', + ])->id, + 'start_date' => now()->isLastOfMonth() ? now()->subDays(8) : now()->addHours(5), + 'end_date' => now()->isLastOfMonth() ? now()->subDays(7) : now()->addHours(6), + ]); + $shift4 = Shift::factory()->create([ + 'soldier_id' => User::factory()->create([ + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['jump', 'clean'], + 'is_reservist' => false, + ])->id, + ])->userable_id, + 'task_id' => Task::factory()->create([ + 'type' => 'jump', + ])->id, + 'start_date' => now()->isLastOfMonth() ? now()->subDays(8) : now()->addHours(5), + 'end_date' => now()->isLastOfMonth() ? now()->subDays(7) : now()->addHours(6), + ]); + $shift5 = Shift::factory()->create([ + 'soldier_id' => User::factory()->create([ + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['clean'], + 'is_reservist' => false, + ])->id, + ])->userable_id, + 'task_id' => Task::factory()->create([ + 'type' => 'clean', + ])->id, + 'start_date' => now()->isStartOfMonth() ? now() : now()->subHours(2), + 'end_date' => now()->isLastOfMonth() ? now()->addHour() : now()->addHours(2), + ]); + $shift6 = Shift::factory()->create([ + 'soldier_id' => User::factory()->create([ + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['clean'], + 'is_reservist' => false, + ])->id, + ])->userable_id, + 'task_id' => Task::factory()->create([ + 'type' => 'clean', + ])->id, + 'start_date' => now()->isLastOfMonth() ? now()->subDays(8) : now()->addHours(5), + 'end_date' => now()->isLastOfMonth() ? now()->subDays(7) : now()->addHours(6), + ]); + Constraint::factory()->create([ + 'soldier_id' => $shift6->soldier_id, + 'constraint_type' => ConstraintType::NOT_TASK->value, + 'start_date' => now()->subHour(), + 'end_date' => now()->addHours(2), + ]); + $expectedShifts = collect([$shift1->id, $shift4->id]); + $changeAssignment = new ChangeAssignment($shiftForExchange); + $result = $changeAssignment->getMatchingShifts(); + expect($result->count())->toBe(2); + $shiftsIds = collect([]); + $result->map(function ($shift) use (&$shiftsIds) { + $shiftsIds->push($shift->pluck('id')->first()); + }); + expect($expectedShifts)->toEqual($shiftsIds); +}); + +it('should exchange shifts', function () { + $soldier1 = Soldier::factory()->create(); + $soldier2 = Soldier::factory()->create(); + $shift1 = Shift::factory()->create(['soldier_id' => $soldier1->id]); + $shift2 = Shift::factory()->create(['soldier_id' => $soldier2->id]); + $changeAssignment = new ChangeAssignment($shift1); + $changeAssignment->exchange($shift2); + $this->assertDatabaseHas('shifts', [ + 'id' => $shift1->id, + 'soldier_id' => $soldier2->id, + ]); + $this->assertDatabaseHas('shifts', [ + 'id' => $shift2->id, + 'soldier_id' => $soldier1->id, + ]); +}); diff --git a/tests/Unit/HelpersServiceTest.php b/tests/Unit/HelpersServiceTest.php new file mode 100644 index 0000000..14b0a69 --- /dev/null +++ b/tests/Unit/HelpersServiceTest.php @@ -0,0 +1,98 @@ +create(); + $shiftService = new ShiftService( + $shift->id, + $shift->task->type, + $shift->start_date, + $shift->end_date, + $shift->parallel_weight, + $shift->task->is_night, + $shift->is_weekend, + ); + expect(Helpers::buildShift($shift))->toBeInstanceOf(App\Services\Shift::class); + expect(Helpers::buildShift($shift))->toEqual($shiftService); +}); + +it('should return object of soldier service type', function () { + $soldier = Soldier::factory()->create(['qualifications' => []]); + $soldierService = new SoldierService( + $soldier->id, + new MaxData($soldier->capacity, 0), + new MaxData($soldier->max_shifts, 0), + new MaxData($soldier->max_nights, 0), + new MaxData($soldier->max_weekends, 0), + $soldier->qualifications, + [], + [] + ); + expect(Helpers::buildSoldier($soldier, [], [], []))->toBeInstanceOf(App\Services\Soldier::class); + expect(Helpers::buildSoldier($soldier, [], [], []))->toEqual($soldierService); +}); + +it('should return array of constraint service type of constraints that have not expired', function () { + $pastConstraints = Constraint::factory()->count(4)->create([ + 'soldier_id' => Soldier::factory()->create()->id, + 'constraint_type' => ConstraintType::NOT_TASK->value, + 'start_date' => now()->subMonth()->subDays(2), + 'end_date' => now()->subMonth()->subDay(), + ]); + $futureConstraints = Constraint::factory()->count(3)->create([ + 'soldier_id' => Soldier::factory()->create()->id, + 'constraint_type' => ConstraintType::NOT_TASK->value, + 'start_date' => now()->addDay(), + 'end_date' => now()->addDays(2), + ]); + $constraints = collect([...$pastConstraints, ...$futureConstraints]); + $range = new Range(now()->startOfMonth(), now()->endOfMonth()); + expect(Helpers::buildConstraints($constraints, $range))->toHaveCount(3); +}); + +it('should return the capacity hold of soldiers paramaters', function () { + $shifts = Shift::factory()->count(random_int(0, 10))->create(); + $shifts = $shifts->map(fn ($shift) => Helpers::buildShift($shift)); + $result = [ + 'count' => $shifts->count(), + 'points' => $shifts->sum('points'), + 'sumWeekends' => $shifts->filter(fn ($shift) => $shift->isWeekend)->sum('points'), + 'sumNights' => $shifts->filter(fn ($shift) => $shift->isNight)->sum('points'), + ]; + expect(Helpers::capacityHold($shifts))->toEqual($result); +}); + +it('should return shifts spaces', function () { + $shifts = Shift::factory()->count(3)->create(['is_weekend' => false, 'task_id' => Task::factory()->create(['is_night' => true])->id]); + $shifts = $shifts->map(fn ($shift) => Helpers::buildShift($shift)); + expect(Helpers::addShiftsSpaces($shifts))->toHaveCount(6); +}); + +it('should return soldiers shifts', function () { + $soldier = Soldier::factory()->create(); + $shifts = Shift::factory()->count(3)->create(['soldier_id' => $soldier->id, 'start_date' => now()->addDay()->startOfSecond(), 'end_date' => now()->addDays(2)->startOfSecond()]); + $result = $shifts->map(fn ($shift) => Helpers::buildShift($shift)); + expect(Helpers::getSoldiersShifts($soldier->id, new Range(now()->startOfMonth(), now()->endOfMonth())))->toEqual($result); +}); + +it('should return soldiers constraints', function () { + $soldier = Soldier::factory()->create(); + Constraint::factory()->count(4)->create([ + 'soldier_id' => $soldier->id, + 'constraint_type' => ConstraintType::NOT_TASK->value, + 'start_date' => now()->subDays(2), + 'end_date' => now()->subDay(), + ]); + $range = new Range(now()->startOfMonth(), now()->endOfMonth()); + expect(Helpers::getConstraintBy($soldier->id, $range))->toHaveCount(4); +}); diff --git a/tests/Unit/RangeServiceTest.php b/tests/Unit/RangeServiceTest.php index 6a8b370..24a32ff 100644 --- a/tests/Unit/RangeServiceTest.php +++ b/tests/Unit/RangeServiceTest.php @@ -14,6 +14,26 @@ expect($range->isConflict(new Range(Carbon::create(2024, 5, 14, 5), Carbon::create(2024, 5, 14, 16))))->toBeFalse(); }); +it('should return true if the dates are in the same month', function () { + $range = new Range(Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 18)); + expect($range->isSameMonth(new Range(Carbon::create(2024, 5, 14, 5), Carbon::create(2024, 5, 14, 18))))->toBeTrue(); +}); + +it('should return false if the dates are not in the same month', function () { + $range = new Range(Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 18)); + expect($range->isSameMonth(new Range(Carbon::create(2024, 4, 14, 5), Carbon::create(2024, 4, 14, 18))))->toBeFalse(); +}); + +it('should return true if the date has passed', function () { + $range = new Range(Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 18)); + expect($range->isPass())->toBeTrue(); +}); + +it('should return false if the date has passed', function () { + $range = new Range(now()->addDay(), now()->addDays(2)); + expect($range->isPass())->toBeFalse(); +}); + it('should return true if range include the provided day', function () { $range = new Range(Carbon::create(2024, 11, 3), Carbon::create(2024, 11, 11)); expect($range->isRangeInclude(DaysInWeek::THURSDAY))->toBeTrue(); From 5d6a21c22691ec3f746f19bee3456b7d4a8270e7 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 26 Dec 2024 11:41:33 +0200 Subject: [PATCH 050/259] version2 --- .env.example | 4 ++-- .github/workflows/php-build-and-deploy.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.env.example b/.env.example index a10cf7c..44de3e4 100644 --- a/.env.example +++ b/.env.example @@ -1,9 +1,9 @@ -APP_NAME=Laravel +APP_NAME=NewSpace APP_ENV=local APP_KEY= APP_DEBUG=true APP_TIMEZONE=UTC -APP_URL=http://localhost +APP_URL=https://wa-newspace3.azurewebsites.net/ APP_TIMEZONE=Asia/Jerusalem APP_LOCALE=en diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index a97d3ce..4919748 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version1_7 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version1_8 flavor: | latest=false tags: | From 9c7d592614369aff4ab42946f4e09e1814c80baf Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 26 Dec 2024 14:36:48 +0200 Subject: [PATCH 051/259] version2 --- .github/workflows/php-build-and-deploy.yml | 2 +- entrypoint.sh | 13 +++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 4919748..271c679 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version1_8 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version1_9 flavor: | latest=false tags: | diff --git a/entrypoint.sh b/entrypoint.sh index 5e1e3e4..22b82fc 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -76,12 +76,13 @@ _run() { ;; worker) echo "⏳ Running the queue..." - exec "${ARTISAN}" queue:work -vv \ - --no-interaction \ - --tries="${CONTAINER_WORKER_TRIES}" \ - --sleep="${CONTAINER_WORKER_SLEEP}" \ - --timeout="${CONTAINER_WORKER_TIMEOUT}" \ - --delay="${CONTAINER_WORKER_DELAY}" + exec "${ARTISAN}" queue:work + # -vv \ + # --no-interaction \ + # --tries="${CONTAINER_WORKER_TRIES}" \ + # --sleep="${CONTAINER_WORKER_SLEEP}" \ + # --timeout="${CONTAINER_WORKER_TIMEOUT}" \ + # --delay="${CONTAINER_WORKER_DELAY}" ;; horizon) echo "Running horizon..." From a248f80b011319e20aae8ad132637c44405c1510 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 26 Dec 2024 15:01:08 +0200 Subject: [PATCH 052/259] version2 --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Models/Shift.php | 80 ++++++++++++---------- 2 files changed, 44 insertions(+), 38 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 271c679..82d352e 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version1_9 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version1_10 flavor: | latest=false tags: | diff --git a/app/Models/Shift.php b/app/Models/Shift.php index 8f94238..f167c50 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -6,6 +6,7 @@ use App\Services\ChangeAssignment; use App\Services\ManualAssignment; use Cache; +use DB; use Filament\Actions\Action; use Filament\Forms\Components\DateTimePicker; use Filament\Forms\Components\Grid; @@ -56,7 +57,7 @@ public function getTaskNameAttribute() return $this->soldier_id == auth()->user()->userable_id ? $this->task?->name - : $this->task?->name.' '.$user_name->first()?->first_name.' '.$user_name->first()?->last_name; + : $this->task?->name . ' ' . $user_name->first()?->first_name . ' ' . $user_name->first()?->last_name; } public function getTaskColorAttribute() @@ -69,7 +70,7 @@ public static function getSchema(): array return [ Section::make([ Placeholder::make('') - ->content(content: fn (Shift $shift) => $shift->task_name) + ->content(content: fn(Shift $shift) => $shift->task_name) ->inlineLabel(), Grid::make() ->schema([ @@ -79,7 +80,7 @@ public static function getSchema(): array ->live() ->inline() ->options( - fn (?Shift $shift) => self::getOptions($shift) + fn(?Shift $shift) => self::getOptions($shift) ) ->afterStateUpdated(function (callable $set) { $set('soldier_id', null); @@ -96,13 +97,13 @@ function (?Shift $shift, Get $get) { ->default(null) ->placeholder('Select soldier') ->visible( - fn (Get $get): bool => $get('soldier_type') != null + fn(Get $get): bool => $get('soldier_type') != null && $get('soldier_type') != 'me' ), ]) ->visible( - fn (?Shift $record): bool => $record !== null - && ! $record->soldier_id + fn(?Shift $record): bool => $record !== null + && !$record->soldier_id && \Str::contains($_SERVER['HTTP_REFERER'], 'my-soldiers-shifts') && current(array: array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) ) @@ -145,7 +146,7 @@ protected static function getOptions($shift): array $manual_assignment = new ManualAssignment($shift, 'me'); if ($shift->task->department_name) { $options = collect($options) - ->put('department', '"'.$shift->task->department_name.'" '.__('Department')) + ->put('department', '"' . $shift->task->department_name . '" ' . __('Department')) ->toArray(); } if ($manual_assignment->amIAvailable()) { @@ -181,7 +182,7 @@ function ($record) { function ($shifts, $soldierId) { return Section::make() ->id($soldierId) - ->description(__('Exchange with').' '.Soldier::find($soldierId)->user->displayName) + ->description(__('Exchange with') . ' ' . Soldier::find($soldierId)->user->displayName) ->schema( $shifts->map( function ($shift) { @@ -191,10 +192,10 @@ function ($shift) { Radio::make('selected_shift') ->label(__('')) ->options([ - $shift->id => __('Task').': '.Task::find($shift->task_id)->name.' '.__('Time').': '.__('From').' '.$shift->start_date.' '.__('To').' '.$shift->end_date, + $shift->id => __('Task') . ': ' . Task::find($shift->task_id)->name . ' ' . __('Time') . ': ' . __('From') . ' ' . $shift->start_date . ' ' . __('To') . ' ' . $shift->end_date, ]) ->default(null) - ->afterStateUpdated(fn () => session()->put('selected_shift', true)) + ->afterStateUpdated(fn() => session()->put('selected_shift', true)) ->live() ->reactive(), ]); @@ -209,10 +210,10 @@ function ($shift) { return array_merge( [ Placeholder::make('') - ->content(fn (Shift $shift) => $shift->task_name) + ->content(fn(Shift $shift) => $shift->task_name) ->inlineLabel(), Placeholder::make('') - ->content(fn (Shift $shift) => $shift->start_date.' - '.$shift->end_date) + ->content(fn(Shift $shift) => $shift->start_date . ' - ' . $shift->end_date) ->inlineLabel(), ], $sections->toArray() @@ -225,13 +226,13 @@ function ($shift) { ->label(__('Exchange assignment')) ->icon('heroicon-s-arrow-path') ->color('primary') - ->disabled(fn (): bool => ! session()->get('selected_shift')) - ->visible(fn (): bool => current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))), + ->disabled(fn(): bool => !session()->get('selected_shift')) + ->visible(fn(): bool => current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))), $action->makeExtraModalAction(__('Request'), ['request' => true]) ->icon('heroicon-s-arrow-path') - ->disabled(fn (): bool => ! session()->get('selected_shift')) + ->disabled(fn(): bool => !session()->get('selected_shift')) ->color('primary') - ->visible(fn (): bool => ! current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))), + ->visible(fn(): bool => !current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))), $action->makeExtraModalAction(__('Cancel'), ['cancel' => true]), ]; }) @@ -400,19 +401,19 @@ function ($record) use (&$soldiers) { Placeholder::make(__('Soldier')) ->content(Soldier::find($record->soldier_id)->user->displayName), Placeholder::make(__('Time')) - ->content(__('From').' '.$record->start_date.' '.__('To').' '.$record->end_date), + ->content(__('From') . ' ' . $record->start_date . ' ' . __('To') . ' ' . $record->end_date), Placeholder::make('') ->content(__('Changing the shifts is your sole responsibility! (pay attention to conflicts between shifts).')) ->extraAttributes(['style' => 'color: red; font-family: Arial, Helvetica, sans-serif; font-size: 20px']) ->live() - ->visible(fn (Get $get) => $get('soldiers') == 'all'), + ->visible(fn(Get $get) => $get('soldiers') == 'all'), ToggleButtons::make('soldiers') ->label('') ->options(['all' => __('All soldiers'), 'matching' => __('Matching soldiers')]) ->inline() ->live() - ->default(fn () => 'matching') - ->visible(fn (): bool => current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))) + ->default(fn() => 'matching') + ->visible(fn(): bool => current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))) ->afterStateUpdated(function (callable $set) { $set('soldier', null); session()->put('selected_soldier', false); @@ -420,20 +421,20 @@ function ($record) use (&$soldiers) { Select::make('soldier') ->label(__('Soldier')) ->options( - fn (Get $get) => match ($get('soldiers')) { + fn(Get $get) => match ($get('soldiers')) { 'all' => Cache::remember('users', 30 * 60, function () { - return User::all(); - })->where('userable_id', '!=', $record->soldier_id) + return User::all(); + })->where('userable_id', '!=', $record->soldier_id) ->mapWithKeys(function ($user) { - return [$user->userable_id => $user->displayName]; - }), + return [$user->userable_id => $user->displayName]; + }), 'matching' => $changeAssignment->getMatchingSoldiers(), default => $changeAssignment->getMatchingSoldiers(), } ) ->placeholder(__('Select a soldier')) ->afterStateUpdated( - fn () => session()->put('selected_soldier', true) + fn() => session()->put('selected_soldier', true) ) ->live() ->reactive(), @@ -449,13 +450,13 @@ function (Action $action): array { ->label(__('Change assignment')) ->icon('heroicon-o-arrow-uturn-up') ->color('primary') - ->disabled(fn (): bool => ! session()->get('selected_soldier')) - ->visible(fn (): bool => current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))), + ->disabled(fn(): bool => !session()->get('selected_soldier')) + ->visible(fn(): bool => current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))), $action->makeExtraModalAction(__('Request'), ['request' => true]) ->icon('heroicon-o-arrow-uturn-up') - ->disabled(fn (): bool => ! session()->get('selected_soldier')) + ->disabled(fn(): bool => !session()->get('selected_soldier')) ->color('primary') - ->visible(fn (): bool => ! current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))), + ->visible(fn(): bool => !current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))), $action->makeExtraModalAction(__('Cancel'), ['cancel' => true]), ]; } @@ -581,6 +582,8 @@ protected static function soldierChange($record, $soldierId) protected static function sendNotification($title, $body, $actions, $user) { + \Log::info(json_encode(['$title' => $title])); + \Log::info(json_encode(['$user' => $user])); Notification::make() ->title($title) ->persistent() @@ -591,6 +594,9 @@ protected static function sendNotification($title, $body, $actions, $user) $actions ) ->sendToDatabase($user, true); + \Log::info(json_encode([ + 'notifications' => DB::table('notifications')->get() + ])); } public static function getFilters($calendar) @@ -602,12 +608,12 @@ public static function getFilters($calendar) ->extraAttributes(['class' => 'fullcalendar']) ->form(function () use ($calendar) { $shifts = $calendar->getEventsByRole(); - $soldiersShifts = array_filter($shifts->toArray(), fn ($shift) => $shift['soldier_id'] !== null); + $soldiersShifts = array_filter($shifts->toArray(), fn($shift) => $shift['soldier_id'] !== null); return [ Select::make('soldier_id') ->label(__('Soldier')) - ->options(fn (): array => collect($soldiersShifts)->mapWithKeys(fn ($shift) => [ + ->options(fn(): array => collect($soldiersShifts)->mapWithKeys(fn($shift) => [ $shift['soldier_id'] => User::where('userable_id', $shift['soldier_id']) ->first()?->displayName, ])->toArray()) @@ -619,14 +625,14 @@ public static function getFilters($calendar) ]; }) ->modalSubmitAction(false) - ->extraModalFooterActions(fn (Action $action): array => [ + ->extraModalFooterActions(fn(Action $action): array => [ $action->makeModalSubmitAction('Filter', arguments: ['Filter' => true])->color('success')->label(__('Filter')), $action->makeModalSubmitAction('Unassigned shifts', arguments: ['UnassignedShifts' => true])->color('primary')->label(__('Unassigned shifts')), ]) ->action(function (array $data, array $arguments) use ($calendar) { if ($arguments['Filter'] ?? false) { $calendar->filterData = $data; - $calendar->filter = ! ($data['soldier_id'] === [] && $data['type'] === []); + $calendar->filter = !($data['soldier_id'] === [] && $data['type'] === []); $calendar->refreshRecords(); } if ($arguments['UnassignedShifts'] ?? false) { @@ -640,11 +646,11 @@ public static function getFilters($calendar) public static function filter($events, $filterData) { return $events - ->when($filterData === 'UnassignedShifts', fn ($query) => $query + ->when($filterData === 'UnassignedShifts', fn($query) => $query ->where('soldier_id', null)) - ->when(! empty($filterData['soldier_id']), fn ($query) => $query + ->when(!empty($filterData['soldier_id']), fn($query) => $query ->whereIn('soldier_id', $filterData['soldier_id'])) - ->when(! empty($filterData['type']), fn ($query) => $query + ->when(!empty($filterData['type']), fn($query) => $query ->whereIn('task_id', $filterData['type'])) ->values(); } From ccbc9b8d49dcbdf9f64f1bf22a9b0b856fd8a96e Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 26 Dec 2024 15:05:54 +0200 Subject: [PATCH 053/259] version2 --- .github/workflows/php-build-and-deploy.yml | 2 +- entrypoint.sh | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 82d352e..f7e1cae 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version1_10 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version1_11 flavor: | latest=false tags: | diff --git a/entrypoint.sh b/entrypoint.sh index 22b82fc..9419bda 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -71,12 +71,15 @@ _run() { app) echo "🚀 Running octane..." ${ARTISAN} schedule:work & - ${ARTISAN} octane:frankenphp --host=0.0.0.0 --port="${CONTAINER_PORT}" + ${ARTISAN} octane:frankenphp --host=0.0.0.0 --port="${CONTAINER_PORT}" & + ${ARTISAN} queue:work & + ${ARTISAN} schedule:run --verbose --no-interaction & + sleep "${CONTAINER_SCHEDULER_INTERVAL}s" # ${ARTISAN} serve --host=0.0.0.0 --port="${CONTAINER_PORT}" ;; worker) echo "⏳ Running the queue..." - exec "${ARTISAN}" queue:work + # exec "${ARTISAN}" queue:work # -vv \ # --no-interaction \ # --tries="${CONTAINER_WORKER_TRIES}" \ From 649f7be9a7163228b06c37d00de6fe3b97879462 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 29 Dec 2024 09:35:33 +0200 Subject: [PATCH 054/259] version2 --- entrypoint.sh | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/entrypoint.sh b/entrypoint.sh index 9419bda..e857c1d 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -72,20 +72,18 @@ _run() { echo "🚀 Running octane..." ${ARTISAN} schedule:work & ${ARTISAN} octane:frankenphp --host=0.0.0.0 --port="${CONTAINER_PORT}" & - ${ARTISAN} queue:work & - ${ARTISAN} schedule:run --verbose --no-interaction & - sleep "${CONTAINER_SCHEDULER_INTERVAL}s" + ${ARTISAN} queue:work # ${ARTISAN} serve --host=0.0.0.0 --port="${CONTAINER_PORT}" ;; worker) echo "⏳ Running the queue..." - # exec "${ARTISAN}" queue:work - # -vv \ - # --no-interaction \ - # --tries="${CONTAINER_WORKER_TRIES}" \ - # --sleep="${CONTAINER_WORKER_SLEEP}" \ - # --timeout="${CONTAINER_WORKER_TIMEOUT}" \ - # --delay="${CONTAINER_WORKER_DELAY}" + exec "${ARTISAN}" queue:work + -vv \ + --no-interaction \ + --tries="${CONTAINER_WORKER_TRIES}" \ + --sleep="${CONTAINER_WORKER_SLEEP}" \ + --timeout="${CONTAINER_WORKER_TIMEOUT}" \ + --delay="${CONTAINER_WORKER_DELAY}" ;; horizon) echo "Running horizon..." From 9b0b172d73e91d3a8e89c03bc78965ac012c62b1 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 29 Dec 2024 09:35:52 +0200 Subject: [PATCH 055/259] version2 --- .github/workflows/php-build-and-deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index f7e1cae..9721099 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version1_11 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version1_12 flavor: | latest=false tags: | From ab8430cb6ab766c9e669fee0dc5f08c30c03c96a Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 29 Dec 2024 16:30:04 +0200 Subject: [PATCH 056/259] version2 --- .github/workflows/php-build-and-deploy.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 9721099..467e692 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version1_12 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version1_13 flavor: | latest=false tags: | @@ -43,6 +43,7 @@ jobs: type=semver,pattern=v{{version}} type=semver,pattern=v{{major}}.{{minor}} + - name: 🐳 Docker Build & Push uses: docker/build-push-action@v5 id: docker_build From bf77227f093d857cfdcc9c942e467c6b6a008207 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Tue, 31 Dec 2024 13:47:00 +0200 Subject: [PATCH 057/259] version2 --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 2 +- app/Livewire/MyDatabaseNotifications.php | 52 ++++---- app/Models/Shift.php | 133 ++++++++++++--------- app/Services/ManualAssignment.php | 4 +- entrypoint.sh | 13 +- lang/he.json | 5 +- tests/Unit/RecurringEventsTest.php | 114 ++++++++++++++++++ 8 files changed, 230 insertions(+), 95 deletions(-) create mode 100644 tests/Unit/RecurringEventsTest.php diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 467e692..fac263f 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version1_13 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version1_14 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 45c240b..42b485b 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -440,7 +440,7 @@ public function eventDidMount(): string return <<<'JS' function({ event, timeText, isStart, isEnd, isMirror, isPast, isFuture, isToday, el, view }){ el.setAttribute("x-tooltip", "tooltip"); - el.setAttribute("x-data", "{ tooltip: '"+event.title+"' }"); + el.setAttribute("x-data", "{ tooltip: `"+event.title+"` }"); } JS; } diff --git a/app/Livewire/MyDatabaseNotifications.php b/app/Livewire/MyDatabaseNotifications.php index 437683d..99b6c59 100644 --- a/app/Livewire/MyDatabaseNotifications.php +++ b/app/Livewire/MyDatabaseNotifications.php @@ -34,7 +34,7 @@ protected function commanderConfirmExchange($requestingSoldier, $approvingSoldie $changeAssignment = new ChangeAssignment($shiftA); $changeAssignment->exchange($shiftB); $this->dispatch('filament-fullcalendar--refresh'); - $requestingSoldier->team->commander->id != $approvingSoldier->id ? + if ($requestingSoldier->team->commander->id !== $approvingSoldier->id) { $this->sendNotification( __('Approve exchange shift request'), __( @@ -53,10 +53,8 @@ protected function commanderConfirmExchange($requestingSoldier, $approvingSoldie ), [], $requestingSoldier->user - - ) - && - $this->endNotification( + ); + $this->sendNotification( __('Approve exchange shift request'), __( 'Commander notification of approving exchange shift request for the approving soldier', @@ -74,9 +72,8 @@ protected function commanderConfirmExchange($requestingSoldier, $approvingSoldie ), [], $approvingSoldier->user - ) - - : + ); + } else { $this->sendNotification( __('Approve exchange shift request'), __( @@ -96,6 +93,7 @@ protected function commanderConfirmExchange($requestingSoldier, $approvingSoldie [], $requestingSoldier->user ); + } } protected function soldierConfirmExchange($requestingSoldier, $approvingSoldier, $shiftA, $shiftB) @@ -172,7 +170,7 @@ protected function commanderDenyExchange($requestingSoldier, $rejectingSoldier, $rejectingSoldier = Soldier::find($rejectingSoldier); $shiftA = Shift::find($shiftA); $shiftB = Shift::find($shiftB); - $requestingSoldier->team->commander->id != $rejectingSoldier->id ? + if ($requestingSoldier->team->commander->id !== $rejectingSoldier->id) { $this->sendNotification( __('Deny exchange shift request'), __( @@ -191,8 +189,7 @@ protected function commanderDenyExchange($requestingSoldier, $rejectingSoldier, ), [], $requestingSoldier->user - ) - && + ); $this->sendNotification( __('Deny exchange shift request'), __( @@ -211,9 +208,8 @@ protected function commanderDenyExchange($requestingSoldier, $rejectingSoldier, ), [], $rejectingSoldier->user - ) - - : + ); + } else { $this->sendNotification( __('Deny exchange shift request'), __( @@ -233,6 +229,7 @@ protected function commanderDenyExchange($requestingSoldier, $rejectingSoldier, [], $requestingSoldier->user ); + } } protected function soldierDenyExchange($requestingSoldier, $rejectingSoldier, $shiftA, $shiftB) @@ -276,12 +273,12 @@ protected function confirmChangeByRole($approverRole, $shift, $soldierId) protected function commanderConfirmChange($shift, $soldierId) { - $shift = Shift::find($shift->id); + $shift = Shift::find($shift); $requestingSoldier = Soldier::find($shift->soldier_id); $approvingSoldier = Soldier::find($soldierId); Shift::where('id', $shift->id)->update(['soldier_id' => $soldierId]); $this->dispatch('filament-fullcalendar--refresh'); - $requestingSoldier->team->commander->id != $approvingSoldier->id ? + if ($requestingSoldier->team->commander->id !== $approvingSoldier->id) { $this->sendNotification( __('Approve change shift request'), __( @@ -296,8 +293,7 @@ protected function commanderConfirmChange($shift, $soldierId) ), [], $requestingSoldier->user - ) - && + ); $this->sendNotification( __('Approve change shift request'), __( @@ -313,8 +309,8 @@ protected function commanderConfirmChange($shift, $soldierId) ), [], $approvingSoldier->user - ) - : + ); + } else { $this->sendNotification( __('Approve change shift request'), __( @@ -330,6 +326,7 @@ protected function commanderConfirmChange($shift, $soldierId) [], $requestingSoldier->user ); + } } protected function soldierConfirmChange($shift, $soldierId) @@ -359,7 +356,7 @@ protected function soldierConfirmChange($shift, $soldierId) ->icon('heroicon-s-hand-thumb-up') ->button() ->dispatch('confirmChange', [ - 'approverRole' => current(array_diff(collect(Soldier::find($shift->soldier_id)->user->getRoleNames())->toArray(), ['soldier'])), + 'approverRole' => 'commander', 'shift' => $shift->id, 'soldierId' => $soldierId, ]) @@ -370,7 +367,7 @@ protected function soldierConfirmChange($shift, $soldierId) ->icon('heroicon-m-hand-thumb-down') ->button() ->dispatch('denyChange', [ - 'rejectorRole' => current(array_diff(collect(Soldier::find($shift->soldier_id)->user->getRoleNames())->toArray(), ['soldier'])), + 'rejectorRole' => 'commander', 'shift' => $shift->id, 'soldierId' => $soldierId, ]) @@ -398,7 +395,7 @@ protected function commanderDenyChange($shift, $soldierId) $shift = Shift::find($shift); $requestingSoldier = Soldier::find($shift->soldier_id); $approvingSoldier = Soldier::find($soldierId); - $requestingSoldier->team->commander->id != $approvingSoldier->id ? + if ($requestingSoldier->team->commander->id !== $approvingSoldier->id) { $this->sendNotification( __('Deny change shift request'), __( @@ -414,9 +411,7 @@ protected function commanderDenyChange($shift, $soldierId) ), [], $requestingSoldier->user - ) - - && + ); $this->sendNotification( __('Deny change shift request'), __( @@ -432,8 +427,8 @@ protected function commanderDenyChange($shift, $soldierId) ), [], $approvingSoldier->user - ) - : + ); + } else { $this->sendNotification( __('Deny change shift request'), __( @@ -450,6 +445,7 @@ protected function commanderDenyChange($shift, $soldierId) [], $requestingSoldier->user ); + } } protected function soldierDenyChange($shift, $soldierId) diff --git a/app/Models/Shift.php b/app/Models/Shift.php index f167c50..7793d12 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -6,7 +6,7 @@ use App\Services\ChangeAssignment; use App\Services\ManualAssignment; use Cache; -use DB; +use Carbon\Carbon; use Filament\Actions\Action; use Filament\Forms\Components\DateTimePicker; use Filament\Forms\Components\Grid; @@ -57,7 +57,7 @@ public function getTaskNameAttribute() return $this->soldier_id == auth()->user()->userable_id ? $this->task?->name - : $this->task?->name . ' ' . $user_name->first()?->first_name . ' ' . $user_name->first()?->last_name; + : $this->task?->name.' '.$user_name->first()?->first_name.' '.$user_name->first()?->last_name; } public function getTaskColorAttribute() @@ -70,7 +70,7 @@ public static function getSchema(): array return [ Section::make([ Placeholder::make('') - ->content(content: fn(Shift $shift) => $shift->task_name) + ->content(content: fn (Shift $shift) => $shift->task_name) ->inlineLabel(), Grid::make() ->schema([ @@ -80,7 +80,7 @@ public static function getSchema(): array ->live() ->inline() ->options( - fn(?Shift $shift) => self::getOptions($shift) + fn (?Shift $shift) => self::getOptions($shift) ) ->afterStateUpdated(function (callable $set) { $set('soldier_id', null); @@ -89,21 +89,35 @@ public static function getSchema(): array ->label(__('Soldier assignment')) ->options( function (?Shift $shift, Get $get) { + if ($get('soldier_type') === 'all') { + return Cache::remember('users', 30 * 60, function () { + return User::all(); + }) + ->mapWithKeys(function ($user) { + return [$user->userable_id => $user->displayName]; + }); + } $manual_assignment = new ManualAssignment($shift, $get('soldier_type')); return $manual_assignment->getSoldiers(); } ) ->default(null) - ->placeholder('Select soldier') + ->placeholder(__('Select a soldier')) ->visible( - fn(Get $get): bool => $get('soldier_type') != null + fn (Get $get): bool => $get('soldier_type') != null && $get('soldier_type') != 'me' ), + Placeholder::make('') + ->content(__('Assigning the soldier to this shift is your sole responsibility!')) + ->extraAttributes(['style' => 'color: red; font-family: Arial, Helvetica, sans-serif; font-size: 20px']) + ->live() + ->visible(fn (Get $get) => $get('soldier_type') === 'all'), ]) ->visible( - fn(?Shift $record): bool => $record !== null - && !$record->soldier_id + fn (?Shift $record): bool => $record !== null + && Carbon::parse($record->start_date)->isAfter(now()) + && ! $record->soldier_id && \Str::contains($_SERVER['HTTP_REFERER'], 'my-soldiers-shifts') && current(array: array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) ) @@ -141,14 +155,15 @@ protected static function getOptions($shift): array { $options = [ 'reserves' => __('Reserves'), + 'matching' => __('Matching soldiers'), 'all' => __('All'), ]; - $manual_assignment = new ManualAssignment($shift, 'me'); if ($shift->task->department_name) { $options = collect($options) - ->put('department', '"' . $shift->task->department_name . '" ' . __('Department')) + ->put('department', '"'.$shift->task->department_name.'" '.__('Department')) ->toArray(); } + $manual_assignment = new ManualAssignment($shift, 'me'); if ($manual_assignment->amIAvailable()) { $options = collect($options) ->put('me', __('Me')) @@ -182,7 +197,7 @@ function ($record) { function ($shifts, $soldierId) { return Section::make() ->id($soldierId) - ->description(__('Exchange with') . ' ' . Soldier::find($soldierId)->user->displayName) + ->description(__('Exchange with').' '.Soldier::find($soldierId)->user->displayName) ->schema( $shifts->map( function ($shift) { @@ -192,10 +207,10 @@ function ($shift) { Radio::make('selected_shift') ->label(__('')) ->options([ - $shift->id => __('Task') . ': ' . Task::find($shift->task_id)->name . ' ' . __('Time') . ': ' . __('From') . ' ' . $shift->start_date . ' ' . __('To') . ' ' . $shift->end_date, + $shift->id => __('Task').': '.Task::find($shift->task_id)->name.' '.__('Time').': '.__('From').' '.$shift->start_date.' '.__('To').' '.$shift->end_date, ]) ->default(null) - ->afterStateUpdated(fn() => session()->put('selected_shift', true)) + ->afterStateUpdated(fn () => session()->put('selected_shift', true)) ->live() ->reactive(), ]); @@ -210,10 +225,10 @@ function ($shift) { return array_merge( [ Placeholder::make('') - ->content(fn(Shift $shift) => $shift->task_name) + ->content(fn (Shift $shift) => $shift->task_name) ->inlineLabel(), Placeholder::make('') - ->content(fn(Shift $shift) => $shift->start_date . ' - ' . $shift->end_date) + ->content(fn (Shift $shift) => $shift->start_date.' - '.$shift->end_date) ->inlineLabel(), ], $sections->toArray() @@ -226,13 +241,13 @@ function ($shift) { ->label(__('Exchange assignment')) ->icon('heroicon-s-arrow-path') ->color('primary') - ->disabled(fn(): bool => !session()->get('selected_shift')) - ->visible(fn(): bool => current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))), + ->disabled(fn (): bool => ! session()->get('selected_shift')) + ->visible(fn (): bool => current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))), $action->makeExtraModalAction(__('Request'), ['request' => true]) ->icon('heroicon-s-arrow-path') - ->disabled(fn(): bool => !session()->get('selected_shift')) + ->disabled(fn (): bool => ! session()->get('selected_shift')) ->color('primary') - ->visible(fn(): bool => !current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))), + ->visible(fn (): bool => ! current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))), $action->makeExtraModalAction(__('Cancel'), ['cancel' => true]), ]; }) @@ -263,8 +278,7 @@ protected static function sendExchangeNotifications($shiftA, $shiftB) { $soldierA = Soldier::find($shiftA->soldier_id); $soldierB = Soldier::find($shiftB->soldier_id); - - $soldierA->id != auth()->user()->userable_id ? + if ($soldierA->id !== auth()->user()->userable_id) { self::sendNotification( __('Exchange shift'), __( @@ -283,7 +297,7 @@ protected static function sendExchangeNotifications($shiftA, $shiftB) ), [], $soldierA->user - ) && + ); self::sendNotification( __('Exchange shift'), __( @@ -302,7 +316,8 @@ protected static function sendExchangeNotifications($shiftA, $shiftB) ), [], $soldierB->user - ) : + ); + } else { self::sendNotification( __('Exchange shift'), __( @@ -322,7 +337,7 @@ protected static function sendExchangeNotifications($shiftA, $shiftB) [], $soldierB->user ); - + } } protected static function soldierExchange($record, $shift) @@ -401,19 +416,19 @@ function ($record) use (&$soldiers) { Placeholder::make(__('Soldier')) ->content(Soldier::find($record->soldier_id)->user->displayName), Placeholder::make(__('Time')) - ->content(__('From') . ' ' . $record->start_date . ' ' . __('To') . ' ' . $record->end_date), + ->content(__('From').' '.$record->start_date.' '.__('To').' '.$record->end_date), Placeholder::make('') ->content(__('Changing the shifts is your sole responsibility! (pay attention to conflicts between shifts).')) ->extraAttributes(['style' => 'color: red; font-family: Arial, Helvetica, sans-serif; font-size: 20px']) ->live() - ->visible(fn(Get $get) => $get('soldiers') == 'all'), + ->visible(fn (Get $get) => $get('soldiers') == 'all'), ToggleButtons::make('soldiers') ->label('') ->options(['all' => __('All soldiers'), 'matching' => __('Matching soldiers')]) ->inline() ->live() - ->default(fn() => 'matching') - ->visible(fn(): bool => current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))) + ->default(fn () => 'matching') + ->visible(fn (): bool => current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))) ->afterStateUpdated(function (callable $set) { $set('soldier', null); session()->put('selected_soldier', false); @@ -421,20 +436,20 @@ function ($record) use (&$soldiers) { Select::make('soldier') ->label(__('Soldier')) ->options( - fn(Get $get) => match ($get('soldiers')) { + fn (Get $get) => match ($get('soldiers')) { 'all' => Cache::remember('users', 30 * 60, function () { - return User::all(); - })->where('userable_id', '!=', $record->soldier_id) + return User::all(); + })->where('userable_id', '!=', $record->soldier_id) ->mapWithKeys(function ($user) { - return [$user->userable_id => $user->displayName]; - }), + return [$user->userable_id => $user->displayName]; + }), 'matching' => $changeAssignment->getMatchingSoldiers(), default => $changeAssignment->getMatchingSoldiers(), } ) ->placeholder(__('Select a soldier')) ->afterStateUpdated( - fn() => session()->put('selected_soldier', true) + fn () => session()->put('selected_soldier', true) ) ->live() ->reactive(), @@ -450,13 +465,13 @@ function (Action $action): array { ->label(__('Change assignment')) ->icon('heroicon-o-arrow-uturn-up') ->color('primary') - ->disabled(fn(): bool => !session()->get('selected_soldier')) - ->visible(fn(): bool => current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))), + ->disabled(fn (): bool => ! session()->get('selected_soldier')) + ->visible(fn (): bool => current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))), $action->makeExtraModalAction(__('Request'), ['request' => true]) ->icon('heroicon-o-arrow-uturn-up') - ->disabled(fn(): bool => !session()->get('selected_soldier')) + ->disabled(fn (): bool => ! session()->get('selected_soldier')) ->color('primary') - ->visible(fn(): bool => !current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))), + ->visible(fn (): bool => ! current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))), $action->makeExtraModalAction(__('Cancel'), ['cancel' => true]), ]; } @@ -486,7 +501,7 @@ protected static function commanderChange($shift, $soldierId) protected static function sendChangeNotifications($shift, $soldierId) { $soldier = Soldier::find($soldierId); - $shift->soldier_id != auth()->user()->userable_id ? + if ($shift->soldier_id !== auth()->user()->userable_id) { self::sendNotification( __('Change assignment'), __( @@ -501,8 +516,7 @@ protected static function sendChangeNotifications($shift, $soldierId) ), [], $soldier->user - ) - && + ); self::sendNotification( __('Change assignment'), __( @@ -517,9 +531,8 @@ protected static function sendChangeNotifications($shift, $soldierId) ), [], Soldier::find($shift->soldier_id)->user - ) - - : + ); + } else { self::sendNotification( __('Change assignment'), __( @@ -535,6 +548,7 @@ protected static function sendChangeNotifications($shift, $soldierId) [], $soldier->user ); + } } protected static function soldierChange($record, $soldierId) @@ -582,8 +596,6 @@ protected static function soldierChange($record, $soldierId) protected static function sendNotification($title, $body, $actions, $user) { - \Log::info(json_encode(['$title' => $title])); - \Log::info(json_encode(['$user' => $user])); Notification::make() ->title($title) ->persistent() @@ -594,9 +606,6 @@ protected static function sendNotification($title, $body, $actions, $user) $actions ) ->sendToDatabase($user, true); - \Log::info(json_encode([ - 'notifications' => DB::table('notifications')->get() - ])); } public static function getFilters($calendar) @@ -608,31 +617,37 @@ public static function getFilters($calendar) ->extraAttributes(['class' => 'fullcalendar']) ->form(function () use ($calendar) { $shifts = $calendar->getEventsByRole(); - $soldiersShifts = array_filter($shifts->toArray(), fn($shift) => $shift['soldier_id'] !== null); + $soldiersShifts = array_filter($shifts->toArray(), fn ($shift) => $shift['soldier_id'] !== null); return [ Select::make('soldier_id') ->label(__('Soldier')) - ->options(fn(): array => collect($soldiersShifts)->mapWithKeys(fn($shift) => [ + ->options(fn (): array => collect($soldiersShifts)->mapWithKeys(fn ($shift) => [ $shift['soldier_id'] => User::where('userable_id', $shift['soldier_id']) ->first()?->displayName, ])->toArray()) ->multiple(), Select::make('type') ->label(__('Type')) - ->options(Task::all()->pluck('type')->unique()) + ->options(Task::all()->pluck('type', 'id')->unique()) ->multiple(), ]; }) ->modalSubmitAction(false) - ->extraModalFooterActions(fn(Action $action): array => [ + ->extraModalFooterActions(fn (Action $action): array => [ $action->makeModalSubmitAction('Filter', arguments: ['Filter' => true])->color('success')->label(__('Filter')), $action->makeModalSubmitAction('Unassigned shifts', arguments: ['UnassignedShifts' => true])->color('primary')->label(__('Unassigned shifts')), ]) ->action(function (array $data, array $arguments) use ($calendar) { + $data['type'] = Task::whereIn( + 'type', + Task::whereIn('id', $data['type']) + ->pluck('type') + ) + ->pluck('id'); if ($arguments['Filter'] ?? false) { $calendar->filterData = $data; - $calendar->filter = !($data['soldier_id'] === [] && $data['type'] === []); + $calendar->filter = ! ($data['soldier_id'] === [] && $data['type'] === []); $calendar->refreshRecords(); } if ($arguments['UnassignedShifts'] ?? false) { @@ -646,11 +661,11 @@ public static function getFilters($calendar) public static function filter($events, $filterData) { return $events - ->when($filterData === 'UnassignedShifts', fn($query) => $query + ->when($filterData === 'UnassignedShifts', fn ($query) => $query ->where('soldier_id', null)) - ->when(!empty($filterData['soldier_id']), fn($query) => $query + ->when(! empty($filterData['soldier_id']), fn ($query) => $query ->whereIn('soldier_id', $filterData['soldier_id'])) - ->when(!empty($filterData['type']), fn($query) => $query + ->when(! empty($filterData['type']), fn ($query) => $query ->whereIn('task_id', $filterData['type'])) ->values(); } @@ -666,8 +681,8 @@ public static function activeFilters($calendar) }) ->concat( collect($calendar->filterData['type'])->map(function ($task_id) { - return Task::find($task_id)?->name; - }) + return Task::find($task_id)?->type; + })->unique() ) ->filter() ->toArray(); diff --git a/app/Services/ManualAssignment.php b/app/Services/ManualAssignment.php index 698d46a..6836988 100644 --- a/app/Services/ManualAssignment.php +++ b/app/Services/ManualAssignment.php @@ -41,7 +41,7 @@ protected function initSoldiersData($departmentName) 'reserves' => $this->filterReserves(), 'my_soldiers' => $this->filterMySoldiers(), 'department' => $this->filterDepartment($departmentName), - 'all' => $this->filterAll() + 'matching' => $this->filterMatching(), }; $this->getSoldiersDetails(); } @@ -86,7 +86,7 @@ protected function filterDepartment($name) }); } - protected function filterAll() + protected function filterMatching() { $this->soldiers = $this->soldiers ->filter(function ($user) { diff --git a/entrypoint.sh b/entrypoint.sh index e857c1d..2e19a67 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -70,9 +70,18 @@ _run() { case "${CONTAINER_MODE}" in app) echo "🚀 Running octane..." + # ${ARTISAN} schedule:work & + # ${ARTISAN} octane:frankenphp --host=0.0.0.0 --port="${CONTAINER_PORT}" & + # ${ARTISAN} queue: + ${ARTISAN} queue:work -vv \ + --no-interaction \ + --tries="${CONTAINER_WORKER_TRIES}" \ + --sleep="${CONTAINER_WORKER_SLEEP}" \ + --timeout="${CONTAINER_WORKER_TIMEOUT}" \ + --delay="${CONTAINER_WORKER_DELAY}" & ${ARTISAN} schedule:work & - ${ARTISAN} octane:frankenphp --host=0.0.0.0 --port="${CONTAINER_PORT}" & - ${ARTISAN} queue:work + ${ARTISAN} octane:frankenphp --host=0.0.0.0 --port="${CONTAINER_PORT}" + ;; # ${ARTISAN} serve --host=0.0.0.0 --port="${CONTAINER_PORT}" ;; worker) diff --git a/lang/he.json b/lang/he.json index 1712ba5..3f9f40a 100644 --- a/lang/he.json +++ b/lang/he.json @@ -9,6 +9,7 @@ "All soldiers":"כל החיילים", "And": "ו", "Assign soldier": "הקצה חייל", + "Assigning the soldier to this shift is your sole responsibility!":"הקצאת החייל למשמרת זו הינה באחריותך בלבד! ", "Approve exchange shift request":"אישור בקשת החלפת משמרת", "Commander notification of approving exchange shift request for the requesting soldier": "שלום :requestingSoldierName!
בקשתך להחלפת משמרת :shiftAName
מ :shiftAStart עד :shiftAEnd
עם החייל :approvingSoldierName בעבור משמרת :shiftBName
מ :shiftBStart עד :shiftBEnd
אושרה וההחלפה בוצעה.
יום מוצלח!
:commanderName", "Commander notification of approving exchange shift request for the approving soldier": "שלום :approvingSoldierName!
בקשת :requestingSoldierName להחליף את המשמרת :shiftBName שלך
מ :shiftBStart עד :shiftBEnd
עם המשמרת :shiftAName שלו
מ :shiftAStart עד :shiftAEnd
אושרה וההחלפה בוצעה.
יום מוצלח!
:commanderName", @@ -18,10 +19,10 @@ "Commander notification of rejection exchange shift request for the rejection soldier":"שלום :rejectingSoldierName!
בקשת החייל :requestingSoldierName להחליף את המשמרת :shiftBName שלך
מ :shiftBStart עד :shiftBEnd
עם המשמרת :shiftAName שלו
מ :shiftAStart עד :shiftAEnd
נדחתה.
יום טוב!
:commanderName", "Soldier notification of rejection exchange shift request":"שלום :requestingSoldierName!
בקשתך להחלפת משמרת :shiftBName
מ :shiftBStart עד :shiftBEnd
עם המשמרת :shiftAName שלי
מ :shiftAStart עד :shiftAEnd
נדחתה.
המשך יום קסום!
:rejectingSoldierName", "Commander notification of approving change shift request for the requesting soldier":"שלום :requestingSoldierName!
בקשתך להחלפת המשמרת :shiftName שלך
מ :shiftStart עד :shiftEnd
אושרה והשינוי בוצע.
יום טוב!
:commanderName", - "Commander notification of approving change shift request for the approving soldier": "שלום :approvingSoldierName!
בקשת החייל:requestingSoldierName להחליף את המשמרת :shiftName שלו
מ :shiftStart עד :shiftEnd
איתך, אושרה והשינוי בוצע.
המשך יום טוב!
:commanderName", + "Commander notification of approving change shift request for the approving soldier": "שלום :approvingSoldierName!
בקשת החייל :requestingSoldierName להחליף את המשמרת :shiftName שלו
מ :shiftStart עד :shiftEnd
איתך, אושרה והשינוי בוצע.
המשך יום טוב!
:commanderName", "Request for shift change":"בקשה לשינוי משמרת", "Approve change shift request":"אישור בקשת שינוי משמרת", - "Request for shift change from commander":"שלום :commanderName!
האם אתה מאשר לחייל:requestingSoldierName להחליף את המשמרת :shiftName שלו
מ :shiftStart עד :shiftEnd
עם החייל :approvingSoldierName ?", + "Request for shift change from commander":"שלום :commanderName!
האם אתה מאשר לחייל :requestingSoldierName להחליף את המשמרת :shiftName שלו
מ :shiftStart עד :shiftEnd
עם החייל :approvingSoldierName ?", "Commander notification of rejection change shift request for the requesting soldier": "שלום :requestingSoldierName!
בקשתך לשינוי המשמרת :shiftName שלך
מ :shiftStart עד :shiftEnd
עם :approvingSoldierName
נדחתה.
יום טוב!
:commanderName", "Commander notification of rejection change shift request for the approving soldier":"שלום :approvingSoldierName!
בקשת החייל :requestingSoldierName לשינוי המשמרת :shiftName שלו
מ :shiftStart עד :shiftEnd
איתך - נדחתה.
המשך יום טוב!
:commanderName", "Soldier notification of rejection change shift request":"שלום :requestingSoldierName!
בקשתך לשינוי המשמרת :shiftName שלך
מ :shiftStart עד :shiftEnd
איתי, נדחתה.
המשך יום טוב!
:rejectingSoldierName", diff --git a/tests/Unit/RecurringEventsTest.php b/tests/Unit/RecurringEventsTest.php new file mode 100644 index 0000000..c6bf9ac --- /dev/null +++ b/tests/Unit/RecurringEventsTest.php @@ -0,0 +1,114 @@ +create([ + 'name' => 'Daily Task', + 'recurring' => ['type' => 'Daily'], + 'start_hour' => '09:00:00', + 'duration' => 1, + ]); + $recurringEvents = new RecurringEvents(now()); + $recurringEvents->recurringTask(); + $this->assertDatabaseCount('shifts', now()->lastOfMonth()->day - now()->day); +}); + +it('should create shifts for weekly recurring', function () { + Task::factory()->create([ + 'name' => 'Weekly Task', + 'recurring' => ['type' => 'Weekly', 'days_in_week' => ['Sunday', 'Monday']], + 'start_hour' => '10:00:00', + 'duration' => 2, + ]); + $recurringEvents = new RecurringEvents(now()); + $recurringEvents->recurringTask(); + $period = now()->toPeriod(now()->lastOfMonth()->day - now()->day + 1); + $this->assertDatabaseCount('shifts', + collect($period)->filter(fn ($date) => $date->isSunday())->count() - (now()->isSunday() ? 1 : 0) + + collect($period)->filter(fn ($date) => $date->isMonday())->count() - (now()->isMonday() ? 1 : 0)); +}); + +it('should create shift for monthly recurring', function () { + $task = Task::factory()->create([ + 'name' => 'Monthly Task', + 'recurring' => ['type' => 'Monthly', 'dates_in_month' => 5], + 'start_hour' => '11:00:00', + 'duration' => 2, + ]); + $recurringEvents = new RecurringEvents; + $recurringEvents->recurringTask(); + $this->assertDatabaseHas('shifts', [ + 'task_id' => $task->id, + 'start_date' => Carbon::create(now()->addMonth()->year, now()->addMonth()->month, 5)->format('Y-m-d').' '.$task['start_hour'], + ]); + $this->assertDatabaseCount('shifts', 1); +}); + +it('should not create shift that already exists', function () { + Task::factory()->create([ + 'name' => 'Monthly Task', + 'recurring' => ['type' => 'Monthly', 'dates_in_month' => 5], + 'start_hour' => '11:00:00', + 'duration' => 2, + ]); + $recurringEvents = new RecurringEvents; + $recurringEvents->recurringTask(); + $recurringEvents->recurringTask(); + $this->assertDatabaseCount('shifts', 1); +}); + +it('should create shifts for custom recurring', function () { + $task = Task::factory()->create([ + 'name' => 'Custom Task', + 'recurring' => ['type' => 'Custom', 'dates_in_month' => [10, 20]], + 'start_hour' => '12:00:00', + 'duration' => 2, + ]); + $recurringEvents = new RecurringEvents; + $recurringEvents->recurringTask(); + $this->assertDatabaseCount('shifts', 2); +}); + +it('should create shift for One time task', function () { + $task = Task::factory()->create([ + 'name' => 'One time Task', + 'recurring' => ['type' => 'One time', 'date' => Carbon::tomorrow()->toDateString()], + 'start_hour' => '13:00:00', + 'duration' => 1, + ]); + $recurringEvents = new RecurringEvents; + $recurringEvents->oneTimeTask($task); + $date = Carbon::create( + Carbon::tomorrow()->year, + Carbon::tomorrow()->month, + Carbon::tomorrow()->day, + ); + $this->assertDatabaseHas('shifts', [ + 'task_id' => $task->id, + 'start_date' => Carbon::parse($date->format('Y-m-d').' '.$task['start_hour']), + 'end_date' => Carbon::parse($date->format('Y-m-d').' '.$task['start_hour'])->addHours($task['duration']), + ]); +}); + +it('should create shifts for Daily range task', function () { + $task = Task::factory()->create([ + 'name' => 'Daily range Task', + 'recurring' => ['type' => 'Daily range', 'start_date' => Carbon::tomorrow()->toDateString(), 'end_date' => Carbon::tomorrow()->addDays(5)->toDateString()], + 'start_hour' => '13:00:00', + 'duration' => 1, + ]); + $recurringEvents = new RecurringEvents; + $recurringEvents->dailyRangeTask($task); + + $this->assertDatabaseHas('shifts', [ + 'task_id' => $task->id, + 'start_date' => Carbon::parse(Carbon::tomorrow()->toDateString().' '.$task['start_hour']), + 'end_date' => Carbon::parse(Carbon::tomorrow()->toDateString().' '.$task['start_hour'])->addHours($task['duration']), + ]); + $this->assertDatabaseCount('shifts', 6); +}); From e9648d925135b9fdecefa01273cac9f1b2feb426 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Tue, 31 Dec 2024 14:03:48 +0200 Subject: [PATCH 058/259] version2 --- .github/workflows/php-build-and-deploy.yml | 2 +- entrypoint.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index fac263f..d753f20 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version1_14 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version1_15 flavor: | latest=false tags: | diff --git a/entrypoint.sh b/entrypoint.sh index 2e19a67..33e5039 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -83,7 +83,7 @@ _run() { ${ARTISAN} octane:frankenphp --host=0.0.0.0 --port="${CONTAINER_PORT}" ;; # ${ARTISAN} serve --host=0.0.0.0 --port="${CONTAINER_PORT}" - ;; + # ;; worker) echo "⏳ Running the queue..." exec "${ARTISAN}" queue:work From 6a2abb5ae8bcf332246860b9134ae02f02f32291 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Mon, 6 Jan 2025 11:35:07 +0200 Subject: [PATCH 059/259] version2 --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Enums/ConstraintType.php | 24 ++--- app/Filament/Widgets/CalendarWidget.php | 6 +- app/Models/Constraint.php | 10 +-- app/Models/Shift.php | 2 +- app/Models/Soldier.php | 2 + app/Models/User.php | 2 +- app/Policies/DepartmentPolicy.php | 2 +- app/Policies/SoldierPolicy.php | 2 +- app/Policies/TaskPolicy.php | 2 +- app/Policies/TeamPolicy.php | 2 +- app/Resources/SoldierResource.php | 88 ++++++++++++++++--- .../SoldierResource/Pages/CreateSoldier.php | 7 +- app/Resources/TaskResource.php | 2 +- app/Resources/TeamResource.php | 2 +- ...2024_05_30_094012_create_soldier_table.php | 1 + database/seeders/PermissionSeeder.php | 1 + lang/he.json | 6 +- tests/Unit/ChangeAssignmentServiceTest.php | 44 +++++----- tests/Unit/HelpersServiceTest.php | 13 +-- 20 files changed, 148 insertions(+), 72 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index d753f20..93aa924 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version1_15 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version1_16 flavor: | latest=false tags: | diff --git a/app/Enums/ConstraintType.php b/app/Enums/ConstraintType.php index 96d3689..509a984 100644 --- a/app/Enums/ConstraintType.php +++ b/app/Enums/ConstraintType.php @@ -34,45 +34,45 @@ public function getLabel(): string public static function getPriority(): array { return [ - self::NOT_EVENING->value => 1, - self::NOT_THURSDAY_EVENING->value => 1, self::NOT_WEEKEND->value => 1, self::LOW_PRIORITY_NOT_WEEKEND->value => 2, + self::NOT_TASK->value => 1, + self::LOW_PRIORITY_NOT_TASK->value => 2, + self::NOT_EVENING->value => 1, + self::NOT_THURSDAY_EVENING->value => 1, self::VACATION->value => 1, self::MEDICAL->value => 1, self::SCHOOL->value => 1, - self::NOT_TASK->value => 1, - self::LOW_PRIORITY_NOT_TASK->value => 2, ]; } public static function getLimit(): array { return [ - self::NOT_EVENING->value => 4, - self::NOT_THURSDAY_EVENING->value => 1, self::NOT_WEEKEND->value => 1, self::LOW_PRIORITY_NOT_WEEKEND->value => 1, + self::NOT_TASK->value => 3, + self::LOW_PRIORITY_NOT_TASK->value => 3, + self::NOT_EVENING->value => 4, + self::NOT_THURSDAY_EVENING->value => 1, self::VACATION->value => 0, self::MEDICAL->value => 0, self::SCHOOL->value => 4, - self::NOT_TASK->value => 3, - self::LOW_PRIORITY_NOT_TASK->value => 3, ]; } public function getColor(): string|array|null { return match ($this) { - self::NOT_EVENING => '#ffd4e5', - self::NOT_THURSDAY_EVENING => '#ffdfba', self::NOT_WEEKEND => '#ffffba', self::LOW_PRIORITY_NOT_WEEKEND => '#adb2fb', + self::NOT_TASK => '#96ead7', + self::LOW_PRIORITY_NOT_TASK => '#baffc9', + self::NOT_EVENING => '#ffd4e5', + self::NOT_THURSDAY_EVENING => '#ffdfba', self::VACATION => '#bae1ff', self::MEDICAL => '#f2d7fb', self::SCHOOL => '#f9a7a7', - self::NOT_TASK => '#96ead7', - self::LOW_PRIORITY_NOT_TASK => '#baffc9', }; } } diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 42b485b..addeedb 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -113,7 +113,7 @@ public function getEventsByRole() $role = current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])); return ($this->type === 'my_soldiers') ? match ($role) { - 'manager' => $this->model::where('soldier_id', '!=', $current_user_id) + 'manager','shifts-assignment' => $this->model::where('soldier_id', '!=', $current_user_id) ->orWhereNull('soldier_id') ->get(), 'department-commander' => $this->model::where('soldier_id', '!=', $current_user_id) @@ -172,7 +172,7 @@ protected function headerActions(): array return $startDate->isBefore($today); })->extraAttributes(['class' => 'fullcalendar']) - ->hidden($this->model === Shift::class && $this->type === 'my' && ! array_intersect(auth()->user()->getRoleNames()->toArray(), ['manager', 'department-commander', 'team-commander'])), + ->hidden($this->model === Shift::class && $this->type === 'my' && ! array_intersect(auth()->user()->getRoleNames()->toArray(), ['manager', 'shifts-assignment', 'department-commander', 'team-commander'])), ]; } } else { @@ -304,7 +304,7 @@ protected function modalActions(): array if ( ($this->model == Constraint::class && $this->type == 'my') || ($this->model == Shift::class && $this->type == 'my_soldiers') - || ($this->model == Shift::class && $this->type == 'my' && array_intersect(auth()->user()->getRoleNames()->toArray(), ['manager', 'department-commander', 'team-commander'])) + || ($this->model == Shift::class && $this->type == 'my' && array_intersect(auth()->user()->getRoleNames()->toArray(), ['manager', 'shifts-assignment', 'department-commander', 'team-commander'])) ) { if ($this->model == Shift::class) { return array_merge($basicActions, $changeAction); diff --git a/app/Models/Constraint.php b/app/Models/Constraint.php index a33ce3b..8abbe32 100644 --- a/app/Models/Constraint.php +++ b/app/Models/Constraint.php @@ -15,7 +15,6 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; -use Illuminate\Support\Facades\DB; class Constraint extends Model { @@ -87,12 +86,13 @@ private static function availableOptions($startDate, $endDate): array unset($options[ConstraintType::LOW_PRIORITY_NOT_WEEKEND->value]); } $usedCounts = self::getUsedCountsForCurrentMonth($startDate, $endDate); - $limits = ConstraintType::getLimit(); + $limits = Soldier::where('id', auth()->user()->userable_id)->pluck('constraints_limit')->first() + ? Soldier::where('id', auth()->user()->userable_id)->pluck('constraints_limit')->first() + : ConstraintType::getLimit(); $constraintsWithinLimit = []; foreach ($options as $constraint => $label) { $used = $usedCounts[$constraint] ?? 0; $limit = $limits[$constraint] ?? 0; - if ($limit === 0 || $used < $limit) { $constraintsWithinLimit[$constraint] = $label; } @@ -109,11 +109,9 @@ public static function getAvailableOptions($startDate, $endDate): array private static function getUsedCountsForCurrentMonth($startDate, $endDate): array { - $currentUserId = auth()->user()->userable_id; foreach (ConstraintType::cases() as $enum) { - $usedCount = DB::table('constraints') - ->where('soldier_id', $currentUserId) + $usedCount = Constraint::where('soldier_id', auth()->user()->userable_id) ->where('constraint_type', $enum->value) ->whereBetween('start_date', [ Carbon::parse($startDate)->startOfMonth(), diff --git a/app/Models/Shift.php b/app/Models/Shift.php index 7793d12..2a75ad0 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -169,7 +169,7 @@ protected static function getOptions($shift): array ->put('me', __('Me')) ->toArray(); } - if (current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) != 'manager') { + if (current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) != 'manager' || current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) != 'shifts-assignment') { return collect($options) ->put('my_soldiers', __('My Soldiers')) ->toArray(); diff --git a/app/Models/Soldier.php b/app/Models/Soldier.php index ad3fc2e..1e6e6ec 100644 --- a/app/Models/Soldier.php +++ b/app/Models/Soldier.php @@ -31,6 +31,7 @@ class Soldier extends Model 'is_reservist', 'reserve_dates', 'next_reserve_dates', + 'constraints_limit', ]; protected $casts = [ @@ -47,6 +48,7 @@ class Soldier extends Model 'is_reservist' => 'boolean', 'reserve_dates' => 'array', 'next_reserve_dates' => 'array', + 'constraints_limit' => 'array', ]; public function user(): MorphOne diff --git a/app/Models/User.php b/app/Models/User.php index 70ecbe8..fc3e901 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -48,7 +48,7 @@ public function getFilamentName(): string public function viewAny(User $user): bool { - return $user->hasRole('manager'); + return $user->hasRole(['manager', 'shifts-assignment']); } public function canAccessPanel(Panel $panel): bool diff --git a/app/Policies/DepartmentPolicy.php b/app/Policies/DepartmentPolicy.php index 677fd24..30ab5b6 100644 --- a/app/Policies/DepartmentPolicy.php +++ b/app/Policies/DepartmentPolicy.php @@ -8,6 +8,6 @@ class DepartmentPolicy { public function viewAny(User $user): bool { - return $user->hasRole('manager'); + return $user->hasRole(['manager', 'shifts-assignment']); } } diff --git a/app/Policies/SoldierPolicy.php b/app/Policies/SoldierPolicy.php index 0e5ab04..2e95e89 100644 --- a/app/Policies/SoldierPolicy.php +++ b/app/Policies/SoldierPolicy.php @@ -8,6 +8,6 @@ class SoldierPolicy { public function viewAny(User $user): bool { - return $user->hasRole(['manager', 'department-commander', 'team-commander']); + return $user->hasRole(['manager', 'shifts-assignment', 'department-commander', 'team-commander']); } } diff --git a/app/Policies/TaskPolicy.php b/app/Policies/TaskPolicy.php index ab5cf6c..bfcc5b2 100644 --- a/app/Policies/TaskPolicy.php +++ b/app/Policies/TaskPolicy.php @@ -8,6 +8,6 @@ class TaskPolicy { public function viewAny(User $user): bool { - return $user->hasRole(['manager', 'department-commander', 'team-commander']); + return $user->hasRole(['manager', 'shifts-assignment', 'department-commander', 'team-commander']); } } diff --git a/app/Policies/TeamPolicy.php b/app/Policies/TeamPolicy.php index e396755..f90d9ef 100644 --- a/app/Policies/TeamPolicy.php +++ b/app/Policies/TeamPolicy.php @@ -8,6 +8,6 @@ class TeamPolicy { public function viewAny(User $user): bool { - return $user->hasRole(['manager', 'department-commander']); + return $user->hasRole(['manager', 'shifts-assignment', 'department-commander']); } } diff --git a/app/Resources/SoldierResource.php b/app/Resources/SoldierResource.php index 6f215cd..edcf717 100644 --- a/app/Resources/SoldierResource.php +++ b/app/Resources/SoldierResource.php @@ -2,6 +2,7 @@ namespace App\Resources; +use App\Enums\ConstraintType; use App\Filters\NumberFilter; use App\Forms\Components\Flatpickr; use App\Models\Department; @@ -14,6 +15,7 @@ use Carbon\Carbon; use Filament\Forms\Components\DatePicker; use Filament\Forms\Components\Fieldset; +use Filament\Forms\Components\Group; use Filament\Forms\Components\Section; use Filament\Forms\Components\Select; use Filament\Forms\Components\TextInput; @@ -53,6 +55,7 @@ public static function form(Form $form): Form Section::make()->schema(self::soldierDetails())->columns(), Section::make()->schema(self::reserveDays())->columns()->visible(fn (Get $get) => $get('is_reservist')), Section::make()->schema(self::constraints())->columns(), + Section::make()->schema(self::constraintsLimit())->columns(), ]); } @@ -83,13 +86,14 @@ public static function table(Table $table): Table ->sortable(), TextColumn::make('role') ->label(__('Role')) - ->visible(collect(auth()->user()->getRoleNames())->intersect(['manager', 'department-commander'])->isNotEmpty()) + ->visible(collect(auth()->user()->getRoleNames())->intersect(['manager', 'shifts-assignment', 'department-commander'])->isNotEmpty()) ->default( function ($record) { $roles = Soldier::find($record->id)->user->getRoleNames()->first(); return match ($roles) { 'manager' => __('Manager'), + 'shifts-assignment' => __('A shifts assignment'), 'department-commander' => __('Department commander'), 'team-commander' => __('Team commander'), 'soldier' => __('Soldier'), @@ -104,15 +108,15 @@ function ($record) { return $soldier->team ? $soldier->team->name : null; }), - TextColumn::make('reserve_dates')->label(__('Reserve dates'))->date()->listWithLineBreaks()->limitList(1)->expandableLimitedList()->placeholder('---')->toggleable(isToggledHiddenByDefault: true), - TextColumn::make('next_reserve_dates')->label(__('Next reserve dates'))->date()->listWithLineBreaks()->limitList(1)->expandableLimitedList()->placeholder('---')->toggleable(isToggledHiddenByDefault: true), + TextColumn::make('reserve_dates')->label(__('Reserve dates'))->date()->listWithLineBreaks()->limitList(1)->expandableLimitedList()->placeholder('---')->toggleable(true, true), + TextColumn::make('next_reserve_dates')->label(__('Next reserve dates'))->date()->listWithLineBreaks()->limitList(1)->expandableLimitedList()->placeholder('---')->toggleable(true, true), TextColumn::make('enlist_date')->label(__('Enlist date'))->sortable()->date()->toggleable(), - TextColumn::make('course')->label(__('Course'))->toggleable(isToggledHiddenByDefault: true), - BooleanColumn::make('has_exemption')->label(__('Exemption'))->toggleable(isToggledHiddenByDefault: true), - TextColumn::make('max_shifts')->label(__('Max shifts'))->toggleable(isToggledHiddenByDefault: true), - TextColumn::make('max_nights')->label(__('Max nights'))->toggleable(isToggledHiddenByDefault: true), - TextColumn::make('max_weekends')->label(__('Max weekends'))->toggleable(isToggledHiddenByDefault: true), - TextColumn::make('capacity')->label(__('Capacity'))->toggleable(isToggledHiddenByDefault: true), + TextColumn::make('course')->label(__('Course'))->toggleable(true, true), + BooleanColumn::make('has_exemption')->label(__('Exemption'))->toggleable(true, true), + TextColumn::make('max_shifts')->label(__('Max shifts'))->toggleable(true, true), + TextColumn::make('max_nights')->label(__('Max nights'))->toggleable(true, true), + TextColumn::make('max_weekends')->label(__('Max weekends'))->toggleable(true, true), + TextColumn::make('capacity')->label(__('Capacity'))->toggleable(true, true), TextColumn::make('capacity_hold') ->default(function ($record) { $soldierShifts = Shift::where('soldier_id', $record->id)->get(); @@ -124,9 +128,10 @@ function ($record) { ->label(__('Capacity hold')) ->numeric() ->toggleable(), - BooleanColumn::make('is_trainee')->label(__('Is trainee'))->toggleable(isToggledHiddenByDefault: true), - BooleanColumn::make('is_mabat')->label(__('Is mabat'))->toggleable(isToggledHiddenByDefault: true), + BooleanColumn::make('is_trainee')->label(__('Is trainee'))->toggleable(true, true), + BooleanColumn::make('is_mabat')->label(__('Is mabat'))->toggleable(true, true), TextColumn::make('qualifications')->label(__('Qualifications'))->placeholder(__('No qualifications'))->toggleable(), + TextColumn::make('constraints_limit')->label(__('Constraints limit'))->toggleable(true, true), ]) ->modifyQueryUsing(function (Builder $query) { if (request()->input('team_id')) { @@ -257,7 +262,7 @@ function ($record) { public static function getEloquentQuery(): Builder { - if (auth()->user()->hasRole('manager')) { + if (auth()->user()->hasRole('manager') || auth()->user()->hasRole('shifts-assignment')) { return parent::getEloquentQuery()->where('id', '!=', User::where('userable_id', auth()->user()->id)->value('userable_id')); } @@ -313,6 +318,9 @@ public static function soldierDetails(): array ->label(__('Gender')) ->grouped() ->required(), + Toggle::make('shifts-assignment') + ->label(__('A shifts assignment')) + ->visible(auth()->user()->getRoleNames()->contains('manager')), DatePicker::make('enlist_date') ->label(__('Enlist date')) ->seconds(false), @@ -392,6 +400,62 @@ public static function constraints(): array ]; } + public static function constraintsLimit() + { + return [ + Group::make([ + TextInput::make('Not weekend') + ->label(__('Not weekend')) + ->numeric() + ->minValue(0) + ->default(ConstraintType::getLimit()['Not weekend']), + TextInput::make('Low priority not weekend') + ->label(__('Low priority not weekend')) + ->numeric() + ->minValue(0) + ->default(ConstraintType::getLimit()['Low priority not weekend']), + TextInput::make('Not task') + ->label(__('Not task')) + ->numeric() + ->minValue(0) + ->default(ConstraintType::getLimit()['Not task']), + TextInput::make('Low priority not task') + ->label(__('Low priority not task')) + ->numeric() + ->minValue(0) + ->default(ConstraintType::getLimit()['Low priority not task']), + TextInput::make('Not evening') + ->label(__('Not evening')) + ->numeric() + ->minValue(0) + ->default(ConstraintType::getLimit()['Not evening']), + TextInput::make('Not Thursday evening') + ->label(__('Not Thursday evening')) + ->numeric() + ->minValue(0) + ->default(ConstraintType::getLimit()['Not Thursday evening']), + TextInput::make('Vacation') + ->label(__('Vacation')) + ->numeric() + ->minValue(0) + ->default(ConstraintType::getLimit()['Vacation']), + TextInput::make('Medical') + ->label(__('Medical')) + ->numeric() + ->minValue(0) + ->default(ConstraintType::getLimit()['Medical']), + TextInput::make('School') + ->label(__('School')) + ->numeric() + ->minValue(0) + ->default(ConstraintType::getLimit()['School']), + ]) + ->statePath('constraints_limit') + ->columns(9) + ->columnSpanFull(), + ]; + } + public static function getModelLabel(): string { return __('Soldier'); diff --git a/app/Resources/SoldierResource/Pages/CreateSoldier.php b/app/Resources/SoldierResource/Pages/CreateSoldier.php index 12b1109..a3503c8 100644 --- a/app/Resources/SoldierResource/Pages/CreateSoldier.php +++ b/app/Resources/SoldierResource/Pages/CreateSoldier.php @@ -40,7 +40,7 @@ public function beforeCreate() protected function afterCreate() { $user = $this->record->user; - $user->assignRole('soldier'); + $this->data['shifts-assignment'] == 1 ? $user->assignRole('soldier', 'shifts-assignment') : $user->assignRole('soldier'); } protected function getRedirectUrl(): string @@ -70,6 +70,11 @@ public static function getSteps(): array ->schema([ Section::make()->schema(SoldierResource::constraints())->columns(), ]), + Step::make('Constraints limit') + ->label(__('Constraints limit')) + ->schema([ + Section::make()->schema(SoldierResource::constraintsLimit())->columns(), + ]), ]; } } diff --git a/app/Resources/TaskResource.php b/app/Resources/TaskResource.php index 221292b..9fe9c18 100644 --- a/app/Resources/TaskResource.php +++ b/app/Resources/TaskResource.php @@ -402,7 +402,7 @@ protected static function getOptions(Get $get): array ->put('me', __('Me')) ->toArray(); } - if (current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) != 'manager') { + if (current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) != 'manager' || current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) != 'shifts-assignment') { return collect($options) ->put('my_soldiers', __('My Soldiers')) ->toArray(); diff --git a/app/Resources/TeamResource.php b/app/Resources/TeamResource.php index 3b35ada..6d657ac 100644 --- a/app/Resources/TeamResource.php +++ b/app/Resources/TeamResource.php @@ -219,7 +219,7 @@ protected static function unAssignDepartmentCommander($commander_id): void public static function getEloquentQuery(): Builder { - if (auth()->user()->hasRole('manager')) { + if (auth()->user()->hasRole('manager') || auth()->user()->hasRole('shifts-assignment')) { return parent::getEloquentQuery(); } diff --git a/database/migrations/2024_05_30_094012_create_soldier_table.php b/database/migrations/2024_05_30_094012_create_soldier_table.php index e33bcfc..8567482 100644 --- a/database/migrations/2024_05_30_094012_create_soldier_table.php +++ b/database/migrations/2024_05_30_094012_create_soldier_table.php @@ -26,6 +26,7 @@ public function up(): void $table->boolean('is_reservist')->default(false); $table->json('reserve_dates')->nullable(); $table->json('next_reserve_dates')->nullable(); + $table->json('constraints_limit')->nullable(); $table->timestamps(); }); } diff --git a/database/seeders/PermissionSeeder.php b/database/seeders/PermissionSeeder.php index 36ead89..4712dec 100644 --- a/database/seeders/PermissionSeeder.php +++ b/database/seeders/PermissionSeeder.php @@ -16,6 +16,7 @@ public function run(): void 'soldier', 'team-commander', 'department-commander', + 'shifts-assignment', 'manager', ])->map(function (?string $role) { Role::firstOrCreate( diff --git a/lang/he.json b/lang/he.json index 3f9f40a..d041bdd 100644 --- a/lang/he.json +++ b/lang/he.json @@ -48,6 +48,7 @@ "Constraint": "אילוץ", "Constraint Name": "שם אילוץ", "Constraints": "אילוצים", + "Constraints limit": "הגבלת אילוצים", "Course": "קורס", "Create":"צור", "Create shifts":"צור משמרות", @@ -111,7 +112,7 @@ "Last name": "שם משפחה", "Less than":"פחות מ", "Less than equal":"פחות או שווה", - "Low priority not task":"עדיפות נמוכה למשימה", + "Low priority not task":"עדיפות נמוכה למשמרת", "Low priority not weekend":"עדיפות נמוכה לסופ''ש", "Male": "זכר", "Matching soldiers":"החיילים המתאימים", @@ -143,7 +144,7 @@ "No suitable soldiers":"אין חיילים מתאימים", "Not evening":"ערב", "Not equal":"לא שווה", - "Not task":"משימה", + "Not task":"ללא משמרת", "Not Thursday evening":"חמישי ערב", "Not weekend":"סופ''ש", "One time": "חד פעמי", @@ -179,6 +180,7 @@ "Shift name":"שם המשמרת", "Shifts": "משמרות", "Shifts assignment":"שבץ משמרות", + "A shifts assignment":"משבץ משמרות", "Soldier": "חייל", "Soldier assignment": "הקצאת חייל", "Soldier details": "נתוני חייל", diff --git a/tests/Unit/ChangeAssignmentServiceTest.php b/tests/Unit/ChangeAssignmentServiceTest.php index 7b17db2..e5efa93 100644 --- a/tests/Unit/ChangeAssignmentServiceTest.php +++ b/tests/Unit/ChangeAssignmentServiceTest.php @@ -16,8 +16,8 @@ 'is_night' => false, ])->id, 'is_weekend' => false, - 'start_date' => now(), - 'end_date' => now()->addHour(), + 'start_date' => now()->isLastOfMonth() ? now()->subDays(8) : now()->addHours(5), + 'end_date' => now()->isLastOfMonth() ? now()->subDays(7) : now()->addHours(6), ]); $soldier1 = Soldier::factory()->create([ 'qualifications' => ['clean', 'jump'], @@ -51,14 +51,14 @@ 'task_id' => Task::factory()->create([ 'type' => 'clean', ])->id, - 'start_date' => now()->isStartOfMonth() ? now() : now()->subHours(2), - 'end_date' => now()->isLastOfMonth() ? now()->addHour() : now()->addHours(2), + 'start_date' => now()->isLastOfMonth() ? now()->subDays(9) : now()->addHours(4), + 'end_date' => now()->isLastOfMonth() ? now()->subDays(6) : now()->addHours(7), ]); Constraint::factory()->create([ 'soldier_id' => $soldier6->id, 'constraint_type' => ConstraintType::NOT_TASK->value, - 'start_date' => now()->isStartOfMonth() ? now()->subDay() : now()->subHour(), - 'end_date' => now()->isLastOfMonth() ? now()->addDay() : now()->addHours(4), + 'start_date' => now()->isLastOfMonth() ? now()->subDays(9) : now()->addHours(4), + 'end_date' => now()->isLastOfMonth() ? now()->subDays(6) : now()->addHours(7), ]); $result = [ @@ -84,8 +84,8 @@ 'is_night' => false, ])->id, 'is_weekend' => false, - 'start_date' => now(), - 'end_date' => now()->addHour(), + 'start_date' => now()->isLastOfMonth() ? now()->subDays(8) : now()->addHours(5), + 'end_date' => now()->isLastOfMonth() ? now()->subDays(7) : now()->addHours(6), ]); $shift1 = Shift::factory()->create([ 'soldier_id' => User::factory()->create([ @@ -97,8 +97,8 @@ 'task_id' => Task::factory()->create([ 'type' => 'jump', ])->id, - 'start_date' => now()->isLastOfMonth() ? now()->subDays(8) : now()->addHours(5), - 'end_date' => now()->isLastOfMonth() ? now()->subDays(7) : now()->addHours(6), + 'start_date' => now()->isLastOfMonth() ? now()->subDays(10) : now()->addHours(7), + 'end_date' => now()->isLastOfMonth() ? now()->subDays(9) : now()->addHours(8), ]); $shift2 = Shift::factory()->create([ 'soldier_id' => User::factory()->create([ @@ -110,8 +110,8 @@ 'task_id' => Task::factory()->create([ 'type' => 'run', ])->id, - 'start_date' => now()->isLastOfMonth() ? now()->subDays(8) : now()->addHours(5), - 'end_date' => now()->isLastOfMonth() ? now()->subDays(7) : now()->addHours(6), + 'start_date' => now()->isLastOfMonth() ? now()->subDays(3) : now()->addHours(1), + 'end_date' => now()->isLastOfMonth() ? now()->subDays(2) : now()->addHours(2), ]); $shift3 = Shift::factory()->create([ 'soldier_id' => User::factory()->create([ @@ -123,8 +123,8 @@ 'task_id' => Task::factory()->create([ 'type' => 'run', ])->id, - 'start_date' => now()->isLastOfMonth() ? now()->subDays(8) : now()->addHours(5), - 'end_date' => now()->isLastOfMonth() ? now()->subDays(7) : now()->addHours(6), + 'start_date' => now()->isLastOfMonth() ? now()->subDays(9) : now()->addHours(4), + 'end_date' => now()->isLastOfMonth() ? now()->subDays(6) : now()->addHours(7), ]); $shift4 = Shift::factory()->create([ 'soldier_id' => User::factory()->create([ @@ -136,8 +136,8 @@ 'task_id' => Task::factory()->create([ 'type' => 'jump', ])->id, - 'start_date' => now()->isLastOfMonth() ? now()->subDays(8) : now()->addHours(5), - 'end_date' => now()->isLastOfMonth() ? now()->subDays(7) : now()->addHours(6), + 'start_date' => now()->isLastOfMonth() ? now()->subDays(10) : now()->addHours(2), + 'end_date' => now()->isLastOfMonth() ? now()->subDays(9) : now()->addHours(3), ]); $shift5 = Shift::factory()->create([ 'soldier_id' => User::factory()->create([ @@ -149,8 +149,8 @@ 'task_id' => Task::factory()->create([ 'type' => 'clean', ])->id, - 'start_date' => now()->isStartOfMonth() ? now() : now()->subHours(2), - 'end_date' => now()->isLastOfMonth() ? now()->addHour() : now()->addHours(2), + 'start_date' => now()->isLastOfMonth() ? now()->subDays(9) : now()->addHours(4), + 'end_date' => now()->isLastOfMonth() ? now()->subDays(6) : now()->addHours(7), ]); $shift6 = Shift::factory()->create([ 'soldier_id' => User::factory()->create([ @@ -162,14 +162,14 @@ 'task_id' => Task::factory()->create([ 'type' => 'clean', ])->id, - 'start_date' => now()->isLastOfMonth() ? now()->subDays(8) : now()->addHours(5), - 'end_date' => now()->isLastOfMonth() ? now()->subDays(7) : now()->addHours(6), + 'start_date' => now()->isLastOfMonth() ? now()->subDays(2) : now()->addHours(1), + 'end_date' => now()->isLastOfMonth() ? now()->subDays(1) : now()->addHours(2), ]); Constraint::factory()->create([ 'soldier_id' => $shift6->soldier_id, 'constraint_type' => ConstraintType::NOT_TASK->value, - 'start_date' => now()->subHour(), - 'end_date' => now()->addHours(2), + 'start_date' => now()->isLastOfMonth() ? now()->subDays(9) : now()->addHours(4), + 'end_date' => now()->isLastOfMonth() ? now()->subDays(6) : now()->addHours(7), ]); $expectedShifts = collect([$shift1->id, $shift4->id]); $changeAssignment = new ChangeAssignment($shiftForExchange); diff --git a/tests/Unit/HelpersServiceTest.php b/tests/Unit/HelpersServiceTest.php index 14b0a69..5dfca49 100644 --- a/tests/Unit/HelpersServiceTest.php +++ b/tests/Unit/HelpersServiceTest.php @@ -52,8 +52,8 @@ $futureConstraints = Constraint::factory()->count(3)->create([ 'soldier_id' => Soldier::factory()->create()->id, 'constraint_type' => ConstraintType::NOT_TASK->value, - 'start_date' => now()->addDay(), - 'end_date' => now()->addDays(2), + 'start_date' => now()->isLastOfMonth() ? now()->subDays(6) : now()->addHours(7), + 'end_date' => now()->isLastOfMonth() ? now()->subDays(5) : now()->addHours(8), ]); $constraints = collect([...$pastConstraints, ...$futureConstraints]); $range = new Range(now()->startOfMonth(), now()->endOfMonth()); @@ -80,7 +80,10 @@ it('should return soldiers shifts', function () { $soldier = Soldier::factory()->create(); - $shifts = Shift::factory()->count(3)->create(['soldier_id' => $soldier->id, 'start_date' => now()->addDay()->startOfSecond(), 'end_date' => now()->addDays(2)->startOfSecond()]); + $shifts = Shift::factory()->count(3)->create([ + 'soldier_id' => $soldier->id, + 'start_date' => now()->isLastOfMonth() ? now()->subDays(6)->startOfSecond() : now()->addHours(7)->startOfSecond(), + 'end_date' => now()->isLastOfMonth() ? now()->subDays(5)->startOfSecond() : now()->addHours(8)->startOfSecond()]); $result = $shifts->map(fn ($shift) => Helpers::buildShift($shift)); expect(Helpers::getSoldiersShifts($soldier->id, new Range(now()->startOfMonth(), now()->endOfMonth())))->toEqual($result); }); @@ -90,8 +93,8 @@ Constraint::factory()->count(4)->create([ 'soldier_id' => $soldier->id, 'constraint_type' => ConstraintType::NOT_TASK->value, - 'start_date' => now()->subDays(2), - 'end_date' => now()->subDay(), + 'start_date' => now()->isLastOfMonth() ? now()->subDays(9) : now()->addHours(5), + 'end_date' => now()->isLastOfMonth() ? now()->subDays(8) : now()->addHours(6), ]); $range = new Range(now()->startOfMonth(), now()->endOfMonth()); expect(Helpers::getConstraintBy($soldier->id, $range))->toHaveCount(4); From 0233ad2dcbe1f837234ddc70ba5b822546151bca Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Mon, 6 Jan 2025 17:01:38 +0200 Subject: [PATCH 060/259] version2 --- .github/workflows/php-build-and-deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 93aa924..3e295c7 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version1_16 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version1_17 flavor: | latest=false tags: | From 3f10c721cbd55daa160ac2482b4230bc04ba31a0 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Tue, 7 Jan 2025 11:20:20 +0200 Subject: [PATCH 061/259] version2 --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Enums/MonthesInYear.php | 37 + .../Notifications/Concerns/HasCommonKey.php | 22 + app/Filament/Notifications/MyNotification.php | 74 + app/Filament/Widgets/ChartWidget.php | 186 + app/Livewire/MyDatabaseNotifications.php | 830 +- app/Models/Constraint.php | 5 +- app/Models/Shift.php | 398 +- app/Providers/FilamentServiceProvider.php | 4 + app/Resources/ChartResource.php | 42 + .../ChartResource/Pages/CreateChart.php | 11 + .../ChartResource/Pages/EditChart.php | 19 + .../ChartResource/Pages/ListCharts.php | 19 + app/Resources/SoldierResource.php | 37 +- app/Resources/TaskResource.php | 36 +- app/Services/Charts.php | 113 + composer.json | 2 +- composer.lock | 13642 ++++++++++++++++ database/seeders/DatabaseSeeder.php | 7 + lang/en.json | 39 +- lang/he.json | 88 +- public/js/app/components/apexcharts.js | 800 + .../filament/forms/components/file-upload.js | 2 +- tests/Unit/ChartsTest.php | 58 + 24 files changed, 16038 insertions(+), 435 deletions(-) create mode 100644 app/Enums/MonthesInYear.php create mode 100644 app/Filament/Notifications/Concerns/HasCommonKey.php create mode 100644 app/Filament/Notifications/MyNotification.php create mode 100644 app/Filament/Widgets/ChartWidget.php create mode 100644 app/Resources/ChartResource.php create mode 100644 app/Resources/ChartResource/Pages/CreateChart.php create mode 100644 app/Resources/ChartResource/Pages/EditChart.php create mode 100644 app/Resources/ChartResource/Pages/ListCharts.php create mode 100644 app/Services/Charts.php create mode 100644 composer.lock create mode 100644 public/js/app/components/apexcharts.js create mode 100644 tests/Unit/ChartsTest.php diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 3e295c7..f1b4b0d 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version1_17 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version1_18 flavor: | latest=false tags: | diff --git a/app/Enums/MonthesInYear.php b/app/Enums/MonthesInYear.php new file mode 100644 index 0000000..d98fccd --- /dev/null +++ b/app/Enums/MonthesInYear.php @@ -0,0 +1,37 @@ + __('January'), + self::FEBRUARY => __('February'), + self::MARCH => __('March'), + self::APRIL => __('April'), + self::MAY => __('May'), + self::JUNE => __('June'), + self::JULY => __('July'), + self::AUGUST => __('August'), + self::SEPTEMBER => __('September'), + self::OCTOBER => __('October'), + self::NOVEMBER => __('November'), + self::DECEMBER => __('December'), + }; + } +} diff --git a/app/Filament/Notifications/Concerns/HasCommonKey.php b/app/Filament/Notifications/Concerns/HasCommonKey.php new file mode 100644 index 0000000..fc47224 --- /dev/null +++ b/app/Filament/Notifications/Concerns/HasCommonKey.php @@ -0,0 +1,22 @@ +commonKey = $commonKey; + + return $this; + } + + public function getCommonKey(): ?string + { + return $this->evaluate($this->commonKey); + } +} diff --git a/app/Filament/Notifications/MyNotification.php b/app/Filament/Notifications/MyNotification.php new file mode 100644 index 0000000..2c1aef8 --- /dev/null +++ b/app/Filament/Notifications/MyNotification.php @@ -0,0 +1,74 @@ + $this->getId(), + 'commonKey' => $this->getCommonKey(), + 'actions' => array_map(fn (Action|ActionGroup $action): array => $action->toArray(), $this->getActions()), + 'body' => $this->getBody(), + 'color' => $this->getColor(), + 'duration' => $this->getDuration(), + 'icon' => $this->getIcon(), + 'iconColor' => $this->getIconColor(), + 'status' => $this->getStatus(), + 'title' => $this->getTitle(), + 'view' => $this->getView(), + 'viewData' => $this->getViewData(), + ]; + } + + /** + * @param array $data + */ + public static function fromArray(array $data): static + { + $static = static::make($data['id'] ?? Str::random()); + + if ( + ($static::class !== self::class) && + (get_called_class() === self::class) + ) { + return $static::fromArray($data); + } + + $static->actions( + array_map( + fn (array $action): Action|ActionGroup => match (array_key_exists('actions', $action)) { + true => ActionGroup::fromArray($action), + false => Action::fromArray($action), + }, + $data['actions'] ?? [], + ), + ); + + $view = $data['view'] ?? null; + + if (filled($view) && ($static->getView() !== $view) && $static->isViewSafe($view)) { + $static->view($data['view']); + } + $static->viewData($data['viewData'] ?? []); + $static->commonKey($data['commonKey'] ?? null); + $static->body($data['body'] ?? null); + $static->color($data['color'] ?? null); + $static->duration($data['duration'] ?? $static->getDuration()); + $static->status($data['status'] ?? $static->getStatus()); + $static->icon($data['icon'] ?? $static->getIcon()); + $static->iconColor($data['iconColor'] ?? $static->getIconColor()); + $static->title($data['title'] ?? null); + + return $static; + } +} diff --git a/app/Filament/Widgets/ChartWidget.php b/app/Filament/Widgets/ChartWidget.php new file mode 100644 index 0000000..be7e360 --- /dev/null +++ b/app/Filament/Widgets/ChartWidget.php @@ -0,0 +1,186 @@ +default('bar') + ->options([ + 'line' => 'Line', + 'bar' => 'Col', + 'area' => 'Area', + ]) + ->inline(true) + ->label(__('Type')), + Grid::make() + ->schema([ + Toggle::make('ordersChartMarkers') + ->default(false) + ->label('Markers'), + + Toggle::make('ordersChartGrid') + ->default(false) + ->label('Grid'), + ]), + Select::make('data') + ->default('points') + ->hiddenLabel() + ->placeholder(__('Select parameter to filter')) + ->live() + ->options([ + 'shifts' => __('Shifts'), + 'lowConstraintsRejected' => __('low Constraints Rejected'), + 'constraints' => __('Constraints'), + 'points' => __('Points'), + 'weekends' => __('Weekends'), + 'nights' => __('Nights'), + ]), + Select::make('year') + ->default(now()->year) + ->label(__('Year')) + ->options($this->getYearOptions()) + ->placeholder(__('Select year')), + Select::make('month') + ->default(12) + ->label(__('Month')) + ->options($this->getMonthOptions()) + ->placeholder(__('Select month')), + Select::make('course') + ->default(1) + ->options( + Soldier::pluck('course', 'course')->unique()->sortBy('course')->all() + ) + ->placeholder(__('Select course')) + ->label(__('Course')), + ]; + } + + protected function getOptions(): array + { + $filters = $this->filterFormData; + $chart = new Charts; + $detailes = $chart->organizeChartData($filters['data'], $filters['course'], $filters['month'], $filters['year']); + + return [ + 'chart' => [ + 'type' => $filters['ChartType'], + 'height' => 490, + 'toolbar' => [ + 'show' => true, + ], + ], + 'theme' => [ + 'mode' => 'light', + ], + 'series' => [ + [ + 'name' => __('label', ['data' => __($filters['data']), 'course' => $filters['course']]), + 'data' => $detailes['data'], + ], + ], + 'plotOptions' => [ + 'bar' => [ + 'borderRadius' => 2, + ], + ], + 'xaxis' => [ + 'categories' => $detailes['labels'], + 'labels' => [ + 'show' => false, + ], + ], + 'tooltip' => [ + 'enabled' => true, + 'x' => [ + 'formatter' => function ($val, $index) use ($detailes) { + return $detailes['labels'][$index] ?? $val; + }, + ], + ], + 'yaxis' => [ + 'labels' => [ + 'style' => [ + 'fontWeight' => 400, + 'fontFamily' => 'inherit', + ], + ], + ], + 'fill' => [ + 'type' => 'gradient', + 'gradient' => [ + 'shade' => 'dark', + 'type' => 'vertical', + 'shadeIntensity' => 0.5, + 'gradientToColors' => ['#fbbf24'], + 'inverseColors' => true, + 'opacityFrom' => 1, + 'opacityTo' => 1, + 'stops' => [0, 100], + ], + ], + + 'dataLabels' => [ + 'enabled' => false, + 'dropShadow' => true, + ], + 'grid' => [ + 'show' => $filters['ordersChartGrid'], + ], + 'tooltip' => [ + 'enabled' => true, + ], + 'stroke' => [ + 'width' => $filters['ChartType'] === 'line' ? 4 : 0, + ], + 'noData' => [ + 'text' => __('No matching data!'), + 'align' => 'center', + 'verticalAlign' => 'middle', + 'offsetX' => 0, + 'offsetY' => 0, + 'style' => [ + 'color' => '#FF0000', + 'fontSize' => '17px', + 'fontWeight' => 400, + 'fontFamily' => 'inherit', + ], + ], + 'colors' => ['#f59e0b'], + ]; + } + + protected function getYearOptions(): array + { + $currentYear = now()->year; + $years = range($currentYear - 1, $currentYear + 4); + + return array_combine($years, $years); + } + + protected function getMonthOptions(): array + { + return array_combine( + array_map(fn ($enum) => $enum->value, MonthesInYear::cases()), + array_map(fn ($enum) => $enum->getLabel(), MonthesInYear::cases()) + ); + } +} diff --git a/app/Livewire/MyDatabaseNotifications.php b/app/Livewire/MyDatabaseNotifications.php index 99b6c59..d8f5440 100644 --- a/app/Livewire/MyDatabaseNotifications.php +++ b/app/Livewire/MyDatabaseNotifications.php @@ -2,118 +2,208 @@ namespace App\Livewire; +use App\Filament\Notifications\MyNotification; use App\Models\Shift; use App\Models\Soldier; +use App\Models\User; use App\Services\ChangeAssignment; use Filament\Notifications\Actions\Action as NotificationAction; use Filament\Notifications\Livewire\DatabaseNotifications; -use Filament\Notifications\Notification; use Livewire\Attributes\On; class MyDatabaseNotifications extends DatabaseNotifications { #[On('confirmExchange')] - public function confirmExchange($approverRole, $requestingSoldier, $approvingSoldier, $shiftA, $shiftB) + public function confirmExchange($approverRole, $soldierAId, $soldierBId, $shiftAId, $shiftBId, $requesterId) { - $this->confirmExchangeByRole($approverRole, $requestingSoldier, $approvingSoldier, $shiftA, $shiftB); + $this->confirmExchangeByRole($approverRole, $soldierAId, $soldierBId, $shiftAId, $shiftBId, $requesterId); } - protected function confirmExchangeByRole($approverRole, $requestingSoldier, $approvingSoldier, $shiftA, $shiftB) + protected function confirmExchangeByRole($approverRole, $soldierAId, $soldierBId, $shiftAId, $shiftBId, $requesterId) { - $approverRole ? - $this->commanderConfirmExchange($requestingSoldier, $approvingSoldier, $shiftA, $shiftB) : - $this->soldierConfirmExchange($requestingSoldier, $approvingSoldier, $shiftA, $shiftB); + match ($approverRole) { + 'shifts-assignment' => $this->shiftAssignmentConfirmExchange($soldierAId, $soldierBId, $shiftAId, $shiftBId, $requesterId), + 'team-commander', 'department-commander' => $this->commanderConfirmExchange($soldierAId, $soldierBId, $shiftAId, $shiftBId), + 'soldier' => $this->soldierConfirmExchange($soldierAId, $soldierBId, $shiftAId, $shiftBId) + }; } - protected function commanderConfirmExchange($requestingSoldier, $approvingSoldier, $shiftA, $shiftB) + protected function shiftAssignmentConfirmExchange($soldierAId, $soldierBId, $shiftAId, $shiftBId, $requesterId) { - $requestingSoldier = Soldier::find($requestingSoldier); - $approvingSoldier = Soldier::find($approvingSoldier); - $shiftA = Shift::find($shiftA); - $shiftB = Shift::find($shiftB); - $changeAssignment = new ChangeAssignment($shiftA); - $changeAssignment->exchange($shiftB); - $this->dispatch('filament-fullcalendar--refresh'); - if ($requestingSoldier->team->commander->id !== $approvingSoldier->id) { - $this->sendNotification( - __('Approve exchange shift request'), - __( - 'Commander notification of approving exchange shift request for the requesting soldier', - [ - 'requestingSoldierName' => $requestingSoldier->user->displayName, - 'shiftAName' => $shiftA->task->name, - 'shiftAStart' => $shiftA->start_date, - 'shiftAEnd' => $shiftA->end_date, - 'approvingSoldierName' => $approvingSoldier->user->displayName, - 'shiftBName' => $shiftB->task->name, - 'shiftBStart' => $shiftB->start_date, - 'shiftBEnd' => $shiftB->end_date, - 'commanderName' => $requestingSoldier->team->commander->user->displayName, - ] - ), - [], - $requestingSoldier->user - ); - $this->sendNotification( - __('Approve exchange shift request'), - __( - 'Commander notification of approving exchange shift request for the approving soldier', - [ - 'approvingSoldierName' => $approvingSoldier->user->displayName, - 'requestingSoldierName' => $requestingSoldier->user->displayName, - 'shiftBName' => $shiftB->task->name, - 'shiftBStart' => $shiftB->start_date, - 'shiftBEnd' => $shiftB->end_date, - 'shiftAName' => $shiftA->task->name, - 'shiftAStart' => $shiftA->start_date, - 'shiftAEnd' => $shiftA->end_date, - 'commanderName' => $requestingSoldier->team->commander->user->displayName, - ] - ), - [], - $approvingSoldier->user + $soldierA = Soldier::find($soldierAId); + $soldierB = Soldier::find($soldierBId); + $shiftA = Shift::find($shiftAId); + $shiftB = Shift::find($shiftBId); + $this->shiftAssignmentExchange($shiftA, $shiftB); + $this->deleteNonRelevantNotifications($shiftAId.'-'.$shiftBId); + $this->sendNotification( + __('Exchange shift'), + __( + 'Shifts assignment notification of exchanging shifts for first soldier', + [ + 'soldierAName' => $soldierA->user->displayName, + 'shiftAName' => $shiftA->task->name, + 'shiftAStart' => $shiftA->start_date, + 'shiftAEnd' => $shiftA->end_date, + 'soldierBName' => $soldierB->user->displayName, + 'shiftBName' => $shiftB->task->name, + 'shiftBStart' => $shiftB->start_date, + 'shiftBEnd' => $shiftB->end_date, + 'shiftsAssignmentName' => auth()->user()->displayName, + ] + ), + [], + $soldierA->user + ); + $this->sendNotification( + __('Exchange shift'), + __( + 'Shifts assignment notification of exchanging shifts for second soldier', + [ + 'soldierBName' => $soldierB->user->displayName, + 'shiftBName' => $shiftB->task->name, + 'shiftBStart' => $shiftB->start_date, + 'shiftBEnd' => $shiftB->end_date, + 'soldierAName' => $soldierA->user->displayName, + 'shiftAName' => $shiftA->task->name, + 'shiftAStart' => $shiftA->start_date, + 'shiftAEnd' => $shiftA->end_date, + 'shiftsAssignmentName' => auth()->user()->displayName, + ] + ), + [], + $soldierB->user + ); + $this->sendNotification( + __('Exchange shift'), + __( + 'Shifts assignment notification of exchanging shifts for commander', + [ + 'commanderName' => User::find($requesterId)->displayName, + 'shiftAName' => $shiftA->task->name, + 'soldierAName' => $soldierA->user->displayName, + 'shiftAStart' => $shiftA->start_date, + 'shiftAEnd' => $shiftA->end_date, + 'soldierBName' => $soldierB->user->displayName, + 'shiftBName' => $shiftB->task->name, + 'shiftBStart' => $shiftB->start_date, + 'shiftBEnd' => $shiftB->end_date, + 'shiftsAssignmentName' => auth()->user()->displayName, + ] + ), + [], + User::find($requesterId) + ); + $this->getShiftsAssignments() + ->filter(fn ($shiftsAssignment) => $shiftsAssignment->id !== auth()->user()->id) + ->map( + fn ($shiftsAssignment) => $this->sendNotification( + __('Exchange shift'), + __( + 'Shifts assignment notification of exchanging shifts for shifts assignment', + [ + 'shiftsAssignmentName' => $shiftsAssignment->displayName, + 'shiftAName' => $shiftA->task->name, + 'soldierAName' => $soldierA->user->displayName, + 'shiftAStart' => $shiftA->start_date, + 'shiftAEnd' => $shiftA->end_date, + 'soldierBName' => $soldierB->user->displayName, + 'shiftBName' => $shiftB->task->name, + 'shiftBStart' => $shiftB->start_date, + 'shiftBEnd' => $shiftB->end_date, + 'shiftsAssignment2Name' => auth()->user()->displayName, + ] + ), + [], + $shiftsAssignment + ) ); - } else { - $this->sendNotification( - __('Approve exchange shift request'), - __( - 'Commander notification of approving exchange shift request for the requesting soldier', + } + + protected function shiftAssignmentExchange($shiftAId, $shiftBId) + { + $changeAssignment = new ChangeAssignment($shiftAId); + $changeAssignment->exchange($shiftBId); + $this->dispatch('filament-fullcalendar--refresh'); + } + + protected function commanderConfirmExchange($soldierAId, $soldierBId, $shiftAId, $shiftBId) + { + $shiftA = Shift::find($shiftAId); + $shiftB = Shift::find($shiftBId); + $this->getShiftsAssignments() + ->map( + fn ($shiftsAssignment) => $this->sendNotification( + __('Request for shift exchange'), + __( + 'Request for shift exchange from shifts assignments', + [ + 'shiftsAssignmentName' => $shiftsAssignment->displayName, + 'soldierAName' => Soldier::find($soldierAId)->user->displayName, + 'shiftAName' => $shiftA->task->name, + 'shiftAStart' => $shiftA->start_date, + 'shiftAEnd' => $shiftA->end_date, + 'soldierBName' => Soldier::find($soldierBId)->user->displayName, + 'shiftBName' => $shiftB->task->name, + 'shiftBStart' => $shiftB->start_date, + 'shiftBEnd' => $shiftB->end_date, + ] + ), [ - 'requestingSoldierName' => $requestingSoldier->user->displayName, - 'shiftAName' => $shiftA->task->name, - 'shiftAStart' => $shiftA->start_date, - 'shiftAEnd' => $shiftA->end_date, - 'approvingSoldierName' => $approvingSoldier->user->displayName, - 'shiftBName' => $shiftB->task->name, - 'shiftBStart' => $shiftB->start_date, - 'shiftBEnd' => $shiftB->end_date, - 'commanderName' => $requestingSoldier->team->commander->user->displayName, - ] - ), - [], - $requestingSoldier->user + NotificationAction::make('confirm') + ->label(__('Confirm')) + ->color('success') + ->icon('heroicon-s-hand-thumb-up') + ->button() + ->dispatch('confirmExchange', [ + 'approverRole' => 'shifts-assignment', + 'soldierAId' => $shiftA->soldier_id, + 'soldierBId' => $shiftB->soldier_id, + 'shiftAId' => $shiftA->id, + 'shiftBId' => $shiftB->id, + 'requesterId' => auth()->user()->id, + ]) + ->close(), + NotificationAction::make('deny') + ->label(__('Deny')) + ->color('danger') + ->icon('heroicon-m-hand-thumb-down') + ->button() + ->dispatch('denyExchange', [ + 'rejectorRole' => 'shifts-assignment', + 'soldierAId' => $shiftA->soldier_id, + 'soldierBId' => $shiftB->soldier_id, + 'shiftAId' => $shiftA->id, + 'shiftBId' => $shiftB->id, + 'requesterId' => auth()->user()->id, + 'sendToSoldiers' => true, + ]) + ->close(), + ], + $shiftsAssignment, + $shiftA->id.'-'.$shiftB->id + ) ); - } } - protected function soldierConfirmExchange($requestingSoldier, $approvingSoldier, $shiftA, $shiftB) + protected function soldierConfirmExchange($soldierAId, $soldierBId, $shiftAId, $shiftBId) { - $requestingSoldier = Soldier::find($requestingSoldier); - $approvingSoldier = Soldier::find($approvingSoldier); - $shiftA = Shift::find($shiftA); - $shiftB = Shift::find($shiftB); - $commander = $requestingSoldier->team->commander->user; + $soldierA = Soldier::find($soldierAId); + $soldierB = Soldier::find($soldierBId); + $shiftA = Shift::find($shiftAId); + $shiftB = Shift::find($shiftBId); + $commander = $soldierA->team->commander->user; $this->sendNotification( __('Request for shift exchange'), __( 'Request for shift exchange from commander', [ 'commanderName' => $commander->displayName, - 'requestingSoldierName' => $requestingSoldier->user->displayName, + 'soldierAName' => $soldierA->user->displayName, 'shiftAName' => $shiftA->task->name, 'shiftAStart' => $shiftA->start_date, 'shiftAEnd' => $shiftA->end_date, - 'approvingSoldierName' => $approvingSoldier->user->displayName, + 'soldierBName' => $soldierB->user->displayName, 'shiftBName' => $shiftB->task->name, 'shiftBStart' => $shiftB->start_date, 'shiftBEnd' => $shiftB->end_date, @@ -126,11 +216,12 @@ protected function soldierConfirmExchange($requestingSoldier, $approvingSoldier, ->icon('heroicon-s-hand-thumb-up') ->button() ->dispatch('confirmExchange', [ - 'approverRole' => 'commander', - 'requestingSoldier' => $requestingSoldier->id, - 'approvingSoldier' => $approvingSoldier->id, - 'shiftA' => $shiftA->id, - 'shiftB' => $shiftB->id, + 'approverRole' => 'team-commander', + 'soldierAId' => $soldierA->id, + 'soldierBId' => $soldierB->id, + 'shiftAId' => $shiftA->id, + 'shiftBId' => $shiftB->id, + 'requesterId' => auth()->user()->id, ]) ->close(), NotificationAction::make('deny') @@ -139,11 +230,13 @@ protected function soldierConfirmExchange($requestingSoldier, $approvingSoldier, ->icon('heroicon-m-hand-thumb-down') ->button() ->dispatch('denyExchange', [ - 'rejectorRole' => 'commander', - 'requestingSoldier' => $requestingSoldier->id, - 'rejectingSoldier' => $approvingSoldier->id, - 'shiftA' => $shiftA->id, - 'shiftB' => $shiftB->id, + 'rejectorRole' => 'team-commander', + 'soldierAId' => $soldierA->id, + 'soldierBId' => $soldierB->id, + 'shiftAId' => $shiftA->id, + 'shiftBId' => $shiftB->id, + 'requesterId' => auth()->user()->id, + 'sendToSoldiers' => true, ]) ->close(), ], @@ -152,201 +245,368 @@ protected function soldierConfirmExchange($requestingSoldier, $approvingSoldier, } #[On('denyExchange')] - public function denyExchange($rejectorRole, $requestingSoldier, $rejectingSoldier, $shiftA, $shiftB): void + public function denyExchange($rejectorRole, $soldierAId, $soldierBId, $shiftAId, $shiftBId, $requesterId, $sendToSoldiers): void { - $this->denyExchangeByRole($rejectorRole, $requestingSoldier, $rejectingSoldier, $shiftA, $shiftB); + $this->denyExchangeByRole($rejectorRole, $soldierAId, $soldierBId, $shiftAId, $shiftBId, $requesterId, $sendToSoldiers); } - protected function denyExchangeByRole($rejectorRole, $requestingSoldier, $rejectingSoldier, $shiftA, $shiftB) + protected function denyExchangeByRole($rejectorRole, $soldierAId, $soldierBId, $shiftAId, $shiftBId, $requesterId, $sendToSoldiers) { - $rejectorRole ? - $this->commanderDenyExchange($requestingSoldier, $rejectingSoldier, $shiftA, $shiftB) : - $this->soldierDenyExchange($requestingSoldier, $rejectingSoldier, $shiftA, $shiftB); + match ($rejectorRole) { + 'shifts-assignment' => $this->shiftAssignmentDenyExchange($soldierAId, $soldierBId, $shiftAId, $shiftBId, $requesterId, $sendToSoldiers), + 'team-commander', 'department-commander' => $this->commanderDenyExchange($soldierAId, $soldierBId, $shiftAId, $shiftBId), + 'soldier' => $this->soldierDenyExchange($soldierAId, $soldierBId, $shiftAId, $shiftBId) + }; } - protected function commanderDenyExchange($requestingSoldier, $rejectingSoldier, $shiftA, $shiftB) + protected function shiftAssignmentDenyExchange($soldierAId, $soldierBId, $shiftAId, $shiftBId, $requesterId, $sendToSoldiers) { - $requestingSoldier = Soldier::find($requestingSoldier); - $rejectingSoldier = Soldier::find($rejectingSoldier); - $shiftA = Shift::find($shiftA); - $shiftB = Shift::find($shiftB); - if ($requestingSoldier->team->commander->id !== $rejectingSoldier->id) { + $soldierA = Soldier::find($soldierAId); + $soldierB = Soldier::find($soldierBId); + $shiftA = Shift::find($shiftAId); + $shiftB = Shift::find($shiftBId); + $this->deleteNonRelevantNotifications($shiftAId.'-'.$shiftBId); + if ($sendToSoldiers) { $this->sendNotification( __('Deny exchange shift request'), __( - 'Commander notification of rejection exchange shift request for the requesting soldier', + 'Shifts assignment notification of deny exchanging shifts for first soldier', [ - 'requestingSoldierName' => $requestingSoldier->user->displayName, + 'soldierAName' => $soldierA->user->displayName, 'shiftAName' => $shiftA->task->name, 'shiftAStart' => $shiftA->start_date, 'shiftAEnd' => $shiftA->end_date, - 'rejectingSoldierName' => $rejectingSoldier->user->displayName, 'shiftBName' => $shiftB->task->name, + 'soldierBName' => $soldierB->user->displayName, 'shiftBStart' => $shiftB->start_date, 'shiftBEnd' => $shiftB->end_date, - 'commanderName' => $requestingSoldier->team->commander->user->displayName, + 'shiftsAssignmentName' => auth()->user()->displayName, ] ), [], - $requestingSoldier->user + $soldierA->user ); $this->sendNotification( __('Deny exchange shift request'), __( - 'Commander notification of rejection exchange shift request for the rejection soldier', + 'Shifts assignment notification of deny exchanging shifts for second soldier', [ - 'rejectingSoldierName' => $rejectingSoldier->user->displayName, - 'requestingSoldierName' => $requestingSoldier->user->displayName, + 'soldierBName' => $soldierB->user->displayName, + 'soldierAName' => $soldierA->user->displayName, + 'shiftAName' => $shiftA->task->name, + 'shiftAStart' => $shiftA->start_date, + 'shiftAEnd' => $shiftA->end_date, 'shiftBName' => $shiftB->task->name, 'shiftBStart' => $shiftB->start_date, 'shiftBEnd' => $shiftB->end_date, + 'shiftsAssignmentName' => auth()->user()->displayName, + ] + ), + [], + $soldierB->user + ); + } + $this->sendNotification( + __('Deny exchange shift request'), + __( + 'Shifts assignment notification of deny exchanging shifts for commander', + [ + 'commanderName' => User::find($requesterId)->displayName, + 'shiftAName' => $shiftA->task->name, + 'soldierAName' => $soldierA->user->displayName, + 'shiftAStart' => $shiftA->start_date, + 'shiftAEnd' => $shiftA->end_date, + 'shiftBName' => $shiftB->task->name, + 'soldierBName' => $soldierB->user->displayName, + 'shiftBStart' => $shiftB->start_date, + 'shiftBEnd' => $shiftB->end_date, + 'shiftsAssignmentName' => auth()->user()->displayName, + ] + ), + [], + User::find($requesterId) + ); + $this->getShiftsAssignments() + ->filter(fn ($shiftsAssignment) => $shiftsAssignment->id !== auth()->user()->id) + ->map( + fn ($shiftsAssignment) => $this->sendNotification( + __('Deny exchange shift request'), + __( + 'Shifts assignment notification of deny exchanging shifts for shifts assignment', + [ + 'shiftsAssignmentName' => $shiftsAssignment->displayName, + 'shiftAName' => $shiftA->task->name, + 'soldierAName' => $soldierA->user->displayName, + 'shiftAStart' => $shiftA->start_date, + 'shiftAEnd' => $shiftA->end_date, + 'shiftBName' => $shiftB->task->name, + 'soldierBName' => $soldierB->user->displayName, + 'shiftBStart' => $shiftB->start_date, + 'shiftBEnd' => $shiftB->end_date, + 'shiftsAssignment2Name' => auth()->user()->displayName, + ] + ), + [], + $shiftsAssignment + ) + ); + } + + protected function commanderDenyExchange($soldierAId, $soldierBId, $shiftAId, $shiftBId) + { + $soldierA = Soldier::find($soldierAId); + $soldierB = Soldier::find($soldierBId); + $shiftA = Shift::find($shiftAId); + $shiftB = Shift::find($shiftBId); + if ($soldierA->team->commander->id !== $soldierB->id) { + $this->sendNotification( + __('Deny exchange shift request'), + __( + 'Commander notification of deny exchanging shifts for the first soldier', + [ + 'soldierAName' => $soldierA->user->displayName, 'shiftAName' => $shiftA->task->name, 'shiftAStart' => $shiftA->start_date, 'shiftAEnd' => $shiftA->end_date, - 'commanderName' => $requestingSoldier->team->commander->user->displayName, + 'soldierBName' => $soldierB->user->displayName, + 'shiftBName' => $shiftB->task->name, + 'shiftBStart' => $shiftB->start_date, + 'shiftBEnd' => $shiftB->end_date, + 'commanderName' => $soldierA->team->commander->user->displayName, ] ), [], - $rejectingSoldier->user + $soldierA->user + ); + $this->sendNotification( + __('Deny exchange shift request'), + __( + 'Commander notification of deny exchanging shifts for the second soldier', + [ + 'soldierBName' => $soldierB->user->displayName, + 'soldierAName' => $soldierA->user->displayName, + 'shiftBName' => $shiftB->task->name, + 'shiftBStart' => $shiftB->start_date, + 'shiftBEnd' => $shiftB->end_date, + 'shiftAName' => $shiftA->task->name, + 'shiftAStart' => $shiftA->start_date, + 'shiftAEnd' => $shiftA->end_date, + 'commanderName' => $soldierA->team->commander->user->displayName, + ] + ), + [], + $soldierB->user ); } else { $this->sendNotification( __('Deny exchange shift request'), __( - 'Commander notification of rejection exchange shift request for the requesting soldier', + 'Commander notification of deny exchanging shifts for the first soldier', [ - 'requestingSoldierName' => $requestingSoldier->user->displayName, + 'soldierAName' => $soldierA->user->displayName, 'shiftAName' => $shiftA->task->name, 'shiftAStart' => $shiftA->start_date, 'shiftAEnd' => $shiftA->end_date, - 'rejectingSoldierName' => $rejectingSoldier->user->displayName, + 'soldierBName' => $soldierB->user->displayName, 'shiftBName' => $shiftB->task->name, 'shiftBStart' => $shiftB->start_date, 'shiftBEnd' => $shiftB->end_date, - 'commanderName' => $requestingSoldier->team->commander->user->displayName, + 'commanderName' => $soldierA->team->commander->user->displayName, ] ), [], - $requestingSoldier->user + $soldierA->user ); } } - protected function soldierDenyExchange($requestingSoldier, $rejectingSoldier, $shiftA, $shiftB) + protected function soldierDenyExchange($soldierAId, $soldierBId, $shiftAId, $shiftBId) { - $requestingSoldier = Soldier::find($requestingSoldier); - $rejectingSoldier = Soldier::find($rejectingSoldier); - $shiftA = Shift::find($shiftA); - $shiftB = Shift::find($shiftB); + $soldierA = Soldier::find($soldierAId); + $soldierB = Soldier::find($soldierBId); + $shiftA = Shift::find($shiftAId); + $shiftB = Shift::find($shiftBId); $this->sendNotification( __('Deny exchange shift request'), __( - 'Soldier notification of rejection exchange shift request', + 'Soldier notification of deny exchange shift request', [ - 'requestingSoldierName' => $requestingSoldier->user->displayName, + 'soldierAName' => $soldierA->user->displayName, 'shiftBName' => $shiftB->task->name, 'shiftBStart' => $shiftB->start_date, 'shiftBEnd' => $shiftB->end_date, 'shiftAName' => $shiftA->task->name, 'shiftAStart' => $shiftA->start_date, 'shiftAEnd' => $shiftA->end_date, - 'rejectingSoldierName' => $rejectingSoldier->user->displayName, + 'soldierBName' => $soldierB->user->displayName, ] ), [], - $requestingSoldier->user + $soldierA->user ); } #[On('confirmChange')] - public function confirmChange($approverRole, $shift, $soldierId) + public function confirmChange($approverRole, $shiftId, $soldierId, $requesterId) { - $this->confirmChangeByRole($approverRole, $shift, $soldierId); + $this->confirmChangeByRole($approverRole, $shiftId, $soldierId, $requesterId); } - protected function confirmChangeByRole($approverRole, $shift, $soldierId) + protected function confirmChangeByRole($approverRole, $shiftId, $soldierId, $requesterId) { - $approverRole ? - $this->commanderConfirmChange($shift, $soldierId) : - $this->soldierConfirmChange($shift, $soldierId); + match ($approverRole) { + 'shifts-assignment' => $this->shiftAssignmentConfirmChange($shiftId, $soldierId, $requesterId), + 'team-commander', 'department-commander' => $this->commanderConfirmChange($shiftId, $soldierId), + 'soldier' => $this->soldierConfirmChange($shiftId, $soldierId) + }; } - protected function commanderConfirmChange($shift, $soldierId) + protected function shiftAssignmentConfirmChange($shiftId, $soldierId, $requesterId) { - $shift = Shift::find($shift); - $requestingSoldier = Soldier::find($shift->soldier_id); - $approvingSoldier = Soldier::find($soldierId); - Shift::where('id', $shift->id)->update(['soldier_id' => $soldierId]); $this->dispatch('filament-fullcalendar--refresh'); - if ($requestingSoldier->team->commander->id !== $approvingSoldier->id) { - $this->sendNotification( - __('Approve change shift request'), - __( - 'Commander notification of approving change shift request for the requesting soldier', - [ - 'requestingSoldierName' => $requestingSoldier->user->displayName, - 'shiftName' => $shift->task->name, - 'shiftStart' => $shift->start_date, - 'shiftEnd' => $shift->end_date, - 'commanderName' => $requestingSoldier->team->commander->user->displayName, - ] - ), - [], - $requestingSoldier->user - ); - $this->sendNotification( - __('Approve change shift request'), - __( - 'Commander notification of approving change shift request for the approving soldier', - [ - 'approvingSoldierName' => $approvingSoldier->user->displayName, - 'requestingSoldierName' => $requestingSoldier->user->displayName, - 'shiftName' => $shift->task->name, - 'shiftStart' => $shift->start_date, - 'shiftEnd' => $shift->end_date, - 'commanderName' => $requestingSoldier->team->commander->user->displayName, - ] - ), - [], - $approvingSoldier->user + $shift = Shift::find($shiftId); + $soldierA = Soldier::find($shift->soldier_id); + $soldierB = Soldier::find($soldierId); + $this->deleteNonRelevantNotifications($shiftId.'-'.$shift->soldier_id.'-'.$soldierId); + Shift::where('id', $shiftId)->update(['soldier_id' => $soldierId]); + $this->sendNotification( + __('Change shift'), + __( + 'Shifts assignment notification of changing shifts for first soldier', + [ + 'soldierName' => $soldierA->user->displayName, + 'shiftName' => $shift->task->name, + 'shiftStart' => $shift->start_date, + 'shiftEnd' => $shift->end_date, + 'shiftsAssignmentName' => auth()->user()->displayName, + ] + ), + [], + $soldierA->user + ); + $this->sendNotification( + __('Change shift'), + __( + 'Shifts assignment notification of changing shifts for second soldier', + [ + 'soldierName' => $soldierB->user->displayName, + 'shiftName' => $shift->task->name, + 'shiftStart' => $shift->start_date, + 'shiftEnd' => $shift->end_date, + 'shiftsAssignmentName' => auth()->user()->displayName, + ] + ), + [], + $soldierB->user + ); + $this->sendNotification( + __('Change shift'), + __( + 'Shifts assignment notification of changing shifts for commander', + [ + 'commanderName' => User::find($requesterId)->displayName, + 'shiftName' => $shift->task->name, + 'soldierAName' => $soldierA->user->displayName, + 'shiftStart' => $shift->start_date, + 'shiftEnd' => $shift->end_date, + 'soldierBName' => $soldierB->user->displayName, + 'shiftsAssignmentName' => auth()->user()->displayName, + ] + ), + [], + User::find($requesterId) + ); + $this->getShiftsAssignments() + ->filter(fn ($shiftsAssignment) => $shiftsAssignment->id !== auth()->user()->id) + ->map( + fn ($shiftsAssignment) => $this->sendNotification( + __('Change shift'), + __( + 'Shifts assignment notification of changing shifts for shifts assignment', + [ + 'shiftsAssignmentName' => $shiftsAssignment->displayName, + 'shiftName' => $shift->task->name, + 'soldierAName' => $soldierA->user->displayName, + 'shiftStart' => $shift->start_date, + 'shiftEnd' => $shift->end_date, + 'soldierBName' => $soldierB->user->displayName, + 'shiftsAssignment2Name' => auth()->user()->displayName, + ] + ), + [], + $shiftsAssignment + ) ); - } else { - $this->sendNotification( - __('Approve change shift request'), - __( - 'Commander notification of approving change shift request for the requesting soldier', + } + + protected function commanderConfirmChange($shiftId, $soldierId) + { + $shift = Shift::find($shiftId); + $this->getShiftsAssignments() + ->map( + fn ($shiftsAssignment) => $this->sendNotification( + __('Request for shift change'), + __( + 'Request for shift change from shifts assignments', + [ + 'shiftsAssignmentName' => $shiftsAssignment->displayName, + 'shiftName' => $shift->task->name, + 'soldierAName' => Soldier::find($shift->soldier_id)->user->displayName, + 'shiftStart' => $shift->start_date, + 'shiftEnd' => $shift->end_date, + 'soldierBName' => Soldier::find($soldierId)->user->displayName, + ] + ), [ - 'requestingSoldierName' => $requestingSoldier->user->displayName, - 'shiftName' => $shift->task->name, - 'shiftStart' => $shift->start_date, - 'shiftEnd' => $shift->end_date, - 'commanderName' => $requestingSoldier->team->commander->user->displayName, - ] - ), - [], - $requestingSoldier->user + NotificationAction::make('confirm') + ->label(__('Confirm')) + ->color('success') + ->icon('heroicon-s-hand-thumb-up') + ->button() + ->dispatch('confirmChange', [ + 'approverRole' => 'shifts-assignment', + 'shiftId' => $shift->id, + 'soldierId' => $soldierId, + 'requesterId' => auth()->user()->id, + ]) + ->close(), + NotificationAction::make('deny') + ->label(__('Deny')) + ->color('danger') + ->icon('heroicon-m-hand-thumb-down') + ->button() + ->dispatch('denyChange', [ + 'rejectorRole' => 'shifts-assignment', + 'shiftId' => $shift->id, + 'soldierId' => $soldierId, + 'requesterId' => auth()->user()->id, + 'sendToSoldiers' => true, + ]) + ->close(), + ], + $shiftsAssignment, + $shift->id.'-'.$shift->soldier_id.'-'.$soldierId + ) ); - } } - protected function soldierConfirmChange($shift, $soldierId) + protected function soldierConfirmChange($shiftId, $soldierId) { - $shift = Shift::find($shift); - $requestingSoldier = Soldier::find($shift->soldier_id); - $approvingSoldier = Soldier::find($soldierId); - - $commander = $requestingSoldier->team->commander->user; + $shift = Shift::find($shiftId); + $soldierA = Soldier::find($shift->soldier_id); + $soldierB = Soldier::find($soldierId); + $commander = $soldierA->team->commander->user; $this->sendNotification( __('Request for shift change'), __( 'Request for shift change from commander', [ 'commanderName' => $commander->displayName, - 'requestingSoldierName' => $requestingSoldier->user->displayName, + 'soldierAName' => $soldierA->user->displayName, 'shiftName' => $shift->task->name, 'shiftStart' => $shift->start_date, 'shiftEnd' => $shift->end_date, - 'approvingSoldierName' => $approvingSoldier->user->displayName, + 'soldierBName' => $soldierB->user->displayName, ] ), [ @@ -356,9 +616,10 @@ protected function soldierConfirmChange($shift, $soldierId) ->icon('heroicon-s-hand-thumb-up') ->button() ->dispatch('confirmChange', [ - 'approverRole' => 'commander', - 'shift' => $shift->id, + 'approverRole' => 'team-commander', + 'shiftId' => $shift->id, 'soldierId' => $soldierId, + 'requesterId' => auth()->user()->id, ]) ->close(), NotificationAction::make('deny') @@ -367,9 +628,11 @@ protected function soldierConfirmChange($shift, $soldierId) ->icon('heroicon-m-hand-thumb-down') ->button() ->dispatch('denyChange', [ - 'rejectorRole' => 'commander', - 'shift' => $shift->id, + 'rejectorRole' => 'team-commander', + 'shiftId' => $shift->id, 'soldierId' => $soldierId, + 'requesterId' => auth()->user()->id, + 'sendToSoldiers' => true, ]) ->close(), ], @@ -378,109 +641,202 @@ protected function soldierConfirmChange($shift, $soldierId) } #[On('denyChange')] - public function denyChange($rejectorRole, $shift, $soldierId): void + public function denyChange($rejectorRole, $shiftId, $soldierId, $requesterId, $sendToSoldiers): void { - $this->denyChangeByRole($rejectorRole, $shift, $soldierId); + $this->denyChangeByRole($rejectorRole, $shiftId, $soldierId, $requesterId, $sendToSoldiers); } - protected function denyChangeByRole($rejectorRole, $shift, $soldierId) + protected function denyChangeByRole($rejectorRole, $shiftId, $soldierId, $requesterId, $sendToSoldiers) { - $rejectorRole ? - $this->commanderDenyChange($shift, $soldierId) : - $this->soldierDenyChange($shift, $soldierId); + match ($rejectorRole) { + 'shifts-assignment' => $this->shiftAssignmentDenyChange($shiftId, $soldierId, $requesterId, $sendToSoldiers), + 'team-commander', 'department-commander' => $this->commanderDenyChange($shiftId, $soldierId), + 'soldier' => $this->soldierDenyChange($shiftId, $soldierId) + }; } - protected function commanderDenyChange($shift, $soldierId) + protected function shiftAssignmentDenyChange($shiftId, $soldierId, $requesterId, $sendToSoldiers) { - $shift = Shift::find($shift); - $requestingSoldier = Soldier::find($shift->soldier_id); - $approvingSoldier = Soldier::find($soldierId); - if ($requestingSoldier->team->commander->id !== $approvingSoldier->id) { + $shift = Shift::find($shiftId); + $soldierA = Soldier::find($shift->soldier_id); + $soldierB = Soldier::find($soldierId); + $this->deleteNonRelevantNotifications($shiftId.'-'.$shift->soldier_id.'-'.$soldierId); + if ($sendToSoldiers) { $this->sendNotification( __('Deny change shift request'), __( - 'Commander notification of rejection change shift request for the requesting soldier', + 'Shifts assignment notification of deny changing shifts for first soldier', [ - 'requestingSoldierName' => $requestingSoldier->user->displayName, + 'soldierAName' => $soldierA->user->displayName, 'shiftName' => $shift->task->name, 'shiftStart' => $shift->start_date, 'shiftEnd' => $shift->end_date, - 'approvingSoldierName' => $approvingSoldier->user->displayName, - 'commanderName' => $requestingSoldier->team->commander->user->displayName, + 'soldierBName' => $soldierB->user->displayName, + 'shiftsAssignmentName' => auth()->user()->displayName, ] ), [], - $requestingSoldier->user + $soldierA->user ); $this->sendNotification( __('Deny change shift request'), __( - 'Commander notification of rejection change shift request for the approving soldier', + 'Shifts assignment notification of deny changing shifts for second soldier', [ - 'approvingSoldierName' => $approvingSoldier->user->displayName, - 'requestingSoldierName' => $requestingSoldier->user->displayName, + 'soldierBName' => $soldierB->user->displayName, + 'soldierAName' => $soldierA->user->displayName, 'shiftName' => $shift->task->name, 'shiftStart' => $shift->start_date, 'shiftEnd' => $shift->end_date, - 'commanderName' => $requestingSoldier->team->commander->user->displayName, + 'shiftsAssignmentName' => auth()->user()->displayName, ] ), [], - $approvingSoldier->user + $soldierB->user + ); + } + $this->sendNotification( + __('Deny change shift request'), + __( + 'Shifts assignment notification of deny changing shifts for commander', + [ + 'commanderName' => User::find($requesterId)->displayName, + 'shiftName' => $shift->task->name, + 'soldierAName' => $soldierA->user->displayName, + 'shiftStart' => $shift->start_date, + 'shiftEnd' => $shift->end_date, + 'soldierBName' => $soldierB->user->displayName, + 'shiftsAssignmentName' => auth()->user()->displayName, + ] + ), + [], + User::find($requesterId) + ); + $this->getShiftsAssignments() + ->filter(fn ($shiftsAssignment) => $shiftsAssignment->id !== auth()->user()->id) + ->map( + fn ($shiftsAssignment) => $this->sendNotification( + __('Deny change shift request'), + __( + 'Shifts assignment notification of deny changing shifts for shifts assignment', + [ + 'shiftsAssignmentName' => $shiftsAssignment->displayName, + 'shiftName' => $shift->task->name, + 'soldierAName' => $soldierA->user->displayName, + 'shiftStart' => $shift->start_date, + 'shiftEnd' => $shift->end_date, + 'soldierBName' => $soldierB->user->displayName, + 'shiftsAssignment2Name' => auth()->user()->displayName, + ] + ), + [], + $shiftsAssignment + ) + ); + } + + protected function commanderDenyChange($shiftId, $soldierId) + { + $shift = Shift::find($shiftId); + $soldierA = Soldier::find($shift->soldier_id); + $soldierB = Soldier::find($soldierId); + if ($soldierA->team->commander->id !== $soldierB->id) { + $this->sendNotification( + __('Deny change shift request'), + __( + 'Commander notification of deny changing shift request for the first soldier', + [ + 'soldierAName' => $soldierA->user->displayName, + 'shiftName' => $shift->task->name, + 'shiftStart' => $shift->start_date, + 'shiftEnd' => $shift->end_date, + 'soldierBName' => $soldierB->user->displayName, + 'commanderName' => $soldierA->team->commander->user->displayName, + ] + ), + [], + $soldierA->user + ); + $this->sendNotification( + __('Deny change shift request'), + __( + 'Commander notification of deny changing shift request for the second soldier', + [ + 'soldierBName' => $soldierB->user->displayName, + 'soldierAName' => $soldierA->user->displayName, + 'shiftName' => $shift->task->name, + 'shiftStart' => $shift->start_date, + 'shiftEnd' => $shift->end_date, + 'commanderName' => $soldierA->team->commander->user->displayName, + ] + ), + [], + $soldierB->user ); } else { $this->sendNotification( __('Deny change shift request'), __( - 'Commander notification of rejection change shift request for the requesting soldier', + 'Commander notification of deny changing shift request for the first soldier', [ - 'requestingSoldierName' => $requestingSoldier->user->displayName, + 'soldierAName' => $soldierA->user->displayName, 'shiftName' => $shift->task->name, 'shiftStart' => $shift->start_date, 'shiftEnd' => $shift->end_date, - 'approvingSoldierName' => $approvingSoldier->user->displayName, - 'commanderName' => $requestingSoldier->team->commander->user->displayName, + 'soldierBName' => $soldierB->user->displayName, + 'commanderName' => $soldierA->team->commander->user->displayName, ] ), [], - $requestingSoldier->user + $soldierA->user ); } } - protected function soldierDenyChange($shift, $soldierId) + protected function soldierDenyChange($shiftId, $soldierId) { - $shift = Shift::find($shift); - $requestingSoldier = Soldier::find($shift->soldier_id); - $rejectingSoldier = Soldier::find($soldierId); + $shift = Shift::find($shiftId); + $soldierA = Soldier::find($shift->soldier_id); + $soldierB = Soldier::find($soldierId); $this->sendNotification( __('Deny change shift request'), __( - 'Soldier notification of rejection change shift request', + 'Soldier notification of deny changing shift request', [ - 'requestingSoldierName' => $requestingSoldier->user->displayName, + 'soldierAName' => $soldierA->user->displayName, 'shiftName' => $shift->task->name, 'shiftStart' => $shift->start_date, 'shiftEnd' => $shift->end_date, - 'rejectingSoldierName' => $rejectingSoldier->user->displayName, + 'soldierBName' => $soldierB->user->displayName, ] ), [], - $requestingSoldier->user + $soldierA->user ); } - protected function sendNotification($title, $body, $actions, $user) + protected function deleteNonRelevantNotifications($commonKey) + { + \DB::table('notifications') + ->where('data->commonKey', $commonKey) + ->delete(); + } + + protected static function getShiftsAssignments() + { + return User::whereHas('roles', function ($query) { + $query->where('name', 'shifts-assignment'); + })->get(); + } + + protected function sendNotification($title, $body, $actions, $user, $commonKey = null) { - Notification::make() + MyNotification::make() + ->commonKey($commonKey) ->title($title) ->persistent() - ->body( - $body - ) - ->actions( - $actions - ) + ->body($body) + ->actions($actions) ->sendToDatabase($user, true); } } diff --git a/app/Models/Constraint.php b/app/Models/Constraint.php index 8abbe32..fc77d91 100644 --- a/app/Models/Constraint.php +++ b/app/Models/Constraint.php @@ -15,6 +15,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; +use Illuminate\Support\Facades\DB; class Constraint extends Model { @@ -86,13 +87,14 @@ private static function availableOptions($startDate, $endDate): array unset($options[ConstraintType::LOW_PRIORITY_NOT_WEEKEND->value]); } $usedCounts = self::getUsedCountsForCurrentMonth($startDate, $endDate); - $limits = Soldier::where('id', auth()->user()->userable_id)->pluck('constraints_limit')->first() + $limits =Soldier::where('id', auth()->user()->userable_id)->pluck('constraints_limit')->first() ? Soldier::where('id', auth()->user()->userable_id)->pluck('constraints_limit')->first() : ConstraintType::getLimit(); $constraintsWithinLimit = []; foreach ($options as $constraint => $label) { $used = $usedCounts[$constraint] ?? 0; $limit = $limits[$constraint] ?? 0; + if ($limit === 0 || $used < $limit) { $constraintsWithinLimit[$constraint] = $label; } @@ -109,7 +111,6 @@ public static function getAvailableOptions($startDate, $endDate): array private static function getUsedCountsForCurrentMonth($startDate, $endDate): array { - foreach (ConstraintType::cases() as $enum) { $usedCount = Constraint::where('soldier_id', auth()->user()->userable_id) ->where('constraint_type', $enum->value) diff --git a/app/Models/Shift.php b/app/Models/Shift.php index 2a75ad0..1003bed 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -3,6 +3,7 @@ namespace App\Models; use App\Casts\Integer; +use App\Filament\Notifications\MyNotification; use App\Services\ChangeAssignment; use App\Services\ManualAssignment; use Cache; @@ -19,7 +20,6 @@ use Filament\Forms\Components\ToggleButtons; use Filament\Forms\Get; use Filament\Notifications\Actions\Action as NotificationAction; -use Filament\Notifications\Notification; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; @@ -82,9 +82,7 @@ public static function getSchema(): array ->options( fn (?Shift $shift) => self::getOptions($shift) ) - ->afterStateUpdated(function (callable $set) { - $set('soldier_id', null); - }), + ->afterStateUpdated(fn (callable $set) => $set('soldier_id', null)), Select::make('soldier_id') ->label(__('Soldier assignment')) ->options( @@ -169,7 +167,7 @@ protected static function getOptions($shift): array ->put('me', __('Me')) ->toArray(); } - if (current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) != 'manager' || current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) != 'shifts-assignment') { + if (current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) != 'manager' && current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) != 'shifts-assignment') { return collect($options) ->put('my_soldiers', __('My Soldiers')) ->toArray(); @@ -237,7 +235,7 @@ function ($shift) { ) ->extraModalFooterActions(function (Action $action) { return [ - $action->makeExtraModalAction('exchange', ['exchange' => true]) + $action->makeExtraModalAction('exchange', ['exchange' => true, 'role' => auth()->user()->getRoleNames()]) ->label(__('Exchange assignment')) ->icon('heroicon-s-arrow-path') ->color('primary') @@ -254,7 +252,9 @@ function ($shift) { ->action(function (array $data, array $arguments, Model $record, Component $livewire): void { session()->put('selected_shift', false); if ($arguments['exchange'] ?? false) { - self::commanderExchange($record, Shift::find($data['selected_shift'])); + collect($arguments['role'])->contains('shifts-assignment') ? + self::shiftsAssignmentExchange($record, Shift::find($data['selected_shift'])) : + self::commanderExchange($record, Shift::find($data['selected_shift'])); $livewire->dispatch('filament-fullcalendar--refresh'); } if ($arguments['request'] ?? false) { @@ -267,77 +267,136 @@ function ($shift) { }); } - protected static function commanderExchange($record, $shift) + protected static function shiftsAssignmentExchange($record, $shift) { - self::sendExchangeNotifications($record, $shift); + self::shiftsAssignmentSendExchangeNotifications($record, $shift); $changeAssignment = new ChangeAssignment($record); $changeAssignment->exchange($shift); } - protected static function sendExchangeNotifications($shiftA, $shiftB) + protected static function shiftsAssignmentSendExchangeNotifications($shiftA, $shiftB) { $soldierA = Soldier::find($shiftA->soldier_id); $soldierB = Soldier::find($shiftB->soldier_id); - if ($soldierA->id !== auth()->user()->userable_id) { - self::sendNotification( - __('Exchange shift'), - __( - 'Commander notification of exchanging shifts for first soldier', - [ - 'soldierAName' => $soldierA->user->displayName, - 'shiftAName' => $shiftA->task->name, - 'shiftAStart' => $shiftA->start_date, - 'shiftAEnd' => $shiftA->end_date, - 'soldierBName' => $soldierB->user->displayName, - 'shiftBName' => $shiftB->task->name, - 'shiftBStart' => $shiftB->start_date, - 'shiftBEnd' => $shiftB->end_date, - 'commander' => auth()->user()->displayName, - ] - ), - [], - $soldierA->user - ); - self::sendNotification( - __('Exchange shift'), - __( - 'Commander notification of exchanging shifts for second soldier', - [ - 'soldierBName' => $soldierB->user->displayName, - 'shiftBName' => $shiftB->task->name, - 'shiftBStart' => $shiftB->start_date, - 'shiftBEnd' => $shiftB->end_date, - 'soldierAName' => $soldierA->user->displayName, - 'shiftAName' => $shiftA->task->name, - 'shiftAStart' => $shiftA->start_date, - 'shiftAEnd' => $shiftA->end_date, - 'commander' => auth()->user()->displayName, - ] - ), - [], - $soldierB->user + self::sendNotification( + __('Exchange shift'), + __( + 'Shifts assignment notification of exchanging shifts for first soldier', + [ + 'soldierAName' => $soldierA->user->displayName, + 'shiftAName' => $shiftA->task->name, + 'shiftAStart' => $shiftA->start_date, + 'shiftAEnd' => $shiftA->end_date, + 'soldierBName' => $soldierB->user->displayName, + 'shiftBName' => $shiftB->task->name, + 'shiftBStart' => $shiftB->start_date, + 'shiftBEnd' => $shiftB->end_date, + 'shiftsAssignmentName' => auth()->user()->displayName, + ] + ), + [], + $soldierA->user + ); + self::sendNotification( + __('Exchange shift'), + __( + 'Shifts assignment notification of exchanging shifts for second soldier', + [ + 'soldierBName' => $soldierB->user->displayName, + 'shiftBName' => $shiftB->task->name, + 'shiftBStart' => $shiftB->start_date, + 'shiftBEnd' => $shiftB->end_date, + 'soldierAName' => $soldierA->user->displayName, + 'shiftAName' => $shiftA->task->name, + 'shiftAStart' => $shiftA->start_date, + 'shiftAEnd' => $shiftA->end_date, + 'shiftsAssignmentName' => auth()->user()->displayName, + ] + ), + [], + $soldierB->user + ); + self::getShiftsAssignments() + ->filter(fn ($shiftsAssignment) => $shiftsAssignment->id !== auth()->user()->id) + ->map( + fn ($shiftsAssignment) => self::sendNotification( + __('Exchange shift'), + __( + 'Shifts assignment notification of exchanging shifts for shifts assignment', + [ + 'shiftsAssignmentName' => $shiftsAssignment->displayName, + 'shiftAName' => $shiftA->task->name, + 'soldierAName' => $soldierA->user->displayName, + 'shiftAStart' => $shiftA->start_date, + 'shiftAEnd' => $shiftA->end_date, + 'soldierBName' => $soldierB->user->displayName, + 'shiftBName' => $shiftB->task->name, + 'shiftBStart' => $shiftB->start_date, + 'shiftBEnd' => $shiftB->end_date, + 'shiftsAssignment2Name' => auth()->user()->displayName, + ] + ), + [], + $shiftsAssignment + ) ); - } else { - self::sendNotification( - __('Exchange shift'), - __( - 'Commander notification of exchanging shifts for second soldier', + } + + protected static function commanderExchange($record, $shift) + { + self::getShiftsAssignments() + ->map( + fn ($shiftsAssignment) => self::sendNotification( + __('Request for shift exchange'), + __( + 'Request for shift exchange from shifts assignments', + [ + 'shiftsAssignmentName' => $shiftsAssignment->displayName, + 'soldierAName' => Soldier::find($record->soldier_id)->user->displayName, + 'shiftAName' => $record->task->name, + 'shiftAStart' => $record->start_date, + 'shiftAEnd' => $record->end_date, + 'soldierBName' => Soldier::find($shift->soldier_id)->user->displayName, + 'shiftBName' => $shift->task->name, + 'shiftBStart' => $shift->start_date, + 'shiftBEnd' => $shift->end_date, + ] + ), [ - 'soldierBName' => $soldierB->user->displayName, - 'shiftBName' => $shiftB->task->name, - 'shiftBStart' => $shiftB->start_date, - 'shiftBEnd' => $shiftB->end_date, - 'soldierAName' => $soldierA->user->displayName, - 'shiftAName' => $shiftA->task->name, - 'shiftAStart' => $shiftA->start_date, - 'shiftAEnd' => $shiftA->end_date, - 'commander' => auth()->user()->displayName, - ] - ), - [], - $soldierB->user + NotificationAction::make('confirm') + ->label(__('Confirm')) + ->color('success') + ->icon('heroicon-s-hand-thumb-up') + ->button() + ->dispatch('confirmExchange', [ + 'approverRole' => 'shifts-assignment', + 'soldierAId' => $record->soldier_id, + 'soldierBId' => $shift->soldier_id, + 'shiftAId' => $record->id, + 'shiftBId' => $shift->id, + 'requesterId' => auth()->user()->id, + ]) + ->close(), + NotificationAction::make('deny') + ->label(__('Deny')) + ->color('danger') + ->icon('heroicon-m-hand-thumb-down') + ->button() + ->dispatch('denyExchange', [ + 'rejectorRole' => 'shifts-assignment', + 'soldierAId' => $record->soldier_id, + 'soldierBId' => $shift->soldier_id, + 'shiftAId' => $record->id, + 'shiftBId' => $shift->id, + 'requesterId' => auth()->user()->id, + 'sendToSoldiers' => false, + ]) + ->close(), + ], + $shiftsAssignment, + $record->id.'-'.$shift->id + ) ); - } } protected static function soldierExchange($record, $shift) @@ -366,10 +425,11 @@ protected static function soldierExchange($record, $shift) ->button() ->dispatch('confirmExchange', [ 'approverRole' => current(array_diff(collect(Soldier::find($shift->soldier_id)->user->getRoleNames())->toArray(), ['soldier'])), - 'requestingSoldier' => $record->soldier_id, - 'approvingSoldier' => $shift->soldier_id, - 'shiftA' => $record->id, - 'shiftB' => $shift->id, + 'soldierAId' => $record->soldier_id, + 'soldierBId' => $shift->soldier_id, + 'shiftAId' => $record->id, + 'shiftBId' => $shift->id, + 'requesterId' => null, ]) ->close(), NotificationAction::make('deny') @@ -379,10 +439,12 @@ protected static function soldierExchange($record, $shift) ->button() ->dispatch('denyExchange', [ 'rejectorRole' => current(array_diff(collect(Soldier::find($shift->soldier_id)->user->getRoleNames())->toArray(), ['soldier'])), - 'requestingSoldier' => $record->soldier_id, - 'rejectingSoldier' => $shift->soldier_id, - 'shiftA' => $record->id, - 'shiftB' => $shift->id, + 'soldierAId' => $record->soldier_id, + 'soldierBId' => $shift->soldier_id, + 'shiftAId' => $record->id, + 'shiftBId' => $shift->id, + 'requesterId' => null, + 'sendToSoldiers' => true, ]) ->close(), ], @@ -461,7 +523,7 @@ function ($record) use (&$soldiers) { ->extraModalFooterActions( function (Action $action): array { return [ - $action->makeExtraModalAction('change', ['change' => true]) + $action->makeExtraModalAction('change', ['change' => true, 'role' => auth()->user()->getRoleNames()]) ->label(__('Change assignment')) ->icon('heroicon-o-arrow-uturn-up') ->color('primary') @@ -479,7 +541,10 @@ function (Action $action): array { ->action(function (array $data, array $arguments, Model $record, Component $livewire): void { session()->put('selected_soldier', false); if ($arguments['change'] ?? false) { - self::commanderChange($record, $data['soldier']); + collect($arguments['role'])->contains('shifts-assignment') ? + self::shiftsAssignmentChange($record, $data['soldier']) : + self::commanderChange($record, $data['soldier']); + $livewire->dispatch('filament-fullcalendar--refresh'); } if ($arguments['request'] ?? false) { @@ -492,63 +557,117 @@ function (Action $action): array { }); } - protected static function commanderChange($shift, $soldierId) + protected static function shiftsAssignmentChange($shift, $soldierId) { - self::sendChangeNotifications($shift, $soldierId); + self::shiftsAssignmentSendChangeNotifications($shift, $soldierId); Shift::where('id', $shift->id)->update(['soldier_id' => $soldierId]); } - protected static function sendChangeNotifications($shift, $soldierId) + protected static function shiftsAssignmentSendChangeNotifications($shift, $soldierId) { - $soldier = Soldier::find($soldierId); - if ($shift->soldier_id !== auth()->user()->userable_id) { - self::sendNotification( - __('Change assignment'), - __( - 'Commander notification of changing shifts for first soldier', - [ - 'soldierName' => $soldier->user->displayName, - 'shiftName' => $shift->task->name, - 'shiftStart' => $shift->start_date, - 'shiftEnd' => $shift->end_date, - 'commander' => auth()->user()->displayName, - ] - ), - [], - $soldier->user - ); - self::sendNotification( - __('Change assignment'), - __( - 'Commander notification of changing shifts for second soldier', - [ - 'soldierName' => Soldier::find($shift->soldier_id)->user->displayName, - 'shiftName' => $shift->task->name, - 'shiftStart' => $shift->start_date, - 'shiftEnd' => $shift->end_date, - 'commander' => auth()->user()->displayName, - ] - ), - [], - Soldier::find($shift->soldier_id)->user + $soldierA = Soldier::find($shift->soldier_id); + $soldierB = Soldier::find($soldierId); + self::sendNotification( + __('Change shift'), + __( + 'Shifts assignment notification of changing shifts for first soldier', + [ + 'soldierName' => $soldierA->user->displayName, + 'shiftName' => $shift->task->name, + 'shiftStart' => $shift->start_date, + 'shiftEnd' => $shift->end_date, + 'shiftsAssignmentName' => auth()->user()->displayName, + ] + ), + [], + $soldierA->user + ); + self::sendNotification( + __('Change shift'), + __( + 'Shifts assignment notification of changing shifts for second soldier', + [ + 'soldierName' => $soldierB->user->displayName, + 'shiftName' => $shift->task->name, + 'shiftStart' => $shift->start_date, + 'shiftEnd' => $shift->end_date, + 'shiftsAssignmentName' => auth()->user()->displayName, + ] + ), + [], + $soldierB->user + ); + self::getShiftsAssignments() + ->filter(fn ($shiftsAssignment) => $shiftsAssignment->id !== auth()->user()->id) + ->map( + fn ($shiftsAssignment) => self::sendNotification( + __('Change shift'), + __( + 'Shifts assignment notification of changing shifts for shifts assignment', + [ + 'shiftsAssignmentName' => $shiftsAssignment->displayName, + 'shiftName' => $shift->task->name, + 'soldierAName' => $soldierA->user->displayName, + 'shiftStart' => $shift->start_date, + 'shiftEnd' => $shift->end_date, + 'soldierBName' => $soldierB->user->displayName, + 'shiftsAssignment2Name' => auth()->user()->displayName, + ] + ), + [], + $shiftsAssignment + ) ); - } else { - self::sendNotification( - __('Change assignment'), - __( - 'Commander notification of changing shifts for first soldier', + } + + protected static function commanderChange($shift, $soldierId) + { + self::getShiftsAssignments() + ->map( + fn ($shiftsAssignment) => self::sendNotification( + __('Request for shift change'), + __( + 'Request for shift change from shifts assignments', + [ + 'shiftsAssignmentName' => $shiftsAssignment->displayName, + 'shiftName' => $shift->task->name, + 'soldierAName' => Soldier::find($shift->soldier_id)->user->displayName, + 'shiftStart' => $shift->start_date, + 'shiftEnd' => $shift->end_date, + 'soldierBName' => Soldier::find($soldierId)->user->displayName, + ] + ), [ - 'soldierName' => $soldier->user->displayName, - 'shiftName' => $shift->task->name, - 'shiftStart' => $shift->start_date, - 'shiftEnd' => $shift->end_date, - 'commander' => auth()->user()->displayName, - ] - ), - [], - $soldier->user + NotificationAction::make('confirm') + ->label(__('Confirm')) + ->color('success') + ->icon('heroicon-s-hand-thumb-up') + ->button() + ->dispatch('confirmChange', [ + 'approverRole' => 'shifts-assignment', + 'shiftId' => $shift->id, + 'soldierId' => $soldierId, + 'requesterId' => auth()->user()->id, + ]) + ->close(), + NotificationAction::make('deny') + ->label(__('Deny')) + ->color('danger') + ->icon('heroicon-m-hand-thumb-down') + ->button() + ->dispatch('denyChange', [ + 'rejectorRole' => 'shifts-assignment', + 'shiftId' => $shift->id, + 'soldierId' => $soldierId, + 'requesterId' => auth()->user()->id, + 'sendToSoldiers' => false, + ]) + ->close(), + ], + $shiftsAssignment, + $shift->id.'-'.$shift->soldier_id.'-'.$soldierId + ) ); - } } protected static function soldierChange($record, $soldierId) @@ -574,8 +693,9 @@ protected static function soldierChange($record, $soldierId) ->button() ->dispatch('confirmChange', [ 'approverRole' => current(array_diff(collect(Soldier::find($record->soldier_id)->user->getRoleNames())->toArray(), ['soldier'])), - 'shift' => $record->id, + 'shiftId' => $record->id, 'soldierId' => $soldierId, + 'requesterId' => null, ]) ->close(), NotificationAction::make('deny') @@ -585,8 +705,10 @@ protected static function soldierChange($record, $soldierId) ->button() ->dispatch('denyChange', [ 'rejectorRole' => current(array_diff(collect(Soldier::find($record->soldier_id)->user->getRoleNames())->toArray(), ['soldier'])), - 'shift' => $record->id, + 'shiftId' => $record->id, 'soldierId' => $soldierId, + 'requesterId' => null, + 'sendToSoldiers' => true, ]) ->close(), ], @@ -594,17 +716,21 @@ protected static function soldierChange($record, $soldierId) ); } - protected static function sendNotification($title, $body, $actions, $user) + protected static function getShiftsAssignments() { - Notification::make() + return User::whereHas('roles', function ($query) { + $query->where('name', 'shifts-assignment'); + })->get(); + } + + protected static function sendNotification($title, $body, $actions, $user, $commonKey = null) + { + MyNotification::make() + ->commonKey($commonKey) ->title($title) ->persistent() - ->body( - $body - ) - ->actions( - $actions - ) + ->body($body) + ->actions($actions) ->sendToDatabase($user, true); } diff --git a/app/Providers/FilamentServiceProvider.php b/app/Providers/FilamentServiceProvider.php index c78f76a..d4d7527 100644 --- a/app/Providers/FilamentServiceProvider.php +++ b/app/Providers/FilamentServiceProvider.php @@ -4,6 +4,7 @@ use App\Filament\Auth\Login; use App\Filament\Widgets\CalendarWidget; +use App\Filament\Widgets\ChartWidget; use App\Http\Middleware\SetLocale; use App\Resources\ProfileResource\Pages\ListProfiles; use Filament\Facades\Filament; @@ -20,6 +21,7 @@ use Illuminate\Session\Middleware\AuthenticateSession; use Illuminate\Session\Middleware\StartSession; use Illuminate\View\Middleware\ShareErrorsFromSession; +use Leandrocfe\FilamentApexCharts\FilamentApexChartsPlugin; use Saade\FilamentFullCalendar\FilamentFullCalendarPlugin; class FilamentServiceProvider extends PanelProvider @@ -61,6 +63,7 @@ public function panel(Panel $panel): Panel ->locale(config('app.locale')) ->plugins(['dayGrid', 'timeGrid']) ->config([]), + FilamentApexChartsPlugin::make(), ]) ->pages([ ListProfiles::class, @@ -71,6 +74,7 @@ public function panel(Panel $panel): Panel ->viteTheme('resources/css/app.css') ->widgets([ CalendarWidget::class, + ChartWidget::class, ]); } diff --git a/app/Resources/ChartResource.php b/app/Resources/ChartResource.php new file mode 100644 index 0000000..21db310 --- /dev/null +++ b/app/Resources/ChartResource.php @@ -0,0 +1,42 @@ +paginated(false); + } + + public static function getPages(): array + { + return [ + 'index' => Pages\ListCharts::route('/'), + ]; + } + + public static function canAccess(): bool + { + return auth()->user()->hasRole(['manager', 'shifts-assignment', 'department-commander']); + } +} diff --git a/app/Resources/ChartResource/Pages/CreateChart.php b/app/Resources/ChartResource/Pages/CreateChart.php new file mode 100644 index 0000000..8aa6aa2 --- /dev/null +++ b/app/Resources/ChartResource/Pages/CreateChart.php @@ -0,0 +1,11 @@ +sortable(), - BooleanColumn::make('is_reservist')->label(__('Reservist')), + BooleanColumn::make('is_reservist') + ->label(__('Reservist')), BadgeColumn::make('gender') ->label(__('Gender')) ->formatStateUsing(fn ($state) => $state ? __('Male') : __('Female')) @@ -86,7 +88,9 @@ public static function table(Table $table): Table ->sortable(), TextColumn::make('role') ->label(__('Role')) - ->visible(collect(auth()->user()->getRoleNames())->intersect(['manager', 'shifts-assignment', 'department-commander'])->isNotEmpty()) + ->visible(collect(auth()->user()->getRoleNames()) + ->intersect(['manager', 'shifts-assignment', 'department-commander']) + ->isNotEmpty()) ->default( function ($record) { $roles = Soldier::find($record->id)->user->getRoleNames()->first(); @@ -108,15 +112,10 @@ function ($record) { return $soldier->team ? $soldier->team->name : null; }), - TextColumn::make('reserve_dates')->label(__('Reserve dates'))->date()->listWithLineBreaks()->limitList(1)->expandableLimitedList()->placeholder('---')->toggleable(true, true), - TextColumn::make('next_reserve_dates')->label(__('Next reserve dates'))->date()->listWithLineBreaks()->limitList(1)->expandableLimitedList()->placeholder('---')->toggleable(true, true), - TextColumn::make('enlist_date')->label(__('Enlist date'))->sortable()->date()->toggleable(), - TextColumn::make('course')->label(__('Course'))->toggleable(true, true), - BooleanColumn::make('has_exemption')->label(__('Exemption'))->toggleable(true, true), - TextColumn::make('max_shifts')->label(__('Max shifts'))->toggleable(true, true), - TextColumn::make('max_nights')->label(__('Max nights'))->toggleable(true, true), - TextColumn::make('max_weekends')->label(__('Max weekends'))->toggleable(true, true), - TextColumn::make('capacity')->label(__('Capacity'))->toggleable(true, true), + TextColumn::make('enlist_date') + ->label(__('Enlist date')) + ->sortable() + ->date(), TextColumn::make('capacity_hold') ->default(function ($record) { $soldierShifts = Shift::where('soldier_id', $record->id)->get(); @@ -126,12 +125,10 @@ function ($record) { })->sum(fn (Shift $shift) => $shift->parallel_weight === null ? $shift->task->parallel_weight : $shift->parallel_weight); }) ->label(__('Capacity hold')) - ->numeric() - ->toggleable(), - BooleanColumn::make('is_trainee')->label(__('Is trainee'))->toggleable(true, true), - BooleanColumn::make('is_mabat')->label(__('Is mabat'))->toggleable(true, true), - TextColumn::make('qualifications')->label(__('Qualifications'))->placeholder(__('No qualifications'))->toggleable(), - TextColumn::make('constraints_limit')->label(__('Constraints limit'))->toggleable(true, true), + ->numeric(), + TextColumn::make('qualifications') + ->label(__('Qualifications')) + ->placeholder(__('No qualifications')), ]) ->modifyQueryUsing(function (Builder $query) { if (request()->input('team_id')) { @@ -192,7 +189,7 @@ function ($record) { DatePicker::make('recruitment_from') ->label(__('From')), DatePicker::make('recruitment_until') - ->label(__('Until')) + ->label(__('To')) ->after('recruitment_from'), ]), ]) @@ -216,12 +213,15 @@ function ($record) { ->button() ->label(__('Filter')) ) + ->recordAction(ViewAction::class) + ->recordUrl(null) ->actions([ ActionGroup::make([ EditAction::make(), DeleteAction::make() ->label(__('Delete')) ->modalHeading(__('Delete').' '.self::getModelLabel()), + ViewAction::make(), Action::make('update reserve days') ->label(__('Update reserve days')) ->icon('heroicon-o-pencil') @@ -302,6 +302,7 @@ public static function personalDetails(): Fieldset return request()->route()->getName() === 'filament.app.resources.soldiers.edit' && ! $isReplica; }) + ->hiddenOn('view') ->required(), ])->columns(3); } diff --git a/app/Resources/TaskResource.php b/app/Resources/TaskResource.php index 9fe9c18..c089c25 100644 --- a/app/Resources/TaskResource.php +++ b/app/Resources/TaskResource.php @@ -8,13 +8,16 @@ use App\Models\Department; use App\Models\Shift; use App\Models\Task; +use App\Models\User; use App\Resources\TaskResource\Pages; use App\Services\ManualAssignment; +use Cache; use Carbon\Carbon; use Filament\Forms\Components\ColorPicker; use Filament\Forms\Components\DatePicker; use Filament\Forms\Components\Fieldset; use Filament\Forms\Components\Grid; +use Filament\Forms\Components\Placeholder; use Filament\Forms\Components\Section; use Filament\Forms\Components\Select; use Filament\Forms\Components\TextInput; @@ -351,9 +354,7 @@ public static function assignSoldier(): array ->options( fn (Get $get) => self::getOptions($get) ) - ->afterStateUpdated(function (callable $set) { - $set('soldier_id', null); - }), + ->afterStateUpdated(fn (callable $set) => $set('soldier_id', null)), Select::make('soldier_id') ->label(__('Assign soldier')) ->options( @@ -362,13 +363,16 @@ function (Get $get) { } ) ->default(null) - ->placeholder(function (Get $get) { - return self::getSoldiers($get)->isEmpty() ? __('No suitable soldiers') : __('Select a soldier'); - } - )->visible( + ->placeholder(fn (Get $get) => self::getSoldiers($get)->isEmpty() ? __('No suitable soldiers') : __('Select a soldier')) + ->visible( fn (Get $get): bool => $get('soldier_type') && $get('soldier_type') != 'me' ), + Placeholder::make('') + ->content(__('Assigning the soldier to this shift is your sole responsibility!')) + ->extraAttributes(['style' => 'color: red; font-family: Arial, Helvetica, sans-serif; font-size: 20px']) + ->live() + ->visible(fn (Get $get) => $get('soldier_type') === 'all'), ]), ]), ]; @@ -390,6 +394,7 @@ protected static function getOptions(Get $get): array { $options = [ 'reserves' => __('Reserves'), + 'matching' => __('Matching soldiers'), 'all' => __('All'), ]; if ($get('department_name')) { @@ -402,7 +407,7 @@ protected static function getOptions(Get $get): array ->put('me', __('Me')) ->toArray(); } - if (current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) != 'manager' || current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) != 'shifts-assignment') { + if (current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) !== 'manager' && current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) !== 'shifts-assignment') { return collect($options) ->put('my_soldiers', __('My Soldiers')) ->toArray(); @@ -421,10 +426,19 @@ protected static function amIAvailable($get) protected static function getSoldiers(Get $get) { - $shift = self::taskDetails($get); - $manual_assignment = new ManualAssignment($shift, $get('soldier_type')); + if ($get('soldier_type') !== 'all') { + $shift = self::taskDetails($get); + $manual_assignment = new ManualAssignment($shift, $get('soldier_type')); + + return $manual_assignment->getSoldiers($get('department_name')); + } - return $manual_assignment->getSoldiers($get('department_name')); + return Cache::remember('users', 30 * 60, function () { + return User::all(); + }) + ->mapWithKeys(function ($user) { + return [$user->userable_id => $user->displayName]; + }); } protected static function taskDetails(Get $get) diff --git a/app/Services/Charts.php b/app/Services/Charts.php new file mode 100644 index 0000000..f8f4b1f --- /dev/null +++ b/app/Services/Charts.php @@ -0,0 +1,113 @@ +data = collect([]); + $this->labels = collect([]); + } + + public function organizeChartData($filter, $course, $month, $year): array + { + $soldiersData = $this->getData($course, $month, $year); + $soldiersData->map(function ($soldier) use ($filter) { + $this->data->push($soldier[$filter]); + $this->labels->push($soldier['first_name'].' '.$soldier['last_name']); + }); + + return [ + 'data' => $this->data, + 'labels' => $this->labels, + ]; + } + + protected function getData($course, $month = null, $year = null) + { + $month = $month ? Carbon::createFromDate($year, $month, 1) : now()->addMonth(); + $shifts = Shift::whereNotNull('soldier_id') + ->get() + ->filter(function (Shift $shift) use ($month): bool { + $range = new Range( + $shift->start_date, + $shift->end_date, + ); + + return $range->isSameMonth(new Range($month->copy()->startOfMonth(), $month->copy()->endOfMonth())); + }) + ->groupBy('soldier_id'); + $soldiersDetails = collect([]); + $shifts->each(function ($shifts, $soldier_id) use (&$soldiersDetails) { + $user = User::where('userable_id', $soldier_id)->first(); + $constraints = ConstraintModel::where('soldier_id', $soldier_id)->get(); + $soldier = Soldier::where('id', $soldier_id)->first(); + $soldiersDetails->push([ + 'first_name' => $user->first_name, + 'last_name' => $user->last_name, + 'course' => $soldier->course, + 'nights' => $this->howMuchNights($shifts), + 'weekends' => $this->howMuchWeekends($shifts), + 'shifts' => $shifts->count(), + 'points' => $this->howMuchPoints($shifts), + 'constraints' => $constraints, + 'lowConstraintsRejected' => $this->howMuchLowConstraintsRejected($constraints, $shifts), + ]); + }); + $soldiersDetails = $soldiersDetails->filter(function ($soldierDetail) use ($course) { + return $soldierDetail['course'] === (int) $course; + }); + + return $soldiersDetails; + + } + + protected function howMuchNights($shifts) + { + return $shifts->filter(fn ($shift) => $shift->task->is_night)->count(); + } + + protected function howMuchWeekends($shifts) + { + return $shifts->filter(fn ($shift) => $shift->is_weekend != null ? $shift->is_weekend : $shift->task->is_weekend)->count(); + } + + protected function howMuchPoints($shifts) + { + return collect($shifts)->sum(fn ($shift) => $shift->parallel_weight != null ? $shift->parallel_weight : $shift->task->parallel_weight); + } + + protected function howMuchLowConstraintsRejected($constraints, $shifts): int + { + $count = 0; + $constraints->filter( + fn (ConstraintModel $constraint) => ConstraintType::getPriority()[$constraint->constraint_type] == 2 + ) + ->map( + function ($constraint) use ($count, $shifts) { + $shifts->map(function ($shift) use ($constraint, $count) { + $range = new Range( + $shift->start_date, + $shift->end_date, + ); + $range->isConflict(new Range($constraint->start_date, $constraint->end_date)) ? + $count++ : $count; + }); + } + ); + + return $count; + } +} diff --git a/composer.json b/composer.json index 9c3a261..e15fe58 100644 --- a/composer.json +++ b/composer.json @@ -9,9 +9,9 @@ "filament/filament": "^3.2", "guzzlehttp/guzzle": "^7.2", "laravel/framework": "^11.1", - "laravel/octane": "^2.6", "laravel/tinker": "^2.9", "league/flysystem-aws-s3-v3": "^3.0", + "leandrocfe/filament-apex-charts": "^3.1", "maatwebsite/excel": "^3.1", "predis/predis": "^2.2", "saade/filament-fullcalendar": "^3.0", diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..102fbba --- /dev/null +++ b/composer.lock @@ -0,0 +1,13642 @@ +{ + "_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": "0f3772ecc2dbd759431b63e0c245aab2", + "packages": [ + { + "name": "anourvalar/eloquent-serialize", + "version": "1.2.27", + "source": { + "type": "git", + "url": "https://github.com/AnourValar/eloquent-serialize.git", + "reference": "f1c4fcd41a6db1467ed75bc295b62f582d6fd0fe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/AnourValar/eloquent-serialize/zipball/f1c4fcd41a6db1467ed75bc295b62f582d6fd0fe", + "reference": "f1c4fcd41a6db1467ed75bc295b62f582d6fd0fe", + "shasum": "" + }, + "require": { + "laravel/framework": "^8.0|^9.0|^10.0|^11.0", + "php": "^7.4|^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.26", + "laravel/legacy-factories": "^1.1", + "orchestra/testbench": "^6.0|^7.0|^8.0|^9.0", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^9.5|^10.5", + "psalm/plugin-laravel": "^2.8", + "squizlabs/php_codesniffer": "^3.7" + }, + "type": "library", + "extra": { + "laravel": { + "aliases": { + "EloquentSerialize": "AnourValar\\EloquentSerialize\\Facades\\EloquentSerializeFacade" + } + } + }, + "autoload": { + "psr-4": { + "AnourValar\\EloquentSerialize\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Laravel Query Builder (Eloquent) serialization", + "homepage": "https://github.com/AnourValar/eloquent-serialize", + "keywords": [ + "anourvalar", + "builder", + "copy", + "eloquent", + "job", + "laravel", + "query", + "querybuilder", + "queue", + "serializable", + "serialization", + "serialize" + ], + "support": { + "issues": "https://github.com/AnourValar/eloquent-serialize/issues", + "source": "https://github.com/AnourValar/eloquent-serialize/tree/1.2.27" + }, + "time": "2024-11-30T08:27:24+00:00" + }, + { + "name": "aws/aws-crt-php", + "version": "v1.2.7", + "source": { + "type": "git", + "url": "https://github.com/awslabs/aws-crt-php.git", + "reference": "d71d9906c7bb63a28295447ba12e74723bd3730e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/d71d9906c7bb63a28295447ba12e74723bd3730e", + "reference": "d71d9906c7bb63a28295447ba12e74723bd3730e", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35||^5.6.3||^9.5", + "yoast/phpunit-polyfills": "^1.0" + }, + "suggest": { + "ext-awscrt": "Make sure you install awscrt native extension to use any of the functionality." + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "AWS SDK Common Runtime Team", + "email": "aws-sdk-common-runtime@amazon.com" + } + ], + "description": "AWS Common Runtime for PHP", + "homepage": "https://github.com/awslabs/aws-crt-php", + "keywords": [ + "amazon", + "aws", + "crt", + "sdk" + ], + "support": { + "issues": "https://github.com/awslabs/aws-crt-php/issues", + "source": "https://github.com/awslabs/aws-crt-php/tree/v1.2.7" + }, + "time": "2024-10-18T22:15:13+00:00" + }, + { + "name": "aws/aws-sdk-php", + "version": "3.332.2", + "source": { + "type": "git", + "url": "https://github.com/aws/aws-sdk-php.git", + "reference": "6790e53ab0aceca59e1d44fae06c66481013950c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/6790e53ab0aceca59e1d44fae06c66481013950c", + "reference": "6790e53ab0aceca59e1d44fae06c66481013950c", + "shasum": "" + }, + "require": { + "aws/aws-crt-php": "^1.2.3", + "ext-json": "*", + "ext-pcre": "*", + "ext-simplexml": "*", + "guzzlehttp/guzzle": "^6.5.8 || ^7.4.5", + "guzzlehttp/promises": "^1.4.0 || ^2.0", + "guzzlehttp/psr7": "^1.9.1 || ^2.4.5", + "mtdowling/jmespath.php": "^2.6", + "php": ">=7.2.5", + "psr/http-message": "^1.0 || ^2.0" + }, + "require-dev": { + "andrewsville/php-token-reflection": "^1.4", + "aws/aws-php-sns-message-validator": "~1.0", + "behat/behat": "~3.0", + "composer/composer": "^1.10.22", + "dms/phpunit-arraysubset-asserts": "^0.4.0", + "doctrine/cache": "~1.4", + "ext-dom": "*", + "ext-openssl": "*", + "ext-pcntl": "*", + "ext-sockets": "*", + "nette/neon": "^2.3", + "paragonie/random_compat": ">= 2", + "phpunit/phpunit": "^5.6.3 || ^8.5 || ^9.5", + "psr/cache": "^1.0 || ^2.0 || ^3.0", + "psr/simple-cache": "^1.0 || ^2.0 || ^3.0", + "sebastian/comparator": "^1.2.3 || ^4.0", + "yoast/phpunit-polyfills": "^1.0" + }, + "suggest": { + "aws/aws-php-sns-message-validator": "To validate incoming SNS notifications", + "doctrine/cache": "To use the DoctrineCacheAdapter", + "ext-curl": "To send requests using cURL", + "ext-openssl": "Allows working with CloudFront private distributions and verifying received SNS messages", + "ext-sockets": "To use client-side monitoring" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Aws\\": "src/" + }, + "exclude-from-classmap": [ + "src/data/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Amazon Web Services", + "homepage": "http://aws.amazon.com" + } + ], + "description": "AWS SDK for PHP - Use Amazon Web Services in your PHP project", + "homepage": "http://aws.amazon.com/sdkforphp", + "keywords": [ + "amazon", + "aws", + "cloud", + "dynamodb", + "ec2", + "glacier", + "s3", + "sdk" + ], + "support": { + "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", + "issues": "https://github.com/aws/aws-sdk-php/issues", + "source": "https://github.com/aws/aws-sdk-php/tree/3.332.2" + }, + "time": "2024-12-03T06:16:16+00:00" + }, + { + "name": "blade-ui-kit/blade-heroicons", + "version": "2.5.0", + "source": { + "type": "git", + "url": "https://github.com/blade-ui-kit/blade-heroicons.git", + "reference": "4ed3ed08e9ac192d0d126b2f12711d6fb6576a48" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/blade-ui-kit/blade-heroicons/zipball/4ed3ed08e9ac192d0d126b2f12711d6fb6576a48", + "reference": "4ed3ed08e9ac192d0d126b2f12711d6fb6576a48", + "shasum": "" + }, + "require": { + "blade-ui-kit/blade-icons": "^1.6", + "illuminate/support": "^9.0|^10.0|^11.0", + "php": "^8.0" + }, + "require-dev": { + "orchestra/testbench": "^7.0|^8.0|^9.0", + "phpunit/phpunit": "^9.0|^10.5|^11.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "BladeUI\\Heroicons\\BladeHeroiconsServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "BladeUI\\Heroicons\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dries Vints", + "homepage": "https://driesvints.com" + } + ], + "description": "A package to easily make use of Heroicons in your Laravel Blade views.", + "homepage": "https://github.com/blade-ui-kit/blade-heroicons", + "keywords": [ + "Heroicons", + "blade", + "laravel" + ], + "support": { + "issues": "https://github.com/blade-ui-kit/blade-heroicons/issues", + "source": "https://github.com/blade-ui-kit/blade-heroicons/tree/2.5.0" + }, + "funding": [ + { + "url": "https://github.com/sponsors/driesvints", + "type": "github" + }, + { + "url": "https://www.paypal.com/paypalme/driesvints", + "type": "paypal" + } + ], + "time": "2024-11-18T19:59:07+00:00" + }, + { + "name": "blade-ui-kit/blade-icons", + "version": "1.7.2", + "source": { + "type": "git", + "url": "https://github.com/blade-ui-kit/blade-icons.git", + "reference": "75a54a3f5a2810fcf6574ab23e91b6cc229a1b53" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/blade-ui-kit/blade-icons/zipball/75a54a3f5a2810fcf6574ab23e91b6cc229a1b53", + "reference": "75a54a3f5a2810fcf6574ab23e91b6cc229a1b53", + "shasum": "" + }, + "require": { + "illuminate/contracts": "^8.0|^9.0|^10.0|^11.0", + "illuminate/filesystem": "^8.0|^9.0|^10.0|^11.0", + "illuminate/support": "^8.0|^9.0|^10.0|^11.0", + "illuminate/view": "^8.0|^9.0|^10.0|^11.0", + "php": "^7.4|^8.0", + "symfony/console": "^5.3|^6.0|^7.0", + "symfony/finder": "^5.3|^6.0|^7.0" + }, + "require-dev": { + "mockery/mockery": "^1.5.1", + "orchestra/testbench": "^6.0|^7.0|^8.0|^9.0", + "phpunit/phpunit": "^9.0|^10.5|^11.0" + }, + "bin": [ + "bin/blade-icons-generate" + ], + "type": "library", + "extra": { + "laravel": { + "providers": [ + "BladeUI\\Icons\\BladeIconsServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "BladeUI\\Icons\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dries Vints", + "homepage": "https://driesvints.com" + } + ], + "description": "A package to easily make use of icons in your Laravel Blade views.", + "homepage": "https://github.com/blade-ui-kit/blade-icons", + "keywords": [ + "blade", + "icons", + "laravel", + "svg" + ], + "support": { + "issues": "https://github.com/blade-ui-kit/blade-icons/issues", + "source": "https://github.com/blade-ui-kit/blade-icons" + }, + "funding": [ + { + "url": "https://github.com/sponsors/driesvints", + "type": "github" + }, + { + "url": "https://www.paypal.com/paypalme/driesvints", + "type": "paypal" + } + ], + "time": "2024-10-17T17:38:00+00:00" + }, + { + "name": "brick/math", + "version": "0.12.1", + "source": { + "type": "git", + "url": "https://github.com/brick/math.git", + "reference": "f510c0a40911935b77b86859eb5223d58d660df1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/brick/math/zipball/f510c0a40911935b77b86859eb5223d58d660df1", + "reference": "f510c0a40911935b77b86859eb5223d58d660df1", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^10.1", + "vimeo/psalm": "5.16.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Brick\\Math\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Arbitrary-precision arithmetic library", + "keywords": [ + "Arbitrary-precision", + "BigInteger", + "BigRational", + "arithmetic", + "bigdecimal", + "bignum", + "bignumber", + "brick", + "decimal", + "integer", + "math", + "mathematics", + "rational" + ], + "support": { + "issues": "https://github.com/brick/math/issues", + "source": "https://github.com/brick/math/tree/0.12.1" + }, + "funding": [ + { + "url": "https://github.com/BenMorel", + "type": "github" + } + ], + "time": "2023-11-29T23:19:16+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": "composer/semver", + "version": "3.4.3", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.11", + "symfony/phpunit-bridge": "^3 || ^7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Semver\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "Semver library that offers utilities, version constraint parsing and validation.", + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], + "support": { + "irc": "ircs://irc.libera.chat:6697/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/3.4.3" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2024-09-19T14:15:21+00:00" + }, + { + "name": "danharrin/date-format-converter", + "version": "v0.3.1", + "source": { + "type": "git", + "url": "https://github.com/danharrin/date-format-converter.git", + "reference": "7c31171bc981e48726729a5f3a05a2d2b63f0b1e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/danharrin/date-format-converter/zipball/7c31171bc981e48726729a5f3a05a2d2b63f0b1e", + "reference": "7c31171bc981e48726729a5f3a05a2d2b63f0b1e", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0" + }, + "type": "library", + "autoload": { + "files": [ + "src/helpers.php", + "src/standards.php" + ], + "psr-4": { + "DanHarrin\\DateFormatConverter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dan Harrin", + "email": "dan@danharrin.com" + } + ], + "description": "Convert token-based date formats between standards.", + "homepage": "https://github.com/danharrin/date-format-converter", + "support": { + "issues": "https://github.com/danharrin/date-format-converter/issues", + "source": "https://github.com/danharrin/date-format-converter" + }, + "funding": [ + { + "url": "https://github.com/danharrin", + "type": "github" + } + ], + "time": "2024-06-13T09:38:44+00:00" + }, + { + "name": "danharrin/livewire-rate-limiting", + "version": "v1.3.1", + "source": { + "type": "git", + "url": "https://github.com/danharrin/livewire-rate-limiting.git", + "reference": "1a1b299e20de61f88ed6e94ea0bbcfc33aab1ddb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/danharrin/livewire-rate-limiting/zipball/1a1b299e20de61f88ed6e94ea0bbcfc33aab1ddb", + "reference": "1a1b299e20de61f88ed6e94ea0bbcfc33aab1ddb", + "shasum": "" + }, + "require": { + "illuminate/support": "^9.0|^10.0|^11.0", + "php": "^8.0" + }, + "require-dev": { + "livewire/livewire": "^3.0", + "livewire/volt": "^1.3", + "orchestra/testbench": "^7.0|^8.0|^9.0", + "phpunit/phpunit": "^9.0|^10.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "DanHarrin\\LivewireRateLimiting\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dan Harrin", + "email": "dan@danharrin.com" + } + ], + "description": "Apply rate limiters to Laravel Livewire actions.", + "homepage": "https://github.com/danharrin/livewire-rate-limiting", + "support": { + "issues": "https://github.com/danharrin/livewire-rate-limiting/issues", + "source": "https://github.com/danharrin/livewire-rate-limiting" + }, + "funding": [ + { + "url": "https://github.com/danharrin", + "type": "github" + } + ], + "time": "2024-05-06T09:10:03+00:00" + }, + { + "name": "dflydev/dot-access-data", + "version": "v3.0.3", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/a23a2bf4f31d3518f3ecb38660c95715dfead60f", + "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.42", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", + "scrutinizer/ocular": "1.6.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Dflydev\\DotAccessData\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + }, + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "support": { + "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.3" + }, + "time": "2024-07-08T12:26:09+00:00" + }, + { + "name": "doctrine/dbal", + "version": "4.2.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/dbal.git", + "reference": "dadd35300837a3a2184bd47d403333b15d0a9bd0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/dadd35300837a3a2184bd47d403333b15d0a9bd0", + "reference": "dadd35300837a3a2184bd47d403333b15d0a9bd0", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^0.5.3|^1", + "php": "^8.1", + "psr/cache": "^1|^2|^3", + "psr/log": "^1|^2|^3" + }, + "require-dev": { + "doctrine/coding-standard": "12.0.0", + "fig/log-test": "^1", + "jetbrains/phpstorm-stubs": "2023.2", + "phpstan/phpstan": "1.12.6", + "phpstan/phpstan-phpunit": "1.4.0", + "phpstan/phpstan-strict-rules": "^1.6", + "phpunit/phpunit": "10.5.30", + "psalm/plugin-phpunit": "0.19.0", + "slevomat/coding-standard": "8.13.1", + "squizlabs/php_codesniffer": "3.10.2", + "symfony/cache": "^6.3.8|^7.0", + "symfony/console": "^5.4|^6.3|^7.0", + "vimeo/psalm": "5.25.0" + }, + "suggest": { + "symfony/console": "For helpful console commands such as SQL execution and import of files." + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\DBAL\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + } + ], + "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.", + "homepage": "https://www.doctrine-project.org/projects/dbal.html", + "keywords": [ + "abstraction", + "database", + "db2", + "dbal", + "mariadb", + "mssql", + "mysql", + "oci8", + "oracle", + "pdo", + "pgsql", + "postgresql", + "queryobject", + "sasql", + "sql", + "sqlite", + "sqlserver", + "sqlsrv" + ], + "support": { + "issues": "https://github.com/doctrine/dbal/issues", + "source": "https://github.com/doctrine/dbal/tree/4.2.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%2Fdbal", + "type": "tidelift" + } + ], + "time": "2024-10-10T18:01:27+00:00" + }, + { + "name": "doctrine/deprecations", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/deprecations.git", + "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", + "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9", + "phpstan/phpstan": "1.4.10 || 1.10.15", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psalm/plugin-phpunit": "0.18.4", + "psr/log": "^1 || ^2 || ^3", + "vimeo/psalm": "4.30.0 || 5.12.0" + }, + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", + "homepage": "https://www.doctrine-project.org/", + "support": { + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/1.1.3" + }, + "time": "2024-01-30T19:34:25+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": "dragonmantank/cron-expression", + "version": "v3.4.0", + "source": { + "type": "git", + "url": "https://github.com/dragonmantank/cron-expression.git", + "reference": "8c784d071debd117328803d86b2097615b457500" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/8c784d071debd117328803d86b2097615b457500", + "reference": "8c784d071debd117328803d86b2097615b457500", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0", + "webmozart/assert": "^1.0" + }, + "replace": { + "mtdowling/cron-expression": "^1.0" + }, + "require-dev": { + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.0", + "phpunit/phpunit": "^7.0|^8.0|^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Cron\\": "src/Cron/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Tankersley", + "email": "chris@ctankersley.com", + "homepage": "https://github.com/dragonmantank" + } + ], + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "keywords": [ + "cron", + "schedule" + ], + "support": { + "issues": "https://github.com/dragonmantank/cron-expression/issues", + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.4.0" + }, + "funding": [ + { + "url": "https://github.com/dragonmantank", + "type": "github" + } + ], + "time": "2024-10-09T13:47:03+00:00" + }, + { + "name": "egulias/email-validator", + "version": "4.0.2", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ebaaf5be6c0286928352e054f2d5125608e5405e", + "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e", + "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.2" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "time": "2023-10-06T06:47:41+00:00" + }, + { + "name": "ezyang/htmlpurifier", + "version": "v4.18.0", + "source": { + "type": "git", + "url": "https://github.com/ezyang/htmlpurifier.git", + "reference": "cb56001e54359df7ae76dc522d08845dc741621b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/cb56001e54359df7ae76dc522d08845dc741621b", + "reference": "cb56001e54359df7ae76dc522d08845dc741621b", + "shasum": "" + }, + "require": { + "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" + }, + "require-dev": { + "cerdic/css-tidy": "^1.7 || ^2.0", + "simpletest/simpletest": "dev-master" + }, + "suggest": { + "cerdic/css-tidy": "If you want to use the filter 'Filter.ExtractStyleBlocks'.", + "ext-bcmath": "Used for unit conversion and imagecrash protection", + "ext-iconv": "Converts text to and from non-UTF-8 encodings", + "ext-tidy": "Used for pretty-printing HTML" + }, + "type": "library", + "autoload": { + "files": [ + "library/HTMLPurifier.composer.php" + ], + "psr-0": { + "HTMLPurifier": "library/" + }, + "exclude-from-classmap": [ + "/library/HTMLPurifier/Language/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "Edward Z. Yang", + "email": "admin@htmlpurifier.org", + "homepage": "http://ezyang.com" + } + ], + "description": "Standards compliant HTML filter written in PHP", + "homepage": "http://htmlpurifier.org/", + "keywords": [ + "html" + ], + "support": { + "issues": "https://github.com/ezyang/htmlpurifier/issues", + "source": "https://github.com/ezyang/htmlpurifier/tree/v4.18.0" + }, + "time": "2024-11-01T03:51:45+00:00" + }, + { + "name": "filament/actions", + "version": "v3.2.127", + "source": { + "type": "git", + "url": "https://github.com/filamentphp/actions.git", + "reference": "f325e315c365cfcea5c9da96662ddea37e3663fc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filamentphp/actions/zipball/f325e315c365cfcea5c9da96662ddea37e3663fc", + "reference": "f325e315c365cfcea5c9da96662ddea37e3663fc", + "shasum": "" + }, + "require": { + "anourvalar/eloquent-serialize": "^1.2", + "filament/forms": "self.version", + "filament/infolists": "self.version", + "filament/notifications": "self.version", + "filament/support": "self.version", + "illuminate/contracts": "^10.45|^11.0", + "illuminate/database": "^10.45|^11.0", + "illuminate/support": "^10.45|^11.0", + "league/csv": "^9.14", + "openspout/openspout": "^4.23", + "php": "^8.1", + "spatie/laravel-package-tools": "^1.9" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Filament\\Actions\\ActionsServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Filament\\Actions\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Easily add beautiful action modals to any Livewire component.", + "homepage": "https://github.com/filamentphp/filament", + "support": { + "issues": "https://github.com/filamentphp/filament/issues", + "source": "https://github.com/filamentphp/filament" + }, + "time": "2024-11-29T09:30:57+00:00" + }, + { + "name": "filament/filament", + "version": "v3.2.127", + "source": { + "type": "git", + "url": "https://github.com/filamentphp/panels.git", + "reference": "4aea767e8c872842b624fe47affe078433111259" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filamentphp/panels/zipball/4aea767e8c872842b624fe47affe078433111259", + "reference": "4aea767e8c872842b624fe47affe078433111259", + "shasum": "" + }, + "require": { + "danharrin/livewire-rate-limiting": "^0.3|^1.0", + "filament/actions": "self.version", + "filament/forms": "self.version", + "filament/infolists": "self.version", + "filament/notifications": "self.version", + "filament/support": "self.version", + "filament/tables": "self.version", + "filament/widgets": "self.version", + "illuminate/auth": "^10.45|^11.0", + "illuminate/console": "^10.45|^11.0", + "illuminate/contracts": "^10.45|^11.0", + "illuminate/cookie": "^10.45|^11.0", + "illuminate/database": "^10.45|^11.0", + "illuminate/http": "^10.45|^11.0", + "illuminate/routing": "^10.45|^11.0", + "illuminate/session": "^10.45|^11.0", + "illuminate/support": "^10.45|^11.0", + "illuminate/view": "^10.45|^11.0", + "php": "^8.1", + "spatie/laravel-package-tools": "^1.9" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Filament\\FilamentServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/global_helpers.php", + "src/helpers.php" + ], + "psr-4": { + "Filament\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A collection of full-stack components for accelerated Laravel app development.", + "homepage": "https://github.com/filamentphp/filament", + "support": { + "issues": "https://github.com/filamentphp/filament/issues", + "source": "https://github.com/filamentphp/filament" + }, + "time": "2024-11-29T09:30:58+00:00" + }, + { + "name": "filament/forms", + "version": "v3.2.127", + "source": { + "type": "git", + "url": "https://github.com/filamentphp/forms.git", + "reference": "c78071f1aabb63a0d9bf74268005d3294b61dc2a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filamentphp/forms/zipball/c78071f1aabb63a0d9bf74268005d3294b61dc2a", + "reference": "c78071f1aabb63a0d9bf74268005d3294b61dc2a", + "shasum": "" + }, + "require": { + "danharrin/date-format-converter": "^0.3", + "filament/actions": "self.version", + "filament/support": "self.version", + "illuminate/console": "^10.45|^11.0", + "illuminate/contracts": "^10.45|^11.0", + "illuminate/database": "^10.45|^11.0", + "illuminate/filesystem": "^10.45|^11.0", + "illuminate/support": "^10.45|^11.0", + "illuminate/validation": "^10.45|^11.0", + "illuminate/view": "^10.45|^11.0", + "php": "^8.1", + "spatie/laravel-package-tools": "^1.9" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Filament\\Forms\\FormsServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Filament\\Forms\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Easily add beautiful forms to any Livewire component.", + "homepage": "https://github.com/filamentphp/filament", + "support": { + "issues": "https://github.com/filamentphp/filament/issues", + "source": "https://github.com/filamentphp/filament" + }, + "time": "2024-11-29T09:30:53+00:00" + }, + { + "name": "filament/infolists", + "version": "v3.2.127", + "source": { + "type": "git", + "url": "https://github.com/filamentphp/infolists.git", + "reference": "e655ac3900ab2109022aa0243cfb4126729ef431" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filamentphp/infolists/zipball/e655ac3900ab2109022aa0243cfb4126729ef431", + "reference": "e655ac3900ab2109022aa0243cfb4126729ef431", + "shasum": "" + }, + "require": { + "filament/actions": "self.version", + "filament/support": "self.version", + "illuminate/console": "^10.45|^11.0", + "illuminate/contracts": "^10.45|^11.0", + "illuminate/database": "^10.45|^11.0", + "illuminate/filesystem": "^10.45|^11.0", + "illuminate/support": "^10.45|^11.0", + "illuminate/view": "^10.45|^11.0", + "php": "^8.1", + "spatie/laravel-package-tools": "^1.9" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Filament\\Infolists\\InfolistsServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Filament\\Infolists\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Easily add beautiful read-only infolists to any Livewire component.", + "homepage": "https://github.com/filamentphp/filament", + "support": { + "issues": "https://github.com/filamentphp/filament/issues", + "source": "https://github.com/filamentphp/filament" + }, + "time": "2024-11-29T09:30:56+00:00" + }, + { + "name": "filament/notifications", + "version": "v3.2.127", + "source": { + "type": "git", + "url": "https://github.com/filamentphp/notifications.git", + "reference": "c19df07c801c5550de0d30957c5a316f53019533" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filamentphp/notifications/zipball/c19df07c801c5550de0d30957c5a316f53019533", + "reference": "c19df07c801c5550de0d30957c5a316f53019533", + "shasum": "" + }, + "require": { + "filament/actions": "self.version", + "filament/support": "self.version", + "illuminate/contracts": "^10.45|^11.0", + "illuminate/filesystem": "^10.45|^11.0", + "illuminate/notifications": "^10.45|^11.0", + "illuminate/support": "^10.45|^11.0", + "php": "^8.1", + "spatie/laravel-package-tools": "^1.9" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Filament\\Notifications\\NotificationsServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/Testing/Autoload.php" + ], + "psr-4": { + "Filament\\Notifications\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Easily add beautiful notifications to any Livewire app.", + "homepage": "https://github.com/filamentphp/filament", + "support": { + "issues": "https://github.com/filamentphp/filament/issues", + "source": "https://github.com/filamentphp/filament" + }, + "time": "2024-10-23T07:36:14+00:00" + }, + { + "name": "filament/support", + "version": "v3.2.127", + "source": { + "type": "git", + "url": "https://github.com/filamentphp/support.git", + "reference": "a720fb2508a1d84a9b35aedc9991d4b53d18fea6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filamentphp/support/zipball/a720fb2508a1d84a9b35aedc9991d4b53d18fea6", + "reference": "a720fb2508a1d84a9b35aedc9991d4b53d18fea6", + "shasum": "" + }, + "require": { + "blade-ui-kit/blade-heroicons": "^2.5", + "doctrine/dbal": "^3.2|^4.0", + "ext-intl": "*", + "illuminate/contracts": "^10.45|^11.0", + "illuminate/support": "^10.45|^11.0", + "illuminate/view": "^10.45|^11.0", + "kirschbaum-development/eloquent-power-joins": "^3.0|^4.0", + "livewire/livewire": "3.5.12", + "php": "^8.1", + "ryangjchandler/blade-capture-directive": "^0.2|^0.3|^1.0", + "spatie/color": "^1.5", + "spatie/invade": "^1.0|^2.0", + "spatie/laravel-package-tools": "^1.9", + "symfony/console": "^6.0|^7.0", + "symfony/html-sanitizer": "^6.1|^7.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Filament\\Support\\SupportServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Filament\\Support\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Core helper methods and foundation code for all Filament packages.", + "homepage": "https://github.com/filamentphp/filament", + "support": { + "issues": "https://github.com/filamentphp/filament/issues", + "source": "https://github.com/filamentphp/filament" + }, + "time": "2024-11-29T09:31:13+00:00" + }, + { + "name": "filament/tables", + "version": "v3.2.127", + "source": { + "type": "git", + "url": "https://github.com/filamentphp/tables.git", + "reference": "c287a68e084c96c3f2991eaddf1d6b5159af5147" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filamentphp/tables/zipball/c287a68e084c96c3f2991eaddf1d6b5159af5147", + "reference": "c287a68e084c96c3f2991eaddf1d6b5159af5147", + "shasum": "" + }, + "require": { + "filament/actions": "self.version", + "filament/forms": "self.version", + "filament/support": "self.version", + "illuminate/console": "^10.45|^11.0", + "illuminate/contracts": "^10.45|^11.0", + "illuminate/database": "^10.45|^11.0", + "illuminate/filesystem": "^10.45|^11.0", + "illuminate/support": "^10.45|^11.0", + "illuminate/view": "^10.45|^11.0", + "php": "^8.1", + "spatie/laravel-package-tools": "^1.9" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Filament\\Tables\\TablesServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Filament\\Tables\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Easily add beautiful tables to any Livewire component.", + "homepage": "https://github.com/filamentphp/filament", + "support": { + "issues": "https://github.com/filamentphp/filament/issues", + "source": "https://github.com/filamentphp/filament" + }, + "time": "2024-11-30T09:21:26+00:00" + }, + { + "name": "filament/widgets", + "version": "v3.2.127", + "source": { + "type": "git", + "url": "https://github.com/filamentphp/widgets.git", + "reference": "6de1c84d71168fd1c6a5b1ae1e1b4ec5ee4b6f55" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filamentphp/widgets/zipball/6de1c84d71168fd1c6a5b1ae1e1b4ec5ee4b6f55", + "reference": "6de1c84d71168fd1c6a5b1ae1e1b4ec5ee4b6f55", + "shasum": "" + }, + "require": { + "filament/support": "self.version", + "php": "^8.1", + "spatie/laravel-package-tools": "^1.9" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Filament\\Widgets\\WidgetsServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Filament\\Widgets\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Easily add beautiful dashboard widgets to any Livewire component.", + "homepage": "https://github.com/filamentphp/filament", + "support": { + "issues": "https://github.com/filamentphp/filament/issues", + "source": "https://github.com/filamentphp/filament" + }, + "time": "2024-11-27T16:52:29+00:00" + }, + { + "name": "fruitcake/php-cors", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/fruitcake/php-cors.git", + "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/3d158f36e7875e2f040f37bc0573956240a5a38b", + "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0", + "symfony/http-foundation": "^4.4|^5.4|^6|^7" + }, + "require-dev": { + "phpstan/phpstan": "^1.4", + "phpunit/phpunit": "^9", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "Fruitcake\\Cors\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fruitcake", + "homepage": "https://fruitcake.nl" + }, + { + "name": "Barryvdh", + "email": "barryvdh@gmail.com" + } + ], + "description": "Cross-origin resource sharing library for the Symfony HttpFoundation", + "homepage": "https://github.com/fruitcake/php-cors", + "keywords": [ + "cors", + "laravel", + "symfony" + ], + "support": { + "issues": "https://github.com/fruitcake/php-cors/issues", + "source": "https://github.com/fruitcake/php-cors/tree/v1.3.0" + }, + "funding": [ + { + "url": "https://fruitcake.nl", + "type": "custom" + }, + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2023-10-12T05:21:21+00:00" + }, + { + "name": "graham-campbell/result-type", + "version": "v1.1.3", + "source": { + "type": "git", + "url": "https://github.com/GrahamCampbell/Result-Type.git", + "reference": "3ba905c11371512af9d9bdd27d99b782216b6945" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/3ba905c11371512af9d9bdd27d99b782216b6945", + "reference": "3ba905c11371512af9d9bdd27d99b782216b6945", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.3" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" + }, + "type": "library", + "autoload": { + "psr-4": { + "GrahamCampbell\\ResultType\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "An Implementation Of The Result Type", + "keywords": [ + "Graham Campbell", + "GrahamCampbell", + "Result Type", + "Result-Type", + "result" + ], + "support": { + "issues": "https://github.com/GrahamCampbell/Result-Type/issues", + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.3" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", + "type": "tidelift" + } + ], + "time": "2024-07-20T21:45:45+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "7.9.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "d281ed313b989f213357e3be1a179f02196ac99b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d281ed313b989f213357e3be1a179f02196ac99b", + "reference": "d281ed313b989f213357e3be1a179f02196ac99b", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.5.3 || ^2.0.3", + "guzzlehttp/psr7": "^2.7.0", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "ext-curl": "*", + "guzzle/client-integration-tests": "3.0.2", + "php-http/message-factory": "^1.1", + "phpunit/phpunit": "^8.5.39 || ^9.6.20", + "psr/log": "^1.1 || ^2.0 || ^3.0" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "psr-18", + "psr-7", + "rest", + "web service" + ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.9.2" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2024-07-24T11:22:20+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/f9c436286ab2892c7db7be8c8da4ef61ccf7b455", + "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.39 || ^9.6.20" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2024-10-17T10:06:22+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": "guzzlehttp/uri-template", + "version": "v1.0.3", + "source": { + "type": "git", + "url": "https://github.com/guzzle/uri-template.git", + "reference": "ecea8feef63bd4fef1f037ecb288386999ecc11c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/uri-template/zipball/ecea8feef63bd4fef1f037ecb288386999ecc11c", + "reference": "ecea8feef63bd4fef1f037ecb288386999ecc11c", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "symfony/polyfill-php80": "^1.24" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.36 || ^9.6.15", + "uri-template/tests": "1.0.0" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\UriTemplate\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + } + ], + "description": "A polyfill class for uri_template of PHP", + "keywords": [ + "guzzlehttp", + "uri-template" + ], + "support": { + "issues": "https://github.com/guzzle/uri-template/issues", + "source": "https://github.com/guzzle/uri-template/tree/v1.0.3" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/uri-template", + "type": "tidelift" + } + ], + "time": "2023-12-03T19:50:20+00:00" + }, + { + "name": "kirschbaum-development/eloquent-power-joins", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/kirschbaum-development/eloquent-power-joins.git", + "reference": "3c1af9b86b02f1e39219849c1d2fee7cf77e8638" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/kirschbaum-development/eloquent-power-joins/zipball/3c1af9b86b02f1e39219849c1d2fee7cf77e8638", + "reference": "3c1af9b86b02f1e39219849c1d2fee7cf77e8638", + "shasum": "" + }, + "require": { + "illuminate/database": "^10.0|^11.0", + "illuminate/support": "^10.0|^11.0", + "php": "^8.1" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "dev-master", + "laravel/legacy-factories": "^1.0@dev", + "orchestra/testbench": "^8.0|^9.0", + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Kirschbaum\\PowerJoins\\PowerJoinsServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Kirschbaum\\PowerJoins\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Luis Dalmolin", + "email": "luis.nh@gmail.com", + "role": "Developer" + } + ], + "description": "The Laravel magic applied to joins.", + "homepage": "https://github.com/kirschbaum-development/eloquent-power-joins", + "keywords": [ + "eloquent", + "join", + "laravel", + "mysql" + ], + "support": { + "issues": "https://github.com/kirschbaum-development/eloquent-power-joins/issues", + "source": "https://github.com/kirschbaum-development/eloquent-power-joins/tree/4.0.1" + }, + "time": "2024-11-26T13:22:08+00:00" + }, + { + "name": "laravel/framework", + "version": "v11.34.2", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "865da6d73dd353f07a7bcbd778c55966a620121f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/865da6d73dd353f07a7bcbd778c55966a620121f", + "reference": "865da6d73dd353f07a7bcbd778c55966a620121f", + "shasum": "" + }, + "require": { + "brick/math": "^0.9.3|^0.10.2|^0.11|^0.12", + "composer-runtime-api": "^2.2", + "doctrine/inflector": "^2.0.5", + "dragonmantank/cron-expression": "^3.4", + "egulias/email-validator": "^3.2.1|^4.0", + "ext-ctype": "*", + "ext-filter": "*", + "ext-hash": "*", + "ext-mbstring": "*", + "ext-openssl": "*", + "ext-session": "*", + "ext-tokenizer": "*", + "fruitcake/php-cors": "^1.3", + "guzzlehttp/guzzle": "^7.8.2", + "guzzlehttp/uri-template": "^1.0", + "laravel/prompts": "^0.1.18|^0.2.0|^0.3.0", + "laravel/serializable-closure": "^1.3|^2.0", + "league/commonmark": "^2.2.1", + "league/flysystem": "^3.25.1", + "league/flysystem-local": "^3.25.1", + "monolog/monolog": "^3.0", + "nesbot/carbon": "^2.72.2|^3.4", + "nunomaduro/termwind": "^2.0", + "php": "^8.2", + "psr/container": "^1.1.1|^2.0.1", + "psr/log": "^1.0|^2.0|^3.0", + "psr/simple-cache": "^1.0|^2.0|^3.0", + "ramsey/uuid": "^4.7", + "symfony/console": "^7.0.3", + "symfony/error-handler": "^7.0.3", + "symfony/finder": "^7.0.3", + "symfony/http-foundation": "^7.0.3", + "symfony/http-kernel": "^7.0.3", + "symfony/mailer": "^7.0.3", + "symfony/mime": "^7.0.3", + "symfony/polyfill-php83": "^1.31", + "symfony/process": "^7.0.3", + "symfony/routing": "^7.0.3", + "symfony/uid": "^7.0.3", + "symfony/var-dumper": "^7.0.3", + "tijsverkoyen/css-to-inline-styles": "^2.2.5", + "vlucas/phpdotenv": "^5.6.1", + "voku/portable-ascii": "^2.0.2" + }, + "conflict": { + "mockery/mockery": "1.6.8", + "tightenco/collect": "<5.5.33" + }, + "provide": { + "psr/container-implementation": "1.1|2.0", + "psr/log-implementation": "1.0|2.0|3.0", + "psr/simple-cache-implementation": "1.0|2.0|3.0" + }, + "replace": { + "illuminate/auth": "self.version", + "illuminate/broadcasting": "self.version", + "illuminate/bus": "self.version", + "illuminate/cache": "self.version", + "illuminate/collections": "self.version", + "illuminate/concurrency": "self.version", + "illuminate/conditionable": "self.version", + "illuminate/config": "self.version", + "illuminate/console": "self.version", + "illuminate/container": "self.version", + "illuminate/contracts": "self.version", + "illuminate/cookie": "self.version", + "illuminate/database": "self.version", + "illuminate/encryption": "self.version", + "illuminate/events": "self.version", + "illuminate/filesystem": "self.version", + "illuminate/hashing": "self.version", + "illuminate/http": "self.version", + "illuminate/log": "self.version", + "illuminate/macroable": "self.version", + "illuminate/mail": "self.version", + "illuminate/notifications": "self.version", + "illuminate/pagination": "self.version", + "illuminate/pipeline": "self.version", + "illuminate/process": "self.version", + "illuminate/queue": "self.version", + "illuminate/redis": "self.version", + "illuminate/routing": "self.version", + "illuminate/session": "self.version", + "illuminate/support": "self.version", + "illuminate/testing": "self.version", + "illuminate/translation": "self.version", + "illuminate/validation": "self.version", + "illuminate/view": "self.version", + "spatie/once": "*" + }, + "require-dev": { + "ably/ably-php": "^1.0", + "aws/aws-sdk-php": "^3.322.9", + "ext-gmp": "*", + "fakerphp/faker": "^1.24", + "guzzlehttp/promises": "^2.0.3", + "guzzlehttp/psr7": "^2.4", + "league/flysystem-aws-s3-v3": "^3.25.1", + "league/flysystem-ftp": "^3.25.1", + "league/flysystem-path-prefixing": "^3.25.1", + "league/flysystem-read-only": "^3.25.1", + "league/flysystem-sftp-v3": "^3.25.1", + "mockery/mockery": "^1.6.10", + "nyholm/psr7": "^1.2", + "orchestra/testbench-core": "^9.6", + "pda/pheanstalk": "^5.0.6", + "phpstan/phpstan": "^1.11.5", + "phpunit/phpunit": "^10.5.35|^11.3.6", + "predis/predis": "^2.3", + "resend/resend-php": "^0.10.0", + "symfony/cache": "^7.0.3", + "symfony/http-client": "^7.0.3", + "symfony/psr-http-message-bridge": "^7.0.3", + "symfony/translation": "^7.0.3" + }, + "suggest": { + "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.322.9).", + "brianium/paratest": "Required to run tests in parallel (^7.0|^8.0).", + "ext-apcu": "Required to use the APC cache driver.", + "ext-fileinfo": "Required to use the Filesystem class.", + "ext-ftp": "Required to use the Flysystem FTP driver.", + "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", + "ext-memcached": "Required to use the memcache cache driver.", + "ext-pcntl": "Required to use all features of the queue worker and console signal trapping.", + "ext-pdo": "Required to use all database features.", + "ext-posix": "Required to use all features of the queue worker.", + "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0|^6.0).", + "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", + "filp/whoops": "Required for friendly error pages in development (^2.14.3).", + "laravel/tinker": "Required to use the tinker console command (^2.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.25.1).", + "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.25.1).", + "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.25.1).", + "league/flysystem-read-only": "Required to use read-only disks (^3.25.1)", + "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.25.1).", + "mockery/mockery": "Required to use mocking (^1.6).", + "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^5.0).", + "phpunit/phpunit": "Required to use assertions and run tests (^10.5|^11.0).", + "predis/predis": "Required to use the predis connector (^2.3).", + "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", + "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0).", + "symfony/cache": "Required to PSR-6 cache bridge (^7.0).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^7.0).", + "symfony/http-client": "Required to enable support for the Symfony API mail transports (^7.0).", + "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^7.0).", + "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^7.0).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^7.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "11.x-dev" + } + }, + "autoload": { + "files": [ + "src/Illuminate/Collections/helpers.php", + "src/Illuminate/Events/functions.php", + "src/Illuminate/Filesystem/functions.php", + "src/Illuminate/Foundation/helpers.php", + "src/Illuminate/Log/functions.php", + "src/Illuminate/Support/functions.php", + "src/Illuminate/Support/helpers.php" + ], + "psr-4": { + "Illuminate\\": "src/Illuminate/", + "Illuminate\\Support\\": [ + "src/Illuminate/Macroable/", + "src/Illuminate/Collections/", + "src/Illuminate/Conditionable/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Laravel Framework.", + "homepage": "https://laravel.com", + "keywords": [ + "framework", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2024-11-27T15:43:57+00:00" + }, + { + "name": "laravel/prompts", + "version": "v0.3.2", + "source": { + "type": "git", + "url": "https://github.com/laravel/prompts.git", + "reference": "0e0535747c6b8d6d10adca8b68293cf4517abb0f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/prompts/zipball/0e0535747c6b8d6d10adca8b68293cf4517abb0f", + "reference": "0e0535747c6b8d6d10adca8b68293cf4517abb0f", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2.2", + "ext-mbstring": "*", + "php": "^8.1", + "symfony/console": "^6.2|^7.0" + }, + "conflict": { + "illuminate/console": ">=10.17.0 <10.25.0", + "laravel/framework": ">=10.17.0 <10.25.0" + }, + "require-dev": { + "illuminate/collections": "^10.0|^11.0", + "mockery/mockery": "^1.5", + "pestphp/pest": "^2.3|^3.4", + "phpstan/phpstan": "^1.11", + "phpstan/phpstan-mockery": "^1.1" + }, + "suggest": { + "ext-pcntl": "Required for the spinner to be animated." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.3.x-dev" + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Laravel\\Prompts\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Add beautiful and user-friendly forms to your command-line applications.", + "support": { + "issues": "https://github.com/laravel/prompts/issues", + "source": "https://github.com/laravel/prompts/tree/v0.3.2" + }, + "time": "2024-11-12T14:59:47+00:00" + }, + { + "name": "laravel/serializable-closure", + "version": "v2.0.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/serializable-closure.git", + "reference": "0d8d3d8086984996df86596a86dea60398093a81" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/0d8d3d8086984996df86596a86dea60398093a81", + "reference": "0d8d3d8086984996df86596a86dea60398093a81", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "illuminate/support": "^10.0|^11.0", + "nesbot/carbon": "^2.67|^3.0", + "pestphp/pest": "^2.36", + "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": "2024-11-19T01:38:44+00:00" + }, + { + "name": "laravel/tinker", + "version": "v2.10.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/tinker.git", + "reference": "ba4d51eb56de7711b3a37d63aa0643e99a339ae5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/tinker/zipball/ba4d51eb56de7711b3a37d63aa0643e99a339ae5", + "reference": "ba4d51eb56de7711b3a37d63aa0643e99a339ae5", + "shasum": "" + }, + "require": { + "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", + "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", + "php": "^7.2.5|^8.0", + "psy/psysh": "^0.11.1|^0.12.0", + "symfony/var-dumper": "^4.3.4|^5.0|^6.0|^7.0" + }, + "require-dev": { + "mockery/mockery": "~1.3.3|^1.4.2", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^8.5.8|^9.3.3" + }, + "suggest": { + "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0|^11.0)." + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Tinker\\TinkerServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Tinker\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Powerful REPL for the Laravel framework.", + "keywords": [ + "REPL", + "Tinker", + "laravel", + "psysh" + ], + "support": { + "issues": "https://github.com/laravel/tinker/issues", + "source": "https://github.com/laravel/tinker/tree/v2.10.0" + }, + "time": "2024-09-23T13:32:56+00:00" + }, + { + "name": "league/commonmark", + "version": "2.5.3", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "b650144166dfa7703e62a22e493b853b58d874b0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/b650144166dfa7703e62a22e493b853b58d874b0", + "reference": "b650144166dfa7703e62a22e493b853b58d874b0", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "league/config": "^1.1.1", + "php": "^7.4 || ^8.0", + "psr/event-dispatcher": "^1.0", + "symfony/deprecation-contracts": "^2.1 || ^3.0", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "cebe/markdown": "^1.0", + "commonmark/cmark": "0.31.1", + "commonmark/commonmark.js": "0.31.1", + "composer/package-versions-deprecated": "^1.8", + "embed/embed": "^4.4", + "erusev/parsedown": "^1.0", + "ext-json": "*", + "github/gfm": "0.29.0", + "michelf/php-markdown": "^1.4 || ^2.0", + "nyholm/psr7": "^1.5", + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0", + "scrutinizer/ocular": "^1.8.1", + "symfony/finder": "^5.3 | ^6.0 || ^7.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 || ^7.0", + "unleashedtech/php-coding-standard": "^3.1.1", + "vimeo/psalm": "^4.24.0 || ^5.0.0" + }, + "suggest": { + "symfony/yaml": "v2.3+ required if using the Front Matter extension" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.6-dev" + } + }, + "autoload": { + "psr-4": { + "League\\CommonMark\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)", + "homepage": "https://commonmark.thephpleague.com", + "keywords": [ + "commonmark", + "flavored", + "gfm", + "github", + "github-flavored", + "markdown", + "md", + "parser" + ], + "support": { + "docs": "https://commonmark.thephpleague.com/", + "forum": "https://github.com/thephpleague/commonmark/discussions", + "issues": "https://github.com/thephpleague/commonmark/issues", + "rss": "https://github.com/thephpleague/commonmark/releases.atom", + "source": "https://github.com/thephpleague/commonmark" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/commonmark", + "type": "tidelift" + } + ], + "time": "2024-08-16T11:46:16+00:00" + }, + { + "name": "league/config", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/config.git", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/config/zipball/754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^3.0.1", + "nette/schema": "^1.2", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.5", + "scrutinizer/ocular": "^1.8.1", + "unleashedtech/php-coding-standard": "^3.1", + "vimeo/psalm": "^4.7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Config\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Define configuration arrays with strict schemas and access values with dot notation", + "homepage": "https://config.thephpleague.com", + "keywords": [ + "array", + "config", + "configuration", + "dot", + "dot-access", + "nested", + "schema" + ], + "support": { + "docs": "https://config.thephpleague.com/", + "issues": "https://github.com/thephpleague/config/issues", + "rss": "https://github.com/thephpleague/config/releases.atom", + "source": "https://github.com/thephpleague/config" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + } + ], + "time": "2022-12-11T20:36:23+00:00" + }, + { + "name": "league/csv", + "version": "9.18.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/csv.git", + "reference": "b02d010e4055ae992247f6ffd1e7b103ef2a0790" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/csv/zipball/b02d010e4055ae992247f6ffd1e7b103ef2a0790", + "reference": "b02d010e4055ae992247f6ffd1e7b103ef2a0790", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "php": "^8.1.2" + }, + "require-dev": { + "ext-dom": "*", + "ext-xdebug": "*", + "friendsofphp/php-cs-fixer": "^3.64.0", + "phpbench/phpbench": "^1.3.1", + "phpstan/phpstan": "^1.12.6", + "phpstan/phpstan-deprecation-rules": "^1.2.1", + "phpstan/phpstan-phpunit": "^1.4.0", + "phpstan/phpstan-strict-rules": "^1.6.1", + "phpunit/phpunit": "^10.5.16 || ^11.4.1", + "symfony/var-dumper": "^6.4.8 || ^7.1.5" + }, + "suggest": { + "ext-dom": "Required to use the XMLConverter and the HTMLConverter classes", + "ext-iconv": "Needed to ease transcoding CSV using iconv stream filters", + "ext-mbstring": "Needed to ease transcoding CSV using mb stream filters" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "League\\Csv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://github.com/nyamsprod/", + "role": "Developer" + } + ], + "description": "CSV data manipulation made easy in PHP", + "homepage": "https://csv.thephpleague.com", + "keywords": [ + "convert", + "csv", + "export", + "filter", + "import", + "read", + "transform", + "write" + ], + "support": { + "docs": "https://csv.thephpleague.com", + "issues": "https://github.com/thephpleague/csv/issues", + "rss": "https://github.com/thephpleague/csv/releases.atom", + "source": "https://github.com/thephpleague/csv" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2024-10-18T08:14:48+00:00" + }, + { + "name": "league/flysystem", + "version": "3.29.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "edc1bb7c86fab0776c3287dbd19b5fa278347319" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/edc1bb7c86fab0776c3287dbd19b5fa278347319", + "reference": "edc1bb7c86fab0776c3287dbd19b5fa278347319", + "shasum": "" + }, + "require": { + "league/flysystem-local": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "conflict": { + "async-aws/core": "<1.19.0", + "async-aws/s3": "<1.14.0", + "aws/aws-sdk-php": "3.209.31 || 3.210.0", + "guzzlehttp/guzzle": "<7.0", + "guzzlehttp/ringphp": "<1.1.1", + "phpseclib/phpseclib": "3.0.15", + "symfony/http-client": "<5.2" + }, + "require-dev": { + "async-aws/s3": "^1.5 || ^2.0", + "async-aws/simple-s3": "^1.1 || ^2.0", + "aws/aws-sdk-php": "^3.295.10", + "composer/semver": "^3.0", + "ext-fileinfo": "*", + "ext-ftp": "*", + "ext-mongodb": "^1.3", + "ext-zip": "*", + "friendsofphp/php-cs-fixer": "^3.5", + "google/cloud-storage": "^1.23", + "guzzlehttp/psr7": "^2.6", + "microsoft/azure-storage-blob": "^1.1", + "mongodb/mongodb": "^1.2", + "phpseclib/phpseclib": "^3.0.36", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^9.5.11|^10.0", + "sabre/dav": "^4.6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "File storage abstraction for PHP", + "keywords": [ + "WebDAV", + "aws", + "cloud", + "file", + "files", + "filesystem", + "filesystems", + "ftp", + "s3", + "sftp", + "storage" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem/issues", + "source": "https://github.com/thephpleague/flysystem/tree/3.29.1" + }, + "time": "2024-10-08T08:58:34+00:00" + }, + { + "name": "league/flysystem-aws-s3-v3", + "version": "3.29.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git", + "reference": "c6ff6d4606e48249b63f269eba7fabdb584e76a9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/c6ff6d4606e48249b63f269eba7fabdb584e76a9", + "reference": "c6ff6d4606e48249b63f269eba7fabdb584e76a9", + "shasum": "" + }, + "require": { + "aws/aws-sdk-php": "^3.295.10", + "league/flysystem": "^3.10.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "conflict": { + "guzzlehttp/guzzle": "<7.0", + "guzzlehttp/ringphp": "<1.1.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\AwsS3V3\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "AWS S3 filesystem adapter for Flysystem.", + "keywords": [ + "Flysystem", + "aws", + "file", + "files", + "filesystem", + "s3", + "storage" + ], + "support": { + "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.29.0" + }, + "time": "2024-08-17T13:10:48+00:00" + }, + { + "name": "league/flysystem-local", + "version": "3.29.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem-local.git", + "reference": "e0e8d52ce4b2ed154148453d321e97c8e931bd27" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/e0e8d52ce4b2ed154148453d321e97c8e931bd27", + "reference": "e0e8d52ce4b2ed154148453d321e97c8e931bd27", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "league/flysystem": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\Local\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Local filesystem adapter for Flysystem.", + "keywords": [ + "Flysystem", + "file", + "files", + "filesystem", + "local" + ], + "support": { + "source": "https://github.com/thephpleague/flysystem-local/tree/3.29.0" + }, + "time": "2024-08-09T21:24:39+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": "league/uri", + "version": "7.4.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri.git", + "reference": "bedb6e55eff0c933668addaa7efa1e1f2c417cc4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/bedb6e55eff0c933668addaa7efa1e1f2c417cc4", + "reference": "bedb6e55eff0c933668addaa7efa1e1f2c417cc4", + "shasum": "" + }, + "require": { + "league/uri-interfaces": "^7.3", + "php": "^8.1" + }, + "conflict": { + "league/uri-schemes": "^1.0" + }, + "suggest": { + "ext-bcmath": "to improve IPV4 host parsing", + "ext-fileinfo": "to create Data URI from file contennts", + "ext-gmp": "to improve IPV4 host parsing", + "ext-intl": "to handle IDN host with the best performance", + "jeremykendall/php-domain-parser": "to resolve Public Suffix and Top Level Domain", + "league/uri-components": "Needed to easily manipulate URI objects components", + "php-64bit": "to improve IPV4 host parsing", + "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "URI manipulation library", + "homepage": "https://uri.thephpleague.com", + "keywords": [ + "data-uri", + "file-uri", + "ftp", + "hostname", + "http", + "https", + "middleware", + "parse_str", + "parse_url", + "psr-7", + "query-string", + "querystring", + "rfc3986", + "rfc3987", + "rfc6570", + "uri", + "uri-template", + "url", + "ws" + ], + "support": { + "docs": "https://uri.thephpleague.com", + "forum": "https://thephpleague.slack.com", + "issues": "https://github.com/thephpleague/uri-src/issues", + "source": "https://github.com/thephpleague/uri/tree/7.4.1" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2024-03-23T07:42:40+00:00" + }, + { + "name": "league/uri-interfaces", + "version": "7.4.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri-interfaces.git", + "reference": "8d43ef5c841032c87e2de015972c06f3865ef718" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/8d43ef5c841032c87e2de015972c06f3865ef718", + "reference": "8d43ef5c841032c87e2de015972c06f3865ef718", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "php": "^8.1", + "psr/http-factory": "^1", + "psr/http-message": "^1.1 || ^2.0" + }, + "suggest": { + "ext-bcmath": "to improve IPV4 host parsing", + "ext-gmp": "to improve IPV4 host parsing", + "ext-intl": "to handle IDN host with the best performance", + "php-64bit": "to improve IPV4 host parsing", + "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "Common interfaces and classes for URI representation and interaction", + "homepage": "https://uri.thephpleague.com", + "keywords": [ + "data-uri", + "file-uri", + "ftp", + "hostname", + "http", + "https", + "parse_str", + "parse_url", + "psr-7", + "query-string", + "querystring", + "rfc3986", + "rfc3987", + "rfc6570", + "uri", + "url", + "ws" + ], + "support": { + "docs": "https://uri.thephpleague.com", + "forum": "https://thephpleague.slack.com", + "issues": "https://github.com/thephpleague/uri-src/issues", + "source": "https://github.com/thephpleague/uri-interfaces/tree/7.4.1" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2024-03-23T07:42:40+00:00" + }, + { + "name": "leandrocfe/filament-apex-charts", + "version": "3.1.4", + "source": { + "type": "git", + "url": "https://github.com/leandrocfe/filament-apex-charts.git", + "reference": "e7cfd3f4966a555f30db6f5fcb2f3b3102bc1e99" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/leandrocfe/filament-apex-charts/zipball/e7cfd3f4966a555f30db6f5fcb2f3b3102bc1e99", + "reference": "e7cfd3f4966a555f30db6f5fcb2f3b3102bc1e99", + "shasum": "" + }, + "require": { + "filament/filament": "^3.0", + "illuminate/contracts": "^9.0|^10.0|^11.0", + "livewire/livewire": "^3.0", + "php": "^8.1|^8.2", + "spatie/laravel-package-tools": "^1.13.0" + }, + "require-dev": { + "larastan/larastan": "^2.0.1", + "laravel/pint": "^1.0", + "nunomaduro/collision": "^6.0|^7.0|^8.0", + "orchestra/testbench": "8.14|^9.0", + "pestphp/pest": "^1.21", + "pestphp/pest-plugin-laravel": "^1.1", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^9.5|^10.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Leandrocfe\\FilamentApexCharts\\FilamentApexChartsServiceProvider" + ], + "aliases": { + "FilamentApexCharts": "Leandrocfe\\FilamentApexCharts\\Facades\\FilamentApexCharts" + } + } + }, + "autoload": { + "psr-4": { + "Leandrocfe\\FilamentApexCharts\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Leandro Costa Ferreira", + "email": "leandrocfe@gmail.com", + "role": "Developer" + } + ], + "description": "Apex Charts integration for Filament PHP.", + "homepage": "https://github.com/leandrocfe/filament-apex-charts", + "keywords": [ + "apexcharts", + "filament-apex-charts", + "laravel", + "leandrocfe" + ], + "support": { + "issues": "https://github.com/leandrocfe/filament-apex-charts/issues", + "source": "https://github.com/leandrocfe/filament-apex-charts/tree/3.1.4" + }, + "time": "2024-09-14T13:57:27+00:00" + }, + { + "name": "livewire/livewire", + "version": "v3.5.12", + "source": { + "type": "git", + "url": "https://github.com/livewire/livewire.git", + "reference": "3c8d1f9d7d9098aaea663093ae168f2d5d2ae73d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/livewire/livewire/zipball/3c8d1f9d7d9098aaea663093ae168f2d5d2ae73d", + "reference": "3c8d1f9d7d9098aaea663093ae168f2d5d2ae73d", + "shasum": "" + }, + "require": { + "illuminate/database": "^10.0|^11.0", + "illuminate/routing": "^10.0|^11.0", + "illuminate/support": "^10.0|^11.0", + "illuminate/validation": "^10.0|^11.0", + "laravel/prompts": "^0.1.24|^0.2|^0.3", + "league/mime-type-detection": "^1.9", + "php": "^8.1", + "symfony/console": "^6.0|^7.0", + "symfony/http-kernel": "^6.2|^7.0" + }, + "require-dev": { + "calebporzio/sushi": "^2.1", + "laravel/framework": "^10.15.0|^11.0", + "mockery/mockery": "^1.3.1", + "orchestra/testbench": "^8.21.0|^9.0", + "orchestra/testbench-dusk": "^8.24|^9.1", + "phpunit/phpunit": "^10.4", + "psy/psysh": "^0.11.22|^0.12" + }, + "type": "library", + "extra": { + "laravel": { + "aliases": { + "Livewire": "Livewire\\Livewire" + }, + "providers": [ + "Livewire\\LivewireServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Livewire\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Caleb Porzio", + "email": "calebporzio@gmail.com" + } + ], + "description": "A front-end framework for Laravel.", + "support": { + "issues": "https://github.com/livewire/livewire/issues", + "source": "https://github.com/livewire/livewire/tree/v3.5.12" + }, + "funding": [ + { + "url": "https://github.com/livewire", + "type": "github" + } + ], + "time": "2024-10-15T19:35:06+00:00" + }, + { + "name": "maatwebsite/excel", + "version": "3.1.61", + "source": { + "type": "git", + "url": "https://github.com/SpartnerNL/Laravel-Excel.git", + "reference": "62616317c5ec07e885c5d7f6b537f57a7239c2ff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/SpartnerNL/Laravel-Excel/zipball/62616317c5ec07e885c5d7f6b537f57a7239c2ff", + "reference": "62616317c5ec07e885c5d7f6b537f57a7239c2ff", + "shasum": "" + }, + "require": { + "composer/semver": "^3.3", + "ext-json": "*", + "illuminate/support": "5.8.*||^6.0||^7.0||^8.0||^9.0||^10.0||^11.0", + "php": "^7.0||^8.0", + "phpoffice/phpspreadsheet": "^1.29.4", + "psr/simple-cache": "^1.0||^2.0||^3.0" + }, + "require-dev": { + "laravel/scout": "^7.0||^8.0||^9.0||^10.0", + "orchestra/testbench": "^6.0||^7.0||^8.0||^9.0", + "predis/predis": "^1.1" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Maatwebsite\\Excel\\ExcelServiceProvider" + ], + "aliases": { + "Excel": "Maatwebsite\\Excel\\Facades\\Excel" + } + } + }, + "autoload": { + "psr-4": { + "Maatwebsite\\Excel\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Patrick Brouwers", + "email": "patrick@spartner.nl" + } + ], + "description": "Supercharged Excel exports and imports in Laravel", + "keywords": [ + "PHPExcel", + "batch", + "csv", + "excel", + "export", + "import", + "laravel", + "php", + "phpspreadsheet" + ], + "support": { + "issues": "https://github.com/SpartnerNL/Laravel-Excel/issues", + "source": "https://github.com/SpartnerNL/Laravel-Excel/tree/3.1.61" + }, + "funding": [ + { + "url": "https://laravel-excel.com/commercial-support", + "type": "custom" + }, + { + "url": "https://github.com/patrickbrouwers", + "type": "github" + } + ], + "time": "2024-11-25T18:41:59+00:00" + }, + { + "name": "maennchen/zipstream-php", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/maennchen/ZipStream-PHP.git", + "reference": "6187e9cc4493da94b9b63eb2315821552015fca9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/6187e9cc4493da94b9b63eb2315821552015fca9", + "reference": "6187e9cc4493da94b9b63eb2315821552015fca9", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "ext-zlib": "*", + "php-64bit": "^8.1" + }, + "require-dev": { + "ext-zip": "*", + "friendsofphp/php-cs-fixer": "^3.16", + "guzzlehttp/guzzle": "^7.5", + "mikey179/vfsstream": "^1.6", + "php-coveralls/php-coveralls": "^2.5", + "phpunit/phpunit": "^10.0", + "vimeo/psalm": "^5.0" + }, + "suggest": { + "guzzlehttp/psr7": "^2.4", + "psr/http-message": "^2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "ZipStream\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paul Duncan", + "email": "pabs@pablotron.org" + }, + { + "name": "Jonatan Männchen", + "email": "jonatan@maennchen.ch" + }, + { + "name": "Jesse Donat", + "email": "donatj@gmail.com" + }, + { + "name": "András Kolesár", + "email": "kolesar@kolesar.hu" + } + ], + "description": "ZipStream is a library for dynamically streaming dynamic zip files from PHP without writing to the disk at all on the server.", + "keywords": [ + "stream", + "zip" + ], + "support": { + "issues": "https://github.com/maennchen/ZipStream-PHP/issues", + "source": "https://github.com/maennchen/ZipStream-PHP/tree/3.1.1" + }, + "funding": [ + { + "url": "https://github.com/maennchen", + "type": "github" + } + ], + "time": "2024-10-10T12:33:01+00:00" + }, + { + "name": "markbaker/complex", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/MarkBaker/PHPComplex.git", + "reference": "95c56caa1cf5c766ad6d65b6344b807c1e8405b9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/MarkBaker/PHPComplex/zipball/95c56caa1cf5c766ad6d65b6344b807c1e8405b9", + "reference": "95c56caa1cf5c766ad6d65b6344b807c1e8405b9", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "dev-master", + "phpcompatibility/php-compatibility": "^9.3", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", + "squizlabs/php_codesniffer": "^3.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Complex\\": "classes/src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark Baker", + "email": "mark@lange.demon.co.uk" + } + ], + "description": "PHP Class for working with complex numbers", + "homepage": "https://github.com/MarkBaker/PHPComplex", + "keywords": [ + "complex", + "mathematics" + ], + "support": { + "issues": "https://github.com/MarkBaker/PHPComplex/issues", + "source": "https://github.com/MarkBaker/PHPComplex/tree/3.0.2" + }, + "time": "2022-12-06T16:21:08+00:00" + }, + { + "name": "markbaker/matrix", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/MarkBaker/PHPMatrix.git", + "reference": "728434227fe21be27ff6d86621a1b13107a2562c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/MarkBaker/PHPMatrix/zipball/728434227fe21be27ff6d86621a1b13107a2562c", + "reference": "728434227fe21be27ff6d86621a1b13107a2562c", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "dev-master", + "phpcompatibility/php-compatibility": "^9.3", + "phpdocumentor/phpdocumentor": "2.*", + "phploc/phploc": "^4.0", + "phpmd/phpmd": "2.*", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", + "sebastian/phpcpd": "^4.0", + "squizlabs/php_codesniffer": "^3.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Matrix\\": "classes/src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark Baker", + "email": "mark@demon-angel.eu" + } + ], + "description": "PHP Class for working with matrices", + "homepage": "https://github.com/MarkBaker/PHPMatrix", + "keywords": [ + "mathematics", + "matrix", + "vector" + ], + "support": { + "issues": "https://github.com/MarkBaker/PHPMatrix/issues", + "source": "https://github.com/MarkBaker/PHPMatrix/tree/3.0.1" + }, + "time": "2022-12-02T22:17:43+00:00" + }, + { + "name": "masterminds/html5", + "version": "2.9.0", + "source": { + "type": "git", + "url": "https://github.com/Masterminds/html5-php.git", + "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/f5ac2c0b0a2eefca70b2ce32a5809992227e75a6", + "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8 || ^9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Masterminds\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matt Butcher", + "email": "technosophos@gmail.com" + }, + { + "name": "Matt Farina", + "email": "matt@mattfarina.com" + }, + { + "name": "Asmir Mustafic", + "email": "goetas@gmail.com" + } + ], + "description": "An HTML5 parser and serializer.", + "homepage": "http://masterminds.github.io/html5-php", + "keywords": [ + "HTML5", + "dom", + "html", + "parser", + "querypath", + "serializer", + "xml" + ], + "support": { + "issues": "https://github.com/Masterminds/html5-php/issues", + "source": "https://github.com/Masterminds/html5-php/tree/2.9.0" + }, + "time": "2024-03-31T07:05:07+00:00" + }, + { + "name": "monolog/monolog", + "version": "3.8.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "32e515fdc02cdafbe4593e30a9350d486b125b67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/32e515fdc02cdafbe4593e30a9350d486b125b67", + "reference": "32e515fdc02cdafbe4593e30a9350d486b125b67", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^2.0 || ^3.0" + }, + "provide": { + "psr/log-implementation": "3.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", + "graylog2/gelf-php": "^1.4.2 || ^2.0", + "guzzlehttp/guzzle": "^7.4.5", + "guzzlehttp/psr7": "^2.2", + "mongodb/mongodb": "^1.8", + "php-amqplib/php-amqplib": "~2.4 || ^3", + "php-console/php-console": "^3.1.8", + "phpstan/phpstan": "^2", + "phpstan/phpstan-deprecation-rules": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^10.5.17 || ^11.0.7", + "predis/predis": "^1.1 || ^2", + "rollbar/rollbar": "^4.0", + "ruflin/elastica": "^7 || ^8", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "ext-openssl": "Required to send log messages using SSL", + "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "https://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/3.8.0" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2024-11-12T13:57:08+00:00" + }, + { + "name": "mtdowling/jmespath.php", + "version": "2.8.0", + "source": { + "type": "git", + "url": "https://github.com/jmespath/jmespath.php.git", + "reference": "a2a865e05d5f420b50cc2f85bb78d565db12a6bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/a2a865e05d5f420b50cc2f85bb78d565db12a6bc", + "reference": "a2a865e05d5f420b50cc2f85bb78d565db12a6bc", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "symfony/polyfill-mbstring": "^1.17" + }, + "require-dev": { + "composer/xdebug-handler": "^3.0.3", + "phpunit/phpunit": "^8.5.33" + }, + "bin": [ + "bin/jp.php" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "files": [ + "src/JmesPath.php" + ], + "psr-4": { + "JmesPath\\": "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" + } + ], + "description": "Declaratively specify how to extract elements from a JSON document", + "keywords": [ + "json", + "jsonpath" + ], + "support": { + "issues": "https://github.com/jmespath/jmespath.php/issues", + "source": "https://github.com/jmespath/jmespath.php/tree/2.8.0" + }, + "time": "2024-09-04T18:46:31+00:00" + }, + { + "name": "nesbot/carbon", + "version": "3.8.2", + "source": { + "type": "git", + "url": "https://github.com/briannesbitt/Carbon.git", + "reference": "e1268cdbc486d97ce23fef2c666dc3c6b6de9947" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/e1268cdbc486d97ce23fef2c666dc3c6b6de9947", + "reference": "e1268cdbc486d97ce23fef2c666dc3c6b6de9947", + "shasum": "" + }, + "require": { + "carbonphp/carbon-doctrine-types": "<100.0", + "ext-json": "*", + "php": "^8.1", + "psr/clock": "^1.0", + "symfony/clock": "^6.3 || ^7.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/translation": "^4.4.18 || ^5.2.1|| ^6.0 || ^7.0" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "require-dev": { + "doctrine/dbal": "^3.6.3 || ^4.0", + "doctrine/orm": "^2.15.2 || ^3.0", + "friendsofphp/php-cs-fixer": "^3.57.2", + "kylekatarnls/multi-tester": "^2.5.3", + "ondrejmirtes/better-reflection": "^6.25.0.4", + "phpmd/phpmd": "^2.15.0", + "phpstan/extension-installer": "^1.3.1", + "phpstan/phpstan": "^1.11.2", + "phpunit/phpunit": "^10.5.20", + "squizlabs/php_codesniffer": "^3.9.0" + }, + "bin": [ + "bin/carbon" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev", + "dev-2.x": "2.x-dev" + }, + "laravel": { + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "autoload": { + "psr-4": { + "Carbon\\": "src/Carbon/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "https://markido.com" + }, + { + "name": "kylekatarnls", + "homepage": "https://github.com/kylekatarnls" + } + ], + "description": "An API extension for DateTime that supports 281 different languages.", + "homepage": "https://carbon.nesbot.com", + "keywords": [ + "date", + "datetime", + "time" + ], + "support": { + "docs": "https://carbon.nesbot.com/docs", + "issues": "https://github.com/briannesbitt/Carbon/issues", + "source": "https://github.com/briannesbitt/Carbon" + }, + "funding": [ + { + "url": "https://github.com/sponsors/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon#sponsor", + "type": "opencollective" + }, + { + "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme", + "type": "tidelift" + } + ], + "time": "2024-11-07T17:46:48+00:00" + }, + { + "name": "nette/schema", + "version": "v1.3.2", + "source": { + "type": "git", + "url": "https://github.com/nette/schema.git", + "reference": "da801d52f0354f70a638673c4a0f04e16529431d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/schema/zipball/da801d52f0354f70a638673c4a0f04e16529431d", + "reference": "da801d52f0354f70a638673c4a0f04e16529431d", + "shasum": "" + }, + "require": { + "nette/utils": "^4.0", + "php": "8.1 - 8.4" + }, + "require-dev": { + "nette/tester": "^2.5.2", + "phpstan/phpstan-nette": "^1.0", + "tracy/tracy": "^2.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "📐 Nette Schema: validating data structures against a given Schema.", + "homepage": "https://nette.org", + "keywords": [ + "config", + "nette" + ], + "support": { + "issues": "https://github.com/nette/schema/issues", + "source": "https://github.com/nette/schema/tree/v1.3.2" + }, + "time": "2024-10-06T23:10:23+00:00" + }, + { + "name": "nette/utils", + "version": "v4.0.5", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/736c567e257dbe0fcf6ce81b4d6dbe05c6899f96", + "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96", + "shasum": "" + }, + "require": { + "php": "8.0 - 8.4" + }, + "conflict": { + "nette/finder": "<3", + "nette/schema": "<1.2.2" + }, + "require-dev": { + "jetbrains/phpstorm-attributes": "dev-master", + "nette/tester": "^2.5", + "phpstan/phpstan": "^1.0", + "tracy/tracy": "^2.9" + }, + "suggest": { + "ext-gd": "to use Image", + "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", + "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", + "ext-json": "to use Nette\\Utils\\Json", + "ext-mbstring": "to use Strings::lower() etc...", + "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "homepage": "https://nette.org", + "keywords": [ + "array", + "core", + "datetime", + "images", + "json", + "nette", + "paginator", + "password", + "slugify", + "string", + "unicode", + "utf-8", + "utility", + "validation" + ], + "support": { + "issues": "https://github.com/nette/utils/issues", + "source": "https://github.com/nette/utils/tree/v4.0.5" + }, + "time": "2024-08-07T15:39:19+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v5.3.1", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/8eea230464783aa9671db8eea6f8c6ac5285794b", + "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "php": ">=7.4" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v5.3.1" + }, + "time": "2024-10-08T18:51:32+00:00" + }, + { + "name": "nunomaduro/termwind", + "version": "v2.3.0", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/termwind.git", + "reference": "52915afe6a1044e8b9cee1bcff836fb63acf9cda" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/52915afe6a1044e8b9cee1bcff836fb63acf9cda", + "reference": "52915afe6a1044e8b9cee1bcff836fb63acf9cda", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^8.2", + "symfony/console": "^7.1.8" + }, + "require-dev": { + "illuminate/console": "^11.33.2", + "laravel/pint": "^1.18.2", + "mockery/mockery": "^1.6.12", + "pestphp/pest": "^2.36.0", + "phpstan/phpstan": "^1.12.11", + "phpstan/phpstan-strict-rules": "^1.6.1", + "symfony/var-dumper": "^7.1.8", + "thecodingmachine/phpstan-strict-rules": "^1.0.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Termwind\\Laravel\\TermwindServiceProvider" + ] + }, + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, + "autoload": { + "files": [ + "src/Functions.php" + ], + "psr-4": { + "Termwind\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Its like Tailwind CSS, but for the console.", + "keywords": [ + "cli", + "console", + "css", + "package", + "php", + "style" + ], + "support": { + "issues": "https://github.com/nunomaduro/termwind/issues", + "source": "https://github.com/nunomaduro/termwind/tree/v2.3.0" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://github.com/xiCO2k", + "type": "github" + } + ], + "time": "2024-11-21T10:39:51+00:00" + }, + { + "name": "openspout/openspout", + "version": "v4.28.0", + "source": { + "type": "git", + "url": "https://github.com/openspout/openspout.git", + "reference": "3e9ef74f13ba5e887e4afc7a4e0110e63559e902" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/openspout/openspout/zipball/3e9ef74f13ba5e887e4afc7a4e0110e63559e902", + "reference": "3e9ef74f13ba5e887e4afc7a4e0110e63559e902", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-fileinfo": "*", + "ext-filter": "*", + "ext-libxml": "*", + "ext-xmlreader": "*", + "ext-zip": "*", + "php": "~8.2.0 || ~8.3.0 || ~8.4.0" + }, + "require-dev": { + "ext-zlib": "*", + "friendsofphp/php-cs-fixer": "^3.65.0", + "infection/infection": "^0.29.8", + "phpbench/phpbench": "^1.3.1", + "phpstan/phpstan": "^2.0.3", + "phpstan/phpstan-phpunit": "^2.0.1", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^11.4.4" + }, + "suggest": { + "ext-iconv": "To handle non UTF-8 CSV files (if \"php-mbstring\" is not already installed or is too limited)", + "ext-mbstring": "To handle non UTF-8 CSV files (if \"iconv\" is not already installed)" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3.x-dev" + } + }, + "autoload": { + "psr-4": { + "OpenSpout\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Adrien Loison", + "email": "adrien@box.com" + } + ], + "description": "PHP Library to read and write spreadsheet files (CSV, XLSX and ODS), in a fast and scalable way", + "homepage": "https://github.com/openspout/openspout", + "keywords": [ + "OOXML", + "csv", + "excel", + "memory", + "odf", + "ods", + "office", + "open", + "php", + "read", + "scale", + "spreadsheet", + "stream", + "write", + "xlsx" + ], + "support": { + "issues": "https://github.com/openspout/openspout/issues", + "source": "https://github.com/openspout/openspout/tree/v4.28.0" + }, + "funding": [ + { + "url": "https://paypal.me/filippotessarotto", + "type": "custom" + }, + { + "url": "https://github.com/Slamdunk", + "type": "github" + } + ], + "time": "2024-11-29T09:45:53+00:00" + }, + { + "name": "phpoffice/phpspreadsheet", + "version": "1.29.6", + "source": { + "type": "git", + "url": "https://github.com/PHPOffice/PhpSpreadsheet.git", + "reference": "08597725b84570cd6f32bf0ea92e75a803ef28c2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/08597725b84570cd6f32bf0ea92e75a803ef28c2", + "reference": "08597725b84570cd6f32bf0ea92e75a803ef28c2", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-dom": "*", + "ext-fileinfo": "*", + "ext-gd": "*", + "ext-iconv": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-simplexml": "*", + "ext-xml": "*", + "ext-xmlreader": "*", + "ext-xmlwriter": "*", + "ext-zip": "*", + "ext-zlib": "*", + "ezyang/htmlpurifier": "^4.15", + "maennchen/zipstream-php": "^2.1 || ^3.0", + "markbaker/complex": "^3.0", + "markbaker/matrix": "^3.0", + "php": "^7.4 || ^8.0", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0", + "psr/simple-cache": "^1.0 || ^2.0 || ^3.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "dev-main", + "dompdf/dompdf": "^1.0 || ^2.0 || ^3.0", + "friendsofphp/php-cs-fixer": "^3.2", + "mitoteam/jpgraph": "^10.3", + "mpdf/mpdf": "^8.1.1", + "phpcompatibility/php-compatibility": "^9.3", + "phpstan/phpstan": "^1.1", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^8.5 || ^9.0", + "squizlabs/php_codesniffer": "^3.7", + "tecnickcom/tcpdf": "^6.5" + }, + "suggest": { + "dompdf/dompdf": "Option for rendering PDF with PDF Writer", + "ext-intl": "PHP Internationalization Functions", + "mitoteam/jpgraph": "Option for rendering charts, or including charts with PDF or HTML Writers", + "mpdf/mpdf": "Option for rendering PDF with PDF Writer", + "tecnickcom/tcpdf": "Option for rendering PDF with PDF Writer" + }, + "type": "library", + "autoload": { + "psr-4": { + "PhpOffice\\PhpSpreadsheet\\": "src/PhpSpreadsheet" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Maarten Balliauw", + "homepage": "https://blog.maartenballiauw.be" + }, + { + "name": "Mark Baker", + "homepage": "https://markbakeruk.net" + }, + { + "name": "Franck Lefevre", + "homepage": "https://rootslabs.net" + }, + { + "name": "Erik Tilt" + }, + { + "name": "Adrien Crivelli" + } + ], + "description": "PHPSpreadsheet - Read, Create and Write Spreadsheet documents in PHP - Spreadsheet engine", + "homepage": "https://github.com/PHPOffice/PhpSpreadsheet", + "keywords": [ + "OpenXML", + "excel", + "gnumeric", + "ods", + "php", + "spreadsheet", + "xls", + "xlsx" + ], + "support": { + "issues": "https://github.com/PHPOffice/PhpSpreadsheet/issues", + "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/1.29.6" + }, + "time": "2024-12-08T05:49:00+00:00" + }, + { + "name": "phpoption/phpoption", + "version": "1.9.3", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/e3fac8b24f56113f7cb96af14958c0dd16330f54", + "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpOption\\": "src/PhpOption/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh" + }, + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ], + "support": { + "issues": "https://github.com/schmittjoh/php-option/issues", + "source": "https://github.com/schmittjoh/php-option/tree/1.9.3" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" + } + ], + "time": "2024-07-20T21:41:07+00:00" + }, + { + "name": "predis/predis", + "version": "v2.3.0", + "source": { + "type": "git", + "url": "https://github.com/predis/predis.git", + "reference": "bac46bfdb78cd6e9c7926c697012aae740cb9ec9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/predis/predis/zipball/bac46bfdb78cd6e9c7926c697012aae740cb9ec9", + "reference": "bac46bfdb78cd6e9c7926c697012aae740cb9ec9", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.3", + "phpstan/phpstan": "^1.9", + "phpunit/phpunit": "^8.0 || ^9.4" + }, + "suggest": { + "ext-relay": "Faster connection with in-memory caching (>=0.6.2)" + }, + "type": "library", + "autoload": { + "psr-4": { + "Predis\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Till Krüss", + "homepage": "https://till.im", + "role": "Maintainer" + } + ], + "description": "A flexible and feature-complete Redis client for PHP.", + "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/v2.3.0" + }, + "funding": [ + { + "url": "https://github.com/sponsors/tillkruss", + "type": "github" + } + ], + "time": "2024-11-21T20:00:02+00:00" + }, + { + "name": "psr/cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "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/3.0.0" + }, + "time": "2021-02-03T23:26:27+00:00" + }, + { + "name": "psr/clock", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Clock\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", + "keywords": [ + "clock", + "now", + "psr", + "psr-20", + "time" + ], + "support": { + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" + }, + "time": "2022-11-25T14:36:26+00:00" + }, + { + "name": "psr/container", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client" + }, + "time": "2023-09-23T14:17:50+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory" + }, + "time": "2024-04-15T12:06:14+00:00" + }, + { + "name": "psr/http-message", + "version": "2.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/2.0" + }, + "time": "2023-04-04T09:54:51+00:00" + }, + { + "name": "psr/log", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.2" + }, + "time": "2024-09-11T13:17:53+00:00" + }, + { + "name": "psr/simple-cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" + }, + "time": "2021-10-29T13:26:27+00:00" + }, + { + "name": "psy/psysh", + "version": "v0.12.5", + "source": { + "type": "git", + "url": "https://github.com/bobthecow/psysh.git", + "reference": "36a03ff27986682c22985e56aabaf840dd173cb5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/36a03ff27986682c22985e56aabaf840dd173cb5", + "reference": "36a03ff27986682c22985e56aabaf840dd173cb5", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-tokenizer": "*", + "nikic/php-parser": "^5.0 || ^4.0", + "php": "^8.0 || ^7.4", + "symfony/console": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4", + "symfony/var-dumper": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4" + }, + "conflict": { + "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.2" + }, + "suggest": { + "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", + "ext-pdo-sqlite": "The doc command requires SQLite to work.", + "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well." + }, + "bin": [ + "bin/psysh" + ], + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": false, + "forward-command": false + }, + "branch-alias": { + "dev-main": "0.12.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Psy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Justin Hileman", + "email": "justin@justinhileman.info", + "homepage": "http://justinhileman.com" + } + ], + "description": "An interactive shell for modern PHP.", + "homepage": "http://psysh.org", + "keywords": [ + "REPL", + "console", + "interactive", + "shell" + ], + "support": { + "issues": "https://github.com/bobthecow/psysh/issues", + "source": "https://github.com/bobthecow/psysh/tree/v0.12.5" + }, + "time": "2024-11-29T06:14:30+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "ramsey/collection", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/ramsey/collection.git", + "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/collection/zipball/a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", + "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "captainhook/plugin-composer": "^5.3", + "ergebnis/composer-normalize": "^2.28.3", + "fakerphp/faker": "^1.21", + "hamcrest/hamcrest-php": "^2.0", + "jangregor/phpstan-prophecy": "^1.0", + "mockery/mockery": "^1.5", + "php-parallel-lint/php-console-highlighter": "^1.0", + "php-parallel-lint/php-parallel-lint": "^1.3", + "phpcsstandards/phpcsutils": "^1.0.0-rc1", + "phpspec/prophecy-phpunit": "^2.0", + "phpstan/extension-installer": "^1.2", + "phpstan/phpstan": "^1.9", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5", + "psalm/plugin-mockery": "^1.1", + "psalm/plugin-phpunit": "^0.18.4", + "ramsey/coding-standard": "^2.0.3", + "ramsey/conventional-commits": "^1.3", + "vimeo/psalm": "^5.4" + }, + "type": "library", + "extra": { + "captainhook": { + "force-install": true + }, + "ramsey/conventional-commits": { + "configFile": "conventional-commits.json" + } + }, + "autoload": { + "psr-4": { + "Ramsey\\Collection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + } + ], + "description": "A PHP library for representing and manipulating collections.", + "keywords": [ + "array", + "collection", + "hash", + "map", + "queue", + "set" + ], + "support": { + "issues": "https://github.com/ramsey/collection/issues", + "source": "https://github.com/ramsey/collection/tree/2.0.0" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", + "type": "tidelift" + } + ], + "time": "2022-12-31T21:50:55+00:00" + }, + { + "name": "ramsey/uuid", + "version": "4.7.6", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "91039bc1faa45ba123c4328958e620d382ec7088" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/91039bc1faa45ba123c4328958e620d382ec7088", + "reference": "91039bc1faa45ba123c4328958e620d382ec7088", + "shasum": "" + }, + "require": { + "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12", + "ext-json": "*", + "php": "^8.0", + "ramsey/collection": "^1.2 || ^2.0" + }, + "replace": { + "rhumsaa/uuid": "self.version" + }, + "require-dev": { + "captainhook/captainhook": "^5.10", + "captainhook/plugin-composer": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "doctrine/annotations": "^1.8", + "ergebnis/composer-normalize": "^2.15", + "mockery/mockery": "^1.3", + "paragonie/random-lib": "^2", + "php-mock/php-mock": "^2.2", + "php-mock/php-mock-mockery": "^1.3", + "php-parallel-lint/php-parallel-lint": "^1.1", + "phpbench/phpbench": "^1.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^8.5 || ^9", + "ramsey/composer-repl": "^1.4", + "slevomat/coding-standard": "^8.4", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.9" + }, + "suggest": { + "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", + "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", + "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", + "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + }, + "type": "library", + "extra": { + "captainhook": { + "force-install": true + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Ramsey\\Uuid\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", + "keywords": [ + "guid", + "identifier", + "uuid" + ], + "support": { + "issues": "https://github.com/ramsey/uuid/issues", + "source": "https://github.com/ramsey/uuid/tree/4.7.6" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid", + "type": "tidelift" + } + ], + "time": "2024-04-27T21:32:50+00:00" + }, + { + "name": "ryangjchandler/blade-capture-directive", + "version": "v1.0.0", + "source": { + "type": "git", + "url": "https://github.com/ryangjchandler/blade-capture-directive.git", + "reference": "cb6f58663d97f17bece176295240b740835e14f1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ryangjchandler/blade-capture-directive/zipball/cb6f58663d97f17bece176295240b740835e14f1", + "reference": "cb6f58663d97f17bece176295240b740835e14f1", + "shasum": "" + }, + "require": { + "illuminate/contracts": "^10.0|^11.0", + "php": "^8.1", + "spatie/laravel-package-tools": "^1.9.2" + }, + "require-dev": { + "nunomaduro/collision": "^7.0|^8.0", + "nunomaduro/larastan": "^2.0", + "orchestra/testbench": "^8.0|^9.0", + "pestphp/pest": "^2.0", + "pestphp/pest-plugin-laravel": "^2.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^10.0", + "spatie/laravel-ray": "^1.26" + }, + "type": "library", + "extra": { + "laravel": { + "aliases": { + "BladeCaptureDirective": "RyanChandler\\BladeCaptureDirective\\Facades\\BladeCaptureDirective" + }, + "providers": [ + "RyanChandler\\BladeCaptureDirective\\BladeCaptureDirectiveServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "RyanChandler\\BladeCaptureDirective\\": "src", + "RyanChandler\\BladeCaptureDirective\\Database\\Factories\\": "database/factories" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ryan Chandler", + "email": "support@ryangjchandler.co.uk", + "role": "Developer" + } + ], + "description": "Create inline partials in your Blade templates with ease.", + "homepage": "https://github.com/ryangjchandler/blade-capture-directive", + "keywords": [ + "blade-capture-directive", + "laravel", + "ryangjchandler" + ], + "support": { + "issues": "https://github.com/ryangjchandler/blade-capture-directive/issues", + "source": "https://github.com/ryangjchandler/blade-capture-directive/tree/v1.0.0" + }, + "funding": [ + { + "url": "https://github.com/ryangjchandler", + "type": "github" + } + ], + "time": "2024-02-26T18:08:49+00:00" + }, + { + "name": "saade/filament-fullcalendar", + "version": "v3.2.2", + "source": { + "type": "git", + "url": "https://github.com/saade/filament-fullcalendar.git", + "reference": "d40410e6bc46057628fb9fa8f62b6090452914d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/saade/filament-fullcalendar/zipball/d40410e6bc46057628fb9fa8f62b6090452914d3", + "reference": "d40410e6bc46057628fb9fa8f62b6090452914d3", + "shasum": "" + }, + "require": { + "filament/filament": "^3.0", + "illuminate/contracts": "^10.0|^11.0", + "php": "^8.1", + "spatie/laravel-package-tools": "^1.13.5" + }, + "require-dev": { + "nunomaduro/collision": "^7.0|^8.0", + "nunomaduro/larastan": "^2.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "spatie/laravel-ray": "^1.26" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Saade\\FilamentFullCalendar\\FilamentFullCalendarServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Saade\\FilamentFullCalendar\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Saade", + "email": "saade@outlook.com.br", + "role": "Developer" + } + ], + "description": "The Most Popular JavaScript Calendar integrated with Filament 💛", + "homepage": "https://github.com/saade/filament-fullcalendar", + "keywords": [ + "filament-fullcalendar", + "laravel", + "saade" + ], + "support": { + "issues": "https://github.com/saade/filament-fullcalendar/issues", + "source": "https://github.com/saade/filament-fullcalendar/tree/v3.2.2" + }, + "funding": [ + { + "url": "https://github.com/saade", + "type": "github" + } + ], + "time": "2024-05-02T13:04:39+00:00" + }, + { + "name": "spatie/color", + "version": "1.6.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/color.git", + "reference": "4c540ffbef68a3df3d209718ae06deaab081e708" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/color/zipball/4c540ffbef68a3df3d209718ae06deaab081e708", + "reference": "4c540ffbef68a3df3d209718ae06deaab081e708", + "shasum": "" + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "pestphp/pest": "^1.22", + "phpunit/phpunit": "^6.5||^9.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\Color\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Sebastian De Deyne", + "email": "sebastian@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "A little library to handle color conversions", + "homepage": "https://github.com/spatie/color", + "keywords": [ + "color", + "conversion", + "rgb", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/color/issues", + "source": "https://github.com/spatie/color/tree/1.6.1" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2024-11-18T15:00:47+00:00" + }, + { + "name": "spatie/invade", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/spatie/invade.git", + "reference": "b920f6411d21df4e8610a138e2e87ae4957d7f63" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/invade/zipball/b920f6411d21df4e8610a138e2e87ae4957d7f63", + "reference": "b920f6411d21df4e8610a138e2e87ae4957d7f63", + "shasum": "" + }, + "require": { + "php": "^8.0" + }, + "require-dev": { + "pestphp/pest": "^1.20", + "phpstan/phpstan": "^1.4", + "spatie/ray": "^1.28" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Spatie\\Invade\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "role": "Developer" + } + ], + "description": "A PHP function to work with private properties and methods", + "homepage": "https://github.com/spatie/invade", + "keywords": [ + "invade", + "spatie" + ], + "support": { + "source": "https://github.com/spatie/invade/tree/2.1.0" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2024-05-17T09:06:10+00:00" + }, + { + "name": "spatie/laravel-package-tools", + "version": "1.16.6", + "source": { + "type": "git", + "url": "https://github.com/spatie/laravel-package-tools.git", + "reference": "1f26942dc1e5c49eacfced34fdbc29ed234bd7b3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/1f26942dc1e5c49eacfced34fdbc29ed234bd7b3", + "reference": "1f26942dc1e5c49eacfced34fdbc29ed234bd7b3", + "shasum": "" + }, + "require": { + "illuminate/contracts": "^9.28|^10.0|^11.0", + "php": "^8.0" + }, + "require-dev": { + "mockery/mockery": "^1.5", + "orchestra/testbench": "^7.7|^8.0", + "pestphp/pest": "^1.22", + "phpunit/phpunit": "^9.5.24", + "spatie/pest-plugin-test-time": "^1.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\LaravelPackageTools\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "role": "Developer" + } + ], + "description": "Tools for creating Laravel packages", + "homepage": "https://github.com/spatie/laravel-package-tools", + "keywords": [ + "laravel-package-tools", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/laravel-package-tools/issues", + "source": "https://github.com/spatie/laravel-package-tools/tree/1.16.6" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2024-11-18T15:02:02+00:00" + }, + { + "name": "spatie/laravel-permission", + "version": "6.10.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/laravel-permission.git", + "reference": "8bb69d6d67387f7a00d93a2f5fab98860f06e704" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/laravel-permission/zipball/8bb69d6d67387f7a00d93a2f5fab98860f06e704", + "reference": "8bb69d6d67387f7a00d93a2f5fab98860f06e704", + "shasum": "" + }, + "require": { + "illuminate/auth": "^8.12|^9.0|^10.0|^11.0", + "illuminate/container": "^8.12|^9.0|^10.0|^11.0", + "illuminate/contracts": "^8.12|^9.0|^10.0|^11.0", + "illuminate/database": "^8.12|^9.0|^10.0|^11.0", + "php": "^8.0" + }, + "require-dev": { + "larastan/larastan": "^1.0|^2.0", + "laravel/passport": "^11.0|^12.0", + "orchestra/testbench": "^6.23|^7.0|^8.0|^9.0", + "phpunit/phpunit": "^9.4|^10.1" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Spatie\\Permission\\PermissionServiceProvider" + ] + }, + "branch-alias": { + "dev-main": "6.x-dev", + "dev-master": "6.x-dev" + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Spatie\\Permission\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "Permission handling for Laravel 8.0 and up", + "homepage": "https://github.com/spatie/laravel-permission", + "keywords": [ + "acl", + "laravel", + "permission", + "permissions", + "rbac", + "roles", + "security", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/laravel-permission/issues", + "source": "https://github.com/spatie/laravel-permission/tree/6.10.1" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2024-11-08T18:45:41+00:00" + }, + { + "name": "symfony/clock", + "version": "v7.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/clock.git", + "reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/clock/zipball/b81435fbd6648ea425d1ee96a2d8e68f4ceacd24", + "reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/clock": "^1.0", + "symfony/polyfill-php83": "^1.28" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/now.php" + ], + "psr-4": { + "Symfony\\Component\\Clock\\": "" + }, + "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": "Decouples applications from the system clock", + "homepage": "https://symfony.com", + "keywords": [ + "clock", + "psr20", + "time" + ], + "support": { + "source": "https://github.com/symfony/clock/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/console", + "version": "v7.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", + "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^6.4|^7.0" + }, + "conflict": { + "symfony/dependency-injection": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/lock": "<6.4", + "symfony/process": "<6.4" + }, + "provide": { + "psr/log-implementation": "1.0|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/event-dispatcher": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command-line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/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-11-06T14:24:19+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v7.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/601a5ce9aaad7bf10797e3663faefce9e26c24e2", + "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Converts CSS selectors to XPath expressions", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/css-selector/tree/v7.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/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": { + "branch-alias": { + "dev-main": "3.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.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/error-handler", + "version": "v7.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "672b3dd1ef8b87119b446d67c58c106c43f965fe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/672b3dd1ef8b87119b446d67c58c106c43f965fe", + "reference": "672b3dd1ef8b87119b446d67c58c106c43f965fe", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^6.4|^7.0" + }, + "conflict": { + "symfony/deprecation-contracts": "<2.5", + "symfony/http-kernel": "<6.4" + }, + "require-dev": { + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0" + }, + "bin": [ + "Resources/bin/patch-type-declarations" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\ErrorHandler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to manage errors and ease debugging PHP code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/error-handler/tree/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-11-05T15:35:02+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": { + "branch-alias": { + "dev-main": "3.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.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/finder", + "version": "v7.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "6de263e5868b9a137602dd1e33e4d48bfae99c49" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/6de263e5868b9a137602dd1e33e4d48bfae99c49", + "reference": "6de263e5868b9a137602dd1e33e4d48bfae99c49", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "symfony/filesystem": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/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-23T06:56:12+00:00" + }, + { + "name": "symfony/html-sanitizer", + "version": "v7.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/html-sanitizer.git", + "reference": "1d23de45af5e8508441ff5f82bb493e83cdcbba4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/html-sanitizer/zipball/1d23de45af5e8508441ff5f82bb493e83cdcbba4", + "reference": "1d23de45af5e8508441ff5f82bb493e83cdcbba4", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "league/uri": "^6.5|^7.0", + "masterminds/html5": "^2.7.2", + "php": ">=8.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HtmlSanitizer\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Titouan Galopin", + "email": "galopintitouan@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to sanitize untrusted HTML input for safe insertion into a document's DOM.", + "homepage": "https://symfony.com", + "keywords": [ + "Purifier", + "html", + "sanitizer" + ], + "support": { + "source": "https://github.com/symfony/html-sanitizer/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/http-foundation", + "version": "v7.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "e88a66c3997859532bc2ddd6dd8f35aba2711744" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e88a66c3997859532bc2ddd6dd8f35aba2711744", + "reference": "e88a66c3997859532bc2ddd6dd8f35aba2711744", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php83": "^1.27" + }, + "conflict": { + "doctrine/dbal": "<3.6", + "symfony/cache": "<6.4.12|>=7.0,<7.1.5" + }, + "require-dev": { + "doctrine/dbal": "^3.6|^4", + "predis/predis": "^1.1|^2.0", + "symfony/cache": "^6.4.12|^7.1.5", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/rate-limiter": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/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-11-13T18:58:46+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v7.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "6b4722a25e0aed1ccb4914b9bcbd493cc4676b4d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/6b4722a25e0aed1ccb4914b9bcbd493cc4676b4d", + "reference": "6b4722a25e0aed1ccb4914b9bcbd493cc4676b4d", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/error-handler": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/browser-kit": "<6.4", + "symfony/cache": "<6.4", + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/doctrine-bridge": "<6.4", + "symfony/form": "<6.4", + "symfony/http-client": "<6.4", + "symfony/http-client-contracts": "<2.5", + "symfony/mailer": "<6.4", + "symfony/messenger": "<6.4", + "symfony/translation": "<6.4", + "symfony/translation-contracts": "<2.5", + "symfony/twig-bridge": "<6.4", + "symfony/validator": "<6.4", + "symfony/var-dumper": "<6.4", + "twig/twig": "<3.12" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^6.4|^7.0", + "symfony/clock": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/css-selector": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/dom-crawler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/http-client-contracts": "^2.5|^3", + "symfony/process": "^6.4|^7.0", + "symfony/property-access": "^7.1", + "symfony/routing": "^6.4|^7.0", + "symfony/serializer": "^7.1", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", + "symfony/translation-contracts": "^2.5|^3", + "symfony/uid": "^6.4|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0", + "symfony/var-exporter": "^6.4|^7.0", + "twig/twig": "^3.12" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a structured process for converting a Request into a Response", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/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-11-29T08:42:40+00:00" + }, + { + "name": "symfony/mailer", + "version": "v7.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/mailer.git", + "reference": "e4d358702fb66e4c8a2af08e90e7271a62de39cc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mailer/zipball/e4d358702fb66e4c8a2af08e90e7271a62de39cc", + "reference": "e4d358702fb66e4c8a2af08e90e7271a62de39cc", + "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.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-11-25T15:21:05+00:00" + }, + { + "name": "symfony/mime", + "version": "v7.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "cc84a4b81f62158c3846ac7ff10f696aae2b524d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/cc84a4b81f62158c3846ac7ff10f696aae2b524d", + "reference": "cc84a4b81f62158c3846ac7ff10f696aae2b524d", + "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.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-11-23T09:19:39+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": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.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": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.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": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.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": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.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": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.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": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.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-php83", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491", + "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php83\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php83/tree/v1.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-uuid", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-uuid.git", + "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/21533be36c24be3f4b1669c4725c7d1d2bab4ae2", + "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-uuid": "*" + }, + "suggest": { + "ext-uuid": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Uuid\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for uuid functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.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/process", + "version": "v7.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "d34b22ba9390ec19d2dd966c40aa9e8462f27a7e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/d34b22ba9390ec19d2dd966c40aa9e8462f27a7e", + "reference": "d34b22ba9390ec19d2dd966c40aa9e8462f27a7e", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/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-11-06T14:24:19+00:00" + }, + { + "name": "symfony/routing", + "version": "v7.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "e10a2450fa957af6c448b9b93c9010a4e4c0725e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/e10a2450fa957af6c448b9b93c9010a4e4c0725e", + "reference": "e10a2450fa957af6c448b9b93c9010a4e4c0725e", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/config": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/yaml": "<6.4" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Maps an HTTP request to a set of configuration variables", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/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-11-25T11:08:51+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": { + "branch-alias": { + "dev-main": "3.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v3.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": "v7.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/446e0d146f991dde3e73f45f2c97a9faad773c82", + "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "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/emoji": "^7.1", + "symfony/error-handler": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^6.4|^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/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-11-13T13:31:26+00:00" + }, + { + "name": "symfony/translation", + "version": "v7.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "dc89e16b44048ceecc879054e5b7f38326ab6cc5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/dc89e16b44048ceecc879054e5b7f38326ab6cc5", + "reference": "dc89e16b44048ceecc879054e5b7f38326ab6cc5", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^2.5|^3.0" + }, + "conflict": { + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<6.4", + "symfony/service-contracts": "<2.5", + "symfony/twig-bundle": "<6.4", + "symfony/yaml": "<6.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": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/http-client-contracts": "^2.5|^3.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/routing": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^6.4|^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/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-11-12T20:47:56+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": { + "branch-alias": { + "dev-main": "3.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v3.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/uid", + "version": "v7.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/uid.git", + "reference": "2d294d0c48df244c71c105a169d0190bfb080426" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/uid/zipball/2d294d0c48df244c71c105a169d0190bfb080426", + "reference": "2d294d0c48df244c71c105a169d0190bfb080426", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-uuid": "^1.15" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Uid\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to generate and represent UIDs", + "homepage": "https://symfony.com", + "keywords": [ + "UID", + "ulid", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/uid/tree/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/var-dumper", + "version": "v7.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "c6a22929407dec8765d6e2b6ff85b800b245879c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/c6a22929407dec8765d6e2b6ff85b800b245879c", + "reference": "c6a22929407dec8765d6e2b6ff85b800b245879c", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/console": "<6.4" + }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/uid": "^6.4|^7.0", + "twig/twig": "^3.12" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides mechanisms for walking through any arbitrary PHP variable", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/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-11-08T15:48:14+00:00" + }, + { + "name": "tijsverkoyen/css-to-inline-styles", + "version": "v2.2.7", + "source": { + "type": "git", + "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", + "reference": "83ee6f38df0a63106a9e4536e3060458b74ccedb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/83ee6f38df0a63106a9e4536e3060458b74ccedb", + "reference": "83ee6f38df0a63106a9e4536e3060458b74ccedb", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "php": "^5.5 || ^7.0 || ^8.0", + "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "TijsVerkoyen\\CssToInlineStyles\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Tijs Verkoyen", + "email": "css_to_inline_styles@verkoyen.eu", + "role": "Developer" + } + ], + "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", + "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", + "support": { + "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.2.7" + }, + "time": "2023-12-08T13:03:43+00:00" + }, + { + "name": "vlucas/phpdotenv", + "version": "v5.6.1", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/a59a13791077fe3d44f90e7133eb68e7d22eaff2", + "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "graham-campbell/result-type": "^1.1.3", + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.3", + "symfony/polyfill-ctype": "^1.24", + "symfony/polyfill-mbstring": "^1.24", + "symfony/polyfill-php80": "^1.24" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "ext-filter": "*", + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" + }, + "suggest": { + "ext-filter": "Required to use the boolean validator." + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, + "branch-alias": { + "dev-master": "5.6-dev" + } + }, + "autoload": { + "psr-4": { + "Dotenv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "https://github.com/vlucas" + } + ], + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "support": { + "issues": "https://github.com/vlucas/phpdotenv/issues", + "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2024-07-20T21:52:34+00:00" + }, + { + "name": "voku/portable-ascii", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/voku/portable-ascii.git", + "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", + "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", + "shasum": "" + }, + "require": { + "php": ">=7.0.0" + }, + "require-dev": { + "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" + }, + "suggest": { + "ext-intl": "Use Intl for transliterator_transliterate() support" + }, + "type": "library", + "autoload": { + "psr-4": { + "voku\\": "src/voku/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lars Moelleken", + "homepage": "https://www.moelleken.org/" + } + ], + "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", + "homepage": "https://github.com/voku/portable-ascii", + "keywords": [ + "ascii", + "clean", + "php" + ], + "support": { + "issues": "https://github.com/voku/portable-ascii/issues", + "source": "https://github.com/voku/portable-ascii/tree/2.0.3" + }, + "funding": [ + { + "url": "https://www.paypal.me/moelleken", + "type": "custom" + }, + { + "url": "https://github.com/voku", + "type": "github" + }, + { + "url": "https://opencollective.com/portable-ascii", + "type": "open_collective" + }, + { + "url": "https://www.patreon.com/voku", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", + "type": "tidelift" + } + ], + "time": "2024-11-21T01:49:47+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "php": "^7.2 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.11.0" + }, + "time": "2022-06-03T18:03:27+00:00" + } + ], + "packages-dev": [ + { + "name": "archtechx/enums", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/archtechx/enums.git", + "reference": "37326d5e26cdfcc2810f4664cdd625ea4fd528d7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/archtechx/enums/zipball/37326d5e26cdfcc2810f4664cdd625ea4fd528d7", + "reference": "37326d5e26cdfcc2810f4664cdd625ea4fd528d7", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "larastan/larastan": "^2.4", + "orchestra/testbench": "^8.0", + "pestphp/pest": "^2.0", + "pestphp/pest-plugin-laravel": "^2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "ArchTech\\Enums\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Samuel Štancl", + "email": "samuel@archte.ch" + } + ], + "description": "Helpers for making PHP enums more lovable.", + "support": { + "issues": "https://github.com/archtechx/enums/issues", + "source": "https://github.com/archtechx/enums/tree/v1.1.0" + }, + "time": "2024-07-15T14:28:34+00:00" + }, + { + "name": "brianium/paratest", + "version": "v7.4.8", + "source": { + "type": "git", + "url": "https://github.com/paratestphp/paratest.git", + "reference": "cf16fcbb9b8107a7df6b97e497fc91e819774d8b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paratestphp/paratest/zipball/cf16fcbb9b8107a7df6b97e497fc91e819774d8b", + "reference": "cf16fcbb9b8107a7df6b97e497fc91e819774d8b", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-simplexml": "*", + "fidry/cpu-core-counter": "^1.2.0", + "jean85/pretty-package-versions": "^2.0.6", + "php": "~8.2.0 || ~8.3.0 || ~8.4.0", + "phpunit/php-code-coverage": "^10.1.16", + "phpunit/php-file-iterator": "^4.1.0", + "phpunit/php-timer": "^6.0.0", + "phpunit/phpunit": "^10.5.36", + "sebastian/environment": "^6.1.0", + "symfony/console": "^6.4.7 || ^7.1.5", + "symfony/process": "^6.4.7 || ^7.1.5" + }, + "require-dev": { + "doctrine/coding-standard": "^12.0.0", + "ext-pcov": "*", + "ext-posix": "*", + "phpstan/phpstan": "^1.12.6", + "phpstan/phpstan-deprecation-rules": "^1.2.1", + "phpstan/phpstan-phpunit": "^1.4.0", + "phpstan/phpstan-strict-rules": "^1.6.1", + "squizlabs/php_codesniffer": "^3.10.3", + "symfony/filesystem": "^6.4.3 || ^7.1.5" + }, + "bin": [ + "bin/paratest", + "bin/paratest_for_phpstorm" + ], + "type": "library", + "autoload": { + "psr-4": { + "ParaTest\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Scaturro", + "email": "scaturrob@gmail.com", + "role": "Developer" + }, + { + "name": "Filippo Tessarotto", + "email": "zoeslam@gmail.com", + "role": "Developer" + } + ], + "description": "Parallel testing for PHP", + "homepage": "https://github.com/paratestphp/paratest", + "keywords": [ + "concurrent", + "parallel", + "phpunit", + "testing" + ], + "support": { + "issues": "https://github.com/paratestphp/paratest/issues", + "source": "https://github.com/paratestphp/paratest/tree/v7.4.8" + }, + "funding": [ + { + "url": "https://github.com/sponsors/Slamdunk", + "type": "github" + }, + { + "url": "https://paypal.me/filippotessarotto", + "type": "paypal" + } + ], + "time": "2024-10-15T12:45:19+00:00" + }, + { + "name": "composer/class-map-generator", + "version": "1.5.0", + "source": { + "type": "git", + "url": "https://github.com/composer/class-map-generator.git", + "reference": "4b0a223cf5be7c9ee7e0ef1bc7db42b4a97c9915" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/class-map-generator/zipball/4b0a223cf5be7c9ee7e0ef1bc7db42b4a97c9915", + "reference": "4b0a223cf5be7c9ee7e0ef1bc7db42b4a97c9915", + "shasum": "" + }, + "require": { + "composer/pcre": "^2.1 || ^3.1", + "php": "^7.2 || ^8.0", + "symfony/finder": "^4.4 || ^5.3 || ^6 || ^7" + }, + "require-dev": { + "phpstan/phpstan": "^1.12 || ^2", + "phpstan/phpstan-deprecation-rules": "^1 || ^2", + "phpstan/phpstan-phpunit": "^1 || ^2", + "phpstan/phpstan-strict-rules": "^1.1 || ^2", + "phpunit/phpunit": "^8", + "symfony/filesystem": "^5.4 || ^6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\ClassMapGenerator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Utilities to scan PHP code and generate class maps.", + "keywords": [ + "classmap" + ], + "support": { + "issues": "https://github.com/composer/class-map-generator/issues", + "source": "https://github.com/composer/class-map-generator/tree/1.5.0" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2024-11-25T16:11:06+00:00" + }, + { + "name": "composer/pcre", + "version": "3.3.2", + "source": { + "type": "git", + "url": "https://github.com/composer/pcre.git", + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e", + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<1.11.10" + }, + "require-dev": { + "phpstan/phpstan": "^1.12 || ^2", + "phpstan/phpstan-strict-rules": "^1 || ^2", + "phpunit/phpunit": "^8 || ^9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "autoload": { + "psr-4": { + "Composer\\Pcre\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "PCRE wrapping library that offers type-safe preg_* replacements.", + "keywords": [ + "PCRE", + "preg", + "regex", + "regular expression" + ], + "support": { + "issues": "https://github.com/composer/pcre/issues", + "source": "https://github.com/composer/pcre/tree/3.3.2" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2024-11-12T16:29:46+00:00" + }, + { + "name": "dragon-code/contracts", + "version": "2.23.0", + "source": { + "type": "git", + "url": "https://github.com/TheDragonCode/contracts.git", + "reference": "44dbad923f152e0dc2699fbac2d33b65dd6a8f7d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TheDragonCode/contracts/zipball/44dbad923f152e0dc2699fbac2d33b65dd6a8f7d", + "reference": "44dbad923f152e0dc2699fbac2d33b65dd6a8f7d", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "psr/http-message": "^1.0.1 || ^2.0", + "symfony/http-kernel": "^4.0 || ^5.0 || ^6.0 || ^7.0", + "symfony/polyfill-php80": "^1.23" + }, + "conflict": { + "andrey-helldar/contracts": "*" + }, + "require-dev": { + "illuminate/database": "^10.0 || ^11.0", + "phpdocumentor/reflection-docblock": "^5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "DragonCode\\Contracts\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro", + "homepage": "https://dragon-code.pro" + } + ], + "description": "A set of contracts for any project", + "keywords": [ + "contracts", + "interfaces" + ], + "support": { + "source": "https://github.com/TheDragonCode/contracts" + }, + "funding": [ + { + "url": "https://boosty.to/dragon-code", + "type": "boosty" + }, + { + "url": "https://www.donationalerts.com/r/dragon_code", + "type": "donationalerts" + }, + { + "url": "https://yoomoney.ru/to/410012608840929", + "type": "yoomoney" + } + ], + "time": "2024-03-11T20:15:12+00:00" + }, + { + "name": "dragon-code/pretty-array", + "version": "v4.1.0", + "source": { + "type": "git", + "url": "https://github.com/TheDragonCode/pretty-array.git", + "reference": "6c84e2454491b414efbd37985c322712cdf9012f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TheDragonCode/pretty-array/zipball/6c84e2454491b414efbd37985c322712cdf9012f", + "reference": "6c84e2454491b414efbd37985c322712cdf9012f", + "shasum": "" + }, + "require": { + "dragon-code/contracts": "^2.20", + "dragon-code/support": "^6.11.2", + "ext-dom": "*", + "ext-mbstring": "*", + "php": "^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^10.2" + }, + "suggest": { + "symfony/thanks": "Give thanks (in the form of a GitHub) to your fellow PHP package maintainers" + }, + "type": "library", + "autoload": { + "psr-4": { + "DragonCode\\PrettyArray\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro", + "homepage": "https://github.com/andrey-helldar" + } + ], + "description": "Simple conversion of an array to a pretty view", + "keywords": [ + "andrey helldar", + "array", + "dragon", + "dragon code", + "pretty", + "pretty array" + ], + "support": { + "issues": "https://github.com/TheDragonCode/pretty-array/issues", + "source": "https://github.com/TheDragonCode/pretty-array" + }, + "funding": [ + { + "url": "https://boosty.to/dragon-code", + "type": "boosty" + }, + { + "url": "https://github.com/sponsors/TheDragonCode", + "type": "github" + }, + { + "url": "https://opencollective.com/dragon-code", + "type": "open_collective" + }, + { + "url": "https://yoomoney.ru/to/410012608840929", + "type": "yoomoney" + } + ], + "time": "2023-06-02T11:37:44+00:00" + }, + { + "name": "dragon-code/support", + "version": "6.15.0", + "source": { + "type": "git", + "url": "https://github.com/TheDragonCode/support.git", + "reference": "087d7baaa963cdbb24e901dc27e10cdc31c2529c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TheDragonCode/support/zipball/087d7baaa963cdbb24e901dc27e10cdc31c2529c", + "reference": "087d7baaa963cdbb24e901dc27e10cdc31c2529c", + "shasum": "" + }, + "require": { + "dragon-code/contracts": "^2.22.0", + "ext-bcmath": "*", + "ext-ctype": "*", + "ext-dom": "*", + "ext-json": "*", + "ext-mbstring": "*", + "php": "^8.1", + "psr/http-message": "^1.0.1 || ^2.0", + "symfony/polyfill-php81": "^1.25", + "voku/portable-ascii": "^1.4.8 || ^2.0.1" + }, + "conflict": { + "andrey-helldar/support": "*" + }, + "require-dev": { + "illuminate/contracts": "^9.0 || ^10.0 || ^11.0", + "phpunit/phpunit": "^9.6 || ^11.0", + "symfony/var-dumper": "^6.0 || ^7.0" + }, + "suggest": { + "dragon-code/laravel-support": "Various helper files for the Laravel and Lumen frameworks", + "symfony/thanks": "Give thanks (in the form of a GitHub) to your fellow PHP package maintainers" + }, + "type": "library", + "extra": { + "dragon-code": { + "docs-generator": { + "preview": { + "brand": "php", + "vendor": "The Dragon Code" + } + } + } + }, + "autoload": { + "psr-4": { + "DragonCode\\Support\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro", + "homepage": "https://dragon-code.pro" + } + ], + "description": "Support package is a collection of helpers and tools for any project.", + "keywords": [ + "dragon", + "dragon-code", + "framework", + "helper", + "helpers", + "laravel", + "php", + "support", + "symfony", + "yii", + "yii2" + ], + "support": { + "issues": "https://github.com/TheDragonCode/support/issues", + "source": "https://github.com/TheDragonCode/support" + }, + "funding": [ + { + "url": "https://boosty.to/dragon-code", + "type": "boosty" + }, + { + "url": "https://www.donationalerts.com/r/dragon_code", + "type": "donationalerts" + }, + { + "url": "https://yoomoney.ru/to/410012608840929", + "type": "yoomoney" + } + ], + "time": "2024-09-07T13:27:37+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": "fidry/cpu-core-counter", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/theofidry/cpu-core-counter.git", + "reference": "8520451a140d3f46ac33042715115e290cf5785f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/8520451a140d3f46ac33042715115e290cf5785f", + "reference": "8520451a140d3f46ac33042715115e290cf5785f", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "fidry/makefile": "^0.2.0", + "fidry/php-cs-fixer-config": "^1.1.2", + "phpstan/extension-installer": "^1.2.0", + "phpstan/phpstan": "^1.9.2", + "phpstan/phpstan-deprecation-rules": "^1.0.0", + "phpstan/phpstan-phpunit": "^1.2.2", + "phpstan/phpstan-strict-rules": "^1.4.4", + "phpunit/phpunit": "^8.5.31 || ^9.5.26", + "webmozarts/strict-phpunit": "^7.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Fidry\\CpuCoreCounter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Théo FIDRY", + "email": "theo.fidry@gmail.com" + } + ], + "description": "Tiny utility to get the number of CPU cores.", + "keywords": [ + "CPU", + "core" + ], + "support": { + "issues": "https://github.com/theofidry/cpu-core-counter/issues", + "source": "https://github.com/theofidry/cpu-core-counter/tree/1.2.0" + }, + "funding": [ + { + "url": "https://github.com/theofidry", + "type": "github" + } + ], + "time": "2024-08-06T10:04:20+00:00" + }, + { + "name": "filp/whoops", + "version": "2.16.0", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "befcdc0e5dce67252aa6322d82424be928214fa2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/befcdc0e5dce67252aa6322d82424be928214fa2", + "reference": "befcdc0e5dce67252aa6322d82424be928214fa2", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^7.5.20 || ^8.5.8 || ^9.3.3", + "symfony/var-dumper": "^4.0 || ^5.0" + }, + "suggest": { + "symfony/var-dumper": "Pretty print complex values better with var-dumper available", + "whoops/soap": "Formats errors as SOAP responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Whoops\\": "src/Whoops/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Filipe Dobreira", + "homepage": "https://github.com/filp", + "role": "Developer" + } + ], + "description": "php error handling for cool kids", + "homepage": "https://filp.github.io/whoops/", + "keywords": [ + "error", + "exception", + "handling", + "library", + "throwable", + "whoops" + ], + "support": { + "issues": "https://github.com/filp/whoops/issues", + "source": "https://github.com/filp/whoops/tree/2.16.0" + }, + "funding": [ + { + "url": "https://github.com/denis-sokolov", + "type": "github" + } + ], + "time": "2024-09-25T12:00:00+00:00" + }, + { + "name": "hamcrest/hamcrest-php", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "shasum": "" + }, + "require": { + "php": "^5.3|^7.0|^8.0" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" + }, + "require-dev": { + "phpunit/php-file-iterator": "^1.4 || ^2.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "classmap": [ + "hamcrest" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "This is the PHP port of Hamcrest Matchers", + "keywords": [ + "test" + ], + "support": { + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" + }, + "time": "2020-07-09T08:09:16+00:00" + }, + { + "name": "jean85/pretty-package-versions", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/Jean85/pretty-package-versions.git", + "reference": "3c4e5f62ba8d7de1734312e4fff32f67a8daaf10" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/3c4e5f62ba8d7de1734312e4fff32f67a8daaf10", + "reference": "3c4e5f62ba8d7de1734312e4fff32f67a8daaf10", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2.1.0", + "php": "^7.4|^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.2", + "jean85/composer-provided-replaced-stub-package": "^1.0", + "phpstan/phpstan": "^1.4", + "phpunit/phpunit": "^7.5|^8.5|^9.6", + "vimeo/psalm": "^4.3 || ^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Jean85\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alessandro Lai", + "email": "alessandro.lai85@gmail.com" + } + ], + "description": "A library to get pretty versions strings of installed dependencies", + "keywords": [ + "composer", + "package", + "release", + "versions" + ], + "support": { + "issues": "https://github.com/Jean85/pretty-package-versions/issues", + "source": "https://github.com/Jean85/pretty-package-versions/tree/2.1.0" + }, + "time": "2024-11-18T16:19:46+00:00" + }, + { + "name": "larastan/larastan", + "version": "v2.9.12", + "source": { + "type": "git", + "url": "https://github.com/larastan/larastan.git", + "reference": "19012b39fbe4dede43dbe0c126d9681827a5e908" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/larastan/larastan/zipball/19012b39fbe4dede43dbe0c126d9681827a5e908", + "reference": "19012b39fbe4dede43dbe0c126d9681827a5e908", + "shasum": "" + }, + "require": { + "ext-json": "*", + "illuminate/console": "^9.52.16 || ^10.28.0 || ^11.16", + "illuminate/container": "^9.52.16 || ^10.28.0 || ^11.16", + "illuminate/contracts": "^9.52.16 || ^10.28.0 || ^11.16", + "illuminate/database": "^9.52.16 || ^10.28.0 || ^11.16", + "illuminate/http": "^9.52.16 || ^10.28.0 || ^11.16", + "illuminate/pipeline": "^9.52.16 || ^10.28.0 || ^11.16", + "illuminate/support": "^9.52.16 || ^10.28.0 || ^11.16", + "php": "^8.0.2", + "phpmyadmin/sql-parser": "^5.9.0", + "phpstan/phpstan": "^1.12.11" + }, + "require-dev": { + "doctrine/coding-standard": "^12.0", + "laravel/framework": "^9.52.16 || ^10.28.0 || ^11.16", + "mockery/mockery": "^1.5.1", + "nikic/php-parser": "^4.19.1", + "orchestra/canvas": "^7.11.1 || ^8.11.0 || ^9.0.2", + "orchestra/testbench-core": "^7.33.0 || ^8.13.0 || ^9.0.9", + "phpstan/phpstan-deprecation-rules": "^1.2", + "phpunit/phpunit": "^9.6.13 || ^10.5.16" + }, + "suggest": { + "orchestra/testbench": "Using Larastan for analysing a package needs Testbench" + }, + "type": "phpstan-extension", + "extra": { + "phpstan": { + "includes": [ + "extension.neon" + ] + }, + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "Larastan\\Larastan\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Can Vural", + "email": "can9119@gmail.com" + }, + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Larastan - Discover bugs in your code without running it. A phpstan/phpstan extension for Laravel", + "keywords": [ + "PHPStan", + "code analyse", + "code analysis", + "larastan", + "laravel", + "package", + "php", + "static analysis" + ], + "support": { + "issues": "https://github.com/larastan/larastan/issues", + "source": "https://github.com/larastan/larastan/tree/v2.9.12" + }, + "funding": [ + { + "url": "https://github.com/canvural", + "type": "github" + } + ], + "time": "2024-11-26T23:09:02+00:00" + }, + { + "name": "laravel-lang/actions", + "version": "1.8.8", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/actions.git", + "reference": "64d2b6221db930e374b0c3dd2017f8ecca1bc93b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/actions/zipball/64d2b6221db930e374b0c3dd2017f8ecca1bc93b", + "reference": "64d2b6221db930e374b0c3dd2017f8ecca1bc93b", + "shasum": "" + }, + "require": { + "ext-json": "*", + "laravel-lang/publisher": "^14.0 || ^15.0 || ^16.0", + "php": "^8.1" + }, + "require-dev": { + "laravel-lang/status-generator": "^2.3.1", + "phpunit/phpunit": "^10.0", + "symfony/var-dumper": "^6.3 || ^7.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "LaravelLang\\Actions\\ServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "LaravelLang\\Actions\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro", + "homepage": "https://dragon-code.pro" + }, + { + "name": "Laravel Lang Team", + "homepage": "https://laravel-lang.com" + } + ], + "description": "Translation of buttons and other action elements", + "keywords": [ + "actions", + "buttons", + "lang", + "languages", + "laravel", + "translations" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/actions/issues", + "source": "https://github.com/Laravel-Lang/actions/tree/1.8.8" + }, + "time": "2024-11-04T19:29:17+00:00" + }, + { + "name": "laravel-lang/attributes", + "version": "2.11.1", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/attributes.git", + "reference": "b60817d0361ec2fe29f100f76cc9bd0c13a36ec9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/attributes/zipball/b60817d0361ec2fe29f100f76cc9bd0c13a36ec9", + "reference": "b60817d0361ec2fe29f100f76cc9bd0c13a36ec9", + "shasum": "" + }, + "require": { + "ext-json": "*", + "laravel-lang/publisher": "^14.0 || ^15.0 || ^16.0", + "php": "^8.1" + }, + "require-dev": { + "laravel-lang/status-generator": "^1.19 || ^2.0", + "phpunit/phpunit": "^10.0", + "symfony/var-dumper": "^6.0 || ^7.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "LaravelLang\\Attributes\\ServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "LaravelLang\\Attributes\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro" + }, + { + "name": "Laravel-Lang Team", + "homepage": "https://github.com/Laravel-Lang" + } + ], + "description": "List of 126 languages for form field names", + "keywords": [ + "attributes", + "fields", + "form", + "lang", + "languages", + "laravel", + "messages", + "translations", + "validation" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/attributes/issues", + "source": "https://github.com/Laravel-Lang/attributes/tree/2.11.1" + }, + "time": "2024-10-02T14:07:29+00:00" + }, + { + "name": "laravel-lang/common", + "version": "6.4.0", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/common.git", + "reference": "36c0270180f71420c1166c26f38dc25e1c8b7f64" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/common/zipball/36c0270180f71420c1166c26f38dc25e1c8b7f64", + "reference": "36c0270180f71420c1166c26f38dc25e1c8b7f64", + "shasum": "" + }, + "require": { + "laravel-lang/actions": "^1.8.3", + "laravel-lang/attributes": "^2.10.7", + "laravel-lang/http-statuses": "^3.8.3", + "laravel-lang/json-fallback": "^2.1", + "laravel-lang/lang": "^13.12 || ^14.0 || ^15.5.1", + "laravel-lang/locales": "^2.8", + "laravel-lang/models": "^1.0", + "laravel-lang/publisher": "^16.4", + "laravel-lang/routes": "^1.0", + "php": "^8.1" + }, + "require-dev": { + "dragon-code/support": "^6.13", + "orchestra/testbench": "^8.17 || ^9.1.2", + "phpunit/phpunit": "^10.5.20", + "symfony/var-dumper": "^6.4 || ^7.1.1" + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laravel-Lang Team", + "homepage": "https://github.com/Laravel-Lang" + }, + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro", + "homepage": "https://dragon-code.pro" + } + ], + "description": "Easily connect the necessary language packs to the application", + "keywords": [ + "Laravel-lang", + "actions", + "attribute", + "attributes", + "breeze", + "buttons", + "cashier", + "fortify", + "framework", + "http", + "http-status", + "http-status-code", + "i18n", + "jetstream", + "lang", + "language", + "languages", + "laravel", + "locale", + "locales", + "localization", + "localizations", + "nova", + "publisher", + "spark", + "translation", + "translations", + "ui" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/common/issues", + "source": "https://github.com/Laravel-Lang/common" + }, + "time": "2024-07-06T16:48:35+00:00" + }, + { + "name": "laravel-lang/config", + "version": "1.10.0", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/config.git", + "reference": "67c9273a2e5487441a7034c2422bb1527200bce5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/config/zipball/67c9273a2e5487441a7034c2422bb1527200bce5", + "reference": "67c9273a2e5487441a7034c2422bb1527200bce5", + "shasum": "" + }, + "require": { + "archtechx/enums": "^1.0", + "illuminate/config": "^10.0 || ^11.0", + "illuminate/support": "^10.0 || ^11.0", + "laravel-lang/locale-list": "^1.4", + "php": "^8.1" + }, + "require-dev": { + "orchestra/testbench": "^8.23 || ^9.1", + "pestphp/pest": "^2.34" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "LaravelLang\\Config\\ServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "LaravelLang\\Config\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro", + "homepage": "https://dragon-code.pro" + }, + { + "name": "Laravel-Lang Team", + "homepage": "https://laravel-lang.com" + } + ], + "description": "The Laravel-Lang config package", + "keywords": [ + "Laravel-lang", + "Settings", + "config", + "lang", + "languages", + "laravel", + "locale", + "locales", + "localization", + "localizations", + "translation", + "translations" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/config/issues", + "source": "https://github.com/Laravel-Lang/config/tree/1.10.0" + }, + "time": "2024-09-07T11:28:53+00:00" + }, + { + "name": "laravel-lang/http-statuses", + "version": "3.8.5", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/http-statuses.git", + "reference": "d5ddb3c6cfafadb3a2e9d2d5d96d8d11a9130544" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/http-statuses/zipball/d5ddb3c6cfafadb3a2e9d2d5d96d8d11a9130544", + "reference": "d5ddb3c6cfafadb3a2e9d2d5d96d8d11a9130544", + "shasum": "" + }, + "require": { + "ext-json": "*", + "laravel-lang/publisher": "^14.1 || ^15.0 || ^16.0", + "php": "^8.1" + }, + "require-dev": { + "laravel-lang/status-generator": "^1.19 || ^2.0", + "phpunit/phpunit": "^10.0", + "symfony/var-dumper": "^6.0 || ^7.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "LaravelLang\\HttpStatuses\\ServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "LaravelLang\\HttpStatuses\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro" + }, + { + "name": "Laravel-Lang Team", + "homepage": "https://github.com/Laravel-Lang" + } + ], + "description": "List of 126 languages for HTTP statuses", + "keywords": [ + "http", + "lang", + "languages", + "laravel", + "messages", + "status", + "translations" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/http-statuses/issues", + "source": "https://github.com/Laravel-Lang/http-statuses/tree/3.8.5" + }, + "time": "2024-09-30T19:56:37+00:00" + }, + { + "name": "laravel-lang/json-fallback", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/json-fallback.git", + "reference": "597865ffcef81b7e92227ea73ff3a9a3372fb91a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/json-fallback/zipball/597865ffcef81b7e92227ea73ff3a9a3372fb91a", + "reference": "597865ffcef81b7e92227ea73ff3a9a3372fb91a", + "shasum": "" + }, + "require": { + "illuminate/support": "^10.0 || ^11.0", + "illuminate/translation": "^10.0 || ^11.0", + "php": "^8.1" + }, + "require-dev": { + "orchestra/testbench": "^8.0 || ^9.0", + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "LaravelLang\\JsonFallback\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro", + "homepage": "https://github.com/andrey-helldar" + }, + { + "name": "Felipe Dsdev", + "homepage": "https://github.com/felipe-dsdev" + } + ], + "description": "Adds support for fallback JSON string translation", + "support": { + "issues": "https://github.com/Laravel-Lang/json-fallback/issues", + "source": "https://github.com/Laravel-Lang/json-fallback/tree/2.1.0" + }, + "time": "2024-03-13T09:18:03+00:00" + }, + { + "name": "laravel-lang/lang", + "version": "15.9.6", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/lang.git", + "reference": "671dc13aaa78bed9237ef1ee73303e0039fed709" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/lang/zipball/671dc13aaa78bed9237ef1ee73303e0039fed709", + "reference": "671dc13aaa78bed9237ef1ee73303e0039fed709", + "shasum": "" + }, + "require": { + "ext-json": "*", + "laravel-lang/publisher": "^16.0", + "php": "^8.2" + }, + "conflict": { + "laravel/framework": "<11.0.7" + }, + "require-dev": { + "laravel-lang/status-generator": "^2.11", + "phpunit/phpunit": "^10.0", + "symfony/var-dumper": "^7.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "LaravelLang\\Lang\\ServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "LaravelLang\\Lang\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laravel-Lang Team", + "homepage": "https://github.com/Laravel-Lang" + } + ], + "description": "List of 126 languages for Laravel Framework, Laravel Jetstream, Laravel Fortify, Laravel Breeze, Laravel Cashier, Laravel Nova, Laravel Spark and Laravel UI", + "keywords": [ + "lang", + "languages", + "laravel", + "lpm" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/lang/issues", + "source": "https://github.com/Laravel-Lang/lang" + }, + "time": "2024-12-02T14:31:02+00:00" + }, + { + "name": "laravel-lang/locale-list", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/locale-list.git", + "reference": "48b8e4304f8b1ad34456270d35d44ca0c3e6ea0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/locale-list/zipball/48b8e4304f8b1ad34456270d35d44ca0c3e6ea0d", + "reference": "48b8e4304f8b1ad34456270d35d44ca0c3e6ea0d", + "shasum": "" + }, + "require": { + "archtechx/enums": "^0.3.2 || ^1.0", + "php": "^8.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "LaravelLang\\LocaleList\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro", + "homepage": "https://dragon-code.pro" + }, + { + "name": "Laravel-Lang Team", + "homepage": "https://laravel-lang.com" + } + ], + "description": "List of localizations available in Laravel Lang projects", + "keywords": [ + "Laravel-lang", + "lang", + "languages", + "laravel", + "locale", + "locales", + "localization", + "translation", + "translations" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/locale-list/issues", + "source": "https://github.com/Laravel-Lang/locale-list" + }, + "time": "2024-06-01T00:24:42+00:00" + }, + { + "name": "laravel-lang/locales", + "version": "2.9.2", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/locales.git", + "reference": "e7914ccfb91432ebebacf46697b573a330d702c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/locales/zipball/e7914ccfb91432ebebacf46697b573a330d702c7", + "reference": "e7914ccfb91432ebebacf46697b573a330d702c7", + "shasum": "" + }, + "require": { + "archtechx/enums": "^0.3.2 || ^1.0", + "dragon-code/support": "^6.11.3", + "ext-json": "*", + "illuminate/collections": "^10.0 || ^11.0", + "laravel-lang/config": "^1.0.2", + "laravel-lang/locale-list": "^1.2", + "laravel-lang/native-country-names": "^1.3", + "laravel-lang/native-currency-names": "^1.3", + "laravel-lang/native-locale-names": "^2.2", + "php": "^8.1" + }, + "require-dev": { + "orchestra/testbench": "^8.0 || ^9.0", + "pestphp/pest": "^2.24.1", + "symfony/var-dumper": "^6.0 || ^7.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "LaravelLang\\Locales\\ServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "LaravelLang\\Locales\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro" + }, + { + "name": "Laravel-Lang Team", + "homepage": "https://laravel-lang.com" + } + ], + "description": "Basic functionality for working with localizations", + "keywords": [ + "laravel", + "locale", + "locales", + "localization", + "translation", + "translations" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/locales/issues", + "source": "https://github.com/Laravel-Lang/locales" + }, + "time": "2024-06-24T09:56:41+00:00" + }, + { + "name": "laravel-lang/models", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/models.git", + "reference": "5914712a42dcece9453244b7ba0b5d12ffccd75a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/models/zipball/5914712a42dcece9453244b7ba0b5d12ffccd75a", + "reference": "5914712a42dcece9453244b7ba0b5d12ffccd75a", + "shasum": "" + }, + "require": { + "composer/class-map-generator": "^1.3", + "dragon-code/support": "^6.13", + "illuminate/database": "^10.0 || ^11.0", + "illuminate/support": "^10.0 || ^11.0", + "laravel-lang/config": "^1.9", + "laravel-lang/locales": "^2.9.2", + "laravel/prompts": "^0.1.24|^0.2|^0.3", + "php": "^8.1" + }, + "require-dev": { + "orchestra/testbench": "^8.0 || ^9.0", + "pestphp/pest": "^2.34", + "pestphp/pest-plugin-laravel": "^2.4", + "symfony/var-dumper": "^6.0 || ^7.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "LaravelLang\\Models\\ServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "LaravelLang\\Models\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro", + "homepage": "https://dragon-code.pro", + "role": "Maintainer" + }, + { + "name": "Andrey Sokolov", + "email": "walfireru@gmail.com", + "homepage": "https://github.com/Quiss", + "role": "Usability consultant" + }, + { + "name": "Laravel-Lang Team", + "homepage": "https://github.com/Laravel-Lang" + } + ], + "description": "Easy and fast way to localize models", + "keywords": [ + "database", + "l18n", + "languages", + "laravel", + "locales", + "localization", + "models", + "translate", + "translations" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/models/issues", + "source": "https://github.com/Laravel-Lang/models" + }, + "time": "2024-11-06T20:23:30+00:00" + }, + { + "name": "laravel-lang/native-country-names", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/native-country-names.git", + "reference": "cddca6627c8732770a2e2c11c921753b6d0adb66" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/native-country-names/zipball/cddca6627c8732770a2e2c11c921753b6d0adb66", + "reference": "cddca6627c8732770a2e2c11c921753b6d0adb66", + "shasum": "" + }, + "require": { + "dragon-code/support": "^6.11", + "ext-json": "*", + "illuminate/collections": "^10.0 || ^11.0", + "php": "^8.1" + }, + "require-dev": { + "illuminate/support": "^10.0 || ^11.0", + "laravel-lang/locale-list": "^1.2", + "pestphp/pest": "^2.24.3", + "punic/punic": "^3.8", + "symfony/console": "^6.3 || ^7.0", + "symfony/process": "^6.3 || ^7.0", + "symfony/var-dumper": "^6.3 || ^7.0", + "vlucas/phpdotenv": "^5.6" + }, + "type": "library", + "autoload": { + "psr-4": { + "LaravelLang\\NativeCountryNames\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro" + }, + { + "name": "Laravel-Lang Team", + "homepage": "https://laravel-lang.com" + } + ], + "description": "The project contains native translations of country names", + "keywords": [ + "Laravel-lang", + "countries", + "country", + "lang", + "languages", + "laravel", + "locale", + "locales", + "localization", + "territories", + "territory", + "translation", + "translations" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/native-country-names/issues", + "source": "https://github.com/Laravel-Lang/native-country-names" + }, + "time": "2024-03-13T09:34:55+00:00" + }, + { + "name": "laravel-lang/native-currency-names", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/native-currency-names.git", + "reference": "2e0fbe039421ac753b4fd5256bd239147a0a88fe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/native-currency-names/zipball/2e0fbe039421ac753b4fd5256bd239147a0a88fe", + "reference": "2e0fbe039421ac753b4fd5256bd239147a0a88fe", + "shasum": "" + }, + "require": { + "dragon-code/support": "^6.11", + "ext-json": "*", + "illuminate/collections": "^10.0 || ^11.0", + "php": "^8.1" + }, + "require-dev": { + "illuminate/support": "^10.0 || ^11.0", + "laravel-lang/locale-list": "^1.2", + "pestphp/pest": "^2.24.3", + "punic/punic": "^3.8", + "symfony/console": "^6.3 || ^7.0", + "symfony/process": "^6.3 || ^7.0", + "symfony/var-dumper": "^6.3 || ^7.0", + "vlucas/phpdotenv": "^5.6" + }, + "type": "library", + "autoload": { + "psr-4": { + "LaravelLang\\NativeCurrencyNames\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro" + }, + { + "name": "Laravel-Lang Team", + "homepage": "https://laravel-lang.com" + } + ], + "description": "The project contains native translations of currency names", + "keywords": [ + "Laravel-lang", + "currency", + "lang", + "languages", + "laravel", + "locale", + "locales", + "localization", + "translation", + "translations" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/native-currency-names/issues", + "source": "https://github.com/Laravel-Lang/native-currency-names" + }, + "time": "2024-03-13T09:40:02+00:00" + }, + { + "name": "laravel-lang/native-locale-names", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/native-locale-names.git", + "reference": "39ef3330938b74277456049bf386453109e4d05c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/native-locale-names/zipball/39ef3330938b74277456049bf386453109e4d05c", + "reference": "39ef3330938b74277456049bf386453109e4d05c", + "shasum": "" + }, + "require": { + "dragon-code/support": "^6.11", + "ext-json": "*", + "php": "^8.1" + }, + "require-dev": { + "illuminate/support": "^10.31 || ^11.0", + "laravel-lang/locale-list": "^1.2", + "pestphp/pest": "^2.24.3", + "punic/punic": "^3.8", + "symfony/console": "^6.3 || ^7.0", + "symfony/process": "^6.3 || ^7.0", + "symfony/var-dumper": "^6.3 || ^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "LaravelLang\\NativeLocaleNames\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro" + }, + { + "name": "Laravel-Lang Team", + "homepage": "https://laravel-lang.com" + } + ], + "description": "The project contains native translations of locale names", + "keywords": [ + "Laravel-lang", + "lang", + "languages", + "laravel", + "locale", + "locales", + "localization", + "translation", + "translations" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/native-locale-names/issues", + "source": "https://github.com/Laravel-Lang/native-locale-names" + }, + "time": "2024-03-13T09:28:19+00:00" + }, + { + "name": "laravel-lang/publisher", + "version": "16.4.0", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/publisher.git", + "reference": "7812e7a07e6f2fdb7d258f3ab1d481d1cbf7f32c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/publisher/zipball/7812e7a07e6f2fdb7d258f3ab1d481d1cbf7f32c", + "reference": "7812e7a07e6f2fdb7d258f3ab1d481d1cbf7f32c", + "shasum": "" + }, + "require": { + "composer/semver": "^3.4", + "dragon-code/pretty-array": "^4.1", + "dragon-code/support": "^6.11.3", + "ext-json": "*", + "illuminate/collections": "^10.0 || ^11.0", + "illuminate/console": "^10.0 || ^11.0", + "illuminate/support": "^10.0 || ^11.0", + "laravel-lang/config": "^1.0", + "laravel-lang/locales": "^2.3", + "league/commonmark": "^2.4.1", + "league/config": "^1.2", + "php": "^8.1" + }, + "conflict": { + "laravel-lang/attributes": "<2.0", + "laravel-lang/http-statuses": "<3.0", + "laravel-lang/lang": "<11.0" + }, + "require-dev": { + "laravel-lang/json-fallback": "^2.0", + "orchestra/testbench": "^8.14 || ^9.0", + "phpunit/phpunit": "^10.4.2", + "symfony/var-dumper": "^6.3.6 || ^7.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "LaravelLang\\Publisher\\ServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "LaravelLang\\Publisher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro" + }, + { + "name": "Laravel-Lang Team", + "homepage": "https://laravel-lang.com" + } + ], + "description": "Publisher lang files for the Laravel and Lumen Frameworks, Jetstream, Fortify, Cashier, Spark and Nova from Laravel-Lang/lang", + "keywords": [ + "Laravel-lang", + "breeze", + "cashier", + "fortify", + "framework", + "i18n", + "jetstream", + "lang", + "languages", + "laravel", + "locale", + "locales", + "localization", + "localizations", + "lpm", + "lumen", + "nova", + "publisher", + "spark", + "trans", + "translation", + "translations", + "validations" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/publisher/issues", + "source": "https://github.com/Laravel-Lang/publisher" + }, + "time": "2024-06-02T00:22:33+00:00" + }, + { + "name": "laravel-lang/routes", + "version": "1.5.0", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/routes.git", + "reference": "addc4438fac481389e66e349ac3b93670aa4301b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/routes/zipball/addc4438fac481389e66e349ac3b93670aa4301b", + "reference": "addc4438fac481389e66e349ac3b93670aa4301b", + "shasum": "" + }, + "require": { + "dragon-code/support": "^6.13", + "illuminate/config": "^10.0 || ^11.0", + "illuminate/http": "^10.0 || ^11.0", + "illuminate/routing": "^10.0 || ^11.0", + "illuminate/support": "^10.0 || ^11.0", + "laravel-lang/config": "^1.6", + "laravel-lang/locales": "^2.8", + "php": "^8.1" + }, + "require-dev": { + "orchestra/testbench": "^8.23 || ^9.1", + "pestphp/pest": "^2.34", + "pestphp/pest-plugin-laravel": "^2.4", + "symfony/var-dumper": "^6.0 || ^7.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "LaravelLang\\Routes\\ServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "helpers/functions.php" + ], + "psr-4": { + "LaravelLang\\Routes\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro", + "homepage": "https://dragon-code.pro" + }, + { + "name": "Laravel-Lang Team", + "homepage": "https://github.com/Laravel-Lang" + } + ], + "description": "Easy and fast way to localize routes", + "keywords": [ + "l18n", + "languages", + "laravel", + "localization", + "routes", + "translate", + "translations" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/routes/issues", + "source": "https://github.com/Laravel-Lang/routes" + }, + "time": "2024-07-10T10:28:26+00:00" + }, + { + "name": "laravel/pint", + "version": "v1.18.3", + "source": { + "type": "git", + "url": "https://github.com/laravel/pint.git", + "reference": "cef51821608239040ab841ad6e1c6ae502ae3026" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/pint/zipball/cef51821608239040ab841ad6e1c6ae502ae3026", + "reference": "cef51821608239040ab841ad6e1c6ae502ae3026", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "ext-tokenizer": "*", + "ext-xml": "*", + "php": "^8.1.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.65.0", + "illuminate/view": "^10.48.24", + "larastan/larastan": "^2.9.11", + "laravel-zero/framework": "^10.4.0", + "mockery/mockery": "^1.6.12", + "nunomaduro/termwind": "^1.17.0", + "pestphp/pest": "^2.36.0" + }, + "bin": [ + "builds/pint" + ], + "type": "project", + "autoload": { + "psr-4": { + "App\\": "app/", + "Database\\Seeders\\": "database/seeders/", + "Database\\Factories\\": "database/factories/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "An opinionated code formatter for PHP.", + "homepage": "https://laravel.com", + "keywords": [ + "format", + "formatter", + "lint", + "linter", + "php" + ], + "support": { + "issues": "https://github.com/laravel/pint/issues", + "source": "https://github.com/laravel/pint" + }, + "time": "2024-11-26T15:34:00+00:00" + }, + { + "name": "mockery/mockery", + "version": "1.6.12", + "source": { + "type": "git", + "url": "https://github.com/mockery/mockery.git", + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mockery/mockery/zipball/1f4efdd7d3beafe9807b08156dfcb176d18f1699", + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699", + "shasum": "" + }, + "require": { + "hamcrest/hamcrest-php": "^2.0.1", + "lib-pcre": ">=7.0", + "php": ">=7.3" + }, + "conflict": { + "phpunit/phpunit": "<8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.5 || ^9.6.17", + "symplify/easy-coding-standard": "^12.1.14" + }, + "type": "library", + "autoload": { + "files": [ + "library/helpers.php", + "library/Mockery.php" + ], + "psr-4": { + "Mockery\\": "library/Mockery" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Pádraic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "https://github.com/padraic", + "role": "Author" + }, + { + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "https://davedevelopment.co.uk", + "role": "Developer" + }, + { + "name": "Nathanael Esayeas", + "email": "nathanael.esayeas@protonmail.com", + "homepage": "https://github.com/ghostwriter", + "role": "Lead Developer" + } + ], + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", + "keywords": [ + "BDD", + "TDD", + "library", + "mock", + "mock objects", + "mockery", + "stub", + "test", + "test double", + "testing" + ], + "support": { + "docs": "https://docs.mockery.io/", + "issues": "https://github.com/mockery/mockery/issues", + "rss": "https://github.com/mockery/mockery/releases.atom", + "security": "https://github.com/mockery/mockery/security/advisories", + "source": "https://github.com/mockery/mockery" + }, + "time": "2024-05-16T03:13:13+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.12.1", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/123267b2c49fbf30d78a7b2d333f6be754b94845", + "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3 <3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.12.1" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2024-11-08T17:47:46+00:00" + }, + { + "name": "nunomaduro/collision", + "version": "v8.5.0", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/collision.git", + "reference": "f5c101b929c958e849a633283adff296ed5f38f5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/f5c101b929c958e849a633283adff296ed5f38f5", + "reference": "f5c101b929c958e849a633283adff296ed5f38f5", + "shasum": "" + }, + "require": { + "filp/whoops": "^2.16.0", + "nunomaduro/termwind": "^2.1.0", + "php": "^8.2.0", + "symfony/console": "^7.1.5" + }, + "conflict": { + "laravel/framework": "<11.0.0 || >=12.0.0", + "phpunit/phpunit": "<10.5.1 || >=12.0.0" + }, + "require-dev": { + "larastan/larastan": "^2.9.8", + "laravel/framework": "^11.28.0", + "laravel/pint": "^1.18.1", + "laravel/sail": "^1.36.0", + "laravel/sanctum": "^4.0.3", + "laravel/tinker": "^2.10.0", + "orchestra/testbench-core": "^9.5.3", + "pestphp/pest": "^2.36.0 || ^3.4.0", + "sebastian/environment": "^6.1.0 || ^7.2.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" + ] + }, + "branch-alias": { + "dev-8.x": "8.x-dev" + } + }, + "autoload": { + "files": [ + "./src/Adapters/Phpunit/Autoload.php" + ], + "psr-4": { + "NunoMaduro\\Collision\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Cli error handling for console/command-line PHP applications.", + "keywords": [ + "artisan", + "cli", + "command-line", + "console", + "error", + "handling", + "laravel", + "laravel-zero", + "php", + "symfony" + ], + "support": { + "issues": "https://github.com/nunomaduro/collision/issues", + "source": "https://github.com/nunomaduro/collision" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], + "time": "2024-10-15T16:06:32+00:00" + }, + { + "name": "pestphp/pest", + "version": "v2.36.0", + "source": { + "type": "git", + "url": "https://github.com/pestphp/pest.git", + "reference": "f8c88bd14dc1772bfaf02169afb601ecdf2724cd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pestphp/pest/zipball/f8c88bd14dc1772bfaf02169afb601ecdf2724cd", + "reference": "f8c88bd14dc1772bfaf02169afb601ecdf2724cd", + "shasum": "" + }, + "require": { + "brianium/paratest": "^7.3.1", + "nunomaduro/collision": "^7.11.0|^8.4.0", + "nunomaduro/termwind": "^1.16.0|^2.1.0", + "pestphp/pest-plugin": "^2.1.1", + "pestphp/pest-plugin-arch": "^2.7.0", + "php": "^8.1.0", + "phpunit/phpunit": "^10.5.36" + }, + "conflict": { + "filp/whoops": "<2.16.0", + "phpunit/phpunit": ">10.5.36", + "sebastian/exporter": "<5.1.0", + "webmozart/assert": "<1.11.0" + }, + "require-dev": { + "pestphp/pest-dev-tools": "^2.17.0", + "pestphp/pest-plugin-type-coverage": "^2.8.7", + "symfony/process": "^6.4.0|^7.1.5" + }, + "bin": [ + "bin/pest" + ], + "type": "library", + "extra": { + "pest": { + "plugins": [ + "Pest\\Plugins\\Bail", + "Pest\\Plugins\\Cache", + "Pest\\Plugins\\Coverage", + "Pest\\Plugins\\Init", + "Pest\\Plugins\\Environment", + "Pest\\Plugins\\Help", + "Pest\\Plugins\\Memory", + "Pest\\Plugins\\Only", + "Pest\\Plugins\\Printer", + "Pest\\Plugins\\ProcessIsolation", + "Pest\\Plugins\\Profile", + "Pest\\Plugins\\Retry", + "Pest\\Plugins\\Snapshot", + "Pest\\Plugins\\Verbose", + "Pest\\Plugins\\Version", + "Pest\\Plugins\\Parallel" + ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "autoload": { + "files": [ + "src/Functions.php", + "src/Pest.php" + ], + "psr-4": { + "Pest\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "The elegant PHP Testing Framework.", + "keywords": [ + "framework", + "pest", + "php", + "test", + "testing", + "unit" + ], + "support": { + "issues": "https://github.com/pestphp/pest/issues", + "source": "https://github.com/pestphp/pest/tree/v2.36.0" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + } + ], + "time": "2024-10-15T15:30:56+00:00" + }, + { + "name": "pestphp/pest-plugin", + "version": "v2.1.1", + "source": { + "type": "git", + "url": "https://github.com/pestphp/pest-plugin.git", + "reference": "e05d2859e08c2567ee38ce8b005d044e72648c0b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pestphp/pest-plugin/zipball/e05d2859e08c2567ee38ce8b005d044e72648c0b", + "reference": "e05d2859e08c2567ee38ce8b005d044e72648c0b", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^2.0.0", + "composer-runtime-api": "^2.2.2", + "php": "^8.1" + }, + "conflict": { + "pestphp/pest": "<2.2.3" + }, + "require-dev": { + "composer/composer": "^2.5.8", + "pestphp/pest": "^2.16.0", + "pestphp/pest-dev-tools": "^2.16.0" + }, + "type": "composer-plugin", + "extra": { + "class": "Pest\\Plugin\\Manager" + }, + "autoload": { + "psr-4": { + "Pest\\Plugin\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "The Pest plugin manager", + "keywords": [ + "framework", + "manager", + "pest", + "php", + "plugin", + "test", + "testing", + "unit" + ], + "support": { + "source": "https://github.com/pestphp/pest-plugin/tree/v2.1.1" + }, + "funding": [ + { + "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], + "time": "2023-08-22T08:40:06+00:00" + }, + { + "name": "pestphp/pest-plugin-arch", + "version": "v2.7.0", + "source": { + "type": "git", + "url": "https://github.com/pestphp/pest-plugin-arch.git", + "reference": "d23b2d7498475354522c3818c42ef355dca3fcda" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pestphp/pest-plugin-arch/zipball/d23b2d7498475354522c3818c42ef355dca3fcda", + "reference": "d23b2d7498475354522c3818c42ef355dca3fcda", + "shasum": "" + }, + "require": { + "nunomaduro/collision": "^7.10.0|^8.1.0", + "pestphp/pest-plugin": "^2.1.1", + "php": "^8.1", + "ta-tikoma/phpunit-architecture-test": "^0.8.4" + }, + "require-dev": { + "pestphp/pest": "^2.33.0", + "pestphp/pest-dev-tools": "^2.16.0" + }, + "type": "library", + "extra": { + "pest": { + "plugins": [ + "Pest\\Arch\\Plugin" + ] + } + }, + "autoload": { + "files": [ + "src/Autoload.php" + ], + "psr-4": { + "Pest\\Arch\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "The Arch plugin for Pest PHP.", + "keywords": [ + "arch", + "architecture", + "framework", + "pest", + "php", + "plugin", + "test", + "testing", + "unit" + ], + "support": { + "source": "https://github.com/pestphp/pest-plugin-arch/tree/v2.7.0" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + } + ], + "time": "2024-01-26T09:46:42+00:00" + }, + { + "name": "pestphp/pest-plugin-laravel", + "version": "v2.4.0", + "source": { + "type": "git", + "url": "https://github.com/pestphp/pest-plugin-laravel.git", + "reference": "53df51169a7f9595e06839cce638c73e59ace5e8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pestphp/pest-plugin-laravel/zipball/53df51169a7f9595e06839cce638c73e59ace5e8", + "reference": "53df51169a7f9595e06839cce638c73e59ace5e8", + "shasum": "" + }, + "require": { + "laravel/framework": "^10.48.9|^11.5.0", + "pestphp/pest": "^2.34.7", + "php": "^8.1.0" + }, + "require-dev": { + "laravel/dusk": "^7.13.0", + "orchestra/testbench": "^8.22.3|^9.0.4", + "pestphp/pest-dev-tools": "^2.16.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Pest\\Laravel\\PestServiceProvider" + ] + }, + "pest": { + "plugins": [ + "Pest\\Laravel\\Plugin" + ] + } + }, + "autoload": { + "files": [ + "src/Autoload.php" + ], + "psr-4": { + "Pest\\Laravel\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "The Pest Laravel Plugin", + "keywords": [ + "framework", + "laravel", + "pest", + "php", + "test", + "testing", + "unit" + ], + "support": { + "source": "https://github.com/pestphp/pest-plugin-laravel/tree/v2.4.0" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + } + ], + "time": "2024-04-27T10:41:54+00:00" + }, + { + "name": "pestphp/pest-plugin-livewire", + "version": "v2.1.0", + "source": { + "type": "git", + "url": "https://github.com/pestphp/pest-plugin-livewire.git", + "reference": "e72a2f850f727dfdb6bfa6e2ee6ff478ccc93f97" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pestphp/pest-plugin-livewire/zipball/e72a2f850f727dfdb6bfa6e2ee6ff478ccc93f97", + "reference": "e72a2f850f727dfdb6bfa6e2ee6ff478ccc93f97", + "shasum": "" + }, + "require": { + "livewire/livewire": "^2.12.3|^3.0", + "pestphp/pest": "^2.9.1", + "php": "^8.1" + }, + "require-dev": { + "orchestra/testbench": "^8.5.10", + "pestphp/pest-dev-tools": "^2.12.0" + }, + "type": "library", + "autoload": { + "files": [ + "src/Autoload.php" + ], + "psr-4": { + "Pest\\Livewire\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "The Pest Livewire Plugin", + "keywords": [ + "framework", + "livewire", + "pest", + "php", + "plugin", + "test", + "testing", + "unit" + ], + "support": { + "source": "https://github.com/pestphp/pest-plugin-livewire/tree/v2.1.0" + }, + "funding": [ + { + "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], + "time": "2023-07-20T16:28:21+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "54750ef60c58e43759730615a392c31c80e23176" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" + }, + { + "name": "phar-io/version", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + }, + "time": "2020-06-27T09:03:43+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "5.6.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "f3558a4c23426d12bffeaab463f8a8d8b681193c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/f3558a4c23426d12bffeaab463f8a8d8b681193c", + "reference": "f3558a4c23426d12bffeaab463f8a8d8b681193c", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1.1", + "ext-filter": "*", + "php": "^7.4 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.7", + "phpstan/phpdoc-parser": "^1.7|^2.0", + "webmozart/assert": "^1.9.1" + }, + "require-dev": { + "mockery/mockery": "~1.3.5 || ~1.6.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-webmozart-assert": "^1.2", + "phpunit/phpunit": "^9.5", + "psalm/phar": "^5.26" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.0" + }, + "time": "2024-11-12T11:25:25+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.10.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/679e3ce485b99e84c775d28e2e96fade9a7fb50a", + "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1.0", + "php": "^7.3 || ^8.0", + "phpdocumentor/reflection-common": "^2.0", + "phpstan/phpdoc-parser": "^1.18|^2.0" + }, + "require-dev": { + "ext-tokenizer": "*", + "phpbench/phpbench": "^1.2", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.13.9", + "vimeo/psalm": "^4.25" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-1.x": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.10.0" + }, + "time": "2024-11-09T15:12:26+00:00" + }, + { + "name": "phpmyadmin/sql-parser", + "version": "5.10.1", + "source": { + "type": "git", + "url": "https://github.com/phpmyadmin/sql-parser.git", + "reference": "b14fd66496a22d8dd7f7e2791edd9e8674422f17" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpmyadmin/sql-parser/zipball/b14fd66496a22d8dd7f7e2791edd9e8674422f17", + "reference": "b14fd66496a22d8dd7f7e2791edd9e8674422f17", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "symfony/polyfill-mbstring": "^1.3", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "phpmyadmin/motranslator": "<3.0" + }, + "require-dev": { + "phpbench/phpbench": "^1.1", + "phpmyadmin/coding-standard": "^3.0", + "phpmyadmin/motranslator": "^4.0 || ^5.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.9.12", + "phpstan/phpstan-phpunit": "^1.3.3", + "phpunit/phpunit": "^8.5 || ^9.6", + "psalm/plugin-phpunit": "^0.16.1", + "vimeo/psalm": "^4.11", + "zumba/json-serializer": "~3.0.2" + }, + "suggest": { + "ext-mbstring": "For best performance", + "phpmyadmin/motranslator": "Translate messages to your favorite locale" + }, + "bin": [ + "bin/highlight-query", + "bin/lint-query", + "bin/sql-parser", + "bin/tokenize-query" + ], + "type": "library", + "autoload": { + "psr-4": { + "PhpMyAdmin\\SqlParser\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "The phpMyAdmin Team", + "email": "developers@phpmyadmin.net", + "homepage": "https://www.phpmyadmin.net/team/" + } + ], + "description": "A validating SQL lexer and parser with a focus on MySQL dialect.", + "homepage": "https://github.com/phpmyadmin/sql-parser", + "keywords": [ + "analysis", + "lexer", + "parser", + "query linter", + "sql", + "sql lexer", + "sql linter", + "sql parser", + "sql syntax highlighter", + "sql tokenizer" + ], + "support": { + "issues": "https://github.com/phpmyadmin/sql-parser/issues", + "source": "https://github.com/phpmyadmin/sql-parser" + }, + "funding": [ + { + "url": "https://www.phpmyadmin.net/donate/", + "type": "other" + } + ], + "time": "2024-11-10T04:10:31+00:00" + }, + { + "name": "phpstan/phpdoc-parser", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "c00d78fb6b29658347f9d37ebe104bffadf36299" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/c00d78fb6b29658347f9d37ebe104bffadf36299", + "reference": "c00d78fb6b29658347f9d37ebe104bffadf36299", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "doctrine/annotations": "^2.0", + "nikic/php-parser": "^5.3.0", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^9.6", + "symfony/process": "^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "PHPStan\\PhpDocParser\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPDoc parser with support for nullable, intersection and generic types", + "support": { + "issues": "https://github.com/phpstan/phpdoc-parser/issues", + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.0.0" + }, + "time": "2024-10-13T11:29:49+00:00" + }, + { + "name": "phpstan/phpstan", + "version": "1.12.12", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan.git", + "reference": "b5ae1b88f471d3fd4ba1aa0046234b5ca3776dd0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/b5ae1b88f471d3fd4ba1aa0046234b5ca3776dd0", + "reference": "b5ae1b88f471d3fd4ba1aa0046234b5ca3776dd0", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0" + }, + "conflict": { + "phpstan/phpstan-shim": "*" + }, + "bin": [ + "phpstan", + "phpstan.phar" + ], + "type": "library", + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan - PHP Static Analysis Tool", + "keywords": [ + "dev", + "static analysis" + ], + "support": { + "docs": "https://phpstan.org/user-guide/getting-started", + "forum": "https://github.com/phpstan/phpstan/discussions", + "issues": "https://github.com/phpstan/phpstan/issues", + "security": "https://github.com/phpstan/phpstan/security/policy", + "source": "https://github.com/phpstan/phpstan-src" + }, + "funding": [ + { + "url": "https://github.com/ondrejmirtes", + "type": "github" + }, + { + "url": "https://github.com/phpstan", + "type": "github" + } + ], + "time": "2024-11-28T22:13:23+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "10.1.16", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "7e308268858ed6baedc8704a304727d20bc07c77" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7e308268858ed6baedc8704a304727d20bc07c77", + "reference": "7e308268858ed6baedc8704a304727d20bc07c77", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.19.1 || ^5.1.0", + "php": ">=8.1", + "phpunit/php-file-iterator": "^4.1.0", + "phpunit/php-text-template": "^3.0.1", + "sebastian/code-unit-reverse-lookup": "^3.0.0", + "sebastian/complexity": "^3.2.0", + "sebastian/environment": "^6.1.0", + "sebastian/lines-of-code": "^2.0.2", + "sebastian/version": "^4.0.1", + "theseer/tokenizer": "^1.2.3" + }, + "require-dev": { + "phpunit/phpunit": "^10.1" + }, + "suggest": { + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "10.1.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.16" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-08-22T04:31:57+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "4.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c", + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-08-31T06:24:48+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "4.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^10.0" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:56:09+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-08-31T14:07:24+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "6.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:57:52+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "10.5.36", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "aa0a8ce701ea7ee314b0dfaa8970dc94f3f8c870" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/aa0a8ce701ea7ee314b0dfaa8970dc94f3f8c870", + "reference": "aa0a8ce701ea7ee314b0dfaa8970dc94f3f8c870", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.12.0", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", + "php": ">=8.1", + "phpunit/php-code-coverage": "^10.1.16", + "phpunit/php-file-iterator": "^4.1.0", + "phpunit/php-invoker": "^4.0.0", + "phpunit/php-text-template": "^3.0.1", + "phpunit/php-timer": "^6.0.0", + "sebastian/cli-parser": "^2.0.1", + "sebastian/code-unit": "^2.0.0", + "sebastian/comparator": "^5.0.2", + "sebastian/diff": "^5.1.1", + "sebastian/environment": "^6.1.0", + "sebastian/exporter": "^5.1.2", + "sebastian/global-state": "^6.0.2", + "sebastian/object-enumerator": "^5.0.0", + "sebastian/recursion-context": "^5.0.0", + "sebastian/type": "^4.0.0", + "sebastian/version": "^4.0.1" + }, + "suggest": { + "ext-soap": "To be able to generate mocks based on WSDL files" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "10.5-dev" + } + }, + "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.36" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" + } + ], + "time": "2024-10-08T15:36:51+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c34583b87e7b7a8055bf6c450c2c77ce32a24084", + "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T07:12:49+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:58:43+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:59:15+00:00" + }, + { + "name": "sebastian/comparator", + "version": "5.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e", + "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/diff": "^5.0", + "sebastian/exporter": "^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "security": "https://github.com/sebastianbergmann/comparator/security/policy", + "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-10-18T14:56:07+00:00" + }, + { + "name": "sebastian/complexity", + "version": "3.2.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "68ff824baeae169ec9f2137158ee529584553799" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799", + "reference": "68ff824baeae169ec9f2137158ee529584553799", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "security": "https://github.com/sebastianbergmann/complexity/security/policy", + "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-21T08:37:17+00:00" + }, + { + "name": "sebastian/diff", + "version": "5.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e", + "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0", + "symfony/process": "^6.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T07:15:17+00:00" + }, + { + "name": "sebastian/environment", + "version": "6.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "8074dbcd93529b357029f5cc5058fd3e43666984" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/8074dbcd93529b357029f5cc5058fd3e43666984", + "reference": "8074dbcd93529b357029f5cc5058fd3e43666984", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "https://github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/6.1.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-23T08:47:14+00:00" + }, + { + "name": "sebastian/exporter", + "version": "5.1.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "955288482d97c19a372d3f31006ab3f37da47adf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/955288482d97c19a372d3f31006ab3f37da47adf", + "reference": "955288482d97c19a372d3f31006ab3f37da47adf", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/recursion-context": "^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "security": "https://github.com/sebastianbergmann/exporter/security/policy", + "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T07:17:12+00:00" + }, + { + "name": "sebastian/global-state", + "version": "6.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", + "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "https://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "security": "https://github.com/sebastianbergmann/global-state/security/policy", + "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T07:19:19+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0", + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-21T08:38:20+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:08:32+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:06:18+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "05909fb5bc7df4c52992396d0116aed689f93712" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712", + "reference": "05909fb5bc7df4c52992396d0116aed689f93712", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "https://github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:05:40+00:00" + }, + { + "name": "sebastian/type", + "version": "4.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:10:45+00:00" + }, + { + "name": "sebastian/version", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-07T11:34:05+00:00" + }, + { + "name": "spatie/backtrace", + "version": "1.7.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/backtrace.git", + "reference": "0f2477c520e3729de58e061b8192f161c99f770b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/backtrace/zipball/0f2477c520e3729de58e061b8192f161c99f770b", + "reference": "0f2477c520e3729de58e061b8192f161c99f770b", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "ext-json": "*", + "laravel/serializable-closure": "^1.3 || ^2.0", + "phpunit/phpunit": "^9.3 || ^11.4.3", + "spatie/phpunit-snapshot-assertions": "^4.2 || ^5.1.6", + "symfony/var-dumper": "^5.1 || ^6.0 || ^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\Backtrace\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van de Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "A better backtrace", + "homepage": "https://github.com/spatie/backtrace", + "keywords": [ + "Backtrace", + "spatie" + ], + "support": { + "source": "https://github.com/spatie/backtrace/tree/1.7.1" + }, + "funding": [ + { + "url": "https://github.com/sponsors/spatie", + "type": "github" + }, + { + "url": "https://spatie.be/open-source/support-us", + "type": "other" + } + ], + "time": "2024-12-02T13:28:15+00:00" + }, + { + "name": "spatie/error-solutions", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/error-solutions.git", + "reference": "ae7393122eda72eed7cc4f176d1e96ea444f2d67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/error-solutions/zipball/ae7393122eda72eed7cc4f176d1e96ea444f2d67", + "reference": "ae7393122eda72eed7cc4f176d1e96ea444f2d67", + "shasum": "" + }, + "require": { + "php": "^8.0" + }, + "require-dev": { + "illuminate/broadcasting": "^10.0|^11.0", + "illuminate/cache": "^10.0|^11.0", + "illuminate/support": "^10.0|^11.0", + "livewire/livewire": "^2.11|^3.3.5", + "openai-php/client": "^0.10.1", + "orchestra/testbench": "^7.0|8.22.3|^9.0", + "pestphp/pest": "^2.20", + "phpstan/phpstan": "^1.11", + "psr/simple-cache": "^3.0", + "psr/simple-cache-implementation": "^3.0", + "spatie/ray": "^1.28", + "symfony/cache": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "vlucas/phpdotenv": "^5.5" + }, + "suggest": { + "openai-php/client": "Require get solutions from OpenAI", + "simple-cache-implementation": "To cache solutions from OpenAI" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\Ignition\\": "legacy/ignition", + "Spatie\\ErrorSolutions\\": "src", + "Spatie\\LaravelIgnition\\": "legacy/laravel-ignition" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ruben Van Assche", + "email": "ruben@spatie.be", + "role": "Developer" + } + ], + "description": "This is my package error-solutions", + "homepage": "https://github.com/spatie/error-solutions", + "keywords": [ + "error-solutions", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/error-solutions/issues", + "source": "https://github.com/spatie/error-solutions/tree/1.1.1" + }, + "funding": [ + { + "url": "https://github.com/Spatie", + "type": "github" + } + ], + "time": "2024-07-25T11:06:04+00:00" + }, + { + "name": "spatie/flare-client-php", + "version": "1.10.0", + "source": { + "type": "git", + "url": "https://github.com/spatie/flare-client-php.git", + "reference": "140a42b2c5d59ac4ecf8f5b493386a4f2eb28272" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/140a42b2c5d59ac4ecf8f5b493386a4f2eb28272", + "reference": "140a42b2c5d59ac4ecf8f5b493386a4f2eb28272", + "shasum": "" + }, + "require": { + "illuminate/pipeline": "^8.0|^9.0|^10.0|^11.0", + "php": "^8.0", + "spatie/backtrace": "^1.6.1", + "symfony/http-foundation": "^5.2|^6.0|^7.0", + "symfony/mime": "^5.2|^6.0|^7.0", + "symfony/process": "^5.2|^6.0|^7.0", + "symfony/var-dumper": "^5.2|^6.0|^7.0" + }, + "require-dev": { + "dms/phpunit-arraysubset-asserts": "^0.5.0", + "pestphp/pest": "^1.20|^2.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "spatie/pest-plugin-snapshots": "^1.0|^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.3.x-dev" + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Spatie\\FlareClient\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Send PHP errors to Flare", + "homepage": "https://github.com/spatie/flare-client-php", + "keywords": [ + "exception", + "flare", + "reporting", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/flare-client-php/issues", + "source": "https://github.com/spatie/flare-client-php/tree/1.10.0" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2024-12-02T14:30:06+00:00" + }, + { + "name": "spatie/ignition", + "version": "1.15.0", + "source": { + "type": "git", + "url": "https://github.com/spatie/ignition.git", + "reference": "e3a68e137371e1eb9edc7f78ffa733f3b98991d2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/ignition/zipball/e3a68e137371e1eb9edc7f78ffa733f3b98991d2", + "reference": "e3a68e137371e1eb9edc7f78ffa733f3b98991d2", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "php": "^8.0", + "spatie/error-solutions": "^1.0", + "spatie/flare-client-php": "^1.7", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0" + }, + "require-dev": { + "illuminate/cache": "^9.52|^10.0|^11.0", + "mockery/mockery": "^1.4", + "pestphp/pest": "^1.20|^2.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "psr/simple-cache-implementation": "*", + "symfony/cache": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "vlucas/phpdotenv": "^5.5" + }, + "suggest": { + "openai-php/client": "Require get solutions from OpenAI", + "simple-cache-implementation": "To cache solutions from OpenAI" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.5.x-dev" + } + }, + "autoload": { + "psr-4": { + "Spatie\\Ignition\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Spatie", + "email": "info@spatie.be", + "role": "Developer" + } + ], + "description": "A beautiful error page for PHP applications.", + "homepage": "https://flareapp.io/ignition", + "keywords": [ + "error", + "flare", + "laravel", + "page" + ], + "support": { + "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", + "forum": "https://twitter.com/flareappio", + "issues": "https://github.com/spatie/ignition/issues", + "source": "https://github.com/spatie/ignition" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2024-06-12T14:55:22+00:00" + }, + { + "name": "spatie/laravel-ignition", + "version": "2.9.0", + "source": { + "type": "git", + "url": "https://github.com/spatie/laravel-ignition.git", + "reference": "62042df15314b829d0f26e02108f559018e2aad0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/62042df15314b829d0f26e02108f559018e2aad0", + "reference": "62042df15314b829d0f26e02108f559018e2aad0", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "illuminate/support": "^10.0|^11.0", + "php": "^8.1", + "spatie/ignition": "^1.15", + "symfony/console": "^6.2.3|^7.0", + "symfony/var-dumper": "^6.2.3|^7.0" + }, + "require-dev": { + "livewire/livewire": "^2.11|^3.3.5", + "mockery/mockery": "^1.5.1", + "openai-php/client": "^0.8.1", + "orchestra/testbench": "8.22.3|^9.0", + "pestphp/pest": "^2.34", + "phpstan/extension-installer": "^1.3.1", + "phpstan/phpstan-deprecation-rules": "^1.1.1", + "phpstan/phpstan-phpunit": "^1.3.16", + "vlucas/phpdotenv": "^5.5" + }, + "suggest": { + "openai-php/client": "Require get solutions from OpenAI", + "psr/simple-cache-implementation": "Needed to cache solutions from OpenAI" + }, + "type": "library", + "extra": { + "laravel": { + "aliases": { + "Flare": "Spatie\\LaravelIgnition\\Facades\\Flare" + }, + "providers": [ + "Spatie\\LaravelIgnition\\IgnitionServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Spatie\\LaravelIgnition\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Spatie", + "email": "info@spatie.be", + "role": "Developer" + } + ], + "description": "A beautiful error page for Laravel applications.", + "homepage": "https://flareapp.io/ignition", + "keywords": [ + "error", + "flare", + "laravel", + "page" + ], + "support": { + "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", + "forum": "https://twitter.com/flareappio", + "issues": "https://github.com/spatie/laravel-ignition/issues", + "source": "https://github.com/spatie/laravel-ignition" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2024-12-02T08:43:31+00:00" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/tree/v1.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": "ta-tikoma/phpunit-architecture-test", + "version": "0.8.4", + "source": { + "type": "git", + "url": "https://github.com/ta-tikoma/phpunit-architecture-test.git", + "reference": "89f0dea1cb0f0d5744d3ec1764a286af5e006636" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ta-tikoma/phpunit-architecture-test/zipball/89f0dea1cb0f0d5744d3ec1764a286af5e006636", + "reference": "89f0dea1cb0f0d5744d3ec1764a286af5e006636", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18.0 || ^5.0.0", + "php": "^8.1.0", + "phpdocumentor/reflection-docblock": "^5.3.0", + "phpunit/phpunit": "^10.5.5 || ^11.0.0", + "symfony/finder": "^6.4.0 || ^7.0.0" + }, + "require-dev": { + "laravel/pint": "^1.13.7", + "phpstan/phpstan": "^1.10.52" + }, + "type": "library", + "autoload": { + "psr-4": { + "PHPUnit\\Architecture\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ni Shi", + "email": "futik0ma011@gmail.com" + }, + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Methods for testing application architecture", + "keywords": [ + "architecture", + "phpunit", + "stucture", + "test", + "testing" + ], + "support": { + "issues": "https://github.com/ta-tikoma/phpunit-architecture-test/issues", + "source": "https://github.com/ta-tikoma/phpunit-architecture-test/tree/0.8.4" + }, + "time": "2024-01-05T14:10:56+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.3", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.2.3" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:36:25+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": "^8.2" + }, + "platform-dev": [], + "plugin-api-version": "2.6.0" +} diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 1155777..6ac6c84 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -33,6 +33,7 @@ public function run(): void 'max_weekends' => 10, 'max_shifts' => 10, 'max_nights' => 10, + 'course' => fake()->numberBetween(0, 5), 'is_reservist' => false, ])->id, ]); @@ -47,6 +48,7 @@ public function run(): void 'max_weekends' => 5.5, 'max_shifts' => 10, 'max_nights' => 5.5, + 'course' => fake()->numberBetween(0, 5), 'is_reservist' => false, ])->id, ]); @@ -62,6 +64,7 @@ public function run(): void 'max_weekends' => 6, 'max_shifts' => 7, 'max_nights' => 6, + 'course' => fake()->numberBetween(0, 5), 'is_reservist' => false, ])->id, ]); @@ -77,6 +80,7 @@ public function run(): void 'max_weekends' => 5.5, 'max_shifts' => 6, 'max_nights' => 5.5, + 'course' => fake()->numberBetween(0, 5), 'is_reservist' => false, ])->id, ]); @@ -92,6 +96,7 @@ public function run(): void 'max_weekends' => 5, 'max_shifts' => 5, 'max_nights' => 5, + 'course' => fake()->numberBetween(0, 5), 'is_reservist' => false, ])->id, ]); @@ -107,6 +112,7 @@ public function run(): void 'max_weekends' => 0, 'max_shifts' => 4, 'max_nights' => 0, + 'course' => fake()->numberBetween(0, 5), 'is_reservist' => false, ])->id, ]); @@ -122,6 +128,7 @@ public function run(): void 'max_weekends' => 10, 'max_shifts' => 12, 'max_nights' => 10, + 'course' => fake()->numberBetween(0, 5), 'is_reservist' => false, ])->id, ]); diff --git a/lang/en.json b/lang/en.json index 4213935..c2c27c8 100644 --- a/lang/en.json +++ b/lang/en.json @@ -1,23 +1,48 @@ { "Commander notification of approving exchange shift request for the requesting soldier": "Hello :requestingSoldierName!
Your request to exchange your :shiftAName shift
From :shiftAStart to :shiftAEnd
With :approvingSoldierName soldier for :shiftBName shift
From :shiftBStart to :shiftBEnd
Has been approved and the exchange has been made
Have a good day!
:commanderName", "Commander notification of approving exchange shift request for the approving soldier": "Hello :approvingSoldierName!
:requestingSoldierName 's request to exchange your :shiftBName shift
From :shiftBStart to :shiftBEnd
With his :shiftAName shift
From :shiftAStart to :shiftAEnd
Has been approved and the exchange has been made
Have a good day!
:commanderName", - "Request for shift exchange from commander": "Hello :commanderName!
Do you authorize :requestingSoldierName to exchange his :shiftAName shift
From :shiftAStart to :shiftAEnd
With :approvingSoldierName in favor of :shiftBName shift
From :shiftBStart to :shiftBEnd?", "Commander notification of rejection exchange shift request for the requesting soldier": "Hello :requestingSoldierName!
Your request to exchange your :shiftAName shift
From :shiftAStart to :shiftAEnd
With :rejectingSoldierName soldier for :shiftBName shift
From :shiftBStart to :shiftBEnd
Has been rejected.
Have a good day!
:commanderName", "Commander notification of rejection exchange shift request for the rejection soldier": "Hello :rejectingSoldierName!
The :requestingSoldierName 's request to exchange your :shiftBName shift
From :shiftBStart to :shiftBEnd
With his :shiftAName shift
From :shiftAStart to :shiftAEnd
Has been rejected.
Have a good day!
:commanderName", "Soldier notification of rejection exchange shift request":"Hello :requestingSoldierName!
Your request to exchange my :shiftBName shift
From :shiftBStart to :shiftBEnd
With :shiftAName shift
From :shiftAStart to :shiftAEnd
Has been rejected.
Have a good day!
:rejectingSoldierName", "Commander notification of approving change shift request for the requesting soldier":"Hello :requestingSoldierName!
Your request to change your :shiftName shift
From :shiftStart to :shiftEnd
Has been approved and the change has been made.
Have a good day!
:commanderName", "Commander notification of approving change shift request for the approving soldier": "Hello :approvingSoldierName!
:requestingSoldierName 's request to change his :shiftName shift
From :shiftStart to :shiftEnd
With you, has been approved and the change has been made.
Have a good day!
:commanderName", - "Request for shift change from commander":"Hello :commanderName!
Do you authorize :requestingSoldierName to change his :shiftName shift
From :shiftStart to :shiftEnd
With :approvingSoldierName ?", "Commander notification of rejection change shift request for the requesting soldier": "Hello :requestingSoldierName!
Your request to change your :shiftName shift
From :shiftStart to :shiftEnd
With :approvingSoldierName
Has been rejected.
Have a good day!
:commanderName", "Commander notification of rejection change shift request for the approving soldier":"Hello :approvingSoldierName!
The :requestingSoldierName 's request to change his :shiftName shift
From :shiftStart to :shiftEnd
With you has been rejected.
Have a good day!
:commanderName", "Soldier notification of rejection change shift request":"Hello :requestingSoldierName!
Your request to change your :shiftName shift
From :shiftStart to :shiftEnd
With me, has been rejected.
Have a good day!
:rejectingSoldierName", "Commander notification of exchanging shifts for first soldier":"Hello :soldierAName!
Your :shiftAName shift
From :shiftAStart to :shiftAEnd
Replaced with :soldierBName
for :shiftBName shift
From :shiftBStart to :shiftBEnd
Have a good day!
:commander", "Commander notification of exchanging shifts for second soldier":"Hello :soldierBName!
Your :shiftBName shift
From :shiftBStart to :shiftBEnd
Replaced with :soldierAName
for :shiftAName shift
From :shiftAStart to :shiftAEnd
Have a good day!
:commander", - "Request for shift exchange from soldier":"Hello :soldierAName!
Would you like to exchange your
:shiftAName shift
From :shiftAStart to :shiftAEnd
With my :shiftBName shift
From :shiftBStart to :shiftBEnd ?
:soldierBName", "Commander notification of changing shifts for first soldier":"Hello :soldierName!:shiftName shift
From :shiftStart to :shiftEnd
Has been assigned to you.
Have a good day!
:commander", "Commander notification of changing shifts for second soldier":"Hello :soldierName!
Your :shiftName shift
From :shiftStart to :shiftEnd
Has been removed from your assignment.
Have a good day!
:commander", - "Request for shift change from soldier":"Hello :soldierName!
Would you like to get my
:shiftName shift
From :shiftStart to :shiftEnd ?
:requestingSoldierName", - "File name":":month month's shifts for :name", - "Holiday shift notification":"hello :user!
the shift weight must be updated :task which takes place on: :start_date ", - "Assigned to shift today":":today
Hello :user!!
Your :task shift will start at :startShift" + "label":"sum of :data for course :course", + "Shifts assignment notification of exchanging shifts for first soldier": "Hello :soldierAName!
Your :shiftAName shift
From :shiftAStart to :shiftAEnd
Has been exchanged with :soldierBName
for :shiftBName shift
From :shiftBStart to :shiftBEnd
Have a good day!
:shiftsAssignmentName", + "Shifts assignment notification of exchanging shifts for second soldier": "Hello :soldierBName!
Your :shiftBName shift
From :shiftBStart to :shiftBEnd
Has been exchanged with :soldierAName
for :shiftAName shift
From :shiftAStart to :shiftAEnd
Have a good day!
:shiftsAssignmentName", + "Shifts assignment notification of exchanging shifts for shifts assignment": "Hello :shiftsAssignmentName!
:shiftAName shift of :soldierAName
From :shiftAStart to :shiftAEnd
Has been exchanged with :soldierBName
for :shiftBName shift
From :shiftBStart to :shiftBEnd
Have a good day!
:shiftsAssignment2Name", + "Shifts assignment notification of exchanging shifts for commander": "Hello :commanderName!
:shiftAName shift of :soldierAName
From :shiftAStart to :shiftAEnd
Has been exchanged with :soldierBName
for :shiftBName shift
From :shiftBStart to :shiftBEnd
Have a good day!
:shiftsAssignmentName", + "Shifts assignment notification of deny exchanging shifts for first soldier":"Hello :soldierAName!
Your request to exchange your :shiftAName shift
From :shiftAStart to :shiftAEnd
With :shiftBName shift of :soldierBName
From :shiftBStart to :shiftBEnd
Has been rejected.
Have a good day!
:shiftsAssignmentName", + "Shifts assignment notification of deny exchanging shifts for second soldier": "Hello :soldierBName!
:soldierAName 's request to exchange your :shiftBName shift
From :shiftBStart to :shiftBEnd
With his :shiftAName shift
From :shiftAStart to :shiftAEnd
Has been rejected.
Have a good day!
:shiftsAssignmentName", + "Shifts assignment notification of deny exchanging shifts for commander": "Hello :commanderName!
The request to exchange :shiftAName shift of :soldierAName soldier
From :shiftAStart to :shiftAEnd
With :shiftBName shift of :soldierBName soldier
From :shiftBStart to :shiftBEnd
Has been rejected.
Have a good day!
:shiftsAssignmentName", + "Shifts assignment notification of deny exchanging shifts for shifts assignment": "Hello :shiftsAssignmentName!
The request to exchange :shiftAName shift of :soldierAName soldier
From :shiftAStart to :shiftAEnd
With :shiftBName shift of :soldierBName soldier
From :shiftBStart to :shiftBEnd
Has been rejected.
Have a good day!
:shiftsAssignment2Name", + "Commander notification of deny exchanging shifts for the first soldier": "Hello :soldierAName!
Your request to exchange your :shiftAName shift
From :shiftAStart to :shiftAEnd
With :soldierBName soldier for :shiftBName shift
From :shiftBStart to :shiftBEnd
Has been rejected.
Have a good day!
:commanderName", + "Commander notification of deny exchanging shifts for the second soldier": "Hello :soldierBName!
The :soldierAName 's request to exchange your :shiftBName shift
From :shiftBStart to :shiftBEnd
With his :shiftAName shift
From :shiftAStart to :shiftAEnd
Has been rejected.
Have a good day!
:commanderName", + "Soldier notification of deny exchange shift request": "Hello :soldierAName!
Your request to exchange my :shiftBName shift
From :shiftBStart to :shiftBEnd
With your :shiftAName shift
From :shiftAStart to :shiftAEnd
Has been rejected.
Have a good day!
:soldierBName", + "Shifts assignment notification of changing shifts for first soldier": "Hello :soldierName!
Your :shiftName shift
From :shiftStart to :shiftEnd
Has been removed from your assignment.
Have a good day!
:shiftsAssignmentName", + "Shifts assignment notification of changing shifts for second soldier": "Hello :soldierName!
:shiftName shift
From :shiftStart to :shiftEnd
Has been assigned to you.
Have a good day!
:shiftsAssignmentName", + "Shifts assignment notification of changing shifts for commander": "Hello :commanderName
The :shiftName shift of the :soldierAName soldier
From :shiftStart to :shiftEnd
Has been assigned to :soldierBName soldier.
:shiftsAssignmentName", + "Shifts assignment notification of changing shifts for shifts assignment": "Hello :shiftsAssignmentName
The :shiftName shift of the :soldierAName soldier
From :shiftStart to :shiftEnd
Has been assigned to :soldierBName soldier.
:shiftsAssignment2Name", + "Shifts assignment notification of deny changing shifts for first soldier": "Hello :soldierAName!
Your request to change your :shiftName shift
From :shiftStart to :shiftEnd
With :soldierBName
Has been rejected.
Have a good day!
:shiftsAssignmentName", + "Shifts assignment notification of deny changing shifts for second soldier": "Hello :soldierBName!
:soldierAName 's request to change his :shiftName shift
From :shiftStart to :shiftEnd
With you has been rejected.
Have a good day!
:shiftsAssignmentName", + "Shifts assignment notification of deny changing shifts for commander":"Hello :commanderName!
The request to change the assignment of :shiftName shift of :soldierAName soldier
From :shiftStart to :shiftEnd
With :soldierBName
Has been rejected.
Have a good day!
:shiftsAssignmentName", + "Shifts assignment notification of deny changing shifts for shifts assignment":"Hello :shiftsAssignmentName!
The request to change the assignment of :shiftName shift of :soldierAName soldier
From :shiftStart to :shiftEnd
With :soldierBName
Has been rejected.
Have a good day!
:shiftsAssignment2Name", + "Commander notification of deny changing shift request for the first soldier":"Hello :soldierAName!
Your request to change your :shiftName shift
From :shiftStart to :shiftEnd
With :soldierBName
Has been rejected.
Have a good day!
:commanderName", + "Commander notification of deny changing shift request for the second soldier": "Hello :soldierBName!
The :soldierAName 's request to change his :shiftName shift
From :shiftStart to :shiftEnd
With you has been rejected.
Have a good day!
:commanderName", + "Soldier notification of deny changing shift request": "Hello :soldierAName!
Your request to change your :shiftName shift
From :shiftStart to :shiftEnd
With me, has been rejected.
Have a good day!
:soldierBName", + "Request for shift exchange from shifts assignments": "Hello :shiftsAssignmentName
Do you authorize :soldierAName to exchange his :shiftAName shift
From :shiftAStart to :shiftAEnd
With :soldierBName in favor of :shiftBName shift
From :shiftBStart to :shiftBEnd?", + "Request for shift exchange from commander": "Hello :commanderName!
Do you authorize :soldierAName to exchange his :shiftAName shift
From :shiftAStart to :shiftAEnd
With :soldierBName in favor of :shiftBName shift
From :shiftBStart to :shiftBEnd?", + "Request for shift exchange from soldier": "Hello :soldierAName!
Would you like to exchange your
:shiftAName shift
From :shiftAStart to :shiftAEnd
With my :shiftBName shift
From :shiftBStart to :shiftBEnd ?
:soldierBName", + "Request for shift change from shifts assignments": "Hello :shiftsAssignmentName!
Do you authorize to change :shiftName shift assignment of :soldierAName soldier
From :shiftStart to :shiftEnd
With :soldierBName soldier?", + "Request for shift change from commander": "Hello :commanderName!
Do you authorize :soldierAName to change his :shiftName shift
From :shiftStart to :shiftEnd
With :soldierBName ?", + "Request for shift change from soldier": "Hello :soldierName!
Would you like to get my
:shiftName shift
From :shiftStart to :shiftEnd ?
:requestingSoldierName", + "File name": ":month month's shifts for :name", + "Holiday shift notification": "hello :user!
the shift weight must be updated :task which takes place on: :start_date ", + "Assigned to shift today": ":today
Hello :user!!
Your :task shift will start at :startShift" } diff --git a/lang/he.json b/lang/he.json index d041bdd..7b19879 100644 --- a/lang/he.json +++ b/lang/he.json @@ -1,4 +1,36 @@ { + "Shifts assignment notification of exchanging shifts for first soldier": "שלום :soldierAName!
המשמרת :shiftAName שלך
מ :shiftAStart עד :shiftAEnd
הוחלפה עם החייל :soldierBName
בעבור המשמרת :shiftBName שלו
מ :shiftBStart עד :shiftBEnd
המשך יום טוב!
:shiftsAssignmentName", + "Shifts assignment notification of exchanging shifts for second soldier": "שלום :soldierBName!
המשמרת :shiftBName שלך
מ :shiftBStart עד :shiftBEnd
הוחלפה עם החייל :soldierAName
בעבור המשמרת :shiftAName שלו
מ :shiftAStart עד :shiftAEnd
המשך יום טוב!
:shiftsAssignmentName", + "Shifts assignment notification of exchanging shifts for shifts assignment": "שלום :shiftsAssignmentName!
המשמרת :shiftAName של החייל :soldierAName
מ :shiftAStart עד :shiftAEnd
הוחלפה עם :soldierBName
בעבור המשמרת :shiftBName
מ :shiftBStart עד :shiftBEnd
המשך יום טוב!
:shiftsAssignment2Name", + "Shifts assignment notification of exchanging shifts for commander": "שלום :commanderName!
המשמרת :shiftAName של החייל :soldierAName
מ :shiftAStart עד :shiftAEnd
הוחלפה עם החייל :soldierBName
בעבור המשמרת :shiftBName
מ :shiftBStart עד :shiftBEnd
המשך יום טוב!
:shiftsAssignmentName", + "Shifts assignment notification of deny exchanging shifts for first soldier":"שלום :soldierAName!
בקשתך להחלפה המשמרת :shiftAName שלך
מ :shiftAStart עד :shiftAEnd
עם המשמרת :shiftBName של החייל :soldierBName
מ :shiftBStart עד :shiftBEnd
נדחתה .
המשך יום טוב!
:shiftsAssignmentName", + "Shifts assignment notification of deny exchanging shifts for second soldier": "שלום :soldierBName!
בקשת החייל :soldierAName להחליף את המשמרת :shiftBName שלך
מ :shiftBStart עד :shiftBEnd
עם המשמרת:shiftAName שלו
מ :shiftAStart עד :shiftAEnd
נדחתה.
המשך יום טוב!
:shiftsAssignmentName", + "Shifts assignment notification of deny exchanging shifts for commander": "שלום :commanderName!
הבקשה להחלפת המשמרת :shiftAName של החייל :soldierAName
מ :shiftAStart עד :shiftAEnd
עם המשמרת :shiftBName של החייל :soldierBName
מ :shiftBStart עד :shiftBEnd
נדחתה.
המשך יום טוב!
:shiftsAssignmentName", + "Shifts assignment notification of deny exchanging shifts for shifts assignment": "שלום :shiftsAssignmentName!
הבקשה להחלפת המשמרת :shiftAName של החייל :soldierAName
מ :shiftAStart עד :shiftAEnd
עם המשמרת :shiftBName של החייל :soldierBName
מ :shiftBStart עד :shiftBEnd
נדחתה.
המשך יום טוב!
:shiftsAssignment2Name", + "Commander notification of deny exchanging shifts for the first soldier": "שלום :soldierAName!
בקשתך להחלפת המשמרת :shiftAName שלך
מ :shiftAStart עד :shiftAEnd
עם החייל :soldierBName בעבור המשמרת :shiftBName שלו
מ :shiftBStart עד :shiftBEnd
נדחתה.
המשך יום טוב!
:commanderName", + "Commander notification of deny exchanging shifts for the second soldier": "שלום :soldierBName!
הבקשה של החייל :soldierAName להחליף את המשמרת :shiftBName שלך
מ :shiftBStart עד :shiftBEnd
עם המשמרת :shiftAName שלו
מ :shiftAStart עד :shiftAEnd
נדחתה.
המשך יום טוב!
:commanderName", + "Soldier notification of deny exchange shift request": "שלום :soldierAName!
בקשתך להחלפת המשמרת :shiftBName שלך
מ :shiftBStart עד :shiftBEnd
עם המשמרת :shiftAName שלי
מ :shiftAStart עד :shiftAEnd
נדחתה.
המשך יום טוב!
:soldierBName", + + "Shifts assignment notification of changing shifts for first soldier": "שלום :soldierName!
המשמרת :shiftName שלך
מ :shiftStart עד :shiftEnd
הוסרה מהקצאתך.
המשך יום טוב!
:shiftsAssignmentName", + "Shifts assignment notification of changing shifts for second soldier": "שלום :soldierName!
המשמרת :shiftName
מ :shiftStart עד :shiftEnd
הוקצתה לך.
המשך יום טוב!
:shiftsAssignmentName", + "Shifts assignment notification of changing shifts for commander": "שלום :commanderName!
המשמרת :shiftName של החייל :soldierAName
מ :shiftStart עד :shiftEnd
הוקצתה לחייל :soldierBName.
:shiftsAssignmentName", + "Shifts assignment notification of changing shifts for shifts assignment": "שלום :shiftsAssignmentName!
המשמרת :shiftName של החייל :soldierAName
מ :shiftStart עד :shiftEnd
הוקצתה לחייל :soldierBName.
:shiftsAssignment2Name", + "Shifts assignment notification of deny changing shifts for first soldier": "שלום :soldierAName!
בקשתך להעביר את המשמרת :shiftName שלך
מ :shiftStart עד :shiftEnd
לחייל :soldierBName
נדחתה.
המשך יום טוב!
:shiftsAssignmentName", + "Shifts assignment notification of deny changing shifts for second soldier": "שלום :soldierBName!
בקשת החייל :soldierAName להעביר את המשמרת :shiftName שלו
מ :shiftStart עד :shiftEnd
אליך, נדחתה.
המשך יום טוב!
:shiftsAssignmentName", + "Shifts assignment notification of deny changing shifts for commander":"שלום :commanderName!
הבקשה להעביר את המשמרת :shiftName של החייל :soldierAName
מ :shiftStart עד :shiftEnd
לחייל :soldierBName
נדחתה.
המשך יום טוב!
:shiftsAssignmentName", + "Shifts assignment notification of deny changing shifts for shifts assignment":"שלום :shiftsAssignmentName!
הבקשה להעביר את המשמרת :shiftName של החייל :soldierAName
מ :shiftStart עד :shiftEnd
לחייל :soldierBName
נדחתה.
המשך יום טוב!
:shiftsAssignment2Name", + "Commander notification of deny changing shift request for the first soldier":"שלום :soldierAName!
בקשתך להעביר את המשמרת :shiftName שלך
מ :shiftStart עד :shiftEnd
לחייל :soldierBName
נדחתה.
המשך יום טוב!
:commanderName", + "Commander notification of deny changing shift request for the second soldier": "שלום :soldierBName!
בקשת החייל :soldierAName להעביר את המשמרת :shiftName שלו
מ :shiftStart עד :shiftEnd
אליך, נדחתה.
המשך יום טוב!
:commanderName", + "Soldier notification of deny changing shift request": "שלום :soldierAName!
בקשתך להעביר את המשמרת :shiftName שלך
מ :shiftStart עד :shiftEnd
אלי, נדחתה.
המשך יום טוב!
:soldierBName", + + "Request for shift exchange from shifts assignments": "שלום :shiftsAssignmentName!
האם אתה מאשר לחייל :soldierAName
להחליף את המשמרת :shiftAName שלו
מ :shiftAStart עד :shiftAEnd
עם החייל :soldierBName
בעבור המשמרת :shiftBName שלו
מ :shiftBStart עד :shiftBEnd?", + "Request for shift exchange from commander": "שלום :commanderName!
האם אתה מאשר לחייל :soldierAName
להחליף את המשמרת :shiftAName שלו
מ :shiftAStart עד :shiftAEnd
עם החייל :soldierBName
בעבור המשמרת :shiftBName שלו
מ :shiftBStart עד :shiftBEnd?", + "Request for shift exchange from soldier": "שלום :soldierAName!
האם תרצה להחליף את המשמרת :shiftAName שלך
מ :shiftAStart עד :shiftAEnd
עם המשמרת :shiftBName שלי
מ :shiftBStart עד :shiftBEnd ?
:soldierBName", + + "Request for shift change from shifts assignments": "שלום :shiftsAssignmentName!
האם אתה מאשר להעביר את המשמרת :shiftName של החייל :soldierAName
מ :shiftStart עד :shiftEnd
לחייל :soldierBName?", + "Request for shift change from commander": "שלום :commanderName!
האם אתה מאשר לחייל :soldierAName להעביר את המשמרת :shiftName שלו
מ :shiftStart עד :shiftEnd
לחייל :soldierBName?", + "Request for shift change from soldier": "שלום :soldierName!
האם תרצה לבצע את המשמרת
:shiftName שלי
מ :shiftStart עד :shiftEnd?
:requestingSoldierName", + "Add a team member":"הוסף חבר צוות", "Add an identifier to the name so that it is not the same as another name.":"הוסף מזהה לשם כך שהוא לא יהיה זהה לשם אחר. ", "Add member": "הוסף חבר לצוות", @@ -8,30 +40,15 @@ "All": "כולם", "All soldiers":"כל החיילים", "And": "ו", + "August":"אוגוסט", + "April":"אפריל", "Assign soldier": "הקצה חייל", + "Assignment charts":"תרשימי שיבוץ", "Assigning the soldier to this shift is your sole responsibility!":"הקצאת החייל למשמרת זו הינה באחריותך בלבד! ", "Approve exchange shift request":"אישור בקשת החלפת משמרת", - "Commander notification of approving exchange shift request for the requesting soldier": "שלום :requestingSoldierName!
בקשתך להחלפת משמרת :shiftAName
מ :shiftAStart עד :shiftAEnd
עם החייל :approvingSoldierName בעבור משמרת :shiftBName
מ :shiftBStart עד :shiftBEnd
אושרה וההחלפה בוצעה.
יום מוצלח!
:commanderName", - "Commander notification of approving exchange shift request for the approving soldier": "שלום :approvingSoldierName!
בקשת :requestingSoldierName להחליף את המשמרת :shiftBName שלך
מ :shiftBStart עד :shiftBEnd
עם המשמרת :shiftAName שלו
מ :shiftAStart עד :shiftAEnd
אושרה וההחלפה בוצעה.
יום מוצלח!
:commanderName", "Request for shift exchange":"בקשה להחלפת משמרת", - "Request for shift exchange from commander": "שלום :commanderName!
האם אתה מאשר לחייל :requestingSoldierName להחליף את המשמרת :shiftAName שלו
מ :shiftAStart עד :shiftAEnd
עם החייל :approvingSoldierName בעבור המשמרת :shiftBName
מ :shiftBStart עד :shiftBEnd?", - "Commander notification of rejection exchange shift request for the requesting soldier": "שלום :requestingSoldierName!
בקשתך להחלפת משמרת :shiftAName
מ :shiftAStart עד :shiftAEnd
עם החייל :rejectingSoldierName בעבור משמרת :shiftBName
מ :shiftBStart עד :shiftBEnd
נדחתה.
יום נעים!
:commanderName", - "Commander notification of rejection exchange shift request for the rejection soldier":"שלום :rejectingSoldierName!
בקשת החייל :requestingSoldierName להחליף את המשמרת :shiftBName שלך
מ :shiftBStart עד :shiftBEnd
עם המשמרת :shiftAName שלו
מ :shiftAStart עד :shiftAEnd
נדחתה.
יום טוב!
:commanderName", - "Soldier notification of rejection exchange shift request":"שלום :requestingSoldierName!
בקשתך להחלפת משמרת :shiftBName
מ :shiftBStart עד :shiftBEnd
עם המשמרת :shiftAName שלי
מ :shiftAStart עד :shiftAEnd
נדחתה.
המשך יום קסום!
:rejectingSoldierName", - "Commander notification of approving change shift request for the requesting soldier":"שלום :requestingSoldierName!
בקשתך להחלפת המשמרת :shiftName שלך
מ :shiftStart עד :shiftEnd
אושרה והשינוי בוצע.
יום טוב!
:commanderName", - "Commander notification of approving change shift request for the approving soldier": "שלום :approvingSoldierName!
בקשת החייל :requestingSoldierName להחליף את המשמרת :shiftName שלו
מ :shiftStart עד :shiftEnd
איתך, אושרה והשינוי בוצע.
המשך יום טוב!
:commanderName", "Request for shift change":"בקשה לשינוי משמרת", "Approve change shift request":"אישור בקשת שינוי משמרת", - "Request for shift change from commander":"שלום :commanderName!
האם אתה מאשר לחייל :requestingSoldierName להחליף את המשמרת :shiftName שלו
מ :shiftStart עד :shiftEnd
עם החייל :approvingSoldierName ?", - "Commander notification of rejection change shift request for the requesting soldier": "שלום :requestingSoldierName!
בקשתך לשינוי המשמרת :shiftName שלך
מ :shiftStart עד :shiftEnd
עם :approvingSoldierName
נדחתה.
יום טוב!
:commanderName", - "Commander notification of rejection change shift request for the approving soldier":"שלום :approvingSoldierName!
בקשת החייל :requestingSoldierName לשינוי המשמרת :shiftName שלו
מ :shiftStart עד :shiftEnd
איתך - נדחתה.
המשך יום טוב!
:commanderName", - "Soldier notification of rejection change shift request":"שלום :requestingSoldierName!
בקשתך לשינוי המשמרת :shiftName שלך
מ :shiftStart עד :shiftEnd
איתי, נדחתה.
המשך יום טוב!
:rejectingSoldierName", - "Commander notification of exchanging shifts for first soldier":"שלום :soldierAName!
המשמרת :shiftAName שלך
מ :shiftAStart עד :shiftAEnd
הוחלפה עם :soldierBName
עבור המשמרת :shiftBName
מ :shiftBStart עד :shiftBEnd
יום קסום!
:commander", - "Commander notification of exchanging shifts for second soldier":"שלום :soldierBName!
המשמרת :shiftBName שלך
מ :shiftBStart עד :shiftBEnd
הוחלפה עם :soldierAName
עבור המשמרת :shiftAName
מ :shiftAStart עד :shiftAEnd
יום קסום!
:commander", - "Request for shift exchange from soldier":"שלום :soldierAName!
האם תרצה להחליף את המשמרת
:shiftAName שלך
מ :shiftAStart עד :shiftAEnd
עם המשמרת:shiftBName שלי
מ :shiftBStart עד :shiftBEnd ?
:soldierBName", - "Commander notification of changing shifts for first soldier":"שלום :soldierName!
המשמרת :shiftName
מ :shiftStart עד :shiftEnd
הוקצתה לך.
המשך יום טוב!
:commander", - "Commander notification of changing shifts for second soldier":"שלום :soldierName!
המשמרת :shiftName שלך
מ :shiftStart עד :shiftEnd
הוסרה מהקצאתך.
המשך יום טוב!
:commander", - "Request for shift change from soldier":"שלום :soldierName!
האם תרצה לבצע את המשמרת
:shiftName שלי
מ :shiftStart עד :shiftEnd ?
:requestingSoldierName", "Assigned to shift today":":today
שלום :user!!
המשמרת :task שלך, תחל בשעה :startShift", "Between":"בין", "Between from":"מ", @@ -39,7 +56,9 @@ "Cancel":"בטל", "Capacity": "מקסימום נקודות", "Capacity hold": "הנקודות שבוצעו", + "December":"דצמבר", "Changing the shifts is your sole responsibility! (pay attention to conflicts between shifts).":"החלפת המשמרות באחריותך בלבד! (שים לב להתנגשויות בין משמרות).", + "Charts":"תרשימים", "Color": "צבע", "Columns": "עמודות", "Commander": "מפקד", @@ -48,6 +67,7 @@ "Constraint": "אילוץ", "Constraint Name": "שם אילוץ", "Constraints": "אילוצים", + "constraints": "אילוצים", "Constraints limit": "הגבלת אילוצים", "Course": "קורס", "Create":"צור", @@ -89,7 +109,7 @@ "Filter": "סנן", "First name": "שם פרטי", "Friday":"שישי", - "From": "מתאריך", + "From": "מ", "Full name": "שם מלא", "Gender": "מין", "Go to view the schedule of shifts assigned to you for this month.":"עבור לצפות בלוח המשימות שהוקצו לך לחודש זה.", @@ -109,12 +129,17 @@ "Is permanent": "קבע", "Is trainee": "חניך", "Is weekend": "סופ''ש", + "June":"יוני", + "July":"יולי", "Last name": "שם משפחה", "Less than":"פחות מ", "Less than equal":"פחות או שווה", "Low priority not task":"עדיפות נמוכה למשמרת", "Low priority not weekend":"עדיפות נמוכה לסופ''ש", + "low Constraints Rejected":"אילוצים בעדיפות נמוכה", + "lowConstraintsRejected":"אילוצים בעדיפות נמוכה", "Male": "זכר", + "May":"מאי", "Matching soldiers":"החיילים המתאימים", "Manager": "מנהל", "Max nights": "מקסימום לילות", @@ -124,6 +149,7 @@ "Medical":"מחלה", "Members": "חברים", "Monday":"שני", + "Month":"חודש", "Monthly": "חודשי", "My Constraint": "האילוץ שלי", "My Constraints": "האילוצים שלי", @@ -139,7 +165,10 @@ "New assignment":"הקצאה חדשה", "New task": "משימה חדשה", "Next reserve dates": "ימי מילואים לחודש הבא", + "Nights":"לילות", + "nights":"לילות", "No":"לא", + "No matching data!":"אין נתונים תואמים!", "No qualifications": "אין הסמכות", "No suitable soldiers":"אין חיילים מתאימים", "Not evening":"ערב", @@ -147,12 +176,16 @@ "Not task":"ללא משמרת", "Not Thursday evening":"חמישי ערב", "Not weekend":"סופ''ש", + "November":"נובמבר", + "October":"אוקטובר", "One time": "חד פעמי", "Time":"זמן", "Pay attention to update the shift details according to the changes you made .": " שים לב לעדכן את פרטי המשמרת בהתאם לשינויים שביצעת.", "Parallel weight": "משקל", "Personal Information": "נתונים אישיים", "Personal number": "מספר אישי", + "Points":"נקודות", + "points":"נקודות", "Qualifications": "הסמכות", "Recurring": "חזרתיות", "Recurring type": "סוג חזרתיות", @@ -171,14 +204,19 @@ "School":"לימודים", "Select an option": "בחר", "Select condition": "בחר תנאי", + "Select course":"בחר קורס", "Select from dates": "בחר מתאריך", + "Select month":"בחר חודש", "Select a soldier":"בחר חייל", + "Select parameter to filter":"בחר פרמטר לפילטור", + "Select year":"בחר שנה", "Select qualifications":"בחר הסמכות", "Send": "שלח", "Shift": "משמרת", "Shift change":"החלפת משמרות", "Shift name":"שם המשמרת", "Shifts": "משמרות", + "shifts": "משמרות", "Shifts assignment":"שבץ משמרות", "A shifts assignment":"משבץ משמרות", "Soldier": "חייל", @@ -191,6 +229,7 @@ "Start hour": "שעת התחלה", "Sunday":"ראשון", "Saturday":"שבת", + "September":"ספטמבר", "Task": "משימה", "Tasks": "משימות", "Task type": "סוג משימה", @@ -204,7 +243,6 @@ "Type": "סוג", "To":"עד", "Unassigned shifts":"משמרות שלא שובצו", - "Until": "עד תאריך", "Update parallel weight of holiday shift":"עדכון משקל של משמרת חג", "Update dragged shift details!": "עדכון פרטי משמרת שנגררה", "Update reserve days": "ימי מילואים לחודש הבא", @@ -217,8 +255,16 @@ "View assigned shifts":"צפה במשמרות שהוקצו עבורך", "View your shift schedule":"הצג את לוח המשמרות שלך", "Wednesday":"רביעי", + "Weekends":"סופשים", + "weekends":"סופשים", "Weekly": "שבועי", "Yes":"כן", + "Year":"שנה", + "January":"ינואר", + "February":"פבואר", + "March":"מאץ", + "cddzx":"hello :user", "You did not choose a commander. With your approval, you leave the team without a commander. Are you sure?":"לא בחרת מפקד. באישורך אתה משאיר את הצוות ללא מפקד. האם אתה בטוח?", - "Your shifts for today":"המשמרות שלך להיום" + "Your shifts for today":"המשמרות שלך להיום", + "label":"מספר :data עבור קורס :course" } diff --git a/public/js/app/components/apexcharts.js b/public/js/app/components/apexcharts.js new file mode 100644 index 0000000..1c0f544 --- /dev/null +++ b/public/js/app/components/apexcharts.js @@ -0,0 +1,800 @@ +var Ci=Object.create;var vt=Object.defineProperty;var Li=Object.getOwnPropertyDescriptor;var Pi=Object.getOwnPropertyNames;var Mi=Object.getPrototypeOf,Ii=Object.prototype.hasOwnProperty;var yt=(p,e)=>()=>(e||p((e={exports:{}}).exports,e),e.exports);var Ti=(p,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of Pi(e))!Ii.call(p,a)&&a!==t&&vt(p,a,{get:()=>e[a],enumerable:!(i=Li(e,a))||i.enumerable});return p};var zi=(p,e,t)=>(t=p!=null?Ci(Mi(p)):{},Ti(e||!p||!p.__esModule?vt(t,"default",{value:p,enumerable:!0}):t,p));var jt=yt((ot,We)=>{"use strict";function at(p,e){(e==null||e>p.length)&&(e=p.length);for(var t=0,i=Array(e);t>16,n=i>>8&255,o=255&i;return"#"+(16777216+65536*(Math.round((a-r)*s)+r)+256*(Math.round((a-n)*s)+n)+(Math.round((a-o)*s)+o)).toString(16).slice(1)}},{key:"shadeColor",value:function(e,t){return p.isColorHex(t)?this.shadeHexColor(e,t):this.shadeRGBColor(e,t)}}],[{key:"bind",value:function(e,t){return function(){return e.apply(t,arguments)}}},{key:"isObject",value:function(e){return e&&J(e)==="object"&&!Array.isArray(e)&&e!=null}},{key:"is",value:function(e,t){return Object.prototype.toString.call(t)==="[object "+e+"]"}},{key:"listToArray",value:function(e){var t,i=[];for(t=0;t1&&arguments[1]!==void 0?arguments[1]:2;return Number.isInteger(e)?e:parseFloat(e.toPrecision(t))}},{key:"randomId",value:function(){return(Math.random()+1).toString(36).substring(4)}},{key:"noExponents",value:function(e){var t=String(e).split(/[eE]/);if(t.length===1)return t[0];var i="",a=e<0?"-":"",s=t[0].replace(".",""),r=Number(t[1])+1;if(r<0){for(i=a+"0.";r++;)i+="0";return i+s.replace(/^-/,"")}for(r-=s.length;r--;)i+="0";return s+i}},{key:"getDimensions",value:function(e){var t=getComputedStyle(e,null),i=e.clientHeight,a=e.clientWidth;return i-=parseFloat(t.paddingTop)+parseFloat(t.paddingBottom),[a-=parseFloat(t.paddingLeft)+parseFloat(t.paddingRight),i]}},{key:"getBoundingClientRect",value:function(e){var t=e.getBoundingClientRect();return{top:t.top,right:t.right,bottom:t.bottom,left:t.left,width:e.clientWidth,height:e.clientHeight,x:t.left,y:t.top}}},{key:"getLargestStringFromArr",value:function(e){return e.reduce(function(t,i){return Array.isArray(i)&&(i=i.reduce(function(a,s){return a.length>s.length?a:s})),t.length>i.length?t:i},0)}},{key:"hexToRgba",value:function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"#999999",t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:.6;e.substring(0,1)!=="#"&&(e="#999999");var i=e.replace("#","");i=i.match(new RegExp("(.{"+i.length/3+"})","g"));for(var a=0;a1&&arguments[1]!==void 0?arguments[1]:"x",i=e.toString().slice();return i=i.replace(/[` ~!@#$%^&*()|+\=?;:'",.<>{}[\]\\/]/gi,t)}},{key:"negToZero",value:function(e){return e<0?0:e}},{key:"moveIndexInArray",value:function(e,t,i){if(i>=e.length)for(var a=i-e.length+1;a--;)e.push(void 0);return e.splice(i,0,e.splice(t,1)[0]),e}},{key:"extractNumber",value:function(e){return parseFloat(e.replace(/[^\d.]*/g,""))}},{key:"findAncestor",value:function(e,t){for(;(e=e.parentElement)&&!e.classList.contains(t););return e}},{key:"setELstyles",value:function(e,t){for(var i in t)t.hasOwnProperty(i)&&(e.style.key=t[i])}},{key:"preciseAddition",value:function(e,t){var i=(String(e).split(".")[1]||"").length,a=(String(t).split(".")[1]||"").length,s=Math.pow(10,Math.max(i,a));return(Math.round(e*s)+Math.round(t*s))/s}},{key:"isNumber",value:function(e){return!isNaN(e)&&parseFloat(Number(e))===e&&!isNaN(parseInt(e,10))}},{key:"isFloat",value:function(e){return Number(e)===e&&e%1!=0}},{key:"isSafari",value:function(){return/^((?!chrome|android).)*safari/i.test(navigator.userAgent)}},{key:"isFirefox",value:function(){return navigator.userAgent.toLowerCase().indexOf("firefox")>-1}},{key:"isMsEdge",value:function(){var e=window.navigator.userAgent,t=e.indexOf("Edge/");return t>0&&parseInt(e.substring(t+5,e.indexOf(".",t)),10)}},{key:"getGCD",value:function(e,t){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:7,a=Math.pow(10,i-Math.floor(Math.log10(Math.max(e,t))));for(e=Math.round(Math.abs(e)*a),t=Math.round(Math.abs(t)*a);t;){var s=t;t=e%t,e=s}return e/a}},{key:"getPrimeFactors",value:function(e){for(var t=[],i=2;e>=2;)e%i==0?(t.push(i),e/=i):i++;return t}},{key:"mod",value:function(e,t){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:7,a=Math.pow(10,i-Math.floor(Math.log10(Math.max(e,t))));return(e=Math.round(Math.abs(e)*a))%(t=Math.round(Math.abs(t)*a))/a}}]),p}(),ve=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w,this.setEasingFunctions()}return R(p,[{key:"setEasingFunctions",value:function(){var e;if(!this.w.globals.easing){switch(this.w.config.chart.animations.easing){case"linear":e="-";break;case"easein":e="<";break;case"easeout":e=">";break;case"easeinout":default:e="<>";break;case"swing":e=function(t){var i=1.70158;return(t-=1)*t*((i+1)*t+i)+1};break;case"bounce":e=function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375};break;case"elastic":e=function(t){return t===!!t?t:Math.pow(2,-10*t)*Math.sin((t-.075)*(2*Math.PI)/.3)+1}}this.w.globals.easing=e}}},{key:"animateLine",value:function(e,t,i,a){e.attr(t).animate(a).attr(i)}},{key:"animateMarker",value:function(e,t,i,a){e.attr({opacity:0}).animate(t,i).attr({opacity:1}).afterAll(function(){a()})}},{key:"animateRect",value:function(e,t,i,a,s){e.attr(t).animate(a).attr(i).afterAll(function(){return s()})}},{key:"animatePathsGradually",value:function(e){var t=e.el,i=e.realIndex,a=e.j,s=e.fill,r=e.pathFrom,n=e.pathTo,o=e.speed,h=e.delay,c=this.w,d=0;c.config.chart.animations.animateGradually.enabled&&(d=c.config.chart.animations.animateGradually.delay),c.config.chart.animations.dynamicAnimation.enabled&&c.globals.dataChanged&&c.config.chart.type!=="bar"&&(d=0),this.morphSVG(t,i,a,c.config.chart.type!=="line"||c.globals.comboCharts?s:"stroke",r,n,o,h*d)}},{key:"showDelayedElements",value:function(){this.w.globals.delayedElements.forEach(function(e){var t=e.el;t.classList.remove("apexcharts-element-hidden"),t.classList.add("apexcharts-hidden-element-shown")})}},{key:"animationCompleted",value:function(e){var t=this.w;t.globals.animationEnded||(t.globals.animationEnded=!0,this.showDelayedElements(),typeof t.config.chart.events.animationEnd=="function"&&t.config.chart.events.animationEnd(this.ctx,{el:e,w:t}))}},{key:"morphSVG",value:function(e,t,i,a,s,r,n,o){var h=this,c=this.w;s||(s=e.attr("pathFrom")),r||(r=e.attr("pathTo"));var d=function(g){return c.config.chart.type==="radar"&&(n=1),"M 0 ".concat(c.globals.gridHeight)};(!s||s.indexOf("undefined")>-1||s.indexOf("NaN")>-1)&&(s=d()),(!r||r.indexOf("undefined")>-1||r.indexOf("NaN")>-1)&&(r=d()),c.globals.shouldAnimate||(n=1),e.plot(s).animate(1,c.globals.easing,o).plot(s).animate(n,c.globals.easing,o).plot(r).afterAll(function(){P.isNumber(i)?i===c.globals.series[c.globals.maxValsInArrayIndex].length-2&&c.globals.shouldAnimate&&h.animationCompleted(e):a!=="none"&&c.globals.shouldAnimate&&(!c.globals.comboCharts&&t===c.globals.series.length-1||c.globals.comboCharts)&&h.animationCompleted(e),h.showDelayedElements()})}}]),p}(),ie=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"getDefaultFilter",value:function(e,t){var i=this.w;e.unfilter(!0),new window.SVG.Filter().size("120%","180%","-5%","-40%"),i.config.states.normal.filter!=="none"?this.applyFilter(e,t,i.config.states.normal.filter.type,i.config.states.normal.filter.value):i.config.chart.dropShadow.enabled&&this.dropShadow(e,i.config.chart.dropShadow,t)}},{key:"addNormalFilter",value:function(e,t){var i=this.w;i.config.chart.dropShadow.enabled&&!e.node.classList.contains("apexcharts-marker")&&this.dropShadow(e,i.config.chart.dropShadow,t)}},{key:"addLightenFilter",value:function(e,t,i){var a=this,s=this.w,r=i.intensity;e.unfilter(!0),new window.SVG.Filter,e.filter(function(n){var o=s.config.chart.dropShadow;(o.enabled?a.addShadow(n,t,o):n).componentTransfer({rgb:{type:"linear",slope:1.5,intercept:r}})}),e.filterer.node.setAttribute("filterUnits","userSpaceOnUse"),this._scaleFilterSize(e.filterer.node)}},{key:"addDarkenFilter",value:function(e,t,i){var a=this,s=this.w,r=i.intensity;e.unfilter(!0),new window.SVG.Filter,e.filter(function(n){var o=s.config.chart.dropShadow;(o.enabled?a.addShadow(n,t,o):n).componentTransfer({rgb:{type:"linear",slope:r}})}),e.filterer.node.setAttribute("filterUnits","userSpaceOnUse"),this._scaleFilterSize(e.filterer.node)}},{key:"applyFilter",value:function(e,t,i){var a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:.5;switch(i){case"none":this.addNormalFilter(e,t);break;case"lighten":this.addLightenFilter(e,t,{intensity:a});break;case"darken":this.addDarkenFilter(e,t,{intensity:a})}}},{key:"addShadow",value:function(e,t,i){var a,s=this.w,r=i.blur,n=i.top,o=i.left,h=i.color,c=i.opacity;if(((a=s.config.chart.dropShadow.enabledOnSeries)===null||a===void 0?void 0:a.length)>0&&s.config.chart.dropShadow.enabledOnSeries.indexOf(t)===-1)return e;var d=e.flood(Array.isArray(h)?h[t]:h,c).composite(e.sourceAlpha,"in").offset(o,n).gaussianBlur(r).merge(e.source);return e.blend(e.source,d)}},{key:"dropShadow",value:function(e,t){var i,a,s=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,r=t.top,n=t.left,o=t.blur,h=t.color,c=t.opacity,d=t.noUserSpaceOnUse,g=this.w;return e.unfilter(!0),P.isMsEdge()&&g.config.chart.type==="radialBar"||((i=g.config.chart.dropShadow.enabledOnSeries)===null||i===void 0?void 0:i.length)>0&&((a=g.config.chart.dropShadow.enabledOnSeries)===null||a===void 0?void 0:a.indexOf(s))===-1||(h=Array.isArray(h)?h[s]:h,e.filter(function(f){var x=null;x=P.isSafari()||P.isFirefox()||P.isMsEdge()?f.flood(h,c).composite(f.sourceAlpha,"in").offset(n,r).gaussianBlur(o):f.flood(h,c).composite(f.sourceAlpha,"in").offset(n,r).gaussianBlur(o).merge(f.source),f.blend(f.source,x)}),d||e.filterer.node.setAttribute("filterUnits","userSpaceOnUse"),this._scaleFilterSize(e.filterer.node)),e}},{key:"setSelectionFilter",value:function(e,t,i){var a=this.w;if(a.globals.selectedDataPoints[t]!==void 0&&a.globals.selectedDataPoints[t].indexOf(i)>-1){e.node.setAttribute("selected",!0);var s=a.config.states.active.filter;s!=="none"&&this.applyFilter(e,t,s.type,s.value)}}},{key:"_scaleFilterSize",value:function(e){(function(t){for(var i in t)t.hasOwnProperty(i)&&e.setAttribute(i,t[i])})({width:"200%",height:"200%",x:"-50%",y:"-50%"})}}]),p}(),X=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"roundPathCorners",value:function(e,t){function i(S,L,C){var I=L.x-S.x,z=L.y-S.y,M=Math.sqrt(I*I+z*z);return a(S,L,Math.min(1,C/M))}function a(S,L,C){return{x:S.x+(L.x-S.x)*C,y:S.y+(L.y-S.y)*C}}function s(S,L){S.length>2&&(S[S.length-2]=L.x,S[S.length-1]=L.y)}function r(S){return{x:parseFloat(S[S.length-2]),y:parseFloat(S[S.length-1])}}e.indexOf("NaN")>-1&&(e="");var n=e.split(/[,\s]/).reduce(function(S,L){var C=L.match("([a-zA-Z])(.+)");return C?(S.push(C[1]),S.push(C[2])):S.push(L),S},[]).reduce(function(S,L){return parseFloat(L)==L&&S.length?S[S.length-1].push(L):S.push([L]),S},[]),o=[];if(n.length>1){var h=r(n[0]),c=null;n[n.length-1][0]=="Z"&&n[0].length>2&&(c=["L",h.x,h.y],n[n.length-1]=c),o.push(n[0]);for(var d=1;d2&&f[0]=="L"&&x.length>2&&x[0]=="L"){var b,v,y=r(g),w=r(f),l=r(x);b=i(w,y,t),v=i(w,l,t),s(f,b),f.origPoint=w,o.push(f);var u=a(b,w,.5),m=a(w,v,.5),A=["C",u.x,u.y,m.x,m.y,v.x,v.y];A.origPoint=w,o.push(A)}else o.push(f)}if(c){var k=r(o[o.length-1]);o.push(["Z"]),s(o[0],k)}}else o=n;return o.reduce(function(S,L){return S+L.join(" ")+" "},"")}},{key:"drawLine",value:function(e,t,i,a){var s=arguments.length>4&&arguments[4]!==void 0?arguments[4]:"#a8a8a8",r=arguments.length>5&&arguments[5]!==void 0?arguments[5]:0,n=arguments.length>6&&arguments[6]!==void 0?arguments[6]:null,o=arguments.length>7&&arguments[7]!==void 0?arguments[7]:"butt";return this.w.globals.dom.Paper.line().attr({x1:e,y1:t,x2:i,y2:a,stroke:s,"stroke-dasharray":r,"stroke-width":n,"stroke-linecap":o})}},{key:"drawRect",value:function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0,t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,s=arguments.length>4&&arguments[4]!==void 0?arguments[4]:0,r=arguments.length>5&&arguments[5]!==void 0?arguments[5]:"#fefefe",n=arguments.length>6&&arguments[6]!==void 0?arguments[6]:1,o=arguments.length>7&&arguments[7]!==void 0?arguments[7]:null,h=arguments.length>8&&arguments[8]!==void 0?arguments[8]:null,c=arguments.length>9&&arguments[9]!==void 0?arguments[9]:0,d=this.w.globals.dom.Paper.rect();return d.attr({x:e,y:t,width:i>0?i:0,height:a>0?a:0,rx:s,ry:s,opacity:n,"stroke-width":o!==null?o:0,stroke:h!==null?h:"none","stroke-dasharray":c}),d.node.setAttribute("fill",r),d}},{key:"drawPolygon",value:function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"#e1e1e1",i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"none";return this.w.globals.dom.Paper.polygon(e).attr({fill:a,stroke:t,"stroke-width":i})}},{key:"drawCircle",value:function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;e<0&&(e=0);var i=this.w.globals.dom.Paper.circle(2*e);return t!==null&&i.attr(t),i}},{key:"drawPath",value:function(e){var t=e.d,i=t===void 0?"":t,a=e.stroke,s=a===void 0?"#a8a8a8":a,r=e.strokeWidth,n=r===void 0?1:r,o=e.fill,h=e.fillOpacity,c=h===void 0?1:h,d=e.strokeOpacity,g=d===void 0?1:d,f=e.classes,x=e.strokeLinecap,b=x===void 0?null:x,v=e.strokeDashArray,y=v===void 0?0:v,w=this.w;return b===null&&(b=w.config.stroke.lineCap),(i.indexOf("undefined")>-1||i.indexOf("NaN")>-1)&&(i="M 0 ".concat(w.globals.gridHeight)),w.globals.dom.Paper.path(i).attr({fill:o,"fill-opacity":c,stroke:s,"stroke-opacity":g,"stroke-linecap":b,"stroke-width":n,"stroke-dasharray":y,class:f})}},{key:"group",value:function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:null,t=this.w.globals.dom.Paper.group();return e!==null&&t.attr(e),t}},{key:"move",value:function(e,t){var i=["M",e,t].join(" ");return i}},{key:"line",value:function(e,t){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:null,a=null;return i===null?a=[" L",e,t].join(" "):i==="H"?a=[" H",e].join(" "):i==="V"&&(a=[" V",t].join(" ")),a}},{key:"curve",value:function(e,t,i,a,s,r){var n=["C",e,t,i,a,s,r].join(" ");return n}},{key:"quadraticCurve",value:function(e,t,i,a){return["Q",e,t,i,a].join(" ")}},{key:"arc",value:function(e,t,i,a,s,r,n){var o="A";arguments.length>7&&arguments[7]!==void 0&&arguments[7]&&(o="a");var h=[o,e,t,i,a,s,r,n].join(" ");return h}},{key:"renderPaths",value:function(e){var t,i=e.j,a=e.realIndex,s=e.pathFrom,r=e.pathTo,n=e.stroke,o=e.strokeWidth,h=e.strokeLinecap,c=e.fill,d=e.animationDelay,g=e.initialSpeed,f=e.dataChangeSpeed,x=e.className,b=e.shouldClipToGrid,v=b===void 0||b,y=e.bindEventsOnPaths,w=y===void 0||y,l=e.drawShadow,u=l===void 0||l,m=this.w,A=new ie(this.ctx),k=new ve(this.ctx),S=this.w.config.chart.animations.enabled,L=S&&this.w.config.chart.animations.dynamicAnimation.enabled,C=!!(S&&!m.globals.resized||L&&m.globals.dataChanged&&m.globals.shouldAnimate);C?t=s:(t=r,m.globals.animationEnded=!0);var I=m.config.stroke.dashArray,z=0;z=Array.isArray(I)?I[a]:m.config.stroke.dashArray;var M=this.drawPath({d:t,stroke:n,strokeWidth:o,fill:c,fillOpacity:1,classes:x,strokeLinecap:h,strokeDashArray:z});if(M.attr("index",a),v&&M.attr({"clip-path":"url(#gridRectMask".concat(m.globals.cuid,")")}),m.config.states.normal.filter.type!=="none")A.getDefaultFilter(M,a);else if(m.config.chart.dropShadow.enabled&&u){var T=m.config.chart.dropShadow;A.dropShadow(M,T,a)}w&&(M.node.addEventListener("mouseenter",this.pathMouseEnter.bind(this,M)),M.node.addEventListener("mouseleave",this.pathMouseLeave.bind(this,M)),M.node.addEventListener("mousedown",this.pathMouseDown.bind(this,M))),M.attr({pathTo:r,pathFrom:s});var E={el:M,j:i,realIndex:a,pathFrom:s,pathTo:r,fill:c,strokeWidth:o,delay:d};return!S||m.globals.resized||m.globals.dataChanged?!m.globals.resized&&m.globals.dataChanged||k.showDelayedElements():k.animatePathsGradually(Y(Y({},E),{},{speed:g})),m.globals.dataChanged&&L&&C&&k.animatePathsGradually(Y(Y({},E),{},{speed:f})),M}},{key:"drawPattern",value:function(e,t,i){var a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"#a8a8a8",s=arguments.length>4&&arguments[4]!==void 0?arguments[4]:0;return this.w.globals.dom.Paper.pattern(t,i,function(r){e==="horizontalLines"?r.line(0,0,i,0).stroke({color:a,width:s+1}):e==="verticalLines"?r.line(0,0,0,t).stroke({color:a,width:s+1}):e==="slantedLines"?r.line(0,0,t,i).stroke({color:a,width:s}):e==="squares"?r.rect(t,i).fill("none").stroke({color:a,width:s}):e==="circles"&&r.circle(t).fill("none").stroke({color:a,width:s})})}},{key:"drawGradient",value:function(e,t,i,a,s){var r,n=arguments.length>5&&arguments[5]!==void 0?arguments[5]:null,o=arguments.length>6&&arguments[6]!==void 0?arguments[6]:null,h=arguments.length>7&&arguments[7]!==void 0?arguments[7]:null,c=arguments.length>8&&arguments[8]!==void 0?arguments[8]:0,d=this.w;t.length<9&&t.indexOf("#")===0&&(t=P.hexToRgba(t,a)),i.length<9&&i.indexOf("#")===0&&(i=P.hexToRgba(i,s));var g=0,f=1,x=1,b=null;o!==null&&(g=o[0]!==void 0?o[0]/100:0,f=o[1]!==void 0?o[1]/100:1,x=o[2]!==void 0?o[2]/100:1,b=o[3]!==void 0?o[3]/100:null);var v=!(d.config.chart.type!=="donut"&&d.config.chart.type!=="pie"&&d.config.chart.type!=="polarArea"&&d.config.chart.type!=="bubble");if(r=h===null||h.length===0?d.globals.dom.Paper.gradient(v?"radial":"linear",function(l){l.at(g,t,a),l.at(f,i,s),l.at(x,i,s),b!==null&&l.at(b,t,a)}):d.globals.dom.Paper.gradient(v?"radial":"linear",function(l){(Array.isArray(h[c])?h[c]:h).forEach(function(u){l.at(u.offset/100,u.color,u.opacity)})}),v){var y=d.globals.gridWidth/2,w=d.globals.gridHeight/2;d.config.chart.type!=="bubble"?r.attr({gradientUnits:"userSpaceOnUse",cx:y,cy:w,r:n}):r.attr({cx:.5,cy:.5,r:.8,fx:.2,fy:.2})}else e==="vertical"?r.from(0,0).to(0,1):e==="diagonal"?r.from(0,0).to(1,1):e==="horizontal"?r.from(0,1).to(1,1):e==="diagonal2"&&r.from(1,0).to(0,1);return r}},{key:"getTextBasedOnMaxWidth",value:function(e){var t=e.text,i=e.maxWidth,a=e.fontSize,s=e.fontFamily,r=this.getTextRects(t,a,s),n=r.width/t.length,o=Math.floor(i/n);return i-1){var o=i.globals.selectedDataPoints[s].indexOf(r);i.globals.selectedDataPoints[s].splice(o,1)}}else{if(!i.config.states.active.allowMultipleDataPointsSelection&&i.globals.selectedDataPoints.length>0){i.globals.selectedDataPoints=[];var h=i.globals.dom.Paper.select(".apexcharts-series path").members,c=i.globals.dom.Paper.select(".apexcharts-series circle, .apexcharts-series rect").members,d=function(x){Array.prototype.forEach.call(x,function(b){b.node.setAttribute("selected","false"),a.getDefaultFilter(b,s)})};d(h),d(c)}e.node.setAttribute("selected","true"),n="true",i.globals.selectedDataPoints[s]===void 0&&(i.globals.selectedDataPoints[s]=[]),i.globals.selectedDataPoints[s].push(r)}if(n==="true"){var g=i.config.states.active.filter;if(g!=="none")a.applyFilter(e,s,g.type,g.value);else if(i.config.states.hover.filter!=="none"&&!i.globals.isTouchDevice){var f=i.config.states.hover.filter;a.applyFilter(e,s,f.type,f.value)}}else i.config.states.active.filter.type!=="none"&&(i.config.states.hover.filter.type==="none"||i.globals.isTouchDevice?a.getDefaultFilter(e,s):(f=i.config.states.hover.filter,a.applyFilter(e,s,f.type,f.value)));typeof i.config.chart.events.dataPointSelection=="function"&&i.config.chart.events.dataPointSelection(t,this.ctx,{selectedDataPoints:i.globals.selectedDataPoints,seriesIndex:s,dataPointIndex:r,w:i}),t&&this.ctx.events.fireEvent("dataPointSelection",[t,this.ctx,{selectedDataPoints:i.globals.selectedDataPoints,seriesIndex:s,dataPointIndex:r,w:i}])}},{key:"rotateAroundCenter",value:function(e){var t={};return e&&typeof e.getBBox=="function"&&(t=e.getBBox()),{x:t.x+t.width/2,y:t.y+t.height/2}}},{key:"getTextRects",value:function(e,t,i,a){var s=!(arguments.length>4&&arguments[4]!==void 0)||arguments[4],r=this.w,n=this.drawText({x:-200,y:-200,text:e,textAnchor:"start",fontSize:t,fontFamily:i,foreColor:"#fff",opacity:0});a&&n.attr("transform",a),r.globals.dom.Paper.add(n);var o=n.bbox();return s||(o=n.node.getBoundingClientRect()),n.remove(),{width:o.width,height:o.height}}},{key:"placeTextWithEllipsis",value:function(e,t,i){if(typeof e.getComputedTextLength=="function"&&(e.textContent=t,t.length>0&&e.getComputedTextLength()>=i/1.1)){for(var a=t.length-3;a>0;a-=3)if(e.getSubStringLength(0,a)<=i/1.1)return void(e.textContent=t.substring(0,a)+"...");e.textContent="."}}}],[{key:"setAttrs",value:function(e,t){for(var i in t)t.hasOwnProperty(i)&&e.setAttribute(i,t[i])}}]),p}(),$=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"getStackedSeriesTotals",value:function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],t=this.w,i=[];if(t.globals.series.length===0)return i;for(var a=0;a0&&arguments[0]!==void 0?arguments[0]:null;return e===null?this.w.config.series.reduce(function(t,i){return t+i},0):this.w.globals.series[e].reduce(function(t,i){return t+i},0)}},{key:"getStackedSeriesTotalsByGroups",value:function(){var e=this,t=this.w,i=[];return t.globals.seriesGroups.forEach(function(a){var s=[];t.config.series.forEach(function(n,o){a.indexOf(t.globals.seriesNames[o])>-1&&s.push(o)});var r=t.globals.series.map(function(n,o){return s.indexOf(o)===-1?o:-1}).filter(function(n){return n!==-1});i.push(e.getStackedSeriesTotals(r))}),i}},{key:"setSeriesYAxisMappings",value:function(){var e=this.w.globals,t=this.w.config,i=[],a=[],s=[],r=e.series.length>t.yaxis.length||t.yaxis.some(function(d){return Array.isArray(d.seriesName)});t.series.forEach(function(d,g){s.push(g),a.push(null)}),t.yaxis.forEach(function(d,g){i[g]=[]});var n=[];t.yaxis.forEach(function(d,g){var f=!1;if(d.seriesName){var x=[];Array.isArray(d.seriesName)?x=d.seriesName:x.push(d.seriesName),x.forEach(function(b){t.series.forEach(function(v,y){if(v.name===b){var w=y;g===y||r?!r||s.indexOf(y)>-1?i[g].push([g,y]):console.warn("Series '"+v.name+"' referenced more than once in what looks like the new style. That is, when using either seriesName: [], or when there are more series than yaxes."):(i[y].push([y,g]),w=g),f=!0,(w=s.indexOf(w))!==-1&&s.splice(w,1)}})})}f||n.push(g)}),i=i.map(function(d,g){var f=[];return d.forEach(function(x){a[x[1]]=x[0],f.push(x[1])}),f});for(var o=t.yaxis.length-1,h=0;h0&&arguments[0]!==void 0?arguments[0]:null;return(e===null?this.w.config.series.filter(function(t){return t!==null}):this.w.config.series[e].data.filter(function(t){return t!==null})).length===0}},{key:"seriesHaveSameValues",value:function(e){return this.w.globals.series[e].every(function(t,i,a){return t===a[0]})}},{key:"getCategoryLabels",value:function(e){var t=this.w,i=e.slice();return t.config.xaxis.convertedCatToNumeric&&(i=e.map(function(a,s){return t.config.xaxis.labels.formatter(a-t.globals.minX+1)})),i}},{key:"getLargestSeries",value:function(){var e=this.w;e.globals.maxValsInArrayIndex=e.globals.series.map(function(t){return t.length}).indexOf(Math.max.apply(Math,e.globals.series.map(function(t){return t.length})))}},{key:"getLargestMarkerSize",value:function(){var e=this.w,t=0;return e.globals.markers.size.forEach(function(i){t=Math.max(t,i)}),e.config.markers.discrete&&e.config.markers.discrete.length&&e.config.markers.discrete.forEach(function(i){t=Math.max(t,i.size)}),t>0&&(t+=e.config.markers.hover.sizeOffset+1),e.globals.markers.largestSize=t,t}},{key:"getSeriesTotals",value:function(){var e=this.w;e.globals.seriesTotals=e.globals.series.map(function(t,i){var a=0;if(Array.isArray(t))for(var s=0;se&&i.globals.seriesX[s][n]0){var x=function(v,y){var w=s.config.yaxis[s.globals.seriesYAxisReverseMap[y]],l=v<0?-1:1;return v=Math.abs(v),w.logarithmic&&(v=a.getBaseLog(w.logBase,v)),-l*v/n[y]};if(r.isMultipleYAxis){h=[];for(var b=0;b0&&t.forEach(function(n){var o=[],h=[];e.i.forEach(function(c,d){s.config.series[c].group===n&&(o.push(e.series[d]),h.push(c))}),o.length>0&&r.push(a.draw(o,i,h))}),r}}],[{key:"checkComboSeries",value:function(e,t){var i=!1,a=0,s=0;return t===void 0&&(t="line"),e.length&&e[0].type!==void 0&&e.forEach(function(r){r.type!=="bar"&&r.type!=="column"&&r.type!=="candlestick"&&r.type!=="boxPlot"||a++,r.type!==void 0&&r.type!==t&&s++}),s>0&&(i=!0),{comboBarCount:a,comboCharts:i}}},{key:"extendArrayProps",value:function(e,t,i){var a,s,r,n,o,h;return(a=t)!==null&&a!==void 0&&a.yaxis&&(t=e.extendYAxis(t,i)),(s=t)!==null&&s!==void 0&&s.annotations&&(t.annotations.yaxis&&(t=e.extendYAxisAnnotations(t)),(r=t)!==null&&r!==void 0&&(n=r.annotations)!==null&&n!==void 0&&n.xaxis&&(t=e.extendXAxisAnnotations(t)),(o=t)!==null&&o!==void 0&&(h=o.annotations)!==null&&h!==void 0&&h.points&&(t=e.extendPointAnnotations(t))),t}}]),p}(),Be=function(){function p(e){F(this,p),this.w=e.w,this.annoCtx=e}return R(p,[{key:"setOrientations",value:function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null,i=this.w;if(e.label.orientation==="vertical"){var a=t!==null?t:0,s=i.globals.dom.baseEl.querySelector(".apexcharts-xaxis-annotations .apexcharts-xaxis-annotation-label[rel='".concat(a,"']"));if(s!==null){var r=s.getBoundingClientRect();s.setAttribute("x",parseFloat(s.getAttribute("x"))-r.height+4),e.label.position==="top"?s.setAttribute("y",parseFloat(s.getAttribute("y"))+r.width):s.setAttribute("y",parseFloat(s.getAttribute("y"))-r.width);var n=this.annoCtx.graphics.rotateAroundCenter(s),o=n.x,h=n.y;s.setAttribute("transform","rotate(-90 ".concat(o," ").concat(h,")"))}}}},{key:"addBackgroundToAnno",value:function(e,t){var i=this.w;if(!e||t.label.text===void 0||t.label.text!==void 0&&!String(t.label.text).trim())return null;var a=i.globals.dom.baseEl.querySelector(".apexcharts-grid").getBoundingClientRect(),s=e.getBoundingClientRect(),r=t.label.style.padding.left,n=t.label.style.padding.right,o=t.label.style.padding.top,h=t.label.style.padding.bottom;t.label.orientation==="vertical"&&(o=t.label.style.padding.left,h=t.label.style.padding.right,r=t.label.style.padding.top,n=t.label.style.padding.bottom);var c=s.left-a.left-r,d=s.top-a.top-o,g=this.annoCtx.graphics.drawRect(c-i.globals.barPadForNumericAxis,d,s.width+r+n,s.height+o+h,t.label.borderRadius,t.label.style.background,1,t.label.borderWidth,t.label.borderColor,0);return t.id&&g.node.classList.add(t.id),g}},{key:"annotationsBackground",value:function(){var e=this,t=this.w,i=function(a,s,r){var n=t.globals.dom.baseEl.querySelector(".apexcharts-".concat(r,"-annotations .apexcharts-").concat(r,"-annotation-label[rel='").concat(s,"']"));if(n){var o=n.parentNode,h=e.addBackgroundToAnno(n,a);h&&(o.insertBefore(h.node,n),a.label.mouseEnter&&h.node.addEventListener("mouseenter",a.label.mouseEnter.bind(e,a)),a.label.mouseLeave&&h.node.addEventListener("mouseleave",a.label.mouseLeave.bind(e,a)),a.label.click&&h.node.addEventListener("click",a.label.click.bind(e,a)))}};t.config.annotations.xaxis.map(function(a,s){i(a,s,"xaxis")}),t.config.annotations.yaxis.map(function(a,s){i(a,s,"yaxis")}),t.config.annotations.points.map(function(a,s){i(a,s,"point")})}},{key:"getY1Y2",value:function(e,t){var i,a=e==="y1"?t.y:t.y2,s=!1,r=this.w;if(this.annoCtx.invertAxis){var n=r.globals.labels;r.config.xaxis.convertedCatToNumeric&&(n=r.globals.categoryLabels);var o=n.indexOf(a),h=r.globals.dom.baseEl.querySelector(".apexcharts-yaxis-texts-g text:nth-child("+(o+1)+")");i=h?parseFloat(h.getAttribute("y")):(r.globals.gridHeight/n.length-1)*(o+1)-r.globals.barHeight,t.seriesIndex!==void 0&&r.globals.barHeight&&(i=i-r.globals.barHeight/2*(r.globals.series.length-1)+r.globals.barHeight*t.seriesIndex)}else{var c,d=r.globals.seriesYAxisMap[t.yAxisIndex][0];r.config.yaxis[t.yAxisIndex].logarithmic?c=(a=new $(this.annoCtx.ctx).getLogVal(r.config.yaxis[t.yAxisIndex].logBase,a,d))/r.globals.yLogRatio[d]:c=(a-r.globals.minYArr[d])/(r.globals.yRange[d]/r.globals.gridHeight),c>r.globals.gridHeight?(c=r.globals.gridHeight,s=!0):c<0&&(c=0,s=!0),i=r.globals.gridHeight-c,!t.marker||t.y!==void 0&&t.y!==null||(i=0),r.config.yaxis[t.yAxisIndex]&&r.config.yaxis[t.yAxisIndex].reversed&&(i=c)}return typeof a=="string"&&a.indexOf("px")>-1&&(i=parseFloat(a)),{yP:i,clipped:s}}},{key:"getX1X2",value:function(e,t){var i,a=e==="x1"?t.x:t.x2,s=this.w,r=this.annoCtx.invertAxis?s.globals.minY:s.globals.minX,n=this.annoCtx.invertAxis?s.globals.maxY:s.globals.maxX,o=this.annoCtx.invertAxis?s.globals.yRange[0]:s.globals.xRange,h=!1;return i=this.annoCtx.inversedReversedAxis?(n-a)/(o/s.globals.gridWidth):(a-r)/(o/s.globals.gridWidth),s.config.xaxis.type!=="category"&&!s.config.xaxis.convertedCatToNumeric||this.annoCtx.invertAxis||s.globals.dataFormatXNumeric||s.config.chart.sparkline.enabled||(i=this.getStringX(a)),typeof a=="string"&&a.indexOf("px")>-1&&(i=parseFloat(a)),a==null&&t.marker&&(i=s.globals.gridWidth),t.seriesIndex!==void 0&&s.globals.barWidth&&!this.annoCtx.invertAxis&&(i=i-s.globals.barWidth/2*(s.globals.series.length-1)+s.globals.barWidth*t.seriesIndex),i>s.globals.gridWidth?(i=s.globals.gridWidth,h=!0):i<0&&(i=0,h=!0),{x:i,clipped:h}}},{key:"getStringX",value:function(e){var t=this.w,i=e;t.config.xaxis.convertedCatToNumeric&&t.globals.categoryLabels.length&&(e=t.globals.categoryLabels.indexOf(e)+1);var a=t.globals.labels.indexOf(e),s=t.globals.dom.baseEl.querySelector(".apexcharts-xaxis-texts-g text:nth-child("+(a+1)+")");return s&&(i=parseFloat(s.getAttribute("x"))),i}}]),p}(),Xi=function(){function p(e){F(this,p),this.w=e.w,this.annoCtx=e,this.invertAxis=this.annoCtx.invertAxis,this.helpers=new Be(this.annoCtx)}return R(p,[{key:"addXaxisAnnotation",value:function(e,t,i){var a,s=this.w,r=this.helpers.getX1X2("x1",e),n=r.x,o=r.clipped,h=!0,c=e.label.text,d=e.strokeDashArray;if(P.isNumber(n)){if(e.x2===null||e.x2===void 0){if(!o){var g=this.annoCtx.graphics.drawLine(n+e.offsetX,0+e.offsetY,n+e.offsetX,s.globals.gridHeight+e.offsetY,e.borderColor,d,e.borderWidth);t.appendChild(g.node),e.id&&g.node.classList.add(e.id)}}else{var f=this.helpers.getX1X2("x2",e);if(a=f.x,h=f.clipped,!o||!h){if(a12?f-12:f===0?12:f;t=(t=(t=(t=t.replace(/(^|[^\\])HH+/g,"$1"+h(f))).replace(/(^|[^\\])H/g,"$1"+f)).replace(/(^|[^\\])hh+/g,"$1"+h(x))).replace(/(^|[^\\])h/g,"$1"+x);var b=a?e.getUTCMinutes():e.getMinutes();t=(t=t.replace(/(^|[^\\])mm+/g,"$1"+h(b))).replace(/(^|[^\\])m/g,"$1"+b);var v=a?e.getUTCSeconds():e.getSeconds();t=(t=t.replace(/(^|[^\\])ss+/g,"$1"+h(v))).replace(/(^|[^\\])s/g,"$1"+v);var y=a?e.getUTCMilliseconds():e.getMilliseconds();t=t.replace(/(^|[^\\])fff+/g,"$1"+h(y,3)),y=Math.round(y/10),t=t.replace(/(^|[^\\])ff/g,"$1"+h(y)),y=Math.round(y/10);var w=f<12?"AM":"PM";t=(t=(t=t.replace(/(^|[^\\])f/g,"$1"+y)).replace(/(^|[^\\])TT+/g,"$1"+w)).replace(/(^|[^\\])T/g,"$1"+w.charAt(0));var l=w.toLowerCase();t=(t=t.replace(/(^|[^\\])tt+/g,"$1"+l)).replace(/(^|[^\\])t/g,"$1"+l.charAt(0));var u=-e.getTimezoneOffset(),m=a||!u?"Z":u>0?"+":"-";if(!a){var A=(u=Math.abs(u))%60;m+=h(Math.floor(u/60))+":"+h(A)}t=t.replace(/(^|[^\\])K/g,"$1"+m);var k=(a?e.getUTCDay():e.getDay())+1;return t=(t=(t=(t=(t=t.replace(new RegExp(n[0],"g"),n[k])).replace(new RegExp(o[0],"g"),o[k])).replace(new RegExp(s[0],"g"),s[d])).replace(new RegExp(r[0],"g"),r[d])).replace(/\\(.)/g,"$1")}},{key:"getTimeUnitsfromTimestamp",value:function(e,t,i){var a=this.w;a.config.xaxis.min!==void 0&&(e=a.config.xaxis.min),a.config.xaxis.max!==void 0&&(t=a.config.xaxis.max);var s=this.getDate(e),r=this.getDate(t),n=this.formatDate(s,"yyyy MM dd HH mm ss fff").split(" "),o=this.formatDate(r,"yyyy MM dd HH mm ss fff").split(" ");return{minMillisecond:parseInt(n[6],10),maxMillisecond:parseInt(o[6],10),minSecond:parseInt(n[5],10),maxSecond:parseInt(o[5],10),minMinute:parseInt(n[4],10),maxMinute:parseInt(o[4],10),minHour:parseInt(n[3],10),maxHour:parseInt(o[3],10),minDate:parseInt(n[2],10),maxDate:parseInt(o[2],10),minMonth:parseInt(n[1],10)-1,maxMonth:parseInt(o[1],10)-1,minYear:parseInt(n[0],10),maxYear:parseInt(o[0],10)}}},{key:"isLeapYear",value:function(e){return e%4==0&&e%100!=0||e%400==0}},{key:"calculcateLastDaysOfMonth",value:function(e,t,i){return this.determineDaysOfMonths(e,t)-i}},{key:"determineDaysOfYear",value:function(e){var t=365;return this.isLeapYear(e)&&(t=366),t}},{key:"determineRemainingDaysOfYear",value:function(e,t,i){var a=this.daysCntOfYear[t]+i;return t>1&&this.isLeapYear()&&a++,a}},{key:"determineDaysOfMonths",value:function(e,t){var i=30;switch(e=P.monthMod(e),!0){case this.months30.indexOf(e)>-1:e===2&&(i=this.isLeapYear(t)?29:28);break;case this.months31.indexOf(e)>-1:default:i=31}return i}}]),p}(),ze=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w,this.tooltipKeyFormat="dd MMM"}return R(p,[{key:"xLabelFormat",value:function(e,t,i,a){var s=this.w;if(s.config.xaxis.type==="datetime"&&s.config.xaxis.labels.formatter===void 0&&s.config.tooltip.x.formatter===void 0){var r=new K(this.ctx);return r.formatDate(r.getDate(t),s.config.tooltip.x.format)}return e(t,i,a)}},{key:"defaultGeneralFormatter",value:function(e){return Array.isArray(e)?e.map(function(t){return t}):e}},{key:"defaultYFormatter",value:function(e,t,i){var a=this.w;if(P.isNumber(e))if(a.globals.yValueDecimal!==0)e=e.toFixed(t.decimalsInFloat!==void 0?t.decimalsInFloat:a.globals.yValueDecimal);else{var s=e.toFixed(0);e=e==s?s:e.toFixed(1)}return e}},{key:"setLabelFormatters",value:function(){var e=this,t=this.w;return t.globals.xaxisTooltipFormatter=function(i){return e.defaultGeneralFormatter(i)},t.globals.ttKeyFormatter=function(i){return e.defaultGeneralFormatter(i)},t.globals.ttZFormatter=function(i){return i},t.globals.legendFormatter=function(i){return e.defaultGeneralFormatter(i)},t.config.xaxis.labels.formatter!==void 0?t.globals.xLabelFormatter=t.config.xaxis.labels.formatter:t.globals.xLabelFormatter=function(i){if(P.isNumber(i)){if(!t.config.xaxis.convertedCatToNumeric&&t.config.xaxis.type==="numeric"){if(P.isNumber(t.config.xaxis.decimalsInFloat))return i.toFixed(t.config.xaxis.decimalsInFloat);var a=t.globals.maxX-t.globals.minX;return a>0&&a<100?i.toFixed(1):i.toFixed(0)}return t.globals.isBarHorizontal&&t.globals.maxY-t.globals.minYArr<4?i.toFixed(1):i.toFixed(0)}return i},typeof t.config.tooltip.x.formatter=="function"?t.globals.ttKeyFormatter=t.config.tooltip.x.formatter:t.globals.ttKeyFormatter=t.globals.xLabelFormatter,typeof t.config.xaxis.tooltip.formatter=="function"&&(t.globals.xaxisTooltipFormatter=t.config.xaxis.tooltip.formatter),(Array.isArray(t.config.tooltip.y)||t.config.tooltip.y.formatter!==void 0)&&(t.globals.ttVal=t.config.tooltip.y),t.config.tooltip.z.formatter!==void 0&&(t.globals.ttZFormatter=t.config.tooltip.z.formatter),t.config.legend.formatter!==void 0&&(t.globals.legendFormatter=t.config.legend.formatter),t.config.yaxis.forEach(function(i,a){i.labels.formatter!==void 0?t.globals.yLabelFormatters[a]=i.labels.formatter:t.globals.yLabelFormatters[a]=function(s){return t.globals.xyCharts?Array.isArray(s)?s.map(function(r){return e.defaultYFormatter(r,i,a)}):e.defaultYFormatter(s,i,a):s}}),t.globals}},{key:"heatmapLabelFormatters",value:function(){var e=this.w;if(e.config.chart.type==="heatmap"){e.globals.yAxisScale[0].result=e.globals.seriesNames.slice();var t=e.globals.seriesNames.reduce(function(i,a){return i.length>a.length?i:a},0);e.globals.yAxisScale[0].niceMax=t,e.globals.yAxisScale[0].niceMin=t}}}]),p}(),ge=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"getLabel",value:function(e,t,i,a){var s=arguments.length>4&&arguments[4]!==void 0?arguments[4]:[],r=arguments.length>5&&arguments[5]!==void 0?arguments[5]:"12px",n=!(arguments.length>6&&arguments[6]!==void 0)||arguments[6],o=this.w,h=e[a]===void 0?"":e[a],c=h,d=o.globals.xLabelFormatter,g=o.config.xaxis.labels.formatter,f=!1,x=new ze(this.ctx),b=h;n&&(c=x.xLabelFormat(d,h,b,{i:a,dateFormatter:new K(this.ctx).formatDate,w:o}),g!==void 0&&(c=g(h,e[a],{i:a,dateFormatter:new K(this.ctx).formatDate,w:o})));var v,y;t.length>0?(v=t[a].unit,y=null,t.forEach(function(m){m.unit==="month"?y="year":m.unit==="day"?y="month":m.unit==="hour"?y="day":m.unit==="minute"&&(y="hour")}),f=y===v,i=t[a].position,c=t[a].value):o.config.xaxis.type==="datetime"&&g===void 0&&(c=""),c===void 0&&(c=""),c=Array.isArray(c)?c:c.toString();var w=new X(this.ctx),l={};l=o.globals.rotateXLabels&&n?w.getTextRects(c,parseInt(r,10),null,"rotate(".concat(o.config.xaxis.labels.rotate," 0 0)"),!1):w.getTextRects(c,parseInt(r,10));var u=!o.config.xaxis.labels.showDuplicates&&this.ctx.timeScale;return!Array.isArray(c)&&(String(c)==="NaN"||s.indexOf(c)>=0&&u)&&(c=""),{x:i,text:c,textRect:l,isBold:f}}},{key:"checkLabelBasedOnTickamount",value:function(e,t,i){var a=this.w,s=a.config.xaxis.tickAmount;return s==="dataPoints"&&(s=Math.round(a.globals.gridWidth/120)),s>i||e%Math.round(i/(s+1))==0||(t.text=""),t}},{key:"checkForOverflowingLabels",value:function(e,t,i,a,s){var r=this.w;if(e===0&&r.globals.skipFirstTimelinelabel&&(t.text=""),e===i-1&&r.globals.skipLastTimelinelabel&&(t.text=""),r.config.xaxis.labels.hideOverlappingLabels&&a.length>0){var n=s[s.length-1];t.xa.length||a.some(function(s){return Array.isArray(s.seriesName)})?e:i.seriesYAxisReverseMap[e]}},{key:"isYAxisHidden",value:function(e){var t=this.w,i=t.config.yaxis[e];if(!i.show||this.yAxisAllSeriesCollapsed(e))return!0;if(!i.showForNullSeries){var a=t.globals.seriesYAxisMap[e],s=new $(this.ctx);return a.every(function(r){return s.isSeriesNull(r)})}return!1}},{key:"getYAxisForeColor",value:function(e,t){var i=this.w;return Array.isArray(e)&&i.globals.yAxisScale[t]&&this.ctx.theme.pushExtraColors(e,i.globals.yAxisScale[t].result.length,!1),e}},{key:"drawYAxisTicks",value:function(e,t,i,a,s,r,n){var o=this.w,h=new X(this.ctx),c=o.globals.translateY+o.config.yaxis[s].labels.offsetY;if(o.globals.isBarHorizontal?c=0:o.config.chart.type==="heatmap"&&(c+=r/2),a.show&&t>0){o.config.yaxis[s].opposite===!0&&(e+=a.width);for(var d=t;d>=0;d--){var g=h.drawLine(e+i.offsetX-a.width+a.offsetX,c+a.offsetY,e+i.offsetX+a.offsetX,c+a.offsetY,a.color);n.add(g),c+=r}}}}]),p}(),Ei=function(){function p(e){F(this,p),this.w=e.w,this.annoCtx=e,this.helpers=new Be(this.annoCtx),this.axesUtils=new ge(this.annoCtx)}return R(p,[{key:"addYaxisAnnotation",value:function(e,t,i){var a,s=this.w,r=e.strokeDashArray,n=this.helpers.getY1Y2("y1",e),o=n.yP,h=n.clipped,c=!0,d=!1,g=e.label.text;if(e.y2===null||e.y2===void 0){if(!h){d=!0;var f=this.annoCtx.graphics.drawLine(0+e.offsetX,o+e.offsetY,this._getYAxisAnnotationWidth(e),o+e.offsetY,e.borderColor,r,e.borderWidth);t.appendChild(f.node),e.id&&f.node.classList.add(e.id)}}else{if(a=(n=this.helpers.getY1Y2("y2",e)).yP,c=n.clipped,a>o){var x=o;o=a,a=x}if(!h||!c){d=!0;var b=this.annoCtx.graphics.drawRect(0+e.offsetX,a+e.offsetY,this._getYAxisAnnotationWidth(e),o-a,0,e.fillColor,e.opacity,1,e.borderColor,r);b.node.classList.add("apexcharts-annotation-rect"),b.attr("clip-path","url(#gridRectMask".concat(s.globals.cuid,")")),t.appendChild(b.node),e.id&&b.node.classList.add(e.id)}}if(d){var v=e.label.position==="right"?s.globals.gridWidth:e.label.position==="center"?s.globals.gridWidth/2:0,y=this.annoCtx.graphics.drawText({x:v+e.label.offsetX,y:(a??o)+e.label.offsetY-3,text:g,textAnchor:e.label.textAnchor,fontSize:e.label.style.fontSize,fontFamily:e.label.style.fontFamily,fontWeight:e.label.style.fontWeight,foreColor:e.label.style.color,cssClass:"apexcharts-yaxis-annotation-label ".concat(e.label.style.cssClass," ").concat(e.id?e.id:"")});y.attr({rel:i}),t.appendChild(y.node)}}},{key:"_getYAxisAnnotationWidth",value:function(e){var t=this.w;return t.globals.gridWidth,(e.width.indexOf("%")>-1?t.globals.gridWidth*parseInt(e.width,10)/100:parseInt(e.width,10))+e.offsetX}},{key:"drawYAxisAnnotations",value:function(){var e=this,t=this.w,i=this.annoCtx.graphics.group({class:"apexcharts-yaxis-annotations"});return t.config.annotations.yaxis.forEach(function(a,s){a.yAxisIndex=e.axesUtils.translateYAxisIndex(a.yAxisIndex),e.axesUtils.isYAxisHidden(a.yAxisIndex)&&e.axesUtils.yAxisAllSeriesCollapsed(a.yAxisIndex)||e.addYaxisAnnotation(a,i.node,s)}),i}}]),p}(),Yi=function(){function p(e){F(this,p),this.w=e.w,this.annoCtx=e,this.helpers=new Be(this.annoCtx)}return R(p,[{key:"addPointAnnotation",value:function(e,t,i){if(!(this.w.globals.collapsedSeriesIndices.indexOf(e.seriesIndex)>-1)){var a=this.helpers.getX1X2("x1",e),s=a.x,r=a.clipped,n=(a=this.helpers.getY1Y2("y1",e)).yP,o=a.clipped;if(P.isNumber(s)&&!o&&!r){var h={pSize:e.marker.size,pointStrokeWidth:e.marker.strokeWidth,pointFillColor:e.marker.fillColor,pointStrokeColor:e.marker.strokeColor,shape:e.marker.shape,pRadius:e.marker.radius,class:"apexcharts-point-annotation-marker ".concat(e.marker.cssClass," ").concat(e.id?e.id:"")},c=this.annoCtx.graphics.drawMarker(s+e.marker.offsetX,n+e.marker.offsetY,h);t.appendChild(c.node);var d=e.label.text?e.label.text:"",g=this.annoCtx.graphics.drawText({x:s+e.label.offsetX,y:n+e.label.offsetY-e.marker.size-parseFloat(e.label.style.fontSize)/1.6,text:d,textAnchor:e.label.textAnchor,fontSize:e.label.style.fontSize,fontFamily:e.label.style.fontFamily,fontWeight:e.label.style.fontWeight,foreColor:e.label.style.color,cssClass:"apexcharts-point-annotation-label ".concat(e.label.style.cssClass," ").concat(e.id?e.id:"")});if(g.attr({rel:i}),t.appendChild(g.node),e.customSVG.SVG){var f=this.annoCtx.graphics.group({class:"apexcharts-point-annotations-custom-svg "+e.customSVG.cssClass});f.attr({transform:"translate(".concat(s+e.customSVG.offsetX,", ").concat(n+e.customSVG.offsetY,")")}),f.node.innerHTML=e.customSVG.SVG,t.appendChild(f.node)}if(e.image.path){var x=e.image.width?e.image.width:20,b=e.image.height?e.image.height:20;c=this.annoCtx.addImage({x:s+e.image.offsetX-x/2,y:n+e.image.offsetY-b/2,width:x,height:b,path:e.image.path,appendTo:".apexcharts-point-annotations"})}e.mouseEnter&&c.node.addEventListener("mouseenter",e.mouseEnter.bind(this,e)),e.mouseLeave&&c.node.addEventListener("mouseleave",e.mouseLeave.bind(this,e)),e.click&&c.node.addEventListener("click",e.click.bind(this,e))}}}},{key:"drawPointAnnotations",value:function(){var e=this,t=this.w,i=this.annoCtx.graphics.group({class:"apexcharts-point-annotations"});return t.config.annotations.points.map(function(a,s){e.addPointAnnotation(a,i.node,s)}),i}}]),p}(),Xt={name:"en",options:{months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],toolbar:{exportToSVG:"Download SVG",exportToPNG:"Download PNG",exportToCSV:"Download CSV",menu:"Menu",selection:"Selection",selectionZoom:"Selection Zoom",zoomIn:"Zoom In",zoomOut:"Zoom Out",pan:"Panning",reset:"Reset Zoom"}}},ue=function(){function p(){F(this,p),this.yAxis={show:!0,showAlways:!1,showForNullSeries:!0,seriesName:void 0,opposite:!1,reversed:!1,logarithmic:!1,logBase:10,tickAmount:void 0,stepSize:void 0,forceNiceScale:!1,max:void 0,min:void 0,floating:!1,decimalsInFloat:void 0,labels:{show:!0,minWidth:0,maxWidth:160,offsetX:0,offsetY:0,align:void 0,rotate:0,padding:20,style:{colors:[],fontSize:"11px",fontWeight:400,fontFamily:void 0,cssClass:""},formatter:void 0},axisBorder:{show:!1,color:"#e0e0e0",width:1,offsetX:0,offsetY:0},axisTicks:{show:!1,color:"#e0e0e0",width:6,offsetX:0,offsetY:0},title:{text:void 0,rotate:-90,offsetY:0,offsetX:0,style:{color:void 0,fontSize:"11px",fontWeight:900,fontFamily:void 0,cssClass:""}},tooltip:{enabled:!1,offsetX:0},crosshairs:{show:!0,position:"front",stroke:{color:"#b6b6b6",width:1,dashArray:0}}},this.pointAnnotation={id:void 0,x:0,y:null,yAxisIndex:0,seriesIndex:void 0,mouseEnter:void 0,mouseLeave:void 0,click:void 0,marker:{size:4,fillColor:"#fff",strokeWidth:2,strokeColor:"#333",shape:"circle",offsetX:0,offsetY:0,cssClass:""},label:{borderColor:"#c2c2c2",borderWidth:1,borderRadius:2,text:void 0,textAnchor:"middle",offsetX:0,offsetY:0,mouseEnter:void 0,mouseLeave:void 0,click:void 0,style:{background:"#fff",color:void 0,fontSize:"11px",fontFamily:void 0,fontWeight:400,cssClass:"",padding:{left:5,right:5,top:2,bottom:2}}},customSVG:{SVG:void 0,cssClass:void 0,offsetX:0,offsetY:0},image:{path:void 0,width:20,height:20,offsetX:0,offsetY:0}},this.yAxisAnnotation={id:void 0,y:0,y2:null,strokeDashArray:1,fillColor:"#c2c2c2",borderColor:"#c2c2c2",borderWidth:1,opacity:.3,offsetX:0,offsetY:0,width:"100%",yAxisIndex:0,label:{borderColor:"#c2c2c2",borderWidth:1,borderRadius:2,text:void 0,textAnchor:"end",position:"right",offsetX:0,offsetY:-3,mouseEnter:void 0,mouseLeave:void 0,click:void 0,style:{background:"#fff",color:void 0,fontSize:"11px",fontFamily:void 0,fontWeight:400,cssClass:"",padding:{left:5,right:5,top:2,bottom:2}}}},this.xAxisAnnotation={id:void 0,x:0,x2:null,strokeDashArray:1,fillColor:"#c2c2c2",borderColor:"#c2c2c2",borderWidth:1,opacity:.3,offsetX:0,offsetY:0,label:{borderColor:"#c2c2c2",borderWidth:1,borderRadius:2,text:void 0,textAnchor:"middle",orientation:"vertical",position:"top",offsetX:0,offsetY:0,mouseEnter:void 0,mouseLeave:void 0,click:void 0,style:{background:"#fff",color:void 0,fontSize:"11px",fontFamily:void 0,fontWeight:400,cssClass:"",padding:{left:5,right:5,top:2,bottom:2}}}},this.text={x:0,y:0,text:"",textAnchor:"start",foreColor:void 0,fontSize:"13px",fontFamily:void 0,fontWeight:400,appendTo:".apexcharts-annotations",backgroundColor:"transparent",borderColor:"#c2c2c2",borderRadius:0,borderWidth:0,paddingLeft:4,paddingRight:4,paddingTop:2,paddingBottom:2}}return R(p,[{key:"init",value:function(){return{annotations:{yaxis:[this.yAxisAnnotation],xaxis:[this.xAxisAnnotation],points:[this.pointAnnotation],texts:[],images:[],shapes:[]},chart:{animations:{enabled:!0,easing:"easeinout",speed:800,animateGradually:{delay:150,enabled:!0},dynamicAnimation:{enabled:!0,speed:350}},background:"",locales:[Xt],defaultLocale:"en",dropShadow:{enabled:!1,enabledOnSeries:void 0,top:2,left:2,blur:4,color:"#000",opacity:.35},events:{animationEnd:void 0,beforeMount:void 0,mounted:void 0,updated:void 0,click:void 0,mouseMove:void 0,mouseLeave:void 0,xAxisLabelClick:void 0,legendClick:void 0,markerClick:void 0,selection:void 0,dataPointSelection:void 0,dataPointMouseEnter:void 0,dataPointMouseLeave:void 0,beforeZoom:void 0,beforeResetZoom:void 0,zoomed:void 0,scrolled:void 0,brushScrolled:void 0},foreColor:"#373d3f",fontFamily:"Helvetica, Arial, sans-serif",height:"auto",parentHeightOffset:15,redrawOnParentResize:!0,redrawOnWindowResize:!0,id:void 0,group:void 0,nonce:void 0,offsetX:0,offsetY:0,selection:{enabled:!1,type:"x",fill:{color:"#24292e",opacity:.1},stroke:{width:1,color:"#24292e",opacity:.4,dashArray:3},xaxis:{min:void 0,max:void 0},yaxis:{min:void 0,max:void 0}},sparkline:{enabled:!1},brush:{enabled:!1,autoScaleYaxis:!0,target:void 0,targets:void 0},stacked:!1,stackOnlyBar:!0,stackType:"normal",toolbar:{show:!0,offsetX:0,offsetY:0,tools:{download:!0,selection:!0,zoom:!0,zoomin:!0,zoomout:!0,pan:!0,reset:!0,customIcons:[]},export:{csv:{filename:void 0,columnDelimiter:",",headerCategory:"category",headerValue:"value",categoryFormatter:void 0,valueFormatter:void 0},png:{filename:void 0},svg:{filename:void 0},scale:void 0,width:void 0},autoSelected:"zoom"},type:"line",width:"100%",zoom:{enabled:!0,type:"x",autoScaleYaxis:!1,allowMouseWheelZoom:!0,zoomedArea:{fill:{color:"#90CAF9",opacity:.4},stroke:{color:"#0D47A1",opacity:.4,width:1}}}},plotOptions:{line:{isSlopeChart:!1},area:{fillTo:"origin"},bar:{horizontal:!1,columnWidth:"70%",barHeight:"70%",distributed:!1,borderRadius:0,borderRadiusApplication:"around",borderRadiusWhenStacked:"last",rangeBarOverlap:!0,rangeBarGroupRows:!1,hideZeroBarsWhenGrouped:!1,isDumbbell:!1,dumbbellColors:void 0,isFunnel:!1,isFunnel3d:!0,colors:{ranges:[],backgroundBarColors:[],backgroundBarOpacity:1,backgroundBarRadius:0},dataLabels:{position:"top",maxItems:100,hideOverflowingLabels:!0,orientation:"horizontal",total:{enabled:!1,formatter:void 0,offsetX:0,offsetY:0,style:{color:"#373d3f",fontSize:"12px",fontFamily:void 0,fontWeight:600}}}},bubble:{zScaling:!0,minBubbleRadius:void 0,maxBubbleRadius:void 0},candlestick:{colors:{upward:"#00B746",downward:"#EF403C"},wick:{useFillColor:!0}},boxPlot:{colors:{upper:"#00E396",lower:"#008FFB"}},heatmap:{radius:2,enableShades:!0,shadeIntensity:.5,reverseNegativeShade:!1,distributed:!1,useFillColorAsStroke:!1,colorScale:{inverse:!1,ranges:[],min:void 0,max:void 0}},treemap:{enableShades:!0,shadeIntensity:.5,distributed:!1,reverseNegativeShade:!1,useFillColorAsStroke:!1,borderRadius:4,dataLabels:{format:"scale"},colorScale:{inverse:!1,ranges:[],min:void 0,max:void 0}},radialBar:{inverseOrder:!1,startAngle:0,endAngle:360,offsetX:0,offsetY:0,hollow:{margin:5,size:"50%",background:"transparent",image:void 0,imageWidth:150,imageHeight:150,imageOffsetX:0,imageOffsetY:0,imageClipped:!0,position:"front",dropShadow:{enabled:!1,top:0,left:0,blur:3,color:"#000",opacity:.5}},track:{show:!0,startAngle:void 0,endAngle:void 0,background:"#f2f2f2",strokeWidth:"97%",opacity:1,margin:5,dropShadow:{enabled:!1,top:0,left:0,blur:3,color:"#000",opacity:.5}},dataLabels:{show:!0,name:{show:!0,fontSize:"16px",fontFamily:void 0,fontWeight:600,color:void 0,offsetY:0,formatter:function(e){return e}},value:{show:!0,fontSize:"14px",fontFamily:void 0,fontWeight:400,color:void 0,offsetY:16,formatter:function(e){return e+"%"}},total:{show:!1,label:"Total",fontSize:"16px",fontWeight:600,fontFamily:void 0,color:void 0,formatter:function(e){return e.globals.seriesTotals.reduce(function(t,i){return t+i},0)/e.globals.series.length+"%"}}},barLabels:{enabled:!1,offsetX:0,offsetY:0,useSeriesColors:!0,fontFamily:void 0,fontWeight:600,fontSize:"16px",formatter:function(e){return e},onClick:void 0}},pie:{customScale:1,offsetX:0,offsetY:0,startAngle:0,endAngle:360,expandOnClick:!0,dataLabels:{offset:0,minAngleToShowLabel:10},donut:{size:"65%",background:"transparent",labels:{show:!1,name:{show:!0,fontSize:"16px",fontFamily:void 0,fontWeight:600,color:void 0,offsetY:-10,formatter:function(e){return e}},value:{show:!0,fontSize:"20px",fontFamily:void 0,fontWeight:400,color:void 0,offsetY:10,formatter:function(e){return e}},total:{show:!1,showAlways:!1,label:"Total",fontSize:"16px",fontWeight:400,fontFamily:void 0,color:void 0,formatter:function(e){return e.globals.seriesTotals.reduce(function(t,i){return t+i},0)}}}}},polarArea:{rings:{strokeWidth:1,strokeColor:"#e8e8e8"},spokes:{strokeWidth:1,connectorColors:"#e8e8e8"}},radar:{size:void 0,offsetX:0,offsetY:0,polygons:{strokeWidth:1,strokeColors:"#e8e8e8",connectorColors:"#e8e8e8",fill:{colors:void 0}}}},colors:void 0,dataLabels:{enabled:!0,enabledOnSeries:void 0,formatter:function(e){return e!==null?e:""},textAnchor:"middle",distributed:!1,offsetX:0,offsetY:0,style:{fontSize:"12px",fontFamily:void 0,fontWeight:600,colors:void 0},background:{enabled:!0,foreColor:"#fff",borderRadius:2,padding:4,opacity:.9,borderWidth:1,borderColor:"#fff",dropShadow:{enabled:!1,top:1,left:1,blur:1,color:"#000",opacity:.45}},dropShadow:{enabled:!1,top:1,left:1,blur:1,color:"#000",opacity:.45}},fill:{type:"solid",colors:void 0,opacity:.85,gradient:{shade:"dark",type:"horizontal",shadeIntensity:.5,gradientToColors:void 0,inverseColors:!0,opacityFrom:1,opacityTo:1,stops:[0,50,100],colorStops:[]},image:{src:[],width:void 0,height:void 0},pattern:{style:"squares",width:6,height:6,strokeWidth:2}},forecastDataPoints:{count:0,fillOpacity:.5,strokeWidth:void 0,dashArray:4},grid:{show:!0,borderColor:"#e0e0e0",strokeDashArray:0,position:"back",xaxis:{lines:{show:!1}},yaxis:{lines:{show:!0}},row:{colors:void 0,opacity:.5},column:{colors:void 0,opacity:.5},padding:{top:0,right:10,bottom:0,left:12}},labels:[],legend:{show:!0,showForSingleSeries:!1,showForNullSeries:!0,showForZeroSeries:!0,floating:!1,position:"bottom",horizontalAlign:"center",inverseOrder:!1,fontSize:"12px",fontFamily:void 0,fontWeight:400,width:void 0,height:void 0,formatter:void 0,tooltipHoverFormatter:void 0,offsetX:-20,offsetY:4,customLegendItems:[],labels:{colors:void 0,useSeriesColors:!1},markers:{size:7,fillColors:void 0,strokeWidth:1,shape:void 0,offsetX:0,offsetY:0,customHTML:void 0,onClick:void 0},itemMargin:{horizontal:5,vertical:4},onItemClick:{toggleDataSeries:!0},onItemHover:{highlightDataSeries:!0}},markers:{discrete:[],size:0,colors:void 0,strokeColors:"#fff",strokeWidth:2,strokeOpacity:.9,strokeDashArray:0,fillOpacity:1,shape:"circle",offsetX:0,offsetY:0,showNullDataPoints:!0,onClick:void 0,onDblClick:void 0,hover:{size:void 0,sizeOffset:3}},noData:{text:void 0,align:"center",verticalAlign:"middle",offsetX:0,offsetY:0,style:{color:void 0,fontSize:"14px",fontFamily:void 0}},responsive:[],series:void 0,states:{normal:{filter:{type:"none",value:0}},hover:{filter:{type:"lighten",value:.1}},active:{allowMultipleDataPointsSelection:!1,filter:{type:"darken",value:.5}}},title:{text:void 0,align:"left",margin:5,offsetX:0,offsetY:0,floating:!1,style:{fontSize:"14px",fontWeight:900,fontFamily:void 0,color:void 0}},subtitle:{text:void 0,align:"left",margin:5,offsetX:0,offsetY:30,floating:!1,style:{fontSize:"12px",fontWeight:400,fontFamily:void 0,color:void 0}},stroke:{show:!0,curve:"smooth",lineCap:"butt",width:2,colors:void 0,dashArray:0,fill:{type:"solid",colors:void 0,opacity:.85,gradient:{shade:"dark",type:"horizontal",shadeIntensity:.5,gradientToColors:void 0,inverseColors:!0,opacityFrom:1,opacityTo:1,stops:[0,50,100],colorStops:[]}}},tooltip:{enabled:!0,enabledOnSeries:void 0,shared:!0,hideEmptySeries:!1,followCursor:!1,intersect:!1,inverseOrder:!1,custom:void 0,fillSeriesColor:!1,theme:"light",cssClass:"",style:{fontSize:"12px",fontFamily:void 0},onDatasetHover:{highlightDataSeries:!1},x:{show:!0,format:"dd MMM",formatter:void 0},y:{formatter:void 0,title:{formatter:function(e){return e?e+": ":""}}},z:{formatter:void 0,title:"Size: "},marker:{show:!0,fillColors:void 0},items:{display:"flex"},fixed:{enabled:!1,position:"topRight",offsetX:0,offsetY:0}},xaxis:{type:"category",categories:[],convertedCatToNumeric:!1,offsetX:0,offsetY:0,overwriteCategories:void 0,labels:{show:!0,rotate:-45,rotateAlways:!1,hideOverlappingLabels:!0,trim:!1,minHeight:void 0,maxHeight:120,showDuplicates:!0,style:{colors:[],fontSize:"12px",fontWeight:400,fontFamily:void 0,cssClass:""},offsetX:0,offsetY:0,format:void 0,formatter:void 0,datetimeUTC:!0,datetimeFormatter:{year:"yyyy",month:"MMM 'yy",day:"dd MMM",hour:"HH:mm",minute:"HH:mm:ss",second:"HH:mm:ss"}},group:{groups:[],style:{colors:[],fontSize:"12px",fontWeight:400,fontFamily:void 0,cssClass:""}},axisBorder:{show:!0,color:"#e0e0e0",width:"100%",height:1,offsetX:0,offsetY:0},axisTicks:{show:!0,color:"#e0e0e0",height:6,offsetX:0,offsetY:0},stepSize:void 0,tickAmount:void 0,tickPlacement:"on",min:void 0,max:void 0,range:void 0,floating:!1,decimalsInFloat:void 0,position:"bottom",title:{text:void 0,offsetX:0,offsetY:0,style:{color:void 0,fontSize:"12px",fontWeight:900,fontFamily:void 0,cssClass:""}},crosshairs:{show:!0,width:1,position:"back",opacity:.9,stroke:{color:"#b6b6b6",width:1,dashArray:3},fill:{type:"solid",color:"#B1B9C4",gradient:{colorFrom:"#D8E3F0",colorTo:"#BED1E6",stops:[0,100],opacityFrom:.4,opacityTo:.5}},dropShadow:{enabled:!1,left:0,top:0,blur:1,opacity:.4}},tooltip:{enabled:!0,offsetY:0,formatter:void 0,style:{fontSize:"12px",fontFamily:void 0}}},yaxis:this.yAxis,theme:{mode:"",palette:"palette1",monochrome:{enabled:!1,color:"#008FFB",shadeTo:"light",shadeIntensity:.65}}}}}]),p}(),Fi=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w,this.graphics=new X(this.ctx),this.w.globals.isBarHorizontal&&(this.invertAxis=!0),this.helpers=new Be(this),this.xAxisAnnotations=new Xi(this),this.yAxisAnnotations=new Ei(this),this.pointsAnnotations=new Yi(this),this.w.globals.isBarHorizontal&&this.w.config.yaxis[0].reversed&&(this.inversedReversedAxis=!0),this.xDivision=this.w.globals.gridWidth/this.w.globals.dataPoints}return R(p,[{key:"drawAxesAnnotations",value:function(){var e=this.w;if(e.globals.axisCharts){for(var t=this.yAxisAnnotations.drawYAxisAnnotations(),i=this.xAxisAnnotations.drawXAxisAnnotations(),a=this.pointsAnnotations.drawPointAnnotations(),s=e.config.chart.animations.enabled,r=[t,i,a],n=[i.node,t.node,a.node],o=0;o<3;o++)e.globals.dom.elGraphical.add(r[o]),!s||e.globals.resized||e.globals.dataChanged||e.config.chart.type!=="scatter"&&e.config.chart.type!=="bubble"&&e.globals.dataPoints>1&&n[o].classList.add("apexcharts-element-hidden"),e.globals.delayedElements.push({el:n[o],index:0});this.helpers.annotationsBackground()}}},{key:"drawImageAnnos",value:function(){var e=this;this.w.config.annotations.images.map(function(t,i){e.addImage(t,i)})}},{key:"drawTextAnnos",value:function(){var e=this;this.w.config.annotations.texts.map(function(t,i){e.addText(t,i)})}},{key:"addXaxisAnnotation",value:function(e,t,i){this.xAxisAnnotations.addXaxisAnnotation(e,t,i)}},{key:"addYaxisAnnotation",value:function(e,t,i){this.yAxisAnnotations.addYaxisAnnotation(e,t,i)}},{key:"addPointAnnotation",value:function(e,t,i){this.pointsAnnotations.addPointAnnotation(e,t,i)}},{key:"addText",value:function(e,t){var i=e.x,a=e.y,s=e.text,r=e.textAnchor,n=e.foreColor,o=e.fontSize,h=e.fontFamily,c=e.fontWeight,d=e.cssClass,g=e.backgroundColor,f=e.borderWidth,x=e.strokeDashArray,b=e.borderRadius,v=e.borderColor,y=e.appendTo,w=y===void 0?".apexcharts-svg":y,l=e.paddingLeft,u=l===void 0?4:l,m=e.paddingRight,A=m===void 0?4:m,k=e.paddingBottom,S=k===void 0?2:k,L=e.paddingTop,C=L===void 0?2:L,I=this.w,z=this.graphics.drawText({x:i,y:a,text:s,textAnchor:r||"start",fontSize:o||"12px",fontWeight:c||"regular",fontFamily:h||I.config.chart.fontFamily,foreColor:n||I.config.chart.foreColor,cssClass:d}),M=I.globals.dom.baseEl.querySelector(w);M&&M.appendChild(z.node);var T=z.bbox();if(s){var E=this.graphics.drawRect(T.x-u,T.y-C,T.width+u+A,T.height+S+C,b,g||"transparent",1,f,v,x);M.insertBefore(E.node,z.node)}}},{key:"addImage",value:function(e,t){var i=this.w,a=e.path,s=e.x,r=s===void 0?0:s,n=e.y,o=n===void 0?0:n,h=e.width,c=h===void 0?20:h,d=e.height,g=d===void 0?20:d,f=e.appendTo,x=f===void 0?".apexcharts-svg":f,b=i.globals.dom.Paper.image(a);b.size(c,g).move(r,o);var v=i.globals.dom.baseEl.querySelector(x);return v&&v.appendChild(b.node),b}},{key:"addXaxisAnnotationExternal",value:function(e,t,i){return this.addAnnotationExternal({params:e,pushToMemory:t,context:i,type:"xaxis",contextMethod:i.addXaxisAnnotation}),i}},{key:"addYaxisAnnotationExternal",value:function(e,t,i){return this.addAnnotationExternal({params:e,pushToMemory:t,context:i,type:"yaxis",contextMethod:i.addYaxisAnnotation}),i}},{key:"addPointAnnotationExternal",value:function(e,t,i){return this.invertAxis===void 0&&(this.invertAxis=i.w.globals.isBarHorizontal),this.addAnnotationExternal({params:e,pushToMemory:t,context:i,type:"point",contextMethod:i.addPointAnnotation}),i}},{key:"addAnnotationExternal",value:function(e){var t=e.params,i=e.pushToMemory,a=e.context,s=e.type,r=e.contextMethod,n=a,o=n.w,h=o.globals.dom.baseEl.querySelector(".apexcharts-".concat(s,"-annotations")),c=h.childNodes.length+1,d=new ue,g=Object.assign({},s==="xaxis"?d.xAxisAnnotation:s==="yaxis"?d.yAxisAnnotation:d.pointAnnotation),f=P.extend(g,t);switch(s){case"xaxis":this.addXaxisAnnotation(f,h,c);break;case"yaxis":this.addYaxisAnnotation(f,h,c);break;case"point":this.addPointAnnotation(f,h,c)}var x=o.globals.dom.baseEl.querySelector(".apexcharts-".concat(s,"-annotations .apexcharts-").concat(s,"-annotation-label[rel='").concat(c,"']")),b=this.helpers.addBackgroundToAnno(x,f);return b&&h.insertBefore(b.node,x),i&&o.globals.memory.methodsToExec.push({context:n,id:f.id?f.id:P.randomId(),method:r,label:"addAnnotation",params:t}),a}},{key:"clearAnnotations",value:function(e){for(var t=e.w,i=t.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxis-annotations, .apexcharts-xaxis-annotations, .apexcharts-point-annotations"),a=t.globals.memory.methodsToExec.length-1;a>=0;a--)t.globals.memory.methodsToExec[a].label!=="addText"&&t.globals.memory.methodsToExec[a].label!=="addAnnotation"||t.globals.memory.methodsToExec.splice(a,1);i=P.listToArray(i),Array.prototype.forEach.call(i,function(s){for(;s.firstChild;)s.removeChild(s.firstChild)})}},{key:"removeAnnotation",value:function(e,t){var i=e.w,a=i.globals.dom.baseEl.querySelectorAll(".".concat(t));a&&(i.globals.memory.methodsToExec.map(function(s,r){s.id===t&&i.globals.memory.methodsToExec.splice(r,1)}),Array.prototype.forEach.call(a,function(s){s.parentElement.removeChild(s)}))}}]),p}(),Je=function(p){var e,t=p.isTimeline,i=p.ctx,a=p.seriesIndex,s=p.dataPointIndex,r=p.y1,n=p.y2,o=p.w,h=o.globals.seriesRangeStart[a][s],c=o.globals.seriesRangeEnd[a][s],d=o.globals.labels[s],g=o.config.series[a].name?o.config.series[a].name:"",f=o.globals.ttKeyFormatter,x=o.config.tooltip.y.title.formatter,b={w:o,seriesIndex:a,dataPointIndex:s,start:h,end:c};typeof x=="function"&&(g=x(g,b)),(e=o.config.series[a].data[s])!==null&&e!==void 0&&e.x&&(d=o.config.series[a].data[s].x),t||o.config.xaxis.type==="datetime"&&(d=new ze(i).xLabelFormat(o.globals.ttKeyFormatter,d,d,{i:void 0,dateFormatter:new K(i).formatDate,w:o})),typeof f=="function"&&(d=f(d,b)),Number.isFinite(r)&&Number.isFinite(n)&&(h=r,c=n);var v="",y="",w=o.globals.colors[a];if(o.config.tooltip.x.formatter===void 0)if(o.config.xaxis.type==="datetime"){var l=new K(i);v=l.formatDate(l.getDate(h),o.config.tooltip.x.format),y=l.formatDate(l.getDate(c),o.config.tooltip.x.format)}else v=h,y=c;else v=o.config.tooltip.x.formatter(h),y=o.config.tooltip.x.formatter(c);return{start:h,end:c,startVal:v,endVal:y,ylabel:d,color:w,seriesName:g}},Ke=function(p){var e=p.color,t=p.seriesName,i=p.ylabel,a=p.start,s=p.end,r=p.seriesIndex,n=p.dataPointIndex,o=p.ctx.tooltip.tooltipLabels.getFormatters(r);a=o.yLbFormatter(a),s=o.yLbFormatter(s);var h=o.yLbFormatter(p.w.globals.series[r][n]),c=` + `.concat(a,` + - + `).concat(s,` + `);return'
'+(t||"")+'
'+i+": "+(p.w.globals.comboCharts?p.w.config.series[r].type==="rangeArea"||p.w.config.series[r].type==="rangeBar"?c:"".concat(h,""):c)+"
"},Le=function(){function p(e){F(this,p),this.opts=e}return R(p,[{key:"hideYAxis",value:function(){this.opts.yaxis[0].show=!1,this.opts.yaxis[0].title.text="",this.opts.yaxis[0].axisBorder.show=!1,this.opts.yaxis[0].axisTicks.show=!1,this.opts.yaxis[0].floating=!0}},{key:"line",value:function(){return{chart:{animations:{easing:"swing"}},dataLabels:{enabled:!1},stroke:{width:5,curve:"straight"},markers:{size:0,hover:{sizeOffset:6}},xaxis:{crosshairs:{width:1}}}}},{key:"sparkline",value:function(e){return this.hideYAxis(),P.extend(e,{grid:{show:!1,padding:{left:0,right:0,top:0,bottom:0}},legend:{show:!1},xaxis:{labels:{show:!1},tooltip:{enabled:!1},axisBorder:{show:!1},axisTicks:{show:!1}},chart:{toolbar:{show:!1},zoom:{enabled:!1}},dataLabels:{enabled:!1}})}},{key:"slope",value:function(){return this.hideYAxis(),{chart:{toolbar:{show:!1},zoom:{enabled:!1}},dataLabels:{enabled:!0,formatter:function(e,t){var i=t.w.config.series[t.seriesIndex].name;return e!==null?i+": "+e:""},background:{enabled:!1},offsetX:-5},grid:{xaxis:{lines:{show:!0}},yaxis:{lines:{show:!1}}},xaxis:{position:"top",labels:{style:{fontSize:14,fontWeight:900}},tooltip:{enabled:!1},crosshairs:{show:!1}},markers:{size:8,hover:{sizeOffset:1}},legend:{show:!1},tooltip:{shared:!1,intersect:!0,followCursor:!0},stroke:{width:5,curve:"straight"}}}},{key:"bar",value:function(){return{chart:{stacked:!1,animations:{easing:"swing"}},plotOptions:{bar:{dataLabels:{position:"center"}}},dataLabels:{style:{colors:["#fff"]},background:{enabled:!1}},stroke:{width:0,lineCap:"round"},fill:{opacity:.85},legend:{markers:{shape:"square"}},tooltip:{shared:!1,intersect:!0},xaxis:{tooltip:{enabled:!1},tickPlacement:"between",crosshairs:{width:"barWidth",position:"back",fill:{type:"gradient"},dropShadow:{enabled:!1},stroke:{width:0}}}}}},{key:"funnel",value:function(){return this.hideYAxis(),Y(Y({},this.bar()),{},{chart:{animations:{easing:"linear",speed:800,animateGradually:{enabled:!1}}},plotOptions:{bar:{horizontal:!0,borderRadiusApplication:"around",borderRadius:0,dataLabels:{position:"center"}}},grid:{show:!1,padding:{left:0,right:0}},xaxis:{labels:{show:!1},tooltip:{enabled:!1},axisBorder:{show:!1},axisTicks:{show:!1}}})}},{key:"candlestick",value:function(){var e=this;return{stroke:{width:1,colors:["#333"]},fill:{opacity:1},dataLabels:{enabled:!1},tooltip:{shared:!0,custom:function(t){var i=t.seriesIndex,a=t.dataPointIndex,s=t.w;return e._getBoxTooltip(s,i,a,["Open","High","","Low","Close"],"candlestick")}},states:{active:{filter:{type:"none"}}},xaxis:{crosshairs:{width:1}}}}},{key:"boxPlot",value:function(){var e=this;return{chart:{animations:{dynamicAnimation:{enabled:!1}}},stroke:{width:1,colors:["#24292e"]},dataLabels:{enabled:!1},tooltip:{shared:!0,custom:function(t){var i=t.seriesIndex,a=t.dataPointIndex,s=t.w;return e._getBoxTooltip(s,i,a,["Minimum","Q1","Median","Q3","Maximum"],"boxPlot")}},markers:{size:7,strokeWidth:1,strokeColors:"#111"},xaxis:{crosshairs:{width:1}}}}},{key:"rangeBar",value:function(){return{chart:{animations:{animateGradually:!1}},stroke:{width:0,lineCap:"square"},plotOptions:{bar:{borderRadius:0,dataLabels:{position:"center"}}},dataLabels:{enabled:!1,formatter:function(e,t){t.ctx;var i=t.seriesIndex,a=t.dataPointIndex,s=t.w,r=function(){var n=s.globals.seriesRangeStart[i][a];return s.globals.seriesRangeEnd[i][a]-n};return s.globals.comboCharts?s.config.series[i].type==="rangeBar"||s.config.series[i].type==="rangeArea"?r():e:r()},background:{enabled:!1},style:{colors:["#fff"]}},markers:{size:10},tooltip:{shared:!1,followCursor:!0,custom:function(e){return e.w.config.plotOptions&&e.w.config.plotOptions.bar&&e.w.config.plotOptions.bar.horizontal?function(t){var i=Je(Y(Y({},t),{},{isTimeline:!0})),a=i.color,s=i.seriesName,r=i.ylabel,n=i.startVal,o=i.endVal;return Ke(Y(Y({},t),{},{color:a,seriesName:s,ylabel:r,start:n,end:o}))}(e):function(t){var i=Je(t),a=i.color,s=i.seriesName,r=i.ylabel,n=i.start,o=i.end;return Ke(Y(Y({},t),{},{color:a,seriesName:s,ylabel:r,start:n,end:o}))}(e)}},xaxis:{tickPlacement:"between",tooltip:{enabled:!1},crosshairs:{stroke:{width:0}}}}}},{key:"dumbbell",value:function(e){var t,i;return(t=e.plotOptions.bar)!==null&&t!==void 0&&t.barHeight||(e.plotOptions.bar.barHeight=2),(i=e.plotOptions.bar)!==null&&i!==void 0&&i.columnWidth||(e.plotOptions.bar.columnWidth=2),e}},{key:"area",value:function(){return{stroke:{width:4,fill:{type:"solid",gradient:{inverseColors:!1,shade:"light",type:"vertical",opacityFrom:.65,opacityTo:.5,stops:[0,100,100]}}},fill:{type:"gradient",gradient:{inverseColors:!1,shade:"light",type:"vertical",opacityFrom:.65,opacityTo:.5,stops:[0,100,100]}},markers:{size:0,hover:{sizeOffset:6}},tooltip:{followCursor:!1}}}},{key:"rangeArea",value:function(){return{stroke:{curve:"straight",width:0},fill:{type:"solid",opacity:.6},markers:{size:0},states:{hover:{filter:{type:"none"}},active:{filter:{type:"none"}}},tooltip:{intersect:!1,shared:!0,followCursor:!0,custom:function(e){return function(t){var i=Je(t),a=i.color,s=i.seriesName,r=i.ylabel,n=i.start,o=i.end;return Ke(Y(Y({},t),{},{color:a,seriesName:s,ylabel:r,start:n,end:o}))}(e)}}}}},{key:"brush",value:function(e){return P.extend(e,{chart:{toolbar:{autoSelected:"selection",show:!1},zoom:{enabled:!1}},dataLabels:{enabled:!1},stroke:{width:1},tooltip:{enabled:!1},xaxis:{tooltip:{enabled:!1}}})}},{key:"stacked100",value:function(e){e.dataLabels=e.dataLabels||{},e.dataLabels.formatter=e.dataLabels.formatter||void 0;var t=e.dataLabels.formatter;return e.yaxis.forEach(function(i,a){e.yaxis[a].min=0,e.yaxis[a].max=100}),e.chart.type==="bar"&&(e.dataLabels.formatter=t||function(i){return typeof i=="number"&&i?i.toFixed(0)+"%":i}),e}},{key:"stackedBars",value:function(){var e=this.bar();return Y(Y({},e),{},{plotOptions:Y(Y({},e.plotOptions),{},{bar:Y(Y({},e.plotOptions.bar),{},{borderRadiusApplication:"end",borderRadiusWhenStacked:"last"})})})}},{key:"convertCatToNumeric",value:function(e){return e.xaxis.convertedCatToNumeric=!0,e}},{key:"convertCatToNumericXaxis",value:function(e,t,i){e.xaxis.type="numeric",e.xaxis.labels=e.xaxis.labels||{},e.xaxis.labels.formatter=e.xaxis.labels.formatter||function(r){return P.isNumber(r)?Math.floor(r):r};var a=e.xaxis.labels.formatter,s=e.xaxis.categories&&e.xaxis.categories.length?e.xaxis.categories:e.labels;return i&&i.length&&(s=i.map(function(r){return Array.isArray(r)?r:String(r)})),s&&s.length&&(e.xaxis.labels.formatter=function(r){return P.isNumber(r)?a(s[Math.floor(r)-1]):a(r)}),e.xaxis.categories=[],e.labels=[],e.xaxis.tickAmount=e.xaxis.tickAmount||"dataPoints",e}},{key:"bubble",value:function(){return{dataLabels:{style:{colors:["#fff"]}},tooltip:{shared:!1,intersect:!0},xaxis:{crosshairs:{width:0}},fill:{type:"solid",gradient:{shade:"light",inverse:!0,shadeIntensity:.55,opacityFrom:.4,opacityTo:.8}}}}},{key:"scatter",value:function(){return{dataLabels:{enabled:!1},tooltip:{shared:!1,intersect:!0},markers:{size:6,strokeWidth:1,hover:{sizeOffset:2}}}}},{key:"heatmap",value:function(){return{chart:{stacked:!1},fill:{opacity:1},dataLabels:{style:{colors:["#fff"]}},stroke:{colors:["#fff"]},tooltip:{followCursor:!0,marker:{show:!1},x:{show:!1}},legend:{position:"top",markers:{shape:"square"}},grid:{padding:{right:20}}}}},{key:"treemap",value:function(){return{chart:{zoom:{enabled:!1}},dataLabels:{style:{fontSize:14,fontWeight:600,colors:["#fff"]}},stroke:{show:!0,width:2,colors:["#fff"]},legend:{show:!1},fill:{opacity:1,gradient:{stops:[0,100]}},tooltip:{followCursor:!0,x:{show:!1}},grid:{padding:{left:0,right:0}},xaxis:{crosshairs:{show:!1},tooltip:{enabled:!1}}}}},{key:"pie",value:function(){return{chart:{toolbar:{show:!1}},plotOptions:{pie:{donut:{labels:{show:!1}}}},dataLabels:{formatter:function(e){return e.toFixed(1)+"%"},style:{colors:["#fff"]},background:{enabled:!1},dropShadow:{enabled:!0}},stroke:{colors:["#fff"]},fill:{opacity:1,gradient:{shade:"light",stops:[0,100]}},tooltip:{theme:"dark",fillSeriesColor:!0},legend:{position:"right"}}}},{key:"donut",value:function(){return{chart:{toolbar:{show:!1}},dataLabels:{formatter:function(e){return e.toFixed(1)+"%"},style:{colors:["#fff"]},background:{enabled:!1},dropShadow:{enabled:!0}},stroke:{colors:["#fff"]},fill:{opacity:1,gradient:{shade:"light",shadeIntensity:.35,stops:[80,100],opacityFrom:1,opacityTo:1}},tooltip:{theme:"dark",fillSeriesColor:!0},legend:{position:"right"}}}},{key:"polarArea",value:function(){return{chart:{toolbar:{show:!1}},dataLabels:{formatter:function(e){return e.toFixed(1)+"%"},enabled:!1},stroke:{show:!0,width:2},fill:{opacity:.7},tooltip:{theme:"dark",fillSeriesColor:!0},legend:{position:"right"}}}},{key:"radar",value:function(){return this.opts.yaxis[0].labels.offsetY=this.opts.yaxis[0].labels.offsetY?this.opts.yaxis[0].labels.offsetY:6,{dataLabels:{enabled:!1,style:{fontSize:"11px"}},stroke:{width:2},markers:{size:5,strokeWidth:1,strokeOpacity:1},fill:{opacity:.2},tooltip:{shared:!1,intersect:!0,followCursor:!0},grid:{show:!1},xaxis:{labels:{formatter:function(e){return e},style:{colors:["#a8a8a8"],fontSize:"11px"}},tooltip:{enabled:!1},crosshairs:{show:!1}}}}},{key:"radialBar",value:function(){return{chart:{animations:{dynamicAnimation:{enabled:!0,speed:800}},toolbar:{show:!1}},fill:{gradient:{shade:"dark",shadeIntensity:.4,inverseColors:!1,type:"diagonal2",opacityFrom:1,opacityTo:1,stops:[70,98,100]}},legend:{show:!1,position:"right"},tooltip:{enabled:!1,fillSeriesColor:!0}}}},{key:"_getBoxTooltip",value:function(e,t,i,a,s){var r=e.globals.seriesCandleO[t][i],n=e.globals.seriesCandleH[t][i],o=e.globals.seriesCandleM[t][i],h=e.globals.seriesCandleL[t][i],c=e.globals.seriesCandleC[t][i];return e.config.series[t].type&&e.config.series[t].type!==s?`
+ `.concat(e.config.series[t].name?e.config.series[t].name:"series-"+(t+1),": ").concat(e.globals.series[t][i],` +
`):'
')+"
".concat(a[0],': ')+r+"
"+"
".concat(a[1],': ')+n+"
"+(o?"
".concat(a[2],': ')+o+"
":"")+"
".concat(a[3],': ')+h+"
"+"
".concat(a[4],': ')+c+"
"}}]),p}(),Pe=function(){function p(e){F(this,p),this.opts=e}return R(p,[{key:"init",value:function(e){var t=e.responsiveOverride,i=this.opts,a=new ue,s=new Le(i);this.chartType=i.chart.type,i=this.extendYAxis(i),i=this.extendAnnotations(i);var r=a.init(),n={};if(i&&J(i)==="object"){var o,h,c,d,g,f,x,b,v,y,w={};w=["line","area","bar","candlestick","boxPlot","rangeBar","rangeArea","bubble","scatter","heatmap","treemap","pie","polarArea","donut","radar","radialBar"].indexOf(i.chart.type)!==-1?s[i.chart.type]():s.line(),(o=i.plotOptions)!==null&&o!==void 0&&(h=o.bar)!==null&&h!==void 0&&h.isFunnel&&(w=s.funnel()),i.chart.stacked&&i.chart.type==="bar"&&(w=s.stackedBars()),(c=i.chart.brush)!==null&&c!==void 0&&c.enabled&&(w=s.brush(w)),(d=i.plotOptions)!==null&&d!==void 0&&(g=d.line)!==null&&g!==void 0&&g.isSlopeChart&&(w=s.slope()),i.chart.stacked&&i.chart.stackType==="100%"&&(i=s.stacked100(i)),(f=i.plotOptions)!==null&&f!==void 0&&(x=f.bar)!==null&&x!==void 0&&x.isDumbbell&&(i=s.dumbbell(i)),this.checkForDarkTheme(window.Apex),this.checkForDarkTheme(i),i.xaxis=i.xaxis||window.Apex.xaxis||{},t||(i.xaxis.convertedCatToNumeric=!1),((b=(i=this.checkForCatToNumericXAxis(this.chartType,w,i)).chart.sparkline)!==null&&b!==void 0&&b.enabled||(v=window.Apex.chart)!==null&&v!==void 0&&(y=v.sparkline)!==null&&y!==void 0&&y.enabled)&&(w=s.sparkline(w)),n=P.extend(r,w)}var l=P.extend(n,window.Apex);return r=P.extend(l,i),r=this.handleUserInputErrors(r)}},{key:"checkForCatToNumericXAxis",value:function(e,t,i){var a,s,r=new Le(i),n=(e==="bar"||e==="boxPlot")&&((a=i.plotOptions)===null||a===void 0||(s=a.bar)===null||s===void 0?void 0:s.horizontal),o=e==="pie"||e==="polarArea"||e==="donut"||e==="radar"||e==="radialBar"||e==="heatmap",h=i.xaxis.type!=="datetime"&&i.xaxis.type!=="numeric",c=i.xaxis.tickPlacement?i.xaxis.tickPlacement:t.xaxis&&t.xaxis.tickPlacement;return n||o||!h||c==="between"||(i=r.convertCatToNumeric(i)),i}},{key:"extendYAxis",value:function(e,t){var i=new ue;(e.yaxis===void 0||!e.yaxis||Array.isArray(e.yaxis)&&e.yaxis.length===0)&&(e.yaxis={}),e.yaxis.constructor!==Array&&window.Apex.yaxis&&window.Apex.yaxis.constructor!==Array&&(e.yaxis=P.extend(e.yaxis,window.Apex.yaxis)),e.yaxis.constructor!==Array?e.yaxis=[P.extend(i.yAxis,e.yaxis)]:e.yaxis=P.extendArray(e.yaxis,i.yAxis);var a=!1;e.yaxis.forEach(function(r){r.logarithmic&&(a=!0)});var s=e.series;return t&&!s&&(s=t.config.series),a&&s.length!==e.yaxis.length&&s.length&&(e.yaxis=s.map(function(r,n){if(r.name||(s[n].name="series-".concat(n+1)),e.yaxis[n])return e.yaxis[n].seriesName=s[n].name,e.yaxis[n];var o=P.extend(i.yAxis,e.yaxis[0]);return o.show=!1,o})),a&&s.length>1&&s.length!==e.yaxis.length&&console.warn("A multi-series logarithmic chart should have equal number of series and y-axes"),e}},{key:"extendAnnotations",value:function(e){return e.annotations===void 0&&(e.annotations={},e.annotations.yaxis=[],e.annotations.xaxis=[],e.annotations.points=[]),e=this.extendYAxisAnnotations(e),e=this.extendXAxisAnnotations(e),e=this.extendPointAnnotations(e)}},{key:"extendYAxisAnnotations",value:function(e){var t=new ue;return e.annotations.yaxis=P.extendArray(e.annotations.yaxis!==void 0?e.annotations.yaxis:[],t.yAxisAnnotation),e}},{key:"extendXAxisAnnotations",value:function(e){var t=new ue;return e.annotations.xaxis=P.extendArray(e.annotations.xaxis!==void 0?e.annotations.xaxis:[],t.xAxisAnnotation),e}},{key:"extendPointAnnotations",value:function(e){var t=new ue;return e.annotations.points=P.extendArray(e.annotations.points!==void 0?e.annotations.points:[],t.pointAnnotation),e}},{key:"checkForDarkTheme",value:function(e){e.theme&&e.theme.mode==="dark"&&(e.tooltip||(e.tooltip={}),e.tooltip.theme!=="light"&&(e.tooltip.theme="dark"),e.chart.foreColor||(e.chart.foreColor="#f6f7f8"),e.theme.palette||(e.theme.palette="palette4"))}},{key:"handleUserInputErrors",value:function(e){var t=e;if(t.tooltip.shared&&t.tooltip.intersect)throw new Error("tooltip.shared cannot be enabled when tooltip.intersect is true. Turn off any other option by setting it to false.");if(t.chart.type==="bar"&&t.plotOptions.bar.horizontal){if(t.yaxis.length>1)throw new Error("Multiple Y Axis for bars are not supported. Switch to column chart by setting plotOptions.bar.horizontal=false");t.yaxis[0].reversed&&(t.yaxis[0].opposite=!0),t.xaxis.tooltip.enabled=!1,t.yaxis[0].tooltip.enabled=!1,t.chart.zoom.enabled=!1}return t.chart.type!=="bar"&&t.chart.type!=="rangeBar"||t.tooltip.shared&&t.xaxis.crosshairs.width==="barWidth"&&t.series.length>1&&(t.xaxis.crosshairs.width="tickWidth"),t.chart.type!=="candlestick"&&t.chart.type!=="boxPlot"||t.yaxis[0].reversed&&(console.warn("Reversed y-axis in ".concat(t.chart.type," chart is not supported.")),t.yaxis[0].reversed=!1),t}}]),p}(),Et=function(){function p(){F(this,p)}return R(p,[{key:"initGlobalVars",value:function(e){e.series=[],e.seriesCandleO=[],e.seriesCandleH=[],e.seriesCandleM=[],e.seriesCandleL=[],e.seriesCandleC=[],e.seriesRangeStart=[],e.seriesRangeEnd=[],e.seriesRange=[],e.seriesPercent=[],e.seriesGoals=[],e.seriesX=[],e.seriesZ=[],e.seriesNames=[],e.seriesTotals=[],e.seriesLog=[],e.seriesColors=[],e.stackedSeriesTotals=[],e.seriesXvalues=[],e.seriesYvalues=[],e.labels=[],e.hasXaxisGroups=!1,e.groups=[],e.barGroups=[],e.lineGroups=[],e.areaGroups=[],e.hasSeriesGroups=!1,e.seriesGroups=[],e.categoryLabels=[],e.timescaleLabels=[],e.noLabelsProvided=!1,e.resizeTimer=null,e.selectionResizeTimer=null,e.lastWheelExecution=0,e.delayedElements=[],e.pointsArray=[],e.dataLabelsRects=[],e.isXNumeric=!1,e.skipLastTimelinelabel=!1,e.skipFirstTimelinelabel=!1,e.isDataXYZ=!1,e.isMultiLineX=!1,e.isMultipleYAxis=!1,e.maxY=-Number.MAX_VALUE,e.minY=Number.MIN_VALUE,e.minYArr=[],e.maxYArr=[],e.maxX=-Number.MAX_VALUE,e.minX=Number.MAX_VALUE,e.initialMaxX=-Number.MAX_VALUE,e.initialMinX=Number.MAX_VALUE,e.maxDate=0,e.minDate=Number.MAX_VALUE,e.minZ=Number.MAX_VALUE,e.maxZ=-Number.MAX_VALUE,e.minXDiff=Number.MAX_VALUE,e.yAxisScale=[],e.xAxisScale=null,e.xAxisTicksPositions=[],e.yLabelsCoords=[],e.yTitleCoords=[],e.barPadForNumericAxis=0,e.padHorizontal=0,e.xRange=0,e.yRange=[],e.zRange=0,e.dataPoints=0,e.xTickAmount=0,e.multiAxisTickAmount=0}},{key:"globalVars",value:function(e){return{chartID:null,cuid:null,events:{beforeMount:[],mounted:[],updated:[],clicked:[],selection:[],dataPointSelection:[],zoomed:[],scrolled:[]},colors:[],clientX:null,clientY:null,fill:{colors:[]},stroke:{colors:[]},dataLabels:{style:{colors:[]}},radarPolygons:{fill:{colors:[]}},markers:{colors:[],size:e.markers.size,largestSize:0},animationEnded:!1,isTouchDevice:"ontouchstart"in window||navigator.msMaxTouchPoints,isDirty:!1,isExecCalled:!1,initialConfig:null,initialSeries:[],lastXAxis:[],lastYAxis:[],columnSeries:null,labels:[],timescaleLabels:[],noLabelsProvided:!1,allSeriesCollapsed:!1,collapsedSeries:[],collapsedSeriesIndices:[],ancillaryCollapsedSeries:[],ancillaryCollapsedSeriesIndices:[],risingSeries:[],dataFormatXNumeric:!1,capturedSeriesIndex:-1,capturedDataPointIndex:-1,selectedDataPoints:[],goldenPadding:35,invalidLogScale:!1,ignoreYAxisIndexes:[],maxValsInArrayIndex:0,radialSize:0,selection:void 0,zoomEnabled:e.chart.toolbar.autoSelected==="zoom"&&e.chart.toolbar.tools.zoom&&e.chart.zoom.enabled,panEnabled:e.chart.toolbar.autoSelected==="pan"&&e.chart.toolbar.tools.pan,selectionEnabled:e.chart.toolbar.autoSelected==="selection"&&e.chart.toolbar.tools.selection,yaxis:null,mousedown:!1,lastClientPosition:{},visibleXRange:void 0,yValueDecimal:0,total:0,SVGNS:"http://www.w3.org/2000/svg",svgWidth:0,svgHeight:0,noData:!1,locale:{},dom:{},memory:{methodsToExec:[]},shouldAnimate:!0,skipLastTimelinelabel:!1,skipFirstTimelinelabel:!1,delayedElements:[],axisCharts:!0,isDataXYZ:!1,isSlopeChart:e.plotOptions.line.isSlopeChart,resized:!1,resizeTimer:null,comboCharts:!1,dataChanged:!1,previousPaths:[],allSeriesHasEqualX:!0,pointsArray:[],dataLabelsRects:[],lastDrawnDataLabelsIndexes:[],hasNullValues:!1,easing:null,zoomed:!1,gridWidth:0,gridHeight:0,rotateXLabels:!1,defaultLabels:!1,xLabelFormatter:void 0,yLabelFormatters:[],xaxisTooltipFormatter:void 0,ttKeyFormatter:void 0,ttVal:void 0,ttZFormatter:void 0,LINE_HEIGHT_RATIO:1.618,xAxisLabelsHeight:0,xAxisGroupLabelsHeight:0,xAxisLabelsWidth:0,yAxisLabelsWidth:0,scaleX:1,scaleY:1,translateX:0,translateY:0,translateYAxisX:[],yAxisWidths:[],translateXAxisY:0,translateXAxisX:0,tooltip:null,niceScaleAllowedMagMsd:[[1,1,2,5,5,5,10,10,10,10,10],[1,1,2,5,5,5,10,10,10,10,10]],niceScaleDefaultTicks:[1,2,4,4,6,6,6,6,6,6,6,6,6,6,6,6,6,6,12,12,12,12,12,12,12,12,12,24],seriesYAxisMap:[],seriesYAxisReverseMap:[]}}},{key:"init",value:function(e){var t=this.globalVars(e);return this.initGlobalVars(t),t.initialConfig=P.extend({},e),t.initialSeries=P.clone(e.series),t.lastXAxis=P.clone(t.initialConfig.xaxis),t.lastYAxis=P.clone(t.initialConfig.yaxis),t}}]),p}(),Ri=function(){function p(e){F(this,p),this.opts=e}return R(p,[{key:"init",value:function(){var e=new Pe(this.opts).init({responsiveOverride:!1});return{config:e,globals:new Et().init(e)}}}]),p}(),ne=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w,this.opts=null,this.seriesIndex=0,this.patternIDs=[]}return R(p,[{key:"clippedImgArea",value:function(e){var t=this.w,i=t.config,a=parseInt(t.globals.gridWidth,10),s=parseInt(t.globals.gridHeight,10),r=a>s?a:s,n=e.image,o=0,h=0;e.width===void 0&&e.height===void 0?i.fill.image.width!==void 0&&i.fill.image.height!==void 0?(o=i.fill.image.width+1,h=i.fill.image.height):(o=r+1,h=r):(o=e.width,h=e.height);var c=document.createElementNS(t.globals.SVGNS,"pattern");X.setAttrs(c,{id:e.patternID,patternUnits:e.patternUnits?e.patternUnits:"userSpaceOnUse",width:o+"px",height:h+"px"});var d=document.createElementNS(t.globals.SVGNS,"image");c.appendChild(d),d.setAttributeNS(window.SVG.xlink,"href",n),X.setAttrs(d,{x:0,y:0,preserveAspectRatio:"none",width:o+"px",height:h+"px"}),d.style.opacity=e.opacity,t.globals.dom.elDefs.node.appendChild(c)}},{key:"getSeriesIndex",value:function(e){var t=this.w,i=t.config.chart.type;return(i==="bar"||i==="rangeBar")&&t.config.plotOptions.bar.distributed||i==="heatmap"||i==="treemap"?this.seriesIndex=e.seriesNumber:this.seriesIndex=e.seriesNumber%t.globals.series.length,this.seriesIndex}},{key:"fillPath",value:function(e){var t=this.w;this.opts=e;var i,a,s,r=this.w.config;this.seriesIndex=this.getSeriesIndex(e);var n=this.getFillColors()[this.seriesIndex];t.globals.seriesColors[this.seriesIndex]!==void 0&&(n=t.globals.seriesColors[this.seriesIndex]),typeof n=="function"&&(n=n({seriesIndex:this.seriesIndex,dataPointIndex:e.dataPointIndex,value:e.value,w:t}));var o=e.fillType?e.fillType:this.getFillType(this.seriesIndex),h=Array.isArray(r.fill.opacity)?r.fill.opacity[this.seriesIndex]:r.fill.opacity;e.color&&(n=e.color),n||(n="#fff",console.warn("undefined color - ApexCharts"));var c=n;if(n.indexOf("rgb")===-1?n.length<9&&(c=P.hexToRgba(n,h)):n.indexOf("rgba")>-1&&(h=P.getOpacityFromRGBA(n)),e.opacity&&(h=e.opacity),o==="pattern"&&(a=this.handlePatternFill({fillConfig:e.fillConfig,patternFill:a,fillColor:n,fillOpacity:h,defaultColor:c})),o==="gradient"&&(s=this.handleGradientFill({fillConfig:e.fillConfig,fillColor:n,fillOpacity:h,i:this.seriesIndex})),o==="image"){var d=r.fill.image.src,g=e.patternID?e.patternID:"",f="pattern".concat(t.globals.cuid).concat(e.seriesNumber+1).concat(g);this.patternIDs.indexOf(f)===-1&&(this.clippedImgArea({opacity:h,image:Array.isArray(d)?e.seriesNumber-1&&(f=P.getOpacityFromRGBA(g));var x=r.gradient.opacityTo===void 0?i:Array.isArray(r.gradient.opacityTo)?r.gradient.opacityTo[s]:r.gradient.opacityTo;if(r.gradient.gradientToColors===void 0||r.gradient.gradientToColors.length===0)n=r.gradient.shade==="dark"?c.shadeColor(-1*parseFloat(r.gradient.shadeIntensity),t.indexOf("rgb")>-1?P.rgb2hex(t):t):c.shadeColor(parseFloat(r.gradient.shadeIntensity),t.indexOf("rgb")>-1?P.rgb2hex(t):t);else if(r.gradient.gradientToColors[o.seriesNumber]){var b=r.gradient.gradientToColors[o.seriesNumber];n=b,b.indexOf("rgba")>-1&&(x=P.getOpacityFromRGBA(b))}else n=t;if(r.gradient.gradientFrom&&(g=r.gradient.gradientFrom),r.gradient.gradientTo&&(n=r.gradient.gradientTo),r.gradient.inverseColors){var v=g;g=n,n=v}return g.indexOf("rgb")>-1&&(g=P.rgb2hex(g)),n.indexOf("rgb")>-1&&(n=P.rgb2hex(n)),h.drawGradient(d,g,n,f,x,o.size,r.gradient.stops,r.gradient.colorStops,s)}}]),p}(),ye=function(){function p(e,t){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"setGlobalMarkerSize",value:function(){var e=this.w;if(e.globals.markers.size=Array.isArray(e.config.markers.size)?e.config.markers.size:[e.config.markers.size],e.globals.markers.size.length>0){if(e.globals.markers.size.length4&&arguments[4]!==void 0&&arguments[4],n=this.w,o=t,h=e,c=null,d=new X(this.ctx),g=n.config.markers.discrete&&n.config.markers.discrete.length;if((n.globals.markers.size[t]>0||r||g)&&(c=d.group({class:r||g?"":"apexcharts-series-markers"})).attr("clip-path","url(#gridRectMarkerMask".concat(n.globals.cuid,")")),Array.isArray(h.x))for(var f=0;f0:n.config.markers.size>0)||r||g){P.isNumber(h.y[f])?b+=" w".concat(P.randomId()):b="apexcharts-nullpoint";var v=this.getMarkerConfig({cssClass:b,seriesIndex:t,dataPointIndex:x});n.config.series[o].data[x]&&(n.config.series[o].data[x].fillColor&&(v.pointFillColor=n.config.series[o].data[x].fillColor),n.config.series[o].data[x].strokeColor&&(v.pointStrokeColor=n.config.series[o].data[x].strokeColor)),a!==void 0&&(v.pSize=a),(h.x[f]<-n.globals.markers.largestSize||h.x[f]>n.globals.gridWidth+n.globals.markers.largestSize||h.y[f]<-n.globals.markers.largestSize||h.y[f]>n.globals.gridHeight+n.globals.markers.largestSize)&&(v.pSize=0),(s=d.drawMarker(h.x[f],h.y[f],v)).attr("rel",x),s.attr("j",x),s.attr("index",t),s.node.setAttribute("default-marker-size",v.pSize),new ie(this.ctx).setSelectionFilter(s,t,x),this.addEvents(s),c&&c.add(s)}else n.globals.pointsArray[t]===void 0&&(n.globals.pointsArray[t]=[]),n.globals.pointsArray[t].push([h.x[f],h.y[f]])}return c}},{key:"getMarkerConfig",value:function(e){var t=e.cssClass,i=e.seriesIndex,a=e.dataPointIndex,s=a===void 0?null:a,r=e.radius,n=r===void 0?null:r,o=e.size,h=o===void 0?null:o,c=e.strokeWidth,d=c===void 0?null:c,g=this.w,f=this.getMarkerStyle(i),x=h===null?g.globals.markers.size[i]:h,b=g.config.markers;return s!==null&&b.discrete.length&&b.discrete.map(function(v){v.seriesIndex===i&&v.dataPointIndex===s&&(f.pointStrokeColor=v.strokeColor,f.pointFillColor=v.fillColor,x=v.size,f.pointShape=v.shape)}),{pSize:n===null?x:n,pRadius:n!==null?n:b.radius,pointStrokeWidth:d!==null?d:Array.isArray(b.strokeWidth)?b.strokeWidth[i]:b.strokeWidth,pointStrokeColor:f.pointStrokeColor,pointFillColor:f.pointFillColor,shape:f.pointShape||(Array.isArray(b.shape)?b.shape[i]:b.shape),class:t,pointStrokeOpacity:Array.isArray(b.strokeOpacity)?b.strokeOpacity[i]:b.strokeOpacity,pointStrokeDashArray:Array.isArray(b.strokeDashArray)?b.strokeDashArray[i]:b.strokeDashArray,pointFillOpacity:Array.isArray(b.fillOpacity)?b.fillOpacity[i]:b.fillOpacity,seriesIndex:i}}},{key:"addEvents",value:function(e){var t=this.w,i=new X(this.ctx);e.node.addEventListener("mouseenter",i.pathMouseEnter.bind(this.ctx,e)),e.node.addEventListener("mouseleave",i.pathMouseLeave.bind(this.ctx,e)),e.node.addEventListener("mousedown",i.pathMouseDown.bind(this.ctx,e)),e.node.addEventListener("click",t.config.markers.onClick),e.node.addEventListener("dblclick",t.config.markers.onDblClick),e.node.addEventListener("touchstart",i.pathMouseDown.bind(this.ctx,e),{passive:!0})}},{key:"getMarkerStyle",value:function(e){var t=this.w,i=t.globals.markers.colors,a=t.config.markers.strokeColor||t.config.markers.strokeColors;return{pointStrokeColor:Array.isArray(a)?a[e]:a,pointFillColor:Array.isArray(i)?i[e]:i}}}]),p}(),Yt=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w,this.initialAnim=this.w.config.chart.animations.enabled}return R(p,[{key:"draw",value:function(e,t,i){var a=this.w,s=new X(this.ctx),r=i.realIndex,n=i.pointsPos,o=i.zRatio,h=i.elParent,c=s.group({class:"apexcharts-series-markers apexcharts-series-".concat(a.config.chart.type)});if(c.attr("clip-path","url(#gridRectMarkerMask".concat(a.globals.cuid,")")),Array.isArray(n.x))for(var d=0;db.maxBubbleRadius&&(x=b.maxBubbleRadius)}var v=n.x[d],y=n.y[d];if(x=x||0,y!==null&&a.globals.series[r][g]!==void 0||(f=!1),f){var w=this.drawPoint(v,y,x,r,g,t);c.add(w)}h.add(c)}}},{key:"drawPoint",value:function(e,t,i,a,s,r){var n=this.w,o=a,h=new ve(this.ctx),c=new ie(this.ctx),d=new ne(this.ctx),g=new ye(this.ctx),f=new X(this.ctx),x=g.getMarkerConfig({cssClass:"apexcharts-marker",seriesIndex:o,dataPointIndex:s,radius:n.config.chart.type==="bubble"||n.globals.comboCharts&&n.config.series[a]&&n.config.series[a].type==="bubble"?i:null}),b=d.fillPath({seriesNumber:a,dataPointIndex:s,color:x.pointFillColor,patternUnits:"objectBoundingBox",value:n.globals.series[a][r]}),v=f.drawMarker(e,t,x);if(n.config.series[o].data[s]&&n.config.series[o].data[s].fillColor&&(b=n.config.series[o].data[s].fillColor),v.attr({fill:b}),n.config.chart.dropShadow.enabled){var y=n.config.chart.dropShadow;c.dropShadow(v,y,a)}if(!this.initialAnim||n.globals.dataChanged||n.globals.resized)n.globals.animationEnded=!0;else{var w=n.config.chart.animations.speed;h.animateMarker(v,w,n.globals.easing,function(){window.setTimeout(function(){h.animationCompleted(v)},100)})}return v.attr({rel:s,j:s,index:a,"default-marker-size":x.pSize}),c.setSelectionFilter(v,a,s),g.addEvents(v),v.node.classList.add("apexcharts-marker"),v}},{key:"centerTextInBubble",value:function(e){var t=this.w;return{y:e+=parseInt(t.config.dataLabels.style.fontSize,10)/4}}}]),p}(),be=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"dataLabelsCorrection",value:function(e,t,i,a,s,r,n){var o=this.w,h=!1,c=new X(this.ctx).getTextRects(i,n),d=c.width,g=c.height;t<0&&(t=0),t>o.globals.gridHeight+g&&(t=o.globals.gridHeight+g/2),o.globals.dataLabelsRects[a]===void 0&&(o.globals.dataLabelsRects[a]=[]),o.globals.dataLabelsRects[a].push({x:e,y:t,width:d,height:g});var f=o.globals.dataLabelsRects[a].length-2,x=o.globals.lastDrawnDataLabelsIndexes[a]!==void 0?o.globals.lastDrawnDataLabelsIndexes[a][o.globals.lastDrawnDataLabelsIndexes[a].length-1]:0;if(o.globals.dataLabelsRects[a][f]!==void 0){var b=o.globals.dataLabelsRects[a][x];(e>b.x+b.width||t>b.y+b.height||t+gt.globals.gridWidth+w.textRects.width+30)&&(o="");var l=t.globals.dataLabels.style.colors[r];((t.config.chart.type==="bar"||t.config.chart.type==="rangeBar")&&t.config.plotOptions.bar.distributed||t.config.dataLabels.distributed)&&(l=t.globals.dataLabels.style.colors[n]),typeof l=="function"&&(l=l({series:t.globals.series,seriesIndex:r,dataPointIndex:n,w:t})),f&&(l=f);var u=g.offsetX,m=g.offsetY;if(t.config.chart.type!=="bar"&&t.config.chart.type!=="rangeBar"||(u=0,m=0),t.globals.isSlopeChart&&(n!==0&&(u=-2*g.offsetX+5),n!==0&&n!==t.config.series[r].data.length-1&&(u=0)),w.drawnextLabel){if((y=i.drawText({width:100,height:parseInt(g.style.fontSize,10),x:a+u,y:s+m,foreColor:l,textAnchor:h||g.textAnchor,text:o,fontSize:c||g.style.fontSize,fontFamily:g.style.fontFamily,fontWeight:g.style.fontWeight||"normal"})).attr({class:v||"apexcharts-datalabel",cx:a,cy:s}),g.dropShadow.enabled){var A=g.dropShadow;new ie(this.ctx).dropShadow(y,A)}d.add(y),t.globals.lastDrawnDataLabelsIndexes[r]===void 0&&(t.globals.lastDrawnDataLabelsIndexes[r]=[]),t.globals.lastDrawnDataLabelsIndexes[r].push(n)}return y}},{key:"addBackgroundToDataLabel",value:function(e,t){var i=this.w,a=i.config.dataLabels.background,s=a.padding,r=a.padding/2,n=t.width,o=t.height,h=new X(this.ctx).drawRect(t.x-s,t.y-r/2,n+2*s,o+r,a.borderRadius,i.config.chart.background!=="transparent"&&i.config.chart.background?i.config.chart.background:"#fff",a.opacity,a.borderWidth,a.borderColor);return a.dropShadow.enabled&&new ie(this.ctx).dropShadow(h,a.dropShadow),h}},{key:"dataLabelsBackground",value:function(){var e=this.w;if(e.config.chart.type!=="bubble")for(var t=e.globals.dom.baseEl.querySelectorAll(".apexcharts-datalabels text"),i=0;i0&&arguments[0]!==void 0)||arguments[0],t=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],i=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2],a=this.w,s=P.clone(a.globals.initialSeries);a.globals.previousPaths=[],i?(a.globals.collapsedSeries=[],a.globals.ancillaryCollapsedSeries=[],a.globals.collapsedSeriesIndices=[],a.globals.ancillaryCollapsedSeriesIndices=[]):s=this.emptyCollapsedSeries(s),a.config.series=s,e&&(t&&(a.globals.zoomed=!1,this.ctx.updateHelpers.revertDefaultAxisMinMax()),this.ctx.updateHelpers._updateSeries(s,a.config.chart.animations.dynamicAnimation.enabled))}},{key:"emptyCollapsedSeries",value:function(e){for(var t=this.w,i=0;i-1&&(e[i].data=[]);return e}},{key:"highlightSeries",value:function(e){var t=this.w,i=this.getSeriesByName(e),a=parseInt(i.getAttribute("data:realIndex"),10),s=t.globals.dom.baseEl.querySelectorAll(".apexcharts-series, .apexcharts-datalabels, .apexcharts-yaxis"),r=null,n=null,o=null;if(t.globals.axisCharts||t.config.chart.type==="radialBar")if(t.globals.axisCharts){r=t.globals.dom.baseEl.querySelector(".apexcharts-series[data\\:realIndex='".concat(a,"']")),n=t.globals.dom.baseEl.querySelector(".apexcharts-datalabels[data\\:realIndex='".concat(a,"']"));var h=t.globals.seriesYAxisReverseMap[a];o=t.globals.dom.baseEl.querySelector(".apexcharts-yaxis[rel='".concat(h,"']"))}else r=t.globals.dom.baseEl.querySelector(".apexcharts-series[rel='".concat(a+1,"']"));else r=t.globals.dom.baseEl.querySelector(".apexcharts-series[rel='".concat(a+1,"'] path"));for(var c=0;c=h.from&&(g0&&arguments[0]!==void 0?arguments[0]:"asc",t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[],i=this.w,a=0;if(i.config.series.length>1){for(var s=i.config.series.map(function(n,o){return n.data&&n.data.length>0&&i.globals.collapsedSeriesIndices.indexOf(o)===-1&&(!i.globals.comboCharts||t.length===0||t.length&&t.indexOf(i.config.series[o].type)>-1)?o:-1}),r=e==="asc"?0:s.length-1;e==="asc"?r=0;e==="asc"?r++:r--)if(s[r]!==-1){a=s[r];break}}return a}},{key:"getBarSeriesIndices",value:function(){return this.w.globals.comboCharts?this.w.config.series.map(function(e,t){return e.type==="bar"||e.type==="column"?t:-1}).filter(function(e){return e!==-1}):this.w.config.series.map(function(e,t){return t})}},{key:"getPreviousPaths",value:function(){var e=this.w;function t(r,n,o){for(var h=r[n].childNodes,c={type:o,paths:[],realIndex:r[n].getAttribute("data:realIndex")},d=0;d0)for(var a=function(r){for(var n=e.globals.dom.baseEl.querySelectorAll(".apexcharts-".concat(e.config.chart.type," .apexcharts-series[data\\:realIndex='").concat(r,"'] rect")),o=[],h=function(d){var g=function(x){return n[d].getAttribute(x)},f={x:parseFloat(g("x")),y:parseFloat(g("y")),width:parseFloat(g("width")),height:parseFloat(g("height"))};o.push({rect:f,color:n[d].getAttribute("color")})},c=0;c0)for(var a=0;a0?t:[]});return e}}]),p}(),Ft=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w,this.twoDSeries=[],this.threeDSeries=[],this.twoDSeriesX=[],this.seriesGoals=[],this.coreUtils=new $(this.ctx)}return R(p,[{key:"isMultiFormat",value:function(){return this.isFormatXY()||this.isFormat2DArray()}},{key:"isFormatXY",value:function(){var e=this.w.config.series.slice(),t=new re(this.ctx);if(this.activeSeriesIndex=t.getActiveConfigSeriesIndex(),e[this.activeSeriesIndex].data!==void 0&&e[this.activeSeriesIndex].data.length>0&&e[this.activeSeriesIndex].data[0]!==null&&e[this.activeSeriesIndex].data[0].x!==void 0&&e[this.activeSeriesIndex].data[0]!==null)return!0}},{key:"isFormat2DArray",value:function(){var e=this.w.config.series.slice(),t=new re(this.ctx);if(this.activeSeriesIndex=t.getActiveConfigSeriesIndex(),e[this.activeSeriesIndex].data!==void 0&&e[this.activeSeriesIndex].data.length>0&&e[this.activeSeriesIndex].data[0]!==void 0&&e[this.activeSeriesIndex].data[0]!==null&&e[this.activeSeriesIndex].data[0].constructor===Array)return!0}},{key:"handleFormat2DArray",value:function(e,t){for(var i=this.w.config,a=this.w.globals,s=i.chart.type==="boxPlot"||i.series[t].type==="boxPlot",r=0;r=5?this.twoDSeries.push(P.parseNumber(e[t].data[r][4])):this.twoDSeries.push(P.parseNumber(e[t].data[r][1])),a.dataFormatXNumeric=!0),i.xaxis.type==="datetime"){var n=new Date(e[t].data[r][0]);n=new Date(n).getTime(),this.twoDSeriesX.push(n)}else this.twoDSeriesX.push(e[t].data[r][0]);for(var o=0;o-1&&(r=this.activeSeriesIndex);for(var n=0;n1&&arguments[1]!==void 0?arguments[1]:this.ctx,a=this.w.config,s=this.w.globals,r=new K(i),n=a.labels.length>0?a.labels.slice():a.xaxis.categories.slice();s.isRangeBar=a.chart.type==="rangeBar"&&s.isBarHorizontal,s.hasXaxisGroups=a.xaxis.type==="category"&&a.xaxis.group.groups.length>0,s.hasXaxisGroups&&(s.groups=a.xaxis.group.groups),e.forEach(function(f,x){f.name!==void 0?s.seriesNames.push(f.name):s.seriesNames.push("series-"+parseInt(x+1,10))}),this.coreUtils.setSeriesYAxisMappings();var o=[],h=te(new Set(a.series.map(function(f){return f.group})));a.series.forEach(function(f,x){var b=h.indexOf(f.group);o[b]||(o[b]=[]),o[b].push(s.seriesNames[x])}),s.seriesGroups=o;for(var c=function(){for(var f=0;f0&&(this.twoDSeriesX=n,s.seriesX.push(this.twoDSeriesX))),s.labels.push(this.twoDSeriesX);var g=e[d].data.map(function(f){return P.parseNumber(f)});s.series.push(g)}s.seriesZ.push(this.threeDSeries),e[d].color!==void 0?s.seriesColors.push(e[d].color):s.seriesColors.push(void 0)}return this.w}},{key:"parseDataNonAxisCharts",value:function(e){var t=this.w.globals,i=this.w.config;t.series=e.slice(),t.seriesNames=i.labels.slice();for(var a=0;a0?i.labels=t.xaxis.categories:t.labels.length>0?i.labels=t.labels.slice():this.fallbackToCategory?(i.labels=i.labels[0],i.seriesRange.length&&(i.seriesRange.map(function(a){a.forEach(function(s){i.labels.indexOf(s.x)<0&&s.x&&i.labels.push(s.x)})}),i.labels=Array.from(new Set(i.labels.map(JSON.stringify)),JSON.parse)),t.xaxis.convertedCatToNumeric&&(new Le(t).convertCatToNumericXaxis(t,this.ctx,i.seriesX[0]),this._generateExternalLabels(e))):this._generateExternalLabels(e)}},{key:"_generateExternalLabels",value:function(e){var t=this.w.globals,i=this.w.config,a=[];if(t.axisCharts){if(t.series.length>0)if(this.isFormatXY())for(var s=i.series.map(function(d,g){return d.data.filter(function(f,x,b){return b.findIndex(function(v){return v.x===f.x})===x})}),r=s.reduce(function(d,g,f,x){return x[d].length>g.length?d:f},0),n=0;n0&&s==i.length&&t.push(a)}),e.globals.ignoreYAxisIndexes=t.map(function(i){return i})}}]),p}(),He=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"scaleSvgNode",value:function(e,t){var i=parseFloat(e.getAttributeNS(null,"width")),a=parseFloat(e.getAttributeNS(null,"height"));e.setAttributeNS(null,"width",i*t),e.setAttributeNS(null,"height",a*t),e.setAttributeNS(null,"viewBox","0 0 "+i+" "+a)}},{key:"getSvgString",value:function(){var e=this;return new Promise(function(t){var i=e.w,a=i.config.chart.toolbar.export.width,s=i.config.chart.toolbar.export.scale||a/i.globals.svgWidth;s||(s=1);var r=e.w.globals.dom.Paper.svg(),n=e.w.globals.dom.Paper.node.cloneNode(!0);s!==1&&e.scaleSvgNode(n,s),e.convertImagesToBase64(n).then(function(){r=new XMLSerializer().serializeToString(n),t(r.replace(/ /g," "))})})}},{key:"convertImagesToBase64",value:function(e){var t=this,i=e.getElementsByTagName("image"),a=Array.from(i).map(function(s){var r=s.getAttributeNS("http://www.w3.org/1999/xlink","href");return r&&!r.startsWith("data:")?t.getBase64FromUrl(r).then(function(n){s.setAttributeNS("http://www.w3.org/1999/xlink","href",n)}).catch(function(n){console.error("Error converting image to base64:",n)}):Promise.resolve()});return Promise.all(a)}},{key:"getBase64FromUrl",value:function(e){return new Promise(function(t,i){var a=new Image;a.crossOrigin="Anonymous",a.onload=function(){var s=document.createElement("canvas");s.width=a.width,s.height=a.height,s.getContext("2d").drawImage(a,0,0),t(s.toDataURL())},a.onerror=i,a.src=e})}},{key:"cleanup",value:function(){var e=this.w,t=e.globals.dom.baseEl.getElementsByClassName("apexcharts-xcrosshairs"),i=e.globals.dom.baseEl.getElementsByClassName("apexcharts-ycrosshairs"),a=e.globals.dom.baseEl.querySelectorAll(".apexcharts-zoom-rect, .apexcharts-selection-rect");Array.prototype.forEach.call(a,function(s){s.setAttribute("width",0)}),t&&t[0]&&(t[0].setAttribute("x",-500),t[0].setAttribute("x1",-500),t[0].setAttribute("x2",-500)),i&&i[0]&&(i[0].setAttribute("y",-100),i[0].setAttribute("y1",-100),i[0].setAttribute("y2",-100))}},{key:"svgUrl",value:function(){var e=this;return new Promise(function(t){e.cleanup(),e.getSvgString().then(function(i){var a=new Blob([i],{type:"image/svg+xml;charset=utf-8"});t(URL.createObjectURL(a))})})}},{key:"dataURI",value:function(e){var t=this;return new Promise(function(i){var a=t.w,s=e?e.scale||e.width/a.globals.svgWidth:1;t.cleanup();var r=document.createElement("canvas");r.width=a.globals.svgWidth*s,r.height=parseInt(a.globals.dom.elWrap.style.height,10)*s;var n=a.config.chart.background!=="transparent"&&a.config.chart.background?a.config.chart.background:"#fff",o=r.getContext("2d");o.fillStyle=n,o.fillRect(0,0,r.width*s,r.height*s),t.getSvgString().then(function(h){var c="data:image/svg+xml,"+encodeURIComponent(h),d=new Image;d.crossOrigin="anonymous",d.onload=function(){if(o.drawImage(d,0,0),r.msToBlob){var g=r.msToBlob();i({blob:g})}else{var f=r.toDataURL("image/png");i({imgURI:f})}},d.src=c})})}},{key:"exportToSVG",value:function(){var e=this;this.svgUrl().then(function(t){e.triggerDownload(t,e.w.config.chart.toolbar.export.svg.filename,".svg")})}},{key:"exportToPng",value:function(){var e=this,t=this.w.config.chart.toolbar.export.scale,i=this.w.config.chart.toolbar.export.width,a=t?{scale:t}:i?{width:i}:void 0;this.dataURI(a).then(function(s){var r=s.imgURI,n=s.blob;n?navigator.msSaveOrOpenBlob(n,e.w.globals.chartID+".png"):e.triggerDownload(r,e.w.config.chart.toolbar.export.png.filename,".png")})}},{key:"exportToCSV",value:function(e){var t=this,i=e.series,a=e.fileName,s=e.columnDelimiter,r=s===void 0?",":s,n=e.lineDelimiter,o=n===void 0?` +`:n,h=this.w;i||(i=h.config.series);var c,d,g=[],f=[],x="",b=h.globals.series.map(function(k,S){return h.globals.collapsedSeriesIndices.indexOf(S)===-1?k:[]}),v=function(k){return typeof h.config.chart.toolbar.export.csv.categoryFormatter=="function"?h.config.chart.toolbar.export.csv.categoryFormatter(k):h.config.xaxis.type==="datetime"&&String(k).length>=10?new Date(k).toDateString():P.isNumber(k)?k:k.split(r).join("")},y=function(k){return typeof h.config.chart.toolbar.export.csv.valueFormatter=="function"?h.config.chart.toolbar.export.csv.valueFormatter(k):k},w=Math.max.apply(Math,te(i.map(function(k){return k.data?k.data.length:0}))),l=new Ft(this.ctx),u=new ge(this.ctx),m=function(k){var S="";if(h.globals.axisCharts){if(h.config.xaxis.type==="category"||h.config.xaxis.convertedCatToNumeric)if(h.globals.isBarHorizontal){var L=h.globals.yLabelFormatters[0],C=new re(t.ctx).getActiveConfigSeriesIndex();S=L(h.globals.labels[k],{seriesIndex:C,dataPointIndex:k,w:h})}else S=u.getLabel(h.globals.labels,h.globals.timescaleLabels,0,k).text;h.config.xaxis.type==="datetime"&&(h.config.xaxis.categories.length?S=h.config.xaxis.categories[k]:h.config.labels.length&&(S=h.config.labels[k]))}else S=h.config.labels[k];return S===null?"nullvalue":(Array.isArray(S)&&(S=S.join(" ")),P.isNumber(S)?S:S.split(r).join(""))},A=function(k,S){if(g.length&&S===0&&f.push(g.join(r)),k.data){k.data=k.data.length&&k.data||te(Array(w)).map(function(){return""});for(var L=0;L0&&!i.globals.isBarHorizontal&&(this.xaxisLabels=i.globals.timescaleLabels.slice()),i.config.xaxis.overwriteCategories&&(this.xaxisLabels=i.config.xaxis.overwriteCategories),this.drawnLabels=[],this.drawnLabelsRects=[],i.config.xaxis.position==="top"?this.offY=0:this.offY=i.globals.gridHeight,this.offY=this.offY+i.config.xaxis.axisBorder.offsetY,this.isCategoryBarHorizontal=i.config.chart.type==="bar"&&i.config.plotOptions.bar.horizontal,this.xaxisFontSize=i.config.xaxis.labels.style.fontSize,this.xaxisFontFamily=i.config.xaxis.labels.style.fontFamily,this.xaxisForeColors=i.config.xaxis.labels.style.colors,this.xaxisBorderWidth=i.config.xaxis.axisBorder.width,this.isCategoryBarHorizontal&&(this.xaxisBorderWidth=i.config.yaxis[0].axisBorder.width.toString()),this.xaxisBorderWidth.indexOf("%")>-1?this.xaxisBorderWidth=i.globals.gridWidth*parseInt(this.xaxisBorderWidth,10)/100:this.xaxisBorderWidth=parseInt(this.xaxisBorderWidth,10),this.xaxisBorderHeight=i.config.xaxis.axisBorder.height,this.yaxis=i.config.yaxis[0]}return R(p,[{key:"drawXaxis",value:function(){var e=this.w,t=new X(this.ctx),i=t.group({class:"apexcharts-xaxis",transform:"translate(".concat(e.config.xaxis.offsetX,", ").concat(e.config.xaxis.offsetY,")")}),a=t.group({class:"apexcharts-xaxis-texts-g",transform:"translate(".concat(e.globals.translateXAxisX,", ").concat(e.globals.translateXAxisY,")")});i.add(a);for(var s=[],r=0;r6&&arguments[6]!==void 0?arguments[6]:{},c=[],d=[],g=this.w,f=h.xaxisFontSize||this.xaxisFontSize,x=h.xaxisFontFamily||this.xaxisFontFamily,b=h.xaxisForeColors||this.xaxisForeColors,v=h.fontWeight||g.config.xaxis.labels.style.fontWeight,y=h.cssClass||g.config.xaxis.labels.style.cssClass,w=g.globals.padHorizontal,l=a.length,u=g.config.xaxis.type==="category"?g.globals.dataPoints:l;if(u===0&&l>u&&(u=l),s){var m=u>1?u-1:u;n=g.globals.gridWidth/Math.min(m,l-1),w=w+r(0,n)/2+g.config.xaxis.labels.offsetX}else n=g.globals.gridWidth/u,w=w+r(0,n)+g.config.xaxis.labels.offsetX;for(var A=function(S){var L=w-r(S,n)/2+g.config.xaxis.labels.offsetX;S===0&&l===1&&n/2===w&&u===1&&(L=g.globals.gridWidth/2);var C=o.axesUtils.getLabel(a,g.globals.timescaleLabels,L,S,c,f,e),I=28;if(g.globals.rotateXLabels&&e&&(I=22),g.config.xaxis.title.text&&g.config.xaxis.position==="top"&&(I+=parseFloat(g.config.xaxis.title.style.fontSize)+2),e||(I=I+parseFloat(f)+(g.globals.xAxisLabelsHeight-g.globals.xAxisGroupLabelsHeight)+(g.globals.rotateXLabels?10:0)),C=g.config.xaxis.tickAmount!==void 0&&g.config.xaxis.tickAmount!=="dataPoints"&&g.config.xaxis.type!=="datetime"?o.axesUtils.checkLabelBasedOnTickamount(S,C,l):o.axesUtils.checkForOverflowingLabels(S,C,l,c,d),g.config.xaxis.labels.show){var z=t.drawText({x:C.x,y:o.offY+g.config.xaxis.labels.offsetY+I-(g.config.xaxis.position==="top"?g.globals.xAxisHeight+g.config.xaxis.axisTicks.height-2:0),text:C.text,textAnchor:"middle",fontWeight:C.isBold?600:v,fontSize:f,fontFamily:x,foreColor:Array.isArray(b)?e&&g.config.xaxis.convertedCatToNumeric?b[g.globals.minX+S-1]:b[S]:b,isPlainText:!1,cssClass:(e?"apexcharts-xaxis-label ":"apexcharts-xaxis-group-label ")+y});if(i.add(z),z.on("click",function(T){if(typeof g.config.chart.events.xAxisLabelClick=="function"){var E=Object.assign({},g,{labelIndex:S});g.config.chart.events.xAxisLabelClick(T,o.ctx,E)}}),e){var M=document.createElementNS(g.globals.SVGNS,"title");M.textContent=Array.isArray(C.text)?C.text.join(" "):C.text,z.node.appendChild(M),C.text!==""&&(c.push(C.text),d.push(C))}}Sa.globals.gridWidth)){var r=this.offY+a.config.xaxis.axisTicks.offsetY;if(t=t+r+a.config.xaxis.axisTicks.height,a.config.xaxis.position==="top"&&(t=r-a.config.xaxis.axisTicks.height),a.config.xaxis.axisTicks.show){var n=new X(this.ctx).drawLine(e+a.config.xaxis.axisTicks.offsetX,r+a.config.xaxis.offsetY,s+a.config.xaxis.axisTicks.offsetX,t+a.config.xaxis.offsetY,a.config.xaxis.axisTicks.color);i.add(n),n.node.classList.add("apexcharts-xaxis-tick")}}}},{key:"getXAxisTicksPositions",value:function(){var e=this.w,t=[],i=this.xaxisLabels.length,a=e.globals.padHorizontal;if(e.globals.timescaleLabels.length>0)for(var s=0;s0){var c=s[s.length-1].getBBox(),d=s[0].getBBox();c.x<-20&&s[s.length-1].parentNode.removeChild(s[s.length-1]),d.x+d.width>e.globals.gridWidth&&!e.globals.isBarHorizontal&&s[0].parentNode.removeChild(s[0]);for(var g=0;g0&&(this.xaxisLabels=t.globals.timescaleLabels.slice())}return R(p,[{key:"drawGridArea",value:function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:null,t=this.w,i=new X(this.ctx);e===null&&(e=i.group({class:"apexcharts-grid"}));var a=i.drawLine(t.globals.padHorizontal,1,t.globals.padHorizontal,t.globals.gridHeight,"transparent"),s=i.drawLine(t.globals.padHorizontal,t.globals.gridHeight,t.globals.gridWidth,t.globals.gridHeight,"transparent");return e.add(s),e.add(a),e}},{key:"drawGrid",value:function(){var e=null;return this.w.globals.axisCharts&&(e=this.renderGrid(),this.drawGridArea(e.el)),e}},{key:"createGridMask",value:function(){var e=this.w,t=e.globals,i=new X(this.ctx),a=Array.isArray(e.config.stroke.width)?0:e.config.stroke.width;if(Array.isArray(e.config.stroke.width)){var s=0;e.config.stroke.width.forEach(function(d){s=Math.max(s,d)}),a=s}t.dom.elGridRectMask=document.createElementNS(t.SVGNS,"clipPath"),t.dom.elGridRectMask.setAttribute("id","gridRectMask".concat(t.cuid)),t.dom.elGridRectMarkerMask=document.createElementNS(t.SVGNS,"clipPath"),t.dom.elGridRectMarkerMask.setAttribute("id","gridRectMarkerMask".concat(t.cuid)),t.dom.elForecastMask=document.createElementNS(t.SVGNS,"clipPath"),t.dom.elForecastMask.setAttribute("id","forecastMask".concat(t.cuid)),t.dom.elNonForecastMask=document.createElementNS(t.SVGNS,"clipPath"),t.dom.elNonForecastMask.setAttribute("id","nonForecastMask".concat(t.cuid));var r=e.config.chart.type,n=0,o=0;(r==="bar"||r==="rangeBar"||r==="candlestick"||r==="boxPlot"||e.globals.comboBarCount>0)&&e.globals.isXNumeric&&!e.globals.isBarHorizontal&&(n=e.config.grid.padding.left,o=e.config.grid.padding.right,t.barPadForNumericAxis>n&&(n=t.barPadForNumericAxis,o=t.barPadForNumericAxis)),t.dom.elGridRect=i.drawRect(-a/2-n-2,-a/2-2,t.gridWidth+a+o+n+4,t.gridHeight+a+4,0,"#fff");var h=e.globals.markers.largestSize+1;t.dom.elGridRectMarker=i.drawRect(2*-h,2*-h,t.gridWidth+4*h,t.gridHeight+4*h,0,"#fff"),t.dom.elGridRectMask.appendChild(t.dom.elGridRect.node),t.dom.elGridRectMarkerMask.appendChild(t.dom.elGridRectMarker.node);var c=t.dom.baseEl.querySelector("defs");c.appendChild(t.dom.elGridRectMask),c.appendChild(t.dom.elForecastMask),c.appendChild(t.dom.elNonForecastMask),c.appendChild(t.dom.elGridRectMarkerMask)}},{key:"_drawGridLines",value:function(e){var t=e.i,i=e.x1,a=e.y1,s=e.x2,r=e.y2,n=e.xCount,o=e.parent,h=this.w;if(!(t===0&&h.globals.skipFirstTimelinelabel||t===n-1&&h.globals.skipLastTimelinelabel&&!h.config.xaxis.labels.formatter||h.config.chart.type==="radar")){h.config.grid.xaxis.lines.show&&this._drawGridLine({i:t,x1:i,y1:a,x2:s,y2:r,xCount:n,parent:o});var c=0;if(h.globals.hasXaxisGroups&&h.config.xaxis.tickPlacement==="between"){var d=h.globals.groups;if(d){for(var g=0,f=0;g0&&e.config.xaxis.type!=="datetime"&&(s=t.yAxisScale[a].result.length-1)),this._drawXYLines({xCount:s,tickAmount:r})}else s=r,r=t.xTickAmount,this._drawInvertedXYLines({xCount:s,tickAmount:r});return this.drawGridBands(s,r),{el:this.elg,elGridBorders:this.elGridBorders,xAxisTickWidth:t.gridWidth/s}}},{key:"drawGridBands",value:function(e,t){var i=this.w;if(i.config.grid.row.colors!==void 0&&i.config.grid.row.colors.length>0)for(var a=0,s=i.globals.gridHeight/t,r=i.globals.gridWidth,n=0,o=0;n=i.config.grid.row.colors.length&&(o=0),this._drawGridBandRect({c:o,x1:0,y1:a,x2:r,y2:s,type:"row"}),a+=i.globals.gridHeight/t;if(i.config.grid.column.colors!==void 0&&i.config.grid.column.colors.length>0){var h=i.globals.isBarHorizontal||i.config.xaxis.tickPlacement!=="on"||i.config.xaxis.type!=="category"&&!i.config.xaxis.convertedCatToNumeric?e:e-1;i.globals.isXNumeric&&(h=i.globals.xAxisScale.result.length-1);for(var c=i.globals.padHorizontal,d=i.globals.padHorizontal+i.globals.gridWidth/h,g=i.globals.gridHeight,f=0,x=0;f=i.config.grid.column.colors.length&&(x=0),i.config.xaxis.type==="datetime"&&(c=this.xaxisLabels[f].position,d=(((b=this.xaxisLabels[f+1])===null||b===void 0?void 0:b.position)||i.globals.gridWidth)-this.xaxisLabels[f].position),this._drawGridBandRect({c:x,x1:c,y1:0,x2:d,y2:g,type:"column"}),c+=i.globals.gridWidth/h}}}}]),p}(),Ot=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"niceScale",value:function(e,t){var i,a,s,r,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,o=1e-11,h=this.w,c=h.globals;c.isBarHorizontal?(i=h.config.xaxis,a=Math.max((c.svgWidth-100)/25,2)):(i=h.config.yaxis[n],a=Math.max((c.svgHeight-100)/15,2)),P.isNumber(a)||(a=10),s=i.min!==void 0&&i.min!==null,r=i.max!==void 0&&i.min!==null;var d=i.stepSize!==void 0&&i.stepSize!==null,g=i.tickAmount!==void 0&&i.tickAmount!==null,f=g?i.tickAmount:c.niceScaleDefaultTicks[Math.min(Math.round(a/2),c.niceScaleDefaultTicks.length-1)];if(c.isMultipleYAxis&&!g&&c.multiAxisTickAmount>0&&(f=c.multiAxisTickAmount,g=!0),f=f==="dataPoints"?c.dataPoints-1:Math.abs(Math.round(f)),(e===Number.MIN_VALUE&&t===0||!P.isNumber(e)&&!P.isNumber(t)||e===Number.MIN_VALUE&&t===-Number.MAX_VALUE)&&(e=P.isNumber(i.min)?i.min:0,t=P.isNumber(i.max)?i.max:e+f,c.allSeriesCollapsed=!1),e>t){console.warn("axis.min cannot be greater than axis.max: swapping min and max");var x=t;t=e,e=x}else e===t&&(e=e===0?0:e-1,t=t===0?2:t+1);var b=[];f<1&&(f=1);var v=f,y=Math.abs(t-e);!s&&e>0&&e/y<.15&&(e=0,s=!0),!r&&t<0&&-t/y<.15&&(t=0,r=!0);var w=(y=Math.abs(t-e))/v,l=w,u=Math.floor(Math.log10(l)),m=Math.pow(10,u),A=Math.ceil(l/m);if(w=l=(A=c.niceScaleAllowedMagMsd[c.yValueDecimal===0?0:1][A])*m,c.isBarHorizontal&&i.stepSize&&i.type!=="datetime"?(w=i.stepSize,d=!0):d&&(w=i.stepSize),d&&i.forceNiceScale){var k=Math.floor(Math.log10(w));w*=Math.pow(10,u-k)}if(s&&r){var S=y/v;if(g)if(d)if(P.mod(y,w)!=0){var L=P.getGCD(w,S);w=S/L<10?L:S}else P.mod(w,S)==0?w=S:(S=w,g=!1);else w=S;else if(d)P.mod(y,w)==0?S=w:w=S;else if(P.mod(y,w)==0)S=w;else{S=y/(v=Math.ceil(y/w));var C=P.getGCD(y,w);y/Ca&&(e=t-w*f,e+=w*Math.floor((I-e)/w))}else if(s)if(g)t=e+w*v;else{var z=t;t=w*Math.ceil(t/w),Math.abs(t-e)/P.getGCD(y,w)>a&&(t=e+w*f,t+=w*Math.ceil((z-t)/w))}}else if(c.isMultipleYAxis&&g){var M=w*Math.floor(e/w),T=M+w*v;T0&&e16&&P.getPrimeFactors(v).length<2&&v++,!g&&i.forceNiceScale&&c.yValueDecimal===0&&v>y&&(v=y,w=Math.round(y/v)),v>a&&(!g&&!d||i.forceNiceScale)){var E=P.getPrimeFactors(v),O=E.length-1,D=v;e:for(var H=0;Hse);return{result:b,niceMin:b[0],niceMax:b[b.length-1]}}},{key:"linearScale",value:function(e,t){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:10,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,s=arguments.length>4&&arguments[4]!==void 0?arguments[4]:void 0,r=Math.abs(t-e),n=[];if(e===t)return{result:n=[e],niceMin:n[0],niceMax:n[n.length-1]};(i=this._adjustTicksForSmallRange(i,a,r))==="dataPoints"&&(i=this.w.globals.dataPoints-1),s||(s=r/i),s=Math.round(10*(s+Number.EPSILON))/10,i===Number.MAX_VALUE&&(i=5,s=1);for(var o=e;i>=0;)n.push(o),o=P.preciseAddition(o,s),i-=1;return{result:n,niceMin:n[0],niceMax:n[n.length-1]}}},{key:"logarithmicScaleNice",value:function(e,t,i){t<=0&&(t=Math.max(e,i)),e<=0&&(e=Math.min(t,i));for(var a=[],s=Math.ceil(Math.log(t)/Math.log(i)+1),r=Math.floor(Math.log(e)/Math.log(i));r5?(a.allSeriesCollapsed=!1,a.yAxisScale[e]=r.forceNiceScale?this.logarithmicScaleNice(t,i,r.logBase):this.logarithmicScale(t,i,r.logBase)):i!==-Number.MAX_VALUE&&P.isNumber(i)&&t!==Number.MAX_VALUE&&P.isNumber(t)?(a.allSeriesCollapsed=!1,a.yAxisScale[e]=this.niceScale(t,i,e)):a.yAxisScale[e]=this.niceScale(Number.MIN_VALUE,0,e)}},{key:"setXScale",value:function(e,t){var i=this.w,a=i.globals,s=Math.abs(t-e);if(t!==-Number.MAX_VALUE&&P.isNumber(t)){var r=a.xTickAmount+1;s<10&&s>1&&(r=s),a.xAxisScale=this.linearScale(e,t,r,0,i.config.xaxis.stepSize)}else a.xAxisScale=this.linearScale(0,10,10);return a.xAxisScale}},{key:"setSeriesYAxisMappings",value:function(){var e=this.w.globals,t=this.w.config,i=[],a=[],s=[],r=e.series.length>t.yaxis.length||t.yaxis.some(function(d){return Array.isArray(d.seriesName)});t.series.forEach(function(d,g){s.push(g),a.push(null)}),t.yaxis.forEach(function(d,g){i[g]=[]});var n=[];t.yaxis.forEach(function(d,g){var f=!1;if(d.seriesName){var x=[];Array.isArray(d.seriesName)?x=d.seriesName:x.push(d.seriesName),x.forEach(function(b){t.series.forEach(function(v,y){if(v.name===b){var w=y;g===y||r?!r||s.indexOf(y)>-1?i[g].push([g,y]):console.warn("Series '"+v.name+"' referenced more than once in what looks like the new style. That is, when using either seriesName: [], or when there are more series than yaxes."):(i[y].push([y,g]),w=g),f=!0,(w=s.indexOf(w))!==-1&&s.splice(w,1)}})})}f||n.push(g)}),i=i.map(function(d,g){var f=[];return d.forEach(function(x){a[x[1]]=x[0],f.push(x[1])}),f});for(var o=t.yaxis.length-1,h=0;h0?function(){var c,d,g=Number.MAX_VALUE,f=-Number.MAX_VALUE,x=g,b=f;if(t.chart.stacked)(function(){var w=i.seriesX[n[0]],l=[],u=[],m=[];h.forEach(function(){l.push(w.map(function(){return Number.MIN_VALUE})),u.push(w.map(function(){return Number.MIN_VALUE})),m.push(w.map(function(){return Number.MIN_VALUE}))});for(var A=function(S){!c&&t.series[n[S]].type&&(c=t.series[n[S]].type);var L=n[S];d=t.series[L].group?t.series[L].group:"axis-".concat(o),!(i.collapsedSeriesIndices.indexOf(L)<0&&i.ancillaryCollapsedSeriesIndices.indexOf(L)<0)||(i.allSeriesCollapsed=!1,h.forEach(function(C,I){if(t.series[L].group===C)for(var z=0;z=0?u[I][z]+=M:m[I][z]+=M,l[I][z]+=M,x=Math.min(x,M),b=Math.max(b,M)}})),c!=="bar"&&c!=="column"||i.barGroups.push(d)},k=0;k1&&arguments[1]!==void 0?arguments[1]:Number.MAX_VALUE,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:-Number.MAX_VALUE,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:null,s=this.w.config,r=this.w.globals,n=-Number.MAX_VALUE,o=Number.MIN_VALUE;a===null&&(a=e+1);var h=r.series,c=h,d=h;s.chart.type==="candlestick"?(c=r.seriesCandleL,d=r.seriesCandleH):s.chart.type==="boxPlot"?(c=r.seriesCandleO,d=r.seriesCandleC):r.isRangeData&&(c=r.seriesRangeStart,d=r.seriesRangeEnd);var g=!1;if(r.seriesX.length>=a){var f,x=(f=r.brushSource)===null||f===void 0?void 0:f.w.config.chart.brush;(s.chart.zoom.enabled&&s.chart.zoom.autoScaleYaxis||x!=null&&x.enabled&&x!=null&&x.autoScaleYaxis)&&(g=!0)}for(var b=e;by&&r.seriesX[b][w]>s.xaxis.max;w--);}for(var l=y;l<=w&&lc[b][l]&&c[b][l]<0&&(o=c[b][l])}else r.hasNullValues=!0}v!=="bar"&&v!=="column"||(o<0&&n<0&&(n=0,i=Math.max(i,0)),o===Number.MIN_VALUE&&(o=0,t=Math.min(t,0)))}return s.chart.type==="rangeBar"&&r.seriesRangeStart.length&&r.isBarHorizontal&&(o=t),s.chart.type==="bar"&&(o<0&&n<0&&(n=0),o===Number.MIN_VALUE&&(o=0)),{minY:o,maxY:n,lowestY:t,highestY:i}}},{key:"setYRange",value:function(){var e=this.w.globals,t=this.w.config;e.maxY=-Number.MAX_VALUE,e.minY=Number.MIN_VALUE;var i,a=Number.MAX_VALUE;if(e.isMultipleYAxis){a=Number.MAX_VALUE;for(var s=0;se.dataPoints&&e.dataPoints!==0&&(a=e.dataPoints-1);else if(t.xaxis.tickAmount==="dataPoints"){if(e.series.length>1&&(a=e.series[e.maxValsInArrayIndex].length-1),e.isXNumeric){var s=e.maxX-e.minX;s<30&&(a=s-1)}}else a=t.xaxis.tickAmount;if(e.xTickAmount=a,t.xaxis.max!==void 0&&typeof t.xaxis.max=="number"&&(e.maxX=t.xaxis.max),t.xaxis.min!==void 0&&typeof t.xaxis.min=="number"&&(e.minX=t.xaxis.min),t.xaxis.range!==void 0&&(e.minX=e.maxX-t.xaxis.range),e.minX!==Number.MAX_VALUE&&e.maxX!==-Number.MAX_VALUE)if(t.xaxis.convertedCatToNumeric&&!e.dataFormatXNumeric){for(var r=[],n=e.minX-1;n0&&(e.xAxisScale=this.scales.linearScale(1,e.labels.length,a-1,0,t.xaxis.stepSize),e.seriesX=e.labels.slice());i&&(e.labels=e.xAxisScale.result.slice())}return e.isBarHorizontal&&e.labels.length&&(e.xTickAmount=e.labels.length),this._handleSingleDataPoint(),this._getMinXDiff(),{minX:e.minX,maxX:e.maxX}}},{key:"setZRange",value:function(){var e=this.w.globals;if(e.isDataXYZ){for(var t=0;t0){var n=s-a[r-1];n>0&&(e.minXDiff=Math.min(n,e.minXDiff))}}),e.dataPoints!==1&&e.minXDiff!==Number.MAX_VALUE||(e.minXDiff=.5)})}},{key:"_setStackedMinMax",value:function(){var e=this,t=this.w.globals;if(t.series.length){var i=t.seriesGroups;i.length||(i=[this.w.globals.seriesNames.map(function(r){return r})]);var a={},s={};i.forEach(function(r){a[r]=[],s[r]=[],e.w.config.series.map(function(n,o){return r.indexOf(t.seriesNames[o])>-1?o:null}).filter(function(n){return n!==null}).forEach(function(n){for(var o=0;o0?a[r][o]+=parseFloat(t.series[n][o])+1e-4:s[r][o]+=parseFloat(t.series[n][o]))}})}),Object.entries(a).forEach(function(r){var n=It(r,1)[0];a[n].forEach(function(o,h){t.maxY=Math.max(t.maxY,a[n][h]),t.minY=Math.min(t.minY,s[n][h])})})}}}]),p}(),lt=function(){function p(e,t){F(this,p),this.ctx=e,this.elgrid=t,this.w=e.w;var i=this.w;this.xaxisFontSize=i.config.xaxis.labels.style.fontSize,this.axisFontFamily=i.config.xaxis.labels.style.fontFamily,this.xaxisForeColors=i.config.xaxis.labels.style.colors,this.isCategoryBarHorizontal=i.config.chart.type==="bar"&&i.config.plotOptions.bar.horizontal,this.xAxisoffX=0,i.config.xaxis.position==="bottom"&&(this.xAxisoffX=i.globals.gridHeight),this.drawnLabels=[],this.axesUtils=new ge(e)}return R(p,[{key:"drawYaxis",value:function(e){var t=this,i=this.w,a=new X(this.ctx),s=i.config.yaxis[e].labels.style,r=s.fontSize,n=s.fontFamily,o=s.fontWeight,h=a.group({class:"apexcharts-yaxis",rel:e,transform:"translate("+i.globals.translateYAxisX[e]+", 0)"});if(this.axesUtils.isYAxisHidden(e))return h;var c=a.group({class:"apexcharts-yaxis-texts-g"});h.add(c);var d=i.globals.yAxisScale[e].result.length-1,g=i.globals.gridHeight/d,f=i.globals.yLabelFormatters[e],x=i.globals.yAxisScale[e].result.slice();x=this.axesUtils.checkForReversedLabels(e,x);var b="";if(i.config.yaxis[e].labels.show){var v=i.globals.translateY+i.config.yaxis[e].labels.offsetY;i.globals.isBarHorizontal?v=0:i.config.chart.type==="heatmap"&&(v-=g/2),v+=parseInt(i.config.yaxis[e].labels.style.fontSize,10)/3;for(var y=function(L){var C=x[L];C=f(C,L,i);var I=i.config.yaxis[e].labels.padding;i.config.yaxis[e].opposite&&i.config.yaxis.length!==0&&(I*=-1);var z="end";i.config.yaxis[e].opposite&&(z="start"),i.config.yaxis[e].labels.align==="left"?z="start":i.config.yaxis[e].labels.align==="center"?z="middle":i.config.yaxis[e].labels.align==="right"&&(z="end");var M=t.axesUtils.getYAxisForeColor(s.colors,e),T=P.listToArray(i.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxis[rel='".concat(e,"'] .apexcharts-yaxis-label tspan"))).map(function(W){return W.textContent}),E=a.drawText({x:I,y:v,text:T.indexOf(C)>=0?"":C,textAnchor:z,fontSize:r,fontFamily:n,fontWeight:o,maxWidth:i.config.yaxis[e].labels.maxWidth,foreColor:Array.isArray(M)?M[L]:M,isPlainText:!1,cssClass:"apexcharts-yaxis-label "+s.cssClass});L===d&&(b=E),c.add(E);var O=document.createElementNS(i.globals.SVGNS,"title");if(O.textContent=Array.isArray(C)?C.join(" "):C,E.node.appendChild(O),i.config.yaxis[e].labels.rotate!==0){var D=a.rotateAroundCenter(b.node),H=a.rotateAroundCenter(E.node);E.node.setAttribute("transform","rotate(".concat(i.config.yaxis[e].labels.rotate," ").concat(D.x," ").concat(H.y,")"))}v+=g},w=d;w>=0;w--)y(w)}if(i.config.yaxis[e].title.text!==void 0){var l=a.group({class:"apexcharts-yaxis-title"}),u=0;i.config.yaxis[e].opposite&&(u=i.globals.translateYAxisX[e]);var m=a.drawText({x:u,y:i.globals.gridHeight/2+i.globals.translateY+i.config.yaxis[e].title.offsetY,text:i.config.yaxis[e].title.text,textAnchor:"end",foreColor:i.config.yaxis[e].title.style.color,fontSize:i.config.yaxis[e].title.style.fontSize,fontWeight:i.config.yaxis[e].title.style.fontWeight,fontFamily:i.config.yaxis[e].title.style.fontFamily,cssClass:"apexcharts-yaxis-title-text "+i.config.yaxis[e].title.style.cssClass});l.add(m),h.add(l)}var A=i.config.yaxis[e].axisBorder,k=31+A.offsetX;if(i.config.yaxis[e].opposite&&(k=-31-A.offsetX),A.show){var S=a.drawLine(k,i.globals.translateY+A.offsetY-2,k,i.globals.gridHeight+i.globals.translateY+A.offsetY+2,A.color,0,A.width);h.add(S)}return i.config.yaxis[e].axisTicks.show&&this.axesUtils.drawYAxisTicks(k,d,A,i.config.yaxis[e].axisTicks,e,g,h),h}},{key:"drawYaxisInversed",value:function(e){var t=this.w,i=new X(this.ctx),a=i.group({class:"apexcharts-xaxis apexcharts-yaxis-inversed"}),s=i.group({class:"apexcharts-xaxis-texts-g",transform:"translate(".concat(t.globals.translateXAxisX,", ").concat(t.globals.translateXAxisY,")")});a.add(s);var r=t.globals.yAxisScale[e].result.length-1,n=t.globals.gridWidth/r+.1,o=n+t.config.xaxis.labels.offsetX,h=t.globals.xLabelFormatter,c=t.globals.yAxisScale[e].result.slice(),d=t.globals.timescaleLabels;d.length>0&&(this.xaxisLabels=d.slice(),r=(c=d.slice()).length),c=this.axesUtils.checkForReversedLabels(e,c);var g=d.length;if(t.config.xaxis.labels.show)for(var f=g?0:r;g?f=0;g?f++:f--){var x=c[f];x=h(x,f,t);var b=t.globals.gridWidth+t.globals.padHorizontal-(o-n+t.config.xaxis.labels.offsetX);if(d.length){var v=this.axesUtils.getLabel(c,d,b,f,this.drawnLabels,this.xaxisFontSize);b=v.x,x=v.text,this.drawnLabels.push(v.text),f===0&&t.globals.skipFirstTimelinelabel&&(x=""),f===c.length-1&&t.globals.skipLastTimelinelabel&&(x="")}var y=i.drawText({x:b,y:this.xAxisoffX+t.config.xaxis.labels.offsetY+30-(t.config.xaxis.position==="top"?t.globals.xAxisHeight+t.config.xaxis.axisTicks.height-2:0),text:x,textAnchor:"middle",foreColor:Array.isArray(this.xaxisForeColors)?this.xaxisForeColors[e]:this.xaxisForeColors,fontSize:this.xaxisFontSize,fontFamily:this.xaxisFontFamily,fontWeight:t.config.xaxis.labels.style.fontWeight,isPlainText:!1,cssClass:"apexcharts-xaxis-label "+t.config.xaxis.labels.style.cssClass});s.add(y),y.tspan(x);var w=document.createElementNS(t.globals.SVGNS,"title");w.textContent=x,y.node.appendChild(w),o+=n}return this.inversedYAxisTitleText(a),this.inversedYAxisBorder(a),a}},{key:"inversedYAxisBorder",value:function(e){var t=this.w,i=new X(this.ctx),a=t.config.xaxis.axisBorder;if(a.show){var s=0;t.config.chart.type==="bar"&&t.globals.isXNumeric&&(s-=15);var r=i.drawLine(t.globals.padHorizontal+s+a.offsetX,this.xAxisoffX,t.globals.gridWidth,this.xAxisoffX,a.color,0,a.height);this.elgrid&&this.elgrid.elGridBorders&&t.config.grid.show?this.elgrid.elGridBorders.add(r):e.add(r)}}},{key:"inversedYAxisTitleText",value:function(e){var t=this.w,i=new X(this.ctx);if(t.config.xaxis.title.text!==void 0){var a=i.group({class:"apexcharts-xaxis-title apexcharts-yaxis-title-inversed"}),s=i.drawText({x:t.globals.gridWidth/2+t.config.xaxis.title.offsetX,y:this.xAxisoffX+parseFloat(this.xaxisFontSize)+parseFloat(t.config.xaxis.title.style.fontSize)+t.config.xaxis.title.offsetY+20,text:t.config.xaxis.title.text,textAnchor:"middle",fontSize:t.config.xaxis.title.style.fontSize,fontFamily:t.config.xaxis.title.style.fontFamily,fontWeight:t.config.xaxis.title.style.fontWeight,foreColor:t.config.xaxis.title.style.color,cssClass:"apexcharts-xaxis-title-text "+t.config.xaxis.title.style.cssClass});a.add(s),e.add(a)}}},{key:"yAxisTitleRotate",value:function(e,t){var i=this.w,a=new X(this.ctx),s={width:0,height:0},r={width:0,height:0},n=i.globals.dom.baseEl.querySelector(" .apexcharts-yaxis[rel='".concat(e,"'] .apexcharts-yaxis-texts-g"));n!==null&&(s=n.getBoundingClientRect());var o=i.globals.dom.baseEl.querySelector(".apexcharts-yaxis[rel='".concat(e,"'] .apexcharts-yaxis-title text"));if(o!==null&&(r=o.getBoundingClientRect()),o!==null){var h=this.xPaddingForYAxisTitle(e,s,r,t);o.setAttribute("x",h.xPos-(t?10:0))}if(o!==null){var c=a.rotateAroundCenter(o);o.setAttribute("transform","rotate(".concat(t?-1*i.config.yaxis[e].title.rotate:i.config.yaxis[e].title.rotate," ").concat(c.x," ").concat(c.y,")"))}}},{key:"xPaddingForYAxisTitle",value:function(e,t,i,a){var s=this.w,r=0,n=0,o=10;return s.config.yaxis[e].title.text===void 0||e<0?{xPos:n,padd:0}:(a?(n=t.width+s.config.yaxis[e].title.offsetX+i.width/2+o/2,(r+=1)===0&&(n-=o/2)):(n=-1*t.width+s.config.yaxis[e].title.offsetX+o/2+i.width/2,s.globals.isBarHorizontal&&(o=25,n=-1*t.width-s.config.yaxis[e].title.offsetX-o)),{xPos:n,padd:o})}},{key:"setYAxisXPosition",value:function(e,t){var i=this.w,a=0,s=0,r=18,n=1;i.config.yaxis.length>1&&(this.multipleYs=!0),i.config.yaxis.map(function(o,h){var c=i.globals.ignoreYAxisIndexes.indexOf(h)>-1||!o.show||o.floating||e[h].width===0,d=e[h].width+t[h].width;o.opposite?i.globals.isBarHorizontal?(s=i.globals.gridWidth+i.globals.translateX-1,i.globals.translateYAxisX[h]=s-o.labels.offsetX):(s=i.globals.gridWidth+i.globals.translateX+n,c||(n=n+d+20),i.globals.translateYAxisX[h]=s-o.labels.offsetX+20):(a=i.globals.translateX-r,c||(r=r+d+20),i.globals.translateYAxisX[h]=a+o.labels.offsetX)})}},{key:"setYAxisTextAlignments",value:function(){var e=this.w,t=e.globals.dom.baseEl.getElementsByClassName("apexcharts-yaxis");(t=P.listToArray(t)).forEach(function(i,a){var s=e.config.yaxis[a];if(s&&!s.floating&&s.labels.align!==void 0){var r=e.globals.dom.baseEl.querySelector(".apexcharts-yaxis[rel='".concat(a,"'] .apexcharts-yaxis-texts-g")),n=e.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxis[rel='".concat(a,"'] .apexcharts-yaxis-label"));n=P.listToArray(n);var o=r.getBoundingClientRect();s.labels.align==="left"?(n.forEach(function(h,c){h.setAttribute("text-anchor","start")}),s.opposite||r.setAttribute("transform","translate(-".concat(o.width,", 0)"))):s.labels.align==="center"?(n.forEach(function(h,c){h.setAttribute("text-anchor","middle")}),r.setAttribute("transform","translate(".concat(o.width/2*(s.opposite?1:-1),", 0)"))):s.labels.align==="right"&&(n.forEach(function(h,c){h.setAttribute("text-anchor","end")}),s.opposite&&r.setAttribute("transform","translate(".concat(o.width,", 0)")))}})}}]),p}(),Oi=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w,this.documentEvent=P.bind(this.documentEvent,this)}return R(p,[{key:"addEventListener",value:function(e,t){var i=this.w;i.globals.events.hasOwnProperty(e)?i.globals.events[e].push(t):i.globals.events[e]=[t]}},{key:"removeEventListener",value:function(e,t){var i=this.w;if(i.globals.events.hasOwnProperty(e)){var a=i.globals.events[e].indexOf(t);a!==-1&&i.globals.events[e].splice(a,1)}}},{key:"fireEvent",value:function(e,t){var i=this.w;if(i.globals.events.hasOwnProperty(e)){t&&t.length||(t=[]);for(var a=i.globals.events[e],s=a.length,r=0;r0&&(t=this.w.config.chart.locales.concat(window.Apex.chart.locales));var i=t.filter(function(s){return s.name===e})[0];if(!i)throw new Error("Wrong locale name provided. Please make sure you set the correct locale name in options");var a=P.extend(Xt,i);this.w.globals.locale=a.options}}]),p}(),Hi=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"drawAxis",value:function(e,t){var i,a,s=this,r=this.w.globals,n=this.w.config,o=new Me(this.ctx,t),h=new lt(this.ctx,t);r.axisCharts&&e!=="radar"&&(r.isBarHorizontal?(a=h.drawYaxisInversed(0),i=o.drawXaxisInversed(0),r.dom.elGraphical.add(i),r.dom.elGraphical.add(a)):(i=o.drawXaxis(),r.dom.elGraphical.add(i),n.yaxis.map(function(c,d){if(r.ignoreYAxisIndexes.indexOf(d)===-1&&(a=h.drawYaxis(d),r.dom.Paper.add(a),s.w.config.grid.position==="back")){var g=r.dom.Paper.children()[1];g.remove(),r.dom.Paper.add(g)}})))}}]),p}(),nt=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"drawXCrosshairs",value:function(){var e=this.w,t=new X(this.ctx),i=new ie(this.ctx),a=e.config.xaxis.crosshairs.fill.gradient,s=e.config.xaxis.crosshairs.dropShadow,r=e.config.xaxis.crosshairs.fill.type,n=a.colorFrom,o=a.colorTo,h=a.opacityFrom,c=a.opacityTo,d=a.stops,g=s.enabled,f=s.left,x=s.top,b=s.blur,v=s.color,y=s.opacity,w=e.config.xaxis.crosshairs.fill.color;if(e.config.xaxis.crosshairs.show){r==="gradient"&&(w=t.drawGradient("vertical",n,o,h,c,null,d,null));var l=t.drawRect();e.config.xaxis.crosshairs.width===1&&(l=t.drawLine());var u=e.globals.gridHeight;(!P.isNumber(u)||u<0)&&(u=0);var m=e.config.xaxis.crosshairs.width;(!P.isNumber(m)||m<0)&&(m=0),l.attr({class:"apexcharts-xcrosshairs",x:0,y:0,y2:u,width:m,height:u,fill:w,filter:"none","fill-opacity":e.config.xaxis.crosshairs.opacity,stroke:e.config.xaxis.crosshairs.stroke.color,"stroke-width":e.config.xaxis.crosshairs.stroke.width,"stroke-dasharray":e.config.xaxis.crosshairs.stroke.dashArray}),g&&(l=i.dropShadow(l,{left:f,top:x,blur:b,color:v,opacity:y})),e.globals.dom.elGraphical.add(l)}}},{key:"drawYCrosshairs",value:function(){var e=this.w,t=new X(this.ctx),i=e.config.yaxis[0].crosshairs,a=e.globals.barPadForNumericAxis;if(e.config.yaxis[0].crosshairs.show){var s=t.drawLine(-a,0,e.globals.gridWidth+a,0,i.stroke.color,i.stroke.dashArray,i.stroke.width);s.attr({class:"apexcharts-ycrosshairs"}),e.globals.dom.elGraphical.add(s)}var r=t.drawLine(-a,0,e.globals.gridWidth+a,0,i.stroke.color,0,0);r.attr({class:"apexcharts-ycrosshairs-hidden"}),e.globals.dom.elGraphical.add(r)}}]),p}(),Ni=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"checkResponsiveConfig",value:function(e){var t=this,i=this.w,a=i.config;if(a.responsive.length!==0){var s=a.responsive.slice();s.sort(function(h,c){return h.breakpoint>c.breakpoint?1:c.breakpoint>h.breakpoint?-1:0}).reverse();var r=new Pe({}),n=function(){var h=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},c=s[0].breakpoint,d=window.innerWidth>0?window.innerWidth:screen.width;if(d>c){var g=P.clone(i.globals.initialConfig);g.series=P.clone(i.config.series);var f=$.extendArrayProps(r,g,i);h=P.extend(f,h),h=P.extend(i.config,h),t.overrideResponsiveOptions(h)}else for(var x=0;x0&&typeof i.config.colors[0]=="function"&&(i.globals.colors=i.config.series.map(function(x,b){var v=i.config.colors[b];return v||(v=i.config.colors[0]),typeof v=="function"?(t.isColorFn=!0,v({value:i.globals.axisCharts?i.globals.series[b][0]?i.globals.series[b][0]:0:i.globals.series[b],seriesIndex:b,dataPointIndex:b,w:i})):v}))),i.globals.seriesColors.map(function(x,b){x&&(i.globals.colors[b]=x)}),i.config.theme.monochrome.enabled){var s=[],r=i.globals.series.length;(this.isBarDistributed||this.isHeatmapDistributed)&&(r=i.globals.series[0].length*i.globals.series.length);for(var n=i.config.theme.monochrome.color,o=1/(r/i.config.theme.monochrome.shadeIntensity),h=i.config.theme.monochrome.shadeTo,c=0,d=0;d2&&arguments[2]!==void 0?arguments[2]:null,a=this.w,s=t||a.globals.series.length;if(i===null&&(i=this.isBarDistributed||this.isHeatmapDistributed||a.config.chart.type==="heatmap"&&a.config.plotOptions.heatmap.colorScale.inverse),i&&a.globals.series.length&&(s=a.globals.series[a.globals.maxValsInArrayIndex].length*a.globals.series.length),e.lengthe.globals.svgWidth&&(this.dCtx.lgRect.width=e.globals.svgWidth/1.5),this.dCtx.lgRect}},{key:"getDatalabelsRect",value:function(){var e=this,t=this.w,i=[];t.config.series.forEach(function(o,h){o.data.forEach(function(c,d){var g;g=t.globals.series[h][d],a=t.config.dataLabels.formatter(g,{ctx:e.dCtx.ctx,seriesIndex:h,dataPointIndex:d,w:t}),i.push(a)})});var a=P.getLargestStringFromArr(i),s=new X(this.dCtx.ctx),r=t.config.dataLabels.style,n=s.getTextRects(a,parseInt(r.fontSize),r.fontFamily);return{width:1.05*n.width,height:n.height}}},{key:"getLargestStringFromMultiArr",value:function(e,t){var i=e;if(this.w.globals.isMultiLineX){var a=t.map(function(r,n){return Array.isArray(r)?r.length:1}),s=Math.max.apply(Math,te(a));i=t[a.indexOf(s)]}return i}}]),p}(),Vi=function(){function p(e){F(this,p),this.w=e.w,this.dCtx=e}return R(p,[{key:"getxAxisLabelsCoords",value:function(){var e,t=this.w,i=t.globals.labels.slice();if(t.config.xaxis.convertedCatToNumeric&&i.length===0&&(i=t.globals.categoryLabels),t.globals.timescaleLabels.length>0){var a=this.getxAxisTimeScaleLabelsCoords();e={width:a.width,height:a.height},t.globals.rotateXLabels=!1}else{this.dCtx.lgWidthForSideLegends=t.config.legend.position!=="left"&&t.config.legend.position!=="right"||t.config.legend.floating?0:this.dCtx.lgRect.width;var s=t.globals.xLabelFormatter,r=P.getLargestStringFromArr(i),n=this.dCtx.dimHelpers.getLargestStringFromMultiArr(r,i);t.globals.isBarHorizontal&&(n=r=t.globals.yAxisScale[0].result.reduce(function(x,b){return x.length>b.length?x:b},0));var o=new ze(this.dCtx.ctx),h=r;r=o.xLabelFormat(s,r,h,{i:void 0,dateFormatter:new K(this.dCtx.ctx).formatDate,w:t}),n=o.xLabelFormat(s,n,h,{i:void 0,dateFormatter:new K(this.dCtx.ctx).formatDate,w:t}),(t.config.xaxis.convertedCatToNumeric&&r===void 0||String(r).trim()==="")&&(n=r="1");var c=new X(this.dCtx.ctx),d=c.getTextRects(r,t.config.xaxis.labels.style.fontSize),g=d;if(r!==n&&(g=c.getTextRects(n,t.config.xaxis.labels.style.fontSize)),(e={width:d.width>=g.width?d.width:g.width,height:d.height>=g.height?d.height:g.height}).width*i.length>t.globals.svgWidth-this.dCtx.lgWidthForSideLegends-this.dCtx.yAxisWidth-this.dCtx.gridPad.left-this.dCtx.gridPad.right&&t.config.xaxis.labels.rotate!==0||t.config.xaxis.labels.rotateAlways){if(!t.globals.isBarHorizontal){t.globals.rotateXLabels=!0;var f=function(x){return c.getTextRects(x,t.config.xaxis.labels.style.fontSize,t.config.xaxis.labels.style.fontFamily,"rotate(".concat(t.config.xaxis.labels.rotate," 0 0)"),!1)};d=f(r),r!==n&&(g=f(n)),e.height=(d.height>g.height?d.height:g.height)/1.5,e.width=d.width>g.width?d.width:g.width}}else t.globals.rotateXLabels=!1}return t.config.xaxis.labels.show||(e={width:0,height:0}),{width:e.width,height:e.height}}},{key:"getxAxisGroupLabelsCoords",value:function(){var e,t=this.w;if(!t.globals.hasXaxisGroups)return{width:0,height:0};var i,a=((e=t.config.xaxis.group.style)===null||e===void 0?void 0:e.fontSize)||t.config.xaxis.labels.style.fontSize,s=t.globals.groups.map(function(d){return d.title}),r=P.getLargestStringFromArr(s),n=this.dCtx.dimHelpers.getLargestStringFromMultiArr(r,s),o=new X(this.dCtx.ctx),h=o.getTextRects(r,a),c=h;return r!==n&&(c=o.getTextRects(n,a)),i={width:h.width>=c.width?h.width:c.width,height:h.height>=c.height?h.height:c.height},t.config.xaxis.labels.show||(i={width:0,height:0}),{width:i.width,height:i.height}}},{key:"getxAxisTitleCoords",value:function(){var e=this.w,t=0,i=0;if(e.config.xaxis.title.text!==void 0){var a=new X(this.dCtx.ctx).getTextRects(e.config.xaxis.title.text,e.config.xaxis.title.style.fontSize);t=a.width,i=a.height}return{width:t,height:i}}},{key:"getxAxisTimeScaleLabelsCoords",value:function(){var e,t=this.w;this.dCtx.timescaleLabels=t.globals.timescaleLabels.slice();var i=this.dCtx.timescaleLabels.map(function(s){return s.value}),a=i.reduce(function(s,r){return s===void 0?(console.error("You have possibly supplied invalid Date format. Please supply a valid JavaScript Date"),0):s.length>r.length?s:r},0);return 1.05*(e=new X(this.dCtx.ctx).getTextRects(a,t.config.xaxis.labels.style.fontSize)).width*i.length>t.globals.gridWidth&&t.config.xaxis.labels.rotate!==0&&(t.globals.overlappingXLabels=!0),e}},{key:"additionalPaddingXLabels",value:function(e){var t=this,i=this.w,a=i.globals,s=i.config,r=s.xaxis.type,n=e.width;a.skipLastTimelinelabel=!1,a.skipFirstTimelinelabel=!1;var o=i.config.yaxis[0].opposite&&i.globals.isBarHorizontal,h=function(c,d){s.yaxis.length>1&&function(g){return a.collapsedSeriesIndices.indexOf(g)!==-1}(d)||function(g){if(t.dCtx.timescaleLabels&&t.dCtx.timescaleLabels.length){var f=t.dCtx.timescaleLabels[0],x=t.dCtx.timescaleLabels[t.dCtx.timescaleLabels.length-1].position+n/1.75-t.dCtx.yAxisWidthRight,b=f.position-n/1.75+t.dCtx.yAxisWidthLeft,v=i.config.legend.position==="right"&&t.dCtx.lgRect.width>0?t.dCtx.lgRect.width:0;x>a.svgWidth-a.translateX-v&&(a.skipLastTimelinelabel=!0),b<-(g.show&&!g.floating||s.chart.type!=="bar"&&s.chart.type!=="candlestick"&&s.chart.type!=="rangeBar"&&s.chart.type!=="boxPlot"?10:n/1.75)&&(a.skipFirstTimelinelabel=!0)}else r==="datetime"?t.dCtx.gridPad.right((k=String(d(m,o)))===null||k===void 0?void 0:k.length)?u:m},g),x=f=d(f,o);if(f!==void 0&&f.length!==0||(f=h.niceMax),t.globals.isBarHorizontal){a=0;var b=t.globals.labels.slice();f=P.getLargestStringFromArr(b),f=d(f,{seriesIndex:n,dataPointIndex:-1,w:t}),x=e.dCtx.dimHelpers.getLargestStringFromMultiArr(f,b)}var v=new X(e.dCtx.ctx),y="rotate(".concat(r.labels.rotate," 0 0)"),w=v.getTextRects(f,r.labels.style.fontSize,r.labels.style.fontFamily,y,!1),l=w;f!==x&&(l=v.getTextRects(x,r.labels.style.fontSize,r.labels.style.fontFamily,y,!1)),i.push({width:(c>l.width||c>w.width?c:l.width>w.width?l.width:w.width)+a,height:l.height>w.height?l.height:w.height})}else i.push({width:0,height:0})}),i}},{key:"getyAxisTitleCoords",value:function(){var e=this,t=this.w,i=[];return t.config.yaxis.map(function(a,s){if(a.show&&a.title.text!==void 0){var r=new X(e.dCtx.ctx),n="rotate(".concat(a.title.rotate," 0 0)"),o=r.getTextRects(a.title.text,a.title.style.fontSize,a.title.style.fontFamily,n,!1);i.push({width:o.width,height:o.height})}else i.push({width:0,height:0})}),i}},{key:"getTotalYAxisWidth",value:function(){var e=this.w,t=0,i=0,a=0,s=e.globals.yAxisScale.length>1?10:0,r=new ge(this.dCtx.ctx),n=function(o,h){var c=e.config.yaxis[h].floating,d=0;o.width>0&&!c?(d=o.width+s,function(g){return e.globals.ignoreYAxisIndexes.indexOf(g)>-1}(h)&&(d=d-o.width-s)):d=c||r.isYAxisHidden(h)?0:5,e.config.yaxis[h].opposite?a+=d:i+=d,t+=d};return e.globals.yLabelsCoords.map(function(o,h){n(o,h)}),e.globals.yTitleCoords.map(function(o,h){n(o,h)}),e.globals.isBarHorizontal&&!e.config.yaxis[0].floating&&(t=e.globals.yLabelsCoords[0].width+e.globals.yTitleCoords[0].width+15),this.dCtx.yAxisWidthLeft=i,this.dCtx.yAxisWidthRight=a,t}}]),p}(),ji=function(){function p(e){F(this,p),this.w=e.w,this.dCtx=e}return R(p,[{key:"gridPadForColumnsInNumericAxis",value:function(e){var t=this.w,i=t.config,a=t.globals;if(a.noData||a.collapsedSeries.length+a.ancillaryCollapsedSeries.length===i.series.length)return 0;var s=function(f){return f==="bar"||f==="rangeBar"||f==="candlestick"||f==="boxPlot"},r=i.chart.type,n=0,o=s(r)?i.series.length:1;a.comboBarCount>0&&(o=a.comboBarCount),a.collapsedSeries.forEach(function(f){s(f.type)&&(o-=1)}),i.chart.stacked&&(o=1);var h=s(r)||a.comboBarCount>0,c=Math.abs(a.initialMaxX-a.initialMinX);if(h&&a.isXNumeric&&!a.isBarHorizontal&&o>0&&c!==0){var d,g;c<=3&&(c=a.dataPoints),d=c/e,a.minXDiff&&a.minXDiff/d>0&&(g=a.minXDiff/d),g>e/2&&(g/=2),(n=g*parseInt(i.plotOptions.bar.columnWidth,10)/100)<1&&(n=1),a.barPadForNumericAxis=n}return n}},{key:"gridPadFortitleSubtitle",value:function(){var e=this,t=this.w,i=t.globals,a=this.dCtx.isSparkline||!t.globals.axisCharts?0:10;["title","subtitle"].forEach(function(n){t.config[n].text!==void 0?a+=t.config[n].margin:a+=e.dCtx.isSparkline||!t.globals.axisCharts?0:5}),!t.config.legend.show||t.config.legend.position!=="bottom"||t.config.legend.floating||t.globals.axisCharts||(a+=10);var s=this.dCtx.dimHelpers.getTitleSubtitleCoords("title"),r=this.dCtx.dimHelpers.getTitleSubtitleCoords("subtitle");i.gridHeight=i.gridHeight-s.height-r.height-a,i.translateY=i.translateY+s.height+r.height+a}},{key:"setGridXPosForDualYAxis",value:function(e,t){var i=this.w,a=new ge(this.dCtx.ctx);i.config.yaxis.map(function(s,r){i.globals.ignoreYAxisIndexes.indexOf(r)!==-1||s.floating||a.isYAxisHidden(r)||(s.opposite&&(i.globals.translateX=i.globals.translateX-(t[r].width+e[r].width)-parseInt(i.config.yaxis[r].labels.style.fontSize,10)/1.2-12),i.globals.translateX<2&&(i.globals.translateX=2))})}}]),p}(),Ne=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w,this.lgRect={},this.yAxisWidth=0,this.yAxisWidthLeft=0,this.yAxisWidthRight=0,this.xAxisHeight=0,this.isSparkline=this.w.config.chart.sparkline.enabled,this.dimHelpers=new Gi(this),this.dimYAxis=new _i(this),this.dimXAxis=new Vi(this),this.dimGrid=new ji(this),this.lgWidthForSideLegends=0,this.gridPad=this.w.config.grid.padding,this.xPadRight=0,this.xPadLeft=0}return R(p,[{key:"plotCoords",value:function(){var e=this,t=this.w,i=t.globals;this.lgRect=this.dimHelpers.getLegendsRect(),this.datalabelsCoords={width:0,height:0};var a=Array.isArray(t.config.stroke.width)?Math.max.apply(Math,te(t.config.stroke.width)):t.config.stroke.width;this.isSparkline&&((t.config.markers.discrete.length>0||t.config.markers.size>0)&&Object.entries(this.gridPad).forEach(function(r){var n=It(r,2),o=n[0],h=n[1];e.gridPad[o]=Math.max(h,e.w.globals.markers.largestSize/1.5)}),this.gridPad.top=Math.max(a/2,this.gridPad.top),this.gridPad.bottom=Math.max(a/2,this.gridPad.bottom)),i.axisCharts?this.setDimensionsForAxisCharts():this.setDimensionsForNonAxisCharts(),this.dimGrid.gridPadFortitleSubtitle(),i.gridHeight=i.gridHeight-this.gridPad.top-this.gridPad.bottom,i.gridWidth=i.gridWidth-this.gridPad.left-this.gridPad.right-this.xPadRight-this.xPadLeft;var s=this.dimGrid.gridPadForColumnsInNumericAxis(i.gridWidth);i.gridWidth=i.gridWidth-2*s,i.translateX=i.translateX+this.gridPad.left+this.xPadLeft+(s>0?s:0),i.translateY=i.translateY+this.gridPad.top}},{key:"setDimensionsForAxisCharts",value:function(){var e=this,t=this.w,i=t.globals,a=this.dimYAxis.getyAxisLabelsCoords(),s=this.dimYAxis.getyAxisTitleCoords();i.isSlopeChart&&(this.datalabelsCoords=this.dimHelpers.getDatalabelsRect()),t.globals.yLabelsCoords=[],t.globals.yTitleCoords=[],t.config.yaxis.map(function(f,x){t.globals.yLabelsCoords.push({width:a[x].width,index:x}),t.globals.yTitleCoords.push({width:s[x].width,index:x})}),this.yAxisWidth=this.dimYAxis.getTotalYAxisWidth();var r=this.dimXAxis.getxAxisLabelsCoords(),n=this.dimXAxis.getxAxisGroupLabelsCoords(),o=this.dimXAxis.getxAxisTitleCoords();this.conditionalChecksForAxisCoords(r,o,n),i.translateXAxisY=t.globals.rotateXLabels?this.xAxisHeight/8:-4,i.translateXAxisX=t.globals.rotateXLabels&&t.globals.isXNumeric&&t.config.xaxis.labels.rotate<=-45?-this.xAxisWidth/4:0,t.globals.isBarHorizontal&&(i.rotateXLabels=!1,i.translateXAxisY=parseInt(t.config.xaxis.labels.style.fontSize,10)/1.5*-1),i.translateXAxisY=i.translateXAxisY+t.config.xaxis.labels.offsetY,i.translateXAxisX=i.translateXAxisX+t.config.xaxis.labels.offsetX;var h=this.yAxisWidth,c=this.xAxisHeight;i.xAxisLabelsHeight=this.xAxisHeight-o.height,i.xAxisGroupLabelsHeight=i.xAxisLabelsHeight-r.height,i.xAxisLabelsWidth=this.xAxisWidth,i.xAxisHeight=this.xAxisHeight;var d=10;(t.config.chart.type==="radar"||this.isSparkline)&&(h=0,c=i.goldenPadding),this.isSparkline&&(this.lgRect={height:0,width:0}),(this.isSparkline||t.config.chart.type==="treemap")&&(h=0,c=0,d=0),this.isSparkline||t.config.chart.type==="treemap"||this.dimXAxis.additionalPaddingXLabels(r);var g=function(){i.translateX=h+e.datalabelsCoords.width,i.gridHeight=i.svgHeight-e.lgRect.height-c-(e.isSparkline||t.config.chart.type==="treemap"?0:t.globals.rotateXLabels?10:15),i.gridWidth=i.svgWidth-h-2*e.datalabelsCoords.width};switch(t.config.xaxis.position==="top"&&(d=i.xAxisHeight-t.config.xaxis.axisTicks.height-5),t.config.legend.position){case"bottom":i.translateY=d,g();break;case"top":i.translateY=this.lgRect.height+d,g();break;case"left":i.translateY=d,i.translateX=this.lgRect.width+h+this.datalabelsCoords.width,i.gridHeight=i.svgHeight-c-12,i.gridWidth=i.svgWidth-this.lgRect.width-h-2*this.datalabelsCoords.width;break;case"right":i.translateY=d,i.translateX=h+this.datalabelsCoords.width,i.gridHeight=i.svgHeight-c-12,i.gridWidth=i.svgWidth-this.lgRect.width-h-2*this.datalabelsCoords.width-5;break;default:throw new Error("Legend position not supported")}this.dimGrid.setGridXPosForDualYAxis(s,a),new lt(this.ctx).setYAxisXPosition(a,s)}},{key:"setDimensionsForNonAxisCharts",value:function(){var e=this.w,t=e.globals,i=e.config,a=0;e.config.legend.show&&!e.config.legend.floating&&(a=20);var s=i.chart.type==="pie"||i.chart.type==="polarArea"||i.chart.type==="donut"?"pie":"radialBar",r=i.plotOptions[s].offsetY,n=i.plotOptions[s].offsetX;if(!i.legend.show||i.legend.floating){t.gridHeight=t.svgHeight-i.grid.padding.top-i.grid.padding.bottom;var o=t.dom.elWrap.getBoundingClientRect().width;return t.gridWidth=Math.min(o,t.gridHeight)-i.grid.padding.left-i.grid.padding.right,t.translateY=r,void(t.translateX=n+(t.svgWidth-t.gridWidth)/2)}switch(i.legend.position){case"bottom":t.gridHeight=t.svgHeight-this.lgRect.height-t.goldenPadding,t.gridWidth=t.svgWidth,t.translateY=r-10,t.translateX=n+(t.svgWidth-t.gridWidth)/2;break;case"top":t.gridHeight=t.svgHeight-this.lgRect.height-t.goldenPadding,t.gridWidth=t.svgWidth,t.translateY=this.lgRect.height+r+10,t.translateX=n+(t.svgWidth-t.gridWidth)/2;break;case"left":t.gridWidth=t.svgWidth-this.lgRect.width-a,t.gridHeight=i.chart.height!=="auto"?t.svgHeight:t.gridWidth,t.translateY=r,t.translateX=n+this.lgRect.width+a;break;case"right":t.gridWidth=t.svgWidth-this.lgRect.width-a-5,t.gridHeight=i.chart.height!=="auto"?t.svgHeight:t.gridWidth,t.translateY=r,t.translateX=n+10;break;default:throw new Error("Legend position not supported")}}},{key:"conditionalChecksForAxisCoords",value:function(e,t,i){var a=this.w,s=a.globals.hasXaxisGroups?2:1,r=i.height+e.height+t.height,n=a.globals.isMultiLineX?1.2:a.globals.LINE_HEIGHT_RATIO,o=a.globals.rotateXLabels?22:10,h=a.globals.rotateXLabels&&a.config.legend.position==="bottom"?10:0;this.xAxisHeight=r*n+s*o+h,this.xAxisWidth=e.width,this.xAxisHeight-t.height>a.config.xaxis.labels.maxHeight&&(this.xAxisHeight=a.config.xaxis.labels.maxHeight),a.config.xaxis.labels.minHeight&&this.xAxisHeightd&&(this.yAxisWidth=d)}}]),p}(),Ui=function(){function p(e){F(this,p),this.w=e.w,this.lgCtx=e}return R(p,[{key:"getLegendStyles",value:function(){var e,t,i,a=document.createElement("style");a.setAttribute("type","text/css");var s=((e=this.lgCtx.ctx)===null||e===void 0||(t=e.opts)===null||t===void 0||(i=t.chart)===null||i===void 0?void 0:i.nonce)||this.w.config.chart.nonce;s&&a.setAttribute("nonce",s);var r=document.createTextNode(` + .apexcharts-legend { + display: flex; + overflow: auto; + padding: 0 10px; + } + .apexcharts-legend.apx-legend-position-bottom, .apexcharts-legend.apx-legend-position-top { + flex-wrap: wrap + } + .apexcharts-legend.apx-legend-position-right, .apexcharts-legend.apx-legend-position-left { + flex-direction: column; + bottom: 0; + } + .apexcharts-legend.apx-legend-position-bottom.apexcharts-align-left, .apexcharts-legend.apx-legend-position-top.apexcharts-align-left, .apexcharts-legend.apx-legend-position-right, .apexcharts-legend.apx-legend-position-left { + justify-content: flex-start; + } + .apexcharts-legend.apx-legend-position-bottom.apexcharts-align-center, .apexcharts-legend.apx-legend-position-top.apexcharts-align-center { + justify-content: center; + } + .apexcharts-legend.apx-legend-position-bottom.apexcharts-align-right, .apexcharts-legend.apx-legend-position-top.apexcharts-align-right { + justify-content: flex-end; + } + .apexcharts-legend-series { + cursor: pointer; + line-height: normal; + display: flex; + align-items: center; + } + .apexcharts-legend-text { + position: relative; + font-size: 14px; + } + .apexcharts-legend-text *, .apexcharts-legend-marker * { + pointer-events: none; + } + .apexcharts-legend-marker { + position: relative; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + margin-right: 1px; + } + + .apexcharts-legend-series.apexcharts-no-click { + cursor: auto; + } + .apexcharts-legend .apexcharts-hidden-zero-series, .apexcharts-legend .apexcharts-hidden-null-series { + display: none !important; + } + .apexcharts-inactive-legend { + opacity: 0.45; + }`);return a.appendChild(r),a}},{key:"getLegendDimensions",value:function(){var e=this.w.globals.dom.baseEl.querySelector(".apexcharts-legend"),t=e.offsetWidth;return{clwh:e.offsetHeight,clww:t}}},{key:"appendToForeignObject",value:function(){this.w.globals.dom.elLegendForeign.appendChild(this.getLegendStyles())}},{key:"toggleDataSeries",value:function(e,t){var i=this,a=this.w;if(a.globals.axisCharts||a.config.chart.type==="radialBar"){a.globals.resized=!0;var s=null,r=null;a.globals.risingSeries=[],a.globals.axisCharts?(s=a.globals.dom.baseEl.querySelector(".apexcharts-series[data\\:realIndex='".concat(e,"']")),r=parseInt(s.getAttribute("data:realIndex"),10)):(s=a.globals.dom.baseEl.querySelector(".apexcharts-series[rel='".concat(e+1,"']")),r=parseInt(s.getAttribute("rel"),10)-1),t?[{cs:a.globals.collapsedSeries,csi:a.globals.collapsedSeriesIndices},{cs:a.globals.ancillaryCollapsedSeries,csi:a.globals.ancillaryCollapsedSeriesIndices}].forEach(function(c){i.riseCollapsedSeries(c.cs,c.csi,r)}):this.hideSeries({seriesEl:s,realIndex:r})}else{var n=a.globals.dom.Paper.select(" .apexcharts-series[rel='".concat(e+1,"'] path")),o=a.config.chart.type;if(o==="pie"||o==="polarArea"||o==="donut"){var h=a.config.plotOptions.pie.donut.labels;new X(this.lgCtx.ctx).pathMouseDown(n.members[0],null),this.lgCtx.ctx.pie.printDataLabelsInner(n.members[0].node,h)}n.fire("click")}}},{key:"getSeriesAfterCollapsing",value:function(e){var t=e.realIndex,i=this.w,a=i.globals,s=P.clone(i.config.series);if(a.axisCharts){var r=i.config.yaxis[a.seriesYAxisReverseMap[t]],n={index:t,data:s[t].data.slice(),type:s[t].type||i.config.chart.type};if(r&&r.show&&r.showAlways)a.ancillaryCollapsedSeriesIndices.indexOf(t)<0&&(a.ancillaryCollapsedSeries.push(n),a.ancillaryCollapsedSeriesIndices.push(t));else if(a.collapsedSeriesIndices.indexOf(t)<0){a.collapsedSeries.push(n),a.collapsedSeriesIndices.push(t);var o=a.risingSeries.indexOf(t);a.risingSeries.splice(o,1)}}else a.collapsedSeries.push({index:t,data:s[t]}),a.collapsedSeriesIndices.push(t);return a.allSeriesCollapsed=a.collapsedSeries.length+a.ancillaryCollapsedSeries.length===i.config.series.length,this._getSeriesBasedOnCollapsedState(s)}},{key:"hideSeries",value:function(e){for(var t=e.seriesEl,i=e.realIndex,a=this.w,s=this.getSeriesAfterCollapsing({realIndex:i}),r=t.childNodes,n=0;n0){for(var r=0;r1||!t.axisCharts)&&i.legend.show){for(;t.dom.elLegendWrap.firstChild;)t.dom.elLegendWrap.removeChild(t.dom.elLegendWrap.firstChild);this.drawLegends(),this.legendHelpers.appendToForeignObject(),i.legend.position==="bottom"||i.legend.position==="top"?this.legendAlignHorizontal():i.legend.position!=="right"&&i.legend.position!=="left"||this.legendAlignVertical()}}},{key:"createLegendMarker",value:function(e){var t=e.i,i=e.fillcolor,a=this.w,s=document.createElement("span");s.classList.add("apexcharts-legend-marker");var r=a.config.legend.markers.shape||a.config.markers.shape,n=r;Array.isArray(r)&&(n=r[t]);var o=Array.isArray(a.config.legend.markers.size)?parseFloat(a.config.legend.markers.size[t]):parseFloat(a.config.legend.markers.size),h=Array.isArray(a.config.legend.markers.offsetX)?parseFloat(a.config.legend.markers.offsetX[t]):parseFloat(a.config.legend.markers.offsetX),c=Array.isArray(a.config.legend.markers.offsetY)?parseFloat(a.config.legend.markers.offsetY[t]):parseFloat(a.config.legend.markers.offsetY),d=Array.isArray(a.config.legend.markers.strokeWidth)?parseFloat(a.config.legend.markers.strokeWidth[t]):parseFloat(a.config.legend.markers.strokeWidth),g=s.style;if(g.height=2*(o+d)+"px",g.width=2*(o+d)+"px",g.left=h+"px",g.top=c+"px",a.config.legend.markers.customHTML)g.background="transparent",g.color=i[t],Array.isArray(a.config.legend.markers.customHTML)?a.config.legend.markers.customHTML[t]&&(s.innerHTML=a.config.legend.markers.customHTML[t]()):s.innerHTML=a.config.legend.markers.customHTML();else{var f=new ye(this.ctx).getMarkerConfig({cssClass:"apexcharts-legend-marker apexcharts-marker apexcharts-marker-".concat(n),seriesIndex:t,strokeWidth:d,size:o}),x=SVG(s).size("100%","100%"),b=new X(this.ctx).drawMarker(0,0,Y(Y({},f),{},{pointFillColor:Array.isArray(i)?i[t]:f.pointFillColor,shape:n}));SVG.select(".apexcharts-legend-marker.apexcharts-marker").members.forEach(function(v){v.node.classList.contains("apexcharts-marker-triangle")?v.node.style.transform="translate(50%, 45%)":v.node.style.transform="translate(50%, 50%)"}),x.add(b)}return s}},{key:"drawLegends",value:function(){var e=this,t=this.w,i=t.config.legend.fontFamily,a=t.globals.seriesNames,s=t.config.legend.markers.fillColors?t.config.legend.markers.fillColors.slice():t.globals.colors.slice();if(t.config.chart.type==="heatmap"){var r=t.config.plotOptions.heatmap.colorScale.ranges;a=r.map(function(m){return m.name?m.name:m.from+" - "+m.to}),s=r.map(function(m){return m.color})}else this.isBarsDistributed&&(a=t.globals.labels.slice());t.config.legend.customLegendItems.length&&(a=t.config.legend.customLegendItems);for(var n=t.globals.legendFormatter,o=t.config.legend.inverseOrder,h=o?a.length-1:0;o?h>=0:h<=a.length-1;o?h--:h++){var c,d=n(a[h],{seriesIndex:h,w:t}),g=!1,f=!1;if(t.globals.collapsedSeries.length>0)for(var x=0;x0)for(var b=0;b0?h-10:0)+(c>0?c-10:0)}a.style.position="absolute",r=r+e+i.config.legend.offsetX,n=n+t+i.config.legend.offsetY,a.style.left=r+"px",a.style.top=n+"px",i.config.legend.position==="bottom"?(a.style.top="auto",a.style.bottom=5-i.config.legend.offsetY+"px"):i.config.legend.position==="right"&&(a.style.left="auto",a.style.right=25+i.config.legend.offsetX+"px"),["width","height"].forEach(function(d){a.style[d]&&(a.style[d]=parseInt(i.config.legend[d],10)+"px")})}},{key:"legendAlignHorizontal",value:function(){var e=this.w;e.globals.dom.elLegendWrap.style.right=0;var t=this.legendHelpers.getLegendDimensions(),i=new Ne(this.ctx),a=i.dimHelpers.getTitleSubtitleCoords("title"),s=i.dimHelpers.getTitleSubtitleCoords("subtitle"),r=0;e.config.legend.position==="bottom"?r=-t.clwh/1.8:e.config.legend.position==="top"&&(r=a.height+s.height+e.config.title.margin+e.config.subtitle.margin-10),this.setLegendWrapXY(20,r)}},{key:"legendAlignVertical",value:function(){var e=this.w,t=this.legendHelpers.getLegendDimensions(),i=0;e.config.legend.position==="left"&&(i=20),e.config.legend.position==="right"&&(i=e.globals.svgWidth-t.clww-10),this.setLegendWrapXY(i,20)}},{key:"onLegendHovered",value:function(e){var t=this.w,i=e.target.classList.contains("apexcharts-legend-series")||e.target.classList.contains("apexcharts-legend-text")||e.target.classList.contains("apexcharts-legend-marker");if(t.config.chart.type==="heatmap"||this.isBarsDistributed){if(i){var a=parseInt(e.target.getAttribute("rel"),10)-1;this.ctx.events.fireEvent("legendHover",[this.ctx,a,this.w]),new re(this.ctx).highlightRangeInSeries(e,e.target)}}else!e.target.classList.contains("apexcharts-inactive-legend")&&i&&new re(this.ctx).toggleSeriesOnHover(e,e.target)}},{key:"onLegendClick",value:function(e){var t=this.w;if(!t.config.legend.customLegendItems.length&&(e.target.classList.contains("apexcharts-legend-series")||e.target.classList.contains("apexcharts-legend-text")||e.target.classList.contains("apexcharts-legend-marker"))){var i=parseInt(e.target.getAttribute("rel"),10)-1,a=e.target.getAttribute("data:collapsed")==="true",s=this.w.config.chart.events.legendClick;typeof s=="function"&&s(this.ctx,i,this.w),this.ctx.events.fireEvent("legendClick",[this.ctx,i,this.w]);var r=this.w.config.legend.markers.onClick;typeof r=="function"&&e.target.classList.contains("apexcharts-legend-marker")&&(r(this.ctx,i,this.w),this.ctx.events.fireEvent("legendMarkerClick",[this.ctx,i,this.w])),t.config.chart.type!=="treemap"&&t.config.chart.type!=="heatmap"&&!this.isBarsDistributed&&t.config.legend.onItemClick.toggleDataSeries&&this.legendHelpers.toggleDataSeries(i,a)}}}]),p}(),Ht=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w;var t=this.w;this.ev=this.w.config.chart.events,this.selectedClass="apexcharts-selected",this.localeValues=this.w.globals.locale.toolbar,this.minX=t.globals.minX,this.maxX=t.globals.maxX}return R(p,[{key:"createToolbar",value:function(){var e=this,t=this.w,i=function(){return document.createElement("div")},a=i();if(a.setAttribute("class","apexcharts-toolbar"),a.style.top=t.config.chart.toolbar.offsetY+"px",a.style.right=3-t.config.chart.toolbar.offsetX+"px",t.globals.dom.elWrap.appendChild(a),this.elZoom=i(),this.elZoomIn=i(),this.elZoomOut=i(),this.elPan=i(),this.elSelection=i(),this.elZoomReset=i(),this.elMenuIcon=i(),this.elMenu=i(),this.elCustomIcons=[],this.t=t.config.chart.toolbar.tools,Array.isArray(this.t.customIcons))for(var s=0;s + + + +`),n("zoomOut",this.elZoomOut,` + + + +`);var o=function(d){e.t[d]&&t.config.chart[d].enabled&&r.push({el:d==="zoom"?e.elZoom:e.elSelection,icon:typeof e.t[d]=="string"?e.t[d]:d==="zoom"?` + + + +`:` + + +`,title:e.localeValues[d==="zoom"?"selectionZoom":"selection"],class:t.globals.isTouchDevice?"apexcharts-element-hidden":"apexcharts-".concat(d,"-icon")})};o("zoom"),o("selection"),this.t.pan&&t.config.chart.zoom.enabled&&r.push({el:this.elPan,icon:typeof this.t.pan=="string"?this.t.pan:` + + + + + + + +`,title:this.localeValues.pan,class:t.globals.isTouchDevice?"apexcharts-element-hidden":"apexcharts-pan-icon"}),n("reset",this.elZoomReset,` + + +`),this.t.download&&r.push({el:this.elMenuIcon,icon:typeof this.t.download=="string"?this.t.download:'',title:this.localeValues.menu,class:"apexcharts-menu-icon"});for(var h=0;hthis.wheelDelay&&(this.executeMouseWheelZoom(i),s.globals.lastWheelExecution=r),this.debounceTimer&&clearTimeout(this.debounceTimer),this.debounceTimer=setTimeout(function(){r-s.globals.lastWheelExecution>a.wheelDelay&&(a.executeMouseWheelZoom(i),s.globals.lastWheelExecution=r)},this.debounceDelay)}},{key:"executeMouseWheelZoom",value:function(i){var a,s=this.w;this.minX=s.globals.isRangeBar?s.globals.minY:s.globals.minX,this.maxX=s.globals.isRangeBar?s.globals.maxY:s.globals.maxX;var r=(a=this.gridRect)===null||a===void 0?void 0:a.getBoundingClientRect();if(r){var n,o,h,c=(i.clientX-r.left)/r.width,d=this.minX,g=this.maxX,f=g-d;if(i.deltaY<0){var x=d+c*f;o=x-(n=.5*f)/2,h=x+n/2}else o=d-(n=1.5*f)/2,h=g+n/2;o=Math.max(o,s.globals.initialMinX),h=Math.min(h,s.globals.initialMaxX);var b=.01*(s.globals.initialMaxX-s.globals.initialMinX);if(h-o0&&a.height>0&&this.slDraggableRect.selectize({points:"l, r",pointSize:8,pointType:"rect"}).resize({constraint:{minX:0,minY:0,maxX:i.globals.gridWidth,maxY:i.globals.gridHeight}}).on("resizing",this.selectionDragging.bind(this,"resizing"))}}},{key:"preselectedSelection",value:function(){var i=this.w,a=this.xyRatios;if(!i.globals.zoomEnabled){if(i.globals.selection!==void 0&&i.globals.selection!==null)this.drawSelectionRect(i.globals.selection);else if(i.config.chart.selection.xaxis.min!==void 0&&i.config.chart.selection.xaxis.max!==void 0){var s=(i.config.chart.selection.xaxis.min-i.globals.minX)/a.xRatio,r=i.globals.gridWidth-(i.globals.maxX-i.config.chart.selection.xaxis.max)/a.xRatio-s;i.globals.isRangeBar&&(s=(i.config.chart.selection.xaxis.min-i.globals.yAxisScale[0].niceMin)/a.invertedYRatio,r=(i.config.chart.selection.xaxis.max-i.config.chart.selection.xaxis.min)/a.invertedYRatio);var n={x:s,y:0,width:r,height:i.globals.gridHeight,translateX:0,translateY:0,selectionEnabled:!0};this.drawSelectionRect(n),this.makeSelectionRectDraggable(),typeof i.config.chart.events.selection=="function"&&i.config.chart.events.selection(this.ctx,{xaxis:{min:i.config.chart.selection.xaxis.min,max:i.config.chart.selection.xaxis.max},yaxis:{}})}}}},{key:"drawSelectionRect",value:function(i){var a=i.x,s=i.y,r=i.width,n=i.height,o=i.translateX,h=o===void 0?0:o,c=i.translateY,d=c===void 0?0:c,g=this.w,f=this.zoomRect,x=this.selectionRect;if(this.dragged||g.globals.selection!==null){var b={transform:"translate("+h+", "+d+")"};g.globals.zoomEnabled&&this.dragged&&(r<0&&(r=1),f.attr({x:a,y:s,width:r,height:n,fill:g.config.chart.zoom.zoomedArea.fill.color,"fill-opacity":g.config.chart.zoom.zoomedArea.fill.opacity,stroke:g.config.chart.zoom.zoomedArea.stroke.color,"stroke-width":g.config.chart.zoom.zoomedArea.stroke.width,"stroke-opacity":g.config.chart.zoom.zoomedArea.stroke.opacity}),X.setAttrs(f.node,b)),g.globals.selectionEnabled&&(x.attr({x:a,y:s,width:r>0?r:0,height:n>0?n:0,fill:g.config.chart.selection.fill.color,"fill-opacity":g.config.chart.selection.fill.opacity,stroke:g.config.chart.selection.stroke.color,"stroke-width":g.config.chart.selection.stroke.width,"stroke-dasharray":g.config.chart.selection.stroke.dashArray,"stroke-opacity":g.config.chart.selection.stroke.opacity}),X.setAttrs(x.node,b))}}},{key:"hideSelectionRect",value:function(i){i&&i.attr({x:0,y:0,width:0,height:0})}},{key:"selectionDrawing",value:function(i){var a=i.context,s=i.zoomtype,r=this.w,n=a,o=this.gridRect.getBoundingClientRect(),h=n.startX-1,c=n.startY,d=!1,g=!1,f=n.clientX-o.left-h,x=n.clientY-o.top-c,b={};return Math.abs(f+h)>r.globals.gridWidth?f=r.globals.gridWidth-h:n.clientX-o.left<0&&(f=h),h>n.clientX-o.left&&(d=!0,f=Math.abs(f)),c>n.clientY-o.top&&(g=!0,x=Math.abs(x)),b=s==="x"?{x:d?h-f:h,y:0,width:f,height:r.globals.gridHeight}:s==="y"?{x:0,y:g?c-x:c,width:r.globals.gridWidth,height:x}:{x:d?h-f:h,y:g?c-x:c,width:f,height:x},n.drawSelectionRect(b),n.selectionDragging("resizing"),b}},{key:"selectionDragging",value:function(i,a){var s=this,r=this.w,n=this.xyRatios,o=this.selectionRect,h=0;i==="resizing"&&(h=30);var c=function(g){return parseFloat(o.node.getAttribute(g))},d={x:c("x"),y:c("y"),width:c("width"),height:c("height")};r.globals.selection=d,typeof r.config.chart.events.selection=="function"&&r.globals.selectionEnabled&&(clearTimeout(this.w.globals.selectionResizeTimer),this.w.globals.selectionResizeTimer=window.setTimeout(function(){var g,f,x,b,v=s.gridRect.getBoundingClientRect(),y=o.node.getBoundingClientRect();r.globals.isRangeBar?(g=r.globals.yAxisScale[0].niceMin+(y.left-v.left)*n.invertedYRatio,f=r.globals.yAxisScale[0].niceMin+(y.right-v.left)*n.invertedYRatio,x=0,b=1):(g=r.globals.xAxisScale.niceMin+(y.left-v.left)*n.xRatio,f=r.globals.xAxisScale.niceMin+(y.right-v.left)*n.xRatio,x=r.globals.yAxisScale[0].niceMin+(v.bottom-y.bottom)*n.yRatio[0],b=r.globals.yAxisScale[0].niceMax-(y.top-v.top)*n.yRatio[0]);var w={xaxis:{min:g,max:f},yaxis:{min:x,max:b}};r.config.chart.events.selection(s.ctx,w),r.config.chart.brush.enabled&&r.config.chart.events.brushScrolled!==void 0&&r.config.chart.events.brushScrolled(s.ctx,w)},h))}},{key:"selectionDrawn",value:function(i){var a=i.context,s=i.zoomtype,r=this.w,n=a,o=this.xyRatios,h=this.ctx.toolbar;if(n.startX>n.endX){var c=n.startX;n.startX=n.endX,n.endX=c}if(n.startY>n.endY){var d=n.startY;n.startY=n.endY,n.endY=d}var g=void 0,f=void 0;r.globals.isRangeBar?(g=r.globals.yAxisScale[0].niceMin+n.startX*o.invertedYRatio,f=r.globals.yAxisScale[0].niceMin+n.endX*o.invertedYRatio):(g=r.globals.xAxisScale.niceMin+n.startX*o.xRatio,f=r.globals.xAxisScale.niceMin+n.endX*o.xRatio);var x=[],b=[];if(r.config.yaxis.forEach(function(A,k){var S=r.globals.seriesYAxisMap[k][0];x.push(r.globals.yAxisScale[k].niceMax-o.yRatio[S]*n.startY),b.push(r.globals.yAxisScale[k].niceMax-o.yRatio[S]*n.endY)}),n.dragged&&(n.dragX>10||n.dragY>10)&&g!==f){if(r.globals.zoomEnabled){var v=P.clone(r.globals.initialConfig.yaxis),y=P.clone(r.globals.initialConfig.xaxis);if(r.globals.zoomed=!0,r.config.xaxis.convertedCatToNumeric&&(g=Math.floor(g),f=Math.floor(f),g<1&&(g=1,f=r.globals.dataPoints),f-g<2&&(f=g+1)),s!=="xy"&&s!=="x"||(y={min:g,max:f}),s!=="xy"&&s!=="y"||v.forEach(function(A,k){v[k].min=b[k],v[k].max=x[k]}),h){var w=h.getBeforeZoomRange(y,v);w&&(y=w.xaxis?w.xaxis:y,v=w.yaxis?w.yaxis:v)}var l={xaxis:y};r.config.chart.group||(l.yaxis=v),n.ctx.updateHelpers._updateOptions(l,!1,n.w.config.chart.animations.dynamicAnimation.enabled),typeof r.config.chart.events.zoomed=="function"&&h.zoomCallback(y,v)}else if(r.globals.selectionEnabled){var u,m=null;u={min:g,max:f},s!=="xy"&&s!=="y"||(m=P.clone(r.config.yaxis)).forEach(function(A,k){m[k].min=b[k],m[k].max=x[k]}),r.globals.selection=n.selection,typeof r.config.chart.events.selection=="function"&&r.config.chart.events.selection(n.ctx,{xaxis:u,yaxis:m})}}}},{key:"panDragging",value:function(i){var a=i.context,s=this.w,r=a;if(s.globals.lastClientPosition.x!==void 0){var n=s.globals.lastClientPosition.x-r.clientX,o=s.globals.lastClientPosition.y-r.clientY;Math.abs(n)>Math.abs(o)&&n>0?this.moveDirection="left":Math.abs(n)>Math.abs(o)&&n<0?this.moveDirection="right":Math.abs(o)>Math.abs(n)&&o>0?this.moveDirection="up":Math.abs(o)>Math.abs(n)&&o<0&&(this.moveDirection="down")}s.globals.lastClientPosition={x:r.clientX,y:r.clientY};var h=s.globals.isRangeBar?s.globals.minY:s.globals.minX,c=s.globals.isRangeBar?s.globals.maxY:s.globals.maxX;s.config.xaxis.convertedCatToNumeric||r.panScrolled(h,c)}},{key:"delayedPanScrolled",value:function(){var i=this.w,a=i.globals.minX,s=i.globals.maxX,r=(i.globals.maxX-i.globals.minX)/2;this.moveDirection==="left"?(a=i.globals.minX+r,s=i.globals.maxX+r):this.moveDirection==="right"&&(a=i.globals.minX-r,s=i.globals.maxX-r),a=Math.floor(a),s=Math.floor(s),this.updateScrolledChart({xaxis:{min:a,max:s}},a,s)}},{key:"panScrolled",value:function(i,a){var s=this.w,r=this.xyRatios,n=P.clone(s.globals.initialConfig.yaxis),o=r.xRatio,h=s.globals.minX,c=s.globals.maxX;s.globals.isRangeBar&&(o=r.invertedYRatio,h=s.globals.minY,c=s.globals.maxY),this.moveDirection==="left"?(i=h+s.globals.gridWidth/15*o,a=c+s.globals.gridWidth/15*o):this.moveDirection==="right"&&(i=h-s.globals.gridWidth/15*o,a=c-s.globals.gridWidth/15*o),s.globals.isRangeBar||(is.globals.initialMaxX)&&(i=h,a=c);var d={xaxis:{min:i,max:a}};s.config.chart.group||(d.yaxis=n),this.updateScrolledChart(d,i,a)}},{key:"updateScrolledChart",value:function(i,a,s){var r=this.w;this.ctx.updateHelpers._updateOptions(i,!1,!1),typeof r.config.chart.events.scrolled=="function"&&r.config.chart.events.scrolled(this.ctx,{xaxis:{min:a,max:s}})}}]),t}(),Nt=function(){function p(e){F(this,p),this.w=e.w,this.ttCtx=e,this.ctx=e.ctx}return R(p,[{key:"getNearestValues",value:function(e){var t=e.hoverArea,i=e.elGrid,a=e.clientX,s=e.clientY,r=this.w,n=i.getBoundingClientRect(),o=n.width,h=n.height,c=o/(r.globals.dataPoints-1),d=h/r.globals.dataPoints,g=this.hasBars();!r.globals.comboCharts&&!g||r.config.xaxis.convertedCatToNumeric||(c=o/r.globals.dataPoints);var f=a-n.left-r.globals.barPadForNumericAxis,x=s-n.top;f<0||x<0||f>o||x>h?(t.classList.remove("hovering-zoom"),t.classList.remove("hovering-pan")):r.globals.zoomEnabled?(t.classList.remove("hovering-pan"),t.classList.add("hovering-zoom")):r.globals.panEnabled&&(t.classList.remove("hovering-zoom"),t.classList.add("hovering-pan"));var b=Math.round(f/c),v=Math.floor(x/d);g&&!r.config.xaxis.convertedCatToNumeric&&(b=Math.ceil(f/c),b-=1);var y=null,w=null,l=r.globals.seriesXvalues.map(function(S){return S.filter(function(L){return P.isNumber(L)})}),u=r.globals.seriesYvalues.map(function(S){return S.filter(function(L){return P.isNumber(L)})});if(r.globals.isXNumeric){var m=this.ttCtx.getElGrid().getBoundingClientRect(),A=f*(m.width/o),k=x*(m.height/h);y=(w=this.closestInMultiArray(A,k,l,u)).index,b=w.j,y!==null&&(l=r.globals.seriesXvalues[y],b=(w=this.closestInArray(A,l)).index)}return r.globals.capturedSeriesIndex=y===null?-1:y,(!b||b<1)&&(b=0),r.globals.isBarHorizontal?r.globals.capturedDataPointIndex=v:r.globals.capturedDataPointIndex=b,{capturedSeries:y,j:r.globals.isBarHorizontal?v:b,hoverX:f,hoverY:x}}},{key:"closestInMultiArray",value:function(e,t,i,a){var s=this.w,r=0,n=null,o=-1;s.globals.series.length>1?r=this.getFirstActiveXArray(i):n=0;var h=i[r][0],c=Math.abs(e-h);if(i.forEach(function(f){f.forEach(function(x,b){var v=Math.abs(e-x);v<=c&&(c=v,o=b)})}),o!==-1){var d=a[r][o],g=Math.abs(t-d);n=r,a.forEach(function(f,x){var b=Math.abs(t-f[o]);b<=g&&(g=b,n=x)})}return{index:n,j:o}}},{key:"getFirstActiveXArray",value:function(e){for(var t=this.w,i=0,a=e.map(function(r,n){return r.length>0?n:-1}),s=0;s0)for(var a=0;a *")):this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-series-markers-wrap > *")}},{key:"getAllMarkers",value:function(){var e=this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-series-markers-wrap");(e=te(e)).sort(function(i,a){var s=Number(i.getAttribute("data:realIndex")),r=Number(a.getAttribute("data:realIndex"));return rs?-1:0});var t=[];return e.forEach(function(i){t.push(i.querySelector(".apexcharts-marker"))}),t}},{key:"hasMarkers",value:function(e){return this.getElMarkers(e).length>0}},{key:"getPathFromPoint",value:function(e,t){var i=Number(e.getAttribute("cx")),a=Number(e.getAttribute("cy")),s=e.getAttribute("shape");return new X(this.ctx).getMarkerPath(i,a,s,t)}},{key:"getElBars",value:function(){return this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-bar-series, .apexcharts-candlestick-series, .apexcharts-boxPlot-series, .apexcharts-rangebar-series")}},{key:"hasBars",value:function(){return this.getElBars().length>0}},{key:"getHoverMarkerSize",value:function(e){var t=this.w,i=t.config.markers.hover.size;return i===void 0&&(i=t.globals.markers.size[e]+t.config.markers.hover.sizeOffset),i}},{key:"toggleAllTooltipSeriesGroups",value:function(e){var t=this.w,i=this.ttCtx;i.allTooltipSeriesGroups.length===0&&(i.allTooltipSeriesGroups=t.globals.dom.baseEl.querySelectorAll(".apexcharts-tooltip-series-group"));for(var a=i.allTooltipSeriesGroups,s=0;s
').concat(C.attrs.name,"
"),L+="
".concat(C.val,"
")}),l.innerHTML=S+"
",u.innerHTML=L+""};n?h.globals.seriesGoals[t][i]&&Array.isArray(h.globals.seriesGoals[t][i])?m():(l.innerHTML="",u.innerHTML=""):m()}else l.innerHTML="",u.innerHTML="";if(b!==null&&(a[t].querySelector(".apexcharts-tooltip-text-z-label").innerHTML=h.config.tooltip.z.title,a[t].querySelector(".apexcharts-tooltip-text-z-value").innerHTML=b!==void 0?b:""),n&&v[0]){if(h.config.tooltip.hideEmptySeries){var A=a[t].querySelector(".apexcharts-tooltip-marker"),k=a[t].querySelector(".apexcharts-tooltip-text");parseFloat(d)==0?(A.style.display="none",k.style.display="none"):(A.style.display="block",k.style.display="block")}d==null||h.globals.ancillaryCollapsedSeriesIndices.indexOf(t)>-1||h.globals.collapsedSeriesIndices.indexOf(t)>-1||Array.isArray(c.tConfig.enabledOnSeries)&&c.tConfig.enabledOnSeries.indexOf(t)===-1?v[0].parentNode.style.display="none":v[0].parentNode.style.display=h.config.tooltip.items.display}else Array.isArray(c.tConfig.enabledOnSeries)&&c.tConfig.enabledOnSeries.indexOf(t)===-1&&(v[0].parentNode.style.display="none")}},{key:"toggleActiveInactiveSeries",value:function(e,t){var i=this.w;if(e)this.tooltipUtil.toggleAllTooltipSeriesGroups("enable");else{this.tooltipUtil.toggleAllTooltipSeriesGroups("disable");var a=i.globals.dom.baseEl.querySelector(".apexcharts-tooltip-series-group-".concat(t));a&&(a.classList.add("apexcharts-active"),a.style.display=i.config.tooltip.items.display)}}},{key:"getValuesToPrint",value:function(e){var t=e.i,i=e.j,a=this.w,s=this.ctx.series.filteredSeriesX(),r="",n="",o=null,h=null,c={series:a.globals.series,seriesIndex:t,dataPointIndex:i,w:a},d=a.globals.ttZFormatter;i===null?h=a.globals.series[t]:a.globals.isXNumeric&&a.config.chart.type!=="treemap"?(r=s[t][i],s[t].length===0&&(r=s[this.tooltipUtil.getFirstActiveXArray(s)][i])):r=a.globals.labels[i]!==void 0?a.globals.labels[i]:"";var g=r;return a.globals.isXNumeric&&a.config.xaxis.type==="datetime"?r=new ze(this.ctx).xLabelFormat(a.globals.ttKeyFormatter,g,g,{i:void 0,dateFormatter:new K(this.ctx).formatDate,w:this.w}):r=a.globals.isBarHorizontal?a.globals.yLabelFormatters[0](g,c):a.globals.xLabelFormatter(g,c),a.config.tooltip.x.formatter!==void 0&&(r=a.globals.ttKeyFormatter(g,c)),a.globals.seriesZ.length>0&&a.globals.seriesZ[t].length>0&&(o=d(a.globals.seriesZ[t][i],a)),n=typeof a.config.xaxis.tooltip.formatter=="function"?a.globals.xaxisTooltipFormatter(g,c):r,{val:Array.isArray(h)?h.join(" "):h,xVal:Array.isArray(r)?r.join(" "):r,xAxisTTVal:Array.isArray(n)?n.join(" "):n,zVal:o}}},{key:"handleCustomTooltip",value:function(e){var t=e.i,i=e.j,a=e.y1,s=e.y2,r=e.w,n=this.ttCtx.getElTooltip(),o=r.config.tooltip.custom;Array.isArray(o)&&o[t]&&(o=o[t]),n.innerHTML=o({ctx:this.ctx,series:r.globals.series,seriesIndex:t,dataPointIndex:i,y1:a,y2:s,w:r})}}]),p}(),Wt=function(){function p(e){F(this,p),this.ttCtx=e,this.ctx=e.ctx,this.w=e.w}return R(p,[{key:"moveXCrosshairs",value:function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null,i=this.ttCtx,a=this.w,s=i.getElXCrosshairs(),r=e-i.xcrosshairsWidth/2,n=a.globals.labels.slice().length;if(t!==null&&(r=a.globals.gridWidth/n*t),s===null||a.globals.isBarHorizontal||(s.setAttribute("x",r),s.setAttribute("x1",r),s.setAttribute("x2",r),s.setAttribute("y2",a.globals.gridHeight),s.classList.add("apexcharts-active")),r<0&&(r=0),r>a.globals.gridWidth&&(r=a.globals.gridWidth),i.isXAxisTooltipEnabled){var o=r;a.config.xaxis.crosshairs.width!=="tickWidth"&&a.config.xaxis.crosshairs.width!=="barWidth"||(o=r+i.xcrosshairsWidth/2),this.moveXAxisTooltip(o)}}},{key:"moveYCrosshairs",value:function(e){var t=this.ttCtx;t.ycrosshairs!==null&&X.setAttrs(t.ycrosshairs,{y1:e,y2:e}),t.ycrosshairsHidden!==null&&X.setAttrs(t.ycrosshairsHidden,{y1:e,y2:e})}},{key:"moveXAxisTooltip",value:function(e){var t=this.w,i=this.ttCtx;if(i.xaxisTooltip!==null&&i.xcrosshairsWidth!==0){i.xaxisTooltip.classList.add("apexcharts-active");var a=i.xaxisOffY+t.config.xaxis.tooltip.offsetY+t.globals.translateY+1+t.config.xaxis.offsetY;if(e-=i.xaxisTooltip.getBoundingClientRect().width/2,!isNaN(e)){e+=t.globals.translateX;var s;s=new X(this.ctx).getTextRects(i.xaxisTooltipText.innerHTML),i.xaxisTooltipText.style.minWidth=s.width+"px",i.xaxisTooltip.style.left=e+"px",i.xaxisTooltip.style.top=a+"px"}}}},{key:"moveYAxisTooltip",value:function(e){var t=this.w,i=this.ttCtx;i.yaxisTTEls===null&&(i.yaxisTTEls=t.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxistooltip"));var a=parseInt(i.ycrosshairsHidden.getAttribute("y1"),10),s=t.globals.translateY+a,r=i.yaxisTTEls[e].getBoundingClientRect().height,n=t.globals.translateYAxisX[e]-2;t.config.yaxis[e].opposite&&(n-=26),s-=r/2,t.globals.ignoreYAxisIndexes.indexOf(e)===-1?(i.yaxisTTEls[e].classList.add("apexcharts-active"),i.yaxisTTEls[e].style.top=s+"px",i.yaxisTTEls[e].style.left=n+t.config.yaxis[e].tooltip.offsetX+"px"):i.yaxisTTEls[e].classList.remove("apexcharts-active")}},{key:"moveTooltip",value:function(e,t){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:null,a=this.w,s=this.ttCtx,r=s.getElTooltip(),n=s.tooltipRect,o=i!==null?parseFloat(i):1,h=parseFloat(e)+o+5,c=parseFloat(t)+o/2;if(h>a.globals.gridWidth/2&&(h=h-n.ttWidth-o-10),h>a.globals.gridWidth-n.ttWidth-10&&(h=a.globals.gridWidth-n.ttWidth),h<-20&&(h=-20),a.config.tooltip.followCursor){var d=s.getElGrid().getBoundingClientRect();(h=s.e.clientX-d.left)>a.globals.gridWidth/2&&(h-=s.tooltipRect.ttWidth),(c=s.e.clientY+a.globals.translateY-d.top)>a.globals.gridHeight/2&&(c-=s.tooltipRect.ttHeight)}else a.globals.isBarHorizontal||n.ttHeight/2+c>a.globals.gridHeight&&(c=a.globals.gridHeight-n.ttHeight+a.globals.translateY);isNaN(h)||(h+=a.globals.translateX,r.style.left=h+"px",r.style.top=c+"px")}},{key:"moveMarkers",value:function(e,t){var i=this.w,a=this.ttCtx;if(i.globals.markers.size[e]>0)for(var s=i.globals.dom.baseEl.querySelectorAll(" .apexcharts-series[data\\:realIndex='".concat(e,"'] .apexcharts-marker")),r=0;r0){var x=f.getAttribute("shape"),b=h.getMarkerPath(s,r,x,1.5*d);f.setAttribute("d",b)}this.moveXCrosshairs(s),o.fixedTooltip||this.moveTooltip(s,r,d)}}},{key:"moveDynamicPointsOnHover",value:function(e){var t,i=this.ttCtx,a=i.w,s=0,r=0,n=a.globals.pointsArray,o=new re(this.ctx),h=new X(this.ctx);t=o.getActiveConfigSeriesIndex("asc",["line","area","scatter","bubble"]);var c=i.tooltipUtil.getHoverMarkerSize(t);n[t]&&(s=n[t][e][0],r=n[t][e][1]);var d=i.tooltipUtil.getAllMarkers();if(d!==null)for(var g=0;g0){var w=h.getMarkerPath(s,x,v,c);d[g].setAttribute("d",w)}else d[g].setAttribute("d","")}}this.moveXCrosshairs(s),i.fixedTooltip||this.moveTooltip(s,r||a.globals.gridHeight,c)}},{key:"moveStickyTooltipOverBars",value:function(e,t){var i=this.w,a=this.ttCtx,s=i.globals.columnSeries?i.globals.columnSeries.length:i.globals.series.length,r=s>=2&&s%2==0?Math.floor(s/2):Math.floor(s/2)+1;i.globals.isBarHorizontal&&(r=new re(this.ctx).getActiveConfigSeriesIndex("desc")+1);var n=i.globals.dom.baseEl.querySelector(".apexcharts-bar-series .apexcharts-series[rel='".concat(r,"'] path[j='").concat(e,"'], .apexcharts-candlestick-series .apexcharts-series[rel='").concat(r,"'] path[j='").concat(e,"'], .apexcharts-boxPlot-series .apexcharts-series[rel='").concat(r,"'] path[j='").concat(e,"'], .apexcharts-rangebar-series .apexcharts-series[rel='").concat(r,"'] path[j='").concat(e,"']"));n||typeof t!="number"||(n=i.globals.dom.baseEl.querySelector(".apexcharts-bar-series .apexcharts-series[data\\:realIndex='".concat(t,"'] path[j='").concat(e,`'], + .apexcharts-candlestick-series .apexcharts-series[data\\:realIndex='`).concat(t,"'] path[j='").concat(e,`'], + .apexcharts-boxPlot-series .apexcharts-series[data\\:realIndex='`).concat(t,"'] path[j='").concat(e,`'], + .apexcharts-rangebar-series .apexcharts-series[data\\:realIndex='`).concat(t,"'] path[j='").concat(e,"']")));var o=n?parseFloat(n.getAttribute("cx")):0,h=n?parseFloat(n.getAttribute("cy")):0,c=n?parseFloat(n.getAttribute("barWidth")):0,d=a.getElGrid().getBoundingClientRect(),g=n&&(n.classList.contains("apexcharts-candlestick-area")||n.classList.contains("apexcharts-boxPlot-area"));i.globals.isXNumeric?(n&&!g&&(o-=s%2!=0?c/2:0),n&&g&&i.globals.comboCharts&&(o-=c/2)):i.globals.isBarHorizontal||(o=a.xAxisTicksPositions[e-1]+a.dataPointsDividedWidth/2,isNaN(o)&&(o=a.xAxisTicksPositions[e]-a.dataPointsDividedWidth/2)),i.globals.isBarHorizontal?h-=a.tooltipRect.ttHeight:i.config.tooltip.followCursor?h=a.e.clientY-d.top-a.tooltipRect.ttHeight/2:h+a.tooltipRect.ttHeight+15>i.globals.gridHeight&&(h=i.globals.gridHeight),i.globals.isBarHorizontal||this.moveXCrosshairs(o),a.fixedTooltip||this.moveTooltip(o,h||i.globals.gridHeight)}}]),p}(),$i=function(){function p(e){F(this,p),this.w=e.w,this.ttCtx=e,this.ctx=e.ctx,this.tooltipPosition=new Wt(e)}return R(p,[{key:"drawDynamicPoints",value:function(){var e=this.w,t=new X(this.ctx),i=new ye(this.ctx),a=e.globals.dom.baseEl.querySelectorAll(".apexcharts-series");a=te(a),e.config.chart.stacked&&a.sort(function(d,g){return parseFloat(d.getAttribute("data:realIndex"))-parseFloat(g.getAttribute("data:realIndex"))});for(var s=0;s2&&arguments[2]!==void 0?arguments[2]:null,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:null,s=this.w;s.config.chart.type!=="bubble"&&this.newPointSize(e,t);var r=t.getAttribute("cx"),n=t.getAttribute("cy");if(i!==null&&a!==null&&(r=i,n=a),this.tooltipPosition.moveXCrosshairs(r),!this.fixedTooltip){if(s.config.chart.type==="radar"){var o=this.ttCtx.getElGrid().getBoundingClientRect();r=this.ttCtx.e.clientX-o.left}this.tooltipPosition.moveTooltip(r,n,s.config.markers.hover.size)}}},{key:"enlargePoints",value:function(e){for(var t=this.w,i=this,a=this.ttCtx,s=e,r=t.globals.dom.baseEl.querySelectorAll(".apexcharts-series:not(.apexcharts-series-collapsed) .apexcharts-marker"),n=t.config.markers.hover.size,o=0;o=0){var a=this.ttCtx.tooltipUtil.getPathFromPoint(e[t],i);e[t].setAttribute("d",a)}else e[t].setAttribute("d","M0,0")}}}]),p}(),Ji=function(){function p(e){F(this,p),this.w=e.w;var t=this.w;this.ttCtx=e,this.isVerticalGroupedRangeBar=!t.globals.isBarHorizontal&&t.config.chart.type==="rangeBar"&&t.config.plotOptions.bar.rangeBarGroupRows}return R(p,[{key:"getAttr",value:function(e,t){return parseFloat(e.target.getAttribute(t))}},{key:"handleHeatTreeTooltip",value:function(e){var t=e.e,i=e.opt,a=e.x,s=e.y,r=e.type,n=this.ttCtx,o=this.w;if(t.target.classList.contains("apexcharts-".concat(r,"-rect"))){var h=this.getAttr(t,"i"),c=this.getAttr(t,"j"),d=this.getAttr(t,"cx"),g=this.getAttr(t,"cy"),f=this.getAttr(t,"width"),x=this.getAttr(t,"height");if(n.tooltipLabels.drawSeriesTexts({ttItems:i.ttItems,i:h,j:c,shared:!1,e:t}),o.globals.capturedSeriesIndex=h,o.globals.capturedDataPointIndex=c,a=d+n.tooltipRect.ttWidth/2+f,s=g+n.tooltipRect.ttHeight/2-x/2,n.tooltipPosition.moveXCrosshairs(d+f/2),a>o.globals.gridWidth/2&&(a=d-n.tooltipRect.ttWidth/2+f),n.w.config.tooltip.followCursor){var b=o.globals.dom.elWrap.getBoundingClientRect();a=o.globals.clientX-b.left-(a>o.globals.gridWidth/2?n.tooltipRect.ttWidth:0),s=o.globals.clientY-b.top-(s>o.globals.gridHeight/2?n.tooltipRect.ttHeight:0)}}return{x:a,y:s}}},{key:"handleMarkerTooltip",value:function(e){var t,i,a=e.e,s=e.opt,r=e.x,n=e.y,o=this.w,h=this.ttCtx;if(a.target.classList.contains("apexcharts-marker")){var c=parseInt(s.paths.getAttribute("cx"),10),d=parseInt(s.paths.getAttribute("cy"),10),g=parseFloat(s.paths.getAttribute("val"));if(i=parseInt(s.paths.getAttribute("rel"),10),t=parseInt(s.paths.parentNode.parentNode.parentNode.getAttribute("rel"),10)-1,h.intersect){var f=P.findAncestor(s.paths,"apexcharts-series");f&&(t=parseInt(f.getAttribute("data:realIndex"),10))}if(h.tooltipLabels.drawSeriesTexts({ttItems:s.ttItems,i:t,j:i,shared:!h.showOnIntersect&&o.config.tooltip.shared,e:a}),a.type==="mouseup"&&h.markerClick(a,t,i),o.globals.capturedSeriesIndex=t,o.globals.capturedDataPointIndex=i,r=c,n=d+o.globals.translateY-1.4*h.tooltipRect.ttHeight,h.w.config.tooltip.followCursor){var x=h.getElGrid().getBoundingClientRect();n=h.e.clientY+o.globals.translateY-x.top}g<0&&(n=d),h.marker.enlargeCurrentPoint(i,s.paths,r,n)}return{x:r,y:n}}},{key:"handleBarTooltip",value:function(e){var t,i,a=e.e,s=e.opt,r=this.w,n=this.ttCtx,o=n.getElTooltip(),h=0,c=0,d=0,g=this.getBarTooltipXY({e:a,opt:s});t=g.i;var f=g.j;r.globals.capturedSeriesIndex=t,r.globals.capturedDataPointIndex=f,r.globals.isBarHorizontal&&n.tooltipUtil.hasBars()||!r.config.tooltip.shared?(c=g.x,d=g.y,i=Array.isArray(r.config.stroke.width)?r.config.stroke.width[t]:r.config.stroke.width,h=c):r.globals.comboCharts||r.config.tooltip.shared||(h/=2),isNaN(d)&&(d=r.globals.svgHeight-n.tooltipRect.ttHeight);var x=parseInt(s.paths.parentNode.getAttribute("data:realIndex"),10);if(r.globals.isMultipleYAxis?r.config.yaxis[x]&&r.config.yaxis[x].reversed:r.config.yaxis[0].reversed,c+n.tooltipRect.ttWidth>r.globals.gridWidth?c-=n.tooltipRect.ttWidth:c<0&&(c=0),n.w.config.tooltip.followCursor){var b=n.getElGrid().getBoundingClientRect();d=n.e.clientY-b.top}n.tooltip===null&&(n.tooltip=r.globals.dom.baseEl.querySelector(".apexcharts-tooltip")),r.config.tooltip.shared||(r.globals.comboBarCount>0?n.tooltipPosition.moveXCrosshairs(h+i/2):n.tooltipPosition.moveXCrosshairs(h)),!n.fixedTooltip&&(!r.config.tooltip.shared||r.globals.isBarHorizontal&&n.tooltipUtil.hasBars())&&(d=d+r.globals.translateY-n.tooltipRect.ttHeight/2,o.style.left=c+r.globals.translateX+"px",o.style.top=d+"px")}},{key:"getBarTooltipXY",value:function(e){var t=this,i=e.e,a=e.opt,s=this.w,r=null,n=this.ttCtx,o=0,h=0,c=0,d=0,g=0,f=i.target.classList;if(f.contains("apexcharts-bar-area")||f.contains("apexcharts-candlestick-area")||f.contains("apexcharts-boxPlot-area")||f.contains("apexcharts-rangebar-area")){var x=i.target,b=x.getBoundingClientRect(),v=a.elGrid.getBoundingClientRect(),y=b.height;g=b.height;var w=b.width,l=parseInt(x.getAttribute("cx"),10),u=parseInt(x.getAttribute("cy"),10);d=parseFloat(x.getAttribute("barWidth"));var m=i.type==="touchmove"?i.touches[0].clientX:i.clientX;r=parseInt(x.getAttribute("j"),10),o=parseInt(x.parentNode.getAttribute("rel"),10)-1;var A=x.getAttribute("data-range-y1"),k=x.getAttribute("data-range-y2");s.globals.comboCharts&&(o=parseInt(x.parentNode.getAttribute("data:realIndex"),10));var S=function(C){return s.globals.isXNumeric?l-w/2:t.isVerticalGroupedRangeBar?l+w/2:l-n.dataPointsDividedWidth+w/2},L=function(){return u-n.dataPointsDividedHeight+y/2-n.tooltipRect.ttHeight/2};n.tooltipLabels.drawSeriesTexts({ttItems:a.ttItems,i:o,j:r,y1:A?parseInt(A,10):null,y2:k?parseInt(k,10):null,shared:!n.showOnIntersect&&s.config.tooltip.shared,e:i}),s.config.tooltip.followCursor?s.globals.isBarHorizontal?(h=m-v.left+15,c=L()):(h=S(),c=i.clientY-v.top-n.tooltipRect.ttHeight/2-15):s.globals.isBarHorizontal?((h=l)0&&i.setAttribute("width",t.xcrosshairsWidth)}},{key:"handleYCrosshair",value:function(){var e=this.w,t=this.ttCtx;t.ycrosshairs=e.globals.dom.baseEl.querySelector(".apexcharts-ycrosshairs"),t.ycrosshairsHidden=e.globals.dom.baseEl.querySelector(".apexcharts-ycrosshairs-hidden")}},{key:"drawYaxisTooltipText",value:function(e,t,i){var a=this.ttCtx,s=this.w,r=s.globals,n=r.seriesYAxisMap[e];if(a.yaxisTooltips[e]&&n.length>0){var o=r.yLabelFormatters[e],h=a.getElGrid().getBoundingClientRect(),c=n[0],d=0;i.yRatio.length>1&&(d=c);var g=(t-h.top)*i.yRatio[d],f=r.maxYArr[c]-r.minYArr[c],x=r.minYArr[c]+(f-g);s.config.yaxis[e].reversed&&(x=r.maxYArr[c]-(f-g)),a.tooltipPosition.moveYCrosshairs(t-h.top),a.yaxisTooltipText[e].innerHTML=o(x),a.tooltipPosition.moveYAxisTooltip(e)}}}]),p}(),At=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w;var t=this.w;this.tConfig=t.config.tooltip,this.tooltipUtil=new Nt(this),this.tooltipLabels=new Zi(this),this.tooltipPosition=new Wt(this),this.marker=new $i(this),this.intersect=new Ji(this),this.axesTooltip=new Ki(this),this.showOnIntersect=this.tConfig.intersect,this.showTooltipTitle=this.tConfig.x.show,this.fixedTooltip=this.tConfig.fixed.enabled,this.xaxisTooltip=null,this.yaxisTTEls=null,this.isBarShared=!t.globals.isBarHorizontal&&this.tConfig.shared,this.lastHoverTime=Date.now()}return R(p,[{key:"getElTooltip",value:function(e){return e||(e=this),e.w.globals.dom.baseEl?e.w.globals.dom.baseEl.querySelector(".apexcharts-tooltip"):null}},{key:"getElXCrosshairs",value:function(){return this.w.globals.dom.baseEl.querySelector(".apexcharts-xcrosshairs")}},{key:"getElGrid",value:function(){return this.w.globals.dom.baseEl.querySelector(".apexcharts-grid")}},{key:"drawTooltip",value:function(e){var t=this.w;this.xyRatios=e,this.isXAxisTooltipEnabled=t.config.xaxis.tooltip.enabled&&t.globals.axisCharts,this.yaxisTooltips=t.config.yaxis.map(function(r,n){return!!(r.show&&r.tooltip.enabled&&t.globals.axisCharts)}),this.allTooltipSeriesGroups=[],t.globals.axisCharts||(this.showTooltipTitle=!1);var i=document.createElement("div");if(i.classList.add("apexcharts-tooltip"),t.config.tooltip.cssClass&&i.classList.add(t.config.tooltip.cssClass),i.classList.add("apexcharts-theme-".concat(this.tConfig.theme)),t.globals.dom.elWrap.appendChild(i),t.globals.axisCharts){this.axesTooltip.drawXaxisTooltip(),this.axesTooltip.drawYaxisTooltip(),this.axesTooltip.setXCrosshairWidth(),this.axesTooltip.handleYCrosshair();var a=new Me(this.ctx);this.xAxisTicksPositions=a.getXAxisTicksPositions()}if(!t.globals.comboCharts&&!this.tConfig.intersect&&t.config.chart.type!=="rangeBar"||this.tConfig.shared||(this.showOnIntersect=!0),t.config.markers.size!==0&&t.globals.markers.largestSize!==0||this.marker.drawDynamicPoints(this),t.globals.collapsedSeries.length!==t.globals.series.length){this.dataPointsDividedHeight=t.globals.gridHeight/t.globals.dataPoints,this.dataPointsDividedWidth=t.globals.gridWidth/t.globals.dataPoints,this.showTooltipTitle&&(this.tooltipTitle=document.createElement("div"),this.tooltipTitle.classList.add("apexcharts-tooltip-title"),this.tooltipTitle.style.fontFamily=this.tConfig.style.fontFamily||t.config.chart.fontFamily,this.tooltipTitle.style.fontSize=this.tConfig.style.fontSize,i.appendChild(this.tooltipTitle));var s=t.globals.series.length;(t.globals.xyCharts||t.globals.comboCharts)&&this.tConfig.shared&&(s=this.showOnIntersect?1:t.globals.series.length),this.legendLabels=t.globals.dom.baseEl.querySelectorAll(".apexcharts-legend-text"),this.ttItems=this.createTTElements(s),this.addSVGEvents()}}},{key:"createTTElements",value:function(e){for(var t=this,i=this.w,a=[],s=this.getElTooltip(),r=function(o){var h=document.createElement("div");h.classList.add("apexcharts-tooltip-series-group","apexcharts-tooltip-series-group-".concat(o)),h.style.order=i.config.tooltip.inverseOrder?e-o:o+1;var c=document.createElement("span");c.classList.add("apexcharts-tooltip-marker"),c.style.backgroundColor=i.globals.colors[o],h.appendChild(c);var d=document.createElement("div");d.classList.add("apexcharts-tooltip-text"),d.style.fontFamily=t.tConfig.style.fontFamily||i.config.chart.fontFamily,d.style.fontSize=t.tConfig.style.fontSize,["y","goals","z"].forEach(function(g){var f=document.createElement("div");f.classList.add("apexcharts-tooltip-".concat(g,"-group"));var x=document.createElement("span");x.classList.add("apexcharts-tooltip-text-".concat(g,"-label")),f.appendChild(x);var b=document.createElement("span");b.classList.add("apexcharts-tooltip-text-".concat(g,"-value")),f.appendChild(b),d.appendChild(f)}),h.appendChild(d),s.appendChild(h),a.push(h)},n=0;n0&&this.addPathsEventListeners(x,d),this.tooltipUtil.hasBars()&&!this.tConfig.shared&&this.addDatapointEventsListeners(d)}}},{key:"drawFixedTooltipRect",value:function(){var e=this.w,t=this.getElTooltip(),i=t.getBoundingClientRect(),a=i.width+10,s=i.height+10,r=this.tConfig.fixed.offsetX,n=this.tConfig.fixed.offsetY,o=this.tConfig.fixed.position.toLowerCase();return o.indexOf("right")>-1&&(r=r+e.globals.svgWidth-a+10),o.indexOf("bottom")>-1&&(n=n+e.globals.svgHeight-s-10),t.style.left=r+"px",t.style.top=n+"px",{x:r,y:n,ttWidth:a,ttHeight:s}}},{key:"addDatapointEventsListeners",value:function(e){var t=this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-series-markers .apexcharts-marker, .apexcharts-bar-area, .apexcharts-candlestick-area, .apexcharts-boxPlot-area, .apexcharts-rangebar-area");this.addPathsEventListeners(t,e)}},{key:"addPathsEventListeners",value:function(e,t){for(var i=this,a=function(r){var n={paths:e[r],tooltipEl:t.tooltipEl,tooltipY:t.tooltipY,tooltipX:t.tooltipX,elGrid:t.elGrid,hoverArea:t.hoverArea,ttItems:t.ttItems};["mousemove","mouseup","touchmove","mouseout","touchend"].map(function(o){return e[r].addEventListener(o,i.onSeriesHover.bind(i,n),{capture:!1,passive:!0})})},s=0;s=100?this.seriesHover(e,t):(clearTimeout(this.seriesHoverTimeout),this.seriesHoverTimeout=setTimeout(function(){i.seriesHover(e,t)},100-a))}},{key:"seriesHover",value:function(e,t){var i=this;this.lastHoverTime=Date.now();var a=[],s=this.w;s.config.chart.group&&(a=this.ctx.getGroupedCharts()),s.globals.axisCharts&&(s.globals.minX===-1/0&&s.globals.maxX===1/0||s.globals.dataPoints===0)||(a.length?a.forEach(function(r){var n=i.getElTooltip(r),o={paths:e.paths,tooltipEl:n,tooltipY:e.tooltipY,tooltipX:e.tooltipX,elGrid:e.elGrid,hoverArea:e.hoverArea,ttItems:r.w.globals.tooltip.ttItems};r.w.globals.minX===i.w.globals.minX&&r.w.globals.maxX===i.w.globals.maxX&&r.w.globals.tooltip.seriesHoverByContext({chartCtx:r,ttCtx:r.w.globals.tooltip,opt:o,e:t})}):this.seriesHoverByContext({chartCtx:this.ctx,ttCtx:this.w.globals.tooltip,opt:e,e:t}))}},{key:"seriesHoverByContext",value:function(e){var t=e.chartCtx,i=e.ttCtx,a=e.opt,s=e.e,r=t.w,n=this.getElTooltip(t);n&&(i.tooltipRect={x:0,y:0,ttWidth:n.getBoundingClientRect().width,ttHeight:n.getBoundingClientRect().height},i.e=s,i.tooltipUtil.hasBars()&&!r.globals.comboCharts&&!i.isBarShared&&this.tConfig.onDatasetHover.highlightDataSeries&&new re(t).toggleSeriesOnHover(s,s.target.parentNode),i.fixedTooltip&&i.drawFixedTooltipRect(),r.globals.axisCharts?i.axisChartsTooltips({e:s,opt:a,tooltipRect:i.tooltipRect}):i.nonAxisChartsTooltips({e:s,opt:a,tooltipRect:i.tooltipRect}))}},{key:"axisChartsTooltips",value:function(e){var t,i,a=e.e,s=e.opt,r=this.w,n=s.elGrid.getBoundingClientRect(),o=a.type==="touchmove"?a.touches[0].clientX:a.clientX,h=a.type==="touchmove"?a.touches[0].clientY:a.clientY;if(this.clientY=h,this.clientX=o,r.globals.capturedSeriesIndex=-1,r.globals.capturedDataPointIndex=-1,hn.top+n.height)this.handleMouseOut(s);else{if(Array.isArray(this.tConfig.enabledOnSeries)&&!r.config.tooltip.shared){var c=parseInt(s.paths.getAttribute("index"),10);if(this.tConfig.enabledOnSeries.indexOf(c)<0)return void this.handleMouseOut(s)}var d=this.getElTooltip(),g=this.getElXCrosshairs(),f=[];r.config.chart.group&&(f=this.ctx.getSyncedCharts());var x=r.globals.xyCharts||r.config.chart.type==="bar"&&!r.globals.isBarHorizontal&&this.tooltipUtil.hasBars()&&this.tConfig.shared||r.globals.comboCharts&&this.tooltipUtil.hasBars();if(a.type==="mousemove"||a.type==="touchmove"||a.type==="mouseup"){if(r.globals.collapsedSeries.length+r.globals.ancillaryCollapsedSeries.length===r.globals.series.length)return;g!==null&&g.classList.add("apexcharts-active");var b=this.yaxisTooltips.filter(function(w){return w===!0});if(this.ycrosshairs!==null&&b.length&&this.ycrosshairs.classList.add("apexcharts-active"),x&&!this.showOnIntersect||f.length>1)this.handleStickyTooltip(a,o,h,s);else if(r.config.chart.type==="heatmap"||r.config.chart.type==="treemap"){var v=this.intersect.handleHeatTreeTooltip({e:a,opt:s,x:t,y:i,type:r.config.chart.type});t=v.x,i=v.y,d.style.left=t+"px",d.style.top=i+"px"}else this.tooltipUtil.hasBars()&&this.intersect.handleBarTooltip({e:a,opt:s}),this.tooltipUtil.hasMarkers()&&this.intersect.handleMarkerTooltip({e:a,opt:s,x:t,y:i});if(this.yaxisTooltips.length)for(var y=0;yh.width)this.handleMouseOut(a);else if(o!==null)this.handleStickyCapturedSeries(e,o,a,n);else if(this.tooltipUtil.isXoverlap(n)||s.globals.isBarHorizontal){var c=s.globals.series.findIndex(function(d,g){return!s.globals.collapsedSeriesIndices.includes(g)});this.create(e,this,c,n,a.ttItems)}}},{key:"handleStickyCapturedSeries",value:function(e,t,i,a){var s=this.w;if(!this.tConfig.shared&&s.globals.series[t][a]===null)return void this.handleMouseOut(i);if(s.globals.series[t][a]!==void 0)this.tConfig.shared&&this.tooltipUtil.isXoverlap(a)&&this.tooltipUtil.isInitialSeriesSameLen()?this.create(e,this,t,a,i.ttItems):this.create(e,this,t,a,i.ttItems,!1);else if(this.tooltipUtil.isXoverlap(a)){var r=s.globals.series.findIndex(function(n,o){return!s.globals.collapsedSeriesIndices.includes(o)});this.create(e,this,r,a,i.ttItems)}}},{key:"deactivateHoverFilter",value:function(){for(var e=this.w,t=new X(this.ctx),i=e.globals.dom.Paper.select(".apexcharts-bar-area"),a=0;a5&&arguments[5]!==void 0?arguments[5]:null,k=this.w,S=t;e.type==="mouseup"&&this.markerClick(e,i,a),A===null&&(A=this.tConfig.shared);var L=this.tooltipUtil.hasMarkers(i),C=this.tooltipUtil.getElBars();if(k.config.legend.tooltipHoverFormatter){var I=k.config.legend.tooltipHoverFormatter,z=Array.from(this.legendLabels);z.forEach(function(q){var Z=q.getAttribute("data:default-text");q.innerHTML=decodeURIComponent(Z)});for(var M=0;M0?S.marker.enlargePoints(a):S.tooltipPosition.moveDynamicPointsOnHover(a);else if(this.tooltipUtil.hasBars()&&(this.barSeriesHeight=this.tooltipUtil.getBarsHeight(C),this.barSeriesHeight>0)){var W=new X(this.ctx),N=k.globals.dom.Paper.select(".apexcharts-bar-area[j='".concat(a,"']"));this.deactivateHoverFilter(),this.tooltipPosition.moveStickyTooltipOverBars(a,i);for(var B=0;B0&&t.config.plotOptions.bar.hideZeroBarsWhenGrouped&&(f-=c*k)),A&&(f=f+g.height/2-w/2-2);var L=t.globals.series[i][a]<0,C=o;switch(this.barCtx.isReversed&&(C=o+(L?d:-d)),v.position){case"center":x=A?L?C-d/2+u:C+d/2-u:L?C-d/2+g.height/2+u:C+d/2+g.height/2-u;break;case"bottom":x=A?L?C-d+u:C+d-u:L?C-d+g.height+w+u:C+d-g.height/2+w-u;break;case"top":x=A?L?C+u:C-u:L?C-g.height/2-u:C+g.height+u}if(this.barCtx.lastActiveBarSerieIndex===s&&y.enabled){var I=new X(this.barCtx.ctx).getTextRects(this.getStackedTotalDataLabel({realIndex:s,j:a}),b.fontSize);r=L?C-I.height/2-u-y.offsetY+18:C+I.height+u+y.offsetY-18;var z=S;n=m+(t.globals.isXNumeric?-c*t.globals.barGroups.length/2:t.globals.barGroups.length*c/2-(t.globals.barGroups.length-1)*c-z)+y.offsetX}return t.config.chart.stacked||(x<0?x=0+w:x+g.height/3>t.globals.gridHeight&&(x=t.globals.gridHeight-w)),{bcx:h,bcy:o,dataLabelsX:f,dataLabelsY:x,totalDataLabelsX:n,totalDataLabelsY:r,totalDataLabelsAnchor:"middle"}}},{key:"calculateBarsDataLabelsPosition",value:function(e){var t=this.w,i=e.x,a=e.i,s=e.j,r=e.realIndex,n=e.bcy,o=e.barHeight,h=e.barWidth,c=e.textRects,d=e.dataLabelsX,g=e.strokeWidth,f=e.dataLabelsConfig,x=e.barDataLabelsConfig,b=e.barTotalDataLabelsConfig,v=e.offX,y=e.offY,w=t.globals.gridHeight/t.globals.dataPoints;h=Math.abs(h);var l,u,m=n-(this.barCtx.isRangeBar?0:w)+o/2+c.height/2+y-3,A="start",k=t.globals.series[a][s]<0,S=i;switch(this.barCtx.isReversed&&(S=i+(k?-h:h),A=k?"start":"end"),x.position){case"center":d=k?S+h/2-v:Math.max(c.width/2,S-h/2)+v;break;case"bottom":d=k?S+h-g-v:S-h+g+v;break;case"top":d=k?S-g-v:S-g+v}if(this.barCtx.lastActiveBarSerieIndex===r&&b.enabled){var L=new X(this.barCtx.ctx).getTextRects(this.getStackedTotalDataLabel({realIndex:r,j:s}),f.fontSize);k?(l=S-g-v-b.offsetX,A="end"):l=S+v+b.offsetX+(this.barCtx.isReversed?-(h+g):g),u=m-c.height/2+L.height/2+b.offsetY+g}return t.config.chart.stacked||(f.textAnchor==="start"?d-c.width<0?d=k?c.width+g:g:d+c.width>t.globals.gridWidth&&(d=k?t.globals.gridWidth-g:t.globals.gridWidth-c.width-g):f.textAnchor==="middle"?d-c.width/2<0?d=c.width/2+g:d+c.width/2>t.globals.gridWidth&&(d=t.globals.gridWidth-c.width/2-g):f.textAnchor==="end"&&(d<1?d=c.width+g:d+1>t.globals.gridWidth&&(d=t.globals.gridWidth-c.width-g))),{bcx:i,bcy:n,dataLabelsX:d,dataLabelsY:m,totalDataLabelsX:l,totalDataLabelsY:u,totalDataLabelsAnchor:A}}},{key:"drawCalculatedDataLabels",value:function(e){var t=e.x,i=e.y,a=e.val,s=e.i,r=e.j,n=e.textRects,o=e.barHeight,h=e.barWidth,c=e.dataLabelsConfig,d=this.w,g="rotate(0)";d.config.plotOptions.bar.dataLabels.orientation==="vertical"&&(g="rotate(-90, ".concat(t,", ").concat(i,")"));var f=new be(this.barCtx.ctx),x=new X(this.barCtx.ctx),b=c.formatter,v=null,y=d.globals.collapsedSeriesIndices.indexOf(s)>-1;if(c.enabled&&!y){v=x.group({class:"apexcharts-data-labels",transform:g});var w="";a!==void 0&&(w=b(a,Y(Y({},d),{},{seriesIndex:s,dataPointIndex:r,w:d}))),!a&&d.config.plotOptions.bar.hideZeroBarsWhenGrouped&&(w="");var l=d.globals.series[s][r]<0,u=d.config.plotOptions.bar.dataLabels.position;d.config.plotOptions.bar.dataLabels.orientation==="vertical"&&(u==="top"&&(c.textAnchor=l?"end":"start"),u==="center"&&(c.textAnchor="middle"),u==="bottom"&&(c.textAnchor=l?"end":"start")),this.barCtx.isRangeBar&&this.barCtx.barOptions.dataLabels.hideOverflowingLabels&&hMath.abs(h)&&(w=""):n.height/1.6>Math.abs(o)&&(w=""));var m=Y({},c);this.barCtx.isHorizontal&&a<0&&(c.textAnchor==="start"?m.textAnchor="end":c.textAnchor==="end"&&(m.textAnchor="start")),f.plotDataLabelsText({x:t,y:i,text:w,i:s,j:r,parent:v,dataLabelsConfig:m,alwaysDrawDataLabel:!0,offsetCorrection:!0})}return v}},{key:"drawTotalDataLabels",value:function(e){var t=e.x,i=e.y,a=e.val,s=e.realIndex,r=e.textAnchor,n=e.barTotalDataLabelsConfig;this.w;var o,h=new X(this.barCtx.ctx);return n.enabled&&t!==void 0&&i!==void 0&&this.barCtx.lastActiveBarSerieIndex===s&&(o=h.drawText({x:t,y:i,foreColor:n.style.color,text:a,textAnchor:r,fontFamily:n.style.fontFamily,fontSize:n.style.fontSize,fontWeight:n.style.fontWeight})),o}}]),p}(),ea=function(){function p(e){F(this,p),this.w=e.w,this.barCtx=e}return R(p,[{key:"initVariables",value:function(e){var t=this.w;this.barCtx.series=e,this.barCtx.totalItems=0,this.barCtx.seriesLen=0,this.barCtx.visibleI=-1,this.barCtx.visibleItems=1;for(var i=0;i0&&(this.barCtx.seriesLen=this.barCtx.seriesLen+1,this.barCtx.totalItems+=e[i].length),t.globals.isXNumeric)for(var a=0;at.globals.minX&&t.globals.seriesX[i][a]0&&(a=h.globals.minXDiff/g),(r=a/d*parseInt(this.barCtx.barOptions.columnWidth,10)/100)<1&&(r=1)}String(this.barCtx.barOptions.columnWidth).indexOf("%")===-1&&(r=parseInt(this.barCtx.barOptions.columnWidth,10)),n=h.globals.gridHeight-this.barCtx.baseLineY[this.barCtx.translationsIndex]-(this.barCtx.isReversed?h.globals.gridHeight:0)+(this.barCtx.isReversed?2*this.barCtx.baseLineY[this.barCtx.translationsIndex]:0),e=h.globals.padHorizontal+(a-r*this.barCtx.seriesLen)/2}return h.globals.barHeight=s,h.globals.barWidth=r,{x:e,y:t,yDivision:i,xDivision:a,barHeight:s,barWidth:r,zeroH:n,zeroW:o}}},{key:"initializeStackedPrevVars",value:function(e){e.w.globals.seriesGroups.forEach(function(t){e[t]||(e[t]={}),e[t].prevY=[],e[t].prevX=[],e[t].prevYF=[],e[t].prevXF=[],e[t].prevYVal=[],e[t].prevXVal=[]})}},{key:"initializeStackedXYVars",value:function(e){e.w.globals.seriesGroups.forEach(function(t){e[t]||(e[t]={}),e[t].xArrj=[],e[t].xArrjF=[],e[t].xArrjVal=[],e[t].yArrj=[],e[t].yArrjF=[],e[t].yArrjVal=[]})}},{key:"getPathFillColor",value:function(e,t,i,a){var s,r,n,o,h,c=this.w,d=this.barCtx.ctx.fill,g=null,f=this.barCtx.barOptions.distributed?i:t;return this.barCtx.barOptions.colors.ranges.length>0&&this.barCtx.barOptions.colors.ranges.map(function(x){e[t][i]>=x.from&&e[t][i]<=x.to&&(g=x.color)}),(s=c.config.series[t].data[i])!==null&&s!==void 0&&s.fillColor&&(g=c.config.series[t].data[i].fillColor),d.fillPath({seriesNumber:this.barCtx.barOptions.distributed?f:a,dataPointIndex:i,color:g,value:e[t][i],fillConfig:(r=c.config.series[t].data[i])===null||r===void 0?void 0:r.fill,fillType:(n=c.config.series[t].data[i])!==null&&n!==void 0&&(o=n.fill)!==null&&o!==void 0&&o.type?(h=c.config.series[t].data[i])===null||h===void 0?void 0:h.fill.type:Array.isArray(c.config.fill.type)?c.config.fill.type[a]:c.config.fill.type})}},{key:"getStrokeWidth",value:function(e,t,i){var a=0,s=this.w;return this.barCtx.series[e][t]===void 0||this.barCtx.series[e][t]===null?this.barCtx.isNullValue=!0:this.barCtx.isNullValue=!1,s.config.stroke.show&&(this.barCtx.isNullValue||(a=Array.isArray(this.barCtx.strokeWidth)?this.barCtx.strokeWidth[i]:this.barCtx.strokeWidth)),a}},{key:"shouldApplyRadius",value:function(e){var t=this.w,i=!1;return t.config.plotOptions.bar.borderRadius>0&&(t.config.chart.stacked&&t.config.plotOptions.bar.borderRadiusWhenStacked==="last"?this.barCtx.lastActiveBarSerieIndex===e&&(i=!0):i=!0),i}},{key:"barBackground",value:function(e){var t=e.j,i=e.i,a=e.x1,s=e.x2,r=e.y1,n=e.y2,o=e.elSeries,h=this.w,c=new X(this.barCtx.ctx),d=new re(this.barCtx.ctx).getActiveConfigSeriesIndex();if(this.barCtx.barOptions.colors.backgroundBarColors.length>0&&d===i){t>=this.barCtx.barOptions.colors.backgroundBarColors.length&&(t%=this.barCtx.barOptions.colors.backgroundBarColors.length);var g=this.barCtx.barOptions.colors.backgroundBarColors[t],f=c.drawRect(a!==void 0?a:0,r!==void 0?r:0,s!==void 0?s:h.globals.gridWidth,n!==void 0?n:h.globals.gridHeight,this.barCtx.barOptions.colors.backgroundBarRadius,g,this.barCtx.barOptions.colors.backgroundBarOpacity);o.add(f),f.node.classList.add("apexcharts-backgroundBar")}}},{key:"getColumnPaths",value:function(e){var t,i=e.barWidth,a=e.barXPosition,s=e.y1,r=e.y2,n=e.strokeWidth,o=e.seriesGroup,h=e.realIndex,c=e.i,d=e.j,g=e.w,f=new X(this.barCtx.ctx);(n=Array.isArray(n)?n[h]:n)||(n=0);var x=i,b=a;(t=g.config.series[h].data[d])!==null&&t!==void 0&&t.columnWidthOffset&&(b=a-g.config.series[h].data[d].columnWidthOffset/2,x=i+g.config.series[h].data[d].columnWidthOffset);var v=n/2,y=b+v,w=b+x-v;s+=.001-v,r+=.001+v;var l=f.move(y,s),u=f.move(y,s),m=f.line(w,s);if(g.globals.previousPaths.length>0&&(u=this.barCtx.getPreviousPath(h,d,!1)),l=l+f.line(y,r)+f.line(w,r)+f.line(w,s)+(g.config.plotOptions.bar.borderRadiusApplication==="around"?" Z":" z"),u=u+f.line(y,s)+m+m+m+m+m+f.line(y,s)+(g.config.plotOptions.bar.borderRadiusApplication==="around"?" Z":" z"),this.shouldApplyRadius(h)&&(l=f.roundPathCorners(l,g.config.plotOptions.bar.borderRadius)),g.config.chart.stacked){var A=this.barCtx;(A=this.barCtx[o]).yArrj.push(r-v),A.yArrjF.push(Math.abs(s-r+n)),A.yArrjVal.push(this.barCtx.series[c][d])}return{pathTo:l,pathFrom:u}}},{key:"getBarpaths",value:function(e){var t,i=e.barYPosition,a=e.barHeight,s=e.x1,r=e.x2,n=e.strokeWidth,o=e.seriesGroup,h=e.realIndex,c=e.i,d=e.j,g=e.w,f=new X(this.barCtx.ctx);(n=Array.isArray(n)?n[h]:n)||(n=0);var x=i,b=a;(t=g.config.series[h].data[d])!==null&&t!==void 0&&t.barHeightOffset&&(x=i-g.config.series[h].data[d].barHeightOffset/2,b=a+g.config.series[h].data[d].barHeightOffset);var v=n/2,y=x+v,w=x+b-v;s+=.001-v,r+=.001+v;var l=f.move(s,y),u=f.move(s,y);g.globals.previousPaths.length>0&&(u=this.barCtx.getPreviousPath(h,d,!1));var m=f.line(s,w);if(l=l+f.line(r,y)+f.line(r,w)+m+(g.config.plotOptions.bar.borderRadiusApplication==="around"?" Z":" z"),u=u+f.line(s,y)+m+m+m+m+m+f.line(s,y)+(g.config.plotOptions.bar.borderRadiusApplication==="around"?" Z":" z"),this.shouldApplyRadius(h)&&(l=f.roundPathCorners(l,g.config.plotOptions.bar.borderRadius)),g.config.chart.stacked){var A=this.barCtx;(A=this.barCtx[o]).xArrj.push(r+v),A.xArrjF.push(Math.abs(s-r)),A.xArrjVal.push(this.barCtx.series[c][d])}return{pathTo:l,pathFrom:u}}},{key:"checkZeroSeries",value:function(e){for(var t=e.series,i=this.w,a=0;a2&&arguments[2]!==void 0)||arguments[2]?t:null;return e!=null&&(i=t+e/this.barCtx.invertedYRatio-2*(this.barCtx.isReversed?e/this.barCtx.invertedYRatio:0)),i}},{key:"getYForValue",value:function(e,t,i){var a=!(arguments.length>3&&arguments[3]!==void 0)||arguments[3]?t:null;return e!=null&&(a=t-e/this.barCtx.yRatio[i]+2*(this.barCtx.isReversed?e/this.barCtx.yRatio[i]:0)),a}},{key:"getGoalValues",value:function(e,t,i,a,s,r){var n=this,o=this.w,h=[],c=function(f,x){var b;h.push((Oe(b={},e,e==="x"?n.getXForValue(f,t,!1):n.getYForValue(f,i,r,!1)),Oe(b,"attrs",x),b))};if(o.globals.seriesGoals[a]&&o.globals.seriesGoals[a][s]&&Array.isArray(o.globals.seriesGoals[a][s])&&o.globals.seriesGoals[a][s].forEach(function(f){c(f.value,f)}),this.barCtx.barOptions.isDumbbell&&o.globals.seriesRange.length){var d=this.barCtx.barOptions.dumbbellColors?this.barCtx.barOptions.dumbbellColors:o.globals.colors,g={strokeHeight:e==="x"?0:o.globals.markers.size[a],strokeWidth:e==="x"?o.globals.markers.size[a]:0,strokeDashArray:0,strokeLineCap:"round",strokeColor:Array.isArray(d[a])?d[a][0]:d[a]};c(o.globals.seriesRangeStart[a][s],g),c(o.globals.seriesRangeEnd[a][s],Y(Y({},g),{},{strokeColor:Array.isArray(d[a])?d[a][1]:d[a]}))}return h}},{key:"drawGoalLine",value:function(e){var t=e.barXPosition,i=e.barYPosition,a=e.goalX,s=e.goalY,r=e.barWidth,n=e.barHeight,o=new X(this.barCtx.ctx),h=o.group({className:"apexcharts-bar-goals-groups"});h.node.classList.add("apexcharts-element-hidden"),this.barCtx.w.globals.delayedElements.push({el:h.node}),h.attr("clip-path","url(#gridRectMarkerMask".concat(this.barCtx.w.globals.cuid,")"));var c=null;return this.barCtx.isHorizontal?Array.isArray(a)&&a.forEach(function(d){if(d.x>=-1&&d.x<=o.w.globals.gridWidth+1){var g=d.attrs.strokeHeight!==void 0?d.attrs.strokeHeight:n/2,f=i+g+n/2;c=o.drawLine(d.x,f-2*g,d.x,f,d.attrs.strokeColor?d.attrs.strokeColor:void 0,d.attrs.strokeDashArray,d.attrs.strokeWidth?d.attrs.strokeWidth:2,d.attrs.strokeLineCap),h.add(c)}}):Array.isArray(s)&&s.forEach(function(d){if(d.y>=-1&&d.y<=o.w.globals.gridHeight+1){var g=d.attrs.strokeWidth!==void 0?d.attrs.strokeWidth:r/2,f=t+g+r/2;c=o.drawLine(f-2*g,d.y,f,d.y,d.attrs.strokeColor?d.attrs.strokeColor:void 0,d.attrs.strokeDashArray,d.attrs.strokeHeight?d.attrs.strokeHeight:2,d.attrs.strokeLineCap),h.add(c)}}),h}},{key:"drawBarShadow",value:function(e){var t=e.prevPaths,i=e.currPaths,a=e.color,s=this.w,r=t.x,n=t.x1,o=t.barYPosition,h=i.x,c=i.x1,d=i.barYPosition,g=o+i.barHeight,f=new X(this.barCtx.ctx),x=new P,b=f.move(n,g)+f.line(r,g)+f.line(h,d)+f.line(c,d)+f.line(n,g)+(s.config.plotOptions.bar.borderRadiusApplication==="around"?" Z":" z");return f.drawPath({d:b,fill:x.shadeColor(.5,P.rgb2hex(a)),stroke:"none",strokeWidth:0,fillOpacity:1,classes:"apexcharts-bar-shadows"})}},{key:"getZeroValueEncounters",value:function(e){var t,i=e.i,a=e.j,s=this.w,r=0,n=0;return(s.config.plotOptions.bar.horizontal?s.globals.series.map(function(o,h){return h}):((t=s.globals.columnSeries)===null||t===void 0?void 0:t.i.map(function(o){return o}))||[]).forEach(function(o){var h=s.globals.seriesPercent[o][a];h&&r++,o-1}),a=this.barCtx.columnGroupIndices,s=a.indexOf(i);return s<0&&(a.push(i),s=a.length-1),{groupIndex:i,columnGroupIndex:s}}}]),p}(),me=function(){function p(e,t){F(this,p),this.ctx=e,this.w=e.w;var i=this.w;this.barOptions=i.config.plotOptions.bar,this.isHorizontal=this.barOptions.horizontal,this.strokeWidth=i.config.stroke.width,this.isNullValue=!1,this.isRangeBar=i.globals.seriesRange.length&&this.isHorizontal,this.isVerticalGroupedRangeBar=!i.globals.isBarHorizontal&&i.globals.seriesRange.length&&i.config.plotOptions.bar.rangeBarGroupRows,this.isFunnel=this.barOptions.isFunnel,this.xyRatios=t,this.xyRatios!==null&&(this.xRatio=t.xRatio,this.yRatio=t.yRatio,this.invertedXRatio=t.invertedXRatio,this.invertedYRatio=t.invertedYRatio,this.baseLineY=t.baseLineY,this.baseLineInvertedY=t.baseLineInvertedY),this.yaxisIndex=0,this.translationsIndex=0,this.seriesLen=0,this.pathArr=[];var a=new re(this.ctx);this.lastActiveBarSerieIndex=a.getActiveConfigSeriesIndex("desc",["bar","column"]),this.columnGroupIndices=[];var s=a.getBarSeriesIndices(),r=new $(this.ctx);this.stackedSeriesTotals=r.getStackedSeriesTotals(this.w.config.series.map(function(n,o){return s.indexOf(o)===-1?o:-1}).filter(function(n){return n!==-1})),this.barHelpers=new ea(this)}return R(p,[{key:"draw",value:function(e,t){var i=this.w,a=new X(this.ctx),s=new $(this.ctx,i);e=s.getLogSeries(e),this.series=e,this.yRatio=s.getLogYRatios(this.yRatio),this.barHelpers.initVariables(e);var r=a.group({class:"apexcharts-bar-series apexcharts-plot-series"});i.config.dataLabels.enabled&&this.totalItems>this.barOptions.dataLabels.maxItems&&console.warn("WARNING: DataLabels are enabled but there are too many to display. This may cause performance issue when rendering - ApexCharts");for(var n=0,o=0;n0&&(this.visibleI=this.visibleI+1);var u=0,m=0;this.yRatio.length>1&&(this.yaxisIndex=i.globals.seriesYAxisReverseMap[y],this.translationsIndex=y);var A=this.translationsIndex;this.isReversed=i.config.yaxis[this.yaxisIndex]&&i.config.yaxis[this.yaxisIndex].reversed;var k=this.barHelpers.initialPositions();x=k.y,u=k.barHeight,c=k.yDivision,g=k.zeroW,f=k.x,m=k.barWidth,h=k.xDivision,d=k.zeroH,this.horizontal||v.push(f+m/2);var S=a.group({class:"apexcharts-datalabels","data:realIndex":y});i.globals.delayedElements.push({el:S.node}),S.node.classList.add("apexcharts-element-hidden");var L=a.group({class:"apexcharts-bar-goals-markers"}),C=a.group({class:"apexcharts-bar-shadows"});i.globals.delayedElements.push({el:C.node}),C.node.classList.add("apexcharts-element-hidden");for(var I=0;I0){var O=this.barHelpers.drawBarShadow({color:typeof E=="string"&&E?.indexOf("url")===-1?E:P.hexToRgba(i.globals.colors[n]),prevPaths:this.pathArr[this.pathArr.length-1],currPaths:M});O&&C.add(O)}this.pathArr.push(M);var D=this.barHelpers.drawGoalLine({barXPosition:M.barXPosition,barYPosition:M.barYPosition,goalX:M.goalX,goalY:M.goalY,barHeight:u,barWidth:m});D&&L.add(D),x=M.y,f=M.x,I>0&&v.push(f+m/2),b.push(x),this.renderSeries({realIndex:y,pathFill:E,j:I,i:n,columnGroupIndex:w,pathFrom:M.pathFrom,pathTo:M.pathTo,strokeWidth:z,elSeries:l,x:f,y:x,series:e,barHeight:Math.abs(M.barHeight?M.barHeight:u),barWidth:Math.abs(M.barWidth?M.barWidth:m),elDataLabelsWrap:S,elGoalsMarkers:L,elBarShadows:C,visibleSeries:this.visibleI,type:"bar"})}i.globals.seriesXvalues[y]=v,i.globals.seriesYvalues[y]=b,r.add(l)}return r}},{key:"renderSeries",value:function(e){var t=e.realIndex,i=e.pathFill,a=e.lineFill,s=e.j,r=e.i,n=e.columnGroupIndex,o=e.pathFrom,h=e.pathTo,c=e.strokeWidth,d=e.elSeries,g=e.x,f=e.y,x=e.y1,b=e.y2,v=e.series,y=e.barHeight,w=e.barWidth,l=e.barXPosition,u=e.barYPosition,m=e.elDataLabelsWrap,A=e.elGoalsMarkers,k=e.elBarShadows,S=e.visibleSeries,L=e.type,C=this.w,I=new X(this.ctx);if(!a){var z=typeof C.globals.stroke.colors[t]=="function"?function(D){var H,W=C.config.stroke.colors;return Array.isArray(W)&&W.length>0&&((H=W[D])||(H=""),typeof H=="function")?H({value:C.globals.series[D][s],dataPointIndex:s,w:C}):H}(t):C.globals.stroke.colors[t];a=this.barOptions.distributed?C.globals.stroke.colors[s]:z}C.config.series[r].data[s]&&C.config.series[r].data[s].strokeColor&&(a=C.config.series[r].data[s].strokeColor),this.isNullValue&&(i="none");var M=s/C.config.chart.animations.animateGradually.delay*(C.config.chart.animations.speed/C.globals.dataPoints)/2.4,T=I.renderPaths({i:r,j:s,realIndex:t,pathFrom:o,pathTo:h,stroke:a,strokeWidth:c,strokeLineCap:C.config.stroke.lineCap,fill:i,animationDelay:M,initialSpeed:C.config.chart.animations.speed,dataChangeSpeed:C.config.chart.animations.dynamicAnimation.speed,className:"apexcharts-".concat(L,"-area")});T.attr("clip-path","url(#gridRectMask".concat(C.globals.cuid,")"));var E=C.config.forecastDataPoints;E.count>0&&s>=C.globals.dataPoints-E.count&&(T.node.setAttribute("stroke-dasharray",E.dashArray),T.node.setAttribute("stroke-width",E.strokeWidth),T.node.setAttribute("fill-opacity",E.fillOpacity)),x!==void 0&&b!==void 0&&(T.attr("data-range-y1",x),T.attr("data-range-y2",b)),new ie(this.ctx).setSelectionFilter(T,t,s),d.add(T);var O=new Qi(this).handleBarDataLabels({x:g,y:f,y1:x,y2:b,i:r,j:s,series:v,realIndex:t,columnGroupIndex:n,barHeight:y,barWidth:w,barXPosition:l,barYPosition:u,renderedPath:T,visibleSeries:S});return O.dataLabels!==null&&m.add(O.dataLabels),O.totalDataLabels&&m.add(O.totalDataLabels),d.add(m),A&&d.add(A),k&&d.add(k),d}},{key:"drawBarPaths",value:function(e){var t,i=e.indexes,a=e.barHeight,s=e.strokeWidth,r=e.zeroW,n=e.x,o=e.y,h=e.yDivision,c=e.elSeries,d=this.w,g=i.i,f=i.j;if(d.globals.isXNumeric)t=(o=(d.globals.seriesX[g][f]-d.globals.minX)/this.invertedXRatio-a)+a*this.visibleI;else if(d.config.plotOptions.bar.hideZeroBarsWhenGrouped){var x=0,b=0;d.globals.seriesPercent.forEach(function(y,w){y[f]&&x++,w0&&(a=this.seriesLen*a/x),t=o+a*this.visibleI,t-=a*b}else t=o+a*this.visibleI;this.isFunnel&&(r-=(this.barHelpers.getXForValue(this.series[g][f],r)-r)/2),n=this.barHelpers.getXForValue(this.series[g][f],r);var v=this.barHelpers.getBarpaths({barYPosition:t,barHeight:a,x1:r,x2:n,strokeWidth:s,series:this.series,realIndex:i.realIndex,i:g,j:f,w:d});return d.globals.isXNumeric||(o+=h),this.barHelpers.barBackground({j:f,i:g,y1:t-a*this.visibleI,y2:a*this.seriesLen,elSeries:c}),{pathTo:v.pathTo,pathFrom:v.pathFrom,x1:r,x:n,y:o,goalX:this.barHelpers.getGoalValues("x",r,null,g,f),barYPosition:t,barHeight:a}}},{key:"drawColumnPaths",value:function(e){var t,i=e.indexes,a=e.x,s=e.y,r=e.xDivision,n=e.barWidth,o=e.zeroH,h=e.strokeWidth,c=e.elSeries,d=this.w,g=i.realIndex,f=i.translationsIndex,x=i.i,b=i.j,v=i.bc;if(d.globals.isXNumeric){var y=this.getBarXForNumericXAxis({x:a,j:b,realIndex:g,barWidth:n});a=y.x,t=y.barXPosition}else if(d.config.plotOptions.bar.hideZeroBarsWhenGrouped){var w=this.barHelpers.getZeroValueEncounters({i:x,j:b}),l=w.nonZeroColumns,u=w.zeroEncounters;l>0&&(n=this.seriesLen*n/l),t=a+n*this.visibleI,t-=n*u}else t=a+n*this.visibleI;s=this.barHelpers.getYForValue(this.series[x][b],o,f);var m=this.barHelpers.getColumnPaths({barXPosition:t,barWidth:n,y1:o,y2:s,strokeWidth:h,series:this.series,realIndex:g,i:x,j:b,w:d});return d.globals.isXNumeric||(a+=r),this.barHelpers.barBackground({bc:v,j:b,i:x,x1:t-h/2-n*this.visibleI,x2:n*this.seriesLen+h/2,elSeries:c}),{pathTo:m.pathTo,pathFrom:m.pathFrom,x:a,y:s,goalY:this.barHelpers.getGoalValues("y",null,o,x,b,f),barXPosition:t,barWidth:n}}},{key:"getBarXForNumericXAxis",value:function(e){var t=e.x,i=e.barWidth,a=e.realIndex,s=e.j,r=this.w,n=a;return r.globals.seriesX[a].length||(n=r.globals.maxValsInArrayIndex),r.globals.seriesX[n][s]&&(t=(r.globals.seriesX[n][s]-r.globals.minX)/this.xRatio-i*this.seriesLen/2),{barXPosition:t+i*this.visibleI,x:t}}},{key:"getPreviousPath",value:function(e,t){for(var i,a=this.w,s=0;s0&&parseInt(r.realIndex,10)===parseInt(e,10)&&a.globals.previousPaths[s].paths[t]!==void 0&&(i=a.globals.previousPaths[s].paths[t].d)}return i}}]),p}(),St=function(p){Te(t,me);var e=Ie(t);function t(){return F(this,t),e.apply(this,arguments)}return R(t,[{key:"draw",value:function(i,a){var s=this,r=this.w;this.graphics=new X(this.ctx),this.bar=new me(this.ctx,this.xyRatios);var n=new $(this.ctx,r);i=n.getLogSeries(i),this.yRatio=n.getLogYRatios(this.yRatio),this.barHelpers.initVariables(i),r.config.chart.stackType==="100%"&&(i=r.globals.comboCharts?a.map(function(x){return r.globals.seriesPercent[x]}):r.globals.seriesPercent.slice()),this.series=i,this.barHelpers.initializeStackedPrevVars(this);for(var o=this.graphics.group({class:"apexcharts-bar-series apexcharts-plot-series"}),h=0,c=0,d=function(x,b){var v=void 0,y=void 0,w=void 0,l=void 0,u=r.globals.comboCharts?a[x]:x,m=s.barHelpers.getGroupIndex(u),A=m.groupIndex,k=m.columnGroupIndex;s.groupCtx=s[r.globals.seriesGroups[A]];var S=[],L=[],C=0;s.yRatio.length>1&&(s.yaxisIndex=r.globals.seriesYAxisReverseMap[u][0],C=u),s.isReversed=r.config.yaxis[s.yaxisIndex]&&r.config.yaxis[s.yaxisIndex].reversed;var I=s.graphics.group({class:"apexcharts-series",seriesName:P.escapeString(r.globals.seriesNames[u]),rel:x+1,"data:realIndex":u});s.ctx.series.addCollapsedClassToSeries(I,u);var z=s.graphics.group({class:"apexcharts-datalabels","data:realIndex":u}),M=s.graphics.group({class:"apexcharts-bar-goals-markers"}),T=0,E=0,O=s.initialPositions(h,c,v,y,w,l,C);c=O.y,T=O.barHeight,y=O.yDivision,l=O.zeroW,h=O.x,E=O.barWidth,v=O.xDivision,w=O.zeroH,r.globals.barHeight=T,r.globals.barWidth=E,s.barHelpers.initializeStackedXYVars(s),s.groupCtx.prevY.length===1&&s.groupCtx.prevY[0].every(function(Z){return isNaN(Z)})&&(s.groupCtx.prevY[0]=s.groupCtx.prevY[0].map(function(){return w}),s.groupCtx.prevYF[0]=s.groupCtx.prevYF[0].map(function(){return 0}));for(var D=0;D1?d=(s=g.globals.minXDiff/this.xRatio)*parseInt(this.barOptions.columnWidth,10)/100:String(x).indexOf("%")===-1?d=parseInt(x,10):d*=parseInt(x,10)/100,n=this.isReversed?this.baseLineY[h]:g.globals.gridHeight-this.baseLineY[h],i=g.globals.padHorizontal+(s-d)/2}var b=g.globals.barGroups.length||1;return{x:i,y:a,yDivision:r,xDivision:s,barHeight:c/b,barWidth:d/b,zeroH:n,zeroW:o}}},{key:"drawStackedBarPaths",value:function(i){for(var a,s=i.indexes,r=i.barHeight,n=i.strokeWidth,o=i.zeroW,h=i.x,c=i.y,d=i.columnGroupIndex,g=i.seriesGroup,f=i.yDivision,x=i.elSeries,b=this.w,v=c+d*r,y=s.i,w=s.j,l=s.realIndex,u=s.translationsIndex,m=0,A=0;A0){var S=o;this.groupCtx.prevXVal[k-1][w]<0?S=this.series[y][w]>=0?this.groupCtx.prevX[k-1][w]+m-2*(this.isReversed?m:0):this.groupCtx.prevX[k-1][w]:this.groupCtx.prevXVal[k-1][w]>=0&&(S=this.series[y][w]>=0?this.groupCtx.prevX[k-1][w]:this.groupCtx.prevX[k-1][w]-m+2*(this.isReversed?m:0)),a=S}else a=o;h=this.series[y][w]===null?a:a+this.series[y][w]/this.invertedYRatio-2*(this.isReversed?this.series[y][w]/this.invertedYRatio:0);var L=this.barHelpers.getBarpaths({barYPosition:v,barHeight:r,x1:a,x2:h,strokeWidth:n,series:this.series,realIndex:s.realIndex,seriesGroup:g,i:y,j:w,w:b});return this.barHelpers.barBackground({j:w,i:y,y1:v,y2:r,elSeries:x}),c+=f,{pathTo:L.pathTo,pathFrom:L.pathFrom,goalX:this.barHelpers.getGoalValues("x",o,null,y,w,u),barXPosition:a,barYPosition:v,x:h,y:c}}},{key:"drawStackedColumnPaths",value:function(i){var a=i.indexes,s=i.x,r=i.y,n=i.xDivision,o=i.barWidth,h=i.zeroH,c=i.columnGroupIndex,d=i.seriesGroup,g=i.elSeries,f=this.w,x=a.i,b=a.j,v=a.bc,y=a.realIndex,w=a.translationsIndex;if(f.globals.isXNumeric){var l=f.globals.seriesX[y][b];l||(l=0),s=(l-f.globals.minX)/this.xRatio-o/2*f.globals.barGroups.length}for(var u,m=s+c*o,A=0,k=0;k0&&!f.globals.isXNumeric||S>0&&f.globals.isXNumeric&&f.globals.seriesX[y-1][b]===f.globals.seriesX[y][b]){var L,C,I,z=Math.min(this.yRatio.length+1,y+1);if(this.groupCtx.prevY[S-1]!==void 0&&this.groupCtx.prevY[S-1].length)for(var M=1;M=0?I-A+2*(this.isReversed?A:0):I;break}if(((D=this.groupCtx.prevYVal[S-E])===null||D===void 0?void 0:D[b])>=0){C=this.series[x][b]>=0?I:I+A-2*(this.isReversed?A:0);break}}C===void 0&&(C=f.globals.gridHeight),u=(L=this.groupCtx.prevYF[0])!==null&&L!==void 0&&L.every(function(W){return W===0})&&this.groupCtx.prevYF.slice(1,S).every(function(W){return W.every(function(N){return isNaN(N)})})?h:C}else u=h;r=this.series[x][b]?u-this.series[x][b]/this.yRatio[w]+2*(this.isReversed?this.series[x][b]/this.yRatio[w]:0):u;var H=this.barHelpers.getColumnPaths({barXPosition:m,barWidth:o,y1:u,y2:r,yRatio:this.yRatio[w],strokeWidth:this.strokeWidth,series:this.series,seriesGroup:d,realIndex:a.realIndex,i:x,j:b,w:f});return this.barHelpers.barBackground({bc:v,j:b,i:x,x1:m,x2:o,elSeries:g}),{pathTo:H.pathTo,pathFrom:H.pathFrom,goalY:this.barHelpers.getGoalValues("y",null,h,x,b),barXPosition:m,x:f.globals.isXNumeric?s:s+n,y:r}}}]),t}(),Qe=function(p){Te(t,me);var e=Ie(t);function t(){return F(this,t),e.apply(this,arguments)}return R(t,[{key:"draw",value:function(i,a,s){var r=this,n=this.w,o=new X(this.ctx),h=n.globals.comboCharts?a:n.config.chart.type,c=new ne(this.ctx);this.candlestickOptions=this.w.config.plotOptions.candlestick,this.boxOptions=this.w.config.plotOptions.boxPlot,this.isHorizontal=n.config.plotOptions.bar.horizontal;var d=new $(this.ctx,n);i=d.getLogSeries(i),this.series=i,this.yRatio=d.getLogYRatios(this.yRatio),this.barHelpers.initVariables(i);for(var g=o.group({class:"apexcharts-".concat(h,"-series apexcharts-plot-series")}),f=function(b){r.isBoxPlot=n.config.chart.type==="boxPlot"||n.config.series[b].type==="boxPlot";var v,y,w,l,u=void 0,m=void 0,A=[],k=[],S=n.globals.comboCharts?s[b]:b,L=r.barHelpers.getGroupIndex(S).columnGroupIndex,C=o.group({class:"apexcharts-series",seriesName:P.escapeString(n.globals.seriesNames[S]),rel:b+1,"data:realIndex":S});r.ctx.series.addCollapsedClassToSeries(C,S),i[b].length>0&&(r.visibleI=r.visibleI+1);var I,z,M=0;r.yRatio.length>1&&(r.yaxisIndex=n.globals.seriesYAxisReverseMap[S][0],M=S);var T=r.barHelpers.initialPositions();m=T.y,I=T.barHeight,y=T.yDivision,l=T.zeroW,u=T.x,z=T.barWidth,v=T.xDivision,w=T.zeroH,k.push(u+z/2);for(var E=o.group({class:"apexcharts-datalabels","data:realIndex":S}),O=function(H){var W=r.barHelpers.getStrokeWidth(b,H,S),N=null,B={indexes:{i:b,j:H,realIndex:S,translationsIndex:M},x:u,y:m,strokeWidth:W,elSeries:C};N=r.isHorizontal?r.drawHorizontalBoxPaths(Y(Y({},B),{},{yDivision:y,barHeight:I,zeroW:l})):r.drawVerticalBoxPaths(Y(Y({},B),{},{xDivision:v,barWidth:z,zeroH:w})),m=N.y,u=N.x,H>0&&k.push(u+z/2),A.push(m),N.pathTo.forEach(function(q,Z){var j=!r.isBoxPlot&&r.candlestickOptions.wick.useFillColor?N.color[Z]:n.globals.stroke.colors[b],se=c.fillPath({seriesNumber:S,dataPointIndex:H,color:N.color[Z],value:i[b][H]});r.renderSeries({realIndex:S,pathFill:se,lineFill:j,j:H,i:b,pathFrom:N.pathFrom,pathTo:q,strokeWidth:W,elSeries:C,x:u,y:m,series:i,columnGroupIndex:L,barHeight:I,barWidth:z,elDataLabelsWrap:E,visibleSeries:r.visibleI,type:n.config.chart.type})})},D=0;Du.c&&(x=!1);var k=Math.min(u.o,u.c),S=Math.max(u.o,u.c),L=u.m;c.globals.isXNumeric&&(s=(c.globals.seriesX[l][f]-c.globals.minX)/this.xRatio-n/2);var C=s+n*this.visibleI;this.series[g][f]===void 0||this.series[g][f]===null?(k=o,S=o):(k=o-k/w,S=o-S/w,m=o-u.h/w,A=o-u.l/w,L=o-u.m/w);var I=d.move(C,o),z=d.move(C+n/2,k);return c.globals.previousPaths.length>0&&(z=this.getPreviousPath(l,f,!0)),I=this.isBoxPlot?[d.move(C,k)+d.line(C+n/2,k)+d.line(C+n/2,m)+d.line(C+n/4,m)+d.line(C+n-n/4,m)+d.line(C+n/2,m)+d.line(C+n/2,k)+d.line(C+n,k)+d.line(C+n,L)+d.line(C,L)+d.line(C,k+h/2),d.move(C,L)+d.line(C+n,L)+d.line(C+n,S)+d.line(C+n/2,S)+d.line(C+n/2,A)+d.line(C+n-n/4,A)+d.line(C+n/4,A)+d.line(C+n/2,A)+d.line(C+n/2,S)+d.line(C,S)+d.line(C,L)+"z"]:[d.move(C,S)+d.line(C+n/2,S)+d.line(C+n/2,m)+d.line(C+n/2,S)+d.line(C+n,S)+d.line(C+n,k)+d.line(C+n/2,k)+d.line(C+n/2,A)+d.line(C+n/2,k)+d.line(C,k)+d.line(C,S-h/2)],z+=d.move(C,k),c.globals.isXNumeric||(s+=r),{pathTo:I,pathFrom:z,x:s,y:S,barXPosition:C,color:this.isBoxPlot?y:x?[b]:[v]}}},{key:"drawHorizontalBoxPaths",value:function(i){var a=i.indexes;i.x;var s=i.y,r=i.yDivision,n=i.barHeight,o=i.zeroW,h=i.strokeWidth,c=this.w,d=new X(this.ctx),g=a.i,f=a.j,x=this.boxOptions.colors.lower;this.isBoxPlot&&(x=[this.boxOptions.colors.lower,this.boxOptions.colors.upper]);var b=this.invertedYRatio,v=a.realIndex,y=this.getOHLCValue(v,f),w=o,l=o,u=Math.min(y.o,y.c),m=Math.max(y.o,y.c),A=y.m;c.globals.isXNumeric&&(s=(c.globals.seriesX[v][f]-c.globals.minX)/this.invertedXRatio-n/2);var k=s+n*this.visibleI;this.series[g][f]===void 0||this.series[g][f]===null?(u=o,m=o):(u=o+u/b,m=o+m/b,w=o+y.h/b,l=o+y.l/b,A=o+y.m/b);var S=d.move(o,k),L=d.move(u,k+n/2);return c.globals.previousPaths.length>0&&(L=this.getPreviousPath(v,f,!0)),S=[d.move(u,k)+d.line(u,k+n/2)+d.line(w,k+n/2)+d.line(w,k+n/2-n/4)+d.line(w,k+n/2+n/4)+d.line(w,k+n/2)+d.line(u,k+n/2)+d.line(u,k+n)+d.line(A,k+n)+d.line(A,k)+d.line(u+h/2,k),d.move(A,k)+d.line(A,k+n)+d.line(m,k+n)+d.line(m,k+n/2)+d.line(l,k+n/2)+d.line(l,k+n-n/4)+d.line(l,k+n/4)+d.line(l,k+n/2)+d.line(m,k+n/2)+d.line(m,k)+d.line(A,k)+"z"],L+=d.move(u,k),c.globals.isXNumeric||(s+=r),{pathTo:S,pathFrom:L,x:m,y:s,barYPosition:k,color:x}}},{key:"getOHLCValue",value:function(i,a){var s=this.w;return{o:this.isBoxPlot?s.globals.seriesCandleH[i][a]:s.globals.seriesCandleO[i][a],h:this.isBoxPlot?s.globals.seriesCandleO[i][a]:s.globals.seriesCandleH[i][a],m:s.globals.seriesCandleM[i][a],l:this.isBoxPlot?s.globals.seriesCandleC[i][a]:s.globals.seriesCandleL[i][a],c:this.isBoxPlot?s.globals.seriesCandleL[i][a]:s.globals.seriesCandleC[i][a]}}}]),t}(),Bt=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"checkColorRange",value:function(){var e=this.w,t=!1,i=e.config.plotOptions[e.config.chart.type];return i.colorScale.ranges.length>0&&i.colorScale.ranges.map(function(a,s){a.from<=0&&(t=!0)}),t}},{key:"getShadeColor",value:function(e,t,i,a){var s=this.w,r=1,n=s.config.plotOptions[e].shadeIntensity,o=this.determineColor(e,t,i);s.globals.hasNegs||a?r=s.config.plotOptions[e].reverseNegativeShade?o.percent<0?o.percent/100*(1.25*n):(1-o.percent/100)*(1.25*n):o.percent<=0?1-(1+o.percent/100)*n:(1-o.percent/100)*n:(r=1-o.percent/100,e==="treemap"&&(r=(1-o.percent/100)*(1.25*n)));var h=o.color,c=new P;if(s.config.plotOptions[e].enableShades)if(this.w.config.theme.mode==="dark"){var d=c.shadeColor(-1*r,o.color);h=P.hexToRgba(P.isColorHex(d)?d:P.rgb2hex(d),s.config.fill.opacity)}else{var g=c.shadeColor(r,o.color);h=P.hexToRgba(P.isColorHex(g)?g:P.rgb2hex(g),s.config.fill.opacity)}return{color:h,colorProps:o}}},{key:"determineColor",value:function(e,t,i){var a=this.w,s=a.globals.series[t][i],r=a.config.plotOptions[e],n=r.colorScale.inverse?i:t;r.distributed&&a.config.chart.type==="treemap"&&(n=i);var o=a.globals.colors[n],h=null,c=Math.min.apply(Math,te(a.globals.series[t])),d=Math.max.apply(Math,te(a.globals.series[t]));r.distributed||e!=="heatmap"||(c=a.globals.minY,d=a.globals.maxY),r.colorScale.min!==void 0&&(c=r.colorScale.mina.globals.maxY?r.colorScale.max:a.globals.maxY);var g=Math.abs(d)+Math.abs(c),f=100*s/(g===0?g-1e-6:g);return r.colorScale.ranges.length>0&&r.colorScale.ranges.map(function(x,b){if(s>=x.from&&s<=x.to){o=x.color,h=x.foreColor?x.foreColor:null,c=x.from,d=x.to;var v=Math.abs(d)+Math.abs(c);f=100*s/(v===0?v-1e-6:v)}}),{color:o,foreColor:h,percent:f}}},{key:"calculateDataLabels",value:function(e){var t=e.text,i=e.x,a=e.y,s=e.i,r=e.j,n=e.colorProps,o=e.fontSize,h=this.w.config.dataLabels,c=new X(this.ctx),d=new be(this.ctx),g=null;if(h.enabled){g=c.group({class:"apexcharts-data-labels"});var f=h.offsetX,x=h.offsetY,b=i+f,v=a+parseFloat(h.style.fontSize)/3+x;d.plotDataLabelsText({x:b,y:v,text:t,i:s,j:r,color:n.foreColor,parent:g,fontSize:o,dataLabelsConfig:h})}return g}},{key:"addListeners",value:function(e){var t=new X(this.ctx);e.node.addEventListener("mouseenter",t.pathMouseEnter.bind(this,e)),e.node.addEventListener("mouseleave",t.pathMouseLeave.bind(this,e)),e.node.addEventListener("mousedown",t.pathMouseDown.bind(this,e))}}]),p}(),ta=function(){function p(e,t){F(this,p),this.ctx=e,this.w=e.w,this.xRatio=t.xRatio,this.yRatio=t.yRatio,this.dynamicAnim=this.w.config.chart.animations.dynamicAnimation,this.helpers=new Bt(e),this.rectRadius=this.w.config.plotOptions.heatmap.radius,this.strokeWidth=this.w.config.stroke.show?this.w.config.stroke.width:0}return R(p,[{key:"draw",value:function(e){var t=this.w,i=new X(this.ctx),a=i.group({class:"apexcharts-heatmap"});a.attr("clip-path","url(#gridRectMask".concat(t.globals.cuid,")"));var s=t.globals.gridWidth/t.globals.dataPoints,r=t.globals.gridHeight/t.globals.series.length,n=0,o=!1;this.negRange=this.helpers.checkColorRange();var h=e.slice();t.config.yaxis[0].reversed&&(o=!0,h.reverse());for(var c=o?0:h.length-1;o?c=0;o?c++:c--){var d=i.group({class:"apexcharts-series apexcharts-heatmap-series",seriesName:P.escapeString(t.globals.seriesNames[c]),rel:c+1,"data:realIndex":c});if(this.ctx.series.addCollapsedClassToSeries(d,c),t.config.chart.dropShadow.enabled){var g=t.config.chart.dropShadow;new ie(this.ctx).dropShadow(d,g,c)}for(var f=0,x=t.config.plotOptions.heatmap.shadeIntensity,b=0;b-1&&this.pieClicked(g),i.config.dataLabels.enabled){var m=l.x,A=l.y,k=100*x/this.fullAngle+"%";if(x!==0&&i.config.plotOptions.pie.dataLabels.minAngleToShowLabelthis.fullAngle?t.endAngle=t.endAngle-(a+n):a+n=this.fullAngle+this.w.config.plotOptions.pie.startAngle%this.fullAngle&&(c=this.fullAngle+this.w.config.plotOptions.pie.startAngle%this.fullAngle-.01),Math.ceil(c)>this.fullAngle&&(c-=this.fullAngle);var d=Math.PI*(c-90)/180,g=i.centerX+r*Math.cos(h),f=i.centerY+r*Math.sin(h),x=i.centerX+r*Math.cos(d),b=i.centerY+r*Math.sin(d),v=P.polarToCartesian(i.centerX,i.centerY,i.donutSize,c),y=P.polarToCartesian(i.centerX,i.centerY,i.donutSize,o),w=s>180?1:0,l=["M",g,f,"A",r,r,0,w,1,x,b];return t=i.chartType==="donut"?[].concat(l,["L",v.x,v.y,"A",i.donutSize,i.donutSize,0,w,0,y.x,y.y,"L",g,f,"z"]).join(" "):i.chartType==="pie"||i.chartType==="polarArea"?[].concat(l,["L",i.centerX,i.centerY,"L",g,f]).join(" "):[].concat(l).join(" "),n.roundPathCorners(t,2*this.strokeWidth)}},{key:"drawPolarElements",value:function(e){var t=this.w,i=new Ot(this.ctx),a=new X(this.ctx),s=new Gt(this.ctx),r=a.group(),n=a.group(),o=i.niceScale(0,Math.ceil(this.maxY),0),h=o.result.reverse(),c=o.result.length;this.maxY=o.niceMax;for(var d=t.globals.radialSize,g=d/(c-1),f=0;f1&&e.total.show&&(s=e.total.color);var n=r.globals.dom.baseEl.querySelector(".apexcharts-datalabel-label"),o=r.globals.dom.baseEl.querySelector(".apexcharts-datalabel-value");i=(0,e.value.formatter)(i,r),a||typeof e.total.formatter!="function"||(i=e.total.formatter(r));var h=t===e.total.label;t=e.name.formatter(t,h,r),n!==null&&(n.textContent=t),o!==null&&(o.textContent=i),n!==null&&(n.style.fill=s)}},{key:"printDataLabelsInner",value:function(e,t){var i=this.w,a=e.getAttribute("data:value"),s=i.globals.seriesNames[parseInt(e.parentNode.getAttribute("rel"),10)-1];i.globals.series.length>1&&this.printInnerLabels(t,s,a,e);var r=i.globals.dom.baseEl.querySelector(".apexcharts-datalabels-group");r!==null&&(r.style.opacity=1)}},{key:"drawSpokes",value:function(e){var t=this,i=this.w,a=new X(this.ctx),s=i.config.plotOptions.polarArea.spokes;if(s.strokeWidth!==0){for(var r=[],n=360/i.globals.series.length,o=0;o0&&(A=t.getPreviousPath(y));for(var k=0;k=10?e.x>0?(i="start",a+=10):e.x<0&&(i="end",a-=10):i="middle",Math.abs(e.y)>=t-10&&(e.y<0?s-=10:e.y>0&&(s+=10)),{textAnchor:i,newX:a,newY:s}}},{key:"getPreviousPath",value:function(e){for(var t=this.w,i=null,a=0;a0&&parseInt(s.realIndex,10)===parseInt(e,10)&&t.globals.previousPaths[a].paths[0]!==void 0&&(i=t.globals.previousPaths[a].paths[0].d)}return i}},{key:"getDataPointsPos",value:function(e,t){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this.dataPointsLen;e=e||[],t=t||[];for(var a=[],s=0;s=360&&(b=360-Math.abs(this.startAngle)-.1);var v=s.drawPath({d:"",stroke:f,strokeWidth:h*parseInt(g.strokeWidth,10)/100,fill:"none",strokeOpacity:g.opacity,classes:"apexcharts-radialbar-area"});if(g.dropShadow.enabled){var y=g.dropShadow;n.dropShadow(v,y)}d.add(v),v.attr("id","apexcharts-radialbarTrack-"+c),this.animatePaths(v,{centerX:i.centerX,centerY:i.centerY,endAngle:b,startAngle:x,size:i.size,i:c,totalItems:2,animBeginArr:0,dur:0,isTrack:!0,easing:a.globals.easing})}return r}},{key:"drawArcs",value:function(i){var a=this.w,s=new X(this.ctx),r=new ne(this.ctx),n=new ie(this.ctx),o=s.group(),h=this.getStrokeWidth(i);i.size=i.size-h/2;var c=a.config.plotOptions.radialBar.hollow.background,d=i.size-h*i.series.length-this.margin*i.series.length-h*parseInt(a.config.plotOptions.radialBar.track.strokeWidth,10)/100/2,g=d-a.config.plotOptions.radialBar.hollow.margin;a.config.plotOptions.radialBar.hollow.image!==void 0&&(c=this.drawHollowImage(i,o,d,c));var f=this.drawHollow({size:g,centerX:i.centerX,centerY:i.centerY,fill:c||"transparent"});if(a.config.plotOptions.radialBar.hollow.dropShadow.enabled){var x=a.config.plotOptions.radialBar.hollow.dropShadow;n.dropShadow(f,x)}var b=1;!this.radialDataLabels.total.show&&a.globals.series.length>1&&(b=0);var v=null;if(this.radialDataLabels.show){var y=a.globals.dom.Paper.select(".apexcharts-datalabels-group").members[0];v=this.renderInnerDataLabels(y,this.radialDataLabels,{hollowSize:d,centerX:i.centerX,centerY:i.centerY,opacity:b})}a.config.plotOptions.radialBar.hollow.position==="back"&&(o.add(f),v&&o.add(v));var w=!1;a.config.plotOptions.radialBar.inverseOrder&&(w=!0);for(var l=w?i.series.length-1:0;w?l>=0:l100?100:i.series[l])/100,L=Math.round(this.totalAngle*S)+this.startAngle,C=void 0;a.globals.dataChanged&&(k=this.startAngle,C=Math.round(this.totalAngle*P.negToZero(a.globals.previousPaths[l])/100)+k),Math.abs(L)+Math.abs(A)>=360&&(L-=.01),Math.abs(C)+Math.abs(k)>=360&&(C-=.01);var I=L-A,z=Array.isArray(a.config.stroke.dashArray)?a.config.stroke.dashArray[l]:a.config.stroke.dashArray,M=s.drawPath({d:"",stroke:m,strokeWidth:h,fill:"none",fillOpacity:a.config.fill.opacity,classes:"apexcharts-radialbar-area apexcharts-radialbar-slice-"+l,strokeDashArray:z});if(X.setAttrs(M.node,{"data:angle":I,"data:value":i.series[l]}),a.config.chart.dropShadow.enabled){var T=a.config.chart.dropShadow;n.dropShadow(M,T,l)}if(n.setSelectionFilter(M,0,l),this.addListeners(M,this.radialDataLabels),u.add(M),M.attr({index:0,j:l}),this.barLabels.enabled){var E=P.polarToCartesian(i.centerX,i.centerY,i.size,A),O=this.barLabels.formatter(a.globals.seriesNames[l],{seriesIndex:l,w:a}),D=["apexcharts-radialbar-label"];this.barLabels.onClick||D.push("apexcharts-no-click");var H=this.barLabels.useSeriesColors?a.globals.colors[l]:a.config.chart.foreColor;H||(H=a.config.chart.foreColor);var W=E.x+this.barLabels.offsetX,N=E.y+this.barLabels.offsetY,B=s.drawText({x:W,y:N,text:O,textAnchor:"end",dominantBaseline:"middle",fontFamily:this.barLabels.fontFamily,fontWeight:this.barLabels.fontWeight,fontSize:this.barLabels.fontSize,foreColor:H,cssClass:D.join(" ")});B.on("click",this.onBarLabelClick),B.attr({rel:l+1}),A!==0&&B.attr({"transform-origin":"".concat(W," ").concat(N),transform:"rotate(".concat(A," 0 0)")}),u.add(B)}var q=0;!this.initialAnim||a.globals.resized||a.globals.dataChanged||(q=a.config.chart.animations.speed),a.globals.dataChanged&&(q=a.config.chart.animations.dynamicAnimation.speed),this.animDur=q/(1.2*i.series.length)+this.animDur,this.animBeginArr.push(this.animDur),this.animatePaths(M,{centerX:i.centerX,centerY:i.centerY,endAngle:L,startAngle:A,prevEndAngle:C,prevStartAngle:k,size:i.size,i:l,totalItems:2,animBeginArr:this.animBeginArr,dur:q,shouldSetPrevPaths:!0,easing:a.globals.easing})}return{g:o,elHollow:f,dataLabels:v}}},{key:"drawHollow",value:function(i){var a=new X(this.ctx).drawCircle(2*i.size);return a.attr({class:"apexcharts-radialbar-hollow",cx:i.centerX,cy:i.centerY,r:i.size,fill:i.fill}),a}},{key:"drawHollowImage",value:function(i,a,s,r){var n=this.w,o=new ne(this.ctx),h=P.randomId(),c=n.config.plotOptions.radialBar.hollow.image;if(n.config.plotOptions.radialBar.hollow.imageClipped)o.clippedImgArea({width:s,height:s,image:c,patternID:"pattern".concat(n.globals.cuid).concat(h)}),r="url(#pattern".concat(n.globals.cuid).concat(h,")");else{var d=n.config.plotOptions.radialBar.hollow.imageWidth,g=n.config.plotOptions.radialBar.hollow.imageHeight;if(d===void 0&&g===void 0){var f=n.globals.dom.Paper.image(c).loaded(function(b){this.move(i.centerX-b.width/2+n.config.plotOptions.radialBar.hollow.imageOffsetX,i.centerY-b.height/2+n.config.plotOptions.radialBar.hollow.imageOffsetY)});a.add(f)}else{var x=n.globals.dom.Paper.image(c).loaded(function(b){this.move(i.centerX-d/2+n.config.plotOptions.radialBar.hollow.imageOffsetX,i.centerY-g/2+n.config.plotOptions.radialBar.hollow.imageOffsetY),this.size(d,g)});a.add(x)}}return r}},{key:"getStrokeWidth",value:function(i){var a=this.w;return i.size*(100-parseInt(a.config.plotOptions.radialBar.hollow.size,10))/100/(i.series.length+1)-this.margin}},{key:"onBarLabelClick",value:function(i){var a=parseInt(i.target.getAttribute("rel"),10)-1,s=this.barLabels.onClick,r=this.w;s&&s(r.globals.seriesNames[a],{w:r,seriesIndex:a})}}]),t}(),sa=function(p){Te(t,me);var e=Ie(t);function t(){return F(this,t),e.apply(this,arguments)}return R(t,[{key:"draw",value:function(i,a){var s=this.w,r=new X(this.ctx);this.rangeBarOptions=this.w.config.plotOptions.rangeBar,this.series=i,this.seriesRangeStart=s.globals.seriesRangeStart,this.seriesRangeEnd=s.globals.seriesRangeEnd,this.barHelpers.initVariables(i);for(var n=r.group({class:"apexcharts-rangebar-series apexcharts-plot-series"}),o=0;o0&&(this.visibleI=this.visibleI+1);var w=0,l=0,u=0;this.yRatio.length>1&&(this.yaxisIndex=s.globals.seriesYAxisReverseMap[b][0],u=b);var m=this.barHelpers.initialPositions();x=m.y,g=m.zeroW,f=m.x,l=m.barWidth,w=m.barHeight,h=m.xDivision,c=m.yDivision,d=m.zeroH;for(var A=r.group({class:"apexcharts-datalabels","data:realIndex":b}),k=r.group({class:"apexcharts-rangebar-goals-markers"}),S=0;S0});return this.isHorizontal?(r=b.config.plotOptions.bar.rangeBarGroupRows?o+g*u:o+c*this.visibleI+g*u,m>-1&&!b.config.plotOptions.bar.rangeBarOverlap&&(v=b.globals.seriesRange[a][m].overlaps).indexOf(y)>-1&&(r=(c=x.barHeight/v.length)*this.visibleI+g*(100-parseInt(this.barOptions.barHeight,10))/100/2+c*(this.visibleI+v.indexOf(y))+g*u)):(u>-1&&!b.globals.timescaleLabels.length&&(n=b.config.plotOptions.bar.rangeBarGroupRows?h+f*u:h+d*this.visibleI+f*u),m>-1&&!b.config.plotOptions.bar.rangeBarOverlap&&(v=b.globals.seriesRange[a][m].overlaps).indexOf(y)>-1&&(n=(d=x.barWidth/v.length)*this.visibleI+f*(100-parseInt(this.barOptions.barWidth,10))/100/2+d*(this.visibleI+v.indexOf(y))+f*u)),{barYPosition:r,barXPosition:n,barHeight:c,barWidth:d}}},{key:"drawRangeColumnPaths",value:function(i){var a=i.indexes,s=i.x,r=i.xDivision,n=i.barWidth,o=i.barXPosition,h=i.zeroH,c=this.w,d=a.i,g=a.j,f=a.realIndex,x=a.translationsIndex,b=this.yRatio[x],v=this.getRangeValue(f,g),y=Math.min(v.start,v.end),w=Math.max(v.start,v.end);this.series[d][g]===void 0||this.series[d][g]===null?y=h:(y=h-y/b,w=h-w/b);var l=Math.abs(w-y),u=this.barHelpers.getColumnPaths({barXPosition:o,barWidth:n,y1:y,y2:w,strokeWidth:this.strokeWidth,series:this.seriesRangeEnd,realIndex:f,i:f,j:g,w:c});if(c.globals.isXNumeric){var m=this.getBarXForNumericXAxis({x:s,j:g,realIndex:f,barWidth:n});s=m.x,o=m.barXPosition}else s+=r;return{pathTo:u.pathTo,pathFrom:u.pathFrom,barHeight:l,x:s,y:v.start<0&&v.end<0?y:w,goalY:this.barHelpers.getGoalValues("y",null,h,d,g,x),barXPosition:o}}},{key:"preventBarOverflow",value:function(i){var a=this.w;return i<0&&(i=0),i>a.globals.gridWidth&&(i=a.globals.gridWidth),i}},{key:"drawRangeBarPaths",value:function(i){var a=i.indexes,s=i.y,r=i.y1,n=i.y2,o=i.yDivision,h=i.barHeight,c=i.barYPosition,d=i.zeroW,g=this.w,f=a.realIndex,x=a.j,b=this.preventBarOverflow(d+r/this.invertedYRatio),v=this.preventBarOverflow(d+n/this.invertedYRatio),y=this.getRangeValue(f,x),w=Math.abs(v-b),l=this.barHelpers.getBarpaths({barYPosition:c,barHeight:h,x1:b,x2:v,strokeWidth:this.strokeWidth,series:this.seriesRangeEnd,i:f,realIndex:f,j:x,w:g});return g.globals.isXNumeric||(s+=o),{pathTo:l.pathTo,pathFrom:l.pathFrom,barWidth:w,x:y.start<0&&y.end<0?b:v,goalX:this.barHelpers.getGoalValues("x",d,null,f,x),y:s}}},{key:"getRangeValue",value:function(i,a){var s=this.w;return{start:s.globals.seriesRangeStart[i][a],end:s.globals.seriesRangeEnd[i][a]}}}]),t}(),ra=function(){function p(e){F(this,p),this.w=e.w,this.lineCtx=e}return R(p,[{key:"sameValueSeriesFix",value:function(e,t){var i=this.w;if((i.config.fill.type==="gradient"||i.config.fill.type[e]==="gradient")&&new $(this.lineCtx.ctx,i).seriesHaveSameValues(e)){var a=t[e].slice();a[a.length-1]=a[a.length-1]+1e-6,t[e]=a}return t}},{key:"calculatePoints",value:function(e){var t=e.series,i=e.realIndex,a=e.x,s=e.y,r=e.i,n=e.j,o=e.prevY,h=this.w,c=[],d=[];if(n===0){var g=this.lineCtx.categoryAxisCorrection+h.config.markers.offsetX;h.globals.isXNumeric&&(g=(h.globals.seriesX[i][0]-h.globals.minX)/this.lineCtx.xRatio+h.config.markers.offsetX),c.push(g),d.push(P.isNumber(t[r][0])?o+h.config.markers.offsetY:null),c.push(a+h.config.markers.offsetX),d.push(P.isNumber(t[r][n+1])?s+h.config.markers.offsetY:null)}else c.push(a+h.config.markers.offsetX),d.push(P.isNumber(t[r][n+1])?s+h.config.markers.offsetY:null);return{x:c,y:d}}},{key:"checkPreviousPaths",value:function(e){for(var t=e.pathFromLine,i=e.pathFromArea,a=e.realIndex,s=this.w,r=0;r0&&parseInt(n.realIndex,10)===parseInt(a,10)&&(n.type==="line"?(this.lineCtx.appendPathFrom=!1,t=s.globals.previousPaths[r].paths[0].d):n.type==="area"&&(this.lineCtx.appendPathFrom=!1,i=s.globals.previousPaths[r].paths[0].d,s.config.stroke.show&&s.globals.previousPaths[r].paths[1]&&(t=s.globals.previousPaths[r].paths[1].d)))}return{pathFromLine:t,pathFromArea:i}}},{key:"determineFirstPrevY",value:function(e){var t,i,a,s=e.i,r=e.realIndex,n=e.series,o=e.prevY,h=e.lineYPosition,c=e.translationsIndex,d=this.w,g=d.config.chart.stacked&&!d.globals.comboCharts||d.config.chart.stacked&&d.globals.comboCharts&&(!this.w.config.chart.stackOnlyBar||((t=this.w.config.series[r])===null||t===void 0?void 0:t.type)==="bar"||((i=this.w.config.series[r])===null||i===void 0?void 0:i.type)==="column");if(((a=n[s])===null||a===void 0?void 0:a[0])!==void 0)o=(h=g&&s>0?this.lineCtx.prevSeriesY[s-1][0]:this.lineCtx.zeroY)-n[s][0]/this.lineCtx.yRatio[c]+2*(this.lineCtx.isReversed?n[s][0]/this.lineCtx.yRatio[c]:0);else if(g&&s>0&&n[s][0]===void 0){for(var f=s-1;f>=0;f--)if(n[f][0]!==null&&n[f][0]!==void 0){o=h=this.lineCtx.prevSeriesY[f][0];break}}return{prevY:o,lineYPosition:h}}}]),p}(),na=function(p){for(var e,t,i,a,s=function(c){for(var d=[],g=c[0],f=c[1],x=d[0]=et(g,f),b=1,v=c.length-1;b9&&(a=3*i/Math.sqrt(a),s[o]=a*e,s[o+1]=a*t);for(var h=0;h<=r;h++)a=(p[Math.min(r,h+1)][0]-p[Math.max(0,h-1)][0])/(6*(1+s[h]*s[h])),n.push([a||0,s[h]*a||0]);return n},oa=function(p){var e=na(p),t=p[1],i=p[0],a=[],s=e[1],r=e[0];a.push(i,[i[0]+r[0],i[1]+r[1],t[0]-s[0],t[1]-s[1],t[0],t[1]]);for(var n=2,o=e.length;n1&&i[1].length<6){var a=i[0].length;i[1]=[2*i[0][a-2]-i[0][a-4],2*i[0][a-1]-i[0][a-3]].concat(i[1])}i[0]=i[0].slice(-2)}return i};function et(p,e){return(e[1]-p[1])/(e[0]-p[0])}var tt=function(){function p(e,t,i){F(this,p),this.ctx=e,this.w=e.w,this.xyRatios=t,this.pointsChart=!(this.w.config.chart.type!=="bubble"&&this.w.config.chart.type!=="scatter")||i,this.scatter=new Yt(this.ctx),this.noNegatives=this.w.globals.minX===Number.MAX_VALUE,this.lineHelpers=new ra(this),this.markers=new ye(this.ctx),this.prevSeriesY=[],this.categoryAxisCorrection=0,this.yaxisIndex=0}return R(p,[{key:"draw",value:function(e,t,i,a){var s,r=this.w,n=new X(this.ctx),o=r.globals.comboCharts?t:r.config.chart.type,h=n.group({class:"apexcharts-".concat(o,"-series apexcharts-plot-series")}),c=new $(this.ctx,r);this.yRatio=this.xyRatios.yRatio,this.zRatio=this.xyRatios.zRatio,this.xRatio=this.xyRatios.xRatio,this.baseLineY=this.xyRatios.baseLineY,e=c.getLogSeries(e),this.yRatio=c.getLogYRatios(this.yRatio),this.prevSeriesY=[];for(var d=[],g=0;g1?f:0;this._initSerieVariables(e,g,f);var b=[],v=[],y=[],w=r.globals.padHorizontal+this.categoryAxisCorrection;this.ctx.series.addCollapsedClassToSeries(this.elSeries,f),r.globals.isXNumeric&&r.globals.seriesX.length>0&&(w=(r.globals.seriesX[f][0]-r.globals.minX)/this.xRatio),y.push(w);var l,u=w,m=void 0,A=u,k=this.zeroY,S=this.zeroY;k=this.lineHelpers.determineFirstPrevY({i:g,realIndex:f,series:e,prevY:k,lineYPosition:0,translationsIndex:x}).prevY,r.config.stroke.curve==="monotoneCubic"&&e[g][0]===null?b.push(null):b.push(k),l=k,o==="rangeArea"&&(m=S=this.lineHelpers.determineFirstPrevY({i:g,realIndex:f,series:a,prevY:S,lineYPosition:0,translationsIndex:x}).prevY,v.push(b[0]!==null?S:null));var L=this._calculatePathsFrom({type:o,series:e,i:g,realIndex:f,translationsIndex:x,prevX:A,prevY:k,prevY2:S}),C=[b[0]],I=[v[0]],z={type:o,series:e,realIndex:f,translationsIndex:x,i:g,x:w,y:1,pX:u,pY:l,pathsFrom:L,linePaths:[],areaPaths:[],seriesIndex:i,lineYPosition:0,xArrj:y,yArrj:b,y2Arrj:v,seriesRangeEnd:a},M=this._iterateOverDataPoints(Y(Y({},z),{},{iterations:o==="rangeArea"?e[g].length-1:void 0,isRangeStart:!0}));if(o==="rangeArea"){for(var T=this._calculatePathsFrom({series:a,i:g,realIndex:f,prevX:A,prevY:S}),E=this._iterateOverDataPoints(Y(Y({},z),{},{series:a,xArrj:[w],yArrj:C,y2Arrj:I,pY:m,areaPaths:M.areaPaths,pathsFrom:T,iterations:a[g].length-1,isRangeStart:!1})),O=M.linePaths.length/2,D=0;D=0;H--)h.add(d[H]);else for(var W=0;W1&&(this.yaxisIndex=a.globals.seriesYAxisReverseMap[i],r=i),this.isReversed=a.config.yaxis[this.yaxisIndex]&&a.config.yaxis[this.yaxisIndex].reversed,this.zeroY=a.globals.gridHeight-this.baseLineY[r]-(this.isReversed?a.globals.gridHeight:0)+(this.isReversed?2*this.baseLineY[r]:0),this.areaBottomY=this.zeroY,(this.zeroY>a.globals.gridHeight||a.config.plotOptions.area.fillTo==="end")&&(this.areaBottomY=a.globals.gridHeight),this.categoryAxisCorrection=this.xDivision/2,this.elSeries=s.group({class:"apexcharts-series",zIndex:a.config.series[i].zIndex!==void 0?a.config.series[i].zIndex:i,seriesName:P.escapeString(a.globals.seriesNames[i])}),this.elPointsMain=s.group({class:"apexcharts-series-markers-wrap","data:realIndex":i}),this.elDataLabelsWrap=s.group({class:"apexcharts-datalabels","data:realIndex":i});var n=e[t].length===a.globals.dataPoints;this.elSeries.attr({"data:longestSeries":n,rel:t+1,"data:realIndex":i}),this.appendPathFrom=!0}},{key:"_calculatePathsFrom",value:function(e){var t,i,a,s,r=e.type,n=e.series,o=e.i,h=e.realIndex,c=e.translationsIndex,d=e.prevX,g=e.prevY,f=e.prevY2,x=this.w,b=new X(this.ctx);if(n[o][0]===null){for(var v=0;v0){var y=this.lineHelpers.checkPreviousPaths({pathFromLine:a,pathFromArea:s,realIndex:h});a=y.pathFromLine,s=y.pathFromArea}return{prevX:d,prevY:g,linePath:t,areaPath:i,pathFromLine:a,pathFromArea:s}}},{key:"_handlePaths",value:function(e){var t=e.type,i=e.realIndex,a=e.i,s=e.paths,r=this.w,n=new X(this.ctx),o=new ne(this.ctx);this.prevSeriesY.push(s.yArrj),r.globals.seriesXvalues[i]=s.xArrj,r.globals.seriesYvalues[i]=s.yArrj;var h=r.config.forecastDataPoints;if(h.count>0&&t!=="rangeArea"){var c=r.globals.seriesXvalues[i][r.globals.seriesXvalues[i].length-h.count-1],d=n.drawRect(c,0,r.globals.gridWidth,r.globals.gridHeight,0);r.globals.dom.elForecastMask.appendChild(d.node);var g=n.drawRect(0,0,c,r.globals.gridHeight,0);r.globals.dom.elNonForecastMask.appendChild(g.node)}this.pointsChart||r.globals.delayedElements.push({el:this.elPointsMain.node,index:i});var f={i:a,realIndex:i,animationDelay:a,initialSpeed:r.config.chart.animations.speed,dataChangeSpeed:r.config.chart.animations.dynamicAnimation.speed,className:"apexcharts-".concat(t)};if(t==="area")for(var x=o.fillPath({seriesNumber:i}),b=0;b0&&t!=="rangeArea"){var k=n.renderPaths(m);k.node.setAttribute("stroke-dasharray",h.dashArray),h.strokeWidth&&k.node.setAttribute("stroke-width",h.strokeWidth),this.elSeries.add(k),k.attr("clip-path","url(#forecastMask".concat(r.globals.cuid,")")),A.attr("clip-path","url(#nonForecastMask".concat(r.globals.cuid,")"))}}}}},{key:"_iterateOverDataPoints",value:function(e){var t,i,a=this,s=e.type,r=e.series,n=e.iterations,o=e.realIndex,h=e.translationsIndex,c=e.i,d=e.x,g=e.y,f=e.pX,x=e.pY,b=e.pathsFrom,v=e.linePaths,y=e.areaPaths,w=e.seriesIndex,l=e.lineYPosition,u=e.xArrj,m=e.yArrj,A=e.y2Arrj,k=e.isRangeStart,S=e.seriesRangeEnd,L=this.w,C=new X(this.ctx),I=this.yRatio,z=b.prevY,M=b.linePath,T=b.areaPath,E=b.pathFromLine,O=b.pathFromArea,D=P.isNumber(L.globals.minYArr[o])?L.globals.minYArr[o]:L.globals.minY;n||(n=L.globals.dataPoints>1?L.globals.dataPoints-1:L.globals.dataPoints);var H=function(Q,ee){return ee-Q/I[h]+2*(a.isReversed?Q/I[h]:0)},W=g,N=L.config.chart.stacked&&!L.globals.comboCharts||L.config.chart.stacked&&L.globals.comboCharts&&(!this.w.config.chart.stackOnlyBar||((t=this.w.config.series[o])===null||t===void 0?void 0:t.type)==="bar"||((i=this.w.config.series[o])===null||i===void 0?void 0:i.type)==="column"),B=L.config.stroke.curve;Array.isArray(B)&&(B=Array.isArray(w)?B[w[c]]:B[c]);for(var q,Z=0,j=0;j0&&L.globals.collapsedSeries.length0;ee--){if(!(L.globals.collapsedSeriesIndices.indexOf(w?.[ee]||ee)>-1))return ee;ee--}return 0}(c-1)][j+1]:l=this.zeroY:l=this.zeroY,se?g=H(D,l):(g=H(r[c][j+1],l),s==="rangeArea"&&(W=H(S[c][j+1],l))),u.push(d),!se||L.config.stroke.curve!=="smooth"&&L.config.stroke.curve!=="monotoneCubic"?(m.push(g),A.push(W)):(m.push(null),A.push(null));var G=this.lineHelpers.calculatePoints({series:r,x:d,y:g,realIndex:o,i:c,j,prevY:z}),_=this._createPaths({type:s,series:r,i:c,realIndex:o,j,x:d,y:g,y2:W,xArrj:u,yArrj:m,y2Arrj:A,pX:f,pY:x,pathState:Z,segmentStartX:q,linePath:M,areaPath:T,linePaths:v,areaPaths:y,curve:B,isRangeStart:k});y=_.areaPaths,v=_.linePaths,f=_.pX,x=_.pY,Z=_.pathState,q=_.segmentStartX,T=_.areaPath,M=_.linePath,!this.appendPathFrom||B==="monotoneCubic"&&s==="rangeArea"||(E+=C.line(d,this.zeroY),O+=C.line(d,this.zeroY)),this.handleNullDataPoints(r,G,c,j,o),this._handleMarkersAndLabels({type:s,pointsPos:G,i:c,j,realIndex:o,isRangeStart:k})}return{yArrj:m,xArrj:u,pathFromArea:O,areaPaths:y,pathFromLine:E,linePaths:v,linePath:M,areaPath:T}}},{key:"_handleMarkersAndLabels",value:function(e){var t=e.type,i=e.pointsPos,a=e.isRangeStart,s=e.i,r=e.j,n=e.realIndex,o=this.w,h=new be(this.ctx);if(this.pointsChart)this.scatter.draw(this.elSeries,r,{realIndex:n,pointsPos:i,zRatio:this.zRatio,elParent:this.elPointsMain});else{o.globals.series[s].length>1&&this.elPointsMain.node.classList.add("apexcharts-element-hidden");var c=this.markers.plotChartMarkers(i,n,r+1);c!==null&&this.elPointsMain.add(c)}var d=h.drawDataLabel({type:t,isRangeStart:a,pos:i,i:n,j:r+1});d!==null&&this.elDataLabelsWrap.add(d)}},{key:"_createPaths",value:function(e){var t=e.type,i=e.series,a=e.i;e.realIndex;var s=e.j,r=e.x,n=e.y,o=e.xArrj,h=e.yArrj,c=e.y2,d=e.y2Arrj,g=e.pX,f=e.pY,x=e.pathState,b=e.segmentStartX,v=e.linePath,y=e.areaPath,w=e.linePaths,l=e.areaPaths,u=e.curve,m=e.isRangeStart;this.w;var A,k=new X(this.ctx),S=this.areaBottomY,L=t==="rangeArea",C=t==="rangeArea"&&m;switch(u){case"monotoneCubic":var I=m?h:d;switch(x){case 0:if(I[s+1]===null)break;x=1;case 1:if(!(L?o.length===i[a].length:s===i[a].length-2))break;case 2:var z=m?o:o.slice().reverse(),M=m?I:I.slice().reverse(),T=(A=M,z.map(function(V,G){return[V,A[G]]}).filter(function(V){return V[1]!==null})),E=T.length>1?oa(T):T,O=[];L&&(C?l=T:O=l.reverse());var D=0,H=0;if(function(V,G){for(var _=function(Se){var ae=[],le=0;return Se.forEach(function(Si){Si!==null?le++:le>0&&(ae.push(le),le=0)}),le>0&&ae.push(le),ae}(V),Q=[],ee=0,oe=0;ee<_.length;oe+=_[ee++])Q[ee]=la(G,oe,oe+_[ee]);return Q}(M,E).forEach(function(V){D++;var G=function(ee){for(var oe="",Se=0;Se4?(oe+="C".concat(ae[0],", ").concat(ae[1]),oe+=", ".concat(ae[2],", ").concat(ae[3]),oe+=", ".concat(ae[4],", ").concat(ae[5])):le>2&&(oe+="S".concat(ae[0],", ").concat(ae[1]),oe+=", ".concat(ae[2],", ").concat(ae[3]))}return oe}(V),_=H,Q=(H+=V.length)-1;C?v=k.move(T[_][0],T[_][1])+G:L?v=k.move(O[_][0],O[_][1])+k.line(T[_][0],T[_][1])+G+k.line(O[Q][0],O[Q][1]):(v=k.move(T[_][0],T[_][1])+G,y=v+k.line(T[Q][0],S)+k.line(T[_][0],S)+"z",l.push(y)),w.push(v)}),L&&D>1&&!C){var W=w.slice(D).reverse();w.splice(D),W.forEach(function(V){return w.push(V)})}x=0}break;case"smooth":var N=.35*(r-g);if(i[a][s]===null)x=0;else switch(x){case 0:if(b=g,v=C?k.move(g,d[s])+k.line(g,f):k.move(g,f),y=k.move(g,f),x=1,s=i[a].length-2&&(C&&(v+=k.curve(r,n,r,n,r,c)+k.move(r,c)),y+=k.curve(r,n,r,n,r,S)+k.line(b,S)+"z",w.push(v),l.push(y),x=-1)}}g=r,f=n;break;default:var Z=function(V,G,_){var Q=[];switch(V){case"stepline":Q=k.line(G,null,"H")+k.line(null,_,"V");break;case"linestep":Q=k.line(null,_,"V")+k.line(G,null,"H");break;case"straight":Q=k.line(G,_)}return Q};if(i[a][s]===null)x=0;else switch(x){case 0:if(b=g,v=C?k.move(g,d[s])+k.line(g,f):k.move(g,f),y=k.move(g,f),x=1,s=i[a].length-2&&(C&&(v+=k.line(r,c)),y+=k.line(r,S)+k.line(b,S)+"z",w.push(v),l.push(y),x=-1)}}g=r,f=n}return{linePaths:w,areaPaths:l,pX:g,pY:f,pathState:x,segmentStartX:b,linePath:v,areaPath:y}}},{key:"handleNullDataPoints",value:function(e,t,i,a,s){var r=this.w;if(e[i][a]===null&&r.config.markers.showNullDataPoints||e[i].length===1){var n=this.strokeWidth-r.config.markers.strokeWidth/2;n>0||(n=0);var o=this.markers.plotChartMarkers(t,s,a+1,n,!0);o!==null&&this.elPointsMain.add(o)}}}]),p}();window.TreemapSquared={},window.TreemapSquared.generate=function(){function p(n,o,h,c){this.xoffset=n,this.yoffset=o,this.height=c,this.width=h,this.shortestEdge=function(){return Math.min(this.height,this.width)},this.getCoordinates=function(d){var g,f=[],x=this.xoffset,b=this.yoffset,v=s(d)/this.height,y=s(d)/this.width;if(this.width>=this.height)for(g=0;g=this.height){var f=d/this.height,x=this.width-f;g=new p(this.xoffset+f,this.yoffset,x,this.height)}else{var b=d/this.width,v=this.height-b;g=new p(this.xoffset,this.yoffset+b,this.width,v)}return g}}function e(n,o,h,c,d){c=c===void 0?0:c,d=d===void 0?0:d;var g=t(function(f,x){var b,v=[],y=x/s(f);for(b=0;b=l}(o,g=n[0],d)?(o.push(g),t(n.slice(1),o,h,c)):(f=h.cutArea(s(o),c),c.push(h.getCoordinates(o)),t(n,[],f,c)),c;c.push(h.getCoordinates(o))}function i(n,o){var h=Math.min.apply(Math,n),c=Math.max.apply(Math,n),d=s(n);return Math.max(Math.pow(o,2)*c/Math.pow(d,2),Math.pow(d,2)/(Math.pow(o,2)*h))}function a(n){return n&&n.constructor===Array}function s(n){var o,h=0;for(o=0;or-a&&h.width<=n-s){var c=o.rotateAroundCenter(e.node);e.node.setAttribute("transform","rotate(-90 ".concat(c.x," ").concat(c.y,") translate(").concat(h.height/3,")"))}}},{key:"truncateLabels",value:function(e,t,i,a,s,r){var n=new X(this.ctx),o=n.getTextRects(e,t).width+this.w.config.stroke.width+5>s-i&&r-a>s-i?r-a:s-i,h=n.getTextBasedOnMaxWidth({text:e,maxWidth:o,fontSize:t});return e.length!==h.length&&o/t<5?"":h}},{key:"animateTreemap",value:function(e,t,i,a){var s=new ve(this.ctx);s.animateRect(e,{x:t.x,y:t.y,width:t.width,height:t.height},{x:i.x,y:i.y,width:i.width,height:i.height},a,function(){s.animationCompleted(e)})}}]),p}(),_t=86400,ca=10/_t,da=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w,this.timeScaleArray=[],this.utc=this.w.config.xaxis.labels.datetimeUTC}return R(p,[{key:"calculateTimeScaleTicks",value:function(e,t){var i=this,a=this.w;if(a.globals.allSeriesCollapsed)return a.globals.labels=[],a.globals.timescaleLabels=[],[];var s=new K(this.ctx),r=(t-e)/864e5;this.determineInterval(r),a.globals.disableZoomIn=!1,a.globals.disableZoomOut=!1,r5e4&&(a.globals.disableZoomOut=!0);var n=s.getTimeUnitsfromTimestamp(e,t,this.utc),o=a.globals.gridWidth/r,h=o/24,c=h/60,d=c/60,g=Math.floor(24*r),f=Math.floor(1440*r),x=Math.floor(r*_t),b=Math.floor(r),v=Math.floor(r/30),y=Math.floor(r/365),w={minMillisecond:n.minMillisecond,minSecond:n.minSecond,minMinute:n.minMinute,minHour:n.minHour,minDate:n.minDate,minMonth:n.minMonth,minYear:n.minYear},l={firstVal:w,currentMillisecond:w.minMillisecond,currentSecond:w.minSecond,currentMinute:w.minMinute,currentHour:w.minHour,currentMonthDate:w.minDate,currentDate:w.minDate,currentMonth:w.minMonth,currentYear:w.minYear,daysWidthOnXAxis:o,hoursWidthOnXAxis:h,minutesWidthOnXAxis:c,secondsWidthOnXAxis:d,numberOfSeconds:x,numberOfMinutes:f,numberOfHours:g,numberOfDays:b,numberOfMonths:v,numberOfYears:y};switch(this.tickInterval){case"years":this.generateYearScale(l);break;case"months":case"half_year":this.generateMonthScale(l);break;case"months_days":case"months_fortnight":case"days":case"week_days":this.generateDayScale(l);break;case"hours":this.generateHourScale(l);break;case"minutes_fives":case"minutes":this.generateMinuteScale(l);break;case"seconds_tens":case"seconds_fives":case"seconds":this.generateSecondScale(l)}var u=this.timeScaleArray.map(function(m){var A={position:m.position,unit:m.unit,year:m.year,day:m.day?m.day:1,hour:m.hour?m.hour:0,month:m.month+1};return m.unit==="month"?Y(Y({},A),{},{day:1,value:m.value+1}):m.unit==="day"||m.unit==="hour"?Y(Y({},A),{},{value:m.value}):m.unit==="minute"?Y(Y({},A),{},{value:m.value,minute:m.value}):m.unit==="second"?Y(Y({},A),{},{value:m.value,minute:m.minute,second:m.second}):m});return u.filter(function(m){var A=1,k=Math.ceil(a.globals.gridWidth/120),S=m.value;a.config.xaxis.tickAmount!==void 0&&(k=a.config.xaxis.tickAmount),u.length>k&&(A=Math.floor(u.length/k));var L=!1,C=!1;switch(i.tickInterval){case"years":m.unit==="year"&&(L=!0);break;case"half_year":A=7,m.unit==="year"&&(L=!0);break;case"months":A=1,m.unit==="year"&&(L=!0);break;case"months_fortnight":A=15,m.unit!=="year"&&m.unit!=="month"||(L=!0),S===30&&(C=!0);break;case"months_days":A=10,m.unit==="month"&&(L=!0),S===30&&(C=!0);break;case"week_days":A=8,m.unit==="month"&&(L=!0);break;case"days":A=1,m.unit==="month"&&(L=!0);break;case"hours":m.unit==="day"&&(L=!0);break;case"minutes_fives":case"seconds_fives":S%5!=0&&(C=!0);break;case"seconds_tens":S%10!=0&&(C=!0)}if(i.tickInterval==="hours"||i.tickInterval==="minutes_fives"||i.tickInterval==="seconds_tens"||i.tickInterval==="seconds_fives"){if(!C)return!0}else if((S%A==0||L)&&!C)return!0})}},{key:"recalcDimensionsBasedOnFormat",value:function(e,t){var i=this.w,a=this.formatDates(e),s=this.removeOverlappingTS(a);i.globals.timescaleLabels=s.slice(),new Ne(this.ctx).plotCoords()}},{key:"determineInterval",value:function(e){var t=24*e,i=60*t;switch(!0){case e/365>5:this.tickInterval="years";break;case e>800:this.tickInterval="half_year";break;case e>180:this.tickInterval="months";break;case e>90:this.tickInterval="months_fortnight";break;case e>60:this.tickInterval="months_days";break;case e>30:this.tickInterval="week_days";break;case e>2:this.tickInterval="days";break;case t>2.4:this.tickInterval="hours";break;case i>15:this.tickInterval="minutes_fives";break;case i>5:this.tickInterval="minutes";break;case i>1:this.tickInterval="seconds_tens";break;case 60*i>20:this.tickInterval="seconds_fives";break;default:this.tickInterval="seconds"}}},{key:"generateYearScale",value:function(e){var t=e.firstVal,i=e.currentMonth,a=e.currentYear,s=e.daysWidthOnXAxis,r=e.numberOfYears,n=t.minYear,o=0,h=new K(this.ctx),c="year";if(t.minDate>1||t.minMonth>0){var d=h.determineRemainingDaysOfYear(t.minYear,t.minMonth,t.minDate);o=(h.determineDaysOfYear(t.minYear)-d+1)*s,n=t.minYear+1,this.timeScaleArray.push({position:o,value:n,unit:c,year:n,month:P.monthMod(i+1)})}else t.minDate===1&&t.minMonth===0&&this.timeScaleArray.push({position:o,value:n,unit:c,year:a,month:P.monthMod(i+1)});for(var g=n,f=o,x=0;x1){h=(c.determineDaysOfMonths(a+1,t.minYear)-i+1)*r,o=P.monthMod(a+1);var f=s+g,x=P.monthMod(o),b=o;o===0&&(d="year",b=f,x=1,f+=g+=1),this.timeScaleArray.push({position:h,value:b,unit:d,year:f,month:x})}else this.timeScaleArray.push({position:h,value:o,unit:d,year:s,month:P.monthMod(a)});for(var v=o+1,y=h,w=0,l=1;wn.determineDaysOfMonths(u+1,m)&&(c=1,o="month",f=u+=1),u},g=(24-t.minHour)*s,f=h,x=d(c,i,a);t.minHour===0&&t.minDate===1?(g=0,f=P.monthMod(t.minMonth),o="month",c=t.minDate):t.minDate!==1&&t.minHour===0&&t.minMinute===0&&(g=0,h=t.minDate,f=h,x=d(c=h,i,a)),this.timeScaleArray.push({position:g,value:f,unit:o,year:this._getYear(a,x,0),month:P.monthMod(x),day:c});for(var b=g,v=0;vo.determineDaysOfMonths(k+1,s)&&(v=1,k+=1),{month:k,date:v}},d=function(A,k){return A>o.determineDaysOfMonths(k+1,s)?k+=1:k},g=60-(t.minMinute+t.minSecond/60),f=g*r,x=t.minHour+1,b=x;g===60&&(f=0,b=x=t.minHour);var v=i;b>=24&&(b=0,v+=1,h="day");var y=c(v,a).month;y=d(v,y),this.timeScaleArray.push({position:f,value:x,unit:h,day:v,hour:b,year:s,month:P.monthMod(y)}),b++;for(var w=f,l=0;l=24&&(b=0,h="day",y=c(v+=1,y).month,y=d(v,y));var u=this._getYear(s,y,0);w=60*r+w;var m=b===0?v:b;this.timeScaleArray.push({position:w,value:m,unit:h,hour:b,day:v,year:u,month:P.monthMod(y)}),b++}}},{key:"generateMinuteScale",value:function(e){for(var t=e.currentMillisecond,i=e.currentSecond,a=e.currentMinute,s=e.currentHour,r=e.currentDate,n=e.currentMonth,o=e.currentYear,h=e.minutesWidthOnXAxis,c=e.secondsWidthOnXAxis,d=e.numberOfMinutes,g=a+1,f=r,x=n,b=o,v=s,y=(60-i-t/1e3)*c,w=0;w=60&&(g=0,(v+=1)===24&&(v=0)),this.timeScaleArray.push({position:y,value:g,unit:"minute",hour:v,minute:g,day:f,year:this._getYear(b,x,0),month:P.monthMod(x)}),y+=h,g++}},{key:"generateSecondScale",value:function(e){for(var t=e.currentMillisecond,i=e.currentSecond,a=e.currentMinute,s=e.currentHour,r=e.currentDate,n=e.currentMonth,o=e.currentYear,h=e.secondsWidthOnXAxis,c=e.numberOfSeconds,d=i+1,g=a,f=r,x=n,b=o,v=s,y=(1e3-t)/1e3*h,w=0;w=60&&(d=0,++g>=60&&(g=0,++v===24&&(v=0))),this.timeScaleArray.push({position:y,value:d,unit:"second",hour:v,minute:g,second:d,day:f,year:this._getYear(b,x,0),month:P.monthMod(x)}),y+=h,d++}},{key:"createRawDateString",value:function(e,t){var i=e.year;return e.month===0&&(e.month=1),i+="-"+("0"+e.month.toString()).slice(-2),e.unit==="day"?i+=e.unit==="day"?"-"+("0"+t).slice(-2):"-01":i+="-"+("0"+(e.day?e.day:"1")).slice(-2),e.unit==="hour"?i+=e.unit==="hour"?"T"+("0"+t).slice(-2):"T00":i+="T"+("0"+(e.hour?e.hour:"0")).slice(-2),e.unit==="minute"?i+=":"+("0"+t).slice(-2):i+=":"+(e.minute?("0"+e.minute).slice(-2):"00"),e.unit==="second"?i+=":"+("0"+t).slice(-2):i+=":00",this.utc&&(i+=".000Z"),i}},{key:"formatDates",value:function(e){var t=this,i=this.w;return e.map(function(a){var s=a.value.toString(),r=new K(t.ctx),n=t.createRawDateString(a,s),o=r.getDate(r.parseDate(n));if(t.utc||(o=r.getDate(r.parseDateWithTimezone(n))),i.config.xaxis.labels.format===void 0){var h="dd MMM",c=i.config.xaxis.labels.datetimeFormatter;a.unit==="year"&&(h=c.year),a.unit==="month"&&(h=c.month),a.unit==="day"&&(h=c.day),a.unit==="hour"&&(h=c.hour),a.unit==="minute"&&(h=c.minute),a.unit==="second"&&(h=c.second),s=r.formatDate(o,h)}else s=r.formatDate(o,i.config.xaxis.labels.format);return{dateString:n,position:a.position,value:s,unit:a.unit,year:a.year,month:a.month}})}},{key:"removeOverlappingTS",value:function(e){var t,i=this,a=new X(this.ctx),s=!1;e.length>0&&e[0].value&&e.every(function(o){return o.value.length===e[0].value.length})&&(s=!0,t=a.getTextRects(e[0].value).width);var r=0,n=e.map(function(o,h){if(h>0&&i.w.config.xaxis.labels.hideOverlappingLabels){var c=s?t:a.getTextRects(e[r].value).width,d=e[r].position;return o.position>d+c+10?(r=h,o):null}return o});return n=n.filter(function(o){return o!==null})}},{key:"_getYear",value:function(e,t,i){return e+Math.floor(t/12)+i}}]),p}(),ga=function(){function p(e,t){F(this,p),this.ctx=t,this.w=t.w,this.el=e}return R(p,[{key:"setupElements",value:function(){var e=this.w.globals,t=this.w.config,i=t.chart.type;e.axisCharts=["line","area","bar","rangeBar","rangeArea","candlestick","boxPlot","scatter","bubble","radar","heatmap","treemap"].indexOf(i)>-1,e.xyCharts=["line","area","bar","rangeBar","rangeArea","candlestick","boxPlot","scatter","bubble"].indexOf(i)>-1,e.isBarHorizontal=(t.chart.type==="bar"||t.chart.type==="rangeBar"||t.chart.type==="boxPlot")&&t.plotOptions.bar.horizontal,e.chartClass=".apexcharts"+e.chartID,e.dom.baseEl=this.el,e.dom.elWrap=document.createElement("div"),X.setAttrs(e.dom.elWrap,{id:e.chartClass.substring(1),class:"apexcharts-canvas "+e.chartClass.substring(1)}),this.el.appendChild(e.dom.elWrap),e.dom.Paper=new window.SVG.Doc(e.dom.elWrap),e.dom.Paper.attr({class:"apexcharts-svg","xmlns:data":"ApexChartsNS",transform:"translate(".concat(t.chart.offsetX,", ").concat(t.chart.offsetY,")")}),e.dom.Paper.node.style.background=t.theme.mode!=="dark"||t.chart.background?t.theme.mode!=="light"||t.chart.background?t.chart.background:"#fff":"#424242",this.setSVGDimensions(),e.dom.elLegendForeign=document.createElementNS(e.SVGNS,"foreignObject"),X.setAttrs(e.dom.elLegendForeign,{x:0,y:0,width:e.svgWidth,height:e.svgHeight}),e.dom.elLegendWrap=document.createElement("div"),e.dom.elLegendWrap.classList.add("apexcharts-legend"),e.dom.elLegendWrap.setAttribute("xmlns","http://www.w3.org/1999/xhtml"),e.dom.elLegendForeign.appendChild(e.dom.elLegendWrap),e.dom.Paper.node.appendChild(e.dom.elLegendForeign),e.dom.elGraphical=e.dom.Paper.group().attr({class:"apexcharts-inner apexcharts-graphical"}),e.dom.elDefs=e.dom.Paper.defs(),e.dom.Paper.add(e.dom.elGraphical),e.dom.elGraphical.add(e.dom.elDefs)}},{key:"plotChartType",value:function(e,t){var i=this.w,a=i.config,s=i.globals,r={series:[],i:[]},n={series:[],i:[]},o={series:[],i:[]},h={series:[],i:[]},c={series:[],i:[]},d={series:[],i:[]},g={series:[],i:[]},f={series:[],i:[]},x={series:[],seriesRangeEnd:[],i:[]},b=a.chart.type!==void 0?a.chart.type:"line",v=null,y=0;s.series.forEach(function(M,T){var E=e[T].type||b;switch(E){case"column":case"bar":c.series.push(M),c.i.push(T),i.globals.columnSeries=c;break;case"area":n.series.push(M),n.i.push(T);break;case"line":r.series.push(M),r.i.push(T);break;case"scatter":o.series.push(M),o.i.push(T);break;case"bubble":h.series.push(M),h.i.push(T);break;case"candlestick":d.series.push(M),d.i.push(T);break;case"boxPlot":g.series.push(M),g.i.push(T);break;case"rangeBar":f.series.push(M),f.i.push(T);break;case"rangeArea":x.series.push(s.seriesRangeStart[T]),x.seriesRangeEnd.push(s.seriesRangeEnd[T]),x.i.push(T);break;case"heatmap":case"treemap":case"pie":case"donut":case"polarArea":case"radialBar":case"radar":v=E;break;default:console.warn("You have specified an unrecognized series type (",E,").")}b!==E&&E!=="scatter"&&y++}),y>0&&(v!==null&&console.warn("Chart or series type ",v," can not appear with other chart or series types."),c.series.length>0&&a.plotOptions.bar.horizontal&&(y-=c.length,c={series:[],i:[]},i.globals.columnSeries={series:[],i:[]},console.warn("Horizontal bars are not supported in a mixed/combo chart. Please turn off `plotOptions.bar.horizontal`"))),s.comboCharts||(s.comboCharts=y>0);var w=new tt(this.ctx,t),l=new Qe(this.ctx,t);this.ctx.pie=new Vt(this.ctx);var u=new aa(this.ctx);this.ctx.rangeBar=new sa(this.ctx,t);var m=new ia(this.ctx),A=[];if(s.comboCharts){var k,S,L=new $(this.ctx);if(n.series.length>0&&(k=A).push.apply(k,te(L.drawSeriesByGroup(n,s.areaGroups,"area",w))),c.series.length>0)if(i.config.chart.stacked){var C=new St(this.ctx,t);A.push(C.draw(c.series,c.i))}else this.ctx.bar=new me(this.ctx,t),A.push(this.ctx.bar.draw(c.series,c.i));if(x.series.length>0&&A.push(w.draw(x.series,"rangeArea",x.i,x.seriesRangeEnd)),r.series.length>0&&(S=A).push.apply(S,te(L.drawSeriesByGroup(r,s.lineGroups,"line",w))),d.series.length>0&&A.push(l.draw(d.series,"candlestick",d.i)),g.series.length>0&&A.push(l.draw(g.series,"boxPlot",g.i)),f.series.length>0&&A.push(this.ctx.rangeBar.draw(f.series,f.i)),o.series.length>0){var I=new tt(this.ctx,t,!0);A.push(I.draw(o.series,"scatter",o.i))}if(h.series.length>0){var z=new tt(this.ctx,t,!0);A.push(z.draw(h.series,"bubble",h.i))}}else switch(a.chart.type){case"line":A=w.draw(s.series,"line");break;case"area":A=w.draw(s.series,"area");break;case"bar":a.chart.stacked?A=new St(this.ctx,t).draw(s.series):(this.ctx.bar=new me(this.ctx,t),A=this.ctx.bar.draw(s.series));break;case"candlestick":A=new Qe(this.ctx,t).draw(s.series,"candlestick");break;case"boxPlot":A=new Qe(this.ctx,t).draw(s.series,a.chart.type);break;case"rangeBar":A=this.ctx.rangeBar.draw(s.series);break;case"rangeArea":A=w.draw(s.seriesRangeStart,"rangeArea",void 0,s.seriesRangeEnd);break;case"heatmap":A=new ta(this.ctx,t).draw(s.series);break;case"treemap":A=new ha(this.ctx,t).draw(s.series);break;case"pie":case"donut":case"polarArea":A=this.ctx.pie.draw(s.series);break;case"radialBar":A=u.draw(s.series);break;case"radar":A=m.draw(s.series);break;default:A=w.draw(s.series)}return A}},{key:"setSVGDimensions",value:function(){var e=this.w.globals,t=this.w.config;t.chart.width||(t.chart.width="100%"),t.chart.height||(t.chart.height="auto"),e.svgWidth=t.chart.width,e.svgHeight=t.chart.height;var i=P.getDimensions(this.el),a=t.chart.width.toString().split(/[0-9]+/g).pop();a==="%"?P.isNumber(i[0])&&(i[0].width===0&&(i=P.getDimensions(this.el.parentNode)),e.svgWidth=i[0]*parseInt(t.chart.width,10)/100):a!=="px"&&a!==""||(e.svgWidth=parseInt(t.chart.width,10));var s=String(t.chart.height).toString().split(/[0-9]+/g).pop();if(e.svgHeight!=="auto"&&e.svgHeight!=="")if(s==="%"){var r=P.getDimensions(this.el.parentNode);e.svgHeight=r[1]*parseInt(t.chart.height,10)/100}else e.svgHeight=parseInt(t.chart.height,10);else e.axisCharts?e.svgHeight=e.svgWidth/1.61:e.svgHeight=e.svgWidth/1.2;if(e.svgWidth<0&&(e.svgWidth=0),e.svgHeight<0&&(e.svgHeight=0),X.setAttrs(e.dom.Paper.node,{width:e.svgWidth,height:e.svgHeight}),s!=="%"){var n=t.chart.sparkline.enabled?0:e.axisCharts?t.chart.parentHeightOffset:0;e.dom.Paper.node.parentNode.parentNode.style.minHeight=e.svgHeight+n+"px"}e.dom.elWrap.style.width=e.svgWidth+"px",e.dom.elWrap.style.height=e.svgHeight+"px"}},{key:"shiftGraphPosition",value:function(){var e=this.w.globals,t=e.translateY,i={transform:"translate("+e.translateX+", "+t+")"};X.setAttrs(e.dom.elGraphical.node,i)}},{key:"resizeNonAxisCharts",value:function(){var e=this.w,t=e.globals,i=0,a=e.config.chart.sparkline.enabled?1:15;a+=e.config.grid.padding.bottom,e.config.legend.position!=="top"&&e.config.legend.position!=="bottom"||!e.config.legend.show||e.config.legend.floating||(i=new Dt(this.ctx).legendHelpers.getLegendDimensions().clwh+10);var s=e.globals.dom.baseEl.querySelector(".apexcharts-radialbar, .apexcharts-pie"),r=2.05*e.globals.radialSize;if(s&&!e.config.chart.sparkline.enabled&&e.config.plotOptions.radialBar.startAngle!==0){var n=P.getBoundingClientRect(s);r=n.bottom;var o=n.bottom-n.top;r=Math.max(2.05*e.globals.radialSize,o)}var h=r+t.translateY+i+a;t.dom.elLegendForeign&&t.dom.elLegendForeign.setAttribute("height",h),e.config.chart.height&&String(e.config.chart.height).indexOf("%")>0||(t.dom.elWrap.style.height=h+"px",X.setAttrs(t.dom.Paper.node,{height:h}),t.dom.Paper.node.parentNode.parentNode.style.minHeight=h+"px")}},{key:"coreCalculations",value:function(){new rt(this.ctx).init()}},{key:"resetGlobals",value:function(){var e=this,t=function(){return e.w.config.series.map(function(s){return[]})},i=new Et,a=this.w.globals;i.initGlobalVars(a),a.seriesXvalues=t(),a.seriesYvalues=t()}},{key:"isMultipleY",value:function(){if(this.w.config.yaxis.constructor===Array&&this.w.config.yaxis.length>1)return this.w.globals.isMultipleYAxis=!0,!0}},{key:"xySettings",value:function(){var e=null,t=this.w;if(t.globals.axisCharts){if(t.config.xaxis.crosshairs.position==="back"&&new nt(this.ctx).drawXCrosshairs(),t.config.yaxis[0].crosshairs.position==="back"&&new nt(this.ctx).drawYCrosshairs(),t.config.xaxis.type==="datetime"&&t.config.xaxis.labels.formatter===void 0){this.ctx.timeScale=new da(this.ctx);var i=[];isFinite(t.globals.minX)&&isFinite(t.globals.maxX)&&!t.globals.isBarHorizontal?i=this.ctx.timeScale.calculateTimeScaleTicks(t.globals.minX,t.globals.maxX):t.globals.isBarHorizontal&&(i=this.ctx.timeScale.calculateTimeScaleTicks(t.globals.minY,t.globals.maxY)),this.ctx.timeScale.recalcDimensionsBasedOnFormat(i)}e=new $(this.ctx).getCalculatedRatios()}return e}},{key:"updateSourceChart",value:function(e){this.ctx.w.globals.selection=void 0,this.ctx.updateHelpers._updateOptions({chart:{selection:{xaxis:{min:e.w.globals.minX,max:e.w.globals.maxX}}}},!1,!1)}},{key:"setupBrushHandler",value:function(){var e=this,t=this.w;if(t.config.chart.brush.enabled&&typeof t.config.chart.events.selection!="function"){var i=Array.isArray(t.config.chart.brush.targets)?t.config.chart.brush.targets:[t.config.chart.brush.target];i.forEach(function(a){var s=ApexCharts.getChartByID(a);s.w.globals.brushSource=e.ctx,typeof s.w.config.chart.events.zoomed!="function"&&(s.w.config.chart.events.zoomed=function(){e.updateSourceChart(s)}),typeof s.w.config.chart.events.scrolled!="function"&&(s.w.config.chart.events.scrolled=function(){e.updateSourceChart(s)})}),t.config.chart.events.selection=function(a,s){i.forEach(function(r){ApexCharts.getChartByID(r).ctx.updateHelpers._updateOptions({xaxis:{min:s.xaxis.min,max:s.xaxis.max}},!1,!1,!1,!1)})}}}}]),p}(),ua=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"_updateOptions",value:function(e){var t=this,i=arguments.length>1&&arguments[1]!==void 0&&arguments[1],a=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2],s=!(arguments.length>3&&arguments[3]!==void 0)||arguments[3],r=arguments.length>4&&arguments[4]!==void 0&&arguments[4];return new Promise(function(n){var o=[t.ctx];s&&(o=t.ctx.getSyncedCharts()),t.ctx.w.globals.isExecCalled&&(o=[t.ctx],t.ctx.w.globals.isExecCalled=!1),o.forEach(function(h,c){var d=h.w;if(d.globals.shouldAnimate=a,i||(d.globals.resized=!0,d.globals.dataChanged=!0,a&&h.series.getPreviousPaths()),e&&J(e)==="object"&&(h.config=new Pe(e),e=$.extendArrayProps(h.config,e,d),h.w.globals.chartID!==t.ctx.w.globals.chartID&&delete e.series,d.config=P.extend(d.config,e),r&&(d.globals.lastXAxis=e.xaxis?P.clone(e.xaxis):[],d.globals.lastYAxis=e.yaxis?P.clone(e.yaxis):[],d.globals.initialConfig=P.extend({},d.config),d.globals.initialSeries=P.clone(d.config.series),e.series))){for(var g=0;g2&&arguments[2]!==void 0&&arguments[2];return new Promise(function(s){var r,n=i.w;return n.globals.shouldAnimate=t,n.globals.dataChanged=!0,t&&i.ctx.series.getPreviousPaths(),n.globals.axisCharts?((r=e.map(function(o,h){return i._extendSeries(o,h)})).length===0&&(r=[{data:[]}]),n.config.series=r):n.config.series=e.slice(),a&&(n.globals.initialConfig.series=P.clone(n.config.series),n.globals.initialSeries=P.clone(n.config.series)),i.ctx.update().then(function(){s(i.ctx)})})}},{key:"_extendSeries",value:function(e,t){var i=this.w,a=i.config.series[t];return Y(Y({},i.config.series[t]),{},{name:e.name?e.name:a?.name,color:e.color?e.color:a?.color,type:e.type?e.type:a?.type,group:e.group?e.group:a?.group,hidden:e.hidden!==void 0?e.hidden:a?.hidden,data:e.data?e.data:a?.data,zIndex:e.zIndex!==void 0?e.zIndex:t})}},{key:"toggleDataPointSelection",value:function(e,t){var i=this.w,a=null,s=".apexcharts-series[data\\:realIndex='".concat(e,"']");return i.globals.axisCharts?a=i.globals.dom.Paper.select("".concat(s," path[j='").concat(t,"'], ").concat(s," circle[j='").concat(t,"'], ").concat(s," rect[j='").concat(t,"']")).members[0]:t===void 0&&(a=i.globals.dom.Paper.select("".concat(s," path[j='").concat(e,"']")).members[0],i.config.chart.type!=="pie"&&i.config.chart.type!=="polarArea"&&i.config.chart.type!=="donut"||this.ctx.pie.pieClicked(e)),a?(new X(this.ctx).pathMouseDown(a,null),a.node?a.node:null):(console.warn("toggleDataPointSelection: Element not found"),null)}},{key:"forceXAxisUpdate",value:function(e){var t=this.w;if(["min","max"].forEach(function(a){e.xaxis[a]!==void 0&&(t.config.xaxis[a]=e.xaxis[a],t.globals.lastXAxis[a]=e.xaxis[a])}),e.xaxis.categories&&e.xaxis.categories.length&&(t.config.xaxis.categories=e.xaxis.categories),t.config.xaxis.convertedCatToNumeric){var i=new Le(e);e=i.convertCatToNumericXaxis(e,this.ctx)}return e}},{key:"forceYAxisUpdate",value:function(e){return e.chart&&e.chart.stacked&&e.chart.stackType==="100%"&&(Array.isArray(e.yaxis)?e.yaxis.forEach(function(t,i){e.yaxis[i].min=0,e.yaxis[i].max=100}):(e.yaxis.min=0,e.yaxis.max=100)),e}},{key:"revertDefaultAxisMinMax",value:function(e){var t=this,i=this.w,a=i.globals.lastXAxis,s=i.globals.lastYAxis;e&&e.xaxis&&(a=e.xaxis),e&&e.yaxis&&(s=e.yaxis),i.config.xaxis.min=a.min,i.config.xaxis.max=a.max;var r=function(n){s[n]!==void 0&&(i.config.yaxis[n].min=s[n].min,i.config.yaxis[n].max=s[n].max)};i.config.yaxis.map(function(n,o){i.globals.zoomed||s[o]!==void 0?r(o):t.ctx.opts.yaxis[o]!==void 0&&(n.min=t.ctx.opts.yaxis[o].min,n.max=t.ctx.opts.yaxis[o].max)})}}]),p}();he=typeof window<"u"?window:void 0,Ce=function(p,e){var t=(this!==void 0?this:p).SVG=function(l){if(t.supported)return l=new t.Doc(l),t.parser.draw||t.prepare(),l};if(t.ns="http://www.w3.org/2000/svg",t.xmlns="http://www.w3.org/2000/xmlns/",t.xlink="http://www.w3.org/1999/xlink",t.svgjs="http://svgjs.dev",t.supported=!0,!t.supported)return!1;t.did=1e3,t.eid=function(l){return"Svgjs"+c(l)+t.did++},t.create=function(l){var u=e.createElementNS(this.ns,l);return u.setAttribute("id",this.eid(l)),u},t.extend=function(){var l,u;u=(l=[].slice.call(arguments)).pop();for(var m=l.length-1;m>=0;m--)if(l[m])for(var A in u)l[m].prototype[A]=u[A];t.Set&&t.Set.inherit&&t.Set.inherit()},t.invent=function(l){var u=typeof l.create=="function"?l.create:function(){this.constructor.call(this,t.create(l.create))};return l.inherit&&(u.prototype=new l.inherit),l.extend&&t.extend(u,l.extend),l.construct&&t.extend(l.parent||t.Container,l.construct),u},t.adopt=function(l){return l?l.instance?l.instance:((u=l.nodeName=="svg"?l.parentNode instanceof p.SVGElement?new t.Nested:new t.Doc:l.nodeName=="linearGradient"?new t.Gradient("linear"):l.nodeName=="radialGradient"?new t.Gradient("radial"):t[c(l.nodeName)]?new t[c(l.nodeName)]:new t.Element(l)).type=l.nodeName,u.node=l,l.instance=u,u instanceof t.Doc&&u.namespace().defs(),u.setData(JSON.parse(l.getAttribute("svgjs:data"))||{}),u):null;var u},t.prepare=function(){var l=e.getElementsByTagName("body")[0],u=(l?new t.Doc(l):t.adopt(e.documentElement).nested()).size(2,0);t.parser={body:l||e.documentElement,draw:u.style("opacity:0;position:absolute;left:-100%;top:-100%;overflow:hidden").node,poly:u.polyline().node,path:u.path().node,native:t.create("svg")}},t.parser={native:t.create("svg")},e.addEventListener("DOMContentLoaded",function(){t.parser.draw||t.prepare()},!1),t.regex={numberAndUnit:/^([+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?)([a-z%]*)$/i,hex:/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i,rgb:/rgb\((\d+),(\d+),(\d+)\)/,reference:/#([a-z0-9\-_]+)/i,transforms:/\)\s*,?\s*/,whitespace:/\s/g,isHex:/^#[a-f0-9]{3,6}$/i,isRgb:/^rgb\(/,isCss:/[^:]+:[^;]+;?/,isBlank:/^(\s+)?$/,isNumber:/^[+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,isPercent:/^-?[\d\.]+%$/,isImage:/\.(jpg|jpeg|png|gif|svg)(\?[^=]+.*)?/i,delimiter:/[\s,]+/,hyphen:/([^e])\-/gi,pathLetters:/[MLHVCSQTAZ]/gi,isPathLetter:/[MLHVCSQTAZ]/i,numbersWithDots:/((\d?\.\d+(?:e[+-]?\d+)?)((?:\.\d+(?:e[+-]?\d+)?)+))+/gi,dots:/\./g},t.utils={map:function(l,u){for(var m=l.length,A=[],k=0;k1?1:l,new t.Color({r:~~(this.r+(this.destination.r-this.r)*l),g:~~(this.g+(this.destination.g-this.g)*l),b:~~(this.b+(this.destination.b-this.b)*l)})):this}}),t.Color.test=function(l){return l+="",t.regex.isHex.test(l)||t.regex.isRgb.test(l)},t.Color.isRgb=function(l){return l&&typeof l.r=="number"&&typeof l.g=="number"&&typeof l.b=="number"},t.Color.isColor=function(l){return t.Color.isRgb(l)||t.Color.test(l)},t.Array=function(l,u){(l=(l||[]).valueOf()).length==0&&u&&(l=u.valueOf()),this.value=this.parse(l)},t.extend(t.Array,{toString:function(){return this.value.join(" ")},valueOf:function(){return this.value},parse:function(l){return l=l.valueOf(),Array.isArray(l)?l:this.split(l)}}),t.PointArray=function(l,u){t.Array.call(this,l,u||[[0,0]])},t.PointArray.prototype=new t.Array,t.PointArray.prototype.constructor=t.PointArray;for(var i={M:function(l,u,m){return u.x=m.x=l[0],u.y=m.y=l[1],["M",u.x,u.y]},L:function(l,u){return u.x=l[0],u.y=l[1],["L",l[0],l[1]]},H:function(l,u){return u.x=l[0],["H",l[0]]},V:function(l,u){return u.y=l[0],["V",l[0]]},C:function(l,u){return u.x=l[4],u.y=l[5],["C",l[0],l[1],l[2],l[3],l[4],l[5]]},Q:function(l,u){return u.x=l[2],u.y=l[3],["Q",l[0],l[1],l[2],l[3]]},S:function(l,u){return u.x=l[2],u.y=l[3],["S",l[0],l[1],l[2],l[3]]},Z:function(l,u,m){return u.x=m.x,u.y=m.y,["Z"]}},a="mlhvqtcsaz".split(""),s=0,r=a.length;sL);return A},bbox:function(){return t.parser.draw||t.prepare(),t.parser.path.setAttribute("d",this.toString()),t.parser.path.getBBox()}}),t.Number=t.invent({create:function(l,u){this.value=0,this.unit=u||"",typeof l=="number"?this.value=isNaN(l)?0:isFinite(l)?l:l<0?-34e37:34e37:typeof l=="string"?(u=l.match(t.regex.numberAndUnit))&&(this.value=parseFloat(u[1]),u[5]=="%"?this.value/=100:u[5]=="s"&&(this.value*=1e3),this.unit=u[5]):l instanceof t.Number&&(this.value=l.valueOf(),this.unit=l.unit)},extend:{toString:function(){return(this.unit=="%"?~~(1e8*this.value)/1e6:this.unit=="s"?this.value/1e3:this.value)+this.unit},toJSON:function(){return this.toString()},valueOf:function(){return this.value},plus:function(l){return l=new t.Number(l),new t.Number(this+l,this.unit||l.unit)},minus:function(l){return l=new t.Number(l),new t.Number(this-l,this.unit||l.unit)},times:function(l){return l=new t.Number(l),new t.Number(this*l,this.unit||l.unit)},divide:function(l){return l=new t.Number(l),new t.Number(this/l,this.unit||l.unit)},to:function(l){var u=new t.Number(this);return typeof l=="string"&&(u.unit=l),u},morph:function(l){return this.destination=new t.Number(l),l.relative&&(this.destination.value+=this.value),this},at:function(l){return this.destination?new t.Number(this.destination).minus(this).times(l).plus(this):this}}}),t.Element=t.invent({create:function(l){this._stroke=t.defaults.attrs.stroke,this._event=null,this.dom={},(this.node=l)&&(this.type=l.nodeName,this.node.instance=this,this._stroke=l.getAttribute("stroke")||this._stroke)},extend:{x:function(l){return this.attr("x",l)},y:function(l){return this.attr("y",l)},cx:function(l){return l==null?this.x()+this.width()/2:this.x(l-this.width()/2)},cy:function(l){return l==null?this.y()+this.height()/2:this.y(l-this.height()/2)},move:function(l,u){return this.x(l).y(u)},center:function(l,u){return this.cx(l).cy(u)},width:function(l){return this.attr("width",l)},height:function(l){return this.attr("height",l)},size:function(l,u){var m=g(this,l,u);return this.width(new t.Number(m.width)).height(new t.Number(m.height))},clone:function(l){this.writeDataToDom();var u=b(this.node.cloneNode(!0));return l?l.add(u):this.after(u),u},remove:function(){return this.parent()&&this.parent().removeElement(this),this},replace:function(l){return this.after(l).remove(),l},addTo:function(l){return l.put(this)},putIn:function(l){return l.add(this)},id:function(l){return this.attr("id",l)},show:function(){return this.style("display","")},hide:function(){return this.style("display","none")},visible:function(){return this.style("display")!="none"},toString:function(){return this.attr("id")},classes:function(){var l=this.attr("class");return l==null?[]:l.trim().split(t.regex.delimiter)},hasClass:function(l){return this.classes().indexOf(l)!=-1},addClass:function(l){if(!this.hasClass(l)){var u=this.classes();u.push(l),this.attr("class",u.join(" "))}return this},removeClass:function(l){return this.hasClass(l)&&this.attr("class",this.classes().filter(function(u){return u!=l}).join(" ")),this},toggleClass:function(l){return this.hasClass(l)?this.removeClass(l):this.addClass(l)},reference:function(l){return t.get(this.attr(l))},parent:function(l){var u=this;if(!u.node.parentNode)return null;if(u=t.adopt(u.node.parentNode),!l)return u;for(;u&&u.node instanceof p.SVGElement;){if(typeof l=="string"?u.matches(l):u instanceof l)return u;if(!u.node.parentNode||u.node.parentNode.nodeName=="#document")return null;u=t.adopt(u.node.parentNode)}},doc:function(){return this instanceof t.Doc?this:this.parent(t.Doc)},parents:function(l){var u=[],m=this;do{if(!(m=m.parent(l))||!m.node)break;u.push(m)}while(m.parent);return u},matches:function(l){return function(u,m){return(u.matches||u.matchesSelector||u.msMatchesSelector||u.mozMatchesSelector||u.webkitMatchesSelector||u.oMatchesSelector).call(u,m)}(this.node,l)},native:function(){return this.node},svg:function(l){var u=e.createElementNS("http://www.w3.org/2000/svg","svg");if(!(l&&this instanceof t.Parent))return u.appendChild(l=e.createElementNS("http://www.w3.org/2000/svg","svg")),this.writeDataToDom(),l.appendChild(this.node.cloneNode(!0)),u.innerHTML.replace(/^/,"").replace(/<\/svg>$/,"");u.innerHTML=""+l.replace(/\n/,"").replace(/<([\w:-]+)([^<]+?)\/>/g,"<$1$2>")+"";for(var m=0,A=u.firstChild.childNodes.length;m":function(l){return-Math.cos(l*Math.PI)/2+.5},">":function(l){return Math.sin(l*Math.PI/2)},"<":function(l){return 1-Math.cos(l*Math.PI/2)}},t.morph=function(l){return function(u,m){return new t.MorphObj(u,m).at(l)}},t.Situation=t.invent({create:function(l){this.init=!1,this.reversed=!1,this.reversing=!1,this.duration=new t.Number(l.duration).valueOf(),this.delay=new t.Number(l.delay).valueOf(),this.start=+new Date+this.delay,this.finish=this.start+this.duration,this.ease=l.ease,this.loop=0,this.loops=!1,this.animations={},this.attrs={},this.styles={},this.transforms=[],this.once={}}}),t.FX=t.invent({create:function(l){this._target=l,this.situations=[],this.active=!1,this.situation=null,this.paused=!1,this.lastPos=0,this.pos=0,this.absPos=0,this._speed=1},extend:{animate:function(l,u,m){J(l)==="object"&&(u=l.ease,m=l.delay,l=l.duration);var A=new t.Situation({duration:l||1e3,delay:m||0,ease:t.easing[u||"-"]||u});return this.queue(A),this},target:function(l){return l&&l instanceof t.Element?(this._target=l,this):this._target},timeToAbsPos:function(l){return(l-this.situation.start)/(this.situation.duration/this._speed)},absPosToTime:function(l){return this.situation.duration/this._speed*l+this.situation.start},startAnimFrame:function(){this.stopAnimFrame(),this.animationFrame=p.requestAnimationFrame(function(){this.step()}.bind(this))},stopAnimFrame:function(){p.cancelAnimationFrame(this.animationFrame)},start:function(){return!this.active&&this.situation&&(this.active=!0,this.startCurrent()),this},startCurrent:function(){return this.situation.start=+new Date+this.situation.delay/this._speed,this.situation.finish=this.situation.start+this.situation.duration/this._speed,this.initAnimations().step()},queue:function(l){return(typeof l=="function"||l instanceof t.Situation)&&this.situations.push(l),this.situation||(this.situation=this.situations.shift()),this},dequeue:function(){return this.stop(),this.situation=this.situations.shift(),this.situation&&(this.situation instanceof t.Situation?this.start():this.situation.call(this)),this},initAnimations:function(){var l,u=this.situation;if(u.init)return this;for(var m in u.animations){l=this.target()[m](),Array.isArray(l)||(l=[l]),Array.isArray(u.animations[m])||(u.animations[m]=[u.animations[m]]);for(var A=l.length;A--;)u.animations[m][A]instanceof t.Number&&(l[A]=new t.Number(l[A])),u.animations[m][A]=l[A].morph(u.animations[m][A])}for(var m in u.attrs)u.attrs[m]=new t.MorphObj(this.target().attr(m),u.attrs[m]);for(var m in u.styles)u.styles[m]=new t.MorphObj(this.target().style(m),u.styles[m]);return u.initialTransformation=this.target().matrixify(),u.init=!0,this},clearQueue:function(){return this.situations=[],this},clearCurrent:function(){return this.situation=null,this},stop:function(l,u){var m=this.active;return this.active=!1,u&&this.clearQueue(),l&&this.situation&&(!m&&this.startCurrent(),this.atEnd()),this.stopAnimFrame(),this.clearCurrent()},after:function(l){var u=this.last();return this.target().on("finished.fx",function m(A){A.detail.situation==u&&(l.call(this,u),this.off("finished.fx",m))}),this._callStart()},during:function(l){var u=this.last(),m=function(A){A.detail.situation==u&&l.call(this,A.detail.pos,t.morph(A.detail.pos),A.detail.eased,u)};return this.target().off("during.fx",m).on("during.fx",m),this.after(function(){this.off("during.fx",m)}),this._callStart()},afterAll:function(l){var u=function m(A){l.call(this),this.off("allfinished.fx",m)};return this.target().off("allfinished.fx",u).on("allfinished.fx",u),this._callStart()},last:function(){return this.situations.length?this.situations[this.situations.length-1]:this.situation},add:function(l,u,m){return this.last()[m||"animations"][l]=u,this._callStart()},step:function(l){var u,m,A;l||(this.absPos=this.timeToAbsPos(+new Date)),this.situation.loops!==!1?(u=Math.max(this.absPos,0),m=Math.floor(u),this.situation.loops===!0||mthis.lastPos&&S<=k&&(this.situation.once[S].call(this.target(),this.pos,k),delete this.situation.once[S]);return this.active&&this.target().fire("during",{pos:this.pos,eased:k,fx:this,situation:this.situation}),this.situation?(this.eachAt(),this.pos==1&&!this.situation.reversed||this.situation.reversed&&this.pos==0?(this.stopAnimFrame(),this.target().fire("finished",{fx:this,situation:this.situation}),this.situations.length||(this.target().fire("allfinished"),this.situations.length||(this.target().off(".fx"),this.active=!1)),this.active?this.dequeue():this.clearCurrent()):!this.paused&&this.active&&this.startAnimFrame(),this.lastPos=k,this):this},eachAt:function(){var l,u=this,m=this.target(),A=this.situation;for(var k in A.animations)l=[].concat(A.animations[k]).map(function(C){return typeof C!="string"&&C.at?C.at(A.ease(u.pos),u.pos):C}),m[k].apply(m,l);for(var k in A.attrs)l=[k].concat(A.attrs[k]).map(function(I){return typeof I!="string"&&I.at?I.at(A.ease(u.pos),u.pos):I}),m.attr.apply(m,l);for(var k in A.styles)l=[k].concat(A.styles[k]).map(function(I){return typeof I!="string"&&I.at?I.at(A.ease(u.pos),u.pos):I}),m.style.apply(m,l);if(A.transforms.length){l=A.initialTransformation,k=0;for(var S=A.transforms.length;k=0;--m)this[y[m]]=l[y[m]]!=null?l[y[m]]:u[y[m]]},extend:{extract:function(){var l=f(this,0,1);f(this,1,0);var u=180/Math.PI*Math.atan2(l.y,l.x)-90;return{x:this.e,y:this.f,transformedX:(this.e*Math.cos(u*Math.PI/180)+this.f*Math.sin(u*Math.PI/180))/Math.sqrt(this.a*this.a+this.b*this.b),transformedY:(this.f*Math.cos(u*Math.PI/180)+this.e*Math.sin(-u*Math.PI/180))/Math.sqrt(this.c*this.c+this.d*this.d),rotation:u,a:this.a,b:this.b,c:this.c,d:this.d,e:this.e,f:this.f,matrix:new t.Matrix(this)}},clone:function(){return new t.Matrix(this)},morph:function(l){return this.destination=new t.Matrix(l),this},multiply:function(l){return new t.Matrix(this.native().multiply(function(u){return u instanceof t.Matrix||(u=new t.Matrix(u)),u}(l).native()))},inverse:function(){return new t.Matrix(this.native().inverse())},translate:function(l,u){return new t.Matrix(this.native().translate(l||0,u||0))},native:function(){for(var l=t.parser.native.createSVGMatrix(),u=y.length-1;u>=0;u--)l[y[u]]=this[y[u]];return l},toString:function(){return"matrix("+v(this.a)+","+v(this.b)+","+v(this.c)+","+v(this.d)+","+v(this.e)+","+v(this.f)+")"}},parent:t.Element,construct:{ctm:function(){return new t.Matrix(this.node.getCTM())},screenCTM:function(){if(this instanceof t.Nested){var l=this.rect(1,1),u=l.node.getScreenCTM();return l.remove(),new t.Matrix(u)}return new t.Matrix(this.node.getScreenCTM())}}}),t.Point=t.invent({create:function(l,u){var m;m=Array.isArray(l)?{x:l[0],y:l[1]}:J(l)==="object"?{x:l.x,y:l.y}:l!=null?{x:l,y:u??l}:{x:0,y:0},this.x=m.x,this.y=m.y},extend:{clone:function(){return new t.Point(this)},morph:function(l,u){return this.destination=new t.Point(l,u),this}}}),t.extend(t.Element,{point:function(l,u){return new t.Point(l,u).transform(this.screenCTM().inverse())}}),t.extend(t.Element,{attr:function(l,u,m){if(l==null){for(l={},m=(u=this.node.attributes).length-1;m>=0;m--)l[u[m].nodeName]=t.regex.isNumber.test(u[m].nodeValue)?parseFloat(u[m].nodeValue):u[m].nodeValue;return l}if(J(l)==="object")for(var A in l)this.attr(A,l[A]);else if(u===null)this.node.removeAttribute(l);else{if(u==null)return(u=this.node.getAttribute(l))==null?t.defaults.attrs[l]:t.regex.isNumber.test(u)?parseFloat(u):u;l=="stroke-width"?this.attr("stroke",parseFloat(u)>0?this._stroke:null):l=="stroke"&&(this._stroke=u),l!="fill"&&l!="stroke"||(t.regex.isImage.test(u)&&(u=this.doc().defs().image(u,0,0)),u instanceof t.Image&&(u=this.doc().defs().pattern(0,0,function(){this.add(u)}))),typeof u=="number"?u=new t.Number(u):t.Color.isColor(u)?u=new t.Color(u):Array.isArray(u)&&(u=new t.Array(u)),l=="leading"?this.leading&&this.leading(u):typeof m=="string"?this.node.setAttributeNS(m,l,u.toString()):this.node.setAttribute(l,u.toString()),!this.rebuild||l!="font-size"&&l!="x"||this.rebuild(l,u)}return this}}),t.extend(t.Element,{transform:function(l,u){var m;return J(l)!=="object"?(m=new t.Matrix(this).extract(),typeof l=="string"?m[l]:m):(m=new t.Matrix(this),u=!!u||!!l.relative,l.a!=null&&(m=u?m.multiply(new t.Matrix(l)):new t.Matrix(l)),this.attr("transform",m))}}),t.extend(t.Element,{untransform:function(){return this.attr("transform",null)},matrixify:function(){return(this.attr("transform")||"").split(t.regex.transforms).slice(0,-1).map(function(l){var u=l.trim().split("(");return[u[0],u[1].split(t.regex.delimiter).map(function(m){return parseFloat(m)})]}).reduce(function(l,u){return u[0]=="matrix"?l.multiply(x(u[1])):l[u[0]].apply(l,u[1])},new t.Matrix)},toParent:function(l){if(this==l)return this;var u=this.screenCTM(),m=l.screenCTM().inverse();return this.addTo(l).untransform().transform(m.multiply(u)),this},toDoc:function(){return this.toParent(this.doc())}}),t.Transformation=t.invent({create:function(l,u){if(arguments.length>1&&typeof u!="boolean")return this.constructor.call(this,[].slice.call(arguments));if(Array.isArray(l))for(var m=0,A=this.arguments.length;m=0},index:function(l){return[].slice.call(this.node.childNodes).indexOf(l.node)},get:function(l){return t.adopt(this.node.childNodes[l])},first:function(){return this.get(0)},last:function(){return this.get(this.node.childNodes.length-1)},each:function(l,u){for(var m=this.children(),A=0,k=m.length;A=0;u--)l.childNodes[u]instanceof p.SVGElement&&b(l.childNodes[u]);return t.adopt(l).id(t.eid(l.nodeName))}function v(l){return Math.abs(l)>1e-37?l:0}["fill","stroke"].forEach(function(l){var u={};u[l]=function(m){if(m===void 0)return this;if(typeof m=="string"||t.Color.isRgb(m)||m&&typeof m.fill=="function")this.attr(l,m);else for(var A=n[l].length-1;A>=0;A--)m[n[l][A]]!=null&&this.attr(n.prefix(l,n[l][A]),m[n[l][A]]);return this},t.extend(t.Element,t.FX,u)}),t.extend(t.Element,t.FX,{translate:function(l,u){return this.transform({x:l,y:u})},matrix:function(l){return this.attr("transform",new t.Matrix(arguments.length==6?[].slice.call(arguments):l))},opacity:function(l){return this.attr("opacity",l)},dx:function(l){return this.x(new t.Number(l).plus(this instanceof t.FX?0:this.x()),!0)},dy:function(l){return this.y(new t.Number(l).plus(this instanceof t.FX?0:this.y()),!0)}}),t.extend(t.Path,{length:function(){return this.node.getTotalLength()},pointAt:function(l){return this.node.getPointAtLength(l)}}),t.Set=t.invent({create:function(l){Array.isArray(l)?this.members=l:this.clear()},extend:{add:function(){for(var l=[].slice.call(arguments),u=0,m=l.length;u-1&&this.members.splice(u,1),this},each:function(l){for(var u=0,m=this.members.length;u=0},index:function(l){return this.members.indexOf(l)},get:function(l){return this.members[l]},first:function(){return this.get(0)},last:function(){return this.get(this.members.length-1)},valueOf:function(){return this.members}},construct:{set:function(l){return new t.Set(l)}}}),t.FX.Set=t.invent({create:function(l){this.set=l}}),t.Set.inherit=function(){var l=[];for(var u in t.Shape.prototype)typeof t.Shape.prototype[u]=="function"&&typeof t.Set.prototype[u]!="function"&&l.push(u);for(var u in l.forEach(function(A){t.Set.prototype[A]=function(){for(var k=0,S=this.members.length;k=0;l--)delete this.memory()[arguments[l]];return this},memory:function(){return this._memory||(this._memory={})}}),t.get=function(l){var u=e.getElementById(function(m){var A=(m||"").toString().match(t.regex.reference);if(A)return A[1]}(l)||l);return t.adopt(u)},t.select=function(l,u){return new t.Set(t.utils.map((u||e).querySelectorAll(l),function(m){return t.adopt(m)}))},t.extend(t.Parent,{select:function(l){return t.select(l,this.node)}});var y="abcdef".split("");if(typeof p.CustomEvent!="function"){var w=function(l,u){u=u||{bubbles:!1,cancelable:!1,detail:void 0};var m=e.createEvent("CustomEvent");return m.initCustomEvent(l,u.bubbles,u.cancelable,u.detail),m};w.prototype=p.Event.prototype,t.CustomEvent=w}else t.CustomEvent=p.CustomEvent;return t},typeof define=="function"&&define.amd?define(function(){return Ce(he,he.document)}):(typeof ot>"u"?"undefined":J(ot))==="object"&&typeof We<"u"?We.exports=he.document?Ce(he,he.document):function(p){return Ce(p,p.document)}:he.SVG=Ce(he,he.document),function(){SVG.Filter=SVG.invent({create:"filter",inherit:SVG.Parent,extend:{source:"SourceGraphic",sourceAlpha:"SourceAlpha",background:"BackgroundImage",backgroundAlpha:"BackgroundAlpha",fill:"FillPaint",stroke:"StrokePaint",autoSetIn:!0,put:function(r,n){return this.add(r,n),!r.attr("in")&&this.autoSetIn&&r.attr("in",this.source),r.attr("result")||r.attr("result",r),r},blend:function(r,n,o){return this.put(new SVG.BlendEffect(r,n,o))},colorMatrix:function(r,n){return this.put(new SVG.ColorMatrixEffect(r,n))},convolveMatrix:function(r){return this.put(new SVG.ConvolveMatrixEffect(r))},componentTransfer:function(r){return this.put(new SVG.ComponentTransferEffect(r))},composite:function(r,n,o){return this.put(new SVG.CompositeEffect(r,n,o))},flood:function(r,n){return this.put(new SVG.FloodEffect(r,n))},offset:function(r,n){return this.put(new SVG.OffsetEffect(r,n))},image:function(r){return this.put(new SVG.ImageEffect(r))},merge:function(){var r=[void 0];for(var n in arguments)r.push(arguments[n]);return this.put(new(SVG.MergeEffect.bind.apply(SVG.MergeEffect,r)))},gaussianBlur:function(r,n){return this.put(new SVG.GaussianBlurEffect(r,n))},morphology:function(r,n){return this.put(new SVG.MorphologyEffect(r,n))},diffuseLighting:function(r,n,o){return this.put(new SVG.DiffuseLightingEffect(r,n,o))},displacementMap:function(r,n,o,h,c){return this.put(new SVG.DisplacementMapEffect(r,n,o,h,c))},specularLighting:function(r,n,o,h){return this.put(new SVG.SpecularLightingEffect(r,n,o,h))},tile:function(){return this.put(new SVG.TileEffect)},turbulence:function(r,n,o,h,c){return this.put(new SVG.TurbulenceEffect(r,n,o,h,c))},toString:function(){return"url(#"+this.attr("id")+")"}}}),SVG.extend(SVG.Defs,{filter:function(r){var n=this.put(new SVG.Filter);return typeof r=="function"&&r.call(n,n),n}}),SVG.extend(SVG.Container,{filter:function(r){return this.defs().filter(r)}}),SVG.extend(SVG.Element,SVG.G,SVG.Nested,{filter:function(r){return this.filterer=r instanceof SVG.Element?r:this.doc().filter(r),this.doc()&&this.filterer.doc()!==this.doc()&&this.doc().defs().add(this.filterer),this.attr("filter",this.filterer),this.filterer},unfilter:function(r){return this.filterer&&r===!0&&this.filterer.remove(),delete this.filterer,this.attr("filter",null)}}),SVG.Effect=SVG.invent({create:function(){this.constructor.call(this)},inherit:SVG.Element,extend:{in:function(r){return r==null?this.parent()&&this.parent().select('[result="'+this.attr("in")+'"]').get(0)||this.attr("in"):this.attr("in",r)},result:function(r){return r==null?this.attr("result"):this.attr("result",r)},toString:function(){return this.result()}}}),SVG.ParentEffect=SVG.invent({create:function(){this.constructor.call(this)},inherit:SVG.Parent,extend:{in:function(r){return r==null?this.parent()&&this.parent().select('[result="'+this.attr("in")+'"]').get(0)||this.attr("in"):this.attr("in",r)},result:function(r){return r==null?this.attr("result"):this.attr("result",r)},toString:function(){return this.result()}}});var p={blend:function(r,n){return this.parent()&&this.parent().blend(this,r,n)},colorMatrix:function(r,n){return this.parent()&&this.parent().colorMatrix(r,n).in(this)},convolveMatrix:function(r){return this.parent()&&this.parent().convolveMatrix(r).in(this)},componentTransfer:function(r){return this.parent()&&this.parent().componentTransfer(r).in(this)},composite:function(r,n){return this.parent()&&this.parent().composite(this,r,n)},flood:function(r,n){return this.parent()&&this.parent().flood(r,n)},offset:function(r,n){return this.parent()&&this.parent().offset(r,n).in(this)},image:function(r){return this.parent()&&this.parent().image(r)},merge:function(){return this.parent()&&this.parent().merge.apply(this.parent(),[this].concat(arguments))},gaussianBlur:function(r,n){return this.parent()&&this.parent().gaussianBlur(r,n).in(this)},morphology:function(r,n){return this.parent()&&this.parent().morphology(r,n).in(this)},diffuseLighting:function(r,n,o){return this.parent()&&this.parent().diffuseLighting(r,n,o).in(this)},displacementMap:function(r,n,o,h){return this.parent()&&this.parent().displacementMap(this,r,n,o,h)},specularLighting:function(r,n,o,h){return this.parent()&&this.parent().specularLighting(r,n,o,h).in(this)},tile:function(){return this.parent()&&this.parent().tile().in(this)},turbulence:function(r,n,o,h,c){return this.parent()&&this.parent().turbulence(r,n,o,h,c).in(this)}};SVG.extend(SVG.Effect,p),SVG.extend(SVG.ParentEffect,p),SVG.ChildEffect=SVG.invent({create:function(){this.constructor.call(this)},inherit:SVG.Element,extend:{in:function(r){this.attr("in",r)}}});var e={blend:function(r,n,o){this.attr({in:r,in2:n,mode:o||"normal"})},colorMatrix:function(r,n){r=="matrix"&&(n=a(n)),this.attr({type:r,values:n===void 0?null:n})},convolveMatrix:function(r){r=a(r),this.attr({order:Math.sqrt(r.split(" ").length),kernelMatrix:r})},composite:function(r,n,o){this.attr({in:r,in2:n,operator:o})},flood:function(r,n){this.attr("flood-color",r),n!=null&&this.attr("flood-opacity",n)},offset:function(r,n){this.attr({dx:r,dy:n})},image:function(r){this.attr("href",r,SVG.xlink)},displacementMap:function(r,n,o,h,c){this.attr({in:r,in2:n,scale:o,xChannelSelector:h,yChannelSelector:c})},gaussianBlur:function(r,n){r!=null||n!=null?this.attr("stdDeviation",function(o){if(!Array.isArray(o))return o;for(var h=0,c=o.length,d=[];h1&&(W*=c=Math.sqrt(c),N*=c),d=new SVG.Matrix().rotate(B).scale(1/W,1/N).rotate(-B),V=V.transform(d),G=G.transform(d),g=[G.x-V.x,G.y-V.y],x=g[0]*g[0]+g[1]*g[1],f=Math.sqrt(x),g[0]/=f,g[1]/=f,b=x<4?Math.sqrt(1-x/4):0,q===Z&&(b*=-1),v=new SVG.Point((G.x+V.x)/2+b*-g[1],(G.y+V.y)/2+b*g[0]),y=new SVG.Point(V.x-v.x,V.y-v.y),w=new SVG.Point(G.x-v.x,G.y-v.y),l=Math.acos(y.x/Math.sqrt(y.x*y.x+y.y*y.y)),y.y<0&&(l*=-1),u=Math.acos(w.x/Math.sqrt(w.x*w.x+w.y*w.y)),w.y<0&&(u*=-1),Z&&l>u&&(u+=2*Math.PI),!Z&&lr.maxX-t.width&&(n=(a=r.maxX-t.width)-this.startPoints.box.x),r.minY!=null&&sr.maxY-t.height&&(o=(s=r.maxY-t.height)-this.startPoints.box.y),r.snapToGrid!=null&&(a-=a%r.snapToGrid,s-=s%r.snapToGrid,n-=n%r.snapToGrid,o-=o%r.snapToGrid),this.el instanceof SVG.G?this.el.matrix(this.startPoints.transform).transform({x:n,y:o},!0):this.el.move(a,s));return i},p.prototype.end=function(e){var t=this.drag(e);this.el.fire("dragend",{event:e,p:t,m:this.m,handler:this}),SVG.off(window,"mousemove.drag"),SVG.off(window,"touchmove.drag"),SVG.off(window,"mouseup.drag"),SVG.off(window,"touchend.drag")},SVG.extend(SVG.Element,{draggable:function(e,t){typeof e!="function"&&typeof e!="object"||(t=e,e=!0);var i=this.remember("_draggable")||new p(this);return(e=e===void 0||e)?i.init(t||{},e):(this.off("mousedown.drag"),this.off("touchstart.drag")),this}})}.call(void 0),function(){function p(e){this.el=e,e.remember("_selectHandler",this),this.pointSelection={isSelected:!1},this.rectSelection={isSelected:!1},this.pointsList={lt:[0,0],rt:["width",0],rb:["width","height"],lb:[0,"height"],t:["width",0],r:["width","height"],b:["width","height"],l:[0,"height"]},this.pointCoord=function(t,i,a){var s=typeof t!="string"?t:i[t];return a?s/2:s},this.pointCoords=function(t,i){var a=this.pointsList[t];return{x:this.pointCoord(a[0],i,t==="t"||t==="b"),y:this.pointCoord(a[1],i,t==="r"||t==="l")}}}p.prototype.init=function(e,t){var i=this.el.bbox();this.options={};var a=this.el.selectize.defaults.points;for(var s in this.el.selectize.defaults)this.options[s]=this.el.selectize.defaults[s],t[s]!==void 0&&(this.options[s]=t[s]);var r=["points","pointsExclude"];for(var s in r){var n=this.options[r[s]];typeof n=="string"?n=n.length>0?n.split(/\s*,\s*/i):[]:typeof n=="boolean"&&r[s]==="points"&&(n=n?a:[]),this.options[r[s]]=n}this.options.points=[a,this.options.points].reduce(function(o,h){return o.filter(function(c){return h.indexOf(c)>-1})}),this.options.points=[this.options.points,this.options.pointsExclude].reduce(function(o,h){return o.filter(function(c){return h.indexOf(c)<0})}),this.parent=this.el.parent(),this.nested=this.nested||this.parent.group(),this.nested.matrix(new SVG.Matrix(this.el).translate(i.x,i.y)),this.options.deepSelect&&["line","polyline","polygon"].indexOf(this.el.type)!==-1?this.selectPoints(e):this.selectRect(e),this.observe(),this.cleanup()},p.prototype.selectPoints=function(e){return this.pointSelection.isSelected=e,this.pointSelection.set||(this.pointSelection.set=this.parent.set(),this.drawPoints()),this},p.prototype.getPointArray=function(){var e=this.el.bbox();return this.el.array().valueOf().map(function(t){return[t[0]-e.x,t[1]-e.y]})},p.prototype.drawPoints=function(){for(var e=this,t=this.getPointArray(),i=0,a=t.length;i0&&this.parameters.box.height-n[1]>0){if(this.parameters.type==="text")return this.el.move(this.parameters.box.x+n[0],this.parameters.box.y),void this.el.attr("font-size",this.parameters.fontSize-n[0]);n=this.checkAspectRatio(n),this.el.move(this.parameters.box.x+n[0],this.parameters.box.y+n[1]).size(this.parameters.box.width-n[0],this.parameters.box.height-n[1])}};break;case"rt":this.calc=function(s,r){var n=this.snapToGrid(s,r,2);if(this.parameters.box.width+n[0]>0&&this.parameters.box.height-n[1]>0){if(this.parameters.type==="text")return this.el.move(this.parameters.box.x-n[0],this.parameters.box.y),void this.el.attr("font-size",this.parameters.fontSize+n[0]);n=this.checkAspectRatio(n,!0),this.el.move(this.parameters.box.x,this.parameters.box.y+n[1]).size(this.parameters.box.width+n[0],this.parameters.box.height-n[1])}};break;case"rb":this.calc=function(s,r){var n=this.snapToGrid(s,r,0);if(this.parameters.box.width+n[0]>0&&this.parameters.box.height+n[1]>0){if(this.parameters.type==="text")return this.el.move(this.parameters.box.x-n[0],this.parameters.box.y),void this.el.attr("font-size",this.parameters.fontSize+n[0]);n=this.checkAspectRatio(n),this.el.move(this.parameters.box.x,this.parameters.box.y).size(this.parameters.box.width+n[0],this.parameters.box.height+n[1])}};break;case"lb":this.calc=function(s,r){var n=this.snapToGrid(s,r,1);if(this.parameters.box.width-n[0]>0&&this.parameters.box.height+n[1]>0){if(this.parameters.type==="text")return this.el.move(this.parameters.box.x+n[0],this.parameters.box.y),void this.el.attr("font-size",this.parameters.fontSize-n[0]);n=this.checkAspectRatio(n,!0),this.el.move(this.parameters.box.x+n[0],this.parameters.box.y).size(this.parameters.box.width-n[0],this.parameters.box.height+n[1])}};break;case"t":this.calc=function(s,r){var n=this.snapToGrid(s,r,2);if(this.parameters.box.height-n[1]>0){if(this.parameters.type==="text")return;this.el.move(this.parameters.box.x,this.parameters.box.y+n[1]).height(this.parameters.box.height-n[1])}};break;case"r":this.calc=function(s,r){var n=this.snapToGrid(s,r,0);if(this.parameters.box.width+n[0]>0){if(this.parameters.type==="text")return;this.el.move(this.parameters.box.x,this.parameters.box.y).width(this.parameters.box.width+n[0])}};break;case"b":this.calc=function(s,r){var n=this.snapToGrid(s,r,0);if(this.parameters.box.height+n[1]>0){if(this.parameters.type==="text")return;this.el.move(this.parameters.box.x,this.parameters.box.y).height(this.parameters.box.height+n[1])}};break;case"l":this.calc=function(s,r){var n=this.snapToGrid(s,r,1);if(this.parameters.box.width-n[0]>0){if(this.parameters.type==="text")return;this.el.move(this.parameters.box.x+n[0],this.parameters.box.y).width(this.parameters.box.width-n[0])}};break;case"rot":this.calc=function(s,r){var n=s+this.parameters.p.x,o=r+this.parameters.p.y,h=Math.atan2(this.parameters.p.y-this.parameters.box.y-this.parameters.box.height/2,this.parameters.p.x-this.parameters.box.x-this.parameters.box.width/2),c=Math.atan2(o-this.parameters.box.y-this.parameters.box.height/2,n-this.parameters.box.x-this.parameters.box.width/2),d=this.parameters.rotation+180*(c-h)/Math.PI+this.options.snapToAngle/2;this.el.center(this.parameters.box.cx,this.parameters.box.cy).rotate(d-d%this.options.snapToAngle,this.parameters.box.cx,this.parameters.box.cy)};break;case"point":this.calc=function(s,r){var n=this.snapToGrid(s,r,this.parameters.pointCoords[0],this.parameters.pointCoords[1]),o=this.el.array().valueOf();o[this.parameters.i][0]=this.parameters.pointCoords[0]+n[0],o[this.parameters.i][1]=this.parameters.pointCoords[1]+n[1],this.el.plot(o)}}this.el.fire("resizestart",{dx:this.parameters.x,dy:this.parameters.y,event:e}),SVG.on(window,"touchmove.resize",function(s){t.update(s||window.event)}),SVG.on(window,"touchend.resize",function(){t.done()}),SVG.on(window,"mousemove.resize",function(s){t.update(s||window.event)}),SVG.on(window,"mouseup.resize",function(){t.done()})},p.prototype.update=function(e){if(e){var t=this._extractPosition(e),i=this.transformPoint(t.x,t.y),a=i.x-this.parameters.p.x,s=i.y-this.parameters.p.y;this.lastUpdateCall=[a,s],this.calc(a,s),this.el.fire("resizing",{dx:a,dy:s,event:e})}else this.lastUpdateCall&&this.calc(this.lastUpdateCall[0],this.lastUpdateCall[1])},p.prototype.done=function(){this.lastUpdateCall=null,SVG.off(window,"mousemove.resize"),SVG.off(window,"mouseup.resize"),SVG.off(window,"touchmove.resize"),SVG.off(window,"touchend.resize"),this.el.fire("resizedone")},p.prototype.snapToGrid=function(e,t,i,a){var s;return a!==void 0?s=[(i+e)%this.options.snapToGrid,(a+t)%this.options.snapToGrid]:(i=i??3,s=[(this.parameters.box.x+e+(1&i?0:this.parameters.box.width))%this.options.snapToGrid,(this.parameters.box.y+t+(2&i?0:this.parameters.box.height))%this.options.snapToGrid]),e<0&&(s[0]-=this.options.snapToGrid),t<0&&(s[1]-=this.options.snapToGrid),e-=Math.abs(s[0])n.maxX&&(e=n.maxX-s),n.minY!==void 0&&r+tn.maxY&&(t=n.maxY-r),[e,t]},p.prototype.checkAspectRatio=function(e,t){if(!this.options.saveAspectRatio)return e;var i=e.slice(),a=this.parameters.box.width/this.parameters.box.height,s=this.parameters.box.width+e[0],r=this.parameters.box.height-e[1],n=s/r;return na&&(i[0]=this.parameters.box.width-r*a,t&&(i[0]=-i[0])),i},SVG.extend(SVG.Element,{resize:function(e){return(this.remember("_resizeHandler")||new p(this)).init(e||{}),this}}),SVG.Element.prototype.resize.defaults={snapToAngle:.1,snapToGrid:1,constraint:{},saveAspectRatio:!1}}).call(this)}(),window.Apex===void 0&&(window.Apex={});var Ct=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"initModules",value:function(){this.ctx.publicMethods=["updateOptions","updateSeries","appendData","appendSeries","isSeriesHidden","highlightSeries","toggleSeries","showSeries","hideSeries","setLocale","resetSeries","zoomX","toggleDataPointSelection","dataURI","exportToCSV","addXaxisAnnotation","addYaxisAnnotation","addPointAnnotation","clearAnnotations","removeAnnotation","paper","destroy"],this.ctx.eventList=["click","mousedown","mousemove","mouseleave","touchstart","touchmove","touchleave","mouseup","touchend"],this.ctx.animations=new ve(this.ctx),this.ctx.axes=new Hi(this.ctx),this.ctx.core=new ga(this.ctx.el,this.ctx),this.ctx.config=new Pe({}),this.ctx.data=new Ft(this.ctx),this.ctx.grid=new Rt(this.ctx),this.ctx.graphics=new X(this.ctx),this.ctx.coreUtils=new $(this.ctx),this.ctx.crosshairs=new nt(this.ctx),this.ctx.events=new Oi(this.ctx),this.ctx.exports=new He(this.ctx),this.ctx.fill=new ne(this.ctx),this.ctx.localization=new Di(this.ctx),this.ctx.options=new ue,this.ctx.responsive=new Ni(this.ctx),this.ctx.series=new re(this.ctx),this.ctx.theme=new Wi(this.ctx),this.ctx.formatters=new ze(this.ctx),this.ctx.titleSubtitle=new Bi(this.ctx),this.ctx.legend=new Dt(this.ctx),this.ctx.toolbar=new Ht(this.ctx),this.ctx.tooltip=new At(this.ctx),this.ctx.dimensions=new Ne(this.ctx),this.ctx.updateHelpers=new ua(this.ctx),this.ctx.zoomPanSelection=new qi(this.ctx),this.ctx.w.globals.tooltip=new At(this.ctx)}}]),p}(),Lt=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"clear",value:function(e){var t=e.isUpdating;this.ctx.zoomPanSelection&&this.ctx.zoomPanSelection.destroy(),this.ctx.toolbar&&this.ctx.toolbar.destroy(),this.ctx.animations=null,this.ctx.axes=null,this.ctx.annotations=null,this.ctx.core=null,this.ctx.data=null,this.ctx.grid=null,this.ctx.series=null,this.ctx.responsive=null,this.ctx.theme=null,this.ctx.formatters=null,this.ctx.titleSubtitle=null,this.ctx.legend=null,this.ctx.dimensions=null,this.ctx.options=null,this.ctx.crosshairs=null,this.ctx.zoomPanSelection=null,this.ctx.updateHelpers=null,this.ctx.toolbar=null,this.ctx.localization=null,this.ctx.w.globals.tooltip=null,this.clearDomElements({isUpdating:t})}},{key:"killSVG",value:function(e){e.each(function(t,i){this.removeClass("*"),this.off(),this.stop()},!0),e.ungroup(),e.clear()}},{key:"clearDomElements",value:function(e){var t=this,i=e.isUpdating,a=this.w.globals.dom.Paper.node;a.parentNode&&a.parentNode.parentNode&&!i&&(a.parentNode.parentNode.style.minHeight="unset");var s=this.w.globals.dom.baseEl;s&&this.ctx.eventList.forEach(function(n){s.removeEventListener(n,t.ctx.events.documentEvent)});var r=this.w.globals.dom;if(this.ctx.el!==null)for(;this.ctx.el.firstChild;)this.ctx.el.removeChild(this.ctx.el.firstChild);this.killSVG(r.Paper),r.Paper.remove(),r.elWrap=null,r.elGraphical=null,r.elLegendWrap=null,r.elLegendForeign=null,r.baseEl=null,r.elGridRect=null,r.elGridRectMask=null,r.elGridRectMarkerMask=null,r.elForecastMask=null,r.elNonForecastMask=null,r.elDefs=null}}]),p}(),it=new WeakMap,fa=function(){function p(e,t){F(this,p),this.opts=t,this.ctx=this,this.w=new Ri(t).init(),this.el=e,this.w.globals.cuid=P.randomId(),this.w.globals.chartID=this.w.config.chart.id?P.escapeString(this.w.config.chart.id):this.w.globals.cuid,new Ct(this).initModules(),this.create=P.bind(this.create,this),this.windowResizeHandler=this._windowResizeHandler.bind(this),this.parentResizeHandler=this._parentResizeCallback.bind(this)}return R(p,[{key:"render",value:function(){var e=this;return new Promise(function(t,i){if(e.el!==null){Apex._chartInstances===void 0&&(Apex._chartInstances=[]),e.w.config.chart.id&&Apex._chartInstances.push({id:e.w.globals.chartID,group:e.w.config.chart.group,chart:e}),e.setLocale(e.w.config.chart.defaultLocale);var a=e.w.config.chart.events.beforeMount;typeof a=="function"&&a(e,e.w),e.events.fireEvent("beforeMount",[e,e.w]),window.addEventListener("resize",e.windowResizeHandler),function(g,f){var x=!1;if(g.nodeType!==Node.DOCUMENT_FRAGMENT_NODE){var b=g.getBoundingClientRect();g.style.display!=="none"&&b.width!==0||(x=!0)}var v=new ResizeObserver(function(y){x&&f.call(g,y),x=!0});g.nodeType===Node.DOCUMENT_FRAGMENT_NODE?Array.from(g.children).forEach(function(y){return v.observe(y)}):v.observe(g),it.set(f,v)}(e.el.parentNode,e.parentResizeHandler);var s=e.el.getRootNode&&e.el.getRootNode(),r=P.is("ShadowRoot",s),n=e.el.ownerDocument,o=r?s.getElementById("apexcharts-css"):n.getElementById("apexcharts-css");if(!o){var h;(o=document.createElement("style")).id="apexcharts-css",o.textContent=`@keyframes opaque { + 0% { + opacity: 0 + } + + to { + opacity: 1 + } +} + +@keyframes resizeanim { + + 0%, + to { + opacity: 0 + } +} + +.apexcharts-canvas { + position: relative; + user-select: none +} + +.apexcharts-canvas ::-webkit-scrollbar { + -webkit-appearance: none; + width: 6px +} + +.apexcharts-canvas ::-webkit-scrollbar-thumb { + border-radius: 4px; + background-color: rgba(0, 0, 0, .5); + box-shadow: 0 0 1px rgba(255, 255, 255, .5); + -webkit-box-shadow: 0 0 1px rgba(255, 255, 255, .5) +} + +.apexcharts-inner { + position: relative +} + +.apexcharts-text tspan { + font-family: inherit +} + +rect.legend-mouseover-inactive, +.legend-mouseover-inactive rect, +.legend-mouseover-inactive path, +.legend-mouseover-inactive circle, +.legend-mouseover-inactive line, +.legend-mouseover-inactive text.apexcharts-yaxis-title-text, +.legend-mouseover-inactive text.apexcharts-yaxis-label { + transition: .15s ease all; + opacity: .2 +} + +.apexcharts-legend-text { + padding-left: 15px; + margin-left: -15px; +} + +.apexcharts-series-collapsed { + opacity: 0 +} + +.apexcharts-tooltip { + border-radius: 5px; + box-shadow: 2px 2px 6px -4px #999; + cursor: default; + font-size: 14px; + left: 62px; + opacity: 0; + pointer-events: none; + position: absolute; + top: 20px; + display: flex; + flex-direction: column; + overflow: hidden; + white-space: nowrap; + z-index: 12; + transition: .15s ease all +} + +.apexcharts-tooltip.apexcharts-active { + opacity: 1; + transition: .15s ease all +} + +.apexcharts-tooltip.apexcharts-theme-light { + border: 1px solid #e3e3e3; + background: rgba(255, 255, 255, .96) +} + +.apexcharts-tooltip.apexcharts-theme-dark { + color: #fff; + background: rgba(30, 30, 30, .8) +} + +.apexcharts-tooltip * { + font-family: inherit +} + +.apexcharts-tooltip-title { + padding: 6px; + font-size: 15px; + margin-bottom: 4px +} + +.apexcharts-tooltip.apexcharts-theme-light .apexcharts-tooltip-title { + background: #eceff1; + border-bottom: 1px solid #ddd +} + +.apexcharts-tooltip.apexcharts-theme-dark .apexcharts-tooltip-title { + background: rgba(0, 0, 0, .7); + border-bottom: 1px solid #333 +} + +.apexcharts-tooltip-text-goals-value, +.apexcharts-tooltip-text-y-value, +.apexcharts-tooltip-text-z-value { + display: inline-block; + margin-left: 5px; + font-weight: 600 +} + +.apexcharts-tooltip-text-goals-label:empty, +.apexcharts-tooltip-text-goals-value:empty, +.apexcharts-tooltip-text-y-label:empty, +.apexcharts-tooltip-text-y-value:empty, +.apexcharts-tooltip-text-z-value:empty, +.apexcharts-tooltip-title:empty { + display: none +} + +.apexcharts-tooltip-text-goals-label, +.apexcharts-tooltip-text-goals-value { + padding: 6px 0 5px +} + +.apexcharts-tooltip-goals-group, +.apexcharts-tooltip-text-goals-label, +.apexcharts-tooltip-text-goals-value { + display: flex +} + +.apexcharts-tooltip-text-goals-label:not(:empty), +.apexcharts-tooltip-text-goals-value:not(:empty) { + margin-top: -6px +} + +.apexcharts-tooltip-marker { + width: 12px; + height: 12px; + position: relative; + top: 0; + margin-right: 10px; + border-radius: 50% +} + +.apexcharts-tooltip-series-group { + padding: 0 10px; + display: none; + text-align: left; + justify-content: left; + align-items: center +} + +.apexcharts-tooltip-series-group.apexcharts-active .apexcharts-tooltip-marker { + opacity: 1 +} + +.apexcharts-tooltip-series-group.apexcharts-active, +.apexcharts-tooltip-series-group:last-child { + padding-bottom: 4px +} + +.apexcharts-tooltip-y-group { + padding: 6px 0 5px +} + +.apexcharts-custom-tooltip, +.apexcharts-tooltip-box { + padding: 4px 8px +} + +.apexcharts-tooltip-boxPlot { + display: flex; + flex-direction: column-reverse +} + +.apexcharts-tooltip-box>div { + margin: 4px 0 +} + +.apexcharts-tooltip-box span.value { + font-weight: 700 +} + +.apexcharts-tooltip-rangebar { + padding: 5px 8px +} + +.apexcharts-tooltip-rangebar .category { + font-weight: 600; + color: #777 +} + +.apexcharts-tooltip-rangebar .series-name { + font-weight: 700; + display: block; + margin-bottom: 5px +} + +.apexcharts-xaxistooltip, +.apexcharts-yaxistooltip { + opacity: 0; + pointer-events: none; + color: #373d3f; + font-size: 13px; + text-align: center; + border-radius: 2px; + position: absolute; + z-index: 10; + background: #eceff1; + border: 1px solid #90a4ae +} + +.apexcharts-xaxistooltip { + padding: 9px 10px; + transition: .15s ease all +} + +.apexcharts-xaxistooltip.apexcharts-theme-dark { + background: rgba(0, 0, 0, .7); + border: 1px solid rgba(0, 0, 0, .5); + color: #fff +} + +.apexcharts-xaxistooltip:after, +.apexcharts-xaxistooltip:before { + left: 50%; + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none +} + +.apexcharts-xaxistooltip:after { + border-color: transparent; + border-width: 6px; + margin-left: -6px +} + +.apexcharts-xaxistooltip:before { + border-color: transparent; + border-width: 7px; + margin-left: -7px +} + +.apexcharts-xaxistooltip-bottom:after, +.apexcharts-xaxistooltip-bottom:before { + bottom: 100% +} + +.apexcharts-xaxistooltip-top:after, +.apexcharts-xaxistooltip-top:before { + top: 100% +} + +.apexcharts-xaxistooltip-bottom:after { + border-bottom-color: #eceff1 +} + +.apexcharts-xaxistooltip-bottom:before { + border-bottom-color: #90a4ae +} + +.apexcharts-xaxistooltip-bottom.apexcharts-theme-dark:after, +.apexcharts-xaxistooltip-bottom.apexcharts-theme-dark:before { + border-bottom-color: rgba(0, 0, 0, .5) +} + +.apexcharts-xaxistooltip-top:after { + border-top-color: #eceff1 +} + +.apexcharts-xaxistooltip-top:before { + border-top-color: #90a4ae +} + +.apexcharts-xaxistooltip-top.apexcharts-theme-dark:after, +.apexcharts-xaxistooltip-top.apexcharts-theme-dark:before { + border-top-color: rgba(0, 0, 0, .5) +} + +.apexcharts-xaxistooltip.apexcharts-active { + opacity: 1; + transition: .15s ease all +} + +.apexcharts-yaxistooltip { + padding: 4px 10px +} + +.apexcharts-yaxistooltip.apexcharts-theme-dark { + background: rgba(0, 0, 0, .7); + border: 1px solid rgba(0, 0, 0, .5); + color: #fff +} + +.apexcharts-yaxistooltip:after, +.apexcharts-yaxistooltip:before { + top: 50%; + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none +} + +.apexcharts-yaxistooltip:after { + border-color: transparent; + border-width: 6px; + margin-top: -6px +} + +.apexcharts-yaxistooltip:before { + border-color: transparent; + border-width: 7px; + margin-top: -7px +} + +.apexcharts-yaxistooltip-left:after, +.apexcharts-yaxistooltip-left:before { + left: 100% +} + +.apexcharts-yaxistooltip-right:after, +.apexcharts-yaxistooltip-right:before { + right: 100% +} + +.apexcharts-yaxistooltip-left:after { + border-left-color: #eceff1 +} + +.apexcharts-yaxistooltip-left:before { + border-left-color: #90a4ae +} + +.apexcharts-yaxistooltip-left.apexcharts-theme-dark:after, +.apexcharts-yaxistooltip-left.apexcharts-theme-dark:before { + border-left-color: rgba(0, 0, 0, .5) +} + +.apexcharts-yaxistooltip-right:after { + border-right-color: #eceff1 +} + +.apexcharts-yaxistooltip-right:before { + border-right-color: #90a4ae +} + +.apexcharts-yaxistooltip-right.apexcharts-theme-dark:after, +.apexcharts-yaxistooltip-right.apexcharts-theme-dark:before { + border-right-color: rgba(0, 0, 0, .5) +} + +.apexcharts-yaxistooltip.apexcharts-active { + opacity: 1 +} + +.apexcharts-yaxistooltip-hidden { + display: none +} + +.apexcharts-xcrosshairs, +.apexcharts-ycrosshairs { + pointer-events: none; + opacity: 0; + transition: .15s ease all +} + +.apexcharts-xcrosshairs.apexcharts-active, +.apexcharts-ycrosshairs.apexcharts-active { + opacity: 1; + transition: .15s ease all +} + +.apexcharts-ycrosshairs-hidden { + opacity: 0 +} + +.apexcharts-selection-rect { + cursor: move +} + +.svg_select_boundingRect, +.svg_select_points_rot { + pointer-events: none; + opacity: 0; + visibility: hidden +} + +.apexcharts-selection-rect+g .svg_select_boundingRect, +.apexcharts-selection-rect+g .svg_select_points_rot { + opacity: 0; + visibility: hidden +} + +.apexcharts-selection-rect+g .svg_select_points_l, +.apexcharts-selection-rect+g .svg_select_points_r { + cursor: ew-resize; + opacity: 1; + visibility: visible +} + +.svg_select_points { + fill: #efefef; + stroke: #333; + rx: 2 +} + +.apexcharts-svg.apexcharts-zoomable.hovering-zoom { + cursor: crosshair +} + +.apexcharts-svg.apexcharts-zoomable.hovering-pan { + cursor: move +} + +.apexcharts-menu-icon, +.apexcharts-pan-icon, +.apexcharts-reset-icon, +.apexcharts-selection-icon, +.apexcharts-toolbar-custom-icon, +.apexcharts-zoom-icon, +.apexcharts-zoomin-icon, +.apexcharts-zoomout-icon { + cursor: pointer; + width: 20px; + height: 20px; + line-height: 24px; + color: #6e8192; + text-align: center +} + +.apexcharts-menu-icon svg, +.apexcharts-reset-icon svg, +.apexcharts-zoom-icon svg, +.apexcharts-zoomin-icon svg, +.apexcharts-zoomout-icon svg { + fill: #6e8192 +} + +.apexcharts-selection-icon svg { + fill: #444; + transform: scale(.76) +} + +.apexcharts-theme-dark .apexcharts-menu-icon svg, +.apexcharts-theme-dark .apexcharts-pan-icon svg, +.apexcharts-theme-dark .apexcharts-reset-icon svg, +.apexcharts-theme-dark .apexcharts-selection-icon svg, +.apexcharts-theme-dark .apexcharts-toolbar-custom-icon svg, +.apexcharts-theme-dark .apexcharts-zoom-icon svg, +.apexcharts-theme-dark .apexcharts-zoomin-icon svg, +.apexcharts-theme-dark .apexcharts-zoomout-icon svg { + fill: #f3f4f5 +} + +.apexcharts-canvas .apexcharts-reset-zoom-icon.apexcharts-selected svg, +.apexcharts-canvas .apexcharts-selection-icon.apexcharts-selected svg, +.apexcharts-canvas .apexcharts-zoom-icon.apexcharts-selected svg { + fill: #008ffb +} + +.apexcharts-theme-light .apexcharts-menu-icon:hover svg, +.apexcharts-theme-light .apexcharts-reset-icon:hover svg, +.apexcharts-theme-light .apexcharts-selection-icon:not(.apexcharts-selected):hover svg, +.apexcharts-theme-light .apexcharts-zoom-icon:not(.apexcharts-selected):hover svg, +.apexcharts-theme-light .apexcharts-zoomin-icon:hover svg, +.apexcharts-theme-light .apexcharts-zoomout-icon:hover svg { + fill: #333 +} + +.apexcharts-menu-icon, +.apexcharts-selection-icon { + position: relative +} + +.apexcharts-reset-icon { + margin-left: 5px +} + +.apexcharts-menu-icon, +.apexcharts-reset-icon, +.apexcharts-zoom-icon { + transform: scale(.85) +} + +.apexcharts-zoomin-icon, +.apexcharts-zoomout-icon { + transform: scale(.7) +} + +.apexcharts-zoomout-icon { + margin-right: 3px +} + +.apexcharts-pan-icon { + transform: scale(.62); + position: relative; + left: 1px; + top: 0 +} + +.apexcharts-pan-icon svg { + fill: #fff; + stroke: #6e8192; + stroke-width: 2 +} + +.apexcharts-pan-icon.apexcharts-selected svg { + stroke: #008ffb +} + +.apexcharts-pan-icon:not(.apexcharts-selected):hover svg { + stroke: #333 +} + +.apexcharts-toolbar { + position: absolute; + z-index: 11; + max-width: 176px; + text-align: right; + border-radius: 3px; + padding: 0 6px 2px; + display: flex; + justify-content: space-between; + align-items: center +} + +.apexcharts-menu { + background: #fff; + position: absolute; + top: 100%; + border: 1px solid #ddd; + border-radius: 3px; + padding: 3px; + right: 10px; + opacity: 0; + min-width: 110px; + transition: .15s ease all; + pointer-events: none +} + +.apexcharts-menu.apexcharts-menu-open { + opacity: 1; + pointer-events: all; + transition: .15s ease all +} + +.apexcharts-menu-item { + padding: 6px 7px; + font-size: 12px; + cursor: pointer +} + +.apexcharts-theme-light .apexcharts-menu-item:hover { + background: #eee +} + +.apexcharts-theme-dark .apexcharts-menu { + background: rgba(0, 0, 0, .7); + color: #fff +} + +@media screen and (min-width:768px) { + .apexcharts-canvas:hover .apexcharts-toolbar { + opacity: 1 + } +} + +.apexcharts-canvas .apexcharts-element-hidden, +.apexcharts-datalabel.apexcharts-element-hidden, +.apexcharts-hide .apexcharts-series-points { + opacity: 0; +} + +.apexcharts-hidden-element-shown { + opacity: 1; + transition: 0.25s ease all; +} + +.apexcharts-datalabel, +.apexcharts-datalabel-label, +.apexcharts-datalabel-value, +.apexcharts-datalabels, +.apexcharts-pie-label { + cursor: default; + pointer-events: none +} + +.apexcharts-pie-label-delay { + opacity: 0; + animation-name: opaque; + animation-duration: .3s; + animation-fill-mode: forwards; + animation-timing-function: ease +} + +.apexcharts-radialbar-label { + cursor: pointer; +} + +.apexcharts-annotation-rect, +.apexcharts-area-series .apexcharts-area, +.apexcharts-area-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events, +.apexcharts-gridline, +.apexcharts-line, +.apexcharts-line-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events, +.apexcharts-point-annotation-label, +.apexcharts-radar-series path:not(.apexcharts-marker), +.apexcharts-radar-series polygon, +.apexcharts-toolbar svg, +.apexcharts-tooltip .apexcharts-marker, +.apexcharts-xaxis-annotation-label, +.apexcharts-yaxis-annotation-label, +.apexcharts-zoom-rect { + pointer-events: none +} + +.apexcharts-tooltip-active .apexcharts-marker { + transition: .15s ease all +} + +.resize-triggers { + animation: 1ms resizeanim; + visibility: hidden; + opacity: 0; + height: 100%; + width: 100%; + overflow: hidden +} + +.contract-trigger:before, +.resize-triggers, +.resize-triggers>div { + content: " "; + display: block; + position: absolute; + top: 0; + left: 0 +} + +.resize-triggers>div { + height: 100%; + width: 100%; + background: #eee; + overflow: auto +} + +.contract-trigger:before { + overflow: hidden; + width: 200%; + height: 200% +} + +.apexcharts-bar-goals-markers { + pointer-events: none +} + +.apexcharts-bar-shadows { + pointer-events: none +} + +.apexcharts-rangebar-goals-markers { + pointer-events: none +}`;var c=((h=e.opts.chart)===null||h===void 0?void 0:h.nonce)||e.w.config.chart.nonce;c&&o.setAttribute("nonce",c),r?s.prepend(o):n.head.appendChild(o)}var d=e.create(e.w.config.series,{});if(!d)return t(e);e.mount(d).then(function(){typeof e.w.config.chart.events.mounted=="function"&&e.w.config.chart.events.mounted(e,e.w),e.events.fireEvent("mounted",[e,e.w]),t(d)}).catch(function(g){i(g)})}else i(new Error("Element not found"))})}},{key:"create",value:function(e,t){var i=this,a=this.w;new Ct(this).initModules();var s=this.w.globals;if(s.noData=!1,s.animationEnded=!1,this.responsive.checkResponsiveConfig(t),a.config.xaxis.convertedCatToNumeric&&new Le(a.config).convertCatToNumericXaxis(a.config,this.ctx),this.el===null||(this.core.setupElements(),a.config.chart.type==="treemap"&&(a.config.grid.show=!1,a.config.yaxis[0].show=!1),s.svgWidth===0))return s.animationEnded=!0,null;var r=e;e.forEach(function(g,f){g.hidden&&(r=i.legend.legendHelpers.getSeriesAfterCollapsing({realIndex:f}))});var n=$.checkComboSeries(r,a.config.chart.type);s.comboCharts=n.comboCharts,s.comboBarCount=n.comboBarCount;var o=r.every(function(g){return g.data&&g.data.length===0});(r.length===0||o&&s.collapsedSeries.length<1)&&this.series.handleNoData(),this.events.setupEventHandlers(),this.data.parseData(r),this.theme.init(),new ye(this).setGlobalMarkerSize(),this.formatters.setLabelFormatters(),this.titleSubtitle.draw(),s.noData&&s.collapsedSeries.length!==s.series.length&&!a.config.legend.showForSingleSeries||this.legend.init(),this.series.hasAllSeriesEqualX(),s.axisCharts&&(this.core.coreCalculations(),a.config.xaxis.type!=="category"&&this.formatters.setLabelFormatters(),this.ctx.toolbar.minX=a.globals.minX,this.ctx.toolbar.maxX=a.globals.maxX),this.formatters.heatmapLabelFormatters(),new $(this).getLargestMarkerSize(),this.dimensions.plotCoords();var h=this.core.xySettings();this.grid.createGridMask();var c=this.core.plotChartType(r,h),d=new be(this);return d.bringForward(),a.config.dataLabels.background.enabled&&d.dataLabelsBackground(),this.core.shiftGraphPosition(),{elGraph:c,xyRatios:h,dimensions:{plot:{left:a.globals.translateX,top:a.globals.translateY,width:a.globals.gridWidth,height:a.globals.gridHeight}}}}},{key:"mount",value:function(){var e=this,t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:null,i=this,a=i.w;return new Promise(function(s,r){if(i.el===null)return r(new Error("Not enough data to display or target element not found"));(t===null||a.globals.allSeriesCollapsed)&&i.series.handleNoData(),i.grid=new Rt(i);var n,o,h=i.grid.drawGrid();if(i.annotations=new Fi(i),i.annotations.drawImageAnnos(),i.annotations.drawTextAnnos(),a.config.grid.position==="back"&&(h&&a.globals.dom.elGraphical.add(h.el),h!=null&&(n=h.elGridBorders)!==null&&n!==void 0&&n.node&&a.globals.dom.elGraphical.add(h.elGridBorders)),Array.isArray(t.elGraph))for(var c=0;c0&&a.globals.memory.methodsToExec.forEach(function(x){x.method(x.params,!1,x.context)}),a.globals.axisCharts||a.globals.noData||i.core.resizeNonAxisCharts(),s(i)})}},{key:"destroy",value:function(){var e,t;window.removeEventListener("resize",this.windowResizeHandler),this.el.parentNode,e=this.parentResizeHandler,(t=it.get(e))&&(t.disconnect(),it.delete(e));var i=this.w.config.chart.id;i&&Apex._chartInstances.forEach(function(a,s){a.id===P.escapeString(i)&&Apex._chartInstances.splice(s,1)}),new Lt(this.ctx).clear({isUpdating:!1})}},{key:"updateOptions",value:function(e){var t=this,i=arguments.length>1&&arguments[1]!==void 0&&arguments[1],a=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2],s=!(arguments.length>3&&arguments[3]!==void 0)||arguments[3],r=!(arguments.length>4&&arguments[4]!==void 0)||arguments[4],n=this.w;return n.globals.selection=void 0,e.series&&(this.series.resetSeries(!1,!0,!1),e.series.length&&e.series[0].data&&(e.series=e.series.map(function(o,h){return t.updateHelpers._extendSeries(o,h)})),this.updateHelpers.revertDefaultAxisMinMax()),e.xaxis&&(e=this.updateHelpers.forceXAxisUpdate(e)),e.yaxis&&(e=this.updateHelpers.forceYAxisUpdate(e)),n.globals.collapsedSeriesIndices.length>0&&this.series.clearPreviousPaths(),e.theme&&(e=this.theme.updateThemeOptions(e)),this.updateHelpers._updateOptions(e,i,a,s,r)}},{key:"updateSeries",value:function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],t=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],i=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2];return this.series.resetSeries(!1),this.updateHelpers.revertDefaultAxisMinMax(),this.updateHelpers._updateSeries(e,t,i)}},{key:"appendSeries",value:function(e){var t=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],i=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2],a=this.w.config.series.slice();return a.push(e),this.series.resetSeries(!1),this.updateHelpers.revertDefaultAxisMinMax(),this.updateHelpers._updateSeries(a,t,i)}},{key:"appendData",value:function(e){var t=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],i=this;i.w.globals.dataChanged=!0,i.series.getPreviousPaths();for(var a=i.w.config.series.slice(),s=0;s0&&arguments[0]!==void 0)||arguments[0],t=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1];this.series.resetSeries(e,t)}},{key:"addEventListener",value:function(e,t){this.events.addEventListener(e,t)}},{key:"removeEventListener",value:function(e,t){this.events.removeEventListener(e,t)}},{key:"addXaxisAnnotation",value:function(e){var t=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:void 0,a=this;i&&(a=i),a.annotations.addXaxisAnnotationExternal(e,t,a)}},{key:"addYaxisAnnotation",value:function(e){var t=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:void 0,a=this;i&&(a=i),a.annotations.addYaxisAnnotationExternal(e,t,a)}},{key:"addPointAnnotation",value:function(e){var t=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:void 0,a=this;i&&(a=i),a.annotations.addPointAnnotationExternal(e,t,a)}},{key:"clearAnnotations",value:function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:void 0,t=this;e&&(t=e),t.annotations.clearAnnotations(t)}},{key:"removeAnnotation",value:function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:void 0,i=this;t&&(i=t),i.annotations.removeAnnotation(i,e)}},{key:"getChartArea",value:function(){return this.w.globals.dom.baseEl.querySelector(".apexcharts-inner")}},{key:"getSeriesTotalXRange",value:function(e,t){return this.coreUtils.getSeriesTotalsXRange(e,t)}},{key:"getHighestValueInSeries",value:function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;return new rt(this.ctx).getMinYMaxY(e).highestY}},{key:"getLowestValueInSeries",value:function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;return new rt(this.ctx).getMinYMaxY(e).lowestY}},{key:"getSeriesTotal",value:function(){return this.w.globals.seriesTotals}},{key:"toggleDataPointSelection",value:function(e,t){return this.updateHelpers.toggleDataPointSelection(e,t)}},{key:"zoomX",value:function(e,t){this.ctx.toolbar.zoomUpdateOptions(e,t)}},{key:"setLocale",value:function(e){this.localization.setCurrentLocaleValues(e)}},{key:"dataURI",value:function(e){return new He(this.ctx).dataURI(e)}},{key:"exportToCSV",value:function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return new He(this.ctx).exportToCSV(e)}},{key:"paper",value:function(){return this.w.globals.dom.Paper}},{key:"_parentResizeCallback",value:function(){this.w.globals.animationEnded&&this.w.config.chart.redrawOnParentResize&&this._windowResize()}},{key:"_windowResize",value:function(){var e=this;clearTimeout(this.w.globals.resizeTimer),this.w.globals.resizeTimer=window.setTimeout(function(){e.w.globals.resized=!0,e.w.globals.dataChanged=!1,e.ctx.update()},150)}},{key:"_windowResizeHandler",value:function(){var e=this.w.config.chart.redrawOnWindowResize;typeof e=="function"&&(e=e()),e&&this._windowResize()}}],[{key:"getChartByID",value:function(e){var t=P.escapeString(e);if(Apex._chartInstances){var i=Apex._chartInstances.filter(function(a){return a.id===t})[0];return i&&i.chart}}},{key:"initOnLoad",value:function(){for(var e=document.querySelectorAll("[data-apexcharts]"),t=0;t2?s-2:0),n=2;n{var pa=200,ii="__lodash_hash_undefined__",xa=800,ba=16,ai=9007199254740991,si="[object Arguments]",ma="[object Array]",va="[object AsyncFunction]",ya="[object Boolean]",wa="[object Date]",ka="[object Error]",ri="[object Function]",Aa="[object GeneratorFunction]",Sa="[object Map]",Ca="[object Number]",La="[object Null]",ni="[object Object]",Pa="[object Proxy]",Ma="[object RegExp]",Ia="[object Set]",Ta="[object String]",za="[object Undefined]",Xa="[object WeakMap]",Ea="[object ArrayBuffer]",Ya="[object DataView]",Fa="[object Float32Array]",Ra="[object Float64Array]",Oa="[object Int8Array]",Da="[object Int16Array]",Ha="[object Int32Array]",Na="[object Uint8Array]",Wa="[object Uint8ClampedArray]",Ba="[object Uint16Array]",Ga="[object Uint32Array]",Va=/[\\^$.*+?()[\]{}|]/g,_a=/^\[object .+?Constructor\]$/,ja=/^(?:0|[1-9]\d*)$/,U={};U[Fa]=U[Ra]=U[Oa]=U[Da]=U[Ha]=U[Na]=U[Wa]=U[Ba]=U[Ga]=!0;U[si]=U[ma]=U[Ea]=U[ya]=U[Ya]=U[wa]=U[ka]=U[ri]=U[Sa]=U[Ca]=U[ni]=U[Ma]=U[Ia]=U[Ta]=U[Xa]=!1;var oi=typeof global=="object"&&global&&global.Object===Object&&global,Ua=typeof self=="object"&&self&&self.Object===Object&&self,Fe=oi||Ua||Function("return this")(),li=typeof Xe=="object"&&Xe&&!Xe.nodeType&&Xe,Ee=li&&typeof we=="object"&&we&&!we.nodeType&&we,hi=Ee&&Ee.exports===li,ht=hi&&oi.process,Ut=function(){try{var p=Ee&&Ee.require&&Ee.require("util").types;return p||ht&&ht.binding&&ht.binding("util")}catch{}}(),qt=Ut&&Ut.isTypedArray;function qa(p,e,t){switch(t.length){case 0:return p.call(e);case 1:return p.call(e,t[0]);case 2:return p.call(e,t[0],t[1]);case 3:return p.call(e,t[0],t[1],t[2])}return p.apply(e,t)}function Za(p,e){for(var t=-1,i=Array(p);++t-1}function bs(p,e){var t=this.__data__,i=Ue(t,p);return i<0?(++this.size,t.push([p,e])):t[i][1]=e,this}de.prototype.clear=us;de.prototype.delete=fs;de.prototype.get=ps;de.prototype.has=xs;de.prototype.set=bs;function ke(p){var e=-1,t=p==null?0:p.length;for(this.clear();++e1?t[a-1]:void 0,r=a>2?t[2]:void 0;for(s=p.length>3&&typeof s=="function"?(a--,s):void 0,r&&js(t[0],t[1],r)&&(s=a<3?void 0:s,a=1),e=Object(e);++i-1&&p%1==0&&p0){if(++e>=xa)return arguments[0]}else e=0;return p.apply(void 0,arguments)}}function er(p){if(p!=null){try{return je.call(p)}catch{}try{return p+""}catch{}}return""}function $e(p,e){return p===e||p!==p&&e!==e}var ut=ti(function(){return arguments}())?ti:function(p){return Re(p)&&ce.call(p,"callee")&&!as.call(p,"callee")},ft=Array.isArray;function bt(p){return p!=null&&bi(p.length)&&!mt(p)}function tr(p){return Re(p)&&bt(p)}var xi=rs||nr;function mt(p){if(!xe(p))return!1;var e=qe(p);return e==ri||e==Aa||e==va||e==Pa}function bi(p){return typeof p=="number"&&p>-1&&p%1==0&&p<=ai}function xe(p){var e=typeof p;return p!=null&&(e=="object"||e=="function")}function Re(p){return p!=null&&typeof p=="object"}function ir(p){if(!Re(p)||qe(p)!=ni)return!1;var e=di(p);if(e===null)return!0;var t=ce.call(e,"constructor")&&e.constructor;return typeof t=="function"&&t instanceof t&&je.call(t)==ts}var mi=qt?$a(qt):Xs;function ar(p){return Ws(p,vi(p))}function vi(p){return bt(p)?Ms(p,!0):Es(p)}var sr=Bs(function(p,e,t){ui(p,e,t)});function rr(p){return function(){return p}}function yi(p){return p}function nr(){return!1}we.exports=sr});var Ai=zi(jt(),1),ki=wi();function or({options:p,chartId:e,theme:t,extraJsOptions:i}){return{chart:null,options:p,chartId:e,theme:t,extraJsOptions:i,init:function(){this.$wire.$on("updateOptions",({options:a})=>{a=ki(a,this.extraJsOptions),this.updateChart(a)}),Alpine.effect(()=>{let a=Alpine.store("theme");this.$nextTick(()=>{this.chart===null?this.initChart():this.updateChart({theme:{mode:a},chart:{background:"inherit"}})})})},initChart:function(){this.options.theme={mode:this.theme},this.options.chart.background="inherit",this.options=ki(this.options,this.extraJsOptions),this.chart=new Ai.default(document.querySelector(this.chartId),this.options),this.chart.render()},updateChart:function(a){this.chart.updateOptions(a,!1,!0,!0)}}}export{or as default}; +/*! Bundled license information: + +apexcharts/dist/apexcharts.common.js: + (*! + * ApexCharts v3.53.0 + * (c) 2018-2024 ApexCharts + * Released under the MIT License. + *) +*/ diff --git a/public/js/filament/forms/components/file-upload.js b/public/js/filament/forms/components/file-upload.js index 1152644..a90ca3a 100644 --- a/public/js/filament/forms/components/file-upload.js +++ b/public/js/filament/forms/components/file-upload.js @@ -24,7 +24,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho ${w.replace(/ /g," ")} -`}let x=t.aspectRatio||b/y,_=y,P=_*x,O=typeof t.scaleToFit>"u"||t.scaleToFit,M=t.center?t.center.x:.5,C=t.center?t.center.y:.5,S=Tl({width:y,height:b},Il({width:_,height:P},x),t.rotation,O?{x:M,y:C}:{x:.5,y:.5}),F=t.zoom*S,R=t.rotation*(180/Math.PI),L={x:_*.5,y:P*.5},z={x:L.x-y*M,y:L.y-b*C},D=[`rotate(${R} ${L.x} ${L.y})`,`translate(${L.x} ${L.y})`,`scale(${F})`,`translate(${-L.x} ${-L.y})`,`translate(${z.x} ${z.y})`],k=t.flip&&t.flip.horizontal,B=t.flip&&t.flip.vertical,X=[`scale(${k?-1:1} ${B?-1:1})`,`translate(${k?-y:0} ${B?-b:0})`],q=` +`}let x=t.aspectRatio||b/y,_=y,P=_*x,O=typeof t.scaleToFit>"u"||t.scaleToFit,M=t.center?t.center.x:.5,C=t.center?t.center.y:.5,S=Tl({width:y,height:b},Il({width:_,height:P},x),t.rotation,O?{x:M,y:C}:{x:.5,y:.5}),F=t.zoom*S,R=t.rotation*(180/Math.PI),L={x:_*.5,y:P*.5},z={x:L.x-y*M,y:L.y-b*C},D=[`rotate(${R} ${L.x} ${L.y})`,`translate(${L.x} ${L.y})`,`scale(${F})`,`translate(${-L.x} ${-L.y})`,`translate(${z.x} ${z.y})`],k=t.flip&&t.flip.horizontal,B=t.flip&&t.flip.vertical,X=[`scale(${k?-1:1} ${B?-1:1})`,`translate(${k?-y:0} ${B?-b:0})`],Y=` create([ + 'course' => 1, + 'max_shifts' => 3, + 'max_nights' => 3, + 'max_weekends' => 3, + 'capacity' => 3, + 'qualifications' => ['run'], + + ]); + + Shift::factory()->create([ + 'soldier_id' => User::factory()->create([ + 'userable_id' => $soldier1->id, + ])->userable_id, + 'parallel_weight' => 0.1, + 'start_date' => now()->addMonth(), + 'end_date' => now()->addMonth()->addHour(), + 'task_id' => Task::factory()->create([ + 'type' => 'run', + ])->id, + ]); + + $soldier2 = Soldier::factory()->create([ + 'course' => 1, + 'max_shifts' => 3, + 'max_nights' => 3, + 'max_weekends' => 3, + 'capacity' => 3, + 'qualifications' => ['run'], + + ]); + + Shift::factory()->create([ + 'soldier_id' => User::factory()->create([ + 'userable_id' => $soldier2->id, + ])->userable_id, + 'parallel_weight' => 0.2, + 'start_date' => now()->addMonth()->addHour(), + 'end_date' => now()->addMonth()->addHours(2), + 'task_id' => Task::factory()->create([ + 'type' => 'run', + ])->id, + ]); + + $charts = new Charts; + $result = $charts->organizeChartData('points', 1, now()->addMonth()->month, now()->addMonth()->year); + expect($result)->toHaveKey('labels')->toBeArray(); + expect($result)->toHaveKey('data')->toBeArray(); +}); From 4e0151695eed3ad214e39df4475df8f070f22aa2 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Tue, 7 Jan 2025 11:30:57 +0200 Subject: [PATCH 062/259] push and deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Enums/MonthesInYear.php | 37 + .../Notifications/Concerns/HasCommonKey.php | 22 + app/Filament/Notifications/MyNotification.php | 74 + app/Filament/Widgets/ChartWidget.php | 186 + app/Livewire/MyDatabaseNotifications.php | 830 +- app/Models/Constraint.php | 5 +- app/Models/Shift.php | 398 +- app/Providers/FilamentServiceProvider.php | 4 + app/Resources/ChartResource.php | 42 + .../ChartResource/Pages/CreateChart.php | 11 + .../ChartResource/Pages/EditChart.php | 19 + .../ChartResource/Pages/ListCharts.php | 19 + app/Resources/SoldierResource.php | 37 +- app/Resources/TaskResource.php | 36 +- app/Services/Charts.php | 113 + composer.json | 3 +- composer.lock | 13642 ++++++++++++++++ database/seeders/DatabaseSeeder.php | 7 + lang/en.json | 39 +- lang/he.json | 88 +- public/js/app/components/apexcharts.js | 800 + .../filament/forms/components/file-upload.js | 2 +- tests/Unit/ChartsTest.php | 58 + 24 files changed, 16039 insertions(+), 435 deletions(-) create mode 100644 app/Enums/MonthesInYear.php create mode 100644 app/Filament/Notifications/Concerns/HasCommonKey.php create mode 100644 app/Filament/Notifications/MyNotification.php create mode 100644 app/Filament/Widgets/ChartWidget.php create mode 100644 app/Resources/ChartResource.php create mode 100644 app/Resources/ChartResource/Pages/CreateChart.php create mode 100644 app/Resources/ChartResource/Pages/EditChart.php create mode 100644 app/Resources/ChartResource/Pages/ListCharts.php create mode 100644 app/Services/Charts.php create mode 100644 composer.lock create mode 100644 public/js/app/components/apexcharts.js create mode 100644 tests/Unit/ChartsTest.php diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 3e295c7..f1b4b0d 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version1_17 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version1_18 flavor: | latest=false tags: | diff --git a/app/Enums/MonthesInYear.php b/app/Enums/MonthesInYear.php new file mode 100644 index 0000000..d98fccd --- /dev/null +++ b/app/Enums/MonthesInYear.php @@ -0,0 +1,37 @@ + __('January'), + self::FEBRUARY => __('February'), + self::MARCH => __('March'), + self::APRIL => __('April'), + self::MAY => __('May'), + self::JUNE => __('June'), + self::JULY => __('July'), + self::AUGUST => __('August'), + self::SEPTEMBER => __('September'), + self::OCTOBER => __('October'), + self::NOVEMBER => __('November'), + self::DECEMBER => __('December'), + }; + } +} diff --git a/app/Filament/Notifications/Concerns/HasCommonKey.php b/app/Filament/Notifications/Concerns/HasCommonKey.php new file mode 100644 index 0000000..fc47224 --- /dev/null +++ b/app/Filament/Notifications/Concerns/HasCommonKey.php @@ -0,0 +1,22 @@ +commonKey = $commonKey; + + return $this; + } + + public function getCommonKey(): ?string + { + return $this->evaluate($this->commonKey); + } +} diff --git a/app/Filament/Notifications/MyNotification.php b/app/Filament/Notifications/MyNotification.php new file mode 100644 index 0000000..2c1aef8 --- /dev/null +++ b/app/Filament/Notifications/MyNotification.php @@ -0,0 +1,74 @@ + $this->getId(), + 'commonKey' => $this->getCommonKey(), + 'actions' => array_map(fn (Action|ActionGroup $action): array => $action->toArray(), $this->getActions()), + 'body' => $this->getBody(), + 'color' => $this->getColor(), + 'duration' => $this->getDuration(), + 'icon' => $this->getIcon(), + 'iconColor' => $this->getIconColor(), + 'status' => $this->getStatus(), + 'title' => $this->getTitle(), + 'view' => $this->getView(), + 'viewData' => $this->getViewData(), + ]; + } + + /** + * @param array $data + */ + public static function fromArray(array $data): static + { + $static = static::make($data['id'] ?? Str::random()); + + if ( + ($static::class !== self::class) && + (get_called_class() === self::class) + ) { + return $static::fromArray($data); + } + + $static->actions( + array_map( + fn (array $action): Action|ActionGroup => match (array_key_exists('actions', $action)) { + true => ActionGroup::fromArray($action), + false => Action::fromArray($action), + }, + $data['actions'] ?? [], + ), + ); + + $view = $data['view'] ?? null; + + if (filled($view) && ($static->getView() !== $view) && $static->isViewSafe($view)) { + $static->view($data['view']); + } + $static->viewData($data['viewData'] ?? []); + $static->commonKey($data['commonKey'] ?? null); + $static->body($data['body'] ?? null); + $static->color($data['color'] ?? null); + $static->duration($data['duration'] ?? $static->getDuration()); + $static->status($data['status'] ?? $static->getStatus()); + $static->icon($data['icon'] ?? $static->getIcon()); + $static->iconColor($data['iconColor'] ?? $static->getIconColor()); + $static->title($data['title'] ?? null); + + return $static; + } +} diff --git a/app/Filament/Widgets/ChartWidget.php b/app/Filament/Widgets/ChartWidget.php new file mode 100644 index 0000000..be7e360 --- /dev/null +++ b/app/Filament/Widgets/ChartWidget.php @@ -0,0 +1,186 @@ +default('bar') + ->options([ + 'line' => 'Line', + 'bar' => 'Col', + 'area' => 'Area', + ]) + ->inline(true) + ->label(__('Type')), + Grid::make() + ->schema([ + Toggle::make('ordersChartMarkers') + ->default(false) + ->label('Markers'), + + Toggle::make('ordersChartGrid') + ->default(false) + ->label('Grid'), + ]), + Select::make('data') + ->default('points') + ->hiddenLabel() + ->placeholder(__('Select parameter to filter')) + ->live() + ->options([ + 'shifts' => __('Shifts'), + 'lowConstraintsRejected' => __('low Constraints Rejected'), + 'constraints' => __('Constraints'), + 'points' => __('Points'), + 'weekends' => __('Weekends'), + 'nights' => __('Nights'), + ]), + Select::make('year') + ->default(now()->year) + ->label(__('Year')) + ->options($this->getYearOptions()) + ->placeholder(__('Select year')), + Select::make('month') + ->default(12) + ->label(__('Month')) + ->options($this->getMonthOptions()) + ->placeholder(__('Select month')), + Select::make('course') + ->default(1) + ->options( + Soldier::pluck('course', 'course')->unique()->sortBy('course')->all() + ) + ->placeholder(__('Select course')) + ->label(__('Course')), + ]; + } + + protected function getOptions(): array + { + $filters = $this->filterFormData; + $chart = new Charts; + $detailes = $chart->organizeChartData($filters['data'], $filters['course'], $filters['month'], $filters['year']); + + return [ + 'chart' => [ + 'type' => $filters['ChartType'], + 'height' => 490, + 'toolbar' => [ + 'show' => true, + ], + ], + 'theme' => [ + 'mode' => 'light', + ], + 'series' => [ + [ + 'name' => __('label', ['data' => __($filters['data']), 'course' => $filters['course']]), + 'data' => $detailes['data'], + ], + ], + 'plotOptions' => [ + 'bar' => [ + 'borderRadius' => 2, + ], + ], + 'xaxis' => [ + 'categories' => $detailes['labels'], + 'labels' => [ + 'show' => false, + ], + ], + 'tooltip' => [ + 'enabled' => true, + 'x' => [ + 'formatter' => function ($val, $index) use ($detailes) { + return $detailes['labels'][$index] ?? $val; + }, + ], + ], + 'yaxis' => [ + 'labels' => [ + 'style' => [ + 'fontWeight' => 400, + 'fontFamily' => 'inherit', + ], + ], + ], + 'fill' => [ + 'type' => 'gradient', + 'gradient' => [ + 'shade' => 'dark', + 'type' => 'vertical', + 'shadeIntensity' => 0.5, + 'gradientToColors' => ['#fbbf24'], + 'inverseColors' => true, + 'opacityFrom' => 1, + 'opacityTo' => 1, + 'stops' => [0, 100], + ], + ], + + 'dataLabels' => [ + 'enabled' => false, + 'dropShadow' => true, + ], + 'grid' => [ + 'show' => $filters['ordersChartGrid'], + ], + 'tooltip' => [ + 'enabled' => true, + ], + 'stroke' => [ + 'width' => $filters['ChartType'] === 'line' ? 4 : 0, + ], + 'noData' => [ + 'text' => __('No matching data!'), + 'align' => 'center', + 'verticalAlign' => 'middle', + 'offsetX' => 0, + 'offsetY' => 0, + 'style' => [ + 'color' => '#FF0000', + 'fontSize' => '17px', + 'fontWeight' => 400, + 'fontFamily' => 'inherit', + ], + ], + 'colors' => ['#f59e0b'], + ]; + } + + protected function getYearOptions(): array + { + $currentYear = now()->year; + $years = range($currentYear - 1, $currentYear + 4); + + return array_combine($years, $years); + } + + protected function getMonthOptions(): array + { + return array_combine( + array_map(fn ($enum) => $enum->value, MonthesInYear::cases()), + array_map(fn ($enum) => $enum->getLabel(), MonthesInYear::cases()) + ); + } +} diff --git a/app/Livewire/MyDatabaseNotifications.php b/app/Livewire/MyDatabaseNotifications.php index 99b6c59..d8f5440 100644 --- a/app/Livewire/MyDatabaseNotifications.php +++ b/app/Livewire/MyDatabaseNotifications.php @@ -2,118 +2,208 @@ namespace App\Livewire; +use App\Filament\Notifications\MyNotification; use App\Models\Shift; use App\Models\Soldier; +use App\Models\User; use App\Services\ChangeAssignment; use Filament\Notifications\Actions\Action as NotificationAction; use Filament\Notifications\Livewire\DatabaseNotifications; -use Filament\Notifications\Notification; use Livewire\Attributes\On; class MyDatabaseNotifications extends DatabaseNotifications { #[On('confirmExchange')] - public function confirmExchange($approverRole, $requestingSoldier, $approvingSoldier, $shiftA, $shiftB) + public function confirmExchange($approverRole, $soldierAId, $soldierBId, $shiftAId, $shiftBId, $requesterId) { - $this->confirmExchangeByRole($approverRole, $requestingSoldier, $approvingSoldier, $shiftA, $shiftB); + $this->confirmExchangeByRole($approverRole, $soldierAId, $soldierBId, $shiftAId, $shiftBId, $requesterId); } - protected function confirmExchangeByRole($approverRole, $requestingSoldier, $approvingSoldier, $shiftA, $shiftB) + protected function confirmExchangeByRole($approverRole, $soldierAId, $soldierBId, $shiftAId, $shiftBId, $requesterId) { - $approverRole ? - $this->commanderConfirmExchange($requestingSoldier, $approvingSoldier, $shiftA, $shiftB) : - $this->soldierConfirmExchange($requestingSoldier, $approvingSoldier, $shiftA, $shiftB); + match ($approverRole) { + 'shifts-assignment' => $this->shiftAssignmentConfirmExchange($soldierAId, $soldierBId, $shiftAId, $shiftBId, $requesterId), + 'team-commander', 'department-commander' => $this->commanderConfirmExchange($soldierAId, $soldierBId, $shiftAId, $shiftBId), + 'soldier' => $this->soldierConfirmExchange($soldierAId, $soldierBId, $shiftAId, $shiftBId) + }; } - protected function commanderConfirmExchange($requestingSoldier, $approvingSoldier, $shiftA, $shiftB) + protected function shiftAssignmentConfirmExchange($soldierAId, $soldierBId, $shiftAId, $shiftBId, $requesterId) { - $requestingSoldier = Soldier::find($requestingSoldier); - $approvingSoldier = Soldier::find($approvingSoldier); - $shiftA = Shift::find($shiftA); - $shiftB = Shift::find($shiftB); - $changeAssignment = new ChangeAssignment($shiftA); - $changeAssignment->exchange($shiftB); - $this->dispatch('filament-fullcalendar--refresh'); - if ($requestingSoldier->team->commander->id !== $approvingSoldier->id) { - $this->sendNotification( - __('Approve exchange shift request'), - __( - 'Commander notification of approving exchange shift request for the requesting soldier', - [ - 'requestingSoldierName' => $requestingSoldier->user->displayName, - 'shiftAName' => $shiftA->task->name, - 'shiftAStart' => $shiftA->start_date, - 'shiftAEnd' => $shiftA->end_date, - 'approvingSoldierName' => $approvingSoldier->user->displayName, - 'shiftBName' => $shiftB->task->name, - 'shiftBStart' => $shiftB->start_date, - 'shiftBEnd' => $shiftB->end_date, - 'commanderName' => $requestingSoldier->team->commander->user->displayName, - ] - ), - [], - $requestingSoldier->user - ); - $this->sendNotification( - __('Approve exchange shift request'), - __( - 'Commander notification of approving exchange shift request for the approving soldier', - [ - 'approvingSoldierName' => $approvingSoldier->user->displayName, - 'requestingSoldierName' => $requestingSoldier->user->displayName, - 'shiftBName' => $shiftB->task->name, - 'shiftBStart' => $shiftB->start_date, - 'shiftBEnd' => $shiftB->end_date, - 'shiftAName' => $shiftA->task->name, - 'shiftAStart' => $shiftA->start_date, - 'shiftAEnd' => $shiftA->end_date, - 'commanderName' => $requestingSoldier->team->commander->user->displayName, - ] - ), - [], - $approvingSoldier->user + $soldierA = Soldier::find($soldierAId); + $soldierB = Soldier::find($soldierBId); + $shiftA = Shift::find($shiftAId); + $shiftB = Shift::find($shiftBId); + $this->shiftAssignmentExchange($shiftA, $shiftB); + $this->deleteNonRelevantNotifications($shiftAId.'-'.$shiftBId); + $this->sendNotification( + __('Exchange shift'), + __( + 'Shifts assignment notification of exchanging shifts for first soldier', + [ + 'soldierAName' => $soldierA->user->displayName, + 'shiftAName' => $shiftA->task->name, + 'shiftAStart' => $shiftA->start_date, + 'shiftAEnd' => $shiftA->end_date, + 'soldierBName' => $soldierB->user->displayName, + 'shiftBName' => $shiftB->task->name, + 'shiftBStart' => $shiftB->start_date, + 'shiftBEnd' => $shiftB->end_date, + 'shiftsAssignmentName' => auth()->user()->displayName, + ] + ), + [], + $soldierA->user + ); + $this->sendNotification( + __('Exchange shift'), + __( + 'Shifts assignment notification of exchanging shifts for second soldier', + [ + 'soldierBName' => $soldierB->user->displayName, + 'shiftBName' => $shiftB->task->name, + 'shiftBStart' => $shiftB->start_date, + 'shiftBEnd' => $shiftB->end_date, + 'soldierAName' => $soldierA->user->displayName, + 'shiftAName' => $shiftA->task->name, + 'shiftAStart' => $shiftA->start_date, + 'shiftAEnd' => $shiftA->end_date, + 'shiftsAssignmentName' => auth()->user()->displayName, + ] + ), + [], + $soldierB->user + ); + $this->sendNotification( + __('Exchange shift'), + __( + 'Shifts assignment notification of exchanging shifts for commander', + [ + 'commanderName' => User::find($requesterId)->displayName, + 'shiftAName' => $shiftA->task->name, + 'soldierAName' => $soldierA->user->displayName, + 'shiftAStart' => $shiftA->start_date, + 'shiftAEnd' => $shiftA->end_date, + 'soldierBName' => $soldierB->user->displayName, + 'shiftBName' => $shiftB->task->name, + 'shiftBStart' => $shiftB->start_date, + 'shiftBEnd' => $shiftB->end_date, + 'shiftsAssignmentName' => auth()->user()->displayName, + ] + ), + [], + User::find($requesterId) + ); + $this->getShiftsAssignments() + ->filter(fn ($shiftsAssignment) => $shiftsAssignment->id !== auth()->user()->id) + ->map( + fn ($shiftsAssignment) => $this->sendNotification( + __('Exchange shift'), + __( + 'Shifts assignment notification of exchanging shifts for shifts assignment', + [ + 'shiftsAssignmentName' => $shiftsAssignment->displayName, + 'shiftAName' => $shiftA->task->name, + 'soldierAName' => $soldierA->user->displayName, + 'shiftAStart' => $shiftA->start_date, + 'shiftAEnd' => $shiftA->end_date, + 'soldierBName' => $soldierB->user->displayName, + 'shiftBName' => $shiftB->task->name, + 'shiftBStart' => $shiftB->start_date, + 'shiftBEnd' => $shiftB->end_date, + 'shiftsAssignment2Name' => auth()->user()->displayName, + ] + ), + [], + $shiftsAssignment + ) ); - } else { - $this->sendNotification( - __('Approve exchange shift request'), - __( - 'Commander notification of approving exchange shift request for the requesting soldier', + } + + protected function shiftAssignmentExchange($shiftAId, $shiftBId) + { + $changeAssignment = new ChangeAssignment($shiftAId); + $changeAssignment->exchange($shiftBId); + $this->dispatch('filament-fullcalendar--refresh'); + } + + protected function commanderConfirmExchange($soldierAId, $soldierBId, $shiftAId, $shiftBId) + { + $shiftA = Shift::find($shiftAId); + $shiftB = Shift::find($shiftBId); + $this->getShiftsAssignments() + ->map( + fn ($shiftsAssignment) => $this->sendNotification( + __('Request for shift exchange'), + __( + 'Request for shift exchange from shifts assignments', + [ + 'shiftsAssignmentName' => $shiftsAssignment->displayName, + 'soldierAName' => Soldier::find($soldierAId)->user->displayName, + 'shiftAName' => $shiftA->task->name, + 'shiftAStart' => $shiftA->start_date, + 'shiftAEnd' => $shiftA->end_date, + 'soldierBName' => Soldier::find($soldierBId)->user->displayName, + 'shiftBName' => $shiftB->task->name, + 'shiftBStart' => $shiftB->start_date, + 'shiftBEnd' => $shiftB->end_date, + ] + ), [ - 'requestingSoldierName' => $requestingSoldier->user->displayName, - 'shiftAName' => $shiftA->task->name, - 'shiftAStart' => $shiftA->start_date, - 'shiftAEnd' => $shiftA->end_date, - 'approvingSoldierName' => $approvingSoldier->user->displayName, - 'shiftBName' => $shiftB->task->name, - 'shiftBStart' => $shiftB->start_date, - 'shiftBEnd' => $shiftB->end_date, - 'commanderName' => $requestingSoldier->team->commander->user->displayName, - ] - ), - [], - $requestingSoldier->user + NotificationAction::make('confirm') + ->label(__('Confirm')) + ->color('success') + ->icon('heroicon-s-hand-thumb-up') + ->button() + ->dispatch('confirmExchange', [ + 'approverRole' => 'shifts-assignment', + 'soldierAId' => $shiftA->soldier_id, + 'soldierBId' => $shiftB->soldier_id, + 'shiftAId' => $shiftA->id, + 'shiftBId' => $shiftB->id, + 'requesterId' => auth()->user()->id, + ]) + ->close(), + NotificationAction::make('deny') + ->label(__('Deny')) + ->color('danger') + ->icon('heroicon-m-hand-thumb-down') + ->button() + ->dispatch('denyExchange', [ + 'rejectorRole' => 'shifts-assignment', + 'soldierAId' => $shiftA->soldier_id, + 'soldierBId' => $shiftB->soldier_id, + 'shiftAId' => $shiftA->id, + 'shiftBId' => $shiftB->id, + 'requesterId' => auth()->user()->id, + 'sendToSoldiers' => true, + ]) + ->close(), + ], + $shiftsAssignment, + $shiftA->id.'-'.$shiftB->id + ) ); - } } - protected function soldierConfirmExchange($requestingSoldier, $approvingSoldier, $shiftA, $shiftB) + protected function soldierConfirmExchange($soldierAId, $soldierBId, $shiftAId, $shiftBId) { - $requestingSoldier = Soldier::find($requestingSoldier); - $approvingSoldier = Soldier::find($approvingSoldier); - $shiftA = Shift::find($shiftA); - $shiftB = Shift::find($shiftB); - $commander = $requestingSoldier->team->commander->user; + $soldierA = Soldier::find($soldierAId); + $soldierB = Soldier::find($soldierBId); + $shiftA = Shift::find($shiftAId); + $shiftB = Shift::find($shiftBId); + $commander = $soldierA->team->commander->user; $this->sendNotification( __('Request for shift exchange'), __( 'Request for shift exchange from commander', [ 'commanderName' => $commander->displayName, - 'requestingSoldierName' => $requestingSoldier->user->displayName, + 'soldierAName' => $soldierA->user->displayName, 'shiftAName' => $shiftA->task->name, 'shiftAStart' => $shiftA->start_date, 'shiftAEnd' => $shiftA->end_date, - 'approvingSoldierName' => $approvingSoldier->user->displayName, + 'soldierBName' => $soldierB->user->displayName, 'shiftBName' => $shiftB->task->name, 'shiftBStart' => $shiftB->start_date, 'shiftBEnd' => $shiftB->end_date, @@ -126,11 +216,12 @@ protected function soldierConfirmExchange($requestingSoldier, $approvingSoldier, ->icon('heroicon-s-hand-thumb-up') ->button() ->dispatch('confirmExchange', [ - 'approverRole' => 'commander', - 'requestingSoldier' => $requestingSoldier->id, - 'approvingSoldier' => $approvingSoldier->id, - 'shiftA' => $shiftA->id, - 'shiftB' => $shiftB->id, + 'approverRole' => 'team-commander', + 'soldierAId' => $soldierA->id, + 'soldierBId' => $soldierB->id, + 'shiftAId' => $shiftA->id, + 'shiftBId' => $shiftB->id, + 'requesterId' => auth()->user()->id, ]) ->close(), NotificationAction::make('deny') @@ -139,11 +230,13 @@ protected function soldierConfirmExchange($requestingSoldier, $approvingSoldier, ->icon('heroicon-m-hand-thumb-down') ->button() ->dispatch('denyExchange', [ - 'rejectorRole' => 'commander', - 'requestingSoldier' => $requestingSoldier->id, - 'rejectingSoldier' => $approvingSoldier->id, - 'shiftA' => $shiftA->id, - 'shiftB' => $shiftB->id, + 'rejectorRole' => 'team-commander', + 'soldierAId' => $soldierA->id, + 'soldierBId' => $soldierB->id, + 'shiftAId' => $shiftA->id, + 'shiftBId' => $shiftB->id, + 'requesterId' => auth()->user()->id, + 'sendToSoldiers' => true, ]) ->close(), ], @@ -152,201 +245,368 @@ protected function soldierConfirmExchange($requestingSoldier, $approvingSoldier, } #[On('denyExchange')] - public function denyExchange($rejectorRole, $requestingSoldier, $rejectingSoldier, $shiftA, $shiftB): void + public function denyExchange($rejectorRole, $soldierAId, $soldierBId, $shiftAId, $shiftBId, $requesterId, $sendToSoldiers): void { - $this->denyExchangeByRole($rejectorRole, $requestingSoldier, $rejectingSoldier, $shiftA, $shiftB); + $this->denyExchangeByRole($rejectorRole, $soldierAId, $soldierBId, $shiftAId, $shiftBId, $requesterId, $sendToSoldiers); } - protected function denyExchangeByRole($rejectorRole, $requestingSoldier, $rejectingSoldier, $shiftA, $shiftB) + protected function denyExchangeByRole($rejectorRole, $soldierAId, $soldierBId, $shiftAId, $shiftBId, $requesterId, $sendToSoldiers) { - $rejectorRole ? - $this->commanderDenyExchange($requestingSoldier, $rejectingSoldier, $shiftA, $shiftB) : - $this->soldierDenyExchange($requestingSoldier, $rejectingSoldier, $shiftA, $shiftB); + match ($rejectorRole) { + 'shifts-assignment' => $this->shiftAssignmentDenyExchange($soldierAId, $soldierBId, $shiftAId, $shiftBId, $requesterId, $sendToSoldiers), + 'team-commander', 'department-commander' => $this->commanderDenyExchange($soldierAId, $soldierBId, $shiftAId, $shiftBId), + 'soldier' => $this->soldierDenyExchange($soldierAId, $soldierBId, $shiftAId, $shiftBId) + }; } - protected function commanderDenyExchange($requestingSoldier, $rejectingSoldier, $shiftA, $shiftB) + protected function shiftAssignmentDenyExchange($soldierAId, $soldierBId, $shiftAId, $shiftBId, $requesterId, $sendToSoldiers) { - $requestingSoldier = Soldier::find($requestingSoldier); - $rejectingSoldier = Soldier::find($rejectingSoldier); - $shiftA = Shift::find($shiftA); - $shiftB = Shift::find($shiftB); - if ($requestingSoldier->team->commander->id !== $rejectingSoldier->id) { + $soldierA = Soldier::find($soldierAId); + $soldierB = Soldier::find($soldierBId); + $shiftA = Shift::find($shiftAId); + $shiftB = Shift::find($shiftBId); + $this->deleteNonRelevantNotifications($shiftAId.'-'.$shiftBId); + if ($sendToSoldiers) { $this->sendNotification( __('Deny exchange shift request'), __( - 'Commander notification of rejection exchange shift request for the requesting soldier', + 'Shifts assignment notification of deny exchanging shifts for first soldier', [ - 'requestingSoldierName' => $requestingSoldier->user->displayName, + 'soldierAName' => $soldierA->user->displayName, 'shiftAName' => $shiftA->task->name, 'shiftAStart' => $shiftA->start_date, 'shiftAEnd' => $shiftA->end_date, - 'rejectingSoldierName' => $rejectingSoldier->user->displayName, 'shiftBName' => $shiftB->task->name, + 'soldierBName' => $soldierB->user->displayName, 'shiftBStart' => $shiftB->start_date, 'shiftBEnd' => $shiftB->end_date, - 'commanderName' => $requestingSoldier->team->commander->user->displayName, + 'shiftsAssignmentName' => auth()->user()->displayName, ] ), [], - $requestingSoldier->user + $soldierA->user ); $this->sendNotification( __('Deny exchange shift request'), __( - 'Commander notification of rejection exchange shift request for the rejection soldier', + 'Shifts assignment notification of deny exchanging shifts for second soldier', [ - 'rejectingSoldierName' => $rejectingSoldier->user->displayName, - 'requestingSoldierName' => $requestingSoldier->user->displayName, + 'soldierBName' => $soldierB->user->displayName, + 'soldierAName' => $soldierA->user->displayName, + 'shiftAName' => $shiftA->task->name, + 'shiftAStart' => $shiftA->start_date, + 'shiftAEnd' => $shiftA->end_date, 'shiftBName' => $shiftB->task->name, 'shiftBStart' => $shiftB->start_date, 'shiftBEnd' => $shiftB->end_date, + 'shiftsAssignmentName' => auth()->user()->displayName, + ] + ), + [], + $soldierB->user + ); + } + $this->sendNotification( + __('Deny exchange shift request'), + __( + 'Shifts assignment notification of deny exchanging shifts for commander', + [ + 'commanderName' => User::find($requesterId)->displayName, + 'shiftAName' => $shiftA->task->name, + 'soldierAName' => $soldierA->user->displayName, + 'shiftAStart' => $shiftA->start_date, + 'shiftAEnd' => $shiftA->end_date, + 'shiftBName' => $shiftB->task->name, + 'soldierBName' => $soldierB->user->displayName, + 'shiftBStart' => $shiftB->start_date, + 'shiftBEnd' => $shiftB->end_date, + 'shiftsAssignmentName' => auth()->user()->displayName, + ] + ), + [], + User::find($requesterId) + ); + $this->getShiftsAssignments() + ->filter(fn ($shiftsAssignment) => $shiftsAssignment->id !== auth()->user()->id) + ->map( + fn ($shiftsAssignment) => $this->sendNotification( + __('Deny exchange shift request'), + __( + 'Shifts assignment notification of deny exchanging shifts for shifts assignment', + [ + 'shiftsAssignmentName' => $shiftsAssignment->displayName, + 'shiftAName' => $shiftA->task->name, + 'soldierAName' => $soldierA->user->displayName, + 'shiftAStart' => $shiftA->start_date, + 'shiftAEnd' => $shiftA->end_date, + 'shiftBName' => $shiftB->task->name, + 'soldierBName' => $soldierB->user->displayName, + 'shiftBStart' => $shiftB->start_date, + 'shiftBEnd' => $shiftB->end_date, + 'shiftsAssignment2Name' => auth()->user()->displayName, + ] + ), + [], + $shiftsAssignment + ) + ); + } + + protected function commanderDenyExchange($soldierAId, $soldierBId, $shiftAId, $shiftBId) + { + $soldierA = Soldier::find($soldierAId); + $soldierB = Soldier::find($soldierBId); + $shiftA = Shift::find($shiftAId); + $shiftB = Shift::find($shiftBId); + if ($soldierA->team->commander->id !== $soldierB->id) { + $this->sendNotification( + __('Deny exchange shift request'), + __( + 'Commander notification of deny exchanging shifts for the first soldier', + [ + 'soldierAName' => $soldierA->user->displayName, 'shiftAName' => $shiftA->task->name, 'shiftAStart' => $shiftA->start_date, 'shiftAEnd' => $shiftA->end_date, - 'commanderName' => $requestingSoldier->team->commander->user->displayName, + 'soldierBName' => $soldierB->user->displayName, + 'shiftBName' => $shiftB->task->name, + 'shiftBStart' => $shiftB->start_date, + 'shiftBEnd' => $shiftB->end_date, + 'commanderName' => $soldierA->team->commander->user->displayName, ] ), [], - $rejectingSoldier->user + $soldierA->user + ); + $this->sendNotification( + __('Deny exchange shift request'), + __( + 'Commander notification of deny exchanging shifts for the second soldier', + [ + 'soldierBName' => $soldierB->user->displayName, + 'soldierAName' => $soldierA->user->displayName, + 'shiftBName' => $shiftB->task->name, + 'shiftBStart' => $shiftB->start_date, + 'shiftBEnd' => $shiftB->end_date, + 'shiftAName' => $shiftA->task->name, + 'shiftAStart' => $shiftA->start_date, + 'shiftAEnd' => $shiftA->end_date, + 'commanderName' => $soldierA->team->commander->user->displayName, + ] + ), + [], + $soldierB->user ); } else { $this->sendNotification( __('Deny exchange shift request'), __( - 'Commander notification of rejection exchange shift request for the requesting soldier', + 'Commander notification of deny exchanging shifts for the first soldier', [ - 'requestingSoldierName' => $requestingSoldier->user->displayName, + 'soldierAName' => $soldierA->user->displayName, 'shiftAName' => $shiftA->task->name, 'shiftAStart' => $shiftA->start_date, 'shiftAEnd' => $shiftA->end_date, - 'rejectingSoldierName' => $rejectingSoldier->user->displayName, + 'soldierBName' => $soldierB->user->displayName, 'shiftBName' => $shiftB->task->name, 'shiftBStart' => $shiftB->start_date, 'shiftBEnd' => $shiftB->end_date, - 'commanderName' => $requestingSoldier->team->commander->user->displayName, + 'commanderName' => $soldierA->team->commander->user->displayName, ] ), [], - $requestingSoldier->user + $soldierA->user ); } } - protected function soldierDenyExchange($requestingSoldier, $rejectingSoldier, $shiftA, $shiftB) + protected function soldierDenyExchange($soldierAId, $soldierBId, $shiftAId, $shiftBId) { - $requestingSoldier = Soldier::find($requestingSoldier); - $rejectingSoldier = Soldier::find($rejectingSoldier); - $shiftA = Shift::find($shiftA); - $shiftB = Shift::find($shiftB); + $soldierA = Soldier::find($soldierAId); + $soldierB = Soldier::find($soldierBId); + $shiftA = Shift::find($shiftAId); + $shiftB = Shift::find($shiftBId); $this->sendNotification( __('Deny exchange shift request'), __( - 'Soldier notification of rejection exchange shift request', + 'Soldier notification of deny exchange shift request', [ - 'requestingSoldierName' => $requestingSoldier->user->displayName, + 'soldierAName' => $soldierA->user->displayName, 'shiftBName' => $shiftB->task->name, 'shiftBStart' => $shiftB->start_date, 'shiftBEnd' => $shiftB->end_date, 'shiftAName' => $shiftA->task->name, 'shiftAStart' => $shiftA->start_date, 'shiftAEnd' => $shiftA->end_date, - 'rejectingSoldierName' => $rejectingSoldier->user->displayName, + 'soldierBName' => $soldierB->user->displayName, ] ), [], - $requestingSoldier->user + $soldierA->user ); } #[On('confirmChange')] - public function confirmChange($approverRole, $shift, $soldierId) + public function confirmChange($approverRole, $shiftId, $soldierId, $requesterId) { - $this->confirmChangeByRole($approverRole, $shift, $soldierId); + $this->confirmChangeByRole($approverRole, $shiftId, $soldierId, $requesterId); } - protected function confirmChangeByRole($approverRole, $shift, $soldierId) + protected function confirmChangeByRole($approverRole, $shiftId, $soldierId, $requesterId) { - $approverRole ? - $this->commanderConfirmChange($shift, $soldierId) : - $this->soldierConfirmChange($shift, $soldierId); + match ($approverRole) { + 'shifts-assignment' => $this->shiftAssignmentConfirmChange($shiftId, $soldierId, $requesterId), + 'team-commander', 'department-commander' => $this->commanderConfirmChange($shiftId, $soldierId), + 'soldier' => $this->soldierConfirmChange($shiftId, $soldierId) + }; } - protected function commanderConfirmChange($shift, $soldierId) + protected function shiftAssignmentConfirmChange($shiftId, $soldierId, $requesterId) { - $shift = Shift::find($shift); - $requestingSoldier = Soldier::find($shift->soldier_id); - $approvingSoldier = Soldier::find($soldierId); - Shift::where('id', $shift->id)->update(['soldier_id' => $soldierId]); $this->dispatch('filament-fullcalendar--refresh'); - if ($requestingSoldier->team->commander->id !== $approvingSoldier->id) { - $this->sendNotification( - __('Approve change shift request'), - __( - 'Commander notification of approving change shift request for the requesting soldier', - [ - 'requestingSoldierName' => $requestingSoldier->user->displayName, - 'shiftName' => $shift->task->name, - 'shiftStart' => $shift->start_date, - 'shiftEnd' => $shift->end_date, - 'commanderName' => $requestingSoldier->team->commander->user->displayName, - ] - ), - [], - $requestingSoldier->user - ); - $this->sendNotification( - __('Approve change shift request'), - __( - 'Commander notification of approving change shift request for the approving soldier', - [ - 'approvingSoldierName' => $approvingSoldier->user->displayName, - 'requestingSoldierName' => $requestingSoldier->user->displayName, - 'shiftName' => $shift->task->name, - 'shiftStart' => $shift->start_date, - 'shiftEnd' => $shift->end_date, - 'commanderName' => $requestingSoldier->team->commander->user->displayName, - ] - ), - [], - $approvingSoldier->user + $shift = Shift::find($shiftId); + $soldierA = Soldier::find($shift->soldier_id); + $soldierB = Soldier::find($soldierId); + $this->deleteNonRelevantNotifications($shiftId.'-'.$shift->soldier_id.'-'.$soldierId); + Shift::where('id', $shiftId)->update(['soldier_id' => $soldierId]); + $this->sendNotification( + __('Change shift'), + __( + 'Shifts assignment notification of changing shifts for first soldier', + [ + 'soldierName' => $soldierA->user->displayName, + 'shiftName' => $shift->task->name, + 'shiftStart' => $shift->start_date, + 'shiftEnd' => $shift->end_date, + 'shiftsAssignmentName' => auth()->user()->displayName, + ] + ), + [], + $soldierA->user + ); + $this->sendNotification( + __('Change shift'), + __( + 'Shifts assignment notification of changing shifts for second soldier', + [ + 'soldierName' => $soldierB->user->displayName, + 'shiftName' => $shift->task->name, + 'shiftStart' => $shift->start_date, + 'shiftEnd' => $shift->end_date, + 'shiftsAssignmentName' => auth()->user()->displayName, + ] + ), + [], + $soldierB->user + ); + $this->sendNotification( + __('Change shift'), + __( + 'Shifts assignment notification of changing shifts for commander', + [ + 'commanderName' => User::find($requesterId)->displayName, + 'shiftName' => $shift->task->name, + 'soldierAName' => $soldierA->user->displayName, + 'shiftStart' => $shift->start_date, + 'shiftEnd' => $shift->end_date, + 'soldierBName' => $soldierB->user->displayName, + 'shiftsAssignmentName' => auth()->user()->displayName, + ] + ), + [], + User::find($requesterId) + ); + $this->getShiftsAssignments() + ->filter(fn ($shiftsAssignment) => $shiftsAssignment->id !== auth()->user()->id) + ->map( + fn ($shiftsAssignment) => $this->sendNotification( + __('Change shift'), + __( + 'Shifts assignment notification of changing shifts for shifts assignment', + [ + 'shiftsAssignmentName' => $shiftsAssignment->displayName, + 'shiftName' => $shift->task->name, + 'soldierAName' => $soldierA->user->displayName, + 'shiftStart' => $shift->start_date, + 'shiftEnd' => $shift->end_date, + 'soldierBName' => $soldierB->user->displayName, + 'shiftsAssignment2Name' => auth()->user()->displayName, + ] + ), + [], + $shiftsAssignment + ) ); - } else { - $this->sendNotification( - __('Approve change shift request'), - __( - 'Commander notification of approving change shift request for the requesting soldier', + } + + protected function commanderConfirmChange($shiftId, $soldierId) + { + $shift = Shift::find($shiftId); + $this->getShiftsAssignments() + ->map( + fn ($shiftsAssignment) => $this->sendNotification( + __('Request for shift change'), + __( + 'Request for shift change from shifts assignments', + [ + 'shiftsAssignmentName' => $shiftsAssignment->displayName, + 'shiftName' => $shift->task->name, + 'soldierAName' => Soldier::find($shift->soldier_id)->user->displayName, + 'shiftStart' => $shift->start_date, + 'shiftEnd' => $shift->end_date, + 'soldierBName' => Soldier::find($soldierId)->user->displayName, + ] + ), [ - 'requestingSoldierName' => $requestingSoldier->user->displayName, - 'shiftName' => $shift->task->name, - 'shiftStart' => $shift->start_date, - 'shiftEnd' => $shift->end_date, - 'commanderName' => $requestingSoldier->team->commander->user->displayName, - ] - ), - [], - $requestingSoldier->user + NotificationAction::make('confirm') + ->label(__('Confirm')) + ->color('success') + ->icon('heroicon-s-hand-thumb-up') + ->button() + ->dispatch('confirmChange', [ + 'approverRole' => 'shifts-assignment', + 'shiftId' => $shift->id, + 'soldierId' => $soldierId, + 'requesterId' => auth()->user()->id, + ]) + ->close(), + NotificationAction::make('deny') + ->label(__('Deny')) + ->color('danger') + ->icon('heroicon-m-hand-thumb-down') + ->button() + ->dispatch('denyChange', [ + 'rejectorRole' => 'shifts-assignment', + 'shiftId' => $shift->id, + 'soldierId' => $soldierId, + 'requesterId' => auth()->user()->id, + 'sendToSoldiers' => true, + ]) + ->close(), + ], + $shiftsAssignment, + $shift->id.'-'.$shift->soldier_id.'-'.$soldierId + ) ); - } } - protected function soldierConfirmChange($shift, $soldierId) + protected function soldierConfirmChange($shiftId, $soldierId) { - $shift = Shift::find($shift); - $requestingSoldier = Soldier::find($shift->soldier_id); - $approvingSoldier = Soldier::find($soldierId); - - $commander = $requestingSoldier->team->commander->user; + $shift = Shift::find($shiftId); + $soldierA = Soldier::find($shift->soldier_id); + $soldierB = Soldier::find($soldierId); + $commander = $soldierA->team->commander->user; $this->sendNotification( __('Request for shift change'), __( 'Request for shift change from commander', [ 'commanderName' => $commander->displayName, - 'requestingSoldierName' => $requestingSoldier->user->displayName, + 'soldierAName' => $soldierA->user->displayName, 'shiftName' => $shift->task->name, 'shiftStart' => $shift->start_date, 'shiftEnd' => $shift->end_date, - 'approvingSoldierName' => $approvingSoldier->user->displayName, + 'soldierBName' => $soldierB->user->displayName, ] ), [ @@ -356,9 +616,10 @@ protected function soldierConfirmChange($shift, $soldierId) ->icon('heroicon-s-hand-thumb-up') ->button() ->dispatch('confirmChange', [ - 'approverRole' => 'commander', - 'shift' => $shift->id, + 'approverRole' => 'team-commander', + 'shiftId' => $shift->id, 'soldierId' => $soldierId, + 'requesterId' => auth()->user()->id, ]) ->close(), NotificationAction::make('deny') @@ -367,9 +628,11 @@ protected function soldierConfirmChange($shift, $soldierId) ->icon('heroicon-m-hand-thumb-down') ->button() ->dispatch('denyChange', [ - 'rejectorRole' => 'commander', - 'shift' => $shift->id, + 'rejectorRole' => 'team-commander', + 'shiftId' => $shift->id, 'soldierId' => $soldierId, + 'requesterId' => auth()->user()->id, + 'sendToSoldiers' => true, ]) ->close(), ], @@ -378,109 +641,202 @@ protected function soldierConfirmChange($shift, $soldierId) } #[On('denyChange')] - public function denyChange($rejectorRole, $shift, $soldierId): void + public function denyChange($rejectorRole, $shiftId, $soldierId, $requesterId, $sendToSoldiers): void { - $this->denyChangeByRole($rejectorRole, $shift, $soldierId); + $this->denyChangeByRole($rejectorRole, $shiftId, $soldierId, $requesterId, $sendToSoldiers); } - protected function denyChangeByRole($rejectorRole, $shift, $soldierId) + protected function denyChangeByRole($rejectorRole, $shiftId, $soldierId, $requesterId, $sendToSoldiers) { - $rejectorRole ? - $this->commanderDenyChange($shift, $soldierId) : - $this->soldierDenyChange($shift, $soldierId); + match ($rejectorRole) { + 'shifts-assignment' => $this->shiftAssignmentDenyChange($shiftId, $soldierId, $requesterId, $sendToSoldiers), + 'team-commander', 'department-commander' => $this->commanderDenyChange($shiftId, $soldierId), + 'soldier' => $this->soldierDenyChange($shiftId, $soldierId) + }; } - protected function commanderDenyChange($shift, $soldierId) + protected function shiftAssignmentDenyChange($shiftId, $soldierId, $requesterId, $sendToSoldiers) { - $shift = Shift::find($shift); - $requestingSoldier = Soldier::find($shift->soldier_id); - $approvingSoldier = Soldier::find($soldierId); - if ($requestingSoldier->team->commander->id !== $approvingSoldier->id) { + $shift = Shift::find($shiftId); + $soldierA = Soldier::find($shift->soldier_id); + $soldierB = Soldier::find($soldierId); + $this->deleteNonRelevantNotifications($shiftId.'-'.$shift->soldier_id.'-'.$soldierId); + if ($sendToSoldiers) { $this->sendNotification( __('Deny change shift request'), __( - 'Commander notification of rejection change shift request for the requesting soldier', + 'Shifts assignment notification of deny changing shifts for first soldier', [ - 'requestingSoldierName' => $requestingSoldier->user->displayName, + 'soldierAName' => $soldierA->user->displayName, 'shiftName' => $shift->task->name, 'shiftStart' => $shift->start_date, 'shiftEnd' => $shift->end_date, - 'approvingSoldierName' => $approvingSoldier->user->displayName, - 'commanderName' => $requestingSoldier->team->commander->user->displayName, + 'soldierBName' => $soldierB->user->displayName, + 'shiftsAssignmentName' => auth()->user()->displayName, ] ), [], - $requestingSoldier->user + $soldierA->user ); $this->sendNotification( __('Deny change shift request'), __( - 'Commander notification of rejection change shift request for the approving soldier', + 'Shifts assignment notification of deny changing shifts for second soldier', [ - 'approvingSoldierName' => $approvingSoldier->user->displayName, - 'requestingSoldierName' => $requestingSoldier->user->displayName, + 'soldierBName' => $soldierB->user->displayName, + 'soldierAName' => $soldierA->user->displayName, 'shiftName' => $shift->task->name, 'shiftStart' => $shift->start_date, 'shiftEnd' => $shift->end_date, - 'commanderName' => $requestingSoldier->team->commander->user->displayName, + 'shiftsAssignmentName' => auth()->user()->displayName, ] ), [], - $approvingSoldier->user + $soldierB->user + ); + } + $this->sendNotification( + __('Deny change shift request'), + __( + 'Shifts assignment notification of deny changing shifts for commander', + [ + 'commanderName' => User::find($requesterId)->displayName, + 'shiftName' => $shift->task->name, + 'soldierAName' => $soldierA->user->displayName, + 'shiftStart' => $shift->start_date, + 'shiftEnd' => $shift->end_date, + 'soldierBName' => $soldierB->user->displayName, + 'shiftsAssignmentName' => auth()->user()->displayName, + ] + ), + [], + User::find($requesterId) + ); + $this->getShiftsAssignments() + ->filter(fn ($shiftsAssignment) => $shiftsAssignment->id !== auth()->user()->id) + ->map( + fn ($shiftsAssignment) => $this->sendNotification( + __('Deny change shift request'), + __( + 'Shifts assignment notification of deny changing shifts for shifts assignment', + [ + 'shiftsAssignmentName' => $shiftsAssignment->displayName, + 'shiftName' => $shift->task->name, + 'soldierAName' => $soldierA->user->displayName, + 'shiftStart' => $shift->start_date, + 'shiftEnd' => $shift->end_date, + 'soldierBName' => $soldierB->user->displayName, + 'shiftsAssignment2Name' => auth()->user()->displayName, + ] + ), + [], + $shiftsAssignment + ) + ); + } + + protected function commanderDenyChange($shiftId, $soldierId) + { + $shift = Shift::find($shiftId); + $soldierA = Soldier::find($shift->soldier_id); + $soldierB = Soldier::find($soldierId); + if ($soldierA->team->commander->id !== $soldierB->id) { + $this->sendNotification( + __('Deny change shift request'), + __( + 'Commander notification of deny changing shift request for the first soldier', + [ + 'soldierAName' => $soldierA->user->displayName, + 'shiftName' => $shift->task->name, + 'shiftStart' => $shift->start_date, + 'shiftEnd' => $shift->end_date, + 'soldierBName' => $soldierB->user->displayName, + 'commanderName' => $soldierA->team->commander->user->displayName, + ] + ), + [], + $soldierA->user + ); + $this->sendNotification( + __('Deny change shift request'), + __( + 'Commander notification of deny changing shift request for the second soldier', + [ + 'soldierBName' => $soldierB->user->displayName, + 'soldierAName' => $soldierA->user->displayName, + 'shiftName' => $shift->task->name, + 'shiftStart' => $shift->start_date, + 'shiftEnd' => $shift->end_date, + 'commanderName' => $soldierA->team->commander->user->displayName, + ] + ), + [], + $soldierB->user ); } else { $this->sendNotification( __('Deny change shift request'), __( - 'Commander notification of rejection change shift request for the requesting soldier', + 'Commander notification of deny changing shift request for the first soldier', [ - 'requestingSoldierName' => $requestingSoldier->user->displayName, + 'soldierAName' => $soldierA->user->displayName, 'shiftName' => $shift->task->name, 'shiftStart' => $shift->start_date, 'shiftEnd' => $shift->end_date, - 'approvingSoldierName' => $approvingSoldier->user->displayName, - 'commanderName' => $requestingSoldier->team->commander->user->displayName, + 'soldierBName' => $soldierB->user->displayName, + 'commanderName' => $soldierA->team->commander->user->displayName, ] ), [], - $requestingSoldier->user + $soldierA->user ); } } - protected function soldierDenyChange($shift, $soldierId) + protected function soldierDenyChange($shiftId, $soldierId) { - $shift = Shift::find($shift); - $requestingSoldier = Soldier::find($shift->soldier_id); - $rejectingSoldier = Soldier::find($soldierId); + $shift = Shift::find($shiftId); + $soldierA = Soldier::find($shift->soldier_id); + $soldierB = Soldier::find($soldierId); $this->sendNotification( __('Deny change shift request'), __( - 'Soldier notification of rejection change shift request', + 'Soldier notification of deny changing shift request', [ - 'requestingSoldierName' => $requestingSoldier->user->displayName, + 'soldierAName' => $soldierA->user->displayName, 'shiftName' => $shift->task->name, 'shiftStart' => $shift->start_date, 'shiftEnd' => $shift->end_date, - 'rejectingSoldierName' => $rejectingSoldier->user->displayName, + 'soldierBName' => $soldierB->user->displayName, ] ), [], - $requestingSoldier->user + $soldierA->user ); } - protected function sendNotification($title, $body, $actions, $user) + protected function deleteNonRelevantNotifications($commonKey) + { + \DB::table('notifications') + ->where('data->commonKey', $commonKey) + ->delete(); + } + + protected static function getShiftsAssignments() + { + return User::whereHas('roles', function ($query) { + $query->where('name', 'shifts-assignment'); + })->get(); + } + + protected function sendNotification($title, $body, $actions, $user, $commonKey = null) { - Notification::make() + MyNotification::make() + ->commonKey($commonKey) ->title($title) ->persistent() - ->body( - $body - ) - ->actions( - $actions - ) + ->body($body) + ->actions($actions) ->sendToDatabase($user, true); } } diff --git a/app/Models/Constraint.php b/app/Models/Constraint.php index 8abbe32..fc77d91 100644 --- a/app/Models/Constraint.php +++ b/app/Models/Constraint.php @@ -15,6 +15,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; +use Illuminate\Support\Facades\DB; class Constraint extends Model { @@ -86,13 +87,14 @@ private static function availableOptions($startDate, $endDate): array unset($options[ConstraintType::LOW_PRIORITY_NOT_WEEKEND->value]); } $usedCounts = self::getUsedCountsForCurrentMonth($startDate, $endDate); - $limits = Soldier::where('id', auth()->user()->userable_id)->pluck('constraints_limit')->first() + $limits =Soldier::where('id', auth()->user()->userable_id)->pluck('constraints_limit')->first() ? Soldier::where('id', auth()->user()->userable_id)->pluck('constraints_limit')->first() : ConstraintType::getLimit(); $constraintsWithinLimit = []; foreach ($options as $constraint => $label) { $used = $usedCounts[$constraint] ?? 0; $limit = $limits[$constraint] ?? 0; + if ($limit === 0 || $used < $limit) { $constraintsWithinLimit[$constraint] = $label; } @@ -109,7 +111,6 @@ public static function getAvailableOptions($startDate, $endDate): array private static function getUsedCountsForCurrentMonth($startDate, $endDate): array { - foreach (ConstraintType::cases() as $enum) { $usedCount = Constraint::where('soldier_id', auth()->user()->userable_id) ->where('constraint_type', $enum->value) diff --git a/app/Models/Shift.php b/app/Models/Shift.php index 2a75ad0..1003bed 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -3,6 +3,7 @@ namespace App\Models; use App\Casts\Integer; +use App\Filament\Notifications\MyNotification; use App\Services\ChangeAssignment; use App\Services\ManualAssignment; use Cache; @@ -19,7 +20,6 @@ use Filament\Forms\Components\ToggleButtons; use Filament\Forms\Get; use Filament\Notifications\Actions\Action as NotificationAction; -use Filament\Notifications\Notification; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; @@ -82,9 +82,7 @@ public static function getSchema(): array ->options( fn (?Shift $shift) => self::getOptions($shift) ) - ->afterStateUpdated(function (callable $set) { - $set('soldier_id', null); - }), + ->afterStateUpdated(fn (callable $set) => $set('soldier_id', null)), Select::make('soldier_id') ->label(__('Soldier assignment')) ->options( @@ -169,7 +167,7 @@ protected static function getOptions($shift): array ->put('me', __('Me')) ->toArray(); } - if (current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) != 'manager' || current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) != 'shifts-assignment') { + if (current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) != 'manager' && current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) != 'shifts-assignment') { return collect($options) ->put('my_soldiers', __('My Soldiers')) ->toArray(); @@ -237,7 +235,7 @@ function ($shift) { ) ->extraModalFooterActions(function (Action $action) { return [ - $action->makeExtraModalAction('exchange', ['exchange' => true]) + $action->makeExtraModalAction('exchange', ['exchange' => true, 'role' => auth()->user()->getRoleNames()]) ->label(__('Exchange assignment')) ->icon('heroicon-s-arrow-path') ->color('primary') @@ -254,7 +252,9 @@ function ($shift) { ->action(function (array $data, array $arguments, Model $record, Component $livewire): void { session()->put('selected_shift', false); if ($arguments['exchange'] ?? false) { - self::commanderExchange($record, Shift::find($data['selected_shift'])); + collect($arguments['role'])->contains('shifts-assignment') ? + self::shiftsAssignmentExchange($record, Shift::find($data['selected_shift'])) : + self::commanderExchange($record, Shift::find($data['selected_shift'])); $livewire->dispatch('filament-fullcalendar--refresh'); } if ($arguments['request'] ?? false) { @@ -267,77 +267,136 @@ function ($shift) { }); } - protected static function commanderExchange($record, $shift) + protected static function shiftsAssignmentExchange($record, $shift) { - self::sendExchangeNotifications($record, $shift); + self::shiftsAssignmentSendExchangeNotifications($record, $shift); $changeAssignment = new ChangeAssignment($record); $changeAssignment->exchange($shift); } - protected static function sendExchangeNotifications($shiftA, $shiftB) + protected static function shiftsAssignmentSendExchangeNotifications($shiftA, $shiftB) { $soldierA = Soldier::find($shiftA->soldier_id); $soldierB = Soldier::find($shiftB->soldier_id); - if ($soldierA->id !== auth()->user()->userable_id) { - self::sendNotification( - __('Exchange shift'), - __( - 'Commander notification of exchanging shifts for first soldier', - [ - 'soldierAName' => $soldierA->user->displayName, - 'shiftAName' => $shiftA->task->name, - 'shiftAStart' => $shiftA->start_date, - 'shiftAEnd' => $shiftA->end_date, - 'soldierBName' => $soldierB->user->displayName, - 'shiftBName' => $shiftB->task->name, - 'shiftBStart' => $shiftB->start_date, - 'shiftBEnd' => $shiftB->end_date, - 'commander' => auth()->user()->displayName, - ] - ), - [], - $soldierA->user - ); - self::sendNotification( - __('Exchange shift'), - __( - 'Commander notification of exchanging shifts for second soldier', - [ - 'soldierBName' => $soldierB->user->displayName, - 'shiftBName' => $shiftB->task->name, - 'shiftBStart' => $shiftB->start_date, - 'shiftBEnd' => $shiftB->end_date, - 'soldierAName' => $soldierA->user->displayName, - 'shiftAName' => $shiftA->task->name, - 'shiftAStart' => $shiftA->start_date, - 'shiftAEnd' => $shiftA->end_date, - 'commander' => auth()->user()->displayName, - ] - ), - [], - $soldierB->user + self::sendNotification( + __('Exchange shift'), + __( + 'Shifts assignment notification of exchanging shifts for first soldier', + [ + 'soldierAName' => $soldierA->user->displayName, + 'shiftAName' => $shiftA->task->name, + 'shiftAStart' => $shiftA->start_date, + 'shiftAEnd' => $shiftA->end_date, + 'soldierBName' => $soldierB->user->displayName, + 'shiftBName' => $shiftB->task->name, + 'shiftBStart' => $shiftB->start_date, + 'shiftBEnd' => $shiftB->end_date, + 'shiftsAssignmentName' => auth()->user()->displayName, + ] + ), + [], + $soldierA->user + ); + self::sendNotification( + __('Exchange shift'), + __( + 'Shifts assignment notification of exchanging shifts for second soldier', + [ + 'soldierBName' => $soldierB->user->displayName, + 'shiftBName' => $shiftB->task->name, + 'shiftBStart' => $shiftB->start_date, + 'shiftBEnd' => $shiftB->end_date, + 'soldierAName' => $soldierA->user->displayName, + 'shiftAName' => $shiftA->task->name, + 'shiftAStart' => $shiftA->start_date, + 'shiftAEnd' => $shiftA->end_date, + 'shiftsAssignmentName' => auth()->user()->displayName, + ] + ), + [], + $soldierB->user + ); + self::getShiftsAssignments() + ->filter(fn ($shiftsAssignment) => $shiftsAssignment->id !== auth()->user()->id) + ->map( + fn ($shiftsAssignment) => self::sendNotification( + __('Exchange shift'), + __( + 'Shifts assignment notification of exchanging shifts for shifts assignment', + [ + 'shiftsAssignmentName' => $shiftsAssignment->displayName, + 'shiftAName' => $shiftA->task->name, + 'soldierAName' => $soldierA->user->displayName, + 'shiftAStart' => $shiftA->start_date, + 'shiftAEnd' => $shiftA->end_date, + 'soldierBName' => $soldierB->user->displayName, + 'shiftBName' => $shiftB->task->name, + 'shiftBStart' => $shiftB->start_date, + 'shiftBEnd' => $shiftB->end_date, + 'shiftsAssignment2Name' => auth()->user()->displayName, + ] + ), + [], + $shiftsAssignment + ) ); - } else { - self::sendNotification( - __('Exchange shift'), - __( - 'Commander notification of exchanging shifts for second soldier', + } + + protected static function commanderExchange($record, $shift) + { + self::getShiftsAssignments() + ->map( + fn ($shiftsAssignment) => self::sendNotification( + __('Request for shift exchange'), + __( + 'Request for shift exchange from shifts assignments', + [ + 'shiftsAssignmentName' => $shiftsAssignment->displayName, + 'soldierAName' => Soldier::find($record->soldier_id)->user->displayName, + 'shiftAName' => $record->task->name, + 'shiftAStart' => $record->start_date, + 'shiftAEnd' => $record->end_date, + 'soldierBName' => Soldier::find($shift->soldier_id)->user->displayName, + 'shiftBName' => $shift->task->name, + 'shiftBStart' => $shift->start_date, + 'shiftBEnd' => $shift->end_date, + ] + ), [ - 'soldierBName' => $soldierB->user->displayName, - 'shiftBName' => $shiftB->task->name, - 'shiftBStart' => $shiftB->start_date, - 'shiftBEnd' => $shiftB->end_date, - 'soldierAName' => $soldierA->user->displayName, - 'shiftAName' => $shiftA->task->name, - 'shiftAStart' => $shiftA->start_date, - 'shiftAEnd' => $shiftA->end_date, - 'commander' => auth()->user()->displayName, - ] - ), - [], - $soldierB->user + NotificationAction::make('confirm') + ->label(__('Confirm')) + ->color('success') + ->icon('heroicon-s-hand-thumb-up') + ->button() + ->dispatch('confirmExchange', [ + 'approverRole' => 'shifts-assignment', + 'soldierAId' => $record->soldier_id, + 'soldierBId' => $shift->soldier_id, + 'shiftAId' => $record->id, + 'shiftBId' => $shift->id, + 'requesterId' => auth()->user()->id, + ]) + ->close(), + NotificationAction::make('deny') + ->label(__('Deny')) + ->color('danger') + ->icon('heroicon-m-hand-thumb-down') + ->button() + ->dispatch('denyExchange', [ + 'rejectorRole' => 'shifts-assignment', + 'soldierAId' => $record->soldier_id, + 'soldierBId' => $shift->soldier_id, + 'shiftAId' => $record->id, + 'shiftBId' => $shift->id, + 'requesterId' => auth()->user()->id, + 'sendToSoldiers' => false, + ]) + ->close(), + ], + $shiftsAssignment, + $record->id.'-'.$shift->id + ) ); - } } protected static function soldierExchange($record, $shift) @@ -366,10 +425,11 @@ protected static function soldierExchange($record, $shift) ->button() ->dispatch('confirmExchange', [ 'approverRole' => current(array_diff(collect(Soldier::find($shift->soldier_id)->user->getRoleNames())->toArray(), ['soldier'])), - 'requestingSoldier' => $record->soldier_id, - 'approvingSoldier' => $shift->soldier_id, - 'shiftA' => $record->id, - 'shiftB' => $shift->id, + 'soldierAId' => $record->soldier_id, + 'soldierBId' => $shift->soldier_id, + 'shiftAId' => $record->id, + 'shiftBId' => $shift->id, + 'requesterId' => null, ]) ->close(), NotificationAction::make('deny') @@ -379,10 +439,12 @@ protected static function soldierExchange($record, $shift) ->button() ->dispatch('denyExchange', [ 'rejectorRole' => current(array_diff(collect(Soldier::find($shift->soldier_id)->user->getRoleNames())->toArray(), ['soldier'])), - 'requestingSoldier' => $record->soldier_id, - 'rejectingSoldier' => $shift->soldier_id, - 'shiftA' => $record->id, - 'shiftB' => $shift->id, + 'soldierAId' => $record->soldier_id, + 'soldierBId' => $shift->soldier_id, + 'shiftAId' => $record->id, + 'shiftBId' => $shift->id, + 'requesterId' => null, + 'sendToSoldiers' => true, ]) ->close(), ], @@ -461,7 +523,7 @@ function ($record) use (&$soldiers) { ->extraModalFooterActions( function (Action $action): array { return [ - $action->makeExtraModalAction('change', ['change' => true]) + $action->makeExtraModalAction('change', ['change' => true, 'role' => auth()->user()->getRoleNames()]) ->label(__('Change assignment')) ->icon('heroicon-o-arrow-uturn-up') ->color('primary') @@ -479,7 +541,10 @@ function (Action $action): array { ->action(function (array $data, array $arguments, Model $record, Component $livewire): void { session()->put('selected_soldier', false); if ($arguments['change'] ?? false) { - self::commanderChange($record, $data['soldier']); + collect($arguments['role'])->contains('shifts-assignment') ? + self::shiftsAssignmentChange($record, $data['soldier']) : + self::commanderChange($record, $data['soldier']); + $livewire->dispatch('filament-fullcalendar--refresh'); } if ($arguments['request'] ?? false) { @@ -492,63 +557,117 @@ function (Action $action): array { }); } - protected static function commanderChange($shift, $soldierId) + protected static function shiftsAssignmentChange($shift, $soldierId) { - self::sendChangeNotifications($shift, $soldierId); + self::shiftsAssignmentSendChangeNotifications($shift, $soldierId); Shift::where('id', $shift->id)->update(['soldier_id' => $soldierId]); } - protected static function sendChangeNotifications($shift, $soldierId) + protected static function shiftsAssignmentSendChangeNotifications($shift, $soldierId) { - $soldier = Soldier::find($soldierId); - if ($shift->soldier_id !== auth()->user()->userable_id) { - self::sendNotification( - __('Change assignment'), - __( - 'Commander notification of changing shifts for first soldier', - [ - 'soldierName' => $soldier->user->displayName, - 'shiftName' => $shift->task->name, - 'shiftStart' => $shift->start_date, - 'shiftEnd' => $shift->end_date, - 'commander' => auth()->user()->displayName, - ] - ), - [], - $soldier->user - ); - self::sendNotification( - __('Change assignment'), - __( - 'Commander notification of changing shifts for second soldier', - [ - 'soldierName' => Soldier::find($shift->soldier_id)->user->displayName, - 'shiftName' => $shift->task->name, - 'shiftStart' => $shift->start_date, - 'shiftEnd' => $shift->end_date, - 'commander' => auth()->user()->displayName, - ] - ), - [], - Soldier::find($shift->soldier_id)->user + $soldierA = Soldier::find($shift->soldier_id); + $soldierB = Soldier::find($soldierId); + self::sendNotification( + __('Change shift'), + __( + 'Shifts assignment notification of changing shifts for first soldier', + [ + 'soldierName' => $soldierA->user->displayName, + 'shiftName' => $shift->task->name, + 'shiftStart' => $shift->start_date, + 'shiftEnd' => $shift->end_date, + 'shiftsAssignmentName' => auth()->user()->displayName, + ] + ), + [], + $soldierA->user + ); + self::sendNotification( + __('Change shift'), + __( + 'Shifts assignment notification of changing shifts for second soldier', + [ + 'soldierName' => $soldierB->user->displayName, + 'shiftName' => $shift->task->name, + 'shiftStart' => $shift->start_date, + 'shiftEnd' => $shift->end_date, + 'shiftsAssignmentName' => auth()->user()->displayName, + ] + ), + [], + $soldierB->user + ); + self::getShiftsAssignments() + ->filter(fn ($shiftsAssignment) => $shiftsAssignment->id !== auth()->user()->id) + ->map( + fn ($shiftsAssignment) => self::sendNotification( + __('Change shift'), + __( + 'Shifts assignment notification of changing shifts for shifts assignment', + [ + 'shiftsAssignmentName' => $shiftsAssignment->displayName, + 'shiftName' => $shift->task->name, + 'soldierAName' => $soldierA->user->displayName, + 'shiftStart' => $shift->start_date, + 'shiftEnd' => $shift->end_date, + 'soldierBName' => $soldierB->user->displayName, + 'shiftsAssignment2Name' => auth()->user()->displayName, + ] + ), + [], + $shiftsAssignment + ) ); - } else { - self::sendNotification( - __('Change assignment'), - __( - 'Commander notification of changing shifts for first soldier', + } + + protected static function commanderChange($shift, $soldierId) + { + self::getShiftsAssignments() + ->map( + fn ($shiftsAssignment) => self::sendNotification( + __('Request for shift change'), + __( + 'Request for shift change from shifts assignments', + [ + 'shiftsAssignmentName' => $shiftsAssignment->displayName, + 'shiftName' => $shift->task->name, + 'soldierAName' => Soldier::find($shift->soldier_id)->user->displayName, + 'shiftStart' => $shift->start_date, + 'shiftEnd' => $shift->end_date, + 'soldierBName' => Soldier::find($soldierId)->user->displayName, + ] + ), [ - 'soldierName' => $soldier->user->displayName, - 'shiftName' => $shift->task->name, - 'shiftStart' => $shift->start_date, - 'shiftEnd' => $shift->end_date, - 'commander' => auth()->user()->displayName, - ] - ), - [], - $soldier->user + NotificationAction::make('confirm') + ->label(__('Confirm')) + ->color('success') + ->icon('heroicon-s-hand-thumb-up') + ->button() + ->dispatch('confirmChange', [ + 'approverRole' => 'shifts-assignment', + 'shiftId' => $shift->id, + 'soldierId' => $soldierId, + 'requesterId' => auth()->user()->id, + ]) + ->close(), + NotificationAction::make('deny') + ->label(__('Deny')) + ->color('danger') + ->icon('heroicon-m-hand-thumb-down') + ->button() + ->dispatch('denyChange', [ + 'rejectorRole' => 'shifts-assignment', + 'shiftId' => $shift->id, + 'soldierId' => $soldierId, + 'requesterId' => auth()->user()->id, + 'sendToSoldiers' => false, + ]) + ->close(), + ], + $shiftsAssignment, + $shift->id.'-'.$shift->soldier_id.'-'.$soldierId + ) ); - } } protected static function soldierChange($record, $soldierId) @@ -574,8 +693,9 @@ protected static function soldierChange($record, $soldierId) ->button() ->dispatch('confirmChange', [ 'approverRole' => current(array_diff(collect(Soldier::find($record->soldier_id)->user->getRoleNames())->toArray(), ['soldier'])), - 'shift' => $record->id, + 'shiftId' => $record->id, 'soldierId' => $soldierId, + 'requesterId' => null, ]) ->close(), NotificationAction::make('deny') @@ -585,8 +705,10 @@ protected static function soldierChange($record, $soldierId) ->button() ->dispatch('denyChange', [ 'rejectorRole' => current(array_diff(collect(Soldier::find($record->soldier_id)->user->getRoleNames())->toArray(), ['soldier'])), - 'shift' => $record->id, + 'shiftId' => $record->id, 'soldierId' => $soldierId, + 'requesterId' => null, + 'sendToSoldiers' => true, ]) ->close(), ], @@ -594,17 +716,21 @@ protected static function soldierChange($record, $soldierId) ); } - protected static function sendNotification($title, $body, $actions, $user) + protected static function getShiftsAssignments() { - Notification::make() + return User::whereHas('roles', function ($query) { + $query->where('name', 'shifts-assignment'); + })->get(); + } + + protected static function sendNotification($title, $body, $actions, $user, $commonKey = null) + { + MyNotification::make() + ->commonKey($commonKey) ->title($title) ->persistent() - ->body( - $body - ) - ->actions( - $actions - ) + ->body($body) + ->actions($actions) ->sendToDatabase($user, true); } diff --git a/app/Providers/FilamentServiceProvider.php b/app/Providers/FilamentServiceProvider.php index c78f76a..d4d7527 100644 --- a/app/Providers/FilamentServiceProvider.php +++ b/app/Providers/FilamentServiceProvider.php @@ -4,6 +4,7 @@ use App\Filament\Auth\Login; use App\Filament\Widgets\CalendarWidget; +use App\Filament\Widgets\ChartWidget; use App\Http\Middleware\SetLocale; use App\Resources\ProfileResource\Pages\ListProfiles; use Filament\Facades\Filament; @@ -20,6 +21,7 @@ use Illuminate\Session\Middleware\AuthenticateSession; use Illuminate\Session\Middleware\StartSession; use Illuminate\View\Middleware\ShareErrorsFromSession; +use Leandrocfe\FilamentApexCharts\FilamentApexChartsPlugin; use Saade\FilamentFullCalendar\FilamentFullCalendarPlugin; class FilamentServiceProvider extends PanelProvider @@ -61,6 +63,7 @@ public function panel(Panel $panel): Panel ->locale(config('app.locale')) ->plugins(['dayGrid', 'timeGrid']) ->config([]), + FilamentApexChartsPlugin::make(), ]) ->pages([ ListProfiles::class, @@ -71,6 +74,7 @@ public function panel(Panel $panel): Panel ->viteTheme('resources/css/app.css') ->widgets([ CalendarWidget::class, + ChartWidget::class, ]); } diff --git a/app/Resources/ChartResource.php b/app/Resources/ChartResource.php new file mode 100644 index 0000000..21db310 --- /dev/null +++ b/app/Resources/ChartResource.php @@ -0,0 +1,42 @@ +paginated(false); + } + + public static function getPages(): array + { + return [ + 'index' => Pages\ListCharts::route('/'), + ]; + } + + public static function canAccess(): bool + { + return auth()->user()->hasRole(['manager', 'shifts-assignment', 'department-commander']); + } +} diff --git a/app/Resources/ChartResource/Pages/CreateChart.php b/app/Resources/ChartResource/Pages/CreateChart.php new file mode 100644 index 0000000..8aa6aa2 --- /dev/null +++ b/app/Resources/ChartResource/Pages/CreateChart.php @@ -0,0 +1,11 @@ +sortable(), - BooleanColumn::make('is_reservist')->label(__('Reservist')), + BooleanColumn::make('is_reservist') + ->label(__('Reservist')), BadgeColumn::make('gender') ->label(__('Gender')) ->formatStateUsing(fn ($state) => $state ? __('Male') : __('Female')) @@ -86,7 +88,9 @@ public static function table(Table $table): Table ->sortable(), TextColumn::make('role') ->label(__('Role')) - ->visible(collect(auth()->user()->getRoleNames())->intersect(['manager', 'shifts-assignment', 'department-commander'])->isNotEmpty()) + ->visible(collect(auth()->user()->getRoleNames()) + ->intersect(['manager', 'shifts-assignment', 'department-commander']) + ->isNotEmpty()) ->default( function ($record) { $roles = Soldier::find($record->id)->user->getRoleNames()->first(); @@ -108,15 +112,10 @@ function ($record) { return $soldier->team ? $soldier->team->name : null; }), - TextColumn::make('reserve_dates')->label(__('Reserve dates'))->date()->listWithLineBreaks()->limitList(1)->expandableLimitedList()->placeholder('---')->toggleable(true, true), - TextColumn::make('next_reserve_dates')->label(__('Next reserve dates'))->date()->listWithLineBreaks()->limitList(1)->expandableLimitedList()->placeholder('---')->toggleable(true, true), - TextColumn::make('enlist_date')->label(__('Enlist date'))->sortable()->date()->toggleable(), - TextColumn::make('course')->label(__('Course'))->toggleable(true, true), - BooleanColumn::make('has_exemption')->label(__('Exemption'))->toggleable(true, true), - TextColumn::make('max_shifts')->label(__('Max shifts'))->toggleable(true, true), - TextColumn::make('max_nights')->label(__('Max nights'))->toggleable(true, true), - TextColumn::make('max_weekends')->label(__('Max weekends'))->toggleable(true, true), - TextColumn::make('capacity')->label(__('Capacity'))->toggleable(true, true), + TextColumn::make('enlist_date') + ->label(__('Enlist date')) + ->sortable() + ->date(), TextColumn::make('capacity_hold') ->default(function ($record) { $soldierShifts = Shift::where('soldier_id', $record->id)->get(); @@ -126,12 +125,10 @@ function ($record) { })->sum(fn (Shift $shift) => $shift->parallel_weight === null ? $shift->task->parallel_weight : $shift->parallel_weight); }) ->label(__('Capacity hold')) - ->numeric() - ->toggleable(), - BooleanColumn::make('is_trainee')->label(__('Is trainee'))->toggleable(true, true), - BooleanColumn::make('is_mabat')->label(__('Is mabat'))->toggleable(true, true), - TextColumn::make('qualifications')->label(__('Qualifications'))->placeholder(__('No qualifications'))->toggleable(), - TextColumn::make('constraints_limit')->label(__('Constraints limit'))->toggleable(true, true), + ->numeric(), + TextColumn::make('qualifications') + ->label(__('Qualifications')) + ->placeholder(__('No qualifications')), ]) ->modifyQueryUsing(function (Builder $query) { if (request()->input('team_id')) { @@ -192,7 +189,7 @@ function ($record) { DatePicker::make('recruitment_from') ->label(__('From')), DatePicker::make('recruitment_until') - ->label(__('Until')) + ->label(__('To')) ->after('recruitment_from'), ]), ]) @@ -216,12 +213,15 @@ function ($record) { ->button() ->label(__('Filter')) ) + ->recordAction(ViewAction::class) + ->recordUrl(null) ->actions([ ActionGroup::make([ EditAction::make(), DeleteAction::make() ->label(__('Delete')) ->modalHeading(__('Delete').' '.self::getModelLabel()), + ViewAction::make(), Action::make('update reserve days') ->label(__('Update reserve days')) ->icon('heroicon-o-pencil') @@ -302,6 +302,7 @@ public static function personalDetails(): Fieldset return request()->route()->getName() === 'filament.app.resources.soldiers.edit' && ! $isReplica; }) + ->hiddenOn('view') ->required(), ])->columns(3); } diff --git a/app/Resources/TaskResource.php b/app/Resources/TaskResource.php index 9fe9c18..c089c25 100644 --- a/app/Resources/TaskResource.php +++ b/app/Resources/TaskResource.php @@ -8,13 +8,16 @@ use App\Models\Department; use App\Models\Shift; use App\Models\Task; +use App\Models\User; use App\Resources\TaskResource\Pages; use App\Services\ManualAssignment; +use Cache; use Carbon\Carbon; use Filament\Forms\Components\ColorPicker; use Filament\Forms\Components\DatePicker; use Filament\Forms\Components\Fieldset; use Filament\Forms\Components\Grid; +use Filament\Forms\Components\Placeholder; use Filament\Forms\Components\Section; use Filament\Forms\Components\Select; use Filament\Forms\Components\TextInput; @@ -351,9 +354,7 @@ public static function assignSoldier(): array ->options( fn (Get $get) => self::getOptions($get) ) - ->afterStateUpdated(function (callable $set) { - $set('soldier_id', null); - }), + ->afterStateUpdated(fn (callable $set) => $set('soldier_id', null)), Select::make('soldier_id') ->label(__('Assign soldier')) ->options( @@ -362,13 +363,16 @@ function (Get $get) { } ) ->default(null) - ->placeholder(function (Get $get) { - return self::getSoldiers($get)->isEmpty() ? __('No suitable soldiers') : __('Select a soldier'); - } - )->visible( + ->placeholder(fn (Get $get) => self::getSoldiers($get)->isEmpty() ? __('No suitable soldiers') : __('Select a soldier')) + ->visible( fn (Get $get): bool => $get('soldier_type') && $get('soldier_type') != 'me' ), + Placeholder::make('') + ->content(__('Assigning the soldier to this shift is your sole responsibility!')) + ->extraAttributes(['style' => 'color: red; font-family: Arial, Helvetica, sans-serif; font-size: 20px']) + ->live() + ->visible(fn (Get $get) => $get('soldier_type') === 'all'), ]), ]), ]; @@ -390,6 +394,7 @@ protected static function getOptions(Get $get): array { $options = [ 'reserves' => __('Reserves'), + 'matching' => __('Matching soldiers'), 'all' => __('All'), ]; if ($get('department_name')) { @@ -402,7 +407,7 @@ protected static function getOptions(Get $get): array ->put('me', __('Me')) ->toArray(); } - if (current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) != 'manager' || current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) != 'shifts-assignment') { + if (current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) !== 'manager' && current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) !== 'shifts-assignment') { return collect($options) ->put('my_soldiers', __('My Soldiers')) ->toArray(); @@ -421,10 +426,19 @@ protected static function amIAvailable($get) protected static function getSoldiers(Get $get) { - $shift = self::taskDetails($get); - $manual_assignment = new ManualAssignment($shift, $get('soldier_type')); + if ($get('soldier_type') !== 'all') { + $shift = self::taskDetails($get); + $manual_assignment = new ManualAssignment($shift, $get('soldier_type')); + + return $manual_assignment->getSoldiers($get('department_name')); + } - return $manual_assignment->getSoldiers($get('department_name')); + return Cache::remember('users', 30 * 60, function () { + return User::all(); + }) + ->mapWithKeys(function ($user) { + return [$user->userable_id => $user->displayName]; + }); } protected static function taskDetails(Get $get) diff --git a/app/Services/Charts.php b/app/Services/Charts.php new file mode 100644 index 0000000..f8f4b1f --- /dev/null +++ b/app/Services/Charts.php @@ -0,0 +1,113 @@ +data = collect([]); + $this->labels = collect([]); + } + + public function organizeChartData($filter, $course, $month, $year): array + { + $soldiersData = $this->getData($course, $month, $year); + $soldiersData->map(function ($soldier) use ($filter) { + $this->data->push($soldier[$filter]); + $this->labels->push($soldier['first_name'].' '.$soldier['last_name']); + }); + + return [ + 'data' => $this->data, + 'labels' => $this->labels, + ]; + } + + protected function getData($course, $month = null, $year = null) + { + $month = $month ? Carbon::createFromDate($year, $month, 1) : now()->addMonth(); + $shifts = Shift::whereNotNull('soldier_id') + ->get() + ->filter(function (Shift $shift) use ($month): bool { + $range = new Range( + $shift->start_date, + $shift->end_date, + ); + + return $range->isSameMonth(new Range($month->copy()->startOfMonth(), $month->copy()->endOfMonth())); + }) + ->groupBy('soldier_id'); + $soldiersDetails = collect([]); + $shifts->each(function ($shifts, $soldier_id) use (&$soldiersDetails) { + $user = User::where('userable_id', $soldier_id)->first(); + $constraints = ConstraintModel::where('soldier_id', $soldier_id)->get(); + $soldier = Soldier::where('id', $soldier_id)->first(); + $soldiersDetails->push([ + 'first_name' => $user->first_name, + 'last_name' => $user->last_name, + 'course' => $soldier->course, + 'nights' => $this->howMuchNights($shifts), + 'weekends' => $this->howMuchWeekends($shifts), + 'shifts' => $shifts->count(), + 'points' => $this->howMuchPoints($shifts), + 'constraints' => $constraints, + 'lowConstraintsRejected' => $this->howMuchLowConstraintsRejected($constraints, $shifts), + ]); + }); + $soldiersDetails = $soldiersDetails->filter(function ($soldierDetail) use ($course) { + return $soldierDetail['course'] === (int) $course; + }); + + return $soldiersDetails; + + } + + protected function howMuchNights($shifts) + { + return $shifts->filter(fn ($shift) => $shift->task->is_night)->count(); + } + + protected function howMuchWeekends($shifts) + { + return $shifts->filter(fn ($shift) => $shift->is_weekend != null ? $shift->is_weekend : $shift->task->is_weekend)->count(); + } + + protected function howMuchPoints($shifts) + { + return collect($shifts)->sum(fn ($shift) => $shift->parallel_weight != null ? $shift->parallel_weight : $shift->task->parallel_weight); + } + + protected function howMuchLowConstraintsRejected($constraints, $shifts): int + { + $count = 0; + $constraints->filter( + fn (ConstraintModel $constraint) => ConstraintType::getPriority()[$constraint->constraint_type] == 2 + ) + ->map( + function ($constraint) use ($count, $shifts) { + $shifts->map(function ($shift) use ($constraint, $count) { + $range = new Range( + $shift->start_date, + $shift->end_date, + ); + $range->isConflict(new Range($constraint->start_date, $constraint->end_date)) ? + $count++ : $count; + }); + } + ); + + return $count; + } +} diff --git a/composer.json b/composer.json index 9c3a261..0aa26ea 100644 --- a/composer.json +++ b/composer.json @@ -9,9 +9,10 @@ "filament/filament": "^3.2", "guzzlehttp/guzzle": "^7.2", "laravel/framework": "^11.1", - "laravel/octane": "^2.6", "laravel/tinker": "^2.9", "league/flysystem-aws-s3-v3": "^3.0", + "laravel/octane": "^2.6", + "leandrocfe/filament-apex-charts": "^3.1", "maatwebsite/excel": "^3.1", "predis/predis": "^2.2", "saade/filament-fullcalendar": "^3.0", diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..102fbba --- /dev/null +++ b/composer.lock @@ -0,0 +1,13642 @@ +{ + "_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": "0f3772ecc2dbd759431b63e0c245aab2", + "packages": [ + { + "name": "anourvalar/eloquent-serialize", + "version": "1.2.27", + "source": { + "type": "git", + "url": "https://github.com/AnourValar/eloquent-serialize.git", + "reference": "f1c4fcd41a6db1467ed75bc295b62f582d6fd0fe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/AnourValar/eloquent-serialize/zipball/f1c4fcd41a6db1467ed75bc295b62f582d6fd0fe", + "reference": "f1c4fcd41a6db1467ed75bc295b62f582d6fd0fe", + "shasum": "" + }, + "require": { + "laravel/framework": "^8.0|^9.0|^10.0|^11.0", + "php": "^7.4|^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.26", + "laravel/legacy-factories": "^1.1", + "orchestra/testbench": "^6.0|^7.0|^8.0|^9.0", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^9.5|^10.5", + "psalm/plugin-laravel": "^2.8", + "squizlabs/php_codesniffer": "^3.7" + }, + "type": "library", + "extra": { + "laravel": { + "aliases": { + "EloquentSerialize": "AnourValar\\EloquentSerialize\\Facades\\EloquentSerializeFacade" + } + } + }, + "autoload": { + "psr-4": { + "AnourValar\\EloquentSerialize\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Laravel Query Builder (Eloquent) serialization", + "homepage": "https://github.com/AnourValar/eloquent-serialize", + "keywords": [ + "anourvalar", + "builder", + "copy", + "eloquent", + "job", + "laravel", + "query", + "querybuilder", + "queue", + "serializable", + "serialization", + "serialize" + ], + "support": { + "issues": "https://github.com/AnourValar/eloquent-serialize/issues", + "source": "https://github.com/AnourValar/eloquent-serialize/tree/1.2.27" + }, + "time": "2024-11-30T08:27:24+00:00" + }, + { + "name": "aws/aws-crt-php", + "version": "v1.2.7", + "source": { + "type": "git", + "url": "https://github.com/awslabs/aws-crt-php.git", + "reference": "d71d9906c7bb63a28295447ba12e74723bd3730e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/d71d9906c7bb63a28295447ba12e74723bd3730e", + "reference": "d71d9906c7bb63a28295447ba12e74723bd3730e", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35||^5.6.3||^9.5", + "yoast/phpunit-polyfills": "^1.0" + }, + "suggest": { + "ext-awscrt": "Make sure you install awscrt native extension to use any of the functionality." + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "AWS SDK Common Runtime Team", + "email": "aws-sdk-common-runtime@amazon.com" + } + ], + "description": "AWS Common Runtime for PHP", + "homepage": "https://github.com/awslabs/aws-crt-php", + "keywords": [ + "amazon", + "aws", + "crt", + "sdk" + ], + "support": { + "issues": "https://github.com/awslabs/aws-crt-php/issues", + "source": "https://github.com/awslabs/aws-crt-php/tree/v1.2.7" + }, + "time": "2024-10-18T22:15:13+00:00" + }, + { + "name": "aws/aws-sdk-php", + "version": "3.332.2", + "source": { + "type": "git", + "url": "https://github.com/aws/aws-sdk-php.git", + "reference": "6790e53ab0aceca59e1d44fae06c66481013950c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/6790e53ab0aceca59e1d44fae06c66481013950c", + "reference": "6790e53ab0aceca59e1d44fae06c66481013950c", + "shasum": "" + }, + "require": { + "aws/aws-crt-php": "^1.2.3", + "ext-json": "*", + "ext-pcre": "*", + "ext-simplexml": "*", + "guzzlehttp/guzzle": "^6.5.8 || ^7.4.5", + "guzzlehttp/promises": "^1.4.0 || ^2.0", + "guzzlehttp/psr7": "^1.9.1 || ^2.4.5", + "mtdowling/jmespath.php": "^2.6", + "php": ">=7.2.5", + "psr/http-message": "^1.0 || ^2.0" + }, + "require-dev": { + "andrewsville/php-token-reflection": "^1.4", + "aws/aws-php-sns-message-validator": "~1.0", + "behat/behat": "~3.0", + "composer/composer": "^1.10.22", + "dms/phpunit-arraysubset-asserts": "^0.4.0", + "doctrine/cache": "~1.4", + "ext-dom": "*", + "ext-openssl": "*", + "ext-pcntl": "*", + "ext-sockets": "*", + "nette/neon": "^2.3", + "paragonie/random_compat": ">= 2", + "phpunit/phpunit": "^5.6.3 || ^8.5 || ^9.5", + "psr/cache": "^1.0 || ^2.0 || ^3.0", + "psr/simple-cache": "^1.0 || ^2.0 || ^3.0", + "sebastian/comparator": "^1.2.3 || ^4.0", + "yoast/phpunit-polyfills": "^1.0" + }, + "suggest": { + "aws/aws-php-sns-message-validator": "To validate incoming SNS notifications", + "doctrine/cache": "To use the DoctrineCacheAdapter", + "ext-curl": "To send requests using cURL", + "ext-openssl": "Allows working with CloudFront private distributions and verifying received SNS messages", + "ext-sockets": "To use client-side monitoring" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Aws\\": "src/" + }, + "exclude-from-classmap": [ + "src/data/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Amazon Web Services", + "homepage": "http://aws.amazon.com" + } + ], + "description": "AWS SDK for PHP - Use Amazon Web Services in your PHP project", + "homepage": "http://aws.amazon.com/sdkforphp", + "keywords": [ + "amazon", + "aws", + "cloud", + "dynamodb", + "ec2", + "glacier", + "s3", + "sdk" + ], + "support": { + "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", + "issues": "https://github.com/aws/aws-sdk-php/issues", + "source": "https://github.com/aws/aws-sdk-php/tree/3.332.2" + }, + "time": "2024-12-03T06:16:16+00:00" + }, + { + "name": "blade-ui-kit/blade-heroicons", + "version": "2.5.0", + "source": { + "type": "git", + "url": "https://github.com/blade-ui-kit/blade-heroicons.git", + "reference": "4ed3ed08e9ac192d0d126b2f12711d6fb6576a48" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/blade-ui-kit/blade-heroicons/zipball/4ed3ed08e9ac192d0d126b2f12711d6fb6576a48", + "reference": "4ed3ed08e9ac192d0d126b2f12711d6fb6576a48", + "shasum": "" + }, + "require": { + "blade-ui-kit/blade-icons": "^1.6", + "illuminate/support": "^9.0|^10.0|^11.0", + "php": "^8.0" + }, + "require-dev": { + "orchestra/testbench": "^7.0|^8.0|^9.0", + "phpunit/phpunit": "^9.0|^10.5|^11.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "BladeUI\\Heroicons\\BladeHeroiconsServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "BladeUI\\Heroicons\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dries Vints", + "homepage": "https://driesvints.com" + } + ], + "description": "A package to easily make use of Heroicons in your Laravel Blade views.", + "homepage": "https://github.com/blade-ui-kit/blade-heroicons", + "keywords": [ + "Heroicons", + "blade", + "laravel" + ], + "support": { + "issues": "https://github.com/blade-ui-kit/blade-heroicons/issues", + "source": "https://github.com/blade-ui-kit/blade-heroicons/tree/2.5.0" + }, + "funding": [ + { + "url": "https://github.com/sponsors/driesvints", + "type": "github" + }, + { + "url": "https://www.paypal.com/paypalme/driesvints", + "type": "paypal" + } + ], + "time": "2024-11-18T19:59:07+00:00" + }, + { + "name": "blade-ui-kit/blade-icons", + "version": "1.7.2", + "source": { + "type": "git", + "url": "https://github.com/blade-ui-kit/blade-icons.git", + "reference": "75a54a3f5a2810fcf6574ab23e91b6cc229a1b53" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/blade-ui-kit/blade-icons/zipball/75a54a3f5a2810fcf6574ab23e91b6cc229a1b53", + "reference": "75a54a3f5a2810fcf6574ab23e91b6cc229a1b53", + "shasum": "" + }, + "require": { + "illuminate/contracts": "^8.0|^9.0|^10.0|^11.0", + "illuminate/filesystem": "^8.0|^9.0|^10.0|^11.0", + "illuminate/support": "^8.0|^9.0|^10.0|^11.0", + "illuminate/view": "^8.0|^9.0|^10.0|^11.0", + "php": "^7.4|^8.0", + "symfony/console": "^5.3|^6.0|^7.0", + "symfony/finder": "^5.3|^6.0|^7.0" + }, + "require-dev": { + "mockery/mockery": "^1.5.1", + "orchestra/testbench": "^6.0|^7.0|^8.0|^9.0", + "phpunit/phpunit": "^9.0|^10.5|^11.0" + }, + "bin": [ + "bin/blade-icons-generate" + ], + "type": "library", + "extra": { + "laravel": { + "providers": [ + "BladeUI\\Icons\\BladeIconsServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "BladeUI\\Icons\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dries Vints", + "homepage": "https://driesvints.com" + } + ], + "description": "A package to easily make use of icons in your Laravel Blade views.", + "homepage": "https://github.com/blade-ui-kit/blade-icons", + "keywords": [ + "blade", + "icons", + "laravel", + "svg" + ], + "support": { + "issues": "https://github.com/blade-ui-kit/blade-icons/issues", + "source": "https://github.com/blade-ui-kit/blade-icons" + }, + "funding": [ + { + "url": "https://github.com/sponsors/driesvints", + "type": "github" + }, + { + "url": "https://www.paypal.com/paypalme/driesvints", + "type": "paypal" + } + ], + "time": "2024-10-17T17:38:00+00:00" + }, + { + "name": "brick/math", + "version": "0.12.1", + "source": { + "type": "git", + "url": "https://github.com/brick/math.git", + "reference": "f510c0a40911935b77b86859eb5223d58d660df1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/brick/math/zipball/f510c0a40911935b77b86859eb5223d58d660df1", + "reference": "f510c0a40911935b77b86859eb5223d58d660df1", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^10.1", + "vimeo/psalm": "5.16.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Brick\\Math\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Arbitrary-precision arithmetic library", + "keywords": [ + "Arbitrary-precision", + "BigInteger", + "BigRational", + "arithmetic", + "bigdecimal", + "bignum", + "bignumber", + "brick", + "decimal", + "integer", + "math", + "mathematics", + "rational" + ], + "support": { + "issues": "https://github.com/brick/math/issues", + "source": "https://github.com/brick/math/tree/0.12.1" + }, + "funding": [ + { + "url": "https://github.com/BenMorel", + "type": "github" + } + ], + "time": "2023-11-29T23:19:16+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": "composer/semver", + "version": "3.4.3", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.11", + "symfony/phpunit-bridge": "^3 || ^7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Semver\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "Semver library that offers utilities, version constraint parsing and validation.", + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], + "support": { + "irc": "ircs://irc.libera.chat:6697/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/3.4.3" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2024-09-19T14:15:21+00:00" + }, + { + "name": "danharrin/date-format-converter", + "version": "v0.3.1", + "source": { + "type": "git", + "url": "https://github.com/danharrin/date-format-converter.git", + "reference": "7c31171bc981e48726729a5f3a05a2d2b63f0b1e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/danharrin/date-format-converter/zipball/7c31171bc981e48726729a5f3a05a2d2b63f0b1e", + "reference": "7c31171bc981e48726729a5f3a05a2d2b63f0b1e", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0" + }, + "type": "library", + "autoload": { + "files": [ + "src/helpers.php", + "src/standards.php" + ], + "psr-4": { + "DanHarrin\\DateFormatConverter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dan Harrin", + "email": "dan@danharrin.com" + } + ], + "description": "Convert token-based date formats between standards.", + "homepage": "https://github.com/danharrin/date-format-converter", + "support": { + "issues": "https://github.com/danharrin/date-format-converter/issues", + "source": "https://github.com/danharrin/date-format-converter" + }, + "funding": [ + { + "url": "https://github.com/danharrin", + "type": "github" + } + ], + "time": "2024-06-13T09:38:44+00:00" + }, + { + "name": "danharrin/livewire-rate-limiting", + "version": "v1.3.1", + "source": { + "type": "git", + "url": "https://github.com/danharrin/livewire-rate-limiting.git", + "reference": "1a1b299e20de61f88ed6e94ea0bbcfc33aab1ddb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/danharrin/livewire-rate-limiting/zipball/1a1b299e20de61f88ed6e94ea0bbcfc33aab1ddb", + "reference": "1a1b299e20de61f88ed6e94ea0bbcfc33aab1ddb", + "shasum": "" + }, + "require": { + "illuminate/support": "^9.0|^10.0|^11.0", + "php": "^8.0" + }, + "require-dev": { + "livewire/livewire": "^3.0", + "livewire/volt": "^1.3", + "orchestra/testbench": "^7.0|^8.0|^9.0", + "phpunit/phpunit": "^9.0|^10.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "DanHarrin\\LivewireRateLimiting\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dan Harrin", + "email": "dan@danharrin.com" + } + ], + "description": "Apply rate limiters to Laravel Livewire actions.", + "homepage": "https://github.com/danharrin/livewire-rate-limiting", + "support": { + "issues": "https://github.com/danharrin/livewire-rate-limiting/issues", + "source": "https://github.com/danharrin/livewire-rate-limiting" + }, + "funding": [ + { + "url": "https://github.com/danharrin", + "type": "github" + } + ], + "time": "2024-05-06T09:10:03+00:00" + }, + { + "name": "dflydev/dot-access-data", + "version": "v3.0.3", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/a23a2bf4f31d3518f3ecb38660c95715dfead60f", + "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.42", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", + "scrutinizer/ocular": "1.6.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Dflydev\\DotAccessData\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + }, + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "support": { + "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.3" + }, + "time": "2024-07-08T12:26:09+00:00" + }, + { + "name": "doctrine/dbal", + "version": "4.2.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/dbal.git", + "reference": "dadd35300837a3a2184bd47d403333b15d0a9bd0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/dadd35300837a3a2184bd47d403333b15d0a9bd0", + "reference": "dadd35300837a3a2184bd47d403333b15d0a9bd0", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^0.5.3|^1", + "php": "^8.1", + "psr/cache": "^1|^2|^3", + "psr/log": "^1|^2|^3" + }, + "require-dev": { + "doctrine/coding-standard": "12.0.0", + "fig/log-test": "^1", + "jetbrains/phpstorm-stubs": "2023.2", + "phpstan/phpstan": "1.12.6", + "phpstan/phpstan-phpunit": "1.4.0", + "phpstan/phpstan-strict-rules": "^1.6", + "phpunit/phpunit": "10.5.30", + "psalm/plugin-phpunit": "0.19.0", + "slevomat/coding-standard": "8.13.1", + "squizlabs/php_codesniffer": "3.10.2", + "symfony/cache": "^6.3.8|^7.0", + "symfony/console": "^5.4|^6.3|^7.0", + "vimeo/psalm": "5.25.0" + }, + "suggest": { + "symfony/console": "For helpful console commands such as SQL execution and import of files." + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\DBAL\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + } + ], + "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.", + "homepage": "https://www.doctrine-project.org/projects/dbal.html", + "keywords": [ + "abstraction", + "database", + "db2", + "dbal", + "mariadb", + "mssql", + "mysql", + "oci8", + "oracle", + "pdo", + "pgsql", + "postgresql", + "queryobject", + "sasql", + "sql", + "sqlite", + "sqlserver", + "sqlsrv" + ], + "support": { + "issues": "https://github.com/doctrine/dbal/issues", + "source": "https://github.com/doctrine/dbal/tree/4.2.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%2Fdbal", + "type": "tidelift" + } + ], + "time": "2024-10-10T18:01:27+00:00" + }, + { + "name": "doctrine/deprecations", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/deprecations.git", + "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", + "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9", + "phpstan/phpstan": "1.4.10 || 1.10.15", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psalm/plugin-phpunit": "0.18.4", + "psr/log": "^1 || ^2 || ^3", + "vimeo/psalm": "4.30.0 || 5.12.0" + }, + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", + "homepage": "https://www.doctrine-project.org/", + "support": { + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/1.1.3" + }, + "time": "2024-01-30T19:34:25+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": "dragonmantank/cron-expression", + "version": "v3.4.0", + "source": { + "type": "git", + "url": "https://github.com/dragonmantank/cron-expression.git", + "reference": "8c784d071debd117328803d86b2097615b457500" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/8c784d071debd117328803d86b2097615b457500", + "reference": "8c784d071debd117328803d86b2097615b457500", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0", + "webmozart/assert": "^1.0" + }, + "replace": { + "mtdowling/cron-expression": "^1.0" + }, + "require-dev": { + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.0", + "phpunit/phpunit": "^7.0|^8.0|^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Cron\\": "src/Cron/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Tankersley", + "email": "chris@ctankersley.com", + "homepage": "https://github.com/dragonmantank" + } + ], + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "keywords": [ + "cron", + "schedule" + ], + "support": { + "issues": "https://github.com/dragonmantank/cron-expression/issues", + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.4.0" + }, + "funding": [ + { + "url": "https://github.com/dragonmantank", + "type": "github" + } + ], + "time": "2024-10-09T13:47:03+00:00" + }, + { + "name": "egulias/email-validator", + "version": "4.0.2", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ebaaf5be6c0286928352e054f2d5125608e5405e", + "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e", + "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.2" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "time": "2023-10-06T06:47:41+00:00" + }, + { + "name": "ezyang/htmlpurifier", + "version": "v4.18.0", + "source": { + "type": "git", + "url": "https://github.com/ezyang/htmlpurifier.git", + "reference": "cb56001e54359df7ae76dc522d08845dc741621b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/cb56001e54359df7ae76dc522d08845dc741621b", + "reference": "cb56001e54359df7ae76dc522d08845dc741621b", + "shasum": "" + }, + "require": { + "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" + }, + "require-dev": { + "cerdic/css-tidy": "^1.7 || ^2.0", + "simpletest/simpletest": "dev-master" + }, + "suggest": { + "cerdic/css-tidy": "If you want to use the filter 'Filter.ExtractStyleBlocks'.", + "ext-bcmath": "Used for unit conversion and imagecrash protection", + "ext-iconv": "Converts text to and from non-UTF-8 encodings", + "ext-tidy": "Used for pretty-printing HTML" + }, + "type": "library", + "autoload": { + "files": [ + "library/HTMLPurifier.composer.php" + ], + "psr-0": { + "HTMLPurifier": "library/" + }, + "exclude-from-classmap": [ + "/library/HTMLPurifier/Language/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "Edward Z. Yang", + "email": "admin@htmlpurifier.org", + "homepage": "http://ezyang.com" + } + ], + "description": "Standards compliant HTML filter written in PHP", + "homepage": "http://htmlpurifier.org/", + "keywords": [ + "html" + ], + "support": { + "issues": "https://github.com/ezyang/htmlpurifier/issues", + "source": "https://github.com/ezyang/htmlpurifier/tree/v4.18.0" + }, + "time": "2024-11-01T03:51:45+00:00" + }, + { + "name": "filament/actions", + "version": "v3.2.127", + "source": { + "type": "git", + "url": "https://github.com/filamentphp/actions.git", + "reference": "f325e315c365cfcea5c9da96662ddea37e3663fc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filamentphp/actions/zipball/f325e315c365cfcea5c9da96662ddea37e3663fc", + "reference": "f325e315c365cfcea5c9da96662ddea37e3663fc", + "shasum": "" + }, + "require": { + "anourvalar/eloquent-serialize": "^1.2", + "filament/forms": "self.version", + "filament/infolists": "self.version", + "filament/notifications": "self.version", + "filament/support": "self.version", + "illuminate/contracts": "^10.45|^11.0", + "illuminate/database": "^10.45|^11.0", + "illuminate/support": "^10.45|^11.0", + "league/csv": "^9.14", + "openspout/openspout": "^4.23", + "php": "^8.1", + "spatie/laravel-package-tools": "^1.9" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Filament\\Actions\\ActionsServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Filament\\Actions\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Easily add beautiful action modals to any Livewire component.", + "homepage": "https://github.com/filamentphp/filament", + "support": { + "issues": "https://github.com/filamentphp/filament/issues", + "source": "https://github.com/filamentphp/filament" + }, + "time": "2024-11-29T09:30:57+00:00" + }, + { + "name": "filament/filament", + "version": "v3.2.127", + "source": { + "type": "git", + "url": "https://github.com/filamentphp/panels.git", + "reference": "4aea767e8c872842b624fe47affe078433111259" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filamentphp/panels/zipball/4aea767e8c872842b624fe47affe078433111259", + "reference": "4aea767e8c872842b624fe47affe078433111259", + "shasum": "" + }, + "require": { + "danharrin/livewire-rate-limiting": "^0.3|^1.0", + "filament/actions": "self.version", + "filament/forms": "self.version", + "filament/infolists": "self.version", + "filament/notifications": "self.version", + "filament/support": "self.version", + "filament/tables": "self.version", + "filament/widgets": "self.version", + "illuminate/auth": "^10.45|^11.0", + "illuminate/console": "^10.45|^11.0", + "illuminate/contracts": "^10.45|^11.0", + "illuminate/cookie": "^10.45|^11.0", + "illuminate/database": "^10.45|^11.0", + "illuminate/http": "^10.45|^11.0", + "illuminate/routing": "^10.45|^11.0", + "illuminate/session": "^10.45|^11.0", + "illuminate/support": "^10.45|^11.0", + "illuminate/view": "^10.45|^11.0", + "php": "^8.1", + "spatie/laravel-package-tools": "^1.9" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Filament\\FilamentServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/global_helpers.php", + "src/helpers.php" + ], + "psr-4": { + "Filament\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A collection of full-stack components for accelerated Laravel app development.", + "homepage": "https://github.com/filamentphp/filament", + "support": { + "issues": "https://github.com/filamentphp/filament/issues", + "source": "https://github.com/filamentphp/filament" + }, + "time": "2024-11-29T09:30:58+00:00" + }, + { + "name": "filament/forms", + "version": "v3.2.127", + "source": { + "type": "git", + "url": "https://github.com/filamentphp/forms.git", + "reference": "c78071f1aabb63a0d9bf74268005d3294b61dc2a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filamentphp/forms/zipball/c78071f1aabb63a0d9bf74268005d3294b61dc2a", + "reference": "c78071f1aabb63a0d9bf74268005d3294b61dc2a", + "shasum": "" + }, + "require": { + "danharrin/date-format-converter": "^0.3", + "filament/actions": "self.version", + "filament/support": "self.version", + "illuminate/console": "^10.45|^11.0", + "illuminate/contracts": "^10.45|^11.0", + "illuminate/database": "^10.45|^11.0", + "illuminate/filesystem": "^10.45|^11.0", + "illuminate/support": "^10.45|^11.0", + "illuminate/validation": "^10.45|^11.0", + "illuminate/view": "^10.45|^11.0", + "php": "^8.1", + "spatie/laravel-package-tools": "^1.9" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Filament\\Forms\\FormsServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Filament\\Forms\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Easily add beautiful forms to any Livewire component.", + "homepage": "https://github.com/filamentphp/filament", + "support": { + "issues": "https://github.com/filamentphp/filament/issues", + "source": "https://github.com/filamentphp/filament" + }, + "time": "2024-11-29T09:30:53+00:00" + }, + { + "name": "filament/infolists", + "version": "v3.2.127", + "source": { + "type": "git", + "url": "https://github.com/filamentphp/infolists.git", + "reference": "e655ac3900ab2109022aa0243cfb4126729ef431" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filamentphp/infolists/zipball/e655ac3900ab2109022aa0243cfb4126729ef431", + "reference": "e655ac3900ab2109022aa0243cfb4126729ef431", + "shasum": "" + }, + "require": { + "filament/actions": "self.version", + "filament/support": "self.version", + "illuminate/console": "^10.45|^11.0", + "illuminate/contracts": "^10.45|^11.0", + "illuminate/database": "^10.45|^11.0", + "illuminate/filesystem": "^10.45|^11.0", + "illuminate/support": "^10.45|^11.0", + "illuminate/view": "^10.45|^11.0", + "php": "^8.1", + "spatie/laravel-package-tools": "^1.9" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Filament\\Infolists\\InfolistsServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Filament\\Infolists\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Easily add beautiful read-only infolists to any Livewire component.", + "homepage": "https://github.com/filamentphp/filament", + "support": { + "issues": "https://github.com/filamentphp/filament/issues", + "source": "https://github.com/filamentphp/filament" + }, + "time": "2024-11-29T09:30:56+00:00" + }, + { + "name": "filament/notifications", + "version": "v3.2.127", + "source": { + "type": "git", + "url": "https://github.com/filamentphp/notifications.git", + "reference": "c19df07c801c5550de0d30957c5a316f53019533" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filamentphp/notifications/zipball/c19df07c801c5550de0d30957c5a316f53019533", + "reference": "c19df07c801c5550de0d30957c5a316f53019533", + "shasum": "" + }, + "require": { + "filament/actions": "self.version", + "filament/support": "self.version", + "illuminate/contracts": "^10.45|^11.0", + "illuminate/filesystem": "^10.45|^11.0", + "illuminate/notifications": "^10.45|^11.0", + "illuminate/support": "^10.45|^11.0", + "php": "^8.1", + "spatie/laravel-package-tools": "^1.9" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Filament\\Notifications\\NotificationsServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/Testing/Autoload.php" + ], + "psr-4": { + "Filament\\Notifications\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Easily add beautiful notifications to any Livewire app.", + "homepage": "https://github.com/filamentphp/filament", + "support": { + "issues": "https://github.com/filamentphp/filament/issues", + "source": "https://github.com/filamentphp/filament" + }, + "time": "2024-10-23T07:36:14+00:00" + }, + { + "name": "filament/support", + "version": "v3.2.127", + "source": { + "type": "git", + "url": "https://github.com/filamentphp/support.git", + "reference": "a720fb2508a1d84a9b35aedc9991d4b53d18fea6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filamentphp/support/zipball/a720fb2508a1d84a9b35aedc9991d4b53d18fea6", + "reference": "a720fb2508a1d84a9b35aedc9991d4b53d18fea6", + "shasum": "" + }, + "require": { + "blade-ui-kit/blade-heroicons": "^2.5", + "doctrine/dbal": "^3.2|^4.0", + "ext-intl": "*", + "illuminate/contracts": "^10.45|^11.0", + "illuminate/support": "^10.45|^11.0", + "illuminate/view": "^10.45|^11.0", + "kirschbaum-development/eloquent-power-joins": "^3.0|^4.0", + "livewire/livewire": "3.5.12", + "php": "^8.1", + "ryangjchandler/blade-capture-directive": "^0.2|^0.3|^1.0", + "spatie/color": "^1.5", + "spatie/invade": "^1.0|^2.0", + "spatie/laravel-package-tools": "^1.9", + "symfony/console": "^6.0|^7.0", + "symfony/html-sanitizer": "^6.1|^7.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Filament\\Support\\SupportServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Filament\\Support\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Core helper methods and foundation code for all Filament packages.", + "homepage": "https://github.com/filamentphp/filament", + "support": { + "issues": "https://github.com/filamentphp/filament/issues", + "source": "https://github.com/filamentphp/filament" + }, + "time": "2024-11-29T09:31:13+00:00" + }, + { + "name": "filament/tables", + "version": "v3.2.127", + "source": { + "type": "git", + "url": "https://github.com/filamentphp/tables.git", + "reference": "c287a68e084c96c3f2991eaddf1d6b5159af5147" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filamentphp/tables/zipball/c287a68e084c96c3f2991eaddf1d6b5159af5147", + "reference": "c287a68e084c96c3f2991eaddf1d6b5159af5147", + "shasum": "" + }, + "require": { + "filament/actions": "self.version", + "filament/forms": "self.version", + "filament/support": "self.version", + "illuminate/console": "^10.45|^11.0", + "illuminate/contracts": "^10.45|^11.0", + "illuminate/database": "^10.45|^11.0", + "illuminate/filesystem": "^10.45|^11.0", + "illuminate/support": "^10.45|^11.0", + "illuminate/view": "^10.45|^11.0", + "php": "^8.1", + "spatie/laravel-package-tools": "^1.9" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Filament\\Tables\\TablesServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Filament\\Tables\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Easily add beautiful tables to any Livewire component.", + "homepage": "https://github.com/filamentphp/filament", + "support": { + "issues": "https://github.com/filamentphp/filament/issues", + "source": "https://github.com/filamentphp/filament" + }, + "time": "2024-11-30T09:21:26+00:00" + }, + { + "name": "filament/widgets", + "version": "v3.2.127", + "source": { + "type": "git", + "url": "https://github.com/filamentphp/widgets.git", + "reference": "6de1c84d71168fd1c6a5b1ae1e1b4ec5ee4b6f55" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filamentphp/widgets/zipball/6de1c84d71168fd1c6a5b1ae1e1b4ec5ee4b6f55", + "reference": "6de1c84d71168fd1c6a5b1ae1e1b4ec5ee4b6f55", + "shasum": "" + }, + "require": { + "filament/support": "self.version", + "php": "^8.1", + "spatie/laravel-package-tools": "^1.9" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Filament\\Widgets\\WidgetsServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Filament\\Widgets\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Easily add beautiful dashboard widgets to any Livewire component.", + "homepage": "https://github.com/filamentphp/filament", + "support": { + "issues": "https://github.com/filamentphp/filament/issues", + "source": "https://github.com/filamentphp/filament" + }, + "time": "2024-11-27T16:52:29+00:00" + }, + { + "name": "fruitcake/php-cors", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/fruitcake/php-cors.git", + "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/3d158f36e7875e2f040f37bc0573956240a5a38b", + "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0", + "symfony/http-foundation": "^4.4|^5.4|^6|^7" + }, + "require-dev": { + "phpstan/phpstan": "^1.4", + "phpunit/phpunit": "^9", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "Fruitcake\\Cors\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fruitcake", + "homepage": "https://fruitcake.nl" + }, + { + "name": "Barryvdh", + "email": "barryvdh@gmail.com" + } + ], + "description": "Cross-origin resource sharing library for the Symfony HttpFoundation", + "homepage": "https://github.com/fruitcake/php-cors", + "keywords": [ + "cors", + "laravel", + "symfony" + ], + "support": { + "issues": "https://github.com/fruitcake/php-cors/issues", + "source": "https://github.com/fruitcake/php-cors/tree/v1.3.0" + }, + "funding": [ + { + "url": "https://fruitcake.nl", + "type": "custom" + }, + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2023-10-12T05:21:21+00:00" + }, + { + "name": "graham-campbell/result-type", + "version": "v1.1.3", + "source": { + "type": "git", + "url": "https://github.com/GrahamCampbell/Result-Type.git", + "reference": "3ba905c11371512af9d9bdd27d99b782216b6945" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/3ba905c11371512af9d9bdd27d99b782216b6945", + "reference": "3ba905c11371512af9d9bdd27d99b782216b6945", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.3" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" + }, + "type": "library", + "autoload": { + "psr-4": { + "GrahamCampbell\\ResultType\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "An Implementation Of The Result Type", + "keywords": [ + "Graham Campbell", + "GrahamCampbell", + "Result Type", + "Result-Type", + "result" + ], + "support": { + "issues": "https://github.com/GrahamCampbell/Result-Type/issues", + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.3" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", + "type": "tidelift" + } + ], + "time": "2024-07-20T21:45:45+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "7.9.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "d281ed313b989f213357e3be1a179f02196ac99b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d281ed313b989f213357e3be1a179f02196ac99b", + "reference": "d281ed313b989f213357e3be1a179f02196ac99b", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.5.3 || ^2.0.3", + "guzzlehttp/psr7": "^2.7.0", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "ext-curl": "*", + "guzzle/client-integration-tests": "3.0.2", + "php-http/message-factory": "^1.1", + "phpunit/phpunit": "^8.5.39 || ^9.6.20", + "psr/log": "^1.1 || ^2.0 || ^3.0" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "psr-18", + "psr-7", + "rest", + "web service" + ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.9.2" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2024-07-24T11:22:20+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/f9c436286ab2892c7db7be8c8da4ef61ccf7b455", + "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.39 || ^9.6.20" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2024-10-17T10:06:22+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": "guzzlehttp/uri-template", + "version": "v1.0.3", + "source": { + "type": "git", + "url": "https://github.com/guzzle/uri-template.git", + "reference": "ecea8feef63bd4fef1f037ecb288386999ecc11c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/uri-template/zipball/ecea8feef63bd4fef1f037ecb288386999ecc11c", + "reference": "ecea8feef63bd4fef1f037ecb288386999ecc11c", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "symfony/polyfill-php80": "^1.24" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.36 || ^9.6.15", + "uri-template/tests": "1.0.0" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\UriTemplate\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + } + ], + "description": "A polyfill class for uri_template of PHP", + "keywords": [ + "guzzlehttp", + "uri-template" + ], + "support": { + "issues": "https://github.com/guzzle/uri-template/issues", + "source": "https://github.com/guzzle/uri-template/tree/v1.0.3" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/uri-template", + "type": "tidelift" + } + ], + "time": "2023-12-03T19:50:20+00:00" + }, + { + "name": "kirschbaum-development/eloquent-power-joins", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/kirschbaum-development/eloquent-power-joins.git", + "reference": "3c1af9b86b02f1e39219849c1d2fee7cf77e8638" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/kirschbaum-development/eloquent-power-joins/zipball/3c1af9b86b02f1e39219849c1d2fee7cf77e8638", + "reference": "3c1af9b86b02f1e39219849c1d2fee7cf77e8638", + "shasum": "" + }, + "require": { + "illuminate/database": "^10.0|^11.0", + "illuminate/support": "^10.0|^11.0", + "php": "^8.1" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "dev-master", + "laravel/legacy-factories": "^1.0@dev", + "orchestra/testbench": "^8.0|^9.0", + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Kirschbaum\\PowerJoins\\PowerJoinsServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Kirschbaum\\PowerJoins\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Luis Dalmolin", + "email": "luis.nh@gmail.com", + "role": "Developer" + } + ], + "description": "The Laravel magic applied to joins.", + "homepage": "https://github.com/kirschbaum-development/eloquent-power-joins", + "keywords": [ + "eloquent", + "join", + "laravel", + "mysql" + ], + "support": { + "issues": "https://github.com/kirschbaum-development/eloquent-power-joins/issues", + "source": "https://github.com/kirschbaum-development/eloquent-power-joins/tree/4.0.1" + }, + "time": "2024-11-26T13:22:08+00:00" + }, + { + "name": "laravel/framework", + "version": "v11.34.2", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "865da6d73dd353f07a7bcbd778c55966a620121f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/865da6d73dd353f07a7bcbd778c55966a620121f", + "reference": "865da6d73dd353f07a7bcbd778c55966a620121f", + "shasum": "" + }, + "require": { + "brick/math": "^0.9.3|^0.10.2|^0.11|^0.12", + "composer-runtime-api": "^2.2", + "doctrine/inflector": "^2.0.5", + "dragonmantank/cron-expression": "^3.4", + "egulias/email-validator": "^3.2.1|^4.0", + "ext-ctype": "*", + "ext-filter": "*", + "ext-hash": "*", + "ext-mbstring": "*", + "ext-openssl": "*", + "ext-session": "*", + "ext-tokenizer": "*", + "fruitcake/php-cors": "^1.3", + "guzzlehttp/guzzle": "^7.8.2", + "guzzlehttp/uri-template": "^1.0", + "laravel/prompts": "^0.1.18|^0.2.0|^0.3.0", + "laravel/serializable-closure": "^1.3|^2.0", + "league/commonmark": "^2.2.1", + "league/flysystem": "^3.25.1", + "league/flysystem-local": "^3.25.1", + "monolog/monolog": "^3.0", + "nesbot/carbon": "^2.72.2|^3.4", + "nunomaduro/termwind": "^2.0", + "php": "^8.2", + "psr/container": "^1.1.1|^2.0.1", + "psr/log": "^1.0|^2.0|^3.0", + "psr/simple-cache": "^1.0|^2.0|^3.0", + "ramsey/uuid": "^4.7", + "symfony/console": "^7.0.3", + "symfony/error-handler": "^7.0.3", + "symfony/finder": "^7.0.3", + "symfony/http-foundation": "^7.0.3", + "symfony/http-kernel": "^7.0.3", + "symfony/mailer": "^7.0.3", + "symfony/mime": "^7.0.3", + "symfony/polyfill-php83": "^1.31", + "symfony/process": "^7.0.3", + "symfony/routing": "^7.0.3", + "symfony/uid": "^7.0.3", + "symfony/var-dumper": "^7.0.3", + "tijsverkoyen/css-to-inline-styles": "^2.2.5", + "vlucas/phpdotenv": "^5.6.1", + "voku/portable-ascii": "^2.0.2" + }, + "conflict": { + "mockery/mockery": "1.6.8", + "tightenco/collect": "<5.5.33" + }, + "provide": { + "psr/container-implementation": "1.1|2.0", + "psr/log-implementation": "1.0|2.0|3.0", + "psr/simple-cache-implementation": "1.0|2.0|3.0" + }, + "replace": { + "illuminate/auth": "self.version", + "illuminate/broadcasting": "self.version", + "illuminate/bus": "self.version", + "illuminate/cache": "self.version", + "illuminate/collections": "self.version", + "illuminate/concurrency": "self.version", + "illuminate/conditionable": "self.version", + "illuminate/config": "self.version", + "illuminate/console": "self.version", + "illuminate/container": "self.version", + "illuminate/contracts": "self.version", + "illuminate/cookie": "self.version", + "illuminate/database": "self.version", + "illuminate/encryption": "self.version", + "illuminate/events": "self.version", + "illuminate/filesystem": "self.version", + "illuminate/hashing": "self.version", + "illuminate/http": "self.version", + "illuminate/log": "self.version", + "illuminate/macroable": "self.version", + "illuminate/mail": "self.version", + "illuminate/notifications": "self.version", + "illuminate/pagination": "self.version", + "illuminate/pipeline": "self.version", + "illuminate/process": "self.version", + "illuminate/queue": "self.version", + "illuminate/redis": "self.version", + "illuminate/routing": "self.version", + "illuminate/session": "self.version", + "illuminate/support": "self.version", + "illuminate/testing": "self.version", + "illuminate/translation": "self.version", + "illuminate/validation": "self.version", + "illuminate/view": "self.version", + "spatie/once": "*" + }, + "require-dev": { + "ably/ably-php": "^1.0", + "aws/aws-sdk-php": "^3.322.9", + "ext-gmp": "*", + "fakerphp/faker": "^1.24", + "guzzlehttp/promises": "^2.0.3", + "guzzlehttp/psr7": "^2.4", + "league/flysystem-aws-s3-v3": "^3.25.1", + "league/flysystem-ftp": "^3.25.1", + "league/flysystem-path-prefixing": "^3.25.1", + "league/flysystem-read-only": "^3.25.1", + "league/flysystem-sftp-v3": "^3.25.1", + "mockery/mockery": "^1.6.10", + "nyholm/psr7": "^1.2", + "orchestra/testbench-core": "^9.6", + "pda/pheanstalk": "^5.0.6", + "phpstan/phpstan": "^1.11.5", + "phpunit/phpunit": "^10.5.35|^11.3.6", + "predis/predis": "^2.3", + "resend/resend-php": "^0.10.0", + "symfony/cache": "^7.0.3", + "symfony/http-client": "^7.0.3", + "symfony/psr-http-message-bridge": "^7.0.3", + "symfony/translation": "^7.0.3" + }, + "suggest": { + "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.322.9).", + "brianium/paratest": "Required to run tests in parallel (^7.0|^8.0).", + "ext-apcu": "Required to use the APC cache driver.", + "ext-fileinfo": "Required to use the Filesystem class.", + "ext-ftp": "Required to use the Flysystem FTP driver.", + "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", + "ext-memcached": "Required to use the memcache cache driver.", + "ext-pcntl": "Required to use all features of the queue worker and console signal trapping.", + "ext-pdo": "Required to use all database features.", + "ext-posix": "Required to use all features of the queue worker.", + "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0|^6.0).", + "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", + "filp/whoops": "Required for friendly error pages in development (^2.14.3).", + "laravel/tinker": "Required to use the tinker console command (^2.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.25.1).", + "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.25.1).", + "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.25.1).", + "league/flysystem-read-only": "Required to use read-only disks (^3.25.1)", + "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.25.1).", + "mockery/mockery": "Required to use mocking (^1.6).", + "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^5.0).", + "phpunit/phpunit": "Required to use assertions and run tests (^10.5|^11.0).", + "predis/predis": "Required to use the predis connector (^2.3).", + "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", + "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0).", + "symfony/cache": "Required to PSR-6 cache bridge (^7.0).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^7.0).", + "symfony/http-client": "Required to enable support for the Symfony API mail transports (^7.0).", + "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^7.0).", + "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^7.0).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^7.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "11.x-dev" + } + }, + "autoload": { + "files": [ + "src/Illuminate/Collections/helpers.php", + "src/Illuminate/Events/functions.php", + "src/Illuminate/Filesystem/functions.php", + "src/Illuminate/Foundation/helpers.php", + "src/Illuminate/Log/functions.php", + "src/Illuminate/Support/functions.php", + "src/Illuminate/Support/helpers.php" + ], + "psr-4": { + "Illuminate\\": "src/Illuminate/", + "Illuminate\\Support\\": [ + "src/Illuminate/Macroable/", + "src/Illuminate/Collections/", + "src/Illuminate/Conditionable/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Laravel Framework.", + "homepage": "https://laravel.com", + "keywords": [ + "framework", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2024-11-27T15:43:57+00:00" + }, + { + "name": "laravel/prompts", + "version": "v0.3.2", + "source": { + "type": "git", + "url": "https://github.com/laravel/prompts.git", + "reference": "0e0535747c6b8d6d10adca8b68293cf4517abb0f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/prompts/zipball/0e0535747c6b8d6d10adca8b68293cf4517abb0f", + "reference": "0e0535747c6b8d6d10adca8b68293cf4517abb0f", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2.2", + "ext-mbstring": "*", + "php": "^8.1", + "symfony/console": "^6.2|^7.0" + }, + "conflict": { + "illuminate/console": ">=10.17.0 <10.25.0", + "laravel/framework": ">=10.17.0 <10.25.0" + }, + "require-dev": { + "illuminate/collections": "^10.0|^11.0", + "mockery/mockery": "^1.5", + "pestphp/pest": "^2.3|^3.4", + "phpstan/phpstan": "^1.11", + "phpstan/phpstan-mockery": "^1.1" + }, + "suggest": { + "ext-pcntl": "Required for the spinner to be animated." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.3.x-dev" + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Laravel\\Prompts\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Add beautiful and user-friendly forms to your command-line applications.", + "support": { + "issues": "https://github.com/laravel/prompts/issues", + "source": "https://github.com/laravel/prompts/tree/v0.3.2" + }, + "time": "2024-11-12T14:59:47+00:00" + }, + { + "name": "laravel/serializable-closure", + "version": "v2.0.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/serializable-closure.git", + "reference": "0d8d3d8086984996df86596a86dea60398093a81" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/0d8d3d8086984996df86596a86dea60398093a81", + "reference": "0d8d3d8086984996df86596a86dea60398093a81", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "illuminate/support": "^10.0|^11.0", + "nesbot/carbon": "^2.67|^3.0", + "pestphp/pest": "^2.36", + "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": "2024-11-19T01:38:44+00:00" + }, + { + "name": "laravel/tinker", + "version": "v2.10.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/tinker.git", + "reference": "ba4d51eb56de7711b3a37d63aa0643e99a339ae5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/tinker/zipball/ba4d51eb56de7711b3a37d63aa0643e99a339ae5", + "reference": "ba4d51eb56de7711b3a37d63aa0643e99a339ae5", + "shasum": "" + }, + "require": { + "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", + "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", + "php": "^7.2.5|^8.0", + "psy/psysh": "^0.11.1|^0.12.0", + "symfony/var-dumper": "^4.3.4|^5.0|^6.0|^7.0" + }, + "require-dev": { + "mockery/mockery": "~1.3.3|^1.4.2", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^8.5.8|^9.3.3" + }, + "suggest": { + "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0|^11.0)." + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Tinker\\TinkerServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Tinker\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Powerful REPL for the Laravel framework.", + "keywords": [ + "REPL", + "Tinker", + "laravel", + "psysh" + ], + "support": { + "issues": "https://github.com/laravel/tinker/issues", + "source": "https://github.com/laravel/tinker/tree/v2.10.0" + }, + "time": "2024-09-23T13:32:56+00:00" + }, + { + "name": "league/commonmark", + "version": "2.5.3", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "b650144166dfa7703e62a22e493b853b58d874b0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/b650144166dfa7703e62a22e493b853b58d874b0", + "reference": "b650144166dfa7703e62a22e493b853b58d874b0", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "league/config": "^1.1.1", + "php": "^7.4 || ^8.0", + "psr/event-dispatcher": "^1.0", + "symfony/deprecation-contracts": "^2.1 || ^3.0", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "cebe/markdown": "^1.0", + "commonmark/cmark": "0.31.1", + "commonmark/commonmark.js": "0.31.1", + "composer/package-versions-deprecated": "^1.8", + "embed/embed": "^4.4", + "erusev/parsedown": "^1.0", + "ext-json": "*", + "github/gfm": "0.29.0", + "michelf/php-markdown": "^1.4 || ^2.0", + "nyholm/psr7": "^1.5", + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0", + "scrutinizer/ocular": "^1.8.1", + "symfony/finder": "^5.3 | ^6.0 || ^7.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 || ^7.0", + "unleashedtech/php-coding-standard": "^3.1.1", + "vimeo/psalm": "^4.24.0 || ^5.0.0" + }, + "suggest": { + "symfony/yaml": "v2.3+ required if using the Front Matter extension" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.6-dev" + } + }, + "autoload": { + "psr-4": { + "League\\CommonMark\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)", + "homepage": "https://commonmark.thephpleague.com", + "keywords": [ + "commonmark", + "flavored", + "gfm", + "github", + "github-flavored", + "markdown", + "md", + "parser" + ], + "support": { + "docs": "https://commonmark.thephpleague.com/", + "forum": "https://github.com/thephpleague/commonmark/discussions", + "issues": "https://github.com/thephpleague/commonmark/issues", + "rss": "https://github.com/thephpleague/commonmark/releases.atom", + "source": "https://github.com/thephpleague/commonmark" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/commonmark", + "type": "tidelift" + } + ], + "time": "2024-08-16T11:46:16+00:00" + }, + { + "name": "league/config", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/config.git", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/config/zipball/754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^3.0.1", + "nette/schema": "^1.2", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.5", + "scrutinizer/ocular": "^1.8.1", + "unleashedtech/php-coding-standard": "^3.1", + "vimeo/psalm": "^4.7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Config\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Define configuration arrays with strict schemas and access values with dot notation", + "homepage": "https://config.thephpleague.com", + "keywords": [ + "array", + "config", + "configuration", + "dot", + "dot-access", + "nested", + "schema" + ], + "support": { + "docs": "https://config.thephpleague.com/", + "issues": "https://github.com/thephpleague/config/issues", + "rss": "https://github.com/thephpleague/config/releases.atom", + "source": "https://github.com/thephpleague/config" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + } + ], + "time": "2022-12-11T20:36:23+00:00" + }, + { + "name": "league/csv", + "version": "9.18.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/csv.git", + "reference": "b02d010e4055ae992247f6ffd1e7b103ef2a0790" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/csv/zipball/b02d010e4055ae992247f6ffd1e7b103ef2a0790", + "reference": "b02d010e4055ae992247f6ffd1e7b103ef2a0790", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "php": "^8.1.2" + }, + "require-dev": { + "ext-dom": "*", + "ext-xdebug": "*", + "friendsofphp/php-cs-fixer": "^3.64.0", + "phpbench/phpbench": "^1.3.1", + "phpstan/phpstan": "^1.12.6", + "phpstan/phpstan-deprecation-rules": "^1.2.1", + "phpstan/phpstan-phpunit": "^1.4.0", + "phpstan/phpstan-strict-rules": "^1.6.1", + "phpunit/phpunit": "^10.5.16 || ^11.4.1", + "symfony/var-dumper": "^6.4.8 || ^7.1.5" + }, + "suggest": { + "ext-dom": "Required to use the XMLConverter and the HTMLConverter classes", + "ext-iconv": "Needed to ease transcoding CSV using iconv stream filters", + "ext-mbstring": "Needed to ease transcoding CSV using mb stream filters" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "League\\Csv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://github.com/nyamsprod/", + "role": "Developer" + } + ], + "description": "CSV data manipulation made easy in PHP", + "homepage": "https://csv.thephpleague.com", + "keywords": [ + "convert", + "csv", + "export", + "filter", + "import", + "read", + "transform", + "write" + ], + "support": { + "docs": "https://csv.thephpleague.com", + "issues": "https://github.com/thephpleague/csv/issues", + "rss": "https://github.com/thephpleague/csv/releases.atom", + "source": "https://github.com/thephpleague/csv" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2024-10-18T08:14:48+00:00" + }, + { + "name": "league/flysystem", + "version": "3.29.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "edc1bb7c86fab0776c3287dbd19b5fa278347319" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/edc1bb7c86fab0776c3287dbd19b5fa278347319", + "reference": "edc1bb7c86fab0776c3287dbd19b5fa278347319", + "shasum": "" + }, + "require": { + "league/flysystem-local": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "conflict": { + "async-aws/core": "<1.19.0", + "async-aws/s3": "<1.14.0", + "aws/aws-sdk-php": "3.209.31 || 3.210.0", + "guzzlehttp/guzzle": "<7.0", + "guzzlehttp/ringphp": "<1.1.1", + "phpseclib/phpseclib": "3.0.15", + "symfony/http-client": "<5.2" + }, + "require-dev": { + "async-aws/s3": "^1.5 || ^2.0", + "async-aws/simple-s3": "^1.1 || ^2.0", + "aws/aws-sdk-php": "^3.295.10", + "composer/semver": "^3.0", + "ext-fileinfo": "*", + "ext-ftp": "*", + "ext-mongodb": "^1.3", + "ext-zip": "*", + "friendsofphp/php-cs-fixer": "^3.5", + "google/cloud-storage": "^1.23", + "guzzlehttp/psr7": "^2.6", + "microsoft/azure-storage-blob": "^1.1", + "mongodb/mongodb": "^1.2", + "phpseclib/phpseclib": "^3.0.36", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^9.5.11|^10.0", + "sabre/dav": "^4.6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "File storage abstraction for PHP", + "keywords": [ + "WebDAV", + "aws", + "cloud", + "file", + "files", + "filesystem", + "filesystems", + "ftp", + "s3", + "sftp", + "storage" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem/issues", + "source": "https://github.com/thephpleague/flysystem/tree/3.29.1" + }, + "time": "2024-10-08T08:58:34+00:00" + }, + { + "name": "league/flysystem-aws-s3-v3", + "version": "3.29.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git", + "reference": "c6ff6d4606e48249b63f269eba7fabdb584e76a9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/c6ff6d4606e48249b63f269eba7fabdb584e76a9", + "reference": "c6ff6d4606e48249b63f269eba7fabdb584e76a9", + "shasum": "" + }, + "require": { + "aws/aws-sdk-php": "^3.295.10", + "league/flysystem": "^3.10.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "conflict": { + "guzzlehttp/guzzle": "<7.0", + "guzzlehttp/ringphp": "<1.1.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\AwsS3V3\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "AWS S3 filesystem adapter for Flysystem.", + "keywords": [ + "Flysystem", + "aws", + "file", + "files", + "filesystem", + "s3", + "storage" + ], + "support": { + "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.29.0" + }, + "time": "2024-08-17T13:10:48+00:00" + }, + { + "name": "league/flysystem-local", + "version": "3.29.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem-local.git", + "reference": "e0e8d52ce4b2ed154148453d321e97c8e931bd27" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/e0e8d52ce4b2ed154148453d321e97c8e931bd27", + "reference": "e0e8d52ce4b2ed154148453d321e97c8e931bd27", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "league/flysystem": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\Local\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Local filesystem adapter for Flysystem.", + "keywords": [ + "Flysystem", + "file", + "files", + "filesystem", + "local" + ], + "support": { + "source": "https://github.com/thephpleague/flysystem-local/tree/3.29.0" + }, + "time": "2024-08-09T21:24:39+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": "league/uri", + "version": "7.4.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri.git", + "reference": "bedb6e55eff0c933668addaa7efa1e1f2c417cc4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/bedb6e55eff0c933668addaa7efa1e1f2c417cc4", + "reference": "bedb6e55eff0c933668addaa7efa1e1f2c417cc4", + "shasum": "" + }, + "require": { + "league/uri-interfaces": "^7.3", + "php": "^8.1" + }, + "conflict": { + "league/uri-schemes": "^1.0" + }, + "suggest": { + "ext-bcmath": "to improve IPV4 host parsing", + "ext-fileinfo": "to create Data URI from file contennts", + "ext-gmp": "to improve IPV4 host parsing", + "ext-intl": "to handle IDN host with the best performance", + "jeremykendall/php-domain-parser": "to resolve Public Suffix and Top Level Domain", + "league/uri-components": "Needed to easily manipulate URI objects components", + "php-64bit": "to improve IPV4 host parsing", + "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "URI manipulation library", + "homepage": "https://uri.thephpleague.com", + "keywords": [ + "data-uri", + "file-uri", + "ftp", + "hostname", + "http", + "https", + "middleware", + "parse_str", + "parse_url", + "psr-7", + "query-string", + "querystring", + "rfc3986", + "rfc3987", + "rfc6570", + "uri", + "uri-template", + "url", + "ws" + ], + "support": { + "docs": "https://uri.thephpleague.com", + "forum": "https://thephpleague.slack.com", + "issues": "https://github.com/thephpleague/uri-src/issues", + "source": "https://github.com/thephpleague/uri/tree/7.4.1" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2024-03-23T07:42:40+00:00" + }, + { + "name": "league/uri-interfaces", + "version": "7.4.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri-interfaces.git", + "reference": "8d43ef5c841032c87e2de015972c06f3865ef718" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/8d43ef5c841032c87e2de015972c06f3865ef718", + "reference": "8d43ef5c841032c87e2de015972c06f3865ef718", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "php": "^8.1", + "psr/http-factory": "^1", + "psr/http-message": "^1.1 || ^2.0" + }, + "suggest": { + "ext-bcmath": "to improve IPV4 host parsing", + "ext-gmp": "to improve IPV4 host parsing", + "ext-intl": "to handle IDN host with the best performance", + "php-64bit": "to improve IPV4 host parsing", + "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "Common interfaces and classes for URI representation and interaction", + "homepage": "https://uri.thephpleague.com", + "keywords": [ + "data-uri", + "file-uri", + "ftp", + "hostname", + "http", + "https", + "parse_str", + "parse_url", + "psr-7", + "query-string", + "querystring", + "rfc3986", + "rfc3987", + "rfc6570", + "uri", + "url", + "ws" + ], + "support": { + "docs": "https://uri.thephpleague.com", + "forum": "https://thephpleague.slack.com", + "issues": "https://github.com/thephpleague/uri-src/issues", + "source": "https://github.com/thephpleague/uri-interfaces/tree/7.4.1" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2024-03-23T07:42:40+00:00" + }, + { + "name": "leandrocfe/filament-apex-charts", + "version": "3.1.4", + "source": { + "type": "git", + "url": "https://github.com/leandrocfe/filament-apex-charts.git", + "reference": "e7cfd3f4966a555f30db6f5fcb2f3b3102bc1e99" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/leandrocfe/filament-apex-charts/zipball/e7cfd3f4966a555f30db6f5fcb2f3b3102bc1e99", + "reference": "e7cfd3f4966a555f30db6f5fcb2f3b3102bc1e99", + "shasum": "" + }, + "require": { + "filament/filament": "^3.0", + "illuminate/contracts": "^9.0|^10.0|^11.0", + "livewire/livewire": "^3.0", + "php": "^8.1|^8.2", + "spatie/laravel-package-tools": "^1.13.0" + }, + "require-dev": { + "larastan/larastan": "^2.0.1", + "laravel/pint": "^1.0", + "nunomaduro/collision": "^6.0|^7.0|^8.0", + "orchestra/testbench": "8.14|^9.0", + "pestphp/pest": "^1.21", + "pestphp/pest-plugin-laravel": "^1.1", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^9.5|^10.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Leandrocfe\\FilamentApexCharts\\FilamentApexChartsServiceProvider" + ], + "aliases": { + "FilamentApexCharts": "Leandrocfe\\FilamentApexCharts\\Facades\\FilamentApexCharts" + } + } + }, + "autoload": { + "psr-4": { + "Leandrocfe\\FilamentApexCharts\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Leandro Costa Ferreira", + "email": "leandrocfe@gmail.com", + "role": "Developer" + } + ], + "description": "Apex Charts integration for Filament PHP.", + "homepage": "https://github.com/leandrocfe/filament-apex-charts", + "keywords": [ + "apexcharts", + "filament-apex-charts", + "laravel", + "leandrocfe" + ], + "support": { + "issues": "https://github.com/leandrocfe/filament-apex-charts/issues", + "source": "https://github.com/leandrocfe/filament-apex-charts/tree/3.1.4" + }, + "time": "2024-09-14T13:57:27+00:00" + }, + { + "name": "livewire/livewire", + "version": "v3.5.12", + "source": { + "type": "git", + "url": "https://github.com/livewire/livewire.git", + "reference": "3c8d1f9d7d9098aaea663093ae168f2d5d2ae73d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/livewire/livewire/zipball/3c8d1f9d7d9098aaea663093ae168f2d5d2ae73d", + "reference": "3c8d1f9d7d9098aaea663093ae168f2d5d2ae73d", + "shasum": "" + }, + "require": { + "illuminate/database": "^10.0|^11.0", + "illuminate/routing": "^10.0|^11.0", + "illuminate/support": "^10.0|^11.0", + "illuminate/validation": "^10.0|^11.0", + "laravel/prompts": "^0.1.24|^0.2|^0.3", + "league/mime-type-detection": "^1.9", + "php": "^8.1", + "symfony/console": "^6.0|^7.0", + "symfony/http-kernel": "^6.2|^7.0" + }, + "require-dev": { + "calebporzio/sushi": "^2.1", + "laravel/framework": "^10.15.0|^11.0", + "mockery/mockery": "^1.3.1", + "orchestra/testbench": "^8.21.0|^9.0", + "orchestra/testbench-dusk": "^8.24|^9.1", + "phpunit/phpunit": "^10.4", + "psy/psysh": "^0.11.22|^0.12" + }, + "type": "library", + "extra": { + "laravel": { + "aliases": { + "Livewire": "Livewire\\Livewire" + }, + "providers": [ + "Livewire\\LivewireServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Livewire\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Caleb Porzio", + "email": "calebporzio@gmail.com" + } + ], + "description": "A front-end framework for Laravel.", + "support": { + "issues": "https://github.com/livewire/livewire/issues", + "source": "https://github.com/livewire/livewire/tree/v3.5.12" + }, + "funding": [ + { + "url": "https://github.com/livewire", + "type": "github" + } + ], + "time": "2024-10-15T19:35:06+00:00" + }, + { + "name": "maatwebsite/excel", + "version": "3.1.61", + "source": { + "type": "git", + "url": "https://github.com/SpartnerNL/Laravel-Excel.git", + "reference": "62616317c5ec07e885c5d7f6b537f57a7239c2ff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/SpartnerNL/Laravel-Excel/zipball/62616317c5ec07e885c5d7f6b537f57a7239c2ff", + "reference": "62616317c5ec07e885c5d7f6b537f57a7239c2ff", + "shasum": "" + }, + "require": { + "composer/semver": "^3.3", + "ext-json": "*", + "illuminate/support": "5.8.*||^6.0||^7.0||^8.0||^9.0||^10.0||^11.0", + "php": "^7.0||^8.0", + "phpoffice/phpspreadsheet": "^1.29.4", + "psr/simple-cache": "^1.0||^2.0||^3.0" + }, + "require-dev": { + "laravel/scout": "^7.0||^8.0||^9.0||^10.0", + "orchestra/testbench": "^6.0||^7.0||^8.0||^9.0", + "predis/predis": "^1.1" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Maatwebsite\\Excel\\ExcelServiceProvider" + ], + "aliases": { + "Excel": "Maatwebsite\\Excel\\Facades\\Excel" + } + } + }, + "autoload": { + "psr-4": { + "Maatwebsite\\Excel\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Patrick Brouwers", + "email": "patrick@spartner.nl" + } + ], + "description": "Supercharged Excel exports and imports in Laravel", + "keywords": [ + "PHPExcel", + "batch", + "csv", + "excel", + "export", + "import", + "laravel", + "php", + "phpspreadsheet" + ], + "support": { + "issues": "https://github.com/SpartnerNL/Laravel-Excel/issues", + "source": "https://github.com/SpartnerNL/Laravel-Excel/tree/3.1.61" + }, + "funding": [ + { + "url": "https://laravel-excel.com/commercial-support", + "type": "custom" + }, + { + "url": "https://github.com/patrickbrouwers", + "type": "github" + } + ], + "time": "2024-11-25T18:41:59+00:00" + }, + { + "name": "maennchen/zipstream-php", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/maennchen/ZipStream-PHP.git", + "reference": "6187e9cc4493da94b9b63eb2315821552015fca9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/6187e9cc4493da94b9b63eb2315821552015fca9", + "reference": "6187e9cc4493da94b9b63eb2315821552015fca9", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "ext-zlib": "*", + "php-64bit": "^8.1" + }, + "require-dev": { + "ext-zip": "*", + "friendsofphp/php-cs-fixer": "^3.16", + "guzzlehttp/guzzle": "^7.5", + "mikey179/vfsstream": "^1.6", + "php-coveralls/php-coveralls": "^2.5", + "phpunit/phpunit": "^10.0", + "vimeo/psalm": "^5.0" + }, + "suggest": { + "guzzlehttp/psr7": "^2.4", + "psr/http-message": "^2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "ZipStream\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paul Duncan", + "email": "pabs@pablotron.org" + }, + { + "name": "Jonatan Männchen", + "email": "jonatan@maennchen.ch" + }, + { + "name": "Jesse Donat", + "email": "donatj@gmail.com" + }, + { + "name": "András Kolesár", + "email": "kolesar@kolesar.hu" + } + ], + "description": "ZipStream is a library for dynamically streaming dynamic zip files from PHP without writing to the disk at all on the server.", + "keywords": [ + "stream", + "zip" + ], + "support": { + "issues": "https://github.com/maennchen/ZipStream-PHP/issues", + "source": "https://github.com/maennchen/ZipStream-PHP/tree/3.1.1" + }, + "funding": [ + { + "url": "https://github.com/maennchen", + "type": "github" + } + ], + "time": "2024-10-10T12:33:01+00:00" + }, + { + "name": "markbaker/complex", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/MarkBaker/PHPComplex.git", + "reference": "95c56caa1cf5c766ad6d65b6344b807c1e8405b9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/MarkBaker/PHPComplex/zipball/95c56caa1cf5c766ad6d65b6344b807c1e8405b9", + "reference": "95c56caa1cf5c766ad6d65b6344b807c1e8405b9", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "dev-master", + "phpcompatibility/php-compatibility": "^9.3", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", + "squizlabs/php_codesniffer": "^3.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Complex\\": "classes/src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark Baker", + "email": "mark@lange.demon.co.uk" + } + ], + "description": "PHP Class for working with complex numbers", + "homepage": "https://github.com/MarkBaker/PHPComplex", + "keywords": [ + "complex", + "mathematics" + ], + "support": { + "issues": "https://github.com/MarkBaker/PHPComplex/issues", + "source": "https://github.com/MarkBaker/PHPComplex/tree/3.0.2" + }, + "time": "2022-12-06T16:21:08+00:00" + }, + { + "name": "markbaker/matrix", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/MarkBaker/PHPMatrix.git", + "reference": "728434227fe21be27ff6d86621a1b13107a2562c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/MarkBaker/PHPMatrix/zipball/728434227fe21be27ff6d86621a1b13107a2562c", + "reference": "728434227fe21be27ff6d86621a1b13107a2562c", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "dev-master", + "phpcompatibility/php-compatibility": "^9.3", + "phpdocumentor/phpdocumentor": "2.*", + "phploc/phploc": "^4.0", + "phpmd/phpmd": "2.*", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", + "sebastian/phpcpd": "^4.0", + "squizlabs/php_codesniffer": "^3.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Matrix\\": "classes/src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark Baker", + "email": "mark@demon-angel.eu" + } + ], + "description": "PHP Class for working with matrices", + "homepage": "https://github.com/MarkBaker/PHPMatrix", + "keywords": [ + "mathematics", + "matrix", + "vector" + ], + "support": { + "issues": "https://github.com/MarkBaker/PHPMatrix/issues", + "source": "https://github.com/MarkBaker/PHPMatrix/tree/3.0.1" + }, + "time": "2022-12-02T22:17:43+00:00" + }, + { + "name": "masterminds/html5", + "version": "2.9.0", + "source": { + "type": "git", + "url": "https://github.com/Masterminds/html5-php.git", + "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/f5ac2c0b0a2eefca70b2ce32a5809992227e75a6", + "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8 || ^9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Masterminds\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matt Butcher", + "email": "technosophos@gmail.com" + }, + { + "name": "Matt Farina", + "email": "matt@mattfarina.com" + }, + { + "name": "Asmir Mustafic", + "email": "goetas@gmail.com" + } + ], + "description": "An HTML5 parser and serializer.", + "homepage": "http://masterminds.github.io/html5-php", + "keywords": [ + "HTML5", + "dom", + "html", + "parser", + "querypath", + "serializer", + "xml" + ], + "support": { + "issues": "https://github.com/Masterminds/html5-php/issues", + "source": "https://github.com/Masterminds/html5-php/tree/2.9.0" + }, + "time": "2024-03-31T07:05:07+00:00" + }, + { + "name": "monolog/monolog", + "version": "3.8.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "32e515fdc02cdafbe4593e30a9350d486b125b67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/32e515fdc02cdafbe4593e30a9350d486b125b67", + "reference": "32e515fdc02cdafbe4593e30a9350d486b125b67", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^2.0 || ^3.0" + }, + "provide": { + "psr/log-implementation": "3.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", + "graylog2/gelf-php": "^1.4.2 || ^2.0", + "guzzlehttp/guzzle": "^7.4.5", + "guzzlehttp/psr7": "^2.2", + "mongodb/mongodb": "^1.8", + "php-amqplib/php-amqplib": "~2.4 || ^3", + "php-console/php-console": "^3.1.8", + "phpstan/phpstan": "^2", + "phpstan/phpstan-deprecation-rules": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^10.5.17 || ^11.0.7", + "predis/predis": "^1.1 || ^2", + "rollbar/rollbar": "^4.0", + "ruflin/elastica": "^7 || ^8", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "ext-openssl": "Required to send log messages using SSL", + "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "https://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/3.8.0" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2024-11-12T13:57:08+00:00" + }, + { + "name": "mtdowling/jmespath.php", + "version": "2.8.0", + "source": { + "type": "git", + "url": "https://github.com/jmespath/jmespath.php.git", + "reference": "a2a865e05d5f420b50cc2f85bb78d565db12a6bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/a2a865e05d5f420b50cc2f85bb78d565db12a6bc", + "reference": "a2a865e05d5f420b50cc2f85bb78d565db12a6bc", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "symfony/polyfill-mbstring": "^1.17" + }, + "require-dev": { + "composer/xdebug-handler": "^3.0.3", + "phpunit/phpunit": "^8.5.33" + }, + "bin": [ + "bin/jp.php" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "files": [ + "src/JmesPath.php" + ], + "psr-4": { + "JmesPath\\": "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" + } + ], + "description": "Declaratively specify how to extract elements from a JSON document", + "keywords": [ + "json", + "jsonpath" + ], + "support": { + "issues": "https://github.com/jmespath/jmespath.php/issues", + "source": "https://github.com/jmespath/jmespath.php/tree/2.8.0" + }, + "time": "2024-09-04T18:46:31+00:00" + }, + { + "name": "nesbot/carbon", + "version": "3.8.2", + "source": { + "type": "git", + "url": "https://github.com/briannesbitt/Carbon.git", + "reference": "e1268cdbc486d97ce23fef2c666dc3c6b6de9947" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/e1268cdbc486d97ce23fef2c666dc3c6b6de9947", + "reference": "e1268cdbc486d97ce23fef2c666dc3c6b6de9947", + "shasum": "" + }, + "require": { + "carbonphp/carbon-doctrine-types": "<100.0", + "ext-json": "*", + "php": "^8.1", + "psr/clock": "^1.0", + "symfony/clock": "^6.3 || ^7.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/translation": "^4.4.18 || ^5.2.1|| ^6.0 || ^7.0" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "require-dev": { + "doctrine/dbal": "^3.6.3 || ^4.0", + "doctrine/orm": "^2.15.2 || ^3.0", + "friendsofphp/php-cs-fixer": "^3.57.2", + "kylekatarnls/multi-tester": "^2.5.3", + "ondrejmirtes/better-reflection": "^6.25.0.4", + "phpmd/phpmd": "^2.15.0", + "phpstan/extension-installer": "^1.3.1", + "phpstan/phpstan": "^1.11.2", + "phpunit/phpunit": "^10.5.20", + "squizlabs/php_codesniffer": "^3.9.0" + }, + "bin": [ + "bin/carbon" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev", + "dev-2.x": "2.x-dev" + }, + "laravel": { + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "autoload": { + "psr-4": { + "Carbon\\": "src/Carbon/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "https://markido.com" + }, + { + "name": "kylekatarnls", + "homepage": "https://github.com/kylekatarnls" + } + ], + "description": "An API extension for DateTime that supports 281 different languages.", + "homepage": "https://carbon.nesbot.com", + "keywords": [ + "date", + "datetime", + "time" + ], + "support": { + "docs": "https://carbon.nesbot.com/docs", + "issues": "https://github.com/briannesbitt/Carbon/issues", + "source": "https://github.com/briannesbitt/Carbon" + }, + "funding": [ + { + "url": "https://github.com/sponsors/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon#sponsor", + "type": "opencollective" + }, + { + "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme", + "type": "tidelift" + } + ], + "time": "2024-11-07T17:46:48+00:00" + }, + { + "name": "nette/schema", + "version": "v1.3.2", + "source": { + "type": "git", + "url": "https://github.com/nette/schema.git", + "reference": "da801d52f0354f70a638673c4a0f04e16529431d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/schema/zipball/da801d52f0354f70a638673c4a0f04e16529431d", + "reference": "da801d52f0354f70a638673c4a0f04e16529431d", + "shasum": "" + }, + "require": { + "nette/utils": "^4.0", + "php": "8.1 - 8.4" + }, + "require-dev": { + "nette/tester": "^2.5.2", + "phpstan/phpstan-nette": "^1.0", + "tracy/tracy": "^2.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "📐 Nette Schema: validating data structures against a given Schema.", + "homepage": "https://nette.org", + "keywords": [ + "config", + "nette" + ], + "support": { + "issues": "https://github.com/nette/schema/issues", + "source": "https://github.com/nette/schema/tree/v1.3.2" + }, + "time": "2024-10-06T23:10:23+00:00" + }, + { + "name": "nette/utils", + "version": "v4.0.5", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/736c567e257dbe0fcf6ce81b4d6dbe05c6899f96", + "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96", + "shasum": "" + }, + "require": { + "php": "8.0 - 8.4" + }, + "conflict": { + "nette/finder": "<3", + "nette/schema": "<1.2.2" + }, + "require-dev": { + "jetbrains/phpstorm-attributes": "dev-master", + "nette/tester": "^2.5", + "phpstan/phpstan": "^1.0", + "tracy/tracy": "^2.9" + }, + "suggest": { + "ext-gd": "to use Image", + "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", + "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", + "ext-json": "to use Nette\\Utils\\Json", + "ext-mbstring": "to use Strings::lower() etc...", + "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "homepage": "https://nette.org", + "keywords": [ + "array", + "core", + "datetime", + "images", + "json", + "nette", + "paginator", + "password", + "slugify", + "string", + "unicode", + "utf-8", + "utility", + "validation" + ], + "support": { + "issues": "https://github.com/nette/utils/issues", + "source": "https://github.com/nette/utils/tree/v4.0.5" + }, + "time": "2024-08-07T15:39:19+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v5.3.1", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/8eea230464783aa9671db8eea6f8c6ac5285794b", + "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "php": ">=7.4" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v5.3.1" + }, + "time": "2024-10-08T18:51:32+00:00" + }, + { + "name": "nunomaduro/termwind", + "version": "v2.3.0", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/termwind.git", + "reference": "52915afe6a1044e8b9cee1bcff836fb63acf9cda" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/52915afe6a1044e8b9cee1bcff836fb63acf9cda", + "reference": "52915afe6a1044e8b9cee1bcff836fb63acf9cda", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^8.2", + "symfony/console": "^7.1.8" + }, + "require-dev": { + "illuminate/console": "^11.33.2", + "laravel/pint": "^1.18.2", + "mockery/mockery": "^1.6.12", + "pestphp/pest": "^2.36.0", + "phpstan/phpstan": "^1.12.11", + "phpstan/phpstan-strict-rules": "^1.6.1", + "symfony/var-dumper": "^7.1.8", + "thecodingmachine/phpstan-strict-rules": "^1.0.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Termwind\\Laravel\\TermwindServiceProvider" + ] + }, + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, + "autoload": { + "files": [ + "src/Functions.php" + ], + "psr-4": { + "Termwind\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Its like Tailwind CSS, but for the console.", + "keywords": [ + "cli", + "console", + "css", + "package", + "php", + "style" + ], + "support": { + "issues": "https://github.com/nunomaduro/termwind/issues", + "source": "https://github.com/nunomaduro/termwind/tree/v2.3.0" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://github.com/xiCO2k", + "type": "github" + } + ], + "time": "2024-11-21T10:39:51+00:00" + }, + { + "name": "openspout/openspout", + "version": "v4.28.0", + "source": { + "type": "git", + "url": "https://github.com/openspout/openspout.git", + "reference": "3e9ef74f13ba5e887e4afc7a4e0110e63559e902" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/openspout/openspout/zipball/3e9ef74f13ba5e887e4afc7a4e0110e63559e902", + "reference": "3e9ef74f13ba5e887e4afc7a4e0110e63559e902", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-fileinfo": "*", + "ext-filter": "*", + "ext-libxml": "*", + "ext-xmlreader": "*", + "ext-zip": "*", + "php": "~8.2.0 || ~8.3.0 || ~8.4.0" + }, + "require-dev": { + "ext-zlib": "*", + "friendsofphp/php-cs-fixer": "^3.65.0", + "infection/infection": "^0.29.8", + "phpbench/phpbench": "^1.3.1", + "phpstan/phpstan": "^2.0.3", + "phpstan/phpstan-phpunit": "^2.0.1", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^11.4.4" + }, + "suggest": { + "ext-iconv": "To handle non UTF-8 CSV files (if \"php-mbstring\" is not already installed or is too limited)", + "ext-mbstring": "To handle non UTF-8 CSV files (if \"iconv\" is not already installed)" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3.x-dev" + } + }, + "autoload": { + "psr-4": { + "OpenSpout\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Adrien Loison", + "email": "adrien@box.com" + } + ], + "description": "PHP Library to read and write spreadsheet files (CSV, XLSX and ODS), in a fast and scalable way", + "homepage": "https://github.com/openspout/openspout", + "keywords": [ + "OOXML", + "csv", + "excel", + "memory", + "odf", + "ods", + "office", + "open", + "php", + "read", + "scale", + "spreadsheet", + "stream", + "write", + "xlsx" + ], + "support": { + "issues": "https://github.com/openspout/openspout/issues", + "source": "https://github.com/openspout/openspout/tree/v4.28.0" + }, + "funding": [ + { + "url": "https://paypal.me/filippotessarotto", + "type": "custom" + }, + { + "url": "https://github.com/Slamdunk", + "type": "github" + } + ], + "time": "2024-11-29T09:45:53+00:00" + }, + { + "name": "phpoffice/phpspreadsheet", + "version": "1.29.6", + "source": { + "type": "git", + "url": "https://github.com/PHPOffice/PhpSpreadsheet.git", + "reference": "08597725b84570cd6f32bf0ea92e75a803ef28c2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/08597725b84570cd6f32bf0ea92e75a803ef28c2", + "reference": "08597725b84570cd6f32bf0ea92e75a803ef28c2", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-dom": "*", + "ext-fileinfo": "*", + "ext-gd": "*", + "ext-iconv": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-simplexml": "*", + "ext-xml": "*", + "ext-xmlreader": "*", + "ext-xmlwriter": "*", + "ext-zip": "*", + "ext-zlib": "*", + "ezyang/htmlpurifier": "^4.15", + "maennchen/zipstream-php": "^2.1 || ^3.0", + "markbaker/complex": "^3.0", + "markbaker/matrix": "^3.0", + "php": "^7.4 || ^8.0", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0", + "psr/simple-cache": "^1.0 || ^2.0 || ^3.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "dev-main", + "dompdf/dompdf": "^1.0 || ^2.0 || ^3.0", + "friendsofphp/php-cs-fixer": "^3.2", + "mitoteam/jpgraph": "^10.3", + "mpdf/mpdf": "^8.1.1", + "phpcompatibility/php-compatibility": "^9.3", + "phpstan/phpstan": "^1.1", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^8.5 || ^9.0", + "squizlabs/php_codesniffer": "^3.7", + "tecnickcom/tcpdf": "^6.5" + }, + "suggest": { + "dompdf/dompdf": "Option for rendering PDF with PDF Writer", + "ext-intl": "PHP Internationalization Functions", + "mitoteam/jpgraph": "Option for rendering charts, or including charts with PDF or HTML Writers", + "mpdf/mpdf": "Option for rendering PDF with PDF Writer", + "tecnickcom/tcpdf": "Option for rendering PDF with PDF Writer" + }, + "type": "library", + "autoload": { + "psr-4": { + "PhpOffice\\PhpSpreadsheet\\": "src/PhpSpreadsheet" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Maarten Balliauw", + "homepage": "https://blog.maartenballiauw.be" + }, + { + "name": "Mark Baker", + "homepage": "https://markbakeruk.net" + }, + { + "name": "Franck Lefevre", + "homepage": "https://rootslabs.net" + }, + { + "name": "Erik Tilt" + }, + { + "name": "Adrien Crivelli" + } + ], + "description": "PHPSpreadsheet - Read, Create and Write Spreadsheet documents in PHP - Spreadsheet engine", + "homepage": "https://github.com/PHPOffice/PhpSpreadsheet", + "keywords": [ + "OpenXML", + "excel", + "gnumeric", + "ods", + "php", + "spreadsheet", + "xls", + "xlsx" + ], + "support": { + "issues": "https://github.com/PHPOffice/PhpSpreadsheet/issues", + "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/1.29.6" + }, + "time": "2024-12-08T05:49:00+00:00" + }, + { + "name": "phpoption/phpoption", + "version": "1.9.3", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/e3fac8b24f56113f7cb96af14958c0dd16330f54", + "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpOption\\": "src/PhpOption/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh" + }, + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ], + "support": { + "issues": "https://github.com/schmittjoh/php-option/issues", + "source": "https://github.com/schmittjoh/php-option/tree/1.9.3" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" + } + ], + "time": "2024-07-20T21:41:07+00:00" + }, + { + "name": "predis/predis", + "version": "v2.3.0", + "source": { + "type": "git", + "url": "https://github.com/predis/predis.git", + "reference": "bac46bfdb78cd6e9c7926c697012aae740cb9ec9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/predis/predis/zipball/bac46bfdb78cd6e9c7926c697012aae740cb9ec9", + "reference": "bac46bfdb78cd6e9c7926c697012aae740cb9ec9", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.3", + "phpstan/phpstan": "^1.9", + "phpunit/phpunit": "^8.0 || ^9.4" + }, + "suggest": { + "ext-relay": "Faster connection with in-memory caching (>=0.6.2)" + }, + "type": "library", + "autoload": { + "psr-4": { + "Predis\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Till Krüss", + "homepage": "https://till.im", + "role": "Maintainer" + } + ], + "description": "A flexible and feature-complete Redis client for PHP.", + "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/v2.3.0" + }, + "funding": [ + { + "url": "https://github.com/sponsors/tillkruss", + "type": "github" + } + ], + "time": "2024-11-21T20:00:02+00:00" + }, + { + "name": "psr/cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "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/3.0.0" + }, + "time": "2021-02-03T23:26:27+00:00" + }, + { + "name": "psr/clock", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Clock\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", + "keywords": [ + "clock", + "now", + "psr", + "psr-20", + "time" + ], + "support": { + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" + }, + "time": "2022-11-25T14:36:26+00:00" + }, + { + "name": "psr/container", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client" + }, + "time": "2023-09-23T14:17:50+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory" + }, + "time": "2024-04-15T12:06:14+00:00" + }, + { + "name": "psr/http-message", + "version": "2.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/2.0" + }, + "time": "2023-04-04T09:54:51+00:00" + }, + { + "name": "psr/log", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.2" + }, + "time": "2024-09-11T13:17:53+00:00" + }, + { + "name": "psr/simple-cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" + }, + "time": "2021-10-29T13:26:27+00:00" + }, + { + "name": "psy/psysh", + "version": "v0.12.5", + "source": { + "type": "git", + "url": "https://github.com/bobthecow/psysh.git", + "reference": "36a03ff27986682c22985e56aabaf840dd173cb5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/36a03ff27986682c22985e56aabaf840dd173cb5", + "reference": "36a03ff27986682c22985e56aabaf840dd173cb5", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-tokenizer": "*", + "nikic/php-parser": "^5.0 || ^4.0", + "php": "^8.0 || ^7.4", + "symfony/console": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4", + "symfony/var-dumper": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4" + }, + "conflict": { + "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.2" + }, + "suggest": { + "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", + "ext-pdo-sqlite": "The doc command requires SQLite to work.", + "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well." + }, + "bin": [ + "bin/psysh" + ], + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": false, + "forward-command": false + }, + "branch-alias": { + "dev-main": "0.12.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Psy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Justin Hileman", + "email": "justin@justinhileman.info", + "homepage": "http://justinhileman.com" + } + ], + "description": "An interactive shell for modern PHP.", + "homepage": "http://psysh.org", + "keywords": [ + "REPL", + "console", + "interactive", + "shell" + ], + "support": { + "issues": "https://github.com/bobthecow/psysh/issues", + "source": "https://github.com/bobthecow/psysh/tree/v0.12.5" + }, + "time": "2024-11-29T06:14:30+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "ramsey/collection", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/ramsey/collection.git", + "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/collection/zipball/a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", + "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "captainhook/plugin-composer": "^5.3", + "ergebnis/composer-normalize": "^2.28.3", + "fakerphp/faker": "^1.21", + "hamcrest/hamcrest-php": "^2.0", + "jangregor/phpstan-prophecy": "^1.0", + "mockery/mockery": "^1.5", + "php-parallel-lint/php-console-highlighter": "^1.0", + "php-parallel-lint/php-parallel-lint": "^1.3", + "phpcsstandards/phpcsutils": "^1.0.0-rc1", + "phpspec/prophecy-phpunit": "^2.0", + "phpstan/extension-installer": "^1.2", + "phpstan/phpstan": "^1.9", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5", + "psalm/plugin-mockery": "^1.1", + "psalm/plugin-phpunit": "^0.18.4", + "ramsey/coding-standard": "^2.0.3", + "ramsey/conventional-commits": "^1.3", + "vimeo/psalm": "^5.4" + }, + "type": "library", + "extra": { + "captainhook": { + "force-install": true + }, + "ramsey/conventional-commits": { + "configFile": "conventional-commits.json" + } + }, + "autoload": { + "psr-4": { + "Ramsey\\Collection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + } + ], + "description": "A PHP library for representing and manipulating collections.", + "keywords": [ + "array", + "collection", + "hash", + "map", + "queue", + "set" + ], + "support": { + "issues": "https://github.com/ramsey/collection/issues", + "source": "https://github.com/ramsey/collection/tree/2.0.0" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", + "type": "tidelift" + } + ], + "time": "2022-12-31T21:50:55+00:00" + }, + { + "name": "ramsey/uuid", + "version": "4.7.6", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "91039bc1faa45ba123c4328958e620d382ec7088" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/91039bc1faa45ba123c4328958e620d382ec7088", + "reference": "91039bc1faa45ba123c4328958e620d382ec7088", + "shasum": "" + }, + "require": { + "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12", + "ext-json": "*", + "php": "^8.0", + "ramsey/collection": "^1.2 || ^2.0" + }, + "replace": { + "rhumsaa/uuid": "self.version" + }, + "require-dev": { + "captainhook/captainhook": "^5.10", + "captainhook/plugin-composer": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "doctrine/annotations": "^1.8", + "ergebnis/composer-normalize": "^2.15", + "mockery/mockery": "^1.3", + "paragonie/random-lib": "^2", + "php-mock/php-mock": "^2.2", + "php-mock/php-mock-mockery": "^1.3", + "php-parallel-lint/php-parallel-lint": "^1.1", + "phpbench/phpbench": "^1.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^8.5 || ^9", + "ramsey/composer-repl": "^1.4", + "slevomat/coding-standard": "^8.4", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.9" + }, + "suggest": { + "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", + "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", + "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", + "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + }, + "type": "library", + "extra": { + "captainhook": { + "force-install": true + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Ramsey\\Uuid\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", + "keywords": [ + "guid", + "identifier", + "uuid" + ], + "support": { + "issues": "https://github.com/ramsey/uuid/issues", + "source": "https://github.com/ramsey/uuid/tree/4.7.6" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid", + "type": "tidelift" + } + ], + "time": "2024-04-27T21:32:50+00:00" + }, + { + "name": "ryangjchandler/blade-capture-directive", + "version": "v1.0.0", + "source": { + "type": "git", + "url": "https://github.com/ryangjchandler/blade-capture-directive.git", + "reference": "cb6f58663d97f17bece176295240b740835e14f1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ryangjchandler/blade-capture-directive/zipball/cb6f58663d97f17bece176295240b740835e14f1", + "reference": "cb6f58663d97f17bece176295240b740835e14f1", + "shasum": "" + }, + "require": { + "illuminate/contracts": "^10.0|^11.0", + "php": "^8.1", + "spatie/laravel-package-tools": "^1.9.2" + }, + "require-dev": { + "nunomaduro/collision": "^7.0|^8.0", + "nunomaduro/larastan": "^2.0", + "orchestra/testbench": "^8.0|^9.0", + "pestphp/pest": "^2.0", + "pestphp/pest-plugin-laravel": "^2.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^10.0", + "spatie/laravel-ray": "^1.26" + }, + "type": "library", + "extra": { + "laravel": { + "aliases": { + "BladeCaptureDirective": "RyanChandler\\BladeCaptureDirective\\Facades\\BladeCaptureDirective" + }, + "providers": [ + "RyanChandler\\BladeCaptureDirective\\BladeCaptureDirectiveServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "RyanChandler\\BladeCaptureDirective\\": "src", + "RyanChandler\\BladeCaptureDirective\\Database\\Factories\\": "database/factories" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ryan Chandler", + "email": "support@ryangjchandler.co.uk", + "role": "Developer" + } + ], + "description": "Create inline partials in your Blade templates with ease.", + "homepage": "https://github.com/ryangjchandler/blade-capture-directive", + "keywords": [ + "blade-capture-directive", + "laravel", + "ryangjchandler" + ], + "support": { + "issues": "https://github.com/ryangjchandler/blade-capture-directive/issues", + "source": "https://github.com/ryangjchandler/blade-capture-directive/tree/v1.0.0" + }, + "funding": [ + { + "url": "https://github.com/ryangjchandler", + "type": "github" + } + ], + "time": "2024-02-26T18:08:49+00:00" + }, + { + "name": "saade/filament-fullcalendar", + "version": "v3.2.2", + "source": { + "type": "git", + "url": "https://github.com/saade/filament-fullcalendar.git", + "reference": "d40410e6bc46057628fb9fa8f62b6090452914d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/saade/filament-fullcalendar/zipball/d40410e6bc46057628fb9fa8f62b6090452914d3", + "reference": "d40410e6bc46057628fb9fa8f62b6090452914d3", + "shasum": "" + }, + "require": { + "filament/filament": "^3.0", + "illuminate/contracts": "^10.0|^11.0", + "php": "^8.1", + "spatie/laravel-package-tools": "^1.13.5" + }, + "require-dev": { + "nunomaduro/collision": "^7.0|^8.0", + "nunomaduro/larastan": "^2.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "spatie/laravel-ray": "^1.26" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Saade\\FilamentFullCalendar\\FilamentFullCalendarServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Saade\\FilamentFullCalendar\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Saade", + "email": "saade@outlook.com.br", + "role": "Developer" + } + ], + "description": "The Most Popular JavaScript Calendar integrated with Filament 💛", + "homepage": "https://github.com/saade/filament-fullcalendar", + "keywords": [ + "filament-fullcalendar", + "laravel", + "saade" + ], + "support": { + "issues": "https://github.com/saade/filament-fullcalendar/issues", + "source": "https://github.com/saade/filament-fullcalendar/tree/v3.2.2" + }, + "funding": [ + { + "url": "https://github.com/saade", + "type": "github" + } + ], + "time": "2024-05-02T13:04:39+00:00" + }, + { + "name": "spatie/color", + "version": "1.6.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/color.git", + "reference": "4c540ffbef68a3df3d209718ae06deaab081e708" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/color/zipball/4c540ffbef68a3df3d209718ae06deaab081e708", + "reference": "4c540ffbef68a3df3d209718ae06deaab081e708", + "shasum": "" + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "pestphp/pest": "^1.22", + "phpunit/phpunit": "^6.5||^9.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\Color\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Sebastian De Deyne", + "email": "sebastian@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "A little library to handle color conversions", + "homepage": "https://github.com/spatie/color", + "keywords": [ + "color", + "conversion", + "rgb", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/color/issues", + "source": "https://github.com/spatie/color/tree/1.6.1" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2024-11-18T15:00:47+00:00" + }, + { + "name": "spatie/invade", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/spatie/invade.git", + "reference": "b920f6411d21df4e8610a138e2e87ae4957d7f63" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/invade/zipball/b920f6411d21df4e8610a138e2e87ae4957d7f63", + "reference": "b920f6411d21df4e8610a138e2e87ae4957d7f63", + "shasum": "" + }, + "require": { + "php": "^8.0" + }, + "require-dev": { + "pestphp/pest": "^1.20", + "phpstan/phpstan": "^1.4", + "spatie/ray": "^1.28" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Spatie\\Invade\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "role": "Developer" + } + ], + "description": "A PHP function to work with private properties and methods", + "homepage": "https://github.com/spatie/invade", + "keywords": [ + "invade", + "spatie" + ], + "support": { + "source": "https://github.com/spatie/invade/tree/2.1.0" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2024-05-17T09:06:10+00:00" + }, + { + "name": "spatie/laravel-package-tools", + "version": "1.16.6", + "source": { + "type": "git", + "url": "https://github.com/spatie/laravel-package-tools.git", + "reference": "1f26942dc1e5c49eacfced34fdbc29ed234bd7b3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/1f26942dc1e5c49eacfced34fdbc29ed234bd7b3", + "reference": "1f26942dc1e5c49eacfced34fdbc29ed234bd7b3", + "shasum": "" + }, + "require": { + "illuminate/contracts": "^9.28|^10.0|^11.0", + "php": "^8.0" + }, + "require-dev": { + "mockery/mockery": "^1.5", + "orchestra/testbench": "^7.7|^8.0", + "pestphp/pest": "^1.22", + "phpunit/phpunit": "^9.5.24", + "spatie/pest-plugin-test-time": "^1.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\LaravelPackageTools\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "role": "Developer" + } + ], + "description": "Tools for creating Laravel packages", + "homepage": "https://github.com/spatie/laravel-package-tools", + "keywords": [ + "laravel-package-tools", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/laravel-package-tools/issues", + "source": "https://github.com/spatie/laravel-package-tools/tree/1.16.6" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2024-11-18T15:02:02+00:00" + }, + { + "name": "spatie/laravel-permission", + "version": "6.10.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/laravel-permission.git", + "reference": "8bb69d6d67387f7a00d93a2f5fab98860f06e704" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/laravel-permission/zipball/8bb69d6d67387f7a00d93a2f5fab98860f06e704", + "reference": "8bb69d6d67387f7a00d93a2f5fab98860f06e704", + "shasum": "" + }, + "require": { + "illuminate/auth": "^8.12|^9.0|^10.0|^11.0", + "illuminate/container": "^8.12|^9.0|^10.0|^11.0", + "illuminate/contracts": "^8.12|^9.0|^10.0|^11.0", + "illuminate/database": "^8.12|^9.0|^10.0|^11.0", + "php": "^8.0" + }, + "require-dev": { + "larastan/larastan": "^1.0|^2.0", + "laravel/passport": "^11.0|^12.0", + "orchestra/testbench": "^6.23|^7.0|^8.0|^9.0", + "phpunit/phpunit": "^9.4|^10.1" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Spatie\\Permission\\PermissionServiceProvider" + ] + }, + "branch-alias": { + "dev-main": "6.x-dev", + "dev-master": "6.x-dev" + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Spatie\\Permission\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "Permission handling for Laravel 8.0 and up", + "homepage": "https://github.com/spatie/laravel-permission", + "keywords": [ + "acl", + "laravel", + "permission", + "permissions", + "rbac", + "roles", + "security", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/laravel-permission/issues", + "source": "https://github.com/spatie/laravel-permission/tree/6.10.1" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2024-11-08T18:45:41+00:00" + }, + { + "name": "symfony/clock", + "version": "v7.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/clock.git", + "reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/clock/zipball/b81435fbd6648ea425d1ee96a2d8e68f4ceacd24", + "reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/clock": "^1.0", + "symfony/polyfill-php83": "^1.28" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/now.php" + ], + "psr-4": { + "Symfony\\Component\\Clock\\": "" + }, + "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": "Decouples applications from the system clock", + "homepage": "https://symfony.com", + "keywords": [ + "clock", + "psr20", + "time" + ], + "support": { + "source": "https://github.com/symfony/clock/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/console", + "version": "v7.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", + "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^6.4|^7.0" + }, + "conflict": { + "symfony/dependency-injection": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/lock": "<6.4", + "symfony/process": "<6.4" + }, + "provide": { + "psr/log-implementation": "1.0|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/event-dispatcher": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command-line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/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-11-06T14:24:19+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v7.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/601a5ce9aaad7bf10797e3663faefce9e26c24e2", + "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Converts CSS selectors to XPath expressions", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/css-selector/tree/v7.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/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": { + "branch-alias": { + "dev-main": "3.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.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/error-handler", + "version": "v7.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "672b3dd1ef8b87119b446d67c58c106c43f965fe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/672b3dd1ef8b87119b446d67c58c106c43f965fe", + "reference": "672b3dd1ef8b87119b446d67c58c106c43f965fe", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^6.4|^7.0" + }, + "conflict": { + "symfony/deprecation-contracts": "<2.5", + "symfony/http-kernel": "<6.4" + }, + "require-dev": { + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0" + }, + "bin": [ + "Resources/bin/patch-type-declarations" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\ErrorHandler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to manage errors and ease debugging PHP code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/error-handler/tree/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-11-05T15:35:02+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": { + "branch-alias": { + "dev-main": "3.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.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/finder", + "version": "v7.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "6de263e5868b9a137602dd1e33e4d48bfae99c49" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/6de263e5868b9a137602dd1e33e4d48bfae99c49", + "reference": "6de263e5868b9a137602dd1e33e4d48bfae99c49", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "symfony/filesystem": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/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-23T06:56:12+00:00" + }, + { + "name": "symfony/html-sanitizer", + "version": "v7.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/html-sanitizer.git", + "reference": "1d23de45af5e8508441ff5f82bb493e83cdcbba4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/html-sanitizer/zipball/1d23de45af5e8508441ff5f82bb493e83cdcbba4", + "reference": "1d23de45af5e8508441ff5f82bb493e83cdcbba4", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "league/uri": "^6.5|^7.0", + "masterminds/html5": "^2.7.2", + "php": ">=8.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HtmlSanitizer\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Titouan Galopin", + "email": "galopintitouan@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to sanitize untrusted HTML input for safe insertion into a document's DOM.", + "homepage": "https://symfony.com", + "keywords": [ + "Purifier", + "html", + "sanitizer" + ], + "support": { + "source": "https://github.com/symfony/html-sanitizer/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/http-foundation", + "version": "v7.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "e88a66c3997859532bc2ddd6dd8f35aba2711744" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e88a66c3997859532bc2ddd6dd8f35aba2711744", + "reference": "e88a66c3997859532bc2ddd6dd8f35aba2711744", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php83": "^1.27" + }, + "conflict": { + "doctrine/dbal": "<3.6", + "symfony/cache": "<6.4.12|>=7.0,<7.1.5" + }, + "require-dev": { + "doctrine/dbal": "^3.6|^4", + "predis/predis": "^1.1|^2.0", + "symfony/cache": "^6.4.12|^7.1.5", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/rate-limiter": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/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-11-13T18:58:46+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v7.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "6b4722a25e0aed1ccb4914b9bcbd493cc4676b4d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/6b4722a25e0aed1ccb4914b9bcbd493cc4676b4d", + "reference": "6b4722a25e0aed1ccb4914b9bcbd493cc4676b4d", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/error-handler": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/browser-kit": "<6.4", + "symfony/cache": "<6.4", + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/doctrine-bridge": "<6.4", + "symfony/form": "<6.4", + "symfony/http-client": "<6.4", + "symfony/http-client-contracts": "<2.5", + "symfony/mailer": "<6.4", + "symfony/messenger": "<6.4", + "symfony/translation": "<6.4", + "symfony/translation-contracts": "<2.5", + "symfony/twig-bridge": "<6.4", + "symfony/validator": "<6.4", + "symfony/var-dumper": "<6.4", + "twig/twig": "<3.12" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^6.4|^7.0", + "symfony/clock": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/css-selector": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/dom-crawler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/http-client-contracts": "^2.5|^3", + "symfony/process": "^6.4|^7.0", + "symfony/property-access": "^7.1", + "symfony/routing": "^6.4|^7.0", + "symfony/serializer": "^7.1", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", + "symfony/translation-contracts": "^2.5|^3", + "symfony/uid": "^6.4|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0", + "symfony/var-exporter": "^6.4|^7.0", + "twig/twig": "^3.12" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a structured process for converting a Request into a Response", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/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-11-29T08:42:40+00:00" + }, + { + "name": "symfony/mailer", + "version": "v7.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/mailer.git", + "reference": "e4d358702fb66e4c8a2af08e90e7271a62de39cc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mailer/zipball/e4d358702fb66e4c8a2af08e90e7271a62de39cc", + "reference": "e4d358702fb66e4c8a2af08e90e7271a62de39cc", + "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.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-11-25T15:21:05+00:00" + }, + { + "name": "symfony/mime", + "version": "v7.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "cc84a4b81f62158c3846ac7ff10f696aae2b524d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/cc84a4b81f62158c3846ac7ff10f696aae2b524d", + "reference": "cc84a4b81f62158c3846ac7ff10f696aae2b524d", + "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.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-11-23T09:19:39+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": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.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": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.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": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.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": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.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": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.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": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.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-php83", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491", + "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php83\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php83/tree/v1.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-uuid", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-uuid.git", + "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/21533be36c24be3f4b1669c4725c7d1d2bab4ae2", + "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-uuid": "*" + }, + "suggest": { + "ext-uuid": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Uuid\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for uuid functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.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/process", + "version": "v7.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "d34b22ba9390ec19d2dd966c40aa9e8462f27a7e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/d34b22ba9390ec19d2dd966c40aa9e8462f27a7e", + "reference": "d34b22ba9390ec19d2dd966c40aa9e8462f27a7e", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/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-11-06T14:24:19+00:00" + }, + { + "name": "symfony/routing", + "version": "v7.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "e10a2450fa957af6c448b9b93c9010a4e4c0725e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/e10a2450fa957af6c448b9b93c9010a4e4c0725e", + "reference": "e10a2450fa957af6c448b9b93c9010a4e4c0725e", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/config": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/yaml": "<6.4" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Maps an HTTP request to a set of configuration variables", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/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-11-25T11:08:51+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": { + "branch-alias": { + "dev-main": "3.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v3.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": "v7.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/446e0d146f991dde3e73f45f2c97a9faad773c82", + "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "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/emoji": "^7.1", + "symfony/error-handler": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^6.4|^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/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-11-13T13:31:26+00:00" + }, + { + "name": "symfony/translation", + "version": "v7.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "dc89e16b44048ceecc879054e5b7f38326ab6cc5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/dc89e16b44048ceecc879054e5b7f38326ab6cc5", + "reference": "dc89e16b44048ceecc879054e5b7f38326ab6cc5", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^2.5|^3.0" + }, + "conflict": { + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<6.4", + "symfony/service-contracts": "<2.5", + "symfony/twig-bundle": "<6.4", + "symfony/yaml": "<6.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": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/http-client-contracts": "^2.5|^3.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/routing": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^6.4|^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/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-11-12T20:47:56+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": { + "branch-alias": { + "dev-main": "3.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v3.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/uid", + "version": "v7.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/uid.git", + "reference": "2d294d0c48df244c71c105a169d0190bfb080426" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/uid/zipball/2d294d0c48df244c71c105a169d0190bfb080426", + "reference": "2d294d0c48df244c71c105a169d0190bfb080426", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-uuid": "^1.15" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Uid\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to generate and represent UIDs", + "homepage": "https://symfony.com", + "keywords": [ + "UID", + "ulid", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/uid/tree/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/var-dumper", + "version": "v7.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "c6a22929407dec8765d6e2b6ff85b800b245879c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/c6a22929407dec8765d6e2b6ff85b800b245879c", + "reference": "c6a22929407dec8765d6e2b6ff85b800b245879c", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/console": "<6.4" + }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/uid": "^6.4|^7.0", + "twig/twig": "^3.12" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides mechanisms for walking through any arbitrary PHP variable", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/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-11-08T15:48:14+00:00" + }, + { + "name": "tijsverkoyen/css-to-inline-styles", + "version": "v2.2.7", + "source": { + "type": "git", + "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", + "reference": "83ee6f38df0a63106a9e4536e3060458b74ccedb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/83ee6f38df0a63106a9e4536e3060458b74ccedb", + "reference": "83ee6f38df0a63106a9e4536e3060458b74ccedb", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "php": "^5.5 || ^7.0 || ^8.0", + "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "TijsVerkoyen\\CssToInlineStyles\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Tijs Verkoyen", + "email": "css_to_inline_styles@verkoyen.eu", + "role": "Developer" + } + ], + "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", + "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", + "support": { + "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.2.7" + }, + "time": "2023-12-08T13:03:43+00:00" + }, + { + "name": "vlucas/phpdotenv", + "version": "v5.6.1", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/a59a13791077fe3d44f90e7133eb68e7d22eaff2", + "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "graham-campbell/result-type": "^1.1.3", + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.3", + "symfony/polyfill-ctype": "^1.24", + "symfony/polyfill-mbstring": "^1.24", + "symfony/polyfill-php80": "^1.24" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "ext-filter": "*", + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" + }, + "suggest": { + "ext-filter": "Required to use the boolean validator." + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, + "branch-alias": { + "dev-master": "5.6-dev" + } + }, + "autoload": { + "psr-4": { + "Dotenv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "https://github.com/vlucas" + } + ], + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "support": { + "issues": "https://github.com/vlucas/phpdotenv/issues", + "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2024-07-20T21:52:34+00:00" + }, + { + "name": "voku/portable-ascii", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/voku/portable-ascii.git", + "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", + "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", + "shasum": "" + }, + "require": { + "php": ">=7.0.0" + }, + "require-dev": { + "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" + }, + "suggest": { + "ext-intl": "Use Intl for transliterator_transliterate() support" + }, + "type": "library", + "autoload": { + "psr-4": { + "voku\\": "src/voku/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lars Moelleken", + "homepage": "https://www.moelleken.org/" + } + ], + "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", + "homepage": "https://github.com/voku/portable-ascii", + "keywords": [ + "ascii", + "clean", + "php" + ], + "support": { + "issues": "https://github.com/voku/portable-ascii/issues", + "source": "https://github.com/voku/portable-ascii/tree/2.0.3" + }, + "funding": [ + { + "url": "https://www.paypal.me/moelleken", + "type": "custom" + }, + { + "url": "https://github.com/voku", + "type": "github" + }, + { + "url": "https://opencollective.com/portable-ascii", + "type": "open_collective" + }, + { + "url": "https://www.patreon.com/voku", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", + "type": "tidelift" + } + ], + "time": "2024-11-21T01:49:47+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "php": "^7.2 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.11.0" + }, + "time": "2022-06-03T18:03:27+00:00" + } + ], + "packages-dev": [ + { + "name": "archtechx/enums", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/archtechx/enums.git", + "reference": "37326d5e26cdfcc2810f4664cdd625ea4fd528d7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/archtechx/enums/zipball/37326d5e26cdfcc2810f4664cdd625ea4fd528d7", + "reference": "37326d5e26cdfcc2810f4664cdd625ea4fd528d7", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "larastan/larastan": "^2.4", + "orchestra/testbench": "^8.0", + "pestphp/pest": "^2.0", + "pestphp/pest-plugin-laravel": "^2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "ArchTech\\Enums\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Samuel Štancl", + "email": "samuel@archte.ch" + } + ], + "description": "Helpers for making PHP enums more lovable.", + "support": { + "issues": "https://github.com/archtechx/enums/issues", + "source": "https://github.com/archtechx/enums/tree/v1.1.0" + }, + "time": "2024-07-15T14:28:34+00:00" + }, + { + "name": "brianium/paratest", + "version": "v7.4.8", + "source": { + "type": "git", + "url": "https://github.com/paratestphp/paratest.git", + "reference": "cf16fcbb9b8107a7df6b97e497fc91e819774d8b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paratestphp/paratest/zipball/cf16fcbb9b8107a7df6b97e497fc91e819774d8b", + "reference": "cf16fcbb9b8107a7df6b97e497fc91e819774d8b", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-simplexml": "*", + "fidry/cpu-core-counter": "^1.2.0", + "jean85/pretty-package-versions": "^2.0.6", + "php": "~8.2.0 || ~8.3.0 || ~8.4.0", + "phpunit/php-code-coverage": "^10.1.16", + "phpunit/php-file-iterator": "^4.1.0", + "phpunit/php-timer": "^6.0.0", + "phpunit/phpunit": "^10.5.36", + "sebastian/environment": "^6.1.0", + "symfony/console": "^6.4.7 || ^7.1.5", + "symfony/process": "^6.4.7 || ^7.1.5" + }, + "require-dev": { + "doctrine/coding-standard": "^12.0.0", + "ext-pcov": "*", + "ext-posix": "*", + "phpstan/phpstan": "^1.12.6", + "phpstan/phpstan-deprecation-rules": "^1.2.1", + "phpstan/phpstan-phpunit": "^1.4.0", + "phpstan/phpstan-strict-rules": "^1.6.1", + "squizlabs/php_codesniffer": "^3.10.3", + "symfony/filesystem": "^6.4.3 || ^7.1.5" + }, + "bin": [ + "bin/paratest", + "bin/paratest_for_phpstorm" + ], + "type": "library", + "autoload": { + "psr-4": { + "ParaTest\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Scaturro", + "email": "scaturrob@gmail.com", + "role": "Developer" + }, + { + "name": "Filippo Tessarotto", + "email": "zoeslam@gmail.com", + "role": "Developer" + } + ], + "description": "Parallel testing for PHP", + "homepage": "https://github.com/paratestphp/paratest", + "keywords": [ + "concurrent", + "parallel", + "phpunit", + "testing" + ], + "support": { + "issues": "https://github.com/paratestphp/paratest/issues", + "source": "https://github.com/paratestphp/paratest/tree/v7.4.8" + }, + "funding": [ + { + "url": "https://github.com/sponsors/Slamdunk", + "type": "github" + }, + { + "url": "https://paypal.me/filippotessarotto", + "type": "paypal" + } + ], + "time": "2024-10-15T12:45:19+00:00" + }, + { + "name": "composer/class-map-generator", + "version": "1.5.0", + "source": { + "type": "git", + "url": "https://github.com/composer/class-map-generator.git", + "reference": "4b0a223cf5be7c9ee7e0ef1bc7db42b4a97c9915" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/class-map-generator/zipball/4b0a223cf5be7c9ee7e0ef1bc7db42b4a97c9915", + "reference": "4b0a223cf5be7c9ee7e0ef1bc7db42b4a97c9915", + "shasum": "" + }, + "require": { + "composer/pcre": "^2.1 || ^3.1", + "php": "^7.2 || ^8.0", + "symfony/finder": "^4.4 || ^5.3 || ^6 || ^7" + }, + "require-dev": { + "phpstan/phpstan": "^1.12 || ^2", + "phpstan/phpstan-deprecation-rules": "^1 || ^2", + "phpstan/phpstan-phpunit": "^1 || ^2", + "phpstan/phpstan-strict-rules": "^1.1 || ^2", + "phpunit/phpunit": "^8", + "symfony/filesystem": "^5.4 || ^6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\ClassMapGenerator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Utilities to scan PHP code and generate class maps.", + "keywords": [ + "classmap" + ], + "support": { + "issues": "https://github.com/composer/class-map-generator/issues", + "source": "https://github.com/composer/class-map-generator/tree/1.5.0" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2024-11-25T16:11:06+00:00" + }, + { + "name": "composer/pcre", + "version": "3.3.2", + "source": { + "type": "git", + "url": "https://github.com/composer/pcre.git", + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e", + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<1.11.10" + }, + "require-dev": { + "phpstan/phpstan": "^1.12 || ^2", + "phpstan/phpstan-strict-rules": "^1 || ^2", + "phpunit/phpunit": "^8 || ^9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "autoload": { + "psr-4": { + "Composer\\Pcre\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "PCRE wrapping library that offers type-safe preg_* replacements.", + "keywords": [ + "PCRE", + "preg", + "regex", + "regular expression" + ], + "support": { + "issues": "https://github.com/composer/pcre/issues", + "source": "https://github.com/composer/pcre/tree/3.3.2" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2024-11-12T16:29:46+00:00" + }, + { + "name": "dragon-code/contracts", + "version": "2.23.0", + "source": { + "type": "git", + "url": "https://github.com/TheDragonCode/contracts.git", + "reference": "44dbad923f152e0dc2699fbac2d33b65dd6a8f7d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TheDragonCode/contracts/zipball/44dbad923f152e0dc2699fbac2d33b65dd6a8f7d", + "reference": "44dbad923f152e0dc2699fbac2d33b65dd6a8f7d", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "psr/http-message": "^1.0.1 || ^2.0", + "symfony/http-kernel": "^4.0 || ^5.0 || ^6.0 || ^7.0", + "symfony/polyfill-php80": "^1.23" + }, + "conflict": { + "andrey-helldar/contracts": "*" + }, + "require-dev": { + "illuminate/database": "^10.0 || ^11.0", + "phpdocumentor/reflection-docblock": "^5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "DragonCode\\Contracts\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro", + "homepage": "https://dragon-code.pro" + } + ], + "description": "A set of contracts for any project", + "keywords": [ + "contracts", + "interfaces" + ], + "support": { + "source": "https://github.com/TheDragonCode/contracts" + }, + "funding": [ + { + "url": "https://boosty.to/dragon-code", + "type": "boosty" + }, + { + "url": "https://www.donationalerts.com/r/dragon_code", + "type": "donationalerts" + }, + { + "url": "https://yoomoney.ru/to/410012608840929", + "type": "yoomoney" + } + ], + "time": "2024-03-11T20:15:12+00:00" + }, + { + "name": "dragon-code/pretty-array", + "version": "v4.1.0", + "source": { + "type": "git", + "url": "https://github.com/TheDragonCode/pretty-array.git", + "reference": "6c84e2454491b414efbd37985c322712cdf9012f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TheDragonCode/pretty-array/zipball/6c84e2454491b414efbd37985c322712cdf9012f", + "reference": "6c84e2454491b414efbd37985c322712cdf9012f", + "shasum": "" + }, + "require": { + "dragon-code/contracts": "^2.20", + "dragon-code/support": "^6.11.2", + "ext-dom": "*", + "ext-mbstring": "*", + "php": "^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^10.2" + }, + "suggest": { + "symfony/thanks": "Give thanks (in the form of a GitHub) to your fellow PHP package maintainers" + }, + "type": "library", + "autoload": { + "psr-4": { + "DragonCode\\PrettyArray\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro", + "homepage": "https://github.com/andrey-helldar" + } + ], + "description": "Simple conversion of an array to a pretty view", + "keywords": [ + "andrey helldar", + "array", + "dragon", + "dragon code", + "pretty", + "pretty array" + ], + "support": { + "issues": "https://github.com/TheDragonCode/pretty-array/issues", + "source": "https://github.com/TheDragonCode/pretty-array" + }, + "funding": [ + { + "url": "https://boosty.to/dragon-code", + "type": "boosty" + }, + { + "url": "https://github.com/sponsors/TheDragonCode", + "type": "github" + }, + { + "url": "https://opencollective.com/dragon-code", + "type": "open_collective" + }, + { + "url": "https://yoomoney.ru/to/410012608840929", + "type": "yoomoney" + } + ], + "time": "2023-06-02T11:37:44+00:00" + }, + { + "name": "dragon-code/support", + "version": "6.15.0", + "source": { + "type": "git", + "url": "https://github.com/TheDragonCode/support.git", + "reference": "087d7baaa963cdbb24e901dc27e10cdc31c2529c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TheDragonCode/support/zipball/087d7baaa963cdbb24e901dc27e10cdc31c2529c", + "reference": "087d7baaa963cdbb24e901dc27e10cdc31c2529c", + "shasum": "" + }, + "require": { + "dragon-code/contracts": "^2.22.0", + "ext-bcmath": "*", + "ext-ctype": "*", + "ext-dom": "*", + "ext-json": "*", + "ext-mbstring": "*", + "php": "^8.1", + "psr/http-message": "^1.0.1 || ^2.0", + "symfony/polyfill-php81": "^1.25", + "voku/portable-ascii": "^1.4.8 || ^2.0.1" + }, + "conflict": { + "andrey-helldar/support": "*" + }, + "require-dev": { + "illuminate/contracts": "^9.0 || ^10.0 || ^11.0", + "phpunit/phpunit": "^9.6 || ^11.0", + "symfony/var-dumper": "^6.0 || ^7.0" + }, + "suggest": { + "dragon-code/laravel-support": "Various helper files for the Laravel and Lumen frameworks", + "symfony/thanks": "Give thanks (in the form of a GitHub) to your fellow PHP package maintainers" + }, + "type": "library", + "extra": { + "dragon-code": { + "docs-generator": { + "preview": { + "brand": "php", + "vendor": "The Dragon Code" + } + } + } + }, + "autoload": { + "psr-4": { + "DragonCode\\Support\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro", + "homepage": "https://dragon-code.pro" + } + ], + "description": "Support package is a collection of helpers and tools for any project.", + "keywords": [ + "dragon", + "dragon-code", + "framework", + "helper", + "helpers", + "laravel", + "php", + "support", + "symfony", + "yii", + "yii2" + ], + "support": { + "issues": "https://github.com/TheDragonCode/support/issues", + "source": "https://github.com/TheDragonCode/support" + }, + "funding": [ + { + "url": "https://boosty.to/dragon-code", + "type": "boosty" + }, + { + "url": "https://www.donationalerts.com/r/dragon_code", + "type": "donationalerts" + }, + { + "url": "https://yoomoney.ru/to/410012608840929", + "type": "yoomoney" + } + ], + "time": "2024-09-07T13:27:37+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": "fidry/cpu-core-counter", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/theofidry/cpu-core-counter.git", + "reference": "8520451a140d3f46ac33042715115e290cf5785f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/8520451a140d3f46ac33042715115e290cf5785f", + "reference": "8520451a140d3f46ac33042715115e290cf5785f", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "fidry/makefile": "^0.2.0", + "fidry/php-cs-fixer-config": "^1.1.2", + "phpstan/extension-installer": "^1.2.0", + "phpstan/phpstan": "^1.9.2", + "phpstan/phpstan-deprecation-rules": "^1.0.0", + "phpstan/phpstan-phpunit": "^1.2.2", + "phpstan/phpstan-strict-rules": "^1.4.4", + "phpunit/phpunit": "^8.5.31 || ^9.5.26", + "webmozarts/strict-phpunit": "^7.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Fidry\\CpuCoreCounter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Théo FIDRY", + "email": "theo.fidry@gmail.com" + } + ], + "description": "Tiny utility to get the number of CPU cores.", + "keywords": [ + "CPU", + "core" + ], + "support": { + "issues": "https://github.com/theofidry/cpu-core-counter/issues", + "source": "https://github.com/theofidry/cpu-core-counter/tree/1.2.0" + }, + "funding": [ + { + "url": "https://github.com/theofidry", + "type": "github" + } + ], + "time": "2024-08-06T10:04:20+00:00" + }, + { + "name": "filp/whoops", + "version": "2.16.0", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "befcdc0e5dce67252aa6322d82424be928214fa2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/befcdc0e5dce67252aa6322d82424be928214fa2", + "reference": "befcdc0e5dce67252aa6322d82424be928214fa2", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^7.5.20 || ^8.5.8 || ^9.3.3", + "symfony/var-dumper": "^4.0 || ^5.0" + }, + "suggest": { + "symfony/var-dumper": "Pretty print complex values better with var-dumper available", + "whoops/soap": "Formats errors as SOAP responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Whoops\\": "src/Whoops/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Filipe Dobreira", + "homepage": "https://github.com/filp", + "role": "Developer" + } + ], + "description": "php error handling for cool kids", + "homepage": "https://filp.github.io/whoops/", + "keywords": [ + "error", + "exception", + "handling", + "library", + "throwable", + "whoops" + ], + "support": { + "issues": "https://github.com/filp/whoops/issues", + "source": "https://github.com/filp/whoops/tree/2.16.0" + }, + "funding": [ + { + "url": "https://github.com/denis-sokolov", + "type": "github" + } + ], + "time": "2024-09-25T12:00:00+00:00" + }, + { + "name": "hamcrest/hamcrest-php", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "shasum": "" + }, + "require": { + "php": "^5.3|^7.0|^8.0" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" + }, + "require-dev": { + "phpunit/php-file-iterator": "^1.4 || ^2.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "classmap": [ + "hamcrest" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "This is the PHP port of Hamcrest Matchers", + "keywords": [ + "test" + ], + "support": { + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" + }, + "time": "2020-07-09T08:09:16+00:00" + }, + { + "name": "jean85/pretty-package-versions", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/Jean85/pretty-package-versions.git", + "reference": "3c4e5f62ba8d7de1734312e4fff32f67a8daaf10" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/3c4e5f62ba8d7de1734312e4fff32f67a8daaf10", + "reference": "3c4e5f62ba8d7de1734312e4fff32f67a8daaf10", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2.1.0", + "php": "^7.4|^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.2", + "jean85/composer-provided-replaced-stub-package": "^1.0", + "phpstan/phpstan": "^1.4", + "phpunit/phpunit": "^7.5|^8.5|^9.6", + "vimeo/psalm": "^4.3 || ^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Jean85\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alessandro Lai", + "email": "alessandro.lai85@gmail.com" + } + ], + "description": "A library to get pretty versions strings of installed dependencies", + "keywords": [ + "composer", + "package", + "release", + "versions" + ], + "support": { + "issues": "https://github.com/Jean85/pretty-package-versions/issues", + "source": "https://github.com/Jean85/pretty-package-versions/tree/2.1.0" + }, + "time": "2024-11-18T16:19:46+00:00" + }, + { + "name": "larastan/larastan", + "version": "v2.9.12", + "source": { + "type": "git", + "url": "https://github.com/larastan/larastan.git", + "reference": "19012b39fbe4dede43dbe0c126d9681827a5e908" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/larastan/larastan/zipball/19012b39fbe4dede43dbe0c126d9681827a5e908", + "reference": "19012b39fbe4dede43dbe0c126d9681827a5e908", + "shasum": "" + }, + "require": { + "ext-json": "*", + "illuminate/console": "^9.52.16 || ^10.28.0 || ^11.16", + "illuminate/container": "^9.52.16 || ^10.28.0 || ^11.16", + "illuminate/contracts": "^9.52.16 || ^10.28.0 || ^11.16", + "illuminate/database": "^9.52.16 || ^10.28.0 || ^11.16", + "illuminate/http": "^9.52.16 || ^10.28.0 || ^11.16", + "illuminate/pipeline": "^9.52.16 || ^10.28.0 || ^11.16", + "illuminate/support": "^9.52.16 || ^10.28.0 || ^11.16", + "php": "^8.0.2", + "phpmyadmin/sql-parser": "^5.9.0", + "phpstan/phpstan": "^1.12.11" + }, + "require-dev": { + "doctrine/coding-standard": "^12.0", + "laravel/framework": "^9.52.16 || ^10.28.0 || ^11.16", + "mockery/mockery": "^1.5.1", + "nikic/php-parser": "^4.19.1", + "orchestra/canvas": "^7.11.1 || ^8.11.0 || ^9.0.2", + "orchestra/testbench-core": "^7.33.0 || ^8.13.0 || ^9.0.9", + "phpstan/phpstan-deprecation-rules": "^1.2", + "phpunit/phpunit": "^9.6.13 || ^10.5.16" + }, + "suggest": { + "orchestra/testbench": "Using Larastan for analysing a package needs Testbench" + }, + "type": "phpstan-extension", + "extra": { + "phpstan": { + "includes": [ + "extension.neon" + ] + }, + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "Larastan\\Larastan\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Can Vural", + "email": "can9119@gmail.com" + }, + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Larastan - Discover bugs in your code without running it. A phpstan/phpstan extension for Laravel", + "keywords": [ + "PHPStan", + "code analyse", + "code analysis", + "larastan", + "laravel", + "package", + "php", + "static analysis" + ], + "support": { + "issues": "https://github.com/larastan/larastan/issues", + "source": "https://github.com/larastan/larastan/tree/v2.9.12" + }, + "funding": [ + { + "url": "https://github.com/canvural", + "type": "github" + } + ], + "time": "2024-11-26T23:09:02+00:00" + }, + { + "name": "laravel-lang/actions", + "version": "1.8.8", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/actions.git", + "reference": "64d2b6221db930e374b0c3dd2017f8ecca1bc93b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/actions/zipball/64d2b6221db930e374b0c3dd2017f8ecca1bc93b", + "reference": "64d2b6221db930e374b0c3dd2017f8ecca1bc93b", + "shasum": "" + }, + "require": { + "ext-json": "*", + "laravel-lang/publisher": "^14.0 || ^15.0 || ^16.0", + "php": "^8.1" + }, + "require-dev": { + "laravel-lang/status-generator": "^2.3.1", + "phpunit/phpunit": "^10.0", + "symfony/var-dumper": "^6.3 || ^7.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "LaravelLang\\Actions\\ServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "LaravelLang\\Actions\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro", + "homepage": "https://dragon-code.pro" + }, + { + "name": "Laravel Lang Team", + "homepage": "https://laravel-lang.com" + } + ], + "description": "Translation of buttons and other action elements", + "keywords": [ + "actions", + "buttons", + "lang", + "languages", + "laravel", + "translations" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/actions/issues", + "source": "https://github.com/Laravel-Lang/actions/tree/1.8.8" + }, + "time": "2024-11-04T19:29:17+00:00" + }, + { + "name": "laravel-lang/attributes", + "version": "2.11.1", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/attributes.git", + "reference": "b60817d0361ec2fe29f100f76cc9bd0c13a36ec9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/attributes/zipball/b60817d0361ec2fe29f100f76cc9bd0c13a36ec9", + "reference": "b60817d0361ec2fe29f100f76cc9bd0c13a36ec9", + "shasum": "" + }, + "require": { + "ext-json": "*", + "laravel-lang/publisher": "^14.0 || ^15.0 || ^16.0", + "php": "^8.1" + }, + "require-dev": { + "laravel-lang/status-generator": "^1.19 || ^2.0", + "phpunit/phpunit": "^10.0", + "symfony/var-dumper": "^6.0 || ^7.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "LaravelLang\\Attributes\\ServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "LaravelLang\\Attributes\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro" + }, + { + "name": "Laravel-Lang Team", + "homepage": "https://github.com/Laravel-Lang" + } + ], + "description": "List of 126 languages for form field names", + "keywords": [ + "attributes", + "fields", + "form", + "lang", + "languages", + "laravel", + "messages", + "translations", + "validation" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/attributes/issues", + "source": "https://github.com/Laravel-Lang/attributes/tree/2.11.1" + }, + "time": "2024-10-02T14:07:29+00:00" + }, + { + "name": "laravel-lang/common", + "version": "6.4.0", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/common.git", + "reference": "36c0270180f71420c1166c26f38dc25e1c8b7f64" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/common/zipball/36c0270180f71420c1166c26f38dc25e1c8b7f64", + "reference": "36c0270180f71420c1166c26f38dc25e1c8b7f64", + "shasum": "" + }, + "require": { + "laravel-lang/actions": "^1.8.3", + "laravel-lang/attributes": "^2.10.7", + "laravel-lang/http-statuses": "^3.8.3", + "laravel-lang/json-fallback": "^2.1", + "laravel-lang/lang": "^13.12 || ^14.0 || ^15.5.1", + "laravel-lang/locales": "^2.8", + "laravel-lang/models": "^1.0", + "laravel-lang/publisher": "^16.4", + "laravel-lang/routes": "^1.0", + "php": "^8.1" + }, + "require-dev": { + "dragon-code/support": "^6.13", + "orchestra/testbench": "^8.17 || ^9.1.2", + "phpunit/phpunit": "^10.5.20", + "symfony/var-dumper": "^6.4 || ^7.1.1" + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laravel-Lang Team", + "homepage": "https://github.com/Laravel-Lang" + }, + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro", + "homepage": "https://dragon-code.pro" + } + ], + "description": "Easily connect the necessary language packs to the application", + "keywords": [ + "Laravel-lang", + "actions", + "attribute", + "attributes", + "breeze", + "buttons", + "cashier", + "fortify", + "framework", + "http", + "http-status", + "http-status-code", + "i18n", + "jetstream", + "lang", + "language", + "languages", + "laravel", + "locale", + "locales", + "localization", + "localizations", + "nova", + "publisher", + "spark", + "translation", + "translations", + "ui" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/common/issues", + "source": "https://github.com/Laravel-Lang/common" + }, + "time": "2024-07-06T16:48:35+00:00" + }, + { + "name": "laravel-lang/config", + "version": "1.10.0", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/config.git", + "reference": "67c9273a2e5487441a7034c2422bb1527200bce5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/config/zipball/67c9273a2e5487441a7034c2422bb1527200bce5", + "reference": "67c9273a2e5487441a7034c2422bb1527200bce5", + "shasum": "" + }, + "require": { + "archtechx/enums": "^1.0", + "illuminate/config": "^10.0 || ^11.0", + "illuminate/support": "^10.0 || ^11.0", + "laravel-lang/locale-list": "^1.4", + "php": "^8.1" + }, + "require-dev": { + "orchestra/testbench": "^8.23 || ^9.1", + "pestphp/pest": "^2.34" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "LaravelLang\\Config\\ServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "LaravelLang\\Config\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro", + "homepage": "https://dragon-code.pro" + }, + { + "name": "Laravel-Lang Team", + "homepage": "https://laravel-lang.com" + } + ], + "description": "The Laravel-Lang config package", + "keywords": [ + "Laravel-lang", + "Settings", + "config", + "lang", + "languages", + "laravel", + "locale", + "locales", + "localization", + "localizations", + "translation", + "translations" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/config/issues", + "source": "https://github.com/Laravel-Lang/config/tree/1.10.0" + }, + "time": "2024-09-07T11:28:53+00:00" + }, + { + "name": "laravel-lang/http-statuses", + "version": "3.8.5", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/http-statuses.git", + "reference": "d5ddb3c6cfafadb3a2e9d2d5d96d8d11a9130544" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/http-statuses/zipball/d5ddb3c6cfafadb3a2e9d2d5d96d8d11a9130544", + "reference": "d5ddb3c6cfafadb3a2e9d2d5d96d8d11a9130544", + "shasum": "" + }, + "require": { + "ext-json": "*", + "laravel-lang/publisher": "^14.1 || ^15.0 || ^16.0", + "php": "^8.1" + }, + "require-dev": { + "laravel-lang/status-generator": "^1.19 || ^2.0", + "phpunit/phpunit": "^10.0", + "symfony/var-dumper": "^6.0 || ^7.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "LaravelLang\\HttpStatuses\\ServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "LaravelLang\\HttpStatuses\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro" + }, + { + "name": "Laravel-Lang Team", + "homepage": "https://github.com/Laravel-Lang" + } + ], + "description": "List of 126 languages for HTTP statuses", + "keywords": [ + "http", + "lang", + "languages", + "laravel", + "messages", + "status", + "translations" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/http-statuses/issues", + "source": "https://github.com/Laravel-Lang/http-statuses/tree/3.8.5" + }, + "time": "2024-09-30T19:56:37+00:00" + }, + { + "name": "laravel-lang/json-fallback", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/json-fallback.git", + "reference": "597865ffcef81b7e92227ea73ff3a9a3372fb91a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/json-fallback/zipball/597865ffcef81b7e92227ea73ff3a9a3372fb91a", + "reference": "597865ffcef81b7e92227ea73ff3a9a3372fb91a", + "shasum": "" + }, + "require": { + "illuminate/support": "^10.0 || ^11.0", + "illuminate/translation": "^10.0 || ^11.0", + "php": "^8.1" + }, + "require-dev": { + "orchestra/testbench": "^8.0 || ^9.0", + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "LaravelLang\\JsonFallback\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro", + "homepage": "https://github.com/andrey-helldar" + }, + { + "name": "Felipe Dsdev", + "homepage": "https://github.com/felipe-dsdev" + } + ], + "description": "Adds support for fallback JSON string translation", + "support": { + "issues": "https://github.com/Laravel-Lang/json-fallback/issues", + "source": "https://github.com/Laravel-Lang/json-fallback/tree/2.1.0" + }, + "time": "2024-03-13T09:18:03+00:00" + }, + { + "name": "laravel-lang/lang", + "version": "15.9.6", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/lang.git", + "reference": "671dc13aaa78bed9237ef1ee73303e0039fed709" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/lang/zipball/671dc13aaa78bed9237ef1ee73303e0039fed709", + "reference": "671dc13aaa78bed9237ef1ee73303e0039fed709", + "shasum": "" + }, + "require": { + "ext-json": "*", + "laravel-lang/publisher": "^16.0", + "php": "^8.2" + }, + "conflict": { + "laravel/framework": "<11.0.7" + }, + "require-dev": { + "laravel-lang/status-generator": "^2.11", + "phpunit/phpunit": "^10.0", + "symfony/var-dumper": "^7.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "LaravelLang\\Lang\\ServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "LaravelLang\\Lang\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laravel-Lang Team", + "homepage": "https://github.com/Laravel-Lang" + } + ], + "description": "List of 126 languages for Laravel Framework, Laravel Jetstream, Laravel Fortify, Laravel Breeze, Laravel Cashier, Laravel Nova, Laravel Spark and Laravel UI", + "keywords": [ + "lang", + "languages", + "laravel", + "lpm" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/lang/issues", + "source": "https://github.com/Laravel-Lang/lang" + }, + "time": "2024-12-02T14:31:02+00:00" + }, + { + "name": "laravel-lang/locale-list", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/locale-list.git", + "reference": "48b8e4304f8b1ad34456270d35d44ca0c3e6ea0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/locale-list/zipball/48b8e4304f8b1ad34456270d35d44ca0c3e6ea0d", + "reference": "48b8e4304f8b1ad34456270d35d44ca0c3e6ea0d", + "shasum": "" + }, + "require": { + "archtechx/enums": "^0.3.2 || ^1.0", + "php": "^8.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "LaravelLang\\LocaleList\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro", + "homepage": "https://dragon-code.pro" + }, + { + "name": "Laravel-Lang Team", + "homepage": "https://laravel-lang.com" + } + ], + "description": "List of localizations available in Laravel Lang projects", + "keywords": [ + "Laravel-lang", + "lang", + "languages", + "laravel", + "locale", + "locales", + "localization", + "translation", + "translations" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/locale-list/issues", + "source": "https://github.com/Laravel-Lang/locale-list" + }, + "time": "2024-06-01T00:24:42+00:00" + }, + { + "name": "laravel-lang/locales", + "version": "2.9.2", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/locales.git", + "reference": "e7914ccfb91432ebebacf46697b573a330d702c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/locales/zipball/e7914ccfb91432ebebacf46697b573a330d702c7", + "reference": "e7914ccfb91432ebebacf46697b573a330d702c7", + "shasum": "" + }, + "require": { + "archtechx/enums": "^0.3.2 || ^1.0", + "dragon-code/support": "^6.11.3", + "ext-json": "*", + "illuminate/collections": "^10.0 || ^11.0", + "laravel-lang/config": "^1.0.2", + "laravel-lang/locale-list": "^1.2", + "laravel-lang/native-country-names": "^1.3", + "laravel-lang/native-currency-names": "^1.3", + "laravel-lang/native-locale-names": "^2.2", + "php": "^8.1" + }, + "require-dev": { + "orchestra/testbench": "^8.0 || ^9.0", + "pestphp/pest": "^2.24.1", + "symfony/var-dumper": "^6.0 || ^7.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "LaravelLang\\Locales\\ServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "LaravelLang\\Locales\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro" + }, + { + "name": "Laravel-Lang Team", + "homepage": "https://laravel-lang.com" + } + ], + "description": "Basic functionality for working with localizations", + "keywords": [ + "laravel", + "locale", + "locales", + "localization", + "translation", + "translations" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/locales/issues", + "source": "https://github.com/Laravel-Lang/locales" + }, + "time": "2024-06-24T09:56:41+00:00" + }, + { + "name": "laravel-lang/models", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/models.git", + "reference": "5914712a42dcece9453244b7ba0b5d12ffccd75a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/models/zipball/5914712a42dcece9453244b7ba0b5d12ffccd75a", + "reference": "5914712a42dcece9453244b7ba0b5d12ffccd75a", + "shasum": "" + }, + "require": { + "composer/class-map-generator": "^1.3", + "dragon-code/support": "^6.13", + "illuminate/database": "^10.0 || ^11.0", + "illuminate/support": "^10.0 || ^11.0", + "laravel-lang/config": "^1.9", + "laravel-lang/locales": "^2.9.2", + "laravel/prompts": "^0.1.24|^0.2|^0.3", + "php": "^8.1" + }, + "require-dev": { + "orchestra/testbench": "^8.0 || ^9.0", + "pestphp/pest": "^2.34", + "pestphp/pest-plugin-laravel": "^2.4", + "symfony/var-dumper": "^6.0 || ^7.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "LaravelLang\\Models\\ServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "LaravelLang\\Models\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro", + "homepage": "https://dragon-code.pro", + "role": "Maintainer" + }, + { + "name": "Andrey Sokolov", + "email": "walfireru@gmail.com", + "homepage": "https://github.com/Quiss", + "role": "Usability consultant" + }, + { + "name": "Laravel-Lang Team", + "homepage": "https://github.com/Laravel-Lang" + } + ], + "description": "Easy and fast way to localize models", + "keywords": [ + "database", + "l18n", + "languages", + "laravel", + "locales", + "localization", + "models", + "translate", + "translations" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/models/issues", + "source": "https://github.com/Laravel-Lang/models" + }, + "time": "2024-11-06T20:23:30+00:00" + }, + { + "name": "laravel-lang/native-country-names", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/native-country-names.git", + "reference": "cddca6627c8732770a2e2c11c921753b6d0adb66" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/native-country-names/zipball/cddca6627c8732770a2e2c11c921753b6d0adb66", + "reference": "cddca6627c8732770a2e2c11c921753b6d0adb66", + "shasum": "" + }, + "require": { + "dragon-code/support": "^6.11", + "ext-json": "*", + "illuminate/collections": "^10.0 || ^11.0", + "php": "^8.1" + }, + "require-dev": { + "illuminate/support": "^10.0 || ^11.0", + "laravel-lang/locale-list": "^1.2", + "pestphp/pest": "^2.24.3", + "punic/punic": "^3.8", + "symfony/console": "^6.3 || ^7.0", + "symfony/process": "^6.3 || ^7.0", + "symfony/var-dumper": "^6.3 || ^7.0", + "vlucas/phpdotenv": "^5.6" + }, + "type": "library", + "autoload": { + "psr-4": { + "LaravelLang\\NativeCountryNames\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro" + }, + { + "name": "Laravel-Lang Team", + "homepage": "https://laravel-lang.com" + } + ], + "description": "The project contains native translations of country names", + "keywords": [ + "Laravel-lang", + "countries", + "country", + "lang", + "languages", + "laravel", + "locale", + "locales", + "localization", + "territories", + "territory", + "translation", + "translations" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/native-country-names/issues", + "source": "https://github.com/Laravel-Lang/native-country-names" + }, + "time": "2024-03-13T09:34:55+00:00" + }, + { + "name": "laravel-lang/native-currency-names", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/native-currency-names.git", + "reference": "2e0fbe039421ac753b4fd5256bd239147a0a88fe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/native-currency-names/zipball/2e0fbe039421ac753b4fd5256bd239147a0a88fe", + "reference": "2e0fbe039421ac753b4fd5256bd239147a0a88fe", + "shasum": "" + }, + "require": { + "dragon-code/support": "^6.11", + "ext-json": "*", + "illuminate/collections": "^10.0 || ^11.0", + "php": "^8.1" + }, + "require-dev": { + "illuminate/support": "^10.0 || ^11.0", + "laravel-lang/locale-list": "^1.2", + "pestphp/pest": "^2.24.3", + "punic/punic": "^3.8", + "symfony/console": "^6.3 || ^7.0", + "symfony/process": "^6.3 || ^7.0", + "symfony/var-dumper": "^6.3 || ^7.0", + "vlucas/phpdotenv": "^5.6" + }, + "type": "library", + "autoload": { + "psr-4": { + "LaravelLang\\NativeCurrencyNames\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro" + }, + { + "name": "Laravel-Lang Team", + "homepage": "https://laravel-lang.com" + } + ], + "description": "The project contains native translations of currency names", + "keywords": [ + "Laravel-lang", + "currency", + "lang", + "languages", + "laravel", + "locale", + "locales", + "localization", + "translation", + "translations" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/native-currency-names/issues", + "source": "https://github.com/Laravel-Lang/native-currency-names" + }, + "time": "2024-03-13T09:40:02+00:00" + }, + { + "name": "laravel-lang/native-locale-names", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/native-locale-names.git", + "reference": "39ef3330938b74277456049bf386453109e4d05c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/native-locale-names/zipball/39ef3330938b74277456049bf386453109e4d05c", + "reference": "39ef3330938b74277456049bf386453109e4d05c", + "shasum": "" + }, + "require": { + "dragon-code/support": "^6.11", + "ext-json": "*", + "php": "^8.1" + }, + "require-dev": { + "illuminate/support": "^10.31 || ^11.0", + "laravel-lang/locale-list": "^1.2", + "pestphp/pest": "^2.24.3", + "punic/punic": "^3.8", + "symfony/console": "^6.3 || ^7.0", + "symfony/process": "^6.3 || ^7.0", + "symfony/var-dumper": "^6.3 || ^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "LaravelLang\\NativeLocaleNames\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro" + }, + { + "name": "Laravel-Lang Team", + "homepage": "https://laravel-lang.com" + } + ], + "description": "The project contains native translations of locale names", + "keywords": [ + "Laravel-lang", + "lang", + "languages", + "laravel", + "locale", + "locales", + "localization", + "translation", + "translations" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/native-locale-names/issues", + "source": "https://github.com/Laravel-Lang/native-locale-names" + }, + "time": "2024-03-13T09:28:19+00:00" + }, + { + "name": "laravel-lang/publisher", + "version": "16.4.0", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/publisher.git", + "reference": "7812e7a07e6f2fdb7d258f3ab1d481d1cbf7f32c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/publisher/zipball/7812e7a07e6f2fdb7d258f3ab1d481d1cbf7f32c", + "reference": "7812e7a07e6f2fdb7d258f3ab1d481d1cbf7f32c", + "shasum": "" + }, + "require": { + "composer/semver": "^3.4", + "dragon-code/pretty-array": "^4.1", + "dragon-code/support": "^6.11.3", + "ext-json": "*", + "illuminate/collections": "^10.0 || ^11.0", + "illuminate/console": "^10.0 || ^11.0", + "illuminate/support": "^10.0 || ^11.0", + "laravel-lang/config": "^1.0", + "laravel-lang/locales": "^2.3", + "league/commonmark": "^2.4.1", + "league/config": "^1.2", + "php": "^8.1" + }, + "conflict": { + "laravel-lang/attributes": "<2.0", + "laravel-lang/http-statuses": "<3.0", + "laravel-lang/lang": "<11.0" + }, + "require-dev": { + "laravel-lang/json-fallback": "^2.0", + "orchestra/testbench": "^8.14 || ^9.0", + "phpunit/phpunit": "^10.4.2", + "symfony/var-dumper": "^6.3.6 || ^7.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "LaravelLang\\Publisher\\ServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "LaravelLang\\Publisher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro" + }, + { + "name": "Laravel-Lang Team", + "homepage": "https://laravel-lang.com" + } + ], + "description": "Publisher lang files for the Laravel and Lumen Frameworks, Jetstream, Fortify, Cashier, Spark and Nova from Laravel-Lang/lang", + "keywords": [ + "Laravel-lang", + "breeze", + "cashier", + "fortify", + "framework", + "i18n", + "jetstream", + "lang", + "languages", + "laravel", + "locale", + "locales", + "localization", + "localizations", + "lpm", + "lumen", + "nova", + "publisher", + "spark", + "trans", + "translation", + "translations", + "validations" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/publisher/issues", + "source": "https://github.com/Laravel-Lang/publisher" + }, + "time": "2024-06-02T00:22:33+00:00" + }, + { + "name": "laravel-lang/routes", + "version": "1.5.0", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/routes.git", + "reference": "addc4438fac481389e66e349ac3b93670aa4301b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/routes/zipball/addc4438fac481389e66e349ac3b93670aa4301b", + "reference": "addc4438fac481389e66e349ac3b93670aa4301b", + "shasum": "" + }, + "require": { + "dragon-code/support": "^6.13", + "illuminate/config": "^10.0 || ^11.0", + "illuminate/http": "^10.0 || ^11.0", + "illuminate/routing": "^10.0 || ^11.0", + "illuminate/support": "^10.0 || ^11.0", + "laravel-lang/config": "^1.6", + "laravel-lang/locales": "^2.8", + "php": "^8.1" + }, + "require-dev": { + "orchestra/testbench": "^8.23 || ^9.1", + "pestphp/pest": "^2.34", + "pestphp/pest-plugin-laravel": "^2.4", + "symfony/var-dumper": "^6.0 || ^7.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "LaravelLang\\Routes\\ServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "helpers/functions.php" + ], + "psr-4": { + "LaravelLang\\Routes\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro", + "homepage": "https://dragon-code.pro" + }, + { + "name": "Laravel-Lang Team", + "homepage": "https://github.com/Laravel-Lang" + } + ], + "description": "Easy and fast way to localize routes", + "keywords": [ + "l18n", + "languages", + "laravel", + "localization", + "routes", + "translate", + "translations" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/routes/issues", + "source": "https://github.com/Laravel-Lang/routes" + }, + "time": "2024-07-10T10:28:26+00:00" + }, + { + "name": "laravel/pint", + "version": "v1.18.3", + "source": { + "type": "git", + "url": "https://github.com/laravel/pint.git", + "reference": "cef51821608239040ab841ad6e1c6ae502ae3026" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/pint/zipball/cef51821608239040ab841ad6e1c6ae502ae3026", + "reference": "cef51821608239040ab841ad6e1c6ae502ae3026", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "ext-tokenizer": "*", + "ext-xml": "*", + "php": "^8.1.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.65.0", + "illuminate/view": "^10.48.24", + "larastan/larastan": "^2.9.11", + "laravel-zero/framework": "^10.4.0", + "mockery/mockery": "^1.6.12", + "nunomaduro/termwind": "^1.17.0", + "pestphp/pest": "^2.36.0" + }, + "bin": [ + "builds/pint" + ], + "type": "project", + "autoload": { + "psr-4": { + "App\\": "app/", + "Database\\Seeders\\": "database/seeders/", + "Database\\Factories\\": "database/factories/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "An opinionated code formatter for PHP.", + "homepage": "https://laravel.com", + "keywords": [ + "format", + "formatter", + "lint", + "linter", + "php" + ], + "support": { + "issues": "https://github.com/laravel/pint/issues", + "source": "https://github.com/laravel/pint" + }, + "time": "2024-11-26T15:34:00+00:00" + }, + { + "name": "mockery/mockery", + "version": "1.6.12", + "source": { + "type": "git", + "url": "https://github.com/mockery/mockery.git", + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mockery/mockery/zipball/1f4efdd7d3beafe9807b08156dfcb176d18f1699", + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699", + "shasum": "" + }, + "require": { + "hamcrest/hamcrest-php": "^2.0.1", + "lib-pcre": ">=7.0", + "php": ">=7.3" + }, + "conflict": { + "phpunit/phpunit": "<8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.5 || ^9.6.17", + "symplify/easy-coding-standard": "^12.1.14" + }, + "type": "library", + "autoload": { + "files": [ + "library/helpers.php", + "library/Mockery.php" + ], + "psr-4": { + "Mockery\\": "library/Mockery" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Pádraic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "https://github.com/padraic", + "role": "Author" + }, + { + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "https://davedevelopment.co.uk", + "role": "Developer" + }, + { + "name": "Nathanael Esayeas", + "email": "nathanael.esayeas@protonmail.com", + "homepage": "https://github.com/ghostwriter", + "role": "Lead Developer" + } + ], + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", + "keywords": [ + "BDD", + "TDD", + "library", + "mock", + "mock objects", + "mockery", + "stub", + "test", + "test double", + "testing" + ], + "support": { + "docs": "https://docs.mockery.io/", + "issues": "https://github.com/mockery/mockery/issues", + "rss": "https://github.com/mockery/mockery/releases.atom", + "security": "https://github.com/mockery/mockery/security/advisories", + "source": "https://github.com/mockery/mockery" + }, + "time": "2024-05-16T03:13:13+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.12.1", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/123267b2c49fbf30d78a7b2d333f6be754b94845", + "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3 <3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.12.1" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2024-11-08T17:47:46+00:00" + }, + { + "name": "nunomaduro/collision", + "version": "v8.5.0", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/collision.git", + "reference": "f5c101b929c958e849a633283adff296ed5f38f5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/f5c101b929c958e849a633283adff296ed5f38f5", + "reference": "f5c101b929c958e849a633283adff296ed5f38f5", + "shasum": "" + }, + "require": { + "filp/whoops": "^2.16.0", + "nunomaduro/termwind": "^2.1.0", + "php": "^8.2.0", + "symfony/console": "^7.1.5" + }, + "conflict": { + "laravel/framework": "<11.0.0 || >=12.0.0", + "phpunit/phpunit": "<10.5.1 || >=12.0.0" + }, + "require-dev": { + "larastan/larastan": "^2.9.8", + "laravel/framework": "^11.28.0", + "laravel/pint": "^1.18.1", + "laravel/sail": "^1.36.0", + "laravel/sanctum": "^4.0.3", + "laravel/tinker": "^2.10.0", + "orchestra/testbench-core": "^9.5.3", + "pestphp/pest": "^2.36.0 || ^3.4.0", + "sebastian/environment": "^6.1.0 || ^7.2.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" + ] + }, + "branch-alias": { + "dev-8.x": "8.x-dev" + } + }, + "autoload": { + "files": [ + "./src/Adapters/Phpunit/Autoload.php" + ], + "psr-4": { + "NunoMaduro\\Collision\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Cli error handling for console/command-line PHP applications.", + "keywords": [ + "artisan", + "cli", + "command-line", + "console", + "error", + "handling", + "laravel", + "laravel-zero", + "php", + "symfony" + ], + "support": { + "issues": "https://github.com/nunomaduro/collision/issues", + "source": "https://github.com/nunomaduro/collision" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], + "time": "2024-10-15T16:06:32+00:00" + }, + { + "name": "pestphp/pest", + "version": "v2.36.0", + "source": { + "type": "git", + "url": "https://github.com/pestphp/pest.git", + "reference": "f8c88bd14dc1772bfaf02169afb601ecdf2724cd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pestphp/pest/zipball/f8c88bd14dc1772bfaf02169afb601ecdf2724cd", + "reference": "f8c88bd14dc1772bfaf02169afb601ecdf2724cd", + "shasum": "" + }, + "require": { + "brianium/paratest": "^7.3.1", + "nunomaduro/collision": "^7.11.0|^8.4.0", + "nunomaduro/termwind": "^1.16.0|^2.1.0", + "pestphp/pest-plugin": "^2.1.1", + "pestphp/pest-plugin-arch": "^2.7.0", + "php": "^8.1.0", + "phpunit/phpunit": "^10.5.36" + }, + "conflict": { + "filp/whoops": "<2.16.0", + "phpunit/phpunit": ">10.5.36", + "sebastian/exporter": "<5.1.0", + "webmozart/assert": "<1.11.0" + }, + "require-dev": { + "pestphp/pest-dev-tools": "^2.17.0", + "pestphp/pest-plugin-type-coverage": "^2.8.7", + "symfony/process": "^6.4.0|^7.1.5" + }, + "bin": [ + "bin/pest" + ], + "type": "library", + "extra": { + "pest": { + "plugins": [ + "Pest\\Plugins\\Bail", + "Pest\\Plugins\\Cache", + "Pest\\Plugins\\Coverage", + "Pest\\Plugins\\Init", + "Pest\\Plugins\\Environment", + "Pest\\Plugins\\Help", + "Pest\\Plugins\\Memory", + "Pest\\Plugins\\Only", + "Pest\\Plugins\\Printer", + "Pest\\Plugins\\ProcessIsolation", + "Pest\\Plugins\\Profile", + "Pest\\Plugins\\Retry", + "Pest\\Plugins\\Snapshot", + "Pest\\Plugins\\Verbose", + "Pest\\Plugins\\Version", + "Pest\\Plugins\\Parallel" + ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "autoload": { + "files": [ + "src/Functions.php", + "src/Pest.php" + ], + "psr-4": { + "Pest\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "The elegant PHP Testing Framework.", + "keywords": [ + "framework", + "pest", + "php", + "test", + "testing", + "unit" + ], + "support": { + "issues": "https://github.com/pestphp/pest/issues", + "source": "https://github.com/pestphp/pest/tree/v2.36.0" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + } + ], + "time": "2024-10-15T15:30:56+00:00" + }, + { + "name": "pestphp/pest-plugin", + "version": "v2.1.1", + "source": { + "type": "git", + "url": "https://github.com/pestphp/pest-plugin.git", + "reference": "e05d2859e08c2567ee38ce8b005d044e72648c0b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pestphp/pest-plugin/zipball/e05d2859e08c2567ee38ce8b005d044e72648c0b", + "reference": "e05d2859e08c2567ee38ce8b005d044e72648c0b", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^2.0.0", + "composer-runtime-api": "^2.2.2", + "php": "^8.1" + }, + "conflict": { + "pestphp/pest": "<2.2.3" + }, + "require-dev": { + "composer/composer": "^2.5.8", + "pestphp/pest": "^2.16.0", + "pestphp/pest-dev-tools": "^2.16.0" + }, + "type": "composer-plugin", + "extra": { + "class": "Pest\\Plugin\\Manager" + }, + "autoload": { + "psr-4": { + "Pest\\Plugin\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "The Pest plugin manager", + "keywords": [ + "framework", + "manager", + "pest", + "php", + "plugin", + "test", + "testing", + "unit" + ], + "support": { + "source": "https://github.com/pestphp/pest-plugin/tree/v2.1.1" + }, + "funding": [ + { + "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], + "time": "2023-08-22T08:40:06+00:00" + }, + { + "name": "pestphp/pest-plugin-arch", + "version": "v2.7.0", + "source": { + "type": "git", + "url": "https://github.com/pestphp/pest-plugin-arch.git", + "reference": "d23b2d7498475354522c3818c42ef355dca3fcda" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pestphp/pest-plugin-arch/zipball/d23b2d7498475354522c3818c42ef355dca3fcda", + "reference": "d23b2d7498475354522c3818c42ef355dca3fcda", + "shasum": "" + }, + "require": { + "nunomaduro/collision": "^7.10.0|^8.1.0", + "pestphp/pest-plugin": "^2.1.1", + "php": "^8.1", + "ta-tikoma/phpunit-architecture-test": "^0.8.4" + }, + "require-dev": { + "pestphp/pest": "^2.33.0", + "pestphp/pest-dev-tools": "^2.16.0" + }, + "type": "library", + "extra": { + "pest": { + "plugins": [ + "Pest\\Arch\\Plugin" + ] + } + }, + "autoload": { + "files": [ + "src/Autoload.php" + ], + "psr-4": { + "Pest\\Arch\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "The Arch plugin for Pest PHP.", + "keywords": [ + "arch", + "architecture", + "framework", + "pest", + "php", + "plugin", + "test", + "testing", + "unit" + ], + "support": { + "source": "https://github.com/pestphp/pest-plugin-arch/tree/v2.7.0" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + } + ], + "time": "2024-01-26T09:46:42+00:00" + }, + { + "name": "pestphp/pest-plugin-laravel", + "version": "v2.4.0", + "source": { + "type": "git", + "url": "https://github.com/pestphp/pest-plugin-laravel.git", + "reference": "53df51169a7f9595e06839cce638c73e59ace5e8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pestphp/pest-plugin-laravel/zipball/53df51169a7f9595e06839cce638c73e59ace5e8", + "reference": "53df51169a7f9595e06839cce638c73e59ace5e8", + "shasum": "" + }, + "require": { + "laravel/framework": "^10.48.9|^11.5.0", + "pestphp/pest": "^2.34.7", + "php": "^8.1.0" + }, + "require-dev": { + "laravel/dusk": "^7.13.0", + "orchestra/testbench": "^8.22.3|^9.0.4", + "pestphp/pest-dev-tools": "^2.16.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Pest\\Laravel\\PestServiceProvider" + ] + }, + "pest": { + "plugins": [ + "Pest\\Laravel\\Plugin" + ] + } + }, + "autoload": { + "files": [ + "src/Autoload.php" + ], + "psr-4": { + "Pest\\Laravel\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "The Pest Laravel Plugin", + "keywords": [ + "framework", + "laravel", + "pest", + "php", + "test", + "testing", + "unit" + ], + "support": { + "source": "https://github.com/pestphp/pest-plugin-laravel/tree/v2.4.0" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + } + ], + "time": "2024-04-27T10:41:54+00:00" + }, + { + "name": "pestphp/pest-plugin-livewire", + "version": "v2.1.0", + "source": { + "type": "git", + "url": "https://github.com/pestphp/pest-plugin-livewire.git", + "reference": "e72a2f850f727dfdb6bfa6e2ee6ff478ccc93f97" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pestphp/pest-plugin-livewire/zipball/e72a2f850f727dfdb6bfa6e2ee6ff478ccc93f97", + "reference": "e72a2f850f727dfdb6bfa6e2ee6ff478ccc93f97", + "shasum": "" + }, + "require": { + "livewire/livewire": "^2.12.3|^3.0", + "pestphp/pest": "^2.9.1", + "php": "^8.1" + }, + "require-dev": { + "orchestra/testbench": "^8.5.10", + "pestphp/pest-dev-tools": "^2.12.0" + }, + "type": "library", + "autoload": { + "files": [ + "src/Autoload.php" + ], + "psr-4": { + "Pest\\Livewire\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "The Pest Livewire Plugin", + "keywords": [ + "framework", + "livewire", + "pest", + "php", + "plugin", + "test", + "testing", + "unit" + ], + "support": { + "source": "https://github.com/pestphp/pest-plugin-livewire/tree/v2.1.0" + }, + "funding": [ + { + "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], + "time": "2023-07-20T16:28:21+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "54750ef60c58e43759730615a392c31c80e23176" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" + }, + { + "name": "phar-io/version", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + }, + "time": "2020-06-27T09:03:43+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "5.6.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "f3558a4c23426d12bffeaab463f8a8d8b681193c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/f3558a4c23426d12bffeaab463f8a8d8b681193c", + "reference": "f3558a4c23426d12bffeaab463f8a8d8b681193c", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1.1", + "ext-filter": "*", + "php": "^7.4 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.7", + "phpstan/phpdoc-parser": "^1.7|^2.0", + "webmozart/assert": "^1.9.1" + }, + "require-dev": { + "mockery/mockery": "~1.3.5 || ~1.6.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-webmozart-assert": "^1.2", + "phpunit/phpunit": "^9.5", + "psalm/phar": "^5.26" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.0" + }, + "time": "2024-11-12T11:25:25+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.10.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/679e3ce485b99e84c775d28e2e96fade9a7fb50a", + "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1.0", + "php": "^7.3 || ^8.0", + "phpdocumentor/reflection-common": "^2.0", + "phpstan/phpdoc-parser": "^1.18|^2.0" + }, + "require-dev": { + "ext-tokenizer": "*", + "phpbench/phpbench": "^1.2", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.13.9", + "vimeo/psalm": "^4.25" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-1.x": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.10.0" + }, + "time": "2024-11-09T15:12:26+00:00" + }, + { + "name": "phpmyadmin/sql-parser", + "version": "5.10.1", + "source": { + "type": "git", + "url": "https://github.com/phpmyadmin/sql-parser.git", + "reference": "b14fd66496a22d8dd7f7e2791edd9e8674422f17" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpmyadmin/sql-parser/zipball/b14fd66496a22d8dd7f7e2791edd9e8674422f17", + "reference": "b14fd66496a22d8dd7f7e2791edd9e8674422f17", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "symfony/polyfill-mbstring": "^1.3", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "phpmyadmin/motranslator": "<3.0" + }, + "require-dev": { + "phpbench/phpbench": "^1.1", + "phpmyadmin/coding-standard": "^3.0", + "phpmyadmin/motranslator": "^4.0 || ^5.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.9.12", + "phpstan/phpstan-phpunit": "^1.3.3", + "phpunit/phpunit": "^8.5 || ^9.6", + "psalm/plugin-phpunit": "^0.16.1", + "vimeo/psalm": "^4.11", + "zumba/json-serializer": "~3.0.2" + }, + "suggest": { + "ext-mbstring": "For best performance", + "phpmyadmin/motranslator": "Translate messages to your favorite locale" + }, + "bin": [ + "bin/highlight-query", + "bin/lint-query", + "bin/sql-parser", + "bin/tokenize-query" + ], + "type": "library", + "autoload": { + "psr-4": { + "PhpMyAdmin\\SqlParser\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "The phpMyAdmin Team", + "email": "developers@phpmyadmin.net", + "homepage": "https://www.phpmyadmin.net/team/" + } + ], + "description": "A validating SQL lexer and parser with a focus on MySQL dialect.", + "homepage": "https://github.com/phpmyadmin/sql-parser", + "keywords": [ + "analysis", + "lexer", + "parser", + "query linter", + "sql", + "sql lexer", + "sql linter", + "sql parser", + "sql syntax highlighter", + "sql tokenizer" + ], + "support": { + "issues": "https://github.com/phpmyadmin/sql-parser/issues", + "source": "https://github.com/phpmyadmin/sql-parser" + }, + "funding": [ + { + "url": "https://www.phpmyadmin.net/donate/", + "type": "other" + } + ], + "time": "2024-11-10T04:10:31+00:00" + }, + { + "name": "phpstan/phpdoc-parser", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "c00d78fb6b29658347f9d37ebe104bffadf36299" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/c00d78fb6b29658347f9d37ebe104bffadf36299", + "reference": "c00d78fb6b29658347f9d37ebe104bffadf36299", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "doctrine/annotations": "^2.0", + "nikic/php-parser": "^5.3.0", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^9.6", + "symfony/process": "^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "PHPStan\\PhpDocParser\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPDoc parser with support for nullable, intersection and generic types", + "support": { + "issues": "https://github.com/phpstan/phpdoc-parser/issues", + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.0.0" + }, + "time": "2024-10-13T11:29:49+00:00" + }, + { + "name": "phpstan/phpstan", + "version": "1.12.12", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan.git", + "reference": "b5ae1b88f471d3fd4ba1aa0046234b5ca3776dd0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/b5ae1b88f471d3fd4ba1aa0046234b5ca3776dd0", + "reference": "b5ae1b88f471d3fd4ba1aa0046234b5ca3776dd0", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0" + }, + "conflict": { + "phpstan/phpstan-shim": "*" + }, + "bin": [ + "phpstan", + "phpstan.phar" + ], + "type": "library", + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan - PHP Static Analysis Tool", + "keywords": [ + "dev", + "static analysis" + ], + "support": { + "docs": "https://phpstan.org/user-guide/getting-started", + "forum": "https://github.com/phpstan/phpstan/discussions", + "issues": "https://github.com/phpstan/phpstan/issues", + "security": "https://github.com/phpstan/phpstan/security/policy", + "source": "https://github.com/phpstan/phpstan-src" + }, + "funding": [ + { + "url": "https://github.com/ondrejmirtes", + "type": "github" + }, + { + "url": "https://github.com/phpstan", + "type": "github" + } + ], + "time": "2024-11-28T22:13:23+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "10.1.16", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "7e308268858ed6baedc8704a304727d20bc07c77" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7e308268858ed6baedc8704a304727d20bc07c77", + "reference": "7e308268858ed6baedc8704a304727d20bc07c77", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.19.1 || ^5.1.0", + "php": ">=8.1", + "phpunit/php-file-iterator": "^4.1.0", + "phpunit/php-text-template": "^3.0.1", + "sebastian/code-unit-reverse-lookup": "^3.0.0", + "sebastian/complexity": "^3.2.0", + "sebastian/environment": "^6.1.0", + "sebastian/lines-of-code": "^2.0.2", + "sebastian/version": "^4.0.1", + "theseer/tokenizer": "^1.2.3" + }, + "require-dev": { + "phpunit/phpunit": "^10.1" + }, + "suggest": { + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "10.1.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.16" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-08-22T04:31:57+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "4.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c", + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-08-31T06:24:48+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "4.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^10.0" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:56:09+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-08-31T14:07:24+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "6.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:57:52+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "10.5.36", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "aa0a8ce701ea7ee314b0dfaa8970dc94f3f8c870" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/aa0a8ce701ea7ee314b0dfaa8970dc94f3f8c870", + "reference": "aa0a8ce701ea7ee314b0dfaa8970dc94f3f8c870", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.12.0", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", + "php": ">=8.1", + "phpunit/php-code-coverage": "^10.1.16", + "phpunit/php-file-iterator": "^4.1.0", + "phpunit/php-invoker": "^4.0.0", + "phpunit/php-text-template": "^3.0.1", + "phpunit/php-timer": "^6.0.0", + "sebastian/cli-parser": "^2.0.1", + "sebastian/code-unit": "^2.0.0", + "sebastian/comparator": "^5.0.2", + "sebastian/diff": "^5.1.1", + "sebastian/environment": "^6.1.0", + "sebastian/exporter": "^5.1.2", + "sebastian/global-state": "^6.0.2", + "sebastian/object-enumerator": "^5.0.0", + "sebastian/recursion-context": "^5.0.0", + "sebastian/type": "^4.0.0", + "sebastian/version": "^4.0.1" + }, + "suggest": { + "ext-soap": "To be able to generate mocks based on WSDL files" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "10.5-dev" + } + }, + "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.36" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" + } + ], + "time": "2024-10-08T15:36:51+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c34583b87e7b7a8055bf6c450c2c77ce32a24084", + "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T07:12:49+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:58:43+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:59:15+00:00" + }, + { + "name": "sebastian/comparator", + "version": "5.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e", + "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/diff": "^5.0", + "sebastian/exporter": "^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "security": "https://github.com/sebastianbergmann/comparator/security/policy", + "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-10-18T14:56:07+00:00" + }, + { + "name": "sebastian/complexity", + "version": "3.2.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "68ff824baeae169ec9f2137158ee529584553799" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799", + "reference": "68ff824baeae169ec9f2137158ee529584553799", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "security": "https://github.com/sebastianbergmann/complexity/security/policy", + "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-21T08:37:17+00:00" + }, + { + "name": "sebastian/diff", + "version": "5.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e", + "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0", + "symfony/process": "^6.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T07:15:17+00:00" + }, + { + "name": "sebastian/environment", + "version": "6.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "8074dbcd93529b357029f5cc5058fd3e43666984" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/8074dbcd93529b357029f5cc5058fd3e43666984", + "reference": "8074dbcd93529b357029f5cc5058fd3e43666984", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "https://github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/6.1.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-23T08:47:14+00:00" + }, + { + "name": "sebastian/exporter", + "version": "5.1.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "955288482d97c19a372d3f31006ab3f37da47adf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/955288482d97c19a372d3f31006ab3f37da47adf", + "reference": "955288482d97c19a372d3f31006ab3f37da47adf", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/recursion-context": "^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "security": "https://github.com/sebastianbergmann/exporter/security/policy", + "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T07:17:12+00:00" + }, + { + "name": "sebastian/global-state", + "version": "6.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", + "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "https://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "security": "https://github.com/sebastianbergmann/global-state/security/policy", + "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T07:19:19+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0", + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-21T08:38:20+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:08:32+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:06:18+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "05909fb5bc7df4c52992396d0116aed689f93712" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712", + "reference": "05909fb5bc7df4c52992396d0116aed689f93712", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "https://github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:05:40+00:00" + }, + { + "name": "sebastian/type", + "version": "4.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:10:45+00:00" + }, + { + "name": "sebastian/version", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-07T11:34:05+00:00" + }, + { + "name": "spatie/backtrace", + "version": "1.7.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/backtrace.git", + "reference": "0f2477c520e3729de58e061b8192f161c99f770b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/backtrace/zipball/0f2477c520e3729de58e061b8192f161c99f770b", + "reference": "0f2477c520e3729de58e061b8192f161c99f770b", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "ext-json": "*", + "laravel/serializable-closure": "^1.3 || ^2.0", + "phpunit/phpunit": "^9.3 || ^11.4.3", + "spatie/phpunit-snapshot-assertions": "^4.2 || ^5.1.6", + "symfony/var-dumper": "^5.1 || ^6.0 || ^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\Backtrace\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van de Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "A better backtrace", + "homepage": "https://github.com/spatie/backtrace", + "keywords": [ + "Backtrace", + "spatie" + ], + "support": { + "source": "https://github.com/spatie/backtrace/tree/1.7.1" + }, + "funding": [ + { + "url": "https://github.com/sponsors/spatie", + "type": "github" + }, + { + "url": "https://spatie.be/open-source/support-us", + "type": "other" + } + ], + "time": "2024-12-02T13:28:15+00:00" + }, + { + "name": "spatie/error-solutions", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/error-solutions.git", + "reference": "ae7393122eda72eed7cc4f176d1e96ea444f2d67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/error-solutions/zipball/ae7393122eda72eed7cc4f176d1e96ea444f2d67", + "reference": "ae7393122eda72eed7cc4f176d1e96ea444f2d67", + "shasum": "" + }, + "require": { + "php": "^8.0" + }, + "require-dev": { + "illuminate/broadcasting": "^10.0|^11.0", + "illuminate/cache": "^10.0|^11.0", + "illuminate/support": "^10.0|^11.0", + "livewire/livewire": "^2.11|^3.3.5", + "openai-php/client": "^0.10.1", + "orchestra/testbench": "^7.0|8.22.3|^9.0", + "pestphp/pest": "^2.20", + "phpstan/phpstan": "^1.11", + "psr/simple-cache": "^3.0", + "psr/simple-cache-implementation": "^3.0", + "spatie/ray": "^1.28", + "symfony/cache": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "vlucas/phpdotenv": "^5.5" + }, + "suggest": { + "openai-php/client": "Require get solutions from OpenAI", + "simple-cache-implementation": "To cache solutions from OpenAI" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\Ignition\\": "legacy/ignition", + "Spatie\\ErrorSolutions\\": "src", + "Spatie\\LaravelIgnition\\": "legacy/laravel-ignition" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ruben Van Assche", + "email": "ruben@spatie.be", + "role": "Developer" + } + ], + "description": "This is my package error-solutions", + "homepage": "https://github.com/spatie/error-solutions", + "keywords": [ + "error-solutions", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/error-solutions/issues", + "source": "https://github.com/spatie/error-solutions/tree/1.1.1" + }, + "funding": [ + { + "url": "https://github.com/Spatie", + "type": "github" + } + ], + "time": "2024-07-25T11:06:04+00:00" + }, + { + "name": "spatie/flare-client-php", + "version": "1.10.0", + "source": { + "type": "git", + "url": "https://github.com/spatie/flare-client-php.git", + "reference": "140a42b2c5d59ac4ecf8f5b493386a4f2eb28272" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/140a42b2c5d59ac4ecf8f5b493386a4f2eb28272", + "reference": "140a42b2c5d59ac4ecf8f5b493386a4f2eb28272", + "shasum": "" + }, + "require": { + "illuminate/pipeline": "^8.0|^9.0|^10.0|^11.0", + "php": "^8.0", + "spatie/backtrace": "^1.6.1", + "symfony/http-foundation": "^5.2|^6.0|^7.0", + "symfony/mime": "^5.2|^6.0|^7.0", + "symfony/process": "^5.2|^6.0|^7.0", + "symfony/var-dumper": "^5.2|^6.0|^7.0" + }, + "require-dev": { + "dms/phpunit-arraysubset-asserts": "^0.5.0", + "pestphp/pest": "^1.20|^2.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "spatie/pest-plugin-snapshots": "^1.0|^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.3.x-dev" + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Spatie\\FlareClient\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Send PHP errors to Flare", + "homepage": "https://github.com/spatie/flare-client-php", + "keywords": [ + "exception", + "flare", + "reporting", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/flare-client-php/issues", + "source": "https://github.com/spatie/flare-client-php/tree/1.10.0" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2024-12-02T14:30:06+00:00" + }, + { + "name": "spatie/ignition", + "version": "1.15.0", + "source": { + "type": "git", + "url": "https://github.com/spatie/ignition.git", + "reference": "e3a68e137371e1eb9edc7f78ffa733f3b98991d2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/ignition/zipball/e3a68e137371e1eb9edc7f78ffa733f3b98991d2", + "reference": "e3a68e137371e1eb9edc7f78ffa733f3b98991d2", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "php": "^8.0", + "spatie/error-solutions": "^1.0", + "spatie/flare-client-php": "^1.7", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0" + }, + "require-dev": { + "illuminate/cache": "^9.52|^10.0|^11.0", + "mockery/mockery": "^1.4", + "pestphp/pest": "^1.20|^2.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "psr/simple-cache-implementation": "*", + "symfony/cache": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "vlucas/phpdotenv": "^5.5" + }, + "suggest": { + "openai-php/client": "Require get solutions from OpenAI", + "simple-cache-implementation": "To cache solutions from OpenAI" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.5.x-dev" + } + }, + "autoload": { + "psr-4": { + "Spatie\\Ignition\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Spatie", + "email": "info@spatie.be", + "role": "Developer" + } + ], + "description": "A beautiful error page for PHP applications.", + "homepage": "https://flareapp.io/ignition", + "keywords": [ + "error", + "flare", + "laravel", + "page" + ], + "support": { + "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", + "forum": "https://twitter.com/flareappio", + "issues": "https://github.com/spatie/ignition/issues", + "source": "https://github.com/spatie/ignition" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2024-06-12T14:55:22+00:00" + }, + { + "name": "spatie/laravel-ignition", + "version": "2.9.0", + "source": { + "type": "git", + "url": "https://github.com/spatie/laravel-ignition.git", + "reference": "62042df15314b829d0f26e02108f559018e2aad0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/62042df15314b829d0f26e02108f559018e2aad0", + "reference": "62042df15314b829d0f26e02108f559018e2aad0", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "illuminate/support": "^10.0|^11.0", + "php": "^8.1", + "spatie/ignition": "^1.15", + "symfony/console": "^6.2.3|^7.0", + "symfony/var-dumper": "^6.2.3|^7.0" + }, + "require-dev": { + "livewire/livewire": "^2.11|^3.3.5", + "mockery/mockery": "^1.5.1", + "openai-php/client": "^0.8.1", + "orchestra/testbench": "8.22.3|^9.0", + "pestphp/pest": "^2.34", + "phpstan/extension-installer": "^1.3.1", + "phpstan/phpstan-deprecation-rules": "^1.1.1", + "phpstan/phpstan-phpunit": "^1.3.16", + "vlucas/phpdotenv": "^5.5" + }, + "suggest": { + "openai-php/client": "Require get solutions from OpenAI", + "psr/simple-cache-implementation": "Needed to cache solutions from OpenAI" + }, + "type": "library", + "extra": { + "laravel": { + "aliases": { + "Flare": "Spatie\\LaravelIgnition\\Facades\\Flare" + }, + "providers": [ + "Spatie\\LaravelIgnition\\IgnitionServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Spatie\\LaravelIgnition\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Spatie", + "email": "info@spatie.be", + "role": "Developer" + } + ], + "description": "A beautiful error page for Laravel applications.", + "homepage": "https://flareapp.io/ignition", + "keywords": [ + "error", + "flare", + "laravel", + "page" + ], + "support": { + "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", + "forum": "https://twitter.com/flareappio", + "issues": "https://github.com/spatie/laravel-ignition/issues", + "source": "https://github.com/spatie/laravel-ignition" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2024-12-02T08:43:31+00:00" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/tree/v1.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": "ta-tikoma/phpunit-architecture-test", + "version": "0.8.4", + "source": { + "type": "git", + "url": "https://github.com/ta-tikoma/phpunit-architecture-test.git", + "reference": "89f0dea1cb0f0d5744d3ec1764a286af5e006636" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ta-tikoma/phpunit-architecture-test/zipball/89f0dea1cb0f0d5744d3ec1764a286af5e006636", + "reference": "89f0dea1cb0f0d5744d3ec1764a286af5e006636", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18.0 || ^5.0.0", + "php": "^8.1.0", + "phpdocumentor/reflection-docblock": "^5.3.0", + "phpunit/phpunit": "^10.5.5 || ^11.0.0", + "symfony/finder": "^6.4.0 || ^7.0.0" + }, + "require-dev": { + "laravel/pint": "^1.13.7", + "phpstan/phpstan": "^1.10.52" + }, + "type": "library", + "autoload": { + "psr-4": { + "PHPUnit\\Architecture\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ni Shi", + "email": "futik0ma011@gmail.com" + }, + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Methods for testing application architecture", + "keywords": [ + "architecture", + "phpunit", + "stucture", + "test", + "testing" + ], + "support": { + "issues": "https://github.com/ta-tikoma/phpunit-architecture-test/issues", + "source": "https://github.com/ta-tikoma/phpunit-architecture-test/tree/0.8.4" + }, + "time": "2024-01-05T14:10:56+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.3", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.2.3" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:36:25+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": "^8.2" + }, + "platform-dev": [], + "plugin-api-version": "2.6.0" +} diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 1155777..6ac6c84 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -33,6 +33,7 @@ public function run(): void 'max_weekends' => 10, 'max_shifts' => 10, 'max_nights' => 10, + 'course' => fake()->numberBetween(0, 5), 'is_reservist' => false, ])->id, ]); @@ -47,6 +48,7 @@ public function run(): void 'max_weekends' => 5.5, 'max_shifts' => 10, 'max_nights' => 5.5, + 'course' => fake()->numberBetween(0, 5), 'is_reservist' => false, ])->id, ]); @@ -62,6 +64,7 @@ public function run(): void 'max_weekends' => 6, 'max_shifts' => 7, 'max_nights' => 6, + 'course' => fake()->numberBetween(0, 5), 'is_reservist' => false, ])->id, ]); @@ -77,6 +80,7 @@ public function run(): void 'max_weekends' => 5.5, 'max_shifts' => 6, 'max_nights' => 5.5, + 'course' => fake()->numberBetween(0, 5), 'is_reservist' => false, ])->id, ]); @@ -92,6 +96,7 @@ public function run(): void 'max_weekends' => 5, 'max_shifts' => 5, 'max_nights' => 5, + 'course' => fake()->numberBetween(0, 5), 'is_reservist' => false, ])->id, ]); @@ -107,6 +112,7 @@ public function run(): void 'max_weekends' => 0, 'max_shifts' => 4, 'max_nights' => 0, + 'course' => fake()->numberBetween(0, 5), 'is_reservist' => false, ])->id, ]); @@ -122,6 +128,7 @@ public function run(): void 'max_weekends' => 10, 'max_shifts' => 12, 'max_nights' => 10, + 'course' => fake()->numberBetween(0, 5), 'is_reservist' => false, ])->id, ]); diff --git a/lang/en.json b/lang/en.json index 4213935..c2c27c8 100644 --- a/lang/en.json +++ b/lang/en.json @@ -1,23 +1,48 @@ { "Commander notification of approving exchange shift request for the requesting soldier": "Hello :requestingSoldierName!
Your request to exchange your :shiftAName shift
From :shiftAStart to :shiftAEnd
With :approvingSoldierName soldier for :shiftBName shift
From :shiftBStart to :shiftBEnd
Has been approved and the exchange has been made
Have a good day!
:commanderName", "Commander notification of approving exchange shift request for the approving soldier": "Hello :approvingSoldierName!
:requestingSoldierName 's request to exchange your :shiftBName shift
From :shiftBStart to :shiftBEnd
With his :shiftAName shift
From :shiftAStart to :shiftAEnd
Has been approved and the exchange has been made
Have a good day!
:commanderName", - "Request for shift exchange from commander": "Hello :commanderName!
Do you authorize :requestingSoldierName to exchange his :shiftAName shift
From :shiftAStart to :shiftAEnd
With :approvingSoldierName in favor of :shiftBName shift
From :shiftBStart to :shiftBEnd?", "Commander notification of rejection exchange shift request for the requesting soldier": "Hello :requestingSoldierName!
Your request to exchange your :shiftAName shift
From :shiftAStart to :shiftAEnd
With :rejectingSoldierName soldier for :shiftBName shift
From :shiftBStart to :shiftBEnd
Has been rejected.
Have a good day!
:commanderName", "Commander notification of rejection exchange shift request for the rejection soldier": "Hello :rejectingSoldierName!
The :requestingSoldierName 's request to exchange your :shiftBName shift
From :shiftBStart to :shiftBEnd
With his :shiftAName shift
From :shiftAStart to :shiftAEnd
Has been rejected.
Have a good day!
:commanderName", "Soldier notification of rejection exchange shift request":"Hello :requestingSoldierName!
Your request to exchange my :shiftBName shift
From :shiftBStart to :shiftBEnd
With :shiftAName shift
From :shiftAStart to :shiftAEnd
Has been rejected.
Have a good day!
:rejectingSoldierName", "Commander notification of approving change shift request for the requesting soldier":"Hello :requestingSoldierName!
Your request to change your :shiftName shift
From :shiftStart to :shiftEnd
Has been approved and the change has been made.
Have a good day!
:commanderName", "Commander notification of approving change shift request for the approving soldier": "Hello :approvingSoldierName!
:requestingSoldierName 's request to change his :shiftName shift
From :shiftStart to :shiftEnd
With you, has been approved and the change has been made.
Have a good day!
:commanderName", - "Request for shift change from commander":"Hello :commanderName!
Do you authorize :requestingSoldierName to change his :shiftName shift
From :shiftStart to :shiftEnd
With :approvingSoldierName ?", "Commander notification of rejection change shift request for the requesting soldier": "Hello :requestingSoldierName!
Your request to change your :shiftName shift
From :shiftStart to :shiftEnd
With :approvingSoldierName
Has been rejected.
Have a good day!
:commanderName", "Commander notification of rejection change shift request for the approving soldier":"Hello :approvingSoldierName!
The :requestingSoldierName 's request to change his :shiftName shift
From :shiftStart to :shiftEnd
With you has been rejected.
Have a good day!
:commanderName", "Soldier notification of rejection change shift request":"Hello :requestingSoldierName!
Your request to change your :shiftName shift
From :shiftStart to :shiftEnd
With me, has been rejected.
Have a good day!
:rejectingSoldierName", "Commander notification of exchanging shifts for first soldier":"Hello :soldierAName!
Your :shiftAName shift
From :shiftAStart to :shiftAEnd
Replaced with :soldierBName
for :shiftBName shift
From :shiftBStart to :shiftBEnd
Have a good day!
:commander", "Commander notification of exchanging shifts for second soldier":"Hello :soldierBName!
Your :shiftBName shift
From :shiftBStart to :shiftBEnd
Replaced with :soldierAName
for :shiftAName shift
From :shiftAStart to :shiftAEnd
Have a good day!
:commander", - "Request for shift exchange from soldier":"Hello :soldierAName!
Would you like to exchange your
:shiftAName shift
From :shiftAStart to :shiftAEnd
With my :shiftBName shift
From :shiftBStart to :shiftBEnd ?
:soldierBName", "Commander notification of changing shifts for first soldier":"Hello :soldierName!:shiftName shift
From :shiftStart to :shiftEnd
Has been assigned to you.
Have a good day!
:commander", "Commander notification of changing shifts for second soldier":"Hello :soldierName!
Your :shiftName shift
From :shiftStart to :shiftEnd
Has been removed from your assignment.
Have a good day!
:commander", - "Request for shift change from soldier":"Hello :soldierName!
Would you like to get my
:shiftName shift
From :shiftStart to :shiftEnd ?
:requestingSoldierName", - "File name":":month month's shifts for :name", - "Holiday shift notification":"hello :user!
the shift weight must be updated :task which takes place on: :start_date ", - "Assigned to shift today":":today
Hello :user!!
Your :task shift will start at :startShift" + "label":"sum of :data for course :course", + "Shifts assignment notification of exchanging shifts for first soldier": "Hello :soldierAName!
Your :shiftAName shift
From :shiftAStart to :shiftAEnd
Has been exchanged with :soldierBName
for :shiftBName shift
From :shiftBStart to :shiftBEnd
Have a good day!
:shiftsAssignmentName", + "Shifts assignment notification of exchanging shifts for second soldier": "Hello :soldierBName!
Your :shiftBName shift
From :shiftBStart to :shiftBEnd
Has been exchanged with :soldierAName
for :shiftAName shift
From :shiftAStart to :shiftAEnd
Have a good day!
:shiftsAssignmentName", + "Shifts assignment notification of exchanging shifts for shifts assignment": "Hello :shiftsAssignmentName!
:shiftAName shift of :soldierAName
From :shiftAStart to :shiftAEnd
Has been exchanged with :soldierBName
for :shiftBName shift
From :shiftBStart to :shiftBEnd
Have a good day!
:shiftsAssignment2Name", + "Shifts assignment notification of exchanging shifts for commander": "Hello :commanderName!
:shiftAName shift of :soldierAName
From :shiftAStart to :shiftAEnd
Has been exchanged with :soldierBName
for :shiftBName shift
From :shiftBStart to :shiftBEnd
Have a good day!
:shiftsAssignmentName", + "Shifts assignment notification of deny exchanging shifts for first soldier":"Hello :soldierAName!
Your request to exchange your :shiftAName shift
From :shiftAStart to :shiftAEnd
With :shiftBName shift of :soldierBName
From :shiftBStart to :shiftBEnd
Has been rejected.
Have a good day!
:shiftsAssignmentName", + "Shifts assignment notification of deny exchanging shifts for second soldier": "Hello :soldierBName!
:soldierAName 's request to exchange your :shiftBName shift
From :shiftBStart to :shiftBEnd
With his :shiftAName shift
From :shiftAStart to :shiftAEnd
Has been rejected.
Have a good day!
:shiftsAssignmentName", + "Shifts assignment notification of deny exchanging shifts for commander": "Hello :commanderName!
The request to exchange :shiftAName shift of :soldierAName soldier
From :shiftAStart to :shiftAEnd
With :shiftBName shift of :soldierBName soldier
From :shiftBStart to :shiftBEnd
Has been rejected.
Have a good day!
:shiftsAssignmentName", + "Shifts assignment notification of deny exchanging shifts for shifts assignment": "Hello :shiftsAssignmentName!
The request to exchange :shiftAName shift of :soldierAName soldier
From :shiftAStart to :shiftAEnd
With :shiftBName shift of :soldierBName soldier
From :shiftBStart to :shiftBEnd
Has been rejected.
Have a good day!
:shiftsAssignment2Name", + "Commander notification of deny exchanging shifts for the first soldier": "Hello :soldierAName!
Your request to exchange your :shiftAName shift
From :shiftAStart to :shiftAEnd
With :soldierBName soldier for :shiftBName shift
From :shiftBStart to :shiftBEnd
Has been rejected.
Have a good day!
:commanderName", + "Commander notification of deny exchanging shifts for the second soldier": "Hello :soldierBName!
The :soldierAName 's request to exchange your :shiftBName shift
From :shiftBStart to :shiftBEnd
With his :shiftAName shift
From :shiftAStart to :shiftAEnd
Has been rejected.
Have a good day!
:commanderName", + "Soldier notification of deny exchange shift request": "Hello :soldierAName!
Your request to exchange my :shiftBName shift
From :shiftBStart to :shiftBEnd
With your :shiftAName shift
From :shiftAStart to :shiftAEnd
Has been rejected.
Have a good day!
:soldierBName", + "Shifts assignment notification of changing shifts for first soldier": "Hello :soldierName!
Your :shiftName shift
From :shiftStart to :shiftEnd
Has been removed from your assignment.
Have a good day!
:shiftsAssignmentName", + "Shifts assignment notification of changing shifts for second soldier": "Hello :soldierName!
:shiftName shift
From :shiftStart to :shiftEnd
Has been assigned to you.
Have a good day!
:shiftsAssignmentName", + "Shifts assignment notification of changing shifts for commander": "Hello :commanderName
The :shiftName shift of the :soldierAName soldier
From :shiftStart to :shiftEnd
Has been assigned to :soldierBName soldier.
:shiftsAssignmentName", + "Shifts assignment notification of changing shifts for shifts assignment": "Hello :shiftsAssignmentName
The :shiftName shift of the :soldierAName soldier
From :shiftStart to :shiftEnd
Has been assigned to :soldierBName soldier.
:shiftsAssignment2Name", + "Shifts assignment notification of deny changing shifts for first soldier": "Hello :soldierAName!
Your request to change your :shiftName shift
From :shiftStart to :shiftEnd
With :soldierBName
Has been rejected.
Have a good day!
:shiftsAssignmentName", + "Shifts assignment notification of deny changing shifts for second soldier": "Hello :soldierBName!
:soldierAName 's request to change his :shiftName shift
From :shiftStart to :shiftEnd
With you has been rejected.
Have a good day!
:shiftsAssignmentName", + "Shifts assignment notification of deny changing shifts for commander":"Hello :commanderName!
The request to change the assignment of :shiftName shift of :soldierAName soldier
From :shiftStart to :shiftEnd
With :soldierBName
Has been rejected.
Have a good day!
:shiftsAssignmentName", + "Shifts assignment notification of deny changing shifts for shifts assignment":"Hello :shiftsAssignmentName!
The request to change the assignment of :shiftName shift of :soldierAName soldier
From :shiftStart to :shiftEnd
With :soldierBName
Has been rejected.
Have a good day!
:shiftsAssignment2Name", + "Commander notification of deny changing shift request for the first soldier":"Hello :soldierAName!
Your request to change your :shiftName shift
From :shiftStart to :shiftEnd
With :soldierBName
Has been rejected.
Have a good day!
:commanderName", + "Commander notification of deny changing shift request for the second soldier": "Hello :soldierBName!
The :soldierAName 's request to change his :shiftName shift
From :shiftStart to :shiftEnd
With you has been rejected.
Have a good day!
:commanderName", + "Soldier notification of deny changing shift request": "Hello :soldierAName!
Your request to change your :shiftName shift
From :shiftStart to :shiftEnd
With me, has been rejected.
Have a good day!
:soldierBName", + "Request for shift exchange from shifts assignments": "Hello :shiftsAssignmentName
Do you authorize :soldierAName to exchange his :shiftAName shift
From :shiftAStart to :shiftAEnd
With :soldierBName in favor of :shiftBName shift
From :shiftBStart to :shiftBEnd?", + "Request for shift exchange from commander": "Hello :commanderName!
Do you authorize :soldierAName to exchange his :shiftAName shift
From :shiftAStart to :shiftAEnd
With :soldierBName in favor of :shiftBName shift
From :shiftBStart to :shiftBEnd?", + "Request for shift exchange from soldier": "Hello :soldierAName!
Would you like to exchange your
:shiftAName shift
From :shiftAStart to :shiftAEnd
With my :shiftBName shift
From :shiftBStart to :shiftBEnd ?
:soldierBName", + "Request for shift change from shifts assignments": "Hello :shiftsAssignmentName!
Do you authorize to change :shiftName shift assignment of :soldierAName soldier
From :shiftStart to :shiftEnd
With :soldierBName soldier?", + "Request for shift change from commander": "Hello :commanderName!
Do you authorize :soldierAName to change his :shiftName shift
From :shiftStart to :shiftEnd
With :soldierBName ?", + "Request for shift change from soldier": "Hello :soldierName!
Would you like to get my
:shiftName shift
From :shiftStart to :shiftEnd ?
:requestingSoldierName", + "File name": ":month month's shifts for :name", + "Holiday shift notification": "hello :user!
the shift weight must be updated :task which takes place on: :start_date ", + "Assigned to shift today": ":today
Hello :user!!
Your :task shift will start at :startShift" } diff --git a/lang/he.json b/lang/he.json index d041bdd..7b19879 100644 --- a/lang/he.json +++ b/lang/he.json @@ -1,4 +1,36 @@ { + "Shifts assignment notification of exchanging shifts for first soldier": "שלום :soldierAName!
המשמרת :shiftAName שלך
מ :shiftAStart עד :shiftAEnd
הוחלפה עם החייל :soldierBName
בעבור המשמרת :shiftBName שלו
מ :shiftBStart עד :shiftBEnd
המשך יום טוב!
:shiftsAssignmentName", + "Shifts assignment notification of exchanging shifts for second soldier": "שלום :soldierBName!
המשמרת :shiftBName שלך
מ :shiftBStart עד :shiftBEnd
הוחלפה עם החייל :soldierAName
בעבור המשמרת :shiftAName שלו
מ :shiftAStart עד :shiftAEnd
המשך יום טוב!
:shiftsAssignmentName", + "Shifts assignment notification of exchanging shifts for shifts assignment": "שלום :shiftsAssignmentName!
המשמרת :shiftAName של החייל :soldierAName
מ :shiftAStart עד :shiftAEnd
הוחלפה עם :soldierBName
בעבור המשמרת :shiftBName
מ :shiftBStart עד :shiftBEnd
המשך יום טוב!
:shiftsAssignment2Name", + "Shifts assignment notification of exchanging shifts for commander": "שלום :commanderName!
המשמרת :shiftAName של החייל :soldierAName
מ :shiftAStart עד :shiftAEnd
הוחלפה עם החייל :soldierBName
בעבור המשמרת :shiftBName
מ :shiftBStart עד :shiftBEnd
המשך יום טוב!
:shiftsAssignmentName", + "Shifts assignment notification of deny exchanging shifts for first soldier":"שלום :soldierAName!
בקשתך להחלפה המשמרת :shiftAName שלך
מ :shiftAStart עד :shiftAEnd
עם המשמרת :shiftBName של החייל :soldierBName
מ :shiftBStart עד :shiftBEnd
נדחתה .
המשך יום טוב!
:shiftsAssignmentName", + "Shifts assignment notification of deny exchanging shifts for second soldier": "שלום :soldierBName!
בקשת החייל :soldierAName להחליף את המשמרת :shiftBName שלך
מ :shiftBStart עד :shiftBEnd
עם המשמרת:shiftAName שלו
מ :shiftAStart עד :shiftAEnd
נדחתה.
המשך יום טוב!
:shiftsAssignmentName", + "Shifts assignment notification of deny exchanging shifts for commander": "שלום :commanderName!
הבקשה להחלפת המשמרת :shiftAName של החייל :soldierAName
מ :shiftAStart עד :shiftAEnd
עם המשמרת :shiftBName של החייל :soldierBName
מ :shiftBStart עד :shiftBEnd
נדחתה.
המשך יום טוב!
:shiftsAssignmentName", + "Shifts assignment notification of deny exchanging shifts for shifts assignment": "שלום :shiftsAssignmentName!
הבקשה להחלפת המשמרת :shiftAName של החייל :soldierAName
מ :shiftAStart עד :shiftAEnd
עם המשמרת :shiftBName של החייל :soldierBName
מ :shiftBStart עד :shiftBEnd
נדחתה.
המשך יום טוב!
:shiftsAssignment2Name", + "Commander notification of deny exchanging shifts for the first soldier": "שלום :soldierAName!
בקשתך להחלפת המשמרת :shiftAName שלך
מ :shiftAStart עד :shiftAEnd
עם החייל :soldierBName בעבור המשמרת :shiftBName שלו
מ :shiftBStart עד :shiftBEnd
נדחתה.
המשך יום טוב!
:commanderName", + "Commander notification of deny exchanging shifts for the second soldier": "שלום :soldierBName!
הבקשה של החייל :soldierAName להחליף את המשמרת :shiftBName שלך
מ :shiftBStart עד :shiftBEnd
עם המשמרת :shiftAName שלו
מ :shiftAStart עד :shiftAEnd
נדחתה.
המשך יום טוב!
:commanderName", + "Soldier notification of deny exchange shift request": "שלום :soldierAName!
בקשתך להחלפת המשמרת :shiftBName שלך
מ :shiftBStart עד :shiftBEnd
עם המשמרת :shiftAName שלי
מ :shiftAStart עד :shiftAEnd
נדחתה.
המשך יום טוב!
:soldierBName", + + "Shifts assignment notification of changing shifts for first soldier": "שלום :soldierName!
המשמרת :shiftName שלך
מ :shiftStart עד :shiftEnd
הוסרה מהקצאתך.
המשך יום טוב!
:shiftsAssignmentName", + "Shifts assignment notification of changing shifts for second soldier": "שלום :soldierName!
המשמרת :shiftName
מ :shiftStart עד :shiftEnd
הוקצתה לך.
המשך יום טוב!
:shiftsAssignmentName", + "Shifts assignment notification of changing shifts for commander": "שלום :commanderName!
המשמרת :shiftName של החייל :soldierAName
מ :shiftStart עד :shiftEnd
הוקצתה לחייל :soldierBName.
:shiftsAssignmentName", + "Shifts assignment notification of changing shifts for shifts assignment": "שלום :shiftsAssignmentName!
המשמרת :shiftName של החייל :soldierAName
מ :shiftStart עד :shiftEnd
הוקצתה לחייל :soldierBName.
:shiftsAssignment2Name", + "Shifts assignment notification of deny changing shifts for first soldier": "שלום :soldierAName!
בקשתך להעביר את המשמרת :shiftName שלך
מ :shiftStart עד :shiftEnd
לחייל :soldierBName
נדחתה.
המשך יום טוב!
:shiftsAssignmentName", + "Shifts assignment notification of deny changing shifts for second soldier": "שלום :soldierBName!
בקשת החייל :soldierAName להעביר את המשמרת :shiftName שלו
מ :shiftStart עד :shiftEnd
אליך, נדחתה.
המשך יום טוב!
:shiftsAssignmentName", + "Shifts assignment notification of deny changing shifts for commander":"שלום :commanderName!
הבקשה להעביר את המשמרת :shiftName של החייל :soldierAName
מ :shiftStart עד :shiftEnd
לחייל :soldierBName
נדחתה.
המשך יום טוב!
:shiftsAssignmentName", + "Shifts assignment notification of deny changing shifts for shifts assignment":"שלום :shiftsAssignmentName!
הבקשה להעביר את המשמרת :shiftName של החייל :soldierAName
מ :shiftStart עד :shiftEnd
לחייל :soldierBName
נדחתה.
המשך יום טוב!
:shiftsAssignment2Name", + "Commander notification of deny changing shift request for the first soldier":"שלום :soldierAName!
בקשתך להעביר את המשמרת :shiftName שלך
מ :shiftStart עד :shiftEnd
לחייל :soldierBName
נדחתה.
המשך יום טוב!
:commanderName", + "Commander notification of deny changing shift request for the second soldier": "שלום :soldierBName!
בקשת החייל :soldierAName להעביר את המשמרת :shiftName שלו
מ :shiftStart עד :shiftEnd
אליך, נדחתה.
המשך יום טוב!
:commanderName", + "Soldier notification of deny changing shift request": "שלום :soldierAName!
בקשתך להעביר את המשמרת :shiftName שלך
מ :shiftStart עד :shiftEnd
אלי, נדחתה.
המשך יום טוב!
:soldierBName", + + "Request for shift exchange from shifts assignments": "שלום :shiftsAssignmentName!
האם אתה מאשר לחייל :soldierAName
להחליף את המשמרת :shiftAName שלו
מ :shiftAStart עד :shiftAEnd
עם החייל :soldierBName
בעבור המשמרת :shiftBName שלו
מ :shiftBStart עד :shiftBEnd?", + "Request for shift exchange from commander": "שלום :commanderName!
האם אתה מאשר לחייל :soldierAName
להחליף את המשמרת :shiftAName שלו
מ :shiftAStart עד :shiftAEnd
עם החייל :soldierBName
בעבור המשמרת :shiftBName שלו
מ :shiftBStart עד :shiftBEnd?", + "Request for shift exchange from soldier": "שלום :soldierAName!
האם תרצה להחליף את המשמרת :shiftAName שלך
מ :shiftAStart עד :shiftAEnd
עם המשמרת :shiftBName שלי
מ :shiftBStart עד :shiftBEnd ?
:soldierBName", + + "Request for shift change from shifts assignments": "שלום :shiftsAssignmentName!
האם אתה מאשר להעביר את המשמרת :shiftName של החייל :soldierAName
מ :shiftStart עד :shiftEnd
לחייל :soldierBName?", + "Request for shift change from commander": "שלום :commanderName!
האם אתה מאשר לחייל :soldierAName להעביר את המשמרת :shiftName שלו
מ :shiftStart עד :shiftEnd
לחייל :soldierBName?", + "Request for shift change from soldier": "שלום :soldierName!
האם תרצה לבצע את המשמרת
:shiftName שלי
מ :shiftStart עד :shiftEnd?
:requestingSoldierName", + "Add a team member":"הוסף חבר צוות", "Add an identifier to the name so that it is not the same as another name.":"הוסף מזהה לשם כך שהוא לא יהיה זהה לשם אחר. ", "Add member": "הוסף חבר לצוות", @@ -8,30 +40,15 @@ "All": "כולם", "All soldiers":"כל החיילים", "And": "ו", + "August":"אוגוסט", + "April":"אפריל", "Assign soldier": "הקצה חייל", + "Assignment charts":"תרשימי שיבוץ", "Assigning the soldier to this shift is your sole responsibility!":"הקצאת החייל למשמרת זו הינה באחריותך בלבד! ", "Approve exchange shift request":"אישור בקשת החלפת משמרת", - "Commander notification of approving exchange shift request for the requesting soldier": "שלום :requestingSoldierName!
בקשתך להחלפת משמרת :shiftAName
מ :shiftAStart עד :shiftAEnd
עם החייל :approvingSoldierName בעבור משמרת :shiftBName
מ :shiftBStart עד :shiftBEnd
אושרה וההחלפה בוצעה.
יום מוצלח!
:commanderName", - "Commander notification of approving exchange shift request for the approving soldier": "שלום :approvingSoldierName!
בקשת :requestingSoldierName להחליף את המשמרת :shiftBName שלך
מ :shiftBStart עד :shiftBEnd
עם המשמרת :shiftAName שלו
מ :shiftAStart עד :shiftAEnd
אושרה וההחלפה בוצעה.
יום מוצלח!
:commanderName", "Request for shift exchange":"בקשה להחלפת משמרת", - "Request for shift exchange from commander": "שלום :commanderName!
האם אתה מאשר לחייל :requestingSoldierName להחליף את המשמרת :shiftAName שלו
מ :shiftAStart עד :shiftAEnd
עם החייל :approvingSoldierName בעבור המשמרת :shiftBName
מ :shiftBStart עד :shiftBEnd?", - "Commander notification of rejection exchange shift request for the requesting soldier": "שלום :requestingSoldierName!
בקשתך להחלפת משמרת :shiftAName
מ :shiftAStart עד :shiftAEnd
עם החייל :rejectingSoldierName בעבור משמרת :shiftBName
מ :shiftBStart עד :shiftBEnd
נדחתה.
יום נעים!
:commanderName", - "Commander notification of rejection exchange shift request for the rejection soldier":"שלום :rejectingSoldierName!
בקשת החייל :requestingSoldierName להחליף את המשמרת :shiftBName שלך
מ :shiftBStart עד :shiftBEnd
עם המשמרת :shiftAName שלו
מ :shiftAStart עד :shiftAEnd
נדחתה.
יום טוב!
:commanderName", - "Soldier notification of rejection exchange shift request":"שלום :requestingSoldierName!
בקשתך להחלפת משמרת :shiftBName
מ :shiftBStart עד :shiftBEnd
עם המשמרת :shiftAName שלי
מ :shiftAStart עד :shiftAEnd
נדחתה.
המשך יום קסום!
:rejectingSoldierName", - "Commander notification of approving change shift request for the requesting soldier":"שלום :requestingSoldierName!
בקשתך להחלפת המשמרת :shiftName שלך
מ :shiftStart עד :shiftEnd
אושרה והשינוי בוצע.
יום טוב!
:commanderName", - "Commander notification of approving change shift request for the approving soldier": "שלום :approvingSoldierName!
בקשת החייל :requestingSoldierName להחליף את המשמרת :shiftName שלו
מ :shiftStart עד :shiftEnd
איתך, אושרה והשינוי בוצע.
המשך יום טוב!
:commanderName", "Request for shift change":"בקשה לשינוי משמרת", "Approve change shift request":"אישור בקשת שינוי משמרת", - "Request for shift change from commander":"שלום :commanderName!
האם אתה מאשר לחייל :requestingSoldierName להחליף את המשמרת :shiftName שלו
מ :shiftStart עד :shiftEnd
עם החייל :approvingSoldierName ?", - "Commander notification of rejection change shift request for the requesting soldier": "שלום :requestingSoldierName!
בקשתך לשינוי המשמרת :shiftName שלך
מ :shiftStart עד :shiftEnd
עם :approvingSoldierName
נדחתה.
יום טוב!
:commanderName", - "Commander notification of rejection change shift request for the approving soldier":"שלום :approvingSoldierName!
בקשת החייל :requestingSoldierName לשינוי המשמרת :shiftName שלו
מ :shiftStart עד :shiftEnd
איתך - נדחתה.
המשך יום טוב!
:commanderName", - "Soldier notification of rejection change shift request":"שלום :requestingSoldierName!
בקשתך לשינוי המשמרת :shiftName שלך
מ :shiftStart עד :shiftEnd
איתי, נדחתה.
המשך יום טוב!
:rejectingSoldierName", - "Commander notification of exchanging shifts for first soldier":"שלום :soldierAName!
המשמרת :shiftAName שלך
מ :shiftAStart עד :shiftAEnd
הוחלפה עם :soldierBName
עבור המשמרת :shiftBName
מ :shiftBStart עד :shiftBEnd
יום קסום!
:commander", - "Commander notification of exchanging shifts for second soldier":"שלום :soldierBName!
המשמרת :shiftBName שלך
מ :shiftBStart עד :shiftBEnd
הוחלפה עם :soldierAName
עבור המשמרת :shiftAName
מ :shiftAStart עד :shiftAEnd
יום קסום!
:commander", - "Request for shift exchange from soldier":"שלום :soldierAName!
האם תרצה להחליף את המשמרת
:shiftAName שלך
מ :shiftAStart עד :shiftAEnd
עם המשמרת:shiftBName שלי
מ :shiftBStart עד :shiftBEnd ?
:soldierBName", - "Commander notification of changing shifts for first soldier":"שלום :soldierName!
המשמרת :shiftName
מ :shiftStart עד :shiftEnd
הוקצתה לך.
המשך יום טוב!
:commander", - "Commander notification of changing shifts for second soldier":"שלום :soldierName!
המשמרת :shiftName שלך
מ :shiftStart עד :shiftEnd
הוסרה מהקצאתך.
המשך יום טוב!
:commander", - "Request for shift change from soldier":"שלום :soldierName!
האם תרצה לבצע את המשמרת
:shiftName שלי
מ :shiftStart עד :shiftEnd ?
:requestingSoldierName", "Assigned to shift today":":today
שלום :user!!
המשמרת :task שלך, תחל בשעה :startShift", "Between":"בין", "Between from":"מ", @@ -39,7 +56,9 @@ "Cancel":"בטל", "Capacity": "מקסימום נקודות", "Capacity hold": "הנקודות שבוצעו", + "December":"דצמבר", "Changing the shifts is your sole responsibility! (pay attention to conflicts between shifts).":"החלפת המשמרות באחריותך בלבד! (שים לב להתנגשויות בין משמרות).", + "Charts":"תרשימים", "Color": "צבע", "Columns": "עמודות", "Commander": "מפקד", @@ -48,6 +67,7 @@ "Constraint": "אילוץ", "Constraint Name": "שם אילוץ", "Constraints": "אילוצים", + "constraints": "אילוצים", "Constraints limit": "הגבלת אילוצים", "Course": "קורס", "Create":"צור", @@ -89,7 +109,7 @@ "Filter": "סנן", "First name": "שם פרטי", "Friday":"שישי", - "From": "מתאריך", + "From": "מ", "Full name": "שם מלא", "Gender": "מין", "Go to view the schedule of shifts assigned to you for this month.":"עבור לצפות בלוח המשימות שהוקצו לך לחודש זה.", @@ -109,12 +129,17 @@ "Is permanent": "קבע", "Is trainee": "חניך", "Is weekend": "סופ''ש", + "June":"יוני", + "July":"יולי", "Last name": "שם משפחה", "Less than":"פחות מ", "Less than equal":"פחות או שווה", "Low priority not task":"עדיפות נמוכה למשמרת", "Low priority not weekend":"עדיפות נמוכה לסופ''ש", + "low Constraints Rejected":"אילוצים בעדיפות נמוכה", + "lowConstraintsRejected":"אילוצים בעדיפות נמוכה", "Male": "זכר", + "May":"מאי", "Matching soldiers":"החיילים המתאימים", "Manager": "מנהל", "Max nights": "מקסימום לילות", @@ -124,6 +149,7 @@ "Medical":"מחלה", "Members": "חברים", "Monday":"שני", + "Month":"חודש", "Monthly": "חודשי", "My Constraint": "האילוץ שלי", "My Constraints": "האילוצים שלי", @@ -139,7 +165,10 @@ "New assignment":"הקצאה חדשה", "New task": "משימה חדשה", "Next reserve dates": "ימי מילואים לחודש הבא", + "Nights":"לילות", + "nights":"לילות", "No":"לא", + "No matching data!":"אין נתונים תואמים!", "No qualifications": "אין הסמכות", "No suitable soldiers":"אין חיילים מתאימים", "Not evening":"ערב", @@ -147,12 +176,16 @@ "Not task":"ללא משמרת", "Not Thursday evening":"חמישי ערב", "Not weekend":"סופ''ש", + "November":"נובמבר", + "October":"אוקטובר", "One time": "חד פעמי", "Time":"זמן", "Pay attention to update the shift details according to the changes you made .": " שים לב לעדכן את פרטי המשמרת בהתאם לשינויים שביצעת.", "Parallel weight": "משקל", "Personal Information": "נתונים אישיים", "Personal number": "מספר אישי", + "Points":"נקודות", + "points":"נקודות", "Qualifications": "הסמכות", "Recurring": "חזרתיות", "Recurring type": "סוג חזרתיות", @@ -171,14 +204,19 @@ "School":"לימודים", "Select an option": "בחר", "Select condition": "בחר תנאי", + "Select course":"בחר קורס", "Select from dates": "בחר מתאריך", + "Select month":"בחר חודש", "Select a soldier":"בחר חייל", + "Select parameter to filter":"בחר פרמטר לפילטור", + "Select year":"בחר שנה", "Select qualifications":"בחר הסמכות", "Send": "שלח", "Shift": "משמרת", "Shift change":"החלפת משמרות", "Shift name":"שם המשמרת", "Shifts": "משמרות", + "shifts": "משמרות", "Shifts assignment":"שבץ משמרות", "A shifts assignment":"משבץ משמרות", "Soldier": "חייל", @@ -191,6 +229,7 @@ "Start hour": "שעת התחלה", "Sunday":"ראשון", "Saturday":"שבת", + "September":"ספטמבר", "Task": "משימה", "Tasks": "משימות", "Task type": "סוג משימה", @@ -204,7 +243,6 @@ "Type": "סוג", "To":"עד", "Unassigned shifts":"משמרות שלא שובצו", - "Until": "עד תאריך", "Update parallel weight of holiday shift":"עדכון משקל של משמרת חג", "Update dragged shift details!": "עדכון פרטי משמרת שנגררה", "Update reserve days": "ימי מילואים לחודש הבא", @@ -217,8 +255,16 @@ "View assigned shifts":"צפה במשמרות שהוקצו עבורך", "View your shift schedule":"הצג את לוח המשמרות שלך", "Wednesday":"רביעי", + "Weekends":"סופשים", + "weekends":"סופשים", "Weekly": "שבועי", "Yes":"כן", + "Year":"שנה", + "January":"ינואר", + "February":"פבואר", + "March":"מאץ", + "cddzx":"hello :user", "You did not choose a commander. With your approval, you leave the team without a commander. Are you sure?":"לא בחרת מפקד. באישורך אתה משאיר את הצוות ללא מפקד. האם אתה בטוח?", - "Your shifts for today":"המשמרות שלך להיום" + "Your shifts for today":"המשמרות שלך להיום", + "label":"מספר :data עבור קורס :course" } diff --git a/public/js/app/components/apexcharts.js b/public/js/app/components/apexcharts.js new file mode 100644 index 0000000..1c0f544 --- /dev/null +++ b/public/js/app/components/apexcharts.js @@ -0,0 +1,800 @@ +var Ci=Object.create;var vt=Object.defineProperty;var Li=Object.getOwnPropertyDescriptor;var Pi=Object.getOwnPropertyNames;var Mi=Object.getPrototypeOf,Ii=Object.prototype.hasOwnProperty;var yt=(p,e)=>()=>(e||p((e={exports:{}}).exports,e),e.exports);var Ti=(p,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of Pi(e))!Ii.call(p,a)&&a!==t&&vt(p,a,{get:()=>e[a],enumerable:!(i=Li(e,a))||i.enumerable});return p};var zi=(p,e,t)=>(t=p!=null?Ci(Mi(p)):{},Ti(e||!p||!p.__esModule?vt(t,"default",{value:p,enumerable:!0}):t,p));var jt=yt((ot,We)=>{"use strict";function at(p,e){(e==null||e>p.length)&&(e=p.length);for(var t=0,i=Array(e);t>16,n=i>>8&255,o=255&i;return"#"+(16777216+65536*(Math.round((a-r)*s)+r)+256*(Math.round((a-n)*s)+n)+(Math.round((a-o)*s)+o)).toString(16).slice(1)}},{key:"shadeColor",value:function(e,t){return p.isColorHex(t)?this.shadeHexColor(e,t):this.shadeRGBColor(e,t)}}],[{key:"bind",value:function(e,t){return function(){return e.apply(t,arguments)}}},{key:"isObject",value:function(e){return e&&J(e)==="object"&&!Array.isArray(e)&&e!=null}},{key:"is",value:function(e,t){return Object.prototype.toString.call(t)==="[object "+e+"]"}},{key:"listToArray",value:function(e){var t,i=[];for(t=0;t1&&arguments[1]!==void 0?arguments[1]:2;return Number.isInteger(e)?e:parseFloat(e.toPrecision(t))}},{key:"randomId",value:function(){return(Math.random()+1).toString(36).substring(4)}},{key:"noExponents",value:function(e){var t=String(e).split(/[eE]/);if(t.length===1)return t[0];var i="",a=e<0?"-":"",s=t[0].replace(".",""),r=Number(t[1])+1;if(r<0){for(i=a+"0.";r++;)i+="0";return i+s.replace(/^-/,"")}for(r-=s.length;r--;)i+="0";return s+i}},{key:"getDimensions",value:function(e){var t=getComputedStyle(e,null),i=e.clientHeight,a=e.clientWidth;return i-=parseFloat(t.paddingTop)+parseFloat(t.paddingBottom),[a-=parseFloat(t.paddingLeft)+parseFloat(t.paddingRight),i]}},{key:"getBoundingClientRect",value:function(e){var t=e.getBoundingClientRect();return{top:t.top,right:t.right,bottom:t.bottom,left:t.left,width:e.clientWidth,height:e.clientHeight,x:t.left,y:t.top}}},{key:"getLargestStringFromArr",value:function(e){return e.reduce(function(t,i){return Array.isArray(i)&&(i=i.reduce(function(a,s){return a.length>s.length?a:s})),t.length>i.length?t:i},0)}},{key:"hexToRgba",value:function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"#999999",t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:.6;e.substring(0,1)!=="#"&&(e="#999999");var i=e.replace("#","");i=i.match(new RegExp("(.{"+i.length/3+"})","g"));for(var a=0;a1&&arguments[1]!==void 0?arguments[1]:"x",i=e.toString().slice();return i=i.replace(/[` ~!@#$%^&*()|+\=?;:'",.<>{}[\]\\/]/gi,t)}},{key:"negToZero",value:function(e){return e<0?0:e}},{key:"moveIndexInArray",value:function(e,t,i){if(i>=e.length)for(var a=i-e.length+1;a--;)e.push(void 0);return e.splice(i,0,e.splice(t,1)[0]),e}},{key:"extractNumber",value:function(e){return parseFloat(e.replace(/[^\d.]*/g,""))}},{key:"findAncestor",value:function(e,t){for(;(e=e.parentElement)&&!e.classList.contains(t););return e}},{key:"setELstyles",value:function(e,t){for(var i in t)t.hasOwnProperty(i)&&(e.style.key=t[i])}},{key:"preciseAddition",value:function(e,t){var i=(String(e).split(".")[1]||"").length,a=(String(t).split(".")[1]||"").length,s=Math.pow(10,Math.max(i,a));return(Math.round(e*s)+Math.round(t*s))/s}},{key:"isNumber",value:function(e){return!isNaN(e)&&parseFloat(Number(e))===e&&!isNaN(parseInt(e,10))}},{key:"isFloat",value:function(e){return Number(e)===e&&e%1!=0}},{key:"isSafari",value:function(){return/^((?!chrome|android).)*safari/i.test(navigator.userAgent)}},{key:"isFirefox",value:function(){return navigator.userAgent.toLowerCase().indexOf("firefox")>-1}},{key:"isMsEdge",value:function(){var e=window.navigator.userAgent,t=e.indexOf("Edge/");return t>0&&parseInt(e.substring(t+5,e.indexOf(".",t)),10)}},{key:"getGCD",value:function(e,t){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:7,a=Math.pow(10,i-Math.floor(Math.log10(Math.max(e,t))));for(e=Math.round(Math.abs(e)*a),t=Math.round(Math.abs(t)*a);t;){var s=t;t=e%t,e=s}return e/a}},{key:"getPrimeFactors",value:function(e){for(var t=[],i=2;e>=2;)e%i==0?(t.push(i),e/=i):i++;return t}},{key:"mod",value:function(e,t){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:7,a=Math.pow(10,i-Math.floor(Math.log10(Math.max(e,t))));return(e=Math.round(Math.abs(e)*a))%(t=Math.round(Math.abs(t)*a))/a}}]),p}(),ve=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w,this.setEasingFunctions()}return R(p,[{key:"setEasingFunctions",value:function(){var e;if(!this.w.globals.easing){switch(this.w.config.chart.animations.easing){case"linear":e="-";break;case"easein":e="<";break;case"easeout":e=">";break;case"easeinout":default:e="<>";break;case"swing":e=function(t){var i=1.70158;return(t-=1)*t*((i+1)*t+i)+1};break;case"bounce":e=function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375};break;case"elastic":e=function(t){return t===!!t?t:Math.pow(2,-10*t)*Math.sin((t-.075)*(2*Math.PI)/.3)+1}}this.w.globals.easing=e}}},{key:"animateLine",value:function(e,t,i,a){e.attr(t).animate(a).attr(i)}},{key:"animateMarker",value:function(e,t,i,a){e.attr({opacity:0}).animate(t,i).attr({opacity:1}).afterAll(function(){a()})}},{key:"animateRect",value:function(e,t,i,a,s){e.attr(t).animate(a).attr(i).afterAll(function(){return s()})}},{key:"animatePathsGradually",value:function(e){var t=e.el,i=e.realIndex,a=e.j,s=e.fill,r=e.pathFrom,n=e.pathTo,o=e.speed,h=e.delay,c=this.w,d=0;c.config.chart.animations.animateGradually.enabled&&(d=c.config.chart.animations.animateGradually.delay),c.config.chart.animations.dynamicAnimation.enabled&&c.globals.dataChanged&&c.config.chart.type!=="bar"&&(d=0),this.morphSVG(t,i,a,c.config.chart.type!=="line"||c.globals.comboCharts?s:"stroke",r,n,o,h*d)}},{key:"showDelayedElements",value:function(){this.w.globals.delayedElements.forEach(function(e){var t=e.el;t.classList.remove("apexcharts-element-hidden"),t.classList.add("apexcharts-hidden-element-shown")})}},{key:"animationCompleted",value:function(e){var t=this.w;t.globals.animationEnded||(t.globals.animationEnded=!0,this.showDelayedElements(),typeof t.config.chart.events.animationEnd=="function"&&t.config.chart.events.animationEnd(this.ctx,{el:e,w:t}))}},{key:"morphSVG",value:function(e,t,i,a,s,r,n,o){var h=this,c=this.w;s||(s=e.attr("pathFrom")),r||(r=e.attr("pathTo"));var d=function(g){return c.config.chart.type==="radar"&&(n=1),"M 0 ".concat(c.globals.gridHeight)};(!s||s.indexOf("undefined")>-1||s.indexOf("NaN")>-1)&&(s=d()),(!r||r.indexOf("undefined")>-1||r.indexOf("NaN")>-1)&&(r=d()),c.globals.shouldAnimate||(n=1),e.plot(s).animate(1,c.globals.easing,o).plot(s).animate(n,c.globals.easing,o).plot(r).afterAll(function(){P.isNumber(i)?i===c.globals.series[c.globals.maxValsInArrayIndex].length-2&&c.globals.shouldAnimate&&h.animationCompleted(e):a!=="none"&&c.globals.shouldAnimate&&(!c.globals.comboCharts&&t===c.globals.series.length-1||c.globals.comboCharts)&&h.animationCompleted(e),h.showDelayedElements()})}}]),p}(),ie=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"getDefaultFilter",value:function(e,t){var i=this.w;e.unfilter(!0),new window.SVG.Filter().size("120%","180%","-5%","-40%"),i.config.states.normal.filter!=="none"?this.applyFilter(e,t,i.config.states.normal.filter.type,i.config.states.normal.filter.value):i.config.chart.dropShadow.enabled&&this.dropShadow(e,i.config.chart.dropShadow,t)}},{key:"addNormalFilter",value:function(e,t){var i=this.w;i.config.chart.dropShadow.enabled&&!e.node.classList.contains("apexcharts-marker")&&this.dropShadow(e,i.config.chart.dropShadow,t)}},{key:"addLightenFilter",value:function(e,t,i){var a=this,s=this.w,r=i.intensity;e.unfilter(!0),new window.SVG.Filter,e.filter(function(n){var o=s.config.chart.dropShadow;(o.enabled?a.addShadow(n,t,o):n).componentTransfer({rgb:{type:"linear",slope:1.5,intercept:r}})}),e.filterer.node.setAttribute("filterUnits","userSpaceOnUse"),this._scaleFilterSize(e.filterer.node)}},{key:"addDarkenFilter",value:function(e,t,i){var a=this,s=this.w,r=i.intensity;e.unfilter(!0),new window.SVG.Filter,e.filter(function(n){var o=s.config.chart.dropShadow;(o.enabled?a.addShadow(n,t,o):n).componentTransfer({rgb:{type:"linear",slope:r}})}),e.filterer.node.setAttribute("filterUnits","userSpaceOnUse"),this._scaleFilterSize(e.filterer.node)}},{key:"applyFilter",value:function(e,t,i){var a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:.5;switch(i){case"none":this.addNormalFilter(e,t);break;case"lighten":this.addLightenFilter(e,t,{intensity:a});break;case"darken":this.addDarkenFilter(e,t,{intensity:a})}}},{key:"addShadow",value:function(e,t,i){var a,s=this.w,r=i.blur,n=i.top,o=i.left,h=i.color,c=i.opacity;if(((a=s.config.chart.dropShadow.enabledOnSeries)===null||a===void 0?void 0:a.length)>0&&s.config.chart.dropShadow.enabledOnSeries.indexOf(t)===-1)return e;var d=e.flood(Array.isArray(h)?h[t]:h,c).composite(e.sourceAlpha,"in").offset(o,n).gaussianBlur(r).merge(e.source);return e.blend(e.source,d)}},{key:"dropShadow",value:function(e,t){var i,a,s=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,r=t.top,n=t.left,o=t.blur,h=t.color,c=t.opacity,d=t.noUserSpaceOnUse,g=this.w;return e.unfilter(!0),P.isMsEdge()&&g.config.chart.type==="radialBar"||((i=g.config.chart.dropShadow.enabledOnSeries)===null||i===void 0?void 0:i.length)>0&&((a=g.config.chart.dropShadow.enabledOnSeries)===null||a===void 0?void 0:a.indexOf(s))===-1||(h=Array.isArray(h)?h[s]:h,e.filter(function(f){var x=null;x=P.isSafari()||P.isFirefox()||P.isMsEdge()?f.flood(h,c).composite(f.sourceAlpha,"in").offset(n,r).gaussianBlur(o):f.flood(h,c).composite(f.sourceAlpha,"in").offset(n,r).gaussianBlur(o).merge(f.source),f.blend(f.source,x)}),d||e.filterer.node.setAttribute("filterUnits","userSpaceOnUse"),this._scaleFilterSize(e.filterer.node)),e}},{key:"setSelectionFilter",value:function(e,t,i){var a=this.w;if(a.globals.selectedDataPoints[t]!==void 0&&a.globals.selectedDataPoints[t].indexOf(i)>-1){e.node.setAttribute("selected",!0);var s=a.config.states.active.filter;s!=="none"&&this.applyFilter(e,t,s.type,s.value)}}},{key:"_scaleFilterSize",value:function(e){(function(t){for(var i in t)t.hasOwnProperty(i)&&e.setAttribute(i,t[i])})({width:"200%",height:"200%",x:"-50%",y:"-50%"})}}]),p}(),X=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"roundPathCorners",value:function(e,t){function i(S,L,C){var I=L.x-S.x,z=L.y-S.y,M=Math.sqrt(I*I+z*z);return a(S,L,Math.min(1,C/M))}function a(S,L,C){return{x:S.x+(L.x-S.x)*C,y:S.y+(L.y-S.y)*C}}function s(S,L){S.length>2&&(S[S.length-2]=L.x,S[S.length-1]=L.y)}function r(S){return{x:parseFloat(S[S.length-2]),y:parseFloat(S[S.length-1])}}e.indexOf("NaN")>-1&&(e="");var n=e.split(/[,\s]/).reduce(function(S,L){var C=L.match("([a-zA-Z])(.+)");return C?(S.push(C[1]),S.push(C[2])):S.push(L),S},[]).reduce(function(S,L){return parseFloat(L)==L&&S.length?S[S.length-1].push(L):S.push([L]),S},[]),o=[];if(n.length>1){var h=r(n[0]),c=null;n[n.length-1][0]=="Z"&&n[0].length>2&&(c=["L",h.x,h.y],n[n.length-1]=c),o.push(n[0]);for(var d=1;d2&&f[0]=="L"&&x.length>2&&x[0]=="L"){var b,v,y=r(g),w=r(f),l=r(x);b=i(w,y,t),v=i(w,l,t),s(f,b),f.origPoint=w,o.push(f);var u=a(b,w,.5),m=a(w,v,.5),A=["C",u.x,u.y,m.x,m.y,v.x,v.y];A.origPoint=w,o.push(A)}else o.push(f)}if(c){var k=r(o[o.length-1]);o.push(["Z"]),s(o[0],k)}}else o=n;return o.reduce(function(S,L){return S+L.join(" ")+" "},"")}},{key:"drawLine",value:function(e,t,i,a){var s=arguments.length>4&&arguments[4]!==void 0?arguments[4]:"#a8a8a8",r=arguments.length>5&&arguments[5]!==void 0?arguments[5]:0,n=arguments.length>6&&arguments[6]!==void 0?arguments[6]:null,o=arguments.length>7&&arguments[7]!==void 0?arguments[7]:"butt";return this.w.globals.dom.Paper.line().attr({x1:e,y1:t,x2:i,y2:a,stroke:s,"stroke-dasharray":r,"stroke-width":n,"stroke-linecap":o})}},{key:"drawRect",value:function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0,t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,s=arguments.length>4&&arguments[4]!==void 0?arguments[4]:0,r=arguments.length>5&&arguments[5]!==void 0?arguments[5]:"#fefefe",n=arguments.length>6&&arguments[6]!==void 0?arguments[6]:1,o=arguments.length>7&&arguments[7]!==void 0?arguments[7]:null,h=arguments.length>8&&arguments[8]!==void 0?arguments[8]:null,c=arguments.length>9&&arguments[9]!==void 0?arguments[9]:0,d=this.w.globals.dom.Paper.rect();return d.attr({x:e,y:t,width:i>0?i:0,height:a>0?a:0,rx:s,ry:s,opacity:n,"stroke-width":o!==null?o:0,stroke:h!==null?h:"none","stroke-dasharray":c}),d.node.setAttribute("fill",r),d}},{key:"drawPolygon",value:function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"#e1e1e1",i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"none";return this.w.globals.dom.Paper.polygon(e).attr({fill:a,stroke:t,"stroke-width":i})}},{key:"drawCircle",value:function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;e<0&&(e=0);var i=this.w.globals.dom.Paper.circle(2*e);return t!==null&&i.attr(t),i}},{key:"drawPath",value:function(e){var t=e.d,i=t===void 0?"":t,a=e.stroke,s=a===void 0?"#a8a8a8":a,r=e.strokeWidth,n=r===void 0?1:r,o=e.fill,h=e.fillOpacity,c=h===void 0?1:h,d=e.strokeOpacity,g=d===void 0?1:d,f=e.classes,x=e.strokeLinecap,b=x===void 0?null:x,v=e.strokeDashArray,y=v===void 0?0:v,w=this.w;return b===null&&(b=w.config.stroke.lineCap),(i.indexOf("undefined")>-1||i.indexOf("NaN")>-1)&&(i="M 0 ".concat(w.globals.gridHeight)),w.globals.dom.Paper.path(i).attr({fill:o,"fill-opacity":c,stroke:s,"stroke-opacity":g,"stroke-linecap":b,"stroke-width":n,"stroke-dasharray":y,class:f})}},{key:"group",value:function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:null,t=this.w.globals.dom.Paper.group();return e!==null&&t.attr(e),t}},{key:"move",value:function(e,t){var i=["M",e,t].join(" ");return i}},{key:"line",value:function(e,t){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:null,a=null;return i===null?a=[" L",e,t].join(" "):i==="H"?a=[" H",e].join(" "):i==="V"&&(a=[" V",t].join(" ")),a}},{key:"curve",value:function(e,t,i,a,s,r){var n=["C",e,t,i,a,s,r].join(" ");return n}},{key:"quadraticCurve",value:function(e,t,i,a){return["Q",e,t,i,a].join(" ")}},{key:"arc",value:function(e,t,i,a,s,r,n){var o="A";arguments.length>7&&arguments[7]!==void 0&&arguments[7]&&(o="a");var h=[o,e,t,i,a,s,r,n].join(" ");return h}},{key:"renderPaths",value:function(e){var t,i=e.j,a=e.realIndex,s=e.pathFrom,r=e.pathTo,n=e.stroke,o=e.strokeWidth,h=e.strokeLinecap,c=e.fill,d=e.animationDelay,g=e.initialSpeed,f=e.dataChangeSpeed,x=e.className,b=e.shouldClipToGrid,v=b===void 0||b,y=e.bindEventsOnPaths,w=y===void 0||y,l=e.drawShadow,u=l===void 0||l,m=this.w,A=new ie(this.ctx),k=new ve(this.ctx),S=this.w.config.chart.animations.enabled,L=S&&this.w.config.chart.animations.dynamicAnimation.enabled,C=!!(S&&!m.globals.resized||L&&m.globals.dataChanged&&m.globals.shouldAnimate);C?t=s:(t=r,m.globals.animationEnded=!0);var I=m.config.stroke.dashArray,z=0;z=Array.isArray(I)?I[a]:m.config.stroke.dashArray;var M=this.drawPath({d:t,stroke:n,strokeWidth:o,fill:c,fillOpacity:1,classes:x,strokeLinecap:h,strokeDashArray:z});if(M.attr("index",a),v&&M.attr({"clip-path":"url(#gridRectMask".concat(m.globals.cuid,")")}),m.config.states.normal.filter.type!=="none")A.getDefaultFilter(M,a);else if(m.config.chart.dropShadow.enabled&&u){var T=m.config.chart.dropShadow;A.dropShadow(M,T,a)}w&&(M.node.addEventListener("mouseenter",this.pathMouseEnter.bind(this,M)),M.node.addEventListener("mouseleave",this.pathMouseLeave.bind(this,M)),M.node.addEventListener("mousedown",this.pathMouseDown.bind(this,M))),M.attr({pathTo:r,pathFrom:s});var E={el:M,j:i,realIndex:a,pathFrom:s,pathTo:r,fill:c,strokeWidth:o,delay:d};return!S||m.globals.resized||m.globals.dataChanged?!m.globals.resized&&m.globals.dataChanged||k.showDelayedElements():k.animatePathsGradually(Y(Y({},E),{},{speed:g})),m.globals.dataChanged&&L&&C&&k.animatePathsGradually(Y(Y({},E),{},{speed:f})),M}},{key:"drawPattern",value:function(e,t,i){var a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"#a8a8a8",s=arguments.length>4&&arguments[4]!==void 0?arguments[4]:0;return this.w.globals.dom.Paper.pattern(t,i,function(r){e==="horizontalLines"?r.line(0,0,i,0).stroke({color:a,width:s+1}):e==="verticalLines"?r.line(0,0,0,t).stroke({color:a,width:s+1}):e==="slantedLines"?r.line(0,0,t,i).stroke({color:a,width:s}):e==="squares"?r.rect(t,i).fill("none").stroke({color:a,width:s}):e==="circles"&&r.circle(t).fill("none").stroke({color:a,width:s})})}},{key:"drawGradient",value:function(e,t,i,a,s){var r,n=arguments.length>5&&arguments[5]!==void 0?arguments[5]:null,o=arguments.length>6&&arguments[6]!==void 0?arguments[6]:null,h=arguments.length>7&&arguments[7]!==void 0?arguments[7]:null,c=arguments.length>8&&arguments[8]!==void 0?arguments[8]:0,d=this.w;t.length<9&&t.indexOf("#")===0&&(t=P.hexToRgba(t,a)),i.length<9&&i.indexOf("#")===0&&(i=P.hexToRgba(i,s));var g=0,f=1,x=1,b=null;o!==null&&(g=o[0]!==void 0?o[0]/100:0,f=o[1]!==void 0?o[1]/100:1,x=o[2]!==void 0?o[2]/100:1,b=o[3]!==void 0?o[3]/100:null);var v=!(d.config.chart.type!=="donut"&&d.config.chart.type!=="pie"&&d.config.chart.type!=="polarArea"&&d.config.chart.type!=="bubble");if(r=h===null||h.length===0?d.globals.dom.Paper.gradient(v?"radial":"linear",function(l){l.at(g,t,a),l.at(f,i,s),l.at(x,i,s),b!==null&&l.at(b,t,a)}):d.globals.dom.Paper.gradient(v?"radial":"linear",function(l){(Array.isArray(h[c])?h[c]:h).forEach(function(u){l.at(u.offset/100,u.color,u.opacity)})}),v){var y=d.globals.gridWidth/2,w=d.globals.gridHeight/2;d.config.chart.type!=="bubble"?r.attr({gradientUnits:"userSpaceOnUse",cx:y,cy:w,r:n}):r.attr({cx:.5,cy:.5,r:.8,fx:.2,fy:.2})}else e==="vertical"?r.from(0,0).to(0,1):e==="diagonal"?r.from(0,0).to(1,1):e==="horizontal"?r.from(0,1).to(1,1):e==="diagonal2"&&r.from(1,0).to(0,1);return r}},{key:"getTextBasedOnMaxWidth",value:function(e){var t=e.text,i=e.maxWidth,a=e.fontSize,s=e.fontFamily,r=this.getTextRects(t,a,s),n=r.width/t.length,o=Math.floor(i/n);return i-1){var o=i.globals.selectedDataPoints[s].indexOf(r);i.globals.selectedDataPoints[s].splice(o,1)}}else{if(!i.config.states.active.allowMultipleDataPointsSelection&&i.globals.selectedDataPoints.length>0){i.globals.selectedDataPoints=[];var h=i.globals.dom.Paper.select(".apexcharts-series path").members,c=i.globals.dom.Paper.select(".apexcharts-series circle, .apexcharts-series rect").members,d=function(x){Array.prototype.forEach.call(x,function(b){b.node.setAttribute("selected","false"),a.getDefaultFilter(b,s)})};d(h),d(c)}e.node.setAttribute("selected","true"),n="true",i.globals.selectedDataPoints[s]===void 0&&(i.globals.selectedDataPoints[s]=[]),i.globals.selectedDataPoints[s].push(r)}if(n==="true"){var g=i.config.states.active.filter;if(g!=="none")a.applyFilter(e,s,g.type,g.value);else if(i.config.states.hover.filter!=="none"&&!i.globals.isTouchDevice){var f=i.config.states.hover.filter;a.applyFilter(e,s,f.type,f.value)}}else i.config.states.active.filter.type!=="none"&&(i.config.states.hover.filter.type==="none"||i.globals.isTouchDevice?a.getDefaultFilter(e,s):(f=i.config.states.hover.filter,a.applyFilter(e,s,f.type,f.value)));typeof i.config.chart.events.dataPointSelection=="function"&&i.config.chart.events.dataPointSelection(t,this.ctx,{selectedDataPoints:i.globals.selectedDataPoints,seriesIndex:s,dataPointIndex:r,w:i}),t&&this.ctx.events.fireEvent("dataPointSelection",[t,this.ctx,{selectedDataPoints:i.globals.selectedDataPoints,seriesIndex:s,dataPointIndex:r,w:i}])}},{key:"rotateAroundCenter",value:function(e){var t={};return e&&typeof e.getBBox=="function"&&(t=e.getBBox()),{x:t.x+t.width/2,y:t.y+t.height/2}}},{key:"getTextRects",value:function(e,t,i,a){var s=!(arguments.length>4&&arguments[4]!==void 0)||arguments[4],r=this.w,n=this.drawText({x:-200,y:-200,text:e,textAnchor:"start",fontSize:t,fontFamily:i,foreColor:"#fff",opacity:0});a&&n.attr("transform",a),r.globals.dom.Paper.add(n);var o=n.bbox();return s||(o=n.node.getBoundingClientRect()),n.remove(),{width:o.width,height:o.height}}},{key:"placeTextWithEllipsis",value:function(e,t,i){if(typeof e.getComputedTextLength=="function"&&(e.textContent=t,t.length>0&&e.getComputedTextLength()>=i/1.1)){for(var a=t.length-3;a>0;a-=3)if(e.getSubStringLength(0,a)<=i/1.1)return void(e.textContent=t.substring(0,a)+"...");e.textContent="."}}}],[{key:"setAttrs",value:function(e,t){for(var i in t)t.hasOwnProperty(i)&&e.setAttribute(i,t[i])}}]),p}(),$=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"getStackedSeriesTotals",value:function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],t=this.w,i=[];if(t.globals.series.length===0)return i;for(var a=0;a0&&arguments[0]!==void 0?arguments[0]:null;return e===null?this.w.config.series.reduce(function(t,i){return t+i},0):this.w.globals.series[e].reduce(function(t,i){return t+i},0)}},{key:"getStackedSeriesTotalsByGroups",value:function(){var e=this,t=this.w,i=[];return t.globals.seriesGroups.forEach(function(a){var s=[];t.config.series.forEach(function(n,o){a.indexOf(t.globals.seriesNames[o])>-1&&s.push(o)});var r=t.globals.series.map(function(n,o){return s.indexOf(o)===-1?o:-1}).filter(function(n){return n!==-1});i.push(e.getStackedSeriesTotals(r))}),i}},{key:"setSeriesYAxisMappings",value:function(){var e=this.w.globals,t=this.w.config,i=[],a=[],s=[],r=e.series.length>t.yaxis.length||t.yaxis.some(function(d){return Array.isArray(d.seriesName)});t.series.forEach(function(d,g){s.push(g),a.push(null)}),t.yaxis.forEach(function(d,g){i[g]=[]});var n=[];t.yaxis.forEach(function(d,g){var f=!1;if(d.seriesName){var x=[];Array.isArray(d.seriesName)?x=d.seriesName:x.push(d.seriesName),x.forEach(function(b){t.series.forEach(function(v,y){if(v.name===b){var w=y;g===y||r?!r||s.indexOf(y)>-1?i[g].push([g,y]):console.warn("Series '"+v.name+"' referenced more than once in what looks like the new style. That is, when using either seriesName: [], or when there are more series than yaxes."):(i[y].push([y,g]),w=g),f=!0,(w=s.indexOf(w))!==-1&&s.splice(w,1)}})})}f||n.push(g)}),i=i.map(function(d,g){var f=[];return d.forEach(function(x){a[x[1]]=x[0],f.push(x[1])}),f});for(var o=t.yaxis.length-1,h=0;h0&&arguments[0]!==void 0?arguments[0]:null;return(e===null?this.w.config.series.filter(function(t){return t!==null}):this.w.config.series[e].data.filter(function(t){return t!==null})).length===0}},{key:"seriesHaveSameValues",value:function(e){return this.w.globals.series[e].every(function(t,i,a){return t===a[0]})}},{key:"getCategoryLabels",value:function(e){var t=this.w,i=e.slice();return t.config.xaxis.convertedCatToNumeric&&(i=e.map(function(a,s){return t.config.xaxis.labels.formatter(a-t.globals.minX+1)})),i}},{key:"getLargestSeries",value:function(){var e=this.w;e.globals.maxValsInArrayIndex=e.globals.series.map(function(t){return t.length}).indexOf(Math.max.apply(Math,e.globals.series.map(function(t){return t.length})))}},{key:"getLargestMarkerSize",value:function(){var e=this.w,t=0;return e.globals.markers.size.forEach(function(i){t=Math.max(t,i)}),e.config.markers.discrete&&e.config.markers.discrete.length&&e.config.markers.discrete.forEach(function(i){t=Math.max(t,i.size)}),t>0&&(t+=e.config.markers.hover.sizeOffset+1),e.globals.markers.largestSize=t,t}},{key:"getSeriesTotals",value:function(){var e=this.w;e.globals.seriesTotals=e.globals.series.map(function(t,i){var a=0;if(Array.isArray(t))for(var s=0;se&&i.globals.seriesX[s][n]0){var x=function(v,y){var w=s.config.yaxis[s.globals.seriesYAxisReverseMap[y]],l=v<0?-1:1;return v=Math.abs(v),w.logarithmic&&(v=a.getBaseLog(w.logBase,v)),-l*v/n[y]};if(r.isMultipleYAxis){h=[];for(var b=0;b0&&t.forEach(function(n){var o=[],h=[];e.i.forEach(function(c,d){s.config.series[c].group===n&&(o.push(e.series[d]),h.push(c))}),o.length>0&&r.push(a.draw(o,i,h))}),r}}],[{key:"checkComboSeries",value:function(e,t){var i=!1,a=0,s=0;return t===void 0&&(t="line"),e.length&&e[0].type!==void 0&&e.forEach(function(r){r.type!=="bar"&&r.type!=="column"&&r.type!=="candlestick"&&r.type!=="boxPlot"||a++,r.type!==void 0&&r.type!==t&&s++}),s>0&&(i=!0),{comboBarCount:a,comboCharts:i}}},{key:"extendArrayProps",value:function(e,t,i){var a,s,r,n,o,h;return(a=t)!==null&&a!==void 0&&a.yaxis&&(t=e.extendYAxis(t,i)),(s=t)!==null&&s!==void 0&&s.annotations&&(t.annotations.yaxis&&(t=e.extendYAxisAnnotations(t)),(r=t)!==null&&r!==void 0&&(n=r.annotations)!==null&&n!==void 0&&n.xaxis&&(t=e.extendXAxisAnnotations(t)),(o=t)!==null&&o!==void 0&&(h=o.annotations)!==null&&h!==void 0&&h.points&&(t=e.extendPointAnnotations(t))),t}}]),p}(),Be=function(){function p(e){F(this,p),this.w=e.w,this.annoCtx=e}return R(p,[{key:"setOrientations",value:function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null,i=this.w;if(e.label.orientation==="vertical"){var a=t!==null?t:0,s=i.globals.dom.baseEl.querySelector(".apexcharts-xaxis-annotations .apexcharts-xaxis-annotation-label[rel='".concat(a,"']"));if(s!==null){var r=s.getBoundingClientRect();s.setAttribute("x",parseFloat(s.getAttribute("x"))-r.height+4),e.label.position==="top"?s.setAttribute("y",parseFloat(s.getAttribute("y"))+r.width):s.setAttribute("y",parseFloat(s.getAttribute("y"))-r.width);var n=this.annoCtx.graphics.rotateAroundCenter(s),o=n.x,h=n.y;s.setAttribute("transform","rotate(-90 ".concat(o," ").concat(h,")"))}}}},{key:"addBackgroundToAnno",value:function(e,t){var i=this.w;if(!e||t.label.text===void 0||t.label.text!==void 0&&!String(t.label.text).trim())return null;var a=i.globals.dom.baseEl.querySelector(".apexcharts-grid").getBoundingClientRect(),s=e.getBoundingClientRect(),r=t.label.style.padding.left,n=t.label.style.padding.right,o=t.label.style.padding.top,h=t.label.style.padding.bottom;t.label.orientation==="vertical"&&(o=t.label.style.padding.left,h=t.label.style.padding.right,r=t.label.style.padding.top,n=t.label.style.padding.bottom);var c=s.left-a.left-r,d=s.top-a.top-o,g=this.annoCtx.graphics.drawRect(c-i.globals.barPadForNumericAxis,d,s.width+r+n,s.height+o+h,t.label.borderRadius,t.label.style.background,1,t.label.borderWidth,t.label.borderColor,0);return t.id&&g.node.classList.add(t.id),g}},{key:"annotationsBackground",value:function(){var e=this,t=this.w,i=function(a,s,r){var n=t.globals.dom.baseEl.querySelector(".apexcharts-".concat(r,"-annotations .apexcharts-").concat(r,"-annotation-label[rel='").concat(s,"']"));if(n){var o=n.parentNode,h=e.addBackgroundToAnno(n,a);h&&(o.insertBefore(h.node,n),a.label.mouseEnter&&h.node.addEventListener("mouseenter",a.label.mouseEnter.bind(e,a)),a.label.mouseLeave&&h.node.addEventListener("mouseleave",a.label.mouseLeave.bind(e,a)),a.label.click&&h.node.addEventListener("click",a.label.click.bind(e,a)))}};t.config.annotations.xaxis.map(function(a,s){i(a,s,"xaxis")}),t.config.annotations.yaxis.map(function(a,s){i(a,s,"yaxis")}),t.config.annotations.points.map(function(a,s){i(a,s,"point")})}},{key:"getY1Y2",value:function(e,t){var i,a=e==="y1"?t.y:t.y2,s=!1,r=this.w;if(this.annoCtx.invertAxis){var n=r.globals.labels;r.config.xaxis.convertedCatToNumeric&&(n=r.globals.categoryLabels);var o=n.indexOf(a),h=r.globals.dom.baseEl.querySelector(".apexcharts-yaxis-texts-g text:nth-child("+(o+1)+")");i=h?parseFloat(h.getAttribute("y")):(r.globals.gridHeight/n.length-1)*(o+1)-r.globals.barHeight,t.seriesIndex!==void 0&&r.globals.barHeight&&(i=i-r.globals.barHeight/2*(r.globals.series.length-1)+r.globals.barHeight*t.seriesIndex)}else{var c,d=r.globals.seriesYAxisMap[t.yAxisIndex][0];r.config.yaxis[t.yAxisIndex].logarithmic?c=(a=new $(this.annoCtx.ctx).getLogVal(r.config.yaxis[t.yAxisIndex].logBase,a,d))/r.globals.yLogRatio[d]:c=(a-r.globals.minYArr[d])/(r.globals.yRange[d]/r.globals.gridHeight),c>r.globals.gridHeight?(c=r.globals.gridHeight,s=!0):c<0&&(c=0,s=!0),i=r.globals.gridHeight-c,!t.marker||t.y!==void 0&&t.y!==null||(i=0),r.config.yaxis[t.yAxisIndex]&&r.config.yaxis[t.yAxisIndex].reversed&&(i=c)}return typeof a=="string"&&a.indexOf("px")>-1&&(i=parseFloat(a)),{yP:i,clipped:s}}},{key:"getX1X2",value:function(e,t){var i,a=e==="x1"?t.x:t.x2,s=this.w,r=this.annoCtx.invertAxis?s.globals.minY:s.globals.minX,n=this.annoCtx.invertAxis?s.globals.maxY:s.globals.maxX,o=this.annoCtx.invertAxis?s.globals.yRange[0]:s.globals.xRange,h=!1;return i=this.annoCtx.inversedReversedAxis?(n-a)/(o/s.globals.gridWidth):(a-r)/(o/s.globals.gridWidth),s.config.xaxis.type!=="category"&&!s.config.xaxis.convertedCatToNumeric||this.annoCtx.invertAxis||s.globals.dataFormatXNumeric||s.config.chart.sparkline.enabled||(i=this.getStringX(a)),typeof a=="string"&&a.indexOf("px")>-1&&(i=parseFloat(a)),a==null&&t.marker&&(i=s.globals.gridWidth),t.seriesIndex!==void 0&&s.globals.barWidth&&!this.annoCtx.invertAxis&&(i=i-s.globals.barWidth/2*(s.globals.series.length-1)+s.globals.barWidth*t.seriesIndex),i>s.globals.gridWidth?(i=s.globals.gridWidth,h=!0):i<0&&(i=0,h=!0),{x:i,clipped:h}}},{key:"getStringX",value:function(e){var t=this.w,i=e;t.config.xaxis.convertedCatToNumeric&&t.globals.categoryLabels.length&&(e=t.globals.categoryLabels.indexOf(e)+1);var a=t.globals.labels.indexOf(e),s=t.globals.dom.baseEl.querySelector(".apexcharts-xaxis-texts-g text:nth-child("+(a+1)+")");return s&&(i=parseFloat(s.getAttribute("x"))),i}}]),p}(),Xi=function(){function p(e){F(this,p),this.w=e.w,this.annoCtx=e,this.invertAxis=this.annoCtx.invertAxis,this.helpers=new Be(this.annoCtx)}return R(p,[{key:"addXaxisAnnotation",value:function(e,t,i){var a,s=this.w,r=this.helpers.getX1X2("x1",e),n=r.x,o=r.clipped,h=!0,c=e.label.text,d=e.strokeDashArray;if(P.isNumber(n)){if(e.x2===null||e.x2===void 0){if(!o){var g=this.annoCtx.graphics.drawLine(n+e.offsetX,0+e.offsetY,n+e.offsetX,s.globals.gridHeight+e.offsetY,e.borderColor,d,e.borderWidth);t.appendChild(g.node),e.id&&g.node.classList.add(e.id)}}else{var f=this.helpers.getX1X2("x2",e);if(a=f.x,h=f.clipped,!o||!h){if(a12?f-12:f===0?12:f;t=(t=(t=(t=t.replace(/(^|[^\\])HH+/g,"$1"+h(f))).replace(/(^|[^\\])H/g,"$1"+f)).replace(/(^|[^\\])hh+/g,"$1"+h(x))).replace(/(^|[^\\])h/g,"$1"+x);var b=a?e.getUTCMinutes():e.getMinutes();t=(t=t.replace(/(^|[^\\])mm+/g,"$1"+h(b))).replace(/(^|[^\\])m/g,"$1"+b);var v=a?e.getUTCSeconds():e.getSeconds();t=(t=t.replace(/(^|[^\\])ss+/g,"$1"+h(v))).replace(/(^|[^\\])s/g,"$1"+v);var y=a?e.getUTCMilliseconds():e.getMilliseconds();t=t.replace(/(^|[^\\])fff+/g,"$1"+h(y,3)),y=Math.round(y/10),t=t.replace(/(^|[^\\])ff/g,"$1"+h(y)),y=Math.round(y/10);var w=f<12?"AM":"PM";t=(t=(t=t.replace(/(^|[^\\])f/g,"$1"+y)).replace(/(^|[^\\])TT+/g,"$1"+w)).replace(/(^|[^\\])T/g,"$1"+w.charAt(0));var l=w.toLowerCase();t=(t=t.replace(/(^|[^\\])tt+/g,"$1"+l)).replace(/(^|[^\\])t/g,"$1"+l.charAt(0));var u=-e.getTimezoneOffset(),m=a||!u?"Z":u>0?"+":"-";if(!a){var A=(u=Math.abs(u))%60;m+=h(Math.floor(u/60))+":"+h(A)}t=t.replace(/(^|[^\\])K/g,"$1"+m);var k=(a?e.getUTCDay():e.getDay())+1;return t=(t=(t=(t=(t=t.replace(new RegExp(n[0],"g"),n[k])).replace(new RegExp(o[0],"g"),o[k])).replace(new RegExp(s[0],"g"),s[d])).replace(new RegExp(r[0],"g"),r[d])).replace(/\\(.)/g,"$1")}},{key:"getTimeUnitsfromTimestamp",value:function(e,t,i){var a=this.w;a.config.xaxis.min!==void 0&&(e=a.config.xaxis.min),a.config.xaxis.max!==void 0&&(t=a.config.xaxis.max);var s=this.getDate(e),r=this.getDate(t),n=this.formatDate(s,"yyyy MM dd HH mm ss fff").split(" "),o=this.formatDate(r,"yyyy MM dd HH mm ss fff").split(" ");return{minMillisecond:parseInt(n[6],10),maxMillisecond:parseInt(o[6],10),minSecond:parseInt(n[5],10),maxSecond:parseInt(o[5],10),minMinute:parseInt(n[4],10),maxMinute:parseInt(o[4],10),minHour:parseInt(n[3],10),maxHour:parseInt(o[3],10),minDate:parseInt(n[2],10),maxDate:parseInt(o[2],10),minMonth:parseInt(n[1],10)-1,maxMonth:parseInt(o[1],10)-1,minYear:parseInt(n[0],10),maxYear:parseInt(o[0],10)}}},{key:"isLeapYear",value:function(e){return e%4==0&&e%100!=0||e%400==0}},{key:"calculcateLastDaysOfMonth",value:function(e,t,i){return this.determineDaysOfMonths(e,t)-i}},{key:"determineDaysOfYear",value:function(e){var t=365;return this.isLeapYear(e)&&(t=366),t}},{key:"determineRemainingDaysOfYear",value:function(e,t,i){var a=this.daysCntOfYear[t]+i;return t>1&&this.isLeapYear()&&a++,a}},{key:"determineDaysOfMonths",value:function(e,t){var i=30;switch(e=P.monthMod(e),!0){case this.months30.indexOf(e)>-1:e===2&&(i=this.isLeapYear(t)?29:28);break;case this.months31.indexOf(e)>-1:default:i=31}return i}}]),p}(),ze=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w,this.tooltipKeyFormat="dd MMM"}return R(p,[{key:"xLabelFormat",value:function(e,t,i,a){var s=this.w;if(s.config.xaxis.type==="datetime"&&s.config.xaxis.labels.formatter===void 0&&s.config.tooltip.x.formatter===void 0){var r=new K(this.ctx);return r.formatDate(r.getDate(t),s.config.tooltip.x.format)}return e(t,i,a)}},{key:"defaultGeneralFormatter",value:function(e){return Array.isArray(e)?e.map(function(t){return t}):e}},{key:"defaultYFormatter",value:function(e,t,i){var a=this.w;if(P.isNumber(e))if(a.globals.yValueDecimal!==0)e=e.toFixed(t.decimalsInFloat!==void 0?t.decimalsInFloat:a.globals.yValueDecimal);else{var s=e.toFixed(0);e=e==s?s:e.toFixed(1)}return e}},{key:"setLabelFormatters",value:function(){var e=this,t=this.w;return t.globals.xaxisTooltipFormatter=function(i){return e.defaultGeneralFormatter(i)},t.globals.ttKeyFormatter=function(i){return e.defaultGeneralFormatter(i)},t.globals.ttZFormatter=function(i){return i},t.globals.legendFormatter=function(i){return e.defaultGeneralFormatter(i)},t.config.xaxis.labels.formatter!==void 0?t.globals.xLabelFormatter=t.config.xaxis.labels.formatter:t.globals.xLabelFormatter=function(i){if(P.isNumber(i)){if(!t.config.xaxis.convertedCatToNumeric&&t.config.xaxis.type==="numeric"){if(P.isNumber(t.config.xaxis.decimalsInFloat))return i.toFixed(t.config.xaxis.decimalsInFloat);var a=t.globals.maxX-t.globals.minX;return a>0&&a<100?i.toFixed(1):i.toFixed(0)}return t.globals.isBarHorizontal&&t.globals.maxY-t.globals.minYArr<4?i.toFixed(1):i.toFixed(0)}return i},typeof t.config.tooltip.x.formatter=="function"?t.globals.ttKeyFormatter=t.config.tooltip.x.formatter:t.globals.ttKeyFormatter=t.globals.xLabelFormatter,typeof t.config.xaxis.tooltip.formatter=="function"&&(t.globals.xaxisTooltipFormatter=t.config.xaxis.tooltip.formatter),(Array.isArray(t.config.tooltip.y)||t.config.tooltip.y.formatter!==void 0)&&(t.globals.ttVal=t.config.tooltip.y),t.config.tooltip.z.formatter!==void 0&&(t.globals.ttZFormatter=t.config.tooltip.z.formatter),t.config.legend.formatter!==void 0&&(t.globals.legendFormatter=t.config.legend.formatter),t.config.yaxis.forEach(function(i,a){i.labels.formatter!==void 0?t.globals.yLabelFormatters[a]=i.labels.formatter:t.globals.yLabelFormatters[a]=function(s){return t.globals.xyCharts?Array.isArray(s)?s.map(function(r){return e.defaultYFormatter(r,i,a)}):e.defaultYFormatter(s,i,a):s}}),t.globals}},{key:"heatmapLabelFormatters",value:function(){var e=this.w;if(e.config.chart.type==="heatmap"){e.globals.yAxisScale[0].result=e.globals.seriesNames.slice();var t=e.globals.seriesNames.reduce(function(i,a){return i.length>a.length?i:a},0);e.globals.yAxisScale[0].niceMax=t,e.globals.yAxisScale[0].niceMin=t}}}]),p}(),ge=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"getLabel",value:function(e,t,i,a){var s=arguments.length>4&&arguments[4]!==void 0?arguments[4]:[],r=arguments.length>5&&arguments[5]!==void 0?arguments[5]:"12px",n=!(arguments.length>6&&arguments[6]!==void 0)||arguments[6],o=this.w,h=e[a]===void 0?"":e[a],c=h,d=o.globals.xLabelFormatter,g=o.config.xaxis.labels.formatter,f=!1,x=new ze(this.ctx),b=h;n&&(c=x.xLabelFormat(d,h,b,{i:a,dateFormatter:new K(this.ctx).formatDate,w:o}),g!==void 0&&(c=g(h,e[a],{i:a,dateFormatter:new K(this.ctx).formatDate,w:o})));var v,y;t.length>0?(v=t[a].unit,y=null,t.forEach(function(m){m.unit==="month"?y="year":m.unit==="day"?y="month":m.unit==="hour"?y="day":m.unit==="minute"&&(y="hour")}),f=y===v,i=t[a].position,c=t[a].value):o.config.xaxis.type==="datetime"&&g===void 0&&(c=""),c===void 0&&(c=""),c=Array.isArray(c)?c:c.toString();var w=new X(this.ctx),l={};l=o.globals.rotateXLabels&&n?w.getTextRects(c,parseInt(r,10),null,"rotate(".concat(o.config.xaxis.labels.rotate," 0 0)"),!1):w.getTextRects(c,parseInt(r,10));var u=!o.config.xaxis.labels.showDuplicates&&this.ctx.timeScale;return!Array.isArray(c)&&(String(c)==="NaN"||s.indexOf(c)>=0&&u)&&(c=""),{x:i,text:c,textRect:l,isBold:f}}},{key:"checkLabelBasedOnTickamount",value:function(e,t,i){var a=this.w,s=a.config.xaxis.tickAmount;return s==="dataPoints"&&(s=Math.round(a.globals.gridWidth/120)),s>i||e%Math.round(i/(s+1))==0||(t.text=""),t}},{key:"checkForOverflowingLabels",value:function(e,t,i,a,s){var r=this.w;if(e===0&&r.globals.skipFirstTimelinelabel&&(t.text=""),e===i-1&&r.globals.skipLastTimelinelabel&&(t.text=""),r.config.xaxis.labels.hideOverlappingLabels&&a.length>0){var n=s[s.length-1];t.xa.length||a.some(function(s){return Array.isArray(s.seriesName)})?e:i.seriesYAxisReverseMap[e]}},{key:"isYAxisHidden",value:function(e){var t=this.w,i=t.config.yaxis[e];if(!i.show||this.yAxisAllSeriesCollapsed(e))return!0;if(!i.showForNullSeries){var a=t.globals.seriesYAxisMap[e],s=new $(this.ctx);return a.every(function(r){return s.isSeriesNull(r)})}return!1}},{key:"getYAxisForeColor",value:function(e,t){var i=this.w;return Array.isArray(e)&&i.globals.yAxisScale[t]&&this.ctx.theme.pushExtraColors(e,i.globals.yAxisScale[t].result.length,!1),e}},{key:"drawYAxisTicks",value:function(e,t,i,a,s,r,n){var o=this.w,h=new X(this.ctx),c=o.globals.translateY+o.config.yaxis[s].labels.offsetY;if(o.globals.isBarHorizontal?c=0:o.config.chart.type==="heatmap"&&(c+=r/2),a.show&&t>0){o.config.yaxis[s].opposite===!0&&(e+=a.width);for(var d=t;d>=0;d--){var g=h.drawLine(e+i.offsetX-a.width+a.offsetX,c+a.offsetY,e+i.offsetX+a.offsetX,c+a.offsetY,a.color);n.add(g),c+=r}}}}]),p}(),Ei=function(){function p(e){F(this,p),this.w=e.w,this.annoCtx=e,this.helpers=new Be(this.annoCtx),this.axesUtils=new ge(this.annoCtx)}return R(p,[{key:"addYaxisAnnotation",value:function(e,t,i){var a,s=this.w,r=e.strokeDashArray,n=this.helpers.getY1Y2("y1",e),o=n.yP,h=n.clipped,c=!0,d=!1,g=e.label.text;if(e.y2===null||e.y2===void 0){if(!h){d=!0;var f=this.annoCtx.graphics.drawLine(0+e.offsetX,o+e.offsetY,this._getYAxisAnnotationWidth(e),o+e.offsetY,e.borderColor,r,e.borderWidth);t.appendChild(f.node),e.id&&f.node.classList.add(e.id)}}else{if(a=(n=this.helpers.getY1Y2("y2",e)).yP,c=n.clipped,a>o){var x=o;o=a,a=x}if(!h||!c){d=!0;var b=this.annoCtx.graphics.drawRect(0+e.offsetX,a+e.offsetY,this._getYAxisAnnotationWidth(e),o-a,0,e.fillColor,e.opacity,1,e.borderColor,r);b.node.classList.add("apexcharts-annotation-rect"),b.attr("clip-path","url(#gridRectMask".concat(s.globals.cuid,")")),t.appendChild(b.node),e.id&&b.node.classList.add(e.id)}}if(d){var v=e.label.position==="right"?s.globals.gridWidth:e.label.position==="center"?s.globals.gridWidth/2:0,y=this.annoCtx.graphics.drawText({x:v+e.label.offsetX,y:(a??o)+e.label.offsetY-3,text:g,textAnchor:e.label.textAnchor,fontSize:e.label.style.fontSize,fontFamily:e.label.style.fontFamily,fontWeight:e.label.style.fontWeight,foreColor:e.label.style.color,cssClass:"apexcharts-yaxis-annotation-label ".concat(e.label.style.cssClass," ").concat(e.id?e.id:"")});y.attr({rel:i}),t.appendChild(y.node)}}},{key:"_getYAxisAnnotationWidth",value:function(e){var t=this.w;return t.globals.gridWidth,(e.width.indexOf("%")>-1?t.globals.gridWidth*parseInt(e.width,10)/100:parseInt(e.width,10))+e.offsetX}},{key:"drawYAxisAnnotations",value:function(){var e=this,t=this.w,i=this.annoCtx.graphics.group({class:"apexcharts-yaxis-annotations"});return t.config.annotations.yaxis.forEach(function(a,s){a.yAxisIndex=e.axesUtils.translateYAxisIndex(a.yAxisIndex),e.axesUtils.isYAxisHidden(a.yAxisIndex)&&e.axesUtils.yAxisAllSeriesCollapsed(a.yAxisIndex)||e.addYaxisAnnotation(a,i.node,s)}),i}}]),p}(),Yi=function(){function p(e){F(this,p),this.w=e.w,this.annoCtx=e,this.helpers=new Be(this.annoCtx)}return R(p,[{key:"addPointAnnotation",value:function(e,t,i){if(!(this.w.globals.collapsedSeriesIndices.indexOf(e.seriesIndex)>-1)){var a=this.helpers.getX1X2("x1",e),s=a.x,r=a.clipped,n=(a=this.helpers.getY1Y2("y1",e)).yP,o=a.clipped;if(P.isNumber(s)&&!o&&!r){var h={pSize:e.marker.size,pointStrokeWidth:e.marker.strokeWidth,pointFillColor:e.marker.fillColor,pointStrokeColor:e.marker.strokeColor,shape:e.marker.shape,pRadius:e.marker.radius,class:"apexcharts-point-annotation-marker ".concat(e.marker.cssClass," ").concat(e.id?e.id:"")},c=this.annoCtx.graphics.drawMarker(s+e.marker.offsetX,n+e.marker.offsetY,h);t.appendChild(c.node);var d=e.label.text?e.label.text:"",g=this.annoCtx.graphics.drawText({x:s+e.label.offsetX,y:n+e.label.offsetY-e.marker.size-parseFloat(e.label.style.fontSize)/1.6,text:d,textAnchor:e.label.textAnchor,fontSize:e.label.style.fontSize,fontFamily:e.label.style.fontFamily,fontWeight:e.label.style.fontWeight,foreColor:e.label.style.color,cssClass:"apexcharts-point-annotation-label ".concat(e.label.style.cssClass," ").concat(e.id?e.id:"")});if(g.attr({rel:i}),t.appendChild(g.node),e.customSVG.SVG){var f=this.annoCtx.graphics.group({class:"apexcharts-point-annotations-custom-svg "+e.customSVG.cssClass});f.attr({transform:"translate(".concat(s+e.customSVG.offsetX,", ").concat(n+e.customSVG.offsetY,")")}),f.node.innerHTML=e.customSVG.SVG,t.appendChild(f.node)}if(e.image.path){var x=e.image.width?e.image.width:20,b=e.image.height?e.image.height:20;c=this.annoCtx.addImage({x:s+e.image.offsetX-x/2,y:n+e.image.offsetY-b/2,width:x,height:b,path:e.image.path,appendTo:".apexcharts-point-annotations"})}e.mouseEnter&&c.node.addEventListener("mouseenter",e.mouseEnter.bind(this,e)),e.mouseLeave&&c.node.addEventListener("mouseleave",e.mouseLeave.bind(this,e)),e.click&&c.node.addEventListener("click",e.click.bind(this,e))}}}},{key:"drawPointAnnotations",value:function(){var e=this,t=this.w,i=this.annoCtx.graphics.group({class:"apexcharts-point-annotations"});return t.config.annotations.points.map(function(a,s){e.addPointAnnotation(a,i.node,s)}),i}}]),p}(),Xt={name:"en",options:{months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],toolbar:{exportToSVG:"Download SVG",exportToPNG:"Download PNG",exportToCSV:"Download CSV",menu:"Menu",selection:"Selection",selectionZoom:"Selection Zoom",zoomIn:"Zoom In",zoomOut:"Zoom Out",pan:"Panning",reset:"Reset Zoom"}}},ue=function(){function p(){F(this,p),this.yAxis={show:!0,showAlways:!1,showForNullSeries:!0,seriesName:void 0,opposite:!1,reversed:!1,logarithmic:!1,logBase:10,tickAmount:void 0,stepSize:void 0,forceNiceScale:!1,max:void 0,min:void 0,floating:!1,decimalsInFloat:void 0,labels:{show:!0,minWidth:0,maxWidth:160,offsetX:0,offsetY:0,align:void 0,rotate:0,padding:20,style:{colors:[],fontSize:"11px",fontWeight:400,fontFamily:void 0,cssClass:""},formatter:void 0},axisBorder:{show:!1,color:"#e0e0e0",width:1,offsetX:0,offsetY:0},axisTicks:{show:!1,color:"#e0e0e0",width:6,offsetX:0,offsetY:0},title:{text:void 0,rotate:-90,offsetY:0,offsetX:0,style:{color:void 0,fontSize:"11px",fontWeight:900,fontFamily:void 0,cssClass:""}},tooltip:{enabled:!1,offsetX:0},crosshairs:{show:!0,position:"front",stroke:{color:"#b6b6b6",width:1,dashArray:0}}},this.pointAnnotation={id:void 0,x:0,y:null,yAxisIndex:0,seriesIndex:void 0,mouseEnter:void 0,mouseLeave:void 0,click:void 0,marker:{size:4,fillColor:"#fff",strokeWidth:2,strokeColor:"#333",shape:"circle",offsetX:0,offsetY:0,cssClass:""},label:{borderColor:"#c2c2c2",borderWidth:1,borderRadius:2,text:void 0,textAnchor:"middle",offsetX:0,offsetY:0,mouseEnter:void 0,mouseLeave:void 0,click:void 0,style:{background:"#fff",color:void 0,fontSize:"11px",fontFamily:void 0,fontWeight:400,cssClass:"",padding:{left:5,right:5,top:2,bottom:2}}},customSVG:{SVG:void 0,cssClass:void 0,offsetX:0,offsetY:0},image:{path:void 0,width:20,height:20,offsetX:0,offsetY:0}},this.yAxisAnnotation={id:void 0,y:0,y2:null,strokeDashArray:1,fillColor:"#c2c2c2",borderColor:"#c2c2c2",borderWidth:1,opacity:.3,offsetX:0,offsetY:0,width:"100%",yAxisIndex:0,label:{borderColor:"#c2c2c2",borderWidth:1,borderRadius:2,text:void 0,textAnchor:"end",position:"right",offsetX:0,offsetY:-3,mouseEnter:void 0,mouseLeave:void 0,click:void 0,style:{background:"#fff",color:void 0,fontSize:"11px",fontFamily:void 0,fontWeight:400,cssClass:"",padding:{left:5,right:5,top:2,bottom:2}}}},this.xAxisAnnotation={id:void 0,x:0,x2:null,strokeDashArray:1,fillColor:"#c2c2c2",borderColor:"#c2c2c2",borderWidth:1,opacity:.3,offsetX:0,offsetY:0,label:{borderColor:"#c2c2c2",borderWidth:1,borderRadius:2,text:void 0,textAnchor:"middle",orientation:"vertical",position:"top",offsetX:0,offsetY:0,mouseEnter:void 0,mouseLeave:void 0,click:void 0,style:{background:"#fff",color:void 0,fontSize:"11px",fontFamily:void 0,fontWeight:400,cssClass:"",padding:{left:5,right:5,top:2,bottom:2}}}},this.text={x:0,y:0,text:"",textAnchor:"start",foreColor:void 0,fontSize:"13px",fontFamily:void 0,fontWeight:400,appendTo:".apexcharts-annotations",backgroundColor:"transparent",borderColor:"#c2c2c2",borderRadius:0,borderWidth:0,paddingLeft:4,paddingRight:4,paddingTop:2,paddingBottom:2}}return R(p,[{key:"init",value:function(){return{annotations:{yaxis:[this.yAxisAnnotation],xaxis:[this.xAxisAnnotation],points:[this.pointAnnotation],texts:[],images:[],shapes:[]},chart:{animations:{enabled:!0,easing:"easeinout",speed:800,animateGradually:{delay:150,enabled:!0},dynamicAnimation:{enabled:!0,speed:350}},background:"",locales:[Xt],defaultLocale:"en",dropShadow:{enabled:!1,enabledOnSeries:void 0,top:2,left:2,blur:4,color:"#000",opacity:.35},events:{animationEnd:void 0,beforeMount:void 0,mounted:void 0,updated:void 0,click:void 0,mouseMove:void 0,mouseLeave:void 0,xAxisLabelClick:void 0,legendClick:void 0,markerClick:void 0,selection:void 0,dataPointSelection:void 0,dataPointMouseEnter:void 0,dataPointMouseLeave:void 0,beforeZoom:void 0,beforeResetZoom:void 0,zoomed:void 0,scrolled:void 0,brushScrolled:void 0},foreColor:"#373d3f",fontFamily:"Helvetica, Arial, sans-serif",height:"auto",parentHeightOffset:15,redrawOnParentResize:!0,redrawOnWindowResize:!0,id:void 0,group:void 0,nonce:void 0,offsetX:0,offsetY:0,selection:{enabled:!1,type:"x",fill:{color:"#24292e",opacity:.1},stroke:{width:1,color:"#24292e",opacity:.4,dashArray:3},xaxis:{min:void 0,max:void 0},yaxis:{min:void 0,max:void 0}},sparkline:{enabled:!1},brush:{enabled:!1,autoScaleYaxis:!0,target:void 0,targets:void 0},stacked:!1,stackOnlyBar:!0,stackType:"normal",toolbar:{show:!0,offsetX:0,offsetY:0,tools:{download:!0,selection:!0,zoom:!0,zoomin:!0,zoomout:!0,pan:!0,reset:!0,customIcons:[]},export:{csv:{filename:void 0,columnDelimiter:",",headerCategory:"category",headerValue:"value",categoryFormatter:void 0,valueFormatter:void 0},png:{filename:void 0},svg:{filename:void 0},scale:void 0,width:void 0},autoSelected:"zoom"},type:"line",width:"100%",zoom:{enabled:!0,type:"x",autoScaleYaxis:!1,allowMouseWheelZoom:!0,zoomedArea:{fill:{color:"#90CAF9",opacity:.4},stroke:{color:"#0D47A1",opacity:.4,width:1}}}},plotOptions:{line:{isSlopeChart:!1},area:{fillTo:"origin"},bar:{horizontal:!1,columnWidth:"70%",barHeight:"70%",distributed:!1,borderRadius:0,borderRadiusApplication:"around",borderRadiusWhenStacked:"last",rangeBarOverlap:!0,rangeBarGroupRows:!1,hideZeroBarsWhenGrouped:!1,isDumbbell:!1,dumbbellColors:void 0,isFunnel:!1,isFunnel3d:!0,colors:{ranges:[],backgroundBarColors:[],backgroundBarOpacity:1,backgroundBarRadius:0},dataLabels:{position:"top",maxItems:100,hideOverflowingLabels:!0,orientation:"horizontal",total:{enabled:!1,formatter:void 0,offsetX:0,offsetY:0,style:{color:"#373d3f",fontSize:"12px",fontFamily:void 0,fontWeight:600}}}},bubble:{zScaling:!0,minBubbleRadius:void 0,maxBubbleRadius:void 0},candlestick:{colors:{upward:"#00B746",downward:"#EF403C"},wick:{useFillColor:!0}},boxPlot:{colors:{upper:"#00E396",lower:"#008FFB"}},heatmap:{radius:2,enableShades:!0,shadeIntensity:.5,reverseNegativeShade:!1,distributed:!1,useFillColorAsStroke:!1,colorScale:{inverse:!1,ranges:[],min:void 0,max:void 0}},treemap:{enableShades:!0,shadeIntensity:.5,distributed:!1,reverseNegativeShade:!1,useFillColorAsStroke:!1,borderRadius:4,dataLabels:{format:"scale"},colorScale:{inverse:!1,ranges:[],min:void 0,max:void 0}},radialBar:{inverseOrder:!1,startAngle:0,endAngle:360,offsetX:0,offsetY:0,hollow:{margin:5,size:"50%",background:"transparent",image:void 0,imageWidth:150,imageHeight:150,imageOffsetX:0,imageOffsetY:0,imageClipped:!0,position:"front",dropShadow:{enabled:!1,top:0,left:0,blur:3,color:"#000",opacity:.5}},track:{show:!0,startAngle:void 0,endAngle:void 0,background:"#f2f2f2",strokeWidth:"97%",opacity:1,margin:5,dropShadow:{enabled:!1,top:0,left:0,blur:3,color:"#000",opacity:.5}},dataLabels:{show:!0,name:{show:!0,fontSize:"16px",fontFamily:void 0,fontWeight:600,color:void 0,offsetY:0,formatter:function(e){return e}},value:{show:!0,fontSize:"14px",fontFamily:void 0,fontWeight:400,color:void 0,offsetY:16,formatter:function(e){return e+"%"}},total:{show:!1,label:"Total",fontSize:"16px",fontWeight:600,fontFamily:void 0,color:void 0,formatter:function(e){return e.globals.seriesTotals.reduce(function(t,i){return t+i},0)/e.globals.series.length+"%"}}},barLabels:{enabled:!1,offsetX:0,offsetY:0,useSeriesColors:!0,fontFamily:void 0,fontWeight:600,fontSize:"16px",formatter:function(e){return e},onClick:void 0}},pie:{customScale:1,offsetX:0,offsetY:0,startAngle:0,endAngle:360,expandOnClick:!0,dataLabels:{offset:0,minAngleToShowLabel:10},donut:{size:"65%",background:"transparent",labels:{show:!1,name:{show:!0,fontSize:"16px",fontFamily:void 0,fontWeight:600,color:void 0,offsetY:-10,formatter:function(e){return e}},value:{show:!0,fontSize:"20px",fontFamily:void 0,fontWeight:400,color:void 0,offsetY:10,formatter:function(e){return e}},total:{show:!1,showAlways:!1,label:"Total",fontSize:"16px",fontWeight:400,fontFamily:void 0,color:void 0,formatter:function(e){return e.globals.seriesTotals.reduce(function(t,i){return t+i},0)}}}}},polarArea:{rings:{strokeWidth:1,strokeColor:"#e8e8e8"},spokes:{strokeWidth:1,connectorColors:"#e8e8e8"}},radar:{size:void 0,offsetX:0,offsetY:0,polygons:{strokeWidth:1,strokeColors:"#e8e8e8",connectorColors:"#e8e8e8",fill:{colors:void 0}}}},colors:void 0,dataLabels:{enabled:!0,enabledOnSeries:void 0,formatter:function(e){return e!==null?e:""},textAnchor:"middle",distributed:!1,offsetX:0,offsetY:0,style:{fontSize:"12px",fontFamily:void 0,fontWeight:600,colors:void 0},background:{enabled:!0,foreColor:"#fff",borderRadius:2,padding:4,opacity:.9,borderWidth:1,borderColor:"#fff",dropShadow:{enabled:!1,top:1,left:1,blur:1,color:"#000",opacity:.45}},dropShadow:{enabled:!1,top:1,left:1,blur:1,color:"#000",opacity:.45}},fill:{type:"solid",colors:void 0,opacity:.85,gradient:{shade:"dark",type:"horizontal",shadeIntensity:.5,gradientToColors:void 0,inverseColors:!0,opacityFrom:1,opacityTo:1,stops:[0,50,100],colorStops:[]},image:{src:[],width:void 0,height:void 0},pattern:{style:"squares",width:6,height:6,strokeWidth:2}},forecastDataPoints:{count:0,fillOpacity:.5,strokeWidth:void 0,dashArray:4},grid:{show:!0,borderColor:"#e0e0e0",strokeDashArray:0,position:"back",xaxis:{lines:{show:!1}},yaxis:{lines:{show:!0}},row:{colors:void 0,opacity:.5},column:{colors:void 0,opacity:.5},padding:{top:0,right:10,bottom:0,left:12}},labels:[],legend:{show:!0,showForSingleSeries:!1,showForNullSeries:!0,showForZeroSeries:!0,floating:!1,position:"bottom",horizontalAlign:"center",inverseOrder:!1,fontSize:"12px",fontFamily:void 0,fontWeight:400,width:void 0,height:void 0,formatter:void 0,tooltipHoverFormatter:void 0,offsetX:-20,offsetY:4,customLegendItems:[],labels:{colors:void 0,useSeriesColors:!1},markers:{size:7,fillColors:void 0,strokeWidth:1,shape:void 0,offsetX:0,offsetY:0,customHTML:void 0,onClick:void 0},itemMargin:{horizontal:5,vertical:4},onItemClick:{toggleDataSeries:!0},onItemHover:{highlightDataSeries:!0}},markers:{discrete:[],size:0,colors:void 0,strokeColors:"#fff",strokeWidth:2,strokeOpacity:.9,strokeDashArray:0,fillOpacity:1,shape:"circle",offsetX:0,offsetY:0,showNullDataPoints:!0,onClick:void 0,onDblClick:void 0,hover:{size:void 0,sizeOffset:3}},noData:{text:void 0,align:"center",verticalAlign:"middle",offsetX:0,offsetY:0,style:{color:void 0,fontSize:"14px",fontFamily:void 0}},responsive:[],series:void 0,states:{normal:{filter:{type:"none",value:0}},hover:{filter:{type:"lighten",value:.1}},active:{allowMultipleDataPointsSelection:!1,filter:{type:"darken",value:.5}}},title:{text:void 0,align:"left",margin:5,offsetX:0,offsetY:0,floating:!1,style:{fontSize:"14px",fontWeight:900,fontFamily:void 0,color:void 0}},subtitle:{text:void 0,align:"left",margin:5,offsetX:0,offsetY:30,floating:!1,style:{fontSize:"12px",fontWeight:400,fontFamily:void 0,color:void 0}},stroke:{show:!0,curve:"smooth",lineCap:"butt",width:2,colors:void 0,dashArray:0,fill:{type:"solid",colors:void 0,opacity:.85,gradient:{shade:"dark",type:"horizontal",shadeIntensity:.5,gradientToColors:void 0,inverseColors:!0,opacityFrom:1,opacityTo:1,stops:[0,50,100],colorStops:[]}}},tooltip:{enabled:!0,enabledOnSeries:void 0,shared:!0,hideEmptySeries:!1,followCursor:!1,intersect:!1,inverseOrder:!1,custom:void 0,fillSeriesColor:!1,theme:"light",cssClass:"",style:{fontSize:"12px",fontFamily:void 0},onDatasetHover:{highlightDataSeries:!1},x:{show:!0,format:"dd MMM",formatter:void 0},y:{formatter:void 0,title:{formatter:function(e){return e?e+": ":""}}},z:{formatter:void 0,title:"Size: "},marker:{show:!0,fillColors:void 0},items:{display:"flex"},fixed:{enabled:!1,position:"topRight",offsetX:0,offsetY:0}},xaxis:{type:"category",categories:[],convertedCatToNumeric:!1,offsetX:0,offsetY:0,overwriteCategories:void 0,labels:{show:!0,rotate:-45,rotateAlways:!1,hideOverlappingLabels:!0,trim:!1,minHeight:void 0,maxHeight:120,showDuplicates:!0,style:{colors:[],fontSize:"12px",fontWeight:400,fontFamily:void 0,cssClass:""},offsetX:0,offsetY:0,format:void 0,formatter:void 0,datetimeUTC:!0,datetimeFormatter:{year:"yyyy",month:"MMM 'yy",day:"dd MMM",hour:"HH:mm",minute:"HH:mm:ss",second:"HH:mm:ss"}},group:{groups:[],style:{colors:[],fontSize:"12px",fontWeight:400,fontFamily:void 0,cssClass:""}},axisBorder:{show:!0,color:"#e0e0e0",width:"100%",height:1,offsetX:0,offsetY:0},axisTicks:{show:!0,color:"#e0e0e0",height:6,offsetX:0,offsetY:0},stepSize:void 0,tickAmount:void 0,tickPlacement:"on",min:void 0,max:void 0,range:void 0,floating:!1,decimalsInFloat:void 0,position:"bottom",title:{text:void 0,offsetX:0,offsetY:0,style:{color:void 0,fontSize:"12px",fontWeight:900,fontFamily:void 0,cssClass:""}},crosshairs:{show:!0,width:1,position:"back",opacity:.9,stroke:{color:"#b6b6b6",width:1,dashArray:3},fill:{type:"solid",color:"#B1B9C4",gradient:{colorFrom:"#D8E3F0",colorTo:"#BED1E6",stops:[0,100],opacityFrom:.4,opacityTo:.5}},dropShadow:{enabled:!1,left:0,top:0,blur:1,opacity:.4}},tooltip:{enabled:!0,offsetY:0,formatter:void 0,style:{fontSize:"12px",fontFamily:void 0}}},yaxis:this.yAxis,theme:{mode:"",palette:"palette1",monochrome:{enabled:!1,color:"#008FFB",shadeTo:"light",shadeIntensity:.65}}}}}]),p}(),Fi=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w,this.graphics=new X(this.ctx),this.w.globals.isBarHorizontal&&(this.invertAxis=!0),this.helpers=new Be(this),this.xAxisAnnotations=new Xi(this),this.yAxisAnnotations=new Ei(this),this.pointsAnnotations=new Yi(this),this.w.globals.isBarHorizontal&&this.w.config.yaxis[0].reversed&&(this.inversedReversedAxis=!0),this.xDivision=this.w.globals.gridWidth/this.w.globals.dataPoints}return R(p,[{key:"drawAxesAnnotations",value:function(){var e=this.w;if(e.globals.axisCharts){for(var t=this.yAxisAnnotations.drawYAxisAnnotations(),i=this.xAxisAnnotations.drawXAxisAnnotations(),a=this.pointsAnnotations.drawPointAnnotations(),s=e.config.chart.animations.enabled,r=[t,i,a],n=[i.node,t.node,a.node],o=0;o<3;o++)e.globals.dom.elGraphical.add(r[o]),!s||e.globals.resized||e.globals.dataChanged||e.config.chart.type!=="scatter"&&e.config.chart.type!=="bubble"&&e.globals.dataPoints>1&&n[o].classList.add("apexcharts-element-hidden"),e.globals.delayedElements.push({el:n[o],index:0});this.helpers.annotationsBackground()}}},{key:"drawImageAnnos",value:function(){var e=this;this.w.config.annotations.images.map(function(t,i){e.addImage(t,i)})}},{key:"drawTextAnnos",value:function(){var e=this;this.w.config.annotations.texts.map(function(t,i){e.addText(t,i)})}},{key:"addXaxisAnnotation",value:function(e,t,i){this.xAxisAnnotations.addXaxisAnnotation(e,t,i)}},{key:"addYaxisAnnotation",value:function(e,t,i){this.yAxisAnnotations.addYaxisAnnotation(e,t,i)}},{key:"addPointAnnotation",value:function(e,t,i){this.pointsAnnotations.addPointAnnotation(e,t,i)}},{key:"addText",value:function(e,t){var i=e.x,a=e.y,s=e.text,r=e.textAnchor,n=e.foreColor,o=e.fontSize,h=e.fontFamily,c=e.fontWeight,d=e.cssClass,g=e.backgroundColor,f=e.borderWidth,x=e.strokeDashArray,b=e.borderRadius,v=e.borderColor,y=e.appendTo,w=y===void 0?".apexcharts-svg":y,l=e.paddingLeft,u=l===void 0?4:l,m=e.paddingRight,A=m===void 0?4:m,k=e.paddingBottom,S=k===void 0?2:k,L=e.paddingTop,C=L===void 0?2:L,I=this.w,z=this.graphics.drawText({x:i,y:a,text:s,textAnchor:r||"start",fontSize:o||"12px",fontWeight:c||"regular",fontFamily:h||I.config.chart.fontFamily,foreColor:n||I.config.chart.foreColor,cssClass:d}),M=I.globals.dom.baseEl.querySelector(w);M&&M.appendChild(z.node);var T=z.bbox();if(s){var E=this.graphics.drawRect(T.x-u,T.y-C,T.width+u+A,T.height+S+C,b,g||"transparent",1,f,v,x);M.insertBefore(E.node,z.node)}}},{key:"addImage",value:function(e,t){var i=this.w,a=e.path,s=e.x,r=s===void 0?0:s,n=e.y,o=n===void 0?0:n,h=e.width,c=h===void 0?20:h,d=e.height,g=d===void 0?20:d,f=e.appendTo,x=f===void 0?".apexcharts-svg":f,b=i.globals.dom.Paper.image(a);b.size(c,g).move(r,o);var v=i.globals.dom.baseEl.querySelector(x);return v&&v.appendChild(b.node),b}},{key:"addXaxisAnnotationExternal",value:function(e,t,i){return this.addAnnotationExternal({params:e,pushToMemory:t,context:i,type:"xaxis",contextMethod:i.addXaxisAnnotation}),i}},{key:"addYaxisAnnotationExternal",value:function(e,t,i){return this.addAnnotationExternal({params:e,pushToMemory:t,context:i,type:"yaxis",contextMethod:i.addYaxisAnnotation}),i}},{key:"addPointAnnotationExternal",value:function(e,t,i){return this.invertAxis===void 0&&(this.invertAxis=i.w.globals.isBarHorizontal),this.addAnnotationExternal({params:e,pushToMemory:t,context:i,type:"point",contextMethod:i.addPointAnnotation}),i}},{key:"addAnnotationExternal",value:function(e){var t=e.params,i=e.pushToMemory,a=e.context,s=e.type,r=e.contextMethod,n=a,o=n.w,h=o.globals.dom.baseEl.querySelector(".apexcharts-".concat(s,"-annotations")),c=h.childNodes.length+1,d=new ue,g=Object.assign({},s==="xaxis"?d.xAxisAnnotation:s==="yaxis"?d.yAxisAnnotation:d.pointAnnotation),f=P.extend(g,t);switch(s){case"xaxis":this.addXaxisAnnotation(f,h,c);break;case"yaxis":this.addYaxisAnnotation(f,h,c);break;case"point":this.addPointAnnotation(f,h,c)}var x=o.globals.dom.baseEl.querySelector(".apexcharts-".concat(s,"-annotations .apexcharts-").concat(s,"-annotation-label[rel='").concat(c,"']")),b=this.helpers.addBackgroundToAnno(x,f);return b&&h.insertBefore(b.node,x),i&&o.globals.memory.methodsToExec.push({context:n,id:f.id?f.id:P.randomId(),method:r,label:"addAnnotation",params:t}),a}},{key:"clearAnnotations",value:function(e){for(var t=e.w,i=t.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxis-annotations, .apexcharts-xaxis-annotations, .apexcharts-point-annotations"),a=t.globals.memory.methodsToExec.length-1;a>=0;a--)t.globals.memory.methodsToExec[a].label!=="addText"&&t.globals.memory.methodsToExec[a].label!=="addAnnotation"||t.globals.memory.methodsToExec.splice(a,1);i=P.listToArray(i),Array.prototype.forEach.call(i,function(s){for(;s.firstChild;)s.removeChild(s.firstChild)})}},{key:"removeAnnotation",value:function(e,t){var i=e.w,a=i.globals.dom.baseEl.querySelectorAll(".".concat(t));a&&(i.globals.memory.methodsToExec.map(function(s,r){s.id===t&&i.globals.memory.methodsToExec.splice(r,1)}),Array.prototype.forEach.call(a,function(s){s.parentElement.removeChild(s)}))}}]),p}(),Je=function(p){var e,t=p.isTimeline,i=p.ctx,a=p.seriesIndex,s=p.dataPointIndex,r=p.y1,n=p.y2,o=p.w,h=o.globals.seriesRangeStart[a][s],c=o.globals.seriesRangeEnd[a][s],d=o.globals.labels[s],g=o.config.series[a].name?o.config.series[a].name:"",f=o.globals.ttKeyFormatter,x=o.config.tooltip.y.title.formatter,b={w:o,seriesIndex:a,dataPointIndex:s,start:h,end:c};typeof x=="function"&&(g=x(g,b)),(e=o.config.series[a].data[s])!==null&&e!==void 0&&e.x&&(d=o.config.series[a].data[s].x),t||o.config.xaxis.type==="datetime"&&(d=new ze(i).xLabelFormat(o.globals.ttKeyFormatter,d,d,{i:void 0,dateFormatter:new K(i).formatDate,w:o})),typeof f=="function"&&(d=f(d,b)),Number.isFinite(r)&&Number.isFinite(n)&&(h=r,c=n);var v="",y="",w=o.globals.colors[a];if(o.config.tooltip.x.formatter===void 0)if(o.config.xaxis.type==="datetime"){var l=new K(i);v=l.formatDate(l.getDate(h),o.config.tooltip.x.format),y=l.formatDate(l.getDate(c),o.config.tooltip.x.format)}else v=h,y=c;else v=o.config.tooltip.x.formatter(h),y=o.config.tooltip.x.formatter(c);return{start:h,end:c,startVal:v,endVal:y,ylabel:d,color:w,seriesName:g}},Ke=function(p){var e=p.color,t=p.seriesName,i=p.ylabel,a=p.start,s=p.end,r=p.seriesIndex,n=p.dataPointIndex,o=p.ctx.tooltip.tooltipLabels.getFormatters(r);a=o.yLbFormatter(a),s=o.yLbFormatter(s);var h=o.yLbFormatter(p.w.globals.series[r][n]),c=` + `.concat(a,` + - + `).concat(s,` + `);return'
'+(t||"")+'
'+i+": "+(p.w.globals.comboCharts?p.w.config.series[r].type==="rangeArea"||p.w.config.series[r].type==="rangeBar"?c:"".concat(h,""):c)+"
"},Le=function(){function p(e){F(this,p),this.opts=e}return R(p,[{key:"hideYAxis",value:function(){this.opts.yaxis[0].show=!1,this.opts.yaxis[0].title.text="",this.opts.yaxis[0].axisBorder.show=!1,this.opts.yaxis[0].axisTicks.show=!1,this.opts.yaxis[0].floating=!0}},{key:"line",value:function(){return{chart:{animations:{easing:"swing"}},dataLabels:{enabled:!1},stroke:{width:5,curve:"straight"},markers:{size:0,hover:{sizeOffset:6}},xaxis:{crosshairs:{width:1}}}}},{key:"sparkline",value:function(e){return this.hideYAxis(),P.extend(e,{grid:{show:!1,padding:{left:0,right:0,top:0,bottom:0}},legend:{show:!1},xaxis:{labels:{show:!1},tooltip:{enabled:!1},axisBorder:{show:!1},axisTicks:{show:!1}},chart:{toolbar:{show:!1},zoom:{enabled:!1}},dataLabels:{enabled:!1}})}},{key:"slope",value:function(){return this.hideYAxis(),{chart:{toolbar:{show:!1},zoom:{enabled:!1}},dataLabels:{enabled:!0,formatter:function(e,t){var i=t.w.config.series[t.seriesIndex].name;return e!==null?i+": "+e:""},background:{enabled:!1},offsetX:-5},grid:{xaxis:{lines:{show:!0}},yaxis:{lines:{show:!1}}},xaxis:{position:"top",labels:{style:{fontSize:14,fontWeight:900}},tooltip:{enabled:!1},crosshairs:{show:!1}},markers:{size:8,hover:{sizeOffset:1}},legend:{show:!1},tooltip:{shared:!1,intersect:!0,followCursor:!0},stroke:{width:5,curve:"straight"}}}},{key:"bar",value:function(){return{chart:{stacked:!1,animations:{easing:"swing"}},plotOptions:{bar:{dataLabels:{position:"center"}}},dataLabels:{style:{colors:["#fff"]},background:{enabled:!1}},stroke:{width:0,lineCap:"round"},fill:{opacity:.85},legend:{markers:{shape:"square"}},tooltip:{shared:!1,intersect:!0},xaxis:{tooltip:{enabled:!1},tickPlacement:"between",crosshairs:{width:"barWidth",position:"back",fill:{type:"gradient"},dropShadow:{enabled:!1},stroke:{width:0}}}}}},{key:"funnel",value:function(){return this.hideYAxis(),Y(Y({},this.bar()),{},{chart:{animations:{easing:"linear",speed:800,animateGradually:{enabled:!1}}},plotOptions:{bar:{horizontal:!0,borderRadiusApplication:"around",borderRadius:0,dataLabels:{position:"center"}}},grid:{show:!1,padding:{left:0,right:0}},xaxis:{labels:{show:!1},tooltip:{enabled:!1},axisBorder:{show:!1},axisTicks:{show:!1}}})}},{key:"candlestick",value:function(){var e=this;return{stroke:{width:1,colors:["#333"]},fill:{opacity:1},dataLabels:{enabled:!1},tooltip:{shared:!0,custom:function(t){var i=t.seriesIndex,a=t.dataPointIndex,s=t.w;return e._getBoxTooltip(s,i,a,["Open","High","","Low","Close"],"candlestick")}},states:{active:{filter:{type:"none"}}},xaxis:{crosshairs:{width:1}}}}},{key:"boxPlot",value:function(){var e=this;return{chart:{animations:{dynamicAnimation:{enabled:!1}}},stroke:{width:1,colors:["#24292e"]},dataLabels:{enabled:!1},tooltip:{shared:!0,custom:function(t){var i=t.seriesIndex,a=t.dataPointIndex,s=t.w;return e._getBoxTooltip(s,i,a,["Minimum","Q1","Median","Q3","Maximum"],"boxPlot")}},markers:{size:7,strokeWidth:1,strokeColors:"#111"},xaxis:{crosshairs:{width:1}}}}},{key:"rangeBar",value:function(){return{chart:{animations:{animateGradually:!1}},stroke:{width:0,lineCap:"square"},plotOptions:{bar:{borderRadius:0,dataLabels:{position:"center"}}},dataLabels:{enabled:!1,formatter:function(e,t){t.ctx;var i=t.seriesIndex,a=t.dataPointIndex,s=t.w,r=function(){var n=s.globals.seriesRangeStart[i][a];return s.globals.seriesRangeEnd[i][a]-n};return s.globals.comboCharts?s.config.series[i].type==="rangeBar"||s.config.series[i].type==="rangeArea"?r():e:r()},background:{enabled:!1},style:{colors:["#fff"]}},markers:{size:10},tooltip:{shared:!1,followCursor:!0,custom:function(e){return e.w.config.plotOptions&&e.w.config.plotOptions.bar&&e.w.config.plotOptions.bar.horizontal?function(t){var i=Je(Y(Y({},t),{},{isTimeline:!0})),a=i.color,s=i.seriesName,r=i.ylabel,n=i.startVal,o=i.endVal;return Ke(Y(Y({},t),{},{color:a,seriesName:s,ylabel:r,start:n,end:o}))}(e):function(t){var i=Je(t),a=i.color,s=i.seriesName,r=i.ylabel,n=i.start,o=i.end;return Ke(Y(Y({},t),{},{color:a,seriesName:s,ylabel:r,start:n,end:o}))}(e)}},xaxis:{tickPlacement:"between",tooltip:{enabled:!1},crosshairs:{stroke:{width:0}}}}}},{key:"dumbbell",value:function(e){var t,i;return(t=e.plotOptions.bar)!==null&&t!==void 0&&t.barHeight||(e.plotOptions.bar.barHeight=2),(i=e.plotOptions.bar)!==null&&i!==void 0&&i.columnWidth||(e.plotOptions.bar.columnWidth=2),e}},{key:"area",value:function(){return{stroke:{width:4,fill:{type:"solid",gradient:{inverseColors:!1,shade:"light",type:"vertical",opacityFrom:.65,opacityTo:.5,stops:[0,100,100]}}},fill:{type:"gradient",gradient:{inverseColors:!1,shade:"light",type:"vertical",opacityFrom:.65,opacityTo:.5,stops:[0,100,100]}},markers:{size:0,hover:{sizeOffset:6}},tooltip:{followCursor:!1}}}},{key:"rangeArea",value:function(){return{stroke:{curve:"straight",width:0},fill:{type:"solid",opacity:.6},markers:{size:0},states:{hover:{filter:{type:"none"}},active:{filter:{type:"none"}}},tooltip:{intersect:!1,shared:!0,followCursor:!0,custom:function(e){return function(t){var i=Je(t),a=i.color,s=i.seriesName,r=i.ylabel,n=i.start,o=i.end;return Ke(Y(Y({},t),{},{color:a,seriesName:s,ylabel:r,start:n,end:o}))}(e)}}}}},{key:"brush",value:function(e){return P.extend(e,{chart:{toolbar:{autoSelected:"selection",show:!1},zoom:{enabled:!1}},dataLabels:{enabled:!1},stroke:{width:1},tooltip:{enabled:!1},xaxis:{tooltip:{enabled:!1}}})}},{key:"stacked100",value:function(e){e.dataLabels=e.dataLabels||{},e.dataLabels.formatter=e.dataLabels.formatter||void 0;var t=e.dataLabels.formatter;return e.yaxis.forEach(function(i,a){e.yaxis[a].min=0,e.yaxis[a].max=100}),e.chart.type==="bar"&&(e.dataLabels.formatter=t||function(i){return typeof i=="number"&&i?i.toFixed(0)+"%":i}),e}},{key:"stackedBars",value:function(){var e=this.bar();return Y(Y({},e),{},{plotOptions:Y(Y({},e.plotOptions),{},{bar:Y(Y({},e.plotOptions.bar),{},{borderRadiusApplication:"end",borderRadiusWhenStacked:"last"})})})}},{key:"convertCatToNumeric",value:function(e){return e.xaxis.convertedCatToNumeric=!0,e}},{key:"convertCatToNumericXaxis",value:function(e,t,i){e.xaxis.type="numeric",e.xaxis.labels=e.xaxis.labels||{},e.xaxis.labels.formatter=e.xaxis.labels.formatter||function(r){return P.isNumber(r)?Math.floor(r):r};var a=e.xaxis.labels.formatter,s=e.xaxis.categories&&e.xaxis.categories.length?e.xaxis.categories:e.labels;return i&&i.length&&(s=i.map(function(r){return Array.isArray(r)?r:String(r)})),s&&s.length&&(e.xaxis.labels.formatter=function(r){return P.isNumber(r)?a(s[Math.floor(r)-1]):a(r)}),e.xaxis.categories=[],e.labels=[],e.xaxis.tickAmount=e.xaxis.tickAmount||"dataPoints",e}},{key:"bubble",value:function(){return{dataLabels:{style:{colors:["#fff"]}},tooltip:{shared:!1,intersect:!0},xaxis:{crosshairs:{width:0}},fill:{type:"solid",gradient:{shade:"light",inverse:!0,shadeIntensity:.55,opacityFrom:.4,opacityTo:.8}}}}},{key:"scatter",value:function(){return{dataLabels:{enabled:!1},tooltip:{shared:!1,intersect:!0},markers:{size:6,strokeWidth:1,hover:{sizeOffset:2}}}}},{key:"heatmap",value:function(){return{chart:{stacked:!1},fill:{opacity:1},dataLabels:{style:{colors:["#fff"]}},stroke:{colors:["#fff"]},tooltip:{followCursor:!0,marker:{show:!1},x:{show:!1}},legend:{position:"top",markers:{shape:"square"}},grid:{padding:{right:20}}}}},{key:"treemap",value:function(){return{chart:{zoom:{enabled:!1}},dataLabels:{style:{fontSize:14,fontWeight:600,colors:["#fff"]}},stroke:{show:!0,width:2,colors:["#fff"]},legend:{show:!1},fill:{opacity:1,gradient:{stops:[0,100]}},tooltip:{followCursor:!0,x:{show:!1}},grid:{padding:{left:0,right:0}},xaxis:{crosshairs:{show:!1},tooltip:{enabled:!1}}}}},{key:"pie",value:function(){return{chart:{toolbar:{show:!1}},plotOptions:{pie:{donut:{labels:{show:!1}}}},dataLabels:{formatter:function(e){return e.toFixed(1)+"%"},style:{colors:["#fff"]},background:{enabled:!1},dropShadow:{enabled:!0}},stroke:{colors:["#fff"]},fill:{opacity:1,gradient:{shade:"light",stops:[0,100]}},tooltip:{theme:"dark",fillSeriesColor:!0},legend:{position:"right"}}}},{key:"donut",value:function(){return{chart:{toolbar:{show:!1}},dataLabels:{formatter:function(e){return e.toFixed(1)+"%"},style:{colors:["#fff"]},background:{enabled:!1},dropShadow:{enabled:!0}},stroke:{colors:["#fff"]},fill:{opacity:1,gradient:{shade:"light",shadeIntensity:.35,stops:[80,100],opacityFrom:1,opacityTo:1}},tooltip:{theme:"dark",fillSeriesColor:!0},legend:{position:"right"}}}},{key:"polarArea",value:function(){return{chart:{toolbar:{show:!1}},dataLabels:{formatter:function(e){return e.toFixed(1)+"%"},enabled:!1},stroke:{show:!0,width:2},fill:{opacity:.7},tooltip:{theme:"dark",fillSeriesColor:!0},legend:{position:"right"}}}},{key:"radar",value:function(){return this.opts.yaxis[0].labels.offsetY=this.opts.yaxis[0].labels.offsetY?this.opts.yaxis[0].labels.offsetY:6,{dataLabels:{enabled:!1,style:{fontSize:"11px"}},stroke:{width:2},markers:{size:5,strokeWidth:1,strokeOpacity:1},fill:{opacity:.2},tooltip:{shared:!1,intersect:!0,followCursor:!0},grid:{show:!1},xaxis:{labels:{formatter:function(e){return e},style:{colors:["#a8a8a8"],fontSize:"11px"}},tooltip:{enabled:!1},crosshairs:{show:!1}}}}},{key:"radialBar",value:function(){return{chart:{animations:{dynamicAnimation:{enabled:!0,speed:800}},toolbar:{show:!1}},fill:{gradient:{shade:"dark",shadeIntensity:.4,inverseColors:!1,type:"diagonal2",opacityFrom:1,opacityTo:1,stops:[70,98,100]}},legend:{show:!1,position:"right"},tooltip:{enabled:!1,fillSeriesColor:!0}}}},{key:"_getBoxTooltip",value:function(e,t,i,a,s){var r=e.globals.seriesCandleO[t][i],n=e.globals.seriesCandleH[t][i],o=e.globals.seriesCandleM[t][i],h=e.globals.seriesCandleL[t][i],c=e.globals.seriesCandleC[t][i];return e.config.series[t].type&&e.config.series[t].type!==s?`
+ `.concat(e.config.series[t].name?e.config.series[t].name:"series-"+(t+1),": ").concat(e.globals.series[t][i],` +
`):'
')+"
".concat(a[0],': ')+r+"
"+"
".concat(a[1],': ')+n+"
"+(o?"
".concat(a[2],': ')+o+"
":"")+"
".concat(a[3],': ')+h+"
"+"
".concat(a[4],': ')+c+"
"}}]),p}(),Pe=function(){function p(e){F(this,p),this.opts=e}return R(p,[{key:"init",value:function(e){var t=e.responsiveOverride,i=this.opts,a=new ue,s=new Le(i);this.chartType=i.chart.type,i=this.extendYAxis(i),i=this.extendAnnotations(i);var r=a.init(),n={};if(i&&J(i)==="object"){var o,h,c,d,g,f,x,b,v,y,w={};w=["line","area","bar","candlestick","boxPlot","rangeBar","rangeArea","bubble","scatter","heatmap","treemap","pie","polarArea","donut","radar","radialBar"].indexOf(i.chart.type)!==-1?s[i.chart.type]():s.line(),(o=i.plotOptions)!==null&&o!==void 0&&(h=o.bar)!==null&&h!==void 0&&h.isFunnel&&(w=s.funnel()),i.chart.stacked&&i.chart.type==="bar"&&(w=s.stackedBars()),(c=i.chart.brush)!==null&&c!==void 0&&c.enabled&&(w=s.brush(w)),(d=i.plotOptions)!==null&&d!==void 0&&(g=d.line)!==null&&g!==void 0&&g.isSlopeChart&&(w=s.slope()),i.chart.stacked&&i.chart.stackType==="100%"&&(i=s.stacked100(i)),(f=i.plotOptions)!==null&&f!==void 0&&(x=f.bar)!==null&&x!==void 0&&x.isDumbbell&&(i=s.dumbbell(i)),this.checkForDarkTheme(window.Apex),this.checkForDarkTheme(i),i.xaxis=i.xaxis||window.Apex.xaxis||{},t||(i.xaxis.convertedCatToNumeric=!1),((b=(i=this.checkForCatToNumericXAxis(this.chartType,w,i)).chart.sparkline)!==null&&b!==void 0&&b.enabled||(v=window.Apex.chart)!==null&&v!==void 0&&(y=v.sparkline)!==null&&y!==void 0&&y.enabled)&&(w=s.sparkline(w)),n=P.extend(r,w)}var l=P.extend(n,window.Apex);return r=P.extend(l,i),r=this.handleUserInputErrors(r)}},{key:"checkForCatToNumericXAxis",value:function(e,t,i){var a,s,r=new Le(i),n=(e==="bar"||e==="boxPlot")&&((a=i.plotOptions)===null||a===void 0||(s=a.bar)===null||s===void 0?void 0:s.horizontal),o=e==="pie"||e==="polarArea"||e==="donut"||e==="radar"||e==="radialBar"||e==="heatmap",h=i.xaxis.type!=="datetime"&&i.xaxis.type!=="numeric",c=i.xaxis.tickPlacement?i.xaxis.tickPlacement:t.xaxis&&t.xaxis.tickPlacement;return n||o||!h||c==="between"||(i=r.convertCatToNumeric(i)),i}},{key:"extendYAxis",value:function(e,t){var i=new ue;(e.yaxis===void 0||!e.yaxis||Array.isArray(e.yaxis)&&e.yaxis.length===0)&&(e.yaxis={}),e.yaxis.constructor!==Array&&window.Apex.yaxis&&window.Apex.yaxis.constructor!==Array&&(e.yaxis=P.extend(e.yaxis,window.Apex.yaxis)),e.yaxis.constructor!==Array?e.yaxis=[P.extend(i.yAxis,e.yaxis)]:e.yaxis=P.extendArray(e.yaxis,i.yAxis);var a=!1;e.yaxis.forEach(function(r){r.logarithmic&&(a=!0)});var s=e.series;return t&&!s&&(s=t.config.series),a&&s.length!==e.yaxis.length&&s.length&&(e.yaxis=s.map(function(r,n){if(r.name||(s[n].name="series-".concat(n+1)),e.yaxis[n])return e.yaxis[n].seriesName=s[n].name,e.yaxis[n];var o=P.extend(i.yAxis,e.yaxis[0]);return o.show=!1,o})),a&&s.length>1&&s.length!==e.yaxis.length&&console.warn("A multi-series logarithmic chart should have equal number of series and y-axes"),e}},{key:"extendAnnotations",value:function(e){return e.annotations===void 0&&(e.annotations={},e.annotations.yaxis=[],e.annotations.xaxis=[],e.annotations.points=[]),e=this.extendYAxisAnnotations(e),e=this.extendXAxisAnnotations(e),e=this.extendPointAnnotations(e)}},{key:"extendYAxisAnnotations",value:function(e){var t=new ue;return e.annotations.yaxis=P.extendArray(e.annotations.yaxis!==void 0?e.annotations.yaxis:[],t.yAxisAnnotation),e}},{key:"extendXAxisAnnotations",value:function(e){var t=new ue;return e.annotations.xaxis=P.extendArray(e.annotations.xaxis!==void 0?e.annotations.xaxis:[],t.xAxisAnnotation),e}},{key:"extendPointAnnotations",value:function(e){var t=new ue;return e.annotations.points=P.extendArray(e.annotations.points!==void 0?e.annotations.points:[],t.pointAnnotation),e}},{key:"checkForDarkTheme",value:function(e){e.theme&&e.theme.mode==="dark"&&(e.tooltip||(e.tooltip={}),e.tooltip.theme!=="light"&&(e.tooltip.theme="dark"),e.chart.foreColor||(e.chart.foreColor="#f6f7f8"),e.theme.palette||(e.theme.palette="palette4"))}},{key:"handleUserInputErrors",value:function(e){var t=e;if(t.tooltip.shared&&t.tooltip.intersect)throw new Error("tooltip.shared cannot be enabled when tooltip.intersect is true. Turn off any other option by setting it to false.");if(t.chart.type==="bar"&&t.plotOptions.bar.horizontal){if(t.yaxis.length>1)throw new Error("Multiple Y Axis for bars are not supported. Switch to column chart by setting plotOptions.bar.horizontal=false");t.yaxis[0].reversed&&(t.yaxis[0].opposite=!0),t.xaxis.tooltip.enabled=!1,t.yaxis[0].tooltip.enabled=!1,t.chart.zoom.enabled=!1}return t.chart.type!=="bar"&&t.chart.type!=="rangeBar"||t.tooltip.shared&&t.xaxis.crosshairs.width==="barWidth"&&t.series.length>1&&(t.xaxis.crosshairs.width="tickWidth"),t.chart.type!=="candlestick"&&t.chart.type!=="boxPlot"||t.yaxis[0].reversed&&(console.warn("Reversed y-axis in ".concat(t.chart.type," chart is not supported.")),t.yaxis[0].reversed=!1),t}}]),p}(),Et=function(){function p(){F(this,p)}return R(p,[{key:"initGlobalVars",value:function(e){e.series=[],e.seriesCandleO=[],e.seriesCandleH=[],e.seriesCandleM=[],e.seriesCandleL=[],e.seriesCandleC=[],e.seriesRangeStart=[],e.seriesRangeEnd=[],e.seriesRange=[],e.seriesPercent=[],e.seriesGoals=[],e.seriesX=[],e.seriesZ=[],e.seriesNames=[],e.seriesTotals=[],e.seriesLog=[],e.seriesColors=[],e.stackedSeriesTotals=[],e.seriesXvalues=[],e.seriesYvalues=[],e.labels=[],e.hasXaxisGroups=!1,e.groups=[],e.barGroups=[],e.lineGroups=[],e.areaGroups=[],e.hasSeriesGroups=!1,e.seriesGroups=[],e.categoryLabels=[],e.timescaleLabels=[],e.noLabelsProvided=!1,e.resizeTimer=null,e.selectionResizeTimer=null,e.lastWheelExecution=0,e.delayedElements=[],e.pointsArray=[],e.dataLabelsRects=[],e.isXNumeric=!1,e.skipLastTimelinelabel=!1,e.skipFirstTimelinelabel=!1,e.isDataXYZ=!1,e.isMultiLineX=!1,e.isMultipleYAxis=!1,e.maxY=-Number.MAX_VALUE,e.minY=Number.MIN_VALUE,e.minYArr=[],e.maxYArr=[],e.maxX=-Number.MAX_VALUE,e.minX=Number.MAX_VALUE,e.initialMaxX=-Number.MAX_VALUE,e.initialMinX=Number.MAX_VALUE,e.maxDate=0,e.minDate=Number.MAX_VALUE,e.minZ=Number.MAX_VALUE,e.maxZ=-Number.MAX_VALUE,e.minXDiff=Number.MAX_VALUE,e.yAxisScale=[],e.xAxisScale=null,e.xAxisTicksPositions=[],e.yLabelsCoords=[],e.yTitleCoords=[],e.barPadForNumericAxis=0,e.padHorizontal=0,e.xRange=0,e.yRange=[],e.zRange=0,e.dataPoints=0,e.xTickAmount=0,e.multiAxisTickAmount=0}},{key:"globalVars",value:function(e){return{chartID:null,cuid:null,events:{beforeMount:[],mounted:[],updated:[],clicked:[],selection:[],dataPointSelection:[],zoomed:[],scrolled:[]},colors:[],clientX:null,clientY:null,fill:{colors:[]},stroke:{colors:[]},dataLabels:{style:{colors:[]}},radarPolygons:{fill:{colors:[]}},markers:{colors:[],size:e.markers.size,largestSize:0},animationEnded:!1,isTouchDevice:"ontouchstart"in window||navigator.msMaxTouchPoints,isDirty:!1,isExecCalled:!1,initialConfig:null,initialSeries:[],lastXAxis:[],lastYAxis:[],columnSeries:null,labels:[],timescaleLabels:[],noLabelsProvided:!1,allSeriesCollapsed:!1,collapsedSeries:[],collapsedSeriesIndices:[],ancillaryCollapsedSeries:[],ancillaryCollapsedSeriesIndices:[],risingSeries:[],dataFormatXNumeric:!1,capturedSeriesIndex:-1,capturedDataPointIndex:-1,selectedDataPoints:[],goldenPadding:35,invalidLogScale:!1,ignoreYAxisIndexes:[],maxValsInArrayIndex:0,radialSize:0,selection:void 0,zoomEnabled:e.chart.toolbar.autoSelected==="zoom"&&e.chart.toolbar.tools.zoom&&e.chart.zoom.enabled,panEnabled:e.chart.toolbar.autoSelected==="pan"&&e.chart.toolbar.tools.pan,selectionEnabled:e.chart.toolbar.autoSelected==="selection"&&e.chart.toolbar.tools.selection,yaxis:null,mousedown:!1,lastClientPosition:{},visibleXRange:void 0,yValueDecimal:0,total:0,SVGNS:"http://www.w3.org/2000/svg",svgWidth:0,svgHeight:0,noData:!1,locale:{},dom:{},memory:{methodsToExec:[]},shouldAnimate:!0,skipLastTimelinelabel:!1,skipFirstTimelinelabel:!1,delayedElements:[],axisCharts:!0,isDataXYZ:!1,isSlopeChart:e.plotOptions.line.isSlopeChart,resized:!1,resizeTimer:null,comboCharts:!1,dataChanged:!1,previousPaths:[],allSeriesHasEqualX:!0,pointsArray:[],dataLabelsRects:[],lastDrawnDataLabelsIndexes:[],hasNullValues:!1,easing:null,zoomed:!1,gridWidth:0,gridHeight:0,rotateXLabels:!1,defaultLabels:!1,xLabelFormatter:void 0,yLabelFormatters:[],xaxisTooltipFormatter:void 0,ttKeyFormatter:void 0,ttVal:void 0,ttZFormatter:void 0,LINE_HEIGHT_RATIO:1.618,xAxisLabelsHeight:0,xAxisGroupLabelsHeight:0,xAxisLabelsWidth:0,yAxisLabelsWidth:0,scaleX:1,scaleY:1,translateX:0,translateY:0,translateYAxisX:[],yAxisWidths:[],translateXAxisY:0,translateXAxisX:0,tooltip:null,niceScaleAllowedMagMsd:[[1,1,2,5,5,5,10,10,10,10,10],[1,1,2,5,5,5,10,10,10,10,10]],niceScaleDefaultTicks:[1,2,4,4,6,6,6,6,6,6,6,6,6,6,6,6,6,6,12,12,12,12,12,12,12,12,12,24],seriesYAxisMap:[],seriesYAxisReverseMap:[]}}},{key:"init",value:function(e){var t=this.globalVars(e);return this.initGlobalVars(t),t.initialConfig=P.extend({},e),t.initialSeries=P.clone(e.series),t.lastXAxis=P.clone(t.initialConfig.xaxis),t.lastYAxis=P.clone(t.initialConfig.yaxis),t}}]),p}(),Ri=function(){function p(e){F(this,p),this.opts=e}return R(p,[{key:"init",value:function(){var e=new Pe(this.opts).init({responsiveOverride:!1});return{config:e,globals:new Et().init(e)}}}]),p}(),ne=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w,this.opts=null,this.seriesIndex=0,this.patternIDs=[]}return R(p,[{key:"clippedImgArea",value:function(e){var t=this.w,i=t.config,a=parseInt(t.globals.gridWidth,10),s=parseInt(t.globals.gridHeight,10),r=a>s?a:s,n=e.image,o=0,h=0;e.width===void 0&&e.height===void 0?i.fill.image.width!==void 0&&i.fill.image.height!==void 0?(o=i.fill.image.width+1,h=i.fill.image.height):(o=r+1,h=r):(o=e.width,h=e.height);var c=document.createElementNS(t.globals.SVGNS,"pattern");X.setAttrs(c,{id:e.patternID,patternUnits:e.patternUnits?e.patternUnits:"userSpaceOnUse",width:o+"px",height:h+"px"});var d=document.createElementNS(t.globals.SVGNS,"image");c.appendChild(d),d.setAttributeNS(window.SVG.xlink,"href",n),X.setAttrs(d,{x:0,y:0,preserveAspectRatio:"none",width:o+"px",height:h+"px"}),d.style.opacity=e.opacity,t.globals.dom.elDefs.node.appendChild(c)}},{key:"getSeriesIndex",value:function(e){var t=this.w,i=t.config.chart.type;return(i==="bar"||i==="rangeBar")&&t.config.plotOptions.bar.distributed||i==="heatmap"||i==="treemap"?this.seriesIndex=e.seriesNumber:this.seriesIndex=e.seriesNumber%t.globals.series.length,this.seriesIndex}},{key:"fillPath",value:function(e){var t=this.w;this.opts=e;var i,a,s,r=this.w.config;this.seriesIndex=this.getSeriesIndex(e);var n=this.getFillColors()[this.seriesIndex];t.globals.seriesColors[this.seriesIndex]!==void 0&&(n=t.globals.seriesColors[this.seriesIndex]),typeof n=="function"&&(n=n({seriesIndex:this.seriesIndex,dataPointIndex:e.dataPointIndex,value:e.value,w:t}));var o=e.fillType?e.fillType:this.getFillType(this.seriesIndex),h=Array.isArray(r.fill.opacity)?r.fill.opacity[this.seriesIndex]:r.fill.opacity;e.color&&(n=e.color),n||(n="#fff",console.warn("undefined color - ApexCharts"));var c=n;if(n.indexOf("rgb")===-1?n.length<9&&(c=P.hexToRgba(n,h)):n.indexOf("rgba")>-1&&(h=P.getOpacityFromRGBA(n)),e.opacity&&(h=e.opacity),o==="pattern"&&(a=this.handlePatternFill({fillConfig:e.fillConfig,patternFill:a,fillColor:n,fillOpacity:h,defaultColor:c})),o==="gradient"&&(s=this.handleGradientFill({fillConfig:e.fillConfig,fillColor:n,fillOpacity:h,i:this.seriesIndex})),o==="image"){var d=r.fill.image.src,g=e.patternID?e.patternID:"",f="pattern".concat(t.globals.cuid).concat(e.seriesNumber+1).concat(g);this.patternIDs.indexOf(f)===-1&&(this.clippedImgArea({opacity:h,image:Array.isArray(d)?e.seriesNumber-1&&(f=P.getOpacityFromRGBA(g));var x=r.gradient.opacityTo===void 0?i:Array.isArray(r.gradient.opacityTo)?r.gradient.opacityTo[s]:r.gradient.opacityTo;if(r.gradient.gradientToColors===void 0||r.gradient.gradientToColors.length===0)n=r.gradient.shade==="dark"?c.shadeColor(-1*parseFloat(r.gradient.shadeIntensity),t.indexOf("rgb")>-1?P.rgb2hex(t):t):c.shadeColor(parseFloat(r.gradient.shadeIntensity),t.indexOf("rgb")>-1?P.rgb2hex(t):t);else if(r.gradient.gradientToColors[o.seriesNumber]){var b=r.gradient.gradientToColors[o.seriesNumber];n=b,b.indexOf("rgba")>-1&&(x=P.getOpacityFromRGBA(b))}else n=t;if(r.gradient.gradientFrom&&(g=r.gradient.gradientFrom),r.gradient.gradientTo&&(n=r.gradient.gradientTo),r.gradient.inverseColors){var v=g;g=n,n=v}return g.indexOf("rgb")>-1&&(g=P.rgb2hex(g)),n.indexOf("rgb")>-1&&(n=P.rgb2hex(n)),h.drawGradient(d,g,n,f,x,o.size,r.gradient.stops,r.gradient.colorStops,s)}}]),p}(),ye=function(){function p(e,t){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"setGlobalMarkerSize",value:function(){var e=this.w;if(e.globals.markers.size=Array.isArray(e.config.markers.size)?e.config.markers.size:[e.config.markers.size],e.globals.markers.size.length>0){if(e.globals.markers.size.length4&&arguments[4]!==void 0&&arguments[4],n=this.w,o=t,h=e,c=null,d=new X(this.ctx),g=n.config.markers.discrete&&n.config.markers.discrete.length;if((n.globals.markers.size[t]>0||r||g)&&(c=d.group({class:r||g?"":"apexcharts-series-markers"})).attr("clip-path","url(#gridRectMarkerMask".concat(n.globals.cuid,")")),Array.isArray(h.x))for(var f=0;f0:n.config.markers.size>0)||r||g){P.isNumber(h.y[f])?b+=" w".concat(P.randomId()):b="apexcharts-nullpoint";var v=this.getMarkerConfig({cssClass:b,seriesIndex:t,dataPointIndex:x});n.config.series[o].data[x]&&(n.config.series[o].data[x].fillColor&&(v.pointFillColor=n.config.series[o].data[x].fillColor),n.config.series[o].data[x].strokeColor&&(v.pointStrokeColor=n.config.series[o].data[x].strokeColor)),a!==void 0&&(v.pSize=a),(h.x[f]<-n.globals.markers.largestSize||h.x[f]>n.globals.gridWidth+n.globals.markers.largestSize||h.y[f]<-n.globals.markers.largestSize||h.y[f]>n.globals.gridHeight+n.globals.markers.largestSize)&&(v.pSize=0),(s=d.drawMarker(h.x[f],h.y[f],v)).attr("rel",x),s.attr("j",x),s.attr("index",t),s.node.setAttribute("default-marker-size",v.pSize),new ie(this.ctx).setSelectionFilter(s,t,x),this.addEvents(s),c&&c.add(s)}else n.globals.pointsArray[t]===void 0&&(n.globals.pointsArray[t]=[]),n.globals.pointsArray[t].push([h.x[f],h.y[f]])}return c}},{key:"getMarkerConfig",value:function(e){var t=e.cssClass,i=e.seriesIndex,a=e.dataPointIndex,s=a===void 0?null:a,r=e.radius,n=r===void 0?null:r,o=e.size,h=o===void 0?null:o,c=e.strokeWidth,d=c===void 0?null:c,g=this.w,f=this.getMarkerStyle(i),x=h===null?g.globals.markers.size[i]:h,b=g.config.markers;return s!==null&&b.discrete.length&&b.discrete.map(function(v){v.seriesIndex===i&&v.dataPointIndex===s&&(f.pointStrokeColor=v.strokeColor,f.pointFillColor=v.fillColor,x=v.size,f.pointShape=v.shape)}),{pSize:n===null?x:n,pRadius:n!==null?n:b.radius,pointStrokeWidth:d!==null?d:Array.isArray(b.strokeWidth)?b.strokeWidth[i]:b.strokeWidth,pointStrokeColor:f.pointStrokeColor,pointFillColor:f.pointFillColor,shape:f.pointShape||(Array.isArray(b.shape)?b.shape[i]:b.shape),class:t,pointStrokeOpacity:Array.isArray(b.strokeOpacity)?b.strokeOpacity[i]:b.strokeOpacity,pointStrokeDashArray:Array.isArray(b.strokeDashArray)?b.strokeDashArray[i]:b.strokeDashArray,pointFillOpacity:Array.isArray(b.fillOpacity)?b.fillOpacity[i]:b.fillOpacity,seriesIndex:i}}},{key:"addEvents",value:function(e){var t=this.w,i=new X(this.ctx);e.node.addEventListener("mouseenter",i.pathMouseEnter.bind(this.ctx,e)),e.node.addEventListener("mouseleave",i.pathMouseLeave.bind(this.ctx,e)),e.node.addEventListener("mousedown",i.pathMouseDown.bind(this.ctx,e)),e.node.addEventListener("click",t.config.markers.onClick),e.node.addEventListener("dblclick",t.config.markers.onDblClick),e.node.addEventListener("touchstart",i.pathMouseDown.bind(this.ctx,e),{passive:!0})}},{key:"getMarkerStyle",value:function(e){var t=this.w,i=t.globals.markers.colors,a=t.config.markers.strokeColor||t.config.markers.strokeColors;return{pointStrokeColor:Array.isArray(a)?a[e]:a,pointFillColor:Array.isArray(i)?i[e]:i}}}]),p}(),Yt=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w,this.initialAnim=this.w.config.chart.animations.enabled}return R(p,[{key:"draw",value:function(e,t,i){var a=this.w,s=new X(this.ctx),r=i.realIndex,n=i.pointsPos,o=i.zRatio,h=i.elParent,c=s.group({class:"apexcharts-series-markers apexcharts-series-".concat(a.config.chart.type)});if(c.attr("clip-path","url(#gridRectMarkerMask".concat(a.globals.cuid,")")),Array.isArray(n.x))for(var d=0;db.maxBubbleRadius&&(x=b.maxBubbleRadius)}var v=n.x[d],y=n.y[d];if(x=x||0,y!==null&&a.globals.series[r][g]!==void 0||(f=!1),f){var w=this.drawPoint(v,y,x,r,g,t);c.add(w)}h.add(c)}}},{key:"drawPoint",value:function(e,t,i,a,s,r){var n=this.w,o=a,h=new ve(this.ctx),c=new ie(this.ctx),d=new ne(this.ctx),g=new ye(this.ctx),f=new X(this.ctx),x=g.getMarkerConfig({cssClass:"apexcharts-marker",seriesIndex:o,dataPointIndex:s,radius:n.config.chart.type==="bubble"||n.globals.comboCharts&&n.config.series[a]&&n.config.series[a].type==="bubble"?i:null}),b=d.fillPath({seriesNumber:a,dataPointIndex:s,color:x.pointFillColor,patternUnits:"objectBoundingBox",value:n.globals.series[a][r]}),v=f.drawMarker(e,t,x);if(n.config.series[o].data[s]&&n.config.series[o].data[s].fillColor&&(b=n.config.series[o].data[s].fillColor),v.attr({fill:b}),n.config.chart.dropShadow.enabled){var y=n.config.chart.dropShadow;c.dropShadow(v,y,a)}if(!this.initialAnim||n.globals.dataChanged||n.globals.resized)n.globals.animationEnded=!0;else{var w=n.config.chart.animations.speed;h.animateMarker(v,w,n.globals.easing,function(){window.setTimeout(function(){h.animationCompleted(v)},100)})}return v.attr({rel:s,j:s,index:a,"default-marker-size":x.pSize}),c.setSelectionFilter(v,a,s),g.addEvents(v),v.node.classList.add("apexcharts-marker"),v}},{key:"centerTextInBubble",value:function(e){var t=this.w;return{y:e+=parseInt(t.config.dataLabels.style.fontSize,10)/4}}}]),p}(),be=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"dataLabelsCorrection",value:function(e,t,i,a,s,r,n){var o=this.w,h=!1,c=new X(this.ctx).getTextRects(i,n),d=c.width,g=c.height;t<0&&(t=0),t>o.globals.gridHeight+g&&(t=o.globals.gridHeight+g/2),o.globals.dataLabelsRects[a]===void 0&&(o.globals.dataLabelsRects[a]=[]),o.globals.dataLabelsRects[a].push({x:e,y:t,width:d,height:g});var f=o.globals.dataLabelsRects[a].length-2,x=o.globals.lastDrawnDataLabelsIndexes[a]!==void 0?o.globals.lastDrawnDataLabelsIndexes[a][o.globals.lastDrawnDataLabelsIndexes[a].length-1]:0;if(o.globals.dataLabelsRects[a][f]!==void 0){var b=o.globals.dataLabelsRects[a][x];(e>b.x+b.width||t>b.y+b.height||t+gt.globals.gridWidth+w.textRects.width+30)&&(o="");var l=t.globals.dataLabels.style.colors[r];((t.config.chart.type==="bar"||t.config.chart.type==="rangeBar")&&t.config.plotOptions.bar.distributed||t.config.dataLabels.distributed)&&(l=t.globals.dataLabels.style.colors[n]),typeof l=="function"&&(l=l({series:t.globals.series,seriesIndex:r,dataPointIndex:n,w:t})),f&&(l=f);var u=g.offsetX,m=g.offsetY;if(t.config.chart.type!=="bar"&&t.config.chart.type!=="rangeBar"||(u=0,m=0),t.globals.isSlopeChart&&(n!==0&&(u=-2*g.offsetX+5),n!==0&&n!==t.config.series[r].data.length-1&&(u=0)),w.drawnextLabel){if((y=i.drawText({width:100,height:parseInt(g.style.fontSize,10),x:a+u,y:s+m,foreColor:l,textAnchor:h||g.textAnchor,text:o,fontSize:c||g.style.fontSize,fontFamily:g.style.fontFamily,fontWeight:g.style.fontWeight||"normal"})).attr({class:v||"apexcharts-datalabel",cx:a,cy:s}),g.dropShadow.enabled){var A=g.dropShadow;new ie(this.ctx).dropShadow(y,A)}d.add(y),t.globals.lastDrawnDataLabelsIndexes[r]===void 0&&(t.globals.lastDrawnDataLabelsIndexes[r]=[]),t.globals.lastDrawnDataLabelsIndexes[r].push(n)}return y}},{key:"addBackgroundToDataLabel",value:function(e,t){var i=this.w,a=i.config.dataLabels.background,s=a.padding,r=a.padding/2,n=t.width,o=t.height,h=new X(this.ctx).drawRect(t.x-s,t.y-r/2,n+2*s,o+r,a.borderRadius,i.config.chart.background!=="transparent"&&i.config.chart.background?i.config.chart.background:"#fff",a.opacity,a.borderWidth,a.borderColor);return a.dropShadow.enabled&&new ie(this.ctx).dropShadow(h,a.dropShadow),h}},{key:"dataLabelsBackground",value:function(){var e=this.w;if(e.config.chart.type!=="bubble")for(var t=e.globals.dom.baseEl.querySelectorAll(".apexcharts-datalabels text"),i=0;i0&&arguments[0]!==void 0)||arguments[0],t=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],i=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2],a=this.w,s=P.clone(a.globals.initialSeries);a.globals.previousPaths=[],i?(a.globals.collapsedSeries=[],a.globals.ancillaryCollapsedSeries=[],a.globals.collapsedSeriesIndices=[],a.globals.ancillaryCollapsedSeriesIndices=[]):s=this.emptyCollapsedSeries(s),a.config.series=s,e&&(t&&(a.globals.zoomed=!1,this.ctx.updateHelpers.revertDefaultAxisMinMax()),this.ctx.updateHelpers._updateSeries(s,a.config.chart.animations.dynamicAnimation.enabled))}},{key:"emptyCollapsedSeries",value:function(e){for(var t=this.w,i=0;i-1&&(e[i].data=[]);return e}},{key:"highlightSeries",value:function(e){var t=this.w,i=this.getSeriesByName(e),a=parseInt(i.getAttribute("data:realIndex"),10),s=t.globals.dom.baseEl.querySelectorAll(".apexcharts-series, .apexcharts-datalabels, .apexcharts-yaxis"),r=null,n=null,o=null;if(t.globals.axisCharts||t.config.chart.type==="radialBar")if(t.globals.axisCharts){r=t.globals.dom.baseEl.querySelector(".apexcharts-series[data\\:realIndex='".concat(a,"']")),n=t.globals.dom.baseEl.querySelector(".apexcharts-datalabels[data\\:realIndex='".concat(a,"']"));var h=t.globals.seriesYAxisReverseMap[a];o=t.globals.dom.baseEl.querySelector(".apexcharts-yaxis[rel='".concat(h,"']"))}else r=t.globals.dom.baseEl.querySelector(".apexcharts-series[rel='".concat(a+1,"']"));else r=t.globals.dom.baseEl.querySelector(".apexcharts-series[rel='".concat(a+1,"'] path"));for(var c=0;c=h.from&&(g0&&arguments[0]!==void 0?arguments[0]:"asc",t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[],i=this.w,a=0;if(i.config.series.length>1){for(var s=i.config.series.map(function(n,o){return n.data&&n.data.length>0&&i.globals.collapsedSeriesIndices.indexOf(o)===-1&&(!i.globals.comboCharts||t.length===0||t.length&&t.indexOf(i.config.series[o].type)>-1)?o:-1}),r=e==="asc"?0:s.length-1;e==="asc"?r=0;e==="asc"?r++:r--)if(s[r]!==-1){a=s[r];break}}return a}},{key:"getBarSeriesIndices",value:function(){return this.w.globals.comboCharts?this.w.config.series.map(function(e,t){return e.type==="bar"||e.type==="column"?t:-1}).filter(function(e){return e!==-1}):this.w.config.series.map(function(e,t){return t})}},{key:"getPreviousPaths",value:function(){var e=this.w;function t(r,n,o){for(var h=r[n].childNodes,c={type:o,paths:[],realIndex:r[n].getAttribute("data:realIndex")},d=0;d0)for(var a=function(r){for(var n=e.globals.dom.baseEl.querySelectorAll(".apexcharts-".concat(e.config.chart.type," .apexcharts-series[data\\:realIndex='").concat(r,"'] rect")),o=[],h=function(d){var g=function(x){return n[d].getAttribute(x)},f={x:parseFloat(g("x")),y:parseFloat(g("y")),width:parseFloat(g("width")),height:parseFloat(g("height"))};o.push({rect:f,color:n[d].getAttribute("color")})},c=0;c0)for(var a=0;a0?t:[]});return e}}]),p}(),Ft=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w,this.twoDSeries=[],this.threeDSeries=[],this.twoDSeriesX=[],this.seriesGoals=[],this.coreUtils=new $(this.ctx)}return R(p,[{key:"isMultiFormat",value:function(){return this.isFormatXY()||this.isFormat2DArray()}},{key:"isFormatXY",value:function(){var e=this.w.config.series.slice(),t=new re(this.ctx);if(this.activeSeriesIndex=t.getActiveConfigSeriesIndex(),e[this.activeSeriesIndex].data!==void 0&&e[this.activeSeriesIndex].data.length>0&&e[this.activeSeriesIndex].data[0]!==null&&e[this.activeSeriesIndex].data[0].x!==void 0&&e[this.activeSeriesIndex].data[0]!==null)return!0}},{key:"isFormat2DArray",value:function(){var e=this.w.config.series.slice(),t=new re(this.ctx);if(this.activeSeriesIndex=t.getActiveConfigSeriesIndex(),e[this.activeSeriesIndex].data!==void 0&&e[this.activeSeriesIndex].data.length>0&&e[this.activeSeriesIndex].data[0]!==void 0&&e[this.activeSeriesIndex].data[0]!==null&&e[this.activeSeriesIndex].data[0].constructor===Array)return!0}},{key:"handleFormat2DArray",value:function(e,t){for(var i=this.w.config,a=this.w.globals,s=i.chart.type==="boxPlot"||i.series[t].type==="boxPlot",r=0;r=5?this.twoDSeries.push(P.parseNumber(e[t].data[r][4])):this.twoDSeries.push(P.parseNumber(e[t].data[r][1])),a.dataFormatXNumeric=!0),i.xaxis.type==="datetime"){var n=new Date(e[t].data[r][0]);n=new Date(n).getTime(),this.twoDSeriesX.push(n)}else this.twoDSeriesX.push(e[t].data[r][0]);for(var o=0;o-1&&(r=this.activeSeriesIndex);for(var n=0;n1&&arguments[1]!==void 0?arguments[1]:this.ctx,a=this.w.config,s=this.w.globals,r=new K(i),n=a.labels.length>0?a.labels.slice():a.xaxis.categories.slice();s.isRangeBar=a.chart.type==="rangeBar"&&s.isBarHorizontal,s.hasXaxisGroups=a.xaxis.type==="category"&&a.xaxis.group.groups.length>0,s.hasXaxisGroups&&(s.groups=a.xaxis.group.groups),e.forEach(function(f,x){f.name!==void 0?s.seriesNames.push(f.name):s.seriesNames.push("series-"+parseInt(x+1,10))}),this.coreUtils.setSeriesYAxisMappings();var o=[],h=te(new Set(a.series.map(function(f){return f.group})));a.series.forEach(function(f,x){var b=h.indexOf(f.group);o[b]||(o[b]=[]),o[b].push(s.seriesNames[x])}),s.seriesGroups=o;for(var c=function(){for(var f=0;f0&&(this.twoDSeriesX=n,s.seriesX.push(this.twoDSeriesX))),s.labels.push(this.twoDSeriesX);var g=e[d].data.map(function(f){return P.parseNumber(f)});s.series.push(g)}s.seriesZ.push(this.threeDSeries),e[d].color!==void 0?s.seriesColors.push(e[d].color):s.seriesColors.push(void 0)}return this.w}},{key:"parseDataNonAxisCharts",value:function(e){var t=this.w.globals,i=this.w.config;t.series=e.slice(),t.seriesNames=i.labels.slice();for(var a=0;a0?i.labels=t.xaxis.categories:t.labels.length>0?i.labels=t.labels.slice():this.fallbackToCategory?(i.labels=i.labels[0],i.seriesRange.length&&(i.seriesRange.map(function(a){a.forEach(function(s){i.labels.indexOf(s.x)<0&&s.x&&i.labels.push(s.x)})}),i.labels=Array.from(new Set(i.labels.map(JSON.stringify)),JSON.parse)),t.xaxis.convertedCatToNumeric&&(new Le(t).convertCatToNumericXaxis(t,this.ctx,i.seriesX[0]),this._generateExternalLabels(e))):this._generateExternalLabels(e)}},{key:"_generateExternalLabels",value:function(e){var t=this.w.globals,i=this.w.config,a=[];if(t.axisCharts){if(t.series.length>0)if(this.isFormatXY())for(var s=i.series.map(function(d,g){return d.data.filter(function(f,x,b){return b.findIndex(function(v){return v.x===f.x})===x})}),r=s.reduce(function(d,g,f,x){return x[d].length>g.length?d:f},0),n=0;n0&&s==i.length&&t.push(a)}),e.globals.ignoreYAxisIndexes=t.map(function(i){return i})}}]),p}(),He=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"scaleSvgNode",value:function(e,t){var i=parseFloat(e.getAttributeNS(null,"width")),a=parseFloat(e.getAttributeNS(null,"height"));e.setAttributeNS(null,"width",i*t),e.setAttributeNS(null,"height",a*t),e.setAttributeNS(null,"viewBox","0 0 "+i+" "+a)}},{key:"getSvgString",value:function(){var e=this;return new Promise(function(t){var i=e.w,a=i.config.chart.toolbar.export.width,s=i.config.chart.toolbar.export.scale||a/i.globals.svgWidth;s||(s=1);var r=e.w.globals.dom.Paper.svg(),n=e.w.globals.dom.Paper.node.cloneNode(!0);s!==1&&e.scaleSvgNode(n,s),e.convertImagesToBase64(n).then(function(){r=new XMLSerializer().serializeToString(n),t(r.replace(/ /g," "))})})}},{key:"convertImagesToBase64",value:function(e){var t=this,i=e.getElementsByTagName("image"),a=Array.from(i).map(function(s){var r=s.getAttributeNS("http://www.w3.org/1999/xlink","href");return r&&!r.startsWith("data:")?t.getBase64FromUrl(r).then(function(n){s.setAttributeNS("http://www.w3.org/1999/xlink","href",n)}).catch(function(n){console.error("Error converting image to base64:",n)}):Promise.resolve()});return Promise.all(a)}},{key:"getBase64FromUrl",value:function(e){return new Promise(function(t,i){var a=new Image;a.crossOrigin="Anonymous",a.onload=function(){var s=document.createElement("canvas");s.width=a.width,s.height=a.height,s.getContext("2d").drawImage(a,0,0),t(s.toDataURL())},a.onerror=i,a.src=e})}},{key:"cleanup",value:function(){var e=this.w,t=e.globals.dom.baseEl.getElementsByClassName("apexcharts-xcrosshairs"),i=e.globals.dom.baseEl.getElementsByClassName("apexcharts-ycrosshairs"),a=e.globals.dom.baseEl.querySelectorAll(".apexcharts-zoom-rect, .apexcharts-selection-rect");Array.prototype.forEach.call(a,function(s){s.setAttribute("width",0)}),t&&t[0]&&(t[0].setAttribute("x",-500),t[0].setAttribute("x1",-500),t[0].setAttribute("x2",-500)),i&&i[0]&&(i[0].setAttribute("y",-100),i[0].setAttribute("y1",-100),i[0].setAttribute("y2",-100))}},{key:"svgUrl",value:function(){var e=this;return new Promise(function(t){e.cleanup(),e.getSvgString().then(function(i){var a=new Blob([i],{type:"image/svg+xml;charset=utf-8"});t(URL.createObjectURL(a))})})}},{key:"dataURI",value:function(e){var t=this;return new Promise(function(i){var a=t.w,s=e?e.scale||e.width/a.globals.svgWidth:1;t.cleanup();var r=document.createElement("canvas");r.width=a.globals.svgWidth*s,r.height=parseInt(a.globals.dom.elWrap.style.height,10)*s;var n=a.config.chart.background!=="transparent"&&a.config.chart.background?a.config.chart.background:"#fff",o=r.getContext("2d");o.fillStyle=n,o.fillRect(0,0,r.width*s,r.height*s),t.getSvgString().then(function(h){var c="data:image/svg+xml,"+encodeURIComponent(h),d=new Image;d.crossOrigin="anonymous",d.onload=function(){if(o.drawImage(d,0,0),r.msToBlob){var g=r.msToBlob();i({blob:g})}else{var f=r.toDataURL("image/png");i({imgURI:f})}},d.src=c})})}},{key:"exportToSVG",value:function(){var e=this;this.svgUrl().then(function(t){e.triggerDownload(t,e.w.config.chart.toolbar.export.svg.filename,".svg")})}},{key:"exportToPng",value:function(){var e=this,t=this.w.config.chart.toolbar.export.scale,i=this.w.config.chart.toolbar.export.width,a=t?{scale:t}:i?{width:i}:void 0;this.dataURI(a).then(function(s){var r=s.imgURI,n=s.blob;n?navigator.msSaveOrOpenBlob(n,e.w.globals.chartID+".png"):e.triggerDownload(r,e.w.config.chart.toolbar.export.png.filename,".png")})}},{key:"exportToCSV",value:function(e){var t=this,i=e.series,a=e.fileName,s=e.columnDelimiter,r=s===void 0?",":s,n=e.lineDelimiter,o=n===void 0?` +`:n,h=this.w;i||(i=h.config.series);var c,d,g=[],f=[],x="",b=h.globals.series.map(function(k,S){return h.globals.collapsedSeriesIndices.indexOf(S)===-1?k:[]}),v=function(k){return typeof h.config.chart.toolbar.export.csv.categoryFormatter=="function"?h.config.chart.toolbar.export.csv.categoryFormatter(k):h.config.xaxis.type==="datetime"&&String(k).length>=10?new Date(k).toDateString():P.isNumber(k)?k:k.split(r).join("")},y=function(k){return typeof h.config.chart.toolbar.export.csv.valueFormatter=="function"?h.config.chart.toolbar.export.csv.valueFormatter(k):k},w=Math.max.apply(Math,te(i.map(function(k){return k.data?k.data.length:0}))),l=new Ft(this.ctx),u=new ge(this.ctx),m=function(k){var S="";if(h.globals.axisCharts){if(h.config.xaxis.type==="category"||h.config.xaxis.convertedCatToNumeric)if(h.globals.isBarHorizontal){var L=h.globals.yLabelFormatters[0],C=new re(t.ctx).getActiveConfigSeriesIndex();S=L(h.globals.labels[k],{seriesIndex:C,dataPointIndex:k,w:h})}else S=u.getLabel(h.globals.labels,h.globals.timescaleLabels,0,k).text;h.config.xaxis.type==="datetime"&&(h.config.xaxis.categories.length?S=h.config.xaxis.categories[k]:h.config.labels.length&&(S=h.config.labels[k]))}else S=h.config.labels[k];return S===null?"nullvalue":(Array.isArray(S)&&(S=S.join(" ")),P.isNumber(S)?S:S.split(r).join(""))},A=function(k,S){if(g.length&&S===0&&f.push(g.join(r)),k.data){k.data=k.data.length&&k.data||te(Array(w)).map(function(){return""});for(var L=0;L0&&!i.globals.isBarHorizontal&&(this.xaxisLabels=i.globals.timescaleLabels.slice()),i.config.xaxis.overwriteCategories&&(this.xaxisLabels=i.config.xaxis.overwriteCategories),this.drawnLabels=[],this.drawnLabelsRects=[],i.config.xaxis.position==="top"?this.offY=0:this.offY=i.globals.gridHeight,this.offY=this.offY+i.config.xaxis.axisBorder.offsetY,this.isCategoryBarHorizontal=i.config.chart.type==="bar"&&i.config.plotOptions.bar.horizontal,this.xaxisFontSize=i.config.xaxis.labels.style.fontSize,this.xaxisFontFamily=i.config.xaxis.labels.style.fontFamily,this.xaxisForeColors=i.config.xaxis.labels.style.colors,this.xaxisBorderWidth=i.config.xaxis.axisBorder.width,this.isCategoryBarHorizontal&&(this.xaxisBorderWidth=i.config.yaxis[0].axisBorder.width.toString()),this.xaxisBorderWidth.indexOf("%")>-1?this.xaxisBorderWidth=i.globals.gridWidth*parseInt(this.xaxisBorderWidth,10)/100:this.xaxisBorderWidth=parseInt(this.xaxisBorderWidth,10),this.xaxisBorderHeight=i.config.xaxis.axisBorder.height,this.yaxis=i.config.yaxis[0]}return R(p,[{key:"drawXaxis",value:function(){var e=this.w,t=new X(this.ctx),i=t.group({class:"apexcharts-xaxis",transform:"translate(".concat(e.config.xaxis.offsetX,", ").concat(e.config.xaxis.offsetY,")")}),a=t.group({class:"apexcharts-xaxis-texts-g",transform:"translate(".concat(e.globals.translateXAxisX,", ").concat(e.globals.translateXAxisY,")")});i.add(a);for(var s=[],r=0;r6&&arguments[6]!==void 0?arguments[6]:{},c=[],d=[],g=this.w,f=h.xaxisFontSize||this.xaxisFontSize,x=h.xaxisFontFamily||this.xaxisFontFamily,b=h.xaxisForeColors||this.xaxisForeColors,v=h.fontWeight||g.config.xaxis.labels.style.fontWeight,y=h.cssClass||g.config.xaxis.labels.style.cssClass,w=g.globals.padHorizontal,l=a.length,u=g.config.xaxis.type==="category"?g.globals.dataPoints:l;if(u===0&&l>u&&(u=l),s){var m=u>1?u-1:u;n=g.globals.gridWidth/Math.min(m,l-1),w=w+r(0,n)/2+g.config.xaxis.labels.offsetX}else n=g.globals.gridWidth/u,w=w+r(0,n)+g.config.xaxis.labels.offsetX;for(var A=function(S){var L=w-r(S,n)/2+g.config.xaxis.labels.offsetX;S===0&&l===1&&n/2===w&&u===1&&(L=g.globals.gridWidth/2);var C=o.axesUtils.getLabel(a,g.globals.timescaleLabels,L,S,c,f,e),I=28;if(g.globals.rotateXLabels&&e&&(I=22),g.config.xaxis.title.text&&g.config.xaxis.position==="top"&&(I+=parseFloat(g.config.xaxis.title.style.fontSize)+2),e||(I=I+parseFloat(f)+(g.globals.xAxisLabelsHeight-g.globals.xAxisGroupLabelsHeight)+(g.globals.rotateXLabels?10:0)),C=g.config.xaxis.tickAmount!==void 0&&g.config.xaxis.tickAmount!=="dataPoints"&&g.config.xaxis.type!=="datetime"?o.axesUtils.checkLabelBasedOnTickamount(S,C,l):o.axesUtils.checkForOverflowingLabels(S,C,l,c,d),g.config.xaxis.labels.show){var z=t.drawText({x:C.x,y:o.offY+g.config.xaxis.labels.offsetY+I-(g.config.xaxis.position==="top"?g.globals.xAxisHeight+g.config.xaxis.axisTicks.height-2:0),text:C.text,textAnchor:"middle",fontWeight:C.isBold?600:v,fontSize:f,fontFamily:x,foreColor:Array.isArray(b)?e&&g.config.xaxis.convertedCatToNumeric?b[g.globals.minX+S-1]:b[S]:b,isPlainText:!1,cssClass:(e?"apexcharts-xaxis-label ":"apexcharts-xaxis-group-label ")+y});if(i.add(z),z.on("click",function(T){if(typeof g.config.chart.events.xAxisLabelClick=="function"){var E=Object.assign({},g,{labelIndex:S});g.config.chart.events.xAxisLabelClick(T,o.ctx,E)}}),e){var M=document.createElementNS(g.globals.SVGNS,"title");M.textContent=Array.isArray(C.text)?C.text.join(" "):C.text,z.node.appendChild(M),C.text!==""&&(c.push(C.text),d.push(C))}}Sa.globals.gridWidth)){var r=this.offY+a.config.xaxis.axisTicks.offsetY;if(t=t+r+a.config.xaxis.axisTicks.height,a.config.xaxis.position==="top"&&(t=r-a.config.xaxis.axisTicks.height),a.config.xaxis.axisTicks.show){var n=new X(this.ctx).drawLine(e+a.config.xaxis.axisTicks.offsetX,r+a.config.xaxis.offsetY,s+a.config.xaxis.axisTicks.offsetX,t+a.config.xaxis.offsetY,a.config.xaxis.axisTicks.color);i.add(n),n.node.classList.add("apexcharts-xaxis-tick")}}}},{key:"getXAxisTicksPositions",value:function(){var e=this.w,t=[],i=this.xaxisLabels.length,a=e.globals.padHorizontal;if(e.globals.timescaleLabels.length>0)for(var s=0;s0){var c=s[s.length-1].getBBox(),d=s[0].getBBox();c.x<-20&&s[s.length-1].parentNode.removeChild(s[s.length-1]),d.x+d.width>e.globals.gridWidth&&!e.globals.isBarHorizontal&&s[0].parentNode.removeChild(s[0]);for(var g=0;g0&&(this.xaxisLabels=t.globals.timescaleLabels.slice())}return R(p,[{key:"drawGridArea",value:function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:null,t=this.w,i=new X(this.ctx);e===null&&(e=i.group({class:"apexcharts-grid"}));var a=i.drawLine(t.globals.padHorizontal,1,t.globals.padHorizontal,t.globals.gridHeight,"transparent"),s=i.drawLine(t.globals.padHorizontal,t.globals.gridHeight,t.globals.gridWidth,t.globals.gridHeight,"transparent");return e.add(s),e.add(a),e}},{key:"drawGrid",value:function(){var e=null;return this.w.globals.axisCharts&&(e=this.renderGrid(),this.drawGridArea(e.el)),e}},{key:"createGridMask",value:function(){var e=this.w,t=e.globals,i=new X(this.ctx),a=Array.isArray(e.config.stroke.width)?0:e.config.stroke.width;if(Array.isArray(e.config.stroke.width)){var s=0;e.config.stroke.width.forEach(function(d){s=Math.max(s,d)}),a=s}t.dom.elGridRectMask=document.createElementNS(t.SVGNS,"clipPath"),t.dom.elGridRectMask.setAttribute("id","gridRectMask".concat(t.cuid)),t.dom.elGridRectMarkerMask=document.createElementNS(t.SVGNS,"clipPath"),t.dom.elGridRectMarkerMask.setAttribute("id","gridRectMarkerMask".concat(t.cuid)),t.dom.elForecastMask=document.createElementNS(t.SVGNS,"clipPath"),t.dom.elForecastMask.setAttribute("id","forecastMask".concat(t.cuid)),t.dom.elNonForecastMask=document.createElementNS(t.SVGNS,"clipPath"),t.dom.elNonForecastMask.setAttribute("id","nonForecastMask".concat(t.cuid));var r=e.config.chart.type,n=0,o=0;(r==="bar"||r==="rangeBar"||r==="candlestick"||r==="boxPlot"||e.globals.comboBarCount>0)&&e.globals.isXNumeric&&!e.globals.isBarHorizontal&&(n=e.config.grid.padding.left,o=e.config.grid.padding.right,t.barPadForNumericAxis>n&&(n=t.barPadForNumericAxis,o=t.barPadForNumericAxis)),t.dom.elGridRect=i.drawRect(-a/2-n-2,-a/2-2,t.gridWidth+a+o+n+4,t.gridHeight+a+4,0,"#fff");var h=e.globals.markers.largestSize+1;t.dom.elGridRectMarker=i.drawRect(2*-h,2*-h,t.gridWidth+4*h,t.gridHeight+4*h,0,"#fff"),t.dom.elGridRectMask.appendChild(t.dom.elGridRect.node),t.dom.elGridRectMarkerMask.appendChild(t.dom.elGridRectMarker.node);var c=t.dom.baseEl.querySelector("defs");c.appendChild(t.dom.elGridRectMask),c.appendChild(t.dom.elForecastMask),c.appendChild(t.dom.elNonForecastMask),c.appendChild(t.dom.elGridRectMarkerMask)}},{key:"_drawGridLines",value:function(e){var t=e.i,i=e.x1,a=e.y1,s=e.x2,r=e.y2,n=e.xCount,o=e.parent,h=this.w;if(!(t===0&&h.globals.skipFirstTimelinelabel||t===n-1&&h.globals.skipLastTimelinelabel&&!h.config.xaxis.labels.formatter||h.config.chart.type==="radar")){h.config.grid.xaxis.lines.show&&this._drawGridLine({i:t,x1:i,y1:a,x2:s,y2:r,xCount:n,parent:o});var c=0;if(h.globals.hasXaxisGroups&&h.config.xaxis.tickPlacement==="between"){var d=h.globals.groups;if(d){for(var g=0,f=0;g0&&e.config.xaxis.type!=="datetime"&&(s=t.yAxisScale[a].result.length-1)),this._drawXYLines({xCount:s,tickAmount:r})}else s=r,r=t.xTickAmount,this._drawInvertedXYLines({xCount:s,tickAmount:r});return this.drawGridBands(s,r),{el:this.elg,elGridBorders:this.elGridBorders,xAxisTickWidth:t.gridWidth/s}}},{key:"drawGridBands",value:function(e,t){var i=this.w;if(i.config.grid.row.colors!==void 0&&i.config.grid.row.colors.length>0)for(var a=0,s=i.globals.gridHeight/t,r=i.globals.gridWidth,n=0,o=0;n=i.config.grid.row.colors.length&&(o=0),this._drawGridBandRect({c:o,x1:0,y1:a,x2:r,y2:s,type:"row"}),a+=i.globals.gridHeight/t;if(i.config.grid.column.colors!==void 0&&i.config.grid.column.colors.length>0){var h=i.globals.isBarHorizontal||i.config.xaxis.tickPlacement!=="on"||i.config.xaxis.type!=="category"&&!i.config.xaxis.convertedCatToNumeric?e:e-1;i.globals.isXNumeric&&(h=i.globals.xAxisScale.result.length-1);for(var c=i.globals.padHorizontal,d=i.globals.padHorizontal+i.globals.gridWidth/h,g=i.globals.gridHeight,f=0,x=0;f=i.config.grid.column.colors.length&&(x=0),i.config.xaxis.type==="datetime"&&(c=this.xaxisLabels[f].position,d=(((b=this.xaxisLabels[f+1])===null||b===void 0?void 0:b.position)||i.globals.gridWidth)-this.xaxisLabels[f].position),this._drawGridBandRect({c:x,x1:c,y1:0,x2:d,y2:g,type:"column"}),c+=i.globals.gridWidth/h}}}}]),p}(),Ot=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"niceScale",value:function(e,t){var i,a,s,r,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,o=1e-11,h=this.w,c=h.globals;c.isBarHorizontal?(i=h.config.xaxis,a=Math.max((c.svgWidth-100)/25,2)):(i=h.config.yaxis[n],a=Math.max((c.svgHeight-100)/15,2)),P.isNumber(a)||(a=10),s=i.min!==void 0&&i.min!==null,r=i.max!==void 0&&i.min!==null;var d=i.stepSize!==void 0&&i.stepSize!==null,g=i.tickAmount!==void 0&&i.tickAmount!==null,f=g?i.tickAmount:c.niceScaleDefaultTicks[Math.min(Math.round(a/2),c.niceScaleDefaultTicks.length-1)];if(c.isMultipleYAxis&&!g&&c.multiAxisTickAmount>0&&(f=c.multiAxisTickAmount,g=!0),f=f==="dataPoints"?c.dataPoints-1:Math.abs(Math.round(f)),(e===Number.MIN_VALUE&&t===0||!P.isNumber(e)&&!P.isNumber(t)||e===Number.MIN_VALUE&&t===-Number.MAX_VALUE)&&(e=P.isNumber(i.min)?i.min:0,t=P.isNumber(i.max)?i.max:e+f,c.allSeriesCollapsed=!1),e>t){console.warn("axis.min cannot be greater than axis.max: swapping min and max");var x=t;t=e,e=x}else e===t&&(e=e===0?0:e-1,t=t===0?2:t+1);var b=[];f<1&&(f=1);var v=f,y=Math.abs(t-e);!s&&e>0&&e/y<.15&&(e=0,s=!0),!r&&t<0&&-t/y<.15&&(t=0,r=!0);var w=(y=Math.abs(t-e))/v,l=w,u=Math.floor(Math.log10(l)),m=Math.pow(10,u),A=Math.ceil(l/m);if(w=l=(A=c.niceScaleAllowedMagMsd[c.yValueDecimal===0?0:1][A])*m,c.isBarHorizontal&&i.stepSize&&i.type!=="datetime"?(w=i.stepSize,d=!0):d&&(w=i.stepSize),d&&i.forceNiceScale){var k=Math.floor(Math.log10(w));w*=Math.pow(10,u-k)}if(s&&r){var S=y/v;if(g)if(d)if(P.mod(y,w)!=0){var L=P.getGCD(w,S);w=S/L<10?L:S}else P.mod(w,S)==0?w=S:(S=w,g=!1);else w=S;else if(d)P.mod(y,w)==0?S=w:w=S;else if(P.mod(y,w)==0)S=w;else{S=y/(v=Math.ceil(y/w));var C=P.getGCD(y,w);y/Ca&&(e=t-w*f,e+=w*Math.floor((I-e)/w))}else if(s)if(g)t=e+w*v;else{var z=t;t=w*Math.ceil(t/w),Math.abs(t-e)/P.getGCD(y,w)>a&&(t=e+w*f,t+=w*Math.ceil((z-t)/w))}}else if(c.isMultipleYAxis&&g){var M=w*Math.floor(e/w),T=M+w*v;T0&&e16&&P.getPrimeFactors(v).length<2&&v++,!g&&i.forceNiceScale&&c.yValueDecimal===0&&v>y&&(v=y,w=Math.round(y/v)),v>a&&(!g&&!d||i.forceNiceScale)){var E=P.getPrimeFactors(v),O=E.length-1,D=v;e:for(var H=0;Hse);return{result:b,niceMin:b[0],niceMax:b[b.length-1]}}},{key:"linearScale",value:function(e,t){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:10,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,s=arguments.length>4&&arguments[4]!==void 0?arguments[4]:void 0,r=Math.abs(t-e),n=[];if(e===t)return{result:n=[e],niceMin:n[0],niceMax:n[n.length-1]};(i=this._adjustTicksForSmallRange(i,a,r))==="dataPoints"&&(i=this.w.globals.dataPoints-1),s||(s=r/i),s=Math.round(10*(s+Number.EPSILON))/10,i===Number.MAX_VALUE&&(i=5,s=1);for(var o=e;i>=0;)n.push(o),o=P.preciseAddition(o,s),i-=1;return{result:n,niceMin:n[0],niceMax:n[n.length-1]}}},{key:"logarithmicScaleNice",value:function(e,t,i){t<=0&&(t=Math.max(e,i)),e<=0&&(e=Math.min(t,i));for(var a=[],s=Math.ceil(Math.log(t)/Math.log(i)+1),r=Math.floor(Math.log(e)/Math.log(i));r5?(a.allSeriesCollapsed=!1,a.yAxisScale[e]=r.forceNiceScale?this.logarithmicScaleNice(t,i,r.logBase):this.logarithmicScale(t,i,r.logBase)):i!==-Number.MAX_VALUE&&P.isNumber(i)&&t!==Number.MAX_VALUE&&P.isNumber(t)?(a.allSeriesCollapsed=!1,a.yAxisScale[e]=this.niceScale(t,i,e)):a.yAxisScale[e]=this.niceScale(Number.MIN_VALUE,0,e)}},{key:"setXScale",value:function(e,t){var i=this.w,a=i.globals,s=Math.abs(t-e);if(t!==-Number.MAX_VALUE&&P.isNumber(t)){var r=a.xTickAmount+1;s<10&&s>1&&(r=s),a.xAxisScale=this.linearScale(e,t,r,0,i.config.xaxis.stepSize)}else a.xAxisScale=this.linearScale(0,10,10);return a.xAxisScale}},{key:"setSeriesYAxisMappings",value:function(){var e=this.w.globals,t=this.w.config,i=[],a=[],s=[],r=e.series.length>t.yaxis.length||t.yaxis.some(function(d){return Array.isArray(d.seriesName)});t.series.forEach(function(d,g){s.push(g),a.push(null)}),t.yaxis.forEach(function(d,g){i[g]=[]});var n=[];t.yaxis.forEach(function(d,g){var f=!1;if(d.seriesName){var x=[];Array.isArray(d.seriesName)?x=d.seriesName:x.push(d.seriesName),x.forEach(function(b){t.series.forEach(function(v,y){if(v.name===b){var w=y;g===y||r?!r||s.indexOf(y)>-1?i[g].push([g,y]):console.warn("Series '"+v.name+"' referenced more than once in what looks like the new style. That is, when using either seriesName: [], or when there are more series than yaxes."):(i[y].push([y,g]),w=g),f=!0,(w=s.indexOf(w))!==-1&&s.splice(w,1)}})})}f||n.push(g)}),i=i.map(function(d,g){var f=[];return d.forEach(function(x){a[x[1]]=x[0],f.push(x[1])}),f});for(var o=t.yaxis.length-1,h=0;h0?function(){var c,d,g=Number.MAX_VALUE,f=-Number.MAX_VALUE,x=g,b=f;if(t.chart.stacked)(function(){var w=i.seriesX[n[0]],l=[],u=[],m=[];h.forEach(function(){l.push(w.map(function(){return Number.MIN_VALUE})),u.push(w.map(function(){return Number.MIN_VALUE})),m.push(w.map(function(){return Number.MIN_VALUE}))});for(var A=function(S){!c&&t.series[n[S]].type&&(c=t.series[n[S]].type);var L=n[S];d=t.series[L].group?t.series[L].group:"axis-".concat(o),!(i.collapsedSeriesIndices.indexOf(L)<0&&i.ancillaryCollapsedSeriesIndices.indexOf(L)<0)||(i.allSeriesCollapsed=!1,h.forEach(function(C,I){if(t.series[L].group===C)for(var z=0;z=0?u[I][z]+=M:m[I][z]+=M,l[I][z]+=M,x=Math.min(x,M),b=Math.max(b,M)}})),c!=="bar"&&c!=="column"||i.barGroups.push(d)},k=0;k1&&arguments[1]!==void 0?arguments[1]:Number.MAX_VALUE,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:-Number.MAX_VALUE,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:null,s=this.w.config,r=this.w.globals,n=-Number.MAX_VALUE,o=Number.MIN_VALUE;a===null&&(a=e+1);var h=r.series,c=h,d=h;s.chart.type==="candlestick"?(c=r.seriesCandleL,d=r.seriesCandleH):s.chart.type==="boxPlot"?(c=r.seriesCandleO,d=r.seriesCandleC):r.isRangeData&&(c=r.seriesRangeStart,d=r.seriesRangeEnd);var g=!1;if(r.seriesX.length>=a){var f,x=(f=r.brushSource)===null||f===void 0?void 0:f.w.config.chart.brush;(s.chart.zoom.enabled&&s.chart.zoom.autoScaleYaxis||x!=null&&x.enabled&&x!=null&&x.autoScaleYaxis)&&(g=!0)}for(var b=e;by&&r.seriesX[b][w]>s.xaxis.max;w--);}for(var l=y;l<=w&&lc[b][l]&&c[b][l]<0&&(o=c[b][l])}else r.hasNullValues=!0}v!=="bar"&&v!=="column"||(o<0&&n<0&&(n=0,i=Math.max(i,0)),o===Number.MIN_VALUE&&(o=0,t=Math.min(t,0)))}return s.chart.type==="rangeBar"&&r.seriesRangeStart.length&&r.isBarHorizontal&&(o=t),s.chart.type==="bar"&&(o<0&&n<0&&(n=0),o===Number.MIN_VALUE&&(o=0)),{minY:o,maxY:n,lowestY:t,highestY:i}}},{key:"setYRange",value:function(){var e=this.w.globals,t=this.w.config;e.maxY=-Number.MAX_VALUE,e.minY=Number.MIN_VALUE;var i,a=Number.MAX_VALUE;if(e.isMultipleYAxis){a=Number.MAX_VALUE;for(var s=0;se.dataPoints&&e.dataPoints!==0&&(a=e.dataPoints-1);else if(t.xaxis.tickAmount==="dataPoints"){if(e.series.length>1&&(a=e.series[e.maxValsInArrayIndex].length-1),e.isXNumeric){var s=e.maxX-e.minX;s<30&&(a=s-1)}}else a=t.xaxis.tickAmount;if(e.xTickAmount=a,t.xaxis.max!==void 0&&typeof t.xaxis.max=="number"&&(e.maxX=t.xaxis.max),t.xaxis.min!==void 0&&typeof t.xaxis.min=="number"&&(e.minX=t.xaxis.min),t.xaxis.range!==void 0&&(e.minX=e.maxX-t.xaxis.range),e.minX!==Number.MAX_VALUE&&e.maxX!==-Number.MAX_VALUE)if(t.xaxis.convertedCatToNumeric&&!e.dataFormatXNumeric){for(var r=[],n=e.minX-1;n0&&(e.xAxisScale=this.scales.linearScale(1,e.labels.length,a-1,0,t.xaxis.stepSize),e.seriesX=e.labels.slice());i&&(e.labels=e.xAxisScale.result.slice())}return e.isBarHorizontal&&e.labels.length&&(e.xTickAmount=e.labels.length),this._handleSingleDataPoint(),this._getMinXDiff(),{minX:e.minX,maxX:e.maxX}}},{key:"setZRange",value:function(){var e=this.w.globals;if(e.isDataXYZ){for(var t=0;t0){var n=s-a[r-1];n>0&&(e.minXDiff=Math.min(n,e.minXDiff))}}),e.dataPoints!==1&&e.minXDiff!==Number.MAX_VALUE||(e.minXDiff=.5)})}},{key:"_setStackedMinMax",value:function(){var e=this,t=this.w.globals;if(t.series.length){var i=t.seriesGroups;i.length||(i=[this.w.globals.seriesNames.map(function(r){return r})]);var a={},s={};i.forEach(function(r){a[r]=[],s[r]=[],e.w.config.series.map(function(n,o){return r.indexOf(t.seriesNames[o])>-1?o:null}).filter(function(n){return n!==null}).forEach(function(n){for(var o=0;o0?a[r][o]+=parseFloat(t.series[n][o])+1e-4:s[r][o]+=parseFloat(t.series[n][o]))}})}),Object.entries(a).forEach(function(r){var n=It(r,1)[0];a[n].forEach(function(o,h){t.maxY=Math.max(t.maxY,a[n][h]),t.minY=Math.min(t.minY,s[n][h])})})}}}]),p}(),lt=function(){function p(e,t){F(this,p),this.ctx=e,this.elgrid=t,this.w=e.w;var i=this.w;this.xaxisFontSize=i.config.xaxis.labels.style.fontSize,this.axisFontFamily=i.config.xaxis.labels.style.fontFamily,this.xaxisForeColors=i.config.xaxis.labels.style.colors,this.isCategoryBarHorizontal=i.config.chart.type==="bar"&&i.config.plotOptions.bar.horizontal,this.xAxisoffX=0,i.config.xaxis.position==="bottom"&&(this.xAxisoffX=i.globals.gridHeight),this.drawnLabels=[],this.axesUtils=new ge(e)}return R(p,[{key:"drawYaxis",value:function(e){var t=this,i=this.w,a=new X(this.ctx),s=i.config.yaxis[e].labels.style,r=s.fontSize,n=s.fontFamily,o=s.fontWeight,h=a.group({class:"apexcharts-yaxis",rel:e,transform:"translate("+i.globals.translateYAxisX[e]+", 0)"});if(this.axesUtils.isYAxisHidden(e))return h;var c=a.group({class:"apexcharts-yaxis-texts-g"});h.add(c);var d=i.globals.yAxisScale[e].result.length-1,g=i.globals.gridHeight/d,f=i.globals.yLabelFormatters[e],x=i.globals.yAxisScale[e].result.slice();x=this.axesUtils.checkForReversedLabels(e,x);var b="";if(i.config.yaxis[e].labels.show){var v=i.globals.translateY+i.config.yaxis[e].labels.offsetY;i.globals.isBarHorizontal?v=0:i.config.chart.type==="heatmap"&&(v-=g/2),v+=parseInt(i.config.yaxis[e].labels.style.fontSize,10)/3;for(var y=function(L){var C=x[L];C=f(C,L,i);var I=i.config.yaxis[e].labels.padding;i.config.yaxis[e].opposite&&i.config.yaxis.length!==0&&(I*=-1);var z="end";i.config.yaxis[e].opposite&&(z="start"),i.config.yaxis[e].labels.align==="left"?z="start":i.config.yaxis[e].labels.align==="center"?z="middle":i.config.yaxis[e].labels.align==="right"&&(z="end");var M=t.axesUtils.getYAxisForeColor(s.colors,e),T=P.listToArray(i.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxis[rel='".concat(e,"'] .apexcharts-yaxis-label tspan"))).map(function(W){return W.textContent}),E=a.drawText({x:I,y:v,text:T.indexOf(C)>=0?"":C,textAnchor:z,fontSize:r,fontFamily:n,fontWeight:o,maxWidth:i.config.yaxis[e].labels.maxWidth,foreColor:Array.isArray(M)?M[L]:M,isPlainText:!1,cssClass:"apexcharts-yaxis-label "+s.cssClass});L===d&&(b=E),c.add(E);var O=document.createElementNS(i.globals.SVGNS,"title");if(O.textContent=Array.isArray(C)?C.join(" "):C,E.node.appendChild(O),i.config.yaxis[e].labels.rotate!==0){var D=a.rotateAroundCenter(b.node),H=a.rotateAroundCenter(E.node);E.node.setAttribute("transform","rotate(".concat(i.config.yaxis[e].labels.rotate," ").concat(D.x," ").concat(H.y,")"))}v+=g},w=d;w>=0;w--)y(w)}if(i.config.yaxis[e].title.text!==void 0){var l=a.group({class:"apexcharts-yaxis-title"}),u=0;i.config.yaxis[e].opposite&&(u=i.globals.translateYAxisX[e]);var m=a.drawText({x:u,y:i.globals.gridHeight/2+i.globals.translateY+i.config.yaxis[e].title.offsetY,text:i.config.yaxis[e].title.text,textAnchor:"end",foreColor:i.config.yaxis[e].title.style.color,fontSize:i.config.yaxis[e].title.style.fontSize,fontWeight:i.config.yaxis[e].title.style.fontWeight,fontFamily:i.config.yaxis[e].title.style.fontFamily,cssClass:"apexcharts-yaxis-title-text "+i.config.yaxis[e].title.style.cssClass});l.add(m),h.add(l)}var A=i.config.yaxis[e].axisBorder,k=31+A.offsetX;if(i.config.yaxis[e].opposite&&(k=-31-A.offsetX),A.show){var S=a.drawLine(k,i.globals.translateY+A.offsetY-2,k,i.globals.gridHeight+i.globals.translateY+A.offsetY+2,A.color,0,A.width);h.add(S)}return i.config.yaxis[e].axisTicks.show&&this.axesUtils.drawYAxisTicks(k,d,A,i.config.yaxis[e].axisTicks,e,g,h),h}},{key:"drawYaxisInversed",value:function(e){var t=this.w,i=new X(this.ctx),a=i.group({class:"apexcharts-xaxis apexcharts-yaxis-inversed"}),s=i.group({class:"apexcharts-xaxis-texts-g",transform:"translate(".concat(t.globals.translateXAxisX,", ").concat(t.globals.translateXAxisY,")")});a.add(s);var r=t.globals.yAxisScale[e].result.length-1,n=t.globals.gridWidth/r+.1,o=n+t.config.xaxis.labels.offsetX,h=t.globals.xLabelFormatter,c=t.globals.yAxisScale[e].result.slice(),d=t.globals.timescaleLabels;d.length>0&&(this.xaxisLabels=d.slice(),r=(c=d.slice()).length),c=this.axesUtils.checkForReversedLabels(e,c);var g=d.length;if(t.config.xaxis.labels.show)for(var f=g?0:r;g?f=0;g?f++:f--){var x=c[f];x=h(x,f,t);var b=t.globals.gridWidth+t.globals.padHorizontal-(o-n+t.config.xaxis.labels.offsetX);if(d.length){var v=this.axesUtils.getLabel(c,d,b,f,this.drawnLabels,this.xaxisFontSize);b=v.x,x=v.text,this.drawnLabels.push(v.text),f===0&&t.globals.skipFirstTimelinelabel&&(x=""),f===c.length-1&&t.globals.skipLastTimelinelabel&&(x="")}var y=i.drawText({x:b,y:this.xAxisoffX+t.config.xaxis.labels.offsetY+30-(t.config.xaxis.position==="top"?t.globals.xAxisHeight+t.config.xaxis.axisTicks.height-2:0),text:x,textAnchor:"middle",foreColor:Array.isArray(this.xaxisForeColors)?this.xaxisForeColors[e]:this.xaxisForeColors,fontSize:this.xaxisFontSize,fontFamily:this.xaxisFontFamily,fontWeight:t.config.xaxis.labels.style.fontWeight,isPlainText:!1,cssClass:"apexcharts-xaxis-label "+t.config.xaxis.labels.style.cssClass});s.add(y),y.tspan(x);var w=document.createElementNS(t.globals.SVGNS,"title");w.textContent=x,y.node.appendChild(w),o+=n}return this.inversedYAxisTitleText(a),this.inversedYAxisBorder(a),a}},{key:"inversedYAxisBorder",value:function(e){var t=this.w,i=new X(this.ctx),a=t.config.xaxis.axisBorder;if(a.show){var s=0;t.config.chart.type==="bar"&&t.globals.isXNumeric&&(s-=15);var r=i.drawLine(t.globals.padHorizontal+s+a.offsetX,this.xAxisoffX,t.globals.gridWidth,this.xAxisoffX,a.color,0,a.height);this.elgrid&&this.elgrid.elGridBorders&&t.config.grid.show?this.elgrid.elGridBorders.add(r):e.add(r)}}},{key:"inversedYAxisTitleText",value:function(e){var t=this.w,i=new X(this.ctx);if(t.config.xaxis.title.text!==void 0){var a=i.group({class:"apexcharts-xaxis-title apexcharts-yaxis-title-inversed"}),s=i.drawText({x:t.globals.gridWidth/2+t.config.xaxis.title.offsetX,y:this.xAxisoffX+parseFloat(this.xaxisFontSize)+parseFloat(t.config.xaxis.title.style.fontSize)+t.config.xaxis.title.offsetY+20,text:t.config.xaxis.title.text,textAnchor:"middle",fontSize:t.config.xaxis.title.style.fontSize,fontFamily:t.config.xaxis.title.style.fontFamily,fontWeight:t.config.xaxis.title.style.fontWeight,foreColor:t.config.xaxis.title.style.color,cssClass:"apexcharts-xaxis-title-text "+t.config.xaxis.title.style.cssClass});a.add(s),e.add(a)}}},{key:"yAxisTitleRotate",value:function(e,t){var i=this.w,a=new X(this.ctx),s={width:0,height:0},r={width:0,height:0},n=i.globals.dom.baseEl.querySelector(" .apexcharts-yaxis[rel='".concat(e,"'] .apexcharts-yaxis-texts-g"));n!==null&&(s=n.getBoundingClientRect());var o=i.globals.dom.baseEl.querySelector(".apexcharts-yaxis[rel='".concat(e,"'] .apexcharts-yaxis-title text"));if(o!==null&&(r=o.getBoundingClientRect()),o!==null){var h=this.xPaddingForYAxisTitle(e,s,r,t);o.setAttribute("x",h.xPos-(t?10:0))}if(o!==null){var c=a.rotateAroundCenter(o);o.setAttribute("transform","rotate(".concat(t?-1*i.config.yaxis[e].title.rotate:i.config.yaxis[e].title.rotate," ").concat(c.x," ").concat(c.y,")"))}}},{key:"xPaddingForYAxisTitle",value:function(e,t,i,a){var s=this.w,r=0,n=0,o=10;return s.config.yaxis[e].title.text===void 0||e<0?{xPos:n,padd:0}:(a?(n=t.width+s.config.yaxis[e].title.offsetX+i.width/2+o/2,(r+=1)===0&&(n-=o/2)):(n=-1*t.width+s.config.yaxis[e].title.offsetX+o/2+i.width/2,s.globals.isBarHorizontal&&(o=25,n=-1*t.width-s.config.yaxis[e].title.offsetX-o)),{xPos:n,padd:o})}},{key:"setYAxisXPosition",value:function(e,t){var i=this.w,a=0,s=0,r=18,n=1;i.config.yaxis.length>1&&(this.multipleYs=!0),i.config.yaxis.map(function(o,h){var c=i.globals.ignoreYAxisIndexes.indexOf(h)>-1||!o.show||o.floating||e[h].width===0,d=e[h].width+t[h].width;o.opposite?i.globals.isBarHorizontal?(s=i.globals.gridWidth+i.globals.translateX-1,i.globals.translateYAxisX[h]=s-o.labels.offsetX):(s=i.globals.gridWidth+i.globals.translateX+n,c||(n=n+d+20),i.globals.translateYAxisX[h]=s-o.labels.offsetX+20):(a=i.globals.translateX-r,c||(r=r+d+20),i.globals.translateYAxisX[h]=a+o.labels.offsetX)})}},{key:"setYAxisTextAlignments",value:function(){var e=this.w,t=e.globals.dom.baseEl.getElementsByClassName("apexcharts-yaxis");(t=P.listToArray(t)).forEach(function(i,a){var s=e.config.yaxis[a];if(s&&!s.floating&&s.labels.align!==void 0){var r=e.globals.dom.baseEl.querySelector(".apexcharts-yaxis[rel='".concat(a,"'] .apexcharts-yaxis-texts-g")),n=e.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxis[rel='".concat(a,"'] .apexcharts-yaxis-label"));n=P.listToArray(n);var o=r.getBoundingClientRect();s.labels.align==="left"?(n.forEach(function(h,c){h.setAttribute("text-anchor","start")}),s.opposite||r.setAttribute("transform","translate(-".concat(o.width,", 0)"))):s.labels.align==="center"?(n.forEach(function(h,c){h.setAttribute("text-anchor","middle")}),r.setAttribute("transform","translate(".concat(o.width/2*(s.opposite?1:-1),", 0)"))):s.labels.align==="right"&&(n.forEach(function(h,c){h.setAttribute("text-anchor","end")}),s.opposite&&r.setAttribute("transform","translate(".concat(o.width,", 0)")))}})}}]),p}(),Oi=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w,this.documentEvent=P.bind(this.documentEvent,this)}return R(p,[{key:"addEventListener",value:function(e,t){var i=this.w;i.globals.events.hasOwnProperty(e)?i.globals.events[e].push(t):i.globals.events[e]=[t]}},{key:"removeEventListener",value:function(e,t){var i=this.w;if(i.globals.events.hasOwnProperty(e)){var a=i.globals.events[e].indexOf(t);a!==-1&&i.globals.events[e].splice(a,1)}}},{key:"fireEvent",value:function(e,t){var i=this.w;if(i.globals.events.hasOwnProperty(e)){t&&t.length||(t=[]);for(var a=i.globals.events[e],s=a.length,r=0;r0&&(t=this.w.config.chart.locales.concat(window.Apex.chart.locales));var i=t.filter(function(s){return s.name===e})[0];if(!i)throw new Error("Wrong locale name provided. Please make sure you set the correct locale name in options");var a=P.extend(Xt,i);this.w.globals.locale=a.options}}]),p}(),Hi=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"drawAxis",value:function(e,t){var i,a,s=this,r=this.w.globals,n=this.w.config,o=new Me(this.ctx,t),h=new lt(this.ctx,t);r.axisCharts&&e!=="radar"&&(r.isBarHorizontal?(a=h.drawYaxisInversed(0),i=o.drawXaxisInversed(0),r.dom.elGraphical.add(i),r.dom.elGraphical.add(a)):(i=o.drawXaxis(),r.dom.elGraphical.add(i),n.yaxis.map(function(c,d){if(r.ignoreYAxisIndexes.indexOf(d)===-1&&(a=h.drawYaxis(d),r.dom.Paper.add(a),s.w.config.grid.position==="back")){var g=r.dom.Paper.children()[1];g.remove(),r.dom.Paper.add(g)}})))}}]),p}(),nt=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"drawXCrosshairs",value:function(){var e=this.w,t=new X(this.ctx),i=new ie(this.ctx),a=e.config.xaxis.crosshairs.fill.gradient,s=e.config.xaxis.crosshairs.dropShadow,r=e.config.xaxis.crosshairs.fill.type,n=a.colorFrom,o=a.colorTo,h=a.opacityFrom,c=a.opacityTo,d=a.stops,g=s.enabled,f=s.left,x=s.top,b=s.blur,v=s.color,y=s.opacity,w=e.config.xaxis.crosshairs.fill.color;if(e.config.xaxis.crosshairs.show){r==="gradient"&&(w=t.drawGradient("vertical",n,o,h,c,null,d,null));var l=t.drawRect();e.config.xaxis.crosshairs.width===1&&(l=t.drawLine());var u=e.globals.gridHeight;(!P.isNumber(u)||u<0)&&(u=0);var m=e.config.xaxis.crosshairs.width;(!P.isNumber(m)||m<0)&&(m=0),l.attr({class:"apexcharts-xcrosshairs",x:0,y:0,y2:u,width:m,height:u,fill:w,filter:"none","fill-opacity":e.config.xaxis.crosshairs.opacity,stroke:e.config.xaxis.crosshairs.stroke.color,"stroke-width":e.config.xaxis.crosshairs.stroke.width,"stroke-dasharray":e.config.xaxis.crosshairs.stroke.dashArray}),g&&(l=i.dropShadow(l,{left:f,top:x,blur:b,color:v,opacity:y})),e.globals.dom.elGraphical.add(l)}}},{key:"drawYCrosshairs",value:function(){var e=this.w,t=new X(this.ctx),i=e.config.yaxis[0].crosshairs,a=e.globals.barPadForNumericAxis;if(e.config.yaxis[0].crosshairs.show){var s=t.drawLine(-a,0,e.globals.gridWidth+a,0,i.stroke.color,i.stroke.dashArray,i.stroke.width);s.attr({class:"apexcharts-ycrosshairs"}),e.globals.dom.elGraphical.add(s)}var r=t.drawLine(-a,0,e.globals.gridWidth+a,0,i.stroke.color,0,0);r.attr({class:"apexcharts-ycrosshairs-hidden"}),e.globals.dom.elGraphical.add(r)}}]),p}(),Ni=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"checkResponsiveConfig",value:function(e){var t=this,i=this.w,a=i.config;if(a.responsive.length!==0){var s=a.responsive.slice();s.sort(function(h,c){return h.breakpoint>c.breakpoint?1:c.breakpoint>h.breakpoint?-1:0}).reverse();var r=new Pe({}),n=function(){var h=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},c=s[0].breakpoint,d=window.innerWidth>0?window.innerWidth:screen.width;if(d>c){var g=P.clone(i.globals.initialConfig);g.series=P.clone(i.config.series);var f=$.extendArrayProps(r,g,i);h=P.extend(f,h),h=P.extend(i.config,h),t.overrideResponsiveOptions(h)}else for(var x=0;x0&&typeof i.config.colors[0]=="function"&&(i.globals.colors=i.config.series.map(function(x,b){var v=i.config.colors[b];return v||(v=i.config.colors[0]),typeof v=="function"?(t.isColorFn=!0,v({value:i.globals.axisCharts?i.globals.series[b][0]?i.globals.series[b][0]:0:i.globals.series[b],seriesIndex:b,dataPointIndex:b,w:i})):v}))),i.globals.seriesColors.map(function(x,b){x&&(i.globals.colors[b]=x)}),i.config.theme.monochrome.enabled){var s=[],r=i.globals.series.length;(this.isBarDistributed||this.isHeatmapDistributed)&&(r=i.globals.series[0].length*i.globals.series.length);for(var n=i.config.theme.monochrome.color,o=1/(r/i.config.theme.monochrome.shadeIntensity),h=i.config.theme.monochrome.shadeTo,c=0,d=0;d2&&arguments[2]!==void 0?arguments[2]:null,a=this.w,s=t||a.globals.series.length;if(i===null&&(i=this.isBarDistributed||this.isHeatmapDistributed||a.config.chart.type==="heatmap"&&a.config.plotOptions.heatmap.colorScale.inverse),i&&a.globals.series.length&&(s=a.globals.series[a.globals.maxValsInArrayIndex].length*a.globals.series.length),e.lengthe.globals.svgWidth&&(this.dCtx.lgRect.width=e.globals.svgWidth/1.5),this.dCtx.lgRect}},{key:"getDatalabelsRect",value:function(){var e=this,t=this.w,i=[];t.config.series.forEach(function(o,h){o.data.forEach(function(c,d){var g;g=t.globals.series[h][d],a=t.config.dataLabels.formatter(g,{ctx:e.dCtx.ctx,seriesIndex:h,dataPointIndex:d,w:t}),i.push(a)})});var a=P.getLargestStringFromArr(i),s=new X(this.dCtx.ctx),r=t.config.dataLabels.style,n=s.getTextRects(a,parseInt(r.fontSize),r.fontFamily);return{width:1.05*n.width,height:n.height}}},{key:"getLargestStringFromMultiArr",value:function(e,t){var i=e;if(this.w.globals.isMultiLineX){var a=t.map(function(r,n){return Array.isArray(r)?r.length:1}),s=Math.max.apply(Math,te(a));i=t[a.indexOf(s)]}return i}}]),p}(),Vi=function(){function p(e){F(this,p),this.w=e.w,this.dCtx=e}return R(p,[{key:"getxAxisLabelsCoords",value:function(){var e,t=this.w,i=t.globals.labels.slice();if(t.config.xaxis.convertedCatToNumeric&&i.length===0&&(i=t.globals.categoryLabels),t.globals.timescaleLabels.length>0){var a=this.getxAxisTimeScaleLabelsCoords();e={width:a.width,height:a.height},t.globals.rotateXLabels=!1}else{this.dCtx.lgWidthForSideLegends=t.config.legend.position!=="left"&&t.config.legend.position!=="right"||t.config.legend.floating?0:this.dCtx.lgRect.width;var s=t.globals.xLabelFormatter,r=P.getLargestStringFromArr(i),n=this.dCtx.dimHelpers.getLargestStringFromMultiArr(r,i);t.globals.isBarHorizontal&&(n=r=t.globals.yAxisScale[0].result.reduce(function(x,b){return x.length>b.length?x:b},0));var o=new ze(this.dCtx.ctx),h=r;r=o.xLabelFormat(s,r,h,{i:void 0,dateFormatter:new K(this.dCtx.ctx).formatDate,w:t}),n=o.xLabelFormat(s,n,h,{i:void 0,dateFormatter:new K(this.dCtx.ctx).formatDate,w:t}),(t.config.xaxis.convertedCatToNumeric&&r===void 0||String(r).trim()==="")&&(n=r="1");var c=new X(this.dCtx.ctx),d=c.getTextRects(r,t.config.xaxis.labels.style.fontSize),g=d;if(r!==n&&(g=c.getTextRects(n,t.config.xaxis.labels.style.fontSize)),(e={width:d.width>=g.width?d.width:g.width,height:d.height>=g.height?d.height:g.height}).width*i.length>t.globals.svgWidth-this.dCtx.lgWidthForSideLegends-this.dCtx.yAxisWidth-this.dCtx.gridPad.left-this.dCtx.gridPad.right&&t.config.xaxis.labels.rotate!==0||t.config.xaxis.labels.rotateAlways){if(!t.globals.isBarHorizontal){t.globals.rotateXLabels=!0;var f=function(x){return c.getTextRects(x,t.config.xaxis.labels.style.fontSize,t.config.xaxis.labels.style.fontFamily,"rotate(".concat(t.config.xaxis.labels.rotate," 0 0)"),!1)};d=f(r),r!==n&&(g=f(n)),e.height=(d.height>g.height?d.height:g.height)/1.5,e.width=d.width>g.width?d.width:g.width}}else t.globals.rotateXLabels=!1}return t.config.xaxis.labels.show||(e={width:0,height:0}),{width:e.width,height:e.height}}},{key:"getxAxisGroupLabelsCoords",value:function(){var e,t=this.w;if(!t.globals.hasXaxisGroups)return{width:0,height:0};var i,a=((e=t.config.xaxis.group.style)===null||e===void 0?void 0:e.fontSize)||t.config.xaxis.labels.style.fontSize,s=t.globals.groups.map(function(d){return d.title}),r=P.getLargestStringFromArr(s),n=this.dCtx.dimHelpers.getLargestStringFromMultiArr(r,s),o=new X(this.dCtx.ctx),h=o.getTextRects(r,a),c=h;return r!==n&&(c=o.getTextRects(n,a)),i={width:h.width>=c.width?h.width:c.width,height:h.height>=c.height?h.height:c.height},t.config.xaxis.labels.show||(i={width:0,height:0}),{width:i.width,height:i.height}}},{key:"getxAxisTitleCoords",value:function(){var e=this.w,t=0,i=0;if(e.config.xaxis.title.text!==void 0){var a=new X(this.dCtx.ctx).getTextRects(e.config.xaxis.title.text,e.config.xaxis.title.style.fontSize);t=a.width,i=a.height}return{width:t,height:i}}},{key:"getxAxisTimeScaleLabelsCoords",value:function(){var e,t=this.w;this.dCtx.timescaleLabels=t.globals.timescaleLabels.slice();var i=this.dCtx.timescaleLabels.map(function(s){return s.value}),a=i.reduce(function(s,r){return s===void 0?(console.error("You have possibly supplied invalid Date format. Please supply a valid JavaScript Date"),0):s.length>r.length?s:r},0);return 1.05*(e=new X(this.dCtx.ctx).getTextRects(a,t.config.xaxis.labels.style.fontSize)).width*i.length>t.globals.gridWidth&&t.config.xaxis.labels.rotate!==0&&(t.globals.overlappingXLabels=!0),e}},{key:"additionalPaddingXLabels",value:function(e){var t=this,i=this.w,a=i.globals,s=i.config,r=s.xaxis.type,n=e.width;a.skipLastTimelinelabel=!1,a.skipFirstTimelinelabel=!1;var o=i.config.yaxis[0].opposite&&i.globals.isBarHorizontal,h=function(c,d){s.yaxis.length>1&&function(g){return a.collapsedSeriesIndices.indexOf(g)!==-1}(d)||function(g){if(t.dCtx.timescaleLabels&&t.dCtx.timescaleLabels.length){var f=t.dCtx.timescaleLabels[0],x=t.dCtx.timescaleLabels[t.dCtx.timescaleLabels.length-1].position+n/1.75-t.dCtx.yAxisWidthRight,b=f.position-n/1.75+t.dCtx.yAxisWidthLeft,v=i.config.legend.position==="right"&&t.dCtx.lgRect.width>0?t.dCtx.lgRect.width:0;x>a.svgWidth-a.translateX-v&&(a.skipLastTimelinelabel=!0),b<-(g.show&&!g.floating||s.chart.type!=="bar"&&s.chart.type!=="candlestick"&&s.chart.type!=="rangeBar"&&s.chart.type!=="boxPlot"?10:n/1.75)&&(a.skipFirstTimelinelabel=!0)}else r==="datetime"?t.dCtx.gridPad.right((k=String(d(m,o)))===null||k===void 0?void 0:k.length)?u:m},g),x=f=d(f,o);if(f!==void 0&&f.length!==0||(f=h.niceMax),t.globals.isBarHorizontal){a=0;var b=t.globals.labels.slice();f=P.getLargestStringFromArr(b),f=d(f,{seriesIndex:n,dataPointIndex:-1,w:t}),x=e.dCtx.dimHelpers.getLargestStringFromMultiArr(f,b)}var v=new X(e.dCtx.ctx),y="rotate(".concat(r.labels.rotate," 0 0)"),w=v.getTextRects(f,r.labels.style.fontSize,r.labels.style.fontFamily,y,!1),l=w;f!==x&&(l=v.getTextRects(x,r.labels.style.fontSize,r.labels.style.fontFamily,y,!1)),i.push({width:(c>l.width||c>w.width?c:l.width>w.width?l.width:w.width)+a,height:l.height>w.height?l.height:w.height})}else i.push({width:0,height:0})}),i}},{key:"getyAxisTitleCoords",value:function(){var e=this,t=this.w,i=[];return t.config.yaxis.map(function(a,s){if(a.show&&a.title.text!==void 0){var r=new X(e.dCtx.ctx),n="rotate(".concat(a.title.rotate," 0 0)"),o=r.getTextRects(a.title.text,a.title.style.fontSize,a.title.style.fontFamily,n,!1);i.push({width:o.width,height:o.height})}else i.push({width:0,height:0})}),i}},{key:"getTotalYAxisWidth",value:function(){var e=this.w,t=0,i=0,a=0,s=e.globals.yAxisScale.length>1?10:0,r=new ge(this.dCtx.ctx),n=function(o,h){var c=e.config.yaxis[h].floating,d=0;o.width>0&&!c?(d=o.width+s,function(g){return e.globals.ignoreYAxisIndexes.indexOf(g)>-1}(h)&&(d=d-o.width-s)):d=c||r.isYAxisHidden(h)?0:5,e.config.yaxis[h].opposite?a+=d:i+=d,t+=d};return e.globals.yLabelsCoords.map(function(o,h){n(o,h)}),e.globals.yTitleCoords.map(function(o,h){n(o,h)}),e.globals.isBarHorizontal&&!e.config.yaxis[0].floating&&(t=e.globals.yLabelsCoords[0].width+e.globals.yTitleCoords[0].width+15),this.dCtx.yAxisWidthLeft=i,this.dCtx.yAxisWidthRight=a,t}}]),p}(),ji=function(){function p(e){F(this,p),this.w=e.w,this.dCtx=e}return R(p,[{key:"gridPadForColumnsInNumericAxis",value:function(e){var t=this.w,i=t.config,a=t.globals;if(a.noData||a.collapsedSeries.length+a.ancillaryCollapsedSeries.length===i.series.length)return 0;var s=function(f){return f==="bar"||f==="rangeBar"||f==="candlestick"||f==="boxPlot"},r=i.chart.type,n=0,o=s(r)?i.series.length:1;a.comboBarCount>0&&(o=a.comboBarCount),a.collapsedSeries.forEach(function(f){s(f.type)&&(o-=1)}),i.chart.stacked&&(o=1);var h=s(r)||a.comboBarCount>0,c=Math.abs(a.initialMaxX-a.initialMinX);if(h&&a.isXNumeric&&!a.isBarHorizontal&&o>0&&c!==0){var d,g;c<=3&&(c=a.dataPoints),d=c/e,a.minXDiff&&a.minXDiff/d>0&&(g=a.minXDiff/d),g>e/2&&(g/=2),(n=g*parseInt(i.plotOptions.bar.columnWidth,10)/100)<1&&(n=1),a.barPadForNumericAxis=n}return n}},{key:"gridPadFortitleSubtitle",value:function(){var e=this,t=this.w,i=t.globals,a=this.dCtx.isSparkline||!t.globals.axisCharts?0:10;["title","subtitle"].forEach(function(n){t.config[n].text!==void 0?a+=t.config[n].margin:a+=e.dCtx.isSparkline||!t.globals.axisCharts?0:5}),!t.config.legend.show||t.config.legend.position!=="bottom"||t.config.legend.floating||t.globals.axisCharts||(a+=10);var s=this.dCtx.dimHelpers.getTitleSubtitleCoords("title"),r=this.dCtx.dimHelpers.getTitleSubtitleCoords("subtitle");i.gridHeight=i.gridHeight-s.height-r.height-a,i.translateY=i.translateY+s.height+r.height+a}},{key:"setGridXPosForDualYAxis",value:function(e,t){var i=this.w,a=new ge(this.dCtx.ctx);i.config.yaxis.map(function(s,r){i.globals.ignoreYAxisIndexes.indexOf(r)!==-1||s.floating||a.isYAxisHidden(r)||(s.opposite&&(i.globals.translateX=i.globals.translateX-(t[r].width+e[r].width)-parseInt(i.config.yaxis[r].labels.style.fontSize,10)/1.2-12),i.globals.translateX<2&&(i.globals.translateX=2))})}}]),p}(),Ne=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w,this.lgRect={},this.yAxisWidth=0,this.yAxisWidthLeft=0,this.yAxisWidthRight=0,this.xAxisHeight=0,this.isSparkline=this.w.config.chart.sparkline.enabled,this.dimHelpers=new Gi(this),this.dimYAxis=new _i(this),this.dimXAxis=new Vi(this),this.dimGrid=new ji(this),this.lgWidthForSideLegends=0,this.gridPad=this.w.config.grid.padding,this.xPadRight=0,this.xPadLeft=0}return R(p,[{key:"plotCoords",value:function(){var e=this,t=this.w,i=t.globals;this.lgRect=this.dimHelpers.getLegendsRect(),this.datalabelsCoords={width:0,height:0};var a=Array.isArray(t.config.stroke.width)?Math.max.apply(Math,te(t.config.stroke.width)):t.config.stroke.width;this.isSparkline&&((t.config.markers.discrete.length>0||t.config.markers.size>0)&&Object.entries(this.gridPad).forEach(function(r){var n=It(r,2),o=n[0],h=n[1];e.gridPad[o]=Math.max(h,e.w.globals.markers.largestSize/1.5)}),this.gridPad.top=Math.max(a/2,this.gridPad.top),this.gridPad.bottom=Math.max(a/2,this.gridPad.bottom)),i.axisCharts?this.setDimensionsForAxisCharts():this.setDimensionsForNonAxisCharts(),this.dimGrid.gridPadFortitleSubtitle(),i.gridHeight=i.gridHeight-this.gridPad.top-this.gridPad.bottom,i.gridWidth=i.gridWidth-this.gridPad.left-this.gridPad.right-this.xPadRight-this.xPadLeft;var s=this.dimGrid.gridPadForColumnsInNumericAxis(i.gridWidth);i.gridWidth=i.gridWidth-2*s,i.translateX=i.translateX+this.gridPad.left+this.xPadLeft+(s>0?s:0),i.translateY=i.translateY+this.gridPad.top}},{key:"setDimensionsForAxisCharts",value:function(){var e=this,t=this.w,i=t.globals,a=this.dimYAxis.getyAxisLabelsCoords(),s=this.dimYAxis.getyAxisTitleCoords();i.isSlopeChart&&(this.datalabelsCoords=this.dimHelpers.getDatalabelsRect()),t.globals.yLabelsCoords=[],t.globals.yTitleCoords=[],t.config.yaxis.map(function(f,x){t.globals.yLabelsCoords.push({width:a[x].width,index:x}),t.globals.yTitleCoords.push({width:s[x].width,index:x})}),this.yAxisWidth=this.dimYAxis.getTotalYAxisWidth();var r=this.dimXAxis.getxAxisLabelsCoords(),n=this.dimXAxis.getxAxisGroupLabelsCoords(),o=this.dimXAxis.getxAxisTitleCoords();this.conditionalChecksForAxisCoords(r,o,n),i.translateXAxisY=t.globals.rotateXLabels?this.xAxisHeight/8:-4,i.translateXAxisX=t.globals.rotateXLabels&&t.globals.isXNumeric&&t.config.xaxis.labels.rotate<=-45?-this.xAxisWidth/4:0,t.globals.isBarHorizontal&&(i.rotateXLabels=!1,i.translateXAxisY=parseInt(t.config.xaxis.labels.style.fontSize,10)/1.5*-1),i.translateXAxisY=i.translateXAxisY+t.config.xaxis.labels.offsetY,i.translateXAxisX=i.translateXAxisX+t.config.xaxis.labels.offsetX;var h=this.yAxisWidth,c=this.xAxisHeight;i.xAxisLabelsHeight=this.xAxisHeight-o.height,i.xAxisGroupLabelsHeight=i.xAxisLabelsHeight-r.height,i.xAxisLabelsWidth=this.xAxisWidth,i.xAxisHeight=this.xAxisHeight;var d=10;(t.config.chart.type==="radar"||this.isSparkline)&&(h=0,c=i.goldenPadding),this.isSparkline&&(this.lgRect={height:0,width:0}),(this.isSparkline||t.config.chart.type==="treemap")&&(h=0,c=0,d=0),this.isSparkline||t.config.chart.type==="treemap"||this.dimXAxis.additionalPaddingXLabels(r);var g=function(){i.translateX=h+e.datalabelsCoords.width,i.gridHeight=i.svgHeight-e.lgRect.height-c-(e.isSparkline||t.config.chart.type==="treemap"?0:t.globals.rotateXLabels?10:15),i.gridWidth=i.svgWidth-h-2*e.datalabelsCoords.width};switch(t.config.xaxis.position==="top"&&(d=i.xAxisHeight-t.config.xaxis.axisTicks.height-5),t.config.legend.position){case"bottom":i.translateY=d,g();break;case"top":i.translateY=this.lgRect.height+d,g();break;case"left":i.translateY=d,i.translateX=this.lgRect.width+h+this.datalabelsCoords.width,i.gridHeight=i.svgHeight-c-12,i.gridWidth=i.svgWidth-this.lgRect.width-h-2*this.datalabelsCoords.width;break;case"right":i.translateY=d,i.translateX=h+this.datalabelsCoords.width,i.gridHeight=i.svgHeight-c-12,i.gridWidth=i.svgWidth-this.lgRect.width-h-2*this.datalabelsCoords.width-5;break;default:throw new Error("Legend position not supported")}this.dimGrid.setGridXPosForDualYAxis(s,a),new lt(this.ctx).setYAxisXPosition(a,s)}},{key:"setDimensionsForNonAxisCharts",value:function(){var e=this.w,t=e.globals,i=e.config,a=0;e.config.legend.show&&!e.config.legend.floating&&(a=20);var s=i.chart.type==="pie"||i.chart.type==="polarArea"||i.chart.type==="donut"?"pie":"radialBar",r=i.plotOptions[s].offsetY,n=i.plotOptions[s].offsetX;if(!i.legend.show||i.legend.floating){t.gridHeight=t.svgHeight-i.grid.padding.top-i.grid.padding.bottom;var o=t.dom.elWrap.getBoundingClientRect().width;return t.gridWidth=Math.min(o,t.gridHeight)-i.grid.padding.left-i.grid.padding.right,t.translateY=r,void(t.translateX=n+(t.svgWidth-t.gridWidth)/2)}switch(i.legend.position){case"bottom":t.gridHeight=t.svgHeight-this.lgRect.height-t.goldenPadding,t.gridWidth=t.svgWidth,t.translateY=r-10,t.translateX=n+(t.svgWidth-t.gridWidth)/2;break;case"top":t.gridHeight=t.svgHeight-this.lgRect.height-t.goldenPadding,t.gridWidth=t.svgWidth,t.translateY=this.lgRect.height+r+10,t.translateX=n+(t.svgWidth-t.gridWidth)/2;break;case"left":t.gridWidth=t.svgWidth-this.lgRect.width-a,t.gridHeight=i.chart.height!=="auto"?t.svgHeight:t.gridWidth,t.translateY=r,t.translateX=n+this.lgRect.width+a;break;case"right":t.gridWidth=t.svgWidth-this.lgRect.width-a-5,t.gridHeight=i.chart.height!=="auto"?t.svgHeight:t.gridWidth,t.translateY=r,t.translateX=n+10;break;default:throw new Error("Legend position not supported")}}},{key:"conditionalChecksForAxisCoords",value:function(e,t,i){var a=this.w,s=a.globals.hasXaxisGroups?2:1,r=i.height+e.height+t.height,n=a.globals.isMultiLineX?1.2:a.globals.LINE_HEIGHT_RATIO,o=a.globals.rotateXLabels?22:10,h=a.globals.rotateXLabels&&a.config.legend.position==="bottom"?10:0;this.xAxisHeight=r*n+s*o+h,this.xAxisWidth=e.width,this.xAxisHeight-t.height>a.config.xaxis.labels.maxHeight&&(this.xAxisHeight=a.config.xaxis.labels.maxHeight),a.config.xaxis.labels.minHeight&&this.xAxisHeightd&&(this.yAxisWidth=d)}}]),p}(),Ui=function(){function p(e){F(this,p),this.w=e.w,this.lgCtx=e}return R(p,[{key:"getLegendStyles",value:function(){var e,t,i,a=document.createElement("style");a.setAttribute("type","text/css");var s=((e=this.lgCtx.ctx)===null||e===void 0||(t=e.opts)===null||t===void 0||(i=t.chart)===null||i===void 0?void 0:i.nonce)||this.w.config.chart.nonce;s&&a.setAttribute("nonce",s);var r=document.createTextNode(` + .apexcharts-legend { + display: flex; + overflow: auto; + padding: 0 10px; + } + .apexcharts-legend.apx-legend-position-bottom, .apexcharts-legend.apx-legend-position-top { + flex-wrap: wrap + } + .apexcharts-legend.apx-legend-position-right, .apexcharts-legend.apx-legend-position-left { + flex-direction: column; + bottom: 0; + } + .apexcharts-legend.apx-legend-position-bottom.apexcharts-align-left, .apexcharts-legend.apx-legend-position-top.apexcharts-align-left, .apexcharts-legend.apx-legend-position-right, .apexcharts-legend.apx-legend-position-left { + justify-content: flex-start; + } + .apexcharts-legend.apx-legend-position-bottom.apexcharts-align-center, .apexcharts-legend.apx-legend-position-top.apexcharts-align-center { + justify-content: center; + } + .apexcharts-legend.apx-legend-position-bottom.apexcharts-align-right, .apexcharts-legend.apx-legend-position-top.apexcharts-align-right { + justify-content: flex-end; + } + .apexcharts-legend-series { + cursor: pointer; + line-height: normal; + display: flex; + align-items: center; + } + .apexcharts-legend-text { + position: relative; + font-size: 14px; + } + .apexcharts-legend-text *, .apexcharts-legend-marker * { + pointer-events: none; + } + .apexcharts-legend-marker { + position: relative; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + margin-right: 1px; + } + + .apexcharts-legend-series.apexcharts-no-click { + cursor: auto; + } + .apexcharts-legend .apexcharts-hidden-zero-series, .apexcharts-legend .apexcharts-hidden-null-series { + display: none !important; + } + .apexcharts-inactive-legend { + opacity: 0.45; + }`);return a.appendChild(r),a}},{key:"getLegendDimensions",value:function(){var e=this.w.globals.dom.baseEl.querySelector(".apexcharts-legend"),t=e.offsetWidth;return{clwh:e.offsetHeight,clww:t}}},{key:"appendToForeignObject",value:function(){this.w.globals.dom.elLegendForeign.appendChild(this.getLegendStyles())}},{key:"toggleDataSeries",value:function(e,t){var i=this,a=this.w;if(a.globals.axisCharts||a.config.chart.type==="radialBar"){a.globals.resized=!0;var s=null,r=null;a.globals.risingSeries=[],a.globals.axisCharts?(s=a.globals.dom.baseEl.querySelector(".apexcharts-series[data\\:realIndex='".concat(e,"']")),r=parseInt(s.getAttribute("data:realIndex"),10)):(s=a.globals.dom.baseEl.querySelector(".apexcharts-series[rel='".concat(e+1,"']")),r=parseInt(s.getAttribute("rel"),10)-1),t?[{cs:a.globals.collapsedSeries,csi:a.globals.collapsedSeriesIndices},{cs:a.globals.ancillaryCollapsedSeries,csi:a.globals.ancillaryCollapsedSeriesIndices}].forEach(function(c){i.riseCollapsedSeries(c.cs,c.csi,r)}):this.hideSeries({seriesEl:s,realIndex:r})}else{var n=a.globals.dom.Paper.select(" .apexcharts-series[rel='".concat(e+1,"'] path")),o=a.config.chart.type;if(o==="pie"||o==="polarArea"||o==="donut"){var h=a.config.plotOptions.pie.donut.labels;new X(this.lgCtx.ctx).pathMouseDown(n.members[0],null),this.lgCtx.ctx.pie.printDataLabelsInner(n.members[0].node,h)}n.fire("click")}}},{key:"getSeriesAfterCollapsing",value:function(e){var t=e.realIndex,i=this.w,a=i.globals,s=P.clone(i.config.series);if(a.axisCharts){var r=i.config.yaxis[a.seriesYAxisReverseMap[t]],n={index:t,data:s[t].data.slice(),type:s[t].type||i.config.chart.type};if(r&&r.show&&r.showAlways)a.ancillaryCollapsedSeriesIndices.indexOf(t)<0&&(a.ancillaryCollapsedSeries.push(n),a.ancillaryCollapsedSeriesIndices.push(t));else if(a.collapsedSeriesIndices.indexOf(t)<0){a.collapsedSeries.push(n),a.collapsedSeriesIndices.push(t);var o=a.risingSeries.indexOf(t);a.risingSeries.splice(o,1)}}else a.collapsedSeries.push({index:t,data:s[t]}),a.collapsedSeriesIndices.push(t);return a.allSeriesCollapsed=a.collapsedSeries.length+a.ancillaryCollapsedSeries.length===i.config.series.length,this._getSeriesBasedOnCollapsedState(s)}},{key:"hideSeries",value:function(e){for(var t=e.seriesEl,i=e.realIndex,a=this.w,s=this.getSeriesAfterCollapsing({realIndex:i}),r=t.childNodes,n=0;n0){for(var r=0;r1||!t.axisCharts)&&i.legend.show){for(;t.dom.elLegendWrap.firstChild;)t.dom.elLegendWrap.removeChild(t.dom.elLegendWrap.firstChild);this.drawLegends(),this.legendHelpers.appendToForeignObject(),i.legend.position==="bottom"||i.legend.position==="top"?this.legendAlignHorizontal():i.legend.position!=="right"&&i.legend.position!=="left"||this.legendAlignVertical()}}},{key:"createLegendMarker",value:function(e){var t=e.i,i=e.fillcolor,a=this.w,s=document.createElement("span");s.classList.add("apexcharts-legend-marker");var r=a.config.legend.markers.shape||a.config.markers.shape,n=r;Array.isArray(r)&&(n=r[t]);var o=Array.isArray(a.config.legend.markers.size)?parseFloat(a.config.legend.markers.size[t]):parseFloat(a.config.legend.markers.size),h=Array.isArray(a.config.legend.markers.offsetX)?parseFloat(a.config.legend.markers.offsetX[t]):parseFloat(a.config.legend.markers.offsetX),c=Array.isArray(a.config.legend.markers.offsetY)?parseFloat(a.config.legend.markers.offsetY[t]):parseFloat(a.config.legend.markers.offsetY),d=Array.isArray(a.config.legend.markers.strokeWidth)?parseFloat(a.config.legend.markers.strokeWidth[t]):parseFloat(a.config.legend.markers.strokeWidth),g=s.style;if(g.height=2*(o+d)+"px",g.width=2*(o+d)+"px",g.left=h+"px",g.top=c+"px",a.config.legend.markers.customHTML)g.background="transparent",g.color=i[t],Array.isArray(a.config.legend.markers.customHTML)?a.config.legend.markers.customHTML[t]&&(s.innerHTML=a.config.legend.markers.customHTML[t]()):s.innerHTML=a.config.legend.markers.customHTML();else{var f=new ye(this.ctx).getMarkerConfig({cssClass:"apexcharts-legend-marker apexcharts-marker apexcharts-marker-".concat(n),seriesIndex:t,strokeWidth:d,size:o}),x=SVG(s).size("100%","100%"),b=new X(this.ctx).drawMarker(0,0,Y(Y({},f),{},{pointFillColor:Array.isArray(i)?i[t]:f.pointFillColor,shape:n}));SVG.select(".apexcharts-legend-marker.apexcharts-marker").members.forEach(function(v){v.node.classList.contains("apexcharts-marker-triangle")?v.node.style.transform="translate(50%, 45%)":v.node.style.transform="translate(50%, 50%)"}),x.add(b)}return s}},{key:"drawLegends",value:function(){var e=this,t=this.w,i=t.config.legend.fontFamily,a=t.globals.seriesNames,s=t.config.legend.markers.fillColors?t.config.legend.markers.fillColors.slice():t.globals.colors.slice();if(t.config.chart.type==="heatmap"){var r=t.config.plotOptions.heatmap.colorScale.ranges;a=r.map(function(m){return m.name?m.name:m.from+" - "+m.to}),s=r.map(function(m){return m.color})}else this.isBarsDistributed&&(a=t.globals.labels.slice());t.config.legend.customLegendItems.length&&(a=t.config.legend.customLegendItems);for(var n=t.globals.legendFormatter,o=t.config.legend.inverseOrder,h=o?a.length-1:0;o?h>=0:h<=a.length-1;o?h--:h++){var c,d=n(a[h],{seriesIndex:h,w:t}),g=!1,f=!1;if(t.globals.collapsedSeries.length>0)for(var x=0;x0)for(var b=0;b0?h-10:0)+(c>0?c-10:0)}a.style.position="absolute",r=r+e+i.config.legend.offsetX,n=n+t+i.config.legend.offsetY,a.style.left=r+"px",a.style.top=n+"px",i.config.legend.position==="bottom"?(a.style.top="auto",a.style.bottom=5-i.config.legend.offsetY+"px"):i.config.legend.position==="right"&&(a.style.left="auto",a.style.right=25+i.config.legend.offsetX+"px"),["width","height"].forEach(function(d){a.style[d]&&(a.style[d]=parseInt(i.config.legend[d],10)+"px")})}},{key:"legendAlignHorizontal",value:function(){var e=this.w;e.globals.dom.elLegendWrap.style.right=0;var t=this.legendHelpers.getLegendDimensions(),i=new Ne(this.ctx),a=i.dimHelpers.getTitleSubtitleCoords("title"),s=i.dimHelpers.getTitleSubtitleCoords("subtitle"),r=0;e.config.legend.position==="bottom"?r=-t.clwh/1.8:e.config.legend.position==="top"&&(r=a.height+s.height+e.config.title.margin+e.config.subtitle.margin-10),this.setLegendWrapXY(20,r)}},{key:"legendAlignVertical",value:function(){var e=this.w,t=this.legendHelpers.getLegendDimensions(),i=0;e.config.legend.position==="left"&&(i=20),e.config.legend.position==="right"&&(i=e.globals.svgWidth-t.clww-10),this.setLegendWrapXY(i,20)}},{key:"onLegendHovered",value:function(e){var t=this.w,i=e.target.classList.contains("apexcharts-legend-series")||e.target.classList.contains("apexcharts-legend-text")||e.target.classList.contains("apexcharts-legend-marker");if(t.config.chart.type==="heatmap"||this.isBarsDistributed){if(i){var a=parseInt(e.target.getAttribute("rel"),10)-1;this.ctx.events.fireEvent("legendHover",[this.ctx,a,this.w]),new re(this.ctx).highlightRangeInSeries(e,e.target)}}else!e.target.classList.contains("apexcharts-inactive-legend")&&i&&new re(this.ctx).toggleSeriesOnHover(e,e.target)}},{key:"onLegendClick",value:function(e){var t=this.w;if(!t.config.legend.customLegendItems.length&&(e.target.classList.contains("apexcharts-legend-series")||e.target.classList.contains("apexcharts-legend-text")||e.target.classList.contains("apexcharts-legend-marker"))){var i=parseInt(e.target.getAttribute("rel"),10)-1,a=e.target.getAttribute("data:collapsed")==="true",s=this.w.config.chart.events.legendClick;typeof s=="function"&&s(this.ctx,i,this.w),this.ctx.events.fireEvent("legendClick",[this.ctx,i,this.w]);var r=this.w.config.legend.markers.onClick;typeof r=="function"&&e.target.classList.contains("apexcharts-legend-marker")&&(r(this.ctx,i,this.w),this.ctx.events.fireEvent("legendMarkerClick",[this.ctx,i,this.w])),t.config.chart.type!=="treemap"&&t.config.chart.type!=="heatmap"&&!this.isBarsDistributed&&t.config.legend.onItemClick.toggleDataSeries&&this.legendHelpers.toggleDataSeries(i,a)}}}]),p}(),Ht=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w;var t=this.w;this.ev=this.w.config.chart.events,this.selectedClass="apexcharts-selected",this.localeValues=this.w.globals.locale.toolbar,this.minX=t.globals.minX,this.maxX=t.globals.maxX}return R(p,[{key:"createToolbar",value:function(){var e=this,t=this.w,i=function(){return document.createElement("div")},a=i();if(a.setAttribute("class","apexcharts-toolbar"),a.style.top=t.config.chart.toolbar.offsetY+"px",a.style.right=3-t.config.chart.toolbar.offsetX+"px",t.globals.dom.elWrap.appendChild(a),this.elZoom=i(),this.elZoomIn=i(),this.elZoomOut=i(),this.elPan=i(),this.elSelection=i(),this.elZoomReset=i(),this.elMenuIcon=i(),this.elMenu=i(),this.elCustomIcons=[],this.t=t.config.chart.toolbar.tools,Array.isArray(this.t.customIcons))for(var s=0;s + + + +`),n("zoomOut",this.elZoomOut,` + + + +`);var o=function(d){e.t[d]&&t.config.chart[d].enabled&&r.push({el:d==="zoom"?e.elZoom:e.elSelection,icon:typeof e.t[d]=="string"?e.t[d]:d==="zoom"?` + + + +`:` + + +`,title:e.localeValues[d==="zoom"?"selectionZoom":"selection"],class:t.globals.isTouchDevice?"apexcharts-element-hidden":"apexcharts-".concat(d,"-icon")})};o("zoom"),o("selection"),this.t.pan&&t.config.chart.zoom.enabled&&r.push({el:this.elPan,icon:typeof this.t.pan=="string"?this.t.pan:` + + + + + + + +`,title:this.localeValues.pan,class:t.globals.isTouchDevice?"apexcharts-element-hidden":"apexcharts-pan-icon"}),n("reset",this.elZoomReset,` + + +`),this.t.download&&r.push({el:this.elMenuIcon,icon:typeof this.t.download=="string"?this.t.download:'',title:this.localeValues.menu,class:"apexcharts-menu-icon"});for(var h=0;hthis.wheelDelay&&(this.executeMouseWheelZoom(i),s.globals.lastWheelExecution=r),this.debounceTimer&&clearTimeout(this.debounceTimer),this.debounceTimer=setTimeout(function(){r-s.globals.lastWheelExecution>a.wheelDelay&&(a.executeMouseWheelZoom(i),s.globals.lastWheelExecution=r)},this.debounceDelay)}},{key:"executeMouseWheelZoom",value:function(i){var a,s=this.w;this.minX=s.globals.isRangeBar?s.globals.minY:s.globals.minX,this.maxX=s.globals.isRangeBar?s.globals.maxY:s.globals.maxX;var r=(a=this.gridRect)===null||a===void 0?void 0:a.getBoundingClientRect();if(r){var n,o,h,c=(i.clientX-r.left)/r.width,d=this.minX,g=this.maxX,f=g-d;if(i.deltaY<0){var x=d+c*f;o=x-(n=.5*f)/2,h=x+n/2}else o=d-(n=1.5*f)/2,h=g+n/2;o=Math.max(o,s.globals.initialMinX),h=Math.min(h,s.globals.initialMaxX);var b=.01*(s.globals.initialMaxX-s.globals.initialMinX);if(h-o0&&a.height>0&&this.slDraggableRect.selectize({points:"l, r",pointSize:8,pointType:"rect"}).resize({constraint:{minX:0,minY:0,maxX:i.globals.gridWidth,maxY:i.globals.gridHeight}}).on("resizing",this.selectionDragging.bind(this,"resizing"))}}},{key:"preselectedSelection",value:function(){var i=this.w,a=this.xyRatios;if(!i.globals.zoomEnabled){if(i.globals.selection!==void 0&&i.globals.selection!==null)this.drawSelectionRect(i.globals.selection);else if(i.config.chart.selection.xaxis.min!==void 0&&i.config.chart.selection.xaxis.max!==void 0){var s=(i.config.chart.selection.xaxis.min-i.globals.minX)/a.xRatio,r=i.globals.gridWidth-(i.globals.maxX-i.config.chart.selection.xaxis.max)/a.xRatio-s;i.globals.isRangeBar&&(s=(i.config.chart.selection.xaxis.min-i.globals.yAxisScale[0].niceMin)/a.invertedYRatio,r=(i.config.chart.selection.xaxis.max-i.config.chart.selection.xaxis.min)/a.invertedYRatio);var n={x:s,y:0,width:r,height:i.globals.gridHeight,translateX:0,translateY:0,selectionEnabled:!0};this.drawSelectionRect(n),this.makeSelectionRectDraggable(),typeof i.config.chart.events.selection=="function"&&i.config.chart.events.selection(this.ctx,{xaxis:{min:i.config.chart.selection.xaxis.min,max:i.config.chart.selection.xaxis.max},yaxis:{}})}}}},{key:"drawSelectionRect",value:function(i){var a=i.x,s=i.y,r=i.width,n=i.height,o=i.translateX,h=o===void 0?0:o,c=i.translateY,d=c===void 0?0:c,g=this.w,f=this.zoomRect,x=this.selectionRect;if(this.dragged||g.globals.selection!==null){var b={transform:"translate("+h+", "+d+")"};g.globals.zoomEnabled&&this.dragged&&(r<0&&(r=1),f.attr({x:a,y:s,width:r,height:n,fill:g.config.chart.zoom.zoomedArea.fill.color,"fill-opacity":g.config.chart.zoom.zoomedArea.fill.opacity,stroke:g.config.chart.zoom.zoomedArea.stroke.color,"stroke-width":g.config.chart.zoom.zoomedArea.stroke.width,"stroke-opacity":g.config.chart.zoom.zoomedArea.stroke.opacity}),X.setAttrs(f.node,b)),g.globals.selectionEnabled&&(x.attr({x:a,y:s,width:r>0?r:0,height:n>0?n:0,fill:g.config.chart.selection.fill.color,"fill-opacity":g.config.chart.selection.fill.opacity,stroke:g.config.chart.selection.stroke.color,"stroke-width":g.config.chart.selection.stroke.width,"stroke-dasharray":g.config.chart.selection.stroke.dashArray,"stroke-opacity":g.config.chart.selection.stroke.opacity}),X.setAttrs(x.node,b))}}},{key:"hideSelectionRect",value:function(i){i&&i.attr({x:0,y:0,width:0,height:0})}},{key:"selectionDrawing",value:function(i){var a=i.context,s=i.zoomtype,r=this.w,n=a,o=this.gridRect.getBoundingClientRect(),h=n.startX-1,c=n.startY,d=!1,g=!1,f=n.clientX-o.left-h,x=n.clientY-o.top-c,b={};return Math.abs(f+h)>r.globals.gridWidth?f=r.globals.gridWidth-h:n.clientX-o.left<0&&(f=h),h>n.clientX-o.left&&(d=!0,f=Math.abs(f)),c>n.clientY-o.top&&(g=!0,x=Math.abs(x)),b=s==="x"?{x:d?h-f:h,y:0,width:f,height:r.globals.gridHeight}:s==="y"?{x:0,y:g?c-x:c,width:r.globals.gridWidth,height:x}:{x:d?h-f:h,y:g?c-x:c,width:f,height:x},n.drawSelectionRect(b),n.selectionDragging("resizing"),b}},{key:"selectionDragging",value:function(i,a){var s=this,r=this.w,n=this.xyRatios,o=this.selectionRect,h=0;i==="resizing"&&(h=30);var c=function(g){return parseFloat(o.node.getAttribute(g))},d={x:c("x"),y:c("y"),width:c("width"),height:c("height")};r.globals.selection=d,typeof r.config.chart.events.selection=="function"&&r.globals.selectionEnabled&&(clearTimeout(this.w.globals.selectionResizeTimer),this.w.globals.selectionResizeTimer=window.setTimeout(function(){var g,f,x,b,v=s.gridRect.getBoundingClientRect(),y=o.node.getBoundingClientRect();r.globals.isRangeBar?(g=r.globals.yAxisScale[0].niceMin+(y.left-v.left)*n.invertedYRatio,f=r.globals.yAxisScale[0].niceMin+(y.right-v.left)*n.invertedYRatio,x=0,b=1):(g=r.globals.xAxisScale.niceMin+(y.left-v.left)*n.xRatio,f=r.globals.xAxisScale.niceMin+(y.right-v.left)*n.xRatio,x=r.globals.yAxisScale[0].niceMin+(v.bottom-y.bottom)*n.yRatio[0],b=r.globals.yAxisScale[0].niceMax-(y.top-v.top)*n.yRatio[0]);var w={xaxis:{min:g,max:f},yaxis:{min:x,max:b}};r.config.chart.events.selection(s.ctx,w),r.config.chart.brush.enabled&&r.config.chart.events.brushScrolled!==void 0&&r.config.chart.events.brushScrolled(s.ctx,w)},h))}},{key:"selectionDrawn",value:function(i){var a=i.context,s=i.zoomtype,r=this.w,n=a,o=this.xyRatios,h=this.ctx.toolbar;if(n.startX>n.endX){var c=n.startX;n.startX=n.endX,n.endX=c}if(n.startY>n.endY){var d=n.startY;n.startY=n.endY,n.endY=d}var g=void 0,f=void 0;r.globals.isRangeBar?(g=r.globals.yAxisScale[0].niceMin+n.startX*o.invertedYRatio,f=r.globals.yAxisScale[0].niceMin+n.endX*o.invertedYRatio):(g=r.globals.xAxisScale.niceMin+n.startX*o.xRatio,f=r.globals.xAxisScale.niceMin+n.endX*o.xRatio);var x=[],b=[];if(r.config.yaxis.forEach(function(A,k){var S=r.globals.seriesYAxisMap[k][0];x.push(r.globals.yAxisScale[k].niceMax-o.yRatio[S]*n.startY),b.push(r.globals.yAxisScale[k].niceMax-o.yRatio[S]*n.endY)}),n.dragged&&(n.dragX>10||n.dragY>10)&&g!==f){if(r.globals.zoomEnabled){var v=P.clone(r.globals.initialConfig.yaxis),y=P.clone(r.globals.initialConfig.xaxis);if(r.globals.zoomed=!0,r.config.xaxis.convertedCatToNumeric&&(g=Math.floor(g),f=Math.floor(f),g<1&&(g=1,f=r.globals.dataPoints),f-g<2&&(f=g+1)),s!=="xy"&&s!=="x"||(y={min:g,max:f}),s!=="xy"&&s!=="y"||v.forEach(function(A,k){v[k].min=b[k],v[k].max=x[k]}),h){var w=h.getBeforeZoomRange(y,v);w&&(y=w.xaxis?w.xaxis:y,v=w.yaxis?w.yaxis:v)}var l={xaxis:y};r.config.chart.group||(l.yaxis=v),n.ctx.updateHelpers._updateOptions(l,!1,n.w.config.chart.animations.dynamicAnimation.enabled),typeof r.config.chart.events.zoomed=="function"&&h.zoomCallback(y,v)}else if(r.globals.selectionEnabled){var u,m=null;u={min:g,max:f},s!=="xy"&&s!=="y"||(m=P.clone(r.config.yaxis)).forEach(function(A,k){m[k].min=b[k],m[k].max=x[k]}),r.globals.selection=n.selection,typeof r.config.chart.events.selection=="function"&&r.config.chart.events.selection(n.ctx,{xaxis:u,yaxis:m})}}}},{key:"panDragging",value:function(i){var a=i.context,s=this.w,r=a;if(s.globals.lastClientPosition.x!==void 0){var n=s.globals.lastClientPosition.x-r.clientX,o=s.globals.lastClientPosition.y-r.clientY;Math.abs(n)>Math.abs(o)&&n>0?this.moveDirection="left":Math.abs(n)>Math.abs(o)&&n<0?this.moveDirection="right":Math.abs(o)>Math.abs(n)&&o>0?this.moveDirection="up":Math.abs(o)>Math.abs(n)&&o<0&&(this.moveDirection="down")}s.globals.lastClientPosition={x:r.clientX,y:r.clientY};var h=s.globals.isRangeBar?s.globals.minY:s.globals.minX,c=s.globals.isRangeBar?s.globals.maxY:s.globals.maxX;s.config.xaxis.convertedCatToNumeric||r.panScrolled(h,c)}},{key:"delayedPanScrolled",value:function(){var i=this.w,a=i.globals.minX,s=i.globals.maxX,r=(i.globals.maxX-i.globals.minX)/2;this.moveDirection==="left"?(a=i.globals.minX+r,s=i.globals.maxX+r):this.moveDirection==="right"&&(a=i.globals.minX-r,s=i.globals.maxX-r),a=Math.floor(a),s=Math.floor(s),this.updateScrolledChart({xaxis:{min:a,max:s}},a,s)}},{key:"panScrolled",value:function(i,a){var s=this.w,r=this.xyRatios,n=P.clone(s.globals.initialConfig.yaxis),o=r.xRatio,h=s.globals.minX,c=s.globals.maxX;s.globals.isRangeBar&&(o=r.invertedYRatio,h=s.globals.minY,c=s.globals.maxY),this.moveDirection==="left"?(i=h+s.globals.gridWidth/15*o,a=c+s.globals.gridWidth/15*o):this.moveDirection==="right"&&(i=h-s.globals.gridWidth/15*o,a=c-s.globals.gridWidth/15*o),s.globals.isRangeBar||(is.globals.initialMaxX)&&(i=h,a=c);var d={xaxis:{min:i,max:a}};s.config.chart.group||(d.yaxis=n),this.updateScrolledChart(d,i,a)}},{key:"updateScrolledChart",value:function(i,a,s){var r=this.w;this.ctx.updateHelpers._updateOptions(i,!1,!1),typeof r.config.chart.events.scrolled=="function"&&r.config.chart.events.scrolled(this.ctx,{xaxis:{min:a,max:s}})}}]),t}(),Nt=function(){function p(e){F(this,p),this.w=e.w,this.ttCtx=e,this.ctx=e.ctx}return R(p,[{key:"getNearestValues",value:function(e){var t=e.hoverArea,i=e.elGrid,a=e.clientX,s=e.clientY,r=this.w,n=i.getBoundingClientRect(),o=n.width,h=n.height,c=o/(r.globals.dataPoints-1),d=h/r.globals.dataPoints,g=this.hasBars();!r.globals.comboCharts&&!g||r.config.xaxis.convertedCatToNumeric||(c=o/r.globals.dataPoints);var f=a-n.left-r.globals.barPadForNumericAxis,x=s-n.top;f<0||x<0||f>o||x>h?(t.classList.remove("hovering-zoom"),t.classList.remove("hovering-pan")):r.globals.zoomEnabled?(t.classList.remove("hovering-pan"),t.classList.add("hovering-zoom")):r.globals.panEnabled&&(t.classList.remove("hovering-zoom"),t.classList.add("hovering-pan"));var b=Math.round(f/c),v=Math.floor(x/d);g&&!r.config.xaxis.convertedCatToNumeric&&(b=Math.ceil(f/c),b-=1);var y=null,w=null,l=r.globals.seriesXvalues.map(function(S){return S.filter(function(L){return P.isNumber(L)})}),u=r.globals.seriesYvalues.map(function(S){return S.filter(function(L){return P.isNumber(L)})});if(r.globals.isXNumeric){var m=this.ttCtx.getElGrid().getBoundingClientRect(),A=f*(m.width/o),k=x*(m.height/h);y=(w=this.closestInMultiArray(A,k,l,u)).index,b=w.j,y!==null&&(l=r.globals.seriesXvalues[y],b=(w=this.closestInArray(A,l)).index)}return r.globals.capturedSeriesIndex=y===null?-1:y,(!b||b<1)&&(b=0),r.globals.isBarHorizontal?r.globals.capturedDataPointIndex=v:r.globals.capturedDataPointIndex=b,{capturedSeries:y,j:r.globals.isBarHorizontal?v:b,hoverX:f,hoverY:x}}},{key:"closestInMultiArray",value:function(e,t,i,a){var s=this.w,r=0,n=null,o=-1;s.globals.series.length>1?r=this.getFirstActiveXArray(i):n=0;var h=i[r][0],c=Math.abs(e-h);if(i.forEach(function(f){f.forEach(function(x,b){var v=Math.abs(e-x);v<=c&&(c=v,o=b)})}),o!==-1){var d=a[r][o],g=Math.abs(t-d);n=r,a.forEach(function(f,x){var b=Math.abs(t-f[o]);b<=g&&(g=b,n=x)})}return{index:n,j:o}}},{key:"getFirstActiveXArray",value:function(e){for(var t=this.w,i=0,a=e.map(function(r,n){return r.length>0?n:-1}),s=0;s0)for(var a=0;a *")):this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-series-markers-wrap > *")}},{key:"getAllMarkers",value:function(){var e=this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-series-markers-wrap");(e=te(e)).sort(function(i,a){var s=Number(i.getAttribute("data:realIndex")),r=Number(a.getAttribute("data:realIndex"));return rs?-1:0});var t=[];return e.forEach(function(i){t.push(i.querySelector(".apexcharts-marker"))}),t}},{key:"hasMarkers",value:function(e){return this.getElMarkers(e).length>0}},{key:"getPathFromPoint",value:function(e,t){var i=Number(e.getAttribute("cx")),a=Number(e.getAttribute("cy")),s=e.getAttribute("shape");return new X(this.ctx).getMarkerPath(i,a,s,t)}},{key:"getElBars",value:function(){return this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-bar-series, .apexcharts-candlestick-series, .apexcharts-boxPlot-series, .apexcharts-rangebar-series")}},{key:"hasBars",value:function(){return this.getElBars().length>0}},{key:"getHoverMarkerSize",value:function(e){var t=this.w,i=t.config.markers.hover.size;return i===void 0&&(i=t.globals.markers.size[e]+t.config.markers.hover.sizeOffset),i}},{key:"toggleAllTooltipSeriesGroups",value:function(e){var t=this.w,i=this.ttCtx;i.allTooltipSeriesGroups.length===0&&(i.allTooltipSeriesGroups=t.globals.dom.baseEl.querySelectorAll(".apexcharts-tooltip-series-group"));for(var a=i.allTooltipSeriesGroups,s=0;s
').concat(C.attrs.name,""),L+="
".concat(C.val,"
")}),l.innerHTML=S+"",u.innerHTML=L+""};n?h.globals.seriesGoals[t][i]&&Array.isArray(h.globals.seriesGoals[t][i])?m():(l.innerHTML="",u.innerHTML=""):m()}else l.innerHTML="",u.innerHTML="";if(b!==null&&(a[t].querySelector(".apexcharts-tooltip-text-z-label").innerHTML=h.config.tooltip.z.title,a[t].querySelector(".apexcharts-tooltip-text-z-value").innerHTML=b!==void 0?b:""),n&&v[0]){if(h.config.tooltip.hideEmptySeries){var A=a[t].querySelector(".apexcharts-tooltip-marker"),k=a[t].querySelector(".apexcharts-tooltip-text");parseFloat(d)==0?(A.style.display="none",k.style.display="none"):(A.style.display="block",k.style.display="block")}d==null||h.globals.ancillaryCollapsedSeriesIndices.indexOf(t)>-1||h.globals.collapsedSeriesIndices.indexOf(t)>-1||Array.isArray(c.tConfig.enabledOnSeries)&&c.tConfig.enabledOnSeries.indexOf(t)===-1?v[0].parentNode.style.display="none":v[0].parentNode.style.display=h.config.tooltip.items.display}else Array.isArray(c.tConfig.enabledOnSeries)&&c.tConfig.enabledOnSeries.indexOf(t)===-1&&(v[0].parentNode.style.display="none")}},{key:"toggleActiveInactiveSeries",value:function(e,t){var i=this.w;if(e)this.tooltipUtil.toggleAllTooltipSeriesGroups("enable");else{this.tooltipUtil.toggleAllTooltipSeriesGroups("disable");var a=i.globals.dom.baseEl.querySelector(".apexcharts-tooltip-series-group-".concat(t));a&&(a.classList.add("apexcharts-active"),a.style.display=i.config.tooltip.items.display)}}},{key:"getValuesToPrint",value:function(e){var t=e.i,i=e.j,a=this.w,s=this.ctx.series.filteredSeriesX(),r="",n="",o=null,h=null,c={series:a.globals.series,seriesIndex:t,dataPointIndex:i,w:a},d=a.globals.ttZFormatter;i===null?h=a.globals.series[t]:a.globals.isXNumeric&&a.config.chart.type!=="treemap"?(r=s[t][i],s[t].length===0&&(r=s[this.tooltipUtil.getFirstActiveXArray(s)][i])):r=a.globals.labels[i]!==void 0?a.globals.labels[i]:"";var g=r;return a.globals.isXNumeric&&a.config.xaxis.type==="datetime"?r=new ze(this.ctx).xLabelFormat(a.globals.ttKeyFormatter,g,g,{i:void 0,dateFormatter:new K(this.ctx).formatDate,w:this.w}):r=a.globals.isBarHorizontal?a.globals.yLabelFormatters[0](g,c):a.globals.xLabelFormatter(g,c),a.config.tooltip.x.formatter!==void 0&&(r=a.globals.ttKeyFormatter(g,c)),a.globals.seriesZ.length>0&&a.globals.seriesZ[t].length>0&&(o=d(a.globals.seriesZ[t][i],a)),n=typeof a.config.xaxis.tooltip.formatter=="function"?a.globals.xaxisTooltipFormatter(g,c):r,{val:Array.isArray(h)?h.join(" "):h,xVal:Array.isArray(r)?r.join(" "):r,xAxisTTVal:Array.isArray(n)?n.join(" "):n,zVal:o}}},{key:"handleCustomTooltip",value:function(e){var t=e.i,i=e.j,a=e.y1,s=e.y2,r=e.w,n=this.ttCtx.getElTooltip(),o=r.config.tooltip.custom;Array.isArray(o)&&o[t]&&(o=o[t]),n.innerHTML=o({ctx:this.ctx,series:r.globals.series,seriesIndex:t,dataPointIndex:i,y1:a,y2:s,w:r})}}]),p}(),Wt=function(){function p(e){F(this,p),this.ttCtx=e,this.ctx=e.ctx,this.w=e.w}return R(p,[{key:"moveXCrosshairs",value:function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null,i=this.ttCtx,a=this.w,s=i.getElXCrosshairs(),r=e-i.xcrosshairsWidth/2,n=a.globals.labels.slice().length;if(t!==null&&(r=a.globals.gridWidth/n*t),s===null||a.globals.isBarHorizontal||(s.setAttribute("x",r),s.setAttribute("x1",r),s.setAttribute("x2",r),s.setAttribute("y2",a.globals.gridHeight),s.classList.add("apexcharts-active")),r<0&&(r=0),r>a.globals.gridWidth&&(r=a.globals.gridWidth),i.isXAxisTooltipEnabled){var o=r;a.config.xaxis.crosshairs.width!=="tickWidth"&&a.config.xaxis.crosshairs.width!=="barWidth"||(o=r+i.xcrosshairsWidth/2),this.moveXAxisTooltip(o)}}},{key:"moveYCrosshairs",value:function(e){var t=this.ttCtx;t.ycrosshairs!==null&&X.setAttrs(t.ycrosshairs,{y1:e,y2:e}),t.ycrosshairsHidden!==null&&X.setAttrs(t.ycrosshairsHidden,{y1:e,y2:e})}},{key:"moveXAxisTooltip",value:function(e){var t=this.w,i=this.ttCtx;if(i.xaxisTooltip!==null&&i.xcrosshairsWidth!==0){i.xaxisTooltip.classList.add("apexcharts-active");var a=i.xaxisOffY+t.config.xaxis.tooltip.offsetY+t.globals.translateY+1+t.config.xaxis.offsetY;if(e-=i.xaxisTooltip.getBoundingClientRect().width/2,!isNaN(e)){e+=t.globals.translateX;var s;s=new X(this.ctx).getTextRects(i.xaxisTooltipText.innerHTML),i.xaxisTooltipText.style.minWidth=s.width+"px",i.xaxisTooltip.style.left=e+"px",i.xaxisTooltip.style.top=a+"px"}}}},{key:"moveYAxisTooltip",value:function(e){var t=this.w,i=this.ttCtx;i.yaxisTTEls===null&&(i.yaxisTTEls=t.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxistooltip"));var a=parseInt(i.ycrosshairsHidden.getAttribute("y1"),10),s=t.globals.translateY+a,r=i.yaxisTTEls[e].getBoundingClientRect().height,n=t.globals.translateYAxisX[e]-2;t.config.yaxis[e].opposite&&(n-=26),s-=r/2,t.globals.ignoreYAxisIndexes.indexOf(e)===-1?(i.yaxisTTEls[e].classList.add("apexcharts-active"),i.yaxisTTEls[e].style.top=s+"px",i.yaxisTTEls[e].style.left=n+t.config.yaxis[e].tooltip.offsetX+"px"):i.yaxisTTEls[e].classList.remove("apexcharts-active")}},{key:"moveTooltip",value:function(e,t){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:null,a=this.w,s=this.ttCtx,r=s.getElTooltip(),n=s.tooltipRect,o=i!==null?parseFloat(i):1,h=parseFloat(e)+o+5,c=parseFloat(t)+o/2;if(h>a.globals.gridWidth/2&&(h=h-n.ttWidth-o-10),h>a.globals.gridWidth-n.ttWidth-10&&(h=a.globals.gridWidth-n.ttWidth),h<-20&&(h=-20),a.config.tooltip.followCursor){var d=s.getElGrid().getBoundingClientRect();(h=s.e.clientX-d.left)>a.globals.gridWidth/2&&(h-=s.tooltipRect.ttWidth),(c=s.e.clientY+a.globals.translateY-d.top)>a.globals.gridHeight/2&&(c-=s.tooltipRect.ttHeight)}else a.globals.isBarHorizontal||n.ttHeight/2+c>a.globals.gridHeight&&(c=a.globals.gridHeight-n.ttHeight+a.globals.translateY);isNaN(h)||(h+=a.globals.translateX,r.style.left=h+"px",r.style.top=c+"px")}},{key:"moveMarkers",value:function(e,t){var i=this.w,a=this.ttCtx;if(i.globals.markers.size[e]>0)for(var s=i.globals.dom.baseEl.querySelectorAll(" .apexcharts-series[data\\:realIndex='".concat(e,"'] .apexcharts-marker")),r=0;r0){var x=f.getAttribute("shape"),b=h.getMarkerPath(s,r,x,1.5*d);f.setAttribute("d",b)}this.moveXCrosshairs(s),o.fixedTooltip||this.moveTooltip(s,r,d)}}},{key:"moveDynamicPointsOnHover",value:function(e){var t,i=this.ttCtx,a=i.w,s=0,r=0,n=a.globals.pointsArray,o=new re(this.ctx),h=new X(this.ctx);t=o.getActiveConfigSeriesIndex("asc",["line","area","scatter","bubble"]);var c=i.tooltipUtil.getHoverMarkerSize(t);n[t]&&(s=n[t][e][0],r=n[t][e][1]);var d=i.tooltipUtil.getAllMarkers();if(d!==null)for(var g=0;g0){var w=h.getMarkerPath(s,x,v,c);d[g].setAttribute("d",w)}else d[g].setAttribute("d","")}}this.moveXCrosshairs(s),i.fixedTooltip||this.moveTooltip(s,r||a.globals.gridHeight,c)}},{key:"moveStickyTooltipOverBars",value:function(e,t){var i=this.w,a=this.ttCtx,s=i.globals.columnSeries?i.globals.columnSeries.length:i.globals.series.length,r=s>=2&&s%2==0?Math.floor(s/2):Math.floor(s/2)+1;i.globals.isBarHorizontal&&(r=new re(this.ctx).getActiveConfigSeriesIndex("desc")+1);var n=i.globals.dom.baseEl.querySelector(".apexcharts-bar-series .apexcharts-series[rel='".concat(r,"'] path[j='").concat(e,"'], .apexcharts-candlestick-series .apexcharts-series[rel='").concat(r,"'] path[j='").concat(e,"'], .apexcharts-boxPlot-series .apexcharts-series[rel='").concat(r,"'] path[j='").concat(e,"'], .apexcharts-rangebar-series .apexcharts-series[rel='").concat(r,"'] path[j='").concat(e,"']"));n||typeof t!="number"||(n=i.globals.dom.baseEl.querySelector(".apexcharts-bar-series .apexcharts-series[data\\:realIndex='".concat(t,"'] path[j='").concat(e,`'], + .apexcharts-candlestick-series .apexcharts-series[data\\:realIndex='`).concat(t,"'] path[j='").concat(e,`'], + .apexcharts-boxPlot-series .apexcharts-series[data\\:realIndex='`).concat(t,"'] path[j='").concat(e,`'], + .apexcharts-rangebar-series .apexcharts-series[data\\:realIndex='`).concat(t,"'] path[j='").concat(e,"']")));var o=n?parseFloat(n.getAttribute("cx")):0,h=n?parseFloat(n.getAttribute("cy")):0,c=n?parseFloat(n.getAttribute("barWidth")):0,d=a.getElGrid().getBoundingClientRect(),g=n&&(n.classList.contains("apexcharts-candlestick-area")||n.classList.contains("apexcharts-boxPlot-area"));i.globals.isXNumeric?(n&&!g&&(o-=s%2!=0?c/2:0),n&&g&&i.globals.comboCharts&&(o-=c/2)):i.globals.isBarHorizontal||(o=a.xAxisTicksPositions[e-1]+a.dataPointsDividedWidth/2,isNaN(o)&&(o=a.xAxisTicksPositions[e]-a.dataPointsDividedWidth/2)),i.globals.isBarHorizontal?h-=a.tooltipRect.ttHeight:i.config.tooltip.followCursor?h=a.e.clientY-d.top-a.tooltipRect.ttHeight/2:h+a.tooltipRect.ttHeight+15>i.globals.gridHeight&&(h=i.globals.gridHeight),i.globals.isBarHorizontal||this.moveXCrosshairs(o),a.fixedTooltip||this.moveTooltip(o,h||i.globals.gridHeight)}}]),p}(),$i=function(){function p(e){F(this,p),this.w=e.w,this.ttCtx=e,this.ctx=e.ctx,this.tooltipPosition=new Wt(e)}return R(p,[{key:"drawDynamicPoints",value:function(){var e=this.w,t=new X(this.ctx),i=new ye(this.ctx),a=e.globals.dom.baseEl.querySelectorAll(".apexcharts-series");a=te(a),e.config.chart.stacked&&a.sort(function(d,g){return parseFloat(d.getAttribute("data:realIndex"))-parseFloat(g.getAttribute("data:realIndex"))});for(var s=0;s2&&arguments[2]!==void 0?arguments[2]:null,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:null,s=this.w;s.config.chart.type!=="bubble"&&this.newPointSize(e,t);var r=t.getAttribute("cx"),n=t.getAttribute("cy");if(i!==null&&a!==null&&(r=i,n=a),this.tooltipPosition.moveXCrosshairs(r),!this.fixedTooltip){if(s.config.chart.type==="radar"){var o=this.ttCtx.getElGrid().getBoundingClientRect();r=this.ttCtx.e.clientX-o.left}this.tooltipPosition.moveTooltip(r,n,s.config.markers.hover.size)}}},{key:"enlargePoints",value:function(e){for(var t=this.w,i=this,a=this.ttCtx,s=e,r=t.globals.dom.baseEl.querySelectorAll(".apexcharts-series:not(.apexcharts-series-collapsed) .apexcharts-marker"),n=t.config.markers.hover.size,o=0;o=0){var a=this.ttCtx.tooltipUtil.getPathFromPoint(e[t],i);e[t].setAttribute("d",a)}else e[t].setAttribute("d","M0,0")}}}]),p}(),Ji=function(){function p(e){F(this,p),this.w=e.w;var t=this.w;this.ttCtx=e,this.isVerticalGroupedRangeBar=!t.globals.isBarHorizontal&&t.config.chart.type==="rangeBar"&&t.config.plotOptions.bar.rangeBarGroupRows}return R(p,[{key:"getAttr",value:function(e,t){return parseFloat(e.target.getAttribute(t))}},{key:"handleHeatTreeTooltip",value:function(e){var t=e.e,i=e.opt,a=e.x,s=e.y,r=e.type,n=this.ttCtx,o=this.w;if(t.target.classList.contains("apexcharts-".concat(r,"-rect"))){var h=this.getAttr(t,"i"),c=this.getAttr(t,"j"),d=this.getAttr(t,"cx"),g=this.getAttr(t,"cy"),f=this.getAttr(t,"width"),x=this.getAttr(t,"height");if(n.tooltipLabels.drawSeriesTexts({ttItems:i.ttItems,i:h,j:c,shared:!1,e:t}),o.globals.capturedSeriesIndex=h,o.globals.capturedDataPointIndex=c,a=d+n.tooltipRect.ttWidth/2+f,s=g+n.tooltipRect.ttHeight/2-x/2,n.tooltipPosition.moveXCrosshairs(d+f/2),a>o.globals.gridWidth/2&&(a=d-n.tooltipRect.ttWidth/2+f),n.w.config.tooltip.followCursor){var b=o.globals.dom.elWrap.getBoundingClientRect();a=o.globals.clientX-b.left-(a>o.globals.gridWidth/2?n.tooltipRect.ttWidth:0),s=o.globals.clientY-b.top-(s>o.globals.gridHeight/2?n.tooltipRect.ttHeight:0)}}return{x:a,y:s}}},{key:"handleMarkerTooltip",value:function(e){var t,i,a=e.e,s=e.opt,r=e.x,n=e.y,o=this.w,h=this.ttCtx;if(a.target.classList.contains("apexcharts-marker")){var c=parseInt(s.paths.getAttribute("cx"),10),d=parseInt(s.paths.getAttribute("cy"),10),g=parseFloat(s.paths.getAttribute("val"));if(i=parseInt(s.paths.getAttribute("rel"),10),t=parseInt(s.paths.parentNode.parentNode.parentNode.getAttribute("rel"),10)-1,h.intersect){var f=P.findAncestor(s.paths,"apexcharts-series");f&&(t=parseInt(f.getAttribute("data:realIndex"),10))}if(h.tooltipLabels.drawSeriesTexts({ttItems:s.ttItems,i:t,j:i,shared:!h.showOnIntersect&&o.config.tooltip.shared,e:a}),a.type==="mouseup"&&h.markerClick(a,t,i),o.globals.capturedSeriesIndex=t,o.globals.capturedDataPointIndex=i,r=c,n=d+o.globals.translateY-1.4*h.tooltipRect.ttHeight,h.w.config.tooltip.followCursor){var x=h.getElGrid().getBoundingClientRect();n=h.e.clientY+o.globals.translateY-x.top}g<0&&(n=d),h.marker.enlargeCurrentPoint(i,s.paths,r,n)}return{x:r,y:n}}},{key:"handleBarTooltip",value:function(e){var t,i,a=e.e,s=e.opt,r=this.w,n=this.ttCtx,o=n.getElTooltip(),h=0,c=0,d=0,g=this.getBarTooltipXY({e:a,opt:s});t=g.i;var f=g.j;r.globals.capturedSeriesIndex=t,r.globals.capturedDataPointIndex=f,r.globals.isBarHorizontal&&n.tooltipUtil.hasBars()||!r.config.tooltip.shared?(c=g.x,d=g.y,i=Array.isArray(r.config.stroke.width)?r.config.stroke.width[t]:r.config.stroke.width,h=c):r.globals.comboCharts||r.config.tooltip.shared||(h/=2),isNaN(d)&&(d=r.globals.svgHeight-n.tooltipRect.ttHeight);var x=parseInt(s.paths.parentNode.getAttribute("data:realIndex"),10);if(r.globals.isMultipleYAxis?r.config.yaxis[x]&&r.config.yaxis[x].reversed:r.config.yaxis[0].reversed,c+n.tooltipRect.ttWidth>r.globals.gridWidth?c-=n.tooltipRect.ttWidth:c<0&&(c=0),n.w.config.tooltip.followCursor){var b=n.getElGrid().getBoundingClientRect();d=n.e.clientY-b.top}n.tooltip===null&&(n.tooltip=r.globals.dom.baseEl.querySelector(".apexcharts-tooltip")),r.config.tooltip.shared||(r.globals.comboBarCount>0?n.tooltipPosition.moveXCrosshairs(h+i/2):n.tooltipPosition.moveXCrosshairs(h)),!n.fixedTooltip&&(!r.config.tooltip.shared||r.globals.isBarHorizontal&&n.tooltipUtil.hasBars())&&(d=d+r.globals.translateY-n.tooltipRect.ttHeight/2,o.style.left=c+r.globals.translateX+"px",o.style.top=d+"px")}},{key:"getBarTooltipXY",value:function(e){var t=this,i=e.e,a=e.opt,s=this.w,r=null,n=this.ttCtx,o=0,h=0,c=0,d=0,g=0,f=i.target.classList;if(f.contains("apexcharts-bar-area")||f.contains("apexcharts-candlestick-area")||f.contains("apexcharts-boxPlot-area")||f.contains("apexcharts-rangebar-area")){var x=i.target,b=x.getBoundingClientRect(),v=a.elGrid.getBoundingClientRect(),y=b.height;g=b.height;var w=b.width,l=parseInt(x.getAttribute("cx"),10),u=parseInt(x.getAttribute("cy"),10);d=parseFloat(x.getAttribute("barWidth"));var m=i.type==="touchmove"?i.touches[0].clientX:i.clientX;r=parseInt(x.getAttribute("j"),10),o=parseInt(x.parentNode.getAttribute("rel"),10)-1;var A=x.getAttribute("data-range-y1"),k=x.getAttribute("data-range-y2");s.globals.comboCharts&&(o=parseInt(x.parentNode.getAttribute("data:realIndex"),10));var S=function(C){return s.globals.isXNumeric?l-w/2:t.isVerticalGroupedRangeBar?l+w/2:l-n.dataPointsDividedWidth+w/2},L=function(){return u-n.dataPointsDividedHeight+y/2-n.tooltipRect.ttHeight/2};n.tooltipLabels.drawSeriesTexts({ttItems:a.ttItems,i:o,j:r,y1:A?parseInt(A,10):null,y2:k?parseInt(k,10):null,shared:!n.showOnIntersect&&s.config.tooltip.shared,e:i}),s.config.tooltip.followCursor?s.globals.isBarHorizontal?(h=m-v.left+15,c=L()):(h=S(),c=i.clientY-v.top-n.tooltipRect.ttHeight/2-15):s.globals.isBarHorizontal?((h=l)0&&i.setAttribute("width",t.xcrosshairsWidth)}},{key:"handleYCrosshair",value:function(){var e=this.w,t=this.ttCtx;t.ycrosshairs=e.globals.dom.baseEl.querySelector(".apexcharts-ycrosshairs"),t.ycrosshairsHidden=e.globals.dom.baseEl.querySelector(".apexcharts-ycrosshairs-hidden")}},{key:"drawYaxisTooltipText",value:function(e,t,i){var a=this.ttCtx,s=this.w,r=s.globals,n=r.seriesYAxisMap[e];if(a.yaxisTooltips[e]&&n.length>0){var o=r.yLabelFormatters[e],h=a.getElGrid().getBoundingClientRect(),c=n[0],d=0;i.yRatio.length>1&&(d=c);var g=(t-h.top)*i.yRatio[d],f=r.maxYArr[c]-r.minYArr[c],x=r.minYArr[c]+(f-g);s.config.yaxis[e].reversed&&(x=r.maxYArr[c]-(f-g)),a.tooltipPosition.moveYCrosshairs(t-h.top),a.yaxisTooltipText[e].innerHTML=o(x),a.tooltipPosition.moveYAxisTooltip(e)}}}]),p}(),At=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w;var t=this.w;this.tConfig=t.config.tooltip,this.tooltipUtil=new Nt(this),this.tooltipLabels=new Zi(this),this.tooltipPosition=new Wt(this),this.marker=new $i(this),this.intersect=new Ji(this),this.axesTooltip=new Ki(this),this.showOnIntersect=this.tConfig.intersect,this.showTooltipTitle=this.tConfig.x.show,this.fixedTooltip=this.tConfig.fixed.enabled,this.xaxisTooltip=null,this.yaxisTTEls=null,this.isBarShared=!t.globals.isBarHorizontal&&this.tConfig.shared,this.lastHoverTime=Date.now()}return R(p,[{key:"getElTooltip",value:function(e){return e||(e=this),e.w.globals.dom.baseEl?e.w.globals.dom.baseEl.querySelector(".apexcharts-tooltip"):null}},{key:"getElXCrosshairs",value:function(){return this.w.globals.dom.baseEl.querySelector(".apexcharts-xcrosshairs")}},{key:"getElGrid",value:function(){return this.w.globals.dom.baseEl.querySelector(".apexcharts-grid")}},{key:"drawTooltip",value:function(e){var t=this.w;this.xyRatios=e,this.isXAxisTooltipEnabled=t.config.xaxis.tooltip.enabled&&t.globals.axisCharts,this.yaxisTooltips=t.config.yaxis.map(function(r,n){return!!(r.show&&r.tooltip.enabled&&t.globals.axisCharts)}),this.allTooltipSeriesGroups=[],t.globals.axisCharts||(this.showTooltipTitle=!1);var i=document.createElement("div");if(i.classList.add("apexcharts-tooltip"),t.config.tooltip.cssClass&&i.classList.add(t.config.tooltip.cssClass),i.classList.add("apexcharts-theme-".concat(this.tConfig.theme)),t.globals.dom.elWrap.appendChild(i),t.globals.axisCharts){this.axesTooltip.drawXaxisTooltip(),this.axesTooltip.drawYaxisTooltip(),this.axesTooltip.setXCrosshairWidth(),this.axesTooltip.handleYCrosshair();var a=new Me(this.ctx);this.xAxisTicksPositions=a.getXAxisTicksPositions()}if(!t.globals.comboCharts&&!this.tConfig.intersect&&t.config.chart.type!=="rangeBar"||this.tConfig.shared||(this.showOnIntersect=!0),t.config.markers.size!==0&&t.globals.markers.largestSize!==0||this.marker.drawDynamicPoints(this),t.globals.collapsedSeries.length!==t.globals.series.length){this.dataPointsDividedHeight=t.globals.gridHeight/t.globals.dataPoints,this.dataPointsDividedWidth=t.globals.gridWidth/t.globals.dataPoints,this.showTooltipTitle&&(this.tooltipTitle=document.createElement("div"),this.tooltipTitle.classList.add("apexcharts-tooltip-title"),this.tooltipTitle.style.fontFamily=this.tConfig.style.fontFamily||t.config.chart.fontFamily,this.tooltipTitle.style.fontSize=this.tConfig.style.fontSize,i.appendChild(this.tooltipTitle));var s=t.globals.series.length;(t.globals.xyCharts||t.globals.comboCharts)&&this.tConfig.shared&&(s=this.showOnIntersect?1:t.globals.series.length),this.legendLabels=t.globals.dom.baseEl.querySelectorAll(".apexcharts-legend-text"),this.ttItems=this.createTTElements(s),this.addSVGEvents()}}},{key:"createTTElements",value:function(e){for(var t=this,i=this.w,a=[],s=this.getElTooltip(),r=function(o){var h=document.createElement("div");h.classList.add("apexcharts-tooltip-series-group","apexcharts-tooltip-series-group-".concat(o)),h.style.order=i.config.tooltip.inverseOrder?e-o:o+1;var c=document.createElement("span");c.classList.add("apexcharts-tooltip-marker"),c.style.backgroundColor=i.globals.colors[o],h.appendChild(c);var d=document.createElement("div");d.classList.add("apexcharts-tooltip-text"),d.style.fontFamily=t.tConfig.style.fontFamily||i.config.chart.fontFamily,d.style.fontSize=t.tConfig.style.fontSize,["y","goals","z"].forEach(function(g){var f=document.createElement("div");f.classList.add("apexcharts-tooltip-".concat(g,"-group"));var x=document.createElement("span");x.classList.add("apexcharts-tooltip-text-".concat(g,"-label")),f.appendChild(x);var b=document.createElement("span");b.classList.add("apexcharts-tooltip-text-".concat(g,"-value")),f.appendChild(b),d.appendChild(f)}),h.appendChild(d),s.appendChild(h),a.push(h)},n=0;n0&&this.addPathsEventListeners(x,d),this.tooltipUtil.hasBars()&&!this.tConfig.shared&&this.addDatapointEventsListeners(d)}}},{key:"drawFixedTooltipRect",value:function(){var e=this.w,t=this.getElTooltip(),i=t.getBoundingClientRect(),a=i.width+10,s=i.height+10,r=this.tConfig.fixed.offsetX,n=this.tConfig.fixed.offsetY,o=this.tConfig.fixed.position.toLowerCase();return o.indexOf("right")>-1&&(r=r+e.globals.svgWidth-a+10),o.indexOf("bottom")>-1&&(n=n+e.globals.svgHeight-s-10),t.style.left=r+"px",t.style.top=n+"px",{x:r,y:n,ttWidth:a,ttHeight:s}}},{key:"addDatapointEventsListeners",value:function(e){var t=this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-series-markers .apexcharts-marker, .apexcharts-bar-area, .apexcharts-candlestick-area, .apexcharts-boxPlot-area, .apexcharts-rangebar-area");this.addPathsEventListeners(t,e)}},{key:"addPathsEventListeners",value:function(e,t){for(var i=this,a=function(r){var n={paths:e[r],tooltipEl:t.tooltipEl,tooltipY:t.tooltipY,tooltipX:t.tooltipX,elGrid:t.elGrid,hoverArea:t.hoverArea,ttItems:t.ttItems};["mousemove","mouseup","touchmove","mouseout","touchend"].map(function(o){return e[r].addEventListener(o,i.onSeriesHover.bind(i,n),{capture:!1,passive:!0})})},s=0;s=100?this.seriesHover(e,t):(clearTimeout(this.seriesHoverTimeout),this.seriesHoverTimeout=setTimeout(function(){i.seriesHover(e,t)},100-a))}},{key:"seriesHover",value:function(e,t){var i=this;this.lastHoverTime=Date.now();var a=[],s=this.w;s.config.chart.group&&(a=this.ctx.getGroupedCharts()),s.globals.axisCharts&&(s.globals.minX===-1/0&&s.globals.maxX===1/0||s.globals.dataPoints===0)||(a.length?a.forEach(function(r){var n=i.getElTooltip(r),o={paths:e.paths,tooltipEl:n,tooltipY:e.tooltipY,tooltipX:e.tooltipX,elGrid:e.elGrid,hoverArea:e.hoverArea,ttItems:r.w.globals.tooltip.ttItems};r.w.globals.minX===i.w.globals.minX&&r.w.globals.maxX===i.w.globals.maxX&&r.w.globals.tooltip.seriesHoverByContext({chartCtx:r,ttCtx:r.w.globals.tooltip,opt:o,e:t})}):this.seriesHoverByContext({chartCtx:this.ctx,ttCtx:this.w.globals.tooltip,opt:e,e:t}))}},{key:"seriesHoverByContext",value:function(e){var t=e.chartCtx,i=e.ttCtx,a=e.opt,s=e.e,r=t.w,n=this.getElTooltip(t);n&&(i.tooltipRect={x:0,y:0,ttWidth:n.getBoundingClientRect().width,ttHeight:n.getBoundingClientRect().height},i.e=s,i.tooltipUtil.hasBars()&&!r.globals.comboCharts&&!i.isBarShared&&this.tConfig.onDatasetHover.highlightDataSeries&&new re(t).toggleSeriesOnHover(s,s.target.parentNode),i.fixedTooltip&&i.drawFixedTooltipRect(),r.globals.axisCharts?i.axisChartsTooltips({e:s,opt:a,tooltipRect:i.tooltipRect}):i.nonAxisChartsTooltips({e:s,opt:a,tooltipRect:i.tooltipRect}))}},{key:"axisChartsTooltips",value:function(e){var t,i,a=e.e,s=e.opt,r=this.w,n=s.elGrid.getBoundingClientRect(),o=a.type==="touchmove"?a.touches[0].clientX:a.clientX,h=a.type==="touchmove"?a.touches[0].clientY:a.clientY;if(this.clientY=h,this.clientX=o,r.globals.capturedSeriesIndex=-1,r.globals.capturedDataPointIndex=-1,hn.top+n.height)this.handleMouseOut(s);else{if(Array.isArray(this.tConfig.enabledOnSeries)&&!r.config.tooltip.shared){var c=parseInt(s.paths.getAttribute("index"),10);if(this.tConfig.enabledOnSeries.indexOf(c)<0)return void this.handleMouseOut(s)}var d=this.getElTooltip(),g=this.getElXCrosshairs(),f=[];r.config.chart.group&&(f=this.ctx.getSyncedCharts());var x=r.globals.xyCharts||r.config.chart.type==="bar"&&!r.globals.isBarHorizontal&&this.tooltipUtil.hasBars()&&this.tConfig.shared||r.globals.comboCharts&&this.tooltipUtil.hasBars();if(a.type==="mousemove"||a.type==="touchmove"||a.type==="mouseup"){if(r.globals.collapsedSeries.length+r.globals.ancillaryCollapsedSeries.length===r.globals.series.length)return;g!==null&&g.classList.add("apexcharts-active");var b=this.yaxisTooltips.filter(function(w){return w===!0});if(this.ycrosshairs!==null&&b.length&&this.ycrosshairs.classList.add("apexcharts-active"),x&&!this.showOnIntersect||f.length>1)this.handleStickyTooltip(a,o,h,s);else if(r.config.chart.type==="heatmap"||r.config.chart.type==="treemap"){var v=this.intersect.handleHeatTreeTooltip({e:a,opt:s,x:t,y:i,type:r.config.chart.type});t=v.x,i=v.y,d.style.left=t+"px",d.style.top=i+"px"}else this.tooltipUtil.hasBars()&&this.intersect.handleBarTooltip({e:a,opt:s}),this.tooltipUtil.hasMarkers()&&this.intersect.handleMarkerTooltip({e:a,opt:s,x:t,y:i});if(this.yaxisTooltips.length)for(var y=0;yh.width)this.handleMouseOut(a);else if(o!==null)this.handleStickyCapturedSeries(e,o,a,n);else if(this.tooltipUtil.isXoverlap(n)||s.globals.isBarHorizontal){var c=s.globals.series.findIndex(function(d,g){return!s.globals.collapsedSeriesIndices.includes(g)});this.create(e,this,c,n,a.ttItems)}}},{key:"handleStickyCapturedSeries",value:function(e,t,i,a){var s=this.w;if(!this.tConfig.shared&&s.globals.series[t][a]===null)return void this.handleMouseOut(i);if(s.globals.series[t][a]!==void 0)this.tConfig.shared&&this.tooltipUtil.isXoverlap(a)&&this.tooltipUtil.isInitialSeriesSameLen()?this.create(e,this,t,a,i.ttItems):this.create(e,this,t,a,i.ttItems,!1);else if(this.tooltipUtil.isXoverlap(a)){var r=s.globals.series.findIndex(function(n,o){return!s.globals.collapsedSeriesIndices.includes(o)});this.create(e,this,r,a,i.ttItems)}}},{key:"deactivateHoverFilter",value:function(){for(var e=this.w,t=new X(this.ctx),i=e.globals.dom.Paper.select(".apexcharts-bar-area"),a=0;a5&&arguments[5]!==void 0?arguments[5]:null,k=this.w,S=t;e.type==="mouseup"&&this.markerClick(e,i,a),A===null&&(A=this.tConfig.shared);var L=this.tooltipUtil.hasMarkers(i),C=this.tooltipUtil.getElBars();if(k.config.legend.tooltipHoverFormatter){var I=k.config.legend.tooltipHoverFormatter,z=Array.from(this.legendLabels);z.forEach(function(q){var Z=q.getAttribute("data:default-text");q.innerHTML=decodeURIComponent(Z)});for(var M=0;M0?S.marker.enlargePoints(a):S.tooltipPosition.moveDynamicPointsOnHover(a);else if(this.tooltipUtil.hasBars()&&(this.barSeriesHeight=this.tooltipUtil.getBarsHeight(C),this.barSeriesHeight>0)){var W=new X(this.ctx),N=k.globals.dom.Paper.select(".apexcharts-bar-area[j='".concat(a,"']"));this.deactivateHoverFilter(),this.tooltipPosition.moveStickyTooltipOverBars(a,i);for(var B=0;B0&&t.config.plotOptions.bar.hideZeroBarsWhenGrouped&&(f-=c*k)),A&&(f=f+g.height/2-w/2-2);var L=t.globals.series[i][a]<0,C=o;switch(this.barCtx.isReversed&&(C=o+(L?d:-d)),v.position){case"center":x=A?L?C-d/2+u:C+d/2-u:L?C-d/2+g.height/2+u:C+d/2+g.height/2-u;break;case"bottom":x=A?L?C-d+u:C+d-u:L?C-d+g.height+w+u:C+d-g.height/2+w-u;break;case"top":x=A?L?C+u:C-u:L?C-g.height/2-u:C+g.height+u}if(this.barCtx.lastActiveBarSerieIndex===s&&y.enabled){var I=new X(this.barCtx.ctx).getTextRects(this.getStackedTotalDataLabel({realIndex:s,j:a}),b.fontSize);r=L?C-I.height/2-u-y.offsetY+18:C+I.height+u+y.offsetY-18;var z=S;n=m+(t.globals.isXNumeric?-c*t.globals.barGroups.length/2:t.globals.barGroups.length*c/2-(t.globals.barGroups.length-1)*c-z)+y.offsetX}return t.config.chart.stacked||(x<0?x=0+w:x+g.height/3>t.globals.gridHeight&&(x=t.globals.gridHeight-w)),{bcx:h,bcy:o,dataLabelsX:f,dataLabelsY:x,totalDataLabelsX:n,totalDataLabelsY:r,totalDataLabelsAnchor:"middle"}}},{key:"calculateBarsDataLabelsPosition",value:function(e){var t=this.w,i=e.x,a=e.i,s=e.j,r=e.realIndex,n=e.bcy,o=e.barHeight,h=e.barWidth,c=e.textRects,d=e.dataLabelsX,g=e.strokeWidth,f=e.dataLabelsConfig,x=e.barDataLabelsConfig,b=e.barTotalDataLabelsConfig,v=e.offX,y=e.offY,w=t.globals.gridHeight/t.globals.dataPoints;h=Math.abs(h);var l,u,m=n-(this.barCtx.isRangeBar?0:w)+o/2+c.height/2+y-3,A="start",k=t.globals.series[a][s]<0,S=i;switch(this.barCtx.isReversed&&(S=i+(k?-h:h),A=k?"start":"end"),x.position){case"center":d=k?S+h/2-v:Math.max(c.width/2,S-h/2)+v;break;case"bottom":d=k?S+h-g-v:S-h+g+v;break;case"top":d=k?S-g-v:S-g+v}if(this.barCtx.lastActiveBarSerieIndex===r&&b.enabled){var L=new X(this.barCtx.ctx).getTextRects(this.getStackedTotalDataLabel({realIndex:r,j:s}),f.fontSize);k?(l=S-g-v-b.offsetX,A="end"):l=S+v+b.offsetX+(this.barCtx.isReversed?-(h+g):g),u=m-c.height/2+L.height/2+b.offsetY+g}return t.config.chart.stacked||(f.textAnchor==="start"?d-c.width<0?d=k?c.width+g:g:d+c.width>t.globals.gridWidth&&(d=k?t.globals.gridWidth-g:t.globals.gridWidth-c.width-g):f.textAnchor==="middle"?d-c.width/2<0?d=c.width/2+g:d+c.width/2>t.globals.gridWidth&&(d=t.globals.gridWidth-c.width/2-g):f.textAnchor==="end"&&(d<1?d=c.width+g:d+1>t.globals.gridWidth&&(d=t.globals.gridWidth-c.width-g))),{bcx:i,bcy:n,dataLabelsX:d,dataLabelsY:m,totalDataLabelsX:l,totalDataLabelsY:u,totalDataLabelsAnchor:A}}},{key:"drawCalculatedDataLabels",value:function(e){var t=e.x,i=e.y,a=e.val,s=e.i,r=e.j,n=e.textRects,o=e.barHeight,h=e.barWidth,c=e.dataLabelsConfig,d=this.w,g="rotate(0)";d.config.plotOptions.bar.dataLabels.orientation==="vertical"&&(g="rotate(-90, ".concat(t,", ").concat(i,")"));var f=new be(this.barCtx.ctx),x=new X(this.barCtx.ctx),b=c.formatter,v=null,y=d.globals.collapsedSeriesIndices.indexOf(s)>-1;if(c.enabled&&!y){v=x.group({class:"apexcharts-data-labels",transform:g});var w="";a!==void 0&&(w=b(a,Y(Y({},d),{},{seriesIndex:s,dataPointIndex:r,w:d}))),!a&&d.config.plotOptions.bar.hideZeroBarsWhenGrouped&&(w="");var l=d.globals.series[s][r]<0,u=d.config.plotOptions.bar.dataLabels.position;d.config.plotOptions.bar.dataLabels.orientation==="vertical"&&(u==="top"&&(c.textAnchor=l?"end":"start"),u==="center"&&(c.textAnchor="middle"),u==="bottom"&&(c.textAnchor=l?"end":"start")),this.barCtx.isRangeBar&&this.barCtx.barOptions.dataLabels.hideOverflowingLabels&&hMath.abs(h)&&(w=""):n.height/1.6>Math.abs(o)&&(w=""));var m=Y({},c);this.barCtx.isHorizontal&&a<0&&(c.textAnchor==="start"?m.textAnchor="end":c.textAnchor==="end"&&(m.textAnchor="start")),f.plotDataLabelsText({x:t,y:i,text:w,i:s,j:r,parent:v,dataLabelsConfig:m,alwaysDrawDataLabel:!0,offsetCorrection:!0})}return v}},{key:"drawTotalDataLabels",value:function(e){var t=e.x,i=e.y,a=e.val,s=e.realIndex,r=e.textAnchor,n=e.barTotalDataLabelsConfig;this.w;var o,h=new X(this.barCtx.ctx);return n.enabled&&t!==void 0&&i!==void 0&&this.barCtx.lastActiveBarSerieIndex===s&&(o=h.drawText({x:t,y:i,foreColor:n.style.color,text:a,textAnchor:r,fontFamily:n.style.fontFamily,fontSize:n.style.fontSize,fontWeight:n.style.fontWeight})),o}}]),p}(),ea=function(){function p(e){F(this,p),this.w=e.w,this.barCtx=e}return R(p,[{key:"initVariables",value:function(e){var t=this.w;this.barCtx.series=e,this.barCtx.totalItems=0,this.barCtx.seriesLen=0,this.barCtx.visibleI=-1,this.barCtx.visibleItems=1;for(var i=0;i0&&(this.barCtx.seriesLen=this.barCtx.seriesLen+1,this.barCtx.totalItems+=e[i].length),t.globals.isXNumeric)for(var a=0;at.globals.minX&&t.globals.seriesX[i][a]0&&(a=h.globals.minXDiff/g),(r=a/d*parseInt(this.barCtx.barOptions.columnWidth,10)/100)<1&&(r=1)}String(this.barCtx.barOptions.columnWidth).indexOf("%")===-1&&(r=parseInt(this.barCtx.barOptions.columnWidth,10)),n=h.globals.gridHeight-this.barCtx.baseLineY[this.barCtx.translationsIndex]-(this.barCtx.isReversed?h.globals.gridHeight:0)+(this.barCtx.isReversed?2*this.barCtx.baseLineY[this.barCtx.translationsIndex]:0),e=h.globals.padHorizontal+(a-r*this.barCtx.seriesLen)/2}return h.globals.barHeight=s,h.globals.barWidth=r,{x:e,y:t,yDivision:i,xDivision:a,barHeight:s,barWidth:r,zeroH:n,zeroW:o}}},{key:"initializeStackedPrevVars",value:function(e){e.w.globals.seriesGroups.forEach(function(t){e[t]||(e[t]={}),e[t].prevY=[],e[t].prevX=[],e[t].prevYF=[],e[t].prevXF=[],e[t].prevYVal=[],e[t].prevXVal=[]})}},{key:"initializeStackedXYVars",value:function(e){e.w.globals.seriesGroups.forEach(function(t){e[t]||(e[t]={}),e[t].xArrj=[],e[t].xArrjF=[],e[t].xArrjVal=[],e[t].yArrj=[],e[t].yArrjF=[],e[t].yArrjVal=[]})}},{key:"getPathFillColor",value:function(e,t,i,a){var s,r,n,o,h,c=this.w,d=this.barCtx.ctx.fill,g=null,f=this.barCtx.barOptions.distributed?i:t;return this.barCtx.barOptions.colors.ranges.length>0&&this.barCtx.barOptions.colors.ranges.map(function(x){e[t][i]>=x.from&&e[t][i]<=x.to&&(g=x.color)}),(s=c.config.series[t].data[i])!==null&&s!==void 0&&s.fillColor&&(g=c.config.series[t].data[i].fillColor),d.fillPath({seriesNumber:this.barCtx.barOptions.distributed?f:a,dataPointIndex:i,color:g,value:e[t][i],fillConfig:(r=c.config.series[t].data[i])===null||r===void 0?void 0:r.fill,fillType:(n=c.config.series[t].data[i])!==null&&n!==void 0&&(o=n.fill)!==null&&o!==void 0&&o.type?(h=c.config.series[t].data[i])===null||h===void 0?void 0:h.fill.type:Array.isArray(c.config.fill.type)?c.config.fill.type[a]:c.config.fill.type})}},{key:"getStrokeWidth",value:function(e,t,i){var a=0,s=this.w;return this.barCtx.series[e][t]===void 0||this.barCtx.series[e][t]===null?this.barCtx.isNullValue=!0:this.barCtx.isNullValue=!1,s.config.stroke.show&&(this.barCtx.isNullValue||(a=Array.isArray(this.barCtx.strokeWidth)?this.barCtx.strokeWidth[i]:this.barCtx.strokeWidth)),a}},{key:"shouldApplyRadius",value:function(e){var t=this.w,i=!1;return t.config.plotOptions.bar.borderRadius>0&&(t.config.chart.stacked&&t.config.plotOptions.bar.borderRadiusWhenStacked==="last"?this.barCtx.lastActiveBarSerieIndex===e&&(i=!0):i=!0),i}},{key:"barBackground",value:function(e){var t=e.j,i=e.i,a=e.x1,s=e.x2,r=e.y1,n=e.y2,o=e.elSeries,h=this.w,c=new X(this.barCtx.ctx),d=new re(this.barCtx.ctx).getActiveConfigSeriesIndex();if(this.barCtx.barOptions.colors.backgroundBarColors.length>0&&d===i){t>=this.barCtx.barOptions.colors.backgroundBarColors.length&&(t%=this.barCtx.barOptions.colors.backgroundBarColors.length);var g=this.barCtx.barOptions.colors.backgroundBarColors[t],f=c.drawRect(a!==void 0?a:0,r!==void 0?r:0,s!==void 0?s:h.globals.gridWidth,n!==void 0?n:h.globals.gridHeight,this.barCtx.barOptions.colors.backgroundBarRadius,g,this.barCtx.barOptions.colors.backgroundBarOpacity);o.add(f),f.node.classList.add("apexcharts-backgroundBar")}}},{key:"getColumnPaths",value:function(e){var t,i=e.barWidth,a=e.barXPosition,s=e.y1,r=e.y2,n=e.strokeWidth,o=e.seriesGroup,h=e.realIndex,c=e.i,d=e.j,g=e.w,f=new X(this.barCtx.ctx);(n=Array.isArray(n)?n[h]:n)||(n=0);var x=i,b=a;(t=g.config.series[h].data[d])!==null&&t!==void 0&&t.columnWidthOffset&&(b=a-g.config.series[h].data[d].columnWidthOffset/2,x=i+g.config.series[h].data[d].columnWidthOffset);var v=n/2,y=b+v,w=b+x-v;s+=.001-v,r+=.001+v;var l=f.move(y,s),u=f.move(y,s),m=f.line(w,s);if(g.globals.previousPaths.length>0&&(u=this.barCtx.getPreviousPath(h,d,!1)),l=l+f.line(y,r)+f.line(w,r)+f.line(w,s)+(g.config.plotOptions.bar.borderRadiusApplication==="around"?" Z":" z"),u=u+f.line(y,s)+m+m+m+m+m+f.line(y,s)+(g.config.plotOptions.bar.borderRadiusApplication==="around"?" Z":" z"),this.shouldApplyRadius(h)&&(l=f.roundPathCorners(l,g.config.plotOptions.bar.borderRadius)),g.config.chart.stacked){var A=this.barCtx;(A=this.barCtx[o]).yArrj.push(r-v),A.yArrjF.push(Math.abs(s-r+n)),A.yArrjVal.push(this.barCtx.series[c][d])}return{pathTo:l,pathFrom:u}}},{key:"getBarpaths",value:function(e){var t,i=e.barYPosition,a=e.barHeight,s=e.x1,r=e.x2,n=e.strokeWidth,o=e.seriesGroup,h=e.realIndex,c=e.i,d=e.j,g=e.w,f=new X(this.barCtx.ctx);(n=Array.isArray(n)?n[h]:n)||(n=0);var x=i,b=a;(t=g.config.series[h].data[d])!==null&&t!==void 0&&t.barHeightOffset&&(x=i-g.config.series[h].data[d].barHeightOffset/2,b=a+g.config.series[h].data[d].barHeightOffset);var v=n/2,y=x+v,w=x+b-v;s+=.001-v,r+=.001+v;var l=f.move(s,y),u=f.move(s,y);g.globals.previousPaths.length>0&&(u=this.barCtx.getPreviousPath(h,d,!1));var m=f.line(s,w);if(l=l+f.line(r,y)+f.line(r,w)+m+(g.config.plotOptions.bar.borderRadiusApplication==="around"?" Z":" z"),u=u+f.line(s,y)+m+m+m+m+m+f.line(s,y)+(g.config.plotOptions.bar.borderRadiusApplication==="around"?" Z":" z"),this.shouldApplyRadius(h)&&(l=f.roundPathCorners(l,g.config.plotOptions.bar.borderRadius)),g.config.chart.stacked){var A=this.barCtx;(A=this.barCtx[o]).xArrj.push(r+v),A.xArrjF.push(Math.abs(s-r)),A.xArrjVal.push(this.barCtx.series[c][d])}return{pathTo:l,pathFrom:u}}},{key:"checkZeroSeries",value:function(e){for(var t=e.series,i=this.w,a=0;a2&&arguments[2]!==void 0)||arguments[2]?t:null;return e!=null&&(i=t+e/this.barCtx.invertedYRatio-2*(this.barCtx.isReversed?e/this.barCtx.invertedYRatio:0)),i}},{key:"getYForValue",value:function(e,t,i){var a=!(arguments.length>3&&arguments[3]!==void 0)||arguments[3]?t:null;return e!=null&&(a=t-e/this.barCtx.yRatio[i]+2*(this.barCtx.isReversed?e/this.barCtx.yRatio[i]:0)),a}},{key:"getGoalValues",value:function(e,t,i,a,s,r){var n=this,o=this.w,h=[],c=function(f,x){var b;h.push((Oe(b={},e,e==="x"?n.getXForValue(f,t,!1):n.getYForValue(f,i,r,!1)),Oe(b,"attrs",x),b))};if(o.globals.seriesGoals[a]&&o.globals.seriesGoals[a][s]&&Array.isArray(o.globals.seriesGoals[a][s])&&o.globals.seriesGoals[a][s].forEach(function(f){c(f.value,f)}),this.barCtx.barOptions.isDumbbell&&o.globals.seriesRange.length){var d=this.barCtx.barOptions.dumbbellColors?this.barCtx.barOptions.dumbbellColors:o.globals.colors,g={strokeHeight:e==="x"?0:o.globals.markers.size[a],strokeWidth:e==="x"?o.globals.markers.size[a]:0,strokeDashArray:0,strokeLineCap:"round",strokeColor:Array.isArray(d[a])?d[a][0]:d[a]};c(o.globals.seriesRangeStart[a][s],g),c(o.globals.seriesRangeEnd[a][s],Y(Y({},g),{},{strokeColor:Array.isArray(d[a])?d[a][1]:d[a]}))}return h}},{key:"drawGoalLine",value:function(e){var t=e.barXPosition,i=e.barYPosition,a=e.goalX,s=e.goalY,r=e.barWidth,n=e.barHeight,o=new X(this.barCtx.ctx),h=o.group({className:"apexcharts-bar-goals-groups"});h.node.classList.add("apexcharts-element-hidden"),this.barCtx.w.globals.delayedElements.push({el:h.node}),h.attr("clip-path","url(#gridRectMarkerMask".concat(this.barCtx.w.globals.cuid,")"));var c=null;return this.barCtx.isHorizontal?Array.isArray(a)&&a.forEach(function(d){if(d.x>=-1&&d.x<=o.w.globals.gridWidth+1){var g=d.attrs.strokeHeight!==void 0?d.attrs.strokeHeight:n/2,f=i+g+n/2;c=o.drawLine(d.x,f-2*g,d.x,f,d.attrs.strokeColor?d.attrs.strokeColor:void 0,d.attrs.strokeDashArray,d.attrs.strokeWidth?d.attrs.strokeWidth:2,d.attrs.strokeLineCap),h.add(c)}}):Array.isArray(s)&&s.forEach(function(d){if(d.y>=-1&&d.y<=o.w.globals.gridHeight+1){var g=d.attrs.strokeWidth!==void 0?d.attrs.strokeWidth:r/2,f=t+g+r/2;c=o.drawLine(f-2*g,d.y,f,d.y,d.attrs.strokeColor?d.attrs.strokeColor:void 0,d.attrs.strokeDashArray,d.attrs.strokeHeight?d.attrs.strokeHeight:2,d.attrs.strokeLineCap),h.add(c)}}),h}},{key:"drawBarShadow",value:function(e){var t=e.prevPaths,i=e.currPaths,a=e.color,s=this.w,r=t.x,n=t.x1,o=t.barYPosition,h=i.x,c=i.x1,d=i.barYPosition,g=o+i.barHeight,f=new X(this.barCtx.ctx),x=new P,b=f.move(n,g)+f.line(r,g)+f.line(h,d)+f.line(c,d)+f.line(n,g)+(s.config.plotOptions.bar.borderRadiusApplication==="around"?" Z":" z");return f.drawPath({d:b,fill:x.shadeColor(.5,P.rgb2hex(a)),stroke:"none",strokeWidth:0,fillOpacity:1,classes:"apexcharts-bar-shadows"})}},{key:"getZeroValueEncounters",value:function(e){var t,i=e.i,a=e.j,s=this.w,r=0,n=0;return(s.config.plotOptions.bar.horizontal?s.globals.series.map(function(o,h){return h}):((t=s.globals.columnSeries)===null||t===void 0?void 0:t.i.map(function(o){return o}))||[]).forEach(function(o){var h=s.globals.seriesPercent[o][a];h&&r++,o-1}),a=this.barCtx.columnGroupIndices,s=a.indexOf(i);return s<0&&(a.push(i),s=a.length-1),{groupIndex:i,columnGroupIndex:s}}}]),p}(),me=function(){function p(e,t){F(this,p),this.ctx=e,this.w=e.w;var i=this.w;this.barOptions=i.config.plotOptions.bar,this.isHorizontal=this.barOptions.horizontal,this.strokeWidth=i.config.stroke.width,this.isNullValue=!1,this.isRangeBar=i.globals.seriesRange.length&&this.isHorizontal,this.isVerticalGroupedRangeBar=!i.globals.isBarHorizontal&&i.globals.seriesRange.length&&i.config.plotOptions.bar.rangeBarGroupRows,this.isFunnel=this.barOptions.isFunnel,this.xyRatios=t,this.xyRatios!==null&&(this.xRatio=t.xRatio,this.yRatio=t.yRatio,this.invertedXRatio=t.invertedXRatio,this.invertedYRatio=t.invertedYRatio,this.baseLineY=t.baseLineY,this.baseLineInvertedY=t.baseLineInvertedY),this.yaxisIndex=0,this.translationsIndex=0,this.seriesLen=0,this.pathArr=[];var a=new re(this.ctx);this.lastActiveBarSerieIndex=a.getActiveConfigSeriesIndex("desc",["bar","column"]),this.columnGroupIndices=[];var s=a.getBarSeriesIndices(),r=new $(this.ctx);this.stackedSeriesTotals=r.getStackedSeriesTotals(this.w.config.series.map(function(n,o){return s.indexOf(o)===-1?o:-1}).filter(function(n){return n!==-1})),this.barHelpers=new ea(this)}return R(p,[{key:"draw",value:function(e,t){var i=this.w,a=new X(this.ctx),s=new $(this.ctx,i);e=s.getLogSeries(e),this.series=e,this.yRatio=s.getLogYRatios(this.yRatio),this.barHelpers.initVariables(e);var r=a.group({class:"apexcharts-bar-series apexcharts-plot-series"});i.config.dataLabels.enabled&&this.totalItems>this.barOptions.dataLabels.maxItems&&console.warn("WARNING: DataLabels are enabled but there are too many to display. This may cause performance issue when rendering - ApexCharts");for(var n=0,o=0;n0&&(this.visibleI=this.visibleI+1);var u=0,m=0;this.yRatio.length>1&&(this.yaxisIndex=i.globals.seriesYAxisReverseMap[y],this.translationsIndex=y);var A=this.translationsIndex;this.isReversed=i.config.yaxis[this.yaxisIndex]&&i.config.yaxis[this.yaxisIndex].reversed;var k=this.barHelpers.initialPositions();x=k.y,u=k.barHeight,c=k.yDivision,g=k.zeroW,f=k.x,m=k.barWidth,h=k.xDivision,d=k.zeroH,this.horizontal||v.push(f+m/2);var S=a.group({class:"apexcharts-datalabels","data:realIndex":y});i.globals.delayedElements.push({el:S.node}),S.node.classList.add("apexcharts-element-hidden");var L=a.group({class:"apexcharts-bar-goals-markers"}),C=a.group({class:"apexcharts-bar-shadows"});i.globals.delayedElements.push({el:C.node}),C.node.classList.add("apexcharts-element-hidden");for(var I=0;I0){var O=this.barHelpers.drawBarShadow({color:typeof E=="string"&&E?.indexOf("url")===-1?E:P.hexToRgba(i.globals.colors[n]),prevPaths:this.pathArr[this.pathArr.length-1],currPaths:M});O&&C.add(O)}this.pathArr.push(M);var D=this.barHelpers.drawGoalLine({barXPosition:M.barXPosition,barYPosition:M.barYPosition,goalX:M.goalX,goalY:M.goalY,barHeight:u,barWidth:m});D&&L.add(D),x=M.y,f=M.x,I>0&&v.push(f+m/2),b.push(x),this.renderSeries({realIndex:y,pathFill:E,j:I,i:n,columnGroupIndex:w,pathFrom:M.pathFrom,pathTo:M.pathTo,strokeWidth:z,elSeries:l,x:f,y:x,series:e,barHeight:Math.abs(M.barHeight?M.barHeight:u),barWidth:Math.abs(M.barWidth?M.barWidth:m),elDataLabelsWrap:S,elGoalsMarkers:L,elBarShadows:C,visibleSeries:this.visibleI,type:"bar"})}i.globals.seriesXvalues[y]=v,i.globals.seriesYvalues[y]=b,r.add(l)}return r}},{key:"renderSeries",value:function(e){var t=e.realIndex,i=e.pathFill,a=e.lineFill,s=e.j,r=e.i,n=e.columnGroupIndex,o=e.pathFrom,h=e.pathTo,c=e.strokeWidth,d=e.elSeries,g=e.x,f=e.y,x=e.y1,b=e.y2,v=e.series,y=e.barHeight,w=e.barWidth,l=e.barXPosition,u=e.barYPosition,m=e.elDataLabelsWrap,A=e.elGoalsMarkers,k=e.elBarShadows,S=e.visibleSeries,L=e.type,C=this.w,I=new X(this.ctx);if(!a){var z=typeof C.globals.stroke.colors[t]=="function"?function(D){var H,W=C.config.stroke.colors;return Array.isArray(W)&&W.length>0&&((H=W[D])||(H=""),typeof H=="function")?H({value:C.globals.series[D][s],dataPointIndex:s,w:C}):H}(t):C.globals.stroke.colors[t];a=this.barOptions.distributed?C.globals.stroke.colors[s]:z}C.config.series[r].data[s]&&C.config.series[r].data[s].strokeColor&&(a=C.config.series[r].data[s].strokeColor),this.isNullValue&&(i="none");var M=s/C.config.chart.animations.animateGradually.delay*(C.config.chart.animations.speed/C.globals.dataPoints)/2.4,T=I.renderPaths({i:r,j:s,realIndex:t,pathFrom:o,pathTo:h,stroke:a,strokeWidth:c,strokeLineCap:C.config.stroke.lineCap,fill:i,animationDelay:M,initialSpeed:C.config.chart.animations.speed,dataChangeSpeed:C.config.chart.animations.dynamicAnimation.speed,className:"apexcharts-".concat(L,"-area")});T.attr("clip-path","url(#gridRectMask".concat(C.globals.cuid,")"));var E=C.config.forecastDataPoints;E.count>0&&s>=C.globals.dataPoints-E.count&&(T.node.setAttribute("stroke-dasharray",E.dashArray),T.node.setAttribute("stroke-width",E.strokeWidth),T.node.setAttribute("fill-opacity",E.fillOpacity)),x!==void 0&&b!==void 0&&(T.attr("data-range-y1",x),T.attr("data-range-y2",b)),new ie(this.ctx).setSelectionFilter(T,t,s),d.add(T);var O=new Qi(this).handleBarDataLabels({x:g,y:f,y1:x,y2:b,i:r,j:s,series:v,realIndex:t,columnGroupIndex:n,barHeight:y,barWidth:w,barXPosition:l,barYPosition:u,renderedPath:T,visibleSeries:S});return O.dataLabels!==null&&m.add(O.dataLabels),O.totalDataLabels&&m.add(O.totalDataLabels),d.add(m),A&&d.add(A),k&&d.add(k),d}},{key:"drawBarPaths",value:function(e){var t,i=e.indexes,a=e.barHeight,s=e.strokeWidth,r=e.zeroW,n=e.x,o=e.y,h=e.yDivision,c=e.elSeries,d=this.w,g=i.i,f=i.j;if(d.globals.isXNumeric)t=(o=(d.globals.seriesX[g][f]-d.globals.minX)/this.invertedXRatio-a)+a*this.visibleI;else if(d.config.plotOptions.bar.hideZeroBarsWhenGrouped){var x=0,b=0;d.globals.seriesPercent.forEach(function(y,w){y[f]&&x++,w0&&(a=this.seriesLen*a/x),t=o+a*this.visibleI,t-=a*b}else t=o+a*this.visibleI;this.isFunnel&&(r-=(this.barHelpers.getXForValue(this.series[g][f],r)-r)/2),n=this.barHelpers.getXForValue(this.series[g][f],r);var v=this.barHelpers.getBarpaths({barYPosition:t,barHeight:a,x1:r,x2:n,strokeWidth:s,series:this.series,realIndex:i.realIndex,i:g,j:f,w:d});return d.globals.isXNumeric||(o+=h),this.barHelpers.barBackground({j:f,i:g,y1:t-a*this.visibleI,y2:a*this.seriesLen,elSeries:c}),{pathTo:v.pathTo,pathFrom:v.pathFrom,x1:r,x:n,y:o,goalX:this.barHelpers.getGoalValues("x",r,null,g,f),barYPosition:t,barHeight:a}}},{key:"drawColumnPaths",value:function(e){var t,i=e.indexes,a=e.x,s=e.y,r=e.xDivision,n=e.barWidth,o=e.zeroH,h=e.strokeWidth,c=e.elSeries,d=this.w,g=i.realIndex,f=i.translationsIndex,x=i.i,b=i.j,v=i.bc;if(d.globals.isXNumeric){var y=this.getBarXForNumericXAxis({x:a,j:b,realIndex:g,barWidth:n});a=y.x,t=y.barXPosition}else if(d.config.plotOptions.bar.hideZeroBarsWhenGrouped){var w=this.barHelpers.getZeroValueEncounters({i:x,j:b}),l=w.nonZeroColumns,u=w.zeroEncounters;l>0&&(n=this.seriesLen*n/l),t=a+n*this.visibleI,t-=n*u}else t=a+n*this.visibleI;s=this.barHelpers.getYForValue(this.series[x][b],o,f);var m=this.barHelpers.getColumnPaths({barXPosition:t,barWidth:n,y1:o,y2:s,strokeWidth:h,series:this.series,realIndex:g,i:x,j:b,w:d});return d.globals.isXNumeric||(a+=r),this.barHelpers.barBackground({bc:v,j:b,i:x,x1:t-h/2-n*this.visibleI,x2:n*this.seriesLen+h/2,elSeries:c}),{pathTo:m.pathTo,pathFrom:m.pathFrom,x:a,y:s,goalY:this.barHelpers.getGoalValues("y",null,o,x,b,f),barXPosition:t,barWidth:n}}},{key:"getBarXForNumericXAxis",value:function(e){var t=e.x,i=e.barWidth,a=e.realIndex,s=e.j,r=this.w,n=a;return r.globals.seriesX[a].length||(n=r.globals.maxValsInArrayIndex),r.globals.seriesX[n][s]&&(t=(r.globals.seriesX[n][s]-r.globals.minX)/this.xRatio-i*this.seriesLen/2),{barXPosition:t+i*this.visibleI,x:t}}},{key:"getPreviousPath",value:function(e,t){for(var i,a=this.w,s=0;s0&&parseInt(r.realIndex,10)===parseInt(e,10)&&a.globals.previousPaths[s].paths[t]!==void 0&&(i=a.globals.previousPaths[s].paths[t].d)}return i}}]),p}(),St=function(p){Te(t,me);var e=Ie(t);function t(){return F(this,t),e.apply(this,arguments)}return R(t,[{key:"draw",value:function(i,a){var s=this,r=this.w;this.graphics=new X(this.ctx),this.bar=new me(this.ctx,this.xyRatios);var n=new $(this.ctx,r);i=n.getLogSeries(i),this.yRatio=n.getLogYRatios(this.yRatio),this.barHelpers.initVariables(i),r.config.chart.stackType==="100%"&&(i=r.globals.comboCharts?a.map(function(x){return r.globals.seriesPercent[x]}):r.globals.seriesPercent.slice()),this.series=i,this.barHelpers.initializeStackedPrevVars(this);for(var o=this.graphics.group({class:"apexcharts-bar-series apexcharts-plot-series"}),h=0,c=0,d=function(x,b){var v=void 0,y=void 0,w=void 0,l=void 0,u=r.globals.comboCharts?a[x]:x,m=s.barHelpers.getGroupIndex(u),A=m.groupIndex,k=m.columnGroupIndex;s.groupCtx=s[r.globals.seriesGroups[A]];var S=[],L=[],C=0;s.yRatio.length>1&&(s.yaxisIndex=r.globals.seriesYAxisReverseMap[u][0],C=u),s.isReversed=r.config.yaxis[s.yaxisIndex]&&r.config.yaxis[s.yaxisIndex].reversed;var I=s.graphics.group({class:"apexcharts-series",seriesName:P.escapeString(r.globals.seriesNames[u]),rel:x+1,"data:realIndex":u});s.ctx.series.addCollapsedClassToSeries(I,u);var z=s.graphics.group({class:"apexcharts-datalabels","data:realIndex":u}),M=s.graphics.group({class:"apexcharts-bar-goals-markers"}),T=0,E=0,O=s.initialPositions(h,c,v,y,w,l,C);c=O.y,T=O.barHeight,y=O.yDivision,l=O.zeroW,h=O.x,E=O.barWidth,v=O.xDivision,w=O.zeroH,r.globals.barHeight=T,r.globals.barWidth=E,s.barHelpers.initializeStackedXYVars(s),s.groupCtx.prevY.length===1&&s.groupCtx.prevY[0].every(function(Z){return isNaN(Z)})&&(s.groupCtx.prevY[0]=s.groupCtx.prevY[0].map(function(){return w}),s.groupCtx.prevYF[0]=s.groupCtx.prevYF[0].map(function(){return 0}));for(var D=0;D1?d=(s=g.globals.minXDiff/this.xRatio)*parseInt(this.barOptions.columnWidth,10)/100:String(x).indexOf("%")===-1?d=parseInt(x,10):d*=parseInt(x,10)/100,n=this.isReversed?this.baseLineY[h]:g.globals.gridHeight-this.baseLineY[h],i=g.globals.padHorizontal+(s-d)/2}var b=g.globals.barGroups.length||1;return{x:i,y:a,yDivision:r,xDivision:s,barHeight:c/b,barWidth:d/b,zeroH:n,zeroW:o}}},{key:"drawStackedBarPaths",value:function(i){for(var a,s=i.indexes,r=i.barHeight,n=i.strokeWidth,o=i.zeroW,h=i.x,c=i.y,d=i.columnGroupIndex,g=i.seriesGroup,f=i.yDivision,x=i.elSeries,b=this.w,v=c+d*r,y=s.i,w=s.j,l=s.realIndex,u=s.translationsIndex,m=0,A=0;A0){var S=o;this.groupCtx.prevXVal[k-1][w]<0?S=this.series[y][w]>=0?this.groupCtx.prevX[k-1][w]+m-2*(this.isReversed?m:0):this.groupCtx.prevX[k-1][w]:this.groupCtx.prevXVal[k-1][w]>=0&&(S=this.series[y][w]>=0?this.groupCtx.prevX[k-1][w]:this.groupCtx.prevX[k-1][w]-m+2*(this.isReversed?m:0)),a=S}else a=o;h=this.series[y][w]===null?a:a+this.series[y][w]/this.invertedYRatio-2*(this.isReversed?this.series[y][w]/this.invertedYRatio:0);var L=this.barHelpers.getBarpaths({barYPosition:v,barHeight:r,x1:a,x2:h,strokeWidth:n,series:this.series,realIndex:s.realIndex,seriesGroup:g,i:y,j:w,w:b});return this.barHelpers.barBackground({j:w,i:y,y1:v,y2:r,elSeries:x}),c+=f,{pathTo:L.pathTo,pathFrom:L.pathFrom,goalX:this.barHelpers.getGoalValues("x",o,null,y,w,u),barXPosition:a,barYPosition:v,x:h,y:c}}},{key:"drawStackedColumnPaths",value:function(i){var a=i.indexes,s=i.x,r=i.y,n=i.xDivision,o=i.barWidth,h=i.zeroH,c=i.columnGroupIndex,d=i.seriesGroup,g=i.elSeries,f=this.w,x=a.i,b=a.j,v=a.bc,y=a.realIndex,w=a.translationsIndex;if(f.globals.isXNumeric){var l=f.globals.seriesX[y][b];l||(l=0),s=(l-f.globals.minX)/this.xRatio-o/2*f.globals.barGroups.length}for(var u,m=s+c*o,A=0,k=0;k0&&!f.globals.isXNumeric||S>0&&f.globals.isXNumeric&&f.globals.seriesX[y-1][b]===f.globals.seriesX[y][b]){var L,C,I,z=Math.min(this.yRatio.length+1,y+1);if(this.groupCtx.prevY[S-1]!==void 0&&this.groupCtx.prevY[S-1].length)for(var M=1;M=0?I-A+2*(this.isReversed?A:0):I;break}if(((D=this.groupCtx.prevYVal[S-E])===null||D===void 0?void 0:D[b])>=0){C=this.series[x][b]>=0?I:I+A-2*(this.isReversed?A:0);break}}C===void 0&&(C=f.globals.gridHeight),u=(L=this.groupCtx.prevYF[0])!==null&&L!==void 0&&L.every(function(W){return W===0})&&this.groupCtx.prevYF.slice(1,S).every(function(W){return W.every(function(N){return isNaN(N)})})?h:C}else u=h;r=this.series[x][b]?u-this.series[x][b]/this.yRatio[w]+2*(this.isReversed?this.series[x][b]/this.yRatio[w]:0):u;var H=this.barHelpers.getColumnPaths({barXPosition:m,barWidth:o,y1:u,y2:r,yRatio:this.yRatio[w],strokeWidth:this.strokeWidth,series:this.series,seriesGroup:d,realIndex:a.realIndex,i:x,j:b,w:f});return this.barHelpers.barBackground({bc:v,j:b,i:x,x1:m,x2:o,elSeries:g}),{pathTo:H.pathTo,pathFrom:H.pathFrom,goalY:this.barHelpers.getGoalValues("y",null,h,x,b),barXPosition:m,x:f.globals.isXNumeric?s:s+n,y:r}}}]),t}(),Qe=function(p){Te(t,me);var e=Ie(t);function t(){return F(this,t),e.apply(this,arguments)}return R(t,[{key:"draw",value:function(i,a,s){var r=this,n=this.w,o=new X(this.ctx),h=n.globals.comboCharts?a:n.config.chart.type,c=new ne(this.ctx);this.candlestickOptions=this.w.config.plotOptions.candlestick,this.boxOptions=this.w.config.plotOptions.boxPlot,this.isHorizontal=n.config.plotOptions.bar.horizontal;var d=new $(this.ctx,n);i=d.getLogSeries(i),this.series=i,this.yRatio=d.getLogYRatios(this.yRatio),this.barHelpers.initVariables(i);for(var g=o.group({class:"apexcharts-".concat(h,"-series apexcharts-plot-series")}),f=function(b){r.isBoxPlot=n.config.chart.type==="boxPlot"||n.config.series[b].type==="boxPlot";var v,y,w,l,u=void 0,m=void 0,A=[],k=[],S=n.globals.comboCharts?s[b]:b,L=r.barHelpers.getGroupIndex(S).columnGroupIndex,C=o.group({class:"apexcharts-series",seriesName:P.escapeString(n.globals.seriesNames[S]),rel:b+1,"data:realIndex":S});r.ctx.series.addCollapsedClassToSeries(C,S),i[b].length>0&&(r.visibleI=r.visibleI+1);var I,z,M=0;r.yRatio.length>1&&(r.yaxisIndex=n.globals.seriesYAxisReverseMap[S][0],M=S);var T=r.barHelpers.initialPositions();m=T.y,I=T.barHeight,y=T.yDivision,l=T.zeroW,u=T.x,z=T.barWidth,v=T.xDivision,w=T.zeroH,k.push(u+z/2);for(var E=o.group({class:"apexcharts-datalabels","data:realIndex":S}),O=function(H){var W=r.barHelpers.getStrokeWidth(b,H,S),N=null,B={indexes:{i:b,j:H,realIndex:S,translationsIndex:M},x:u,y:m,strokeWidth:W,elSeries:C};N=r.isHorizontal?r.drawHorizontalBoxPaths(Y(Y({},B),{},{yDivision:y,barHeight:I,zeroW:l})):r.drawVerticalBoxPaths(Y(Y({},B),{},{xDivision:v,barWidth:z,zeroH:w})),m=N.y,u=N.x,H>0&&k.push(u+z/2),A.push(m),N.pathTo.forEach(function(q,Z){var j=!r.isBoxPlot&&r.candlestickOptions.wick.useFillColor?N.color[Z]:n.globals.stroke.colors[b],se=c.fillPath({seriesNumber:S,dataPointIndex:H,color:N.color[Z],value:i[b][H]});r.renderSeries({realIndex:S,pathFill:se,lineFill:j,j:H,i:b,pathFrom:N.pathFrom,pathTo:q,strokeWidth:W,elSeries:C,x:u,y:m,series:i,columnGroupIndex:L,barHeight:I,barWidth:z,elDataLabelsWrap:E,visibleSeries:r.visibleI,type:n.config.chart.type})})},D=0;Du.c&&(x=!1);var k=Math.min(u.o,u.c),S=Math.max(u.o,u.c),L=u.m;c.globals.isXNumeric&&(s=(c.globals.seriesX[l][f]-c.globals.minX)/this.xRatio-n/2);var C=s+n*this.visibleI;this.series[g][f]===void 0||this.series[g][f]===null?(k=o,S=o):(k=o-k/w,S=o-S/w,m=o-u.h/w,A=o-u.l/w,L=o-u.m/w);var I=d.move(C,o),z=d.move(C+n/2,k);return c.globals.previousPaths.length>0&&(z=this.getPreviousPath(l,f,!0)),I=this.isBoxPlot?[d.move(C,k)+d.line(C+n/2,k)+d.line(C+n/2,m)+d.line(C+n/4,m)+d.line(C+n-n/4,m)+d.line(C+n/2,m)+d.line(C+n/2,k)+d.line(C+n,k)+d.line(C+n,L)+d.line(C,L)+d.line(C,k+h/2),d.move(C,L)+d.line(C+n,L)+d.line(C+n,S)+d.line(C+n/2,S)+d.line(C+n/2,A)+d.line(C+n-n/4,A)+d.line(C+n/4,A)+d.line(C+n/2,A)+d.line(C+n/2,S)+d.line(C,S)+d.line(C,L)+"z"]:[d.move(C,S)+d.line(C+n/2,S)+d.line(C+n/2,m)+d.line(C+n/2,S)+d.line(C+n,S)+d.line(C+n,k)+d.line(C+n/2,k)+d.line(C+n/2,A)+d.line(C+n/2,k)+d.line(C,k)+d.line(C,S-h/2)],z+=d.move(C,k),c.globals.isXNumeric||(s+=r),{pathTo:I,pathFrom:z,x:s,y:S,barXPosition:C,color:this.isBoxPlot?y:x?[b]:[v]}}},{key:"drawHorizontalBoxPaths",value:function(i){var a=i.indexes;i.x;var s=i.y,r=i.yDivision,n=i.barHeight,o=i.zeroW,h=i.strokeWidth,c=this.w,d=new X(this.ctx),g=a.i,f=a.j,x=this.boxOptions.colors.lower;this.isBoxPlot&&(x=[this.boxOptions.colors.lower,this.boxOptions.colors.upper]);var b=this.invertedYRatio,v=a.realIndex,y=this.getOHLCValue(v,f),w=o,l=o,u=Math.min(y.o,y.c),m=Math.max(y.o,y.c),A=y.m;c.globals.isXNumeric&&(s=(c.globals.seriesX[v][f]-c.globals.minX)/this.invertedXRatio-n/2);var k=s+n*this.visibleI;this.series[g][f]===void 0||this.series[g][f]===null?(u=o,m=o):(u=o+u/b,m=o+m/b,w=o+y.h/b,l=o+y.l/b,A=o+y.m/b);var S=d.move(o,k),L=d.move(u,k+n/2);return c.globals.previousPaths.length>0&&(L=this.getPreviousPath(v,f,!0)),S=[d.move(u,k)+d.line(u,k+n/2)+d.line(w,k+n/2)+d.line(w,k+n/2-n/4)+d.line(w,k+n/2+n/4)+d.line(w,k+n/2)+d.line(u,k+n/2)+d.line(u,k+n)+d.line(A,k+n)+d.line(A,k)+d.line(u+h/2,k),d.move(A,k)+d.line(A,k+n)+d.line(m,k+n)+d.line(m,k+n/2)+d.line(l,k+n/2)+d.line(l,k+n-n/4)+d.line(l,k+n/4)+d.line(l,k+n/2)+d.line(m,k+n/2)+d.line(m,k)+d.line(A,k)+"z"],L+=d.move(u,k),c.globals.isXNumeric||(s+=r),{pathTo:S,pathFrom:L,x:m,y:s,barYPosition:k,color:x}}},{key:"getOHLCValue",value:function(i,a){var s=this.w;return{o:this.isBoxPlot?s.globals.seriesCandleH[i][a]:s.globals.seriesCandleO[i][a],h:this.isBoxPlot?s.globals.seriesCandleO[i][a]:s.globals.seriesCandleH[i][a],m:s.globals.seriesCandleM[i][a],l:this.isBoxPlot?s.globals.seriesCandleC[i][a]:s.globals.seriesCandleL[i][a],c:this.isBoxPlot?s.globals.seriesCandleL[i][a]:s.globals.seriesCandleC[i][a]}}}]),t}(),Bt=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"checkColorRange",value:function(){var e=this.w,t=!1,i=e.config.plotOptions[e.config.chart.type];return i.colorScale.ranges.length>0&&i.colorScale.ranges.map(function(a,s){a.from<=0&&(t=!0)}),t}},{key:"getShadeColor",value:function(e,t,i,a){var s=this.w,r=1,n=s.config.plotOptions[e].shadeIntensity,o=this.determineColor(e,t,i);s.globals.hasNegs||a?r=s.config.plotOptions[e].reverseNegativeShade?o.percent<0?o.percent/100*(1.25*n):(1-o.percent/100)*(1.25*n):o.percent<=0?1-(1+o.percent/100)*n:(1-o.percent/100)*n:(r=1-o.percent/100,e==="treemap"&&(r=(1-o.percent/100)*(1.25*n)));var h=o.color,c=new P;if(s.config.plotOptions[e].enableShades)if(this.w.config.theme.mode==="dark"){var d=c.shadeColor(-1*r,o.color);h=P.hexToRgba(P.isColorHex(d)?d:P.rgb2hex(d),s.config.fill.opacity)}else{var g=c.shadeColor(r,o.color);h=P.hexToRgba(P.isColorHex(g)?g:P.rgb2hex(g),s.config.fill.opacity)}return{color:h,colorProps:o}}},{key:"determineColor",value:function(e,t,i){var a=this.w,s=a.globals.series[t][i],r=a.config.plotOptions[e],n=r.colorScale.inverse?i:t;r.distributed&&a.config.chart.type==="treemap"&&(n=i);var o=a.globals.colors[n],h=null,c=Math.min.apply(Math,te(a.globals.series[t])),d=Math.max.apply(Math,te(a.globals.series[t]));r.distributed||e!=="heatmap"||(c=a.globals.minY,d=a.globals.maxY),r.colorScale.min!==void 0&&(c=r.colorScale.mina.globals.maxY?r.colorScale.max:a.globals.maxY);var g=Math.abs(d)+Math.abs(c),f=100*s/(g===0?g-1e-6:g);return r.colorScale.ranges.length>0&&r.colorScale.ranges.map(function(x,b){if(s>=x.from&&s<=x.to){o=x.color,h=x.foreColor?x.foreColor:null,c=x.from,d=x.to;var v=Math.abs(d)+Math.abs(c);f=100*s/(v===0?v-1e-6:v)}}),{color:o,foreColor:h,percent:f}}},{key:"calculateDataLabels",value:function(e){var t=e.text,i=e.x,a=e.y,s=e.i,r=e.j,n=e.colorProps,o=e.fontSize,h=this.w.config.dataLabels,c=new X(this.ctx),d=new be(this.ctx),g=null;if(h.enabled){g=c.group({class:"apexcharts-data-labels"});var f=h.offsetX,x=h.offsetY,b=i+f,v=a+parseFloat(h.style.fontSize)/3+x;d.plotDataLabelsText({x:b,y:v,text:t,i:s,j:r,color:n.foreColor,parent:g,fontSize:o,dataLabelsConfig:h})}return g}},{key:"addListeners",value:function(e){var t=new X(this.ctx);e.node.addEventListener("mouseenter",t.pathMouseEnter.bind(this,e)),e.node.addEventListener("mouseleave",t.pathMouseLeave.bind(this,e)),e.node.addEventListener("mousedown",t.pathMouseDown.bind(this,e))}}]),p}(),ta=function(){function p(e,t){F(this,p),this.ctx=e,this.w=e.w,this.xRatio=t.xRatio,this.yRatio=t.yRatio,this.dynamicAnim=this.w.config.chart.animations.dynamicAnimation,this.helpers=new Bt(e),this.rectRadius=this.w.config.plotOptions.heatmap.radius,this.strokeWidth=this.w.config.stroke.show?this.w.config.stroke.width:0}return R(p,[{key:"draw",value:function(e){var t=this.w,i=new X(this.ctx),a=i.group({class:"apexcharts-heatmap"});a.attr("clip-path","url(#gridRectMask".concat(t.globals.cuid,")"));var s=t.globals.gridWidth/t.globals.dataPoints,r=t.globals.gridHeight/t.globals.series.length,n=0,o=!1;this.negRange=this.helpers.checkColorRange();var h=e.slice();t.config.yaxis[0].reversed&&(o=!0,h.reverse());for(var c=o?0:h.length-1;o?c=0;o?c++:c--){var d=i.group({class:"apexcharts-series apexcharts-heatmap-series",seriesName:P.escapeString(t.globals.seriesNames[c]),rel:c+1,"data:realIndex":c});if(this.ctx.series.addCollapsedClassToSeries(d,c),t.config.chart.dropShadow.enabled){var g=t.config.chart.dropShadow;new ie(this.ctx).dropShadow(d,g,c)}for(var f=0,x=t.config.plotOptions.heatmap.shadeIntensity,b=0;b-1&&this.pieClicked(g),i.config.dataLabels.enabled){var m=l.x,A=l.y,k=100*x/this.fullAngle+"%";if(x!==0&&i.config.plotOptions.pie.dataLabels.minAngleToShowLabelthis.fullAngle?t.endAngle=t.endAngle-(a+n):a+n=this.fullAngle+this.w.config.plotOptions.pie.startAngle%this.fullAngle&&(c=this.fullAngle+this.w.config.plotOptions.pie.startAngle%this.fullAngle-.01),Math.ceil(c)>this.fullAngle&&(c-=this.fullAngle);var d=Math.PI*(c-90)/180,g=i.centerX+r*Math.cos(h),f=i.centerY+r*Math.sin(h),x=i.centerX+r*Math.cos(d),b=i.centerY+r*Math.sin(d),v=P.polarToCartesian(i.centerX,i.centerY,i.donutSize,c),y=P.polarToCartesian(i.centerX,i.centerY,i.donutSize,o),w=s>180?1:0,l=["M",g,f,"A",r,r,0,w,1,x,b];return t=i.chartType==="donut"?[].concat(l,["L",v.x,v.y,"A",i.donutSize,i.donutSize,0,w,0,y.x,y.y,"L",g,f,"z"]).join(" "):i.chartType==="pie"||i.chartType==="polarArea"?[].concat(l,["L",i.centerX,i.centerY,"L",g,f]).join(" "):[].concat(l).join(" "),n.roundPathCorners(t,2*this.strokeWidth)}},{key:"drawPolarElements",value:function(e){var t=this.w,i=new Ot(this.ctx),a=new X(this.ctx),s=new Gt(this.ctx),r=a.group(),n=a.group(),o=i.niceScale(0,Math.ceil(this.maxY),0),h=o.result.reverse(),c=o.result.length;this.maxY=o.niceMax;for(var d=t.globals.radialSize,g=d/(c-1),f=0;f1&&e.total.show&&(s=e.total.color);var n=r.globals.dom.baseEl.querySelector(".apexcharts-datalabel-label"),o=r.globals.dom.baseEl.querySelector(".apexcharts-datalabel-value");i=(0,e.value.formatter)(i,r),a||typeof e.total.formatter!="function"||(i=e.total.formatter(r));var h=t===e.total.label;t=e.name.formatter(t,h,r),n!==null&&(n.textContent=t),o!==null&&(o.textContent=i),n!==null&&(n.style.fill=s)}},{key:"printDataLabelsInner",value:function(e,t){var i=this.w,a=e.getAttribute("data:value"),s=i.globals.seriesNames[parseInt(e.parentNode.getAttribute("rel"),10)-1];i.globals.series.length>1&&this.printInnerLabels(t,s,a,e);var r=i.globals.dom.baseEl.querySelector(".apexcharts-datalabels-group");r!==null&&(r.style.opacity=1)}},{key:"drawSpokes",value:function(e){var t=this,i=this.w,a=new X(this.ctx),s=i.config.plotOptions.polarArea.spokes;if(s.strokeWidth!==0){for(var r=[],n=360/i.globals.series.length,o=0;o0&&(A=t.getPreviousPath(y));for(var k=0;k=10?e.x>0?(i="start",a+=10):e.x<0&&(i="end",a-=10):i="middle",Math.abs(e.y)>=t-10&&(e.y<0?s-=10:e.y>0&&(s+=10)),{textAnchor:i,newX:a,newY:s}}},{key:"getPreviousPath",value:function(e){for(var t=this.w,i=null,a=0;a0&&parseInt(s.realIndex,10)===parseInt(e,10)&&t.globals.previousPaths[a].paths[0]!==void 0&&(i=t.globals.previousPaths[a].paths[0].d)}return i}},{key:"getDataPointsPos",value:function(e,t){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this.dataPointsLen;e=e||[],t=t||[];for(var a=[],s=0;s=360&&(b=360-Math.abs(this.startAngle)-.1);var v=s.drawPath({d:"",stroke:f,strokeWidth:h*parseInt(g.strokeWidth,10)/100,fill:"none",strokeOpacity:g.opacity,classes:"apexcharts-radialbar-area"});if(g.dropShadow.enabled){var y=g.dropShadow;n.dropShadow(v,y)}d.add(v),v.attr("id","apexcharts-radialbarTrack-"+c),this.animatePaths(v,{centerX:i.centerX,centerY:i.centerY,endAngle:b,startAngle:x,size:i.size,i:c,totalItems:2,animBeginArr:0,dur:0,isTrack:!0,easing:a.globals.easing})}return r}},{key:"drawArcs",value:function(i){var a=this.w,s=new X(this.ctx),r=new ne(this.ctx),n=new ie(this.ctx),o=s.group(),h=this.getStrokeWidth(i);i.size=i.size-h/2;var c=a.config.plotOptions.radialBar.hollow.background,d=i.size-h*i.series.length-this.margin*i.series.length-h*parseInt(a.config.plotOptions.radialBar.track.strokeWidth,10)/100/2,g=d-a.config.plotOptions.radialBar.hollow.margin;a.config.plotOptions.radialBar.hollow.image!==void 0&&(c=this.drawHollowImage(i,o,d,c));var f=this.drawHollow({size:g,centerX:i.centerX,centerY:i.centerY,fill:c||"transparent"});if(a.config.plotOptions.radialBar.hollow.dropShadow.enabled){var x=a.config.plotOptions.radialBar.hollow.dropShadow;n.dropShadow(f,x)}var b=1;!this.radialDataLabels.total.show&&a.globals.series.length>1&&(b=0);var v=null;if(this.radialDataLabels.show){var y=a.globals.dom.Paper.select(".apexcharts-datalabels-group").members[0];v=this.renderInnerDataLabels(y,this.radialDataLabels,{hollowSize:d,centerX:i.centerX,centerY:i.centerY,opacity:b})}a.config.plotOptions.radialBar.hollow.position==="back"&&(o.add(f),v&&o.add(v));var w=!1;a.config.plotOptions.radialBar.inverseOrder&&(w=!0);for(var l=w?i.series.length-1:0;w?l>=0:l100?100:i.series[l])/100,L=Math.round(this.totalAngle*S)+this.startAngle,C=void 0;a.globals.dataChanged&&(k=this.startAngle,C=Math.round(this.totalAngle*P.negToZero(a.globals.previousPaths[l])/100)+k),Math.abs(L)+Math.abs(A)>=360&&(L-=.01),Math.abs(C)+Math.abs(k)>=360&&(C-=.01);var I=L-A,z=Array.isArray(a.config.stroke.dashArray)?a.config.stroke.dashArray[l]:a.config.stroke.dashArray,M=s.drawPath({d:"",stroke:m,strokeWidth:h,fill:"none",fillOpacity:a.config.fill.opacity,classes:"apexcharts-radialbar-area apexcharts-radialbar-slice-"+l,strokeDashArray:z});if(X.setAttrs(M.node,{"data:angle":I,"data:value":i.series[l]}),a.config.chart.dropShadow.enabled){var T=a.config.chart.dropShadow;n.dropShadow(M,T,l)}if(n.setSelectionFilter(M,0,l),this.addListeners(M,this.radialDataLabels),u.add(M),M.attr({index:0,j:l}),this.barLabels.enabled){var E=P.polarToCartesian(i.centerX,i.centerY,i.size,A),O=this.barLabels.formatter(a.globals.seriesNames[l],{seriesIndex:l,w:a}),D=["apexcharts-radialbar-label"];this.barLabels.onClick||D.push("apexcharts-no-click");var H=this.barLabels.useSeriesColors?a.globals.colors[l]:a.config.chart.foreColor;H||(H=a.config.chart.foreColor);var W=E.x+this.barLabels.offsetX,N=E.y+this.barLabels.offsetY,B=s.drawText({x:W,y:N,text:O,textAnchor:"end",dominantBaseline:"middle",fontFamily:this.barLabels.fontFamily,fontWeight:this.barLabels.fontWeight,fontSize:this.barLabels.fontSize,foreColor:H,cssClass:D.join(" ")});B.on("click",this.onBarLabelClick),B.attr({rel:l+1}),A!==0&&B.attr({"transform-origin":"".concat(W," ").concat(N),transform:"rotate(".concat(A," 0 0)")}),u.add(B)}var q=0;!this.initialAnim||a.globals.resized||a.globals.dataChanged||(q=a.config.chart.animations.speed),a.globals.dataChanged&&(q=a.config.chart.animations.dynamicAnimation.speed),this.animDur=q/(1.2*i.series.length)+this.animDur,this.animBeginArr.push(this.animDur),this.animatePaths(M,{centerX:i.centerX,centerY:i.centerY,endAngle:L,startAngle:A,prevEndAngle:C,prevStartAngle:k,size:i.size,i:l,totalItems:2,animBeginArr:this.animBeginArr,dur:q,shouldSetPrevPaths:!0,easing:a.globals.easing})}return{g:o,elHollow:f,dataLabels:v}}},{key:"drawHollow",value:function(i){var a=new X(this.ctx).drawCircle(2*i.size);return a.attr({class:"apexcharts-radialbar-hollow",cx:i.centerX,cy:i.centerY,r:i.size,fill:i.fill}),a}},{key:"drawHollowImage",value:function(i,a,s,r){var n=this.w,o=new ne(this.ctx),h=P.randomId(),c=n.config.plotOptions.radialBar.hollow.image;if(n.config.plotOptions.radialBar.hollow.imageClipped)o.clippedImgArea({width:s,height:s,image:c,patternID:"pattern".concat(n.globals.cuid).concat(h)}),r="url(#pattern".concat(n.globals.cuid).concat(h,")");else{var d=n.config.plotOptions.radialBar.hollow.imageWidth,g=n.config.plotOptions.radialBar.hollow.imageHeight;if(d===void 0&&g===void 0){var f=n.globals.dom.Paper.image(c).loaded(function(b){this.move(i.centerX-b.width/2+n.config.plotOptions.radialBar.hollow.imageOffsetX,i.centerY-b.height/2+n.config.plotOptions.radialBar.hollow.imageOffsetY)});a.add(f)}else{var x=n.globals.dom.Paper.image(c).loaded(function(b){this.move(i.centerX-d/2+n.config.plotOptions.radialBar.hollow.imageOffsetX,i.centerY-g/2+n.config.plotOptions.radialBar.hollow.imageOffsetY),this.size(d,g)});a.add(x)}}return r}},{key:"getStrokeWidth",value:function(i){var a=this.w;return i.size*(100-parseInt(a.config.plotOptions.radialBar.hollow.size,10))/100/(i.series.length+1)-this.margin}},{key:"onBarLabelClick",value:function(i){var a=parseInt(i.target.getAttribute("rel"),10)-1,s=this.barLabels.onClick,r=this.w;s&&s(r.globals.seriesNames[a],{w:r,seriesIndex:a})}}]),t}(),sa=function(p){Te(t,me);var e=Ie(t);function t(){return F(this,t),e.apply(this,arguments)}return R(t,[{key:"draw",value:function(i,a){var s=this.w,r=new X(this.ctx);this.rangeBarOptions=this.w.config.plotOptions.rangeBar,this.series=i,this.seriesRangeStart=s.globals.seriesRangeStart,this.seriesRangeEnd=s.globals.seriesRangeEnd,this.barHelpers.initVariables(i);for(var n=r.group({class:"apexcharts-rangebar-series apexcharts-plot-series"}),o=0;o0&&(this.visibleI=this.visibleI+1);var w=0,l=0,u=0;this.yRatio.length>1&&(this.yaxisIndex=s.globals.seriesYAxisReverseMap[b][0],u=b);var m=this.barHelpers.initialPositions();x=m.y,g=m.zeroW,f=m.x,l=m.barWidth,w=m.barHeight,h=m.xDivision,c=m.yDivision,d=m.zeroH;for(var A=r.group({class:"apexcharts-datalabels","data:realIndex":b}),k=r.group({class:"apexcharts-rangebar-goals-markers"}),S=0;S0});return this.isHorizontal?(r=b.config.plotOptions.bar.rangeBarGroupRows?o+g*u:o+c*this.visibleI+g*u,m>-1&&!b.config.plotOptions.bar.rangeBarOverlap&&(v=b.globals.seriesRange[a][m].overlaps).indexOf(y)>-1&&(r=(c=x.barHeight/v.length)*this.visibleI+g*(100-parseInt(this.barOptions.barHeight,10))/100/2+c*(this.visibleI+v.indexOf(y))+g*u)):(u>-1&&!b.globals.timescaleLabels.length&&(n=b.config.plotOptions.bar.rangeBarGroupRows?h+f*u:h+d*this.visibleI+f*u),m>-1&&!b.config.plotOptions.bar.rangeBarOverlap&&(v=b.globals.seriesRange[a][m].overlaps).indexOf(y)>-1&&(n=(d=x.barWidth/v.length)*this.visibleI+f*(100-parseInt(this.barOptions.barWidth,10))/100/2+d*(this.visibleI+v.indexOf(y))+f*u)),{barYPosition:r,barXPosition:n,barHeight:c,barWidth:d}}},{key:"drawRangeColumnPaths",value:function(i){var a=i.indexes,s=i.x,r=i.xDivision,n=i.barWidth,o=i.barXPosition,h=i.zeroH,c=this.w,d=a.i,g=a.j,f=a.realIndex,x=a.translationsIndex,b=this.yRatio[x],v=this.getRangeValue(f,g),y=Math.min(v.start,v.end),w=Math.max(v.start,v.end);this.series[d][g]===void 0||this.series[d][g]===null?y=h:(y=h-y/b,w=h-w/b);var l=Math.abs(w-y),u=this.barHelpers.getColumnPaths({barXPosition:o,barWidth:n,y1:y,y2:w,strokeWidth:this.strokeWidth,series:this.seriesRangeEnd,realIndex:f,i:f,j:g,w:c});if(c.globals.isXNumeric){var m=this.getBarXForNumericXAxis({x:s,j:g,realIndex:f,barWidth:n});s=m.x,o=m.barXPosition}else s+=r;return{pathTo:u.pathTo,pathFrom:u.pathFrom,barHeight:l,x:s,y:v.start<0&&v.end<0?y:w,goalY:this.barHelpers.getGoalValues("y",null,h,d,g,x),barXPosition:o}}},{key:"preventBarOverflow",value:function(i){var a=this.w;return i<0&&(i=0),i>a.globals.gridWidth&&(i=a.globals.gridWidth),i}},{key:"drawRangeBarPaths",value:function(i){var a=i.indexes,s=i.y,r=i.y1,n=i.y2,o=i.yDivision,h=i.barHeight,c=i.barYPosition,d=i.zeroW,g=this.w,f=a.realIndex,x=a.j,b=this.preventBarOverflow(d+r/this.invertedYRatio),v=this.preventBarOverflow(d+n/this.invertedYRatio),y=this.getRangeValue(f,x),w=Math.abs(v-b),l=this.barHelpers.getBarpaths({barYPosition:c,barHeight:h,x1:b,x2:v,strokeWidth:this.strokeWidth,series:this.seriesRangeEnd,i:f,realIndex:f,j:x,w:g});return g.globals.isXNumeric||(s+=o),{pathTo:l.pathTo,pathFrom:l.pathFrom,barWidth:w,x:y.start<0&&y.end<0?b:v,goalX:this.barHelpers.getGoalValues("x",d,null,f,x),y:s}}},{key:"getRangeValue",value:function(i,a){var s=this.w;return{start:s.globals.seriesRangeStart[i][a],end:s.globals.seriesRangeEnd[i][a]}}}]),t}(),ra=function(){function p(e){F(this,p),this.w=e.w,this.lineCtx=e}return R(p,[{key:"sameValueSeriesFix",value:function(e,t){var i=this.w;if((i.config.fill.type==="gradient"||i.config.fill.type[e]==="gradient")&&new $(this.lineCtx.ctx,i).seriesHaveSameValues(e)){var a=t[e].slice();a[a.length-1]=a[a.length-1]+1e-6,t[e]=a}return t}},{key:"calculatePoints",value:function(e){var t=e.series,i=e.realIndex,a=e.x,s=e.y,r=e.i,n=e.j,o=e.prevY,h=this.w,c=[],d=[];if(n===0){var g=this.lineCtx.categoryAxisCorrection+h.config.markers.offsetX;h.globals.isXNumeric&&(g=(h.globals.seriesX[i][0]-h.globals.minX)/this.lineCtx.xRatio+h.config.markers.offsetX),c.push(g),d.push(P.isNumber(t[r][0])?o+h.config.markers.offsetY:null),c.push(a+h.config.markers.offsetX),d.push(P.isNumber(t[r][n+1])?s+h.config.markers.offsetY:null)}else c.push(a+h.config.markers.offsetX),d.push(P.isNumber(t[r][n+1])?s+h.config.markers.offsetY:null);return{x:c,y:d}}},{key:"checkPreviousPaths",value:function(e){for(var t=e.pathFromLine,i=e.pathFromArea,a=e.realIndex,s=this.w,r=0;r0&&parseInt(n.realIndex,10)===parseInt(a,10)&&(n.type==="line"?(this.lineCtx.appendPathFrom=!1,t=s.globals.previousPaths[r].paths[0].d):n.type==="area"&&(this.lineCtx.appendPathFrom=!1,i=s.globals.previousPaths[r].paths[0].d,s.config.stroke.show&&s.globals.previousPaths[r].paths[1]&&(t=s.globals.previousPaths[r].paths[1].d)))}return{pathFromLine:t,pathFromArea:i}}},{key:"determineFirstPrevY",value:function(e){var t,i,a,s=e.i,r=e.realIndex,n=e.series,o=e.prevY,h=e.lineYPosition,c=e.translationsIndex,d=this.w,g=d.config.chart.stacked&&!d.globals.comboCharts||d.config.chart.stacked&&d.globals.comboCharts&&(!this.w.config.chart.stackOnlyBar||((t=this.w.config.series[r])===null||t===void 0?void 0:t.type)==="bar"||((i=this.w.config.series[r])===null||i===void 0?void 0:i.type)==="column");if(((a=n[s])===null||a===void 0?void 0:a[0])!==void 0)o=(h=g&&s>0?this.lineCtx.prevSeriesY[s-1][0]:this.lineCtx.zeroY)-n[s][0]/this.lineCtx.yRatio[c]+2*(this.lineCtx.isReversed?n[s][0]/this.lineCtx.yRatio[c]:0);else if(g&&s>0&&n[s][0]===void 0){for(var f=s-1;f>=0;f--)if(n[f][0]!==null&&n[f][0]!==void 0){o=h=this.lineCtx.prevSeriesY[f][0];break}}return{prevY:o,lineYPosition:h}}}]),p}(),na=function(p){for(var e,t,i,a,s=function(c){for(var d=[],g=c[0],f=c[1],x=d[0]=et(g,f),b=1,v=c.length-1;b9&&(a=3*i/Math.sqrt(a),s[o]=a*e,s[o+1]=a*t);for(var h=0;h<=r;h++)a=(p[Math.min(r,h+1)][0]-p[Math.max(0,h-1)][0])/(6*(1+s[h]*s[h])),n.push([a||0,s[h]*a||0]);return n},oa=function(p){var e=na(p),t=p[1],i=p[0],a=[],s=e[1],r=e[0];a.push(i,[i[0]+r[0],i[1]+r[1],t[0]-s[0],t[1]-s[1],t[0],t[1]]);for(var n=2,o=e.length;n1&&i[1].length<6){var a=i[0].length;i[1]=[2*i[0][a-2]-i[0][a-4],2*i[0][a-1]-i[0][a-3]].concat(i[1])}i[0]=i[0].slice(-2)}return i};function et(p,e){return(e[1]-p[1])/(e[0]-p[0])}var tt=function(){function p(e,t,i){F(this,p),this.ctx=e,this.w=e.w,this.xyRatios=t,this.pointsChart=!(this.w.config.chart.type!=="bubble"&&this.w.config.chart.type!=="scatter")||i,this.scatter=new Yt(this.ctx),this.noNegatives=this.w.globals.minX===Number.MAX_VALUE,this.lineHelpers=new ra(this),this.markers=new ye(this.ctx),this.prevSeriesY=[],this.categoryAxisCorrection=0,this.yaxisIndex=0}return R(p,[{key:"draw",value:function(e,t,i,a){var s,r=this.w,n=new X(this.ctx),o=r.globals.comboCharts?t:r.config.chart.type,h=n.group({class:"apexcharts-".concat(o,"-series apexcharts-plot-series")}),c=new $(this.ctx,r);this.yRatio=this.xyRatios.yRatio,this.zRatio=this.xyRatios.zRatio,this.xRatio=this.xyRatios.xRatio,this.baseLineY=this.xyRatios.baseLineY,e=c.getLogSeries(e),this.yRatio=c.getLogYRatios(this.yRatio),this.prevSeriesY=[];for(var d=[],g=0;g1?f:0;this._initSerieVariables(e,g,f);var b=[],v=[],y=[],w=r.globals.padHorizontal+this.categoryAxisCorrection;this.ctx.series.addCollapsedClassToSeries(this.elSeries,f),r.globals.isXNumeric&&r.globals.seriesX.length>0&&(w=(r.globals.seriesX[f][0]-r.globals.minX)/this.xRatio),y.push(w);var l,u=w,m=void 0,A=u,k=this.zeroY,S=this.zeroY;k=this.lineHelpers.determineFirstPrevY({i:g,realIndex:f,series:e,prevY:k,lineYPosition:0,translationsIndex:x}).prevY,r.config.stroke.curve==="monotoneCubic"&&e[g][0]===null?b.push(null):b.push(k),l=k,o==="rangeArea"&&(m=S=this.lineHelpers.determineFirstPrevY({i:g,realIndex:f,series:a,prevY:S,lineYPosition:0,translationsIndex:x}).prevY,v.push(b[0]!==null?S:null));var L=this._calculatePathsFrom({type:o,series:e,i:g,realIndex:f,translationsIndex:x,prevX:A,prevY:k,prevY2:S}),C=[b[0]],I=[v[0]],z={type:o,series:e,realIndex:f,translationsIndex:x,i:g,x:w,y:1,pX:u,pY:l,pathsFrom:L,linePaths:[],areaPaths:[],seriesIndex:i,lineYPosition:0,xArrj:y,yArrj:b,y2Arrj:v,seriesRangeEnd:a},M=this._iterateOverDataPoints(Y(Y({},z),{},{iterations:o==="rangeArea"?e[g].length-1:void 0,isRangeStart:!0}));if(o==="rangeArea"){for(var T=this._calculatePathsFrom({series:a,i:g,realIndex:f,prevX:A,prevY:S}),E=this._iterateOverDataPoints(Y(Y({},z),{},{series:a,xArrj:[w],yArrj:C,y2Arrj:I,pY:m,areaPaths:M.areaPaths,pathsFrom:T,iterations:a[g].length-1,isRangeStart:!1})),O=M.linePaths.length/2,D=0;D=0;H--)h.add(d[H]);else for(var W=0;W1&&(this.yaxisIndex=a.globals.seriesYAxisReverseMap[i],r=i),this.isReversed=a.config.yaxis[this.yaxisIndex]&&a.config.yaxis[this.yaxisIndex].reversed,this.zeroY=a.globals.gridHeight-this.baseLineY[r]-(this.isReversed?a.globals.gridHeight:0)+(this.isReversed?2*this.baseLineY[r]:0),this.areaBottomY=this.zeroY,(this.zeroY>a.globals.gridHeight||a.config.plotOptions.area.fillTo==="end")&&(this.areaBottomY=a.globals.gridHeight),this.categoryAxisCorrection=this.xDivision/2,this.elSeries=s.group({class:"apexcharts-series",zIndex:a.config.series[i].zIndex!==void 0?a.config.series[i].zIndex:i,seriesName:P.escapeString(a.globals.seriesNames[i])}),this.elPointsMain=s.group({class:"apexcharts-series-markers-wrap","data:realIndex":i}),this.elDataLabelsWrap=s.group({class:"apexcharts-datalabels","data:realIndex":i});var n=e[t].length===a.globals.dataPoints;this.elSeries.attr({"data:longestSeries":n,rel:t+1,"data:realIndex":i}),this.appendPathFrom=!0}},{key:"_calculatePathsFrom",value:function(e){var t,i,a,s,r=e.type,n=e.series,o=e.i,h=e.realIndex,c=e.translationsIndex,d=e.prevX,g=e.prevY,f=e.prevY2,x=this.w,b=new X(this.ctx);if(n[o][0]===null){for(var v=0;v0){var y=this.lineHelpers.checkPreviousPaths({pathFromLine:a,pathFromArea:s,realIndex:h});a=y.pathFromLine,s=y.pathFromArea}return{prevX:d,prevY:g,linePath:t,areaPath:i,pathFromLine:a,pathFromArea:s}}},{key:"_handlePaths",value:function(e){var t=e.type,i=e.realIndex,a=e.i,s=e.paths,r=this.w,n=new X(this.ctx),o=new ne(this.ctx);this.prevSeriesY.push(s.yArrj),r.globals.seriesXvalues[i]=s.xArrj,r.globals.seriesYvalues[i]=s.yArrj;var h=r.config.forecastDataPoints;if(h.count>0&&t!=="rangeArea"){var c=r.globals.seriesXvalues[i][r.globals.seriesXvalues[i].length-h.count-1],d=n.drawRect(c,0,r.globals.gridWidth,r.globals.gridHeight,0);r.globals.dom.elForecastMask.appendChild(d.node);var g=n.drawRect(0,0,c,r.globals.gridHeight,0);r.globals.dom.elNonForecastMask.appendChild(g.node)}this.pointsChart||r.globals.delayedElements.push({el:this.elPointsMain.node,index:i});var f={i:a,realIndex:i,animationDelay:a,initialSpeed:r.config.chart.animations.speed,dataChangeSpeed:r.config.chart.animations.dynamicAnimation.speed,className:"apexcharts-".concat(t)};if(t==="area")for(var x=o.fillPath({seriesNumber:i}),b=0;b0&&t!=="rangeArea"){var k=n.renderPaths(m);k.node.setAttribute("stroke-dasharray",h.dashArray),h.strokeWidth&&k.node.setAttribute("stroke-width",h.strokeWidth),this.elSeries.add(k),k.attr("clip-path","url(#forecastMask".concat(r.globals.cuid,")")),A.attr("clip-path","url(#nonForecastMask".concat(r.globals.cuid,")"))}}}}},{key:"_iterateOverDataPoints",value:function(e){var t,i,a=this,s=e.type,r=e.series,n=e.iterations,o=e.realIndex,h=e.translationsIndex,c=e.i,d=e.x,g=e.y,f=e.pX,x=e.pY,b=e.pathsFrom,v=e.linePaths,y=e.areaPaths,w=e.seriesIndex,l=e.lineYPosition,u=e.xArrj,m=e.yArrj,A=e.y2Arrj,k=e.isRangeStart,S=e.seriesRangeEnd,L=this.w,C=new X(this.ctx),I=this.yRatio,z=b.prevY,M=b.linePath,T=b.areaPath,E=b.pathFromLine,O=b.pathFromArea,D=P.isNumber(L.globals.minYArr[o])?L.globals.minYArr[o]:L.globals.minY;n||(n=L.globals.dataPoints>1?L.globals.dataPoints-1:L.globals.dataPoints);var H=function(Q,ee){return ee-Q/I[h]+2*(a.isReversed?Q/I[h]:0)},W=g,N=L.config.chart.stacked&&!L.globals.comboCharts||L.config.chart.stacked&&L.globals.comboCharts&&(!this.w.config.chart.stackOnlyBar||((t=this.w.config.series[o])===null||t===void 0?void 0:t.type)==="bar"||((i=this.w.config.series[o])===null||i===void 0?void 0:i.type)==="column"),B=L.config.stroke.curve;Array.isArray(B)&&(B=Array.isArray(w)?B[w[c]]:B[c]);for(var q,Z=0,j=0;j0&&L.globals.collapsedSeries.length0;ee--){if(!(L.globals.collapsedSeriesIndices.indexOf(w?.[ee]||ee)>-1))return ee;ee--}return 0}(c-1)][j+1]:l=this.zeroY:l=this.zeroY,se?g=H(D,l):(g=H(r[c][j+1],l),s==="rangeArea"&&(W=H(S[c][j+1],l))),u.push(d),!se||L.config.stroke.curve!=="smooth"&&L.config.stroke.curve!=="monotoneCubic"?(m.push(g),A.push(W)):(m.push(null),A.push(null));var G=this.lineHelpers.calculatePoints({series:r,x:d,y:g,realIndex:o,i:c,j,prevY:z}),_=this._createPaths({type:s,series:r,i:c,realIndex:o,j,x:d,y:g,y2:W,xArrj:u,yArrj:m,y2Arrj:A,pX:f,pY:x,pathState:Z,segmentStartX:q,linePath:M,areaPath:T,linePaths:v,areaPaths:y,curve:B,isRangeStart:k});y=_.areaPaths,v=_.linePaths,f=_.pX,x=_.pY,Z=_.pathState,q=_.segmentStartX,T=_.areaPath,M=_.linePath,!this.appendPathFrom||B==="monotoneCubic"&&s==="rangeArea"||(E+=C.line(d,this.zeroY),O+=C.line(d,this.zeroY)),this.handleNullDataPoints(r,G,c,j,o),this._handleMarkersAndLabels({type:s,pointsPos:G,i:c,j,realIndex:o,isRangeStart:k})}return{yArrj:m,xArrj:u,pathFromArea:O,areaPaths:y,pathFromLine:E,linePaths:v,linePath:M,areaPath:T}}},{key:"_handleMarkersAndLabels",value:function(e){var t=e.type,i=e.pointsPos,a=e.isRangeStart,s=e.i,r=e.j,n=e.realIndex,o=this.w,h=new be(this.ctx);if(this.pointsChart)this.scatter.draw(this.elSeries,r,{realIndex:n,pointsPos:i,zRatio:this.zRatio,elParent:this.elPointsMain});else{o.globals.series[s].length>1&&this.elPointsMain.node.classList.add("apexcharts-element-hidden");var c=this.markers.plotChartMarkers(i,n,r+1);c!==null&&this.elPointsMain.add(c)}var d=h.drawDataLabel({type:t,isRangeStart:a,pos:i,i:n,j:r+1});d!==null&&this.elDataLabelsWrap.add(d)}},{key:"_createPaths",value:function(e){var t=e.type,i=e.series,a=e.i;e.realIndex;var s=e.j,r=e.x,n=e.y,o=e.xArrj,h=e.yArrj,c=e.y2,d=e.y2Arrj,g=e.pX,f=e.pY,x=e.pathState,b=e.segmentStartX,v=e.linePath,y=e.areaPath,w=e.linePaths,l=e.areaPaths,u=e.curve,m=e.isRangeStart;this.w;var A,k=new X(this.ctx),S=this.areaBottomY,L=t==="rangeArea",C=t==="rangeArea"&&m;switch(u){case"monotoneCubic":var I=m?h:d;switch(x){case 0:if(I[s+1]===null)break;x=1;case 1:if(!(L?o.length===i[a].length:s===i[a].length-2))break;case 2:var z=m?o:o.slice().reverse(),M=m?I:I.slice().reverse(),T=(A=M,z.map(function(V,G){return[V,A[G]]}).filter(function(V){return V[1]!==null})),E=T.length>1?oa(T):T,O=[];L&&(C?l=T:O=l.reverse());var D=0,H=0;if(function(V,G){for(var _=function(Se){var ae=[],le=0;return Se.forEach(function(Si){Si!==null?le++:le>0&&(ae.push(le),le=0)}),le>0&&ae.push(le),ae}(V),Q=[],ee=0,oe=0;ee<_.length;oe+=_[ee++])Q[ee]=la(G,oe,oe+_[ee]);return Q}(M,E).forEach(function(V){D++;var G=function(ee){for(var oe="",Se=0;Se4?(oe+="C".concat(ae[0],", ").concat(ae[1]),oe+=", ".concat(ae[2],", ").concat(ae[3]),oe+=", ".concat(ae[4],", ").concat(ae[5])):le>2&&(oe+="S".concat(ae[0],", ").concat(ae[1]),oe+=", ".concat(ae[2],", ").concat(ae[3]))}return oe}(V),_=H,Q=(H+=V.length)-1;C?v=k.move(T[_][0],T[_][1])+G:L?v=k.move(O[_][0],O[_][1])+k.line(T[_][0],T[_][1])+G+k.line(O[Q][0],O[Q][1]):(v=k.move(T[_][0],T[_][1])+G,y=v+k.line(T[Q][0],S)+k.line(T[_][0],S)+"z",l.push(y)),w.push(v)}),L&&D>1&&!C){var W=w.slice(D).reverse();w.splice(D),W.forEach(function(V){return w.push(V)})}x=0}break;case"smooth":var N=.35*(r-g);if(i[a][s]===null)x=0;else switch(x){case 0:if(b=g,v=C?k.move(g,d[s])+k.line(g,f):k.move(g,f),y=k.move(g,f),x=1,s=i[a].length-2&&(C&&(v+=k.curve(r,n,r,n,r,c)+k.move(r,c)),y+=k.curve(r,n,r,n,r,S)+k.line(b,S)+"z",w.push(v),l.push(y),x=-1)}}g=r,f=n;break;default:var Z=function(V,G,_){var Q=[];switch(V){case"stepline":Q=k.line(G,null,"H")+k.line(null,_,"V");break;case"linestep":Q=k.line(null,_,"V")+k.line(G,null,"H");break;case"straight":Q=k.line(G,_)}return Q};if(i[a][s]===null)x=0;else switch(x){case 0:if(b=g,v=C?k.move(g,d[s])+k.line(g,f):k.move(g,f),y=k.move(g,f),x=1,s=i[a].length-2&&(C&&(v+=k.line(r,c)),y+=k.line(r,S)+k.line(b,S)+"z",w.push(v),l.push(y),x=-1)}}g=r,f=n}return{linePaths:w,areaPaths:l,pX:g,pY:f,pathState:x,segmentStartX:b,linePath:v,areaPath:y}}},{key:"handleNullDataPoints",value:function(e,t,i,a,s){var r=this.w;if(e[i][a]===null&&r.config.markers.showNullDataPoints||e[i].length===1){var n=this.strokeWidth-r.config.markers.strokeWidth/2;n>0||(n=0);var o=this.markers.plotChartMarkers(t,s,a+1,n,!0);o!==null&&this.elPointsMain.add(o)}}}]),p}();window.TreemapSquared={},window.TreemapSquared.generate=function(){function p(n,o,h,c){this.xoffset=n,this.yoffset=o,this.height=c,this.width=h,this.shortestEdge=function(){return Math.min(this.height,this.width)},this.getCoordinates=function(d){var g,f=[],x=this.xoffset,b=this.yoffset,v=s(d)/this.height,y=s(d)/this.width;if(this.width>=this.height)for(g=0;g=this.height){var f=d/this.height,x=this.width-f;g=new p(this.xoffset+f,this.yoffset,x,this.height)}else{var b=d/this.width,v=this.height-b;g=new p(this.xoffset,this.yoffset+b,this.width,v)}return g}}function e(n,o,h,c,d){c=c===void 0?0:c,d=d===void 0?0:d;var g=t(function(f,x){var b,v=[],y=x/s(f);for(b=0;b=l}(o,g=n[0],d)?(o.push(g),t(n.slice(1),o,h,c)):(f=h.cutArea(s(o),c),c.push(h.getCoordinates(o)),t(n,[],f,c)),c;c.push(h.getCoordinates(o))}function i(n,o){var h=Math.min.apply(Math,n),c=Math.max.apply(Math,n),d=s(n);return Math.max(Math.pow(o,2)*c/Math.pow(d,2),Math.pow(d,2)/(Math.pow(o,2)*h))}function a(n){return n&&n.constructor===Array}function s(n){var o,h=0;for(o=0;or-a&&h.width<=n-s){var c=o.rotateAroundCenter(e.node);e.node.setAttribute("transform","rotate(-90 ".concat(c.x," ").concat(c.y,") translate(").concat(h.height/3,")"))}}},{key:"truncateLabels",value:function(e,t,i,a,s,r){var n=new X(this.ctx),o=n.getTextRects(e,t).width+this.w.config.stroke.width+5>s-i&&r-a>s-i?r-a:s-i,h=n.getTextBasedOnMaxWidth({text:e,maxWidth:o,fontSize:t});return e.length!==h.length&&o/t<5?"":h}},{key:"animateTreemap",value:function(e,t,i,a){var s=new ve(this.ctx);s.animateRect(e,{x:t.x,y:t.y,width:t.width,height:t.height},{x:i.x,y:i.y,width:i.width,height:i.height},a,function(){s.animationCompleted(e)})}}]),p}(),_t=86400,ca=10/_t,da=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w,this.timeScaleArray=[],this.utc=this.w.config.xaxis.labels.datetimeUTC}return R(p,[{key:"calculateTimeScaleTicks",value:function(e,t){var i=this,a=this.w;if(a.globals.allSeriesCollapsed)return a.globals.labels=[],a.globals.timescaleLabels=[],[];var s=new K(this.ctx),r=(t-e)/864e5;this.determineInterval(r),a.globals.disableZoomIn=!1,a.globals.disableZoomOut=!1,r5e4&&(a.globals.disableZoomOut=!0);var n=s.getTimeUnitsfromTimestamp(e,t,this.utc),o=a.globals.gridWidth/r,h=o/24,c=h/60,d=c/60,g=Math.floor(24*r),f=Math.floor(1440*r),x=Math.floor(r*_t),b=Math.floor(r),v=Math.floor(r/30),y=Math.floor(r/365),w={minMillisecond:n.minMillisecond,minSecond:n.minSecond,minMinute:n.minMinute,minHour:n.minHour,minDate:n.minDate,minMonth:n.minMonth,minYear:n.minYear},l={firstVal:w,currentMillisecond:w.minMillisecond,currentSecond:w.minSecond,currentMinute:w.minMinute,currentHour:w.minHour,currentMonthDate:w.minDate,currentDate:w.minDate,currentMonth:w.minMonth,currentYear:w.minYear,daysWidthOnXAxis:o,hoursWidthOnXAxis:h,minutesWidthOnXAxis:c,secondsWidthOnXAxis:d,numberOfSeconds:x,numberOfMinutes:f,numberOfHours:g,numberOfDays:b,numberOfMonths:v,numberOfYears:y};switch(this.tickInterval){case"years":this.generateYearScale(l);break;case"months":case"half_year":this.generateMonthScale(l);break;case"months_days":case"months_fortnight":case"days":case"week_days":this.generateDayScale(l);break;case"hours":this.generateHourScale(l);break;case"minutes_fives":case"minutes":this.generateMinuteScale(l);break;case"seconds_tens":case"seconds_fives":case"seconds":this.generateSecondScale(l)}var u=this.timeScaleArray.map(function(m){var A={position:m.position,unit:m.unit,year:m.year,day:m.day?m.day:1,hour:m.hour?m.hour:0,month:m.month+1};return m.unit==="month"?Y(Y({},A),{},{day:1,value:m.value+1}):m.unit==="day"||m.unit==="hour"?Y(Y({},A),{},{value:m.value}):m.unit==="minute"?Y(Y({},A),{},{value:m.value,minute:m.value}):m.unit==="second"?Y(Y({},A),{},{value:m.value,minute:m.minute,second:m.second}):m});return u.filter(function(m){var A=1,k=Math.ceil(a.globals.gridWidth/120),S=m.value;a.config.xaxis.tickAmount!==void 0&&(k=a.config.xaxis.tickAmount),u.length>k&&(A=Math.floor(u.length/k));var L=!1,C=!1;switch(i.tickInterval){case"years":m.unit==="year"&&(L=!0);break;case"half_year":A=7,m.unit==="year"&&(L=!0);break;case"months":A=1,m.unit==="year"&&(L=!0);break;case"months_fortnight":A=15,m.unit!=="year"&&m.unit!=="month"||(L=!0),S===30&&(C=!0);break;case"months_days":A=10,m.unit==="month"&&(L=!0),S===30&&(C=!0);break;case"week_days":A=8,m.unit==="month"&&(L=!0);break;case"days":A=1,m.unit==="month"&&(L=!0);break;case"hours":m.unit==="day"&&(L=!0);break;case"minutes_fives":case"seconds_fives":S%5!=0&&(C=!0);break;case"seconds_tens":S%10!=0&&(C=!0)}if(i.tickInterval==="hours"||i.tickInterval==="minutes_fives"||i.tickInterval==="seconds_tens"||i.tickInterval==="seconds_fives"){if(!C)return!0}else if((S%A==0||L)&&!C)return!0})}},{key:"recalcDimensionsBasedOnFormat",value:function(e,t){var i=this.w,a=this.formatDates(e),s=this.removeOverlappingTS(a);i.globals.timescaleLabels=s.slice(),new Ne(this.ctx).plotCoords()}},{key:"determineInterval",value:function(e){var t=24*e,i=60*t;switch(!0){case e/365>5:this.tickInterval="years";break;case e>800:this.tickInterval="half_year";break;case e>180:this.tickInterval="months";break;case e>90:this.tickInterval="months_fortnight";break;case e>60:this.tickInterval="months_days";break;case e>30:this.tickInterval="week_days";break;case e>2:this.tickInterval="days";break;case t>2.4:this.tickInterval="hours";break;case i>15:this.tickInterval="minutes_fives";break;case i>5:this.tickInterval="minutes";break;case i>1:this.tickInterval="seconds_tens";break;case 60*i>20:this.tickInterval="seconds_fives";break;default:this.tickInterval="seconds"}}},{key:"generateYearScale",value:function(e){var t=e.firstVal,i=e.currentMonth,a=e.currentYear,s=e.daysWidthOnXAxis,r=e.numberOfYears,n=t.minYear,o=0,h=new K(this.ctx),c="year";if(t.minDate>1||t.minMonth>0){var d=h.determineRemainingDaysOfYear(t.minYear,t.minMonth,t.minDate);o=(h.determineDaysOfYear(t.minYear)-d+1)*s,n=t.minYear+1,this.timeScaleArray.push({position:o,value:n,unit:c,year:n,month:P.monthMod(i+1)})}else t.minDate===1&&t.minMonth===0&&this.timeScaleArray.push({position:o,value:n,unit:c,year:a,month:P.monthMod(i+1)});for(var g=n,f=o,x=0;x1){h=(c.determineDaysOfMonths(a+1,t.minYear)-i+1)*r,o=P.monthMod(a+1);var f=s+g,x=P.monthMod(o),b=o;o===0&&(d="year",b=f,x=1,f+=g+=1),this.timeScaleArray.push({position:h,value:b,unit:d,year:f,month:x})}else this.timeScaleArray.push({position:h,value:o,unit:d,year:s,month:P.monthMod(a)});for(var v=o+1,y=h,w=0,l=1;wn.determineDaysOfMonths(u+1,m)&&(c=1,o="month",f=u+=1),u},g=(24-t.minHour)*s,f=h,x=d(c,i,a);t.minHour===0&&t.minDate===1?(g=0,f=P.monthMod(t.minMonth),o="month",c=t.minDate):t.minDate!==1&&t.minHour===0&&t.minMinute===0&&(g=0,h=t.minDate,f=h,x=d(c=h,i,a)),this.timeScaleArray.push({position:g,value:f,unit:o,year:this._getYear(a,x,0),month:P.monthMod(x),day:c});for(var b=g,v=0;vo.determineDaysOfMonths(k+1,s)&&(v=1,k+=1),{month:k,date:v}},d=function(A,k){return A>o.determineDaysOfMonths(k+1,s)?k+=1:k},g=60-(t.minMinute+t.minSecond/60),f=g*r,x=t.minHour+1,b=x;g===60&&(f=0,b=x=t.minHour);var v=i;b>=24&&(b=0,v+=1,h="day");var y=c(v,a).month;y=d(v,y),this.timeScaleArray.push({position:f,value:x,unit:h,day:v,hour:b,year:s,month:P.monthMod(y)}),b++;for(var w=f,l=0;l=24&&(b=0,h="day",y=c(v+=1,y).month,y=d(v,y));var u=this._getYear(s,y,0);w=60*r+w;var m=b===0?v:b;this.timeScaleArray.push({position:w,value:m,unit:h,hour:b,day:v,year:u,month:P.monthMod(y)}),b++}}},{key:"generateMinuteScale",value:function(e){for(var t=e.currentMillisecond,i=e.currentSecond,a=e.currentMinute,s=e.currentHour,r=e.currentDate,n=e.currentMonth,o=e.currentYear,h=e.minutesWidthOnXAxis,c=e.secondsWidthOnXAxis,d=e.numberOfMinutes,g=a+1,f=r,x=n,b=o,v=s,y=(60-i-t/1e3)*c,w=0;w=60&&(g=0,(v+=1)===24&&(v=0)),this.timeScaleArray.push({position:y,value:g,unit:"minute",hour:v,minute:g,day:f,year:this._getYear(b,x,0),month:P.monthMod(x)}),y+=h,g++}},{key:"generateSecondScale",value:function(e){for(var t=e.currentMillisecond,i=e.currentSecond,a=e.currentMinute,s=e.currentHour,r=e.currentDate,n=e.currentMonth,o=e.currentYear,h=e.secondsWidthOnXAxis,c=e.numberOfSeconds,d=i+1,g=a,f=r,x=n,b=o,v=s,y=(1e3-t)/1e3*h,w=0;w=60&&(d=0,++g>=60&&(g=0,++v===24&&(v=0))),this.timeScaleArray.push({position:y,value:d,unit:"second",hour:v,minute:g,second:d,day:f,year:this._getYear(b,x,0),month:P.monthMod(x)}),y+=h,d++}},{key:"createRawDateString",value:function(e,t){var i=e.year;return e.month===0&&(e.month=1),i+="-"+("0"+e.month.toString()).slice(-2),e.unit==="day"?i+=e.unit==="day"?"-"+("0"+t).slice(-2):"-01":i+="-"+("0"+(e.day?e.day:"1")).slice(-2),e.unit==="hour"?i+=e.unit==="hour"?"T"+("0"+t).slice(-2):"T00":i+="T"+("0"+(e.hour?e.hour:"0")).slice(-2),e.unit==="minute"?i+=":"+("0"+t).slice(-2):i+=":"+(e.minute?("0"+e.minute).slice(-2):"00"),e.unit==="second"?i+=":"+("0"+t).slice(-2):i+=":00",this.utc&&(i+=".000Z"),i}},{key:"formatDates",value:function(e){var t=this,i=this.w;return e.map(function(a){var s=a.value.toString(),r=new K(t.ctx),n=t.createRawDateString(a,s),o=r.getDate(r.parseDate(n));if(t.utc||(o=r.getDate(r.parseDateWithTimezone(n))),i.config.xaxis.labels.format===void 0){var h="dd MMM",c=i.config.xaxis.labels.datetimeFormatter;a.unit==="year"&&(h=c.year),a.unit==="month"&&(h=c.month),a.unit==="day"&&(h=c.day),a.unit==="hour"&&(h=c.hour),a.unit==="minute"&&(h=c.minute),a.unit==="second"&&(h=c.second),s=r.formatDate(o,h)}else s=r.formatDate(o,i.config.xaxis.labels.format);return{dateString:n,position:a.position,value:s,unit:a.unit,year:a.year,month:a.month}})}},{key:"removeOverlappingTS",value:function(e){var t,i=this,a=new X(this.ctx),s=!1;e.length>0&&e[0].value&&e.every(function(o){return o.value.length===e[0].value.length})&&(s=!0,t=a.getTextRects(e[0].value).width);var r=0,n=e.map(function(o,h){if(h>0&&i.w.config.xaxis.labels.hideOverlappingLabels){var c=s?t:a.getTextRects(e[r].value).width,d=e[r].position;return o.position>d+c+10?(r=h,o):null}return o});return n=n.filter(function(o){return o!==null})}},{key:"_getYear",value:function(e,t,i){return e+Math.floor(t/12)+i}}]),p}(),ga=function(){function p(e,t){F(this,p),this.ctx=t,this.w=t.w,this.el=e}return R(p,[{key:"setupElements",value:function(){var e=this.w.globals,t=this.w.config,i=t.chart.type;e.axisCharts=["line","area","bar","rangeBar","rangeArea","candlestick","boxPlot","scatter","bubble","radar","heatmap","treemap"].indexOf(i)>-1,e.xyCharts=["line","area","bar","rangeBar","rangeArea","candlestick","boxPlot","scatter","bubble"].indexOf(i)>-1,e.isBarHorizontal=(t.chart.type==="bar"||t.chart.type==="rangeBar"||t.chart.type==="boxPlot")&&t.plotOptions.bar.horizontal,e.chartClass=".apexcharts"+e.chartID,e.dom.baseEl=this.el,e.dom.elWrap=document.createElement("div"),X.setAttrs(e.dom.elWrap,{id:e.chartClass.substring(1),class:"apexcharts-canvas "+e.chartClass.substring(1)}),this.el.appendChild(e.dom.elWrap),e.dom.Paper=new window.SVG.Doc(e.dom.elWrap),e.dom.Paper.attr({class:"apexcharts-svg","xmlns:data":"ApexChartsNS",transform:"translate(".concat(t.chart.offsetX,", ").concat(t.chart.offsetY,")")}),e.dom.Paper.node.style.background=t.theme.mode!=="dark"||t.chart.background?t.theme.mode!=="light"||t.chart.background?t.chart.background:"#fff":"#424242",this.setSVGDimensions(),e.dom.elLegendForeign=document.createElementNS(e.SVGNS,"foreignObject"),X.setAttrs(e.dom.elLegendForeign,{x:0,y:0,width:e.svgWidth,height:e.svgHeight}),e.dom.elLegendWrap=document.createElement("div"),e.dom.elLegendWrap.classList.add("apexcharts-legend"),e.dom.elLegendWrap.setAttribute("xmlns","http://www.w3.org/1999/xhtml"),e.dom.elLegendForeign.appendChild(e.dom.elLegendWrap),e.dom.Paper.node.appendChild(e.dom.elLegendForeign),e.dom.elGraphical=e.dom.Paper.group().attr({class:"apexcharts-inner apexcharts-graphical"}),e.dom.elDefs=e.dom.Paper.defs(),e.dom.Paper.add(e.dom.elGraphical),e.dom.elGraphical.add(e.dom.elDefs)}},{key:"plotChartType",value:function(e,t){var i=this.w,a=i.config,s=i.globals,r={series:[],i:[]},n={series:[],i:[]},o={series:[],i:[]},h={series:[],i:[]},c={series:[],i:[]},d={series:[],i:[]},g={series:[],i:[]},f={series:[],i:[]},x={series:[],seriesRangeEnd:[],i:[]},b=a.chart.type!==void 0?a.chart.type:"line",v=null,y=0;s.series.forEach(function(M,T){var E=e[T].type||b;switch(E){case"column":case"bar":c.series.push(M),c.i.push(T),i.globals.columnSeries=c;break;case"area":n.series.push(M),n.i.push(T);break;case"line":r.series.push(M),r.i.push(T);break;case"scatter":o.series.push(M),o.i.push(T);break;case"bubble":h.series.push(M),h.i.push(T);break;case"candlestick":d.series.push(M),d.i.push(T);break;case"boxPlot":g.series.push(M),g.i.push(T);break;case"rangeBar":f.series.push(M),f.i.push(T);break;case"rangeArea":x.series.push(s.seriesRangeStart[T]),x.seriesRangeEnd.push(s.seriesRangeEnd[T]),x.i.push(T);break;case"heatmap":case"treemap":case"pie":case"donut":case"polarArea":case"radialBar":case"radar":v=E;break;default:console.warn("You have specified an unrecognized series type (",E,").")}b!==E&&E!=="scatter"&&y++}),y>0&&(v!==null&&console.warn("Chart or series type ",v," can not appear with other chart or series types."),c.series.length>0&&a.plotOptions.bar.horizontal&&(y-=c.length,c={series:[],i:[]},i.globals.columnSeries={series:[],i:[]},console.warn("Horizontal bars are not supported in a mixed/combo chart. Please turn off `plotOptions.bar.horizontal`"))),s.comboCharts||(s.comboCharts=y>0);var w=new tt(this.ctx,t),l=new Qe(this.ctx,t);this.ctx.pie=new Vt(this.ctx);var u=new aa(this.ctx);this.ctx.rangeBar=new sa(this.ctx,t);var m=new ia(this.ctx),A=[];if(s.comboCharts){var k,S,L=new $(this.ctx);if(n.series.length>0&&(k=A).push.apply(k,te(L.drawSeriesByGroup(n,s.areaGroups,"area",w))),c.series.length>0)if(i.config.chart.stacked){var C=new St(this.ctx,t);A.push(C.draw(c.series,c.i))}else this.ctx.bar=new me(this.ctx,t),A.push(this.ctx.bar.draw(c.series,c.i));if(x.series.length>0&&A.push(w.draw(x.series,"rangeArea",x.i,x.seriesRangeEnd)),r.series.length>0&&(S=A).push.apply(S,te(L.drawSeriesByGroup(r,s.lineGroups,"line",w))),d.series.length>0&&A.push(l.draw(d.series,"candlestick",d.i)),g.series.length>0&&A.push(l.draw(g.series,"boxPlot",g.i)),f.series.length>0&&A.push(this.ctx.rangeBar.draw(f.series,f.i)),o.series.length>0){var I=new tt(this.ctx,t,!0);A.push(I.draw(o.series,"scatter",o.i))}if(h.series.length>0){var z=new tt(this.ctx,t,!0);A.push(z.draw(h.series,"bubble",h.i))}}else switch(a.chart.type){case"line":A=w.draw(s.series,"line");break;case"area":A=w.draw(s.series,"area");break;case"bar":a.chart.stacked?A=new St(this.ctx,t).draw(s.series):(this.ctx.bar=new me(this.ctx,t),A=this.ctx.bar.draw(s.series));break;case"candlestick":A=new Qe(this.ctx,t).draw(s.series,"candlestick");break;case"boxPlot":A=new Qe(this.ctx,t).draw(s.series,a.chart.type);break;case"rangeBar":A=this.ctx.rangeBar.draw(s.series);break;case"rangeArea":A=w.draw(s.seriesRangeStart,"rangeArea",void 0,s.seriesRangeEnd);break;case"heatmap":A=new ta(this.ctx,t).draw(s.series);break;case"treemap":A=new ha(this.ctx,t).draw(s.series);break;case"pie":case"donut":case"polarArea":A=this.ctx.pie.draw(s.series);break;case"radialBar":A=u.draw(s.series);break;case"radar":A=m.draw(s.series);break;default:A=w.draw(s.series)}return A}},{key:"setSVGDimensions",value:function(){var e=this.w.globals,t=this.w.config;t.chart.width||(t.chart.width="100%"),t.chart.height||(t.chart.height="auto"),e.svgWidth=t.chart.width,e.svgHeight=t.chart.height;var i=P.getDimensions(this.el),a=t.chart.width.toString().split(/[0-9]+/g).pop();a==="%"?P.isNumber(i[0])&&(i[0].width===0&&(i=P.getDimensions(this.el.parentNode)),e.svgWidth=i[0]*parseInt(t.chart.width,10)/100):a!=="px"&&a!==""||(e.svgWidth=parseInt(t.chart.width,10));var s=String(t.chart.height).toString().split(/[0-9]+/g).pop();if(e.svgHeight!=="auto"&&e.svgHeight!=="")if(s==="%"){var r=P.getDimensions(this.el.parentNode);e.svgHeight=r[1]*parseInt(t.chart.height,10)/100}else e.svgHeight=parseInt(t.chart.height,10);else e.axisCharts?e.svgHeight=e.svgWidth/1.61:e.svgHeight=e.svgWidth/1.2;if(e.svgWidth<0&&(e.svgWidth=0),e.svgHeight<0&&(e.svgHeight=0),X.setAttrs(e.dom.Paper.node,{width:e.svgWidth,height:e.svgHeight}),s!=="%"){var n=t.chart.sparkline.enabled?0:e.axisCharts?t.chart.parentHeightOffset:0;e.dom.Paper.node.parentNode.parentNode.style.minHeight=e.svgHeight+n+"px"}e.dom.elWrap.style.width=e.svgWidth+"px",e.dom.elWrap.style.height=e.svgHeight+"px"}},{key:"shiftGraphPosition",value:function(){var e=this.w.globals,t=e.translateY,i={transform:"translate("+e.translateX+", "+t+")"};X.setAttrs(e.dom.elGraphical.node,i)}},{key:"resizeNonAxisCharts",value:function(){var e=this.w,t=e.globals,i=0,a=e.config.chart.sparkline.enabled?1:15;a+=e.config.grid.padding.bottom,e.config.legend.position!=="top"&&e.config.legend.position!=="bottom"||!e.config.legend.show||e.config.legend.floating||(i=new Dt(this.ctx).legendHelpers.getLegendDimensions().clwh+10);var s=e.globals.dom.baseEl.querySelector(".apexcharts-radialbar, .apexcharts-pie"),r=2.05*e.globals.radialSize;if(s&&!e.config.chart.sparkline.enabled&&e.config.plotOptions.radialBar.startAngle!==0){var n=P.getBoundingClientRect(s);r=n.bottom;var o=n.bottom-n.top;r=Math.max(2.05*e.globals.radialSize,o)}var h=r+t.translateY+i+a;t.dom.elLegendForeign&&t.dom.elLegendForeign.setAttribute("height",h),e.config.chart.height&&String(e.config.chart.height).indexOf("%")>0||(t.dom.elWrap.style.height=h+"px",X.setAttrs(t.dom.Paper.node,{height:h}),t.dom.Paper.node.parentNode.parentNode.style.minHeight=h+"px")}},{key:"coreCalculations",value:function(){new rt(this.ctx).init()}},{key:"resetGlobals",value:function(){var e=this,t=function(){return e.w.config.series.map(function(s){return[]})},i=new Et,a=this.w.globals;i.initGlobalVars(a),a.seriesXvalues=t(),a.seriesYvalues=t()}},{key:"isMultipleY",value:function(){if(this.w.config.yaxis.constructor===Array&&this.w.config.yaxis.length>1)return this.w.globals.isMultipleYAxis=!0,!0}},{key:"xySettings",value:function(){var e=null,t=this.w;if(t.globals.axisCharts){if(t.config.xaxis.crosshairs.position==="back"&&new nt(this.ctx).drawXCrosshairs(),t.config.yaxis[0].crosshairs.position==="back"&&new nt(this.ctx).drawYCrosshairs(),t.config.xaxis.type==="datetime"&&t.config.xaxis.labels.formatter===void 0){this.ctx.timeScale=new da(this.ctx);var i=[];isFinite(t.globals.minX)&&isFinite(t.globals.maxX)&&!t.globals.isBarHorizontal?i=this.ctx.timeScale.calculateTimeScaleTicks(t.globals.minX,t.globals.maxX):t.globals.isBarHorizontal&&(i=this.ctx.timeScale.calculateTimeScaleTicks(t.globals.minY,t.globals.maxY)),this.ctx.timeScale.recalcDimensionsBasedOnFormat(i)}e=new $(this.ctx).getCalculatedRatios()}return e}},{key:"updateSourceChart",value:function(e){this.ctx.w.globals.selection=void 0,this.ctx.updateHelpers._updateOptions({chart:{selection:{xaxis:{min:e.w.globals.minX,max:e.w.globals.maxX}}}},!1,!1)}},{key:"setupBrushHandler",value:function(){var e=this,t=this.w;if(t.config.chart.brush.enabled&&typeof t.config.chart.events.selection!="function"){var i=Array.isArray(t.config.chart.brush.targets)?t.config.chart.brush.targets:[t.config.chart.brush.target];i.forEach(function(a){var s=ApexCharts.getChartByID(a);s.w.globals.brushSource=e.ctx,typeof s.w.config.chart.events.zoomed!="function"&&(s.w.config.chart.events.zoomed=function(){e.updateSourceChart(s)}),typeof s.w.config.chart.events.scrolled!="function"&&(s.w.config.chart.events.scrolled=function(){e.updateSourceChart(s)})}),t.config.chart.events.selection=function(a,s){i.forEach(function(r){ApexCharts.getChartByID(r).ctx.updateHelpers._updateOptions({xaxis:{min:s.xaxis.min,max:s.xaxis.max}},!1,!1,!1,!1)})}}}}]),p}(),ua=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"_updateOptions",value:function(e){var t=this,i=arguments.length>1&&arguments[1]!==void 0&&arguments[1],a=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2],s=!(arguments.length>3&&arguments[3]!==void 0)||arguments[3],r=arguments.length>4&&arguments[4]!==void 0&&arguments[4];return new Promise(function(n){var o=[t.ctx];s&&(o=t.ctx.getSyncedCharts()),t.ctx.w.globals.isExecCalled&&(o=[t.ctx],t.ctx.w.globals.isExecCalled=!1),o.forEach(function(h,c){var d=h.w;if(d.globals.shouldAnimate=a,i||(d.globals.resized=!0,d.globals.dataChanged=!0,a&&h.series.getPreviousPaths()),e&&J(e)==="object"&&(h.config=new Pe(e),e=$.extendArrayProps(h.config,e,d),h.w.globals.chartID!==t.ctx.w.globals.chartID&&delete e.series,d.config=P.extend(d.config,e),r&&(d.globals.lastXAxis=e.xaxis?P.clone(e.xaxis):[],d.globals.lastYAxis=e.yaxis?P.clone(e.yaxis):[],d.globals.initialConfig=P.extend({},d.config),d.globals.initialSeries=P.clone(d.config.series),e.series))){for(var g=0;g2&&arguments[2]!==void 0&&arguments[2];return new Promise(function(s){var r,n=i.w;return n.globals.shouldAnimate=t,n.globals.dataChanged=!0,t&&i.ctx.series.getPreviousPaths(),n.globals.axisCharts?((r=e.map(function(o,h){return i._extendSeries(o,h)})).length===0&&(r=[{data:[]}]),n.config.series=r):n.config.series=e.slice(),a&&(n.globals.initialConfig.series=P.clone(n.config.series),n.globals.initialSeries=P.clone(n.config.series)),i.ctx.update().then(function(){s(i.ctx)})})}},{key:"_extendSeries",value:function(e,t){var i=this.w,a=i.config.series[t];return Y(Y({},i.config.series[t]),{},{name:e.name?e.name:a?.name,color:e.color?e.color:a?.color,type:e.type?e.type:a?.type,group:e.group?e.group:a?.group,hidden:e.hidden!==void 0?e.hidden:a?.hidden,data:e.data?e.data:a?.data,zIndex:e.zIndex!==void 0?e.zIndex:t})}},{key:"toggleDataPointSelection",value:function(e,t){var i=this.w,a=null,s=".apexcharts-series[data\\:realIndex='".concat(e,"']");return i.globals.axisCharts?a=i.globals.dom.Paper.select("".concat(s," path[j='").concat(t,"'], ").concat(s," circle[j='").concat(t,"'], ").concat(s," rect[j='").concat(t,"']")).members[0]:t===void 0&&(a=i.globals.dom.Paper.select("".concat(s," path[j='").concat(e,"']")).members[0],i.config.chart.type!=="pie"&&i.config.chart.type!=="polarArea"&&i.config.chart.type!=="donut"||this.ctx.pie.pieClicked(e)),a?(new X(this.ctx).pathMouseDown(a,null),a.node?a.node:null):(console.warn("toggleDataPointSelection: Element not found"),null)}},{key:"forceXAxisUpdate",value:function(e){var t=this.w;if(["min","max"].forEach(function(a){e.xaxis[a]!==void 0&&(t.config.xaxis[a]=e.xaxis[a],t.globals.lastXAxis[a]=e.xaxis[a])}),e.xaxis.categories&&e.xaxis.categories.length&&(t.config.xaxis.categories=e.xaxis.categories),t.config.xaxis.convertedCatToNumeric){var i=new Le(e);e=i.convertCatToNumericXaxis(e,this.ctx)}return e}},{key:"forceYAxisUpdate",value:function(e){return e.chart&&e.chart.stacked&&e.chart.stackType==="100%"&&(Array.isArray(e.yaxis)?e.yaxis.forEach(function(t,i){e.yaxis[i].min=0,e.yaxis[i].max=100}):(e.yaxis.min=0,e.yaxis.max=100)),e}},{key:"revertDefaultAxisMinMax",value:function(e){var t=this,i=this.w,a=i.globals.lastXAxis,s=i.globals.lastYAxis;e&&e.xaxis&&(a=e.xaxis),e&&e.yaxis&&(s=e.yaxis),i.config.xaxis.min=a.min,i.config.xaxis.max=a.max;var r=function(n){s[n]!==void 0&&(i.config.yaxis[n].min=s[n].min,i.config.yaxis[n].max=s[n].max)};i.config.yaxis.map(function(n,o){i.globals.zoomed||s[o]!==void 0?r(o):t.ctx.opts.yaxis[o]!==void 0&&(n.min=t.ctx.opts.yaxis[o].min,n.max=t.ctx.opts.yaxis[o].max)})}}]),p}();he=typeof window<"u"?window:void 0,Ce=function(p,e){var t=(this!==void 0?this:p).SVG=function(l){if(t.supported)return l=new t.Doc(l),t.parser.draw||t.prepare(),l};if(t.ns="http://www.w3.org/2000/svg",t.xmlns="http://www.w3.org/2000/xmlns/",t.xlink="http://www.w3.org/1999/xlink",t.svgjs="http://svgjs.dev",t.supported=!0,!t.supported)return!1;t.did=1e3,t.eid=function(l){return"Svgjs"+c(l)+t.did++},t.create=function(l){var u=e.createElementNS(this.ns,l);return u.setAttribute("id",this.eid(l)),u},t.extend=function(){var l,u;u=(l=[].slice.call(arguments)).pop();for(var m=l.length-1;m>=0;m--)if(l[m])for(var A in u)l[m].prototype[A]=u[A];t.Set&&t.Set.inherit&&t.Set.inherit()},t.invent=function(l){var u=typeof l.create=="function"?l.create:function(){this.constructor.call(this,t.create(l.create))};return l.inherit&&(u.prototype=new l.inherit),l.extend&&t.extend(u,l.extend),l.construct&&t.extend(l.parent||t.Container,l.construct),u},t.adopt=function(l){return l?l.instance?l.instance:((u=l.nodeName=="svg"?l.parentNode instanceof p.SVGElement?new t.Nested:new t.Doc:l.nodeName=="linearGradient"?new t.Gradient("linear"):l.nodeName=="radialGradient"?new t.Gradient("radial"):t[c(l.nodeName)]?new t[c(l.nodeName)]:new t.Element(l)).type=l.nodeName,u.node=l,l.instance=u,u instanceof t.Doc&&u.namespace().defs(),u.setData(JSON.parse(l.getAttribute("svgjs:data"))||{}),u):null;var u},t.prepare=function(){var l=e.getElementsByTagName("body")[0],u=(l?new t.Doc(l):t.adopt(e.documentElement).nested()).size(2,0);t.parser={body:l||e.documentElement,draw:u.style("opacity:0;position:absolute;left:-100%;top:-100%;overflow:hidden").node,poly:u.polyline().node,path:u.path().node,native:t.create("svg")}},t.parser={native:t.create("svg")},e.addEventListener("DOMContentLoaded",function(){t.parser.draw||t.prepare()},!1),t.regex={numberAndUnit:/^([+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?)([a-z%]*)$/i,hex:/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i,rgb:/rgb\((\d+),(\d+),(\d+)\)/,reference:/#([a-z0-9\-_]+)/i,transforms:/\)\s*,?\s*/,whitespace:/\s/g,isHex:/^#[a-f0-9]{3,6}$/i,isRgb:/^rgb\(/,isCss:/[^:]+:[^;]+;?/,isBlank:/^(\s+)?$/,isNumber:/^[+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,isPercent:/^-?[\d\.]+%$/,isImage:/\.(jpg|jpeg|png|gif|svg)(\?[^=]+.*)?/i,delimiter:/[\s,]+/,hyphen:/([^e])\-/gi,pathLetters:/[MLHVCSQTAZ]/gi,isPathLetter:/[MLHVCSQTAZ]/i,numbersWithDots:/((\d?\.\d+(?:e[+-]?\d+)?)((?:\.\d+(?:e[+-]?\d+)?)+))+/gi,dots:/\./g},t.utils={map:function(l,u){for(var m=l.length,A=[],k=0;k1?1:l,new t.Color({r:~~(this.r+(this.destination.r-this.r)*l),g:~~(this.g+(this.destination.g-this.g)*l),b:~~(this.b+(this.destination.b-this.b)*l)})):this}}),t.Color.test=function(l){return l+="",t.regex.isHex.test(l)||t.regex.isRgb.test(l)},t.Color.isRgb=function(l){return l&&typeof l.r=="number"&&typeof l.g=="number"&&typeof l.b=="number"},t.Color.isColor=function(l){return t.Color.isRgb(l)||t.Color.test(l)},t.Array=function(l,u){(l=(l||[]).valueOf()).length==0&&u&&(l=u.valueOf()),this.value=this.parse(l)},t.extend(t.Array,{toString:function(){return this.value.join(" ")},valueOf:function(){return this.value},parse:function(l){return l=l.valueOf(),Array.isArray(l)?l:this.split(l)}}),t.PointArray=function(l,u){t.Array.call(this,l,u||[[0,0]])},t.PointArray.prototype=new t.Array,t.PointArray.prototype.constructor=t.PointArray;for(var i={M:function(l,u,m){return u.x=m.x=l[0],u.y=m.y=l[1],["M",u.x,u.y]},L:function(l,u){return u.x=l[0],u.y=l[1],["L",l[0],l[1]]},H:function(l,u){return u.x=l[0],["H",l[0]]},V:function(l,u){return u.y=l[0],["V",l[0]]},C:function(l,u){return u.x=l[4],u.y=l[5],["C",l[0],l[1],l[2],l[3],l[4],l[5]]},Q:function(l,u){return u.x=l[2],u.y=l[3],["Q",l[0],l[1],l[2],l[3]]},S:function(l,u){return u.x=l[2],u.y=l[3],["S",l[0],l[1],l[2],l[3]]},Z:function(l,u,m){return u.x=m.x,u.y=m.y,["Z"]}},a="mlhvqtcsaz".split(""),s=0,r=a.length;sL);return A},bbox:function(){return t.parser.draw||t.prepare(),t.parser.path.setAttribute("d",this.toString()),t.parser.path.getBBox()}}),t.Number=t.invent({create:function(l,u){this.value=0,this.unit=u||"",typeof l=="number"?this.value=isNaN(l)?0:isFinite(l)?l:l<0?-34e37:34e37:typeof l=="string"?(u=l.match(t.regex.numberAndUnit))&&(this.value=parseFloat(u[1]),u[5]=="%"?this.value/=100:u[5]=="s"&&(this.value*=1e3),this.unit=u[5]):l instanceof t.Number&&(this.value=l.valueOf(),this.unit=l.unit)},extend:{toString:function(){return(this.unit=="%"?~~(1e8*this.value)/1e6:this.unit=="s"?this.value/1e3:this.value)+this.unit},toJSON:function(){return this.toString()},valueOf:function(){return this.value},plus:function(l){return l=new t.Number(l),new t.Number(this+l,this.unit||l.unit)},minus:function(l){return l=new t.Number(l),new t.Number(this-l,this.unit||l.unit)},times:function(l){return l=new t.Number(l),new t.Number(this*l,this.unit||l.unit)},divide:function(l){return l=new t.Number(l),new t.Number(this/l,this.unit||l.unit)},to:function(l){var u=new t.Number(this);return typeof l=="string"&&(u.unit=l),u},morph:function(l){return this.destination=new t.Number(l),l.relative&&(this.destination.value+=this.value),this},at:function(l){return this.destination?new t.Number(this.destination).minus(this).times(l).plus(this):this}}}),t.Element=t.invent({create:function(l){this._stroke=t.defaults.attrs.stroke,this._event=null,this.dom={},(this.node=l)&&(this.type=l.nodeName,this.node.instance=this,this._stroke=l.getAttribute("stroke")||this._stroke)},extend:{x:function(l){return this.attr("x",l)},y:function(l){return this.attr("y",l)},cx:function(l){return l==null?this.x()+this.width()/2:this.x(l-this.width()/2)},cy:function(l){return l==null?this.y()+this.height()/2:this.y(l-this.height()/2)},move:function(l,u){return this.x(l).y(u)},center:function(l,u){return this.cx(l).cy(u)},width:function(l){return this.attr("width",l)},height:function(l){return this.attr("height",l)},size:function(l,u){var m=g(this,l,u);return this.width(new t.Number(m.width)).height(new t.Number(m.height))},clone:function(l){this.writeDataToDom();var u=b(this.node.cloneNode(!0));return l?l.add(u):this.after(u),u},remove:function(){return this.parent()&&this.parent().removeElement(this),this},replace:function(l){return this.after(l).remove(),l},addTo:function(l){return l.put(this)},putIn:function(l){return l.add(this)},id:function(l){return this.attr("id",l)},show:function(){return this.style("display","")},hide:function(){return this.style("display","none")},visible:function(){return this.style("display")!="none"},toString:function(){return this.attr("id")},classes:function(){var l=this.attr("class");return l==null?[]:l.trim().split(t.regex.delimiter)},hasClass:function(l){return this.classes().indexOf(l)!=-1},addClass:function(l){if(!this.hasClass(l)){var u=this.classes();u.push(l),this.attr("class",u.join(" "))}return this},removeClass:function(l){return this.hasClass(l)&&this.attr("class",this.classes().filter(function(u){return u!=l}).join(" ")),this},toggleClass:function(l){return this.hasClass(l)?this.removeClass(l):this.addClass(l)},reference:function(l){return t.get(this.attr(l))},parent:function(l){var u=this;if(!u.node.parentNode)return null;if(u=t.adopt(u.node.parentNode),!l)return u;for(;u&&u.node instanceof p.SVGElement;){if(typeof l=="string"?u.matches(l):u instanceof l)return u;if(!u.node.parentNode||u.node.parentNode.nodeName=="#document")return null;u=t.adopt(u.node.parentNode)}},doc:function(){return this instanceof t.Doc?this:this.parent(t.Doc)},parents:function(l){var u=[],m=this;do{if(!(m=m.parent(l))||!m.node)break;u.push(m)}while(m.parent);return u},matches:function(l){return function(u,m){return(u.matches||u.matchesSelector||u.msMatchesSelector||u.mozMatchesSelector||u.webkitMatchesSelector||u.oMatchesSelector).call(u,m)}(this.node,l)},native:function(){return this.node},svg:function(l){var u=e.createElementNS("http://www.w3.org/2000/svg","svg");if(!(l&&this instanceof t.Parent))return u.appendChild(l=e.createElementNS("http://www.w3.org/2000/svg","svg")),this.writeDataToDom(),l.appendChild(this.node.cloneNode(!0)),u.innerHTML.replace(/^/,"").replace(/<\/svg>$/,"");u.innerHTML=""+l.replace(/\n/,"").replace(/<([\w:-]+)([^<]+?)\/>/g,"<$1$2>")+"";for(var m=0,A=u.firstChild.childNodes.length;m":function(l){return-Math.cos(l*Math.PI)/2+.5},">":function(l){return Math.sin(l*Math.PI/2)},"<":function(l){return 1-Math.cos(l*Math.PI/2)}},t.morph=function(l){return function(u,m){return new t.MorphObj(u,m).at(l)}},t.Situation=t.invent({create:function(l){this.init=!1,this.reversed=!1,this.reversing=!1,this.duration=new t.Number(l.duration).valueOf(),this.delay=new t.Number(l.delay).valueOf(),this.start=+new Date+this.delay,this.finish=this.start+this.duration,this.ease=l.ease,this.loop=0,this.loops=!1,this.animations={},this.attrs={},this.styles={},this.transforms=[],this.once={}}}),t.FX=t.invent({create:function(l){this._target=l,this.situations=[],this.active=!1,this.situation=null,this.paused=!1,this.lastPos=0,this.pos=0,this.absPos=0,this._speed=1},extend:{animate:function(l,u,m){J(l)==="object"&&(u=l.ease,m=l.delay,l=l.duration);var A=new t.Situation({duration:l||1e3,delay:m||0,ease:t.easing[u||"-"]||u});return this.queue(A),this},target:function(l){return l&&l instanceof t.Element?(this._target=l,this):this._target},timeToAbsPos:function(l){return(l-this.situation.start)/(this.situation.duration/this._speed)},absPosToTime:function(l){return this.situation.duration/this._speed*l+this.situation.start},startAnimFrame:function(){this.stopAnimFrame(),this.animationFrame=p.requestAnimationFrame(function(){this.step()}.bind(this))},stopAnimFrame:function(){p.cancelAnimationFrame(this.animationFrame)},start:function(){return!this.active&&this.situation&&(this.active=!0,this.startCurrent()),this},startCurrent:function(){return this.situation.start=+new Date+this.situation.delay/this._speed,this.situation.finish=this.situation.start+this.situation.duration/this._speed,this.initAnimations().step()},queue:function(l){return(typeof l=="function"||l instanceof t.Situation)&&this.situations.push(l),this.situation||(this.situation=this.situations.shift()),this},dequeue:function(){return this.stop(),this.situation=this.situations.shift(),this.situation&&(this.situation instanceof t.Situation?this.start():this.situation.call(this)),this},initAnimations:function(){var l,u=this.situation;if(u.init)return this;for(var m in u.animations){l=this.target()[m](),Array.isArray(l)||(l=[l]),Array.isArray(u.animations[m])||(u.animations[m]=[u.animations[m]]);for(var A=l.length;A--;)u.animations[m][A]instanceof t.Number&&(l[A]=new t.Number(l[A])),u.animations[m][A]=l[A].morph(u.animations[m][A])}for(var m in u.attrs)u.attrs[m]=new t.MorphObj(this.target().attr(m),u.attrs[m]);for(var m in u.styles)u.styles[m]=new t.MorphObj(this.target().style(m),u.styles[m]);return u.initialTransformation=this.target().matrixify(),u.init=!0,this},clearQueue:function(){return this.situations=[],this},clearCurrent:function(){return this.situation=null,this},stop:function(l,u){var m=this.active;return this.active=!1,u&&this.clearQueue(),l&&this.situation&&(!m&&this.startCurrent(),this.atEnd()),this.stopAnimFrame(),this.clearCurrent()},after:function(l){var u=this.last();return this.target().on("finished.fx",function m(A){A.detail.situation==u&&(l.call(this,u),this.off("finished.fx",m))}),this._callStart()},during:function(l){var u=this.last(),m=function(A){A.detail.situation==u&&l.call(this,A.detail.pos,t.morph(A.detail.pos),A.detail.eased,u)};return this.target().off("during.fx",m).on("during.fx",m),this.after(function(){this.off("during.fx",m)}),this._callStart()},afterAll:function(l){var u=function m(A){l.call(this),this.off("allfinished.fx",m)};return this.target().off("allfinished.fx",u).on("allfinished.fx",u),this._callStart()},last:function(){return this.situations.length?this.situations[this.situations.length-1]:this.situation},add:function(l,u,m){return this.last()[m||"animations"][l]=u,this._callStart()},step:function(l){var u,m,A;l||(this.absPos=this.timeToAbsPos(+new Date)),this.situation.loops!==!1?(u=Math.max(this.absPos,0),m=Math.floor(u),this.situation.loops===!0||mthis.lastPos&&S<=k&&(this.situation.once[S].call(this.target(),this.pos,k),delete this.situation.once[S]);return this.active&&this.target().fire("during",{pos:this.pos,eased:k,fx:this,situation:this.situation}),this.situation?(this.eachAt(),this.pos==1&&!this.situation.reversed||this.situation.reversed&&this.pos==0?(this.stopAnimFrame(),this.target().fire("finished",{fx:this,situation:this.situation}),this.situations.length||(this.target().fire("allfinished"),this.situations.length||(this.target().off(".fx"),this.active=!1)),this.active?this.dequeue():this.clearCurrent()):!this.paused&&this.active&&this.startAnimFrame(),this.lastPos=k,this):this},eachAt:function(){var l,u=this,m=this.target(),A=this.situation;for(var k in A.animations)l=[].concat(A.animations[k]).map(function(C){return typeof C!="string"&&C.at?C.at(A.ease(u.pos),u.pos):C}),m[k].apply(m,l);for(var k in A.attrs)l=[k].concat(A.attrs[k]).map(function(I){return typeof I!="string"&&I.at?I.at(A.ease(u.pos),u.pos):I}),m.attr.apply(m,l);for(var k in A.styles)l=[k].concat(A.styles[k]).map(function(I){return typeof I!="string"&&I.at?I.at(A.ease(u.pos),u.pos):I}),m.style.apply(m,l);if(A.transforms.length){l=A.initialTransformation,k=0;for(var S=A.transforms.length;k=0;--m)this[y[m]]=l[y[m]]!=null?l[y[m]]:u[y[m]]},extend:{extract:function(){var l=f(this,0,1);f(this,1,0);var u=180/Math.PI*Math.atan2(l.y,l.x)-90;return{x:this.e,y:this.f,transformedX:(this.e*Math.cos(u*Math.PI/180)+this.f*Math.sin(u*Math.PI/180))/Math.sqrt(this.a*this.a+this.b*this.b),transformedY:(this.f*Math.cos(u*Math.PI/180)+this.e*Math.sin(-u*Math.PI/180))/Math.sqrt(this.c*this.c+this.d*this.d),rotation:u,a:this.a,b:this.b,c:this.c,d:this.d,e:this.e,f:this.f,matrix:new t.Matrix(this)}},clone:function(){return new t.Matrix(this)},morph:function(l){return this.destination=new t.Matrix(l),this},multiply:function(l){return new t.Matrix(this.native().multiply(function(u){return u instanceof t.Matrix||(u=new t.Matrix(u)),u}(l).native()))},inverse:function(){return new t.Matrix(this.native().inverse())},translate:function(l,u){return new t.Matrix(this.native().translate(l||0,u||0))},native:function(){for(var l=t.parser.native.createSVGMatrix(),u=y.length-1;u>=0;u--)l[y[u]]=this[y[u]];return l},toString:function(){return"matrix("+v(this.a)+","+v(this.b)+","+v(this.c)+","+v(this.d)+","+v(this.e)+","+v(this.f)+")"}},parent:t.Element,construct:{ctm:function(){return new t.Matrix(this.node.getCTM())},screenCTM:function(){if(this instanceof t.Nested){var l=this.rect(1,1),u=l.node.getScreenCTM();return l.remove(),new t.Matrix(u)}return new t.Matrix(this.node.getScreenCTM())}}}),t.Point=t.invent({create:function(l,u){var m;m=Array.isArray(l)?{x:l[0],y:l[1]}:J(l)==="object"?{x:l.x,y:l.y}:l!=null?{x:l,y:u??l}:{x:0,y:0},this.x=m.x,this.y=m.y},extend:{clone:function(){return new t.Point(this)},morph:function(l,u){return this.destination=new t.Point(l,u),this}}}),t.extend(t.Element,{point:function(l,u){return new t.Point(l,u).transform(this.screenCTM().inverse())}}),t.extend(t.Element,{attr:function(l,u,m){if(l==null){for(l={},m=(u=this.node.attributes).length-1;m>=0;m--)l[u[m].nodeName]=t.regex.isNumber.test(u[m].nodeValue)?parseFloat(u[m].nodeValue):u[m].nodeValue;return l}if(J(l)==="object")for(var A in l)this.attr(A,l[A]);else if(u===null)this.node.removeAttribute(l);else{if(u==null)return(u=this.node.getAttribute(l))==null?t.defaults.attrs[l]:t.regex.isNumber.test(u)?parseFloat(u):u;l=="stroke-width"?this.attr("stroke",parseFloat(u)>0?this._stroke:null):l=="stroke"&&(this._stroke=u),l!="fill"&&l!="stroke"||(t.regex.isImage.test(u)&&(u=this.doc().defs().image(u,0,0)),u instanceof t.Image&&(u=this.doc().defs().pattern(0,0,function(){this.add(u)}))),typeof u=="number"?u=new t.Number(u):t.Color.isColor(u)?u=new t.Color(u):Array.isArray(u)&&(u=new t.Array(u)),l=="leading"?this.leading&&this.leading(u):typeof m=="string"?this.node.setAttributeNS(m,l,u.toString()):this.node.setAttribute(l,u.toString()),!this.rebuild||l!="font-size"&&l!="x"||this.rebuild(l,u)}return this}}),t.extend(t.Element,{transform:function(l,u){var m;return J(l)!=="object"?(m=new t.Matrix(this).extract(),typeof l=="string"?m[l]:m):(m=new t.Matrix(this),u=!!u||!!l.relative,l.a!=null&&(m=u?m.multiply(new t.Matrix(l)):new t.Matrix(l)),this.attr("transform",m))}}),t.extend(t.Element,{untransform:function(){return this.attr("transform",null)},matrixify:function(){return(this.attr("transform")||"").split(t.regex.transforms).slice(0,-1).map(function(l){var u=l.trim().split("(");return[u[0],u[1].split(t.regex.delimiter).map(function(m){return parseFloat(m)})]}).reduce(function(l,u){return u[0]=="matrix"?l.multiply(x(u[1])):l[u[0]].apply(l,u[1])},new t.Matrix)},toParent:function(l){if(this==l)return this;var u=this.screenCTM(),m=l.screenCTM().inverse();return this.addTo(l).untransform().transform(m.multiply(u)),this},toDoc:function(){return this.toParent(this.doc())}}),t.Transformation=t.invent({create:function(l,u){if(arguments.length>1&&typeof u!="boolean")return this.constructor.call(this,[].slice.call(arguments));if(Array.isArray(l))for(var m=0,A=this.arguments.length;m=0},index:function(l){return[].slice.call(this.node.childNodes).indexOf(l.node)},get:function(l){return t.adopt(this.node.childNodes[l])},first:function(){return this.get(0)},last:function(){return this.get(this.node.childNodes.length-1)},each:function(l,u){for(var m=this.children(),A=0,k=m.length;A=0;u--)l.childNodes[u]instanceof p.SVGElement&&b(l.childNodes[u]);return t.adopt(l).id(t.eid(l.nodeName))}function v(l){return Math.abs(l)>1e-37?l:0}["fill","stroke"].forEach(function(l){var u={};u[l]=function(m){if(m===void 0)return this;if(typeof m=="string"||t.Color.isRgb(m)||m&&typeof m.fill=="function")this.attr(l,m);else for(var A=n[l].length-1;A>=0;A--)m[n[l][A]]!=null&&this.attr(n.prefix(l,n[l][A]),m[n[l][A]]);return this},t.extend(t.Element,t.FX,u)}),t.extend(t.Element,t.FX,{translate:function(l,u){return this.transform({x:l,y:u})},matrix:function(l){return this.attr("transform",new t.Matrix(arguments.length==6?[].slice.call(arguments):l))},opacity:function(l){return this.attr("opacity",l)},dx:function(l){return this.x(new t.Number(l).plus(this instanceof t.FX?0:this.x()),!0)},dy:function(l){return this.y(new t.Number(l).plus(this instanceof t.FX?0:this.y()),!0)}}),t.extend(t.Path,{length:function(){return this.node.getTotalLength()},pointAt:function(l){return this.node.getPointAtLength(l)}}),t.Set=t.invent({create:function(l){Array.isArray(l)?this.members=l:this.clear()},extend:{add:function(){for(var l=[].slice.call(arguments),u=0,m=l.length;u-1&&this.members.splice(u,1),this},each:function(l){for(var u=0,m=this.members.length;u=0},index:function(l){return this.members.indexOf(l)},get:function(l){return this.members[l]},first:function(){return this.get(0)},last:function(){return this.get(this.members.length-1)},valueOf:function(){return this.members}},construct:{set:function(l){return new t.Set(l)}}}),t.FX.Set=t.invent({create:function(l){this.set=l}}),t.Set.inherit=function(){var l=[];for(var u in t.Shape.prototype)typeof t.Shape.prototype[u]=="function"&&typeof t.Set.prototype[u]!="function"&&l.push(u);for(var u in l.forEach(function(A){t.Set.prototype[A]=function(){for(var k=0,S=this.members.length;k=0;l--)delete this.memory()[arguments[l]];return this},memory:function(){return this._memory||(this._memory={})}}),t.get=function(l){var u=e.getElementById(function(m){var A=(m||"").toString().match(t.regex.reference);if(A)return A[1]}(l)||l);return t.adopt(u)},t.select=function(l,u){return new t.Set(t.utils.map((u||e).querySelectorAll(l),function(m){return t.adopt(m)}))},t.extend(t.Parent,{select:function(l){return t.select(l,this.node)}});var y="abcdef".split("");if(typeof p.CustomEvent!="function"){var w=function(l,u){u=u||{bubbles:!1,cancelable:!1,detail:void 0};var m=e.createEvent("CustomEvent");return m.initCustomEvent(l,u.bubbles,u.cancelable,u.detail),m};w.prototype=p.Event.prototype,t.CustomEvent=w}else t.CustomEvent=p.CustomEvent;return t},typeof define=="function"&&define.amd?define(function(){return Ce(he,he.document)}):(typeof ot>"u"?"undefined":J(ot))==="object"&&typeof We<"u"?We.exports=he.document?Ce(he,he.document):function(p){return Ce(p,p.document)}:he.SVG=Ce(he,he.document),function(){SVG.Filter=SVG.invent({create:"filter",inherit:SVG.Parent,extend:{source:"SourceGraphic",sourceAlpha:"SourceAlpha",background:"BackgroundImage",backgroundAlpha:"BackgroundAlpha",fill:"FillPaint",stroke:"StrokePaint",autoSetIn:!0,put:function(r,n){return this.add(r,n),!r.attr("in")&&this.autoSetIn&&r.attr("in",this.source),r.attr("result")||r.attr("result",r),r},blend:function(r,n,o){return this.put(new SVG.BlendEffect(r,n,o))},colorMatrix:function(r,n){return this.put(new SVG.ColorMatrixEffect(r,n))},convolveMatrix:function(r){return this.put(new SVG.ConvolveMatrixEffect(r))},componentTransfer:function(r){return this.put(new SVG.ComponentTransferEffect(r))},composite:function(r,n,o){return this.put(new SVG.CompositeEffect(r,n,o))},flood:function(r,n){return this.put(new SVG.FloodEffect(r,n))},offset:function(r,n){return this.put(new SVG.OffsetEffect(r,n))},image:function(r){return this.put(new SVG.ImageEffect(r))},merge:function(){var r=[void 0];for(var n in arguments)r.push(arguments[n]);return this.put(new(SVG.MergeEffect.bind.apply(SVG.MergeEffect,r)))},gaussianBlur:function(r,n){return this.put(new SVG.GaussianBlurEffect(r,n))},morphology:function(r,n){return this.put(new SVG.MorphologyEffect(r,n))},diffuseLighting:function(r,n,o){return this.put(new SVG.DiffuseLightingEffect(r,n,o))},displacementMap:function(r,n,o,h,c){return this.put(new SVG.DisplacementMapEffect(r,n,o,h,c))},specularLighting:function(r,n,o,h){return this.put(new SVG.SpecularLightingEffect(r,n,o,h))},tile:function(){return this.put(new SVG.TileEffect)},turbulence:function(r,n,o,h,c){return this.put(new SVG.TurbulenceEffect(r,n,o,h,c))},toString:function(){return"url(#"+this.attr("id")+")"}}}),SVG.extend(SVG.Defs,{filter:function(r){var n=this.put(new SVG.Filter);return typeof r=="function"&&r.call(n,n),n}}),SVG.extend(SVG.Container,{filter:function(r){return this.defs().filter(r)}}),SVG.extend(SVG.Element,SVG.G,SVG.Nested,{filter:function(r){return this.filterer=r instanceof SVG.Element?r:this.doc().filter(r),this.doc()&&this.filterer.doc()!==this.doc()&&this.doc().defs().add(this.filterer),this.attr("filter",this.filterer),this.filterer},unfilter:function(r){return this.filterer&&r===!0&&this.filterer.remove(),delete this.filterer,this.attr("filter",null)}}),SVG.Effect=SVG.invent({create:function(){this.constructor.call(this)},inherit:SVG.Element,extend:{in:function(r){return r==null?this.parent()&&this.parent().select('[result="'+this.attr("in")+'"]').get(0)||this.attr("in"):this.attr("in",r)},result:function(r){return r==null?this.attr("result"):this.attr("result",r)},toString:function(){return this.result()}}}),SVG.ParentEffect=SVG.invent({create:function(){this.constructor.call(this)},inherit:SVG.Parent,extend:{in:function(r){return r==null?this.parent()&&this.parent().select('[result="'+this.attr("in")+'"]').get(0)||this.attr("in"):this.attr("in",r)},result:function(r){return r==null?this.attr("result"):this.attr("result",r)},toString:function(){return this.result()}}});var p={blend:function(r,n){return this.parent()&&this.parent().blend(this,r,n)},colorMatrix:function(r,n){return this.parent()&&this.parent().colorMatrix(r,n).in(this)},convolveMatrix:function(r){return this.parent()&&this.parent().convolveMatrix(r).in(this)},componentTransfer:function(r){return this.parent()&&this.parent().componentTransfer(r).in(this)},composite:function(r,n){return this.parent()&&this.parent().composite(this,r,n)},flood:function(r,n){return this.parent()&&this.parent().flood(r,n)},offset:function(r,n){return this.parent()&&this.parent().offset(r,n).in(this)},image:function(r){return this.parent()&&this.parent().image(r)},merge:function(){return this.parent()&&this.parent().merge.apply(this.parent(),[this].concat(arguments))},gaussianBlur:function(r,n){return this.parent()&&this.parent().gaussianBlur(r,n).in(this)},morphology:function(r,n){return this.parent()&&this.parent().morphology(r,n).in(this)},diffuseLighting:function(r,n,o){return this.parent()&&this.parent().diffuseLighting(r,n,o).in(this)},displacementMap:function(r,n,o,h){return this.parent()&&this.parent().displacementMap(this,r,n,o,h)},specularLighting:function(r,n,o,h){return this.parent()&&this.parent().specularLighting(r,n,o,h).in(this)},tile:function(){return this.parent()&&this.parent().tile().in(this)},turbulence:function(r,n,o,h,c){return this.parent()&&this.parent().turbulence(r,n,o,h,c).in(this)}};SVG.extend(SVG.Effect,p),SVG.extend(SVG.ParentEffect,p),SVG.ChildEffect=SVG.invent({create:function(){this.constructor.call(this)},inherit:SVG.Element,extend:{in:function(r){this.attr("in",r)}}});var e={blend:function(r,n,o){this.attr({in:r,in2:n,mode:o||"normal"})},colorMatrix:function(r,n){r=="matrix"&&(n=a(n)),this.attr({type:r,values:n===void 0?null:n})},convolveMatrix:function(r){r=a(r),this.attr({order:Math.sqrt(r.split(" ").length),kernelMatrix:r})},composite:function(r,n,o){this.attr({in:r,in2:n,operator:o})},flood:function(r,n){this.attr("flood-color",r),n!=null&&this.attr("flood-opacity",n)},offset:function(r,n){this.attr({dx:r,dy:n})},image:function(r){this.attr("href",r,SVG.xlink)},displacementMap:function(r,n,o,h,c){this.attr({in:r,in2:n,scale:o,xChannelSelector:h,yChannelSelector:c})},gaussianBlur:function(r,n){r!=null||n!=null?this.attr("stdDeviation",function(o){if(!Array.isArray(o))return o;for(var h=0,c=o.length,d=[];h1&&(W*=c=Math.sqrt(c),N*=c),d=new SVG.Matrix().rotate(B).scale(1/W,1/N).rotate(-B),V=V.transform(d),G=G.transform(d),g=[G.x-V.x,G.y-V.y],x=g[0]*g[0]+g[1]*g[1],f=Math.sqrt(x),g[0]/=f,g[1]/=f,b=x<4?Math.sqrt(1-x/4):0,q===Z&&(b*=-1),v=new SVG.Point((G.x+V.x)/2+b*-g[1],(G.y+V.y)/2+b*g[0]),y=new SVG.Point(V.x-v.x,V.y-v.y),w=new SVG.Point(G.x-v.x,G.y-v.y),l=Math.acos(y.x/Math.sqrt(y.x*y.x+y.y*y.y)),y.y<0&&(l*=-1),u=Math.acos(w.x/Math.sqrt(w.x*w.x+w.y*w.y)),w.y<0&&(u*=-1),Z&&l>u&&(u+=2*Math.PI),!Z&&lr.maxX-t.width&&(n=(a=r.maxX-t.width)-this.startPoints.box.x),r.minY!=null&&sr.maxY-t.height&&(o=(s=r.maxY-t.height)-this.startPoints.box.y),r.snapToGrid!=null&&(a-=a%r.snapToGrid,s-=s%r.snapToGrid,n-=n%r.snapToGrid,o-=o%r.snapToGrid),this.el instanceof SVG.G?this.el.matrix(this.startPoints.transform).transform({x:n,y:o},!0):this.el.move(a,s));return i},p.prototype.end=function(e){var t=this.drag(e);this.el.fire("dragend",{event:e,p:t,m:this.m,handler:this}),SVG.off(window,"mousemove.drag"),SVG.off(window,"touchmove.drag"),SVG.off(window,"mouseup.drag"),SVG.off(window,"touchend.drag")},SVG.extend(SVG.Element,{draggable:function(e,t){typeof e!="function"&&typeof e!="object"||(t=e,e=!0);var i=this.remember("_draggable")||new p(this);return(e=e===void 0||e)?i.init(t||{},e):(this.off("mousedown.drag"),this.off("touchstart.drag")),this}})}.call(void 0),function(){function p(e){this.el=e,e.remember("_selectHandler",this),this.pointSelection={isSelected:!1},this.rectSelection={isSelected:!1},this.pointsList={lt:[0,0],rt:["width",0],rb:["width","height"],lb:[0,"height"],t:["width",0],r:["width","height"],b:["width","height"],l:[0,"height"]},this.pointCoord=function(t,i,a){var s=typeof t!="string"?t:i[t];return a?s/2:s},this.pointCoords=function(t,i){var a=this.pointsList[t];return{x:this.pointCoord(a[0],i,t==="t"||t==="b"),y:this.pointCoord(a[1],i,t==="r"||t==="l")}}}p.prototype.init=function(e,t){var i=this.el.bbox();this.options={};var a=this.el.selectize.defaults.points;for(var s in this.el.selectize.defaults)this.options[s]=this.el.selectize.defaults[s],t[s]!==void 0&&(this.options[s]=t[s]);var r=["points","pointsExclude"];for(var s in r){var n=this.options[r[s]];typeof n=="string"?n=n.length>0?n.split(/\s*,\s*/i):[]:typeof n=="boolean"&&r[s]==="points"&&(n=n?a:[]),this.options[r[s]]=n}this.options.points=[a,this.options.points].reduce(function(o,h){return o.filter(function(c){return h.indexOf(c)>-1})}),this.options.points=[this.options.points,this.options.pointsExclude].reduce(function(o,h){return o.filter(function(c){return h.indexOf(c)<0})}),this.parent=this.el.parent(),this.nested=this.nested||this.parent.group(),this.nested.matrix(new SVG.Matrix(this.el).translate(i.x,i.y)),this.options.deepSelect&&["line","polyline","polygon"].indexOf(this.el.type)!==-1?this.selectPoints(e):this.selectRect(e),this.observe(),this.cleanup()},p.prototype.selectPoints=function(e){return this.pointSelection.isSelected=e,this.pointSelection.set||(this.pointSelection.set=this.parent.set(),this.drawPoints()),this},p.prototype.getPointArray=function(){var e=this.el.bbox();return this.el.array().valueOf().map(function(t){return[t[0]-e.x,t[1]-e.y]})},p.prototype.drawPoints=function(){for(var e=this,t=this.getPointArray(),i=0,a=t.length;i0&&this.parameters.box.height-n[1]>0){if(this.parameters.type==="text")return this.el.move(this.parameters.box.x+n[0],this.parameters.box.y),void this.el.attr("font-size",this.parameters.fontSize-n[0]);n=this.checkAspectRatio(n),this.el.move(this.parameters.box.x+n[0],this.parameters.box.y+n[1]).size(this.parameters.box.width-n[0],this.parameters.box.height-n[1])}};break;case"rt":this.calc=function(s,r){var n=this.snapToGrid(s,r,2);if(this.parameters.box.width+n[0]>0&&this.parameters.box.height-n[1]>0){if(this.parameters.type==="text")return this.el.move(this.parameters.box.x-n[0],this.parameters.box.y),void this.el.attr("font-size",this.parameters.fontSize+n[0]);n=this.checkAspectRatio(n,!0),this.el.move(this.parameters.box.x,this.parameters.box.y+n[1]).size(this.parameters.box.width+n[0],this.parameters.box.height-n[1])}};break;case"rb":this.calc=function(s,r){var n=this.snapToGrid(s,r,0);if(this.parameters.box.width+n[0]>0&&this.parameters.box.height+n[1]>0){if(this.parameters.type==="text")return this.el.move(this.parameters.box.x-n[0],this.parameters.box.y),void this.el.attr("font-size",this.parameters.fontSize+n[0]);n=this.checkAspectRatio(n),this.el.move(this.parameters.box.x,this.parameters.box.y).size(this.parameters.box.width+n[0],this.parameters.box.height+n[1])}};break;case"lb":this.calc=function(s,r){var n=this.snapToGrid(s,r,1);if(this.parameters.box.width-n[0]>0&&this.parameters.box.height+n[1]>0){if(this.parameters.type==="text")return this.el.move(this.parameters.box.x+n[0],this.parameters.box.y),void this.el.attr("font-size",this.parameters.fontSize-n[0]);n=this.checkAspectRatio(n,!0),this.el.move(this.parameters.box.x+n[0],this.parameters.box.y).size(this.parameters.box.width-n[0],this.parameters.box.height+n[1])}};break;case"t":this.calc=function(s,r){var n=this.snapToGrid(s,r,2);if(this.parameters.box.height-n[1]>0){if(this.parameters.type==="text")return;this.el.move(this.parameters.box.x,this.parameters.box.y+n[1]).height(this.parameters.box.height-n[1])}};break;case"r":this.calc=function(s,r){var n=this.snapToGrid(s,r,0);if(this.parameters.box.width+n[0]>0){if(this.parameters.type==="text")return;this.el.move(this.parameters.box.x,this.parameters.box.y).width(this.parameters.box.width+n[0])}};break;case"b":this.calc=function(s,r){var n=this.snapToGrid(s,r,0);if(this.parameters.box.height+n[1]>0){if(this.parameters.type==="text")return;this.el.move(this.parameters.box.x,this.parameters.box.y).height(this.parameters.box.height+n[1])}};break;case"l":this.calc=function(s,r){var n=this.snapToGrid(s,r,1);if(this.parameters.box.width-n[0]>0){if(this.parameters.type==="text")return;this.el.move(this.parameters.box.x+n[0],this.parameters.box.y).width(this.parameters.box.width-n[0])}};break;case"rot":this.calc=function(s,r){var n=s+this.parameters.p.x,o=r+this.parameters.p.y,h=Math.atan2(this.parameters.p.y-this.parameters.box.y-this.parameters.box.height/2,this.parameters.p.x-this.parameters.box.x-this.parameters.box.width/2),c=Math.atan2(o-this.parameters.box.y-this.parameters.box.height/2,n-this.parameters.box.x-this.parameters.box.width/2),d=this.parameters.rotation+180*(c-h)/Math.PI+this.options.snapToAngle/2;this.el.center(this.parameters.box.cx,this.parameters.box.cy).rotate(d-d%this.options.snapToAngle,this.parameters.box.cx,this.parameters.box.cy)};break;case"point":this.calc=function(s,r){var n=this.snapToGrid(s,r,this.parameters.pointCoords[0],this.parameters.pointCoords[1]),o=this.el.array().valueOf();o[this.parameters.i][0]=this.parameters.pointCoords[0]+n[0],o[this.parameters.i][1]=this.parameters.pointCoords[1]+n[1],this.el.plot(o)}}this.el.fire("resizestart",{dx:this.parameters.x,dy:this.parameters.y,event:e}),SVG.on(window,"touchmove.resize",function(s){t.update(s||window.event)}),SVG.on(window,"touchend.resize",function(){t.done()}),SVG.on(window,"mousemove.resize",function(s){t.update(s||window.event)}),SVG.on(window,"mouseup.resize",function(){t.done()})},p.prototype.update=function(e){if(e){var t=this._extractPosition(e),i=this.transformPoint(t.x,t.y),a=i.x-this.parameters.p.x,s=i.y-this.parameters.p.y;this.lastUpdateCall=[a,s],this.calc(a,s),this.el.fire("resizing",{dx:a,dy:s,event:e})}else this.lastUpdateCall&&this.calc(this.lastUpdateCall[0],this.lastUpdateCall[1])},p.prototype.done=function(){this.lastUpdateCall=null,SVG.off(window,"mousemove.resize"),SVG.off(window,"mouseup.resize"),SVG.off(window,"touchmove.resize"),SVG.off(window,"touchend.resize"),this.el.fire("resizedone")},p.prototype.snapToGrid=function(e,t,i,a){var s;return a!==void 0?s=[(i+e)%this.options.snapToGrid,(a+t)%this.options.snapToGrid]:(i=i??3,s=[(this.parameters.box.x+e+(1&i?0:this.parameters.box.width))%this.options.snapToGrid,(this.parameters.box.y+t+(2&i?0:this.parameters.box.height))%this.options.snapToGrid]),e<0&&(s[0]-=this.options.snapToGrid),t<0&&(s[1]-=this.options.snapToGrid),e-=Math.abs(s[0])n.maxX&&(e=n.maxX-s),n.minY!==void 0&&r+tn.maxY&&(t=n.maxY-r),[e,t]},p.prototype.checkAspectRatio=function(e,t){if(!this.options.saveAspectRatio)return e;var i=e.slice(),a=this.parameters.box.width/this.parameters.box.height,s=this.parameters.box.width+e[0],r=this.parameters.box.height-e[1],n=s/r;return na&&(i[0]=this.parameters.box.width-r*a,t&&(i[0]=-i[0])),i},SVG.extend(SVG.Element,{resize:function(e){return(this.remember("_resizeHandler")||new p(this)).init(e||{}),this}}),SVG.Element.prototype.resize.defaults={snapToAngle:.1,snapToGrid:1,constraint:{},saveAspectRatio:!1}}).call(this)}(),window.Apex===void 0&&(window.Apex={});var Ct=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"initModules",value:function(){this.ctx.publicMethods=["updateOptions","updateSeries","appendData","appendSeries","isSeriesHidden","highlightSeries","toggleSeries","showSeries","hideSeries","setLocale","resetSeries","zoomX","toggleDataPointSelection","dataURI","exportToCSV","addXaxisAnnotation","addYaxisAnnotation","addPointAnnotation","clearAnnotations","removeAnnotation","paper","destroy"],this.ctx.eventList=["click","mousedown","mousemove","mouseleave","touchstart","touchmove","touchleave","mouseup","touchend"],this.ctx.animations=new ve(this.ctx),this.ctx.axes=new Hi(this.ctx),this.ctx.core=new ga(this.ctx.el,this.ctx),this.ctx.config=new Pe({}),this.ctx.data=new Ft(this.ctx),this.ctx.grid=new Rt(this.ctx),this.ctx.graphics=new X(this.ctx),this.ctx.coreUtils=new $(this.ctx),this.ctx.crosshairs=new nt(this.ctx),this.ctx.events=new Oi(this.ctx),this.ctx.exports=new He(this.ctx),this.ctx.fill=new ne(this.ctx),this.ctx.localization=new Di(this.ctx),this.ctx.options=new ue,this.ctx.responsive=new Ni(this.ctx),this.ctx.series=new re(this.ctx),this.ctx.theme=new Wi(this.ctx),this.ctx.formatters=new ze(this.ctx),this.ctx.titleSubtitle=new Bi(this.ctx),this.ctx.legend=new Dt(this.ctx),this.ctx.toolbar=new Ht(this.ctx),this.ctx.tooltip=new At(this.ctx),this.ctx.dimensions=new Ne(this.ctx),this.ctx.updateHelpers=new ua(this.ctx),this.ctx.zoomPanSelection=new qi(this.ctx),this.ctx.w.globals.tooltip=new At(this.ctx)}}]),p}(),Lt=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"clear",value:function(e){var t=e.isUpdating;this.ctx.zoomPanSelection&&this.ctx.zoomPanSelection.destroy(),this.ctx.toolbar&&this.ctx.toolbar.destroy(),this.ctx.animations=null,this.ctx.axes=null,this.ctx.annotations=null,this.ctx.core=null,this.ctx.data=null,this.ctx.grid=null,this.ctx.series=null,this.ctx.responsive=null,this.ctx.theme=null,this.ctx.formatters=null,this.ctx.titleSubtitle=null,this.ctx.legend=null,this.ctx.dimensions=null,this.ctx.options=null,this.ctx.crosshairs=null,this.ctx.zoomPanSelection=null,this.ctx.updateHelpers=null,this.ctx.toolbar=null,this.ctx.localization=null,this.ctx.w.globals.tooltip=null,this.clearDomElements({isUpdating:t})}},{key:"killSVG",value:function(e){e.each(function(t,i){this.removeClass("*"),this.off(),this.stop()},!0),e.ungroup(),e.clear()}},{key:"clearDomElements",value:function(e){var t=this,i=e.isUpdating,a=this.w.globals.dom.Paper.node;a.parentNode&&a.parentNode.parentNode&&!i&&(a.parentNode.parentNode.style.minHeight="unset");var s=this.w.globals.dom.baseEl;s&&this.ctx.eventList.forEach(function(n){s.removeEventListener(n,t.ctx.events.documentEvent)});var r=this.w.globals.dom;if(this.ctx.el!==null)for(;this.ctx.el.firstChild;)this.ctx.el.removeChild(this.ctx.el.firstChild);this.killSVG(r.Paper),r.Paper.remove(),r.elWrap=null,r.elGraphical=null,r.elLegendWrap=null,r.elLegendForeign=null,r.baseEl=null,r.elGridRect=null,r.elGridRectMask=null,r.elGridRectMarkerMask=null,r.elForecastMask=null,r.elNonForecastMask=null,r.elDefs=null}}]),p}(),it=new WeakMap,fa=function(){function p(e,t){F(this,p),this.opts=t,this.ctx=this,this.w=new Ri(t).init(),this.el=e,this.w.globals.cuid=P.randomId(),this.w.globals.chartID=this.w.config.chart.id?P.escapeString(this.w.config.chart.id):this.w.globals.cuid,new Ct(this).initModules(),this.create=P.bind(this.create,this),this.windowResizeHandler=this._windowResizeHandler.bind(this),this.parentResizeHandler=this._parentResizeCallback.bind(this)}return R(p,[{key:"render",value:function(){var e=this;return new Promise(function(t,i){if(e.el!==null){Apex._chartInstances===void 0&&(Apex._chartInstances=[]),e.w.config.chart.id&&Apex._chartInstances.push({id:e.w.globals.chartID,group:e.w.config.chart.group,chart:e}),e.setLocale(e.w.config.chart.defaultLocale);var a=e.w.config.chart.events.beforeMount;typeof a=="function"&&a(e,e.w),e.events.fireEvent("beforeMount",[e,e.w]),window.addEventListener("resize",e.windowResizeHandler),function(g,f){var x=!1;if(g.nodeType!==Node.DOCUMENT_FRAGMENT_NODE){var b=g.getBoundingClientRect();g.style.display!=="none"&&b.width!==0||(x=!0)}var v=new ResizeObserver(function(y){x&&f.call(g,y),x=!0});g.nodeType===Node.DOCUMENT_FRAGMENT_NODE?Array.from(g.children).forEach(function(y){return v.observe(y)}):v.observe(g),it.set(f,v)}(e.el.parentNode,e.parentResizeHandler);var s=e.el.getRootNode&&e.el.getRootNode(),r=P.is("ShadowRoot",s),n=e.el.ownerDocument,o=r?s.getElementById("apexcharts-css"):n.getElementById("apexcharts-css");if(!o){var h;(o=document.createElement("style")).id="apexcharts-css",o.textContent=`@keyframes opaque { + 0% { + opacity: 0 + } + + to { + opacity: 1 + } +} + +@keyframes resizeanim { + + 0%, + to { + opacity: 0 + } +} + +.apexcharts-canvas { + position: relative; + user-select: none +} + +.apexcharts-canvas ::-webkit-scrollbar { + -webkit-appearance: none; + width: 6px +} + +.apexcharts-canvas ::-webkit-scrollbar-thumb { + border-radius: 4px; + background-color: rgba(0, 0, 0, .5); + box-shadow: 0 0 1px rgba(255, 255, 255, .5); + -webkit-box-shadow: 0 0 1px rgba(255, 255, 255, .5) +} + +.apexcharts-inner { + position: relative +} + +.apexcharts-text tspan { + font-family: inherit +} + +rect.legend-mouseover-inactive, +.legend-mouseover-inactive rect, +.legend-mouseover-inactive path, +.legend-mouseover-inactive circle, +.legend-mouseover-inactive line, +.legend-mouseover-inactive text.apexcharts-yaxis-title-text, +.legend-mouseover-inactive text.apexcharts-yaxis-label { + transition: .15s ease all; + opacity: .2 +} + +.apexcharts-legend-text { + padding-left: 15px; + margin-left: -15px; +} + +.apexcharts-series-collapsed { + opacity: 0 +} + +.apexcharts-tooltip { + border-radius: 5px; + box-shadow: 2px 2px 6px -4px #999; + cursor: default; + font-size: 14px; + left: 62px; + opacity: 0; + pointer-events: none; + position: absolute; + top: 20px; + display: flex; + flex-direction: column; + overflow: hidden; + white-space: nowrap; + z-index: 12; + transition: .15s ease all +} + +.apexcharts-tooltip.apexcharts-active { + opacity: 1; + transition: .15s ease all +} + +.apexcharts-tooltip.apexcharts-theme-light { + border: 1px solid #e3e3e3; + background: rgba(255, 255, 255, .96) +} + +.apexcharts-tooltip.apexcharts-theme-dark { + color: #fff; + background: rgba(30, 30, 30, .8) +} + +.apexcharts-tooltip * { + font-family: inherit +} + +.apexcharts-tooltip-title { + padding: 6px; + font-size: 15px; + margin-bottom: 4px +} + +.apexcharts-tooltip.apexcharts-theme-light .apexcharts-tooltip-title { + background: #eceff1; + border-bottom: 1px solid #ddd +} + +.apexcharts-tooltip.apexcharts-theme-dark .apexcharts-tooltip-title { + background: rgba(0, 0, 0, .7); + border-bottom: 1px solid #333 +} + +.apexcharts-tooltip-text-goals-value, +.apexcharts-tooltip-text-y-value, +.apexcharts-tooltip-text-z-value { + display: inline-block; + margin-left: 5px; + font-weight: 600 +} + +.apexcharts-tooltip-text-goals-label:empty, +.apexcharts-tooltip-text-goals-value:empty, +.apexcharts-tooltip-text-y-label:empty, +.apexcharts-tooltip-text-y-value:empty, +.apexcharts-tooltip-text-z-value:empty, +.apexcharts-tooltip-title:empty { + display: none +} + +.apexcharts-tooltip-text-goals-label, +.apexcharts-tooltip-text-goals-value { + padding: 6px 0 5px +} + +.apexcharts-tooltip-goals-group, +.apexcharts-tooltip-text-goals-label, +.apexcharts-tooltip-text-goals-value { + display: flex +} + +.apexcharts-tooltip-text-goals-label:not(:empty), +.apexcharts-tooltip-text-goals-value:not(:empty) { + margin-top: -6px +} + +.apexcharts-tooltip-marker { + width: 12px; + height: 12px; + position: relative; + top: 0; + margin-right: 10px; + border-radius: 50% +} + +.apexcharts-tooltip-series-group { + padding: 0 10px; + display: none; + text-align: left; + justify-content: left; + align-items: center +} + +.apexcharts-tooltip-series-group.apexcharts-active .apexcharts-tooltip-marker { + opacity: 1 +} + +.apexcharts-tooltip-series-group.apexcharts-active, +.apexcharts-tooltip-series-group:last-child { + padding-bottom: 4px +} + +.apexcharts-tooltip-y-group { + padding: 6px 0 5px +} + +.apexcharts-custom-tooltip, +.apexcharts-tooltip-box { + padding: 4px 8px +} + +.apexcharts-tooltip-boxPlot { + display: flex; + flex-direction: column-reverse +} + +.apexcharts-tooltip-box>div { + margin: 4px 0 +} + +.apexcharts-tooltip-box span.value { + font-weight: 700 +} + +.apexcharts-tooltip-rangebar { + padding: 5px 8px +} + +.apexcharts-tooltip-rangebar .category { + font-weight: 600; + color: #777 +} + +.apexcharts-tooltip-rangebar .series-name { + font-weight: 700; + display: block; + margin-bottom: 5px +} + +.apexcharts-xaxistooltip, +.apexcharts-yaxistooltip { + opacity: 0; + pointer-events: none; + color: #373d3f; + font-size: 13px; + text-align: center; + border-radius: 2px; + position: absolute; + z-index: 10; + background: #eceff1; + border: 1px solid #90a4ae +} + +.apexcharts-xaxistooltip { + padding: 9px 10px; + transition: .15s ease all +} + +.apexcharts-xaxistooltip.apexcharts-theme-dark { + background: rgba(0, 0, 0, .7); + border: 1px solid rgba(0, 0, 0, .5); + color: #fff +} + +.apexcharts-xaxistooltip:after, +.apexcharts-xaxistooltip:before { + left: 50%; + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none +} + +.apexcharts-xaxistooltip:after { + border-color: transparent; + border-width: 6px; + margin-left: -6px +} + +.apexcharts-xaxistooltip:before { + border-color: transparent; + border-width: 7px; + margin-left: -7px +} + +.apexcharts-xaxistooltip-bottom:after, +.apexcharts-xaxistooltip-bottom:before { + bottom: 100% +} + +.apexcharts-xaxistooltip-top:after, +.apexcharts-xaxistooltip-top:before { + top: 100% +} + +.apexcharts-xaxistooltip-bottom:after { + border-bottom-color: #eceff1 +} + +.apexcharts-xaxistooltip-bottom:before { + border-bottom-color: #90a4ae +} + +.apexcharts-xaxistooltip-bottom.apexcharts-theme-dark:after, +.apexcharts-xaxistooltip-bottom.apexcharts-theme-dark:before { + border-bottom-color: rgba(0, 0, 0, .5) +} + +.apexcharts-xaxistooltip-top:after { + border-top-color: #eceff1 +} + +.apexcharts-xaxistooltip-top:before { + border-top-color: #90a4ae +} + +.apexcharts-xaxistooltip-top.apexcharts-theme-dark:after, +.apexcharts-xaxistooltip-top.apexcharts-theme-dark:before { + border-top-color: rgba(0, 0, 0, .5) +} + +.apexcharts-xaxistooltip.apexcharts-active { + opacity: 1; + transition: .15s ease all +} + +.apexcharts-yaxistooltip { + padding: 4px 10px +} + +.apexcharts-yaxistooltip.apexcharts-theme-dark { + background: rgba(0, 0, 0, .7); + border: 1px solid rgba(0, 0, 0, .5); + color: #fff +} + +.apexcharts-yaxistooltip:after, +.apexcharts-yaxistooltip:before { + top: 50%; + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none +} + +.apexcharts-yaxistooltip:after { + border-color: transparent; + border-width: 6px; + margin-top: -6px +} + +.apexcharts-yaxistooltip:before { + border-color: transparent; + border-width: 7px; + margin-top: -7px +} + +.apexcharts-yaxistooltip-left:after, +.apexcharts-yaxistooltip-left:before { + left: 100% +} + +.apexcharts-yaxistooltip-right:after, +.apexcharts-yaxistooltip-right:before { + right: 100% +} + +.apexcharts-yaxistooltip-left:after { + border-left-color: #eceff1 +} + +.apexcharts-yaxistooltip-left:before { + border-left-color: #90a4ae +} + +.apexcharts-yaxistooltip-left.apexcharts-theme-dark:after, +.apexcharts-yaxistooltip-left.apexcharts-theme-dark:before { + border-left-color: rgba(0, 0, 0, .5) +} + +.apexcharts-yaxistooltip-right:after { + border-right-color: #eceff1 +} + +.apexcharts-yaxistooltip-right:before { + border-right-color: #90a4ae +} + +.apexcharts-yaxistooltip-right.apexcharts-theme-dark:after, +.apexcharts-yaxistooltip-right.apexcharts-theme-dark:before { + border-right-color: rgba(0, 0, 0, .5) +} + +.apexcharts-yaxistooltip.apexcharts-active { + opacity: 1 +} + +.apexcharts-yaxistooltip-hidden { + display: none +} + +.apexcharts-xcrosshairs, +.apexcharts-ycrosshairs { + pointer-events: none; + opacity: 0; + transition: .15s ease all +} + +.apexcharts-xcrosshairs.apexcharts-active, +.apexcharts-ycrosshairs.apexcharts-active { + opacity: 1; + transition: .15s ease all +} + +.apexcharts-ycrosshairs-hidden { + opacity: 0 +} + +.apexcharts-selection-rect { + cursor: move +} + +.svg_select_boundingRect, +.svg_select_points_rot { + pointer-events: none; + opacity: 0; + visibility: hidden +} + +.apexcharts-selection-rect+g .svg_select_boundingRect, +.apexcharts-selection-rect+g .svg_select_points_rot { + opacity: 0; + visibility: hidden +} + +.apexcharts-selection-rect+g .svg_select_points_l, +.apexcharts-selection-rect+g .svg_select_points_r { + cursor: ew-resize; + opacity: 1; + visibility: visible +} + +.svg_select_points { + fill: #efefef; + stroke: #333; + rx: 2 +} + +.apexcharts-svg.apexcharts-zoomable.hovering-zoom { + cursor: crosshair +} + +.apexcharts-svg.apexcharts-zoomable.hovering-pan { + cursor: move +} + +.apexcharts-menu-icon, +.apexcharts-pan-icon, +.apexcharts-reset-icon, +.apexcharts-selection-icon, +.apexcharts-toolbar-custom-icon, +.apexcharts-zoom-icon, +.apexcharts-zoomin-icon, +.apexcharts-zoomout-icon { + cursor: pointer; + width: 20px; + height: 20px; + line-height: 24px; + color: #6e8192; + text-align: center +} + +.apexcharts-menu-icon svg, +.apexcharts-reset-icon svg, +.apexcharts-zoom-icon svg, +.apexcharts-zoomin-icon svg, +.apexcharts-zoomout-icon svg { + fill: #6e8192 +} + +.apexcharts-selection-icon svg { + fill: #444; + transform: scale(.76) +} + +.apexcharts-theme-dark .apexcharts-menu-icon svg, +.apexcharts-theme-dark .apexcharts-pan-icon svg, +.apexcharts-theme-dark .apexcharts-reset-icon svg, +.apexcharts-theme-dark .apexcharts-selection-icon svg, +.apexcharts-theme-dark .apexcharts-toolbar-custom-icon svg, +.apexcharts-theme-dark .apexcharts-zoom-icon svg, +.apexcharts-theme-dark .apexcharts-zoomin-icon svg, +.apexcharts-theme-dark .apexcharts-zoomout-icon svg { + fill: #f3f4f5 +} + +.apexcharts-canvas .apexcharts-reset-zoom-icon.apexcharts-selected svg, +.apexcharts-canvas .apexcharts-selection-icon.apexcharts-selected svg, +.apexcharts-canvas .apexcharts-zoom-icon.apexcharts-selected svg { + fill: #008ffb +} + +.apexcharts-theme-light .apexcharts-menu-icon:hover svg, +.apexcharts-theme-light .apexcharts-reset-icon:hover svg, +.apexcharts-theme-light .apexcharts-selection-icon:not(.apexcharts-selected):hover svg, +.apexcharts-theme-light .apexcharts-zoom-icon:not(.apexcharts-selected):hover svg, +.apexcharts-theme-light .apexcharts-zoomin-icon:hover svg, +.apexcharts-theme-light .apexcharts-zoomout-icon:hover svg { + fill: #333 +} + +.apexcharts-menu-icon, +.apexcharts-selection-icon { + position: relative +} + +.apexcharts-reset-icon { + margin-left: 5px +} + +.apexcharts-menu-icon, +.apexcharts-reset-icon, +.apexcharts-zoom-icon { + transform: scale(.85) +} + +.apexcharts-zoomin-icon, +.apexcharts-zoomout-icon { + transform: scale(.7) +} + +.apexcharts-zoomout-icon { + margin-right: 3px +} + +.apexcharts-pan-icon { + transform: scale(.62); + position: relative; + left: 1px; + top: 0 +} + +.apexcharts-pan-icon svg { + fill: #fff; + stroke: #6e8192; + stroke-width: 2 +} + +.apexcharts-pan-icon.apexcharts-selected svg { + stroke: #008ffb +} + +.apexcharts-pan-icon:not(.apexcharts-selected):hover svg { + stroke: #333 +} + +.apexcharts-toolbar { + position: absolute; + z-index: 11; + max-width: 176px; + text-align: right; + border-radius: 3px; + padding: 0 6px 2px; + display: flex; + justify-content: space-between; + align-items: center +} + +.apexcharts-menu { + background: #fff; + position: absolute; + top: 100%; + border: 1px solid #ddd; + border-radius: 3px; + padding: 3px; + right: 10px; + opacity: 0; + min-width: 110px; + transition: .15s ease all; + pointer-events: none +} + +.apexcharts-menu.apexcharts-menu-open { + opacity: 1; + pointer-events: all; + transition: .15s ease all +} + +.apexcharts-menu-item { + padding: 6px 7px; + font-size: 12px; + cursor: pointer +} + +.apexcharts-theme-light .apexcharts-menu-item:hover { + background: #eee +} + +.apexcharts-theme-dark .apexcharts-menu { + background: rgba(0, 0, 0, .7); + color: #fff +} + +@media screen and (min-width:768px) { + .apexcharts-canvas:hover .apexcharts-toolbar { + opacity: 1 + } +} + +.apexcharts-canvas .apexcharts-element-hidden, +.apexcharts-datalabel.apexcharts-element-hidden, +.apexcharts-hide .apexcharts-series-points { + opacity: 0; +} + +.apexcharts-hidden-element-shown { + opacity: 1; + transition: 0.25s ease all; +} + +.apexcharts-datalabel, +.apexcharts-datalabel-label, +.apexcharts-datalabel-value, +.apexcharts-datalabels, +.apexcharts-pie-label { + cursor: default; + pointer-events: none +} + +.apexcharts-pie-label-delay { + opacity: 0; + animation-name: opaque; + animation-duration: .3s; + animation-fill-mode: forwards; + animation-timing-function: ease +} + +.apexcharts-radialbar-label { + cursor: pointer; +} + +.apexcharts-annotation-rect, +.apexcharts-area-series .apexcharts-area, +.apexcharts-area-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events, +.apexcharts-gridline, +.apexcharts-line, +.apexcharts-line-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events, +.apexcharts-point-annotation-label, +.apexcharts-radar-series path:not(.apexcharts-marker), +.apexcharts-radar-series polygon, +.apexcharts-toolbar svg, +.apexcharts-tooltip .apexcharts-marker, +.apexcharts-xaxis-annotation-label, +.apexcharts-yaxis-annotation-label, +.apexcharts-zoom-rect { + pointer-events: none +} + +.apexcharts-tooltip-active .apexcharts-marker { + transition: .15s ease all +} + +.resize-triggers { + animation: 1ms resizeanim; + visibility: hidden; + opacity: 0; + height: 100%; + width: 100%; + overflow: hidden +} + +.contract-trigger:before, +.resize-triggers, +.resize-triggers>div { + content: " "; + display: block; + position: absolute; + top: 0; + left: 0 +} + +.resize-triggers>div { + height: 100%; + width: 100%; + background: #eee; + overflow: auto +} + +.contract-trigger:before { + overflow: hidden; + width: 200%; + height: 200% +} + +.apexcharts-bar-goals-markers { + pointer-events: none +} + +.apexcharts-bar-shadows { + pointer-events: none +} + +.apexcharts-rangebar-goals-markers { + pointer-events: none +}`;var c=((h=e.opts.chart)===null||h===void 0?void 0:h.nonce)||e.w.config.chart.nonce;c&&o.setAttribute("nonce",c),r?s.prepend(o):n.head.appendChild(o)}var d=e.create(e.w.config.series,{});if(!d)return t(e);e.mount(d).then(function(){typeof e.w.config.chart.events.mounted=="function"&&e.w.config.chart.events.mounted(e,e.w),e.events.fireEvent("mounted",[e,e.w]),t(d)}).catch(function(g){i(g)})}else i(new Error("Element not found"))})}},{key:"create",value:function(e,t){var i=this,a=this.w;new Ct(this).initModules();var s=this.w.globals;if(s.noData=!1,s.animationEnded=!1,this.responsive.checkResponsiveConfig(t),a.config.xaxis.convertedCatToNumeric&&new Le(a.config).convertCatToNumericXaxis(a.config,this.ctx),this.el===null||(this.core.setupElements(),a.config.chart.type==="treemap"&&(a.config.grid.show=!1,a.config.yaxis[0].show=!1),s.svgWidth===0))return s.animationEnded=!0,null;var r=e;e.forEach(function(g,f){g.hidden&&(r=i.legend.legendHelpers.getSeriesAfterCollapsing({realIndex:f}))});var n=$.checkComboSeries(r,a.config.chart.type);s.comboCharts=n.comboCharts,s.comboBarCount=n.comboBarCount;var o=r.every(function(g){return g.data&&g.data.length===0});(r.length===0||o&&s.collapsedSeries.length<1)&&this.series.handleNoData(),this.events.setupEventHandlers(),this.data.parseData(r),this.theme.init(),new ye(this).setGlobalMarkerSize(),this.formatters.setLabelFormatters(),this.titleSubtitle.draw(),s.noData&&s.collapsedSeries.length!==s.series.length&&!a.config.legend.showForSingleSeries||this.legend.init(),this.series.hasAllSeriesEqualX(),s.axisCharts&&(this.core.coreCalculations(),a.config.xaxis.type!=="category"&&this.formatters.setLabelFormatters(),this.ctx.toolbar.minX=a.globals.minX,this.ctx.toolbar.maxX=a.globals.maxX),this.formatters.heatmapLabelFormatters(),new $(this).getLargestMarkerSize(),this.dimensions.plotCoords();var h=this.core.xySettings();this.grid.createGridMask();var c=this.core.plotChartType(r,h),d=new be(this);return d.bringForward(),a.config.dataLabels.background.enabled&&d.dataLabelsBackground(),this.core.shiftGraphPosition(),{elGraph:c,xyRatios:h,dimensions:{plot:{left:a.globals.translateX,top:a.globals.translateY,width:a.globals.gridWidth,height:a.globals.gridHeight}}}}},{key:"mount",value:function(){var e=this,t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:null,i=this,a=i.w;return new Promise(function(s,r){if(i.el===null)return r(new Error("Not enough data to display or target element not found"));(t===null||a.globals.allSeriesCollapsed)&&i.series.handleNoData(),i.grid=new Rt(i);var n,o,h=i.grid.drawGrid();if(i.annotations=new Fi(i),i.annotations.drawImageAnnos(),i.annotations.drawTextAnnos(),a.config.grid.position==="back"&&(h&&a.globals.dom.elGraphical.add(h.el),h!=null&&(n=h.elGridBorders)!==null&&n!==void 0&&n.node&&a.globals.dom.elGraphical.add(h.elGridBorders)),Array.isArray(t.elGraph))for(var c=0;c0&&a.globals.memory.methodsToExec.forEach(function(x){x.method(x.params,!1,x.context)}),a.globals.axisCharts||a.globals.noData||i.core.resizeNonAxisCharts(),s(i)})}},{key:"destroy",value:function(){var e,t;window.removeEventListener("resize",this.windowResizeHandler),this.el.parentNode,e=this.parentResizeHandler,(t=it.get(e))&&(t.disconnect(),it.delete(e));var i=this.w.config.chart.id;i&&Apex._chartInstances.forEach(function(a,s){a.id===P.escapeString(i)&&Apex._chartInstances.splice(s,1)}),new Lt(this.ctx).clear({isUpdating:!1})}},{key:"updateOptions",value:function(e){var t=this,i=arguments.length>1&&arguments[1]!==void 0&&arguments[1],a=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2],s=!(arguments.length>3&&arguments[3]!==void 0)||arguments[3],r=!(arguments.length>4&&arguments[4]!==void 0)||arguments[4],n=this.w;return n.globals.selection=void 0,e.series&&(this.series.resetSeries(!1,!0,!1),e.series.length&&e.series[0].data&&(e.series=e.series.map(function(o,h){return t.updateHelpers._extendSeries(o,h)})),this.updateHelpers.revertDefaultAxisMinMax()),e.xaxis&&(e=this.updateHelpers.forceXAxisUpdate(e)),e.yaxis&&(e=this.updateHelpers.forceYAxisUpdate(e)),n.globals.collapsedSeriesIndices.length>0&&this.series.clearPreviousPaths(),e.theme&&(e=this.theme.updateThemeOptions(e)),this.updateHelpers._updateOptions(e,i,a,s,r)}},{key:"updateSeries",value:function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],t=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],i=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2];return this.series.resetSeries(!1),this.updateHelpers.revertDefaultAxisMinMax(),this.updateHelpers._updateSeries(e,t,i)}},{key:"appendSeries",value:function(e){var t=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],i=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2],a=this.w.config.series.slice();return a.push(e),this.series.resetSeries(!1),this.updateHelpers.revertDefaultAxisMinMax(),this.updateHelpers._updateSeries(a,t,i)}},{key:"appendData",value:function(e){var t=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],i=this;i.w.globals.dataChanged=!0,i.series.getPreviousPaths();for(var a=i.w.config.series.slice(),s=0;s0&&arguments[0]!==void 0)||arguments[0],t=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1];this.series.resetSeries(e,t)}},{key:"addEventListener",value:function(e,t){this.events.addEventListener(e,t)}},{key:"removeEventListener",value:function(e,t){this.events.removeEventListener(e,t)}},{key:"addXaxisAnnotation",value:function(e){var t=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:void 0,a=this;i&&(a=i),a.annotations.addXaxisAnnotationExternal(e,t,a)}},{key:"addYaxisAnnotation",value:function(e){var t=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:void 0,a=this;i&&(a=i),a.annotations.addYaxisAnnotationExternal(e,t,a)}},{key:"addPointAnnotation",value:function(e){var t=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:void 0,a=this;i&&(a=i),a.annotations.addPointAnnotationExternal(e,t,a)}},{key:"clearAnnotations",value:function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:void 0,t=this;e&&(t=e),t.annotations.clearAnnotations(t)}},{key:"removeAnnotation",value:function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:void 0,i=this;t&&(i=t),i.annotations.removeAnnotation(i,e)}},{key:"getChartArea",value:function(){return this.w.globals.dom.baseEl.querySelector(".apexcharts-inner")}},{key:"getSeriesTotalXRange",value:function(e,t){return this.coreUtils.getSeriesTotalsXRange(e,t)}},{key:"getHighestValueInSeries",value:function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;return new rt(this.ctx).getMinYMaxY(e).highestY}},{key:"getLowestValueInSeries",value:function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;return new rt(this.ctx).getMinYMaxY(e).lowestY}},{key:"getSeriesTotal",value:function(){return this.w.globals.seriesTotals}},{key:"toggleDataPointSelection",value:function(e,t){return this.updateHelpers.toggleDataPointSelection(e,t)}},{key:"zoomX",value:function(e,t){this.ctx.toolbar.zoomUpdateOptions(e,t)}},{key:"setLocale",value:function(e){this.localization.setCurrentLocaleValues(e)}},{key:"dataURI",value:function(e){return new He(this.ctx).dataURI(e)}},{key:"exportToCSV",value:function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return new He(this.ctx).exportToCSV(e)}},{key:"paper",value:function(){return this.w.globals.dom.Paper}},{key:"_parentResizeCallback",value:function(){this.w.globals.animationEnded&&this.w.config.chart.redrawOnParentResize&&this._windowResize()}},{key:"_windowResize",value:function(){var e=this;clearTimeout(this.w.globals.resizeTimer),this.w.globals.resizeTimer=window.setTimeout(function(){e.w.globals.resized=!0,e.w.globals.dataChanged=!1,e.ctx.update()},150)}},{key:"_windowResizeHandler",value:function(){var e=this.w.config.chart.redrawOnWindowResize;typeof e=="function"&&(e=e()),e&&this._windowResize()}}],[{key:"getChartByID",value:function(e){var t=P.escapeString(e);if(Apex._chartInstances){var i=Apex._chartInstances.filter(function(a){return a.id===t})[0];return i&&i.chart}}},{key:"initOnLoad",value:function(){for(var e=document.querySelectorAll("[data-apexcharts]"),t=0;t2?s-2:0),n=2;n{var pa=200,ii="__lodash_hash_undefined__",xa=800,ba=16,ai=9007199254740991,si="[object Arguments]",ma="[object Array]",va="[object AsyncFunction]",ya="[object Boolean]",wa="[object Date]",ka="[object Error]",ri="[object Function]",Aa="[object GeneratorFunction]",Sa="[object Map]",Ca="[object Number]",La="[object Null]",ni="[object Object]",Pa="[object Proxy]",Ma="[object RegExp]",Ia="[object Set]",Ta="[object String]",za="[object Undefined]",Xa="[object WeakMap]",Ea="[object ArrayBuffer]",Ya="[object DataView]",Fa="[object Float32Array]",Ra="[object Float64Array]",Oa="[object Int8Array]",Da="[object Int16Array]",Ha="[object Int32Array]",Na="[object Uint8Array]",Wa="[object Uint8ClampedArray]",Ba="[object Uint16Array]",Ga="[object Uint32Array]",Va=/[\\^$.*+?()[\]{}|]/g,_a=/^\[object .+?Constructor\]$/,ja=/^(?:0|[1-9]\d*)$/,U={};U[Fa]=U[Ra]=U[Oa]=U[Da]=U[Ha]=U[Na]=U[Wa]=U[Ba]=U[Ga]=!0;U[si]=U[ma]=U[Ea]=U[ya]=U[Ya]=U[wa]=U[ka]=U[ri]=U[Sa]=U[Ca]=U[ni]=U[Ma]=U[Ia]=U[Ta]=U[Xa]=!1;var oi=typeof global=="object"&&global&&global.Object===Object&&global,Ua=typeof self=="object"&&self&&self.Object===Object&&self,Fe=oi||Ua||Function("return this")(),li=typeof Xe=="object"&&Xe&&!Xe.nodeType&&Xe,Ee=li&&typeof we=="object"&&we&&!we.nodeType&&we,hi=Ee&&Ee.exports===li,ht=hi&&oi.process,Ut=function(){try{var p=Ee&&Ee.require&&Ee.require("util").types;return p||ht&&ht.binding&&ht.binding("util")}catch{}}(),qt=Ut&&Ut.isTypedArray;function qa(p,e,t){switch(t.length){case 0:return p.call(e);case 1:return p.call(e,t[0]);case 2:return p.call(e,t[0],t[1]);case 3:return p.call(e,t[0],t[1],t[2])}return p.apply(e,t)}function Za(p,e){for(var t=-1,i=Array(p);++t-1}function bs(p,e){var t=this.__data__,i=Ue(t,p);return i<0?(++this.size,t.push([p,e])):t[i][1]=e,this}de.prototype.clear=us;de.prototype.delete=fs;de.prototype.get=ps;de.prototype.has=xs;de.prototype.set=bs;function ke(p){var e=-1,t=p==null?0:p.length;for(this.clear();++e1?t[a-1]:void 0,r=a>2?t[2]:void 0;for(s=p.length>3&&typeof s=="function"?(a--,s):void 0,r&&js(t[0],t[1],r)&&(s=a<3?void 0:s,a=1),e=Object(e);++i-1&&p%1==0&&p0){if(++e>=xa)return arguments[0]}else e=0;return p.apply(void 0,arguments)}}function er(p){if(p!=null){try{return je.call(p)}catch{}try{return p+""}catch{}}return""}function $e(p,e){return p===e||p!==p&&e!==e}var ut=ti(function(){return arguments}())?ti:function(p){return Re(p)&&ce.call(p,"callee")&&!as.call(p,"callee")},ft=Array.isArray;function bt(p){return p!=null&&bi(p.length)&&!mt(p)}function tr(p){return Re(p)&&bt(p)}var xi=rs||nr;function mt(p){if(!xe(p))return!1;var e=qe(p);return e==ri||e==Aa||e==va||e==Pa}function bi(p){return typeof p=="number"&&p>-1&&p%1==0&&p<=ai}function xe(p){var e=typeof p;return p!=null&&(e=="object"||e=="function")}function Re(p){return p!=null&&typeof p=="object"}function ir(p){if(!Re(p)||qe(p)!=ni)return!1;var e=di(p);if(e===null)return!0;var t=ce.call(e,"constructor")&&e.constructor;return typeof t=="function"&&t instanceof t&&je.call(t)==ts}var mi=qt?$a(qt):Xs;function ar(p){return Ws(p,vi(p))}function vi(p){return bt(p)?Ms(p,!0):Es(p)}var sr=Bs(function(p,e,t){ui(p,e,t)});function rr(p){return function(){return p}}function yi(p){return p}function nr(){return!1}we.exports=sr});var Ai=zi(jt(),1),ki=wi();function or({options:p,chartId:e,theme:t,extraJsOptions:i}){return{chart:null,options:p,chartId:e,theme:t,extraJsOptions:i,init:function(){this.$wire.$on("updateOptions",({options:a})=>{a=ki(a,this.extraJsOptions),this.updateChart(a)}),Alpine.effect(()=>{let a=Alpine.store("theme");this.$nextTick(()=>{this.chart===null?this.initChart():this.updateChart({theme:{mode:a},chart:{background:"inherit"}})})})},initChart:function(){this.options.theme={mode:this.theme},this.options.chart.background="inherit",this.options=ki(this.options,this.extraJsOptions),this.chart=new Ai.default(document.querySelector(this.chartId),this.options),this.chart.render()},updateChart:function(a){this.chart.updateOptions(a,!1,!0,!0)}}}export{or as default}; +/*! Bundled license information: + +apexcharts/dist/apexcharts.common.js: + (*! + * ApexCharts v3.53.0 + * (c) 2018-2024 ApexCharts + * Released under the MIT License. + *) +*/ diff --git a/public/js/filament/forms/components/file-upload.js b/public/js/filament/forms/components/file-upload.js index 1152644..a90ca3a 100644 --- a/public/js/filament/forms/components/file-upload.js +++ b/public/js/filament/forms/components/file-upload.js @@ -24,7 +24,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho ${w.replace(/ /g," ")} -`}let x=t.aspectRatio||b/y,_=y,P=_*x,O=typeof t.scaleToFit>"u"||t.scaleToFit,M=t.center?t.center.x:.5,C=t.center?t.center.y:.5,S=Tl({width:y,height:b},Il({width:_,height:P},x),t.rotation,O?{x:M,y:C}:{x:.5,y:.5}),F=t.zoom*S,R=t.rotation*(180/Math.PI),L={x:_*.5,y:P*.5},z={x:L.x-y*M,y:L.y-b*C},D=[`rotate(${R} ${L.x} ${L.y})`,`translate(${L.x} ${L.y})`,`scale(${F})`,`translate(${-L.x} ${-L.y})`,`translate(${z.x} ${z.y})`],k=t.flip&&t.flip.horizontal,B=t.flip&&t.flip.vertical,X=[`scale(${k?-1:1} ${B?-1:1})`,`translate(${k?-y:0} ${B?-b:0})`],q=` +`}let x=t.aspectRatio||b/y,_=y,P=_*x,O=typeof t.scaleToFit>"u"||t.scaleToFit,M=t.center?t.center.x:.5,C=t.center?t.center.y:.5,S=Tl({width:y,height:b},Il({width:_,height:P},x),t.rotation,O?{x:M,y:C}:{x:.5,y:.5}),F=t.zoom*S,R=t.rotation*(180/Math.PI),L={x:_*.5,y:P*.5},z={x:L.x-y*M,y:L.y-b*C},D=[`rotate(${R} ${L.x} ${L.y})`,`translate(${L.x} ${L.y})`,`scale(${F})`,`translate(${-L.x} ${-L.y})`,`translate(${z.x} ${z.y})`],k=t.flip&&t.flip.horizontal,B=t.flip&&t.flip.vertical,X=[`scale(${k?-1:1} ${B?-1:1})`,`translate(${k?-y:0} ${B?-b:0})`],Y=` create([ + 'course' => 1, + 'max_shifts' => 3, + 'max_nights' => 3, + 'max_weekends' => 3, + 'capacity' => 3, + 'qualifications' => ['run'], + + ]); + + Shift::factory()->create([ + 'soldier_id' => User::factory()->create([ + 'userable_id' => $soldier1->id, + ])->userable_id, + 'parallel_weight' => 0.1, + 'start_date' => now()->addMonth(), + 'end_date' => now()->addMonth()->addHour(), + 'task_id' => Task::factory()->create([ + 'type' => 'run', + ])->id, + ]); + + $soldier2 = Soldier::factory()->create([ + 'course' => 1, + 'max_shifts' => 3, + 'max_nights' => 3, + 'max_weekends' => 3, + 'capacity' => 3, + 'qualifications' => ['run'], + + ]); + + Shift::factory()->create([ + 'soldier_id' => User::factory()->create([ + 'userable_id' => $soldier2->id, + ])->userable_id, + 'parallel_weight' => 0.2, + 'start_date' => now()->addMonth()->addHour(), + 'end_date' => now()->addMonth()->addHours(2), + 'task_id' => Task::factory()->create([ + 'type' => 'run', + ])->id, + ]); + + $charts = new Charts; + $result = $charts->organizeChartData('points', 1, now()->addMonth()->month, now()->addMonth()->year); + expect($result)->toHaveKey('labels')->toBeArray(); + expect($result)->toHaveKey('data')->toBeArray(); +}); From b90fca820c48761f129d441c3b3bb732823a87b8 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Tue, 7 Jan 2025 11:37:08 +0200 Subject: [PATCH 063/259] push and deploy --- composer.lock | 13642 ------------------------------------------------ 1 file changed, 13642 deletions(-) delete mode 100644 composer.lock diff --git a/composer.lock b/composer.lock deleted file mode 100644 index 102fbba..0000000 --- a/composer.lock +++ /dev/null @@ -1,13642 +0,0 @@ -{ - "_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": "0f3772ecc2dbd759431b63e0c245aab2", - "packages": [ - { - "name": "anourvalar/eloquent-serialize", - "version": "1.2.27", - "source": { - "type": "git", - "url": "https://github.com/AnourValar/eloquent-serialize.git", - "reference": "f1c4fcd41a6db1467ed75bc295b62f582d6fd0fe" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/AnourValar/eloquent-serialize/zipball/f1c4fcd41a6db1467ed75bc295b62f582d6fd0fe", - "reference": "f1c4fcd41a6db1467ed75bc295b62f582d6fd0fe", - "shasum": "" - }, - "require": { - "laravel/framework": "^8.0|^9.0|^10.0|^11.0", - "php": "^7.4|^8.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3.26", - "laravel/legacy-factories": "^1.1", - "orchestra/testbench": "^6.0|^7.0|^8.0|^9.0", - "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^9.5|^10.5", - "psalm/plugin-laravel": "^2.8", - "squizlabs/php_codesniffer": "^3.7" - }, - "type": "library", - "extra": { - "laravel": { - "aliases": { - "EloquentSerialize": "AnourValar\\EloquentSerialize\\Facades\\EloquentSerializeFacade" - } - } - }, - "autoload": { - "psr-4": { - "AnourValar\\EloquentSerialize\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Laravel Query Builder (Eloquent) serialization", - "homepage": "https://github.com/AnourValar/eloquent-serialize", - "keywords": [ - "anourvalar", - "builder", - "copy", - "eloquent", - "job", - "laravel", - "query", - "querybuilder", - "queue", - "serializable", - "serialization", - "serialize" - ], - "support": { - "issues": "https://github.com/AnourValar/eloquent-serialize/issues", - "source": "https://github.com/AnourValar/eloquent-serialize/tree/1.2.27" - }, - "time": "2024-11-30T08:27:24+00:00" - }, - { - "name": "aws/aws-crt-php", - "version": "v1.2.7", - "source": { - "type": "git", - "url": "https://github.com/awslabs/aws-crt-php.git", - "reference": "d71d9906c7bb63a28295447ba12e74723bd3730e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/d71d9906c7bb63a28295447ba12e74723bd3730e", - "reference": "d71d9906c7bb63a28295447ba12e74723bd3730e", - "shasum": "" - }, - "require": { - "php": ">=5.5" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35||^5.6.3||^9.5", - "yoast/phpunit-polyfills": "^1.0" - }, - "suggest": { - "ext-awscrt": "Make sure you install awscrt native extension to use any of the functionality." - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "AWS SDK Common Runtime Team", - "email": "aws-sdk-common-runtime@amazon.com" - } - ], - "description": "AWS Common Runtime for PHP", - "homepage": "https://github.com/awslabs/aws-crt-php", - "keywords": [ - "amazon", - "aws", - "crt", - "sdk" - ], - "support": { - "issues": "https://github.com/awslabs/aws-crt-php/issues", - "source": "https://github.com/awslabs/aws-crt-php/tree/v1.2.7" - }, - "time": "2024-10-18T22:15:13+00:00" - }, - { - "name": "aws/aws-sdk-php", - "version": "3.332.2", - "source": { - "type": "git", - "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "6790e53ab0aceca59e1d44fae06c66481013950c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/6790e53ab0aceca59e1d44fae06c66481013950c", - "reference": "6790e53ab0aceca59e1d44fae06c66481013950c", - "shasum": "" - }, - "require": { - "aws/aws-crt-php": "^1.2.3", - "ext-json": "*", - "ext-pcre": "*", - "ext-simplexml": "*", - "guzzlehttp/guzzle": "^6.5.8 || ^7.4.5", - "guzzlehttp/promises": "^1.4.0 || ^2.0", - "guzzlehttp/psr7": "^1.9.1 || ^2.4.5", - "mtdowling/jmespath.php": "^2.6", - "php": ">=7.2.5", - "psr/http-message": "^1.0 || ^2.0" - }, - "require-dev": { - "andrewsville/php-token-reflection": "^1.4", - "aws/aws-php-sns-message-validator": "~1.0", - "behat/behat": "~3.0", - "composer/composer": "^1.10.22", - "dms/phpunit-arraysubset-asserts": "^0.4.0", - "doctrine/cache": "~1.4", - "ext-dom": "*", - "ext-openssl": "*", - "ext-pcntl": "*", - "ext-sockets": "*", - "nette/neon": "^2.3", - "paragonie/random_compat": ">= 2", - "phpunit/phpunit": "^5.6.3 || ^8.5 || ^9.5", - "psr/cache": "^1.0 || ^2.0 || ^3.0", - "psr/simple-cache": "^1.0 || ^2.0 || ^3.0", - "sebastian/comparator": "^1.2.3 || ^4.0", - "yoast/phpunit-polyfills": "^1.0" - }, - "suggest": { - "aws/aws-php-sns-message-validator": "To validate incoming SNS notifications", - "doctrine/cache": "To use the DoctrineCacheAdapter", - "ext-curl": "To send requests using cURL", - "ext-openssl": "Allows working with CloudFront private distributions and verifying received SNS messages", - "ext-sockets": "To use client-side monitoring" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Aws\\": "src/" - }, - "exclude-from-classmap": [ - "src/data/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Amazon Web Services", - "homepage": "http://aws.amazon.com" - } - ], - "description": "AWS SDK for PHP - Use Amazon Web Services in your PHP project", - "homepage": "http://aws.amazon.com/sdkforphp", - "keywords": [ - "amazon", - "aws", - "cloud", - "dynamodb", - "ec2", - "glacier", - "s3", - "sdk" - ], - "support": { - "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", - "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.332.2" - }, - "time": "2024-12-03T06:16:16+00:00" - }, - { - "name": "blade-ui-kit/blade-heroicons", - "version": "2.5.0", - "source": { - "type": "git", - "url": "https://github.com/blade-ui-kit/blade-heroicons.git", - "reference": "4ed3ed08e9ac192d0d126b2f12711d6fb6576a48" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/blade-ui-kit/blade-heroicons/zipball/4ed3ed08e9ac192d0d126b2f12711d6fb6576a48", - "reference": "4ed3ed08e9ac192d0d126b2f12711d6fb6576a48", - "shasum": "" - }, - "require": { - "blade-ui-kit/blade-icons": "^1.6", - "illuminate/support": "^9.0|^10.0|^11.0", - "php": "^8.0" - }, - "require-dev": { - "orchestra/testbench": "^7.0|^8.0|^9.0", - "phpunit/phpunit": "^9.0|^10.5|^11.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "BladeUI\\Heroicons\\BladeHeroiconsServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "BladeUI\\Heroicons\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Dries Vints", - "homepage": "https://driesvints.com" - } - ], - "description": "A package to easily make use of Heroicons in your Laravel Blade views.", - "homepage": "https://github.com/blade-ui-kit/blade-heroicons", - "keywords": [ - "Heroicons", - "blade", - "laravel" - ], - "support": { - "issues": "https://github.com/blade-ui-kit/blade-heroicons/issues", - "source": "https://github.com/blade-ui-kit/blade-heroicons/tree/2.5.0" - }, - "funding": [ - { - "url": "https://github.com/sponsors/driesvints", - "type": "github" - }, - { - "url": "https://www.paypal.com/paypalme/driesvints", - "type": "paypal" - } - ], - "time": "2024-11-18T19:59:07+00:00" - }, - { - "name": "blade-ui-kit/blade-icons", - "version": "1.7.2", - "source": { - "type": "git", - "url": "https://github.com/blade-ui-kit/blade-icons.git", - "reference": "75a54a3f5a2810fcf6574ab23e91b6cc229a1b53" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/blade-ui-kit/blade-icons/zipball/75a54a3f5a2810fcf6574ab23e91b6cc229a1b53", - "reference": "75a54a3f5a2810fcf6574ab23e91b6cc229a1b53", - "shasum": "" - }, - "require": { - "illuminate/contracts": "^8.0|^9.0|^10.0|^11.0", - "illuminate/filesystem": "^8.0|^9.0|^10.0|^11.0", - "illuminate/support": "^8.0|^9.0|^10.0|^11.0", - "illuminate/view": "^8.0|^9.0|^10.0|^11.0", - "php": "^7.4|^8.0", - "symfony/console": "^5.3|^6.0|^7.0", - "symfony/finder": "^5.3|^6.0|^7.0" - }, - "require-dev": { - "mockery/mockery": "^1.5.1", - "orchestra/testbench": "^6.0|^7.0|^8.0|^9.0", - "phpunit/phpunit": "^9.0|^10.5|^11.0" - }, - "bin": [ - "bin/blade-icons-generate" - ], - "type": "library", - "extra": { - "laravel": { - "providers": [ - "BladeUI\\Icons\\BladeIconsServiceProvider" - ] - } - }, - "autoload": { - "files": [ - "src/helpers.php" - ], - "psr-4": { - "BladeUI\\Icons\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Dries Vints", - "homepage": "https://driesvints.com" - } - ], - "description": "A package to easily make use of icons in your Laravel Blade views.", - "homepage": "https://github.com/blade-ui-kit/blade-icons", - "keywords": [ - "blade", - "icons", - "laravel", - "svg" - ], - "support": { - "issues": "https://github.com/blade-ui-kit/blade-icons/issues", - "source": "https://github.com/blade-ui-kit/blade-icons" - }, - "funding": [ - { - "url": "https://github.com/sponsors/driesvints", - "type": "github" - }, - { - "url": "https://www.paypal.com/paypalme/driesvints", - "type": "paypal" - } - ], - "time": "2024-10-17T17:38:00+00:00" - }, - { - "name": "brick/math", - "version": "0.12.1", - "source": { - "type": "git", - "url": "https://github.com/brick/math.git", - "reference": "f510c0a40911935b77b86859eb5223d58d660df1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/f510c0a40911935b77b86859eb5223d58d660df1", - "reference": "f510c0a40911935b77b86859eb5223d58d660df1", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^10.1", - "vimeo/psalm": "5.16.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Brick\\Math\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Arbitrary-precision arithmetic library", - "keywords": [ - "Arbitrary-precision", - "BigInteger", - "BigRational", - "arithmetic", - "bigdecimal", - "bignum", - "bignumber", - "brick", - "decimal", - "integer", - "math", - "mathematics", - "rational" - ], - "support": { - "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.12.1" - }, - "funding": [ - { - "url": "https://github.com/BenMorel", - "type": "github" - } - ], - "time": "2023-11-29T23:19:16+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": "composer/semver", - "version": "3.4.3", - "source": { - "type": "git", - "url": "https://github.com/composer/semver.git", - "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", - "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.11", - "symfony/phpunit-bridge": "^3 || ^7" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Semver\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - }, - { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "http://robbast.nl" - } - ], - "description": "Semver library that offers utilities, version constraint parsing and validation.", - "keywords": [ - "semantic", - "semver", - "validation", - "versioning" - ], - "support": { - "irc": "ircs://irc.libera.chat:6697/composer", - "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.3" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2024-09-19T14:15:21+00:00" - }, - { - "name": "danharrin/date-format-converter", - "version": "v0.3.1", - "source": { - "type": "git", - "url": "https://github.com/danharrin/date-format-converter.git", - "reference": "7c31171bc981e48726729a5f3a05a2d2b63f0b1e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/danharrin/date-format-converter/zipball/7c31171bc981e48726729a5f3a05a2d2b63f0b1e", - "reference": "7c31171bc981e48726729a5f3a05a2d2b63f0b1e", - "shasum": "" - }, - "require": { - "php": "^7.2|^8.0" - }, - "type": "library", - "autoload": { - "files": [ - "src/helpers.php", - "src/standards.php" - ], - "psr-4": { - "DanHarrin\\DateFormatConverter\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Dan Harrin", - "email": "dan@danharrin.com" - } - ], - "description": "Convert token-based date formats between standards.", - "homepage": "https://github.com/danharrin/date-format-converter", - "support": { - "issues": "https://github.com/danharrin/date-format-converter/issues", - "source": "https://github.com/danharrin/date-format-converter" - }, - "funding": [ - { - "url": "https://github.com/danharrin", - "type": "github" - } - ], - "time": "2024-06-13T09:38:44+00:00" - }, - { - "name": "danharrin/livewire-rate-limiting", - "version": "v1.3.1", - "source": { - "type": "git", - "url": "https://github.com/danharrin/livewire-rate-limiting.git", - "reference": "1a1b299e20de61f88ed6e94ea0bbcfc33aab1ddb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/danharrin/livewire-rate-limiting/zipball/1a1b299e20de61f88ed6e94ea0bbcfc33aab1ddb", - "reference": "1a1b299e20de61f88ed6e94ea0bbcfc33aab1ddb", - "shasum": "" - }, - "require": { - "illuminate/support": "^9.0|^10.0|^11.0", - "php": "^8.0" - }, - "require-dev": { - "livewire/livewire": "^3.0", - "livewire/volt": "^1.3", - "orchestra/testbench": "^7.0|^8.0|^9.0", - "phpunit/phpunit": "^9.0|^10.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "DanHarrin\\LivewireRateLimiting\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Dan Harrin", - "email": "dan@danharrin.com" - } - ], - "description": "Apply rate limiters to Laravel Livewire actions.", - "homepage": "https://github.com/danharrin/livewire-rate-limiting", - "support": { - "issues": "https://github.com/danharrin/livewire-rate-limiting/issues", - "source": "https://github.com/danharrin/livewire-rate-limiting" - }, - "funding": [ - { - "url": "https://github.com/danharrin", - "type": "github" - } - ], - "time": "2024-05-06T09:10:03+00:00" - }, - { - "name": "dflydev/dot-access-data", - "version": "v3.0.3", - "source": { - "type": "git", - "url": "https://github.com/dflydev/dflydev-dot-access-data.git", - "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/a23a2bf4f31d3518f3ecb38660c95715dfead60f", - "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^0.12.42", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", - "scrutinizer/ocular": "1.6.0", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^4.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Dflydev\\DotAccessData\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Dragonfly Development Inc.", - "email": "info@dflydev.com", - "homepage": "http://dflydev.com" - }, - { - "name": "Beau Simensen", - "email": "beau@dflydev.com", - "homepage": "http://beausimensen.com" - }, - { - "name": "Carlos Frutos", - "email": "carlos@kiwing.it", - "homepage": "https://github.com/cfrutos" - }, - { - "name": "Colin O'Dell", - "email": "colinodell@gmail.com", - "homepage": "https://www.colinodell.com" - } - ], - "description": "Given a deep data structure, access data by dot notation.", - "homepage": "https://github.com/dflydev/dflydev-dot-access-data", - "keywords": [ - "access", - "data", - "dot", - "notation" - ], - "support": { - "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", - "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.3" - }, - "time": "2024-07-08T12:26:09+00:00" - }, - { - "name": "doctrine/dbal", - "version": "4.2.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/dbal.git", - "reference": "dadd35300837a3a2184bd47d403333b15d0a9bd0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/dadd35300837a3a2184bd47d403333b15d0a9bd0", - "reference": "dadd35300837a3a2184bd47d403333b15d0a9bd0", - "shasum": "" - }, - "require": { - "doctrine/deprecations": "^0.5.3|^1", - "php": "^8.1", - "psr/cache": "^1|^2|^3", - "psr/log": "^1|^2|^3" - }, - "require-dev": { - "doctrine/coding-standard": "12.0.0", - "fig/log-test": "^1", - "jetbrains/phpstorm-stubs": "2023.2", - "phpstan/phpstan": "1.12.6", - "phpstan/phpstan-phpunit": "1.4.0", - "phpstan/phpstan-strict-rules": "^1.6", - "phpunit/phpunit": "10.5.30", - "psalm/plugin-phpunit": "0.19.0", - "slevomat/coding-standard": "8.13.1", - "squizlabs/php_codesniffer": "3.10.2", - "symfony/cache": "^6.3.8|^7.0", - "symfony/console": "^5.4|^6.3|^7.0", - "vimeo/psalm": "5.25.0" - }, - "suggest": { - "symfony/console": "For helpful console commands such as SQL execution and import of files." - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\DBAL\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - } - ], - "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.", - "homepage": "https://www.doctrine-project.org/projects/dbal.html", - "keywords": [ - "abstraction", - "database", - "db2", - "dbal", - "mariadb", - "mssql", - "mysql", - "oci8", - "oracle", - "pdo", - "pgsql", - "postgresql", - "queryobject", - "sasql", - "sql", - "sqlite", - "sqlserver", - "sqlsrv" - ], - "support": { - "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/4.2.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%2Fdbal", - "type": "tidelift" - } - ], - "time": "2024-10-10T18:01:27+00:00" - }, - { - "name": "doctrine/deprecations", - "version": "1.1.3", - "source": { - "type": "git", - "url": "https://github.com/doctrine/deprecations.git", - "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", - "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9", - "phpstan/phpstan": "1.4.10 || 1.10.15", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psalm/plugin-phpunit": "0.18.4", - "psr/log": "^1 || ^2 || ^3", - "vimeo/psalm": "4.30.0 || 5.12.0" - }, - "suggest": { - "psr/log": "Allows logging deprecations via PSR-3 logger implementation" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", - "homepage": "https://www.doctrine-project.org/", - "support": { - "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.3" - }, - "time": "2024-01-30T19:34:25+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": "dragonmantank/cron-expression", - "version": "v3.4.0", - "source": { - "type": "git", - "url": "https://github.com/dragonmantank/cron-expression.git", - "reference": "8c784d071debd117328803d86b2097615b457500" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/8c784d071debd117328803d86b2097615b457500", - "reference": "8c784d071debd117328803d86b2097615b457500", - "shasum": "" - }, - "require": { - "php": "^7.2|^8.0", - "webmozart/assert": "^1.0" - }, - "replace": { - "mtdowling/cron-expression": "^1.0" - }, - "require-dev": { - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^1.0", - "phpunit/phpunit": "^7.0|^8.0|^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Cron\\": "src/Cron/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Chris Tankersley", - "email": "chris@ctankersley.com", - "homepage": "https://github.com/dragonmantank" - } - ], - "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", - "keywords": [ - "cron", - "schedule" - ], - "support": { - "issues": "https://github.com/dragonmantank/cron-expression/issues", - "source": "https://github.com/dragonmantank/cron-expression/tree/v3.4.0" - }, - "funding": [ - { - "url": "https://github.com/dragonmantank", - "type": "github" - } - ], - "time": "2024-10-09T13:47:03+00:00" - }, - { - "name": "egulias/email-validator", - "version": "4.0.2", - "source": { - "type": "git", - "url": "https://github.com/egulias/EmailValidator.git", - "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ebaaf5be6c0286928352e054f2d5125608e5405e", - "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e", - "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.2" - }, - "funding": [ - { - "url": "https://github.com/egulias", - "type": "github" - } - ], - "time": "2023-10-06T06:47:41+00:00" - }, - { - "name": "ezyang/htmlpurifier", - "version": "v4.18.0", - "source": { - "type": "git", - "url": "https://github.com/ezyang/htmlpurifier.git", - "reference": "cb56001e54359df7ae76dc522d08845dc741621b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/cb56001e54359df7ae76dc522d08845dc741621b", - "reference": "cb56001e54359df7ae76dc522d08845dc741621b", - "shasum": "" - }, - "require": { - "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" - }, - "require-dev": { - "cerdic/css-tidy": "^1.7 || ^2.0", - "simpletest/simpletest": "dev-master" - }, - "suggest": { - "cerdic/css-tidy": "If you want to use the filter 'Filter.ExtractStyleBlocks'.", - "ext-bcmath": "Used for unit conversion and imagecrash protection", - "ext-iconv": "Converts text to and from non-UTF-8 encodings", - "ext-tidy": "Used for pretty-printing HTML" - }, - "type": "library", - "autoload": { - "files": [ - "library/HTMLPurifier.composer.php" - ], - "psr-0": { - "HTMLPurifier": "library/" - }, - "exclude-from-classmap": [ - "/library/HTMLPurifier/Language/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1-or-later" - ], - "authors": [ - { - "name": "Edward Z. Yang", - "email": "admin@htmlpurifier.org", - "homepage": "http://ezyang.com" - } - ], - "description": "Standards compliant HTML filter written in PHP", - "homepage": "http://htmlpurifier.org/", - "keywords": [ - "html" - ], - "support": { - "issues": "https://github.com/ezyang/htmlpurifier/issues", - "source": "https://github.com/ezyang/htmlpurifier/tree/v4.18.0" - }, - "time": "2024-11-01T03:51:45+00:00" - }, - { - "name": "filament/actions", - "version": "v3.2.127", - "source": { - "type": "git", - "url": "https://github.com/filamentphp/actions.git", - "reference": "f325e315c365cfcea5c9da96662ddea37e3663fc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/filamentphp/actions/zipball/f325e315c365cfcea5c9da96662ddea37e3663fc", - "reference": "f325e315c365cfcea5c9da96662ddea37e3663fc", - "shasum": "" - }, - "require": { - "anourvalar/eloquent-serialize": "^1.2", - "filament/forms": "self.version", - "filament/infolists": "self.version", - "filament/notifications": "self.version", - "filament/support": "self.version", - "illuminate/contracts": "^10.45|^11.0", - "illuminate/database": "^10.45|^11.0", - "illuminate/support": "^10.45|^11.0", - "league/csv": "^9.14", - "openspout/openspout": "^4.23", - "php": "^8.1", - "spatie/laravel-package-tools": "^1.9" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Filament\\Actions\\ActionsServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Filament\\Actions\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Easily add beautiful action modals to any Livewire component.", - "homepage": "https://github.com/filamentphp/filament", - "support": { - "issues": "https://github.com/filamentphp/filament/issues", - "source": "https://github.com/filamentphp/filament" - }, - "time": "2024-11-29T09:30:57+00:00" - }, - { - "name": "filament/filament", - "version": "v3.2.127", - "source": { - "type": "git", - "url": "https://github.com/filamentphp/panels.git", - "reference": "4aea767e8c872842b624fe47affe078433111259" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/filamentphp/panels/zipball/4aea767e8c872842b624fe47affe078433111259", - "reference": "4aea767e8c872842b624fe47affe078433111259", - "shasum": "" - }, - "require": { - "danharrin/livewire-rate-limiting": "^0.3|^1.0", - "filament/actions": "self.version", - "filament/forms": "self.version", - "filament/infolists": "self.version", - "filament/notifications": "self.version", - "filament/support": "self.version", - "filament/tables": "self.version", - "filament/widgets": "self.version", - "illuminate/auth": "^10.45|^11.0", - "illuminate/console": "^10.45|^11.0", - "illuminate/contracts": "^10.45|^11.0", - "illuminate/cookie": "^10.45|^11.0", - "illuminate/database": "^10.45|^11.0", - "illuminate/http": "^10.45|^11.0", - "illuminate/routing": "^10.45|^11.0", - "illuminate/session": "^10.45|^11.0", - "illuminate/support": "^10.45|^11.0", - "illuminate/view": "^10.45|^11.0", - "php": "^8.1", - "spatie/laravel-package-tools": "^1.9" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Filament\\FilamentServiceProvider" - ] - } - }, - "autoload": { - "files": [ - "src/global_helpers.php", - "src/helpers.php" - ], - "psr-4": { - "Filament\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A collection of full-stack components for accelerated Laravel app development.", - "homepage": "https://github.com/filamentphp/filament", - "support": { - "issues": "https://github.com/filamentphp/filament/issues", - "source": "https://github.com/filamentphp/filament" - }, - "time": "2024-11-29T09:30:58+00:00" - }, - { - "name": "filament/forms", - "version": "v3.2.127", - "source": { - "type": "git", - "url": "https://github.com/filamentphp/forms.git", - "reference": "c78071f1aabb63a0d9bf74268005d3294b61dc2a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/filamentphp/forms/zipball/c78071f1aabb63a0d9bf74268005d3294b61dc2a", - "reference": "c78071f1aabb63a0d9bf74268005d3294b61dc2a", - "shasum": "" - }, - "require": { - "danharrin/date-format-converter": "^0.3", - "filament/actions": "self.version", - "filament/support": "self.version", - "illuminate/console": "^10.45|^11.0", - "illuminate/contracts": "^10.45|^11.0", - "illuminate/database": "^10.45|^11.0", - "illuminate/filesystem": "^10.45|^11.0", - "illuminate/support": "^10.45|^11.0", - "illuminate/validation": "^10.45|^11.0", - "illuminate/view": "^10.45|^11.0", - "php": "^8.1", - "spatie/laravel-package-tools": "^1.9" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Filament\\Forms\\FormsServiceProvider" - ] - } - }, - "autoload": { - "files": [ - "src/helpers.php" - ], - "psr-4": { - "Filament\\Forms\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Easily add beautiful forms to any Livewire component.", - "homepage": "https://github.com/filamentphp/filament", - "support": { - "issues": "https://github.com/filamentphp/filament/issues", - "source": "https://github.com/filamentphp/filament" - }, - "time": "2024-11-29T09:30:53+00:00" - }, - { - "name": "filament/infolists", - "version": "v3.2.127", - "source": { - "type": "git", - "url": "https://github.com/filamentphp/infolists.git", - "reference": "e655ac3900ab2109022aa0243cfb4126729ef431" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/filamentphp/infolists/zipball/e655ac3900ab2109022aa0243cfb4126729ef431", - "reference": "e655ac3900ab2109022aa0243cfb4126729ef431", - "shasum": "" - }, - "require": { - "filament/actions": "self.version", - "filament/support": "self.version", - "illuminate/console": "^10.45|^11.0", - "illuminate/contracts": "^10.45|^11.0", - "illuminate/database": "^10.45|^11.0", - "illuminate/filesystem": "^10.45|^11.0", - "illuminate/support": "^10.45|^11.0", - "illuminate/view": "^10.45|^11.0", - "php": "^8.1", - "spatie/laravel-package-tools": "^1.9" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Filament\\Infolists\\InfolistsServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Filament\\Infolists\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Easily add beautiful read-only infolists to any Livewire component.", - "homepage": "https://github.com/filamentphp/filament", - "support": { - "issues": "https://github.com/filamentphp/filament/issues", - "source": "https://github.com/filamentphp/filament" - }, - "time": "2024-11-29T09:30:56+00:00" - }, - { - "name": "filament/notifications", - "version": "v3.2.127", - "source": { - "type": "git", - "url": "https://github.com/filamentphp/notifications.git", - "reference": "c19df07c801c5550de0d30957c5a316f53019533" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/filamentphp/notifications/zipball/c19df07c801c5550de0d30957c5a316f53019533", - "reference": "c19df07c801c5550de0d30957c5a316f53019533", - "shasum": "" - }, - "require": { - "filament/actions": "self.version", - "filament/support": "self.version", - "illuminate/contracts": "^10.45|^11.0", - "illuminate/filesystem": "^10.45|^11.0", - "illuminate/notifications": "^10.45|^11.0", - "illuminate/support": "^10.45|^11.0", - "php": "^8.1", - "spatie/laravel-package-tools": "^1.9" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Filament\\Notifications\\NotificationsServiceProvider" - ] - } - }, - "autoload": { - "files": [ - "src/Testing/Autoload.php" - ], - "psr-4": { - "Filament\\Notifications\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Easily add beautiful notifications to any Livewire app.", - "homepage": "https://github.com/filamentphp/filament", - "support": { - "issues": "https://github.com/filamentphp/filament/issues", - "source": "https://github.com/filamentphp/filament" - }, - "time": "2024-10-23T07:36:14+00:00" - }, - { - "name": "filament/support", - "version": "v3.2.127", - "source": { - "type": "git", - "url": "https://github.com/filamentphp/support.git", - "reference": "a720fb2508a1d84a9b35aedc9991d4b53d18fea6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/filamentphp/support/zipball/a720fb2508a1d84a9b35aedc9991d4b53d18fea6", - "reference": "a720fb2508a1d84a9b35aedc9991d4b53d18fea6", - "shasum": "" - }, - "require": { - "blade-ui-kit/blade-heroicons": "^2.5", - "doctrine/dbal": "^3.2|^4.0", - "ext-intl": "*", - "illuminate/contracts": "^10.45|^11.0", - "illuminate/support": "^10.45|^11.0", - "illuminate/view": "^10.45|^11.0", - "kirschbaum-development/eloquent-power-joins": "^3.0|^4.0", - "livewire/livewire": "3.5.12", - "php": "^8.1", - "ryangjchandler/blade-capture-directive": "^0.2|^0.3|^1.0", - "spatie/color": "^1.5", - "spatie/invade": "^1.0|^2.0", - "spatie/laravel-package-tools": "^1.9", - "symfony/console": "^6.0|^7.0", - "symfony/html-sanitizer": "^6.1|^7.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Filament\\Support\\SupportServiceProvider" - ] - } - }, - "autoload": { - "files": [ - "src/helpers.php" - ], - "psr-4": { - "Filament\\Support\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Core helper methods and foundation code for all Filament packages.", - "homepage": "https://github.com/filamentphp/filament", - "support": { - "issues": "https://github.com/filamentphp/filament/issues", - "source": "https://github.com/filamentphp/filament" - }, - "time": "2024-11-29T09:31:13+00:00" - }, - { - "name": "filament/tables", - "version": "v3.2.127", - "source": { - "type": "git", - "url": "https://github.com/filamentphp/tables.git", - "reference": "c287a68e084c96c3f2991eaddf1d6b5159af5147" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/filamentphp/tables/zipball/c287a68e084c96c3f2991eaddf1d6b5159af5147", - "reference": "c287a68e084c96c3f2991eaddf1d6b5159af5147", - "shasum": "" - }, - "require": { - "filament/actions": "self.version", - "filament/forms": "self.version", - "filament/support": "self.version", - "illuminate/console": "^10.45|^11.0", - "illuminate/contracts": "^10.45|^11.0", - "illuminate/database": "^10.45|^11.0", - "illuminate/filesystem": "^10.45|^11.0", - "illuminate/support": "^10.45|^11.0", - "illuminate/view": "^10.45|^11.0", - "php": "^8.1", - "spatie/laravel-package-tools": "^1.9" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Filament\\Tables\\TablesServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Filament\\Tables\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Easily add beautiful tables to any Livewire component.", - "homepage": "https://github.com/filamentphp/filament", - "support": { - "issues": "https://github.com/filamentphp/filament/issues", - "source": "https://github.com/filamentphp/filament" - }, - "time": "2024-11-30T09:21:26+00:00" - }, - { - "name": "filament/widgets", - "version": "v3.2.127", - "source": { - "type": "git", - "url": "https://github.com/filamentphp/widgets.git", - "reference": "6de1c84d71168fd1c6a5b1ae1e1b4ec5ee4b6f55" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/filamentphp/widgets/zipball/6de1c84d71168fd1c6a5b1ae1e1b4ec5ee4b6f55", - "reference": "6de1c84d71168fd1c6a5b1ae1e1b4ec5ee4b6f55", - "shasum": "" - }, - "require": { - "filament/support": "self.version", - "php": "^8.1", - "spatie/laravel-package-tools": "^1.9" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Filament\\Widgets\\WidgetsServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Filament\\Widgets\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Easily add beautiful dashboard widgets to any Livewire component.", - "homepage": "https://github.com/filamentphp/filament", - "support": { - "issues": "https://github.com/filamentphp/filament/issues", - "source": "https://github.com/filamentphp/filament" - }, - "time": "2024-11-27T16:52:29+00:00" - }, - { - "name": "fruitcake/php-cors", - "version": "v1.3.0", - "source": { - "type": "git", - "url": "https://github.com/fruitcake/php-cors.git", - "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/3d158f36e7875e2f040f37bc0573956240a5a38b", - "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b", - "shasum": "" - }, - "require": { - "php": "^7.4|^8.0", - "symfony/http-foundation": "^4.4|^5.4|^6|^7" - }, - "require-dev": { - "phpstan/phpstan": "^1.4", - "phpunit/phpunit": "^9", - "squizlabs/php_codesniffer": "^3.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2-dev" - } - }, - "autoload": { - "psr-4": { - "Fruitcake\\Cors\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fruitcake", - "homepage": "https://fruitcake.nl" - }, - { - "name": "Barryvdh", - "email": "barryvdh@gmail.com" - } - ], - "description": "Cross-origin resource sharing library for the Symfony HttpFoundation", - "homepage": "https://github.com/fruitcake/php-cors", - "keywords": [ - "cors", - "laravel", - "symfony" - ], - "support": { - "issues": "https://github.com/fruitcake/php-cors/issues", - "source": "https://github.com/fruitcake/php-cors/tree/v1.3.0" - }, - "funding": [ - { - "url": "https://fruitcake.nl", - "type": "custom" - }, - { - "url": "https://github.com/barryvdh", - "type": "github" - } - ], - "time": "2023-10-12T05:21:21+00:00" - }, - { - "name": "graham-campbell/result-type", - "version": "v1.1.3", - "source": { - "type": "git", - "url": "https://github.com/GrahamCampbell/Result-Type.git", - "reference": "3ba905c11371512af9d9bdd27d99b782216b6945" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/3ba905c11371512af9d9bdd27d99b782216b6945", - "reference": "3ba905c11371512af9d9bdd27d99b782216b6945", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9.3" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" - }, - "type": "library", - "autoload": { - "psr-4": { - "GrahamCampbell\\ResultType\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - } - ], - "description": "An Implementation Of The Result Type", - "keywords": [ - "Graham Campbell", - "GrahamCampbell", - "Result Type", - "Result-Type", - "result" - ], - "support": { - "issues": "https://github.com/GrahamCampbell/Result-Type/issues", - "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.3" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", - "type": "tidelift" - } - ], - "time": "2024-07-20T21:45:45+00:00" - }, - { - "name": "guzzlehttp/guzzle", - "version": "7.9.2", - "source": { - "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "d281ed313b989f213357e3be1a179f02196ac99b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d281ed313b989f213357e3be1a179f02196ac99b", - "reference": "d281ed313b989f213357e3be1a179f02196ac99b", - "shasum": "" - }, - "require": { - "ext-json": "*", - "guzzlehttp/promises": "^1.5.3 || ^2.0.3", - "guzzlehttp/psr7": "^2.7.0", - "php": "^7.2.5 || ^8.0", - "psr/http-client": "^1.0", - "symfony/deprecation-contracts": "^2.2 || ^3.0" - }, - "provide": { - "psr/http-client-implementation": "1.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", - "ext-curl": "*", - "guzzle/client-integration-tests": "3.0.2", - "php-http/message-factory": "^1.1", - "phpunit/phpunit": "^8.5.39 || ^9.6.20", - "psr/log": "^1.1 || ^2.0 || ^3.0" - }, - "suggest": { - "ext-curl": "Required for CURL handler support", - "ext-intl": "Required for Internationalized Domain Name (IDN) support", - "psr/log": "Required for using the Log middleware" - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - } - }, - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "GuzzleHttp\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Jeremy Lindblom", - "email": "jeremeamia@gmail.com", - "homepage": "https://github.com/jeremeamia" - }, - { - "name": "George Mponos", - "email": "gmponos@gmail.com", - "homepage": "https://github.com/gmponos" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://github.com/sagikazarmark" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - } - ], - "description": "Guzzle is a PHP HTTP client library", - "keywords": [ - "client", - "curl", - "framework", - "http", - "http client", - "psr-18", - "psr-7", - "rest", - "web service" - ], - "support": { - "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.9.2" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", - "type": "tidelift" - } - ], - "time": "2024-07-24T11:22:20+00:00" - }, - { - "name": "guzzlehttp/promises", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/guzzle/promises.git", - "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/f9c436286ab2892c7db7be8c8da4ef61ccf7b455", - "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.39 || ^9.6.20" - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - } - ], - "description": "Guzzle promises library", - "keywords": [ - "promise" - ], - "support": { - "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", - "type": "tidelift" - } - ], - "time": "2024-10-17T10:06:22+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": "guzzlehttp/uri-template", - "version": "v1.0.3", - "source": { - "type": "git", - "url": "https://github.com/guzzle/uri-template.git", - "reference": "ecea8feef63bd4fef1f037ecb288386999ecc11c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/uri-template/zipball/ecea8feef63bd4fef1f037ecb288386999ecc11c", - "reference": "ecea8feef63bd4fef1f037ecb288386999ecc11c", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0", - "symfony/polyfill-php80": "^1.24" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.36 || ^9.6.15", - "uri-template/tests": "1.0.0" - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\UriTemplate\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "George Mponos", - "email": "gmponos@gmail.com", - "homepage": "https://github.com/gmponos" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - } - ], - "description": "A polyfill class for uri_template of PHP", - "keywords": [ - "guzzlehttp", - "uri-template" - ], - "support": { - "issues": "https://github.com/guzzle/uri-template/issues", - "source": "https://github.com/guzzle/uri-template/tree/v1.0.3" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/uri-template", - "type": "tidelift" - } - ], - "time": "2023-12-03T19:50:20+00:00" - }, - { - "name": "kirschbaum-development/eloquent-power-joins", - "version": "4.0.1", - "source": { - "type": "git", - "url": "https://github.com/kirschbaum-development/eloquent-power-joins.git", - "reference": "3c1af9b86b02f1e39219849c1d2fee7cf77e8638" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/kirschbaum-development/eloquent-power-joins/zipball/3c1af9b86b02f1e39219849c1d2fee7cf77e8638", - "reference": "3c1af9b86b02f1e39219849c1d2fee7cf77e8638", - "shasum": "" - }, - "require": { - "illuminate/database": "^10.0|^11.0", - "illuminate/support": "^10.0|^11.0", - "php": "^8.1" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "dev-master", - "laravel/legacy-factories": "^1.0@dev", - "orchestra/testbench": "^8.0|^9.0", - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Kirschbaum\\PowerJoins\\PowerJoinsServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Kirschbaum\\PowerJoins\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Luis Dalmolin", - "email": "luis.nh@gmail.com", - "role": "Developer" - } - ], - "description": "The Laravel magic applied to joins.", - "homepage": "https://github.com/kirschbaum-development/eloquent-power-joins", - "keywords": [ - "eloquent", - "join", - "laravel", - "mysql" - ], - "support": { - "issues": "https://github.com/kirschbaum-development/eloquent-power-joins/issues", - "source": "https://github.com/kirschbaum-development/eloquent-power-joins/tree/4.0.1" - }, - "time": "2024-11-26T13:22:08+00:00" - }, - { - "name": "laravel/framework", - "version": "v11.34.2", - "source": { - "type": "git", - "url": "https://github.com/laravel/framework.git", - "reference": "865da6d73dd353f07a7bcbd778c55966a620121f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/865da6d73dd353f07a7bcbd778c55966a620121f", - "reference": "865da6d73dd353f07a7bcbd778c55966a620121f", - "shasum": "" - }, - "require": { - "brick/math": "^0.9.3|^0.10.2|^0.11|^0.12", - "composer-runtime-api": "^2.2", - "doctrine/inflector": "^2.0.5", - "dragonmantank/cron-expression": "^3.4", - "egulias/email-validator": "^3.2.1|^4.0", - "ext-ctype": "*", - "ext-filter": "*", - "ext-hash": "*", - "ext-mbstring": "*", - "ext-openssl": "*", - "ext-session": "*", - "ext-tokenizer": "*", - "fruitcake/php-cors": "^1.3", - "guzzlehttp/guzzle": "^7.8.2", - "guzzlehttp/uri-template": "^1.0", - "laravel/prompts": "^0.1.18|^0.2.0|^0.3.0", - "laravel/serializable-closure": "^1.3|^2.0", - "league/commonmark": "^2.2.1", - "league/flysystem": "^3.25.1", - "league/flysystem-local": "^3.25.1", - "monolog/monolog": "^3.0", - "nesbot/carbon": "^2.72.2|^3.4", - "nunomaduro/termwind": "^2.0", - "php": "^8.2", - "psr/container": "^1.1.1|^2.0.1", - "psr/log": "^1.0|^2.0|^3.0", - "psr/simple-cache": "^1.0|^2.0|^3.0", - "ramsey/uuid": "^4.7", - "symfony/console": "^7.0.3", - "symfony/error-handler": "^7.0.3", - "symfony/finder": "^7.0.3", - "symfony/http-foundation": "^7.0.3", - "symfony/http-kernel": "^7.0.3", - "symfony/mailer": "^7.0.3", - "symfony/mime": "^7.0.3", - "symfony/polyfill-php83": "^1.31", - "symfony/process": "^7.0.3", - "symfony/routing": "^7.0.3", - "symfony/uid": "^7.0.3", - "symfony/var-dumper": "^7.0.3", - "tijsverkoyen/css-to-inline-styles": "^2.2.5", - "vlucas/phpdotenv": "^5.6.1", - "voku/portable-ascii": "^2.0.2" - }, - "conflict": { - "mockery/mockery": "1.6.8", - "tightenco/collect": "<5.5.33" - }, - "provide": { - "psr/container-implementation": "1.1|2.0", - "psr/log-implementation": "1.0|2.0|3.0", - "psr/simple-cache-implementation": "1.0|2.0|3.0" - }, - "replace": { - "illuminate/auth": "self.version", - "illuminate/broadcasting": "self.version", - "illuminate/bus": "self.version", - "illuminate/cache": "self.version", - "illuminate/collections": "self.version", - "illuminate/concurrency": "self.version", - "illuminate/conditionable": "self.version", - "illuminate/config": "self.version", - "illuminate/console": "self.version", - "illuminate/container": "self.version", - "illuminate/contracts": "self.version", - "illuminate/cookie": "self.version", - "illuminate/database": "self.version", - "illuminate/encryption": "self.version", - "illuminate/events": "self.version", - "illuminate/filesystem": "self.version", - "illuminate/hashing": "self.version", - "illuminate/http": "self.version", - "illuminate/log": "self.version", - "illuminate/macroable": "self.version", - "illuminate/mail": "self.version", - "illuminate/notifications": "self.version", - "illuminate/pagination": "self.version", - "illuminate/pipeline": "self.version", - "illuminate/process": "self.version", - "illuminate/queue": "self.version", - "illuminate/redis": "self.version", - "illuminate/routing": "self.version", - "illuminate/session": "self.version", - "illuminate/support": "self.version", - "illuminate/testing": "self.version", - "illuminate/translation": "self.version", - "illuminate/validation": "self.version", - "illuminate/view": "self.version", - "spatie/once": "*" - }, - "require-dev": { - "ably/ably-php": "^1.0", - "aws/aws-sdk-php": "^3.322.9", - "ext-gmp": "*", - "fakerphp/faker": "^1.24", - "guzzlehttp/promises": "^2.0.3", - "guzzlehttp/psr7": "^2.4", - "league/flysystem-aws-s3-v3": "^3.25.1", - "league/flysystem-ftp": "^3.25.1", - "league/flysystem-path-prefixing": "^3.25.1", - "league/flysystem-read-only": "^3.25.1", - "league/flysystem-sftp-v3": "^3.25.1", - "mockery/mockery": "^1.6.10", - "nyholm/psr7": "^1.2", - "orchestra/testbench-core": "^9.6", - "pda/pheanstalk": "^5.0.6", - "phpstan/phpstan": "^1.11.5", - "phpunit/phpunit": "^10.5.35|^11.3.6", - "predis/predis": "^2.3", - "resend/resend-php": "^0.10.0", - "symfony/cache": "^7.0.3", - "symfony/http-client": "^7.0.3", - "symfony/psr-http-message-bridge": "^7.0.3", - "symfony/translation": "^7.0.3" - }, - "suggest": { - "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", - "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.322.9).", - "brianium/paratest": "Required to run tests in parallel (^7.0|^8.0).", - "ext-apcu": "Required to use the APC cache driver.", - "ext-fileinfo": "Required to use the Filesystem class.", - "ext-ftp": "Required to use the Flysystem FTP driver.", - "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", - "ext-memcached": "Required to use the memcache cache driver.", - "ext-pcntl": "Required to use all features of the queue worker and console signal trapping.", - "ext-pdo": "Required to use all database features.", - "ext-posix": "Required to use all features of the queue worker.", - "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0|^6.0).", - "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", - "filp/whoops": "Required for friendly error pages in development (^2.14.3).", - "laravel/tinker": "Required to use the tinker console command (^2.0).", - "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.25.1).", - "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.25.1).", - "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.25.1).", - "league/flysystem-read-only": "Required to use read-only disks (^3.25.1)", - "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.25.1).", - "mockery/mockery": "Required to use mocking (^1.6).", - "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", - "pda/pheanstalk": "Required to use the beanstalk queue driver (^5.0).", - "phpunit/phpunit": "Required to use assertions and run tests (^10.5|^11.0).", - "predis/predis": "Required to use the predis connector (^2.3).", - "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", - "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", - "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0).", - "symfony/cache": "Required to PSR-6 cache bridge (^7.0).", - "symfony/filesystem": "Required to enable support for relative symbolic links (^7.0).", - "symfony/http-client": "Required to enable support for the Symfony API mail transports (^7.0).", - "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^7.0).", - "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^7.0).", - "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^7.0)." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "11.x-dev" - } - }, - "autoload": { - "files": [ - "src/Illuminate/Collections/helpers.php", - "src/Illuminate/Events/functions.php", - "src/Illuminate/Filesystem/functions.php", - "src/Illuminate/Foundation/helpers.php", - "src/Illuminate/Log/functions.php", - "src/Illuminate/Support/functions.php", - "src/Illuminate/Support/helpers.php" - ], - "psr-4": { - "Illuminate\\": "src/Illuminate/", - "Illuminate\\Support\\": [ - "src/Illuminate/Macroable/", - "src/Illuminate/Collections/", - "src/Illuminate/Conditionable/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Laravel Framework.", - "homepage": "https://laravel.com", - "keywords": [ - "framework", - "laravel" - ], - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2024-11-27T15:43:57+00:00" - }, - { - "name": "laravel/prompts", - "version": "v0.3.2", - "source": { - "type": "git", - "url": "https://github.com/laravel/prompts.git", - "reference": "0e0535747c6b8d6d10adca8b68293cf4517abb0f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/prompts/zipball/0e0535747c6b8d6d10adca8b68293cf4517abb0f", - "reference": "0e0535747c6b8d6d10adca8b68293cf4517abb0f", - "shasum": "" - }, - "require": { - "composer-runtime-api": "^2.2", - "ext-mbstring": "*", - "php": "^8.1", - "symfony/console": "^6.2|^7.0" - }, - "conflict": { - "illuminate/console": ">=10.17.0 <10.25.0", - "laravel/framework": ">=10.17.0 <10.25.0" - }, - "require-dev": { - "illuminate/collections": "^10.0|^11.0", - "mockery/mockery": "^1.5", - "pestphp/pest": "^2.3|^3.4", - "phpstan/phpstan": "^1.11", - "phpstan/phpstan-mockery": "^1.1" - }, - "suggest": { - "ext-pcntl": "Required for the spinner to be animated." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "0.3.x-dev" - } - }, - "autoload": { - "files": [ - "src/helpers.php" - ], - "psr-4": { - "Laravel\\Prompts\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Add beautiful and user-friendly forms to your command-line applications.", - "support": { - "issues": "https://github.com/laravel/prompts/issues", - "source": "https://github.com/laravel/prompts/tree/v0.3.2" - }, - "time": "2024-11-12T14:59:47+00:00" - }, - { - "name": "laravel/serializable-closure", - "version": "v2.0.0", - "source": { - "type": "git", - "url": "https://github.com/laravel/serializable-closure.git", - "reference": "0d8d3d8086984996df86596a86dea60398093a81" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/0d8d3d8086984996df86596a86dea60398093a81", - "reference": "0d8d3d8086984996df86596a86dea60398093a81", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "illuminate/support": "^10.0|^11.0", - "nesbot/carbon": "^2.67|^3.0", - "pestphp/pest": "^2.36", - "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": "2024-11-19T01:38:44+00:00" - }, - { - "name": "laravel/tinker", - "version": "v2.10.0", - "source": { - "type": "git", - "url": "https://github.com/laravel/tinker.git", - "reference": "ba4d51eb56de7711b3a37d63aa0643e99a339ae5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/tinker/zipball/ba4d51eb56de7711b3a37d63aa0643e99a339ae5", - "reference": "ba4d51eb56de7711b3a37d63aa0643e99a339ae5", - "shasum": "" - }, - "require": { - "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", - "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", - "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", - "php": "^7.2.5|^8.0", - "psy/psysh": "^0.11.1|^0.12.0", - "symfony/var-dumper": "^4.3.4|^5.0|^6.0|^7.0" - }, - "require-dev": { - "mockery/mockery": "~1.3.3|^1.4.2", - "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^8.5.8|^9.3.3" - }, - "suggest": { - "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0|^11.0)." - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Laravel\\Tinker\\TinkerServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Laravel\\Tinker\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "Powerful REPL for the Laravel framework.", - "keywords": [ - "REPL", - "Tinker", - "laravel", - "psysh" - ], - "support": { - "issues": "https://github.com/laravel/tinker/issues", - "source": "https://github.com/laravel/tinker/tree/v2.10.0" - }, - "time": "2024-09-23T13:32:56+00:00" - }, - { - "name": "league/commonmark", - "version": "2.5.3", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/commonmark.git", - "reference": "b650144166dfa7703e62a22e493b853b58d874b0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/b650144166dfa7703e62a22e493b853b58d874b0", - "reference": "b650144166dfa7703e62a22e493b853b58d874b0", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "league/config": "^1.1.1", - "php": "^7.4 || ^8.0", - "psr/event-dispatcher": "^1.0", - "symfony/deprecation-contracts": "^2.1 || ^3.0", - "symfony/polyfill-php80": "^1.16" - }, - "require-dev": { - "cebe/markdown": "^1.0", - "commonmark/cmark": "0.31.1", - "commonmark/commonmark.js": "0.31.1", - "composer/package-versions-deprecated": "^1.8", - "embed/embed": "^4.4", - "erusev/parsedown": "^1.0", - "ext-json": "*", - "github/gfm": "0.29.0", - "michelf/php-markdown": "^1.4 || ^2.0", - "nyholm/psr7": "^1.5", - "phpstan/phpstan": "^1.8.2", - "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0", - "scrutinizer/ocular": "^1.8.1", - "symfony/finder": "^5.3 | ^6.0 || ^7.0", - "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 || ^7.0", - "unleashedtech/php-coding-standard": "^3.1.1", - "vimeo/psalm": "^4.24.0 || ^5.0.0" - }, - "suggest": { - "symfony/yaml": "v2.3+ required if using the Front Matter extension" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.6-dev" - } - }, - "autoload": { - "psr-4": { - "League\\CommonMark\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Colin O'Dell", - "email": "colinodell@gmail.com", - "homepage": "https://www.colinodell.com", - "role": "Lead Developer" - } - ], - "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)", - "homepage": "https://commonmark.thephpleague.com", - "keywords": [ - "commonmark", - "flavored", - "gfm", - "github", - "github-flavored", - "markdown", - "md", - "parser" - ], - "support": { - "docs": "https://commonmark.thephpleague.com/", - "forum": "https://github.com/thephpleague/commonmark/discussions", - "issues": "https://github.com/thephpleague/commonmark/issues", - "rss": "https://github.com/thephpleague/commonmark/releases.atom", - "source": "https://github.com/thephpleague/commonmark" - }, - "funding": [ - { - "url": "https://www.colinodell.com/sponsor", - "type": "custom" - }, - { - "url": "https://www.paypal.me/colinpodell/10.00", - "type": "custom" - }, - { - "url": "https://github.com/colinodell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/league/commonmark", - "type": "tidelift" - } - ], - "time": "2024-08-16T11:46:16+00:00" - }, - { - "name": "league/config", - "version": "v1.2.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/config.git", - "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/config/zipball/754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", - "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", - "shasum": "" - }, - "require": { - "dflydev/dot-access-data": "^3.0.1", - "nette/schema": "^1.2", - "php": "^7.4 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.8.2", - "phpunit/phpunit": "^9.5.5", - "scrutinizer/ocular": "^1.8.1", - "unleashedtech/php-coding-standard": "^3.1", - "vimeo/psalm": "^4.7.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.2-dev" - } - }, - "autoload": { - "psr-4": { - "League\\Config\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Colin O'Dell", - "email": "colinodell@gmail.com", - "homepage": "https://www.colinodell.com", - "role": "Lead Developer" - } - ], - "description": "Define configuration arrays with strict schemas and access values with dot notation", - "homepage": "https://config.thephpleague.com", - "keywords": [ - "array", - "config", - "configuration", - "dot", - "dot-access", - "nested", - "schema" - ], - "support": { - "docs": "https://config.thephpleague.com/", - "issues": "https://github.com/thephpleague/config/issues", - "rss": "https://github.com/thephpleague/config/releases.atom", - "source": "https://github.com/thephpleague/config" - }, - "funding": [ - { - "url": "https://www.colinodell.com/sponsor", - "type": "custom" - }, - { - "url": "https://www.paypal.me/colinpodell/10.00", - "type": "custom" - }, - { - "url": "https://github.com/colinodell", - "type": "github" - } - ], - "time": "2022-12-11T20:36:23+00:00" - }, - { - "name": "league/csv", - "version": "9.18.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/csv.git", - "reference": "b02d010e4055ae992247f6ffd1e7b103ef2a0790" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/csv/zipball/b02d010e4055ae992247f6ffd1e7b103ef2a0790", - "reference": "b02d010e4055ae992247f6ffd1e7b103ef2a0790", - "shasum": "" - }, - "require": { - "ext-filter": "*", - "php": "^8.1.2" - }, - "require-dev": { - "ext-dom": "*", - "ext-xdebug": "*", - "friendsofphp/php-cs-fixer": "^3.64.0", - "phpbench/phpbench": "^1.3.1", - "phpstan/phpstan": "^1.12.6", - "phpstan/phpstan-deprecation-rules": "^1.2.1", - "phpstan/phpstan-phpunit": "^1.4.0", - "phpstan/phpstan-strict-rules": "^1.6.1", - "phpunit/phpunit": "^10.5.16 || ^11.4.1", - "symfony/var-dumper": "^6.4.8 || ^7.1.5" - }, - "suggest": { - "ext-dom": "Required to use the XMLConverter and the HTMLConverter classes", - "ext-iconv": "Needed to ease transcoding CSV using iconv stream filters", - "ext-mbstring": "Needed to ease transcoding CSV using mb stream filters" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.x-dev" - } - }, - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "League\\Csv\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ignace Nyamagana Butera", - "email": "nyamsprod@gmail.com", - "homepage": "https://github.com/nyamsprod/", - "role": "Developer" - } - ], - "description": "CSV data manipulation made easy in PHP", - "homepage": "https://csv.thephpleague.com", - "keywords": [ - "convert", - "csv", - "export", - "filter", - "import", - "read", - "transform", - "write" - ], - "support": { - "docs": "https://csv.thephpleague.com", - "issues": "https://github.com/thephpleague/csv/issues", - "rss": "https://github.com/thephpleague/csv/releases.atom", - "source": "https://github.com/thephpleague/csv" - }, - "funding": [ - { - "url": "https://github.com/sponsors/nyamsprod", - "type": "github" - } - ], - "time": "2024-10-18T08:14:48+00:00" - }, - { - "name": "league/flysystem", - "version": "3.29.1", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/flysystem.git", - "reference": "edc1bb7c86fab0776c3287dbd19b5fa278347319" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/edc1bb7c86fab0776c3287dbd19b5fa278347319", - "reference": "edc1bb7c86fab0776c3287dbd19b5fa278347319", - "shasum": "" - }, - "require": { - "league/flysystem-local": "^3.0.0", - "league/mime-type-detection": "^1.0.0", - "php": "^8.0.2" - }, - "conflict": { - "async-aws/core": "<1.19.0", - "async-aws/s3": "<1.14.0", - "aws/aws-sdk-php": "3.209.31 || 3.210.0", - "guzzlehttp/guzzle": "<7.0", - "guzzlehttp/ringphp": "<1.1.1", - "phpseclib/phpseclib": "3.0.15", - "symfony/http-client": "<5.2" - }, - "require-dev": { - "async-aws/s3": "^1.5 || ^2.0", - "async-aws/simple-s3": "^1.1 || ^2.0", - "aws/aws-sdk-php": "^3.295.10", - "composer/semver": "^3.0", - "ext-fileinfo": "*", - "ext-ftp": "*", - "ext-mongodb": "^1.3", - "ext-zip": "*", - "friendsofphp/php-cs-fixer": "^3.5", - "google/cloud-storage": "^1.23", - "guzzlehttp/psr7": "^2.6", - "microsoft/azure-storage-blob": "^1.1", - "mongodb/mongodb": "^1.2", - "phpseclib/phpseclib": "^3.0.36", - "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^9.5.11|^10.0", - "sabre/dav": "^4.6.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "League\\Flysystem\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Frank de Jonge", - "email": "info@frankdejonge.nl" - } - ], - "description": "File storage abstraction for PHP", - "keywords": [ - "WebDAV", - "aws", - "cloud", - "file", - "files", - "filesystem", - "filesystems", - "ftp", - "s3", - "sftp", - "storage" - ], - "support": { - "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/3.29.1" - }, - "time": "2024-10-08T08:58:34+00:00" - }, - { - "name": "league/flysystem-aws-s3-v3", - "version": "3.29.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git", - "reference": "c6ff6d4606e48249b63f269eba7fabdb584e76a9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/c6ff6d4606e48249b63f269eba7fabdb584e76a9", - "reference": "c6ff6d4606e48249b63f269eba7fabdb584e76a9", - "shasum": "" - }, - "require": { - "aws/aws-sdk-php": "^3.295.10", - "league/flysystem": "^3.10.0", - "league/mime-type-detection": "^1.0.0", - "php": "^8.0.2" - }, - "conflict": { - "guzzlehttp/guzzle": "<7.0", - "guzzlehttp/ringphp": "<1.1.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "League\\Flysystem\\AwsS3V3\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Frank de Jonge", - "email": "info@frankdejonge.nl" - } - ], - "description": "AWS S3 filesystem adapter for Flysystem.", - "keywords": [ - "Flysystem", - "aws", - "file", - "files", - "filesystem", - "s3", - "storage" - ], - "support": { - "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.29.0" - }, - "time": "2024-08-17T13:10:48+00:00" - }, - { - "name": "league/flysystem-local", - "version": "3.29.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/flysystem-local.git", - "reference": "e0e8d52ce4b2ed154148453d321e97c8e931bd27" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/e0e8d52ce4b2ed154148453d321e97c8e931bd27", - "reference": "e0e8d52ce4b2ed154148453d321e97c8e931bd27", - "shasum": "" - }, - "require": { - "ext-fileinfo": "*", - "league/flysystem": "^3.0.0", - "league/mime-type-detection": "^1.0.0", - "php": "^8.0.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "League\\Flysystem\\Local\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Frank de Jonge", - "email": "info@frankdejonge.nl" - } - ], - "description": "Local filesystem adapter for Flysystem.", - "keywords": [ - "Flysystem", - "file", - "files", - "filesystem", - "local" - ], - "support": { - "source": "https://github.com/thephpleague/flysystem-local/tree/3.29.0" - }, - "time": "2024-08-09T21:24:39+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": "league/uri", - "version": "7.4.1", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/uri.git", - "reference": "bedb6e55eff0c933668addaa7efa1e1f2c417cc4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri/zipball/bedb6e55eff0c933668addaa7efa1e1f2c417cc4", - "reference": "bedb6e55eff0c933668addaa7efa1e1f2c417cc4", - "shasum": "" - }, - "require": { - "league/uri-interfaces": "^7.3", - "php": "^8.1" - }, - "conflict": { - "league/uri-schemes": "^1.0" - }, - "suggest": { - "ext-bcmath": "to improve IPV4 host parsing", - "ext-fileinfo": "to create Data URI from file contennts", - "ext-gmp": "to improve IPV4 host parsing", - "ext-intl": "to handle IDN host with the best performance", - "jeremykendall/php-domain-parser": "to resolve Public Suffix and Top Level Domain", - "league/uri-components": "Needed to easily manipulate URI objects components", - "php-64bit": "to improve IPV4 host parsing", - "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "7.x-dev" - } - }, - "autoload": { - "psr-4": { - "League\\Uri\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ignace Nyamagana Butera", - "email": "nyamsprod@gmail.com", - "homepage": "https://nyamsprod.com" - } - ], - "description": "URI manipulation library", - "homepage": "https://uri.thephpleague.com", - "keywords": [ - "data-uri", - "file-uri", - "ftp", - "hostname", - "http", - "https", - "middleware", - "parse_str", - "parse_url", - "psr-7", - "query-string", - "querystring", - "rfc3986", - "rfc3987", - "rfc6570", - "uri", - "uri-template", - "url", - "ws" - ], - "support": { - "docs": "https://uri.thephpleague.com", - "forum": "https://thephpleague.slack.com", - "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri/tree/7.4.1" - }, - "funding": [ - { - "url": "https://github.com/sponsors/nyamsprod", - "type": "github" - } - ], - "time": "2024-03-23T07:42:40+00:00" - }, - { - "name": "league/uri-interfaces", - "version": "7.4.1", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/uri-interfaces.git", - "reference": "8d43ef5c841032c87e2de015972c06f3865ef718" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/8d43ef5c841032c87e2de015972c06f3865ef718", - "reference": "8d43ef5c841032c87e2de015972c06f3865ef718", - "shasum": "" - }, - "require": { - "ext-filter": "*", - "php": "^8.1", - "psr/http-factory": "^1", - "psr/http-message": "^1.1 || ^2.0" - }, - "suggest": { - "ext-bcmath": "to improve IPV4 host parsing", - "ext-gmp": "to improve IPV4 host parsing", - "ext-intl": "to handle IDN host with the best performance", - "php-64bit": "to improve IPV4 host parsing", - "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "7.x-dev" - } - }, - "autoload": { - "psr-4": { - "League\\Uri\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ignace Nyamagana Butera", - "email": "nyamsprod@gmail.com", - "homepage": "https://nyamsprod.com" - } - ], - "description": "Common interfaces and classes for URI representation and interaction", - "homepage": "https://uri.thephpleague.com", - "keywords": [ - "data-uri", - "file-uri", - "ftp", - "hostname", - "http", - "https", - "parse_str", - "parse_url", - "psr-7", - "query-string", - "querystring", - "rfc3986", - "rfc3987", - "rfc6570", - "uri", - "url", - "ws" - ], - "support": { - "docs": "https://uri.thephpleague.com", - "forum": "https://thephpleague.slack.com", - "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri-interfaces/tree/7.4.1" - }, - "funding": [ - { - "url": "https://github.com/sponsors/nyamsprod", - "type": "github" - } - ], - "time": "2024-03-23T07:42:40+00:00" - }, - { - "name": "leandrocfe/filament-apex-charts", - "version": "3.1.4", - "source": { - "type": "git", - "url": "https://github.com/leandrocfe/filament-apex-charts.git", - "reference": "e7cfd3f4966a555f30db6f5fcb2f3b3102bc1e99" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/leandrocfe/filament-apex-charts/zipball/e7cfd3f4966a555f30db6f5fcb2f3b3102bc1e99", - "reference": "e7cfd3f4966a555f30db6f5fcb2f3b3102bc1e99", - "shasum": "" - }, - "require": { - "filament/filament": "^3.0", - "illuminate/contracts": "^9.0|^10.0|^11.0", - "livewire/livewire": "^3.0", - "php": "^8.1|^8.2", - "spatie/laravel-package-tools": "^1.13.0" - }, - "require-dev": { - "larastan/larastan": "^2.0.1", - "laravel/pint": "^1.0", - "nunomaduro/collision": "^6.0|^7.0|^8.0", - "orchestra/testbench": "8.14|^9.0", - "pestphp/pest": "^1.21", - "pestphp/pest-plugin-laravel": "^1.1", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^9.5|^10.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Leandrocfe\\FilamentApexCharts\\FilamentApexChartsServiceProvider" - ], - "aliases": { - "FilamentApexCharts": "Leandrocfe\\FilamentApexCharts\\Facades\\FilamentApexCharts" - } - } - }, - "autoload": { - "psr-4": { - "Leandrocfe\\FilamentApexCharts\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Leandro Costa Ferreira", - "email": "leandrocfe@gmail.com", - "role": "Developer" - } - ], - "description": "Apex Charts integration for Filament PHP.", - "homepage": "https://github.com/leandrocfe/filament-apex-charts", - "keywords": [ - "apexcharts", - "filament-apex-charts", - "laravel", - "leandrocfe" - ], - "support": { - "issues": "https://github.com/leandrocfe/filament-apex-charts/issues", - "source": "https://github.com/leandrocfe/filament-apex-charts/tree/3.1.4" - }, - "time": "2024-09-14T13:57:27+00:00" - }, - { - "name": "livewire/livewire", - "version": "v3.5.12", - "source": { - "type": "git", - "url": "https://github.com/livewire/livewire.git", - "reference": "3c8d1f9d7d9098aaea663093ae168f2d5d2ae73d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/livewire/livewire/zipball/3c8d1f9d7d9098aaea663093ae168f2d5d2ae73d", - "reference": "3c8d1f9d7d9098aaea663093ae168f2d5d2ae73d", - "shasum": "" - }, - "require": { - "illuminate/database": "^10.0|^11.0", - "illuminate/routing": "^10.0|^11.0", - "illuminate/support": "^10.0|^11.0", - "illuminate/validation": "^10.0|^11.0", - "laravel/prompts": "^0.1.24|^0.2|^0.3", - "league/mime-type-detection": "^1.9", - "php": "^8.1", - "symfony/console": "^6.0|^7.0", - "symfony/http-kernel": "^6.2|^7.0" - }, - "require-dev": { - "calebporzio/sushi": "^2.1", - "laravel/framework": "^10.15.0|^11.0", - "mockery/mockery": "^1.3.1", - "orchestra/testbench": "^8.21.0|^9.0", - "orchestra/testbench-dusk": "^8.24|^9.1", - "phpunit/phpunit": "^10.4", - "psy/psysh": "^0.11.22|^0.12" - }, - "type": "library", - "extra": { - "laravel": { - "aliases": { - "Livewire": "Livewire\\Livewire" - }, - "providers": [ - "Livewire\\LivewireServiceProvider" - ] - } - }, - "autoload": { - "files": [ - "src/helpers.php" - ], - "psr-4": { - "Livewire\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Caleb Porzio", - "email": "calebporzio@gmail.com" - } - ], - "description": "A front-end framework for Laravel.", - "support": { - "issues": "https://github.com/livewire/livewire/issues", - "source": "https://github.com/livewire/livewire/tree/v3.5.12" - }, - "funding": [ - { - "url": "https://github.com/livewire", - "type": "github" - } - ], - "time": "2024-10-15T19:35:06+00:00" - }, - { - "name": "maatwebsite/excel", - "version": "3.1.61", - "source": { - "type": "git", - "url": "https://github.com/SpartnerNL/Laravel-Excel.git", - "reference": "62616317c5ec07e885c5d7f6b537f57a7239c2ff" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/SpartnerNL/Laravel-Excel/zipball/62616317c5ec07e885c5d7f6b537f57a7239c2ff", - "reference": "62616317c5ec07e885c5d7f6b537f57a7239c2ff", - "shasum": "" - }, - "require": { - "composer/semver": "^3.3", - "ext-json": "*", - "illuminate/support": "5.8.*||^6.0||^7.0||^8.0||^9.0||^10.0||^11.0", - "php": "^7.0||^8.0", - "phpoffice/phpspreadsheet": "^1.29.4", - "psr/simple-cache": "^1.0||^2.0||^3.0" - }, - "require-dev": { - "laravel/scout": "^7.0||^8.0||^9.0||^10.0", - "orchestra/testbench": "^6.0||^7.0||^8.0||^9.0", - "predis/predis": "^1.1" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Maatwebsite\\Excel\\ExcelServiceProvider" - ], - "aliases": { - "Excel": "Maatwebsite\\Excel\\Facades\\Excel" - } - } - }, - "autoload": { - "psr-4": { - "Maatwebsite\\Excel\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Patrick Brouwers", - "email": "patrick@spartner.nl" - } - ], - "description": "Supercharged Excel exports and imports in Laravel", - "keywords": [ - "PHPExcel", - "batch", - "csv", - "excel", - "export", - "import", - "laravel", - "php", - "phpspreadsheet" - ], - "support": { - "issues": "https://github.com/SpartnerNL/Laravel-Excel/issues", - "source": "https://github.com/SpartnerNL/Laravel-Excel/tree/3.1.61" - }, - "funding": [ - { - "url": "https://laravel-excel.com/commercial-support", - "type": "custom" - }, - { - "url": "https://github.com/patrickbrouwers", - "type": "github" - } - ], - "time": "2024-11-25T18:41:59+00:00" - }, - { - "name": "maennchen/zipstream-php", - "version": "3.1.1", - "source": { - "type": "git", - "url": "https://github.com/maennchen/ZipStream-PHP.git", - "reference": "6187e9cc4493da94b9b63eb2315821552015fca9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/6187e9cc4493da94b9b63eb2315821552015fca9", - "reference": "6187e9cc4493da94b9b63eb2315821552015fca9", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "ext-zlib": "*", - "php-64bit": "^8.1" - }, - "require-dev": { - "ext-zip": "*", - "friendsofphp/php-cs-fixer": "^3.16", - "guzzlehttp/guzzle": "^7.5", - "mikey179/vfsstream": "^1.6", - "php-coveralls/php-coveralls": "^2.5", - "phpunit/phpunit": "^10.0", - "vimeo/psalm": "^5.0" - }, - "suggest": { - "guzzlehttp/psr7": "^2.4", - "psr/http-message": "^2.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "ZipStream\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Paul Duncan", - "email": "pabs@pablotron.org" - }, - { - "name": "Jonatan Männchen", - "email": "jonatan@maennchen.ch" - }, - { - "name": "Jesse Donat", - "email": "donatj@gmail.com" - }, - { - "name": "András Kolesár", - "email": "kolesar@kolesar.hu" - } - ], - "description": "ZipStream is a library for dynamically streaming dynamic zip files from PHP without writing to the disk at all on the server.", - "keywords": [ - "stream", - "zip" - ], - "support": { - "issues": "https://github.com/maennchen/ZipStream-PHP/issues", - "source": "https://github.com/maennchen/ZipStream-PHP/tree/3.1.1" - }, - "funding": [ - { - "url": "https://github.com/maennchen", - "type": "github" - } - ], - "time": "2024-10-10T12:33:01+00:00" - }, - { - "name": "markbaker/complex", - "version": "3.0.2", - "source": { - "type": "git", - "url": "https://github.com/MarkBaker/PHPComplex.git", - "reference": "95c56caa1cf5c766ad6d65b6344b807c1e8405b9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/MarkBaker/PHPComplex/zipball/95c56caa1cf5c766ad6d65b6344b807c1e8405b9", - "reference": "95c56caa1cf5c766ad6d65b6344b807c1e8405b9", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "dev-master", - "phpcompatibility/php-compatibility": "^9.3", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", - "squizlabs/php_codesniffer": "^3.7" - }, - "type": "library", - "autoload": { - "psr-4": { - "Complex\\": "classes/src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mark Baker", - "email": "mark@lange.demon.co.uk" - } - ], - "description": "PHP Class for working with complex numbers", - "homepage": "https://github.com/MarkBaker/PHPComplex", - "keywords": [ - "complex", - "mathematics" - ], - "support": { - "issues": "https://github.com/MarkBaker/PHPComplex/issues", - "source": "https://github.com/MarkBaker/PHPComplex/tree/3.0.2" - }, - "time": "2022-12-06T16:21:08+00:00" - }, - { - "name": "markbaker/matrix", - "version": "3.0.1", - "source": { - "type": "git", - "url": "https://github.com/MarkBaker/PHPMatrix.git", - "reference": "728434227fe21be27ff6d86621a1b13107a2562c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/MarkBaker/PHPMatrix/zipball/728434227fe21be27ff6d86621a1b13107a2562c", - "reference": "728434227fe21be27ff6d86621a1b13107a2562c", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "dev-master", - "phpcompatibility/php-compatibility": "^9.3", - "phpdocumentor/phpdocumentor": "2.*", - "phploc/phploc": "^4.0", - "phpmd/phpmd": "2.*", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", - "sebastian/phpcpd": "^4.0", - "squizlabs/php_codesniffer": "^3.7" - }, - "type": "library", - "autoload": { - "psr-4": { - "Matrix\\": "classes/src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mark Baker", - "email": "mark@demon-angel.eu" - } - ], - "description": "PHP Class for working with matrices", - "homepage": "https://github.com/MarkBaker/PHPMatrix", - "keywords": [ - "mathematics", - "matrix", - "vector" - ], - "support": { - "issues": "https://github.com/MarkBaker/PHPMatrix/issues", - "source": "https://github.com/MarkBaker/PHPMatrix/tree/3.0.1" - }, - "time": "2022-12-02T22:17:43+00:00" - }, - { - "name": "masterminds/html5", - "version": "2.9.0", - "source": { - "type": "git", - "url": "https://github.com/Masterminds/html5-php.git", - "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/f5ac2c0b0a2eefca70b2ce32a5809992227e75a6", - "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "php": ">=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8 || ^9" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.7-dev" - } - }, - "autoload": { - "psr-4": { - "Masterminds\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Matt Butcher", - "email": "technosophos@gmail.com" - }, - { - "name": "Matt Farina", - "email": "matt@mattfarina.com" - }, - { - "name": "Asmir Mustafic", - "email": "goetas@gmail.com" - } - ], - "description": "An HTML5 parser and serializer.", - "homepage": "http://masterminds.github.io/html5-php", - "keywords": [ - "HTML5", - "dom", - "html", - "parser", - "querypath", - "serializer", - "xml" - ], - "support": { - "issues": "https://github.com/Masterminds/html5-php/issues", - "source": "https://github.com/Masterminds/html5-php/tree/2.9.0" - }, - "time": "2024-03-31T07:05:07+00:00" - }, - { - "name": "monolog/monolog", - "version": "3.8.0", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/monolog.git", - "reference": "32e515fdc02cdafbe4593e30a9350d486b125b67" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/32e515fdc02cdafbe4593e30a9350d486b125b67", - "reference": "32e515fdc02cdafbe4593e30a9350d486b125b67", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "psr/log": "^2.0 || ^3.0" - }, - "provide": { - "psr/log-implementation": "3.0.0" - }, - "require-dev": { - "aws/aws-sdk-php": "^3.0", - "doctrine/couchdb": "~1.0@dev", - "elasticsearch/elasticsearch": "^7 || ^8", - "ext-json": "*", - "graylog2/gelf-php": "^1.4.2 || ^2.0", - "guzzlehttp/guzzle": "^7.4.5", - "guzzlehttp/psr7": "^2.2", - "mongodb/mongodb": "^1.8", - "php-amqplib/php-amqplib": "~2.4 || ^3", - "php-console/php-console": "^3.1.8", - "phpstan/phpstan": "^2", - "phpstan/phpstan-deprecation-rules": "^2", - "phpstan/phpstan-strict-rules": "^2", - "phpunit/phpunit": "^10.5.17 || ^11.0.7", - "predis/predis": "^1.1 || ^2", - "rollbar/rollbar": "^4.0", - "ruflin/elastica": "^7 || ^8", - "symfony/mailer": "^5.4 || ^6", - "symfony/mime": "^5.4 || ^6" - }, - "suggest": { - "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", - "doctrine/couchdb": "Allow sending log messages to a CouchDB server", - "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", - "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", - "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", - "ext-mbstring": "Allow to work properly with unicode symbols", - "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", - "ext-openssl": "Required to send log messages using SSL", - "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", - "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", - "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", - "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", - "rollbar/rollbar": "Allow sending log messages to Rollbar", - "ruflin/elastica": "Allow sending log messages to an Elastic Search server" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Monolog\\": "src/Monolog" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "https://seld.be" - } - ], - "description": "Sends your logs to files, sockets, inboxes, databases and various web services", - "homepage": "https://github.com/Seldaek/monolog", - "keywords": [ - "log", - "logging", - "psr-3" - ], - "support": { - "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.8.0" - }, - "funding": [ - { - "url": "https://github.com/Seldaek", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", - "type": "tidelift" - } - ], - "time": "2024-11-12T13:57:08+00:00" - }, - { - "name": "mtdowling/jmespath.php", - "version": "2.8.0", - "source": { - "type": "git", - "url": "https://github.com/jmespath/jmespath.php.git", - "reference": "a2a865e05d5f420b50cc2f85bb78d565db12a6bc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/a2a865e05d5f420b50cc2f85bb78d565db12a6bc", - "reference": "a2a865e05d5f420b50cc2f85bb78d565db12a6bc", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0", - "symfony/polyfill-mbstring": "^1.17" - }, - "require-dev": { - "composer/xdebug-handler": "^3.0.3", - "phpunit/phpunit": "^8.5.33" - }, - "bin": [ - "bin/jp.php" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.8-dev" - } - }, - "autoload": { - "files": [ - "src/JmesPath.php" - ], - "psr-4": { - "JmesPath\\": "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" - } - ], - "description": "Declaratively specify how to extract elements from a JSON document", - "keywords": [ - "json", - "jsonpath" - ], - "support": { - "issues": "https://github.com/jmespath/jmespath.php/issues", - "source": "https://github.com/jmespath/jmespath.php/tree/2.8.0" - }, - "time": "2024-09-04T18:46:31+00:00" - }, - { - "name": "nesbot/carbon", - "version": "3.8.2", - "source": { - "type": "git", - "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "e1268cdbc486d97ce23fef2c666dc3c6b6de9947" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/e1268cdbc486d97ce23fef2c666dc3c6b6de9947", - "reference": "e1268cdbc486d97ce23fef2c666dc3c6b6de9947", - "shasum": "" - }, - "require": { - "carbonphp/carbon-doctrine-types": "<100.0", - "ext-json": "*", - "php": "^8.1", - "psr/clock": "^1.0", - "symfony/clock": "^6.3 || ^7.0", - "symfony/polyfill-mbstring": "^1.0", - "symfony/translation": "^4.4.18 || ^5.2.1|| ^6.0 || ^7.0" - }, - "provide": { - "psr/clock-implementation": "1.0" - }, - "require-dev": { - "doctrine/dbal": "^3.6.3 || ^4.0", - "doctrine/orm": "^2.15.2 || ^3.0", - "friendsofphp/php-cs-fixer": "^3.57.2", - "kylekatarnls/multi-tester": "^2.5.3", - "ondrejmirtes/better-reflection": "^6.25.0.4", - "phpmd/phpmd": "^2.15.0", - "phpstan/extension-installer": "^1.3.1", - "phpstan/phpstan": "^1.11.2", - "phpunit/phpunit": "^10.5.20", - "squizlabs/php_codesniffer": "^3.9.0" - }, - "bin": [ - "bin/carbon" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev", - "dev-2.x": "2.x-dev" - }, - "laravel": { - "providers": [ - "Carbon\\Laravel\\ServiceProvider" - ] - }, - "phpstan": { - "includes": [ - "extension.neon" - ] - } - }, - "autoload": { - "psr-4": { - "Carbon\\": "src/Carbon/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Brian Nesbitt", - "email": "brian@nesbot.com", - "homepage": "https://markido.com" - }, - { - "name": "kylekatarnls", - "homepage": "https://github.com/kylekatarnls" - } - ], - "description": "An API extension for DateTime that supports 281 different languages.", - "homepage": "https://carbon.nesbot.com", - "keywords": [ - "date", - "datetime", - "time" - ], - "support": { - "docs": "https://carbon.nesbot.com/docs", - "issues": "https://github.com/briannesbitt/Carbon/issues", - "source": "https://github.com/briannesbitt/Carbon" - }, - "funding": [ - { - "url": "https://github.com/sponsors/kylekatarnls", - "type": "github" - }, - { - "url": "https://opencollective.com/Carbon#sponsor", - "type": "opencollective" - }, - { - "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme", - "type": "tidelift" - } - ], - "time": "2024-11-07T17:46:48+00:00" - }, - { - "name": "nette/schema", - "version": "v1.3.2", - "source": { - "type": "git", - "url": "https://github.com/nette/schema.git", - "reference": "da801d52f0354f70a638673c4a0f04e16529431d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/schema/zipball/da801d52f0354f70a638673c4a0f04e16529431d", - "reference": "da801d52f0354f70a638673c4a0f04e16529431d", - "shasum": "" - }, - "require": { - "nette/utils": "^4.0", - "php": "8.1 - 8.4" - }, - "require-dev": { - "nette/tester": "^2.5.2", - "phpstan/phpstan-nette": "^1.0", - "tracy/tracy": "^2.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0-only", - "GPL-3.0-only" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "📐 Nette Schema: validating data structures against a given Schema.", - "homepage": "https://nette.org", - "keywords": [ - "config", - "nette" - ], - "support": { - "issues": "https://github.com/nette/schema/issues", - "source": "https://github.com/nette/schema/tree/v1.3.2" - }, - "time": "2024-10-06T23:10:23+00:00" - }, - { - "name": "nette/utils", - "version": "v4.0.5", - "source": { - "type": "git", - "url": "https://github.com/nette/utils.git", - "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/736c567e257dbe0fcf6ce81b4d6dbe05c6899f96", - "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96", - "shasum": "" - }, - "require": { - "php": "8.0 - 8.4" - }, - "conflict": { - "nette/finder": "<3", - "nette/schema": "<1.2.2" - }, - "require-dev": { - "jetbrains/phpstorm-attributes": "dev-master", - "nette/tester": "^2.5", - "phpstan/phpstan": "^1.0", - "tracy/tracy": "^2.9" - }, - "suggest": { - "ext-gd": "to use Image", - "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", - "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", - "ext-json": "to use Nette\\Utils\\Json", - "ext-mbstring": "to use Strings::lower() etc...", - "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0-only", - "GPL-3.0-only" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", - "homepage": "https://nette.org", - "keywords": [ - "array", - "core", - "datetime", - "images", - "json", - "nette", - "paginator", - "password", - "slugify", - "string", - "unicode", - "utf-8", - "utility", - "validation" - ], - "support": { - "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v4.0.5" - }, - "time": "2024-08-07T15:39:19+00:00" - }, - { - "name": "nikic/php-parser", - "version": "v5.3.1", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/8eea230464783aa9671db8eea6f8c6ac5285794b", - "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "ext-json": "*", - "ext-tokenizer": "*", - "php": ">=7.4" - }, - "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^9.0" - }, - "bin": [ - "bin/php-parse" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], - "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.3.1" - }, - "time": "2024-10-08T18:51:32+00:00" - }, - { - "name": "nunomaduro/termwind", - "version": "v2.3.0", - "source": { - "type": "git", - "url": "https://github.com/nunomaduro/termwind.git", - "reference": "52915afe6a1044e8b9cee1bcff836fb63acf9cda" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/52915afe6a1044e8b9cee1bcff836fb63acf9cda", - "reference": "52915afe6a1044e8b9cee1bcff836fb63acf9cda", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "php": "^8.2", - "symfony/console": "^7.1.8" - }, - "require-dev": { - "illuminate/console": "^11.33.2", - "laravel/pint": "^1.18.2", - "mockery/mockery": "^1.6.12", - "pestphp/pest": "^2.36.0", - "phpstan/phpstan": "^1.12.11", - "phpstan/phpstan-strict-rules": "^1.6.1", - "symfony/var-dumper": "^7.1.8", - "thecodingmachine/phpstan-strict-rules": "^1.0.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Termwind\\Laravel\\TermwindServiceProvider" - ] - }, - "branch-alias": { - "dev-2.x": "2.x-dev" - } - }, - "autoload": { - "files": [ - "src/Functions.php" - ], - "psr-4": { - "Termwind\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" - } - ], - "description": "Its like Tailwind CSS, but for the console.", - "keywords": [ - "cli", - "console", - "css", - "package", - "php", - "style" - ], - "support": { - "issues": "https://github.com/nunomaduro/termwind/issues", - "source": "https://github.com/nunomaduro/termwind/tree/v2.3.0" - }, - "funding": [ - { - "url": "https://www.paypal.com/paypalme/enunomaduro", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - }, - { - "url": "https://github.com/xiCO2k", - "type": "github" - } - ], - "time": "2024-11-21T10:39:51+00:00" - }, - { - "name": "openspout/openspout", - "version": "v4.28.0", - "source": { - "type": "git", - "url": "https://github.com/openspout/openspout.git", - "reference": "3e9ef74f13ba5e887e4afc7a4e0110e63559e902" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/openspout/openspout/zipball/3e9ef74f13ba5e887e4afc7a4e0110e63559e902", - "reference": "3e9ef74f13ba5e887e4afc7a4e0110e63559e902", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-fileinfo": "*", - "ext-filter": "*", - "ext-libxml": "*", - "ext-xmlreader": "*", - "ext-zip": "*", - "php": "~8.2.0 || ~8.3.0 || ~8.4.0" - }, - "require-dev": { - "ext-zlib": "*", - "friendsofphp/php-cs-fixer": "^3.65.0", - "infection/infection": "^0.29.8", - "phpbench/phpbench": "^1.3.1", - "phpstan/phpstan": "^2.0.3", - "phpstan/phpstan-phpunit": "^2.0.1", - "phpstan/phpstan-strict-rules": "^2", - "phpunit/phpunit": "^11.4.4" - }, - "suggest": { - "ext-iconv": "To handle non UTF-8 CSV files (if \"php-mbstring\" is not already installed or is too limited)", - "ext-mbstring": "To handle non UTF-8 CSV files (if \"iconv\" is not already installed)" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.3.x-dev" - } - }, - "autoload": { - "psr-4": { - "OpenSpout\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Adrien Loison", - "email": "adrien@box.com" - } - ], - "description": "PHP Library to read and write spreadsheet files (CSV, XLSX and ODS), in a fast and scalable way", - "homepage": "https://github.com/openspout/openspout", - "keywords": [ - "OOXML", - "csv", - "excel", - "memory", - "odf", - "ods", - "office", - "open", - "php", - "read", - "scale", - "spreadsheet", - "stream", - "write", - "xlsx" - ], - "support": { - "issues": "https://github.com/openspout/openspout/issues", - "source": "https://github.com/openspout/openspout/tree/v4.28.0" - }, - "funding": [ - { - "url": "https://paypal.me/filippotessarotto", - "type": "custom" - }, - { - "url": "https://github.com/Slamdunk", - "type": "github" - } - ], - "time": "2024-11-29T09:45:53+00:00" - }, - { - "name": "phpoffice/phpspreadsheet", - "version": "1.29.6", - "source": { - "type": "git", - "url": "https://github.com/PHPOffice/PhpSpreadsheet.git", - "reference": "08597725b84570cd6f32bf0ea92e75a803ef28c2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/08597725b84570cd6f32bf0ea92e75a803ef28c2", - "reference": "08597725b84570cd6f32bf0ea92e75a803ef28c2", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "ext-dom": "*", - "ext-fileinfo": "*", - "ext-gd": "*", - "ext-iconv": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-simplexml": "*", - "ext-xml": "*", - "ext-xmlreader": "*", - "ext-xmlwriter": "*", - "ext-zip": "*", - "ext-zlib": "*", - "ezyang/htmlpurifier": "^4.15", - "maennchen/zipstream-php": "^2.1 || ^3.0", - "markbaker/complex": "^3.0", - "markbaker/matrix": "^3.0", - "php": "^7.4 || ^8.0", - "psr/http-client": "^1.0", - "psr/http-factory": "^1.0", - "psr/simple-cache": "^1.0 || ^2.0 || ^3.0" - }, - "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "dev-main", - "dompdf/dompdf": "^1.0 || ^2.0 || ^3.0", - "friendsofphp/php-cs-fixer": "^3.2", - "mitoteam/jpgraph": "^10.3", - "mpdf/mpdf": "^8.1.1", - "phpcompatibility/php-compatibility": "^9.3", - "phpstan/phpstan": "^1.1", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^8.5 || ^9.0", - "squizlabs/php_codesniffer": "^3.7", - "tecnickcom/tcpdf": "^6.5" - }, - "suggest": { - "dompdf/dompdf": "Option for rendering PDF with PDF Writer", - "ext-intl": "PHP Internationalization Functions", - "mitoteam/jpgraph": "Option for rendering charts, or including charts with PDF or HTML Writers", - "mpdf/mpdf": "Option for rendering PDF with PDF Writer", - "tecnickcom/tcpdf": "Option for rendering PDF with PDF Writer" - }, - "type": "library", - "autoload": { - "psr-4": { - "PhpOffice\\PhpSpreadsheet\\": "src/PhpSpreadsheet" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Maarten Balliauw", - "homepage": "https://blog.maartenballiauw.be" - }, - { - "name": "Mark Baker", - "homepage": "https://markbakeruk.net" - }, - { - "name": "Franck Lefevre", - "homepage": "https://rootslabs.net" - }, - { - "name": "Erik Tilt" - }, - { - "name": "Adrien Crivelli" - } - ], - "description": "PHPSpreadsheet - Read, Create and Write Spreadsheet documents in PHP - Spreadsheet engine", - "homepage": "https://github.com/PHPOffice/PhpSpreadsheet", - "keywords": [ - "OpenXML", - "excel", - "gnumeric", - "ods", - "php", - "spreadsheet", - "xls", - "xlsx" - ], - "support": { - "issues": "https://github.com/PHPOffice/PhpSpreadsheet/issues", - "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/1.29.6" - }, - "time": "2024-12-08T05:49:00+00:00" - }, - { - "name": "phpoption/phpoption", - "version": "1.9.3", - "source": { - "type": "git", - "url": "https://github.com/schmittjoh/php-option.git", - "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/e3fac8b24f56113f7cb96af14958c0dd16330f54", - "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - }, - "branch-alias": { - "dev-master": "1.9-dev" - } - }, - "autoload": { - "psr-4": { - "PhpOption\\": "src/PhpOption/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Johannes M. Schmitt", - "email": "schmittjoh@gmail.com", - "homepage": "https://github.com/schmittjoh" - }, - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - } - ], - "description": "Option Type for PHP", - "keywords": [ - "language", - "option", - "php", - "type" - ], - "support": { - "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.9.3" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", - "type": "tidelift" - } - ], - "time": "2024-07-20T21:41:07+00:00" - }, - { - "name": "predis/predis", - "version": "v2.3.0", - "source": { - "type": "git", - "url": "https://github.com/predis/predis.git", - "reference": "bac46bfdb78cd6e9c7926c697012aae740cb9ec9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/predis/predis/zipball/bac46bfdb78cd6e9c7926c697012aae740cb9ec9", - "reference": "bac46bfdb78cd6e9c7926c697012aae740cb9ec9", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3.3", - "phpstan/phpstan": "^1.9", - "phpunit/phpunit": "^8.0 || ^9.4" - }, - "suggest": { - "ext-relay": "Faster connection with in-memory caching (>=0.6.2)" - }, - "type": "library", - "autoload": { - "psr-4": { - "Predis\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Till Krüss", - "homepage": "https://till.im", - "role": "Maintainer" - } - ], - "description": "A flexible and feature-complete Redis client for PHP.", - "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/v2.3.0" - }, - "funding": [ - { - "url": "https://github.com/sponsors/tillkruss", - "type": "github" - } - ], - "time": "2024-11-21T20:00:02+00:00" - }, - { - "name": "psr/cache", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/cache.git", - "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", - "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", - "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/3.0.0" - }, - "time": "2021-02-03T23:26:27+00:00" - }, - { - "name": "psr/clock", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/clock.git", - "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", - "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", - "shasum": "" - }, - "require": { - "php": "^7.0 || ^8.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Psr\\Clock\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for reading the clock.", - "homepage": "https://github.com/php-fig/clock", - "keywords": [ - "clock", - "now", - "psr", - "psr-20", - "time" - ], - "support": { - "issues": "https://github.com/php-fig/clock/issues", - "source": "https://github.com/php-fig/clock/tree/1.0.0" - }, - "time": "2022-11-25T14:36:26+00:00" - }, - { - "name": "psr/container", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", - "shasum": "" - }, - "require": { - "php": ">=7.4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", - "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" - ], - "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/2.0.2" - }, - "time": "2021-11-05T16:47:00+00:00" - }, - { - "name": "psr/event-dispatcher", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/event-dispatcher.git", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", - "shasum": "" - }, - "require": { - "php": ">=7.2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\EventDispatcher\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Standard interfaces for event handling.", - "keywords": [ - "events", - "psr", - "psr-14" - ], - "support": { - "issues": "https://github.com/php-fig/event-dispatcher/issues", - "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" - }, - "time": "2019-01-08T18:20:26+00:00" - }, - { - "name": "psr/http-client", - "version": "1.0.3", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-client.git", - "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", - "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", - "shasum": "" - }, - "require": { - "php": "^7.0 || ^8.0", - "psr/http-message": "^1.0 || ^2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Client\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP clients", - "homepage": "https://github.com/php-fig/http-client", - "keywords": [ - "http", - "http-client", - "psr", - "psr-18" - ], - "support": { - "source": "https://github.com/php-fig/http-client" - }, - "time": "2023-09-23T14:17:50+00:00" - }, - { - "name": "psr/http-factory", - "version": "1.1.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-factory.git", - "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", - "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", - "shasum": "" - }, - "require": { - "php": ">=7.1", - "psr/http-message": "^1.0 || ^2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", - "keywords": [ - "factory", - "http", - "message", - "psr", - "psr-17", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-factory" - }, - "time": "2024-04-15T12:06:14+00:00" - }, - { - "name": "psr/http-message", - "version": "2.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", - "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-message/tree/2.0" - }, - "time": "2023-04-04T09:54:51+00:00" - }, - { - "name": "psr/log", - "version": "3.0.2", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", - "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", - "shasum": "" - }, - "require": { - "php": ">=8.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Log\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "support": { - "source": "https://github.com/php-fig/log/tree/3.0.2" - }, - "time": "2024-09-11T13:17:53+00:00" - }, - { - "name": "psr/simple-cache", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/simple-cache.git", - "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", - "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", - "shasum": "" - }, - "require": { - "php": ">=8.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\SimpleCache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interfaces for simple caching", - "keywords": [ - "cache", - "caching", - "psr", - "psr-16", - "simple-cache" - ], - "support": { - "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" - }, - "time": "2021-10-29T13:26:27+00:00" - }, - { - "name": "psy/psysh", - "version": "v0.12.5", - "source": { - "type": "git", - "url": "https://github.com/bobthecow/psysh.git", - "reference": "36a03ff27986682c22985e56aabaf840dd173cb5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/36a03ff27986682c22985e56aabaf840dd173cb5", - "reference": "36a03ff27986682c22985e56aabaf840dd173cb5", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-tokenizer": "*", - "nikic/php-parser": "^5.0 || ^4.0", - "php": "^8.0 || ^7.4", - "symfony/console": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4", - "symfony/var-dumper": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4" - }, - "conflict": { - "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.2" - }, - "suggest": { - "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", - "ext-pdo-sqlite": "The doc command requires SQLite to work.", - "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well." - }, - "bin": [ - "bin/psysh" - ], - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": false, - "forward-command": false - }, - "branch-alias": { - "dev-main": "0.12.x-dev" - } - }, - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Psy\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Justin Hileman", - "email": "justin@justinhileman.info", - "homepage": "http://justinhileman.com" - } - ], - "description": "An interactive shell for modern PHP.", - "homepage": "http://psysh.org", - "keywords": [ - "REPL", - "console", - "interactive", - "shell" - ], - "support": { - "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.12.5" - }, - "time": "2024-11-29T06:14:30+00:00" - }, - { - "name": "ralouphie/getallheaders", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/ralouphie/getallheaders.git", - "reference": "120b605dfeb996808c31b6477290a714d356e822" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", - "reference": "120b605dfeb996808c31b6477290a714d356e822", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^5 || ^6.5" - }, - "type": "library", - "autoload": { - "files": [ - "src/getallheaders.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ralph Khattar", - "email": "ralph.khattar@gmail.com" - } - ], - "description": "A polyfill for getallheaders.", - "support": { - "issues": "https://github.com/ralouphie/getallheaders/issues", - "source": "https://github.com/ralouphie/getallheaders/tree/develop" - }, - "time": "2019-03-08T08:55:37+00:00" - }, - { - "name": "ramsey/collection", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/ramsey/collection.git", - "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ramsey/collection/zipball/a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", - "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "captainhook/plugin-composer": "^5.3", - "ergebnis/composer-normalize": "^2.28.3", - "fakerphp/faker": "^1.21", - "hamcrest/hamcrest-php": "^2.0", - "jangregor/phpstan-prophecy": "^1.0", - "mockery/mockery": "^1.5", - "php-parallel-lint/php-console-highlighter": "^1.0", - "php-parallel-lint/php-parallel-lint": "^1.3", - "phpcsstandards/phpcsutils": "^1.0.0-rc1", - "phpspec/prophecy-phpunit": "^2.0", - "phpstan/extension-installer": "^1.2", - "phpstan/phpstan": "^1.9", - "phpstan/phpstan-mockery": "^1.1", - "phpstan/phpstan-phpunit": "^1.3", - "phpunit/phpunit": "^9.5", - "psalm/plugin-mockery": "^1.1", - "psalm/plugin-phpunit": "^0.18.4", - "ramsey/coding-standard": "^2.0.3", - "ramsey/conventional-commits": "^1.3", - "vimeo/psalm": "^5.4" - }, - "type": "library", - "extra": { - "captainhook": { - "force-install": true - }, - "ramsey/conventional-commits": { - "configFile": "conventional-commits.json" - } - }, - "autoload": { - "psr-4": { - "Ramsey\\Collection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ben Ramsey", - "email": "ben@benramsey.com", - "homepage": "https://benramsey.com" - } - ], - "description": "A PHP library for representing and manipulating collections.", - "keywords": [ - "array", - "collection", - "hash", - "map", - "queue", - "set" - ], - "support": { - "issues": "https://github.com/ramsey/collection/issues", - "source": "https://github.com/ramsey/collection/tree/2.0.0" - }, - "funding": [ - { - "url": "https://github.com/ramsey", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", - "type": "tidelift" - } - ], - "time": "2022-12-31T21:50:55+00:00" - }, - { - "name": "ramsey/uuid", - "version": "4.7.6", - "source": { - "type": "git", - "url": "https://github.com/ramsey/uuid.git", - "reference": "91039bc1faa45ba123c4328958e620d382ec7088" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/91039bc1faa45ba123c4328958e620d382ec7088", - "reference": "91039bc1faa45ba123c4328958e620d382ec7088", - "shasum": "" - }, - "require": { - "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12", - "ext-json": "*", - "php": "^8.0", - "ramsey/collection": "^1.2 || ^2.0" - }, - "replace": { - "rhumsaa/uuid": "self.version" - }, - "require-dev": { - "captainhook/captainhook": "^5.10", - "captainhook/plugin-composer": "^5.3", - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", - "doctrine/annotations": "^1.8", - "ergebnis/composer-normalize": "^2.15", - "mockery/mockery": "^1.3", - "paragonie/random-lib": "^2", - "php-mock/php-mock": "^2.2", - "php-mock/php-mock-mockery": "^1.3", - "php-parallel-lint/php-parallel-lint": "^1.1", - "phpbench/phpbench": "^1.0", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-mockery": "^1.1", - "phpstan/phpstan-phpunit": "^1.1", - "phpunit/phpunit": "^8.5 || ^9", - "ramsey/composer-repl": "^1.4", - "slevomat/coding-standard": "^8.4", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^4.9" - }, - "suggest": { - "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", - "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", - "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", - "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", - "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." - }, - "type": "library", - "extra": { - "captainhook": { - "force-install": true - } - }, - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Ramsey\\Uuid\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", - "keywords": [ - "guid", - "identifier", - "uuid" - ], - "support": { - "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.7.6" - }, - "funding": [ - { - "url": "https://github.com/ramsey", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid", - "type": "tidelift" - } - ], - "time": "2024-04-27T21:32:50+00:00" - }, - { - "name": "ryangjchandler/blade-capture-directive", - "version": "v1.0.0", - "source": { - "type": "git", - "url": "https://github.com/ryangjchandler/blade-capture-directive.git", - "reference": "cb6f58663d97f17bece176295240b740835e14f1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ryangjchandler/blade-capture-directive/zipball/cb6f58663d97f17bece176295240b740835e14f1", - "reference": "cb6f58663d97f17bece176295240b740835e14f1", - "shasum": "" - }, - "require": { - "illuminate/contracts": "^10.0|^11.0", - "php": "^8.1", - "spatie/laravel-package-tools": "^1.9.2" - }, - "require-dev": { - "nunomaduro/collision": "^7.0|^8.0", - "nunomaduro/larastan": "^2.0", - "orchestra/testbench": "^8.0|^9.0", - "pestphp/pest": "^2.0", - "pestphp/pest-plugin-laravel": "^2.0", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^10.0", - "spatie/laravel-ray": "^1.26" - }, - "type": "library", - "extra": { - "laravel": { - "aliases": { - "BladeCaptureDirective": "RyanChandler\\BladeCaptureDirective\\Facades\\BladeCaptureDirective" - }, - "providers": [ - "RyanChandler\\BladeCaptureDirective\\BladeCaptureDirectiveServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "RyanChandler\\BladeCaptureDirective\\": "src", - "RyanChandler\\BladeCaptureDirective\\Database\\Factories\\": "database/factories" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ryan Chandler", - "email": "support@ryangjchandler.co.uk", - "role": "Developer" - } - ], - "description": "Create inline partials in your Blade templates with ease.", - "homepage": "https://github.com/ryangjchandler/blade-capture-directive", - "keywords": [ - "blade-capture-directive", - "laravel", - "ryangjchandler" - ], - "support": { - "issues": "https://github.com/ryangjchandler/blade-capture-directive/issues", - "source": "https://github.com/ryangjchandler/blade-capture-directive/tree/v1.0.0" - }, - "funding": [ - { - "url": "https://github.com/ryangjchandler", - "type": "github" - } - ], - "time": "2024-02-26T18:08:49+00:00" - }, - { - "name": "saade/filament-fullcalendar", - "version": "v3.2.2", - "source": { - "type": "git", - "url": "https://github.com/saade/filament-fullcalendar.git", - "reference": "d40410e6bc46057628fb9fa8f62b6090452914d3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/saade/filament-fullcalendar/zipball/d40410e6bc46057628fb9fa8f62b6090452914d3", - "reference": "d40410e6bc46057628fb9fa8f62b6090452914d3", - "shasum": "" - }, - "require": { - "filament/filament": "^3.0", - "illuminate/contracts": "^10.0|^11.0", - "php": "^8.1", - "spatie/laravel-package-tools": "^1.13.5" - }, - "require-dev": { - "nunomaduro/collision": "^7.0|^8.0", - "nunomaduro/larastan": "^2.0", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-phpunit": "^1.0", - "spatie/laravel-ray": "^1.26" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Saade\\FilamentFullCalendar\\FilamentFullCalendarServiceProvider" - ] - } - }, - "autoload": { - "files": [ - "src/helpers.php" - ], - "psr-4": { - "Saade\\FilamentFullCalendar\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Saade", - "email": "saade@outlook.com.br", - "role": "Developer" - } - ], - "description": "The Most Popular JavaScript Calendar integrated with Filament 💛", - "homepage": "https://github.com/saade/filament-fullcalendar", - "keywords": [ - "filament-fullcalendar", - "laravel", - "saade" - ], - "support": { - "issues": "https://github.com/saade/filament-fullcalendar/issues", - "source": "https://github.com/saade/filament-fullcalendar/tree/v3.2.2" - }, - "funding": [ - { - "url": "https://github.com/saade", - "type": "github" - } - ], - "time": "2024-05-02T13:04:39+00:00" - }, - { - "name": "spatie/color", - "version": "1.6.1", - "source": { - "type": "git", - "url": "https://github.com/spatie/color.git", - "reference": "4c540ffbef68a3df3d209718ae06deaab081e708" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/color/zipball/4c540ffbef68a3df3d209718ae06deaab081e708", - "reference": "4c540ffbef68a3df3d209718ae06deaab081e708", - "shasum": "" - }, - "require": { - "php": "^7.3|^8.0" - }, - "require-dev": { - "pestphp/pest": "^1.22", - "phpunit/phpunit": "^6.5||^9.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Spatie\\Color\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Sebastian De Deyne", - "email": "sebastian@spatie.be", - "homepage": "https://spatie.be", - "role": "Developer" - } - ], - "description": "A little library to handle color conversions", - "homepage": "https://github.com/spatie/color", - "keywords": [ - "color", - "conversion", - "rgb", - "spatie" - ], - "support": { - "issues": "https://github.com/spatie/color/issues", - "source": "https://github.com/spatie/color/tree/1.6.1" - }, - "funding": [ - { - "url": "https://github.com/spatie", - "type": "github" - } - ], - "time": "2024-11-18T15:00:47+00:00" - }, - { - "name": "spatie/invade", - "version": "2.1.0", - "source": { - "type": "git", - "url": "https://github.com/spatie/invade.git", - "reference": "b920f6411d21df4e8610a138e2e87ae4957d7f63" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/invade/zipball/b920f6411d21df4e8610a138e2e87ae4957d7f63", - "reference": "b920f6411d21df4e8610a138e2e87ae4957d7f63", - "shasum": "" - }, - "require": { - "php": "^8.0" - }, - "require-dev": { - "pestphp/pest": "^1.20", - "phpstan/phpstan": "^1.4", - "spatie/ray": "^1.28" - }, - "type": "library", - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Spatie\\Invade\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Freek Van der Herten", - "email": "freek@spatie.be", - "role": "Developer" - } - ], - "description": "A PHP function to work with private properties and methods", - "homepage": "https://github.com/spatie/invade", - "keywords": [ - "invade", - "spatie" - ], - "support": { - "source": "https://github.com/spatie/invade/tree/2.1.0" - }, - "funding": [ - { - "url": "https://github.com/spatie", - "type": "github" - } - ], - "time": "2024-05-17T09:06:10+00:00" - }, - { - "name": "spatie/laravel-package-tools", - "version": "1.16.6", - "source": { - "type": "git", - "url": "https://github.com/spatie/laravel-package-tools.git", - "reference": "1f26942dc1e5c49eacfced34fdbc29ed234bd7b3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/1f26942dc1e5c49eacfced34fdbc29ed234bd7b3", - "reference": "1f26942dc1e5c49eacfced34fdbc29ed234bd7b3", - "shasum": "" - }, - "require": { - "illuminate/contracts": "^9.28|^10.0|^11.0", - "php": "^8.0" - }, - "require-dev": { - "mockery/mockery": "^1.5", - "orchestra/testbench": "^7.7|^8.0", - "pestphp/pest": "^1.22", - "phpunit/phpunit": "^9.5.24", - "spatie/pest-plugin-test-time": "^1.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "Spatie\\LaravelPackageTools\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Freek Van der Herten", - "email": "freek@spatie.be", - "role": "Developer" - } - ], - "description": "Tools for creating Laravel packages", - "homepage": "https://github.com/spatie/laravel-package-tools", - "keywords": [ - "laravel-package-tools", - "spatie" - ], - "support": { - "issues": "https://github.com/spatie/laravel-package-tools/issues", - "source": "https://github.com/spatie/laravel-package-tools/tree/1.16.6" - }, - "funding": [ - { - "url": "https://github.com/spatie", - "type": "github" - } - ], - "time": "2024-11-18T15:02:02+00:00" - }, - { - "name": "spatie/laravel-permission", - "version": "6.10.1", - "source": { - "type": "git", - "url": "https://github.com/spatie/laravel-permission.git", - "reference": "8bb69d6d67387f7a00d93a2f5fab98860f06e704" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-permission/zipball/8bb69d6d67387f7a00d93a2f5fab98860f06e704", - "reference": "8bb69d6d67387f7a00d93a2f5fab98860f06e704", - "shasum": "" - }, - "require": { - "illuminate/auth": "^8.12|^9.0|^10.0|^11.0", - "illuminate/container": "^8.12|^9.0|^10.0|^11.0", - "illuminate/contracts": "^8.12|^9.0|^10.0|^11.0", - "illuminate/database": "^8.12|^9.0|^10.0|^11.0", - "php": "^8.0" - }, - "require-dev": { - "larastan/larastan": "^1.0|^2.0", - "laravel/passport": "^11.0|^12.0", - "orchestra/testbench": "^6.23|^7.0|^8.0|^9.0", - "phpunit/phpunit": "^9.4|^10.1" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Spatie\\Permission\\PermissionServiceProvider" - ] - }, - "branch-alias": { - "dev-main": "6.x-dev", - "dev-master": "6.x-dev" - } - }, - "autoload": { - "files": [ - "src/helpers.php" - ], - "psr-4": { - "Spatie\\Permission\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Freek Van der Herten", - "email": "freek@spatie.be", - "homepage": "https://spatie.be", - "role": "Developer" - } - ], - "description": "Permission handling for Laravel 8.0 and up", - "homepage": "https://github.com/spatie/laravel-permission", - "keywords": [ - "acl", - "laravel", - "permission", - "permissions", - "rbac", - "roles", - "security", - "spatie" - ], - "support": { - "issues": "https://github.com/spatie/laravel-permission/issues", - "source": "https://github.com/spatie/laravel-permission/tree/6.10.1" - }, - "funding": [ - { - "url": "https://github.com/spatie", - "type": "github" - } - ], - "time": "2024-11-08T18:45:41+00:00" - }, - { - "name": "symfony/clock", - "version": "v7.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/clock.git", - "reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/clock/zipball/b81435fbd6648ea425d1ee96a2d8e68f4ceacd24", - "reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "psr/clock": "^1.0", - "symfony/polyfill-php83": "^1.28" - }, - "provide": { - "psr/clock-implementation": "1.0" - }, - "type": "library", - "autoload": { - "files": [ - "Resources/now.php" - ], - "psr-4": { - "Symfony\\Component\\Clock\\": "" - }, - "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": "Decouples applications from the system clock", - "homepage": "https://symfony.com", - "keywords": [ - "clock", - "psr20", - "time" - ], - "support": { - "source": "https://github.com/symfony/clock/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/console", - "version": "v7.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", - "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/polyfill-mbstring": "~1.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^6.4|^7.0" - }, - "conflict": { - "symfony/dependency-injection": "<6.4", - "symfony/dotenv": "<6.4", - "symfony/event-dispatcher": "<6.4", - "symfony/lock": "<6.4", - "symfony/process": "<6.4" - }, - "provide": { - "psr/log-implementation": "1.0|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/event-dispatcher": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/lock": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0", - "symfony/stopwatch": "^6.4|^7.0", - "symfony/var-dumper": "^6.4|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Eases the creation of beautiful and testable command line interfaces", - "homepage": "https://symfony.com", - "keywords": [ - "cli", - "command-line", - "console", - "terminal" - ], - "support": { - "source": "https://github.com/symfony/console/tree/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-11-06T14:24:19+00:00" - }, - { - "name": "symfony/css-selector", - "version": "v7.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/css-selector.git", - "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/601a5ce9aaad7bf10797e3663faefce9e26c24e2", - "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\CssSelector\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Jean-François Simon", - "email": "jeanfrancois.simon@sensiolabs.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Converts CSS selectors to XPath expressions", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/css-selector/tree/v7.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/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": { - "branch-alias": { - "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "files": [ - "function.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "A generic function and convention to trigger deprecation notices", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.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/error-handler", - "version": "v7.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/error-handler.git", - "reference": "672b3dd1ef8b87119b446d67c58c106c43f965fe" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/672b3dd1ef8b87119b446d67c58c106c43f965fe", - "reference": "672b3dd1ef8b87119b446d67c58c106c43f965fe", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^6.4|^7.0" - }, - "conflict": { - "symfony/deprecation-contracts": "<2.5", - "symfony/http-kernel": "<6.4" - }, - "require-dev": { - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/serializer": "^6.4|^7.0" - }, - "bin": [ - "Resources/bin/patch-type-declarations" - ], - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\ErrorHandler\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides tools to manage errors and ease debugging PHP code", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/error-handler/tree/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-11-05T15:35:02+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": { - "branch-alias": { - "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\EventDispatcher\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to dispatching event", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.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/finder", - "version": "v7.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "6de263e5868b9a137602dd1e33e4d48bfae99c49" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/6de263e5868b9a137602dd1e33e4d48bfae99c49", - "reference": "6de263e5868b9a137602dd1e33e4d48bfae99c49", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "symfony/filesystem": "^6.4|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Finds files and directories via an intuitive fluent interface", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/finder/tree/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-23T06:56:12+00:00" - }, - { - "name": "symfony/html-sanitizer", - "version": "v7.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/html-sanitizer.git", - "reference": "1d23de45af5e8508441ff5f82bb493e83cdcbba4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/html-sanitizer/zipball/1d23de45af5e8508441ff5f82bb493e83cdcbba4", - "reference": "1d23de45af5e8508441ff5f82bb493e83cdcbba4", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "league/uri": "^6.5|^7.0", - "masterminds/html5": "^2.7.2", - "php": ">=8.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\HtmlSanitizer\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Titouan Galopin", - "email": "galopintitouan@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides an object-oriented API to sanitize untrusted HTML input for safe insertion into a document's DOM.", - "homepage": "https://symfony.com", - "keywords": [ - "Purifier", - "html", - "sanitizer" - ], - "support": { - "source": "https://github.com/symfony/html-sanitizer/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/http-foundation", - "version": "v7.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-foundation.git", - "reference": "e88a66c3997859532bc2ddd6dd8f35aba2711744" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e88a66c3997859532bc2ddd6dd8f35aba2711744", - "reference": "e88a66c3997859532bc2ddd6dd8f35aba2711744", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3.0", - "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php83": "^1.27" - }, - "conflict": { - "doctrine/dbal": "<3.6", - "symfony/cache": "<6.4.12|>=7.0,<7.1.5" - }, - "require-dev": { - "doctrine/dbal": "^3.6|^4", - "predis/predis": "^1.1|^2.0", - "symfony/cache": "^6.4.12|^7.1.5", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/mime": "^6.4|^7.0", - "symfony/rate-limiter": "^6.4|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\HttpFoundation\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Defines an object-oriented layer for the HTTP specification", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/http-foundation/tree/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-11-13T18:58:46+00:00" - }, - { - "name": "symfony/http-kernel", - "version": "v7.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-kernel.git", - "reference": "6b4722a25e0aed1ccb4914b9bcbd493cc4676b4d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/6b4722a25e0aed1ccb4914b9bcbd493cc4676b4d", - "reference": "6b4722a25e0aed1ccb4914b9bcbd493cc4676b4d", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "psr/log": "^1|^2|^3", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/error-handler": "^6.4|^7.0", - "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "symfony/browser-kit": "<6.4", - "symfony/cache": "<6.4", - "symfony/config": "<6.4", - "symfony/console": "<6.4", - "symfony/dependency-injection": "<6.4", - "symfony/doctrine-bridge": "<6.4", - "symfony/form": "<6.4", - "symfony/http-client": "<6.4", - "symfony/http-client-contracts": "<2.5", - "symfony/mailer": "<6.4", - "symfony/messenger": "<6.4", - "symfony/translation": "<6.4", - "symfony/translation-contracts": "<2.5", - "symfony/twig-bridge": "<6.4", - "symfony/validator": "<6.4", - "symfony/var-dumper": "<6.4", - "twig/twig": "<3.12" - }, - "provide": { - "psr/log-implementation": "1.0|2.0|3.0" - }, - "require-dev": { - "psr/cache": "^1.0|^2.0|^3.0", - "symfony/browser-kit": "^6.4|^7.0", - "symfony/clock": "^6.4|^7.0", - "symfony/config": "^6.4|^7.0", - "symfony/console": "^6.4|^7.0", - "symfony/css-selector": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/dom-crawler": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/finder": "^6.4|^7.0", - "symfony/http-client-contracts": "^2.5|^3", - "symfony/process": "^6.4|^7.0", - "symfony/property-access": "^7.1", - "symfony/routing": "^6.4|^7.0", - "symfony/serializer": "^7.1", - "symfony/stopwatch": "^6.4|^7.0", - "symfony/translation": "^6.4|^7.0", - "symfony/translation-contracts": "^2.5|^3", - "symfony/uid": "^6.4|^7.0", - "symfony/validator": "^6.4|^7.0", - "symfony/var-dumper": "^6.4|^7.0", - "symfony/var-exporter": "^6.4|^7.0", - "twig/twig": "^3.12" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\HttpKernel\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides a structured process for converting a Request into a Response", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/http-kernel/tree/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-11-29T08:42:40+00:00" - }, - { - "name": "symfony/mailer", - "version": "v7.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/mailer.git", - "reference": "e4d358702fb66e4c8a2af08e90e7271a62de39cc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/e4d358702fb66e4c8a2af08e90e7271a62de39cc", - "reference": "e4d358702fb66e4c8a2af08e90e7271a62de39cc", - "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.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-11-25T15:21:05+00:00" - }, - { - "name": "symfony/mime", - "version": "v7.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/mime.git", - "reference": "cc84a4b81f62158c3846ac7ff10f696aae2b524d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/cc84a4b81f62158c3846ac7ff10f696aae2b524d", - "reference": "cc84a4b81f62158c3846ac7ff10f696aae2b524d", - "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.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-11-23T09:19:39+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": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], - "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.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": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's grapheme_* functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "grapheme", - "intl", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.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": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Laurent Bassin", - "email": "laurent@bassin.info" - }, - { - "name": "Trevor Rowbotham", - "email": "trevor.rowbotham@pm.me" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "idn", - "intl", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.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": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's Normalizer class and related functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "intl", - "normalizer", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.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": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.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": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.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-php83", - "version": "v1.31.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491", - "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "type": "library", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php83\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.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-uuid", - "version": "v1.31.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-uuid.git", - "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/21533be36c24be3f4b1669c4725c7d1d2bab4ae2", - "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "provide": { - "ext-uuid": "*" - }, - "suggest": { - "ext-uuid": "For best performance" - }, - "type": "library", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Uuid\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Grégoire Pineau", - "email": "lyrixx@lyrixx.info" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for uuid functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "uuid" - ], - "support": { - "source": "https://github.com/symfony/polyfill-uuid/tree/v1.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/process", - "version": "v7.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "d34b22ba9390ec19d2dd966c40aa9e8462f27a7e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/d34b22ba9390ec19d2dd966c40aa9e8462f27a7e", - "reference": "d34b22ba9390ec19d2dd966c40aa9e8462f27a7e", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Process\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Executes commands in sub-processes", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/process/tree/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-11-06T14:24:19+00:00" - }, - { - "name": "symfony/routing", - "version": "v7.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/routing.git", - "reference": "e10a2450fa957af6c448b9b93c9010a4e4c0725e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/e10a2450fa957af6c448b9b93c9010a4e4c0725e", - "reference": "e10a2450fa957af6c448b9b93c9010a4e4c0725e", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3" - }, - "conflict": { - "symfony/config": "<6.4", - "symfony/dependency-injection": "<6.4", - "symfony/yaml": "<6.4" - }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/yaml": "^6.4|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Routing\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Maps an HTTP request to a set of configuration variables", - "homepage": "https://symfony.com", - "keywords": [ - "router", - "routing", - "uri", - "url" - ], - "support": { - "source": "https://github.com/symfony/routing/tree/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-11-25T11:08:51+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": { - "branch-alias": { - "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Service\\": "" - }, - "exclude-from-classmap": [ - "/Test/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to writing services", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.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": "v7.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/string.git", - "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/446e0d146f991dde3e73f45f2c97a9faad773c82", - "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "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/emoji": "^7.1", - "symfony/error-handler": "^6.4|^7.0", - "symfony/http-client": "^6.4|^7.0", - "symfony/intl": "^6.4|^7.0", - "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^6.4|^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/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-11-13T13:31:26+00:00" - }, - { - "name": "symfony/translation", - "version": "v7.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/translation.git", - "reference": "dc89e16b44048ceecc879054e5b7f38326ab6cc5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/dc89e16b44048ceecc879054e5b7f38326ab6cc5", - "reference": "dc89e16b44048ceecc879054e5b7f38326ab6cc5", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/translation-contracts": "^2.5|^3.0" - }, - "conflict": { - "symfony/config": "<6.4", - "symfony/console": "<6.4", - "symfony/dependency-injection": "<6.4", - "symfony/http-client-contracts": "<2.5", - "symfony/http-kernel": "<6.4", - "symfony/service-contracts": "<2.5", - "symfony/twig-bundle": "<6.4", - "symfony/yaml": "<6.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": "^6.4|^7.0", - "symfony/console": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/finder": "^6.4|^7.0", - "symfony/http-client-contracts": "^2.5|^3.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/intl": "^6.4|^7.0", - "symfony/polyfill-intl-icu": "^1.21", - "symfony/routing": "^6.4|^7.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^6.4|^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/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-11-12T20:47:56+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": { - "branch-alias": { - "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Translation\\": "" - }, - "exclude-from-classmap": [ - "/Test/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to translation", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.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/uid", - "version": "v7.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/uid.git", - "reference": "2d294d0c48df244c71c105a169d0190bfb080426" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/2d294d0c48df244c71c105a169d0190bfb080426", - "reference": "2d294d0c48df244c71c105a169d0190bfb080426", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/polyfill-uuid": "^1.15" - }, - "require-dev": { - "symfony/console": "^6.4|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Uid\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Grégoire Pineau", - "email": "lyrixx@lyrixx.info" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides an object-oriented API to generate and represent UIDs", - "homepage": "https://symfony.com", - "keywords": [ - "UID", - "ulid", - "uuid" - ], - "support": { - "source": "https://github.com/symfony/uid/tree/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/var-dumper", - "version": "v7.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/var-dumper.git", - "reference": "c6a22929407dec8765d6e2b6ff85b800b245879c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/c6a22929407dec8765d6e2b6ff85b800b245879c", - "reference": "c6a22929407dec8765d6e2b6ff85b800b245879c", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "symfony/console": "<6.4" - }, - "require-dev": { - "ext-iconv": "*", - "symfony/console": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0", - "symfony/uid": "^6.4|^7.0", - "twig/twig": "^3.12" - }, - "bin": [ - "Resources/bin/var-dump-server" - ], - "type": "library", - "autoload": { - "files": [ - "Resources/functions/dump.php" - ], - "psr-4": { - "Symfony\\Component\\VarDumper\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides mechanisms for walking through any arbitrary PHP variable", - "homepage": "https://symfony.com", - "keywords": [ - "debug", - "dump" - ], - "support": { - "source": "https://github.com/symfony/var-dumper/tree/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-11-08T15:48:14+00:00" - }, - { - "name": "tijsverkoyen/css-to-inline-styles", - "version": "v2.2.7", - "source": { - "type": "git", - "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "83ee6f38df0a63106a9e4536e3060458b74ccedb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/83ee6f38df0a63106a9e4536e3060458b74ccedb", - "reference": "83ee6f38df0a63106a9e4536e3060458b74ccedb", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "php": "^5.5 || ^7.0 || ^8.0", - "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2.x-dev" - } - }, - "autoload": { - "psr-4": { - "TijsVerkoyen\\CssToInlineStyles\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Tijs Verkoyen", - "email": "css_to_inline_styles@verkoyen.eu", - "role": "Developer" - } - ], - "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", - "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", - "support": { - "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", - "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.2.7" - }, - "time": "2023-12-08T13:03:43+00:00" - }, - { - "name": "vlucas/phpdotenv", - "version": "v5.6.1", - "source": { - "type": "git", - "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/a59a13791077fe3d44f90e7133eb68e7d22eaff2", - "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2", - "shasum": "" - }, - "require": { - "ext-pcre": "*", - "graham-campbell/result-type": "^1.1.3", - "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9.3", - "symfony/polyfill-ctype": "^1.24", - "symfony/polyfill-mbstring": "^1.24", - "symfony/polyfill-php80": "^1.24" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", - "ext-filter": "*", - "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" - }, - "suggest": { - "ext-filter": "Required to use the boolean validator." - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - }, - "branch-alias": { - "dev-master": "5.6-dev" - } - }, - "autoload": { - "psr-4": { - "Dotenv\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Vance Lucas", - "email": "vance@vancelucas.com", - "homepage": "https://github.com/vlucas" - } - ], - "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", - "keywords": [ - "dotenv", - "env", - "environment" - ], - "support": { - "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.1" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", - "type": "tidelift" - } - ], - "time": "2024-07-20T21:52:34+00:00" - }, - { - "name": "voku/portable-ascii", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/voku/portable-ascii.git", - "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", - "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", - "shasum": "" - }, - "require": { - "php": ">=7.0.0" - }, - "require-dev": { - "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" - }, - "suggest": { - "ext-intl": "Use Intl for transliterator_transliterate() support" - }, - "type": "library", - "autoload": { - "psr-4": { - "voku\\": "src/voku/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Lars Moelleken", - "homepage": "https://www.moelleken.org/" - } - ], - "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", - "homepage": "https://github.com/voku/portable-ascii", - "keywords": [ - "ascii", - "clean", - "php" - ], - "support": { - "issues": "https://github.com/voku/portable-ascii/issues", - "source": "https://github.com/voku/portable-ascii/tree/2.0.3" - }, - "funding": [ - { - "url": "https://www.paypal.me/moelleken", - "type": "custom" - }, - { - "url": "https://github.com/voku", - "type": "github" - }, - { - "url": "https://opencollective.com/portable-ascii", - "type": "open_collective" - }, - { - "url": "https://www.patreon.com/voku", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", - "type": "tidelift" - } - ], - "time": "2024-11-21T01:49:47+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.11.0", - "source": { - "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "php": "^7.2 || ^8.0" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.11.0" - }, - "time": "2022-06-03T18:03:27+00:00" - } - ], - "packages-dev": [ - { - "name": "archtechx/enums", - "version": "v1.1.0", - "source": { - "type": "git", - "url": "https://github.com/archtechx/enums.git", - "reference": "37326d5e26cdfcc2810f4664cdd625ea4fd528d7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/archtechx/enums/zipball/37326d5e26cdfcc2810f4664cdd625ea4fd528d7", - "reference": "37326d5e26cdfcc2810f4664cdd625ea4fd528d7", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "larastan/larastan": "^2.4", - "orchestra/testbench": "^8.0", - "pestphp/pest": "^2.0", - "pestphp/pest-plugin-laravel": "^2.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "ArchTech\\Enums\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Samuel Štancl", - "email": "samuel@archte.ch" - } - ], - "description": "Helpers for making PHP enums more lovable.", - "support": { - "issues": "https://github.com/archtechx/enums/issues", - "source": "https://github.com/archtechx/enums/tree/v1.1.0" - }, - "time": "2024-07-15T14:28:34+00:00" - }, - { - "name": "brianium/paratest", - "version": "v7.4.8", - "source": { - "type": "git", - "url": "https://github.com/paratestphp/paratest.git", - "reference": "cf16fcbb9b8107a7df6b97e497fc91e819774d8b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/paratestphp/paratest/zipball/cf16fcbb9b8107a7df6b97e497fc91e819774d8b", - "reference": "cf16fcbb9b8107a7df6b97e497fc91e819774d8b", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-pcre": "*", - "ext-reflection": "*", - "ext-simplexml": "*", - "fidry/cpu-core-counter": "^1.2.0", - "jean85/pretty-package-versions": "^2.0.6", - "php": "~8.2.0 || ~8.3.0 || ~8.4.0", - "phpunit/php-code-coverage": "^10.1.16", - "phpunit/php-file-iterator": "^4.1.0", - "phpunit/php-timer": "^6.0.0", - "phpunit/phpunit": "^10.5.36", - "sebastian/environment": "^6.1.0", - "symfony/console": "^6.4.7 || ^7.1.5", - "symfony/process": "^6.4.7 || ^7.1.5" - }, - "require-dev": { - "doctrine/coding-standard": "^12.0.0", - "ext-pcov": "*", - "ext-posix": "*", - "phpstan/phpstan": "^1.12.6", - "phpstan/phpstan-deprecation-rules": "^1.2.1", - "phpstan/phpstan-phpunit": "^1.4.0", - "phpstan/phpstan-strict-rules": "^1.6.1", - "squizlabs/php_codesniffer": "^3.10.3", - "symfony/filesystem": "^6.4.3 || ^7.1.5" - }, - "bin": [ - "bin/paratest", - "bin/paratest_for_phpstorm" - ], - "type": "library", - "autoload": { - "psr-4": { - "ParaTest\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Brian Scaturro", - "email": "scaturrob@gmail.com", - "role": "Developer" - }, - { - "name": "Filippo Tessarotto", - "email": "zoeslam@gmail.com", - "role": "Developer" - } - ], - "description": "Parallel testing for PHP", - "homepage": "https://github.com/paratestphp/paratest", - "keywords": [ - "concurrent", - "parallel", - "phpunit", - "testing" - ], - "support": { - "issues": "https://github.com/paratestphp/paratest/issues", - "source": "https://github.com/paratestphp/paratest/tree/v7.4.8" - }, - "funding": [ - { - "url": "https://github.com/sponsors/Slamdunk", - "type": "github" - }, - { - "url": "https://paypal.me/filippotessarotto", - "type": "paypal" - } - ], - "time": "2024-10-15T12:45:19+00:00" - }, - { - "name": "composer/class-map-generator", - "version": "1.5.0", - "source": { - "type": "git", - "url": "https://github.com/composer/class-map-generator.git", - "reference": "4b0a223cf5be7c9ee7e0ef1bc7db42b4a97c9915" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/class-map-generator/zipball/4b0a223cf5be7c9ee7e0ef1bc7db42b4a97c9915", - "reference": "4b0a223cf5be7c9ee7e0ef1bc7db42b4a97c9915", - "shasum": "" - }, - "require": { - "composer/pcre": "^2.1 || ^3.1", - "php": "^7.2 || ^8.0", - "symfony/finder": "^4.4 || ^5.3 || ^6 || ^7" - }, - "require-dev": { - "phpstan/phpstan": "^1.12 || ^2", - "phpstan/phpstan-deprecation-rules": "^1 || ^2", - "phpstan/phpstan-phpunit": "^1 || ^2", - "phpstan/phpstan-strict-rules": "^1.1 || ^2", - "phpunit/phpunit": "^8", - "symfony/filesystem": "^5.4 || ^6" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\ClassMapGenerator\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "https://seld.be" - } - ], - "description": "Utilities to scan PHP code and generate class maps.", - "keywords": [ - "classmap" - ], - "support": { - "issues": "https://github.com/composer/class-map-generator/issues", - "source": "https://github.com/composer/class-map-generator/tree/1.5.0" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2024-11-25T16:11:06+00:00" - }, - { - "name": "composer/pcre", - "version": "3.3.2", - "source": { - "type": "git", - "url": "https://github.com/composer/pcre.git", - "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e", - "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e", - "shasum": "" - }, - "require": { - "php": "^7.4 || ^8.0" - }, - "conflict": { - "phpstan/phpstan": "<1.11.10" - }, - "require-dev": { - "phpstan/phpstan": "^1.12 || ^2", - "phpstan/phpstan-strict-rules": "^1 || ^2", - "phpunit/phpunit": "^8 || ^9" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - }, - "phpstan": { - "includes": [ - "extension.neon" - ] - } - }, - "autoload": { - "psr-4": { - "Composer\\Pcre\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "PCRE wrapping library that offers type-safe preg_* replacements.", - "keywords": [ - "PCRE", - "preg", - "regex", - "regular expression" - ], - "support": { - "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.3.2" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2024-11-12T16:29:46+00:00" - }, - { - "name": "dragon-code/contracts", - "version": "2.23.0", - "source": { - "type": "git", - "url": "https://github.com/TheDragonCode/contracts.git", - "reference": "44dbad923f152e0dc2699fbac2d33b65dd6a8f7d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/TheDragonCode/contracts/zipball/44dbad923f152e0dc2699fbac2d33b65dd6a8f7d", - "reference": "44dbad923f152e0dc2699fbac2d33b65dd6a8f7d", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0", - "psr/http-message": "^1.0.1 || ^2.0", - "symfony/http-kernel": "^4.0 || ^5.0 || ^6.0 || ^7.0", - "symfony/polyfill-php80": "^1.23" - }, - "conflict": { - "andrey-helldar/contracts": "*" - }, - "require-dev": { - "illuminate/database": "^10.0 || ^11.0", - "phpdocumentor/reflection-docblock": "^5.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "DragonCode\\Contracts\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro", - "homepage": "https://dragon-code.pro" - } - ], - "description": "A set of contracts for any project", - "keywords": [ - "contracts", - "interfaces" - ], - "support": { - "source": "https://github.com/TheDragonCode/contracts" - }, - "funding": [ - { - "url": "https://boosty.to/dragon-code", - "type": "boosty" - }, - { - "url": "https://www.donationalerts.com/r/dragon_code", - "type": "donationalerts" - }, - { - "url": "https://yoomoney.ru/to/410012608840929", - "type": "yoomoney" - } - ], - "time": "2024-03-11T20:15:12+00:00" - }, - { - "name": "dragon-code/pretty-array", - "version": "v4.1.0", - "source": { - "type": "git", - "url": "https://github.com/TheDragonCode/pretty-array.git", - "reference": "6c84e2454491b414efbd37985c322712cdf9012f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/TheDragonCode/pretty-array/zipball/6c84e2454491b414efbd37985c322712cdf9012f", - "reference": "6c84e2454491b414efbd37985c322712cdf9012f", - "shasum": "" - }, - "require": { - "dragon-code/contracts": "^2.20", - "dragon-code/support": "^6.11.2", - "ext-dom": "*", - "ext-mbstring": "*", - "php": "^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.6 || ^10.2" - }, - "suggest": { - "symfony/thanks": "Give thanks (in the form of a GitHub) to your fellow PHP package maintainers" - }, - "type": "library", - "autoload": { - "psr-4": { - "DragonCode\\PrettyArray\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro", - "homepage": "https://github.com/andrey-helldar" - } - ], - "description": "Simple conversion of an array to a pretty view", - "keywords": [ - "andrey helldar", - "array", - "dragon", - "dragon code", - "pretty", - "pretty array" - ], - "support": { - "issues": "https://github.com/TheDragonCode/pretty-array/issues", - "source": "https://github.com/TheDragonCode/pretty-array" - }, - "funding": [ - { - "url": "https://boosty.to/dragon-code", - "type": "boosty" - }, - { - "url": "https://github.com/sponsors/TheDragonCode", - "type": "github" - }, - { - "url": "https://opencollective.com/dragon-code", - "type": "open_collective" - }, - { - "url": "https://yoomoney.ru/to/410012608840929", - "type": "yoomoney" - } - ], - "time": "2023-06-02T11:37:44+00:00" - }, - { - "name": "dragon-code/support", - "version": "6.15.0", - "source": { - "type": "git", - "url": "https://github.com/TheDragonCode/support.git", - "reference": "087d7baaa963cdbb24e901dc27e10cdc31c2529c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/TheDragonCode/support/zipball/087d7baaa963cdbb24e901dc27e10cdc31c2529c", - "reference": "087d7baaa963cdbb24e901dc27e10cdc31c2529c", - "shasum": "" - }, - "require": { - "dragon-code/contracts": "^2.22.0", - "ext-bcmath": "*", - "ext-ctype": "*", - "ext-dom": "*", - "ext-json": "*", - "ext-mbstring": "*", - "php": "^8.1", - "psr/http-message": "^1.0.1 || ^2.0", - "symfony/polyfill-php81": "^1.25", - "voku/portable-ascii": "^1.4.8 || ^2.0.1" - }, - "conflict": { - "andrey-helldar/support": "*" - }, - "require-dev": { - "illuminate/contracts": "^9.0 || ^10.0 || ^11.0", - "phpunit/phpunit": "^9.6 || ^11.0", - "symfony/var-dumper": "^6.0 || ^7.0" - }, - "suggest": { - "dragon-code/laravel-support": "Various helper files for the Laravel and Lumen frameworks", - "symfony/thanks": "Give thanks (in the form of a GitHub) to your fellow PHP package maintainers" - }, - "type": "library", - "extra": { - "dragon-code": { - "docs-generator": { - "preview": { - "brand": "php", - "vendor": "The Dragon Code" - } - } - } - }, - "autoload": { - "psr-4": { - "DragonCode\\Support\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro", - "homepage": "https://dragon-code.pro" - } - ], - "description": "Support package is a collection of helpers and tools for any project.", - "keywords": [ - "dragon", - "dragon-code", - "framework", - "helper", - "helpers", - "laravel", - "php", - "support", - "symfony", - "yii", - "yii2" - ], - "support": { - "issues": "https://github.com/TheDragonCode/support/issues", - "source": "https://github.com/TheDragonCode/support" - }, - "funding": [ - { - "url": "https://boosty.to/dragon-code", - "type": "boosty" - }, - { - "url": "https://www.donationalerts.com/r/dragon_code", - "type": "donationalerts" - }, - { - "url": "https://yoomoney.ru/to/410012608840929", - "type": "yoomoney" - } - ], - "time": "2024-09-07T13:27:37+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": "fidry/cpu-core-counter", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/theofidry/cpu-core-counter.git", - "reference": "8520451a140d3f46ac33042715115e290cf5785f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/8520451a140d3f46ac33042715115e290cf5785f", - "reference": "8520451a140d3f46ac33042715115e290cf5785f", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "fidry/makefile": "^0.2.0", - "fidry/php-cs-fixer-config": "^1.1.2", - "phpstan/extension-installer": "^1.2.0", - "phpstan/phpstan": "^1.9.2", - "phpstan/phpstan-deprecation-rules": "^1.0.0", - "phpstan/phpstan-phpunit": "^1.2.2", - "phpstan/phpstan-strict-rules": "^1.4.4", - "phpunit/phpunit": "^8.5.31 || ^9.5.26", - "webmozarts/strict-phpunit": "^7.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "Fidry\\CpuCoreCounter\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Théo FIDRY", - "email": "theo.fidry@gmail.com" - } - ], - "description": "Tiny utility to get the number of CPU cores.", - "keywords": [ - "CPU", - "core" - ], - "support": { - "issues": "https://github.com/theofidry/cpu-core-counter/issues", - "source": "https://github.com/theofidry/cpu-core-counter/tree/1.2.0" - }, - "funding": [ - { - "url": "https://github.com/theofidry", - "type": "github" - } - ], - "time": "2024-08-06T10:04:20+00:00" - }, - { - "name": "filp/whoops", - "version": "2.16.0", - "source": { - "type": "git", - "url": "https://github.com/filp/whoops.git", - "reference": "befcdc0e5dce67252aa6322d82424be928214fa2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/befcdc0e5dce67252aa6322d82424be928214fa2", - "reference": "befcdc0e5dce67252aa6322d82424be928214fa2", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0", - "psr/log": "^1.0.1 || ^2.0 || ^3.0" - }, - "require-dev": { - "mockery/mockery": "^1.0", - "phpunit/phpunit": "^7.5.20 || ^8.5.8 || ^9.3.3", - "symfony/var-dumper": "^4.0 || ^5.0" - }, - "suggest": { - "symfony/var-dumper": "Pretty print complex values better with var-dumper available", - "whoops/soap": "Formats errors as SOAP responses" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.7-dev" - } - }, - "autoload": { - "psr-4": { - "Whoops\\": "src/Whoops/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Filipe Dobreira", - "homepage": "https://github.com/filp", - "role": "Developer" - } - ], - "description": "php error handling for cool kids", - "homepage": "https://filp.github.io/whoops/", - "keywords": [ - "error", - "exception", - "handling", - "library", - "throwable", - "whoops" - ], - "support": { - "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.16.0" - }, - "funding": [ - { - "url": "https://github.com/denis-sokolov", - "type": "github" - } - ], - "time": "2024-09-25T12:00:00+00:00" - }, - { - "name": "hamcrest/hamcrest-php", - "version": "v2.0.1", - "source": { - "type": "git", - "url": "https://github.com/hamcrest/hamcrest-php.git", - "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", - "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", - "shasum": "" - }, - "require": { - "php": "^5.3|^7.0|^8.0" - }, - "replace": { - "cordoval/hamcrest-php": "*", - "davedevelopment/hamcrest-php": "*", - "kodova/hamcrest-php": "*" - }, - "require-dev": { - "phpunit/php-file-iterator": "^1.4 || ^2.0", - "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - }, - "autoload": { - "classmap": [ - "hamcrest" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "This is the PHP port of Hamcrest Matchers", - "keywords": [ - "test" - ], - "support": { - "issues": "https://github.com/hamcrest/hamcrest-php/issues", - "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" - }, - "time": "2020-07-09T08:09:16+00:00" - }, - { - "name": "jean85/pretty-package-versions", - "version": "2.1.0", - "source": { - "type": "git", - "url": "https://github.com/Jean85/pretty-package-versions.git", - "reference": "3c4e5f62ba8d7de1734312e4fff32f67a8daaf10" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/3c4e5f62ba8d7de1734312e4fff32f67a8daaf10", - "reference": "3c4e5f62ba8d7de1734312e4fff32f67a8daaf10", - "shasum": "" - }, - "require": { - "composer-runtime-api": "^2.1.0", - "php": "^7.4|^8.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3.2", - "jean85/composer-provided-replaced-stub-package": "^1.0", - "phpstan/phpstan": "^1.4", - "phpunit/phpunit": "^7.5|^8.5|^9.6", - "vimeo/psalm": "^4.3 || ^5.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Jean85\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Alessandro Lai", - "email": "alessandro.lai85@gmail.com" - } - ], - "description": "A library to get pretty versions strings of installed dependencies", - "keywords": [ - "composer", - "package", - "release", - "versions" - ], - "support": { - "issues": "https://github.com/Jean85/pretty-package-versions/issues", - "source": "https://github.com/Jean85/pretty-package-versions/tree/2.1.0" - }, - "time": "2024-11-18T16:19:46+00:00" - }, - { - "name": "larastan/larastan", - "version": "v2.9.12", - "source": { - "type": "git", - "url": "https://github.com/larastan/larastan.git", - "reference": "19012b39fbe4dede43dbe0c126d9681827a5e908" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/larastan/larastan/zipball/19012b39fbe4dede43dbe0c126d9681827a5e908", - "reference": "19012b39fbe4dede43dbe0c126d9681827a5e908", - "shasum": "" - }, - "require": { - "ext-json": "*", - "illuminate/console": "^9.52.16 || ^10.28.0 || ^11.16", - "illuminate/container": "^9.52.16 || ^10.28.0 || ^11.16", - "illuminate/contracts": "^9.52.16 || ^10.28.0 || ^11.16", - "illuminate/database": "^9.52.16 || ^10.28.0 || ^11.16", - "illuminate/http": "^9.52.16 || ^10.28.0 || ^11.16", - "illuminate/pipeline": "^9.52.16 || ^10.28.0 || ^11.16", - "illuminate/support": "^9.52.16 || ^10.28.0 || ^11.16", - "php": "^8.0.2", - "phpmyadmin/sql-parser": "^5.9.0", - "phpstan/phpstan": "^1.12.11" - }, - "require-dev": { - "doctrine/coding-standard": "^12.0", - "laravel/framework": "^9.52.16 || ^10.28.0 || ^11.16", - "mockery/mockery": "^1.5.1", - "nikic/php-parser": "^4.19.1", - "orchestra/canvas": "^7.11.1 || ^8.11.0 || ^9.0.2", - "orchestra/testbench-core": "^7.33.0 || ^8.13.0 || ^9.0.9", - "phpstan/phpstan-deprecation-rules": "^1.2", - "phpunit/phpunit": "^9.6.13 || ^10.5.16" - }, - "suggest": { - "orchestra/testbench": "Using Larastan for analysing a package needs Testbench" - }, - "type": "phpstan-extension", - "extra": { - "phpstan": { - "includes": [ - "extension.neon" - ] - }, - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "psr-4": { - "Larastan\\Larastan\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Can Vural", - "email": "can9119@gmail.com" - }, - { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" - } - ], - "description": "Larastan - Discover bugs in your code without running it. A phpstan/phpstan extension for Laravel", - "keywords": [ - "PHPStan", - "code analyse", - "code analysis", - "larastan", - "laravel", - "package", - "php", - "static analysis" - ], - "support": { - "issues": "https://github.com/larastan/larastan/issues", - "source": "https://github.com/larastan/larastan/tree/v2.9.12" - }, - "funding": [ - { - "url": "https://github.com/canvural", - "type": "github" - } - ], - "time": "2024-11-26T23:09:02+00:00" - }, - { - "name": "laravel-lang/actions", - "version": "1.8.8", - "source": { - "type": "git", - "url": "https://github.com/Laravel-Lang/actions.git", - "reference": "64d2b6221db930e374b0c3dd2017f8ecca1bc93b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Laravel-Lang/actions/zipball/64d2b6221db930e374b0c3dd2017f8ecca1bc93b", - "reference": "64d2b6221db930e374b0c3dd2017f8ecca1bc93b", - "shasum": "" - }, - "require": { - "ext-json": "*", - "laravel-lang/publisher": "^14.0 || ^15.0 || ^16.0", - "php": "^8.1" - }, - "require-dev": { - "laravel-lang/status-generator": "^2.3.1", - "phpunit/phpunit": "^10.0", - "symfony/var-dumper": "^6.3 || ^7.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "LaravelLang\\Actions\\ServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "LaravelLang\\Actions\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro", - "homepage": "https://dragon-code.pro" - }, - { - "name": "Laravel Lang Team", - "homepage": "https://laravel-lang.com" - } - ], - "description": "Translation of buttons and other action elements", - "keywords": [ - "actions", - "buttons", - "lang", - "languages", - "laravel", - "translations" - ], - "support": { - "issues": "https://github.com/Laravel-Lang/actions/issues", - "source": "https://github.com/Laravel-Lang/actions/tree/1.8.8" - }, - "time": "2024-11-04T19:29:17+00:00" - }, - { - "name": "laravel-lang/attributes", - "version": "2.11.1", - "source": { - "type": "git", - "url": "https://github.com/Laravel-Lang/attributes.git", - "reference": "b60817d0361ec2fe29f100f76cc9bd0c13a36ec9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Laravel-Lang/attributes/zipball/b60817d0361ec2fe29f100f76cc9bd0c13a36ec9", - "reference": "b60817d0361ec2fe29f100f76cc9bd0c13a36ec9", - "shasum": "" - }, - "require": { - "ext-json": "*", - "laravel-lang/publisher": "^14.0 || ^15.0 || ^16.0", - "php": "^8.1" - }, - "require-dev": { - "laravel-lang/status-generator": "^1.19 || ^2.0", - "phpunit/phpunit": "^10.0", - "symfony/var-dumper": "^6.0 || ^7.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "LaravelLang\\Attributes\\ServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "LaravelLang\\Attributes\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro" - }, - { - "name": "Laravel-Lang Team", - "homepage": "https://github.com/Laravel-Lang" - } - ], - "description": "List of 126 languages for form field names", - "keywords": [ - "attributes", - "fields", - "form", - "lang", - "languages", - "laravel", - "messages", - "translations", - "validation" - ], - "support": { - "issues": "https://github.com/Laravel-Lang/attributes/issues", - "source": "https://github.com/Laravel-Lang/attributes/tree/2.11.1" - }, - "time": "2024-10-02T14:07:29+00:00" - }, - { - "name": "laravel-lang/common", - "version": "6.4.0", - "source": { - "type": "git", - "url": "https://github.com/Laravel-Lang/common.git", - "reference": "36c0270180f71420c1166c26f38dc25e1c8b7f64" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Laravel-Lang/common/zipball/36c0270180f71420c1166c26f38dc25e1c8b7f64", - "reference": "36c0270180f71420c1166c26f38dc25e1c8b7f64", - "shasum": "" - }, - "require": { - "laravel-lang/actions": "^1.8.3", - "laravel-lang/attributes": "^2.10.7", - "laravel-lang/http-statuses": "^3.8.3", - "laravel-lang/json-fallback": "^2.1", - "laravel-lang/lang": "^13.12 || ^14.0 || ^15.5.1", - "laravel-lang/locales": "^2.8", - "laravel-lang/models": "^1.0", - "laravel-lang/publisher": "^16.4", - "laravel-lang/routes": "^1.0", - "php": "^8.1" - }, - "require-dev": { - "dragon-code/support": "^6.13", - "orchestra/testbench": "^8.17 || ^9.1.2", - "phpunit/phpunit": "^10.5.20", - "symfony/var-dumper": "^6.4 || ^7.1.1" - }, - "type": "library", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Laravel-Lang Team", - "homepage": "https://github.com/Laravel-Lang" - }, - { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro", - "homepage": "https://dragon-code.pro" - } - ], - "description": "Easily connect the necessary language packs to the application", - "keywords": [ - "Laravel-lang", - "actions", - "attribute", - "attributes", - "breeze", - "buttons", - "cashier", - "fortify", - "framework", - "http", - "http-status", - "http-status-code", - "i18n", - "jetstream", - "lang", - "language", - "languages", - "laravel", - "locale", - "locales", - "localization", - "localizations", - "nova", - "publisher", - "spark", - "translation", - "translations", - "ui" - ], - "support": { - "issues": "https://github.com/Laravel-Lang/common/issues", - "source": "https://github.com/Laravel-Lang/common" - }, - "time": "2024-07-06T16:48:35+00:00" - }, - { - "name": "laravel-lang/config", - "version": "1.10.0", - "source": { - "type": "git", - "url": "https://github.com/Laravel-Lang/config.git", - "reference": "67c9273a2e5487441a7034c2422bb1527200bce5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Laravel-Lang/config/zipball/67c9273a2e5487441a7034c2422bb1527200bce5", - "reference": "67c9273a2e5487441a7034c2422bb1527200bce5", - "shasum": "" - }, - "require": { - "archtechx/enums": "^1.0", - "illuminate/config": "^10.0 || ^11.0", - "illuminate/support": "^10.0 || ^11.0", - "laravel-lang/locale-list": "^1.4", - "php": "^8.1" - }, - "require-dev": { - "orchestra/testbench": "^8.23 || ^9.1", - "pestphp/pest": "^2.34" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "LaravelLang\\Config\\ServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "LaravelLang\\Config\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro", - "homepage": "https://dragon-code.pro" - }, - { - "name": "Laravel-Lang Team", - "homepage": "https://laravel-lang.com" - } - ], - "description": "The Laravel-Lang config package", - "keywords": [ - "Laravel-lang", - "Settings", - "config", - "lang", - "languages", - "laravel", - "locale", - "locales", - "localization", - "localizations", - "translation", - "translations" - ], - "support": { - "issues": "https://github.com/Laravel-Lang/config/issues", - "source": "https://github.com/Laravel-Lang/config/tree/1.10.0" - }, - "time": "2024-09-07T11:28:53+00:00" - }, - { - "name": "laravel-lang/http-statuses", - "version": "3.8.5", - "source": { - "type": "git", - "url": "https://github.com/Laravel-Lang/http-statuses.git", - "reference": "d5ddb3c6cfafadb3a2e9d2d5d96d8d11a9130544" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Laravel-Lang/http-statuses/zipball/d5ddb3c6cfafadb3a2e9d2d5d96d8d11a9130544", - "reference": "d5ddb3c6cfafadb3a2e9d2d5d96d8d11a9130544", - "shasum": "" - }, - "require": { - "ext-json": "*", - "laravel-lang/publisher": "^14.1 || ^15.0 || ^16.0", - "php": "^8.1" - }, - "require-dev": { - "laravel-lang/status-generator": "^1.19 || ^2.0", - "phpunit/phpunit": "^10.0", - "symfony/var-dumper": "^6.0 || ^7.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "LaravelLang\\HttpStatuses\\ServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "LaravelLang\\HttpStatuses\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro" - }, - { - "name": "Laravel-Lang Team", - "homepage": "https://github.com/Laravel-Lang" - } - ], - "description": "List of 126 languages for HTTP statuses", - "keywords": [ - "http", - "lang", - "languages", - "laravel", - "messages", - "status", - "translations" - ], - "support": { - "issues": "https://github.com/Laravel-Lang/http-statuses/issues", - "source": "https://github.com/Laravel-Lang/http-statuses/tree/3.8.5" - }, - "time": "2024-09-30T19:56:37+00:00" - }, - { - "name": "laravel-lang/json-fallback", - "version": "2.1.0", - "source": { - "type": "git", - "url": "https://github.com/Laravel-Lang/json-fallback.git", - "reference": "597865ffcef81b7e92227ea73ff3a9a3372fb91a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Laravel-Lang/json-fallback/zipball/597865ffcef81b7e92227ea73ff3a9a3372fb91a", - "reference": "597865ffcef81b7e92227ea73ff3a9a3372fb91a", - "shasum": "" - }, - "require": { - "illuminate/support": "^10.0 || ^11.0", - "illuminate/translation": "^10.0 || ^11.0", - "php": "^8.1" - }, - "require-dev": { - "orchestra/testbench": "^8.0 || ^9.0", - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "LaravelLang\\JsonFallback\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro", - "homepage": "https://github.com/andrey-helldar" - }, - { - "name": "Felipe Dsdev", - "homepage": "https://github.com/felipe-dsdev" - } - ], - "description": "Adds support for fallback JSON string translation", - "support": { - "issues": "https://github.com/Laravel-Lang/json-fallback/issues", - "source": "https://github.com/Laravel-Lang/json-fallback/tree/2.1.0" - }, - "time": "2024-03-13T09:18:03+00:00" - }, - { - "name": "laravel-lang/lang", - "version": "15.9.6", - "source": { - "type": "git", - "url": "https://github.com/Laravel-Lang/lang.git", - "reference": "671dc13aaa78bed9237ef1ee73303e0039fed709" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Laravel-Lang/lang/zipball/671dc13aaa78bed9237ef1ee73303e0039fed709", - "reference": "671dc13aaa78bed9237ef1ee73303e0039fed709", - "shasum": "" - }, - "require": { - "ext-json": "*", - "laravel-lang/publisher": "^16.0", - "php": "^8.2" - }, - "conflict": { - "laravel/framework": "<11.0.7" - }, - "require-dev": { - "laravel-lang/status-generator": "^2.11", - "phpunit/phpunit": "^10.0", - "symfony/var-dumper": "^7.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "LaravelLang\\Lang\\ServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "LaravelLang\\Lang\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Laravel-Lang Team", - "homepage": "https://github.com/Laravel-Lang" - } - ], - "description": "List of 126 languages for Laravel Framework, Laravel Jetstream, Laravel Fortify, Laravel Breeze, Laravel Cashier, Laravel Nova, Laravel Spark and Laravel UI", - "keywords": [ - "lang", - "languages", - "laravel", - "lpm" - ], - "support": { - "issues": "https://github.com/Laravel-Lang/lang/issues", - "source": "https://github.com/Laravel-Lang/lang" - }, - "time": "2024-12-02T14:31:02+00:00" - }, - { - "name": "laravel-lang/locale-list", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/Laravel-Lang/locale-list.git", - "reference": "48b8e4304f8b1ad34456270d35d44ca0c3e6ea0d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Laravel-Lang/locale-list/zipball/48b8e4304f8b1ad34456270d35d44ca0c3e6ea0d", - "reference": "48b8e4304f8b1ad34456270d35d44ca0c3e6ea0d", - "shasum": "" - }, - "require": { - "archtechx/enums": "^0.3.2 || ^1.0", - "php": "^8.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "LaravelLang\\LocaleList\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro", - "homepage": "https://dragon-code.pro" - }, - { - "name": "Laravel-Lang Team", - "homepage": "https://laravel-lang.com" - } - ], - "description": "List of localizations available in Laravel Lang projects", - "keywords": [ - "Laravel-lang", - "lang", - "languages", - "laravel", - "locale", - "locales", - "localization", - "translation", - "translations" - ], - "support": { - "issues": "https://github.com/Laravel-Lang/locale-list/issues", - "source": "https://github.com/Laravel-Lang/locale-list" - }, - "time": "2024-06-01T00:24:42+00:00" - }, - { - "name": "laravel-lang/locales", - "version": "2.9.2", - "source": { - "type": "git", - "url": "https://github.com/Laravel-Lang/locales.git", - "reference": "e7914ccfb91432ebebacf46697b573a330d702c7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Laravel-Lang/locales/zipball/e7914ccfb91432ebebacf46697b573a330d702c7", - "reference": "e7914ccfb91432ebebacf46697b573a330d702c7", - "shasum": "" - }, - "require": { - "archtechx/enums": "^0.3.2 || ^1.0", - "dragon-code/support": "^6.11.3", - "ext-json": "*", - "illuminate/collections": "^10.0 || ^11.0", - "laravel-lang/config": "^1.0.2", - "laravel-lang/locale-list": "^1.2", - "laravel-lang/native-country-names": "^1.3", - "laravel-lang/native-currency-names": "^1.3", - "laravel-lang/native-locale-names": "^2.2", - "php": "^8.1" - }, - "require-dev": { - "orchestra/testbench": "^8.0 || ^9.0", - "pestphp/pest": "^2.24.1", - "symfony/var-dumper": "^6.0 || ^7.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "LaravelLang\\Locales\\ServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "LaravelLang\\Locales\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro" - }, - { - "name": "Laravel-Lang Team", - "homepage": "https://laravel-lang.com" - } - ], - "description": "Basic functionality for working with localizations", - "keywords": [ - "laravel", - "locale", - "locales", - "localization", - "translation", - "translations" - ], - "support": { - "issues": "https://github.com/Laravel-Lang/locales/issues", - "source": "https://github.com/Laravel-Lang/locales" - }, - "time": "2024-06-24T09:56:41+00:00" - }, - { - "name": "laravel-lang/models", - "version": "1.2.2", - "source": { - "type": "git", - "url": "https://github.com/Laravel-Lang/models.git", - "reference": "5914712a42dcece9453244b7ba0b5d12ffccd75a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Laravel-Lang/models/zipball/5914712a42dcece9453244b7ba0b5d12ffccd75a", - "reference": "5914712a42dcece9453244b7ba0b5d12ffccd75a", - "shasum": "" - }, - "require": { - "composer/class-map-generator": "^1.3", - "dragon-code/support": "^6.13", - "illuminate/database": "^10.0 || ^11.0", - "illuminate/support": "^10.0 || ^11.0", - "laravel-lang/config": "^1.9", - "laravel-lang/locales": "^2.9.2", - "laravel/prompts": "^0.1.24|^0.2|^0.3", - "php": "^8.1" - }, - "require-dev": { - "orchestra/testbench": "^8.0 || ^9.0", - "pestphp/pest": "^2.34", - "pestphp/pest-plugin-laravel": "^2.4", - "symfony/var-dumper": "^6.0 || ^7.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "LaravelLang\\Models\\ServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "LaravelLang\\Models\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro", - "homepage": "https://dragon-code.pro", - "role": "Maintainer" - }, - { - "name": "Andrey Sokolov", - "email": "walfireru@gmail.com", - "homepage": "https://github.com/Quiss", - "role": "Usability consultant" - }, - { - "name": "Laravel-Lang Team", - "homepage": "https://github.com/Laravel-Lang" - } - ], - "description": "Easy and fast way to localize models", - "keywords": [ - "database", - "l18n", - "languages", - "laravel", - "locales", - "localization", - "models", - "translate", - "translations" - ], - "support": { - "issues": "https://github.com/Laravel-Lang/models/issues", - "source": "https://github.com/Laravel-Lang/models" - }, - "time": "2024-11-06T20:23:30+00:00" - }, - { - "name": "laravel-lang/native-country-names", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/Laravel-Lang/native-country-names.git", - "reference": "cddca6627c8732770a2e2c11c921753b6d0adb66" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Laravel-Lang/native-country-names/zipball/cddca6627c8732770a2e2c11c921753b6d0adb66", - "reference": "cddca6627c8732770a2e2c11c921753b6d0adb66", - "shasum": "" - }, - "require": { - "dragon-code/support": "^6.11", - "ext-json": "*", - "illuminate/collections": "^10.0 || ^11.0", - "php": "^8.1" - }, - "require-dev": { - "illuminate/support": "^10.0 || ^11.0", - "laravel-lang/locale-list": "^1.2", - "pestphp/pest": "^2.24.3", - "punic/punic": "^3.8", - "symfony/console": "^6.3 || ^7.0", - "symfony/process": "^6.3 || ^7.0", - "symfony/var-dumper": "^6.3 || ^7.0", - "vlucas/phpdotenv": "^5.6" - }, - "type": "library", - "autoload": { - "psr-4": { - "LaravelLang\\NativeCountryNames\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro" - }, - { - "name": "Laravel-Lang Team", - "homepage": "https://laravel-lang.com" - } - ], - "description": "The project contains native translations of country names", - "keywords": [ - "Laravel-lang", - "countries", - "country", - "lang", - "languages", - "laravel", - "locale", - "locales", - "localization", - "territories", - "territory", - "translation", - "translations" - ], - "support": { - "issues": "https://github.com/Laravel-Lang/native-country-names/issues", - "source": "https://github.com/Laravel-Lang/native-country-names" - }, - "time": "2024-03-13T09:34:55+00:00" - }, - { - "name": "laravel-lang/native-currency-names", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/Laravel-Lang/native-currency-names.git", - "reference": "2e0fbe039421ac753b4fd5256bd239147a0a88fe" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Laravel-Lang/native-currency-names/zipball/2e0fbe039421ac753b4fd5256bd239147a0a88fe", - "reference": "2e0fbe039421ac753b4fd5256bd239147a0a88fe", - "shasum": "" - }, - "require": { - "dragon-code/support": "^6.11", - "ext-json": "*", - "illuminate/collections": "^10.0 || ^11.0", - "php": "^8.1" - }, - "require-dev": { - "illuminate/support": "^10.0 || ^11.0", - "laravel-lang/locale-list": "^1.2", - "pestphp/pest": "^2.24.3", - "punic/punic": "^3.8", - "symfony/console": "^6.3 || ^7.0", - "symfony/process": "^6.3 || ^7.0", - "symfony/var-dumper": "^6.3 || ^7.0", - "vlucas/phpdotenv": "^5.6" - }, - "type": "library", - "autoload": { - "psr-4": { - "LaravelLang\\NativeCurrencyNames\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro" - }, - { - "name": "Laravel-Lang Team", - "homepage": "https://laravel-lang.com" - } - ], - "description": "The project contains native translations of currency names", - "keywords": [ - "Laravel-lang", - "currency", - "lang", - "languages", - "laravel", - "locale", - "locales", - "localization", - "translation", - "translations" - ], - "support": { - "issues": "https://github.com/Laravel-Lang/native-currency-names/issues", - "source": "https://github.com/Laravel-Lang/native-currency-names" - }, - "time": "2024-03-13T09:40:02+00:00" - }, - { - "name": "laravel-lang/native-locale-names", - "version": "2.3.0", - "source": { - "type": "git", - "url": "https://github.com/Laravel-Lang/native-locale-names.git", - "reference": "39ef3330938b74277456049bf386453109e4d05c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Laravel-Lang/native-locale-names/zipball/39ef3330938b74277456049bf386453109e4d05c", - "reference": "39ef3330938b74277456049bf386453109e4d05c", - "shasum": "" - }, - "require": { - "dragon-code/support": "^6.11", - "ext-json": "*", - "php": "^8.1" - }, - "require-dev": { - "illuminate/support": "^10.31 || ^11.0", - "laravel-lang/locale-list": "^1.2", - "pestphp/pest": "^2.24.3", - "punic/punic": "^3.8", - "symfony/console": "^6.3 || ^7.0", - "symfony/process": "^6.3 || ^7.0", - "symfony/var-dumper": "^6.3 || ^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "LaravelLang\\NativeLocaleNames\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro" - }, - { - "name": "Laravel-Lang Team", - "homepage": "https://laravel-lang.com" - } - ], - "description": "The project contains native translations of locale names", - "keywords": [ - "Laravel-lang", - "lang", - "languages", - "laravel", - "locale", - "locales", - "localization", - "translation", - "translations" - ], - "support": { - "issues": "https://github.com/Laravel-Lang/native-locale-names/issues", - "source": "https://github.com/Laravel-Lang/native-locale-names" - }, - "time": "2024-03-13T09:28:19+00:00" - }, - { - "name": "laravel-lang/publisher", - "version": "16.4.0", - "source": { - "type": "git", - "url": "https://github.com/Laravel-Lang/publisher.git", - "reference": "7812e7a07e6f2fdb7d258f3ab1d481d1cbf7f32c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Laravel-Lang/publisher/zipball/7812e7a07e6f2fdb7d258f3ab1d481d1cbf7f32c", - "reference": "7812e7a07e6f2fdb7d258f3ab1d481d1cbf7f32c", - "shasum": "" - }, - "require": { - "composer/semver": "^3.4", - "dragon-code/pretty-array": "^4.1", - "dragon-code/support": "^6.11.3", - "ext-json": "*", - "illuminate/collections": "^10.0 || ^11.0", - "illuminate/console": "^10.0 || ^11.0", - "illuminate/support": "^10.0 || ^11.0", - "laravel-lang/config": "^1.0", - "laravel-lang/locales": "^2.3", - "league/commonmark": "^2.4.1", - "league/config": "^1.2", - "php": "^8.1" - }, - "conflict": { - "laravel-lang/attributes": "<2.0", - "laravel-lang/http-statuses": "<3.0", - "laravel-lang/lang": "<11.0" - }, - "require-dev": { - "laravel-lang/json-fallback": "^2.0", - "orchestra/testbench": "^8.14 || ^9.0", - "phpunit/phpunit": "^10.4.2", - "symfony/var-dumper": "^6.3.6 || ^7.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "LaravelLang\\Publisher\\ServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "LaravelLang\\Publisher\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro" - }, - { - "name": "Laravel-Lang Team", - "homepage": "https://laravel-lang.com" - } - ], - "description": "Publisher lang files for the Laravel and Lumen Frameworks, Jetstream, Fortify, Cashier, Spark and Nova from Laravel-Lang/lang", - "keywords": [ - "Laravel-lang", - "breeze", - "cashier", - "fortify", - "framework", - "i18n", - "jetstream", - "lang", - "languages", - "laravel", - "locale", - "locales", - "localization", - "localizations", - "lpm", - "lumen", - "nova", - "publisher", - "spark", - "trans", - "translation", - "translations", - "validations" - ], - "support": { - "issues": "https://github.com/Laravel-Lang/publisher/issues", - "source": "https://github.com/Laravel-Lang/publisher" - }, - "time": "2024-06-02T00:22:33+00:00" - }, - { - "name": "laravel-lang/routes", - "version": "1.5.0", - "source": { - "type": "git", - "url": "https://github.com/Laravel-Lang/routes.git", - "reference": "addc4438fac481389e66e349ac3b93670aa4301b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Laravel-Lang/routes/zipball/addc4438fac481389e66e349ac3b93670aa4301b", - "reference": "addc4438fac481389e66e349ac3b93670aa4301b", - "shasum": "" - }, - "require": { - "dragon-code/support": "^6.13", - "illuminate/config": "^10.0 || ^11.0", - "illuminate/http": "^10.0 || ^11.0", - "illuminate/routing": "^10.0 || ^11.0", - "illuminate/support": "^10.0 || ^11.0", - "laravel-lang/config": "^1.6", - "laravel-lang/locales": "^2.8", - "php": "^8.1" - }, - "require-dev": { - "orchestra/testbench": "^8.23 || ^9.1", - "pestphp/pest": "^2.34", - "pestphp/pest-plugin-laravel": "^2.4", - "symfony/var-dumper": "^6.0 || ^7.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "LaravelLang\\Routes\\ServiceProvider" - ] - } - }, - "autoload": { - "files": [ - "helpers/functions.php" - ], - "psr-4": { - "LaravelLang\\Routes\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro", - "homepage": "https://dragon-code.pro" - }, - { - "name": "Laravel-Lang Team", - "homepage": "https://github.com/Laravel-Lang" - } - ], - "description": "Easy and fast way to localize routes", - "keywords": [ - "l18n", - "languages", - "laravel", - "localization", - "routes", - "translate", - "translations" - ], - "support": { - "issues": "https://github.com/Laravel-Lang/routes/issues", - "source": "https://github.com/Laravel-Lang/routes" - }, - "time": "2024-07-10T10:28:26+00:00" - }, - { - "name": "laravel/pint", - "version": "v1.18.3", - "source": { - "type": "git", - "url": "https://github.com/laravel/pint.git", - "reference": "cef51821608239040ab841ad6e1c6ae502ae3026" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/pint/zipball/cef51821608239040ab841ad6e1c6ae502ae3026", - "reference": "cef51821608239040ab841ad6e1c6ae502ae3026", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-mbstring": "*", - "ext-tokenizer": "*", - "ext-xml": "*", - "php": "^8.1.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3.65.0", - "illuminate/view": "^10.48.24", - "larastan/larastan": "^2.9.11", - "laravel-zero/framework": "^10.4.0", - "mockery/mockery": "^1.6.12", - "nunomaduro/termwind": "^1.17.0", - "pestphp/pest": "^2.36.0" - }, - "bin": [ - "builds/pint" - ], - "type": "project", - "autoload": { - "psr-4": { - "App\\": "app/", - "Database\\Seeders\\": "database/seeders/", - "Database\\Factories\\": "database/factories/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" - } - ], - "description": "An opinionated code formatter for PHP.", - "homepage": "https://laravel.com", - "keywords": [ - "format", - "formatter", - "lint", - "linter", - "php" - ], - "support": { - "issues": "https://github.com/laravel/pint/issues", - "source": "https://github.com/laravel/pint" - }, - "time": "2024-11-26T15:34:00+00:00" - }, - { - "name": "mockery/mockery", - "version": "1.6.12", - "source": { - "type": "git", - "url": "https://github.com/mockery/mockery.git", - "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/1f4efdd7d3beafe9807b08156dfcb176d18f1699", - "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699", - "shasum": "" - }, - "require": { - "hamcrest/hamcrest-php": "^2.0.1", - "lib-pcre": ">=7.0", - "php": ">=7.3" - }, - "conflict": { - "phpunit/phpunit": "<8.0" - }, - "require-dev": { - "phpunit/phpunit": "^8.5 || ^9.6.17", - "symplify/easy-coding-standard": "^12.1.14" - }, - "type": "library", - "autoload": { - "files": [ - "library/helpers.php", - "library/Mockery.php" - ], - "psr-4": { - "Mockery\\": "library/Mockery" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Pádraic Brady", - "email": "padraic.brady@gmail.com", - "homepage": "https://github.com/padraic", - "role": "Author" - }, - { - "name": "Dave Marshall", - "email": "dave.marshall@atstsolutions.co.uk", - "homepage": "https://davedevelopment.co.uk", - "role": "Developer" - }, - { - "name": "Nathanael Esayeas", - "email": "nathanael.esayeas@protonmail.com", - "homepage": "https://github.com/ghostwriter", - "role": "Lead Developer" - } - ], - "description": "Mockery is a simple yet flexible PHP mock object framework", - "homepage": "https://github.com/mockery/mockery", - "keywords": [ - "BDD", - "TDD", - "library", - "mock", - "mock objects", - "mockery", - "stub", - "test", - "test double", - "testing" - ], - "support": { - "docs": "https://docs.mockery.io/", - "issues": "https://github.com/mockery/mockery/issues", - "rss": "https://github.com/mockery/mockery/releases.atom", - "security": "https://github.com/mockery/mockery/security/advisories", - "source": "https://github.com/mockery/mockery" - }, - "time": "2024-05-16T03:13:13+00:00" - }, - { - "name": "myclabs/deep-copy", - "version": "1.12.1", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/123267b2c49fbf30d78a7b2d333f6be754b94845", - "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "conflict": { - "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3 <3.2.2" - }, - "require-dev": { - "doctrine/collections": "^1.6.8", - "doctrine/common": "^2.13.3 || ^3.2.2", - "phpspec/prophecy": "^1.10", - "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" - }, - "type": "library", - "autoload": { - "files": [ - "src/DeepCopy/deep_copy.php" - ], - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" - ], - "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.12.1" - }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" - } - ], - "time": "2024-11-08T17:47:46+00:00" - }, - { - "name": "nunomaduro/collision", - "version": "v8.5.0", - "source": { - "type": "git", - "url": "https://github.com/nunomaduro/collision.git", - "reference": "f5c101b929c958e849a633283adff296ed5f38f5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/f5c101b929c958e849a633283adff296ed5f38f5", - "reference": "f5c101b929c958e849a633283adff296ed5f38f5", - "shasum": "" - }, - "require": { - "filp/whoops": "^2.16.0", - "nunomaduro/termwind": "^2.1.0", - "php": "^8.2.0", - "symfony/console": "^7.1.5" - }, - "conflict": { - "laravel/framework": "<11.0.0 || >=12.0.0", - "phpunit/phpunit": "<10.5.1 || >=12.0.0" - }, - "require-dev": { - "larastan/larastan": "^2.9.8", - "laravel/framework": "^11.28.0", - "laravel/pint": "^1.18.1", - "laravel/sail": "^1.36.0", - "laravel/sanctum": "^4.0.3", - "laravel/tinker": "^2.10.0", - "orchestra/testbench-core": "^9.5.3", - "pestphp/pest": "^2.36.0 || ^3.4.0", - "sebastian/environment": "^6.1.0 || ^7.2.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" - ] - }, - "branch-alias": { - "dev-8.x": "8.x-dev" - } - }, - "autoload": { - "files": [ - "./src/Adapters/Phpunit/Autoload.php" - ], - "psr-4": { - "NunoMaduro\\Collision\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" - } - ], - "description": "Cli error handling for console/command-line PHP applications.", - "keywords": [ - "artisan", - "cli", - "command-line", - "console", - "error", - "handling", - "laravel", - "laravel-zero", - "php", - "symfony" - ], - "support": { - "issues": "https://github.com/nunomaduro/collision/issues", - "source": "https://github.com/nunomaduro/collision" - }, - "funding": [ - { - "url": "https://www.paypal.com/paypalme/enunomaduro", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - }, - { - "url": "https://www.patreon.com/nunomaduro", - "type": "patreon" - } - ], - "time": "2024-10-15T16:06:32+00:00" - }, - { - "name": "pestphp/pest", - "version": "v2.36.0", - "source": { - "type": "git", - "url": "https://github.com/pestphp/pest.git", - "reference": "f8c88bd14dc1772bfaf02169afb601ecdf2724cd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest/zipball/f8c88bd14dc1772bfaf02169afb601ecdf2724cd", - "reference": "f8c88bd14dc1772bfaf02169afb601ecdf2724cd", - "shasum": "" - }, - "require": { - "brianium/paratest": "^7.3.1", - "nunomaduro/collision": "^7.11.0|^8.4.0", - "nunomaduro/termwind": "^1.16.0|^2.1.0", - "pestphp/pest-plugin": "^2.1.1", - "pestphp/pest-plugin-arch": "^2.7.0", - "php": "^8.1.0", - "phpunit/phpunit": "^10.5.36" - }, - "conflict": { - "filp/whoops": "<2.16.0", - "phpunit/phpunit": ">10.5.36", - "sebastian/exporter": "<5.1.0", - "webmozart/assert": "<1.11.0" - }, - "require-dev": { - "pestphp/pest-dev-tools": "^2.17.0", - "pestphp/pest-plugin-type-coverage": "^2.8.7", - "symfony/process": "^6.4.0|^7.1.5" - }, - "bin": [ - "bin/pest" - ], - "type": "library", - "extra": { - "pest": { - "plugins": [ - "Pest\\Plugins\\Bail", - "Pest\\Plugins\\Cache", - "Pest\\Plugins\\Coverage", - "Pest\\Plugins\\Init", - "Pest\\Plugins\\Environment", - "Pest\\Plugins\\Help", - "Pest\\Plugins\\Memory", - "Pest\\Plugins\\Only", - "Pest\\Plugins\\Printer", - "Pest\\Plugins\\ProcessIsolation", - "Pest\\Plugins\\Profile", - "Pest\\Plugins\\Retry", - "Pest\\Plugins\\Snapshot", - "Pest\\Plugins\\Verbose", - "Pest\\Plugins\\Version", - "Pest\\Plugins\\Parallel" - ] - }, - "phpstan": { - "includes": [ - "extension.neon" - ] - } - }, - "autoload": { - "files": [ - "src/Functions.php", - "src/Pest.php" - ], - "psr-4": { - "Pest\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" - } - ], - "description": "The elegant PHP Testing Framework.", - "keywords": [ - "framework", - "pest", - "php", - "test", - "testing", - "unit" - ], - "support": { - "issues": "https://github.com/pestphp/pest/issues", - "source": "https://github.com/pestphp/pest/tree/v2.36.0" - }, - "funding": [ - { - "url": "https://www.paypal.com/paypalme/enunomaduro", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - } - ], - "time": "2024-10-15T15:30:56+00:00" - }, - { - "name": "pestphp/pest-plugin", - "version": "v2.1.1", - "source": { - "type": "git", - "url": "https://github.com/pestphp/pest-plugin.git", - "reference": "e05d2859e08c2567ee38ce8b005d044e72648c0b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest-plugin/zipball/e05d2859e08c2567ee38ce8b005d044e72648c0b", - "reference": "e05d2859e08c2567ee38ce8b005d044e72648c0b", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^2.0.0", - "composer-runtime-api": "^2.2.2", - "php": "^8.1" - }, - "conflict": { - "pestphp/pest": "<2.2.3" - }, - "require-dev": { - "composer/composer": "^2.5.8", - "pestphp/pest": "^2.16.0", - "pestphp/pest-dev-tools": "^2.16.0" - }, - "type": "composer-plugin", - "extra": { - "class": "Pest\\Plugin\\Manager" - }, - "autoload": { - "psr-4": { - "Pest\\Plugin\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "The Pest plugin manager", - "keywords": [ - "framework", - "manager", - "pest", - "php", - "plugin", - "test", - "testing", - "unit" - ], - "support": { - "source": "https://github.com/pestphp/pest-plugin/tree/v2.1.1" - }, - "funding": [ - { - "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - }, - { - "url": "https://www.patreon.com/nunomaduro", - "type": "patreon" - } - ], - "time": "2023-08-22T08:40:06+00:00" - }, - { - "name": "pestphp/pest-plugin-arch", - "version": "v2.7.0", - "source": { - "type": "git", - "url": "https://github.com/pestphp/pest-plugin-arch.git", - "reference": "d23b2d7498475354522c3818c42ef355dca3fcda" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest-plugin-arch/zipball/d23b2d7498475354522c3818c42ef355dca3fcda", - "reference": "d23b2d7498475354522c3818c42ef355dca3fcda", - "shasum": "" - }, - "require": { - "nunomaduro/collision": "^7.10.0|^8.1.0", - "pestphp/pest-plugin": "^2.1.1", - "php": "^8.1", - "ta-tikoma/phpunit-architecture-test": "^0.8.4" - }, - "require-dev": { - "pestphp/pest": "^2.33.0", - "pestphp/pest-dev-tools": "^2.16.0" - }, - "type": "library", - "extra": { - "pest": { - "plugins": [ - "Pest\\Arch\\Plugin" - ] - } - }, - "autoload": { - "files": [ - "src/Autoload.php" - ], - "psr-4": { - "Pest\\Arch\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "The Arch plugin for Pest PHP.", - "keywords": [ - "arch", - "architecture", - "framework", - "pest", - "php", - "plugin", - "test", - "testing", - "unit" - ], - "support": { - "source": "https://github.com/pestphp/pest-plugin-arch/tree/v2.7.0" - }, - "funding": [ - { - "url": "https://www.paypal.com/paypalme/enunomaduro", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - } - ], - "time": "2024-01-26T09:46:42+00:00" - }, - { - "name": "pestphp/pest-plugin-laravel", - "version": "v2.4.0", - "source": { - "type": "git", - "url": "https://github.com/pestphp/pest-plugin-laravel.git", - "reference": "53df51169a7f9595e06839cce638c73e59ace5e8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest-plugin-laravel/zipball/53df51169a7f9595e06839cce638c73e59ace5e8", - "reference": "53df51169a7f9595e06839cce638c73e59ace5e8", - "shasum": "" - }, - "require": { - "laravel/framework": "^10.48.9|^11.5.0", - "pestphp/pest": "^2.34.7", - "php": "^8.1.0" - }, - "require-dev": { - "laravel/dusk": "^7.13.0", - "orchestra/testbench": "^8.22.3|^9.0.4", - "pestphp/pest-dev-tools": "^2.16.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Pest\\Laravel\\PestServiceProvider" - ] - }, - "pest": { - "plugins": [ - "Pest\\Laravel\\Plugin" - ] - } - }, - "autoload": { - "files": [ - "src/Autoload.php" - ], - "psr-4": { - "Pest\\Laravel\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "The Pest Laravel Plugin", - "keywords": [ - "framework", - "laravel", - "pest", - "php", - "test", - "testing", - "unit" - ], - "support": { - "source": "https://github.com/pestphp/pest-plugin-laravel/tree/v2.4.0" - }, - "funding": [ - { - "url": "https://www.paypal.com/paypalme/enunomaduro", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - } - ], - "time": "2024-04-27T10:41:54+00:00" - }, - { - "name": "pestphp/pest-plugin-livewire", - "version": "v2.1.0", - "source": { - "type": "git", - "url": "https://github.com/pestphp/pest-plugin-livewire.git", - "reference": "e72a2f850f727dfdb6bfa6e2ee6ff478ccc93f97" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest-plugin-livewire/zipball/e72a2f850f727dfdb6bfa6e2ee6ff478ccc93f97", - "reference": "e72a2f850f727dfdb6bfa6e2ee6ff478ccc93f97", - "shasum": "" - }, - "require": { - "livewire/livewire": "^2.12.3|^3.0", - "pestphp/pest": "^2.9.1", - "php": "^8.1" - }, - "require-dev": { - "orchestra/testbench": "^8.5.10", - "pestphp/pest-dev-tools": "^2.12.0" - }, - "type": "library", - "autoload": { - "files": [ - "src/Autoload.php" - ], - "psr-4": { - "Pest\\Livewire\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "The Pest Livewire Plugin", - "keywords": [ - "framework", - "livewire", - "pest", - "php", - "plugin", - "test", - "testing", - "unit" - ], - "support": { - "source": "https://github.com/pestphp/pest-plugin-livewire/tree/v2.1.0" - }, - "funding": [ - { - "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - }, - { - "url": "https://www.patreon.com/nunomaduro", - "type": "patreon" - } - ], - "time": "2023-07-20T16:28:21+00:00" - }, - { - "name": "phar-io/manifest", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "54750ef60c58e43759730615a392c31c80e23176" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", - "reference": "54750ef60c58e43759730615a392c31c80e23176", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "support": { - "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2024-03-03T12:33:53+00:00" - }, - { - "name": "phar-io/version", - "version": "3.2.1", - "source": { - "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Library for handling version information and constraints", - "support": { - "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.2.1" - }, - "time": "2022-02-21T01:04:05+00:00" - }, - { - "name": "phpdocumentor/reflection-common", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-2.x": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" - }, - "time": "2020-06-27T09:03:43+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "5.6.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "f3558a4c23426d12bffeaab463f8a8d8b681193c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/f3558a4c23426d12bffeaab463f8a8d8b681193c", - "reference": "f3558a4c23426d12bffeaab463f8a8d8b681193c", - "shasum": "" - }, - "require": { - "doctrine/deprecations": "^1.1", - "ext-filter": "*", - "php": "^7.4 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.7", - "phpstan/phpdoc-parser": "^1.7|^2.0", - "webmozart/assert": "^1.9.1" - }, - "require-dev": { - "mockery/mockery": "~1.3.5 || ~1.6.0", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-mockery": "^1.1", - "phpstan/phpstan-webmozart-assert": "^1.2", - "phpunit/phpunit": "^9.5", - "psalm/phar": "^5.26" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - }, - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.0" - }, - "time": "2024-11-12T11:25:25+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "1.10.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/679e3ce485b99e84c775d28e2e96fade9a7fb50a", - "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a", - "shasum": "" - }, - "require": { - "doctrine/deprecations": "^1.0", - "php": "^7.3 || ^8.0", - "phpdocumentor/reflection-common": "^2.0", - "phpstan/phpdoc-parser": "^1.18|^2.0" - }, - "require-dev": { - "ext-tokenizer": "*", - "phpbench/phpbench": "^1.2", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-phpunit": "^1.1", - "phpunit/phpunit": "^9.5", - "rector/rector": "^0.13.9", - "vimeo/psalm": "^4.25" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "support": { - "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.10.0" - }, - "time": "2024-11-09T15:12:26+00:00" - }, - { - "name": "phpmyadmin/sql-parser", - "version": "5.10.1", - "source": { - "type": "git", - "url": "https://github.com/phpmyadmin/sql-parser.git", - "reference": "b14fd66496a22d8dd7f7e2791edd9e8674422f17" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpmyadmin/sql-parser/zipball/b14fd66496a22d8dd7f7e2791edd9e8674422f17", - "reference": "b14fd66496a22d8dd7f7e2791edd9e8674422f17", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "symfony/polyfill-mbstring": "^1.3", - "symfony/polyfill-php80": "^1.16" - }, - "conflict": { - "phpmyadmin/motranslator": "<3.0" - }, - "require-dev": { - "phpbench/phpbench": "^1.1", - "phpmyadmin/coding-standard": "^3.0", - "phpmyadmin/motranslator": "^4.0 || ^5.0", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.9.12", - "phpstan/phpstan-phpunit": "^1.3.3", - "phpunit/phpunit": "^8.5 || ^9.6", - "psalm/plugin-phpunit": "^0.16.1", - "vimeo/psalm": "^4.11", - "zumba/json-serializer": "~3.0.2" - }, - "suggest": { - "ext-mbstring": "For best performance", - "phpmyadmin/motranslator": "Translate messages to your favorite locale" - }, - "bin": [ - "bin/highlight-query", - "bin/lint-query", - "bin/sql-parser", - "bin/tokenize-query" - ], - "type": "library", - "autoload": { - "psr-4": { - "PhpMyAdmin\\SqlParser\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "The phpMyAdmin Team", - "email": "developers@phpmyadmin.net", - "homepage": "https://www.phpmyadmin.net/team/" - } - ], - "description": "A validating SQL lexer and parser with a focus on MySQL dialect.", - "homepage": "https://github.com/phpmyadmin/sql-parser", - "keywords": [ - "analysis", - "lexer", - "parser", - "query linter", - "sql", - "sql lexer", - "sql linter", - "sql parser", - "sql syntax highlighter", - "sql tokenizer" - ], - "support": { - "issues": "https://github.com/phpmyadmin/sql-parser/issues", - "source": "https://github.com/phpmyadmin/sql-parser" - }, - "funding": [ - { - "url": "https://www.phpmyadmin.net/donate/", - "type": "other" - } - ], - "time": "2024-11-10T04:10:31+00:00" - }, - { - "name": "phpstan/phpdoc-parser", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "c00d78fb6b29658347f9d37ebe104bffadf36299" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/c00d78fb6b29658347f9d37ebe104bffadf36299", - "reference": "c00d78fb6b29658347f9d37ebe104bffadf36299", - "shasum": "" - }, - "require": { - "php": "^7.4 || ^8.0" - }, - "require-dev": { - "doctrine/annotations": "^2.0", - "nikic/php-parser": "^5.3.0", - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^2.0", - "phpstan/phpstan-phpunit": "^2.0", - "phpstan/phpstan-strict-rules": "^2.0", - "phpunit/phpunit": "^9.6", - "symfony/process": "^5.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "PHPStan\\PhpDocParser\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHPDoc parser with support for nullable, intersection and generic types", - "support": { - "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/2.0.0" - }, - "time": "2024-10-13T11:29:49+00:00" - }, - { - "name": "phpstan/phpstan", - "version": "1.12.12", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpstan.git", - "reference": "b5ae1b88f471d3fd4ba1aa0046234b5ca3776dd0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/b5ae1b88f471d3fd4ba1aa0046234b5ca3776dd0", - "reference": "b5ae1b88f471d3fd4ba1aa0046234b5ca3776dd0", - "shasum": "" - }, - "require": { - "php": "^7.2|^8.0" - }, - "conflict": { - "phpstan/phpstan-shim": "*" - }, - "bin": [ - "phpstan", - "phpstan.phar" - ], - "type": "library", - "autoload": { - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHPStan - PHP Static Analysis Tool", - "keywords": [ - "dev", - "static analysis" - ], - "support": { - "docs": "https://phpstan.org/user-guide/getting-started", - "forum": "https://github.com/phpstan/phpstan/discussions", - "issues": "https://github.com/phpstan/phpstan/issues", - "security": "https://github.com/phpstan/phpstan/security/policy", - "source": "https://github.com/phpstan/phpstan-src" - }, - "funding": [ - { - "url": "https://github.com/ondrejmirtes", - "type": "github" - }, - { - "url": "https://github.com/phpstan", - "type": "github" - } - ], - "time": "2024-11-28T22:13:23+00:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "10.1.16", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "7e308268858ed6baedc8704a304727d20bc07c77" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7e308268858ed6baedc8704a304727d20bc07c77", - "reference": "7e308268858ed6baedc8704a304727d20bc07c77", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^4.19.1 || ^5.1.0", - "php": ">=8.1", - "phpunit/php-file-iterator": "^4.1.0", - "phpunit/php-text-template": "^3.0.1", - "sebastian/code-unit-reverse-lookup": "^3.0.0", - "sebastian/complexity": "^3.2.0", - "sebastian/environment": "^6.1.0", - "sebastian/lines-of-code": "^2.0.2", - "sebastian/version": "^4.0.1", - "theseer/tokenizer": "^1.2.3" - }, - "require-dev": { - "phpunit/phpunit": "^10.1" - }, - "suggest": { - "ext-pcov": "PHP extension that provides line coverage", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "10.1.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.16" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-08-22T04:31:57+00:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "4.1.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c", - "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-08-31T06:24:48+00:00" - }, - { - "name": "phpunit/php-invoker", - "version": "4.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", - "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "ext-pcntl": "*", - "phpunit/phpunit": "^10.0" - }, - "suggest": { - "ext-pcntl": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Invoke callables with a timeout", - "homepage": "https://github.com/sebastianbergmann/php-invoker/", - "keywords": [ - "process" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:56:09+00:00" - }, - { - "name": "phpunit/php-text-template", - "version": "3.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748", - "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-08-31T14:07:24+00:00" - }, - { - "name": "phpunit/php-timer", - "version": "6.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", - "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "6.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:57:52+00:00" - }, - { - "name": "phpunit/phpunit", - "version": "10.5.36", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "aa0a8ce701ea7ee314b0dfaa8970dc94f3f8c870" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/aa0a8ce701ea7ee314b0dfaa8970dc94f3f8c870", - "reference": "aa0a8ce701ea7ee314b0dfaa8970dc94f3f8c870", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.12.0", - "phar-io/manifest": "^2.0.4", - "phar-io/version": "^3.2.1", - "php": ">=8.1", - "phpunit/php-code-coverage": "^10.1.16", - "phpunit/php-file-iterator": "^4.1.0", - "phpunit/php-invoker": "^4.0.0", - "phpunit/php-text-template": "^3.0.1", - "phpunit/php-timer": "^6.0.0", - "sebastian/cli-parser": "^2.0.1", - "sebastian/code-unit": "^2.0.0", - "sebastian/comparator": "^5.0.2", - "sebastian/diff": "^5.1.1", - "sebastian/environment": "^6.1.0", - "sebastian/exporter": "^5.1.2", - "sebastian/global-state": "^6.0.2", - "sebastian/object-enumerator": "^5.0.0", - "sebastian/recursion-context": "^5.0.0", - "sebastian/type": "^4.0.0", - "sebastian/version": "^4.0.1" - }, - "suggest": { - "ext-soap": "To be able to generate mocks based on WSDL files" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "10.5-dev" - } - }, - "autoload": { - "files": [ - "src/Framework/Assert/Functions.php" - ], - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.36" - }, - "funding": [ - { - "url": "https://phpunit.de/sponsors.html", - "type": "custom" - }, - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", - "type": "tidelift" - } - ], - "time": "2024-10-08T15:36:51+00:00" - }, - { - "name": "sebastian/cli-parser", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c34583b87e7b7a8055bf6c450c2c77ce32a24084", - "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for parsing CLI options", - "homepage": "https://github.com/sebastianbergmann/cli-parser", - "support": { - "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-02T07:12:49+00:00" - }, - { - "name": "sebastian/code-unit", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", - "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the PHP code units", - "homepage": "https://github.com/sebastianbergmann/code-unit", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:58:43+00:00" - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", - "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:59:15+00:00" - }, - { - "name": "sebastian/comparator", - "version": "5.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e", - "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-mbstring": "*", - "php": ">=8.1", - "sebastian/diff": "^5.0", - "sebastian/exporter": "^5.0" - }, - "require-dev": { - "phpunit/phpunit": "^10.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/comparator/issues", - "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-10-18T14:56:07+00:00" - }, - { - "name": "sebastian/complexity", - "version": "3.2.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "68ff824baeae169ec9f2137158ee529584553799" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799", - "reference": "68ff824baeae169ec9f2137158ee529584553799", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.2-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for calculating the complexity of PHP code units", - "homepage": "https://github.com/sebastianbergmann/complexity", - "support": { - "issues": "https://github.com/sebastianbergmann/complexity/issues", - "security": "https://github.com/sebastianbergmann/complexity/security/policy", - "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-12-21T08:37:17+00:00" - }, - { - "name": "sebastian/diff", - "version": "5.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e", - "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0", - "symfony/process": "^6.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "security": "https://github.com/sebastianbergmann/diff/security/policy", - "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-02T07:15:17+00:00" - }, - { - "name": "sebastian/environment", - "version": "6.1.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "8074dbcd93529b357029f5cc5058fd3e43666984" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/8074dbcd93529b357029f5cc5058fd3e43666984", - "reference": "8074dbcd93529b357029f5cc5058fd3e43666984", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "suggest": { - "ext-posix": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "6.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "https://github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/environment/issues", - "security": "https://github.com/sebastianbergmann/environment/security/policy", - "source": "https://github.com/sebastianbergmann/environment/tree/6.1.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-23T08:47:14+00:00" - }, - { - "name": "sebastian/exporter", - "version": "5.1.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "955288482d97c19a372d3f31006ab3f37da47adf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/955288482d97c19a372d3f31006ab3f37da47adf", - "reference": "955288482d97c19a372d3f31006ab3f37da47adf", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "php": ">=8.1", - "sebastian/recursion-context": "^5.0" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "https://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/exporter/issues", - "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-02T07:17:12+00:00" - }, - { - "name": "sebastian/global-state", - "version": "6.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", - "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "sebastian/object-reflector": "^3.0", - "sebastian/recursion-context": "^5.0" - }, - "require-dev": { - "ext-dom": "*", - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "6.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "https://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/global-state/issues", - "security": "https://github.com/sebastianbergmann/global-state/security/policy", - "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-02T07:19:19+00:00" - }, - { - "name": "sebastian/lines-of-code", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0", - "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for counting the lines of code in PHP source code", - "homepage": "https://github.com/sebastianbergmann/lines-of-code", - "support": { - "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-12-21T08:38:20+00:00" - }, - { - "name": "sebastian/object-enumerator", - "version": "5.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", - "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "sebastian/object-reflector": "^3.0", - "sebastian/recursion-context": "^5.0" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T07:08:32+00:00" - }, - { - "name": "sebastian/object-reflector", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", - "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T07:06:18+00:00" - }, - { - "name": "sebastian/recursion-context", - "version": "5.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "05909fb5bc7df4c52992396d0116aed689f93712" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712", - "reference": "05909fb5bc7df4c52992396d0116aed689f93712", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "https://github.com/sebastianbergmann/recursion-context", - "support": { - "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T07:05:40+00:00" - }, - { - "name": "sebastian/type", - "version": "4.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", - "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", - "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T07:10:45+00:00" - }, - { - "name": "sebastian/version", - "version": "4.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17", - "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/4.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-07T11:34:05+00:00" - }, - { - "name": "spatie/backtrace", - "version": "1.7.1", - "source": { - "type": "git", - "url": "https://github.com/spatie/backtrace.git", - "reference": "0f2477c520e3729de58e061b8192f161c99f770b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/backtrace/zipball/0f2477c520e3729de58e061b8192f161c99f770b", - "reference": "0f2477c520e3729de58e061b8192f161c99f770b", - "shasum": "" - }, - "require": { - "php": "^7.3 || ^8.0" - }, - "require-dev": { - "ext-json": "*", - "laravel/serializable-closure": "^1.3 || ^2.0", - "phpunit/phpunit": "^9.3 || ^11.4.3", - "spatie/phpunit-snapshot-assertions": "^4.2 || ^5.1.6", - "symfony/var-dumper": "^5.1 || ^6.0 || ^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Spatie\\Backtrace\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Freek Van de Herten", - "email": "freek@spatie.be", - "homepage": "https://spatie.be", - "role": "Developer" - } - ], - "description": "A better backtrace", - "homepage": "https://github.com/spatie/backtrace", - "keywords": [ - "Backtrace", - "spatie" - ], - "support": { - "source": "https://github.com/spatie/backtrace/tree/1.7.1" - }, - "funding": [ - { - "url": "https://github.com/sponsors/spatie", - "type": "github" - }, - { - "url": "https://spatie.be/open-source/support-us", - "type": "other" - } - ], - "time": "2024-12-02T13:28:15+00:00" - }, - { - "name": "spatie/error-solutions", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/spatie/error-solutions.git", - "reference": "ae7393122eda72eed7cc4f176d1e96ea444f2d67" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/error-solutions/zipball/ae7393122eda72eed7cc4f176d1e96ea444f2d67", - "reference": "ae7393122eda72eed7cc4f176d1e96ea444f2d67", - "shasum": "" - }, - "require": { - "php": "^8.0" - }, - "require-dev": { - "illuminate/broadcasting": "^10.0|^11.0", - "illuminate/cache": "^10.0|^11.0", - "illuminate/support": "^10.0|^11.0", - "livewire/livewire": "^2.11|^3.3.5", - "openai-php/client": "^0.10.1", - "orchestra/testbench": "^7.0|8.22.3|^9.0", - "pestphp/pest": "^2.20", - "phpstan/phpstan": "^1.11", - "psr/simple-cache": "^3.0", - "psr/simple-cache-implementation": "^3.0", - "spatie/ray": "^1.28", - "symfony/cache": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0", - "vlucas/phpdotenv": "^5.5" - }, - "suggest": { - "openai-php/client": "Require get solutions from OpenAI", - "simple-cache-implementation": "To cache solutions from OpenAI" - }, - "type": "library", - "autoload": { - "psr-4": { - "Spatie\\Ignition\\": "legacy/ignition", - "Spatie\\ErrorSolutions\\": "src", - "Spatie\\LaravelIgnition\\": "legacy/laravel-ignition" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ruben Van Assche", - "email": "ruben@spatie.be", - "role": "Developer" - } - ], - "description": "This is my package error-solutions", - "homepage": "https://github.com/spatie/error-solutions", - "keywords": [ - "error-solutions", - "spatie" - ], - "support": { - "issues": "https://github.com/spatie/error-solutions/issues", - "source": "https://github.com/spatie/error-solutions/tree/1.1.1" - }, - "funding": [ - { - "url": "https://github.com/Spatie", - "type": "github" - } - ], - "time": "2024-07-25T11:06:04+00:00" - }, - { - "name": "spatie/flare-client-php", - "version": "1.10.0", - "source": { - "type": "git", - "url": "https://github.com/spatie/flare-client-php.git", - "reference": "140a42b2c5d59ac4ecf8f5b493386a4f2eb28272" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/140a42b2c5d59ac4ecf8f5b493386a4f2eb28272", - "reference": "140a42b2c5d59ac4ecf8f5b493386a4f2eb28272", - "shasum": "" - }, - "require": { - "illuminate/pipeline": "^8.0|^9.0|^10.0|^11.0", - "php": "^8.0", - "spatie/backtrace": "^1.6.1", - "symfony/http-foundation": "^5.2|^6.0|^7.0", - "symfony/mime": "^5.2|^6.0|^7.0", - "symfony/process": "^5.2|^6.0|^7.0", - "symfony/var-dumper": "^5.2|^6.0|^7.0" - }, - "require-dev": { - "dms/phpunit-arraysubset-asserts": "^0.5.0", - "pestphp/pest": "^1.20|^2.0", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-phpunit": "^1.0", - "spatie/pest-plugin-snapshots": "^1.0|^2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.3.x-dev" - } - }, - "autoload": { - "files": [ - "src/helpers.php" - ], - "psr-4": { - "Spatie\\FlareClient\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Send PHP errors to Flare", - "homepage": "https://github.com/spatie/flare-client-php", - "keywords": [ - "exception", - "flare", - "reporting", - "spatie" - ], - "support": { - "issues": "https://github.com/spatie/flare-client-php/issues", - "source": "https://github.com/spatie/flare-client-php/tree/1.10.0" - }, - "funding": [ - { - "url": "https://github.com/spatie", - "type": "github" - } - ], - "time": "2024-12-02T14:30:06+00:00" - }, - { - "name": "spatie/ignition", - "version": "1.15.0", - "source": { - "type": "git", - "url": "https://github.com/spatie/ignition.git", - "reference": "e3a68e137371e1eb9edc7f78ffa733f3b98991d2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/ignition/zipball/e3a68e137371e1eb9edc7f78ffa733f3b98991d2", - "reference": "e3a68e137371e1eb9edc7f78ffa733f3b98991d2", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-mbstring": "*", - "php": "^8.0", - "spatie/error-solutions": "^1.0", - "spatie/flare-client-php": "^1.7", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/var-dumper": "^5.4|^6.0|^7.0" - }, - "require-dev": { - "illuminate/cache": "^9.52|^10.0|^11.0", - "mockery/mockery": "^1.4", - "pestphp/pest": "^1.20|^2.0", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-phpunit": "^1.0", - "psr/simple-cache-implementation": "*", - "symfony/cache": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0", - "vlucas/phpdotenv": "^5.5" - }, - "suggest": { - "openai-php/client": "Require get solutions from OpenAI", - "simple-cache-implementation": "To cache solutions from OpenAI" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.5.x-dev" - } - }, - "autoload": { - "psr-4": { - "Spatie\\Ignition\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Spatie", - "email": "info@spatie.be", - "role": "Developer" - } - ], - "description": "A beautiful error page for PHP applications.", - "homepage": "https://flareapp.io/ignition", - "keywords": [ - "error", - "flare", - "laravel", - "page" - ], - "support": { - "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", - "forum": "https://twitter.com/flareappio", - "issues": "https://github.com/spatie/ignition/issues", - "source": "https://github.com/spatie/ignition" - }, - "funding": [ - { - "url": "https://github.com/spatie", - "type": "github" - } - ], - "time": "2024-06-12T14:55:22+00:00" - }, - { - "name": "spatie/laravel-ignition", - "version": "2.9.0", - "source": { - "type": "git", - "url": "https://github.com/spatie/laravel-ignition.git", - "reference": "62042df15314b829d0f26e02108f559018e2aad0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/62042df15314b829d0f26e02108f559018e2aad0", - "reference": "62042df15314b829d0f26e02108f559018e2aad0", - "shasum": "" - }, - "require": { - "ext-curl": "*", - "ext-json": "*", - "ext-mbstring": "*", - "illuminate/support": "^10.0|^11.0", - "php": "^8.1", - "spatie/ignition": "^1.15", - "symfony/console": "^6.2.3|^7.0", - "symfony/var-dumper": "^6.2.3|^7.0" - }, - "require-dev": { - "livewire/livewire": "^2.11|^3.3.5", - "mockery/mockery": "^1.5.1", - "openai-php/client": "^0.8.1", - "orchestra/testbench": "8.22.3|^9.0", - "pestphp/pest": "^2.34", - "phpstan/extension-installer": "^1.3.1", - "phpstan/phpstan-deprecation-rules": "^1.1.1", - "phpstan/phpstan-phpunit": "^1.3.16", - "vlucas/phpdotenv": "^5.5" - }, - "suggest": { - "openai-php/client": "Require get solutions from OpenAI", - "psr/simple-cache-implementation": "Needed to cache solutions from OpenAI" - }, - "type": "library", - "extra": { - "laravel": { - "aliases": { - "Flare": "Spatie\\LaravelIgnition\\Facades\\Flare" - }, - "providers": [ - "Spatie\\LaravelIgnition\\IgnitionServiceProvider" - ] - } - }, - "autoload": { - "files": [ - "src/helpers.php" - ], - "psr-4": { - "Spatie\\LaravelIgnition\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Spatie", - "email": "info@spatie.be", - "role": "Developer" - } - ], - "description": "A beautiful error page for Laravel applications.", - "homepage": "https://flareapp.io/ignition", - "keywords": [ - "error", - "flare", - "laravel", - "page" - ], - "support": { - "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", - "forum": "https://twitter.com/flareappio", - "issues": "https://github.com/spatie/laravel-ignition/issues", - "source": "https://github.com/spatie/laravel-ignition" - }, - "funding": [ - { - "url": "https://github.com/spatie", - "type": "github" - } - ], - "time": "2024-12-02T08:43:31+00:00" - }, - { - "name": "symfony/polyfill-php81", - "version": "v1.31.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", - "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "type": "library", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.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": "ta-tikoma/phpunit-architecture-test", - "version": "0.8.4", - "source": { - "type": "git", - "url": "https://github.com/ta-tikoma/phpunit-architecture-test.git", - "reference": "89f0dea1cb0f0d5744d3ec1764a286af5e006636" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ta-tikoma/phpunit-architecture-test/zipball/89f0dea1cb0f0d5744d3ec1764a286af5e006636", - "reference": "89f0dea1cb0f0d5744d3ec1764a286af5e006636", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.18.0 || ^5.0.0", - "php": "^8.1.0", - "phpdocumentor/reflection-docblock": "^5.3.0", - "phpunit/phpunit": "^10.5.5 || ^11.0.0", - "symfony/finder": "^6.4.0 || ^7.0.0" - }, - "require-dev": { - "laravel/pint": "^1.13.7", - "phpstan/phpstan": "^1.10.52" - }, - "type": "library", - "autoload": { - "psr-4": { - "PHPUnit\\Architecture\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ni Shi", - "email": "futik0ma011@gmail.com" - }, - { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" - } - ], - "description": "Methods for testing application architecture", - "keywords": [ - "architecture", - "phpunit", - "stucture", - "test", - "testing" - ], - "support": { - "issues": "https://github.com/ta-tikoma/phpunit-architecture-test/issues", - "source": "https://github.com/ta-tikoma/phpunit-architecture-test/tree/0.8.4" - }, - "time": "2024-01-05T14:10:56+00:00" - }, - { - "name": "theseer/tokenizer", - "version": "1.2.3", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - } - ], - "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "support": { - "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.3" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2024-03-03T12:36:25+00:00" - } - ], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": [], - "prefer-stable": true, - "prefer-lowest": false, - "platform": { - "php": "^8.2" - }, - "platform-dev": [], - "plugin-api-version": "2.6.0" -} From 2837807b5bd7d584e4911bd6eaa773bef6bf509d Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 12 Jan 2025 10:17:57 +0200 Subject: [PATCH 064/259] push and deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 65 ++++--- app/Filament/Widgets/ChartWidget.php | 10 +- app/Filters/NumberFilter.php | 14 +- app/Livewire/MyDatabaseNotifications.php | 68 +++++++ app/Models/Constraint.php | 76 +++++++- app/Models/Shift.php | 31 ++- app/Providers/AppServiceProvider.php | 5 - app/Resources/ConstraintResource.php | 2 +- app/Resources/ProfileResource.php | 2 +- app/Resources/ShiftResource.php | 2 +- app/Resources/SoldierResource.php | 152 ++++++++------- .../SoldierResource/Pages/CreateSoldier.php | 7 +- .../SoldierResource/Pages/EditSoldier.php | 22 ++- app/Resources/TaskResource.php | 2 +- app/Resources/TeamResource.php | 15 +- database/seeders/DatabaseSeeder.php | 29 ++- lang/en.json | 26 ++- lang/he.json | 37 +++- .../override-filament-fullcalendar.css | 23 ++- .../filament/forms/components/file-upload.js | 2 +- .../components/database/modal/index.blade.php | 64 +++++++ .../components/database/trigger.blade.php | 7 + .../components/topbar/index.blade.php | 181 ++++++++++++++++++ 24 files changed, 652 insertions(+), 192 deletions(-) create mode 100644 resources/views/vendor/filament-notifications/components/database/modal/index.blade.php create mode 100644 resources/views/vendor/filament-notifications/components/database/trigger.blade.php create mode 100644 resources/views/vendor/filament-panels/components/topbar/index.blade.php diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index f1b4b0d..f4dea94 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version1_18 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_1 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index addeedb..32579ad 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -2,6 +2,7 @@ namespace App\Filament\Widgets; +use App\Enums\ConstraintType; use App\Exports\ShiftsExport; use App\Models\Constraint; use App\Models\Shift; @@ -49,14 +50,10 @@ class CalendarWidget extends FullCalendarWidget public $startDate; - public $lastMonth; - public function fetchEvents(array $fetchInfo): array { $this->currentMonth = Carbon::parse($fetchInfo['start'])->addDays(7)->year.'-'.Carbon::parse($fetchInfo['start'])->addDays(7)->month; - $this->headerActions(); - $events = $this->getEventsByRole(); $events->where('start_date', '>=', $fetchInfo['start']) @@ -113,7 +110,7 @@ public function getEventsByRole() $role = current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])); return ($this->type === 'my_soldiers') ? match ($role) { - 'manager','shifts-assignment' => $this->model::where('soldier_id', '!=', $current_user_id) + 'manager', 'shifts-assignment' => $this->model::where('soldier_id', '!=', $current_user_id) ->orWhereNull('soldier_id') ->get(), 'department-commander' => $this->model::where('soldier_id', '!=', $current_user_id) @@ -148,10 +145,9 @@ public function getFormSchema(): array protected function headerActions(): array { $this->currentMonth ?? $this->currentMonth = Carbon::now()->year.'-'.Carbon::now()->month; - if ($this->lastFilterData != $this->filterData || $this->lastMonth !== $this->currentMonth) { + if ($this->lastFilterData != $this->filterData) { $this->refreshRecords(); $this->lastFilterData = $this->filterData; - $this->lastMonth = $this->currentMonth; } $today = now()->startOfDay(); $actions = []; @@ -159,6 +155,22 @@ protected function headerActions(): array if ($this->model === Constraint::class) { return [ CreateAction::make() + ->action(function (array $data) { + if ( + ($data['constraint_type'] == ConstraintType::VACATION->value || + $data['constraint_type'] == ConstraintType::MEDICAL->value) + && auth()->user()->getRoleNames()->count() === 1 + ) { + Constraint::requestConstraint($data); + } else { + Constraint::create([ + 'constraint_type' => $data['constraint_type'], + 'start_date' => $data['start_date'], + 'end_date' => $data['end_date'], + 'soldier_id' => auth()->user()->userable_id, + ]); + } + }) ->mountUsing(function (Form $form, array $arguments) { $form->fill([ 'start_date' => $arguments['start'] ?? null, @@ -171,7 +183,7 @@ protected function headerActions(): array $startDate = Carbon::parse($arguments['start'] ?? null); return $startDate->isBefore($today); - })->extraAttributes(['class' => 'fullcalendar']) + }) ->hidden($this->model === Shift::class && $this->type === 'my' && ! array_intersect(auth()->user()->getRoleNames()->toArray(), ['manager', 'shifts-assignment', 'department-commander', 'team-commander'])), ]; } @@ -196,30 +208,29 @@ protected function headerActions(): array ->action(fn () => $this->runEvents()) ->label(__('Create shifts')) ->icon('heroicon-o-clipboard-document-check') - ->visible(current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) && Carbon::today()->startOfMonth() <= Carbon::parse($this->currentMonth)) - ->extraAttributes(['class' => 'fullcalendar']), + ->visible(auth()->user()->getRoleNames()->count() > 1), Action::make('Shifts assignment') ->action(fn () => $this->runAlgorithm()) ->label(__('Shifts assignment')) ->icon('heroicon-o-play') - ->visible(current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) && Carbon::today()->startOfMonth() <= Carbon::parse($this->currentMonth)) - ->extraAttributes(['class' => 'fullcalendar']), + ->visible(auth()->user()->getRoleNames()->count() > 1), Action::make('Reset assignment') ->action(fn () => $this->resetShifts()) ->label(__('Reset assignment')) ->icon('heroicon-o-arrow-path') - ->visible(current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) && Carbon::today()->startOfMonth() <= Carbon::parse($this->currentMonth)) - ->extraAttributes(['class' => 'fullcalendar']), + ->visible(auth()->user()->getRoleNames()->count() > 1), ]), ]; } } if ($this->filter) { - return array_merge(self::activeFilters(), [ - self::resetFilters(), - $this->model::getFilters($this) - ->closeModalByClickingAway(false), - ]); + return array_merge( + $actions ?? [], + self::activeFilters(), [ + self::resetFilters(), + $this->model::getFilters($this) + ->closeModalByClickingAway(false), + ]); } return array_merge( @@ -269,8 +280,7 @@ protected function resetFilters() $this->filter = false; $this->filterData = []; $this->refreshRecords(); - }) - ->extraAttributes(['class' => 'fullcalendar']); + }); } protected function activeFilters() @@ -281,12 +291,10 @@ protected function activeFilters() return Action::make($tag) ->label(__($tag)) ->disabled() - ->badge() - ->extraAttributes(['class' => 'fullcalendar']); + ->badge(); }); return $tags->toArray(); - } public function getConfig(): array @@ -307,7 +315,7 @@ protected function modalActions(): array || ($this->model == Shift::class && $this->type == 'my' && array_intersect(auth()->user()->getRoleNames()->toArray(), ['manager', 'shifts-assignment', 'department-commander', 'team-commander'])) ) { if ($this->model == Shift::class) { - return array_merge($basicActions, $changeAction); + return array_merge($changeAction, $basicActions); } return $basicActions; @@ -334,6 +342,9 @@ protected function getBasicActions() 'end_date' => $arguments['event']['end'] ?? $record->end_date, ]; }) + ->visible(function ($record) { + return $record->start_date >= now(); + }) ->modalCloseButton(false) ->modalCancelAction(false) ->modalSubmitAction(false) @@ -372,6 +383,7 @@ protected function getBasicActions() ]; }) ->modalHeading(__('Edit').' '.$this->model::getTitle()) + ->outlined() ->action(function (array $data, array $arguments, Model $record): void { $data = method_exists($this->model, 'setData') ? $data = $this->model::setData($record, $data) : $data; if ($arguments['cancel'] ?? false) { @@ -391,6 +403,7 @@ protected function getBasicActions() } }), DeleteAction::make() + ->outlined() ->label(__('Delete')), ]; } @@ -400,9 +413,11 @@ protected function getChangeActions() return [ Shift::exchangeAction() ->visible(fn (): bool => $this->displayButton()) + ->outlined() ->cancelParentActions(), Shift::changeAction() ->visible(fn (): bool => $this->displayButton()) + ->outlined() ->cancelParentActions(), ]; } diff --git a/app/Filament/Widgets/ChartWidget.php b/app/Filament/Widgets/ChartWidget.php index be7e360..e64e976 100644 --- a/app/Filament/Widgets/ChartWidget.php +++ b/app/Filament/Widgets/ChartWidget.php @@ -25,9 +25,9 @@ protected function getFormSchema(): array Radio::make('ChartType') ->default('bar') ->options([ - 'line' => 'Line', - 'bar' => 'Col', - 'area' => 'Area', + 'line' => __('Line'), + 'bar' => __('Col'), + 'area' => __('Area'), ]) ->inline(true) ->label(__('Type')), @@ -35,11 +35,11 @@ protected function getFormSchema(): array ->schema([ Toggle::make('ordersChartMarkers') ->default(false) - ->label('Markers'), + ->label(__('Markers')), Toggle::make('ordersChartGrid') ->default(false) - ->label('Grid'), + ->label(__('Grid')), ]), Select::make('data') ->default('points') diff --git a/app/Filters/NumberFilter.php b/app/Filters/NumberFilter.php index 0598c6f..2116df5 100644 --- a/app/Filters/NumberFilter.php +++ b/app/Filters/NumberFilter.php @@ -168,7 +168,7 @@ function () use ($allObjects, $data, $query) { $indicators = []; if (! empty($data['range_between_from']) || ! empty($data['range_between_to'])) { - $indicators[] = Indicator::make(__(':label '.__('Is between').' :fromValue '.__('And').' :toValue', [ + $indicators[] = Indicator::make(__('Range between', [ 'label' => $this->getLabel(), 'fromValue' => $data['range_between_from'], 'toValue' => $data['range_between_to'], @@ -178,7 +178,7 @@ function () use ($allObjects, $data, $query) { } if (! empty($data['range_equal'])) { - $indicators[] = Indicator::make(__(':label '.__('Is equal').' to :value', [ + $indicators[] = Indicator::make(__('Range equal', [ 'label' => $this->getLabel(), 'value' => $data['range_equal'], ])) @@ -186,7 +186,7 @@ function () use ($allObjects, $data, $query) { } if (! empty($data['range_not_equal'])) { - $indicators[] = Indicator::make(__(':label '.__('Is not equal').' to :value', [ + $indicators[] = Indicator::make(__('Range not equal', [ 'label' => $this->getLabel(), 'value' => $data['range_not_equal'], ])) @@ -194,7 +194,7 @@ function () use ($allObjects, $data, $query) { } if (! empty($data['range_greater_than'])) { - $indicators[] = Indicator::make(__(':label '.__('Is greater than').' :value', [ + $indicators[] = Indicator::make(__('Range greater than', [ 'label' => $this->getLabel(), 'value' => $data['range_greater_than'], ])) @@ -202,7 +202,7 @@ function () use ($allObjects, $data, $query) { } if (! empty($data['range_greater_than_equal'])) { - $indicators[] = Indicator::make(__(':label '.__('Is greater than or equal').' :value', [ + $indicators[] = Indicator::make(__('Range greater than equal', [ 'label' => $this->getLabel(), 'value' => $data['range_greater_than_equal'], ])) @@ -210,7 +210,7 @@ function () use ($allObjects, $data, $query) { } if (! empty($data['range_less_than'])) { - $indicators[] = Indicator::make(__(':label '.__('Is less than').' :value', [ + $indicators[] = Indicator::make(__('Range less than', [ 'label' => $this->getLabel(), 'value' => $data['range_less_than'], ])) @@ -218,7 +218,7 @@ function () use ($allObjects, $data, $query) { } if (! empty($data['range_less_than_equal'])) { - $indicators[] = Indicator::make(__(':label '.__('Is less than or equal').' :value', [ + $indicators[] = Indicator::make(__('Range less than equal', [ 'label' => $this->getLabel(), 'value' => $data['range_less_than_equal'], ])) diff --git a/app/Livewire/MyDatabaseNotifications.php b/app/Livewire/MyDatabaseNotifications.php index d8f5440..61cd545 100644 --- a/app/Livewire/MyDatabaseNotifications.php +++ b/app/Livewire/MyDatabaseNotifications.php @@ -3,16 +3,36 @@ namespace App\Livewire; use App\Filament\Notifications\MyNotification; +use App\Models\Constraint; use App\Models\Shift; use App\Models\Soldier; use App\Models\User; use App\Services\ChangeAssignment; +use Filament\Facades\Filament; use Filament\Notifications\Actions\Action as NotificationAction; use Filament\Notifications\Livewire\DatabaseNotifications; +use Illuminate\Contracts\Auth\Authenticatable; +use Illuminate\Contracts\View\View; +use Illuminate\Database\Eloquent\Model; use Livewire\Attributes\On; class MyDatabaseNotifications extends DatabaseNotifications { + public function getUser(): Model|Authenticatable|null + { + return Filament::auth()->user(); + } + + public function getPollingInterval(): ?string + { + return Filament::getDatabaseNotificationsPollingInterval(); + } + + public function getTrigger(): View + { + return view('filament-panels::components.topbar.database-notifications-trigger'); + } + #[On('confirmExchange')] public function confirmExchange($approverRole, $soldierAId, $soldierBId, $shiftAId, $shiftBId, $requesterId) { @@ -829,6 +849,54 @@ protected static function getShiftsAssignments() })->get(); } + #[On('confirmConstraint')] + public function confirmConstraint($user, $constraintName, $startDate, $endDate) + { + $this->confirmConstraintNotification($user, $constraintName, $startDate, $endDate); + } + + protected function confirmConstraintNotification($user, $constraintName, $startDate, $endDate) + { + Constraint::create([ + 'constraint_type' => $constraintName, + 'start_date' => $startDate, + 'end_date' => $endDate, + 'soldier_id' => User::find($user)->userable_id, + ]); + $this->sendNotification( + __('Constraint request approved'), + __('Commander approved create constraint', [ + 'name' => User::find($user)->displayName, + 'constraintName' => $constraintName, + 'startDate' => $startDate, + 'endDate' => $endDate, + ]), + [], + User::find($user) + ); + } + + #[On('denyConstraint')] + public function denyConstraint($user, $constraintName, $startDate, $endDate) + { + $this->denyConstraintNotification($user, $constraintName, $startDate, $endDate); + } + + protected function denyConstraintNotification($user, $constraintName, $startDate, $endDate) + { + $this->sendNotification( + __('Constraint request rejected'), + __('Commander deny create constraint', [ + 'name' => User::find($user)->displayName, + 'constraintName' => $constraintName, + 'startDate' => $startDate, + 'endDate' => $endDate, + ]), + [], + User::find($user) + ); + } + protected function sendNotification($title, $body, $actions, $user, $commonKey = null) { MyNotification::make() diff --git a/app/Models/Constraint.php b/app/Models/Constraint.php index fc77d91..502938f 100644 --- a/app/Models/Constraint.php +++ b/app/Models/Constraint.php @@ -12,10 +12,11 @@ use Filament\Forms\Components\Select; use Filament\Forms\Components\ToggleButtons; use Filament\Forms\Get; +use Filament\Notifications\Actions\Action as NotificationAction; +use Filament\Notifications\Notification; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; -use Illuminate\Support\Facades\DB; class Constraint extends Model { @@ -48,9 +49,15 @@ public static function getSchema(): array ->label(__('Constraint Name')) ->reactive() ->live() + ->hiddenOn('view') ->inline() ->options(fn (Get $get) => self::availableOptions($get('start_date'), $get('end_date'))) ->afterStateUpdated(fn (callable $set, $state, Get $get) => self::updateDates($set, $state, $get)), + ToggleButtons::make('constraint_type') + ->label(__('Constraint Name')) + ->inline() + ->visibleOn('view') + ->options(fn (Constraint $constraint) => [$constraint->constraint_type]), Hidden::make('start_date') ->required(), Hidden::make('end_date') @@ -70,6 +77,48 @@ public static function getSchema(): array ]; } + public static function requestConstraint($data) + { + $commander = Soldier::find(auth()->user()->userable_id)->team->commander->user; + Notification::make() + ->title(__('Do you approve the constraint request')) + ->body( + __('Shift details', [ + 'name' => Soldier::find(auth()->user()->userable_id)->user->displayName, + 'startDate' => $data['start_date'], + 'endDate' => $data['end_date'], + 'type' => $data['constraint_type'], + ]) + ) + ->actions( + [ + NotificationAction::make(__('Confirm')) + ->button() + ->icon('heroicon-s-hand-thumb-up') + ->color('success') + ->dispatch('confirmConstraint', [ + 'user' => auth()->user()->id, + 'constraintName' => $data['constraint_type'], + 'startDate' => $data['start_date'], + 'endDate' => $data['end_date'], + ]) + ->close(), + NotificationAction::make(__('Deny')) + ->button() + ->icon('heroicon-m-hand-thumb-down') + ->color('danger') + ->dispatch('denyConstraint', [ + 'user' => auth()->user()->id, + 'constraintName' => $data['constraint_type'], + 'startDate' => $data['start_date'], + 'endDate' => $data['end_date'], + ]) + ->close(), + ] + ) + ->sendToDatabase($commander, true); + } + private static function availableOptions($startDate, $endDate): array { $start_date = Carbon::parse($startDate); @@ -87,16 +136,23 @@ private static function availableOptions($startDate, $endDate): array unset($options[ConstraintType::LOW_PRIORITY_NOT_WEEKEND->value]); } $usedCounts = self::getUsedCountsForCurrentMonth($startDate, $endDate); - $limits =Soldier::where('id', auth()->user()->userable_id)->pluck('constraints_limit')->first() + $limits = Soldier::where('id', auth()->user()->userable_id)->pluck('constraints_limit')->first() ? Soldier::where('id', auth()->user()->userable_id)->pluck('constraints_limit')->first() : ConstraintType::getLimit(); $constraintsWithinLimit = []; + + $queryConstraints = Constraint::where('soldier_id', auth()->user()->userable_id) + ->whereBetween('start_date', [$startDate, $endDate]) + ->pluck('constraint_type') + ->toArray(); + foreach ($options as $constraint => $label) { $used = $usedCounts[$constraint] ?? 0; $limit = $limits[$constraint] ?? 0; - if ($limit === 0 || $used < $limit) { - $constraintsWithinLimit[$constraint] = $label; + if (! in_array($constraint, $queryConstraints)) { + $constraintsWithinLimit[$constraint] = $label; + } } } @@ -189,8 +245,8 @@ public function getConstraintNameAttribute() $translatedConstraint = __($this->constraint_type); return $this->soldier_id == auth()->user()->userable_id - ? $translatedConstraint - : $translatedConstraint.' '.$this->soldier_name; + ? $translatedConstraint + : $translatedConstraint.' '.$this->soldier_name; } public function getConstraintColorAttribute() @@ -204,7 +260,6 @@ public static function getFilters($calendar) ->iconButton() ->label(__('Filter')) ->icon('heroicon-o-funnel') - ->extraAttributes(['class' => 'fullcalendar']) ->form(function () use ($calendar) { $constraints = $calendar->getEventsByRole(); $soldiersConstraints = array_filter($constraints->toArray(), fn ($constraint) => $constraint['soldier_id'] !== null); @@ -212,12 +267,15 @@ public static function getFilters($calendar) return [ Select::make('soldier_id') ->label(__('Soldier')) - ->options(fn (): array => collect($soldiersConstraints)->mapWithKeys(fn ($constraint) => [$constraint['soldier_id'] => User::where('userable_id', $constraint['soldier_id']) - ->first()?->displayName])->toArray()) + ->options(fn (): array => collect($soldiersConstraints)->mapWithKeys(fn ($constraint) => [ + $constraint['soldier_id'] => User::where('userable_id', $constraint['soldier_id']) + ->first()?->displayName, + ])->toArray()) ->multiple(), ]; }) ->modalSubmitActionLabel(__('Filter')) + ->modalCancelAction(false) ->action(function (array $data) use ($calendar) { $calendar->filterData = $data; $calendar->filter = $data['soldier_id'] === [] ? false : true; diff --git a/app/Models/Shift.php b/app/Models/Shift.php index 1003bed..5306a1e 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -167,7 +167,7 @@ protected static function getOptions($shift): array ->put('me', __('Me')) ->toArray(); } - if (current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) != 'manager' && current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) != 'shifts-assignment') { + if (! in_array('manager', auth()->user()->getRoleNames()->toArray()) && ! in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray())) { return collect($options) ->put('my_soldiers', __('My Soldiers')) ->toArray(); @@ -179,8 +179,7 @@ protected static function getOptions($shift): array public static function exchangeAction(): Action { return Action::make('Exchange') - ->label(__('Exchange')) - ->icon('heroicon-s-arrow-path') + ->label(__('Exchange assignment')) ->cancelParentActions() ->closeModalByClickingAway(false) ->modalCancelAction(false) @@ -240,12 +239,12 @@ function ($shift) { ->icon('heroicon-s-arrow-path') ->color('primary') ->disabled(fn (): bool => ! session()->get('selected_shift')) - ->visible(fn (): bool => current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))), + ->visible(fn (): bool => auth()->user()->getRoleNames()->count() > 1), $action->makeExtraModalAction(__('Request'), ['request' => true]) ->icon('heroicon-s-arrow-path') ->disabled(fn (): bool => ! session()->get('selected_shift')) ->color('primary') - ->visible(fn (): bool => ! current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))), + ->visible(fn (): bool => ! auth()->user()->getRoleNames()->count() > 1), $action->makeExtraModalAction(__('Cancel'), ['cancel' => true]), ]; }) @@ -424,7 +423,7 @@ protected static function soldierExchange($record, $shift) ->icon('heroicon-s-hand-thumb-up') ->button() ->dispatch('confirmExchange', [ - 'approverRole' => current(array_diff(collect(Soldier::find($shift->soldier_id)->user->getRoleNames())->toArray(), ['soldier'])), + 'approverRole' => auth()->user()->getRoleNames()->count() > 1 ? Soldier::find($record->soldier_id)->user->getRoleNames()->toArray()[1] : 'soldier', 'soldierAId' => $record->soldier_id, 'soldierBId' => $shift->soldier_id, 'shiftAId' => $record->id, @@ -438,7 +437,7 @@ protected static function soldierExchange($record, $shift) ->icon('heroicon-m-hand-thumb-down') ->button() ->dispatch('denyExchange', [ - 'rejectorRole' => current(array_diff(collect(Soldier::find($shift->soldier_id)->user->getRoleNames())->toArray(), ['soldier'])), + 'rejectorRole' => auth()->user()->getRoleNames()->count() > 1 ? Soldier::find($record->soldier_id)->user->getRoleNames()->toArray()[1] : 'soldier', 'soldierAId' => $record->soldier_id, 'soldierBId' => $shift->soldier_id, 'shiftAId' => $record->id, @@ -455,8 +454,7 @@ protected static function soldierExchange($record, $shift) public static function changeAction(): Action { return Action::make('Change') - ->label(__('Change')) - ->icon('heroicon-o-arrow-uturn-up') + ->label(__('Change assignment')) ->cancelParentActions() ->closeModalByClickingAway(false) ->modalCancelAction(false) @@ -490,7 +488,7 @@ function ($record) use (&$soldiers) { ->inline() ->live() ->default(fn () => 'matching') - ->visible(fn (): bool => current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))) + ->visible(fn (): bool => auth()->user()->getRoleNames()->count() > 1) ->afterStateUpdated(function (callable $set) { $set('soldier', null); session()->put('selected_soldier', false); @@ -528,12 +526,12 @@ function (Action $action): array { ->icon('heroicon-o-arrow-uturn-up') ->color('primary') ->disabled(fn (): bool => ! session()->get('selected_soldier')) - ->visible(fn (): bool => current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))), + ->visible(fn (): bool => auth()->user()->getRoleNames()->count() > 1), $action->makeExtraModalAction(__('Request'), ['request' => true]) ->icon('heroicon-o-arrow-uturn-up') ->disabled(fn (): bool => ! session()->get('selected_soldier')) ->color('primary') - ->visible(fn (): bool => ! current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier']))), + ->visible(fn (): bool => ! auth()->user()->getRoleNames()->count() > 1), $action->makeExtraModalAction(__('Cancel'), ['cancel' => true]), ]; } @@ -692,7 +690,7 @@ protected static function soldierChange($record, $soldierId) ->icon('heroicon-s-hand-thumb-up') ->button() ->dispatch('confirmChange', [ - 'approverRole' => current(array_diff(collect(Soldier::find($record->soldier_id)->user->getRoleNames())->toArray(), ['soldier'])), + 'approverRole' => auth()->user()->getRoleNames()->count() > 1 ? Soldier::find($record->soldier_id)->user->getRoleNames()->toArray()[1] : 'soldier', 'shiftId' => $record->id, 'soldierId' => $soldierId, 'requesterId' => null, @@ -704,7 +702,7 @@ protected static function soldierChange($record, $soldierId) ->icon('heroicon-m-hand-thumb-down') ->button() ->dispatch('denyChange', [ - 'rejectorRole' => current(array_diff(collect(Soldier::find($record->soldier_id)->user->getRoleNames())->toArray(), ['soldier'])), + 'rejectorRole' => auth()->user()->getRoleNames()->count() > 1 ? Soldier::find($record->soldier_id)->user->getRoleNames()->toArray()[1] : 'soldier', 'shiftId' => $record->id, 'soldierId' => $soldierId, 'requesterId' => null, @@ -740,7 +738,6 @@ public static function getFilters($calendar) ->iconButton() ->label(__('Filter')) ->icon('heroicon-o-funnel') - ->extraAttributes(['class' => 'fullcalendar']) ->form(function () use ($calendar) { $shifts = $calendar->getEventsByRole(); $soldiersShifts = array_filter($shifts->toArray(), fn ($shift) => $shift['soldier_id'] !== null); @@ -760,6 +757,7 @@ public static function getFilters($calendar) ]; }) ->modalSubmitAction(false) + ->modalCancelAction(false) ->extraModalFooterActions(fn (Action $action): array => [ $action->makeModalSubmitAction('Filter', arguments: ['Filter' => true])->color('success')->label(__('Filter')), $action->makeModalSubmitAction('Unassigned shifts', arguments: ['UnassignedShifts' => true])->color('primary')->label(__('Unassigned shifts')), @@ -770,7 +768,8 @@ public static function getFilters($calendar) Task::whereIn('id', $data['type']) ->pluck('type') ) - ->pluck('id'); + ->pluck('id') + ->toArray(); if ($arguments['Filter'] ?? false) { $calendar->filterData = $data; $calendar->filter = ! ($data['soldier_id'] === [] && $data['type'] === []); diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 628350b..4a7d272 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -27,11 +27,6 @@ public function boot(): void fn (): string => Blade::render('@livewire(\'set-locale\')'), ); - FilamentView::registerRenderHook( - PanelsRenderHook::USER_MENU_BEFORE, - fn (): string => Blade::render('@livewire(\'my-database-notifications\')'), - ); - FilamentView::registerRenderHook( PanelsRenderHook::SIDEBAR_FOOTER, fn (): string => Blade::render('picture'), diff --git a/app/Resources/ConstraintResource.php b/app/Resources/ConstraintResource.php index 744289e..66fa3ab 100644 --- a/app/Resources/ConstraintResource.php +++ b/app/Resources/ConstraintResource.php @@ -34,7 +34,7 @@ public static function getPluralModelLabel(): string public static function canAccess(): bool { - return current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) ? true : false; + return auth()->user()->getRoleNames()->count() > 1; } public static function canCreate(): bool diff --git a/app/Resources/ProfileResource.php b/app/Resources/ProfileResource.php index e819933..7135d71 100644 --- a/app/Resources/ProfileResource.php +++ b/app/Resources/ProfileResource.php @@ -53,7 +53,7 @@ public static function form(Form $form): Form Select::make('qualifications') ->label(__('Qualifications')) ->placeholder(__('Select qualifications')) - ->options(Task::all()->pluck('name', 'name')), + ->options(Task::all()->pluck('type', 'type')), DatePicker::make('enlist_date') ->label(__('Enlist date')) ->seconds(false), diff --git a/app/Resources/ShiftResource.php b/app/Resources/ShiftResource.php index 64f3d4b..4a7b4e7 100644 --- a/app/Resources/ShiftResource.php +++ b/app/Resources/ShiftResource.php @@ -34,7 +34,7 @@ public static function getPluralModelLabel(): string public static function canAccess(): bool { - return current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) ? true : false; + return auth()->user()->getRoleNames()->count() > 1; } public static function canCreate(): bool diff --git a/app/Resources/SoldierResource.php b/app/Resources/SoldierResource.php index 1d838e2..f18854e 100644 --- a/app/Resources/SoldierResource.php +++ b/app/Resources/SoldierResource.php @@ -40,7 +40,6 @@ use Filament\Tables\Filters\SelectFilter; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; -use Illuminate\Support\Facades\Session; class SoldierResource extends Resource { @@ -62,8 +61,6 @@ public static function form(Form $form): Form public static function table(Table $table): Table { - Session::put('is_replica', false); - return $table ->columns([ TextColumn::make('user') @@ -88,25 +85,27 @@ public static function table(Table $table): Table ->sortable(), TextColumn::make('role') ->label(__('Role')) - ->visible(collect(auth()->user()->getRoleNames()) - ->intersect(['manager', 'shifts-assignment', 'department-commander']) - ->isNotEmpty()) ->default( function ($record) { - $roles = Soldier::find($record->id)->user->getRoleNames()->first(); + $roles = Soldier::find($record->id)->user->getRoleNames(); - return match ($roles) { - 'manager' => __('Manager'), - 'shifts-assignment' => __('A shifts assignment'), - 'department-commander' => __('Department commander'), - 'team-commander' => __('Team commander'), - 'soldier' => __('Soldier'), - default => null, - }; + return array_map(function ($role) { + return match ($role) { + 'manager' => __('Manager'), + 'shifts-assignment' => __('A shifts assignment'), + 'department-commander' => __('Department commander'), + 'team-commander' => __('Team commander'), + 'soldier' => __('Soldier'), + default => __('No roles'), + }; + }, $roles->toArray()); } ), TextColumn::make('teamSoldier') ->label(__('Team')) + ->visible(collect(auth()->user()->getRoleNames())->intersect(['manager', 'department-commander'])->isNotEmpty()) + ->placeholder(__('Not associated')) + ->default(function ($record) { $soldier = Soldier::find($record->id); @@ -158,7 +157,7 @@ function ($record) { ->label(__('Qualifications')) ->multiple() ->searchable() - ->options(Task::all()->pluck('name', 'name')) + ->options(Task::all()->pluck('type', 'type')) ->query(function (Builder $query, array $data) { return collect($data['values'])->map(function ($qualification) use ($query) { return $query->whereJsonContains('qualifications', $qualification); @@ -221,7 +220,13 @@ function ($record) { DeleteAction::make() ->label(__('Delete')) ->modalHeading(__('Delete').' '.self::getModelLabel()), - ViewAction::make(), + ViewAction::make() + ->label(__('Display')) + ->mutateRecordDataUsing(function (array $data, $record): array { + $data['shifts_assignment'] = in_array('shifts-assignment', User::where('userable_id', $record->id)->first()->getRoleNames()->toArray()); + + return $data; + }), Action::make('update reserve days') ->label(__('Update reserve days')) ->icon('heroicon-o-pencil') @@ -245,7 +250,6 @@ function ($record) { ReplicateAction::make() ->icon('heroicon-o-document-duplicate') ->color('success') - ->before(fn () => Session::put('is_replica', true)) ->after(function (Soldier $replica): void { redirect()->route('filament.app.resources.soldiers.edit', ['record' => $replica->id]); }) @@ -297,11 +301,6 @@ public static function personalDetails(): Fieldset ->password() ->revealable() ->length(7) - ->hidden(function () { - $isReplica = Session::get('is_replica'); - - return request()->route()->getName() === 'filament.app.resources.soldiers.edit' && ! $isReplica; - }) ->hiddenOn('view') ->required(), ])->columns(3); @@ -319,7 +318,7 @@ public static function soldierDetails(): array ->label(__('Gender')) ->grouped() ->required(), - Toggle::make('shifts-assignment') + Toggle::make('shifts_assignment') ->label(__('A shifts assignment')) ->visible(auth()->user()->getRoleNames()->contains('manager')), DatePicker::make('enlist_date') @@ -404,56 +403,61 @@ public static function constraints(): array public static function constraintsLimit() { return [ - Group::make([ - TextInput::make('Not weekend') - ->label(__('Not weekend')) - ->numeric() - ->minValue(0) - ->default(ConstraintType::getLimit()['Not weekend']), - TextInput::make('Low priority not weekend') - ->label(__('Low priority not weekend')) - ->numeric() - ->minValue(0) - ->default(ConstraintType::getLimit()['Low priority not weekend']), - TextInput::make('Not task') - ->label(__('Not task')) - ->numeric() - ->minValue(0) - ->default(ConstraintType::getLimit()['Not task']), - TextInput::make('Low priority not task') - ->label(__('Low priority not task')) - ->numeric() - ->minValue(0) - ->default(ConstraintType::getLimit()['Low priority not task']), - TextInput::make('Not evening') - ->label(__('Not evening')) - ->numeric() - ->minValue(0) - ->default(ConstraintType::getLimit()['Not evening']), - TextInput::make('Not Thursday evening') - ->label(__('Not Thursday evening')) - ->numeric() - ->minValue(0) - ->default(ConstraintType::getLimit()['Not Thursday evening']), - TextInput::make('Vacation') - ->label(__('Vacation')) - ->numeric() - ->minValue(0) - ->default(ConstraintType::getLimit()['Vacation']), - TextInput::make('Medical') - ->label(__('Medical')) - ->numeric() - ->minValue(0) - ->default(ConstraintType::getLimit()['Medical']), - TextInput::make('School') - ->label(__('School')) - ->numeric() - ->minValue(0) - ->default(ConstraintType::getLimit()['School']), - ]) - ->statePath('constraints_limit') - ->columns(9) - ->columnSpanFull(), + Fieldset::make('constraints') + ->label(__('Constraints limit')) + ->schema([ + Group::make([ + TextInput::make('Not weekend') + ->label(__('Not weekend')) + ->numeric() + ->minValue(0) + ->default(ConstraintType::getLimit()['Not weekend']), + TextInput::make('Low priority not weekend') + ->label(__('Low priority not weekend')) + ->numeric() + ->minValue(0) + ->default(ConstraintType::getLimit()['Low priority not weekend']), + TextInput::make('Not task') + ->label(__('Not task')) + ->numeric() + ->minValue(0) + ->default(ConstraintType::getLimit()['Not task']), + TextInput::make('Low priority not task') + ->label(__('Low priority not task')) + ->numeric() + ->minValue(0) + ->default(ConstraintType::getLimit()['Low priority not task']), + TextInput::make('Not evening') + ->label(__('Not evening')) + ->numeric() + ->minValue(0) + ->default(ConstraintType::getLimit()['Not evening']), + TextInput::make('Not Thursday evening') + ->label(__('Not Thursday evening')) + ->numeric() + ->minValue(0) + ->default(ConstraintType::getLimit()['Not Thursday evening']), + TextInput::make('Vacation') + ->label(__('Vacation')) + ->numeric() + ->minValue(0) + ->default(ConstraintType::getLimit()['Vacation']), + TextInput::make('Medical') + ->label(__('Medical')) + ->numeric() + ->minValue(0) + ->default(ConstraintType::getLimit()['Medical']), + TextInput::make('School') + ->label(__('School')) + ->numeric() + ->minValue(0) + ->default(ConstraintType::getLimit()['School']), + ]) + ->statePath('constraints_limit') + ->columns(9) + ->columnSpan(3) + ->label('Constraints'), + ]), ]; } diff --git a/app/Resources/SoldierResource/Pages/CreateSoldier.php b/app/Resources/SoldierResource/Pages/CreateSoldier.php index a3503c8..c4443d5 100644 --- a/app/Resources/SoldierResource/Pages/CreateSoldier.php +++ b/app/Resources/SoldierResource/Pages/CreateSoldier.php @@ -2,6 +2,7 @@ namespace App\Resources\SoldierResource\Pages; +use App\Models\User; use App\Resources\SoldierResource; use Filament\Forms\Components\Section; use Filament\Forms\Components\Wizard\Step; @@ -9,7 +10,6 @@ use Filament\Notifications\Notification; use Filament\Resources\Pages\CreateRecord; use Filament\Resources\Pages\CreateRecord\Concerns\HasWizard; -use Illuminate\Support\Facades\DB; class CreateSoldier extends CreateRecord { @@ -19,8 +19,7 @@ class CreateSoldier extends CreateRecord public function beforeCreate() { - $userName = DB::table('users') - ->where('last_name', $this->data['user']['last_name']) + $userName = User::where('last_name', $this->data['user']['last_name']) ->where('first_name', $this->data['user']['first_name']) ->pluck('last_name', 'first_name'); @@ -40,7 +39,7 @@ public function beforeCreate() protected function afterCreate() { $user = $this->record->user; - $this->data['shifts-assignment'] == 1 ? $user->assignRole('soldier', 'shifts-assignment') : $user->assignRole('soldier'); + $this->data['shifts_assignment'] == 1 ? $user->assignRole('soldier', 'shifts-assignment') : $user->assignRole('soldier'); } protected function getRedirectUrl(): string diff --git a/app/Resources/SoldierResource/Pages/EditSoldier.php b/app/Resources/SoldierResource/Pages/EditSoldier.php index 8de5f13..51ff583 100644 --- a/app/Resources/SoldierResource/Pages/EditSoldier.php +++ b/app/Resources/SoldierResource/Pages/EditSoldier.php @@ -2,14 +2,21 @@ namespace App\Resources\SoldierResource\Pages; +use App\Models\User; use App\Resources\SoldierResource; use Filament\Resources\Pages\EditRecord; -use Illuminate\Support\Facades\Session; class EditSoldier extends EditRecord { protected static string $resource = SoldierResource::class; + protected function mutateFormDataBeforeFill(array $data): array + { + $data['shifts_assignment'] = in_array('shifts-assignment', User::where('userable_id', $this->record->id)->first()->getRoleNames()->toArray()); + + return $data; + } + protected function mutateFormDataBeforeSave(array $data): array { if (! $data['is_reservist']) { @@ -28,7 +35,16 @@ protected function getRedirectUrl(): string protected function afterSave(): void { $user = $this->record->user; - $user->getRoleNames()->isEmpty() ? $user->assignRole('soldier') : null; - Session::put('is_replica', false); + if ($user->getRoleNames()->isEmpty()) { + $this->data['shifts_assignment'] == 1 ? $user->assignRole('soldier', 'shifts-assignment') : $user->assignRole('soldier'); + } else { + $roles = $user->getRoleNames()->toArray(); + if ($this->data['shifts_assignment'] == 1 && ! in_array('shifts-assignment', $roles)) { + $user->assignRole('shifts-assignment'); + } + if ($this->data['shifts_assignment'] == 0 && in_array('shifts-assignment', $roles)) { + $user->removeRole('shifts-assignment'); + } + } } } diff --git a/app/Resources/TaskResource.php b/app/Resources/TaskResource.php index c089c25..e83b22f 100644 --- a/app/Resources/TaskResource.php +++ b/app/Resources/TaskResource.php @@ -407,7 +407,7 @@ protected static function getOptions(Get $get): array ->put('me', __('Me')) ->toArray(); } - if (current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) !== 'manager' && current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) !== 'shifts-assignment') { + if (! in_array('manager', auth()->user()->getRoleNames()->toArray()) && ! in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray())) { return collect($options) ->put('my_soldiers', __('My Soldiers')) ->toArray(); diff --git a/app/Resources/TeamResource.php b/app/Resources/TeamResource.php index 6d657ac..75856bd 100644 --- a/app/Resources/TeamResource.php +++ b/app/Resources/TeamResource.php @@ -11,6 +11,8 @@ use Filament\Forms\Components\Select; use Filament\Forms\Components\TextInput; use Filament\Forms\Form; +use Filament\Forms\Get; +use Filament\Forms\Set; use Filament\Notifications\Actions as NotificationsService; use Filament\Notifications\Notification; use Filament\Resources\Resource; @@ -59,6 +61,12 @@ public static function form(Form $form): Form return [$user->userable_id => $user->displayName]; }) ) + ->live() + ->afterStateUpdated(function ($state, Get $get, Set $set) { + if (! empty($get('members')) && collect($get('members'))->contains($state)) { + $set('members', collect($get('members'))->filter(fn ($member) => $member !== $state)); + } + }) ->optionsLimit(Soldier::count()) ->searchable() ->required(), @@ -72,12 +80,15 @@ public static function form(Form $form): Form Select::make('members') ->label(__('Members')) ->options( - fn () => Cache::remember('users', 30 * 60, function () { + fn (Get $get) => Cache::remember('users', 30 * 60, function () { return User::all(); + })->filter(function ($user) use ($get): bool { + return $user->userable_id !== (int) $get('commander_id'); })->mapWithKeys(function ($user) { return [$user->userable_id => $user->displayName]; }) ) + ->live() ->optionsLimit(Soldier::count()) ->placeholder(__('Add a team member')) ->multiple() @@ -133,7 +144,7 @@ public static function table(Table $table): Table ->filter(function ($user) use ($record) { $soldier_team_id = Soldier::where('id', $user->userable_id)->pluck('team_id'); - return $soldier_team_id->first() !== $record->id; + return $soldier_team_id->first() !== $record->id && $record->commander_id !== $user->userable_id; }) ->mapWithKeys(function ($user) { return [$user->userable_id => $user->displayName]; diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 6ac6c84..03f12af 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -23,7 +23,7 @@ public function run(): void // Soldiers - $user = User::factory()->create([ + User::factory()->create([ 'first_name' => 'name', 'last_name' => 'family', 'password' => '1234567', @@ -36,8 +36,19 @@ public function run(): void 'course' => fake()->numberBetween(0, 5), 'is_reservist' => false, ])->id, - ]); - $user->assignRole('manager'); + ])->assignRole('manager'); + + User::factory()->create([ + 'first_name' => 'meshabetz mishmarot', + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['hatasa', 'tazpit', 'shmira'], + 'capacity' => 6, + 'max_weekends' => 6, + 'max_shifts' => 7, + 'max_nights' => 6, + 'is_reservist' => false, + ])->id, + ])->assignRole(['soldier', 'shifts-assignment']); for ($i = 0; $i < 15; $i++) { $user = User::factory()->create([ @@ -51,7 +62,7 @@ public function run(): void 'course' => fake()->numberBetween(0, 5), 'is_reservist' => false, ])->id, - ]); + ])->assignRole('soldier'); $this->createConstraints($user->id); } @@ -67,7 +78,7 @@ public function run(): void 'course' => fake()->numberBetween(0, 5), 'is_reservist' => false, ])->id, - ]); + ])->assignRole('soldier'); $this->createConstraints($user->id); } @@ -83,7 +94,7 @@ public function run(): void 'course' => fake()->numberBetween(0, 5), 'is_reservist' => false, ])->id, - ]); + ])->assignRole('soldier'); $this->createConstraints($user->id); } @@ -99,7 +110,7 @@ public function run(): void 'course' => fake()->numberBetween(0, 5), 'is_reservist' => false, ])->id, - ]); + ])->assignRole('soldier'); $this->createConstraints($user->id); } @@ -115,7 +126,7 @@ public function run(): void 'course' => fake()->numberBetween(0, 5), 'is_reservist' => false, ])->id, - ]); + ])->assignRole('soldier'); $this->createConstraints($user->id); } @@ -131,7 +142,7 @@ public function run(): void 'course' => fake()->numberBetween(0, 5), 'is_reservist' => false, ])->id, - ]); + ])->assignRole('soldier'); $this->createConstraints($user->id); } diff --git a/lang/en.json b/lang/en.json index c2c27c8..04581a2 100644 --- a/lang/en.json +++ b/lang/en.json @@ -1,19 +1,6 @@ { - "Commander notification of approving exchange shift request for the requesting soldier": "Hello :requestingSoldierName!
Your request to exchange your :shiftAName shift
From :shiftAStart to :shiftAEnd
With :approvingSoldierName soldier for :shiftBName shift
From :shiftBStart to :shiftBEnd
Has been approved and the exchange has been made
Have a good day!
:commanderName", - "Commander notification of approving exchange shift request for the approving soldier": "Hello :approvingSoldierName!
:requestingSoldierName 's request to exchange your :shiftBName shift
From :shiftBStart to :shiftBEnd
With his :shiftAName shift
From :shiftAStart to :shiftAEnd
Has been approved and the exchange has been made
Have a good day!
:commanderName", - "Commander notification of rejection exchange shift request for the requesting soldier": "Hello :requestingSoldierName!
Your request to exchange your :shiftAName shift
From :shiftAStart to :shiftAEnd
With :rejectingSoldierName soldier for :shiftBName shift
From :shiftBStart to :shiftBEnd
Has been rejected.
Have a good day!
:commanderName", - "Commander notification of rejection exchange shift request for the rejection soldier": "Hello :rejectingSoldierName!
The :requestingSoldierName 's request to exchange your :shiftBName shift
From :shiftBStart to :shiftBEnd
With his :shiftAName shift
From :shiftAStart to :shiftAEnd
Has been rejected.
Have a good day!
:commanderName", - "Soldier notification of rejection exchange shift request":"Hello :requestingSoldierName!
Your request to exchange my :shiftBName shift
From :shiftBStart to :shiftBEnd
With :shiftAName shift
From :shiftAStart to :shiftAEnd
Has been rejected.
Have a good day!
:rejectingSoldierName", - "Commander notification of approving change shift request for the requesting soldier":"Hello :requestingSoldierName!
Your request to change your :shiftName shift
From :shiftStart to :shiftEnd
Has been approved and the change has been made.
Have a good day!
:commanderName", - "Commander notification of approving change shift request for the approving soldier": "Hello :approvingSoldierName!
:requestingSoldierName 's request to change his :shiftName shift
From :shiftStart to :shiftEnd
With you, has been approved and the change has been made.
Have a good day!
:commanderName", - "Commander notification of rejection change shift request for the requesting soldier": "Hello :requestingSoldierName!
Your request to change your :shiftName shift
From :shiftStart to :shiftEnd
With :approvingSoldierName
Has been rejected.
Have a good day!
:commanderName", - "Commander notification of rejection change shift request for the approving soldier":"Hello :approvingSoldierName!
The :requestingSoldierName 's request to change his :shiftName shift
From :shiftStart to :shiftEnd
With you has been rejected.
Have a good day!
:commanderName", - "Soldier notification of rejection change shift request":"Hello :requestingSoldierName!
Your request to change your :shiftName shift
From :shiftStart to :shiftEnd
With me, has been rejected.
Have a good day!
:rejectingSoldierName", - "Commander notification of exchanging shifts for first soldier":"Hello :soldierAName!
Your :shiftAName shift
From :shiftAStart to :shiftAEnd
Replaced with :soldierBName
for :shiftBName shift
From :shiftBStart to :shiftBEnd
Have a good day!
:commander", - "Commander notification of exchanging shifts for second soldier":"Hello :soldierBName!
Your :shiftBName shift
From :shiftBStart to :shiftBEnd
Replaced with :soldierAName
for :shiftAName shift
From :shiftAStart to :shiftAEnd
Have a good day!
:commander", - "Commander notification of changing shifts for first soldier":"Hello :soldierName!:shiftName shift
From :shiftStart to :shiftEnd
Has been assigned to you.
Have a good day!
:commander", - "Commander notification of changing shifts for second soldier":"Hello :soldierName!
Your :shiftName shift
From :shiftStart to :shiftEnd
Has been removed from your assignment.
Have a good day!
:commander", "label":"sum of :data for course :course", + "Shift details":"Soldier :name requests your approval for a constraint request of type :type from date :startDate until :endDate.
Do you approve?", "Shifts assignment notification of exchanging shifts for first soldier": "Hello :soldierAName!
Your :shiftAName shift
From :shiftAStart to :shiftAEnd
Has been exchanged with :soldierBName
for :shiftBName shift
From :shiftBStart to :shiftBEnd
Have a good day!
:shiftsAssignmentName", "Shifts assignment notification of exchanging shifts for second soldier": "Hello :soldierBName!
Your :shiftBName shift
From :shiftBStart to :shiftBEnd
Has been exchanged with :soldierAName
for :shiftAName shift
From :shiftAStart to :shiftAEnd
Have a good day!
:shiftsAssignmentName", "Shifts assignment notification of exchanging shifts for shifts assignment": "Hello :shiftsAssignmentName!
:shiftAName shift of :soldierAName
From :shiftAStart to :shiftAEnd
Has been exchanged with :soldierBName
for :shiftBName shift
From :shiftBStart to :shiftBEnd
Have a good day!
:shiftsAssignment2Name", @@ -44,5 +31,14 @@ "Request for shift change from soldier": "Hello :soldierName!
Would you like to get my
:shiftName shift
From :shiftStart to :shiftEnd ?
:requestingSoldierName", "File name": ":month month's shifts for :name", "Holiday shift notification": "hello :user!
the shift weight must be updated :task which takes place on: :start_date ", - "Assigned to shift today": ":today
Hello :user!!
Your :task shift will start at :startShift" + "Assigned to shift today": ":today
Hello :user!!
Your :task shift will start at :startShift", + "Range between":":label is between :fromValue and :toValue", + "Range equal":":label is equal to :value", + "Range not equal":":label is not equal to :value", + "Range greater than":":label is greater than :value", + "Range greater than equal":":label is greater than or equal :value", + "Range less than":":label is less than :value", + "Range less than equal":":label is less than or equal :value", + "Commander approved create constraint":"Hello :name!
Your request to create a constraint :constraintName
From :startDate to :endDate
Has been approved!
Have a good day!", + "Commander deny create constraint":"Hello :name!
Your request to create a constraint :constraintName
From :startDate to :endDate
Has been rejected!
Have a good day!" } diff --git a/lang/he.json b/lang/he.json index 7b19879..5dc3aeb 100644 --- a/lang/he.json +++ b/lang/he.json @@ -10,7 +10,6 @@ "Commander notification of deny exchanging shifts for the first soldier": "שלום :soldierAName!
בקשתך להחלפת המשמרת :shiftAName שלך
מ :shiftAStart עד :shiftAEnd
עם החייל :soldierBName בעבור המשמרת :shiftBName שלו
מ :shiftBStart עד :shiftBEnd
נדחתה.
המשך יום טוב!
:commanderName", "Commander notification of deny exchanging shifts for the second soldier": "שלום :soldierBName!
הבקשה של החייל :soldierAName להחליף את המשמרת :shiftBName שלך
מ :shiftBStart עד :shiftBEnd
עם המשמרת :shiftAName שלו
מ :shiftAStart עד :shiftAEnd
נדחתה.
המשך יום טוב!
:commanderName", "Soldier notification of deny exchange shift request": "שלום :soldierAName!
בקשתך להחלפת המשמרת :shiftBName שלך
מ :shiftBStart עד :shiftBEnd
עם המשמרת :shiftAName שלי
מ :shiftAStart עד :shiftAEnd
נדחתה.
המשך יום טוב!
:soldierBName", - "Shifts assignment notification of changing shifts for first soldier": "שלום :soldierName!
המשמרת :shiftName שלך
מ :shiftStart עד :shiftEnd
הוסרה מהקצאתך.
המשך יום טוב!
:shiftsAssignmentName", "Shifts assignment notification of changing shifts for second soldier": "שלום :soldierName!
המשמרת :shiftName
מ :shiftStart עד :shiftEnd
הוקצתה לך.
המשך יום טוב!
:shiftsAssignmentName", "Shifts assignment notification of changing shifts for commander": "שלום :commanderName!
המשמרת :shiftName של החייל :soldierAName
מ :shiftStart עד :shiftEnd
הוקצתה לחייל :soldierBName.
:shiftsAssignmentName", @@ -22,15 +21,12 @@ "Commander notification of deny changing shift request for the first soldier":"שלום :soldierAName!
בקשתך להעביר את המשמרת :shiftName שלך
מ :shiftStart עד :shiftEnd
לחייל :soldierBName
נדחתה.
המשך יום טוב!
:commanderName", "Commander notification of deny changing shift request for the second soldier": "שלום :soldierBName!
בקשת החייל :soldierAName להעביר את המשמרת :shiftName שלו
מ :shiftStart עד :shiftEnd
אליך, נדחתה.
המשך יום טוב!
:commanderName", "Soldier notification of deny changing shift request": "שלום :soldierAName!
בקשתך להעביר את המשמרת :shiftName שלך
מ :shiftStart עד :shiftEnd
אלי, נדחתה.
המשך יום טוב!
:soldierBName", - "Request for shift exchange from shifts assignments": "שלום :shiftsAssignmentName!
האם אתה מאשר לחייל :soldierAName
להחליף את המשמרת :shiftAName שלו
מ :shiftAStart עד :shiftAEnd
עם החייל :soldierBName
בעבור המשמרת :shiftBName שלו
מ :shiftBStart עד :shiftBEnd?", "Request for shift exchange from commander": "שלום :commanderName!
האם אתה מאשר לחייל :soldierAName
להחליף את המשמרת :shiftAName שלו
מ :shiftAStart עד :shiftAEnd
עם החייל :soldierBName
בעבור המשמרת :shiftBName שלו
מ :shiftBStart עד :shiftBEnd?", "Request for shift exchange from soldier": "שלום :soldierAName!
האם תרצה להחליף את המשמרת :shiftAName שלך
מ :shiftAStart עד :shiftAEnd
עם המשמרת :shiftBName שלי
מ :shiftBStart עד :shiftBEnd ?
:soldierBName", - "Request for shift change from shifts assignments": "שלום :shiftsAssignmentName!
האם אתה מאשר להעביר את המשמרת :shiftName של החייל :soldierAName
מ :shiftStart עד :shiftEnd
לחייל :soldierBName?", "Request for shift change from commander": "שלום :commanderName!
האם אתה מאשר לחייל :soldierAName להעביר את המשמרת :shiftName שלו
מ :shiftStart עד :shiftEnd
לחייל :soldierBName?", "Request for shift change from soldier": "שלום :soldierName!
האם תרצה לבצע את המשמרת
:shiftName שלי
מ :shiftStart עד :shiftEnd?
:requestingSoldierName", - "Add a team member":"הוסף חבר צוות", "Add an identifier to the name so that it is not the same as another name.":"הוסף מזהה לשם כך שהוא לא יהיה זהה לשם אחר. ", "Add member": "הוסף חבר לצוות", @@ -46,6 +42,8 @@ "Assignment charts":"תרשימי שיבוץ", "Assigning the soldier to this shift is your sole responsibility!":"הקצאת החייל למשמרת זו הינה באחריותך בלבד! ", "Approve exchange shift request":"אישור בקשת החלפת משמרת", + "Commander notification of approving exchange shift request for the requesting soldier": "שלום :requestingSoldierName!
בקשתך להחלפת משמרת :shiftAName
מ :shiftAStart עד :shiftAEnd
עם החייל :approvingSoldierName בעבור משמרת :shiftBName
מ :shiftBStart עד :shiftBEnd
אושרה וההחלפה בוצעה.
יום מוצלח!
:commanderName", + "Commander notification of approving exchange shift request for the approving soldier": "שלום :approvingSoldierName!
בקשת :requestingSoldierName להחליף את המשמרת :shiftBName שלך
מ :shiftBStart עד :shiftBEnd
עם המשמרת :shiftAName שלו
מ :shiftAStart עד :shiftAEnd
אושרה וההחלפה בוצעה.
יום מוצלח!
:commanderName", "Request for shift exchange":"בקשה להחלפת משמרת", "Request for shift change":"בקשה לשינוי משמרת", "Approve change shift request":"אישור בקשת שינוי משמרת", @@ -74,7 +72,6 @@ "Create shifts":"צור משמרות", "Creating shifts":"יצירת משמרות", "Close":"סגור", - "Change":"שנה", "Change shift":"שינוי משמרת", "Change assignment":"שנה שיבוץ", "Request for change assignment":"בקשה לשינוי הקצאת משמרת", @@ -93,13 +90,14 @@ "Deny":"דחה", "Deny exchange shift request":"דחית בקשה להחלפת משמרת", "Deny change shift request":"דחיית בקשה לשינוי משמרת", + "Display":"הצג", "Download to excel":"הורדה לאקסל", + "Do you approve the constraint request":"האם אתה מאשר בקשת אילוץ?", "Duration": "משך", "Edit":"ערוך", "End date": "תאריך סיום", "Enlist date": "תאריך גיוס", "Equal":"שווה", - "Exchange":"החלף", "Exchange with":"החלף עם", "Exchange shift":"החלפת משמרת", "Exchange assignment":"החלף שיבוץ", @@ -168,9 +166,12 @@ "Nights":"לילות", "nights":"לילות", "No":"לא", - "No matching data!":"אין נתונים תואמים!", + "No matching data!":"אין נתונים תואמים !", "No qualifications": "אין הסמכות", + "No roles":"אין תפקידים", "No suitable soldiers":"אין חיילים מתאימים", + "No approval":"לא מאשר", + "Not associated":"לא משויך", "Not evening":"ערב", "Not equal":"לא שווה", "Not task":"ללא משמרת", @@ -212,6 +213,7 @@ "Select year":"בחר שנה", "Select qualifications":"בחר הסמכות", "Send": "שלח", + "Shift details":"החייל :name מבקש את אישורך להוספת אילוץ מסוג :type מתאריך :startDate עד :endDate.
האם אתה מאשר? ", "Shift": "משמרת", "Shift change":"החלפת משמרות", "Shift name":"שם המשמרת", @@ -262,9 +264,24 @@ "Year":"שנה", "January":"ינואר", "February":"פבואר", - "March":"מאץ", - "cddzx":"hello :user", + "March":"מרץ", + "Line":"גרף", + "Col":"בר", + "Area":"שטח", + "Markers":"מודגש", + "Grid":"משבצות", "You did not choose a commander. With your approval, you leave the team without a commander. Are you sure?":"לא בחרת מפקד. באישורך אתה משאיר את הצוות ללא מפקד. האם אתה בטוח?", "Your shifts for today":"המשמרות שלך להיום", - "label":"מספר :data עבור קורס :course" + "Range between":":label בין :fromValue ו :toValue", + "Range equal":":label שווה ל :value", + "Range not equal":":label לא שווה ל :value", + "Range greater than":":label גדול מ :value", + "Range greater than equal":":label גדול או שווה :value", + "Range less than":":label קטן מ :value", + "Range less than equal":":label קטן או שווה :value", + "label":"מספר :data עבור קורס :course", + "Constraint request approved":"אישור הוספת אילוץ", + "Constraint request rejected":"דחיית הוספת אילוץ", + "Commander approved create constraint":"שלום :name!
בקשתך להוספת האילוץ :constraintName
מ :startDate עד :endDate אושרה!
המשך יום טוב!", + "Commander deny create constraint":"שלום :name!
בקשתך להוספת האילוץ :constraintName
מ :startDate עד :endDate נדחתה!
המשך יום טוב!" } diff --git a/public/css/saade/filament-fullcalendar/override-filament-fullcalendar.css b/public/css/saade/filament-fullcalendar/override-filament-fullcalendar.css index bc7899d..dd7044f 100644 --- a/public/css/saade/filament-fullcalendar/override-filament-fullcalendar.css +++ b/public/css/saade/filament-fullcalendar/override-filament-fullcalendar.css @@ -3,7 +3,7 @@ overflow-x: auto; } - .fi-section-content-ctn:has(.fullcalendar) { + .fi-section-content-ctn:has(.filament-fullcalendar) { width: 650px; } @@ -20,14 +20,33 @@ line-height: 1.25rem; font-weight: 500; } + + .fc-event-main .fc-event-time { + display: none; + } + + .fc-event-title .fc-sticky { + display: none; + } +} + +.dark .fc-day-past { + background-color: #201f1f; + color: #5d5c5c; + cursor: not-allowed; + --fc-highlight-color: #ae2828; +} + +.dark .fc-day-sat{ + background-color: #514a4a; } .fc-day-past { background-color:#ffffff ; color: #d0d0d0; - cursor: not-allowed; --fc-highlight-color: #ffffff; } + .fc-day-sat{ background-color: #f5f2f2; } diff --git a/public/js/filament/forms/components/file-upload.js b/public/js/filament/forms/components/file-upload.js index a90ca3a..1152644 100644 --- a/public/js/filament/forms/components/file-upload.js +++ b/public/js/filament/forms/components/file-upload.js @@ -24,7 +24,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho ${w.replace(/ /g," ")} -`}let x=t.aspectRatio||b/y,_=y,P=_*x,O=typeof t.scaleToFit>"u"||t.scaleToFit,M=t.center?t.center.x:.5,C=t.center?t.center.y:.5,S=Tl({width:y,height:b},Il({width:_,height:P},x),t.rotation,O?{x:M,y:C}:{x:.5,y:.5}),F=t.zoom*S,R=t.rotation*(180/Math.PI),L={x:_*.5,y:P*.5},z={x:L.x-y*M,y:L.y-b*C},D=[`rotate(${R} ${L.x} ${L.y})`,`translate(${L.x} ${L.y})`,`scale(${F})`,`translate(${-L.x} ${-L.y})`,`translate(${z.x} ${z.y})`],k=t.flip&&t.flip.horizontal,B=t.flip&&t.flip.vertical,X=[`scale(${k?-1:1} ${B?-1:1})`,`translate(${k?-y:0} ${B?-b:0})`],Y=` +`}let x=t.aspectRatio||b/y,_=y,P=_*x,O=typeof t.scaleToFit>"u"||t.scaleToFit,M=t.center?t.center.x:.5,C=t.center?t.center.y:.5,S=Tl({width:y,height:b},Il({width:_,height:P},x),t.rotation,O?{x:M,y:C}:{x:.5,y:.5}),F=t.zoom*S,R=t.rotation*(180/Math.PI),L={x:_*.5,y:P*.5},z={x:L.x-y*M,y:L.y-b*C},D=[`rotate(${R} ${L.x} ${L.y})`,`translate(${L.x} ${L.y})`,`scale(${F})`,`translate(${-L.x} ${-L.y})`,`translate(${z.x} ${z.y})`],k=t.flip&&t.flip.horizontal,B=t.flip&&t.flip.vertical,X=[`scale(${k?-1:1} ${B?-1:1})`,`translate(${k?-y:0} ${B?-b:0})`],q=` count(); + $isPaginated = $notifications instanceof \Illuminate\Contracts\Pagination\Paginator && $notifications->hasPages(); +@endphp + + + @if ($hasNotifications) + +
+ + + +
+ + +
! $isPaginated, + 'border-b border-gray-200 dark:border-white/10' => $isPaginated, + ]) + > + @foreach ($notifications as $notification) +
$notification->unread(), + ]) + > + {{ $this->getNotification($notification)->inline() }} +
+ @endforeach +
+ + @if ($isPaginated) + + + + @endif + @endif + diff --git a/resources/views/vendor/filament-notifications/components/database/trigger.blade.php b/resources/views/vendor/filament-notifications/components/database/trigger.blade.php new file mode 100644 index 0000000..dc2a58c --- /dev/null +++ b/resources/views/vendor/filament-notifications/components/database/trigger.blade.php @@ -0,0 +1,7 @@ +
class(['inline-block']) }} +> + {{ $slot }} +
diff --git a/resources/views/vendor/filament-panels/components/topbar/index.blade.php b/resources/views/vendor/filament-panels/components/topbar/index.blade.php new file mode 100644 index 0000000..d20c3fd --- /dev/null +++ b/resources/views/vendor/filament-panels/components/topbar/index.blade.php @@ -0,0 +1,181 @@ +@props([ + 'navigation', +]) + +
class([ + 'fi-topbar sticky top-0 z-20 overflow-x-clip', + 'fi-topbar-with-navigation' => filament()->hasTopNavigation(), + ]) + }} +> + +
From 7b9bcdedfd63b5130b958bac44de4e6a5a3f17a8 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 12 Jan 2025 11:03:51 +0200 Subject: [PATCH 065/259] push and deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- database/seeders/DatabaseSeeder.php | 1519 ++++++++++---------- 2 files changed, 761 insertions(+), 760 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index f4dea94..fc4d10b 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_1 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_2 flavor: | latest=false tags: | diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 03f12af..8ac01fd 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -36,7 +36,8 @@ public function run(): void 'course' => fake()->numberBetween(0, 5), 'is_reservist' => false, ])->id, - ])->assignRole('manager'); + ])->assignRole('soldier') + ->assignRole('manager'); User::factory()->create([ 'first_name' => 'meshabetz mishmarot', @@ -50,763 +51,763 @@ public function run(): void ])->id, ])->assignRole(['soldier', 'shifts-assignment']); - for ($i = 0; $i < 15; $i++) { - $user = User::factory()->create([ - 'first_name' => 'mefaked', - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['pikud'], - 'capacity' => 5.5, - 'max_weekends' => 5.5, - 'max_shifts' => 10, - 'max_nights' => 5.5, - 'course' => fake()->numberBetween(0, 5), - 'is_reservist' => false, - ])->id, - ])->assignRole('soldier'); - $this->createConstraints($user->id); - } - - for ($i = 0; $i < 40; $i++) { - $user = User::factory()->create([ - 'first_name' => 'chayal pashut', - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['hatasa', 'tazpit', 'shmira'], - 'capacity' => 6, - 'max_weekends' => 6, - 'max_shifts' => 7, - 'max_nights' => 6, - 'course' => fake()->numberBetween(0, 5), - 'is_reservist' => false, - ])->id, - ])->assignRole('soldier'); - $this->createConstraints($user->id); - } - - for ($i = 0; $i < 30; $i++) { - $user = User::factory()->create([ - 'first_name' => 'chayal beinony', - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['hatasa', 'tazpit', 'shmira', 'tichnun', 'pianuach'], - 'capacity' => 5.5, - 'max_weekends' => 5.5, - 'max_shifts' => 6, - 'max_nights' => 5.5, - 'course' => fake()->numberBetween(0, 5), - 'is_reservist' => false, - ])->id, - ])->assignRole('soldier'); - $this->createConstraints($user->id); - } - - for ($i = 0; $i < 25; $i++) { - $user = User::factory()->create([ - 'first_name' => 'chayal vatik', - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['hatasa', 'bakara', 'tichnun', 'pianuach'], - 'capacity' => 5, - 'max_weekends' => 5, - 'max_shifts' => 5, - 'max_nights' => 5, - 'course' => fake()->numberBetween(0, 5), - 'is_reservist' => false, - ])->id, - ])->assignRole('soldier'); - $this->createConstraints($user->id); - } - - for ($i = 0; $i < 10; $i++) { - $user = User::factory()->create([ - 'first_name' => 'menahalan', - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['minhal', 'bdikat ziud'], - 'capacity' => 0, - 'max_weekends' => 0, - 'max_shifts' => 4, - 'max_nights' => 0, - 'course' => fake()->numberBetween(0, 5), - 'is_reservist' => false, - ])->id, - ])->assignRole('soldier'); - $this->createConstraints($user->id); - } - - for ($i = 0; $i < 8; $i++) { - $user = User::factory()->create([ - 'first_name' => 'navat', - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['nivut'], - 'capacity' => 10, - 'max_weekends' => 10, - 'max_shifts' => 12, - 'max_nights' => 10, - 'course' => fake()->numberBetween(0, 5), - 'is_reservist' => false, - ])->id, - ])->assignRole('soldier'); - $this->createConstraints($user->id); - } - - // Tasks - // tichnun - Task::factory()->create([ - 'name' => 'tichnun א-ה בוקר', - 'start_hour' => '10:00:00', - 'duration' => 4, - 'parallel_weight' => 0, - 'type' => 'tichnun', - 'is_weekend' => false, - 'is_night' => false, - 'color' => '#b54b4b', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'tichnun א-ה לילה', - 'start_hour' => '02:00:00', - 'duration' => 4, - 'parallel_weight' => 1, - 'type' => 'tichnun', - 'is_weekend' => false, - 'is_night' => true, - 'color' => '#b54b4b', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'tichnun 1 סופ"ש', - 'start_hour' => '10:30:00', - 'duration' => 25, - 'parallel_weight' => 2.5, - 'type' => 'tichnun', - 'is_weekend' => true, - 'is_night' => false, - 'color' => '#b54b4b', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'tichnun 2 סופ"ש', - 'start_hour' => '11:10:00', - 'duration' => 25, - 'parallel_weight' => 2.5, - 'type' => 'tichnun', - 'is_weekend' => true, - 'is_night' => false, - 'color' => '#b54b4b', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - // bakara - Task::factory()->create([ - 'name' => 'bakara ארבע פעמים בשבוע בוקר', - 'start_hour' => '10:00:00', - 'duration' => 4, - 'parallel_weight' => 0, - 'type' => 'bakara', - 'is_weekend' => false, - 'is_night' => false, - 'color' => '#4bb5ac', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'bakara שלוש פעמים בשבוע לילה', - 'start_hour' => '03:20:00', - 'duration' => 4, - 'parallel_weight' => 1, - 'type' => 'bakara', - 'is_weekend' => false, - 'is_night' => true, - 'color' => '#4bb5ac', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'bakara סופ"ש', - 'start_hour' => '10:05:00', - 'duration' => 26, - 'parallel_weight' => 2.5, - 'type' => 'bakara', - 'is_weekend' => true, - 'is_night' => false, - 'color' => '#4bb5ac', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - // pikud - Task::factory()->create([ - 'name' => 'pikud 1 א-ה בוקר', - 'start_hour' => '10:00:00', - 'duration' => 4, - 'parallel_weight' => 0, - 'type' => 'pikud', - 'is_weekend' => false, - 'is_night' => false, - 'color' => '#4bb569', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'pikud 2 א-ה בוקר', - 'start_hour' => '10:00:00', - 'duration' => 4, - 'parallel_weight' => 0, - 'type' => 'pikud', - 'is_weekend' => false, - 'is_night' => false, - 'color' => '#4bb569', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'pikud 1 סופש', - 'start_hour' => '10:00:00', - 'duration' => 25, - 'parallel_weight' => 2.5, - 'type' => 'pikud', - 'is_weekend' => true, - 'is_night' => false, - 'color' => '#4bb569', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'pikud 2 סופש', - 'start_hour' => '10:00:00', - 'duration' => 25, - 'parallel_weight' => 2.5, - 'type' => 'pikud', - 'is_weekend' => true, - 'is_night' => false, - 'color' => '#4bb569', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'pikud לילה א-ה', - 'start_hour' => '03:00:00', - 'duration' => 4, - 'parallel_weight' => 1, - 'type' => 'pikud', - 'is_weekend' => false, - 'is_night' => true, - 'color' => '#4bb569', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - // minhal - Task::factory()->create([ - 'name' => 'minhal שלוש פעמים בשבוע בוקר', - 'start_hour' => '13:00:00', - 'duration' => 2, - 'parallel_weight' => 0, - 'type' => 'minhal', - 'is_weekend' => false, - 'is_night' => false, - 'color' => '#c5d649', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::TUESDAY, DaysInWeek::THURSDAY], - ]), - ]); - // hatasa - Task::factory()->create([ - 'name' => 'hatasa א-ה בוקר', - 'start_hour' => '09:00:00', - 'duration' => 6, - 'parallel_weight' => 0, - 'type' => 'hatasa', - 'is_weekend' => false, - 'is_night' => false, - 'color' => '#d649b5', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'hatasa א-ה לילה', - 'start_hour' => '02:00:00', - 'duration' => 6, - 'parallel_weight' => 1, - 'type' => 'hatasa', - 'is_weekend' => false, - 'is_night' => true, - 'color' => '#d649b5', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'hatasa 1 סופש', - 'start_hour' => '06:00:00', - 'duration' => 26, - 'parallel_weight' => 2.5, - 'type' => 'hatasa', - 'is_weekend' => true, - 'is_night' => false, - 'color' => '#d649b5', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'hatasa 2 סופש', - 'start_hour' => '06:00:00', - 'duration' => 26, - 'parallel_weight' => 2.5, - 'type' => 'hatasa', - 'is_weekend' => true, - 'is_night' => false, - 'color' => '#d649b5', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - // shmira - Task::factory()->create([ - 'name' => 'shmira א-ה בוקר', - 'start_hour' => '07:00:00', - 'duration' => 12, - 'parallel_weight' => 0, - 'type' => 'shmira', - 'is_weekend' => false, - 'is_night' => false, - 'color' => '#ee8559', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'shmira א-ה לילה', - 'start_hour' => '01:00:00', - 'duration' => 7, - 'parallel_weight' => 1, - 'type' => 'shmira', - 'is_weekend' => false, - 'is_night' => true, - 'color' => '#ee8559', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'shmira 1 סופש', - 'start_hour' => '06:00:00', - 'duration' => 26, - 'parallel_weight' => 2.5, - 'type' => 'shmira', - 'is_weekend' => true, - 'is_night' => false, - 'color' => '#ee8559', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'shmira סופש 2', - 'start_hour' => '06:00:00', - 'duration' => 26, - 'parallel_weight' => 2.5, - 'type' => 'shmira', - 'is_weekend' => true, - 'is_night' => false, - 'color' => '#ee8559', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - // pianuach - Task::factory()->create([ - 'name' => 'pianuach א-ה בוקר', - 'start_hour' => '07:00:00', - 'duration' => 7, - 'parallel_weight' => 0, - 'type' => 'pianuach', - 'is_weekend' => false, - 'is_night' => false, - 'color' => '#3574fb', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'pianuach א-ה לילה', - 'start_hour' => '01:00:00', - 'duration' => 5, - 'parallel_weight' => 1, - 'type' => 'pianuach', - 'is_weekend' => false, - 'is_night' => true, - 'color' => '#3574fb', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'pianuach 1 סופש', - 'start_hour' => '07:00:00', - 'duration' => 27, - 'parallel_weight' => 2.5, - 'type' => 'pianuach', - 'is_weekend' => true, - 'is_night' => false, - 'color' => '#3574fb', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'pianuach 2 סופש', - 'start_hour' => '07:00:00', - 'duration' => 27, - 'parallel_weight' => 2.5, - 'type' => 'pianuach', - 'is_weekend' => true, - 'is_night' => false, - 'color' => '#3574fb', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - // nivut - Task::factory()->create([ - 'name' => 'nivut א-ה בוקר', - 'start_hour' => '11:00:00', - 'duration' => 2, - 'parallel_weight' => 0, - 'type' => 'nivut', - 'is_weekend' => false, - 'is_night' => false, - 'color' => '#ed8d8d8b', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'nivut א-ה לילה', - 'start_hour' => '01:00:00', - 'duration' => 2.5, - 'parallel_weight' => 1, - 'type' => 'nivut', - 'is_weekend' => false, - 'is_night' => true, - 'color' => '#ed8d8d8b', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'nivut 1 סופש', - 'start_hour' => '11:00:00', - 'duration' => 28, - 'parallel_weight' => 2.5, - 'type' => 'nivut', - 'is_weekend' => true, - 'is_night' => false, - 'color' => '#ed8d8d8b', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'nivut 2 סופש', - 'start_hour' => '11:00:00', - 'duration' => 28, - 'parallel_weight' => 2.5, - 'type' => 'nivut', - 'is_weekend' => true, - 'is_night' => false, - 'color' => '#ed8d8d8b', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - // tazpit - Task::factory()->create([ - 'name' => 'tazpit א-ה בוקר 1', - 'start_hour' => '08:00:00', - 'duration' => 10, - 'parallel_weight' => 0, - 'type' => 'tazpit', - 'is_weekend' => false, - 'is_night' => false, - 'color' => '#77ff23', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'tazpit א-ה בוקר 2', - 'start_hour' => '08:00:00', - 'duration' => 10, - 'parallel_weight' => 0, - 'type' => 'tazpit', - 'is_weekend' => false, - 'is_night' => false, - 'color' => '#77ff23', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'tazpit א-ה לילה', - 'start_hour' => '01:30:00', - 'duration' => 6, - 'parallel_weight' => 1, - 'type' => 'tazpit', - 'is_weekend' => false, - 'is_night' => true, - 'color' => '#77ff23', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'tazpit 1 סופש', - 'start_hour' => '11:45:00', - 'duration' => 25, - 'parallel_weight' => 2.5, - 'type' => 'tazpit', - 'is_weekend' => true, - 'is_night' => false, - 'color' => '#77ff23', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'tazpit 2 סופש', - 'start_hour' => '11:00:00', - 'duration' => 25, - 'parallel_weight' => 2.5, - 'type' => 'tazpit', - 'is_weekend' => true, - 'is_night' => false, - 'color' => '#77ff23', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - // bdikat ziud - Task::factory()->create([ - 'name' => 'bdikat ziud פעם בשבוע בוקר', - 'start_hour' => '11:15:00', - 'duration' => 3.5, - 'parallel_weight' => 0, - 'type' => 'bdikat ziud', - 'is_weekend' => false, - 'is_night' => false, - 'color' => '#a7b2c3', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY], - ]), - ]); - } - - protected function createConstraints(int $userId) - { - for ($i = 0; $i < count(ConstraintType::cases()); $i++) { - $times = ConstraintType::getLimit()[ConstraintType::cases()[$i]->value] > 0 - ? random_int(0, ConstraintType::getLimit()[ConstraintType::cases()[$i]->value]) : - random_int(0, random_int(0, 5)); - for ($j = 0; $j < $times; $j++) { - $startDate = call_user_func([$this, ConstraintType::cases()[$i]->name]); - Constraint::factory()->create([ - 'soldier_id' => User::find($userId)->userable_id, - 'constraint_type' => ConstraintType::cases()[$i], - 'start_date' => $startDate, - 'end_date' => $startDate->copy()->addHours(random_int(1, 5)), - ]); - } - } - } - - protected function getDatesOfMonth($month = null) - { - $month ??= now()->addMonth(); - - return CarbonPeriod::between($month->startOfMonth(), $month->copy()->endOfMonth()); - } - - protected function getThursday() - { - $period = $this->getDatesOfMonth(); - - return collect($period) - ->filter( - fn ($date) => Carbon::parse($date)->isThursday() - )->all(); - } - - protected function getWeekends() - { - $period = $this->getDatesOfMonth(); - - return collect($period) - ->filter( - fn ($date) => Carbon::parse($date)->isFriday() || Carbon::parse($date)->isSaturday() - ) - ->all(); - } - - protected function getTime() - { - return Carbon::now()->subSeconds(rand(0, 30 * 24 * 60 * 60)); - } - - protected function getNightHour() - { - $time = $this->getTime(); - if ($time->hour < 20 && $time->hour >= 8) { - return $time->addHours(20 - $time->hour); - } - - return $time; - } - - protected function NOT_WEEKEND() - { - $time = $this->getTime(); - - return Carbon::parse(collect($this->getWeekends())->random()) - ->setTime( - $time->hour, - $time->minute, - $time->second - ); - } - - protected function LOW_PRIORITY_NOT_WEEKEND() - { - $time = $this->getTime(); - - return Carbon::parse(collect($this->getWeekends())->random()) - ->setTime( - $time->hour, - $time->minute, - $time->second - ); - } - - protected function NOT_TASK() - { - $time = $this->getTime(); - - return Carbon::parse(collect($this->getDatesOfMonth())->random()) - ->setTime( - $time->hour, - $time->minute, - $time->second - ); - } - - protected function LOW_PRIORITY_NOT_TASK() - { - $time = $this->getTime(); - - return Carbon::parse(collect($this->getDatesOfMonth())->random()) - ->setTime( - $time->hour, - $time->minute, - $time->second - ); - } - - protected function NOT_EVENING() - { - $date = collect($this->getDatesOfMonth())->random(); - $nightTime = $this->getNightHour(); - - return $date->copy()->setTime($nightTime->hour, $nightTime->minute, $nightTime->second); - } - - protected function NOT_THURSDAY_EVENING() - { - $date = collect($this->getThursday())->random(); - $nightTime = $this->getNightHour(); - - return $date->copy()->setTime($nightTime->hour, $nightTime->minute, $nightTime->second); - } - - protected function VACATION() - { - $time = $this->getTime(); - - return Carbon::parse(collect($this->getDatesOfMonth())->random()) - ->setTime( - $time->hour, - $time->minute, - $time->second - ); - } - - protected function MEDICAL() - { - $time = $this->getTime(); - - return Carbon::parse(collect($this->getDatesOfMonth())->random()) - ->setTime( - $time->hour, - $time->minute, - $time->second - ); - } - - protected function SCHOOL() - { - $time = $this->getTime(); - - return Carbon::parse(collect($this->getDatesOfMonth())->random()) - ->setTime( - $time->hour, - $time->minute, - $time->second - ); + // for ($i = 0; $i < 15; $i++) { + // $user = User::factory()->create([ + // 'first_name' => 'mefaked', + // 'userable_id' => Soldier::factory()->create([ + // 'qualifications' => ['pikud'], + // 'capacity' => 5.5, + // 'max_weekends' => 5.5, + // 'max_shifts' => 10, + // 'max_nights' => 5.5, + // 'course' => fake()->numberBetween(0, 5), + // 'is_reservist' => false, + // ])->id, + // ])->assignRole('soldier'); + // $this->createConstraints($user->id); + // } + + // for ($i = 0; $i < 40; $i++) { + // $user = User::factory()->create([ + // 'first_name' => 'chayal pashut', + // 'userable_id' => Soldier::factory()->create([ + // 'qualifications' => ['hatasa', 'tazpit', 'shmira'], + // 'capacity' => 6, + // 'max_weekends' => 6, + // 'max_shifts' => 7, + // 'max_nights' => 6, + // 'course' => fake()->numberBetween(0, 5), + // 'is_reservist' => false, + // ])->id, + // ])->assignRole('soldier'); + // $this->createConstraints($user->id); + // } + + // for ($i = 0; $i < 30; $i++) { + // $user = User::factory()->create([ + // 'first_name' => 'chayal beinony', + // 'userable_id' => Soldier::factory()->create([ + // 'qualifications' => ['hatasa', 'tazpit', 'shmira', 'tichnun', 'pianuach'], + // 'capacity' => 5.5, + // 'max_weekends' => 5.5, + // 'max_shifts' => 6, + // 'max_nights' => 5.5, + // 'course' => fake()->numberBetween(0, 5), + // 'is_reservist' => false, + // ])->id, + // ])->assignRole('soldier'); + // $this->createConstraints($user->id); + // } + + // for ($i = 0; $i < 25; $i++) { + // $user = User::factory()->create([ + // 'first_name' => 'chayal vatik', + // 'userable_id' => Soldier::factory()->create([ + // 'qualifications' => ['hatasa', 'bakara', 'tichnun', 'pianuach'], + // 'capacity' => 5, + // 'max_weekends' => 5, + // 'max_shifts' => 5, + // 'max_nights' => 5, + // 'course' => fake()->numberBetween(0, 5), + // 'is_reservist' => false, + // ])->id, + // ])->assignRole('soldier'); + // $this->createConstraints($user->id); + // } + + // for ($i = 0; $i < 10; $i++) { + // $user = User::factory()->create([ + // 'first_name' => 'menahalan', + // 'userable_id' => Soldier::factory()->create([ + // 'qualifications' => ['minhal', 'bdikat ziud'], + // 'capacity' => 0, + // 'max_weekends' => 0, + // 'max_shifts' => 4, + // 'max_nights' => 0, + // 'course' => fake()->numberBetween(0, 5), + // 'is_reservist' => false, + // ])->id, + // ])->assignRole('soldier'); + // $this->createConstraints($user->id); + // } + + // for ($i = 0; $i < 8; $i++) { + // $user = User::factory()->create([ + // 'first_name' => 'navat', + // 'userable_id' => Soldier::factory()->create([ + // 'qualifications' => ['nivut'], + // 'capacity' => 10, + // 'max_weekends' => 10, + // 'max_shifts' => 12, + // 'max_nights' => 10, + // 'course' => fake()->numberBetween(0, 5), + // 'is_reservist' => false, + // ])->id, + // ])->assignRole('soldier'); + // $this->createConstraints($user->id); + // } + + // // Tasks + // // tichnun + // Task::factory()->create([ + // 'name' => 'tichnun א-ה בוקר', + // 'start_hour' => '10:00:00', + // 'duration' => 4, + // 'parallel_weight' => 0, + // 'type' => 'tichnun', + // 'is_weekend' => false, + // 'is_night' => false, + // 'color' => '#b54b4b', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'tichnun א-ה לילה', + // 'start_hour' => '02:00:00', + // 'duration' => 4, + // 'parallel_weight' => 1, + // 'type' => 'tichnun', + // 'is_weekend' => false, + // 'is_night' => true, + // 'color' => '#b54b4b', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'tichnun 1 סופ"ש', + // 'start_hour' => '10:30:00', + // 'duration' => 25, + // 'parallel_weight' => 2.5, + // 'type' => 'tichnun', + // 'is_weekend' => true, + // 'is_night' => false, + // 'color' => '#b54b4b', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::FRIDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'tichnun 2 סופ"ש', + // 'start_hour' => '11:10:00', + // 'duration' => 25, + // 'parallel_weight' => 2.5, + // 'type' => 'tichnun', + // 'is_weekend' => true, + // 'is_night' => false, + // 'color' => '#b54b4b', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::FRIDAY], + // ]), + // ]); + // // bakara + // Task::factory()->create([ + // 'name' => 'bakara ארבע פעמים בשבוע בוקר', + // 'start_hour' => '10:00:00', + // 'duration' => 4, + // 'parallel_weight' => 0, + // 'type' => 'bakara', + // 'is_weekend' => false, + // 'is_night' => false, + // 'color' => '#4bb5ac', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'bakara שלוש פעמים בשבוע לילה', + // 'start_hour' => '03:20:00', + // 'duration' => 4, + // 'parallel_weight' => 1, + // 'type' => 'bakara', + // 'is_weekend' => false, + // 'is_night' => true, + // 'color' => '#4bb5ac', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'bakara סופ"ש', + // 'start_hour' => '10:05:00', + // 'duration' => 26, + // 'parallel_weight' => 2.5, + // 'type' => 'bakara', + // 'is_weekend' => true, + // 'is_night' => false, + // 'color' => '#4bb5ac', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::FRIDAY], + // ]), + // ]); + // // pikud + // Task::factory()->create([ + // 'name' => 'pikud 1 א-ה בוקר', + // 'start_hour' => '10:00:00', + // 'duration' => 4, + // 'parallel_weight' => 0, + // 'type' => 'pikud', + // 'is_weekend' => false, + // 'is_night' => false, + // 'color' => '#4bb569', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'pikud 2 א-ה בוקר', + // 'start_hour' => '10:00:00', + // 'duration' => 4, + // 'parallel_weight' => 0, + // 'type' => 'pikud', + // 'is_weekend' => false, + // 'is_night' => false, + // 'color' => '#4bb569', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'pikud 1 סופש', + // 'start_hour' => '10:00:00', + // 'duration' => 25, + // 'parallel_weight' => 2.5, + // 'type' => 'pikud', + // 'is_weekend' => true, + // 'is_night' => false, + // 'color' => '#4bb569', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::FRIDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'pikud 2 סופש', + // 'start_hour' => '10:00:00', + // 'duration' => 25, + // 'parallel_weight' => 2.5, + // 'type' => 'pikud', + // 'is_weekend' => true, + // 'is_night' => false, + // 'color' => '#4bb569', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::FRIDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'pikud לילה א-ה', + // 'start_hour' => '03:00:00', + // 'duration' => 4, + // 'parallel_weight' => 1, + // 'type' => 'pikud', + // 'is_weekend' => false, + // 'is_night' => true, + // 'color' => '#4bb569', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // // minhal + // Task::factory()->create([ + // 'name' => 'minhal שלוש פעמים בשבוע בוקר', + // 'start_hour' => '13:00:00', + // 'duration' => 2, + // 'parallel_weight' => 0, + // 'type' => 'minhal', + // 'is_weekend' => false, + // 'is_night' => false, + // 'color' => '#c5d649', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::TUESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // // hatasa + // Task::factory()->create([ + // 'name' => 'hatasa א-ה בוקר', + // 'start_hour' => '09:00:00', + // 'duration' => 6, + // 'parallel_weight' => 0, + // 'type' => 'hatasa', + // 'is_weekend' => false, + // 'is_night' => false, + // 'color' => '#d649b5', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'hatasa א-ה לילה', + // 'start_hour' => '02:00:00', + // 'duration' => 6, + // 'parallel_weight' => 1, + // 'type' => 'hatasa', + // 'is_weekend' => false, + // 'is_night' => true, + // 'color' => '#d649b5', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'hatasa 1 סופש', + // 'start_hour' => '06:00:00', + // 'duration' => 26, + // 'parallel_weight' => 2.5, + // 'type' => 'hatasa', + // 'is_weekend' => true, + // 'is_night' => false, + // 'color' => '#d649b5', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::FRIDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'hatasa 2 סופש', + // 'start_hour' => '06:00:00', + // 'duration' => 26, + // 'parallel_weight' => 2.5, + // 'type' => 'hatasa', + // 'is_weekend' => true, + // 'is_night' => false, + // 'color' => '#d649b5', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::FRIDAY], + // ]), + // ]); + // // shmira + // Task::factory()->create([ + // 'name' => 'shmira א-ה בוקר', + // 'start_hour' => '07:00:00', + // 'duration' => 12, + // 'parallel_weight' => 0, + // 'type' => 'shmira', + // 'is_weekend' => false, + // 'is_night' => false, + // 'color' => '#ee8559', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'shmira א-ה לילה', + // 'start_hour' => '01:00:00', + // 'duration' => 7, + // 'parallel_weight' => 1, + // 'type' => 'shmira', + // 'is_weekend' => false, + // 'is_night' => true, + // 'color' => '#ee8559', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'shmira 1 סופש', + // 'start_hour' => '06:00:00', + // 'duration' => 26, + // 'parallel_weight' => 2.5, + // 'type' => 'shmira', + // 'is_weekend' => true, + // 'is_night' => false, + // 'color' => '#ee8559', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::FRIDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'shmira סופש 2', + // 'start_hour' => '06:00:00', + // 'duration' => 26, + // 'parallel_weight' => 2.5, + // 'type' => 'shmira', + // 'is_weekend' => true, + // 'is_night' => false, + // 'color' => '#ee8559', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::FRIDAY], + // ]), + // ]); + // // pianuach + // Task::factory()->create([ + // 'name' => 'pianuach א-ה בוקר', + // 'start_hour' => '07:00:00', + // 'duration' => 7, + // 'parallel_weight' => 0, + // 'type' => 'pianuach', + // 'is_weekend' => false, + // 'is_night' => false, + // 'color' => '#3574fb', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'pianuach א-ה לילה', + // 'start_hour' => '01:00:00', + // 'duration' => 5, + // 'parallel_weight' => 1, + // 'type' => 'pianuach', + // 'is_weekend' => false, + // 'is_night' => true, + // 'color' => '#3574fb', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'pianuach 1 סופש', + // 'start_hour' => '07:00:00', + // 'duration' => 27, + // 'parallel_weight' => 2.5, + // 'type' => 'pianuach', + // 'is_weekend' => true, + // 'is_night' => false, + // 'color' => '#3574fb', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::FRIDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'pianuach 2 סופש', + // 'start_hour' => '07:00:00', + // 'duration' => 27, + // 'parallel_weight' => 2.5, + // 'type' => 'pianuach', + // 'is_weekend' => true, + // 'is_night' => false, + // 'color' => '#3574fb', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::FRIDAY], + // ]), + // ]); + // // nivut + // Task::factory()->create([ + // 'name' => 'nivut א-ה בוקר', + // 'start_hour' => '11:00:00', + // 'duration' => 2, + // 'parallel_weight' => 0, + // 'type' => 'nivut', + // 'is_weekend' => false, + // 'is_night' => false, + // 'color' => '#ed8d8d8b', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'nivut א-ה לילה', + // 'start_hour' => '01:00:00', + // 'duration' => 2.5, + // 'parallel_weight' => 1, + // 'type' => 'nivut', + // 'is_weekend' => false, + // 'is_night' => true, + // 'color' => '#ed8d8d8b', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'nivut 1 סופש', + // 'start_hour' => '11:00:00', + // 'duration' => 28, + // 'parallel_weight' => 2.5, + // 'type' => 'nivut', + // 'is_weekend' => true, + // 'is_night' => false, + // 'color' => '#ed8d8d8b', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::FRIDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'nivut 2 סופש', + // 'start_hour' => '11:00:00', + // 'duration' => 28, + // 'parallel_weight' => 2.5, + // 'type' => 'nivut', + // 'is_weekend' => true, + // 'is_night' => false, + // 'color' => '#ed8d8d8b', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::FRIDAY], + // ]), + // ]); + // // tazpit + // Task::factory()->create([ + // 'name' => 'tazpit א-ה בוקר 1', + // 'start_hour' => '08:00:00', + // 'duration' => 10, + // 'parallel_weight' => 0, + // 'type' => 'tazpit', + // 'is_weekend' => false, + // 'is_night' => false, + // 'color' => '#77ff23', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'tazpit א-ה בוקר 2', + // 'start_hour' => '08:00:00', + // 'duration' => 10, + // 'parallel_weight' => 0, + // 'type' => 'tazpit', + // 'is_weekend' => false, + // 'is_night' => false, + // 'color' => '#77ff23', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'tazpit א-ה לילה', + // 'start_hour' => '01:30:00', + // 'duration' => 6, + // 'parallel_weight' => 1, + // 'type' => 'tazpit', + // 'is_weekend' => false, + // 'is_night' => true, + // 'color' => '#77ff23', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'tazpit 1 סופש', + // 'start_hour' => '11:45:00', + // 'duration' => 25, + // 'parallel_weight' => 2.5, + // 'type' => 'tazpit', + // 'is_weekend' => true, + // 'is_night' => false, + // 'color' => '#77ff23', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::FRIDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'tazpit 2 סופש', + // 'start_hour' => '11:00:00', + // 'duration' => 25, + // 'parallel_weight' => 2.5, + // 'type' => 'tazpit', + // 'is_weekend' => true, + // 'is_night' => false, + // 'color' => '#77ff23', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::FRIDAY], + // ]), + // ]); + // // bdikat ziud + // Task::factory()->create([ + // 'name' => 'bdikat ziud פעם בשבוע בוקר', + // 'start_hour' => '11:15:00', + // 'duration' => 3.5, + // 'parallel_weight' => 0, + // 'type' => 'bdikat ziud', + // 'is_weekend' => false, + // 'is_night' => false, + // 'color' => '#a7b2c3', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY], + // ]), + // ]); + // } + + // protected function createConstraints(int $userId) + // { + // for ($i = 0; $i < count(ConstraintType::cases()); $i++) { + // $times = ConstraintType::getLimit()[ConstraintType::cases()[$i]->value] > 0 + // ? random_int(0, ConstraintType::getLimit()[ConstraintType::cases()[$i]->value]) : + // random_int(0, random_int(0, 5)); + // for ($j = 0; $j < $times; $j++) { + // $startDate = call_user_func([$this, ConstraintType::cases()[$i]->name]); + // Constraint::factory()->create([ + // 'soldier_id' => User::find($userId)->userable_id, + // 'constraint_type' => ConstraintType::cases()[$i], + // 'start_date' => $startDate, + // 'end_date' => $startDate->copy()->addHours(random_int(1, 5)), + // ]); + // } + // } + // } + + // protected function getDatesOfMonth($month = null) + // { + // $month ??= now()->addMonth(); + + // return CarbonPeriod::between($month->startOfMonth(), $month->copy()->endOfMonth()); + // } + + // protected function getThursday() + // { + // $period = $this->getDatesOfMonth(); + + // return collect($period) + // ->filter( + // fn ($date) => Carbon::parse($date)->isThursday() + // )->all(); + // } + + // protected function getWeekends() + // { + // $period = $this->getDatesOfMonth(); + + // return collect($period) + // ->filter( + // fn ($date) => Carbon::parse($date)->isFriday() || Carbon::parse($date)->isSaturday() + // ) + // ->all(); + // } + + // protected function getTime() + // { + // return Carbon::now()->subSeconds(rand(0, 30 * 24 * 60 * 60)); + // } + + // protected function getNightHour() + // { + // $time = $this->getTime(); + // if ($time->hour < 20 && $time->hour >= 8) { + // return $time->addHours(20 - $time->hour); + // } + + // return $time; + // } + + // protected function NOT_WEEKEND() + // { + // $time = $this->getTime(); + + // return Carbon::parse(collect($this->getWeekends())->random()) + // ->setTime( + // $time->hour, + // $time->minute, + // $time->second + // ); + // } + + // protected function LOW_PRIORITY_NOT_WEEKEND() + // { + // $time = $this->getTime(); + + // return Carbon::parse(collect($this->getWeekends())->random()) + // ->setTime( + // $time->hour, + // $time->minute, + // $time->second + // ); + // } + + // protected function NOT_TASK() + // { + // $time = $this->getTime(); + + // return Carbon::parse(collect($this->getDatesOfMonth())->random()) + // ->setTime( + // $time->hour, + // $time->minute, + // $time->second + // ); + // } + + // protected function LOW_PRIORITY_NOT_TASK() + // { + // $time = $this->getTime(); + + // return Carbon::parse(collect($this->getDatesOfMonth())->random()) + // ->setTime( + // $time->hour, + // $time->minute, + // $time->second + // ); + // } + + // protected function NOT_EVENING() + // { + // $date = collect($this->getDatesOfMonth())->random(); + // $nightTime = $this->getNightHour(); + + // return $date->copy()->setTime($nightTime->hour, $nightTime->minute, $nightTime->second); + // } + + // protected function NOT_THURSDAY_EVENING() + // { + // $date = collect($this->getThursday())->random(); + // $nightTime = $this->getNightHour(); + + // return $date->copy()->setTime($nightTime->hour, $nightTime->minute, $nightTime->second); + // } + + // protected function VACATION() + // { + // $time = $this->getTime(); + + // return Carbon::parse(collect($this->getDatesOfMonth())->random()) + // ->setTime( + // $time->hour, + // $time->minute, + // $time->second + // ); + // } + + // protected function MEDICAL() + // { + // $time = $this->getTime(); + + // return Carbon::parse(collect($this->getDatesOfMonth())->random()) + // ->setTime( + // $time->hour, + // $time->minute, + // $time->second + // ); + // } + + // protected function SCHOOL() + // { + // $time = $this->getTime(); + + // return Carbon::parse(collect($this->getDatesOfMonth())->random()) + // ->setTime( + // $time->hour, + // $time->minute, + // $time->second + // ); } } From 087c830f7effcac4c0d3f5da200ab14628f506ad Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 12 Jan 2025 13:14:32 +0200 Subject: [PATCH 066/259] push and deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Resources/SoldierResource.php | 4 +++- app/Resources/SoldierResource/Pages/EditSoldier.php | 3 +-- database/seeders/DatabaseSeeder.php | 3 +-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index fc4d10b..2acc6b7 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_2 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_3 flavor: | latest=false tags: | diff --git a/app/Resources/SoldierResource.php b/app/Resources/SoldierResource.php index f18854e..cc2ddf0 100644 --- a/app/Resources/SoldierResource.php +++ b/app/Resources/SoldierResource.php @@ -88,7 +88,9 @@ public static function table(Table $table): Table ->default( function ($record) { $roles = Soldier::find($record->id)->user->getRoleNames(); - + $roles->count() > 1 ? $roles->shift(1) : null; + $roles->all(); + return array_map(function ($role) { return match ($role) { 'manager' => __('Manager'), diff --git a/app/Resources/SoldierResource/Pages/EditSoldier.php b/app/Resources/SoldierResource/Pages/EditSoldier.php index 51ff583..4219d71 100644 --- a/app/Resources/SoldierResource/Pages/EditSoldier.php +++ b/app/Resources/SoldierResource/Pages/EditSoldier.php @@ -12,8 +12,7 @@ class EditSoldier extends EditRecord protected function mutateFormDataBeforeFill(array $data): array { - $data['shifts_assignment'] = in_array('shifts-assignment', User::where('userable_id', $this->record->id)->first()->getRoleNames()->toArray()); - + $data['shifts_assignment'] = User::where('userable_id', $this->record->id)?->first() ? in_array('shifts-assignment', User::where('userable_id', $this->record->id)->first()->getRoleNames()->toArray()) : false; return $data; } diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 8ac01fd..e97af99 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -36,8 +36,7 @@ public function run(): void 'course' => fake()->numberBetween(0, 5), 'is_reservist' => false, ])->id, - ])->assignRole('soldier') - ->assignRole('manager'); + ])->assignRole(['soldier', 'manager']); User::factory()->create([ 'first_name' => 'meshabetz mishmarot', From f0ea6c533fc85b43f66b19b014acbd7b8fd3c021 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 12 Jan 2025 16:58:13 +0200 Subject: [PATCH 067/259] push and deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Models/Shift.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 2acc6b7..93313a4 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_3 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_4 flavor: | latest=false tags: | diff --git a/app/Models/Shift.php b/app/Models/Shift.php index 5306a1e..900f34c 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -244,7 +244,7 @@ function ($shift) { ->icon('heroicon-s-arrow-path') ->disabled(fn (): bool => ! session()->get('selected_shift')) ->color('primary') - ->visible(fn (): bool => ! auth()->user()->getRoleNames()->count() > 1), + ->visible(fn (): bool => ! (auth()->user()->getRoleNames()->count() > 1)), $action->makeExtraModalAction(__('Cancel'), ['cancel' => true]), ]; }) @@ -531,7 +531,7 @@ function (Action $action): array { ->icon('heroicon-o-arrow-uturn-up') ->disabled(fn (): bool => ! session()->get('selected_soldier')) ->color('primary') - ->visible(fn (): bool => ! auth()->user()->getRoleNames()->count() > 1), + ->visible(fn (): bool => ! (auth()->user()->getRoleNames()->count() > 1)), $action->makeExtraModalAction(__('Cancel'), ['cancel' => true]), ]; } From 76899277e53b20ea492c6a684c5b4b6914447b81 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Mon, 13 Jan 2025 08:58:27 +0200 Subject: [PATCH 068/259] push and deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 1 - app/Livewire/MyDatabaseNotifications.php | 12 ++++++------ 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 93313a4..5d00747 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_4 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_5 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 32579ad..0839126 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -167,7 +167,6 @@ protected function headerActions(): array 'constraint_type' => $data['constraint_type'], 'start_date' => $data['start_date'], 'end_date' => $data['end_date'], - 'soldier_id' => auth()->user()->userable_id, ]); } }) diff --git a/app/Livewire/MyDatabaseNotifications.php b/app/Livewire/MyDatabaseNotifications.php index 61cd545..32cfb21 100644 --- a/app/Livewire/MyDatabaseNotifications.php +++ b/app/Livewire/MyDatabaseNotifications.php @@ -857,12 +857,12 @@ public function confirmConstraint($user, $constraintName, $startDate, $endDate) protected function confirmConstraintNotification($user, $constraintName, $startDate, $endDate) { - Constraint::create([ - 'constraint_type' => $constraintName, - 'start_date' => $startDate, - 'end_date' => $endDate, - 'soldier_id' => User::find($user)->userable_id, - ]); + $constraint = new Constraint; + $constraint->constraint_type = $constraintName; + $constraint->start_date = $startDate; + $constraint->end_date = $endDate; + $constraint->soldier_id = User::find($user)->userable_id; + $constraint->save(); $this->sendNotification( __('Constraint request approved'), __('Commander approved create constraint', [ From 6f99ed54b806f638b2822df430440b95d37a0302 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 15 Jan 2025 12:48:08 +0200 Subject: [PATCH 069/259] push and deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 31 +- app/Models/Constraint.php | 10 +- app/Models/Shift.php | 88 ++- app/Models/Soldier.php | 12 + app/Models/Task.php | 10 +- app/Policies/ConstraintPolicy.php | 15 + app/Policies/ShiftPolicy.php | 15 + app/Policies/TeamPolicy.php | 2 +- app/Providers/AppServiceProvider.php | 2 +- app/Providers/FilamentServiceProvider.php | 4 +- app/Resources/DepartmentResource.php | 5 +- app/Resources/ProfileResource.php | 55 +- app/Resources/SoldierResource.php | 39 +- .../SoldierResource/Pages/CreateSoldier.php | 7 - .../SoldierResource/Pages/EditSoldier.php | 8 +- app/Resources/TaskResource.php | 98 +-- .../TaskResource/Pages/CreateTask.php | 9 +- app/Resources/TaskResource/Pages/EditTask.php | 13 + app/Resources/TeamResource.php | 8 +- app/Services/ManualAssignment.php | 2 +- bootstrap/app.php | 4 +- ...2024_05_30_094012_create_soldier_table.php | 1 + lang/en.json | 4 +- lang/he.json | 14 +- .../css/coolsam/flatpickr/flatpickr-css.css | 632 +++++++++++++++++- .../css/coolsam/flatpickr/flatpickr-them.css | 66 +- .../forms/components/flatpickr.blade.php | 4 +- tests/Feature/PoliciesTest.php | 4 +- tests/Feature/ReservistsTest.php | 7 - 30 files changed, 992 insertions(+), 179 deletions(-) create mode 100644 app/Policies/ConstraintPolicy.php create mode 100644 app/Policies/ShiftPolicy.php diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 5d00747..d19bcd0 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_5 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_6 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 0839126..7af16db 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -158,7 +158,7 @@ protected function headerActions(): array ->action(function (array $data) { if ( ($data['constraint_type'] == ConstraintType::VACATION->value || - $data['constraint_type'] == ConstraintType::MEDICAL->value) + $data['constraint_type'] == ConstraintType::MEDICAL->value) && auth()->user()->getRoleNames()->count() === 1 ) { Constraint::requestConstraint($data); @@ -206,30 +206,31 @@ protected function headerActions(): array Action::make('Create shifts') ->action(fn () => $this->runEvents()) ->label(__('Create shifts')) - ->icon('heroicon-o-clipboard-document-check') - ->visible(auth()->user()->getRoleNames()->count() > 1), + ->icon('heroicon-o-clipboard-document-check'), Action::make('Shifts assignment') ->action(fn () => $this->runAlgorithm()) ->label(__('Shifts assignment')) - ->icon('heroicon-o-play') - ->visible(auth()->user()->getRoleNames()->count() > 1), + ->icon('heroicon-o-play'), Action::make('Reset assignment') ->action(fn () => $this->resetShifts()) ->label(__('Reset assignment')) - ->icon('heroicon-o-arrow-path') - ->visible(auth()->user()->getRoleNames()->count() > 1), - ]), + ->icon('heroicon-o-arrow-path'), + ]) + ->visible(in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray()) + || in_array('manager', auth()->user()->getRoleNames()->toArray())), ]; } } if ($this->filter) { return array_merge( $actions ?? [], - self::activeFilters(), [ + self::activeFilters(), + [ self::resetFilters(), $this->model::getFilters($this) ->closeModalByClickingAway(false), - ]); + ] + ); } return array_merge( @@ -341,8 +342,14 @@ protected function getBasicActions() 'end_date' => $arguments['event']['end'] ?? $record->end_date, ]; }) - ->visible(function ($record) { - return $record->start_date >= now(); + ->visible(function ($arguments) { + if (! empty($arguments['event']) && $arguments['event']['start'] < now()) { + $this->refreshRecords(); + + return false; + } + + return true; }) ->modalCloseButton(false) ->modalCancelAction(false) diff --git a/app/Models/Constraint.php b/app/Models/Constraint.php index 502938f..4d7f421 100644 --- a/app/Models/Constraint.php +++ b/app/Models/Constraint.php @@ -42,7 +42,7 @@ public static function getSchema(): array { return [ Placeholder::make('') - ->content(content: fn (Constraint $constraint) => $constraint->soldier_name) + ->content(fn (Constraint $constraint) => $constraint->soldier_name) ->inlineLabel(), ToggleButtons::make('constraint_type') ->required() @@ -62,6 +62,10 @@ public static function getSchema(): array ->required(), Hidden::make('end_date') ->required(), + Placeholder::make('') + ->content(__('Please note! This constraint will only be approved for you after approval from the commander.')) + ->visible(fn (Get $get) => $get('constraint_type') == 'Vacation' || $get('constraint_type') == 'Medical') + ->extraAttributes(['style' => 'color: red; font-family: Arial, Helvetica, sans-serif; font-size: 20px']), Grid::make() ->visible(fn ($get) => in_array($get('constraint_type'), ['Medical', 'Vacation', 'School', 'Not task', 'Low priority not task'])) ->schema([ @@ -137,8 +141,8 @@ private static function availableOptions($startDate, $endDate): array } $usedCounts = self::getUsedCountsForCurrentMonth($startDate, $endDate); $limits = Soldier::where('id', auth()->user()->userable_id)->pluck('constraints_limit')->first() - ? Soldier::where('id', auth()->user()->userable_id)->pluck('constraints_limit')->first() - : ConstraintType::getLimit(); + ? Soldier::where('id', auth()->user()->userable_id)->pluck('constraints_limit')->first() + : ConstraintType::getLimit(); $constraintsWithinLimit = []; $queryConstraints = Constraint::where('soldier_id', auth()->user()->userable_id) diff --git a/app/Models/Shift.php b/app/Models/Shift.php index 900f34c..5f7827f 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -70,12 +70,12 @@ public static function getSchema(): array return [ Section::make([ Placeholder::make('') - ->content(content: fn (Shift $shift) => $shift->task_name) + ->content(fn (Shift $shift) => $shift->task_name) ->inlineLabel(), Grid::make() ->schema([ ToggleButtons::make('soldier_type') - ->label(__('Soldier')) + ->label(__('Soldier type')) ->reactive() ->live() ->inline() @@ -84,7 +84,7 @@ public static function getSchema(): array ) ->afterStateUpdated(fn (callable $set) => $set('soldier_id', null)), Select::make('soldier_id') - ->label(__('Soldier assignment')) + ->label(__('Soldier')) ->options( function (?Shift $shift, Get $get) { if ($get('soldier_type') === 'all') { @@ -101,7 +101,13 @@ function (?Shift $shift, Get $get) { } ) ->default(null) - ->placeholder(__('Select a soldier')) + ->placeholder(function (?Shift $shift, Get $get) { + $manual_assignment = new ManualAssignment($shift, $get('soldier_type')); + + return ! $manual_assignment->getSoldiers() ? + __('No suitable soldiers') : + __('Select a soldier'); + }) ->visible( fn (Get $get): bool => $get('soldier_type') != null && $get('soldier_type') != 'me' @@ -117,7 +123,7 @@ function (?Shift $shift, Get $get) { && Carbon::parse($record->start_date)->isAfter(now()) && ! $record->soldier_id && \Str::contains($_SERVER['HTTP_REFERER'], 'my-soldiers-shifts') - && current(array: array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) + && current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) ) ->hiddenOn('view'), Toggle::make('is_weekend') @@ -251,7 +257,8 @@ function ($shift) { ->action(function (array $data, array $arguments, Model $record, Component $livewire): void { session()->put('selected_shift', false); if ($arguments['exchange'] ?? false) { - collect($arguments['role'])->contains('shifts-assignment') ? + collect($arguments['role'])->contains('shifts-assignment') + || collect($arguments['role'])->contains('manager') ? self::shiftsAssignmentExchange($record, Shift::find($data['selected_shift'])) : self::commanderExchange($record, Shift::find($data['selected_shift'])); $livewire->dispatch('filament-fullcalendar--refresh'); @@ -263,6 +270,13 @@ function ($shift) { if ($arguments['cancel'] ?? false) { $livewire->dispatch('filament-fullcalendar--refresh'); } + }) + ->hidden(function ($record) { + if ($record->soldier_id) { + $changeAssignment = new ChangeAssignment($record); + + return $changeAssignment->getMatchingShifts()->isEmpty(); + } }); } @@ -539,7 +553,8 @@ function (Action $action): array { ->action(function (array $data, array $arguments, Model $record, Component $livewire): void { session()->put('selected_soldier', false); if ($arguments['change'] ?? false) { - collect($arguments['role'])->contains('shifts-assignment') ? + collect($arguments['role'])->contains('shifts-assignment') + || collect($arguments['role'])->contains('manager') ? self::shiftsAssignmentChange($record, $data['soldier']) : self::commanderChange($record, $data['soldier']); @@ -743,42 +758,49 @@ public static function getFilters($calendar) $soldiersShifts = array_filter($shifts->toArray(), fn ($shift) => $shift['soldier_id'] !== null); return [ + section::make([ + Toggle::make('unassigned_shifts') + ->label(__('Unassigned shifts')) + ->live() + ->visible(fn (Get $get) => ! $get('reservists')), + Toggle::make('reservists') + ->label(__('Reservists')) + ->live() + ->visible(fn (Get $get) => ! $get('unassigned_shifts')), + ])->columns(2), Select::make('soldier_id') ->label(__('Soldier')) ->options(fn (): array => collect($soldiersShifts)->mapWithKeys(fn ($shift) => [ $shift['soldier_id'] => User::where('userable_id', $shift['soldier_id']) ->first()?->displayName, ])->toArray()) - ->multiple(), + ->multiple() + ->hidden(fn (Get $get) => $get('unassigned_shifts') || $get('reservists')), Select::make('type') ->label(__('Type')) ->options(Task::all()->pluck('type', 'id')->unique()) - ->multiple(), + ->multiple() + ->hidden(fn (Get $get) => $get('unassigned_shifts') || $get('reservists')), ]; }) - ->modalSubmitAction(false) ->modalCancelAction(false) - ->extraModalFooterActions(fn (Action $action): array => [ - $action->makeModalSubmitAction('Filter', arguments: ['Filter' => true])->color('success')->label(__('Filter')), - $action->makeModalSubmitAction('Unassigned shifts', arguments: ['UnassignedShifts' => true])->color('primary')->label(__('Unassigned shifts')), - ]) - ->action(function (array $data, array $arguments) use ($calendar) { - $data['type'] = Task::whereIn( - 'type', - Task::whereIn('id', $data['type']) - ->pluck('type') - ) - ->pluck('id') - ->toArray(); - if ($arguments['Filter'] ?? false) { - $calendar->filterData = $data; - $calendar->filter = ! ($data['soldier_id'] === [] && $data['type'] === []); - $calendar->refreshRecords(); - } - if ($arguments['UnassignedShifts'] ?? false) { - $calendar->filterData = 'UnassignedShifts'; + ->modalSubmitActionLabel(__('Filter')) + ->action(function (array $data) use ($calendar) { + if (count($data) == 1) { + $calendar->filterData = key($data) == 'unassigned_shifts' ? __('Unassigned shifts') : __('Reservists'); $calendar->filter = true; $calendar->refreshRecords(); + } else { + $data['type'] = Task::whereIn( + 'type', + Task::whereIn('id', $data['type']) + ->pluck('type') + ) + ->pluck('id') + ->toArray(); + $calendar->filterData = $data; + $calendar->filter = ! (count($data) == 4 && ($data['soldier_id'] === [] && $data['type'] === [])); + $calendar->refreshRecords(); } }); } @@ -786,8 +808,10 @@ public static function getFilters($calendar) public static function filter($events, $filterData) { return $events - ->when($filterData === 'UnassignedShifts', fn ($query) => $query + ->when($filterData === __('Unassigned shifts'), fn ($query) => $query ->where('soldier_id', null)) + ->when($filterData === __('Reservists'), fn ($query) => $query + ->whereIn('soldier_id', Soldier::where('is_reservist', true)->pluck('id')->toArray())) ->when(! empty($filterData['soldier_id']), fn ($query) => $query ->whereIn('soldier_id', $filterData['soldier_id'])) ->when(! empty($filterData['type']), fn ($query) => $query @@ -798,8 +822,8 @@ public static function filter($events, $filterData) public static function activeFilters($calendar) { if ($calendar->filter) { - return $calendar->filterData === 'UnassignedShifts' - ? ['Unassigned shifts'] + return gettype($calendar->filterData) == 'string' + ? $calendar->filterData : collect($calendar->filterData['soldier_id']) ->map(function ($soldier_id) { return User::where('userable_id', $soldier_id)->first()->displayName ?? null; diff --git a/app/Models/Soldier.php b/app/Models/Soldier.php index 1e6e6ec..fb8cf2c 100644 --- a/app/Models/Soldier.php +++ b/app/Models/Soldier.php @@ -29,6 +29,7 @@ class Soldier extends Model 'is_mabat', 'qualifications', 'is_reservist', + 'last_reserve_dates', 'reserve_dates', 'next_reserve_dates', 'constraints_limit', @@ -46,6 +47,7 @@ class Soldier extends Model 'max_weekends' => Integer::class, 'qualifications' => 'array', 'is_reservist' => 'boolean', + 'last_reserve_dates' => 'array', 'reserve_dates' => 'array', 'next_reserve_dates' => 'array', 'constraints_limit' => 'array', @@ -81,6 +83,16 @@ public function constraints(): HasMany return $this->hasMany(Constraint::class); } + public function updateReserveDays() + { + Soldier::where('is_reservist', true)->get()->map(function ($soldier) { + $soldier['last_reserve_dates'] = array_merge($soldier['last_reserve_dates'], $soldier['reserve_dates']); + $soldier['reserve_dates'] = $soldier['next_reserve_dates']; + $soldier['next_reserve_dates'] = []; + $soldier->save(); + }); + } + public static function boot() { parent::boot(); diff --git a/app/Models/Task.php b/app/Models/Task.php index afa3f0c..a6313b0 100644 --- a/app/Models/Task.php +++ b/app/Models/Task.php @@ -43,12 +43,12 @@ public function shifts(): HasMany protected static function booted(): void { static::deleting(function (Task $task) { - $shifts = Shift::where('task_id', $task->id) + Shift::where('task_id', $task->id) ->where('start_date', '>', now()) - ->get(); - $shifts->map(function (Shift $shift) { - $shift->delete(); - }); + ->get() + ->map(function (Shift $shift) { + $shift->delete(); + }); }); } } diff --git a/app/Policies/ConstraintPolicy.php b/app/Policies/ConstraintPolicy.php new file mode 100644 index 0000000..463ea82 --- /dev/null +++ b/app/Policies/ConstraintPolicy.php @@ -0,0 +1,15 @@ +hasRole(['manager', 'shifts-assignment', 'department-commander', 'team-commander']) + || ($user->hasRole('soldier') && Soldier::find($user->userable_id)->team !== null); + } +} diff --git a/app/Policies/ShiftPolicy.php b/app/Policies/ShiftPolicy.php new file mode 100644 index 0000000..c6a5a07 --- /dev/null +++ b/app/Policies/ShiftPolicy.php @@ -0,0 +1,15 @@ +hasRole(['manager', 'shifts-assignment', 'department-commander', 'team-commander']) + || ($user->hasRole('soldier') && Soldier::find($user->userable_id)->team !== null); + } +} diff --git a/app/Policies/TeamPolicy.php b/app/Policies/TeamPolicy.php index f90d9ef..7641f9a 100644 --- a/app/Policies/TeamPolicy.php +++ b/app/Policies/TeamPolicy.php @@ -8,6 +8,6 @@ class TeamPolicy { public function viewAny(User $user): bool { - return $user->hasRole(['manager', 'shifts-assignment', 'department-commander']); + return $user->hasRole(['manager', 'shifts-assignment', 'department-commander', 'team-commander']); } } diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 4a7d272..6e8a08c 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -34,6 +34,6 @@ public function boot(): void FilamentAsset::register([ Css::make('custom-fullcalendar', asset('css/saade/filament-fullcalendar/override-filament-fullcalendar.css')), - ], package: 'saade/filament-fullcalendar'); + ], 'saade/filament-fullcalendar'); } } diff --git a/app/Providers/FilamentServiceProvider.php b/app/Providers/FilamentServiceProvider.php index d4d7527..83fb355 100644 --- a/app/Providers/FilamentServiceProvider.php +++ b/app/Providers/FilamentServiceProvider.php @@ -36,8 +36,8 @@ public function panel(Panel $panel): Panel ]) ->databaseNotifications() ->databaseNotificationsPolling('60s') - ->discoverResources(in: app_path('Resources'), for: 'App\\Resources') - ->discoverClusters(in: app_path('Filament/Clusters'), for: 'App\\Filament\\Clusters') + ->discoverResources(app_path('Resources'), 'App\\Resources') + ->discoverClusters(app_path('Filament/Clusters'), 'App\\Filament\\Clusters') ->login(Login::class) ->middleware([ EncryptCookies::class, diff --git a/app/Resources/DepartmentResource.php b/app/Resources/DepartmentResource.php index f3648b1..076c2b7 100644 --- a/app/Resources/DepartmentResource.php +++ b/app/Resources/DepartmentResource.php @@ -78,7 +78,7 @@ public static function table(Table $table): Table ->formatStateUsing(function ($state) { return $state->last_name.' '.$state->first_name; }) - ->label(__(key: 'Commander')) + ->label(__('Commander')) ->searchable() ->sortable(), ]) @@ -125,7 +125,8 @@ public static function checkCommander($teams, $departments, $data) ? __('You did not choose a commander. With your approval, you leave the department without a commander. Are you sure?', ['type' => $type]) : __('The commander you selected is already registered as a commander. His selection will leave his :type without a commander. Are you sure?', ['type' => $type]); $actions = array_filter([ - ! $isCommanderNull ? NotificationsService\Action::make($teams->isNotEmpty() ? __('View team') : __('View department')) + ! $isCommanderNull ? NotificationsService\Action::make('view') + ->label(__('View ').($teams->isNotEmpty() ? __('Team') : __('Department'))) ->button() ->url( fn () => $teams->isNotEmpty() diff --git a/app/Resources/ProfileResource.php b/app/Resources/ProfileResource.php index 7135d71..16f121e 100644 --- a/app/Resources/ProfileResource.php +++ b/app/Resources/ProfileResource.php @@ -48,16 +48,43 @@ public static function form(Form $form): Form ->schema([ TextInput::make('first_name')->label(__('First name'))->required(), TextInput::make('last_name')->label(__('Last name'))->required(), + DatePicker::make('enlist_date') + ->label(__('Enlist date')) + ->seconds(false), ]), Section::make([ Select::make('qualifications') ->label(__('Qualifications')) ->placeholder(__('Select qualifications')) ->options(Task::all()->pluck('type', 'type')), - DatePicker::make('enlist_date') - ->label(__('Enlist date')) - ->seconds(false), - ])->columns(2), + TextInput::make('capacity') + ->numeric() + ->step(0.25) + ->minValue(0) + ->label(__('Capacity')) + ->required(), + TextInput::make('max_shifts') + ->label(__('Max shifts')) + ->numeric() + ->step(1) + ->minValue(0) + ->required() + ->default(0), + TextInput::make('max_nights') + ->label(__('Max nights')) + ->numeric() + ->step(0.25) + ->minValue(0) + ->required() + ->default(0), + TextInput::make('max_weekends') + ->label(__('Max weekends')) + ->numeric() + ->step(0.25) + ->minValue(0) + ->required() + ->default(0), + ])->columns(2)->visible(fn () => auth()->user()->getRoleNames()->count() > 1), Section::make([ Toggle::make('is_permanent')->Label(__('Is permanent')), Toggle::make('has_exemption')->label(__('Exemption')), @@ -86,16 +113,16 @@ public static function table(Table $table): Table ->label(__('Full name')) ->formatStateUsing(function ($record) { return $record->user->last_name.' '.$record->user->first_name; - })->weight(weight: FontWeight::SemiBold)->description(__('Full name'), position: 'above')->size(TextColumnSize::Large), - TextColumn::make('enlist_date')->weight(weight: FontWeight::SemiBold)->description(__('Enlist date'), position: 'above')->size(TextColumnSize::Large)->date(), - TextColumn::make('course')->weight(weight: FontWeight::SemiBold)->description(__('Course'), position: 'above')->size(TextColumnSize::Large), - TextColumn::make('max_shifts')->weight(weight: FontWeight::SemiBold)->description(__('Max shifts'), position: 'above')->size(TextColumnSize::Large), + })->weight(FontWeight::SemiBold)->description(__('Full name'), 'above')->size(TextColumnSize::Large), + TextColumn::make('enlist_date')->weight(FontWeight::SemiBold)->description(__('Enlist date'), 'above')->size(TextColumnSize::Large)->date(), + TextColumn::make('course')->weight(FontWeight::SemiBold)->description(__('Course'), 'above')->size(TextColumnSize::Large), + TextColumn::make('max_shifts')->weight(FontWeight::SemiBold)->description(__('Max shifts'), 'above')->size(TextColumnSize::Large), ]), Stack::make([ - TextColumn::make('max_nights')->weight(weight: FontWeight::SemiBold)->description(__('Max nights'), position: 'above')->size(TextColumnSize::Large), - TextColumn::make('max_weekends')->weight(weight: FontWeight::SemiBold)->description(__('Max weekends'), position: 'above')->size(TextColumnSize::Large), - TextColumn::make('capacity')->weight(weight: FontWeight::SemiBold)->description(__('Capacity'), position: 'above')->size(TextColumnSize::Large), + TextColumn::make('max_nights')->weight(FontWeight::SemiBold)->description(__('Max nights'), 'above')->size(TextColumnSize::Large), + TextColumn::make('max_weekends')->weight(FontWeight::SemiBold)->description(__('Max weekends'), 'above')->size(TextColumnSize::Large), + TextColumn::make('capacity')->weight(FontWeight::SemiBold)->description(__('Capacity'), 'above')->size(TextColumnSize::Large), TextColumn::make('capacity_hold') ->default(function () { $soldierShifts = Shift::where('soldier_id', auth()->user()->userable_id)->get(); @@ -104,10 +131,10 @@ public static function table(Table $table): Table return Carbon::parse($shift->start_date)->month == now()->month || Carbon::parse($shift->end_date)->month == now()->month; })->sum(fn (Shift $shift) => $shift->parallel_weight === null ? $shift->task->parallel_weight : $shift->parallel_weight); }) - ->weight(weight: FontWeight::SemiBold) - ->description(__('Capacity hold'), position: 'above') + ->weight(FontWeight::SemiBold) + ->description(__('Capacity hold'), 'above') ->size(TextColumnSize::Large), - TextColumn::make('qualifications')->weight(weight: FontWeight::SemiBold)->description(__('Qualifications'), position: 'above')->size(TextColumnSize::Large), + TextColumn::make('qualifications')->weight(FontWeight::SemiBold)->description(__('Qualifications'), 'above')->size(TextColumnSize::Large), ]), ]), ]) diff --git a/app/Resources/SoldierResource.php b/app/Resources/SoldierResource.php index cc2ddf0..e07a22f 100644 --- a/app/Resources/SoldierResource.php +++ b/app/Resources/SoldierResource.php @@ -22,7 +22,6 @@ use Filament\Forms\Components\Toggle; use Filament\Forms\Components\ToggleButtons; use Filament\Forms\Form; -use Filament\Forms\Get; use Filament\Resources\Resource; use Filament\Tables\Actions\Action; use Filament\Tables\Actions\ActionGroup; @@ -53,7 +52,6 @@ public static function form(Form $form): Form ->schema([ Section::make()->schema([self::personalDetails()])->columns(), Section::make()->schema(self::soldierDetails())->columns(), - Section::make()->schema(self::reserveDays())->columns()->visible(fn (Get $get) => $get('is_reservist')), Section::make()->schema(self::constraints())->columns(), Section::make()->schema(self::constraintsLimit())->columns(), ]); @@ -90,7 +88,7 @@ function ($record) { $roles = Soldier::find($record->id)->user->getRoleNames(); $roles->count() > 1 ? $roles->shift(1) : null; $roles->all(); - + return array_map(function ($role) { return match ($role) { 'manager' => __('Manager'), @@ -105,7 +103,7 @@ function ($record) { ), TextColumn::make('teamSoldier') ->label(__('Team')) - ->visible(collect(auth()->user()->getRoleNames())->intersect(['manager', 'department-commander'])->isNotEmpty()) + ->visible(collect(auth()->user()->getRoleNames())->intersect(['manager', 'shifts-assignment', 'department-commander'])->isNotEmpty()) ->placeholder(__('Not associated')) ->default(function ($record) { @@ -235,6 +233,18 @@ function ($record) { ->color('primary') ->form(function ($record) { return [ + Flatpickr::make('last_reserve_dates') + ->label(__('Last reserve dates')) + ->multiple() + ->default($record->last_reserve_dates) + ->minDate($record->enlist_date) + ->maxDate(now()->subMonth()->endOfMonth()), + Flatpickr::make('reserve_dates') + ->label(__('Reserve dates')) + ->multiple() + ->default($record->reserve_dates) + ->minDate(now()->startOfMonth()) + ->maxDate(now()->endOfMonth()), Flatpickr::make('next_reserve_dates') ->label(__('Next reserve dates')) ->multiple() @@ -244,6 +254,8 @@ function ($record) { ]; }) ->action(function (Soldier $record, array $data): void { + $record->last_reserve_dates = $data['last_reserve_dates']; + $record->reserve_dates = $data['reserve_dates']; $record->next_reserve_dates = $data['next_reserve_dates']; $record->save(); }) @@ -253,6 +265,10 @@ function ($record) { ->icon('heroicon-o-document-duplicate') ->color('success') ->after(function (Soldier $replica): void { + $replica['last_reserve_dates'] = []; + $replica['reserve_dates'] = []; + $replica['next_reserve_dates'] = []; + $replica->save(); redirect()->route('filament.app.resources.soldiers.edit', ['record' => $replica->id]); }) ->successNotification(null) @@ -339,8 +355,7 @@ public static function soldierDetails(): array ->required(), Section::make([ Toggle::make('is_reservist') - ->label(__('Reservist')) - ->live(), + ->label(__('Reservist')), Toggle::make('is_permanent') ->label(__('Is permanent')), Toggle::make('has_exemption') @@ -349,18 +364,6 @@ public static function soldierDetails(): array ]; } - public static function reserveDays(): array - { - return [ - Flatpickr::make('reserve_dates') - ->label(__('Reserve dates')) - ->multiple() - ->minDate(today()) - ->maxDate(today()->endOfMonth()) - ->columnSpan('full'), - ]; - } - public static function constraints(): array { return [ diff --git a/app/Resources/SoldierResource/Pages/CreateSoldier.php b/app/Resources/SoldierResource/Pages/CreateSoldier.php index c4443d5..4f67497 100644 --- a/app/Resources/SoldierResource/Pages/CreateSoldier.php +++ b/app/Resources/SoldierResource/Pages/CreateSoldier.php @@ -6,7 +6,6 @@ use App\Resources\SoldierResource; use Filament\Forms\Components\Section; use Filament\Forms\Components\Wizard\Step; -use Filament\Forms\Get; use Filament\Notifications\Notification; use Filament\Resources\Pages\CreateRecord; use Filament\Resources\Pages\CreateRecord\Concerns\HasWizard; @@ -58,12 +57,6 @@ public static function getSteps(): array ->schema([ Section::make()->schema(SoldierResource::soldierDetails())->columns(), ]), - Step::make('Reserve days') - ->label(__('Reserve dates')) - ->visible(fn (Get $get) => $get('is_reservist')) - ->schema([ - Section::make()->schema(SoldierResource::reserveDays())->columns(), - ]), Step::make('Additional settings') ->label(__('Additional settings')) ->schema([ diff --git a/app/Resources/SoldierResource/Pages/EditSoldier.php b/app/Resources/SoldierResource/Pages/EditSoldier.php index 4219d71..4cbc23a 100644 --- a/app/Resources/SoldierResource/Pages/EditSoldier.php +++ b/app/Resources/SoldierResource/Pages/EditSoldier.php @@ -12,7 +12,13 @@ class EditSoldier extends EditRecord protected function mutateFormDataBeforeFill(array $data): array { - $data['shifts_assignment'] = User::where('userable_id', $this->record->id)?->first() ? in_array('shifts-assignment', User::where('userable_id', $this->record->id)->first()->getRoleNames()->toArray()) : false; + $data['shifts_assignment'] = User::where('userable_id', $this->record->id)?->first() + ? in_array('shifts-assignment', User::where('userable_id', $this->record->id) + ->first() + ->getRoleNames() + ->toArray()) + : false; + return $data; } diff --git a/app/Resources/TaskResource.php b/app/Resources/TaskResource.php index e83b22f..5af05d3 100644 --- a/app/Resources/TaskResource.php +++ b/app/Resources/TaskResource.php @@ -7,6 +7,7 @@ use App\Filters\NumberFilter; use App\Models\Department; use App\Models\Shift; +use App\Models\Soldier; use App\Models\Task; use App\Models\User; use App\Resources\TaskResource\Pages; @@ -16,7 +17,6 @@ use Filament\Forms\Components\ColorPicker; use Filament\Forms\Components\DatePicker; use Filament\Forms\Components\Fieldset; -use Filament\Forms\Components\Grid; use Filament\Forms\Components\Placeholder; use Filament\Forms\Components\Section; use Filament\Forms\Components\Select; @@ -84,19 +84,19 @@ public static function table(Table $table): Table ->columns([ Split::make([ TextColumn::make('name') - ->description(__('Name'), position: 'above') + ->description(__('Name'), 'above') ->size(TextColumnSize::Small), TextColumn::make('type') - ->description(__('Type'), position: 'above') + ->description(__('Type'), 'above') ->size(TextColumnSize::Small), TextColumn::make('parallel_weight') - ->description(__('Parallel weight'), position: 'above') + ->description(__('Parallel weight'), 'above') ->size(TextColumnSize::Small), ]) ->extraAttributes(['style' => 'align-items: baseline;']), Split::make([ TextColumn::make('department_name') - ->description(__('Department'), position: 'above') + ->description(__('Department'), 'above') ->size(TextColumnSize::Small), ColorColumn::make('color') ->copyable() @@ -106,25 +106,25 @@ public static function table(Table $table): Table Panel::make([ Stack::make([ TextColumn::make('start_hour') - ->description(__('Start at'), position: 'above') + ->description(__('Start at'), 'above') ->size(TextColumnSize::Small) ->extraAttributes(['style' => 'margin: 5px;']), TextColumn::make('duration') - ->description(__('Duration'), position: 'above') + ->description(__('Duration'), 'above') ->size(TextColumnSize::Small) ->extraAttributes(['style' => 'margin: 5px;']), TextColumn::make('is_alert') - ->description(__('Alert'), position: 'above') + ->description(__('Alert'), 'above') ->extraAttributes(['style' => 'margin: 5px;']) ->size(TextColumnSize::Small) ->formatStateUsing(fn ($state) => $state ? __('Yes') : __('No')), TextColumn::make('is_weekend') - ->description(__('Is weekend'), position: 'above') + ->description(__('Is weekend'), 'above') ->size(TextColumnSize::Small) ->extraAttributes(['style' => 'margin: 5px;']) ->formatStateUsing(fn ($state) => $state ? __('Yes') : __('No')), TextColumn::make('is_night') - ->description(__('Is night'), position: 'above') + ->description(__('Is night'), 'above') ->size(TextColumnSize::Small) ->extraAttributes(['style' => 'margin: 5px;']) ->formatStateUsing(fn ($state) => $state ? __('Yes') : __('No')), @@ -134,7 +134,7 @@ public static function table(Table $table): Table ->extraAttributes(['style' => 'display: flex; flex-direction: row; flex-wrap: wrap; justify-content: space-between; align-items: baseline; margin-bottom:10px']), Stack::make([ TextColumn::make('recurring.type') - ->description(__('Recurring type'), position: 'above') + ->description(__('Recurring type'), 'above') ->size(TextColumnSize::Small) ->formatStateUsing(function ($state) { switch ($state) { @@ -153,19 +153,19 @@ public static function table(Table $table): Table } }), TextColumn::make('recurring.days_in_week') - ->description(__('Days in week'), position: 'above') + ->description(__('Days in week'), 'above') ->size(TextColumnSize::Small) ->extraAttributes(['style' => 'margin-left: 15px;']), TextColumn::make('recurring.dates_in_month') - ->description(__('Dates in month'), position: 'above') + ->description(__('Dates in month'), 'above') ->size(TextColumnSize::Small) ->extraAttributes(['style' => 'margin-left: 15px;']), TextColumn::make('recurring.start_date') - ->description(__('Start date'), position: 'above') + ->description(__('Start date'), 'above') ->size(TextColumnSize::Small) ->extraAttributes(['style' => 'margin-left: 15px;']), TextColumn::make('recurring.end_date') - ->description(__('End date'), position: 'above') + ->description(__('End date'), 'above') ->size(TextColumnSize::Small) ->extraAttributes(['style' => 'margin-left: 15px;']), ]) @@ -322,10 +322,10 @@ public static function getRecurring(): array Fieldset::make(__('Dates')) ->schema([ DatePicker::make('recurring.start_date') - ->label(label: __('Start date')) + ->label(__('Start date')) ->required(), DatePicker::make('recurring.end_date') - ->label(label: __('End date')) + ->label(__('End date')) ->after('recurring.start_date') ->required(), ])->visible(fn (Get $get): bool => $get('recurring.type') === 'Daily range'), @@ -342,38 +342,42 @@ public static function getRecurring(): array public static function assignSoldier(): array { return [ + Placeholder::make('') + ->content(fn ($record) => $record['recurring']['type'] === RecurringType::ONETIME->value ? + __('This task is assigned to', ['soldierName' => Soldier::find(Shift::where('task_id', $record->id)->pluck('soldier_id')->first())->user->displayName]) : null) + ->extraAttributes(['style' => 'font-size: 15px']) + ->live() + ->hiddenOn('create') + ->visible(fn ($record) => $record['recurring']['type'] === RecurringType::ONETIME->value && Shift::where('task_id', $record->id)->pluck('soldier_id')->first() !== null), Fieldset::make(__('Soldier assignment')) ->schema([ - Grid::make() - ->schema([ - ToggleButtons::make('soldier_type') - ->label(__('Soldier type')) - ->reactive() - ->live() - ->inline() - ->options( - fn (Get $get) => self::getOptions($get) - ) - ->afterStateUpdated(fn (callable $set) => $set('soldier_id', null)), - Select::make('soldier_id') - ->label(__('Assign soldier')) - ->options( - function (Get $get) { - return self::getSoldiers($get); - } - ) - ->default(null) - ->placeholder(fn (Get $get) => self::getSoldiers($get)->isEmpty() ? __('No suitable soldiers') : __('Select a soldier')) - ->visible( - fn (Get $get): bool => $get('soldier_type') - && $get('soldier_type') != 'me' - ), - Placeholder::make('') - ->content(__('Assigning the soldier to this shift is your sole responsibility!')) - ->extraAttributes(['style' => 'color: red; font-family: Arial, Helvetica, sans-serif; font-size: 20px']) - ->live() - ->visible(fn (Get $get) => $get('soldier_type') === 'all'), - ]), + ToggleButtons::make('soldier_type') + ->label(__('Soldier type')) + ->reactive() + ->live() + ->inline() + ->options( + fn (Get $get) => self::getOptions($get) + ) + ->afterStateUpdated(fn (callable $set) => $set('soldier_id', null)), + Select::make('soldier_id') + ->label(__('Assign soldier')) + ->options( + function (Get $get) { + return self::getSoldiers($get); + } + ) + ->default(null) + ->placeholder(fn (Get $get) => self::getSoldiers($get)->isEmpty() ? __('No suitable soldiers') : __('Select a soldier')) + ->visible( + fn (Get $get): bool => $get('soldier_type') + && $get('soldier_type') != 'me' + ), + Placeholder::make('') + ->content(__('Assigning the soldier to this shift is your sole responsibility!')) + ->extraAttributes(['style' => 'color: red; font-family: Arial, Helvetica, sans-serif; font-size: 20px']) + ->live() + ->visible(fn (Get $get) => $get('soldier_type') === 'all'), ]), ]; } diff --git a/app/Resources/TaskResource/Pages/CreateTask.php b/app/Resources/TaskResource/Pages/CreateTask.php index 22c5999..28ee749 100644 --- a/app/Resources/TaskResource/Pages/CreateTask.php +++ b/app/Resources/TaskResource/Pages/CreateTask.php @@ -3,7 +3,6 @@ namespace App\Resources\TaskResource\Pages; use App\Models\Shift; -use App\Models\Soldier; use App\Models\Task; use App\Resources\TaskResource; use App\Services\RecurringEvents; @@ -33,8 +32,8 @@ protected function afterCreate(): void return; } $shift_for_assignment = Shift::latest()->first(); - $soldier = ($this->data['soldier_type'] == 'me') ? Soldier::find(auth()->user()->userable_id) : Soldier::find($this->data['soldier_id']); - $shift_for_assignment->soldier_id = $soldier->id; + $soldierId = ($this->data['soldier_type'] === 'me') ? auth()->user()->userable_id : $this->data['soldier_id']; + $shift_for_assignment->soldier_id = $soldierId; $shift_for_assignment->save(); } @@ -69,8 +68,8 @@ public static function getSteps(): array ->schema([ Section::make()->schema(TaskResource::additionalDetails())->columns(), ]), - Step::make(label: 'Assign_soldier') - ->label(__('Assign soldier')) + Step::make('Assign_soldier') + ->label(__('Soldier assignment')) ->schema([ Section::make()->schema(TaskResource::assignSoldier())->columns(), ]) diff --git a/app/Resources/TaskResource/Pages/EditTask.php b/app/Resources/TaskResource/Pages/EditTask.php index b5e0e89..04a5c5a 100644 --- a/app/Resources/TaskResource/Pages/EditTask.php +++ b/app/Resources/TaskResource/Pages/EditTask.php @@ -2,6 +2,8 @@ namespace App\Resources\TaskResource\Pages; +use App\Enums\RecurringType; +use App\Models\Shift; use App\Resources\TaskResource; use Filament\Actions\DeleteAction; use Filament\Resources\Pages\EditRecord; @@ -21,4 +23,15 @@ protected function getRedirectUrl(): string { return $this->getResource()::getUrl('index'); } + + protected function afterSave(): void + { + if ($this->data['recurring']['type'] === RecurringType::ONETIME->value) { + if (empty($this->data['soldier_type']) || (empty($this->data['soldier_id']) && $this->data['soldier_type'] != 'me')) { + return; + } + $soldierId = $this->data['soldier_type'] === 'me' ? auth()->user()->userable_id : $this->data['soldier_id']; + Shift::where('task_id', $this->data['id'])->update(['soldier_id' => $soldierId]); + } + } } diff --git a/app/Resources/TeamResource.php b/app/Resources/TeamResource.php index 75856bd..46b49e2 100644 --- a/app/Resources/TeamResource.php +++ b/app/Resources/TeamResource.php @@ -185,7 +185,8 @@ public static function checkCommander($teams, $departments, $data) ->persistent() ->body(__('The commander you selected is already registered as a commander. His selection will leave his :type without a commander. Are you sure?')) ->actions([ - NotificationsService\Action::make(__('View ').($teams->isNotEmpty() ? __('Team') : __('Department'))) + NotificationsService\Action::make('view') + ->label(__('View ').($teams->isNotEmpty() ? __('Team') : __('Department'))) ->button() ->url( fn () => $teams->isNotEmpty() ? @@ -194,7 +195,7 @@ public static function checkCommander($teams, $departments, $data) ), NotificationsService\Action::make(__('Confirm')) ->button() - ->dispatch('confirmCreate', data: ['teams' => $teams, 'departments' => $departments]), + ->dispatch('confirmCreate', ['teams' => $teams, 'departments' => $departments]), NotificationsService\Action::make(__('Cancel')) ->button() ->close(), @@ -233,6 +234,9 @@ public static function getEloquentQuery(): Builder if (auth()->user()->hasRole('manager') || auth()->user()->hasRole('shifts-assignment')) { return parent::getEloquentQuery(); } + if (auth()->user()->hasRole('team-commander')) { + return parent::getEloquentQuery()->where('commander_id', auth()->user()->userable_id); + } return parent::getEloquentQuery()->where('department_id', Department::select('id')->where('commander_id', auth()->user()->userable_id)); } diff --git a/app/Services/ManualAssignment.php b/app/Services/ManualAssignment.php index 6836988..50de6ff 100644 --- a/app/Services/ManualAssignment.php +++ b/app/Services/ManualAssignment.php @@ -61,7 +61,7 @@ protected function filterMySoldiers() $this->soldiers = $this->soldiers ->filter(function ($user) { $currentUserId = auth()->user()->userable_id; - $role = current(array: array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])); + $role = current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])); $soldier = $this->getSoldierBy($user->userable_id); return match ($role) { diff --git a/bootstrap/app.php b/bootstrap/app.php index 1692fdd..b9433c1 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -1,5 +1,6 @@ withRouting( commands: __DIR__.'/../routes/console.php', health: '/up', @@ -19,6 +20,7 @@ $schedule->call(fn () => app(Algorithm::class)->run())->monthlyOn(20, '10:00'); $schedule->call(fn () => app(ShiftAssignmentNotification::class)->sendNotification())->monthlyOn(1, '08:00'); $schedule->call(fn () => app(DailyShiftNotification::class)->beforeShift())->dailyAt('06:00'); + $schedule->call(fn () => app(Soldier::class)->updateReserveDays())->monthlyOn(1, '00:00'); }) ->withMiddleware(function (Middleware $middleware) {}) ->withExceptions(function (Exceptions $exceptions) {})->create(); diff --git a/database/migrations/2024_05_30_094012_create_soldier_table.php b/database/migrations/2024_05_30_094012_create_soldier_table.php index 8567482..3bdc9f0 100644 --- a/database/migrations/2024_05_30_094012_create_soldier_table.php +++ b/database/migrations/2024_05_30_094012_create_soldier_table.php @@ -24,6 +24,7 @@ public function up(): void $table->boolean('is_mabat'); $table->json('qualifications'); $table->boolean('is_reservist')->default(false); + $table->json('last_reserve_dates')->nullable(); $table->json('reserve_dates')->nullable(); $table->json('next_reserve_dates')->nullable(); $table->json('constraints_limit')->nullable(); diff --git a/lang/en.json b/lang/en.json index 04581a2..16fbb63 100644 --- a/lang/en.json +++ b/lang/en.json @@ -40,5 +40,7 @@ "Range less than":":label is less than :value", "Range less than equal":":label is less than or equal :value", "Commander approved create constraint":"Hello :name!
Your request to create a constraint :constraintName
From :startDate to :endDate
Has been approved!
Have a good day!", - "Commander deny create constraint":"Hello :name!
Your request to create a constraint :constraintName
From :startDate to :endDate
Has been rejected!
Have a good day!" + "Commander deny create constraint":"Hello :name!
Your request to create a constraint :constraintName
From :startDate to :endDate
Has been rejected!
Have a good day!", + "This task is assigned to":"This task is assigned to :soldierName" + } diff --git a/lang/he.json b/lang/he.json index 5dc3aeb..40c608b 100644 --- a/lang/he.json +++ b/lang/he.json @@ -130,6 +130,7 @@ "June":"יוני", "July":"יולי", "Last name": "שם משפחה", + "Last reserve dates":"ימי מילואים שעברו", "Less than":"פחות מ", "Less than equal":"פחות או שווה", "Low priority not task":"עדיפות נמוכה למשמרת", @@ -162,7 +163,7 @@ "New":"חדש", "New assignment":"הקצאה חדשה", "New task": "משימה חדשה", - "Next reserve dates": "ימי מילואים לחודש הבא", + "Next reserve dates":"ימי מילואים לחודש הבא", "Nights":"לילות", "nights":"לילות", "No":"לא", @@ -192,8 +193,9 @@ "Recurring type": "סוג חזרתיות", "Reserve": "מילואים", "Reserves": "מילואימניקים", - "Reserve dates": "ימי מילואים בחודש הנוכחי", + "Reserve dates": "ימי מילואים לחודש הנוכחי", "Reservist": "מילואימניק", + "Reservists": "מילואימניקים", "Reset assignment":"אפס שיבוץ", "Reset filters":"אפס סננים", "Request":"בקש", @@ -240,6 +242,7 @@ "Team commander": "מפקד צוות", "The commander you selected is already registered as a commander. His selection will leave his :type without a commander. Are you sure?": "המפקד שבחרת כבר רשום כמפקד. בחירתו תשאיר את חייליו ללא מפקד. אתה בטוח?", "This name already exists in the system!":"השם הזה כבר קיים במערכת!", + "This task is assigned to":"משימה זו מוקצית ל:soldierName", "Thursday":"חמישי", "Tuesday":"שלישי", "Type": "סוג", @@ -247,9 +250,9 @@ "Unassigned shifts":"משמרות שלא שובצו", "Update parallel weight of holiday shift":"עדכון משקל של משמרת חג", "Update dragged shift details!": "עדכון פרטי משמרת שנגררה", - "Update reserve days": "ימי מילואים לחודש הבא", + "Update reserve days": "ימי מילואים", "Vacation":"חופשה", - "View":"צפה ב", + "View ":"צפה ב", "View members": "צפה בחברים", "View team": "צפה בצוות", "View teams":"צפה בצוותים", @@ -283,5 +286,6 @@ "Constraint request approved":"אישור הוספת אילוץ", "Constraint request rejected":"דחיית הוספת אילוץ", "Commander approved create constraint":"שלום :name!
בקשתך להוספת האילוץ :constraintName
מ :startDate עד :endDate אושרה!
המשך יום טוב!", - "Commander deny create constraint":"שלום :name!
בקשתך להוספת האילוץ :constraintName
מ :startDate עד :endDate נדחתה!
המשך יום טוב!" + "Commander deny create constraint":"שלום :name!
בקשתך להוספת האילוץ :constraintName
מ :startDate עד :endDate נדחתה!
המשך יום טוב!", + "Please note! This constraint will only be approved for you after approval from the commander.":"שים לב! אילוץ זה יאושר עבורך רק לאחר אישור המפקד." } diff --git a/public/css/coolsam/flatpickr/flatpickr-css.css b/public/css/coolsam/flatpickr/flatpickr-css.css index 51bacc0..0817219 100644 --- a/public/css/coolsam/flatpickr/flatpickr-css.css +++ b/public/css/coolsam/flatpickr/flatpickr-css.css @@ -32,12 +32,47 @@ display: inline-block; z-index: 99999; } - .flatpickr-calendar.animate.open { -webkit-animation: fpFadeInDown 300ms cubic-bezier(0.23, 1, 0.32, 1); animation: fpFadeInDown 300ms cubic-bezier(0.23, 1, 0.32, 1); } - +.flatpickr-calendar.inline { + display: block; + position: relative; + top: 2px; +} +.flatpickr-calendar.static { + position: absolute; + top: calc(100% + 2px); +} +.flatpickr-calendar.static.open { + z-index: 999; + display: block; +} +.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+1) .flatpickr-day.inRange:nth-child(7n+7) { + -webkit-box-shadow: none !important; + box-shadow: none !important; +} +.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+2) .flatpickr-day.inRange:nth-child(7n+1) { + -webkit-box-shadow: -2px 0 0 #e6e6e6, 5px 0 0 #e6e6e6; + box-shadow: -2px 0 0 #e6e6e6, 5px 0 0 #e6e6e6; +} +.flatpickr-calendar .hasWeeks .dayContainer, +.flatpickr-calendar .hasTime .dayContainer { + border-bottom: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.flatpickr-calendar .hasWeeks .dayContainer { + border-left: 0; +} +.flatpickr-calendar.hasTime .flatpickr-time { + height: 40px; + border-top: 1px solid #e6e6e6; +} +.flatpickr-calendar.noCalendar.hasTime .flatpickr-time { + height: auto; +} .flatpickr-calendar:before, .flatpickr-calendar:after { position: absolute; @@ -49,7 +84,18 @@ width: 0; left: 22px; } - +.flatpickr-calendar.rightMost:before, +.flatpickr-calendar.arrowRight:before, +.flatpickr-calendar.rightMost:after, +.flatpickr-calendar.arrowRight:after { + left: auto; + right: 22px; +} +.flatpickr-calendar.arrowCenter:before, +.flatpickr-calendar.arrowCenter:after { + left: 50%; + right: 50%; +} .flatpickr-calendar:before { border-width: 5px; margin: 0 -5px; @@ -68,7 +114,23 @@ .flatpickr-calendar.arrowTop:after { border-bottom-color: #fff; } - +.flatpickr-calendar.arrowBottom:before, +.flatpickr-calendar.arrowBottom:after { + top: 100%; +} +.flatpickr-calendar.arrowBottom:before { + border-top-color: #e6e6e6; +} +.flatpickr-calendar.arrowBottom:after { + border-top-color: #fff; +} +.flatpickr-calendar:focus { + outline: 0; +} +.flatpickr-wrapper { + position: relative; + display: inline-block; +} .flatpickr-months { display: -webkit-box; display: -webkit-flex; @@ -93,7 +155,80 @@ -ms-flex: 1; flex: 1; } +.flatpickr-months .flatpickr-prev-month, +.flatpickr-months .flatpickr-next-month { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-decoration: none; + cursor: pointer; + position: absolute; + top: 0; + height: 34px; + padding: 10px; + z-index: 3; + color: rgba(0,0,0,0.9); + fill: rgba(0,0,0,0.9); +} +.flatpickr-months .flatpickr-prev-month.flatpickr-disabled, +.flatpickr-months .flatpickr-next-month.flatpickr-disabled { + display: none; +} +.flatpickr-months .flatpickr-prev-month i, +.flatpickr-months .flatpickr-next-month i { + position: relative; +} +.flatpickr-months .flatpickr-prev-month.flatpickr-prev-month, +.flatpickr-months .flatpickr-next-month.flatpickr-prev-month { + + left: 0; + +} + +.flatpickr-months .flatpickr-prev-month.flatpickr-next-month, +.flatpickr-months .flatpickr-next-month.flatpickr-next-month { + right: 0; +} +.flatpickr-months .flatpickr-prev-month:hover, +.flatpickr-months .flatpickr-next-month:hover { + color: #959ea9; +} +.flatpickr-months .flatpickr-prev-month:hover svg, +.flatpickr-months .flatpickr-next-month:hover svg { + fill: #e58b24; +} +.flatpickr-months .flatpickr-prev-month svg, +.flatpickr-months .flatpickr-next-month svg { + width: 14px; + height: 14px; +} +.flatpickr-months .flatpickr-prev-month svg path, +.flatpickr-months .flatpickr-next-month svg path { + -webkit-transition: fill 0.1s; + transition: fill 0.1s; + fill: inherit; +} +.numInputWrapper { + position: relative; + height: auto; +} +.numInputWrapper input, +.numInputWrapper span { + display: inline-block; +} +.numInputWrapper input { + width: 100%; +} +.numInputWrapper input::-ms-clear { + display: none; +} +.numInputWrapper input::-webkit-outer-spin-button, +.numInputWrapper input::-webkit-inner-spin-button { + margin: 0; + -webkit-appearance: none; +} .numInputWrapper span { position: absolute; right: 0; @@ -107,6 +242,361 @@ -webkit-box-sizing: border-box; box-sizing: border-box; } +.numInputWrapper span:hover { + background: rgba(0,0,0,0.1); +} +.numInputWrapper span:active { + background: rgba(0,0,0,0.2); +} +.numInputWrapper span:after { + display: block; + content: ""; + position: absolute; +} +.numInputWrapper span.arrowUp { + top: 0; + border-bottom: 0; +} +.numInputWrapper span.arrowUp:after { + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-bottom: 4px solid rgba(57,57,57,0.6); + top: 26%; +} +.numInputWrapper span.arrowDown { + top: 50%; +} +.numInputWrapper span.arrowDown:after { + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid rgba(57,57,57,0.6); + top: 40%; +} +.numInputWrapper span svg { + width: inherit; + height: auto; +} +.numInputWrapper span svg path { + fill: rgba(0,0,0,0.5); +} +.numInputWrapper:hover { + background: rgba(0,0,0,0.05); +} +.numInputWrapper:hover span { + opacity: 1; +} +.flatpickr-current-month { + font-size: 135%; + line-height: inherit; + font-weight: 300; + color: #e58b24; + position: absolute; + width: 75%; + left: 12.5%; + padding: 7.48px 0 0 0; + line-height: 1; + height: 34px; + display: inline-block; + text-align: center; + -webkit-transform: translate3d(0px, 0px, 0px); + transform: translate3d(0px, 0px, 0px); +} +.flatpickr-current-month span.cur-month { + font-family: inherit; + font-weight: 700; + color: #e58b24; + display: inline-block; + margin-left: 0.5ch; + padding: 0; +} +.flatpickr-current-month span.cur-month:hover { + background: rgba(0,0,0,0.05); +} +.flatpickr-current-month .numInputWrapper { + width: 6ch; + width: 7ch\0; + display: inline-block; +} +.flatpickr-current-month .numInputWrapper span.arrowUp:after { + border-bottom-color: rgba(0,0,0,0.9); +} +.flatpickr-current-month .numInputWrapper span.arrowDown:after { + border-top-color: rgba(0,0,0,0.9); +} +.flatpickr-current-month input.cur-year { + background: transparent; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #e58b24; + cursor: text; + padding: 0 0 0 0.5ch; + margin: 0; + display: inline-block; + font-size: inherit; + font-family: inherit; + font-weight: 300; + line-height: inherit; + height: auto; + border: 0; + border-radius: 0; + vertical-align: initial; + -webkit-appearance: textfield; + -moz-appearance: textfield; + appearance: textfield; +} +.flatpickr-current-month input.cur-year:focus { + outline: 0; +} +.flatpickr-current-month input.cur-year[disabled], +.flatpickr-current-month input.cur-year[disabled]:hover { + font-size: 100%; + color: rgba(0,0,0,0.5); + background: transparent; + pointer-events: none; +} +.flatpickr-current-month .flatpickr-monthDropdown-months { + appearance: menulist; + background: transparent; + border: none; + border-radius: 0; + box-sizing: border-box; + color: #e58b24; + cursor: pointer; + font-size: inherit; + font-family: inherit; + font-weight: 300; + height: auto; + line-height: inherit; + margin: -1px 0 0 0; + outline: none; + padding: 0 0 0 0.5ch; + position: relative; + vertical-align: initial; + -webkit-box-sizing: border-box; + -webkit-appearance: menulist; + -moz-appearance: menulist; + width: auto; +} +.flatpickr-current-month .flatpickr-monthDropdown-months:focus, +.flatpickr-current-month .flatpickr-monthDropdown-months:active { + outline: none; +} +.flatpickr-current-month .flatpickr-monthDropdown-months:hover { + background: rgba(0,0,0,0.05); +} +.flatpickr-current-month .flatpickr-monthDropdown-months .flatpickr-monthDropdown-month { + background-color: transparent; + outline: none; + padding: 0; +} +.flatpickr-weekdays { + background: transparent; + text-align: center; + overflow: hidden; + width: 100%; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + height: 28px; +} +.flatpickr-weekdays .flatpickr-weekdaycontainer { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; +} +span.flatpickr-weekday { + cursor: default; + font-size: 90%; + background: transparent; + color: rgba(0,0,0,0.54); + line-height: 1; + margin: 0; + text-align: center; + display: block; + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + font-weight: bolder; +} +.dayContainer, +.flatpickr-weeks { + padding: 1px 0 0 0; +} +.flatpickr-days { + position: relative; + overflow: hidden; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: start; + -webkit-align-items: flex-start; + -ms-flex-align: start; + align-items: flex-start; + width: 307.875px; +} +.flatpickr-days:focus { + outline: 0; +} +.dayContainer { + padding: 0; + outline: 0; + text-align: left; + width: 307.875px; + min-width: 307.875px; + max-width: 307.875px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + display: inline-block; + display: -ms-flexbox; + display: -webkit-box; + display: -webkit-flex; + display: flex; + -webkit-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-wrap: wrap; + -ms-flex-pack: justify; + -webkit-justify-content: space-around; + justify-content: space-around; + -webkit-transform: translate3d(0px, 0px, 0px); + transform: translate3d(0px, 0px, 0px); + opacity: 1; +} +.dayContainer + .dayContainer { + -webkit-box-shadow: -1px 0 0 #e6e6e6; + box-shadow: -1px 0 0 #e6e6e6; +} +.flatpickr-day { + background: none; + border: 1px solid transparent; + border-radius: 150px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #393939; + cursor: pointer; + font-weight: 400; + width: 14.2857143%; + -webkit-flex-basis: 14.2857143%; + -ms-flex-preferred-size: 14.2857143%; + flex-basis: 14.2857143%; + max-width: 39px; + height: 39px; + line-height: 39px; + margin: 0; + display: inline-block; + position: relative; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + text-align: center; +} +.flatpickr-day.inRange, +.flatpickr-day.prevMonthDay.inRange, +.flatpickr-day.nextMonthDay.inRange, +.flatpickr-day.today.inRange, +.flatpickr-day.prevMonthDay.today.inRange, +.flatpickr-day.nextMonthDay.today.inRange, +.flatpickr-day:hover, +.flatpickr-day.prevMonthDay:hover, +.flatpickr-day.nextMonthDay:hover, +.flatpickr-day:focus, +.flatpickr-day.prevMonthDay:focus, +.flatpickr-day.nextMonthDay:focus { + cursor: pointer; + outline: 0; + background: #e6e6e6; + border-color: #e6e6e6; +} +.flatpickr-day.today { + border-color: #959ea9; +} +.flatpickr-day.today:hover, +.flatpickr-day.today:focus { + border-color: #959ea9; + background: #959ea9; + color: #fff; +} + +.flatpickr-day.selected.startRange, +.flatpickr-day.startRange.startRange, +.flatpickr-day.endRange.startRange { + border-radius: 50px 0 0 50px; +} +.flatpickr-day.selected.endRange, +.flatpickr-day.startRange.endRange, +.flatpickr-day.endRange.endRange { + border-radius: 0 50px 50px 0; +} + +.flatpickr-day.selected.startRange.endRange, +.flatpickr-day.startRange.startRange.endRange, +.flatpickr-day.endRange.startRange.endRange { + border-radius: 50px; +} +.flatpickr-day.inRange { + border-radius: 0; + -webkit-box-shadow: -5px 0 0 #e6e6e6, 5px 0 0 #e6e6e6; + box-shadow: -5px 0 0 #e6e6e6, 5px 0 0 #e6e6e6; +} +.flatpickr-day.flatpickr-disabled, +.flatpickr-day.flatpickr-disabled:hover, +.flatpickr-day.prevMonthDay, +.flatpickr-day.nextMonthDay, +.flatpickr-day.notAllowed, +.flatpickr-day.notAllowed.prevMonthDay, +.flatpickr-day.notAllowed.nextMonthDay { + color: rgba(57,57,57,0.3); + background: transparent; + border-color: transparent; + cursor: default; +} +.flatpickr-day.flatpickr-disabled, +.flatpickr-day.flatpickr-disabled:hover { + cursor: not-allowed; + color: rgba(57,57,57,0.1); +} + +.flatpickr-day.hidden { + visibility: hidden; +} +.rangeMode .flatpickr-day { + margin-top: 1px; +} +.flatpickr-weekwrapper { + float: left; +} +.flatpickr-weekwrapper .flatpickr-weeks { + padding: 0 12px; + -webkit-box-shadow: 1px 0 0 #e6e6e6; + box-shadow: 1px 0 0 #e6e6e6; +} +.flatpickr-weekwrapper .flatpickr-weekday { + float: none; + width: 100%; + line-height: 28px; +} +.flatpickr-weekwrapper span.flatpickr-day, +.flatpickr-weekwrapper span.flatpickr-day:hover { + display: block; + width: 100%; + max-width: none; + color: rgba(57,57,57,0.3); + background: transparent; + cursor: default; + border: none; +} .flatpickr-innerContainer { display: block; display: -webkit-box; @@ -117,3 +607,137 @@ box-sizing: border-box; overflow: hidden; } +.flatpickr-rContainer { + display: inline-block; + padding: 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +.flatpickr-time { + text-align: center; + outline: 0; + display: block; + height: 0; + line-height: 40px; + max-height: 40px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + overflow: hidden; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; +} +.flatpickr-time:after { + content: ""; + display: table; + clear: both; +} +.flatpickr-time .numInputWrapper { + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + width: 40%; + height: 40px; + float: left; +} +.flatpickr-time .numInputWrapper span.arrowUp:after { + border-bottom-color: #393939; +} +.flatpickr-time .numInputWrapper span.arrowDown:after { + border-top-color: #393939; +} +.flatpickr-time.hasSeconds .numInputWrapper { + width: 26%; +} +.flatpickr-time.time24hr .numInputWrapper { + width: 49%; +} +.flatpickr-time input { + background: transparent; + -webkit-box-shadow: none; + box-shadow: none; + border: 0; + border-radius: 0; + text-align: center; + margin: 0; + padding: 0; + height: inherit; + line-height: inherit; + color: #393939; + font-size: 14px; + position: relative; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -webkit-appearance: textfield; + -moz-appearance: textfield; + appearance: textfield; +} +.flatpickr-time input.flatpickr-hour { + font-weight: bold; +} +.flatpickr-time input.flatpickr-minute, +.flatpickr-time input.flatpickr-second { + font-weight: 400; +} +.flatpickr-time input:focus { + outline: 0; + border: 0; +} +.flatpickr-time .flatpickr-time-separator, +.flatpickr-time .flatpickr-am-pm { + height: inherit; + float: left; + line-height: inherit; + color: #393939; + font-weight: bold; + width: 2%; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-align-self: center; + -ms-flex-item-align: center; + align-self: center; +} +.flatpickr-time .flatpickr-am-pm { + outline: 0; + width: 18%; + cursor: pointer; + text-align: center; + font-weight: 400; +} +.flatpickr-time input:hover, +.flatpickr-time .flatpickr-am-pm:hover, +.flatpickr-time input:focus, +.flatpickr-time .flatpickr-am-pm:focus { + background: #eee; +} +.flatpickr-input[readonly] { + cursor: pointer; +} +@-webkit-keyframes fpFadeInDown { +from { + opacity: 0; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); +} +to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} +} +@keyframes fpFadeInDown { +from { + opacity: 0; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); +} +to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} +} diff --git a/public/css/coolsam/flatpickr/flatpickr-them.css b/public/css/coolsam/flatpickr/flatpickr-them.css index 1e60a97..83d8bde 100644 --- a/public/css/coolsam/flatpickr/flatpickr-them.css +++ b/public/css/coolsam/flatpickr/flatpickr-them.css @@ -148,7 +148,7 @@ font-size: 135%; line-height: inherit; font-weight: 300; - color: inherit; + color: black; position: absolute; width: 75%; left: 12.5%; @@ -175,7 +175,7 @@ background: transparent; -webkit-box-sizing: border-box; box-sizing: border-box; - color: inherit; + color: black; cursor: pointer; padding: 0 0 0 0.5ch; margin: 0; @@ -205,7 +205,7 @@ border: none; border-radius: 0; box-sizing: border-box; - color: inherit; + color: black; cursor: pointer; font-size: inherit; font-family: inherit; @@ -340,7 +340,7 @@ span.flatpickr-weekday { -webkit-box-shadow: none; box-shadow: none; color: #fff; - border-color: #e58b24; + border-color: black; } .flatpickr-day.flatpickr-disabled, .flatpickr-day.flatpickr-disabled:hover { @@ -370,3 +370,61 @@ span.flatpickr-weekday { max-height: 40px; visibility: visible } + +.flatpickr-calendar.open, +.flatpickr-calendar.inline { + opacity: 1; + max-height: 640px; + visibility: visible; +} +.flatpickr-calendar.open { + display: inline-block; + z-index: 99999; +} +.flatpickr-calendar.animate.open { + -webkit-animation: fpFadeInDown 300ms cubic-bezier(0.23, 1, 0.32, 1); + animation: fpFadeInDown 300ms cubic-bezier(0.23, 1, 0.32, 1); +} +.flatpickr-calendar.inline { + display: block; + position: relative; + top: 2px; +} +.flatpickr-calendar.static { + position: absolute; + top: calc(100% + 2px); +} +.flatpickr-calendar.static.open { + z-index: 999; + display: block; +} +.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+1) .flatpickr-day.inRange:nth-child(7n+7) { + -webkit-box-shadow: none !important; + box-shadow: none !important; +} +.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+2) .flatpickr-day.inRange:nth-child(7n+1) { + -webkit-box-shadow: -2px 0 0 #e6e6e6, 5px 0 0 #e6e6e6; + box-shadow: -2px 0 0 #e6e6e6, 5px 0 0 #e6e6e6; +} +.flatpickr-calendar .hasWeeks .dayContainer, +.flatpickr-calendar .hasTime .dayContainer { + border-bottom: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.flatpickr-calendar .hasWeeks .dayContainer { + border-left: 0; +} +.flatpickr-calendar.hasTime .flatpickr-time { + height: 40px; + border-top: 1px solid #eceef1; +} +.flatpickr-calendar.hasTime .flatpickr-innerContainer { + border-bottom: 0; +} +.flatpickr-calendar.hasTime .flatpickr-time { + border: 1px solid #eceef1; +} +.flatpickr-calendar.noCalendar.hasTime .flatpickr-time { + height: auto; +} diff --git a/resources/views/forms/components/flatpickr.blade.php b/resources/views/forms/components/flatpickr.blade.php index a58a184..840c001 100644 --- a/resources/views/forms/components/flatpickr.blade.php +++ b/resources/views/forms/components/flatpickr.blade.php @@ -27,8 +27,9 @@ '{{ asset('css/coolsam/flatpickr/flatpickr-css.css') }}' ]" ax-load-src="{{ asset('js/coolsam/flatpickr/components/flatpickr-component.js') }}" - > + > @@ -36,6 +37,7 @@ class="fi-fo-text-input" :attributes=" \Filament\Support\prepare_inherited_attributes($getExtraInputAttributeBag()) ->merge([ + 'disabled' => $isDisabled, 'id' => $id, 'x-ref' => 'picker', 'x-model' => 'state', diff --git a/tests/Feature/PoliciesTest.php b/tests/Feature/PoliciesTest.php index 1c28556..07e26cd 100644 --- a/tests/Feature/PoliciesTest.php +++ b/tests/Feature/PoliciesTest.php @@ -10,10 +10,10 @@ ->assertStatus(200); }); -it('does not allow team commander to view teams', function () { +it('allows team commander to see the teams under him', function () { $this ->seed(PermissionSeeder::class) ->asUser('team-commander') ->get('/teams') - ->assertStatus(403); + ->assertStatus(200); }); diff --git a/tests/Feature/ReservistsTest.php b/tests/Feature/ReservistsTest.php index 6a0df34..f8bf041 100644 --- a/tests/Feature/ReservistsTest.php +++ b/tests/Feature/ReservistsTest.php @@ -3,7 +3,6 @@ use App\Models\Soldier; use App\Models\User; -use App\Resources\SoldierResource\Pages\CreateSoldier; use App\Resources\SoldierResource\Pages\ListSoldiers; use Database\Seeders\PermissionSeeder; @@ -22,12 +21,6 @@ ->assertTableActionHidden('update reserve days', $soldier); }); -it('hidden `reserve_dates` if not a reservist', function () { - livewire(CreateSoldier::class) - ->fillForm(['is_reservist' => false]) - ->assertFormFieldIsHidden('reserve_dates'); -}); - it('can filter soldiers by `is_reservist`', function () { $soldier = Soldier::factory()->count(5)->create(['is_reservist' => false])->each(function ($s) { User::factory()->create(['userable_id' => $s->id])->assignRole('soldier'); From a603704f7d4b39db4a610cacf0de79c9a1dd1f99 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 16 Jan 2025 13:18:07 +0200 Subject: [PATCH 070/259] push and deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 2 +- app/Filament/Widgets/ChartWidget.php | 2 - app/Models/Constraint.php | 2 +- .../Pages/ListDepartments.php | 4 +- .../ProfileResource/Pages/ListProfiles.php | 4 +- app/Resources/SoldierResource.php | 3 +- .../SoldierResource/Pages/EditSoldier.php | 2 +- .../SoldierResource/Pages/ListSoldiers.php | 4 +- .../TaskResource/Pages/ListTasks.php | 4 +- .../TeamResource/Pages/ListTeams.php | 4 +- database/seeders/DatabaseSeeder.php | 1516 ++++++++--------- lang/he.json | 5 +- 13 files changed, 778 insertions(+), 776 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index d19bcd0..157ed4f 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_6 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_7 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 7af16db..df00963 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -453,7 +453,7 @@ protected function viewAction(): Action ->modalFooterActions(fn (FullCalendarWidget $livewire) => [ ...$livewire->getCachedModalActions(), ]) - ->modalHeading(__('View').$this->model::getTitle()); + ->modalHeading(__('View ').$this->model::getTitle()); } public function eventDidMount(): string diff --git a/app/Filament/Widgets/ChartWidget.php b/app/Filament/Widgets/ChartWidget.php index e64e976..fc61792 100644 --- a/app/Filament/Widgets/ChartWidget.php +++ b/app/Filament/Widgets/ChartWidget.php @@ -13,8 +13,6 @@ class ChartWidget extends ApexChartWidget { - protected static ?string $heading = 'Shifts Assigments'; - protected static ?int $sort = 3; protected static ?int $contentHeight = 500; diff --git a/app/Models/Constraint.php b/app/Models/Constraint.php index 4d7f421..13523d5 100644 --- a/app/Models/Constraint.php +++ b/app/Models/Constraint.php @@ -64,7 +64,7 @@ public static function getSchema(): array ->required(), Placeholder::make('') ->content(__('Please note! This constraint will only be approved for you after approval from the commander.')) - ->visible(fn (Get $get) => $get('constraint_type') == 'Vacation' || $get('constraint_type') == 'Medical') + ->visible((fn (Get $get) => $get('constraint_type') == 'Vacation' || $get('constraint_type') == 'Medical') && auth()->user()->getRoleNames()->count() == 1) ->extraAttributes(['style' => 'color: red; font-family: Arial, Helvetica, sans-serif; font-size: 20px']), Grid::make() ->visible(fn ($get) => in_array($get('constraint_type'), ['Medical', 'Vacation', 'School', 'Not task', 'Low priority not task'])) diff --git a/app/Resources/DepartmentResource/Pages/ListDepartments.php b/app/Resources/DepartmentResource/Pages/ListDepartments.php index 084f4cb..925d01f 100644 --- a/app/Resources/DepartmentResource/Pages/ListDepartments.php +++ b/app/Resources/DepartmentResource/Pages/ListDepartments.php @@ -3,7 +3,7 @@ namespace App\Resources\DepartmentResource\Pages; use App\Resources\DepartmentResource; -use Filament\Actions; +use Filament\Actions\CreateAction; use Filament\Resources\Pages\ListRecords; class ListDepartments extends ListRecords @@ -13,7 +13,7 @@ class ListDepartments extends ListRecords protected function getHeaderActions(): array { return [ - Actions\CreateAction::make(), + CreateAction::make(), ]; } } diff --git a/app/Resources/ProfileResource/Pages/ListProfiles.php b/app/Resources/ProfileResource/Pages/ListProfiles.php index c644253..5fd9482 100644 --- a/app/Resources/ProfileResource/Pages/ListProfiles.php +++ b/app/Resources/ProfileResource/Pages/ListProfiles.php @@ -3,7 +3,7 @@ namespace App\Resources\ProfileResource\Pages; use App\Resources\ProfileResource; -use Filament\Actions; +use Filament\Actions\CreateAction; use Filament\Resources\Pages\ListRecords; class ListProfiles extends ListRecords @@ -17,7 +17,7 @@ class ListProfiles extends ListRecords protected function getHeaderActions(): array { return [ - Actions\CreateAction::make(), + CreateAction::make(), ]; } diff --git a/app/Resources/SoldierResource.php b/app/Resources/SoldierResource.php index e07a22f..b122be4 100644 --- a/app/Resources/SoldierResource.php +++ b/app/Resources/SoldierResource.php @@ -264,11 +264,12 @@ function ($record) { ReplicateAction::make() ->icon('heroicon-o-document-duplicate') ->color('success') - ->after(function (Soldier $replica): void { + ->after(function (Soldier $replica, $record): void { $replica['last_reserve_dates'] = []; $replica['reserve_dates'] = []; $replica['next_reserve_dates'] = []; $replica->save(); + session()->put('shifts_assignment', User::where('userable_id', $record->id)->first()->getRoleNames()->contains('shifts-assignment')); redirect()->route('filament.app.resources.soldiers.edit', ['record' => $replica->id]); }) ->successNotification(null) diff --git a/app/Resources/SoldierResource/Pages/EditSoldier.php b/app/Resources/SoldierResource/Pages/EditSoldier.php index 4cbc23a..6cf7934 100644 --- a/app/Resources/SoldierResource/Pages/EditSoldier.php +++ b/app/Resources/SoldierResource/Pages/EditSoldier.php @@ -17,7 +17,7 @@ protected function mutateFormDataBeforeFill(array $data): array ->first() ->getRoleNames() ->toArray()) - : false; + : session()->get('shifts_assignment'); return $data; } diff --git a/app/Resources/SoldierResource/Pages/ListSoldiers.php b/app/Resources/SoldierResource/Pages/ListSoldiers.php index d766ca6..1a4cba2 100644 --- a/app/Resources/SoldierResource/Pages/ListSoldiers.php +++ b/app/Resources/SoldierResource/Pages/ListSoldiers.php @@ -3,7 +3,7 @@ namespace App\Resources\SoldierResource\Pages; use App\Resources\SoldierResource; -use Filament\Actions; +use Filament\Actions\CreateAction; use Filament\Resources\Pages\ListRecords; class ListSoldiers extends ListRecords @@ -13,7 +13,7 @@ class ListSoldiers extends ListRecords protected function getHeaderActions(): array { return [ - Actions\CreateAction::make(), + CreateAction::make(), ]; } } diff --git a/app/Resources/TaskResource/Pages/ListTasks.php b/app/Resources/TaskResource/Pages/ListTasks.php index 5cc28b1..54f4d17 100644 --- a/app/Resources/TaskResource/Pages/ListTasks.php +++ b/app/Resources/TaskResource/Pages/ListTasks.php @@ -3,7 +3,7 @@ namespace App\Resources\TaskResource\Pages; use App\Resources\TaskResource; -use Filament\Actions; +use Filament\Actions\CreateAction; use Filament\Resources\Pages\ListRecords; class ListTasks extends ListRecords @@ -13,7 +13,7 @@ class ListTasks extends ListRecords protected function getHeaderActions(): array { return [ - Actions\CreateAction::make()->label(__('New task')), + CreateAction::make()->label(__('New task')), ]; } } diff --git a/app/Resources/TeamResource/Pages/ListTeams.php b/app/Resources/TeamResource/Pages/ListTeams.php index 8502e05..5e69778 100644 --- a/app/Resources/TeamResource/Pages/ListTeams.php +++ b/app/Resources/TeamResource/Pages/ListTeams.php @@ -3,7 +3,7 @@ namespace App\Resources\TeamResource\Pages; use App\Resources\TeamResource; -use Filament\Actions; +use Filament\Actions\CreateAction; use Filament\Resources\Pages\ListRecords; class ListTeams extends ListRecords @@ -13,7 +13,7 @@ class ListTeams extends ListRecords protected function getHeaderActions(): array { return [ - Actions\CreateAction::make(), + CreateAction::make(), ]; } } diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index e97af99..b234287 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -50,763 +50,763 @@ public function run(): void ])->id, ])->assignRole(['soldier', 'shifts-assignment']); - // for ($i = 0; $i < 15; $i++) { - // $user = User::factory()->create([ - // 'first_name' => 'mefaked', - // 'userable_id' => Soldier::factory()->create([ - // 'qualifications' => ['pikud'], - // 'capacity' => 5.5, - // 'max_weekends' => 5.5, - // 'max_shifts' => 10, - // 'max_nights' => 5.5, - // 'course' => fake()->numberBetween(0, 5), - // 'is_reservist' => false, - // ])->id, - // ])->assignRole('soldier'); - // $this->createConstraints($user->id); - // } - - // for ($i = 0; $i < 40; $i++) { - // $user = User::factory()->create([ - // 'first_name' => 'chayal pashut', - // 'userable_id' => Soldier::factory()->create([ - // 'qualifications' => ['hatasa', 'tazpit', 'shmira'], - // 'capacity' => 6, - // 'max_weekends' => 6, - // 'max_shifts' => 7, - // 'max_nights' => 6, - // 'course' => fake()->numberBetween(0, 5), - // 'is_reservist' => false, - // ])->id, - // ])->assignRole('soldier'); - // $this->createConstraints($user->id); - // } - - // for ($i = 0; $i < 30; $i++) { - // $user = User::factory()->create([ - // 'first_name' => 'chayal beinony', - // 'userable_id' => Soldier::factory()->create([ - // 'qualifications' => ['hatasa', 'tazpit', 'shmira', 'tichnun', 'pianuach'], - // 'capacity' => 5.5, - // 'max_weekends' => 5.5, - // 'max_shifts' => 6, - // 'max_nights' => 5.5, - // 'course' => fake()->numberBetween(0, 5), - // 'is_reservist' => false, - // ])->id, - // ])->assignRole('soldier'); - // $this->createConstraints($user->id); - // } - - // for ($i = 0; $i < 25; $i++) { - // $user = User::factory()->create([ - // 'first_name' => 'chayal vatik', - // 'userable_id' => Soldier::factory()->create([ - // 'qualifications' => ['hatasa', 'bakara', 'tichnun', 'pianuach'], - // 'capacity' => 5, - // 'max_weekends' => 5, - // 'max_shifts' => 5, - // 'max_nights' => 5, - // 'course' => fake()->numberBetween(0, 5), - // 'is_reservist' => false, - // ])->id, - // ])->assignRole('soldier'); - // $this->createConstraints($user->id); - // } - - // for ($i = 0; $i < 10; $i++) { - // $user = User::factory()->create([ - // 'first_name' => 'menahalan', - // 'userable_id' => Soldier::factory()->create([ - // 'qualifications' => ['minhal', 'bdikat ziud'], - // 'capacity' => 0, - // 'max_weekends' => 0, - // 'max_shifts' => 4, - // 'max_nights' => 0, - // 'course' => fake()->numberBetween(0, 5), - // 'is_reservist' => false, - // ])->id, - // ])->assignRole('soldier'); - // $this->createConstraints($user->id); - // } - - // for ($i = 0; $i < 8; $i++) { - // $user = User::factory()->create([ - // 'first_name' => 'navat', - // 'userable_id' => Soldier::factory()->create([ - // 'qualifications' => ['nivut'], - // 'capacity' => 10, - // 'max_weekends' => 10, - // 'max_shifts' => 12, - // 'max_nights' => 10, - // 'course' => fake()->numberBetween(0, 5), - // 'is_reservist' => false, - // ])->id, - // ])->assignRole('soldier'); - // $this->createConstraints($user->id); - // } - - // // Tasks - // // tichnun - // Task::factory()->create([ - // 'name' => 'tichnun א-ה בוקר', - // 'start_hour' => '10:00:00', - // 'duration' => 4, - // 'parallel_weight' => 0, - // 'type' => 'tichnun', - // 'is_weekend' => false, - // 'is_night' => false, - // 'color' => '#b54b4b', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'tichnun א-ה לילה', - // 'start_hour' => '02:00:00', - // 'duration' => 4, - // 'parallel_weight' => 1, - // 'type' => 'tichnun', - // 'is_weekend' => false, - // 'is_night' => true, - // 'color' => '#b54b4b', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'tichnun 1 סופ"ש', - // 'start_hour' => '10:30:00', - // 'duration' => 25, - // 'parallel_weight' => 2.5, - // 'type' => 'tichnun', - // 'is_weekend' => true, - // 'is_night' => false, - // 'color' => '#b54b4b', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::FRIDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'tichnun 2 סופ"ש', - // 'start_hour' => '11:10:00', - // 'duration' => 25, - // 'parallel_weight' => 2.5, - // 'type' => 'tichnun', - // 'is_weekend' => true, - // 'is_night' => false, - // 'color' => '#b54b4b', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::FRIDAY], - // ]), - // ]); - // // bakara - // Task::factory()->create([ - // 'name' => 'bakara ארבע פעמים בשבוע בוקר', - // 'start_hour' => '10:00:00', - // 'duration' => 4, - // 'parallel_weight' => 0, - // 'type' => 'bakara', - // 'is_weekend' => false, - // 'is_night' => false, - // 'color' => '#4bb5ac', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'bakara שלוש פעמים בשבוע לילה', - // 'start_hour' => '03:20:00', - // 'duration' => 4, - // 'parallel_weight' => 1, - // 'type' => 'bakara', - // 'is_weekend' => false, - // 'is_night' => true, - // 'color' => '#4bb5ac', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'bakara סופ"ש', - // 'start_hour' => '10:05:00', - // 'duration' => 26, - // 'parallel_weight' => 2.5, - // 'type' => 'bakara', - // 'is_weekend' => true, - // 'is_night' => false, - // 'color' => '#4bb5ac', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::FRIDAY], - // ]), - // ]); - // // pikud - // Task::factory()->create([ - // 'name' => 'pikud 1 א-ה בוקר', - // 'start_hour' => '10:00:00', - // 'duration' => 4, - // 'parallel_weight' => 0, - // 'type' => 'pikud', - // 'is_weekend' => false, - // 'is_night' => false, - // 'color' => '#4bb569', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'pikud 2 א-ה בוקר', - // 'start_hour' => '10:00:00', - // 'duration' => 4, - // 'parallel_weight' => 0, - // 'type' => 'pikud', - // 'is_weekend' => false, - // 'is_night' => false, - // 'color' => '#4bb569', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'pikud 1 סופש', - // 'start_hour' => '10:00:00', - // 'duration' => 25, - // 'parallel_weight' => 2.5, - // 'type' => 'pikud', - // 'is_weekend' => true, - // 'is_night' => false, - // 'color' => '#4bb569', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::FRIDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'pikud 2 סופש', - // 'start_hour' => '10:00:00', - // 'duration' => 25, - // 'parallel_weight' => 2.5, - // 'type' => 'pikud', - // 'is_weekend' => true, - // 'is_night' => false, - // 'color' => '#4bb569', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::FRIDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'pikud לילה א-ה', - // 'start_hour' => '03:00:00', - // 'duration' => 4, - // 'parallel_weight' => 1, - // 'type' => 'pikud', - // 'is_weekend' => false, - // 'is_night' => true, - // 'color' => '#4bb569', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // // minhal - // Task::factory()->create([ - // 'name' => 'minhal שלוש פעמים בשבוע בוקר', - // 'start_hour' => '13:00:00', - // 'duration' => 2, - // 'parallel_weight' => 0, - // 'type' => 'minhal', - // 'is_weekend' => false, - // 'is_night' => false, - // 'color' => '#c5d649', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::TUESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // // hatasa - // Task::factory()->create([ - // 'name' => 'hatasa א-ה בוקר', - // 'start_hour' => '09:00:00', - // 'duration' => 6, - // 'parallel_weight' => 0, - // 'type' => 'hatasa', - // 'is_weekend' => false, - // 'is_night' => false, - // 'color' => '#d649b5', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'hatasa א-ה לילה', - // 'start_hour' => '02:00:00', - // 'duration' => 6, - // 'parallel_weight' => 1, - // 'type' => 'hatasa', - // 'is_weekend' => false, - // 'is_night' => true, - // 'color' => '#d649b5', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'hatasa 1 סופש', - // 'start_hour' => '06:00:00', - // 'duration' => 26, - // 'parallel_weight' => 2.5, - // 'type' => 'hatasa', - // 'is_weekend' => true, - // 'is_night' => false, - // 'color' => '#d649b5', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::FRIDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'hatasa 2 סופש', - // 'start_hour' => '06:00:00', - // 'duration' => 26, - // 'parallel_weight' => 2.5, - // 'type' => 'hatasa', - // 'is_weekend' => true, - // 'is_night' => false, - // 'color' => '#d649b5', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::FRIDAY], - // ]), - // ]); - // // shmira - // Task::factory()->create([ - // 'name' => 'shmira א-ה בוקר', - // 'start_hour' => '07:00:00', - // 'duration' => 12, - // 'parallel_weight' => 0, - // 'type' => 'shmira', - // 'is_weekend' => false, - // 'is_night' => false, - // 'color' => '#ee8559', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'shmira א-ה לילה', - // 'start_hour' => '01:00:00', - // 'duration' => 7, - // 'parallel_weight' => 1, - // 'type' => 'shmira', - // 'is_weekend' => false, - // 'is_night' => true, - // 'color' => '#ee8559', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'shmira 1 סופש', - // 'start_hour' => '06:00:00', - // 'duration' => 26, - // 'parallel_weight' => 2.5, - // 'type' => 'shmira', - // 'is_weekend' => true, - // 'is_night' => false, - // 'color' => '#ee8559', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::FRIDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'shmira סופש 2', - // 'start_hour' => '06:00:00', - // 'duration' => 26, - // 'parallel_weight' => 2.5, - // 'type' => 'shmira', - // 'is_weekend' => true, - // 'is_night' => false, - // 'color' => '#ee8559', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::FRIDAY], - // ]), - // ]); - // // pianuach - // Task::factory()->create([ - // 'name' => 'pianuach א-ה בוקר', - // 'start_hour' => '07:00:00', - // 'duration' => 7, - // 'parallel_weight' => 0, - // 'type' => 'pianuach', - // 'is_weekend' => false, - // 'is_night' => false, - // 'color' => '#3574fb', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'pianuach א-ה לילה', - // 'start_hour' => '01:00:00', - // 'duration' => 5, - // 'parallel_weight' => 1, - // 'type' => 'pianuach', - // 'is_weekend' => false, - // 'is_night' => true, - // 'color' => '#3574fb', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'pianuach 1 סופש', - // 'start_hour' => '07:00:00', - // 'duration' => 27, - // 'parallel_weight' => 2.5, - // 'type' => 'pianuach', - // 'is_weekend' => true, - // 'is_night' => false, - // 'color' => '#3574fb', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::FRIDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'pianuach 2 סופש', - // 'start_hour' => '07:00:00', - // 'duration' => 27, - // 'parallel_weight' => 2.5, - // 'type' => 'pianuach', - // 'is_weekend' => true, - // 'is_night' => false, - // 'color' => '#3574fb', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::FRIDAY], - // ]), - // ]); - // // nivut - // Task::factory()->create([ - // 'name' => 'nivut א-ה בוקר', - // 'start_hour' => '11:00:00', - // 'duration' => 2, - // 'parallel_weight' => 0, - // 'type' => 'nivut', - // 'is_weekend' => false, - // 'is_night' => false, - // 'color' => '#ed8d8d8b', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'nivut א-ה לילה', - // 'start_hour' => '01:00:00', - // 'duration' => 2.5, - // 'parallel_weight' => 1, - // 'type' => 'nivut', - // 'is_weekend' => false, - // 'is_night' => true, - // 'color' => '#ed8d8d8b', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'nivut 1 סופש', - // 'start_hour' => '11:00:00', - // 'duration' => 28, - // 'parallel_weight' => 2.5, - // 'type' => 'nivut', - // 'is_weekend' => true, - // 'is_night' => false, - // 'color' => '#ed8d8d8b', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::FRIDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'nivut 2 סופש', - // 'start_hour' => '11:00:00', - // 'duration' => 28, - // 'parallel_weight' => 2.5, - // 'type' => 'nivut', - // 'is_weekend' => true, - // 'is_night' => false, - // 'color' => '#ed8d8d8b', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::FRIDAY], - // ]), - // ]); - // // tazpit - // Task::factory()->create([ - // 'name' => 'tazpit א-ה בוקר 1', - // 'start_hour' => '08:00:00', - // 'duration' => 10, - // 'parallel_weight' => 0, - // 'type' => 'tazpit', - // 'is_weekend' => false, - // 'is_night' => false, - // 'color' => '#77ff23', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'tazpit א-ה בוקר 2', - // 'start_hour' => '08:00:00', - // 'duration' => 10, - // 'parallel_weight' => 0, - // 'type' => 'tazpit', - // 'is_weekend' => false, - // 'is_night' => false, - // 'color' => '#77ff23', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'tazpit א-ה לילה', - // 'start_hour' => '01:30:00', - // 'duration' => 6, - // 'parallel_weight' => 1, - // 'type' => 'tazpit', - // 'is_weekend' => false, - // 'is_night' => true, - // 'color' => '#77ff23', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'tazpit 1 סופש', - // 'start_hour' => '11:45:00', - // 'duration' => 25, - // 'parallel_weight' => 2.5, - // 'type' => 'tazpit', - // 'is_weekend' => true, - // 'is_night' => false, - // 'color' => '#77ff23', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::FRIDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'tazpit 2 סופש', - // 'start_hour' => '11:00:00', - // 'duration' => 25, - // 'parallel_weight' => 2.5, - // 'type' => 'tazpit', - // 'is_weekend' => true, - // 'is_night' => false, - // 'color' => '#77ff23', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::FRIDAY], - // ]), - // ]); - // // bdikat ziud - // Task::factory()->create([ - // 'name' => 'bdikat ziud פעם בשבוע בוקר', - // 'start_hour' => '11:15:00', - // 'duration' => 3.5, - // 'parallel_weight' => 0, - // 'type' => 'bdikat ziud', - // 'is_weekend' => false, - // 'is_night' => false, - // 'color' => '#a7b2c3', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY], - // ]), - // ]); - // } - - // protected function createConstraints(int $userId) - // { - // for ($i = 0; $i < count(ConstraintType::cases()); $i++) { - // $times = ConstraintType::getLimit()[ConstraintType::cases()[$i]->value] > 0 - // ? random_int(0, ConstraintType::getLimit()[ConstraintType::cases()[$i]->value]) : - // random_int(0, random_int(0, 5)); - // for ($j = 0; $j < $times; $j++) { - // $startDate = call_user_func([$this, ConstraintType::cases()[$i]->name]); - // Constraint::factory()->create([ - // 'soldier_id' => User::find($userId)->userable_id, - // 'constraint_type' => ConstraintType::cases()[$i], - // 'start_date' => $startDate, - // 'end_date' => $startDate->copy()->addHours(random_int(1, 5)), - // ]); - // } - // } - // } - - // protected function getDatesOfMonth($month = null) - // { - // $month ??= now()->addMonth(); - - // return CarbonPeriod::between($month->startOfMonth(), $month->copy()->endOfMonth()); - // } - - // protected function getThursday() - // { - // $period = $this->getDatesOfMonth(); - - // return collect($period) - // ->filter( - // fn ($date) => Carbon::parse($date)->isThursday() - // )->all(); - // } - - // protected function getWeekends() - // { - // $period = $this->getDatesOfMonth(); - - // return collect($period) - // ->filter( - // fn ($date) => Carbon::parse($date)->isFriday() || Carbon::parse($date)->isSaturday() - // ) - // ->all(); - // } - - // protected function getTime() - // { - // return Carbon::now()->subSeconds(rand(0, 30 * 24 * 60 * 60)); - // } - - // protected function getNightHour() - // { - // $time = $this->getTime(); - // if ($time->hour < 20 && $time->hour >= 8) { - // return $time->addHours(20 - $time->hour); - // } - - // return $time; - // } - - // protected function NOT_WEEKEND() - // { - // $time = $this->getTime(); - - // return Carbon::parse(collect($this->getWeekends())->random()) - // ->setTime( - // $time->hour, - // $time->minute, - // $time->second - // ); - // } - - // protected function LOW_PRIORITY_NOT_WEEKEND() - // { - // $time = $this->getTime(); - - // return Carbon::parse(collect($this->getWeekends())->random()) - // ->setTime( - // $time->hour, - // $time->minute, - // $time->second - // ); - // } - - // protected function NOT_TASK() - // { - // $time = $this->getTime(); - - // return Carbon::parse(collect($this->getDatesOfMonth())->random()) - // ->setTime( - // $time->hour, - // $time->minute, - // $time->second - // ); - // } - - // protected function LOW_PRIORITY_NOT_TASK() - // { - // $time = $this->getTime(); - - // return Carbon::parse(collect($this->getDatesOfMonth())->random()) - // ->setTime( - // $time->hour, - // $time->minute, - // $time->second - // ); - // } - - // protected function NOT_EVENING() - // { - // $date = collect($this->getDatesOfMonth())->random(); - // $nightTime = $this->getNightHour(); - - // return $date->copy()->setTime($nightTime->hour, $nightTime->minute, $nightTime->second); - // } - - // protected function NOT_THURSDAY_EVENING() - // { - // $date = collect($this->getThursday())->random(); - // $nightTime = $this->getNightHour(); - - // return $date->copy()->setTime($nightTime->hour, $nightTime->minute, $nightTime->second); - // } - - // protected function VACATION() - // { - // $time = $this->getTime(); - - // return Carbon::parse(collect($this->getDatesOfMonth())->random()) - // ->setTime( - // $time->hour, - // $time->minute, - // $time->second - // ); - // } - - // protected function MEDICAL() - // { - // $time = $this->getTime(); - - // return Carbon::parse(collect($this->getDatesOfMonth())->random()) - // ->setTime( - // $time->hour, - // $time->minute, - // $time->second - // ); - // } - - // protected function SCHOOL() - // { - // $time = $this->getTime(); - - // return Carbon::parse(collect($this->getDatesOfMonth())->random()) - // ->setTime( - // $time->hour, - // $time->minute, - // $time->second - // ); + for ($i = 0; $i < 15; $i++) { + $user = User::factory()->create([ + 'first_name' => 'mefaked', + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['pikud'], + 'capacity' => 5.5, + 'max_weekends' => 5.5, + 'max_shifts' => 10, + 'max_nights' => 5.5, + 'course' => fake()->numberBetween(0, 5), + 'is_reservist' => false, + ])->id, + ])->assignRole('soldier'); + $this->createConstraints($user->id); + } + + for ($i = 0; $i < 40; $i++) { + $user = User::factory()->create([ + 'first_name' => 'chayal pashut', + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['hatasa', 'tazpit', 'shmira'], + 'capacity' => 6, + 'max_weekends' => 6, + 'max_shifts' => 7, + 'max_nights' => 6, + 'course' => fake()->numberBetween(0, 5), + 'is_reservist' => false, + ])->id, + ])->assignRole('soldier'); + $this->createConstraints($user->id); + } + + for ($i = 0; $i < 30; $i++) { + $user = User::factory()->create([ + 'first_name' => 'chayal beinony', + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['hatasa', 'tazpit', 'shmira', 'tichnun', 'pianuach'], + 'capacity' => 5.5, + 'max_weekends' => 5.5, + 'max_shifts' => 6, + 'max_nights' => 5.5, + 'course' => fake()->numberBetween(0, 5), + 'is_reservist' => false, + ])->id, + ])->assignRole('soldier'); + $this->createConstraints($user->id); + } + + for ($i = 0; $i < 25; $i++) { + $user = User::factory()->create([ + 'first_name' => 'chayal vatik', + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['hatasa', 'bakara', 'tichnun', 'pianuach'], + 'capacity' => 5, + 'max_weekends' => 5, + 'max_shifts' => 5, + 'max_nights' => 5, + 'course' => fake()->numberBetween(0, 5), + 'is_reservist' => false, + ])->id, + ])->assignRole('soldier'); + $this->createConstraints($user->id); + } + + for ($i = 0; $i < 10; $i++) { + $user = User::factory()->create([ + 'first_name' => 'menahalan', + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['minhal', 'bdikat ziud'], + 'capacity' => 0, + 'max_weekends' => 0, + 'max_shifts' => 4, + 'max_nights' => 0, + 'course' => fake()->numberBetween(0, 5), + 'is_reservist' => false, + ])->id, + ])->assignRole('soldier'); + $this->createConstraints($user->id); + } + + for ($i = 0; $i < 8; $i++) { + $user = User::factory()->create([ + 'first_name' => 'navat', + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['nivut'], + 'capacity' => 10, + 'max_weekends' => 10, + 'max_shifts' => 12, + 'max_nights' => 10, + 'course' => fake()->numberBetween(0, 5), + 'is_reservist' => false, + ])->id, + ])->assignRole('soldier'); + $this->createConstraints($user->id); + } + + // Tasks + // tichnun + Task::factory()->create([ + 'name' => 'tichnun א-ה בוקר', + 'start_hour' => '10:00:00', + 'duration' => 4, + 'parallel_weight' => 0, + 'type' => 'tichnun', + 'is_weekend' => false, + 'is_night' => false, + 'color' => '#b54b4b', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'tichnun א-ה לילה', + 'start_hour' => '02:00:00', + 'duration' => 4, + 'parallel_weight' => 1, + 'type' => 'tichnun', + 'is_weekend' => false, + 'is_night' => true, + 'color' => '#b54b4b', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'tichnun 1 סופ"ש', + 'start_hour' => '10:30:00', + 'duration' => 25, + 'parallel_weight' => 2.5, + 'type' => 'tichnun', + 'is_weekend' => true, + 'is_night' => false, + 'color' => '#b54b4b', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'tichnun 2 סופ"ש', + 'start_hour' => '11:10:00', + 'duration' => 25, + 'parallel_weight' => 2.5, + 'type' => 'tichnun', + 'is_weekend' => true, + 'is_night' => false, + 'color' => '#b54b4b', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + // bakara + Task::factory()->create([ + 'name' => 'bakara ארבע פעמים בשבוע בוקר', + 'start_hour' => '10:00:00', + 'duration' => 4, + 'parallel_weight' => 0, + 'type' => 'bakara', + 'is_weekend' => false, + 'is_night' => false, + 'color' => '#4bb5ac', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'bakara שלוש פעמים בשבוע לילה', + 'start_hour' => '03:20:00', + 'duration' => 4, + 'parallel_weight' => 1, + 'type' => 'bakara', + 'is_weekend' => false, + 'is_night' => true, + 'color' => '#4bb5ac', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'bakara סופ"ש', + 'start_hour' => '10:05:00', + 'duration' => 26, + 'parallel_weight' => 2.5, + 'type' => 'bakara', + 'is_weekend' => true, + 'is_night' => false, + 'color' => '#4bb5ac', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + // pikud + Task::factory()->create([ + 'name' => 'pikud 1 א-ה בוקר', + 'start_hour' => '10:00:00', + 'duration' => 4, + 'parallel_weight' => 0, + 'type' => 'pikud', + 'is_weekend' => false, + 'is_night' => false, + 'color' => '#4bb569', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'pikud 2 א-ה בוקר', + 'start_hour' => '10:00:00', + 'duration' => 4, + 'parallel_weight' => 0, + 'type' => 'pikud', + 'is_weekend' => false, + 'is_night' => false, + 'color' => '#4bb569', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'pikud 1 סופש', + 'start_hour' => '10:00:00', + 'duration' => 25, + 'parallel_weight' => 2.5, + 'type' => 'pikud', + 'is_weekend' => true, + 'is_night' => false, + 'color' => '#4bb569', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'pikud 2 סופש', + 'start_hour' => '10:00:00', + 'duration' => 25, + 'parallel_weight' => 2.5, + 'type' => 'pikud', + 'is_weekend' => true, + 'is_night' => false, + 'color' => '#4bb569', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'pikud לילה א-ה', + 'start_hour' => '03:00:00', + 'duration' => 4, + 'parallel_weight' => 1, + 'type' => 'pikud', + 'is_weekend' => false, + 'is_night' => true, + 'color' => '#4bb569', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + // minhal + Task::factory()->create([ + 'name' => 'minhal שלוש פעמים בשבוע בוקר', + 'start_hour' => '13:00:00', + 'duration' => 2, + 'parallel_weight' => 0, + 'type' => 'minhal', + 'is_weekend' => false, + 'is_night' => false, + 'color' => '#c5d649', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::TUESDAY, DaysInWeek::THURSDAY], + ]), + ]); + // hatasa + Task::factory()->create([ + 'name' => 'hatasa א-ה בוקר', + 'start_hour' => '09:00:00', + 'duration' => 6, + 'parallel_weight' => 0, + 'type' => 'hatasa', + 'is_weekend' => false, + 'is_night' => false, + 'color' => '#d649b5', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'hatasa א-ה לילה', + 'start_hour' => '02:00:00', + 'duration' => 6, + 'parallel_weight' => 1, + 'type' => 'hatasa', + 'is_weekend' => false, + 'is_night' => true, + 'color' => '#d649b5', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'hatasa 1 סופש', + 'start_hour' => '06:00:00', + 'duration' => 26, + 'parallel_weight' => 2.5, + 'type' => 'hatasa', + 'is_weekend' => true, + 'is_night' => false, + 'color' => '#d649b5', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'hatasa 2 סופש', + 'start_hour' => '06:00:00', + 'duration' => 26, + 'parallel_weight' => 2.5, + 'type' => 'hatasa', + 'is_weekend' => true, + 'is_night' => false, + 'color' => '#d649b5', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + // shmira + Task::factory()->create([ + 'name' => 'shmira א-ה בוקר', + 'start_hour' => '07:00:00', + 'duration' => 12, + 'parallel_weight' => 0, + 'type' => 'shmira', + 'is_weekend' => false, + 'is_night' => false, + 'color' => '#ee8559', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'shmira א-ה לילה', + 'start_hour' => '01:00:00', + 'duration' => 7, + 'parallel_weight' => 1, + 'type' => 'shmira', + 'is_weekend' => false, + 'is_night' => true, + 'color' => '#ee8559', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'shmira 1 סופש', + 'start_hour' => '06:00:00', + 'duration' => 26, + 'parallel_weight' => 2.5, + 'type' => 'shmira', + 'is_weekend' => true, + 'is_night' => false, + 'color' => '#ee8559', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'shmira סופש 2', + 'start_hour' => '06:00:00', + 'duration' => 26, + 'parallel_weight' => 2.5, + 'type' => 'shmira', + 'is_weekend' => true, + 'is_night' => false, + 'color' => '#ee8559', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + // pianuach + Task::factory()->create([ + 'name' => 'pianuach א-ה בוקר', + 'start_hour' => '07:00:00', + 'duration' => 7, + 'parallel_weight' => 0, + 'type' => 'pianuach', + 'is_weekend' => false, + 'is_night' => false, + 'color' => '#3574fb', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'pianuach א-ה לילה', + 'start_hour' => '01:00:00', + 'duration' => 5, + 'parallel_weight' => 1, + 'type' => 'pianuach', + 'is_weekend' => false, + 'is_night' => true, + 'color' => '#3574fb', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'pianuach 1 סופש', + 'start_hour' => '07:00:00', + 'duration' => 27, + 'parallel_weight' => 2.5, + 'type' => 'pianuach', + 'is_weekend' => true, + 'is_night' => false, + 'color' => '#3574fb', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'pianuach 2 סופש', + 'start_hour' => '07:00:00', + 'duration' => 27, + 'parallel_weight' => 2.5, + 'type' => 'pianuach', + 'is_weekend' => true, + 'is_night' => false, + 'color' => '#3574fb', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + // nivut + Task::factory()->create([ + 'name' => 'nivut א-ה בוקר', + 'start_hour' => '11:00:00', + 'duration' => 2, + 'parallel_weight' => 0, + 'type' => 'nivut', + 'is_weekend' => false, + 'is_night' => false, + 'color' => '#ed8d8d8b', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'nivut א-ה לילה', + 'start_hour' => '01:00:00', + 'duration' => 2.5, + 'parallel_weight' => 1, + 'type' => 'nivut', + 'is_weekend' => false, + 'is_night' => true, + 'color' => '#ed8d8d8b', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'nivut 1 סופש', + 'start_hour' => '11:00:00', + 'duration' => 28, + 'parallel_weight' => 2.5, + 'type' => 'nivut', + 'is_weekend' => true, + 'is_night' => false, + 'color' => '#ed8d8d8b', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'nivut 2 סופש', + 'start_hour' => '11:00:00', + 'duration' => 28, + 'parallel_weight' => 2.5, + 'type' => 'nivut', + 'is_weekend' => true, + 'is_night' => false, + 'color' => '#ed8d8d8b', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + // tazpit + Task::factory()->create([ + 'name' => 'tazpit א-ה בוקר 1', + 'start_hour' => '08:00:00', + 'duration' => 10, + 'parallel_weight' => 0, + 'type' => 'tazpit', + 'is_weekend' => false, + 'is_night' => false, + 'color' => '#77ff23', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'tazpit א-ה בוקר 2', + 'start_hour' => '08:00:00', + 'duration' => 10, + 'parallel_weight' => 0, + 'type' => 'tazpit', + 'is_weekend' => false, + 'is_night' => false, + 'color' => '#77ff23', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'tazpit א-ה לילה', + 'start_hour' => '01:30:00', + 'duration' => 6, + 'parallel_weight' => 1, + 'type' => 'tazpit', + 'is_weekend' => false, + 'is_night' => true, + 'color' => '#77ff23', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'tazpit 1 סופש', + 'start_hour' => '11:45:00', + 'duration' => 25, + 'parallel_weight' => 2.5, + 'type' => 'tazpit', + 'is_weekend' => true, + 'is_night' => false, + 'color' => '#77ff23', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'tazpit 2 סופש', + 'start_hour' => '11:00:00', + 'duration' => 25, + 'parallel_weight' => 2.5, + 'type' => 'tazpit', + 'is_weekend' => true, + 'is_night' => false, + 'color' => '#77ff23', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + // bdikat ziud + Task::factory()->create([ + 'name' => 'bdikat ziud פעם בשבוע בוקר', + 'start_hour' => '11:15:00', + 'duration' => 3.5, + 'parallel_weight' => 0, + 'type' => 'bdikat ziud', + 'is_weekend' => false, + 'is_night' => false, + 'color' => '#a7b2c3', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY], + ]), + ]); + } + + protected function createConstraints(int $userId) + { + for ($i = 0; $i < count(ConstraintType::cases()); $i++) { + $times = ConstraintType::getLimit()[ConstraintType::cases()[$i]->value] > 0 + ? random_int(0, ConstraintType::getLimit()[ConstraintType::cases()[$i]->value]) : + random_int(0, random_int(0, 5)); + for ($j = 0; $j < $times; $j++) { + $startDate = call_user_func([$this, ConstraintType::cases()[$i]->name]); + Constraint::factory()->create([ + 'soldier_id' => User::find($userId)->userable_id, + 'constraint_type' => ConstraintType::cases()[$i], + 'start_date' => $startDate, + 'end_date' => $startDate->copy()->addHours(random_int(1, 5)), + ]); + } + } + } + + protected function getDatesOfMonth($month = null) + { + $month ??= now()->addMonth(); + + return CarbonPeriod::between($month->startOfMonth(), $month->copy()->endOfMonth()); + } + + protected function getThursday() + { + $period = $this->getDatesOfMonth(); + + return collect($period) + ->filter( + fn ($date) => Carbon::parse($date)->isThursday() + )->all(); + } + + protected function getWeekends() + { + $period = $this->getDatesOfMonth(); + + return collect($period) + ->filter( + fn ($date) => Carbon::parse($date)->isFriday() || Carbon::parse($date)->isSaturday() + ) + ->all(); + } + + protected function getTime() + { + return Carbon::now()->subSeconds(rand(0, 30 * 24 * 60 * 60)); + } + + protected function getNightHour() + { + $time = $this->getTime(); + if ($time->hour < 20 && $time->hour >= 8) { + return $time->addHours(20 - $time->hour); + } + + return $time; + } + + protected function NOT_WEEKEND() + { + $time = $this->getTime(); + + return Carbon::parse(collect($this->getWeekends())->random()) + ->setTime( + $time->hour, + $time->minute, + $time->second + ); + } + + protected function LOW_PRIORITY_NOT_WEEKEND() + { + $time = $this->getTime(); + + return Carbon::parse(collect($this->getWeekends())->random()) + ->setTime( + $time->hour, + $time->minute, + $time->second + ); + } + + protected function NOT_TASK() + { + $time = $this->getTime(); + + return Carbon::parse(collect($this->getDatesOfMonth())->random()) + ->setTime( + $time->hour, + $time->minute, + $time->second + ); + } + + protected function LOW_PRIORITY_NOT_TASK() + { + $time = $this->getTime(); + + return Carbon::parse(collect($this->getDatesOfMonth())->random()) + ->setTime( + $time->hour, + $time->minute, + $time->second + ); + } + + protected function NOT_EVENING() + { + $date = collect($this->getDatesOfMonth())->random(); + $nightTime = $this->getNightHour(); + + return $date->copy()->setTime($nightTime->hour, $nightTime->minute, $nightTime->second); + } + + protected function NOT_THURSDAY_EVENING() + { + $date = collect($this->getThursday())->random(); + $nightTime = $this->getNightHour(); + + return $date->copy()->setTime($nightTime->hour, $nightTime->minute, $nightTime->second); + } + + protected function VACATION() + { + $time = $this->getTime(); + + return Carbon::parse(collect($this->getDatesOfMonth())->random()) + ->setTime( + $time->hour, + $time->minute, + $time->second + ); + } + + protected function MEDICAL() + { + $time = $this->getTime(); + + return Carbon::parse(collect($this->getDatesOfMonth())->random()) + ->setTime( + $time->hour, + $time->minute, + $time->second + ); + } + + protected function SCHOOL() + { + $time = $this->getTime(); + + return Carbon::parse(collect($this->getDatesOfMonth())->random()) + ->setTime( + $time->hour, + $time->minute, + $time->second + ); } } diff --git a/lang/he.json b/lang/he.json index 40c608b..7f7bfed 100644 --- a/lang/he.json +++ b/lang/he.json @@ -70,6 +70,7 @@ "Course": "קורס", "Create":"צור", "Create shifts":"צור משמרות", + "Create soldier":"צור חייל", "Creating shifts":"יצירת משמרות", "Close":"סגור", "Change shift":"שינוי משמרת", @@ -287,5 +288,7 @@ "Constraint request rejected":"דחיית הוספת אילוץ", "Commander approved create constraint":"שלום :name!
בקשתך להוספת האילוץ :constraintName
מ :startDate עד :endDate אושרה!
המשך יום טוב!", "Commander deny create constraint":"שלום :name!
בקשתך להוספת האילוץ :constraintName
מ :startDate עד :endDate נדחתה!
המשך יום טוב!", - "Please note! This constraint will only be approved for you after approval from the commander.":"שים לב! אילוץ זה יאושר עבורך רק לאחר אישור המפקד." + "Please note! This constraint will only be approved for you after approval from the commander.":"שים לב! אילוץ זה יאושר עבורך רק לאחר אישור המפקד.", + "You did not choose a commander. With your approval, you leave the department without a commander. Are you sure?":"לא נבחר מפקד. באישורך אתה יוצר צוות ללא מפקד.האם אתה בטוח?", + "Shifts Assigments":"שיבוץ משמרות" } From 46fb2037f999ba82c841cc778c2eac4ebd3a133a Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 23 Jan 2025 09:56:35 +0200 Subject: [PATCH 071/259] push and deploy --- .github/workflows/php-build-and-deploy.yml | 6 +- app/Filament/Widgets/CalendarWidget.php | 80 ++++++++++++--------- app/Models/Constraint.php | 83 ++++++++++++++-------- app/Resources/SoldierResource.php | 9 +++ database/seeders/DatabaseSeeder.php | 8 +++ 5 files changed, 118 insertions(+), 68 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 157ed4f..18ec766 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_7 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_8 flavor: | latest=false tags: | @@ -54,6 +54,4 @@ jobs: labels: ${{ steps.meta.outputs.labels }} tags: ${{ steps.meta.outputs.tags }} file: ./Dockerfile - - - + \ No newline at end of file diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index df00963..4345382 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -149,45 +149,16 @@ protected function headerActions(): array $this->refreshRecords(); $this->lastFilterData = $this->filterData; } - $today = now()->startOfDay(); $actions = []; if ($this->type === 'my') { if ($this->model === Constraint::class) { - return [ - CreateAction::make() - ->action(function (array $data) { - if ( - ($data['constraint_type'] == ConstraintType::VACATION->value || - $data['constraint_type'] == ConstraintType::MEDICAL->value) - && auth()->user()->getRoleNames()->count() === 1 - ) { - Constraint::requestConstraint($data); - } else { - Constraint::create([ - 'constraint_type' => $data['constraint_type'], - 'start_date' => $data['start_date'], - 'end_date' => $data['end_date'], - ]); - } - }) - ->mountUsing(function (Form $form, array $arguments) { - $form->fill([ - 'start_date' => $arguments['start'] ?? null, - 'end_date' => $arguments['end'] ?? null, - ]); - }) - ->label($this->model::getTitle().' '.__('New')) - ->modalHeading(__('Create').' '.$this->model::getTitle()) - ->disabled(function (array $arguments) use ($today) { - $startDate = Carbon::parse($arguments['start'] ?? null); - - return $startDate->isBefore($today); - }) - ->hidden($this->model === Shift::class && $this->type === 'my' && ! array_intersect(auth()->user()->getRoleNames()->toArray(), ['manager', 'shifts-assignment', 'department-commander', 'team-commander'])), - ]; + return [$this->createConstraintAction()]; } } else { if ($this->model !== Shift::class) { + if (in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray())) { + return [$this->createConstraintAction()]; + } FilamentFullCalendarPlugin::get()->editable(false); FilamentFullCalendarPlugin::get()->selectable(false); } else { @@ -245,6 +216,42 @@ protected function headerActions(): array return []; } + protected function createConstraintAction() + { + $today = now()->startOfDay(); + + return CreateAction::make() + ->action(function (array $data) { + if ( + ($data['constraint_type'] == ConstraintType::VACATION->value || + $data['constraint_type'] == ConstraintType::MEDICAL->value) + && auth()->user()->getRoleNames()->count() === 1 + ) { + Constraint::requestConstraint($data); + } else { + Constraint::create([ + 'constraint_type' => $data['constraint_type'], + 'start_date' => $data['start_date'], + 'end_date' => $data['end_date'], + ]); + } + }) + ->mountUsing(function (Form $form, array $arguments) { + $form->fill([ + 'start_date' => $arguments['start'] ?? null, + 'end_date' => $arguments['end'] ?? null, + ]); + }) + ->label($this->model::getTitle().' '.__('New')) + ->modalHeading(__('Create').' '.$this->model::getTitle()) + ->disabled(function (array $arguments) use ($today) { + $startDate = Carbon::parse($arguments['start'] ?? null); + + return $startDate->isBefore($today); + }) + ->hidden($this->model === Shift::class && $this->type === 'my' && ! array_intersect(auth()->user()->getRoleNames()->toArray(), ['manager', 'shifts-assignment', 'department-commander', 'team-commander'])); + } + protected function resetShifts() { $this->startDate = (Carbon::now()->format('m') == Carbon::parse($this->currentMonth)->format('m')) @@ -311,6 +318,7 @@ protected function modalActions(): array if ( ($this->model == Constraint::class && $this->type == 'my') + || ($this->model == Constraint::class && $this->type == 'my_soldiers' && in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray())) || ($this->model == Shift::class && $this->type == 'my_soldiers') || ($this->model == Shift::class && $this->type == 'my' && array_intersect(auth()->user()->getRoleNames()->toArray(), ['manager', 'shifts-assignment', 'department-commander', 'team-commander'])) ) { @@ -323,8 +331,10 @@ protected function modalActions(): array if ($this->model == Shift::class && $this->type == 'my') { return $changeAction; } - FilamentFullCalendarPlugin::get()->editable(false); - FilamentFullCalendarPlugin::get()->selectable(false); + if (! (in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray()))) { + FilamentFullCalendarPlugin::get()->editable(false); + FilamentFullCalendarPlugin::get()->selectable(false); + } return []; } diff --git a/app/Models/Constraint.php b/app/Models/Constraint.php index 13523d5..d57a4ea 100644 --- a/app/Models/Constraint.php +++ b/app/Models/Constraint.php @@ -3,6 +3,7 @@ namespace App\Models; use App\Enums\ConstraintType; +use Cache; use Carbon\Carbon; use Filament\Actions\Action; use Filament\Forms\Components\DateTimePicker; @@ -44,6 +45,19 @@ public static function getSchema(): array Placeholder::make('') ->content(fn (Constraint $constraint) => $constraint->soldier_name) ->inlineLabel(), + Select::make('soldier_id') + ->label(__('Soldier')) + ->hiddenOn('view') + ->visible(fn () => in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray()) + && \Str::contains($_SERVER['HTTP_REFERER'], 'my-soldiers-constraint')) + ->options(fn () => Cache::remember('users', 30 * 60, function () { + return User::all(); + }) + ->mapWithKeys(function ($user) { + return [$user->userable_id => $user->displayName]; + })) + ->afterStateUpdated(fn ($state) => session()->put('soldier_id', $state)) + ->required(), ToggleButtons::make('constraint_type') ->required() ->label(__('Constraint Name')) @@ -53,7 +67,7 @@ public static function getSchema(): array ->inline() ->options(fn (Get $get) => self::availableOptions($get('start_date'), $get('end_date'))) ->afterStateUpdated(fn (callable $set, $state, Get $get) => self::updateDates($set, $state, $get)), - ToggleButtons::make('constraint_type') + ToggleButtons::make('constraint_type_view') ->label(__('Constraint Name')) ->inline() ->visibleOn('view') @@ -64,7 +78,9 @@ public static function getSchema(): array ->required(), Placeholder::make('') ->content(__('Please note! This constraint will only be approved for you after approval from the commander.')) - ->visible((fn (Get $get) => $get('constraint_type') == 'Vacation' || $get('constraint_type') == 'Medical') && auth()->user()->getRoleNames()->count() == 1) + ->visible(fn (Get $get) => ($get('constraint_type') === ConstraintType::VACATION->value || $get('constraint_type') === ConstraintType::MEDICAL->value) + && auth()->user()->getRoleNames()->count() === 1) + ->hiddenOn('view') ->extraAttributes(['style' => 'color: red; font-family: Arial, Helvetica, sans-serif; font-size: 20px']), Grid::make() ->visible(fn ($get) => in_array($get('constraint_type'), ['Medical', 'Vacation', 'School', 'Not task', 'Low priority not task'])) @@ -123,6 +139,11 @@ public static function requestConstraint($data) ->sendToDatabase($commander, true); } + public static function getAvailableOptions($startDate, $endDate): array + { + return static::availableOptions($startDate, $endDate); + } + private static function availableOptions($startDate, $endDate): array { $start_date = Carbon::parse($startDate); @@ -139,34 +160,29 @@ private static function availableOptions($startDate, $endDate): array unset($options[ConstraintType::NOT_WEEKEND->value]); unset($options[ConstraintType::LOW_PRIORITY_NOT_WEEKEND->value]); } - $usedCounts = self::getUsedCountsForCurrentMonth($startDate, $endDate); - $limits = Soldier::where('id', auth()->user()->userable_id)->pluck('constraints_limit')->first() - ? Soldier::where('id', auth()->user()->userable_id)->pluck('constraints_limit')->first() - : ConstraintType::getLimit(); - $constraintsWithinLimit = []; - - $queryConstraints = Constraint::where('soldier_id', auth()->user()->userable_id) - ->whereBetween('start_date', [$startDate, $endDate]) - ->pluck('constraint_type') - ->toArray(); - - foreach ($options as $constraint => $label) { - $used = $usedCounts[$constraint] ?? 0; - $limit = $limits[$constraint] ?? 0; - if ($limit === 0 || $used < $limit) { - if (! in_array($constraint, $queryConstraints)) { - $constraintsWithinLimit[$constraint] = $label; + if (! (in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray()))) { + $usedCounts = self::getUsedCountsForCurrentMonth($startDate, $endDate); + $limits = Soldier::where('id', auth()->user()->userable_id)->pluck('constraints_limit')->first() ?: ConstraintType::getLimit(); + $constraintsWithinLimit = []; + $queryConstraints = Constraint::where('soldier_id', auth()->user()->userable_id) + ->whereBetween('start_date', [$startDate, $endDate]) + ->pluck('constraint_type') + ->toArray(); + + foreach ($options as $constraint => $label) { + $used = $usedCounts[$constraint] ?? 0; + $limit = $limits[$constraint] ?? 0; + if ($limit === 0 || $used < $limit) { + if (! in_array($constraint, $queryConstraints)) { + $constraintsWithinLimit[$constraint] = $label; + } } } - } - return $constraintsWithinLimit; + return $constraintsWithinLimit; + } - } - - public static function getAvailableOptions($startDate, $endDate): array - { - return static::availableOptions($startDate, $endDate); + return $options; } private static function getUsedCountsForCurrentMonth($startDate, $endDate): array @@ -223,15 +239,24 @@ public static function updateDates(callable $set, $state, Get $get) protected static function booted() { static::creating(function ($constraint) { - $constraint->soldier_id = $constraint->soldier_id ?: ($constraint->getCurrentUserSoldier() ? $constraint->getCurrentUserSoldier()->id : null); + $constraint->soldier_id = $constraint->soldier_id ?: ($constraint->getCurrentUserSoldier() ?: null); + session()->put('soldier_id', null); + }); + + static::updating(function ($constraint) { + $constraint->soldier_id = $constraint->soldier_id ?: ($constraint->getCurrentUserSoldier() ?: null); + session()->put('soldier_id', null); }); } - private function getCurrentUserSoldier(): ?Soldier + private function getCurrentUserSoldier() { + if (session()->get('soldier_id')) { + return session()->get('soldier_id'); + } $user = auth()->user(); if ($user && $user->userable instanceof Soldier) { - return $user->userable; + return $user->userable_id; } return null; diff --git a/app/Resources/SoldierResource.php b/app/Resources/SoldierResource.php index b122be4..5b1529d 100644 --- a/app/Resources/SoldierResource.php +++ b/app/Resources/SoldierResource.php @@ -417,46 +417,55 @@ public static function constraintsLimit() ->label(__('Not weekend')) ->numeric() ->minValue(0) + ->required() ->default(ConstraintType::getLimit()['Not weekend']), TextInput::make('Low priority not weekend') ->label(__('Low priority not weekend')) ->numeric() ->minValue(0) + ->required() ->default(ConstraintType::getLimit()['Low priority not weekend']), TextInput::make('Not task') ->label(__('Not task')) ->numeric() ->minValue(0) + ->required() ->default(ConstraintType::getLimit()['Not task']), TextInput::make('Low priority not task') ->label(__('Low priority not task')) ->numeric() ->minValue(0) + ->required() ->default(ConstraintType::getLimit()['Low priority not task']), TextInput::make('Not evening') ->label(__('Not evening')) ->numeric() ->minValue(0) + ->required() ->default(ConstraintType::getLimit()['Not evening']), TextInput::make('Not Thursday evening') ->label(__('Not Thursday evening')) ->numeric() ->minValue(0) + ->required() ->default(ConstraintType::getLimit()['Not Thursday evening']), TextInput::make('Vacation') ->label(__('Vacation')) ->numeric() ->minValue(0) + ->required() ->default(ConstraintType::getLimit()['Vacation']), TextInput::make('Medical') ->label(__('Medical')) ->numeric() ->minValue(0) + ->required() ->default(ConstraintType::getLimit()['Medical']), TextInput::make('School') ->label(__('School')) ->numeric() ->minValue(0) + ->required() ->default(ConstraintType::getLimit()['School']), ]) ->statePath('constraints_limit') diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index b234287..b8b2beb 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -35,6 +35,7 @@ public function run(): void 'max_nights' => 10, 'course' => fake()->numberBetween(0, 5), 'is_reservist' => false, + 'constraints_limit' => ConstraintType::getLimit(), ])->id, ])->assignRole(['soldier', 'manager']); @@ -47,6 +48,7 @@ public function run(): void 'max_shifts' => 7, 'max_nights' => 6, 'is_reservist' => false, + 'constraints_limit' => ConstraintType::getLimit(), ])->id, ])->assignRole(['soldier', 'shifts-assignment']); @@ -61,6 +63,7 @@ public function run(): void 'max_nights' => 5.5, 'course' => fake()->numberBetween(0, 5), 'is_reservist' => false, + 'constraints_limit' => ConstraintType::getLimit(), ])->id, ])->assignRole('soldier'); $this->createConstraints($user->id); @@ -77,6 +80,7 @@ public function run(): void 'max_nights' => 6, 'course' => fake()->numberBetween(0, 5), 'is_reservist' => false, + 'constraints_limit' => ConstraintType::getLimit(), ])->id, ])->assignRole('soldier'); $this->createConstraints($user->id); @@ -93,6 +97,7 @@ public function run(): void 'max_nights' => 5.5, 'course' => fake()->numberBetween(0, 5), 'is_reservist' => false, + 'constraints_limit' => ConstraintType::getLimit(), ])->id, ])->assignRole('soldier'); $this->createConstraints($user->id); @@ -109,6 +114,7 @@ public function run(): void 'max_nights' => 5, 'course' => fake()->numberBetween(0, 5), 'is_reservist' => false, + 'constraints_limit' => ConstraintType::getLimit(), ])->id, ])->assignRole('soldier'); $this->createConstraints($user->id); @@ -125,6 +131,7 @@ public function run(): void 'max_nights' => 0, 'course' => fake()->numberBetween(0, 5), 'is_reservist' => false, + 'constraints_limit' => ConstraintType::getLimit(), ])->id, ])->assignRole('soldier'); $this->createConstraints($user->id); @@ -141,6 +148,7 @@ public function run(): void 'max_nights' => 10, 'course' => fake()->numberBetween(0, 5), 'is_reservist' => false, + 'constraints_limit' => ConstraintType::getLimit(), ])->id, ])->assignRole('soldier'); $this->createConstraints($user->id); From 3944117f1b1604a71e48dc155e8fbbe697ef4b23 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Mon, 27 Jan 2025 09:28:23 +0200 Subject: [PATCH 072/259] push and deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Exports/ShiftsExport.php | 18 +++--- app/Filament/Widgets/CalendarWidget.php | 27 +++++---- .../SoldierResource/Pages/ListSoldiers.php | 58 +++++++++++++++++++ lang/he.json | 2 + 5 files changed, 88 insertions(+), 19 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 18ec766..4f8a953 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_8 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_9 flavor: | latest=false tags: | diff --git a/app/Exports/ShiftsExport.php b/app/Exports/ShiftsExport.php index c7393f8..ddb95ce 100644 --- a/app/Exports/ShiftsExport.php +++ b/app/Exports/ShiftsExport.php @@ -2,6 +2,7 @@ namespace App\Exports; +use App\Models\Shift; use App\Models\Task; use App\Models\User; use Illuminate\Support\Carbon; @@ -19,25 +20,27 @@ class ShiftsExport implements FromCollection, ShouldAutoSize, WithHeadings, With protected $month; - public function __construct($query, $month) + public function __construct($month) { - $this->query = $query; + $this->query = Shift::whereNotNull('soldier_id') + ->whereBetween('start_date', [Carbon::parse($this->month)->startOfMonth(), Carbon::parse($this->month)->endOfMonth()]) + ->get(); $this->month = $month; } public function collection() { return $this->query - ->whereBetween('start_date', [Carbon::parse($this->month)->startOfMonth(), Carbon::parse($this->month)->endOfMonth()]) ->sortBy('start_date') ->map(function ($shift) { $task = Task::find($shift->task_id); return [ + __('Shift name') => $task->name, + __('Shift type') => $task->type, + __('Soldier') => User::where('userable_id', $shift->soldier_id)->first()?->displayName ?? __('Unknown'), __('Start date') => $shift->start_date, __('End date') => $shift->end_date, - __('Soldier') => User::where('userable_id', $shift->soldier_id)->first()?->displayName ?? __('Unknown'), - __('Shift name') => $task->name, __('Is night') => $task->is_night ? __('Yes') : __('No'), __('Is weekend') => $task->is_weekend ? __('Yes') : __('No'), ]; @@ -47,10 +50,11 @@ public function collection() public function headings(): array { return [ + __('Shift name'), + __('Shift type'), + __('Soldier'), __('Start date'), __('End date'), - __('Soldier'), - __('Shift name'), __('Is night'), __('Is weekend'), ]; diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 4345382..4f93b32 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -153,6 +153,8 @@ protected function headerActions(): array if ($this->type === 'my') { if ($this->model === Constraint::class) { return [$this->createConstraintAction()]; + } else { + return [$this->downloadAssignmentsAction()]; } } else { if ($this->model !== Shift::class) { @@ -165,15 +167,7 @@ protected function headerActions(): array if (Task::exists()) { $actions = [ ActionGroup::make([ - Action::make('Download') - ->label(__('Download to excel')) - ->icon('heroicon-o-arrow-down-tray') - ->action(function () { - return Excel::download(new ShiftsExport($this->getEventsByRole(), $this->currentMonth), __('File name', [ - 'name' => auth()->user()->displayName, - 'month' => $this->currentMonth, - ]).'.xlsx'); - }), + $this->downloadAssignmentsAction(), Action::make('Create shifts') ->action(fn () => $this->runEvents()) ->label(__('Create shifts')) @@ -212,8 +206,6 @@ protected function headerActions(): array ] ); } - - return []; } protected function createConstraintAction() @@ -252,6 +244,19 @@ protected function createConstraintAction() ->hidden($this->model === Shift::class && $this->type === 'my' && ! array_intersect(auth()->user()->getRoleNames()->toArray(), ['manager', 'shifts-assignment', 'department-commander', 'team-commander'])); } + protected function downloadAssignmentsAction() + { + return Action::make('Download') + ->label(__('Download to excel')) + ->icon('heroicon-o-arrow-down-tray') + ->action(function () { + return Excel::download(new ShiftsExport($this->currentMonth), __('File name', [ + 'name' => auth()->user()->displayName, + 'month' => $this->currentMonth, + ]).'.xlsx'); + }); + } + protected function resetShifts() { $this->startDate = (Carbon::now()->format('m') == Carbon::parse($this->currentMonth)->format('m')) diff --git a/app/Resources/SoldierResource/Pages/ListSoldiers.php b/app/Resources/SoldierResource/Pages/ListSoldiers.php index 1a4cba2..8e9d7ca 100644 --- a/app/Resources/SoldierResource/Pages/ListSoldiers.php +++ b/app/Resources/SoldierResource/Pages/ListSoldiers.php @@ -2,8 +2,14 @@ namespace App\Resources\SoldierResource\Pages; +use App\Models\Soldier; +use App\Models\Task; use App\Resources\SoldierResource; +use Filament\Actions\Action; use Filament\Actions\CreateAction; +use Filament\Forms\Components\Section; +use Filament\Forms\Components\Select; +use Filament\Forms\Components\TextInput; use Filament\Resources\Pages\ListRecords; class ListSoldiers extends ListRecords @@ -14,6 +20,58 @@ protected function getHeaderActions(): array { return [ CreateAction::make(), + Action::make('Course editing') + ->label(__('Edit course')) + ->color('primary') + ->form([ + Section::make([ + Select::make('course') + ->label(__('Course')) + ->options(Soldier::pluck('course', 'course')->unique()->sortBy('course')->all()) + ->required(), + ]), + Section::make([ + TextInput::make('max_shifts') + ->label(__('Max shifts')) + ->numeric() + ->step(1) + ->minValue(0), + TextInput::make('max_nights') + ->label(__('Max nights')) + ->numeric() + ->step(0.25) + ->minValue(0), + TextInput::make('max_weekends') + ->label(__('Max weekends')) + ->numeric() + ->step(0.25) + ->minValue(0), + TextInput::make('capacity') + ->numeric() + ->step(0.25) + ->minValue(0) + ->label(__('Capacity')), + Select::make('qualifications') + ->label(__('Qualifications')) + ->multiple() + ->placeholder(__('Select qualifications')) + ->options(Task::all()->pluck('type', 'type')), + ]), + ]) + ->action(function (array $data) { + $selectedCourse = $data['course']; + $updateData = []; + $fields = ['max_shifts', 'max_nights', 'max_weekends', 'capacity', 'qualifications']; + + foreach ($fields as $field) { + if (isset($data[$field])) { + $updateData[$field] = ($field === 'qualifications') ? json_encode($data[$field]) : $data[$field]; + } + } + if (! empty($updateData)) { + Soldier::where('course', $selectedCourse)->update($updateData); + } + }), ]; } } diff --git a/lang/he.json b/lang/he.json index 7f7bfed..98011aa 100644 --- a/lang/he.json +++ b/lang/he.json @@ -67,6 +67,7 @@ "Constraints": "אילוצים", "constraints": "אילוצים", "Constraints limit": "הגבלת אילוצים", + "Edit course": "ערוך קורס", "Course": "קורס", "Create":"צור", "Create shifts":"צור משמרות", @@ -220,6 +221,7 @@ "Shift": "משמרת", "Shift change":"החלפת משמרות", "Shift name":"שם המשמרת", + "Shift type":"סוג המשמרת", "Shifts": "משמרות", "shifts": "משמרות", "Shifts assignment":"שבץ משמרות", From 2f87abcdf65583b269109c938cea379abd541066 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Mon, 27 Jan 2025 11:45:56 +0200 Subject: [PATCH 073/259] push and deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Enums/ConstraintType.php | 5 + app/Filament/Widgets/CalendarWidget.php | 2 +- app/Models/Shift.php | 57 +++++-- app/Models/Soldier.php | 4 + app/Models/Task.php | 4 + app/Resources/SoldierResource.php | 6 + app/Resources/TaskResource.php | 31 ++++ app/Services/Algorithm.php | 11 +- app/Services/ChangeAssignment.php | 65 ++++---- app/Services/ConcurrentTasks.php | 154 ++++++++++++++++++ app/Services/FixedConstraints.php | 61 +++++++ app/Services/Helpers.php | 18 +- app/Services/ManualAssignment.php | 28 +++- app/Services/Range.php | 37 +---- app/Services/Schedule.php | 24 +-- app/Services/Soldier.php | 34 +++- bootstrap/app.php | 4 + database/factories/TaskFactory.php | 1 + ...2024_05_30_094012_create_soldier_table.php | 2 + .../2024_05_30_100244_create_task_table.php | 2 + database/seeders/DatabaseSeeder.php | 35 ++++ lang/he.json | 14 +- tests/Unit/AlgorithmServiceTest.php | 4 +- tests/Unit/ChangeAssignmentServiceTest.php | 53 ++++-- tests/Unit/ChartsTest.php | 2 + tests/Unit/FixedConstraintsTest.php | 71 ++++++++ tests/Unit/HelpersServiceTest.php | 19 ++- tests/Unit/RangeServiceTest.php | 4 +- tests/Unit/ScheduleServiceTest.php | 1 + tests/Unit/ShiftServiceTest.php | 2 +- tests/Unit/SoldierServiceTest.php | 58 +++++-- 32 files changed, 647 insertions(+), 168 deletions(-) create mode 100644 app/Services/ConcurrentTasks.php create mode 100644 app/Services/FixedConstraints.php create mode 100644 tests/Unit/FixedConstraintsTest.php diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 4f8a953..687fc85 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_9 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_10 flavor: | latest=false tags: | diff --git a/app/Enums/ConstraintType.php b/app/Enums/ConstraintType.php index 509a984..0f0945c 100644 --- a/app/Enums/ConstraintType.php +++ b/app/Enums/ConstraintType.php @@ -12,6 +12,7 @@ enum ConstraintType: string implements HasLabel case LOW_PRIORITY_NOT_TASK = 'Low priority not task'; case NOT_EVENING = 'Not evening'; case NOT_THURSDAY_EVENING = 'Not Thursday evening'; + case NOT_SUNDAY_MORNING = 'Not Sunday morning'; case VACATION = 'Vacation'; case MEDICAL = 'Medical'; case SCHOOL = 'School'; @@ -28,6 +29,7 @@ public function getLabel(): string self::VACATION => __('Vacation'), self::MEDICAL => __('Medical'), self::SCHOOL => __('School'), + self::NOT_SUNDAY_MORNING => __('Not Sunday morning'), }; } @@ -40,6 +42,7 @@ public static function getPriority(): array self::LOW_PRIORITY_NOT_TASK->value => 2, self::NOT_EVENING->value => 1, self::NOT_THURSDAY_EVENING->value => 1, + self::NOT_SUNDAY_MORNING->value => 4, self::VACATION->value => 1, self::MEDICAL->value => 1, self::SCHOOL->value => 1, @@ -55,6 +58,7 @@ public static function getLimit(): array self::LOW_PRIORITY_NOT_TASK->value => 3, self::NOT_EVENING->value => 4, self::NOT_THURSDAY_EVENING->value => 1, + self::NOT_SUNDAY_MORNING->value => 1, self::VACATION->value => 0, self::MEDICAL->value => 0, self::SCHOOL->value => 4, @@ -70,6 +74,7 @@ public function getColor(): string|array|null self::LOW_PRIORITY_NOT_TASK => '#baffc9', self::NOT_EVENING => '#ffd4e5', self::NOT_THURSDAY_EVENING => '#ffdfba', + self::NOT_SUNDAY_MORNING => '#ffdfba', self::VACATION => '#bae1ff', self::MEDICAL => '#f2d7fb', self::SCHOOL => '#f9a7a7', diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 4f93b32..1e2574a 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -174,7 +174,7 @@ protected function headerActions(): array ->icon('heroicon-o-clipboard-document-check'), Action::make('Shifts assignment') ->action(fn () => $this->runAlgorithm()) - ->label(__('Shifts assignment')) + ->label(__('Shifts assignment and Parallel shifts')) ->icon('heroicon-o-play'), Action::make('Reset assignment') ->action(fn () => $this->resetShifts()) diff --git a/app/Models/Shift.php b/app/Models/Shift.php index 5f7827f..5ea275a 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -5,7 +5,9 @@ use App\Casts\Integer; use App\Filament\Notifications\MyNotification; use App\Services\ChangeAssignment; +use App\Services\Helpers; use App\Services\ManualAssignment; +use App\Services\Range; use Cache; use Carbon\Carbon; use Filament\Actions\Action; @@ -101,13 +103,7 @@ function (?Shift $shift, Get $get) { } ) ->default(null) - ->placeholder(function (?Shift $shift, Get $get) { - $manual_assignment = new ManualAssignment($shift, $get('soldier_type')); - - return ! $manual_assignment->getSoldiers() ? - __('No suitable soldiers') : - __('Select a soldier'); - }) + ->placeholder(fn (?Shift $shift, Get $get) => self::soldierIdPlaceholder($get('soldier_type'), $shift)) ->visible( fn (Get $get): bool => $get('soldier_type') != null && $get('soldier_type') != 'me' @@ -144,6 +140,21 @@ function (?Shift $shift, Get $get) { ]; } + protected static function soldierIdPlaceholder($soldierType, $shift) + { + if ($soldierType === 'all') { + return Cache::remember('users', 30 * 60, function () { + return User::all(); + })->count() > 0 ? __('Select a soldier') : __('No suitable soldiers'); + } + $manual_assignment = new ManualAssignment($shift, $soldierType); + + return + ! $manual_assignment->getSoldiers() ? + __('No suitable soldiers') : + __('Select a soldier'); + } + public static function afterSave($shift, $record) { if ((empty($shift['soldier_type'])) || (empty($shift['soldier_id']) && $shift['soldier_type'] != 'me')) { @@ -197,20 +208,20 @@ function ($record) { $changeAssignment = new ChangeAssignment($record); $sections = $changeAssignment->getMatchingShifts() ->map( - function ($shifts, $soldierId) { + function ($shifts, $soldierId) use ($record) { return Section::make() ->id($soldierId) - ->description(__('Exchange with').' '.Soldier::find($soldierId)->user->displayName) + ->description(self::description($soldierId, $record)) ->schema( $shifts->map( - function ($shift) { + function ($shift) use ($record) { return Section::make() ->id($shift->id) ->schema([ Radio::make('selected_shift') ->label(__('')) ->options([ - $shift->id => __('Task').': '.Task::find($shift->task_id)->name.' '.__('Time').': '.__('From').' '.$shift->start_date.' '.__('To').' '.$shift->end_date, + $shift->id => self::getOption($shift, $record), ]) ->default(null) ->afterStateUpdated(fn () => session()->put('selected_shift', true)) @@ -280,6 +291,30 @@ function ($shift) { }); } + protected static function description($soldierId, $shift) + { + $soldier = Soldier::find($soldierId); + $concurrentsShifts = Helpers::getSoldiersShifts($soldierId, new Range($shift->start_date->copy()->startOfMonth(), $shift->end_date->copy()->endOfMonth()), true); + $soldier = Helpers::buildSoldier($soldier, [], [], [], $concurrentsShifts); + $shift = Helpers::buildShift($shift); + + return $soldier->isAvailableByConcurrentsShifts($shift) ? + __('Exchange with').' '.Soldier::find($soldierId)->user->displayName : + __('Exchange with').' '.Soldier::find($soldierId)->user->displayName.' ('.__('The soldier is assigned a shift during the task').')'; + } + + protected static function getOption($shift, $record) + { + $soldier = Soldier::find($record->soldier_id); + $concurrentsShifts = Helpers::getSoldiersShifts($soldier->id, new Range($record->start_date->copy()->startOfMonth(), $record->end_date->copy()->endOfMonth()), true); + $soldier = Helpers::buildSoldier($soldier, [], [], [], $concurrentsShifts); + $shift = Helpers::buildShift($shift); + + return $soldier->isAvailableByConcurrentsShifts($shift) ? + __('Task').': '.Task::find(Shift::find($shift->id)->task_id)->name.'. '.__('Time').': '.__('From').' '.$shift->range->start.' '.__('To').' '.$shift->range->end : + '📌 '.__('Task').': '.Task::find(Shift::find($shift->id)->task_id)->name.'. '.__('Time').': '.__('From').' '.$shift->range->start.' '.__('To').' '.$shift->range->end; + } + protected static function shiftsAssignmentExchange($record, $shift) { self::shiftsAssignmentSendExchangeNotifications($record, $shift); diff --git a/app/Models/Soldier.php b/app/Models/Soldier.php index fb8cf2c..0083e2c 100644 --- a/app/Models/Soldier.php +++ b/app/Models/Soldier.php @@ -33,6 +33,8 @@ class Soldier extends Model 'reserve_dates', 'next_reserve_dates', 'constraints_limit', + 'not_thursday_evening', + 'not_sunday_morning', ]; protected $casts = [ @@ -42,6 +44,8 @@ class Soldier extends Model 'has_exemption' => 'boolean', 'is_trainee' => 'boolean', 'is_mabat' => 'boolean', + 'not_thursday_evening' => 'boolean', + 'not_sunday_morning' => 'boolean', 'capacity' => Integer::class, 'max_nights' => Integer::class, 'max_weekends' => Integer::class, diff --git a/app/Models/Task.php b/app/Models/Task.php index a6313b0..429bdb6 100644 --- a/app/Models/Task.php +++ b/app/Models/Task.php @@ -22,6 +22,8 @@ class Task extends Model 'is_alert', 'is_weekend', 'is_night', + 'in_parallel', + 'concurrent_tasks', 'department_name', 'recurring', ]; @@ -31,6 +33,8 @@ class Task extends Model 'is_weekend' => 'boolean', 'is_night' => 'boolean', 'parallel_weight' => Integer::class, + 'in_parallel' => 'boolean', + 'concurrent_tasks' => 'array', 'recurring' => 'array', 'duration' => Integer::class, ]; diff --git a/app/Resources/SoldierResource.php b/app/Resources/SoldierResource.php index 5b1529d..ea5021c 100644 --- a/app/Resources/SoldierResource.php +++ b/app/Resources/SoldierResource.php @@ -412,6 +412,12 @@ public static function constraintsLimit() Fieldset::make('constraints') ->label(__('Constraints limit')) ->schema([ + Group::make([ + Toggle::make('not_thursday_evening') + ->label(__('Not Thursday evening constraint')), + Toggle::make('not_sunday_morning') + ->label(__('Not Sunday morning constraint')), + ])->columns(2), Group::make([ TextInput::make('Not weekend') ->label(__('Not weekend')) diff --git a/app/Resources/TaskResource.php b/app/Resources/TaskResource.php index 5af05d3..2cd71b4 100644 --- a/app/Resources/TaskResource.php +++ b/app/Resources/TaskResource.php @@ -132,6 +132,26 @@ public static function table(Table $table): Table ]) ->space(2) ->extraAttributes(['style' => 'display: flex; flex-direction: row; flex-wrap: wrap; justify-content: space-between; align-items: baseline; margin-bottom:10px']), + Stack::make([ + TextColumn::make('in_parallel') + ->description(__('In parallel'), 'above') + ->size(TextColumnSize::Small) + ->extraAttributes(['style' => 'margin: 5px;']) + ->formatStateUsing(fn ($state) => $state ? __('Yes') : __('No')), + TextColumn::make('concurrent_tasks') + ->description(__('Concurrent tasks'), 'above') + ->size(TextColumnSize::Small) + ->extraAttributes(['style' => 'margin-left: 15px;']), + ]) + ->space(2) + ->extraAttributes([ + 'style' => 'display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: center; + align-items: baseline; + padding: 10px;', + ]), Stack::make([ TextColumn::make('recurring.type') ->description(__('Recurring type'), 'above') @@ -391,6 +411,16 @@ public static function additionalDetails(): array ->label(__('Is weekend')), Toggle::make('is_night') ->label(__('Is night')), + Toggle::make('in_parallel') + ->live() + ->label(__('In parallel')), + Select::make('concurrent_tasks') + ->label(__('Concurrent tasks')) + ->multiple() + ->placeholder(fn () => Task::count() > 0 ? __('Select concurrent tasks') : __('No tasks')) + ->options(Task::all()->pluck('type', 'type')) + ->visible(fn (Get $get) => $get('in_parallel')) + ->required(), ]; } @@ -452,6 +482,7 @@ protected static function taskDetails(Get $get) $task->type = $get('type'); $task->is_night = $get('is_night'); $task->is_weekend = $get('is_weekend'); + $task->in_parallel = $get('in_parallel'); $shift = new Shift; $shift->id = null; $shift->task = $task; diff --git a/app/Services/Algorithm.php b/app/Services/Algorithm.php index afd51ef..fb4d8e2 100644 --- a/app/Services/Algorithm.php +++ b/app/Services/Algorithm.php @@ -23,7 +23,8 @@ protected function getShiftWithTasks() ->filter(function (Shift $shift) { $range = new Range($shift->start_date, $shift->end_date); - return $range->isSameMonth(new Range(max($this->date->copy()->startOfMonth(), Carbon::tomorrow()), $this->date->copy()->endOfMonth())); + return $range->isSameMonth(new Range(max($this->date->copy()->startOfMonth(), Carbon::tomorrow()), $this->date->copy()->endOfMonth())) + && ! $shift->task->in_parallel; }) ->map(fn (Shift $shift): ShiftService => Helpers::buildShift($shift)); } @@ -36,7 +37,7 @@ protected function getSoldiersDetails() ->map(function (Soldier $soldier) { $constraints = Helpers::buildConstraints($soldier->constraints, new Range($this->date->copy()->startOfMonth(), $this->date->copy()->endOfMonth())); - $shifts = $this->getSoldiersShifts($soldier->id); + $shifts = $this->getSoldiersShifts($soldier->id, false); $shifts->push(...Helpers::addShiftsSpaces($shifts)); @@ -48,9 +49,9 @@ protected function getSoldiersDetails() ->toArray(); } - protected function getSoldiersShifts($soldierId) + protected function getSoldiersShifts($soldierId, $inParallel) { - return Helpers::getSoldiersShifts($soldierId, new Range($this->date->copy()->startOfMonth(), $this->date->copy()->endOfMonth())); + return Helpers::getSoldiersShifts($soldierId, new Range($this->date->copy()->startOfMonth(), $this->date->copy()->endOfMonth()), $inParallel); } public function run() @@ -59,5 +60,7 @@ public function run() $soldiers = $this->getSoldiersDetails(); $scheduleAlgorithm = new Schedule($shifts, $soldiers); $scheduleAlgorithm->schedule(); + $concurrentTasks = new ConcurrentTasks($this->date); + $concurrentTasks->run(); } } diff --git a/app/Services/ChangeAssignment.php b/app/Services/ChangeAssignment.php index e749ea7..39bcf85 100644 --- a/app/Services/ChangeAssignment.php +++ b/app/Services/ChangeAssignment.php @@ -5,7 +5,6 @@ use App\Models\Shift; use App\Models\Soldier; use App\Services\Constraint as ConstraintService; -use App\Services\Shift as ShiftService; use App\Services\Soldier as SoldierService; class ChangeAssignment @@ -18,17 +17,19 @@ class ChangeAssignment public function __construct($shift) { - $this->shift = $shift; + $this->shift = Helpers::buildShift($shift); $this->soldier = $this->buildSoldier(); } protected function buildSoldier(): SoldierService { - $soldier = Soldier::find($this->shift->soldier_id); + $soldier = Soldier::find(Shift::find($this->shift->id)->soldier_id); $constraints = $this->getConstraints($soldier); - $shifts = $this->getSoldiersShifts($soldier->id); + $shifts = $this->getSoldiersShifts($soldier->id, false); + $shifts->push(...Helpers::addShiftsSpaces($shifts)); + $concurrentsShifts = $this->getSoldiersShifts($soldier->id, true); - return Helpers::buildSoldier($soldier, $constraints, $shifts, []); + return Helpers::buildSoldier($soldier, $constraints, $shifts, [], $concurrentsShifts); } public function getMatchingSoldiers() @@ -37,17 +38,22 @@ public function getMatchingSoldiers() ->get() ->map(function ($soldier) { $constraints = $this->getConstraints($soldier); - $soldierShifts = $this->getSoldiersShifts($soldier->id); + $soldierShifts = $this->getSoldiersShifts($soldier->id, false); + $soldierShifts->push(...Helpers::addShiftsSpaces($soldierShifts)); + $concurrentsShifts = $this->getSoldiersShifts($soldier->id, true); - return Helpers::buildSoldier($soldier, $constraints, $soldierShifts, []); + return Helpers::buildSoldier($soldier, $constraints, $soldierShifts, [], $concurrentsShifts); }) ->filter(function (SoldierService $soldier) { - return $soldier->isQualified($this->shift->task->type) - && ! $this->isConflictWithConstraints($soldier, new Range($this->shift->start_date, $this->shift->end_date)) - && ! $this->isConflictWithShifts($soldier, new Range($this->shift->start_date, $this->shift->end_date)); + return $soldier->isQualified($this->shift->taskType) + && $soldier->isAvailableBySpaces($this->shift->getShiftSpaces($soldier->shifts)) + && ! $this->isConflictWithConstraints($soldier, $this->shift->range) + && $soldier->isAvailableByShifts($this->shift, Shift::find($this->shift->id)->task->in_parallel); }) ->mapWithKeys(function (SoldierService $soldier) { - return [$soldier->id => Soldier::find($soldier->id)->user->displayName]; + return ! $soldier->isAvailableByConcurrentsShifts($this->shift) ? + [$soldier->id => Soldier::find($soldier->id)->user->displayName.' 📌'] + : [$soldier->id => Soldier::find($soldier->id)->user->displayName]; }) ->toArray(); } @@ -59,35 +65,41 @@ public function getMatchingShifts() ->get() ->filter(function (Shift $shift) { $range = new Range($shift->start_date, $shift->end_date); + $shift = Helpers::buildShift($shift); return ! $range->isPass() - && $range->isSameMonth(new Range($this->shift->start_date->copy()->startOfMonth(), $this->shift->end_date->copy()->endOfMonth())) - && $this->soldier->isQualified($shift->task->type) + && $range->isSameMonth(new Range($this->shift->range->start->copy()->startOfMonth(), $this->shift->range->end->copy()->endOfMonth())) + && $this->soldier->isQualified($shift->taskType) + && $this->soldier->isAvailableBySpaces($this->shift->getShiftSpaces($this->soldier->shifts)) && ! $this->isConflictWithConstraints($this->soldier, $range) - && ! $this->isConflictWithShifts($this->soldier, $range); + && $this->soldier->isAvailableByShifts($shift, Shift::find($shift->id)->task->in_parallel); }) ->groupBy('soldier_id') ->filter(function ($shifts, $soldier_id) { $soldierDetails = Soldier::find($soldier_id); $constraints = $this->getConstraints($soldierDetails); - $soldierShifts = $this->getSoldiersShifts($soldierDetails->id); - $soldier = Helpers::buildSoldier($soldierDetails, $constraints, $soldierShifts, []); + $soldierShifts = $this->getSoldiersShifts($soldierDetails->id, false); + $soldierShifts->push(...Helpers::addShiftsSpaces($soldierShifts)); + $concurrentsShifts = $this->getSoldiersShifts($soldierDetails->id, true); - return $soldier->isQualified($this->shift->task->type) - && ! $this->isConflictWithConstraints($soldier, new Range($this->shift->start_date, $this->shift->end_date)) - && ! $this->isConflictWithShifts($soldier, new Range($this->shift->start_date, $this->shift->end_date)); + $soldier = Helpers::buildSoldier($soldierDetails, $constraints, $soldierShifts, [], $concurrentsShifts); + + return $soldier->isQualified($this->shift->taskType) + && $soldier->isAvailableBySpaces($this->shift->getShiftSpaces($soldier->shifts)) + && ! $this->isConflictWithConstraints($soldier, $this->shift->range) + && $soldier->isAvailableByShifts($this->shift, Shift::find($this->shift->id)->task->in_parallel); }); } protected function getConstraints(Soldier $soldier) { - return ! $soldier->is_reservist ? Helpers::getConstraintBy($soldier->id, new Range($this->shift->start_date->copy()->startOfMonth(), $this->shift->end_date->copy()->endOfMonth())) : collect([]); + return ! $soldier->is_reservist ? Helpers::getConstraintBy($soldier->id, new Range($this->shift->range->start->copy()->startOfMonth(), $this->shift->range->end->copy()->endOfMonth())) : collect([]); } - protected function getSoldiersShifts($soldierId) + protected function getSoldiersShifts($soldierId, $inParallel) { - return Helpers::getSoldiersShifts($soldierId, new Range($this->shift->start_date->copy()->startOfMonth(), $this->shift->end_date->copy()->endOfMonth())); + return Helpers::getSoldiersShifts($soldierId, new Range($this->shift->range->start->copy()->startOfMonth(), $this->shift->range->end->copy()->endOfMonth()), $inParallel); } protected function isConflictWithConstraints($soldier, $range): bool @@ -97,16 +109,9 @@ protected function isConflictWithConstraints($soldier, $range): bool }); } - protected function isConflictWithShifts($soldier, $range): bool - { - return $soldier->shifts->contains(function (ShiftService $shift) use ($range): bool { - return $shift->range->isConflict($range); - }); - } - public function exchange($shift) { + Shift::where('id', $shift->id)->update(['soldier_id' => Shift::find($this->shift->id)->soldier_id]); Shift::where('id', $this->shift->id)->update(['soldier_id' => $shift->soldier_id]); - Shift::where('id', $shift->id)->update(['soldier_id' => $this->shift->soldier_id]); } } diff --git a/app/Services/ConcurrentTasks.php b/app/Services/ConcurrentTasks.php new file mode 100644 index 0000000..b59ab24 --- /dev/null +++ b/app/Services/ConcurrentTasks.php @@ -0,0 +1,154 @@ +date = $date ? Carbon::parse($date) : now()->addMonth(); + $this->shiftsData = collect([]); + $this->assignments = collect([]); + } + + public function run() + { + $this->shifts = $this->getShiftsWithTasks(); + $this->soldiers = $this->getSoldiersDetails(); + $this->initShiftsData(); + $this->assignShifts(); + Helpers::updateShiftTable($this->assignments); + } + + protected function getShiftsWithTasks() + { + return Shift::whereNull('soldier_id') + ->get() + ->filter(function (Shift $shift) { + $range = new Range($shift->start_date, $shift->end_date); + + return $range->isSameMonth(new Range(max($this->date->copy()->startOfMonth(), Carbon::tomorrow()), $this->date->copy()->endOfMonth())) + && $shift->task->in_parallel; + }) + ->map(fn (Shift $shift): ShiftService => Helpers::buildShift($shift)); + } + + protected function getSoldiersDetails() + { + return Soldier::with('constraints') + ->where('is_reservist', false) + ->get() + ->map(function (Soldier $soldier) { + $constraints = Helpers::buildConstraints($soldier->constraints, new Range($this->date->copy()->startOfMonth(), $this->date->copy()->endOfMonth())); + + $shifts = $this->getSoldiersShifts($soldier->id, false); + + $concurrentsShifts = $this->getSoldiersShifts($soldier->id, true); + + $shifts->push(...Helpers::addShiftsSpaces($shifts)); + + return Helpers::buildSoldier($soldier, $constraints, $shifts, [], $concurrentsShifts); + }) + ->shuffle(); + } + + protected function getSoldiersShifts($soldierId, $inParallel) + { + return Helpers::getSoldiersShifts($soldierId, new Range($this->date->copy()->startOfMonth(), $this->date->copy()->endOfMonth()), $inParallel); + } + + protected function initShiftsData(): void + { + $groupedShifts = collect($this->shifts)->groupBy('taskType'); + $groupedShifts->each(function ($shifts, $taskType) { + $this->addShiftsDataByTask($taskType, collect($shifts)); + }); + } + + protected function addShiftsDataByTask(string $taskType, $shifts): void + { + $soldiers = collect($this->soldiers)->filter(function (SoldierService $soldier) use ($taskType): bool { + return $soldier->isQualified($taskType); + }); + $shifts->map(fn ($shift) => $this->addShiftData($shift, $soldiers)); + } + + protected function addShiftData(ShiftService $shift, $soldiers) + { + $potentialSoldiers = $this->getPotentialSoldiers($soldiers, $shift); + $shiftData = new ShiftData( + $shift, + $potentialSoldiers, + 0 + ); + $this->shiftsData->push($shiftData); + } + + protected function getPotentialSoldiers($soldiers, ShiftService $shift) + { + $potentialSoldiers = $soldiers + ->filter(function (SoldierService $soldier) use ($shift) { + return $soldier->isAvailableByConstraints($shift->range) === Availability::YES + && $soldier->isAvailableByConcurrentsShifts($shift) + && $this->isAvailableByShiftsAndSpaces($soldier->shifts, $shift); + }); + + return $potentialSoldiers; + } + + protected function isAvailableByShiftsAndSpaces($soldierShifts, ShiftService $shift): bool + { + $tasksInParallel = Task::find(Shift::find($shift->id)->task_id)->concurrent_tasks; + + return ! $soldierShifts->contains(function (ShiftService $soldierShift) use ($shift, $tasksInParallel): bool { + return $soldierShift->range->isConflict($shift->range) && ! collect($tasksInParallel)->contains($soldierShift->taskType); + }); + } + + protected function assignShifts() + { + collect($this->shiftsData)->map(function (ShiftData $shiftData) { + $this->assignShift($shiftData); + }); + } + + protected function assignShift(ShiftData $shiftData) + { + foreach ($shiftData->potentialSoldiers as $potentialSoldier) { + $success = $this->tryAssignShift($potentialSoldier, $shiftData->shift); + if ($success) { + return; + } + } + } + + protected function tryAssignShift(SoldierService $soldier, ShiftService $shift) + { + if ($soldier->isAvailableByConcurrentsShifts($shift)) { + $soldier->concurrentsShifts->push($shift); + $this->assignments->push(new Assignment($shift->id, $soldier->id)); + + return true; + } + + return false; + } +} diff --git a/app/Services/FixedConstraints.php b/app/Services/FixedConstraints.php new file mode 100644 index 0000000..a032d6a --- /dev/null +++ b/app/Services/FixedConstraints.php @@ -0,0 +1,61 @@ +orWhere('not_sunday_morning', true)->get(); + $soldiers->map(function ($soldier) { + if ($soldier->not_thursday_evening) { + $this->getDatesOfDaysInMonth(ConstraintType::NOT_THURSDAY_EVENING->value, $soldier->id); + } + if ($soldier->not_sunday_morning) { + $this->getDatesOfDaysInMonth(ConstraintType::NOT_SUNDAY_MORNING->value, $soldier->id); + } + }); + } + + protected function getDatesOfDaysInMonth($constraintType, $soldierId) + { + $dates = $this->createPeriod(); + collect($dates)->filter(function ($date) use ($constraintType) { + return Carbon::parse($date)->dayOfWeek === ($constraintType === 'Not Thursday evening' ? Carbon::THURSDAY : Carbon::SUNDAY); + })->each(function ($date) use (&$soldierId, &$constraintType): void { + $dates_of_constaints = $this->setTimeToDate($date, $constraintType); + $this->createConstraint($constraintType, $soldierId, $dates_of_constaints[0], $dates_of_constaints[1]); + }); + } + + protected function setTimeToDate($date, $constraintType) + { + return match ($constraintType) { + 'Not Thursday evening' => [$date->setTime(16, 30, 0)->toDateTimeString(), $date->setTime(17, 30, 0)->toDateTimeString()], + 'Not Sunday morning' => [$date->setTime(8, 30, 0)->toDateTimeString(), $date->setTime(9, 30, 0)->toDateTimeString()] + }; + } + + protected function createConstraint($constraintType, $soldierId, $startDate, $endDate) + { + $constraint = new Constraint; + $constraint->soldier_id = $soldierId; + $constraint->constraint_type = $constraintType; + $constraint->start_date = $startDate; + $constraint->end_date = $endDate; + $constraint->save(); + } + + protected function createPeriod() + { + $month = Carbon::now()->addMonth(); + + return CarbonPeriod::between(max($month->copy()->startOfMonth(), Carbon::tomorrow()), $month->copy()->endOfMonth()); + } +} diff --git a/app/Services/Helpers.php b/app/Services/Helpers.php index b7b6c7a..a21ae2c 100644 --- a/app/Services/Helpers.php +++ b/app/Services/Helpers.php @@ -25,7 +25,7 @@ public static function buildShift(Shift $shift): ShiftService ); } - public static function buildSoldier($soldier, $constraints, $shifts, array $capacityHold): SoldierService + public static function buildSoldier($soldier, $constraints, $shifts, array $capacityHold, $concurrentsShifts = []): SoldierService { return new SoldierService( $soldier->id, @@ -35,7 +35,8 @@ public static function buildSoldier($soldier, $constraints, $shifts, array $capa new MaxData($soldier->max_weekends, $capacityHold['sumWeekends'] ?? 0), $soldier->qualifications, $constraints, - $shifts + $shifts, + $concurrentsShifts ); } @@ -87,22 +88,22 @@ public static function addShiftsSpaces($shifts) collect($shifts)->map(function (ShiftService $shift) use ($shifts, &$allSpaces) { $spaces = $shift->isWeekend || $shift->isNight ? $shift->getShiftSpaces($shifts) : null; if (! empty($spaces)) { - collect($spaces)->map(fn (Range $space) => $allSpaces->push(new ShiftService(0, 'space', $space->start, $space->end, 0, false, false))); + collect($spaces)->map(fn (Range $space) => $allSpaces->push(new ShiftService(0, '', $space->start, $space->end, 0, false, false))); } }); return $allSpaces; } - public static function getSoldiersShifts($soldierId, $newRange) + public static function getSoldiersShifts($soldierId, $newRange, $inParallel) { return Shift::where('soldier_id', $soldierId) ->get() ->filter( - function (Shift $shift) use ($newRange): bool { + function (Shift $shift) use ($newRange, $inParallel): bool { $range = new Range($shift->start_date, $shift->end_date); - return $range->isSameMonth($newRange); + return $range->isSameMonth($newRange) && $shift->task->in_parallel === $inParallel; } ) ->map(fn (Shift $shift): ShiftService => self::buildShift($shift)); @@ -115,4 +116,9 @@ public static function getConstraintBy(int $soldierId, $newRange) return self::buildConstraints($constraint, $newRange); } + + public static function updateShiftTable($assignments) + { + collect($assignments)->map(fn (Assignment $assignment) => Shift::where('id', $assignment->shiftId)->update(['soldier_id' => $assignment->soldierId])); + } } diff --git a/app/Services/ManualAssignment.php b/app/Services/ManualAssignment.php index 50de6ff..6a3ebb3 100644 --- a/app/Services/ManualAssignment.php +++ b/app/Services/ManualAssignment.php @@ -103,13 +103,15 @@ protected function getSoldiersDetails() function (User $user) { $soldier = $this->getSoldierBy($user->userable_id); $constraints = $this->getConstraints($soldier); - $soldiersShifts = $this->getSoldiersShifts($soldier->id); + $soldiersShifts = $this->getSoldiersShifts($soldier->id, false); $soldiersShifts->push(...Helpers::addShiftsSpaces($soldiersShifts)); $capacityHold = Helpers::capacityHold($soldiersShifts); - return Helpers::buildSoldier($soldier, $constraints, $soldiersShifts, $capacityHold); + $concurrentsShifts = $this->getSoldiersShifts($soldier->id, true); + + return Helpers::buildSoldier($soldier, $constraints, $soldiersShifts, $capacityHold, $concurrentsShifts); } ); } @@ -123,7 +125,7 @@ public function amIAvailable(): bool { $me = Soldier::find(auth()->user()->userable_id); $constraints = $this->getConstraints($me); - $myShifts = $this->getSoldiersShifts($me->id); + $myShifts = $this->getSoldiersShifts($me->id, false); $myShifts->push(...Helpers::addShiftsSpaces($myShifts)); @@ -134,7 +136,7 @@ public function amIAvailable(): bool return $soldier->isQualified($this->shift->taskType) && $soldier->isAvailableByMaxes($this->shift) && $soldier->isAvailableByConstraints($this->shift->range) != Availability::NO - && $soldier->isAvailableByShifts($this->shift->range) + && $soldier->isAvailableByShifts($this->shift, false) && $soldier->isAvailableBySpaces($this->shift->getShiftSpaces($soldier->shifts)); } @@ -143,9 +145,9 @@ protected function getConstraints(Soldier $soldier) return $this->soldierType != 'reserves' ? Helpers::getConstraintBy($soldier->id, new Range($this->shift->range->start->copy()->startOfMonth(), $this->shift->range->end->copy()->endOfMonth())) : collect([]); } - protected function getSoldiersShifts($soldierId) + protected function getSoldiersShifts($soldierId, $inParallel) { - return Helpers::getSoldiersShifts($soldierId, new Range($this->shift->range->start->copy()->startOfMonth(), $this->shift->range->end->copy()->endOfMonth())); + return Helpers::getSoldiersShifts($soldierId, new Range($this->shift->range->start->copy()->startOfMonth(), $this->shift->range->end->copy()->endOfMonth()), $inParallel); } protected function getAvailableSoldiers() @@ -154,13 +156,23 @@ protected function getAvailableSoldiers() fn (SoldierService $soldier) => $soldier->isQualified($this->shift->taskType) && $soldier->isAvailableByMaxes($this->shift) && $soldier->isAvailableByConstraints($this->shift->range) != Availability::NO - && $soldier->isAvailableByShifts($this->shift->range) + && $soldier->isAvailableByShifts($this->shift, Shift::find($this->shift->id)->task?->in_parallel) && $soldier->isAvailableBySpaces($this->shift->getShiftSpaces($soldier->shifts)) ); + $soldiersWithConcurrentsShifts = collect([]); + $availableSoldiers->map(function (SoldierService $soldier) use ($soldiersWithConcurrentsShifts) { + if (! $soldier->isAvailableByConcurrentsShifts($this->shift)) { + $soldiersWithConcurrentsShifts->push($soldier->id); + } + }); + return $availableSoldiers->mapWithKeys( - function (SoldierService $soldier) { + function (SoldierService $soldier) use ($soldiersWithConcurrentsShifts) { $user = User::where('userable_id', '=', $soldier->id)->first(); + if ($soldiersWithConcurrentsShifts->contains($soldier->id)) { + return [$user->userable_id => $user->displayName.' 📌']; + } return [$user->userable_id => $user->displayName]; } diff --git a/app/Services/Range.php b/app/Services/Range.php index f169abb..90b008e 100644 --- a/app/Services/Range.php +++ b/app/Services/Range.php @@ -26,41 +26,6 @@ public function isConflict(Range $other): bool return $this->start->isBefore($other->end) && $other->start->isBefore($this->end); } - public function isWeekend(): bool - { - return ( - ($this->start->dayOfWeek == 4 && $this->start->hour >= 20) - || $this->start->dayOfWeek == 5 - || $this->start->dayOfWeek == 6 - || ($this->start->dayOfWeek == 0 && $this->start->hour < 8) - ) - || - ( - ($this->end->dayOfWeek == 4 && $this->end->hour >= 20) - || $this->end->dayOfWeek == 5 - || $this->end->dayOfWeek == 6 - || ($this->end->dayOfWeek == 0 && $this->end->hour < 8) - ) - || - $this->start->diffInDays($this->end) > 5; - } - - public function isNight(): bool - { - return $this->isWeekend() ? - false : - ( - ($this->start->day == $this->end->day) - && ( - ($this->start->hour >= 00 && $this->start->hour < 8) - || $this->start->hour >= 20 - || $this->end->hour > 20 - ) - ) - || - $this->start->day < $this->end->day; - } - public function isSameMonth(Range $other): bool { return $this->isConflict($other); @@ -97,7 +62,7 @@ public function getNightSpaces() public function getDayBeforeNight(): Range { - return new Range($this->start->copy()->subDay()->setTime(20, 0, 0), $this->start); + return new Range($this->start->copy()->subDay()->setTime(00, 0, 0), $this->start); } public function getDayAfterNight(): Range diff --git a/app/Services/Schedule.php b/app/Services/Schedule.php index 645558a..6902399 100644 --- a/app/Services/Schedule.php +++ b/app/Services/Schedule.php @@ -3,7 +3,6 @@ namespace App\Services; use App\Enums\Availability; -use App\Models\Shift as ShiftModel; class Schedule { @@ -17,8 +16,6 @@ class Schedule public $assignments; - public $unAssignments; - public $SHIFT_DUMBBELLS; public $SOLDIER_DUMBBELLS; @@ -30,7 +27,6 @@ public function __construct($shifts, $soldiers) $this->shiftsData = collect([]); $this->soldiersDict = collect([]); $this->assignments = collect([]); - $this->unAssignments = collect([]); $this->SHIFT_DUMBBELLS = collect([ 'POINTS_RATIO' => 0.29, 'SHIFTS_RATIO' => 0.39, @@ -54,7 +50,7 @@ public function schedule(): void $this->initShiftsData(); $this->initSoldiersData(); $this->assignShifts(); - $this->updateDB(); + Helpers::updateShiftTable($this->assignments); } protected function initShiftsData(): void @@ -200,12 +196,7 @@ protected function initSoldiersData(): void protected function assignShifts() { $sortedShifts = $this->getSortedShiftsList(); - collect($sortedShifts)->map(function (ShiftData $shift) { - $success = $this->assignShift($shift); - if (! $success) { - $this->unAssignments->push($shift->shift); - } - }); + collect($sortedShifts)->map(fn (ShiftData $shift) => $this->assignShift($shift)); } protected function getSortedShiftsList() @@ -213,17 +204,15 @@ protected function getSortedShiftsList() return $this->shiftsData->sortByDesc('weight'); } - protected function assignShift(ShiftData $shiftData): bool + protected function assignShift(ShiftData $shiftData) { $soldiers = $this->getPotentialSoldiersData($shiftData); foreach ($soldiers as $soldier) { $success = $this->tryAssign($soldier, $shiftData->shift); if ($success) { - return true; + return; } } - - return false; } protected function getPotentialSoldiersData(ShiftData $shiftData) @@ -290,9 +279,4 @@ protected function tryAssign(Soldier $soldier, Shift $shift): bool return false; } - - protected function updateDB() - { - collect($this->assignments)->map(fn (Assignment $assignment) => ShiftModel::where('id', $assignment->shiftId)->update(['soldier_id' => $assignment->soldierId])); - } } diff --git a/app/Services/Soldier.php b/app/Services/Soldier.php index a7a5843..7beb179 100644 --- a/app/Services/Soldier.php +++ b/app/Services/Soldier.php @@ -4,6 +4,8 @@ use App\Enums\Availability; use App\Enums\Priority; +use App\Models\Shift as ShiftModel; +use App\Models\Task; class Soldier { @@ -23,7 +25,9 @@ class Soldier public $shifts; - public function __construct($id, MaxData $maxPoints, MaxData $maxShifts, MaxData $maxNights, MaxData $maxWeekends, $qualifications, $constraints, $shifts = []) + public $concurrentsShifts; + + public function __construct($id, MaxData $maxPoints, MaxData $maxShifts, MaxData $maxNights, MaxData $maxWeekends, $qualifications, $constraints, $shifts = [], $concurrentsShifts = []) { $this->id = $id; $this->pointsMaxData = $maxPoints; @@ -33,6 +37,7 @@ public function __construct($id, MaxData $maxPoints, MaxData $maxShifts, MaxData $this->qualifications = collect($qualifications); $this->constraints = collect($constraints); $this->shifts = collect($shifts); + $this->concurrentsShifts = collect($concurrentsShifts); } public function isQualified(string $taskType): bool @@ -43,7 +48,7 @@ public function isQualified(string $taskType): bool public function isAbleTake(Shift $shift, $spaces): bool { return $this->isAvailableByMaxes($shift) - && $this->isAvailableByShifts($shift->range) + && $this->isAvailableByShifts($shift, false) && $this->isAvailableBySpaces($spaces); } @@ -57,11 +62,17 @@ public function isAvailableByMaxes(Shift $shift): bool && $this->shiftsMaxData->remaining() >= 1; } - public function isAvailableByShifts(Range $range): bool + public function isAvailableByShifts(Shift $shift, bool $inParallel): bool { - return ! $this->shifts->contains(function ($shift) use ($range) { - return $shift->range->isConflict($range); - }); + return $inParallel ? + ! $this->shifts->contains(function (Shift $soldierShift) use ($shift): bool { + $tasksInParallel = Task::find(ShiftModel::find($shift->id)->task_id)->concurrent_tasks; + + return $soldierShift->range->isConflict($shift->range) && ! collect($tasksInParallel)->contains($shift->taskType); + }) : + ! $this->shifts->contains(function (Shift $soldierShift) use ($shift) { + return $soldierShift->range->isConflict($shift->range); + }); } public function isAvailableBySpaces($spaces): bool @@ -77,6 +88,15 @@ public function isAvailableBySpaces($spaces): bool return true; } + public function isAvailableByConcurrentsShifts(Shift $shift) + { + return ! $this->concurrentsShifts->contains(function (Shift $concurrentsShift) use ($shift): bool { + $tasksInParallel = Task::find(ShiftModel::find($concurrentsShift->id)->task_id)->concurrent_tasks; + + return $concurrentsShift->range->isConflict($shift->range) && ! collect($tasksInParallel)->contains($shift->taskType); + }); + } + public function isAvailableByConstraints(Range $range): Availability { $conflicts = $this->constraints->filter(function (Constraint $constraint) use ($range) { @@ -113,6 +133,6 @@ public function assign(Shift $shift, $spaces): void protected function addSpaces($spaces) { - collect($spaces)->map(fn ($space) => $this->shifts->push(new Shift(0, 'space', $space->start, $space->end, 0, false, false))); + collect($spaces)->map(fn ($space) => $this->shifts->push(new Shift(0, '', $space->start, $space->end, 0, false, false))); } } diff --git a/bootstrap/app.php b/bootstrap/app.php index b9433c1..b2eb44b 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -2,7 +2,9 @@ use App\Models\Soldier; use App\Services\Algorithm; +use App\Services\ConcurrentTasks; use App\Services\DailyShiftNotification; +use App\Services\FixedConstraints; use App\Services\RecurringEvents; use App\Services\ShiftAssignmentNotification; use Illuminate\Console\Scheduling\Schedule; @@ -16,8 +18,10 @@ health: '/up', ) ->withSchedule(function (Schedule $schedule) { + $schedule->call(fn () => app(FixedConstraints::class)->createFixedConstraints())->monthlyOn(20, '06:00'); $schedule->call(fn () => app(RecurringEvents::class)->recurringTask())->monthlyOn(20, '08:00'); $schedule->call(fn () => app(Algorithm::class)->run())->monthlyOn(20, '10:00'); + $schedule->call(fn () => app(ConcurrentTasks::class)->run())->monthlyOn(20, '12:00'); $schedule->call(fn () => app(ShiftAssignmentNotification::class)->sendNotification())->monthlyOn(1, '08:00'); $schedule->call(fn () => app(DailyShiftNotification::class)->beforeShift())->dailyAt('06:00'); $schedule->call(fn () => app(Soldier::class)->updateReserveDays())->monthlyOn(1, '00:00'); diff --git a/database/factories/TaskFactory.php b/database/factories/TaskFactory.php index 6acb30c..6836bfa 100644 --- a/database/factories/TaskFactory.php +++ b/database/factories/TaskFactory.php @@ -18,6 +18,7 @@ public function definition(): array 'is_alert' => fake()->boolean(), 'is_weekend' => fake()->boolean(), 'is_night' => fake()->boolean(), + 'in_parallel' => fake()->boolean(), 'department_name' => fake()->name(), 'recurring' => json_encode([]), ]; diff --git a/database/migrations/2024_05_30_094012_create_soldier_table.php b/database/migrations/2024_05_30_094012_create_soldier_table.php index 3bdc9f0..dda9cd5 100644 --- a/database/migrations/2024_05_30_094012_create_soldier_table.php +++ b/database/migrations/2024_05_30_094012_create_soldier_table.php @@ -28,6 +28,8 @@ public function up(): void $table->json('reserve_dates')->nullable(); $table->json('next_reserve_dates')->nullable(); $table->json('constraints_limit')->nullable(); + $table->boolean('not_thursday_evening')->default(false); + $table->boolean('not_sunday_morning')->default(false); $table->timestamps(); }); } diff --git a/database/migrations/2024_05_30_100244_create_task_table.php b/database/migrations/2024_05_30_100244_create_task_table.php index 7177670..db05c21 100644 --- a/database/migrations/2024_05_30_100244_create_task_table.php +++ b/database/migrations/2024_05_30_100244_create_task_table.php @@ -19,6 +19,8 @@ public function up(): void $table->boolean('is_alert'); $table->boolean('is_weekend'); $table->boolean('is_night'); + $table->boolean('in_parallel')->default(false); + $table->json('concurrent_tasks')->nullable(); $table->string('department_name')->nullable(); $table->json('recurring'); $table->timestamps(); diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index b8b2beb..e376733 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -164,6 +164,7 @@ public function run(): void 'type' => 'tichnun', 'is_weekend' => false, 'is_night' => false, + 'in_parallel' => false, 'color' => '#b54b4b', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -178,6 +179,7 @@ public function run(): void 'type' => 'tichnun', 'is_weekend' => false, 'is_night' => true, + 'in_parallel' => false, 'color' => '#b54b4b', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -192,6 +194,7 @@ public function run(): void 'type' => 'tichnun', 'is_weekend' => true, 'is_night' => false, + 'in_parallel' => false, 'color' => '#b54b4b', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -206,6 +209,7 @@ public function run(): void 'type' => 'tichnun', 'is_weekend' => true, 'is_night' => false, + 'in_parallel' => false, 'color' => '#b54b4b', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -221,6 +225,7 @@ public function run(): void 'type' => 'bakara', 'is_weekend' => false, 'is_night' => false, + 'in_parallel' => false, 'color' => '#4bb5ac', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -235,6 +240,7 @@ public function run(): void 'type' => 'bakara', 'is_weekend' => false, 'is_night' => true, + 'in_parallel' => false, 'color' => '#4bb5ac', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -249,6 +255,7 @@ public function run(): void 'type' => 'bakara', 'is_weekend' => true, 'is_night' => false, + 'in_parallel' => false, 'color' => '#4bb5ac', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -264,6 +271,7 @@ public function run(): void 'type' => 'pikud', 'is_weekend' => false, 'is_night' => false, + 'in_parallel' => false, 'color' => '#4bb569', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -278,6 +286,7 @@ public function run(): void 'type' => 'pikud', 'is_weekend' => false, 'is_night' => false, + 'in_parallel' => false, 'color' => '#4bb569', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -292,6 +301,7 @@ public function run(): void 'type' => 'pikud', 'is_weekend' => true, 'is_night' => false, + 'in_parallel' => false, 'color' => '#4bb569', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -306,6 +316,7 @@ public function run(): void 'type' => 'pikud', 'is_weekend' => true, 'is_night' => false, + 'in_parallel' => false, 'color' => '#4bb569', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -320,6 +331,7 @@ public function run(): void 'type' => 'pikud', 'is_weekend' => false, 'is_night' => true, + 'in_parallel' => false, 'color' => '#4bb569', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -335,6 +347,7 @@ public function run(): void 'type' => 'minhal', 'is_weekend' => false, 'is_night' => false, + 'in_parallel' => false, 'color' => '#c5d649', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -350,6 +363,7 @@ public function run(): void 'type' => 'hatasa', 'is_weekend' => false, 'is_night' => false, + 'in_parallel' => false, 'color' => '#d649b5', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -364,6 +378,7 @@ public function run(): void 'type' => 'hatasa', 'is_weekend' => false, 'is_night' => true, + 'in_parallel' => false, 'color' => '#d649b5', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -378,6 +393,7 @@ public function run(): void 'type' => 'hatasa', 'is_weekend' => true, 'is_night' => false, + 'in_parallel' => false, 'color' => '#d649b5', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -392,6 +408,7 @@ public function run(): void 'type' => 'hatasa', 'is_weekend' => true, 'is_night' => false, + 'in_parallel' => false, 'color' => '#d649b5', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -407,6 +424,7 @@ public function run(): void 'type' => 'shmira', 'is_weekend' => false, 'is_night' => false, + 'in_parallel' => false, 'color' => '#ee8559', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -421,6 +439,7 @@ public function run(): void 'type' => 'shmira', 'is_weekend' => false, 'is_night' => true, + 'in_parallel' => false, 'color' => '#ee8559', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -435,6 +454,7 @@ public function run(): void 'type' => 'shmira', 'is_weekend' => true, 'is_night' => false, + 'in_parallel' => false, 'color' => '#ee8559', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -449,6 +469,7 @@ public function run(): void 'type' => 'shmira', 'is_weekend' => true, 'is_night' => false, + 'in_parallel' => false, 'color' => '#ee8559', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -464,6 +485,7 @@ public function run(): void 'type' => 'pianuach', 'is_weekend' => false, 'is_night' => false, + 'in_parallel' => false, 'color' => '#3574fb', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -478,6 +500,7 @@ public function run(): void 'type' => 'pianuach', 'is_weekend' => false, 'is_night' => true, + 'in_parallel' => false, 'color' => '#3574fb', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -492,6 +515,7 @@ public function run(): void 'type' => 'pianuach', 'is_weekend' => true, 'is_night' => false, + 'in_parallel' => false, 'color' => '#3574fb', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -506,6 +530,7 @@ public function run(): void 'type' => 'pianuach', 'is_weekend' => true, 'is_night' => false, + 'in_parallel' => false, 'color' => '#3574fb', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -521,6 +546,7 @@ public function run(): void 'type' => 'nivut', 'is_weekend' => false, 'is_night' => false, + 'in_parallel' => false, 'color' => '#ed8d8d8b', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -535,6 +561,7 @@ public function run(): void 'type' => 'nivut', 'is_weekend' => false, 'is_night' => true, + 'in_parallel' => false, 'color' => '#ed8d8d8b', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -549,6 +576,7 @@ public function run(): void 'type' => 'nivut', 'is_weekend' => true, 'is_night' => false, + 'in_parallel' => false, 'color' => '#ed8d8d8b', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -563,6 +591,7 @@ public function run(): void 'type' => 'nivut', 'is_weekend' => true, 'is_night' => false, + 'in_parallel' => false, 'color' => '#ed8d8d8b', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -578,6 +607,7 @@ public function run(): void 'type' => 'tazpit', 'is_weekend' => false, 'is_night' => false, + 'in_parallel' => false, 'color' => '#77ff23', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -592,6 +622,7 @@ public function run(): void 'type' => 'tazpit', 'is_weekend' => false, 'is_night' => false, + 'in_parallel' => false, 'color' => '#77ff23', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -606,6 +637,7 @@ public function run(): void 'type' => 'tazpit', 'is_weekend' => false, 'is_night' => true, + 'in_parallel' => false, 'color' => '#77ff23', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -620,6 +652,7 @@ public function run(): void 'type' => 'tazpit', 'is_weekend' => true, 'is_night' => false, + 'in_parallel' => false, 'color' => '#77ff23', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -634,6 +667,7 @@ public function run(): void 'type' => 'tazpit', 'is_weekend' => true, 'is_night' => false, + 'in_parallel' => false, 'color' => '#77ff23', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -649,6 +683,7 @@ public function run(): void 'type' => 'bdikat ziud', 'is_weekend' => false, 'is_night' => false, + 'in_parallel' => false, 'color' => '#a7b2c3', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, diff --git a/lang/he.json b/lang/he.json index 98011aa..b21834d 100644 --- a/lang/he.json +++ b/lang/he.json @@ -70,7 +70,7 @@ "Edit course": "ערוך קורס", "Course": "קורס", "Create":"צור", - "Create shifts":"צור משמרות", + "Create shifts":"צור משמרות ותורנויות", "Create soldier":"צור חייל", "Creating shifts":"יצירת משמרות", "Close":"סגור", @@ -179,6 +179,9 @@ "Not equal":"לא שווה", "Not task":"ללא משמרת", "Not Thursday evening":"חמישי ערב", + "Not Sunday morning":"ראשון בוקר", + "Not Thursday evening constraint":"אילוץ חמישי ערב", + "Not Sunday morning constraint":"אילוץ ראשון בוקר", "Not weekend":"סופ''ש", "November":"נובמבר", "October":"אוקטובר", @@ -224,7 +227,7 @@ "Shift type":"סוג המשמרת", "Shifts": "משמרות", "shifts": "משמרות", - "Shifts assignment":"שבץ משמרות", + "Shifts assignment and Parallel shifts":" שבץ משמרות ותורנויות", "A shifts assignment":"משבץ משמרות", "Soldier": "חייל", "Soldier assignment": "הקצאת חייל", @@ -292,5 +295,10 @@ "Commander deny create constraint":"שלום :name!
בקשתך להוספת האילוץ :constraintName
מ :startDate עד :endDate נדחתה!
המשך יום טוב!", "Please note! This constraint will only be approved for you after approval from the commander.":"שים לב! אילוץ זה יאושר עבורך רק לאחר אישור המפקד.", "You did not choose a commander. With your approval, you leave the department without a commander. Are you sure?":"לא נבחר מפקד. באישורך אתה יוצר צוות ללא מפקד.האם אתה בטוח?", - "Shifts Assigments":"שיבוץ משמרות" + "Shifts Assigments":"שיבוץ משמרות", + "In parallel":"תורנות", + "Concurrent tasks":"משימות במקביל", + "Select concurrent tasks":"בחר משימות", + "No tasks":"אין משימות", + "The soldier is assigned a shift during the task":"לחייל מוקצית תורנות בזמן המשמרת" } diff --git a/tests/Unit/AlgorithmServiceTest.php b/tests/Unit/AlgorithmServiceTest.php index 54261f9..fd2b1c3 100644 --- a/tests/Unit/AlgorithmServiceTest.php +++ b/tests/Unit/AlgorithmServiceTest.php @@ -10,7 +10,7 @@ $reflection = new ReflectionClass(Algorithm::class); $method = $reflection->getMethod('getShiftWithTasks'); $method->setAccessible(true); - $task = Task::factory()->create(); + $task = Task::factory()->create(['in_parallel' => false]); Shift::factory()->count(3)->create(['task_id' => $task->id]); expect($method->invoke(new Algorithm))->toBeEmpty(); }); @@ -19,7 +19,7 @@ $reflection = new ReflectionClass(Algorithm::class); $method = $reflection->getMethod('getShiftWithTasks'); $method->setAccessible(true); - $task = Task::factory()->create(); + $task = Task::factory()->create(['in_parallel' => false]); Shift::factory()->count(3)->create([ 'task_id' => $task->id, 'soldier_id' => null, diff --git a/tests/Unit/ChangeAssignmentServiceTest.php b/tests/Unit/ChangeAssignmentServiceTest.php index e5efa93..29599af 100644 --- a/tests/Unit/ChangeAssignmentServiceTest.php +++ b/tests/Unit/ChangeAssignmentServiceTest.php @@ -14,6 +14,7 @@ 'task_id' => Task::factory()->create([ 'type' => 'clean', 'is_night' => false, + 'in_parallel' => false, ])->id, 'is_weekend' => false, 'start_date' => now()->isLastOfMonth() ? now()->subDays(8) : now()->addHours(5), @@ -50,6 +51,7 @@ 'soldier_id' => $soldier5->id, 'task_id' => Task::factory()->create([ 'type' => 'clean', + 'in_parallel' => false, ])->id, 'start_date' => now()->isLastOfMonth() ? now()->subDays(9) : now()->addHours(4), 'end_date' => now()->isLastOfMonth() ? now()->subDays(6) : now()->addHours(7), @@ -82,10 +84,11 @@ 'task_id' => Task::factory()->create([ 'type' => 'clean', 'is_night' => false, + 'in_parallel' => false, ])->id, 'is_weekend' => false, - 'start_date' => now()->isLastOfMonth() ? now()->subDays(8) : now()->addHours(5), - 'end_date' => now()->isLastOfMonth() ? now()->subDays(7) : now()->addHours(6), + 'start_date' => now()->addHours(1), + 'end_date' => now()->addHours(2), ]); $shift1 = Shift::factory()->create([ 'soldier_id' => User::factory()->create([ @@ -96,9 +99,12 @@ ])->userable_id, 'task_id' => Task::factory()->create([ 'type' => 'jump', + 'is_night' => false, + 'in_parallel' => false, ])->id, - 'start_date' => now()->isLastOfMonth() ? now()->subDays(10) : now()->addHours(7), - 'end_date' => now()->isLastOfMonth() ? now()->subDays(9) : now()->addHours(8), + 'is_weekend' => false, + 'start_date' => now()->addHours(3), + 'end_date' => now()->addHours(4), ]); $shift2 = Shift::factory()->create([ 'soldier_id' => User::factory()->create([ @@ -109,9 +115,12 @@ ])->userable_id, 'task_id' => Task::factory()->create([ 'type' => 'run', + 'is_night' => false, + 'in_parallel' => false, ])->id, - 'start_date' => now()->isLastOfMonth() ? now()->subDays(3) : now()->addHours(1), - 'end_date' => now()->isLastOfMonth() ? now()->subDays(2) : now()->addHours(2), + 'is_weekend' => false, + 'start_date' => now()->addHours(3), + 'end_date' => now()->addHours(4), ]); $shift3 = Shift::factory()->create([ 'soldier_id' => User::factory()->create([ @@ -122,9 +131,12 @@ ])->userable_id, 'task_id' => Task::factory()->create([ 'type' => 'run', + 'is_night' => false, + 'in_parallel' => false, ])->id, - 'start_date' => now()->isLastOfMonth() ? now()->subDays(9) : now()->addHours(4), - 'end_date' => now()->isLastOfMonth() ? now()->subDays(6) : now()->addHours(7), + 'is_weekend' => false, + 'start_date' => now()->addHours(1), + 'end_date' => now()->addHours(2), ]); $shift4 = Shift::factory()->create([ 'soldier_id' => User::factory()->create([ @@ -135,9 +147,12 @@ ])->userable_id, 'task_id' => Task::factory()->create([ 'type' => 'jump', + 'is_night' => false, + 'in_parallel' => false, ])->id, - 'start_date' => now()->isLastOfMonth() ? now()->subDays(10) : now()->addHours(2), - 'end_date' => now()->isLastOfMonth() ? now()->subDays(9) : now()->addHours(3), + 'is_weekend' => false, + 'start_date' => now()->addHours(3), + 'end_date' => now()->addHours(4), ]); $shift5 = Shift::factory()->create([ 'soldier_id' => User::factory()->create([ @@ -148,9 +163,12 @@ ])->userable_id, 'task_id' => Task::factory()->create([ 'type' => 'clean', + 'is_night' => false, + 'in_parallel' => false, ])->id, - 'start_date' => now()->isLastOfMonth() ? now()->subDays(9) : now()->addHours(4), - 'end_date' => now()->isLastOfMonth() ? now()->subDays(6) : now()->addHours(7), + 'is_weekend' => false, + 'start_date' => now()->addHours(1), + 'end_date' => now()->addHours(2), ]); $shift6 = Shift::factory()->create([ 'soldier_id' => User::factory()->create([ @@ -161,15 +179,18 @@ ])->userable_id, 'task_id' => Task::factory()->create([ 'type' => 'clean', + 'is_night' => false, + 'in_parallel' => false, ])->id, - 'start_date' => now()->isLastOfMonth() ? now()->subDays(2) : now()->addHours(1), - 'end_date' => now()->isLastOfMonth() ? now()->subDays(1) : now()->addHours(2), + 'is_weekend' => false, + 'start_date' => now()->addHours(3), + 'end_date' => now()->addHours(4), ]); Constraint::factory()->create([ 'soldier_id' => $shift6->soldier_id, 'constraint_type' => ConstraintType::NOT_TASK->value, - 'start_date' => now()->isLastOfMonth() ? now()->subDays(9) : now()->addHours(4), - 'end_date' => now()->isLastOfMonth() ? now()->subDays(6) : now()->addHours(7), + 'start_date' => now()->addHours(1), + 'end_date' => now()->addHours(2), ]); $expectedShifts = collect([$shift1->id, $shift4->id]); $changeAssignment = new ChangeAssignment($shiftForExchange); diff --git a/tests/Unit/ChartsTest.php b/tests/Unit/ChartsTest.php index 08b769b..314caf0 100644 --- a/tests/Unit/ChartsTest.php +++ b/tests/Unit/ChartsTest.php @@ -26,6 +26,7 @@ 'end_date' => now()->addMonth()->addHour(), 'task_id' => Task::factory()->create([ 'type' => 'run', + 'in_parallel' => false, ])->id, ]); @@ -48,6 +49,7 @@ 'end_date' => now()->addMonth()->addHours(2), 'task_id' => Task::factory()->create([ 'type' => 'run', + 'in_parallel' => false, ])->id, ]); diff --git a/tests/Unit/FixedConstraintsTest.php b/tests/Unit/FixedConstraintsTest.php new file mode 100644 index 0000000..74224d6 --- /dev/null +++ b/tests/Unit/FixedConstraintsTest.php @@ -0,0 +1,71 @@ +create([ + 'course' => 1, + 'max_shifts' => 3, + 'max_nights' => 3, + 'max_weekends' => 3, + 'capacity' => 3, + 'qualifications' => ['run'], + 'not_thursday_evening' => true, + 'not_sunday_morning' => true, + ]); + $soldier1 = User::factory()->create([ + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => (['Clean']), + 'is_reservist' => false, + 'capacity' => 8, + 'max_shifts' => 8, + 'max_nights' => 8, + 'max_weekends' => 8, + 'not_thursday_evening' => true, + 'not_sunday_morning' => true, + ]), + ]); + $result = new FixedConstraints; + $result->createFixedConstraints(); + $this->assertDatabaseHas('constraints', [ + 'soldier_id' => $soldier1->id, + 'constraint_type' => 'Not Thursday evening', + ]); + $this->assertDatabaseHas('constraints', [ + 'soldier_id' => $soldier1->id, + 'constraint_type' => 'Not Sunday morning', + ]); +}); + +it('should create thursday_evening constraint', function () { + $soldier1 = Soldier::factory()->create([ + 'course' => 1, + 'max_shifts' => 3, + 'max_nights' => 3, + 'max_weekends' => 3, + 'capacity' => 3, + 'qualifications' => ['run'], + 'not_thursday_evening' => true, + 'not_sunday_morning' => false, + ]); + $soldier1 = User::factory()->create([ + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => (['Clean']), + 'is_reservist' => false, + 'capacity' => 8, + 'max_shifts' => 8, + 'max_nights' => 8, + 'max_weekends' => 8, + 'not_thursday_evening' => true, + 'not_sunday_morning' => true, + ]), + ]); + $result = new FixedConstraints; + $result->createFixedConstraints(); + $this->assertDatabaseHas('constraints', [ + 'soldier_id' => $soldier1->id, + 'constraint_type' => 'Not Thursday evening', + ]); +}); diff --git a/tests/Unit/HelpersServiceTest.php b/tests/Unit/HelpersServiceTest.php index 5dfca49..6e9d15a 100644 --- a/tests/Unit/HelpersServiceTest.php +++ b/tests/Unit/HelpersServiceTest.php @@ -5,6 +5,7 @@ use App\Models\Shift; use App\Models\Soldier; use App\Models\Task; +use App\Services\Assignment; use App\Services\Helpers; use App\Services\MaxData; use App\Services\Range; @@ -73,7 +74,7 @@ }); it('should return shifts spaces', function () { - $shifts = Shift::factory()->count(3)->create(['is_weekend' => false, 'task_id' => Task::factory()->create(['is_night' => true])->id]); + $shifts = Shift::factory()->count(3)->create(['is_weekend' => false, 'task_id' => Task::factory()->create(['is_night' => true, 'in_parallel' => false])->id]); $shifts = $shifts->map(fn ($shift) => Helpers::buildShift($shift)); expect(Helpers::addShiftsSpaces($shifts))->toHaveCount(6); }); @@ -82,10 +83,13 @@ $soldier = Soldier::factory()->create(); $shifts = Shift::factory()->count(3)->create([ 'soldier_id' => $soldier->id, + 'task_id' => Task::factory()->create([ + 'in_parallel' => false, + ])->id, 'start_date' => now()->isLastOfMonth() ? now()->subDays(6)->startOfSecond() : now()->addHours(7)->startOfSecond(), 'end_date' => now()->isLastOfMonth() ? now()->subDays(5)->startOfSecond() : now()->addHours(8)->startOfSecond()]); $result = $shifts->map(fn ($shift) => Helpers::buildShift($shift)); - expect(Helpers::getSoldiersShifts($soldier->id, new Range(now()->startOfMonth(), now()->endOfMonth())))->toEqual($result); + expect(Helpers::getSoldiersShifts($soldier->id, new Range(now()->startOfMonth(), now()->endOfMonth()), false))->toEqual($result); }); it('should return soldiers constraints', function () { @@ -99,3 +103,14 @@ $range = new Range(now()->startOfMonth(), now()->endOfMonth()); expect(Helpers::getConstraintBy($soldier->id, $range))->toHaveCount(4); }); + +it('should update shifts table', function () { + $soldier = Soldier::factory()->create(); + $shift = Shift::factory()->create(['soldier_id' => 22]); + $assignments = collect([new Assignment($shift->id, $soldier->id)]); + Helpers::updateShiftTable($assignments); + $this->assertDatabaseHas(Shift::class, [ + 'id' => $shift->id, + 'soldier_id' => $soldier->id, + ]); +}); diff --git a/tests/Unit/RangeServiceTest.php b/tests/Unit/RangeServiceTest.php index 24a32ff..10da05d 100644 --- a/tests/Unit/RangeServiceTest.php +++ b/tests/Unit/RangeServiceTest.php @@ -57,7 +57,7 @@ $range = new Range('2024-11-07 22:00:00', '2024-11-08 05:00:00'); $result = $range->getNightSpaces(); $expect = [ - new Range('2024-11-06 20:00:00', '2024-11-07 22:00:00'), + new Range('2024-11-06 00:00:00', '2024-11-07 22:00:00'), new Range('2024-11-08 05:00:00', '2024-11-09 08:00:00'), ]; expect(count($result))->toBe(count($expect)); @@ -70,7 +70,7 @@ it('should return the day before night', function () { $range = new Range('2024-11-07 22:00:00', '2024-11-08 05:00:00'); $result = $range->getDayBeforeNight(); - $expect = new Range('2024-11-06 20:00:00', '2024-11-07 22:00:00'); + $expect = new Range('2024-11-06 00:00:00', '2024-11-07 22:00:00'); expect($result->start)->toEqual($expect->start); expect($result->end)->toEqual($expect->end); }); diff --git a/tests/Unit/ScheduleServiceTest.php b/tests/Unit/ScheduleServiceTest.php index 22d6f09..254e0af 100644 --- a/tests/Unit/ScheduleServiceTest.php +++ b/tests/Unit/ScheduleServiceTest.php @@ -16,6 +16,7 @@ 'type' => 'Clean', 'duration' => 1, 'parallel_weight' => 0.25, + 'in_parallel' => false, 'recurring' => collect(['type' => RecurringType::CUSTOM, 'dates_in_month' => [6]]), ]); diff --git a/tests/Unit/ShiftServiceTest.php b/tests/Unit/ShiftServiceTest.php index b47b138..8f19955 100644 --- a/tests/Unit/ShiftServiceTest.php +++ b/tests/Unit/ShiftServiceTest.php @@ -19,7 +19,7 @@ $result = $shift->getShiftSpaces([]); $expected = [ - new Range(Carbon::parse('2024-12-16 20:00:00'), Carbon::parse('2024-12-17 22:30:00')), + new Range(Carbon::parse('2024-12-16 00:00:00'), Carbon::parse('2024-12-17 22:30:00')), new Range(Carbon::parse('2024-12-18 06:00:00'), Carbon::parse('2024-12-19 08:00:00')), ]; diff --git a/tests/Unit/SoldierServiceTest.php b/tests/Unit/SoldierServiceTest.php index cdfd666..2b8aa2c 100644 --- a/tests/Unit/SoldierServiceTest.php +++ b/tests/Unit/SoldierServiceTest.php @@ -2,7 +2,10 @@ use App\Enums\Availability; use App\Enums\Priority; +use App\Models\Shift as ShiftModel; +use App\Models\Task; use App\Services\Constraint; +use App\Services\Helpers; use App\Services\MaxData; use App\Services\Range; use App\Services\Shift; @@ -22,43 +25,62 @@ }); it('should return true if the soldier available by maxes', function () { - $reflection = new ReflectionClass(Soldier::class); - $method = $reflection->getMethod('isAvailableByMaxes'); - $method->setAccessible(true); $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(5), new MaxData(3), ['Run'], []); $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 18), 1, false, false); - expect($method->invoke($soldier, $shift))->toBeTrue(); + $soldier->isAvailableByMaxes($shift); + expect($soldier->isAvailableByMaxes($shift))->toBeTrue(); }); it('should return false if the soldier is not available by maxes', function () { - $reflection = new ReflectionClass(Soldier::class); - $method = $reflection->getMethod('isAvailableByMaxes'); - $method->setAccessible(true); $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(0), new MaxData(3), ['Run'], []); $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 21), 1, true, false); - expect($method->invoke($soldier, $shift))->toBeFalse(); + expect($soldier->isAvailableByMaxes($shift))->toBeFalse(); }); it('should return true if the soldier is available by shifts', function () { - $reflection = new ReflectionClass(Soldier::class); - $method = $reflection->getMethod('isAvailableByShifts'); - $method->setAccessible(true); $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 19), Carbon::create(2024, 5, 14, 21), 1, true, false); $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(0), new MaxData(3), ['Run'], []); $soldier->assign($shift, []); - $range = new Range(Carbon::create(2024, 5, 14, 16), Carbon::create(2024, 5, 14, 18)); - expect($method->invoke($soldier, $range))->toBeTrue(); + $shift = new Shift(1, 'go', Carbon::create(2024, 5, 14, 16), Carbon::create(2024, 5, 14, 18), 0, false, false); + expect($soldier->isAvailableByShifts($shift, false))->toBeTrue(); }); it('should return false if the soldier is not available by shifts', function () { - $reflection = new ReflectionClass(Soldier::class); - $method = $reflection->getMethod('isAvailableByShifts'); - $method->setAccessible(true); $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 21), 1, true, false); $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(0), new MaxData(3), ['Run'], []); $soldier->assign($shift, []); - $range = new Range(Carbon::create(2024, 5, 14, 16), Carbon::create(2024, 5, 14, 18)); - expect($method->invoke($soldier, $range))->toBeFalse(); + $shift = new Shift(1, 'go', Carbon::create(2024, 5, 14, 16), Carbon::create(2024, 5, 14, 18), 0, false, false); + expect($soldier->isAvailableByShifts($shift, false))->toBeFalse(); +}); + +it('should return true if the soldier is available by spaces', function () { + $shifts = [new Shift(2, '', '2025-01-05', '2025-01-06', 0, false, false)]; + $spaces = [new Range('2025-01-02', '2025-01-03')]; + $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(5), new MaxData(3), [], [], $shifts, []); + expect($soldier->isAvailableBySpaces($spaces))->toBeTrue(); +}); + +it('should return false if the soldier is not available by spaces', function () { + $spaces = [new Range('2025-01-04', '2025-01-07')]; + $shifts = [new Shift(2, 'run', '2025-01-05', '2025-01-06', 0, false, false)]; + $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(5), new MaxData(3), [], [], $shifts, []); + expect($soldier->isAvailableBySpaces($spaces))->toBeFalse(); +}); + +it('should return true if the soldier is available by concurrents shifts', function () { + $shift = ShiftModel::factory()->create(['start_date' => '2025-01-08', 'end_date' => '2025-01-09', 'task_id' => Task::factory()->create(['type' => 'sing', 'in_parallel' => true, 'concurrent_tasks' => ['run']])->id]); + $concurrentsShifts = [Helpers::buildShift($shift)]; + $shift = new Shift(2, 'run', '2025-01-08', '2025-01-09', 0, false, false); + $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(5), new MaxData(3), [], [], [], $concurrentsShifts); + expect($soldier->isAvailableByConcurrentsShifts($shift))->toBeTrue(); +}); + +it('should return false if the soldier is not available by concurrents shifts', function () { + $shift = ShiftModel::factory()->create(['start_date' => '2025-01-08', 'end_date' => '2025-01-09', 'task_id' => Task::factory()->create(['type' => 'sing', 'in_parallel' => true, 'concurrent_tasks' => ['run']])->id]); + $concurrentsShifts = [Helpers::buildShift($shift)]; + $shift = new Shift(2, 'go', '2025-01-08', '2025-01-09', 0, false, false); + $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(5), new MaxData(3), [], [], [], $concurrentsShifts); + expect($soldier->isAvailableByConcurrentsShifts($shift))->toBeFalse(); }); it('should return better not availability if the soldier is not available by constraint in low priority', function () { From 6d5adf1beac250e36873ecd63622a68226388c59 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Mon, 27 Jan 2025 11:53:27 +0200 Subject: [PATCH 074/259] push and deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- database/seeders/DatabaseSeeder.php | 1598 ++++++++++---------- 2 files changed, 800 insertions(+), 800 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 687fc85..fb9ca73 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_10 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_11 flavor: | latest=false tags: | diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index e376733..28f60f4 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -52,804 +52,804 @@ public function run(): void ])->id, ])->assignRole(['soldier', 'shifts-assignment']); - for ($i = 0; $i < 15; $i++) { - $user = User::factory()->create([ - 'first_name' => 'mefaked', - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['pikud'], - 'capacity' => 5.5, - 'max_weekends' => 5.5, - 'max_shifts' => 10, - 'max_nights' => 5.5, - 'course' => fake()->numberBetween(0, 5), - 'is_reservist' => false, - 'constraints_limit' => ConstraintType::getLimit(), - ])->id, - ])->assignRole('soldier'); - $this->createConstraints($user->id); - } - - for ($i = 0; $i < 40; $i++) { - $user = User::factory()->create([ - 'first_name' => 'chayal pashut', - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['hatasa', 'tazpit', 'shmira'], - 'capacity' => 6, - 'max_weekends' => 6, - 'max_shifts' => 7, - 'max_nights' => 6, - 'course' => fake()->numberBetween(0, 5), - 'is_reservist' => false, - 'constraints_limit' => ConstraintType::getLimit(), - ])->id, - ])->assignRole('soldier'); - $this->createConstraints($user->id); - } - - for ($i = 0; $i < 30; $i++) { - $user = User::factory()->create([ - 'first_name' => 'chayal beinony', - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['hatasa', 'tazpit', 'shmira', 'tichnun', 'pianuach'], - 'capacity' => 5.5, - 'max_weekends' => 5.5, - 'max_shifts' => 6, - 'max_nights' => 5.5, - 'course' => fake()->numberBetween(0, 5), - 'is_reservist' => false, - 'constraints_limit' => ConstraintType::getLimit(), - ])->id, - ])->assignRole('soldier'); - $this->createConstraints($user->id); - } - - for ($i = 0; $i < 25; $i++) { - $user = User::factory()->create([ - 'first_name' => 'chayal vatik', - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['hatasa', 'bakara', 'tichnun', 'pianuach'], - 'capacity' => 5, - 'max_weekends' => 5, - 'max_shifts' => 5, - 'max_nights' => 5, - 'course' => fake()->numberBetween(0, 5), - 'is_reservist' => false, - 'constraints_limit' => ConstraintType::getLimit(), - ])->id, - ])->assignRole('soldier'); - $this->createConstraints($user->id); - } - - for ($i = 0; $i < 10; $i++) { - $user = User::factory()->create([ - 'first_name' => 'menahalan', - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['minhal', 'bdikat ziud'], - 'capacity' => 0, - 'max_weekends' => 0, - 'max_shifts' => 4, - 'max_nights' => 0, - 'course' => fake()->numberBetween(0, 5), - 'is_reservist' => false, - 'constraints_limit' => ConstraintType::getLimit(), - ])->id, - ])->assignRole('soldier'); - $this->createConstraints($user->id); - } - - for ($i = 0; $i < 8; $i++) { - $user = User::factory()->create([ - 'first_name' => 'navat', - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['nivut'], - 'capacity' => 10, - 'max_weekends' => 10, - 'max_shifts' => 12, - 'max_nights' => 10, - 'course' => fake()->numberBetween(0, 5), - 'is_reservist' => false, - 'constraints_limit' => ConstraintType::getLimit(), - ])->id, - ])->assignRole('soldier'); - $this->createConstraints($user->id); - } - - // Tasks - // tichnun - Task::factory()->create([ - 'name' => 'tichnun א-ה בוקר', - 'start_hour' => '10:00:00', - 'duration' => 4, - 'parallel_weight' => 0, - 'type' => 'tichnun', - 'is_weekend' => false, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#b54b4b', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'tichnun א-ה לילה', - 'start_hour' => '02:00:00', - 'duration' => 4, - 'parallel_weight' => 1, - 'type' => 'tichnun', - 'is_weekend' => false, - 'is_night' => true, - 'in_parallel' => false, - 'color' => '#b54b4b', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'tichnun 1 סופ"ש', - 'start_hour' => '10:30:00', - 'duration' => 25, - 'parallel_weight' => 2.5, - 'type' => 'tichnun', - 'is_weekend' => true, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#b54b4b', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'tichnun 2 סופ"ש', - 'start_hour' => '11:10:00', - 'duration' => 25, - 'parallel_weight' => 2.5, - 'type' => 'tichnun', - 'is_weekend' => true, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#b54b4b', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - // bakara - Task::factory()->create([ - 'name' => 'bakara ארבע פעמים בשבוע בוקר', - 'start_hour' => '10:00:00', - 'duration' => 4, - 'parallel_weight' => 0, - 'type' => 'bakara', - 'is_weekend' => false, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#4bb5ac', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'bakara שלוש פעמים בשבוע לילה', - 'start_hour' => '03:20:00', - 'duration' => 4, - 'parallel_weight' => 1, - 'type' => 'bakara', - 'is_weekend' => false, - 'is_night' => true, - 'in_parallel' => false, - 'color' => '#4bb5ac', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'bakara סופ"ש', - 'start_hour' => '10:05:00', - 'duration' => 26, - 'parallel_weight' => 2.5, - 'type' => 'bakara', - 'is_weekend' => true, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#4bb5ac', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - // pikud - Task::factory()->create([ - 'name' => 'pikud 1 א-ה בוקר', - 'start_hour' => '10:00:00', - 'duration' => 4, - 'parallel_weight' => 0, - 'type' => 'pikud', - 'is_weekend' => false, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#4bb569', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'pikud 2 א-ה בוקר', - 'start_hour' => '10:00:00', - 'duration' => 4, - 'parallel_weight' => 0, - 'type' => 'pikud', - 'is_weekend' => false, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#4bb569', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'pikud 1 סופש', - 'start_hour' => '10:00:00', - 'duration' => 25, - 'parallel_weight' => 2.5, - 'type' => 'pikud', - 'is_weekend' => true, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#4bb569', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'pikud 2 סופש', - 'start_hour' => '10:00:00', - 'duration' => 25, - 'parallel_weight' => 2.5, - 'type' => 'pikud', - 'is_weekend' => true, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#4bb569', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'pikud לילה א-ה', - 'start_hour' => '03:00:00', - 'duration' => 4, - 'parallel_weight' => 1, - 'type' => 'pikud', - 'is_weekend' => false, - 'is_night' => true, - 'in_parallel' => false, - 'color' => '#4bb569', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - // minhal - Task::factory()->create([ - 'name' => 'minhal שלוש פעמים בשבוע בוקר', - 'start_hour' => '13:00:00', - 'duration' => 2, - 'parallel_weight' => 0, - 'type' => 'minhal', - 'is_weekend' => false, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#c5d649', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::TUESDAY, DaysInWeek::THURSDAY], - ]), - ]); - // hatasa - Task::factory()->create([ - 'name' => 'hatasa א-ה בוקר', - 'start_hour' => '09:00:00', - 'duration' => 6, - 'parallel_weight' => 0, - 'type' => 'hatasa', - 'is_weekend' => false, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#d649b5', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'hatasa א-ה לילה', - 'start_hour' => '02:00:00', - 'duration' => 6, - 'parallel_weight' => 1, - 'type' => 'hatasa', - 'is_weekend' => false, - 'is_night' => true, - 'in_parallel' => false, - 'color' => '#d649b5', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'hatasa 1 סופש', - 'start_hour' => '06:00:00', - 'duration' => 26, - 'parallel_weight' => 2.5, - 'type' => 'hatasa', - 'is_weekend' => true, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#d649b5', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'hatasa 2 סופש', - 'start_hour' => '06:00:00', - 'duration' => 26, - 'parallel_weight' => 2.5, - 'type' => 'hatasa', - 'is_weekend' => true, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#d649b5', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - // shmira - Task::factory()->create([ - 'name' => 'shmira א-ה בוקר', - 'start_hour' => '07:00:00', - 'duration' => 12, - 'parallel_weight' => 0, - 'type' => 'shmira', - 'is_weekend' => false, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#ee8559', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'shmira א-ה לילה', - 'start_hour' => '01:00:00', - 'duration' => 7, - 'parallel_weight' => 1, - 'type' => 'shmira', - 'is_weekend' => false, - 'is_night' => true, - 'in_parallel' => false, - 'color' => '#ee8559', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'shmira 1 סופש', - 'start_hour' => '06:00:00', - 'duration' => 26, - 'parallel_weight' => 2.5, - 'type' => 'shmira', - 'is_weekend' => true, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#ee8559', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'shmira סופש 2', - 'start_hour' => '06:00:00', - 'duration' => 26, - 'parallel_weight' => 2.5, - 'type' => 'shmira', - 'is_weekend' => true, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#ee8559', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - // pianuach - Task::factory()->create([ - 'name' => 'pianuach א-ה בוקר', - 'start_hour' => '07:00:00', - 'duration' => 7, - 'parallel_weight' => 0, - 'type' => 'pianuach', - 'is_weekend' => false, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#3574fb', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'pianuach א-ה לילה', - 'start_hour' => '01:00:00', - 'duration' => 5, - 'parallel_weight' => 1, - 'type' => 'pianuach', - 'is_weekend' => false, - 'is_night' => true, - 'in_parallel' => false, - 'color' => '#3574fb', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'pianuach 1 סופש', - 'start_hour' => '07:00:00', - 'duration' => 27, - 'parallel_weight' => 2.5, - 'type' => 'pianuach', - 'is_weekend' => true, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#3574fb', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'pianuach 2 סופש', - 'start_hour' => '07:00:00', - 'duration' => 27, - 'parallel_weight' => 2.5, - 'type' => 'pianuach', - 'is_weekend' => true, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#3574fb', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - // nivut - Task::factory()->create([ - 'name' => 'nivut א-ה בוקר', - 'start_hour' => '11:00:00', - 'duration' => 2, - 'parallel_weight' => 0, - 'type' => 'nivut', - 'is_weekend' => false, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#ed8d8d8b', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'nivut א-ה לילה', - 'start_hour' => '01:00:00', - 'duration' => 2.5, - 'parallel_weight' => 1, - 'type' => 'nivut', - 'is_weekend' => false, - 'is_night' => true, - 'in_parallel' => false, - 'color' => '#ed8d8d8b', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'nivut 1 סופש', - 'start_hour' => '11:00:00', - 'duration' => 28, - 'parallel_weight' => 2.5, - 'type' => 'nivut', - 'is_weekend' => true, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#ed8d8d8b', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'nivut 2 סופש', - 'start_hour' => '11:00:00', - 'duration' => 28, - 'parallel_weight' => 2.5, - 'type' => 'nivut', - 'is_weekend' => true, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#ed8d8d8b', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - // tazpit - Task::factory()->create([ - 'name' => 'tazpit א-ה בוקר 1', - 'start_hour' => '08:00:00', - 'duration' => 10, - 'parallel_weight' => 0, - 'type' => 'tazpit', - 'is_weekend' => false, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#77ff23', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'tazpit א-ה בוקר 2', - 'start_hour' => '08:00:00', - 'duration' => 10, - 'parallel_weight' => 0, - 'type' => 'tazpit', - 'is_weekend' => false, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#77ff23', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'tazpit א-ה לילה', - 'start_hour' => '01:30:00', - 'duration' => 6, - 'parallel_weight' => 1, - 'type' => 'tazpit', - 'is_weekend' => false, - 'is_night' => true, - 'in_parallel' => false, - 'color' => '#77ff23', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'tazpit 1 סופש', - 'start_hour' => '11:45:00', - 'duration' => 25, - 'parallel_weight' => 2.5, - 'type' => 'tazpit', - 'is_weekend' => true, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#77ff23', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'tazpit 2 סופש', - 'start_hour' => '11:00:00', - 'duration' => 25, - 'parallel_weight' => 2.5, - 'type' => 'tazpit', - 'is_weekend' => true, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#77ff23', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - // bdikat ziud - Task::factory()->create([ - 'name' => 'bdikat ziud פעם בשבוע בוקר', - 'start_hour' => '11:15:00', - 'duration' => 3.5, - 'parallel_weight' => 0, - 'type' => 'bdikat ziud', - 'is_weekend' => false, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#a7b2c3', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY], - ]), - ]); - } - - protected function createConstraints(int $userId) - { - for ($i = 0; $i < count(ConstraintType::cases()); $i++) { - $times = ConstraintType::getLimit()[ConstraintType::cases()[$i]->value] > 0 - ? random_int(0, ConstraintType::getLimit()[ConstraintType::cases()[$i]->value]) : - random_int(0, random_int(0, 5)); - for ($j = 0; $j < $times; $j++) { - $startDate = call_user_func([$this, ConstraintType::cases()[$i]->name]); - Constraint::factory()->create([ - 'soldier_id' => User::find($userId)->userable_id, - 'constraint_type' => ConstraintType::cases()[$i], - 'start_date' => $startDate, - 'end_date' => $startDate->copy()->addHours(random_int(1, 5)), - ]); - } - } - } - - protected function getDatesOfMonth($month = null) - { - $month ??= now()->addMonth(); - - return CarbonPeriod::between($month->startOfMonth(), $month->copy()->endOfMonth()); - } - - protected function getThursday() - { - $period = $this->getDatesOfMonth(); - - return collect($period) - ->filter( - fn ($date) => Carbon::parse($date)->isThursday() - )->all(); - } - - protected function getWeekends() - { - $period = $this->getDatesOfMonth(); - - return collect($period) - ->filter( - fn ($date) => Carbon::parse($date)->isFriday() || Carbon::parse($date)->isSaturday() - ) - ->all(); - } - - protected function getTime() - { - return Carbon::now()->subSeconds(rand(0, 30 * 24 * 60 * 60)); - } - - protected function getNightHour() - { - $time = $this->getTime(); - if ($time->hour < 20 && $time->hour >= 8) { - return $time->addHours(20 - $time->hour); - } - - return $time; - } - - protected function NOT_WEEKEND() - { - $time = $this->getTime(); - - return Carbon::parse(collect($this->getWeekends())->random()) - ->setTime( - $time->hour, - $time->minute, - $time->second - ); - } - - protected function LOW_PRIORITY_NOT_WEEKEND() - { - $time = $this->getTime(); - - return Carbon::parse(collect($this->getWeekends())->random()) - ->setTime( - $time->hour, - $time->minute, - $time->second - ); - } - - protected function NOT_TASK() - { - $time = $this->getTime(); - - return Carbon::parse(collect($this->getDatesOfMonth())->random()) - ->setTime( - $time->hour, - $time->minute, - $time->second - ); - } - - protected function LOW_PRIORITY_NOT_TASK() - { - $time = $this->getTime(); - - return Carbon::parse(collect($this->getDatesOfMonth())->random()) - ->setTime( - $time->hour, - $time->minute, - $time->second - ); - } - - protected function NOT_EVENING() - { - $date = collect($this->getDatesOfMonth())->random(); - $nightTime = $this->getNightHour(); - - return $date->copy()->setTime($nightTime->hour, $nightTime->minute, $nightTime->second); - } - - protected function NOT_THURSDAY_EVENING() - { - $date = collect($this->getThursday())->random(); - $nightTime = $this->getNightHour(); - - return $date->copy()->setTime($nightTime->hour, $nightTime->minute, $nightTime->second); - } - - protected function VACATION() - { - $time = $this->getTime(); - - return Carbon::parse(collect($this->getDatesOfMonth())->random()) - ->setTime( - $time->hour, - $time->minute, - $time->second - ); - } - - protected function MEDICAL() - { - $time = $this->getTime(); - - return Carbon::parse(collect($this->getDatesOfMonth())->random()) - ->setTime( - $time->hour, - $time->minute, - $time->second - ); - } - - protected function SCHOOL() - { - $time = $this->getTime(); - - return Carbon::parse(collect($this->getDatesOfMonth())->random()) - ->setTime( - $time->hour, - $time->minute, - $time->second - ); + // for ($i = 0; $i < 15; $i++) { + // $user = User::factory()->create([ + // 'first_name' => 'mefaked', + // 'userable_id' => Soldier::factory()->create([ + // 'qualifications' => ['pikud'], + // 'capacity' => 5.5, + // 'max_weekends' => 5.5, + // 'max_shifts' => 10, + // 'max_nights' => 5.5, + // 'course' => fake()->numberBetween(0, 5), + // 'is_reservist' => false, + // 'constraints_limit' => ConstraintType::getLimit(), + // ])->id, + // ])->assignRole('soldier'); + // $this->createConstraints($user->id); + // } + + // for ($i = 0; $i < 40; $i++) { + // $user = User::factory()->create([ + // 'first_name' => 'chayal pashut', + // 'userable_id' => Soldier::factory()->create([ + // 'qualifications' => ['hatasa', 'tazpit', 'shmira'], + // 'capacity' => 6, + // 'max_weekends' => 6, + // 'max_shifts' => 7, + // 'max_nights' => 6, + // 'course' => fake()->numberBetween(0, 5), + // 'is_reservist' => false, + // 'constraints_limit' => ConstraintType::getLimit(), + // ])->id, + // ])->assignRole('soldier'); + // $this->createConstraints($user->id); + // } + + // for ($i = 0; $i < 30; $i++) { + // $user = User::factory()->create([ + // 'first_name' => 'chayal beinony', + // 'userable_id' => Soldier::factory()->create([ + // 'qualifications' => ['hatasa', 'tazpit', 'shmira', 'tichnun', 'pianuach'], + // 'capacity' => 5.5, + // 'max_weekends' => 5.5, + // 'max_shifts' => 6, + // 'max_nights' => 5.5, + // 'course' => fake()->numberBetween(0, 5), + // 'is_reservist' => false, + // 'constraints_limit' => ConstraintType::getLimit(), + // ])->id, + // ])->assignRole('soldier'); + // $this->createConstraints($user->id); + // } + + // for ($i = 0; $i < 25; $i++) { + // $user = User::factory()->create([ + // 'first_name' => 'chayal vatik', + // 'userable_id' => Soldier::factory()->create([ + // 'qualifications' => ['hatasa', 'bakara', 'tichnun', 'pianuach'], + // 'capacity' => 5, + // 'max_weekends' => 5, + // 'max_shifts' => 5, + // 'max_nights' => 5, + // 'course' => fake()->numberBetween(0, 5), + // 'is_reservist' => false, + // 'constraints_limit' => ConstraintType::getLimit(), + // ])->id, + // ])->assignRole('soldier'); + // $this->createConstraints($user->id); + // } + + // for ($i = 0; $i < 10; $i++) { + // $user = User::factory()->create([ + // 'first_name' => 'menahalan', + // 'userable_id' => Soldier::factory()->create([ + // 'qualifications' => ['minhal', 'bdikat ziud'], + // 'capacity' => 0, + // 'max_weekends' => 0, + // 'max_shifts' => 4, + // 'max_nights' => 0, + // 'course' => fake()->numberBetween(0, 5), + // 'is_reservist' => false, + // 'constraints_limit' => ConstraintType::getLimit(), + // ])->id, + // ])->assignRole('soldier'); + // $this->createConstraints($user->id); + // } + + // for ($i = 0; $i < 8; $i++) { + // $user = User::factory()->create([ + // 'first_name' => 'navat', + // 'userable_id' => Soldier::factory()->create([ + // 'qualifications' => ['nivut'], + // 'capacity' => 10, + // 'max_weekends' => 10, + // 'max_shifts' => 12, + // 'max_nights' => 10, + // 'course' => fake()->numberBetween(0, 5), + // 'is_reservist' => false, + // 'constraints_limit' => ConstraintType::getLimit(), + // ])->id, + // ])->assignRole('soldier'); + // $this->createConstraints($user->id); + // } + + // // Tasks + // // tichnun + // Task::factory()->create([ + // 'name' => 'tichnun א-ה בוקר', + // 'start_hour' => '10:00:00', + // 'duration' => 4, + // 'parallel_weight' => 0, + // 'type' => 'tichnun', + // 'is_weekend' => false, + // 'is_night' => false, + // 'in_parallel' => false, + // 'color' => '#b54b4b', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'tichnun א-ה לילה', + // 'start_hour' => '02:00:00', + // 'duration' => 4, + // 'parallel_weight' => 1, + // 'type' => 'tichnun', + // 'is_weekend' => false, + // 'is_night' => true, + // 'in_parallel' => false, + // 'color' => '#b54b4b', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'tichnun 1 סופ"ש', + // 'start_hour' => '10:30:00', + // 'duration' => 25, + // 'parallel_weight' => 2.5, + // 'type' => 'tichnun', + // 'is_weekend' => true, + // 'is_night' => false, + // 'in_parallel' => false, + // 'color' => '#b54b4b', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::FRIDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'tichnun 2 סופ"ש', + // 'start_hour' => '11:10:00', + // 'duration' => 25, + // 'parallel_weight' => 2.5, + // 'type' => 'tichnun', + // 'is_weekend' => true, + // 'is_night' => false, + // 'in_parallel' => false, + // 'color' => '#b54b4b', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::FRIDAY], + // ]), + // ]); + // // bakara + // Task::factory()->create([ + // 'name' => 'bakara ארבע פעמים בשבוע בוקר', + // 'start_hour' => '10:00:00', + // 'duration' => 4, + // 'parallel_weight' => 0, + // 'type' => 'bakara', + // 'is_weekend' => false, + // 'is_night' => false, + // 'in_parallel' => false, + // 'color' => '#4bb5ac', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'bakara שלוש פעמים בשבוע לילה', + // 'start_hour' => '03:20:00', + // 'duration' => 4, + // 'parallel_weight' => 1, + // 'type' => 'bakara', + // 'is_weekend' => false, + // 'is_night' => true, + // 'in_parallel' => false, + // 'color' => '#4bb5ac', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'bakara סופ"ש', + // 'start_hour' => '10:05:00', + // 'duration' => 26, + // 'parallel_weight' => 2.5, + // 'type' => 'bakara', + // 'is_weekend' => true, + // 'is_night' => false, + // 'in_parallel' => false, + // 'color' => '#4bb5ac', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::FRIDAY], + // ]), + // ]); + // // pikud + // Task::factory()->create([ + // 'name' => 'pikud 1 א-ה בוקר', + // 'start_hour' => '10:00:00', + // 'duration' => 4, + // 'parallel_weight' => 0, + // 'type' => 'pikud', + // 'is_weekend' => false, + // 'is_night' => false, + // 'in_parallel' => false, + // 'color' => '#4bb569', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'pikud 2 א-ה בוקר', + // 'start_hour' => '10:00:00', + // 'duration' => 4, + // 'parallel_weight' => 0, + // 'type' => 'pikud', + // 'is_weekend' => false, + // 'is_night' => false, + // 'in_parallel' => false, + // 'color' => '#4bb569', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'pikud 1 סופש', + // 'start_hour' => '10:00:00', + // 'duration' => 25, + // 'parallel_weight' => 2.5, + // 'type' => 'pikud', + // 'is_weekend' => true, + // 'is_night' => false, + // 'in_parallel' => false, + // 'color' => '#4bb569', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::FRIDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'pikud 2 סופש', + // 'start_hour' => '10:00:00', + // 'duration' => 25, + // 'parallel_weight' => 2.5, + // 'type' => 'pikud', + // 'is_weekend' => true, + // 'is_night' => false, + // 'in_parallel' => false, + // 'color' => '#4bb569', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::FRIDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'pikud לילה א-ה', + // 'start_hour' => '03:00:00', + // 'duration' => 4, + // 'parallel_weight' => 1, + // 'type' => 'pikud', + // 'is_weekend' => false, + // 'is_night' => true, + // 'in_parallel' => false, + // 'color' => '#4bb569', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // // minhal + // Task::factory()->create([ + // 'name' => 'minhal שלוש פעמים בשבוע בוקר', + // 'start_hour' => '13:00:00', + // 'duration' => 2, + // 'parallel_weight' => 0, + // 'type' => 'minhal', + // 'is_weekend' => false, + // 'is_night' => false, + // 'in_parallel' => false, + // 'color' => '#c5d649', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::TUESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // // hatasa + // Task::factory()->create([ + // 'name' => 'hatasa א-ה בוקר', + // 'start_hour' => '09:00:00', + // 'duration' => 6, + // 'parallel_weight' => 0, + // 'type' => 'hatasa', + // 'is_weekend' => false, + // 'is_night' => false, + // 'in_parallel' => false, + // 'color' => '#d649b5', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'hatasa א-ה לילה', + // 'start_hour' => '02:00:00', + // 'duration' => 6, + // 'parallel_weight' => 1, + // 'type' => 'hatasa', + // 'is_weekend' => false, + // 'is_night' => true, + // 'in_parallel' => false, + // 'color' => '#d649b5', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'hatasa 1 סופש', + // 'start_hour' => '06:00:00', + // 'duration' => 26, + // 'parallel_weight' => 2.5, + // 'type' => 'hatasa', + // 'is_weekend' => true, + // 'is_night' => false, + // 'in_parallel' => false, + // 'color' => '#d649b5', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::FRIDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'hatasa 2 סופש', + // 'start_hour' => '06:00:00', + // 'duration' => 26, + // 'parallel_weight' => 2.5, + // 'type' => 'hatasa', + // 'is_weekend' => true, + // 'is_night' => false, + // 'in_parallel' => false, + // 'color' => '#d649b5', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::FRIDAY], + // ]), + // ]); + // // shmira + // Task::factory()->create([ + // 'name' => 'shmira א-ה בוקר', + // 'start_hour' => '07:00:00', + // 'duration' => 12, + // 'parallel_weight' => 0, + // 'type' => 'shmira', + // 'is_weekend' => false, + // 'is_night' => false, + // 'in_parallel' => false, + // 'color' => '#ee8559', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'shmira א-ה לילה', + // 'start_hour' => '01:00:00', + // 'duration' => 7, + // 'parallel_weight' => 1, + // 'type' => 'shmira', + // 'is_weekend' => false, + // 'is_night' => true, + // 'in_parallel' => false, + // 'color' => '#ee8559', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'shmira 1 סופש', + // 'start_hour' => '06:00:00', + // 'duration' => 26, + // 'parallel_weight' => 2.5, + // 'type' => 'shmira', + // 'is_weekend' => true, + // 'is_night' => false, + // 'in_parallel' => false, + // 'color' => '#ee8559', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::FRIDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'shmira סופש 2', + // 'start_hour' => '06:00:00', + // 'duration' => 26, + // 'parallel_weight' => 2.5, + // 'type' => 'shmira', + // 'is_weekend' => true, + // 'is_night' => false, + // 'in_parallel' => false, + // 'color' => '#ee8559', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::FRIDAY], + // ]), + // ]); + // // pianuach + // Task::factory()->create([ + // 'name' => 'pianuach א-ה בוקר', + // 'start_hour' => '07:00:00', + // 'duration' => 7, + // 'parallel_weight' => 0, + // 'type' => 'pianuach', + // 'is_weekend' => false, + // 'is_night' => false, + // 'in_parallel' => false, + // 'color' => '#3574fb', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'pianuach א-ה לילה', + // 'start_hour' => '01:00:00', + // 'duration' => 5, + // 'parallel_weight' => 1, + // 'type' => 'pianuach', + // 'is_weekend' => false, + // 'is_night' => true, + // 'in_parallel' => false, + // 'color' => '#3574fb', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'pianuach 1 סופש', + // 'start_hour' => '07:00:00', + // 'duration' => 27, + // 'parallel_weight' => 2.5, + // 'type' => 'pianuach', + // 'is_weekend' => true, + // 'is_night' => false, + // 'in_parallel' => false, + // 'color' => '#3574fb', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::FRIDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'pianuach 2 סופש', + // 'start_hour' => '07:00:00', + // 'duration' => 27, + // 'parallel_weight' => 2.5, + // 'type' => 'pianuach', + // 'is_weekend' => true, + // 'is_night' => false, + // 'in_parallel' => false, + // 'color' => '#3574fb', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::FRIDAY], + // ]), + // ]); + // // nivut + // Task::factory()->create([ + // 'name' => 'nivut א-ה בוקר', + // 'start_hour' => '11:00:00', + // 'duration' => 2, + // 'parallel_weight' => 0, + // 'type' => 'nivut', + // 'is_weekend' => false, + // 'is_night' => false, + // 'in_parallel' => false, + // 'color' => '#ed8d8d8b', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'nivut א-ה לילה', + // 'start_hour' => '01:00:00', + // 'duration' => 2.5, + // 'parallel_weight' => 1, + // 'type' => 'nivut', + // 'is_weekend' => false, + // 'is_night' => true, + // 'in_parallel' => false, + // 'color' => '#ed8d8d8b', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'nivut 1 סופש', + // 'start_hour' => '11:00:00', + // 'duration' => 28, + // 'parallel_weight' => 2.5, + // 'type' => 'nivut', + // 'is_weekend' => true, + // 'is_night' => false, + // 'in_parallel' => false, + // 'color' => '#ed8d8d8b', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::FRIDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'nivut 2 סופש', + // 'start_hour' => '11:00:00', + // 'duration' => 28, + // 'parallel_weight' => 2.5, + // 'type' => 'nivut', + // 'is_weekend' => true, + // 'is_night' => false, + // 'in_parallel' => false, + // 'color' => '#ed8d8d8b', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::FRIDAY], + // ]), + // ]); + // // tazpit + // Task::factory()->create([ + // 'name' => 'tazpit א-ה בוקר 1', + // 'start_hour' => '08:00:00', + // 'duration' => 10, + // 'parallel_weight' => 0, + // 'type' => 'tazpit', + // 'is_weekend' => false, + // 'is_night' => false, + // 'in_parallel' => false, + // 'color' => '#77ff23', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'tazpit א-ה בוקר 2', + // 'start_hour' => '08:00:00', + // 'duration' => 10, + // 'parallel_weight' => 0, + // 'type' => 'tazpit', + // 'is_weekend' => false, + // 'is_night' => false, + // 'in_parallel' => false, + // 'color' => '#77ff23', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'tazpit א-ה לילה', + // 'start_hour' => '01:30:00', + // 'duration' => 6, + // 'parallel_weight' => 1, + // 'type' => 'tazpit', + // 'is_weekend' => false, + // 'is_night' => true, + // 'in_parallel' => false, + // 'color' => '#77ff23', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'tazpit 1 סופש', + // 'start_hour' => '11:45:00', + // 'duration' => 25, + // 'parallel_weight' => 2.5, + // 'type' => 'tazpit', + // 'is_weekend' => true, + // 'is_night' => false, + // 'in_parallel' => false, + // 'color' => '#77ff23', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::FRIDAY], + // ]), + // ]); + // Task::factory()->create([ + // 'name' => 'tazpit 2 סופש', + // 'start_hour' => '11:00:00', + // 'duration' => 25, + // 'parallel_weight' => 2.5, + // 'type' => 'tazpit', + // 'is_weekend' => true, + // 'is_night' => false, + // 'in_parallel' => false, + // 'color' => '#77ff23', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::FRIDAY], + // ]), + // ]); + // // bdikat ziud + // Task::factory()->create([ + // 'name' => 'bdikat ziud פעם בשבוע בוקר', + // 'start_hour' => '11:15:00', + // 'duration' => 3.5, + // 'parallel_weight' => 0, + // 'type' => 'bdikat ziud', + // 'is_weekend' => false, + // 'is_night' => false, + // 'in_parallel' => false, + // 'color' => '#a7b2c3', + // 'recurring' => collect([ + // 'type' => RecurringType::WEEKLY, + // 'days_in_week' => [DaysInWeek::SUNDAY], + // ]), + // ]); + // } + + // protected function createConstraints(int $userId) + // { + // for ($i = 0; $i < count(ConstraintType::cases()); $i++) { + // $times = ConstraintType::getLimit()[ConstraintType::cases()[$i]->value] > 0 + // ? random_int(0, ConstraintType::getLimit()[ConstraintType::cases()[$i]->value]) : + // random_int(0, random_int(0, 5)); + // for ($j = 0; $j < $times; $j++) { + // $startDate = call_user_func([$this, ConstraintType::cases()[$i]->name]); + // Constraint::factory()->create([ + // 'soldier_id' => User::find($userId)->userable_id, + // 'constraint_type' => ConstraintType::cases()[$i], + // 'start_date' => $startDate, + // 'end_date' => $startDate->copy()->addHours(random_int(1, 5)), + // ]); + // } + // } + // } + + // protected function getDatesOfMonth($month = null) + // { + // $month ??= now()->addMonth(); + + // return CarbonPeriod::between($month->startOfMonth(), $month->copy()->endOfMonth()); + // } + + // protected function getThursday() + // { + // $period = $this->getDatesOfMonth(); + + // return collect($period) + // ->filter( + // fn ($date) => Carbon::parse($date)->isThursday() + // )->all(); + // } + + // protected function getWeekends() + // { + // $period = $this->getDatesOfMonth(); + + // return collect($period) + // ->filter( + // fn ($date) => Carbon::parse($date)->isFriday() || Carbon::parse($date)->isSaturday() + // ) + // ->all(); + // } + + // protected function getTime() + // { + // return Carbon::now()->subSeconds(rand(0, 30 * 24 * 60 * 60)); + // } + + // protected function getNightHour() + // { + // $time = $this->getTime(); + // if ($time->hour < 20 && $time->hour >= 8) { + // return $time->addHours(20 - $time->hour); + // } + + // return $time; + // } + + // protected function NOT_WEEKEND() + // { + // $time = $this->getTime(); + + // return Carbon::parse(collect($this->getWeekends())->random()) + // ->setTime( + // $time->hour, + // $time->minute, + // $time->second + // ); + // } + + // protected function LOW_PRIORITY_NOT_WEEKEND() + // { + // $time = $this->getTime(); + + // return Carbon::parse(collect($this->getWeekends())->random()) + // ->setTime( + // $time->hour, + // $time->minute, + // $time->second + // ); + // } + + // protected function NOT_TASK() + // { + // $time = $this->getTime(); + + // return Carbon::parse(collect($this->getDatesOfMonth())->random()) + // ->setTime( + // $time->hour, + // $time->minute, + // $time->second + // ); + // } + + // protected function LOW_PRIORITY_NOT_TASK() + // { + // $time = $this->getTime(); + + // return Carbon::parse(collect($this->getDatesOfMonth())->random()) + // ->setTime( + // $time->hour, + // $time->minute, + // $time->second + // ); + // } + + // protected function NOT_EVENING() + // { + // $date = collect($this->getDatesOfMonth())->random(); + // $nightTime = $this->getNightHour(); + + // return $date->copy()->setTime($nightTime->hour, $nightTime->minute, $nightTime->second); + // } + + // protected function NOT_THURSDAY_EVENING() + // { + // $date = collect($this->getThursday())->random(); + // $nightTime = $this->getNightHour(); + + // return $date->copy()->setTime($nightTime->hour, $nightTime->minute, $nightTime->second); + // } + + // protected function VACATION() + // { + // $time = $this->getTime(); + + // return Carbon::parse(collect($this->getDatesOfMonth())->random()) + // ->setTime( + // $time->hour, + // $time->minute, + // $time->second + // ); + // } + + // protected function MEDICAL() + // { + // $time = $this->getTime(); + + // return Carbon::parse(collect($this->getDatesOfMonth())->random()) + // ->setTime( + // $time->hour, + // $time->minute, + // $time->second + // ); + // } + + // protected function SCHOOL() + // { + // $time = $this->getTime(); + + // return Carbon::parse(collect($this->getDatesOfMonth())->random()) + // ->setTime( + // $time->hour, + // $time->minute, + // $time->second + // ); } } From 56f5d7e38d509b0b6468b040c875acde65632c38 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Mon, 27 Jan 2025 12:26:04 +0200 Subject: [PATCH 075/259] push and deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- database/seeders/DatabaseSeeder.php | 24 +++++++++++----------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index fb9ca73..586d99f 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_11 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_12 flavor: | latest=false tags: | diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 28f60f4..3c26a38 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -39,18 +39,18 @@ public function run(): void ])->id, ])->assignRole(['soldier', 'manager']); - User::factory()->create([ - 'first_name' => 'meshabetz mishmarot', - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['hatasa', 'tazpit', 'shmira'], - 'capacity' => 6, - 'max_weekends' => 6, - 'max_shifts' => 7, - 'max_nights' => 6, - 'is_reservist' => false, - 'constraints_limit' => ConstraintType::getLimit(), - ])->id, - ])->assignRole(['soldier', 'shifts-assignment']); + // User::factory()->create([ + // 'first_name' => 'meshabetz mishmarot', + // 'userable_id' => Soldier::factory()->create([ + // 'qualifications' => ['hatasa', 'tazpit', 'shmira'], + // 'capacity' => 6, + // 'max_weekends' => 6, + // 'max_shifts' => 7, + // 'max_nights' => 6, + // 'is_reservist' => false, + // 'constraints_limit' => ConstraintType::getLimit(), + // ])->id, + // ])->assignRole(['soldier', 'shifts-assignment']); // for ($i = 0; $i < 15; $i++) { // $user = User::factory()->create([ From e752fe79e693b25fb85593937310f93f4bfdecbc Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Mon, 27 Jan 2025 14:28:09 +0200 Subject: [PATCH 076/259] push and deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 586d99f..c3755e0 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_12 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_13 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 1e2574a..f3714f1 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -20,6 +20,7 @@ use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Collection; use Illuminate\Support\Facades\Schema; +use Log; use Maatwebsite\Excel\Facades\Excel; use Saade\FilamentFullCalendar\Actions\CreateAction; use Saade\FilamentFullCalendar\Actions\DeleteAction; @@ -161,6 +162,7 @@ protected function headerActions(): array if (in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray())) { return [$this->createConstraintAction()]; } + \Log::info(json_encode('if line 165')); FilamentFullCalendarPlugin::get()->editable(false); FilamentFullCalendarPlugin::get()->selectable(false); } else { @@ -337,6 +339,7 @@ protected function modalActions(): array return $changeAction; } if (! (in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray()))) { + \Log::info(json_encode('if 3line 341')); FilamentFullCalendarPlugin::get()->editable(false); FilamentFullCalendarPlugin::get()->selectable(false); } From 6cd313c3bcff13633860748e8b851db89bcac367 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Tue, 28 Jan 2025 09:25:09 +0200 Subject: [PATCH 077/259] push and deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index c3755e0..a823ced 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_13 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_14 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index f3714f1..5de61cf 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -163,8 +163,8 @@ protected function headerActions(): array return [$this->createConstraintAction()]; } \Log::info(json_encode('if line 165')); - FilamentFullCalendarPlugin::get()->editable(false); - FilamentFullCalendarPlugin::get()->selectable(false); + // FilamentFullCalendarPlugin::get()->editable(false); + // FilamentFullCalendarPlugin::get()->selectable(false); } else { if (Task::exists()) { $actions = [ @@ -340,8 +340,8 @@ protected function modalActions(): array } if (! (in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray()))) { \Log::info(json_encode('if 3line 341')); - FilamentFullCalendarPlugin::get()->editable(false); - FilamentFullCalendarPlugin::get()->selectable(false); + // FilamentFullCalendarPlugin::get()->editable(false); + // FilamentFullCalendarPlugin::get()->selectable(false); } return []; From 65b6f54fa4bb9dc67f3ebc7cc98736590afb012b Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Tue, 28 Jan 2025 12:44:38 +0200 Subject: [PATCH 078/259] push and deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index a823ced..6db45e7 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_14 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_15 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 5de61cf..25571eb 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -162,9 +162,10 @@ protected function headerActions(): array if (in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray())) { return [$this->createConstraintAction()]; } - \Log::info(json_encode('if line 165')); - // FilamentFullCalendarPlugin::get()->editable(false); - // FilamentFullCalendarPlugin::get()->selectable(false); + else{ + FilamentFullCalendarPlugin::get()->editable(false); + FilamentFullCalendarPlugin::get()->selectable(false); + } } else { if (Task::exists()) { $actions = [ @@ -339,9 +340,8 @@ protected function modalActions(): array return $changeAction; } if (! (in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray()))) { - \Log::info(json_encode('if 3line 341')); - // FilamentFullCalendarPlugin::get()->editable(false); - // FilamentFullCalendarPlugin::get()->selectable(false); + FilamentFullCalendarPlugin::get()->editable(false); + FilamentFullCalendarPlugin::get()->selectable(false); } return []; From 595658bd9ce1884e43b084d8ca6368dd7a1b7199 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Tue, 28 Jan 2025 13:05:51 +0200 Subject: [PATCH 079/259] push and deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 6db45e7..af803b9 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_15 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_16 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 25571eb..db9f569 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -53,6 +53,8 @@ class CalendarWidget extends FullCalendarWidget public function fetchEvents(array $fetchInfo): array { + FilamentFullCalendarPlugin::get()->editable(true); + FilamentFullCalendarPlugin::get()->selectable(true); $this->currentMonth = Carbon::parse($fetchInfo['start'])->addDays(7)->year.'-'.Carbon::parse($fetchInfo['start'])->addDays(7)->month; $events = $this->getEventsByRole(); From 4bd6cede0d772e4abd519123f39af27e9e0ea2ff Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Tue, 28 Jan 2025 13:52:25 +0200 Subject: [PATCH 080/259] push and deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index af803b9..830a596 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_16 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_17 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index db9f569..63d1b16 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -164,10 +164,10 @@ protected function headerActions(): array if (in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray())) { return [$this->createConstraintAction()]; } - else{ - FilamentFullCalendarPlugin::get()->editable(false); - FilamentFullCalendarPlugin::get()->selectable(false); - } + // else{ + // FilamentFullCalendarPlugin::get()->editable(false); + // FilamentFullCalendarPlugin::get()->selectable(false); + // } } else { if (Task::exists()) { $actions = [ @@ -341,10 +341,10 @@ protected function modalActions(): array if ($this->model == Shift::class && $this->type == 'my') { return $changeAction; } - if (! (in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray()))) { - FilamentFullCalendarPlugin::get()->editable(false); - FilamentFullCalendarPlugin::get()->selectable(false); - } + // if (! (in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray()))) { + // FilamentFullCalendarPlugin::get()->editable(false); + // FilamentFullCalendarPlugin::get()->selectable(false); + // } return []; } From a6cffa0e6df99054c03c87e6d0a8bf096cbe1f2e Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Tue, 28 Jan 2025 15:05:41 +0200 Subject: [PATCH 081/259] push and deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 26 +++++++++++++++++----- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 830a596..354cda6 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_17 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_18 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 63d1b16..cd64c0b 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -339,12 +339,11 @@ protected function modalActions(): array return $basicActions; } if ($this->model == Shift::class && $this->type == 'my') { - return $changeAction; + return array_merge($changeAction, $basicActions); + } + if (! (in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray()))) { + return $basicActions; } - // if (! (in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray()))) { - // FilamentFullCalendarPlugin::get()->editable(false); - // FilamentFullCalendarPlugin::get()->selectable(false); - // } return []; } @@ -363,7 +362,11 @@ protected function getBasicActions() ]; }) ->visible(function ($arguments) { - if (! empty($arguments['event']) && $arguments['event']['start'] < now()) { + if ( + (! empty($arguments['event']) && $arguments['event']['start'] < now()) + || ($this->model === Shift::class && auth()->user()->getRoleNames()->count() === 1) + || ($this->model === Constraint::class && $this->type ==='my_soldiers' && ! (in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray()))) + ) { $this->refreshRecords(); return false; @@ -430,6 +433,17 @@ protected function getBasicActions() }), DeleteAction::make() ->outlined() + ->visible(function ($arguments) { + if ( + ! empty($arguments['event']) + || ($this->model === Shift::class && auth()->user()->getRoleNames()->count() === 1) + || ($this->model === Constraint::class && $this->type ==='my_soldiers' && ! (in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray()))) + ) { + return false; + } + + return true; + }) ->label(__('Delete')), ]; } From 20efbb17f018a63baa867d35f4f42240a7b52b75 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 29 Jan 2025 08:22:56 +0200 Subject: [PATCH 082/259] push and deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 72 +++++++++++----------- 2 files changed, 38 insertions(+), 36 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 354cda6..50e5825 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_18 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_19 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index cd64c0b..24cd626 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -20,13 +20,11 @@ use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Collection; use Illuminate\Support\Facades\Schema; -use Log; use Maatwebsite\Excel\Facades\Excel; use Saade\FilamentFullCalendar\Actions\CreateAction; use Saade\FilamentFullCalendar\Actions\DeleteAction; use Saade\FilamentFullCalendar\Actions\EditAction; use Saade\FilamentFullCalendar\Actions\ViewAction; -use Saade\FilamentFullCalendar\FilamentFullCalendarPlugin; use Saade\FilamentFullCalendar\Widgets\FullCalendarWidget; class CalendarWidget extends FullCalendarWidget @@ -53,8 +51,6 @@ class CalendarWidget extends FullCalendarWidget public function fetchEvents(array $fetchInfo): array { - FilamentFullCalendarPlugin::get()->editable(true); - FilamentFullCalendarPlugin::get()->selectable(true); $this->currentMonth = Carbon::parse($fetchInfo['start'])->addDays(7)->year.'-'.Carbon::parse($fetchInfo['start'])->addDays(7)->month; $events = $this->getEventsByRole(); @@ -164,10 +160,6 @@ protected function headerActions(): array if (in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray())) { return [$this->createConstraintAction()]; } - // else{ - // FilamentFullCalendarPlugin::get()->editable(false); - // FilamentFullCalendarPlugin::get()->selectable(false); - // } } else { if (Task::exists()) { $actions = [ @@ -327,25 +319,33 @@ protected function modalActions(): array $changeAction = $this->getChangeActions(); if ( - ($this->model == Constraint::class && $this->type == 'my') - || ($this->model == Constraint::class && $this->type == 'my_soldiers' && in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray())) - || ($this->model == Shift::class && $this->type == 'my_soldiers') - || ($this->model == Shift::class && $this->type == 'my' && array_intersect(auth()->user()->getRoleNames()->toArray(), ['manager', 'shifts-assignment', 'department-commander', 'team-commander'])) + $this->model == Shift::class && auth()->user()->getRoleNames()->count() === 1 || + $this->model == Constraint::class && $this->type == 'my_soldiers' && ! array_intersect(auth()->user()->getRoleNames()->toArray(), ['manager', 'shifts-assignment']) ) { - if ($this->model == Shift::class) { - return array_merge($changeAction, $basicActions); - } - - return $basicActions; + EditAction::make() + ->action(fn () => $this->refreshRecords()); } - if ($this->model == Shift::class && $this->type == 'my') { + // if ( + // ($this->model == Shift::class && $this->type == 'my') + // || ($this->model == Constraint::class && $this->type == 'my') + // || ($this->model == Constraint::class && $this->type == 'my_soldiers' && in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray())) + // || ($this->model == Shift::class && $this->type == 'my_soldiers') + // // || ($this->model == Shift::class && $this->type == 'my' && array_intersect(auth()->user()->getRoleNames()->toArray(), ['manager', 'shifts-assignment', 'department-commander', 'team-commander'])) + // ) { + if ($this->model == Shift::class) { return array_merge($changeAction, $basicActions); } - if (! (in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray()))) { - return $basicActions; - } - return []; + return $basicActions; + // } + // if ($this->model == Shift::class && $this->type == 'my') { + // return array_merge($changeAction, $basicActions); + // } + // if (! (in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray()))) { + // return $basicActions; + // } + + // return []; } protected function getBasicActions() @@ -364,11 +364,13 @@ protected function getBasicActions() ->visible(function ($arguments) { if ( (! empty($arguments['event']) && $arguments['event']['start'] < now()) - || ($this->model === Shift::class && auth()->user()->getRoleNames()->count() === 1) - || ($this->model === Constraint::class && $this->type ==='my_soldiers' && ! (in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray()))) + // || ($this->model === Shift::class && auth()->user()->getRoleNames()->count() === 1) + // || ($this->model === Constraint::class && $this->type === 'my_soldiers' && ! array_intersect(auth()->user()->getRoleNames()->toArray(), ['manager', 'shifts-assignment'])) ) { $this->refreshRecords(); + // $this->closeActionModal(); + // $this->viewAction(); return false; } @@ -433,17 +435,17 @@ protected function getBasicActions() }), DeleteAction::make() ->outlined() - ->visible(function ($arguments) { - if ( - ! empty($arguments['event']) - || ($this->model === Shift::class && auth()->user()->getRoleNames()->count() === 1) - || ($this->model === Constraint::class && $this->type ==='my_soldiers' && ! (in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray()))) - ) { - return false; - } - - return true; - }) + // ->visible(function ($arguments) { + // if ( + // ! empty($arguments['event']) + // || ($this->model === Shift::class && auth()->user()->getRoleNames()->count() === 1) + // || ($this->model === Constraint::class && $this->type === 'my_soldiers' && ! array_intersect(auth()->user()->getRoleNames()->toArray(), ['manager', 'shifts-assignment'])) + // ) { + // return false; + // } + + // return true; + // }) ->label(__('Delete')), ]; } From a0353bb91bda235ce4869af5fe24713b1b50d74f Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 29 Jan 2025 09:24:57 +0200 Subject: [PATCH 083/259] push and deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 63 ++++++++++++---------- 2 files changed, 35 insertions(+), 30 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 50e5825..f04511c 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_19 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_20 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 24cd626..d2e38f1 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -51,7 +51,7 @@ class CalendarWidget extends FullCalendarWidget public function fetchEvents(array $fetchInfo): array { - $this->currentMonth = Carbon::parse($fetchInfo['start'])->addDays(7)->year.'-'.Carbon::parse($fetchInfo['start'])->addDays(7)->month; + $this->currentMonth = Carbon::parse($fetchInfo['start'])->addDays(7)->year . '-' . Carbon::parse($fetchInfo['start'])->addDays(7)->month; $events = $this->getEventsByRole(); @@ -116,18 +116,18 @@ public function getEventsByRole() ->orWhereNull('soldier_id') ->get() ->filter(function (Model $object) use ($current_user_id) { - $soldier = Soldier::where('id', '=', $object->soldier_id)->first(); + $soldier = Soldier::where('id', '=', $object->soldier_id)->first(); - return ! $soldier || $soldier?->team?->department?->commander_id == $current_user_id; - }), + return !$soldier || $soldier?->team?->department?->commander_id == $current_user_id; + }), 'team-commander' => $this->model::where('soldier_id', '!=', $current_user_id) ->orWhereNull('soldier_id') ->get() ->filter(function (Model $object) use ($current_user_id) { - $soldier = Soldier::where('id', '=', $object->soldier_id)->first(); + $soldier = Soldier::where('id', '=', $object->soldier_id)->first(); - return ! $soldier || $soldier?->team?->commander_id == $current_user_id; - }), + return !$soldier || $soldier?->team?->commander_id == $current_user_id; + }), } : $this->model::where('soldier_id', '=', $current_user_id)->get(); } @@ -143,7 +143,7 @@ public function getFormSchema(): array protected function headerActions(): array { - $this->currentMonth ?? $this->currentMonth = Carbon::now()->year.'-'.Carbon::now()->month; + $this->currentMonth ?? $this->currentMonth = Carbon::now()->year . '-' . Carbon::now()->month; if ($this->lastFilterData != $this->filterData) { $this->refreshRecords(); $this->lastFilterData = $this->filterData; @@ -166,15 +166,15 @@ protected function headerActions(): array ActionGroup::make([ $this->downloadAssignmentsAction(), Action::make('Create shifts') - ->action(fn () => $this->runEvents()) + ->action(fn() => $this->runEvents()) ->label(__('Create shifts')) ->icon('heroicon-o-clipboard-document-check'), Action::make('Shifts assignment') - ->action(fn () => $this->runAlgorithm()) + ->action(fn() => $this->runAlgorithm()) ->label(__('Shifts assignment and Parallel shifts')) ->icon('heroicon-o-play'), Action::make('Reset assignment') - ->action(fn () => $this->resetShifts()) + ->action(fn() => $this->resetShifts()) ->label(__('Reset assignment')) ->icon('heroicon-o-arrow-path'), ]) @@ -231,14 +231,14 @@ protected function createConstraintAction() 'end_date' => $arguments['end'] ?? null, ]); }) - ->label($this->model::getTitle().' '.__('New')) - ->modalHeading(__('Create').' '.$this->model::getTitle()) + ->label($this->model::getTitle() . ' ' . __('New')) + ->modalHeading(__('Create') . ' ' . $this->model::getTitle()) ->disabled(function (array $arguments) use ($today) { $startDate = Carbon::parse($arguments['start'] ?? null); return $startDate->isBefore($today); }) - ->hidden($this->model === Shift::class && $this->type === 'my' && ! array_intersect(auth()->user()->getRoleNames()->toArray(), ['manager', 'shifts-assignment', 'department-commander', 'team-commander'])); + ->hidden($this->model === Shift::class && $this->type === 'my' && !array_intersect(auth()->user()->getRoleNames()->toArray(), ['manager', 'shifts-assignment', 'department-commander', 'team-commander'])); } protected function downloadAssignmentsAction() @@ -250,7 +250,7 @@ protected function downloadAssignmentsAction() return Excel::download(new ShiftsExport($this->currentMonth), __('File name', [ 'name' => auth()->user()->displayName, 'month' => $this->currentMonth, - ]).'.xlsx'); + ]) . '.xlsx'); }); } @@ -320,10 +320,15 @@ protected function modalActions(): array if ( $this->model == Shift::class && auth()->user()->getRoleNames()->count() === 1 || - $this->model == Constraint::class && $this->type == 'my_soldiers' && ! array_intersect(auth()->user()->getRoleNames()->toArray(), ['manager', 'shifts-assignment']) + $this->model == Constraint::class && $this->type == 'my_soldiers' && !auth()->user()->getRoleNames()->contains('shifts-assignment') && !auth()->user()->getRoleNames()->contains('manager') ) { - EditAction::make() - ->action(fn () => $this->refreshRecords()); + return [ + EditAction::make() + ->visible(function () { + $this->refreshRecords(); + return false; + }) + ]; } // if ( // ($this->model == Shift::class && $this->type == 'my') @@ -363,7 +368,7 @@ protected function getBasicActions() }) ->visible(function ($arguments) { if ( - (! empty($arguments['event']) && $arguments['event']['start'] < now()) + (!empty($arguments['event']) && $arguments['event']['start'] < now()) // || ($this->model === Shift::class && auth()->user()->getRoleNames()->count() === 1) // || ($this->model === Constraint::class && $this->type === 'my_soldiers' && ! array_intersect(auth()->user()->getRoleNames()->toArray(), ['manager', 'shifts-assignment'])) ) { @@ -390,7 +395,7 @@ protected function getBasicActions() ) ) : true ); - if (! empty($arguments) && $this->model === Shift::class) { + if (!empty($arguments) && $this->model === Shift::class) { $oldDate = date('l', strtotime($this->mountedActionsArguments[0]['oldEvent']['start'])); $newDate = date('l', strtotime($this->mountedActionsData[0]['start_date'])); $startOfWeek = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday']; @@ -408,12 +413,12 @@ protected function getBasicActions() return [ $action->makeExtraModalAction(__('Save'), ['save' => true]) ->color('primary') - ->disabled(! $canSave), + ->disabled(!$canSave), $action->makeExtraModalAction(__('Cancel'), ['cancel' => true]) ->color('primary'), ]; }) - ->modalHeading(__('Edit').' '.$this->model::getTitle()) + ->modalHeading(__('Edit') . ' ' . $this->model::getTitle()) ->outlined() ->action(function (array $data, array $arguments, Model $record): void { $data = method_exists($this->model, 'setData') ? $data = $this->model::setData($record, $data) : $data; @@ -421,7 +426,7 @@ protected function getBasicActions() $this->refreshRecords(); } if ($arguments['save'] ?? false) { - $columns = Schema::getColumnListing(strtolower(class_basename($this->model)).'s'); + $columns = Schema::getColumnListing(strtolower(class_basename($this->model)) . 's'); $filteredData = array_intersect_key($data, array_flip($columns)); $record = $this->model::find($record['id']); if ($record) { @@ -454,11 +459,11 @@ protected function getChangeActions() { return [ Shift::exchangeAction() - ->visible(fn (): bool => $this->displayButton()) + ->visible(fn(): bool => $this->displayButton()) ->outlined() ->cancelParentActions(), Shift::changeAction() - ->visible(fn (): bool => $this->displayButton()) + ->visible(fn(): bool => $this->displayButton()) ->outlined() ->cancelParentActions(), ]; @@ -466,12 +471,12 @@ protected function getChangeActions() protected function displayButton(): bool { - $record = is_array($this->mountedActionsData) && ! empty($this->mountedActionsData) + $record = is_array($this->mountedActionsData) && !empty($this->mountedActionsData) ? (object) $this->mountedActionsData[0] : (object) $this->mountedActionsData; $range = new Range($record->start_date, $record->end_date); - return $record->soldier_id !== null && ! $range->isPass(); + return $record->soldier_id !== null && !$range->isPass(); } protected function viewAction(): Action @@ -486,10 +491,10 @@ protected function viewAction(): Action 'end_date' => $arguments['event']['end'] ?? $record->end_date, ]; }) - ->modalFooterActions(fn (FullCalendarWidget $livewire) => [ + ->modalFooterActions(fn(FullCalendarWidget $livewire) => [ ...$livewire->getCachedModalActions(), ]) - ->modalHeading(__('View ').$this->model::getTitle()); + ->modalHeading(__('View ') . $this->model::getTitle()); } public function eventDidMount(): string From 83461128e34459914943ecdb0ee3eda7fdd4eecf Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 29 Jan 2025 11:15:47 +0200 Subject: [PATCH 084/259] push and deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 137 ++++++++++----------- database/seeders/DatabaseSeeder.php | 76 ++++++++++++ 3 files changed, 141 insertions(+), 74 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index f04511c..20b94d6 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_20 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_21 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index d2e38f1..ac61057 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -51,7 +51,7 @@ class CalendarWidget extends FullCalendarWidget public function fetchEvents(array $fetchInfo): array { - $this->currentMonth = Carbon::parse($fetchInfo['start'])->addDays(7)->year . '-' . Carbon::parse($fetchInfo['start'])->addDays(7)->month; + $this->currentMonth = Carbon::parse($fetchInfo['start'])->addDays(7)->year.'-'.Carbon::parse($fetchInfo['start'])->addDays(7)->month; $events = $this->getEventsByRole(); @@ -116,18 +116,18 @@ public function getEventsByRole() ->orWhereNull('soldier_id') ->get() ->filter(function (Model $object) use ($current_user_id) { - $soldier = Soldier::where('id', '=', $object->soldier_id)->first(); + $soldier = Soldier::where('id', '=', $object->soldier_id)->first(); - return !$soldier || $soldier?->team?->department?->commander_id == $current_user_id; - }), + return ! $soldier || $soldier?->team?->department?->commander_id == $current_user_id; + }), 'team-commander' => $this->model::where('soldier_id', '!=', $current_user_id) ->orWhereNull('soldier_id') ->get() ->filter(function (Model $object) use ($current_user_id) { - $soldier = Soldier::where('id', '=', $object->soldier_id)->first(); + $soldier = Soldier::where('id', '=', $object->soldier_id)->first(); - return !$soldier || $soldier?->team?->commander_id == $current_user_id; - }), + return ! $soldier || $soldier?->team?->commander_id == $current_user_id; + }), } : $this->model::where('soldier_id', '=', $current_user_id)->get(); } @@ -143,7 +143,7 @@ public function getFormSchema(): array protected function headerActions(): array { - $this->currentMonth ?? $this->currentMonth = Carbon::now()->year . '-' . Carbon::now()->month; + $this->currentMonth ?? $this->currentMonth = Carbon::now()->year.'-'.Carbon::now()->month; if ($this->lastFilterData != $this->filterData) { $this->refreshRecords(); $this->lastFilterData = $this->filterData; @@ -166,15 +166,15 @@ protected function headerActions(): array ActionGroup::make([ $this->downloadAssignmentsAction(), Action::make('Create shifts') - ->action(fn() => $this->runEvents()) + ->action(fn () => $this->runEvents()) ->label(__('Create shifts')) ->icon('heroicon-o-clipboard-document-check'), Action::make('Shifts assignment') - ->action(fn() => $this->runAlgorithm()) + ->action(fn () => $this->runAlgorithm()) ->label(__('Shifts assignment and Parallel shifts')) ->icon('heroicon-o-play'), Action::make('Reset assignment') - ->action(fn() => $this->resetShifts()) + ->action(fn () => $this->resetShifts()) ->label(__('Reset assignment')) ->icon('heroicon-o-arrow-path'), ]) @@ -231,14 +231,14 @@ protected function createConstraintAction() 'end_date' => $arguments['end'] ?? null, ]); }) - ->label($this->model::getTitle() . ' ' . __('New')) - ->modalHeading(__('Create') . ' ' . $this->model::getTitle()) + ->label($this->model::getTitle().' '.__('New')) + ->modalHeading(__('Create').' '.$this->model::getTitle()) ->disabled(function (array $arguments) use ($today) { $startDate = Carbon::parse($arguments['start'] ?? null); return $startDate->isBefore($today); }) - ->hidden($this->model === Shift::class && $this->type === 'my' && !array_intersect(auth()->user()->getRoleNames()->toArray(), ['manager', 'shifts-assignment', 'department-commander', 'team-commander'])); + ->hidden($this->model === Shift::class && $this->type === 'my' && ! array_intersect(auth()->user()->getRoleNames()->toArray(), ['manager', 'shifts-assignment', 'department-commander', 'team-commander'])); } protected function downloadAssignmentsAction() @@ -250,7 +250,7 @@ protected function downloadAssignmentsAction() return Excel::download(new ShiftsExport($this->currentMonth), __('File name', [ 'name' => auth()->user()->displayName, 'month' => $this->currentMonth, - ]) . '.xlsx'); + ]).'.xlsx'); }); } @@ -318,39 +318,11 @@ protected function modalActions(): array $basicActions = $this->getBasicActions(); $changeAction = $this->getChangeActions(); - if ( - $this->model == Shift::class && auth()->user()->getRoleNames()->count() === 1 || - $this->model == Constraint::class && $this->type == 'my_soldiers' && !auth()->user()->getRoleNames()->contains('shifts-assignment') && !auth()->user()->getRoleNames()->contains('manager') - ) { - return [ - EditAction::make() - ->visible(function () { - $this->refreshRecords(); - return false; - }) - ]; - } - // if ( - // ($this->model == Shift::class && $this->type == 'my') - // || ($this->model == Constraint::class && $this->type == 'my') - // || ($this->model == Constraint::class && $this->type == 'my_soldiers' && in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray())) - // || ($this->model == Shift::class && $this->type == 'my_soldiers') - // // || ($this->model == Shift::class && $this->type == 'my' && array_intersect(auth()->user()->getRoleNames()->toArray(), ['manager', 'shifts-assignment', 'department-commander', 'team-commander'])) - // ) { if ($this->model == Shift::class) { return array_merge($changeAction, $basicActions); } return $basicActions; - // } - // if ($this->model == Shift::class && $this->type == 'my') { - // return array_merge($changeAction, $basicActions); - // } - // if (! (in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray()))) { - // return $basicActions; - // } - - // return []; } protected function getBasicActions() @@ -367,15 +339,9 @@ protected function getBasicActions() ]; }) ->visible(function ($arguments) { - if ( - (!empty($arguments['event']) && $arguments['event']['start'] < now()) - // || ($this->model === Shift::class && auth()->user()->getRoleNames()->count() === 1) - // || ($this->model === Constraint::class && $this->type === 'my_soldiers' && ! array_intersect(auth()->user()->getRoleNames()->toArray(), ['manager', 'shifts-assignment'])) - ) { + if (! empty($arguments['event']) && $arguments['event']['start'] < now()) { $this->refreshRecords(); - // $this->closeActionModal(); - // $this->viewAction(); return false; } @@ -395,7 +361,7 @@ protected function getBasicActions() ) ) : true ); - if (!empty($arguments) && $this->model === Shift::class) { + if (! empty($arguments) && $this->model === Shift::class) { $oldDate = date('l', strtotime($this->mountedActionsArguments[0]['oldEvent']['start'])); $newDate = date('l', strtotime($this->mountedActionsData[0]['start_date'])); $startOfWeek = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday']; @@ -413,12 +379,12 @@ protected function getBasicActions() return [ $action->makeExtraModalAction(__('Save'), ['save' => true]) ->color('primary') - ->disabled(!$canSave), + ->disabled(! $canSave), $action->makeExtraModalAction(__('Cancel'), ['cancel' => true]) ->color('primary'), ]; }) - ->modalHeading(__('Edit') . ' ' . $this->model::getTitle()) + ->modalHeading(__('Edit').' '.$this->model::getTitle()) ->outlined() ->action(function (array $data, array $arguments, Model $record): void { $data = method_exists($this->model, 'setData') ? $data = $this->model::setData($record, $data) : $data; @@ -426,7 +392,7 @@ protected function getBasicActions() $this->refreshRecords(); } if ($arguments['save'] ?? false) { - $columns = Schema::getColumnListing(strtolower(class_basename($this->model)) . 's'); + $columns = Schema::getColumnListing(strtolower(class_basename($this->model)).'s'); $filteredData = array_intersect_key($data, array_flip($columns)); $record = $this->model::find($record['id']); if ($record) { @@ -440,17 +406,6 @@ protected function getBasicActions() }), DeleteAction::make() ->outlined() - // ->visible(function ($arguments) { - // if ( - // ! empty($arguments['event']) - // || ($this->model === Shift::class && auth()->user()->getRoleNames()->count() === 1) - // || ($this->model === Constraint::class && $this->type === 'my_soldiers' && ! array_intersect(auth()->user()->getRoleNames()->toArray(), ['manager', 'shifts-assignment'])) - // ) { - // return false; - // } - - // return true; - // }) ->label(__('Delete')), ]; } @@ -459,11 +414,11 @@ protected function getChangeActions() { return [ Shift::exchangeAction() - ->visible(fn(): bool => $this->displayButton()) + ->visible(fn (): bool => $this->displayButton()) ->outlined() ->cancelParentActions(), Shift::changeAction() - ->visible(fn(): bool => $this->displayButton()) + ->visible(fn (): bool => $this->displayButton()) ->outlined() ->cancelParentActions(), ]; @@ -471,12 +426,12 @@ protected function getChangeActions() protected function displayButton(): bool { - $record = is_array($this->mountedActionsData) && !empty($this->mountedActionsData) + $record = is_array($this->mountedActionsData) && ! empty($this->mountedActionsData) ? (object) $this->mountedActionsData[0] : (object) $this->mountedActionsData; $range = new Range($record->start_date, $record->end_date); - return $record->soldier_id !== null && !$range->isPass(); + return $record->soldier_id !== null && ! $range->isPass(); } protected function viewAction(): Action @@ -491,10 +446,21 @@ protected function viewAction(): Action 'end_date' => $arguments['event']['end'] ?? $record->end_date, ]; }) - ->modalFooterActions(fn(FullCalendarWidget $livewire) => [ - ...$livewire->getCachedModalActions(), - ]) - ->modalHeading(__('View ') . $this->model::getTitle()); + ->modalFooterActions( + function (ViewAction $action, FullCalendarWidget $livewire) { + if ( + $this->model == Shift::class && auth()->user()->getRoleNames()->count() === 1 || + $this->model == Constraint::class && $this->type == 'my_soldiers' && ! auth()->user()->getRoleNames()->contains('shifts-assignment') && ! auth()->user()->getRoleNames()->contains('manager') + ) { + return [$action->getModalCancelAction()]; + } + + return [ + ...$livewire->getCachedModalActions(), + ]; + } + ) + ->modalHeading(__('View ').$this->model::getTitle()); } public function eventDidMount(): string @@ -506,4 +472,29 @@ function({ event, timeText, isStart, isEnd, isMirror, isPast, isFuture, isToday, } JS; } + + public function onEventDrop(array $event, array $oldEvent, array $relatedEvents, array $delta, ?array $oldResource, ?array $newResource): bool + { + if ( + $this->model == Shift::class && auth()->user()->getRoleNames()->count() === 1 || + $this->model == Constraint::class && $this->type == 'my_soldiers' && ! auth()->user()->getRoleNames()->contains('shifts-assignment') && ! auth()->user()->getRoleNames()->contains('manager') + ) { + $this->refreshRecords(); + } else { + if ($this->getModel()) { + $this->record = $this->resolveRecord($event['id']); + } + $this->mountAction('edit', [ + 'type' => 'drop', + 'event' => $event, + 'oldEvent' => $oldEvent, + 'relatedEvents' => $relatedEvents, + 'delta' => $delta, + 'oldResource' => $oldResource, + 'newResource' => $newResource, + ]); + } + + return false; + } } diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 3c26a38..cf87a69 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -38,7 +38,83 @@ public function run(): void 'constraints_limit' => ConstraintType::getLimit(), ])->id, ])->assignRole(['soldier', 'manager']); + User::factory()->create([ + 'first_name' => 'מפקד', + 'last_name' => 'מדור 1', + 'password' => '1111111', + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => [], + 'capacity' => 10, + 'max_weekends' => 10, + 'max_shifts' => 10, + 'max_nights' => 10, + 'course' => 1, + 'is_reservist' => false, + 'constraints_limit' => ConstraintType::getLimit(), + ])->id, + ])->assignRole(['soldier']); + + User::factory()->create([ + 'first_name' => 'מפקד', + 'last_name' => 'צוות 1', + 'password' => '1111111', + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => [], + 'capacity' => 10, + 'max_weekends' => 10, + 'max_shifts' => 10, + 'max_nights' => 10, + 'course' => 1, + 'is_reservist' => false, + 'constraints_limit' => ConstraintType::getLimit(), + ])->id, + ])->assignRole(['soldier']); + User::factory()->create([ + 'first_name' => 'חייל', + 'last_name' => 'א', + 'password' => '1111111', + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => [], + 'capacity' => 10, + 'max_weekends' => 10, + 'max_shifts' => 10, + 'max_nights' => 10, + 'course' => 1, + 'is_reservist' => false, + 'constraints_limit' => ConstraintType::getLimit(), + ])->id, + ])->assignRole(['soldier']); + User::factory()->create([ + 'first_name' => 'חייל', + 'last_name' => 'ב', + 'password' => '1111111', + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => [], + 'capacity' => 10, + 'max_weekends' => 10, + 'max_shifts' => 10, + 'max_nights' => 10, + 'course' => 1, + 'is_reservist' => false, + 'constraints_limit' => ConstraintType::getLimit(), + ])->id, + ])->assignRole(['soldier']); + User::factory()->create([ + 'first_name' => 'משבץ', + 'last_name' => '1', + 'password' => '1111111', + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => [], + 'capacity' => 10, + 'max_weekends' => 10, + 'max_shifts' => 10, + 'max_nights' => 10, + 'course' => 1, + 'is_reservist' => false, + 'constraints_limit' => ConstraintType::getLimit(), + ])->id, + ])->assignRole(['soldier','shifts-assignment']); // User::factory()->create([ // 'first_name' => 'meshabetz mishmarot', // 'userable_id' => Soldier::factory()->create([ From 485f9f53c8a5fbc65cd87930f3d0885cf252dd1d Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 30 Jan 2025 12:29:40 +0200 Subject: [PATCH 085/259] deploy version --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 26 +++++++-- app/Livewire/MyDatabaseNotifications.php | 55 +++++++++++++++++++ app/Models/Constraint.php | 42 ++++++++++++++ app/Models/Shift.php | 2 +- .../Pages/CreateDepartment.php | 2 + .../Pages/EditDepartment.php | 18 ++++-- app/Resources/TaskResource.php | 7 ++- .../TeamResource/Pages/CreateTeam.php | 1 + app/Resources/TeamResource/Pages/EditTeam.php | 14 +++-- app/Services/ChangeAssignment.php | 8 +-- app/Services/ConcurrentTasks.php | 7 +-- app/Services/Helpers.php | 6 +- app/Services/ManualAssignment.php | 10 ++-- app/Services/Shift.php | 10 +++- app/Services/Soldier.php | 8 +-- lang/en.json | 8 ++- lang/he.json | 7 ++- tests/Feature/CalendarWidgetTest.php | 10 ---- tests/Feature/EditDepartmentTest.php | 14 +++++ tests/Unit/HelpersServiceTest.php | 4 +- tests/Unit/ShiftServiceTest.php | 48 +++++++++++----- tests/Unit/SoldierServiceTest.php | 28 +++++----- 23 files changed, 252 insertions(+), 85 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 20b94d6..708300d 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_21 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_22 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index ac61057..3941a00 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -392,9 +392,27 @@ protected function getBasicActions() $this->refreshRecords(); } if ($arguments['save'] ?? false) { + if ($this->model == Constraint::class) { + if ( + ($this->mountedActionsData[0]['constraint_type'] == ConstraintType::VACATION->value) || + ($this->mountedActionsData[0]['constraint_type'] == ConstraintType::MEDICAL->value) && + (auth()->user()->getRoleNames()->count() === 1) + ) { + $dataToEdit = [ + 'record' => $this->model::find($record['id']), + 'data' => $data, + 'model' => $this->model, + ]; + + Constraint::RequestEditConstraint($dataToEdit); + + return; + } + } $columns = Schema::getColumnListing(strtolower(class_basename($this->model)).'s'); $filteredData = array_intersect_key($data, array_flip($columns)); $record = $this->model::find($record['id']); + if ($record) { collect($filteredData)->map(function ($value, $key) use ($record) { $record->{$key} = $value; @@ -449,8 +467,8 @@ protected function viewAction(): Action ->modalFooterActions( function (ViewAction $action, FullCalendarWidget $livewire) { if ( - $this->model == Shift::class && auth()->user()->getRoleNames()->count() === 1 || - $this->model == Constraint::class && $this->type == 'my_soldiers' && ! auth()->user()->getRoleNames()->contains('shifts-assignment') && ! auth()->user()->getRoleNames()->contains('manager') + ($this->model == Shift::class && auth()->user()->getRoleNames()->count() === 1) || + ($this->model == Constraint::class && $this->type == 'my_soldiers' && ! auth()->user()->getRoleNames()->contains('shifts-assignment') && ! auth()->user()->getRoleNames()->contains('manager')) ) { return [$action->getModalCancelAction()]; } @@ -476,8 +494,8 @@ function({ event, timeText, isStart, isEnd, isMirror, isPast, isFuture, isToday, public function onEventDrop(array $event, array $oldEvent, array $relatedEvents, array $delta, ?array $oldResource, ?array $newResource): bool { if ( - $this->model == Shift::class && auth()->user()->getRoleNames()->count() === 1 || - $this->model == Constraint::class && $this->type == 'my_soldiers' && ! auth()->user()->getRoleNames()->contains('shifts-assignment') && ! auth()->user()->getRoleNames()->contains('manager') + ($this->model == Shift::class && $this->type == 'my' && auth()->user()->getRoleNames()->count() === 1) || + ($this->model == Constraint::class && $this->type == 'my_soldiers' && ! auth()->user()->getRoleNames()->contains('shifts-assignment') && ! auth()->user()->getRoleNames()->contains('manager')) ) { $this->refreshRecords(); } else { diff --git a/app/Livewire/MyDatabaseNotifications.php b/app/Livewire/MyDatabaseNotifications.php index 32cfb21..5944cd8 100644 --- a/app/Livewire/MyDatabaseNotifications.php +++ b/app/Livewire/MyDatabaseNotifications.php @@ -14,6 +14,7 @@ use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Contracts\View\View; use Illuminate\Database\Eloquent\Model; +use Illuminate\Support\Facades\Schema; use Livewire\Attributes\On; class MyDatabaseNotifications extends DatabaseNotifications @@ -897,6 +898,60 @@ protected function denyConstraintNotification($user, $constraintName, $startDate ); } + #[On('confirmConstraintEdit')] + public function confirmConstraintEdit($user, $data) + { + $this->confirmConstraintEditNotification($user, $data); + } + + protected function confirmConstraintEditNotification($user, $data) + { + $columns = Schema::getColumnListing(strtolower(class_basename($data['model'])).'s'); + $filteredData = array_intersect_key($data['data'], array_flip($columns)); + $record = $data['model']::find($data['record']['id']); + + if ($record) { + collect($filteredData)->map(function ($value, $key) use ($record) { + $record->{$key} = $value; + }); + $record->save(); + } + $this->sendNotification( + __('Your request to edit the constraint has been approved'), + __('Commander approved edit constraint', [ + 'name' => User::find($user)->displayName, + 'constraintName' => $data['data']['constraint_type'], + 'startDate' => $data['record']['start_date'], + 'endDate' => $data['record']['end_date'], + 'ToStartDate' => $data['data']['start_date'], + 'ToEndDate' => $data['data']['end_date'], + ]), + [], + User::find($user) + ); + } + + #[On('denyConstraintEdit')] + public function denyConstraintEdit($user, $constraintName, $startDate, $endDate) + { + $this->denyConstraintEditNotification($user, $constraintName, $startDate, $endDate); + } + + protected function denyConstraintEditNotification($user, $constraintName, $startDate, $endDate) + { + $this->sendNotification( + __('Your request to edit the constraint has been rejected'), + __('Commander deny edit constraint', [ + 'name' => User::find($user)->displayName, + 'constraintName' => $constraintName, + 'startDate' => $startDate, + 'endDate' => $endDate, + ]), + [], + User::find($user) + ); + } + protected function sendNotification($title, $body, $actions, $user, $commonKey = null) { MyNotification::make() diff --git a/app/Models/Constraint.php b/app/Models/Constraint.php index d57a4ea..ceacf4b 100644 --- a/app/Models/Constraint.php +++ b/app/Models/Constraint.php @@ -139,6 +139,48 @@ public static function requestConstraint($data) ->sendToDatabase($commander, true); } + public static function RequestEditConstraint($data) + { + $commander = Soldier::find(auth()->user()->userable_id)->team->commander->user; + Notification::make() + ->title(__('Do you approve the request to edit the constraint?')) + ->body( + __('Shift details edit', [ + 'name' => Soldier::find(auth()->user()->userable_id)->user->displayName, + 'startDate' => $data['record']['start_date']->format('Y-m-d H:i:s'), + 'endDate' => $data['record']['end_date']->format('Y-m-d H:i:s'), + 'ToStartDate' => $data['data']['start_date'], + 'ToEndDate' => $data['data']['end_date'], + 'type' => $data['data']['constraint_type'], + ]) + ) + ->actions( + [ + NotificationAction::make(__('Confirm')) + ->button() + ->icon('heroicon-s-hand-thumb-up') + ->color('success') + ->dispatch('confirmConstraintEdit', [ + 'user' => auth()->user()->id, + 'data' => $data, + ]) + ->close(), + NotificationAction::make(__('Deny')) + ->button() + ->icon('heroicon-m-hand-thumb-down') + ->color('danger') + ->dispatch('denyConstraintEdit', [ + 'user' => auth()->user()->id, + 'constraintName' => $data['data']['constraint_type'], + 'startDate' => $data['data']['start_date'], + 'endDate' => $data['data']['end_date'], + ]) + ->close(), + ] + ) + ->sendToDatabase($commander, true); + } + public static function getAvailableOptions($startDate, $endDate): array { return static::availableOptions($startDate, $endDate); diff --git a/app/Models/Shift.php b/app/Models/Shift.php index 5ea275a..cc5b42d 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -214,7 +214,7 @@ function ($shifts, $soldierId) use ($record) { ->description(self::description($soldierId, $record)) ->schema( $shifts->map( - function ($shift) use ($record) { + function (Shift $shift) use ($record) { return Section::make() ->id($shift->id) ->schema([ diff --git a/app/Resources/DepartmentResource/Pages/CreateDepartment.php b/app/Resources/DepartmentResource/Pages/CreateDepartment.php index c7f2bfa..2db63d5 100644 --- a/app/Resources/DepartmentResource/Pages/CreateDepartment.php +++ b/app/Resources/DepartmentResource/Pages/CreateDepartment.php @@ -3,6 +3,7 @@ namespace App\Resources\DepartmentResource\Pages; use App\Models\Department; +use App\Models\Soldier; use App\Models\Team; use App\Models\User; use App\Resources\DepartmentResource; @@ -80,6 +81,7 @@ protected function afterCreate() protected function assignRoles() { + Soldier::where('id', $this->record->commander_id)->update(['team_id' => null]); $user = User::where('userable_id', $this->record->commander_id)->first(); $user?->assignRole('department-commander'); } diff --git a/app/Resources/DepartmentResource/Pages/EditDepartment.php b/app/Resources/DepartmentResource/Pages/EditDepartment.php index 4ff729d..bc0e30b 100644 --- a/app/Resources/DepartmentResource/Pages/EditDepartment.php +++ b/app/Resources/DepartmentResource/Pages/EditDepartment.php @@ -3,6 +3,7 @@ namespace App\Resources\DepartmentResource\Pages; use App\Models\Department; +use App\Models\Soldier; use App\Models\Team; use App\Models\User; use App\Resources\DepartmentResource; @@ -16,11 +17,17 @@ class EditDepartment extends EditRecord protected function beforeSave(): void { - $teams = Team::where('commander_id', $this->data['commander_id'])->get(); - $departments = Department::where('commander_id', $this->data['commander_id'])->get(); - if ($teams->isNotEmpty() || $departments->isNotEmpty()) { - DepartmentResource::checkCommander($teams, $departments, $this->data); - $this->halt(); + if ($this->data['commander_id'] !== $this->record->commander_id) { + if (! $this->data['commander_id']) { + $user = User::where('userable_id', $this->record->commander_id)->first(); + $user->removeRole('department-commander'); + } + $teams = Team::where('commander_id', $this->data['commander_id'])->get(); + $departments = Department::where('commander_id', $this->data['commander_id'])->get(); + if ($teams->isNotEmpty() || $departments->isNotEmpty()) { + DepartmentResource::checkCommander($teams, $departments, $this->data); + $this->halt(); + } } } @@ -67,6 +74,7 @@ protected function afterSave() protected function assignRoles() { + Soldier::where('id', $this->record->commander_id)->update(['team_id' => null]); $user = User::where('userable_id', $this->record->commander_id)->first(); $user?->assignRole('department-commander'); } diff --git a/app/Resources/TaskResource.php b/app/Resources/TaskResource.php index 2cd71b4..36fad3d 100644 --- a/app/Resources/TaskResource.php +++ b/app/Resources/TaskResource.php @@ -287,7 +287,8 @@ public static function getTaskDetails(): array ->label(__('Department')) ->options(Department::all()->mapWithKeys(function ($department) { return [$department->name => $department->name]; - })), + })) + ->live(), TextInput::make('type') ->label(__('Type')) ->required(), @@ -392,7 +393,8 @@ function (Get $get) { ->visible( fn (Get $get): bool => $get('soldier_type') && $get('soldier_type') != 'me' - ), + ) + ->live(), Placeholder::make('') ->content(__('Assigning the soldier to this shift is your sole responsibility!')) ->extraAttributes(['style' => 'color: red; font-family: Arial, Helvetica, sans-serif; font-size: 20px']) @@ -483,6 +485,7 @@ protected static function taskDetails(Get $get) $task->is_night = $get('is_night'); $task->is_weekend = $get('is_weekend'); $task->in_parallel = $get('in_parallel'); + $task->concurrent_tasks = $get('concurrent_tasks') ?? []; $shift = new Shift; $shift->id = null; $shift->task = $task; diff --git a/app/Resources/TeamResource/Pages/CreateTeam.php b/app/Resources/TeamResource/Pages/CreateTeam.php index 02d3912..d76cc18 100644 --- a/app/Resources/TeamResource/Pages/CreateTeam.php +++ b/app/Resources/TeamResource/Pages/CreateTeam.php @@ -89,6 +89,7 @@ protected function attachSoldiers(): void protected function assignRoles() { + Soldier::where('id', $this->record->commander_id)->update(['team_id' => null]); $user = User::where('userable_id', $this->record->commander_id)->first(); $user->assignRole('team-commander'); } diff --git a/app/Resources/TeamResource/Pages/EditTeam.php b/app/Resources/TeamResource/Pages/EditTeam.php index 003c410..110572e 100644 --- a/app/Resources/TeamResource/Pages/EditTeam.php +++ b/app/Resources/TeamResource/Pages/EditTeam.php @@ -3,6 +3,7 @@ namespace App\Resources\TeamResource\Pages; use App\Models\Department; +use App\Models\Soldier; use App\Models\Team; use App\Models\User; use App\Resources\TeamResource; @@ -16,11 +17,13 @@ class EditTeam extends EditRecord protected function beforeSave(): void { - $teams = Team::where('commander_id', $this->data['commander_id'])->get(); - $departments = Department::where('commander_id', $this->data['commander_id'])->get(); - if ($teams->isNotEmpty() || $departments->isNotEmpty()) { - TeamResource::checkCommander($teams, $departments, $this->data); - $this->halt(); + if ($this->data['commander_id'] !== $this->record->commander_id) { + $teams = Team::where('commander_id', $this->data['commander_id'])->get(); + $departments = Department::where('commander_id', $this->data['commander_id'])->get(); + if ($teams->isNotEmpty() || $departments->isNotEmpty()) { + TeamResource::checkCommander($teams, $departments, $this->data); + $this->halt(); + } } } @@ -67,6 +70,7 @@ protected function afterSave(): void protected function assignRoles() { + Soldier::where('id', $this->record->commander_id)->update(['team_id' => null]); $user = User::where('userable_id', $this->record->commander_id)->first(); $user->assignRole('team-commander'); } diff --git a/app/Services/ChangeAssignment.php b/app/Services/ChangeAssignment.php index 39bcf85..c421fbf 100644 --- a/app/Services/ChangeAssignment.php +++ b/app/Services/ChangeAssignment.php @@ -48,7 +48,7 @@ public function getMatchingSoldiers() return $soldier->isQualified($this->shift->taskType) && $soldier->isAvailableBySpaces($this->shift->getShiftSpaces($soldier->shifts)) && ! $this->isConflictWithConstraints($soldier, $this->shift->range) - && $soldier->isAvailableByShifts($this->shift, Shift::find($this->shift->id)->task->in_parallel); + && $soldier->isAvailableByShifts($this->shift, $this->shift->inParallel); }) ->mapWithKeys(function (SoldierService $soldier) { return ! $soldier->isAvailableByConcurrentsShifts($this->shift) ? @@ -73,7 +73,7 @@ public function getMatchingShifts() && $this->soldier->isQualified($shift->taskType) && $this->soldier->isAvailableBySpaces($this->shift->getShiftSpaces($this->soldier->shifts)) && ! $this->isConflictWithConstraints($this->soldier, $range) - && $this->soldier->isAvailableByShifts($shift, Shift::find($shift->id)->task->in_parallel); + && $this->soldier->isAvailableByShifts($shift, $this->shift->inParallel); }) ->groupBy('soldier_id') ->filter(function ($shifts, $soldier_id) { @@ -88,7 +88,7 @@ public function getMatchingShifts() return $soldier->isQualified($this->shift->taskType) && $soldier->isAvailableBySpaces($this->shift->getShiftSpaces($soldier->shifts)) && ! $this->isConflictWithConstraints($soldier, $this->shift->range) - && $soldier->isAvailableByShifts($this->shift, Shift::find($this->shift->id)->task->in_parallel); + && $soldier->isAvailableByShifts($this->shift, $this->shift->inParallel); }); } @@ -114,4 +114,4 @@ public function exchange($shift) Shift::where('id', $shift->id)->update(['soldier_id' => Shift::find($this->shift->id)->soldier_id]); Shift::where('id', $this->shift->id)->update(['soldier_id' => $shift->soldier_id]); } -} +} \ No newline at end of file diff --git a/app/Services/ConcurrentTasks.php b/app/Services/ConcurrentTasks.php index b59ab24..d6b21f8 100644 --- a/app/Services/ConcurrentTasks.php +++ b/app/Services/ConcurrentTasks.php @@ -5,7 +5,6 @@ use App\Enums\Availability; use App\Models\Shift; use App\Models\Soldier; -use App\Models\Task; use App\Services\Shift as ShiftService; use App\Services\Soldier as SoldierService; use Carbon\Carbon; @@ -116,10 +115,8 @@ protected function getPotentialSoldiers($soldiers, ShiftService $shift) protected function isAvailableByShiftsAndSpaces($soldierShifts, ShiftService $shift): bool { - $tasksInParallel = Task::find(Shift::find($shift->id)->task_id)->concurrent_tasks; - - return ! $soldierShifts->contains(function (ShiftService $soldierShift) use ($shift, $tasksInParallel): bool { - return $soldierShift->range->isConflict($shift->range) && ! collect($tasksInParallel)->contains($soldierShift->taskType); + return ! $soldierShifts->contains(function (ShiftService $soldierShift) use ($shift): bool { + return $soldierShift->range->isConflict($shift->range) && ! collect($shift->inParalelTasks)->contains($soldierShift->taskType); }); } diff --git a/app/Services/Helpers.php b/app/Services/Helpers.php index a21ae2c..177620c 100644 --- a/app/Services/Helpers.php +++ b/app/Services/Helpers.php @@ -22,6 +22,8 @@ public static function buildShift(Shift $shift): ShiftService $shift->parallel_weight === null ? $shift->task->parallel_weight : $shift->parallel_weight, $shift->task->is_night, $shift->is_weekend !== null ? $shift->is_weekend : $shift->task->is_weekend, + $shift->task->in_parallel, + $shift->task->concurrent_tasks ); } @@ -88,7 +90,7 @@ public static function addShiftsSpaces($shifts) collect($shifts)->map(function (ShiftService $shift) use ($shifts, &$allSpaces) { $spaces = $shift->isWeekend || $shift->isNight ? $shift->getShiftSpaces($shifts) : null; if (! empty($spaces)) { - collect($spaces)->map(fn (Range $space) => $allSpaces->push(new ShiftService(0, '', $space->start, $space->end, 0, false, false))); + collect($spaces)->map(fn (Range $space) => $allSpaces->push(new ShiftService(0, '', $space->start, $space->end, 0, false, false, false, []))); } }); @@ -121,4 +123,4 @@ public static function updateShiftTable($assignments) { collect($assignments)->map(fn (Assignment $assignment) => Shift::where('id', $assignment->shiftId)->update(['soldier_id' => $assignment->soldierId])); } -} +} \ No newline at end of file diff --git a/app/Services/ManualAssignment.php b/app/Services/ManualAssignment.php index 6a3ebb3..ca850b5 100644 --- a/app/Services/ManualAssignment.php +++ b/app/Services/ManualAssignment.php @@ -73,10 +73,8 @@ protected function filterMySoldiers() }); } - protected function filterDepartment($name) + protected function filterDepartment($departmentName) { - $departmentName = $name ?: Shift::find($this->shift->id)->task?->department_name; - $this->soldiers = $this->soldiers ->filter(function ($user) use ($departmentName) { $soldier = Soldier::where('id', '=', $user->userable_id)->first(); @@ -136,7 +134,7 @@ public function amIAvailable(): bool return $soldier->isQualified($this->shift->taskType) && $soldier->isAvailableByMaxes($this->shift) && $soldier->isAvailableByConstraints($this->shift->range) != Availability::NO - && $soldier->isAvailableByShifts($this->shift, false) + && $soldier->isAvailableByShifts($this->shift, $this->shift->inParallel) && $soldier->isAvailableBySpaces($this->shift->getShiftSpaces($soldier->shifts)); } @@ -156,7 +154,7 @@ protected function getAvailableSoldiers() fn (SoldierService $soldier) => $soldier->isQualified($this->shift->taskType) && $soldier->isAvailableByMaxes($this->shift) && $soldier->isAvailableByConstraints($this->shift->range) != Availability::NO - && $soldier->isAvailableByShifts($this->shift, Shift::find($this->shift->id)->task?->in_parallel) + && $soldier->isAvailableByShifts($this->shift, $this->shift->inParallel) && $soldier->isAvailableBySpaces($this->shift->getShiftSpaces($soldier->shifts)) ); @@ -178,4 +176,4 @@ function (SoldierService $soldier) use ($soldiersWithConcurrentsShifts) { } ); } -} +} \ No newline at end of file diff --git a/app/Services/Shift.php b/app/Services/Shift.php index 0641950..fe03e56 100644 --- a/app/Services/Shift.php +++ b/app/Services/Shift.php @@ -18,7 +18,11 @@ class Shift public $isWeekend; - public function __construct($id, string $taskType, $start, $end, float $points, bool $isNight, bool $isWeekend) + public $inParallel; + + public $inParalelTasks; + + public function __construct($id, string $taskType, $start, $end, float $points, bool $isNight, bool $isWeekend, $inParallel, $inParalelTasks) { $this->id = $id; $this->taskType = $taskType; @@ -26,6 +30,8 @@ public function __construct($id, string $taskType, $start, $end, float $points, $this->points = $points; $this->isNight = $isNight; $this->isWeekend = $isWeekend; + $this->inParallel = $inParallel; + $this->inParalelTasks = $inParalelTasks; } public function getShiftSpaces($shifts) @@ -82,4 +88,4 @@ protected function name(): string { return $this->taskType.': from'.$this->range->start.' to'.$this->range->end; } -} +} \ No newline at end of file diff --git a/app/Services/Soldier.php b/app/Services/Soldier.php index 7beb179..710854e 100644 --- a/app/Services/Soldier.php +++ b/app/Services/Soldier.php @@ -66,9 +66,7 @@ public function isAvailableByShifts(Shift $shift, bool $inParallel): bool { return $inParallel ? ! $this->shifts->contains(function (Shift $soldierShift) use ($shift): bool { - $tasksInParallel = Task::find(ShiftModel::find($shift->id)->task_id)->concurrent_tasks; - - return $soldierShift->range->isConflict($shift->range) && ! collect($tasksInParallel)->contains($shift->taskType); + return $soldierShift->range->isConflict($shift->range) && ! collect($shift->inParalelTasks)->contains($shift->taskType); }) : ! $this->shifts->contains(function (Shift $soldierShift) use ($shift) { return $soldierShift->range->isConflict($shift->range); @@ -133,6 +131,6 @@ public function assign(Shift $shift, $spaces): void protected function addSpaces($spaces) { - collect($spaces)->map(fn ($space) => $this->shifts->push(new Shift(0, '', $space->start, $space->end, 0, false, false))); + collect($spaces)->map(fn ($space) => $this->shifts->push(new Shift(0, '', $space->start, $space->end, 0, false, false, false, []))); } -} +} \ No newline at end of file diff --git a/lang/en.json b/lang/en.json index 16fbb63..f6b8b73 100644 --- a/lang/en.json +++ b/lang/en.json @@ -41,6 +41,8 @@ "Range less than equal":":label is less than or equal :value", "Commander approved create constraint":"Hello :name!
Your request to create a constraint :constraintName
From :startDate to :endDate
Has been approved!
Have a good day!", "Commander deny create constraint":"Hello :name!
Your request to create a constraint :constraintName
From :startDate to :endDate
Has been rejected!
Have a good day!", - "This task is assigned to":"This task is assigned to :soldierName" - -} + "This task is assigned to":"This task is assigned to :soldierName", + "Shift details edit":"Soldier :name requests your permission to edit the :type constraint and move it:
from :startDate to :endDate.
to :ToStartDate to :ToEndDate.
Do you approve?", + "Commander approved edit constraint": "Hello :name!
Your request to edit constraint :constraintName
to move from date: :startDate to :endDate to date: :ToStartDate to :ToEndDate
has been approved!
The change has been updated successfully!
Have a nice day!", + "Commander deny edit constraint":"Hello :name!
Your request to move constraint :constraintName
from: :startDate to :endDate
has been rejected!
Have a nice day!" +} \ No newline at end of file diff --git a/lang/he.json b/lang/he.json index b21834d..f9ad860 100644 --- a/lang/he.json +++ b/lang/he.json @@ -192,7 +192,6 @@ "Personal Information": "נתונים אישיים", "Personal number": "מספר אישי", "Points":"נקודות", - "points":"נקודות", "Qualifications": "הסמכות", "Recurring": "חזרתיות", "Recurring type": "סוג חזרתיות", @@ -300,5 +299,9 @@ "Concurrent tasks":"משימות במקביל", "Select concurrent tasks":"בחר משימות", "No tasks":"אין משימות", - "The soldier is assigned a shift during the task":"לחייל מוקצית תורנות בזמן המשמרת" + "The soldier is assigned a shift during the task":"לחייל מוקצית תורנות בזמן המשמרת", + "Shift details edit":"החייל :name מבקש את האישור שלך לערוך את האילוץ :type שלו ולהזיז אותו ל:
מ :startDate עד :endDate.
ל :ToStartDate עד :ToEndDate.
האם אתה מאשר?", + "Commander approved edit constraint": "שלום :name!
בקשתך לעריכת האילוץ :constraintName
להזיזו מהתאריך: :startDate עד :endDate לתאריך: :ToStartDate עד :ToEndDate
אושרה!
האילוץ עודכן בהצלחה !
המשך יום טוב!", + "Commander deny edit constraint":"שלום :name!
בקשתך להזזת האילוץ :constraintName
מ: :startDate עד :endDate
נדחתה!
המשך יום טוב!" + } diff --git a/tests/Feature/CalendarWidgetTest.php b/tests/Feature/CalendarWidgetTest.php index 4c18d73..647905e 100644 --- a/tests/Feature/CalendarWidgetTest.php +++ b/tests/Feature/CalendarWidgetTest.php @@ -171,16 +171,6 @@ expect($calendar->effects['returns'][0])->toHaveCount(count: 2); }); -it('prevent create\edit the soldiers events', function () { - - livewire(CalendarWidget::class, [ - 'model' => Constraint::class, - 'type' => 'my_soldiers', - ]); - expect(Saade\FilamentFullCalendar\FilamentFullCalendarPlugin::get()->isSelectable())->toBeFalse(); - expect(Saade\FilamentFullCalendar\FilamentFullCalendarPlugin::get()->isEditable())->toBeFalse(); -}); - it('should refresh the fullcalendar', function () { livewire(CalendarWidget::class, [ 'model' => Shift::class, diff --git a/tests/Feature/EditDepartmentTest.php b/tests/Feature/EditDepartmentTest.php index 2e4a576..55a5533 100644 --- a/tests/Feature/EditDepartmentTest.php +++ b/tests/Feature/EditDepartmentTest.php @@ -30,3 +30,17 @@ expect($commander->getRoleNames()->contains('department-commander'))->toBe(true); }); + +it('should remove department-commander role to the commander', function () { + $commander = User::factory()->create(); + $department = Department::factory()->create(['commander_id' => $commander->id]); + $commander->assignRole('department-commander'); + livewire(EditDepartment::class, [ + 'record' => $department->id, + ]) + ->set('data.commander_id', null) + ->call('save') + ->assertHasNoFormErrors(); + + expect($commander->getRoleNames()->contains('department-commander'))->toBeFalse(); +}); diff --git a/tests/Unit/HelpersServiceTest.php b/tests/Unit/HelpersServiceTest.php index 6e9d15a..28fb392 100644 --- a/tests/Unit/HelpersServiceTest.php +++ b/tests/Unit/HelpersServiceTest.php @@ -22,6 +22,8 @@ $shift->parallel_weight, $shift->task->is_night, $shift->is_weekend, + $shift->task->in_parallel, + $shift->task->concurrent_tasks ); expect(Helpers::buildShift($shift))->toBeInstanceOf(App\Services\Shift::class); expect(Helpers::buildShift($shift))->toEqual($shiftService); @@ -113,4 +115,4 @@ 'id' => $shift->id, 'soldier_id' => $soldier->id, ]); -}); +}); \ No newline at end of file diff --git a/tests/Unit/ShiftServiceTest.php b/tests/Unit/ShiftServiceTest.php index 8f19955..5dd93f1 100644 --- a/tests/Unit/ShiftServiceTest.php +++ b/tests/Unit/ShiftServiceTest.php @@ -13,7 +13,9 @@ '2024-12-18 06:00:00', 0.25, true, - false + false, + false, + [] ); $result = $shift->getShiftSpaces([]); @@ -39,7 +41,9 @@ '2024-11-09 09:00:00', 0.25, false, - true + true, + false, + [] ); $result = $shift->getShiftSpaces([]); @@ -60,7 +64,7 @@ $range = new Range('2024-11-08 16:30:00', '2024-11-09 22:00:00'); - $shift = new Shift(1, 'test', '2024-11-08 16:30:00', '2024-11-09 22:00:00', 0.25, false, true); + $shift = new Shift(1, 'test', '2024-11-08 16:30:00', '2024-11-09 22:00:00', 0.25, false, true, false, []); $reflection = new ReflectionClass(Shift::class); $method = $reflection->getMethod('getWeekendSpaces'); @@ -87,7 +91,9 @@ '2024-11-16 18:30:00', 0.25, false, - true + true, + false, + [] ); $reflection = new ReflectionClass(Shift::class); @@ -106,7 +112,9 @@ '2024-11-09 18:30:00', 0.25, false, - true + true, + false, + [] ); $reflection = new ReflectionClass(Shift::class); @@ -126,7 +134,9 @@ '2024-11-16 18:30:00', 0.25, false, - true + true, + false, + [] ); $reflection = new ReflectionClass(Shift::class); @@ -146,7 +156,9 @@ '2024-11-11 18:00:00', 0.25, false, - true + true, + false, + [] ); $reflection = new ReflectionClass(Shift::class); @@ -166,7 +178,9 @@ '2024-11-11 18:00:00', 0.25, false, - true + true, + false, + [] ); $reflection = new ReflectionClass(Shift::class); @@ -185,7 +199,9 @@ '2024-11-09 18:30:00', 0.25, false, - true + true, + false, + [] )]; $shift = new App\Services\Shift( 1, @@ -194,7 +210,9 @@ '2024-11-08 18:00:00', 0.25, false, - true + true, + false, + [] ); $range = new Range('2024-11-08 16:30:00', '2024-11-08 18:00:00'); $reflection = new ReflectionClass(Shift::class); @@ -214,7 +232,9 @@ '2024-11-16 18:30:00', 0.25, false, - true + true, + false, + [] )]; $range = new Range('2024-11-08 16:30:00', '2024-11-08 18:00:00'); $shift = new App\Services\Shift( @@ -224,7 +244,9 @@ '2024-11-08 18:00:00', 0.25, false, - true + true, + false, + [] ); $reflection = new ReflectionClass(Shift::class); @@ -233,4 +255,4 @@ $result = $method->invoke($shift, $shifts, $range, DaysInWeek::SATURDAY); expect($result)->toBeFalse(); -}); +}); \ No newline at end of file diff --git a/tests/Unit/SoldierServiceTest.php b/tests/Unit/SoldierServiceTest.php index 2b8aa2c..bd03981 100644 --- a/tests/Unit/SoldierServiceTest.php +++ b/tests/Unit/SoldierServiceTest.php @@ -14,47 +14,47 @@ it('should return true if the soldier able to take the shift', function () { $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(5), new MaxData(3), ['Run'], []); - $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 18), 2, false, false); + $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 18), 2, false, false, false, []); expect($soldier->isAbleTake($shift, []))->toBeTrue(); }); it('should return false if the soldier cant take the shift', function () { $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(5), new MaxData(3), ['Run'], []); - $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 18), 4, false, false); + $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 18), 4, false, false, false, []); expect($soldier->isAbleTake($shift, []))->toBeFalse(); }); it('should return true if the soldier available by maxes', function () { $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(5), new MaxData(3), ['Run'], []); - $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 18), 1, false, false); + $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 18), 1, false, false, false, []); $soldier->isAvailableByMaxes($shift); expect($soldier->isAvailableByMaxes($shift))->toBeTrue(); }); it('should return false if the soldier is not available by maxes', function () { $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(0), new MaxData(3), ['Run'], []); - $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 21), 1, true, false); + $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 21), 1, true, false, false, []); expect($soldier->isAvailableByMaxes($shift))->toBeFalse(); }); it('should return true if the soldier is available by shifts', function () { - $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 19), Carbon::create(2024, 5, 14, 21), 1, true, false); + $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 19), Carbon::create(2024, 5, 14, 21), 1, true, false, false, []); $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(0), new MaxData(3), ['Run'], []); $soldier->assign($shift, []); - $shift = new Shift(1, 'go', Carbon::create(2024, 5, 14, 16), Carbon::create(2024, 5, 14, 18), 0, false, false); + $shift = new Shift(1, 'go', Carbon::create(2024, 5, 14, 16), Carbon::create(2024, 5, 14, 18), 0, false, false, false, []); expect($soldier->isAvailableByShifts($shift, false))->toBeTrue(); }); it('should return false if the soldier is not available by shifts', function () { - $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 21), 1, true, false); + $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 21), 1, true, false, false, []); $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(0), new MaxData(3), ['Run'], []); $soldier->assign($shift, []); - $shift = new Shift(1, 'go', Carbon::create(2024, 5, 14, 16), Carbon::create(2024, 5, 14, 18), 0, false, false); + $shift = new Shift(1, 'go', Carbon::create(2024, 5, 14, 16), Carbon::create(2024, 5, 14, 18), 0, false, false, false, []); expect($soldier->isAvailableByShifts($shift, false))->toBeFalse(); }); it('should return true if the soldier is available by spaces', function () { - $shifts = [new Shift(2, '', '2025-01-05', '2025-01-06', 0, false, false)]; + $shifts = [new Shift(2, '', '2025-01-05', '2025-01-06', 0, false, false, false, [])]; $spaces = [new Range('2025-01-02', '2025-01-03')]; $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(5), new MaxData(3), [], [], $shifts, []); expect($soldier->isAvailableBySpaces($spaces))->toBeTrue(); @@ -62,7 +62,7 @@ it('should return false if the soldier is not available by spaces', function () { $spaces = [new Range('2025-01-04', '2025-01-07')]; - $shifts = [new Shift(2, 'run', '2025-01-05', '2025-01-06', 0, false, false)]; + $shifts = [new Shift(2, 'run', '2025-01-05', '2025-01-06', 0, false, false, false, [])]; $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(5), new MaxData(3), [], [], $shifts, []); expect($soldier->isAvailableBySpaces($spaces))->toBeFalse(); }); @@ -70,7 +70,7 @@ it('should return true if the soldier is available by concurrents shifts', function () { $shift = ShiftModel::factory()->create(['start_date' => '2025-01-08', 'end_date' => '2025-01-09', 'task_id' => Task::factory()->create(['type' => 'sing', 'in_parallel' => true, 'concurrent_tasks' => ['run']])->id]); $concurrentsShifts = [Helpers::buildShift($shift)]; - $shift = new Shift(2, 'run', '2025-01-08', '2025-01-09', 0, false, false); + $shift = new Shift(2, 'run', '2025-01-08', '2025-01-09', 0, false, false, false, []); $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(5), new MaxData(3), [], [], [], $concurrentsShifts); expect($soldier->isAvailableByConcurrentsShifts($shift))->toBeTrue(); }); @@ -78,7 +78,7 @@ it('should return false if the soldier is not available by concurrents shifts', function () { $shift = ShiftModel::factory()->create(['start_date' => '2025-01-08', 'end_date' => '2025-01-09', 'task_id' => Task::factory()->create(['type' => 'sing', 'in_parallel' => true, 'concurrent_tasks' => ['run']])->id]); $concurrentsShifts = [Helpers::buildShift($shift)]; - $shift = new Shift(2, 'go', '2025-01-08', '2025-01-09', 0, false, false); + $shift = new Shift(2, 'go', '2025-01-08', '2025-01-09', 0, false, false, false, []); $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(5), new MaxData(3), [], [], [], $concurrentsShifts); expect($soldier->isAvailableByConcurrentsShifts($shift))->toBeFalse(); }); @@ -100,7 +100,7 @@ it('should assign shift to soldier and update all details', function () { $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(0), new MaxData(3), ['Run'], []); - $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 21), 2.75, true, false); + $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 21), 2.75, true, false, false, []); $soldier->assign($shift, []); expect($soldier->shifts->count())->toBe(1); expect($soldier->pointsMaxData->used)->toBe(2.75); @@ -117,4 +117,4 @@ it('should return false if the soldier is not qualified to the task', function () { $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(0), new MaxData(3), ['Run'], []); expect($soldier->isQualified('Clean'))->toBeFalse(); -}); +}); \ No newline at end of file From 35a3a4dc83099f4a68998ddad26153d1f77ac37c Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 2 Feb 2025 13:58:30 +0200 Subject: [PATCH 086/259] deploy version --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 4 +- app/Models/Constraint.php | 8 +- app/Models/Team.php | 2 +- .../Pages/EditDepartment.php | 6 +- app/Resources/SoldierResource.php | 143 ++++++++++-------- .../SoldierResource/Pages/ListSoldiers.php | 12 +- app/Resources/TaskResource.php | 5 +- app/Resources/TeamResource.php | 19 ++- app/Resources/TeamResource/Pages/EditTeam.php | 18 +++ app/Services/ChangeAssignment.php | 2 +- app/Services/FixedConstraints.php | 2 +- app/Services/Helpers.php | 2 +- app/Services/ManualAssignment.php | 2 +- app/Services/Shift.php | 2 +- app/Services/Soldier.php | 2 +- database/seeders/DatabaseSeeder.php | 24 +-- lang/en.json | 2 +- tests/Feature/EditTeamTest.php | 50 ++++++ tests/Feature/ListTeamTest.php | 7 +- tests/Unit/HelpersServiceTest.php | 2 +- tests/Unit/ShiftServiceTest.php | 2 +- tests/Unit/SoldierServiceTest.php | 2 +- 23 files changed, 209 insertions(+), 111 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 708300d..d9a087c 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_22 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_23 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 3941a00..a1964cd 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -470,7 +470,9 @@ function (ViewAction $action, FullCalendarWidget $livewire) { ($this->model == Shift::class && auth()->user()->getRoleNames()->count() === 1) || ($this->model == Constraint::class && $this->type == 'my_soldiers' && ! auth()->user()->getRoleNames()->contains('shifts-assignment') && ! auth()->user()->getRoleNames()->contains('manager')) ) { - return [$action->getModalCancelAction()]; + return $this->model === Shift::class ? + [...$this->getChangeActions()] : + [$action->getModalCancelAction()]; } return [ diff --git a/app/Models/Constraint.php b/app/Models/Constraint.php index ceacf4b..c7706a5 100644 --- a/app/Models/Constraint.php +++ b/app/Models/Constraint.php @@ -71,7 +71,10 @@ public static function getSchema(): array ->label(__('Constraint Name')) ->inline() ->visibleOn('view') - ->options(fn (Constraint $constraint) => [$constraint->constraint_type]), + ->options(fn (Constraint $constraint) => [ + ConstraintType::from($constraint->constraint_type)->getLabel(), + ]), + Hidden::make('start_date') ->required(), Hidden::make('end_date') @@ -202,6 +205,9 @@ private static function availableOptions($startDate, $endDate): array unset($options[ConstraintType::NOT_WEEKEND->value]); unset($options[ConstraintType::LOW_PRIORITY_NOT_WEEKEND->value]); } + if (! $start_date->isSunday()) { + unset($options[ConstraintType::NOT_SUNDAY_MORNING->value]); + } if (! (in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray()))) { $usedCounts = self::getUsedCountsForCurrentMonth($startDate, $endDate); $limits = Soldier::where('id', auth()->user()->userable_id)->pluck('constraints_limit')->first() ?: ConstraintType::getLimit(); diff --git a/app/Models/Team.php b/app/Models/Team.php index 3711a99..c7c9fba 100644 --- a/app/Models/Team.php +++ b/app/Models/Team.php @@ -25,7 +25,7 @@ public function department(): BelongsTo return $this->belongsTo(Department::class); } - public function soldiers(): HasMany + public function members(): HasMany { return $this->hasMany(Soldier::class); } diff --git a/app/Resources/DepartmentResource/Pages/EditDepartment.php b/app/Resources/DepartmentResource/Pages/EditDepartment.php index bc0e30b..d91e39c 100644 --- a/app/Resources/DepartmentResource/Pages/EditDepartment.php +++ b/app/Resources/DepartmentResource/Pages/EditDepartment.php @@ -18,10 +18,8 @@ class EditDepartment extends EditRecord protected function beforeSave(): void { if ($this->data['commander_id'] !== $this->record->commander_id) { - if (! $this->data['commander_id']) { - $user = User::where('userable_id', $this->record->commander_id)->first(); - $user->removeRole('department-commander'); - } + $user = User::where('userable_id', $this->record->commander_id)->first(); + $user->removeRole('department-commander'); $teams = Team::where('commander_id', $this->data['commander_id'])->get(); $departments = Department::where('commander_id', $this->data['commander_id'])->get(); if ($teams->isNotEmpty() || $departments->isNotEmpty()) { diff --git a/app/Resources/SoldierResource.php b/app/Resources/SoldierResource.php index ea5021c..7dfe21e 100644 --- a/app/Resources/SoldierResource.php +++ b/app/Resources/SoldierResource.php @@ -412,73 +412,84 @@ public static function constraintsLimit() Fieldset::make('constraints') ->label(__('Constraints limit')) ->schema([ - Group::make([ - Toggle::make('not_thursday_evening') - ->label(__('Not Thursday evening constraint')), - Toggle::make('not_sunday_morning') - ->label(__('Not Sunday morning constraint')), - ])->columns(2), - Group::make([ - TextInput::make('Not weekend') - ->label(__('Not weekend')) - ->numeric() - ->minValue(0) - ->required() - ->default(ConstraintType::getLimit()['Not weekend']), - TextInput::make('Low priority not weekend') - ->label(__('Low priority not weekend')) - ->numeric() - ->minValue(0) - ->required() - ->default(ConstraintType::getLimit()['Low priority not weekend']), - TextInput::make('Not task') - ->label(__('Not task')) - ->numeric() - ->minValue(0) - ->required() - ->default(ConstraintType::getLimit()['Not task']), - TextInput::make('Low priority not task') - ->label(__('Low priority not task')) - ->numeric() - ->minValue(0) - ->required() - ->default(ConstraintType::getLimit()['Low priority not task']), - TextInput::make('Not evening') - ->label(__('Not evening')) - ->numeric() - ->minValue(0) - ->required() - ->default(ConstraintType::getLimit()['Not evening']), - TextInput::make('Not Thursday evening') - ->label(__('Not Thursday evening')) - ->numeric() - ->minValue(0) - ->required() - ->default(ConstraintType::getLimit()['Not Thursday evening']), - TextInput::make('Vacation') - ->label(__('Vacation')) - ->numeric() - ->minValue(0) - ->required() - ->default(ConstraintType::getLimit()['Vacation']), - TextInput::make('Medical') - ->label(__('Medical')) - ->numeric() - ->minValue(0) - ->required() - ->default(ConstraintType::getLimit()['Medical']), - TextInput::make('School') - ->label(__('School')) - ->numeric() - ->minValue(0) - ->required() - ->default(ConstraintType::getLimit()['School']), - ]) - ->statePath('constraints_limit') - ->columns(9) - ->columnSpan(3) - ->label('Constraints'), + Section::make([ + Group::make([ + Toggle::make('not_thursday_evening') + ->label(__('Not Thursday evening constraint')), + Toggle::make('not_sunday_morning') + ->label(__('Not Sunday morning constraint')), + ])->columns(2), + ]), + Section::make([ + Group::make([ + TextInput::make('Not weekend') + ->label(__('Not weekend')) + ->numeric() + ->minValue(0) + ->required() + ->default(ConstraintType::getLimit()['Not weekend']), + TextInput::make('Low priority not weekend') + ->label(__('Low priority not weekend')) + ->numeric() + ->minValue(0) + ->required() + ->default(ConstraintType::getLimit()['Low priority not weekend']), + TextInput::make('Not task') + ->label(__('Not task')) + ->numeric() + ->minValue(0) + ->required() + ->default(ConstraintType::getLimit()['Not task']), + TextInput::make('Low priority not task') + ->label(__('Low priority not task')) + ->numeric() + ->minValue(0) + ->required() + ->default(ConstraintType::getLimit()['Low priority not task']), + TextInput::make('Not evening') + ->label(__('Not evening')) + ->numeric() + ->minValue(0) + ->required() + ->default(ConstraintType::getLimit()['Not evening']), + TextInput::make('Not Thursday evening') + ->label(__('Not Thursday evening')) + ->numeric() + ->minValue(0) + ->required() + ->default(ConstraintType::getLimit()['Not Thursday evening']), + TextInput::make('Not Sunday morning') + ->label(__('Not Sunday morning')) + ->numeric() + ->minValue(0) + ->required() + ->default(ConstraintType::getLimit()['Not Sunday morning']), + TextInput::make('Vacation') + ->label(__('Vacation')) + ->numeric() + ->minValue(0) + ->required() + ->default(ConstraintType::getLimit()['Vacation']), + TextInput::make('Medical') + ->label(__('Medical')) + ->numeric() + ->minValue(0) + ->required() + ->default(ConstraintType::getLimit()['Medical']), + TextInput::make('School') + ->label(__('School')) + ->numeric() + ->minValue(0) + ->required() + ->default(ConstraintType::getLimit()['School']), + ]) + ->statePath('constraints_limit') + ->columns(10) + ->columnSpan(3) + ->label('Constraints'), + ]), ]), + ]; } diff --git a/app/Resources/SoldierResource/Pages/ListSoldiers.php b/app/Resources/SoldierResource/Pages/ListSoldiers.php index 8e9d7ca..ba7b21f 100644 --- a/app/Resources/SoldierResource/Pages/ListSoldiers.php +++ b/app/Resources/SoldierResource/Pages/ListSoldiers.php @@ -64,12 +64,18 @@ protected function getHeaderActions(): array $fields = ['max_shifts', 'max_nights', 'max_weekends', 'capacity', 'qualifications']; foreach ($fields as $field) { - if (isset($data[$field])) { - $updateData[$field] = ($field === 'qualifications') ? json_encode($data[$field]) : $data[$field]; + if (isset($data[$field]) && ! ($field === 'qualifications' && empty($data[$field]))) { + $updateData[$field] = $data[$field]; } } if (! empty($updateData)) { - Soldier::where('course', $selectedCourse)->update($updateData); + $soldiers = Soldier::where('course', $selectedCourse)->get(); + $soldiers->map(function ($soldier) use ($updateData) { + collect($updateData)->map(function ($value, $key) use ($soldier) { + $soldier->{$key} = $value; + }); + $soldier->save(); + }); } }), ]; diff --git a/app/Resources/TaskResource.php b/app/Resources/TaskResource.php index 36fad3d..6ea2c3d 100644 --- a/app/Resources/TaskResource.php +++ b/app/Resources/TaskResource.php @@ -175,7 +175,10 @@ public static function table(Table $table): Table TextColumn::make('recurring.days_in_week') ->description(__('Days in week'), 'above') ->size(TextColumnSize::Small) - ->extraAttributes(['style' => 'margin-left: 15px;']), + ->extraAttributes(['style' => 'margin-left: 15px;']) + ->formatStateUsing(fn ($state) => collect(explode(', ', $state)) + ->map(fn ($day) => DaysInWeek::from($day)->getLabel()) + ->implode(', ')), TextColumn::make('recurring.dates_in_month') ->description(__('Dates in month'), 'above') ->size(TextColumnSize::Small) diff --git a/app/Resources/TeamResource.php b/app/Resources/TeamResource.php index 46b49e2..14f5b4d 100644 --- a/app/Resources/TeamResource.php +++ b/app/Resources/TeamResource.php @@ -88,13 +88,17 @@ public static function form(Form $form): Form return [$user->userable_id => $user->displayName]; }) ) + ->formatStateUsing(function (?Team $team, string $operation) { + return $operation === 'edit' ? + collect($team->members)->map(fn (Soldier $soldier) => $soldier->id) : + null; + }) ->live() ->optionsLimit(Soldier::count()) ->placeholder(__('Add a team member')) ->multiple() ->searchable(), ])->columns(2), - ]); } @@ -142,20 +146,25 @@ public static function table(Table $table): Table return User::all(); }) ->filter(function ($user) use ($record) { - $soldier_team_id = Soldier::where('id', $user->userable_id)->pluck('team_id'); - - return $soldier_team_id->first() !== $record->id && $record->commander_id !== $user->userable_id; + return $record->commander_id !== $user->userable_id; }) ->mapWithKeys(function ($user) { return [$user->userable_id => $user->displayName]; }) ) + ->formatStateUsing(function (Team $record) { + return collect($record->members)->map(fn (Soldier $soldier) => $soldier->id); + }) ->optionsLimit(Soldier::count()) ->multiple() ->searchable(), ]) ->closeModalByClickingAway(false) ->action(function (array $data, Team $record): void { + collect($record->members) + ->map(fn (Soldier $soldier) => ! collect($data['members'])->contains($soldier->id) ? + Soldier::where('id', $soldier->id)->update(['team_id' => null]) : null); + collect($data['members'])->map(fn ($soldier_id) => Soldier::where('id', $soldier_id) ->update(['team_id' => $record->id])); }), @@ -163,7 +172,7 @@ public static function table(Table $table): Table ->label(__('View members')) ->color('success') ->icon('heroicon-o-user-group') - ->badge(fn ($record) => Soldier::where('team_id', $record->id)->count()) + ->badge(fn ($record) => collect($record->members)->count()) ->url(fn (Team $record): string => route('filament.app.resources.soldiers.index', ['team_id' => $record->id])), EditAction::make(), DeleteAction::make() diff --git a/app/Resources/TeamResource/Pages/EditTeam.php b/app/Resources/TeamResource/Pages/EditTeam.php index 110572e..fb6d870 100644 --- a/app/Resources/TeamResource/Pages/EditTeam.php +++ b/app/Resources/TeamResource/Pages/EditTeam.php @@ -18,6 +18,8 @@ class EditTeam extends EditRecord protected function beforeSave(): void { if ($this->data['commander_id'] !== $this->record->commander_id) { + $user = User::where('userable_id', $this->record->commander_id)->first(); + $user->removeRole('team-commander'); $teams = Team::where('commander_id', $this->data['commander_id'])->get(); $departments = Department::where('commander_id', $this->data['commander_id'])->get(); if ($teams->isNotEmpty() || $departments->isNotEmpty()) { @@ -66,6 +68,8 @@ protected function getRedirectUrl(): string protected function afterSave(): void { $this->assignRoles(); + $this->unAssignMembers(); + $this->assignMembers(); } protected function assignRoles() @@ -74,4 +78,18 @@ protected function assignRoles() $user = User::where('userable_id', $this->record->commander_id)->first(); $user->assignRole('team-commander'); } + + protected function unAssignMembers() + { + Soldier::where('team_id', $this->record->id) + ->get() + ->map(fn ($soldier) => ! collect($this->data['members'])->contains($soldier->id) ? + Soldier::where('id', $soldier->id)->update(['team_id' => null]) : null); + } + + protected function assignMembers() + { + collect($this->data['members'])->map(fn ($soldier_id) => Soldier::where('id', $soldier_id) + ->update(['team_id' => $this->record->id])); + } } diff --git a/app/Services/ChangeAssignment.php b/app/Services/ChangeAssignment.php index c421fbf..c2b4fbe 100644 --- a/app/Services/ChangeAssignment.php +++ b/app/Services/ChangeAssignment.php @@ -114,4 +114,4 @@ public function exchange($shift) Shift::where('id', $shift->id)->update(['soldier_id' => Shift::find($this->shift->id)->soldier_id]); Shift::where('id', $this->shift->id)->update(['soldier_id' => $shift->soldier_id]); } -} \ No newline at end of file +} diff --git a/app/Services/FixedConstraints.php b/app/Services/FixedConstraints.php index a032d6a..41f0a8e 100644 --- a/app/Services/FixedConstraints.php +++ b/app/Services/FixedConstraints.php @@ -37,7 +37,7 @@ protected function getDatesOfDaysInMonth($constraintType, $soldierId) protected function setTimeToDate($date, $constraintType) { return match ($constraintType) { - 'Not Thursday evening' => [$date->setTime(16, 30, 0)->toDateTimeString(), $date->setTime(17, 30, 0)->toDateTimeString()], + 'Not Thursday evening' => [$date->setTime(14, 00, 0)->toDateTimeString(), $date->setTime(15, 30, 0)->toDateTimeString()], 'Not Sunday morning' => [$date->setTime(8, 30, 0)->toDateTimeString(), $date->setTime(9, 30, 0)->toDateTimeString()] }; } diff --git a/app/Services/Helpers.php b/app/Services/Helpers.php index 177620c..753b302 100644 --- a/app/Services/Helpers.php +++ b/app/Services/Helpers.php @@ -123,4 +123,4 @@ public static function updateShiftTable($assignments) { collect($assignments)->map(fn (Assignment $assignment) => Shift::where('id', $assignment->shiftId)->update(['soldier_id' => $assignment->soldierId])); } -} \ No newline at end of file +} diff --git a/app/Services/ManualAssignment.php b/app/Services/ManualAssignment.php index ca850b5..688f361 100644 --- a/app/Services/ManualAssignment.php +++ b/app/Services/ManualAssignment.php @@ -176,4 +176,4 @@ function (SoldierService $soldier) use ($soldiersWithConcurrentsShifts) { } ); } -} \ No newline at end of file +} diff --git a/app/Services/Shift.php b/app/Services/Shift.php index fe03e56..1415c23 100644 --- a/app/Services/Shift.php +++ b/app/Services/Shift.php @@ -88,4 +88,4 @@ protected function name(): string { return $this->taskType.': from'.$this->range->start.' to'.$this->range->end; } -} \ No newline at end of file +} diff --git a/app/Services/Soldier.php b/app/Services/Soldier.php index 710854e..a138077 100644 --- a/app/Services/Soldier.php +++ b/app/Services/Soldier.php @@ -133,4 +133,4 @@ protected function addSpaces($spaces) { collect($spaces)->map(fn ($space) => $this->shifts->push(new Shift(0, '', $space->start, $space->end, 0, false, false, false, []))); } -} \ No newline at end of file +} diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index cf87a69..f086c44 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -115,18 +115,18 @@ public function run(): void 'constraints_limit' => ConstraintType::getLimit(), ])->id, ])->assignRole(['soldier','shifts-assignment']); - // User::factory()->create([ - // 'first_name' => 'meshabetz mishmarot', - // 'userable_id' => Soldier::factory()->create([ - // 'qualifications' => ['hatasa', 'tazpit', 'shmira'], - // 'capacity' => 6, - // 'max_weekends' => 6, - // 'max_shifts' => 7, - // 'max_nights' => 6, - // 'is_reservist' => false, - // 'constraints_limit' => ConstraintType::getLimit(), - // ])->id, - // ])->assignRole(['soldier', 'shifts-assignment']); + // User::factory()->create([ + // 'first_name' => 'meshabetz mishmarot', + // 'userable_id' => Soldier::factory()->create([ + // 'qualifications' => ['hatasa', 'tazpit', 'shmira'], + // 'capacity' => 6, + // 'max_weekends' => 6, + // 'max_shifts' => 7, + // 'max_nights' => 6, + // 'is_reservist' => false, + // 'constraints_limit' => ConstraintType::getLimit(), + // ])->id, + // ])->assignRole(['soldier', 'shifts-assignment']); // for ($i = 0; $i < 15; $i++) { // $user = User::factory()->create([ diff --git a/lang/en.json b/lang/en.json index f6b8b73..95ceaa4 100644 --- a/lang/en.json +++ b/lang/en.json @@ -45,4 +45,4 @@ "Shift details edit":"Soldier :name requests your permission to edit the :type constraint and move it:
from :startDate to :endDate.
to :ToStartDate to :ToEndDate.
Do you approve?", "Commander approved edit constraint": "Hello :name!
Your request to edit constraint :constraintName
to move from date: :startDate to :endDate to date: :ToStartDate to :ToEndDate
has been approved!
The change has been updated successfully!
Have a nice day!", "Commander deny edit constraint":"Hello :name!
Your request to move constraint :constraintName
from: :startDate to :endDate
has been rejected!
Have a nice day!" -} \ No newline at end of file +} diff --git a/tests/Feature/EditTeamTest.php b/tests/Feature/EditTeamTest.php index a0de246..01226b9 100644 --- a/tests/Feature/EditTeamTest.php +++ b/tests/Feature/EditTeamTest.php @@ -1,5 +1,6 @@ getRoleNames()->contains('team-commander'))->toBe(true); }); + +it('should unassign team-commander role from the commander', function () { + $commander1 = User::factory()->create(); + $team = Team::factory()->create(['commander_id' => $commander1]); + $commander1->assignRole('team-commander'); + $commander2 = User::factory()->create(); + + livewire(EditTeam::class, [ + 'record' => $team->id, + ]) + ->set('data.commander_id', $commander2->userable_id) + ->call('save') + ->assertHasNoFormErrors(); + + expect($commander1->getRoleNames()->contains('team-commander'))->toBeFalse(); + expect($commander2->getRoleNames()->contains('team-commander'))->toBeTrue(); +}); + +it('should assign team members', function () { + $team = Team::factory()->create(); + $member1 = Soldier::factory()->create(); + $member2 = Soldier::factory()->create(); + + livewire( + EditTeam::class, + ['record' => $team->id] + ) + ->set('data.members', [$member1->id, $member2->id]) + ->call('save'); + + expect($member1->refresh()->team_id)->toBe($team->id); + expect($member2->refresh()->team_id)->toBe($team->id); +}); + +it('should unassign team members', function () { + $team = Team::factory()->create(); + $member1 = Soldier::factory()->create(['team_id' => $team->id]); + $member2 = Soldier::factory()->create(); + $member3 = Soldier::factory()->create(); + + livewire( + EditTeam::class, + ['record' => $team->id] + ) + ->set('data.members', [$member2->id, $member3->id]) + ->call('save'); + + expect($member1->refresh()->team_id)->toBe(null); +}); diff --git a/tests/Feature/ListTeamTest.php b/tests/Feature/ListTeamTest.php index d82ea60..72ce3b9 100644 --- a/tests/Feature/ListTeamTest.php +++ b/tests/Feature/ListTeamTest.php @@ -55,12 +55,7 @@ ]); Livewire::test(ListTeams::class) - ->mountTableAction('members', $team) - - ->setTableActionData([ - 'members' => [$user1->userable_id, $user2->userable_id], - ]) - ->callMountedTableAction(); + ->callTableAction('members', $team, ['members' => [$user1->userable_id, $user2->userable_id]]); $this->assertDatabaseHas('soldiers', [ 'id' => $user1->userable_id, diff --git a/tests/Unit/HelpersServiceTest.php b/tests/Unit/HelpersServiceTest.php index 28fb392..80aa2a4 100644 --- a/tests/Unit/HelpersServiceTest.php +++ b/tests/Unit/HelpersServiceTest.php @@ -115,4 +115,4 @@ 'id' => $shift->id, 'soldier_id' => $soldier->id, ]); -}); \ No newline at end of file +}); diff --git a/tests/Unit/ShiftServiceTest.php b/tests/Unit/ShiftServiceTest.php index 5dd93f1..0aecdd1 100644 --- a/tests/Unit/ShiftServiceTest.php +++ b/tests/Unit/ShiftServiceTest.php @@ -255,4 +255,4 @@ $result = $method->invoke($shift, $shifts, $range, DaysInWeek::SATURDAY); expect($result)->toBeFalse(); -}); \ No newline at end of file +}); diff --git a/tests/Unit/SoldierServiceTest.php b/tests/Unit/SoldierServiceTest.php index bd03981..de7bec5 100644 --- a/tests/Unit/SoldierServiceTest.php +++ b/tests/Unit/SoldierServiceTest.php @@ -117,4 +117,4 @@ it('should return false if the soldier is not qualified to the task', function () { $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(0), new MaxData(3), ['Run'], []); expect($soldier->isQualified('Clean'))->toBeFalse(); -}); \ No newline at end of file +}); From 0bd76fc5a68402eee45249003abf9a0bbf062311 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Mon, 3 Feb 2025 12:53:47 +0200 Subject: [PATCH 087/259] deploy version --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Exports/ShiftsExport.php | 2 +- app/Filament/Widgets/CalendarWidget.php | 8 +-- app/Livewire/MyDatabaseNotifications.php | 43 ++++++------ app/Models/Constraint.php | 53 +++++++-------- app/Resources/SoldierResource.php | 35 ++++++---- .../SoldierResource/Pages/EditSoldier.php | 35 +++++++--- app/Resources/TaskResource.php | 65 +++++++++---------- lang/en.json | 3 +- 9 files changed, 137 insertions(+), 109 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index d9a087c..88cbe74 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_23 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_24 flavor: | latest=false tags: | diff --git a/app/Exports/ShiftsExport.php b/app/Exports/ShiftsExport.php index ddb95ce..b0c9c08 100644 --- a/app/Exports/ShiftsExport.php +++ b/app/Exports/ShiftsExport.php @@ -63,7 +63,7 @@ public function headings(): array public function styles(Worksheet $sheet) { $sheet->setRightToLeft(true); - $sheet->getStyle('A1:F1')->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB('D3D3D3'); + $sheet->getStyle('A1:G1')->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB('D3D3D3'); return [ 1 => ['font' => ['bold' => true]], diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index a1964cd..095a2bc 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -394,9 +394,9 @@ protected function getBasicActions() if ($arguments['save'] ?? false) { if ($this->model == Constraint::class) { if ( - ($this->mountedActionsData[0]['constraint_type'] == ConstraintType::VACATION->value) || - ($this->mountedActionsData[0]['constraint_type'] == ConstraintType::MEDICAL->value) && - (auth()->user()->getRoleNames()->count() === 1) + ($data['constraint_type'] === ConstraintType::VACATION->value || + $data['constraint_type'] === ConstraintType::MEDICAL->value) && + auth()->user()->getRoleNames()->count() === 1 ) { $dataToEdit = [ 'record' => $this->model::find($record['id']), @@ -404,7 +404,7 @@ protected function getBasicActions() 'model' => $this->model, ]; - Constraint::RequestEditConstraint($dataToEdit); + Constraint::requestEditConstraint($dataToEdit); return; } diff --git a/app/Livewire/MyDatabaseNotifications.php b/app/Livewire/MyDatabaseNotifications.php index 5944cd8..910e250 100644 --- a/app/Livewire/MyDatabaseNotifications.php +++ b/app/Livewire/MyDatabaseNotifications.php @@ -16,6 +16,7 @@ use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Facades\Schema; use Livewire\Attributes\On; +use App\Enums\ConstraintType; class MyDatabaseNotifications extends DatabaseNotifications { @@ -56,7 +57,7 @@ protected function shiftAssignmentConfirmExchange($soldierAId, $soldierBId, $shi $shiftA = Shift::find($shiftAId); $shiftB = Shift::find($shiftBId); $this->shiftAssignmentExchange($shiftA, $shiftB); - $this->deleteNonRelevantNotifications($shiftAId.'-'.$shiftBId); + $this->deleteNonRelevantNotifications($shiftAId . '-' . $shiftBId); $this->sendNotification( __('Exchange shift'), __( @@ -116,9 +117,9 @@ protected function shiftAssignmentConfirmExchange($soldierAId, $soldierBId, $shi User::find($requesterId) ); $this->getShiftsAssignments() - ->filter(fn ($shiftsAssignment) => $shiftsAssignment->id !== auth()->user()->id) + ->filter(fn($shiftsAssignment) => $shiftsAssignment->id !== auth()->user()->id) ->map( - fn ($shiftsAssignment) => $this->sendNotification( + fn($shiftsAssignment) => $this->sendNotification( __('Exchange shift'), __( 'Shifts assignment notification of exchanging shifts for shifts assignment', @@ -154,7 +155,7 @@ protected function commanderConfirmExchange($soldierAId, $soldierBId, $shiftAId, $shiftB = Shift::find($shiftBId); $this->getShiftsAssignments() ->map( - fn ($shiftsAssignment) => $this->sendNotification( + fn($shiftsAssignment) => $this->sendNotification( __('Request for shift exchange'), __( 'Request for shift exchange from shifts assignments', @@ -202,7 +203,7 @@ protected function commanderConfirmExchange($soldierAId, $soldierBId, $shiftAId, ->close(), ], $shiftsAssignment, - $shiftA->id.'-'.$shiftB->id + $shiftA->id . '-' . $shiftB->id ) ); } @@ -286,7 +287,7 @@ protected function shiftAssignmentDenyExchange($soldierAId, $soldierBId, $shiftA $soldierB = Soldier::find($soldierBId); $shiftA = Shift::find($shiftAId); $shiftB = Shift::find($shiftBId); - $this->deleteNonRelevantNotifications($shiftAId.'-'.$shiftBId); + $this->deleteNonRelevantNotifications($shiftAId . '-' . $shiftBId); if ($sendToSoldiers) { $this->sendNotification( __('Deny exchange shift request'), @@ -348,9 +349,9 @@ protected function shiftAssignmentDenyExchange($soldierAId, $soldierBId, $shiftA User::find($requesterId) ); $this->getShiftsAssignments() - ->filter(fn ($shiftsAssignment) => $shiftsAssignment->id !== auth()->user()->id) + ->filter(fn($shiftsAssignment) => $shiftsAssignment->id !== auth()->user()->id) ->map( - fn ($shiftsAssignment) => $this->sendNotification( + fn($shiftsAssignment) => $this->sendNotification( __('Deny exchange shift request'), __( 'Shifts assignment notification of deny exchanging shifts for shifts assignment', @@ -488,7 +489,7 @@ protected function shiftAssignmentConfirmChange($shiftId, $soldierId, $requester $shift = Shift::find($shiftId); $soldierA = Soldier::find($shift->soldier_id); $soldierB = Soldier::find($soldierId); - $this->deleteNonRelevantNotifications($shiftId.'-'.$shift->soldier_id.'-'.$soldierId); + $this->deleteNonRelevantNotifications($shiftId . '-' . $shift->soldier_id . '-' . $soldierId); Shift::where('id', $shiftId)->update(['soldier_id' => $soldierId]); $this->sendNotification( __('Change shift'), @@ -538,9 +539,9 @@ protected function shiftAssignmentConfirmChange($shiftId, $soldierId, $requester User::find($requesterId) ); $this->getShiftsAssignments() - ->filter(fn ($shiftsAssignment) => $shiftsAssignment->id !== auth()->user()->id) + ->filter(fn($shiftsAssignment) => $shiftsAssignment->id !== auth()->user()->id) ->map( - fn ($shiftsAssignment) => $this->sendNotification( + fn($shiftsAssignment) => $this->sendNotification( __('Change shift'), __( 'Shifts assignment notification of changing shifts for shifts assignment', @@ -565,7 +566,7 @@ protected function commanderConfirmChange($shiftId, $soldierId) $shift = Shift::find($shiftId); $this->getShiftsAssignments() ->map( - fn ($shiftsAssignment) => $this->sendNotification( + fn($shiftsAssignment) => $this->sendNotification( __('Request for shift change'), __( 'Request for shift change from shifts assignments', @@ -606,7 +607,7 @@ protected function commanderConfirmChange($shiftId, $soldierId) ->close(), ], $shiftsAssignment, - $shift->id.'-'.$shift->soldier_id.'-'.$soldierId + $shift->id . '-' . $shift->soldier_id . '-' . $soldierId ) ); } @@ -681,7 +682,7 @@ protected function shiftAssignmentDenyChange($shiftId, $soldierId, $requesterId, $shift = Shift::find($shiftId); $soldierA = Soldier::find($shift->soldier_id); $soldierB = Soldier::find($soldierId); - $this->deleteNonRelevantNotifications($shiftId.'-'.$shift->soldier_id.'-'.$soldierId); + $this->deleteNonRelevantNotifications($shiftId . '-' . $shift->soldier_id . '-' . $soldierId); if ($sendToSoldiers) { $this->sendNotification( __('Deny change shift request'), @@ -734,9 +735,9 @@ protected function shiftAssignmentDenyChange($shiftId, $soldierId, $requesterId, User::find($requesterId) ); $this->getShiftsAssignments() - ->filter(fn ($shiftsAssignment) => $shiftsAssignment->id !== auth()->user()->id) + ->filter(fn($shiftsAssignment) => $shiftsAssignment->id !== auth()->user()->id) ->map( - fn ($shiftsAssignment) => $this->sendNotification( + fn($shiftsAssignment) => $this->sendNotification( __('Deny change shift request'), __( 'Shifts assignment notification of deny changing shifts for shifts assignment', @@ -868,7 +869,7 @@ protected function confirmConstraintNotification($user, $constraintName, $startD __('Constraint request approved'), __('Commander approved create constraint', [ 'name' => User::find($user)->displayName, - 'constraintName' => $constraintName, + 'constraintName' => ConstraintType::from($constraintName)->getLabel(), 'startDate' => $startDate, 'endDate' => $endDate, ]), @@ -889,7 +890,7 @@ protected function denyConstraintNotification($user, $constraintName, $startDate __('Constraint request rejected'), __('Commander deny create constraint', [ 'name' => User::find($user)->displayName, - 'constraintName' => $constraintName, + 'constraintName' => ConstraintType::from($constraintName)->getLabel(), 'startDate' => $startDate, 'endDate' => $endDate, ]), @@ -906,7 +907,7 @@ public function confirmConstraintEdit($user, $data) protected function confirmConstraintEditNotification($user, $data) { - $columns = Schema::getColumnListing(strtolower(class_basename($data['model'])).'s'); + $columns = Schema::getColumnListing(strtolower(class_basename($data['model'])) . 's'); $filteredData = array_intersect_key($data['data'], array_flip($columns)); $record = $data['model']::find($data['record']['id']); @@ -920,7 +921,7 @@ protected function confirmConstraintEditNotification($user, $data) __('Your request to edit the constraint has been approved'), __('Commander approved edit constraint', [ 'name' => User::find($user)->displayName, - 'constraintName' => $data['data']['constraint_type'], + 'constraintName' => ConstraintType::from($data['data']['constraint_type'])->getLabel(), 'startDate' => $data['record']['start_date'], 'endDate' => $data['record']['end_date'], 'ToStartDate' => $data['data']['start_date'], @@ -943,7 +944,7 @@ protected function denyConstraintEditNotification($user, $constraintName, $start __('Your request to edit the constraint has been rejected'), __('Commander deny edit constraint', [ 'name' => User::find($user)->displayName, - 'constraintName' => $constraintName, + 'constraintName' => ConstraintType::from($constraintName)->getLabel(), 'startDate' => $startDate, 'endDate' => $endDate, ]), diff --git a/app/Models/Constraint.php b/app/Models/Constraint.php index c7706a5..64e513a 100644 --- a/app/Models/Constraint.php +++ b/app/Models/Constraint.php @@ -43,20 +43,21 @@ public static function getSchema(): array { return [ Placeholder::make('') - ->content(fn (Constraint $constraint) => $constraint->soldier_name) - ->inlineLabel(), + ->content(fn(Constraint $constraint) => $constraint->soldier_name) + ->inlineLabel() + ->hidden(fn(Constraint $constraint) => $constraint->soldier_id === auth()->user()->userable_id), Select::make('soldier_id') ->label(__('Soldier')) ->hiddenOn('view') - ->visible(fn () => in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray()) - && \Str::contains($_SERVER['HTTP_REFERER'], 'my-soldiers-constraint')) - ->options(fn () => Cache::remember('users', 30 * 60, function () { + ->visible(fn() => in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray()) + && \Str::contains($_SERVER['HTTP_REFERER'], 'my-soldiers-constraint')) + ->options(fn() => Cache::remember('users', 30 * 60, function () { return User::all(); }) ->mapWithKeys(function ($user) { return [$user->userable_id => $user->displayName]; })) - ->afterStateUpdated(fn ($state) => session()->put('soldier_id', $state)) + ->afterStateUpdated(fn($state) => session()->put('soldier_id', $state)) ->required(), ToggleButtons::make('constraint_type') ->required() @@ -65,13 +66,13 @@ public static function getSchema(): array ->live() ->hiddenOn('view') ->inline() - ->options(fn (Get $get) => self::availableOptions($get('start_date'), $get('end_date'))) - ->afterStateUpdated(fn (callable $set, $state, Get $get) => self::updateDates($set, $state, $get)), + ->options(fn(Get $get) => self::availableOptions($get('start_date'), $get('end_date'))) + ->afterStateUpdated(fn(callable $set, $state, Get $get) => self::updateDates($set, $state, $get)), ToggleButtons::make('constraint_type_view') ->label(__('Constraint Name')) ->inline() ->visibleOn('view') - ->options(fn (Constraint $constraint) => [ + ->options(fn(Constraint $constraint) => [ ConstraintType::from($constraint->constraint_type)->getLabel(), ]), @@ -81,12 +82,12 @@ public static function getSchema(): array ->required(), Placeholder::make('') ->content(__('Please note! This constraint will only be approved for you after approval from the commander.')) - ->visible(fn (Get $get) => ($get('constraint_type') === ConstraintType::VACATION->value || $get('constraint_type') === ConstraintType::MEDICAL->value) + ->visible(fn(Get $get) => ($get('constraint_type') === ConstraintType::VACATION->value || $get('constraint_type') === ConstraintType::MEDICAL->value) && auth()->user()->getRoleNames()->count() === 1) ->hiddenOn('view') ->extraAttributes(['style' => 'color: red; font-family: Arial, Helvetica, sans-serif; font-size: 20px']), Grid::make() - ->visible(fn ($get) => in_array($get('constraint_type'), ['Medical', 'Vacation', 'School', 'Not task', 'Low priority not task'])) + ->visible(fn($get) => in_array($get('constraint_type'), ['Medical', 'Vacation', 'School', 'Not task', 'Low priority not task'])) ->schema([ DateTimePicker::make('start_date') ->label(__('Start date')) @@ -110,7 +111,7 @@ public static function requestConstraint($data) 'name' => Soldier::find(auth()->user()->userable_id)->user->displayName, 'startDate' => $data['start_date'], 'endDate' => $data['end_date'], - 'type' => $data['constraint_type'], + 'type' => ConstraintType::from($data['constraint_type'])->getLabel(), ]) ) ->actions( @@ -121,7 +122,7 @@ public static function requestConstraint($data) ->color('success') ->dispatch('confirmConstraint', [ 'user' => auth()->user()->id, - 'constraintName' => $data['constraint_type'], + 'constraintName' => ConstraintType::from($data['constraint_type'])->getLabel(), 'startDate' => $data['start_date'], 'endDate' => $data['end_date'], ]) @@ -132,7 +133,7 @@ public static function requestConstraint($data) ->color('danger') ->dispatch('denyConstraint', [ 'user' => auth()->user()->id, - 'constraintName' => $data['constraint_type'], + 'constraintName' => ConstraintType::from($data['constraint_type'])->getLabel(), 'startDate' => $data['start_date'], 'endDate' => $data['end_date'], ]) @@ -142,7 +143,7 @@ public static function requestConstraint($data) ->sendToDatabase($commander, true); } - public static function RequestEditConstraint($data) + public static function requestEditConstraint($data) { $commander = Soldier::find(auth()->user()->userable_id)->team->commander->user; Notification::make() @@ -154,7 +155,7 @@ public static function RequestEditConstraint($data) 'endDate' => $data['record']['end_date']->format('Y-m-d H:i:s'), 'ToStartDate' => $data['data']['start_date'], 'ToEndDate' => $data['data']['end_date'], - 'type' => $data['data']['constraint_type'], + 'type' => ConstraintType::from($data['data']['constraint_type'])->getLabel(), ]) ) ->actions( @@ -174,7 +175,7 @@ public static function RequestEditConstraint($data) ->color('danger') ->dispatch('denyConstraintEdit', [ 'user' => auth()->user()->id, - 'constraintName' => $data['data']['constraint_type'], + 'constraintName' => ConstraintType::from($data['data']['constraint_type'])->getLabel(), 'startDate' => $data['data']['start_date'], 'endDate' => $data['data']['end_date'], ]) @@ -193,8 +194,8 @@ private static function availableOptions($startDate, $endDate): array { $start_date = Carbon::parse($startDate); $options = array_combine( - array_map(fn ($enum) => $enum->value, ConstraintType::cases()), - array_map(fn ($enum) => $enum->getLabel(), ConstraintType::cases()) + array_map(fn($enum) => $enum->value, ConstraintType::cases()), + array_map(fn($enum) => $enum->getLabel(), ConstraintType::cases()) ); if ($start_date->isFriday() || $start_date->isSaturday()) { @@ -205,10 +206,10 @@ private static function availableOptions($startDate, $endDate): array unset($options[ConstraintType::NOT_WEEKEND->value]); unset($options[ConstraintType::LOW_PRIORITY_NOT_WEEKEND->value]); } - if (! $start_date->isSunday()) { + if (!$start_date->isSunday()) { unset($options[ConstraintType::NOT_SUNDAY_MORNING->value]); } - if (! (in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray()))) { + if (!(in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray()))) { $usedCounts = self::getUsedCountsForCurrentMonth($startDate, $endDate); $limits = Soldier::where('id', auth()->user()->userable_id)->pluck('constraints_limit')->first() ?: ConstraintType::getLimit(); $constraintsWithinLimit = []; @@ -221,7 +222,7 @@ private static function availableOptions($startDate, $endDate): array $used = $usedCounts[$constraint] ?? 0; $limit = $limits[$constraint] ?? 0; if ($limit === 0 || $used < $limit) { - if (! in_array($constraint, $queryConstraints)) { + if (!in_array($constraint, $queryConstraints)) { $constraintsWithinLimit[$constraint] = $label; } } @@ -314,7 +315,7 @@ public function getSoldierNameAttribute() { $user_name = User::where('userable_id', $this->soldier_id)->get(['first_name', 'last_name']); - return $user_name->first()?->first_name.' '.$user_name->first()?->last_name; + return $user_name->first()?->first_name . ' ' . $user_name->first()?->last_name; } public function getConstraintNameAttribute() @@ -323,7 +324,7 @@ public function getConstraintNameAttribute() return $this->soldier_id == auth()->user()->userable_id ? $translatedConstraint - : $translatedConstraint.' '.$this->soldier_name; + : $translatedConstraint . ' ' . $this->soldier_name; } public function getConstraintColorAttribute() @@ -339,12 +340,12 @@ public static function getFilters($calendar) ->icon('heroicon-o-funnel') ->form(function () use ($calendar) { $constraints = $calendar->getEventsByRole(); - $soldiersConstraints = array_filter($constraints->toArray(), fn ($constraint) => $constraint['soldier_id'] !== null); + $soldiersConstraints = array_filter($constraints->toArray(), fn($constraint) => $constraint['soldier_id'] !== null); return [ Select::make('soldier_id') ->label(__('Soldier')) - ->options(fn (): array => collect($soldiersConstraints)->mapWithKeys(fn ($constraint) => [ + ->options(fn(): array => collect($soldiersConstraints)->mapWithKeys(fn($constraint) => [ $constraint['soldier_id'] => User::where('userable_id', $constraint['soldier_id']) ->first()?->displayName, ])->toArray()) diff --git a/app/Resources/SoldierResource.php b/app/Resources/SoldierResource.php index 7dfe21e..9d7d31d 100644 --- a/app/Resources/SoldierResource.php +++ b/app/Resources/SoldierResource.php @@ -64,7 +64,7 @@ public static function table(Table $table): Table TextColumn::make('user') ->label(__('Full name')) ->formatStateUsing(function ($record) { - return $record->user->last_name.' '.$record->user->first_name; + return $record->user->last_name . ' ' . $record->user->first_name; }) ->searchable(query: function ($query, $search) { $query->whereHas('user', function ($query) use ($search) { @@ -77,9 +77,9 @@ public static function table(Table $table): Table ->label(__('Reservist')), BadgeColumn::make('gender') ->label(__('Gender')) - ->formatStateUsing(fn ($state) => $state ? __('Male') : __('Female')) + ->formatStateUsing(fn($state) => $state ? __('Male') : __('Female')) ->badge() - ->color(fn ($state) => $state ? 'info' : 'primary') + ->color(fn($state) => $state ? 'info' : 'primary') ->sortable(), TextColumn::make('role') ->label(__('Role')) @@ -121,7 +121,7 @@ function ($record) { return $soldierShifts->filter(function (Shift $shift): bool { return Carbon::parse($shift->start_date)->month == now()->month || Carbon::parse($shift->end_date)->month == now()->month; - })->sum(fn (Shift $shift) => $shift->parallel_weight === null ? $shift->task->parallel_weight : $shift->parallel_weight); + })->sum(fn(Shift $shift) => $shift->parallel_weight === null ? $shift->task->parallel_weight : $shift->parallel_weight); }) ->label(__('Capacity hold')) ->numeric(), @@ -135,7 +135,7 @@ function ($record) { } }) ->toggleColumnsTriggerAction( - fn (Action $action) => $action + fn(Action $action) => $action ->button() ->label(__('Columns')), ) @@ -166,19 +166,19 @@ function ($record) { ->default(null), Filter::make('reservist') ->label(__('Reservist')) - ->query(fn (Builder $query): Builder => $query->where('is_reservist', 1)) + ->query(fn(Builder $query): Builder => $query->where('is_reservist', 1)) ->toggle(), Filter::make('is_mabat') ->label(__('Is mabat')) - ->query(fn (Builder $query): Builder => $query->where('is_mabat', true)) + ->query(fn(Builder $query): Builder => $query->where('is_mabat', true)) ->toggle(), Filter::make('has_exemption') ->label(__('Exemption')) - ->query(fn (Builder $query): Builder => $query->where('has_exemption', true)) + ->query(fn(Builder $query): Builder => $query->where('has_exemption', true)) ->toggle(), Filter::make('is_trainee') ->label(__('Is trainee')) - ->query(fn (Builder $query): Builder => $query->where('is_trainee', true)) + ->query(fn(Builder $query): Builder => $query->where('is_trainee', true)) ->toggle(), Filter::make('enlist_date') ->form([ @@ -196,11 +196,11 @@ function ($record) { return $query ->when( $data['recruitment_from'], - fn (Builder $query, $date): Builder => $query->whereDate('enlist_date', '>=', $date), + fn(Builder $query, $date): Builder => $query->whereDate('enlist_date', '>=', $date), ) ->when( $data['recruitment_until'], - fn (Builder $query, $date): Builder => $query->whereDate('enlist_date', '<=', $date), + fn(Builder $query, $date): Builder => $query->whereDate('enlist_date', '<=', $date), ); }), @@ -208,7 +208,7 @@ function ($record) { ->filtersFormColumns(4) ->deferFilters() ->filtersTriggerAction( - fn (Action $action) => $action + fn(Action $action) => $action ->button() ->label(__('Filter')) ) @@ -219,7 +219,7 @@ function ($record) { EditAction::make(), DeleteAction::make() ->label(__('Delete')) - ->modalHeading(__('Delete').' '.self::getModelLabel()), + ->modalHeading(__('Delete') . ' ' . self::getModelLabel()), ViewAction::make() ->label(__('Display')) ->mutateRecordDataUsing(function (array $data, $record): array { @@ -260,11 +260,18 @@ function ($record) { $record->save(); }) ->closeModalByClickingAway(false) - ->hidden(fn ($record) => ! $record->is_reservist), + ->hidden(fn($record) => !$record->is_reservist), ReplicateAction::make() ->icon('heroicon-o-document-duplicate') ->color('success') ->after(function (Soldier $replica, $record): void { + $user = new User; + $user->first_name = $record->user->first_name; + $user->last_name = $record->user->last_name; + $user->password = '*******'; + $user->userable_type = "App\Models\Soldier"; + $user->userable_id = $replica->id; + $user->save(); $replica['last_reserve_dates'] = []; $replica['reserve_dates'] = []; $replica['next_reserve_dates'] = []; diff --git a/app/Resources/SoldierResource/Pages/EditSoldier.php b/app/Resources/SoldierResource/Pages/EditSoldier.php index 6cf7934..2c101e0 100644 --- a/app/Resources/SoldierResource/Pages/EditSoldier.php +++ b/app/Resources/SoldierResource/Pages/EditSoldier.php @@ -5,7 +5,7 @@ use App\Models\User; use App\Resources\SoldierResource; use Filament\Resources\Pages\EditRecord; - +use Filament\Notifications\Notification; class EditSoldier extends EditRecord { protected static string $resource = SoldierResource::class; @@ -13,24 +13,43 @@ class EditSoldier extends EditRecord protected function mutateFormDataBeforeFill(array $data): array { $data['shifts_assignment'] = User::where('userable_id', $this->record->id)?->first() - ? in_array('shifts-assignment', User::where('userable_id', $this->record->id) - ->first() - ->getRoleNames() - ->toArray()) - : session()->get('shifts_assignment'); + ? in_array('shifts-assignment', User::where('userable_id', $this->record->id) + ->first() + ->getRoleNames() + ->toArray()) + : session()->get('shifts_assignment'); return $data; } protected function mutateFormDataBeforeSave(array $data): array { - if (! $data['is_reservist']) { + if (!$data['is_reservist']) { $data['reserve_dates'] = null; $data['next_reserve_dates'] = null; } return $data; } + protected function beforeSave(): void + { + $userName = User::where('last_name', $this->data['user']['last_name']) + ->where('first_name', $this->data['user']['first_name']) + ->pluck('last_name', 'first_name'); + + if ($userName = $userName->get($this->data['user']['first_name']) == $this->data['user']['last_name']) { + Notification::make() + ->warning() + ->title(__('This name already exists in the system!')) + ->body(__('Add identifier', [ + 'example' => $this->data['user']['first_name'] . ' ' . $this->data['user']['last_name'] . '2', + ])) + ->persistent() + ->send(); + + $this->halt(); + } + } protected function getRedirectUrl(): string { @@ -44,7 +63,7 @@ protected function afterSave(): void $this->data['shifts_assignment'] == 1 ? $user->assignRole('soldier', 'shifts-assignment') : $user->assignRole('soldier'); } else { $roles = $user->getRoleNames()->toArray(); - if ($this->data['shifts_assignment'] == 1 && ! in_array('shifts-assignment', $roles)) { + if ($this->data['shifts_assignment'] == 1 && !in_array('shifts-assignment', $roles)) { $user->assignRole('shifts-assignment'); } if ($this->data['shifts_assignment'] == 0 && in_array('shifts-assignment', $roles)) { diff --git a/app/Resources/TaskResource.php b/app/Resources/TaskResource.php index 6ea2c3d..b90e210 100644 --- a/app/Resources/TaskResource.php +++ b/app/Resources/TaskResource.php @@ -117,17 +117,17 @@ public static function table(Table $table): Table ->description(__('Alert'), 'above') ->extraAttributes(['style' => 'margin: 5px;']) ->size(TextColumnSize::Small) - ->formatStateUsing(fn ($state) => $state ? __('Yes') : __('No')), + ->formatStateUsing(fn($state) => $state ? __('Yes') : __('No')), TextColumn::make('is_weekend') ->description(__('Is weekend'), 'above') ->size(TextColumnSize::Small) ->extraAttributes(['style' => 'margin: 5px;']) - ->formatStateUsing(fn ($state) => $state ? __('Yes') : __('No')), + ->formatStateUsing(fn($state) => $state ? __('Yes') : __('No')), TextColumn::make('is_night') ->description(__('Is night'), 'above') ->size(TextColumnSize::Small) ->extraAttributes(['style' => 'margin: 5px;']) - ->formatStateUsing(fn ($state) => $state ? __('Yes') : __('No')), + ->formatStateUsing(fn($state) => $state ? __('Yes') : __('No')), ]) ->space(2) @@ -137,7 +137,7 @@ public static function table(Table $table): Table ->description(__('In parallel'), 'above') ->size(TextColumnSize::Small) ->extraAttributes(['style' => 'margin: 5px;']) - ->formatStateUsing(fn ($state) => $state ? __('Yes') : __('No')), + ->formatStateUsing(fn($state) => $state ? __('Yes') : __('No')), TextColumn::make('concurrent_tasks') ->description(__('Concurrent tasks'), 'above') ->size(TextColumnSize::Small) @@ -176,8 +176,8 @@ public static function table(Table $table): Table ->description(__('Days in week'), 'above') ->size(TextColumnSize::Small) ->extraAttributes(['style' => 'margin-left: 15px;']) - ->formatStateUsing(fn ($state) => collect(explode(', ', $state)) - ->map(fn ($day) => DaysInWeek::from($day)->getLabel()) + ->formatStateUsing(fn($state) => collect(explode(', ', $state)) + ->map(fn($day) => DaysInWeek::from($day)->getLabel()) ->implode(', ')), TextColumn::make('recurring.dates_in_month') ->description(__('Dates in month'), 'above') @@ -219,7 +219,7 @@ public static function table(Table $table): Table ->label(__('Recurring type')) ->multiple() ->searchable() - ->options(collect(RecurringType::cases())->mapWithKeys(fn ($type) => [$type->value => $type->getLabel()])) + ->options(collect(RecurringType::cases())->mapWithKeys(fn($type) => [$type->value => $type->getLabel()])) ->query(function (Builder $query, array $data) { return collect($data['values'])->map(function ($type) use ($query) { return $query->orWhereJsonContains('recurring', $type); @@ -230,15 +230,15 @@ public static function table(Table $table): Table ->label(__('Parallel weight')), Filter::make('is_alert') ->label(__('Is alert')) - ->query(fn (Builder $query): Builder => $query->where('is_alert', true)) + ->query(fn(Builder $query): Builder => $query->where('is_alert', true)) ->toggle(), Filter::make('is_weekend') ->label(__('Is weekend')) - ->query(fn (Builder $query): Builder => $query->where('is_weekend', true)) + ->query(fn(Builder $query): Builder => $query->where('is_weekend', true)) ->toggle(), Filter::make('is_night') ->label(__('Is night')) - ->query(fn (Builder $query): Builder => $query->where('is_night', true)) + ->query(fn(Builder $query): Builder => $query->where('is_night', true)) ->toggle(), SelectFilter::make('department_name') ->label(__('Department name')) @@ -251,7 +251,7 @@ public static function table(Table $table): Table ], FiltersLayout::Modal) ->deferFilters() ->filtersTriggerAction( - fn (Action $action) => $action + fn(Action $action) => $action ->button() ->label(__('Filter')) ) @@ -260,7 +260,7 @@ public static function table(Table $table): Table EditAction::make(), DeleteAction::make() ->label(__('Delete')) - ->modalHeading(__('Delete').' '.self::getModelLabel()), + ->modalHeading(__('Delete') . ' ' . self::getModelLabel()), ]), ]) @@ -322,24 +322,24 @@ public static function getRecurring(): array return [ ToggleButtons::make('recurring.type') ->label(__('Type')) - ->options(collect(RecurringType::cases())->mapWithKeys(fn ($type) => [$type->value => $type->getLabel()]))->live() + ->options(collect(RecurringType::cases())->mapWithKeys(fn($type) => [$type->value => $type->getLabel()]))->live() ->required() ->inline(), Select::make('recurring.days_in_week') ->label(__('Days in week')) ->multiple() ->options( - collect(DaysInWeek::cases())->mapWithKeys(fn ($type) => [$type->value => $type->getLabel()]) + collect(DaysInWeek::cases())->mapWithKeys(fn($type) => [$type->value => $type->getLabel()]) ) - ->visible(fn (Get $get): bool => $get('recurring.type') === 'Weekly') + ->visible(fn(Get $get): bool => $get('recurring.type') === 'Weekly') ->default(null) ->required(), Select::make('recurring.dates_in_month') - ->label(fn (Get $get) => $get('recurring.type') === 'Monthly' ? __('Date') : __('Dates')) + ->label(fn(Get $get) => $get('recurring.type') === 'Monthly' ? __('Date') : __('Dates')) ->placeholder(__('Select from dates')) - ->multiple(fn (Get $get): bool => $get('recurring.type') === 'Custom') + ->multiple(fn(Get $get): bool => $get('recurring.type') === 'Custom') ->options(array_combine(range(1, 31), range(1, 31))) - ->visible(fn (Get $get): bool => $get('recurring.type') === 'Monthly' || $get('recurring.type') === 'Custom') + ->visible(fn(Get $get): bool => $get('recurring.type') === 'Monthly' || $get('recurring.type') === 'Custom') ->default(null) ->live() ->required(), @@ -352,14 +352,14 @@ public static function getRecurring(): array ->label(__('End date')) ->after('recurring.start_date') ->required(), - ])->visible(fn (Get $get): bool => $get('recurring.type') === 'Daily range'), + ])->visible(fn(Get $get): bool => $get('recurring.type') === 'Daily range'), DatePicker::make('recurring.date') ->label(__('Date')) ->required() ->minDate(today()) ->live() - ->visible(fn (Get $get) => $get('recurring.type') === 'One time'), + ->visible(fn(Get $get) => $get('recurring.type') === 'One time'), ]; } @@ -367,12 +367,12 @@ public static function assignSoldier(): array { return [ Placeholder::make('') - ->content(fn ($record) => $record['recurring']['type'] === RecurringType::ONETIME->value ? + ->content(fn($record) => $record['recurring']['type'] === RecurringType::ONETIME->value ? __('This task is assigned to', ['soldierName' => Soldier::find(Shift::where('task_id', $record->id)->pluck('soldier_id')->first())->user->displayName]) : null) ->extraAttributes(['style' => 'font-size: 15px']) ->live() ->hiddenOn('create') - ->visible(fn ($record) => $record['recurring']['type'] === RecurringType::ONETIME->value && Shift::where('task_id', $record->id)->pluck('soldier_id')->first() !== null), + ->visible(fn($record) => $record['recurring']['type'] === RecurringType::ONETIME->value && Shift::where('task_id', $record->id)->pluck('soldier_id')->first() !== null), Fieldset::make(__('Soldier assignment')) ->schema([ ToggleButtons::make('soldier_type') @@ -381,9 +381,9 @@ public static function assignSoldier(): array ->live() ->inline() ->options( - fn (Get $get) => self::getOptions($get) + fn(Get $get) => self::getOptions($get) ) - ->afterStateUpdated(fn (callable $set) => $set('soldier_id', null)), + ->afterStateUpdated(fn(callable $set) => $set('soldier_id', null)), Select::make('soldier_id') ->label(__('Assign soldier')) ->options( @@ -392,9 +392,9 @@ function (Get $get) { } ) ->default(null) - ->placeholder(fn (Get $get) => self::getSoldiers($get)->isEmpty() ? __('No suitable soldiers') : __('Select a soldier')) + ->placeholder(fn(Get $get) => self::getSoldiers($get)->isEmpty() ? __('No suitable soldiers') : __('Select a soldier')) ->visible( - fn (Get $get): bool => $get('soldier_type') + fn(Get $get): bool => $get('soldier_type') && $get('soldier_type') != 'me' ) ->live(), @@ -402,7 +402,7 @@ function (Get $get) { ->content(__('Assigning the soldier to this shift is your sole responsibility!')) ->extraAttributes(['style' => 'color: red; font-family: Arial, Helvetica, sans-serif; font-size: 20px']) ->live() - ->visible(fn (Get $get) => $get('soldier_type') === 'all'), + ->visible(fn(Get $get) => $get('soldier_type') === 'all'), ]), ]; } @@ -422,10 +422,9 @@ public static function additionalDetails(): array Select::make('concurrent_tasks') ->label(__('Concurrent tasks')) ->multiple() - ->placeholder(fn () => Task::count() > 0 ? __('Select concurrent tasks') : __('No tasks')) + ->placeholder(fn() => Task::count() > 0 ? __('Select concurrent tasks') : __('No tasks')) ->options(Task::all()->pluck('type', 'type')) - ->visible(fn (Get $get) => $get('in_parallel')) - ->required(), + ->visible(fn(Get $get) => $get('in_parallel')), ]; } @@ -438,7 +437,7 @@ protected static function getOptions(Get $get): array ]; if ($get('department_name')) { $options = collect($options) - ->put('department', '"'.$get('department_name').'" '.__('Department')) + ->put('department', '"' . $get('department_name') . '" ' . __('Department')) ->toArray(); } if (self::amIAvailable($get)) { @@ -446,7 +445,7 @@ protected static function getOptions(Get $get): array ->put('me', __('Me')) ->toArray(); } - if (! in_array('manager', auth()->user()->getRoleNames()->toArray()) && ! in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray())) { + if (!in_array('manager', auth()->user()->getRoleNames()->toArray()) && !in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray())) { return collect($options) ->put('my_soldiers', __('My Soldiers')) ->toArray(); @@ -492,7 +491,7 @@ protected static function taskDetails(Get $get) $shift = new Shift; $shift->id = null; $shift->task = $task; - $shift->start_date = Carbon::parse($task_date->format('Y-m-d').' '.$get('start_hour')); + $shift->start_date = Carbon::parse($task_date->format('Y-m-d') . ' ' . $get('start_hour')); $shift->end_date = $shift->start_date->copy()->addHours((float) ($get('duration'))); $shift->parallel_weight = $get('parallel_weight'); diff --git a/lang/en.json b/lang/en.json index 95ceaa4..eeabce4 100644 --- a/lang/en.json +++ b/lang/en.json @@ -44,5 +44,6 @@ "This task is assigned to":"This task is assigned to :soldierName", "Shift details edit":"Soldier :name requests your permission to edit the :type constraint and move it:
from :startDate to :endDate.
to :ToStartDate to :ToEndDate.
Do you approve?", "Commander approved edit constraint": "Hello :name!
Your request to edit constraint :constraintName
to move from date: :startDate to :endDate to date: :ToStartDate to :ToEndDate
has been approved!
The change has been updated successfully!
Have a nice day!", - "Commander deny edit constraint":"Hello :name!
Your request to move constraint :constraintName
from: :startDate to :endDate
has been rejected!
Have a nice day!" + "Commander deny edit constraint":"Hello :name!
Your request to move constraint :constraintName
from: :startDate to :endDate
has been rejected!
Have a nice day!", + "Add identifier":"Add an identifier to the name so that it is not the same as another name. For example: :example" } From aa587d3bdcdcd8961236e630e595fc75979fb3b1 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Mon, 3 Feb 2025 15:52:19 +0200 Subject: [PATCH 088/259] deploy version --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Livewire/MyDatabaseNotifications.php | 8 ++++---- app/Models/Constraint.php | 3 ++- app/Resources/SoldierResource.php | 8 +++++--- app/Resources/SoldierResource/Pages/EditSoldier.php | 8 ++++++-- 5 files changed, 18 insertions(+), 11 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 88cbe74..91cd3b4 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_24 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_25 flavor: | latest=false tags: | diff --git a/app/Livewire/MyDatabaseNotifications.php b/app/Livewire/MyDatabaseNotifications.php index 910e250..e1427a2 100644 --- a/app/Livewire/MyDatabaseNotifications.php +++ b/app/Livewire/MyDatabaseNotifications.php @@ -869,7 +869,7 @@ protected function confirmConstraintNotification($user, $constraintName, $startD __('Constraint request approved'), __('Commander approved create constraint', [ 'name' => User::find($user)->displayName, - 'constraintName' => ConstraintType::from($constraintName)->getLabel(), + 'constraintName' => __($constraintName), 'startDate' => $startDate, 'endDate' => $endDate, ]), @@ -890,7 +890,7 @@ protected function denyConstraintNotification($user, $constraintName, $startDate __('Constraint request rejected'), __('Commander deny create constraint', [ 'name' => User::find($user)->displayName, - 'constraintName' => ConstraintType::from($constraintName)->getLabel(), + 'constraintName' => $constraintName, 'startDate' => $startDate, 'endDate' => $endDate, ]), @@ -921,7 +921,7 @@ protected function confirmConstraintEditNotification($user, $data) __('Your request to edit the constraint has been approved'), __('Commander approved edit constraint', [ 'name' => User::find($user)->displayName, - 'constraintName' => ConstraintType::from($data['data']['constraint_type'])->getLabel(), + 'constraintName' => __($data['data']['constraint_type']), 'startDate' => $data['record']['start_date'], 'endDate' => $data['record']['end_date'], 'ToStartDate' => $data['data']['start_date'], @@ -944,7 +944,7 @@ protected function denyConstraintEditNotification($user, $constraintName, $start __('Your request to edit the constraint has been rejected'), __('Commander deny edit constraint', [ 'name' => User::find($user)->displayName, - 'constraintName' => ConstraintType::from($constraintName)->getLabel(), + 'constraintName' => $constraintName, 'startDate' => $startDate, 'endDate' => $endDate, ]), diff --git a/app/Models/Constraint.php b/app/Models/Constraint.php index 64e513a..1a59c75 100644 --- a/app/Models/Constraint.php +++ b/app/Models/Constraint.php @@ -30,6 +30,7 @@ class Constraint extends Model ]; protected $casts = [ + 'constraint_type' => ConstraintType::class, 'start_date' => 'datetime:Y-m-d H:i:s', 'end_date' => 'datetime:Y-m-d H:i:s', ]; @@ -73,7 +74,7 @@ public static function getSchema(): array ->inline() ->visibleOn('view') ->options(fn(Constraint $constraint) => [ - ConstraintType::from($constraint->constraint_type)->getLabel(), + $constraint->constraint_type->getLabel(), ]), Hidden::make('start_date') diff --git a/app/Resources/SoldierResource.php b/app/Resources/SoldierResource.php index 9d7d31d..ef5ecaf 100644 --- a/app/Resources/SoldierResource.php +++ b/app/Resources/SoldierResource.php @@ -266,12 +266,14 @@ function ($record) { ->color('success') ->after(function (Soldier $replica, $record): void { $user = new User; - $user->first_name = $record->user->first_name; - $user->last_name = $record->user->last_name; - $user->password = '*******'; + $user->first_name = ''; + $user->last_name = ''; + $user->password = ''; $user->userable_type = "App\Models\Soldier"; $user->userable_id = $replica->id; $user->save(); + $user->assignRole('soldier'); + in_array('shifts-assignment', $record->user->getRoleNames()->toArray()) ? $user->assignRole('shifts-assignment') : null; $replica['last_reserve_dates'] = []; $replica['reserve_dates'] = []; $replica['next_reserve_dates'] = []; diff --git a/app/Resources/SoldierResource/Pages/EditSoldier.php b/app/Resources/SoldierResource/Pages/EditSoldier.php index 2c101e0..c2044f2 100644 --- a/app/Resources/SoldierResource/Pages/EditSoldier.php +++ b/app/Resources/SoldierResource/Pages/EditSoldier.php @@ -19,6 +19,7 @@ protected function mutateFormDataBeforeFill(array $data): array ->toArray()) : session()->get('shifts_assignment'); + return $data; } @@ -37,12 +38,15 @@ protected function beforeSave(): void ->where('first_name', $this->data['user']['first_name']) ->pluck('last_name', 'first_name'); - if ($userName = $userName->get($this->data['user']['first_name']) == $this->data['user']['last_name']) { + if ( + ($userName = $userName->get($this->data['user']['first_name']) == $this->data['user']['last_name']) && + $this->record->user->displayName !== $this->data['user']['first_name'] . ' ' . $this->data['user']['last_name'] + ) { Notification::make() ->warning() ->title(__('This name already exists in the system!')) ->body(__('Add identifier', [ - 'example' => $this->data['user']['first_name'] . ' ' . $this->data['user']['last_name'] . '2', + 'example' => ($this->data['user']['first_name'] . ' ' . $this->data['user']['last_name'] . '2'), ])) ->persistent() ->send(); From b7fa49efe03b0645074d0a77c9a1e3b8bd9980e1 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Tue, 4 Feb 2025 09:31:08 +0200 Subject: [PATCH 089/259] deploy version --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 2 +- app/Livewire/MyDatabaseNotifications.php | 37 +++++------ app/Models/Constraint.php | 58 ++++++++-------- app/Resources/SoldierResource.php | 30 ++++----- .../SoldierResource/Pages/EditSoldier.php | 16 ++--- app/Resources/TaskResource.php | 66 +++++++++---------- app/Services/Charts.php | 5 +- app/Services/Helpers.php | 5 +- lang/en.json | 2 +- lang/he.json | 13 ++-- 11 files changed, 117 insertions(+), 119 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 91cd3b4..b7856a3 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_25 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_26 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 095a2bc..606ee1c 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -517,4 +517,4 @@ public function onEventDrop(array $event, array $oldEvent, array $relatedEvents, return false; } -} +} \ No newline at end of file diff --git a/app/Livewire/MyDatabaseNotifications.php b/app/Livewire/MyDatabaseNotifications.php index e1427a2..52f9794 100644 --- a/app/Livewire/MyDatabaseNotifications.php +++ b/app/Livewire/MyDatabaseNotifications.php @@ -16,7 +16,6 @@ use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Facades\Schema; use Livewire\Attributes\On; -use App\Enums\ConstraintType; class MyDatabaseNotifications extends DatabaseNotifications { @@ -57,7 +56,7 @@ protected function shiftAssignmentConfirmExchange($soldierAId, $soldierBId, $shi $shiftA = Shift::find($shiftAId); $shiftB = Shift::find($shiftBId); $this->shiftAssignmentExchange($shiftA, $shiftB); - $this->deleteNonRelevantNotifications($shiftAId . '-' . $shiftBId); + $this->deleteNonRelevantNotifications($shiftAId.'-'.$shiftBId); $this->sendNotification( __('Exchange shift'), __( @@ -117,9 +116,9 @@ protected function shiftAssignmentConfirmExchange($soldierAId, $soldierBId, $shi User::find($requesterId) ); $this->getShiftsAssignments() - ->filter(fn($shiftsAssignment) => $shiftsAssignment->id !== auth()->user()->id) + ->filter(fn ($shiftsAssignment) => $shiftsAssignment->id !== auth()->user()->id) ->map( - fn($shiftsAssignment) => $this->sendNotification( + fn ($shiftsAssignment) => $this->sendNotification( __('Exchange shift'), __( 'Shifts assignment notification of exchanging shifts for shifts assignment', @@ -155,7 +154,7 @@ protected function commanderConfirmExchange($soldierAId, $soldierBId, $shiftAId, $shiftB = Shift::find($shiftBId); $this->getShiftsAssignments() ->map( - fn($shiftsAssignment) => $this->sendNotification( + fn ($shiftsAssignment) => $this->sendNotification( __('Request for shift exchange'), __( 'Request for shift exchange from shifts assignments', @@ -203,7 +202,7 @@ protected function commanderConfirmExchange($soldierAId, $soldierBId, $shiftAId, ->close(), ], $shiftsAssignment, - $shiftA->id . '-' . $shiftB->id + $shiftA->id.'-'.$shiftB->id ) ); } @@ -287,7 +286,7 @@ protected function shiftAssignmentDenyExchange($soldierAId, $soldierBId, $shiftA $soldierB = Soldier::find($soldierBId); $shiftA = Shift::find($shiftAId); $shiftB = Shift::find($shiftBId); - $this->deleteNonRelevantNotifications($shiftAId . '-' . $shiftBId); + $this->deleteNonRelevantNotifications($shiftAId.'-'.$shiftBId); if ($sendToSoldiers) { $this->sendNotification( __('Deny exchange shift request'), @@ -349,9 +348,9 @@ protected function shiftAssignmentDenyExchange($soldierAId, $soldierBId, $shiftA User::find($requesterId) ); $this->getShiftsAssignments() - ->filter(fn($shiftsAssignment) => $shiftsAssignment->id !== auth()->user()->id) + ->filter(fn ($shiftsAssignment) => $shiftsAssignment->id !== auth()->user()->id) ->map( - fn($shiftsAssignment) => $this->sendNotification( + fn ($shiftsAssignment) => $this->sendNotification( __('Deny exchange shift request'), __( 'Shifts assignment notification of deny exchanging shifts for shifts assignment', @@ -489,7 +488,7 @@ protected function shiftAssignmentConfirmChange($shiftId, $soldierId, $requester $shift = Shift::find($shiftId); $soldierA = Soldier::find($shift->soldier_id); $soldierB = Soldier::find($soldierId); - $this->deleteNonRelevantNotifications($shiftId . '-' . $shift->soldier_id . '-' . $soldierId); + $this->deleteNonRelevantNotifications($shiftId.'-'.$shift->soldier_id.'-'.$soldierId); Shift::where('id', $shiftId)->update(['soldier_id' => $soldierId]); $this->sendNotification( __('Change shift'), @@ -539,9 +538,9 @@ protected function shiftAssignmentConfirmChange($shiftId, $soldierId, $requester User::find($requesterId) ); $this->getShiftsAssignments() - ->filter(fn($shiftsAssignment) => $shiftsAssignment->id !== auth()->user()->id) + ->filter(fn ($shiftsAssignment) => $shiftsAssignment->id !== auth()->user()->id) ->map( - fn($shiftsAssignment) => $this->sendNotification( + fn ($shiftsAssignment) => $this->sendNotification( __('Change shift'), __( 'Shifts assignment notification of changing shifts for shifts assignment', @@ -566,7 +565,7 @@ protected function commanderConfirmChange($shiftId, $soldierId) $shift = Shift::find($shiftId); $this->getShiftsAssignments() ->map( - fn($shiftsAssignment) => $this->sendNotification( + fn ($shiftsAssignment) => $this->sendNotification( __('Request for shift change'), __( 'Request for shift change from shifts assignments', @@ -607,7 +606,7 @@ protected function commanderConfirmChange($shiftId, $soldierId) ->close(), ], $shiftsAssignment, - $shift->id . '-' . $shift->soldier_id . '-' . $soldierId + $shift->id.'-'.$shift->soldier_id.'-'.$soldierId ) ); } @@ -682,7 +681,7 @@ protected function shiftAssignmentDenyChange($shiftId, $soldierId, $requesterId, $shift = Shift::find($shiftId); $soldierA = Soldier::find($shift->soldier_id); $soldierB = Soldier::find($soldierId); - $this->deleteNonRelevantNotifications($shiftId . '-' . $shift->soldier_id . '-' . $soldierId); + $this->deleteNonRelevantNotifications($shiftId.'-'.$shift->soldier_id.'-'.$soldierId); if ($sendToSoldiers) { $this->sendNotification( __('Deny change shift request'), @@ -735,9 +734,9 @@ protected function shiftAssignmentDenyChange($shiftId, $soldierId, $requesterId, User::find($requesterId) ); $this->getShiftsAssignments() - ->filter(fn($shiftsAssignment) => $shiftsAssignment->id !== auth()->user()->id) + ->filter(fn ($shiftsAssignment) => $shiftsAssignment->id !== auth()->user()->id) ->map( - fn($shiftsAssignment) => $this->sendNotification( + fn ($shiftsAssignment) => $this->sendNotification( __('Deny change shift request'), __( 'Shifts assignment notification of deny changing shifts for shifts assignment', @@ -907,7 +906,7 @@ public function confirmConstraintEdit($user, $data) protected function confirmConstraintEditNotification($user, $data) { - $columns = Schema::getColumnListing(strtolower(class_basename($data['model'])) . 's'); + $columns = Schema::getColumnListing(strtolower(class_basename($data['model'])).'s'); $filteredData = array_intersect_key($data['data'], array_flip($columns)); $record = $data['model']::find($data['record']['id']); @@ -963,4 +962,4 @@ protected function sendNotification($title, $body, $actions, $user, $commonKey = ->actions($actions) ->sendToDatabase($user, true); } -} +} \ No newline at end of file diff --git a/app/Models/Constraint.php b/app/Models/Constraint.php index 1a59c75..1a65c5c 100644 --- a/app/Models/Constraint.php +++ b/app/Models/Constraint.php @@ -44,21 +44,21 @@ public static function getSchema(): array { return [ Placeholder::make('') - ->content(fn(Constraint $constraint) => $constraint->soldier_name) + ->content(fn (Constraint $constraint) => $constraint->soldier_name) ->inlineLabel() - ->hidden(fn(Constraint $constraint) => $constraint->soldier_id === auth()->user()->userable_id), + ->hidden(fn (Constraint $constraint) => $constraint->soldier_id === auth()->user()->userable_id), Select::make('soldier_id') ->label(__('Soldier')) ->hiddenOn('view') - ->visible(fn() => in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray()) - && \Str::contains($_SERVER['HTTP_REFERER'], 'my-soldiers-constraint')) - ->options(fn() => Cache::remember('users', 30 * 60, function () { + ->visible(fn () => in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray()) + && \Str::contains($_SERVER['HTTP_REFERER'], 'my-soldiers-constraint')) + ->options(fn () => Cache::remember('users', 30 * 60, function () { return User::all(); }) ->mapWithKeys(function ($user) { return [$user->userable_id => $user->displayName]; })) - ->afterStateUpdated(fn($state) => session()->put('soldier_id', $state)) + ->afterStateUpdated(fn ($state) => session()->put('soldier_id', $state)) ->required(), ToggleButtons::make('constraint_type') ->required() @@ -67,13 +67,13 @@ public static function getSchema(): array ->live() ->hiddenOn('view') ->inline() - ->options(fn(Get $get) => self::availableOptions($get('start_date'), $get('end_date'))) - ->afterStateUpdated(fn(callable $set, $state, Get $get) => self::updateDates($set, $state, $get)), + ->options(fn (Get $get) => self::availableOptions($get('start_date'), $get('end_date'))) + ->afterStateUpdated(fn (callable $set, $state, Get $get) => self::updateDates($set, $state, $get)), ToggleButtons::make('constraint_type_view') ->label(__('Constraint Name')) ->inline() ->visibleOn('view') - ->options(fn(Constraint $constraint) => [ + ->options(fn (Constraint $constraint) => [ $constraint->constraint_type->getLabel(), ]), @@ -83,12 +83,12 @@ public static function getSchema(): array ->required(), Placeholder::make('') ->content(__('Please note! This constraint will only be approved for you after approval from the commander.')) - ->visible(fn(Get $get) => ($get('constraint_type') === ConstraintType::VACATION->value || $get('constraint_type') === ConstraintType::MEDICAL->value) + ->visible(fn (Get $get) => ($get('constraint_type') === ConstraintType::VACATION->value || $get('constraint_type') === ConstraintType::MEDICAL->value) && auth()->user()->getRoleNames()->count() === 1) ->hiddenOn('view') ->extraAttributes(['style' => 'color: red; font-family: Arial, Helvetica, sans-serif; font-size: 20px']), Grid::make() - ->visible(fn($get) => in_array($get('constraint_type'), ['Medical', 'Vacation', 'School', 'Not task', 'Low priority not task'])) + ->visible(fn ($get) => in_array($get('constraint_type'), ['Medical', 'Vacation', 'School', 'Not task', 'Low priority not task'])) ->schema([ DateTimePicker::make('start_date') ->label(__('Start date')) @@ -112,7 +112,7 @@ public static function requestConstraint($data) 'name' => Soldier::find(auth()->user()->userable_id)->user->displayName, 'startDate' => $data['start_date'], 'endDate' => $data['end_date'], - 'type' => ConstraintType::from($data['constraint_type'])->getLabel(), + 'type' => __($data['constraint_type']), ]) ) ->actions( @@ -123,7 +123,7 @@ public static function requestConstraint($data) ->color('success') ->dispatch('confirmConstraint', [ 'user' => auth()->user()->id, - 'constraintName' => ConstraintType::from($data['constraint_type'])->getLabel(), + 'constraintName' => $data['constraint_type'], 'startDate' => $data['start_date'], 'endDate' => $data['end_date'], ]) @@ -134,7 +134,7 @@ public static function requestConstraint($data) ->color('danger') ->dispatch('denyConstraint', [ 'user' => auth()->user()->id, - 'constraintName' => ConstraintType::from($data['constraint_type'])->getLabel(), + 'constraintName' => __($data['constraint_type']), 'startDate' => $data['start_date'], 'endDate' => $data['end_date'], ]) @@ -156,7 +156,7 @@ public static function requestEditConstraint($data) 'endDate' => $data['record']['end_date']->format('Y-m-d H:i:s'), 'ToStartDate' => $data['data']['start_date'], 'ToEndDate' => $data['data']['end_date'], - 'type' => ConstraintType::from($data['data']['constraint_type'])->getLabel(), + 'type' => __($data['data']['constraint_type']), ]) ) ->actions( @@ -176,7 +176,7 @@ public static function requestEditConstraint($data) ->color('danger') ->dispatch('denyConstraintEdit', [ 'user' => auth()->user()->id, - 'constraintName' => ConstraintType::from($data['data']['constraint_type'])->getLabel(), + 'constraintName' => __($data['data']['constraint_type']), 'startDate' => $data['data']['start_date'], 'endDate' => $data['data']['end_date'], ]) @@ -195,8 +195,8 @@ private static function availableOptions($startDate, $endDate): array { $start_date = Carbon::parse($startDate); $options = array_combine( - array_map(fn($enum) => $enum->value, ConstraintType::cases()), - array_map(fn($enum) => $enum->getLabel(), ConstraintType::cases()) + array_map(fn ($enum) => $enum->value, ConstraintType::cases()), + array_map(fn ($enum) => $enum->getLabel(), ConstraintType::cases()) ); if ($start_date->isFriday() || $start_date->isSaturday()) { @@ -207,10 +207,10 @@ private static function availableOptions($startDate, $endDate): array unset($options[ConstraintType::NOT_WEEKEND->value]); unset($options[ConstraintType::LOW_PRIORITY_NOT_WEEKEND->value]); } - if (!$start_date->isSunday()) { + if (! $start_date->isSunday()) { unset($options[ConstraintType::NOT_SUNDAY_MORNING->value]); } - if (!(in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray()))) { + if (! (in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray()))) { $usedCounts = self::getUsedCountsForCurrentMonth($startDate, $endDate); $limits = Soldier::where('id', auth()->user()->userable_id)->pluck('constraints_limit')->first() ?: ConstraintType::getLimit(); $constraintsWithinLimit = []; @@ -223,7 +223,7 @@ private static function availableOptions($startDate, $endDate): array $used = $usedCounts[$constraint] ?? 0; $limit = $limits[$constraint] ?? 0; if ($limit === 0 || $used < $limit) { - if (!in_array($constraint, $queryConstraints)) { + if (! in_array($constraint, $queryConstraints)) { $constraintsWithinLimit[$constraint] = $label; } } @@ -316,21 +316,19 @@ public function getSoldierNameAttribute() { $user_name = User::where('userable_id', $this->soldier_id)->get(['first_name', 'last_name']); - return $user_name->first()?->first_name . ' ' . $user_name->first()?->last_name; + return $user_name->first()?->first_name.' '.$user_name->first()?->last_name; } public function getConstraintNameAttribute() { - $translatedConstraint = __($this->constraint_type); - return $this->soldier_id == auth()->user()->userable_id - ? $translatedConstraint - : $translatedConstraint . ' ' . $this->soldier_name; + ? $this->constraint_type->getLabel() + : $this->constraint_type->getLabel().' '.$this->soldier_name; } public function getConstraintColorAttribute() { - return ConstraintType::from($this->constraint_type)->getColor(); + return $this->constraint_type->getColor(); } public static function getFilters($calendar) @@ -341,12 +339,12 @@ public static function getFilters($calendar) ->icon('heroicon-o-funnel') ->form(function () use ($calendar) { $constraints = $calendar->getEventsByRole(); - $soldiersConstraints = array_filter($constraints->toArray(), fn($constraint) => $constraint['soldier_id'] !== null); + $soldiersConstraints = array_filter($constraints->toArray(), fn ($constraint) => $constraint['soldier_id'] !== null); return [ Select::make('soldier_id') ->label(__('Soldier')) - ->options(fn(): array => collect($soldiersConstraints)->mapWithKeys(fn($constraint) => [ + ->options(fn (): array => collect($soldiersConstraints)->mapWithKeys(fn ($constraint) => [ $constraint['soldier_id'] => User::where('userable_id', $constraint['soldier_id']) ->first()?->displayName, ])->toArray()) @@ -384,4 +382,4 @@ public static function getTitle(): string { return __('Constraint'); } -} +} \ No newline at end of file diff --git a/app/Resources/SoldierResource.php b/app/Resources/SoldierResource.php index ef5ecaf..d249b12 100644 --- a/app/Resources/SoldierResource.php +++ b/app/Resources/SoldierResource.php @@ -64,7 +64,7 @@ public static function table(Table $table): Table TextColumn::make('user') ->label(__('Full name')) ->formatStateUsing(function ($record) { - return $record->user->last_name . ' ' . $record->user->first_name; + return $record->user->last_name.' '.$record->user->first_name; }) ->searchable(query: function ($query, $search) { $query->whereHas('user', function ($query) use ($search) { @@ -77,9 +77,9 @@ public static function table(Table $table): Table ->label(__('Reservist')), BadgeColumn::make('gender') ->label(__('Gender')) - ->formatStateUsing(fn($state) => $state ? __('Male') : __('Female')) + ->formatStateUsing(fn ($state) => $state ? __('Male') : __('Female')) ->badge() - ->color(fn($state) => $state ? 'info' : 'primary') + ->color(fn ($state) => $state ? 'info' : 'primary') ->sortable(), TextColumn::make('role') ->label(__('Role')) @@ -121,7 +121,7 @@ function ($record) { return $soldierShifts->filter(function (Shift $shift): bool { return Carbon::parse($shift->start_date)->month == now()->month || Carbon::parse($shift->end_date)->month == now()->month; - })->sum(fn(Shift $shift) => $shift->parallel_weight === null ? $shift->task->parallel_weight : $shift->parallel_weight); + })->sum(fn (Shift $shift) => $shift->parallel_weight === null ? $shift->task->parallel_weight : $shift->parallel_weight); }) ->label(__('Capacity hold')) ->numeric(), @@ -135,7 +135,7 @@ function ($record) { } }) ->toggleColumnsTriggerAction( - fn(Action $action) => $action + fn (Action $action) => $action ->button() ->label(__('Columns')), ) @@ -166,19 +166,19 @@ function ($record) { ->default(null), Filter::make('reservist') ->label(__('Reservist')) - ->query(fn(Builder $query): Builder => $query->where('is_reservist', 1)) + ->query(fn (Builder $query): Builder => $query->where('is_reservist', 1)) ->toggle(), Filter::make('is_mabat') ->label(__('Is mabat')) - ->query(fn(Builder $query): Builder => $query->where('is_mabat', true)) + ->query(fn (Builder $query): Builder => $query->where('is_mabat', true)) ->toggle(), Filter::make('has_exemption') ->label(__('Exemption')) - ->query(fn(Builder $query): Builder => $query->where('has_exemption', true)) + ->query(fn (Builder $query): Builder => $query->where('has_exemption', true)) ->toggle(), Filter::make('is_trainee') ->label(__('Is trainee')) - ->query(fn(Builder $query): Builder => $query->where('is_trainee', true)) + ->query(fn (Builder $query): Builder => $query->where('is_trainee', true)) ->toggle(), Filter::make('enlist_date') ->form([ @@ -196,11 +196,11 @@ function ($record) { return $query ->when( $data['recruitment_from'], - fn(Builder $query, $date): Builder => $query->whereDate('enlist_date', '>=', $date), + fn (Builder $query, $date): Builder => $query->whereDate('enlist_date', '>=', $date), ) ->when( $data['recruitment_until'], - fn(Builder $query, $date): Builder => $query->whereDate('enlist_date', '<=', $date), + fn (Builder $query, $date): Builder => $query->whereDate('enlist_date', '<=', $date), ); }), @@ -208,7 +208,7 @@ function ($record) { ->filtersFormColumns(4) ->deferFilters() ->filtersTriggerAction( - fn(Action $action) => $action + fn (Action $action) => $action ->button() ->label(__('Filter')) ) @@ -219,7 +219,7 @@ function ($record) { EditAction::make(), DeleteAction::make() ->label(__('Delete')) - ->modalHeading(__('Delete') . ' ' . self::getModelLabel()), + ->modalHeading(__('Delete').' '.self::getModelLabel()), ViewAction::make() ->label(__('Display')) ->mutateRecordDataUsing(function (array $data, $record): array { @@ -260,7 +260,7 @@ function ($record) { $record->save(); }) ->closeModalByClickingAway(false) - ->hidden(fn($record) => !$record->is_reservist), + ->hidden(fn ($record) => ! $record->is_reservist), ReplicateAction::make() ->icon('heroicon-o-document-duplicate') ->color('success') @@ -511,4 +511,4 @@ public static function getPluralModelLabel(): string { return __('Soldiers'); } -} +} \ No newline at end of file diff --git a/app/Resources/SoldierResource/Pages/EditSoldier.php b/app/Resources/SoldierResource/Pages/EditSoldier.php index c2044f2..7ad826e 100644 --- a/app/Resources/SoldierResource/Pages/EditSoldier.php +++ b/app/Resources/SoldierResource/Pages/EditSoldier.php @@ -4,8 +4,9 @@ use App\Models\User; use App\Resources\SoldierResource; -use Filament\Resources\Pages\EditRecord; use Filament\Notifications\Notification; +use Filament\Resources\Pages\EditRecord; + class EditSoldier extends EditRecord { protected static string $resource = SoldierResource::class; @@ -19,34 +20,33 @@ protected function mutateFormDataBeforeFill(array $data): array ->toArray()) : session()->get('shifts_assignment'); - return $data; } protected function mutateFormDataBeforeSave(array $data): array { - if (!$data['is_reservist']) { + if (! $data['is_reservist']) { $data['reserve_dates'] = null; $data['next_reserve_dates'] = null; } return $data; } + protected function beforeSave(): void { $userName = User::where('last_name', $this->data['user']['last_name']) ->where('first_name', $this->data['user']['first_name']) ->pluck('last_name', 'first_name'); - if ( ($userName = $userName->get($this->data['user']['first_name']) == $this->data['user']['last_name']) && - $this->record->user->displayName !== $this->data['user']['first_name'] . ' ' . $this->data['user']['last_name'] + $this->record->user->displayName !== $this->data['user']['first_name'].' '.$this->data['user']['last_name'] ) { Notification::make() ->warning() ->title(__('This name already exists in the system!')) ->body(__('Add identifier', [ - 'example' => ($this->data['user']['first_name'] . ' ' . $this->data['user']['last_name'] . '2'), + 'example' => ($this->data['user']['first_name'].' '.$this->data['user']['last_name'].'2'), ])) ->persistent() ->send(); @@ -67,7 +67,7 @@ protected function afterSave(): void $this->data['shifts_assignment'] == 1 ? $user->assignRole('soldier', 'shifts-assignment') : $user->assignRole('soldier'); } else { $roles = $user->getRoleNames()->toArray(); - if ($this->data['shifts_assignment'] == 1 && !in_array('shifts-assignment', $roles)) { + if ($this->data['shifts_assignment'] == 1 && ! in_array('shifts-assignment', $roles)) { $user->assignRole('shifts-assignment'); } if ($this->data['shifts_assignment'] == 0 && in_array('shifts-assignment', $roles)) { @@ -75,4 +75,4 @@ protected function afterSave(): void } } } -} +} \ No newline at end of file diff --git a/app/Resources/TaskResource.php b/app/Resources/TaskResource.php index b90e210..82df056 100644 --- a/app/Resources/TaskResource.php +++ b/app/Resources/TaskResource.php @@ -117,17 +117,17 @@ public static function table(Table $table): Table ->description(__('Alert'), 'above') ->extraAttributes(['style' => 'margin: 5px;']) ->size(TextColumnSize::Small) - ->formatStateUsing(fn($state) => $state ? __('Yes') : __('No')), + ->formatStateUsing(fn ($state) => $state ? __('Yes') : __('No')), TextColumn::make('is_weekend') ->description(__('Is weekend'), 'above') ->size(TextColumnSize::Small) ->extraAttributes(['style' => 'margin: 5px;']) - ->formatStateUsing(fn($state) => $state ? __('Yes') : __('No')), + ->formatStateUsing(fn ($state) => $state ? __('Yes') : __('No')), TextColumn::make('is_night') ->description(__('Is night'), 'above') ->size(TextColumnSize::Small) ->extraAttributes(['style' => 'margin: 5px;']) - ->formatStateUsing(fn($state) => $state ? __('Yes') : __('No')), + ->formatStateUsing(fn ($state) => $state ? __('Yes') : __('No')), ]) ->space(2) @@ -137,7 +137,7 @@ public static function table(Table $table): Table ->description(__('In parallel'), 'above') ->size(TextColumnSize::Small) ->extraAttributes(['style' => 'margin: 5px;']) - ->formatStateUsing(fn($state) => $state ? __('Yes') : __('No')), + ->formatStateUsing(fn ($state) => $state ? __('Yes') : __('No')), TextColumn::make('concurrent_tasks') ->description(__('Concurrent tasks'), 'above') ->size(TextColumnSize::Small) @@ -176,8 +176,8 @@ public static function table(Table $table): Table ->description(__('Days in week'), 'above') ->size(TextColumnSize::Small) ->extraAttributes(['style' => 'margin-left: 15px;']) - ->formatStateUsing(fn($state) => collect(explode(', ', $state)) - ->map(fn($day) => DaysInWeek::from($day)->getLabel()) + ->formatStateUsing(fn ($state) => collect(explode(', ', $state)) + ->map(fn ($day) => DaysInWeek::from($day)->getLabel()) ->implode(', ')), TextColumn::make('recurring.dates_in_month') ->description(__('Dates in month'), 'above') @@ -219,7 +219,7 @@ public static function table(Table $table): Table ->label(__('Recurring type')) ->multiple() ->searchable() - ->options(collect(RecurringType::cases())->mapWithKeys(fn($type) => [$type->value => $type->getLabel()])) + ->options(collect(RecurringType::cases())->mapWithKeys(fn ($type) => [$type->value => $type->getLabel()])) ->query(function (Builder $query, array $data) { return collect($data['values'])->map(function ($type) use ($query) { return $query->orWhereJsonContains('recurring', $type); @@ -230,15 +230,15 @@ public static function table(Table $table): Table ->label(__('Parallel weight')), Filter::make('is_alert') ->label(__('Is alert')) - ->query(fn(Builder $query): Builder => $query->where('is_alert', true)) + ->query(fn (Builder $query): Builder => $query->where('is_alert', true)) ->toggle(), Filter::make('is_weekend') ->label(__('Is weekend')) - ->query(fn(Builder $query): Builder => $query->where('is_weekend', true)) + ->query(fn (Builder $query): Builder => $query->where('is_weekend', true)) ->toggle(), Filter::make('is_night') ->label(__('Is night')) - ->query(fn(Builder $query): Builder => $query->where('is_night', true)) + ->query(fn (Builder $query): Builder => $query->where('is_night', true)) ->toggle(), SelectFilter::make('department_name') ->label(__('Department name')) @@ -251,7 +251,7 @@ public static function table(Table $table): Table ], FiltersLayout::Modal) ->deferFilters() ->filtersTriggerAction( - fn(Action $action) => $action + fn (Action $action) => $action ->button() ->label(__('Filter')) ) @@ -260,7 +260,7 @@ public static function table(Table $table): Table EditAction::make(), DeleteAction::make() ->label(__('Delete')) - ->modalHeading(__('Delete') . ' ' . self::getModelLabel()), + ->modalHeading(__('Delete').' '.self::getModelLabel()), ]), ]) @@ -322,24 +322,24 @@ public static function getRecurring(): array return [ ToggleButtons::make('recurring.type') ->label(__('Type')) - ->options(collect(RecurringType::cases())->mapWithKeys(fn($type) => [$type->value => $type->getLabel()]))->live() + ->options(collect(RecurringType::cases())->mapWithKeys(fn ($type) => [$type->value => $type->getLabel()]))->live() ->required() ->inline(), Select::make('recurring.days_in_week') ->label(__('Days in week')) ->multiple() ->options( - collect(DaysInWeek::cases())->mapWithKeys(fn($type) => [$type->value => $type->getLabel()]) + collect(DaysInWeek::cases())->mapWithKeys(fn ($type) => [$type->value => $type->getLabel()]) ) - ->visible(fn(Get $get): bool => $get('recurring.type') === 'Weekly') + ->visible(fn (Get $get): bool => $get('recurring.type') === 'Weekly') ->default(null) ->required(), Select::make('recurring.dates_in_month') - ->label(fn(Get $get) => $get('recurring.type') === 'Monthly' ? __('Date') : __('Dates')) + ->label(fn (Get $get) => $get('recurring.type') === 'Monthly' ? __('Date') : __('Dates')) ->placeholder(__('Select from dates')) - ->multiple(fn(Get $get): bool => $get('recurring.type') === 'Custom') + ->multiple(fn (Get $get): bool => $get('recurring.type') === 'Custom') ->options(array_combine(range(1, 31), range(1, 31))) - ->visible(fn(Get $get): bool => $get('recurring.type') === 'Monthly' || $get('recurring.type') === 'Custom') + ->visible(fn (Get $get): bool => $get('recurring.type') === 'Monthly' || $get('recurring.type') === 'Custom') ->default(null) ->live() ->required(), @@ -352,14 +352,14 @@ public static function getRecurring(): array ->label(__('End date')) ->after('recurring.start_date') ->required(), - ])->visible(fn(Get $get): bool => $get('recurring.type') === 'Daily range'), + ])->visible(fn (Get $get): bool => $get('recurring.type') === 'Daily range'), DatePicker::make('recurring.date') ->label(__('Date')) ->required() ->minDate(today()) ->live() - ->visible(fn(Get $get) => $get('recurring.type') === 'One time'), + ->visible(fn (Get $get) => $get('recurring.type') === 'One time'), ]; } @@ -367,12 +367,12 @@ public static function assignSoldier(): array { return [ Placeholder::make('') - ->content(fn($record) => $record['recurring']['type'] === RecurringType::ONETIME->value ? + ->content(fn ($record) => $record['recurring']['type'] === RecurringType::ONETIME->value ? __('This task is assigned to', ['soldierName' => Soldier::find(Shift::where('task_id', $record->id)->pluck('soldier_id')->first())->user->displayName]) : null) ->extraAttributes(['style' => 'font-size: 15px']) ->live() ->hiddenOn('create') - ->visible(fn($record) => $record['recurring']['type'] === RecurringType::ONETIME->value && Shift::where('task_id', $record->id)->pluck('soldier_id')->first() !== null), + ->visible(fn ($record) => $record['recurring']['type'] === RecurringType::ONETIME->value && Shift::where('task_id', $record->id)->pluck('soldier_id')->first() !== null), Fieldset::make(__('Soldier assignment')) ->schema([ ToggleButtons::make('soldier_type') @@ -381,9 +381,9 @@ public static function assignSoldier(): array ->live() ->inline() ->options( - fn(Get $get) => self::getOptions($get) + fn (Get $get) => self::getOptions($get) ) - ->afterStateUpdated(fn(callable $set) => $set('soldier_id', null)), + ->afterStateUpdated(fn (callable $set) => $set('soldier_id', null)), Select::make('soldier_id') ->label(__('Assign soldier')) ->options( @@ -392,9 +392,9 @@ function (Get $get) { } ) ->default(null) - ->placeholder(fn(Get $get) => self::getSoldiers($get)->isEmpty() ? __('No suitable soldiers') : __('Select a soldier')) + ->placeholder(fn (Get $get) => self::getSoldiers($get)->isEmpty() ? __('No suitable soldiers') : __('Select a soldier')) ->visible( - fn(Get $get): bool => $get('soldier_type') + fn (Get $get): bool => $get('soldier_type') && $get('soldier_type') != 'me' ) ->live(), @@ -402,7 +402,7 @@ function (Get $get) { ->content(__('Assigning the soldier to this shift is your sole responsibility!')) ->extraAttributes(['style' => 'color: red; font-family: Arial, Helvetica, sans-serif; font-size: 20px']) ->live() - ->visible(fn(Get $get) => $get('soldier_type') === 'all'), + ->visible(fn (Get $get) => $get('soldier_type') === 'all'), ]), ]; } @@ -422,9 +422,9 @@ public static function additionalDetails(): array Select::make('concurrent_tasks') ->label(__('Concurrent tasks')) ->multiple() - ->placeholder(fn() => Task::count() > 0 ? __('Select concurrent tasks') : __('No tasks')) + ->placeholder(fn () => Task::count() > 0 ? __('Select concurrent tasks') : __('No tasks')) ->options(Task::all()->pluck('type', 'type')) - ->visible(fn(Get $get) => $get('in_parallel')), + ->visible(fn (Get $get) => $get('in_parallel')), ]; } @@ -437,7 +437,7 @@ protected static function getOptions(Get $get): array ]; if ($get('department_name')) { $options = collect($options) - ->put('department', '"' . $get('department_name') . '" ' . __('Department')) + ->put('department', '"'.$get('department_name').'" '.__('Department')) ->toArray(); } if (self::amIAvailable($get)) { @@ -445,7 +445,7 @@ protected static function getOptions(Get $get): array ->put('me', __('Me')) ->toArray(); } - if (!in_array('manager', auth()->user()->getRoleNames()->toArray()) && !in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray())) { + if (! in_array('manager', auth()->user()->getRoleNames()->toArray()) && ! in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray())) { return collect($options) ->put('my_soldiers', __('My Soldiers')) ->toArray(); @@ -491,10 +491,10 @@ protected static function taskDetails(Get $get) $shift = new Shift; $shift->id = null; $shift->task = $task; - $shift->start_date = Carbon::parse($task_date->format('Y-m-d') . ' ' . $get('start_hour')); + $shift->start_date = Carbon::parse($task_date->format('Y-m-d').' '.$get('start_hour')); $shift->end_date = $shift->start_date->copy()->addHours((float) ($get('duration'))); $shift->parallel_weight = $get('parallel_weight'); return $shift; } -} +} \ No newline at end of file diff --git a/app/Services/Charts.php b/app/Services/Charts.php index f8f4b1f..28d0a97 100644 --- a/app/Services/Charts.php +++ b/app/Services/Charts.php @@ -2,7 +2,6 @@ namespace App\Services; -use App\Enums\ConstraintType; use App\Models\Constraint as ConstraintModel; use App\Models\Shift; use App\Models\Soldier; @@ -93,7 +92,7 @@ protected function howMuchLowConstraintsRejected($constraints, $shifts): int { $count = 0; $constraints->filter( - fn (ConstraintModel $constraint) => ConstraintType::getPriority()[$constraint->constraint_type] == 2 + fn (ConstraintModel $constraint) => $constraint->constraint_type->getPriority() == 2 ) ->map( function ($constraint) use ($count, $shifts) { @@ -110,4 +109,4 @@ function ($constraint) use ($count, $shifts) { return $count; } -} +} \ No newline at end of file diff --git a/app/Services/Helpers.php b/app/Services/Helpers.php index 753b302..6f49237 100644 --- a/app/Services/Helpers.php +++ b/app/Services/Helpers.php @@ -2,7 +2,6 @@ namespace App\Services; -use App\Enums\ConstraintType; use App\Enums\Priority; use App\Models\Constraint; use App\Models\Shift; @@ -54,7 +53,7 @@ public static function buildConstraints($constraints, $newRange) fn (Constraint $constraint): ConstraintService => new ConstraintService( $constraint->start_date, $constraint->end_date, - ConstraintType::getPriority()[$constraint->constraint_type] == 1 ? Priority::HIGH : Priority::LOW + $constraint->constraint_type->getPriority() == 1 ? Priority::HIGH : Priority::LOW ) ); } @@ -123,4 +122,4 @@ public static function updateShiftTable($assignments) { collect($assignments)->map(fn (Assignment $assignment) => Shift::where('id', $assignment->shiftId)->update(['soldier_id' => $assignment->soldierId])); } -} +} \ No newline at end of file diff --git a/lang/en.json b/lang/en.json index eeabce4..5924eef 100644 --- a/lang/en.json +++ b/lang/en.json @@ -46,4 +46,4 @@ "Commander approved edit constraint": "Hello :name!
Your request to edit constraint :constraintName
to move from date: :startDate to :endDate to date: :ToStartDate to :ToEndDate
has been approved!
The change has been updated successfully!
Have a nice day!", "Commander deny edit constraint":"Hello :name!
Your request to move constraint :constraintName
from: :startDate to :endDate
has been rejected!
Have a nice day!", "Add identifier":"Add an identifier to the name so that it is not the same as another name. For example: :example" -} +} \ No newline at end of file diff --git a/lang/he.json b/lang/he.json index f9ad860..63411fd 100644 --- a/lang/he.json +++ b/lang/he.json @@ -292,7 +292,7 @@ "Constraint request rejected":"דחיית הוספת אילוץ", "Commander approved create constraint":"שלום :name!
בקשתך להוספת האילוץ :constraintName
מ :startDate עד :endDate אושרה!
המשך יום טוב!", "Commander deny create constraint":"שלום :name!
בקשתך להוספת האילוץ :constraintName
מ :startDate עד :endDate נדחתה!
המשך יום טוב!", - "Please note! This constraint will only be approved for you after approval from the commander.":"שים לב! אילוץ זה יאושר עבורך רק לאחר אישור המפקד.", + "Please note! This constraint will only be approved for you after approval from the commander.":"שים לב! אילוץ זה מחייב אישור מפקד.", "You did not choose a commander. With your approval, you leave the department without a commander. Are you sure?":"לא נבחר מפקד. באישורך אתה יוצר צוות ללא מפקד.האם אתה בטוח?", "Shifts Assigments":"שיבוץ משמרות", "In parallel":"תורנות", @@ -301,7 +301,10 @@ "No tasks":"אין משימות", "The soldier is assigned a shift during the task":"לחייל מוקצית תורנות בזמן המשמרת", "Shift details edit":"החייל :name מבקש את האישור שלך לערוך את האילוץ :type שלו ולהזיז אותו ל:
מ :startDate עד :endDate.
ל :ToStartDate עד :ToEndDate.
האם אתה מאשר?", - "Commander approved edit constraint": "שלום :name!
בקשתך לעריכת האילוץ :constraintName
להזיזו מהתאריך: :startDate עד :endDate לתאריך: :ToStartDate עד :ToEndDate
אושרה!
האילוץ עודכן בהצלחה !
המשך יום טוב!", - "Commander deny edit constraint":"שלום :name!
בקשתך להזזת האילוץ :constraintName
מ: :startDate עד :endDate
נדחתה!
המשך יום טוב!" - -} + "Commander approved edit constraint": "שלום :name!
בקשתך לעריכת האילוץ :constraintName
להזיזו מהתאריך: :startDate עד :endDate לתאריך: :ToStartDate עד :ToEndDate
אושרה והאילוץ עודכן.
המשך יום טוב!", + "Commander deny edit constraint":"שלום :name!
בקשתך להזזת האילוץ :constraintName
מ: :startDate עד :endDate
נדחתה!
המשך יום טוב!", + "Add identifier":"הוסף מזהה לשם על מנת למנוע משתמשים עם שמות כפולים. לדוגמה :example", + "Your request to edit the constraint has been approved":"בקשתך לעריכת אילוץ אושרה", + "Your request to edit the constraint has been rejected":"בקשתך לעריכת אילוץ נדחתה", + "Do you approve the request to edit the constraint?":"האם אתה מאשר עריכת אילוץ?" +} \ No newline at end of file From dc80686c6dea893bb83b14daac2a6ad27a969d55 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 5 Feb 2025 14:50:07 +0200 Subject: [PATCH 090/259] deploy version --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 14 ++++++---- app/Filters/NumberFilter.php | 30 +++++++++++----------- 3 files changed, 25 insertions(+), 21 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index b7856a3..f1728c4 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_26 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_27 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 606ee1c..b726c35 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -354,11 +354,15 @@ protected function getBasicActions() ->extraModalFooterActions(function (Action $action, array $arguments): array { $canSave = empty($arguments) ? true : ( ($this->model === Constraint::class) ? ( - isset($this->mountedActionsData[0]['constraint_type']) && - array_key_exists( - $this->mountedActionsData[0]['constraint_type'], - $this->model::getAvailableOptions($arguments['event']['start'], $arguments['event']['end']) - ) + isset($this->mountedActionsData[0]['constraint_type']) ? ( + $arguments['type'] === 'drop' ? true : ( + isset($this->mountedActionsData[0]['constraint_type']) && + array_key_exists( + $this->mountedActionsData[0]['constraint_type'], + $this->model::getAvailableOptions($arguments['event']['start'], $arguments['event']['end']) + ) + ) + ) : false ) : true ); if (! empty($arguments) && $this->model === Shift::class) { diff --git a/app/Filters/NumberFilter.php b/app/Filters/NumberFilter.php index 2116df5..871e1ff 100644 --- a/app/Filters/NumberFilter.php +++ b/app/Filters/NumberFilter.php @@ -94,7 +94,7 @@ protected function setUp(): void return $query ->when( - ! empty($data['range_equal']), + isset($data['range_equal']), function () use ($allObjects, $data, $query) { $filteredIds = $allObjects ->filter(fn ($object) => $object[$this->getName()] == $data['range_equal']) @@ -104,7 +104,7 @@ function () use ($allObjects, $data, $query) { } ) ->when( - ! empty($data['range_not_equal']), + isset($data['range_not_equal']), function () use ($allObjects, $data, $query) { $filteredIds = $allObjects ->filter(fn ($object) => $object[$this->getName()] != $data['range_not_equal']) @@ -114,7 +114,7 @@ function () use ($allObjects, $data, $query) { } ) ->when( - ! empty($data['range_between_from']) && ! empty($data['range_between_to']), + isset($data['range_between_from']) && isset($data['range_between_to']), function () use ($allObjects, $data, $query) { $filteredIds = $allObjects ->filter(fn ($object) => $object[$this->getName()] >= $data['range_between_from'] && $object[$this->getName()] <= $data['range_between_to']) @@ -124,7 +124,7 @@ function () use ($allObjects, $data, $query) { } ) ->when( - ! empty($data['range_greater_than']), + isset($data['range_greater_than']), function () use ($allObjects, $data, $query) { $filteredIds = $allObjects ->filter(fn ($object) => $object[$this->getName()] > $data['range_greater_than']) @@ -134,7 +134,7 @@ function () use ($allObjects, $data, $query) { } ) ->when( - ! empty($data['range_greater_than_equal']), + isset($data['range_greater_than_equal']), function () use ($allObjects, $data, $query) { $filteredIds = $allObjects ->filter(fn ($object) => $object[$this->getName()] >= $data['range_greater_than_equal']) @@ -144,7 +144,7 @@ function () use ($allObjects, $data, $query) { } ) ->when( - ! empty($data['range_less_than']), + isset($data['range_less_than']), function () use ($allObjects, $data, $query) { $filteredIds = $allObjects ->filter(fn ($object) => $object[$this->getName()] < $data['range_less_than']) @@ -154,7 +154,7 @@ function () use ($allObjects, $data, $query) { } ) ->when( - ! empty($data['range_less_than_equal']), + isset($data['range_less_than_equal']), function () use ($allObjects, $data, $query) { $filteredIds = $allObjects ->filter(fn ($object) => $object[$this->getName()] <= $data['range_less_than_equal']) @@ -167,7 +167,7 @@ function () use ($allObjects, $data, $query) { ->indicateUsing(function (array $data): array { $indicators = []; - if (! empty($data['range_between_from']) || ! empty($data['range_between_to'])) { + if (isset($data['range_between_from']) || isset($data['range_between_to'])) { $indicators[] = Indicator::make(__('Range between', [ 'label' => $this->getLabel(), 'fromValue' => $data['range_between_from'], @@ -177,7 +177,7 @@ function () use ($allObjects, $data, $query) { ->removeField('range_between_to'); } - if (! empty($data['range_equal'])) { + if (isset($data['range_equal'])) { $indicators[] = Indicator::make(__('Range equal', [ 'label' => $this->getLabel(), 'value' => $data['range_equal'], @@ -185,7 +185,7 @@ function () use ($allObjects, $data, $query) { ->removeField('range_equal'); } - if (! empty($data['range_not_equal'])) { + if (isset($data['range_not_equal'])) { $indicators[] = Indicator::make(__('Range not equal', [ 'label' => $this->getLabel(), 'value' => $data['range_not_equal'], @@ -193,7 +193,7 @@ function () use ($allObjects, $data, $query) { ->removeField('range_not_equal'); } - if (! empty($data['range_greater_than'])) { + if (isset($data['range_greater_than'])) { $indicators[] = Indicator::make(__('Range greater than', [ 'label' => $this->getLabel(), 'value' => $data['range_greater_than'], @@ -201,7 +201,7 @@ function () use ($allObjects, $data, $query) { ->removeField('range_greater_than'); } - if (! empty($data['range_greater_than_equal'])) { + if (isset($data['range_greater_than_equal'])) { $indicators[] = Indicator::make(__('Range greater than equal', [ 'label' => $this->getLabel(), 'value' => $data['range_greater_than_equal'], @@ -209,7 +209,7 @@ function () use ($allObjects, $data, $query) { ->removeField('range_greater_than_equal'); } - if (! empty($data['range_less_than'])) { + if (isset($data['range_less_than'])) { $indicators[] = Indicator::make(__('Range less than', [ 'label' => $this->getLabel(), 'value' => $data['range_less_than'], @@ -217,7 +217,7 @@ function () use ($allObjects, $data, $query) { ->removeField('range_less_than'); } - if (! empty($data['range_less_than_equal'])) { + if (isset($data['range_less_than_equal'])) { $indicators[] = Indicator::make(__('Range less than equal', [ 'label' => $this->getLabel(), 'value' => $data['range_less_than_equal'], @@ -228,4 +228,4 @@ function () use ($allObjects, $data, $query) { return $indicators; }); } -} +} \ No newline at end of file From 470fb35b294dd83afce796dd22e249c383f47dfc Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 6 Feb 2025 12:48:10 +0200 Subject: [PATCH 091/259] deploy version --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 24 +- app/Filters/NumberFilter.php | 2 +- app/Livewire/MyDatabaseNotifications.php | 2 +- app/Models/Constraint.php | 16 +- app/Policies/TeamPolicy.php | 5 + app/Resources/SoldierResource.php | 2 +- .../SoldierResource/Pages/EditSoldier.php | 2 +- app/Resources/TaskResource.php | 2 +- app/Services/Charts.php | 2 +- app/Services/Helpers.php | 2 +- app/Services/ManualAssignment.php | 5 +- database/seeders/DatabaseSeeder.php | 1688 ++++++++--------- lang/en.json | 2 +- lang/he.json | 2 +- tests/Feature/ConstraintTest.php | 2 +- 16 files changed, 849 insertions(+), 911 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index f1728c4..d93f2cd 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_27 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_28 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index b726c35..3d85218 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -353,17 +353,17 @@ protected function getBasicActions() ->closeModalByClickingAway(false) ->extraModalFooterActions(function (Action $action, array $arguments): array { $canSave = empty($arguments) ? true : ( - ($this->model === Constraint::class) ? ( - isset($this->mountedActionsData[0]['constraint_type']) ? ( - $arguments['type'] === 'drop' ? true : ( - isset($this->mountedActionsData[0]['constraint_type']) && - array_key_exists( - $this->mountedActionsData[0]['constraint_type'], - $this->model::getAvailableOptions($arguments['event']['start'], $arguments['event']['end']) - ) - ) - ) : false - ) : true + $this->model === Constraint::class && isset($this->mountedActionsData[0]['constraint_type']) ? ( + $arguments['type'] === 'drop' ? + array_key_exists( + $this->mountedActionsData[0]['constraint_type'], + $this->model::getAvailableOptions($arguments['event']['start'], $arguments['event']['end'], false) + ) : + array_key_exists( + $this->mountedActionsData[0]['constraint_type'], + $this->model::getAvailableOptions($arguments['event']['start'], $arguments['event']['end']) + ) + ) : false ); if (! empty($arguments) && $this->model === Shift::class) { $oldDate = date('l', strtotime($this->mountedActionsArguments[0]['oldEvent']['start'])); @@ -521,4 +521,4 @@ public function onEventDrop(array $event, array $oldEvent, array $relatedEvents, return false; } -} \ No newline at end of file +} diff --git a/app/Filters/NumberFilter.php b/app/Filters/NumberFilter.php index 871e1ff..96ec050 100644 --- a/app/Filters/NumberFilter.php +++ b/app/Filters/NumberFilter.php @@ -228,4 +228,4 @@ function () use ($allObjects, $data, $query) { return $indicators; }); } -} \ No newline at end of file +} diff --git a/app/Livewire/MyDatabaseNotifications.php b/app/Livewire/MyDatabaseNotifications.php index 52f9794..3e691a3 100644 --- a/app/Livewire/MyDatabaseNotifications.php +++ b/app/Livewire/MyDatabaseNotifications.php @@ -962,4 +962,4 @@ protected function sendNotification($title, $body, $actions, $user, $commonKey = ->actions($actions) ->sendToDatabase($user, true); } -} \ No newline at end of file +} diff --git a/app/Models/Constraint.php b/app/Models/Constraint.php index 1a65c5c..22c934b 100644 --- a/app/Models/Constraint.php +++ b/app/Models/Constraint.php @@ -186,14 +186,15 @@ public static function requestEditConstraint($data) ->sendToDatabase($commander, true); } - public static function getAvailableOptions($startDate, $endDate): array + public static function getAvailableOptions($startDate, $endDate, $withLimit = true): array { - return static::availableOptions($startDate, $endDate); + return static::availableOptions($startDate, $endDate, $withLimit); } - private static function availableOptions($startDate, $endDate): array + private static function availableOptions($startDate, $endDate, $withLimit = true): array { $start_date = Carbon::parse($startDate); + $end_date = Carbon::parse($endDate); $options = array_combine( array_map(fn ($enum) => $enum->value, ConstraintType::cases()), array_map(fn ($enum) => $enum->getLabel(), ConstraintType::cases()) @@ -210,7 +211,12 @@ private static function availableOptions($startDate, $endDate): array if (! $start_date->isSunday()) { unset($options[ConstraintType::NOT_SUNDAY_MORNING->value]); } - if (! (in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray()))) { + if ($end_date->gt($start_date)) { + unset($options[ConstraintType::NOT_SUNDAY_MORNING->value]); + unset($options[ConstraintType::NOT_THURSDAY_EVENING->value]); + unset($options[ConstraintType::NOT_EVENING->value]); + } + if ($withLimit && ! (in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray()))) { $usedCounts = self::getUsedCountsForCurrentMonth($startDate, $endDate); $limits = Soldier::where('id', auth()->user()->userable_id)->pluck('constraints_limit')->first() ?: ConstraintType::getLimit(); $constraintsWithinLimit = []; @@ -382,4 +388,4 @@ public static function getTitle(): string { return __('Constraint'); } -} \ No newline at end of file +} diff --git a/app/Policies/TeamPolicy.php b/app/Policies/TeamPolicy.php index 7641f9a..1edf733 100644 --- a/app/Policies/TeamPolicy.php +++ b/app/Policies/TeamPolicy.php @@ -10,4 +10,9 @@ public function viewAny(User $user): bool { return $user->hasRole(['manager', 'shifts-assignment', 'department-commander', 'team-commander']); } + + public function create(User $user): bool + { + return $user->hasRole(['manager', 'shifts-assignment', 'department-commander']); + } } diff --git a/app/Resources/SoldierResource.php b/app/Resources/SoldierResource.php index d249b12..9bf9f84 100644 --- a/app/Resources/SoldierResource.php +++ b/app/Resources/SoldierResource.php @@ -511,4 +511,4 @@ public static function getPluralModelLabel(): string { return __('Soldiers'); } -} \ No newline at end of file +} diff --git a/app/Resources/SoldierResource/Pages/EditSoldier.php b/app/Resources/SoldierResource/Pages/EditSoldier.php index 7ad826e..b8c8988 100644 --- a/app/Resources/SoldierResource/Pages/EditSoldier.php +++ b/app/Resources/SoldierResource/Pages/EditSoldier.php @@ -75,4 +75,4 @@ protected function afterSave(): void } } } -} \ No newline at end of file +} diff --git a/app/Resources/TaskResource.php b/app/Resources/TaskResource.php index 82df056..dd7fb08 100644 --- a/app/Resources/TaskResource.php +++ b/app/Resources/TaskResource.php @@ -497,4 +497,4 @@ protected static function taskDetails(Get $get) return $shift; } -} \ No newline at end of file +} diff --git a/app/Services/Charts.php b/app/Services/Charts.php index 28d0a97..0900cad 100644 --- a/app/Services/Charts.php +++ b/app/Services/Charts.php @@ -109,4 +109,4 @@ function ($constraint) use ($count, $shifts) { return $count; } -} \ No newline at end of file +} diff --git a/app/Services/Helpers.php b/app/Services/Helpers.php index 6f49237..f37b8de 100644 --- a/app/Services/Helpers.php +++ b/app/Services/Helpers.php @@ -122,4 +122,4 @@ public static function updateShiftTable($assignments) { collect($assignments)->map(fn (Assignment $assignment) => Shift::where('id', $assignment->shiftId)->update(['soldier_id' => $assignment->soldierId])); } -} \ No newline at end of file +} diff --git a/app/Services/ManualAssignment.php b/app/Services/ManualAssignment.php index 688f361..28a2b51 100644 --- a/app/Services/ManualAssignment.php +++ b/app/Services/ManualAssignment.php @@ -6,6 +6,7 @@ use App\Models\Department; use App\Models\Shift; use App\Models\Soldier; +use App\Models\Team; use App\Models\User; use App\Services\Soldier as SoldierService; use Illuminate\Support\Facades\Cache; @@ -78,9 +79,11 @@ protected function filterDepartment($departmentName) $this->soldiers = $this->soldiers ->filter(function ($user) use ($departmentName) { $soldier = Soldier::where('id', '=', $user->userable_id)->first(); + $department = Department::where('name', $departmentName)->first(); return $soldier?->team?->department?->name == $departmentName - || $soldier->id == Department::where('name', '=', $departmentName)->value('commander_id'); + || collect($department->teams)->filter(fn (Team $team): bool => $team->commander_id === $soldier->id)->isNotEmpty() + || $soldier->id == $department->commander_id; }); } diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index f086c44..e376733 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -38,894 +38,818 @@ public function run(): void 'constraints_limit' => ConstraintType::getLimit(), ])->id, ])->assignRole(['soldier', 'manager']); - User::factory()->create([ - 'first_name' => 'מפקד', - 'last_name' => 'מדור 1', - 'password' => '1111111', - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => [], - 'capacity' => 10, - 'max_weekends' => 10, - 'max_shifts' => 10, - 'max_nights' => 10, - 'course' => 1, - 'is_reservist' => false, - 'constraints_limit' => ConstraintType::getLimit(), - ])->id, - ])->assignRole(['soldier']); User::factory()->create([ - 'first_name' => 'מפקד', - 'last_name' => 'צוות 1', - 'password' => '1111111', + 'first_name' => 'meshabetz mishmarot', 'userable_id' => Soldier::factory()->create([ - 'qualifications' => [], - 'capacity' => 10, - 'max_weekends' => 10, - 'max_shifts' => 10, - 'max_nights' => 10, - 'course' => 1, + 'qualifications' => ['hatasa', 'tazpit', 'shmira'], + 'capacity' => 6, + 'max_weekends' => 6, + 'max_shifts' => 7, + 'max_nights' => 6, 'is_reservist' => false, 'constraints_limit' => ConstraintType::getLimit(), ])->id, - ])->assignRole(['soldier']); + ])->assignRole(['soldier', 'shifts-assignment']); + + for ($i = 0; $i < 15; $i++) { + $user = User::factory()->create([ + 'first_name' => 'mefaked', + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['pikud'], + 'capacity' => 5.5, + 'max_weekends' => 5.5, + 'max_shifts' => 10, + 'max_nights' => 5.5, + 'course' => fake()->numberBetween(0, 5), + 'is_reservist' => false, + 'constraints_limit' => ConstraintType::getLimit(), + ])->id, + ])->assignRole('soldier'); + $this->createConstraints($user->id); + } + + for ($i = 0; $i < 40; $i++) { + $user = User::factory()->create([ + 'first_name' => 'chayal pashut', + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['hatasa', 'tazpit', 'shmira'], + 'capacity' => 6, + 'max_weekends' => 6, + 'max_shifts' => 7, + 'max_nights' => 6, + 'course' => fake()->numberBetween(0, 5), + 'is_reservist' => false, + 'constraints_limit' => ConstraintType::getLimit(), + ])->id, + ])->assignRole('soldier'); + $this->createConstraints($user->id); + } + + for ($i = 0; $i < 30; $i++) { + $user = User::factory()->create([ + 'first_name' => 'chayal beinony', + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['hatasa', 'tazpit', 'shmira', 'tichnun', 'pianuach'], + 'capacity' => 5.5, + 'max_weekends' => 5.5, + 'max_shifts' => 6, + 'max_nights' => 5.5, + 'course' => fake()->numberBetween(0, 5), + 'is_reservist' => false, + 'constraints_limit' => ConstraintType::getLimit(), + ])->id, + ])->assignRole('soldier'); + $this->createConstraints($user->id); + } + + for ($i = 0; $i < 25; $i++) { + $user = User::factory()->create([ + 'first_name' => 'chayal vatik', + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['hatasa', 'bakara', 'tichnun', 'pianuach'], + 'capacity' => 5, + 'max_weekends' => 5, + 'max_shifts' => 5, + 'max_nights' => 5, + 'course' => fake()->numberBetween(0, 5), + 'is_reservist' => false, + 'constraints_limit' => ConstraintType::getLimit(), + ])->id, + ])->assignRole('soldier'); + $this->createConstraints($user->id); + } + + for ($i = 0; $i < 10; $i++) { + $user = User::factory()->create([ + 'first_name' => 'menahalan', + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['minhal', 'bdikat ziud'], + 'capacity' => 0, + 'max_weekends' => 0, + 'max_shifts' => 4, + 'max_nights' => 0, + 'course' => fake()->numberBetween(0, 5), + 'is_reservist' => false, + 'constraints_limit' => ConstraintType::getLimit(), + ])->id, + ])->assignRole('soldier'); + $this->createConstraints($user->id); + } + + for ($i = 0; $i < 8; $i++) { + $user = User::factory()->create([ + 'first_name' => 'navat', + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['nivut'], + 'capacity' => 10, + 'max_weekends' => 10, + 'max_shifts' => 12, + 'max_nights' => 10, + 'course' => fake()->numberBetween(0, 5), + 'is_reservist' => false, + 'constraints_limit' => ConstraintType::getLimit(), + ])->id, + ])->assignRole('soldier'); + $this->createConstraints($user->id); + } + + // Tasks + // tichnun + Task::factory()->create([ + 'name' => 'tichnun א-ה בוקר', + 'start_hour' => '10:00:00', + 'duration' => 4, + 'parallel_weight' => 0, + 'type' => 'tichnun', + 'is_weekend' => false, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#b54b4b', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'tichnun א-ה לילה', + 'start_hour' => '02:00:00', + 'duration' => 4, + 'parallel_weight' => 1, + 'type' => 'tichnun', + 'is_weekend' => false, + 'is_night' => true, + 'in_parallel' => false, + 'color' => '#b54b4b', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'tichnun 1 סופ"ש', + 'start_hour' => '10:30:00', + 'duration' => 25, + 'parallel_weight' => 2.5, + 'type' => 'tichnun', + 'is_weekend' => true, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#b54b4b', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'tichnun 2 סופ"ש', + 'start_hour' => '11:10:00', + 'duration' => 25, + 'parallel_weight' => 2.5, + 'type' => 'tichnun', + 'is_weekend' => true, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#b54b4b', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + // bakara + Task::factory()->create([ + 'name' => 'bakara ארבע פעמים בשבוע בוקר', + 'start_hour' => '10:00:00', + 'duration' => 4, + 'parallel_weight' => 0, + 'type' => 'bakara', + 'is_weekend' => false, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#4bb5ac', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'bakara שלוש פעמים בשבוע לילה', + 'start_hour' => '03:20:00', + 'duration' => 4, + 'parallel_weight' => 1, + 'type' => 'bakara', + 'is_weekend' => false, + 'is_night' => true, + 'in_parallel' => false, + 'color' => '#4bb5ac', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'bakara סופ"ש', + 'start_hour' => '10:05:00', + 'duration' => 26, + 'parallel_weight' => 2.5, + 'type' => 'bakara', + 'is_weekend' => true, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#4bb5ac', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + // pikud + Task::factory()->create([ + 'name' => 'pikud 1 א-ה בוקר', + 'start_hour' => '10:00:00', + 'duration' => 4, + 'parallel_weight' => 0, + 'type' => 'pikud', + 'is_weekend' => false, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#4bb569', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'pikud 2 א-ה בוקר', + 'start_hour' => '10:00:00', + 'duration' => 4, + 'parallel_weight' => 0, + 'type' => 'pikud', + 'is_weekend' => false, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#4bb569', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'pikud 1 סופש', + 'start_hour' => '10:00:00', + 'duration' => 25, + 'parallel_weight' => 2.5, + 'type' => 'pikud', + 'is_weekend' => true, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#4bb569', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'pikud 2 סופש', + 'start_hour' => '10:00:00', + 'duration' => 25, + 'parallel_weight' => 2.5, + 'type' => 'pikud', + 'is_weekend' => true, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#4bb569', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'pikud לילה א-ה', + 'start_hour' => '03:00:00', + 'duration' => 4, + 'parallel_weight' => 1, + 'type' => 'pikud', + 'is_weekend' => false, + 'is_night' => true, + 'in_parallel' => false, + 'color' => '#4bb569', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + // minhal + Task::factory()->create([ + 'name' => 'minhal שלוש פעמים בשבוע בוקר', + 'start_hour' => '13:00:00', + 'duration' => 2, + 'parallel_weight' => 0, + 'type' => 'minhal', + 'is_weekend' => false, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#c5d649', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::TUESDAY, DaysInWeek::THURSDAY], + ]), + ]); + // hatasa + Task::factory()->create([ + 'name' => 'hatasa א-ה בוקר', + 'start_hour' => '09:00:00', + 'duration' => 6, + 'parallel_weight' => 0, + 'type' => 'hatasa', + 'is_weekend' => false, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#d649b5', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'hatasa א-ה לילה', + 'start_hour' => '02:00:00', + 'duration' => 6, + 'parallel_weight' => 1, + 'type' => 'hatasa', + 'is_weekend' => false, + 'is_night' => true, + 'in_parallel' => false, + 'color' => '#d649b5', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'hatasa 1 סופש', + 'start_hour' => '06:00:00', + 'duration' => 26, + 'parallel_weight' => 2.5, + 'type' => 'hatasa', + 'is_weekend' => true, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#d649b5', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'hatasa 2 סופש', + 'start_hour' => '06:00:00', + 'duration' => 26, + 'parallel_weight' => 2.5, + 'type' => 'hatasa', + 'is_weekend' => true, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#d649b5', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + // shmira + Task::factory()->create([ + 'name' => 'shmira א-ה בוקר', + 'start_hour' => '07:00:00', + 'duration' => 12, + 'parallel_weight' => 0, + 'type' => 'shmira', + 'is_weekend' => false, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#ee8559', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'shmira א-ה לילה', + 'start_hour' => '01:00:00', + 'duration' => 7, + 'parallel_weight' => 1, + 'type' => 'shmira', + 'is_weekend' => false, + 'is_night' => true, + 'in_parallel' => false, + 'color' => '#ee8559', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'shmira 1 סופש', + 'start_hour' => '06:00:00', + 'duration' => 26, + 'parallel_weight' => 2.5, + 'type' => 'shmira', + 'is_weekend' => true, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#ee8559', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'shmira סופש 2', + 'start_hour' => '06:00:00', + 'duration' => 26, + 'parallel_weight' => 2.5, + 'type' => 'shmira', + 'is_weekend' => true, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#ee8559', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + // pianuach + Task::factory()->create([ + 'name' => 'pianuach א-ה בוקר', + 'start_hour' => '07:00:00', + 'duration' => 7, + 'parallel_weight' => 0, + 'type' => 'pianuach', + 'is_weekend' => false, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#3574fb', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'pianuach א-ה לילה', + 'start_hour' => '01:00:00', + 'duration' => 5, + 'parallel_weight' => 1, + 'type' => 'pianuach', + 'is_weekend' => false, + 'is_night' => true, + 'in_parallel' => false, + 'color' => '#3574fb', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'pianuach 1 סופש', + 'start_hour' => '07:00:00', + 'duration' => 27, + 'parallel_weight' => 2.5, + 'type' => 'pianuach', + 'is_weekend' => true, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#3574fb', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'pianuach 2 סופש', + 'start_hour' => '07:00:00', + 'duration' => 27, + 'parallel_weight' => 2.5, + 'type' => 'pianuach', + 'is_weekend' => true, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#3574fb', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + // nivut + Task::factory()->create([ + 'name' => 'nivut א-ה בוקר', + 'start_hour' => '11:00:00', + 'duration' => 2, + 'parallel_weight' => 0, + 'type' => 'nivut', + 'is_weekend' => false, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#ed8d8d8b', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'nivut א-ה לילה', + 'start_hour' => '01:00:00', + 'duration' => 2.5, + 'parallel_weight' => 1, + 'type' => 'nivut', + 'is_weekend' => false, + 'is_night' => true, + 'in_parallel' => false, + 'color' => '#ed8d8d8b', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'nivut 1 סופש', + 'start_hour' => '11:00:00', + 'duration' => 28, + 'parallel_weight' => 2.5, + 'type' => 'nivut', + 'is_weekend' => true, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#ed8d8d8b', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'nivut 2 סופש', + 'start_hour' => '11:00:00', + 'duration' => 28, + 'parallel_weight' => 2.5, + 'type' => 'nivut', + 'is_weekend' => true, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#ed8d8d8b', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + // tazpit + Task::factory()->create([ + 'name' => 'tazpit א-ה בוקר 1', + 'start_hour' => '08:00:00', + 'duration' => 10, + 'parallel_weight' => 0, + 'type' => 'tazpit', + 'is_weekend' => false, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#77ff23', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'tazpit א-ה בוקר 2', + 'start_hour' => '08:00:00', + 'duration' => 10, + 'parallel_weight' => 0, + 'type' => 'tazpit', + 'is_weekend' => false, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#77ff23', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'tazpit א-ה לילה', + 'start_hour' => '01:30:00', + 'duration' => 6, + 'parallel_weight' => 1, + 'type' => 'tazpit', + 'is_weekend' => false, + 'is_night' => true, + 'in_parallel' => false, + 'color' => '#77ff23', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'tazpit 1 סופש', + 'start_hour' => '11:45:00', + 'duration' => 25, + 'parallel_weight' => 2.5, + 'type' => 'tazpit', + 'is_weekend' => true, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#77ff23', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'tazpit 2 סופש', + 'start_hour' => '11:00:00', + 'duration' => 25, + 'parallel_weight' => 2.5, + 'type' => 'tazpit', + 'is_weekend' => true, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#77ff23', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + // bdikat ziud + Task::factory()->create([ + 'name' => 'bdikat ziud פעם בשבוע בוקר', + 'start_hour' => '11:15:00', + 'duration' => 3.5, + 'parallel_weight' => 0, + 'type' => 'bdikat ziud', + 'is_weekend' => false, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#a7b2c3', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY], + ]), + ]); + } - User::factory()->create([ - 'first_name' => 'חייל', - 'last_name' => 'א', - 'password' => '1111111', - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => [], - 'capacity' => 10, - 'max_weekends' => 10, - 'max_shifts' => 10, - 'max_nights' => 10, - 'course' => 1, - 'is_reservist' => false, - 'constraints_limit' => ConstraintType::getLimit(), - ])->id, - ])->assignRole(['soldier']); - User::factory()->create([ - 'first_name' => 'חייל', - 'last_name' => 'ב', - 'password' => '1111111', - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => [], - 'capacity' => 10, - 'max_weekends' => 10, - 'max_shifts' => 10, - 'max_nights' => 10, - 'course' => 1, - 'is_reservist' => false, - 'constraints_limit' => ConstraintType::getLimit(), - ])->id, - ])->assignRole(['soldier']); - User::factory()->create([ - 'first_name' => 'משבץ', - 'last_name' => '1', - 'password' => '1111111', - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => [], - 'capacity' => 10, - 'max_weekends' => 10, - 'max_shifts' => 10, - 'max_nights' => 10, - 'course' => 1, - 'is_reservist' => false, - 'constraints_limit' => ConstraintType::getLimit(), - ])->id, - ])->assignRole(['soldier','shifts-assignment']); - // User::factory()->create([ - // 'first_name' => 'meshabetz mishmarot', - // 'userable_id' => Soldier::factory()->create([ - // 'qualifications' => ['hatasa', 'tazpit', 'shmira'], - // 'capacity' => 6, - // 'max_weekends' => 6, - // 'max_shifts' => 7, - // 'max_nights' => 6, - // 'is_reservist' => false, - // 'constraints_limit' => ConstraintType::getLimit(), - // ])->id, - // ])->assignRole(['soldier', 'shifts-assignment']); - - // for ($i = 0; $i < 15; $i++) { - // $user = User::factory()->create([ - // 'first_name' => 'mefaked', - // 'userable_id' => Soldier::factory()->create([ - // 'qualifications' => ['pikud'], - // 'capacity' => 5.5, - // 'max_weekends' => 5.5, - // 'max_shifts' => 10, - // 'max_nights' => 5.5, - // 'course' => fake()->numberBetween(0, 5), - // 'is_reservist' => false, - // 'constraints_limit' => ConstraintType::getLimit(), - // ])->id, - // ])->assignRole('soldier'); - // $this->createConstraints($user->id); - // } - - // for ($i = 0; $i < 40; $i++) { - // $user = User::factory()->create([ - // 'first_name' => 'chayal pashut', - // 'userable_id' => Soldier::factory()->create([ - // 'qualifications' => ['hatasa', 'tazpit', 'shmira'], - // 'capacity' => 6, - // 'max_weekends' => 6, - // 'max_shifts' => 7, - // 'max_nights' => 6, - // 'course' => fake()->numberBetween(0, 5), - // 'is_reservist' => false, - // 'constraints_limit' => ConstraintType::getLimit(), - // ])->id, - // ])->assignRole('soldier'); - // $this->createConstraints($user->id); - // } - - // for ($i = 0; $i < 30; $i++) { - // $user = User::factory()->create([ - // 'first_name' => 'chayal beinony', - // 'userable_id' => Soldier::factory()->create([ - // 'qualifications' => ['hatasa', 'tazpit', 'shmira', 'tichnun', 'pianuach'], - // 'capacity' => 5.5, - // 'max_weekends' => 5.5, - // 'max_shifts' => 6, - // 'max_nights' => 5.5, - // 'course' => fake()->numberBetween(0, 5), - // 'is_reservist' => false, - // 'constraints_limit' => ConstraintType::getLimit(), - // ])->id, - // ])->assignRole('soldier'); - // $this->createConstraints($user->id); - // } - - // for ($i = 0; $i < 25; $i++) { - // $user = User::factory()->create([ - // 'first_name' => 'chayal vatik', - // 'userable_id' => Soldier::factory()->create([ - // 'qualifications' => ['hatasa', 'bakara', 'tichnun', 'pianuach'], - // 'capacity' => 5, - // 'max_weekends' => 5, - // 'max_shifts' => 5, - // 'max_nights' => 5, - // 'course' => fake()->numberBetween(0, 5), - // 'is_reservist' => false, - // 'constraints_limit' => ConstraintType::getLimit(), - // ])->id, - // ])->assignRole('soldier'); - // $this->createConstraints($user->id); - // } - - // for ($i = 0; $i < 10; $i++) { - // $user = User::factory()->create([ - // 'first_name' => 'menahalan', - // 'userable_id' => Soldier::factory()->create([ - // 'qualifications' => ['minhal', 'bdikat ziud'], - // 'capacity' => 0, - // 'max_weekends' => 0, - // 'max_shifts' => 4, - // 'max_nights' => 0, - // 'course' => fake()->numberBetween(0, 5), - // 'is_reservist' => false, - // 'constraints_limit' => ConstraintType::getLimit(), - // ])->id, - // ])->assignRole('soldier'); - // $this->createConstraints($user->id); - // } - - // for ($i = 0; $i < 8; $i++) { - // $user = User::factory()->create([ - // 'first_name' => 'navat', - // 'userable_id' => Soldier::factory()->create([ - // 'qualifications' => ['nivut'], - // 'capacity' => 10, - // 'max_weekends' => 10, - // 'max_shifts' => 12, - // 'max_nights' => 10, - // 'course' => fake()->numberBetween(0, 5), - // 'is_reservist' => false, - // 'constraints_limit' => ConstraintType::getLimit(), - // ])->id, - // ])->assignRole('soldier'); - // $this->createConstraints($user->id); - // } - - // // Tasks - // // tichnun - // Task::factory()->create([ - // 'name' => 'tichnun א-ה בוקר', - // 'start_hour' => '10:00:00', - // 'duration' => 4, - // 'parallel_weight' => 0, - // 'type' => 'tichnun', - // 'is_weekend' => false, - // 'is_night' => false, - // 'in_parallel' => false, - // 'color' => '#b54b4b', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'tichnun א-ה לילה', - // 'start_hour' => '02:00:00', - // 'duration' => 4, - // 'parallel_weight' => 1, - // 'type' => 'tichnun', - // 'is_weekend' => false, - // 'is_night' => true, - // 'in_parallel' => false, - // 'color' => '#b54b4b', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'tichnun 1 סופ"ש', - // 'start_hour' => '10:30:00', - // 'duration' => 25, - // 'parallel_weight' => 2.5, - // 'type' => 'tichnun', - // 'is_weekend' => true, - // 'is_night' => false, - // 'in_parallel' => false, - // 'color' => '#b54b4b', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::FRIDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'tichnun 2 סופ"ש', - // 'start_hour' => '11:10:00', - // 'duration' => 25, - // 'parallel_weight' => 2.5, - // 'type' => 'tichnun', - // 'is_weekend' => true, - // 'is_night' => false, - // 'in_parallel' => false, - // 'color' => '#b54b4b', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::FRIDAY], - // ]), - // ]); - // // bakara - // Task::factory()->create([ - // 'name' => 'bakara ארבע פעמים בשבוע בוקר', - // 'start_hour' => '10:00:00', - // 'duration' => 4, - // 'parallel_weight' => 0, - // 'type' => 'bakara', - // 'is_weekend' => false, - // 'is_night' => false, - // 'in_parallel' => false, - // 'color' => '#4bb5ac', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'bakara שלוש פעמים בשבוע לילה', - // 'start_hour' => '03:20:00', - // 'duration' => 4, - // 'parallel_weight' => 1, - // 'type' => 'bakara', - // 'is_weekend' => false, - // 'is_night' => true, - // 'in_parallel' => false, - // 'color' => '#4bb5ac', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'bakara סופ"ש', - // 'start_hour' => '10:05:00', - // 'duration' => 26, - // 'parallel_weight' => 2.5, - // 'type' => 'bakara', - // 'is_weekend' => true, - // 'is_night' => false, - // 'in_parallel' => false, - // 'color' => '#4bb5ac', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::FRIDAY], - // ]), - // ]); - // // pikud - // Task::factory()->create([ - // 'name' => 'pikud 1 א-ה בוקר', - // 'start_hour' => '10:00:00', - // 'duration' => 4, - // 'parallel_weight' => 0, - // 'type' => 'pikud', - // 'is_weekend' => false, - // 'is_night' => false, - // 'in_parallel' => false, - // 'color' => '#4bb569', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'pikud 2 א-ה בוקר', - // 'start_hour' => '10:00:00', - // 'duration' => 4, - // 'parallel_weight' => 0, - // 'type' => 'pikud', - // 'is_weekend' => false, - // 'is_night' => false, - // 'in_parallel' => false, - // 'color' => '#4bb569', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'pikud 1 סופש', - // 'start_hour' => '10:00:00', - // 'duration' => 25, - // 'parallel_weight' => 2.5, - // 'type' => 'pikud', - // 'is_weekend' => true, - // 'is_night' => false, - // 'in_parallel' => false, - // 'color' => '#4bb569', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::FRIDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'pikud 2 סופש', - // 'start_hour' => '10:00:00', - // 'duration' => 25, - // 'parallel_weight' => 2.5, - // 'type' => 'pikud', - // 'is_weekend' => true, - // 'is_night' => false, - // 'in_parallel' => false, - // 'color' => '#4bb569', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::FRIDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'pikud לילה א-ה', - // 'start_hour' => '03:00:00', - // 'duration' => 4, - // 'parallel_weight' => 1, - // 'type' => 'pikud', - // 'is_weekend' => false, - // 'is_night' => true, - // 'in_parallel' => false, - // 'color' => '#4bb569', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // // minhal - // Task::factory()->create([ - // 'name' => 'minhal שלוש פעמים בשבוע בוקר', - // 'start_hour' => '13:00:00', - // 'duration' => 2, - // 'parallel_weight' => 0, - // 'type' => 'minhal', - // 'is_weekend' => false, - // 'is_night' => false, - // 'in_parallel' => false, - // 'color' => '#c5d649', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::TUESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // // hatasa - // Task::factory()->create([ - // 'name' => 'hatasa א-ה בוקר', - // 'start_hour' => '09:00:00', - // 'duration' => 6, - // 'parallel_weight' => 0, - // 'type' => 'hatasa', - // 'is_weekend' => false, - // 'is_night' => false, - // 'in_parallel' => false, - // 'color' => '#d649b5', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'hatasa א-ה לילה', - // 'start_hour' => '02:00:00', - // 'duration' => 6, - // 'parallel_weight' => 1, - // 'type' => 'hatasa', - // 'is_weekend' => false, - // 'is_night' => true, - // 'in_parallel' => false, - // 'color' => '#d649b5', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'hatasa 1 סופש', - // 'start_hour' => '06:00:00', - // 'duration' => 26, - // 'parallel_weight' => 2.5, - // 'type' => 'hatasa', - // 'is_weekend' => true, - // 'is_night' => false, - // 'in_parallel' => false, - // 'color' => '#d649b5', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::FRIDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'hatasa 2 סופש', - // 'start_hour' => '06:00:00', - // 'duration' => 26, - // 'parallel_weight' => 2.5, - // 'type' => 'hatasa', - // 'is_weekend' => true, - // 'is_night' => false, - // 'in_parallel' => false, - // 'color' => '#d649b5', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::FRIDAY], - // ]), - // ]); - // // shmira - // Task::factory()->create([ - // 'name' => 'shmira א-ה בוקר', - // 'start_hour' => '07:00:00', - // 'duration' => 12, - // 'parallel_weight' => 0, - // 'type' => 'shmira', - // 'is_weekend' => false, - // 'is_night' => false, - // 'in_parallel' => false, - // 'color' => '#ee8559', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'shmira א-ה לילה', - // 'start_hour' => '01:00:00', - // 'duration' => 7, - // 'parallel_weight' => 1, - // 'type' => 'shmira', - // 'is_weekend' => false, - // 'is_night' => true, - // 'in_parallel' => false, - // 'color' => '#ee8559', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'shmira 1 סופש', - // 'start_hour' => '06:00:00', - // 'duration' => 26, - // 'parallel_weight' => 2.5, - // 'type' => 'shmira', - // 'is_weekend' => true, - // 'is_night' => false, - // 'in_parallel' => false, - // 'color' => '#ee8559', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::FRIDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'shmira סופש 2', - // 'start_hour' => '06:00:00', - // 'duration' => 26, - // 'parallel_weight' => 2.5, - // 'type' => 'shmira', - // 'is_weekend' => true, - // 'is_night' => false, - // 'in_parallel' => false, - // 'color' => '#ee8559', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::FRIDAY], - // ]), - // ]); - // // pianuach - // Task::factory()->create([ - // 'name' => 'pianuach א-ה בוקר', - // 'start_hour' => '07:00:00', - // 'duration' => 7, - // 'parallel_weight' => 0, - // 'type' => 'pianuach', - // 'is_weekend' => false, - // 'is_night' => false, - // 'in_parallel' => false, - // 'color' => '#3574fb', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'pianuach א-ה לילה', - // 'start_hour' => '01:00:00', - // 'duration' => 5, - // 'parallel_weight' => 1, - // 'type' => 'pianuach', - // 'is_weekend' => false, - // 'is_night' => true, - // 'in_parallel' => false, - // 'color' => '#3574fb', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'pianuach 1 סופש', - // 'start_hour' => '07:00:00', - // 'duration' => 27, - // 'parallel_weight' => 2.5, - // 'type' => 'pianuach', - // 'is_weekend' => true, - // 'is_night' => false, - // 'in_parallel' => false, - // 'color' => '#3574fb', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::FRIDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'pianuach 2 סופש', - // 'start_hour' => '07:00:00', - // 'duration' => 27, - // 'parallel_weight' => 2.5, - // 'type' => 'pianuach', - // 'is_weekend' => true, - // 'is_night' => false, - // 'in_parallel' => false, - // 'color' => '#3574fb', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::FRIDAY], - // ]), - // ]); - // // nivut - // Task::factory()->create([ - // 'name' => 'nivut א-ה בוקר', - // 'start_hour' => '11:00:00', - // 'duration' => 2, - // 'parallel_weight' => 0, - // 'type' => 'nivut', - // 'is_weekend' => false, - // 'is_night' => false, - // 'in_parallel' => false, - // 'color' => '#ed8d8d8b', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'nivut א-ה לילה', - // 'start_hour' => '01:00:00', - // 'duration' => 2.5, - // 'parallel_weight' => 1, - // 'type' => 'nivut', - // 'is_weekend' => false, - // 'is_night' => true, - // 'in_parallel' => false, - // 'color' => '#ed8d8d8b', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'nivut 1 סופש', - // 'start_hour' => '11:00:00', - // 'duration' => 28, - // 'parallel_weight' => 2.5, - // 'type' => 'nivut', - // 'is_weekend' => true, - // 'is_night' => false, - // 'in_parallel' => false, - // 'color' => '#ed8d8d8b', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::FRIDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'nivut 2 סופש', - // 'start_hour' => '11:00:00', - // 'duration' => 28, - // 'parallel_weight' => 2.5, - // 'type' => 'nivut', - // 'is_weekend' => true, - // 'is_night' => false, - // 'in_parallel' => false, - // 'color' => '#ed8d8d8b', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::FRIDAY], - // ]), - // ]); - // // tazpit - // Task::factory()->create([ - // 'name' => 'tazpit א-ה בוקר 1', - // 'start_hour' => '08:00:00', - // 'duration' => 10, - // 'parallel_weight' => 0, - // 'type' => 'tazpit', - // 'is_weekend' => false, - // 'is_night' => false, - // 'in_parallel' => false, - // 'color' => '#77ff23', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'tazpit א-ה בוקר 2', - // 'start_hour' => '08:00:00', - // 'duration' => 10, - // 'parallel_weight' => 0, - // 'type' => 'tazpit', - // 'is_weekend' => false, - // 'is_night' => false, - // 'in_parallel' => false, - // 'color' => '#77ff23', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'tazpit א-ה לילה', - // 'start_hour' => '01:30:00', - // 'duration' => 6, - // 'parallel_weight' => 1, - // 'type' => 'tazpit', - // 'is_weekend' => false, - // 'is_night' => true, - // 'in_parallel' => false, - // 'color' => '#77ff23', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'tazpit 1 סופש', - // 'start_hour' => '11:45:00', - // 'duration' => 25, - // 'parallel_weight' => 2.5, - // 'type' => 'tazpit', - // 'is_weekend' => true, - // 'is_night' => false, - // 'in_parallel' => false, - // 'color' => '#77ff23', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::FRIDAY], - // ]), - // ]); - // Task::factory()->create([ - // 'name' => 'tazpit 2 סופש', - // 'start_hour' => '11:00:00', - // 'duration' => 25, - // 'parallel_weight' => 2.5, - // 'type' => 'tazpit', - // 'is_weekend' => true, - // 'is_night' => false, - // 'in_parallel' => false, - // 'color' => '#77ff23', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::FRIDAY], - // ]), - // ]); - // // bdikat ziud - // Task::factory()->create([ - // 'name' => 'bdikat ziud פעם בשבוע בוקר', - // 'start_hour' => '11:15:00', - // 'duration' => 3.5, - // 'parallel_weight' => 0, - // 'type' => 'bdikat ziud', - // 'is_weekend' => false, - // 'is_night' => false, - // 'in_parallel' => false, - // 'color' => '#a7b2c3', - // 'recurring' => collect([ - // 'type' => RecurringType::WEEKLY, - // 'days_in_week' => [DaysInWeek::SUNDAY], - // ]), - // ]); - // } - - // protected function createConstraints(int $userId) - // { - // for ($i = 0; $i < count(ConstraintType::cases()); $i++) { - // $times = ConstraintType::getLimit()[ConstraintType::cases()[$i]->value] > 0 - // ? random_int(0, ConstraintType::getLimit()[ConstraintType::cases()[$i]->value]) : - // random_int(0, random_int(0, 5)); - // for ($j = 0; $j < $times; $j++) { - // $startDate = call_user_func([$this, ConstraintType::cases()[$i]->name]); - // Constraint::factory()->create([ - // 'soldier_id' => User::find($userId)->userable_id, - // 'constraint_type' => ConstraintType::cases()[$i], - // 'start_date' => $startDate, - // 'end_date' => $startDate->copy()->addHours(random_int(1, 5)), - // ]); - // } - // } - // } - - // protected function getDatesOfMonth($month = null) - // { - // $month ??= now()->addMonth(); - - // return CarbonPeriod::between($month->startOfMonth(), $month->copy()->endOfMonth()); - // } - - // protected function getThursday() - // { - // $period = $this->getDatesOfMonth(); - - // return collect($period) - // ->filter( - // fn ($date) => Carbon::parse($date)->isThursday() - // )->all(); - // } - - // protected function getWeekends() - // { - // $period = $this->getDatesOfMonth(); - - // return collect($period) - // ->filter( - // fn ($date) => Carbon::parse($date)->isFriday() || Carbon::parse($date)->isSaturday() - // ) - // ->all(); - // } - - // protected function getTime() - // { - // return Carbon::now()->subSeconds(rand(0, 30 * 24 * 60 * 60)); - // } - - // protected function getNightHour() - // { - // $time = $this->getTime(); - // if ($time->hour < 20 && $time->hour >= 8) { - // return $time->addHours(20 - $time->hour); - // } - - // return $time; - // } - - // protected function NOT_WEEKEND() - // { - // $time = $this->getTime(); - - // return Carbon::parse(collect($this->getWeekends())->random()) - // ->setTime( - // $time->hour, - // $time->minute, - // $time->second - // ); - // } - - // protected function LOW_PRIORITY_NOT_WEEKEND() - // { - // $time = $this->getTime(); - - // return Carbon::parse(collect($this->getWeekends())->random()) - // ->setTime( - // $time->hour, - // $time->minute, - // $time->second - // ); - // } - - // protected function NOT_TASK() - // { - // $time = $this->getTime(); - - // return Carbon::parse(collect($this->getDatesOfMonth())->random()) - // ->setTime( - // $time->hour, - // $time->minute, - // $time->second - // ); - // } - - // protected function LOW_PRIORITY_NOT_TASK() - // { - // $time = $this->getTime(); - - // return Carbon::parse(collect($this->getDatesOfMonth())->random()) - // ->setTime( - // $time->hour, - // $time->minute, - // $time->second - // ); - // } - - // protected function NOT_EVENING() - // { - // $date = collect($this->getDatesOfMonth())->random(); - // $nightTime = $this->getNightHour(); - - // return $date->copy()->setTime($nightTime->hour, $nightTime->minute, $nightTime->second); - // } - - // protected function NOT_THURSDAY_EVENING() - // { - // $date = collect($this->getThursday())->random(); - // $nightTime = $this->getNightHour(); - - // return $date->copy()->setTime($nightTime->hour, $nightTime->minute, $nightTime->second); - // } - - // protected function VACATION() - // { - // $time = $this->getTime(); - - // return Carbon::parse(collect($this->getDatesOfMonth())->random()) - // ->setTime( - // $time->hour, - // $time->minute, - // $time->second - // ); - // } - - // protected function MEDICAL() - // { - // $time = $this->getTime(); - - // return Carbon::parse(collect($this->getDatesOfMonth())->random()) - // ->setTime( - // $time->hour, - // $time->minute, - // $time->second - // ); - // } - - // protected function SCHOOL() - // { - // $time = $this->getTime(); - - // return Carbon::parse(collect($this->getDatesOfMonth())->random()) - // ->setTime( - // $time->hour, - // $time->minute, - // $time->second - // ); + protected function createConstraints(int $userId) + { + for ($i = 0; $i < count(ConstraintType::cases()); $i++) { + $times = ConstraintType::getLimit()[ConstraintType::cases()[$i]->value] > 0 + ? random_int(0, ConstraintType::getLimit()[ConstraintType::cases()[$i]->value]) : + random_int(0, random_int(0, 5)); + for ($j = 0; $j < $times; $j++) { + $startDate = call_user_func([$this, ConstraintType::cases()[$i]->name]); + Constraint::factory()->create([ + 'soldier_id' => User::find($userId)->userable_id, + 'constraint_type' => ConstraintType::cases()[$i], + 'start_date' => $startDate, + 'end_date' => $startDate->copy()->addHours(random_int(1, 5)), + ]); + } + } + } + + protected function getDatesOfMonth($month = null) + { + $month ??= now()->addMonth(); + + return CarbonPeriod::between($month->startOfMonth(), $month->copy()->endOfMonth()); + } + + protected function getThursday() + { + $period = $this->getDatesOfMonth(); + + return collect($period) + ->filter( + fn ($date) => Carbon::parse($date)->isThursday() + )->all(); + } + + protected function getWeekends() + { + $period = $this->getDatesOfMonth(); + + return collect($period) + ->filter( + fn ($date) => Carbon::parse($date)->isFriday() || Carbon::parse($date)->isSaturday() + ) + ->all(); + } + + protected function getTime() + { + return Carbon::now()->subSeconds(rand(0, 30 * 24 * 60 * 60)); + } + + protected function getNightHour() + { + $time = $this->getTime(); + if ($time->hour < 20 && $time->hour >= 8) { + return $time->addHours(20 - $time->hour); + } + + return $time; + } + + protected function NOT_WEEKEND() + { + $time = $this->getTime(); + + return Carbon::parse(collect($this->getWeekends())->random()) + ->setTime( + $time->hour, + $time->minute, + $time->second + ); + } + + protected function LOW_PRIORITY_NOT_WEEKEND() + { + $time = $this->getTime(); + + return Carbon::parse(collect($this->getWeekends())->random()) + ->setTime( + $time->hour, + $time->minute, + $time->second + ); + } + + protected function NOT_TASK() + { + $time = $this->getTime(); + + return Carbon::parse(collect($this->getDatesOfMonth())->random()) + ->setTime( + $time->hour, + $time->minute, + $time->second + ); + } + + protected function LOW_PRIORITY_NOT_TASK() + { + $time = $this->getTime(); + + return Carbon::parse(collect($this->getDatesOfMonth())->random()) + ->setTime( + $time->hour, + $time->minute, + $time->second + ); + } + + protected function NOT_EVENING() + { + $date = collect($this->getDatesOfMonth())->random(); + $nightTime = $this->getNightHour(); + + return $date->copy()->setTime($nightTime->hour, $nightTime->minute, $nightTime->second); + } + + protected function NOT_THURSDAY_EVENING() + { + $date = collect($this->getThursday())->random(); + $nightTime = $this->getNightHour(); + + return $date->copy()->setTime($nightTime->hour, $nightTime->minute, $nightTime->second); + } + + protected function VACATION() + { + $time = $this->getTime(); + + return Carbon::parse(collect($this->getDatesOfMonth())->random()) + ->setTime( + $time->hour, + $time->minute, + $time->second + ); + } + + protected function MEDICAL() + { + $time = $this->getTime(); + + return Carbon::parse(collect($this->getDatesOfMonth())->random()) + ->setTime( + $time->hour, + $time->minute, + $time->second + ); + } + + protected function SCHOOL() + { + $time = $this->getTime(); + + return Carbon::parse(collect($this->getDatesOfMonth())->random()) + ->setTime( + $time->hour, + $time->minute, + $time->second + ); } } diff --git a/lang/en.json b/lang/en.json index 5924eef..eeabce4 100644 --- a/lang/en.json +++ b/lang/en.json @@ -46,4 +46,4 @@ "Commander approved edit constraint": "Hello :name!
Your request to edit constraint :constraintName
to move from date: :startDate to :endDate to date: :ToStartDate to :ToEndDate
has been approved!
The change has been updated successfully!
Have a nice day!", "Commander deny edit constraint":"Hello :name!
Your request to move constraint :constraintName
from: :startDate to :endDate
has been rejected!
Have a nice day!", "Add identifier":"Add an identifier to the name so that it is not the same as another name. For example: :example" -} \ No newline at end of file +} diff --git a/lang/he.json b/lang/he.json index 63411fd..6583c45 100644 --- a/lang/he.json +++ b/lang/he.json @@ -307,4 +307,4 @@ "Your request to edit the constraint has been approved":"בקשתך לעריכת אילוץ אושרה", "Your request to edit the constraint has been rejected":"בקשתך לעריכת אילוץ נדחתה", "Do you approve the request to edit the constraint?":"האם אתה מאשר עריכת אילוץ?" -} \ No newline at end of file +} diff --git a/tests/Feature/ConstraintTest.php b/tests/Feature/ConstraintTest.php index 80221cf..a6c6a8f 100644 --- a/tests/Feature/ConstraintTest.php +++ b/tests/Feature/ConstraintTest.php @@ -25,7 +25,7 @@ $result = $availableOptionsMethod->invoke(null, $startDate, $endDate); expect($result)->toBeArray(); - expect($result)->toContain(__('Medical'), __('Vacation'), __('School'), __('Not task'), __('Low priority not task'), __('Not evening')); + expect($result)->toContain(__('Medical'), __('Vacation'), __('School'), __('Not task'), __('Low priority not task')); }); it('should return the correct used counts for current month', function () { From 2a981f86f79519d9819c3c6a400e9a367dce0a08 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 6 Feb 2025 13:06:57 +0200 Subject: [PATCH 092/259] deploy version --- .github/workflows/php-build-and-deploy.yml | 2 +- database/seeders/DatabaseSeeder.php | 877 ++------------------- 2 files changed, 72 insertions(+), 807 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index d93f2cd..c257091 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_28 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_30 flavor: | latest=false tags: | diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index e376733..80528e4 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -40,816 +40,81 @@ public function run(): void ])->assignRole(['soldier', 'manager']); User::factory()->create([ - 'first_name' => 'meshabetz mishmarot', + 'first_name' => 'מפקד', + 'last_name' => 'מדור 1', + 'password' => '1111111', 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['hatasa', 'tazpit', 'shmira'], - 'capacity' => 6, - 'max_weekends' => 6, - 'max_shifts' => 7, - 'max_nights' => 6, + 'qualifications' => [], + 'capacity' => 10, + 'max_weekends' => 10, + 'max_shifts' => 10, + 'max_nights' => 10, + 'course' => 1, 'is_reservist' => false, 'constraints_limit' => ConstraintType::getLimit(), ])->id, - ])->assignRole(['soldier', 'shifts-assignment']); - - for ($i = 0; $i < 15; $i++) { - $user = User::factory()->create([ - 'first_name' => 'mefaked', - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['pikud'], - 'capacity' => 5.5, - 'max_weekends' => 5.5, - 'max_shifts' => 10, - 'max_nights' => 5.5, - 'course' => fake()->numberBetween(0, 5), - 'is_reservist' => false, - 'constraints_limit' => ConstraintType::getLimit(), - ])->id, - ])->assignRole('soldier'); - $this->createConstraints($user->id); - } - - for ($i = 0; $i < 40; $i++) { - $user = User::factory()->create([ - 'first_name' => 'chayal pashut', - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['hatasa', 'tazpit', 'shmira'], - 'capacity' => 6, - 'max_weekends' => 6, - 'max_shifts' => 7, - 'max_nights' => 6, - 'course' => fake()->numberBetween(0, 5), - 'is_reservist' => false, - 'constraints_limit' => ConstraintType::getLimit(), - ])->id, - ])->assignRole('soldier'); - $this->createConstraints($user->id); - } - - for ($i = 0; $i < 30; $i++) { - $user = User::factory()->create([ - 'first_name' => 'chayal beinony', - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['hatasa', 'tazpit', 'shmira', 'tichnun', 'pianuach'], - 'capacity' => 5.5, - 'max_weekends' => 5.5, - 'max_shifts' => 6, - 'max_nights' => 5.5, - 'course' => fake()->numberBetween(0, 5), - 'is_reservist' => false, - 'constraints_limit' => ConstraintType::getLimit(), - ])->id, - ])->assignRole('soldier'); - $this->createConstraints($user->id); - } - - for ($i = 0; $i < 25; $i++) { - $user = User::factory()->create([ - 'first_name' => 'chayal vatik', - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['hatasa', 'bakara', 'tichnun', 'pianuach'], - 'capacity' => 5, - 'max_weekends' => 5, - 'max_shifts' => 5, - 'max_nights' => 5, - 'course' => fake()->numberBetween(0, 5), - 'is_reservist' => false, - 'constraints_limit' => ConstraintType::getLimit(), - ])->id, - ])->assignRole('soldier'); - $this->createConstraints($user->id); - } - - for ($i = 0; $i < 10; $i++) { - $user = User::factory()->create([ - 'first_name' => 'menahalan', - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['minhal', 'bdikat ziud'], - 'capacity' => 0, - 'max_weekends' => 0, - 'max_shifts' => 4, - 'max_nights' => 0, - 'course' => fake()->numberBetween(0, 5), - 'is_reservist' => false, - 'constraints_limit' => ConstraintType::getLimit(), - ])->id, - ])->assignRole('soldier'); - $this->createConstraints($user->id); - } - - for ($i = 0; $i < 8; $i++) { - $user = User::factory()->create([ - 'first_name' => 'navat', - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['nivut'], - 'capacity' => 10, - 'max_weekends' => 10, - 'max_shifts' => 12, - 'max_nights' => 10, - 'course' => fake()->numberBetween(0, 5), - 'is_reservist' => false, - 'constraints_limit' => ConstraintType::getLimit(), - ])->id, - ])->assignRole('soldier'); - $this->createConstraints($user->id); - } - - // Tasks - // tichnun - Task::factory()->create([ - 'name' => 'tichnun א-ה בוקר', - 'start_hour' => '10:00:00', - 'duration' => 4, - 'parallel_weight' => 0, - 'type' => 'tichnun', - 'is_weekend' => false, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#b54b4b', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'tichnun א-ה לילה', - 'start_hour' => '02:00:00', - 'duration' => 4, - 'parallel_weight' => 1, - 'type' => 'tichnun', - 'is_weekend' => false, - 'is_night' => true, - 'in_parallel' => false, - 'color' => '#b54b4b', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'tichnun 1 סופ"ש', - 'start_hour' => '10:30:00', - 'duration' => 25, - 'parallel_weight' => 2.5, - 'type' => 'tichnun', - 'is_weekend' => true, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#b54b4b', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'tichnun 2 סופ"ש', - 'start_hour' => '11:10:00', - 'duration' => 25, - 'parallel_weight' => 2.5, - 'type' => 'tichnun', - 'is_weekend' => true, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#b54b4b', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - // bakara - Task::factory()->create([ - 'name' => 'bakara ארבע פעמים בשבוע בוקר', - 'start_hour' => '10:00:00', - 'duration' => 4, - 'parallel_weight' => 0, - 'type' => 'bakara', - 'is_weekend' => false, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#4bb5ac', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'bakara שלוש פעמים בשבוע לילה', - 'start_hour' => '03:20:00', - 'duration' => 4, - 'parallel_weight' => 1, - 'type' => 'bakara', - 'is_weekend' => false, - 'is_night' => true, - 'in_parallel' => false, - 'color' => '#4bb5ac', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'bakara סופ"ש', - 'start_hour' => '10:05:00', - 'duration' => 26, - 'parallel_weight' => 2.5, - 'type' => 'bakara', - 'is_weekend' => true, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#4bb5ac', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - // pikud - Task::factory()->create([ - 'name' => 'pikud 1 א-ה בוקר', - 'start_hour' => '10:00:00', - 'duration' => 4, - 'parallel_weight' => 0, - 'type' => 'pikud', - 'is_weekend' => false, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#4bb569', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'pikud 2 א-ה בוקר', - 'start_hour' => '10:00:00', - 'duration' => 4, - 'parallel_weight' => 0, - 'type' => 'pikud', - 'is_weekend' => false, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#4bb569', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'pikud 1 סופש', - 'start_hour' => '10:00:00', - 'duration' => 25, - 'parallel_weight' => 2.5, - 'type' => 'pikud', - 'is_weekend' => true, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#4bb569', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'pikud 2 סופש', - 'start_hour' => '10:00:00', - 'duration' => 25, - 'parallel_weight' => 2.5, - 'type' => 'pikud', - 'is_weekend' => true, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#4bb569', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'pikud לילה א-ה', - 'start_hour' => '03:00:00', - 'duration' => 4, - 'parallel_weight' => 1, - 'type' => 'pikud', - 'is_weekend' => false, - 'is_night' => true, - 'in_parallel' => false, - 'color' => '#4bb569', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - // minhal - Task::factory()->create([ - 'name' => 'minhal שלוש פעמים בשבוע בוקר', - 'start_hour' => '13:00:00', - 'duration' => 2, - 'parallel_weight' => 0, - 'type' => 'minhal', - 'is_weekend' => false, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#c5d649', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::TUESDAY, DaysInWeek::THURSDAY], - ]), - ]); - // hatasa - Task::factory()->create([ - 'name' => 'hatasa א-ה בוקר', - 'start_hour' => '09:00:00', - 'duration' => 6, - 'parallel_weight' => 0, - 'type' => 'hatasa', - 'is_weekend' => false, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#d649b5', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'hatasa א-ה לילה', - 'start_hour' => '02:00:00', - 'duration' => 6, - 'parallel_weight' => 1, - 'type' => 'hatasa', - 'is_weekend' => false, - 'is_night' => true, - 'in_parallel' => false, - 'color' => '#d649b5', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'hatasa 1 סופש', - 'start_hour' => '06:00:00', - 'duration' => 26, - 'parallel_weight' => 2.5, - 'type' => 'hatasa', - 'is_weekend' => true, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#d649b5', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'hatasa 2 סופש', - 'start_hour' => '06:00:00', - 'duration' => 26, - 'parallel_weight' => 2.5, - 'type' => 'hatasa', - 'is_weekend' => true, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#d649b5', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - // shmira - Task::factory()->create([ - 'name' => 'shmira א-ה בוקר', - 'start_hour' => '07:00:00', - 'duration' => 12, - 'parallel_weight' => 0, - 'type' => 'shmira', - 'is_weekend' => false, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#ee8559', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'shmira א-ה לילה', - 'start_hour' => '01:00:00', - 'duration' => 7, - 'parallel_weight' => 1, - 'type' => 'shmira', - 'is_weekend' => false, - 'is_night' => true, - 'in_parallel' => false, - 'color' => '#ee8559', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'shmira 1 סופש', - 'start_hour' => '06:00:00', - 'duration' => 26, - 'parallel_weight' => 2.5, - 'type' => 'shmira', - 'is_weekend' => true, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#ee8559', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'shmira סופש 2', - 'start_hour' => '06:00:00', - 'duration' => 26, - 'parallel_weight' => 2.5, - 'type' => 'shmira', - 'is_weekend' => true, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#ee8559', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - // pianuach - Task::factory()->create([ - 'name' => 'pianuach א-ה בוקר', - 'start_hour' => '07:00:00', - 'duration' => 7, - 'parallel_weight' => 0, - 'type' => 'pianuach', - 'is_weekend' => false, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#3574fb', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'pianuach א-ה לילה', - 'start_hour' => '01:00:00', - 'duration' => 5, - 'parallel_weight' => 1, - 'type' => 'pianuach', - 'is_weekend' => false, - 'is_night' => true, - 'in_parallel' => false, - 'color' => '#3574fb', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'pianuach 1 סופש', - 'start_hour' => '07:00:00', - 'duration' => 27, - 'parallel_weight' => 2.5, - 'type' => 'pianuach', - 'is_weekend' => true, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#3574fb', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'pianuach 2 סופש', - 'start_hour' => '07:00:00', - 'duration' => 27, - 'parallel_weight' => 2.5, - 'type' => 'pianuach', - 'is_weekend' => true, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#3574fb', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - // nivut - Task::factory()->create([ - 'name' => 'nivut א-ה בוקר', - 'start_hour' => '11:00:00', - 'duration' => 2, - 'parallel_weight' => 0, - 'type' => 'nivut', - 'is_weekend' => false, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#ed8d8d8b', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'nivut א-ה לילה', - 'start_hour' => '01:00:00', - 'duration' => 2.5, - 'parallel_weight' => 1, - 'type' => 'nivut', - 'is_weekend' => false, - 'is_night' => true, - 'in_parallel' => false, - 'color' => '#ed8d8d8b', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'nivut 1 סופש', - 'start_hour' => '11:00:00', - 'duration' => 28, - 'parallel_weight' => 2.5, - 'type' => 'nivut', - 'is_weekend' => true, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#ed8d8d8b', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'nivut 2 סופש', - 'start_hour' => '11:00:00', - 'duration' => 28, - 'parallel_weight' => 2.5, - 'type' => 'nivut', - 'is_weekend' => true, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#ed8d8d8b', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - // tazpit - Task::factory()->create([ - 'name' => 'tazpit א-ה בוקר 1', - 'start_hour' => '08:00:00', - 'duration' => 10, - 'parallel_weight' => 0, - 'type' => 'tazpit', - 'is_weekend' => false, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#77ff23', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'tazpit א-ה בוקר 2', - 'start_hour' => '08:00:00', - 'duration' => 10, - 'parallel_weight' => 0, - 'type' => 'tazpit', - 'is_weekend' => false, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#77ff23', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'tazpit א-ה לילה', - 'start_hour' => '01:30:00', - 'duration' => 6, - 'parallel_weight' => 1, - 'type' => 'tazpit', - 'is_weekend' => false, - 'is_night' => true, - 'in_parallel' => false, - 'color' => '#77ff23', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'tazpit 1 סופש', - 'start_hour' => '11:45:00', - 'duration' => 25, - 'parallel_weight' => 2.5, - 'type' => 'tazpit', - 'is_weekend' => true, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#77ff23', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'tazpit 2 סופש', - 'start_hour' => '11:00:00', - 'duration' => 25, - 'parallel_weight' => 2.5, - 'type' => 'tazpit', - 'is_weekend' => true, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#77ff23', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - // bdikat ziud - Task::factory()->create([ - 'name' => 'bdikat ziud פעם בשבוע בוקר', - 'start_hour' => '11:15:00', - 'duration' => 3.5, - 'parallel_weight' => 0, - 'type' => 'bdikat ziud', - 'is_weekend' => false, - 'is_night' => false, - 'in_parallel' => false, - 'color' => '#a7b2c3', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY], - ]), - ]); - } - - protected function createConstraints(int $userId) - { - for ($i = 0; $i < count(ConstraintType::cases()); $i++) { - $times = ConstraintType::getLimit()[ConstraintType::cases()[$i]->value] > 0 - ? random_int(0, ConstraintType::getLimit()[ConstraintType::cases()[$i]->value]) : - random_int(0, random_int(0, 5)); - for ($j = 0; $j < $times; $j++) { - $startDate = call_user_func([$this, ConstraintType::cases()[$i]->name]); - Constraint::factory()->create([ - 'soldier_id' => User::find($userId)->userable_id, - 'constraint_type' => ConstraintType::cases()[$i], - 'start_date' => $startDate, - 'end_date' => $startDate->copy()->addHours(random_int(1, 5)), - ]); - } - } - } - - protected function getDatesOfMonth($month = null) - { - $month ??= now()->addMonth(); - - return CarbonPeriod::between($month->startOfMonth(), $month->copy()->endOfMonth()); - } - - protected function getThursday() - { - $period = $this->getDatesOfMonth(); - - return collect($period) - ->filter( - fn ($date) => Carbon::parse($date)->isThursday() - )->all(); - } - - protected function getWeekends() - { - $period = $this->getDatesOfMonth(); - - return collect($period) - ->filter( - fn ($date) => Carbon::parse($date)->isFriday() || Carbon::parse($date)->isSaturday() - ) - ->all(); - } - - protected function getTime() - { - return Carbon::now()->subSeconds(rand(0, 30 * 24 * 60 * 60)); - } - - protected function getNightHour() - { - $time = $this->getTime(); - if ($time->hour < 20 && $time->hour >= 8) { - return $time->addHours(20 - $time->hour); - } - - return $time; - } - - protected function NOT_WEEKEND() - { - $time = $this->getTime(); - - return Carbon::parse(collect($this->getWeekends())->random()) - ->setTime( - $time->hour, - $time->minute, - $time->second - ); - } - - protected function LOW_PRIORITY_NOT_WEEKEND() - { - $time = $this->getTime(); - - return Carbon::parse(collect($this->getWeekends())->random()) - ->setTime( - $time->hour, - $time->minute, - $time->second - ); - } - - protected function NOT_TASK() - { - $time = $this->getTime(); - - return Carbon::parse(collect($this->getDatesOfMonth())->random()) - ->setTime( - $time->hour, - $time->minute, - $time->second - ); - } - - protected function LOW_PRIORITY_NOT_TASK() - { - $time = $this->getTime(); - - return Carbon::parse(collect($this->getDatesOfMonth())->random()) - ->setTime( - $time->hour, - $time->minute, - $time->second - ); - } - - protected function NOT_EVENING() - { - $date = collect($this->getDatesOfMonth())->random(); - $nightTime = $this->getNightHour(); - - return $date->copy()->setTime($nightTime->hour, $nightTime->minute, $nightTime->second); - } - - protected function NOT_THURSDAY_EVENING() - { - $date = collect($this->getThursday())->random(); - $nightTime = $this->getNightHour(); + ])->assignRole(['soldier']); - return $date->copy()->setTime($nightTime->hour, $nightTime->minute, $nightTime->second); - } - - protected function VACATION() - { - $time = $this->getTime(); - - return Carbon::parse(collect($this->getDatesOfMonth())->random()) - ->setTime( - $time->hour, - $time->minute, - $time->second - ); - } - - protected function MEDICAL() - { - $time = $this->getTime(); - - return Carbon::parse(collect($this->getDatesOfMonth())->random()) - ->setTime( - $time->hour, - $time->minute, - $time->second - ); - } - - protected function SCHOOL() - { - $time = $this->getTime(); + User::factory()->create([ + 'first_name' => 'מפקד', + 'last_name' => 'צוות 1', + 'password' => '1111111', + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => [], + 'capacity' => 10, + 'max_weekends' => 10, + 'max_shifts' => 10, + 'max_nights' => 10, + 'course' => 1, + 'is_reservist' => false, + 'constraints_limit' => ConstraintType::getLimit(), + ])->id, + ])->assignRole(['soldier']); - return Carbon::parse(collect($this->getDatesOfMonth())->random()) - ->setTime( - $time->hour, - $time->minute, - $time->second - ); - } + User::factory()->create([ + 'first_name' => 'חייל', + 'last_name' => 'א', + 'password' => '1111111', + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => [], + 'capacity' => 10, + 'max_weekends' => 10, + 'max_shifts' => 10, + 'max_nights' => 10, + 'course' => 1, + 'is_reservist' => false, + 'constraints_limit' => ConstraintType::getLimit(), + ])->id, + ])->assignRole(['soldier']); + User::factory()->create([ + 'first_name' => 'חייל', + 'last_name' => 'ב', + 'password' => '1111111', + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => [], + 'capacity' => 10, + 'max_weekends' => 10, + 'max_shifts' => 10, + 'max_nights' => 10, + 'course' => 1, + 'is_reservist' => false, + 'constraints_limit' => ConstraintType::getLimit(), + ])->id, + ])->assignRole(['soldier']); + User::factory()->create([ + 'first_name' => 'משבץ', + 'last_name' => '1', + 'password' => '1111111', + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => [], + 'capacity' => 10, + 'max_weekends' => 10, + 'max_shifts' => 10, + 'max_nights' => 10, + 'course' => 1, + 'is_reservist' => false, + 'constraints_limit' => ConstraintType::getLimit(), + ])->id, + ])->assignRole(['soldier','shifts-assignment']); } +} \ No newline at end of file From 48b6bc5d07b7cdeaf01538d433875dbb4015a187 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 6 Feb 2025 13:46:52 +0200 Subject: [PATCH 093/259] deploy version --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Models/Constraint.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index c257091..7a12d1d 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_30 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_31 flavor: | latest=false tags: | diff --git a/app/Models/Constraint.php b/app/Models/Constraint.php index 22c934b..5770969 100644 --- a/app/Models/Constraint.php +++ b/app/Models/Constraint.php @@ -211,7 +211,7 @@ private static function availableOptions($startDate, $endDate, $withLimit = true if (! $start_date->isSunday()) { unset($options[ConstraintType::NOT_SUNDAY_MORNING->value]); } - if ($end_date->gt($start_date)) { + if (!$end_date->isSameDay($start_date)) { unset($options[ConstraintType::NOT_SUNDAY_MORNING->value]); unset($options[ConstraintType::NOT_THURSDAY_EVENING->value]); unset($options[ConstraintType::NOT_EVENING->value]); From f09237e2bf0d91be501bd0680d432afa5ffe0a36 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 6 Feb 2025 16:00:48 +0200 Subject: [PATCH 094/259] deploy version --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 26 ++++++++++++---------- app/Models/Constraint.php | 2 +- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 7a12d1d..fac2aaa 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_31 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_32 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 3d85218..52fbe2e 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -353,17 +353,19 @@ protected function getBasicActions() ->closeModalByClickingAway(false) ->extraModalFooterActions(function (Action $action, array $arguments): array { $canSave = empty($arguments) ? true : ( - $this->model === Constraint::class && isset($this->mountedActionsData[0]['constraint_type']) ? ( - $arguments['type'] === 'drop' ? - array_key_exists( - $this->mountedActionsData[0]['constraint_type'], - $this->model::getAvailableOptions($arguments['event']['start'], $arguments['event']['end'], false) - ) : - array_key_exists( - $this->mountedActionsData[0]['constraint_type'], - $this->model::getAvailableOptions($arguments['event']['start'], $arguments['event']['end']) - ) - ) : false + $this->model === Constraint::class ? ( + isset($this->mountedActionsData[0]['constraint_type']) ? ( + $arguments['type'] === 'drop' ? + array_key_exists( + $this->mountedActionsData[0]['constraint_type'], + $this->model::getAvailableOptions($arguments['event']['start'], $arguments['event']['end'], false) + ) : + array_key_exists( + $this->mountedActionsData[0]['constraint_type'], + $this->model::getAvailableOptions($arguments['event']['start'], $arguments['event']['end']) + ) + ) : false + ) : true ); if (! empty($arguments) && $this->model === Shift::class) { $oldDate = date('l', strtotime($this->mountedActionsArguments[0]['oldEvent']['start'])); @@ -399,7 +401,7 @@ protected function getBasicActions() if ($this->model == Constraint::class) { if ( ($data['constraint_type'] === ConstraintType::VACATION->value || - $data['constraint_type'] === ConstraintType::MEDICAL->value) && + $data['constraint_type'] === ConstraintType::MEDICAL->value) && auth()->user()->getRoleNames()->count() === 1 ) { $dataToEdit = [ diff --git a/app/Models/Constraint.php b/app/Models/Constraint.php index 5770969..120e829 100644 --- a/app/Models/Constraint.php +++ b/app/Models/Constraint.php @@ -211,7 +211,7 @@ private static function availableOptions($startDate, $endDate, $withLimit = true if (! $start_date->isSunday()) { unset($options[ConstraintType::NOT_SUNDAY_MORNING->value]); } - if (!$end_date->isSameDay($start_date)) { + if (! $end_date->isSameDay($start_date)) { unset($options[ConstraintType::NOT_SUNDAY_MORNING->value]); unset($options[ConstraintType::NOT_THURSDAY_EVENING->value]); unset($options[ConstraintType::NOT_EVENING->value]); From 0fc42ecf0de224569faa7b82be3b948a98737be6 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 6 Feb 2025 16:19:54 +0200 Subject: [PATCH 095/259] deploy version --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 5 +- app/Livewire/MyDatabaseNotifications.php | 59 +++++++++++++++------- app/Models/Constraint.php | 30 +++++++---- lang/en.json | 15 +++--- lang/he.json | 13 +++-- 6 files changed, 81 insertions(+), 43 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index fac2aaa..8826da1 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_32 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_33 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 52fbe2e..5ab7593 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -405,9 +405,8 @@ protected function getBasicActions() auth()->user()->getRoleNames()->count() === 1 ) { $dataToEdit = [ - 'record' => $this->model::find($record['id']), - 'data' => $data, - 'model' => $this->model, + 'oldConstraint' => $record, + 'newConstraint' => $data, ]; Constraint::requestEditConstraint($dataToEdit); diff --git a/app/Livewire/MyDatabaseNotifications.php b/app/Livewire/MyDatabaseNotifications.php index 3e691a3..2001ba4 100644 --- a/app/Livewire/MyDatabaseNotifications.php +++ b/app/Livewire/MyDatabaseNotifications.php @@ -906,9 +906,9 @@ public function confirmConstraintEdit($user, $data) protected function confirmConstraintEditNotification($user, $data) { - $columns = Schema::getColumnListing(strtolower(class_basename($data['model'])).'s'); - $filteredData = array_intersect_key($data['data'], array_flip($columns)); - $record = $data['model']::find($data['record']['id']); + $columns = Schema::getColumnListing(strtolower(class_basename('constraints'))); + $filteredData = array_intersect_key($data['newConstraint'], array_flip($columns)); + $record = Constraint::find($data['oldConstraint']['id']); if ($record) { collect($filteredData)->map(function ($value, $key) use ($record) { @@ -916,15 +916,26 @@ protected function confirmConstraintEditNotification($user, $data) }); $record->save(); } + $this->sendNotification( __('Your request to edit the constraint has been approved'), - __('Commander approved edit constraint', [ - 'name' => User::find($user)->displayName, - 'constraintName' => __($data['data']['constraint_type']), - 'startDate' => $data['record']['start_date'], - 'endDate' => $data['record']['end_date'], - 'ToStartDate' => $data['data']['start_date'], - 'ToEndDate' => $data['data']['end_date'], + $data['oldConstraint']['constraint_type'] === $data['newConstraint']['constraint_type'] ? + __('Commander approved edit constraint times', [ + 'soldierName' => Soldier::find($data['oldConstraint']['soldier_id'])->user->displayName, + 'constraintName' => __($data['oldConstraint']['constraint_type']), + 'startDate' => $data['oldConstraint']['start_date'], + 'endDate' => $data['oldConstraint']['end_date'], + 'toStartDate' => $data['newConstraint']['start_date'], + 'toEndDate' => $data['newConstraint']['end_date'], + ]) : + __('Commander approved edit constraint type', [ + 'soldierName' => Soldier::find($data['oldConstraint']['soldier_id'])->user->displayName, + 'constraintName' => __($data['oldConstraint']['constraint_type']), + 'startDate' => $data['oldConstraint']['start_date'], + 'endDate' => $data['oldConstraint']['end_date'], + 'toConstraintName' => __($data['newConstraint']['constraint_type']), + 'toStartDate' => $data['newConstraint']['start_date'], + 'toEndDate' => $data['newConstraint']['end_date'], ]), [], User::find($user) @@ -932,20 +943,32 @@ protected function confirmConstraintEditNotification($user, $data) } #[On('denyConstraintEdit')] - public function denyConstraintEdit($user, $constraintName, $startDate, $endDate) + public function denyConstraintEdit($user, $data) { - $this->denyConstraintEditNotification($user, $constraintName, $startDate, $endDate); + $this->denyConstraintEditNotification($user, $data); } - protected function denyConstraintEditNotification($user, $constraintName, $startDate, $endDate) + protected function denyConstraintEditNotification($user, $data) { $this->sendNotification( __('Your request to edit the constraint has been rejected'), - __('Commander deny edit constraint', [ - 'name' => User::find($user)->displayName, - 'constraintName' => $constraintName, - 'startDate' => $startDate, - 'endDate' => $endDate, + $data['oldConstraint']['constraint_type'] === $data['newConstraint']['constraint_type'] ? + __('Commander deny edit constraint times', [ + 'soldierName' => Soldier::find($data['oldConstraint']['soldier_id'])->user->displayName, + 'constraintName' => __($data['oldConstraint']['constraint_type']), + 'startDate' => $data['oldConstraint']['start_date'], + 'endDate' => $data['oldConstraint']['end_date'], + 'toStartDate' => $data['newConstraint']['start_date'], + 'toEndDate' => $data['newConstraint']['end_date'], + ]) : + __('Commander deny edit constraint type', [ + 'soldierName' => Soldier::find($data['oldConstraint']['soldier_id'])->user->displayName, + 'constraintName' => __($data['oldConstraint']['constraint_type']), + 'startDate' => $data['oldConstraint']['start_date'], + 'endDate' => $data['oldConstraint']['end_date'], + 'toConstraintName' => __($data['newConstraint']['constraint_type']), + 'toStartDate' => $data['newConstraint']['start_date'], + 'toEndDate' => $data['newConstraint']['end_date'], ]), [], User::find($user) diff --git a/app/Models/Constraint.php b/app/Models/Constraint.php index 120e829..68b5955 100644 --- a/app/Models/Constraint.php +++ b/app/Models/Constraint.php @@ -150,13 +150,25 @@ public static function requestEditConstraint($data) Notification::make() ->title(__('Do you approve the request to edit the constraint?')) ->body( - __('Shift details edit', [ - 'name' => Soldier::find(auth()->user()->userable_id)->user->displayName, - 'startDate' => $data['record']['start_date']->format('Y-m-d H:i:s'), - 'endDate' => $data['record']['end_date']->format('Y-m-d H:i:s'), - 'ToStartDate' => $data['data']['start_date'], - 'ToEndDate' => $data['data']['end_date'], - 'type' => __($data['data']['constraint_type']), + $data['oldConstraint']['constraint_type']->value === $data['newConstraint']['constraint_type'] ? + __('Constraint edit times', [ + 'commanderName' => $commander->displayName, + 'soldierName' => Soldier::find(auth()->user()->userable_id)->user->displayName, + 'constraintName' => __($data['oldConstraint']['constraint_type']->value), + 'startDate' => $data['oldConstraint']['start_date']->format('Y-m-d H:i:s'), + 'endDate' => $data['oldConstraint']['end_date']->format('Y-m-d H:i:s'), + 'toStartDate' => $data['newConstraint']['start_date'], + 'toEndDate' => $data['newConstraint']['end_date'], + ]) : + __('Constraint edit type', [ + 'commanderName' => $commander->displayName, + 'soldierName' => Soldier::find(auth()->user()->userable_id)->user->displayName, + 'constraintName' => __($data['oldConstraint']['constraint_type']->value), + 'startDate' => $data['oldConstraint']['start_date']->format('Y-m-d H:i:s'), + 'endDate' => $data['oldConstraint']['end_date']->format('Y-m-d H:i:s'), + 'toConstraintName' => __($data['newConstraint']['constraint_type']), + 'toStartDate' => $data['newConstraint']['start_date'], + 'toEndDate' => $data['newConstraint']['end_date'], ]) ) ->actions( @@ -176,9 +188,7 @@ public static function requestEditConstraint($data) ->color('danger') ->dispatch('denyConstraintEdit', [ 'user' => auth()->user()->id, - 'constraintName' => __($data['data']['constraint_type']), - 'startDate' => $data['data']['start_date'], - 'endDate' => $data['data']['end_date'], + 'data' => $data, ]) ->close(), ] diff --git a/lang/en.json b/lang/en.json index eeabce4..af42528 100644 --- a/lang/en.json +++ b/lang/en.json @@ -39,11 +39,14 @@ "Range greater than equal":":label is greater than or equal :value", "Range less than":":label is less than :value", "Range less than equal":":label is less than or equal :value", - "Commander approved create constraint":"Hello :name!
Your request to create a constraint :constraintName
From :startDate to :endDate
Has been approved!
Have a good day!", - "Commander deny create constraint":"Hello :name!
Your request to create a constraint :constraintName
From :startDate to :endDate
Has been rejected!
Have a good day!", + "Commander approved create constraint":"Hello :name!
Your request to create a constraint :constraintName
From :startDate to :endDate
Has been approved!
Have a good day!", + "Commander deny create constraint":"Hello :name!
Your request to create a constraint :constraintName
From :startDate to :endDate
Has been rejected!
Have a good day!", "This task is assigned to":"This task is assigned to :soldierName", - "Shift details edit":"Soldier :name requests your permission to edit the :type constraint and move it:
from :startDate to :endDate.
to :ToStartDate to :ToEndDate.
Do you approve?", - "Commander approved edit constraint": "Hello :name!
Your request to edit constraint :constraintName
to move from date: :startDate to :endDate to date: :ToStartDate to :ToEndDate
has been approved!
The change has been updated successfully!
Have a nice day!", - "Commander deny edit constraint":"Hello :name!
Your request to move constraint :constraintName
from: :startDate to :endDate
has been rejected!
Have a nice day!", - "Add identifier":"Add an identifier to the name so that it is not the same as another name. For example: :example" + "Add identifier":"Add an identifier to the name so that it is not the same as another name. For example: :example", + "Constraint edit times":"Hello :commanderName!
Do you authorize :soldierName soldier to move his :constraintName constraint
From :startDate - :endDate
To :toStartDate - :toEndDate?", + "Constraint edit type":"Hello :commanderName!
Do you authorize :soldierName soldier to edit his :constraintName constraint
At :startDate - :endDate
To :toConstraintName constraint
At :toStartDate - :toEndDate ?", + "Commander approved edit constraint times":"Hello :soldierName
Your request to move your :constraintName constraint
From :startDate - :endDate
To :toStartDate - :toEndDate
Has been approved and the change has been made.
Have a good day!", + "Commander approved edit constraint type": "Hello :soldierName!
Your request to edit your :constraintName constraint
At :startDate - :endDate
To :toConstraintName constraint
At :toStartDate - :toEndDate
Has been approved and the change has been made.
Have a good day!", + "Commander deny edit constraint times":"Hello :soldierName
Your request to move your :constraintName constraint
From :startDate - :endDate
To :toStartDate - :toEndDate
Has been rejected.
Have a good day!", + "Commander deny edit constraint type":"Hello :soldierName!
Your request to edit your :constraintName constraint
At :startDate - :endDate
To :toConstraintName constraint
At :toStartDate - :toEndDate
Has been rejected.
Have a good day!" } diff --git a/lang/he.json b/lang/he.json index 6583c45..499661c 100644 --- a/lang/he.json +++ b/lang/he.json @@ -169,7 +169,7 @@ "Nights":"לילות", "nights":"לילות", "No":"לא", - "No matching data!":"אין נתונים תואמים !", + "No matching data!":"אין נתונים תואמים!", "No qualifications": "אין הסמכות", "No roles":"אין תפקידים", "No suitable soldiers":"אין חיילים מתאימים", @@ -300,11 +300,14 @@ "Select concurrent tasks":"בחר משימות", "No tasks":"אין משימות", "The soldier is assigned a shift during the task":"לחייל מוקצית תורנות בזמן המשמרת", - "Shift details edit":"החייל :name מבקש את האישור שלך לערוך את האילוץ :type שלו ולהזיז אותו ל:
מ :startDate עד :endDate.
ל :ToStartDate עד :ToEndDate.
האם אתה מאשר?", - "Commander approved edit constraint": "שלום :name!
בקשתך לעריכת האילוץ :constraintName
להזיזו מהתאריך: :startDate עד :endDate לתאריך: :ToStartDate עד :ToEndDate
אושרה והאילוץ עודכן.
המשך יום טוב!", - "Commander deny edit constraint":"שלום :name!
בקשתך להזזת האילוץ :constraintName
מ: :startDate עד :endDate
נדחתה!
המשך יום טוב!", "Add identifier":"הוסף מזהה לשם על מנת למנוע משתמשים עם שמות כפולים. לדוגמה :example", "Your request to edit the constraint has been approved":"בקשתך לעריכת אילוץ אושרה", "Your request to edit the constraint has been rejected":"בקשתך לעריכת אילוץ נדחתה", - "Do you approve the request to edit the constraint?":"האם אתה מאשר עריכת אילוץ?" + "Do you approve the request to edit the constraint?":"האם אתה מאשר עריכת אילוץ?", + "Constraint edit times":"שלום :commanderName!
האם אתה מאשר לחייל :soldierName
להזיז את האילוץ :constraintName שלו
מ :startDate - :endDate
ל :toStartDate - :toEndDate ?", + "Constraint edit type":"שלום :commanderName!
האם אתה מאשר לחייל :soldierName לערוך את האילוץ :constraintName שלו
ב :startDate - :endDate
לאילוץ :toConstraintName
ב :toStartDate - :toEndDate ?", + "Commander approved edit constraint times":" שלום :soldierName!
בקשתך להזזת האילוץ :constraintName שלך
מ :startDate - :endDate
ל :toStartDate - :toEndDate
אושרה והשינוי בוצע .
המשך יום קסום!", + "Commander approved edit constraint type": "שלום :soldierName!
בקשתך לעריכת האילוץ :constraintName שלך
ב :startDate - :endDate
לאילוץ :toConstraintName
ב :toStartDate - :toEndDate
אושרה והשינוי בוצע .
המשך יום קסום!", + "Commander deny edit constraint times":" שלום :soldierName!
בקשתך להזזת האילוץ :constraintName שלך
מ :startDate - :endDate
ל :toStartDate - :toEndDate נדחתה.
המשך יום קסום!", + "Commander deny edit constraint type": "שלום :soldierName!
בקשתך לעריכת האילוץ :constraintName שלך
ב :startDate - :endDate
לאילוץ :toConstraintName
ב :toStartDate - :toEndDate נדחתה.
המשך יום קסום!" } From e40d7fc91c13ec16effb8e876a4ab1a9eb7d15ee Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 9 Feb 2025 09:28:39 +0200 Subject: [PATCH 096/259] deploy version --- database/seeders/DatabaseSeeder.php | 154 ++++++++++++++-------------- 1 file changed, 77 insertions(+), 77 deletions(-) diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 80528e4..a9c7c43 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -24,8 +24,8 @@ public function run(): void // Soldiers User::factory()->create([ - 'first_name' => 'name', - 'last_name' => 'family', + 'first_name' => 'newspace', + 'last_name' => 'newspace', 'password' => '1234567', 'userable_id' => Soldier::factory()->create([ 'qualifications' => [], @@ -39,82 +39,82 @@ public function run(): void ])->id, ])->assignRole(['soldier', 'manager']); - User::factory()->create([ - 'first_name' => 'מפקד', - 'last_name' => 'מדור 1', - 'password' => '1111111', - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => [], - 'capacity' => 10, - 'max_weekends' => 10, - 'max_shifts' => 10, - 'max_nights' => 10, - 'course' => 1, - 'is_reservist' => false, - 'constraints_limit' => ConstraintType::getLimit(), - ])->id, - ])->assignRole(['soldier']); + // User::factory()->create([ + // 'first_name' => 'מפקד', + // 'last_name' => 'מדור 1', + // 'password' => '1111111', + // 'userable_id' => Soldier::factory()->create([ + // 'qualifications' => [], + // 'capacity' => 10, + // 'max_weekends' => 10, + // 'max_shifts' => 10, + // 'max_nights' => 10, + // 'course' => 1, + // 'is_reservist' => false, + // 'constraints_limit' => ConstraintType::getLimit(), + // ])->id, + // ])->assignRole(['soldier']); - User::factory()->create([ - 'first_name' => 'מפקד', - 'last_name' => 'צוות 1', - 'password' => '1111111', - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => [], - 'capacity' => 10, - 'max_weekends' => 10, - 'max_shifts' => 10, - 'max_nights' => 10, - 'course' => 1, - 'is_reservist' => false, - 'constraints_limit' => ConstraintType::getLimit(), - ])->id, - ])->assignRole(['soldier']); + // User::factory()->create([ + // 'first_name' => 'מפקד', + // 'last_name' => 'צוות 1', + // 'password' => '1111111', + // 'userable_id' => Soldier::factory()->create([ + // 'qualifications' => [], + // 'capacity' => 10, + // 'max_weekends' => 10, + // 'max_shifts' => 10, + // 'max_nights' => 10, + // 'course' => 1, + // 'is_reservist' => false, + // 'constraints_limit' => ConstraintType::getLimit(), + // ])->id, + // ])->assignRole(['soldier']); - User::factory()->create([ - 'first_name' => 'חייל', - 'last_name' => 'א', - 'password' => '1111111', - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => [], - 'capacity' => 10, - 'max_weekends' => 10, - 'max_shifts' => 10, - 'max_nights' => 10, - 'course' => 1, - 'is_reservist' => false, - 'constraints_limit' => ConstraintType::getLimit(), - ])->id, - ])->assignRole(['soldier']); - User::factory()->create([ - 'first_name' => 'חייל', - 'last_name' => 'ב', - 'password' => '1111111', - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => [], - 'capacity' => 10, - 'max_weekends' => 10, - 'max_shifts' => 10, - 'max_nights' => 10, - 'course' => 1, - 'is_reservist' => false, - 'constraints_limit' => ConstraintType::getLimit(), - ])->id, - ])->assignRole(['soldier']); - User::factory()->create([ - 'first_name' => 'משבץ', - 'last_name' => '1', - 'password' => '1111111', - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => [], - 'capacity' => 10, - 'max_weekends' => 10, - 'max_shifts' => 10, - 'max_nights' => 10, - 'course' => 1, - 'is_reservist' => false, - 'constraints_limit' => ConstraintType::getLimit(), - ])->id, - ])->assignRole(['soldier','shifts-assignment']); + // User::factory()->create([ + // 'first_name' => 'חייל', + // 'last_name' => 'א', + // 'password' => '1111111', + // 'userable_id' => Soldier::factory()->create([ + // 'qualifications' => [], + // 'capacity' => 10, + // 'max_weekends' => 10, + // 'max_shifts' => 10, + // 'max_nights' => 10, + // 'course' => 1, + // 'is_reservist' => false, + // 'constraints_limit' => ConstraintType::getLimit(), + // ])->id, + // ])->assignRole(['soldier']); + // User::factory()->create([ + // 'first_name' => 'חייל', + // 'last_name' => 'ב', + // 'password' => '1111111', + // 'userable_id' => Soldier::factory()->create([ + // 'qualifications' => [], + // 'capacity' => 10, + // 'max_weekends' => 10, + // 'max_shifts' => 10, + // 'max_nights' => 10, + // 'course' => 1, + // 'is_reservist' => false, + // 'constraints_limit' => ConstraintType::getLimit(), + // ])->id, + // ])->assignRole(['soldier']); + // User::factory()->create([ + // 'first_name' => 'משבץ', + // 'last_name' => '1', + // 'password' => '1111111', + // 'userable_id' => Soldier::factory()->create([ + // 'qualifications' => [], + // 'capacity' => 10, + // 'max_weekends' => 10, + // 'max_shifts' => 10, + // 'max_nights' => 10, + // 'course' => 1, + // 'is_reservist' => false, + // 'constraints_limit' => ConstraintType::getLimit(), + // ])->id, + // ])->assignRole(['soldier','shifts-assignment']); } } \ No newline at end of file From db366fc74ad0ec7388d0494854db4d4da51d4bf8 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 9 Feb 2025 09:29:38 +0200 Subject: [PATCH 097/259] deploy version --- .github/workflows/php-build-and-deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 8826da1..3628677 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_33 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_34 flavor: | latest=false tags: | From b1ec39d8f408e796015ff0dd09e187703c1e1bc7 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Mon, 17 Feb 2025 11:16:07 +0200 Subject: [PATCH 098/259] try version 3 --- .github/workflows/php-build-and-deploy.yml | 2 +- entrypoint.sh | 4 ++-- lang/he.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 3628677..37fadb3 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version2_34 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version3_1 flavor: | latest=false tags: | diff --git a/entrypoint.sh b/entrypoint.sh index 33e5039..9ea31c5 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -37,8 +37,8 @@ _migrate() { exit 1 fi - echo "🚀 Running migrations..." - ${ARTISAN} migrate:fresh --force --seed + # echo "🚀 Running migrations..." + # ${ARTISAN} migrate:fresh --force --seed } diff --git a/lang/he.json b/lang/he.json index 499661c..9a5fc6a 100644 --- a/lang/he.json +++ b/lang/he.json @@ -39,7 +39,7 @@ "August":"אוגוסט", "April":"אפריל", "Assign soldier": "הקצה חייל", - "Assignment charts":"תרשימי שיבוץ", + "Assignment charts":" ניסוי ניסוי תרשימי שיבוץ", "Assigning the soldier to this shift is your sole responsibility!":"הקצאת החייל למשמרת זו הינה באחריותך בלבד! ", "Approve exchange shift request":"אישור בקשת החלפת משמרת", "Commander notification of approving exchange shift request for the requesting soldier": "שלום :requestingSoldierName!
בקשתך להחלפת משמרת :shiftAName
מ :shiftAStart עד :shiftAEnd
עם החייל :approvingSoldierName בעבור משמרת :shiftBName
מ :shiftBStart עד :shiftBEnd
אושרה וההחלפה בוצעה.
יום מוצלח!
:commanderName", From 0ee6c6c2237b5af0d3a06182496912a3e4bac532 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 9 Mar 2025 10:53:22 +0200 Subject: [PATCH 099/259] sart --- .github/workflows/php-build-and-deploy.yml | 2 +- entrypoint.sh | 2 +- lang/he.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 37fadb3..76c1782 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version3_1 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version3_2 flavor: | latest=false tags: | diff --git a/entrypoint.sh b/entrypoint.sh index 9ea31c5..f164ea8 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -38,7 +38,7 @@ _migrate() { fi # echo "🚀 Running migrations..." - # ${ARTISAN} migrate:fresh --force --seed + # ${ARTISAN} migrate --force --seed } diff --git a/lang/he.json b/lang/he.json index 9a5fc6a..7bd651d 100644 --- a/lang/he.json +++ b/lang/he.json @@ -39,7 +39,7 @@ "August":"אוגוסט", "April":"אפריל", "Assign soldier": "הקצה חייל", - "Assignment charts":" ניסוי ניסוי תרשימי שיבוץ", + "Assignment charts":" תרשימי שיבוץ", "Assigning the soldier to this shift is your sole responsibility!":"הקצאת החייל למשמרת זו הינה באחריותך בלבד! ", "Approve exchange shift request":"אישור בקשת החלפת משמרת", "Commander notification of approving exchange shift request for the requesting soldier": "שלום :requestingSoldierName!
בקשתך להחלפת משמרת :shiftAName
מ :shiftAStart עד :shiftAEnd
עם החייל :approvingSoldierName בעבור משמרת :shiftBName
מ :shiftBStart עד :shiftBEnd
אושרה וההחלפה בוצעה.
יום מוצלח!
:commanderName", From ea5d0d12c5416b71f6fe04bf18ceddf18efdffbd Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Mon, 17 Mar 2025 09:22:51 +0200 Subject: [PATCH 100/259] deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Exports/ShiftsExport.php | 6 +- app/Models/Department.php | 24 + app/Models/Soldier.php | 6 +- app/Models/Team.php | 21 + .../Pages/EditDepartment.php | 6 +- app/Resources/ProfileResource.php | 18 +- app/Resources/SoldierResource.php | 20 +- .../SoldierResource/Pages/ListSoldiers.php | 14 +- app/Resources/TaskResource.php | 1 + app/Resources/TeamResource/Pages/EditTeam.php | 6 +- app/Services/ChangeAssignment.php | 20 +- app/Services/ConcurrentTasks.php | 8 +- app/Services/Helpers.php | 15 +- app/Services/ManualAssignment.php | 2 +- app/Services/MaxData.php | 5 - app/Services/Range.php | 4 +- app/Services/Schedule.php | 24 +- app/Services/Shift.php | 10 +- app/Services/Soldier.php | 44 +- database/factories/SoldierFactory.php | 2 + ...17_090917_add_fields_to_soldiers_table.php | 31 + database/seeders/DatabaseSeeder.php | 923 ++++++++++++++++-- lang/he.json | 4 +- public/js/app/components/apexcharts.js | 170 +++- public/js/filament/support/async-alpine.js | 2 +- tests/Feature/DeleteDepartmentTest.php | 39 + tests/Feature/DeleteSoldierTest.php | 44 + tests/Feature/DeleteTeamTest.php | 38 + tests/Unit/HelpersServiceTest.php | 9 +- tests/Unit/RangeServiceTest.php | 8 +- tests/Unit/ShiftServiceTest.php | 33 +- tests/Unit/SoldierServiceTest.php | 64 +- 33 files changed, 1377 insertions(+), 246 deletions(-) create mode 100644 database/migrations/2025_03_17_090917_add_fields_to_soldiers_table.php create mode 100644 tests/Feature/DeleteDepartmentTest.php create mode 100644 tests/Feature/DeleteSoldierTest.php create mode 100644 tests/Feature/DeleteTeamTest.php diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 76c1782..08a7861 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/version3_2 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holShifts_1 flavor: | latest=false tags: | diff --git a/app/Exports/ShiftsExport.php b/app/Exports/ShiftsExport.php index b0c9c08..8def285 100644 --- a/app/Exports/ShiftsExport.php +++ b/app/Exports/ShiftsExport.php @@ -43,6 +43,8 @@ public function collection() __('End date') => $shift->end_date, __('Is night') => $task->is_night ? __('Yes') : __('No'), __('Is weekend') => $task->is_weekend ? __('Yes') : __('No'), + __('Is alert') => $task->is_alert ? __('Yes') : __('No'), + __('In parallel') => $task->in_parallel ? __('Yes') : __('No'), ]; }); } @@ -57,13 +59,15 @@ public function headings(): array __('End date'), __('Is night'), __('Is weekend'), + __('Is alert'), + __('In parallel'), ]; } public function styles(Worksheet $sheet) { $sheet->setRightToLeft(true); - $sheet->getStyle('A1:G1')->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB('D3D3D3'); + $sheet->getStyle('A1:I1')->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB('D3D3D3'); return [ 1 => ['font' => ['bold' => true]], diff --git a/app/Models/Department.php b/app/Models/Department.php index d9500a8..1d1a516 100644 --- a/app/Models/Department.php +++ b/app/Models/Department.php @@ -24,4 +24,28 @@ public function teams(): HasMany { return $this->hasMany(Team::class); } + + protected static function booted(): void + { + static::deleting(function (Department $department) { + self::removeCommanderRole($department->commander_id); + self::unAssignTeams($department); + }); + } + + protected static function removeCommanderRole($commanderId) + { + if ($commanderId) { + $commander = Soldier::find($commanderId)->user; + $commander->removeRole('department-commander'); + } + } + + protected static function unAssignTeams(Department $department) + { + collect($department->teams)->map(function (Team $team) { + $team->department_id = null; + $team->save(); + }); + } } diff --git a/app/Models/Soldier.php b/app/Models/Soldier.php index 0083e2c..ad2a867 100644 --- a/app/Models/Soldier.php +++ b/app/Models/Soldier.php @@ -24,6 +24,8 @@ class Soldier extends Model 'max_shifts', 'max_nights', 'max_weekends', + 'max_alerts', + 'max_in_parallel', 'capacity', 'is_trainee', 'is_mabat', @@ -47,7 +49,6 @@ class Soldier extends Model 'not_thursday_evening' => 'boolean', 'not_sunday_morning' => 'boolean', 'capacity' => Integer::class, - 'max_nights' => Integer::class, 'max_weekends' => Integer::class, 'qualifications' => 'array', 'is_reservist' => 'boolean', @@ -101,7 +102,8 @@ public static function boot() { parent::boot(); static::deleting(function ($record) { - $record->user()->delete(); + $record->user->delete(); + Shift::where('soldier_id', $record->id)->update(['soldier_id' => null]); }); } } diff --git a/app/Models/Team.php b/app/Models/Team.php index c7c9fba..b4efb44 100644 --- a/app/Models/Team.php +++ b/app/Models/Team.php @@ -29,4 +29,25 @@ public function members(): HasMany { return $this->hasMany(Soldier::class); } + + protected static function booted(): void + { + static::deleting(function (Team $team) { + self::removeCommanderRole($team->commander_id); + self::unAssignMembers($team); + }); + } + + protected static function removeCommanderRole($commanderId) + { + if ($commanderId) { + $commander = Soldier::find($commanderId)->user; + $commander->removeRole('team-commander'); + } + } + + protected static function unAssignMembers(Team $team) + { + collect($team->members)->map(fn (Soldier $member) => $member->update(['team_id' => null])); + } } diff --git a/app/Resources/DepartmentResource/Pages/EditDepartment.php b/app/Resources/DepartmentResource/Pages/EditDepartment.php index d91e39c..cb5da73 100644 --- a/app/Resources/DepartmentResource/Pages/EditDepartment.php +++ b/app/Resources/DepartmentResource/Pages/EditDepartment.php @@ -18,8 +18,10 @@ class EditDepartment extends EditRecord protected function beforeSave(): void { if ($this->data['commander_id'] !== $this->record->commander_id) { - $user = User::where('userable_id', $this->record->commander_id)->first(); - $user->removeRole('department-commander'); + if ($this->record->commander_id !== null) { + $user = User::where('userable_id', $this->record->commander_id)->first(); + $user->removeRole('department-commander'); + } $teams = Team::where('commander_id', $this->data['commander_id'])->get(); $departments = Department::where('commander_id', $this->data['commander_id'])->get(); if ($teams->isNotEmpty() || $departments->isNotEmpty()) { diff --git a/app/Resources/ProfileResource.php b/app/Resources/ProfileResource.php index 16f121e..1cf3b9e 100644 --- a/app/Resources/ProfileResource.php +++ b/app/Resources/ProfileResource.php @@ -73,7 +73,7 @@ public static function form(Form $form): Form TextInput::make('max_nights') ->label(__('Max nights')) ->numeric() - ->step(0.25) + ->step(1) ->minValue(0) ->required() ->default(0), @@ -84,6 +84,20 @@ public static function form(Form $form): Form ->minValue(0) ->required() ->default(0), + TextInput::make('max_alerts') + ->label(__('Max alerts')) + ->numeric() + ->step(1) + ->minValue(0) + ->required() + ->default(0), + TextInput::make('max_in_parallel') + ->label(__('Max in parallel')) + ->numeric() + ->step(1) + ->minValue(0) + ->required() + ->default(0), ])->columns(2)->visible(fn () => auth()->user()->getRoleNames()->count() > 1), Section::make([ Toggle::make('is_permanent')->Label(__('Is permanent')), @@ -122,6 +136,8 @@ public static function table(Table $table): Table TextColumn::make('max_nights')->weight(FontWeight::SemiBold)->description(__('Max nights'), 'above')->size(TextColumnSize::Large), TextColumn::make('max_weekends')->weight(FontWeight::SemiBold)->description(__('Max weekends'), 'above')->size(TextColumnSize::Large), + TextColumn::make('max_alerts')->weight(FontWeight::SemiBold)->description(__('Max alerts'), 'above')->size(TextColumnSize::Large), + TextColumn::make('max_in_parallel')->weight(FontWeight::SemiBold)->description(__('Max in parallel'), 'above')->size(TextColumnSize::Large), TextColumn::make('capacity')->weight(FontWeight::SemiBold)->description(__('Capacity'), 'above')->size(TextColumnSize::Large), TextColumn::make('capacity_hold') ->default(function () { diff --git a/app/Resources/SoldierResource.php b/app/Resources/SoldierResource.php index 9bf9f84..155b1d1 100644 --- a/app/Resources/SoldierResource.php +++ b/app/Resources/SoldierResource.php @@ -144,6 +144,8 @@ function ($record) { NumberFilter::make('max_shifts')->label(__('Max shifts')), NumberFilter::make('max_nights')->label(__('Max nights')), NumberFilter::make('max_weekends')->label(__('Max weekends')), + NumberFilter::make('max_alerts')->label(__('Max alerts')), + NumberFilter::make('max_in_parallel')->label(__('Max in parallel')), NumberFilter::make('capacity')->label(__('Capacity')), NumberFilter::make('capacity_hold')->label(__('Capacity hold')), SelectFilter::make('gender') @@ -388,7 +390,7 @@ public static function constraints(): array TextInput::make('max_nights') ->label(__('Max nights')) ->numeric() - ->step(0.25) + ->step(1) ->minValue(0) ->required() ->default(0), @@ -399,8 +401,22 @@ public static function constraints(): array ->minValue(0) ->required() ->default(0), + TextInput::make('max_alerts') + ->label(__('Max alerts')) + ->numeric() + ->step(1) + ->minValue(0) + ->required() + ->default(0), + TextInput::make('max_in_parallel') + ->label(__('Max in parallel')) + ->numeric() + ->step(1) + ->minValue(0) + ->required() + ->default(0), ]) - ->columns(3), + ->columns(5), Section::make([ Toggle::make('is_trainee') ->label(__('Is trainee')), diff --git a/app/Resources/SoldierResource/Pages/ListSoldiers.php b/app/Resources/SoldierResource/Pages/ListSoldiers.php index ba7b21f..4b678f7 100644 --- a/app/Resources/SoldierResource/Pages/ListSoldiers.php +++ b/app/Resources/SoldierResource/Pages/ListSoldiers.php @@ -39,13 +39,23 @@ protected function getHeaderActions(): array TextInput::make('max_nights') ->label(__('Max nights')) ->numeric() - ->step(0.25) + ->step(1) ->minValue(0), TextInput::make('max_weekends') ->label(__('Max weekends')) ->numeric() ->step(0.25) ->minValue(0), + TextInput::make('max_alerts') + ->label(__('Max alerts')) + ->numeric() + ->step(1) + ->minValue(0), + TextInput::make('max_in_parallel') + ->label(__('Max in parallel')) + ->numeric() + ->step(1) + ->minValue(0), TextInput::make('capacity') ->numeric() ->step(0.25) @@ -61,7 +71,7 @@ protected function getHeaderActions(): array ->action(function (array $data) { $selectedCourse = $data['course']; $updateData = []; - $fields = ['max_shifts', 'max_nights', 'max_weekends', 'capacity', 'qualifications']; + $fields = ['max_shifts', 'max_nights', 'max_weekends', 'max_alerts', 'max_in_parallel', 'capacity', 'qualifications']; foreach ($fields as $field) { if (isset($data[$field]) && ! ($field === 'qualifications' && empty($data[$field]))) { diff --git a/app/Resources/TaskResource.php b/app/Resources/TaskResource.php index dd7fb08..848b873 100644 --- a/app/Resources/TaskResource.php +++ b/app/Resources/TaskResource.php @@ -486,6 +486,7 @@ protected static function taskDetails(Get $get) $task->type = $get('type'); $task->is_night = $get('is_night'); $task->is_weekend = $get('is_weekend'); + $task->is_alert = $get('is_alert'); $task->in_parallel = $get('in_parallel'); $task->concurrent_tasks = $get('concurrent_tasks') ?? []; $shift = new Shift; diff --git a/app/Resources/TeamResource/Pages/EditTeam.php b/app/Resources/TeamResource/Pages/EditTeam.php index fb6d870..eec8069 100644 --- a/app/Resources/TeamResource/Pages/EditTeam.php +++ b/app/Resources/TeamResource/Pages/EditTeam.php @@ -18,8 +18,10 @@ class EditTeam extends EditRecord protected function beforeSave(): void { if ($this->data['commander_id'] !== $this->record->commander_id) { - $user = User::where('userable_id', $this->record->commander_id)->first(); - $user->removeRole('team-commander'); + if ($this->record->commander_id !== null) { + $user = User::where('userable_id', $this->record->commander_id)->first(); + $user->removeRole('team-commander'); + } $teams = Team::where('commander_id', $this->data['commander_id'])->get(); $departments = Department::where('commander_id', $this->data['commander_id'])->get(); if ($teams->isNotEmpty() || $departments->isNotEmpty()) { diff --git a/app/Services/ChangeAssignment.php b/app/Services/ChangeAssignment.php index c2b4fbe..8d176de 100644 --- a/app/Services/ChangeAssignment.php +++ b/app/Services/ChangeAssignment.php @@ -13,8 +13,6 @@ class ChangeAssignment protected $soldier; - protected $shifts; - public function __construct($shift) { $this->shift = Helpers::buildShift($shift); @@ -48,7 +46,7 @@ public function getMatchingSoldiers() return $soldier->isQualified($this->shift->taskType) && $soldier->isAvailableBySpaces($this->shift->getShiftSpaces($soldier->shifts)) && ! $this->isConflictWithConstraints($soldier, $this->shift->range) - && $soldier->isAvailableByShifts($this->shift, $this->shift->inParallel); + && $soldier->isAvailableByShifts($this->shift); }) ->mapWithKeys(function (SoldierService $soldier) { return ! $soldier->isAvailableByConcurrentsShifts($this->shift) ? @@ -64,16 +62,16 @@ public function getMatchingShifts() ->where('soldier_id', '!=', $this->soldier->id) ->get() ->filter(function (Shift $shift) { - $range = new Range($shift->start_date, $shift->end_date); $shift = Helpers::buildShift($shift); return - ! $range->isPass() - && $range->isSameMonth(new Range($this->shift->range->start->copy()->startOfMonth(), $this->shift->range->end->copy()->endOfMonth())) + ! $shift->range->isPass() + && $shift->range->isSameMonth(new Range($this->shift->range->start->copy()->startOfMonth(), $this->shift->range->end->copy()->endOfMonth())) && $this->soldier->isQualified($shift->taskType) - && $this->soldier->isAvailableBySpaces($this->shift->getShiftSpaces($this->soldier->shifts)) - && ! $this->isConflictWithConstraints($this->soldier, $range) - && $this->soldier->isAvailableByShifts($shift, $this->shift->inParallel); + && $this->soldier->isAvailableBySpaces($shift->getShiftSpaces($this->soldier->shifts)) + && ! $this->isConflictWithConstraints($this->soldier, $shift->range) + && $this->soldier->isAvailableByShifts($shift) + && ($shift->inParallel ? $this->soldier->isAvailableByConcurrentsShifts($shift) : true); }) ->groupBy('soldier_id') ->filter(function ($shifts, $soldier_id) { @@ -82,13 +80,13 @@ public function getMatchingShifts() $soldierShifts = $this->getSoldiersShifts($soldierDetails->id, false); $soldierShifts->push(...Helpers::addShiftsSpaces($soldierShifts)); $concurrentsShifts = $this->getSoldiersShifts($soldierDetails->id, true); - $soldier = Helpers::buildSoldier($soldierDetails, $constraints, $soldierShifts, [], $concurrentsShifts); return $soldier->isQualified($this->shift->taskType) && $soldier->isAvailableBySpaces($this->shift->getShiftSpaces($soldier->shifts)) && ! $this->isConflictWithConstraints($soldier, $this->shift->range) - && $soldier->isAvailableByShifts($this->shift, $this->shift->inParallel); + && $soldier->isAvailableByShifts($this->shift) + && ($this->shift->inParallel ? $soldier->isAvailableByConcurrentsShifts($this->shift) : true); }); } diff --git a/app/Services/ConcurrentTasks.php b/app/Services/ConcurrentTasks.php index d6b21f8..cd25dbc 100644 --- a/app/Services/ConcurrentTasks.php +++ b/app/Services/ConcurrentTasks.php @@ -57,14 +57,12 @@ protected function getSoldiersDetails() ->get() ->map(function (Soldier $soldier) { $constraints = Helpers::buildConstraints($soldier->constraints, new Range($this->date->copy()->startOfMonth(), $this->date->copy()->endOfMonth())); - $shifts = $this->getSoldiersShifts($soldier->id, false); - $concurrentsShifts = $this->getSoldiersShifts($soldier->id, true); - $shifts->push(...Helpers::addShiftsSpaces($shifts)); + $capacityHold = Helpers::capacityHold($shifts); - return Helpers::buildSoldier($soldier, $constraints, $shifts, [], $concurrentsShifts); + return Helpers::buildSoldier($soldier, $constraints, $shifts, $capacityHold, $concurrentsShifts); }) ->shuffle(); } @@ -107,6 +105,7 @@ protected function getPotentialSoldiers($soldiers, ShiftService $shift) ->filter(function (SoldierService $soldier) use ($shift) { return $soldier->isAvailableByConstraints($shift->range) === Availability::YES && $soldier->isAvailableByConcurrentsShifts($shift) + && $soldier->inParallelMaxData->remaining() > 0 && $this->isAvailableByShiftsAndSpaces($soldier->shifts, $shift); }); @@ -142,6 +141,7 @@ protected function tryAssignShift(SoldierService $soldier, ShiftService $shift) if ($soldier->isAvailableByConcurrentsShifts($shift)) { $soldier->concurrentsShifts->push($shift); $this->assignments->push(new Assignment($shift->id, $soldier->id)); + $soldier->inParallelMaxData->used++; return true; } diff --git a/app/Services/Helpers.php b/app/Services/Helpers.php index f37b8de..c19624d 100644 --- a/app/Services/Helpers.php +++ b/app/Services/Helpers.php @@ -21,6 +21,7 @@ public static function buildShift(Shift $shift): ShiftService $shift->parallel_weight === null ? $shift->task->parallel_weight : $shift->parallel_weight, $shift->task->is_night, $shift->is_weekend !== null ? $shift->is_weekend : $shift->task->is_weekend, + $shift->task->is_alert, $shift->task->in_parallel, $shift->task->concurrent_tasks ); @@ -34,6 +35,8 @@ public static function buildSoldier($soldier, $constraints, $shifts, array $capa new MaxData($soldier->max_shifts, $capacityHold['count'] ?? 0), new MaxData($soldier->max_nights, $capacityHold['sumNights'] ?? 0), new MaxData($soldier->max_weekends, $capacityHold['sumWeekends'] ?? 0), + new MaxData($soldier->max_alerts, $capacityHold['sumAlerts'] ?? 0), + new MaxData($soldier->max_in_parallel, $capacityHold['sumInParallel'] ?? 0), $soldier->qualifications, $constraints, $shifts, @@ -64,15 +67,19 @@ public static function capacityHold($shifts): array $nights = 0; $weekends = 0; $count = 0; + $alerts = 0; + $inParallel = 0; collect($shifts) ->filter(function ($shift) { return $shift->id != 0; }) - ->map(function ($shift) use (&$count, &$points, &$nights, &$weekends) { + ->map(function ($shift) use (&$count, &$points, &$nights, &$weekends, &$alerts, &$inParallel) { $count++; $points += $shift->points; $shift->isWeekend ? $weekends += $shift->points : $weekends; - $shift->isNight ? $nights += $shift->points : $nights; + $shift->isNight ? $nights++ : $nights; + $shift->isAlert ? $alerts++ : $alerts; + $shift->inParallel ? $inParallel++ : $inParallel; }); return [ @@ -80,6 +87,8 @@ public static function capacityHold($shifts): array 'points' => $points, 'sumWeekends' => $weekends, 'sumNights' => $nights, + 'sumAlerts' => $alerts, + 'sumInParallel' => $inParallel, ]; } @@ -89,7 +98,7 @@ public static function addShiftsSpaces($shifts) collect($shifts)->map(function (ShiftService $shift) use ($shifts, &$allSpaces) { $spaces = $shift->isWeekend || $shift->isNight ? $shift->getShiftSpaces($shifts) : null; if (! empty($spaces)) { - collect($spaces)->map(fn (Range $space) => $allSpaces->push(new ShiftService(0, '', $space->start, $space->end, 0, false, false, false, []))); + collect($spaces)->map(fn (Range $space) => $allSpaces->push(new ShiftService(0, '', $space->start, $space->end, 0, false, false, false, false, []))); } }); diff --git a/app/Services/ManualAssignment.php b/app/Services/ManualAssignment.php index 28a2b51..6743288 100644 --- a/app/Services/ManualAssignment.php +++ b/app/Services/ManualAssignment.php @@ -137,7 +137,7 @@ public function amIAvailable(): bool return $soldier->isQualified($this->shift->taskType) && $soldier->isAvailableByMaxes($this->shift) && $soldier->isAvailableByConstraints($this->shift->range) != Availability::NO - && $soldier->isAvailableByShifts($this->shift, $this->shift->inParallel) + && $soldier->isAvailableByShifts($this->shift) && $soldier->isAvailableBySpaces($this->shift->getShiftSpaces($soldier->shifts)); } diff --git a/app/Services/MaxData.php b/app/Services/MaxData.php index 5a3e006..f3adfee 100644 --- a/app/Services/MaxData.php +++ b/app/Services/MaxData.php @@ -44,9 +44,4 @@ public function calculatedRelativeLoad(): float return ($relativeLoad * 4 + $pointValue) / 5; } - - public function status(): string - { - return "{$this->used} / {$this->max}"; - } } diff --git a/app/Services/Range.php b/app/Services/Range.php index 90b008e..c6ff40b 100644 --- a/app/Services/Range.php +++ b/app/Services/Range.php @@ -62,11 +62,11 @@ public function getNightSpaces() public function getDayBeforeNight(): Range { - return new Range($this->start->copy()->subDay()->setTime(00, 0, 0), $this->start); + return new Range($this->start->copy()->subHours(12), $this->start); } public function getDayAfterNight(): Range { - return new Range($this->end, $this->end->copy()->addDay()->setTime(8, 0, 0)); + return new Range($this->end, $this->end->copy()->addHours(12)); } } diff --git a/app/Services/Schedule.php b/app/Services/Schedule.php index 6902399..b4c80e4 100644 --- a/app/Services/Schedule.php +++ b/app/Services/Schedule.php @@ -73,28 +73,26 @@ protected function addShiftsDataByTask(string $taskType, $shifts): void protected function getTaskWeight($shifts, $soldiers): array { $requiredPoints = collect($shifts)->sum('points'); - $requiredNights = collect($shifts)->sum(function (Shift $shift) { - return $shift->isNight; - }); - $requiredWeekends = collect($shifts)->sum(function (Shift $shift) { - return $shift->isWeekend; - }); + $requiredNights = collect($shifts)->filter(fn (Shift $shift) => $shift->isNight)->count(); + $requiredWeekends = collect($shifts) + ->filter(fn (Shift $shift) => $shift->isWeekend) + ->sum(fn (Shift $shift) => $shift->points); $requiredShifts = count($shifts); $availablePoints = collect($soldiers)->sum(function (Soldier $soldier) { - return $soldier->pointsMaxData->max; + return $soldier->pointsMaxData->remaining(); }); - $availableNights = collect($soldiers)->sum(function ($soldier) { - return $soldier->nightsMaxData->max; + $availableNights = collect($soldiers)->sum(function (Soldier $soldier) { + return $soldier->nightsMaxData->remaining(); }); - $availableWeekends = collect($soldiers)->sum(function ($soldier) { - return $soldier->weekendsMaxData->max; + $availableWeekends = collect($soldiers)->sum(function (Soldier $soldier) { + return $soldier->weekendsMaxData->remaining(); }); - $availableShifts = collect($soldiers)->sum(function ($soldier) { - return $soldier->shiftsMaxData->max; + $availableShifts = collect($soldiers)->sum(function (Soldier $soldier) { + return $soldier->shiftsMaxData->remaining(); }); $weight = collect([ diff --git a/app/Services/Shift.php b/app/Services/Shift.php index 1415c23..8520e3a 100644 --- a/app/Services/Shift.php +++ b/app/Services/Shift.php @@ -18,11 +18,13 @@ class Shift public $isWeekend; + public $isAlert; + public $inParallel; public $inParalelTasks; - public function __construct($id, string $taskType, $start, $end, float $points, bool $isNight, bool $isWeekend, $inParallel, $inParalelTasks) + public function __construct($id, string $taskType, $start, $end, float $points, bool $isNight, bool $isWeekend, bool $isAlert, $inParallel, $inParalelTasks = []) { $this->id = $id; $this->taskType = $taskType; @@ -30,6 +32,7 @@ public function __construct($id, string $taskType, $start, $end, float $points, $this->points = $points; $this->isNight = $isNight; $this->isWeekend = $isWeekend; + $this->isAlert = $isAlert; $this->inParallel = $inParallel; $this->inParalelTasks = $inParalelTasks; } @@ -83,9 +86,4 @@ function ($shift) use ($expectedDate): bool { } ) : false; } - - protected function name(): string - { - return $this->taskType.': from'.$this->range->start.' to'.$this->range->end; - } } diff --git a/app/Services/Soldier.php b/app/Services/Soldier.php index a138077..7fdbec0 100644 --- a/app/Services/Soldier.php +++ b/app/Services/Soldier.php @@ -4,8 +4,6 @@ use App\Enums\Availability; use App\Enums\Priority; -use App\Models\Shift as ShiftModel; -use App\Models\Task; class Soldier { @@ -19,6 +17,10 @@ class Soldier public $weekendsMaxData; + public $alertsMaxData; + + public $inParallelMaxData; + public $qualifications; public $constraints; @@ -27,13 +29,15 @@ class Soldier public $concurrentsShifts; - public function __construct($id, MaxData $maxPoints, MaxData $maxShifts, MaxData $maxNights, MaxData $maxWeekends, $qualifications, $constraints, $shifts = [], $concurrentsShifts = []) + public function __construct($id, MaxData $maxPoints, MaxData $maxShifts, MaxData $maxNights, MaxData $maxWeekends, MaxData $alertsMaxData, MaxData $inParallelMaxData, $qualifications, $constraints, $shifts = [], $concurrentsShifts = []) { $this->id = $id; $this->pointsMaxData = $maxPoints; $this->shiftsMaxData = $maxShifts; $this->nightsMaxData = $maxNights; $this->weekendsMaxData = $maxWeekends; + $this->alertsMaxData = $alertsMaxData; + $this->inParallelMaxData = $inParallelMaxData; $this->qualifications = collect($qualifications); $this->constraints = collect($constraints); $this->shifts = collect($shifts); @@ -48,13 +52,18 @@ public function isQualified(string $taskType): bool public function isAbleTake(Shift $shift, $spaces): bool { return $this->isAvailableByMaxes($shift) - && $this->isAvailableByShifts($shift, false) + && $this->isAvailableByShifts($shift) && $this->isAvailableBySpaces($spaces); } public function isAvailableByMaxes(Shift $shift): bool { - if (($shift->isWeekend && $this->weekendsMaxData->remaining() < $shift->points) || ($shift->isNight && $this->nightsMaxData->remaining() < $shift->points)) { + if ( + ($shift->isWeekend && $this->weekendsMaxData->remaining() < $shift->points) + || ($shift->isNight && $this->nightsMaxData->remaining() < 1) + || ($shift->isAlert && $this->alertsMaxData->remaining() < 1) + || ($shift->inParallel && $this->inParallelMaxData->remaining() < 1) + ) { return false; } @@ -62,15 +71,11 @@ public function isAvailableByMaxes(Shift $shift): bool && $this->shiftsMaxData->remaining() >= 1; } - public function isAvailableByShifts(Shift $shift, bool $inParallel): bool + public function isAvailableByShifts(Shift $shift): bool { - return $inParallel ? - ! $this->shifts->contains(function (Shift $soldierShift) use ($shift): bool { - return $soldierShift->range->isConflict($shift->range) && ! collect($shift->inParalelTasks)->contains($shift->taskType); - }) : - ! $this->shifts->contains(function (Shift $soldierShift) use ($shift) { - return $soldierShift->range->isConflict($shift->range); - }); + return ! $this->shifts->contains(function (Shift $soldierShift) use ($shift): bool { + return $soldierShift->range->isConflict($shift->range) && ! collect($shift->inParalelTasks)->contains($shift->taskType); + }); } public function isAvailableBySpaces($spaces): bool @@ -89,9 +94,7 @@ public function isAvailableBySpaces($spaces): bool public function isAvailableByConcurrentsShifts(Shift $shift) { return ! $this->concurrentsShifts->contains(function (Shift $concurrentsShift) use ($shift): bool { - $tasksInParallel = Task::find(ShiftModel::find($concurrentsShift->id)->task_id)->concurrent_tasks; - - return $concurrentsShift->range->isConflict($shift->range) && ! collect($tasksInParallel)->contains($shift->taskType); + return $concurrentsShift->range->isConflict($shift->range) && ! collect($concurrentsShift->inParalelTasks)->contains($shift->taskType); }); } @@ -125,12 +128,17 @@ public function assign(Shift $shift, $spaces): void if ($shift->isWeekend) { $this->weekendsMaxData->used += $shift->points; } elseif ($shift->isNight) { - $this->nightsMaxData->used += $shift->points; + $this->nightsMaxData->used += 1; + + } elseif ($shift->isAlert) { + $this->alertsMaxData->used += 1; + } elseif ($shift->inParallel) { + $this->inParallelMaxData->used += 1; } } protected function addSpaces($spaces) { - collect($spaces)->map(fn ($space) => $this->shifts->push(new Shift(0, '', $space->start, $space->end, 0, false, false, false, []))); + collect($spaces)->map(fn ($space) => $this->shifts->push(new Shift(0, '', $space->start, $space->end, 0, false, false, false, false, []))); } } diff --git a/database/factories/SoldierFactory.php b/database/factories/SoldierFactory.php index df371d6..2755e38 100644 --- a/database/factories/SoldierFactory.php +++ b/database/factories/SoldierFactory.php @@ -18,6 +18,8 @@ public function definition(): array 'max_shifts' => fake()->numberBetween(0, 50), 'max_nights' => fake()->numberBetween(0, 31), 'max_weekends' => fake()->numberBetween(0, 5), + 'max_alerts' => fake()->numberBetween(0, 31), + 'max_in_parallel' => fake()->numberBetween(0, 31), 'capacity' => fake()->numberBetween(0, 12) / 4.0, 'is_trainee' => fake()->boolean(), 'is_mabat' => fake()->boolean(), diff --git a/database/migrations/2025_03_17_090917_add_fields_to_soldiers_table.php b/database/migrations/2025_03_17_090917_add_fields_to_soldiers_table.php new file mode 100644 index 0000000..1c59761 --- /dev/null +++ b/database/migrations/2025_03_17_090917_add_fields_to_soldiers_table.php @@ -0,0 +1,31 @@ +integer('max_alerts')->nullable()->default(0); + $table->integer('max_in_parallel')->nullable()->default(0); + }); + + DB::table('soldiers')->whereNull('max_alerts')->update(['max_alerts' => 0]); + DB::table('soldiers')->whereNull('max_in_parallel')->update(['max_in_parallel' => 0]); + + } + + public function down(): void + { + Schema::table('soldiers', function (Blueprint $table) { + $table->dropColumn('max_alerts'); + $table->dropColumn('max_in_parallel'); + + }); + } +}; diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index a9c7c43..8777cf0 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -24,8 +24,8 @@ public function run(): void // Soldiers User::factory()->create([ - 'first_name' => 'newspace', - 'last_name' => 'newspace', + 'first_name' => 'name', + 'last_name' => 'family', 'password' => '1234567', 'userable_id' => Soldier::factory()->create([ 'qualifications' => [], @@ -39,82 +39,845 @@ public function run(): void ])->id, ])->assignRole(['soldier', 'manager']); - // User::factory()->create([ - // 'first_name' => 'מפקד', - // 'last_name' => 'מדור 1', - // 'password' => '1111111', - // 'userable_id' => Soldier::factory()->create([ - // 'qualifications' => [], - // 'capacity' => 10, - // 'max_weekends' => 10, - // 'max_shifts' => 10, - // 'max_nights' => 10, - // 'course' => 1, - // 'is_reservist' => false, - // 'constraints_limit' => ConstraintType::getLimit(), - // ])->id, - // ])->assignRole(['soldier']); - - // User::factory()->create([ - // 'first_name' => 'מפקד', - // 'last_name' => 'צוות 1', - // 'password' => '1111111', - // 'userable_id' => Soldier::factory()->create([ - // 'qualifications' => [], - // 'capacity' => 10, - // 'max_weekends' => 10, - // 'max_shifts' => 10, - // 'max_nights' => 10, - // 'course' => 1, - // 'is_reservist' => false, - // 'constraints_limit' => ConstraintType::getLimit(), - // ])->id, - // ])->assignRole(['soldier']); - - // User::factory()->create([ - // 'first_name' => 'חייל', - // 'last_name' => 'א', - // 'password' => '1111111', - // 'userable_id' => Soldier::factory()->create([ - // 'qualifications' => [], - // 'capacity' => 10, - // 'max_weekends' => 10, - // 'max_shifts' => 10, - // 'max_nights' => 10, - // 'course' => 1, - // 'is_reservist' => false, - // 'constraints_limit' => ConstraintType::getLimit(), - // ])->id, - // ])->assignRole(['soldier']); - // User::factory()->create([ - // 'first_name' => 'חייל', - // 'last_name' => 'ב', - // 'password' => '1111111', - // 'userable_id' => Soldier::factory()->create([ - // 'qualifications' => [], - // 'capacity' => 10, - // 'max_weekends' => 10, - // 'max_shifts' => 10, - // 'max_nights' => 10, - // 'course' => 1, - // 'is_reservist' => false, - // 'constraints_limit' => ConstraintType::getLimit(), - // ])->id, - // ])->assignRole(['soldier']); - // User::factory()->create([ - // 'first_name' => 'משבץ', - // 'last_name' => '1', - // 'password' => '1111111', - // 'userable_id' => Soldier::factory()->create([ - // 'qualifications' => [], - // 'capacity' => 10, - // 'max_weekends' => 10, - // 'max_shifts' => 10, - // 'max_nights' => 10, - // 'course' => 1, - // 'is_reservist' => false, - // 'constraints_limit' => ConstraintType::getLimit(), - // ])->id, - // ])->assignRole(['soldier','shifts-assignment']); + User::factory()->create([ + 'first_name' => 'meshabetz mishmarot', + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['hatasa', 'tazpit', 'shmira'], + 'capacity' => 6, + 'max_weekends' => 6, + 'max_shifts' => 7, + 'max_nights' => 6, + 'is_reservist' => false, + 'constraints_limit' => ConstraintType::getLimit(), + ])->id, + ])->assignRole(['soldier', 'shifts-assignment']); + + for ($i = 0; $i < 15; $i++) { + $user = User::factory()->create([ + 'first_name' => 'mefaked', + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['pikud'], + 'capacity' => 5.5, + 'max_weekends' => 5.5, + 'max_shifts' => 10, + 'max_nights' => 5, + 'course' => fake()->numberBetween(0, 5), + 'is_reservist' => false, + 'constraints_limit' => ConstraintType::getLimit(), + ])->id, + ])->assignRole('soldier'); + $this->createConstraints($user->id); + } + + for ($i = 0; $i < 40; $i++) { + $user = User::factory()->create([ + 'first_name' => 'chayal pashut', + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['hatasa', 'tazpit', 'shmira'], + 'capacity' => 6, + 'max_weekends' => 6, + 'max_shifts' => 7, + 'max_nights' => 6, + 'course' => fake()->numberBetween(0, 5), + 'is_reservist' => false, + 'constraints_limit' => ConstraintType::getLimit(), + ])->id, + ])->assignRole('soldier'); + $this->createConstraints($user->id); + } + + for ($i = 0; $i < 30; $i++) { + $user = User::factory()->create([ + 'first_name' => 'chayal beinony', + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['hatasa', 'tazpit', 'shmira', 'tichnun', 'pianuach'], + 'capacity' => 5.5, + 'max_weekends' => 5.5, + 'max_shifts' => 6, + 'max_nights' => 5, + 'course' => fake()->numberBetween(0, 5), + 'is_reservist' => false, + 'constraints_limit' => ConstraintType::getLimit(), + ])->id, + ])->assignRole('soldier'); + $this->createConstraints($user->id); + } + + for ($i = 0; $i < 25; $i++) { + $user = User::factory()->create([ + 'first_name' => 'chayal vatik', + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['hatasa', 'bakara', 'tichnun', 'pianuach'], + 'capacity' => 5, + 'max_weekends' => 5, + 'max_shifts' => 5, + 'max_nights' => 5, + 'course' => fake()->numberBetween(0, 5), + 'is_reservist' => false, + 'constraints_limit' => ConstraintType::getLimit(), + ])->id, + ])->assignRole('soldier'); + $this->createConstraints($user->id); + } + + for ($i = 0; $i < 10; $i++) { + $user = User::factory()->create([ + 'first_name' => 'menahalan', + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['minhal', 'bdikat ziud'], + 'capacity' => 0, + 'max_weekends' => 0, + 'max_shifts' => 4, + 'max_nights' => 0, + 'course' => fake()->numberBetween(0, 5), + 'is_reservist' => false, + 'constraints_limit' => ConstraintType::getLimit(), + ])->id, + ])->assignRole('soldier'); + $this->createConstraints($user->id); + } + + for ($i = 0; $i < 8; $i++) { + $user = User::factory()->create([ + 'first_name' => 'navat', + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => ['nivut'], + 'capacity' => 10, + 'max_weekends' => 10, + 'max_shifts' => 12, + 'max_nights' => 10, + 'course' => fake()->numberBetween(0, 5), + 'is_reservist' => false, + 'constraints_limit' => ConstraintType::getLimit(), + ])->id, + ])->assignRole('soldier'); + $this->createConstraints($user->id); + } + + // Tasks + // tichnun + Task::factory()->create([ + 'name' => 'tichnun א-ה בוקר', + 'start_hour' => '10:00:00', + 'duration' => 4, + 'parallel_weight' => 0, + 'type' => 'tichnun', + 'is_weekend' => false, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#b54b4b', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'tichnun א-ה לילה', + 'start_hour' => '02:00:00', + 'duration' => 4, + 'parallel_weight' => 1, + 'type' => 'tichnun', + 'is_weekend' => false, + 'is_night' => true, + 'in_parallel' => false, + 'color' => '#b54b4b', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'tichnun 1 סופ"ש', + 'start_hour' => '10:30:00', + 'duration' => 25, + 'parallel_weight' => 2.5, + 'type' => 'tichnun', + 'is_weekend' => true, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#b54b4b', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'tichnun 2 סופ"ש', + 'start_hour' => '11:10:00', + 'duration' => 25, + 'parallel_weight' => 2.5, + 'type' => 'tichnun', + 'is_weekend' => true, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#b54b4b', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + // bakara + Task::factory()->create([ + 'name' => 'bakara ארבע פעמים בשבוע בוקר', + 'start_hour' => '10:00:00', + 'duration' => 4, + 'parallel_weight' => 0, + 'type' => 'bakara', + 'is_weekend' => false, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#4bb5ac', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'bakara שלוש פעמים בשבוע לילה', + 'start_hour' => '03:20:00', + 'duration' => 4, + 'parallel_weight' => 1, + 'type' => 'bakara', + 'is_weekend' => false, + 'is_night' => true, + 'in_parallel' => false, + 'color' => '#4bb5ac', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'bakara סופ"ש', + 'start_hour' => '10:05:00', + 'duration' => 26, + 'parallel_weight' => 2.5, + 'type' => 'bakara', + 'is_weekend' => true, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#4bb5ac', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + // pikud + Task::factory()->create([ + 'name' => 'pikud 1 א-ה בוקר', + 'start_hour' => '10:00:00', + 'duration' => 4, + 'parallel_weight' => 0, + 'type' => 'pikud', + 'is_weekend' => false, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#4bb569', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'pikud 2 א-ה בוקר', + 'start_hour' => '10:00:00', + 'duration' => 4, + 'parallel_weight' => 0, + 'type' => 'pikud', + 'is_weekend' => false, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#4bb569', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'pikud 1 סופש', + 'start_hour' => '10:00:00', + 'duration' => 25, + 'parallel_weight' => 2.5, + 'type' => 'pikud', + 'is_weekend' => true, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#4bb569', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'pikud 2 סופש', + 'start_hour' => '10:00:00', + 'duration' => 25, + 'parallel_weight' => 2.5, + 'type' => 'pikud', + 'is_weekend' => true, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#4bb569', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'pikud לילה א-ה', + 'start_hour' => '03:00:00', + 'duration' => 4, + 'parallel_weight' => 1, + 'type' => 'pikud', + 'is_weekend' => false, + 'is_night' => true, + 'in_parallel' => false, + 'color' => '#4bb569', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + // minhal + Task::factory()->create([ + 'name' => 'minhal שלוש פעמים בשבוע בוקר', + 'start_hour' => '13:00:00', + 'duration' => 2, + 'parallel_weight' => 0, + 'type' => 'minhal', + 'is_weekend' => false, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#c5d649', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::TUESDAY, DaysInWeek::THURSDAY], + ]), + ]); + // hatasa + Task::factory()->create([ + 'name' => 'hatasa א-ה בוקר', + 'start_hour' => '09:00:00', + 'duration' => 6, + 'parallel_weight' => 0, + 'type' => 'hatasa', + 'is_weekend' => false, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#d649b5', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'hatasa א-ה לילה', + 'start_hour' => '02:00:00', + 'duration' => 6, + 'parallel_weight' => 1, + 'type' => 'hatasa', + 'is_weekend' => false, + 'is_night' => true, + 'in_parallel' => false, + 'color' => '#d649b5', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'hatasa 1 סופש', + 'start_hour' => '06:00:00', + 'duration' => 26, + 'parallel_weight' => 2.5, + 'type' => 'hatasa', + 'is_weekend' => true, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#d649b5', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'hatasa 2 סופש', + 'start_hour' => '06:00:00', + 'duration' => 26, + 'parallel_weight' => 2.5, + 'type' => 'hatasa', + 'is_weekend' => true, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#d649b5', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + // shmira + Task::factory()->create([ + 'name' => 'shmira א-ה בוקר', + 'start_hour' => '07:00:00', + 'duration' => 12, + 'parallel_weight' => 0, + 'type' => 'shmira', + 'is_weekend' => false, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#ee8559', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'shmira א-ה לילה', + 'start_hour' => '01:00:00', + 'duration' => 7, + 'parallel_weight' => 1, + 'type' => 'shmira', + 'is_weekend' => false, + 'is_night' => true, + 'in_parallel' => false, + 'color' => '#ee8559', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'shmira 1 סופש', + 'start_hour' => '06:00:00', + 'duration' => 26, + 'parallel_weight' => 2.5, + 'type' => 'shmira', + 'is_weekend' => true, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#ee8559', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'shmira סופש 2', + 'start_hour' => '06:00:00', + 'duration' => 26, + 'parallel_weight' => 2.5, + 'type' => 'shmira', + 'is_weekend' => true, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#ee8559', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + // pianuach + Task::factory()->create([ + 'name' => 'pianuach א-ה בוקר', + 'start_hour' => '07:00:00', + 'duration' => 7, + 'parallel_weight' => 0, + 'type' => 'pianuach', + 'is_weekend' => false, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#3574fb', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'pianuach א-ה לילה', + 'start_hour' => '01:00:00', + 'duration' => 5, + 'parallel_weight' => 1, + 'type' => 'pianuach', + 'is_weekend' => false, + 'is_night' => true, + 'in_parallel' => false, + 'color' => '#3574fb', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'pianuach 1 סופש', + 'start_hour' => '07:00:00', + 'duration' => 27, + 'parallel_weight' => 2.5, + 'type' => 'pianuach', + 'is_weekend' => true, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#3574fb', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'pianuach 2 סופש', + 'start_hour' => '07:00:00', + 'duration' => 27, + 'parallel_weight' => 2.5, + 'type' => 'pianuach', + 'is_weekend' => true, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#3574fb', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + // nivut + Task::factory()->create([ + 'name' => 'nivut א-ה בוקר', + 'start_hour' => '11:00:00', + 'duration' => 2, + 'parallel_weight' => 0, + 'type' => 'nivut', + 'is_weekend' => false, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#ed8d8d8b', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'nivut א-ה לילה', + 'start_hour' => '01:00:00', + 'duration' => 2.5, + 'parallel_weight' => 1, + 'type' => 'nivut', + 'is_weekend' => false, + 'is_night' => true, + 'in_parallel' => false, + 'color' => '#ed8d8d8b', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'nivut 1 סופש', + 'start_hour' => '11:00:00', + 'duration' => 28, + 'parallel_weight' => 2.5, + 'type' => 'nivut', + 'is_weekend' => true, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#ed8d8d8b', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'nivut 2 סופש', + 'start_hour' => '11:00:00', + 'duration' => 28, + 'parallel_weight' => 2.5, + 'type' => 'nivut', + 'is_weekend' => true, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#ed8d8d8b', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + // tazpit + Task::factory()->create([ + 'name' => 'tazpit א-ה בוקר 1', + 'start_hour' => '08:00:00', + 'duration' => 10, + 'parallel_weight' => 0, + 'type' => 'tazpit', + 'is_weekend' => false, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#77ff23', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'tazpit א-ה בוקר 2', + 'start_hour' => '08:00:00', + 'duration' => 10, + 'parallel_weight' => 0, + 'type' => 'tazpit', + 'is_weekend' => false, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#77ff23', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'tazpit א-ה לילה', + 'start_hour' => '01:30:00', + 'duration' => 6, + 'parallel_weight' => 1, + 'type' => 'tazpit', + 'is_weekend' => false, + 'is_night' => true, + 'in_parallel' => false, + 'color' => '#77ff23', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'tazpit 1 סופש', + 'start_hour' => '11:45:00', + 'duration' => 25, + 'parallel_weight' => 2.5, + 'type' => 'tazpit', + 'is_weekend' => true, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#77ff23', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + Task::factory()->create([ + 'name' => 'tazpit 2 סופש', + 'start_hour' => '11:00:00', + 'duration' => 25, + 'parallel_weight' => 2.5, + 'type' => 'tazpit', + 'is_weekend' => true, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#77ff23', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::FRIDAY], + ]), + ]); + // bdikat ziud + Task::factory()->create([ + 'name' => 'bdikat ziud פעם בשבוע בוקר', + 'start_hour' => '11:15:00', + 'duration' => 3.5, + 'parallel_weight' => 0, + 'type' => 'bdikat ziud', + 'is_weekend' => false, + 'is_night' => false, + 'in_parallel' => false, + 'color' => '#a7b2c3', + 'recurring' => collect([ + 'type' => RecurringType::WEEKLY, + 'days_in_week' => [DaysInWeek::SUNDAY], + ]), + ]); + } + + protected function createConstraints(int $userId) + { + for ($i = 0; $i < count(ConstraintType::cases()); $i++) { + $times = ConstraintType::getLimit()[ConstraintType::cases()[$i]->value] > 0 + ? random_int(0, ConstraintType::getLimit()[ConstraintType::cases()[$i]->value]) : + random_int(0, random_int(0, 5)); + for ($j = 0; $j < $times; $j++) { + $startDate = call_user_func([$this, ConstraintType::cases()[$i]->name]); + Constraint::factory()->create([ + 'soldier_id' => User::find($userId)->userable_id, + 'constraint_type' => ConstraintType::cases()[$i], + 'start_date' => $startDate, + 'end_date' => $startDate->copy()->addHours(random_int(1, 5)), + ]); + } + } + } + + protected function getDatesOfMonth($month = null) + { + $month ??= now()->addMonth(); + + return CarbonPeriod::between($month->startOfMonth(), $month->copy()->endOfMonth()); + } + + protected function getThursday() + { + $period = $this->getDatesOfMonth(); + + return collect($period) + ->filter( + fn ($date) => Carbon::parse($date)->isThursday() + )->all(); + } + + protected function getSunday() + { + $period = $this->getDatesOfMonth(); + + return collect($period) + ->filter( + fn ($date) => Carbon::parse($date)->isSunday() + )->all(); + } + + protected function getWeekends() + { + $period = $this->getDatesOfMonth(); + + return collect($period) + ->filter( + fn ($date) => Carbon::parse($date)->isFriday() || Carbon::parse($date)->isSaturday() + ) + ->all(); + } + + protected function getTime() + { + return Carbon::now()->subSeconds(rand(0, 30 * 24 * 60 * 60)); + } + + protected function getNightHour() + { + $time = $this->getTime(); + if ($time->hour < 20 && $time->hour >= 8) { + return $time->addHours(20 - $time->hour); + } + + return $time; + } + + protected function getMorningHour() + { + $time = $this->getTime(); + if ($time->hour < 8 || $time->hour > 19) { + return $time->addHours(12); + } + + return $time; + } + + protected function NOT_WEEKEND() + { + $time = $this->getTime(); + + return Carbon::parse(collect($this->getWeekends())->random()) + ->setTime( + $time->hour, + $time->minute, + $time->second + ); + } + + protected function LOW_PRIORITY_NOT_WEEKEND() + { + $time = $this->getTime(); + + return Carbon::parse(collect($this->getWeekends())->random()) + ->setTime( + $time->hour, + $time->minute, + $time->second + ); + } + + protected function NOT_TASK() + { + $time = $this->getTime(); + + return Carbon::parse(collect($this->getDatesOfMonth())->random()) + ->setTime( + $time->hour, + $time->minute, + $time->second + ); + } + + protected function LOW_PRIORITY_NOT_TASK() + { + $time = $this->getTime(); + + return Carbon::parse(collect($this->getDatesOfMonth())->random()) + ->setTime( + $time->hour, + $time->minute, + $time->second + ); + } + + protected function NOT_EVENING() + { + $date = collect($this->getDatesOfMonth())->random(); + $nightTime = $this->getNightHour(); + + return $date->copy()->setTime($nightTime->hour, $nightTime->minute, $nightTime->second); + } + + protected function NOT_THURSDAY_EVENING() + { + $date = collect($this->getThursday())->random(); + $nightTime = $this->getNightHour(); + + return $date->copy()->setTime($nightTime->hour, $nightTime->minute, $nightTime->second); + } + + protected function VACATION() + { + $time = $this->getTime(); + + return Carbon::parse(collect($this->getDatesOfMonth())->random()) + ->setTime( + $time->hour, + $time->minute, + $time->second + ); + } + + protected function MEDICAL() + { + $time = $this->getTime(); + + return Carbon::parse(collect($this->getDatesOfMonth())->random()) + ->setTime( + $time->hour, + $time->minute, + $time->second + ); + } + + protected function SCHOOL() + { + $time = $this->getTime(); + + return Carbon::parse(collect($this->getDatesOfMonth())->random()) + ->setTime( + $time->hour, + $time->minute, + $time->second + ); + } + + protected function NOT_SUNDAY_MORNING() + { + $date = collect($this->getSunday())->random(); + $morningTime = $this->getMorningHour(); + + return $date->copy()->setTime($morningTime->hour, $morningTime->minute, $morningTime->second); + } } -} \ No newline at end of file diff --git a/lang/he.json b/lang/he.json index 7bd651d..347c38d 100644 --- a/lang/he.json +++ b/lang/he.json @@ -39,7 +39,7 @@ "August":"אוגוסט", "April":"אפריל", "Assign soldier": "הקצה חייל", - "Assignment charts":" תרשימי שיבוץ", + "Assignment charts":"תרשימי שיבוץ", "Assigning the soldier to this shift is your sole responsibility!":"הקצאת החייל למשמרת זו הינה באחריותך בלבד! ", "Approve exchange shift request":"אישור בקשת החלפת משמרת", "Commander notification of approving exchange shift request for the requesting soldier": "שלום :requestingSoldierName!
בקשתך להחלפת משמרת :shiftAName
מ :shiftAStart עד :shiftAEnd
עם החייל :approvingSoldierName בעבור משמרת :shiftBName
מ :shiftBStart עד :shiftBEnd
אושרה וההחלפה בוצעה.
יום מוצלח!
:commanderName", @@ -146,6 +146,8 @@ "Max nights": "מקסימום לילות", "Max shifts": "מקסימום משמרות", "Max weekends": "מקסימום סופ'ש", + "Max alerts":"מקסימום כוננויות", + "Max in parallel":"מקסימום תורנויות", "Me": "אני", "Medical":"מחלה", "Members": "חברים", diff --git a/public/js/app/components/apexcharts.js b/public/js/app/components/apexcharts.js index 1c0f544..ed4a9a8 100644 --- a/public/js/app/components/apexcharts.js +++ b/public/js/app/components/apexcharts.js @@ -1,28 +1,62 @@ -var Ci=Object.create;var vt=Object.defineProperty;var Li=Object.getOwnPropertyDescriptor;var Pi=Object.getOwnPropertyNames;var Mi=Object.getPrototypeOf,Ii=Object.prototype.hasOwnProperty;var yt=(p,e)=>()=>(e||p((e={exports:{}}).exports,e),e.exports);var Ti=(p,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of Pi(e))!Ii.call(p,a)&&a!==t&&vt(p,a,{get:()=>e[a],enumerable:!(i=Li(e,a))||i.enumerable});return p};var zi=(p,e,t)=>(t=p!=null?Ci(Mi(p)):{},Ti(e||!p||!p.__esModule?vt(t,"default",{value:p,enumerable:!0}):t,p));var jt=yt((ot,We)=>{"use strict";function at(p,e){(e==null||e>p.length)&&(e=p.length);for(var t=0,i=Array(e);t>16,n=i>>8&255,o=255&i;return"#"+(16777216+65536*(Math.round((a-r)*s)+r)+256*(Math.round((a-n)*s)+n)+(Math.round((a-o)*s)+o)).toString(16).slice(1)}},{key:"shadeColor",value:function(e,t){return p.isColorHex(t)?this.shadeHexColor(e,t):this.shadeRGBColor(e,t)}}],[{key:"bind",value:function(e,t){return function(){return e.apply(t,arguments)}}},{key:"isObject",value:function(e){return e&&J(e)==="object"&&!Array.isArray(e)&&e!=null}},{key:"is",value:function(e,t){return Object.prototype.toString.call(t)==="[object "+e+"]"}},{key:"listToArray",value:function(e){var t,i=[];for(t=0;t1&&arguments[1]!==void 0?arguments[1]:2;return Number.isInteger(e)?e:parseFloat(e.toPrecision(t))}},{key:"randomId",value:function(){return(Math.random()+1).toString(36).substring(4)}},{key:"noExponents",value:function(e){var t=String(e).split(/[eE]/);if(t.length===1)return t[0];var i="",a=e<0?"-":"",s=t[0].replace(".",""),r=Number(t[1])+1;if(r<0){for(i=a+"0.";r++;)i+="0";return i+s.replace(/^-/,"")}for(r-=s.length;r--;)i+="0";return s+i}},{key:"getDimensions",value:function(e){var t=getComputedStyle(e,null),i=e.clientHeight,a=e.clientWidth;return i-=parseFloat(t.paddingTop)+parseFloat(t.paddingBottom),[a-=parseFloat(t.paddingLeft)+parseFloat(t.paddingRight),i]}},{key:"getBoundingClientRect",value:function(e){var t=e.getBoundingClientRect();return{top:t.top,right:t.right,bottom:t.bottom,left:t.left,width:e.clientWidth,height:e.clientHeight,x:t.left,y:t.top}}},{key:"getLargestStringFromArr",value:function(e){return e.reduce(function(t,i){return Array.isArray(i)&&(i=i.reduce(function(a,s){return a.length>s.length?a:s})),t.length>i.length?t:i},0)}},{key:"hexToRgba",value:function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"#999999",t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:.6;e.substring(0,1)!=="#"&&(e="#999999");var i=e.replace("#","");i=i.match(new RegExp("(.{"+i.length/3+"})","g"));for(var a=0;a1&&arguments[1]!==void 0?arguments[1]:"x",i=e.toString().slice();return i=i.replace(/[` ~!@#$%^&*()|+\=?;:'",.<>{}[\]\\/]/gi,t)}},{key:"negToZero",value:function(e){return e<0?0:e}},{key:"moveIndexInArray",value:function(e,t,i){if(i>=e.length)for(var a=i-e.length+1;a--;)e.push(void 0);return e.splice(i,0,e.splice(t,1)[0]),e}},{key:"extractNumber",value:function(e){return parseFloat(e.replace(/[^\d.]*/g,""))}},{key:"findAncestor",value:function(e,t){for(;(e=e.parentElement)&&!e.classList.contains(t););return e}},{key:"setELstyles",value:function(e,t){for(var i in t)t.hasOwnProperty(i)&&(e.style.key=t[i])}},{key:"preciseAddition",value:function(e,t){var i=(String(e).split(".")[1]||"").length,a=(String(t).split(".")[1]||"").length,s=Math.pow(10,Math.max(i,a));return(Math.round(e*s)+Math.round(t*s))/s}},{key:"isNumber",value:function(e){return!isNaN(e)&&parseFloat(Number(e))===e&&!isNaN(parseInt(e,10))}},{key:"isFloat",value:function(e){return Number(e)===e&&e%1!=0}},{key:"isSafari",value:function(){return/^((?!chrome|android).)*safari/i.test(navigator.userAgent)}},{key:"isFirefox",value:function(){return navigator.userAgent.toLowerCase().indexOf("firefox")>-1}},{key:"isMsEdge",value:function(){var e=window.navigator.userAgent,t=e.indexOf("Edge/");return t>0&&parseInt(e.substring(t+5,e.indexOf(".",t)),10)}},{key:"getGCD",value:function(e,t){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:7,a=Math.pow(10,i-Math.floor(Math.log10(Math.max(e,t))));for(e=Math.round(Math.abs(e)*a),t=Math.round(Math.abs(t)*a);t;){var s=t;t=e%t,e=s}return e/a}},{key:"getPrimeFactors",value:function(e){for(var t=[],i=2;e>=2;)e%i==0?(t.push(i),e/=i):i++;return t}},{key:"mod",value:function(e,t){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:7,a=Math.pow(10,i-Math.floor(Math.log10(Math.max(e,t))));return(e=Math.round(Math.abs(e)*a))%(t=Math.round(Math.abs(t)*a))/a}}]),p}(),ve=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w,this.setEasingFunctions()}return R(p,[{key:"setEasingFunctions",value:function(){var e;if(!this.w.globals.easing){switch(this.w.config.chart.animations.easing){case"linear":e="-";break;case"easein":e="<";break;case"easeout":e=">";break;case"easeinout":default:e="<>";break;case"swing":e=function(t){var i=1.70158;return(t-=1)*t*((i+1)*t+i)+1};break;case"bounce":e=function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375};break;case"elastic":e=function(t){return t===!!t?t:Math.pow(2,-10*t)*Math.sin((t-.075)*(2*Math.PI)/.3)+1}}this.w.globals.easing=e}}},{key:"animateLine",value:function(e,t,i,a){e.attr(t).animate(a).attr(i)}},{key:"animateMarker",value:function(e,t,i,a){e.attr({opacity:0}).animate(t,i).attr({opacity:1}).afterAll(function(){a()})}},{key:"animateRect",value:function(e,t,i,a,s){e.attr(t).animate(a).attr(i).afterAll(function(){return s()})}},{key:"animatePathsGradually",value:function(e){var t=e.el,i=e.realIndex,a=e.j,s=e.fill,r=e.pathFrom,n=e.pathTo,o=e.speed,h=e.delay,c=this.w,d=0;c.config.chart.animations.animateGradually.enabled&&(d=c.config.chart.animations.animateGradually.delay),c.config.chart.animations.dynamicAnimation.enabled&&c.globals.dataChanged&&c.config.chart.type!=="bar"&&(d=0),this.morphSVG(t,i,a,c.config.chart.type!=="line"||c.globals.comboCharts?s:"stroke",r,n,o,h*d)}},{key:"showDelayedElements",value:function(){this.w.globals.delayedElements.forEach(function(e){var t=e.el;t.classList.remove("apexcharts-element-hidden"),t.classList.add("apexcharts-hidden-element-shown")})}},{key:"animationCompleted",value:function(e){var t=this.w;t.globals.animationEnded||(t.globals.animationEnded=!0,this.showDelayedElements(),typeof t.config.chart.events.animationEnd=="function"&&t.config.chart.events.animationEnd(this.ctx,{el:e,w:t}))}},{key:"morphSVG",value:function(e,t,i,a,s,r,n,o){var h=this,c=this.w;s||(s=e.attr("pathFrom")),r||(r=e.attr("pathTo"));var d=function(g){return c.config.chart.type==="radar"&&(n=1),"M 0 ".concat(c.globals.gridHeight)};(!s||s.indexOf("undefined")>-1||s.indexOf("NaN")>-1)&&(s=d()),(!r||r.indexOf("undefined")>-1||r.indexOf("NaN")>-1)&&(r=d()),c.globals.shouldAnimate||(n=1),e.plot(s).animate(1,c.globals.easing,o).plot(s).animate(n,c.globals.easing,o).plot(r).afterAll(function(){P.isNumber(i)?i===c.globals.series[c.globals.maxValsInArrayIndex].length-2&&c.globals.shouldAnimate&&h.animationCompleted(e):a!=="none"&&c.globals.shouldAnimate&&(!c.globals.comboCharts&&t===c.globals.series.length-1||c.globals.comboCharts)&&h.animationCompleted(e),h.showDelayedElements()})}}]),p}(),ie=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"getDefaultFilter",value:function(e,t){var i=this.w;e.unfilter(!0),new window.SVG.Filter().size("120%","180%","-5%","-40%"),i.config.states.normal.filter!=="none"?this.applyFilter(e,t,i.config.states.normal.filter.type,i.config.states.normal.filter.value):i.config.chart.dropShadow.enabled&&this.dropShadow(e,i.config.chart.dropShadow,t)}},{key:"addNormalFilter",value:function(e,t){var i=this.w;i.config.chart.dropShadow.enabled&&!e.node.classList.contains("apexcharts-marker")&&this.dropShadow(e,i.config.chart.dropShadow,t)}},{key:"addLightenFilter",value:function(e,t,i){var a=this,s=this.w,r=i.intensity;e.unfilter(!0),new window.SVG.Filter,e.filter(function(n){var o=s.config.chart.dropShadow;(o.enabled?a.addShadow(n,t,o):n).componentTransfer({rgb:{type:"linear",slope:1.5,intercept:r}})}),e.filterer.node.setAttribute("filterUnits","userSpaceOnUse"),this._scaleFilterSize(e.filterer.node)}},{key:"addDarkenFilter",value:function(e,t,i){var a=this,s=this.w,r=i.intensity;e.unfilter(!0),new window.SVG.Filter,e.filter(function(n){var o=s.config.chart.dropShadow;(o.enabled?a.addShadow(n,t,o):n).componentTransfer({rgb:{type:"linear",slope:r}})}),e.filterer.node.setAttribute("filterUnits","userSpaceOnUse"),this._scaleFilterSize(e.filterer.node)}},{key:"applyFilter",value:function(e,t,i){var a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:.5;switch(i){case"none":this.addNormalFilter(e,t);break;case"lighten":this.addLightenFilter(e,t,{intensity:a});break;case"darken":this.addDarkenFilter(e,t,{intensity:a})}}},{key:"addShadow",value:function(e,t,i){var a,s=this.w,r=i.blur,n=i.top,o=i.left,h=i.color,c=i.opacity;if(((a=s.config.chart.dropShadow.enabledOnSeries)===null||a===void 0?void 0:a.length)>0&&s.config.chart.dropShadow.enabledOnSeries.indexOf(t)===-1)return e;var d=e.flood(Array.isArray(h)?h[t]:h,c).composite(e.sourceAlpha,"in").offset(o,n).gaussianBlur(r).merge(e.source);return e.blend(e.source,d)}},{key:"dropShadow",value:function(e,t){var i,a,s=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,r=t.top,n=t.left,o=t.blur,h=t.color,c=t.opacity,d=t.noUserSpaceOnUse,g=this.w;return e.unfilter(!0),P.isMsEdge()&&g.config.chart.type==="radialBar"||((i=g.config.chart.dropShadow.enabledOnSeries)===null||i===void 0?void 0:i.length)>0&&((a=g.config.chart.dropShadow.enabledOnSeries)===null||a===void 0?void 0:a.indexOf(s))===-1||(h=Array.isArray(h)?h[s]:h,e.filter(function(f){var x=null;x=P.isSafari()||P.isFirefox()||P.isMsEdge()?f.flood(h,c).composite(f.sourceAlpha,"in").offset(n,r).gaussianBlur(o):f.flood(h,c).composite(f.sourceAlpha,"in").offset(n,r).gaussianBlur(o).merge(f.source),f.blend(f.source,x)}),d||e.filterer.node.setAttribute("filterUnits","userSpaceOnUse"),this._scaleFilterSize(e.filterer.node)),e}},{key:"setSelectionFilter",value:function(e,t,i){var a=this.w;if(a.globals.selectedDataPoints[t]!==void 0&&a.globals.selectedDataPoints[t].indexOf(i)>-1){e.node.setAttribute("selected",!0);var s=a.config.states.active.filter;s!=="none"&&this.applyFilter(e,t,s.type,s.value)}}},{key:"_scaleFilterSize",value:function(e){(function(t){for(var i in t)t.hasOwnProperty(i)&&e.setAttribute(i,t[i])})({width:"200%",height:"200%",x:"-50%",y:"-50%"})}}]),p}(),X=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"roundPathCorners",value:function(e,t){function i(S,L,C){var I=L.x-S.x,z=L.y-S.y,M=Math.sqrt(I*I+z*z);return a(S,L,Math.min(1,C/M))}function a(S,L,C){return{x:S.x+(L.x-S.x)*C,y:S.y+(L.y-S.y)*C}}function s(S,L){S.length>2&&(S[S.length-2]=L.x,S[S.length-1]=L.y)}function r(S){return{x:parseFloat(S[S.length-2]),y:parseFloat(S[S.length-1])}}e.indexOf("NaN")>-1&&(e="");var n=e.split(/[,\s]/).reduce(function(S,L){var C=L.match("([a-zA-Z])(.+)");return C?(S.push(C[1]),S.push(C[2])):S.push(L),S},[]).reduce(function(S,L){return parseFloat(L)==L&&S.length?S[S.length-1].push(L):S.push([L]),S},[]),o=[];if(n.length>1){var h=r(n[0]),c=null;n[n.length-1][0]=="Z"&&n[0].length>2&&(c=["L",h.x,h.y],n[n.length-1]=c),o.push(n[0]);for(var d=1;d2&&f[0]=="L"&&x.length>2&&x[0]=="L"){var b,v,y=r(g),w=r(f),l=r(x);b=i(w,y,t),v=i(w,l,t),s(f,b),f.origPoint=w,o.push(f);var u=a(b,w,.5),m=a(w,v,.5),A=["C",u.x,u.y,m.x,m.y,v.x,v.y];A.origPoint=w,o.push(A)}else o.push(f)}if(c){var k=r(o[o.length-1]);o.push(["Z"]),s(o[0],k)}}else o=n;return o.reduce(function(S,L){return S+L.join(" ")+" "},"")}},{key:"drawLine",value:function(e,t,i,a){var s=arguments.length>4&&arguments[4]!==void 0?arguments[4]:"#a8a8a8",r=arguments.length>5&&arguments[5]!==void 0?arguments[5]:0,n=arguments.length>6&&arguments[6]!==void 0?arguments[6]:null,o=arguments.length>7&&arguments[7]!==void 0?arguments[7]:"butt";return this.w.globals.dom.Paper.line().attr({x1:e,y1:t,x2:i,y2:a,stroke:s,"stroke-dasharray":r,"stroke-width":n,"stroke-linecap":o})}},{key:"drawRect",value:function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0,t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,s=arguments.length>4&&arguments[4]!==void 0?arguments[4]:0,r=arguments.length>5&&arguments[5]!==void 0?arguments[5]:"#fefefe",n=arguments.length>6&&arguments[6]!==void 0?arguments[6]:1,o=arguments.length>7&&arguments[7]!==void 0?arguments[7]:null,h=arguments.length>8&&arguments[8]!==void 0?arguments[8]:null,c=arguments.length>9&&arguments[9]!==void 0?arguments[9]:0,d=this.w.globals.dom.Paper.rect();return d.attr({x:e,y:t,width:i>0?i:0,height:a>0?a:0,rx:s,ry:s,opacity:n,"stroke-width":o!==null?o:0,stroke:h!==null?h:"none","stroke-dasharray":c}),d.node.setAttribute("fill",r),d}},{key:"drawPolygon",value:function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"#e1e1e1",i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"none";return this.w.globals.dom.Paper.polygon(e).attr({fill:a,stroke:t,"stroke-width":i})}},{key:"drawCircle",value:function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;e<0&&(e=0);var i=this.w.globals.dom.Paper.circle(2*e);return t!==null&&i.attr(t),i}},{key:"drawPath",value:function(e){var t=e.d,i=t===void 0?"":t,a=e.stroke,s=a===void 0?"#a8a8a8":a,r=e.strokeWidth,n=r===void 0?1:r,o=e.fill,h=e.fillOpacity,c=h===void 0?1:h,d=e.strokeOpacity,g=d===void 0?1:d,f=e.classes,x=e.strokeLinecap,b=x===void 0?null:x,v=e.strokeDashArray,y=v===void 0?0:v,w=this.w;return b===null&&(b=w.config.stroke.lineCap),(i.indexOf("undefined")>-1||i.indexOf("NaN")>-1)&&(i="M 0 ".concat(w.globals.gridHeight)),w.globals.dom.Paper.path(i).attr({fill:o,"fill-opacity":c,stroke:s,"stroke-opacity":g,"stroke-linecap":b,"stroke-width":n,"stroke-dasharray":y,class:f})}},{key:"group",value:function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:null,t=this.w.globals.dom.Paper.group();return e!==null&&t.attr(e),t}},{key:"move",value:function(e,t){var i=["M",e,t].join(" ");return i}},{key:"line",value:function(e,t){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:null,a=null;return i===null?a=[" L",e,t].join(" "):i==="H"?a=[" H",e].join(" "):i==="V"&&(a=[" V",t].join(" ")),a}},{key:"curve",value:function(e,t,i,a,s,r){var n=["C",e,t,i,a,s,r].join(" ");return n}},{key:"quadraticCurve",value:function(e,t,i,a){return["Q",e,t,i,a].join(" ")}},{key:"arc",value:function(e,t,i,a,s,r,n){var o="A";arguments.length>7&&arguments[7]!==void 0&&arguments[7]&&(o="a");var h=[o,e,t,i,a,s,r,n].join(" ");return h}},{key:"renderPaths",value:function(e){var t,i=e.j,a=e.realIndex,s=e.pathFrom,r=e.pathTo,n=e.stroke,o=e.strokeWidth,h=e.strokeLinecap,c=e.fill,d=e.animationDelay,g=e.initialSpeed,f=e.dataChangeSpeed,x=e.className,b=e.shouldClipToGrid,v=b===void 0||b,y=e.bindEventsOnPaths,w=y===void 0||y,l=e.drawShadow,u=l===void 0||l,m=this.w,A=new ie(this.ctx),k=new ve(this.ctx),S=this.w.config.chart.animations.enabled,L=S&&this.w.config.chart.animations.dynamicAnimation.enabled,C=!!(S&&!m.globals.resized||L&&m.globals.dataChanged&&m.globals.shouldAnimate);C?t=s:(t=r,m.globals.animationEnded=!0);var I=m.config.stroke.dashArray,z=0;z=Array.isArray(I)?I[a]:m.config.stroke.dashArray;var M=this.drawPath({d:t,stroke:n,strokeWidth:o,fill:c,fillOpacity:1,classes:x,strokeLinecap:h,strokeDashArray:z});if(M.attr("index",a),v&&M.attr({"clip-path":"url(#gridRectMask".concat(m.globals.cuid,")")}),m.config.states.normal.filter.type!=="none")A.getDefaultFilter(M,a);else if(m.config.chart.dropShadow.enabled&&u){var T=m.config.chart.dropShadow;A.dropShadow(M,T,a)}w&&(M.node.addEventListener("mouseenter",this.pathMouseEnter.bind(this,M)),M.node.addEventListener("mouseleave",this.pathMouseLeave.bind(this,M)),M.node.addEventListener("mousedown",this.pathMouseDown.bind(this,M))),M.attr({pathTo:r,pathFrom:s});var E={el:M,j:i,realIndex:a,pathFrom:s,pathTo:r,fill:c,strokeWidth:o,delay:d};return!S||m.globals.resized||m.globals.dataChanged?!m.globals.resized&&m.globals.dataChanged||k.showDelayedElements():k.animatePathsGradually(Y(Y({},E),{},{speed:g})),m.globals.dataChanged&&L&&C&&k.animatePathsGradually(Y(Y({},E),{},{speed:f})),M}},{key:"drawPattern",value:function(e,t,i){var a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"#a8a8a8",s=arguments.length>4&&arguments[4]!==void 0?arguments[4]:0;return this.w.globals.dom.Paper.pattern(t,i,function(r){e==="horizontalLines"?r.line(0,0,i,0).stroke({color:a,width:s+1}):e==="verticalLines"?r.line(0,0,0,t).stroke({color:a,width:s+1}):e==="slantedLines"?r.line(0,0,t,i).stroke({color:a,width:s}):e==="squares"?r.rect(t,i).fill("none").stroke({color:a,width:s}):e==="circles"&&r.circle(t).fill("none").stroke({color:a,width:s})})}},{key:"drawGradient",value:function(e,t,i,a,s){var r,n=arguments.length>5&&arguments[5]!==void 0?arguments[5]:null,o=arguments.length>6&&arguments[6]!==void 0?arguments[6]:null,h=arguments.length>7&&arguments[7]!==void 0?arguments[7]:null,c=arguments.length>8&&arguments[8]!==void 0?arguments[8]:0,d=this.w;t.length<9&&t.indexOf("#")===0&&(t=P.hexToRgba(t,a)),i.length<9&&i.indexOf("#")===0&&(i=P.hexToRgba(i,s));var g=0,f=1,x=1,b=null;o!==null&&(g=o[0]!==void 0?o[0]/100:0,f=o[1]!==void 0?o[1]/100:1,x=o[2]!==void 0?o[2]/100:1,b=o[3]!==void 0?o[3]/100:null);var v=!(d.config.chart.type!=="donut"&&d.config.chart.type!=="pie"&&d.config.chart.type!=="polarArea"&&d.config.chart.type!=="bubble");if(r=h===null||h.length===0?d.globals.dom.Paper.gradient(v?"radial":"linear",function(l){l.at(g,t,a),l.at(f,i,s),l.at(x,i,s),b!==null&&l.at(b,t,a)}):d.globals.dom.Paper.gradient(v?"radial":"linear",function(l){(Array.isArray(h[c])?h[c]:h).forEach(function(u){l.at(u.offset/100,u.color,u.opacity)})}),v){var y=d.globals.gridWidth/2,w=d.globals.gridHeight/2;d.config.chart.type!=="bubble"?r.attr({gradientUnits:"userSpaceOnUse",cx:y,cy:w,r:n}):r.attr({cx:.5,cy:.5,r:.8,fx:.2,fy:.2})}else e==="vertical"?r.from(0,0).to(0,1):e==="diagonal"?r.from(0,0).to(1,1):e==="horizontal"?r.from(0,1).to(1,1):e==="diagonal2"&&r.from(1,0).to(0,1);return r}},{key:"getTextBasedOnMaxWidth",value:function(e){var t=e.text,i=e.maxWidth,a=e.fontSize,s=e.fontFamily,r=this.getTextRects(t,a,s),n=r.width/t.length,o=Math.floor(i/n);return i-1){var o=i.globals.selectedDataPoints[s].indexOf(r);i.globals.selectedDataPoints[s].splice(o,1)}}else{if(!i.config.states.active.allowMultipleDataPointsSelection&&i.globals.selectedDataPoints.length>0){i.globals.selectedDataPoints=[];var h=i.globals.dom.Paper.select(".apexcharts-series path").members,c=i.globals.dom.Paper.select(".apexcharts-series circle, .apexcharts-series rect").members,d=function(x){Array.prototype.forEach.call(x,function(b){b.node.setAttribute("selected","false"),a.getDefaultFilter(b,s)})};d(h),d(c)}e.node.setAttribute("selected","true"),n="true",i.globals.selectedDataPoints[s]===void 0&&(i.globals.selectedDataPoints[s]=[]),i.globals.selectedDataPoints[s].push(r)}if(n==="true"){var g=i.config.states.active.filter;if(g!=="none")a.applyFilter(e,s,g.type,g.value);else if(i.config.states.hover.filter!=="none"&&!i.globals.isTouchDevice){var f=i.config.states.hover.filter;a.applyFilter(e,s,f.type,f.value)}}else i.config.states.active.filter.type!=="none"&&(i.config.states.hover.filter.type==="none"||i.globals.isTouchDevice?a.getDefaultFilter(e,s):(f=i.config.states.hover.filter,a.applyFilter(e,s,f.type,f.value)));typeof i.config.chart.events.dataPointSelection=="function"&&i.config.chart.events.dataPointSelection(t,this.ctx,{selectedDataPoints:i.globals.selectedDataPoints,seriesIndex:s,dataPointIndex:r,w:i}),t&&this.ctx.events.fireEvent("dataPointSelection",[t,this.ctx,{selectedDataPoints:i.globals.selectedDataPoints,seriesIndex:s,dataPointIndex:r,w:i}])}},{key:"rotateAroundCenter",value:function(e){var t={};return e&&typeof e.getBBox=="function"&&(t=e.getBBox()),{x:t.x+t.width/2,y:t.y+t.height/2}}},{key:"getTextRects",value:function(e,t,i,a){var s=!(arguments.length>4&&arguments[4]!==void 0)||arguments[4],r=this.w,n=this.drawText({x:-200,y:-200,text:e,textAnchor:"start",fontSize:t,fontFamily:i,foreColor:"#fff",opacity:0});a&&n.attr("transform",a),r.globals.dom.Paper.add(n);var o=n.bbox();return s||(o=n.node.getBoundingClientRect()),n.remove(),{width:o.width,height:o.height}}},{key:"placeTextWithEllipsis",value:function(e,t,i){if(typeof e.getComputedTextLength=="function"&&(e.textContent=t,t.length>0&&e.getComputedTextLength()>=i/1.1)){for(var a=t.length-3;a>0;a-=3)if(e.getSubStringLength(0,a)<=i/1.1)return void(e.textContent=t.substring(0,a)+"...");e.textContent="."}}}],[{key:"setAttrs",value:function(e,t){for(var i in t)t.hasOwnProperty(i)&&e.setAttribute(i,t[i])}}]),p}(),$=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"getStackedSeriesTotals",value:function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],t=this.w,i=[];if(t.globals.series.length===0)return i;for(var a=0;a0&&arguments[0]!==void 0?arguments[0]:null;return e===null?this.w.config.series.reduce(function(t,i){return t+i},0):this.w.globals.series[e].reduce(function(t,i){return t+i},0)}},{key:"getStackedSeriesTotalsByGroups",value:function(){var e=this,t=this.w,i=[];return t.globals.seriesGroups.forEach(function(a){var s=[];t.config.series.forEach(function(n,o){a.indexOf(t.globals.seriesNames[o])>-1&&s.push(o)});var r=t.globals.series.map(function(n,o){return s.indexOf(o)===-1?o:-1}).filter(function(n){return n!==-1});i.push(e.getStackedSeriesTotals(r))}),i}},{key:"setSeriesYAxisMappings",value:function(){var e=this.w.globals,t=this.w.config,i=[],a=[],s=[],r=e.series.length>t.yaxis.length||t.yaxis.some(function(d){return Array.isArray(d.seriesName)});t.series.forEach(function(d,g){s.push(g),a.push(null)}),t.yaxis.forEach(function(d,g){i[g]=[]});var n=[];t.yaxis.forEach(function(d,g){var f=!1;if(d.seriesName){var x=[];Array.isArray(d.seriesName)?x=d.seriesName:x.push(d.seriesName),x.forEach(function(b){t.series.forEach(function(v,y){if(v.name===b){var w=y;g===y||r?!r||s.indexOf(y)>-1?i[g].push([g,y]):console.warn("Series '"+v.name+"' referenced more than once in what looks like the new style. That is, when using either seriesName: [], or when there are more series than yaxes."):(i[y].push([y,g]),w=g),f=!0,(w=s.indexOf(w))!==-1&&s.splice(w,1)}})})}f||n.push(g)}),i=i.map(function(d,g){var f=[];return d.forEach(function(x){a[x[1]]=x[0],f.push(x[1])}),f});for(var o=t.yaxis.length-1,h=0;h0&&arguments[0]!==void 0?arguments[0]:null;return(e===null?this.w.config.series.filter(function(t){return t!==null}):this.w.config.series[e].data.filter(function(t){return t!==null})).length===0}},{key:"seriesHaveSameValues",value:function(e){return this.w.globals.series[e].every(function(t,i,a){return t===a[0]})}},{key:"getCategoryLabels",value:function(e){var t=this.w,i=e.slice();return t.config.xaxis.convertedCatToNumeric&&(i=e.map(function(a,s){return t.config.xaxis.labels.formatter(a-t.globals.minX+1)})),i}},{key:"getLargestSeries",value:function(){var e=this.w;e.globals.maxValsInArrayIndex=e.globals.series.map(function(t){return t.length}).indexOf(Math.max.apply(Math,e.globals.series.map(function(t){return t.length})))}},{key:"getLargestMarkerSize",value:function(){var e=this.w,t=0;return e.globals.markers.size.forEach(function(i){t=Math.max(t,i)}),e.config.markers.discrete&&e.config.markers.discrete.length&&e.config.markers.discrete.forEach(function(i){t=Math.max(t,i.size)}),t>0&&(t+=e.config.markers.hover.sizeOffset+1),e.globals.markers.largestSize=t,t}},{key:"getSeriesTotals",value:function(){var e=this.w;e.globals.seriesTotals=e.globals.series.map(function(t,i){var a=0;if(Array.isArray(t))for(var s=0;se&&i.globals.seriesX[s][n]0){var x=function(v,y){var w=s.config.yaxis[s.globals.seriesYAxisReverseMap[y]],l=v<0?-1:1;return v=Math.abs(v),w.logarithmic&&(v=a.getBaseLog(w.logBase,v)),-l*v/n[y]};if(r.isMultipleYAxis){h=[];for(var b=0;b0&&t.forEach(function(n){var o=[],h=[];e.i.forEach(function(c,d){s.config.series[c].group===n&&(o.push(e.series[d]),h.push(c))}),o.length>0&&r.push(a.draw(o,i,h))}),r}}],[{key:"checkComboSeries",value:function(e,t){var i=!1,a=0,s=0;return t===void 0&&(t="line"),e.length&&e[0].type!==void 0&&e.forEach(function(r){r.type!=="bar"&&r.type!=="column"&&r.type!=="candlestick"&&r.type!=="boxPlot"||a++,r.type!==void 0&&r.type!==t&&s++}),s>0&&(i=!0),{comboBarCount:a,comboCharts:i}}},{key:"extendArrayProps",value:function(e,t,i){var a,s,r,n,o,h;return(a=t)!==null&&a!==void 0&&a.yaxis&&(t=e.extendYAxis(t,i)),(s=t)!==null&&s!==void 0&&s.annotations&&(t.annotations.yaxis&&(t=e.extendYAxisAnnotations(t)),(r=t)!==null&&r!==void 0&&(n=r.annotations)!==null&&n!==void 0&&n.xaxis&&(t=e.extendXAxisAnnotations(t)),(o=t)!==null&&o!==void 0&&(h=o.annotations)!==null&&h!==void 0&&h.points&&(t=e.extendPointAnnotations(t))),t}}]),p}(),Be=function(){function p(e){F(this,p),this.w=e.w,this.annoCtx=e}return R(p,[{key:"setOrientations",value:function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null,i=this.w;if(e.label.orientation==="vertical"){var a=t!==null?t:0,s=i.globals.dom.baseEl.querySelector(".apexcharts-xaxis-annotations .apexcharts-xaxis-annotation-label[rel='".concat(a,"']"));if(s!==null){var r=s.getBoundingClientRect();s.setAttribute("x",parseFloat(s.getAttribute("x"))-r.height+4),e.label.position==="top"?s.setAttribute("y",parseFloat(s.getAttribute("y"))+r.width):s.setAttribute("y",parseFloat(s.getAttribute("y"))-r.width);var n=this.annoCtx.graphics.rotateAroundCenter(s),o=n.x,h=n.y;s.setAttribute("transform","rotate(-90 ".concat(o," ").concat(h,")"))}}}},{key:"addBackgroundToAnno",value:function(e,t){var i=this.w;if(!e||t.label.text===void 0||t.label.text!==void 0&&!String(t.label.text).trim())return null;var a=i.globals.dom.baseEl.querySelector(".apexcharts-grid").getBoundingClientRect(),s=e.getBoundingClientRect(),r=t.label.style.padding.left,n=t.label.style.padding.right,o=t.label.style.padding.top,h=t.label.style.padding.bottom;t.label.orientation==="vertical"&&(o=t.label.style.padding.left,h=t.label.style.padding.right,r=t.label.style.padding.top,n=t.label.style.padding.bottom);var c=s.left-a.left-r,d=s.top-a.top-o,g=this.annoCtx.graphics.drawRect(c-i.globals.barPadForNumericAxis,d,s.width+r+n,s.height+o+h,t.label.borderRadius,t.label.style.background,1,t.label.borderWidth,t.label.borderColor,0);return t.id&&g.node.classList.add(t.id),g}},{key:"annotationsBackground",value:function(){var e=this,t=this.w,i=function(a,s,r){var n=t.globals.dom.baseEl.querySelector(".apexcharts-".concat(r,"-annotations .apexcharts-").concat(r,"-annotation-label[rel='").concat(s,"']"));if(n){var o=n.parentNode,h=e.addBackgroundToAnno(n,a);h&&(o.insertBefore(h.node,n),a.label.mouseEnter&&h.node.addEventListener("mouseenter",a.label.mouseEnter.bind(e,a)),a.label.mouseLeave&&h.node.addEventListener("mouseleave",a.label.mouseLeave.bind(e,a)),a.label.click&&h.node.addEventListener("click",a.label.click.bind(e,a)))}};t.config.annotations.xaxis.map(function(a,s){i(a,s,"xaxis")}),t.config.annotations.yaxis.map(function(a,s){i(a,s,"yaxis")}),t.config.annotations.points.map(function(a,s){i(a,s,"point")})}},{key:"getY1Y2",value:function(e,t){var i,a=e==="y1"?t.y:t.y2,s=!1,r=this.w;if(this.annoCtx.invertAxis){var n=r.globals.labels;r.config.xaxis.convertedCatToNumeric&&(n=r.globals.categoryLabels);var o=n.indexOf(a),h=r.globals.dom.baseEl.querySelector(".apexcharts-yaxis-texts-g text:nth-child("+(o+1)+")");i=h?parseFloat(h.getAttribute("y")):(r.globals.gridHeight/n.length-1)*(o+1)-r.globals.barHeight,t.seriesIndex!==void 0&&r.globals.barHeight&&(i=i-r.globals.barHeight/2*(r.globals.series.length-1)+r.globals.barHeight*t.seriesIndex)}else{var c,d=r.globals.seriesYAxisMap[t.yAxisIndex][0];r.config.yaxis[t.yAxisIndex].logarithmic?c=(a=new $(this.annoCtx.ctx).getLogVal(r.config.yaxis[t.yAxisIndex].logBase,a,d))/r.globals.yLogRatio[d]:c=(a-r.globals.minYArr[d])/(r.globals.yRange[d]/r.globals.gridHeight),c>r.globals.gridHeight?(c=r.globals.gridHeight,s=!0):c<0&&(c=0,s=!0),i=r.globals.gridHeight-c,!t.marker||t.y!==void 0&&t.y!==null||(i=0),r.config.yaxis[t.yAxisIndex]&&r.config.yaxis[t.yAxisIndex].reversed&&(i=c)}return typeof a=="string"&&a.indexOf("px")>-1&&(i=parseFloat(a)),{yP:i,clipped:s}}},{key:"getX1X2",value:function(e,t){var i,a=e==="x1"?t.x:t.x2,s=this.w,r=this.annoCtx.invertAxis?s.globals.minY:s.globals.minX,n=this.annoCtx.invertAxis?s.globals.maxY:s.globals.maxX,o=this.annoCtx.invertAxis?s.globals.yRange[0]:s.globals.xRange,h=!1;return i=this.annoCtx.inversedReversedAxis?(n-a)/(o/s.globals.gridWidth):(a-r)/(o/s.globals.gridWidth),s.config.xaxis.type!=="category"&&!s.config.xaxis.convertedCatToNumeric||this.annoCtx.invertAxis||s.globals.dataFormatXNumeric||s.config.chart.sparkline.enabled||(i=this.getStringX(a)),typeof a=="string"&&a.indexOf("px")>-1&&(i=parseFloat(a)),a==null&&t.marker&&(i=s.globals.gridWidth),t.seriesIndex!==void 0&&s.globals.barWidth&&!this.annoCtx.invertAxis&&(i=i-s.globals.barWidth/2*(s.globals.series.length-1)+s.globals.barWidth*t.seriesIndex),i>s.globals.gridWidth?(i=s.globals.gridWidth,h=!0):i<0&&(i=0,h=!0),{x:i,clipped:h}}},{key:"getStringX",value:function(e){var t=this.w,i=e;t.config.xaxis.convertedCatToNumeric&&t.globals.categoryLabels.length&&(e=t.globals.categoryLabels.indexOf(e)+1);var a=t.globals.labels.indexOf(e),s=t.globals.dom.baseEl.querySelector(".apexcharts-xaxis-texts-g text:nth-child("+(a+1)+")");return s&&(i=parseFloat(s.getAttribute("x"))),i}}]),p}(),Xi=function(){function p(e){F(this,p),this.w=e.w,this.annoCtx=e,this.invertAxis=this.annoCtx.invertAxis,this.helpers=new Be(this.annoCtx)}return R(p,[{key:"addXaxisAnnotation",value:function(e,t,i){var a,s=this.w,r=this.helpers.getX1X2("x1",e),n=r.x,o=r.clipped,h=!0,c=e.label.text,d=e.strokeDashArray;if(P.isNumber(n)){if(e.x2===null||e.x2===void 0){if(!o){var g=this.annoCtx.graphics.drawLine(n+e.offsetX,0+e.offsetY,n+e.offsetX,s.globals.gridHeight+e.offsetY,e.borderColor,d,e.borderWidth);t.appendChild(g.node),e.id&&g.node.classList.add(e.id)}}else{var f=this.helpers.getX1X2("x2",e);if(a=f.x,h=f.clipped,!o||!h){if(a12?f-12:f===0?12:f;t=(t=(t=(t=t.replace(/(^|[^\\])HH+/g,"$1"+h(f))).replace(/(^|[^\\])H/g,"$1"+f)).replace(/(^|[^\\])hh+/g,"$1"+h(x))).replace(/(^|[^\\])h/g,"$1"+x);var b=a?e.getUTCMinutes():e.getMinutes();t=(t=t.replace(/(^|[^\\])mm+/g,"$1"+h(b))).replace(/(^|[^\\])m/g,"$1"+b);var v=a?e.getUTCSeconds():e.getSeconds();t=(t=t.replace(/(^|[^\\])ss+/g,"$1"+h(v))).replace(/(^|[^\\])s/g,"$1"+v);var y=a?e.getUTCMilliseconds():e.getMilliseconds();t=t.replace(/(^|[^\\])fff+/g,"$1"+h(y,3)),y=Math.round(y/10),t=t.replace(/(^|[^\\])ff/g,"$1"+h(y)),y=Math.round(y/10);var w=f<12?"AM":"PM";t=(t=(t=t.replace(/(^|[^\\])f/g,"$1"+y)).replace(/(^|[^\\])TT+/g,"$1"+w)).replace(/(^|[^\\])T/g,"$1"+w.charAt(0));var l=w.toLowerCase();t=(t=t.replace(/(^|[^\\])tt+/g,"$1"+l)).replace(/(^|[^\\])t/g,"$1"+l.charAt(0));var u=-e.getTimezoneOffset(),m=a||!u?"Z":u>0?"+":"-";if(!a){var A=(u=Math.abs(u))%60;m+=h(Math.floor(u/60))+":"+h(A)}t=t.replace(/(^|[^\\])K/g,"$1"+m);var k=(a?e.getUTCDay():e.getDay())+1;return t=(t=(t=(t=(t=t.replace(new RegExp(n[0],"g"),n[k])).replace(new RegExp(o[0],"g"),o[k])).replace(new RegExp(s[0],"g"),s[d])).replace(new RegExp(r[0],"g"),r[d])).replace(/\\(.)/g,"$1")}},{key:"getTimeUnitsfromTimestamp",value:function(e,t,i){var a=this.w;a.config.xaxis.min!==void 0&&(e=a.config.xaxis.min),a.config.xaxis.max!==void 0&&(t=a.config.xaxis.max);var s=this.getDate(e),r=this.getDate(t),n=this.formatDate(s,"yyyy MM dd HH mm ss fff").split(" "),o=this.formatDate(r,"yyyy MM dd HH mm ss fff").split(" ");return{minMillisecond:parseInt(n[6],10),maxMillisecond:parseInt(o[6],10),minSecond:parseInt(n[5],10),maxSecond:parseInt(o[5],10),minMinute:parseInt(n[4],10),maxMinute:parseInt(o[4],10),minHour:parseInt(n[3],10),maxHour:parseInt(o[3],10),minDate:parseInt(n[2],10),maxDate:parseInt(o[2],10),minMonth:parseInt(n[1],10)-1,maxMonth:parseInt(o[1],10)-1,minYear:parseInt(n[0],10),maxYear:parseInt(o[0],10)}}},{key:"isLeapYear",value:function(e){return e%4==0&&e%100!=0||e%400==0}},{key:"calculcateLastDaysOfMonth",value:function(e,t,i){return this.determineDaysOfMonths(e,t)-i}},{key:"determineDaysOfYear",value:function(e){var t=365;return this.isLeapYear(e)&&(t=366),t}},{key:"determineRemainingDaysOfYear",value:function(e,t,i){var a=this.daysCntOfYear[t]+i;return t>1&&this.isLeapYear()&&a++,a}},{key:"determineDaysOfMonths",value:function(e,t){var i=30;switch(e=P.monthMod(e),!0){case this.months30.indexOf(e)>-1:e===2&&(i=this.isLeapYear(t)?29:28);break;case this.months31.indexOf(e)>-1:default:i=31}return i}}]),p}(),ze=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w,this.tooltipKeyFormat="dd MMM"}return R(p,[{key:"xLabelFormat",value:function(e,t,i,a){var s=this.w;if(s.config.xaxis.type==="datetime"&&s.config.xaxis.labels.formatter===void 0&&s.config.tooltip.x.formatter===void 0){var r=new K(this.ctx);return r.formatDate(r.getDate(t),s.config.tooltip.x.format)}return e(t,i,a)}},{key:"defaultGeneralFormatter",value:function(e){return Array.isArray(e)?e.map(function(t){return t}):e}},{key:"defaultYFormatter",value:function(e,t,i){var a=this.w;if(P.isNumber(e))if(a.globals.yValueDecimal!==0)e=e.toFixed(t.decimalsInFloat!==void 0?t.decimalsInFloat:a.globals.yValueDecimal);else{var s=e.toFixed(0);e=e==s?s:e.toFixed(1)}return e}},{key:"setLabelFormatters",value:function(){var e=this,t=this.w;return t.globals.xaxisTooltipFormatter=function(i){return e.defaultGeneralFormatter(i)},t.globals.ttKeyFormatter=function(i){return e.defaultGeneralFormatter(i)},t.globals.ttZFormatter=function(i){return i},t.globals.legendFormatter=function(i){return e.defaultGeneralFormatter(i)},t.config.xaxis.labels.formatter!==void 0?t.globals.xLabelFormatter=t.config.xaxis.labels.formatter:t.globals.xLabelFormatter=function(i){if(P.isNumber(i)){if(!t.config.xaxis.convertedCatToNumeric&&t.config.xaxis.type==="numeric"){if(P.isNumber(t.config.xaxis.decimalsInFloat))return i.toFixed(t.config.xaxis.decimalsInFloat);var a=t.globals.maxX-t.globals.minX;return a>0&&a<100?i.toFixed(1):i.toFixed(0)}return t.globals.isBarHorizontal&&t.globals.maxY-t.globals.minYArr<4?i.toFixed(1):i.toFixed(0)}return i},typeof t.config.tooltip.x.formatter=="function"?t.globals.ttKeyFormatter=t.config.tooltip.x.formatter:t.globals.ttKeyFormatter=t.globals.xLabelFormatter,typeof t.config.xaxis.tooltip.formatter=="function"&&(t.globals.xaxisTooltipFormatter=t.config.xaxis.tooltip.formatter),(Array.isArray(t.config.tooltip.y)||t.config.tooltip.y.formatter!==void 0)&&(t.globals.ttVal=t.config.tooltip.y),t.config.tooltip.z.formatter!==void 0&&(t.globals.ttZFormatter=t.config.tooltip.z.formatter),t.config.legend.formatter!==void 0&&(t.globals.legendFormatter=t.config.legend.formatter),t.config.yaxis.forEach(function(i,a){i.labels.formatter!==void 0?t.globals.yLabelFormatters[a]=i.labels.formatter:t.globals.yLabelFormatters[a]=function(s){return t.globals.xyCharts?Array.isArray(s)?s.map(function(r){return e.defaultYFormatter(r,i,a)}):e.defaultYFormatter(s,i,a):s}}),t.globals}},{key:"heatmapLabelFormatters",value:function(){var e=this.w;if(e.config.chart.type==="heatmap"){e.globals.yAxisScale[0].result=e.globals.seriesNames.slice();var t=e.globals.seriesNames.reduce(function(i,a){return i.length>a.length?i:a},0);e.globals.yAxisScale[0].niceMax=t,e.globals.yAxisScale[0].niceMin=t}}}]),p}(),ge=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"getLabel",value:function(e,t,i,a){var s=arguments.length>4&&arguments[4]!==void 0?arguments[4]:[],r=arguments.length>5&&arguments[5]!==void 0?arguments[5]:"12px",n=!(arguments.length>6&&arguments[6]!==void 0)||arguments[6],o=this.w,h=e[a]===void 0?"":e[a],c=h,d=o.globals.xLabelFormatter,g=o.config.xaxis.labels.formatter,f=!1,x=new ze(this.ctx),b=h;n&&(c=x.xLabelFormat(d,h,b,{i:a,dateFormatter:new K(this.ctx).formatDate,w:o}),g!==void 0&&(c=g(h,e[a],{i:a,dateFormatter:new K(this.ctx).formatDate,w:o})));var v,y;t.length>0?(v=t[a].unit,y=null,t.forEach(function(m){m.unit==="month"?y="year":m.unit==="day"?y="month":m.unit==="hour"?y="day":m.unit==="minute"&&(y="hour")}),f=y===v,i=t[a].position,c=t[a].value):o.config.xaxis.type==="datetime"&&g===void 0&&(c=""),c===void 0&&(c=""),c=Array.isArray(c)?c:c.toString();var w=new X(this.ctx),l={};l=o.globals.rotateXLabels&&n?w.getTextRects(c,parseInt(r,10),null,"rotate(".concat(o.config.xaxis.labels.rotate," 0 0)"),!1):w.getTextRects(c,parseInt(r,10));var u=!o.config.xaxis.labels.showDuplicates&&this.ctx.timeScale;return!Array.isArray(c)&&(String(c)==="NaN"||s.indexOf(c)>=0&&u)&&(c=""),{x:i,text:c,textRect:l,isBold:f}}},{key:"checkLabelBasedOnTickamount",value:function(e,t,i){var a=this.w,s=a.config.xaxis.tickAmount;return s==="dataPoints"&&(s=Math.round(a.globals.gridWidth/120)),s>i||e%Math.round(i/(s+1))==0||(t.text=""),t}},{key:"checkForOverflowingLabels",value:function(e,t,i,a,s){var r=this.w;if(e===0&&r.globals.skipFirstTimelinelabel&&(t.text=""),e===i-1&&r.globals.skipLastTimelinelabel&&(t.text=""),r.config.xaxis.labels.hideOverlappingLabels&&a.length>0){var n=s[s.length-1];t.xa.length||a.some(function(s){return Array.isArray(s.seriesName)})?e:i.seriesYAxisReverseMap[e]}},{key:"isYAxisHidden",value:function(e){var t=this.w,i=t.config.yaxis[e];if(!i.show||this.yAxisAllSeriesCollapsed(e))return!0;if(!i.showForNullSeries){var a=t.globals.seriesYAxisMap[e],s=new $(this.ctx);return a.every(function(r){return s.isSeriesNull(r)})}return!1}},{key:"getYAxisForeColor",value:function(e,t){var i=this.w;return Array.isArray(e)&&i.globals.yAxisScale[t]&&this.ctx.theme.pushExtraColors(e,i.globals.yAxisScale[t].result.length,!1),e}},{key:"drawYAxisTicks",value:function(e,t,i,a,s,r,n){var o=this.w,h=new X(this.ctx),c=o.globals.translateY+o.config.yaxis[s].labels.offsetY;if(o.globals.isBarHorizontal?c=0:o.config.chart.type==="heatmap"&&(c+=r/2),a.show&&t>0){o.config.yaxis[s].opposite===!0&&(e+=a.width);for(var d=t;d>=0;d--){var g=h.drawLine(e+i.offsetX-a.width+a.offsetX,c+a.offsetY,e+i.offsetX+a.offsetX,c+a.offsetY,a.color);n.add(g),c+=r}}}}]),p}(),Ei=function(){function p(e){F(this,p),this.w=e.w,this.annoCtx=e,this.helpers=new Be(this.annoCtx),this.axesUtils=new ge(this.annoCtx)}return R(p,[{key:"addYaxisAnnotation",value:function(e,t,i){var a,s=this.w,r=e.strokeDashArray,n=this.helpers.getY1Y2("y1",e),o=n.yP,h=n.clipped,c=!0,d=!1,g=e.label.text;if(e.y2===null||e.y2===void 0){if(!h){d=!0;var f=this.annoCtx.graphics.drawLine(0+e.offsetX,o+e.offsetY,this._getYAxisAnnotationWidth(e),o+e.offsetY,e.borderColor,r,e.borderWidth);t.appendChild(f.node),e.id&&f.node.classList.add(e.id)}}else{if(a=(n=this.helpers.getY1Y2("y2",e)).yP,c=n.clipped,a>o){var x=o;o=a,a=x}if(!h||!c){d=!0;var b=this.annoCtx.graphics.drawRect(0+e.offsetX,a+e.offsetY,this._getYAxisAnnotationWidth(e),o-a,0,e.fillColor,e.opacity,1,e.borderColor,r);b.node.classList.add("apexcharts-annotation-rect"),b.attr("clip-path","url(#gridRectMask".concat(s.globals.cuid,")")),t.appendChild(b.node),e.id&&b.node.classList.add(e.id)}}if(d){var v=e.label.position==="right"?s.globals.gridWidth:e.label.position==="center"?s.globals.gridWidth/2:0,y=this.annoCtx.graphics.drawText({x:v+e.label.offsetX,y:(a??o)+e.label.offsetY-3,text:g,textAnchor:e.label.textAnchor,fontSize:e.label.style.fontSize,fontFamily:e.label.style.fontFamily,fontWeight:e.label.style.fontWeight,foreColor:e.label.style.color,cssClass:"apexcharts-yaxis-annotation-label ".concat(e.label.style.cssClass," ").concat(e.id?e.id:"")});y.attr({rel:i}),t.appendChild(y.node)}}},{key:"_getYAxisAnnotationWidth",value:function(e){var t=this.w;return t.globals.gridWidth,(e.width.indexOf("%")>-1?t.globals.gridWidth*parseInt(e.width,10)/100:parseInt(e.width,10))+e.offsetX}},{key:"drawYAxisAnnotations",value:function(){var e=this,t=this.w,i=this.annoCtx.graphics.group({class:"apexcharts-yaxis-annotations"});return t.config.annotations.yaxis.forEach(function(a,s){a.yAxisIndex=e.axesUtils.translateYAxisIndex(a.yAxisIndex),e.axesUtils.isYAxisHidden(a.yAxisIndex)&&e.axesUtils.yAxisAllSeriesCollapsed(a.yAxisIndex)||e.addYaxisAnnotation(a,i.node,s)}),i}}]),p}(),Yi=function(){function p(e){F(this,p),this.w=e.w,this.annoCtx=e,this.helpers=new Be(this.annoCtx)}return R(p,[{key:"addPointAnnotation",value:function(e,t,i){if(!(this.w.globals.collapsedSeriesIndices.indexOf(e.seriesIndex)>-1)){var a=this.helpers.getX1X2("x1",e),s=a.x,r=a.clipped,n=(a=this.helpers.getY1Y2("y1",e)).yP,o=a.clipped;if(P.isNumber(s)&&!o&&!r){var h={pSize:e.marker.size,pointStrokeWidth:e.marker.strokeWidth,pointFillColor:e.marker.fillColor,pointStrokeColor:e.marker.strokeColor,shape:e.marker.shape,pRadius:e.marker.radius,class:"apexcharts-point-annotation-marker ".concat(e.marker.cssClass," ").concat(e.id?e.id:"")},c=this.annoCtx.graphics.drawMarker(s+e.marker.offsetX,n+e.marker.offsetY,h);t.appendChild(c.node);var d=e.label.text?e.label.text:"",g=this.annoCtx.graphics.drawText({x:s+e.label.offsetX,y:n+e.label.offsetY-e.marker.size-parseFloat(e.label.style.fontSize)/1.6,text:d,textAnchor:e.label.textAnchor,fontSize:e.label.style.fontSize,fontFamily:e.label.style.fontFamily,fontWeight:e.label.style.fontWeight,foreColor:e.label.style.color,cssClass:"apexcharts-point-annotation-label ".concat(e.label.style.cssClass," ").concat(e.id?e.id:"")});if(g.attr({rel:i}),t.appendChild(g.node),e.customSVG.SVG){var f=this.annoCtx.graphics.group({class:"apexcharts-point-annotations-custom-svg "+e.customSVG.cssClass});f.attr({transform:"translate(".concat(s+e.customSVG.offsetX,", ").concat(n+e.customSVG.offsetY,")")}),f.node.innerHTML=e.customSVG.SVG,t.appendChild(f.node)}if(e.image.path){var x=e.image.width?e.image.width:20,b=e.image.height?e.image.height:20;c=this.annoCtx.addImage({x:s+e.image.offsetX-x/2,y:n+e.image.offsetY-b/2,width:x,height:b,path:e.image.path,appendTo:".apexcharts-point-annotations"})}e.mouseEnter&&c.node.addEventListener("mouseenter",e.mouseEnter.bind(this,e)),e.mouseLeave&&c.node.addEventListener("mouseleave",e.mouseLeave.bind(this,e)),e.click&&c.node.addEventListener("click",e.click.bind(this,e))}}}},{key:"drawPointAnnotations",value:function(){var e=this,t=this.w,i=this.annoCtx.graphics.group({class:"apexcharts-point-annotations"});return t.config.annotations.points.map(function(a,s){e.addPointAnnotation(a,i.node,s)}),i}}]),p}(),Xt={name:"en",options:{months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],toolbar:{exportToSVG:"Download SVG",exportToPNG:"Download PNG",exportToCSV:"Download CSV",menu:"Menu",selection:"Selection",selectionZoom:"Selection Zoom",zoomIn:"Zoom In",zoomOut:"Zoom Out",pan:"Panning",reset:"Reset Zoom"}}},ue=function(){function p(){F(this,p),this.yAxis={show:!0,showAlways:!1,showForNullSeries:!0,seriesName:void 0,opposite:!1,reversed:!1,logarithmic:!1,logBase:10,tickAmount:void 0,stepSize:void 0,forceNiceScale:!1,max:void 0,min:void 0,floating:!1,decimalsInFloat:void 0,labels:{show:!0,minWidth:0,maxWidth:160,offsetX:0,offsetY:0,align:void 0,rotate:0,padding:20,style:{colors:[],fontSize:"11px",fontWeight:400,fontFamily:void 0,cssClass:""},formatter:void 0},axisBorder:{show:!1,color:"#e0e0e0",width:1,offsetX:0,offsetY:0},axisTicks:{show:!1,color:"#e0e0e0",width:6,offsetX:0,offsetY:0},title:{text:void 0,rotate:-90,offsetY:0,offsetX:0,style:{color:void 0,fontSize:"11px",fontWeight:900,fontFamily:void 0,cssClass:""}},tooltip:{enabled:!1,offsetX:0},crosshairs:{show:!0,position:"front",stroke:{color:"#b6b6b6",width:1,dashArray:0}}},this.pointAnnotation={id:void 0,x:0,y:null,yAxisIndex:0,seriesIndex:void 0,mouseEnter:void 0,mouseLeave:void 0,click:void 0,marker:{size:4,fillColor:"#fff",strokeWidth:2,strokeColor:"#333",shape:"circle",offsetX:0,offsetY:0,cssClass:""},label:{borderColor:"#c2c2c2",borderWidth:1,borderRadius:2,text:void 0,textAnchor:"middle",offsetX:0,offsetY:0,mouseEnter:void 0,mouseLeave:void 0,click:void 0,style:{background:"#fff",color:void 0,fontSize:"11px",fontFamily:void 0,fontWeight:400,cssClass:"",padding:{left:5,right:5,top:2,bottom:2}}},customSVG:{SVG:void 0,cssClass:void 0,offsetX:0,offsetY:0},image:{path:void 0,width:20,height:20,offsetX:0,offsetY:0}},this.yAxisAnnotation={id:void 0,y:0,y2:null,strokeDashArray:1,fillColor:"#c2c2c2",borderColor:"#c2c2c2",borderWidth:1,opacity:.3,offsetX:0,offsetY:0,width:"100%",yAxisIndex:0,label:{borderColor:"#c2c2c2",borderWidth:1,borderRadius:2,text:void 0,textAnchor:"end",position:"right",offsetX:0,offsetY:-3,mouseEnter:void 0,mouseLeave:void 0,click:void 0,style:{background:"#fff",color:void 0,fontSize:"11px",fontFamily:void 0,fontWeight:400,cssClass:"",padding:{left:5,right:5,top:2,bottom:2}}}},this.xAxisAnnotation={id:void 0,x:0,x2:null,strokeDashArray:1,fillColor:"#c2c2c2",borderColor:"#c2c2c2",borderWidth:1,opacity:.3,offsetX:0,offsetY:0,label:{borderColor:"#c2c2c2",borderWidth:1,borderRadius:2,text:void 0,textAnchor:"middle",orientation:"vertical",position:"top",offsetX:0,offsetY:0,mouseEnter:void 0,mouseLeave:void 0,click:void 0,style:{background:"#fff",color:void 0,fontSize:"11px",fontFamily:void 0,fontWeight:400,cssClass:"",padding:{left:5,right:5,top:2,bottom:2}}}},this.text={x:0,y:0,text:"",textAnchor:"start",foreColor:void 0,fontSize:"13px",fontFamily:void 0,fontWeight:400,appendTo:".apexcharts-annotations",backgroundColor:"transparent",borderColor:"#c2c2c2",borderRadius:0,borderWidth:0,paddingLeft:4,paddingRight:4,paddingTop:2,paddingBottom:2}}return R(p,[{key:"init",value:function(){return{annotations:{yaxis:[this.yAxisAnnotation],xaxis:[this.xAxisAnnotation],points:[this.pointAnnotation],texts:[],images:[],shapes:[]},chart:{animations:{enabled:!0,easing:"easeinout",speed:800,animateGradually:{delay:150,enabled:!0},dynamicAnimation:{enabled:!0,speed:350}},background:"",locales:[Xt],defaultLocale:"en",dropShadow:{enabled:!1,enabledOnSeries:void 0,top:2,left:2,blur:4,color:"#000",opacity:.35},events:{animationEnd:void 0,beforeMount:void 0,mounted:void 0,updated:void 0,click:void 0,mouseMove:void 0,mouseLeave:void 0,xAxisLabelClick:void 0,legendClick:void 0,markerClick:void 0,selection:void 0,dataPointSelection:void 0,dataPointMouseEnter:void 0,dataPointMouseLeave:void 0,beforeZoom:void 0,beforeResetZoom:void 0,zoomed:void 0,scrolled:void 0,brushScrolled:void 0},foreColor:"#373d3f",fontFamily:"Helvetica, Arial, sans-serif",height:"auto",parentHeightOffset:15,redrawOnParentResize:!0,redrawOnWindowResize:!0,id:void 0,group:void 0,nonce:void 0,offsetX:0,offsetY:0,selection:{enabled:!1,type:"x",fill:{color:"#24292e",opacity:.1},stroke:{width:1,color:"#24292e",opacity:.4,dashArray:3},xaxis:{min:void 0,max:void 0},yaxis:{min:void 0,max:void 0}},sparkline:{enabled:!1},brush:{enabled:!1,autoScaleYaxis:!0,target:void 0,targets:void 0},stacked:!1,stackOnlyBar:!0,stackType:"normal",toolbar:{show:!0,offsetX:0,offsetY:0,tools:{download:!0,selection:!0,zoom:!0,zoomin:!0,zoomout:!0,pan:!0,reset:!0,customIcons:[]},export:{csv:{filename:void 0,columnDelimiter:",",headerCategory:"category",headerValue:"value",categoryFormatter:void 0,valueFormatter:void 0},png:{filename:void 0},svg:{filename:void 0},scale:void 0,width:void 0},autoSelected:"zoom"},type:"line",width:"100%",zoom:{enabled:!0,type:"x",autoScaleYaxis:!1,allowMouseWheelZoom:!0,zoomedArea:{fill:{color:"#90CAF9",opacity:.4},stroke:{color:"#0D47A1",opacity:.4,width:1}}}},plotOptions:{line:{isSlopeChart:!1},area:{fillTo:"origin"},bar:{horizontal:!1,columnWidth:"70%",barHeight:"70%",distributed:!1,borderRadius:0,borderRadiusApplication:"around",borderRadiusWhenStacked:"last",rangeBarOverlap:!0,rangeBarGroupRows:!1,hideZeroBarsWhenGrouped:!1,isDumbbell:!1,dumbbellColors:void 0,isFunnel:!1,isFunnel3d:!0,colors:{ranges:[],backgroundBarColors:[],backgroundBarOpacity:1,backgroundBarRadius:0},dataLabels:{position:"top",maxItems:100,hideOverflowingLabels:!0,orientation:"horizontal",total:{enabled:!1,formatter:void 0,offsetX:0,offsetY:0,style:{color:"#373d3f",fontSize:"12px",fontFamily:void 0,fontWeight:600}}}},bubble:{zScaling:!0,minBubbleRadius:void 0,maxBubbleRadius:void 0},candlestick:{colors:{upward:"#00B746",downward:"#EF403C"},wick:{useFillColor:!0}},boxPlot:{colors:{upper:"#00E396",lower:"#008FFB"}},heatmap:{radius:2,enableShades:!0,shadeIntensity:.5,reverseNegativeShade:!1,distributed:!1,useFillColorAsStroke:!1,colorScale:{inverse:!1,ranges:[],min:void 0,max:void 0}},treemap:{enableShades:!0,shadeIntensity:.5,distributed:!1,reverseNegativeShade:!1,useFillColorAsStroke:!1,borderRadius:4,dataLabels:{format:"scale"},colorScale:{inverse:!1,ranges:[],min:void 0,max:void 0}},radialBar:{inverseOrder:!1,startAngle:0,endAngle:360,offsetX:0,offsetY:0,hollow:{margin:5,size:"50%",background:"transparent",image:void 0,imageWidth:150,imageHeight:150,imageOffsetX:0,imageOffsetY:0,imageClipped:!0,position:"front",dropShadow:{enabled:!1,top:0,left:0,blur:3,color:"#000",opacity:.5}},track:{show:!0,startAngle:void 0,endAngle:void 0,background:"#f2f2f2",strokeWidth:"97%",opacity:1,margin:5,dropShadow:{enabled:!1,top:0,left:0,blur:3,color:"#000",opacity:.5}},dataLabels:{show:!0,name:{show:!0,fontSize:"16px",fontFamily:void 0,fontWeight:600,color:void 0,offsetY:0,formatter:function(e){return e}},value:{show:!0,fontSize:"14px",fontFamily:void 0,fontWeight:400,color:void 0,offsetY:16,formatter:function(e){return e+"%"}},total:{show:!1,label:"Total",fontSize:"16px",fontWeight:600,fontFamily:void 0,color:void 0,formatter:function(e){return e.globals.seriesTotals.reduce(function(t,i){return t+i},0)/e.globals.series.length+"%"}}},barLabels:{enabled:!1,offsetX:0,offsetY:0,useSeriesColors:!0,fontFamily:void 0,fontWeight:600,fontSize:"16px",formatter:function(e){return e},onClick:void 0}},pie:{customScale:1,offsetX:0,offsetY:0,startAngle:0,endAngle:360,expandOnClick:!0,dataLabels:{offset:0,minAngleToShowLabel:10},donut:{size:"65%",background:"transparent",labels:{show:!1,name:{show:!0,fontSize:"16px",fontFamily:void 0,fontWeight:600,color:void 0,offsetY:-10,formatter:function(e){return e}},value:{show:!0,fontSize:"20px",fontFamily:void 0,fontWeight:400,color:void 0,offsetY:10,formatter:function(e){return e}},total:{show:!1,showAlways:!1,label:"Total",fontSize:"16px",fontWeight:400,fontFamily:void 0,color:void 0,formatter:function(e){return e.globals.seriesTotals.reduce(function(t,i){return t+i},0)}}}}},polarArea:{rings:{strokeWidth:1,strokeColor:"#e8e8e8"},spokes:{strokeWidth:1,connectorColors:"#e8e8e8"}},radar:{size:void 0,offsetX:0,offsetY:0,polygons:{strokeWidth:1,strokeColors:"#e8e8e8",connectorColors:"#e8e8e8",fill:{colors:void 0}}}},colors:void 0,dataLabels:{enabled:!0,enabledOnSeries:void 0,formatter:function(e){return e!==null?e:""},textAnchor:"middle",distributed:!1,offsetX:0,offsetY:0,style:{fontSize:"12px",fontFamily:void 0,fontWeight:600,colors:void 0},background:{enabled:!0,foreColor:"#fff",borderRadius:2,padding:4,opacity:.9,borderWidth:1,borderColor:"#fff",dropShadow:{enabled:!1,top:1,left:1,blur:1,color:"#000",opacity:.45}},dropShadow:{enabled:!1,top:1,left:1,blur:1,color:"#000",opacity:.45}},fill:{type:"solid",colors:void 0,opacity:.85,gradient:{shade:"dark",type:"horizontal",shadeIntensity:.5,gradientToColors:void 0,inverseColors:!0,opacityFrom:1,opacityTo:1,stops:[0,50,100],colorStops:[]},image:{src:[],width:void 0,height:void 0},pattern:{style:"squares",width:6,height:6,strokeWidth:2}},forecastDataPoints:{count:0,fillOpacity:.5,strokeWidth:void 0,dashArray:4},grid:{show:!0,borderColor:"#e0e0e0",strokeDashArray:0,position:"back",xaxis:{lines:{show:!1}},yaxis:{lines:{show:!0}},row:{colors:void 0,opacity:.5},column:{colors:void 0,opacity:.5},padding:{top:0,right:10,bottom:0,left:12}},labels:[],legend:{show:!0,showForSingleSeries:!1,showForNullSeries:!0,showForZeroSeries:!0,floating:!1,position:"bottom",horizontalAlign:"center",inverseOrder:!1,fontSize:"12px",fontFamily:void 0,fontWeight:400,width:void 0,height:void 0,formatter:void 0,tooltipHoverFormatter:void 0,offsetX:-20,offsetY:4,customLegendItems:[],labels:{colors:void 0,useSeriesColors:!1},markers:{size:7,fillColors:void 0,strokeWidth:1,shape:void 0,offsetX:0,offsetY:0,customHTML:void 0,onClick:void 0},itemMargin:{horizontal:5,vertical:4},onItemClick:{toggleDataSeries:!0},onItemHover:{highlightDataSeries:!0}},markers:{discrete:[],size:0,colors:void 0,strokeColors:"#fff",strokeWidth:2,strokeOpacity:.9,strokeDashArray:0,fillOpacity:1,shape:"circle",offsetX:0,offsetY:0,showNullDataPoints:!0,onClick:void 0,onDblClick:void 0,hover:{size:void 0,sizeOffset:3}},noData:{text:void 0,align:"center",verticalAlign:"middle",offsetX:0,offsetY:0,style:{color:void 0,fontSize:"14px",fontFamily:void 0}},responsive:[],series:void 0,states:{normal:{filter:{type:"none",value:0}},hover:{filter:{type:"lighten",value:.1}},active:{allowMultipleDataPointsSelection:!1,filter:{type:"darken",value:.5}}},title:{text:void 0,align:"left",margin:5,offsetX:0,offsetY:0,floating:!1,style:{fontSize:"14px",fontWeight:900,fontFamily:void 0,color:void 0}},subtitle:{text:void 0,align:"left",margin:5,offsetX:0,offsetY:30,floating:!1,style:{fontSize:"12px",fontWeight:400,fontFamily:void 0,color:void 0}},stroke:{show:!0,curve:"smooth",lineCap:"butt",width:2,colors:void 0,dashArray:0,fill:{type:"solid",colors:void 0,opacity:.85,gradient:{shade:"dark",type:"horizontal",shadeIntensity:.5,gradientToColors:void 0,inverseColors:!0,opacityFrom:1,opacityTo:1,stops:[0,50,100],colorStops:[]}}},tooltip:{enabled:!0,enabledOnSeries:void 0,shared:!0,hideEmptySeries:!1,followCursor:!1,intersect:!1,inverseOrder:!1,custom:void 0,fillSeriesColor:!1,theme:"light",cssClass:"",style:{fontSize:"12px",fontFamily:void 0},onDatasetHover:{highlightDataSeries:!1},x:{show:!0,format:"dd MMM",formatter:void 0},y:{formatter:void 0,title:{formatter:function(e){return e?e+": ":""}}},z:{formatter:void 0,title:"Size: "},marker:{show:!0,fillColors:void 0},items:{display:"flex"},fixed:{enabled:!1,position:"topRight",offsetX:0,offsetY:0}},xaxis:{type:"category",categories:[],convertedCatToNumeric:!1,offsetX:0,offsetY:0,overwriteCategories:void 0,labels:{show:!0,rotate:-45,rotateAlways:!1,hideOverlappingLabels:!0,trim:!1,minHeight:void 0,maxHeight:120,showDuplicates:!0,style:{colors:[],fontSize:"12px",fontWeight:400,fontFamily:void 0,cssClass:""},offsetX:0,offsetY:0,format:void 0,formatter:void 0,datetimeUTC:!0,datetimeFormatter:{year:"yyyy",month:"MMM 'yy",day:"dd MMM",hour:"HH:mm",minute:"HH:mm:ss",second:"HH:mm:ss"}},group:{groups:[],style:{colors:[],fontSize:"12px",fontWeight:400,fontFamily:void 0,cssClass:""}},axisBorder:{show:!0,color:"#e0e0e0",width:"100%",height:1,offsetX:0,offsetY:0},axisTicks:{show:!0,color:"#e0e0e0",height:6,offsetX:0,offsetY:0},stepSize:void 0,tickAmount:void 0,tickPlacement:"on",min:void 0,max:void 0,range:void 0,floating:!1,decimalsInFloat:void 0,position:"bottom",title:{text:void 0,offsetX:0,offsetY:0,style:{color:void 0,fontSize:"12px",fontWeight:900,fontFamily:void 0,cssClass:""}},crosshairs:{show:!0,width:1,position:"back",opacity:.9,stroke:{color:"#b6b6b6",width:1,dashArray:3},fill:{type:"solid",color:"#B1B9C4",gradient:{colorFrom:"#D8E3F0",colorTo:"#BED1E6",stops:[0,100],opacityFrom:.4,opacityTo:.5}},dropShadow:{enabled:!1,left:0,top:0,blur:1,opacity:.4}},tooltip:{enabled:!0,offsetY:0,formatter:void 0,style:{fontSize:"12px",fontFamily:void 0}}},yaxis:this.yAxis,theme:{mode:"",palette:"palette1",monochrome:{enabled:!1,color:"#008FFB",shadeTo:"light",shadeIntensity:.65}}}}}]),p}(),Fi=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w,this.graphics=new X(this.ctx),this.w.globals.isBarHorizontal&&(this.invertAxis=!0),this.helpers=new Be(this),this.xAxisAnnotations=new Xi(this),this.yAxisAnnotations=new Ei(this),this.pointsAnnotations=new Yi(this),this.w.globals.isBarHorizontal&&this.w.config.yaxis[0].reversed&&(this.inversedReversedAxis=!0),this.xDivision=this.w.globals.gridWidth/this.w.globals.dataPoints}return R(p,[{key:"drawAxesAnnotations",value:function(){var e=this.w;if(e.globals.axisCharts){for(var t=this.yAxisAnnotations.drawYAxisAnnotations(),i=this.xAxisAnnotations.drawXAxisAnnotations(),a=this.pointsAnnotations.drawPointAnnotations(),s=e.config.chart.animations.enabled,r=[t,i,a],n=[i.node,t.node,a.node],o=0;o<3;o++)e.globals.dom.elGraphical.add(r[o]),!s||e.globals.resized||e.globals.dataChanged||e.config.chart.type!=="scatter"&&e.config.chart.type!=="bubble"&&e.globals.dataPoints>1&&n[o].classList.add("apexcharts-element-hidden"),e.globals.delayedElements.push({el:n[o],index:0});this.helpers.annotationsBackground()}}},{key:"drawImageAnnos",value:function(){var e=this;this.w.config.annotations.images.map(function(t,i){e.addImage(t,i)})}},{key:"drawTextAnnos",value:function(){var e=this;this.w.config.annotations.texts.map(function(t,i){e.addText(t,i)})}},{key:"addXaxisAnnotation",value:function(e,t,i){this.xAxisAnnotations.addXaxisAnnotation(e,t,i)}},{key:"addYaxisAnnotation",value:function(e,t,i){this.yAxisAnnotations.addYaxisAnnotation(e,t,i)}},{key:"addPointAnnotation",value:function(e,t,i){this.pointsAnnotations.addPointAnnotation(e,t,i)}},{key:"addText",value:function(e,t){var i=e.x,a=e.y,s=e.text,r=e.textAnchor,n=e.foreColor,o=e.fontSize,h=e.fontFamily,c=e.fontWeight,d=e.cssClass,g=e.backgroundColor,f=e.borderWidth,x=e.strokeDashArray,b=e.borderRadius,v=e.borderColor,y=e.appendTo,w=y===void 0?".apexcharts-svg":y,l=e.paddingLeft,u=l===void 0?4:l,m=e.paddingRight,A=m===void 0?4:m,k=e.paddingBottom,S=k===void 0?2:k,L=e.paddingTop,C=L===void 0?2:L,I=this.w,z=this.graphics.drawText({x:i,y:a,text:s,textAnchor:r||"start",fontSize:o||"12px",fontWeight:c||"regular",fontFamily:h||I.config.chart.fontFamily,foreColor:n||I.config.chart.foreColor,cssClass:d}),M=I.globals.dom.baseEl.querySelector(w);M&&M.appendChild(z.node);var T=z.bbox();if(s){var E=this.graphics.drawRect(T.x-u,T.y-C,T.width+u+A,T.height+S+C,b,g||"transparent",1,f,v,x);M.insertBefore(E.node,z.node)}}},{key:"addImage",value:function(e,t){var i=this.w,a=e.path,s=e.x,r=s===void 0?0:s,n=e.y,o=n===void 0?0:n,h=e.width,c=h===void 0?20:h,d=e.height,g=d===void 0?20:d,f=e.appendTo,x=f===void 0?".apexcharts-svg":f,b=i.globals.dom.Paper.image(a);b.size(c,g).move(r,o);var v=i.globals.dom.baseEl.querySelector(x);return v&&v.appendChild(b.node),b}},{key:"addXaxisAnnotationExternal",value:function(e,t,i){return this.addAnnotationExternal({params:e,pushToMemory:t,context:i,type:"xaxis",contextMethod:i.addXaxisAnnotation}),i}},{key:"addYaxisAnnotationExternal",value:function(e,t,i){return this.addAnnotationExternal({params:e,pushToMemory:t,context:i,type:"yaxis",contextMethod:i.addYaxisAnnotation}),i}},{key:"addPointAnnotationExternal",value:function(e,t,i){return this.invertAxis===void 0&&(this.invertAxis=i.w.globals.isBarHorizontal),this.addAnnotationExternal({params:e,pushToMemory:t,context:i,type:"point",contextMethod:i.addPointAnnotation}),i}},{key:"addAnnotationExternal",value:function(e){var t=e.params,i=e.pushToMemory,a=e.context,s=e.type,r=e.contextMethod,n=a,o=n.w,h=o.globals.dom.baseEl.querySelector(".apexcharts-".concat(s,"-annotations")),c=h.childNodes.length+1,d=new ue,g=Object.assign({},s==="xaxis"?d.xAxisAnnotation:s==="yaxis"?d.yAxisAnnotation:d.pointAnnotation),f=P.extend(g,t);switch(s){case"xaxis":this.addXaxisAnnotation(f,h,c);break;case"yaxis":this.addYaxisAnnotation(f,h,c);break;case"point":this.addPointAnnotation(f,h,c)}var x=o.globals.dom.baseEl.querySelector(".apexcharts-".concat(s,"-annotations .apexcharts-").concat(s,"-annotation-label[rel='").concat(c,"']")),b=this.helpers.addBackgroundToAnno(x,f);return b&&h.insertBefore(b.node,x),i&&o.globals.memory.methodsToExec.push({context:n,id:f.id?f.id:P.randomId(),method:r,label:"addAnnotation",params:t}),a}},{key:"clearAnnotations",value:function(e){for(var t=e.w,i=t.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxis-annotations, .apexcharts-xaxis-annotations, .apexcharts-point-annotations"),a=t.globals.memory.methodsToExec.length-1;a>=0;a--)t.globals.memory.methodsToExec[a].label!=="addText"&&t.globals.memory.methodsToExec[a].label!=="addAnnotation"||t.globals.memory.methodsToExec.splice(a,1);i=P.listToArray(i),Array.prototype.forEach.call(i,function(s){for(;s.firstChild;)s.removeChild(s.firstChild)})}},{key:"removeAnnotation",value:function(e,t){var i=e.w,a=i.globals.dom.baseEl.querySelectorAll(".".concat(t));a&&(i.globals.memory.methodsToExec.map(function(s,r){s.id===t&&i.globals.memory.methodsToExec.splice(r,1)}),Array.prototype.forEach.call(a,function(s){s.parentElement.removeChild(s)}))}}]),p}(),Je=function(p){var e,t=p.isTimeline,i=p.ctx,a=p.seriesIndex,s=p.dataPointIndex,r=p.y1,n=p.y2,o=p.w,h=o.globals.seriesRangeStart[a][s],c=o.globals.seriesRangeEnd[a][s],d=o.globals.labels[s],g=o.config.series[a].name?o.config.series[a].name:"",f=o.globals.ttKeyFormatter,x=o.config.tooltip.y.title.formatter,b={w:o,seriesIndex:a,dataPointIndex:s,start:h,end:c};typeof x=="function"&&(g=x(g,b)),(e=o.config.series[a].data[s])!==null&&e!==void 0&&e.x&&(d=o.config.series[a].data[s].x),t||o.config.xaxis.type==="datetime"&&(d=new ze(i).xLabelFormat(o.globals.ttKeyFormatter,d,d,{i:void 0,dateFormatter:new K(i).formatDate,w:o})),typeof f=="function"&&(d=f(d,b)),Number.isFinite(r)&&Number.isFinite(n)&&(h=r,c=n);var v="",y="",w=o.globals.colors[a];if(o.config.tooltip.x.formatter===void 0)if(o.config.xaxis.type==="datetime"){var l=new K(i);v=l.formatDate(l.getDate(h),o.config.tooltip.x.format),y=l.formatDate(l.getDate(c),o.config.tooltip.x.format)}else v=h,y=c;else v=o.config.tooltip.x.formatter(h),y=o.config.tooltip.x.formatter(c);return{start:h,end:c,startVal:v,endVal:y,ylabel:d,color:w,seriesName:g}},Ke=function(p){var e=p.color,t=p.seriesName,i=p.ylabel,a=p.start,s=p.end,r=p.seriesIndex,n=p.dataPointIndex,o=p.ctx.tooltip.tooltipLabels.getFormatters(r);a=o.yLbFormatter(a),s=o.yLbFormatter(s);var h=o.yLbFormatter(p.w.globals.series[r][n]),c=` - `.concat(a,` +var Ci = Object.create; var vt = Object.defineProperty; var Li = Object.getOwnPropertyDescriptor; var Pi = Object.getOwnPropertyNames; var Mi = Object.getPrototypeOf, Ii = Object.prototype.hasOwnProperty; var yt = (p, e) => () => (e || p((e = { exports: {} }).exports, e), e.exports); var Ti = (p, e, t, i) => { if (e && typeof e == "object" || typeof e == "function") for (let a of Pi(e)) !Ii.call(p, a) && a !== t && vt(p, a, { get: () => e[a], enumerable: !(i = Li(e, a)) || i.enumerable }); return p }; var zi = (p, e, t) => (t = p != null ? Ci(Mi(p)) : {}, Ti(e || !p || !p.__esModule ? vt(t, "default", { value: p, enumerable: !0 }) : t, p)); var jt = yt((ot, We) => { + "use strict"; function at(p, e) { (e == null || e > p.length) && (e = p.length); for (var t = 0, i = Array(e); t < e; t++)i[t] = p[t]; return i } function Pt(p) { if (p === void 0) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return p } function F(p, e) { if (!(p instanceof e)) throw new TypeError("Cannot call a class as a function") } function wt(p, e) { for (var t = 0; t < e.length; t++) { var i = e[t]; i.enumerable = i.enumerable || !1, i.configurable = !0, "value" in i && (i.writable = !0), Object.defineProperty(p, Tt(i.key), i) } } function R(p, e, t) { return e && wt(p.prototype, e), t && wt(p, t), Object.defineProperty(p, "prototype", { writable: !1 }), p } function Ie(p) { var e = Mt(); return function () { var t, i = De(p); if (e) { var a = De(this).constructor; t = Reflect.construct(i, arguments, a) } else t = i.apply(this, arguments); return function (s, r) { if (r && (typeof r == "object" || typeof r == "function")) return r; if (r !== void 0) throw new TypeError("Derived constructors may only return object or undefined"); return Pt(s) }(this, t) } } function Oe(p, e, t) { return (e = Tt(e)) in p ? Object.defineProperty(p, e, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : p[e] = t, p } function De(p) { return De = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (e) { return e.__proto__ || Object.getPrototypeOf(e) }, De(p) } function Te(p, e) { if (typeof e != "function" && e !== null) throw new TypeError("Super expression must either be null or a function"); p.prototype = Object.create(e && e.prototype, { constructor: { value: p, writable: !0, configurable: !0 } }), Object.defineProperty(p, "prototype", { writable: !1 }), e && st(p, e) } function Mt() { try { var p = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () { })) } catch { } return (Mt = function () { return !!p })() } function kt(p, e) { var t = Object.keys(p); if (Object.getOwnPropertySymbols) { var i = Object.getOwnPropertySymbols(p); e && (i = i.filter(function (a) { return Object.getOwnPropertyDescriptor(p, a).enumerable })), t.push.apply(t, i) } return t } function Y(p) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e] != null ? arguments[e] : {}; e % 2 ? kt(Object(t), !0).forEach(function (i) { Oe(p, i, t[i]) }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(p, Object.getOwnPropertyDescriptors(t)) : kt(Object(t)).forEach(function (i) { Object.defineProperty(p, i, Object.getOwnPropertyDescriptor(t, i)) }) } return p } function st(p, e) { return st = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, i) { return t.__proto__ = i, t }, st(p, e) } function It(p, e) { + return function (t) { if (Array.isArray(t)) return t }(p) || function (t, i) { var a = t == null ? null : typeof Symbol < "u" && t[Symbol.iterator] || t["@@iterator"]; if (a != null) { var s, r, n, o, h = [], c = !0, d = !1; try { if (n = (a = a.call(t)).next, i === 0) { if (Object(a) !== a) return; c = !1 } else for (; !(c = (s = n.call(a)).done) && (h.push(s.value), h.length !== i); c = !0); } catch (g) { d = !0, r = g } finally { try { if (!c && a.return != null && (o = a.return(), Object(o) !== o)) return } finally { if (d) throw r } } return h } }(p, e) || zt(p, e) || function () { + throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`) + }() + } function te(p) { + return function (e) { if (Array.isArray(e)) return at(e) }(p) || function (e) { if (typeof Symbol < "u" && e[Symbol.iterator] != null || e["@@iterator"] != null) return Array.from(e) }(p) || zt(p) || function () { + throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`) + }() + } function Tt(p) { var e = function (t, i) { if (typeof t != "object" || !t) return t; var a = t[Symbol.toPrimitive]; if (a !== void 0) { var s = a.call(t, i || "default"); if (typeof s != "object") return s; throw new TypeError("@@toPrimitive must return a primitive value.") } return (i === "string" ? String : Number)(t) }(p, "string"); return typeof e == "symbol" ? e : e + "" } function J(p) { return J = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function (e) { return typeof e } : function (e) { return e && typeof Symbol == "function" && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e }, J(p) } function zt(p, e) { if (p) { if (typeof p == "string") return at(p, e); var t = {}.toString.call(p).slice(8, -1); return t === "Object" && p.constructor && (t = p.constructor.name), t === "Map" || t === "Set" ? Array.from(p) : t === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? at(p, e) : void 0 } } var P = function () { function p() { F(this, p) } return R(p, [{ key: "shadeRGBColor", value: function (e, t) { var i = t.split(","), a = e < 0 ? 0 : 255, s = e < 0 ? -1 * e : e, r = parseInt(i[0].slice(4), 10), n = parseInt(i[1], 10), o = parseInt(i[2], 10); return "rgb(" + (Math.round((a - r) * s) + r) + "," + (Math.round((a - n) * s) + n) + "," + (Math.round((a - o) * s) + o) + ")" } }, { key: "shadeHexColor", value: function (e, t) { var i = parseInt(t.slice(1), 16), a = e < 0 ? 0 : 255, s = e < 0 ? -1 * e : e, r = i >> 16, n = i >> 8 & 255, o = 255 & i; return "#" + (16777216 + 65536 * (Math.round((a - r) * s) + r) + 256 * (Math.round((a - n) * s) + n) + (Math.round((a - o) * s) + o)).toString(16).slice(1) } }, { key: "shadeColor", value: function (e, t) { return p.isColorHex(t) ? this.shadeHexColor(e, t) : this.shadeRGBColor(e, t) } }], [{ key: "bind", value: function (e, t) { return function () { return e.apply(t, arguments) } } }, { key: "isObject", value: function (e) { return e && J(e) === "object" && !Array.isArray(e) && e != null } }, { key: "is", value: function (e, t) { return Object.prototype.toString.call(t) === "[object " + e + "]" } }, { key: "listToArray", value: function (e) { var t, i = []; for (t = 0; t < e.length; t++)i[t] = e[t]; return i } }, { key: "extend", value: function (e, t) { var i = this; typeof Object.assign != "function" && (Object.assign = function (s) { if (s == null) throw new TypeError("Cannot convert undefined or null to object"); for (var r = Object(s), n = 1; n < arguments.length; n++) { var o = arguments[n]; if (o != null) for (var h in o) o.hasOwnProperty(h) && (r[h] = o[h]) } return r }); var a = Object.assign({}, e); return this.isObject(e) && this.isObject(t) && Object.keys(t).forEach(function (s) { i.isObject(t[s]) && s in e ? a[s] = i.extend(e[s], t[s]) : Object.assign(a, Oe({}, s, t[s])) }), a } }, { key: "extendArray", value: function (e, t) { var i = []; return e.map(function (a) { i.push(p.extend(t, a)) }), e = i } }, { key: "monthMod", value: function (e) { return e % 12 } }, { key: "clone", value: function (e) { if (p.is("Array", e)) { for (var t = [], i = 0; i < e.length; i++)t[i] = this.clone(e[i]); return t } if (p.is("Null", e)) return null; if (p.is("Date", e)) return e; if (J(e) === "object") { var a = {}; for (var s in e) e.hasOwnProperty(s) && (a[s] = this.clone(e[s])); return a } return e } }, { key: "log10", value: function (e) { return Math.log(e) / Math.LN10 } }, { key: "roundToBase10", value: function (e) { return Math.pow(10, Math.floor(Math.log10(e))) } }, { key: "roundToBase", value: function (e, t) { return Math.pow(t, Math.floor(Math.log(e) / Math.log(t))) } }, { key: "parseNumber", value: function (e) { return e === null ? e : parseFloat(e) } }, { key: "stripNumber", value: function (e) { var t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 2; return Number.isInteger(e) ? e : parseFloat(e.toPrecision(t)) } }, { key: "randomId", value: function () { return (Math.random() + 1).toString(36).substring(4) } }, { key: "noExponents", value: function (e) { var t = String(e).split(/[eE]/); if (t.length === 1) return t[0]; var i = "", a = e < 0 ? "-" : "", s = t[0].replace(".", ""), r = Number(t[1]) + 1; if (r < 0) { for (i = a + "0."; r++;)i += "0"; return i + s.replace(/^-/, "") } for (r -= s.length; r--;)i += "0"; return s + i } }, { key: "getDimensions", value: function (e) { var t = getComputedStyle(e, null), i = e.clientHeight, a = e.clientWidth; return i -= parseFloat(t.paddingTop) + parseFloat(t.paddingBottom), [a -= parseFloat(t.paddingLeft) + parseFloat(t.paddingRight), i] } }, { key: "getBoundingClientRect", value: function (e) { var t = e.getBoundingClientRect(); return { top: t.top, right: t.right, bottom: t.bottom, left: t.left, width: e.clientWidth, height: e.clientHeight, x: t.left, y: t.top } } }, { key: "getLargestStringFromArr", value: function (e) { return e.reduce(function (t, i) { return Array.isArray(i) && (i = i.reduce(function (a, s) { return a.length > s.length ? a : s })), t.length > i.length ? t : i }, 0) } }, { key: "hexToRgba", value: function () { var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : "#999999", t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : .6; e.substring(0, 1) !== "#" && (e = "#999999"); var i = e.replace("#", ""); i = i.match(new RegExp("(.{" + i.length / 3 + "})", "g")); for (var a = 0; a < i.length; a++)i[a] = parseInt(i[a].length === 1 ? i[a] + i[a] : i[a], 16); return t !== void 0 && i.push(t), "rgba(" + i.join(",") + ")" } }, { key: "getOpacityFromRGBA", value: function (e) { return parseFloat(e.replace(/^.*,(.+)\)/, "$1")) } }, { key: "rgb2hex", value: function (e) { return (e = e.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i)) && e.length === 4 ? "#" + ("0" + parseInt(e[1], 10).toString(16)).slice(-2) + ("0" + parseInt(e[2], 10).toString(16)).slice(-2) + ("0" + parseInt(e[3], 10).toString(16)).slice(-2) : "" } }, { key: "isColorHex", value: function (e) { return /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)|(^#[0-9A-F]{8}$)/i.test(e) } }, { key: "getPolygonPos", value: function (e, t) { for (var i = [], a = 2 * Math.PI / t, s = 0; s < t; s++) { var r = {}; r.x = e * Math.sin(s * a), r.y = -e * Math.cos(s * a), i.push(r) } return i } }, { key: "polarToCartesian", value: function (e, t, i, a) { var s = (a - 90) * Math.PI / 180; return { x: e + i * Math.cos(s), y: t + i * Math.sin(s) } } }, { key: "escapeString", value: function (e) { var t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "x", i = e.toString().slice(); return i = i.replace(/[` ~!@#$%^&*()|+\=?;:'",.<>{}[\]\\/]/gi, t) } }, { key: "negToZero", value: function (e) { return e < 0 ? 0 : e } }, { key: "moveIndexInArray", value: function (e, t, i) { if (i >= e.length) for (var a = i - e.length + 1; a--;)e.push(void 0); return e.splice(i, 0, e.splice(t, 1)[0]), e } }, { key: "extractNumber", value: function (e) { return parseFloat(e.replace(/[^\d.]*/g, "")) } }, { key: "findAncestor", value: function (e, t) { for (; (e = e.parentElement) && !e.classList.contains(t);); return e } }, { key: "setELstyles", value: function (e, t) { for (var i in t) t.hasOwnProperty(i) && (e.style.key = t[i]) } }, { key: "preciseAddition", value: function (e, t) { var i = (String(e).split(".")[1] || "").length, a = (String(t).split(".")[1] || "").length, s = Math.pow(10, Math.max(i, a)); return (Math.round(e * s) + Math.round(t * s)) / s } }, { key: "isNumber", value: function (e) { return !isNaN(e) && parseFloat(Number(e)) === e && !isNaN(parseInt(e, 10)) } }, { key: "isFloat", value: function (e) { return Number(e) === e && e % 1 != 0 } }, { key: "isSafari", value: function () { return /^((?!chrome|android).)*safari/i.test(navigator.userAgent) } }, { key: "isFirefox", value: function () { return navigator.userAgent.toLowerCase().indexOf("firefox") > -1 } }, { key: "isMsEdge", value: function () { var e = window.navigator.userAgent, t = e.indexOf("Edge/"); return t > 0 && parseInt(e.substring(t + 5, e.indexOf(".", t)), 10) } }, { key: "getGCD", value: function (e, t) { var i = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 7, a = Math.pow(10, i - Math.floor(Math.log10(Math.max(e, t)))); for (e = Math.round(Math.abs(e) * a), t = Math.round(Math.abs(t) * a); t;) { var s = t; t = e % t, e = s } return e / a } }, { key: "getPrimeFactors", value: function (e) { for (var t = [], i = 2; e >= 2;)e % i == 0 ? (t.push(i), e /= i) : i++; return t } }, { key: "mod", value: function (e, t) { var i = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 7, a = Math.pow(10, i - Math.floor(Math.log10(Math.max(e, t)))); return (e = Math.round(Math.abs(e) * a)) % (t = Math.round(Math.abs(t) * a)) / a } }]), p }(), ve = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w, this.setEasingFunctions() } return R(p, [{ key: "setEasingFunctions", value: function () { var e; if (!this.w.globals.easing) { switch (this.w.config.chart.animations.easing) { case "linear": e = "-"; break; case "easein": e = "<"; break; case "easeout": e = ">"; break; case "easeinout": default: e = "<>"; break; case "swing": e = function (t) { var i = 1.70158; return (t -= 1) * t * ((i + 1) * t + i) + 1 }; break; case "bounce": e = function (t) { return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375 }; break; case "elastic": e = function (t) { return t === !!t ? t : Math.pow(2, -10 * t) * Math.sin((t - .075) * (2 * Math.PI) / .3) + 1 } }this.w.globals.easing = e } } }, { key: "animateLine", value: function (e, t, i, a) { e.attr(t).animate(a).attr(i) } }, { key: "animateMarker", value: function (e, t, i, a) { e.attr({ opacity: 0 }).animate(t, i).attr({ opacity: 1 }).afterAll(function () { a() }) } }, { key: "animateRect", value: function (e, t, i, a, s) { e.attr(t).animate(a).attr(i).afterAll(function () { return s() }) } }, { key: "animatePathsGradually", value: function (e) { var t = e.el, i = e.realIndex, a = e.j, s = e.fill, r = e.pathFrom, n = e.pathTo, o = e.speed, h = e.delay, c = this.w, d = 0; c.config.chart.animations.animateGradually.enabled && (d = c.config.chart.animations.animateGradually.delay), c.config.chart.animations.dynamicAnimation.enabled && c.globals.dataChanged && c.config.chart.type !== "bar" && (d = 0), this.morphSVG(t, i, a, c.config.chart.type !== "line" || c.globals.comboCharts ? s : "stroke", r, n, o, h * d) } }, { key: "showDelayedElements", value: function () { this.w.globals.delayedElements.forEach(function (e) { var t = e.el; t.classList.remove("apexcharts-element-hidden"), t.classList.add("apexcharts-hidden-element-shown") }) } }, { key: "animationCompleted", value: function (e) { var t = this.w; t.globals.animationEnded || (t.globals.animationEnded = !0, this.showDelayedElements(), typeof t.config.chart.events.animationEnd == "function" && t.config.chart.events.animationEnd(this.ctx, { el: e, w: t })) } }, { key: "morphSVG", value: function (e, t, i, a, s, r, n, o) { var h = this, c = this.w; s || (s = e.attr("pathFrom")), r || (r = e.attr("pathTo")); var d = function (g) { return c.config.chart.type === "radar" && (n = 1), "M 0 ".concat(c.globals.gridHeight) }; (!s || s.indexOf("undefined") > -1 || s.indexOf("NaN") > -1) && (s = d()), (!r || r.indexOf("undefined") > -1 || r.indexOf("NaN") > -1) && (r = d()), c.globals.shouldAnimate || (n = 1), e.plot(s).animate(1, c.globals.easing, o).plot(s).animate(n, c.globals.easing, o).plot(r).afterAll(function () { P.isNumber(i) ? i === c.globals.series[c.globals.maxValsInArrayIndex].length - 2 && c.globals.shouldAnimate && h.animationCompleted(e) : a !== "none" && c.globals.shouldAnimate && (!c.globals.comboCharts && t === c.globals.series.length - 1 || c.globals.comboCharts) && h.animationCompleted(e), h.showDelayedElements() }) } }]), p }(), ie = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w } return R(p, [{ key: "getDefaultFilter", value: function (e, t) { var i = this.w; e.unfilter(!0), new window.SVG.Filter().size("120%", "180%", "-5%", "-40%"), i.config.states.normal.filter !== "none" ? this.applyFilter(e, t, i.config.states.normal.filter.type, i.config.states.normal.filter.value) : i.config.chart.dropShadow.enabled && this.dropShadow(e, i.config.chart.dropShadow, t) } }, { key: "addNormalFilter", value: function (e, t) { var i = this.w; i.config.chart.dropShadow.enabled && !e.node.classList.contains("apexcharts-marker") && this.dropShadow(e, i.config.chart.dropShadow, t) } }, { key: "addLightenFilter", value: function (e, t, i) { var a = this, s = this.w, r = i.intensity; e.unfilter(!0), new window.SVG.Filter, e.filter(function (n) { var o = s.config.chart.dropShadow; (o.enabled ? a.addShadow(n, t, o) : n).componentTransfer({ rgb: { type: "linear", slope: 1.5, intercept: r } }) }), e.filterer.node.setAttribute("filterUnits", "userSpaceOnUse"), this._scaleFilterSize(e.filterer.node) } }, { key: "addDarkenFilter", value: function (e, t, i) { var a = this, s = this.w, r = i.intensity; e.unfilter(!0), new window.SVG.Filter, e.filter(function (n) { var o = s.config.chart.dropShadow; (o.enabled ? a.addShadow(n, t, o) : n).componentTransfer({ rgb: { type: "linear", slope: r } }) }), e.filterer.node.setAttribute("filterUnits", "userSpaceOnUse"), this._scaleFilterSize(e.filterer.node) } }, { key: "applyFilter", value: function (e, t, i) { var a = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : .5; switch (i) { case "none": this.addNormalFilter(e, t); break; case "lighten": this.addLightenFilter(e, t, { intensity: a }); break; case "darken": this.addDarkenFilter(e, t, { intensity: a }) } } }, { key: "addShadow", value: function (e, t, i) { var a, s = this.w, r = i.blur, n = i.top, o = i.left, h = i.color, c = i.opacity; if (((a = s.config.chart.dropShadow.enabledOnSeries) === null || a === void 0 ? void 0 : a.length) > 0 && s.config.chart.dropShadow.enabledOnSeries.indexOf(t) === -1) return e; var d = e.flood(Array.isArray(h) ? h[t] : h, c).composite(e.sourceAlpha, "in").offset(o, n).gaussianBlur(r).merge(e.source); return e.blend(e.source, d) } }, { key: "dropShadow", value: function (e, t) { var i, a, s = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 0, r = t.top, n = t.left, o = t.blur, h = t.color, c = t.opacity, d = t.noUserSpaceOnUse, g = this.w; return e.unfilter(!0), P.isMsEdge() && g.config.chart.type === "radialBar" || ((i = g.config.chart.dropShadow.enabledOnSeries) === null || i === void 0 ? void 0 : i.length) > 0 && ((a = g.config.chart.dropShadow.enabledOnSeries) === null || a === void 0 ? void 0 : a.indexOf(s)) === -1 || (h = Array.isArray(h) ? h[s] : h, e.filter(function (f) { var x = null; x = P.isSafari() || P.isFirefox() || P.isMsEdge() ? f.flood(h, c).composite(f.sourceAlpha, "in").offset(n, r).gaussianBlur(o) : f.flood(h, c).composite(f.sourceAlpha, "in").offset(n, r).gaussianBlur(o).merge(f.source), f.blend(f.source, x) }), d || e.filterer.node.setAttribute("filterUnits", "userSpaceOnUse"), this._scaleFilterSize(e.filterer.node)), e } }, { key: "setSelectionFilter", value: function (e, t, i) { var a = this.w; if (a.globals.selectedDataPoints[t] !== void 0 && a.globals.selectedDataPoints[t].indexOf(i) > -1) { e.node.setAttribute("selected", !0); var s = a.config.states.active.filter; s !== "none" && this.applyFilter(e, t, s.type, s.value) } } }, { key: "_scaleFilterSize", value: function (e) { (function (t) { for (var i in t) t.hasOwnProperty(i) && e.setAttribute(i, t[i]) })({ width: "200%", height: "200%", x: "-50%", y: "-50%" }) } }]), p }(), X = function () { + function p(e) { F(this, p), this.ctx = e, this.w = e.w } return R(p, [{ key: "roundPathCorners", value: function (e, t) { function i(S, L, C) { var I = L.x - S.x, z = L.y - S.y, M = Math.sqrt(I * I + z * z); return a(S, L, Math.min(1, C / M)) } function a(S, L, C) { return { x: S.x + (L.x - S.x) * C, y: S.y + (L.y - S.y) * C } } function s(S, L) { S.length > 2 && (S[S.length - 2] = L.x, S[S.length - 1] = L.y) } function r(S) { return { x: parseFloat(S[S.length - 2]), y: parseFloat(S[S.length - 1]) } } e.indexOf("NaN") > -1 && (e = ""); var n = e.split(/[,\s]/).reduce(function (S, L) { var C = L.match("([a-zA-Z])(.+)"); return C ? (S.push(C[1]), S.push(C[2])) : S.push(L), S }, []).reduce(function (S, L) { return parseFloat(L) == L && S.length ? S[S.length - 1].push(L) : S.push([L]), S }, []), o = []; if (n.length > 1) { var h = r(n[0]), c = null; n[n.length - 1][0] == "Z" && n[0].length > 2 && (c = ["L", h.x, h.y], n[n.length - 1] = c), o.push(n[0]); for (var d = 1; d < n.length; d++) { var g = o[o.length - 1], f = n[d], x = f == c ? n[1] : n[d + 1]; if (x && g && g.length > 2 && f[0] == "L" && x.length > 2 && x[0] == "L") { var b, v, y = r(g), w = r(f), l = r(x); b = i(w, y, t), v = i(w, l, t), s(f, b), f.origPoint = w, o.push(f); var u = a(b, w, .5), m = a(w, v, .5), A = ["C", u.x, u.y, m.x, m.y, v.x, v.y]; A.origPoint = w, o.push(A) } else o.push(f) } if (c) { var k = r(o[o.length - 1]); o.push(["Z"]), s(o[0], k) } } else o = n; return o.reduce(function (S, L) { return S + L.join(" ") + " " }, "") } }, { key: "drawLine", value: function (e, t, i, a) { var s = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : "#a8a8a8", r = arguments.length > 5 && arguments[5] !== void 0 ? arguments[5] : 0, n = arguments.length > 6 && arguments[6] !== void 0 ? arguments[6] : null, o = arguments.length > 7 && arguments[7] !== void 0 ? arguments[7] : "butt"; return this.w.globals.dom.Paper.line().attr({ x1: e, y1: t, x2: i, y2: a, stroke: s, "stroke-dasharray": r, "stroke-width": n, "stroke-linecap": o }) } }, { key: "drawRect", value: function () { var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 0, t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0, i = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 0, a = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : 0, s = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : 0, r = arguments.length > 5 && arguments[5] !== void 0 ? arguments[5] : "#fefefe", n = arguments.length > 6 && arguments[6] !== void 0 ? arguments[6] : 1, o = arguments.length > 7 && arguments[7] !== void 0 ? arguments[7] : null, h = arguments.length > 8 && arguments[8] !== void 0 ? arguments[8] : null, c = arguments.length > 9 && arguments[9] !== void 0 ? arguments[9] : 0, d = this.w.globals.dom.Paper.rect(); return d.attr({ x: e, y: t, width: i > 0 ? i : 0, height: a > 0 ? a : 0, rx: s, ry: s, opacity: n, "stroke-width": o !== null ? o : 0, stroke: h !== null ? h : "none", "stroke-dasharray": c }), d.node.setAttribute("fill", r), d } }, { key: "drawPolygon", value: function (e) { var t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "#e1e1e1", i = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 1, a = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : "none"; return this.w.globals.dom.Paper.polygon(e).attr({ fill: a, stroke: t, "stroke-width": i }) } }, { key: "drawCircle", value: function (e) { var t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : null; e < 0 && (e = 0); var i = this.w.globals.dom.Paper.circle(2 * e); return t !== null && i.attr(t), i } }, { key: "drawPath", value: function (e) { var t = e.d, i = t === void 0 ? "" : t, a = e.stroke, s = a === void 0 ? "#a8a8a8" : a, r = e.strokeWidth, n = r === void 0 ? 1 : r, o = e.fill, h = e.fillOpacity, c = h === void 0 ? 1 : h, d = e.strokeOpacity, g = d === void 0 ? 1 : d, f = e.classes, x = e.strokeLinecap, b = x === void 0 ? null : x, v = e.strokeDashArray, y = v === void 0 ? 0 : v, w = this.w; return b === null && (b = w.config.stroke.lineCap), (i.indexOf("undefined") > -1 || i.indexOf("NaN") > -1) && (i = "M 0 ".concat(w.globals.gridHeight)), w.globals.dom.Paper.path(i).attr({ fill: o, "fill-opacity": c, stroke: s, "stroke-opacity": g, "stroke-linecap": b, "stroke-width": n, "stroke-dasharray": y, class: f }) } }, { key: "group", value: function () { var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : null, t = this.w.globals.dom.Paper.group(); return e !== null && t.attr(e), t } }, { key: "move", value: function (e, t) { var i = ["M", e, t].join(" "); return i } }, { key: "line", value: function (e, t) { var i = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : null, a = null; return i === null ? a = [" L", e, t].join(" ") : i === "H" ? a = [" H", e].join(" ") : i === "V" && (a = [" V", t].join(" ")), a } }, { key: "curve", value: function (e, t, i, a, s, r) { var n = ["C", e, t, i, a, s, r].join(" "); return n } }, { key: "quadraticCurve", value: function (e, t, i, a) { return ["Q", e, t, i, a].join(" ") } }, { key: "arc", value: function (e, t, i, a, s, r, n) { var o = "A"; arguments.length > 7 && arguments[7] !== void 0 && arguments[7] && (o = "a"); var h = [o, e, t, i, a, s, r, n].join(" "); return h } }, { key: "renderPaths", value: function (e) { var t, i = e.j, a = e.realIndex, s = e.pathFrom, r = e.pathTo, n = e.stroke, o = e.strokeWidth, h = e.strokeLinecap, c = e.fill, d = e.animationDelay, g = e.initialSpeed, f = e.dataChangeSpeed, x = e.className, b = e.shouldClipToGrid, v = b === void 0 || b, y = e.bindEventsOnPaths, w = y === void 0 || y, l = e.drawShadow, u = l === void 0 || l, m = this.w, A = new ie(this.ctx), k = new ve(this.ctx), S = this.w.config.chart.animations.enabled, L = S && this.w.config.chart.animations.dynamicAnimation.enabled, C = !!(S && !m.globals.resized || L && m.globals.dataChanged && m.globals.shouldAnimate); C ? t = s : (t = r, m.globals.animationEnded = !0); var I = m.config.stroke.dashArray, z = 0; z = Array.isArray(I) ? I[a] : m.config.stroke.dashArray; var M = this.drawPath({ d: t, stroke: n, strokeWidth: o, fill: c, fillOpacity: 1, classes: x, strokeLinecap: h, strokeDashArray: z }); if (M.attr("index", a), v && M.attr({ "clip-path": "url(#gridRectMask".concat(m.globals.cuid, ")") }), m.config.states.normal.filter.type !== "none") A.getDefaultFilter(M, a); else if (m.config.chart.dropShadow.enabled && u) { var T = m.config.chart.dropShadow; A.dropShadow(M, T, a) } w && (M.node.addEventListener("mouseenter", this.pathMouseEnter.bind(this, M)), M.node.addEventListener("mouseleave", this.pathMouseLeave.bind(this, M)), M.node.addEventListener("mousedown", this.pathMouseDown.bind(this, M))), M.attr({ pathTo: r, pathFrom: s }); var E = { el: M, j: i, realIndex: a, pathFrom: s, pathTo: r, fill: c, strokeWidth: o, delay: d }; return !S || m.globals.resized || m.globals.dataChanged ? !m.globals.resized && m.globals.dataChanged || k.showDelayedElements() : k.animatePathsGradually(Y(Y({}, E), {}, { speed: g })), m.globals.dataChanged && L && C && k.animatePathsGradually(Y(Y({}, E), {}, { speed: f })), M } }, { key: "drawPattern", value: function (e, t, i) { var a = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : "#a8a8a8", s = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : 0; return this.w.globals.dom.Paper.pattern(t, i, function (r) { e === "horizontalLines" ? r.line(0, 0, i, 0).stroke({ color: a, width: s + 1 }) : e === "verticalLines" ? r.line(0, 0, 0, t).stroke({ color: a, width: s + 1 }) : e === "slantedLines" ? r.line(0, 0, t, i).stroke({ color: a, width: s }) : e === "squares" ? r.rect(t, i).fill("none").stroke({ color: a, width: s }) : e === "circles" && r.circle(t).fill("none").stroke({ color: a, width: s }) }) } }, { key: "drawGradient", value: function (e, t, i, a, s) { var r, n = arguments.length > 5 && arguments[5] !== void 0 ? arguments[5] : null, o = arguments.length > 6 && arguments[6] !== void 0 ? arguments[6] : null, h = arguments.length > 7 && arguments[7] !== void 0 ? arguments[7] : null, c = arguments.length > 8 && arguments[8] !== void 0 ? arguments[8] : 0, d = this.w; t.length < 9 && t.indexOf("#") === 0 && (t = P.hexToRgba(t, a)), i.length < 9 && i.indexOf("#") === 0 && (i = P.hexToRgba(i, s)); var g = 0, f = 1, x = 1, b = null; o !== null && (g = o[0] !== void 0 ? o[0] / 100 : 0, f = o[1] !== void 0 ? o[1] / 100 : 1, x = o[2] !== void 0 ? o[2] / 100 : 1, b = o[3] !== void 0 ? o[3] / 100 : null); var v = !(d.config.chart.type !== "donut" && d.config.chart.type !== "pie" && d.config.chart.type !== "polarArea" && d.config.chart.type !== "bubble"); if (r = h === null || h.length === 0 ? d.globals.dom.Paper.gradient(v ? "radial" : "linear", function (l) { l.at(g, t, a), l.at(f, i, s), l.at(x, i, s), b !== null && l.at(b, t, a) }) : d.globals.dom.Paper.gradient(v ? "radial" : "linear", function (l) { (Array.isArray(h[c]) ? h[c] : h).forEach(function (u) { l.at(u.offset / 100, u.color, u.opacity) }) }), v) { var y = d.globals.gridWidth / 2, w = d.globals.gridHeight / 2; d.config.chart.type !== "bubble" ? r.attr({ gradientUnits: "userSpaceOnUse", cx: y, cy: w, r: n }) : r.attr({ cx: .5, cy: .5, r: .8, fx: .2, fy: .2 }) } else e === "vertical" ? r.from(0, 0).to(0, 1) : e === "diagonal" ? r.from(0, 0).to(1, 1) : e === "horizontal" ? r.from(0, 1).to(1, 1) : e === "diagonal2" && r.from(1, 0).to(0, 1); return r } }, { key: "getTextBasedOnMaxWidth", value: function (e) { var t = e.text, i = e.maxWidth, a = e.fontSize, s = e.fontFamily, r = this.getTextRects(t, a, s), n = r.width / t.length, o = Math.floor(i / n); return i < r.width ? t.slice(0, o - 3) + "..." : t } }, { key: "drawText", value: function (e) { var t = this, i = e.x, a = e.y, s = e.text, r = e.textAnchor, n = e.fontSize, o = e.fontFamily, h = e.fontWeight, c = e.foreColor, d = e.opacity, g = e.maxWidth, f = e.cssClass, x = f === void 0 ? "" : f, b = e.isPlainText, v = b === void 0 || b, y = e.dominantBaseline, w = y === void 0 ? "auto" : y, l = this.w; s === void 0 && (s = ""); var u = s; r || (r = "start"), c && c.length || (c = l.config.chart.foreColor), o = o || l.config.chart.fontFamily, h = h || "regular"; var m, A = { maxWidth: g, fontSize: n = n || "11px", fontFamily: o }; return Array.isArray(s) ? m = l.globals.dom.Paper.text(function (k) { for (var S = 0; S < s.length; S++)u = s[S], g && (u = t.getTextBasedOnMaxWidth(Y({ text: s[S] }, A))), S === 0 ? k.tspan(u) : k.tspan(u).newLine() }) : (g && (u = this.getTextBasedOnMaxWidth(Y({ text: s }, A))), m = v ? l.globals.dom.Paper.plain(s) : l.globals.dom.Paper.text(function (k) { return k.tspan(u) })), m.attr({ x: i, y: a, "text-anchor": r, "dominant-baseline": w, "font-size": n, "font-family": o, "font-weight": h, fill: c, class: "apexcharts-text " + x }), m.node.style.fontFamily = o, m.node.style.opacity = d, m } }, { + key: "getMarkerPath", value: function (e, t, i, a) { + var s = ""; switch (i) { + case "cross": s = "M ".concat(e - (a /= 1.4), " ").concat(t - a, " L ").concat(e + a, " ").concat(t + a, " M ").concat(e - a, " ").concat(t + a, " L ").concat(e + a, " ").concat(t - a); break; case "plus": s = "M ".concat(e - (a /= 1.12), " ").concat(t, " L ").concat(e + a, " ").concat(t, " M ").concat(e, " ").concat(t - a, " L ").concat(e, " ").concat(t + a); break; case "star": case "sparkle": var r = 5; a *= 1.15, i === "sparkle" && (a /= 1.1, r = 4); for (var n = Math.PI / r, o = 0; o <= 2 * r; o++) { var h = o * n, c = o % 2 == 0 ? a : a / 2; s += (o === 0 ? "M" : "L") + (e + c * Math.sin(h)) + "," + (t - c * Math.cos(h)) } s += "Z"; break; case "triangle": s = "M ".concat(e, " ").concat(t - a, ` + L `).concat(e + a, " ").concat(t + a, ` + L `).concat(e - a, " ").concat(t + a, ` + Z`); break; case "square": case "rect": s = "M ".concat(e - (a /= 1.125), " ").concat(t - a, ` + L `).concat(e + a, " ").concat(t - a, ` + L `).concat(e + a, " ").concat(t + a, ` + L `).concat(e - a, " ").concat(t + a, ` + Z`); break; case "diamond": a *= 1.05, s = "M ".concat(e, " ").concat(t - a, ` + L `).concat(e + a, " ").concat(t, ` + L `).concat(e, " ").concat(t + a, ` + L `).concat(e - a, " ").concat(t, ` + Z`); break; case "line": s = "M ".concat(e - (a /= 1.1), " ").concat(t, ` + L `).concat(e + a, " ").concat(t); break; default: a *= 2, s = "M ".concat(e, ", ").concat(t, ` + m -`).concat(a / 2, `, 0 + a `).concat(a / 2, ",").concat(a / 2, " 0 1,0 ").concat(a, `,0 + a `).concat(a / 2, ",").concat(a / 2, " 0 1,0 -").concat(a, ",0") + }return s + } + }, { key: "drawMarkerShape", value: function (e, t, i, a, s) { var r = this.drawPath({ d: this.getMarkerPath(e, t, i, a, s), stroke: s.pointStrokeColor, strokeDashArray: s.pointStrokeDashArray, strokeWidth: s.pointStrokeWidth, fill: s.pointFillColor, fillOpacity: s.pointFillOpacity, strokeOpacity: s.pointStrokeOpacity }); return r.attr({ cx: e, cy: t, shape: s.shape, class: s.class ? s.class : "" }), r } }, { key: "drawMarker", value: function (e, t, i) { e = e || 0; var a = i.pSize || 0; return P.isNumber(t) || (a = 0, t = 0), this.drawMarkerShape(e, t, i?.shape, a, Y(Y({}, i), i.shape === "line" || i.shape === "plus" || i.shape === "cross" ? { pointStrokeColor: i.pointFillColor, pointStrokeOpacity: i.pointFillOpacity } : {})) } }, { key: "pathMouseEnter", value: function (e, t) { var i = this.w, a = new ie(this.ctx), s = parseInt(e.node.getAttribute("index"), 10), r = parseInt(e.node.getAttribute("j"), 10); if (typeof i.config.chart.events.dataPointMouseEnter == "function" && i.config.chart.events.dataPointMouseEnter(t, this.ctx, { seriesIndex: s, dataPointIndex: r, w: i }), this.ctx.events.fireEvent("dataPointMouseEnter", [t, this.ctx, { seriesIndex: s, dataPointIndex: r, w: i }]), (i.config.states.active.filter.type === "none" || e.node.getAttribute("selected") !== "true") && i.config.states.hover.filter.type !== "none" && !i.globals.isTouchDevice) { var n = i.config.states.hover.filter; a.applyFilter(e, s, n.type, n.value) } } }, { key: "pathMouseLeave", value: function (e, t) { var i = this.w, a = new ie(this.ctx), s = parseInt(e.node.getAttribute("index"), 10), r = parseInt(e.node.getAttribute("j"), 10); typeof i.config.chart.events.dataPointMouseLeave == "function" && i.config.chart.events.dataPointMouseLeave(t, this.ctx, { seriesIndex: s, dataPointIndex: r, w: i }), this.ctx.events.fireEvent("dataPointMouseLeave", [t, this.ctx, { seriesIndex: s, dataPointIndex: r, w: i }]), i.config.states.active.filter.type !== "none" && e.node.getAttribute("selected") === "true" || i.config.states.hover.filter.type !== "none" && a.getDefaultFilter(e, s) } }, { key: "pathMouseDown", value: function (e, t) { var i = this.w, a = new ie(this.ctx), s = parseInt(e.node.getAttribute("index"), 10), r = parseInt(e.node.getAttribute("j"), 10), n = "false"; if (e.node.getAttribute("selected") === "true") { if (e.node.setAttribute("selected", "false"), i.globals.selectedDataPoints[s].indexOf(r) > -1) { var o = i.globals.selectedDataPoints[s].indexOf(r); i.globals.selectedDataPoints[s].splice(o, 1) } } else { if (!i.config.states.active.allowMultipleDataPointsSelection && i.globals.selectedDataPoints.length > 0) { i.globals.selectedDataPoints = []; var h = i.globals.dom.Paper.select(".apexcharts-series path").members, c = i.globals.dom.Paper.select(".apexcharts-series circle, .apexcharts-series rect").members, d = function (x) { Array.prototype.forEach.call(x, function (b) { b.node.setAttribute("selected", "false"), a.getDefaultFilter(b, s) }) }; d(h), d(c) } e.node.setAttribute("selected", "true"), n = "true", i.globals.selectedDataPoints[s] === void 0 && (i.globals.selectedDataPoints[s] = []), i.globals.selectedDataPoints[s].push(r) } if (n === "true") { var g = i.config.states.active.filter; if (g !== "none") a.applyFilter(e, s, g.type, g.value); else if (i.config.states.hover.filter !== "none" && !i.globals.isTouchDevice) { var f = i.config.states.hover.filter; a.applyFilter(e, s, f.type, f.value) } } else i.config.states.active.filter.type !== "none" && (i.config.states.hover.filter.type === "none" || i.globals.isTouchDevice ? a.getDefaultFilter(e, s) : (f = i.config.states.hover.filter, a.applyFilter(e, s, f.type, f.value))); typeof i.config.chart.events.dataPointSelection == "function" && i.config.chart.events.dataPointSelection(t, this.ctx, { selectedDataPoints: i.globals.selectedDataPoints, seriesIndex: s, dataPointIndex: r, w: i }), t && this.ctx.events.fireEvent("dataPointSelection", [t, this.ctx, { selectedDataPoints: i.globals.selectedDataPoints, seriesIndex: s, dataPointIndex: r, w: i }]) } }, { key: "rotateAroundCenter", value: function (e) { var t = {}; return e && typeof e.getBBox == "function" && (t = e.getBBox()), { x: t.x + t.width / 2, y: t.y + t.height / 2 } } }, { key: "getTextRects", value: function (e, t, i, a) { var s = !(arguments.length > 4 && arguments[4] !== void 0) || arguments[4], r = this.w, n = this.drawText({ x: -200, y: -200, text: e, textAnchor: "start", fontSize: t, fontFamily: i, foreColor: "#fff", opacity: 0 }); a && n.attr("transform", a), r.globals.dom.Paper.add(n); var o = n.bbox(); return s || (o = n.node.getBoundingClientRect()), n.remove(), { width: o.width, height: o.height } } }, { key: "placeTextWithEllipsis", value: function (e, t, i) { if (typeof e.getComputedTextLength == "function" && (e.textContent = t, t.length > 0 && e.getComputedTextLength() >= i / 1.1)) { for (var a = t.length - 3; a > 0; a -= 3)if (e.getSubStringLength(0, a) <= i / 1.1) return void (e.textContent = t.substring(0, a) + "..."); e.textContent = "." } } }], [{ key: "setAttrs", value: function (e, t) { for (var i in t) t.hasOwnProperty(i) && e.setAttribute(i, t[i]) } }]), p + }(), $ = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w } return R(p, [{ key: "getStackedSeriesTotals", value: function () { var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : [], t = this.w, i = []; if (t.globals.series.length === 0) return i; for (var a = 0; a < t.globals.series[t.globals.maxValsInArrayIndex].length; a++) { for (var s = 0, r = 0; r < t.globals.series.length; r++)t.globals.series[r][a] !== void 0 && e.indexOf(r) === -1 && (s += t.globals.series[r][a]); i.push(s) } return i } }, { key: "getSeriesTotalByIndex", value: function () { var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : null; return e === null ? this.w.config.series.reduce(function (t, i) { return t + i }, 0) : this.w.globals.series[e].reduce(function (t, i) { return t + i }, 0) } }, { key: "getStackedSeriesTotalsByGroups", value: function () { var e = this, t = this.w, i = []; return t.globals.seriesGroups.forEach(function (a) { var s = []; t.config.series.forEach(function (n, o) { a.indexOf(t.globals.seriesNames[o]) > -1 && s.push(o) }); var r = t.globals.series.map(function (n, o) { return s.indexOf(o) === -1 ? o : -1 }).filter(function (n) { return n !== -1 }); i.push(e.getStackedSeriesTotals(r)) }), i } }, { key: "setSeriesYAxisMappings", value: function () { var e = this.w.globals, t = this.w.config, i = [], a = [], s = [], r = e.series.length > t.yaxis.length || t.yaxis.some(function (d) { return Array.isArray(d.seriesName) }); t.series.forEach(function (d, g) { s.push(g), a.push(null) }), t.yaxis.forEach(function (d, g) { i[g] = [] }); var n = []; t.yaxis.forEach(function (d, g) { var f = !1; if (d.seriesName) { var x = []; Array.isArray(d.seriesName) ? x = d.seriesName : x.push(d.seriesName), x.forEach(function (b) { t.series.forEach(function (v, y) { if (v.name === b) { var w = y; g === y || r ? !r || s.indexOf(y) > -1 ? i[g].push([g, y]) : console.warn("Series '" + v.name + "' referenced more than once in what looks like the new style. That is, when using either seriesName: [], or when there are more series than yaxes.") : (i[y].push([y, g]), w = g), f = !0, (w = s.indexOf(w)) !== -1 && s.splice(w, 1) } }) }) } f || n.push(g) }), i = i.map(function (d, g) { var f = []; return d.forEach(function (x) { a[x[1]] = x[0], f.push(x[1]) }), f }); for (var o = t.yaxis.length - 1, h = 0; h < n.length && (o = n[h], i[o] = [], s); h++) { var c = s[0]; s.shift(), i[o].push(c), a[c] = o } s.forEach(function (d) { i[o].push(d), a[d] = o }), e.seriesYAxisMap = i.map(function (d) { return d }), e.seriesYAxisReverseMap = a.map(function (d) { return d }), e.seriesYAxisMap.forEach(function (d, g) { d.forEach(function (f) { t.series[f] && t.series[f].group === void 0 && (t.series[f].group = "apexcharts-axis-".concat(g.toString())) }) }) } }, { key: "isSeriesNull", value: function () { var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : null; return (e === null ? this.w.config.series.filter(function (t) { return t !== null }) : this.w.config.series[e].data.filter(function (t) { return t !== null })).length === 0 } }, { key: "seriesHaveSameValues", value: function (e) { return this.w.globals.series[e].every(function (t, i, a) { return t === a[0] }) } }, { key: "getCategoryLabels", value: function (e) { var t = this.w, i = e.slice(); return t.config.xaxis.convertedCatToNumeric && (i = e.map(function (a, s) { return t.config.xaxis.labels.formatter(a - t.globals.minX + 1) })), i } }, { key: "getLargestSeries", value: function () { var e = this.w; e.globals.maxValsInArrayIndex = e.globals.series.map(function (t) { return t.length }).indexOf(Math.max.apply(Math, e.globals.series.map(function (t) { return t.length }))) } }, { key: "getLargestMarkerSize", value: function () { var e = this.w, t = 0; return e.globals.markers.size.forEach(function (i) { t = Math.max(t, i) }), e.config.markers.discrete && e.config.markers.discrete.length && e.config.markers.discrete.forEach(function (i) { t = Math.max(t, i.size) }), t > 0 && (t += e.config.markers.hover.sizeOffset + 1), e.globals.markers.largestSize = t, t } }, { key: "getSeriesTotals", value: function () { var e = this.w; e.globals.seriesTotals = e.globals.series.map(function (t, i) { var a = 0; if (Array.isArray(t)) for (var s = 0; s < t.length; s++)a += t[s]; else a += t; return a }) } }, { key: "getSeriesTotalsXRange", value: function (e, t) { var i = this.w; return i.globals.series.map(function (a, s) { for (var r = 0, n = 0; n < a.length; n++)i.globals.seriesX[s][n] > e && i.globals.seriesX[s][n] < t && (r += a[n]); return r }) } }, { key: "getPercentSeries", value: function () { var e = this.w; e.globals.seriesPercent = e.globals.series.map(function (t, i) { var a = []; if (Array.isArray(t)) for (var s = 0; s < t.length; s++) { var r = e.globals.stackedSeriesTotals[s], n = 0; r && (n = 100 * t[s] / r), a.push(n) } else { var o = 100 * t / e.globals.seriesTotals.reduce(function (h, c) { return h + c }, 0); a.push(o) } return a }) } }, { key: "getCalculatedRatios", value: function () { var e, t, i, a = this, s = this.w, r = s.globals, n = [], o = 0, h = [], c = .1, d = 0; if (r.yRange = [], r.isMultipleYAxis) for (var g = 0; g < r.minYArr.length; g++)r.yRange.push(Math.abs(r.minYArr[g] - r.maxYArr[g])), h.push(0); else r.yRange.push(Math.abs(r.minY - r.maxY)); r.xRange = Math.abs(r.maxX - r.minX), r.zRange = Math.abs(r.maxZ - r.minZ); for (var f = 0; f < r.yRange.length; f++)n.push(r.yRange[f] / r.gridHeight); if (t = r.xRange / r.gridWidth, e = r.yRange / r.gridWidth, i = r.xRange / r.gridHeight, (o = r.zRange / r.gridHeight * 16) || (o = 1), r.minY !== Number.MIN_VALUE && Math.abs(r.minY) !== 0 && (r.hasNegs = !0), s.globals.seriesYAxisReverseMap.length > 0) { var x = function (v, y) { var w = s.config.yaxis[s.globals.seriesYAxisReverseMap[y]], l = v < 0 ? -1 : 1; return v = Math.abs(v), w.logarithmic && (v = a.getBaseLog(w.logBase, v)), -l * v / n[y] }; if (r.isMultipleYAxis) { h = []; for (var b = 0; b < n.length; b++)h.push(x(r.minYArr[b], b)) } else (h = []).push(x(r.minY, 0)), r.minY !== Number.MIN_VALUE && Math.abs(r.minY) !== 0 && (c = -r.minY / e, d = r.minX / t) } else (h = []).push(0), c = 0, d = 0; return { yRatio: n, invertedYRatio: e, zRatio: o, xRatio: t, invertedXRatio: i, baseLineInvertedY: c, baseLineY: h, baseLineX: d } } }, { key: "getLogSeries", value: function (e) { var t = this, i = this.w; return i.globals.seriesLog = e.map(function (a, s) { var r = i.globals.seriesYAxisReverseMap[s]; return i.config.yaxis[r] && i.config.yaxis[r].logarithmic ? a.map(function (n) { return n === null ? null : t.getLogVal(i.config.yaxis[r].logBase, n, s) }) : a }), i.globals.invalidLogScale ? e : i.globals.seriesLog } }, { key: "getBaseLog", value: function (e, t) { return Math.log(t) / Math.log(e) } }, { key: "getLogVal", value: function (e, t, i) { if (t <= 0) return 0; var a = this.w, s = a.globals.minYArr[i] === 0 ? -1 : this.getBaseLog(e, a.globals.minYArr[i]), r = (a.globals.maxYArr[i] === 0 ? 0 : this.getBaseLog(e, a.globals.maxYArr[i])) - s; return t < 1 ? t / r : (this.getBaseLog(e, t) - s) / r } }, { key: "getLogYRatios", value: function (e) { var t = this, i = this.w, a = this.w.globals; return a.yLogRatio = e.slice(), a.logYRange = a.yRange.map(function (s, r) { var n = i.globals.seriesYAxisReverseMap[r]; if (i.config.yaxis[n] && t.w.config.yaxis[n].logarithmic) { var o, h = -Number.MAX_VALUE, c = Number.MIN_VALUE; return a.seriesLog.forEach(function (d, g) { d.forEach(function (f) { i.config.yaxis[g] && i.config.yaxis[g].logarithmic && (h = Math.max(f, h), c = Math.min(f, c)) }) }), o = Math.pow(a.yRange[r], Math.abs(c - h) / a.yRange[r]), a.yLogRatio[r] = o / a.gridHeight, o } }), a.invalidLogScale ? e.slice() : a.yLogRatio } }, { key: "drawSeriesByGroup", value: function (e, t, i, a) { var s = this.w, r = []; return e.series.length > 0 && t.forEach(function (n) { var o = [], h = []; e.i.forEach(function (c, d) { s.config.series[c].group === n && (o.push(e.series[d]), h.push(c)) }), o.length > 0 && r.push(a.draw(o, i, h)) }), r } }], [{ key: "checkComboSeries", value: function (e, t) { var i = !1, a = 0, s = 0; return t === void 0 && (t = "line"), e.length && e[0].type !== void 0 && e.forEach(function (r) { r.type !== "bar" && r.type !== "column" && r.type !== "candlestick" && r.type !== "boxPlot" || a++, r.type !== void 0 && r.type !== t && s++ }), s > 0 && (i = !0), { comboBarCount: a, comboCharts: i } } }, { key: "extendArrayProps", value: function (e, t, i) { var a, s, r, n, o, h; return (a = t) !== null && a !== void 0 && a.yaxis && (t = e.extendYAxis(t, i)), (s = t) !== null && s !== void 0 && s.annotations && (t.annotations.yaxis && (t = e.extendYAxisAnnotations(t)), (r = t) !== null && r !== void 0 && (n = r.annotations) !== null && n !== void 0 && n.xaxis && (t = e.extendXAxisAnnotations(t)), (o = t) !== null && o !== void 0 && (h = o.annotations) !== null && h !== void 0 && h.points && (t = e.extendPointAnnotations(t))), t } }]), p }(), Be = function () { function p(e) { F(this, p), this.w = e.w, this.annoCtx = e } return R(p, [{ key: "setOrientations", value: function (e) { var t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : null, i = this.w; if (e.label.orientation === "vertical") { var a = t !== null ? t : 0, s = i.globals.dom.baseEl.querySelector(".apexcharts-xaxis-annotations .apexcharts-xaxis-annotation-label[rel='".concat(a, "']")); if (s !== null) { var r = s.getBoundingClientRect(); s.setAttribute("x", parseFloat(s.getAttribute("x")) - r.height + 4), e.label.position === "top" ? s.setAttribute("y", parseFloat(s.getAttribute("y")) + r.width) : s.setAttribute("y", parseFloat(s.getAttribute("y")) - r.width); var n = this.annoCtx.graphics.rotateAroundCenter(s), o = n.x, h = n.y; s.setAttribute("transform", "rotate(-90 ".concat(o, " ").concat(h, ")")) } } } }, { key: "addBackgroundToAnno", value: function (e, t) { var i = this.w; if (!e || t.label.text === void 0 || t.label.text !== void 0 && !String(t.label.text).trim()) return null; var a = i.globals.dom.baseEl.querySelector(".apexcharts-grid").getBoundingClientRect(), s = e.getBoundingClientRect(), r = t.label.style.padding.left, n = t.label.style.padding.right, o = t.label.style.padding.top, h = t.label.style.padding.bottom; t.label.orientation === "vertical" && (o = t.label.style.padding.left, h = t.label.style.padding.right, r = t.label.style.padding.top, n = t.label.style.padding.bottom); var c = s.left - a.left - r, d = s.top - a.top - o, g = this.annoCtx.graphics.drawRect(c - i.globals.barPadForNumericAxis, d, s.width + r + n, s.height + o + h, t.label.borderRadius, t.label.style.background, 1, t.label.borderWidth, t.label.borderColor, 0); return t.id && g.node.classList.add(t.id), g } }, { key: "annotationsBackground", value: function () { var e = this, t = this.w, i = function (a, s, r) { var n = t.globals.dom.baseEl.querySelector(".apexcharts-".concat(r, "-annotations .apexcharts-").concat(r, "-annotation-label[rel='").concat(s, "']")); if (n) { var o = n.parentNode, h = e.addBackgroundToAnno(n, a); h && (o.insertBefore(h.node, n), a.label.mouseEnter && h.node.addEventListener("mouseenter", a.label.mouseEnter.bind(e, a)), a.label.mouseLeave && h.node.addEventListener("mouseleave", a.label.mouseLeave.bind(e, a)), a.label.click && h.node.addEventListener("click", a.label.click.bind(e, a))) } }; t.config.annotations.xaxis.map(function (a, s) { i(a, s, "xaxis") }), t.config.annotations.yaxis.map(function (a, s) { i(a, s, "yaxis") }), t.config.annotations.points.map(function (a, s) { i(a, s, "point") }) } }, { key: "getY1Y2", value: function (e, t) { var i, a = e === "y1" ? t.y : t.y2, s = !1, r = this.w; if (this.annoCtx.invertAxis) { var n = r.globals.labels; r.config.xaxis.convertedCatToNumeric && (n = r.globals.categoryLabels); var o = n.indexOf(a), h = r.globals.dom.baseEl.querySelector(".apexcharts-yaxis-texts-g text:nth-child(" + (o + 1) + ")"); i = h ? parseFloat(h.getAttribute("y")) : (r.globals.gridHeight / n.length - 1) * (o + 1) - r.globals.barHeight, t.seriesIndex !== void 0 && r.globals.barHeight && (i = i - r.globals.barHeight / 2 * (r.globals.series.length - 1) + r.globals.barHeight * t.seriesIndex) } else { var c, d = r.globals.seriesYAxisMap[t.yAxisIndex][0]; r.config.yaxis[t.yAxisIndex].logarithmic ? c = (a = new $(this.annoCtx.ctx).getLogVal(r.config.yaxis[t.yAxisIndex].logBase, a, d)) / r.globals.yLogRatio[d] : c = (a - r.globals.minYArr[d]) / (r.globals.yRange[d] / r.globals.gridHeight), c > r.globals.gridHeight ? (c = r.globals.gridHeight, s = !0) : c < 0 && (c = 0, s = !0), i = r.globals.gridHeight - c, !t.marker || t.y !== void 0 && t.y !== null || (i = 0), r.config.yaxis[t.yAxisIndex] && r.config.yaxis[t.yAxisIndex].reversed && (i = c) } return typeof a == "string" && a.indexOf("px") > -1 && (i = parseFloat(a)), { yP: i, clipped: s } } }, { key: "getX1X2", value: function (e, t) { var i, a = e === "x1" ? t.x : t.x2, s = this.w, r = this.annoCtx.invertAxis ? s.globals.minY : s.globals.minX, n = this.annoCtx.invertAxis ? s.globals.maxY : s.globals.maxX, o = this.annoCtx.invertAxis ? s.globals.yRange[0] : s.globals.xRange, h = !1; return i = this.annoCtx.inversedReversedAxis ? (n - a) / (o / s.globals.gridWidth) : (a - r) / (o / s.globals.gridWidth), s.config.xaxis.type !== "category" && !s.config.xaxis.convertedCatToNumeric || this.annoCtx.invertAxis || s.globals.dataFormatXNumeric || s.config.chart.sparkline.enabled || (i = this.getStringX(a)), typeof a == "string" && a.indexOf("px") > -1 && (i = parseFloat(a)), a == null && t.marker && (i = s.globals.gridWidth), t.seriesIndex !== void 0 && s.globals.barWidth && !this.annoCtx.invertAxis && (i = i - s.globals.barWidth / 2 * (s.globals.series.length - 1) + s.globals.barWidth * t.seriesIndex), i > s.globals.gridWidth ? (i = s.globals.gridWidth, h = !0) : i < 0 && (i = 0, h = !0), { x: i, clipped: h } } }, { key: "getStringX", value: function (e) { var t = this.w, i = e; t.config.xaxis.convertedCatToNumeric && t.globals.categoryLabels.length && (e = t.globals.categoryLabels.indexOf(e) + 1); var a = t.globals.labels.indexOf(e), s = t.globals.dom.baseEl.querySelector(".apexcharts-xaxis-texts-g text:nth-child(" + (a + 1) + ")"); return s && (i = parseFloat(s.getAttribute("x"))), i } }]), p }(), Xi = function () { function p(e) { F(this, p), this.w = e.w, this.annoCtx = e, this.invertAxis = this.annoCtx.invertAxis, this.helpers = new Be(this.annoCtx) } return R(p, [{ key: "addXaxisAnnotation", value: function (e, t, i) { var a, s = this.w, r = this.helpers.getX1X2("x1", e), n = r.x, o = r.clipped, h = !0, c = e.label.text, d = e.strokeDashArray; if (P.isNumber(n)) { if (e.x2 === null || e.x2 === void 0) { if (!o) { var g = this.annoCtx.graphics.drawLine(n + e.offsetX, 0 + e.offsetY, n + e.offsetX, s.globals.gridHeight + e.offsetY, e.borderColor, d, e.borderWidth); t.appendChild(g.node), e.id && g.node.classList.add(e.id) } } else { var f = this.helpers.getX1X2("x2", e); if (a = f.x, h = f.clipped, !o || !h) { if (a < n) { var x = n; n = a, a = x } var b = this.annoCtx.graphics.drawRect(n + e.offsetX, 0 + e.offsetY, a - n, s.globals.gridHeight + e.offsetY, 0, e.fillColor, e.opacity, 1, e.borderColor, d); b.node.classList.add("apexcharts-annotation-rect"), b.attr("clip-path", "url(#gridRectMask".concat(s.globals.cuid, ")")), t.appendChild(b.node), e.id && b.node.classList.add(e.id) } } if (!o || !h) { var v = this.annoCtx.graphics.getTextRects(c, parseFloat(e.label.style.fontSize)), y = e.label.position === "top" ? 4 : e.label.position === "center" ? s.globals.gridHeight / 2 + (e.label.orientation === "vertical" ? v.width / 2 : 0) : s.globals.gridHeight, w = this.annoCtx.graphics.drawText({ x: n + e.label.offsetX, y: y + e.label.offsetY - (e.label.orientation === "vertical" ? e.label.position === "top" ? v.width / 2 - 12 : -v.width / 2 : 0), text: c, textAnchor: e.label.textAnchor, fontSize: e.label.style.fontSize, fontFamily: e.label.style.fontFamily, fontWeight: e.label.style.fontWeight, foreColor: e.label.style.color, cssClass: "apexcharts-xaxis-annotation-label ".concat(e.label.style.cssClass, " ").concat(e.id ? e.id : "") }); w.attr({ rel: i }), t.appendChild(w.node), this.annoCtx.helpers.setOrientations(e, i) } } } }, { key: "drawXAxisAnnotations", value: function () { var e = this, t = this.w, i = this.annoCtx.graphics.group({ class: "apexcharts-xaxis-annotations" }); return t.config.annotations.xaxis.map(function (a, s) { e.addXaxisAnnotation(a, i.node, s) }), i } }]), p }(), K = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w, this.months31 = [1, 3, 5, 7, 8, 10, 12], this.months30 = [2, 4, 6, 9, 11], this.daysCntOfYear = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334] } return R(p, [{ key: "isValidDate", value: function (e) { return typeof e != "number" && !isNaN(this.parseDate(e)) } }, { key: "getTimeStamp", value: function (e) { return Date.parse(e) ? this.w.config.xaxis.labels.datetimeUTC ? new Date(new Date(e).toISOString().substr(0, 25)).getTime() : new Date(e).getTime() : e } }, { key: "getDate", value: function (e) { return this.w.config.xaxis.labels.datetimeUTC ? new Date(new Date(e).toUTCString()) : new Date(e) } }, { key: "parseDate", value: function (e) { var t = Date.parse(e); if (!isNaN(t)) return this.getTimeStamp(e); var i = Date.parse(e.replace(/-/g, "/").replace(/[a-z]+/gi, " ")); return i = this.getTimeStamp(i) } }, { key: "parseDateWithTimezone", value: function (e) { return Date.parse(e.replace(/-/g, "/").replace(/[a-z]+/gi, " ")) } }, { key: "formatDate", value: function (e, t) { var i = this.w.globals.locale, a = this.w.config.xaxis.labels.datetimeUTC, s = ["\0"].concat(te(i.months)), r = [""].concat(te(i.shortMonths)), n = [""].concat(te(i.days)), o = [""].concat(te(i.shortDays)); function h(S, L) { var C = S + ""; for (L = L || 2; C.length < L;)C = "0" + C; return C } var c = a ? e.getUTCFullYear() : e.getFullYear(); t = (t = (t = t.replace(/(^|[^\\])yyyy+/g, "$1" + c)).replace(/(^|[^\\])yy/g, "$1" + c.toString().substr(2, 2))).replace(/(^|[^\\])y/g, "$1" + c); var d = (a ? e.getUTCMonth() : e.getMonth()) + 1; t = (t = (t = (t = t.replace(/(^|[^\\])MMMM+/g, "$1" + s[0])).replace(/(^|[^\\])MMM/g, "$1" + r[0])).replace(/(^|[^\\])MM/g, "$1" + h(d))).replace(/(^|[^\\])M/g, "$1" + d); var g = a ? e.getUTCDate() : e.getDate(); t = (t = (t = (t = t.replace(/(^|[^\\])dddd+/g, "$1" + n[0])).replace(/(^|[^\\])ddd/g, "$1" + o[0])).replace(/(^|[^\\])dd/g, "$1" + h(g))).replace(/(^|[^\\])d/g, "$1" + g); var f = a ? e.getUTCHours() : e.getHours(), x = f > 12 ? f - 12 : f === 0 ? 12 : f; t = (t = (t = (t = t.replace(/(^|[^\\])HH+/g, "$1" + h(f))).replace(/(^|[^\\])H/g, "$1" + f)).replace(/(^|[^\\])hh+/g, "$1" + h(x))).replace(/(^|[^\\])h/g, "$1" + x); var b = a ? e.getUTCMinutes() : e.getMinutes(); t = (t = t.replace(/(^|[^\\])mm+/g, "$1" + h(b))).replace(/(^|[^\\])m/g, "$1" + b); var v = a ? e.getUTCSeconds() : e.getSeconds(); t = (t = t.replace(/(^|[^\\])ss+/g, "$1" + h(v))).replace(/(^|[^\\])s/g, "$1" + v); var y = a ? e.getUTCMilliseconds() : e.getMilliseconds(); t = t.replace(/(^|[^\\])fff+/g, "$1" + h(y, 3)), y = Math.round(y / 10), t = t.replace(/(^|[^\\])ff/g, "$1" + h(y)), y = Math.round(y / 10); var w = f < 12 ? "AM" : "PM"; t = (t = (t = t.replace(/(^|[^\\])f/g, "$1" + y)).replace(/(^|[^\\])TT+/g, "$1" + w)).replace(/(^|[^\\])T/g, "$1" + w.charAt(0)); var l = w.toLowerCase(); t = (t = t.replace(/(^|[^\\])tt+/g, "$1" + l)).replace(/(^|[^\\])t/g, "$1" + l.charAt(0)); var u = -e.getTimezoneOffset(), m = a || !u ? "Z" : u > 0 ? "+" : "-"; if (!a) { var A = (u = Math.abs(u)) % 60; m += h(Math.floor(u / 60)) + ":" + h(A) } t = t.replace(/(^|[^\\])K/g, "$1" + m); var k = (a ? e.getUTCDay() : e.getDay()) + 1; return t = (t = (t = (t = (t = t.replace(new RegExp(n[0], "g"), n[k])).replace(new RegExp(o[0], "g"), o[k])).replace(new RegExp(s[0], "g"), s[d])).replace(new RegExp(r[0], "g"), r[d])).replace(/\\(.)/g, "$1") } }, { key: "getTimeUnitsfromTimestamp", value: function (e, t, i) { var a = this.w; a.config.xaxis.min !== void 0 && (e = a.config.xaxis.min), a.config.xaxis.max !== void 0 && (t = a.config.xaxis.max); var s = this.getDate(e), r = this.getDate(t), n = this.formatDate(s, "yyyy MM dd HH mm ss fff").split(" "), o = this.formatDate(r, "yyyy MM dd HH mm ss fff").split(" "); return { minMillisecond: parseInt(n[6], 10), maxMillisecond: parseInt(o[6], 10), minSecond: parseInt(n[5], 10), maxSecond: parseInt(o[5], 10), minMinute: parseInt(n[4], 10), maxMinute: parseInt(o[4], 10), minHour: parseInt(n[3], 10), maxHour: parseInt(o[3], 10), minDate: parseInt(n[2], 10), maxDate: parseInt(o[2], 10), minMonth: parseInt(n[1], 10) - 1, maxMonth: parseInt(o[1], 10) - 1, minYear: parseInt(n[0], 10), maxYear: parseInt(o[0], 10) } } }, { key: "isLeapYear", value: function (e) { return e % 4 == 0 && e % 100 != 0 || e % 400 == 0 } }, { key: "calculcateLastDaysOfMonth", value: function (e, t, i) { return this.determineDaysOfMonths(e, t) - i } }, { key: "determineDaysOfYear", value: function (e) { var t = 365; return this.isLeapYear(e) && (t = 366), t } }, { key: "determineRemainingDaysOfYear", value: function (e, t, i) { var a = this.daysCntOfYear[t] + i; return t > 1 && this.isLeapYear() && a++, a } }, { key: "determineDaysOfMonths", value: function (e, t) { var i = 30; switch (e = P.monthMod(e), !0) { case this.months30.indexOf(e) > -1: e === 2 && (i = this.isLeapYear(t) ? 29 : 28); break; case this.months31.indexOf(e) > -1: default: i = 31 }return i } }]), p }(), ze = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w, this.tooltipKeyFormat = "dd MMM" } return R(p, [{ key: "xLabelFormat", value: function (e, t, i, a) { var s = this.w; if (s.config.xaxis.type === "datetime" && s.config.xaxis.labels.formatter === void 0 && s.config.tooltip.x.formatter === void 0) { var r = new K(this.ctx); return r.formatDate(r.getDate(t), s.config.tooltip.x.format) } return e(t, i, a) } }, { key: "defaultGeneralFormatter", value: function (e) { return Array.isArray(e) ? e.map(function (t) { return t }) : e } }, { key: "defaultYFormatter", value: function (e, t, i) { var a = this.w; if (P.isNumber(e)) if (a.globals.yValueDecimal !== 0) e = e.toFixed(t.decimalsInFloat !== void 0 ? t.decimalsInFloat : a.globals.yValueDecimal); else { var s = e.toFixed(0); e = e == s ? s : e.toFixed(1) } return e } }, { key: "setLabelFormatters", value: function () { var e = this, t = this.w; return t.globals.xaxisTooltipFormatter = function (i) { return e.defaultGeneralFormatter(i) }, t.globals.ttKeyFormatter = function (i) { return e.defaultGeneralFormatter(i) }, t.globals.ttZFormatter = function (i) { return i }, t.globals.legendFormatter = function (i) { return e.defaultGeneralFormatter(i) }, t.config.xaxis.labels.formatter !== void 0 ? t.globals.xLabelFormatter = t.config.xaxis.labels.formatter : t.globals.xLabelFormatter = function (i) { if (P.isNumber(i)) { if (!t.config.xaxis.convertedCatToNumeric && t.config.xaxis.type === "numeric") { if (P.isNumber(t.config.xaxis.decimalsInFloat)) return i.toFixed(t.config.xaxis.decimalsInFloat); var a = t.globals.maxX - t.globals.minX; return a > 0 && a < 100 ? i.toFixed(1) : i.toFixed(0) } return t.globals.isBarHorizontal && t.globals.maxY - t.globals.minYArr < 4 ? i.toFixed(1) : i.toFixed(0) } return i }, typeof t.config.tooltip.x.formatter == "function" ? t.globals.ttKeyFormatter = t.config.tooltip.x.formatter : t.globals.ttKeyFormatter = t.globals.xLabelFormatter, typeof t.config.xaxis.tooltip.formatter == "function" && (t.globals.xaxisTooltipFormatter = t.config.xaxis.tooltip.formatter), (Array.isArray(t.config.tooltip.y) || t.config.tooltip.y.formatter !== void 0) && (t.globals.ttVal = t.config.tooltip.y), t.config.tooltip.z.formatter !== void 0 && (t.globals.ttZFormatter = t.config.tooltip.z.formatter), t.config.legend.formatter !== void 0 && (t.globals.legendFormatter = t.config.legend.formatter), t.config.yaxis.forEach(function (i, a) { i.labels.formatter !== void 0 ? t.globals.yLabelFormatters[a] = i.labels.formatter : t.globals.yLabelFormatters[a] = function (s) { return t.globals.xyCharts ? Array.isArray(s) ? s.map(function (r) { return e.defaultYFormatter(r, i, a) }) : e.defaultYFormatter(s, i, a) : s } }), t.globals } }, { key: "heatmapLabelFormatters", value: function () { var e = this.w; if (e.config.chart.type === "heatmap") { e.globals.yAxisScale[0].result = e.globals.seriesNames.slice(); var t = e.globals.seriesNames.reduce(function (i, a) { return i.length > a.length ? i : a }, 0); e.globals.yAxisScale[0].niceMax = t, e.globals.yAxisScale[0].niceMin = t } } }]), p }(), ge = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w } return R(p, [{ key: "getLabel", value: function (e, t, i, a) { var s = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : [], r = arguments.length > 5 && arguments[5] !== void 0 ? arguments[5] : "12px", n = !(arguments.length > 6 && arguments[6] !== void 0) || arguments[6], o = this.w, h = e[a] === void 0 ? "" : e[a], c = h, d = o.globals.xLabelFormatter, g = o.config.xaxis.labels.formatter, f = !1, x = new ze(this.ctx), b = h; n && (c = x.xLabelFormat(d, h, b, { i: a, dateFormatter: new K(this.ctx).formatDate, w: o }), g !== void 0 && (c = g(h, e[a], { i: a, dateFormatter: new K(this.ctx).formatDate, w: o }))); var v, y; t.length > 0 ? (v = t[a].unit, y = null, t.forEach(function (m) { m.unit === "month" ? y = "year" : m.unit === "day" ? y = "month" : m.unit === "hour" ? y = "day" : m.unit === "minute" && (y = "hour") }), f = y === v, i = t[a].position, c = t[a].value) : o.config.xaxis.type === "datetime" && g === void 0 && (c = ""), c === void 0 && (c = ""), c = Array.isArray(c) ? c : c.toString(); var w = new X(this.ctx), l = {}; l = o.globals.rotateXLabels && n ? w.getTextRects(c, parseInt(r, 10), null, "rotate(".concat(o.config.xaxis.labels.rotate, " 0 0)"), !1) : w.getTextRects(c, parseInt(r, 10)); var u = !o.config.xaxis.labels.showDuplicates && this.ctx.timeScale; return !Array.isArray(c) && (String(c) === "NaN" || s.indexOf(c) >= 0 && u) && (c = ""), { x: i, text: c, textRect: l, isBold: f } } }, { key: "checkLabelBasedOnTickamount", value: function (e, t, i) { var a = this.w, s = a.config.xaxis.tickAmount; return s === "dataPoints" && (s = Math.round(a.globals.gridWidth / 120)), s > i || e % Math.round(i / (s + 1)) == 0 || (t.text = ""), t } }, { key: "checkForOverflowingLabels", value: function (e, t, i, a, s) { var r = this.w; if (e === 0 && r.globals.skipFirstTimelinelabel && (t.text = ""), e === i - 1 && r.globals.skipLastTimelinelabel && (t.text = ""), r.config.xaxis.labels.hideOverlappingLabels && a.length > 0) { var n = s[s.length - 1]; t.x < n.textRect.width / (r.globals.rotateXLabels ? Math.abs(r.config.xaxis.labels.rotate) / 12 : 1.01) + n.x && (t.text = "") } return t } }, { key: "checkForReversedLabels", value: function (e, t) { var i = this.w; return i.config.yaxis[e] && i.config.yaxis[e].reversed && t.reverse(), t } }, { key: "yAxisAllSeriesCollapsed", value: function (e) { var t = this.w.globals; return !t.seriesYAxisMap[e].some(function (i) { return t.collapsedSeriesIndices.indexOf(i) === -1 }) } }, { key: "translateYAxisIndex", value: function (e) { var t = this.w, i = t.globals, a = t.config.yaxis; return i.series.length > a.length || a.some(function (s) { return Array.isArray(s.seriesName) }) ? e : i.seriesYAxisReverseMap[e] } }, { key: "isYAxisHidden", value: function (e) { var t = this.w, i = t.config.yaxis[e]; if (!i.show || this.yAxisAllSeriesCollapsed(e)) return !0; if (!i.showForNullSeries) { var a = t.globals.seriesYAxisMap[e], s = new $(this.ctx); return a.every(function (r) { return s.isSeriesNull(r) }) } return !1 } }, { key: "getYAxisForeColor", value: function (e, t) { var i = this.w; return Array.isArray(e) && i.globals.yAxisScale[t] && this.ctx.theme.pushExtraColors(e, i.globals.yAxisScale[t].result.length, !1), e } }, { key: "drawYAxisTicks", value: function (e, t, i, a, s, r, n) { var o = this.w, h = new X(this.ctx), c = o.globals.translateY + o.config.yaxis[s].labels.offsetY; if (o.globals.isBarHorizontal ? c = 0 : o.config.chart.type === "heatmap" && (c += r / 2), a.show && t > 0) { o.config.yaxis[s].opposite === !0 && (e += a.width); for (var d = t; d >= 0; d--) { var g = h.drawLine(e + i.offsetX - a.width + a.offsetX, c + a.offsetY, e + i.offsetX + a.offsetX, c + a.offsetY, a.color); n.add(g), c += r } } } }]), p }(), Ei = function () { function p(e) { F(this, p), this.w = e.w, this.annoCtx = e, this.helpers = new Be(this.annoCtx), this.axesUtils = new ge(this.annoCtx) } return R(p, [{ key: "addYaxisAnnotation", value: function (e, t, i) { var a, s = this.w, r = e.strokeDashArray, n = this.helpers.getY1Y2("y1", e), o = n.yP, h = n.clipped, c = !0, d = !1, g = e.label.text; if (e.y2 === null || e.y2 === void 0) { if (!h) { d = !0; var f = this.annoCtx.graphics.drawLine(0 + e.offsetX, o + e.offsetY, this._getYAxisAnnotationWidth(e), o + e.offsetY, e.borderColor, r, e.borderWidth); t.appendChild(f.node), e.id && f.node.classList.add(e.id) } } else { if (a = (n = this.helpers.getY1Y2("y2", e)).yP, c = n.clipped, a > o) { var x = o; o = a, a = x } if (!h || !c) { d = !0; var b = this.annoCtx.graphics.drawRect(0 + e.offsetX, a + e.offsetY, this._getYAxisAnnotationWidth(e), o - a, 0, e.fillColor, e.opacity, 1, e.borderColor, r); b.node.classList.add("apexcharts-annotation-rect"), b.attr("clip-path", "url(#gridRectMask".concat(s.globals.cuid, ")")), t.appendChild(b.node), e.id && b.node.classList.add(e.id) } } if (d) { var v = e.label.position === "right" ? s.globals.gridWidth : e.label.position === "center" ? s.globals.gridWidth / 2 : 0, y = this.annoCtx.graphics.drawText({ x: v + e.label.offsetX, y: (a ?? o) + e.label.offsetY - 3, text: g, textAnchor: e.label.textAnchor, fontSize: e.label.style.fontSize, fontFamily: e.label.style.fontFamily, fontWeight: e.label.style.fontWeight, foreColor: e.label.style.color, cssClass: "apexcharts-yaxis-annotation-label ".concat(e.label.style.cssClass, " ").concat(e.id ? e.id : "") }); y.attr({ rel: i }), t.appendChild(y.node) } } }, { key: "_getYAxisAnnotationWidth", value: function (e) { var t = this.w; return t.globals.gridWidth, (e.width.indexOf("%") > -1 ? t.globals.gridWidth * parseInt(e.width, 10) / 100 : parseInt(e.width, 10)) + e.offsetX } }, { key: "drawYAxisAnnotations", value: function () { var e = this, t = this.w, i = this.annoCtx.graphics.group({ class: "apexcharts-yaxis-annotations" }); return t.config.annotations.yaxis.forEach(function (a, s) { a.yAxisIndex = e.axesUtils.translateYAxisIndex(a.yAxisIndex), e.axesUtils.isYAxisHidden(a.yAxisIndex) && e.axesUtils.yAxisAllSeriesCollapsed(a.yAxisIndex) || e.addYaxisAnnotation(a, i.node, s) }), i } }]), p }(), Yi = function () { function p(e) { F(this, p), this.w = e.w, this.annoCtx = e, this.helpers = new Be(this.annoCtx) } return R(p, [{ key: "addPointAnnotation", value: function (e, t, i) { if (!(this.w.globals.collapsedSeriesIndices.indexOf(e.seriesIndex) > -1)) { var a = this.helpers.getX1X2("x1", e), s = a.x, r = a.clipped, n = (a = this.helpers.getY1Y2("y1", e)).yP, o = a.clipped; if (P.isNumber(s) && !o && !r) { var h = { pSize: e.marker.size, pointStrokeWidth: e.marker.strokeWidth, pointFillColor: e.marker.fillColor, pointStrokeColor: e.marker.strokeColor, shape: e.marker.shape, pRadius: e.marker.radius, class: "apexcharts-point-annotation-marker ".concat(e.marker.cssClass, " ").concat(e.id ? e.id : "") }, c = this.annoCtx.graphics.drawMarker(s + e.marker.offsetX, n + e.marker.offsetY, h); t.appendChild(c.node); var d = e.label.text ? e.label.text : "", g = this.annoCtx.graphics.drawText({ x: s + e.label.offsetX, y: n + e.label.offsetY - e.marker.size - parseFloat(e.label.style.fontSize) / 1.6, text: d, textAnchor: e.label.textAnchor, fontSize: e.label.style.fontSize, fontFamily: e.label.style.fontFamily, fontWeight: e.label.style.fontWeight, foreColor: e.label.style.color, cssClass: "apexcharts-point-annotation-label ".concat(e.label.style.cssClass, " ").concat(e.id ? e.id : "") }); if (g.attr({ rel: i }), t.appendChild(g.node), e.customSVG.SVG) { var f = this.annoCtx.graphics.group({ class: "apexcharts-point-annotations-custom-svg " + e.customSVG.cssClass }); f.attr({ transform: "translate(".concat(s + e.customSVG.offsetX, ", ").concat(n + e.customSVG.offsetY, ")") }), f.node.innerHTML = e.customSVG.SVG, t.appendChild(f.node) } if (e.image.path) { var x = e.image.width ? e.image.width : 20, b = e.image.height ? e.image.height : 20; c = this.annoCtx.addImage({ x: s + e.image.offsetX - x / 2, y: n + e.image.offsetY - b / 2, width: x, height: b, path: e.image.path, appendTo: ".apexcharts-point-annotations" }) } e.mouseEnter && c.node.addEventListener("mouseenter", e.mouseEnter.bind(this, e)), e.mouseLeave && c.node.addEventListener("mouseleave", e.mouseLeave.bind(this, e)), e.click && c.node.addEventListener("click", e.click.bind(this, e)) } } } }, { key: "drawPointAnnotations", value: function () { var e = this, t = this.w, i = this.annoCtx.graphics.group({ class: "apexcharts-point-annotations" }); return t.config.annotations.points.map(function (a, s) { e.addPointAnnotation(a, i.node, s) }), i } }]), p }(), Xt = { name: "en", options: { months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], toolbar: { exportToSVG: "Download SVG", exportToPNG: "Download PNG", exportToCSV: "Download CSV", menu: "Menu", selection: "Selection", selectionZoom: "Selection Zoom", zoomIn: "Zoom In", zoomOut: "Zoom Out", pan: "Panning", reset: "Reset Zoom" } } }, ue = function () { function p() { F(this, p), this.yAxis = { show: !0, showAlways: !1, showForNullSeries: !0, seriesName: void 0, opposite: !1, reversed: !1, logarithmic: !1, logBase: 10, tickAmount: void 0, stepSize: void 0, forceNiceScale: !1, max: void 0, min: void 0, floating: !1, decimalsInFloat: void 0, labels: { show: !0, minWidth: 0, maxWidth: 160, offsetX: 0, offsetY: 0, align: void 0, rotate: 0, padding: 20, style: { colors: [], fontSize: "11px", fontWeight: 400, fontFamily: void 0, cssClass: "" }, formatter: void 0 }, axisBorder: { show: !1, color: "#e0e0e0", width: 1, offsetX: 0, offsetY: 0 }, axisTicks: { show: !1, color: "#e0e0e0", width: 6, offsetX: 0, offsetY: 0 }, title: { text: void 0, rotate: -90, offsetY: 0, offsetX: 0, style: { color: void 0, fontSize: "11px", fontWeight: 900, fontFamily: void 0, cssClass: "" } }, tooltip: { enabled: !1, offsetX: 0 }, crosshairs: { show: !0, position: "front", stroke: { color: "#b6b6b6", width: 1, dashArray: 0 } } }, this.pointAnnotation = { id: void 0, x: 0, y: null, yAxisIndex: 0, seriesIndex: void 0, mouseEnter: void 0, mouseLeave: void 0, click: void 0, marker: { size: 4, fillColor: "#fff", strokeWidth: 2, strokeColor: "#333", shape: "circle", offsetX: 0, offsetY: 0, cssClass: "" }, label: { borderColor: "#c2c2c2", borderWidth: 1, borderRadius: 2, text: void 0, textAnchor: "middle", offsetX: 0, offsetY: 0, mouseEnter: void 0, mouseLeave: void 0, click: void 0, style: { background: "#fff", color: void 0, fontSize: "11px", fontFamily: void 0, fontWeight: 400, cssClass: "", padding: { left: 5, right: 5, top: 2, bottom: 2 } } }, customSVG: { SVG: void 0, cssClass: void 0, offsetX: 0, offsetY: 0 }, image: { path: void 0, width: 20, height: 20, offsetX: 0, offsetY: 0 } }, this.yAxisAnnotation = { id: void 0, y: 0, y2: null, strokeDashArray: 1, fillColor: "#c2c2c2", borderColor: "#c2c2c2", borderWidth: 1, opacity: .3, offsetX: 0, offsetY: 0, width: "100%", yAxisIndex: 0, label: { borderColor: "#c2c2c2", borderWidth: 1, borderRadius: 2, text: void 0, textAnchor: "end", position: "right", offsetX: 0, offsetY: -3, mouseEnter: void 0, mouseLeave: void 0, click: void 0, style: { background: "#fff", color: void 0, fontSize: "11px", fontFamily: void 0, fontWeight: 400, cssClass: "", padding: { left: 5, right: 5, top: 2, bottom: 2 } } } }, this.xAxisAnnotation = { id: void 0, x: 0, x2: null, strokeDashArray: 1, fillColor: "#c2c2c2", borderColor: "#c2c2c2", borderWidth: 1, opacity: .3, offsetX: 0, offsetY: 0, label: { borderColor: "#c2c2c2", borderWidth: 1, borderRadius: 2, text: void 0, textAnchor: "middle", orientation: "vertical", position: "top", offsetX: 0, offsetY: 0, mouseEnter: void 0, mouseLeave: void 0, click: void 0, style: { background: "#fff", color: void 0, fontSize: "11px", fontFamily: void 0, fontWeight: 400, cssClass: "", padding: { left: 5, right: 5, top: 2, bottom: 2 } } } }, this.text = { x: 0, y: 0, text: "", textAnchor: "start", foreColor: void 0, fontSize: "13px", fontFamily: void 0, fontWeight: 400, appendTo: ".apexcharts-annotations", backgroundColor: "transparent", borderColor: "#c2c2c2", borderRadius: 0, borderWidth: 0, paddingLeft: 4, paddingRight: 4, paddingTop: 2, paddingBottom: 2 } } return R(p, [{ key: "init", value: function () { return { annotations: { yaxis: [this.yAxisAnnotation], xaxis: [this.xAxisAnnotation], points: [this.pointAnnotation], texts: [], images: [], shapes: [] }, chart: { animations: { enabled: !0, easing: "easeinout", speed: 800, animateGradually: { delay: 150, enabled: !0 }, dynamicAnimation: { enabled: !0, speed: 350 } }, background: "", locales: [Xt], defaultLocale: "en", dropShadow: { enabled: !1, enabledOnSeries: void 0, top: 2, left: 2, blur: 4, color: "#000", opacity: .35 }, events: { animationEnd: void 0, beforeMount: void 0, mounted: void 0, updated: void 0, click: void 0, mouseMove: void 0, mouseLeave: void 0, xAxisLabelClick: void 0, legendClick: void 0, markerClick: void 0, selection: void 0, dataPointSelection: void 0, dataPointMouseEnter: void 0, dataPointMouseLeave: void 0, beforeZoom: void 0, beforeResetZoom: void 0, zoomed: void 0, scrolled: void 0, brushScrolled: void 0 }, foreColor: "#373d3f", fontFamily: "Helvetica, Arial, sans-serif", height: "auto", parentHeightOffset: 15, redrawOnParentResize: !0, redrawOnWindowResize: !0, id: void 0, group: void 0, nonce: void 0, offsetX: 0, offsetY: 0, selection: { enabled: !1, type: "x", fill: { color: "#24292e", opacity: .1 }, stroke: { width: 1, color: "#24292e", opacity: .4, dashArray: 3 }, xaxis: { min: void 0, max: void 0 }, yaxis: { min: void 0, max: void 0 } }, sparkline: { enabled: !1 }, brush: { enabled: !1, autoScaleYaxis: !0, target: void 0, targets: void 0 }, stacked: !1, stackOnlyBar: !0, stackType: "normal", toolbar: { show: !0, offsetX: 0, offsetY: 0, tools: { download: !0, selection: !0, zoom: !0, zoomin: !0, zoomout: !0, pan: !0, reset: !0, customIcons: [] }, export: { csv: { filename: void 0, columnDelimiter: ",", headerCategory: "category", headerValue: "value", categoryFormatter: void 0, valueFormatter: void 0 }, png: { filename: void 0 }, svg: { filename: void 0 }, scale: void 0, width: void 0 }, autoSelected: "zoom" }, type: "line", width: "100%", zoom: { enabled: !0, type: "x", autoScaleYaxis: !1, allowMouseWheelZoom: !0, zoomedArea: { fill: { color: "#90CAF9", opacity: .4 }, stroke: { color: "#0D47A1", opacity: .4, width: 1 } } } }, plotOptions: { line: { isSlopeChart: !1 }, area: { fillTo: "origin" }, bar: { horizontal: !1, columnWidth: "70%", barHeight: "70%", distributed: !1, borderRadius: 0, borderRadiusApplication: "around", borderRadiusWhenStacked: "last", rangeBarOverlap: !0, rangeBarGroupRows: !1, hideZeroBarsWhenGrouped: !1, isDumbbell: !1, dumbbellColors: void 0, isFunnel: !1, isFunnel3d: !0, colors: { ranges: [], backgroundBarColors: [], backgroundBarOpacity: 1, backgroundBarRadius: 0 }, dataLabels: { position: "top", maxItems: 100, hideOverflowingLabels: !0, orientation: "horizontal", total: { enabled: !1, formatter: void 0, offsetX: 0, offsetY: 0, style: { color: "#373d3f", fontSize: "12px", fontFamily: void 0, fontWeight: 600 } } } }, bubble: { zScaling: !0, minBubbleRadius: void 0, maxBubbleRadius: void 0 }, candlestick: { colors: { upward: "#00B746", downward: "#EF403C" }, wick: { useFillColor: !0 } }, boxPlot: { colors: { upper: "#00E396", lower: "#008FFB" } }, heatmap: { radius: 2, enableShades: !0, shadeIntensity: .5, reverseNegativeShade: !1, distributed: !1, useFillColorAsStroke: !1, colorScale: { inverse: !1, ranges: [], min: void 0, max: void 0 } }, treemap: { enableShades: !0, shadeIntensity: .5, distributed: !1, reverseNegativeShade: !1, useFillColorAsStroke: !1, borderRadius: 4, dataLabels: { format: "scale" }, colorScale: { inverse: !1, ranges: [], min: void 0, max: void 0 } }, radialBar: { inverseOrder: !1, startAngle: 0, endAngle: 360, offsetX: 0, offsetY: 0, hollow: { margin: 5, size: "50%", background: "transparent", image: void 0, imageWidth: 150, imageHeight: 150, imageOffsetX: 0, imageOffsetY: 0, imageClipped: !0, position: "front", dropShadow: { enabled: !1, top: 0, left: 0, blur: 3, color: "#000", opacity: .5 } }, track: { show: !0, startAngle: void 0, endAngle: void 0, background: "#f2f2f2", strokeWidth: "97%", opacity: 1, margin: 5, dropShadow: { enabled: !1, top: 0, left: 0, blur: 3, color: "#000", opacity: .5 } }, dataLabels: { show: !0, name: { show: !0, fontSize: "16px", fontFamily: void 0, fontWeight: 600, color: void 0, offsetY: 0, formatter: function (e) { return e } }, value: { show: !0, fontSize: "14px", fontFamily: void 0, fontWeight: 400, color: void 0, offsetY: 16, formatter: function (e) { return e + "%" } }, total: { show: !1, label: "Total", fontSize: "16px", fontWeight: 600, fontFamily: void 0, color: void 0, formatter: function (e) { return e.globals.seriesTotals.reduce(function (t, i) { return t + i }, 0) / e.globals.series.length + "%" } } }, barLabels: { enabled: !1, offsetX: 0, offsetY: 0, useSeriesColors: !0, fontFamily: void 0, fontWeight: 600, fontSize: "16px", formatter: function (e) { return e }, onClick: void 0 } }, pie: { customScale: 1, offsetX: 0, offsetY: 0, startAngle: 0, endAngle: 360, expandOnClick: !0, dataLabels: { offset: 0, minAngleToShowLabel: 10 }, donut: { size: "65%", background: "transparent", labels: { show: !1, name: { show: !0, fontSize: "16px", fontFamily: void 0, fontWeight: 600, color: void 0, offsetY: -10, formatter: function (e) { return e } }, value: { show: !0, fontSize: "20px", fontFamily: void 0, fontWeight: 400, color: void 0, offsetY: 10, formatter: function (e) { return e } }, total: { show: !1, showAlways: !1, label: "Total", fontSize: "16px", fontWeight: 400, fontFamily: void 0, color: void 0, formatter: function (e) { return e.globals.seriesTotals.reduce(function (t, i) { return t + i }, 0) } } } } }, polarArea: { rings: { strokeWidth: 1, strokeColor: "#e8e8e8" }, spokes: { strokeWidth: 1, connectorColors: "#e8e8e8" } }, radar: { size: void 0, offsetX: 0, offsetY: 0, polygons: { strokeWidth: 1, strokeColors: "#e8e8e8", connectorColors: "#e8e8e8", fill: { colors: void 0 } } } }, colors: void 0, dataLabels: { enabled: !0, enabledOnSeries: void 0, formatter: function (e) { return e !== null ? e : "" }, textAnchor: "middle", distributed: !1, offsetX: 0, offsetY: 0, style: { fontSize: "12px", fontFamily: void 0, fontWeight: 600, colors: void 0 }, background: { enabled: !0, foreColor: "#fff", borderRadius: 2, padding: 4, opacity: .9, borderWidth: 1, borderColor: "#fff", dropShadow: { enabled: !1, top: 1, left: 1, blur: 1, color: "#000", opacity: .45 } }, dropShadow: { enabled: !1, top: 1, left: 1, blur: 1, color: "#000", opacity: .45 } }, fill: { type: "solid", colors: void 0, opacity: .85, gradient: { shade: "dark", type: "horizontal", shadeIntensity: .5, gradientToColors: void 0, inverseColors: !0, opacityFrom: 1, opacityTo: 1, stops: [0, 50, 100], colorStops: [] }, image: { src: [], width: void 0, height: void 0 }, pattern: { style: "squares", width: 6, height: 6, strokeWidth: 2 } }, forecastDataPoints: { count: 0, fillOpacity: .5, strokeWidth: void 0, dashArray: 4 }, grid: { show: !0, borderColor: "#e0e0e0", strokeDashArray: 0, position: "back", xaxis: { lines: { show: !1 } }, yaxis: { lines: { show: !0 } }, row: { colors: void 0, opacity: .5 }, column: { colors: void 0, opacity: .5 }, padding: { top: 0, right: 10, bottom: 0, left: 12 } }, labels: [], legend: { show: !0, showForSingleSeries: !1, showForNullSeries: !0, showForZeroSeries: !0, floating: !1, position: "bottom", horizontalAlign: "center", inverseOrder: !1, fontSize: "12px", fontFamily: void 0, fontWeight: 400, width: void 0, height: void 0, formatter: void 0, tooltipHoverFormatter: void 0, offsetX: -20, offsetY: 4, customLegendItems: [], labels: { colors: void 0, useSeriesColors: !1 }, markers: { size: 7, fillColors: void 0, strokeWidth: 1, shape: void 0, offsetX: 0, offsetY: 0, customHTML: void 0, onClick: void 0 }, itemMargin: { horizontal: 5, vertical: 4 }, onItemClick: { toggleDataSeries: !0 }, onItemHover: { highlightDataSeries: !0 } }, markers: { discrete: [], size: 0, colors: void 0, strokeColors: "#fff", strokeWidth: 2, strokeOpacity: .9, strokeDashArray: 0, fillOpacity: 1, shape: "circle", offsetX: 0, offsetY: 0, showNullDataPoints: !0, onClick: void 0, onDblClick: void 0, hover: { size: void 0, sizeOffset: 3 } }, noData: { text: void 0, align: "center", verticalAlign: "middle", offsetX: 0, offsetY: 0, style: { color: void 0, fontSize: "14px", fontFamily: void 0 } }, responsive: [], series: void 0, states: { normal: { filter: { type: "none", value: 0 } }, hover: { filter: { type: "lighten", value: .1 } }, active: { allowMultipleDataPointsSelection: !1, filter: { type: "darken", value: .5 } } }, title: { text: void 0, align: "left", margin: 5, offsetX: 0, offsetY: 0, floating: !1, style: { fontSize: "14px", fontWeight: 900, fontFamily: void 0, color: void 0 } }, subtitle: { text: void 0, align: "left", margin: 5, offsetX: 0, offsetY: 30, floating: !1, style: { fontSize: "12px", fontWeight: 400, fontFamily: void 0, color: void 0 } }, stroke: { show: !0, curve: "smooth", lineCap: "butt", width: 2, colors: void 0, dashArray: 0, fill: { type: "solid", colors: void 0, opacity: .85, gradient: { shade: "dark", type: "horizontal", shadeIntensity: .5, gradientToColors: void 0, inverseColors: !0, opacityFrom: 1, opacityTo: 1, stops: [0, 50, 100], colorStops: [] } } }, tooltip: { enabled: !0, enabledOnSeries: void 0, shared: !0, hideEmptySeries: !1, followCursor: !1, intersect: !1, inverseOrder: !1, custom: void 0, fillSeriesColor: !1, theme: "light", cssClass: "", style: { fontSize: "12px", fontFamily: void 0 }, onDatasetHover: { highlightDataSeries: !1 }, x: { show: !0, format: "dd MMM", formatter: void 0 }, y: { formatter: void 0, title: { formatter: function (e) { return e ? e + ": " : "" } } }, z: { formatter: void 0, title: "Size: " }, marker: { show: !0, fillColors: void 0 }, items: { display: "flex" }, fixed: { enabled: !1, position: "topRight", offsetX: 0, offsetY: 0 } }, xaxis: { type: "category", categories: [], convertedCatToNumeric: !1, offsetX: 0, offsetY: 0, overwriteCategories: void 0, labels: { show: !0, rotate: -45, rotateAlways: !1, hideOverlappingLabels: !0, trim: !1, minHeight: void 0, maxHeight: 120, showDuplicates: !0, style: { colors: [], fontSize: "12px", fontWeight: 400, fontFamily: void 0, cssClass: "" }, offsetX: 0, offsetY: 0, format: void 0, formatter: void 0, datetimeUTC: !0, datetimeFormatter: { year: "yyyy", month: "MMM 'yy", day: "dd MMM", hour: "HH:mm", minute: "HH:mm:ss", second: "HH:mm:ss" } }, group: { groups: [], style: { colors: [], fontSize: "12px", fontWeight: 400, fontFamily: void 0, cssClass: "" } }, axisBorder: { show: !0, color: "#e0e0e0", width: "100%", height: 1, offsetX: 0, offsetY: 0 }, axisTicks: { show: !0, color: "#e0e0e0", height: 6, offsetX: 0, offsetY: 0 }, stepSize: void 0, tickAmount: void 0, tickPlacement: "on", min: void 0, max: void 0, range: void 0, floating: !1, decimalsInFloat: void 0, position: "bottom", title: { text: void 0, offsetX: 0, offsetY: 0, style: { color: void 0, fontSize: "12px", fontWeight: 900, fontFamily: void 0, cssClass: "" } }, crosshairs: { show: !0, width: 1, position: "back", opacity: .9, stroke: { color: "#b6b6b6", width: 1, dashArray: 3 }, fill: { type: "solid", color: "#B1B9C4", gradient: { colorFrom: "#D8E3F0", colorTo: "#BED1E6", stops: [0, 100], opacityFrom: .4, opacityTo: .5 } }, dropShadow: { enabled: !1, left: 0, top: 0, blur: 1, opacity: .4 } }, tooltip: { enabled: !0, offsetY: 0, formatter: void 0, style: { fontSize: "12px", fontFamily: void 0 } } }, yaxis: this.yAxis, theme: { mode: "", palette: "palette1", monochrome: { enabled: !1, color: "#008FFB", shadeTo: "light", shadeIntensity: .65 } } } } }]), p }(), Fi = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w, this.graphics = new X(this.ctx), this.w.globals.isBarHorizontal && (this.invertAxis = !0), this.helpers = new Be(this), this.xAxisAnnotations = new Xi(this), this.yAxisAnnotations = new Ei(this), this.pointsAnnotations = new Yi(this), this.w.globals.isBarHorizontal && this.w.config.yaxis[0].reversed && (this.inversedReversedAxis = !0), this.xDivision = this.w.globals.gridWidth / this.w.globals.dataPoints } return R(p, [{ key: "drawAxesAnnotations", value: function () { var e = this.w; if (e.globals.axisCharts) { for (var t = this.yAxisAnnotations.drawYAxisAnnotations(), i = this.xAxisAnnotations.drawXAxisAnnotations(), a = this.pointsAnnotations.drawPointAnnotations(), s = e.config.chart.animations.enabled, r = [t, i, a], n = [i.node, t.node, a.node], o = 0; o < 3; o++)e.globals.dom.elGraphical.add(r[o]), !s || e.globals.resized || e.globals.dataChanged || e.config.chart.type !== "scatter" && e.config.chart.type !== "bubble" && e.globals.dataPoints > 1 && n[o].classList.add("apexcharts-element-hidden"), e.globals.delayedElements.push({ el: n[o], index: 0 }); this.helpers.annotationsBackground() } } }, { key: "drawImageAnnos", value: function () { var e = this; this.w.config.annotations.images.map(function (t, i) { e.addImage(t, i) }) } }, { key: "drawTextAnnos", value: function () { var e = this; this.w.config.annotations.texts.map(function (t, i) { e.addText(t, i) }) } }, { key: "addXaxisAnnotation", value: function (e, t, i) { this.xAxisAnnotations.addXaxisAnnotation(e, t, i) } }, { key: "addYaxisAnnotation", value: function (e, t, i) { this.yAxisAnnotations.addYaxisAnnotation(e, t, i) } }, { key: "addPointAnnotation", value: function (e, t, i) { this.pointsAnnotations.addPointAnnotation(e, t, i) } }, { key: "addText", value: function (e, t) { var i = e.x, a = e.y, s = e.text, r = e.textAnchor, n = e.foreColor, o = e.fontSize, h = e.fontFamily, c = e.fontWeight, d = e.cssClass, g = e.backgroundColor, f = e.borderWidth, x = e.strokeDashArray, b = e.borderRadius, v = e.borderColor, y = e.appendTo, w = y === void 0 ? ".apexcharts-svg" : y, l = e.paddingLeft, u = l === void 0 ? 4 : l, m = e.paddingRight, A = m === void 0 ? 4 : m, k = e.paddingBottom, S = k === void 0 ? 2 : k, L = e.paddingTop, C = L === void 0 ? 2 : L, I = this.w, z = this.graphics.drawText({ x: i, y: a, text: s, textAnchor: r || "start", fontSize: o || "12px", fontWeight: c || "regular", fontFamily: h || I.config.chart.fontFamily, foreColor: n || I.config.chart.foreColor, cssClass: d }), M = I.globals.dom.baseEl.querySelector(w); M && M.appendChild(z.node); var T = z.bbox(); if (s) { var E = this.graphics.drawRect(T.x - u, T.y - C, T.width + u + A, T.height + S + C, b, g || "transparent", 1, f, v, x); M.insertBefore(E.node, z.node) } } }, { key: "addImage", value: function (e, t) { var i = this.w, a = e.path, s = e.x, r = s === void 0 ? 0 : s, n = e.y, o = n === void 0 ? 0 : n, h = e.width, c = h === void 0 ? 20 : h, d = e.height, g = d === void 0 ? 20 : d, f = e.appendTo, x = f === void 0 ? ".apexcharts-svg" : f, b = i.globals.dom.Paper.image(a); b.size(c, g).move(r, o); var v = i.globals.dom.baseEl.querySelector(x); return v && v.appendChild(b.node), b } }, { key: "addXaxisAnnotationExternal", value: function (e, t, i) { return this.addAnnotationExternal({ params: e, pushToMemory: t, context: i, type: "xaxis", contextMethod: i.addXaxisAnnotation }), i } }, { key: "addYaxisAnnotationExternal", value: function (e, t, i) { return this.addAnnotationExternal({ params: e, pushToMemory: t, context: i, type: "yaxis", contextMethod: i.addYaxisAnnotation }), i } }, { key: "addPointAnnotationExternal", value: function (e, t, i) { return this.invertAxis === void 0 && (this.invertAxis = i.w.globals.isBarHorizontal), this.addAnnotationExternal({ params: e, pushToMemory: t, context: i, type: "point", contextMethod: i.addPointAnnotation }), i } }, { key: "addAnnotationExternal", value: function (e) { var t = e.params, i = e.pushToMemory, a = e.context, s = e.type, r = e.contextMethod, n = a, o = n.w, h = o.globals.dom.baseEl.querySelector(".apexcharts-".concat(s, "-annotations")), c = h.childNodes.length + 1, d = new ue, g = Object.assign({}, s === "xaxis" ? d.xAxisAnnotation : s === "yaxis" ? d.yAxisAnnotation : d.pointAnnotation), f = P.extend(g, t); switch (s) { case "xaxis": this.addXaxisAnnotation(f, h, c); break; case "yaxis": this.addYaxisAnnotation(f, h, c); break; case "point": this.addPointAnnotation(f, h, c) }var x = o.globals.dom.baseEl.querySelector(".apexcharts-".concat(s, "-annotations .apexcharts-").concat(s, "-annotation-label[rel='").concat(c, "']")), b = this.helpers.addBackgroundToAnno(x, f); return b && h.insertBefore(b.node, x), i && o.globals.memory.methodsToExec.push({ context: n, id: f.id ? f.id : P.randomId(), method: r, label: "addAnnotation", params: t }), a } }, { key: "clearAnnotations", value: function (e) { for (var t = e.w, i = t.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxis-annotations, .apexcharts-xaxis-annotations, .apexcharts-point-annotations"), a = t.globals.memory.methodsToExec.length - 1; a >= 0; a--)t.globals.memory.methodsToExec[a].label !== "addText" && t.globals.memory.methodsToExec[a].label !== "addAnnotation" || t.globals.memory.methodsToExec.splice(a, 1); i = P.listToArray(i), Array.prototype.forEach.call(i, function (s) { for (; s.firstChild;)s.removeChild(s.firstChild) }) } }, { key: "removeAnnotation", value: function (e, t) { var i = e.w, a = i.globals.dom.baseEl.querySelectorAll(".".concat(t)); a && (i.globals.memory.methodsToExec.map(function (s, r) { s.id === t && i.globals.memory.methodsToExec.splice(r, 1) }), Array.prototype.forEach.call(a, function (s) { s.parentElement.removeChild(s) })) } }]), p }(), Je = function (p) { var e, t = p.isTimeline, i = p.ctx, a = p.seriesIndex, s = p.dataPointIndex, r = p.y1, n = p.y2, o = p.w, h = o.globals.seriesRangeStart[a][s], c = o.globals.seriesRangeEnd[a][s], d = o.globals.labels[s], g = o.config.series[a].name ? o.config.series[a].name : "", f = o.globals.ttKeyFormatter, x = o.config.tooltip.y.title.formatter, b = { w: o, seriesIndex: a, dataPointIndex: s, start: h, end: c }; typeof x == "function" && (g = x(g, b)), (e = o.config.series[a].data[s]) !== null && e !== void 0 && e.x && (d = o.config.series[a].data[s].x), t || o.config.xaxis.type === "datetime" && (d = new ze(i).xLabelFormat(o.globals.ttKeyFormatter, d, d, { i: void 0, dateFormatter: new K(i).formatDate, w: o })), typeof f == "function" && (d = f(d, b)), Number.isFinite(r) && Number.isFinite(n) && (h = r, c = n); var v = "", y = "", w = o.globals.colors[a]; if (o.config.tooltip.x.formatter === void 0) if (o.config.xaxis.type === "datetime") { var l = new K(i); v = l.formatDate(l.getDate(h), o.config.tooltip.x.format), y = l.formatDate(l.getDate(c), o.config.tooltip.x.format) } else v = h, y = c; else v = o.config.tooltip.x.formatter(h), y = o.config.tooltip.x.formatter(c); return { start: h, end: c, startVal: v, endVal: y, ylabel: d, color: w, seriesName: g } }, Ke = function (p) { + var e = p.color, t = p.seriesName, i = p.ylabel, a = p.start, s = p.end, r = p.seriesIndex, n = p.dataPointIndex, o = p.ctx.tooltip.tooltipLabels.getFormatters(r); a = o.yLbFormatter(a), s = o.yLbFormatter(s); var h = o.yLbFormatter(p.w.globals.series[r][n]), c = ` + `.concat(a, ` - - `).concat(s,` - `);return'
'+(t||"")+'
'+i+": "+(p.w.globals.comboCharts?p.w.config.series[r].type==="rangeArea"||p.w.config.series[r].type==="rangeBar"?c:"".concat(h,""):c)+"
"},Le=function(){function p(e){F(this,p),this.opts=e}return R(p,[{key:"hideYAxis",value:function(){this.opts.yaxis[0].show=!1,this.opts.yaxis[0].title.text="",this.opts.yaxis[0].axisBorder.show=!1,this.opts.yaxis[0].axisTicks.show=!1,this.opts.yaxis[0].floating=!0}},{key:"line",value:function(){return{chart:{animations:{easing:"swing"}},dataLabels:{enabled:!1},stroke:{width:5,curve:"straight"},markers:{size:0,hover:{sizeOffset:6}},xaxis:{crosshairs:{width:1}}}}},{key:"sparkline",value:function(e){return this.hideYAxis(),P.extend(e,{grid:{show:!1,padding:{left:0,right:0,top:0,bottom:0}},legend:{show:!1},xaxis:{labels:{show:!1},tooltip:{enabled:!1},axisBorder:{show:!1},axisTicks:{show:!1}},chart:{toolbar:{show:!1},zoom:{enabled:!1}},dataLabels:{enabled:!1}})}},{key:"slope",value:function(){return this.hideYAxis(),{chart:{toolbar:{show:!1},zoom:{enabled:!1}},dataLabels:{enabled:!0,formatter:function(e,t){var i=t.w.config.series[t.seriesIndex].name;return e!==null?i+": "+e:""},background:{enabled:!1},offsetX:-5},grid:{xaxis:{lines:{show:!0}},yaxis:{lines:{show:!1}}},xaxis:{position:"top",labels:{style:{fontSize:14,fontWeight:900}},tooltip:{enabled:!1},crosshairs:{show:!1}},markers:{size:8,hover:{sizeOffset:1}},legend:{show:!1},tooltip:{shared:!1,intersect:!0,followCursor:!0},stroke:{width:5,curve:"straight"}}}},{key:"bar",value:function(){return{chart:{stacked:!1,animations:{easing:"swing"}},plotOptions:{bar:{dataLabels:{position:"center"}}},dataLabels:{style:{colors:["#fff"]},background:{enabled:!1}},stroke:{width:0,lineCap:"round"},fill:{opacity:.85},legend:{markers:{shape:"square"}},tooltip:{shared:!1,intersect:!0},xaxis:{tooltip:{enabled:!1},tickPlacement:"between",crosshairs:{width:"barWidth",position:"back",fill:{type:"gradient"},dropShadow:{enabled:!1},stroke:{width:0}}}}}},{key:"funnel",value:function(){return this.hideYAxis(),Y(Y({},this.bar()),{},{chart:{animations:{easing:"linear",speed:800,animateGradually:{enabled:!1}}},plotOptions:{bar:{horizontal:!0,borderRadiusApplication:"around",borderRadius:0,dataLabels:{position:"center"}}},grid:{show:!1,padding:{left:0,right:0}},xaxis:{labels:{show:!1},tooltip:{enabled:!1},axisBorder:{show:!1},axisTicks:{show:!1}}})}},{key:"candlestick",value:function(){var e=this;return{stroke:{width:1,colors:["#333"]},fill:{opacity:1},dataLabels:{enabled:!1},tooltip:{shared:!0,custom:function(t){var i=t.seriesIndex,a=t.dataPointIndex,s=t.w;return e._getBoxTooltip(s,i,a,["Open","High","","Low","Close"],"candlestick")}},states:{active:{filter:{type:"none"}}},xaxis:{crosshairs:{width:1}}}}},{key:"boxPlot",value:function(){var e=this;return{chart:{animations:{dynamicAnimation:{enabled:!1}}},stroke:{width:1,colors:["#24292e"]},dataLabels:{enabled:!1},tooltip:{shared:!0,custom:function(t){var i=t.seriesIndex,a=t.dataPointIndex,s=t.w;return e._getBoxTooltip(s,i,a,["Minimum","Q1","Median","Q3","Maximum"],"boxPlot")}},markers:{size:7,strokeWidth:1,strokeColors:"#111"},xaxis:{crosshairs:{width:1}}}}},{key:"rangeBar",value:function(){return{chart:{animations:{animateGradually:!1}},stroke:{width:0,lineCap:"square"},plotOptions:{bar:{borderRadius:0,dataLabels:{position:"center"}}},dataLabels:{enabled:!1,formatter:function(e,t){t.ctx;var i=t.seriesIndex,a=t.dataPointIndex,s=t.w,r=function(){var n=s.globals.seriesRangeStart[i][a];return s.globals.seriesRangeEnd[i][a]-n};return s.globals.comboCharts?s.config.series[i].type==="rangeBar"||s.config.series[i].type==="rangeArea"?r():e:r()},background:{enabled:!1},style:{colors:["#fff"]}},markers:{size:10},tooltip:{shared:!1,followCursor:!0,custom:function(e){return e.w.config.plotOptions&&e.w.config.plotOptions.bar&&e.w.config.plotOptions.bar.horizontal?function(t){var i=Je(Y(Y({},t),{},{isTimeline:!0})),a=i.color,s=i.seriesName,r=i.ylabel,n=i.startVal,o=i.endVal;return Ke(Y(Y({},t),{},{color:a,seriesName:s,ylabel:r,start:n,end:o}))}(e):function(t){var i=Je(t),a=i.color,s=i.seriesName,r=i.ylabel,n=i.start,o=i.end;return Ke(Y(Y({},t),{},{color:a,seriesName:s,ylabel:r,start:n,end:o}))}(e)}},xaxis:{tickPlacement:"between",tooltip:{enabled:!1},crosshairs:{stroke:{width:0}}}}}},{key:"dumbbell",value:function(e){var t,i;return(t=e.plotOptions.bar)!==null&&t!==void 0&&t.barHeight||(e.plotOptions.bar.barHeight=2),(i=e.plotOptions.bar)!==null&&i!==void 0&&i.columnWidth||(e.plotOptions.bar.columnWidth=2),e}},{key:"area",value:function(){return{stroke:{width:4,fill:{type:"solid",gradient:{inverseColors:!1,shade:"light",type:"vertical",opacityFrom:.65,opacityTo:.5,stops:[0,100,100]}}},fill:{type:"gradient",gradient:{inverseColors:!1,shade:"light",type:"vertical",opacityFrom:.65,opacityTo:.5,stops:[0,100,100]}},markers:{size:0,hover:{sizeOffset:6}},tooltip:{followCursor:!1}}}},{key:"rangeArea",value:function(){return{stroke:{curve:"straight",width:0},fill:{type:"solid",opacity:.6},markers:{size:0},states:{hover:{filter:{type:"none"}},active:{filter:{type:"none"}}},tooltip:{intersect:!1,shared:!0,followCursor:!0,custom:function(e){return function(t){var i=Je(t),a=i.color,s=i.seriesName,r=i.ylabel,n=i.start,o=i.end;return Ke(Y(Y({},t),{},{color:a,seriesName:s,ylabel:r,start:n,end:o}))}(e)}}}}},{key:"brush",value:function(e){return P.extend(e,{chart:{toolbar:{autoSelected:"selection",show:!1},zoom:{enabled:!1}},dataLabels:{enabled:!1},stroke:{width:1},tooltip:{enabled:!1},xaxis:{tooltip:{enabled:!1}}})}},{key:"stacked100",value:function(e){e.dataLabels=e.dataLabels||{},e.dataLabels.formatter=e.dataLabels.formatter||void 0;var t=e.dataLabels.formatter;return e.yaxis.forEach(function(i,a){e.yaxis[a].min=0,e.yaxis[a].max=100}),e.chart.type==="bar"&&(e.dataLabels.formatter=t||function(i){return typeof i=="number"&&i?i.toFixed(0)+"%":i}),e}},{key:"stackedBars",value:function(){var e=this.bar();return Y(Y({},e),{},{plotOptions:Y(Y({},e.plotOptions),{},{bar:Y(Y({},e.plotOptions.bar),{},{borderRadiusApplication:"end",borderRadiusWhenStacked:"last"})})})}},{key:"convertCatToNumeric",value:function(e){return e.xaxis.convertedCatToNumeric=!0,e}},{key:"convertCatToNumericXaxis",value:function(e,t,i){e.xaxis.type="numeric",e.xaxis.labels=e.xaxis.labels||{},e.xaxis.labels.formatter=e.xaxis.labels.formatter||function(r){return P.isNumber(r)?Math.floor(r):r};var a=e.xaxis.labels.formatter,s=e.xaxis.categories&&e.xaxis.categories.length?e.xaxis.categories:e.labels;return i&&i.length&&(s=i.map(function(r){return Array.isArray(r)?r:String(r)})),s&&s.length&&(e.xaxis.labels.formatter=function(r){return P.isNumber(r)?a(s[Math.floor(r)-1]):a(r)}),e.xaxis.categories=[],e.labels=[],e.xaxis.tickAmount=e.xaxis.tickAmount||"dataPoints",e}},{key:"bubble",value:function(){return{dataLabels:{style:{colors:["#fff"]}},tooltip:{shared:!1,intersect:!0},xaxis:{crosshairs:{width:0}},fill:{type:"solid",gradient:{shade:"light",inverse:!0,shadeIntensity:.55,opacityFrom:.4,opacityTo:.8}}}}},{key:"scatter",value:function(){return{dataLabels:{enabled:!1},tooltip:{shared:!1,intersect:!0},markers:{size:6,strokeWidth:1,hover:{sizeOffset:2}}}}},{key:"heatmap",value:function(){return{chart:{stacked:!1},fill:{opacity:1},dataLabels:{style:{colors:["#fff"]}},stroke:{colors:["#fff"]},tooltip:{followCursor:!0,marker:{show:!1},x:{show:!1}},legend:{position:"top",markers:{shape:"square"}},grid:{padding:{right:20}}}}},{key:"treemap",value:function(){return{chart:{zoom:{enabled:!1}},dataLabels:{style:{fontSize:14,fontWeight:600,colors:["#fff"]}},stroke:{show:!0,width:2,colors:["#fff"]},legend:{show:!1},fill:{opacity:1,gradient:{stops:[0,100]}},tooltip:{followCursor:!0,x:{show:!1}},grid:{padding:{left:0,right:0}},xaxis:{crosshairs:{show:!1},tooltip:{enabled:!1}}}}},{key:"pie",value:function(){return{chart:{toolbar:{show:!1}},plotOptions:{pie:{donut:{labels:{show:!1}}}},dataLabels:{formatter:function(e){return e.toFixed(1)+"%"},style:{colors:["#fff"]},background:{enabled:!1},dropShadow:{enabled:!0}},stroke:{colors:["#fff"]},fill:{opacity:1,gradient:{shade:"light",stops:[0,100]}},tooltip:{theme:"dark",fillSeriesColor:!0},legend:{position:"right"}}}},{key:"donut",value:function(){return{chart:{toolbar:{show:!1}},dataLabels:{formatter:function(e){return e.toFixed(1)+"%"},style:{colors:["#fff"]},background:{enabled:!1},dropShadow:{enabled:!0}},stroke:{colors:["#fff"]},fill:{opacity:1,gradient:{shade:"light",shadeIntensity:.35,stops:[80,100],opacityFrom:1,opacityTo:1}},tooltip:{theme:"dark",fillSeriesColor:!0},legend:{position:"right"}}}},{key:"polarArea",value:function(){return{chart:{toolbar:{show:!1}},dataLabels:{formatter:function(e){return e.toFixed(1)+"%"},enabled:!1},stroke:{show:!0,width:2},fill:{opacity:.7},tooltip:{theme:"dark",fillSeriesColor:!0},legend:{position:"right"}}}},{key:"radar",value:function(){return this.opts.yaxis[0].labels.offsetY=this.opts.yaxis[0].labels.offsetY?this.opts.yaxis[0].labels.offsetY:6,{dataLabels:{enabled:!1,style:{fontSize:"11px"}},stroke:{width:2},markers:{size:5,strokeWidth:1,strokeOpacity:1},fill:{opacity:.2},tooltip:{shared:!1,intersect:!0,followCursor:!0},grid:{show:!1},xaxis:{labels:{formatter:function(e){return e},style:{colors:["#a8a8a8"],fontSize:"11px"}},tooltip:{enabled:!1},crosshairs:{show:!1}}}}},{key:"radialBar",value:function(){return{chart:{animations:{dynamicAnimation:{enabled:!0,speed:800}},toolbar:{show:!1}},fill:{gradient:{shade:"dark",shadeIntensity:.4,inverseColors:!1,type:"diagonal2",opacityFrom:1,opacityTo:1,stops:[70,98,100]}},legend:{show:!1,position:"right"},tooltip:{enabled:!1,fillSeriesColor:!0}}}},{key:"_getBoxTooltip",value:function(e,t,i,a,s){var r=e.globals.seriesCandleO[t][i],n=e.globals.seriesCandleH[t][i],o=e.globals.seriesCandleM[t][i],h=e.globals.seriesCandleL[t][i],c=e.globals.seriesCandleC[t][i];return e.config.series[t].type&&e.config.series[t].type!==s?`
- `.concat(e.config.series[t].name?e.config.series[t].name:"series-"+(t+1),": ").concat(e.globals.series[t][i],` -
`):'
')+"
".concat(a[0],': ')+r+"
"+"
".concat(a[1],': ')+n+"
"+(o?"
".concat(a[2],': ')+o+"
":"")+"
".concat(a[3],': ')+h+"
"+"
".concat(a[4],': ')+c+"
"}}]),p}(),Pe=function(){function p(e){F(this,p),this.opts=e}return R(p,[{key:"init",value:function(e){var t=e.responsiveOverride,i=this.opts,a=new ue,s=new Le(i);this.chartType=i.chart.type,i=this.extendYAxis(i),i=this.extendAnnotations(i);var r=a.init(),n={};if(i&&J(i)==="object"){var o,h,c,d,g,f,x,b,v,y,w={};w=["line","area","bar","candlestick","boxPlot","rangeBar","rangeArea","bubble","scatter","heatmap","treemap","pie","polarArea","donut","radar","radialBar"].indexOf(i.chart.type)!==-1?s[i.chart.type]():s.line(),(o=i.plotOptions)!==null&&o!==void 0&&(h=o.bar)!==null&&h!==void 0&&h.isFunnel&&(w=s.funnel()),i.chart.stacked&&i.chart.type==="bar"&&(w=s.stackedBars()),(c=i.chart.brush)!==null&&c!==void 0&&c.enabled&&(w=s.brush(w)),(d=i.plotOptions)!==null&&d!==void 0&&(g=d.line)!==null&&g!==void 0&&g.isSlopeChart&&(w=s.slope()),i.chart.stacked&&i.chart.stackType==="100%"&&(i=s.stacked100(i)),(f=i.plotOptions)!==null&&f!==void 0&&(x=f.bar)!==null&&x!==void 0&&x.isDumbbell&&(i=s.dumbbell(i)),this.checkForDarkTheme(window.Apex),this.checkForDarkTheme(i),i.xaxis=i.xaxis||window.Apex.xaxis||{},t||(i.xaxis.convertedCatToNumeric=!1),((b=(i=this.checkForCatToNumericXAxis(this.chartType,w,i)).chart.sparkline)!==null&&b!==void 0&&b.enabled||(v=window.Apex.chart)!==null&&v!==void 0&&(y=v.sparkline)!==null&&y!==void 0&&y.enabled)&&(w=s.sparkline(w)),n=P.extend(r,w)}var l=P.extend(n,window.Apex);return r=P.extend(l,i),r=this.handleUserInputErrors(r)}},{key:"checkForCatToNumericXAxis",value:function(e,t,i){var a,s,r=new Le(i),n=(e==="bar"||e==="boxPlot")&&((a=i.plotOptions)===null||a===void 0||(s=a.bar)===null||s===void 0?void 0:s.horizontal),o=e==="pie"||e==="polarArea"||e==="donut"||e==="radar"||e==="radialBar"||e==="heatmap",h=i.xaxis.type!=="datetime"&&i.xaxis.type!=="numeric",c=i.xaxis.tickPlacement?i.xaxis.tickPlacement:t.xaxis&&t.xaxis.tickPlacement;return n||o||!h||c==="between"||(i=r.convertCatToNumeric(i)),i}},{key:"extendYAxis",value:function(e,t){var i=new ue;(e.yaxis===void 0||!e.yaxis||Array.isArray(e.yaxis)&&e.yaxis.length===0)&&(e.yaxis={}),e.yaxis.constructor!==Array&&window.Apex.yaxis&&window.Apex.yaxis.constructor!==Array&&(e.yaxis=P.extend(e.yaxis,window.Apex.yaxis)),e.yaxis.constructor!==Array?e.yaxis=[P.extend(i.yAxis,e.yaxis)]:e.yaxis=P.extendArray(e.yaxis,i.yAxis);var a=!1;e.yaxis.forEach(function(r){r.logarithmic&&(a=!0)});var s=e.series;return t&&!s&&(s=t.config.series),a&&s.length!==e.yaxis.length&&s.length&&(e.yaxis=s.map(function(r,n){if(r.name||(s[n].name="series-".concat(n+1)),e.yaxis[n])return e.yaxis[n].seriesName=s[n].name,e.yaxis[n];var o=P.extend(i.yAxis,e.yaxis[0]);return o.show=!1,o})),a&&s.length>1&&s.length!==e.yaxis.length&&console.warn("A multi-series logarithmic chart should have equal number of series and y-axes"),e}},{key:"extendAnnotations",value:function(e){return e.annotations===void 0&&(e.annotations={},e.annotations.yaxis=[],e.annotations.xaxis=[],e.annotations.points=[]),e=this.extendYAxisAnnotations(e),e=this.extendXAxisAnnotations(e),e=this.extendPointAnnotations(e)}},{key:"extendYAxisAnnotations",value:function(e){var t=new ue;return e.annotations.yaxis=P.extendArray(e.annotations.yaxis!==void 0?e.annotations.yaxis:[],t.yAxisAnnotation),e}},{key:"extendXAxisAnnotations",value:function(e){var t=new ue;return e.annotations.xaxis=P.extendArray(e.annotations.xaxis!==void 0?e.annotations.xaxis:[],t.xAxisAnnotation),e}},{key:"extendPointAnnotations",value:function(e){var t=new ue;return e.annotations.points=P.extendArray(e.annotations.points!==void 0?e.annotations.points:[],t.pointAnnotation),e}},{key:"checkForDarkTheme",value:function(e){e.theme&&e.theme.mode==="dark"&&(e.tooltip||(e.tooltip={}),e.tooltip.theme!=="light"&&(e.tooltip.theme="dark"),e.chart.foreColor||(e.chart.foreColor="#f6f7f8"),e.theme.palette||(e.theme.palette="palette4"))}},{key:"handleUserInputErrors",value:function(e){var t=e;if(t.tooltip.shared&&t.tooltip.intersect)throw new Error("tooltip.shared cannot be enabled when tooltip.intersect is true. Turn off any other option by setting it to false.");if(t.chart.type==="bar"&&t.plotOptions.bar.horizontal){if(t.yaxis.length>1)throw new Error("Multiple Y Axis for bars are not supported. Switch to column chart by setting plotOptions.bar.horizontal=false");t.yaxis[0].reversed&&(t.yaxis[0].opposite=!0),t.xaxis.tooltip.enabled=!1,t.yaxis[0].tooltip.enabled=!1,t.chart.zoom.enabled=!1}return t.chart.type!=="bar"&&t.chart.type!=="rangeBar"||t.tooltip.shared&&t.xaxis.crosshairs.width==="barWidth"&&t.series.length>1&&(t.xaxis.crosshairs.width="tickWidth"),t.chart.type!=="candlestick"&&t.chart.type!=="boxPlot"||t.yaxis[0].reversed&&(console.warn("Reversed y-axis in ".concat(t.chart.type," chart is not supported.")),t.yaxis[0].reversed=!1),t}}]),p}(),Et=function(){function p(){F(this,p)}return R(p,[{key:"initGlobalVars",value:function(e){e.series=[],e.seriesCandleO=[],e.seriesCandleH=[],e.seriesCandleM=[],e.seriesCandleL=[],e.seriesCandleC=[],e.seriesRangeStart=[],e.seriesRangeEnd=[],e.seriesRange=[],e.seriesPercent=[],e.seriesGoals=[],e.seriesX=[],e.seriesZ=[],e.seriesNames=[],e.seriesTotals=[],e.seriesLog=[],e.seriesColors=[],e.stackedSeriesTotals=[],e.seriesXvalues=[],e.seriesYvalues=[],e.labels=[],e.hasXaxisGroups=!1,e.groups=[],e.barGroups=[],e.lineGroups=[],e.areaGroups=[],e.hasSeriesGroups=!1,e.seriesGroups=[],e.categoryLabels=[],e.timescaleLabels=[],e.noLabelsProvided=!1,e.resizeTimer=null,e.selectionResizeTimer=null,e.lastWheelExecution=0,e.delayedElements=[],e.pointsArray=[],e.dataLabelsRects=[],e.isXNumeric=!1,e.skipLastTimelinelabel=!1,e.skipFirstTimelinelabel=!1,e.isDataXYZ=!1,e.isMultiLineX=!1,e.isMultipleYAxis=!1,e.maxY=-Number.MAX_VALUE,e.minY=Number.MIN_VALUE,e.minYArr=[],e.maxYArr=[],e.maxX=-Number.MAX_VALUE,e.minX=Number.MAX_VALUE,e.initialMaxX=-Number.MAX_VALUE,e.initialMinX=Number.MAX_VALUE,e.maxDate=0,e.minDate=Number.MAX_VALUE,e.minZ=Number.MAX_VALUE,e.maxZ=-Number.MAX_VALUE,e.minXDiff=Number.MAX_VALUE,e.yAxisScale=[],e.xAxisScale=null,e.xAxisTicksPositions=[],e.yLabelsCoords=[],e.yTitleCoords=[],e.barPadForNumericAxis=0,e.padHorizontal=0,e.xRange=0,e.yRange=[],e.zRange=0,e.dataPoints=0,e.xTickAmount=0,e.multiAxisTickAmount=0}},{key:"globalVars",value:function(e){return{chartID:null,cuid:null,events:{beforeMount:[],mounted:[],updated:[],clicked:[],selection:[],dataPointSelection:[],zoomed:[],scrolled:[]},colors:[],clientX:null,clientY:null,fill:{colors:[]},stroke:{colors:[]},dataLabels:{style:{colors:[]}},radarPolygons:{fill:{colors:[]}},markers:{colors:[],size:e.markers.size,largestSize:0},animationEnded:!1,isTouchDevice:"ontouchstart"in window||navigator.msMaxTouchPoints,isDirty:!1,isExecCalled:!1,initialConfig:null,initialSeries:[],lastXAxis:[],lastYAxis:[],columnSeries:null,labels:[],timescaleLabels:[],noLabelsProvided:!1,allSeriesCollapsed:!1,collapsedSeries:[],collapsedSeriesIndices:[],ancillaryCollapsedSeries:[],ancillaryCollapsedSeriesIndices:[],risingSeries:[],dataFormatXNumeric:!1,capturedSeriesIndex:-1,capturedDataPointIndex:-1,selectedDataPoints:[],goldenPadding:35,invalidLogScale:!1,ignoreYAxisIndexes:[],maxValsInArrayIndex:0,radialSize:0,selection:void 0,zoomEnabled:e.chart.toolbar.autoSelected==="zoom"&&e.chart.toolbar.tools.zoom&&e.chart.zoom.enabled,panEnabled:e.chart.toolbar.autoSelected==="pan"&&e.chart.toolbar.tools.pan,selectionEnabled:e.chart.toolbar.autoSelected==="selection"&&e.chart.toolbar.tools.selection,yaxis:null,mousedown:!1,lastClientPosition:{},visibleXRange:void 0,yValueDecimal:0,total:0,SVGNS:"http://www.w3.org/2000/svg",svgWidth:0,svgHeight:0,noData:!1,locale:{},dom:{},memory:{methodsToExec:[]},shouldAnimate:!0,skipLastTimelinelabel:!1,skipFirstTimelinelabel:!1,delayedElements:[],axisCharts:!0,isDataXYZ:!1,isSlopeChart:e.plotOptions.line.isSlopeChart,resized:!1,resizeTimer:null,comboCharts:!1,dataChanged:!1,previousPaths:[],allSeriesHasEqualX:!0,pointsArray:[],dataLabelsRects:[],lastDrawnDataLabelsIndexes:[],hasNullValues:!1,easing:null,zoomed:!1,gridWidth:0,gridHeight:0,rotateXLabels:!1,defaultLabels:!1,xLabelFormatter:void 0,yLabelFormatters:[],xaxisTooltipFormatter:void 0,ttKeyFormatter:void 0,ttVal:void 0,ttZFormatter:void 0,LINE_HEIGHT_RATIO:1.618,xAxisLabelsHeight:0,xAxisGroupLabelsHeight:0,xAxisLabelsWidth:0,yAxisLabelsWidth:0,scaleX:1,scaleY:1,translateX:0,translateY:0,translateYAxisX:[],yAxisWidths:[],translateXAxisY:0,translateXAxisX:0,tooltip:null,niceScaleAllowedMagMsd:[[1,1,2,5,5,5,10,10,10,10,10],[1,1,2,5,5,5,10,10,10,10,10]],niceScaleDefaultTicks:[1,2,4,4,6,6,6,6,6,6,6,6,6,6,6,6,6,6,12,12,12,12,12,12,12,12,12,24],seriesYAxisMap:[],seriesYAxisReverseMap:[]}}},{key:"init",value:function(e){var t=this.globalVars(e);return this.initGlobalVars(t),t.initialConfig=P.extend({},e),t.initialSeries=P.clone(e.series),t.lastXAxis=P.clone(t.initialConfig.xaxis),t.lastYAxis=P.clone(t.initialConfig.yaxis),t}}]),p}(),Ri=function(){function p(e){F(this,p),this.opts=e}return R(p,[{key:"init",value:function(){var e=new Pe(this.opts).init({responsiveOverride:!1});return{config:e,globals:new Et().init(e)}}}]),p}(),ne=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w,this.opts=null,this.seriesIndex=0,this.patternIDs=[]}return R(p,[{key:"clippedImgArea",value:function(e){var t=this.w,i=t.config,a=parseInt(t.globals.gridWidth,10),s=parseInt(t.globals.gridHeight,10),r=a>s?a:s,n=e.image,o=0,h=0;e.width===void 0&&e.height===void 0?i.fill.image.width!==void 0&&i.fill.image.height!==void 0?(o=i.fill.image.width+1,h=i.fill.image.height):(o=r+1,h=r):(o=e.width,h=e.height);var c=document.createElementNS(t.globals.SVGNS,"pattern");X.setAttrs(c,{id:e.patternID,patternUnits:e.patternUnits?e.patternUnits:"userSpaceOnUse",width:o+"px",height:h+"px"});var d=document.createElementNS(t.globals.SVGNS,"image");c.appendChild(d),d.setAttributeNS(window.SVG.xlink,"href",n),X.setAttrs(d,{x:0,y:0,preserveAspectRatio:"none",width:o+"px",height:h+"px"}),d.style.opacity=e.opacity,t.globals.dom.elDefs.node.appendChild(c)}},{key:"getSeriesIndex",value:function(e){var t=this.w,i=t.config.chart.type;return(i==="bar"||i==="rangeBar")&&t.config.plotOptions.bar.distributed||i==="heatmap"||i==="treemap"?this.seriesIndex=e.seriesNumber:this.seriesIndex=e.seriesNumber%t.globals.series.length,this.seriesIndex}},{key:"fillPath",value:function(e){var t=this.w;this.opts=e;var i,a,s,r=this.w.config;this.seriesIndex=this.getSeriesIndex(e);var n=this.getFillColors()[this.seriesIndex];t.globals.seriesColors[this.seriesIndex]!==void 0&&(n=t.globals.seriesColors[this.seriesIndex]),typeof n=="function"&&(n=n({seriesIndex:this.seriesIndex,dataPointIndex:e.dataPointIndex,value:e.value,w:t}));var o=e.fillType?e.fillType:this.getFillType(this.seriesIndex),h=Array.isArray(r.fill.opacity)?r.fill.opacity[this.seriesIndex]:r.fill.opacity;e.color&&(n=e.color),n||(n="#fff",console.warn("undefined color - ApexCharts"));var c=n;if(n.indexOf("rgb")===-1?n.length<9&&(c=P.hexToRgba(n,h)):n.indexOf("rgba")>-1&&(h=P.getOpacityFromRGBA(n)),e.opacity&&(h=e.opacity),o==="pattern"&&(a=this.handlePatternFill({fillConfig:e.fillConfig,patternFill:a,fillColor:n,fillOpacity:h,defaultColor:c})),o==="gradient"&&(s=this.handleGradientFill({fillConfig:e.fillConfig,fillColor:n,fillOpacity:h,i:this.seriesIndex})),o==="image"){var d=r.fill.image.src,g=e.patternID?e.patternID:"",f="pattern".concat(t.globals.cuid).concat(e.seriesNumber+1).concat(g);this.patternIDs.indexOf(f)===-1&&(this.clippedImgArea({opacity:h,image:Array.isArray(d)?e.seriesNumber-1&&(f=P.getOpacityFromRGBA(g));var x=r.gradient.opacityTo===void 0?i:Array.isArray(r.gradient.opacityTo)?r.gradient.opacityTo[s]:r.gradient.opacityTo;if(r.gradient.gradientToColors===void 0||r.gradient.gradientToColors.length===0)n=r.gradient.shade==="dark"?c.shadeColor(-1*parseFloat(r.gradient.shadeIntensity),t.indexOf("rgb")>-1?P.rgb2hex(t):t):c.shadeColor(parseFloat(r.gradient.shadeIntensity),t.indexOf("rgb")>-1?P.rgb2hex(t):t);else if(r.gradient.gradientToColors[o.seriesNumber]){var b=r.gradient.gradientToColors[o.seriesNumber];n=b,b.indexOf("rgba")>-1&&(x=P.getOpacityFromRGBA(b))}else n=t;if(r.gradient.gradientFrom&&(g=r.gradient.gradientFrom),r.gradient.gradientTo&&(n=r.gradient.gradientTo),r.gradient.inverseColors){var v=g;g=n,n=v}return g.indexOf("rgb")>-1&&(g=P.rgb2hex(g)),n.indexOf("rgb")>-1&&(n=P.rgb2hex(n)),h.drawGradient(d,g,n,f,x,o.size,r.gradient.stops,r.gradient.colorStops,s)}}]),p}(),ye=function(){function p(e,t){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"setGlobalMarkerSize",value:function(){var e=this.w;if(e.globals.markers.size=Array.isArray(e.config.markers.size)?e.config.markers.size:[e.config.markers.size],e.globals.markers.size.length>0){if(e.globals.markers.size.length4&&arguments[4]!==void 0&&arguments[4],n=this.w,o=t,h=e,c=null,d=new X(this.ctx),g=n.config.markers.discrete&&n.config.markers.discrete.length;if((n.globals.markers.size[t]>0||r||g)&&(c=d.group({class:r||g?"":"apexcharts-series-markers"})).attr("clip-path","url(#gridRectMarkerMask".concat(n.globals.cuid,")")),Array.isArray(h.x))for(var f=0;f0:n.config.markers.size>0)||r||g){P.isNumber(h.y[f])?b+=" w".concat(P.randomId()):b="apexcharts-nullpoint";var v=this.getMarkerConfig({cssClass:b,seriesIndex:t,dataPointIndex:x});n.config.series[o].data[x]&&(n.config.series[o].data[x].fillColor&&(v.pointFillColor=n.config.series[o].data[x].fillColor),n.config.series[o].data[x].strokeColor&&(v.pointStrokeColor=n.config.series[o].data[x].strokeColor)),a!==void 0&&(v.pSize=a),(h.x[f]<-n.globals.markers.largestSize||h.x[f]>n.globals.gridWidth+n.globals.markers.largestSize||h.y[f]<-n.globals.markers.largestSize||h.y[f]>n.globals.gridHeight+n.globals.markers.largestSize)&&(v.pSize=0),(s=d.drawMarker(h.x[f],h.y[f],v)).attr("rel",x),s.attr("j",x),s.attr("index",t),s.node.setAttribute("default-marker-size",v.pSize),new ie(this.ctx).setSelectionFilter(s,t,x),this.addEvents(s),c&&c.add(s)}else n.globals.pointsArray[t]===void 0&&(n.globals.pointsArray[t]=[]),n.globals.pointsArray[t].push([h.x[f],h.y[f]])}return c}},{key:"getMarkerConfig",value:function(e){var t=e.cssClass,i=e.seriesIndex,a=e.dataPointIndex,s=a===void 0?null:a,r=e.radius,n=r===void 0?null:r,o=e.size,h=o===void 0?null:o,c=e.strokeWidth,d=c===void 0?null:c,g=this.w,f=this.getMarkerStyle(i),x=h===null?g.globals.markers.size[i]:h,b=g.config.markers;return s!==null&&b.discrete.length&&b.discrete.map(function(v){v.seriesIndex===i&&v.dataPointIndex===s&&(f.pointStrokeColor=v.strokeColor,f.pointFillColor=v.fillColor,x=v.size,f.pointShape=v.shape)}),{pSize:n===null?x:n,pRadius:n!==null?n:b.radius,pointStrokeWidth:d!==null?d:Array.isArray(b.strokeWidth)?b.strokeWidth[i]:b.strokeWidth,pointStrokeColor:f.pointStrokeColor,pointFillColor:f.pointFillColor,shape:f.pointShape||(Array.isArray(b.shape)?b.shape[i]:b.shape),class:t,pointStrokeOpacity:Array.isArray(b.strokeOpacity)?b.strokeOpacity[i]:b.strokeOpacity,pointStrokeDashArray:Array.isArray(b.strokeDashArray)?b.strokeDashArray[i]:b.strokeDashArray,pointFillOpacity:Array.isArray(b.fillOpacity)?b.fillOpacity[i]:b.fillOpacity,seriesIndex:i}}},{key:"addEvents",value:function(e){var t=this.w,i=new X(this.ctx);e.node.addEventListener("mouseenter",i.pathMouseEnter.bind(this.ctx,e)),e.node.addEventListener("mouseleave",i.pathMouseLeave.bind(this.ctx,e)),e.node.addEventListener("mousedown",i.pathMouseDown.bind(this.ctx,e)),e.node.addEventListener("click",t.config.markers.onClick),e.node.addEventListener("dblclick",t.config.markers.onDblClick),e.node.addEventListener("touchstart",i.pathMouseDown.bind(this.ctx,e),{passive:!0})}},{key:"getMarkerStyle",value:function(e){var t=this.w,i=t.globals.markers.colors,a=t.config.markers.strokeColor||t.config.markers.strokeColors;return{pointStrokeColor:Array.isArray(a)?a[e]:a,pointFillColor:Array.isArray(i)?i[e]:i}}}]),p}(),Yt=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w,this.initialAnim=this.w.config.chart.animations.enabled}return R(p,[{key:"draw",value:function(e,t,i){var a=this.w,s=new X(this.ctx),r=i.realIndex,n=i.pointsPos,o=i.zRatio,h=i.elParent,c=s.group({class:"apexcharts-series-markers apexcharts-series-".concat(a.config.chart.type)});if(c.attr("clip-path","url(#gridRectMarkerMask".concat(a.globals.cuid,")")),Array.isArray(n.x))for(var d=0;db.maxBubbleRadius&&(x=b.maxBubbleRadius)}var v=n.x[d],y=n.y[d];if(x=x||0,y!==null&&a.globals.series[r][g]!==void 0||(f=!1),f){var w=this.drawPoint(v,y,x,r,g,t);c.add(w)}h.add(c)}}},{key:"drawPoint",value:function(e,t,i,a,s,r){var n=this.w,o=a,h=new ve(this.ctx),c=new ie(this.ctx),d=new ne(this.ctx),g=new ye(this.ctx),f=new X(this.ctx),x=g.getMarkerConfig({cssClass:"apexcharts-marker",seriesIndex:o,dataPointIndex:s,radius:n.config.chart.type==="bubble"||n.globals.comboCharts&&n.config.series[a]&&n.config.series[a].type==="bubble"?i:null}),b=d.fillPath({seriesNumber:a,dataPointIndex:s,color:x.pointFillColor,patternUnits:"objectBoundingBox",value:n.globals.series[a][r]}),v=f.drawMarker(e,t,x);if(n.config.series[o].data[s]&&n.config.series[o].data[s].fillColor&&(b=n.config.series[o].data[s].fillColor),v.attr({fill:b}),n.config.chart.dropShadow.enabled){var y=n.config.chart.dropShadow;c.dropShadow(v,y,a)}if(!this.initialAnim||n.globals.dataChanged||n.globals.resized)n.globals.animationEnded=!0;else{var w=n.config.chart.animations.speed;h.animateMarker(v,w,n.globals.easing,function(){window.setTimeout(function(){h.animationCompleted(v)},100)})}return v.attr({rel:s,j:s,index:a,"default-marker-size":x.pSize}),c.setSelectionFilter(v,a,s),g.addEvents(v),v.node.classList.add("apexcharts-marker"),v}},{key:"centerTextInBubble",value:function(e){var t=this.w;return{y:e+=parseInt(t.config.dataLabels.style.fontSize,10)/4}}}]),p}(),be=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"dataLabelsCorrection",value:function(e,t,i,a,s,r,n){var o=this.w,h=!1,c=new X(this.ctx).getTextRects(i,n),d=c.width,g=c.height;t<0&&(t=0),t>o.globals.gridHeight+g&&(t=o.globals.gridHeight+g/2),o.globals.dataLabelsRects[a]===void 0&&(o.globals.dataLabelsRects[a]=[]),o.globals.dataLabelsRects[a].push({x:e,y:t,width:d,height:g});var f=o.globals.dataLabelsRects[a].length-2,x=o.globals.lastDrawnDataLabelsIndexes[a]!==void 0?o.globals.lastDrawnDataLabelsIndexes[a][o.globals.lastDrawnDataLabelsIndexes[a].length-1]:0;if(o.globals.dataLabelsRects[a][f]!==void 0){var b=o.globals.dataLabelsRects[a][x];(e>b.x+b.width||t>b.y+b.height||t+gt.globals.gridWidth+w.textRects.width+30)&&(o="");var l=t.globals.dataLabels.style.colors[r];((t.config.chart.type==="bar"||t.config.chart.type==="rangeBar")&&t.config.plotOptions.bar.distributed||t.config.dataLabels.distributed)&&(l=t.globals.dataLabels.style.colors[n]),typeof l=="function"&&(l=l({series:t.globals.series,seriesIndex:r,dataPointIndex:n,w:t})),f&&(l=f);var u=g.offsetX,m=g.offsetY;if(t.config.chart.type!=="bar"&&t.config.chart.type!=="rangeBar"||(u=0,m=0),t.globals.isSlopeChart&&(n!==0&&(u=-2*g.offsetX+5),n!==0&&n!==t.config.series[r].data.length-1&&(u=0)),w.drawnextLabel){if((y=i.drawText({width:100,height:parseInt(g.style.fontSize,10),x:a+u,y:s+m,foreColor:l,textAnchor:h||g.textAnchor,text:o,fontSize:c||g.style.fontSize,fontFamily:g.style.fontFamily,fontWeight:g.style.fontWeight||"normal"})).attr({class:v||"apexcharts-datalabel",cx:a,cy:s}),g.dropShadow.enabled){var A=g.dropShadow;new ie(this.ctx).dropShadow(y,A)}d.add(y),t.globals.lastDrawnDataLabelsIndexes[r]===void 0&&(t.globals.lastDrawnDataLabelsIndexes[r]=[]),t.globals.lastDrawnDataLabelsIndexes[r].push(n)}return y}},{key:"addBackgroundToDataLabel",value:function(e,t){var i=this.w,a=i.config.dataLabels.background,s=a.padding,r=a.padding/2,n=t.width,o=t.height,h=new X(this.ctx).drawRect(t.x-s,t.y-r/2,n+2*s,o+r,a.borderRadius,i.config.chart.background!=="transparent"&&i.config.chart.background?i.config.chart.background:"#fff",a.opacity,a.borderWidth,a.borderColor);return a.dropShadow.enabled&&new ie(this.ctx).dropShadow(h,a.dropShadow),h}},{key:"dataLabelsBackground",value:function(){var e=this.w;if(e.config.chart.type!=="bubble")for(var t=e.globals.dom.baseEl.querySelectorAll(".apexcharts-datalabels text"),i=0;i0&&arguments[0]!==void 0)||arguments[0],t=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],i=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2],a=this.w,s=P.clone(a.globals.initialSeries);a.globals.previousPaths=[],i?(a.globals.collapsedSeries=[],a.globals.ancillaryCollapsedSeries=[],a.globals.collapsedSeriesIndices=[],a.globals.ancillaryCollapsedSeriesIndices=[]):s=this.emptyCollapsedSeries(s),a.config.series=s,e&&(t&&(a.globals.zoomed=!1,this.ctx.updateHelpers.revertDefaultAxisMinMax()),this.ctx.updateHelpers._updateSeries(s,a.config.chart.animations.dynamicAnimation.enabled))}},{key:"emptyCollapsedSeries",value:function(e){for(var t=this.w,i=0;i-1&&(e[i].data=[]);return e}},{key:"highlightSeries",value:function(e){var t=this.w,i=this.getSeriesByName(e),a=parseInt(i.getAttribute("data:realIndex"),10),s=t.globals.dom.baseEl.querySelectorAll(".apexcharts-series, .apexcharts-datalabels, .apexcharts-yaxis"),r=null,n=null,o=null;if(t.globals.axisCharts||t.config.chart.type==="radialBar")if(t.globals.axisCharts){r=t.globals.dom.baseEl.querySelector(".apexcharts-series[data\\:realIndex='".concat(a,"']")),n=t.globals.dom.baseEl.querySelector(".apexcharts-datalabels[data\\:realIndex='".concat(a,"']"));var h=t.globals.seriesYAxisReverseMap[a];o=t.globals.dom.baseEl.querySelector(".apexcharts-yaxis[rel='".concat(h,"']"))}else r=t.globals.dom.baseEl.querySelector(".apexcharts-series[rel='".concat(a+1,"']"));else r=t.globals.dom.baseEl.querySelector(".apexcharts-series[rel='".concat(a+1,"'] path"));for(var c=0;c=h.from&&(g0&&arguments[0]!==void 0?arguments[0]:"asc",t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[],i=this.w,a=0;if(i.config.series.length>1){for(var s=i.config.series.map(function(n,o){return n.data&&n.data.length>0&&i.globals.collapsedSeriesIndices.indexOf(o)===-1&&(!i.globals.comboCharts||t.length===0||t.length&&t.indexOf(i.config.series[o].type)>-1)?o:-1}),r=e==="asc"?0:s.length-1;e==="asc"?r=0;e==="asc"?r++:r--)if(s[r]!==-1){a=s[r];break}}return a}},{key:"getBarSeriesIndices",value:function(){return this.w.globals.comboCharts?this.w.config.series.map(function(e,t){return e.type==="bar"||e.type==="column"?t:-1}).filter(function(e){return e!==-1}):this.w.config.series.map(function(e,t){return t})}},{key:"getPreviousPaths",value:function(){var e=this.w;function t(r,n,o){for(var h=r[n].childNodes,c={type:o,paths:[],realIndex:r[n].getAttribute("data:realIndex")},d=0;d0)for(var a=function(r){for(var n=e.globals.dom.baseEl.querySelectorAll(".apexcharts-".concat(e.config.chart.type," .apexcharts-series[data\\:realIndex='").concat(r,"'] rect")),o=[],h=function(d){var g=function(x){return n[d].getAttribute(x)},f={x:parseFloat(g("x")),y:parseFloat(g("y")),width:parseFloat(g("width")),height:parseFloat(g("height"))};o.push({rect:f,color:n[d].getAttribute("color")})},c=0;c0)for(var a=0;a0?t:[]});return e}}]),p}(),Ft=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w,this.twoDSeries=[],this.threeDSeries=[],this.twoDSeriesX=[],this.seriesGoals=[],this.coreUtils=new $(this.ctx)}return R(p,[{key:"isMultiFormat",value:function(){return this.isFormatXY()||this.isFormat2DArray()}},{key:"isFormatXY",value:function(){var e=this.w.config.series.slice(),t=new re(this.ctx);if(this.activeSeriesIndex=t.getActiveConfigSeriesIndex(),e[this.activeSeriesIndex].data!==void 0&&e[this.activeSeriesIndex].data.length>0&&e[this.activeSeriesIndex].data[0]!==null&&e[this.activeSeriesIndex].data[0].x!==void 0&&e[this.activeSeriesIndex].data[0]!==null)return!0}},{key:"isFormat2DArray",value:function(){var e=this.w.config.series.slice(),t=new re(this.ctx);if(this.activeSeriesIndex=t.getActiveConfigSeriesIndex(),e[this.activeSeriesIndex].data!==void 0&&e[this.activeSeriesIndex].data.length>0&&e[this.activeSeriesIndex].data[0]!==void 0&&e[this.activeSeriesIndex].data[0]!==null&&e[this.activeSeriesIndex].data[0].constructor===Array)return!0}},{key:"handleFormat2DArray",value:function(e,t){for(var i=this.w.config,a=this.w.globals,s=i.chart.type==="boxPlot"||i.series[t].type==="boxPlot",r=0;r=5?this.twoDSeries.push(P.parseNumber(e[t].data[r][4])):this.twoDSeries.push(P.parseNumber(e[t].data[r][1])),a.dataFormatXNumeric=!0),i.xaxis.type==="datetime"){var n=new Date(e[t].data[r][0]);n=new Date(n).getTime(),this.twoDSeriesX.push(n)}else this.twoDSeriesX.push(e[t].data[r][0]);for(var o=0;o-1&&(r=this.activeSeriesIndex);for(var n=0;n1&&arguments[1]!==void 0?arguments[1]:this.ctx,a=this.w.config,s=this.w.globals,r=new K(i),n=a.labels.length>0?a.labels.slice():a.xaxis.categories.slice();s.isRangeBar=a.chart.type==="rangeBar"&&s.isBarHorizontal,s.hasXaxisGroups=a.xaxis.type==="category"&&a.xaxis.group.groups.length>0,s.hasXaxisGroups&&(s.groups=a.xaxis.group.groups),e.forEach(function(f,x){f.name!==void 0?s.seriesNames.push(f.name):s.seriesNames.push("series-"+parseInt(x+1,10))}),this.coreUtils.setSeriesYAxisMappings();var o=[],h=te(new Set(a.series.map(function(f){return f.group})));a.series.forEach(function(f,x){var b=h.indexOf(f.group);o[b]||(o[b]=[]),o[b].push(s.seriesNames[x])}),s.seriesGroups=o;for(var c=function(){for(var f=0;f0&&(this.twoDSeriesX=n,s.seriesX.push(this.twoDSeriesX))),s.labels.push(this.twoDSeriesX);var g=e[d].data.map(function(f){return P.parseNumber(f)});s.series.push(g)}s.seriesZ.push(this.threeDSeries),e[d].color!==void 0?s.seriesColors.push(e[d].color):s.seriesColors.push(void 0)}return this.w}},{key:"parseDataNonAxisCharts",value:function(e){var t=this.w.globals,i=this.w.config;t.series=e.slice(),t.seriesNames=i.labels.slice();for(var a=0;a0?i.labels=t.xaxis.categories:t.labels.length>0?i.labels=t.labels.slice():this.fallbackToCategory?(i.labels=i.labels[0],i.seriesRange.length&&(i.seriesRange.map(function(a){a.forEach(function(s){i.labels.indexOf(s.x)<0&&s.x&&i.labels.push(s.x)})}),i.labels=Array.from(new Set(i.labels.map(JSON.stringify)),JSON.parse)),t.xaxis.convertedCatToNumeric&&(new Le(t).convertCatToNumericXaxis(t,this.ctx,i.seriesX[0]),this._generateExternalLabels(e))):this._generateExternalLabels(e)}},{key:"_generateExternalLabels",value:function(e){var t=this.w.globals,i=this.w.config,a=[];if(t.axisCharts){if(t.series.length>0)if(this.isFormatXY())for(var s=i.series.map(function(d,g){return d.data.filter(function(f,x,b){return b.findIndex(function(v){return v.x===f.x})===x})}),r=s.reduce(function(d,g,f,x){return x[d].length>g.length?d:f},0),n=0;n0&&s==i.length&&t.push(a)}),e.globals.ignoreYAxisIndexes=t.map(function(i){return i})}}]),p}(),He=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"scaleSvgNode",value:function(e,t){var i=parseFloat(e.getAttributeNS(null,"width")),a=parseFloat(e.getAttributeNS(null,"height"));e.setAttributeNS(null,"width",i*t),e.setAttributeNS(null,"height",a*t),e.setAttributeNS(null,"viewBox","0 0 "+i+" "+a)}},{key:"getSvgString",value:function(){var e=this;return new Promise(function(t){var i=e.w,a=i.config.chart.toolbar.export.width,s=i.config.chart.toolbar.export.scale||a/i.globals.svgWidth;s||(s=1);var r=e.w.globals.dom.Paper.svg(),n=e.w.globals.dom.Paper.node.cloneNode(!0);s!==1&&e.scaleSvgNode(n,s),e.convertImagesToBase64(n).then(function(){r=new XMLSerializer().serializeToString(n),t(r.replace(/ /g," "))})})}},{key:"convertImagesToBase64",value:function(e){var t=this,i=e.getElementsByTagName("image"),a=Array.from(i).map(function(s){var r=s.getAttributeNS("http://www.w3.org/1999/xlink","href");return r&&!r.startsWith("data:")?t.getBase64FromUrl(r).then(function(n){s.setAttributeNS("http://www.w3.org/1999/xlink","href",n)}).catch(function(n){console.error("Error converting image to base64:",n)}):Promise.resolve()});return Promise.all(a)}},{key:"getBase64FromUrl",value:function(e){return new Promise(function(t,i){var a=new Image;a.crossOrigin="Anonymous",a.onload=function(){var s=document.createElement("canvas");s.width=a.width,s.height=a.height,s.getContext("2d").drawImage(a,0,0),t(s.toDataURL())},a.onerror=i,a.src=e})}},{key:"cleanup",value:function(){var e=this.w,t=e.globals.dom.baseEl.getElementsByClassName("apexcharts-xcrosshairs"),i=e.globals.dom.baseEl.getElementsByClassName("apexcharts-ycrosshairs"),a=e.globals.dom.baseEl.querySelectorAll(".apexcharts-zoom-rect, .apexcharts-selection-rect");Array.prototype.forEach.call(a,function(s){s.setAttribute("width",0)}),t&&t[0]&&(t[0].setAttribute("x",-500),t[0].setAttribute("x1",-500),t[0].setAttribute("x2",-500)),i&&i[0]&&(i[0].setAttribute("y",-100),i[0].setAttribute("y1",-100),i[0].setAttribute("y2",-100))}},{key:"svgUrl",value:function(){var e=this;return new Promise(function(t){e.cleanup(),e.getSvgString().then(function(i){var a=new Blob([i],{type:"image/svg+xml;charset=utf-8"});t(URL.createObjectURL(a))})})}},{key:"dataURI",value:function(e){var t=this;return new Promise(function(i){var a=t.w,s=e?e.scale||e.width/a.globals.svgWidth:1;t.cleanup();var r=document.createElement("canvas");r.width=a.globals.svgWidth*s,r.height=parseInt(a.globals.dom.elWrap.style.height,10)*s;var n=a.config.chart.background!=="transparent"&&a.config.chart.background?a.config.chart.background:"#fff",o=r.getContext("2d");o.fillStyle=n,o.fillRect(0,0,r.width*s,r.height*s),t.getSvgString().then(function(h){var c="data:image/svg+xml,"+encodeURIComponent(h),d=new Image;d.crossOrigin="anonymous",d.onload=function(){if(o.drawImage(d,0,0),r.msToBlob){var g=r.msToBlob();i({blob:g})}else{var f=r.toDataURL("image/png");i({imgURI:f})}},d.src=c})})}},{key:"exportToSVG",value:function(){var e=this;this.svgUrl().then(function(t){e.triggerDownload(t,e.w.config.chart.toolbar.export.svg.filename,".svg")})}},{key:"exportToPng",value:function(){var e=this,t=this.w.config.chart.toolbar.export.scale,i=this.w.config.chart.toolbar.export.width,a=t?{scale:t}:i?{width:i}:void 0;this.dataURI(a).then(function(s){var r=s.imgURI,n=s.blob;n?navigator.msSaveOrOpenBlob(n,e.w.globals.chartID+".png"):e.triggerDownload(r,e.w.config.chart.toolbar.export.png.filename,".png")})}},{key:"exportToCSV",value:function(e){var t=this,i=e.series,a=e.fileName,s=e.columnDelimiter,r=s===void 0?",":s,n=e.lineDelimiter,o=n===void 0?` -`:n,h=this.w;i||(i=h.config.series);var c,d,g=[],f=[],x="",b=h.globals.series.map(function(k,S){return h.globals.collapsedSeriesIndices.indexOf(S)===-1?k:[]}),v=function(k){return typeof h.config.chart.toolbar.export.csv.categoryFormatter=="function"?h.config.chart.toolbar.export.csv.categoryFormatter(k):h.config.xaxis.type==="datetime"&&String(k).length>=10?new Date(k).toDateString():P.isNumber(k)?k:k.split(r).join("")},y=function(k){return typeof h.config.chart.toolbar.export.csv.valueFormatter=="function"?h.config.chart.toolbar.export.csv.valueFormatter(k):k},w=Math.max.apply(Math,te(i.map(function(k){return k.data?k.data.length:0}))),l=new Ft(this.ctx),u=new ge(this.ctx),m=function(k){var S="";if(h.globals.axisCharts){if(h.config.xaxis.type==="category"||h.config.xaxis.convertedCatToNumeric)if(h.globals.isBarHorizontal){var L=h.globals.yLabelFormatters[0],C=new re(t.ctx).getActiveConfigSeriesIndex();S=L(h.globals.labels[k],{seriesIndex:C,dataPointIndex:k,w:h})}else S=u.getLabel(h.globals.labels,h.globals.timescaleLabels,0,k).text;h.config.xaxis.type==="datetime"&&(h.config.xaxis.categories.length?S=h.config.xaxis.categories[k]:h.config.labels.length&&(S=h.config.labels[k]))}else S=h.config.labels[k];return S===null?"nullvalue":(Array.isArray(S)&&(S=S.join(" ")),P.isNumber(S)?S:S.split(r).join(""))},A=function(k,S){if(g.length&&S===0&&f.push(g.join(r)),k.data){k.data=k.data.length&&k.data||te(Array(w)).map(function(){return""});for(var L=0;L0&&!i.globals.isBarHorizontal&&(this.xaxisLabels=i.globals.timescaleLabels.slice()),i.config.xaxis.overwriteCategories&&(this.xaxisLabels=i.config.xaxis.overwriteCategories),this.drawnLabels=[],this.drawnLabelsRects=[],i.config.xaxis.position==="top"?this.offY=0:this.offY=i.globals.gridHeight,this.offY=this.offY+i.config.xaxis.axisBorder.offsetY,this.isCategoryBarHorizontal=i.config.chart.type==="bar"&&i.config.plotOptions.bar.horizontal,this.xaxisFontSize=i.config.xaxis.labels.style.fontSize,this.xaxisFontFamily=i.config.xaxis.labels.style.fontFamily,this.xaxisForeColors=i.config.xaxis.labels.style.colors,this.xaxisBorderWidth=i.config.xaxis.axisBorder.width,this.isCategoryBarHorizontal&&(this.xaxisBorderWidth=i.config.yaxis[0].axisBorder.width.toString()),this.xaxisBorderWidth.indexOf("%")>-1?this.xaxisBorderWidth=i.globals.gridWidth*parseInt(this.xaxisBorderWidth,10)/100:this.xaxisBorderWidth=parseInt(this.xaxisBorderWidth,10),this.xaxisBorderHeight=i.config.xaxis.axisBorder.height,this.yaxis=i.config.yaxis[0]}return R(p,[{key:"drawXaxis",value:function(){var e=this.w,t=new X(this.ctx),i=t.group({class:"apexcharts-xaxis",transform:"translate(".concat(e.config.xaxis.offsetX,", ").concat(e.config.xaxis.offsetY,")")}),a=t.group({class:"apexcharts-xaxis-texts-g",transform:"translate(".concat(e.globals.translateXAxisX,", ").concat(e.globals.translateXAxisY,")")});i.add(a);for(var s=[],r=0;r6&&arguments[6]!==void 0?arguments[6]:{},c=[],d=[],g=this.w,f=h.xaxisFontSize||this.xaxisFontSize,x=h.xaxisFontFamily||this.xaxisFontFamily,b=h.xaxisForeColors||this.xaxisForeColors,v=h.fontWeight||g.config.xaxis.labels.style.fontWeight,y=h.cssClass||g.config.xaxis.labels.style.cssClass,w=g.globals.padHorizontal,l=a.length,u=g.config.xaxis.type==="category"?g.globals.dataPoints:l;if(u===0&&l>u&&(u=l),s){var m=u>1?u-1:u;n=g.globals.gridWidth/Math.min(m,l-1),w=w+r(0,n)/2+g.config.xaxis.labels.offsetX}else n=g.globals.gridWidth/u,w=w+r(0,n)+g.config.xaxis.labels.offsetX;for(var A=function(S){var L=w-r(S,n)/2+g.config.xaxis.labels.offsetX;S===0&&l===1&&n/2===w&&u===1&&(L=g.globals.gridWidth/2);var C=o.axesUtils.getLabel(a,g.globals.timescaleLabels,L,S,c,f,e),I=28;if(g.globals.rotateXLabels&&e&&(I=22),g.config.xaxis.title.text&&g.config.xaxis.position==="top"&&(I+=parseFloat(g.config.xaxis.title.style.fontSize)+2),e||(I=I+parseFloat(f)+(g.globals.xAxisLabelsHeight-g.globals.xAxisGroupLabelsHeight)+(g.globals.rotateXLabels?10:0)),C=g.config.xaxis.tickAmount!==void 0&&g.config.xaxis.tickAmount!=="dataPoints"&&g.config.xaxis.type!=="datetime"?o.axesUtils.checkLabelBasedOnTickamount(S,C,l):o.axesUtils.checkForOverflowingLabels(S,C,l,c,d),g.config.xaxis.labels.show){var z=t.drawText({x:C.x,y:o.offY+g.config.xaxis.labels.offsetY+I-(g.config.xaxis.position==="top"?g.globals.xAxisHeight+g.config.xaxis.axisTicks.height-2:0),text:C.text,textAnchor:"middle",fontWeight:C.isBold?600:v,fontSize:f,fontFamily:x,foreColor:Array.isArray(b)?e&&g.config.xaxis.convertedCatToNumeric?b[g.globals.minX+S-1]:b[S]:b,isPlainText:!1,cssClass:(e?"apexcharts-xaxis-label ":"apexcharts-xaxis-group-label ")+y});if(i.add(z),z.on("click",function(T){if(typeof g.config.chart.events.xAxisLabelClick=="function"){var E=Object.assign({},g,{labelIndex:S});g.config.chart.events.xAxisLabelClick(T,o.ctx,E)}}),e){var M=document.createElementNS(g.globals.SVGNS,"title");M.textContent=Array.isArray(C.text)?C.text.join(" "):C.text,z.node.appendChild(M),C.text!==""&&(c.push(C.text),d.push(C))}}Sa.globals.gridWidth)){var r=this.offY+a.config.xaxis.axisTicks.offsetY;if(t=t+r+a.config.xaxis.axisTicks.height,a.config.xaxis.position==="top"&&(t=r-a.config.xaxis.axisTicks.height),a.config.xaxis.axisTicks.show){var n=new X(this.ctx).drawLine(e+a.config.xaxis.axisTicks.offsetX,r+a.config.xaxis.offsetY,s+a.config.xaxis.axisTicks.offsetX,t+a.config.xaxis.offsetY,a.config.xaxis.axisTicks.color);i.add(n),n.node.classList.add("apexcharts-xaxis-tick")}}}},{key:"getXAxisTicksPositions",value:function(){var e=this.w,t=[],i=this.xaxisLabels.length,a=e.globals.padHorizontal;if(e.globals.timescaleLabels.length>0)for(var s=0;s0){var c=s[s.length-1].getBBox(),d=s[0].getBBox();c.x<-20&&s[s.length-1].parentNode.removeChild(s[s.length-1]),d.x+d.width>e.globals.gridWidth&&!e.globals.isBarHorizontal&&s[0].parentNode.removeChild(s[0]);for(var g=0;g0&&(this.xaxisLabels=t.globals.timescaleLabels.slice())}return R(p,[{key:"drawGridArea",value:function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:null,t=this.w,i=new X(this.ctx);e===null&&(e=i.group({class:"apexcharts-grid"}));var a=i.drawLine(t.globals.padHorizontal,1,t.globals.padHorizontal,t.globals.gridHeight,"transparent"),s=i.drawLine(t.globals.padHorizontal,t.globals.gridHeight,t.globals.gridWidth,t.globals.gridHeight,"transparent");return e.add(s),e.add(a),e}},{key:"drawGrid",value:function(){var e=null;return this.w.globals.axisCharts&&(e=this.renderGrid(),this.drawGridArea(e.el)),e}},{key:"createGridMask",value:function(){var e=this.w,t=e.globals,i=new X(this.ctx),a=Array.isArray(e.config.stroke.width)?0:e.config.stroke.width;if(Array.isArray(e.config.stroke.width)){var s=0;e.config.stroke.width.forEach(function(d){s=Math.max(s,d)}),a=s}t.dom.elGridRectMask=document.createElementNS(t.SVGNS,"clipPath"),t.dom.elGridRectMask.setAttribute("id","gridRectMask".concat(t.cuid)),t.dom.elGridRectMarkerMask=document.createElementNS(t.SVGNS,"clipPath"),t.dom.elGridRectMarkerMask.setAttribute("id","gridRectMarkerMask".concat(t.cuid)),t.dom.elForecastMask=document.createElementNS(t.SVGNS,"clipPath"),t.dom.elForecastMask.setAttribute("id","forecastMask".concat(t.cuid)),t.dom.elNonForecastMask=document.createElementNS(t.SVGNS,"clipPath"),t.dom.elNonForecastMask.setAttribute("id","nonForecastMask".concat(t.cuid));var r=e.config.chart.type,n=0,o=0;(r==="bar"||r==="rangeBar"||r==="candlestick"||r==="boxPlot"||e.globals.comboBarCount>0)&&e.globals.isXNumeric&&!e.globals.isBarHorizontal&&(n=e.config.grid.padding.left,o=e.config.grid.padding.right,t.barPadForNumericAxis>n&&(n=t.barPadForNumericAxis,o=t.barPadForNumericAxis)),t.dom.elGridRect=i.drawRect(-a/2-n-2,-a/2-2,t.gridWidth+a+o+n+4,t.gridHeight+a+4,0,"#fff");var h=e.globals.markers.largestSize+1;t.dom.elGridRectMarker=i.drawRect(2*-h,2*-h,t.gridWidth+4*h,t.gridHeight+4*h,0,"#fff"),t.dom.elGridRectMask.appendChild(t.dom.elGridRect.node),t.dom.elGridRectMarkerMask.appendChild(t.dom.elGridRectMarker.node);var c=t.dom.baseEl.querySelector("defs");c.appendChild(t.dom.elGridRectMask),c.appendChild(t.dom.elForecastMask),c.appendChild(t.dom.elNonForecastMask),c.appendChild(t.dom.elGridRectMarkerMask)}},{key:"_drawGridLines",value:function(e){var t=e.i,i=e.x1,a=e.y1,s=e.x2,r=e.y2,n=e.xCount,o=e.parent,h=this.w;if(!(t===0&&h.globals.skipFirstTimelinelabel||t===n-1&&h.globals.skipLastTimelinelabel&&!h.config.xaxis.labels.formatter||h.config.chart.type==="radar")){h.config.grid.xaxis.lines.show&&this._drawGridLine({i:t,x1:i,y1:a,x2:s,y2:r,xCount:n,parent:o});var c=0;if(h.globals.hasXaxisGroups&&h.config.xaxis.tickPlacement==="between"){var d=h.globals.groups;if(d){for(var g=0,f=0;g0&&e.config.xaxis.type!=="datetime"&&(s=t.yAxisScale[a].result.length-1)),this._drawXYLines({xCount:s,tickAmount:r})}else s=r,r=t.xTickAmount,this._drawInvertedXYLines({xCount:s,tickAmount:r});return this.drawGridBands(s,r),{el:this.elg,elGridBorders:this.elGridBorders,xAxisTickWidth:t.gridWidth/s}}},{key:"drawGridBands",value:function(e,t){var i=this.w;if(i.config.grid.row.colors!==void 0&&i.config.grid.row.colors.length>0)for(var a=0,s=i.globals.gridHeight/t,r=i.globals.gridWidth,n=0,o=0;n=i.config.grid.row.colors.length&&(o=0),this._drawGridBandRect({c:o,x1:0,y1:a,x2:r,y2:s,type:"row"}),a+=i.globals.gridHeight/t;if(i.config.grid.column.colors!==void 0&&i.config.grid.column.colors.length>0){var h=i.globals.isBarHorizontal||i.config.xaxis.tickPlacement!=="on"||i.config.xaxis.type!=="category"&&!i.config.xaxis.convertedCatToNumeric?e:e-1;i.globals.isXNumeric&&(h=i.globals.xAxisScale.result.length-1);for(var c=i.globals.padHorizontal,d=i.globals.padHorizontal+i.globals.gridWidth/h,g=i.globals.gridHeight,f=0,x=0;f=i.config.grid.column.colors.length&&(x=0),i.config.xaxis.type==="datetime"&&(c=this.xaxisLabels[f].position,d=(((b=this.xaxisLabels[f+1])===null||b===void 0?void 0:b.position)||i.globals.gridWidth)-this.xaxisLabels[f].position),this._drawGridBandRect({c:x,x1:c,y1:0,x2:d,y2:g,type:"column"}),c+=i.globals.gridWidth/h}}}}]),p}(),Ot=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"niceScale",value:function(e,t){var i,a,s,r,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,o=1e-11,h=this.w,c=h.globals;c.isBarHorizontal?(i=h.config.xaxis,a=Math.max((c.svgWidth-100)/25,2)):(i=h.config.yaxis[n],a=Math.max((c.svgHeight-100)/15,2)),P.isNumber(a)||(a=10),s=i.min!==void 0&&i.min!==null,r=i.max!==void 0&&i.min!==null;var d=i.stepSize!==void 0&&i.stepSize!==null,g=i.tickAmount!==void 0&&i.tickAmount!==null,f=g?i.tickAmount:c.niceScaleDefaultTicks[Math.min(Math.round(a/2),c.niceScaleDefaultTicks.length-1)];if(c.isMultipleYAxis&&!g&&c.multiAxisTickAmount>0&&(f=c.multiAxisTickAmount,g=!0),f=f==="dataPoints"?c.dataPoints-1:Math.abs(Math.round(f)),(e===Number.MIN_VALUE&&t===0||!P.isNumber(e)&&!P.isNumber(t)||e===Number.MIN_VALUE&&t===-Number.MAX_VALUE)&&(e=P.isNumber(i.min)?i.min:0,t=P.isNumber(i.max)?i.max:e+f,c.allSeriesCollapsed=!1),e>t){console.warn("axis.min cannot be greater than axis.max: swapping min and max");var x=t;t=e,e=x}else e===t&&(e=e===0?0:e-1,t=t===0?2:t+1);var b=[];f<1&&(f=1);var v=f,y=Math.abs(t-e);!s&&e>0&&e/y<.15&&(e=0,s=!0),!r&&t<0&&-t/y<.15&&(t=0,r=!0);var w=(y=Math.abs(t-e))/v,l=w,u=Math.floor(Math.log10(l)),m=Math.pow(10,u),A=Math.ceil(l/m);if(w=l=(A=c.niceScaleAllowedMagMsd[c.yValueDecimal===0?0:1][A])*m,c.isBarHorizontal&&i.stepSize&&i.type!=="datetime"?(w=i.stepSize,d=!0):d&&(w=i.stepSize),d&&i.forceNiceScale){var k=Math.floor(Math.log10(w));w*=Math.pow(10,u-k)}if(s&&r){var S=y/v;if(g)if(d)if(P.mod(y,w)!=0){var L=P.getGCD(w,S);w=S/L<10?L:S}else P.mod(w,S)==0?w=S:(S=w,g=!1);else w=S;else if(d)P.mod(y,w)==0?S=w:w=S;else if(P.mod(y,w)==0)S=w;else{S=y/(v=Math.ceil(y/w));var C=P.getGCD(y,w);y/Ca&&(e=t-w*f,e+=w*Math.floor((I-e)/w))}else if(s)if(g)t=e+w*v;else{var z=t;t=w*Math.ceil(t/w),Math.abs(t-e)/P.getGCD(y,w)>a&&(t=e+w*f,t+=w*Math.ceil((z-t)/w))}}else if(c.isMultipleYAxis&&g){var M=w*Math.floor(e/w),T=M+w*v;T0&&e16&&P.getPrimeFactors(v).length<2&&v++,!g&&i.forceNiceScale&&c.yValueDecimal===0&&v>y&&(v=y,w=Math.round(y/v)),v>a&&(!g&&!d||i.forceNiceScale)){var E=P.getPrimeFactors(v),O=E.length-1,D=v;e:for(var H=0;Hse);return{result:b,niceMin:b[0],niceMax:b[b.length-1]}}},{key:"linearScale",value:function(e,t){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:10,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,s=arguments.length>4&&arguments[4]!==void 0?arguments[4]:void 0,r=Math.abs(t-e),n=[];if(e===t)return{result:n=[e],niceMin:n[0],niceMax:n[n.length-1]};(i=this._adjustTicksForSmallRange(i,a,r))==="dataPoints"&&(i=this.w.globals.dataPoints-1),s||(s=r/i),s=Math.round(10*(s+Number.EPSILON))/10,i===Number.MAX_VALUE&&(i=5,s=1);for(var o=e;i>=0;)n.push(o),o=P.preciseAddition(o,s),i-=1;return{result:n,niceMin:n[0],niceMax:n[n.length-1]}}},{key:"logarithmicScaleNice",value:function(e,t,i){t<=0&&(t=Math.max(e,i)),e<=0&&(e=Math.min(t,i));for(var a=[],s=Math.ceil(Math.log(t)/Math.log(i)+1),r=Math.floor(Math.log(e)/Math.log(i));r5?(a.allSeriesCollapsed=!1,a.yAxisScale[e]=r.forceNiceScale?this.logarithmicScaleNice(t,i,r.logBase):this.logarithmicScale(t,i,r.logBase)):i!==-Number.MAX_VALUE&&P.isNumber(i)&&t!==Number.MAX_VALUE&&P.isNumber(t)?(a.allSeriesCollapsed=!1,a.yAxisScale[e]=this.niceScale(t,i,e)):a.yAxisScale[e]=this.niceScale(Number.MIN_VALUE,0,e)}},{key:"setXScale",value:function(e,t){var i=this.w,a=i.globals,s=Math.abs(t-e);if(t!==-Number.MAX_VALUE&&P.isNumber(t)){var r=a.xTickAmount+1;s<10&&s>1&&(r=s),a.xAxisScale=this.linearScale(e,t,r,0,i.config.xaxis.stepSize)}else a.xAxisScale=this.linearScale(0,10,10);return a.xAxisScale}},{key:"setSeriesYAxisMappings",value:function(){var e=this.w.globals,t=this.w.config,i=[],a=[],s=[],r=e.series.length>t.yaxis.length||t.yaxis.some(function(d){return Array.isArray(d.seriesName)});t.series.forEach(function(d,g){s.push(g),a.push(null)}),t.yaxis.forEach(function(d,g){i[g]=[]});var n=[];t.yaxis.forEach(function(d,g){var f=!1;if(d.seriesName){var x=[];Array.isArray(d.seriesName)?x=d.seriesName:x.push(d.seriesName),x.forEach(function(b){t.series.forEach(function(v,y){if(v.name===b){var w=y;g===y||r?!r||s.indexOf(y)>-1?i[g].push([g,y]):console.warn("Series '"+v.name+"' referenced more than once in what looks like the new style. That is, when using either seriesName: [], or when there are more series than yaxes."):(i[y].push([y,g]),w=g),f=!0,(w=s.indexOf(w))!==-1&&s.splice(w,1)}})})}f||n.push(g)}),i=i.map(function(d,g){var f=[];return d.forEach(function(x){a[x[1]]=x[0],f.push(x[1])}),f});for(var o=t.yaxis.length-1,h=0;h0?function(){var c,d,g=Number.MAX_VALUE,f=-Number.MAX_VALUE,x=g,b=f;if(t.chart.stacked)(function(){var w=i.seriesX[n[0]],l=[],u=[],m=[];h.forEach(function(){l.push(w.map(function(){return Number.MIN_VALUE})),u.push(w.map(function(){return Number.MIN_VALUE})),m.push(w.map(function(){return Number.MIN_VALUE}))});for(var A=function(S){!c&&t.series[n[S]].type&&(c=t.series[n[S]].type);var L=n[S];d=t.series[L].group?t.series[L].group:"axis-".concat(o),!(i.collapsedSeriesIndices.indexOf(L)<0&&i.ancillaryCollapsedSeriesIndices.indexOf(L)<0)||(i.allSeriesCollapsed=!1,h.forEach(function(C,I){if(t.series[L].group===C)for(var z=0;z=0?u[I][z]+=M:m[I][z]+=M,l[I][z]+=M,x=Math.min(x,M),b=Math.max(b,M)}})),c!=="bar"&&c!=="column"||i.barGroups.push(d)},k=0;k1&&arguments[1]!==void 0?arguments[1]:Number.MAX_VALUE,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:-Number.MAX_VALUE,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:null,s=this.w.config,r=this.w.globals,n=-Number.MAX_VALUE,o=Number.MIN_VALUE;a===null&&(a=e+1);var h=r.series,c=h,d=h;s.chart.type==="candlestick"?(c=r.seriesCandleL,d=r.seriesCandleH):s.chart.type==="boxPlot"?(c=r.seriesCandleO,d=r.seriesCandleC):r.isRangeData&&(c=r.seriesRangeStart,d=r.seriesRangeEnd);var g=!1;if(r.seriesX.length>=a){var f,x=(f=r.brushSource)===null||f===void 0?void 0:f.w.config.chart.brush;(s.chart.zoom.enabled&&s.chart.zoom.autoScaleYaxis||x!=null&&x.enabled&&x!=null&&x.autoScaleYaxis)&&(g=!0)}for(var b=e;by&&r.seriesX[b][w]>s.xaxis.max;w--);}for(var l=y;l<=w&&lc[b][l]&&c[b][l]<0&&(o=c[b][l])}else r.hasNullValues=!0}v!=="bar"&&v!=="column"||(o<0&&n<0&&(n=0,i=Math.max(i,0)),o===Number.MIN_VALUE&&(o=0,t=Math.min(t,0)))}return s.chart.type==="rangeBar"&&r.seriesRangeStart.length&&r.isBarHorizontal&&(o=t),s.chart.type==="bar"&&(o<0&&n<0&&(n=0),o===Number.MIN_VALUE&&(o=0)),{minY:o,maxY:n,lowestY:t,highestY:i}}},{key:"setYRange",value:function(){var e=this.w.globals,t=this.w.config;e.maxY=-Number.MAX_VALUE,e.minY=Number.MIN_VALUE;var i,a=Number.MAX_VALUE;if(e.isMultipleYAxis){a=Number.MAX_VALUE;for(var s=0;se.dataPoints&&e.dataPoints!==0&&(a=e.dataPoints-1);else if(t.xaxis.tickAmount==="dataPoints"){if(e.series.length>1&&(a=e.series[e.maxValsInArrayIndex].length-1),e.isXNumeric){var s=e.maxX-e.minX;s<30&&(a=s-1)}}else a=t.xaxis.tickAmount;if(e.xTickAmount=a,t.xaxis.max!==void 0&&typeof t.xaxis.max=="number"&&(e.maxX=t.xaxis.max),t.xaxis.min!==void 0&&typeof t.xaxis.min=="number"&&(e.minX=t.xaxis.min),t.xaxis.range!==void 0&&(e.minX=e.maxX-t.xaxis.range),e.minX!==Number.MAX_VALUE&&e.maxX!==-Number.MAX_VALUE)if(t.xaxis.convertedCatToNumeric&&!e.dataFormatXNumeric){for(var r=[],n=e.minX-1;n0&&(e.xAxisScale=this.scales.linearScale(1,e.labels.length,a-1,0,t.xaxis.stepSize),e.seriesX=e.labels.slice());i&&(e.labels=e.xAxisScale.result.slice())}return e.isBarHorizontal&&e.labels.length&&(e.xTickAmount=e.labels.length),this._handleSingleDataPoint(),this._getMinXDiff(),{minX:e.minX,maxX:e.maxX}}},{key:"setZRange",value:function(){var e=this.w.globals;if(e.isDataXYZ){for(var t=0;t0){var n=s-a[r-1];n>0&&(e.minXDiff=Math.min(n,e.minXDiff))}}),e.dataPoints!==1&&e.minXDiff!==Number.MAX_VALUE||(e.minXDiff=.5)})}},{key:"_setStackedMinMax",value:function(){var e=this,t=this.w.globals;if(t.series.length){var i=t.seriesGroups;i.length||(i=[this.w.globals.seriesNames.map(function(r){return r})]);var a={},s={};i.forEach(function(r){a[r]=[],s[r]=[],e.w.config.series.map(function(n,o){return r.indexOf(t.seriesNames[o])>-1?o:null}).filter(function(n){return n!==null}).forEach(function(n){for(var o=0;o0?a[r][o]+=parseFloat(t.series[n][o])+1e-4:s[r][o]+=parseFloat(t.series[n][o]))}})}),Object.entries(a).forEach(function(r){var n=It(r,1)[0];a[n].forEach(function(o,h){t.maxY=Math.max(t.maxY,a[n][h]),t.minY=Math.min(t.minY,s[n][h])})})}}}]),p}(),lt=function(){function p(e,t){F(this,p),this.ctx=e,this.elgrid=t,this.w=e.w;var i=this.w;this.xaxisFontSize=i.config.xaxis.labels.style.fontSize,this.axisFontFamily=i.config.xaxis.labels.style.fontFamily,this.xaxisForeColors=i.config.xaxis.labels.style.colors,this.isCategoryBarHorizontal=i.config.chart.type==="bar"&&i.config.plotOptions.bar.horizontal,this.xAxisoffX=0,i.config.xaxis.position==="bottom"&&(this.xAxisoffX=i.globals.gridHeight),this.drawnLabels=[],this.axesUtils=new ge(e)}return R(p,[{key:"drawYaxis",value:function(e){var t=this,i=this.w,a=new X(this.ctx),s=i.config.yaxis[e].labels.style,r=s.fontSize,n=s.fontFamily,o=s.fontWeight,h=a.group({class:"apexcharts-yaxis",rel:e,transform:"translate("+i.globals.translateYAxisX[e]+", 0)"});if(this.axesUtils.isYAxisHidden(e))return h;var c=a.group({class:"apexcharts-yaxis-texts-g"});h.add(c);var d=i.globals.yAxisScale[e].result.length-1,g=i.globals.gridHeight/d,f=i.globals.yLabelFormatters[e],x=i.globals.yAxisScale[e].result.slice();x=this.axesUtils.checkForReversedLabels(e,x);var b="";if(i.config.yaxis[e].labels.show){var v=i.globals.translateY+i.config.yaxis[e].labels.offsetY;i.globals.isBarHorizontal?v=0:i.config.chart.type==="heatmap"&&(v-=g/2),v+=parseInt(i.config.yaxis[e].labels.style.fontSize,10)/3;for(var y=function(L){var C=x[L];C=f(C,L,i);var I=i.config.yaxis[e].labels.padding;i.config.yaxis[e].opposite&&i.config.yaxis.length!==0&&(I*=-1);var z="end";i.config.yaxis[e].opposite&&(z="start"),i.config.yaxis[e].labels.align==="left"?z="start":i.config.yaxis[e].labels.align==="center"?z="middle":i.config.yaxis[e].labels.align==="right"&&(z="end");var M=t.axesUtils.getYAxisForeColor(s.colors,e),T=P.listToArray(i.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxis[rel='".concat(e,"'] .apexcharts-yaxis-label tspan"))).map(function(W){return W.textContent}),E=a.drawText({x:I,y:v,text:T.indexOf(C)>=0?"":C,textAnchor:z,fontSize:r,fontFamily:n,fontWeight:o,maxWidth:i.config.yaxis[e].labels.maxWidth,foreColor:Array.isArray(M)?M[L]:M,isPlainText:!1,cssClass:"apexcharts-yaxis-label "+s.cssClass});L===d&&(b=E),c.add(E);var O=document.createElementNS(i.globals.SVGNS,"title");if(O.textContent=Array.isArray(C)?C.join(" "):C,E.node.appendChild(O),i.config.yaxis[e].labels.rotate!==0){var D=a.rotateAroundCenter(b.node),H=a.rotateAroundCenter(E.node);E.node.setAttribute("transform","rotate(".concat(i.config.yaxis[e].labels.rotate," ").concat(D.x," ").concat(H.y,")"))}v+=g},w=d;w>=0;w--)y(w)}if(i.config.yaxis[e].title.text!==void 0){var l=a.group({class:"apexcharts-yaxis-title"}),u=0;i.config.yaxis[e].opposite&&(u=i.globals.translateYAxisX[e]);var m=a.drawText({x:u,y:i.globals.gridHeight/2+i.globals.translateY+i.config.yaxis[e].title.offsetY,text:i.config.yaxis[e].title.text,textAnchor:"end",foreColor:i.config.yaxis[e].title.style.color,fontSize:i.config.yaxis[e].title.style.fontSize,fontWeight:i.config.yaxis[e].title.style.fontWeight,fontFamily:i.config.yaxis[e].title.style.fontFamily,cssClass:"apexcharts-yaxis-title-text "+i.config.yaxis[e].title.style.cssClass});l.add(m),h.add(l)}var A=i.config.yaxis[e].axisBorder,k=31+A.offsetX;if(i.config.yaxis[e].opposite&&(k=-31-A.offsetX),A.show){var S=a.drawLine(k,i.globals.translateY+A.offsetY-2,k,i.globals.gridHeight+i.globals.translateY+A.offsetY+2,A.color,0,A.width);h.add(S)}return i.config.yaxis[e].axisTicks.show&&this.axesUtils.drawYAxisTicks(k,d,A,i.config.yaxis[e].axisTicks,e,g,h),h}},{key:"drawYaxisInversed",value:function(e){var t=this.w,i=new X(this.ctx),a=i.group({class:"apexcharts-xaxis apexcharts-yaxis-inversed"}),s=i.group({class:"apexcharts-xaxis-texts-g",transform:"translate(".concat(t.globals.translateXAxisX,", ").concat(t.globals.translateXAxisY,")")});a.add(s);var r=t.globals.yAxisScale[e].result.length-1,n=t.globals.gridWidth/r+.1,o=n+t.config.xaxis.labels.offsetX,h=t.globals.xLabelFormatter,c=t.globals.yAxisScale[e].result.slice(),d=t.globals.timescaleLabels;d.length>0&&(this.xaxisLabels=d.slice(),r=(c=d.slice()).length),c=this.axesUtils.checkForReversedLabels(e,c);var g=d.length;if(t.config.xaxis.labels.show)for(var f=g?0:r;g?f=0;g?f++:f--){var x=c[f];x=h(x,f,t);var b=t.globals.gridWidth+t.globals.padHorizontal-(o-n+t.config.xaxis.labels.offsetX);if(d.length){var v=this.axesUtils.getLabel(c,d,b,f,this.drawnLabels,this.xaxisFontSize);b=v.x,x=v.text,this.drawnLabels.push(v.text),f===0&&t.globals.skipFirstTimelinelabel&&(x=""),f===c.length-1&&t.globals.skipLastTimelinelabel&&(x="")}var y=i.drawText({x:b,y:this.xAxisoffX+t.config.xaxis.labels.offsetY+30-(t.config.xaxis.position==="top"?t.globals.xAxisHeight+t.config.xaxis.axisTicks.height-2:0),text:x,textAnchor:"middle",foreColor:Array.isArray(this.xaxisForeColors)?this.xaxisForeColors[e]:this.xaxisForeColors,fontSize:this.xaxisFontSize,fontFamily:this.xaxisFontFamily,fontWeight:t.config.xaxis.labels.style.fontWeight,isPlainText:!1,cssClass:"apexcharts-xaxis-label "+t.config.xaxis.labels.style.cssClass});s.add(y),y.tspan(x);var w=document.createElementNS(t.globals.SVGNS,"title");w.textContent=x,y.node.appendChild(w),o+=n}return this.inversedYAxisTitleText(a),this.inversedYAxisBorder(a),a}},{key:"inversedYAxisBorder",value:function(e){var t=this.w,i=new X(this.ctx),a=t.config.xaxis.axisBorder;if(a.show){var s=0;t.config.chart.type==="bar"&&t.globals.isXNumeric&&(s-=15);var r=i.drawLine(t.globals.padHorizontal+s+a.offsetX,this.xAxisoffX,t.globals.gridWidth,this.xAxisoffX,a.color,0,a.height);this.elgrid&&this.elgrid.elGridBorders&&t.config.grid.show?this.elgrid.elGridBorders.add(r):e.add(r)}}},{key:"inversedYAxisTitleText",value:function(e){var t=this.w,i=new X(this.ctx);if(t.config.xaxis.title.text!==void 0){var a=i.group({class:"apexcharts-xaxis-title apexcharts-yaxis-title-inversed"}),s=i.drawText({x:t.globals.gridWidth/2+t.config.xaxis.title.offsetX,y:this.xAxisoffX+parseFloat(this.xaxisFontSize)+parseFloat(t.config.xaxis.title.style.fontSize)+t.config.xaxis.title.offsetY+20,text:t.config.xaxis.title.text,textAnchor:"middle",fontSize:t.config.xaxis.title.style.fontSize,fontFamily:t.config.xaxis.title.style.fontFamily,fontWeight:t.config.xaxis.title.style.fontWeight,foreColor:t.config.xaxis.title.style.color,cssClass:"apexcharts-xaxis-title-text "+t.config.xaxis.title.style.cssClass});a.add(s),e.add(a)}}},{key:"yAxisTitleRotate",value:function(e,t){var i=this.w,a=new X(this.ctx),s={width:0,height:0},r={width:0,height:0},n=i.globals.dom.baseEl.querySelector(" .apexcharts-yaxis[rel='".concat(e,"'] .apexcharts-yaxis-texts-g"));n!==null&&(s=n.getBoundingClientRect());var o=i.globals.dom.baseEl.querySelector(".apexcharts-yaxis[rel='".concat(e,"'] .apexcharts-yaxis-title text"));if(o!==null&&(r=o.getBoundingClientRect()),o!==null){var h=this.xPaddingForYAxisTitle(e,s,r,t);o.setAttribute("x",h.xPos-(t?10:0))}if(o!==null){var c=a.rotateAroundCenter(o);o.setAttribute("transform","rotate(".concat(t?-1*i.config.yaxis[e].title.rotate:i.config.yaxis[e].title.rotate," ").concat(c.x," ").concat(c.y,")"))}}},{key:"xPaddingForYAxisTitle",value:function(e,t,i,a){var s=this.w,r=0,n=0,o=10;return s.config.yaxis[e].title.text===void 0||e<0?{xPos:n,padd:0}:(a?(n=t.width+s.config.yaxis[e].title.offsetX+i.width/2+o/2,(r+=1)===0&&(n-=o/2)):(n=-1*t.width+s.config.yaxis[e].title.offsetX+o/2+i.width/2,s.globals.isBarHorizontal&&(o=25,n=-1*t.width-s.config.yaxis[e].title.offsetX-o)),{xPos:n,padd:o})}},{key:"setYAxisXPosition",value:function(e,t){var i=this.w,a=0,s=0,r=18,n=1;i.config.yaxis.length>1&&(this.multipleYs=!0),i.config.yaxis.map(function(o,h){var c=i.globals.ignoreYAxisIndexes.indexOf(h)>-1||!o.show||o.floating||e[h].width===0,d=e[h].width+t[h].width;o.opposite?i.globals.isBarHorizontal?(s=i.globals.gridWidth+i.globals.translateX-1,i.globals.translateYAxisX[h]=s-o.labels.offsetX):(s=i.globals.gridWidth+i.globals.translateX+n,c||(n=n+d+20),i.globals.translateYAxisX[h]=s-o.labels.offsetX+20):(a=i.globals.translateX-r,c||(r=r+d+20),i.globals.translateYAxisX[h]=a+o.labels.offsetX)})}},{key:"setYAxisTextAlignments",value:function(){var e=this.w,t=e.globals.dom.baseEl.getElementsByClassName("apexcharts-yaxis");(t=P.listToArray(t)).forEach(function(i,a){var s=e.config.yaxis[a];if(s&&!s.floating&&s.labels.align!==void 0){var r=e.globals.dom.baseEl.querySelector(".apexcharts-yaxis[rel='".concat(a,"'] .apexcharts-yaxis-texts-g")),n=e.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxis[rel='".concat(a,"'] .apexcharts-yaxis-label"));n=P.listToArray(n);var o=r.getBoundingClientRect();s.labels.align==="left"?(n.forEach(function(h,c){h.setAttribute("text-anchor","start")}),s.opposite||r.setAttribute("transform","translate(-".concat(o.width,", 0)"))):s.labels.align==="center"?(n.forEach(function(h,c){h.setAttribute("text-anchor","middle")}),r.setAttribute("transform","translate(".concat(o.width/2*(s.opposite?1:-1),", 0)"))):s.labels.align==="right"&&(n.forEach(function(h,c){h.setAttribute("text-anchor","end")}),s.opposite&&r.setAttribute("transform","translate(".concat(o.width,", 0)")))}})}}]),p}(),Oi=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w,this.documentEvent=P.bind(this.documentEvent,this)}return R(p,[{key:"addEventListener",value:function(e,t){var i=this.w;i.globals.events.hasOwnProperty(e)?i.globals.events[e].push(t):i.globals.events[e]=[t]}},{key:"removeEventListener",value:function(e,t){var i=this.w;if(i.globals.events.hasOwnProperty(e)){var a=i.globals.events[e].indexOf(t);a!==-1&&i.globals.events[e].splice(a,1)}}},{key:"fireEvent",value:function(e,t){var i=this.w;if(i.globals.events.hasOwnProperty(e)){t&&t.length||(t=[]);for(var a=i.globals.events[e],s=a.length,r=0;r0&&(t=this.w.config.chart.locales.concat(window.Apex.chart.locales));var i=t.filter(function(s){return s.name===e})[0];if(!i)throw new Error("Wrong locale name provided. Please make sure you set the correct locale name in options");var a=P.extend(Xt,i);this.w.globals.locale=a.options}}]),p}(),Hi=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"drawAxis",value:function(e,t){var i,a,s=this,r=this.w.globals,n=this.w.config,o=new Me(this.ctx,t),h=new lt(this.ctx,t);r.axisCharts&&e!=="radar"&&(r.isBarHorizontal?(a=h.drawYaxisInversed(0),i=o.drawXaxisInversed(0),r.dom.elGraphical.add(i),r.dom.elGraphical.add(a)):(i=o.drawXaxis(),r.dom.elGraphical.add(i),n.yaxis.map(function(c,d){if(r.ignoreYAxisIndexes.indexOf(d)===-1&&(a=h.drawYaxis(d),r.dom.Paper.add(a),s.w.config.grid.position==="back")){var g=r.dom.Paper.children()[1];g.remove(),r.dom.Paper.add(g)}})))}}]),p}(),nt=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"drawXCrosshairs",value:function(){var e=this.w,t=new X(this.ctx),i=new ie(this.ctx),a=e.config.xaxis.crosshairs.fill.gradient,s=e.config.xaxis.crosshairs.dropShadow,r=e.config.xaxis.crosshairs.fill.type,n=a.colorFrom,o=a.colorTo,h=a.opacityFrom,c=a.opacityTo,d=a.stops,g=s.enabled,f=s.left,x=s.top,b=s.blur,v=s.color,y=s.opacity,w=e.config.xaxis.crosshairs.fill.color;if(e.config.xaxis.crosshairs.show){r==="gradient"&&(w=t.drawGradient("vertical",n,o,h,c,null,d,null));var l=t.drawRect();e.config.xaxis.crosshairs.width===1&&(l=t.drawLine());var u=e.globals.gridHeight;(!P.isNumber(u)||u<0)&&(u=0);var m=e.config.xaxis.crosshairs.width;(!P.isNumber(m)||m<0)&&(m=0),l.attr({class:"apexcharts-xcrosshairs",x:0,y:0,y2:u,width:m,height:u,fill:w,filter:"none","fill-opacity":e.config.xaxis.crosshairs.opacity,stroke:e.config.xaxis.crosshairs.stroke.color,"stroke-width":e.config.xaxis.crosshairs.stroke.width,"stroke-dasharray":e.config.xaxis.crosshairs.stroke.dashArray}),g&&(l=i.dropShadow(l,{left:f,top:x,blur:b,color:v,opacity:y})),e.globals.dom.elGraphical.add(l)}}},{key:"drawYCrosshairs",value:function(){var e=this.w,t=new X(this.ctx),i=e.config.yaxis[0].crosshairs,a=e.globals.barPadForNumericAxis;if(e.config.yaxis[0].crosshairs.show){var s=t.drawLine(-a,0,e.globals.gridWidth+a,0,i.stroke.color,i.stroke.dashArray,i.stroke.width);s.attr({class:"apexcharts-ycrosshairs"}),e.globals.dom.elGraphical.add(s)}var r=t.drawLine(-a,0,e.globals.gridWidth+a,0,i.stroke.color,0,0);r.attr({class:"apexcharts-ycrosshairs-hidden"}),e.globals.dom.elGraphical.add(r)}}]),p}(),Ni=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"checkResponsiveConfig",value:function(e){var t=this,i=this.w,a=i.config;if(a.responsive.length!==0){var s=a.responsive.slice();s.sort(function(h,c){return h.breakpoint>c.breakpoint?1:c.breakpoint>h.breakpoint?-1:0}).reverse();var r=new Pe({}),n=function(){var h=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},c=s[0].breakpoint,d=window.innerWidth>0?window.innerWidth:screen.width;if(d>c){var g=P.clone(i.globals.initialConfig);g.series=P.clone(i.config.series);var f=$.extendArrayProps(r,g,i);h=P.extend(f,h),h=P.extend(i.config,h),t.overrideResponsiveOptions(h)}else for(var x=0;x0&&typeof i.config.colors[0]=="function"&&(i.globals.colors=i.config.series.map(function(x,b){var v=i.config.colors[b];return v||(v=i.config.colors[0]),typeof v=="function"?(t.isColorFn=!0,v({value:i.globals.axisCharts?i.globals.series[b][0]?i.globals.series[b][0]:0:i.globals.series[b],seriesIndex:b,dataPointIndex:b,w:i})):v}))),i.globals.seriesColors.map(function(x,b){x&&(i.globals.colors[b]=x)}),i.config.theme.monochrome.enabled){var s=[],r=i.globals.series.length;(this.isBarDistributed||this.isHeatmapDistributed)&&(r=i.globals.series[0].length*i.globals.series.length);for(var n=i.config.theme.monochrome.color,o=1/(r/i.config.theme.monochrome.shadeIntensity),h=i.config.theme.monochrome.shadeTo,c=0,d=0;d2&&arguments[2]!==void 0?arguments[2]:null,a=this.w,s=t||a.globals.series.length;if(i===null&&(i=this.isBarDistributed||this.isHeatmapDistributed||a.config.chart.type==="heatmap"&&a.config.plotOptions.heatmap.colorScale.inverse),i&&a.globals.series.length&&(s=a.globals.series[a.globals.maxValsInArrayIndex].length*a.globals.series.length),e.lengthe.globals.svgWidth&&(this.dCtx.lgRect.width=e.globals.svgWidth/1.5),this.dCtx.lgRect}},{key:"getDatalabelsRect",value:function(){var e=this,t=this.w,i=[];t.config.series.forEach(function(o,h){o.data.forEach(function(c,d){var g;g=t.globals.series[h][d],a=t.config.dataLabels.formatter(g,{ctx:e.dCtx.ctx,seriesIndex:h,dataPointIndex:d,w:t}),i.push(a)})});var a=P.getLargestStringFromArr(i),s=new X(this.dCtx.ctx),r=t.config.dataLabels.style,n=s.getTextRects(a,parseInt(r.fontSize),r.fontFamily);return{width:1.05*n.width,height:n.height}}},{key:"getLargestStringFromMultiArr",value:function(e,t){var i=e;if(this.w.globals.isMultiLineX){var a=t.map(function(r,n){return Array.isArray(r)?r.length:1}),s=Math.max.apply(Math,te(a));i=t[a.indexOf(s)]}return i}}]),p}(),Vi=function(){function p(e){F(this,p),this.w=e.w,this.dCtx=e}return R(p,[{key:"getxAxisLabelsCoords",value:function(){var e,t=this.w,i=t.globals.labels.slice();if(t.config.xaxis.convertedCatToNumeric&&i.length===0&&(i=t.globals.categoryLabels),t.globals.timescaleLabels.length>0){var a=this.getxAxisTimeScaleLabelsCoords();e={width:a.width,height:a.height},t.globals.rotateXLabels=!1}else{this.dCtx.lgWidthForSideLegends=t.config.legend.position!=="left"&&t.config.legend.position!=="right"||t.config.legend.floating?0:this.dCtx.lgRect.width;var s=t.globals.xLabelFormatter,r=P.getLargestStringFromArr(i),n=this.dCtx.dimHelpers.getLargestStringFromMultiArr(r,i);t.globals.isBarHorizontal&&(n=r=t.globals.yAxisScale[0].result.reduce(function(x,b){return x.length>b.length?x:b},0));var o=new ze(this.dCtx.ctx),h=r;r=o.xLabelFormat(s,r,h,{i:void 0,dateFormatter:new K(this.dCtx.ctx).formatDate,w:t}),n=o.xLabelFormat(s,n,h,{i:void 0,dateFormatter:new K(this.dCtx.ctx).formatDate,w:t}),(t.config.xaxis.convertedCatToNumeric&&r===void 0||String(r).trim()==="")&&(n=r="1");var c=new X(this.dCtx.ctx),d=c.getTextRects(r,t.config.xaxis.labels.style.fontSize),g=d;if(r!==n&&(g=c.getTextRects(n,t.config.xaxis.labels.style.fontSize)),(e={width:d.width>=g.width?d.width:g.width,height:d.height>=g.height?d.height:g.height}).width*i.length>t.globals.svgWidth-this.dCtx.lgWidthForSideLegends-this.dCtx.yAxisWidth-this.dCtx.gridPad.left-this.dCtx.gridPad.right&&t.config.xaxis.labels.rotate!==0||t.config.xaxis.labels.rotateAlways){if(!t.globals.isBarHorizontal){t.globals.rotateXLabels=!0;var f=function(x){return c.getTextRects(x,t.config.xaxis.labels.style.fontSize,t.config.xaxis.labels.style.fontFamily,"rotate(".concat(t.config.xaxis.labels.rotate," 0 0)"),!1)};d=f(r),r!==n&&(g=f(n)),e.height=(d.height>g.height?d.height:g.height)/1.5,e.width=d.width>g.width?d.width:g.width}}else t.globals.rotateXLabels=!1}return t.config.xaxis.labels.show||(e={width:0,height:0}),{width:e.width,height:e.height}}},{key:"getxAxisGroupLabelsCoords",value:function(){var e,t=this.w;if(!t.globals.hasXaxisGroups)return{width:0,height:0};var i,a=((e=t.config.xaxis.group.style)===null||e===void 0?void 0:e.fontSize)||t.config.xaxis.labels.style.fontSize,s=t.globals.groups.map(function(d){return d.title}),r=P.getLargestStringFromArr(s),n=this.dCtx.dimHelpers.getLargestStringFromMultiArr(r,s),o=new X(this.dCtx.ctx),h=o.getTextRects(r,a),c=h;return r!==n&&(c=o.getTextRects(n,a)),i={width:h.width>=c.width?h.width:c.width,height:h.height>=c.height?h.height:c.height},t.config.xaxis.labels.show||(i={width:0,height:0}),{width:i.width,height:i.height}}},{key:"getxAxisTitleCoords",value:function(){var e=this.w,t=0,i=0;if(e.config.xaxis.title.text!==void 0){var a=new X(this.dCtx.ctx).getTextRects(e.config.xaxis.title.text,e.config.xaxis.title.style.fontSize);t=a.width,i=a.height}return{width:t,height:i}}},{key:"getxAxisTimeScaleLabelsCoords",value:function(){var e,t=this.w;this.dCtx.timescaleLabels=t.globals.timescaleLabels.slice();var i=this.dCtx.timescaleLabels.map(function(s){return s.value}),a=i.reduce(function(s,r){return s===void 0?(console.error("You have possibly supplied invalid Date format. Please supply a valid JavaScript Date"),0):s.length>r.length?s:r},0);return 1.05*(e=new X(this.dCtx.ctx).getTextRects(a,t.config.xaxis.labels.style.fontSize)).width*i.length>t.globals.gridWidth&&t.config.xaxis.labels.rotate!==0&&(t.globals.overlappingXLabels=!0),e}},{key:"additionalPaddingXLabels",value:function(e){var t=this,i=this.w,a=i.globals,s=i.config,r=s.xaxis.type,n=e.width;a.skipLastTimelinelabel=!1,a.skipFirstTimelinelabel=!1;var o=i.config.yaxis[0].opposite&&i.globals.isBarHorizontal,h=function(c,d){s.yaxis.length>1&&function(g){return a.collapsedSeriesIndices.indexOf(g)!==-1}(d)||function(g){if(t.dCtx.timescaleLabels&&t.dCtx.timescaleLabels.length){var f=t.dCtx.timescaleLabels[0],x=t.dCtx.timescaleLabels[t.dCtx.timescaleLabels.length-1].position+n/1.75-t.dCtx.yAxisWidthRight,b=f.position-n/1.75+t.dCtx.yAxisWidthLeft,v=i.config.legend.position==="right"&&t.dCtx.lgRect.width>0?t.dCtx.lgRect.width:0;x>a.svgWidth-a.translateX-v&&(a.skipLastTimelinelabel=!0),b<-(g.show&&!g.floating||s.chart.type!=="bar"&&s.chart.type!=="candlestick"&&s.chart.type!=="rangeBar"&&s.chart.type!=="boxPlot"?10:n/1.75)&&(a.skipFirstTimelinelabel=!0)}else r==="datetime"?t.dCtx.gridPad.right((k=String(d(m,o)))===null||k===void 0?void 0:k.length)?u:m},g),x=f=d(f,o);if(f!==void 0&&f.length!==0||(f=h.niceMax),t.globals.isBarHorizontal){a=0;var b=t.globals.labels.slice();f=P.getLargestStringFromArr(b),f=d(f,{seriesIndex:n,dataPointIndex:-1,w:t}),x=e.dCtx.dimHelpers.getLargestStringFromMultiArr(f,b)}var v=new X(e.dCtx.ctx),y="rotate(".concat(r.labels.rotate," 0 0)"),w=v.getTextRects(f,r.labels.style.fontSize,r.labels.style.fontFamily,y,!1),l=w;f!==x&&(l=v.getTextRects(x,r.labels.style.fontSize,r.labels.style.fontFamily,y,!1)),i.push({width:(c>l.width||c>w.width?c:l.width>w.width?l.width:w.width)+a,height:l.height>w.height?l.height:w.height})}else i.push({width:0,height:0})}),i}},{key:"getyAxisTitleCoords",value:function(){var e=this,t=this.w,i=[];return t.config.yaxis.map(function(a,s){if(a.show&&a.title.text!==void 0){var r=new X(e.dCtx.ctx),n="rotate(".concat(a.title.rotate," 0 0)"),o=r.getTextRects(a.title.text,a.title.style.fontSize,a.title.style.fontFamily,n,!1);i.push({width:o.width,height:o.height})}else i.push({width:0,height:0})}),i}},{key:"getTotalYAxisWidth",value:function(){var e=this.w,t=0,i=0,a=0,s=e.globals.yAxisScale.length>1?10:0,r=new ge(this.dCtx.ctx),n=function(o,h){var c=e.config.yaxis[h].floating,d=0;o.width>0&&!c?(d=o.width+s,function(g){return e.globals.ignoreYAxisIndexes.indexOf(g)>-1}(h)&&(d=d-o.width-s)):d=c||r.isYAxisHidden(h)?0:5,e.config.yaxis[h].opposite?a+=d:i+=d,t+=d};return e.globals.yLabelsCoords.map(function(o,h){n(o,h)}),e.globals.yTitleCoords.map(function(o,h){n(o,h)}),e.globals.isBarHorizontal&&!e.config.yaxis[0].floating&&(t=e.globals.yLabelsCoords[0].width+e.globals.yTitleCoords[0].width+15),this.dCtx.yAxisWidthLeft=i,this.dCtx.yAxisWidthRight=a,t}}]),p}(),ji=function(){function p(e){F(this,p),this.w=e.w,this.dCtx=e}return R(p,[{key:"gridPadForColumnsInNumericAxis",value:function(e){var t=this.w,i=t.config,a=t.globals;if(a.noData||a.collapsedSeries.length+a.ancillaryCollapsedSeries.length===i.series.length)return 0;var s=function(f){return f==="bar"||f==="rangeBar"||f==="candlestick"||f==="boxPlot"},r=i.chart.type,n=0,o=s(r)?i.series.length:1;a.comboBarCount>0&&(o=a.comboBarCount),a.collapsedSeries.forEach(function(f){s(f.type)&&(o-=1)}),i.chart.stacked&&(o=1);var h=s(r)||a.comboBarCount>0,c=Math.abs(a.initialMaxX-a.initialMinX);if(h&&a.isXNumeric&&!a.isBarHorizontal&&o>0&&c!==0){var d,g;c<=3&&(c=a.dataPoints),d=c/e,a.minXDiff&&a.minXDiff/d>0&&(g=a.minXDiff/d),g>e/2&&(g/=2),(n=g*parseInt(i.plotOptions.bar.columnWidth,10)/100)<1&&(n=1),a.barPadForNumericAxis=n}return n}},{key:"gridPadFortitleSubtitle",value:function(){var e=this,t=this.w,i=t.globals,a=this.dCtx.isSparkline||!t.globals.axisCharts?0:10;["title","subtitle"].forEach(function(n){t.config[n].text!==void 0?a+=t.config[n].margin:a+=e.dCtx.isSparkline||!t.globals.axisCharts?0:5}),!t.config.legend.show||t.config.legend.position!=="bottom"||t.config.legend.floating||t.globals.axisCharts||(a+=10);var s=this.dCtx.dimHelpers.getTitleSubtitleCoords("title"),r=this.dCtx.dimHelpers.getTitleSubtitleCoords("subtitle");i.gridHeight=i.gridHeight-s.height-r.height-a,i.translateY=i.translateY+s.height+r.height+a}},{key:"setGridXPosForDualYAxis",value:function(e,t){var i=this.w,a=new ge(this.dCtx.ctx);i.config.yaxis.map(function(s,r){i.globals.ignoreYAxisIndexes.indexOf(r)!==-1||s.floating||a.isYAxisHidden(r)||(s.opposite&&(i.globals.translateX=i.globals.translateX-(t[r].width+e[r].width)-parseInt(i.config.yaxis[r].labels.style.fontSize,10)/1.2-12),i.globals.translateX<2&&(i.globals.translateX=2))})}}]),p}(),Ne=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w,this.lgRect={},this.yAxisWidth=0,this.yAxisWidthLeft=0,this.yAxisWidthRight=0,this.xAxisHeight=0,this.isSparkline=this.w.config.chart.sparkline.enabled,this.dimHelpers=new Gi(this),this.dimYAxis=new _i(this),this.dimXAxis=new Vi(this),this.dimGrid=new ji(this),this.lgWidthForSideLegends=0,this.gridPad=this.w.config.grid.padding,this.xPadRight=0,this.xPadLeft=0}return R(p,[{key:"plotCoords",value:function(){var e=this,t=this.w,i=t.globals;this.lgRect=this.dimHelpers.getLegendsRect(),this.datalabelsCoords={width:0,height:0};var a=Array.isArray(t.config.stroke.width)?Math.max.apply(Math,te(t.config.stroke.width)):t.config.stroke.width;this.isSparkline&&((t.config.markers.discrete.length>0||t.config.markers.size>0)&&Object.entries(this.gridPad).forEach(function(r){var n=It(r,2),o=n[0],h=n[1];e.gridPad[o]=Math.max(h,e.w.globals.markers.largestSize/1.5)}),this.gridPad.top=Math.max(a/2,this.gridPad.top),this.gridPad.bottom=Math.max(a/2,this.gridPad.bottom)),i.axisCharts?this.setDimensionsForAxisCharts():this.setDimensionsForNonAxisCharts(),this.dimGrid.gridPadFortitleSubtitle(),i.gridHeight=i.gridHeight-this.gridPad.top-this.gridPad.bottom,i.gridWidth=i.gridWidth-this.gridPad.left-this.gridPad.right-this.xPadRight-this.xPadLeft;var s=this.dimGrid.gridPadForColumnsInNumericAxis(i.gridWidth);i.gridWidth=i.gridWidth-2*s,i.translateX=i.translateX+this.gridPad.left+this.xPadLeft+(s>0?s:0),i.translateY=i.translateY+this.gridPad.top}},{key:"setDimensionsForAxisCharts",value:function(){var e=this,t=this.w,i=t.globals,a=this.dimYAxis.getyAxisLabelsCoords(),s=this.dimYAxis.getyAxisTitleCoords();i.isSlopeChart&&(this.datalabelsCoords=this.dimHelpers.getDatalabelsRect()),t.globals.yLabelsCoords=[],t.globals.yTitleCoords=[],t.config.yaxis.map(function(f,x){t.globals.yLabelsCoords.push({width:a[x].width,index:x}),t.globals.yTitleCoords.push({width:s[x].width,index:x})}),this.yAxisWidth=this.dimYAxis.getTotalYAxisWidth();var r=this.dimXAxis.getxAxisLabelsCoords(),n=this.dimXAxis.getxAxisGroupLabelsCoords(),o=this.dimXAxis.getxAxisTitleCoords();this.conditionalChecksForAxisCoords(r,o,n),i.translateXAxisY=t.globals.rotateXLabels?this.xAxisHeight/8:-4,i.translateXAxisX=t.globals.rotateXLabels&&t.globals.isXNumeric&&t.config.xaxis.labels.rotate<=-45?-this.xAxisWidth/4:0,t.globals.isBarHorizontal&&(i.rotateXLabels=!1,i.translateXAxisY=parseInt(t.config.xaxis.labels.style.fontSize,10)/1.5*-1),i.translateXAxisY=i.translateXAxisY+t.config.xaxis.labels.offsetY,i.translateXAxisX=i.translateXAxisX+t.config.xaxis.labels.offsetX;var h=this.yAxisWidth,c=this.xAxisHeight;i.xAxisLabelsHeight=this.xAxisHeight-o.height,i.xAxisGroupLabelsHeight=i.xAxisLabelsHeight-r.height,i.xAxisLabelsWidth=this.xAxisWidth,i.xAxisHeight=this.xAxisHeight;var d=10;(t.config.chart.type==="radar"||this.isSparkline)&&(h=0,c=i.goldenPadding),this.isSparkline&&(this.lgRect={height:0,width:0}),(this.isSparkline||t.config.chart.type==="treemap")&&(h=0,c=0,d=0),this.isSparkline||t.config.chart.type==="treemap"||this.dimXAxis.additionalPaddingXLabels(r);var g=function(){i.translateX=h+e.datalabelsCoords.width,i.gridHeight=i.svgHeight-e.lgRect.height-c-(e.isSparkline||t.config.chart.type==="treemap"?0:t.globals.rotateXLabels?10:15),i.gridWidth=i.svgWidth-h-2*e.datalabelsCoords.width};switch(t.config.xaxis.position==="top"&&(d=i.xAxisHeight-t.config.xaxis.axisTicks.height-5),t.config.legend.position){case"bottom":i.translateY=d,g();break;case"top":i.translateY=this.lgRect.height+d,g();break;case"left":i.translateY=d,i.translateX=this.lgRect.width+h+this.datalabelsCoords.width,i.gridHeight=i.svgHeight-c-12,i.gridWidth=i.svgWidth-this.lgRect.width-h-2*this.datalabelsCoords.width;break;case"right":i.translateY=d,i.translateX=h+this.datalabelsCoords.width,i.gridHeight=i.svgHeight-c-12,i.gridWidth=i.svgWidth-this.lgRect.width-h-2*this.datalabelsCoords.width-5;break;default:throw new Error("Legend position not supported")}this.dimGrid.setGridXPosForDualYAxis(s,a),new lt(this.ctx).setYAxisXPosition(a,s)}},{key:"setDimensionsForNonAxisCharts",value:function(){var e=this.w,t=e.globals,i=e.config,a=0;e.config.legend.show&&!e.config.legend.floating&&(a=20);var s=i.chart.type==="pie"||i.chart.type==="polarArea"||i.chart.type==="donut"?"pie":"radialBar",r=i.plotOptions[s].offsetY,n=i.plotOptions[s].offsetX;if(!i.legend.show||i.legend.floating){t.gridHeight=t.svgHeight-i.grid.padding.top-i.grid.padding.bottom;var o=t.dom.elWrap.getBoundingClientRect().width;return t.gridWidth=Math.min(o,t.gridHeight)-i.grid.padding.left-i.grid.padding.right,t.translateY=r,void(t.translateX=n+(t.svgWidth-t.gridWidth)/2)}switch(i.legend.position){case"bottom":t.gridHeight=t.svgHeight-this.lgRect.height-t.goldenPadding,t.gridWidth=t.svgWidth,t.translateY=r-10,t.translateX=n+(t.svgWidth-t.gridWidth)/2;break;case"top":t.gridHeight=t.svgHeight-this.lgRect.height-t.goldenPadding,t.gridWidth=t.svgWidth,t.translateY=this.lgRect.height+r+10,t.translateX=n+(t.svgWidth-t.gridWidth)/2;break;case"left":t.gridWidth=t.svgWidth-this.lgRect.width-a,t.gridHeight=i.chart.height!=="auto"?t.svgHeight:t.gridWidth,t.translateY=r,t.translateX=n+this.lgRect.width+a;break;case"right":t.gridWidth=t.svgWidth-this.lgRect.width-a-5,t.gridHeight=i.chart.height!=="auto"?t.svgHeight:t.gridWidth,t.translateY=r,t.translateX=n+10;break;default:throw new Error("Legend position not supported")}}},{key:"conditionalChecksForAxisCoords",value:function(e,t,i){var a=this.w,s=a.globals.hasXaxisGroups?2:1,r=i.height+e.height+t.height,n=a.globals.isMultiLineX?1.2:a.globals.LINE_HEIGHT_RATIO,o=a.globals.rotateXLabels?22:10,h=a.globals.rotateXLabels&&a.config.legend.position==="bottom"?10:0;this.xAxisHeight=r*n+s*o+h,this.xAxisWidth=e.width,this.xAxisHeight-t.height>a.config.xaxis.labels.maxHeight&&(this.xAxisHeight=a.config.xaxis.labels.maxHeight),a.config.xaxis.labels.minHeight&&this.xAxisHeightd&&(this.yAxisWidth=d)}}]),p}(),Ui=function(){function p(e){F(this,p),this.w=e.w,this.lgCtx=e}return R(p,[{key:"getLegendStyles",value:function(){var e,t,i,a=document.createElement("style");a.setAttribute("type","text/css");var s=((e=this.lgCtx.ctx)===null||e===void 0||(t=e.opts)===null||t===void 0||(i=t.chart)===null||i===void 0?void 0:i.nonce)||this.w.config.chart.nonce;s&&a.setAttribute("nonce",s);var r=document.createTextNode(` + `).concat(s, ` +
`); return '
' + (t || "") + '
' + i + ": " + (p.w.globals.comboCharts ? p.w.config.series[r].type === "rangeArea" || p.w.config.series[r].type === "rangeBar" ? c : "".concat(h, "") : c) + "
" + }, Le = function () { + function p(e) { F(this, p), this.opts = e } return R(p, [{ key: "hideYAxis", value: function () { this.opts.yaxis[0].show = !1, this.opts.yaxis[0].title.text = "", this.opts.yaxis[0].axisBorder.show = !1, this.opts.yaxis[0].axisTicks.show = !1, this.opts.yaxis[0].floating = !0 } }, { key: "line", value: function () { return { chart: { animations: { easing: "swing" } }, dataLabels: { enabled: !1 }, stroke: { width: 5, curve: "straight" }, markers: { size: 0, hover: { sizeOffset: 6 } }, xaxis: { crosshairs: { width: 1 } } } } }, { key: "sparkline", value: function (e) { return this.hideYAxis(), P.extend(e, { grid: { show: !1, padding: { left: 0, right: 0, top: 0, bottom: 0 } }, legend: { show: !1 }, xaxis: { labels: { show: !1 }, tooltip: { enabled: !1 }, axisBorder: { show: !1 }, axisTicks: { show: !1 } }, chart: { toolbar: { show: !1 }, zoom: { enabled: !1 } }, dataLabels: { enabled: !1 } }) } }, { key: "slope", value: function () { return this.hideYAxis(), { chart: { toolbar: { show: !1 }, zoom: { enabled: !1 } }, dataLabels: { enabled: !0, formatter: function (e, t) { var i = t.w.config.series[t.seriesIndex].name; return e !== null ? i + ": " + e : "" }, background: { enabled: !1 }, offsetX: -5 }, grid: { xaxis: { lines: { show: !0 } }, yaxis: { lines: { show: !1 } } }, xaxis: { position: "top", labels: { style: { fontSize: 14, fontWeight: 900 } }, tooltip: { enabled: !1 }, crosshairs: { show: !1 } }, markers: { size: 8, hover: { sizeOffset: 1 } }, legend: { show: !1 }, tooltip: { shared: !1, intersect: !0, followCursor: !0 }, stroke: { width: 5, curve: "straight" } } } }, { key: "bar", value: function () { return { chart: { stacked: !1, animations: { easing: "swing" } }, plotOptions: { bar: { dataLabels: { position: "center" } } }, dataLabels: { style: { colors: ["#fff"] }, background: { enabled: !1 } }, stroke: { width: 0, lineCap: "round" }, fill: { opacity: .85 }, legend: { markers: { shape: "square" } }, tooltip: { shared: !1, intersect: !0 }, xaxis: { tooltip: { enabled: !1 }, tickPlacement: "between", crosshairs: { width: "barWidth", position: "back", fill: { type: "gradient" }, dropShadow: { enabled: !1 }, stroke: { width: 0 } } } } } }, { key: "funnel", value: function () { return this.hideYAxis(), Y(Y({}, this.bar()), {}, { chart: { animations: { easing: "linear", speed: 800, animateGradually: { enabled: !1 } } }, plotOptions: { bar: { horizontal: !0, borderRadiusApplication: "around", borderRadius: 0, dataLabels: { position: "center" } } }, grid: { show: !1, padding: { left: 0, right: 0 } }, xaxis: { labels: { show: !1 }, tooltip: { enabled: !1 }, axisBorder: { show: !1 }, axisTicks: { show: !1 } } }) } }, { key: "candlestick", value: function () { var e = this; return { stroke: { width: 1, colors: ["#333"] }, fill: { opacity: 1 }, dataLabels: { enabled: !1 }, tooltip: { shared: !0, custom: function (t) { var i = t.seriesIndex, a = t.dataPointIndex, s = t.w; return e._getBoxTooltip(s, i, a, ["Open", "High", "", "Low", "Close"], "candlestick") } }, states: { active: { filter: { type: "none" } } }, xaxis: { crosshairs: { width: 1 } } } } }, { key: "boxPlot", value: function () { var e = this; return { chart: { animations: { dynamicAnimation: { enabled: !1 } } }, stroke: { width: 1, colors: ["#24292e"] }, dataLabels: { enabled: !1 }, tooltip: { shared: !0, custom: function (t) { var i = t.seriesIndex, a = t.dataPointIndex, s = t.w; return e._getBoxTooltip(s, i, a, ["Minimum", "Q1", "Median", "Q3", "Maximum"], "boxPlot") } }, markers: { size: 7, strokeWidth: 1, strokeColors: "#111" }, xaxis: { crosshairs: { width: 1 } } } } }, { key: "rangeBar", value: function () { return { chart: { animations: { animateGradually: !1 } }, stroke: { width: 0, lineCap: "square" }, plotOptions: { bar: { borderRadius: 0, dataLabels: { position: "center" } } }, dataLabels: { enabled: !1, formatter: function (e, t) { t.ctx; var i = t.seriesIndex, a = t.dataPointIndex, s = t.w, r = function () { var n = s.globals.seriesRangeStart[i][a]; return s.globals.seriesRangeEnd[i][a] - n }; return s.globals.comboCharts ? s.config.series[i].type === "rangeBar" || s.config.series[i].type === "rangeArea" ? r() : e : r() }, background: { enabled: !1 }, style: { colors: ["#fff"] } }, markers: { size: 10 }, tooltip: { shared: !1, followCursor: !0, custom: function (e) { return e.w.config.plotOptions && e.w.config.plotOptions.bar && e.w.config.plotOptions.bar.horizontal ? function (t) { var i = Je(Y(Y({}, t), {}, { isTimeline: !0 })), a = i.color, s = i.seriesName, r = i.ylabel, n = i.startVal, o = i.endVal; return Ke(Y(Y({}, t), {}, { color: a, seriesName: s, ylabel: r, start: n, end: o })) }(e) : function (t) { var i = Je(t), a = i.color, s = i.seriesName, r = i.ylabel, n = i.start, o = i.end; return Ke(Y(Y({}, t), {}, { color: a, seriesName: s, ylabel: r, start: n, end: o })) }(e) } }, xaxis: { tickPlacement: "between", tooltip: { enabled: !1 }, crosshairs: { stroke: { width: 0 } } } } } }, { key: "dumbbell", value: function (e) { var t, i; return (t = e.plotOptions.bar) !== null && t !== void 0 && t.barHeight || (e.plotOptions.bar.barHeight = 2), (i = e.plotOptions.bar) !== null && i !== void 0 && i.columnWidth || (e.plotOptions.bar.columnWidth = 2), e } }, { key: "area", value: function () { return { stroke: { width: 4, fill: { type: "solid", gradient: { inverseColors: !1, shade: "light", type: "vertical", opacityFrom: .65, opacityTo: .5, stops: [0, 100, 100] } } }, fill: { type: "gradient", gradient: { inverseColors: !1, shade: "light", type: "vertical", opacityFrom: .65, opacityTo: .5, stops: [0, 100, 100] } }, markers: { size: 0, hover: { sizeOffset: 6 } }, tooltip: { followCursor: !1 } } } }, { key: "rangeArea", value: function () { return { stroke: { curve: "straight", width: 0 }, fill: { type: "solid", opacity: .6 }, markers: { size: 0 }, states: { hover: { filter: { type: "none" } }, active: { filter: { type: "none" } } }, tooltip: { intersect: !1, shared: !0, followCursor: !0, custom: function (e) { return function (t) { var i = Je(t), a = i.color, s = i.seriesName, r = i.ylabel, n = i.start, o = i.end; return Ke(Y(Y({}, t), {}, { color: a, seriesName: s, ylabel: r, start: n, end: o })) }(e) } } } } }, { key: "brush", value: function (e) { return P.extend(e, { chart: { toolbar: { autoSelected: "selection", show: !1 }, zoom: { enabled: !1 } }, dataLabels: { enabled: !1 }, stroke: { width: 1 }, tooltip: { enabled: !1 }, xaxis: { tooltip: { enabled: !1 } } }) } }, { key: "stacked100", value: function (e) { e.dataLabels = e.dataLabels || {}, e.dataLabels.formatter = e.dataLabels.formatter || void 0; var t = e.dataLabels.formatter; return e.yaxis.forEach(function (i, a) { e.yaxis[a].min = 0, e.yaxis[a].max = 100 }), e.chart.type === "bar" && (e.dataLabels.formatter = t || function (i) { return typeof i == "number" && i ? i.toFixed(0) + "%" : i }), e } }, { key: "stackedBars", value: function () { var e = this.bar(); return Y(Y({}, e), {}, { plotOptions: Y(Y({}, e.plotOptions), {}, { bar: Y(Y({}, e.plotOptions.bar), {}, { borderRadiusApplication: "end", borderRadiusWhenStacked: "last" }) }) }) } }, { key: "convertCatToNumeric", value: function (e) { return e.xaxis.convertedCatToNumeric = !0, e } }, { key: "convertCatToNumericXaxis", value: function (e, t, i) { e.xaxis.type = "numeric", e.xaxis.labels = e.xaxis.labels || {}, e.xaxis.labels.formatter = e.xaxis.labels.formatter || function (r) { return P.isNumber(r) ? Math.floor(r) : r }; var a = e.xaxis.labels.formatter, s = e.xaxis.categories && e.xaxis.categories.length ? e.xaxis.categories : e.labels; return i && i.length && (s = i.map(function (r) { return Array.isArray(r) ? r : String(r) })), s && s.length && (e.xaxis.labels.formatter = function (r) { return P.isNumber(r) ? a(s[Math.floor(r) - 1]) : a(r) }), e.xaxis.categories = [], e.labels = [], e.xaxis.tickAmount = e.xaxis.tickAmount || "dataPoints", e } }, { key: "bubble", value: function () { return { dataLabels: { style: { colors: ["#fff"] } }, tooltip: { shared: !1, intersect: !0 }, xaxis: { crosshairs: { width: 0 } }, fill: { type: "solid", gradient: { shade: "light", inverse: !0, shadeIntensity: .55, opacityFrom: .4, opacityTo: .8 } } } } }, { key: "scatter", value: function () { return { dataLabels: { enabled: !1 }, tooltip: { shared: !1, intersect: !0 }, markers: { size: 6, strokeWidth: 1, hover: { sizeOffset: 2 } } } } }, { key: "heatmap", value: function () { return { chart: { stacked: !1 }, fill: { opacity: 1 }, dataLabels: { style: { colors: ["#fff"] } }, stroke: { colors: ["#fff"] }, tooltip: { followCursor: !0, marker: { show: !1 }, x: { show: !1 } }, legend: { position: "top", markers: { shape: "square" } }, grid: { padding: { right: 20 } } } } }, { key: "treemap", value: function () { return { chart: { zoom: { enabled: !1 } }, dataLabels: { style: { fontSize: 14, fontWeight: 600, colors: ["#fff"] } }, stroke: { show: !0, width: 2, colors: ["#fff"] }, legend: { show: !1 }, fill: { opacity: 1, gradient: { stops: [0, 100] } }, tooltip: { followCursor: !0, x: { show: !1 } }, grid: { padding: { left: 0, right: 0 } }, xaxis: { crosshairs: { show: !1 }, tooltip: { enabled: !1 } } } } }, { key: "pie", value: function () { return { chart: { toolbar: { show: !1 } }, plotOptions: { pie: { donut: { labels: { show: !1 } } } }, dataLabels: { formatter: function (e) { return e.toFixed(1) + "%" }, style: { colors: ["#fff"] }, background: { enabled: !1 }, dropShadow: { enabled: !0 } }, stroke: { colors: ["#fff"] }, fill: { opacity: 1, gradient: { shade: "light", stops: [0, 100] } }, tooltip: { theme: "dark", fillSeriesColor: !0 }, legend: { position: "right" } } } }, { key: "donut", value: function () { return { chart: { toolbar: { show: !1 } }, dataLabels: { formatter: function (e) { return e.toFixed(1) + "%" }, style: { colors: ["#fff"] }, background: { enabled: !1 }, dropShadow: { enabled: !0 } }, stroke: { colors: ["#fff"] }, fill: { opacity: 1, gradient: { shade: "light", shadeIntensity: .35, stops: [80, 100], opacityFrom: 1, opacityTo: 1 } }, tooltip: { theme: "dark", fillSeriesColor: !0 }, legend: { position: "right" } } } }, { key: "polarArea", value: function () { return { chart: { toolbar: { show: !1 } }, dataLabels: { formatter: function (e) { return e.toFixed(1) + "%" }, enabled: !1 }, stroke: { show: !0, width: 2 }, fill: { opacity: .7 }, tooltip: { theme: "dark", fillSeriesColor: !0 }, legend: { position: "right" } } } }, { key: "radar", value: function () { return this.opts.yaxis[0].labels.offsetY = this.opts.yaxis[0].labels.offsetY ? this.opts.yaxis[0].labels.offsetY : 6, { dataLabels: { enabled: !1, style: { fontSize: "11px" } }, stroke: { width: 2 }, markers: { size: 5, strokeWidth: 1, strokeOpacity: 1 }, fill: { opacity: .2 }, tooltip: { shared: !1, intersect: !0, followCursor: !0 }, grid: { show: !1 }, xaxis: { labels: { formatter: function (e) { return e }, style: { colors: ["#a8a8a8"], fontSize: "11px" } }, tooltip: { enabled: !1 }, crosshairs: { show: !1 } } } } }, { key: "radialBar", value: function () { return { chart: { animations: { dynamicAnimation: { enabled: !0, speed: 800 } }, toolbar: { show: !1 } }, fill: { gradient: { shade: "dark", shadeIntensity: .4, inverseColors: !1, type: "diagonal2", opacityFrom: 1, opacityTo: 1, stops: [70, 98, 100] } }, legend: { show: !1, position: "right" }, tooltip: { enabled: !1, fillSeriesColor: !0 } } } }, { + key: "_getBoxTooltip", value: function (e, t, i, a, s) { + var r = e.globals.seriesCandleO[t][i], n = e.globals.seriesCandleH[t][i], o = e.globals.seriesCandleM[t][i], h = e.globals.seriesCandleL[t][i], c = e.globals.seriesCandleC[t][i]; return e.config.series[t].type && e.config.series[t].type !== s ? `
+ `.concat(e.config.series[t].name ? e.config.series[t].name : "series-" + (t + 1), ": ").concat(e.globals.series[t][i], ` +
`) : '
') + "
".concat(a[0], ': ') + r + "
" + "
".concat(a[1], ': ') + n + "
" + (o ? "
".concat(a[2], ': ') + o + "
" : "") + "
".concat(a[3], ': ') + h + "
" + "
".concat(a[4], ': ') + c + "
" + } + }]), p + }(), Pe = function () { function p(e) { F(this, p), this.opts = e } return R(p, [{ key: "init", value: function (e) { var t = e.responsiveOverride, i = this.opts, a = new ue, s = new Le(i); this.chartType = i.chart.type, i = this.extendYAxis(i), i = this.extendAnnotations(i); var r = a.init(), n = {}; if (i && J(i) === "object") { var o, h, c, d, g, f, x, b, v, y, w = {}; w = ["line", "area", "bar", "candlestick", "boxPlot", "rangeBar", "rangeArea", "bubble", "scatter", "heatmap", "treemap", "pie", "polarArea", "donut", "radar", "radialBar"].indexOf(i.chart.type) !== -1 ? s[i.chart.type]() : s.line(), (o = i.plotOptions) !== null && o !== void 0 && (h = o.bar) !== null && h !== void 0 && h.isFunnel && (w = s.funnel()), i.chart.stacked && i.chart.type === "bar" && (w = s.stackedBars()), (c = i.chart.brush) !== null && c !== void 0 && c.enabled && (w = s.brush(w)), (d = i.plotOptions) !== null && d !== void 0 && (g = d.line) !== null && g !== void 0 && g.isSlopeChart && (w = s.slope()), i.chart.stacked && i.chart.stackType === "100%" && (i = s.stacked100(i)), (f = i.plotOptions) !== null && f !== void 0 && (x = f.bar) !== null && x !== void 0 && x.isDumbbell && (i = s.dumbbell(i)), this.checkForDarkTheme(window.Apex), this.checkForDarkTheme(i), i.xaxis = i.xaxis || window.Apex.xaxis || {}, t || (i.xaxis.convertedCatToNumeric = !1), ((b = (i = this.checkForCatToNumericXAxis(this.chartType, w, i)).chart.sparkline) !== null && b !== void 0 && b.enabled || (v = window.Apex.chart) !== null && v !== void 0 && (y = v.sparkline) !== null && y !== void 0 && y.enabled) && (w = s.sparkline(w)), n = P.extend(r, w) } var l = P.extend(n, window.Apex); return r = P.extend(l, i), r = this.handleUserInputErrors(r) } }, { key: "checkForCatToNumericXAxis", value: function (e, t, i) { var a, s, r = new Le(i), n = (e === "bar" || e === "boxPlot") && ((a = i.plotOptions) === null || a === void 0 || (s = a.bar) === null || s === void 0 ? void 0 : s.horizontal), o = e === "pie" || e === "polarArea" || e === "donut" || e === "radar" || e === "radialBar" || e === "heatmap", h = i.xaxis.type !== "datetime" && i.xaxis.type !== "numeric", c = i.xaxis.tickPlacement ? i.xaxis.tickPlacement : t.xaxis && t.xaxis.tickPlacement; return n || o || !h || c === "between" || (i = r.convertCatToNumeric(i)), i } }, { key: "extendYAxis", value: function (e, t) { var i = new ue; (e.yaxis === void 0 || !e.yaxis || Array.isArray(e.yaxis) && e.yaxis.length === 0) && (e.yaxis = {}), e.yaxis.constructor !== Array && window.Apex.yaxis && window.Apex.yaxis.constructor !== Array && (e.yaxis = P.extend(e.yaxis, window.Apex.yaxis)), e.yaxis.constructor !== Array ? e.yaxis = [P.extend(i.yAxis, e.yaxis)] : e.yaxis = P.extendArray(e.yaxis, i.yAxis); var a = !1; e.yaxis.forEach(function (r) { r.logarithmic && (a = !0) }); var s = e.series; return t && !s && (s = t.config.series), a && s.length !== e.yaxis.length && s.length && (e.yaxis = s.map(function (r, n) { if (r.name || (s[n].name = "series-".concat(n + 1)), e.yaxis[n]) return e.yaxis[n].seriesName = s[n].name, e.yaxis[n]; var o = P.extend(i.yAxis, e.yaxis[0]); return o.show = !1, o })), a && s.length > 1 && s.length !== e.yaxis.length && console.warn("A multi-series logarithmic chart should have equal number of series and y-axes"), e } }, { key: "extendAnnotations", value: function (e) { return e.annotations === void 0 && (e.annotations = {}, e.annotations.yaxis = [], e.annotations.xaxis = [], e.annotations.points = []), e = this.extendYAxisAnnotations(e), e = this.extendXAxisAnnotations(e), e = this.extendPointAnnotations(e) } }, { key: "extendYAxisAnnotations", value: function (e) { var t = new ue; return e.annotations.yaxis = P.extendArray(e.annotations.yaxis !== void 0 ? e.annotations.yaxis : [], t.yAxisAnnotation), e } }, { key: "extendXAxisAnnotations", value: function (e) { var t = new ue; return e.annotations.xaxis = P.extendArray(e.annotations.xaxis !== void 0 ? e.annotations.xaxis : [], t.xAxisAnnotation), e } }, { key: "extendPointAnnotations", value: function (e) { var t = new ue; return e.annotations.points = P.extendArray(e.annotations.points !== void 0 ? e.annotations.points : [], t.pointAnnotation), e } }, { key: "checkForDarkTheme", value: function (e) { e.theme && e.theme.mode === "dark" && (e.tooltip || (e.tooltip = {}), e.tooltip.theme !== "light" && (e.tooltip.theme = "dark"), e.chart.foreColor || (e.chart.foreColor = "#f6f7f8"), e.theme.palette || (e.theme.palette = "palette4")) } }, { key: "handleUserInputErrors", value: function (e) { var t = e; if (t.tooltip.shared && t.tooltip.intersect) throw new Error("tooltip.shared cannot be enabled when tooltip.intersect is true. Turn off any other option by setting it to false."); if (t.chart.type === "bar" && t.plotOptions.bar.horizontal) { if (t.yaxis.length > 1) throw new Error("Multiple Y Axis for bars are not supported. Switch to column chart by setting plotOptions.bar.horizontal=false"); t.yaxis[0].reversed && (t.yaxis[0].opposite = !0), t.xaxis.tooltip.enabled = !1, t.yaxis[0].tooltip.enabled = !1, t.chart.zoom.enabled = !1 } return t.chart.type !== "bar" && t.chart.type !== "rangeBar" || t.tooltip.shared && t.xaxis.crosshairs.width === "barWidth" && t.series.length > 1 && (t.xaxis.crosshairs.width = "tickWidth"), t.chart.type !== "candlestick" && t.chart.type !== "boxPlot" || t.yaxis[0].reversed && (console.warn("Reversed y-axis in ".concat(t.chart.type, " chart is not supported.")), t.yaxis[0].reversed = !1), t } }]), p }(), Et = function () { function p() { F(this, p) } return R(p, [{ key: "initGlobalVars", value: function (e) { e.series = [], e.seriesCandleO = [], e.seriesCandleH = [], e.seriesCandleM = [], e.seriesCandleL = [], e.seriesCandleC = [], e.seriesRangeStart = [], e.seriesRangeEnd = [], e.seriesRange = [], e.seriesPercent = [], e.seriesGoals = [], e.seriesX = [], e.seriesZ = [], e.seriesNames = [], e.seriesTotals = [], e.seriesLog = [], e.seriesColors = [], e.stackedSeriesTotals = [], e.seriesXvalues = [], e.seriesYvalues = [], e.labels = [], e.hasXaxisGroups = !1, e.groups = [], e.barGroups = [], e.lineGroups = [], e.areaGroups = [], e.hasSeriesGroups = !1, e.seriesGroups = [], e.categoryLabels = [], e.timescaleLabels = [], e.noLabelsProvided = !1, e.resizeTimer = null, e.selectionResizeTimer = null, e.lastWheelExecution = 0, e.delayedElements = [], e.pointsArray = [], e.dataLabelsRects = [], e.isXNumeric = !1, e.skipLastTimelinelabel = !1, e.skipFirstTimelinelabel = !1, e.isDataXYZ = !1, e.isMultiLineX = !1, e.isMultipleYAxis = !1, e.maxY = -Number.MAX_VALUE, e.minY = Number.MIN_VALUE, e.minYArr = [], e.maxYArr = [], e.maxX = -Number.MAX_VALUE, e.minX = Number.MAX_VALUE, e.initialMaxX = -Number.MAX_VALUE, e.initialMinX = Number.MAX_VALUE, e.maxDate = 0, e.minDate = Number.MAX_VALUE, e.minZ = Number.MAX_VALUE, e.maxZ = -Number.MAX_VALUE, e.minXDiff = Number.MAX_VALUE, e.yAxisScale = [], e.xAxisScale = null, e.xAxisTicksPositions = [], e.yLabelsCoords = [], e.yTitleCoords = [], e.barPadForNumericAxis = 0, e.padHorizontal = 0, e.xRange = 0, e.yRange = [], e.zRange = 0, e.dataPoints = 0, e.xTickAmount = 0, e.multiAxisTickAmount = 0 } }, { key: "globalVars", value: function (e) { return { chartID: null, cuid: null, events: { beforeMount: [], mounted: [], updated: [], clicked: [], selection: [], dataPointSelection: [], zoomed: [], scrolled: [] }, colors: [], clientX: null, clientY: null, fill: { colors: [] }, stroke: { colors: [] }, dataLabels: { style: { colors: [] } }, radarPolygons: { fill: { colors: [] } }, markers: { colors: [], size: e.markers.size, largestSize: 0 }, animationEnded: !1, isTouchDevice: "ontouchstart" in window || navigator.msMaxTouchPoints, isDirty: !1, isExecCalled: !1, initialConfig: null, initialSeries: [], lastXAxis: [], lastYAxis: [], columnSeries: null, labels: [], timescaleLabels: [], noLabelsProvided: !1, allSeriesCollapsed: !1, collapsedSeries: [], collapsedSeriesIndices: [], ancillaryCollapsedSeries: [], ancillaryCollapsedSeriesIndices: [], risingSeries: [], dataFormatXNumeric: !1, capturedSeriesIndex: -1, capturedDataPointIndex: -1, selectedDataPoints: [], goldenPadding: 35, invalidLogScale: !1, ignoreYAxisIndexes: [], maxValsInArrayIndex: 0, radialSize: 0, selection: void 0, zoomEnabled: e.chart.toolbar.autoSelected === "zoom" && e.chart.toolbar.tools.zoom && e.chart.zoom.enabled, panEnabled: e.chart.toolbar.autoSelected === "pan" && e.chart.toolbar.tools.pan, selectionEnabled: e.chart.toolbar.autoSelected === "selection" && e.chart.toolbar.tools.selection, yaxis: null, mousedown: !1, lastClientPosition: {}, visibleXRange: void 0, yValueDecimal: 0, total: 0, SVGNS: "http://www.w3.org/2000/svg", svgWidth: 0, svgHeight: 0, noData: !1, locale: {}, dom: {}, memory: { methodsToExec: [] }, shouldAnimate: !0, skipLastTimelinelabel: !1, skipFirstTimelinelabel: !1, delayedElements: [], axisCharts: !0, isDataXYZ: !1, isSlopeChart: e.plotOptions.line.isSlopeChart, resized: !1, resizeTimer: null, comboCharts: !1, dataChanged: !1, previousPaths: [], allSeriesHasEqualX: !0, pointsArray: [], dataLabelsRects: [], lastDrawnDataLabelsIndexes: [], hasNullValues: !1, easing: null, zoomed: !1, gridWidth: 0, gridHeight: 0, rotateXLabels: !1, defaultLabels: !1, xLabelFormatter: void 0, yLabelFormatters: [], xaxisTooltipFormatter: void 0, ttKeyFormatter: void 0, ttVal: void 0, ttZFormatter: void 0, LINE_HEIGHT_RATIO: 1.618, xAxisLabelsHeight: 0, xAxisGroupLabelsHeight: 0, xAxisLabelsWidth: 0, yAxisLabelsWidth: 0, scaleX: 1, scaleY: 1, translateX: 0, translateY: 0, translateYAxisX: [], yAxisWidths: [], translateXAxisY: 0, translateXAxisX: 0, tooltip: null, niceScaleAllowedMagMsd: [[1, 1, 2, 5, 5, 5, 10, 10, 10, 10, 10], [1, 1, 2, 5, 5, 5, 10, 10, 10, 10, 10]], niceScaleDefaultTicks: [1, 2, 4, 4, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 12, 12, 12, 12, 12, 12, 12, 12, 12, 24], seriesYAxisMap: [], seriesYAxisReverseMap: [] } } }, { key: "init", value: function (e) { var t = this.globalVars(e); return this.initGlobalVars(t), t.initialConfig = P.extend({}, e), t.initialSeries = P.clone(e.series), t.lastXAxis = P.clone(t.initialConfig.xaxis), t.lastYAxis = P.clone(t.initialConfig.yaxis), t } }]), p }(), Ri = function () { function p(e) { F(this, p), this.opts = e } return R(p, [{ key: "init", value: function () { var e = new Pe(this.opts).init({ responsiveOverride: !1 }); return { config: e, globals: new Et().init(e) } } }]), p }(), ne = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w, this.opts = null, this.seriesIndex = 0, this.patternIDs = [] } return R(p, [{ key: "clippedImgArea", value: function (e) { var t = this.w, i = t.config, a = parseInt(t.globals.gridWidth, 10), s = parseInt(t.globals.gridHeight, 10), r = a > s ? a : s, n = e.image, o = 0, h = 0; e.width === void 0 && e.height === void 0 ? i.fill.image.width !== void 0 && i.fill.image.height !== void 0 ? (o = i.fill.image.width + 1, h = i.fill.image.height) : (o = r + 1, h = r) : (o = e.width, h = e.height); var c = document.createElementNS(t.globals.SVGNS, "pattern"); X.setAttrs(c, { id: e.patternID, patternUnits: e.patternUnits ? e.patternUnits : "userSpaceOnUse", width: o + "px", height: h + "px" }); var d = document.createElementNS(t.globals.SVGNS, "image"); c.appendChild(d), d.setAttributeNS(window.SVG.xlink, "href", n), X.setAttrs(d, { x: 0, y: 0, preserveAspectRatio: "none", width: o + "px", height: h + "px" }), d.style.opacity = e.opacity, t.globals.dom.elDefs.node.appendChild(c) } }, { key: "getSeriesIndex", value: function (e) { var t = this.w, i = t.config.chart.type; return (i === "bar" || i === "rangeBar") && t.config.plotOptions.bar.distributed || i === "heatmap" || i === "treemap" ? this.seriesIndex = e.seriesNumber : this.seriesIndex = e.seriesNumber % t.globals.series.length, this.seriesIndex } }, { key: "fillPath", value: function (e) { var t = this.w; this.opts = e; var i, a, s, r = this.w.config; this.seriesIndex = this.getSeriesIndex(e); var n = this.getFillColors()[this.seriesIndex]; t.globals.seriesColors[this.seriesIndex] !== void 0 && (n = t.globals.seriesColors[this.seriesIndex]), typeof n == "function" && (n = n({ seriesIndex: this.seriesIndex, dataPointIndex: e.dataPointIndex, value: e.value, w: t })); var o = e.fillType ? e.fillType : this.getFillType(this.seriesIndex), h = Array.isArray(r.fill.opacity) ? r.fill.opacity[this.seriesIndex] : r.fill.opacity; e.color && (n = e.color), n || (n = "#fff", console.warn("undefined color - ApexCharts")); var c = n; if (n.indexOf("rgb") === -1 ? n.length < 9 && (c = P.hexToRgba(n, h)) : n.indexOf("rgba") > -1 && (h = P.getOpacityFromRGBA(n)), e.opacity && (h = e.opacity), o === "pattern" && (a = this.handlePatternFill({ fillConfig: e.fillConfig, patternFill: a, fillColor: n, fillOpacity: h, defaultColor: c })), o === "gradient" && (s = this.handleGradientFill({ fillConfig: e.fillConfig, fillColor: n, fillOpacity: h, i: this.seriesIndex })), o === "image") { var d = r.fill.image.src, g = e.patternID ? e.patternID : "", f = "pattern".concat(t.globals.cuid).concat(e.seriesNumber + 1).concat(g); this.patternIDs.indexOf(f) === -1 && (this.clippedImgArea({ opacity: h, image: Array.isArray(d) ? e.seriesNumber < d.length ? d[e.seriesNumber] : d[0] : d, width: e.width ? e.width : void 0, height: e.height ? e.height : void 0, patternUnits: e.patternUnits, patternID: f }), this.patternIDs.push(f)), i = "url(#".concat(f, ")") } else i = o === "gradient" ? s : o === "pattern" ? a : c; return e.solid && (i = c), i } }, { key: "getFillType", value: function (e) { var t = this.w; return Array.isArray(t.config.fill.type) ? t.config.fill.type[e] : t.config.fill.type } }, { key: "getFillColors", value: function () { var e = this.w, t = e.config, i = this.opts, a = []; return e.globals.comboCharts ? e.config.series[this.seriesIndex].type === "line" ? Array.isArray(e.globals.stroke.colors) ? a = e.globals.stroke.colors : a.push(e.globals.stroke.colors) : Array.isArray(e.globals.fill.colors) ? a = e.globals.fill.colors : a.push(e.globals.fill.colors) : t.chart.type === "line" ? Array.isArray(e.globals.stroke.colors) ? a = e.globals.stroke.colors : a.push(e.globals.stroke.colors) : Array.isArray(e.globals.fill.colors) ? a = e.globals.fill.colors : a.push(e.globals.fill.colors), i.fillColors !== void 0 && (a = [], Array.isArray(i.fillColors) ? a = i.fillColors.slice() : a.push(i.fillColors)), a } }, { key: "handlePatternFill", value: function (e) { var t = e.fillConfig, i = e.patternFill, a = e.fillColor, s = e.fillOpacity, r = e.defaultColor, n = this.w.config.fill; t && (n = t); var o = this.opts, h = new X(this.ctx), c = Array.isArray(n.pattern.strokeWidth) ? n.pattern.strokeWidth[this.seriesIndex] : n.pattern.strokeWidth, d = a; return Array.isArray(n.pattern.style) ? i = n.pattern.style[o.seriesNumber] !== void 0 ? h.drawPattern(n.pattern.style[o.seriesNumber], n.pattern.width, n.pattern.height, d, c, s) : r : i = h.drawPattern(n.pattern.style, n.pattern.width, n.pattern.height, d, c, s), i } }, { key: "handleGradientFill", value: function (e) { var t = e.fillColor, i = e.fillOpacity, a = e.fillConfig, s = e.i, r = this.w.config.fill; a && (r = Y(Y({}, r), a)); var n, o = this.opts, h = new X(this.ctx), c = new P, d = r.gradient.type, g = t, f = r.gradient.opacityFrom === void 0 ? i : Array.isArray(r.gradient.opacityFrom) ? r.gradient.opacityFrom[s] : r.gradient.opacityFrom; g.indexOf("rgba") > -1 && (f = P.getOpacityFromRGBA(g)); var x = r.gradient.opacityTo === void 0 ? i : Array.isArray(r.gradient.opacityTo) ? r.gradient.opacityTo[s] : r.gradient.opacityTo; if (r.gradient.gradientToColors === void 0 || r.gradient.gradientToColors.length === 0) n = r.gradient.shade === "dark" ? c.shadeColor(-1 * parseFloat(r.gradient.shadeIntensity), t.indexOf("rgb") > -1 ? P.rgb2hex(t) : t) : c.shadeColor(parseFloat(r.gradient.shadeIntensity), t.indexOf("rgb") > -1 ? P.rgb2hex(t) : t); else if (r.gradient.gradientToColors[o.seriesNumber]) { var b = r.gradient.gradientToColors[o.seriesNumber]; n = b, b.indexOf("rgba") > -1 && (x = P.getOpacityFromRGBA(b)) } else n = t; if (r.gradient.gradientFrom && (g = r.gradient.gradientFrom), r.gradient.gradientTo && (n = r.gradient.gradientTo), r.gradient.inverseColors) { var v = g; g = n, n = v } return g.indexOf("rgb") > -1 && (g = P.rgb2hex(g)), n.indexOf("rgb") > -1 && (n = P.rgb2hex(n)), h.drawGradient(d, g, n, f, x, o.size, r.gradient.stops, r.gradient.colorStops, s) } }]), p }(), ye = function () { function p(e, t) { F(this, p), this.ctx = e, this.w = e.w } return R(p, [{ key: "setGlobalMarkerSize", value: function () { var e = this.w; if (e.globals.markers.size = Array.isArray(e.config.markers.size) ? e.config.markers.size : [e.config.markers.size], e.globals.markers.size.length > 0) { if (e.globals.markers.size.length < e.globals.series.length + 1) for (var t = 0; t <= e.globals.series.length; t++)e.globals.markers.size[t] === void 0 && e.globals.markers.size.push(e.globals.markers.size[0]) } else e.globals.markers.size = e.config.series.map(function (i) { return e.config.markers.size }) } }, { key: "plotChartMarkers", value: function (e, t, i, a) { var s, r = arguments.length > 4 && arguments[4] !== void 0 && arguments[4], n = this.w, o = t, h = e, c = null, d = new X(this.ctx), g = n.config.markers.discrete && n.config.markers.discrete.length; if ((n.globals.markers.size[t] > 0 || r || g) && (c = d.group({ class: r || g ? "" : "apexcharts-series-markers" })).attr("clip-path", "url(#gridRectMarkerMask".concat(n.globals.cuid, ")")), Array.isArray(h.x)) for (var f = 0; f < h.x.length; f++) { var x = i; i === 1 && f === 0 && (x = 0), i === 1 && f === 1 && (x = 1); var b = "apexcharts-marker"; if (n.config.chart.type !== "line" && n.config.chart.type !== "area" || n.globals.comboCharts || n.config.tooltip.intersect || (b += " no-pointer-events"), (Array.isArray(n.config.markers.size) ? n.globals.markers.size[t] > 0 : n.config.markers.size > 0) || r || g) { P.isNumber(h.y[f]) ? b += " w".concat(P.randomId()) : b = "apexcharts-nullpoint"; var v = this.getMarkerConfig({ cssClass: b, seriesIndex: t, dataPointIndex: x }); n.config.series[o].data[x] && (n.config.series[o].data[x].fillColor && (v.pointFillColor = n.config.series[o].data[x].fillColor), n.config.series[o].data[x].strokeColor && (v.pointStrokeColor = n.config.series[o].data[x].strokeColor)), a !== void 0 && (v.pSize = a), (h.x[f] < -n.globals.markers.largestSize || h.x[f] > n.globals.gridWidth + n.globals.markers.largestSize || h.y[f] < -n.globals.markers.largestSize || h.y[f] > n.globals.gridHeight + n.globals.markers.largestSize) && (v.pSize = 0), (s = d.drawMarker(h.x[f], h.y[f], v)).attr("rel", x), s.attr("j", x), s.attr("index", t), s.node.setAttribute("default-marker-size", v.pSize), new ie(this.ctx).setSelectionFilter(s, t, x), this.addEvents(s), c && c.add(s) } else n.globals.pointsArray[t] === void 0 && (n.globals.pointsArray[t] = []), n.globals.pointsArray[t].push([h.x[f], h.y[f]]) } return c } }, { key: "getMarkerConfig", value: function (e) { var t = e.cssClass, i = e.seriesIndex, a = e.dataPointIndex, s = a === void 0 ? null : a, r = e.radius, n = r === void 0 ? null : r, o = e.size, h = o === void 0 ? null : o, c = e.strokeWidth, d = c === void 0 ? null : c, g = this.w, f = this.getMarkerStyle(i), x = h === null ? g.globals.markers.size[i] : h, b = g.config.markers; return s !== null && b.discrete.length && b.discrete.map(function (v) { v.seriesIndex === i && v.dataPointIndex === s && (f.pointStrokeColor = v.strokeColor, f.pointFillColor = v.fillColor, x = v.size, f.pointShape = v.shape) }), { pSize: n === null ? x : n, pRadius: n !== null ? n : b.radius, pointStrokeWidth: d !== null ? d : Array.isArray(b.strokeWidth) ? b.strokeWidth[i] : b.strokeWidth, pointStrokeColor: f.pointStrokeColor, pointFillColor: f.pointFillColor, shape: f.pointShape || (Array.isArray(b.shape) ? b.shape[i] : b.shape), class: t, pointStrokeOpacity: Array.isArray(b.strokeOpacity) ? b.strokeOpacity[i] : b.strokeOpacity, pointStrokeDashArray: Array.isArray(b.strokeDashArray) ? b.strokeDashArray[i] : b.strokeDashArray, pointFillOpacity: Array.isArray(b.fillOpacity) ? b.fillOpacity[i] : b.fillOpacity, seriesIndex: i } } }, { key: "addEvents", value: function (e) { var t = this.w, i = new X(this.ctx); e.node.addEventListener("mouseenter", i.pathMouseEnter.bind(this.ctx, e)), e.node.addEventListener("mouseleave", i.pathMouseLeave.bind(this.ctx, e)), e.node.addEventListener("mousedown", i.pathMouseDown.bind(this.ctx, e)), e.node.addEventListener("click", t.config.markers.onClick), e.node.addEventListener("dblclick", t.config.markers.onDblClick), e.node.addEventListener("touchstart", i.pathMouseDown.bind(this.ctx, e), { passive: !0 }) } }, { key: "getMarkerStyle", value: function (e) { var t = this.w, i = t.globals.markers.colors, a = t.config.markers.strokeColor || t.config.markers.strokeColors; return { pointStrokeColor: Array.isArray(a) ? a[e] : a, pointFillColor: Array.isArray(i) ? i[e] : i } } }]), p }(), Yt = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w, this.initialAnim = this.w.config.chart.animations.enabled } return R(p, [{ key: "draw", value: function (e, t, i) { var a = this.w, s = new X(this.ctx), r = i.realIndex, n = i.pointsPos, o = i.zRatio, h = i.elParent, c = s.group({ class: "apexcharts-series-markers apexcharts-series-".concat(a.config.chart.type) }); if (c.attr("clip-path", "url(#gridRectMarkerMask".concat(a.globals.cuid, ")")), Array.isArray(n.x)) for (var d = 0; d < n.x.length; d++) { var g = t + 1, f = !0; t === 0 && d === 0 && (g = 0), t === 0 && d === 1 && (g = 1); var x = a.globals.markers.size[r]; if (o !== 1 / 0) { var b = a.config.plotOptions.bubble; x = a.globals.seriesZ[r][g], b.zScaling && (x /= o), b.minBubbleRadius && x < b.minBubbleRadius && (x = b.minBubbleRadius), b.maxBubbleRadius && x > b.maxBubbleRadius && (x = b.maxBubbleRadius) } var v = n.x[d], y = n.y[d]; if (x = x || 0, y !== null && a.globals.series[r][g] !== void 0 || (f = !1), f) { var w = this.drawPoint(v, y, x, r, g, t); c.add(w) } h.add(c) } } }, { key: "drawPoint", value: function (e, t, i, a, s, r) { var n = this.w, o = a, h = new ve(this.ctx), c = new ie(this.ctx), d = new ne(this.ctx), g = new ye(this.ctx), f = new X(this.ctx), x = g.getMarkerConfig({ cssClass: "apexcharts-marker", seriesIndex: o, dataPointIndex: s, radius: n.config.chart.type === "bubble" || n.globals.comboCharts && n.config.series[a] && n.config.series[a].type === "bubble" ? i : null }), b = d.fillPath({ seriesNumber: a, dataPointIndex: s, color: x.pointFillColor, patternUnits: "objectBoundingBox", value: n.globals.series[a][r] }), v = f.drawMarker(e, t, x); if (n.config.series[o].data[s] && n.config.series[o].data[s].fillColor && (b = n.config.series[o].data[s].fillColor), v.attr({ fill: b }), n.config.chart.dropShadow.enabled) { var y = n.config.chart.dropShadow; c.dropShadow(v, y, a) } if (!this.initialAnim || n.globals.dataChanged || n.globals.resized) n.globals.animationEnded = !0; else { var w = n.config.chart.animations.speed; h.animateMarker(v, w, n.globals.easing, function () { window.setTimeout(function () { h.animationCompleted(v) }, 100) }) } return v.attr({ rel: s, j: s, index: a, "default-marker-size": x.pSize }), c.setSelectionFilter(v, a, s), g.addEvents(v), v.node.classList.add("apexcharts-marker"), v } }, { key: "centerTextInBubble", value: function (e) { var t = this.w; return { y: e += parseInt(t.config.dataLabels.style.fontSize, 10) / 4 } } }]), p }(), be = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w } return R(p, [{ key: "dataLabelsCorrection", value: function (e, t, i, a, s, r, n) { var o = this.w, h = !1, c = new X(this.ctx).getTextRects(i, n), d = c.width, g = c.height; t < 0 && (t = 0), t > o.globals.gridHeight + g && (t = o.globals.gridHeight + g / 2), o.globals.dataLabelsRects[a] === void 0 && (o.globals.dataLabelsRects[a] = []), o.globals.dataLabelsRects[a].push({ x: e, y: t, width: d, height: g }); var f = o.globals.dataLabelsRects[a].length - 2, x = o.globals.lastDrawnDataLabelsIndexes[a] !== void 0 ? o.globals.lastDrawnDataLabelsIndexes[a][o.globals.lastDrawnDataLabelsIndexes[a].length - 1] : 0; if (o.globals.dataLabelsRects[a][f] !== void 0) { var b = o.globals.dataLabelsRects[a][x]; (e > b.x + b.width || t > b.y + b.height || t + g < b.y || e + d < b.x) && (h = !0) } return (s === 0 || r) && (h = !0), { x: e, y: t, textRects: c, drawnextLabel: h } } }, { key: "drawDataLabel", value: function (e) { var t = this, i = e.type, a = e.pos, s = e.i, r = e.j, n = e.isRangeStart, o = e.strokeWidth, h = o === void 0 ? 2 : o, c = this.w, d = new X(this.ctx), g = c.config.dataLabels, f = 0, x = 0, b = r, v = null; if (c.globals.collapsedSeriesIndices.indexOf(s) !== -1 || !g.enabled || !Array.isArray(a.x)) return v; v = d.group({ class: "apexcharts-data-labels" }); for (var y = 0; y < a.x.length; y++)if (f = a.x[y] + g.offsetX, x = a.y[y] + g.offsetY + h, !isNaN(f)) { r === 1 && y === 0 && (b = 0), r === 1 && y === 1 && (b = 1); var w = c.globals.series[s][b]; i === "rangeArea" && (w = n ? c.globals.seriesRangeStart[s][b] : c.globals.seriesRangeEnd[s][b]); var l = "", u = function (A) { return c.config.dataLabels.formatter(A, { ctx: t.ctx, seriesIndex: s, dataPointIndex: b, w: c }) }; c.config.chart.type === "bubble" ? (l = u(w = c.globals.seriesZ[s][b]), x = a.y[y], x = new Yt(this.ctx).centerTextInBubble(x, s, b).y) : w !== void 0 && (l = u(w)); var m = c.config.dataLabels.textAnchor; c.globals.isSlopeChart && (m = b === 0 ? "end" : b === c.config.series[s].data.length - 1 ? "start" : "middle"), this.plotDataLabelsText({ x: f, y: x, text: l, i: s, j: b, parent: v, offsetCorrection: !0, dataLabelsConfig: c.config.dataLabels, textAnchor: m }) } return v } }, { key: "plotDataLabelsText", value: function (e) { var t = this.w, i = new X(this.ctx), a = e.x, s = e.y, r = e.i, n = e.j, o = e.text, h = e.textAnchor, c = e.fontSize, d = e.parent, g = e.dataLabelsConfig, f = e.color, x = e.alwaysDrawDataLabel, b = e.offsetCorrection, v = e.className, y = null; if (Array.isArray(t.config.dataLabels.enabledOnSeries) && t.config.dataLabels.enabledOnSeries.indexOf(r) < 0) return y; var w = { x: a, y: s, drawnextLabel: !0, textRects: null }; b && (w = this.dataLabelsCorrection(a, s, o, r, n, x, parseInt(g.style.fontSize, 10))), t.globals.zoomed || (a = w.x, s = w.y), w.textRects && (a < -20 - w.textRects.width || a > t.globals.gridWidth + w.textRects.width + 30) && (o = ""); var l = t.globals.dataLabels.style.colors[r]; ((t.config.chart.type === "bar" || t.config.chart.type === "rangeBar") && t.config.plotOptions.bar.distributed || t.config.dataLabels.distributed) && (l = t.globals.dataLabels.style.colors[n]), typeof l == "function" && (l = l({ series: t.globals.series, seriesIndex: r, dataPointIndex: n, w: t })), f && (l = f); var u = g.offsetX, m = g.offsetY; if (t.config.chart.type !== "bar" && t.config.chart.type !== "rangeBar" || (u = 0, m = 0), t.globals.isSlopeChart && (n !== 0 && (u = -2 * g.offsetX + 5), n !== 0 && n !== t.config.series[r].data.length - 1 && (u = 0)), w.drawnextLabel) { if ((y = i.drawText({ width: 100, height: parseInt(g.style.fontSize, 10), x: a + u, y: s + m, foreColor: l, textAnchor: h || g.textAnchor, text: o, fontSize: c || g.style.fontSize, fontFamily: g.style.fontFamily, fontWeight: g.style.fontWeight || "normal" })).attr({ class: v || "apexcharts-datalabel", cx: a, cy: s }), g.dropShadow.enabled) { var A = g.dropShadow; new ie(this.ctx).dropShadow(y, A) } d.add(y), t.globals.lastDrawnDataLabelsIndexes[r] === void 0 && (t.globals.lastDrawnDataLabelsIndexes[r] = []), t.globals.lastDrawnDataLabelsIndexes[r].push(n) } return y } }, { key: "addBackgroundToDataLabel", value: function (e, t) { var i = this.w, a = i.config.dataLabels.background, s = a.padding, r = a.padding / 2, n = t.width, o = t.height, h = new X(this.ctx).drawRect(t.x - s, t.y - r / 2, n + 2 * s, o + r, a.borderRadius, i.config.chart.background !== "transparent" && i.config.chart.background ? i.config.chart.background : "#fff", a.opacity, a.borderWidth, a.borderColor); return a.dropShadow.enabled && new ie(this.ctx).dropShadow(h, a.dropShadow), h } }, { key: "dataLabelsBackground", value: function () { var e = this.w; if (e.config.chart.type !== "bubble") for (var t = e.globals.dom.baseEl.querySelectorAll(".apexcharts-datalabels text"), i = 0; i < t.length; i++) { var a = t[i], s = a.getBBox(), r = null; if (s.width && s.height && (r = this.addBackgroundToDataLabel(a, s)), r) { a.parentNode.insertBefore(r.node, a); var n = a.getAttribute("fill"); e.config.chart.animations.enabled && !e.globals.resized && !e.globals.dataChanged ? r.animate().attr({ fill: n }) : r.attr({ fill: n }), a.setAttribute("fill", e.config.dataLabels.background.foreColor) } } } }, { key: "bringForward", value: function () { for (var e = this.w, t = e.globals.dom.baseEl.querySelectorAll(".apexcharts-datalabels"), i = e.globals.dom.baseEl.querySelector(".apexcharts-plot-series:last-child"), a = 0; a < t.length; a++)i && i.insertBefore(t[a], i.nextSibling) } }]), p }(), re = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w, this.legendInactiveClass = "legend-mouseover-inactive" } return R(p, [{ key: "getAllSeriesEls", value: function () { return this.w.globals.dom.baseEl.getElementsByClassName("apexcharts-series") } }, { key: "getSeriesByName", value: function (e) { return this.w.globals.dom.baseEl.querySelector(".apexcharts-inner .apexcharts-series[seriesName='".concat(P.escapeString(e), "']")) } }, { key: "isSeriesHidden", value: function (e) { var t = this.getSeriesByName(e), i = parseInt(t.getAttribute("data:realIndex"), 10); return { isHidden: t.classList.contains("apexcharts-series-collapsed"), realIndex: i } } }, { key: "addCollapsedClassToSeries", value: function (e, t) { var i = this.w; function a(s) { for (var r = 0; r < s.length; r++)s[r].index === t && e.node.classList.add("apexcharts-series-collapsed") } a(i.globals.collapsedSeries), a(i.globals.ancillaryCollapsedSeries) } }, { key: "toggleSeries", value: function (e) { var t = this.isSeriesHidden(e); return this.ctx.legend.legendHelpers.toggleDataSeries(t.realIndex, t.isHidden), t.isHidden } }, { key: "showSeries", value: function (e) { var t = this.isSeriesHidden(e); t.isHidden && this.ctx.legend.legendHelpers.toggleDataSeries(t.realIndex, !0) } }, { key: "hideSeries", value: function (e) { var t = this.isSeriesHidden(e); t.isHidden || this.ctx.legend.legendHelpers.toggleDataSeries(t.realIndex, !1) } }, { key: "resetSeries", value: function () { var e = !(arguments.length > 0 && arguments[0] !== void 0) || arguments[0], t = !(arguments.length > 1 && arguments[1] !== void 0) || arguments[1], i = !(arguments.length > 2 && arguments[2] !== void 0) || arguments[2], a = this.w, s = P.clone(a.globals.initialSeries); a.globals.previousPaths = [], i ? (a.globals.collapsedSeries = [], a.globals.ancillaryCollapsedSeries = [], a.globals.collapsedSeriesIndices = [], a.globals.ancillaryCollapsedSeriesIndices = []) : s = this.emptyCollapsedSeries(s), a.config.series = s, e && (t && (a.globals.zoomed = !1, this.ctx.updateHelpers.revertDefaultAxisMinMax()), this.ctx.updateHelpers._updateSeries(s, a.config.chart.animations.dynamicAnimation.enabled)) } }, { key: "emptyCollapsedSeries", value: function (e) { for (var t = this.w, i = 0; i < e.length; i++)t.globals.collapsedSeriesIndices.indexOf(i) > -1 && (e[i].data = []); return e } }, { key: "highlightSeries", value: function (e) { var t = this.w, i = this.getSeriesByName(e), a = parseInt(i.getAttribute("data:realIndex"), 10), s = t.globals.dom.baseEl.querySelectorAll(".apexcharts-series, .apexcharts-datalabels, .apexcharts-yaxis"), r = null, n = null, o = null; if (t.globals.axisCharts || t.config.chart.type === "radialBar") if (t.globals.axisCharts) { r = t.globals.dom.baseEl.querySelector(".apexcharts-series[data\\:realIndex='".concat(a, "']")), n = t.globals.dom.baseEl.querySelector(".apexcharts-datalabels[data\\:realIndex='".concat(a, "']")); var h = t.globals.seriesYAxisReverseMap[a]; o = t.globals.dom.baseEl.querySelector(".apexcharts-yaxis[rel='".concat(h, "']")) } else r = t.globals.dom.baseEl.querySelector(".apexcharts-series[rel='".concat(a + 1, "']")); else r = t.globals.dom.baseEl.querySelector(".apexcharts-series[rel='".concat(a + 1, "'] path")); for (var c = 0; c < s.length; c++)s[c].classList.add(this.legendInactiveClass); r !== null && (t.globals.axisCharts || r.parentNode.classList.remove(this.legendInactiveClass), r.classList.remove(this.legendInactiveClass), n !== null && n.classList.remove(this.legendInactiveClass), o !== null && o.classList.remove(this.legendInactiveClass)) } }, { key: "toggleSeriesOnHover", value: function (e, t) { var i = this.w; t || (t = e.target); var a = i.globals.dom.baseEl.querySelectorAll(".apexcharts-series, .apexcharts-datalabels, .apexcharts-yaxis"); if (e.type === "mousemove") { var s = parseInt(t.getAttribute("rel"), 10) - 1; this.highlightSeries(i.config.series[s].name) } else if (e.type === "mouseout") for (var r = 0; r < a.length; r++)a[r].classList.remove(this.legendInactiveClass) } }, { key: "highlightRangeInSeries", value: function (e, t) { var i = this, a = this.w, s = a.globals.dom.baseEl.getElementsByClassName("apexcharts-heatmap-rect"), r = function (h) { for (var c = 0; c < s.length; c++)s[c].classList[h](i.legendInactiveClass) }; if (e.type === "mousemove") { var n = parseInt(t.getAttribute("rel"), 10) - 1; r("add"); var o = a.config.plotOptions.heatmap.colorScale.ranges; (function (h, c) { for (var d = 0; d < s.length; d++) { var g = Number(s[d].getAttribute("val")); g >= h.from && (g < h.to || h.to === c && g === c) && s[d].classList.remove(i.legendInactiveClass) } })(o[n], o.reduce(function (h, c) { return Math.max(h, c.to) }, 0)) } else e.type === "mouseout" && r("remove") } }, { key: "getActiveConfigSeriesIndex", value: function () { var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : "asc", t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : [], i = this.w, a = 0; if (i.config.series.length > 1) { for (var s = i.config.series.map(function (n, o) { return n.data && n.data.length > 0 && i.globals.collapsedSeriesIndices.indexOf(o) === -1 && (!i.globals.comboCharts || t.length === 0 || t.length && t.indexOf(i.config.series[o].type) > -1) ? o : -1 }), r = e === "asc" ? 0 : s.length - 1; e === "asc" ? r < s.length : r >= 0; e === "asc" ? r++ : r--)if (s[r] !== -1) { a = s[r]; break } } return a } }, { key: "getBarSeriesIndices", value: function () { return this.w.globals.comboCharts ? this.w.config.series.map(function (e, t) { return e.type === "bar" || e.type === "column" ? t : -1 }).filter(function (e) { return e !== -1 }) : this.w.config.series.map(function (e, t) { return t }) } }, { key: "getPreviousPaths", value: function () { var e = this.w; function t(r, n, o) { for (var h = r[n].childNodes, c = { type: o, paths: [], realIndex: r[n].getAttribute("data:realIndex") }, d = 0; d < h.length; d++)if (h[d].hasAttribute("pathTo")) { var g = h[d].getAttribute("pathTo"); c.paths.push({ d: g }) } e.globals.previousPaths.push(c) } e.globals.previousPaths = [], ["line", "area", "bar", "rangebar", "rangeArea", "candlestick", "radar"].forEach(function (r) { for (var n, o = (n = r, e.globals.dom.baseEl.querySelectorAll(".apexcharts-".concat(n, "-series .apexcharts-series"))), h = 0; h < o.length; h++)t(o, h, r) }), this.handlePrevBubbleScatterPaths("bubble"), this.handlePrevBubbleScatterPaths("scatter"); var i = e.globals.dom.baseEl.querySelectorAll(".apexcharts-".concat(e.config.chart.type, " .apexcharts-series")); if (i.length > 0) for (var a = function (r) { for (var n = e.globals.dom.baseEl.querySelectorAll(".apexcharts-".concat(e.config.chart.type, " .apexcharts-series[data\\:realIndex='").concat(r, "'] rect")), o = [], h = function (d) { var g = function (x) { return n[d].getAttribute(x) }, f = { x: parseFloat(g("x")), y: parseFloat(g("y")), width: parseFloat(g("width")), height: parseFloat(g("height")) }; o.push({ rect: f, color: n[d].getAttribute("color") }) }, c = 0; c < n.length; c++)h(c); e.globals.previousPaths.push(o) }, s = 0; s < i.length; s++)a(s); e.globals.axisCharts || (e.globals.previousPaths = e.globals.series) } }, { key: "handlePrevBubbleScatterPaths", value: function (e) { var t = this.w, i = t.globals.dom.baseEl.querySelectorAll(".apexcharts-".concat(e, "-series .apexcharts-series")); if (i.length > 0) for (var a = 0; a < i.length; a++) { for (var s = t.globals.dom.baseEl.querySelectorAll(".apexcharts-".concat(e, "-series .apexcharts-series[data\\:realIndex='").concat(a, "'] circle")), r = [], n = 0; n < s.length; n++)r.push({ x: s[n].getAttribute("cx"), y: s[n].getAttribute("cy"), r: s[n].getAttribute("r") }); t.globals.previousPaths.push(r) } } }, { key: "clearPreviousPaths", value: function () { var e = this.w; e.globals.previousPaths = [], e.globals.allSeriesCollapsed = !1 } }, { key: "handleNoData", value: function () { var e = this.w, t = e.config.noData, i = new X(this.ctx), a = e.globals.svgWidth / 2, s = e.globals.svgHeight / 2, r = "middle"; if (e.globals.noData = !0, e.globals.animationEnded = !0, t.align === "left" ? (a = 10, r = "start") : t.align === "right" && (a = e.globals.svgWidth - 10, r = "end"), t.verticalAlign === "top" ? s = 50 : t.verticalAlign === "bottom" && (s = e.globals.svgHeight - 50), a += t.offsetX, s = s + parseInt(t.style.fontSize, 10) + 2 + t.offsetY, t.text !== void 0 && t.text !== "") { var n = i.drawText({ x: a, y: s, text: t.text, textAnchor: r, fontSize: t.style.fontSize, fontFamily: t.style.fontFamily, foreColor: t.style.color, opacity: 1, class: "apexcharts-text-nodata" }); e.globals.dom.Paper.add(n) } } }, { key: "setNullSeriesToZeroValues", value: function (e) { for (var t = this.w, i = 0; i < e.length; i++)if (e[i].length === 0) for (var a = 0; a < e[t.globals.maxValsInArrayIndex].length; a++)e[i].push(0); return e } }, { key: "hasAllSeriesEqualX", value: function () { for (var e = !0, t = this.w, i = this.filteredSeriesX(), a = 0; a < i.length - 1; a++)if (i[a][0] !== i[a + 1][0]) { e = !1; break } return t.globals.allSeriesHasEqualX = e, e } }, { key: "filteredSeriesX", value: function () { var e = this.w.globals.seriesX.map(function (t) { return t.length > 0 ? t : [] }); return e } }]), p }(), Ft = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w, this.twoDSeries = [], this.threeDSeries = [], this.twoDSeriesX = [], this.seriesGoals = [], this.coreUtils = new $(this.ctx) } return R(p, [{ key: "isMultiFormat", value: function () { return this.isFormatXY() || this.isFormat2DArray() } }, { key: "isFormatXY", value: function () { var e = this.w.config.series.slice(), t = new re(this.ctx); if (this.activeSeriesIndex = t.getActiveConfigSeriesIndex(), e[this.activeSeriesIndex].data !== void 0 && e[this.activeSeriesIndex].data.length > 0 && e[this.activeSeriesIndex].data[0] !== null && e[this.activeSeriesIndex].data[0].x !== void 0 && e[this.activeSeriesIndex].data[0] !== null) return !0 } }, { key: "isFormat2DArray", value: function () { var e = this.w.config.series.slice(), t = new re(this.ctx); if (this.activeSeriesIndex = t.getActiveConfigSeriesIndex(), e[this.activeSeriesIndex].data !== void 0 && e[this.activeSeriesIndex].data.length > 0 && e[this.activeSeriesIndex].data[0] !== void 0 && e[this.activeSeriesIndex].data[0] !== null && e[this.activeSeriesIndex].data[0].constructor === Array) return !0 } }, { key: "handleFormat2DArray", value: function (e, t) { for (var i = this.w.config, a = this.w.globals, s = i.chart.type === "boxPlot" || i.series[t].type === "boxPlot", r = 0; r < e[t].data.length; r++)if (e[t].data[r][1] !== void 0 && (Array.isArray(e[t].data[r][1]) && e[t].data[r][1].length === 4 && !s ? this.twoDSeries.push(P.parseNumber(e[t].data[r][1][3])) : e[t].data[r].length >= 5 ? this.twoDSeries.push(P.parseNumber(e[t].data[r][4])) : this.twoDSeries.push(P.parseNumber(e[t].data[r][1])), a.dataFormatXNumeric = !0), i.xaxis.type === "datetime") { var n = new Date(e[t].data[r][0]); n = new Date(n).getTime(), this.twoDSeriesX.push(n) } else this.twoDSeriesX.push(e[t].data[r][0]); for (var o = 0; o < e[t].data.length; o++)e[t].data[o][2] !== void 0 && (this.threeDSeries.push(e[t].data[o][2]), a.isDataXYZ = !0) } }, { key: "handleFormatXY", value: function (e, t) { var i = this.w.config, a = this.w.globals, s = new K(this.ctx), r = t; a.collapsedSeriesIndices.indexOf(t) > -1 && (r = this.activeSeriesIndex); for (var n = 0; n < e[t].data.length; n++)e[t].data[n].y !== void 0 && (Array.isArray(e[t].data[n].y) ? this.twoDSeries.push(P.parseNumber(e[t].data[n].y[e[t].data[n].y.length - 1])) : this.twoDSeries.push(P.parseNumber(e[t].data[n].y))), e[t].data[n].goals !== void 0 && Array.isArray(e[t].data[n].goals) ? (this.seriesGoals[t] === void 0 && (this.seriesGoals[t] = []), this.seriesGoals[t].push(e[t].data[n].goals)) : (this.seriesGoals[t] === void 0 && (this.seriesGoals[t] = []), this.seriesGoals[t].push(null)); for (var o = 0; o < e[r].data.length; o++) { var h = typeof e[r].data[o].x == "string", c = Array.isArray(e[r].data[o].x), d = !c && !!s.isValidDate(e[r].data[o].x); if (h || d) if (h || i.xaxis.convertedCatToNumeric) { var g = a.isBarHorizontal && a.isRangeData; i.xaxis.type !== "datetime" || g ? (this.fallbackToCategory = !0, this.twoDSeriesX.push(e[r].data[o].x), isNaN(e[r].data[o].x) || this.w.config.xaxis.type === "category" || typeof e[r].data[o].x == "string" || (a.isXNumeric = !0)) : this.twoDSeriesX.push(s.parseDate(e[r].data[o].x)) } else i.xaxis.type === "datetime" ? this.twoDSeriesX.push(s.parseDate(e[r].data[o].x.toString())) : (a.dataFormatXNumeric = !0, a.isXNumeric = !0, this.twoDSeriesX.push(parseFloat(e[r].data[o].x))); else c ? (this.fallbackToCategory = !0, this.twoDSeriesX.push(e[r].data[o].x)) : (a.isXNumeric = !0, a.dataFormatXNumeric = !0, this.twoDSeriesX.push(e[r].data[o].x)) } if (e[t].data[0] && e[t].data[0].z !== void 0) { for (var f = 0; f < e[t].data.length; f++)this.threeDSeries.push(e[t].data[f].z); a.isDataXYZ = !0 } } }, { key: "handleRangeData", value: function (e, t) { var i = this.w.globals, a = {}; return this.isFormat2DArray() ? a = this.handleRangeDataFormat("array", e, t) : this.isFormatXY() && (a = this.handleRangeDataFormat("xy", e, t)), i.seriesRangeStart.push(a.start === void 0 ? [] : a.start), i.seriesRangeEnd.push(a.end === void 0 ? [] : a.end), i.seriesRange.push(a.rangeUniques), i.seriesRange.forEach(function (s, r) { s && s.forEach(function (n, o) { n.y.forEach(function (h, c) { for (var d = 0; d < n.y.length; d++)if (c !== d) { var g = h.y1, f = h.y2, x = n.y[d].y1; g <= n.y[d].y2 && x <= f && (n.overlaps.indexOf(h.rangeName) < 0 && n.overlaps.push(h.rangeName), n.overlaps.indexOf(n.y[d].rangeName) < 0 && n.overlaps.push(n.y[d].rangeName)) } }) }) }), a } }, { key: "handleCandleStickBoxData", value: function (e, t) { var i = this.w.globals, a = {}; return this.isFormat2DArray() ? a = this.handleCandleStickBoxDataFormat("array", e, t) : this.isFormatXY() && (a = this.handleCandleStickBoxDataFormat("xy", e, t)), i.seriesCandleO[t] = a.o, i.seriesCandleH[t] = a.h, i.seriesCandleM[t] = a.m, i.seriesCandleL[t] = a.l, i.seriesCandleC[t] = a.c, a } }, { key: "handleRangeDataFormat", value: function (e, t, i) { var a = [], s = [], r = t[i].data.filter(function (c, d, g) { return d === g.findIndex(function (f) { return f.x === c.x }) }).map(function (c, d) { return { x: c.x, overlaps: [], y: [] } }); if (e === "array") for (var n = 0; n < t[i].data.length; n++)Array.isArray(t[i].data[n]) ? (a.push(t[i].data[n][1][0]), s.push(t[i].data[n][1][1])) : (a.push(t[i].data[n]), s.push(t[i].data[n])); else if (e === "xy") for (var o = function (c) { var d = Array.isArray(t[i].data[c].y), g = P.randomId(), f = t[i].data[c].x, x = { y1: d ? t[i].data[c].y[0] : t[i].data[c].y, y2: d ? t[i].data[c].y[1] : t[i].data[c].y, rangeName: g }; t[i].data[c].rangeName = g; var b = r.findIndex(function (v) { return v.x === f }); r[b].y.push(x), a.push(x.y1), s.push(x.y2) }, h = 0; h < t[i].data.length; h++)o(h); return { start: a, end: s, rangeUniques: r } } }, { key: "handleCandleStickBoxDataFormat", value: function (e, t, i) { var a = this.w, s = a.config.chart.type === "boxPlot" || a.config.series[i].type === "boxPlot", r = [], n = [], o = [], h = [], c = []; if (e === "array") if (s && t[i].data[0].length === 6 || !s && t[i].data[0].length === 5) for (var d = 0; d < t[i].data.length; d++)r.push(t[i].data[d][1]), n.push(t[i].data[d][2]), s ? (o.push(t[i].data[d][3]), h.push(t[i].data[d][4]), c.push(t[i].data[d][5])) : (h.push(t[i].data[d][3]), c.push(t[i].data[d][4])); else for (var g = 0; g < t[i].data.length; g++)Array.isArray(t[i].data[g][1]) && (r.push(t[i].data[g][1][0]), n.push(t[i].data[g][1][1]), s ? (o.push(t[i].data[g][1][2]), h.push(t[i].data[g][1][3]), c.push(t[i].data[g][1][4])) : (h.push(t[i].data[g][1][2]), c.push(t[i].data[g][1][3]))); else if (e === "xy") for (var f = 0; f < t[i].data.length; f++)Array.isArray(t[i].data[f].y) && (r.push(t[i].data[f].y[0]), n.push(t[i].data[f].y[1]), s ? (o.push(t[i].data[f].y[2]), h.push(t[i].data[f].y[3]), c.push(t[i].data[f].y[4])) : (h.push(t[i].data[f].y[2]), c.push(t[i].data[f].y[3]))); return { o: r, h: n, m: o, l: h, c } } }, { key: "parseDataAxisCharts", value: function (e) { var t = this, i = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : this.ctx, a = this.w.config, s = this.w.globals, r = new K(i), n = a.labels.length > 0 ? a.labels.slice() : a.xaxis.categories.slice(); s.isRangeBar = a.chart.type === "rangeBar" && s.isBarHorizontal, s.hasXaxisGroups = a.xaxis.type === "category" && a.xaxis.group.groups.length > 0, s.hasXaxisGroups && (s.groups = a.xaxis.group.groups), e.forEach(function (f, x) { f.name !== void 0 ? s.seriesNames.push(f.name) : s.seriesNames.push("series-" + parseInt(x + 1, 10)) }), this.coreUtils.setSeriesYAxisMappings(); var o = [], h = te(new Set(a.series.map(function (f) { return f.group }))); a.series.forEach(function (f, x) { var b = h.indexOf(f.group); o[b] || (o[b] = []), o[b].push(s.seriesNames[x]) }), s.seriesGroups = o; for (var c = function () { for (var f = 0; f < n.length; f++)if (typeof n[f] == "string") { if (!r.isValidDate(n[f])) throw new Error("You have provided invalid Date format. Please provide a valid JavaScript Date"); t.twoDSeriesX.push(r.parseDate(n[f])) } else t.twoDSeriesX.push(n[f]) }, d = 0; d < e.length; d++) { if (this.twoDSeries = [], this.twoDSeriesX = [], this.threeDSeries = [], e[d].data === void 0) return void console.error("It is a possibility that you may have not included 'data' property in series."); if (a.chart.type !== "rangeBar" && a.chart.type !== "rangeArea" && e[d].type !== "rangeBar" && e[d].type !== "rangeArea" || (s.isRangeData = !0, a.chart.type !== "rangeBar" && a.chart.type !== "rangeArea" || this.handleRangeData(e, d)), this.isMultiFormat()) this.isFormat2DArray() ? this.handleFormat2DArray(e, d) : this.isFormatXY() && this.handleFormatXY(e, d), a.chart.type !== "candlestick" && e[d].type !== "candlestick" && a.chart.type !== "boxPlot" && e[d].type !== "boxPlot" || this.handleCandleStickBoxData(e, d), s.series.push(this.twoDSeries), s.labels.push(this.twoDSeriesX), s.seriesX.push(this.twoDSeriesX), s.seriesGoals = this.seriesGoals, d !== this.activeSeriesIndex || this.fallbackToCategory || (s.isXNumeric = !0); else { a.xaxis.type === "datetime" ? (s.isXNumeric = !0, c(), s.seriesX.push(this.twoDSeriesX)) : a.xaxis.type === "numeric" && (s.isXNumeric = !0, n.length > 0 && (this.twoDSeriesX = n, s.seriesX.push(this.twoDSeriesX))), s.labels.push(this.twoDSeriesX); var g = e[d].data.map(function (f) { return P.parseNumber(f) }); s.series.push(g) } s.seriesZ.push(this.threeDSeries), e[d].color !== void 0 ? s.seriesColors.push(e[d].color) : s.seriesColors.push(void 0) } return this.w } }, { key: "parseDataNonAxisCharts", value: function (e) { var t = this.w.globals, i = this.w.config; t.series = e.slice(), t.seriesNames = i.labels.slice(); for (var a = 0; a < t.series.length; a++)t.seriesNames[a] === void 0 && t.seriesNames.push("series-" + (a + 1)); return this.w } }, { key: "handleExternalLabelsData", value: function (e) { var t = this.w.config, i = this.w.globals; t.xaxis.categories.length > 0 ? i.labels = t.xaxis.categories : t.labels.length > 0 ? i.labels = t.labels.slice() : this.fallbackToCategory ? (i.labels = i.labels[0], i.seriesRange.length && (i.seriesRange.map(function (a) { a.forEach(function (s) { i.labels.indexOf(s.x) < 0 && s.x && i.labels.push(s.x) }) }), i.labels = Array.from(new Set(i.labels.map(JSON.stringify)), JSON.parse)), t.xaxis.convertedCatToNumeric && (new Le(t).convertCatToNumericXaxis(t, this.ctx, i.seriesX[0]), this._generateExternalLabels(e))) : this._generateExternalLabels(e) } }, { key: "_generateExternalLabels", value: function (e) { var t = this.w.globals, i = this.w.config, a = []; if (t.axisCharts) { if (t.series.length > 0) if (this.isFormatXY()) for (var s = i.series.map(function (d, g) { return d.data.filter(function (f, x, b) { return b.findIndex(function (v) { return v.x === f.x }) === x }) }), r = s.reduce(function (d, g, f, x) { return x[d].length > g.length ? d : f }, 0), n = 0; n < s[r].length; n++)a.push(n + 1); else for (var o = 0; o < t.series[t.maxValsInArrayIndex].length; o++)a.push(o + 1); t.seriesX = []; for (var h = 0; h < e.length; h++)t.seriesX.push(a); this.w.globals.isBarHorizontal || (t.isXNumeric = !0) } if (a.length === 0) { a = t.axisCharts ? [] : t.series.map(function (d, g) { return g + 1 }); for (var c = 0; c < e.length; c++)t.seriesX.push(a) } t.labels = a, i.xaxis.convertedCatToNumeric && (t.categoryLabels = a.map(function (d) { return i.xaxis.labels.formatter(d) })), t.noLabelsProvided = !0 } }, { key: "parseData", value: function (e) { var t = this.w, i = t.config, a = t.globals; if (this.excludeCollapsedSeriesInYAxis(), this.fallbackToCategory = !1, this.ctx.core.resetGlobals(), this.ctx.core.isMultipleY(), a.axisCharts ? (this.parseDataAxisCharts(e), this.coreUtils.getLargestSeries()) : this.parseDataNonAxisCharts(e), i.chart.stacked) { var s = new re(this.ctx); a.series = s.setNullSeriesToZeroValues(a.series) } this.coreUtils.getSeriesTotals(), a.axisCharts && (a.stackedSeriesTotals = this.coreUtils.getStackedSeriesTotals(), a.stackedSeriesTotalsByGroups = this.coreUtils.getStackedSeriesTotalsByGroups()), this.coreUtils.getPercentSeries(), a.dataFormatXNumeric || a.isXNumeric && (i.xaxis.type !== "numeric" || i.labels.length !== 0 || i.xaxis.categories.length !== 0) || this.handleExternalLabelsData(e); for (var r = this.coreUtils.getCategoryLabels(a.labels), n = 0; n < r.length; n++)if (Array.isArray(r[n])) { a.isMultiLineX = !0; break } } }, { key: "excludeCollapsedSeriesInYAxis", value: function () { var e = this.w, t = []; e.globals.seriesYAxisMap.forEach(function (i, a) { var s = 0; i.forEach(function (r) { e.globals.collapsedSeriesIndices.indexOf(r) !== -1 && s++ }), s > 0 && s == i.length && t.push(a) }), e.globals.ignoreYAxisIndexes = t.map(function (i) { return i }) } }]), p }(), He = function () { + function p(e) { F(this, p), this.ctx = e, this.w = e.w } return R(p, [{ key: "scaleSvgNode", value: function (e, t) { var i = parseFloat(e.getAttributeNS(null, "width")), a = parseFloat(e.getAttributeNS(null, "height")); e.setAttributeNS(null, "width", i * t), e.setAttributeNS(null, "height", a * t), e.setAttributeNS(null, "viewBox", "0 0 " + i + " " + a) } }, { key: "getSvgString", value: function () { var e = this; return new Promise(function (t) { var i = e.w, a = i.config.chart.toolbar.export.width, s = i.config.chart.toolbar.export.scale || a / i.globals.svgWidth; s || (s = 1); var r = e.w.globals.dom.Paper.svg(), n = e.w.globals.dom.Paper.node.cloneNode(!0); s !== 1 && e.scaleSvgNode(n, s), e.convertImagesToBase64(n).then(function () { r = new XMLSerializer().serializeToString(n), t(r.replace(/ /g, " ")) }) }) } }, { key: "convertImagesToBase64", value: function (e) { var t = this, i = e.getElementsByTagName("image"), a = Array.from(i).map(function (s) { var r = s.getAttributeNS("http://www.w3.org/1999/xlink", "href"); return r && !r.startsWith("data:") ? t.getBase64FromUrl(r).then(function (n) { s.setAttributeNS("http://www.w3.org/1999/xlink", "href", n) }).catch(function (n) { console.error("Error converting image to base64:", n) }) : Promise.resolve() }); return Promise.all(a) } }, { key: "getBase64FromUrl", value: function (e) { return new Promise(function (t, i) { var a = new Image; a.crossOrigin = "Anonymous", a.onload = function () { var s = document.createElement("canvas"); s.width = a.width, s.height = a.height, s.getContext("2d").drawImage(a, 0, 0), t(s.toDataURL()) }, a.onerror = i, a.src = e }) } }, { key: "cleanup", value: function () { var e = this.w, t = e.globals.dom.baseEl.getElementsByClassName("apexcharts-xcrosshairs"), i = e.globals.dom.baseEl.getElementsByClassName("apexcharts-ycrosshairs"), a = e.globals.dom.baseEl.querySelectorAll(".apexcharts-zoom-rect, .apexcharts-selection-rect"); Array.prototype.forEach.call(a, function (s) { s.setAttribute("width", 0) }), t && t[0] && (t[0].setAttribute("x", -500), t[0].setAttribute("x1", -500), t[0].setAttribute("x2", -500)), i && i[0] && (i[0].setAttribute("y", -100), i[0].setAttribute("y1", -100), i[0].setAttribute("y2", -100)) } }, { key: "svgUrl", value: function () { var e = this; return new Promise(function (t) { e.cleanup(), e.getSvgString().then(function (i) { var a = new Blob([i], { type: "image/svg+xml;charset=utf-8" }); t(URL.createObjectURL(a)) }) }) } }, { key: "dataURI", value: function (e) { var t = this; return new Promise(function (i) { var a = t.w, s = e ? e.scale || e.width / a.globals.svgWidth : 1; t.cleanup(); var r = document.createElement("canvas"); r.width = a.globals.svgWidth * s, r.height = parseInt(a.globals.dom.elWrap.style.height, 10) * s; var n = a.config.chart.background !== "transparent" && a.config.chart.background ? a.config.chart.background : "#fff", o = r.getContext("2d"); o.fillStyle = n, o.fillRect(0, 0, r.width * s, r.height * s), t.getSvgString().then(function (h) { var c = "data:image/svg+xml," + encodeURIComponent(h), d = new Image; d.crossOrigin = "anonymous", d.onload = function () { if (o.drawImage(d, 0, 0), r.msToBlob) { var g = r.msToBlob(); i({ blob: g }) } else { var f = r.toDataURL("image/png"); i({ imgURI: f }) } }, d.src = c }) }) } }, { key: "exportToSVG", value: function () { var e = this; this.svgUrl().then(function (t) { e.triggerDownload(t, e.w.config.chart.toolbar.export.svg.filename, ".svg") }) } }, { key: "exportToPng", value: function () { var e = this, t = this.w.config.chart.toolbar.export.scale, i = this.w.config.chart.toolbar.export.width, a = t ? { scale: t } : i ? { width: i } : void 0; this.dataURI(a).then(function (s) { var r = s.imgURI, n = s.blob; n ? navigator.msSaveOrOpenBlob(n, e.w.globals.chartID + ".png") : e.triggerDownload(r, e.w.config.chart.toolbar.export.png.filename, ".png") }) } }, { + key: "exportToCSV", value: function (e) { + var t = this, i = e.series, a = e.fileName, s = e.columnDelimiter, r = s === void 0 ? "," : s, n = e.lineDelimiter, o = n === void 0 ? ` +`: n, h = this.w; i || (i = h.config.series); var c, d, g = [], f = [], x = "", b = h.globals.series.map(function (k, S) { return h.globals.collapsedSeriesIndices.indexOf(S) === -1 ? k : [] }), v = function (k) { return typeof h.config.chart.toolbar.export.csv.categoryFormatter == "function" ? h.config.chart.toolbar.export.csv.categoryFormatter(k) : h.config.xaxis.type === "datetime" && String(k).length >= 10 ? new Date(k).toDateString() : P.isNumber(k) ? k : k.split(r).join("") }, y = function (k) { return typeof h.config.chart.toolbar.export.csv.valueFormatter == "function" ? h.config.chart.toolbar.export.csv.valueFormatter(k) : k }, w = Math.max.apply(Math, te(i.map(function (k) { return k.data ? k.data.length : 0 }))), l = new Ft(this.ctx), u = new ge(this.ctx), m = function (k) { var S = ""; if (h.globals.axisCharts) { if (h.config.xaxis.type === "category" || h.config.xaxis.convertedCatToNumeric) if (h.globals.isBarHorizontal) { var L = h.globals.yLabelFormatters[0], C = new re(t.ctx).getActiveConfigSeriesIndex(); S = L(h.globals.labels[k], { seriesIndex: C, dataPointIndex: k, w: h }) } else S = u.getLabel(h.globals.labels, h.globals.timescaleLabels, 0, k).text; h.config.xaxis.type === "datetime" && (h.config.xaxis.categories.length ? S = h.config.xaxis.categories[k] : h.config.labels.length && (S = h.config.labels[k])) } else S = h.config.labels[k]; return S === null ? "nullvalue" : (Array.isArray(S) && (S = S.join(" ")), P.isNumber(S) ? S : S.split(r).join("")) }, A = function (k, S) { if (g.length && S === 0 && f.push(g.join(r)), k.data) { k.data = k.data.length && k.data || te(Array(w)).map(function () { return "" }); for (var L = 0; L < k.data.length; L++) { g = []; var C = m(L); if (C !== "nullvalue") { if (C || (l.isFormatXY() ? C = i[S].data[L].x : l.isFormat2DArray() && (C = i[S].data[L] ? i[S].data[L][0] : "")), S === 0) { g.push(v(C)); for (var I = 0; I < h.globals.series.length; I++) { var z, M = l.isFormatXY() ? (z = i[I].data[L]) === null || z === void 0 ? void 0 : z.y : b[I][L]; g.push(y(M)) } } (h.config.chart.type === "candlestick" || k.type && k.type === "candlestick") && (g.pop(), g.push(h.globals.seriesCandleO[S][L]), g.push(h.globals.seriesCandleH[S][L]), g.push(h.globals.seriesCandleL[S][L]), g.push(h.globals.seriesCandleC[S][L])), (h.config.chart.type === "boxPlot" || k.type && k.type === "boxPlot") && (g.pop(), g.push(h.globals.seriesCandleO[S][L]), g.push(h.globals.seriesCandleH[S][L]), g.push(h.globals.seriesCandleM[S][L]), g.push(h.globals.seriesCandleL[S][L]), g.push(h.globals.seriesCandleC[S][L])), h.config.chart.type === "rangeBar" && (g.pop(), g.push(h.globals.seriesRangeStart[S][L]), g.push(h.globals.seriesRangeEnd[S][L])), g.length && f.push(g.join(r)) } } } }; g.push(h.config.chart.toolbar.export.csv.headerCategory), h.config.chart.type === "boxPlot" ? (g.push("minimum"), g.push("q1"), g.push("median"), g.push("q3"), g.push("maximum")) : h.config.chart.type === "candlestick" ? (g.push("open"), g.push("high"), g.push("low"), g.push("close")) : h.config.chart.type === "rangeBar" ? (g.push("minimum"), g.push("maximum")) : i.map(function (k, S) { var L = (k.name ? k.name : "series-".concat(S)) + ""; h.globals.axisCharts && g.push(L.split(r).join("") ? L.split(r).join("") : "series-".concat(S)) }), h.globals.axisCharts || (g.push(h.config.chart.toolbar.export.csv.headerValue), f.push(g.join(r))), h.globals.allSeriesHasEqualX || !h.globals.axisCharts || h.config.xaxis.categories.length || h.config.labels.length ? i.map(function (k, S) { h.globals.axisCharts ? A(k, S) : ((g = []).push(v(h.globals.labels[S])), g.push(y(b[S])), f.push(g.join(r))) }) : (c = new Set, d = {}, i.forEach(function (k, S) { k?.data.forEach(function (L) { var C, I; if (l.isFormatXY()) C = L.x, I = L.y; else { if (!l.isFormat2DArray()) return; C = L[0], I = L[1] } d[C] || (d[C] = Array(i.length).fill("")), d[C][S] = y(I), c.add(C) }) }), g.length && f.push(g.join(r)), Array.from(c).sort().forEach(function (k) { f.push([v(k), d[k].join(r)]) })), x += f.join(o), this.triggerDownload("data:text/csv; charset=utf-8," + encodeURIComponent("\uFEFF" + x), a || h.config.chart.toolbar.export.csv.filename, ".csv") + } + }, { key: "triggerDownload", value: function (e, t, i) { var a = document.createElement("a"); a.href = e, a.download = (t || this.w.globals.chartID) + i, document.body.appendChild(a), a.click(), document.body.removeChild(a) } }]), p + }(), Me = function () { function p(e, t) { F(this, p), this.ctx = e, this.elgrid = t, this.w = e.w; var i = this.w; this.axesUtils = new ge(e), this.xaxisLabels = i.globals.labels.slice(), i.globals.timescaleLabels.length > 0 && !i.globals.isBarHorizontal && (this.xaxisLabels = i.globals.timescaleLabels.slice()), i.config.xaxis.overwriteCategories && (this.xaxisLabels = i.config.xaxis.overwriteCategories), this.drawnLabels = [], this.drawnLabelsRects = [], i.config.xaxis.position === "top" ? this.offY = 0 : this.offY = i.globals.gridHeight, this.offY = this.offY + i.config.xaxis.axisBorder.offsetY, this.isCategoryBarHorizontal = i.config.chart.type === "bar" && i.config.plotOptions.bar.horizontal, this.xaxisFontSize = i.config.xaxis.labels.style.fontSize, this.xaxisFontFamily = i.config.xaxis.labels.style.fontFamily, this.xaxisForeColors = i.config.xaxis.labels.style.colors, this.xaxisBorderWidth = i.config.xaxis.axisBorder.width, this.isCategoryBarHorizontal && (this.xaxisBorderWidth = i.config.yaxis[0].axisBorder.width.toString()), this.xaxisBorderWidth.indexOf("%") > -1 ? this.xaxisBorderWidth = i.globals.gridWidth * parseInt(this.xaxisBorderWidth, 10) / 100 : this.xaxisBorderWidth = parseInt(this.xaxisBorderWidth, 10), this.xaxisBorderHeight = i.config.xaxis.axisBorder.height, this.yaxis = i.config.yaxis[0] } return R(p, [{ key: "drawXaxis", value: function () { var e = this.w, t = new X(this.ctx), i = t.group({ class: "apexcharts-xaxis", transform: "translate(".concat(e.config.xaxis.offsetX, ", ").concat(e.config.xaxis.offsetY, ")") }), a = t.group({ class: "apexcharts-xaxis-texts-g", transform: "translate(".concat(e.globals.translateXAxisX, ", ").concat(e.globals.translateXAxisY, ")") }); i.add(a); for (var s = [], r = 0; r < this.xaxisLabels.length; r++)s.push(this.xaxisLabels[r]); if (this.drawXAxisLabelAndGroup(!0, t, a, s, e.globals.isXNumeric, function (x, b) { return b }), e.globals.hasXaxisGroups) { var n = e.globals.groups; s = []; for (var o = 0; o < n.length; o++)s.push(n[o].title); var h = {}; e.config.xaxis.group.style && (h.xaxisFontSize = e.config.xaxis.group.style.fontSize, h.xaxisFontFamily = e.config.xaxis.group.style.fontFamily, h.xaxisForeColors = e.config.xaxis.group.style.colors, h.fontWeight = e.config.xaxis.group.style.fontWeight, h.cssClass = e.config.xaxis.group.style.cssClass), this.drawXAxisLabelAndGroup(!1, t, a, s, !1, function (x, b) { return n[x].cols * b }, h) } if (e.config.xaxis.title.text !== void 0) { var c = t.group({ class: "apexcharts-xaxis-title" }), d = t.drawText({ x: e.globals.gridWidth / 2 + e.config.xaxis.title.offsetX, y: this.offY + parseFloat(this.xaxisFontSize) + (e.config.xaxis.position === "bottom" ? e.globals.xAxisLabelsHeight : -e.globals.xAxisLabelsHeight - 10) + e.config.xaxis.title.offsetY, text: e.config.xaxis.title.text, textAnchor: "middle", fontSize: e.config.xaxis.title.style.fontSize, fontFamily: e.config.xaxis.title.style.fontFamily, fontWeight: e.config.xaxis.title.style.fontWeight, foreColor: e.config.xaxis.title.style.color, cssClass: "apexcharts-xaxis-title-text " + e.config.xaxis.title.style.cssClass }); c.add(d), i.add(c) } if (e.config.xaxis.axisBorder.show) { var g = e.globals.barPadForNumericAxis, f = t.drawLine(e.globals.padHorizontal + e.config.xaxis.axisBorder.offsetX - g, this.offY, this.xaxisBorderWidth + g, this.offY, e.config.xaxis.axisBorder.color, 0, this.xaxisBorderHeight); this.elgrid && this.elgrid.elGridBorders && e.config.grid.show ? this.elgrid.elGridBorders.add(f) : i.add(f) } return i } }, { key: "drawXAxisLabelAndGroup", value: function (e, t, i, a, s, r) { var n, o = this, h = arguments.length > 6 && arguments[6] !== void 0 ? arguments[6] : {}, c = [], d = [], g = this.w, f = h.xaxisFontSize || this.xaxisFontSize, x = h.xaxisFontFamily || this.xaxisFontFamily, b = h.xaxisForeColors || this.xaxisForeColors, v = h.fontWeight || g.config.xaxis.labels.style.fontWeight, y = h.cssClass || g.config.xaxis.labels.style.cssClass, w = g.globals.padHorizontal, l = a.length, u = g.config.xaxis.type === "category" ? g.globals.dataPoints : l; if (u === 0 && l > u && (u = l), s) { var m = u > 1 ? u - 1 : u; n = g.globals.gridWidth / Math.min(m, l - 1), w = w + r(0, n) / 2 + g.config.xaxis.labels.offsetX } else n = g.globals.gridWidth / u, w = w + r(0, n) + g.config.xaxis.labels.offsetX; for (var A = function (S) { var L = w - r(S, n) / 2 + g.config.xaxis.labels.offsetX; S === 0 && l === 1 && n / 2 === w && u === 1 && (L = g.globals.gridWidth / 2); var C = o.axesUtils.getLabel(a, g.globals.timescaleLabels, L, S, c, f, e), I = 28; if (g.globals.rotateXLabels && e && (I = 22), g.config.xaxis.title.text && g.config.xaxis.position === "top" && (I += parseFloat(g.config.xaxis.title.style.fontSize) + 2), e || (I = I + parseFloat(f) + (g.globals.xAxisLabelsHeight - g.globals.xAxisGroupLabelsHeight) + (g.globals.rotateXLabels ? 10 : 0)), C = g.config.xaxis.tickAmount !== void 0 && g.config.xaxis.tickAmount !== "dataPoints" && g.config.xaxis.type !== "datetime" ? o.axesUtils.checkLabelBasedOnTickamount(S, C, l) : o.axesUtils.checkForOverflowingLabels(S, C, l, c, d), g.config.xaxis.labels.show) { var z = t.drawText({ x: C.x, y: o.offY + g.config.xaxis.labels.offsetY + I - (g.config.xaxis.position === "top" ? g.globals.xAxisHeight + g.config.xaxis.axisTicks.height - 2 : 0), text: C.text, textAnchor: "middle", fontWeight: C.isBold ? 600 : v, fontSize: f, fontFamily: x, foreColor: Array.isArray(b) ? e && g.config.xaxis.convertedCatToNumeric ? b[g.globals.minX + S - 1] : b[S] : b, isPlainText: !1, cssClass: (e ? "apexcharts-xaxis-label " : "apexcharts-xaxis-group-label ") + y }); if (i.add(z), z.on("click", function (T) { if (typeof g.config.chart.events.xAxisLabelClick == "function") { var E = Object.assign({}, g, { labelIndex: S }); g.config.chart.events.xAxisLabelClick(T, o.ctx, E) } }), e) { var M = document.createElementNS(g.globals.SVGNS, "title"); M.textContent = Array.isArray(C.text) ? C.text.join(" ") : C.text, z.node.appendChild(M), C.text !== "" && (c.push(C.text), d.push(C)) } } S < l - 1 && (w += r(S + 1, n)) }, k = 0; k <= l - 1; k++)A(k) } }, { key: "drawXaxisInversed", value: function (e) { var t, i, a = this, s = this.w, r = new X(this.ctx), n = s.config.yaxis[0].opposite ? s.globals.translateYAxisX[e] : 0, o = r.group({ class: "apexcharts-yaxis apexcharts-xaxis-inversed", rel: e }), h = r.group({ class: "apexcharts-yaxis-texts-g apexcharts-xaxis-inversed-texts-g", transform: "translate(" + n + ", 0)" }); o.add(h); var c = []; if (s.config.yaxis[e].show) for (var d = 0; d < this.xaxisLabels.length; d++)c.push(this.xaxisLabels[d]); t = s.globals.gridHeight / c.length, i = -t / 2.2; var g = s.globals.yLabelFormatters[0], f = s.config.yaxis[0].labels; if (f.show) for (var x = function (m) { var A = c[m] === void 0 ? "" : c[m]; A = g(A, { seriesIndex: e, dataPointIndex: m, w: s }); var k = a.axesUtils.getYAxisForeColor(f.style.colors, e), S = 0; Array.isArray(A) && (S = A.length / 2 * parseInt(f.style.fontSize, 10)); var L = f.offsetX - 15, C = "end"; a.yaxis.opposite && (C = "start"), s.config.yaxis[0].labels.align === "left" ? (L = f.offsetX, C = "start") : s.config.yaxis[0].labels.align === "center" ? (L = f.offsetX, C = "middle") : s.config.yaxis[0].labels.align === "right" && (C = "end"); var I = r.drawText({ x: L, y: i + t + f.offsetY - S, text: A, textAnchor: C, foreColor: Array.isArray(k) ? k[m] : k, fontSize: f.style.fontSize, fontFamily: f.style.fontFamily, fontWeight: f.style.fontWeight, isPlainText: !1, cssClass: "apexcharts-yaxis-label " + f.style.cssClass, maxWidth: f.maxWidth }); h.add(I), I.on("click", function (T) { if (typeof s.config.chart.events.xAxisLabelClick == "function") { var E = Object.assign({}, s, { labelIndex: m }); s.config.chart.events.xAxisLabelClick(T, a.ctx, E) } }); var z = document.createElementNS(s.globals.SVGNS, "title"); if (z.textContent = Array.isArray(A) ? A.join(" ") : A, I.node.appendChild(z), s.config.yaxis[e].labels.rotate !== 0) { var M = r.rotateAroundCenter(I.node); I.node.setAttribute("transform", "rotate(".concat(s.config.yaxis[e].labels.rotate, " 0 ").concat(M.y, ")")) } i += t }, b = 0; b <= c.length - 1; b++)x(b); if (s.config.yaxis[0].title.text !== void 0) { var v = r.group({ class: "apexcharts-yaxis-title apexcharts-xaxis-title-inversed", transform: "translate(" + n + ", 0)" }), y = r.drawText({ x: s.config.yaxis[0].title.offsetX, y: s.globals.gridHeight / 2 + s.config.yaxis[0].title.offsetY, text: s.config.yaxis[0].title.text, textAnchor: "middle", foreColor: s.config.yaxis[0].title.style.color, fontSize: s.config.yaxis[0].title.style.fontSize, fontWeight: s.config.yaxis[0].title.style.fontWeight, fontFamily: s.config.yaxis[0].title.style.fontFamily, cssClass: "apexcharts-yaxis-title-text " + s.config.yaxis[0].title.style.cssClass }); v.add(y), o.add(v) } var w = 0; this.isCategoryBarHorizontal && s.config.yaxis[0].opposite && (w = s.globals.gridWidth); var l = s.config.xaxis.axisBorder; if (l.show) { var u = r.drawLine(s.globals.padHorizontal + l.offsetX + w, 1 + l.offsetY, s.globals.padHorizontal + l.offsetX + w, s.globals.gridHeight + l.offsetY, l.color, 0); this.elgrid && this.elgrid.elGridBorders && s.config.grid.show ? this.elgrid.elGridBorders.add(u) : o.add(u) } return s.config.yaxis[0].axisTicks.show && this.axesUtils.drawYAxisTicks(w, c.length, s.config.yaxis[0].axisBorder, s.config.yaxis[0].axisTicks, 0, t, o), o } }, { key: "drawXaxisTicks", value: function (e, t, i) { var a = this.w, s = e; if (!(e < 0 || e - 2 > a.globals.gridWidth)) { var r = this.offY + a.config.xaxis.axisTicks.offsetY; if (t = t + r + a.config.xaxis.axisTicks.height, a.config.xaxis.position === "top" && (t = r - a.config.xaxis.axisTicks.height), a.config.xaxis.axisTicks.show) { var n = new X(this.ctx).drawLine(e + a.config.xaxis.axisTicks.offsetX, r + a.config.xaxis.offsetY, s + a.config.xaxis.axisTicks.offsetX, t + a.config.xaxis.offsetY, a.config.xaxis.axisTicks.color); i.add(n), n.node.classList.add("apexcharts-xaxis-tick") } } } }, { key: "getXAxisTicksPositions", value: function () { var e = this.w, t = [], i = this.xaxisLabels.length, a = e.globals.padHorizontal; if (e.globals.timescaleLabels.length > 0) for (var s = 0; s < i; s++)a = this.xaxisLabels[s].position, t.push(a); else for (var r = i, n = 0; n < r; n++) { var o = r; e.globals.isXNumeric && e.config.chart.type !== "bar" && (o -= 1), a += e.globals.gridWidth / o, t.push(a) } return t } }, { key: "xAxisLabelCorrections", value: function () { var e = this.w, t = new X(this.ctx), i = e.globals.dom.baseEl.querySelector(".apexcharts-xaxis-texts-g"), a = e.globals.dom.baseEl.querySelectorAll(".apexcharts-xaxis-texts-g text:not(.apexcharts-xaxis-group-label)"), s = e.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxis-inversed text"), r = e.globals.dom.baseEl.querySelectorAll(".apexcharts-xaxis-inversed-texts-g text tspan"); if (e.globals.rotateXLabels || e.config.xaxis.labels.rotateAlways) for (var n = 0; n < a.length; n++) { var o = t.rotateAroundCenter(a[n]); o.y = o.y - 1, o.x = o.x + 1, a[n].setAttribute("transform", "rotate(".concat(e.config.xaxis.labels.rotate, " ").concat(o.x, " ").concat(o.y, ")")), a[n].setAttribute("text-anchor", "end"), i.setAttribute("transform", "translate(0, ".concat(-10, ")")); var h = a[n].childNodes; e.config.xaxis.labels.trim && Array.prototype.forEach.call(h, function (f) { t.placeTextWithEllipsis(f, f.textContent, e.globals.xAxisLabelsHeight - (e.config.legend.position === "bottom" ? 20 : 10)) }) } else (function () { for (var f = e.globals.gridWidth / (e.globals.labels.length + 1), x = 0; x < a.length; x++) { var b = a[x].childNodes; e.config.xaxis.labels.trim && e.config.xaxis.type !== "datetime" && Array.prototype.forEach.call(b, function (v) { t.placeTextWithEllipsis(v, v.textContent, f) }) } })(); if (s.length > 0) { var c = s[s.length - 1].getBBox(), d = s[0].getBBox(); c.x < -20 && s[s.length - 1].parentNode.removeChild(s[s.length - 1]), d.x + d.width > e.globals.gridWidth && !e.globals.isBarHorizontal && s[0].parentNode.removeChild(s[0]); for (var g = 0; g < r.length; g++)t.placeTextWithEllipsis(r[g], r[g].textContent, e.config.yaxis[0].labels.maxWidth - (e.config.yaxis[0].title.text ? 2 * parseFloat(e.config.yaxis[0].title.style.fontSize) : 0) - 15) } } }]), p }(), Rt = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w; var t = this.w; this.xaxisLabels = t.globals.labels.slice(), this.axesUtils = new ge(e), this.isRangeBar = t.globals.seriesRange.length && t.globals.isBarHorizontal, t.globals.timescaleLabels.length > 0 && (this.xaxisLabels = t.globals.timescaleLabels.slice()) } return R(p, [{ key: "drawGridArea", value: function () { var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : null, t = this.w, i = new X(this.ctx); e === null && (e = i.group({ class: "apexcharts-grid" })); var a = i.drawLine(t.globals.padHorizontal, 1, t.globals.padHorizontal, t.globals.gridHeight, "transparent"), s = i.drawLine(t.globals.padHorizontal, t.globals.gridHeight, t.globals.gridWidth, t.globals.gridHeight, "transparent"); return e.add(s), e.add(a), e } }, { key: "drawGrid", value: function () { var e = null; return this.w.globals.axisCharts && (e = this.renderGrid(), this.drawGridArea(e.el)), e } }, { key: "createGridMask", value: function () { var e = this.w, t = e.globals, i = new X(this.ctx), a = Array.isArray(e.config.stroke.width) ? 0 : e.config.stroke.width; if (Array.isArray(e.config.stroke.width)) { var s = 0; e.config.stroke.width.forEach(function (d) { s = Math.max(s, d) }), a = s } t.dom.elGridRectMask = document.createElementNS(t.SVGNS, "clipPath"), t.dom.elGridRectMask.setAttribute("id", "gridRectMask".concat(t.cuid)), t.dom.elGridRectMarkerMask = document.createElementNS(t.SVGNS, "clipPath"), t.dom.elGridRectMarkerMask.setAttribute("id", "gridRectMarkerMask".concat(t.cuid)), t.dom.elForecastMask = document.createElementNS(t.SVGNS, "clipPath"), t.dom.elForecastMask.setAttribute("id", "forecastMask".concat(t.cuid)), t.dom.elNonForecastMask = document.createElementNS(t.SVGNS, "clipPath"), t.dom.elNonForecastMask.setAttribute("id", "nonForecastMask".concat(t.cuid)); var r = e.config.chart.type, n = 0, o = 0; (r === "bar" || r === "rangeBar" || r === "candlestick" || r === "boxPlot" || e.globals.comboBarCount > 0) && e.globals.isXNumeric && !e.globals.isBarHorizontal && (n = e.config.grid.padding.left, o = e.config.grid.padding.right, t.barPadForNumericAxis > n && (n = t.barPadForNumericAxis, o = t.barPadForNumericAxis)), t.dom.elGridRect = i.drawRect(-a / 2 - n - 2, -a / 2 - 2, t.gridWidth + a + o + n + 4, t.gridHeight + a + 4, 0, "#fff"); var h = e.globals.markers.largestSize + 1; t.dom.elGridRectMarker = i.drawRect(2 * -h, 2 * -h, t.gridWidth + 4 * h, t.gridHeight + 4 * h, 0, "#fff"), t.dom.elGridRectMask.appendChild(t.dom.elGridRect.node), t.dom.elGridRectMarkerMask.appendChild(t.dom.elGridRectMarker.node); var c = t.dom.baseEl.querySelector("defs"); c.appendChild(t.dom.elGridRectMask), c.appendChild(t.dom.elForecastMask), c.appendChild(t.dom.elNonForecastMask), c.appendChild(t.dom.elGridRectMarkerMask) } }, { key: "_drawGridLines", value: function (e) { var t = e.i, i = e.x1, a = e.y1, s = e.x2, r = e.y2, n = e.xCount, o = e.parent, h = this.w; if (!(t === 0 && h.globals.skipFirstTimelinelabel || t === n - 1 && h.globals.skipLastTimelinelabel && !h.config.xaxis.labels.formatter || h.config.chart.type === "radar")) { h.config.grid.xaxis.lines.show && this._drawGridLine({ i: t, x1: i, y1: a, x2: s, y2: r, xCount: n, parent: o }); var c = 0; if (h.globals.hasXaxisGroups && h.config.xaxis.tickPlacement === "between") { var d = h.globals.groups; if (d) { for (var g = 0, f = 0; g < t && f < d.length; f++)g += d[f].cols; g === t && (c = .6 * h.globals.xAxisLabelsHeight) } } new Me(this.ctx).drawXaxisTicks(i, c, h.globals.dom.elGraphical) } } }, { key: "_drawGridLine", value: function (e) { var t = e.i, i = e.x1, a = e.y1, s = e.x2, r = e.y2, n = e.xCount, o = e.parent, h = this.w, c = !1, d = o.node.classList.contains("apexcharts-gridlines-horizontal"), g = h.config.grid.strokeDashArray, f = h.globals.barPadForNumericAxis; (a === 0 && r === 0 || i === 0 && s === 0) && (c = !0), a === h.globals.gridHeight && r === h.globals.gridHeight && (c = !0), !h.globals.isBarHorizontal || t !== 0 && t !== n - 1 || (c = !0); var x = new X(this).drawLine(i - (d ? f : 0), a, s + (d ? f : 0), r, h.config.grid.borderColor, g); x.node.classList.add("apexcharts-gridline"), c && h.config.grid.show ? this.elGridBorders.add(x) : o.add(x) } }, { key: "_drawGridBandRect", value: function (e) { var t = e.c, i = e.x1, a = e.y1, s = e.x2, r = e.y2, n = e.type, o = this.w, h = new X(this.ctx), c = o.globals.barPadForNumericAxis, d = o.config.grid[n].colors[t], g = h.drawRect(i - (n === "row" ? c : 0), a, s + (n === "row" ? 2 * c : 0), r, 0, d, o.config.grid[n].opacity); this.elg.add(g), g.attr("clip-path", "url(#gridRectMask".concat(o.globals.cuid, ")")), g.node.classList.add("apexcharts-grid-".concat(n)) } }, { key: "_drawXYLines", value: function (e) { var t = this, i = e.xCount, a = e.tickAmount, s = this.w; if (s.config.grid.xaxis.lines.show || s.config.xaxis.axisTicks.show) { var r, n = s.globals.padHorizontal, o = s.globals.gridHeight; s.globals.timescaleLabels.length ? function (x) { for (var b = x.xC, v = x.x1, y = x.y1, w = x.x2, l = x.y2, u = 0; u < b; u++)v = t.xaxisLabels[u].position, w = t.xaxisLabels[u].position, t._drawGridLines({ i: u, x1: v, y1: y, x2: w, y2: l, xCount: i, parent: t.elgridLinesV }) }({ xC: i, x1: n, y1: 0, x2: r, y2: o }) : (s.globals.isXNumeric && (i = s.globals.xAxisScale.result.length), function (x) { for (var b = x.xC, v = x.x1, y = x.y1, w = x.x2, l = x.y2, u = 0; u < b + (s.globals.isXNumeric ? 0 : 1); u++)u === 0 && b === 1 && s.globals.dataPoints === 1 && (w = v = s.globals.gridWidth / 2), t._drawGridLines({ i: u, x1: v, y1: y, x2: w, y2: l, xCount: i, parent: t.elgridLinesV }), w = v += s.globals.gridWidth / (s.globals.isXNumeric ? b - 1 : b) }({ xC: i, x1: n, y1: 0, x2: r, y2: o })) } if (s.config.grid.yaxis.lines.show) { var h = 0, c = 0, d = s.globals.gridWidth, g = a + 1; this.isRangeBar && (g = s.globals.labels.length); for (var f = 0; f < g + (this.isRangeBar ? 1 : 0); f++)this._drawGridLine({ i: f, xCount: g + (this.isRangeBar ? 1 : 0), x1: 0, y1: h, x2: d, y2: c, parent: this.elgridLinesH }), c = h += s.globals.gridHeight / (this.isRangeBar ? g : a) } } }, { key: "_drawInvertedXYLines", value: function (e) { var t = e.xCount, i = this.w; if (i.config.grid.xaxis.lines.show || i.config.xaxis.axisTicks.show) for (var a, s = i.globals.padHorizontal, r = i.globals.gridHeight, n = 0; n < t + 1; n++)i.config.grid.xaxis.lines.show && this._drawGridLine({ i: n, xCount: t + 1, x1: s, y1: 0, x2: a, y2: r, parent: this.elgridLinesV }), new Me(this.ctx).drawXaxisTicks(s, 0, i.globals.dom.elGraphical), a = s += i.globals.gridWidth / t; if (i.config.grid.yaxis.lines.show) for (var o = 0, h = 0, c = i.globals.gridWidth, d = 0; d < i.globals.dataPoints + 1; d++)this._drawGridLine({ i: d, xCount: i.globals.dataPoints + 1, x1: 0, y1: o, x2: c, y2: h, parent: this.elgridLinesH }), h = o += i.globals.gridHeight / i.globals.dataPoints } }, { key: "renderGrid", value: function () { var e = this.w, t = e.globals, i = new X(this.ctx); this.elg = i.group({ class: "apexcharts-grid" }), this.elgridLinesH = i.group({ class: "apexcharts-gridlines-horizontal" }), this.elgridLinesV = i.group({ class: "apexcharts-gridlines-vertical" }), this.elGridBorders = i.group({ class: "apexcharts-grid-borders" }), this.elg.add(this.elgridLinesH), this.elg.add(this.elgridLinesV), e.config.grid.show || (this.elgridLinesV.hide(), this.elgridLinesH.hide(), this.elGridBorders.hide()); for (var a = 0; a < t.seriesYAxisMap.length && t.ignoreYAxisIndexes.indexOf(a) !== -1;)a++; a === t.seriesYAxisMap.length && (a = 0); var s, r = t.yAxisScale[a].result.length - 1; if (!t.isBarHorizontal || this.isRangeBar) { var n, o, h; s = this.xaxisLabels.length, this.isRangeBar && (r = t.labels.length, e.config.xaxis.tickAmount && e.config.xaxis.labels.formatter && (s = e.config.xaxis.tickAmount), ((n = t.yAxisScale) === null || n === void 0 || (o = n[a]) === null || o === void 0 || (h = o.result) === null || h === void 0 ? void 0 : h.length) > 0 && e.config.xaxis.type !== "datetime" && (s = t.yAxisScale[a].result.length - 1)), this._drawXYLines({ xCount: s, tickAmount: r }) } else s = r, r = t.xTickAmount, this._drawInvertedXYLines({ xCount: s, tickAmount: r }); return this.drawGridBands(s, r), { el: this.elg, elGridBorders: this.elGridBorders, xAxisTickWidth: t.gridWidth / s } } }, { key: "drawGridBands", value: function (e, t) { var i = this.w; if (i.config.grid.row.colors !== void 0 && i.config.grid.row.colors.length > 0) for (var a = 0, s = i.globals.gridHeight / t, r = i.globals.gridWidth, n = 0, o = 0; n < t; n++, o++)o >= i.config.grid.row.colors.length && (o = 0), this._drawGridBandRect({ c: o, x1: 0, y1: a, x2: r, y2: s, type: "row" }), a += i.globals.gridHeight / t; if (i.config.grid.column.colors !== void 0 && i.config.grid.column.colors.length > 0) { var h = i.globals.isBarHorizontal || i.config.xaxis.tickPlacement !== "on" || i.config.xaxis.type !== "category" && !i.config.xaxis.convertedCatToNumeric ? e : e - 1; i.globals.isXNumeric && (h = i.globals.xAxisScale.result.length - 1); for (var c = i.globals.padHorizontal, d = i.globals.padHorizontal + i.globals.gridWidth / h, g = i.globals.gridHeight, f = 0, x = 0; f < e; f++, x++) { var b; x >= i.config.grid.column.colors.length && (x = 0), i.config.xaxis.type === "datetime" && (c = this.xaxisLabels[f].position, d = (((b = this.xaxisLabels[f + 1]) === null || b === void 0 ? void 0 : b.position) || i.globals.gridWidth) - this.xaxisLabels[f].position), this._drawGridBandRect({ c: x, x1: c, y1: 0, x2: d, y2: g, type: "column" }), c += i.globals.gridWidth / h } } } }]), p }(), Ot = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w } return R(p, [{ key: "niceScale", value: function (e, t) { var i, a, s, r, n = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 0, o = 1e-11, h = this.w, c = h.globals; c.isBarHorizontal ? (i = h.config.xaxis, a = Math.max((c.svgWidth - 100) / 25, 2)) : (i = h.config.yaxis[n], a = Math.max((c.svgHeight - 100) / 15, 2)), P.isNumber(a) || (a = 10), s = i.min !== void 0 && i.min !== null, r = i.max !== void 0 && i.min !== null; var d = i.stepSize !== void 0 && i.stepSize !== null, g = i.tickAmount !== void 0 && i.tickAmount !== null, f = g ? i.tickAmount : c.niceScaleDefaultTicks[Math.min(Math.round(a / 2), c.niceScaleDefaultTicks.length - 1)]; if (c.isMultipleYAxis && !g && c.multiAxisTickAmount > 0 && (f = c.multiAxisTickAmount, g = !0), f = f === "dataPoints" ? c.dataPoints - 1 : Math.abs(Math.round(f)), (e === Number.MIN_VALUE && t === 0 || !P.isNumber(e) && !P.isNumber(t) || e === Number.MIN_VALUE && t === -Number.MAX_VALUE) && (e = P.isNumber(i.min) ? i.min : 0, t = P.isNumber(i.max) ? i.max : e + f, c.allSeriesCollapsed = !1), e > t) { console.warn("axis.min cannot be greater than axis.max: swapping min and max"); var x = t; t = e, e = x } else e === t && (e = e === 0 ? 0 : e - 1, t = t === 0 ? 2 : t + 1); var b = []; f < 1 && (f = 1); var v = f, y = Math.abs(t - e); !s && e > 0 && e / y < .15 && (e = 0, s = !0), !r && t < 0 && -t / y < .15 && (t = 0, r = !0); var w = (y = Math.abs(t - e)) / v, l = w, u = Math.floor(Math.log10(l)), m = Math.pow(10, u), A = Math.ceil(l / m); if (w = l = (A = c.niceScaleAllowedMagMsd[c.yValueDecimal === 0 ? 0 : 1][A]) * m, c.isBarHorizontal && i.stepSize && i.type !== "datetime" ? (w = i.stepSize, d = !0) : d && (w = i.stepSize), d && i.forceNiceScale) { var k = Math.floor(Math.log10(w)); w *= Math.pow(10, u - k) } if (s && r) { var S = y / v; if (g) if (d) if (P.mod(y, w) != 0) { var L = P.getGCD(w, S); w = S / L < 10 ? L : S } else P.mod(w, S) == 0 ? w = S : (S = w, g = !1); else w = S; else if (d) P.mod(y, w) == 0 ? S = w : w = S; else if (P.mod(y, w) == 0) S = w; else { S = y / (v = Math.ceil(y / w)); var C = P.getGCD(y, w); y / C < a && (S = C), w = S } v = Math.round(y / w) } else { if (s || r) { if (r) if (g) e = t - w * v; else { var I = e; e = w * Math.floor(e / w), Math.abs(t - e) / P.getGCD(y, w) > a && (e = t - w * f, e += w * Math.floor((I - e) / w)) } else if (s) if (g) t = e + w * v; else { var z = t; t = w * Math.ceil(t / w), Math.abs(t - e) / P.getGCD(y, w) > a && (t = e + w * f, t += w * Math.ceil((z - t) / w)) } } else if (c.isMultipleYAxis && g) { var M = w * Math.floor(e / w), T = M + w * v; T < t && (w *= 2), T = t, t = (e = M) + w * v, y = Math.abs(t - e), e > 0 && e < Math.abs(T - t) && (e = 0, t = w * v), t < 0 && -t < Math.abs(M - e) && (t = 0, e = -w * v) } else e = w * Math.floor(e / w), t = w * Math.ceil(t / w); y = Math.abs(t - e), w = P.getGCD(y, w), v = Math.round(y / w) } if (g || s || r || (v = Math.ceil((y - o) / (w + o))) > 16 && P.getPrimeFactors(v).length < 2 && v++, !g && i.forceNiceScale && c.yValueDecimal === 0 && v > y && (v = y, w = Math.round(y / v)), v > a && (!g && !d || i.forceNiceScale)) { var E = P.getPrimeFactors(v), O = E.length - 1, D = v; e: for (var H = 0; H < O; H++)for (var W = 0; W <= O - H; W++) { for (var N = Math.min(W + H, O), B = D, q = 1, Z = W; Z <= N; Z++)q *= E[Z]; if ((B /= q) < a) { D = B; break e } } w = D === v ? y : y / D, v = Math.round(y / w) } c.isMultipleYAxis && c.multiAxisTickAmount == 0 && c.ignoreYAxisIndexes.indexOf(n) < 0 && (c.multiAxisTickAmount = v); var j = e - w, se = w * o; do j += w, b.push(P.stripNumber(j, 7)); while (t - j > se); return { result: b, niceMin: b[0], niceMax: b[b.length - 1] } } }, { key: "linearScale", value: function (e, t) { var i = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 10, a = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : 0, s = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : void 0, r = Math.abs(t - e), n = []; if (e === t) return { result: n = [e], niceMin: n[0], niceMax: n[n.length - 1] }; (i = this._adjustTicksForSmallRange(i, a, r)) === "dataPoints" && (i = this.w.globals.dataPoints - 1), s || (s = r / i), s = Math.round(10 * (s + Number.EPSILON)) / 10, i === Number.MAX_VALUE && (i = 5, s = 1); for (var o = e; i >= 0;)n.push(o), o = P.preciseAddition(o, s), i -= 1; return { result: n, niceMin: n[0], niceMax: n[n.length - 1] } } }, { key: "logarithmicScaleNice", value: function (e, t, i) { t <= 0 && (t = Math.max(e, i)), e <= 0 && (e = Math.min(t, i)); for (var a = [], s = Math.ceil(Math.log(t) / Math.log(i) + 1), r = Math.floor(Math.log(e) / Math.log(i)); r < s; r++)a.push(Math.pow(i, r)); return { result: a, niceMin: a[0], niceMax: a[a.length - 1] } } }, { key: "logarithmicScale", value: function (e, t, i) { t <= 0 && (t = Math.max(e, i)), e <= 0 && (e = Math.min(t, i)); for (var a = [], s = Math.log(t) / Math.log(i), r = Math.log(e) / Math.log(i), n = s - r, o = Math.round(n), h = n / o, c = 0, d = r; c < o; c++, d += h)a.push(Math.pow(i, d)); return a.push(Math.pow(i, s)), { result: a, niceMin: e, niceMax: t } } }, { key: "_adjustTicksForSmallRange", value: function (e, t, i) { var a = e; if (t !== void 0 && this.w.config.yaxis[t].labels.formatter && this.w.config.yaxis[t].tickAmount === void 0) { var s = Number(this.w.config.yaxis[t].labels.formatter(1)); P.isNumber(s) && this.w.globals.yValueDecimal === 0 && (a = Math.ceil(i)) } return a < e ? a : e } }, { key: "setYScaleForIndex", value: function (e, t, i) { var a = this.w.globals, s = this.w.config, r = a.isBarHorizontal ? s.xaxis : s.yaxis[e]; a.yAxisScale[e] === void 0 && (a.yAxisScale[e] = []); var n = Math.abs(i - t); r.logarithmic && n <= 5 && (a.invalidLogScale = !0), r.logarithmic && n > 5 ? (a.allSeriesCollapsed = !1, a.yAxisScale[e] = r.forceNiceScale ? this.logarithmicScaleNice(t, i, r.logBase) : this.logarithmicScale(t, i, r.logBase)) : i !== -Number.MAX_VALUE && P.isNumber(i) && t !== Number.MAX_VALUE && P.isNumber(t) ? (a.allSeriesCollapsed = !1, a.yAxisScale[e] = this.niceScale(t, i, e)) : a.yAxisScale[e] = this.niceScale(Number.MIN_VALUE, 0, e) } }, { key: "setXScale", value: function (e, t) { var i = this.w, a = i.globals, s = Math.abs(t - e); if (t !== -Number.MAX_VALUE && P.isNumber(t)) { var r = a.xTickAmount + 1; s < 10 && s > 1 && (r = s), a.xAxisScale = this.linearScale(e, t, r, 0, i.config.xaxis.stepSize) } else a.xAxisScale = this.linearScale(0, 10, 10); return a.xAxisScale } }, { key: "setSeriesYAxisMappings", value: function () { var e = this.w.globals, t = this.w.config, i = [], a = [], s = [], r = e.series.length > t.yaxis.length || t.yaxis.some(function (d) { return Array.isArray(d.seriesName) }); t.series.forEach(function (d, g) { s.push(g), a.push(null) }), t.yaxis.forEach(function (d, g) { i[g] = [] }); var n = []; t.yaxis.forEach(function (d, g) { var f = !1; if (d.seriesName) { var x = []; Array.isArray(d.seriesName) ? x = d.seriesName : x.push(d.seriesName), x.forEach(function (b) { t.series.forEach(function (v, y) { if (v.name === b) { var w = y; g === y || r ? !r || s.indexOf(y) > -1 ? i[g].push([g, y]) : console.warn("Series '" + v.name + "' referenced more than once in what looks like the new style. That is, when using either seriesName: [], or when there are more series than yaxes.") : (i[y].push([y, g]), w = g), f = !0, (w = s.indexOf(w)) !== -1 && s.splice(w, 1) } }) }) } f || n.push(g) }), i = i.map(function (d, g) { var f = []; return d.forEach(function (x) { a[x[1]] = x[0], f.push(x[1]) }), f }); for (var o = t.yaxis.length - 1, h = 0; h < n.length && (o = n[h], i[o] = [], s); h++) { var c = s[0]; s.shift(), i[o].push(c), a[c] = o } s.forEach(function (d) { i[o].push(d), a[d] = o }), e.seriesYAxisMap = i.map(function (d) { return d }), e.seriesYAxisReverseMap = a.map(function (d) { return d }) } }, { key: "scaleMultipleYAxes", value: function () { var e = this, t = this.w.config, i = this.w.globals; this.setSeriesYAxisMappings(); var a = i.seriesYAxisMap, s = i.minYArr, r = i.maxYArr; i.allSeriesCollapsed = !0, i.barGroups = [], a.forEach(function (n, o) { var h = []; n.forEach(function (c) { var d = t.series[c].group; h.indexOf(d) < 0 && h.push(d) }), n.length > 0 ? function () { var c, d, g = Number.MAX_VALUE, f = -Number.MAX_VALUE, x = g, b = f; if (t.chart.stacked) (function () { var w = i.seriesX[n[0]], l = [], u = [], m = []; h.forEach(function () { l.push(w.map(function () { return Number.MIN_VALUE })), u.push(w.map(function () { return Number.MIN_VALUE })), m.push(w.map(function () { return Number.MIN_VALUE })) }); for (var A = function (S) { !c && t.series[n[S]].type && (c = t.series[n[S]].type); var L = n[S]; d = t.series[L].group ? t.series[L].group : "axis-".concat(o), !(i.collapsedSeriesIndices.indexOf(L) < 0 && i.ancillaryCollapsedSeriesIndices.indexOf(L) < 0) || (i.allSeriesCollapsed = !1, h.forEach(function (C, I) { if (t.series[L].group === C) for (var z = 0; z < i.series[L].length; z++) { var M = i.series[L][z]; M >= 0 ? u[I][z] += M : m[I][z] += M, l[I][z] += M, x = Math.min(x, M), b = Math.max(b, M) } })), c !== "bar" && c !== "column" || i.barGroups.push(d) }, k = 0; k < n.length; k++)A(k); c || (c = t.chart.type), c === "bar" || c === "column" ? h.forEach(function (S, L) { g = Math.min(g, Math.min.apply(null, m[L])), f = Math.max(f, Math.max.apply(null, u[L])) }) : (h.forEach(function (S, L) { x = Math.min(x, Math.min.apply(null, l[L])), b = Math.max(b, Math.max.apply(null, l[L])) }), g = x, f = b), g === Number.MIN_VALUE && f === Number.MIN_VALUE && (f = -Number.MAX_VALUE) })(); else for (var v = 0; v < n.length; v++) { var y = n[v]; g = Math.min(g, s[y]), f = Math.max(f, r[y]), !(i.collapsedSeriesIndices.indexOf(y) < 0 && i.ancillaryCollapsedSeriesIndices.indexOf(y) < 0) || (i.allSeriesCollapsed = !1) } t.yaxis[o].min !== void 0 && (g = typeof t.yaxis[o].min == "function" ? t.yaxis[o].min(g) : t.yaxis[o].min), t.yaxis[o].max !== void 0 && (f = typeof t.yaxis[o].max == "function" ? t.yaxis[o].max(f) : t.yaxis[o].max), i.barGroups = i.barGroups.filter(function (w, l, u) { return u.indexOf(w) === l }), e.setYScaleForIndex(o, g, f), n.forEach(function (w) { s[w] = i.yAxisScale[o].niceMin, r[w] = i.yAxisScale[o].niceMax }) }() : e.setYScaleForIndex(o, 0, -Number.MAX_VALUE) }) } }]), p }(), rt = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w, this.scales = new Ot(e) } return R(p, [{ key: "init", value: function () { this.setYRange(), this.setXRange(), this.setZRange() } }, { key: "getMinYMaxY", value: function (e) { var t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : Number.MAX_VALUE, i = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : -Number.MAX_VALUE, a = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : null, s = this.w.config, r = this.w.globals, n = -Number.MAX_VALUE, o = Number.MIN_VALUE; a === null && (a = e + 1); var h = r.series, c = h, d = h; s.chart.type === "candlestick" ? (c = r.seriesCandleL, d = r.seriesCandleH) : s.chart.type === "boxPlot" ? (c = r.seriesCandleO, d = r.seriesCandleC) : r.isRangeData && (c = r.seriesRangeStart, d = r.seriesRangeEnd); var g = !1; if (r.seriesX.length >= a) { var f, x = (f = r.brushSource) === null || f === void 0 ? void 0 : f.w.config.chart.brush; (s.chart.zoom.enabled && s.chart.zoom.autoScaleYaxis || x != null && x.enabled && x != null && x.autoScaleYaxis) && (g = !0) } for (var b = e; b < a; b++) { r.dataPoints = Math.max(r.dataPoints, h[b].length); var v = s.series[b].type; r.categoryLabels.length && (r.dataPoints = r.categoryLabels.filter(function (m) { return m !== void 0 }).length), r.labels.length && s.xaxis.type !== "datetime" && r.series.reduce(function (m, A) { return m + A.length }, 0) !== 0 && (r.dataPoints = Math.max(r.dataPoints, r.labels.length)); var y = 0, w = h[b].length - 1; if (g) { if (s.xaxis.min) for (; y < w && r.seriesX[b][y] < s.xaxis.min; y++); if (s.xaxis.max) for (; w > y && r.seriesX[b][w] > s.xaxis.max; w--); } for (var l = y; l <= w && l < r.series[b].length; l++) { var u = h[b][l]; if (u !== null && P.isNumber(u)) { switch (d[b][l] !== void 0 && (n = Math.max(n, d[b][l]), t = Math.min(t, d[b][l])), c[b][l] !== void 0 && (t = Math.min(t, c[b][l]), i = Math.max(i, c[b][l])), v) { case "candlestick": r.seriesCandleC[b][l] !== void 0 && (n = Math.max(n, r.seriesCandleH[b][l]), t = Math.min(t, r.seriesCandleL[b][l])); break; case "boxPlot": r.seriesCandleC[b][l] !== void 0 && (n = Math.max(n, r.seriesCandleC[b][l]), t = Math.min(t, r.seriesCandleO[b][l])) }v && v !== "candlestick" && v !== "boxPlot" && v !== "rangeArea" && v !== "rangeBar" && (n = Math.max(n, r.series[b][l]), t = Math.min(t, r.series[b][l])), i = n, r.seriesGoals[b] && r.seriesGoals[b][l] && Array.isArray(r.seriesGoals[b][l]) && r.seriesGoals[b][l].forEach(function (m) { o !== Number.MIN_VALUE && (o = Math.min(o, m.value), t = o), n = Math.max(n, m.value), i = n }), P.isFloat(u) && (u = P.noExponents(u), r.yValueDecimal = Math.max(r.yValueDecimal, u.toString().split(".")[1].length)), o > c[b][l] && c[b][l] < 0 && (o = c[b][l]) } else r.hasNullValues = !0 } v !== "bar" && v !== "column" || (o < 0 && n < 0 && (n = 0, i = Math.max(i, 0)), o === Number.MIN_VALUE && (o = 0, t = Math.min(t, 0))) } return s.chart.type === "rangeBar" && r.seriesRangeStart.length && r.isBarHorizontal && (o = t), s.chart.type === "bar" && (o < 0 && n < 0 && (n = 0), o === Number.MIN_VALUE && (o = 0)), { minY: o, maxY: n, lowestY: t, highestY: i } } }, { key: "setYRange", value: function () { var e = this.w.globals, t = this.w.config; e.maxY = -Number.MAX_VALUE, e.minY = Number.MIN_VALUE; var i, a = Number.MAX_VALUE; if (e.isMultipleYAxis) { a = Number.MAX_VALUE; for (var s = 0; s < e.series.length; s++)i = this.getMinYMaxY(s), e.minYArr[s] = i.lowestY, e.maxYArr[s] = i.highestY, a = Math.min(a, i.lowestY) } return i = this.getMinYMaxY(0, a, null, e.series.length), t.chart.type === "bar" ? (e.minY = i.minY, e.maxY = i.maxY) : (e.minY = i.lowestY, e.maxY = i.highestY), a = i.lowestY, t.chart.stacked && this._setStackedMinMax(), t.chart.type === "line" || t.chart.type === "area" || t.chart.type === "scatter" || t.chart.type === "candlestick" || t.chart.type === "boxPlot" || t.chart.type === "rangeBar" && !e.isBarHorizontal ? e.minY === Number.MIN_VALUE && a !== -Number.MAX_VALUE && a !== e.maxY && (e.minY = a) : e.minY = i.minY, t.yaxis.forEach(function (r, n) { r.max !== void 0 && (typeof r.max == "number" ? e.maxYArr[n] = r.max : typeof r.max == "function" && (e.maxYArr[n] = r.max(e.isMultipleYAxis ? e.maxYArr[n] : e.maxY)), e.maxY = e.maxYArr[n]), r.min !== void 0 && (typeof r.min == "number" ? e.minYArr[n] = r.min : typeof r.min == "function" && (e.minYArr[n] = r.min(e.isMultipleYAxis ? e.minYArr[n] === Number.MIN_VALUE ? 0 : e.minYArr[n] : e.minY)), e.minY = e.minYArr[n]) }), e.isBarHorizontal && ["min", "max"].forEach(function (r) { t.xaxis[r] !== void 0 && typeof t.xaxis[r] == "number" && (r === "min" ? e.minY = t.xaxis[r] : e.maxY = t.xaxis[r]) }), e.isMultipleYAxis ? (this.scales.scaleMultipleYAxes(), e.minY = a) : (this.scales.setYScaleForIndex(0, e.minY, e.maxY), e.minY = e.yAxisScale[0].niceMin, e.maxY = e.yAxisScale[0].niceMax, e.minYArr[0] = e.minY, e.maxYArr[0] = e.maxY), e.barGroups = [], e.lineGroups = [], e.areaGroups = [], t.series.forEach(function (r) { switch (r.type || t.chart.type) { case "bar": case "column": e.barGroups.push(r.group); break; case "line": e.lineGroups.push(r.group); break; case "area": e.areaGroups.push(r.group) } }), e.barGroups = e.barGroups.filter(function (r, n, o) { return o.indexOf(r) === n }), e.lineGroups = e.lineGroups.filter(function (r, n, o) { return o.indexOf(r) === n }), e.areaGroups = e.areaGroups.filter(function (r, n, o) { return o.indexOf(r) === n }), { minY: e.minY, maxY: e.maxY, minYArr: e.minYArr, maxYArr: e.maxYArr, yAxisScale: e.yAxisScale } } }, { key: "setXRange", value: function () { var e = this.w.globals, t = this.w.config, i = t.xaxis.type === "numeric" || t.xaxis.type === "datetime" || t.xaxis.type === "category" && !e.noLabelsProvided || e.noLabelsProvided || e.isXNumeric; if (e.isXNumeric && function () { for (var o = 0; o < e.series.length; o++)if (e.labels[o]) for (var h = 0; h < e.labels[o].length; h++)e.labels[o][h] !== null && P.isNumber(e.labels[o][h]) && (e.maxX = Math.max(e.maxX, e.labels[o][h]), e.initialMaxX = Math.max(e.maxX, e.labels[o][h]), e.minX = Math.min(e.minX, e.labels[o][h]), e.initialMinX = Math.min(e.minX, e.labels[o][h])) }(), e.noLabelsProvided && t.xaxis.categories.length === 0 && (e.maxX = e.labels[e.labels.length - 1], e.initialMaxX = e.labels[e.labels.length - 1], e.minX = 1, e.initialMinX = 1), e.isXNumeric || e.noLabelsProvided || e.dataFormatXNumeric) { var a = 10; if (t.xaxis.tickAmount === void 0) a = Math.round(e.svgWidth / 150), t.xaxis.type === "numeric" && e.dataPoints < 30 && (a = e.dataPoints - 1), a > e.dataPoints && e.dataPoints !== 0 && (a = e.dataPoints - 1); else if (t.xaxis.tickAmount === "dataPoints") { if (e.series.length > 1 && (a = e.series[e.maxValsInArrayIndex].length - 1), e.isXNumeric) { var s = e.maxX - e.minX; s < 30 && (a = s - 1) } } else a = t.xaxis.tickAmount; if (e.xTickAmount = a, t.xaxis.max !== void 0 && typeof t.xaxis.max == "number" && (e.maxX = t.xaxis.max), t.xaxis.min !== void 0 && typeof t.xaxis.min == "number" && (e.minX = t.xaxis.min), t.xaxis.range !== void 0 && (e.minX = e.maxX - t.xaxis.range), e.minX !== Number.MAX_VALUE && e.maxX !== -Number.MAX_VALUE) if (t.xaxis.convertedCatToNumeric && !e.dataFormatXNumeric) { for (var r = [], n = e.minX - 1; n < e.maxX; n++)r.push(n + 1); e.xAxisScale = { result: r, niceMin: r[0], niceMax: r[r.length - 1] } } else e.xAxisScale = this.scales.setXScale(e.minX, e.maxX); else e.xAxisScale = this.scales.linearScale(0, a, a, 0, t.xaxis.stepSize), e.noLabelsProvided && e.labels.length > 0 && (e.xAxisScale = this.scales.linearScale(1, e.labels.length, a - 1, 0, t.xaxis.stepSize), e.seriesX = e.labels.slice()); i && (e.labels = e.xAxisScale.result.slice()) } return e.isBarHorizontal && e.labels.length && (e.xTickAmount = e.labels.length), this._handleSingleDataPoint(), this._getMinXDiff(), { minX: e.minX, maxX: e.maxX } } }, { key: "setZRange", value: function () { var e = this.w.globals; if (e.isDataXYZ) { for (var t = 0; t < e.series.length; t++)if (e.seriesZ[t] !== void 0) for (var i = 0; i < e.seriesZ[t].length; i++)e.seriesZ[t][i] !== null && P.isNumber(e.seriesZ[t][i]) && (e.maxZ = Math.max(e.maxZ, e.seriesZ[t][i]), e.minZ = Math.min(e.minZ, e.seriesZ[t][i])) } } }, { key: "_handleSingleDataPoint", value: function () { var e = this.w.globals, t = this.w.config; if (e.minX === e.maxX) { var i = new K(this.ctx); if (t.xaxis.type === "datetime") { var a = i.getDate(e.minX); t.xaxis.labels.datetimeUTC ? a.setUTCDate(a.getUTCDate() - 2) : a.setDate(a.getDate() - 2), e.minX = new Date(a).getTime(); var s = i.getDate(e.maxX); t.xaxis.labels.datetimeUTC ? s.setUTCDate(s.getUTCDate() + 2) : s.setDate(s.getDate() + 2), e.maxX = new Date(s).getTime() } else (t.xaxis.type === "numeric" || t.xaxis.type === "category" && !e.noLabelsProvided) && (e.minX = e.minX - 2, e.initialMinX = e.minX, e.maxX = e.maxX + 2, e.initialMaxX = e.maxX) } } }, { key: "_getMinXDiff", value: function () { var e = this.w.globals; e.isXNumeric && e.seriesX.forEach(function (t, i) { t.length === 1 && t.push(e.seriesX[e.maxValsInArrayIndex][e.seriesX[e.maxValsInArrayIndex].length - 1]); var a = t.slice(); a.sort(function (s, r) { return s - r }), a.forEach(function (s, r) { if (r > 0) { var n = s - a[r - 1]; n > 0 && (e.minXDiff = Math.min(n, e.minXDiff)) } }), e.dataPoints !== 1 && e.minXDiff !== Number.MAX_VALUE || (e.minXDiff = .5) }) } }, { key: "_setStackedMinMax", value: function () { var e = this, t = this.w.globals; if (t.series.length) { var i = t.seriesGroups; i.length || (i = [this.w.globals.seriesNames.map(function (r) { return r })]); var a = {}, s = {}; i.forEach(function (r) { a[r] = [], s[r] = [], e.w.config.series.map(function (n, o) { return r.indexOf(t.seriesNames[o]) > -1 ? o : null }).filter(function (n) { return n !== null }).forEach(function (n) { for (var o = 0; o < t.series[t.maxValsInArrayIndex].length; o++) { var h, c, d, g; a[r][o] === void 0 && (a[r][o] = 0, s[r][o] = 0), (e.w.config.chart.stacked && !t.comboCharts || e.w.config.chart.stacked && t.comboCharts && (!e.w.config.chart.stackOnlyBar || ((h = e.w.config.series) === null || h === void 0 || (c = h[n]) === null || c === void 0 ? void 0 : c.type) === "bar" || ((d = e.w.config.series) === null || d === void 0 || (g = d[n]) === null || g === void 0 ? void 0 : g.type) === "column")) && t.series[n][o] !== null && P.isNumber(t.series[n][o]) && (t.series[n][o] > 0 ? a[r][o] += parseFloat(t.series[n][o]) + 1e-4 : s[r][o] += parseFloat(t.series[n][o])) } }) }), Object.entries(a).forEach(function (r) { var n = It(r, 1)[0]; a[n].forEach(function (o, h) { t.maxY = Math.max(t.maxY, a[n][h]), t.minY = Math.min(t.minY, s[n][h]) }) }) } } }]), p }(), lt = function () { function p(e, t) { F(this, p), this.ctx = e, this.elgrid = t, this.w = e.w; var i = this.w; this.xaxisFontSize = i.config.xaxis.labels.style.fontSize, this.axisFontFamily = i.config.xaxis.labels.style.fontFamily, this.xaxisForeColors = i.config.xaxis.labels.style.colors, this.isCategoryBarHorizontal = i.config.chart.type === "bar" && i.config.plotOptions.bar.horizontal, this.xAxisoffX = 0, i.config.xaxis.position === "bottom" && (this.xAxisoffX = i.globals.gridHeight), this.drawnLabels = [], this.axesUtils = new ge(e) } return R(p, [{ key: "drawYaxis", value: function (e) { var t = this, i = this.w, a = new X(this.ctx), s = i.config.yaxis[e].labels.style, r = s.fontSize, n = s.fontFamily, o = s.fontWeight, h = a.group({ class: "apexcharts-yaxis", rel: e, transform: "translate(" + i.globals.translateYAxisX[e] + ", 0)" }); if (this.axesUtils.isYAxisHidden(e)) return h; var c = a.group({ class: "apexcharts-yaxis-texts-g" }); h.add(c); var d = i.globals.yAxisScale[e].result.length - 1, g = i.globals.gridHeight / d, f = i.globals.yLabelFormatters[e], x = i.globals.yAxisScale[e].result.slice(); x = this.axesUtils.checkForReversedLabels(e, x); var b = ""; if (i.config.yaxis[e].labels.show) { var v = i.globals.translateY + i.config.yaxis[e].labels.offsetY; i.globals.isBarHorizontal ? v = 0 : i.config.chart.type === "heatmap" && (v -= g / 2), v += parseInt(i.config.yaxis[e].labels.style.fontSize, 10) / 3; for (var y = function (L) { var C = x[L]; C = f(C, L, i); var I = i.config.yaxis[e].labels.padding; i.config.yaxis[e].opposite && i.config.yaxis.length !== 0 && (I *= -1); var z = "end"; i.config.yaxis[e].opposite && (z = "start"), i.config.yaxis[e].labels.align === "left" ? z = "start" : i.config.yaxis[e].labels.align === "center" ? z = "middle" : i.config.yaxis[e].labels.align === "right" && (z = "end"); var M = t.axesUtils.getYAxisForeColor(s.colors, e), T = P.listToArray(i.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxis[rel='".concat(e, "'] .apexcharts-yaxis-label tspan"))).map(function (W) { return W.textContent }), E = a.drawText({ x: I, y: v, text: T.indexOf(C) >= 0 ? "" : C, textAnchor: z, fontSize: r, fontFamily: n, fontWeight: o, maxWidth: i.config.yaxis[e].labels.maxWidth, foreColor: Array.isArray(M) ? M[L] : M, isPlainText: !1, cssClass: "apexcharts-yaxis-label " + s.cssClass }); L === d && (b = E), c.add(E); var O = document.createElementNS(i.globals.SVGNS, "title"); if (O.textContent = Array.isArray(C) ? C.join(" ") : C, E.node.appendChild(O), i.config.yaxis[e].labels.rotate !== 0) { var D = a.rotateAroundCenter(b.node), H = a.rotateAroundCenter(E.node); E.node.setAttribute("transform", "rotate(".concat(i.config.yaxis[e].labels.rotate, " ").concat(D.x, " ").concat(H.y, ")")) } v += g }, w = d; w >= 0; w--)y(w) } if (i.config.yaxis[e].title.text !== void 0) { var l = a.group({ class: "apexcharts-yaxis-title" }), u = 0; i.config.yaxis[e].opposite && (u = i.globals.translateYAxisX[e]); var m = a.drawText({ x: u, y: i.globals.gridHeight / 2 + i.globals.translateY + i.config.yaxis[e].title.offsetY, text: i.config.yaxis[e].title.text, textAnchor: "end", foreColor: i.config.yaxis[e].title.style.color, fontSize: i.config.yaxis[e].title.style.fontSize, fontWeight: i.config.yaxis[e].title.style.fontWeight, fontFamily: i.config.yaxis[e].title.style.fontFamily, cssClass: "apexcharts-yaxis-title-text " + i.config.yaxis[e].title.style.cssClass }); l.add(m), h.add(l) } var A = i.config.yaxis[e].axisBorder, k = 31 + A.offsetX; if (i.config.yaxis[e].opposite && (k = -31 - A.offsetX), A.show) { var S = a.drawLine(k, i.globals.translateY + A.offsetY - 2, k, i.globals.gridHeight + i.globals.translateY + A.offsetY + 2, A.color, 0, A.width); h.add(S) } return i.config.yaxis[e].axisTicks.show && this.axesUtils.drawYAxisTicks(k, d, A, i.config.yaxis[e].axisTicks, e, g, h), h } }, { key: "drawYaxisInversed", value: function (e) { var t = this.w, i = new X(this.ctx), a = i.group({ class: "apexcharts-xaxis apexcharts-yaxis-inversed" }), s = i.group({ class: "apexcharts-xaxis-texts-g", transform: "translate(".concat(t.globals.translateXAxisX, ", ").concat(t.globals.translateXAxisY, ")") }); a.add(s); var r = t.globals.yAxisScale[e].result.length - 1, n = t.globals.gridWidth / r + .1, o = n + t.config.xaxis.labels.offsetX, h = t.globals.xLabelFormatter, c = t.globals.yAxisScale[e].result.slice(), d = t.globals.timescaleLabels; d.length > 0 && (this.xaxisLabels = d.slice(), r = (c = d.slice()).length), c = this.axesUtils.checkForReversedLabels(e, c); var g = d.length; if (t.config.xaxis.labels.show) for (var f = g ? 0 : r; g ? f < g : f >= 0; g ? f++ : f--) { var x = c[f]; x = h(x, f, t); var b = t.globals.gridWidth + t.globals.padHorizontal - (o - n + t.config.xaxis.labels.offsetX); if (d.length) { var v = this.axesUtils.getLabel(c, d, b, f, this.drawnLabels, this.xaxisFontSize); b = v.x, x = v.text, this.drawnLabels.push(v.text), f === 0 && t.globals.skipFirstTimelinelabel && (x = ""), f === c.length - 1 && t.globals.skipLastTimelinelabel && (x = "") } var y = i.drawText({ x: b, y: this.xAxisoffX + t.config.xaxis.labels.offsetY + 30 - (t.config.xaxis.position === "top" ? t.globals.xAxisHeight + t.config.xaxis.axisTicks.height - 2 : 0), text: x, textAnchor: "middle", foreColor: Array.isArray(this.xaxisForeColors) ? this.xaxisForeColors[e] : this.xaxisForeColors, fontSize: this.xaxisFontSize, fontFamily: this.xaxisFontFamily, fontWeight: t.config.xaxis.labels.style.fontWeight, isPlainText: !1, cssClass: "apexcharts-xaxis-label " + t.config.xaxis.labels.style.cssClass }); s.add(y), y.tspan(x); var w = document.createElementNS(t.globals.SVGNS, "title"); w.textContent = x, y.node.appendChild(w), o += n } return this.inversedYAxisTitleText(a), this.inversedYAxisBorder(a), a } }, { key: "inversedYAxisBorder", value: function (e) { var t = this.w, i = new X(this.ctx), a = t.config.xaxis.axisBorder; if (a.show) { var s = 0; t.config.chart.type === "bar" && t.globals.isXNumeric && (s -= 15); var r = i.drawLine(t.globals.padHorizontal + s + a.offsetX, this.xAxisoffX, t.globals.gridWidth, this.xAxisoffX, a.color, 0, a.height); this.elgrid && this.elgrid.elGridBorders && t.config.grid.show ? this.elgrid.elGridBorders.add(r) : e.add(r) } } }, { key: "inversedYAxisTitleText", value: function (e) { var t = this.w, i = new X(this.ctx); if (t.config.xaxis.title.text !== void 0) { var a = i.group({ class: "apexcharts-xaxis-title apexcharts-yaxis-title-inversed" }), s = i.drawText({ x: t.globals.gridWidth / 2 + t.config.xaxis.title.offsetX, y: this.xAxisoffX + parseFloat(this.xaxisFontSize) + parseFloat(t.config.xaxis.title.style.fontSize) + t.config.xaxis.title.offsetY + 20, text: t.config.xaxis.title.text, textAnchor: "middle", fontSize: t.config.xaxis.title.style.fontSize, fontFamily: t.config.xaxis.title.style.fontFamily, fontWeight: t.config.xaxis.title.style.fontWeight, foreColor: t.config.xaxis.title.style.color, cssClass: "apexcharts-xaxis-title-text " + t.config.xaxis.title.style.cssClass }); a.add(s), e.add(a) } } }, { key: "yAxisTitleRotate", value: function (e, t) { var i = this.w, a = new X(this.ctx), s = { width: 0, height: 0 }, r = { width: 0, height: 0 }, n = i.globals.dom.baseEl.querySelector(" .apexcharts-yaxis[rel='".concat(e, "'] .apexcharts-yaxis-texts-g")); n !== null && (s = n.getBoundingClientRect()); var o = i.globals.dom.baseEl.querySelector(".apexcharts-yaxis[rel='".concat(e, "'] .apexcharts-yaxis-title text")); if (o !== null && (r = o.getBoundingClientRect()), o !== null) { var h = this.xPaddingForYAxisTitle(e, s, r, t); o.setAttribute("x", h.xPos - (t ? 10 : 0)) } if (o !== null) { var c = a.rotateAroundCenter(o); o.setAttribute("transform", "rotate(".concat(t ? -1 * i.config.yaxis[e].title.rotate : i.config.yaxis[e].title.rotate, " ").concat(c.x, " ").concat(c.y, ")")) } } }, { key: "xPaddingForYAxisTitle", value: function (e, t, i, a) { var s = this.w, r = 0, n = 0, o = 10; return s.config.yaxis[e].title.text === void 0 || e < 0 ? { xPos: n, padd: 0 } : (a ? (n = t.width + s.config.yaxis[e].title.offsetX + i.width / 2 + o / 2, (r += 1) === 0 && (n -= o / 2)) : (n = -1 * t.width + s.config.yaxis[e].title.offsetX + o / 2 + i.width / 2, s.globals.isBarHorizontal && (o = 25, n = -1 * t.width - s.config.yaxis[e].title.offsetX - o)), { xPos: n, padd: o }) } }, { key: "setYAxisXPosition", value: function (e, t) { var i = this.w, a = 0, s = 0, r = 18, n = 1; i.config.yaxis.length > 1 && (this.multipleYs = !0), i.config.yaxis.map(function (o, h) { var c = i.globals.ignoreYAxisIndexes.indexOf(h) > -1 || !o.show || o.floating || e[h].width === 0, d = e[h].width + t[h].width; o.opposite ? i.globals.isBarHorizontal ? (s = i.globals.gridWidth + i.globals.translateX - 1, i.globals.translateYAxisX[h] = s - o.labels.offsetX) : (s = i.globals.gridWidth + i.globals.translateX + n, c || (n = n + d + 20), i.globals.translateYAxisX[h] = s - o.labels.offsetX + 20) : (a = i.globals.translateX - r, c || (r = r + d + 20), i.globals.translateYAxisX[h] = a + o.labels.offsetX) }) } }, { key: "setYAxisTextAlignments", value: function () { var e = this.w, t = e.globals.dom.baseEl.getElementsByClassName("apexcharts-yaxis"); (t = P.listToArray(t)).forEach(function (i, a) { var s = e.config.yaxis[a]; if (s && !s.floating && s.labels.align !== void 0) { var r = e.globals.dom.baseEl.querySelector(".apexcharts-yaxis[rel='".concat(a, "'] .apexcharts-yaxis-texts-g")), n = e.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxis[rel='".concat(a, "'] .apexcharts-yaxis-label")); n = P.listToArray(n); var o = r.getBoundingClientRect(); s.labels.align === "left" ? (n.forEach(function (h, c) { h.setAttribute("text-anchor", "start") }), s.opposite || r.setAttribute("transform", "translate(-".concat(o.width, ", 0)"))) : s.labels.align === "center" ? (n.forEach(function (h, c) { h.setAttribute("text-anchor", "middle") }), r.setAttribute("transform", "translate(".concat(o.width / 2 * (s.opposite ? 1 : -1), ", 0)"))) : s.labels.align === "right" && (n.forEach(function (h, c) { h.setAttribute("text-anchor", "end") }), s.opposite && r.setAttribute("transform", "translate(".concat(o.width, ", 0)"))) } }) } }]), p }(), Oi = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w, this.documentEvent = P.bind(this.documentEvent, this) } return R(p, [{ key: "addEventListener", value: function (e, t) { var i = this.w; i.globals.events.hasOwnProperty(e) ? i.globals.events[e].push(t) : i.globals.events[e] = [t] } }, { key: "removeEventListener", value: function (e, t) { var i = this.w; if (i.globals.events.hasOwnProperty(e)) { var a = i.globals.events[e].indexOf(t); a !== -1 && i.globals.events[e].splice(a, 1) } } }, { key: "fireEvent", value: function (e, t) { var i = this.w; if (i.globals.events.hasOwnProperty(e)) { t && t.length || (t = []); for (var a = i.globals.events[e], s = a.length, r = 0; r < s; r++)a[r].apply(null, t) } } }, { key: "setupEventHandlers", value: function () { var e = this, t = this.w, i = this.ctx, a = t.globals.dom.baseEl.querySelector(t.globals.chartClass); this.ctx.eventList.forEach(function (s) { a.addEventListener(s, function (r) { var n = Object.assign({}, t, { seriesIndex: t.globals.axisCharts ? t.globals.capturedSeriesIndex : 0, dataPointIndex: t.globals.capturedDataPointIndex }); r.type === "mousemove" || r.type === "touchmove" ? typeof t.config.chart.events.mouseMove == "function" && t.config.chart.events.mouseMove(r, i, n) : r.type === "mouseleave" || r.type === "touchleave" ? typeof t.config.chart.events.mouseLeave == "function" && t.config.chart.events.mouseLeave(r, i, n) : (r.type === "mouseup" && r.which === 1 || r.type === "touchend") && (typeof t.config.chart.events.click == "function" && t.config.chart.events.click(r, i, n), i.ctx.events.fireEvent("click", [r, i, n])) }, { capture: !1, passive: !0 }) }), this.ctx.eventList.forEach(function (s) { t.globals.dom.baseEl.addEventListener(s, e.documentEvent, { passive: !0 }) }), this.ctx.core.setupBrushHandler() } }, { key: "documentEvent", value: function (e) { var t = this.w, i = e.target.className; if (e.type === "click") { var a = t.globals.dom.baseEl.querySelector(".apexcharts-menu"); a && a.classList.contains("apexcharts-menu-open") && i !== "apexcharts-menu-icon" && a.classList.remove("apexcharts-menu-open") } t.globals.clientX = e.type === "touchmove" ? e.touches[0].clientX : e.clientX, t.globals.clientY = e.type === "touchmove" ? e.touches[0].clientY : e.clientY } }]), p }(), Di = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w } return R(p, [{ key: "setCurrentLocaleValues", value: function (e) { var t = this.w.config.chart.locales; window.Apex.chart && window.Apex.chart.locales && window.Apex.chart.locales.length > 0 && (t = this.w.config.chart.locales.concat(window.Apex.chart.locales)); var i = t.filter(function (s) { return s.name === e })[0]; if (!i) throw new Error("Wrong locale name provided. Please make sure you set the correct locale name in options"); var a = P.extend(Xt, i); this.w.globals.locale = a.options } }]), p }(), Hi = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w } return R(p, [{ key: "drawAxis", value: function (e, t) { var i, a, s = this, r = this.w.globals, n = this.w.config, o = new Me(this.ctx, t), h = new lt(this.ctx, t); r.axisCharts && e !== "radar" && (r.isBarHorizontal ? (a = h.drawYaxisInversed(0), i = o.drawXaxisInversed(0), r.dom.elGraphical.add(i), r.dom.elGraphical.add(a)) : (i = o.drawXaxis(), r.dom.elGraphical.add(i), n.yaxis.map(function (c, d) { if (r.ignoreYAxisIndexes.indexOf(d) === -1 && (a = h.drawYaxis(d), r.dom.Paper.add(a), s.w.config.grid.position === "back")) { var g = r.dom.Paper.children()[1]; g.remove(), r.dom.Paper.add(g) } }))) } }]), p }(), nt = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w } return R(p, [{ key: "drawXCrosshairs", value: function () { var e = this.w, t = new X(this.ctx), i = new ie(this.ctx), a = e.config.xaxis.crosshairs.fill.gradient, s = e.config.xaxis.crosshairs.dropShadow, r = e.config.xaxis.crosshairs.fill.type, n = a.colorFrom, o = a.colorTo, h = a.opacityFrom, c = a.opacityTo, d = a.stops, g = s.enabled, f = s.left, x = s.top, b = s.blur, v = s.color, y = s.opacity, w = e.config.xaxis.crosshairs.fill.color; if (e.config.xaxis.crosshairs.show) { r === "gradient" && (w = t.drawGradient("vertical", n, o, h, c, null, d, null)); var l = t.drawRect(); e.config.xaxis.crosshairs.width === 1 && (l = t.drawLine()); var u = e.globals.gridHeight; (!P.isNumber(u) || u < 0) && (u = 0); var m = e.config.xaxis.crosshairs.width; (!P.isNumber(m) || m < 0) && (m = 0), l.attr({ class: "apexcharts-xcrosshairs", x: 0, y: 0, y2: u, width: m, height: u, fill: w, filter: "none", "fill-opacity": e.config.xaxis.crosshairs.opacity, stroke: e.config.xaxis.crosshairs.stroke.color, "stroke-width": e.config.xaxis.crosshairs.stroke.width, "stroke-dasharray": e.config.xaxis.crosshairs.stroke.dashArray }), g && (l = i.dropShadow(l, { left: f, top: x, blur: b, color: v, opacity: y })), e.globals.dom.elGraphical.add(l) } } }, { key: "drawYCrosshairs", value: function () { var e = this.w, t = new X(this.ctx), i = e.config.yaxis[0].crosshairs, a = e.globals.barPadForNumericAxis; if (e.config.yaxis[0].crosshairs.show) { var s = t.drawLine(-a, 0, e.globals.gridWidth + a, 0, i.stroke.color, i.stroke.dashArray, i.stroke.width); s.attr({ class: "apexcharts-ycrosshairs" }), e.globals.dom.elGraphical.add(s) } var r = t.drawLine(-a, 0, e.globals.gridWidth + a, 0, i.stroke.color, 0, 0); r.attr({ class: "apexcharts-ycrosshairs-hidden" }), e.globals.dom.elGraphical.add(r) } }]), p }(), Ni = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w } return R(p, [{ key: "checkResponsiveConfig", value: function (e) { var t = this, i = this.w, a = i.config; if (a.responsive.length !== 0) { var s = a.responsive.slice(); s.sort(function (h, c) { return h.breakpoint > c.breakpoint ? 1 : c.breakpoint > h.breakpoint ? -1 : 0 }).reverse(); var r = new Pe({}), n = function () { var h = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, c = s[0].breakpoint, d = window.innerWidth > 0 ? window.innerWidth : screen.width; if (d > c) { var g = P.clone(i.globals.initialConfig); g.series = P.clone(i.config.series); var f = $.extendArrayProps(r, g, i); h = P.extend(f, h), h = P.extend(i.config, h), t.overrideResponsiveOptions(h) } else for (var x = 0; x < s.length; x++)d < s[x].breakpoint && (h = $.extendArrayProps(r, s[x].options, i), h = P.extend(i.config, h), t.overrideResponsiveOptions(h)) }; if (e) { var o = $.extendArrayProps(r, e, i); o = P.extend(i.config, o), n(o = P.extend(o, e)) } else n({}) } } }, { key: "overrideResponsiveOptions", value: function (e) { var t = new Pe(e).init({ responsiveOverride: !0 }); this.w.config = t } }]), p }(), Wi = function () { function p(e) { F(this, p), this.ctx = e, this.colors = [], this.w = e.w; var t = this.w; this.isColorFn = !1, this.isHeatmapDistributed = t.config.chart.type === "treemap" && t.config.plotOptions.treemap.distributed || t.config.chart.type === "heatmap" && t.config.plotOptions.heatmap.distributed, this.isBarDistributed = t.config.plotOptions.bar.distributed && (t.config.chart.type === "bar" || t.config.chart.type === "rangeBar") } return R(p, [{ key: "init", value: function () { this.setDefaultColors() } }, { key: "setDefaultColors", value: function () { var e, t = this, i = this.w, a = new P; if (i.globals.dom.elWrap.classList.add("apexcharts-theme-".concat(i.config.theme.mode)), i.config.colors === void 0 || ((e = i.config.colors) === null || e === void 0 ? void 0 : e.length) === 0 ? i.globals.colors = this.predefined() : (i.globals.colors = i.config.colors, Array.isArray(i.config.colors) && i.config.colors.length > 0 && typeof i.config.colors[0] == "function" && (i.globals.colors = i.config.series.map(function (x, b) { var v = i.config.colors[b]; return v || (v = i.config.colors[0]), typeof v == "function" ? (t.isColorFn = !0, v({ value: i.globals.axisCharts ? i.globals.series[b][0] ? i.globals.series[b][0] : 0 : i.globals.series[b], seriesIndex: b, dataPointIndex: b, w: i })) : v }))), i.globals.seriesColors.map(function (x, b) { x && (i.globals.colors[b] = x) }), i.config.theme.monochrome.enabled) { var s = [], r = i.globals.series.length; (this.isBarDistributed || this.isHeatmapDistributed) && (r = i.globals.series[0].length * i.globals.series.length); for (var n = i.config.theme.monochrome.color, o = 1 / (r / i.config.theme.monochrome.shadeIntensity), h = i.config.theme.monochrome.shadeTo, c = 0, d = 0; d < r; d++) { var g = void 0; h === "dark" ? (g = a.shadeColor(-1 * c, n), c += o) : (g = a.shadeColor(c, n), c += o), s.push(g) } i.globals.colors = s.slice() } var f = i.globals.colors.slice(); this.pushExtraColors(i.globals.colors), ["fill", "stroke"].forEach(function (x) { i.config[x].colors === void 0 ? i.globals[x].colors = t.isColorFn ? i.config.colors : f : i.globals[x].colors = i.config[x].colors.slice(), t.pushExtraColors(i.globals[x].colors) }), i.config.dataLabels.style.colors === void 0 ? i.globals.dataLabels.style.colors = f : i.globals.dataLabels.style.colors = i.config.dataLabels.style.colors.slice(), this.pushExtraColors(i.globals.dataLabels.style.colors, 50), i.config.plotOptions.radar.polygons.fill.colors === void 0 ? i.globals.radarPolygons.fill.colors = [i.config.theme.mode === "dark" ? "#424242" : "none"] : i.globals.radarPolygons.fill.colors = i.config.plotOptions.radar.polygons.fill.colors.slice(), this.pushExtraColors(i.globals.radarPolygons.fill.colors, 20), i.config.markers.colors === void 0 ? i.globals.markers.colors = f : i.globals.markers.colors = i.config.markers.colors.slice(), this.pushExtraColors(i.globals.markers.colors) } }, { key: "pushExtraColors", value: function (e, t) { var i = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : null, a = this.w, s = t || a.globals.series.length; if (i === null && (i = this.isBarDistributed || this.isHeatmapDistributed || a.config.chart.type === "heatmap" && a.config.plotOptions.heatmap.colorScale.inverse), i && a.globals.series.length && (s = a.globals.series[a.globals.maxValsInArrayIndex].length * a.globals.series.length), e.length < s) for (var r = s - e.length, n = 0; n < r; n++)e.push(e[n]) } }, { key: "updateThemeOptions", value: function (e) { e.chart = e.chart || {}, e.tooltip = e.tooltip || {}; var t = e.theme.mode, i = t === "dark" ? "palette4" : t === "light" ? "palette1" : e.theme.palette || "palette1", a = t === "dark" ? "#f6f7f8" : t === "light" ? "#373d3f" : e.chart.foreColor || "#373d3f"; return e.tooltip.theme = t || "light", e.chart.foreColor = a, e.theme.palette = i, e } }, { key: "predefined", value: function () { switch (this.w.config.theme.palette) { case "palette1": default: this.colors = ["#008FFB", "#00E396", "#FEB019", "#FF4560", "#775DD0"]; break; case "palette2": this.colors = ["#3f51b5", "#03a9f4", "#4caf50", "#f9ce1d", "#FF9800"]; break; case "palette3": this.colors = ["#33b2df", "#546E7A", "#d4526e", "#13d8aa", "#A5978B"]; break; case "palette4": this.colors = ["#4ecdc4", "#c7f464", "#81D4FA", "#fd6a6a", "#546E7A"]; break; case "palette5": this.colors = ["#2b908f", "#f9a3a4", "#90ee7e", "#fa4443", "#69d2e7"]; break; case "palette6": this.colors = ["#449DD1", "#F86624", "#EA3546", "#662E9B", "#C5D86D"]; break; case "palette7": this.colors = ["#D7263D", "#1B998B", "#2E294E", "#F46036", "#E2C044"]; break; case "palette8": this.colors = ["#662E9B", "#F86624", "#F9C80E", "#EA3546", "#43BCCD"]; break; case "palette9": this.colors = ["#5C4742", "#A5978B", "#8D5B4C", "#5A2A27", "#C4BBAF"]; break; case "palette10": this.colors = ["#A300D6", "#7D02EB", "#5653FE", "#2983FF", "#00B1F2"] }return this.colors } }]), p }(), Bi = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w } return R(p, [{ key: "draw", value: function () { this.drawTitleSubtitle("title"), this.drawTitleSubtitle("subtitle") } }, { key: "drawTitleSubtitle", value: function (e) { var t = this.w, i = e === "title" ? t.config.title : t.config.subtitle, a = t.globals.svgWidth / 2, s = i.offsetY, r = "middle"; if (i.align === "left" ? (a = 10, r = "start") : i.align === "right" && (a = t.globals.svgWidth - 10, r = "end"), a += i.offsetX, s = s + parseInt(i.style.fontSize, 10) + i.margin / 2, i.text !== void 0) { var n = new X(this.ctx).drawText({ x: a, y: s, text: i.text, textAnchor: r, fontSize: i.style.fontSize, fontFamily: i.style.fontFamily, fontWeight: i.style.fontWeight, foreColor: i.style.color, opacity: 1 }); n.node.setAttribute("class", "apexcharts-".concat(e, "-text")), t.globals.dom.Paper.add(n) } } }]), p }(), Gi = function () { function p(e) { F(this, p), this.w = e.w, this.dCtx = e } return R(p, [{ key: "getTitleSubtitleCoords", value: function (e) { var t = this.w, i = 0, a = 0, s = e === "title" ? t.config.title.floating : t.config.subtitle.floating, r = t.globals.dom.baseEl.querySelector(".apexcharts-".concat(e, "-text")); if (r !== null && !s) { var n = r.getBoundingClientRect(); i = n.width, a = t.globals.axisCharts ? n.height + 5 : n.height } return { width: i, height: a } } }, { key: "getLegendsRect", value: function () { var e = this.w, t = e.globals.dom.elLegendWrap; e.config.legend.height || e.config.legend.position !== "top" && e.config.legend.position !== "bottom" || (t.style.maxHeight = e.globals.svgHeight / 2 + "px"); var i = Object.assign({}, P.getBoundingClientRect(t)); return t !== null && !e.config.legend.floating && e.config.legend.show ? this.dCtx.lgRect = { x: i.x, y: i.y, height: i.height, width: i.height === 0 ? 0 : i.width } : this.dCtx.lgRect = { x: 0, y: 0, height: 0, width: 0 }, e.config.legend.position !== "left" && e.config.legend.position !== "right" || 1.5 * this.dCtx.lgRect.width > e.globals.svgWidth && (this.dCtx.lgRect.width = e.globals.svgWidth / 1.5), this.dCtx.lgRect } }, { key: "getDatalabelsRect", value: function () { var e = this, t = this.w, i = []; t.config.series.forEach(function (o, h) { o.data.forEach(function (c, d) { var g; g = t.globals.series[h][d], a = t.config.dataLabels.formatter(g, { ctx: e.dCtx.ctx, seriesIndex: h, dataPointIndex: d, w: t }), i.push(a) }) }); var a = P.getLargestStringFromArr(i), s = new X(this.dCtx.ctx), r = t.config.dataLabels.style, n = s.getTextRects(a, parseInt(r.fontSize), r.fontFamily); return { width: 1.05 * n.width, height: n.height } } }, { key: "getLargestStringFromMultiArr", value: function (e, t) { var i = e; if (this.w.globals.isMultiLineX) { var a = t.map(function (r, n) { return Array.isArray(r) ? r.length : 1 }), s = Math.max.apply(Math, te(a)); i = t[a.indexOf(s)] } return i } }]), p }(), Vi = function () { function p(e) { F(this, p), this.w = e.w, this.dCtx = e } return R(p, [{ key: "getxAxisLabelsCoords", value: function () { var e, t = this.w, i = t.globals.labels.slice(); if (t.config.xaxis.convertedCatToNumeric && i.length === 0 && (i = t.globals.categoryLabels), t.globals.timescaleLabels.length > 0) { var a = this.getxAxisTimeScaleLabelsCoords(); e = { width: a.width, height: a.height }, t.globals.rotateXLabels = !1 } else { this.dCtx.lgWidthForSideLegends = t.config.legend.position !== "left" && t.config.legend.position !== "right" || t.config.legend.floating ? 0 : this.dCtx.lgRect.width; var s = t.globals.xLabelFormatter, r = P.getLargestStringFromArr(i), n = this.dCtx.dimHelpers.getLargestStringFromMultiArr(r, i); t.globals.isBarHorizontal && (n = r = t.globals.yAxisScale[0].result.reduce(function (x, b) { return x.length > b.length ? x : b }, 0)); var o = new ze(this.dCtx.ctx), h = r; r = o.xLabelFormat(s, r, h, { i: void 0, dateFormatter: new K(this.dCtx.ctx).formatDate, w: t }), n = o.xLabelFormat(s, n, h, { i: void 0, dateFormatter: new K(this.dCtx.ctx).formatDate, w: t }), (t.config.xaxis.convertedCatToNumeric && r === void 0 || String(r).trim() === "") && (n = r = "1"); var c = new X(this.dCtx.ctx), d = c.getTextRects(r, t.config.xaxis.labels.style.fontSize), g = d; if (r !== n && (g = c.getTextRects(n, t.config.xaxis.labels.style.fontSize)), (e = { width: d.width >= g.width ? d.width : g.width, height: d.height >= g.height ? d.height : g.height }).width * i.length > t.globals.svgWidth - this.dCtx.lgWidthForSideLegends - this.dCtx.yAxisWidth - this.dCtx.gridPad.left - this.dCtx.gridPad.right && t.config.xaxis.labels.rotate !== 0 || t.config.xaxis.labels.rotateAlways) { if (!t.globals.isBarHorizontal) { t.globals.rotateXLabels = !0; var f = function (x) { return c.getTextRects(x, t.config.xaxis.labels.style.fontSize, t.config.xaxis.labels.style.fontFamily, "rotate(".concat(t.config.xaxis.labels.rotate, " 0 0)"), !1) }; d = f(r), r !== n && (g = f(n)), e.height = (d.height > g.height ? d.height : g.height) / 1.5, e.width = d.width > g.width ? d.width : g.width } } else t.globals.rotateXLabels = !1 } return t.config.xaxis.labels.show || (e = { width: 0, height: 0 }), { width: e.width, height: e.height } } }, { key: "getxAxisGroupLabelsCoords", value: function () { var e, t = this.w; if (!t.globals.hasXaxisGroups) return { width: 0, height: 0 }; var i, a = ((e = t.config.xaxis.group.style) === null || e === void 0 ? void 0 : e.fontSize) || t.config.xaxis.labels.style.fontSize, s = t.globals.groups.map(function (d) { return d.title }), r = P.getLargestStringFromArr(s), n = this.dCtx.dimHelpers.getLargestStringFromMultiArr(r, s), o = new X(this.dCtx.ctx), h = o.getTextRects(r, a), c = h; return r !== n && (c = o.getTextRects(n, a)), i = { width: h.width >= c.width ? h.width : c.width, height: h.height >= c.height ? h.height : c.height }, t.config.xaxis.labels.show || (i = { width: 0, height: 0 }), { width: i.width, height: i.height } } }, { key: "getxAxisTitleCoords", value: function () { var e = this.w, t = 0, i = 0; if (e.config.xaxis.title.text !== void 0) { var a = new X(this.dCtx.ctx).getTextRects(e.config.xaxis.title.text, e.config.xaxis.title.style.fontSize); t = a.width, i = a.height } return { width: t, height: i } } }, { key: "getxAxisTimeScaleLabelsCoords", value: function () { var e, t = this.w; this.dCtx.timescaleLabels = t.globals.timescaleLabels.slice(); var i = this.dCtx.timescaleLabels.map(function (s) { return s.value }), a = i.reduce(function (s, r) { return s === void 0 ? (console.error("You have possibly supplied invalid Date format. Please supply a valid JavaScript Date"), 0) : s.length > r.length ? s : r }, 0); return 1.05 * (e = new X(this.dCtx.ctx).getTextRects(a, t.config.xaxis.labels.style.fontSize)).width * i.length > t.globals.gridWidth && t.config.xaxis.labels.rotate !== 0 && (t.globals.overlappingXLabels = !0), e } }, { key: "additionalPaddingXLabels", value: function (e) { var t = this, i = this.w, a = i.globals, s = i.config, r = s.xaxis.type, n = e.width; a.skipLastTimelinelabel = !1, a.skipFirstTimelinelabel = !1; var o = i.config.yaxis[0].opposite && i.globals.isBarHorizontal, h = function (c, d) { s.yaxis.length > 1 && function (g) { return a.collapsedSeriesIndices.indexOf(g) !== -1 }(d) || function (g) { if (t.dCtx.timescaleLabels && t.dCtx.timescaleLabels.length) { var f = t.dCtx.timescaleLabels[0], x = t.dCtx.timescaleLabels[t.dCtx.timescaleLabels.length - 1].position + n / 1.75 - t.dCtx.yAxisWidthRight, b = f.position - n / 1.75 + t.dCtx.yAxisWidthLeft, v = i.config.legend.position === "right" && t.dCtx.lgRect.width > 0 ? t.dCtx.lgRect.width : 0; x > a.svgWidth - a.translateX - v && (a.skipLastTimelinelabel = !0), b < -(g.show && !g.floating || s.chart.type !== "bar" && s.chart.type !== "candlestick" && s.chart.type !== "rangeBar" && s.chart.type !== "boxPlot" ? 10 : n / 1.75) && (a.skipFirstTimelinelabel = !0) } else r === "datetime" ? t.dCtx.gridPad.right < n && !a.rotateXLabels && (a.skipLastTimelinelabel = !0) : r !== "datetime" && t.dCtx.gridPad.right < n / 2 - t.dCtx.yAxisWidthRight && !a.rotateXLabels && !i.config.xaxis.labels.trim && (t.dCtx.xPadRight = n / 2 + 1) }(c) }; s.yaxis.forEach(function (c, d) { o ? (t.dCtx.gridPad.left < n && (t.dCtx.xPadLeft = n / 2 + 1), t.dCtx.xPadRight = n / 2 + 1) : h(c, d) }) } }]), p }(), _i = function () { function p(e) { F(this, p), this.w = e.w, this.dCtx = e } return R(p, [{ key: "getyAxisLabelsCoords", value: function () { var e = this, t = this.w, i = [], a = 10, s = new ge(this.dCtx.ctx); return t.config.yaxis.map(function (r, n) { var o = { seriesIndex: n, dataPointIndex: -1, w: t }, h = t.globals.yAxisScale[n], c = 0; if (!s.isYAxisHidden(n) && r.labels.show && r.labels.minWidth !== void 0 && (c = r.labels.minWidth), !s.isYAxisHidden(n) && r.labels.show && h.result.length) { var d = t.globals.yLabelFormatters[n], g = h.niceMin === Number.MIN_VALUE ? 0 : h.niceMin, f = h.result.reduce(function (u, m) { var A, k; return ((A = String(d(u, o))) === null || A === void 0 ? void 0 : A.length) > ((k = String(d(m, o))) === null || k === void 0 ? void 0 : k.length) ? u : m }, g), x = f = d(f, o); if (f !== void 0 && f.length !== 0 || (f = h.niceMax), t.globals.isBarHorizontal) { a = 0; var b = t.globals.labels.slice(); f = P.getLargestStringFromArr(b), f = d(f, { seriesIndex: n, dataPointIndex: -1, w: t }), x = e.dCtx.dimHelpers.getLargestStringFromMultiArr(f, b) } var v = new X(e.dCtx.ctx), y = "rotate(".concat(r.labels.rotate, " 0 0)"), w = v.getTextRects(f, r.labels.style.fontSize, r.labels.style.fontFamily, y, !1), l = w; f !== x && (l = v.getTextRects(x, r.labels.style.fontSize, r.labels.style.fontFamily, y, !1)), i.push({ width: (c > l.width || c > w.width ? c : l.width > w.width ? l.width : w.width) + a, height: l.height > w.height ? l.height : w.height }) } else i.push({ width: 0, height: 0 }) }), i } }, { key: "getyAxisTitleCoords", value: function () { var e = this, t = this.w, i = []; return t.config.yaxis.map(function (a, s) { if (a.show && a.title.text !== void 0) { var r = new X(e.dCtx.ctx), n = "rotate(".concat(a.title.rotate, " 0 0)"), o = r.getTextRects(a.title.text, a.title.style.fontSize, a.title.style.fontFamily, n, !1); i.push({ width: o.width, height: o.height }) } else i.push({ width: 0, height: 0 }) }), i } }, { key: "getTotalYAxisWidth", value: function () { var e = this.w, t = 0, i = 0, a = 0, s = e.globals.yAxisScale.length > 1 ? 10 : 0, r = new ge(this.dCtx.ctx), n = function (o, h) { var c = e.config.yaxis[h].floating, d = 0; o.width > 0 && !c ? (d = o.width + s, function (g) { return e.globals.ignoreYAxisIndexes.indexOf(g) > -1 }(h) && (d = d - o.width - s)) : d = c || r.isYAxisHidden(h) ? 0 : 5, e.config.yaxis[h].opposite ? a += d : i += d, t += d }; return e.globals.yLabelsCoords.map(function (o, h) { n(o, h) }), e.globals.yTitleCoords.map(function (o, h) { n(o, h) }), e.globals.isBarHorizontal && !e.config.yaxis[0].floating && (t = e.globals.yLabelsCoords[0].width + e.globals.yTitleCoords[0].width + 15), this.dCtx.yAxisWidthLeft = i, this.dCtx.yAxisWidthRight = a, t } }]), p }(), ji = function () { function p(e) { F(this, p), this.w = e.w, this.dCtx = e } return R(p, [{ key: "gridPadForColumnsInNumericAxis", value: function (e) { var t = this.w, i = t.config, a = t.globals; if (a.noData || a.collapsedSeries.length + a.ancillaryCollapsedSeries.length === i.series.length) return 0; var s = function (f) { return f === "bar" || f === "rangeBar" || f === "candlestick" || f === "boxPlot" }, r = i.chart.type, n = 0, o = s(r) ? i.series.length : 1; a.comboBarCount > 0 && (o = a.comboBarCount), a.collapsedSeries.forEach(function (f) { s(f.type) && (o -= 1) }), i.chart.stacked && (o = 1); var h = s(r) || a.comboBarCount > 0, c = Math.abs(a.initialMaxX - a.initialMinX); if (h && a.isXNumeric && !a.isBarHorizontal && o > 0 && c !== 0) { var d, g; c <= 3 && (c = a.dataPoints), d = c / e, a.minXDiff && a.minXDiff / d > 0 && (g = a.minXDiff / d), g > e / 2 && (g /= 2), (n = g * parseInt(i.plotOptions.bar.columnWidth, 10) / 100) < 1 && (n = 1), a.barPadForNumericAxis = n } return n } }, { key: "gridPadFortitleSubtitle", value: function () { var e = this, t = this.w, i = t.globals, a = this.dCtx.isSparkline || !t.globals.axisCharts ? 0 : 10;["title", "subtitle"].forEach(function (n) { t.config[n].text !== void 0 ? a += t.config[n].margin : a += e.dCtx.isSparkline || !t.globals.axisCharts ? 0 : 5 }), !t.config.legend.show || t.config.legend.position !== "bottom" || t.config.legend.floating || t.globals.axisCharts || (a += 10); var s = this.dCtx.dimHelpers.getTitleSubtitleCoords("title"), r = this.dCtx.dimHelpers.getTitleSubtitleCoords("subtitle"); i.gridHeight = i.gridHeight - s.height - r.height - a, i.translateY = i.translateY + s.height + r.height + a } }, { key: "setGridXPosForDualYAxis", value: function (e, t) { var i = this.w, a = new ge(this.dCtx.ctx); i.config.yaxis.map(function (s, r) { i.globals.ignoreYAxisIndexes.indexOf(r) !== -1 || s.floating || a.isYAxisHidden(r) || (s.opposite && (i.globals.translateX = i.globals.translateX - (t[r].width + e[r].width) - parseInt(i.config.yaxis[r].labels.style.fontSize, 10) / 1.2 - 12), i.globals.translateX < 2 && (i.globals.translateX = 2)) }) } }]), p }(), Ne = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w, this.lgRect = {}, this.yAxisWidth = 0, this.yAxisWidthLeft = 0, this.yAxisWidthRight = 0, this.xAxisHeight = 0, this.isSparkline = this.w.config.chart.sparkline.enabled, this.dimHelpers = new Gi(this), this.dimYAxis = new _i(this), this.dimXAxis = new Vi(this), this.dimGrid = new ji(this), this.lgWidthForSideLegends = 0, this.gridPad = this.w.config.grid.padding, this.xPadRight = 0, this.xPadLeft = 0 } return R(p, [{ key: "plotCoords", value: function () { var e = this, t = this.w, i = t.globals; this.lgRect = this.dimHelpers.getLegendsRect(), this.datalabelsCoords = { width: 0, height: 0 }; var a = Array.isArray(t.config.stroke.width) ? Math.max.apply(Math, te(t.config.stroke.width)) : t.config.stroke.width; this.isSparkline && ((t.config.markers.discrete.length > 0 || t.config.markers.size > 0) && Object.entries(this.gridPad).forEach(function (r) { var n = It(r, 2), o = n[0], h = n[1]; e.gridPad[o] = Math.max(h, e.w.globals.markers.largestSize / 1.5) }), this.gridPad.top = Math.max(a / 2, this.gridPad.top), this.gridPad.bottom = Math.max(a / 2, this.gridPad.bottom)), i.axisCharts ? this.setDimensionsForAxisCharts() : this.setDimensionsForNonAxisCharts(), this.dimGrid.gridPadFortitleSubtitle(), i.gridHeight = i.gridHeight - this.gridPad.top - this.gridPad.bottom, i.gridWidth = i.gridWidth - this.gridPad.left - this.gridPad.right - this.xPadRight - this.xPadLeft; var s = this.dimGrid.gridPadForColumnsInNumericAxis(i.gridWidth); i.gridWidth = i.gridWidth - 2 * s, i.translateX = i.translateX + this.gridPad.left + this.xPadLeft + (s > 0 ? s : 0), i.translateY = i.translateY + this.gridPad.top } }, { key: "setDimensionsForAxisCharts", value: function () { var e = this, t = this.w, i = t.globals, a = this.dimYAxis.getyAxisLabelsCoords(), s = this.dimYAxis.getyAxisTitleCoords(); i.isSlopeChart && (this.datalabelsCoords = this.dimHelpers.getDatalabelsRect()), t.globals.yLabelsCoords = [], t.globals.yTitleCoords = [], t.config.yaxis.map(function (f, x) { t.globals.yLabelsCoords.push({ width: a[x].width, index: x }), t.globals.yTitleCoords.push({ width: s[x].width, index: x }) }), this.yAxisWidth = this.dimYAxis.getTotalYAxisWidth(); var r = this.dimXAxis.getxAxisLabelsCoords(), n = this.dimXAxis.getxAxisGroupLabelsCoords(), o = this.dimXAxis.getxAxisTitleCoords(); this.conditionalChecksForAxisCoords(r, o, n), i.translateXAxisY = t.globals.rotateXLabels ? this.xAxisHeight / 8 : -4, i.translateXAxisX = t.globals.rotateXLabels && t.globals.isXNumeric && t.config.xaxis.labels.rotate <= -45 ? -this.xAxisWidth / 4 : 0, t.globals.isBarHorizontal && (i.rotateXLabels = !1, i.translateXAxisY = parseInt(t.config.xaxis.labels.style.fontSize, 10) / 1.5 * -1), i.translateXAxisY = i.translateXAxisY + t.config.xaxis.labels.offsetY, i.translateXAxisX = i.translateXAxisX + t.config.xaxis.labels.offsetX; var h = this.yAxisWidth, c = this.xAxisHeight; i.xAxisLabelsHeight = this.xAxisHeight - o.height, i.xAxisGroupLabelsHeight = i.xAxisLabelsHeight - r.height, i.xAxisLabelsWidth = this.xAxisWidth, i.xAxisHeight = this.xAxisHeight; var d = 10; (t.config.chart.type === "radar" || this.isSparkline) && (h = 0, c = i.goldenPadding), this.isSparkline && (this.lgRect = { height: 0, width: 0 }), (this.isSparkline || t.config.chart.type === "treemap") && (h = 0, c = 0, d = 0), this.isSparkline || t.config.chart.type === "treemap" || this.dimXAxis.additionalPaddingXLabels(r); var g = function () { i.translateX = h + e.datalabelsCoords.width, i.gridHeight = i.svgHeight - e.lgRect.height - c - (e.isSparkline || t.config.chart.type === "treemap" ? 0 : t.globals.rotateXLabels ? 10 : 15), i.gridWidth = i.svgWidth - h - 2 * e.datalabelsCoords.width }; switch (t.config.xaxis.position === "top" && (d = i.xAxisHeight - t.config.xaxis.axisTicks.height - 5), t.config.legend.position) { case "bottom": i.translateY = d, g(); break; case "top": i.translateY = this.lgRect.height + d, g(); break; case "left": i.translateY = d, i.translateX = this.lgRect.width + h + this.datalabelsCoords.width, i.gridHeight = i.svgHeight - c - 12, i.gridWidth = i.svgWidth - this.lgRect.width - h - 2 * this.datalabelsCoords.width; break; case "right": i.translateY = d, i.translateX = h + this.datalabelsCoords.width, i.gridHeight = i.svgHeight - c - 12, i.gridWidth = i.svgWidth - this.lgRect.width - h - 2 * this.datalabelsCoords.width - 5; break; default: throw new Error("Legend position not supported") }this.dimGrid.setGridXPosForDualYAxis(s, a), new lt(this.ctx).setYAxisXPosition(a, s) } }, { key: "setDimensionsForNonAxisCharts", value: function () { var e = this.w, t = e.globals, i = e.config, a = 0; e.config.legend.show && !e.config.legend.floating && (a = 20); var s = i.chart.type === "pie" || i.chart.type === "polarArea" || i.chart.type === "donut" ? "pie" : "radialBar", r = i.plotOptions[s].offsetY, n = i.plotOptions[s].offsetX; if (!i.legend.show || i.legend.floating) { t.gridHeight = t.svgHeight - i.grid.padding.top - i.grid.padding.bottom; var o = t.dom.elWrap.getBoundingClientRect().width; return t.gridWidth = Math.min(o, t.gridHeight) - i.grid.padding.left - i.grid.padding.right, t.translateY = r, void (t.translateX = n + (t.svgWidth - t.gridWidth) / 2) } switch (i.legend.position) { case "bottom": t.gridHeight = t.svgHeight - this.lgRect.height - t.goldenPadding, t.gridWidth = t.svgWidth, t.translateY = r - 10, t.translateX = n + (t.svgWidth - t.gridWidth) / 2; break; case "top": t.gridHeight = t.svgHeight - this.lgRect.height - t.goldenPadding, t.gridWidth = t.svgWidth, t.translateY = this.lgRect.height + r + 10, t.translateX = n + (t.svgWidth - t.gridWidth) / 2; break; case "left": t.gridWidth = t.svgWidth - this.lgRect.width - a, t.gridHeight = i.chart.height !== "auto" ? t.svgHeight : t.gridWidth, t.translateY = r, t.translateX = n + this.lgRect.width + a; break; case "right": t.gridWidth = t.svgWidth - this.lgRect.width - a - 5, t.gridHeight = i.chart.height !== "auto" ? t.svgHeight : t.gridWidth, t.translateY = r, t.translateX = n + 10; break; default: throw new Error("Legend position not supported") } } }, { key: "conditionalChecksForAxisCoords", value: function (e, t, i) { var a = this.w, s = a.globals.hasXaxisGroups ? 2 : 1, r = i.height + e.height + t.height, n = a.globals.isMultiLineX ? 1.2 : a.globals.LINE_HEIGHT_RATIO, o = a.globals.rotateXLabels ? 22 : 10, h = a.globals.rotateXLabels && a.config.legend.position === "bottom" ? 10 : 0; this.xAxisHeight = r * n + s * o + h, this.xAxisWidth = e.width, this.xAxisHeight - t.height > a.config.xaxis.labels.maxHeight && (this.xAxisHeight = a.config.xaxis.labels.maxHeight), a.config.xaxis.labels.minHeight && this.xAxisHeight < a.config.xaxis.labels.minHeight && (this.xAxisHeight = a.config.xaxis.labels.minHeight), a.config.xaxis.floating && (this.xAxisHeight = 0); var c = 0, d = 0; a.config.yaxis.forEach(function (g) { c += g.labels.minWidth, d += g.labels.maxWidth }), this.yAxisWidth < c && (this.yAxisWidth = c), this.yAxisWidth > d && (this.yAxisWidth = d) } }]), p }(), Ui = function () { + function p(e) { F(this, p), this.w = e.w, this.lgCtx = e } return R(p, [{ + key: "getLegendStyles", value: function () { + var e, t, i, a = document.createElement("style"); a.setAttribute("type", "text/css"); var s = ((e = this.lgCtx.ctx) === null || e === void 0 || (t = e.opts) === null || t === void 0 || (i = t.chart) === null || i === void 0 ? void 0 : i.nonce) || this.w.config.chart.nonce; s && a.setAttribute("nonce", s); var r = document.createTextNode(` .apexcharts-legend { display: flex; overflow: auto; @@ -74,22 +108,33 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho } .apexcharts-inactive-legend { opacity: 0.45; - }`);return a.appendChild(r),a}},{key:"getLegendDimensions",value:function(){var e=this.w.globals.dom.baseEl.querySelector(".apexcharts-legend"),t=e.offsetWidth;return{clwh:e.offsetHeight,clww:t}}},{key:"appendToForeignObject",value:function(){this.w.globals.dom.elLegendForeign.appendChild(this.getLegendStyles())}},{key:"toggleDataSeries",value:function(e,t){var i=this,a=this.w;if(a.globals.axisCharts||a.config.chart.type==="radialBar"){a.globals.resized=!0;var s=null,r=null;a.globals.risingSeries=[],a.globals.axisCharts?(s=a.globals.dom.baseEl.querySelector(".apexcharts-series[data\\:realIndex='".concat(e,"']")),r=parseInt(s.getAttribute("data:realIndex"),10)):(s=a.globals.dom.baseEl.querySelector(".apexcharts-series[rel='".concat(e+1,"']")),r=parseInt(s.getAttribute("rel"),10)-1),t?[{cs:a.globals.collapsedSeries,csi:a.globals.collapsedSeriesIndices},{cs:a.globals.ancillaryCollapsedSeries,csi:a.globals.ancillaryCollapsedSeriesIndices}].forEach(function(c){i.riseCollapsedSeries(c.cs,c.csi,r)}):this.hideSeries({seriesEl:s,realIndex:r})}else{var n=a.globals.dom.Paper.select(" .apexcharts-series[rel='".concat(e+1,"'] path")),o=a.config.chart.type;if(o==="pie"||o==="polarArea"||o==="donut"){var h=a.config.plotOptions.pie.donut.labels;new X(this.lgCtx.ctx).pathMouseDown(n.members[0],null),this.lgCtx.ctx.pie.printDataLabelsInner(n.members[0].node,h)}n.fire("click")}}},{key:"getSeriesAfterCollapsing",value:function(e){var t=e.realIndex,i=this.w,a=i.globals,s=P.clone(i.config.series);if(a.axisCharts){var r=i.config.yaxis[a.seriesYAxisReverseMap[t]],n={index:t,data:s[t].data.slice(),type:s[t].type||i.config.chart.type};if(r&&r.show&&r.showAlways)a.ancillaryCollapsedSeriesIndices.indexOf(t)<0&&(a.ancillaryCollapsedSeries.push(n),a.ancillaryCollapsedSeriesIndices.push(t));else if(a.collapsedSeriesIndices.indexOf(t)<0){a.collapsedSeries.push(n),a.collapsedSeriesIndices.push(t);var o=a.risingSeries.indexOf(t);a.risingSeries.splice(o,1)}}else a.collapsedSeries.push({index:t,data:s[t]}),a.collapsedSeriesIndices.push(t);return a.allSeriesCollapsed=a.collapsedSeries.length+a.ancillaryCollapsedSeries.length===i.config.series.length,this._getSeriesBasedOnCollapsedState(s)}},{key:"hideSeries",value:function(e){for(var t=e.seriesEl,i=e.realIndex,a=this.w,s=this.getSeriesAfterCollapsing({realIndex:i}),r=t.childNodes,n=0;n0){for(var r=0;r1||!t.axisCharts)&&i.legend.show){for(;t.dom.elLegendWrap.firstChild;)t.dom.elLegendWrap.removeChild(t.dom.elLegendWrap.firstChild);this.drawLegends(),this.legendHelpers.appendToForeignObject(),i.legend.position==="bottom"||i.legend.position==="top"?this.legendAlignHorizontal():i.legend.position!=="right"&&i.legend.position!=="left"||this.legendAlignVertical()}}},{key:"createLegendMarker",value:function(e){var t=e.i,i=e.fillcolor,a=this.w,s=document.createElement("span");s.classList.add("apexcharts-legend-marker");var r=a.config.legend.markers.shape||a.config.markers.shape,n=r;Array.isArray(r)&&(n=r[t]);var o=Array.isArray(a.config.legend.markers.size)?parseFloat(a.config.legend.markers.size[t]):parseFloat(a.config.legend.markers.size),h=Array.isArray(a.config.legend.markers.offsetX)?parseFloat(a.config.legend.markers.offsetX[t]):parseFloat(a.config.legend.markers.offsetX),c=Array.isArray(a.config.legend.markers.offsetY)?parseFloat(a.config.legend.markers.offsetY[t]):parseFloat(a.config.legend.markers.offsetY),d=Array.isArray(a.config.legend.markers.strokeWidth)?parseFloat(a.config.legend.markers.strokeWidth[t]):parseFloat(a.config.legend.markers.strokeWidth),g=s.style;if(g.height=2*(o+d)+"px",g.width=2*(o+d)+"px",g.left=h+"px",g.top=c+"px",a.config.legend.markers.customHTML)g.background="transparent",g.color=i[t],Array.isArray(a.config.legend.markers.customHTML)?a.config.legend.markers.customHTML[t]&&(s.innerHTML=a.config.legend.markers.customHTML[t]()):s.innerHTML=a.config.legend.markers.customHTML();else{var f=new ye(this.ctx).getMarkerConfig({cssClass:"apexcharts-legend-marker apexcharts-marker apexcharts-marker-".concat(n),seriesIndex:t,strokeWidth:d,size:o}),x=SVG(s).size("100%","100%"),b=new X(this.ctx).drawMarker(0,0,Y(Y({},f),{},{pointFillColor:Array.isArray(i)?i[t]:f.pointFillColor,shape:n}));SVG.select(".apexcharts-legend-marker.apexcharts-marker").members.forEach(function(v){v.node.classList.contains("apexcharts-marker-triangle")?v.node.style.transform="translate(50%, 45%)":v.node.style.transform="translate(50%, 50%)"}),x.add(b)}return s}},{key:"drawLegends",value:function(){var e=this,t=this.w,i=t.config.legend.fontFamily,a=t.globals.seriesNames,s=t.config.legend.markers.fillColors?t.config.legend.markers.fillColors.slice():t.globals.colors.slice();if(t.config.chart.type==="heatmap"){var r=t.config.plotOptions.heatmap.colorScale.ranges;a=r.map(function(m){return m.name?m.name:m.from+" - "+m.to}),s=r.map(function(m){return m.color})}else this.isBarsDistributed&&(a=t.globals.labels.slice());t.config.legend.customLegendItems.length&&(a=t.config.legend.customLegendItems);for(var n=t.globals.legendFormatter,o=t.config.legend.inverseOrder,h=o?a.length-1:0;o?h>=0:h<=a.length-1;o?h--:h++){var c,d=n(a[h],{seriesIndex:h,w:t}),g=!1,f=!1;if(t.globals.collapsedSeries.length>0)for(var x=0;x0)for(var b=0;b0?h-10:0)+(c>0?c-10:0)}a.style.position="absolute",r=r+e+i.config.legend.offsetX,n=n+t+i.config.legend.offsetY,a.style.left=r+"px",a.style.top=n+"px",i.config.legend.position==="bottom"?(a.style.top="auto",a.style.bottom=5-i.config.legend.offsetY+"px"):i.config.legend.position==="right"&&(a.style.left="auto",a.style.right=25+i.config.legend.offsetX+"px"),["width","height"].forEach(function(d){a.style[d]&&(a.style[d]=parseInt(i.config.legend[d],10)+"px")})}},{key:"legendAlignHorizontal",value:function(){var e=this.w;e.globals.dom.elLegendWrap.style.right=0;var t=this.legendHelpers.getLegendDimensions(),i=new Ne(this.ctx),a=i.dimHelpers.getTitleSubtitleCoords("title"),s=i.dimHelpers.getTitleSubtitleCoords("subtitle"),r=0;e.config.legend.position==="bottom"?r=-t.clwh/1.8:e.config.legend.position==="top"&&(r=a.height+s.height+e.config.title.margin+e.config.subtitle.margin-10),this.setLegendWrapXY(20,r)}},{key:"legendAlignVertical",value:function(){var e=this.w,t=this.legendHelpers.getLegendDimensions(),i=0;e.config.legend.position==="left"&&(i=20),e.config.legend.position==="right"&&(i=e.globals.svgWidth-t.clww-10),this.setLegendWrapXY(i,20)}},{key:"onLegendHovered",value:function(e){var t=this.w,i=e.target.classList.contains("apexcharts-legend-series")||e.target.classList.contains("apexcharts-legend-text")||e.target.classList.contains("apexcharts-legend-marker");if(t.config.chart.type==="heatmap"||this.isBarsDistributed){if(i){var a=parseInt(e.target.getAttribute("rel"),10)-1;this.ctx.events.fireEvent("legendHover",[this.ctx,a,this.w]),new re(this.ctx).highlightRangeInSeries(e,e.target)}}else!e.target.classList.contains("apexcharts-inactive-legend")&&i&&new re(this.ctx).toggleSeriesOnHover(e,e.target)}},{key:"onLegendClick",value:function(e){var t=this.w;if(!t.config.legend.customLegendItems.length&&(e.target.classList.contains("apexcharts-legend-series")||e.target.classList.contains("apexcharts-legend-text")||e.target.classList.contains("apexcharts-legend-marker"))){var i=parseInt(e.target.getAttribute("rel"),10)-1,a=e.target.getAttribute("data:collapsed")==="true",s=this.w.config.chart.events.legendClick;typeof s=="function"&&s(this.ctx,i,this.w),this.ctx.events.fireEvent("legendClick",[this.ctx,i,this.w]);var r=this.w.config.legend.markers.onClick;typeof r=="function"&&e.target.classList.contains("apexcharts-legend-marker")&&(r(this.ctx,i,this.w),this.ctx.events.fireEvent("legendMarkerClick",[this.ctx,i,this.w])),t.config.chart.type!=="treemap"&&t.config.chart.type!=="heatmap"&&!this.isBarsDistributed&&t.config.legend.onItemClick.toggleDataSeries&&this.legendHelpers.toggleDataSeries(i,a)}}}]),p}(),Ht=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w;var t=this.w;this.ev=this.w.config.chart.events,this.selectedClass="apexcharts-selected",this.localeValues=this.w.globals.locale.toolbar,this.minX=t.globals.minX,this.maxX=t.globals.maxX}return R(p,[{key:"createToolbar",value:function(){var e=this,t=this.w,i=function(){return document.createElement("div")},a=i();if(a.setAttribute("class","apexcharts-toolbar"),a.style.top=t.config.chart.toolbar.offsetY+"px",a.style.right=3-t.config.chart.toolbar.offsetX+"px",t.globals.dom.elWrap.appendChild(a),this.elZoom=i(),this.elZoomIn=i(),this.elZoomOut=i(),this.elPan=i(),this.elSelection=i(),this.elZoomReset=i(),this.elMenuIcon=i(),this.elMenu=i(),this.elCustomIcons=[],this.t=t.config.chart.toolbar.tools,Array.isArray(this.t.customIcons))for(var s=0;s + }`); return a.appendChild(r), a + } + }, { key: "getLegendDimensions", value: function () { var e = this.w.globals.dom.baseEl.querySelector(".apexcharts-legend"), t = e.offsetWidth; return { clwh: e.offsetHeight, clww: t } } }, { key: "appendToForeignObject", value: function () { this.w.globals.dom.elLegendForeign.appendChild(this.getLegendStyles()) } }, { key: "toggleDataSeries", value: function (e, t) { var i = this, a = this.w; if (a.globals.axisCharts || a.config.chart.type === "radialBar") { a.globals.resized = !0; var s = null, r = null; a.globals.risingSeries = [], a.globals.axisCharts ? (s = a.globals.dom.baseEl.querySelector(".apexcharts-series[data\\:realIndex='".concat(e, "']")), r = parseInt(s.getAttribute("data:realIndex"), 10)) : (s = a.globals.dom.baseEl.querySelector(".apexcharts-series[rel='".concat(e + 1, "']")), r = parseInt(s.getAttribute("rel"), 10) - 1), t ? [{ cs: a.globals.collapsedSeries, csi: a.globals.collapsedSeriesIndices }, { cs: a.globals.ancillaryCollapsedSeries, csi: a.globals.ancillaryCollapsedSeriesIndices }].forEach(function (c) { i.riseCollapsedSeries(c.cs, c.csi, r) }) : this.hideSeries({ seriesEl: s, realIndex: r }) } else { var n = a.globals.dom.Paper.select(" .apexcharts-series[rel='".concat(e + 1, "'] path")), o = a.config.chart.type; if (o === "pie" || o === "polarArea" || o === "donut") { var h = a.config.plotOptions.pie.donut.labels; new X(this.lgCtx.ctx).pathMouseDown(n.members[0], null), this.lgCtx.ctx.pie.printDataLabelsInner(n.members[0].node, h) } n.fire("click") } } }, { key: "getSeriesAfterCollapsing", value: function (e) { var t = e.realIndex, i = this.w, a = i.globals, s = P.clone(i.config.series); if (a.axisCharts) { var r = i.config.yaxis[a.seriesYAxisReverseMap[t]], n = { index: t, data: s[t].data.slice(), type: s[t].type || i.config.chart.type }; if (r && r.show && r.showAlways) a.ancillaryCollapsedSeriesIndices.indexOf(t) < 0 && (a.ancillaryCollapsedSeries.push(n), a.ancillaryCollapsedSeriesIndices.push(t)); else if (a.collapsedSeriesIndices.indexOf(t) < 0) { a.collapsedSeries.push(n), a.collapsedSeriesIndices.push(t); var o = a.risingSeries.indexOf(t); a.risingSeries.splice(o, 1) } } else a.collapsedSeries.push({ index: t, data: s[t] }), a.collapsedSeriesIndices.push(t); return a.allSeriesCollapsed = a.collapsedSeries.length + a.ancillaryCollapsedSeries.length === i.config.series.length, this._getSeriesBasedOnCollapsedState(s) } }, { key: "hideSeries", value: function (e) { for (var t = e.seriesEl, i = e.realIndex, a = this.w, s = this.getSeriesAfterCollapsing({ realIndex: i }), r = t.childNodes, n = 0; n < r.length; n++)r[n].classList.contains("apexcharts-series-markers-wrap") && (r[n].classList.contains("apexcharts-hide") ? r[n].classList.remove("apexcharts-hide") : r[n].classList.add("apexcharts-hide")); this.lgCtx.ctx.updateHelpers._updateSeries(s, a.config.chart.animations.dynamicAnimation.enabled) } }, { key: "riseCollapsedSeries", value: function (e, t, i) { var a = this.w, s = P.clone(a.config.series); if (e.length > 0) { for (var r = 0; r < e.length; r++)e[r].index === i && (a.globals.axisCharts ? s[i].data = e[r].data.slice() : s[i] = e[r].data, s[i].hidden = !1, e.splice(r, 1), t.splice(r, 1), a.globals.risingSeries.push(i)); s = this._getSeriesBasedOnCollapsedState(s), this.lgCtx.ctx.updateHelpers._updateSeries(s, a.config.chart.animations.dynamicAnimation.enabled) } } }, { key: "_getSeriesBasedOnCollapsedState", value: function (e) { var t = this.w, i = 0; return t.globals.axisCharts ? e.forEach(function (a, s) { t.globals.collapsedSeriesIndices.indexOf(s) < 0 && t.globals.ancillaryCollapsedSeriesIndices.indexOf(s) < 0 || (e[s].data = [], i++) }) : e.forEach(function (a, s) { !t.globals.collapsedSeriesIndices.indexOf(s) < 0 && (e[s] = 0, i++) }), t.globals.allSeriesCollapsed = i === e.length, e } }]), p + }(), Dt = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w, this.onLegendClick = this.onLegendClick.bind(this), this.onLegendHovered = this.onLegendHovered.bind(this), this.isBarsDistributed = this.w.config.chart.type === "bar" && this.w.config.plotOptions.bar.distributed && this.w.config.series.length === 1, this.legendHelpers = new Ui(this) } return R(p, [{ key: "init", value: function () { var e = this.w, t = e.globals, i = e.config; if ((i.legend.showForSingleSeries && t.series.length === 1 || this.isBarsDistributed || t.series.length > 1 || !t.axisCharts) && i.legend.show) { for (; t.dom.elLegendWrap.firstChild;)t.dom.elLegendWrap.removeChild(t.dom.elLegendWrap.firstChild); this.drawLegends(), this.legendHelpers.appendToForeignObject(), i.legend.position === "bottom" || i.legend.position === "top" ? this.legendAlignHorizontal() : i.legend.position !== "right" && i.legend.position !== "left" || this.legendAlignVertical() } } }, { key: "createLegendMarker", value: function (e) { var t = e.i, i = e.fillcolor, a = this.w, s = document.createElement("span"); s.classList.add("apexcharts-legend-marker"); var r = a.config.legend.markers.shape || a.config.markers.shape, n = r; Array.isArray(r) && (n = r[t]); var o = Array.isArray(a.config.legend.markers.size) ? parseFloat(a.config.legend.markers.size[t]) : parseFloat(a.config.legend.markers.size), h = Array.isArray(a.config.legend.markers.offsetX) ? parseFloat(a.config.legend.markers.offsetX[t]) : parseFloat(a.config.legend.markers.offsetX), c = Array.isArray(a.config.legend.markers.offsetY) ? parseFloat(a.config.legend.markers.offsetY[t]) : parseFloat(a.config.legend.markers.offsetY), d = Array.isArray(a.config.legend.markers.strokeWidth) ? parseFloat(a.config.legend.markers.strokeWidth[t]) : parseFloat(a.config.legend.markers.strokeWidth), g = s.style; if (g.height = 2 * (o + d) + "px", g.width = 2 * (o + d) + "px", g.left = h + "px", g.top = c + "px", a.config.legend.markers.customHTML) g.background = "transparent", g.color = i[t], Array.isArray(a.config.legend.markers.customHTML) ? a.config.legend.markers.customHTML[t] && (s.innerHTML = a.config.legend.markers.customHTML[t]()) : s.innerHTML = a.config.legend.markers.customHTML(); else { var f = new ye(this.ctx).getMarkerConfig({ cssClass: "apexcharts-legend-marker apexcharts-marker apexcharts-marker-".concat(n), seriesIndex: t, strokeWidth: d, size: o }), x = SVG(s).size("100%", "100%"), b = new X(this.ctx).drawMarker(0, 0, Y(Y({}, f), {}, { pointFillColor: Array.isArray(i) ? i[t] : f.pointFillColor, shape: n })); SVG.select(".apexcharts-legend-marker.apexcharts-marker").members.forEach(function (v) { v.node.classList.contains("apexcharts-marker-triangle") ? v.node.style.transform = "translate(50%, 45%)" : v.node.style.transform = "translate(50%, 50%)" }), x.add(b) } return s } }, { key: "drawLegends", value: function () { var e = this, t = this.w, i = t.config.legend.fontFamily, a = t.globals.seriesNames, s = t.config.legend.markers.fillColors ? t.config.legend.markers.fillColors.slice() : t.globals.colors.slice(); if (t.config.chart.type === "heatmap") { var r = t.config.plotOptions.heatmap.colorScale.ranges; a = r.map(function (m) { return m.name ? m.name : m.from + " - " + m.to }), s = r.map(function (m) { return m.color }) } else this.isBarsDistributed && (a = t.globals.labels.slice()); t.config.legend.customLegendItems.length && (a = t.config.legend.customLegendItems); for (var n = t.globals.legendFormatter, o = t.config.legend.inverseOrder, h = o ? a.length - 1 : 0; o ? h >= 0 : h <= a.length - 1; o ? h-- : h++) { var c, d = n(a[h], { seriesIndex: h, w: t }), g = !1, f = !1; if (t.globals.collapsedSeries.length > 0) for (var x = 0; x < t.globals.collapsedSeries.length; x++)t.globals.collapsedSeries[x].index === h && (g = !0); if (t.globals.ancillaryCollapsedSeriesIndices.length > 0) for (var b = 0; b < t.globals.ancillaryCollapsedSeriesIndices.length; b++)t.globals.ancillaryCollapsedSeriesIndices[b] === h && (f = !0); var v = this.createLegendMarker({ i: h, fillcolor: s }); X.setAttrs(v, { rel: h + 1, "data:collapsed": g || f }), (g || f) && v.classList.add("apexcharts-inactive-legend"); var y = document.createElement("div"), w = document.createElement("span"); w.classList.add("apexcharts-legend-text"), w.innerHTML = Array.isArray(d) ? d.join(" ") : d; var l = t.config.legend.labels.useSeriesColors ? t.globals.colors[h] : Array.isArray(t.config.legend.labels.colors) ? (c = t.config.legend.labels.colors) === null || c === void 0 ? void 0 : c[h] : t.config.legend.labels.colors; l || (l = t.config.chart.foreColor), w.style.color = l, w.style.fontSize = parseFloat(t.config.legend.fontSize) + "px", w.style.fontWeight = t.config.legend.fontWeight, w.style.fontFamily = i || t.config.chart.fontFamily, X.setAttrs(w, { rel: h + 1, i: h, "data:default-text": encodeURIComponent(d), "data:collapsed": g || f }), y.appendChild(v), y.appendChild(w); var u = new $(this.ctx); t.config.legend.showForZeroSeries || u.getSeriesTotalByIndex(h) === 0 && u.seriesHaveSameValues(h) && !u.isSeriesNull(h) && t.globals.collapsedSeriesIndices.indexOf(h) === -1 && t.globals.ancillaryCollapsedSeriesIndices.indexOf(h) === -1 && y.classList.add("apexcharts-hidden-zero-series"), t.config.legend.showForNullSeries || u.isSeriesNull(h) && t.globals.collapsedSeriesIndices.indexOf(h) === -1 && t.globals.ancillaryCollapsedSeriesIndices.indexOf(h) === -1 && y.classList.add("apexcharts-hidden-null-series"), t.globals.dom.elLegendWrap.appendChild(y), t.globals.dom.elLegendWrap.classList.add("apexcharts-align-".concat(t.config.legend.horizontalAlign)), t.globals.dom.elLegendWrap.classList.add("apx-legend-position-" + t.config.legend.position), y.classList.add("apexcharts-legend-series"), y.style.margin = "".concat(t.config.legend.itemMargin.vertical, "px ").concat(t.config.legend.itemMargin.horizontal, "px"), t.globals.dom.elLegendWrap.style.width = t.config.legend.width ? t.config.legend.width + "px" : "", t.globals.dom.elLegendWrap.style.height = t.config.legend.height ? t.config.legend.height + "px" : "", X.setAttrs(y, { rel: h + 1, seriesName: P.escapeString(a[h]), "data:collapsed": g || f }), (g || f) && y.classList.add("apexcharts-inactive-legend"), t.config.legend.onItemClick.toggleDataSeries || y.classList.add("apexcharts-no-click") } t.globals.dom.elWrap.addEventListener("click", e.onLegendClick, !0), t.config.legend.onItemHover.highlightDataSeries && t.config.legend.customLegendItems.length === 0 && (t.globals.dom.elWrap.addEventListener("mousemove", e.onLegendHovered, !0), t.globals.dom.elWrap.addEventListener("mouseout", e.onLegendHovered, !0)) } }, { key: "setLegendWrapXY", value: function (e, t) { var i = this.w, a = i.globals.dom.elLegendWrap, s = a.getBoundingClientRect(), r = 0, n = 0; if (i.config.legend.position === "bottom") n += i.globals.svgHeight - s.height / 2; else if (i.config.legend.position === "top") { var o = new Ne(this.ctx), h = o.dimHelpers.getTitleSubtitleCoords("title").height, c = o.dimHelpers.getTitleSubtitleCoords("subtitle").height; n = n + (h > 0 ? h - 10 : 0) + (c > 0 ? c - 10 : 0) } a.style.position = "absolute", r = r + e + i.config.legend.offsetX, n = n + t + i.config.legend.offsetY, a.style.left = r + "px", a.style.top = n + "px", i.config.legend.position === "bottom" ? (a.style.top = "auto", a.style.bottom = 5 - i.config.legend.offsetY + "px") : i.config.legend.position === "right" && (a.style.left = "auto", a.style.right = 25 + i.config.legend.offsetX + "px"), ["width", "height"].forEach(function (d) { a.style[d] && (a.style[d] = parseInt(i.config.legend[d], 10) + "px") }) } }, { key: "legendAlignHorizontal", value: function () { var e = this.w; e.globals.dom.elLegendWrap.style.right = 0; var t = this.legendHelpers.getLegendDimensions(), i = new Ne(this.ctx), a = i.dimHelpers.getTitleSubtitleCoords("title"), s = i.dimHelpers.getTitleSubtitleCoords("subtitle"), r = 0; e.config.legend.position === "bottom" ? r = -t.clwh / 1.8 : e.config.legend.position === "top" && (r = a.height + s.height + e.config.title.margin + e.config.subtitle.margin - 10), this.setLegendWrapXY(20, r) } }, { key: "legendAlignVertical", value: function () { var e = this.w, t = this.legendHelpers.getLegendDimensions(), i = 0; e.config.legend.position === "left" && (i = 20), e.config.legend.position === "right" && (i = e.globals.svgWidth - t.clww - 10), this.setLegendWrapXY(i, 20) } }, { key: "onLegendHovered", value: function (e) { var t = this.w, i = e.target.classList.contains("apexcharts-legend-series") || e.target.classList.contains("apexcharts-legend-text") || e.target.classList.contains("apexcharts-legend-marker"); if (t.config.chart.type === "heatmap" || this.isBarsDistributed) { if (i) { var a = parseInt(e.target.getAttribute("rel"), 10) - 1; this.ctx.events.fireEvent("legendHover", [this.ctx, a, this.w]), new re(this.ctx).highlightRangeInSeries(e, e.target) } } else !e.target.classList.contains("apexcharts-inactive-legend") && i && new re(this.ctx).toggleSeriesOnHover(e, e.target) } }, { key: "onLegendClick", value: function (e) { var t = this.w; if (!t.config.legend.customLegendItems.length && (e.target.classList.contains("apexcharts-legend-series") || e.target.classList.contains("apexcharts-legend-text") || e.target.classList.contains("apexcharts-legend-marker"))) { var i = parseInt(e.target.getAttribute("rel"), 10) - 1, a = e.target.getAttribute("data:collapsed") === "true", s = this.w.config.chart.events.legendClick; typeof s == "function" && s(this.ctx, i, this.w), this.ctx.events.fireEvent("legendClick", [this.ctx, i, this.w]); var r = this.w.config.legend.markers.onClick; typeof r == "function" && e.target.classList.contains("apexcharts-legend-marker") && (r(this.ctx, i, this.w), this.ctx.events.fireEvent("legendMarkerClick", [this.ctx, i, this.w])), t.config.chart.type !== "treemap" && t.config.chart.type !== "heatmap" && !this.isBarsDistributed && t.config.legend.onItemClick.toggleDataSeries && this.legendHelpers.toggleDataSeries(i, a) } } }]), p }(), Ht = function () { + function p(e) { F(this, p), this.ctx = e, this.w = e.w; var t = this.w; this.ev = this.w.config.chart.events, this.selectedClass = "apexcharts-selected", this.localeValues = this.w.globals.locale.toolbar, this.minX = t.globals.minX, this.maxX = t.globals.maxX } return R(p, [{ + key: "createToolbar", value: function () { + var e = this, t = this.w, i = function () { return document.createElement("div") }, a = i(); if (a.setAttribute("class", "apexcharts-toolbar"), a.style.top = t.config.chart.toolbar.offsetY + "px", a.style.right = 3 - t.config.chart.toolbar.offsetX + "px", t.globals.dom.elWrap.appendChild(a), this.elZoom = i(), this.elZoomIn = i(), this.elZoomOut = i(), this.elPan = i(), this.elSelection = i(), this.elZoomReset = i(), this.elMenuIcon = i(), this.elMenu = i(), this.elCustomIcons = [], this.t = t.config.chart.toolbar.tools, Array.isArray(this.t.customIcons)) for (var s = 0; s < this.t.customIcons.length; s++)this.elCustomIcons.push(i()); var r = [], n = function (d, g, f) { var x = d.toLowerCase(); e.t[x] && t.config.chart.zoom.enabled && r.push({ el: g, icon: typeof e.t[x] == "string" ? e.t[x] : f, title: e.localeValues[d], class: "apexcharts-".concat(x, "-icon") }) }; n("zoomIn", this.elZoomIn, ` -`),n("zoomOut",this.elZoomOut,` +`), n("zoomOut", this.elZoomOut, ` -`);var o=function(d){e.t[d]&&t.config.chart[d].enabled&&r.push({el:d==="zoom"?e.elZoom:e.elSelection,icon:typeof e.t[d]=="string"?e.t[d]:d==="zoom"?` +`); var o = function (d) { + e.t[d] && t.config.chart[d].enabled && r.push({ + el: d === "zoom" ? e.elZoom : e.elSelection, icon: typeof e.t[d] == "string" ? e.t[d] : d === "zoom" ? ` -`:` +`: ` -`,title:e.localeValues[d==="zoom"?"selectionZoom":"selection"],class:t.globals.isTouchDevice?"apexcharts-element-hidden":"apexcharts-".concat(d,"-icon")})};o("zoom"),o("selection"),this.t.pan&&t.config.chart.zoom.enabled&&r.push({el:this.elPan,icon:typeof this.t.pan=="string"?this.t.pan:` +`, title: e.localeValues[d === "zoom" ? "selectionZoom" : "selection"], class: t.globals.isTouchDevice ? "apexcharts-element-hidden" : "apexcharts-".concat(d, "-icon") + }) + }; o("zoom"), o("selection"), this.t.pan && t.config.chart.zoom.enabled && r.push({ + el: this.elPan, icon: typeof this.t.pan == "string" ? this.t.pan : ` @@ -97,17 +142,57 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho -`,title:this.localeValues.pan,class:t.globals.isTouchDevice?"apexcharts-element-hidden":"apexcharts-pan-icon"}),n("reset",this.elZoomReset,` +`, title: this.localeValues.pan, class: t.globals.isTouchDevice ? "apexcharts-element-hidden" : "apexcharts-pan-icon" + }), n("reset", this.elZoomReset, ` -`),this.t.download&&r.push({el:this.elMenuIcon,icon:typeof this.t.download=="string"?this.t.download:'',title:this.localeValues.menu,class:"apexcharts-menu-icon"});for(var h=0;hthis.wheelDelay&&(this.executeMouseWheelZoom(i),s.globals.lastWheelExecution=r),this.debounceTimer&&clearTimeout(this.debounceTimer),this.debounceTimer=setTimeout(function(){r-s.globals.lastWheelExecution>a.wheelDelay&&(a.executeMouseWheelZoom(i),s.globals.lastWheelExecution=r)},this.debounceDelay)}},{key:"executeMouseWheelZoom",value:function(i){var a,s=this.w;this.minX=s.globals.isRangeBar?s.globals.minY:s.globals.minX,this.maxX=s.globals.isRangeBar?s.globals.maxY:s.globals.maxX;var r=(a=this.gridRect)===null||a===void 0?void 0:a.getBoundingClientRect();if(r){var n,o,h,c=(i.clientX-r.left)/r.width,d=this.minX,g=this.maxX,f=g-d;if(i.deltaY<0){var x=d+c*f;o=x-(n=.5*f)/2,h=x+n/2}else o=d-(n=1.5*f)/2,h=g+n/2;o=Math.max(o,s.globals.initialMinX),h=Math.min(h,s.globals.initialMaxX);var b=.01*(s.globals.initialMaxX-s.globals.initialMinX);if(h-o0&&a.height>0&&this.slDraggableRect.selectize({points:"l, r",pointSize:8,pointType:"rect"}).resize({constraint:{minX:0,minY:0,maxX:i.globals.gridWidth,maxY:i.globals.gridHeight}}).on("resizing",this.selectionDragging.bind(this,"resizing"))}}},{key:"preselectedSelection",value:function(){var i=this.w,a=this.xyRatios;if(!i.globals.zoomEnabled){if(i.globals.selection!==void 0&&i.globals.selection!==null)this.drawSelectionRect(i.globals.selection);else if(i.config.chart.selection.xaxis.min!==void 0&&i.config.chart.selection.xaxis.max!==void 0){var s=(i.config.chart.selection.xaxis.min-i.globals.minX)/a.xRatio,r=i.globals.gridWidth-(i.globals.maxX-i.config.chart.selection.xaxis.max)/a.xRatio-s;i.globals.isRangeBar&&(s=(i.config.chart.selection.xaxis.min-i.globals.yAxisScale[0].niceMin)/a.invertedYRatio,r=(i.config.chart.selection.xaxis.max-i.config.chart.selection.xaxis.min)/a.invertedYRatio);var n={x:s,y:0,width:r,height:i.globals.gridHeight,translateX:0,translateY:0,selectionEnabled:!0};this.drawSelectionRect(n),this.makeSelectionRectDraggable(),typeof i.config.chart.events.selection=="function"&&i.config.chart.events.selection(this.ctx,{xaxis:{min:i.config.chart.selection.xaxis.min,max:i.config.chart.selection.xaxis.max},yaxis:{}})}}}},{key:"drawSelectionRect",value:function(i){var a=i.x,s=i.y,r=i.width,n=i.height,o=i.translateX,h=o===void 0?0:o,c=i.translateY,d=c===void 0?0:c,g=this.w,f=this.zoomRect,x=this.selectionRect;if(this.dragged||g.globals.selection!==null){var b={transform:"translate("+h+", "+d+")"};g.globals.zoomEnabled&&this.dragged&&(r<0&&(r=1),f.attr({x:a,y:s,width:r,height:n,fill:g.config.chart.zoom.zoomedArea.fill.color,"fill-opacity":g.config.chart.zoom.zoomedArea.fill.opacity,stroke:g.config.chart.zoom.zoomedArea.stroke.color,"stroke-width":g.config.chart.zoom.zoomedArea.stroke.width,"stroke-opacity":g.config.chart.zoom.zoomedArea.stroke.opacity}),X.setAttrs(f.node,b)),g.globals.selectionEnabled&&(x.attr({x:a,y:s,width:r>0?r:0,height:n>0?n:0,fill:g.config.chart.selection.fill.color,"fill-opacity":g.config.chart.selection.fill.opacity,stroke:g.config.chart.selection.stroke.color,"stroke-width":g.config.chart.selection.stroke.width,"stroke-dasharray":g.config.chart.selection.stroke.dashArray,"stroke-opacity":g.config.chart.selection.stroke.opacity}),X.setAttrs(x.node,b))}}},{key:"hideSelectionRect",value:function(i){i&&i.attr({x:0,y:0,width:0,height:0})}},{key:"selectionDrawing",value:function(i){var a=i.context,s=i.zoomtype,r=this.w,n=a,o=this.gridRect.getBoundingClientRect(),h=n.startX-1,c=n.startY,d=!1,g=!1,f=n.clientX-o.left-h,x=n.clientY-o.top-c,b={};return Math.abs(f+h)>r.globals.gridWidth?f=r.globals.gridWidth-h:n.clientX-o.left<0&&(f=h),h>n.clientX-o.left&&(d=!0,f=Math.abs(f)),c>n.clientY-o.top&&(g=!0,x=Math.abs(x)),b=s==="x"?{x:d?h-f:h,y:0,width:f,height:r.globals.gridHeight}:s==="y"?{x:0,y:g?c-x:c,width:r.globals.gridWidth,height:x}:{x:d?h-f:h,y:g?c-x:c,width:f,height:x},n.drawSelectionRect(b),n.selectionDragging("resizing"),b}},{key:"selectionDragging",value:function(i,a){var s=this,r=this.w,n=this.xyRatios,o=this.selectionRect,h=0;i==="resizing"&&(h=30);var c=function(g){return parseFloat(o.node.getAttribute(g))},d={x:c("x"),y:c("y"),width:c("width"),height:c("height")};r.globals.selection=d,typeof r.config.chart.events.selection=="function"&&r.globals.selectionEnabled&&(clearTimeout(this.w.globals.selectionResizeTimer),this.w.globals.selectionResizeTimer=window.setTimeout(function(){var g,f,x,b,v=s.gridRect.getBoundingClientRect(),y=o.node.getBoundingClientRect();r.globals.isRangeBar?(g=r.globals.yAxisScale[0].niceMin+(y.left-v.left)*n.invertedYRatio,f=r.globals.yAxisScale[0].niceMin+(y.right-v.left)*n.invertedYRatio,x=0,b=1):(g=r.globals.xAxisScale.niceMin+(y.left-v.left)*n.xRatio,f=r.globals.xAxisScale.niceMin+(y.right-v.left)*n.xRatio,x=r.globals.yAxisScale[0].niceMin+(v.bottom-y.bottom)*n.yRatio[0],b=r.globals.yAxisScale[0].niceMax-(y.top-v.top)*n.yRatio[0]);var w={xaxis:{min:g,max:f},yaxis:{min:x,max:b}};r.config.chart.events.selection(s.ctx,w),r.config.chart.brush.enabled&&r.config.chart.events.brushScrolled!==void 0&&r.config.chart.events.brushScrolled(s.ctx,w)},h))}},{key:"selectionDrawn",value:function(i){var a=i.context,s=i.zoomtype,r=this.w,n=a,o=this.xyRatios,h=this.ctx.toolbar;if(n.startX>n.endX){var c=n.startX;n.startX=n.endX,n.endX=c}if(n.startY>n.endY){var d=n.startY;n.startY=n.endY,n.endY=d}var g=void 0,f=void 0;r.globals.isRangeBar?(g=r.globals.yAxisScale[0].niceMin+n.startX*o.invertedYRatio,f=r.globals.yAxisScale[0].niceMin+n.endX*o.invertedYRatio):(g=r.globals.xAxisScale.niceMin+n.startX*o.xRatio,f=r.globals.xAxisScale.niceMin+n.endX*o.xRatio);var x=[],b=[];if(r.config.yaxis.forEach(function(A,k){var S=r.globals.seriesYAxisMap[k][0];x.push(r.globals.yAxisScale[k].niceMax-o.yRatio[S]*n.startY),b.push(r.globals.yAxisScale[k].niceMax-o.yRatio[S]*n.endY)}),n.dragged&&(n.dragX>10||n.dragY>10)&&g!==f){if(r.globals.zoomEnabled){var v=P.clone(r.globals.initialConfig.yaxis),y=P.clone(r.globals.initialConfig.xaxis);if(r.globals.zoomed=!0,r.config.xaxis.convertedCatToNumeric&&(g=Math.floor(g),f=Math.floor(f),g<1&&(g=1,f=r.globals.dataPoints),f-g<2&&(f=g+1)),s!=="xy"&&s!=="x"||(y={min:g,max:f}),s!=="xy"&&s!=="y"||v.forEach(function(A,k){v[k].min=b[k],v[k].max=x[k]}),h){var w=h.getBeforeZoomRange(y,v);w&&(y=w.xaxis?w.xaxis:y,v=w.yaxis?w.yaxis:v)}var l={xaxis:y};r.config.chart.group||(l.yaxis=v),n.ctx.updateHelpers._updateOptions(l,!1,n.w.config.chart.animations.dynamicAnimation.enabled),typeof r.config.chart.events.zoomed=="function"&&h.zoomCallback(y,v)}else if(r.globals.selectionEnabled){var u,m=null;u={min:g,max:f},s!=="xy"&&s!=="y"||(m=P.clone(r.config.yaxis)).forEach(function(A,k){m[k].min=b[k],m[k].max=x[k]}),r.globals.selection=n.selection,typeof r.config.chart.events.selection=="function"&&r.config.chart.events.selection(n.ctx,{xaxis:u,yaxis:m})}}}},{key:"panDragging",value:function(i){var a=i.context,s=this.w,r=a;if(s.globals.lastClientPosition.x!==void 0){var n=s.globals.lastClientPosition.x-r.clientX,o=s.globals.lastClientPosition.y-r.clientY;Math.abs(n)>Math.abs(o)&&n>0?this.moveDirection="left":Math.abs(n)>Math.abs(o)&&n<0?this.moveDirection="right":Math.abs(o)>Math.abs(n)&&o>0?this.moveDirection="up":Math.abs(o)>Math.abs(n)&&o<0&&(this.moveDirection="down")}s.globals.lastClientPosition={x:r.clientX,y:r.clientY};var h=s.globals.isRangeBar?s.globals.minY:s.globals.minX,c=s.globals.isRangeBar?s.globals.maxY:s.globals.maxX;s.config.xaxis.convertedCatToNumeric||r.panScrolled(h,c)}},{key:"delayedPanScrolled",value:function(){var i=this.w,a=i.globals.minX,s=i.globals.maxX,r=(i.globals.maxX-i.globals.minX)/2;this.moveDirection==="left"?(a=i.globals.minX+r,s=i.globals.maxX+r):this.moveDirection==="right"&&(a=i.globals.minX-r,s=i.globals.maxX-r),a=Math.floor(a),s=Math.floor(s),this.updateScrolledChart({xaxis:{min:a,max:s}},a,s)}},{key:"panScrolled",value:function(i,a){var s=this.w,r=this.xyRatios,n=P.clone(s.globals.initialConfig.yaxis),o=r.xRatio,h=s.globals.minX,c=s.globals.maxX;s.globals.isRangeBar&&(o=r.invertedYRatio,h=s.globals.minY,c=s.globals.maxY),this.moveDirection==="left"?(i=h+s.globals.gridWidth/15*o,a=c+s.globals.gridWidth/15*o):this.moveDirection==="right"&&(i=h-s.globals.gridWidth/15*o,a=c-s.globals.gridWidth/15*o),s.globals.isRangeBar||(is.globals.initialMaxX)&&(i=h,a=c);var d={xaxis:{min:i,max:a}};s.config.chart.group||(d.yaxis=n),this.updateScrolledChart(d,i,a)}},{key:"updateScrolledChart",value:function(i,a,s){var r=this.w;this.ctx.updateHelpers._updateOptions(i,!1,!1),typeof r.config.chart.events.scrolled=="function"&&r.config.chart.events.scrolled(this.ctx,{xaxis:{min:a,max:s}})}}]),t}(),Nt=function(){function p(e){F(this,p),this.w=e.w,this.ttCtx=e,this.ctx=e.ctx}return R(p,[{key:"getNearestValues",value:function(e){var t=e.hoverArea,i=e.elGrid,a=e.clientX,s=e.clientY,r=this.w,n=i.getBoundingClientRect(),o=n.width,h=n.height,c=o/(r.globals.dataPoints-1),d=h/r.globals.dataPoints,g=this.hasBars();!r.globals.comboCharts&&!g||r.config.xaxis.convertedCatToNumeric||(c=o/r.globals.dataPoints);var f=a-n.left-r.globals.barPadForNumericAxis,x=s-n.top;f<0||x<0||f>o||x>h?(t.classList.remove("hovering-zoom"),t.classList.remove("hovering-pan")):r.globals.zoomEnabled?(t.classList.remove("hovering-pan"),t.classList.add("hovering-zoom")):r.globals.panEnabled&&(t.classList.remove("hovering-zoom"),t.classList.add("hovering-pan"));var b=Math.round(f/c),v=Math.floor(x/d);g&&!r.config.xaxis.convertedCatToNumeric&&(b=Math.ceil(f/c),b-=1);var y=null,w=null,l=r.globals.seriesXvalues.map(function(S){return S.filter(function(L){return P.isNumber(L)})}),u=r.globals.seriesYvalues.map(function(S){return S.filter(function(L){return P.isNumber(L)})});if(r.globals.isXNumeric){var m=this.ttCtx.getElGrid().getBoundingClientRect(),A=f*(m.width/o),k=x*(m.height/h);y=(w=this.closestInMultiArray(A,k,l,u)).index,b=w.j,y!==null&&(l=r.globals.seriesXvalues[y],b=(w=this.closestInArray(A,l)).index)}return r.globals.capturedSeriesIndex=y===null?-1:y,(!b||b<1)&&(b=0),r.globals.isBarHorizontal?r.globals.capturedDataPointIndex=v:r.globals.capturedDataPointIndex=b,{capturedSeries:y,j:r.globals.isBarHorizontal?v:b,hoverX:f,hoverY:x}}},{key:"closestInMultiArray",value:function(e,t,i,a){var s=this.w,r=0,n=null,o=-1;s.globals.series.length>1?r=this.getFirstActiveXArray(i):n=0;var h=i[r][0],c=Math.abs(e-h);if(i.forEach(function(f){f.forEach(function(x,b){var v=Math.abs(e-x);v<=c&&(c=v,o=b)})}),o!==-1){var d=a[r][o],g=Math.abs(t-d);n=r,a.forEach(function(f,x){var b=Math.abs(t-f[o]);b<=g&&(g=b,n=x)})}return{index:n,j:o}}},{key:"getFirstActiveXArray",value:function(e){for(var t=this.w,i=0,a=e.map(function(r,n){return r.length>0?n:-1}),s=0;s0)for(var a=0;a *")):this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-series-markers-wrap > *")}},{key:"getAllMarkers",value:function(){var e=this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-series-markers-wrap");(e=te(e)).sort(function(i,a){var s=Number(i.getAttribute("data:realIndex")),r=Number(a.getAttribute("data:realIndex"));return rs?-1:0});var t=[];return e.forEach(function(i){t.push(i.querySelector(".apexcharts-marker"))}),t}},{key:"hasMarkers",value:function(e){return this.getElMarkers(e).length>0}},{key:"getPathFromPoint",value:function(e,t){var i=Number(e.getAttribute("cx")),a=Number(e.getAttribute("cy")),s=e.getAttribute("shape");return new X(this.ctx).getMarkerPath(i,a,s,t)}},{key:"getElBars",value:function(){return this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-bar-series, .apexcharts-candlestick-series, .apexcharts-boxPlot-series, .apexcharts-rangebar-series")}},{key:"hasBars",value:function(){return this.getElBars().length>0}},{key:"getHoverMarkerSize",value:function(e){var t=this.w,i=t.config.markers.hover.size;return i===void 0&&(i=t.globals.markers.size[e]+t.config.markers.hover.sizeOffset),i}},{key:"toggleAllTooltipSeriesGroups",value:function(e){var t=this.w,i=this.ttCtx;i.allTooltipSeriesGroups.length===0&&(i.allTooltipSeriesGroups=t.globals.dom.baseEl.querySelectorAll(".apexcharts-tooltip-series-group"));for(var a=i.allTooltipSeriesGroups,s=0;s
').concat(C.attrs.name,""),L+="
".concat(C.val,"
")}),l.innerHTML=S+"",u.innerHTML=L+""};n?h.globals.seriesGoals[t][i]&&Array.isArray(h.globals.seriesGoals[t][i])?m():(l.innerHTML="",u.innerHTML=""):m()}else l.innerHTML="",u.innerHTML="";if(b!==null&&(a[t].querySelector(".apexcharts-tooltip-text-z-label").innerHTML=h.config.tooltip.z.title,a[t].querySelector(".apexcharts-tooltip-text-z-value").innerHTML=b!==void 0?b:""),n&&v[0]){if(h.config.tooltip.hideEmptySeries){var A=a[t].querySelector(".apexcharts-tooltip-marker"),k=a[t].querySelector(".apexcharts-tooltip-text");parseFloat(d)==0?(A.style.display="none",k.style.display="none"):(A.style.display="block",k.style.display="block")}d==null||h.globals.ancillaryCollapsedSeriesIndices.indexOf(t)>-1||h.globals.collapsedSeriesIndices.indexOf(t)>-1||Array.isArray(c.tConfig.enabledOnSeries)&&c.tConfig.enabledOnSeries.indexOf(t)===-1?v[0].parentNode.style.display="none":v[0].parentNode.style.display=h.config.tooltip.items.display}else Array.isArray(c.tConfig.enabledOnSeries)&&c.tConfig.enabledOnSeries.indexOf(t)===-1&&(v[0].parentNode.style.display="none")}},{key:"toggleActiveInactiveSeries",value:function(e,t){var i=this.w;if(e)this.tooltipUtil.toggleAllTooltipSeriesGroups("enable");else{this.tooltipUtil.toggleAllTooltipSeriesGroups("disable");var a=i.globals.dom.baseEl.querySelector(".apexcharts-tooltip-series-group-".concat(t));a&&(a.classList.add("apexcharts-active"),a.style.display=i.config.tooltip.items.display)}}},{key:"getValuesToPrint",value:function(e){var t=e.i,i=e.j,a=this.w,s=this.ctx.series.filteredSeriesX(),r="",n="",o=null,h=null,c={series:a.globals.series,seriesIndex:t,dataPointIndex:i,w:a},d=a.globals.ttZFormatter;i===null?h=a.globals.series[t]:a.globals.isXNumeric&&a.config.chart.type!=="treemap"?(r=s[t][i],s[t].length===0&&(r=s[this.tooltipUtil.getFirstActiveXArray(s)][i])):r=a.globals.labels[i]!==void 0?a.globals.labels[i]:"";var g=r;return a.globals.isXNumeric&&a.config.xaxis.type==="datetime"?r=new ze(this.ctx).xLabelFormat(a.globals.ttKeyFormatter,g,g,{i:void 0,dateFormatter:new K(this.ctx).formatDate,w:this.w}):r=a.globals.isBarHorizontal?a.globals.yLabelFormatters[0](g,c):a.globals.xLabelFormatter(g,c),a.config.tooltip.x.formatter!==void 0&&(r=a.globals.ttKeyFormatter(g,c)),a.globals.seriesZ.length>0&&a.globals.seriesZ[t].length>0&&(o=d(a.globals.seriesZ[t][i],a)),n=typeof a.config.xaxis.tooltip.formatter=="function"?a.globals.xaxisTooltipFormatter(g,c):r,{val:Array.isArray(h)?h.join(" "):h,xVal:Array.isArray(r)?r.join(" "):r,xAxisTTVal:Array.isArray(n)?n.join(" "):n,zVal:o}}},{key:"handleCustomTooltip",value:function(e){var t=e.i,i=e.j,a=e.y1,s=e.y2,r=e.w,n=this.ttCtx.getElTooltip(),o=r.config.tooltip.custom;Array.isArray(o)&&o[t]&&(o=o[t]),n.innerHTML=o({ctx:this.ctx,series:r.globals.series,seriesIndex:t,dataPointIndex:i,y1:a,y2:s,w:r})}}]),p}(),Wt=function(){function p(e){F(this,p),this.ttCtx=e,this.ctx=e.ctx,this.w=e.w}return R(p,[{key:"moveXCrosshairs",value:function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null,i=this.ttCtx,a=this.w,s=i.getElXCrosshairs(),r=e-i.xcrosshairsWidth/2,n=a.globals.labels.slice().length;if(t!==null&&(r=a.globals.gridWidth/n*t),s===null||a.globals.isBarHorizontal||(s.setAttribute("x",r),s.setAttribute("x1",r),s.setAttribute("x2",r),s.setAttribute("y2",a.globals.gridHeight),s.classList.add("apexcharts-active")),r<0&&(r=0),r>a.globals.gridWidth&&(r=a.globals.gridWidth),i.isXAxisTooltipEnabled){var o=r;a.config.xaxis.crosshairs.width!=="tickWidth"&&a.config.xaxis.crosshairs.width!=="barWidth"||(o=r+i.xcrosshairsWidth/2),this.moveXAxisTooltip(o)}}},{key:"moveYCrosshairs",value:function(e){var t=this.ttCtx;t.ycrosshairs!==null&&X.setAttrs(t.ycrosshairs,{y1:e,y2:e}),t.ycrosshairsHidden!==null&&X.setAttrs(t.ycrosshairsHidden,{y1:e,y2:e})}},{key:"moveXAxisTooltip",value:function(e){var t=this.w,i=this.ttCtx;if(i.xaxisTooltip!==null&&i.xcrosshairsWidth!==0){i.xaxisTooltip.classList.add("apexcharts-active");var a=i.xaxisOffY+t.config.xaxis.tooltip.offsetY+t.globals.translateY+1+t.config.xaxis.offsetY;if(e-=i.xaxisTooltip.getBoundingClientRect().width/2,!isNaN(e)){e+=t.globals.translateX;var s;s=new X(this.ctx).getTextRects(i.xaxisTooltipText.innerHTML),i.xaxisTooltipText.style.minWidth=s.width+"px",i.xaxisTooltip.style.left=e+"px",i.xaxisTooltip.style.top=a+"px"}}}},{key:"moveYAxisTooltip",value:function(e){var t=this.w,i=this.ttCtx;i.yaxisTTEls===null&&(i.yaxisTTEls=t.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxistooltip"));var a=parseInt(i.ycrosshairsHidden.getAttribute("y1"),10),s=t.globals.translateY+a,r=i.yaxisTTEls[e].getBoundingClientRect().height,n=t.globals.translateYAxisX[e]-2;t.config.yaxis[e].opposite&&(n-=26),s-=r/2,t.globals.ignoreYAxisIndexes.indexOf(e)===-1?(i.yaxisTTEls[e].classList.add("apexcharts-active"),i.yaxisTTEls[e].style.top=s+"px",i.yaxisTTEls[e].style.left=n+t.config.yaxis[e].tooltip.offsetX+"px"):i.yaxisTTEls[e].classList.remove("apexcharts-active")}},{key:"moveTooltip",value:function(e,t){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:null,a=this.w,s=this.ttCtx,r=s.getElTooltip(),n=s.tooltipRect,o=i!==null?parseFloat(i):1,h=parseFloat(e)+o+5,c=parseFloat(t)+o/2;if(h>a.globals.gridWidth/2&&(h=h-n.ttWidth-o-10),h>a.globals.gridWidth-n.ttWidth-10&&(h=a.globals.gridWidth-n.ttWidth),h<-20&&(h=-20),a.config.tooltip.followCursor){var d=s.getElGrid().getBoundingClientRect();(h=s.e.clientX-d.left)>a.globals.gridWidth/2&&(h-=s.tooltipRect.ttWidth),(c=s.e.clientY+a.globals.translateY-d.top)>a.globals.gridHeight/2&&(c-=s.tooltipRect.ttHeight)}else a.globals.isBarHorizontal||n.ttHeight/2+c>a.globals.gridHeight&&(c=a.globals.gridHeight-n.ttHeight+a.globals.translateY);isNaN(h)||(h+=a.globals.translateX,r.style.left=h+"px",r.style.top=c+"px")}},{key:"moveMarkers",value:function(e,t){var i=this.w,a=this.ttCtx;if(i.globals.markers.size[e]>0)for(var s=i.globals.dom.baseEl.querySelectorAll(" .apexcharts-series[data\\:realIndex='".concat(e,"'] .apexcharts-marker")),r=0;r0){var x=f.getAttribute("shape"),b=h.getMarkerPath(s,r,x,1.5*d);f.setAttribute("d",b)}this.moveXCrosshairs(s),o.fixedTooltip||this.moveTooltip(s,r,d)}}},{key:"moveDynamicPointsOnHover",value:function(e){var t,i=this.ttCtx,a=i.w,s=0,r=0,n=a.globals.pointsArray,o=new re(this.ctx),h=new X(this.ctx);t=o.getActiveConfigSeriesIndex("asc",["line","area","scatter","bubble"]);var c=i.tooltipUtil.getHoverMarkerSize(t);n[t]&&(s=n[t][e][0],r=n[t][e][1]);var d=i.tooltipUtil.getAllMarkers();if(d!==null)for(var g=0;g0){var w=h.getMarkerPath(s,x,v,c);d[g].setAttribute("d",w)}else d[g].setAttribute("d","")}}this.moveXCrosshairs(s),i.fixedTooltip||this.moveTooltip(s,r||a.globals.gridHeight,c)}},{key:"moveStickyTooltipOverBars",value:function(e,t){var i=this.w,a=this.ttCtx,s=i.globals.columnSeries?i.globals.columnSeries.length:i.globals.series.length,r=s>=2&&s%2==0?Math.floor(s/2):Math.floor(s/2)+1;i.globals.isBarHorizontal&&(r=new re(this.ctx).getActiveConfigSeriesIndex("desc")+1);var n=i.globals.dom.baseEl.querySelector(".apexcharts-bar-series .apexcharts-series[rel='".concat(r,"'] path[j='").concat(e,"'], .apexcharts-candlestick-series .apexcharts-series[rel='").concat(r,"'] path[j='").concat(e,"'], .apexcharts-boxPlot-series .apexcharts-series[rel='").concat(r,"'] path[j='").concat(e,"'], .apexcharts-rangebar-series .apexcharts-series[rel='").concat(r,"'] path[j='").concat(e,"']"));n||typeof t!="number"||(n=i.globals.dom.baseEl.querySelector(".apexcharts-bar-series .apexcharts-series[data\\:realIndex='".concat(t,"'] path[j='").concat(e,`'], - .apexcharts-candlestick-series .apexcharts-series[data\\:realIndex='`).concat(t,"'] path[j='").concat(e,`'], - .apexcharts-boxPlot-series .apexcharts-series[data\\:realIndex='`).concat(t,"'] path[j='").concat(e,`'], - .apexcharts-rangebar-series .apexcharts-series[data\\:realIndex='`).concat(t,"'] path[j='").concat(e,"']")));var o=n?parseFloat(n.getAttribute("cx")):0,h=n?parseFloat(n.getAttribute("cy")):0,c=n?parseFloat(n.getAttribute("barWidth")):0,d=a.getElGrid().getBoundingClientRect(),g=n&&(n.classList.contains("apexcharts-candlestick-area")||n.classList.contains("apexcharts-boxPlot-area"));i.globals.isXNumeric?(n&&!g&&(o-=s%2!=0?c/2:0),n&&g&&i.globals.comboCharts&&(o-=c/2)):i.globals.isBarHorizontal||(o=a.xAxisTicksPositions[e-1]+a.dataPointsDividedWidth/2,isNaN(o)&&(o=a.xAxisTicksPositions[e]-a.dataPointsDividedWidth/2)),i.globals.isBarHorizontal?h-=a.tooltipRect.ttHeight:i.config.tooltip.followCursor?h=a.e.clientY-d.top-a.tooltipRect.ttHeight/2:h+a.tooltipRect.ttHeight+15>i.globals.gridHeight&&(h=i.globals.gridHeight),i.globals.isBarHorizontal||this.moveXCrosshairs(o),a.fixedTooltip||this.moveTooltip(o,h||i.globals.gridHeight)}}]),p}(),$i=function(){function p(e){F(this,p),this.w=e.w,this.ttCtx=e,this.ctx=e.ctx,this.tooltipPosition=new Wt(e)}return R(p,[{key:"drawDynamicPoints",value:function(){var e=this.w,t=new X(this.ctx),i=new ye(this.ctx),a=e.globals.dom.baseEl.querySelectorAll(".apexcharts-series");a=te(a),e.config.chart.stacked&&a.sort(function(d,g){return parseFloat(d.getAttribute("data:realIndex"))-parseFloat(g.getAttribute("data:realIndex"))});for(var s=0;s2&&arguments[2]!==void 0?arguments[2]:null,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:null,s=this.w;s.config.chart.type!=="bubble"&&this.newPointSize(e,t);var r=t.getAttribute("cx"),n=t.getAttribute("cy");if(i!==null&&a!==null&&(r=i,n=a),this.tooltipPosition.moveXCrosshairs(r),!this.fixedTooltip){if(s.config.chart.type==="radar"){var o=this.ttCtx.getElGrid().getBoundingClientRect();r=this.ttCtx.e.clientX-o.left}this.tooltipPosition.moveTooltip(r,n,s.config.markers.hover.size)}}},{key:"enlargePoints",value:function(e){for(var t=this.w,i=this,a=this.ttCtx,s=e,r=t.globals.dom.baseEl.querySelectorAll(".apexcharts-series:not(.apexcharts-series-collapsed) .apexcharts-marker"),n=t.config.markers.hover.size,o=0;o=0){var a=this.ttCtx.tooltipUtil.getPathFromPoint(e[t],i);e[t].setAttribute("d",a)}else e[t].setAttribute("d","M0,0")}}}]),p}(),Ji=function(){function p(e){F(this,p),this.w=e.w;var t=this.w;this.ttCtx=e,this.isVerticalGroupedRangeBar=!t.globals.isBarHorizontal&&t.config.chart.type==="rangeBar"&&t.config.plotOptions.bar.rangeBarGroupRows}return R(p,[{key:"getAttr",value:function(e,t){return parseFloat(e.target.getAttribute(t))}},{key:"handleHeatTreeTooltip",value:function(e){var t=e.e,i=e.opt,a=e.x,s=e.y,r=e.type,n=this.ttCtx,o=this.w;if(t.target.classList.contains("apexcharts-".concat(r,"-rect"))){var h=this.getAttr(t,"i"),c=this.getAttr(t,"j"),d=this.getAttr(t,"cx"),g=this.getAttr(t,"cy"),f=this.getAttr(t,"width"),x=this.getAttr(t,"height");if(n.tooltipLabels.drawSeriesTexts({ttItems:i.ttItems,i:h,j:c,shared:!1,e:t}),o.globals.capturedSeriesIndex=h,o.globals.capturedDataPointIndex=c,a=d+n.tooltipRect.ttWidth/2+f,s=g+n.tooltipRect.ttHeight/2-x/2,n.tooltipPosition.moveXCrosshairs(d+f/2),a>o.globals.gridWidth/2&&(a=d-n.tooltipRect.ttWidth/2+f),n.w.config.tooltip.followCursor){var b=o.globals.dom.elWrap.getBoundingClientRect();a=o.globals.clientX-b.left-(a>o.globals.gridWidth/2?n.tooltipRect.ttWidth:0),s=o.globals.clientY-b.top-(s>o.globals.gridHeight/2?n.tooltipRect.ttHeight:0)}}return{x:a,y:s}}},{key:"handleMarkerTooltip",value:function(e){var t,i,a=e.e,s=e.opt,r=e.x,n=e.y,o=this.w,h=this.ttCtx;if(a.target.classList.contains("apexcharts-marker")){var c=parseInt(s.paths.getAttribute("cx"),10),d=parseInt(s.paths.getAttribute("cy"),10),g=parseFloat(s.paths.getAttribute("val"));if(i=parseInt(s.paths.getAttribute("rel"),10),t=parseInt(s.paths.parentNode.parentNode.parentNode.getAttribute("rel"),10)-1,h.intersect){var f=P.findAncestor(s.paths,"apexcharts-series");f&&(t=parseInt(f.getAttribute("data:realIndex"),10))}if(h.tooltipLabels.drawSeriesTexts({ttItems:s.ttItems,i:t,j:i,shared:!h.showOnIntersect&&o.config.tooltip.shared,e:a}),a.type==="mouseup"&&h.markerClick(a,t,i),o.globals.capturedSeriesIndex=t,o.globals.capturedDataPointIndex=i,r=c,n=d+o.globals.translateY-1.4*h.tooltipRect.ttHeight,h.w.config.tooltip.followCursor){var x=h.getElGrid().getBoundingClientRect();n=h.e.clientY+o.globals.translateY-x.top}g<0&&(n=d),h.marker.enlargeCurrentPoint(i,s.paths,r,n)}return{x:r,y:n}}},{key:"handleBarTooltip",value:function(e){var t,i,a=e.e,s=e.opt,r=this.w,n=this.ttCtx,o=n.getElTooltip(),h=0,c=0,d=0,g=this.getBarTooltipXY({e:a,opt:s});t=g.i;var f=g.j;r.globals.capturedSeriesIndex=t,r.globals.capturedDataPointIndex=f,r.globals.isBarHorizontal&&n.tooltipUtil.hasBars()||!r.config.tooltip.shared?(c=g.x,d=g.y,i=Array.isArray(r.config.stroke.width)?r.config.stroke.width[t]:r.config.stroke.width,h=c):r.globals.comboCharts||r.config.tooltip.shared||(h/=2),isNaN(d)&&(d=r.globals.svgHeight-n.tooltipRect.ttHeight);var x=parseInt(s.paths.parentNode.getAttribute("data:realIndex"),10);if(r.globals.isMultipleYAxis?r.config.yaxis[x]&&r.config.yaxis[x].reversed:r.config.yaxis[0].reversed,c+n.tooltipRect.ttWidth>r.globals.gridWidth?c-=n.tooltipRect.ttWidth:c<0&&(c=0),n.w.config.tooltip.followCursor){var b=n.getElGrid().getBoundingClientRect();d=n.e.clientY-b.top}n.tooltip===null&&(n.tooltip=r.globals.dom.baseEl.querySelector(".apexcharts-tooltip")),r.config.tooltip.shared||(r.globals.comboBarCount>0?n.tooltipPosition.moveXCrosshairs(h+i/2):n.tooltipPosition.moveXCrosshairs(h)),!n.fixedTooltip&&(!r.config.tooltip.shared||r.globals.isBarHorizontal&&n.tooltipUtil.hasBars())&&(d=d+r.globals.translateY-n.tooltipRect.ttHeight/2,o.style.left=c+r.globals.translateX+"px",o.style.top=d+"px")}},{key:"getBarTooltipXY",value:function(e){var t=this,i=e.e,a=e.opt,s=this.w,r=null,n=this.ttCtx,o=0,h=0,c=0,d=0,g=0,f=i.target.classList;if(f.contains("apexcharts-bar-area")||f.contains("apexcharts-candlestick-area")||f.contains("apexcharts-boxPlot-area")||f.contains("apexcharts-rangebar-area")){var x=i.target,b=x.getBoundingClientRect(),v=a.elGrid.getBoundingClientRect(),y=b.height;g=b.height;var w=b.width,l=parseInt(x.getAttribute("cx"),10),u=parseInt(x.getAttribute("cy"),10);d=parseFloat(x.getAttribute("barWidth"));var m=i.type==="touchmove"?i.touches[0].clientX:i.clientX;r=parseInt(x.getAttribute("j"),10),o=parseInt(x.parentNode.getAttribute("rel"),10)-1;var A=x.getAttribute("data-range-y1"),k=x.getAttribute("data-range-y2");s.globals.comboCharts&&(o=parseInt(x.parentNode.getAttribute("data:realIndex"),10));var S=function(C){return s.globals.isXNumeric?l-w/2:t.isVerticalGroupedRangeBar?l+w/2:l-n.dataPointsDividedWidth+w/2},L=function(){return u-n.dataPointsDividedHeight+y/2-n.tooltipRect.ttHeight/2};n.tooltipLabels.drawSeriesTexts({ttItems:a.ttItems,i:o,j:r,y1:A?parseInt(A,10):null,y2:k?parseInt(k,10):null,shared:!n.showOnIntersect&&s.config.tooltip.shared,e:i}),s.config.tooltip.followCursor?s.globals.isBarHorizontal?(h=m-v.left+15,c=L()):(h=S(),c=i.clientY-v.top-n.tooltipRect.ttHeight/2-15):s.globals.isBarHorizontal?((h=l)0&&i.setAttribute("width",t.xcrosshairsWidth)}},{key:"handleYCrosshair",value:function(){var e=this.w,t=this.ttCtx;t.ycrosshairs=e.globals.dom.baseEl.querySelector(".apexcharts-ycrosshairs"),t.ycrosshairsHidden=e.globals.dom.baseEl.querySelector(".apexcharts-ycrosshairs-hidden")}},{key:"drawYaxisTooltipText",value:function(e,t,i){var a=this.ttCtx,s=this.w,r=s.globals,n=r.seriesYAxisMap[e];if(a.yaxisTooltips[e]&&n.length>0){var o=r.yLabelFormatters[e],h=a.getElGrid().getBoundingClientRect(),c=n[0],d=0;i.yRatio.length>1&&(d=c);var g=(t-h.top)*i.yRatio[d],f=r.maxYArr[c]-r.minYArr[c],x=r.minYArr[c]+(f-g);s.config.yaxis[e].reversed&&(x=r.maxYArr[c]-(f-g)),a.tooltipPosition.moveYCrosshairs(t-h.top),a.yaxisTooltipText[e].innerHTML=o(x),a.tooltipPosition.moveYAxisTooltip(e)}}}]),p}(),At=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w;var t=this.w;this.tConfig=t.config.tooltip,this.tooltipUtil=new Nt(this),this.tooltipLabels=new Zi(this),this.tooltipPosition=new Wt(this),this.marker=new $i(this),this.intersect=new Ji(this),this.axesTooltip=new Ki(this),this.showOnIntersect=this.tConfig.intersect,this.showTooltipTitle=this.tConfig.x.show,this.fixedTooltip=this.tConfig.fixed.enabled,this.xaxisTooltip=null,this.yaxisTTEls=null,this.isBarShared=!t.globals.isBarHorizontal&&this.tConfig.shared,this.lastHoverTime=Date.now()}return R(p,[{key:"getElTooltip",value:function(e){return e||(e=this),e.w.globals.dom.baseEl?e.w.globals.dom.baseEl.querySelector(".apexcharts-tooltip"):null}},{key:"getElXCrosshairs",value:function(){return this.w.globals.dom.baseEl.querySelector(".apexcharts-xcrosshairs")}},{key:"getElGrid",value:function(){return this.w.globals.dom.baseEl.querySelector(".apexcharts-grid")}},{key:"drawTooltip",value:function(e){var t=this.w;this.xyRatios=e,this.isXAxisTooltipEnabled=t.config.xaxis.tooltip.enabled&&t.globals.axisCharts,this.yaxisTooltips=t.config.yaxis.map(function(r,n){return!!(r.show&&r.tooltip.enabled&&t.globals.axisCharts)}),this.allTooltipSeriesGroups=[],t.globals.axisCharts||(this.showTooltipTitle=!1);var i=document.createElement("div");if(i.classList.add("apexcharts-tooltip"),t.config.tooltip.cssClass&&i.classList.add(t.config.tooltip.cssClass),i.classList.add("apexcharts-theme-".concat(this.tConfig.theme)),t.globals.dom.elWrap.appendChild(i),t.globals.axisCharts){this.axesTooltip.drawXaxisTooltip(),this.axesTooltip.drawYaxisTooltip(),this.axesTooltip.setXCrosshairWidth(),this.axesTooltip.handleYCrosshair();var a=new Me(this.ctx);this.xAxisTicksPositions=a.getXAxisTicksPositions()}if(!t.globals.comboCharts&&!this.tConfig.intersect&&t.config.chart.type!=="rangeBar"||this.tConfig.shared||(this.showOnIntersect=!0),t.config.markers.size!==0&&t.globals.markers.largestSize!==0||this.marker.drawDynamicPoints(this),t.globals.collapsedSeries.length!==t.globals.series.length){this.dataPointsDividedHeight=t.globals.gridHeight/t.globals.dataPoints,this.dataPointsDividedWidth=t.globals.gridWidth/t.globals.dataPoints,this.showTooltipTitle&&(this.tooltipTitle=document.createElement("div"),this.tooltipTitle.classList.add("apexcharts-tooltip-title"),this.tooltipTitle.style.fontFamily=this.tConfig.style.fontFamily||t.config.chart.fontFamily,this.tooltipTitle.style.fontSize=this.tConfig.style.fontSize,i.appendChild(this.tooltipTitle));var s=t.globals.series.length;(t.globals.xyCharts||t.globals.comboCharts)&&this.tConfig.shared&&(s=this.showOnIntersect?1:t.globals.series.length),this.legendLabels=t.globals.dom.baseEl.querySelectorAll(".apexcharts-legend-text"),this.ttItems=this.createTTElements(s),this.addSVGEvents()}}},{key:"createTTElements",value:function(e){for(var t=this,i=this.w,a=[],s=this.getElTooltip(),r=function(o){var h=document.createElement("div");h.classList.add("apexcharts-tooltip-series-group","apexcharts-tooltip-series-group-".concat(o)),h.style.order=i.config.tooltip.inverseOrder?e-o:o+1;var c=document.createElement("span");c.classList.add("apexcharts-tooltip-marker"),c.style.backgroundColor=i.globals.colors[o],h.appendChild(c);var d=document.createElement("div");d.classList.add("apexcharts-tooltip-text"),d.style.fontFamily=t.tConfig.style.fontFamily||i.config.chart.fontFamily,d.style.fontSize=t.tConfig.style.fontSize,["y","goals","z"].forEach(function(g){var f=document.createElement("div");f.classList.add("apexcharts-tooltip-".concat(g,"-group"));var x=document.createElement("span");x.classList.add("apexcharts-tooltip-text-".concat(g,"-label")),f.appendChild(x);var b=document.createElement("span");b.classList.add("apexcharts-tooltip-text-".concat(g,"-value")),f.appendChild(b),d.appendChild(f)}),h.appendChild(d),s.appendChild(h),a.push(h)},n=0;n0&&this.addPathsEventListeners(x,d),this.tooltipUtil.hasBars()&&!this.tConfig.shared&&this.addDatapointEventsListeners(d)}}},{key:"drawFixedTooltipRect",value:function(){var e=this.w,t=this.getElTooltip(),i=t.getBoundingClientRect(),a=i.width+10,s=i.height+10,r=this.tConfig.fixed.offsetX,n=this.tConfig.fixed.offsetY,o=this.tConfig.fixed.position.toLowerCase();return o.indexOf("right")>-1&&(r=r+e.globals.svgWidth-a+10),o.indexOf("bottom")>-1&&(n=n+e.globals.svgHeight-s-10),t.style.left=r+"px",t.style.top=n+"px",{x:r,y:n,ttWidth:a,ttHeight:s}}},{key:"addDatapointEventsListeners",value:function(e){var t=this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-series-markers .apexcharts-marker, .apexcharts-bar-area, .apexcharts-candlestick-area, .apexcharts-boxPlot-area, .apexcharts-rangebar-area");this.addPathsEventListeners(t,e)}},{key:"addPathsEventListeners",value:function(e,t){for(var i=this,a=function(r){var n={paths:e[r],tooltipEl:t.tooltipEl,tooltipY:t.tooltipY,tooltipX:t.tooltipX,elGrid:t.elGrid,hoverArea:t.hoverArea,ttItems:t.ttItems};["mousemove","mouseup","touchmove","mouseout","touchend"].map(function(o){return e[r].addEventListener(o,i.onSeriesHover.bind(i,n),{capture:!1,passive:!0})})},s=0;s=100?this.seriesHover(e,t):(clearTimeout(this.seriesHoverTimeout),this.seriesHoverTimeout=setTimeout(function(){i.seriesHover(e,t)},100-a))}},{key:"seriesHover",value:function(e,t){var i=this;this.lastHoverTime=Date.now();var a=[],s=this.w;s.config.chart.group&&(a=this.ctx.getGroupedCharts()),s.globals.axisCharts&&(s.globals.minX===-1/0&&s.globals.maxX===1/0||s.globals.dataPoints===0)||(a.length?a.forEach(function(r){var n=i.getElTooltip(r),o={paths:e.paths,tooltipEl:n,tooltipY:e.tooltipY,tooltipX:e.tooltipX,elGrid:e.elGrid,hoverArea:e.hoverArea,ttItems:r.w.globals.tooltip.ttItems};r.w.globals.minX===i.w.globals.minX&&r.w.globals.maxX===i.w.globals.maxX&&r.w.globals.tooltip.seriesHoverByContext({chartCtx:r,ttCtx:r.w.globals.tooltip,opt:o,e:t})}):this.seriesHoverByContext({chartCtx:this.ctx,ttCtx:this.w.globals.tooltip,opt:e,e:t}))}},{key:"seriesHoverByContext",value:function(e){var t=e.chartCtx,i=e.ttCtx,a=e.opt,s=e.e,r=t.w,n=this.getElTooltip(t);n&&(i.tooltipRect={x:0,y:0,ttWidth:n.getBoundingClientRect().width,ttHeight:n.getBoundingClientRect().height},i.e=s,i.tooltipUtil.hasBars()&&!r.globals.comboCharts&&!i.isBarShared&&this.tConfig.onDatasetHover.highlightDataSeries&&new re(t).toggleSeriesOnHover(s,s.target.parentNode),i.fixedTooltip&&i.drawFixedTooltipRect(),r.globals.axisCharts?i.axisChartsTooltips({e:s,opt:a,tooltipRect:i.tooltipRect}):i.nonAxisChartsTooltips({e:s,opt:a,tooltipRect:i.tooltipRect}))}},{key:"axisChartsTooltips",value:function(e){var t,i,a=e.e,s=e.opt,r=this.w,n=s.elGrid.getBoundingClientRect(),o=a.type==="touchmove"?a.touches[0].clientX:a.clientX,h=a.type==="touchmove"?a.touches[0].clientY:a.clientY;if(this.clientY=h,this.clientX=o,r.globals.capturedSeriesIndex=-1,r.globals.capturedDataPointIndex=-1,hn.top+n.height)this.handleMouseOut(s);else{if(Array.isArray(this.tConfig.enabledOnSeries)&&!r.config.tooltip.shared){var c=parseInt(s.paths.getAttribute("index"),10);if(this.tConfig.enabledOnSeries.indexOf(c)<0)return void this.handleMouseOut(s)}var d=this.getElTooltip(),g=this.getElXCrosshairs(),f=[];r.config.chart.group&&(f=this.ctx.getSyncedCharts());var x=r.globals.xyCharts||r.config.chart.type==="bar"&&!r.globals.isBarHorizontal&&this.tooltipUtil.hasBars()&&this.tConfig.shared||r.globals.comboCharts&&this.tooltipUtil.hasBars();if(a.type==="mousemove"||a.type==="touchmove"||a.type==="mouseup"){if(r.globals.collapsedSeries.length+r.globals.ancillaryCollapsedSeries.length===r.globals.series.length)return;g!==null&&g.classList.add("apexcharts-active");var b=this.yaxisTooltips.filter(function(w){return w===!0});if(this.ycrosshairs!==null&&b.length&&this.ycrosshairs.classList.add("apexcharts-active"),x&&!this.showOnIntersect||f.length>1)this.handleStickyTooltip(a,o,h,s);else if(r.config.chart.type==="heatmap"||r.config.chart.type==="treemap"){var v=this.intersect.handleHeatTreeTooltip({e:a,opt:s,x:t,y:i,type:r.config.chart.type});t=v.x,i=v.y,d.style.left=t+"px",d.style.top=i+"px"}else this.tooltipUtil.hasBars()&&this.intersect.handleBarTooltip({e:a,opt:s}),this.tooltipUtil.hasMarkers()&&this.intersect.handleMarkerTooltip({e:a,opt:s,x:t,y:i});if(this.yaxisTooltips.length)for(var y=0;yh.width)this.handleMouseOut(a);else if(o!==null)this.handleStickyCapturedSeries(e,o,a,n);else if(this.tooltipUtil.isXoverlap(n)||s.globals.isBarHorizontal){var c=s.globals.series.findIndex(function(d,g){return!s.globals.collapsedSeriesIndices.includes(g)});this.create(e,this,c,n,a.ttItems)}}},{key:"handleStickyCapturedSeries",value:function(e,t,i,a){var s=this.w;if(!this.tConfig.shared&&s.globals.series[t][a]===null)return void this.handleMouseOut(i);if(s.globals.series[t][a]!==void 0)this.tConfig.shared&&this.tooltipUtil.isXoverlap(a)&&this.tooltipUtil.isInitialSeriesSameLen()?this.create(e,this,t,a,i.ttItems):this.create(e,this,t,a,i.ttItems,!1);else if(this.tooltipUtil.isXoverlap(a)){var r=s.globals.series.findIndex(function(n,o){return!s.globals.collapsedSeriesIndices.includes(o)});this.create(e,this,r,a,i.ttItems)}}},{key:"deactivateHoverFilter",value:function(){for(var e=this.w,t=new X(this.ctx),i=e.globals.dom.Paper.select(".apexcharts-bar-area"),a=0;a5&&arguments[5]!==void 0?arguments[5]:null,k=this.w,S=t;e.type==="mouseup"&&this.markerClick(e,i,a),A===null&&(A=this.tConfig.shared);var L=this.tooltipUtil.hasMarkers(i),C=this.tooltipUtil.getElBars();if(k.config.legend.tooltipHoverFormatter){var I=k.config.legend.tooltipHoverFormatter,z=Array.from(this.legendLabels);z.forEach(function(q){var Z=q.getAttribute("data:default-text");q.innerHTML=decodeURIComponent(Z)});for(var M=0;M0?S.marker.enlargePoints(a):S.tooltipPosition.moveDynamicPointsOnHover(a);else if(this.tooltipUtil.hasBars()&&(this.barSeriesHeight=this.tooltipUtil.getBarsHeight(C),this.barSeriesHeight>0)){var W=new X(this.ctx),N=k.globals.dom.Paper.select(".apexcharts-bar-area[j='".concat(a,"']"));this.deactivateHoverFilter(),this.tooltipPosition.moveStickyTooltipOverBars(a,i);for(var B=0;B0&&t.config.plotOptions.bar.hideZeroBarsWhenGrouped&&(f-=c*k)),A&&(f=f+g.height/2-w/2-2);var L=t.globals.series[i][a]<0,C=o;switch(this.barCtx.isReversed&&(C=o+(L?d:-d)),v.position){case"center":x=A?L?C-d/2+u:C+d/2-u:L?C-d/2+g.height/2+u:C+d/2+g.height/2-u;break;case"bottom":x=A?L?C-d+u:C+d-u:L?C-d+g.height+w+u:C+d-g.height/2+w-u;break;case"top":x=A?L?C+u:C-u:L?C-g.height/2-u:C+g.height+u}if(this.barCtx.lastActiveBarSerieIndex===s&&y.enabled){var I=new X(this.barCtx.ctx).getTextRects(this.getStackedTotalDataLabel({realIndex:s,j:a}),b.fontSize);r=L?C-I.height/2-u-y.offsetY+18:C+I.height+u+y.offsetY-18;var z=S;n=m+(t.globals.isXNumeric?-c*t.globals.barGroups.length/2:t.globals.barGroups.length*c/2-(t.globals.barGroups.length-1)*c-z)+y.offsetX}return t.config.chart.stacked||(x<0?x=0+w:x+g.height/3>t.globals.gridHeight&&(x=t.globals.gridHeight-w)),{bcx:h,bcy:o,dataLabelsX:f,dataLabelsY:x,totalDataLabelsX:n,totalDataLabelsY:r,totalDataLabelsAnchor:"middle"}}},{key:"calculateBarsDataLabelsPosition",value:function(e){var t=this.w,i=e.x,a=e.i,s=e.j,r=e.realIndex,n=e.bcy,o=e.barHeight,h=e.barWidth,c=e.textRects,d=e.dataLabelsX,g=e.strokeWidth,f=e.dataLabelsConfig,x=e.barDataLabelsConfig,b=e.barTotalDataLabelsConfig,v=e.offX,y=e.offY,w=t.globals.gridHeight/t.globals.dataPoints;h=Math.abs(h);var l,u,m=n-(this.barCtx.isRangeBar?0:w)+o/2+c.height/2+y-3,A="start",k=t.globals.series[a][s]<0,S=i;switch(this.barCtx.isReversed&&(S=i+(k?-h:h),A=k?"start":"end"),x.position){case"center":d=k?S+h/2-v:Math.max(c.width/2,S-h/2)+v;break;case"bottom":d=k?S+h-g-v:S-h+g+v;break;case"top":d=k?S-g-v:S-g+v}if(this.barCtx.lastActiveBarSerieIndex===r&&b.enabled){var L=new X(this.barCtx.ctx).getTextRects(this.getStackedTotalDataLabel({realIndex:r,j:s}),f.fontSize);k?(l=S-g-v-b.offsetX,A="end"):l=S+v+b.offsetX+(this.barCtx.isReversed?-(h+g):g),u=m-c.height/2+L.height/2+b.offsetY+g}return t.config.chart.stacked||(f.textAnchor==="start"?d-c.width<0?d=k?c.width+g:g:d+c.width>t.globals.gridWidth&&(d=k?t.globals.gridWidth-g:t.globals.gridWidth-c.width-g):f.textAnchor==="middle"?d-c.width/2<0?d=c.width/2+g:d+c.width/2>t.globals.gridWidth&&(d=t.globals.gridWidth-c.width/2-g):f.textAnchor==="end"&&(d<1?d=c.width+g:d+1>t.globals.gridWidth&&(d=t.globals.gridWidth-c.width-g))),{bcx:i,bcy:n,dataLabelsX:d,dataLabelsY:m,totalDataLabelsX:l,totalDataLabelsY:u,totalDataLabelsAnchor:A}}},{key:"drawCalculatedDataLabels",value:function(e){var t=e.x,i=e.y,a=e.val,s=e.i,r=e.j,n=e.textRects,o=e.barHeight,h=e.barWidth,c=e.dataLabelsConfig,d=this.w,g="rotate(0)";d.config.plotOptions.bar.dataLabels.orientation==="vertical"&&(g="rotate(-90, ".concat(t,", ").concat(i,")"));var f=new be(this.barCtx.ctx),x=new X(this.barCtx.ctx),b=c.formatter,v=null,y=d.globals.collapsedSeriesIndices.indexOf(s)>-1;if(c.enabled&&!y){v=x.group({class:"apexcharts-data-labels",transform:g});var w="";a!==void 0&&(w=b(a,Y(Y({},d),{},{seriesIndex:s,dataPointIndex:r,w:d}))),!a&&d.config.plotOptions.bar.hideZeroBarsWhenGrouped&&(w="");var l=d.globals.series[s][r]<0,u=d.config.plotOptions.bar.dataLabels.position;d.config.plotOptions.bar.dataLabels.orientation==="vertical"&&(u==="top"&&(c.textAnchor=l?"end":"start"),u==="center"&&(c.textAnchor="middle"),u==="bottom"&&(c.textAnchor=l?"end":"start")),this.barCtx.isRangeBar&&this.barCtx.barOptions.dataLabels.hideOverflowingLabels&&hMath.abs(h)&&(w=""):n.height/1.6>Math.abs(o)&&(w=""));var m=Y({},c);this.barCtx.isHorizontal&&a<0&&(c.textAnchor==="start"?m.textAnchor="end":c.textAnchor==="end"&&(m.textAnchor="start")),f.plotDataLabelsText({x:t,y:i,text:w,i:s,j:r,parent:v,dataLabelsConfig:m,alwaysDrawDataLabel:!0,offsetCorrection:!0})}return v}},{key:"drawTotalDataLabels",value:function(e){var t=e.x,i=e.y,a=e.val,s=e.realIndex,r=e.textAnchor,n=e.barTotalDataLabelsConfig;this.w;var o,h=new X(this.barCtx.ctx);return n.enabled&&t!==void 0&&i!==void 0&&this.barCtx.lastActiveBarSerieIndex===s&&(o=h.drawText({x:t,y:i,foreColor:n.style.color,text:a,textAnchor:r,fontFamily:n.style.fontFamily,fontSize:n.style.fontSize,fontWeight:n.style.fontWeight})),o}}]),p}(),ea=function(){function p(e){F(this,p),this.w=e.w,this.barCtx=e}return R(p,[{key:"initVariables",value:function(e){var t=this.w;this.barCtx.series=e,this.barCtx.totalItems=0,this.barCtx.seriesLen=0,this.barCtx.visibleI=-1,this.barCtx.visibleItems=1;for(var i=0;i0&&(this.barCtx.seriesLen=this.barCtx.seriesLen+1,this.barCtx.totalItems+=e[i].length),t.globals.isXNumeric)for(var a=0;at.globals.minX&&t.globals.seriesX[i][a]0&&(a=h.globals.minXDiff/g),(r=a/d*parseInt(this.barCtx.barOptions.columnWidth,10)/100)<1&&(r=1)}String(this.barCtx.barOptions.columnWidth).indexOf("%")===-1&&(r=parseInt(this.barCtx.barOptions.columnWidth,10)),n=h.globals.gridHeight-this.barCtx.baseLineY[this.barCtx.translationsIndex]-(this.barCtx.isReversed?h.globals.gridHeight:0)+(this.barCtx.isReversed?2*this.barCtx.baseLineY[this.barCtx.translationsIndex]:0),e=h.globals.padHorizontal+(a-r*this.barCtx.seriesLen)/2}return h.globals.barHeight=s,h.globals.barWidth=r,{x:e,y:t,yDivision:i,xDivision:a,barHeight:s,barWidth:r,zeroH:n,zeroW:o}}},{key:"initializeStackedPrevVars",value:function(e){e.w.globals.seriesGroups.forEach(function(t){e[t]||(e[t]={}),e[t].prevY=[],e[t].prevX=[],e[t].prevYF=[],e[t].prevXF=[],e[t].prevYVal=[],e[t].prevXVal=[]})}},{key:"initializeStackedXYVars",value:function(e){e.w.globals.seriesGroups.forEach(function(t){e[t]||(e[t]={}),e[t].xArrj=[],e[t].xArrjF=[],e[t].xArrjVal=[],e[t].yArrj=[],e[t].yArrjF=[],e[t].yArrjVal=[]})}},{key:"getPathFillColor",value:function(e,t,i,a){var s,r,n,o,h,c=this.w,d=this.barCtx.ctx.fill,g=null,f=this.barCtx.barOptions.distributed?i:t;return this.barCtx.barOptions.colors.ranges.length>0&&this.barCtx.barOptions.colors.ranges.map(function(x){e[t][i]>=x.from&&e[t][i]<=x.to&&(g=x.color)}),(s=c.config.series[t].data[i])!==null&&s!==void 0&&s.fillColor&&(g=c.config.series[t].data[i].fillColor),d.fillPath({seriesNumber:this.barCtx.barOptions.distributed?f:a,dataPointIndex:i,color:g,value:e[t][i],fillConfig:(r=c.config.series[t].data[i])===null||r===void 0?void 0:r.fill,fillType:(n=c.config.series[t].data[i])!==null&&n!==void 0&&(o=n.fill)!==null&&o!==void 0&&o.type?(h=c.config.series[t].data[i])===null||h===void 0?void 0:h.fill.type:Array.isArray(c.config.fill.type)?c.config.fill.type[a]:c.config.fill.type})}},{key:"getStrokeWidth",value:function(e,t,i){var a=0,s=this.w;return this.barCtx.series[e][t]===void 0||this.barCtx.series[e][t]===null?this.barCtx.isNullValue=!0:this.barCtx.isNullValue=!1,s.config.stroke.show&&(this.barCtx.isNullValue||(a=Array.isArray(this.barCtx.strokeWidth)?this.barCtx.strokeWidth[i]:this.barCtx.strokeWidth)),a}},{key:"shouldApplyRadius",value:function(e){var t=this.w,i=!1;return t.config.plotOptions.bar.borderRadius>0&&(t.config.chart.stacked&&t.config.plotOptions.bar.borderRadiusWhenStacked==="last"?this.barCtx.lastActiveBarSerieIndex===e&&(i=!0):i=!0),i}},{key:"barBackground",value:function(e){var t=e.j,i=e.i,a=e.x1,s=e.x2,r=e.y1,n=e.y2,o=e.elSeries,h=this.w,c=new X(this.barCtx.ctx),d=new re(this.barCtx.ctx).getActiveConfigSeriesIndex();if(this.barCtx.barOptions.colors.backgroundBarColors.length>0&&d===i){t>=this.barCtx.barOptions.colors.backgroundBarColors.length&&(t%=this.barCtx.barOptions.colors.backgroundBarColors.length);var g=this.barCtx.barOptions.colors.backgroundBarColors[t],f=c.drawRect(a!==void 0?a:0,r!==void 0?r:0,s!==void 0?s:h.globals.gridWidth,n!==void 0?n:h.globals.gridHeight,this.barCtx.barOptions.colors.backgroundBarRadius,g,this.barCtx.barOptions.colors.backgroundBarOpacity);o.add(f),f.node.classList.add("apexcharts-backgroundBar")}}},{key:"getColumnPaths",value:function(e){var t,i=e.barWidth,a=e.barXPosition,s=e.y1,r=e.y2,n=e.strokeWidth,o=e.seriesGroup,h=e.realIndex,c=e.i,d=e.j,g=e.w,f=new X(this.barCtx.ctx);(n=Array.isArray(n)?n[h]:n)||(n=0);var x=i,b=a;(t=g.config.series[h].data[d])!==null&&t!==void 0&&t.columnWidthOffset&&(b=a-g.config.series[h].data[d].columnWidthOffset/2,x=i+g.config.series[h].data[d].columnWidthOffset);var v=n/2,y=b+v,w=b+x-v;s+=.001-v,r+=.001+v;var l=f.move(y,s),u=f.move(y,s),m=f.line(w,s);if(g.globals.previousPaths.length>0&&(u=this.barCtx.getPreviousPath(h,d,!1)),l=l+f.line(y,r)+f.line(w,r)+f.line(w,s)+(g.config.plotOptions.bar.borderRadiusApplication==="around"?" Z":" z"),u=u+f.line(y,s)+m+m+m+m+m+f.line(y,s)+(g.config.plotOptions.bar.borderRadiusApplication==="around"?" Z":" z"),this.shouldApplyRadius(h)&&(l=f.roundPathCorners(l,g.config.plotOptions.bar.borderRadius)),g.config.chart.stacked){var A=this.barCtx;(A=this.barCtx[o]).yArrj.push(r-v),A.yArrjF.push(Math.abs(s-r+n)),A.yArrjVal.push(this.barCtx.series[c][d])}return{pathTo:l,pathFrom:u}}},{key:"getBarpaths",value:function(e){var t,i=e.barYPosition,a=e.barHeight,s=e.x1,r=e.x2,n=e.strokeWidth,o=e.seriesGroup,h=e.realIndex,c=e.i,d=e.j,g=e.w,f=new X(this.barCtx.ctx);(n=Array.isArray(n)?n[h]:n)||(n=0);var x=i,b=a;(t=g.config.series[h].data[d])!==null&&t!==void 0&&t.barHeightOffset&&(x=i-g.config.series[h].data[d].barHeightOffset/2,b=a+g.config.series[h].data[d].barHeightOffset);var v=n/2,y=x+v,w=x+b-v;s+=.001-v,r+=.001+v;var l=f.move(s,y),u=f.move(s,y);g.globals.previousPaths.length>0&&(u=this.barCtx.getPreviousPath(h,d,!1));var m=f.line(s,w);if(l=l+f.line(r,y)+f.line(r,w)+m+(g.config.plotOptions.bar.borderRadiusApplication==="around"?" Z":" z"),u=u+f.line(s,y)+m+m+m+m+m+f.line(s,y)+(g.config.plotOptions.bar.borderRadiusApplication==="around"?" Z":" z"),this.shouldApplyRadius(h)&&(l=f.roundPathCorners(l,g.config.plotOptions.bar.borderRadius)),g.config.chart.stacked){var A=this.barCtx;(A=this.barCtx[o]).xArrj.push(r+v),A.xArrjF.push(Math.abs(s-r)),A.xArrjVal.push(this.barCtx.series[c][d])}return{pathTo:l,pathFrom:u}}},{key:"checkZeroSeries",value:function(e){for(var t=e.series,i=this.w,a=0;a2&&arguments[2]!==void 0)||arguments[2]?t:null;return e!=null&&(i=t+e/this.barCtx.invertedYRatio-2*(this.barCtx.isReversed?e/this.barCtx.invertedYRatio:0)),i}},{key:"getYForValue",value:function(e,t,i){var a=!(arguments.length>3&&arguments[3]!==void 0)||arguments[3]?t:null;return e!=null&&(a=t-e/this.barCtx.yRatio[i]+2*(this.barCtx.isReversed?e/this.barCtx.yRatio[i]:0)),a}},{key:"getGoalValues",value:function(e,t,i,a,s,r){var n=this,o=this.w,h=[],c=function(f,x){var b;h.push((Oe(b={},e,e==="x"?n.getXForValue(f,t,!1):n.getYForValue(f,i,r,!1)),Oe(b,"attrs",x),b))};if(o.globals.seriesGoals[a]&&o.globals.seriesGoals[a][s]&&Array.isArray(o.globals.seriesGoals[a][s])&&o.globals.seriesGoals[a][s].forEach(function(f){c(f.value,f)}),this.barCtx.barOptions.isDumbbell&&o.globals.seriesRange.length){var d=this.barCtx.barOptions.dumbbellColors?this.barCtx.barOptions.dumbbellColors:o.globals.colors,g={strokeHeight:e==="x"?0:o.globals.markers.size[a],strokeWidth:e==="x"?o.globals.markers.size[a]:0,strokeDashArray:0,strokeLineCap:"round",strokeColor:Array.isArray(d[a])?d[a][0]:d[a]};c(o.globals.seriesRangeStart[a][s],g),c(o.globals.seriesRangeEnd[a][s],Y(Y({},g),{},{strokeColor:Array.isArray(d[a])?d[a][1]:d[a]}))}return h}},{key:"drawGoalLine",value:function(e){var t=e.barXPosition,i=e.barYPosition,a=e.goalX,s=e.goalY,r=e.barWidth,n=e.barHeight,o=new X(this.barCtx.ctx),h=o.group({className:"apexcharts-bar-goals-groups"});h.node.classList.add("apexcharts-element-hidden"),this.barCtx.w.globals.delayedElements.push({el:h.node}),h.attr("clip-path","url(#gridRectMarkerMask".concat(this.barCtx.w.globals.cuid,")"));var c=null;return this.barCtx.isHorizontal?Array.isArray(a)&&a.forEach(function(d){if(d.x>=-1&&d.x<=o.w.globals.gridWidth+1){var g=d.attrs.strokeHeight!==void 0?d.attrs.strokeHeight:n/2,f=i+g+n/2;c=o.drawLine(d.x,f-2*g,d.x,f,d.attrs.strokeColor?d.attrs.strokeColor:void 0,d.attrs.strokeDashArray,d.attrs.strokeWidth?d.attrs.strokeWidth:2,d.attrs.strokeLineCap),h.add(c)}}):Array.isArray(s)&&s.forEach(function(d){if(d.y>=-1&&d.y<=o.w.globals.gridHeight+1){var g=d.attrs.strokeWidth!==void 0?d.attrs.strokeWidth:r/2,f=t+g+r/2;c=o.drawLine(f-2*g,d.y,f,d.y,d.attrs.strokeColor?d.attrs.strokeColor:void 0,d.attrs.strokeDashArray,d.attrs.strokeHeight?d.attrs.strokeHeight:2,d.attrs.strokeLineCap),h.add(c)}}),h}},{key:"drawBarShadow",value:function(e){var t=e.prevPaths,i=e.currPaths,a=e.color,s=this.w,r=t.x,n=t.x1,o=t.barYPosition,h=i.x,c=i.x1,d=i.barYPosition,g=o+i.barHeight,f=new X(this.barCtx.ctx),x=new P,b=f.move(n,g)+f.line(r,g)+f.line(h,d)+f.line(c,d)+f.line(n,g)+(s.config.plotOptions.bar.borderRadiusApplication==="around"?" Z":" z");return f.drawPath({d:b,fill:x.shadeColor(.5,P.rgb2hex(a)),stroke:"none",strokeWidth:0,fillOpacity:1,classes:"apexcharts-bar-shadows"})}},{key:"getZeroValueEncounters",value:function(e){var t,i=e.i,a=e.j,s=this.w,r=0,n=0;return(s.config.plotOptions.bar.horizontal?s.globals.series.map(function(o,h){return h}):((t=s.globals.columnSeries)===null||t===void 0?void 0:t.i.map(function(o){return o}))||[]).forEach(function(o){var h=s.globals.seriesPercent[o][a];h&&r++,o-1}),a=this.barCtx.columnGroupIndices,s=a.indexOf(i);return s<0&&(a.push(i),s=a.length-1),{groupIndex:i,columnGroupIndex:s}}}]),p}(),me=function(){function p(e,t){F(this,p),this.ctx=e,this.w=e.w;var i=this.w;this.barOptions=i.config.plotOptions.bar,this.isHorizontal=this.barOptions.horizontal,this.strokeWidth=i.config.stroke.width,this.isNullValue=!1,this.isRangeBar=i.globals.seriesRange.length&&this.isHorizontal,this.isVerticalGroupedRangeBar=!i.globals.isBarHorizontal&&i.globals.seriesRange.length&&i.config.plotOptions.bar.rangeBarGroupRows,this.isFunnel=this.barOptions.isFunnel,this.xyRatios=t,this.xyRatios!==null&&(this.xRatio=t.xRatio,this.yRatio=t.yRatio,this.invertedXRatio=t.invertedXRatio,this.invertedYRatio=t.invertedYRatio,this.baseLineY=t.baseLineY,this.baseLineInvertedY=t.baseLineInvertedY),this.yaxisIndex=0,this.translationsIndex=0,this.seriesLen=0,this.pathArr=[];var a=new re(this.ctx);this.lastActiveBarSerieIndex=a.getActiveConfigSeriesIndex("desc",["bar","column"]),this.columnGroupIndices=[];var s=a.getBarSeriesIndices(),r=new $(this.ctx);this.stackedSeriesTotals=r.getStackedSeriesTotals(this.w.config.series.map(function(n,o){return s.indexOf(o)===-1?o:-1}).filter(function(n){return n!==-1})),this.barHelpers=new ea(this)}return R(p,[{key:"draw",value:function(e,t){var i=this.w,a=new X(this.ctx),s=new $(this.ctx,i);e=s.getLogSeries(e),this.series=e,this.yRatio=s.getLogYRatios(this.yRatio),this.barHelpers.initVariables(e);var r=a.group({class:"apexcharts-bar-series apexcharts-plot-series"});i.config.dataLabels.enabled&&this.totalItems>this.barOptions.dataLabels.maxItems&&console.warn("WARNING: DataLabels are enabled but there are too many to display. This may cause performance issue when rendering - ApexCharts");for(var n=0,o=0;n0&&(this.visibleI=this.visibleI+1);var u=0,m=0;this.yRatio.length>1&&(this.yaxisIndex=i.globals.seriesYAxisReverseMap[y],this.translationsIndex=y);var A=this.translationsIndex;this.isReversed=i.config.yaxis[this.yaxisIndex]&&i.config.yaxis[this.yaxisIndex].reversed;var k=this.barHelpers.initialPositions();x=k.y,u=k.barHeight,c=k.yDivision,g=k.zeroW,f=k.x,m=k.barWidth,h=k.xDivision,d=k.zeroH,this.horizontal||v.push(f+m/2);var S=a.group({class:"apexcharts-datalabels","data:realIndex":y});i.globals.delayedElements.push({el:S.node}),S.node.classList.add("apexcharts-element-hidden");var L=a.group({class:"apexcharts-bar-goals-markers"}),C=a.group({class:"apexcharts-bar-shadows"});i.globals.delayedElements.push({el:C.node}),C.node.classList.add("apexcharts-element-hidden");for(var I=0;I0){var O=this.barHelpers.drawBarShadow({color:typeof E=="string"&&E?.indexOf("url")===-1?E:P.hexToRgba(i.globals.colors[n]),prevPaths:this.pathArr[this.pathArr.length-1],currPaths:M});O&&C.add(O)}this.pathArr.push(M);var D=this.barHelpers.drawGoalLine({barXPosition:M.barXPosition,barYPosition:M.barYPosition,goalX:M.goalX,goalY:M.goalY,barHeight:u,barWidth:m});D&&L.add(D),x=M.y,f=M.x,I>0&&v.push(f+m/2),b.push(x),this.renderSeries({realIndex:y,pathFill:E,j:I,i:n,columnGroupIndex:w,pathFrom:M.pathFrom,pathTo:M.pathTo,strokeWidth:z,elSeries:l,x:f,y:x,series:e,barHeight:Math.abs(M.barHeight?M.barHeight:u),barWidth:Math.abs(M.barWidth?M.barWidth:m),elDataLabelsWrap:S,elGoalsMarkers:L,elBarShadows:C,visibleSeries:this.visibleI,type:"bar"})}i.globals.seriesXvalues[y]=v,i.globals.seriesYvalues[y]=b,r.add(l)}return r}},{key:"renderSeries",value:function(e){var t=e.realIndex,i=e.pathFill,a=e.lineFill,s=e.j,r=e.i,n=e.columnGroupIndex,o=e.pathFrom,h=e.pathTo,c=e.strokeWidth,d=e.elSeries,g=e.x,f=e.y,x=e.y1,b=e.y2,v=e.series,y=e.barHeight,w=e.barWidth,l=e.barXPosition,u=e.barYPosition,m=e.elDataLabelsWrap,A=e.elGoalsMarkers,k=e.elBarShadows,S=e.visibleSeries,L=e.type,C=this.w,I=new X(this.ctx);if(!a){var z=typeof C.globals.stroke.colors[t]=="function"?function(D){var H,W=C.config.stroke.colors;return Array.isArray(W)&&W.length>0&&((H=W[D])||(H=""),typeof H=="function")?H({value:C.globals.series[D][s],dataPointIndex:s,w:C}):H}(t):C.globals.stroke.colors[t];a=this.barOptions.distributed?C.globals.stroke.colors[s]:z}C.config.series[r].data[s]&&C.config.series[r].data[s].strokeColor&&(a=C.config.series[r].data[s].strokeColor),this.isNullValue&&(i="none");var M=s/C.config.chart.animations.animateGradually.delay*(C.config.chart.animations.speed/C.globals.dataPoints)/2.4,T=I.renderPaths({i:r,j:s,realIndex:t,pathFrom:o,pathTo:h,stroke:a,strokeWidth:c,strokeLineCap:C.config.stroke.lineCap,fill:i,animationDelay:M,initialSpeed:C.config.chart.animations.speed,dataChangeSpeed:C.config.chart.animations.dynamicAnimation.speed,className:"apexcharts-".concat(L,"-area")});T.attr("clip-path","url(#gridRectMask".concat(C.globals.cuid,")"));var E=C.config.forecastDataPoints;E.count>0&&s>=C.globals.dataPoints-E.count&&(T.node.setAttribute("stroke-dasharray",E.dashArray),T.node.setAttribute("stroke-width",E.strokeWidth),T.node.setAttribute("fill-opacity",E.fillOpacity)),x!==void 0&&b!==void 0&&(T.attr("data-range-y1",x),T.attr("data-range-y2",b)),new ie(this.ctx).setSelectionFilter(T,t,s),d.add(T);var O=new Qi(this).handleBarDataLabels({x:g,y:f,y1:x,y2:b,i:r,j:s,series:v,realIndex:t,columnGroupIndex:n,barHeight:y,barWidth:w,barXPosition:l,barYPosition:u,renderedPath:T,visibleSeries:S});return O.dataLabels!==null&&m.add(O.dataLabels),O.totalDataLabels&&m.add(O.totalDataLabels),d.add(m),A&&d.add(A),k&&d.add(k),d}},{key:"drawBarPaths",value:function(e){var t,i=e.indexes,a=e.barHeight,s=e.strokeWidth,r=e.zeroW,n=e.x,o=e.y,h=e.yDivision,c=e.elSeries,d=this.w,g=i.i,f=i.j;if(d.globals.isXNumeric)t=(o=(d.globals.seriesX[g][f]-d.globals.minX)/this.invertedXRatio-a)+a*this.visibleI;else if(d.config.plotOptions.bar.hideZeroBarsWhenGrouped){var x=0,b=0;d.globals.seriesPercent.forEach(function(y,w){y[f]&&x++,w0&&(a=this.seriesLen*a/x),t=o+a*this.visibleI,t-=a*b}else t=o+a*this.visibleI;this.isFunnel&&(r-=(this.barHelpers.getXForValue(this.series[g][f],r)-r)/2),n=this.barHelpers.getXForValue(this.series[g][f],r);var v=this.barHelpers.getBarpaths({barYPosition:t,barHeight:a,x1:r,x2:n,strokeWidth:s,series:this.series,realIndex:i.realIndex,i:g,j:f,w:d});return d.globals.isXNumeric||(o+=h),this.barHelpers.barBackground({j:f,i:g,y1:t-a*this.visibleI,y2:a*this.seriesLen,elSeries:c}),{pathTo:v.pathTo,pathFrom:v.pathFrom,x1:r,x:n,y:o,goalX:this.barHelpers.getGoalValues("x",r,null,g,f),barYPosition:t,barHeight:a}}},{key:"drawColumnPaths",value:function(e){var t,i=e.indexes,a=e.x,s=e.y,r=e.xDivision,n=e.barWidth,o=e.zeroH,h=e.strokeWidth,c=e.elSeries,d=this.w,g=i.realIndex,f=i.translationsIndex,x=i.i,b=i.j,v=i.bc;if(d.globals.isXNumeric){var y=this.getBarXForNumericXAxis({x:a,j:b,realIndex:g,barWidth:n});a=y.x,t=y.barXPosition}else if(d.config.plotOptions.bar.hideZeroBarsWhenGrouped){var w=this.barHelpers.getZeroValueEncounters({i:x,j:b}),l=w.nonZeroColumns,u=w.zeroEncounters;l>0&&(n=this.seriesLen*n/l),t=a+n*this.visibleI,t-=n*u}else t=a+n*this.visibleI;s=this.barHelpers.getYForValue(this.series[x][b],o,f);var m=this.barHelpers.getColumnPaths({barXPosition:t,barWidth:n,y1:o,y2:s,strokeWidth:h,series:this.series,realIndex:g,i:x,j:b,w:d});return d.globals.isXNumeric||(a+=r),this.barHelpers.barBackground({bc:v,j:b,i:x,x1:t-h/2-n*this.visibleI,x2:n*this.seriesLen+h/2,elSeries:c}),{pathTo:m.pathTo,pathFrom:m.pathFrom,x:a,y:s,goalY:this.barHelpers.getGoalValues("y",null,o,x,b,f),barXPosition:t,barWidth:n}}},{key:"getBarXForNumericXAxis",value:function(e){var t=e.x,i=e.barWidth,a=e.realIndex,s=e.j,r=this.w,n=a;return r.globals.seriesX[a].length||(n=r.globals.maxValsInArrayIndex),r.globals.seriesX[n][s]&&(t=(r.globals.seriesX[n][s]-r.globals.minX)/this.xRatio-i*this.seriesLen/2),{barXPosition:t+i*this.visibleI,x:t}}},{key:"getPreviousPath",value:function(e,t){for(var i,a=this.w,s=0;s0&&parseInt(r.realIndex,10)===parseInt(e,10)&&a.globals.previousPaths[s].paths[t]!==void 0&&(i=a.globals.previousPaths[s].paths[t].d)}return i}}]),p}(),St=function(p){Te(t,me);var e=Ie(t);function t(){return F(this,t),e.apply(this,arguments)}return R(t,[{key:"draw",value:function(i,a){var s=this,r=this.w;this.graphics=new X(this.ctx),this.bar=new me(this.ctx,this.xyRatios);var n=new $(this.ctx,r);i=n.getLogSeries(i),this.yRatio=n.getLogYRatios(this.yRatio),this.barHelpers.initVariables(i),r.config.chart.stackType==="100%"&&(i=r.globals.comboCharts?a.map(function(x){return r.globals.seriesPercent[x]}):r.globals.seriesPercent.slice()),this.series=i,this.barHelpers.initializeStackedPrevVars(this);for(var o=this.graphics.group({class:"apexcharts-bar-series apexcharts-plot-series"}),h=0,c=0,d=function(x,b){var v=void 0,y=void 0,w=void 0,l=void 0,u=r.globals.comboCharts?a[x]:x,m=s.barHelpers.getGroupIndex(u),A=m.groupIndex,k=m.columnGroupIndex;s.groupCtx=s[r.globals.seriesGroups[A]];var S=[],L=[],C=0;s.yRatio.length>1&&(s.yaxisIndex=r.globals.seriesYAxisReverseMap[u][0],C=u),s.isReversed=r.config.yaxis[s.yaxisIndex]&&r.config.yaxis[s.yaxisIndex].reversed;var I=s.graphics.group({class:"apexcharts-series",seriesName:P.escapeString(r.globals.seriesNames[u]),rel:x+1,"data:realIndex":u});s.ctx.series.addCollapsedClassToSeries(I,u);var z=s.graphics.group({class:"apexcharts-datalabels","data:realIndex":u}),M=s.graphics.group({class:"apexcharts-bar-goals-markers"}),T=0,E=0,O=s.initialPositions(h,c,v,y,w,l,C);c=O.y,T=O.barHeight,y=O.yDivision,l=O.zeroW,h=O.x,E=O.barWidth,v=O.xDivision,w=O.zeroH,r.globals.barHeight=T,r.globals.barWidth=E,s.barHelpers.initializeStackedXYVars(s),s.groupCtx.prevY.length===1&&s.groupCtx.prevY[0].every(function(Z){return isNaN(Z)})&&(s.groupCtx.prevY[0]=s.groupCtx.prevY[0].map(function(){return w}),s.groupCtx.prevYF[0]=s.groupCtx.prevYF[0].map(function(){return 0}));for(var D=0;D1?d=(s=g.globals.minXDiff/this.xRatio)*parseInt(this.barOptions.columnWidth,10)/100:String(x).indexOf("%")===-1?d=parseInt(x,10):d*=parseInt(x,10)/100,n=this.isReversed?this.baseLineY[h]:g.globals.gridHeight-this.baseLineY[h],i=g.globals.padHorizontal+(s-d)/2}var b=g.globals.barGroups.length||1;return{x:i,y:a,yDivision:r,xDivision:s,barHeight:c/b,barWidth:d/b,zeroH:n,zeroW:o}}},{key:"drawStackedBarPaths",value:function(i){for(var a,s=i.indexes,r=i.barHeight,n=i.strokeWidth,o=i.zeroW,h=i.x,c=i.y,d=i.columnGroupIndex,g=i.seriesGroup,f=i.yDivision,x=i.elSeries,b=this.w,v=c+d*r,y=s.i,w=s.j,l=s.realIndex,u=s.translationsIndex,m=0,A=0;A0){var S=o;this.groupCtx.prevXVal[k-1][w]<0?S=this.series[y][w]>=0?this.groupCtx.prevX[k-1][w]+m-2*(this.isReversed?m:0):this.groupCtx.prevX[k-1][w]:this.groupCtx.prevXVal[k-1][w]>=0&&(S=this.series[y][w]>=0?this.groupCtx.prevX[k-1][w]:this.groupCtx.prevX[k-1][w]-m+2*(this.isReversed?m:0)),a=S}else a=o;h=this.series[y][w]===null?a:a+this.series[y][w]/this.invertedYRatio-2*(this.isReversed?this.series[y][w]/this.invertedYRatio:0);var L=this.barHelpers.getBarpaths({barYPosition:v,barHeight:r,x1:a,x2:h,strokeWidth:n,series:this.series,realIndex:s.realIndex,seriesGroup:g,i:y,j:w,w:b});return this.barHelpers.barBackground({j:w,i:y,y1:v,y2:r,elSeries:x}),c+=f,{pathTo:L.pathTo,pathFrom:L.pathFrom,goalX:this.barHelpers.getGoalValues("x",o,null,y,w,u),barXPosition:a,barYPosition:v,x:h,y:c}}},{key:"drawStackedColumnPaths",value:function(i){var a=i.indexes,s=i.x,r=i.y,n=i.xDivision,o=i.barWidth,h=i.zeroH,c=i.columnGroupIndex,d=i.seriesGroup,g=i.elSeries,f=this.w,x=a.i,b=a.j,v=a.bc,y=a.realIndex,w=a.translationsIndex;if(f.globals.isXNumeric){var l=f.globals.seriesX[y][b];l||(l=0),s=(l-f.globals.minX)/this.xRatio-o/2*f.globals.barGroups.length}for(var u,m=s+c*o,A=0,k=0;k0&&!f.globals.isXNumeric||S>0&&f.globals.isXNumeric&&f.globals.seriesX[y-1][b]===f.globals.seriesX[y][b]){var L,C,I,z=Math.min(this.yRatio.length+1,y+1);if(this.groupCtx.prevY[S-1]!==void 0&&this.groupCtx.prevY[S-1].length)for(var M=1;M=0?I-A+2*(this.isReversed?A:0):I;break}if(((D=this.groupCtx.prevYVal[S-E])===null||D===void 0?void 0:D[b])>=0){C=this.series[x][b]>=0?I:I+A-2*(this.isReversed?A:0);break}}C===void 0&&(C=f.globals.gridHeight),u=(L=this.groupCtx.prevYF[0])!==null&&L!==void 0&&L.every(function(W){return W===0})&&this.groupCtx.prevYF.slice(1,S).every(function(W){return W.every(function(N){return isNaN(N)})})?h:C}else u=h;r=this.series[x][b]?u-this.series[x][b]/this.yRatio[w]+2*(this.isReversed?this.series[x][b]/this.yRatio[w]:0):u;var H=this.barHelpers.getColumnPaths({barXPosition:m,barWidth:o,y1:u,y2:r,yRatio:this.yRatio[w],strokeWidth:this.strokeWidth,series:this.series,seriesGroup:d,realIndex:a.realIndex,i:x,j:b,w:f});return this.barHelpers.barBackground({bc:v,j:b,i:x,x1:m,x2:o,elSeries:g}),{pathTo:H.pathTo,pathFrom:H.pathFrom,goalY:this.barHelpers.getGoalValues("y",null,h,x,b),barXPosition:m,x:f.globals.isXNumeric?s:s+n,y:r}}}]),t}(),Qe=function(p){Te(t,me);var e=Ie(t);function t(){return F(this,t),e.apply(this,arguments)}return R(t,[{key:"draw",value:function(i,a,s){var r=this,n=this.w,o=new X(this.ctx),h=n.globals.comboCharts?a:n.config.chart.type,c=new ne(this.ctx);this.candlestickOptions=this.w.config.plotOptions.candlestick,this.boxOptions=this.w.config.plotOptions.boxPlot,this.isHorizontal=n.config.plotOptions.bar.horizontal;var d=new $(this.ctx,n);i=d.getLogSeries(i),this.series=i,this.yRatio=d.getLogYRatios(this.yRatio),this.barHelpers.initVariables(i);for(var g=o.group({class:"apexcharts-".concat(h,"-series apexcharts-plot-series")}),f=function(b){r.isBoxPlot=n.config.chart.type==="boxPlot"||n.config.series[b].type==="boxPlot";var v,y,w,l,u=void 0,m=void 0,A=[],k=[],S=n.globals.comboCharts?s[b]:b,L=r.barHelpers.getGroupIndex(S).columnGroupIndex,C=o.group({class:"apexcharts-series",seriesName:P.escapeString(n.globals.seriesNames[S]),rel:b+1,"data:realIndex":S});r.ctx.series.addCollapsedClassToSeries(C,S),i[b].length>0&&(r.visibleI=r.visibleI+1);var I,z,M=0;r.yRatio.length>1&&(r.yaxisIndex=n.globals.seriesYAxisReverseMap[S][0],M=S);var T=r.barHelpers.initialPositions();m=T.y,I=T.barHeight,y=T.yDivision,l=T.zeroW,u=T.x,z=T.barWidth,v=T.xDivision,w=T.zeroH,k.push(u+z/2);for(var E=o.group({class:"apexcharts-datalabels","data:realIndex":S}),O=function(H){var W=r.barHelpers.getStrokeWidth(b,H,S),N=null,B={indexes:{i:b,j:H,realIndex:S,translationsIndex:M},x:u,y:m,strokeWidth:W,elSeries:C};N=r.isHorizontal?r.drawHorizontalBoxPaths(Y(Y({},B),{},{yDivision:y,barHeight:I,zeroW:l})):r.drawVerticalBoxPaths(Y(Y({},B),{},{xDivision:v,barWidth:z,zeroH:w})),m=N.y,u=N.x,H>0&&k.push(u+z/2),A.push(m),N.pathTo.forEach(function(q,Z){var j=!r.isBoxPlot&&r.candlestickOptions.wick.useFillColor?N.color[Z]:n.globals.stroke.colors[b],se=c.fillPath({seriesNumber:S,dataPointIndex:H,color:N.color[Z],value:i[b][H]});r.renderSeries({realIndex:S,pathFill:se,lineFill:j,j:H,i:b,pathFrom:N.pathFrom,pathTo:q,strokeWidth:W,elSeries:C,x:u,y:m,series:i,columnGroupIndex:L,barHeight:I,barWidth:z,elDataLabelsWrap:E,visibleSeries:r.visibleI,type:n.config.chart.type})})},D=0;Du.c&&(x=!1);var k=Math.min(u.o,u.c),S=Math.max(u.o,u.c),L=u.m;c.globals.isXNumeric&&(s=(c.globals.seriesX[l][f]-c.globals.minX)/this.xRatio-n/2);var C=s+n*this.visibleI;this.series[g][f]===void 0||this.series[g][f]===null?(k=o,S=o):(k=o-k/w,S=o-S/w,m=o-u.h/w,A=o-u.l/w,L=o-u.m/w);var I=d.move(C,o),z=d.move(C+n/2,k);return c.globals.previousPaths.length>0&&(z=this.getPreviousPath(l,f,!0)),I=this.isBoxPlot?[d.move(C,k)+d.line(C+n/2,k)+d.line(C+n/2,m)+d.line(C+n/4,m)+d.line(C+n-n/4,m)+d.line(C+n/2,m)+d.line(C+n/2,k)+d.line(C+n,k)+d.line(C+n,L)+d.line(C,L)+d.line(C,k+h/2),d.move(C,L)+d.line(C+n,L)+d.line(C+n,S)+d.line(C+n/2,S)+d.line(C+n/2,A)+d.line(C+n-n/4,A)+d.line(C+n/4,A)+d.line(C+n/2,A)+d.line(C+n/2,S)+d.line(C,S)+d.line(C,L)+"z"]:[d.move(C,S)+d.line(C+n/2,S)+d.line(C+n/2,m)+d.line(C+n/2,S)+d.line(C+n,S)+d.line(C+n,k)+d.line(C+n/2,k)+d.line(C+n/2,A)+d.line(C+n/2,k)+d.line(C,k)+d.line(C,S-h/2)],z+=d.move(C,k),c.globals.isXNumeric||(s+=r),{pathTo:I,pathFrom:z,x:s,y:S,barXPosition:C,color:this.isBoxPlot?y:x?[b]:[v]}}},{key:"drawHorizontalBoxPaths",value:function(i){var a=i.indexes;i.x;var s=i.y,r=i.yDivision,n=i.barHeight,o=i.zeroW,h=i.strokeWidth,c=this.w,d=new X(this.ctx),g=a.i,f=a.j,x=this.boxOptions.colors.lower;this.isBoxPlot&&(x=[this.boxOptions.colors.lower,this.boxOptions.colors.upper]);var b=this.invertedYRatio,v=a.realIndex,y=this.getOHLCValue(v,f),w=o,l=o,u=Math.min(y.o,y.c),m=Math.max(y.o,y.c),A=y.m;c.globals.isXNumeric&&(s=(c.globals.seriesX[v][f]-c.globals.minX)/this.invertedXRatio-n/2);var k=s+n*this.visibleI;this.series[g][f]===void 0||this.series[g][f]===null?(u=o,m=o):(u=o+u/b,m=o+m/b,w=o+y.h/b,l=o+y.l/b,A=o+y.m/b);var S=d.move(o,k),L=d.move(u,k+n/2);return c.globals.previousPaths.length>0&&(L=this.getPreviousPath(v,f,!0)),S=[d.move(u,k)+d.line(u,k+n/2)+d.line(w,k+n/2)+d.line(w,k+n/2-n/4)+d.line(w,k+n/2+n/4)+d.line(w,k+n/2)+d.line(u,k+n/2)+d.line(u,k+n)+d.line(A,k+n)+d.line(A,k)+d.line(u+h/2,k),d.move(A,k)+d.line(A,k+n)+d.line(m,k+n)+d.line(m,k+n/2)+d.line(l,k+n/2)+d.line(l,k+n-n/4)+d.line(l,k+n/4)+d.line(l,k+n/2)+d.line(m,k+n/2)+d.line(m,k)+d.line(A,k)+"z"],L+=d.move(u,k),c.globals.isXNumeric||(s+=r),{pathTo:S,pathFrom:L,x:m,y:s,barYPosition:k,color:x}}},{key:"getOHLCValue",value:function(i,a){var s=this.w;return{o:this.isBoxPlot?s.globals.seriesCandleH[i][a]:s.globals.seriesCandleO[i][a],h:this.isBoxPlot?s.globals.seriesCandleO[i][a]:s.globals.seriesCandleH[i][a],m:s.globals.seriesCandleM[i][a],l:this.isBoxPlot?s.globals.seriesCandleC[i][a]:s.globals.seriesCandleL[i][a],c:this.isBoxPlot?s.globals.seriesCandleL[i][a]:s.globals.seriesCandleC[i][a]}}}]),t}(),Bt=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"checkColorRange",value:function(){var e=this.w,t=!1,i=e.config.plotOptions[e.config.chart.type];return i.colorScale.ranges.length>0&&i.colorScale.ranges.map(function(a,s){a.from<=0&&(t=!0)}),t}},{key:"getShadeColor",value:function(e,t,i,a){var s=this.w,r=1,n=s.config.plotOptions[e].shadeIntensity,o=this.determineColor(e,t,i);s.globals.hasNegs||a?r=s.config.plotOptions[e].reverseNegativeShade?o.percent<0?o.percent/100*(1.25*n):(1-o.percent/100)*(1.25*n):o.percent<=0?1-(1+o.percent/100)*n:(1-o.percent/100)*n:(r=1-o.percent/100,e==="treemap"&&(r=(1-o.percent/100)*(1.25*n)));var h=o.color,c=new P;if(s.config.plotOptions[e].enableShades)if(this.w.config.theme.mode==="dark"){var d=c.shadeColor(-1*r,o.color);h=P.hexToRgba(P.isColorHex(d)?d:P.rgb2hex(d),s.config.fill.opacity)}else{var g=c.shadeColor(r,o.color);h=P.hexToRgba(P.isColorHex(g)?g:P.rgb2hex(g),s.config.fill.opacity)}return{color:h,colorProps:o}}},{key:"determineColor",value:function(e,t,i){var a=this.w,s=a.globals.series[t][i],r=a.config.plotOptions[e],n=r.colorScale.inverse?i:t;r.distributed&&a.config.chart.type==="treemap"&&(n=i);var o=a.globals.colors[n],h=null,c=Math.min.apply(Math,te(a.globals.series[t])),d=Math.max.apply(Math,te(a.globals.series[t]));r.distributed||e!=="heatmap"||(c=a.globals.minY,d=a.globals.maxY),r.colorScale.min!==void 0&&(c=r.colorScale.mina.globals.maxY?r.colorScale.max:a.globals.maxY);var g=Math.abs(d)+Math.abs(c),f=100*s/(g===0?g-1e-6:g);return r.colorScale.ranges.length>0&&r.colorScale.ranges.map(function(x,b){if(s>=x.from&&s<=x.to){o=x.color,h=x.foreColor?x.foreColor:null,c=x.from,d=x.to;var v=Math.abs(d)+Math.abs(c);f=100*s/(v===0?v-1e-6:v)}}),{color:o,foreColor:h,percent:f}}},{key:"calculateDataLabels",value:function(e){var t=e.text,i=e.x,a=e.y,s=e.i,r=e.j,n=e.colorProps,o=e.fontSize,h=this.w.config.dataLabels,c=new X(this.ctx),d=new be(this.ctx),g=null;if(h.enabled){g=c.group({class:"apexcharts-data-labels"});var f=h.offsetX,x=h.offsetY,b=i+f,v=a+parseFloat(h.style.fontSize)/3+x;d.plotDataLabelsText({x:b,y:v,text:t,i:s,j:r,color:n.foreColor,parent:g,fontSize:o,dataLabelsConfig:h})}return g}},{key:"addListeners",value:function(e){var t=new X(this.ctx);e.node.addEventListener("mouseenter",t.pathMouseEnter.bind(this,e)),e.node.addEventListener("mouseleave",t.pathMouseLeave.bind(this,e)),e.node.addEventListener("mousedown",t.pathMouseDown.bind(this,e))}}]),p}(),ta=function(){function p(e,t){F(this,p),this.ctx=e,this.w=e.w,this.xRatio=t.xRatio,this.yRatio=t.yRatio,this.dynamicAnim=this.w.config.chart.animations.dynamicAnimation,this.helpers=new Bt(e),this.rectRadius=this.w.config.plotOptions.heatmap.radius,this.strokeWidth=this.w.config.stroke.show?this.w.config.stroke.width:0}return R(p,[{key:"draw",value:function(e){var t=this.w,i=new X(this.ctx),a=i.group({class:"apexcharts-heatmap"});a.attr("clip-path","url(#gridRectMask".concat(t.globals.cuid,")"));var s=t.globals.gridWidth/t.globals.dataPoints,r=t.globals.gridHeight/t.globals.series.length,n=0,o=!1;this.negRange=this.helpers.checkColorRange();var h=e.slice();t.config.yaxis[0].reversed&&(o=!0,h.reverse());for(var c=o?0:h.length-1;o?c=0;o?c++:c--){var d=i.group({class:"apexcharts-series apexcharts-heatmap-series",seriesName:P.escapeString(t.globals.seriesNames[c]),rel:c+1,"data:realIndex":c});if(this.ctx.series.addCollapsedClassToSeries(d,c),t.config.chart.dropShadow.enabled){var g=t.config.chart.dropShadow;new ie(this.ctx).dropShadow(d,g,c)}for(var f=0,x=t.config.plotOptions.heatmap.shadeIntensity,b=0;b-1&&this.pieClicked(g),i.config.dataLabels.enabled){var m=l.x,A=l.y,k=100*x/this.fullAngle+"%";if(x!==0&&i.config.plotOptions.pie.dataLabels.minAngleToShowLabelthis.fullAngle?t.endAngle=t.endAngle-(a+n):a+n=this.fullAngle+this.w.config.plotOptions.pie.startAngle%this.fullAngle&&(c=this.fullAngle+this.w.config.plotOptions.pie.startAngle%this.fullAngle-.01),Math.ceil(c)>this.fullAngle&&(c-=this.fullAngle);var d=Math.PI*(c-90)/180,g=i.centerX+r*Math.cos(h),f=i.centerY+r*Math.sin(h),x=i.centerX+r*Math.cos(d),b=i.centerY+r*Math.sin(d),v=P.polarToCartesian(i.centerX,i.centerY,i.donutSize,c),y=P.polarToCartesian(i.centerX,i.centerY,i.donutSize,o),w=s>180?1:0,l=["M",g,f,"A",r,r,0,w,1,x,b];return t=i.chartType==="donut"?[].concat(l,["L",v.x,v.y,"A",i.donutSize,i.donutSize,0,w,0,y.x,y.y,"L",g,f,"z"]).join(" "):i.chartType==="pie"||i.chartType==="polarArea"?[].concat(l,["L",i.centerX,i.centerY,"L",g,f]).join(" "):[].concat(l).join(" "),n.roundPathCorners(t,2*this.strokeWidth)}},{key:"drawPolarElements",value:function(e){var t=this.w,i=new Ot(this.ctx),a=new X(this.ctx),s=new Gt(this.ctx),r=a.group(),n=a.group(),o=i.niceScale(0,Math.ceil(this.maxY),0),h=o.result.reverse(),c=o.result.length;this.maxY=o.niceMax;for(var d=t.globals.radialSize,g=d/(c-1),f=0;f1&&e.total.show&&(s=e.total.color);var n=r.globals.dom.baseEl.querySelector(".apexcharts-datalabel-label"),o=r.globals.dom.baseEl.querySelector(".apexcharts-datalabel-value");i=(0,e.value.formatter)(i,r),a||typeof e.total.formatter!="function"||(i=e.total.formatter(r));var h=t===e.total.label;t=e.name.formatter(t,h,r),n!==null&&(n.textContent=t),o!==null&&(o.textContent=i),n!==null&&(n.style.fill=s)}},{key:"printDataLabelsInner",value:function(e,t){var i=this.w,a=e.getAttribute("data:value"),s=i.globals.seriesNames[parseInt(e.parentNode.getAttribute("rel"),10)-1];i.globals.series.length>1&&this.printInnerLabels(t,s,a,e);var r=i.globals.dom.baseEl.querySelector(".apexcharts-datalabels-group");r!==null&&(r.style.opacity=1)}},{key:"drawSpokes",value:function(e){var t=this,i=this.w,a=new X(this.ctx),s=i.config.plotOptions.polarArea.spokes;if(s.strokeWidth!==0){for(var r=[],n=360/i.globals.series.length,o=0;o0&&(A=t.getPreviousPath(y));for(var k=0;k=10?e.x>0?(i="start",a+=10):e.x<0&&(i="end",a-=10):i="middle",Math.abs(e.y)>=t-10&&(e.y<0?s-=10:e.y>0&&(s+=10)),{textAnchor:i,newX:a,newY:s}}},{key:"getPreviousPath",value:function(e){for(var t=this.w,i=null,a=0;a0&&parseInt(s.realIndex,10)===parseInt(e,10)&&t.globals.previousPaths[a].paths[0]!==void 0&&(i=t.globals.previousPaths[a].paths[0].d)}return i}},{key:"getDataPointsPos",value:function(e,t){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this.dataPointsLen;e=e||[],t=t||[];for(var a=[],s=0;s=360&&(b=360-Math.abs(this.startAngle)-.1);var v=s.drawPath({d:"",stroke:f,strokeWidth:h*parseInt(g.strokeWidth,10)/100,fill:"none",strokeOpacity:g.opacity,classes:"apexcharts-radialbar-area"});if(g.dropShadow.enabled){var y=g.dropShadow;n.dropShadow(v,y)}d.add(v),v.attr("id","apexcharts-radialbarTrack-"+c),this.animatePaths(v,{centerX:i.centerX,centerY:i.centerY,endAngle:b,startAngle:x,size:i.size,i:c,totalItems:2,animBeginArr:0,dur:0,isTrack:!0,easing:a.globals.easing})}return r}},{key:"drawArcs",value:function(i){var a=this.w,s=new X(this.ctx),r=new ne(this.ctx),n=new ie(this.ctx),o=s.group(),h=this.getStrokeWidth(i);i.size=i.size-h/2;var c=a.config.plotOptions.radialBar.hollow.background,d=i.size-h*i.series.length-this.margin*i.series.length-h*parseInt(a.config.plotOptions.radialBar.track.strokeWidth,10)/100/2,g=d-a.config.plotOptions.radialBar.hollow.margin;a.config.plotOptions.radialBar.hollow.image!==void 0&&(c=this.drawHollowImage(i,o,d,c));var f=this.drawHollow({size:g,centerX:i.centerX,centerY:i.centerY,fill:c||"transparent"});if(a.config.plotOptions.radialBar.hollow.dropShadow.enabled){var x=a.config.plotOptions.radialBar.hollow.dropShadow;n.dropShadow(f,x)}var b=1;!this.radialDataLabels.total.show&&a.globals.series.length>1&&(b=0);var v=null;if(this.radialDataLabels.show){var y=a.globals.dom.Paper.select(".apexcharts-datalabels-group").members[0];v=this.renderInnerDataLabels(y,this.radialDataLabels,{hollowSize:d,centerX:i.centerX,centerY:i.centerY,opacity:b})}a.config.plotOptions.radialBar.hollow.position==="back"&&(o.add(f),v&&o.add(v));var w=!1;a.config.plotOptions.radialBar.inverseOrder&&(w=!0);for(var l=w?i.series.length-1:0;w?l>=0:l100?100:i.series[l])/100,L=Math.round(this.totalAngle*S)+this.startAngle,C=void 0;a.globals.dataChanged&&(k=this.startAngle,C=Math.round(this.totalAngle*P.negToZero(a.globals.previousPaths[l])/100)+k),Math.abs(L)+Math.abs(A)>=360&&(L-=.01),Math.abs(C)+Math.abs(k)>=360&&(C-=.01);var I=L-A,z=Array.isArray(a.config.stroke.dashArray)?a.config.stroke.dashArray[l]:a.config.stroke.dashArray,M=s.drawPath({d:"",stroke:m,strokeWidth:h,fill:"none",fillOpacity:a.config.fill.opacity,classes:"apexcharts-radialbar-area apexcharts-radialbar-slice-"+l,strokeDashArray:z});if(X.setAttrs(M.node,{"data:angle":I,"data:value":i.series[l]}),a.config.chart.dropShadow.enabled){var T=a.config.chart.dropShadow;n.dropShadow(M,T,l)}if(n.setSelectionFilter(M,0,l),this.addListeners(M,this.radialDataLabels),u.add(M),M.attr({index:0,j:l}),this.barLabels.enabled){var E=P.polarToCartesian(i.centerX,i.centerY,i.size,A),O=this.barLabels.formatter(a.globals.seriesNames[l],{seriesIndex:l,w:a}),D=["apexcharts-radialbar-label"];this.barLabels.onClick||D.push("apexcharts-no-click");var H=this.barLabels.useSeriesColors?a.globals.colors[l]:a.config.chart.foreColor;H||(H=a.config.chart.foreColor);var W=E.x+this.barLabels.offsetX,N=E.y+this.barLabels.offsetY,B=s.drawText({x:W,y:N,text:O,textAnchor:"end",dominantBaseline:"middle",fontFamily:this.barLabels.fontFamily,fontWeight:this.barLabels.fontWeight,fontSize:this.barLabels.fontSize,foreColor:H,cssClass:D.join(" ")});B.on("click",this.onBarLabelClick),B.attr({rel:l+1}),A!==0&&B.attr({"transform-origin":"".concat(W," ").concat(N),transform:"rotate(".concat(A," 0 0)")}),u.add(B)}var q=0;!this.initialAnim||a.globals.resized||a.globals.dataChanged||(q=a.config.chart.animations.speed),a.globals.dataChanged&&(q=a.config.chart.animations.dynamicAnimation.speed),this.animDur=q/(1.2*i.series.length)+this.animDur,this.animBeginArr.push(this.animDur),this.animatePaths(M,{centerX:i.centerX,centerY:i.centerY,endAngle:L,startAngle:A,prevEndAngle:C,prevStartAngle:k,size:i.size,i:l,totalItems:2,animBeginArr:this.animBeginArr,dur:q,shouldSetPrevPaths:!0,easing:a.globals.easing})}return{g:o,elHollow:f,dataLabels:v}}},{key:"drawHollow",value:function(i){var a=new X(this.ctx).drawCircle(2*i.size);return a.attr({class:"apexcharts-radialbar-hollow",cx:i.centerX,cy:i.centerY,r:i.size,fill:i.fill}),a}},{key:"drawHollowImage",value:function(i,a,s,r){var n=this.w,o=new ne(this.ctx),h=P.randomId(),c=n.config.plotOptions.radialBar.hollow.image;if(n.config.plotOptions.radialBar.hollow.imageClipped)o.clippedImgArea({width:s,height:s,image:c,patternID:"pattern".concat(n.globals.cuid).concat(h)}),r="url(#pattern".concat(n.globals.cuid).concat(h,")");else{var d=n.config.plotOptions.radialBar.hollow.imageWidth,g=n.config.plotOptions.radialBar.hollow.imageHeight;if(d===void 0&&g===void 0){var f=n.globals.dom.Paper.image(c).loaded(function(b){this.move(i.centerX-b.width/2+n.config.plotOptions.radialBar.hollow.imageOffsetX,i.centerY-b.height/2+n.config.plotOptions.radialBar.hollow.imageOffsetY)});a.add(f)}else{var x=n.globals.dom.Paper.image(c).loaded(function(b){this.move(i.centerX-d/2+n.config.plotOptions.radialBar.hollow.imageOffsetX,i.centerY-g/2+n.config.plotOptions.radialBar.hollow.imageOffsetY),this.size(d,g)});a.add(x)}}return r}},{key:"getStrokeWidth",value:function(i){var a=this.w;return i.size*(100-parseInt(a.config.plotOptions.radialBar.hollow.size,10))/100/(i.series.length+1)-this.margin}},{key:"onBarLabelClick",value:function(i){var a=parseInt(i.target.getAttribute("rel"),10)-1,s=this.barLabels.onClick,r=this.w;s&&s(r.globals.seriesNames[a],{w:r,seriesIndex:a})}}]),t}(),sa=function(p){Te(t,me);var e=Ie(t);function t(){return F(this,t),e.apply(this,arguments)}return R(t,[{key:"draw",value:function(i,a){var s=this.w,r=new X(this.ctx);this.rangeBarOptions=this.w.config.plotOptions.rangeBar,this.series=i,this.seriesRangeStart=s.globals.seriesRangeStart,this.seriesRangeEnd=s.globals.seriesRangeEnd,this.barHelpers.initVariables(i);for(var n=r.group({class:"apexcharts-rangebar-series apexcharts-plot-series"}),o=0;o0&&(this.visibleI=this.visibleI+1);var w=0,l=0,u=0;this.yRatio.length>1&&(this.yaxisIndex=s.globals.seriesYAxisReverseMap[b][0],u=b);var m=this.barHelpers.initialPositions();x=m.y,g=m.zeroW,f=m.x,l=m.barWidth,w=m.barHeight,h=m.xDivision,c=m.yDivision,d=m.zeroH;for(var A=r.group({class:"apexcharts-datalabels","data:realIndex":b}),k=r.group({class:"apexcharts-rangebar-goals-markers"}),S=0;S0});return this.isHorizontal?(r=b.config.plotOptions.bar.rangeBarGroupRows?o+g*u:o+c*this.visibleI+g*u,m>-1&&!b.config.plotOptions.bar.rangeBarOverlap&&(v=b.globals.seriesRange[a][m].overlaps).indexOf(y)>-1&&(r=(c=x.barHeight/v.length)*this.visibleI+g*(100-parseInt(this.barOptions.barHeight,10))/100/2+c*(this.visibleI+v.indexOf(y))+g*u)):(u>-1&&!b.globals.timescaleLabels.length&&(n=b.config.plotOptions.bar.rangeBarGroupRows?h+f*u:h+d*this.visibleI+f*u),m>-1&&!b.config.plotOptions.bar.rangeBarOverlap&&(v=b.globals.seriesRange[a][m].overlaps).indexOf(y)>-1&&(n=(d=x.barWidth/v.length)*this.visibleI+f*(100-parseInt(this.barOptions.barWidth,10))/100/2+d*(this.visibleI+v.indexOf(y))+f*u)),{barYPosition:r,barXPosition:n,barHeight:c,barWidth:d}}},{key:"drawRangeColumnPaths",value:function(i){var a=i.indexes,s=i.x,r=i.xDivision,n=i.barWidth,o=i.barXPosition,h=i.zeroH,c=this.w,d=a.i,g=a.j,f=a.realIndex,x=a.translationsIndex,b=this.yRatio[x],v=this.getRangeValue(f,g),y=Math.min(v.start,v.end),w=Math.max(v.start,v.end);this.series[d][g]===void 0||this.series[d][g]===null?y=h:(y=h-y/b,w=h-w/b);var l=Math.abs(w-y),u=this.barHelpers.getColumnPaths({barXPosition:o,barWidth:n,y1:y,y2:w,strokeWidth:this.strokeWidth,series:this.seriesRangeEnd,realIndex:f,i:f,j:g,w:c});if(c.globals.isXNumeric){var m=this.getBarXForNumericXAxis({x:s,j:g,realIndex:f,barWidth:n});s=m.x,o=m.barXPosition}else s+=r;return{pathTo:u.pathTo,pathFrom:u.pathFrom,barHeight:l,x:s,y:v.start<0&&v.end<0?y:w,goalY:this.barHelpers.getGoalValues("y",null,h,d,g,x),barXPosition:o}}},{key:"preventBarOverflow",value:function(i){var a=this.w;return i<0&&(i=0),i>a.globals.gridWidth&&(i=a.globals.gridWidth),i}},{key:"drawRangeBarPaths",value:function(i){var a=i.indexes,s=i.y,r=i.y1,n=i.y2,o=i.yDivision,h=i.barHeight,c=i.barYPosition,d=i.zeroW,g=this.w,f=a.realIndex,x=a.j,b=this.preventBarOverflow(d+r/this.invertedYRatio),v=this.preventBarOverflow(d+n/this.invertedYRatio),y=this.getRangeValue(f,x),w=Math.abs(v-b),l=this.barHelpers.getBarpaths({barYPosition:c,barHeight:h,x1:b,x2:v,strokeWidth:this.strokeWidth,series:this.seriesRangeEnd,i:f,realIndex:f,j:x,w:g});return g.globals.isXNumeric||(s+=o),{pathTo:l.pathTo,pathFrom:l.pathFrom,barWidth:w,x:y.start<0&&y.end<0?b:v,goalX:this.barHelpers.getGoalValues("x",d,null,f,x),y:s}}},{key:"getRangeValue",value:function(i,a){var s=this.w;return{start:s.globals.seriesRangeStart[i][a],end:s.globals.seriesRangeEnd[i][a]}}}]),t}(),ra=function(){function p(e){F(this,p),this.w=e.w,this.lineCtx=e}return R(p,[{key:"sameValueSeriesFix",value:function(e,t){var i=this.w;if((i.config.fill.type==="gradient"||i.config.fill.type[e]==="gradient")&&new $(this.lineCtx.ctx,i).seriesHaveSameValues(e)){var a=t[e].slice();a[a.length-1]=a[a.length-1]+1e-6,t[e]=a}return t}},{key:"calculatePoints",value:function(e){var t=e.series,i=e.realIndex,a=e.x,s=e.y,r=e.i,n=e.j,o=e.prevY,h=this.w,c=[],d=[];if(n===0){var g=this.lineCtx.categoryAxisCorrection+h.config.markers.offsetX;h.globals.isXNumeric&&(g=(h.globals.seriesX[i][0]-h.globals.minX)/this.lineCtx.xRatio+h.config.markers.offsetX),c.push(g),d.push(P.isNumber(t[r][0])?o+h.config.markers.offsetY:null),c.push(a+h.config.markers.offsetX),d.push(P.isNumber(t[r][n+1])?s+h.config.markers.offsetY:null)}else c.push(a+h.config.markers.offsetX),d.push(P.isNumber(t[r][n+1])?s+h.config.markers.offsetY:null);return{x:c,y:d}}},{key:"checkPreviousPaths",value:function(e){for(var t=e.pathFromLine,i=e.pathFromArea,a=e.realIndex,s=this.w,r=0;r0&&parseInt(n.realIndex,10)===parseInt(a,10)&&(n.type==="line"?(this.lineCtx.appendPathFrom=!1,t=s.globals.previousPaths[r].paths[0].d):n.type==="area"&&(this.lineCtx.appendPathFrom=!1,i=s.globals.previousPaths[r].paths[0].d,s.config.stroke.show&&s.globals.previousPaths[r].paths[1]&&(t=s.globals.previousPaths[r].paths[1].d)))}return{pathFromLine:t,pathFromArea:i}}},{key:"determineFirstPrevY",value:function(e){var t,i,a,s=e.i,r=e.realIndex,n=e.series,o=e.prevY,h=e.lineYPosition,c=e.translationsIndex,d=this.w,g=d.config.chart.stacked&&!d.globals.comboCharts||d.config.chart.stacked&&d.globals.comboCharts&&(!this.w.config.chart.stackOnlyBar||((t=this.w.config.series[r])===null||t===void 0?void 0:t.type)==="bar"||((i=this.w.config.series[r])===null||i===void 0?void 0:i.type)==="column");if(((a=n[s])===null||a===void 0?void 0:a[0])!==void 0)o=(h=g&&s>0?this.lineCtx.prevSeriesY[s-1][0]:this.lineCtx.zeroY)-n[s][0]/this.lineCtx.yRatio[c]+2*(this.lineCtx.isReversed?n[s][0]/this.lineCtx.yRatio[c]:0);else if(g&&s>0&&n[s][0]===void 0){for(var f=s-1;f>=0;f--)if(n[f][0]!==null&&n[f][0]!==void 0){o=h=this.lineCtx.prevSeriesY[f][0];break}}return{prevY:o,lineYPosition:h}}}]),p}(),na=function(p){for(var e,t,i,a,s=function(c){for(var d=[],g=c[0],f=c[1],x=d[0]=et(g,f),b=1,v=c.length-1;b9&&(a=3*i/Math.sqrt(a),s[o]=a*e,s[o+1]=a*t);for(var h=0;h<=r;h++)a=(p[Math.min(r,h+1)][0]-p[Math.max(0,h-1)][0])/(6*(1+s[h]*s[h])),n.push([a||0,s[h]*a||0]);return n},oa=function(p){var e=na(p),t=p[1],i=p[0],a=[],s=e[1],r=e[0];a.push(i,[i[0]+r[0],i[1]+r[1],t[0]-s[0],t[1]-s[1],t[0],t[1]]);for(var n=2,o=e.length;n1&&i[1].length<6){var a=i[0].length;i[1]=[2*i[0][a-2]-i[0][a-4],2*i[0][a-1]-i[0][a-3]].concat(i[1])}i[0]=i[0].slice(-2)}return i};function et(p,e){return(e[1]-p[1])/(e[0]-p[0])}var tt=function(){function p(e,t,i){F(this,p),this.ctx=e,this.w=e.w,this.xyRatios=t,this.pointsChart=!(this.w.config.chart.type!=="bubble"&&this.w.config.chart.type!=="scatter")||i,this.scatter=new Yt(this.ctx),this.noNegatives=this.w.globals.minX===Number.MAX_VALUE,this.lineHelpers=new ra(this),this.markers=new ye(this.ctx),this.prevSeriesY=[],this.categoryAxisCorrection=0,this.yaxisIndex=0}return R(p,[{key:"draw",value:function(e,t,i,a){var s,r=this.w,n=new X(this.ctx),o=r.globals.comboCharts?t:r.config.chart.type,h=n.group({class:"apexcharts-".concat(o,"-series apexcharts-plot-series")}),c=new $(this.ctx,r);this.yRatio=this.xyRatios.yRatio,this.zRatio=this.xyRatios.zRatio,this.xRatio=this.xyRatios.xRatio,this.baseLineY=this.xyRatios.baseLineY,e=c.getLogSeries(e),this.yRatio=c.getLogYRatios(this.yRatio),this.prevSeriesY=[];for(var d=[],g=0;g1?f:0;this._initSerieVariables(e,g,f);var b=[],v=[],y=[],w=r.globals.padHorizontal+this.categoryAxisCorrection;this.ctx.series.addCollapsedClassToSeries(this.elSeries,f),r.globals.isXNumeric&&r.globals.seriesX.length>0&&(w=(r.globals.seriesX[f][0]-r.globals.minX)/this.xRatio),y.push(w);var l,u=w,m=void 0,A=u,k=this.zeroY,S=this.zeroY;k=this.lineHelpers.determineFirstPrevY({i:g,realIndex:f,series:e,prevY:k,lineYPosition:0,translationsIndex:x}).prevY,r.config.stroke.curve==="monotoneCubic"&&e[g][0]===null?b.push(null):b.push(k),l=k,o==="rangeArea"&&(m=S=this.lineHelpers.determineFirstPrevY({i:g,realIndex:f,series:a,prevY:S,lineYPosition:0,translationsIndex:x}).prevY,v.push(b[0]!==null?S:null));var L=this._calculatePathsFrom({type:o,series:e,i:g,realIndex:f,translationsIndex:x,prevX:A,prevY:k,prevY2:S}),C=[b[0]],I=[v[0]],z={type:o,series:e,realIndex:f,translationsIndex:x,i:g,x:w,y:1,pX:u,pY:l,pathsFrom:L,linePaths:[],areaPaths:[],seriesIndex:i,lineYPosition:0,xArrj:y,yArrj:b,y2Arrj:v,seriesRangeEnd:a},M=this._iterateOverDataPoints(Y(Y({},z),{},{iterations:o==="rangeArea"?e[g].length-1:void 0,isRangeStart:!0}));if(o==="rangeArea"){for(var T=this._calculatePathsFrom({series:a,i:g,realIndex:f,prevX:A,prevY:S}),E=this._iterateOverDataPoints(Y(Y({},z),{},{series:a,xArrj:[w],yArrj:C,y2Arrj:I,pY:m,areaPaths:M.areaPaths,pathsFrom:T,iterations:a[g].length-1,isRangeStart:!1})),O=M.linePaths.length/2,D=0;D=0;H--)h.add(d[H]);else for(var W=0;W1&&(this.yaxisIndex=a.globals.seriesYAxisReverseMap[i],r=i),this.isReversed=a.config.yaxis[this.yaxisIndex]&&a.config.yaxis[this.yaxisIndex].reversed,this.zeroY=a.globals.gridHeight-this.baseLineY[r]-(this.isReversed?a.globals.gridHeight:0)+(this.isReversed?2*this.baseLineY[r]:0),this.areaBottomY=this.zeroY,(this.zeroY>a.globals.gridHeight||a.config.plotOptions.area.fillTo==="end")&&(this.areaBottomY=a.globals.gridHeight),this.categoryAxisCorrection=this.xDivision/2,this.elSeries=s.group({class:"apexcharts-series",zIndex:a.config.series[i].zIndex!==void 0?a.config.series[i].zIndex:i,seriesName:P.escapeString(a.globals.seriesNames[i])}),this.elPointsMain=s.group({class:"apexcharts-series-markers-wrap","data:realIndex":i}),this.elDataLabelsWrap=s.group({class:"apexcharts-datalabels","data:realIndex":i});var n=e[t].length===a.globals.dataPoints;this.elSeries.attr({"data:longestSeries":n,rel:t+1,"data:realIndex":i}),this.appendPathFrom=!0}},{key:"_calculatePathsFrom",value:function(e){var t,i,a,s,r=e.type,n=e.series,o=e.i,h=e.realIndex,c=e.translationsIndex,d=e.prevX,g=e.prevY,f=e.prevY2,x=this.w,b=new X(this.ctx);if(n[o][0]===null){for(var v=0;v0){var y=this.lineHelpers.checkPreviousPaths({pathFromLine:a,pathFromArea:s,realIndex:h});a=y.pathFromLine,s=y.pathFromArea}return{prevX:d,prevY:g,linePath:t,areaPath:i,pathFromLine:a,pathFromArea:s}}},{key:"_handlePaths",value:function(e){var t=e.type,i=e.realIndex,a=e.i,s=e.paths,r=this.w,n=new X(this.ctx),o=new ne(this.ctx);this.prevSeriesY.push(s.yArrj),r.globals.seriesXvalues[i]=s.xArrj,r.globals.seriesYvalues[i]=s.yArrj;var h=r.config.forecastDataPoints;if(h.count>0&&t!=="rangeArea"){var c=r.globals.seriesXvalues[i][r.globals.seriesXvalues[i].length-h.count-1],d=n.drawRect(c,0,r.globals.gridWidth,r.globals.gridHeight,0);r.globals.dom.elForecastMask.appendChild(d.node);var g=n.drawRect(0,0,c,r.globals.gridHeight,0);r.globals.dom.elNonForecastMask.appendChild(g.node)}this.pointsChart||r.globals.delayedElements.push({el:this.elPointsMain.node,index:i});var f={i:a,realIndex:i,animationDelay:a,initialSpeed:r.config.chart.animations.speed,dataChangeSpeed:r.config.chart.animations.dynamicAnimation.speed,className:"apexcharts-".concat(t)};if(t==="area")for(var x=o.fillPath({seriesNumber:i}),b=0;b0&&t!=="rangeArea"){var k=n.renderPaths(m);k.node.setAttribute("stroke-dasharray",h.dashArray),h.strokeWidth&&k.node.setAttribute("stroke-width",h.strokeWidth),this.elSeries.add(k),k.attr("clip-path","url(#forecastMask".concat(r.globals.cuid,")")),A.attr("clip-path","url(#nonForecastMask".concat(r.globals.cuid,")"))}}}}},{key:"_iterateOverDataPoints",value:function(e){var t,i,a=this,s=e.type,r=e.series,n=e.iterations,o=e.realIndex,h=e.translationsIndex,c=e.i,d=e.x,g=e.y,f=e.pX,x=e.pY,b=e.pathsFrom,v=e.linePaths,y=e.areaPaths,w=e.seriesIndex,l=e.lineYPosition,u=e.xArrj,m=e.yArrj,A=e.y2Arrj,k=e.isRangeStart,S=e.seriesRangeEnd,L=this.w,C=new X(this.ctx),I=this.yRatio,z=b.prevY,M=b.linePath,T=b.areaPath,E=b.pathFromLine,O=b.pathFromArea,D=P.isNumber(L.globals.minYArr[o])?L.globals.minYArr[o]:L.globals.minY;n||(n=L.globals.dataPoints>1?L.globals.dataPoints-1:L.globals.dataPoints);var H=function(Q,ee){return ee-Q/I[h]+2*(a.isReversed?Q/I[h]:0)},W=g,N=L.config.chart.stacked&&!L.globals.comboCharts||L.config.chart.stacked&&L.globals.comboCharts&&(!this.w.config.chart.stackOnlyBar||((t=this.w.config.series[o])===null||t===void 0?void 0:t.type)==="bar"||((i=this.w.config.series[o])===null||i===void 0?void 0:i.type)==="column"),B=L.config.stroke.curve;Array.isArray(B)&&(B=Array.isArray(w)?B[w[c]]:B[c]);for(var q,Z=0,j=0;j0&&L.globals.collapsedSeries.length0;ee--){if(!(L.globals.collapsedSeriesIndices.indexOf(w?.[ee]||ee)>-1))return ee;ee--}return 0}(c-1)][j+1]:l=this.zeroY:l=this.zeroY,se?g=H(D,l):(g=H(r[c][j+1],l),s==="rangeArea"&&(W=H(S[c][j+1],l))),u.push(d),!se||L.config.stroke.curve!=="smooth"&&L.config.stroke.curve!=="monotoneCubic"?(m.push(g),A.push(W)):(m.push(null),A.push(null));var G=this.lineHelpers.calculatePoints({series:r,x:d,y:g,realIndex:o,i:c,j,prevY:z}),_=this._createPaths({type:s,series:r,i:c,realIndex:o,j,x:d,y:g,y2:W,xArrj:u,yArrj:m,y2Arrj:A,pX:f,pY:x,pathState:Z,segmentStartX:q,linePath:M,areaPath:T,linePaths:v,areaPaths:y,curve:B,isRangeStart:k});y=_.areaPaths,v=_.linePaths,f=_.pX,x=_.pY,Z=_.pathState,q=_.segmentStartX,T=_.areaPath,M=_.linePath,!this.appendPathFrom||B==="monotoneCubic"&&s==="rangeArea"||(E+=C.line(d,this.zeroY),O+=C.line(d,this.zeroY)),this.handleNullDataPoints(r,G,c,j,o),this._handleMarkersAndLabels({type:s,pointsPos:G,i:c,j,realIndex:o,isRangeStart:k})}return{yArrj:m,xArrj:u,pathFromArea:O,areaPaths:y,pathFromLine:E,linePaths:v,linePath:M,areaPath:T}}},{key:"_handleMarkersAndLabels",value:function(e){var t=e.type,i=e.pointsPos,a=e.isRangeStart,s=e.i,r=e.j,n=e.realIndex,o=this.w,h=new be(this.ctx);if(this.pointsChart)this.scatter.draw(this.elSeries,r,{realIndex:n,pointsPos:i,zRatio:this.zRatio,elParent:this.elPointsMain});else{o.globals.series[s].length>1&&this.elPointsMain.node.classList.add("apexcharts-element-hidden");var c=this.markers.plotChartMarkers(i,n,r+1);c!==null&&this.elPointsMain.add(c)}var d=h.drawDataLabel({type:t,isRangeStart:a,pos:i,i:n,j:r+1});d!==null&&this.elDataLabelsWrap.add(d)}},{key:"_createPaths",value:function(e){var t=e.type,i=e.series,a=e.i;e.realIndex;var s=e.j,r=e.x,n=e.y,o=e.xArrj,h=e.yArrj,c=e.y2,d=e.y2Arrj,g=e.pX,f=e.pY,x=e.pathState,b=e.segmentStartX,v=e.linePath,y=e.areaPath,w=e.linePaths,l=e.areaPaths,u=e.curve,m=e.isRangeStart;this.w;var A,k=new X(this.ctx),S=this.areaBottomY,L=t==="rangeArea",C=t==="rangeArea"&&m;switch(u){case"monotoneCubic":var I=m?h:d;switch(x){case 0:if(I[s+1]===null)break;x=1;case 1:if(!(L?o.length===i[a].length:s===i[a].length-2))break;case 2:var z=m?o:o.slice().reverse(),M=m?I:I.slice().reverse(),T=(A=M,z.map(function(V,G){return[V,A[G]]}).filter(function(V){return V[1]!==null})),E=T.length>1?oa(T):T,O=[];L&&(C?l=T:O=l.reverse());var D=0,H=0;if(function(V,G){for(var _=function(Se){var ae=[],le=0;return Se.forEach(function(Si){Si!==null?le++:le>0&&(ae.push(le),le=0)}),le>0&&ae.push(le),ae}(V),Q=[],ee=0,oe=0;ee<_.length;oe+=_[ee++])Q[ee]=la(G,oe,oe+_[ee]);return Q}(M,E).forEach(function(V){D++;var G=function(ee){for(var oe="",Se=0;Se4?(oe+="C".concat(ae[0],", ").concat(ae[1]),oe+=", ".concat(ae[2],", ").concat(ae[3]),oe+=", ".concat(ae[4],", ").concat(ae[5])):le>2&&(oe+="S".concat(ae[0],", ").concat(ae[1]),oe+=", ".concat(ae[2],", ").concat(ae[3]))}return oe}(V),_=H,Q=(H+=V.length)-1;C?v=k.move(T[_][0],T[_][1])+G:L?v=k.move(O[_][0],O[_][1])+k.line(T[_][0],T[_][1])+G+k.line(O[Q][0],O[Q][1]):(v=k.move(T[_][0],T[_][1])+G,y=v+k.line(T[Q][0],S)+k.line(T[_][0],S)+"z",l.push(y)),w.push(v)}),L&&D>1&&!C){var W=w.slice(D).reverse();w.splice(D),W.forEach(function(V){return w.push(V)})}x=0}break;case"smooth":var N=.35*(r-g);if(i[a][s]===null)x=0;else switch(x){case 0:if(b=g,v=C?k.move(g,d[s])+k.line(g,f):k.move(g,f),y=k.move(g,f),x=1,s=i[a].length-2&&(C&&(v+=k.curve(r,n,r,n,r,c)+k.move(r,c)),y+=k.curve(r,n,r,n,r,S)+k.line(b,S)+"z",w.push(v),l.push(y),x=-1)}}g=r,f=n;break;default:var Z=function(V,G,_){var Q=[];switch(V){case"stepline":Q=k.line(G,null,"H")+k.line(null,_,"V");break;case"linestep":Q=k.line(null,_,"V")+k.line(G,null,"H");break;case"straight":Q=k.line(G,_)}return Q};if(i[a][s]===null)x=0;else switch(x){case 0:if(b=g,v=C?k.move(g,d[s])+k.line(g,f):k.move(g,f),y=k.move(g,f),x=1,s=i[a].length-2&&(C&&(v+=k.line(r,c)),y+=k.line(r,S)+k.line(b,S)+"z",w.push(v),l.push(y),x=-1)}}g=r,f=n}return{linePaths:w,areaPaths:l,pX:g,pY:f,pathState:x,segmentStartX:b,linePath:v,areaPath:y}}},{key:"handleNullDataPoints",value:function(e,t,i,a,s){var r=this.w;if(e[i][a]===null&&r.config.markers.showNullDataPoints||e[i].length===1){var n=this.strokeWidth-r.config.markers.strokeWidth/2;n>0||(n=0);var o=this.markers.plotChartMarkers(t,s,a+1,n,!0);o!==null&&this.elPointsMain.add(o)}}}]),p}();window.TreemapSquared={},window.TreemapSquared.generate=function(){function p(n,o,h,c){this.xoffset=n,this.yoffset=o,this.height=c,this.width=h,this.shortestEdge=function(){return Math.min(this.height,this.width)},this.getCoordinates=function(d){var g,f=[],x=this.xoffset,b=this.yoffset,v=s(d)/this.height,y=s(d)/this.width;if(this.width>=this.height)for(g=0;g=this.height){var f=d/this.height,x=this.width-f;g=new p(this.xoffset+f,this.yoffset,x,this.height)}else{var b=d/this.width,v=this.height-b;g=new p(this.xoffset,this.yoffset+b,this.width,v)}return g}}function e(n,o,h,c,d){c=c===void 0?0:c,d=d===void 0?0:d;var g=t(function(f,x){var b,v=[],y=x/s(f);for(b=0;b=l}(o,g=n[0],d)?(o.push(g),t(n.slice(1),o,h,c)):(f=h.cutArea(s(o),c),c.push(h.getCoordinates(o)),t(n,[],f,c)),c;c.push(h.getCoordinates(o))}function i(n,o){var h=Math.min.apply(Math,n),c=Math.max.apply(Math,n),d=s(n);return Math.max(Math.pow(o,2)*c/Math.pow(d,2),Math.pow(d,2)/(Math.pow(o,2)*h))}function a(n){return n&&n.constructor===Array}function s(n){var o,h=0;for(o=0;or-a&&h.width<=n-s){var c=o.rotateAroundCenter(e.node);e.node.setAttribute("transform","rotate(-90 ".concat(c.x," ").concat(c.y,") translate(").concat(h.height/3,")"))}}},{key:"truncateLabels",value:function(e,t,i,a,s,r){var n=new X(this.ctx),o=n.getTextRects(e,t).width+this.w.config.stroke.width+5>s-i&&r-a>s-i?r-a:s-i,h=n.getTextBasedOnMaxWidth({text:e,maxWidth:o,fontSize:t});return e.length!==h.length&&o/t<5?"":h}},{key:"animateTreemap",value:function(e,t,i,a){var s=new ve(this.ctx);s.animateRect(e,{x:t.x,y:t.y,width:t.width,height:t.height},{x:i.x,y:i.y,width:i.width,height:i.height},a,function(){s.animationCompleted(e)})}}]),p}(),_t=86400,ca=10/_t,da=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w,this.timeScaleArray=[],this.utc=this.w.config.xaxis.labels.datetimeUTC}return R(p,[{key:"calculateTimeScaleTicks",value:function(e,t){var i=this,a=this.w;if(a.globals.allSeriesCollapsed)return a.globals.labels=[],a.globals.timescaleLabels=[],[];var s=new K(this.ctx),r=(t-e)/864e5;this.determineInterval(r),a.globals.disableZoomIn=!1,a.globals.disableZoomOut=!1,r5e4&&(a.globals.disableZoomOut=!0);var n=s.getTimeUnitsfromTimestamp(e,t,this.utc),o=a.globals.gridWidth/r,h=o/24,c=h/60,d=c/60,g=Math.floor(24*r),f=Math.floor(1440*r),x=Math.floor(r*_t),b=Math.floor(r),v=Math.floor(r/30),y=Math.floor(r/365),w={minMillisecond:n.minMillisecond,minSecond:n.minSecond,minMinute:n.minMinute,minHour:n.minHour,minDate:n.minDate,minMonth:n.minMonth,minYear:n.minYear},l={firstVal:w,currentMillisecond:w.minMillisecond,currentSecond:w.minSecond,currentMinute:w.minMinute,currentHour:w.minHour,currentMonthDate:w.minDate,currentDate:w.minDate,currentMonth:w.minMonth,currentYear:w.minYear,daysWidthOnXAxis:o,hoursWidthOnXAxis:h,minutesWidthOnXAxis:c,secondsWidthOnXAxis:d,numberOfSeconds:x,numberOfMinutes:f,numberOfHours:g,numberOfDays:b,numberOfMonths:v,numberOfYears:y};switch(this.tickInterval){case"years":this.generateYearScale(l);break;case"months":case"half_year":this.generateMonthScale(l);break;case"months_days":case"months_fortnight":case"days":case"week_days":this.generateDayScale(l);break;case"hours":this.generateHourScale(l);break;case"minutes_fives":case"minutes":this.generateMinuteScale(l);break;case"seconds_tens":case"seconds_fives":case"seconds":this.generateSecondScale(l)}var u=this.timeScaleArray.map(function(m){var A={position:m.position,unit:m.unit,year:m.year,day:m.day?m.day:1,hour:m.hour?m.hour:0,month:m.month+1};return m.unit==="month"?Y(Y({},A),{},{day:1,value:m.value+1}):m.unit==="day"||m.unit==="hour"?Y(Y({},A),{},{value:m.value}):m.unit==="minute"?Y(Y({},A),{},{value:m.value,minute:m.value}):m.unit==="second"?Y(Y({},A),{},{value:m.value,minute:m.minute,second:m.second}):m});return u.filter(function(m){var A=1,k=Math.ceil(a.globals.gridWidth/120),S=m.value;a.config.xaxis.tickAmount!==void 0&&(k=a.config.xaxis.tickAmount),u.length>k&&(A=Math.floor(u.length/k));var L=!1,C=!1;switch(i.tickInterval){case"years":m.unit==="year"&&(L=!0);break;case"half_year":A=7,m.unit==="year"&&(L=!0);break;case"months":A=1,m.unit==="year"&&(L=!0);break;case"months_fortnight":A=15,m.unit!=="year"&&m.unit!=="month"||(L=!0),S===30&&(C=!0);break;case"months_days":A=10,m.unit==="month"&&(L=!0),S===30&&(C=!0);break;case"week_days":A=8,m.unit==="month"&&(L=!0);break;case"days":A=1,m.unit==="month"&&(L=!0);break;case"hours":m.unit==="day"&&(L=!0);break;case"minutes_fives":case"seconds_fives":S%5!=0&&(C=!0);break;case"seconds_tens":S%10!=0&&(C=!0)}if(i.tickInterval==="hours"||i.tickInterval==="minutes_fives"||i.tickInterval==="seconds_tens"||i.tickInterval==="seconds_fives"){if(!C)return!0}else if((S%A==0||L)&&!C)return!0})}},{key:"recalcDimensionsBasedOnFormat",value:function(e,t){var i=this.w,a=this.formatDates(e),s=this.removeOverlappingTS(a);i.globals.timescaleLabels=s.slice(),new Ne(this.ctx).plotCoords()}},{key:"determineInterval",value:function(e){var t=24*e,i=60*t;switch(!0){case e/365>5:this.tickInterval="years";break;case e>800:this.tickInterval="half_year";break;case e>180:this.tickInterval="months";break;case e>90:this.tickInterval="months_fortnight";break;case e>60:this.tickInterval="months_days";break;case e>30:this.tickInterval="week_days";break;case e>2:this.tickInterval="days";break;case t>2.4:this.tickInterval="hours";break;case i>15:this.tickInterval="minutes_fives";break;case i>5:this.tickInterval="minutes";break;case i>1:this.tickInterval="seconds_tens";break;case 60*i>20:this.tickInterval="seconds_fives";break;default:this.tickInterval="seconds"}}},{key:"generateYearScale",value:function(e){var t=e.firstVal,i=e.currentMonth,a=e.currentYear,s=e.daysWidthOnXAxis,r=e.numberOfYears,n=t.minYear,o=0,h=new K(this.ctx),c="year";if(t.minDate>1||t.minMonth>0){var d=h.determineRemainingDaysOfYear(t.minYear,t.minMonth,t.minDate);o=(h.determineDaysOfYear(t.minYear)-d+1)*s,n=t.minYear+1,this.timeScaleArray.push({position:o,value:n,unit:c,year:n,month:P.monthMod(i+1)})}else t.minDate===1&&t.minMonth===0&&this.timeScaleArray.push({position:o,value:n,unit:c,year:a,month:P.monthMod(i+1)});for(var g=n,f=o,x=0;x1){h=(c.determineDaysOfMonths(a+1,t.minYear)-i+1)*r,o=P.monthMod(a+1);var f=s+g,x=P.monthMod(o),b=o;o===0&&(d="year",b=f,x=1,f+=g+=1),this.timeScaleArray.push({position:h,value:b,unit:d,year:f,month:x})}else this.timeScaleArray.push({position:h,value:o,unit:d,year:s,month:P.monthMod(a)});for(var v=o+1,y=h,w=0,l=1;wn.determineDaysOfMonths(u+1,m)&&(c=1,o="month",f=u+=1),u},g=(24-t.minHour)*s,f=h,x=d(c,i,a);t.minHour===0&&t.minDate===1?(g=0,f=P.monthMod(t.minMonth),o="month",c=t.minDate):t.minDate!==1&&t.minHour===0&&t.minMinute===0&&(g=0,h=t.minDate,f=h,x=d(c=h,i,a)),this.timeScaleArray.push({position:g,value:f,unit:o,year:this._getYear(a,x,0),month:P.monthMod(x),day:c});for(var b=g,v=0;vo.determineDaysOfMonths(k+1,s)&&(v=1,k+=1),{month:k,date:v}},d=function(A,k){return A>o.determineDaysOfMonths(k+1,s)?k+=1:k},g=60-(t.minMinute+t.minSecond/60),f=g*r,x=t.minHour+1,b=x;g===60&&(f=0,b=x=t.minHour);var v=i;b>=24&&(b=0,v+=1,h="day");var y=c(v,a).month;y=d(v,y),this.timeScaleArray.push({position:f,value:x,unit:h,day:v,hour:b,year:s,month:P.monthMod(y)}),b++;for(var w=f,l=0;l=24&&(b=0,h="day",y=c(v+=1,y).month,y=d(v,y));var u=this._getYear(s,y,0);w=60*r+w;var m=b===0?v:b;this.timeScaleArray.push({position:w,value:m,unit:h,hour:b,day:v,year:u,month:P.monthMod(y)}),b++}}},{key:"generateMinuteScale",value:function(e){for(var t=e.currentMillisecond,i=e.currentSecond,a=e.currentMinute,s=e.currentHour,r=e.currentDate,n=e.currentMonth,o=e.currentYear,h=e.minutesWidthOnXAxis,c=e.secondsWidthOnXAxis,d=e.numberOfMinutes,g=a+1,f=r,x=n,b=o,v=s,y=(60-i-t/1e3)*c,w=0;w=60&&(g=0,(v+=1)===24&&(v=0)),this.timeScaleArray.push({position:y,value:g,unit:"minute",hour:v,minute:g,day:f,year:this._getYear(b,x,0),month:P.monthMod(x)}),y+=h,g++}},{key:"generateSecondScale",value:function(e){for(var t=e.currentMillisecond,i=e.currentSecond,a=e.currentMinute,s=e.currentHour,r=e.currentDate,n=e.currentMonth,o=e.currentYear,h=e.secondsWidthOnXAxis,c=e.numberOfSeconds,d=i+1,g=a,f=r,x=n,b=o,v=s,y=(1e3-t)/1e3*h,w=0;w=60&&(d=0,++g>=60&&(g=0,++v===24&&(v=0))),this.timeScaleArray.push({position:y,value:d,unit:"second",hour:v,minute:g,second:d,day:f,year:this._getYear(b,x,0),month:P.monthMod(x)}),y+=h,d++}},{key:"createRawDateString",value:function(e,t){var i=e.year;return e.month===0&&(e.month=1),i+="-"+("0"+e.month.toString()).slice(-2),e.unit==="day"?i+=e.unit==="day"?"-"+("0"+t).slice(-2):"-01":i+="-"+("0"+(e.day?e.day:"1")).slice(-2),e.unit==="hour"?i+=e.unit==="hour"?"T"+("0"+t).slice(-2):"T00":i+="T"+("0"+(e.hour?e.hour:"0")).slice(-2),e.unit==="minute"?i+=":"+("0"+t).slice(-2):i+=":"+(e.minute?("0"+e.minute).slice(-2):"00"),e.unit==="second"?i+=":"+("0"+t).slice(-2):i+=":00",this.utc&&(i+=".000Z"),i}},{key:"formatDates",value:function(e){var t=this,i=this.w;return e.map(function(a){var s=a.value.toString(),r=new K(t.ctx),n=t.createRawDateString(a,s),o=r.getDate(r.parseDate(n));if(t.utc||(o=r.getDate(r.parseDateWithTimezone(n))),i.config.xaxis.labels.format===void 0){var h="dd MMM",c=i.config.xaxis.labels.datetimeFormatter;a.unit==="year"&&(h=c.year),a.unit==="month"&&(h=c.month),a.unit==="day"&&(h=c.day),a.unit==="hour"&&(h=c.hour),a.unit==="minute"&&(h=c.minute),a.unit==="second"&&(h=c.second),s=r.formatDate(o,h)}else s=r.formatDate(o,i.config.xaxis.labels.format);return{dateString:n,position:a.position,value:s,unit:a.unit,year:a.year,month:a.month}})}},{key:"removeOverlappingTS",value:function(e){var t,i=this,a=new X(this.ctx),s=!1;e.length>0&&e[0].value&&e.every(function(o){return o.value.length===e[0].value.length})&&(s=!0,t=a.getTextRects(e[0].value).width);var r=0,n=e.map(function(o,h){if(h>0&&i.w.config.xaxis.labels.hideOverlappingLabels){var c=s?t:a.getTextRects(e[r].value).width,d=e[r].position;return o.position>d+c+10?(r=h,o):null}return o});return n=n.filter(function(o){return o!==null})}},{key:"_getYear",value:function(e,t,i){return e+Math.floor(t/12)+i}}]),p}(),ga=function(){function p(e,t){F(this,p),this.ctx=t,this.w=t.w,this.el=e}return R(p,[{key:"setupElements",value:function(){var e=this.w.globals,t=this.w.config,i=t.chart.type;e.axisCharts=["line","area","bar","rangeBar","rangeArea","candlestick","boxPlot","scatter","bubble","radar","heatmap","treemap"].indexOf(i)>-1,e.xyCharts=["line","area","bar","rangeBar","rangeArea","candlestick","boxPlot","scatter","bubble"].indexOf(i)>-1,e.isBarHorizontal=(t.chart.type==="bar"||t.chart.type==="rangeBar"||t.chart.type==="boxPlot")&&t.plotOptions.bar.horizontal,e.chartClass=".apexcharts"+e.chartID,e.dom.baseEl=this.el,e.dom.elWrap=document.createElement("div"),X.setAttrs(e.dom.elWrap,{id:e.chartClass.substring(1),class:"apexcharts-canvas "+e.chartClass.substring(1)}),this.el.appendChild(e.dom.elWrap),e.dom.Paper=new window.SVG.Doc(e.dom.elWrap),e.dom.Paper.attr({class:"apexcharts-svg","xmlns:data":"ApexChartsNS",transform:"translate(".concat(t.chart.offsetX,", ").concat(t.chart.offsetY,")")}),e.dom.Paper.node.style.background=t.theme.mode!=="dark"||t.chart.background?t.theme.mode!=="light"||t.chart.background?t.chart.background:"#fff":"#424242",this.setSVGDimensions(),e.dom.elLegendForeign=document.createElementNS(e.SVGNS,"foreignObject"),X.setAttrs(e.dom.elLegendForeign,{x:0,y:0,width:e.svgWidth,height:e.svgHeight}),e.dom.elLegendWrap=document.createElement("div"),e.dom.elLegendWrap.classList.add("apexcharts-legend"),e.dom.elLegendWrap.setAttribute("xmlns","http://www.w3.org/1999/xhtml"),e.dom.elLegendForeign.appendChild(e.dom.elLegendWrap),e.dom.Paper.node.appendChild(e.dom.elLegendForeign),e.dom.elGraphical=e.dom.Paper.group().attr({class:"apexcharts-inner apexcharts-graphical"}),e.dom.elDefs=e.dom.Paper.defs(),e.dom.Paper.add(e.dom.elGraphical),e.dom.elGraphical.add(e.dom.elDefs)}},{key:"plotChartType",value:function(e,t){var i=this.w,a=i.config,s=i.globals,r={series:[],i:[]},n={series:[],i:[]},o={series:[],i:[]},h={series:[],i:[]},c={series:[],i:[]},d={series:[],i:[]},g={series:[],i:[]},f={series:[],i:[]},x={series:[],seriesRangeEnd:[],i:[]},b=a.chart.type!==void 0?a.chart.type:"line",v=null,y=0;s.series.forEach(function(M,T){var E=e[T].type||b;switch(E){case"column":case"bar":c.series.push(M),c.i.push(T),i.globals.columnSeries=c;break;case"area":n.series.push(M),n.i.push(T);break;case"line":r.series.push(M),r.i.push(T);break;case"scatter":o.series.push(M),o.i.push(T);break;case"bubble":h.series.push(M),h.i.push(T);break;case"candlestick":d.series.push(M),d.i.push(T);break;case"boxPlot":g.series.push(M),g.i.push(T);break;case"rangeBar":f.series.push(M),f.i.push(T);break;case"rangeArea":x.series.push(s.seriesRangeStart[T]),x.seriesRangeEnd.push(s.seriesRangeEnd[T]),x.i.push(T);break;case"heatmap":case"treemap":case"pie":case"donut":case"polarArea":case"radialBar":case"radar":v=E;break;default:console.warn("You have specified an unrecognized series type (",E,").")}b!==E&&E!=="scatter"&&y++}),y>0&&(v!==null&&console.warn("Chart or series type ",v," can not appear with other chart or series types."),c.series.length>0&&a.plotOptions.bar.horizontal&&(y-=c.length,c={series:[],i:[]},i.globals.columnSeries={series:[],i:[]},console.warn("Horizontal bars are not supported in a mixed/combo chart. Please turn off `plotOptions.bar.horizontal`"))),s.comboCharts||(s.comboCharts=y>0);var w=new tt(this.ctx,t),l=new Qe(this.ctx,t);this.ctx.pie=new Vt(this.ctx);var u=new aa(this.ctx);this.ctx.rangeBar=new sa(this.ctx,t);var m=new ia(this.ctx),A=[];if(s.comboCharts){var k,S,L=new $(this.ctx);if(n.series.length>0&&(k=A).push.apply(k,te(L.drawSeriesByGroup(n,s.areaGroups,"area",w))),c.series.length>0)if(i.config.chart.stacked){var C=new St(this.ctx,t);A.push(C.draw(c.series,c.i))}else this.ctx.bar=new me(this.ctx,t),A.push(this.ctx.bar.draw(c.series,c.i));if(x.series.length>0&&A.push(w.draw(x.series,"rangeArea",x.i,x.seriesRangeEnd)),r.series.length>0&&(S=A).push.apply(S,te(L.drawSeriesByGroup(r,s.lineGroups,"line",w))),d.series.length>0&&A.push(l.draw(d.series,"candlestick",d.i)),g.series.length>0&&A.push(l.draw(g.series,"boxPlot",g.i)),f.series.length>0&&A.push(this.ctx.rangeBar.draw(f.series,f.i)),o.series.length>0){var I=new tt(this.ctx,t,!0);A.push(I.draw(o.series,"scatter",o.i))}if(h.series.length>0){var z=new tt(this.ctx,t,!0);A.push(z.draw(h.series,"bubble",h.i))}}else switch(a.chart.type){case"line":A=w.draw(s.series,"line");break;case"area":A=w.draw(s.series,"area");break;case"bar":a.chart.stacked?A=new St(this.ctx,t).draw(s.series):(this.ctx.bar=new me(this.ctx,t),A=this.ctx.bar.draw(s.series));break;case"candlestick":A=new Qe(this.ctx,t).draw(s.series,"candlestick");break;case"boxPlot":A=new Qe(this.ctx,t).draw(s.series,a.chart.type);break;case"rangeBar":A=this.ctx.rangeBar.draw(s.series);break;case"rangeArea":A=w.draw(s.seriesRangeStart,"rangeArea",void 0,s.seriesRangeEnd);break;case"heatmap":A=new ta(this.ctx,t).draw(s.series);break;case"treemap":A=new ha(this.ctx,t).draw(s.series);break;case"pie":case"donut":case"polarArea":A=this.ctx.pie.draw(s.series);break;case"radialBar":A=u.draw(s.series);break;case"radar":A=m.draw(s.series);break;default:A=w.draw(s.series)}return A}},{key:"setSVGDimensions",value:function(){var e=this.w.globals,t=this.w.config;t.chart.width||(t.chart.width="100%"),t.chart.height||(t.chart.height="auto"),e.svgWidth=t.chart.width,e.svgHeight=t.chart.height;var i=P.getDimensions(this.el),a=t.chart.width.toString().split(/[0-9]+/g).pop();a==="%"?P.isNumber(i[0])&&(i[0].width===0&&(i=P.getDimensions(this.el.parentNode)),e.svgWidth=i[0]*parseInt(t.chart.width,10)/100):a!=="px"&&a!==""||(e.svgWidth=parseInt(t.chart.width,10));var s=String(t.chart.height).toString().split(/[0-9]+/g).pop();if(e.svgHeight!=="auto"&&e.svgHeight!=="")if(s==="%"){var r=P.getDimensions(this.el.parentNode);e.svgHeight=r[1]*parseInt(t.chart.height,10)/100}else e.svgHeight=parseInt(t.chart.height,10);else e.axisCharts?e.svgHeight=e.svgWidth/1.61:e.svgHeight=e.svgWidth/1.2;if(e.svgWidth<0&&(e.svgWidth=0),e.svgHeight<0&&(e.svgHeight=0),X.setAttrs(e.dom.Paper.node,{width:e.svgWidth,height:e.svgHeight}),s!=="%"){var n=t.chart.sparkline.enabled?0:e.axisCharts?t.chart.parentHeightOffset:0;e.dom.Paper.node.parentNode.parentNode.style.minHeight=e.svgHeight+n+"px"}e.dom.elWrap.style.width=e.svgWidth+"px",e.dom.elWrap.style.height=e.svgHeight+"px"}},{key:"shiftGraphPosition",value:function(){var e=this.w.globals,t=e.translateY,i={transform:"translate("+e.translateX+", "+t+")"};X.setAttrs(e.dom.elGraphical.node,i)}},{key:"resizeNonAxisCharts",value:function(){var e=this.w,t=e.globals,i=0,a=e.config.chart.sparkline.enabled?1:15;a+=e.config.grid.padding.bottom,e.config.legend.position!=="top"&&e.config.legend.position!=="bottom"||!e.config.legend.show||e.config.legend.floating||(i=new Dt(this.ctx).legendHelpers.getLegendDimensions().clwh+10);var s=e.globals.dom.baseEl.querySelector(".apexcharts-radialbar, .apexcharts-pie"),r=2.05*e.globals.radialSize;if(s&&!e.config.chart.sparkline.enabled&&e.config.plotOptions.radialBar.startAngle!==0){var n=P.getBoundingClientRect(s);r=n.bottom;var o=n.bottom-n.top;r=Math.max(2.05*e.globals.radialSize,o)}var h=r+t.translateY+i+a;t.dom.elLegendForeign&&t.dom.elLegendForeign.setAttribute("height",h),e.config.chart.height&&String(e.config.chart.height).indexOf("%")>0||(t.dom.elWrap.style.height=h+"px",X.setAttrs(t.dom.Paper.node,{height:h}),t.dom.Paper.node.parentNode.parentNode.style.minHeight=h+"px")}},{key:"coreCalculations",value:function(){new rt(this.ctx).init()}},{key:"resetGlobals",value:function(){var e=this,t=function(){return e.w.config.series.map(function(s){return[]})},i=new Et,a=this.w.globals;i.initGlobalVars(a),a.seriesXvalues=t(),a.seriesYvalues=t()}},{key:"isMultipleY",value:function(){if(this.w.config.yaxis.constructor===Array&&this.w.config.yaxis.length>1)return this.w.globals.isMultipleYAxis=!0,!0}},{key:"xySettings",value:function(){var e=null,t=this.w;if(t.globals.axisCharts){if(t.config.xaxis.crosshairs.position==="back"&&new nt(this.ctx).drawXCrosshairs(),t.config.yaxis[0].crosshairs.position==="back"&&new nt(this.ctx).drawYCrosshairs(),t.config.xaxis.type==="datetime"&&t.config.xaxis.labels.formatter===void 0){this.ctx.timeScale=new da(this.ctx);var i=[];isFinite(t.globals.minX)&&isFinite(t.globals.maxX)&&!t.globals.isBarHorizontal?i=this.ctx.timeScale.calculateTimeScaleTicks(t.globals.minX,t.globals.maxX):t.globals.isBarHorizontal&&(i=this.ctx.timeScale.calculateTimeScaleTicks(t.globals.minY,t.globals.maxY)),this.ctx.timeScale.recalcDimensionsBasedOnFormat(i)}e=new $(this.ctx).getCalculatedRatios()}return e}},{key:"updateSourceChart",value:function(e){this.ctx.w.globals.selection=void 0,this.ctx.updateHelpers._updateOptions({chart:{selection:{xaxis:{min:e.w.globals.minX,max:e.w.globals.maxX}}}},!1,!1)}},{key:"setupBrushHandler",value:function(){var e=this,t=this.w;if(t.config.chart.brush.enabled&&typeof t.config.chart.events.selection!="function"){var i=Array.isArray(t.config.chart.brush.targets)?t.config.chart.brush.targets:[t.config.chart.brush.target];i.forEach(function(a){var s=ApexCharts.getChartByID(a);s.w.globals.brushSource=e.ctx,typeof s.w.config.chart.events.zoomed!="function"&&(s.w.config.chart.events.zoomed=function(){e.updateSourceChart(s)}),typeof s.w.config.chart.events.scrolled!="function"&&(s.w.config.chart.events.scrolled=function(){e.updateSourceChart(s)})}),t.config.chart.events.selection=function(a,s){i.forEach(function(r){ApexCharts.getChartByID(r).ctx.updateHelpers._updateOptions({xaxis:{min:s.xaxis.min,max:s.xaxis.max}},!1,!1,!1,!1)})}}}}]),p}(),ua=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"_updateOptions",value:function(e){var t=this,i=arguments.length>1&&arguments[1]!==void 0&&arguments[1],a=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2],s=!(arguments.length>3&&arguments[3]!==void 0)||arguments[3],r=arguments.length>4&&arguments[4]!==void 0&&arguments[4];return new Promise(function(n){var o=[t.ctx];s&&(o=t.ctx.getSyncedCharts()),t.ctx.w.globals.isExecCalled&&(o=[t.ctx],t.ctx.w.globals.isExecCalled=!1),o.forEach(function(h,c){var d=h.w;if(d.globals.shouldAnimate=a,i||(d.globals.resized=!0,d.globals.dataChanged=!0,a&&h.series.getPreviousPaths()),e&&J(e)==="object"&&(h.config=new Pe(e),e=$.extendArrayProps(h.config,e,d),h.w.globals.chartID!==t.ctx.w.globals.chartID&&delete e.series,d.config=P.extend(d.config,e),r&&(d.globals.lastXAxis=e.xaxis?P.clone(e.xaxis):[],d.globals.lastYAxis=e.yaxis?P.clone(e.yaxis):[],d.globals.initialConfig=P.extend({},d.config),d.globals.initialSeries=P.clone(d.config.series),e.series))){for(var g=0;g2&&arguments[2]!==void 0&&arguments[2];return new Promise(function(s){var r,n=i.w;return n.globals.shouldAnimate=t,n.globals.dataChanged=!0,t&&i.ctx.series.getPreviousPaths(),n.globals.axisCharts?((r=e.map(function(o,h){return i._extendSeries(o,h)})).length===0&&(r=[{data:[]}]),n.config.series=r):n.config.series=e.slice(),a&&(n.globals.initialConfig.series=P.clone(n.config.series),n.globals.initialSeries=P.clone(n.config.series)),i.ctx.update().then(function(){s(i.ctx)})})}},{key:"_extendSeries",value:function(e,t){var i=this.w,a=i.config.series[t];return Y(Y({},i.config.series[t]),{},{name:e.name?e.name:a?.name,color:e.color?e.color:a?.color,type:e.type?e.type:a?.type,group:e.group?e.group:a?.group,hidden:e.hidden!==void 0?e.hidden:a?.hidden,data:e.data?e.data:a?.data,zIndex:e.zIndex!==void 0?e.zIndex:t})}},{key:"toggleDataPointSelection",value:function(e,t){var i=this.w,a=null,s=".apexcharts-series[data\\:realIndex='".concat(e,"']");return i.globals.axisCharts?a=i.globals.dom.Paper.select("".concat(s," path[j='").concat(t,"'], ").concat(s," circle[j='").concat(t,"'], ").concat(s," rect[j='").concat(t,"']")).members[0]:t===void 0&&(a=i.globals.dom.Paper.select("".concat(s," path[j='").concat(e,"']")).members[0],i.config.chart.type!=="pie"&&i.config.chart.type!=="polarArea"&&i.config.chart.type!=="donut"||this.ctx.pie.pieClicked(e)),a?(new X(this.ctx).pathMouseDown(a,null),a.node?a.node:null):(console.warn("toggleDataPointSelection: Element not found"),null)}},{key:"forceXAxisUpdate",value:function(e){var t=this.w;if(["min","max"].forEach(function(a){e.xaxis[a]!==void 0&&(t.config.xaxis[a]=e.xaxis[a],t.globals.lastXAxis[a]=e.xaxis[a])}),e.xaxis.categories&&e.xaxis.categories.length&&(t.config.xaxis.categories=e.xaxis.categories),t.config.xaxis.convertedCatToNumeric){var i=new Le(e);e=i.convertCatToNumericXaxis(e,this.ctx)}return e}},{key:"forceYAxisUpdate",value:function(e){return e.chart&&e.chart.stacked&&e.chart.stackType==="100%"&&(Array.isArray(e.yaxis)?e.yaxis.forEach(function(t,i){e.yaxis[i].min=0,e.yaxis[i].max=100}):(e.yaxis.min=0,e.yaxis.max=100)),e}},{key:"revertDefaultAxisMinMax",value:function(e){var t=this,i=this.w,a=i.globals.lastXAxis,s=i.globals.lastYAxis;e&&e.xaxis&&(a=e.xaxis),e&&e.yaxis&&(s=e.yaxis),i.config.xaxis.min=a.min,i.config.xaxis.max=a.max;var r=function(n){s[n]!==void 0&&(i.config.yaxis[n].min=s[n].min,i.config.yaxis[n].max=s[n].max)};i.config.yaxis.map(function(n,o){i.globals.zoomed||s[o]!==void 0?r(o):t.ctx.opts.yaxis[o]!==void 0&&(n.min=t.ctx.opts.yaxis[o].min,n.max=t.ctx.opts.yaxis[o].max)})}}]),p}();he=typeof window<"u"?window:void 0,Ce=function(p,e){var t=(this!==void 0?this:p).SVG=function(l){if(t.supported)return l=new t.Doc(l),t.parser.draw||t.prepare(),l};if(t.ns="http://www.w3.org/2000/svg",t.xmlns="http://www.w3.org/2000/xmlns/",t.xlink="http://www.w3.org/1999/xlink",t.svgjs="http://svgjs.dev",t.supported=!0,!t.supported)return!1;t.did=1e3,t.eid=function(l){return"Svgjs"+c(l)+t.did++},t.create=function(l){var u=e.createElementNS(this.ns,l);return u.setAttribute("id",this.eid(l)),u},t.extend=function(){var l,u;u=(l=[].slice.call(arguments)).pop();for(var m=l.length-1;m>=0;m--)if(l[m])for(var A in u)l[m].prototype[A]=u[A];t.Set&&t.Set.inherit&&t.Set.inherit()},t.invent=function(l){var u=typeof l.create=="function"?l.create:function(){this.constructor.call(this,t.create(l.create))};return l.inherit&&(u.prototype=new l.inherit),l.extend&&t.extend(u,l.extend),l.construct&&t.extend(l.parent||t.Container,l.construct),u},t.adopt=function(l){return l?l.instance?l.instance:((u=l.nodeName=="svg"?l.parentNode instanceof p.SVGElement?new t.Nested:new t.Doc:l.nodeName=="linearGradient"?new t.Gradient("linear"):l.nodeName=="radialGradient"?new t.Gradient("radial"):t[c(l.nodeName)]?new t[c(l.nodeName)]:new t.Element(l)).type=l.nodeName,u.node=l,l.instance=u,u instanceof t.Doc&&u.namespace().defs(),u.setData(JSON.parse(l.getAttribute("svgjs:data"))||{}),u):null;var u},t.prepare=function(){var l=e.getElementsByTagName("body")[0],u=(l?new t.Doc(l):t.adopt(e.documentElement).nested()).size(2,0);t.parser={body:l||e.documentElement,draw:u.style("opacity:0;position:absolute;left:-100%;top:-100%;overflow:hidden").node,poly:u.polyline().node,path:u.path().node,native:t.create("svg")}},t.parser={native:t.create("svg")},e.addEventListener("DOMContentLoaded",function(){t.parser.draw||t.prepare()},!1),t.regex={numberAndUnit:/^([+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?)([a-z%]*)$/i,hex:/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i,rgb:/rgb\((\d+),(\d+),(\d+)\)/,reference:/#([a-z0-9\-_]+)/i,transforms:/\)\s*,?\s*/,whitespace:/\s/g,isHex:/^#[a-f0-9]{3,6}$/i,isRgb:/^rgb\(/,isCss:/[^:]+:[^;]+;?/,isBlank:/^(\s+)?$/,isNumber:/^[+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,isPercent:/^-?[\d\.]+%$/,isImage:/\.(jpg|jpeg|png|gif|svg)(\?[^=]+.*)?/i,delimiter:/[\s,]+/,hyphen:/([^e])\-/gi,pathLetters:/[MLHVCSQTAZ]/gi,isPathLetter:/[MLHVCSQTAZ]/i,numbersWithDots:/((\d?\.\d+(?:e[+-]?\d+)?)((?:\.\d+(?:e[+-]?\d+)?)+))+/gi,dots:/\./g},t.utils={map:function(l,u){for(var m=l.length,A=[],k=0;k1?1:l,new t.Color({r:~~(this.r+(this.destination.r-this.r)*l),g:~~(this.g+(this.destination.g-this.g)*l),b:~~(this.b+(this.destination.b-this.b)*l)})):this}}),t.Color.test=function(l){return l+="",t.regex.isHex.test(l)||t.regex.isRgb.test(l)},t.Color.isRgb=function(l){return l&&typeof l.r=="number"&&typeof l.g=="number"&&typeof l.b=="number"},t.Color.isColor=function(l){return t.Color.isRgb(l)||t.Color.test(l)},t.Array=function(l,u){(l=(l||[]).valueOf()).length==0&&u&&(l=u.valueOf()),this.value=this.parse(l)},t.extend(t.Array,{toString:function(){return this.value.join(" ")},valueOf:function(){return this.value},parse:function(l){return l=l.valueOf(),Array.isArray(l)?l:this.split(l)}}),t.PointArray=function(l,u){t.Array.call(this,l,u||[[0,0]])},t.PointArray.prototype=new t.Array,t.PointArray.prototype.constructor=t.PointArray;for(var i={M:function(l,u,m){return u.x=m.x=l[0],u.y=m.y=l[1],["M",u.x,u.y]},L:function(l,u){return u.x=l[0],u.y=l[1],["L",l[0],l[1]]},H:function(l,u){return u.x=l[0],["H",l[0]]},V:function(l,u){return u.y=l[0],["V",l[0]]},C:function(l,u){return u.x=l[4],u.y=l[5],["C",l[0],l[1],l[2],l[3],l[4],l[5]]},Q:function(l,u){return u.x=l[2],u.y=l[3],["Q",l[0],l[1],l[2],l[3]]},S:function(l,u){return u.x=l[2],u.y=l[3],["S",l[0],l[1],l[2],l[3]]},Z:function(l,u,m){return u.x=m.x,u.y=m.y,["Z"]}},a="mlhvqtcsaz".split(""),s=0,r=a.length;sL);return A},bbox:function(){return t.parser.draw||t.prepare(),t.parser.path.setAttribute("d",this.toString()),t.parser.path.getBBox()}}),t.Number=t.invent({create:function(l,u){this.value=0,this.unit=u||"",typeof l=="number"?this.value=isNaN(l)?0:isFinite(l)?l:l<0?-34e37:34e37:typeof l=="string"?(u=l.match(t.regex.numberAndUnit))&&(this.value=parseFloat(u[1]),u[5]=="%"?this.value/=100:u[5]=="s"&&(this.value*=1e3),this.unit=u[5]):l instanceof t.Number&&(this.value=l.valueOf(),this.unit=l.unit)},extend:{toString:function(){return(this.unit=="%"?~~(1e8*this.value)/1e6:this.unit=="s"?this.value/1e3:this.value)+this.unit},toJSON:function(){return this.toString()},valueOf:function(){return this.value},plus:function(l){return l=new t.Number(l),new t.Number(this+l,this.unit||l.unit)},minus:function(l){return l=new t.Number(l),new t.Number(this-l,this.unit||l.unit)},times:function(l){return l=new t.Number(l),new t.Number(this*l,this.unit||l.unit)},divide:function(l){return l=new t.Number(l),new t.Number(this/l,this.unit||l.unit)},to:function(l){var u=new t.Number(this);return typeof l=="string"&&(u.unit=l),u},morph:function(l){return this.destination=new t.Number(l),l.relative&&(this.destination.value+=this.value),this},at:function(l){return this.destination?new t.Number(this.destination).minus(this).times(l).plus(this):this}}}),t.Element=t.invent({create:function(l){this._stroke=t.defaults.attrs.stroke,this._event=null,this.dom={},(this.node=l)&&(this.type=l.nodeName,this.node.instance=this,this._stroke=l.getAttribute("stroke")||this._stroke)},extend:{x:function(l){return this.attr("x",l)},y:function(l){return this.attr("y",l)},cx:function(l){return l==null?this.x()+this.width()/2:this.x(l-this.width()/2)},cy:function(l){return l==null?this.y()+this.height()/2:this.y(l-this.height()/2)},move:function(l,u){return this.x(l).y(u)},center:function(l,u){return this.cx(l).cy(u)},width:function(l){return this.attr("width",l)},height:function(l){return this.attr("height",l)},size:function(l,u){var m=g(this,l,u);return this.width(new t.Number(m.width)).height(new t.Number(m.height))},clone:function(l){this.writeDataToDom();var u=b(this.node.cloneNode(!0));return l?l.add(u):this.after(u),u},remove:function(){return this.parent()&&this.parent().removeElement(this),this},replace:function(l){return this.after(l).remove(),l},addTo:function(l){return l.put(this)},putIn:function(l){return l.add(this)},id:function(l){return this.attr("id",l)},show:function(){return this.style("display","")},hide:function(){return this.style("display","none")},visible:function(){return this.style("display")!="none"},toString:function(){return this.attr("id")},classes:function(){var l=this.attr("class");return l==null?[]:l.trim().split(t.regex.delimiter)},hasClass:function(l){return this.classes().indexOf(l)!=-1},addClass:function(l){if(!this.hasClass(l)){var u=this.classes();u.push(l),this.attr("class",u.join(" "))}return this},removeClass:function(l){return this.hasClass(l)&&this.attr("class",this.classes().filter(function(u){return u!=l}).join(" ")),this},toggleClass:function(l){return this.hasClass(l)?this.removeClass(l):this.addClass(l)},reference:function(l){return t.get(this.attr(l))},parent:function(l){var u=this;if(!u.node.parentNode)return null;if(u=t.adopt(u.node.parentNode),!l)return u;for(;u&&u.node instanceof p.SVGElement;){if(typeof l=="string"?u.matches(l):u instanceof l)return u;if(!u.node.parentNode||u.node.parentNode.nodeName=="#document")return null;u=t.adopt(u.node.parentNode)}},doc:function(){return this instanceof t.Doc?this:this.parent(t.Doc)},parents:function(l){var u=[],m=this;do{if(!(m=m.parent(l))||!m.node)break;u.push(m)}while(m.parent);return u},matches:function(l){return function(u,m){return(u.matches||u.matchesSelector||u.msMatchesSelector||u.mozMatchesSelector||u.webkitMatchesSelector||u.oMatchesSelector).call(u,m)}(this.node,l)},native:function(){return this.node},svg:function(l){var u=e.createElementNS("http://www.w3.org/2000/svg","svg");if(!(l&&this instanceof t.Parent))return u.appendChild(l=e.createElementNS("http://www.w3.org/2000/svg","svg")),this.writeDataToDom(),l.appendChild(this.node.cloneNode(!0)),u.innerHTML.replace(/^/,"").replace(/<\/svg>$/,"");u.innerHTML=""+l.replace(/\n/,"").replace(/<([\w:-]+)([^<]+?)\/>/g,"<$1$2>")+"";for(var m=0,A=u.firstChild.childNodes.length;m":function(l){return-Math.cos(l*Math.PI)/2+.5},">":function(l){return Math.sin(l*Math.PI/2)},"<":function(l){return 1-Math.cos(l*Math.PI/2)}},t.morph=function(l){return function(u,m){return new t.MorphObj(u,m).at(l)}},t.Situation=t.invent({create:function(l){this.init=!1,this.reversed=!1,this.reversing=!1,this.duration=new t.Number(l.duration).valueOf(),this.delay=new t.Number(l.delay).valueOf(),this.start=+new Date+this.delay,this.finish=this.start+this.duration,this.ease=l.ease,this.loop=0,this.loops=!1,this.animations={},this.attrs={},this.styles={},this.transforms=[],this.once={}}}),t.FX=t.invent({create:function(l){this._target=l,this.situations=[],this.active=!1,this.situation=null,this.paused=!1,this.lastPos=0,this.pos=0,this.absPos=0,this._speed=1},extend:{animate:function(l,u,m){J(l)==="object"&&(u=l.ease,m=l.delay,l=l.duration);var A=new t.Situation({duration:l||1e3,delay:m||0,ease:t.easing[u||"-"]||u});return this.queue(A),this},target:function(l){return l&&l instanceof t.Element?(this._target=l,this):this._target},timeToAbsPos:function(l){return(l-this.situation.start)/(this.situation.duration/this._speed)},absPosToTime:function(l){return this.situation.duration/this._speed*l+this.situation.start},startAnimFrame:function(){this.stopAnimFrame(),this.animationFrame=p.requestAnimationFrame(function(){this.step()}.bind(this))},stopAnimFrame:function(){p.cancelAnimationFrame(this.animationFrame)},start:function(){return!this.active&&this.situation&&(this.active=!0,this.startCurrent()),this},startCurrent:function(){return this.situation.start=+new Date+this.situation.delay/this._speed,this.situation.finish=this.situation.start+this.situation.duration/this._speed,this.initAnimations().step()},queue:function(l){return(typeof l=="function"||l instanceof t.Situation)&&this.situations.push(l),this.situation||(this.situation=this.situations.shift()),this},dequeue:function(){return this.stop(),this.situation=this.situations.shift(),this.situation&&(this.situation instanceof t.Situation?this.start():this.situation.call(this)),this},initAnimations:function(){var l,u=this.situation;if(u.init)return this;for(var m in u.animations){l=this.target()[m](),Array.isArray(l)||(l=[l]),Array.isArray(u.animations[m])||(u.animations[m]=[u.animations[m]]);for(var A=l.length;A--;)u.animations[m][A]instanceof t.Number&&(l[A]=new t.Number(l[A])),u.animations[m][A]=l[A].morph(u.animations[m][A])}for(var m in u.attrs)u.attrs[m]=new t.MorphObj(this.target().attr(m),u.attrs[m]);for(var m in u.styles)u.styles[m]=new t.MorphObj(this.target().style(m),u.styles[m]);return u.initialTransformation=this.target().matrixify(),u.init=!0,this},clearQueue:function(){return this.situations=[],this},clearCurrent:function(){return this.situation=null,this},stop:function(l,u){var m=this.active;return this.active=!1,u&&this.clearQueue(),l&&this.situation&&(!m&&this.startCurrent(),this.atEnd()),this.stopAnimFrame(),this.clearCurrent()},after:function(l){var u=this.last();return this.target().on("finished.fx",function m(A){A.detail.situation==u&&(l.call(this,u),this.off("finished.fx",m))}),this._callStart()},during:function(l){var u=this.last(),m=function(A){A.detail.situation==u&&l.call(this,A.detail.pos,t.morph(A.detail.pos),A.detail.eased,u)};return this.target().off("during.fx",m).on("during.fx",m),this.after(function(){this.off("during.fx",m)}),this._callStart()},afterAll:function(l){var u=function m(A){l.call(this),this.off("allfinished.fx",m)};return this.target().off("allfinished.fx",u).on("allfinished.fx",u),this._callStart()},last:function(){return this.situations.length?this.situations[this.situations.length-1]:this.situation},add:function(l,u,m){return this.last()[m||"animations"][l]=u,this._callStart()},step:function(l){var u,m,A;l||(this.absPos=this.timeToAbsPos(+new Date)),this.situation.loops!==!1?(u=Math.max(this.absPos,0),m=Math.floor(u),this.situation.loops===!0||mthis.lastPos&&S<=k&&(this.situation.once[S].call(this.target(),this.pos,k),delete this.situation.once[S]);return this.active&&this.target().fire("during",{pos:this.pos,eased:k,fx:this,situation:this.situation}),this.situation?(this.eachAt(),this.pos==1&&!this.situation.reversed||this.situation.reversed&&this.pos==0?(this.stopAnimFrame(),this.target().fire("finished",{fx:this,situation:this.situation}),this.situations.length||(this.target().fire("allfinished"),this.situations.length||(this.target().off(".fx"),this.active=!1)),this.active?this.dequeue():this.clearCurrent()):!this.paused&&this.active&&this.startAnimFrame(),this.lastPos=k,this):this},eachAt:function(){var l,u=this,m=this.target(),A=this.situation;for(var k in A.animations)l=[].concat(A.animations[k]).map(function(C){return typeof C!="string"&&C.at?C.at(A.ease(u.pos),u.pos):C}),m[k].apply(m,l);for(var k in A.attrs)l=[k].concat(A.attrs[k]).map(function(I){return typeof I!="string"&&I.at?I.at(A.ease(u.pos),u.pos):I}),m.attr.apply(m,l);for(var k in A.styles)l=[k].concat(A.styles[k]).map(function(I){return typeof I!="string"&&I.at?I.at(A.ease(u.pos),u.pos):I}),m.style.apply(m,l);if(A.transforms.length){l=A.initialTransformation,k=0;for(var S=A.transforms.length;k=0;--m)this[y[m]]=l[y[m]]!=null?l[y[m]]:u[y[m]]},extend:{extract:function(){var l=f(this,0,1);f(this,1,0);var u=180/Math.PI*Math.atan2(l.y,l.x)-90;return{x:this.e,y:this.f,transformedX:(this.e*Math.cos(u*Math.PI/180)+this.f*Math.sin(u*Math.PI/180))/Math.sqrt(this.a*this.a+this.b*this.b),transformedY:(this.f*Math.cos(u*Math.PI/180)+this.e*Math.sin(-u*Math.PI/180))/Math.sqrt(this.c*this.c+this.d*this.d),rotation:u,a:this.a,b:this.b,c:this.c,d:this.d,e:this.e,f:this.f,matrix:new t.Matrix(this)}},clone:function(){return new t.Matrix(this)},morph:function(l){return this.destination=new t.Matrix(l),this},multiply:function(l){return new t.Matrix(this.native().multiply(function(u){return u instanceof t.Matrix||(u=new t.Matrix(u)),u}(l).native()))},inverse:function(){return new t.Matrix(this.native().inverse())},translate:function(l,u){return new t.Matrix(this.native().translate(l||0,u||0))},native:function(){for(var l=t.parser.native.createSVGMatrix(),u=y.length-1;u>=0;u--)l[y[u]]=this[y[u]];return l},toString:function(){return"matrix("+v(this.a)+","+v(this.b)+","+v(this.c)+","+v(this.d)+","+v(this.e)+","+v(this.f)+")"}},parent:t.Element,construct:{ctm:function(){return new t.Matrix(this.node.getCTM())},screenCTM:function(){if(this instanceof t.Nested){var l=this.rect(1,1),u=l.node.getScreenCTM();return l.remove(),new t.Matrix(u)}return new t.Matrix(this.node.getScreenCTM())}}}),t.Point=t.invent({create:function(l,u){var m;m=Array.isArray(l)?{x:l[0],y:l[1]}:J(l)==="object"?{x:l.x,y:l.y}:l!=null?{x:l,y:u??l}:{x:0,y:0},this.x=m.x,this.y=m.y},extend:{clone:function(){return new t.Point(this)},morph:function(l,u){return this.destination=new t.Point(l,u),this}}}),t.extend(t.Element,{point:function(l,u){return new t.Point(l,u).transform(this.screenCTM().inverse())}}),t.extend(t.Element,{attr:function(l,u,m){if(l==null){for(l={},m=(u=this.node.attributes).length-1;m>=0;m--)l[u[m].nodeName]=t.regex.isNumber.test(u[m].nodeValue)?parseFloat(u[m].nodeValue):u[m].nodeValue;return l}if(J(l)==="object")for(var A in l)this.attr(A,l[A]);else if(u===null)this.node.removeAttribute(l);else{if(u==null)return(u=this.node.getAttribute(l))==null?t.defaults.attrs[l]:t.regex.isNumber.test(u)?parseFloat(u):u;l=="stroke-width"?this.attr("stroke",parseFloat(u)>0?this._stroke:null):l=="stroke"&&(this._stroke=u),l!="fill"&&l!="stroke"||(t.regex.isImage.test(u)&&(u=this.doc().defs().image(u,0,0)),u instanceof t.Image&&(u=this.doc().defs().pattern(0,0,function(){this.add(u)}))),typeof u=="number"?u=new t.Number(u):t.Color.isColor(u)?u=new t.Color(u):Array.isArray(u)&&(u=new t.Array(u)),l=="leading"?this.leading&&this.leading(u):typeof m=="string"?this.node.setAttributeNS(m,l,u.toString()):this.node.setAttribute(l,u.toString()),!this.rebuild||l!="font-size"&&l!="x"||this.rebuild(l,u)}return this}}),t.extend(t.Element,{transform:function(l,u){var m;return J(l)!=="object"?(m=new t.Matrix(this).extract(),typeof l=="string"?m[l]:m):(m=new t.Matrix(this),u=!!u||!!l.relative,l.a!=null&&(m=u?m.multiply(new t.Matrix(l)):new t.Matrix(l)),this.attr("transform",m))}}),t.extend(t.Element,{untransform:function(){return this.attr("transform",null)},matrixify:function(){return(this.attr("transform")||"").split(t.regex.transforms).slice(0,-1).map(function(l){var u=l.trim().split("(");return[u[0],u[1].split(t.regex.delimiter).map(function(m){return parseFloat(m)})]}).reduce(function(l,u){return u[0]=="matrix"?l.multiply(x(u[1])):l[u[0]].apply(l,u[1])},new t.Matrix)},toParent:function(l){if(this==l)return this;var u=this.screenCTM(),m=l.screenCTM().inverse();return this.addTo(l).untransform().transform(m.multiply(u)),this},toDoc:function(){return this.toParent(this.doc())}}),t.Transformation=t.invent({create:function(l,u){if(arguments.length>1&&typeof u!="boolean")return this.constructor.call(this,[].slice.call(arguments));if(Array.isArray(l))for(var m=0,A=this.arguments.length;m=0},index:function(l){return[].slice.call(this.node.childNodes).indexOf(l.node)},get:function(l){return t.adopt(this.node.childNodes[l])},first:function(){return this.get(0)},last:function(){return this.get(this.node.childNodes.length-1)},each:function(l,u){for(var m=this.children(),A=0,k=m.length;A=0;u--)l.childNodes[u]instanceof p.SVGElement&&b(l.childNodes[u]);return t.adopt(l).id(t.eid(l.nodeName))}function v(l){return Math.abs(l)>1e-37?l:0}["fill","stroke"].forEach(function(l){var u={};u[l]=function(m){if(m===void 0)return this;if(typeof m=="string"||t.Color.isRgb(m)||m&&typeof m.fill=="function")this.attr(l,m);else for(var A=n[l].length-1;A>=0;A--)m[n[l][A]]!=null&&this.attr(n.prefix(l,n[l][A]),m[n[l][A]]);return this},t.extend(t.Element,t.FX,u)}),t.extend(t.Element,t.FX,{translate:function(l,u){return this.transform({x:l,y:u})},matrix:function(l){return this.attr("transform",new t.Matrix(arguments.length==6?[].slice.call(arguments):l))},opacity:function(l){return this.attr("opacity",l)},dx:function(l){return this.x(new t.Number(l).plus(this instanceof t.FX?0:this.x()),!0)},dy:function(l){return this.y(new t.Number(l).plus(this instanceof t.FX?0:this.y()),!0)}}),t.extend(t.Path,{length:function(){return this.node.getTotalLength()},pointAt:function(l){return this.node.getPointAtLength(l)}}),t.Set=t.invent({create:function(l){Array.isArray(l)?this.members=l:this.clear()},extend:{add:function(){for(var l=[].slice.call(arguments),u=0,m=l.length;u-1&&this.members.splice(u,1),this},each:function(l){for(var u=0,m=this.members.length;u=0},index:function(l){return this.members.indexOf(l)},get:function(l){return this.members[l]},first:function(){return this.get(0)},last:function(){return this.get(this.members.length-1)},valueOf:function(){return this.members}},construct:{set:function(l){return new t.Set(l)}}}),t.FX.Set=t.invent({create:function(l){this.set=l}}),t.Set.inherit=function(){var l=[];for(var u in t.Shape.prototype)typeof t.Shape.prototype[u]=="function"&&typeof t.Set.prototype[u]!="function"&&l.push(u);for(var u in l.forEach(function(A){t.Set.prototype[A]=function(){for(var k=0,S=this.members.length;k=0;l--)delete this.memory()[arguments[l]];return this},memory:function(){return this._memory||(this._memory={})}}),t.get=function(l){var u=e.getElementById(function(m){var A=(m||"").toString().match(t.regex.reference);if(A)return A[1]}(l)||l);return t.adopt(u)},t.select=function(l,u){return new t.Set(t.utils.map((u||e).querySelectorAll(l),function(m){return t.adopt(m)}))},t.extend(t.Parent,{select:function(l){return t.select(l,this.node)}});var y="abcdef".split("");if(typeof p.CustomEvent!="function"){var w=function(l,u){u=u||{bubbles:!1,cancelable:!1,detail:void 0};var m=e.createEvent("CustomEvent");return m.initCustomEvent(l,u.bubbles,u.cancelable,u.detail),m};w.prototype=p.Event.prototype,t.CustomEvent=w}else t.CustomEvent=p.CustomEvent;return t},typeof define=="function"&&define.amd?define(function(){return Ce(he,he.document)}):(typeof ot>"u"?"undefined":J(ot))==="object"&&typeof We<"u"?We.exports=he.document?Ce(he,he.document):function(p){return Ce(p,p.document)}:he.SVG=Ce(he,he.document),function(){SVG.Filter=SVG.invent({create:"filter",inherit:SVG.Parent,extend:{source:"SourceGraphic",sourceAlpha:"SourceAlpha",background:"BackgroundImage",backgroundAlpha:"BackgroundAlpha",fill:"FillPaint",stroke:"StrokePaint",autoSetIn:!0,put:function(r,n){return this.add(r,n),!r.attr("in")&&this.autoSetIn&&r.attr("in",this.source),r.attr("result")||r.attr("result",r),r},blend:function(r,n,o){return this.put(new SVG.BlendEffect(r,n,o))},colorMatrix:function(r,n){return this.put(new SVG.ColorMatrixEffect(r,n))},convolveMatrix:function(r){return this.put(new SVG.ConvolveMatrixEffect(r))},componentTransfer:function(r){return this.put(new SVG.ComponentTransferEffect(r))},composite:function(r,n,o){return this.put(new SVG.CompositeEffect(r,n,o))},flood:function(r,n){return this.put(new SVG.FloodEffect(r,n))},offset:function(r,n){return this.put(new SVG.OffsetEffect(r,n))},image:function(r){return this.put(new SVG.ImageEffect(r))},merge:function(){var r=[void 0];for(var n in arguments)r.push(arguments[n]);return this.put(new(SVG.MergeEffect.bind.apply(SVG.MergeEffect,r)))},gaussianBlur:function(r,n){return this.put(new SVG.GaussianBlurEffect(r,n))},morphology:function(r,n){return this.put(new SVG.MorphologyEffect(r,n))},diffuseLighting:function(r,n,o){return this.put(new SVG.DiffuseLightingEffect(r,n,o))},displacementMap:function(r,n,o,h,c){return this.put(new SVG.DisplacementMapEffect(r,n,o,h,c))},specularLighting:function(r,n,o,h){return this.put(new SVG.SpecularLightingEffect(r,n,o,h))},tile:function(){return this.put(new SVG.TileEffect)},turbulence:function(r,n,o,h,c){return this.put(new SVG.TurbulenceEffect(r,n,o,h,c))},toString:function(){return"url(#"+this.attr("id")+")"}}}),SVG.extend(SVG.Defs,{filter:function(r){var n=this.put(new SVG.Filter);return typeof r=="function"&&r.call(n,n),n}}),SVG.extend(SVG.Container,{filter:function(r){return this.defs().filter(r)}}),SVG.extend(SVG.Element,SVG.G,SVG.Nested,{filter:function(r){return this.filterer=r instanceof SVG.Element?r:this.doc().filter(r),this.doc()&&this.filterer.doc()!==this.doc()&&this.doc().defs().add(this.filterer),this.attr("filter",this.filterer),this.filterer},unfilter:function(r){return this.filterer&&r===!0&&this.filterer.remove(),delete this.filterer,this.attr("filter",null)}}),SVG.Effect=SVG.invent({create:function(){this.constructor.call(this)},inherit:SVG.Element,extend:{in:function(r){return r==null?this.parent()&&this.parent().select('[result="'+this.attr("in")+'"]').get(0)||this.attr("in"):this.attr("in",r)},result:function(r){return r==null?this.attr("result"):this.attr("result",r)},toString:function(){return this.result()}}}),SVG.ParentEffect=SVG.invent({create:function(){this.constructor.call(this)},inherit:SVG.Parent,extend:{in:function(r){return r==null?this.parent()&&this.parent().select('[result="'+this.attr("in")+'"]').get(0)||this.attr("in"):this.attr("in",r)},result:function(r){return r==null?this.attr("result"):this.attr("result",r)},toString:function(){return this.result()}}});var p={blend:function(r,n){return this.parent()&&this.parent().blend(this,r,n)},colorMatrix:function(r,n){return this.parent()&&this.parent().colorMatrix(r,n).in(this)},convolveMatrix:function(r){return this.parent()&&this.parent().convolveMatrix(r).in(this)},componentTransfer:function(r){return this.parent()&&this.parent().componentTransfer(r).in(this)},composite:function(r,n){return this.parent()&&this.parent().composite(this,r,n)},flood:function(r,n){return this.parent()&&this.parent().flood(r,n)},offset:function(r,n){return this.parent()&&this.parent().offset(r,n).in(this)},image:function(r){return this.parent()&&this.parent().image(r)},merge:function(){return this.parent()&&this.parent().merge.apply(this.parent(),[this].concat(arguments))},gaussianBlur:function(r,n){return this.parent()&&this.parent().gaussianBlur(r,n).in(this)},morphology:function(r,n){return this.parent()&&this.parent().morphology(r,n).in(this)},diffuseLighting:function(r,n,o){return this.parent()&&this.parent().diffuseLighting(r,n,o).in(this)},displacementMap:function(r,n,o,h){return this.parent()&&this.parent().displacementMap(this,r,n,o,h)},specularLighting:function(r,n,o,h){return this.parent()&&this.parent().specularLighting(r,n,o,h).in(this)},tile:function(){return this.parent()&&this.parent().tile().in(this)},turbulence:function(r,n,o,h,c){return this.parent()&&this.parent().turbulence(r,n,o,h,c).in(this)}};SVG.extend(SVG.Effect,p),SVG.extend(SVG.ParentEffect,p),SVG.ChildEffect=SVG.invent({create:function(){this.constructor.call(this)},inherit:SVG.Element,extend:{in:function(r){this.attr("in",r)}}});var e={blend:function(r,n,o){this.attr({in:r,in2:n,mode:o||"normal"})},colorMatrix:function(r,n){r=="matrix"&&(n=a(n)),this.attr({type:r,values:n===void 0?null:n})},convolveMatrix:function(r){r=a(r),this.attr({order:Math.sqrt(r.split(" ").length),kernelMatrix:r})},composite:function(r,n,o){this.attr({in:r,in2:n,operator:o})},flood:function(r,n){this.attr("flood-color",r),n!=null&&this.attr("flood-opacity",n)},offset:function(r,n){this.attr({dx:r,dy:n})},image:function(r){this.attr("href",r,SVG.xlink)},displacementMap:function(r,n,o,h,c){this.attr({in:r,in2:n,scale:o,xChannelSelector:h,yChannelSelector:c})},gaussianBlur:function(r,n){r!=null||n!=null?this.attr("stdDeviation",function(o){if(!Array.isArray(o))return o;for(var h=0,c=o.length,d=[];h1&&(W*=c=Math.sqrt(c),N*=c),d=new SVG.Matrix().rotate(B).scale(1/W,1/N).rotate(-B),V=V.transform(d),G=G.transform(d),g=[G.x-V.x,G.y-V.y],x=g[0]*g[0]+g[1]*g[1],f=Math.sqrt(x),g[0]/=f,g[1]/=f,b=x<4?Math.sqrt(1-x/4):0,q===Z&&(b*=-1),v=new SVG.Point((G.x+V.x)/2+b*-g[1],(G.y+V.y)/2+b*g[0]),y=new SVG.Point(V.x-v.x,V.y-v.y),w=new SVG.Point(G.x-v.x,G.y-v.y),l=Math.acos(y.x/Math.sqrt(y.x*y.x+y.y*y.y)),y.y<0&&(l*=-1),u=Math.acos(w.x/Math.sqrt(w.x*w.x+w.y*w.y)),w.y<0&&(u*=-1),Z&&l>u&&(u+=2*Math.PI),!Z&&lr.maxX-t.width&&(n=(a=r.maxX-t.width)-this.startPoints.box.x),r.minY!=null&&sr.maxY-t.height&&(o=(s=r.maxY-t.height)-this.startPoints.box.y),r.snapToGrid!=null&&(a-=a%r.snapToGrid,s-=s%r.snapToGrid,n-=n%r.snapToGrid,o-=o%r.snapToGrid),this.el instanceof SVG.G?this.el.matrix(this.startPoints.transform).transform({x:n,y:o},!0):this.el.move(a,s));return i},p.prototype.end=function(e){var t=this.drag(e);this.el.fire("dragend",{event:e,p:t,m:this.m,handler:this}),SVG.off(window,"mousemove.drag"),SVG.off(window,"touchmove.drag"),SVG.off(window,"mouseup.drag"),SVG.off(window,"touchend.drag")},SVG.extend(SVG.Element,{draggable:function(e,t){typeof e!="function"&&typeof e!="object"||(t=e,e=!0);var i=this.remember("_draggable")||new p(this);return(e=e===void 0||e)?i.init(t||{},e):(this.off("mousedown.drag"),this.off("touchstart.drag")),this}})}.call(void 0),function(){function p(e){this.el=e,e.remember("_selectHandler",this),this.pointSelection={isSelected:!1},this.rectSelection={isSelected:!1},this.pointsList={lt:[0,0],rt:["width",0],rb:["width","height"],lb:[0,"height"],t:["width",0],r:["width","height"],b:["width","height"],l:[0,"height"]},this.pointCoord=function(t,i,a){var s=typeof t!="string"?t:i[t];return a?s/2:s},this.pointCoords=function(t,i){var a=this.pointsList[t];return{x:this.pointCoord(a[0],i,t==="t"||t==="b"),y:this.pointCoord(a[1],i,t==="r"||t==="l")}}}p.prototype.init=function(e,t){var i=this.el.bbox();this.options={};var a=this.el.selectize.defaults.points;for(var s in this.el.selectize.defaults)this.options[s]=this.el.selectize.defaults[s],t[s]!==void 0&&(this.options[s]=t[s]);var r=["points","pointsExclude"];for(var s in r){var n=this.options[r[s]];typeof n=="string"?n=n.length>0?n.split(/\s*,\s*/i):[]:typeof n=="boolean"&&r[s]==="points"&&(n=n?a:[]),this.options[r[s]]=n}this.options.points=[a,this.options.points].reduce(function(o,h){return o.filter(function(c){return h.indexOf(c)>-1})}),this.options.points=[this.options.points,this.options.pointsExclude].reduce(function(o,h){return o.filter(function(c){return h.indexOf(c)<0})}),this.parent=this.el.parent(),this.nested=this.nested||this.parent.group(),this.nested.matrix(new SVG.Matrix(this.el).translate(i.x,i.y)),this.options.deepSelect&&["line","polyline","polygon"].indexOf(this.el.type)!==-1?this.selectPoints(e):this.selectRect(e),this.observe(),this.cleanup()},p.prototype.selectPoints=function(e){return this.pointSelection.isSelected=e,this.pointSelection.set||(this.pointSelection.set=this.parent.set(),this.drawPoints()),this},p.prototype.getPointArray=function(){var e=this.el.bbox();return this.el.array().valueOf().map(function(t){return[t[0]-e.x,t[1]-e.y]})},p.prototype.drawPoints=function(){for(var e=this,t=this.getPointArray(),i=0,a=t.length;i0&&this.parameters.box.height-n[1]>0){if(this.parameters.type==="text")return this.el.move(this.parameters.box.x+n[0],this.parameters.box.y),void this.el.attr("font-size",this.parameters.fontSize-n[0]);n=this.checkAspectRatio(n),this.el.move(this.parameters.box.x+n[0],this.parameters.box.y+n[1]).size(this.parameters.box.width-n[0],this.parameters.box.height-n[1])}};break;case"rt":this.calc=function(s,r){var n=this.snapToGrid(s,r,2);if(this.parameters.box.width+n[0]>0&&this.parameters.box.height-n[1]>0){if(this.parameters.type==="text")return this.el.move(this.parameters.box.x-n[0],this.parameters.box.y),void this.el.attr("font-size",this.parameters.fontSize+n[0]);n=this.checkAspectRatio(n,!0),this.el.move(this.parameters.box.x,this.parameters.box.y+n[1]).size(this.parameters.box.width+n[0],this.parameters.box.height-n[1])}};break;case"rb":this.calc=function(s,r){var n=this.snapToGrid(s,r,0);if(this.parameters.box.width+n[0]>0&&this.parameters.box.height+n[1]>0){if(this.parameters.type==="text")return this.el.move(this.parameters.box.x-n[0],this.parameters.box.y),void this.el.attr("font-size",this.parameters.fontSize+n[0]);n=this.checkAspectRatio(n),this.el.move(this.parameters.box.x,this.parameters.box.y).size(this.parameters.box.width+n[0],this.parameters.box.height+n[1])}};break;case"lb":this.calc=function(s,r){var n=this.snapToGrid(s,r,1);if(this.parameters.box.width-n[0]>0&&this.parameters.box.height+n[1]>0){if(this.parameters.type==="text")return this.el.move(this.parameters.box.x+n[0],this.parameters.box.y),void this.el.attr("font-size",this.parameters.fontSize-n[0]);n=this.checkAspectRatio(n,!0),this.el.move(this.parameters.box.x+n[0],this.parameters.box.y).size(this.parameters.box.width-n[0],this.parameters.box.height+n[1])}};break;case"t":this.calc=function(s,r){var n=this.snapToGrid(s,r,2);if(this.parameters.box.height-n[1]>0){if(this.parameters.type==="text")return;this.el.move(this.parameters.box.x,this.parameters.box.y+n[1]).height(this.parameters.box.height-n[1])}};break;case"r":this.calc=function(s,r){var n=this.snapToGrid(s,r,0);if(this.parameters.box.width+n[0]>0){if(this.parameters.type==="text")return;this.el.move(this.parameters.box.x,this.parameters.box.y).width(this.parameters.box.width+n[0])}};break;case"b":this.calc=function(s,r){var n=this.snapToGrid(s,r,0);if(this.parameters.box.height+n[1]>0){if(this.parameters.type==="text")return;this.el.move(this.parameters.box.x,this.parameters.box.y).height(this.parameters.box.height+n[1])}};break;case"l":this.calc=function(s,r){var n=this.snapToGrid(s,r,1);if(this.parameters.box.width-n[0]>0){if(this.parameters.type==="text")return;this.el.move(this.parameters.box.x+n[0],this.parameters.box.y).width(this.parameters.box.width-n[0])}};break;case"rot":this.calc=function(s,r){var n=s+this.parameters.p.x,o=r+this.parameters.p.y,h=Math.atan2(this.parameters.p.y-this.parameters.box.y-this.parameters.box.height/2,this.parameters.p.x-this.parameters.box.x-this.parameters.box.width/2),c=Math.atan2(o-this.parameters.box.y-this.parameters.box.height/2,n-this.parameters.box.x-this.parameters.box.width/2),d=this.parameters.rotation+180*(c-h)/Math.PI+this.options.snapToAngle/2;this.el.center(this.parameters.box.cx,this.parameters.box.cy).rotate(d-d%this.options.snapToAngle,this.parameters.box.cx,this.parameters.box.cy)};break;case"point":this.calc=function(s,r){var n=this.snapToGrid(s,r,this.parameters.pointCoords[0],this.parameters.pointCoords[1]),o=this.el.array().valueOf();o[this.parameters.i][0]=this.parameters.pointCoords[0]+n[0],o[this.parameters.i][1]=this.parameters.pointCoords[1]+n[1],this.el.plot(o)}}this.el.fire("resizestart",{dx:this.parameters.x,dy:this.parameters.y,event:e}),SVG.on(window,"touchmove.resize",function(s){t.update(s||window.event)}),SVG.on(window,"touchend.resize",function(){t.done()}),SVG.on(window,"mousemove.resize",function(s){t.update(s||window.event)}),SVG.on(window,"mouseup.resize",function(){t.done()})},p.prototype.update=function(e){if(e){var t=this._extractPosition(e),i=this.transformPoint(t.x,t.y),a=i.x-this.parameters.p.x,s=i.y-this.parameters.p.y;this.lastUpdateCall=[a,s],this.calc(a,s),this.el.fire("resizing",{dx:a,dy:s,event:e})}else this.lastUpdateCall&&this.calc(this.lastUpdateCall[0],this.lastUpdateCall[1])},p.prototype.done=function(){this.lastUpdateCall=null,SVG.off(window,"mousemove.resize"),SVG.off(window,"mouseup.resize"),SVG.off(window,"touchmove.resize"),SVG.off(window,"touchend.resize"),this.el.fire("resizedone")},p.prototype.snapToGrid=function(e,t,i,a){var s;return a!==void 0?s=[(i+e)%this.options.snapToGrid,(a+t)%this.options.snapToGrid]:(i=i??3,s=[(this.parameters.box.x+e+(1&i?0:this.parameters.box.width))%this.options.snapToGrid,(this.parameters.box.y+t+(2&i?0:this.parameters.box.height))%this.options.snapToGrid]),e<0&&(s[0]-=this.options.snapToGrid),t<0&&(s[1]-=this.options.snapToGrid),e-=Math.abs(s[0])n.maxX&&(e=n.maxX-s),n.minY!==void 0&&r+tn.maxY&&(t=n.maxY-r),[e,t]},p.prototype.checkAspectRatio=function(e,t){if(!this.options.saveAspectRatio)return e;var i=e.slice(),a=this.parameters.box.width/this.parameters.box.height,s=this.parameters.box.width+e[0],r=this.parameters.box.height-e[1],n=s/r;return na&&(i[0]=this.parameters.box.width-r*a,t&&(i[0]=-i[0])),i},SVG.extend(SVG.Element,{resize:function(e){return(this.remember("_resizeHandler")||new p(this)).init(e||{}),this}}),SVG.Element.prototype.resize.defaults={snapToAngle:.1,snapToGrid:1,constraint:{},saveAspectRatio:!1}}).call(this)}(),window.Apex===void 0&&(window.Apex={});var Ct=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"initModules",value:function(){this.ctx.publicMethods=["updateOptions","updateSeries","appendData","appendSeries","isSeriesHidden","highlightSeries","toggleSeries","showSeries","hideSeries","setLocale","resetSeries","zoomX","toggleDataPointSelection","dataURI","exportToCSV","addXaxisAnnotation","addYaxisAnnotation","addPointAnnotation","clearAnnotations","removeAnnotation","paper","destroy"],this.ctx.eventList=["click","mousedown","mousemove","mouseleave","touchstart","touchmove","touchleave","mouseup","touchend"],this.ctx.animations=new ve(this.ctx),this.ctx.axes=new Hi(this.ctx),this.ctx.core=new ga(this.ctx.el,this.ctx),this.ctx.config=new Pe({}),this.ctx.data=new Ft(this.ctx),this.ctx.grid=new Rt(this.ctx),this.ctx.graphics=new X(this.ctx),this.ctx.coreUtils=new $(this.ctx),this.ctx.crosshairs=new nt(this.ctx),this.ctx.events=new Oi(this.ctx),this.ctx.exports=new He(this.ctx),this.ctx.fill=new ne(this.ctx),this.ctx.localization=new Di(this.ctx),this.ctx.options=new ue,this.ctx.responsive=new Ni(this.ctx),this.ctx.series=new re(this.ctx),this.ctx.theme=new Wi(this.ctx),this.ctx.formatters=new ze(this.ctx),this.ctx.titleSubtitle=new Bi(this.ctx),this.ctx.legend=new Dt(this.ctx),this.ctx.toolbar=new Ht(this.ctx),this.ctx.tooltip=new At(this.ctx),this.ctx.dimensions=new Ne(this.ctx),this.ctx.updateHelpers=new ua(this.ctx),this.ctx.zoomPanSelection=new qi(this.ctx),this.ctx.w.globals.tooltip=new At(this.ctx)}}]),p}(),Lt=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"clear",value:function(e){var t=e.isUpdating;this.ctx.zoomPanSelection&&this.ctx.zoomPanSelection.destroy(),this.ctx.toolbar&&this.ctx.toolbar.destroy(),this.ctx.animations=null,this.ctx.axes=null,this.ctx.annotations=null,this.ctx.core=null,this.ctx.data=null,this.ctx.grid=null,this.ctx.series=null,this.ctx.responsive=null,this.ctx.theme=null,this.ctx.formatters=null,this.ctx.titleSubtitle=null,this.ctx.legend=null,this.ctx.dimensions=null,this.ctx.options=null,this.ctx.crosshairs=null,this.ctx.zoomPanSelection=null,this.ctx.updateHelpers=null,this.ctx.toolbar=null,this.ctx.localization=null,this.ctx.w.globals.tooltip=null,this.clearDomElements({isUpdating:t})}},{key:"killSVG",value:function(e){e.each(function(t,i){this.removeClass("*"),this.off(),this.stop()},!0),e.ungroup(),e.clear()}},{key:"clearDomElements",value:function(e){var t=this,i=e.isUpdating,a=this.w.globals.dom.Paper.node;a.parentNode&&a.parentNode.parentNode&&!i&&(a.parentNode.parentNode.style.minHeight="unset");var s=this.w.globals.dom.baseEl;s&&this.ctx.eventList.forEach(function(n){s.removeEventListener(n,t.ctx.events.documentEvent)});var r=this.w.globals.dom;if(this.ctx.el!==null)for(;this.ctx.el.firstChild;)this.ctx.el.removeChild(this.ctx.el.firstChild);this.killSVG(r.Paper),r.Paper.remove(),r.elWrap=null,r.elGraphical=null,r.elLegendWrap=null,r.elLegendForeign=null,r.baseEl=null,r.elGridRect=null,r.elGridRectMask=null,r.elGridRectMarkerMask=null,r.elForecastMask=null,r.elNonForecastMask=null,r.elDefs=null}}]),p}(),it=new WeakMap,fa=function(){function p(e,t){F(this,p),this.opts=t,this.ctx=this,this.w=new Ri(t).init(),this.el=e,this.w.globals.cuid=P.randomId(),this.w.globals.chartID=this.w.config.chart.id?P.escapeString(this.w.config.chart.id):this.w.globals.cuid,new Ct(this).initModules(),this.create=P.bind(this.create,this),this.windowResizeHandler=this._windowResizeHandler.bind(this),this.parentResizeHandler=this._parentResizeCallback.bind(this)}return R(p,[{key:"render",value:function(){var e=this;return new Promise(function(t,i){if(e.el!==null){Apex._chartInstances===void 0&&(Apex._chartInstances=[]),e.w.config.chart.id&&Apex._chartInstances.push({id:e.w.globals.chartID,group:e.w.config.chart.group,chart:e}),e.setLocale(e.w.config.chart.defaultLocale);var a=e.w.config.chart.events.beforeMount;typeof a=="function"&&a(e,e.w),e.events.fireEvent("beforeMount",[e,e.w]),window.addEventListener("resize",e.windowResizeHandler),function(g,f){var x=!1;if(g.nodeType!==Node.DOCUMENT_FRAGMENT_NODE){var b=g.getBoundingClientRect();g.style.display!=="none"&&b.width!==0||(x=!0)}var v=new ResizeObserver(function(y){x&&f.call(g,y),x=!0});g.nodeType===Node.DOCUMENT_FRAGMENT_NODE?Array.from(g.children).forEach(function(y){return v.observe(y)}):v.observe(g),it.set(f,v)}(e.el.parentNode,e.parentResizeHandler);var s=e.el.getRootNode&&e.el.getRootNode(),r=P.is("ShadowRoot",s),n=e.el.ownerDocument,o=r?s.getElementById("apexcharts-css"):n.getElementById("apexcharts-css");if(!o){var h;(o=document.createElement("style")).id="apexcharts-css",o.textContent=`@keyframes opaque { +`), this.t.download && r.push({ el: this.elMenuIcon, icon: typeof this.t.download == "string" ? this.t.download : '', title: this.localeValues.menu, class: "apexcharts-menu-icon" }); for (var h = 0; h < this.elCustomIcons.length; h++)r.push({ el: this.elCustomIcons[h], icon: this.t.customIcons[h].icon, title: this.t.customIcons[h].title, index: this.t.customIcons[h].index, class: "apexcharts-toolbar-custom-icon " + this.t.customIcons[h].class }); r.forEach(function (d, g) { d.index && P.moveIndexInArray(r, g, d.index) }); for (var c = 0; c < r.length; c++)X.setAttrs(r[c].el, { class: r[c].class, title: r[c].title }), r[c].el.innerHTML = r[c].icon, a.appendChild(r[c].el); this._createHamburgerMenu(a), t.globals.zoomEnabled ? this.elZoom.classList.add(this.selectedClass) : t.globals.panEnabled ? this.elPan.classList.add(this.selectedClass) : t.globals.selectionEnabled && this.elSelection.classList.add(this.selectedClass), this.addToolbarEventListeners() + } + }, { key: "_createHamburgerMenu", value: function (e) { this.elMenuItems = [], e.appendChild(this.elMenu), X.setAttrs(this.elMenu, { class: "apexcharts-menu" }); for (var t = [{ name: "exportSVG", title: this.localeValues.exportToSVG }, { name: "exportPNG", title: this.localeValues.exportToPNG }, { name: "exportCSV", title: this.localeValues.exportToCSV }], i = 0; i < t.length; i++)this.elMenuItems.push(document.createElement("div")), this.elMenuItems[i].innerHTML = t[i].title, X.setAttrs(this.elMenuItems[i], { class: "apexcharts-menu-item ".concat(t[i].name), title: t[i].title }), this.elMenu.appendChild(this.elMenuItems[i]) } }, { key: "addToolbarEventListeners", value: function () { var e = this; this.elZoomReset.addEventListener("click", this.handleZoomReset.bind(this)), this.elSelection.addEventListener("click", this.toggleZoomSelection.bind(this, "selection")), this.elZoom.addEventListener("click", this.toggleZoomSelection.bind(this, "zoom")), this.elZoomIn.addEventListener("click", this.handleZoomIn.bind(this)), this.elZoomOut.addEventListener("click", this.handleZoomOut.bind(this)), this.elPan.addEventListener("click", this.togglePanning.bind(this)), this.elMenuIcon.addEventListener("click", this.toggleMenu.bind(this)), this.elMenuItems.forEach(function (i) { i.classList.contains("exportSVG") ? i.addEventListener("click", e.handleDownload.bind(e, "svg")) : i.classList.contains("exportPNG") ? i.addEventListener("click", e.handleDownload.bind(e, "png")) : i.classList.contains("exportCSV") && i.addEventListener("click", e.handleDownload.bind(e, "csv")) }); for (var t = 0; t < this.t.customIcons.length; t++)this.elCustomIcons[t].addEventListener("click", this.t.customIcons[t].click.bind(this, this.ctx, this.ctx.w)) } }, { key: "toggleZoomSelection", value: function (e) { this.ctx.getSyncedCharts().forEach(function (t) { t.ctx.toolbar.toggleOtherControls(); var i = e === "selection" ? t.ctx.toolbar.elSelection : t.ctx.toolbar.elZoom, a = e === "selection" ? "selectionEnabled" : "zoomEnabled"; t.w.globals[a] = !t.w.globals[a], i.classList.contains(t.ctx.toolbar.selectedClass) ? i.classList.remove(t.ctx.toolbar.selectedClass) : i.classList.add(t.ctx.toolbar.selectedClass) }) } }, { key: "getToolbarIconsReference", value: function () { var e = this.w; this.elZoom || (this.elZoom = e.globals.dom.baseEl.querySelector(".apexcharts-zoom-icon")), this.elPan || (this.elPan = e.globals.dom.baseEl.querySelector(".apexcharts-pan-icon")), this.elSelection || (this.elSelection = e.globals.dom.baseEl.querySelector(".apexcharts-selection-icon")) } }, { key: "enableZoomPanFromToolbar", value: function (e) { this.toggleOtherControls(), e === "pan" ? this.w.globals.panEnabled = !0 : this.w.globals.zoomEnabled = !0; var t = e === "pan" ? this.elPan : this.elZoom, i = e === "pan" ? this.elZoom : this.elPan; t && t.classList.add(this.selectedClass), i && i.classList.remove(this.selectedClass) } }, { key: "togglePanning", value: function () { this.ctx.getSyncedCharts().forEach(function (e) { e.ctx.toolbar.toggleOtherControls(), e.w.globals.panEnabled = !e.w.globals.panEnabled, e.ctx.toolbar.elPan.classList.contains(e.ctx.toolbar.selectedClass) ? e.ctx.toolbar.elPan.classList.remove(e.ctx.toolbar.selectedClass) : e.ctx.toolbar.elPan.classList.add(e.ctx.toolbar.selectedClass) }) } }, { key: "toggleOtherControls", value: function () { var e = this, t = this.w; t.globals.panEnabled = !1, t.globals.zoomEnabled = !1, t.globals.selectionEnabled = !1, this.getToolbarIconsReference(), [this.elPan, this.elSelection, this.elZoom].forEach(function (i) { i && i.classList.remove(e.selectedClass) }) } }, { key: "handleZoomIn", value: function () { var e = this.w; e.globals.isRangeBar && (this.minX = e.globals.minY, this.maxX = e.globals.maxY); var t = (this.minX + this.maxX) / 2, i = (this.minX + t) / 2, a = (this.maxX + t) / 2, s = this._getNewMinXMaxX(i, a); e.globals.disableZoomIn || this.zoomUpdateOptions(s.minX, s.maxX) } }, { key: "handleZoomOut", value: function () { var e = this.w; if (e.globals.isRangeBar && (this.minX = e.globals.minY, this.maxX = e.globals.maxY), !(e.config.xaxis.type === "datetime" && new Date(this.minX).getUTCFullYear() < 1e3)) { var t = (this.minX + this.maxX) / 2, i = this.minX - (t - this.minX), a = this.maxX - (t - this.maxX), s = this._getNewMinXMaxX(i, a); e.globals.disableZoomOut || this.zoomUpdateOptions(s.minX, s.maxX) } } }, { key: "_getNewMinXMaxX", value: function (e, t) { var i = this.w.config.xaxis.convertedCatToNumeric; return { minX: i ? Math.floor(e) : e, maxX: i ? Math.floor(t) : t } } }, { key: "zoomUpdateOptions", value: function (e, t) { var i = this.w; if (e !== void 0 || t !== void 0) { if (!(i.config.xaxis.convertedCatToNumeric && (e < 1 && (e = 1, t = i.globals.dataPoints), t - e < 2))) { var a = { min: e, max: t }, s = this.getBeforeZoomRange(a); s && (a = s.xaxis); var r = { xaxis: a }, n = P.clone(i.globals.initialConfig.yaxis); i.config.chart.group || (r.yaxis = n), this.w.globals.zoomed = !0, this.ctx.updateHelpers._updateOptions(r, !1, this.w.config.chart.animations.dynamicAnimation.enabled), this.zoomCallback(a, n) } } else this.handleZoomReset() } }, { key: "zoomCallback", value: function (e, t) { typeof this.ev.zoomed == "function" && this.ev.zoomed(this.ctx, { xaxis: e, yaxis: t }) } }, { key: "getBeforeZoomRange", value: function (e, t) { var i = null; return typeof this.ev.beforeZoom == "function" && (i = this.ev.beforeZoom(this, { xaxis: e, yaxis: t })), i } }, { key: "toggleMenu", value: function () { var e = this; window.setTimeout(function () { e.elMenu.classList.contains("apexcharts-menu-open") ? e.elMenu.classList.remove("apexcharts-menu-open") : e.elMenu.classList.add("apexcharts-menu-open") }, 0) } }, { key: "handleDownload", value: function (e) { var t = this.w, i = new He(this.ctx); switch (e) { case "svg": i.exportToSVG(this.ctx); break; case "png": i.exportToPng(this.ctx); break; case "csv": i.exportToCSV({ series: t.config.series, columnDelimiter: t.config.chart.toolbar.export.csv.columnDelimiter }) } } }, { key: "handleZoomReset", value: function (e) { this.ctx.getSyncedCharts().forEach(function (t) { var i = t.w; if (i.globals.lastXAxis.min = i.globals.initialConfig.xaxis.min, i.globals.lastXAxis.max = i.globals.initialConfig.xaxis.max, t.updateHelpers.revertDefaultAxisMinMax(), typeof i.config.chart.events.beforeResetZoom == "function") { var a = i.config.chart.events.beforeResetZoom(t, i); a && t.updateHelpers.revertDefaultAxisMinMax(a) } typeof i.config.chart.events.zoomed == "function" && t.ctx.toolbar.zoomCallback({ min: i.config.xaxis.min, max: i.config.xaxis.max }), i.globals.zoomed = !1; var s = t.ctx.series.emptyCollapsedSeries(P.clone(i.globals.initialSeries)); t.updateHelpers._updateSeries(s, i.config.chart.animations.dynamicAnimation.enabled) }) } }, { key: "destroy", value: function () { this.elZoom = null, this.elZoomIn = null, this.elZoomOut = null, this.elPan = null, this.elSelection = null, this.elZoomReset = null, this.elMenuIcon = null } }]), p + }(), qi = function (p) { Te(t, Ht); var e = Ie(t); function t(i) { var a; return F(this, t), (a = e.call(this, i)).ctx = i, a.w = i.w, a.dragged = !1, a.graphics = new X(a.ctx), a.eventList = ["mousedown", "mouseleave", "mousemove", "touchstart", "touchmove", "mouseup", "touchend", "wheel"], a.clientX = 0, a.clientY = 0, a.startX = 0, a.endX = 0, a.dragX = 0, a.startY = 0, a.endY = 0, a.dragY = 0, a.moveDirection = "none", a.debounceTimer = null, a.debounceDelay = 100, a.wheelDelay = 400, a } return R(t, [{ key: "init", value: function (i) { var a = this, s = i.xyRatios, r = this.w, n = this; this.xyRatios = s, this.zoomRect = this.graphics.drawRect(0, 0, 0, 0), this.selectionRect = this.graphics.drawRect(0, 0, 0, 0), this.gridRect = r.globals.dom.baseEl.querySelector(".apexcharts-grid"), this.zoomRect.node.classList.add("apexcharts-zoom-rect"), this.selectionRect.node.classList.add("apexcharts-selection-rect"), r.globals.dom.elGraphical.add(this.zoomRect), r.globals.dom.elGraphical.add(this.selectionRect), r.config.chart.selection.type === "x" ? this.slDraggableRect = this.selectionRect.draggable({ minX: 0, minY: 0, maxX: r.globals.gridWidth, maxY: r.globals.gridHeight }).on("dragmove", this.selectionDragging.bind(this, "dragging")) : r.config.chart.selection.type === "y" ? this.slDraggableRect = this.selectionRect.draggable({ minX: 0, maxX: r.globals.gridWidth }).on("dragmove", this.selectionDragging.bind(this, "dragging")) : this.slDraggableRect = this.selectionRect.draggable().on("dragmove", this.selectionDragging.bind(this, "dragging")), this.preselectedSelection(), this.hoverArea = r.globals.dom.baseEl.querySelector("".concat(r.globals.chartClass, " .apexcharts-svg")), this.hoverArea.classList.add("apexcharts-zoomable"), this.eventList.forEach(function (o) { a.hoverArea.addEventListener(o, n.svgMouseEvents.bind(n, s), { capture: !1, passive: !0 }) }), r.config.chart.zoom.allowMouseWheelZoom && this.hoverArea.addEventListener("wheel", n.mouseWheelEvent.bind(n), { capture: !1, passive: !1 }) } }, { key: "destroy", value: function () { this.slDraggableRect && (this.slDraggableRect.draggable(!1), this.slDraggableRect.off(), this.selectionRect.off()), this.selectionRect = null, this.zoomRect = null, this.gridRect = null } }, { key: "svgMouseEvents", value: function (i, a) { var s = this.w, r = this, n = this.ctx.toolbar, o = s.globals.zoomEnabled ? s.config.chart.zoom.type : s.config.chart.selection.type, h = s.config.chart.toolbar.autoSelected; if (a.shiftKey ? (this.shiftWasPressed = !0, n.enableZoomPanFromToolbar(h === "pan" ? "zoom" : "pan")) : this.shiftWasPressed && (n.enableZoomPanFromToolbar(h), this.shiftWasPressed = !1), a.target) { var c, d = a.target.classList; if (a.target.parentNode && a.target.parentNode !== null && (c = a.target.parentNode.classList), !(d.contains("apexcharts-selection-rect") || d.contains("apexcharts-legend-marker") || d.contains("apexcharts-legend-text") || c && c.contains("apexcharts-toolbar"))) { if (r.clientX = a.type === "touchmove" || a.type === "touchstart" ? a.touches[0].clientX : a.type === "touchend" ? a.changedTouches[0].clientX : a.clientX, r.clientY = a.type === "touchmove" || a.type === "touchstart" ? a.touches[0].clientY : a.type === "touchend" ? a.changedTouches[0].clientY : a.clientY, a.type === "mousedown" && a.which === 1) { var g = r.gridRect.getBoundingClientRect(); r.startX = r.clientX - g.left, r.startY = r.clientY - g.top, r.dragged = !1, r.w.globals.mousedown = !0 } if ((a.type === "mousemove" && a.which === 1 || a.type === "touchmove") && (r.dragged = !0, s.globals.panEnabled ? (s.globals.selection = null, r.w.globals.mousedown && r.panDragging({ context: r, zoomtype: o, xyRatios: i })) : (r.w.globals.mousedown && s.globals.zoomEnabled || r.w.globals.mousedown && s.globals.selectionEnabled) && (r.selection = r.selectionDrawing({ context: r, zoomtype: o }))), a.type === "mouseup" || a.type === "touchend" || a.type === "mouseleave") { var f, x = (f = r.gridRect) === null || f === void 0 ? void 0 : f.getBoundingClientRect(); x && r.w.globals.mousedown && (r.endX = r.clientX - x.left, r.endY = r.clientY - x.top, r.dragX = Math.abs(r.endX - r.startX), r.dragY = Math.abs(r.endY - r.startY), (s.globals.zoomEnabled || s.globals.selectionEnabled) && r.selectionDrawn({ context: r, zoomtype: o }), s.globals.panEnabled && s.config.xaxis.convertedCatToNumeric && r.delayedPanScrolled()), s.globals.zoomEnabled && r.hideSelectionRect(this.selectionRect), r.dragged = !1, r.w.globals.mousedown = !1 } this.makeSelectionRectDraggable() } } } }, { key: "mouseWheelEvent", value: function (i) { var a = this, s = this.w; i.preventDefault(); var r = Date.now(); r - s.globals.lastWheelExecution > this.wheelDelay && (this.executeMouseWheelZoom(i), s.globals.lastWheelExecution = r), this.debounceTimer && clearTimeout(this.debounceTimer), this.debounceTimer = setTimeout(function () { r - s.globals.lastWheelExecution > a.wheelDelay && (a.executeMouseWheelZoom(i), s.globals.lastWheelExecution = r) }, this.debounceDelay) } }, { key: "executeMouseWheelZoom", value: function (i) { var a, s = this.w; this.minX = s.globals.isRangeBar ? s.globals.minY : s.globals.minX, this.maxX = s.globals.isRangeBar ? s.globals.maxY : s.globals.maxX; var r = (a = this.gridRect) === null || a === void 0 ? void 0 : a.getBoundingClientRect(); if (r) { var n, o, h, c = (i.clientX - r.left) / r.width, d = this.minX, g = this.maxX, f = g - d; if (i.deltaY < 0) { var x = d + c * f; o = x - (n = .5 * f) / 2, h = x + n / 2 } else o = d - (n = 1.5 * f) / 2, h = g + n / 2; o = Math.max(o, s.globals.initialMinX), h = Math.min(h, s.globals.initialMaxX); var b = .01 * (s.globals.initialMaxX - s.globals.initialMinX); if (h - o < b) { var v = (o + h) / 2; o = v - b / 2, h = v + b / 2 } var y = this._getNewMinXMaxX(o, h); isNaN(y.minX) || isNaN(y.maxX) || this.zoomUpdateOptions(y.minX, y.maxX) } } }, { key: "makeSelectionRectDraggable", value: function () { var i = this.w; if (this.selectionRect) { var a = this.selectionRect.node.getBoundingClientRect(); a.width > 0 && a.height > 0 && this.slDraggableRect.selectize({ points: "l, r", pointSize: 8, pointType: "rect" }).resize({ constraint: { minX: 0, minY: 0, maxX: i.globals.gridWidth, maxY: i.globals.gridHeight } }).on("resizing", this.selectionDragging.bind(this, "resizing")) } } }, { key: "preselectedSelection", value: function () { var i = this.w, a = this.xyRatios; if (!i.globals.zoomEnabled) { if (i.globals.selection !== void 0 && i.globals.selection !== null) this.drawSelectionRect(i.globals.selection); else if (i.config.chart.selection.xaxis.min !== void 0 && i.config.chart.selection.xaxis.max !== void 0) { var s = (i.config.chart.selection.xaxis.min - i.globals.minX) / a.xRatio, r = i.globals.gridWidth - (i.globals.maxX - i.config.chart.selection.xaxis.max) / a.xRatio - s; i.globals.isRangeBar && (s = (i.config.chart.selection.xaxis.min - i.globals.yAxisScale[0].niceMin) / a.invertedYRatio, r = (i.config.chart.selection.xaxis.max - i.config.chart.selection.xaxis.min) / a.invertedYRatio); var n = { x: s, y: 0, width: r, height: i.globals.gridHeight, translateX: 0, translateY: 0, selectionEnabled: !0 }; this.drawSelectionRect(n), this.makeSelectionRectDraggable(), typeof i.config.chart.events.selection == "function" && i.config.chart.events.selection(this.ctx, { xaxis: { min: i.config.chart.selection.xaxis.min, max: i.config.chart.selection.xaxis.max }, yaxis: {} }) } } } }, { key: "drawSelectionRect", value: function (i) { var a = i.x, s = i.y, r = i.width, n = i.height, o = i.translateX, h = o === void 0 ? 0 : o, c = i.translateY, d = c === void 0 ? 0 : c, g = this.w, f = this.zoomRect, x = this.selectionRect; if (this.dragged || g.globals.selection !== null) { var b = { transform: "translate(" + h + ", " + d + ")" }; g.globals.zoomEnabled && this.dragged && (r < 0 && (r = 1), f.attr({ x: a, y: s, width: r, height: n, fill: g.config.chart.zoom.zoomedArea.fill.color, "fill-opacity": g.config.chart.zoom.zoomedArea.fill.opacity, stroke: g.config.chart.zoom.zoomedArea.stroke.color, "stroke-width": g.config.chart.zoom.zoomedArea.stroke.width, "stroke-opacity": g.config.chart.zoom.zoomedArea.stroke.opacity }), X.setAttrs(f.node, b)), g.globals.selectionEnabled && (x.attr({ x: a, y: s, width: r > 0 ? r : 0, height: n > 0 ? n : 0, fill: g.config.chart.selection.fill.color, "fill-opacity": g.config.chart.selection.fill.opacity, stroke: g.config.chart.selection.stroke.color, "stroke-width": g.config.chart.selection.stroke.width, "stroke-dasharray": g.config.chart.selection.stroke.dashArray, "stroke-opacity": g.config.chart.selection.stroke.opacity }), X.setAttrs(x.node, b)) } } }, { key: "hideSelectionRect", value: function (i) { i && i.attr({ x: 0, y: 0, width: 0, height: 0 }) } }, { key: "selectionDrawing", value: function (i) { var a = i.context, s = i.zoomtype, r = this.w, n = a, o = this.gridRect.getBoundingClientRect(), h = n.startX - 1, c = n.startY, d = !1, g = !1, f = n.clientX - o.left - h, x = n.clientY - o.top - c, b = {}; return Math.abs(f + h) > r.globals.gridWidth ? f = r.globals.gridWidth - h : n.clientX - o.left < 0 && (f = h), h > n.clientX - o.left && (d = !0, f = Math.abs(f)), c > n.clientY - o.top && (g = !0, x = Math.abs(x)), b = s === "x" ? { x: d ? h - f : h, y: 0, width: f, height: r.globals.gridHeight } : s === "y" ? { x: 0, y: g ? c - x : c, width: r.globals.gridWidth, height: x } : { x: d ? h - f : h, y: g ? c - x : c, width: f, height: x }, n.drawSelectionRect(b), n.selectionDragging("resizing"), b } }, { key: "selectionDragging", value: function (i, a) { var s = this, r = this.w, n = this.xyRatios, o = this.selectionRect, h = 0; i === "resizing" && (h = 30); var c = function (g) { return parseFloat(o.node.getAttribute(g)) }, d = { x: c("x"), y: c("y"), width: c("width"), height: c("height") }; r.globals.selection = d, typeof r.config.chart.events.selection == "function" && r.globals.selectionEnabled && (clearTimeout(this.w.globals.selectionResizeTimer), this.w.globals.selectionResizeTimer = window.setTimeout(function () { var g, f, x, b, v = s.gridRect.getBoundingClientRect(), y = o.node.getBoundingClientRect(); r.globals.isRangeBar ? (g = r.globals.yAxisScale[0].niceMin + (y.left - v.left) * n.invertedYRatio, f = r.globals.yAxisScale[0].niceMin + (y.right - v.left) * n.invertedYRatio, x = 0, b = 1) : (g = r.globals.xAxisScale.niceMin + (y.left - v.left) * n.xRatio, f = r.globals.xAxisScale.niceMin + (y.right - v.left) * n.xRatio, x = r.globals.yAxisScale[0].niceMin + (v.bottom - y.bottom) * n.yRatio[0], b = r.globals.yAxisScale[0].niceMax - (y.top - v.top) * n.yRatio[0]); var w = { xaxis: { min: g, max: f }, yaxis: { min: x, max: b } }; r.config.chart.events.selection(s.ctx, w), r.config.chart.brush.enabled && r.config.chart.events.brushScrolled !== void 0 && r.config.chart.events.brushScrolled(s.ctx, w) }, h)) } }, { key: "selectionDrawn", value: function (i) { var a = i.context, s = i.zoomtype, r = this.w, n = a, o = this.xyRatios, h = this.ctx.toolbar; if (n.startX > n.endX) { var c = n.startX; n.startX = n.endX, n.endX = c } if (n.startY > n.endY) { var d = n.startY; n.startY = n.endY, n.endY = d } var g = void 0, f = void 0; r.globals.isRangeBar ? (g = r.globals.yAxisScale[0].niceMin + n.startX * o.invertedYRatio, f = r.globals.yAxisScale[0].niceMin + n.endX * o.invertedYRatio) : (g = r.globals.xAxisScale.niceMin + n.startX * o.xRatio, f = r.globals.xAxisScale.niceMin + n.endX * o.xRatio); var x = [], b = []; if (r.config.yaxis.forEach(function (A, k) { var S = r.globals.seriesYAxisMap[k][0]; x.push(r.globals.yAxisScale[k].niceMax - o.yRatio[S] * n.startY), b.push(r.globals.yAxisScale[k].niceMax - o.yRatio[S] * n.endY) }), n.dragged && (n.dragX > 10 || n.dragY > 10) && g !== f) { if (r.globals.zoomEnabled) { var v = P.clone(r.globals.initialConfig.yaxis), y = P.clone(r.globals.initialConfig.xaxis); if (r.globals.zoomed = !0, r.config.xaxis.convertedCatToNumeric && (g = Math.floor(g), f = Math.floor(f), g < 1 && (g = 1, f = r.globals.dataPoints), f - g < 2 && (f = g + 1)), s !== "xy" && s !== "x" || (y = { min: g, max: f }), s !== "xy" && s !== "y" || v.forEach(function (A, k) { v[k].min = b[k], v[k].max = x[k] }), h) { var w = h.getBeforeZoomRange(y, v); w && (y = w.xaxis ? w.xaxis : y, v = w.yaxis ? w.yaxis : v) } var l = { xaxis: y }; r.config.chart.group || (l.yaxis = v), n.ctx.updateHelpers._updateOptions(l, !1, n.w.config.chart.animations.dynamicAnimation.enabled), typeof r.config.chart.events.zoomed == "function" && h.zoomCallback(y, v) } else if (r.globals.selectionEnabled) { var u, m = null; u = { min: g, max: f }, s !== "xy" && s !== "y" || (m = P.clone(r.config.yaxis)).forEach(function (A, k) { m[k].min = b[k], m[k].max = x[k] }), r.globals.selection = n.selection, typeof r.config.chart.events.selection == "function" && r.config.chart.events.selection(n.ctx, { xaxis: u, yaxis: m }) } } } }, { key: "panDragging", value: function (i) { var a = i.context, s = this.w, r = a; if (s.globals.lastClientPosition.x !== void 0) { var n = s.globals.lastClientPosition.x - r.clientX, o = s.globals.lastClientPosition.y - r.clientY; Math.abs(n) > Math.abs(o) && n > 0 ? this.moveDirection = "left" : Math.abs(n) > Math.abs(o) && n < 0 ? this.moveDirection = "right" : Math.abs(o) > Math.abs(n) && o > 0 ? this.moveDirection = "up" : Math.abs(o) > Math.abs(n) && o < 0 && (this.moveDirection = "down") } s.globals.lastClientPosition = { x: r.clientX, y: r.clientY }; var h = s.globals.isRangeBar ? s.globals.minY : s.globals.minX, c = s.globals.isRangeBar ? s.globals.maxY : s.globals.maxX; s.config.xaxis.convertedCatToNumeric || r.panScrolled(h, c) } }, { key: "delayedPanScrolled", value: function () { var i = this.w, a = i.globals.minX, s = i.globals.maxX, r = (i.globals.maxX - i.globals.minX) / 2; this.moveDirection === "left" ? (a = i.globals.minX + r, s = i.globals.maxX + r) : this.moveDirection === "right" && (a = i.globals.minX - r, s = i.globals.maxX - r), a = Math.floor(a), s = Math.floor(s), this.updateScrolledChart({ xaxis: { min: a, max: s } }, a, s) } }, { key: "panScrolled", value: function (i, a) { var s = this.w, r = this.xyRatios, n = P.clone(s.globals.initialConfig.yaxis), o = r.xRatio, h = s.globals.minX, c = s.globals.maxX; s.globals.isRangeBar && (o = r.invertedYRatio, h = s.globals.minY, c = s.globals.maxY), this.moveDirection === "left" ? (i = h + s.globals.gridWidth / 15 * o, a = c + s.globals.gridWidth / 15 * o) : this.moveDirection === "right" && (i = h - s.globals.gridWidth / 15 * o, a = c - s.globals.gridWidth / 15 * o), s.globals.isRangeBar || (i < s.globals.initialMinX || a > s.globals.initialMaxX) && (i = h, a = c); var d = { xaxis: { min: i, max: a } }; s.config.chart.group || (d.yaxis = n), this.updateScrolledChart(d, i, a) } }, { key: "updateScrolledChart", value: function (i, a, s) { var r = this.w; this.ctx.updateHelpers._updateOptions(i, !1, !1), typeof r.config.chart.events.scrolled == "function" && r.config.chart.events.scrolled(this.ctx, { xaxis: { min: a, max: s } }) } }]), t }(), Nt = function () { function p(e) { F(this, p), this.w = e.w, this.ttCtx = e, this.ctx = e.ctx } return R(p, [{ key: "getNearestValues", value: function (e) { var t = e.hoverArea, i = e.elGrid, a = e.clientX, s = e.clientY, r = this.w, n = i.getBoundingClientRect(), o = n.width, h = n.height, c = o / (r.globals.dataPoints - 1), d = h / r.globals.dataPoints, g = this.hasBars(); !r.globals.comboCharts && !g || r.config.xaxis.convertedCatToNumeric || (c = o / r.globals.dataPoints); var f = a - n.left - r.globals.barPadForNumericAxis, x = s - n.top; f < 0 || x < 0 || f > o || x > h ? (t.classList.remove("hovering-zoom"), t.classList.remove("hovering-pan")) : r.globals.zoomEnabled ? (t.classList.remove("hovering-pan"), t.classList.add("hovering-zoom")) : r.globals.panEnabled && (t.classList.remove("hovering-zoom"), t.classList.add("hovering-pan")); var b = Math.round(f / c), v = Math.floor(x / d); g && !r.config.xaxis.convertedCatToNumeric && (b = Math.ceil(f / c), b -= 1); var y = null, w = null, l = r.globals.seriesXvalues.map(function (S) { return S.filter(function (L) { return P.isNumber(L) }) }), u = r.globals.seriesYvalues.map(function (S) { return S.filter(function (L) { return P.isNumber(L) }) }); if (r.globals.isXNumeric) { var m = this.ttCtx.getElGrid().getBoundingClientRect(), A = f * (m.width / o), k = x * (m.height / h); y = (w = this.closestInMultiArray(A, k, l, u)).index, b = w.j, y !== null && (l = r.globals.seriesXvalues[y], b = (w = this.closestInArray(A, l)).index) } return r.globals.capturedSeriesIndex = y === null ? -1 : y, (!b || b < 1) && (b = 0), r.globals.isBarHorizontal ? r.globals.capturedDataPointIndex = v : r.globals.capturedDataPointIndex = b, { capturedSeries: y, j: r.globals.isBarHorizontal ? v : b, hoverX: f, hoverY: x } } }, { key: "closestInMultiArray", value: function (e, t, i, a) { var s = this.w, r = 0, n = null, o = -1; s.globals.series.length > 1 ? r = this.getFirstActiveXArray(i) : n = 0; var h = i[r][0], c = Math.abs(e - h); if (i.forEach(function (f) { f.forEach(function (x, b) { var v = Math.abs(e - x); v <= c && (c = v, o = b) }) }), o !== -1) { var d = a[r][o], g = Math.abs(t - d); n = r, a.forEach(function (f, x) { var b = Math.abs(t - f[o]); b <= g && (g = b, n = x) }) } return { index: n, j: o } } }, { key: "getFirstActiveXArray", value: function (e) { for (var t = this.w, i = 0, a = e.map(function (r, n) { return r.length > 0 ? n : -1 }), s = 0; s < a.length; s++)if (a[s] !== -1 && t.globals.collapsedSeriesIndices.indexOf(s) === -1 && t.globals.ancillaryCollapsedSeriesIndices.indexOf(s) === -1) { i = a[s]; break } return i } }, { key: "closestInArray", value: function (e, t) { for (var i = t[0], a = null, s = Math.abs(e - i), r = 0; r < t.length; r++) { var n = Math.abs(e - t[r]); n < s && (s = n, a = r) } return { index: a } } }, { key: "isXoverlap", value: function (e) { var t = [], i = this.w.globals.seriesX.filter(function (s) { return s[0] !== void 0 }); if (i.length > 0) for (var a = 0; a < i.length - 1; a++)i[a][e] !== void 0 && i[a + 1][e] !== void 0 && i[a][e] !== i[a + 1][e] && t.push("unEqual"); return t.length === 0 } }, { key: "isInitialSeriesSameLen", value: function () { for (var e = !0, t = this.w.globals.initialSeries, i = 0; i < t.length - 1; i++)if (t[i].data.length !== t[i + 1].data.length) { e = !1; break } return e } }, { key: "getBarsHeight", value: function (e) { return te(e).reduce(function (t, i) { return t + i.getBBox().height }, 0) } }, { key: "getElMarkers", value: function (e) { return typeof e == "number" ? this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-series[data\\:realIndex='".concat(e, "'] .apexcharts-series-markers-wrap > *")) : this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-series-markers-wrap > *") } }, { key: "getAllMarkers", value: function () { var e = this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-series-markers-wrap"); (e = te(e)).sort(function (i, a) { var s = Number(i.getAttribute("data:realIndex")), r = Number(a.getAttribute("data:realIndex")); return r < s ? 1 : r > s ? -1 : 0 }); var t = []; return e.forEach(function (i) { t.push(i.querySelector(".apexcharts-marker")) }), t } }, { key: "hasMarkers", value: function (e) { return this.getElMarkers(e).length > 0 } }, { key: "getPathFromPoint", value: function (e, t) { var i = Number(e.getAttribute("cx")), a = Number(e.getAttribute("cy")), s = e.getAttribute("shape"); return new X(this.ctx).getMarkerPath(i, a, s, t) } }, { key: "getElBars", value: function () { return this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-bar-series, .apexcharts-candlestick-series, .apexcharts-boxPlot-series, .apexcharts-rangebar-series") } }, { key: "hasBars", value: function () { return this.getElBars().length > 0 } }, { key: "getHoverMarkerSize", value: function (e) { var t = this.w, i = t.config.markers.hover.size; return i === void 0 && (i = t.globals.markers.size[e] + t.config.markers.hover.sizeOffset), i } }, { key: "toggleAllTooltipSeriesGroups", value: function (e) { var t = this.w, i = this.ttCtx; i.allTooltipSeriesGroups.length === 0 && (i.allTooltipSeriesGroups = t.globals.dom.baseEl.querySelectorAll(".apexcharts-tooltip-series-group")); for (var a = i.allTooltipSeriesGroups, s = 0; s < a.length; s++)e === "enable" ? (a[s].classList.add("apexcharts-active"), a[s].style.display = t.config.tooltip.items.display) : (a[s].classList.remove("apexcharts-active"), a[s].style.display = "none") } }]), p }(), Zi = function () { function p(e) { F(this, p), this.w = e.w, this.ctx = e.ctx, this.ttCtx = e, this.tooltipUtil = new Nt(e) } return R(p, [{ key: "drawSeriesTexts", value: function (e) { var t = e.shared, i = t === void 0 || t, a = e.ttItems, s = e.i, r = s === void 0 ? 0 : s, n = e.j, o = n === void 0 ? null : n, h = e.y1, c = e.y2, d = e.e, g = this.w; g.config.tooltip.custom !== void 0 ? this.handleCustomTooltip({ i: r, j: o, y1: h, y2: c, w: g }) : this.toggleActiveInactiveSeries(i, r); var f = this.getValuesToPrint({ i: r, j: o }); this.printLabels({ i: r, j: o, values: f, ttItems: a, shared: i, e: d }); var x = this.ttCtx.getElTooltip(); this.ttCtx.tooltipRect.ttWidth = x.getBoundingClientRect().width, this.ttCtx.tooltipRect.ttHeight = x.getBoundingClientRect().height } }, { key: "printLabels", value: function (e) { var t, i = this, a = e.i, s = e.j, r = e.values, n = e.ttItems, o = e.shared, h = e.e, c = this.w, d = [], g = function (m) { return c.globals.seriesGoals[m] && c.globals.seriesGoals[m][s] && Array.isArray(c.globals.seriesGoals[m][s]) }, f = r.xVal, x = r.zVal, b = r.xAxisTTVal, v = "", y = c.globals.colors[a]; s !== null && c.config.plotOptions.bar.distributed && (y = c.globals.colors[s]); for (var w = function (m, A) { var k = i.getFormatters(a); v = i.getSeriesName({ fn: k.yLbTitleFormatter, index: a, seriesIndex: a, j: s }), c.config.chart.type === "treemap" && (v = k.yLbTitleFormatter(String(c.config.series[a].data[s].x), { series: c.globals.series, seriesIndex: a, dataPointIndex: s, w: c })); var S = c.config.tooltip.inverseOrder ? A : m; if (c.globals.axisCharts) { var L = function (z) { var M, T, E, O; return c.globals.isRangeData ? k.yLbFormatter((M = c.globals.seriesRangeStart) === null || M === void 0 || (T = M[z]) === null || T === void 0 ? void 0 : T[s], { series: c.globals.seriesRangeStart, seriesIndex: z, dataPointIndex: s, w: c }) + " - " + k.yLbFormatter((E = c.globals.seriesRangeEnd) === null || E === void 0 || (O = E[z]) === null || O === void 0 ? void 0 : O[s], { series: c.globals.seriesRangeEnd, seriesIndex: z, dataPointIndex: s, w: c }) : k.yLbFormatter(c.globals.series[z][s], { series: c.globals.series, seriesIndex: z, dataPointIndex: s, w: c }) }; if (o) k = i.getFormatters(S), v = i.getSeriesName({ fn: k.yLbTitleFormatter, index: S, seriesIndex: a, j: s }), y = c.globals.colors[S], t = L(S), g(S) && (d = c.globals.seriesGoals[S][s].map(function (z) { return { attrs: z, val: k.yLbFormatter(z.value, { seriesIndex: S, dataPointIndex: s, w: c }) } })); else { var C, I = h == null || (C = h.target) === null || C === void 0 ? void 0 : C.getAttribute("fill"); I && (y = I.indexOf("url") !== -1 ? document.querySelector(I.substr(4).slice(0, -1)).childNodes[0].getAttribute("stroke") : I), t = L(a), g(a) && Array.isArray(c.globals.seriesGoals[a][s]) && (d = c.globals.seriesGoals[a][s].map(function (z) { return { attrs: z, val: k.yLbFormatter(z.value, { seriesIndex: a, dataPointIndex: s, w: c }) } })) } } s === null && (t = k.yLbFormatter(c.globals.series[a], Y(Y({}, c), {}, { seriesIndex: a, dataPointIndex: a }))), i.DOMHandling({ i: a, t: S, j: s, ttItems: n, values: { val: t, goalVals: d, xVal: f, xAxisTTVal: b, zVal: x }, seriesName: v, shared: o, pColor: y }) }, l = 0, u = c.globals.series.length - 1; l < c.globals.series.length; l++, u--)w(l, u) } }, { key: "getFormatters", value: function (e) { var t, i = this.w, a = i.globals.yLabelFormatters[e]; return i.globals.ttVal !== void 0 ? Array.isArray(i.globals.ttVal) ? (a = i.globals.ttVal[e] && i.globals.ttVal[e].formatter, t = i.globals.ttVal[e] && i.globals.ttVal[e].title && i.globals.ttVal[e].title.formatter) : (a = i.globals.ttVal.formatter, typeof i.globals.ttVal.title.formatter == "function" && (t = i.globals.ttVal.title.formatter)) : t = i.config.tooltip.y.title.formatter, typeof a != "function" && (a = i.globals.yLabelFormatters[0] ? i.globals.yLabelFormatters[0] : function (s) { return s }), typeof t != "function" && (t = function (s) { return s }), { yLbFormatter: a, yLbTitleFormatter: t } } }, { key: "getSeriesName", value: function (e) { var t = e.fn, i = e.index, a = e.seriesIndex, s = e.j, r = this.w; return t(String(r.globals.seriesNames[i]), { series: r.globals.series, seriesIndex: a, dataPointIndex: s, w: r }) } }, { key: "DOMHandling", value: function (e) { e.i; var t = e.t, i = e.j, a = e.ttItems, s = e.values, r = e.seriesName, n = e.shared, o = e.pColor, h = this.w, c = this.ttCtx, d = s.val, g = s.goalVals, f = s.xVal, x = s.xAxisTTVal, b = s.zVal, v = null; v = a[t].children, h.config.tooltip.fillSeriesColor && (a[t].style.backgroundColor = o, v[0].style.display = "none"), c.showTooltipTitle && (c.tooltipTitle === null && (c.tooltipTitle = h.globals.dom.baseEl.querySelector(".apexcharts-tooltip-title")), c.tooltipTitle.innerHTML = f), c.isXAxisTooltipEnabled && (c.xaxisTooltipText.innerHTML = x !== "" ? x : f); var y = a[t].querySelector(".apexcharts-tooltip-text-y-label"); y && (y.innerHTML = r || ""); var w = a[t].querySelector(".apexcharts-tooltip-text-y-value"); w && (w.innerHTML = d !== void 0 ? d : ""), v[0] && v[0].classList.contains("apexcharts-tooltip-marker") && (h.config.tooltip.marker.fillColors && Array.isArray(h.config.tooltip.marker.fillColors) && (o = h.config.tooltip.marker.fillColors[t]), v[0].style.backgroundColor = o), h.config.tooltip.marker.show || (v[0].style.display = "none"); var l = a[t].querySelector(".apexcharts-tooltip-text-goals-label"), u = a[t].querySelector(".apexcharts-tooltip-text-goals-value"); if (g.length && h.globals.seriesGoals[t]) { var m = function () { var S = "
", L = "
"; g.forEach(function (C, I) { S += '
').concat(C.attrs.name, "
"), L += "
".concat(C.val, "
") }), l.innerHTML = S + "
", u.innerHTML = L + "
" }; n ? h.globals.seriesGoals[t][i] && Array.isArray(h.globals.seriesGoals[t][i]) ? m() : (l.innerHTML = "", u.innerHTML = "") : m() } else l.innerHTML = "", u.innerHTML = ""; if (b !== null && (a[t].querySelector(".apexcharts-tooltip-text-z-label").innerHTML = h.config.tooltip.z.title, a[t].querySelector(".apexcharts-tooltip-text-z-value").innerHTML = b !== void 0 ? b : ""), n && v[0]) { if (h.config.tooltip.hideEmptySeries) { var A = a[t].querySelector(".apexcharts-tooltip-marker"), k = a[t].querySelector(".apexcharts-tooltip-text"); parseFloat(d) == 0 ? (A.style.display = "none", k.style.display = "none") : (A.style.display = "block", k.style.display = "block") } d == null || h.globals.ancillaryCollapsedSeriesIndices.indexOf(t) > -1 || h.globals.collapsedSeriesIndices.indexOf(t) > -1 || Array.isArray(c.tConfig.enabledOnSeries) && c.tConfig.enabledOnSeries.indexOf(t) === -1 ? v[0].parentNode.style.display = "none" : v[0].parentNode.style.display = h.config.tooltip.items.display } else Array.isArray(c.tConfig.enabledOnSeries) && c.tConfig.enabledOnSeries.indexOf(t) === -1 && (v[0].parentNode.style.display = "none") } }, { key: "toggleActiveInactiveSeries", value: function (e, t) { var i = this.w; if (e) this.tooltipUtil.toggleAllTooltipSeriesGroups("enable"); else { this.tooltipUtil.toggleAllTooltipSeriesGroups("disable"); var a = i.globals.dom.baseEl.querySelector(".apexcharts-tooltip-series-group-".concat(t)); a && (a.classList.add("apexcharts-active"), a.style.display = i.config.tooltip.items.display) } } }, { key: "getValuesToPrint", value: function (e) { var t = e.i, i = e.j, a = this.w, s = this.ctx.series.filteredSeriesX(), r = "", n = "", o = null, h = null, c = { series: a.globals.series, seriesIndex: t, dataPointIndex: i, w: a }, d = a.globals.ttZFormatter; i === null ? h = a.globals.series[t] : a.globals.isXNumeric && a.config.chart.type !== "treemap" ? (r = s[t][i], s[t].length === 0 && (r = s[this.tooltipUtil.getFirstActiveXArray(s)][i])) : r = a.globals.labels[i] !== void 0 ? a.globals.labels[i] : ""; var g = r; return a.globals.isXNumeric && a.config.xaxis.type === "datetime" ? r = new ze(this.ctx).xLabelFormat(a.globals.ttKeyFormatter, g, g, { i: void 0, dateFormatter: new K(this.ctx).formatDate, w: this.w }) : r = a.globals.isBarHorizontal ? a.globals.yLabelFormatters[0](g, c) : a.globals.xLabelFormatter(g, c), a.config.tooltip.x.formatter !== void 0 && (r = a.globals.ttKeyFormatter(g, c)), a.globals.seriesZ.length > 0 && a.globals.seriesZ[t].length > 0 && (o = d(a.globals.seriesZ[t][i], a)), n = typeof a.config.xaxis.tooltip.formatter == "function" ? a.globals.xaxisTooltipFormatter(g, c) : r, { val: Array.isArray(h) ? h.join(" ") : h, xVal: Array.isArray(r) ? r.join(" ") : r, xAxisTTVal: Array.isArray(n) ? n.join(" ") : n, zVal: o } } }, { key: "handleCustomTooltip", value: function (e) { var t = e.i, i = e.j, a = e.y1, s = e.y2, r = e.w, n = this.ttCtx.getElTooltip(), o = r.config.tooltip.custom; Array.isArray(o) && o[t] && (o = o[t]), n.innerHTML = o({ ctx: this.ctx, series: r.globals.series, seriesIndex: t, dataPointIndex: i, y1: a, y2: s, w: r }) } }]), p }(), Wt = function () { + function p(e) { F(this, p), this.ttCtx = e, this.ctx = e.ctx, this.w = e.w } return R(p, [{ key: "moveXCrosshairs", value: function (e) { var t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : null, i = this.ttCtx, a = this.w, s = i.getElXCrosshairs(), r = e - i.xcrosshairsWidth / 2, n = a.globals.labels.slice().length; if (t !== null && (r = a.globals.gridWidth / n * t), s === null || a.globals.isBarHorizontal || (s.setAttribute("x", r), s.setAttribute("x1", r), s.setAttribute("x2", r), s.setAttribute("y2", a.globals.gridHeight), s.classList.add("apexcharts-active")), r < 0 && (r = 0), r > a.globals.gridWidth && (r = a.globals.gridWidth), i.isXAxisTooltipEnabled) { var o = r; a.config.xaxis.crosshairs.width !== "tickWidth" && a.config.xaxis.crosshairs.width !== "barWidth" || (o = r + i.xcrosshairsWidth / 2), this.moveXAxisTooltip(o) } } }, { key: "moveYCrosshairs", value: function (e) { var t = this.ttCtx; t.ycrosshairs !== null && X.setAttrs(t.ycrosshairs, { y1: e, y2: e }), t.ycrosshairsHidden !== null && X.setAttrs(t.ycrosshairsHidden, { y1: e, y2: e }) } }, { key: "moveXAxisTooltip", value: function (e) { var t = this.w, i = this.ttCtx; if (i.xaxisTooltip !== null && i.xcrosshairsWidth !== 0) { i.xaxisTooltip.classList.add("apexcharts-active"); var a = i.xaxisOffY + t.config.xaxis.tooltip.offsetY + t.globals.translateY + 1 + t.config.xaxis.offsetY; if (e -= i.xaxisTooltip.getBoundingClientRect().width / 2, !isNaN(e)) { e += t.globals.translateX; var s; s = new X(this.ctx).getTextRects(i.xaxisTooltipText.innerHTML), i.xaxisTooltipText.style.minWidth = s.width + "px", i.xaxisTooltip.style.left = e + "px", i.xaxisTooltip.style.top = a + "px" } } } }, { key: "moveYAxisTooltip", value: function (e) { var t = this.w, i = this.ttCtx; i.yaxisTTEls === null && (i.yaxisTTEls = t.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxistooltip")); var a = parseInt(i.ycrosshairsHidden.getAttribute("y1"), 10), s = t.globals.translateY + a, r = i.yaxisTTEls[e].getBoundingClientRect().height, n = t.globals.translateYAxisX[e] - 2; t.config.yaxis[e].opposite && (n -= 26), s -= r / 2, t.globals.ignoreYAxisIndexes.indexOf(e) === -1 ? (i.yaxisTTEls[e].classList.add("apexcharts-active"), i.yaxisTTEls[e].style.top = s + "px", i.yaxisTTEls[e].style.left = n + t.config.yaxis[e].tooltip.offsetX + "px") : i.yaxisTTEls[e].classList.remove("apexcharts-active") } }, { key: "moveTooltip", value: function (e, t) { var i = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : null, a = this.w, s = this.ttCtx, r = s.getElTooltip(), n = s.tooltipRect, o = i !== null ? parseFloat(i) : 1, h = parseFloat(e) + o + 5, c = parseFloat(t) + o / 2; if (h > a.globals.gridWidth / 2 && (h = h - n.ttWidth - o - 10), h > a.globals.gridWidth - n.ttWidth - 10 && (h = a.globals.gridWidth - n.ttWidth), h < -20 && (h = -20), a.config.tooltip.followCursor) { var d = s.getElGrid().getBoundingClientRect(); (h = s.e.clientX - d.left) > a.globals.gridWidth / 2 && (h -= s.tooltipRect.ttWidth), (c = s.e.clientY + a.globals.translateY - d.top) > a.globals.gridHeight / 2 && (c -= s.tooltipRect.ttHeight) } else a.globals.isBarHorizontal || n.ttHeight / 2 + c > a.globals.gridHeight && (c = a.globals.gridHeight - n.ttHeight + a.globals.translateY); isNaN(h) || (h += a.globals.translateX, r.style.left = h + "px", r.style.top = c + "px") } }, { key: "moveMarkers", value: function (e, t) { var i = this.w, a = this.ttCtx; if (i.globals.markers.size[e] > 0) for (var s = i.globals.dom.baseEl.querySelectorAll(" .apexcharts-series[data\\:realIndex='".concat(e, "'] .apexcharts-marker")), r = 0; r < s.length; r++)parseInt(s[r].getAttribute("rel"), 10) === t && (a.marker.resetPointsSize(), a.marker.enlargeCurrentPoint(t, s[r])); else a.marker.resetPointsSize(), this.moveDynamicPointOnHover(t, e) } }, { key: "moveDynamicPointOnHover", value: function (e, t) { var i, a, s, r, n = this.w, o = this.ttCtx, h = new X(this.ctx), c = n.globals.pointsArray, d = o.tooltipUtil.getHoverMarkerSize(t), g = n.config.series[t].type; if (!g || g !== "column" && g !== "candlestick" && g !== "boxPlot") { s = (i = c[t][e]) === null || i === void 0 ? void 0 : i[0], r = ((a = c[t][e]) === null || a === void 0 ? void 0 : a[1]) || 0; var f = n.globals.dom.baseEl.querySelector(".apexcharts-series[data\\:realIndex='".concat(t, "'] .apexcharts-series-markers path")); if (f && r < n.globals.gridHeight && r > 0) { var x = f.getAttribute("shape"), b = h.getMarkerPath(s, r, x, 1.5 * d); f.setAttribute("d", b) } this.moveXCrosshairs(s), o.fixedTooltip || this.moveTooltip(s, r, d) } } }, { key: "moveDynamicPointsOnHover", value: function (e) { var t, i = this.ttCtx, a = i.w, s = 0, r = 0, n = a.globals.pointsArray, o = new re(this.ctx), h = new X(this.ctx); t = o.getActiveConfigSeriesIndex("asc", ["line", "area", "scatter", "bubble"]); var c = i.tooltipUtil.getHoverMarkerSize(t); n[t] && (s = n[t][e][0], r = n[t][e][1]); var d = i.tooltipUtil.getAllMarkers(); if (d !== null) for (var g = 0; g < a.globals.series.length; g++) { var f = n[g]; if (a.globals.comboCharts && f === void 0 && d.splice(g, 0, null), f && f.length) { var x = n[g][e][1], b = void 0; d[g].setAttribute("cx", s); var v = d[g].getAttribute("shape"); if (a.config.chart.type === "rangeArea" && !a.globals.comboCharts) { var y = e + a.globals.series[g].length; b = n[g][y][1], x -= Math.abs(x - b) / 2 } if (x !== null && !isNaN(x) && x < a.globals.gridHeight + c && x + c > 0) { var w = h.getMarkerPath(s, x, v, c); d[g].setAttribute("d", w) } else d[g].setAttribute("d", "") } } this.moveXCrosshairs(s), i.fixedTooltip || this.moveTooltip(s, r || a.globals.gridHeight, c) } }, { + key: "moveStickyTooltipOverBars", value: function (e, t) { + var i = this.w, a = this.ttCtx, s = i.globals.columnSeries ? i.globals.columnSeries.length : i.globals.series.length, r = s >= 2 && s % 2 == 0 ? Math.floor(s / 2) : Math.floor(s / 2) + 1; i.globals.isBarHorizontal && (r = new re(this.ctx).getActiveConfigSeriesIndex("desc") + 1); var n = i.globals.dom.baseEl.querySelector(".apexcharts-bar-series .apexcharts-series[rel='".concat(r, "'] path[j='").concat(e, "'], .apexcharts-candlestick-series .apexcharts-series[rel='").concat(r, "'] path[j='").concat(e, "'], .apexcharts-boxPlot-series .apexcharts-series[rel='").concat(r, "'] path[j='").concat(e, "'], .apexcharts-rangebar-series .apexcharts-series[rel='").concat(r, "'] path[j='").concat(e, "']")); n || typeof t != "number" || (n = i.globals.dom.baseEl.querySelector(".apexcharts-bar-series .apexcharts-series[data\\:realIndex='".concat(t, "'] path[j='").concat(e, `'], + .apexcharts-candlestick-series .apexcharts-series[data\\:realIndex='`).concat(t, "'] path[j='").concat(e, `'], + .apexcharts-boxPlot-series .apexcharts-series[data\\:realIndex='`).concat(t, "'] path[j='").concat(e, `'], + .apexcharts-rangebar-series .apexcharts-series[data\\:realIndex='`).concat(t, "'] path[j='").concat(e, "']"))); var o = n ? parseFloat(n.getAttribute("cx")) : 0, h = n ? parseFloat(n.getAttribute("cy")) : 0, c = n ? parseFloat(n.getAttribute("barWidth")) : 0, d = a.getElGrid().getBoundingClientRect(), g = n && (n.classList.contains("apexcharts-candlestick-area") || n.classList.contains("apexcharts-boxPlot-area")); i.globals.isXNumeric ? (n && !g && (o -= s % 2 != 0 ? c / 2 : 0), n && g && i.globals.comboCharts && (o -= c / 2)) : i.globals.isBarHorizontal || (o = a.xAxisTicksPositions[e - 1] + a.dataPointsDividedWidth / 2, isNaN(o) && (o = a.xAxisTicksPositions[e] - a.dataPointsDividedWidth / 2)), i.globals.isBarHorizontal ? h -= a.tooltipRect.ttHeight : i.config.tooltip.followCursor ? h = a.e.clientY - d.top - a.tooltipRect.ttHeight / 2 : h + a.tooltipRect.ttHeight + 15 > i.globals.gridHeight && (h = i.globals.gridHeight), i.globals.isBarHorizontal || this.moveXCrosshairs(o), a.fixedTooltip || this.moveTooltip(o, h || i.globals.gridHeight) + } + }]), p + }(), $i = function () { function p(e) { F(this, p), this.w = e.w, this.ttCtx = e, this.ctx = e.ctx, this.tooltipPosition = new Wt(e) } return R(p, [{ key: "drawDynamicPoints", value: function () { var e = this.w, t = new X(this.ctx), i = new ye(this.ctx), a = e.globals.dom.baseEl.querySelectorAll(".apexcharts-series"); a = te(a), e.config.chart.stacked && a.sort(function (d, g) { return parseFloat(d.getAttribute("data:realIndex")) - parseFloat(g.getAttribute("data:realIndex")) }); for (var s = 0; s < a.length; s++) { var r = a[s].querySelector(".apexcharts-series-markers-wrap"); if (r !== null) { var n = void 0, o = "apexcharts-marker w".concat((Math.random() + 1).toString(36).substring(4)); e.config.chart.type !== "line" && e.config.chart.type !== "area" || e.globals.comboCharts || e.config.tooltip.intersect || (o += " no-pointer-events"); var h = i.getMarkerConfig({ cssClass: o, seriesIndex: Number(r.getAttribute("data:realIndex")) }); (n = t.drawMarker(0, 0, h)).node.setAttribute("default-marker-size", 0); var c = document.createElementNS(e.globals.SVGNS, "g"); c.classList.add("apexcharts-series-markers"), c.appendChild(n.node), r.appendChild(c) } } } }, { key: "enlargeCurrentPoint", value: function (e, t) { var i = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : null, a = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : null, s = this.w; s.config.chart.type !== "bubble" && this.newPointSize(e, t); var r = t.getAttribute("cx"), n = t.getAttribute("cy"); if (i !== null && a !== null && (r = i, n = a), this.tooltipPosition.moveXCrosshairs(r), !this.fixedTooltip) { if (s.config.chart.type === "radar") { var o = this.ttCtx.getElGrid().getBoundingClientRect(); r = this.ttCtx.e.clientX - o.left } this.tooltipPosition.moveTooltip(r, n, s.config.markers.hover.size) } } }, { key: "enlargePoints", value: function (e) { for (var t = this.w, i = this, a = this.ttCtx, s = e, r = t.globals.dom.baseEl.querySelectorAll(".apexcharts-series:not(.apexcharts-series-collapsed) .apexcharts-marker"), n = t.config.markers.hover.size, o = 0; o < r.length; o++) { var h = r[o].getAttribute("rel"), c = r[o].getAttribute("index"); if (n === void 0 && (n = t.globals.markers.size[c] + t.config.markers.hover.sizeOffset), s === parseInt(h, 10)) { i.newPointSize(s, r[o]); var d = r[o].getAttribute("cx"), g = r[o].getAttribute("cy"); i.tooltipPosition.moveXCrosshairs(d), a.fixedTooltip || i.tooltipPosition.moveTooltip(d, g, n) } else i.oldPointSize(r[o]) } } }, { key: "newPointSize", value: function (e, t) { var i = this.w, a = i.config.markers.hover.size, s = e === 0 ? t.parentNode.firstChild : t.parentNode.lastChild; if (s.getAttribute("default-marker-size") !== "0") { var r = parseInt(s.getAttribute("index"), 10); a === void 0 && (a = i.globals.markers.size[r] + i.config.markers.hover.sizeOffset), a < 0 && (a = 0); var n = this.ttCtx.tooltipUtil.getPathFromPoint(t, a); t.setAttribute("d", n) } } }, { key: "oldPointSize", value: function (e) { var t = parseFloat(e.getAttribute("default-marker-size")), i = this.ttCtx.tooltipUtil.getPathFromPoint(e, t); e.setAttribute("d", i) } }, { key: "resetPointsSize", value: function () { for (var e = this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-series:not(.apexcharts-series-collapsed) .apexcharts-marker"), t = 0; t < e.length; t++) { var i = parseFloat(e[t].getAttribute("default-marker-size")); if (P.isNumber(i) && i >= 0) { var a = this.ttCtx.tooltipUtil.getPathFromPoint(e[t], i); e[t].setAttribute("d", a) } else e[t].setAttribute("d", "M0,0") } } }]), p }(), Ji = function () { function p(e) { F(this, p), this.w = e.w; var t = this.w; this.ttCtx = e, this.isVerticalGroupedRangeBar = !t.globals.isBarHorizontal && t.config.chart.type === "rangeBar" && t.config.plotOptions.bar.rangeBarGroupRows } return R(p, [{ key: "getAttr", value: function (e, t) { return parseFloat(e.target.getAttribute(t)) } }, { key: "handleHeatTreeTooltip", value: function (e) { var t = e.e, i = e.opt, a = e.x, s = e.y, r = e.type, n = this.ttCtx, o = this.w; if (t.target.classList.contains("apexcharts-".concat(r, "-rect"))) { var h = this.getAttr(t, "i"), c = this.getAttr(t, "j"), d = this.getAttr(t, "cx"), g = this.getAttr(t, "cy"), f = this.getAttr(t, "width"), x = this.getAttr(t, "height"); if (n.tooltipLabels.drawSeriesTexts({ ttItems: i.ttItems, i: h, j: c, shared: !1, e: t }), o.globals.capturedSeriesIndex = h, o.globals.capturedDataPointIndex = c, a = d + n.tooltipRect.ttWidth / 2 + f, s = g + n.tooltipRect.ttHeight / 2 - x / 2, n.tooltipPosition.moveXCrosshairs(d + f / 2), a > o.globals.gridWidth / 2 && (a = d - n.tooltipRect.ttWidth / 2 + f), n.w.config.tooltip.followCursor) { var b = o.globals.dom.elWrap.getBoundingClientRect(); a = o.globals.clientX - b.left - (a > o.globals.gridWidth / 2 ? n.tooltipRect.ttWidth : 0), s = o.globals.clientY - b.top - (s > o.globals.gridHeight / 2 ? n.tooltipRect.ttHeight : 0) } } return { x: a, y: s } } }, { key: "handleMarkerTooltip", value: function (e) { var t, i, a = e.e, s = e.opt, r = e.x, n = e.y, o = this.w, h = this.ttCtx; if (a.target.classList.contains("apexcharts-marker")) { var c = parseInt(s.paths.getAttribute("cx"), 10), d = parseInt(s.paths.getAttribute("cy"), 10), g = parseFloat(s.paths.getAttribute("val")); if (i = parseInt(s.paths.getAttribute("rel"), 10), t = parseInt(s.paths.parentNode.parentNode.parentNode.getAttribute("rel"), 10) - 1, h.intersect) { var f = P.findAncestor(s.paths, "apexcharts-series"); f && (t = parseInt(f.getAttribute("data:realIndex"), 10)) } if (h.tooltipLabels.drawSeriesTexts({ ttItems: s.ttItems, i: t, j: i, shared: !h.showOnIntersect && o.config.tooltip.shared, e: a }), a.type === "mouseup" && h.markerClick(a, t, i), o.globals.capturedSeriesIndex = t, o.globals.capturedDataPointIndex = i, r = c, n = d + o.globals.translateY - 1.4 * h.tooltipRect.ttHeight, h.w.config.tooltip.followCursor) { var x = h.getElGrid().getBoundingClientRect(); n = h.e.clientY + o.globals.translateY - x.top } g < 0 && (n = d), h.marker.enlargeCurrentPoint(i, s.paths, r, n) } return { x: r, y: n } } }, { key: "handleBarTooltip", value: function (e) { var t, i, a = e.e, s = e.opt, r = this.w, n = this.ttCtx, o = n.getElTooltip(), h = 0, c = 0, d = 0, g = this.getBarTooltipXY({ e: a, opt: s }); t = g.i; var f = g.j; r.globals.capturedSeriesIndex = t, r.globals.capturedDataPointIndex = f, r.globals.isBarHorizontal && n.tooltipUtil.hasBars() || !r.config.tooltip.shared ? (c = g.x, d = g.y, i = Array.isArray(r.config.stroke.width) ? r.config.stroke.width[t] : r.config.stroke.width, h = c) : r.globals.comboCharts || r.config.tooltip.shared || (h /= 2), isNaN(d) && (d = r.globals.svgHeight - n.tooltipRect.ttHeight); var x = parseInt(s.paths.parentNode.getAttribute("data:realIndex"), 10); if (r.globals.isMultipleYAxis ? r.config.yaxis[x] && r.config.yaxis[x].reversed : r.config.yaxis[0].reversed, c + n.tooltipRect.ttWidth > r.globals.gridWidth ? c -= n.tooltipRect.ttWidth : c < 0 && (c = 0), n.w.config.tooltip.followCursor) { var b = n.getElGrid().getBoundingClientRect(); d = n.e.clientY - b.top } n.tooltip === null && (n.tooltip = r.globals.dom.baseEl.querySelector(".apexcharts-tooltip")), r.config.tooltip.shared || (r.globals.comboBarCount > 0 ? n.tooltipPosition.moveXCrosshairs(h + i / 2) : n.tooltipPosition.moveXCrosshairs(h)), !n.fixedTooltip && (!r.config.tooltip.shared || r.globals.isBarHorizontal && n.tooltipUtil.hasBars()) && (d = d + r.globals.translateY - n.tooltipRect.ttHeight / 2, o.style.left = c + r.globals.translateX + "px", o.style.top = d + "px") } }, { key: "getBarTooltipXY", value: function (e) { var t = this, i = e.e, a = e.opt, s = this.w, r = null, n = this.ttCtx, o = 0, h = 0, c = 0, d = 0, g = 0, f = i.target.classList; if (f.contains("apexcharts-bar-area") || f.contains("apexcharts-candlestick-area") || f.contains("apexcharts-boxPlot-area") || f.contains("apexcharts-rangebar-area")) { var x = i.target, b = x.getBoundingClientRect(), v = a.elGrid.getBoundingClientRect(), y = b.height; g = b.height; var w = b.width, l = parseInt(x.getAttribute("cx"), 10), u = parseInt(x.getAttribute("cy"), 10); d = parseFloat(x.getAttribute("barWidth")); var m = i.type === "touchmove" ? i.touches[0].clientX : i.clientX; r = parseInt(x.getAttribute("j"), 10), o = parseInt(x.parentNode.getAttribute("rel"), 10) - 1; var A = x.getAttribute("data-range-y1"), k = x.getAttribute("data-range-y2"); s.globals.comboCharts && (o = parseInt(x.parentNode.getAttribute("data:realIndex"), 10)); var S = function (C) { return s.globals.isXNumeric ? l - w / 2 : t.isVerticalGroupedRangeBar ? l + w / 2 : l - n.dataPointsDividedWidth + w / 2 }, L = function () { return u - n.dataPointsDividedHeight + y / 2 - n.tooltipRect.ttHeight / 2 }; n.tooltipLabels.drawSeriesTexts({ ttItems: a.ttItems, i: o, j: r, y1: A ? parseInt(A, 10) : null, y2: k ? parseInt(k, 10) : null, shared: !n.showOnIntersect && s.config.tooltip.shared, e: i }), s.config.tooltip.followCursor ? s.globals.isBarHorizontal ? (h = m - v.left + 15, c = L()) : (h = S(), c = i.clientY - v.top - n.tooltipRect.ttHeight / 2 - 15) : s.globals.isBarHorizontal ? ((h = l) < n.xyRatios.baseLineInvertedY && (h = l - n.tooltipRect.ttWidth), c = L()) : (h = S(), c = u) } return { x: h, y: c, barHeight: g, barWidth: d, i: o, j: r } } }]), p }(), Ki = function () { function p(e) { F(this, p), this.w = e.w, this.ttCtx = e } return R(p, [{ key: "drawXaxisTooltip", value: function () { var e = this.w, t = this.ttCtx, i = e.config.xaxis.position === "bottom"; t.xaxisOffY = i ? e.globals.gridHeight + 1 : -e.globals.xAxisHeight - e.config.xaxis.axisTicks.height + 3; var a = i ? "apexcharts-xaxistooltip apexcharts-xaxistooltip-bottom" : "apexcharts-xaxistooltip apexcharts-xaxistooltip-top", s = e.globals.dom.elWrap; t.isXAxisTooltipEnabled && e.globals.dom.baseEl.querySelector(".apexcharts-xaxistooltip") === null && (t.xaxisTooltip = document.createElement("div"), t.xaxisTooltip.setAttribute("class", a + " apexcharts-theme-" + e.config.tooltip.theme), s.appendChild(t.xaxisTooltip), t.xaxisTooltipText = document.createElement("div"), t.xaxisTooltipText.classList.add("apexcharts-xaxistooltip-text"), t.xaxisTooltipText.style.fontFamily = e.config.xaxis.tooltip.style.fontFamily || e.config.chart.fontFamily, t.xaxisTooltipText.style.fontSize = e.config.xaxis.tooltip.style.fontSize, t.xaxisTooltip.appendChild(t.xaxisTooltipText)) } }, { key: "drawYaxisTooltip", value: function () { for (var e = this.w, t = this.ttCtx, i = 0; i < e.config.yaxis.length; i++) { var a = e.config.yaxis[i].opposite || e.config.yaxis[i].crosshairs.opposite; t.yaxisOffX = a ? e.globals.gridWidth + 1 : 1; var s = "apexcharts-yaxistooltip apexcharts-yaxistooltip-".concat(i, a ? " apexcharts-yaxistooltip-right" : " apexcharts-yaxistooltip-left"), r = e.globals.dom.elWrap; e.globals.dom.baseEl.querySelector(".apexcharts-yaxistooltip apexcharts-yaxistooltip-".concat(i)) === null && (t.yaxisTooltip = document.createElement("div"), t.yaxisTooltip.setAttribute("class", s + " apexcharts-theme-" + e.config.tooltip.theme), r.appendChild(t.yaxisTooltip), i === 0 && (t.yaxisTooltipText = []), t.yaxisTooltipText[i] = document.createElement("div"), t.yaxisTooltipText[i].classList.add("apexcharts-yaxistooltip-text"), t.yaxisTooltip.appendChild(t.yaxisTooltipText[i])) } } }, { key: "setXCrosshairWidth", value: function () { var e = this.w, t = this.ttCtx, i = t.getElXCrosshairs(); if (t.xcrosshairsWidth = parseInt(e.config.xaxis.crosshairs.width, 10), e.globals.comboCharts) { var a = e.globals.dom.baseEl.querySelector(".apexcharts-bar-area"); if (a !== null && e.config.xaxis.crosshairs.width === "barWidth") { var s = parseFloat(a.getAttribute("barWidth")); t.xcrosshairsWidth = s } else if (e.config.xaxis.crosshairs.width === "tickWidth") { var r = e.globals.labels.length; t.xcrosshairsWidth = e.globals.gridWidth / r } } else if (e.config.xaxis.crosshairs.width === "tickWidth") { var n = e.globals.labels.length; t.xcrosshairsWidth = e.globals.gridWidth / n } else if (e.config.xaxis.crosshairs.width === "barWidth") { var o = e.globals.dom.baseEl.querySelector(".apexcharts-bar-area"); if (o !== null) { var h = parseFloat(o.getAttribute("barWidth")); t.xcrosshairsWidth = h } else t.xcrosshairsWidth = 1 } e.globals.isBarHorizontal && (t.xcrosshairsWidth = 0), i !== null && t.xcrosshairsWidth > 0 && i.setAttribute("width", t.xcrosshairsWidth) } }, { key: "handleYCrosshair", value: function () { var e = this.w, t = this.ttCtx; t.ycrosshairs = e.globals.dom.baseEl.querySelector(".apexcharts-ycrosshairs"), t.ycrosshairsHidden = e.globals.dom.baseEl.querySelector(".apexcharts-ycrosshairs-hidden") } }, { key: "drawYaxisTooltipText", value: function (e, t, i) { var a = this.ttCtx, s = this.w, r = s.globals, n = r.seriesYAxisMap[e]; if (a.yaxisTooltips[e] && n.length > 0) { var o = r.yLabelFormatters[e], h = a.getElGrid().getBoundingClientRect(), c = n[0], d = 0; i.yRatio.length > 1 && (d = c); var g = (t - h.top) * i.yRatio[d], f = r.maxYArr[c] - r.minYArr[c], x = r.minYArr[c] + (f - g); s.config.yaxis[e].reversed && (x = r.maxYArr[c] - (f - g)), a.tooltipPosition.moveYCrosshairs(t - h.top), a.yaxisTooltipText[e].innerHTML = o(x), a.tooltipPosition.moveYAxisTooltip(e) } } }]), p }(), At = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w; var t = this.w; this.tConfig = t.config.tooltip, this.tooltipUtil = new Nt(this), this.tooltipLabels = new Zi(this), this.tooltipPosition = new Wt(this), this.marker = new $i(this), this.intersect = new Ji(this), this.axesTooltip = new Ki(this), this.showOnIntersect = this.tConfig.intersect, this.showTooltipTitle = this.tConfig.x.show, this.fixedTooltip = this.tConfig.fixed.enabled, this.xaxisTooltip = null, this.yaxisTTEls = null, this.isBarShared = !t.globals.isBarHorizontal && this.tConfig.shared, this.lastHoverTime = Date.now() } return R(p, [{ key: "getElTooltip", value: function (e) { return e || (e = this), e.w.globals.dom.baseEl ? e.w.globals.dom.baseEl.querySelector(".apexcharts-tooltip") : null } }, { key: "getElXCrosshairs", value: function () { return this.w.globals.dom.baseEl.querySelector(".apexcharts-xcrosshairs") } }, { key: "getElGrid", value: function () { return this.w.globals.dom.baseEl.querySelector(".apexcharts-grid") } }, { key: "drawTooltip", value: function (e) { var t = this.w; this.xyRatios = e, this.isXAxisTooltipEnabled = t.config.xaxis.tooltip.enabled && t.globals.axisCharts, this.yaxisTooltips = t.config.yaxis.map(function (r, n) { return !!(r.show && r.tooltip.enabled && t.globals.axisCharts) }), this.allTooltipSeriesGroups = [], t.globals.axisCharts || (this.showTooltipTitle = !1); var i = document.createElement("div"); if (i.classList.add("apexcharts-tooltip"), t.config.tooltip.cssClass && i.classList.add(t.config.tooltip.cssClass), i.classList.add("apexcharts-theme-".concat(this.tConfig.theme)), t.globals.dom.elWrap.appendChild(i), t.globals.axisCharts) { this.axesTooltip.drawXaxisTooltip(), this.axesTooltip.drawYaxisTooltip(), this.axesTooltip.setXCrosshairWidth(), this.axesTooltip.handleYCrosshair(); var a = new Me(this.ctx); this.xAxisTicksPositions = a.getXAxisTicksPositions() } if (!t.globals.comboCharts && !this.tConfig.intersect && t.config.chart.type !== "rangeBar" || this.tConfig.shared || (this.showOnIntersect = !0), t.config.markers.size !== 0 && t.globals.markers.largestSize !== 0 || this.marker.drawDynamicPoints(this), t.globals.collapsedSeries.length !== t.globals.series.length) { this.dataPointsDividedHeight = t.globals.gridHeight / t.globals.dataPoints, this.dataPointsDividedWidth = t.globals.gridWidth / t.globals.dataPoints, this.showTooltipTitle && (this.tooltipTitle = document.createElement("div"), this.tooltipTitle.classList.add("apexcharts-tooltip-title"), this.tooltipTitle.style.fontFamily = this.tConfig.style.fontFamily || t.config.chart.fontFamily, this.tooltipTitle.style.fontSize = this.tConfig.style.fontSize, i.appendChild(this.tooltipTitle)); var s = t.globals.series.length; (t.globals.xyCharts || t.globals.comboCharts) && this.tConfig.shared && (s = this.showOnIntersect ? 1 : t.globals.series.length), this.legendLabels = t.globals.dom.baseEl.querySelectorAll(".apexcharts-legend-text"), this.ttItems = this.createTTElements(s), this.addSVGEvents() } } }, { key: "createTTElements", value: function (e) { for (var t = this, i = this.w, a = [], s = this.getElTooltip(), r = function (o) { var h = document.createElement("div"); h.classList.add("apexcharts-tooltip-series-group", "apexcharts-tooltip-series-group-".concat(o)), h.style.order = i.config.tooltip.inverseOrder ? e - o : o + 1; var c = document.createElement("span"); c.classList.add("apexcharts-tooltip-marker"), c.style.backgroundColor = i.globals.colors[o], h.appendChild(c); var d = document.createElement("div"); d.classList.add("apexcharts-tooltip-text"), d.style.fontFamily = t.tConfig.style.fontFamily || i.config.chart.fontFamily, d.style.fontSize = t.tConfig.style.fontSize, ["y", "goals", "z"].forEach(function (g) { var f = document.createElement("div"); f.classList.add("apexcharts-tooltip-".concat(g, "-group")); var x = document.createElement("span"); x.classList.add("apexcharts-tooltip-text-".concat(g, "-label")), f.appendChild(x); var b = document.createElement("span"); b.classList.add("apexcharts-tooltip-text-".concat(g, "-value")), f.appendChild(b), d.appendChild(f) }), h.appendChild(d), s.appendChild(h), a.push(h) }, n = 0; n < e; n++)r(n); return a } }, { key: "addSVGEvents", value: function () { var e = this.w, t = e.config.chart.type, i = this.getElTooltip(), a = !(t !== "bar" && t !== "candlestick" && t !== "boxPlot" && t !== "rangeBar"), s = t === "area" || t === "line" || t === "scatter" || t === "bubble" || t === "radar", r = e.globals.dom.Paper.node, n = this.getElGrid(); n && (this.seriesBound = n.getBoundingClientRect()); var o, h = [], c = [], d = { hoverArea: r, elGrid: n, tooltipEl: i, tooltipY: h, tooltipX: c, ttItems: this.ttItems }; if (e.globals.axisCharts && (s ? o = e.globals.dom.baseEl.querySelectorAll(".apexcharts-series[data\\:longestSeries='true'] .apexcharts-marker") : a ? o = e.globals.dom.baseEl.querySelectorAll(".apexcharts-series .apexcharts-bar-area, .apexcharts-series .apexcharts-candlestick-area, .apexcharts-series .apexcharts-boxPlot-area, .apexcharts-series .apexcharts-rangebar-area") : t !== "heatmap" && t !== "treemap" || (o = e.globals.dom.baseEl.querySelectorAll(".apexcharts-series .apexcharts-heatmap, .apexcharts-series .apexcharts-treemap")), o && o.length)) for (var g = 0; g < o.length; g++)h.push(o[g].getAttribute("cy")), c.push(o[g].getAttribute("cx")); if (e.globals.xyCharts && !this.showOnIntersect || e.globals.comboCharts && !this.showOnIntersect || a && this.tooltipUtil.hasBars() && this.tConfig.shared) this.addPathsEventListeners([r], d); else if (a && !e.globals.comboCharts || s && this.showOnIntersect) this.addDatapointEventsListeners(d); else if (!e.globals.axisCharts || t === "heatmap" || t === "treemap") { var f = e.globals.dom.baseEl.querySelectorAll(".apexcharts-series"); this.addPathsEventListeners(f, d) } if (this.showOnIntersect) { var x = e.globals.dom.baseEl.querySelectorAll(".apexcharts-line-series .apexcharts-marker, .apexcharts-area-series .apexcharts-marker"); x.length > 0 && this.addPathsEventListeners(x, d), this.tooltipUtil.hasBars() && !this.tConfig.shared && this.addDatapointEventsListeners(d) } } }, { key: "drawFixedTooltipRect", value: function () { var e = this.w, t = this.getElTooltip(), i = t.getBoundingClientRect(), a = i.width + 10, s = i.height + 10, r = this.tConfig.fixed.offsetX, n = this.tConfig.fixed.offsetY, o = this.tConfig.fixed.position.toLowerCase(); return o.indexOf("right") > -1 && (r = r + e.globals.svgWidth - a + 10), o.indexOf("bottom") > -1 && (n = n + e.globals.svgHeight - s - 10), t.style.left = r + "px", t.style.top = n + "px", { x: r, y: n, ttWidth: a, ttHeight: s } } }, { key: "addDatapointEventsListeners", value: function (e) { var t = this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-series-markers .apexcharts-marker, .apexcharts-bar-area, .apexcharts-candlestick-area, .apexcharts-boxPlot-area, .apexcharts-rangebar-area"); this.addPathsEventListeners(t, e) } }, { key: "addPathsEventListeners", value: function (e, t) { for (var i = this, a = function (r) { var n = { paths: e[r], tooltipEl: t.tooltipEl, tooltipY: t.tooltipY, tooltipX: t.tooltipX, elGrid: t.elGrid, hoverArea: t.hoverArea, ttItems: t.ttItems };["mousemove", "mouseup", "touchmove", "mouseout", "touchend"].map(function (o) { return e[r].addEventListener(o, i.onSeriesHover.bind(i, n), { capture: !1, passive: !0 }) }) }, s = 0; s < e.length; s++)a(s) } }, { key: "onSeriesHover", value: function (e, t) { var i = this, a = Date.now() - this.lastHoverTime; a >= 100 ? this.seriesHover(e, t) : (clearTimeout(this.seriesHoverTimeout), this.seriesHoverTimeout = setTimeout(function () { i.seriesHover(e, t) }, 100 - a)) } }, { key: "seriesHover", value: function (e, t) { var i = this; this.lastHoverTime = Date.now(); var a = [], s = this.w; s.config.chart.group && (a = this.ctx.getGroupedCharts()), s.globals.axisCharts && (s.globals.minX === -1 / 0 && s.globals.maxX === 1 / 0 || s.globals.dataPoints === 0) || (a.length ? a.forEach(function (r) { var n = i.getElTooltip(r), o = { paths: e.paths, tooltipEl: n, tooltipY: e.tooltipY, tooltipX: e.tooltipX, elGrid: e.elGrid, hoverArea: e.hoverArea, ttItems: r.w.globals.tooltip.ttItems }; r.w.globals.minX === i.w.globals.minX && r.w.globals.maxX === i.w.globals.maxX && r.w.globals.tooltip.seriesHoverByContext({ chartCtx: r, ttCtx: r.w.globals.tooltip, opt: o, e: t }) }) : this.seriesHoverByContext({ chartCtx: this.ctx, ttCtx: this.w.globals.tooltip, opt: e, e: t })) } }, { key: "seriesHoverByContext", value: function (e) { var t = e.chartCtx, i = e.ttCtx, a = e.opt, s = e.e, r = t.w, n = this.getElTooltip(t); n && (i.tooltipRect = { x: 0, y: 0, ttWidth: n.getBoundingClientRect().width, ttHeight: n.getBoundingClientRect().height }, i.e = s, i.tooltipUtil.hasBars() && !r.globals.comboCharts && !i.isBarShared && this.tConfig.onDatasetHover.highlightDataSeries && new re(t).toggleSeriesOnHover(s, s.target.parentNode), i.fixedTooltip && i.drawFixedTooltipRect(), r.globals.axisCharts ? i.axisChartsTooltips({ e: s, opt: a, tooltipRect: i.tooltipRect }) : i.nonAxisChartsTooltips({ e: s, opt: a, tooltipRect: i.tooltipRect })) } }, { key: "axisChartsTooltips", value: function (e) { var t, i, a = e.e, s = e.opt, r = this.w, n = s.elGrid.getBoundingClientRect(), o = a.type === "touchmove" ? a.touches[0].clientX : a.clientX, h = a.type === "touchmove" ? a.touches[0].clientY : a.clientY; if (this.clientY = h, this.clientX = o, r.globals.capturedSeriesIndex = -1, r.globals.capturedDataPointIndex = -1, h < n.top || h > n.top + n.height) this.handleMouseOut(s); else { if (Array.isArray(this.tConfig.enabledOnSeries) && !r.config.tooltip.shared) { var c = parseInt(s.paths.getAttribute("index"), 10); if (this.tConfig.enabledOnSeries.indexOf(c) < 0) return void this.handleMouseOut(s) } var d = this.getElTooltip(), g = this.getElXCrosshairs(), f = []; r.config.chart.group && (f = this.ctx.getSyncedCharts()); var x = r.globals.xyCharts || r.config.chart.type === "bar" && !r.globals.isBarHorizontal && this.tooltipUtil.hasBars() && this.tConfig.shared || r.globals.comboCharts && this.tooltipUtil.hasBars(); if (a.type === "mousemove" || a.type === "touchmove" || a.type === "mouseup") { if (r.globals.collapsedSeries.length + r.globals.ancillaryCollapsedSeries.length === r.globals.series.length) return; g !== null && g.classList.add("apexcharts-active"); var b = this.yaxisTooltips.filter(function (w) { return w === !0 }); if (this.ycrosshairs !== null && b.length && this.ycrosshairs.classList.add("apexcharts-active"), x && !this.showOnIntersect || f.length > 1) this.handleStickyTooltip(a, o, h, s); else if (r.config.chart.type === "heatmap" || r.config.chart.type === "treemap") { var v = this.intersect.handleHeatTreeTooltip({ e: a, opt: s, x: t, y: i, type: r.config.chart.type }); t = v.x, i = v.y, d.style.left = t + "px", d.style.top = i + "px" } else this.tooltipUtil.hasBars() && this.intersect.handleBarTooltip({ e: a, opt: s }), this.tooltipUtil.hasMarkers() && this.intersect.handleMarkerTooltip({ e: a, opt: s, x: t, y: i }); if (this.yaxisTooltips.length) for (var y = 0; y < r.config.yaxis.length; y++)this.axesTooltip.drawYaxisTooltipText(y, h, this.xyRatios); r.globals.dom.baseEl.classList.add("apexcharts-tooltip-active"), s.tooltipEl.classList.add("apexcharts-active") } else a.type !== "mouseout" && a.type !== "touchend" || this.handleMouseOut(s) } } }, { key: "nonAxisChartsTooltips", value: function (e) { var t = e.e, i = e.opt, a = e.tooltipRect, s = this.w, r = i.paths.getAttribute("rel"), n = this.getElTooltip(), o = s.globals.dom.elWrap.getBoundingClientRect(); if (t.type === "mousemove" || t.type === "touchmove") { s.globals.dom.baseEl.classList.add("apexcharts-tooltip-active"), n.classList.add("apexcharts-active"), this.tooltipLabels.drawSeriesTexts({ ttItems: i.ttItems, i: parseInt(r, 10) - 1, shared: !1 }); var h = s.globals.clientX - o.left - a.ttWidth / 2, c = s.globals.clientY - o.top - a.ttHeight - 10; if (n.style.left = h + "px", n.style.top = c + "px", s.config.legend.tooltipHoverFormatter) { var d = r - 1, g = (0, s.config.legend.tooltipHoverFormatter)(this.legendLabels[d].getAttribute("data:default-text"), { seriesIndex: d, dataPointIndex: d, w: s }); this.legendLabels[d].innerHTML = g } } else t.type !== "mouseout" && t.type !== "touchend" || (n.classList.remove("apexcharts-active"), s.globals.dom.baseEl.classList.remove("apexcharts-tooltip-active"), s.config.legend.tooltipHoverFormatter && this.legendLabels.forEach(function (f) { var x = f.getAttribute("data:default-text"); f.innerHTML = decodeURIComponent(x) })) } }, { key: "handleStickyTooltip", value: function (e, t, i, a) { var s = this.w, r = this.tooltipUtil.getNearestValues({ context: this, hoverArea: a.hoverArea, elGrid: a.elGrid, clientX: t, clientY: i }), n = r.j, o = r.capturedSeries; s.globals.collapsedSeriesIndices.includes(o) && (o = null); var h = a.elGrid.getBoundingClientRect(); if (r.hoverX < 0 || r.hoverX > h.width) this.handleMouseOut(a); else if (o !== null) this.handleStickyCapturedSeries(e, o, a, n); else if (this.tooltipUtil.isXoverlap(n) || s.globals.isBarHorizontal) { var c = s.globals.series.findIndex(function (d, g) { return !s.globals.collapsedSeriesIndices.includes(g) }); this.create(e, this, c, n, a.ttItems) } } }, { key: "handleStickyCapturedSeries", value: function (e, t, i, a) { var s = this.w; if (!this.tConfig.shared && s.globals.series[t][a] === null) return void this.handleMouseOut(i); if (s.globals.series[t][a] !== void 0) this.tConfig.shared && this.tooltipUtil.isXoverlap(a) && this.tooltipUtil.isInitialSeriesSameLen() ? this.create(e, this, t, a, i.ttItems) : this.create(e, this, t, a, i.ttItems, !1); else if (this.tooltipUtil.isXoverlap(a)) { var r = s.globals.series.findIndex(function (n, o) { return !s.globals.collapsedSeriesIndices.includes(o) }); this.create(e, this, r, a, i.ttItems) } } }, { key: "deactivateHoverFilter", value: function () { for (var e = this.w, t = new X(this.ctx), i = e.globals.dom.Paper.select(".apexcharts-bar-area"), a = 0; a < i.length; a++)t.pathMouseLeave(i[a]) } }, { key: "handleMouseOut", value: function (e) { var t = this.w, i = this.getElXCrosshairs(); if (t.globals.dom.baseEl.classList.remove("apexcharts-tooltip-active"), e.tooltipEl.classList.remove("apexcharts-active"), this.deactivateHoverFilter(), t.config.chart.type !== "bubble" && this.marker.resetPointsSize(), i !== null && i.classList.remove("apexcharts-active"), this.ycrosshairs !== null && this.ycrosshairs.classList.remove("apexcharts-active"), this.isXAxisTooltipEnabled && this.xaxisTooltip.classList.remove("apexcharts-active"), this.yaxisTooltips.length) { this.yaxisTTEls === null && (this.yaxisTTEls = t.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxistooltip")); for (var a = 0; a < this.yaxisTTEls.length; a++)this.yaxisTTEls[a].classList.remove("apexcharts-active") } t.config.legend.tooltipHoverFormatter && this.legendLabels.forEach(function (s) { var r = s.getAttribute("data:default-text"); s.innerHTML = decodeURIComponent(r) }) } }, { key: "markerClick", value: function (e, t, i) { var a = this.w; typeof a.config.chart.events.markerClick == "function" && a.config.chart.events.markerClick(e, this.ctx, { seriesIndex: t, dataPointIndex: i, w: a }), this.ctx.events.fireEvent("markerClick", [e, this.ctx, { seriesIndex: t, dataPointIndex: i, w: a }]) } }, { key: "create", value: function (e, t, i, a, s) { var r, n, o, h, c, d, g, f, x, b, v, y, w, l, u, m, A = arguments.length > 5 && arguments[5] !== void 0 ? arguments[5] : null, k = this.w, S = t; e.type === "mouseup" && this.markerClick(e, i, a), A === null && (A = this.tConfig.shared); var L = this.tooltipUtil.hasMarkers(i), C = this.tooltipUtil.getElBars(); if (k.config.legend.tooltipHoverFormatter) { var I = k.config.legend.tooltipHoverFormatter, z = Array.from(this.legendLabels); z.forEach(function (q) { var Z = q.getAttribute("data:default-text"); q.innerHTML = decodeURIComponent(Z) }); for (var M = 0; M < z.length; M++) { var T = z[M], E = parseInt(T.getAttribute("i"), 10), O = decodeURIComponent(T.getAttribute("data:default-text")), D = I(O, { seriesIndex: A ? E : i, dataPointIndex: a, w: k }); if (A) T.innerHTML = k.globals.collapsedSeriesIndices.indexOf(E) < 0 ? D : O; else if (T.innerHTML = E === i ? D : O, i === E) break } } var H = Y(Y({ ttItems: s, i, j: a }, ((r = k.globals.seriesRange) === null || r === void 0 || (n = r[i]) === null || n === void 0 || (o = n[a]) === null || o === void 0 || (h = o.y[0]) === null || h === void 0 ? void 0 : h.y1) !== void 0 && { y1: (c = k.globals.seriesRange) === null || c === void 0 || (d = c[i]) === null || d === void 0 || (g = d[a]) === null || g === void 0 || (f = g.y[0]) === null || f === void 0 ? void 0 : f.y1 }), ((x = k.globals.seriesRange) === null || x === void 0 || (b = x[i]) === null || b === void 0 || (v = b[a]) === null || v === void 0 || (y = v.y[0]) === null || y === void 0 ? void 0 : y.y2) !== void 0 && { y2: (w = k.globals.seriesRange) === null || w === void 0 || (l = w[i]) === null || l === void 0 || (u = l[a]) === null || u === void 0 || (m = u.y[0]) === null || m === void 0 ? void 0 : m.y2 }); if (A) { if (S.tooltipLabels.drawSeriesTexts(Y(Y({}, H), {}, { shared: !this.showOnIntersect && this.tConfig.shared })), L) k.globals.markers.largestSize > 0 ? S.marker.enlargePoints(a) : S.tooltipPosition.moveDynamicPointsOnHover(a); else if (this.tooltipUtil.hasBars() && (this.barSeriesHeight = this.tooltipUtil.getBarsHeight(C), this.barSeriesHeight > 0)) { var W = new X(this.ctx), N = k.globals.dom.Paper.select(".apexcharts-bar-area[j='".concat(a, "']")); this.deactivateHoverFilter(), this.tooltipPosition.moveStickyTooltipOverBars(a, i); for (var B = 0; B < N.length; B++)W.pathMouseEnter(N[B]) } } else S.tooltipLabels.drawSeriesTexts(Y({ shared: !1 }, H)), this.tooltipUtil.hasBars() && S.tooltipPosition.moveStickyTooltipOverBars(a, i), L && S.tooltipPosition.moveMarkers(i, a) } }]), p }(), Qi = function () { function p(e) { F(this, p), this.w = e.w, this.barCtx = e, this.totalFormatter = this.w.config.plotOptions.bar.dataLabels.total.formatter, this.totalFormatter || (this.totalFormatter = this.w.config.dataLabels.formatter) } return R(p, [{ key: "handleBarDataLabels", value: function (e) { var t, i, a = e.x, s = e.y, r = e.y1, n = e.y2, o = e.i, h = e.j, c = e.realIndex, d = e.columnGroupIndex, g = e.series, f = e.barHeight, x = e.barWidth, b = e.barXPosition, v = e.barYPosition, y = e.visibleSeries, w = e.renderedPath, l = this.w, u = new X(this.barCtx.ctx), m = Array.isArray(this.barCtx.strokeWidth) ? this.barCtx.strokeWidth[c] : this.barCtx.strokeWidth; l.globals.isXNumeric && !l.globals.isBarHorizontal ? (t = a + parseFloat(x * (y + 1)), i = s + parseFloat(f * (y + 1)) - m) : (t = a + parseFloat(x * y), i = s + parseFloat(f * y)); var A, k = null, S = a, L = s, C = {}, I = l.config.dataLabels, z = this.barCtx.barOptions.dataLabels, M = this.barCtx.barOptions.dataLabels.total; v !== void 0 && this.barCtx.isRangeBar && (i = v, L = v), b !== void 0 && this.barCtx.isVerticalGroupedRangeBar && (t = b, S = b); var T = I.offsetX, E = I.offsetY, O = { width: 0, height: 0 }; if (l.config.dataLabels.enabled) { var D = l.globals.series[o][h]; O = u.getTextRects(l.config.dataLabels.formatter ? l.config.dataLabels.formatter(D, Y(Y({}, l), {}, { seriesIndex: o, dataPointIndex: h, w: l })) : l.globals.yLabelFormatters[0](D), parseFloat(I.style.fontSize)) } var H = { x: a, y: s, i: o, j: h, realIndex: c, columnGroupIndex: d, renderedPath: w, bcx: t, bcy: i, barHeight: f, barWidth: x, textRects: O, strokeWidth: m, dataLabelsX: S, dataLabelsY: L, dataLabelsConfig: I, barDataLabelsConfig: z, barTotalDataLabelsConfig: M, offX: T, offY: E }; return C = this.barCtx.isHorizontal ? this.calculateBarsDataLabelsPosition(H) : this.calculateColumnsDataLabelsPosition(H), w.attr({ cy: C.bcy, cx: C.bcx, j: h, val: l.globals.series[o][h], barHeight: f, barWidth: x }), A = this.drawCalculatedDataLabels({ x: C.dataLabelsX, y: C.dataLabelsY, val: this.barCtx.isRangeBar ? [r, n] : l.config.chart.stackType === "100%" ? g[c][h] : l.globals.series[c][h], i: c, j: h, barWidth: x, barHeight: f, textRects: O, dataLabelsConfig: I }), l.config.chart.stacked && M.enabled && (k = this.drawTotalDataLabels({ x: C.totalDataLabelsX, y: C.totalDataLabelsY, barWidth: x, barHeight: f, realIndex: c, textAnchor: C.totalDataLabelsAnchor, val: this.getStackedTotalDataLabel({ realIndex: c, j: h }), dataLabelsConfig: I, barTotalDataLabelsConfig: M })), { dataLabels: A, totalDataLabels: k } } }, { key: "getStackedTotalDataLabel", value: function (e) { var t = e.realIndex, i = e.j, a = this.w, s = this.barCtx.stackedSeriesTotals[i]; return this.totalFormatter && (s = this.totalFormatter(s, Y(Y({}, a), {}, { seriesIndex: t, dataPointIndex: i, w: a }))), s } }, { key: "calculateColumnsDataLabelsPosition", value: function (e) { var t = this.w, i = e.i, a = e.j, s = e.realIndex; e.columnGroupIndex; var r, n, o = e.y, h = e.bcx, c = e.barWidth, d = e.barHeight, g = e.textRects, f = e.dataLabelsX, x = e.dataLabelsY, b = e.dataLabelsConfig, v = e.barDataLabelsConfig, y = e.barTotalDataLabelsConfig, w = e.strokeWidth, l = e.offX, u = e.offY, m = h; d = Math.abs(d); var A = t.config.plotOptions.bar.dataLabels.orientation === "vertical", k = this.barCtx.barHelpers.getZeroValueEncounters({ i, j: a }).zeroEncounters; h -= w / 2; var S = t.globals.gridWidth / t.globals.dataPoints; this.barCtx.isVerticalGroupedRangeBar ? f += c / 2 : (f = t.globals.isXNumeric ? h - c / 2 + l : h - S + c / 2 + l, k > 0 && t.config.plotOptions.bar.hideZeroBarsWhenGrouped && (f -= c * k)), A && (f = f + g.height / 2 - w / 2 - 2); var L = t.globals.series[i][a] < 0, C = o; switch (this.barCtx.isReversed && (C = o + (L ? d : -d)), v.position) { case "center": x = A ? L ? C - d / 2 + u : C + d / 2 - u : L ? C - d / 2 + g.height / 2 + u : C + d / 2 + g.height / 2 - u; break; case "bottom": x = A ? L ? C - d + u : C + d - u : L ? C - d + g.height + w + u : C + d - g.height / 2 + w - u; break; case "top": x = A ? L ? C + u : C - u : L ? C - g.height / 2 - u : C + g.height + u }if (this.barCtx.lastActiveBarSerieIndex === s && y.enabled) { var I = new X(this.barCtx.ctx).getTextRects(this.getStackedTotalDataLabel({ realIndex: s, j: a }), b.fontSize); r = L ? C - I.height / 2 - u - y.offsetY + 18 : C + I.height + u + y.offsetY - 18; var z = S; n = m + (t.globals.isXNumeric ? -c * t.globals.barGroups.length / 2 : t.globals.barGroups.length * c / 2 - (t.globals.barGroups.length - 1) * c - z) + y.offsetX } return t.config.chart.stacked || (x < 0 ? x = 0 + w : x + g.height / 3 > t.globals.gridHeight && (x = t.globals.gridHeight - w)), { bcx: h, bcy: o, dataLabelsX: f, dataLabelsY: x, totalDataLabelsX: n, totalDataLabelsY: r, totalDataLabelsAnchor: "middle" } } }, { key: "calculateBarsDataLabelsPosition", value: function (e) { var t = this.w, i = e.x, a = e.i, s = e.j, r = e.realIndex, n = e.bcy, o = e.barHeight, h = e.barWidth, c = e.textRects, d = e.dataLabelsX, g = e.strokeWidth, f = e.dataLabelsConfig, x = e.barDataLabelsConfig, b = e.barTotalDataLabelsConfig, v = e.offX, y = e.offY, w = t.globals.gridHeight / t.globals.dataPoints; h = Math.abs(h); var l, u, m = n - (this.barCtx.isRangeBar ? 0 : w) + o / 2 + c.height / 2 + y - 3, A = "start", k = t.globals.series[a][s] < 0, S = i; switch (this.barCtx.isReversed && (S = i + (k ? -h : h), A = k ? "start" : "end"), x.position) { case "center": d = k ? S + h / 2 - v : Math.max(c.width / 2, S - h / 2) + v; break; case "bottom": d = k ? S + h - g - v : S - h + g + v; break; case "top": d = k ? S - g - v : S - g + v }if (this.barCtx.lastActiveBarSerieIndex === r && b.enabled) { var L = new X(this.barCtx.ctx).getTextRects(this.getStackedTotalDataLabel({ realIndex: r, j: s }), f.fontSize); k ? (l = S - g - v - b.offsetX, A = "end") : l = S + v + b.offsetX + (this.barCtx.isReversed ? -(h + g) : g), u = m - c.height / 2 + L.height / 2 + b.offsetY + g } return t.config.chart.stacked || (f.textAnchor === "start" ? d - c.width < 0 ? d = k ? c.width + g : g : d + c.width > t.globals.gridWidth && (d = k ? t.globals.gridWidth - g : t.globals.gridWidth - c.width - g) : f.textAnchor === "middle" ? d - c.width / 2 < 0 ? d = c.width / 2 + g : d + c.width / 2 > t.globals.gridWidth && (d = t.globals.gridWidth - c.width / 2 - g) : f.textAnchor === "end" && (d < 1 ? d = c.width + g : d + 1 > t.globals.gridWidth && (d = t.globals.gridWidth - c.width - g))), { bcx: i, bcy: n, dataLabelsX: d, dataLabelsY: m, totalDataLabelsX: l, totalDataLabelsY: u, totalDataLabelsAnchor: A } } }, { key: "drawCalculatedDataLabels", value: function (e) { var t = e.x, i = e.y, a = e.val, s = e.i, r = e.j, n = e.textRects, o = e.barHeight, h = e.barWidth, c = e.dataLabelsConfig, d = this.w, g = "rotate(0)"; d.config.plotOptions.bar.dataLabels.orientation === "vertical" && (g = "rotate(-90, ".concat(t, ", ").concat(i, ")")); var f = new be(this.barCtx.ctx), x = new X(this.barCtx.ctx), b = c.formatter, v = null, y = d.globals.collapsedSeriesIndices.indexOf(s) > -1; if (c.enabled && !y) { v = x.group({ class: "apexcharts-data-labels", transform: g }); var w = ""; a !== void 0 && (w = b(a, Y(Y({}, d), {}, { seriesIndex: s, dataPointIndex: r, w: d }))), !a && d.config.plotOptions.bar.hideZeroBarsWhenGrouped && (w = ""); var l = d.globals.series[s][r] < 0, u = d.config.plotOptions.bar.dataLabels.position; d.config.plotOptions.bar.dataLabels.orientation === "vertical" && (u === "top" && (c.textAnchor = l ? "end" : "start"), u === "center" && (c.textAnchor = "middle"), u === "bottom" && (c.textAnchor = l ? "end" : "start")), this.barCtx.isRangeBar && this.barCtx.barOptions.dataLabels.hideOverflowingLabels && h < x.getTextRects(w, parseFloat(c.style.fontSize)).width && (w = ""), d.config.chart.stacked && this.barCtx.barOptions.dataLabels.hideOverflowingLabels && (this.barCtx.isHorizontal ? n.width / 1.6 > Math.abs(h) && (w = "") : n.height / 1.6 > Math.abs(o) && (w = "")); var m = Y({}, c); this.barCtx.isHorizontal && a < 0 && (c.textAnchor === "start" ? m.textAnchor = "end" : c.textAnchor === "end" && (m.textAnchor = "start")), f.plotDataLabelsText({ x: t, y: i, text: w, i: s, j: r, parent: v, dataLabelsConfig: m, alwaysDrawDataLabel: !0, offsetCorrection: !0 }) } return v } }, { key: "drawTotalDataLabels", value: function (e) { var t = e.x, i = e.y, a = e.val, s = e.realIndex, r = e.textAnchor, n = e.barTotalDataLabelsConfig; this.w; var o, h = new X(this.barCtx.ctx); return n.enabled && t !== void 0 && i !== void 0 && this.barCtx.lastActiveBarSerieIndex === s && (o = h.drawText({ x: t, y: i, foreColor: n.style.color, text: a, textAnchor: r, fontFamily: n.style.fontFamily, fontSize: n.style.fontSize, fontWeight: n.style.fontWeight })), o } }]), p }(), ea = function () { function p(e) { F(this, p), this.w = e.w, this.barCtx = e } return R(p, [{ key: "initVariables", value: function (e) { var t = this.w; this.barCtx.series = e, this.barCtx.totalItems = 0, this.barCtx.seriesLen = 0, this.barCtx.visibleI = -1, this.barCtx.visibleItems = 1; for (var i = 0; i < e.length; i++)if (e[i].length > 0 && (this.barCtx.seriesLen = this.barCtx.seriesLen + 1, this.barCtx.totalItems += e[i].length), t.globals.isXNumeric) for (var a = 0; a < e[i].length; a++)t.globals.seriesX[i][a] > t.globals.minX && t.globals.seriesX[i][a] < t.globals.maxX && this.barCtx.visibleItems++; else this.barCtx.visibleItems = t.globals.dataPoints; this.barCtx.seriesLen === 0 && (this.barCtx.seriesLen = 1), this.barCtx.zeroSerieses = [], t.globals.comboCharts || this.checkZeroSeries({ series: e }) } }, { key: "initialPositions", value: function () { var e, t, i, a, s, r, n, o, h = this.w, c = h.globals.dataPoints; this.barCtx.isRangeBar && (c = h.globals.labels.length); var d = this.barCtx.seriesLen; if (h.config.plotOptions.bar.rangeBarGroupRows && (d = 1), this.barCtx.isHorizontal) s = (i = h.globals.gridHeight / c) / d, h.globals.isXNumeric && (s = (i = h.globals.gridHeight / this.barCtx.totalItems) / this.barCtx.seriesLen), s = s * parseInt(this.barCtx.barOptions.barHeight, 10) / 100, String(this.barCtx.barOptions.barHeight).indexOf("%") === -1 && (s = parseInt(this.barCtx.barOptions.barHeight, 10)), o = this.barCtx.baseLineInvertedY + h.globals.padHorizontal + (this.barCtx.isReversed ? h.globals.gridWidth : 0) - (this.barCtx.isReversed ? 2 * this.barCtx.baseLineInvertedY : 0), this.barCtx.isFunnel && (o = h.globals.gridWidth / 2), t = (i - s * this.barCtx.seriesLen) / 2; else { if (a = h.globals.gridWidth / this.barCtx.visibleItems, h.config.xaxis.convertedCatToNumeric && (a = h.globals.gridWidth / h.globals.dataPoints), r = a / d * parseInt(this.barCtx.barOptions.columnWidth, 10) / 100, h.globals.isXNumeric) { var g = this.barCtx.xRatio; h.globals.minXDiff && h.globals.minXDiff !== .5 && h.globals.minXDiff / g > 0 && (a = h.globals.minXDiff / g), (r = a / d * parseInt(this.barCtx.barOptions.columnWidth, 10) / 100) < 1 && (r = 1) } String(this.barCtx.barOptions.columnWidth).indexOf("%") === -1 && (r = parseInt(this.barCtx.barOptions.columnWidth, 10)), n = h.globals.gridHeight - this.barCtx.baseLineY[this.barCtx.translationsIndex] - (this.barCtx.isReversed ? h.globals.gridHeight : 0) + (this.barCtx.isReversed ? 2 * this.barCtx.baseLineY[this.barCtx.translationsIndex] : 0), e = h.globals.padHorizontal + (a - r * this.barCtx.seriesLen) / 2 } return h.globals.barHeight = s, h.globals.barWidth = r, { x: e, y: t, yDivision: i, xDivision: a, barHeight: s, barWidth: r, zeroH: n, zeroW: o } } }, { key: "initializeStackedPrevVars", value: function (e) { e.w.globals.seriesGroups.forEach(function (t) { e[t] || (e[t] = {}), e[t].prevY = [], e[t].prevX = [], e[t].prevYF = [], e[t].prevXF = [], e[t].prevYVal = [], e[t].prevXVal = [] }) } }, { key: "initializeStackedXYVars", value: function (e) { e.w.globals.seriesGroups.forEach(function (t) { e[t] || (e[t] = {}), e[t].xArrj = [], e[t].xArrjF = [], e[t].xArrjVal = [], e[t].yArrj = [], e[t].yArrjF = [], e[t].yArrjVal = [] }) } }, { key: "getPathFillColor", value: function (e, t, i, a) { var s, r, n, o, h, c = this.w, d = this.barCtx.ctx.fill, g = null, f = this.barCtx.barOptions.distributed ? i : t; return this.barCtx.barOptions.colors.ranges.length > 0 && this.barCtx.barOptions.colors.ranges.map(function (x) { e[t][i] >= x.from && e[t][i] <= x.to && (g = x.color) }), (s = c.config.series[t].data[i]) !== null && s !== void 0 && s.fillColor && (g = c.config.series[t].data[i].fillColor), d.fillPath({ seriesNumber: this.barCtx.barOptions.distributed ? f : a, dataPointIndex: i, color: g, value: e[t][i], fillConfig: (r = c.config.series[t].data[i]) === null || r === void 0 ? void 0 : r.fill, fillType: (n = c.config.series[t].data[i]) !== null && n !== void 0 && (o = n.fill) !== null && o !== void 0 && o.type ? (h = c.config.series[t].data[i]) === null || h === void 0 ? void 0 : h.fill.type : Array.isArray(c.config.fill.type) ? c.config.fill.type[a] : c.config.fill.type }) } }, { key: "getStrokeWidth", value: function (e, t, i) { var a = 0, s = this.w; return this.barCtx.series[e][t] === void 0 || this.barCtx.series[e][t] === null ? this.barCtx.isNullValue = !0 : this.barCtx.isNullValue = !1, s.config.stroke.show && (this.barCtx.isNullValue || (a = Array.isArray(this.barCtx.strokeWidth) ? this.barCtx.strokeWidth[i] : this.barCtx.strokeWidth)), a } }, { key: "shouldApplyRadius", value: function (e) { var t = this.w, i = !1; return t.config.plotOptions.bar.borderRadius > 0 && (t.config.chart.stacked && t.config.plotOptions.bar.borderRadiusWhenStacked === "last" ? this.barCtx.lastActiveBarSerieIndex === e && (i = !0) : i = !0), i } }, { key: "barBackground", value: function (e) { var t = e.j, i = e.i, a = e.x1, s = e.x2, r = e.y1, n = e.y2, o = e.elSeries, h = this.w, c = new X(this.barCtx.ctx), d = new re(this.barCtx.ctx).getActiveConfigSeriesIndex(); if (this.barCtx.barOptions.colors.backgroundBarColors.length > 0 && d === i) { t >= this.barCtx.barOptions.colors.backgroundBarColors.length && (t %= this.barCtx.barOptions.colors.backgroundBarColors.length); var g = this.barCtx.barOptions.colors.backgroundBarColors[t], f = c.drawRect(a !== void 0 ? a : 0, r !== void 0 ? r : 0, s !== void 0 ? s : h.globals.gridWidth, n !== void 0 ? n : h.globals.gridHeight, this.barCtx.barOptions.colors.backgroundBarRadius, g, this.barCtx.barOptions.colors.backgroundBarOpacity); o.add(f), f.node.classList.add("apexcharts-backgroundBar") } } }, { key: "getColumnPaths", value: function (e) { var t, i = e.barWidth, a = e.barXPosition, s = e.y1, r = e.y2, n = e.strokeWidth, o = e.seriesGroup, h = e.realIndex, c = e.i, d = e.j, g = e.w, f = new X(this.barCtx.ctx); (n = Array.isArray(n) ? n[h] : n) || (n = 0); var x = i, b = a; (t = g.config.series[h].data[d]) !== null && t !== void 0 && t.columnWidthOffset && (b = a - g.config.series[h].data[d].columnWidthOffset / 2, x = i + g.config.series[h].data[d].columnWidthOffset); var v = n / 2, y = b + v, w = b + x - v; s += .001 - v, r += .001 + v; var l = f.move(y, s), u = f.move(y, s), m = f.line(w, s); if (g.globals.previousPaths.length > 0 && (u = this.barCtx.getPreviousPath(h, d, !1)), l = l + f.line(y, r) + f.line(w, r) + f.line(w, s) + (g.config.plotOptions.bar.borderRadiusApplication === "around" ? " Z" : " z"), u = u + f.line(y, s) + m + m + m + m + m + f.line(y, s) + (g.config.plotOptions.bar.borderRadiusApplication === "around" ? " Z" : " z"), this.shouldApplyRadius(h) && (l = f.roundPathCorners(l, g.config.plotOptions.bar.borderRadius)), g.config.chart.stacked) { var A = this.barCtx; (A = this.barCtx[o]).yArrj.push(r - v), A.yArrjF.push(Math.abs(s - r + n)), A.yArrjVal.push(this.barCtx.series[c][d]) } return { pathTo: l, pathFrom: u } } }, { key: "getBarpaths", value: function (e) { var t, i = e.barYPosition, a = e.barHeight, s = e.x1, r = e.x2, n = e.strokeWidth, o = e.seriesGroup, h = e.realIndex, c = e.i, d = e.j, g = e.w, f = new X(this.barCtx.ctx); (n = Array.isArray(n) ? n[h] : n) || (n = 0); var x = i, b = a; (t = g.config.series[h].data[d]) !== null && t !== void 0 && t.barHeightOffset && (x = i - g.config.series[h].data[d].barHeightOffset / 2, b = a + g.config.series[h].data[d].barHeightOffset); var v = n / 2, y = x + v, w = x + b - v; s += .001 - v, r += .001 + v; var l = f.move(s, y), u = f.move(s, y); g.globals.previousPaths.length > 0 && (u = this.barCtx.getPreviousPath(h, d, !1)); var m = f.line(s, w); if (l = l + f.line(r, y) + f.line(r, w) + m + (g.config.plotOptions.bar.borderRadiusApplication === "around" ? " Z" : " z"), u = u + f.line(s, y) + m + m + m + m + m + f.line(s, y) + (g.config.plotOptions.bar.borderRadiusApplication === "around" ? " Z" : " z"), this.shouldApplyRadius(h) && (l = f.roundPathCorners(l, g.config.plotOptions.bar.borderRadius)), g.config.chart.stacked) { var A = this.barCtx; (A = this.barCtx[o]).xArrj.push(r + v), A.xArrjF.push(Math.abs(s - r)), A.xArrjVal.push(this.barCtx.series[c][d]) } return { pathTo: l, pathFrom: u } } }, { key: "checkZeroSeries", value: function (e) { for (var t = e.series, i = this.w, a = 0; a < t.length; a++) { for (var s = 0, r = 0; r < t[i.globals.maxValsInArrayIndex].length; r++)s += t[a][r]; s === 0 && this.barCtx.zeroSerieses.push(a) } } }, { key: "getXForValue", value: function (e, t) { var i = !(arguments.length > 2 && arguments[2] !== void 0) || arguments[2] ? t : null; return e != null && (i = t + e / this.barCtx.invertedYRatio - 2 * (this.barCtx.isReversed ? e / this.barCtx.invertedYRatio : 0)), i } }, { key: "getYForValue", value: function (e, t, i) { var a = !(arguments.length > 3 && arguments[3] !== void 0) || arguments[3] ? t : null; return e != null && (a = t - e / this.barCtx.yRatio[i] + 2 * (this.barCtx.isReversed ? e / this.barCtx.yRatio[i] : 0)), a } }, { key: "getGoalValues", value: function (e, t, i, a, s, r) { var n = this, o = this.w, h = [], c = function (f, x) { var b; h.push((Oe(b = {}, e, e === "x" ? n.getXForValue(f, t, !1) : n.getYForValue(f, i, r, !1)), Oe(b, "attrs", x), b)) }; if (o.globals.seriesGoals[a] && o.globals.seriesGoals[a][s] && Array.isArray(o.globals.seriesGoals[a][s]) && o.globals.seriesGoals[a][s].forEach(function (f) { c(f.value, f) }), this.barCtx.barOptions.isDumbbell && o.globals.seriesRange.length) { var d = this.barCtx.barOptions.dumbbellColors ? this.barCtx.barOptions.dumbbellColors : o.globals.colors, g = { strokeHeight: e === "x" ? 0 : o.globals.markers.size[a], strokeWidth: e === "x" ? o.globals.markers.size[a] : 0, strokeDashArray: 0, strokeLineCap: "round", strokeColor: Array.isArray(d[a]) ? d[a][0] : d[a] }; c(o.globals.seriesRangeStart[a][s], g), c(o.globals.seriesRangeEnd[a][s], Y(Y({}, g), {}, { strokeColor: Array.isArray(d[a]) ? d[a][1] : d[a] })) } return h } }, { key: "drawGoalLine", value: function (e) { var t = e.barXPosition, i = e.barYPosition, a = e.goalX, s = e.goalY, r = e.barWidth, n = e.barHeight, o = new X(this.barCtx.ctx), h = o.group({ className: "apexcharts-bar-goals-groups" }); h.node.classList.add("apexcharts-element-hidden"), this.barCtx.w.globals.delayedElements.push({ el: h.node }), h.attr("clip-path", "url(#gridRectMarkerMask".concat(this.barCtx.w.globals.cuid, ")")); var c = null; return this.barCtx.isHorizontal ? Array.isArray(a) && a.forEach(function (d) { if (d.x >= -1 && d.x <= o.w.globals.gridWidth + 1) { var g = d.attrs.strokeHeight !== void 0 ? d.attrs.strokeHeight : n / 2, f = i + g + n / 2; c = o.drawLine(d.x, f - 2 * g, d.x, f, d.attrs.strokeColor ? d.attrs.strokeColor : void 0, d.attrs.strokeDashArray, d.attrs.strokeWidth ? d.attrs.strokeWidth : 2, d.attrs.strokeLineCap), h.add(c) } }) : Array.isArray(s) && s.forEach(function (d) { if (d.y >= -1 && d.y <= o.w.globals.gridHeight + 1) { var g = d.attrs.strokeWidth !== void 0 ? d.attrs.strokeWidth : r / 2, f = t + g + r / 2; c = o.drawLine(f - 2 * g, d.y, f, d.y, d.attrs.strokeColor ? d.attrs.strokeColor : void 0, d.attrs.strokeDashArray, d.attrs.strokeHeight ? d.attrs.strokeHeight : 2, d.attrs.strokeLineCap), h.add(c) } }), h } }, { key: "drawBarShadow", value: function (e) { var t = e.prevPaths, i = e.currPaths, a = e.color, s = this.w, r = t.x, n = t.x1, o = t.barYPosition, h = i.x, c = i.x1, d = i.barYPosition, g = o + i.barHeight, f = new X(this.barCtx.ctx), x = new P, b = f.move(n, g) + f.line(r, g) + f.line(h, d) + f.line(c, d) + f.line(n, g) + (s.config.plotOptions.bar.borderRadiusApplication === "around" ? " Z" : " z"); return f.drawPath({ d: b, fill: x.shadeColor(.5, P.rgb2hex(a)), stroke: "none", strokeWidth: 0, fillOpacity: 1, classes: "apexcharts-bar-shadows" }) } }, { key: "getZeroValueEncounters", value: function (e) { var t, i = e.i, a = e.j, s = this.w, r = 0, n = 0; return (s.config.plotOptions.bar.horizontal ? s.globals.series.map(function (o, h) { return h }) : ((t = s.globals.columnSeries) === null || t === void 0 ? void 0 : t.i.map(function (o) { return o })) || []).forEach(function (o) { var h = s.globals.seriesPercent[o][a]; h && r++, o < i && h === 0 && n++ }), { nonZeroColumns: r, zeroEncounters: n } } }, { key: "getGroupIndex", value: function (e) { var t = this.w, i = t.globals.seriesGroups.findIndex(function (r) { return r.indexOf(t.globals.seriesNames[e]) > -1 }), a = this.barCtx.columnGroupIndices, s = a.indexOf(i); return s < 0 && (a.push(i), s = a.length - 1), { groupIndex: i, columnGroupIndex: s } } }]), p }(), me = function () { function p(e, t) { F(this, p), this.ctx = e, this.w = e.w; var i = this.w; this.barOptions = i.config.plotOptions.bar, this.isHorizontal = this.barOptions.horizontal, this.strokeWidth = i.config.stroke.width, this.isNullValue = !1, this.isRangeBar = i.globals.seriesRange.length && this.isHorizontal, this.isVerticalGroupedRangeBar = !i.globals.isBarHorizontal && i.globals.seriesRange.length && i.config.plotOptions.bar.rangeBarGroupRows, this.isFunnel = this.barOptions.isFunnel, this.xyRatios = t, this.xyRatios !== null && (this.xRatio = t.xRatio, this.yRatio = t.yRatio, this.invertedXRatio = t.invertedXRatio, this.invertedYRatio = t.invertedYRatio, this.baseLineY = t.baseLineY, this.baseLineInvertedY = t.baseLineInvertedY), this.yaxisIndex = 0, this.translationsIndex = 0, this.seriesLen = 0, this.pathArr = []; var a = new re(this.ctx); this.lastActiveBarSerieIndex = a.getActiveConfigSeriesIndex("desc", ["bar", "column"]), this.columnGroupIndices = []; var s = a.getBarSeriesIndices(), r = new $(this.ctx); this.stackedSeriesTotals = r.getStackedSeriesTotals(this.w.config.series.map(function (n, o) { return s.indexOf(o) === -1 ? o : -1 }).filter(function (n) { return n !== -1 })), this.barHelpers = new ea(this) } return R(p, [{ key: "draw", value: function (e, t) { var i = this.w, a = new X(this.ctx), s = new $(this.ctx, i); e = s.getLogSeries(e), this.series = e, this.yRatio = s.getLogYRatios(this.yRatio), this.barHelpers.initVariables(e); var r = a.group({ class: "apexcharts-bar-series apexcharts-plot-series" }); i.config.dataLabels.enabled && this.totalItems > this.barOptions.dataLabels.maxItems && console.warn("WARNING: DataLabels are enabled but there are too many to display. This may cause performance issue when rendering - ApexCharts"); for (var n = 0, o = 0; n < e.length; n++, o++) { var h, c, d, g, f = void 0, x = void 0, b = [], v = [], y = i.globals.comboCharts ? t[n] : n, w = this.barHelpers.getGroupIndex(y).columnGroupIndex, l = a.group({ class: "apexcharts-series", rel: n + 1, seriesName: P.escapeString(i.globals.seriesNames[y]), "data:realIndex": y }); this.ctx.series.addCollapsedClassToSeries(l, y), e[n].length > 0 && (this.visibleI = this.visibleI + 1); var u = 0, m = 0; this.yRatio.length > 1 && (this.yaxisIndex = i.globals.seriesYAxisReverseMap[y], this.translationsIndex = y); var A = this.translationsIndex; this.isReversed = i.config.yaxis[this.yaxisIndex] && i.config.yaxis[this.yaxisIndex].reversed; var k = this.barHelpers.initialPositions(); x = k.y, u = k.barHeight, c = k.yDivision, g = k.zeroW, f = k.x, m = k.barWidth, h = k.xDivision, d = k.zeroH, this.horizontal || v.push(f + m / 2); var S = a.group({ class: "apexcharts-datalabels", "data:realIndex": y }); i.globals.delayedElements.push({ el: S.node }), S.node.classList.add("apexcharts-element-hidden"); var L = a.group({ class: "apexcharts-bar-goals-markers" }), C = a.group({ class: "apexcharts-bar-shadows" }); i.globals.delayedElements.push({ el: C.node }), C.node.classList.add("apexcharts-element-hidden"); for (var I = 0; I < e[n].length; I++) { var z = this.barHelpers.getStrokeWidth(n, I, y), M = null, T = { indexes: { i: n, j: I, realIndex: y, translationsIndex: A, bc: o }, x: f, y: x, strokeWidth: z, elSeries: l }; this.isHorizontal ? (M = this.drawBarPaths(Y(Y({}, T), {}, { barHeight: u, zeroW: g, yDivision: c })), m = this.series[n][I] / this.invertedYRatio) : (M = this.drawColumnPaths(Y(Y({}, T), {}, { xDivision: h, barWidth: m, zeroH: d })), u = this.series[n][I] / this.yRatio[A]); var E = this.barHelpers.getPathFillColor(e, n, I, y); if (this.isFunnel && this.barOptions.isFunnel3d && this.pathArr.length && I > 0) { var O = this.barHelpers.drawBarShadow({ color: typeof E == "string" && E?.indexOf("url") === -1 ? E : P.hexToRgba(i.globals.colors[n]), prevPaths: this.pathArr[this.pathArr.length - 1], currPaths: M }); O && C.add(O) } this.pathArr.push(M); var D = this.barHelpers.drawGoalLine({ barXPosition: M.barXPosition, barYPosition: M.barYPosition, goalX: M.goalX, goalY: M.goalY, barHeight: u, barWidth: m }); D && L.add(D), x = M.y, f = M.x, I > 0 && v.push(f + m / 2), b.push(x), this.renderSeries({ realIndex: y, pathFill: E, j: I, i: n, columnGroupIndex: w, pathFrom: M.pathFrom, pathTo: M.pathTo, strokeWidth: z, elSeries: l, x: f, y: x, series: e, barHeight: Math.abs(M.barHeight ? M.barHeight : u), barWidth: Math.abs(M.barWidth ? M.barWidth : m), elDataLabelsWrap: S, elGoalsMarkers: L, elBarShadows: C, visibleSeries: this.visibleI, type: "bar" }) } i.globals.seriesXvalues[y] = v, i.globals.seriesYvalues[y] = b, r.add(l) } return r } }, { key: "renderSeries", value: function (e) { var t = e.realIndex, i = e.pathFill, a = e.lineFill, s = e.j, r = e.i, n = e.columnGroupIndex, o = e.pathFrom, h = e.pathTo, c = e.strokeWidth, d = e.elSeries, g = e.x, f = e.y, x = e.y1, b = e.y2, v = e.series, y = e.barHeight, w = e.barWidth, l = e.barXPosition, u = e.barYPosition, m = e.elDataLabelsWrap, A = e.elGoalsMarkers, k = e.elBarShadows, S = e.visibleSeries, L = e.type, C = this.w, I = new X(this.ctx); if (!a) { var z = typeof C.globals.stroke.colors[t] == "function" ? function (D) { var H, W = C.config.stroke.colors; return Array.isArray(W) && W.length > 0 && ((H = W[D]) || (H = ""), typeof H == "function") ? H({ value: C.globals.series[D][s], dataPointIndex: s, w: C }) : H }(t) : C.globals.stroke.colors[t]; a = this.barOptions.distributed ? C.globals.stroke.colors[s] : z } C.config.series[r].data[s] && C.config.series[r].data[s].strokeColor && (a = C.config.series[r].data[s].strokeColor), this.isNullValue && (i = "none"); var M = s / C.config.chart.animations.animateGradually.delay * (C.config.chart.animations.speed / C.globals.dataPoints) / 2.4, T = I.renderPaths({ i: r, j: s, realIndex: t, pathFrom: o, pathTo: h, stroke: a, strokeWidth: c, strokeLineCap: C.config.stroke.lineCap, fill: i, animationDelay: M, initialSpeed: C.config.chart.animations.speed, dataChangeSpeed: C.config.chart.animations.dynamicAnimation.speed, className: "apexcharts-".concat(L, "-area") }); T.attr("clip-path", "url(#gridRectMask".concat(C.globals.cuid, ")")); var E = C.config.forecastDataPoints; E.count > 0 && s >= C.globals.dataPoints - E.count && (T.node.setAttribute("stroke-dasharray", E.dashArray), T.node.setAttribute("stroke-width", E.strokeWidth), T.node.setAttribute("fill-opacity", E.fillOpacity)), x !== void 0 && b !== void 0 && (T.attr("data-range-y1", x), T.attr("data-range-y2", b)), new ie(this.ctx).setSelectionFilter(T, t, s), d.add(T); var O = new Qi(this).handleBarDataLabels({ x: g, y: f, y1: x, y2: b, i: r, j: s, series: v, realIndex: t, columnGroupIndex: n, barHeight: y, barWidth: w, barXPosition: l, barYPosition: u, renderedPath: T, visibleSeries: S }); return O.dataLabels !== null && m.add(O.dataLabels), O.totalDataLabels && m.add(O.totalDataLabels), d.add(m), A && d.add(A), k && d.add(k), d } }, { key: "drawBarPaths", value: function (e) { var t, i = e.indexes, a = e.barHeight, s = e.strokeWidth, r = e.zeroW, n = e.x, o = e.y, h = e.yDivision, c = e.elSeries, d = this.w, g = i.i, f = i.j; if (d.globals.isXNumeric) t = (o = (d.globals.seriesX[g][f] - d.globals.minX) / this.invertedXRatio - a) + a * this.visibleI; else if (d.config.plotOptions.bar.hideZeroBarsWhenGrouped) { var x = 0, b = 0; d.globals.seriesPercent.forEach(function (y, w) { y[f] && x++, w < g && y[f] === 0 && b++ }), x > 0 && (a = this.seriesLen * a / x), t = o + a * this.visibleI, t -= a * b } else t = o + a * this.visibleI; this.isFunnel && (r -= (this.barHelpers.getXForValue(this.series[g][f], r) - r) / 2), n = this.barHelpers.getXForValue(this.series[g][f], r); var v = this.barHelpers.getBarpaths({ barYPosition: t, barHeight: a, x1: r, x2: n, strokeWidth: s, series: this.series, realIndex: i.realIndex, i: g, j: f, w: d }); return d.globals.isXNumeric || (o += h), this.barHelpers.barBackground({ j: f, i: g, y1: t - a * this.visibleI, y2: a * this.seriesLen, elSeries: c }), { pathTo: v.pathTo, pathFrom: v.pathFrom, x1: r, x: n, y: o, goalX: this.barHelpers.getGoalValues("x", r, null, g, f), barYPosition: t, barHeight: a } } }, { key: "drawColumnPaths", value: function (e) { var t, i = e.indexes, a = e.x, s = e.y, r = e.xDivision, n = e.barWidth, o = e.zeroH, h = e.strokeWidth, c = e.elSeries, d = this.w, g = i.realIndex, f = i.translationsIndex, x = i.i, b = i.j, v = i.bc; if (d.globals.isXNumeric) { var y = this.getBarXForNumericXAxis({ x: a, j: b, realIndex: g, barWidth: n }); a = y.x, t = y.barXPosition } else if (d.config.plotOptions.bar.hideZeroBarsWhenGrouped) { var w = this.barHelpers.getZeroValueEncounters({ i: x, j: b }), l = w.nonZeroColumns, u = w.zeroEncounters; l > 0 && (n = this.seriesLen * n / l), t = a + n * this.visibleI, t -= n * u } else t = a + n * this.visibleI; s = this.barHelpers.getYForValue(this.series[x][b], o, f); var m = this.barHelpers.getColumnPaths({ barXPosition: t, barWidth: n, y1: o, y2: s, strokeWidth: h, series: this.series, realIndex: g, i: x, j: b, w: d }); return d.globals.isXNumeric || (a += r), this.barHelpers.barBackground({ bc: v, j: b, i: x, x1: t - h / 2 - n * this.visibleI, x2: n * this.seriesLen + h / 2, elSeries: c }), { pathTo: m.pathTo, pathFrom: m.pathFrom, x: a, y: s, goalY: this.barHelpers.getGoalValues("y", null, o, x, b, f), barXPosition: t, barWidth: n } } }, { key: "getBarXForNumericXAxis", value: function (e) { var t = e.x, i = e.barWidth, a = e.realIndex, s = e.j, r = this.w, n = a; return r.globals.seriesX[a].length || (n = r.globals.maxValsInArrayIndex), r.globals.seriesX[n][s] && (t = (r.globals.seriesX[n][s] - r.globals.minX) / this.xRatio - i * this.seriesLen / 2), { barXPosition: t + i * this.visibleI, x: t } } }, { key: "getPreviousPath", value: function (e, t) { for (var i, a = this.w, s = 0; s < a.globals.previousPaths.length; s++) { var r = a.globals.previousPaths[s]; r.paths && r.paths.length > 0 && parseInt(r.realIndex, 10) === parseInt(e, 10) && a.globals.previousPaths[s].paths[t] !== void 0 && (i = a.globals.previousPaths[s].paths[t].d) } return i } }]), p }(), St = function (p) { Te(t, me); var e = Ie(t); function t() { return F(this, t), e.apply(this, arguments) } return R(t, [{ key: "draw", value: function (i, a) { var s = this, r = this.w; this.graphics = new X(this.ctx), this.bar = new me(this.ctx, this.xyRatios); var n = new $(this.ctx, r); i = n.getLogSeries(i), this.yRatio = n.getLogYRatios(this.yRatio), this.barHelpers.initVariables(i), r.config.chart.stackType === "100%" && (i = r.globals.comboCharts ? a.map(function (x) { return r.globals.seriesPercent[x] }) : r.globals.seriesPercent.slice()), this.series = i, this.barHelpers.initializeStackedPrevVars(this); for (var o = this.graphics.group({ class: "apexcharts-bar-series apexcharts-plot-series" }), h = 0, c = 0, d = function (x, b) { var v = void 0, y = void 0, w = void 0, l = void 0, u = r.globals.comboCharts ? a[x] : x, m = s.barHelpers.getGroupIndex(u), A = m.groupIndex, k = m.columnGroupIndex; s.groupCtx = s[r.globals.seriesGroups[A]]; var S = [], L = [], C = 0; s.yRatio.length > 1 && (s.yaxisIndex = r.globals.seriesYAxisReverseMap[u][0], C = u), s.isReversed = r.config.yaxis[s.yaxisIndex] && r.config.yaxis[s.yaxisIndex].reversed; var I = s.graphics.group({ class: "apexcharts-series", seriesName: P.escapeString(r.globals.seriesNames[u]), rel: x + 1, "data:realIndex": u }); s.ctx.series.addCollapsedClassToSeries(I, u); var z = s.graphics.group({ class: "apexcharts-datalabels", "data:realIndex": u }), M = s.graphics.group({ class: "apexcharts-bar-goals-markers" }), T = 0, E = 0, O = s.initialPositions(h, c, v, y, w, l, C); c = O.y, T = O.barHeight, y = O.yDivision, l = O.zeroW, h = O.x, E = O.barWidth, v = O.xDivision, w = O.zeroH, r.globals.barHeight = T, r.globals.barWidth = E, s.barHelpers.initializeStackedXYVars(s), s.groupCtx.prevY.length === 1 && s.groupCtx.prevY[0].every(function (Z) { return isNaN(Z) }) && (s.groupCtx.prevY[0] = s.groupCtx.prevY[0].map(function () { return w }), s.groupCtx.prevYF[0] = s.groupCtx.prevYF[0].map(function () { return 0 })); for (var D = 0; D < r.globals.dataPoints; D++) { var H = s.barHelpers.getStrokeWidth(x, D, u), W = { indexes: { i: x, j: D, realIndex: u, translationsIndex: C, bc: b }, strokeWidth: H, x: h, y: c, elSeries: I, columnGroupIndex: k, seriesGroup: r.globals.seriesGroups[A] }, N = null; s.isHorizontal ? (N = s.drawStackedBarPaths(Y(Y({}, W), {}, { zeroW: l, barHeight: T, yDivision: y })), E = s.series[x][D] / s.invertedYRatio) : (N = s.drawStackedColumnPaths(Y(Y({}, W), {}, { xDivision: v, barWidth: E, zeroH: w })), T = s.series[x][D] / s.yRatio[C]); var B = s.barHelpers.drawGoalLine({ barXPosition: N.barXPosition, barYPosition: N.barYPosition, goalX: N.goalX, goalY: N.goalY, barHeight: T, barWidth: E }); B && M.add(B), c = N.y, h = N.x, S.push(h), L.push(c); var q = s.barHelpers.getPathFillColor(i, x, D, u); I = s.renderSeries({ realIndex: u, pathFill: q, j: D, i: x, columnGroupIndex: k, pathFrom: N.pathFrom, pathTo: N.pathTo, strokeWidth: H, elSeries: I, x: h, y: c, series: i, barHeight: T, barWidth: E, elDataLabelsWrap: z, elGoalsMarkers: M, type: "bar", visibleSeries: k }) } r.globals.seriesXvalues[u] = S, r.globals.seriesYvalues[u] = L, s.groupCtx.prevY.push(s.groupCtx.yArrj), s.groupCtx.prevYF.push(s.groupCtx.yArrjF), s.groupCtx.prevYVal.push(s.groupCtx.yArrjVal), s.groupCtx.prevX.push(s.groupCtx.xArrj), s.groupCtx.prevXF.push(s.groupCtx.xArrjF), s.groupCtx.prevXVal.push(s.groupCtx.xArrjVal), o.add(I) }, g = 0, f = 0; g < i.length; g++, f++)d(g, f); return o } }, { key: "initialPositions", value: function (i, a, s, r, n, o, h) { var c, d, g = this.w; if (this.isHorizontal) { r = g.globals.gridHeight / g.globals.dataPoints; var f = g.config.plotOptions.bar.barHeight; c = String(f).indexOf("%") === -1 ? parseInt(f, 10) : r * parseInt(f, 10) / 100, o = g.globals.padHorizontal + (this.isReversed ? g.globals.gridWidth - this.baseLineInvertedY : this.baseLineInvertedY), a = (r - c) / 2 } else { d = s = g.globals.gridWidth / g.globals.dataPoints; var x = g.config.plotOptions.bar.columnWidth; g.globals.isXNumeric && g.globals.dataPoints > 1 ? d = (s = g.globals.minXDiff / this.xRatio) * parseInt(this.barOptions.columnWidth, 10) / 100 : String(x).indexOf("%") === -1 ? d = parseInt(x, 10) : d *= parseInt(x, 10) / 100, n = this.isReversed ? this.baseLineY[h] : g.globals.gridHeight - this.baseLineY[h], i = g.globals.padHorizontal + (s - d) / 2 } var b = g.globals.barGroups.length || 1; return { x: i, y: a, yDivision: r, xDivision: s, barHeight: c / b, barWidth: d / b, zeroH: n, zeroW: o } } }, { key: "drawStackedBarPaths", value: function (i) { for (var a, s = i.indexes, r = i.barHeight, n = i.strokeWidth, o = i.zeroW, h = i.x, c = i.y, d = i.columnGroupIndex, g = i.seriesGroup, f = i.yDivision, x = i.elSeries, b = this.w, v = c + d * r, y = s.i, w = s.j, l = s.realIndex, u = s.translationsIndex, m = 0, A = 0; A < this.groupCtx.prevXF.length; A++)m += this.groupCtx.prevXF[A][w]; var k; if ((k = g.indexOf(b.config.series[l].name)) > 0) { var S = o; this.groupCtx.prevXVal[k - 1][w] < 0 ? S = this.series[y][w] >= 0 ? this.groupCtx.prevX[k - 1][w] + m - 2 * (this.isReversed ? m : 0) : this.groupCtx.prevX[k - 1][w] : this.groupCtx.prevXVal[k - 1][w] >= 0 && (S = this.series[y][w] >= 0 ? this.groupCtx.prevX[k - 1][w] : this.groupCtx.prevX[k - 1][w] - m + 2 * (this.isReversed ? m : 0)), a = S } else a = o; h = this.series[y][w] === null ? a : a + this.series[y][w] / this.invertedYRatio - 2 * (this.isReversed ? this.series[y][w] / this.invertedYRatio : 0); var L = this.barHelpers.getBarpaths({ barYPosition: v, barHeight: r, x1: a, x2: h, strokeWidth: n, series: this.series, realIndex: s.realIndex, seriesGroup: g, i: y, j: w, w: b }); return this.barHelpers.barBackground({ j: w, i: y, y1: v, y2: r, elSeries: x }), c += f, { pathTo: L.pathTo, pathFrom: L.pathFrom, goalX: this.barHelpers.getGoalValues("x", o, null, y, w, u), barXPosition: a, barYPosition: v, x: h, y: c } } }, { key: "drawStackedColumnPaths", value: function (i) { var a = i.indexes, s = i.x, r = i.y, n = i.xDivision, o = i.barWidth, h = i.zeroH, c = i.columnGroupIndex, d = i.seriesGroup, g = i.elSeries, f = this.w, x = a.i, b = a.j, v = a.bc, y = a.realIndex, w = a.translationsIndex; if (f.globals.isXNumeric) { var l = f.globals.seriesX[y][b]; l || (l = 0), s = (l - f.globals.minX) / this.xRatio - o / 2 * f.globals.barGroups.length } for (var u, m = s + c * o, A = 0, k = 0; k < this.groupCtx.prevYF.length; k++)A += isNaN(this.groupCtx.prevYF[k][b]) ? 0 : this.groupCtx.prevYF[k][b]; var S = x; if (d && (S = d.indexOf(f.globals.seriesNames[y])), S > 0 && !f.globals.isXNumeric || S > 0 && f.globals.isXNumeric && f.globals.seriesX[y - 1][b] === f.globals.seriesX[y][b]) { var L, C, I, z = Math.min(this.yRatio.length + 1, y + 1); if (this.groupCtx.prevY[S - 1] !== void 0 && this.groupCtx.prevY[S - 1].length) for (var M = 1; M < z; M++) { var T; if (!isNaN((T = this.groupCtx.prevY[S - M]) === null || T === void 0 ? void 0 : T[b])) { I = this.groupCtx.prevY[S - M][b]; break } } for (var E = 1; E < z; E++) { var O, D; if (((O = this.groupCtx.prevYVal[S - E]) === null || O === void 0 ? void 0 : O[b]) < 0) { C = this.series[x][b] >= 0 ? I - A + 2 * (this.isReversed ? A : 0) : I; break } if (((D = this.groupCtx.prevYVal[S - E]) === null || D === void 0 ? void 0 : D[b]) >= 0) { C = this.series[x][b] >= 0 ? I : I + A - 2 * (this.isReversed ? A : 0); break } } C === void 0 && (C = f.globals.gridHeight), u = (L = this.groupCtx.prevYF[0]) !== null && L !== void 0 && L.every(function (W) { return W === 0 }) && this.groupCtx.prevYF.slice(1, S).every(function (W) { return W.every(function (N) { return isNaN(N) }) }) ? h : C } else u = h; r = this.series[x][b] ? u - this.series[x][b] / this.yRatio[w] + 2 * (this.isReversed ? this.series[x][b] / this.yRatio[w] : 0) : u; var H = this.barHelpers.getColumnPaths({ barXPosition: m, barWidth: o, y1: u, y2: r, yRatio: this.yRatio[w], strokeWidth: this.strokeWidth, series: this.series, seriesGroup: d, realIndex: a.realIndex, i: x, j: b, w: f }); return this.barHelpers.barBackground({ bc: v, j: b, i: x, x1: m, x2: o, elSeries: g }), { pathTo: H.pathTo, pathFrom: H.pathFrom, goalY: this.barHelpers.getGoalValues("y", null, h, x, b), barXPosition: m, x: f.globals.isXNumeric ? s : s + n, y: r } } }]), t }(), Qe = function (p) { Te(t, me); var e = Ie(t); function t() { return F(this, t), e.apply(this, arguments) } return R(t, [{ key: "draw", value: function (i, a, s) { var r = this, n = this.w, o = new X(this.ctx), h = n.globals.comboCharts ? a : n.config.chart.type, c = new ne(this.ctx); this.candlestickOptions = this.w.config.plotOptions.candlestick, this.boxOptions = this.w.config.plotOptions.boxPlot, this.isHorizontal = n.config.plotOptions.bar.horizontal; var d = new $(this.ctx, n); i = d.getLogSeries(i), this.series = i, this.yRatio = d.getLogYRatios(this.yRatio), this.barHelpers.initVariables(i); for (var g = o.group({ class: "apexcharts-".concat(h, "-series apexcharts-plot-series") }), f = function (b) { r.isBoxPlot = n.config.chart.type === "boxPlot" || n.config.series[b].type === "boxPlot"; var v, y, w, l, u = void 0, m = void 0, A = [], k = [], S = n.globals.comboCharts ? s[b] : b, L = r.barHelpers.getGroupIndex(S).columnGroupIndex, C = o.group({ class: "apexcharts-series", seriesName: P.escapeString(n.globals.seriesNames[S]), rel: b + 1, "data:realIndex": S }); r.ctx.series.addCollapsedClassToSeries(C, S), i[b].length > 0 && (r.visibleI = r.visibleI + 1); var I, z, M = 0; r.yRatio.length > 1 && (r.yaxisIndex = n.globals.seriesYAxisReverseMap[S][0], M = S); var T = r.barHelpers.initialPositions(); m = T.y, I = T.barHeight, y = T.yDivision, l = T.zeroW, u = T.x, z = T.barWidth, v = T.xDivision, w = T.zeroH, k.push(u + z / 2); for (var E = o.group({ class: "apexcharts-datalabels", "data:realIndex": S }), O = function (H) { var W = r.barHelpers.getStrokeWidth(b, H, S), N = null, B = { indexes: { i: b, j: H, realIndex: S, translationsIndex: M }, x: u, y: m, strokeWidth: W, elSeries: C }; N = r.isHorizontal ? r.drawHorizontalBoxPaths(Y(Y({}, B), {}, { yDivision: y, barHeight: I, zeroW: l })) : r.drawVerticalBoxPaths(Y(Y({}, B), {}, { xDivision: v, barWidth: z, zeroH: w })), m = N.y, u = N.x, H > 0 && k.push(u + z / 2), A.push(m), N.pathTo.forEach(function (q, Z) { var j = !r.isBoxPlot && r.candlestickOptions.wick.useFillColor ? N.color[Z] : n.globals.stroke.colors[b], se = c.fillPath({ seriesNumber: S, dataPointIndex: H, color: N.color[Z], value: i[b][H] }); r.renderSeries({ realIndex: S, pathFill: se, lineFill: j, j: H, i: b, pathFrom: N.pathFrom, pathTo: q, strokeWidth: W, elSeries: C, x: u, y: m, series: i, columnGroupIndex: L, barHeight: I, barWidth: z, elDataLabelsWrap: E, visibleSeries: r.visibleI, type: n.config.chart.type }) }) }, D = 0; D < n.globals.dataPoints; D++)O(D); n.globals.seriesXvalues[S] = k, n.globals.seriesYvalues[S] = A, g.add(C) }, x = 0; x < i.length; x++)f(x); return g } }, { key: "drawVerticalBoxPaths", value: function (i) { var a = i.indexes, s = i.x; i.y; var r = i.xDivision, n = i.barWidth, o = i.zeroH, h = i.strokeWidth, c = this.w, d = new X(this.ctx), g = a.i, f = a.j, x = !0, b = c.config.plotOptions.candlestick.colors.upward, v = c.config.plotOptions.candlestick.colors.downward, y = ""; this.isBoxPlot && (y = [this.boxOptions.colors.lower, this.boxOptions.colors.upper]); var w = this.yRatio[a.translationsIndex], l = a.realIndex, u = this.getOHLCValue(l, f), m = o, A = o; u.o > u.c && (x = !1); var k = Math.min(u.o, u.c), S = Math.max(u.o, u.c), L = u.m; c.globals.isXNumeric && (s = (c.globals.seriesX[l][f] - c.globals.minX) / this.xRatio - n / 2); var C = s + n * this.visibleI; this.series[g][f] === void 0 || this.series[g][f] === null ? (k = o, S = o) : (k = o - k / w, S = o - S / w, m = o - u.h / w, A = o - u.l / w, L = o - u.m / w); var I = d.move(C, o), z = d.move(C + n / 2, k); return c.globals.previousPaths.length > 0 && (z = this.getPreviousPath(l, f, !0)), I = this.isBoxPlot ? [d.move(C, k) + d.line(C + n / 2, k) + d.line(C + n / 2, m) + d.line(C + n / 4, m) + d.line(C + n - n / 4, m) + d.line(C + n / 2, m) + d.line(C + n / 2, k) + d.line(C + n, k) + d.line(C + n, L) + d.line(C, L) + d.line(C, k + h / 2), d.move(C, L) + d.line(C + n, L) + d.line(C + n, S) + d.line(C + n / 2, S) + d.line(C + n / 2, A) + d.line(C + n - n / 4, A) + d.line(C + n / 4, A) + d.line(C + n / 2, A) + d.line(C + n / 2, S) + d.line(C, S) + d.line(C, L) + "z"] : [d.move(C, S) + d.line(C + n / 2, S) + d.line(C + n / 2, m) + d.line(C + n / 2, S) + d.line(C + n, S) + d.line(C + n, k) + d.line(C + n / 2, k) + d.line(C + n / 2, A) + d.line(C + n / 2, k) + d.line(C, k) + d.line(C, S - h / 2)], z += d.move(C, k), c.globals.isXNumeric || (s += r), { pathTo: I, pathFrom: z, x: s, y: S, barXPosition: C, color: this.isBoxPlot ? y : x ? [b] : [v] } } }, { key: "drawHorizontalBoxPaths", value: function (i) { var a = i.indexes; i.x; var s = i.y, r = i.yDivision, n = i.barHeight, o = i.zeroW, h = i.strokeWidth, c = this.w, d = new X(this.ctx), g = a.i, f = a.j, x = this.boxOptions.colors.lower; this.isBoxPlot && (x = [this.boxOptions.colors.lower, this.boxOptions.colors.upper]); var b = this.invertedYRatio, v = a.realIndex, y = this.getOHLCValue(v, f), w = o, l = o, u = Math.min(y.o, y.c), m = Math.max(y.o, y.c), A = y.m; c.globals.isXNumeric && (s = (c.globals.seriesX[v][f] - c.globals.minX) / this.invertedXRatio - n / 2); var k = s + n * this.visibleI; this.series[g][f] === void 0 || this.series[g][f] === null ? (u = o, m = o) : (u = o + u / b, m = o + m / b, w = o + y.h / b, l = o + y.l / b, A = o + y.m / b); var S = d.move(o, k), L = d.move(u, k + n / 2); return c.globals.previousPaths.length > 0 && (L = this.getPreviousPath(v, f, !0)), S = [d.move(u, k) + d.line(u, k + n / 2) + d.line(w, k + n / 2) + d.line(w, k + n / 2 - n / 4) + d.line(w, k + n / 2 + n / 4) + d.line(w, k + n / 2) + d.line(u, k + n / 2) + d.line(u, k + n) + d.line(A, k + n) + d.line(A, k) + d.line(u + h / 2, k), d.move(A, k) + d.line(A, k + n) + d.line(m, k + n) + d.line(m, k + n / 2) + d.line(l, k + n / 2) + d.line(l, k + n - n / 4) + d.line(l, k + n / 4) + d.line(l, k + n / 2) + d.line(m, k + n / 2) + d.line(m, k) + d.line(A, k) + "z"], L += d.move(u, k), c.globals.isXNumeric || (s += r), { pathTo: S, pathFrom: L, x: m, y: s, barYPosition: k, color: x } } }, { key: "getOHLCValue", value: function (i, a) { var s = this.w; return { o: this.isBoxPlot ? s.globals.seriesCandleH[i][a] : s.globals.seriesCandleO[i][a], h: this.isBoxPlot ? s.globals.seriesCandleO[i][a] : s.globals.seriesCandleH[i][a], m: s.globals.seriesCandleM[i][a], l: this.isBoxPlot ? s.globals.seriesCandleC[i][a] : s.globals.seriesCandleL[i][a], c: this.isBoxPlot ? s.globals.seriesCandleL[i][a] : s.globals.seriesCandleC[i][a] } } }]), t }(), Bt = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w } return R(p, [{ key: "checkColorRange", value: function () { var e = this.w, t = !1, i = e.config.plotOptions[e.config.chart.type]; return i.colorScale.ranges.length > 0 && i.colorScale.ranges.map(function (a, s) { a.from <= 0 && (t = !0) }), t } }, { key: "getShadeColor", value: function (e, t, i, a) { var s = this.w, r = 1, n = s.config.plotOptions[e].shadeIntensity, o = this.determineColor(e, t, i); s.globals.hasNegs || a ? r = s.config.plotOptions[e].reverseNegativeShade ? o.percent < 0 ? o.percent / 100 * (1.25 * n) : (1 - o.percent / 100) * (1.25 * n) : o.percent <= 0 ? 1 - (1 + o.percent / 100) * n : (1 - o.percent / 100) * n : (r = 1 - o.percent / 100, e === "treemap" && (r = (1 - o.percent / 100) * (1.25 * n))); var h = o.color, c = new P; if (s.config.plotOptions[e].enableShades) if (this.w.config.theme.mode === "dark") { var d = c.shadeColor(-1 * r, o.color); h = P.hexToRgba(P.isColorHex(d) ? d : P.rgb2hex(d), s.config.fill.opacity) } else { var g = c.shadeColor(r, o.color); h = P.hexToRgba(P.isColorHex(g) ? g : P.rgb2hex(g), s.config.fill.opacity) } return { color: h, colorProps: o } } }, { key: "determineColor", value: function (e, t, i) { var a = this.w, s = a.globals.series[t][i], r = a.config.plotOptions[e], n = r.colorScale.inverse ? i : t; r.distributed && a.config.chart.type === "treemap" && (n = i); var o = a.globals.colors[n], h = null, c = Math.min.apply(Math, te(a.globals.series[t])), d = Math.max.apply(Math, te(a.globals.series[t])); r.distributed || e !== "heatmap" || (c = a.globals.minY, d = a.globals.maxY), r.colorScale.min !== void 0 && (c = r.colorScale.min < a.globals.minY ? r.colorScale.min : a.globals.minY, d = r.colorScale.max > a.globals.maxY ? r.colorScale.max : a.globals.maxY); var g = Math.abs(d) + Math.abs(c), f = 100 * s / (g === 0 ? g - 1e-6 : g); return r.colorScale.ranges.length > 0 && r.colorScale.ranges.map(function (x, b) { if (s >= x.from && s <= x.to) { o = x.color, h = x.foreColor ? x.foreColor : null, c = x.from, d = x.to; var v = Math.abs(d) + Math.abs(c); f = 100 * s / (v === 0 ? v - 1e-6 : v) } }), { color: o, foreColor: h, percent: f } } }, { key: "calculateDataLabels", value: function (e) { var t = e.text, i = e.x, a = e.y, s = e.i, r = e.j, n = e.colorProps, o = e.fontSize, h = this.w.config.dataLabels, c = new X(this.ctx), d = new be(this.ctx), g = null; if (h.enabled) { g = c.group({ class: "apexcharts-data-labels" }); var f = h.offsetX, x = h.offsetY, b = i + f, v = a + parseFloat(h.style.fontSize) / 3 + x; d.plotDataLabelsText({ x: b, y: v, text: t, i: s, j: r, color: n.foreColor, parent: g, fontSize: o, dataLabelsConfig: h }) } return g } }, { key: "addListeners", value: function (e) { var t = new X(this.ctx); e.node.addEventListener("mouseenter", t.pathMouseEnter.bind(this, e)), e.node.addEventListener("mouseleave", t.pathMouseLeave.bind(this, e)), e.node.addEventListener("mousedown", t.pathMouseDown.bind(this, e)) } }]), p }(), ta = function () { function p(e, t) { F(this, p), this.ctx = e, this.w = e.w, this.xRatio = t.xRatio, this.yRatio = t.yRatio, this.dynamicAnim = this.w.config.chart.animations.dynamicAnimation, this.helpers = new Bt(e), this.rectRadius = this.w.config.plotOptions.heatmap.radius, this.strokeWidth = this.w.config.stroke.show ? this.w.config.stroke.width : 0 } return R(p, [{ key: "draw", value: function (e) { var t = this.w, i = new X(this.ctx), a = i.group({ class: "apexcharts-heatmap" }); a.attr("clip-path", "url(#gridRectMask".concat(t.globals.cuid, ")")); var s = t.globals.gridWidth / t.globals.dataPoints, r = t.globals.gridHeight / t.globals.series.length, n = 0, o = !1; this.negRange = this.helpers.checkColorRange(); var h = e.slice(); t.config.yaxis[0].reversed && (o = !0, h.reverse()); for (var c = o ? 0 : h.length - 1; o ? c < h.length : c >= 0; o ? c++ : c--) { var d = i.group({ class: "apexcharts-series apexcharts-heatmap-series", seriesName: P.escapeString(t.globals.seriesNames[c]), rel: c + 1, "data:realIndex": c }); if (this.ctx.series.addCollapsedClassToSeries(d, c), t.config.chart.dropShadow.enabled) { var g = t.config.chart.dropShadow; new ie(this.ctx).dropShadow(d, g, c) } for (var f = 0, x = t.config.plotOptions.heatmap.shadeIntensity, b = 0; b < h[c].length; b++) { var v = this.helpers.getShadeColor(t.config.chart.type, c, b, this.negRange), y = v.color, w = v.colorProps; t.config.fill.type === "image" && (y = new ne(this.ctx).fillPath({ seriesNumber: c, dataPointIndex: b, opacity: t.globals.hasNegs ? w.percent < 0 ? 1 - (1 + w.percent / 100) : x + w.percent / 100 : w.percent / 100, patternID: P.randomId(), width: t.config.fill.image.width ? t.config.fill.image.width : s, height: t.config.fill.image.height ? t.config.fill.image.height : r })); var l = this.rectRadius, u = i.drawRect(f, n, s, r, l); if (u.attr({ cx: f, cy: n }), u.node.classList.add("apexcharts-heatmap-rect"), d.add(u), u.attr({ fill: y, i: c, index: c, j: b, val: e[c][b], "stroke-width": this.strokeWidth, stroke: t.config.plotOptions.heatmap.useFillColorAsStroke ? y : t.globals.stroke.colors[0], color: y }), this.helpers.addListeners(u), t.config.chart.animations.enabled && !t.globals.dataChanged) { var m = 1; t.globals.resized || (m = t.config.chart.animations.speed), this.animateHeatMap(u, f, n, s, r, m) } if (t.globals.dataChanged) { var A = 1; if (this.dynamicAnim.enabled && t.globals.shouldAnimate) { A = this.dynamicAnim.speed; var k = t.globals.previousPaths[c] && t.globals.previousPaths[c][b] && t.globals.previousPaths[c][b].color; k || (k = "rgba(255, 255, 255, 0)"), this.animateHeatColor(u, P.isColorHex(k) ? k : P.rgb2hex(k), P.isColorHex(y) ? y : P.rgb2hex(y), A) } } var S = (0, t.config.dataLabels.formatter)(t.globals.series[c][b], { value: t.globals.series[c][b], seriesIndex: c, dataPointIndex: b, w: t }), L = this.helpers.calculateDataLabels({ text: S, x: f + s / 2, y: n + r / 2, i: c, j: b, colorProps: w, series: h }); L !== null && d.add(L), f += s } n += r, a.add(d) } var C = t.globals.yAxisScale[0].result.slice(); return t.config.yaxis[0].reversed ? C.unshift("") : C.push(""), t.globals.yAxisScale[0].result = C, a } }, { key: "animateHeatMap", value: function (e, t, i, a, s, r) { var n = new ve(this.ctx); n.animateRect(e, { x: t + a / 2, y: i + s / 2, width: 0, height: 0 }, { x: t, y: i, width: a, height: s }, r, function () { n.animationCompleted(e) }) } }, { key: "animateHeatColor", value: function (e, t, i, a) { e.attr({ fill: t }).animate(a).attr({ fill: i }) } }]), p }(), Gt = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w } return R(p, [{ key: "drawYAxisTexts", value: function (e, t, i, a) { var s = this.w, r = s.config.yaxis[0], n = s.globals.yLabelFormatters[0]; return new X(this.ctx).drawText({ x: e + r.labels.offsetX, y: t + r.labels.offsetY, text: n(a, i), textAnchor: "middle", fontSize: r.labels.style.fontSize, fontFamily: r.labels.style.fontFamily, foreColor: Array.isArray(r.labels.style.colors) ? r.labels.style.colors[i] : r.labels.style.colors }) } }]), p }(), Vt = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w; var t = this.w; this.chartType = this.w.config.chart.type, this.initialAnim = this.w.config.chart.animations.enabled, this.dynamicAnim = this.initialAnim && this.w.config.chart.animations.dynamicAnimation.enabled, this.animBeginArr = [0], this.animDur = 0, this.donutDataLabels = this.w.config.plotOptions.pie.donut.labels, this.lineColorArr = t.globals.stroke.colors !== void 0 ? t.globals.stroke.colors : t.globals.colors, this.defaultSize = Math.min(t.globals.gridWidth, t.globals.gridHeight), this.centerY = this.defaultSize / 2, this.centerX = t.globals.gridWidth / 2, t.config.chart.type === "radialBar" ? this.fullAngle = 360 : this.fullAngle = Math.abs(t.config.plotOptions.pie.endAngle - t.config.plotOptions.pie.startAngle), this.initialAngle = t.config.plotOptions.pie.startAngle % this.fullAngle, t.globals.radialSize = this.defaultSize / 2.05 - t.config.stroke.width - (t.config.chart.sparkline.enabled ? 0 : t.config.chart.dropShadow.blur), this.donutSize = t.globals.radialSize * parseInt(t.config.plotOptions.pie.donut.size, 10) / 100; var i = t.config.plotOptions.pie.customScale, a = t.globals.gridWidth / 2, s = t.globals.gridHeight / 2; this.translateX = a - a * i, this.translateY = s - s * i, this.dataLabelsGroup = new X(this.ctx).group({ class: "apexcharts-datalabels-group", transform: "translate(".concat(this.translateX, ", ").concat(this.translateY, ") scale(").concat(i, ")") }), this.maxY = 0, this.sliceLabels = [], this.sliceSizes = [], this.prevSectorAngleArr = [] } return R(p, [{ key: "draw", value: function (e) { var t = this, i = this.w, a = new X(this.ctx), s = a.group({ class: "apexcharts-pie" }); if (i.globals.noData) return s; for (var r = 0, n = 0; n < e.length; n++)r += P.negToZero(e[n]); var o = [], h = a.group(); r === 0 && (r = 1e-5), e.forEach(function (l) { t.maxY = Math.max(t.maxY, l) }), i.config.yaxis[0].max && (this.maxY = i.config.yaxis[0].max), i.config.grid.position === "back" && this.chartType === "polarArea" && this.drawPolarElements(s); for (var c = 0; c < e.length; c++) { var d = this.fullAngle * P.negToZero(e[c]) / r; o.push(d), this.chartType === "polarArea" ? (o[c] = this.fullAngle / e.length, this.sliceSizes.push(i.globals.radialSize * e[c] / this.maxY)) : this.sliceSizes.push(i.globals.radialSize) } if (i.globals.dataChanged) { for (var g, f = 0, x = 0; x < i.globals.previousPaths.length; x++)f += P.negToZero(i.globals.previousPaths[x]); for (var b = 0; b < i.globals.previousPaths.length; b++)g = this.fullAngle * P.negToZero(i.globals.previousPaths[b]) / f, this.prevSectorAngleArr.push(g) } if (this.donutSize < 0 && (this.donutSize = 0), this.chartType === "donut") { var v = a.drawCircle(this.donutSize); v.attr({ cx: this.centerX, cy: this.centerY, fill: i.config.plotOptions.pie.donut.background ? i.config.plotOptions.pie.donut.background : "transparent" }), h.add(v) } var y = this.drawArcs(o, e); if (this.sliceLabels.forEach(function (l) { y.add(l) }), h.attr({ transform: "translate(".concat(this.translateX, ", ").concat(this.translateY, ") scale(").concat(i.config.plotOptions.pie.customScale, ")") }), h.add(y), s.add(h), this.donutDataLabels.show) { var w = this.renderInnerDataLabels(this.dataLabelsGroup, this.donutDataLabels, { hollowSize: this.donutSize, centerX: this.centerX, centerY: this.centerY, opacity: this.donutDataLabels.show }); s.add(w) } return i.config.grid.position === "front" && this.chartType === "polarArea" && this.drawPolarElements(s), s } }, { key: "drawArcs", value: function (e, t) { var i = this.w, a = new ie(this.ctx), s = new X(this.ctx), r = new ne(this.ctx), n = s.group({ class: "apexcharts-slices" }), o = this.initialAngle, h = this.initialAngle, c = this.initialAngle, d = this.initialAngle; this.strokeWidth = i.config.stroke.show ? i.config.stroke.width : 0; for (var g = 0; g < e.length; g++) { var f = s.group({ class: "apexcharts-series apexcharts-pie-series", seriesName: P.escapeString(i.globals.seriesNames[g]), rel: g + 1, "data:realIndex": g }); n.add(f), h = d, c = (o = c) + e[g], d = h + this.prevSectorAngleArr[g]; var x = c < o ? this.fullAngle + c - o : c - o, b = r.fillPath({ seriesNumber: g, size: this.sliceSizes[g], value: t[g] }), v = this.getChangedPath(h, d), y = s.drawPath({ d: v, stroke: Array.isArray(this.lineColorArr) ? this.lineColorArr[g] : this.lineColorArr, strokeWidth: 0, fill: b, fillOpacity: i.config.fill.opacity, classes: "apexcharts-pie-area apexcharts-".concat(this.chartType.toLowerCase(), "-slice-").concat(g) }); if (y.attr({ index: 0, j: g }), a.setSelectionFilter(y, 0, g), i.config.chart.dropShadow.enabled) { var w = i.config.chart.dropShadow; a.dropShadow(y, w, g) } this.addListeners(y, this.donutDataLabels), X.setAttrs(y.node, { "data:angle": x, "data:startAngle": o, "data:strokeWidth": this.strokeWidth, "data:value": t[g] }); var l = { x: 0, y: 0 }; this.chartType === "pie" || this.chartType === "polarArea" ? l = P.polarToCartesian(this.centerX, this.centerY, i.globals.radialSize / 1.25 + i.config.plotOptions.pie.dataLabels.offset, (o + x / 2) % this.fullAngle) : this.chartType === "donut" && (l = P.polarToCartesian(this.centerX, this.centerY, (i.globals.radialSize + this.donutSize) / 2 + i.config.plotOptions.pie.dataLabels.offset, (o + x / 2) % this.fullAngle)), f.add(y); var u = 0; if (!this.initialAnim || i.globals.resized || i.globals.dataChanged ? this.animBeginArr.push(0) : ((u = x / this.fullAngle * i.config.chart.animations.speed) === 0 && (u = 1), this.animDur = u + this.animDur, this.animBeginArr.push(this.animDur)), this.dynamicAnim && i.globals.dataChanged ? this.animatePaths(y, { size: this.sliceSizes[g], endAngle: c, startAngle: o, prevStartAngle: h, prevEndAngle: d, animateStartingPos: !0, i: g, animBeginArr: this.animBeginArr, shouldSetPrevPaths: !0, dur: i.config.chart.animations.dynamicAnimation.speed }) : this.animatePaths(y, { size: this.sliceSizes[g], endAngle: c, startAngle: o, i: g, totalItems: e.length - 1, animBeginArr: this.animBeginArr, dur: u }), i.config.plotOptions.pie.expandOnClick && this.chartType !== "polarArea" && y.node.addEventListener("mouseup", this.pieClicked.bind(this, g)), i.globals.selectedDataPoints[0] !== void 0 && i.globals.selectedDataPoints[0].indexOf(g) > -1 && this.pieClicked(g), i.config.dataLabels.enabled) { var m = l.x, A = l.y, k = 100 * x / this.fullAngle + "%"; if (x !== 0 && i.config.plotOptions.pie.dataLabels.minAngleToShowLabel < e[g]) { var S = i.config.dataLabels.formatter; S !== void 0 && (k = S(i.globals.seriesPercent[g][0], { seriesIndex: g, w: i })); var L = i.globals.dataLabels.style.colors[g], C = s.group({ class: "apexcharts-datalabels" }), I = s.drawText({ x: m, y: A, text: k, textAnchor: "middle", fontSize: i.config.dataLabels.style.fontSize, fontFamily: i.config.dataLabels.style.fontFamily, fontWeight: i.config.dataLabels.style.fontWeight, foreColor: L }); if (C.add(I), i.config.dataLabels.dropShadow.enabled) { var z = i.config.dataLabels.dropShadow; a.dropShadow(I, z) } I.node.classList.add("apexcharts-pie-label"), i.config.chart.animations.animate && i.globals.resized === !1 && (I.node.classList.add("apexcharts-pie-label-delay"), I.node.style.animationDelay = i.config.chart.animations.speed / 940 + "s"), this.sliceLabels.push(C) } } } return n } }, { key: "addListeners", value: function (e, t) { var i = new X(this.ctx); e.node.addEventListener("mouseenter", i.pathMouseEnter.bind(this, e)), e.node.addEventListener("mouseleave", i.pathMouseLeave.bind(this, e)), e.node.addEventListener("mouseleave", this.revertDataLabelsInner.bind(this, e.node, t)), e.node.addEventListener("mousedown", i.pathMouseDown.bind(this, e)), this.donutDataLabels.total.showAlways || (e.node.addEventListener("mouseenter", this.printDataLabelsInner.bind(this, e.node, t)), e.node.addEventListener("mousedown", this.printDataLabelsInner.bind(this, e.node, t))) } }, { key: "animatePaths", value: function (e, t) { var i = this.w, a = t.endAngle < t.startAngle ? this.fullAngle + t.endAngle - t.startAngle : t.endAngle - t.startAngle, s = a, r = t.startAngle, n = t.startAngle; t.prevStartAngle !== void 0 && t.prevEndAngle !== void 0 && (r = t.prevEndAngle, s = t.prevEndAngle < t.prevStartAngle ? this.fullAngle + t.prevEndAngle - t.prevStartAngle : t.prevEndAngle - t.prevStartAngle), t.i === i.config.series.length - 1 && (a + n > this.fullAngle ? t.endAngle = t.endAngle - (a + n) : a + n < this.fullAngle && (t.endAngle = t.endAngle + (this.fullAngle - (a + n)))), a === this.fullAngle && (a = this.fullAngle - .01), this.animateArc(e, r, n, a, s, t) } }, { key: "animateArc", value: function (e, t, i, a, s, r) { var n, o = this, h = this.w, c = new ve(this.ctx), d = r.size; (isNaN(t) || isNaN(s)) && (t = i, s = a, r.dur = 0); var g = a, f = i, x = t < i ? this.fullAngle + t - i : t - i; h.globals.dataChanged && r.shouldSetPrevPaths && r.prevEndAngle && (n = o.getPiePath({ me: o, startAngle: r.prevStartAngle, angle: r.prevEndAngle < r.prevStartAngle ? this.fullAngle + r.prevEndAngle - r.prevStartAngle : r.prevEndAngle - r.prevStartAngle, size: d }), e.attr({ d: n })), r.dur !== 0 ? e.animate(r.dur, h.globals.easing, r.animBeginArr[r.i]).afterAll(function () { o.chartType !== "pie" && o.chartType !== "donut" && o.chartType !== "polarArea" || this.animate(h.config.chart.animations.dynamicAnimation.speed).attr({ "stroke-width": o.strokeWidth }), r.i === h.config.series.length - 1 && c.animationCompleted(e) }).during(function (b) { g = x + (a - x) * b, r.animateStartingPos && (g = s + (a - s) * b, f = t - s + (i - (t - s)) * b), n = o.getPiePath({ me: o, startAngle: f, angle: g, size: d }), e.node.setAttribute("data:pathOrig", n), e.attr({ d: n }) }) : (n = o.getPiePath({ me: o, startAngle: f, angle: a, size: d }), r.isTrack || (h.globals.animationEnded = !0), e.node.setAttribute("data:pathOrig", n), e.attr({ d: n, "stroke-width": o.strokeWidth })) } }, { key: "pieClicked", value: function (e) { var t, i = this.w, a = this, s = a.sliceSizes[e] + (i.config.plotOptions.pie.expandOnClick ? 4 : 0), r = i.globals.dom.Paper.select(".apexcharts-".concat(a.chartType.toLowerCase(), "-slice-").concat(e)).members[0]; if (r.attr("data:pieClicked") !== "true") { var n = i.globals.dom.baseEl.getElementsByClassName("apexcharts-pie-area"); Array.prototype.forEach.call(n, function (d) { d.setAttribute("data:pieClicked", "false"); var g = d.getAttribute("data:pathOrig"); g && d.setAttribute("d", g) }), i.globals.capturedDataPointIndex = e, r.attr("data:pieClicked", "true"); var o = parseInt(r.attr("data:startAngle"), 10), h = parseInt(r.attr("data:angle"), 10); t = a.getPiePath({ me: a, startAngle: o, angle: h, size: s }), h !== 360 && r.plot(t) } else { r.attr({ "data:pieClicked": "false" }), this.revertDataLabelsInner(r.node, this.donutDataLabels); var c = r.attr("data:pathOrig"); r.attr({ d: c }) } } }, { key: "getChangedPath", value: function (e, t) { var i = ""; return this.dynamicAnim && this.w.globals.dataChanged && (i = this.getPiePath({ me: this, startAngle: e, angle: t - e, size: this.size })), i } }, { key: "getPiePath", value: function (e) { var t, i = e.me, a = e.startAngle, s = e.angle, r = e.size, n = new X(this.ctx), o = a, h = Math.PI * (o - 90) / 180, c = s + a; Math.ceil(c) >= this.fullAngle + this.w.config.plotOptions.pie.startAngle % this.fullAngle && (c = this.fullAngle + this.w.config.plotOptions.pie.startAngle % this.fullAngle - .01), Math.ceil(c) > this.fullAngle && (c -= this.fullAngle); var d = Math.PI * (c - 90) / 180, g = i.centerX + r * Math.cos(h), f = i.centerY + r * Math.sin(h), x = i.centerX + r * Math.cos(d), b = i.centerY + r * Math.sin(d), v = P.polarToCartesian(i.centerX, i.centerY, i.donutSize, c), y = P.polarToCartesian(i.centerX, i.centerY, i.donutSize, o), w = s > 180 ? 1 : 0, l = ["M", g, f, "A", r, r, 0, w, 1, x, b]; return t = i.chartType === "donut" ? [].concat(l, ["L", v.x, v.y, "A", i.donutSize, i.donutSize, 0, w, 0, y.x, y.y, "L", g, f, "z"]).join(" ") : i.chartType === "pie" || i.chartType === "polarArea" ? [].concat(l, ["L", i.centerX, i.centerY, "L", g, f]).join(" ") : [].concat(l).join(" "), n.roundPathCorners(t, 2 * this.strokeWidth) } }, { key: "drawPolarElements", value: function (e) { var t = this.w, i = new Ot(this.ctx), a = new X(this.ctx), s = new Gt(this.ctx), r = a.group(), n = a.group(), o = i.niceScale(0, Math.ceil(this.maxY), 0), h = o.result.reverse(), c = o.result.length; this.maxY = o.niceMax; for (var d = t.globals.radialSize, g = d / (c - 1), f = 0; f < c - 1; f++) { var x = a.drawCircle(d); if (x.attr({ cx: this.centerX, cy: this.centerY, fill: "none", "stroke-width": t.config.plotOptions.polarArea.rings.strokeWidth, stroke: t.config.plotOptions.polarArea.rings.strokeColor }), t.config.yaxis[0].show) { var b = s.drawYAxisTexts(this.centerX, this.centerY - d + parseInt(t.config.yaxis[0].labels.style.fontSize, 10) / 2, f, h[f]); n.add(b) } r.add(x), d -= g } this.drawSpokes(e), e.add(r), e.add(n) } }, { key: "renderInnerDataLabels", value: function (e, t, i) { var a = this.w, s = new X(this.ctx), r = t.total.show; e.node.innerHTML = "", e.node.style.opacity = i.opacity; var n, o, h = i.centerX, c = i.centerY; n = t.name.color === void 0 ? a.globals.colors[0] : t.name.color; var d = t.name.fontSize, g = t.name.fontFamily, f = t.name.fontWeight; o = t.value.color === void 0 ? a.config.chart.foreColor : t.value.color; var x = t.value.formatter, b = "", v = ""; if (r ? (n = t.total.color, d = t.total.fontSize, g = t.total.fontFamily, f = t.total.fontWeight, v = t.total.label, b = t.total.formatter(a)) : a.globals.series.length === 1 && (b = x(a.globals.series[0], a), v = a.globals.seriesNames[0]), v && (v = t.name.formatter(v, t.total.show, a)), t.name.show) { var y = s.drawText({ x: h, y: c + parseFloat(t.name.offsetY), text: v, textAnchor: "middle", foreColor: n, fontSize: d, fontWeight: f, fontFamily: g }); y.node.classList.add("apexcharts-datalabel-label"), e.add(y) } if (t.value.show) { var w = t.name.show ? parseFloat(t.value.offsetY) + 16 : t.value.offsetY, l = s.drawText({ x: h, y: c + w, text: b, textAnchor: "middle", foreColor: o, fontWeight: t.value.fontWeight, fontSize: t.value.fontSize, fontFamily: t.value.fontFamily }); l.node.classList.add("apexcharts-datalabel-value"), e.add(l) } return e } }, { key: "printInnerLabels", value: function (e, t, i, a) { var s, r = this.w; a ? s = e.name.color === void 0 ? r.globals.colors[parseInt(a.parentNode.getAttribute("rel"), 10) - 1] : e.name.color : r.globals.series.length > 1 && e.total.show && (s = e.total.color); var n = r.globals.dom.baseEl.querySelector(".apexcharts-datalabel-label"), o = r.globals.dom.baseEl.querySelector(".apexcharts-datalabel-value"); i = (0, e.value.formatter)(i, r), a || typeof e.total.formatter != "function" || (i = e.total.formatter(r)); var h = t === e.total.label; t = e.name.formatter(t, h, r), n !== null && (n.textContent = t), o !== null && (o.textContent = i), n !== null && (n.style.fill = s) } }, { key: "printDataLabelsInner", value: function (e, t) { var i = this.w, a = e.getAttribute("data:value"), s = i.globals.seriesNames[parseInt(e.parentNode.getAttribute("rel"), 10) - 1]; i.globals.series.length > 1 && this.printInnerLabels(t, s, a, e); var r = i.globals.dom.baseEl.querySelector(".apexcharts-datalabels-group"); r !== null && (r.style.opacity = 1) } }, { key: "drawSpokes", value: function (e) { var t = this, i = this.w, a = new X(this.ctx), s = i.config.plotOptions.polarArea.spokes; if (s.strokeWidth !== 0) { for (var r = [], n = 360 / i.globals.series.length, o = 0; o < i.globals.series.length; o++)r.push(P.polarToCartesian(this.centerX, this.centerY, i.globals.radialSize, i.config.plotOptions.pie.startAngle + n * o)); r.forEach(function (h, c) { var d = a.drawLine(h.x, h.y, t.centerX, t.centerY, Array.isArray(s.connectorColors) ? s.connectorColors[c] : s.connectorColors); e.add(d) }) } } }, { key: "revertDataLabelsInner", value: function () { var e = this.w; if (this.donutDataLabels.show) { var t = e.globals.dom.Paper.select(".apexcharts-datalabels-group").members[0], i = this.renderInnerDataLabels(t, this.donutDataLabels, { hollowSize: this.donutSize, centerX: this.centerX, centerY: this.centerY, opacity: this.donutDataLabels.show }); e.globals.dom.Paper.select(".apexcharts-radialbar, .apexcharts-pie").members[0].add(i) } } }]), p }(), ia = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w, this.chartType = this.w.config.chart.type, this.initialAnim = this.w.config.chart.animations.enabled, this.dynamicAnim = this.initialAnim && this.w.config.chart.animations.dynamicAnimation.enabled, this.animDur = 0; var t = this.w; this.graphics = new X(this.ctx), this.lineColorArr = t.globals.stroke.colors !== void 0 ? t.globals.stroke.colors : t.globals.colors, this.defaultSize = t.globals.svgHeight < t.globals.svgWidth ? t.globals.gridHeight + 1.5 * t.globals.goldenPadding : t.globals.gridWidth, this.isLog = t.config.yaxis[0].logarithmic, this.logBase = t.config.yaxis[0].logBase, this.coreUtils = new $(this.ctx), this.maxValue = this.isLog ? this.coreUtils.getLogVal(this.logBase, t.globals.maxY, 0) : t.globals.maxY, this.minValue = this.isLog ? this.coreUtils.getLogVal(this.logBase, this.w.globals.minY, 0) : t.globals.minY, this.polygons = t.config.plotOptions.radar.polygons, this.strokeWidth = t.config.stroke.show ? t.config.stroke.width : 0, this.size = this.defaultSize / 2.1 - this.strokeWidth - t.config.chart.dropShadow.blur, t.config.xaxis.labels.show && (this.size = this.size - t.globals.xAxisLabelsWidth / 1.75), t.config.plotOptions.radar.size !== void 0 && (this.size = t.config.plotOptions.radar.size), this.dataRadiusOfPercent = [], this.dataRadius = [], this.angleArr = [], this.yaxisLabelsTextsPos = [] } return R(p, [{ key: "draw", value: function (e) { var t = this, i = this.w, a = new ne(this.ctx), s = [], r = new be(this.ctx); e.length && (this.dataPointsLen = e[i.globals.maxValsInArrayIndex].length), this.disAngle = 2 * Math.PI / this.dataPointsLen; var n = i.globals.gridWidth / 2, o = i.globals.gridHeight / 2, h = n + i.config.plotOptions.radar.offsetX, c = o + i.config.plotOptions.radar.offsetY, d = this.graphics.group({ class: "apexcharts-radar-series apexcharts-plot-series", transform: "translate(".concat(h || 0, ", ").concat(c || 0, ")") }), g = [], f = null, x = null; if (this.yaxisLabels = this.graphics.group({ class: "apexcharts-yaxis" }), e.forEach(function (v, y) { var w = v.length === i.globals.dataPoints, l = t.graphics.group().attr({ class: "apexcharts-series", "data:longestSeries": w, seriesName: P.escapeString(i.globals.seriesNames[y]), rel: y + 1, "data:realIndex": y }); t.dataRadiusOfPercent[y] = [], t.dataRadius[y] = [], t.angleArr[y] = [], v.forEach(function (M, T) { var E = Math.abs(t.maxValue - t.minValue); M -= t.minValue, t.isLog && (M = t.coreUtils.getLogVal(t.logBase, M, 0)), t.dataRadiusOfPercent[y][T] = M / E, t.dataRadius[y][T] = t.dataRadiusOfPercent[y][T] * t.size, t.angleArr[y][T] = T * t.disAngle }), g = t.getDataPointsPos(t.dataRadius[y], t.angleArr[y]); var u = t.createPaths(g, { x: 0, y: 0 }); f = t.graphics.group({ class: "apexcharts-series-markers-wrap apexcharts-element-hidden" }), x = t.graphics.group({ class: "apexcharts-datalabels", "data:realIndex": y }), i.globals.delayedElements.push({ el: f.node, index: y }); var m = { i: y, realIndex: y, animationDelay: y, initialSpeed: i.config.chart.animations.speed, dataChangeSpeed: i.config.chart.animations.dynamicAnimation.speed, className: "apexcharts-radar", shouldClipToGrid: !1, bindEventsOnPaths: !1, stroke: i.globals.stroke.colors[y], strokeLineCap: i.config.stroke.lineCap }, A = null; i.globals.previousPaths.length > 0 && (A = t.getPreviousPath(y)); for (var k = 0; k < u.linePathsTo.length; k++) { var S = t.graphics.renderPaths(Y(Y({}, m), {}, { pathFrom: A === null ? u.linePathsFrom[k] : A, pathTo: u.linePathsTo[k], strokeWidth: Array.isArray(t.strokeWidth) ? t.strokeWidth[y] : t.strokeWidth, fill: "none", drawShadow: !1 })); l.add(S); var L = a.fillPath({ seriesNumber: y }), C = t.graphics.renderPaths(Y(Y({}, m), {}, { pathFrom: A === null ? u.areaPathsFrom[k] : A, pathTo: u.areaPathsTo[k], strokeWidth: 0, fill: L, drawShadow: !1 })); if (i.config.chart.dropShadow.enabled) { var I = new ie(t.ctx), z = i.config.chart.dropShadow; I.dropShadow(C, Object.assign({}, z, { noUserSpaceOnUse: !0 }), y) } l.add(C) } v.forEach(function (M, T) { var E = new ye(t.ctx).getMarkerConfig({ cssClass: "apexcharts-marker", seriesIndex: y, dataPointIndex: T }), O = t.graphics.drawMarker(g[T].x, g[T].y, E); O.attr("rel", T), O.attr("j", T), O.attr("index", y), O.node.setAttribute("default-marker-size", E.pSize); var D = t.graphics.group({ class: "apexcharts-series-markers" }); D && D.add(O), f.add(D), l.add(f); var H = i.config.dataLabels; if (H.enabled) { var W = H.formatter(i.globals.series[y][T], { seriesIndex: y, dataPointIndex: T, w: i }); r.plotDataLabelsText({ x: g[T].x, y: g[T].y, text: W, textAnchor: "middle", i: y, j: y, parent: x, offsetCorrection: !1, dataLabelsConfig: Y({}, H) }) } l.add(x) }), s.push(l) }), this.drawPolygons({ parent: d }), i.config.xaxis.labels.show) { var b = this.drawXAxisTexts(); d.add(b) } return s.forEach(function (v) { d.add(v) }), d.add(this.yaxisLabels), d } }, { key: "drawPolygons", value: function (e) { for (var t = this, i = this.w, a = e.parent, s = new Gt(this.ctx), r = i.globals.yAxisScale[0].result.reverse(), n = r.length, o = [], h = this.size / (n - 1), c = 0; c < n; c++)o[c] = h * c; o.reverse(); var d = [], g = []; o.forEach(function (f, x) { var b = P.getPolygonPos(f, t.dataPointsLen), v = ""; b.forEach(function (y, w) { if (x === 0) { var l = t.graphics.drawLine(y.x, y.y, 0, 0, Array.isArray(t.polygons.connectorColors) ? t.polygons.connectorColors[w] : t.polygons.connectorColors); g.push(l) } w === 0 && t.yaxisLabelsTextsPos.push({ x: y.x, y: y.y }), v += y.x + "," + y.y + " " }), d.push(v) }), d.forEach(function (f, x) { var b = t.polygons.strokeColors, v = t.polygons.strokeWidth, y = t.graphics.drawPolygon(f, Array.isArray(b) ? b[x] : b, Array.isArray(v) ? v[x] : v, i.globals.radarPolygons.fill.colors[x]); a.add(y) }), g.forEach(function (f) { a.add(f) }), i.config.yaxis[0].show && this.yaxisLabelsTextsPos.forEach(function (f, x) { var b = s.drawYAxisTexts(f.x, f.y, x, r[x]); t.yaxisLabels.add(b) }) } }, { key: "drawXAxisTexts", value: function () { var e = this, t = this.w, i = t.config.xaxis.labels, a = this.graphics.group({ class: "apexcharts-xaxis" }), s = P.getPolygonPos(this.size, this.dataPointsLen); return t.globals.labels.forEach(function (r, n) { var o = t.config.xaxis.labels.formatter, h = new be(e.ctx); if (s[n]) { var c = e.getTextPos(s[n], e.size), d = o(r, { seriesIndex: -1, dataPointIndex: n, w: t }); h.plotDataLabelsText({ x: c.newX, y: c.newY, text: d, textAnchor: c.textAnchor, i: n, j: n, parent: a, className: "apexcharts-xaxis-label", color: Array.isArray(i.style.colors) && i.style.colors[n] ? i.style.colors[n] : "#a8a8a8", dataLabelsConfig: Y({ textAnchor: c.textAnchor, dropShadow: { enabled: !1 } }, i), offsetCorrection: !1 }).on("click", function (g) { if (typeof t.config.chart.events.xAxisLabelClick == "function") { var f = Object.assign({}, t, { labelIndex: n }); t.config.chart.events.xAxisLabelClick(g, e.ctx, f) } }) } }), a } }, { key: "createPaths", value: function (e, t) { var i = this, a = [], s = [], r = [], n = []; if (e.length) { s = [this.graphics.move(t.x, t.y)], n = [this.graphics.move(t.x, t.y)]; var o = this.graphics.move(e[0].x, e[0].y), h = this.graphics.move(e[0].x, e[0].y); e.forEach(function (c, d) { o += i.graphics.line(c.x, c.y), h += i.graphics.line(c.x, c.y), d === e.length - 1 && (o += "Z", h += "Z") }), a.push(o), r.push(h) } return { linePathsFrom: s, linePathsTo: a, areaPathsFrom: n, areaPathsTo: r } } }, { key: "getTextPos", value: function (e, t) { var i = "middle", a = e.x, s = e.y; return Math.abs(e.x) >= 10 ? e.x > 0 ? (i = "start", a += 10) : e.x < 0 && (i = "end", a -= 10) : i = "middle", Math.abs(e.y) >= t - 10 && (e.y < 0 ? s -= 10 : e.y > 0 && (s += 10)), { textAnchor: i, newX: a, newY: s } } }, { key: "getPreviousPath", value: function (e) { for (var t = this.w, i = null, a = 0; a < t.globals.previousPaths.length; a++) { var s = t.globals.previousPaths[a]; s.paths.length > 0 && parseInt(s.realIndex, 10) === parseInt(e, 10) && t.globals.previousPaths[a].paths[0] !== void 0 && (i = t.globals.previousPaths[a].paths[0].d) } return i } }, { key: "getDataPointsPos", value: function (e, t) { var i = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : this.dataPointsLen; e = e || [], t = t || []; for (var a = [], s = 0; s < i; s++) { var r = {}; r.x = e[s] * Math.sin(t[s]), r.y = -e[s] * Math.cos(t[s]), a.push(r) } return a } }]), p }(), aa = function (p) { Te(t, Vt); var e = Ie(t); function t(i) { var a; F(this, t), (a = e.call(this, i)).ctx = i, a.w = i.w, a.animBeginArr = [0], a.animDur = 0; var s = a.w; return a.startAngle = s.config.plotOptions.radialBar.startAngle, a.endAngle = s.config.plotOptions.radialBar.endAngle, a.totalAngle = Math.abs(s.config.plotOptions.radialBar.endAngle - s.config.plotOptions.radialBar.startAngle), a.trackStartAngle = s.config.plotOptions.radialBar.track.startAngle, a.trackEndAngle = s.config.plotOptions.radialBar.track.endAngle, a.barLabels = a.w.config.plotOptions.radialBar.barLabels, a.donutDataLabels = a.w.config.plotOptions.radialBar.dataLabels, a.radialDataLabels = a.donutDataLabels, a.trackStartAngle || (a.trackStartAngle = a.startAngle), a.trackEndAngle || (a.trackEndAngle = a.endAngle), a.endAngle === 360 && (a.endAngle = 359.99), a.margin = parseInt(s.config.plotOptions.radialBar.track.margin, 10), a.onBarLabelClick = a.onBarLabelClick.bind(Pt(a)), a } return R(t, [{ key: "draw", value: function (i) { var a = this.w, s = new X(this.ctx), r = s.group({ class: "apexcharts-radialbar" }); if (a.globals.noData) return r; var n = s.group(), o = this.defaultSize / 2, h = a.globals.gridWidth / 2, c = this.defaultSize / 2.05; a.config.chart.sparkline.enabled || (c = c - a.config.stroke.width - a.config.chart.dropShadow.blur); var d = a.globals.fill.colors; if (a.config.plotOptions.radialBar.track.show) { var g = this.drawTracks({ size: c, centerX: h, centerY: o, colorArr: d, series: i }); n.add(g) } var f = this.drawArcs({ size: c, centerX: h, centerY: o, colorArr: d, series: i }), x = 360; a.config.plotOptions.radialBar.startAngle < 0 && (x = this.totalAngle); var b = (360 - x) / 360; if (a.globals.radialSize = c - c * b, this.radialDataLabels.value.show) { var v = Math.max(this.radialDataLabels.value.offsetY, this.radialDataLabels.name.offsetY); a.globals.radialSize += v * b } return n.add(f.g), a.config.plotOptions.radialBar.hollow.position === "front" && (f.g.add(f.elHollow), f.dataLabels && f.g.add(f.dataLabels)), r.add(n), r } }, { key: "drawTracks", value: function (i) { var a = this.w, s = new X(this.ctx), r = s.group({ class: "apexcharts-tracks" }), n = new ie(this.ctx), o = new ne(this.ctx), h = this.getStrokeWidth(i); i.size = i.size - h / 2; for (var c = 0; c < i.series.length; c++) { var d = s.group({ class: "apexcharts-radialbar-track apexcharts-track" }); r.add(d), d.attr({ rel: c + 1 }), i.size = i.size - h - this.margin; var g = a.config.plotOptions.radialBar.track, f = o.fillPath({ seriesNumber: 0, size: i.size, fillColors: Array.isArray(g.background) ? g.background[c] : g.background, solid: !0 }), x = this.trackStartAngle, b = this.trackEndAngle; Math.abs(b) + Math.abs(x) >= 360 && (b = 360 - Math.abs(this.startAngle) - .1); var v = s.drawPath({ d: "", stroke: f, strokeWidth: h * parseInt(g.strokeWidth, 10) / 100, fill: "none", strokeOpacity: g.opacity, classes: "apexcharts-radialbar-area" }); if (g.dropShadow.enabled) { var y = g.dropShadow; n.dropShadow(v, y) } d.add(v), v.attr("id", "apexcharts-radialbarTrack-" + c), this.animatePaths(v, { centerX: i.centerX, centerY: i.centerY, endAngle: b, startAngle: x, size: i.size, i: c, totalItems: 2, animBeginArr: 0, dur: 0, isTrack: !0, easing: a.globals.easing }) } return r } }, { key: "drawArcs", value: function (i) { var a = this.w, s = new X(this.ctx), r = new ne(this.ctx), n = new ie(this.ctx), o = s.group(), h = this.getStrokeWidth(i); i.size = i.size - h / 2; var c = a.config.plotOptions.radialBar.hollow.background, d = i.size - h * i.series.length - this.margin * i.series.length - h * parseInt(a.config.plotOptions.radialBar.track.strokeWidth, 10) / 100 / 2, g = d - a.config.plotOptions.radialBar.hollow.margin; a.config.plotOptions.radialBar.hollow.image !== void 0 && (c = this.drawHollowImage(i, o, d, c)); var f = this.drawHollow({ size: g, centerX: i.centerX, centerY: i.centerY, fill: c || "transparent" }); if (a.config.plotOptions.radialBar.hollow.dropShadow.enabled) { var x = a.config.plotOptions.radialBar.hollow.dropShadow; n.dropShadow(f, x) } var b = 1; !this.radialDataLabels.total.show && a.globals.series.length > 1 && (b = 0); var v = null; if (this.radialDataLabels.show) { var y = a.globals.dom.Paper.select(".apexcharts-datalabels-group").members[0]; v = this.renderInnerDataLabels(y, this.radialDataLabels, { hollowSize: d, centerX: i.centerX, centerY: i.centerY, opacity: b }) } a.config.plotOptions.radialBar.hollow.position === "back" && (o.add(f), v && o.add(v)); var w = !1; a.config.plotOptions.radialBar.inverseOrder && (w = !0); for (var l = w ? i.series.length - 1 : 0; w ? l >= 0 : l < i.series.length; w ? l-- : l++) { var u = s.group({ class: "apexcharts-series apexcharts-radial-series", seriesName: P.escapeString(a.globals.seriesNames[l]) }); o.add(u), u.attr({ rel: l + 1, "data:realIndex": l }), this.ctx.series.addCollapsedClassToSeries(u, l), i.size = i.size - h - this.margin; var m = r.fillPath({ seriesNumber: l, size: i.size, value: i.series[l] }), A = this.startAngle, k = void 0, S = P.negToZero(i.series[l] > 100 ? 100 : i.series[l]) / 100, L = Math.round(this.totalAngle * S) + this.startAngle, C = void 0; a.globals.dataChanged && (k = this.startAngle, C = Math.round(this.totalAngle * P.negToZero(a.globals.previousPaths[l]) / 100) + k), Math.abs(L) + Math.abs(A) >= 360 && (L -= .01), Math.abs(C) + Math.abs(k) >= 360 && (C -= .01); var I = L - A, z = Array.isArray(a.config.stroke.dashArray) ? a.config.stroke.dashArray[l] : a.config.stroke.dashArray, M = s.drawPath({ d: "", stroke: m, strokeWidth: h, fill: "none", fillOpacity: a.config.fill.opacity, classes: "apexcharts-radialbar-area apexcharts-radialbar-slice-" + l, strokeDashArray: z }); if (X.setAttrs(M.node, { "data:angle": I, "data:value": i.series[l] }), a.config.chart.dropShadow.enabled) { var T = a.config.chart.dropShadow; n.dropShadow(M, T, l) } if (n.setSelectionFilter(M, 0, l), this.addListeners(M, this.radialDataLabels), u.add(M), M.attr({ index: 0, j: l }), this.barLabels.enabled) { var E = P.polarToCartesian(i.centerX, i.centerY, i.size, A), O = this.barLabels.formatter(a.globals.seriesNames[l], { seriesIndex: l, w: a }), D = ["apexcharts-radialbar-label"]; this.barLabels.onClick || D.push("apexcharts-no-click"); var H = this.barLabels.useSeriesColors ? a.globals.colors[l] : a.config.chart.foreColor; H || (H = a.config.chart.foreColor); var W = E.x + this.barLabels.offsetX, N = E.y + this.barLabels.offsetY, B = s.drawText({ x: W, y: N, text: O, textAnchor: "end", dominantBaseline: "middle", fontFamily: this.barLabels.fontFamily, fontWeight: this.barLabels.fontWeight, fontSize: this.barLabels.fontSize, foreColor: H, cssClass: D.join(" ") }); B.on("click", this.onBarLabelClick), B.attr({ rel: l + 1 }), A !== 0 && B.attr({ "transform-origin": "".concat(W, " ").concat(N), transform: "rotate(".concat(A, " 0 0)") }), u.add(B) } var q = 0; !this.initialAnim || a.globals.resized || a.globals.dataChanged || (q = a.config.chart.animations.speed), a.globals.dataChanged && (q = a.config.chart.animations.dynamicAnimation.speed), this.animDur = q / (1.2 * i.series.length) + this.animDur, this.animBeginArr.push(this.animDur), this.animatePaths(M, { centerX: i.centerX, centerY: i.centerY, endAngle: L, startAngle: A, prevEndAngle: C, prevStartAngle: k, size: i.size, i: l, totalItems: 2, animBeginArr: this.animBeginArr, dur: q, shouldSetPrevPaths: !0, easing: a.globals.easing }) } return { g: o, elHollow: f, dataLabels: v } } }, { key: "drawHollow", value: function (i) { var a = new X(this.ctx).drawCircle(2 * i.size); return a.attr({ class: "apexcharts-radialbar-hollow", cx: i.centerX, cy: i.centerY, r: i.size, fill: i.fill }), a } }, { key: "drawHollowImage", value: function (i, a, s, r) { var n = this.w, o = new ne(this.ctx), h = P.randomId(), c = n.config.plotOptions.radialBar.hollow.image; if (n.config.plotOptions.radialBar.hollow.imageClipped) o.clippedImgArea({ width: s, height: s, image: c, patternID: "pattern".concat(n.globals.cuid).concat(h) }), r = "url(#pattern".concat(n.globals.cuid).concat(h, ")"); else { var d = n.config.plotOptions.radialBar.hollow.imageWidth, g = n.config.plotOptions.radialBar.hollow.imageHeight; if (d === void 0 && g === void 0) { var f = n.globals.dom.Paper.image(c).loaded(function (b) { this.move(i.centerX - b.width / 2 + n.config.plotOptions.radialBar.hollow.imageOffsetX, i.centerY - b.height / 2 + n.config.plotOptions.radialBar.hollow.imageOffsetY) }); a.add(f) } else { var x = n.globals.dom.Paper.image(c).loaded(function (b) { this.move(i.centerX - d / 2 + n.config.plotOptions.radialBar.hollow.imageOffsetX, i.centerY - g / 2 + n.config.plotOptions.radialBar.hollow.imageOffsetY), this.size(d, g) }); a.add(x) } } return r } }, { key: "getStrokeWidth", value: function (i) { var a = this.w; return i.size * (100 - parseInt(a.config.plotOptions.radialBar.hollow.size, 10)) / 100 / (i.series.length + 1) - this.margin } }, { key: "onBarLabelClick", value: function (i) { var a = parseInt(i.target.getAttribute("rel"), 10) - 1, s = this.barLabels.onClick, r = this.w; s && s(r.globals.seriesNames[a], { w: r, seriesIndex: a }) } }]), t }(), sa = function (p) { Te(t, me); var e = Ie(t); function t() { return F(this, t), e.apply(this, arguments) } return R(t, [{ key: "draw", value: function (i, a) { var s = this.w, r = new X(this.ctx); this.rangeBarOptions = this.w.config.plotOptions.rangeBar, this.series = i, this.seriesRangeStart = s.globals.seriesRangeStart, this.seriesRangeEnd = s.globals.seriesRangeEnd, this.barHelpers.initVariables(i); for (var n = r.group({ class: "apexcharts-rangebar-series apexcharts-plot-series" }), o = 0; o < i.length; o++) { var h, c, d, g, f = void 0, x = void 0, b = s.globals.comboCharts ? a[o] : o, v = this.barHelpers.getGroupIndex(b).columnGroupIndex, y = r.group({ class: "apexcharts-series", seriesName: P.escapeString(s.globals.seriesNames[b]), rel: o + 1, "data:realIndex": b }); this.ctx.series.addCollapsedClassToSeries(y, b), i[o].length > 0 && (this.visibleI = this.visibleI + 1); var w = 0, l = 0, u = 0; this.yRatio.length > 1 && (this.yaxisIndex = s.globals.seriesYAxisReverseMap[b][0], u = b); var m = this.barHelpers.initialPositions(); x = m.y, g = m.zeroW, f = m.x, l = m.barWidth, w = m.barHeight, h = m.xDivision, c = m.yDivision, d = m.zeroH; for (var A = r.group({ class: "apexcharts-datalabels", "data:realIndex": b }), k = r.group({ class: "apexcharts-rangebar-goals-markers" }), S = 0; S < s.globals.dataPoints; S++) { var L = this.barHelpers.getStrokeWidth(o, S, b), C = this.seriesRangeStart[o][S], I = this.seriesRangeEnd[o][S], z = null, M = null, T = null, E = { x: f, y: x, strokeWidth: L, elSeries: y }, O = this.seriesLen; if (s.config.plotOptions.bar.rangeBarGroupRows && (O = 1), s.config.series[o].data[S] === void 0) break; if (this.isHorizontal) { T = x + w * this.visibleI; var D = (c - w * O) / 2; if (s.config.series[o].data[S].x) { var H = this.detectOverlappingBars({ i: o, j: S, barYPosition: T, srty: D, barHeight: w, yDivision: c, initPositions: m }); w = H.barHeight, T = H.barYPosition } l = (z = this.drawRangeBarPaths(Y({ indexes: { i: o, j: S, realIndex: b }, barHeight: w, barYPosition: T, zeroW: g, yDivision: c, y1: C, y2: I }, E))).barWidth } else { s.globals.isXNumeric && (f = (s.globals.seriesX[o][S] - s.globals.minX) / this.xRatio - l / 2), M = f + l * this.visibleI; var W = (h - l * O) / 2; if (s.config.series[o].data[S].x) { var N = this.detectOverlappingBars({ i: o, j: S, barXPosition: M, srtx: W, barWidth: l, xDivision: h, initPositions: m }); l = N.barWidth, M = N.barXPosition } w = (z = this.drawRangeColumnPaths(Y({ indexes: { i: o, j: S, realIndex: b, translationsIndex: u }, barWidth: l, barXPosition: M, zeroH: d, xDivision: h }, E))).barHeight } var B = this.barHelpers.drawGoalLine({ barXPosition: z.barXPosition, barYPosition: T, goalX: z.goalX, goalY: z.goalY, barHeight: w, barWidth: l }); B && k.add(B), x = z.y, f = z.x; var q = this.barHelpers.getPathFillColor(i, o, S, b), Z = s.globals.stroke.colors[b]; this.renderSeries({ realIndex: b, pathFill: q, lineFill: Z, j: S, i: o, x: f, y: x, y1: C, y2: I, pathFrom: z.pathFrom, pathTo: z.pathTo, strokeWidth: L, elSeries: y, series: i, barHeight: w, barWidth: l, barXPosition: M, barYPosition: T, columnGroupIndex: v, elDataLabelsWrap: A, elGoalsMarkers: k, visibleSeries: this.visibleI, type: "rangebar" }) } n.add(y) } return n } }, { key: "detectOverlappingBars", value: function (i) { var a = i.i, s = i.j, r = i.barYPosition, n = i.barXPosition, o = i.srty, h = i.srtx, c = i.barHeight, d = i.barWidth, g = i.yDivision, f = i.xDivision, x = i.initPositions, b = this.w, v = [], y = b.config.series[a].data[s].rangeName, w = b.config.series[a].data[s].x, l = Array.isArray(w) ? w.join(" ") : w, u = b.globals.labels.map(function (A) { return Array.isArray(A) ? A.join(" ") : A }).indexOf(l), m = b.globals.seriesRange[a].findIndex(function (A) { return A.x === l && A.overlaps.length > 0 }); return this.isHorizontal ? (r = b.config.plotOptions.bar.rangeBarGroupRows ? o + g * u : o + c * this.visibleI + g * u, m > -1 && !b.config.plotOptions.bar.rangeBarOverlap && (v = b.globals.seriesRange[a][m].overlaps).indexOf(y) > -1 && (r = (c = x.barHeight / v.length) * this.visibleI + g * (100 - parseInt(this.barOptions.barHeight, 10)) / 100 / 2 + c * (this.visibleI + v.indexOf(y)) + g * u)) : (u > -1 && !b.globals.timescaleLabels.length && (n = b.config.plotOptions.bar.rangeBarGroupRows ? h + f * u : h + d * this.visibleI + f * u), m > -1 && !b.config.plotOptions.bar.rangeBarOverlap && (v = b.globals.seriesRange[a][m].overlaps).indexOf(y) > -1 && (n = (d = x.barWidth / v.length) * this.visibleI + f * (100 - parseInt(this.barOptions.barWidth, 10)) / 100 / 2 + d * (this.visibleI + v.indexOf(y)) + f * u)), { barYPosition: r, barXPosition: n, barHeight: c, barWidth: d } } }, { key: "drawRangeColumnPaths", value: function (i) { var a = i.indexes, s = i.x, r = i.xDivision, n = i.barWidth, o = i.barXPosition, h = i.zeroH, c = this.w, d = a.i, g = a.j, f = a.realIndex, x = a.translationsIndex, b = this.yRatio[x], v = this.getRangeValue(f, g), y = Math.min(v.start, v.end), w = Math.max(v.start, v.end); this.series[d][g] === void 0 || this.series[d][g] === null ? y = h : (y = h - y / b, w = h - w / b); var l = Math.abs(w - y), u = this.barHelpers.getColumnPaths({ barXPosition: o, barWidth: n, y1: y, y2: w, strokeWidth: this.strokeWidth, series: this.seriesRangeEnd, realIndex: f, i: f, j: g, w: c }); if (c.globals.isXNumeric) { var m = this.getBarXForNumericXAxis({ x: s, j: g, realIndex: f, barWidth: n }); s = m.x, o = m.barXPosition } else s += r; return { pathTo: u.pathTo, pathFrom: u.pathFrom, barHeight: l, x: s, y: v.start < 0 && v.end < 0 ? y : w, goalY: this.barHelpers.getGoalValues("y", null, h, d, g, x), barXPosition: o } } }, { key: "preventBarOverflow", value: function (i) { var a = this.w; return i < 0 && (i = 0), i > a.globals.gridWidth && (i = a.globals.gridWidth), i } }, { key: "drawRangeBarPaths", value: function (i) { var a = i.indexes, s = i.y, r = i.y1, n = i.y2, o = i.yDivision, h = i.barHeight, c = i.barYPosition, d = i.zeroW, g = this.w, f = a.realIndex, x = a.j, b = this.preventBarOverflow(d + r / this.invertedYRatio), v = this.preventBarOverflow(d + n / this.invertedYRatio), y = this.getRangeValue(f, x), w = Math.abs(v - b), l = this.barHelpers.getBarpaths({ barYPosition: c, barHeight: h, x1: b, x2: v, strokeWidth: this.strokeWidth, series: this.seriesRangeEnd, i: f, realIndex: f, j: x, w: g }); return g.globals.isXNumeric || (s += o), { pathTo: l.pathTo, pathFrom: l.pathFrom, barWidth: w, x: y.start < 0 && y.end < 0 ? b : v, goalX: this.barHelpers.getGoalValues("x", d, null, f, x), y: s } } }, { key: "getRangeValue", value: function (i, a) { var s = this.w; return { start: s.globals.seriesRangeStart[i][a], end: s.globals.seriesRangeEnd[i][a] } } }]), t }(), ra = function () { function p(e) { F(this, p), this.w = e.w, this.lineCtx = e } return R(p, [{ key: "sameValueSeriesFix", value: function (e, t) { var i = this.w; if ((i.config.fill.type === "gradient" || i.config.fill.type[e] === "gradient") && new $(this.lineCtx.ctx, i).seriesHaveSameValues(e)) { var a = t[e].slice(); a[a.length - 1] = a[a.length - 1] + 1e-6, t[e] = a } return t } }, { key: "calculatePoints", value: function (e) { var t = e.series, i = e.realIndex, a = e.x, s = e.y, r = e.i, n = e.j, o = e.prevY, h = this.w, c = [], d = []; if (n === 0) { var g = this.lineCtx.categoryAxisCorrection + h.config.markers.offsetX; h.globals.isXNumeric && (g = (h.globals.seriesX[i][0] - h.globals.minX) / this.lineCtx.xRatio + h.config.markers.offsetX), c.push(g), d.push(P.isNumber(t[r][0]) ? o + h.config.markers.offsetY : null), c.push(a + h.config.markers.offsetX), d.push(P.isNumber(t[r][n + 1]) ? s + h.config.markers.offsetY : null) } else c.push(a + h.config.markers.offsetX), d.push(P.isNumber(t[r][n + 1]) ? s + h.config.markers.offsetY : null); return { x: c, y: d } } }, { key: "checkPreviousPaths", value: function (e) { for (var t = e.pathFromLine, i = e.pathFromArea, a = e.realIndex, s = this.w, r = 0; r < s.globals.previousPaths.length; r++) { var n = s.globals.previousPaths[r]; (n.type === "line" || n.type === "area") && n.paths.length > 0 && parseInt(n.realIndex, 10) === parseInt(a, 10) && (n.type === "line" ? (this.lineCtx.appendPathFrom = !1, t = s.globals.previousPaths[r].paths[0].d) : n.type === "area" && (this.lineCtx.appendPathFrom = !1, i = s.globals.previousPaths[r].paths[0].d, s.config.stroke.show && s.globals.previousPaths[r].paths[1] && (t = s.globals.previousPaths[r].paths[1].d))) } return { pathFromLine: t, pathFromArea: i } } }, { key: "determineFirstPrevY", value: function (e) { var t, i, a, s = e.i, r = e.realIndex, n = e.series, o = e.prevY, h = e.lineYPosition, c = e.translationsIndex, d = this.w, g = d.config.chart.stacked && !d.globals.comboCharts || d.config.chart.stacked && d.globals.comboCharts && (!this.w.config.chart.stackOnlyBar || ((t = this.w.config.series[r]) === null || t === void 0 ? void 0 : t.type) === "bar" || ((i = this.w.config.series[r]) === null || i === void 0 ? void 0 : i.type) === "column"); if (((a = n[s]) === null || a === void 0 ? void 0 : a[0]) !== void 0) o = (h = g && s > 0 ? this.lineCtx.prevSeriesY[s - 1][0] : this.lineCtx.zeroY) - n[s][0] / this.lineCtx.yRatio[c] + 2 * (this.lineCtx.isReversed ? n[s][0] / this.lineCtx.yRatio[c] : 0); else if (g && s > 0 && n[s][0] === void 0) { for (var f = s - 1; f >= 0; f--)if (n[f][0] !== null && n[f][0] !== void 0) { o = h = this.lineCtx.prevSeriesY[f][0]; break } } return { prevY: o, lineYPosition: h } } }]), p }(), na = function (p) { for (var e, t, i, a, s = function (c) { for (var d = [], g = c[0], f = c[1], x = d[0] = et(g, f), b = 1, v = c.length - 1; b < v; b++)g = f, f = c[b + 1], d[b] = .5 * (x + (x = et(g, f))); return d[b] = x, d }(p), r = p.length - 1, n = [], o = 0; o < r; o++)i = et(p[o], p[o + 1]), Math.abs(i) < 1e-6 ? s[o] = s[o + 1] = 0 : (a = (e = s[o] / i) * e + (t = s[o + 1] / i) * t) > 9 && (a = 3 * i / Math.sqrt(a), s[o] = a * e, s[o + 1] = a * t); for (var h = 0; h <= r; h++)a = (p[Math.min(r, h + 1)][0] - p[Math.max(0, h - 1)][0]) / (6 * (1 + s[h] * s[h])), n.push([a || 0, s[h] * a || 0]); return n }, oa = function (p) { var e = na(p), t = p[1], i = p[0], a = [], s = e[1], r = e[0]; a.push(i, [i[0] + r[0], i[1] + r[1], t[0] - s[0], t[1] - s[1], t[0], t[1]]); for (var n = 2, o = e.length; n < o; n++) { var h = p[n], c = e[n]; a.push([h[0] - c[0], h[1] - c[1], h[0], h[1]]) } return a }, la = function (p, e, t) { var i = p.slice(e, t); if (e) { if (t - e > 1 && i[1].length < 6) { var a = i[0].length; i[1] = [2 * i[0][a - 2] - i[0][a - 4], 2 * i[0][a - 1] - i[0][a - 3]].concat(i[1]) } i[0] = i[0].slice(-2) } return i }; function et(p, e) { return (e[1] - p[1]) / (e[0] - p[0]) } var tt = function () { function p(e, t, i) { F(this, p), this.ctx = e, this.w = e.w, this.xyRatios = t, this.pointsChart = !(this.w.config.chart.type !== "bubble" && this.w.config.chart.type !== "scatter") || i, this.scatter = new Yt(this.ctx), this.noNegatives = this.w.globals.minX === Number.MAX_VALUE, this.lineHelpers = new ra(this), this.markers = new ye(this.ctx), this.prevSeriesY = [], this.categoryAxisCorrection = 0, this.yaxisIndex = 0 } return R(p, [{ key: "draw", value: function (e, t, i, a) { var s, r = this.w, n = new X(this.ctx), o = r.globals.comboCharts ? t : r.config.chart.type, h = n.group({ class: "apexcharts-".concat(o, "-series apexcharts-plot-series") }), c = new $(this.ctx, r); this.yRatio = this.xyRatios.yRatio, this.zRatio = this.xyRatios.zRatio, this.xRatio = this.xyRatios.xRatio, this.baseLineY = this.xyRatios.baseLineY, e = c.getLogSeries(e), this.yRatio = c.getLogYRatios(this.yRatio), this.prevSeriesY = []; for (var d = [], g = 0; g < e.length; g++) { e = this.lineHelpers.sameValueSeriesFix(g, e); var f = r.globals.comboCharts ? i[g] : g, x = this.yRatio.length > 1 ? f : 0; this._initSerieVariables(e, g, f); var b = [], v = [], y = [], w = r.globals.padHorizontal + this.categoryAxisCorrection; this.ctx.series.addCollapsedClassToSeries(this.elSeries, f), r.globals.isXNumeric && r.globals.seriesX.length > 0 && (w = (r.globals.seriesX[f][0] - r.globals.minX) / this.xRatio), y.push(w); var l, u = w, m = void 0, A = u, k = this.zeroY, S = this.zeroY; k = this.lineHelpers.determineFirstPrevY({ i: g, realIndex: f, series: e, prevY: k, lineYPosition: 0, translationsIndex: x }).prevY, r.config.stroke.curve === "monotoneCubic" && e[g][0] === null ? b.push(null) : b.push(k), l = k, o === "rangeArea" && (m = S = this.lineHelpers.determineFirstPrevY({ i: g, realIndex: f, series: a, prevY: S, lineYPosition: 0, translationsIndex: x }).prevY, v.push(b[0] !== null ? S : null)); var L = this._calculatePathsFrom({ type: o, series: e, i: g, realIndex: f, translationsIndex: x, prevX: A, prevY: k, prevY2: S }), C = [b[0]], I = [v[0]], z = { type: o, series: e, realIndex: f, translationsIndex: x, i: g, x: w, y: 1, pX: u, pY: l, pathsFrom: L, linePaths: [], areaPaths: [], seriesIndex: i, lineYPosition: 0, xArrj: y, yArrj: b, y2Arrj: v, seriesRangeEnd: a }, M = this._iterateOverDataPoints(Y(Y({}, z), {}, { iterations: o === "rangeArea" ? e[g].length - 1 : void 0, isRangeStart: !0 })); if (o === "rangeArea") { for (var T = this._calculatePathsFrom({ series: a, i: g, realIndex: f, prevX: A, prevY: S }), E = this._iterateOverDataPoints(Y(Y({}, z), {}, { series: a, xArrj: [w], yArrj: C, y2Arrj: I, pY: m, areaPaths: M.areaPaths, pathsFrom: T, iterations: a[g].length - 1, isRangeStart: !1 })), O = M.linePaths.length / 2, D = 0; D < O; D++)M.linePaths[D] = E.linePaths[D + O] + M.linePaths[D]; M.linePaths.splice(O), M.pathFromLine = E.pathFromLine + M.pathFromLine } else M.pathFromArea += "z"; this._handlePaths({ type: o, realIndex: f, i: g, paths: M }), this.elSeries.add(this.elPointsMain), this.elSeries.add(this.elDataLabelsWrap), d.push(this.elSeries) } if (((s = r.config.series[0]) === null || s === void 0 ? void 0 : s.zIndex) !== void 0 && d.sort(function (N, B) { return Number(N.node.getAttribute("zIndex")) - Number(B.node.getAttribute("zIndex")) }), r.config.chart.stacked) for (var H = d.length - 1; H >= 0; H--)h.add(d[H]); else for (var W = 0; W < d.length; W++)h.add(d[W]); return h } }, { key: "_initSerieVariables", value: function (e, t, i) { var a = this.w, s = new X(this.ctx); this.xDivision = a.globals.gridWidth / (a.globals.dataPoints - (a.config.xaxis.tickPlacement === "on" ? 1 : 0)), this.strokeWidth = Array.isArray(a.config.stroke.width) ? a.config.stroke.width[i] : a.config.stroke.width; var r = 0; this.yRatio.length > 1 && (this.yaxisIndex = a.globals.seriesYAxisReverseMap[i], r = i), this.isReversed = a.config.yaxis[this.yaxisIndex] && a.config.yaxis[this.yaxisIndex].reversed, this.zeroY = a.globals.gridHeight - this.baseLineY[r] - (this.isReversed ? a.globals.gridHeight : 0) + (this.isReversed ? 2 * this.baseLineY[r] : 0), this.areaBottomY = this.zeroY, (this.zeroY > a.globals.gridHeight || a.config.plotOptions.area.fillTo === "end") && (this.areaBottomY = a.globals.gridHeight), this.categoryAxisCorrection = this.xDivision / 2, this.elSeries = s.group({ class: "apexcharts-series", zIndex: a.config.series[i].zIndex !== void 0 ? a.config.series[i].zIndex : i, seriesName: P.escapeString(a.globals.seriesNames[i]) }), this.elPointsMain = s.group({ class: "apexcharts-series-markers-wrap", "data:realIndex": i }), this.elDataLabelsWrap = s.group({ class: "apexcharts-datalabels", "data:realIndex": i }); var n = e[t].length === a.globals.dataPoints; this.elSeries.attr({ "data:longestSeries": n, rel: t + 1, "data:realIndex": i }), this.appendPathFrom = !0 } }, { key: "_calculatePathsFrom", value: function (e) { var t, i, a, s, r = e.type, n = e.series, o = e.i, h = e.realIndex, c = e.translationsIndex, d = e.prevX, g = e.prevY, f = e.prevY2, x = this.w, b = new X(this.ctx); if (n[o][0] === null) { for (var v = 0; v < n[o].length; v++)if (n[o][v] !== null) { d = this.xDivision * v, g = this.zeroY - n[o][v] / this.yRatio[c], t = b.move(d, g), i = b.move(d, this.areaBottomY); break } } else t = b.move(d, g), r === "rangeArea" && (t = b.move(d, f) + b.line(d, g)), i = b.move(d, this.areaBottomY) + b.line(d, g); if (a = b.move(0, this.zeroY) + b.line(0, this.zeroY), s = b.move(0, this.zeroY) + b.line(0, this.zeroY), x.globals.previousPaths.length > 0) { var y = this.lineHelpers.checkPreviousPaths({ pathFromLine: a, pathFromArea: s, realIndex: h }); a = y.pathFromLine, s = y.pathFromArea } return { prevX: d, prevY: g, linePath: t, areaPath: i, pathFromLine: a, pathFromArea: s } } }, { key: "_handlePaths", value: function (e) { var t = e.type, i = e.realIndex, a = e.i, s = e.paths, r = this.w, n = new X(this.ctx), o = new ne(this.ctx); this.prevSeriesY.push(s.yArrj), r.globals.seriesXvalues[i] = s.xArrj, r.globals.seriesYvalues[i] = s.yArrj; var h = r.config.forecastDataPoints; if (h.count > 0 && t !== "rangeArea") { var c = r.globals.seriesXvalues[i][r.globals.seriesXvalues[i].length - h.count - 1], d = n.drawRect(c, 0, r.globals.gridWidth, r.globals.gridHeight, 0); r.globals.dom.elForecastMask.appendChild(d.node); var g = n.drawRect(0, 0, c, r.globals.gridHeight, 0); r.globals.dom.elNonForecastMask.appendChild(g.node) } this.pointsChart || r.globals.delayedElements.push({ el: this.elPointsMain.node, index: i }); var f = { i: a, realIndex: i, animationDelay: a, initialSpeed: r.config.chart.animations.speed, dataChangeSpeed: r.config.chart.animations.dynamicAnimation.speed, className: "apexcharts-".concat(t) }; if (t === "area") for (var x = o.fillPath({ seriesNumber: i }), b = 0; b < s.areaPaths.length; b++) { var v = n.renderPaths(Y(Y({}, f), {}, { pathFrom: s.pathFromArea, pathTo: s.areaPaths[b], stroke: "none", strokeWidth: 0, strokeLineCap: null, fill: x })); this.elSeries.add(v) } if (r.config.stroke.show && !this.pointsChart) { var y = null; if (t === "line") y = o.fillPath({ seriesNumber: i, i: a }); else if (r.config.stroke.fill.type === "solid") y = r.globals.stroke.colors[i]; else { var w = r.config.fill; r.config.fill = r.config.stroke.fill, y = o.fillPath({ seriesNumber: i, i: a }), r.config.fill = w } for (var l = 0; l < s.linePaths.length; l++) { var u = y; t === "rangeArea" && (u = o.fillPath({ seriesNumber: i })); var m = Y(Y({}, f), {}, { pathFrom: s.pathFromLine, pathTo: s.linePaths[l], stroke: y, strokeWidth: this.strokeWidth, strokeLineCap: r.config.stroke.lineCap, fill: t === "rangeArea" ? u : "none" }), A = n.renderPaths(m); if (this.elSeries.add(A), A.attr("fill-rule", "evenodd"), h.count > 0 && t !== "rangeArea") { var k = n.renderPaths(m); k.node.setAttribute("stroke-dasharray", h.dashArray), h.strokeWidth && k.node.setAttribute("stroke-width", h.strokeWidth), this.elSeries.add(k), k.attr("clip-path", "url(#forecastMask".concat(r.globals.cuid, ")")), A.attr("clip-path", "url(#nonForecastMask".concat(r.globals.cuid, ")")) } } } } }, { key: "_iterateOverDataPoints", value: function (e) { var t, i, a = this, s = e.type, r = e.series, n = e.iterations, o = e.realIndex, h = e.translationsIndex, c = e.i, d = e.x, g = e.y, f = e.pX, x = e.pY, b = e.pathsFrom, v = e.linePaths, y = e.areaPaths, w = e.seriesIndex, l = e.lineYPosition, u = e.xArrj, m = e.yArrj, A = e.y2Arrj, k = e.isRangeStart, S = e.seriesRangeEnd, L = this.w, C = new X(this.ctx), I = this.yRatio, z = b.prevY, M = b.linePath, T = b.areaPath, E = b.pathFromLine, O = b.pathFromArea, D = P.isNumber(L.globals.minYArr[o]) ? L.globals.minYArr[o] : L.globals.minY; n || (n = L.globals.dataPoints > 1 ? L.globals.dataPoints - 1 : L.globals.dataPoints); var H = function (Q, ee) { return ee - Q / I[h] + 2 * (a.isReversed ? Q / I[h] : 0) }, W = g, N = L.config.chart.stacked && !L.globals.comboCharts || L.config.chart.stacked && L.globals.comboCharts && (!this.w.config.chart.stackOnlyBar || ((t = this.w.config.series[o]) === null || t === void 0 ? void 0 : t.type) === "bar" || ((i = this.w.config.series[o]) === null || i === void 0 ? void 0 : i.type) === "column"), B = L.config.stroke.curve; Array.isArray(B) && (B = Array.isArray(w) ? B[w[c]] : B[c]); for (var q, Z = 0, j = 0; j < n; j++) { var se = r[c][j + 1] === void 0 || r[c][j + 1] === null; if (L.globals.isXNumeric) { var V = L.globals.seriesX[o][j + 1]; L.globals.seriesX[o][j + 1] === void 0 && (V = L.globals.seriesX[o][n - 1]), d = (V - L.globals.minX) / this.xRatio } else d += this.xDivision; N ? c > 0 && L.globals.collapsedSeries.length < L.config.series.length - 1 ? l = this.prevSeriesY[function (Q) { for (var ee = Q; ee > 0; ee--) { if (!(L.globals.collapsedSeriesIndices.indexOf(w?.[ee] || ee) > -1)) return ee; ee-- } return 0 }(c - 1)][j + 1] : l = this.zeroY : l = this.zeroY, se ? g = H(D, l) : (g = H(r[c][j + 1], l), s === "rangeArea" && (W = H(S[c][j + 1], l))), u.push(d), !se || L.config.stroke.curve !== "smooth" && L.config.stroke.curve !== "monotoneCubic" ? (m.push(g), A.push(W)) : (m.push(null), A.push(null)); var G = this.lineHelpers.calculatePoints({ series: r, x: d, y: g, realIndex: o, i: c, j, prevY: z }), _ = this._createPaths({ type: s, series: r, i: c, realIndex: o, j, x: d, y: g, y2: W, xArrj: u, yArrj: m, y2Arrj: A, pX: f, pY: x, pathState: Z, segmentStartX: q, linePath: M, areaPath: T, linePaths: v, areaPaths: y, curve: B, isRangeStart: k }); y = _.areaPaths, v = _.linePaths, f = _.pX, x = _.pY, Z = _.pathState, q = _.segmentStartX, T = _.areaPath, M = _.linePath, !this.appendPathFrom || B === "monotoneCubic" && s === "rangeArea" || (E += C.line(d, this.zeroY), O += C.line(d, this.zeroY)), this.handleNullDataPoints(r, G, c, j, o), this._handleMarkersAndLabels({ type: s, pointsPos: G, i: c, j, realIndex: o, isRangeStart: k }) } return { yArrj: m, xArrj: u, pathFromArea: O, areaPaths: y, pathFromLine: E, linePaths: v, linePath: M, areaPath: T } } }, { key: "_handleMarkersAndLabels", value: function (e) { var t = e.type, i = e.pointsPos, a = e.isRangeStart, s = e.i, r = e.j, n = e.realIndex, o = this.w, h = new be(this.ctx); if (this.pointsChart) this.scatter.draw(this.elSeries, r, { realIndex: n, pointsPos: i, zRatio: this.zRatio, elParent: this.elPointsMain }); else { o.globals.series[s].length > 1 && this.elPointsMain.node.classList.add("apexcharts-element-hidden"); var c = this.markers.plotChartMarkers(i, n, r + 1); c !== null && this.elPointsMain.add(c) } var d = h.drawDataLabel({ type: t, isRangeStart: a, pos: i, i: n, j: r + 1 }); d !== null && this.elDataLabelsWrap.add(d) } }, { key: "_createPaths", value: function (e) { var t = e.type, i = e.series, a = e.i; e.realIndex; var s = e.j, r = e.x, n = e.y, o = e.xArrj, h = e.yArrj, c = e.y2, d = e.y2Arrj, g = e.pX, f = e.pY, x = e.pathState, b = e.segmentStartX, v = e.linePath, y = e.areaPath, w = e.linePaths, l = e.areaPaths, u = e.curve, m = e.isRangeStart; this.w; var A, k = new X(this.ctx), S = this.areaBottomY, L = t === "rangeArea", C = t === "rangeArea" && m; switch (u) { case "monotoneCubic": var I = m ? h : d; switch (x) { case 0: if (I[s + 1] === null) break; x = 1; case 1: if (!(L ? o.length === i[a].length : s === i[a].length - 2)) break; case 2: var z = m ? o : o.slice().reverse(), M = m ? I : I.slice().reverse(), T = (A = M, z.map(function (V, G) { return [V, A[G]] }).filter(function (V) { return V[1] !== null })), E = T.length > 1 ? oa(T) : T, O = []; L && (C ? l = T : O = l.reverse()); var D = 0, H = 0; if (function (V, G) { for (var _ = function (Se) { var ae = [], le = 0; return Se.forEach(function (Si) { Si !== null ? le++ : le > 0 && (ae.push(le), le = 0) }), le > 0 && ae.push(le), ae }(V), Q = [], ee = 0, oe = 0; ee < _.length; oe += _[ee++])Q[ee] = la(G, oe, oe + _[ee]); return Q }(M, E).forEach(function (V) { D++; var G = function (ee) { for (var oe = "", Se = 0; Se < ee.length; Se++) { var ae = ee[Se], le = ae.length; le > 4 ? (oe += "C".concat(ae[0], ", ").concat(ae[1]), oe += ", ".concat(ae[2], ", ").concat(ae[3]), oe += ", ".concat(ae[4], ", ").concat(ae[5])) : le > 2 && (oe += "S".concat(ae[0], ", ").concat(ae[1]), oe += ", ".concat(ae[2], ", ").concat(ae[3])) } return oe }(V), _ = H, Q = (H += V.length) - 1; C ? v = k.move(T[_][0], T[_][1]) + G : L ? v = k.move(O[_][0], O[_][1]) + k.line(T[_][0], T[_][1]) + G + k.line(O[Q][0], O[Q][1]) : (v = k.move(T[_][0], T[_][1]) + G, y = v + k.line(T[Q][0], S) + k.line(T[_][0], S) + "z", l.push(y)), w.push(v) }), L && D > 1 && !C) { var W = w.slice(D).reverse(); w.splice(D), W.forEach(function (V) { return w.push(V) }) } x = 0 }break; case "smooth": var N = .35 * (r - g); if (i[a][s] === null) x = 0; else switch (x) { case 0: if (b = g, v = C ? k.move(g, d[s]) + k.line(g, f) : k.move(g, f), y = k.move(g, f), x = 1, s < i[a].length - 2) { var B = k.curve(g + N, f, r - N, n, r, n); v += B, y += B; break } case 1: if (i[a][s + 1] === null) v += C ? k.line(g, c) : k.move(g, f), y += k.line(g, S) + k.line(b, S) + "z", w.push(v), l.push(y), x = -1; else { var q = k.curve(g + N, f, r - N, n, r, n); v += q, y += q, s >= i[a].length - 2 && (C && (v += k.curve(r, n, r, n, r, c) + k.move(r, c)), y += k.curve(r, n, r, n, r, S) + k.line(b, S) + "z", w.push(v), l.push(y), x = -1) } }g = r, f = n; break; default: var Z = function (V, G, _) { var Q = []; switch (V) { case "stepline": Q = k.line(G, null, "H") + k.line(null, _, "V"); break; case "linestep": Q = k.line(null, _, "V") + k.line(G, null, "H"); break; case "straight": Q = k.line(G, _) }return Q }; if (i[a][s] === null) x = 0; else switch (x) { case 0: if (b = g, v = C ? k.move(g, d[s]) + k.line(g, f) : k.move(g, f), y = k.move(g, f), x = 1, s < i[a].length - 2) { var j = Z(u, r, n); v += j, y += j; break } case 1: if (i[a][s + 1] === null) v += C ? k.line(g, c) : k.move(g, f), y += k.line(g, S) + k.line(b, S) + "z", w.push(v), l.push(y), x = -1; else { var se = Z(u, r, n); v += se, y += se, s >= i[a].length - 2 && (C && (v += k.line(r, c)), y += k.line(r, S) + k.line(b, S) + "z", w.push(v), l.push(y), x = -1) } }g = r, f = n }return { linePaths: w, areaPaths: l, pX: g, pY: f, pathState: x, segmentStartX: b, linePath: v, areaPath: y } } }, { key: "handleNullDataPoints", value: function (e, t, i, a, s) { var r = this.w; if (e[i][a] === null && r.config.markers.showNullDataPoints || e[i].length === 1) { var n = this.strokeWidth - r.config.markers.strokeWidth / 2; n > 0 || (n = 0); var o = this.markers.plotChartMarkers(t, s, a + 1, n, !0); o !== null && this.elPointsMain.add(o) } } }]), p }(); window.TreemapSquared = {}, window.TreemapSquared.generate = function () { function p(n, o, h, c) { this.xoffset = n, this.yoffset = o, this.height = c, this.width = h, this.shortestEdge = function () { return Math.min(this.height, this.width) }, this.getCoordinates = function (d) { var g, f = [], x = this.xoffset, b = this.yoffset, v = s(d) / this.height, y = s(d) / this.width; if (this.width >= this.height) for (g = 0; g < d.length; g++)f.push([x, b, x + v, b + d[g] / v]), b += d[g] / v; else for (g = 0; g < d.length; g++)f.push([x, b, x + d[g] / y, b + y]), x += d[g] / y; return f }, this.cutArea = function (d) { var g; if (this.width >= this.height) { var f = d / this.height, x = this.width - f; g = new p(this.xoffset + f, this.yoffset, x, this.height) } else { var b = d / this.width, v = this.height - b; g = new p(this.xoffset, this.yoffset + b, this.width, v) } return g } } function e(n, o, h, c, d) { c = c === void 0 ? 0 : c, d = d === void 0 ? 0 : d; var g = t(function (f, x) { var b, v = [], y = x / s(f); for (b = 0; b < f.length; b++)v[b] = f[b] * y; return v }(n, o * h), [], new p(c, d, o, h), []); return function (f) { var x, b, v = []; for (x = 0; x < f.length; x++)for (b = 0; b < f[x].length; b++)v.push(f[x][b]); return v }(g) } function t(n, o, h, c) { var d, g, f; if (n.length !== 0) return d = h.shortestEdge(), function (x, b, v) { var y; if (x.length === 0) return !0; (y = x.slice()).push(b); var w = i(x, v), l = i(y, v); return w >= l }(o, g = n[0], d) ? (o.push(g), t(n.slice(1), o, h, c)) : (f = h.cutArea(s(o), c), c.push(h.getCoordinates(o)), t(n, [], f, c)), c; c.push(h.getCoordinates(o)) } function i(n, o) { var h = Math.min.apply(Math, n), c = Math.max.apply(Math, n), d = s(n); return Math.max(Math.pow(o, 2) * c / Math.pow(d, 2), Math.pow(d, 2) / (Math.pow(o, 2) * h)) } function a(n) { return n && n.constructor === Array } function s(n) { var o, h = 0; for (o = 0; o < n.length; o++)h += n[o]; return h } function r(n) { var o, h = 0; if (a(n[0])) for (o = 0; o < n.length; o++)h += r(n[o]); else h = s(n); return h } return function n(o, h, c, d, g) { d = d === void 0 ? 0 : d, g = g === void 0 ? 0 : g; var f, x, b = [], v = []; if (a(o[0])) { for (x = 0; x < o.length; x++)b[x] = r(o[x]); for (f = e(b, h, c, d, g), x = 0; x < o.length; x++)v.push(n(o[x], f[x][2] - f[x][0], f[x][3] - f[x][1], f[x][0], f[x][1])) } else v = e(o, h, c, d, g); return v } }(); var he, Ce, ha = function () { function p(e, t) { F(this, p), this.ctx = e, this.w = e.w, this.strokeWidth = this.w.config.stroke.width, this.helpers = new Bt(e), this.dynamicAnim = this.w.config.chart.animations.dynamicAnimation, this.labels = [] } return R(p, [{ key: "draw", value: function (e) { var t = this, i = this.w, a = new X(this.ctx), s = new ne(this.ctx), r = a.group({ class: "apexcharts-treemap" }); if (i.globals.noData) return r; var n = []; return e.forEach(function (o) { var h = o.map(function (c) { return Math.abs(c) }); n.push(h) }), this.negRange = this.helpers.checkColorRange(), i.config.series.forEach(function (o, h) { o.data.forEach(function (c) { Array.isArray(t.labels[h]) || (t.labels[h] = []), t.labels[h].push(c.x) }) }), window.TreemapSquared.generate(n, i.globals.gridWidth, i.globals.gridHeight).forEach(function (o, h) { var c = a.group({ class: "apexcharts-series apexcharts-treemap-series", seriesName: P.escapeString(i.globals.seriesNames[h]), rel: h + 1, "data:realIndex": h }); if (i.config.chart.dropShadow.enabled) { var d = i.config.chart.dropShadow; new ie(t.ctx).dropShadow(r, d, h) } var g = a.group({ class: "apexcharts-data-labels" }); o.forEach(function (f, x) { var b = f[0], v = f[1], y = f[2], w = f[3], l = a.drawRect(b, v, y - b, w - v, i.config.plotOptions.treemap.borderRadius, "#fff", 1, t.strokeWidth, i.config.plotOptions.treemap.useFillColorAsStroke ? m : i.globals.stroke.colors[h]); l.attr({ cx: b, cy: v, index: h, i: h, j: x, width: y - b, height: w - v }); var u = t.helpers.getShadeColor(i.config.chart.type, h, x, t.negRange), m = u.color; i.config.series[h].data[x] !== void 0 && i.config.series[h].data[x].fillColor && (m = i.config.series[h].data[x].fillColor); var A = s.fillPath({ color: m, seriesNumber: h, dataPointIndex: x }); l.node.classList.add("apexcharts-treemap-rect"), l.attr({ fill: A }), t.helpers.addListeners(l); var k = { x: b + (y - b) / 2, y: v + (w - v) / 2, width: 0, height: 0 }, S = { x: b, y: v, width: y - b, height: w - v }; if (i.config.chart.animations.enabled && !i.globals.dataChanged) { var L = 1; i.globals.resized || (L = i.config.chart.animations.speed), t.animateTreemap(l, k, S, L) } if (i.globals.dataChanged) { var C = 1; t.dynamicAnim.enabled && i.globals.shouldAnimate && (C = t.dynamicAnim.speed, i.globals.previousPaths[h] && i.globals.previousPaths[h][x] && i.globals.previousPaths[h][x].rect && (k = i.globals.previousPaths[h][x].rect), t.animateTreemap(l, k, S, C)) } var I = t.getFontSize(f), z = i.config.dataLabels.formatter(t.labels[h][x], { value: i.globals.series[h][x], seriesIndex: h, dataPointIndex: x, w: i }); i.config.plotOptions.treemap.dataLabels.format === "truncate" && (I = parseInt(i.config.dataLabels.style.fontSize, 10), z = t.truncateLabels(z, I, b, v, y, w)); var M = null; i.globals.series[h][x] && (M = t.helpers.calculateDataLabels({ text: z, x: (b + y) / 2, y: (v + w) / 2 + t.strokeWidth / 2 + I / 3, i: h, j: x, colorProps: u, fontSize: I, series: e })), i.config.dataLabels.enabled && M && t.rotateToFitLabel(M, I, z, b, v, y, w), c.add(l), M !== null && c.add(M) }), c.add(g), r.add(c) }), r } }, { key: "getFontSize", value: function (e) { var t = this.w, i, a, s, r, n = function o(h) { var c, d = 0; if (Array.isArray(h[0])) for (c = 0; c < h.length; c++)d += o(h[c]); else for (c = 0; c < h.length; c++)d += h[c].length; return d }(this.labels) / function o(h) { var c, d = 0; if (Array.isArray(h[0])) for (c = 0; c < h.length; c++)d += o(h[c]); else for (c = 0; c < h.length; c++)d += 1; return d }(this.labels); return i = e[2] - e[0], a = e[3] - e[1], s = i * a, r = Math.pow(s, .5), Math.min(r / n, parseInt(t.config.dataLabels.style.fontSize, 10)) } }, { key: "rotateToFitLabel", value: function (e, t, i, a, s, r, n) { var o = new X(this.ctx), h = o.getTextRects(i, t); if (h.width + this.w.config.stroke.width + 5 > r - a && h.width <= n - s) { var c = o.rotateAroundCenter(e.node); e.node.setAttribute("transform", "rotate(-90 ".concat(c.x, " ").concat(c.y, ") translate(").concat(h.height / 3, ")")) } } }, { key: "truncateLabels", value: function (e, t, i, a, s, r) { var n = new X(this.ctx), o = n.getTextRects(e, t).width + this.w.config.stroke.width + 5 > s - i && r - a > s - i ? r - a : s - i, h = n.getTextBasedOnMaxWidth({ text: e, maxWidth: o, fontSize: t }); return e.length !== h.length && o / t < 5 ? "" : h } }, { key: "animateTreemap", value: function (e, t, i, a) { var s = new ve(this.ctx); s.animateRect(e, { x: t.x, y: t.y, width: t.width, height: t.height }, { x: i.x, y: i.y, width: i.width, height: i.height }, a, function () { s.animationCompleted(e) }) } }]), p }(), _t = 86400, ca = 10 / _t, da = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w, this.timeScaleArray = [], this.utc = this.w.config.xaxis.labels.datetimeUTC } return R(p, [{ key: "calculateTimeScaleTicks", value: function (e, t) { var i = this, a = this.w; if (a.globals.allSeriesCollapsed) return a.globals.labels = [], a.globals.timescaleLabels = [], []; var s = new K(this.ctx), r = (t - e) / 864e5; this.determineInterval(r), a.globals.disableZoomIn = !1, a.globals.disableZoomOut = !1, r < ca ? a.globals.disableZoomIn = !0 : r > 5e4 && (a.globals.disableZoomOut = !0); var n = s.getTimeUnitsfromTimestamp(e, t, this.utc), o = a.globals.gridWidth / r, h = o / 24, c = h / 60, d = c / 60, g = Math.floor(24 * r), f = Math.floor(1440 * r), x = Math.floor(r * _t), b = Math.floor(r), v = Math.floor(r / 30), y = Math.floor(r / 365), w = { minMillisecond: n.minMillisecond, minSecond: n.minSecond, minMinute: n.minMinute, minHour: n.minHour, minDate: n.minDate, minMonth: n.minMonth, minYear: n.minYear }, l = { firstVal: w, currentMillisecond: w.minMillisecond, currentSecond: w.minSecond, currentMinute: w.minMinute, currentHour: w.minHour, currentMonthDate: w.minDate, currentDate: w.minDate, currentMonth: w.minMonth, currentYear: w.minYear, daysWidthOnXAxis: o, hoursWidthOnXAxis: h, minutesWidthOnXAxis: c, secondsWidthOnXAxis: d, numberOfSeconds: x, numberOfMinutes: f, numberOfHours: g, numberOfDays: b, numberOfMonths: v, numberOfYears: y }; switch (this.tickInterval) { case "years": this.generateYearScale(l); break; case "months": case "half_year": this.generateMonthScale(l); break; case "months_days": case "months_fortnight": case "days": case "week_days": this.generateDayScale(l); break; case "hours": this.generateHourScale(l); break; case "minutes_fives": case "minutes": this.generateMinuteScale(l); break; case "seconds_tens": case "seconds_fives": case "seconds": this.generateSecondScale(l) }var u = this.timeScaleArray.map(function (m) { var A = { position: m.position, unit: m.unit, year: m.year, day: m.day ? m.day : 1, hour: m.hour ? m.hour : 0, month: m.month + 1 }; return m.unit === "month" ? Y(Y({}, A), {}, { day: 1, value: m.value + 1 }) : m.unit === "day" || m.unit === "hour" ? Y(Y({}, A), {}, { value: m.value }) : m.unit === "minute" ? Y(Y({}, A), {}, { value: m.value, minute: m.value }) : m.unit === "second" ? Y(Y({}, A), {}, { value: m.value, minute: m.minute, second: m.second }) : m }); return u.filter(function (m) { var A = 1, k = Math.ceil(a.globals.gridWidth / 120), S = m.value; a.config.xaxis.tickAmount !== void 0 && (k = a.config.xaxis.tickAmount), u.length > k && (A = Math.floor(u.length / k)); var L = !1, C = !1; switch (i.tickInterval) { case "years": m.unit === "year" && (L = !0); break; case "half_year": A = 7, m.unit === "year" && (L = !0); break; case "months": A = 1, m.unit === "year" && (L = !0); break; case "months_fortnight": A = 15, m.unit !== "year" && m.unit !== "month" || (L = !0), S === 30 && (C = !0); break; case "months_days": A = 10, m.unit === "month" && (L = !0), S === 30 && (C = !0); break; case "week_days": A = 8, m.unit === "month" && (L = !0); break; case "days": A = 1, m.unit === "month" && (L = !0); break; case "hours": m.unit === "day" && (L = !0); break; case "minutes_fives": case "seconds_fives": S % 5 != 0 && (C = !0); break; case "seconds_tens": S % 10 != 0 && (C = !0) }if (i.tickInterval === "hours" || i.tickInterval === "minutes_fives" || i.tickInterval === "seconds_tens" || i.tickInterval === "seconds_fives") { if (!C) return !0 } else if ((S % A == 0 || L) && !C) return !0 }) } }, { key: "recalcDimensionsBasedOnFormat", value: function (e, t) { var i = this.w, a = this.formatDates(e), s = this.removeOverlappingTS(a); i.globals.timescaleLabels = s.slice(), new Ne(this.ctx).plotCoords() } }, { key: "determineInterval", value: function (e) { var t = 24 * e, i = 60 * t; switch (!0) { case e / 365 > 5: this.tickInterval = "years"; break; case e > 800: this.tickInterval = "half_year"; break; case e > 180: this.tickInterval = "months"; break; case e > 90: this.tickInterval = "months_fortnight"; break; case e > 60: this.tickInterval = "months_days"; break; case e > 30: this.tickInterval = "week_days"; break; case e > 2: this.tickInterval = "days"; break; case t > 2.4: this.tickInterval = "hours"; break; case i > 15: this.tickInterval = "minutes_fives"; break; case i > 5: this.tickInterval = "minutes"; break; case i > 1: this.tickInterval = "seconds_tens"; break; case 60 * i > 20: this.tickInterval = "seconds_fives"; break; default: this.tickInterval = "seconds" } } }, { key: "generateYearScale", value: function (e) { var t = e.firstVal, i = e.currentMonth, a = e.currentYear, s = e.daysWidthOnXAxis, r = e.numberOfYears, n = t.minYear, o = 0, h = new K(this.ctx), c = "year"; if (t.minDate > 1 || t.minMonth > 0) { var d = h.determineRemainingDaysOfYear(t.minYear, t.minMonth, t.minDate); o = (h.determineDaysOfYear(t.minYear) - d + 1) * s, n = t.minYear + 1, this.timeScaleArray.push({ position: o, value: n, unit: c, year: n, month: P.monthMod(i + 1) }) } else t.minDate === 1 && t.minMonth === 0 && this.timeScaleArray.push({ position: o, value: n, unit: c, year: a, month: P.monthMod(i + 1) }); for (var g = n, f = o, x = 0; x < r; x++)g++, f = h.determineDaysOfYear(g - 1) * s + f, this.timeScaleArray.push({ position: f, value: g, unit: c, year: g, month: 1 }) } }, { key: "generateMonthScale", value: function (e) { var t = e.firstVal, i = e.currentMonthDate, a = e.currentMonth, s = e.currentYear, r = e.daysWidthOnXAxis, n = e.numberOfMonths, o = a, h = 0, c = new K(this.ctx), d = "month", g = 0; if (t.minDate > 1) { h = (c.determineDaysOfMonths(a + 1, t.minYear) - i + 1) * r, o = P.monthMod(a + 1); var f = s + g, x = P.monthMod(o), b = o; o === 0 && (d = "year", b = f, x = 1, f += g += 1), this.timeScaleArray.push({ position: h, value: b, unit: d, year: f, month: x }) } else this.timeScaleArray.push({ position: h, value: o, unit: d, year: s, month: P.monthMod(a) }); for (var v = o + 1, y = h, w = 0, l = 1; w < n; w++, l++) { (v = P.monthMod(v)) === 0 ? (d = "year", g += 1) : d = "month"; var u = this._getYear(s, v, g); y = c.determineDaysOfMonths(v, u) * r + y; var m = v === 0 ? u : v; this.timeScaleArray.push({ position: y, value: m, unit: d, year: u, month: v === 0 ? 1 : v }), v++ } } }, { key: "generateDayScale", value: function (e) { var t = e.firstVal, i = e.currentMonth, a = e.currentYear, s = e.hoursWidthOnXAxis, r = e.numberOfDays, n = new K(this.ctx), o = "day", h = t.minDate + 1, c = h, d = function (l, u, m) { return l > n.determineDaysOfMonths(u + 1, m) && (c = 1, o = "month", f = u += 1), u }, g = (24 - t.minHour) * s, f = h, x = d(c, i, a); t.minHour === 0 && t.minDate === 1 ? (g = 0, f = P.monthMod(t.minMonth), o = "month", c = t.minDate) : t.minDate !== 1 && t.minHour === 0 && t.minMinute === 0 && (g = 0, h = t.minDate, f = h, x = d(c = h, i, a)), this.timeScaleArray.push({ position: g, value: f, unit: o, year: this._getYear(a, x, 0), month: P.monthMod(x), day: c }); for (var b = g, v = 0; v < r; v++) { o = "day", x = d(c += 1, x, this._getYear(a, x, 0)); var y = this._getYear(a, x, 0); b = 24 * s + b; var w = c === 1 ? P.monthMod(x) : c; this.timeScaleArray.push({ position: b, value: w, unit: o, year: y, month: P.monthMod(x), day: w }) } } }, { key: "generateHourScale", value: function (e) { var t = e.firstVal, i = e.currentDate, a = e.currentMonth, s = e.currentYear, r = e.minutesWidthOnXAxis, n = e.numberOfHours, o = new K(this.ctx), h = "hour", c = function (A, k) { return A > o.determineDaysOfMonths(k + 1, s) && (v = 1, k += 1), { month: k, date: v } }, d = function (A, k) { return A > o.determineDaysOfMonths(k + 1, s) ? k += 1 : k }, g = 60 - (t.minMinute + t.minSecond / 60), f = g * r, x = t.minHour + 1, b = x; g === 60 && (f = 0, b = x = t.minHour); var v = i; b >= 24 && (b = 0, v += 1, h = "day"); var y = c(v, a).month; y = d(v, y), this.timeScaleArray.push({ position: f, value: x, unit: h, day: v, hour: b, year: s, month: P.monthMod(y) }), b++; for (var w = f, l = 0; l < n; l++) { h = "hour", b >= 24 && (b = 0, h = "day", y = c(v += 1, y).month, y = d(v, y)); var u = this._getYear(s, y, 0); w = 60 * r + w; var m = b === 0 ? v : b; this.timeScaleArray.push({ position: w, value: m, unit: h, hour: b, day: v, year: u, month: P.monthMod(y) }), b++ } } }, { key: "generateMinuteScale", value: function (e) { for (var t = e.currentMillisecond, i = e.currentSecond, a = e.currentMinute, s = e.currentHour, r = e.currentDate, n = e.currentMonth, o = e.currentYear, h = e.minutesWidthOnXAxis, c = e.secondsWidthOnXAxis, d = e.numberOfMinutes, g = a + 1, f = r, x = n, b = o, v = s, y = (60 - i - t / 1e3) * c, w = 0; w < d; w++)g >= 60 && (g = 0, (v += 1) === 24 && (v = 0)), this.timeScaleArray.push({ position: y, value: g, unit: "minute", hour: v, minute: g, day: f, year: this._getYear(b, x, 0), month: P.monthMod(x) }), y += h, g++ } }, { key: "generateSecondScale", value: function (e) { for (var t = e.currentMillisecond, i = e.currentSecond, a = e.currentMinute, s = e.currentHour, r = e.currentDate, n = e.currentMonth, o = e.currentYear, h = e.secondsWidthOnXAxis, c = e.numberOfSeconds, d = i + 1, g = a, f = r, x = n, b = o, v = s, y = (1e3 - t) / 1e3 * h, w = 0; w < c; w++)d >= 60 && (d = 0, ++g >= 60 && (g = 0, ++v === 24 && (v = 0))), this.timeScaleArray.push({ position: y, value: d, unit: "second", hour: v, minute: g, second: d, day: f, year: this._getYear(b, x, 0), month: P.monthMod(x) }), y += h, d++ } }, { key: "createRawDateString", value: function (e, t) { var i = e.year; return e.month === 0 && (e.month = 1), i += "-" + ("0" + e.month.toString()).slice(-2), e.unit === "day" ? i += e.unit === "day" ? "-" + ("0" + t).slice(-2) : "-01" : i += "-" + ("0" + (e.day ? e.day : "1")).slice(-2), e.unit === "hour" ? i += e.unit === "hour" ? "T" + ("0" + t).slice(-2) : "T00" : i += "T" + ("0" + (e.hour ? e.hour : "0")).slice(-2), e.unit === "minute" ? i += ":" + ("0" + t).slice(-2) : i += ":" + (e.minute ? ("0" + e.minute).slice(-2) : "00"), e.unit === "second" ? i += ":" + ("0" + t).slice(-2) : i += ":00", this.utc && (i += ".000Z"), i } }, { key: "formatDates", value: function (e) { var t = this, i = this.w; return e.map(function (a) { var s = a.value.toString(), r = new K(t.ctx), n = t.createRawDateString(a, s), o = r.getDate(r.parseDate(n)); if (t.utc || (o = r.getDate(r.parseDateWithTimezone(n))), i.config.xaxis.labels.format === void 0) { var h = "dd MMM", c = i.config.xaxis.labels.datetimeFormatter; a.unit === "year" && (h = c.year), a.unit === "month" && (h = c.month), a.unit === "day" && (h = c.day), a.unit === "hour" && (h = c.hour), a.unit === "minute" && (h = c.minute), a.unit === "second" && (h = c.second), s = r.formatDate(o, h) } else s = r.formatDate(o, i.config.xaxis.labels.format); return { dateString: n, position: a.position, value: s, unit: a.unit, year: a.year, month: a.month } }) } }, { key: "removeOverlappingTS", value: function (e) { var t, i = this, a = new X(this.ctx), s = !1; e.length > 0 && e[0].value && e.every(function (o) { return o.value.length === e[0].value.length }) && (s = !0, t = a.getTextRects(e[0].value).width); var r = 0, n = e.map(function (o, h) { if (h > 0 && i.w.config.xaxis.labels.hideOverlappingLabels) { var c = s ? t : a.getTextRects(e[r].value).width, d = e[r].position; return o.position > d + c + 10 ? (r = h, o) : null } return o }); return n = n.filter(function (o) { return o !== null }) } }, { key: "_getYear", value: function (e, t, i) { return e + Math.floor(t / 12) + i } }]), p }(), ga = function () { function p(e, t) { F(this, p), this.ctx = t, this.w = t.w, this.el = e } return R(p, [{ key: "setupElements", value: function () { var e = this.w.globals, t = this.w.config, i = t.chart.type; e.axisCharts = ["line", "area", "bar", "rangeBar", "rangeArea", "candlestick", "boxPlot", "scatter", "bubble", "radar", "heatmap", "treemap"].indexOf(i) > -1, e.xyCharts = ["line", "area", "bar", "rangeBar", "rangeArea", "candlestick", "boxPlot", "scatter", "bubble"].indexOf(i) > -1, e.isBarHorizontal = (t.chart.type === "bar" || t.chart.type === "rangeBar" || t.chart.type === "boxPlot") && t.plotOptions.bar.horizontal, e.chartClass = ".apexcharts" + e.chartID, e.dom.baseEl = this.el, e.dom.elWrap = document.createElement("div"), X.setAttrs(e.dom.elWrap, { id: e.chartClass.substring(1), class: "apexcharts-canvas " + e.chartClass.substring(1) }), this.el.appendChild(e.dom.elWrap), e.dom.Paper = new window.SVG.Doc(e.dom.elWrap), e.dom.Paper.attr({ class: "apexcharts-svg", "xmlns:data": "ApexChartsNS", transform: "translate(".concat(t.chart.offsetX, ", ").concat(t.chart.offsetY, ")") }), e.dom.Paper.node.style.background = t.theme.mode !== "dark" || t.chart.background ? t.theme.mode !== "light" || t.chart.background ? t.chart.background : "#fff" : "#424242", this.setSVGDimensions(), e.dom.elLegendForeign = document.createElementNS(e.SVGNS, "foreignObject"), X.setAttrs(e.dom.elLegendForeign, { x: 0, y: 0, width: e.svgWidth, height: e.svgHeight }), e.dom.elLegendWrap = document.createElement("div"), e.dom.elLegendWrap.classList.add("apexcharts-legend"), e.dom.elLegendWrap.setAttribute("xmlns", "http://www.w3.org/1999/xhtml"), e.dom.elLegendForeign.appendChild(e.dom.elLegendWrap), e.dom.Paper.node.appendChild(e.dom.elLegendForeign), e.dom.elGraphical = e.dom.Paper.group().attr({ class: "apexcharts-inner apexcharts-graphical" }), e.dom.elDefs = e.dom.Paper.defs(), e.dom.Paper.add(e.dom.elGraphical), e.dom.elGraphical.add(e.dom.elDefs) } }, { key: "plotChartType", value: function (e, t) { var i = this.w, a = i.config, s = i.globals, r = { series: [], i: [] }, n = { series: [], i: [] }, o = { series: [], i: [] }, h = { series: [], i: [] }, c = { series: [], i: [] }, d = { series: [], i: [] }, g = { series: [], i: [] }, f = { series: [], i: [] }, x = { series: [], seriesRangeEnd: [], i: [] }, b = a.chart.type !== void 0 ? a.chart.type : "line", v = null, y = 0; s.series.forEach(function (M, T) { var E = e[T].type || b; switch (E) { case "column": case "bar": c.series.push(M), c.i.push(T), i.globals.columnSeries = c; break; case "area": n.series.push(M), n.i.push(T); break; case "line": r.series.push(M), r.i.push(T); break; case "scatter": o.series.push(M), o.i.push(T); break; case "bubble": h.series.push(M), h.i.push(T); break; case "candlestick": d.series.push(M), d.i.push(T); break; case "boxPlot": g.series.push(M), g.i.push(T); break; case "rangeBar": f.series.push(M), f.i.push(T); break; case "rangeArea": x.series.push(s.seriesRangeStart[T]), x.seriesRangeEnd.push(s.seriesRangeEnd[T]), x.i.push(T); break; case "heatmap": case "treemap": case "pie": case "donut": case "polarArea": case "radialBar": case "radar": v = E; break; default: console.warn("You have specified an unrecognized series type (", E, ").") }b !== E && E !== "scatter" && y++ }), y > 0 && (v !== null && console.warn("Chart or series type ", v, " can not appear with other chart or series types."), c.series.length > 0 && a.plotOptions.bar.horizontal && (y -= c.length, c = { series: [], i: [] }, i.globals.columnSeries = { series: [], i: [] }, console.warn("Horizontal bars are not supported in a mixed/combo chart. Please turn off `plotOptions.bar.horizontal`"))), s.comboCharts || (s.comboCharts = y > 0); var w = new tt(this.ctx, t), l = new Qe(this.ctx, t); this.ctx.pie = new Vt(this.ctx); var u = new aa(this.ctx); this.ctx.rangeBar = new sa(this.ctx, t); var m = new ia(this.ctx), A = []; if (s.comboCharts) { var k, S, L = new $(this.ctx); if (n.series.length > 0 && (k = A).push.apply(k, te(L.drawSeriesByGroup(n, s.areaGroups, "area", w))), c.series.length > 0) if (i.config.chart.stacked) { var C = new St(this.ctx, t); A.push(C.draw(c.series, c.i)) } else this.ctx.bar = new me(this.ctx, t), A.push(this.ctx.bar.draw(c.series, c.i)); if (x.series.length > 0 && A.push(w.draw(x.series, "rangeArea", x.i, x.seriesRangeEnd)), r.series.length > 0 && (S = A).push.apply(S, te(L.drawSeriesByGroup(r, s.lineGroups, "line", w))), d.series.length > 0 && A.push(l.draw(d.series, "candlestick", d.i)), g.series.length > 0 && A.push(l.draw(g.series, "boxPlot", g.i)), f.series.length > 0 && A.push(this.ctx.rangeBar.draw(f.series, f.i)), o.series.length > 0) { var I = new tt(this.ctx, t, !0); A.push(I.draw(o.series, "scatter", o.i)) } if (h.series.length > 0) { var z = new tt(this.ctx, t, !0); A.push(z.draw(h.series, "bubble", h.i)) } } else switch (a.chart.type) { case "line": A = w.draw(s.series, "line"); break; case "area": A = w.draw(s.series, "area"); break; case "bar": a.chart.stacked ? A = new St(this.ctx, t).draw(s.series) : (this.ctx.bar = new me(this.ctx, t), A = this.ctx.bar.draw(s.series)); break; case "candlestick": A = new Qe(this.ctx, t).draw(s.series, "candlestick"); break; case "boxPlot": A = new Qe(this.ctx, t).draw(s.series, a.chart.type); break; case "rangeBar": A = this.ctx.rangeBar.draw(s.series); break; case "rangeArea": A = w.draw(s.seriesRangeStart, "rangeArea", void 0, s.seriesRangeEnd); break; case "heatmap": A = new ta(this.ctx, t).draw(s.series); break; case "treemap": A = new ha(this.ctx, t).draw(s.series); break; case "pie": case "donut": case "polarArea": A = this.ctx.pie.draw(s.series); break; case "radialBar": A = u.draw(s.series); break; case "radar": A = m.draw(s.series); break; default: A = w.draw(s.series) }return A } }, { key: "setSVGDimensions", value: function () { var e = this.w.globals, t = this.w.config; t.chart.width || (t.chart.width = "100%"), t.chart.height || (t.chart.height = "auto"), e.svgWidth = t.chart.width, e.svgHeight = t.chart.height; var i = P.getDimensions(this.el), a = t.chart.width.toString().split(/[0-9]+/g).pop(); a === "%" ? P.isNumber(i[0]) && (i[0].width === 0 && (i = P.getDimensions(this.el.parentNode)), e.svgWidth = i[0] * parseInt(t.chart.width, 10) / 100) : a !== "px" && a !== "" || (e.svgWidth = parseInt(t.chart.width, 10)); var s = String(t.chart.height).toString().split(/[0-9]+/g).pop(); if (e.svgHeight !== "auto" && e.svgHeight !== "") if (s === "%") { var r = P.getDimensions(this.el.parentNode); e.svgHeight = r[1] * parseInt(t.chart.height, 10) / 100 } else e.svgHeight = parseInt(t.chart.height, 10); else e.axisCharts ? e.svgHeight = e.svgWidth / 1.61 : e.svgHeight = e.svgWidth / 1.2; if (e.svgWidth < 0 && (e.svgWidth = 0), e.svgHeight < 0 && (e.svgHeight = 0), X.setAttrs(e.dom.Paper.node, { width: e.svgWidth, height: e.svgHeight }), s !== "%") { var n = t.chart.sparkline.enabled ? 0 : e.axisCharts ? t.chart.parentHeightOffset : 0; e.dom.Paper.node.parentNode.parentNode.style.minHeight = e.svgHeight + n + "px" } e.dom.elWrap.style.width = e.svgWidth + "px", e.dom.elWrap.style.height = e.svgHeight + "px" } }, { key: "shiftGraphPosition", value: function () { var e = this.w.globals, t = e.translateY, i = { transform: "translate(" + e.translateX + ", " + t + ")" }; X.setAttrs(e.dom.elGraphical.node, i) } }, { key: "resizeNonAxisCharts", value: function () { var e = this.w, t = e.globals, i = 0, a = e.config.chart.sparkline.enabled ? 1 : 15; a += e.config.grid.padding.bottom, e.config.legend.position !== "top" && e.config.legend.position !== "bottom" || !e.config.legend.show || e.config.legend.floating || (i = new Dt(this.ctx).legendHelpers.getLegendDimensions().clwh + 10); var s = e.globals.dom.baseEl.querySelector(".apexcharts-radialbar, .apexcharts-pie"), r = 2.05 * e.globals.radialSize; if (s && !e.config.chart.sparkline.enabled && e.config.plotOptions.radialBar.startAngle !== 0) { var n = P.getBoundingClientRect(s); r = n.bottom; var o = n.bottom - n.top; r = Math.max(2.05 * e.globals.radialSize, o) } var h = r + t.translateY + i + a; t.dom.elLegendForeign && t.dom.elLegendForeign.setAttribute("height", h), e.config.chart.height && String(e.config.chart.height).indexOf("%") > 0 || (t.dom.elWrap.style.height = h + "px", X.setAttrs(t.dom.Paper.node, { height: h }), t.dom.Paper.node.parentNode.parentNode.style.minHeight = h + "px") } }, { key: "coreCalculations", value: function () { new rt(this.ctx).init() } }, { key: "resetGlobals", value: function () { var e = this, t = function () { return e.w.config.series.map(function (s) { return [] }) }, i = new Et, a = this.w.globals; i.initGlobalVars(a), a.seriesXvalues = t(), a.seriesYvalues = t() } }, { key: "isMultipleY", value: function () { if (this.w.config.yaxis.constructor === Array && this.w.config.yaxis.length > 1) return this.w.globals.isMultipleYAxis = !0, !0 } }, { key: "xySettings", value: function () { var e = null, t = this.w; if (t.globals.axisCharts) { if (t.config.xaxis.crosshairs.position === "back" && new nt(this.ctx).drawXCrosshairs(), t.config.yaxis[0].crosshairs.position === "back" && new nt(this.ctx).drawYCrosshairs(), t.config.xaxis.type === "datetime" && t.config.xaxis.labels.formatter === void 0) { this.ctx.timeScale = new da(this.ctx); var i = []; isFinite(t.globals.minX) && isFinite(t.globals.maxX) && !t.globals.isBarHorizontal ? i = this.ctx.timeScale.calculateTimeScaleTicks(t.globals.minX, t.globals.maxX) : t.globals.isBarHorizontal && (i = this.ctx.timeScale.calculateTimeScaleTicks(t.globals.minY, t.globals.maxY)), this.ctx.timeScale.recalcDimensionsBasedOnFormat(i) } e = new $(this.ctx).getCalculatedRatios() } return e } }, { key: "updateSourceChart", value: function (e) { this.ctx.w.globals.selection = void 0, this.ctx.updateHelpers._updateOptions({ chart: { selection: { xaxis: { min: e.w.globals.minX, max: e.w.globals.maxX } } } }, !1, !1) } }, { key: "setupBrushHandler", value: function () { var e = this, t = this.w; if (t.config.chart.brush.enabled && typeof t.config.chart.events.selection != "function") { var i = Array.isArray(t.config.chart.brush.targets) ? t.config.chart.brush.targets : [t.config.chart.brush.target]; i.forEach(function (a) { var s = ApexCharts.getChartByID(a); s.w.globals.brushSource = e.ctx, typeof s.w.config.chart.events.zoomed != "function" && (s.w.config.chart.events.zoomed = function () { e.updateSourceChart(s) }), typeof s.w.config.chart.events.scrolled != "function" && (s.w.config.chart.events.scrolled = function () { e.updateSourceChart(s) }) }), t.config.chart.events.selection = function (a, s) { i.forEach(function (r) { ApexCharts.getChartByID(r).ctx.updateHelpers._updateOptions({ xaxis: { min: s.xaxis.min, max: s.xaxis.max } }, !1, !1, !1, !1) }) } } } }]), p }(), ua = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w } return R(p, [{ key: "_updateOptions", value: function (e) { var t = this, i = arguments.length > 1 && arguments[1] !== void 0 && arguments[1], a = !(arguments.length > 2 && arguments[2] !== void 0) || arguments[2], s = !(arguments.length > 3 && arguments[3] !== void 0) || arguments[3], r = arguments.length > 4 && arguments[4] !== void 0 && arguments[4]; return new Promise(function (n) { var o = [t.ctx]; s && (o = t.ctx.getSyncedCharts()), t.ctx.w.globals.isExecCalled && (o = [t.ctx], t.ctx.w.globals.isExecCalled = !1), o.forEach(function (h, c) { var d = h.w; if (d.globals.shouldAnimate = a, i || (d.globals.resized = !0, d.globals.dataChanged = !0, a && h.series.getPreviousPaths()), e && J(e) === "object" && (h.config = new Pe(e), e = $.extendArrayProps(h.config, e, d), h.w.globals.chartID !== t.ctx.w.globals.chartID && delete e.series, d.config = P.extend(d.config, e), r && (d.globals.lastXAxis = e.xaxis ? P.clone(e.xaxis) : [], d.globals.lastYAxis = e.yaxis ? P.clone(e.yaxis) : [], d.globals.initialConfig = P.extend({}, d.config), d.globals.initialSeries = P.clone(d.config.series), e.series))) { for (var g = 0; g < d.globals.collapsedSeriesIndices.length; g++) { var f = d.config.series[d.globals.collapsedSeriesIndices[g]]; d.globals.collapsedSeries[g].data = d.globals.axisCharts ? f.data.slice() : f } for (var x = 0; x < d.globals.ancillaryCollapsedSeriesIndices.length; x++) { var b = d.config.series[d.globals.ancillaryCollapsedSeriesIndices[x]]; d.globals.ancillaryCollapsedSeries[x].data = d.globals.axisCharts ? b.data.slice() : b } h.series.emptyCollapsedSeries(d.config.series) } return h.update(e).then(function () { c === o.length - 1 && n(h) }) }) }) } }, { key: "_updateSeries", value: function (e, t) { var i = this, a = arguments.length > 2 && arguments[2] !== void 0 && arguments[2]; return new Promise(function (s) { var r, n = i.w; return n.globals.shouldAnimate = t, n.globals.dataChanged = !0, t && i.ctx.series.getPreviousPaths(), n.globals.axisCharts ? ((r = e.map(function (o, h) { return i._extendSeries(o, h) })).length === 0 && (r = [{ data: [] }]), n.config.series = r) : n.config.series = e.slice(), a && (n.globals.initialConfig.series = P.clone(n.config.series), n.globals.initialSeries = P.clone(n.config.series)), i.ctx.update().then(function () { s(i.ctx) }) }) } }, { key: "_extendSeries", value: function (e, t) { var i = this.w, a = i.config.series[t]; return Y(Y({}, i.config.series[t]), {}, { name: e.name ? e.name : a?.name, color: e.color ? e.color : a?.color, type: e.type ? e.type : a?.type, group: e.group ? e.group : a?.group, hidden: e.hidden !== void 0 ? e.hidden : a?.hidden, data: e.data ? e.data : a?.data, zIndex: e.zIndex !== void 0 ? e.zIndex : t }) } }, { key: "toggleDataPointSelection", value: function (e, t) { var i = this.w, a = null, s = ".apexcharts-series[data\\:realIndex='".concat(e, "']"); return i.globals.axisCharts ? a = i.globals.dom.Paper.select("".concat(s, " path[j='").concat(t, "'], ").concat(s, " circle[j='").concat(t, "'], ").concat(s, " rect[j='").concat(t, "']")).members[0] : t === void 0 && (a = i.globals.dom.Paper.select("".concat(s, " path[j='").concat(e, "']")).members[0], i.config.chart.type !== "pie" && i.config.chart.type !== "polarArea" && i.config.chart.type !== "donut" || this.ctx.pie.pieClicked(e)), a ? (new X(this.ctx).pathMouseDown(a, null), a.node ? a.node : null) : (console.warn("toggleDataPointSelection: Element not found"), null) } }, { key: "forceXAxisUpdate", value: function (e) { var t = this.w; if (["min", "max"].forEach(function (a) { e.xaxis[a] !== void 0 && (t.config.xaxis[a] = e.xaxis[a], t.globals.lastXAxis[a] = e.xaxis[a]) }), e.xaxis.categories && e.xaxis.categories.length && (t.config.xaxis.categories = e.xaxis.categories), t.config.xaxis.convertedCatToNumeric) { var i = new Le(e); e = i.convertCatToNumericXaxis(e, this.ctx) } return e } }, { key: "forceYAxisUpdate", value: function (e) { return e.chart && e.chart.stacked && e.chart.stackType === "100%" && (Array.isArray(e.yaxis) ? e.yaxis.forEach(function (t, i) { e.yaxis[i].min = 0, e.yaxis[i].max = 100 }) : (e.yaxis.min = 0, e.yaxis.max = 100)), e } }, { key: "revertDefaultAxisMinMax", value: function (e) { var t = this, i = this.w, a = i.globals.lastXAxis, s = i.globals.lastYAxis; e && e.xaxis && (a = e.xaxis), e && e.yaxis && (s = e.yaxis), i.config.xaxis.min = a.min, i.config.xaxis.max = a.max; var r = function (n) { s[n] !== void 0 && (i.config.yaxis[n].min = s[n].min, i.config.yaxis[n].max = s[n].max) }; i.config.yaxis.map(function (n, o) { i.globals.zoomed || s[o] !== void 0 ? r(o) : t.ctx.opts.yaxis[o] !== void 0 && (n.min = t.ctx.opts.yaxis[o].min, n.max = t.ctx.opts.yaxis[o].max) }) } }]), p }(); he = typeof window < "u" ? window : void 0, Ce = function (p, e) { + var t = (this !== void 0 ? this : p).SVG = function (l) { if (t.supported) return l = new t.Doc(l), t.parser.draw || t.prepare(), l }; if (t.ns = "http://www.w3.org/2000/svg", t.xmlns = "http://www.w3.org/2000/xmlns/", t.xlink = "http://www.w3.org/1999/xlink", t.svgjs = "http://svgjs.dev", t.supported = !0, !t.supported) return !1; t.did = 1e3, t.eid = function (l) { return "Svgjs" + c(l) + t.did++ }, t.create = function (l) { var u = e.createElementNS(this.ns, l); return u.setAttribute("id", this.eid(l)), u }, t.extend = function () { var l, u; u = (l = [].slice.call(arguments)).pop(); for (var m = l.length - 1; m >= 0; m--)if (l[m]) for (var A in u) l[m].prototype[A] = u[A]; t.Set && t.Set.inherit && t.Set.inherit() }, t.invent = function (l) { var u = typeof l.create == "function" ? l.create : function () { this.constructor.call(this, t.create(l.create)) }; return l.inherit && (u.prototype = new l.inherit), l.extend && t.extend(u, l.extend), l.construct && t.extend(l.parent || t.Container, l.construct), u }, t.adopt = function (l) { return l ? l.instance ? l.instance : ((u = l.nodeName == "svg" ? l.parentNode instanceof p.SVGElement ? new t.Nested : new t.Doc : l.nodeName == "linearGradient" ? new t.Gradient("linear") : l.nodeName == "radialGradient" ? new t.Gradient("radial") : t[c(l.nodeName)] ? new t[c(l.nodeName)] : new t.Element(l)).type = l.nodeName, u.node = l, l.instance = u, u instanceof t.Doc && u.namespace().defs(), u.setData(JSON.parse(l.getAttribute("svgjs:data")) || {}), u) : null; var u }, t.prepare = function () { var l = e.getElementsByTagName("body")[0], u = (l ? new t.Doc(l) : t.adopt(e.documentElement).nested()).size(2, 0); t.parser = { body: l || e.documentElement, draw: u.style("opacity:0;position:absolute;left:-100%;top:-100%;overflow:hidden").node, poly: u.polyline().node, path: u.path().node, native: t.create("svg") } }, t.parser = { native: t.create("svg") }, e.addEventListener("DOMContentLoaded", function () { t.parser.draw || t.prepare() }, !1), t.regex = { numberAndUnit: /^([+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?)([a-z%]*)$/i, hex: /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i, rgb: /rgb\((\d+),(\d+),(\d+)\)/, reference: /#([a-z0-9\-_]+)/i, transforms: /\)\s*,?\s*/, whitespace: /\s/g, isHex: /^#[a-f0-9]{3,6}$/i, isRgb: /^rgb\(/, isCss: /[^:]+:[^;]+;?/, isBlank: /^(\s+)?$/, isNumber: /^[+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i, isPercent: /^-?[\d\.]+%$/, isImage: /\.(jpg|jpeg|png|gif|svg)(\?[^=]+.*)?/i, delimiter: /[\s,]+/, hyphen: /([^e])\-/gi, pathLetters: /[MLHVCSQTAZ]/gi, isPathLetter: /[MLHVCSQTAZ]/i, numbersWithDots: /((\d?\.\d+(?:e[+-]?\d+)?)((?:\.\d+(?:e[+-]?\d+)?)+))+/gi, dots: /\./g }, t.utils = { map: function (l, u) { for (var m = l.length, A = [], k = 0; k < m; k++)A.push(u(l[k])); return A }, filter: function (l, u) { for (var m = l.length, A = [], k = 0; k < m; k++)u(l[k]) && A.push(l[k]); return A }, filterSVGElements: function (l) { return this.filter(l, function (u) { return u instanceof p.SVGElement }) } }, t.defaults = { attrs: { "fill-opacity": 1, "stroke-opacity": 1, "stroke-width": 0, "stroke-linejoin": "miter", "stroke-linecap": "butt", fill: "#000000", stroke: "#000000", opacity: 1, x: 0, y: 0, cx: 0, cy: 0, width: 0, height: 0, r: 0, rx: 0, ry: 0, offset: 0, "stop-opacity": 1, "stop-color": "#000000", "font-size": 16, "font-family": "Helvetica, Arial, sans-serif", "text-anchor": "start" } }, t.Color = function (l) { var u, m; this.r = 0, this.g = 0, this.b = 0, l && (typeof l == "string" ? t.regex.isRgb.test(l) ? (u = t.regex.rgb.exec(l.replace(t.regex.whitespace, "")), this.r = parseInt(u[1]), this.g = parseInt(u[2]), this.b = parseInt(u[3])) : t.regex.isHex.test(l) && (u = t.regex.hex.exec((m = l).length == 4 ? ["#", m.substring(1, 2), m.substring(1, 2), m.substring(2, 3), m.substring(2, 3), m.substring(3, 4), m.substring(3, 4)].join("") : m), this.r = parseInt(u[1], 16), this.g = parseInt(u[2], 16), this.b = parseInt(u[3], 16)) : J(l) === "object" && (this.r = l.r, this.g = l.g, this.b = l.b)) }, t.extend(t.Color, { toString: function () { return this.toHex() }, toHex: function () { return "#" + d(this.r) + d(this.g) + d(this.b) }, toRgb: function () { return "rgb(" + [this.r, this.g, this.b].join() + ")" }, brightness: function () { return this.r / 255 * .3 + this.g / 255 * .59 + this.b / 255 * .11 }, morph: function (l) { return this.destination = new t.Color(l), this }, at: function (l) { return this.destination ? (l = l < 0 ? 0 : l > 1 ? 1 : l, new t.Color({ r: ~~(this.r + (this.destination.r - this.r) * l), g: ~~(this.g + (this.destination.g - this.g) * l), b: ~~(this.b + (this.destination.b - this.b) * l) })) : this } }), t.Color.test = function (l) { return l += "", t.regex.isHex.test(l) || t.regex.isRgb.test(l) }, t.Color.isRgb = function (l) { return l && typeof l.r == "number" && typeof l.g == "number" && typeof l.b == "number" }, t.Color.isColor = function (l) { return t.Color.isRgb(l) || t.Color.test(l) }, t.Array = function (l, u) { (l = (l || []).valueOf()).length == 0 && u && (l = u.valueOf()), this.value = this.parse(l) }, t.extend(t.Array, { toString: function () { return this.value.join(" ") }, valueOf: function () { return this.value }, parse: function (l) { return l = l.valueOf(), Array.isArray(l) ? l : this.split(l) } }), t.PointArray = function (l, u) { t.Array.call(this, l, u || [[0, 0]]) }, t.PointArray.prototype = new t.Array, t.PointArray.prototype.constructor = t.PointArray; for (var i = { M: function (l, u, m) { return u.x = m.x = l[0], u.y = m.y = l[1], ["M", u.x, u.y] }, L: function (l, u) { return u.x = l[0], u.y = l[1], ["L", l[0], l[1]] }, H: function (l, u) { return u.x = l[0], ["H", l[0]] }, V: function (l, u) { return u.y = l[0], ["V", l[0]] }, C: function (l, u) { return u.x = l[4], u.y = l[5], ["C", l[0], l[1], l[2], l[3], l[4], l[5]] }, Q: function (l, u) { return u.x = l[2], u.y = l[3], ["Q", l[0], l[1], l[2], l[3]] }, S: function (l, u) { return u.x = l[2], u.y = l[3], ["S", l[0], l[1], l[2], l[3]] }, Z: function (l, u, m) { return u.x = m.x, u.y = m.y, ["Z"] } }, a = "mlhvqtcsaz".split(""), s = 0, r = a.length; s < r; ++s)i[a[s]] = function (l) { return function (u, m, A) { if (l == "H") u[0] = u[0] + m.x; else if (l == "V") u[0] = u[0] + m.y; else if (l == "A") u[5] = u[5] + m.x, u[6] = u[6] + m.y; else for (var k = 0, S = u.length; k < S; ++k)u[k] = u[k] + (k % 2 ? m.y : m.x); if (i && typeof i[l] == "function") return i[l](u, m, A) } }(a[s].toUpperCase()); t.PathArray = function (l, u) { t.Array.call(this, l, u || [["M", 0, 0]]) }, t.PathArray.prototype = new t.Array, t.PathArray.prototype.constructor = t.PathArray, t.extend(t.PathArray, { toString: function () { return function (l) { for (var u = 0, m = l.length, A = ""; u < m; u++)A += l[u][0], l[u][1] != null && (A += l[u][1], l[u][2] != null && (A += " ", A += l[u][2], l[u][3] != null && (A += " ", A += l[u][3], A += " ", A += l[u][4], l[u][5] != null && (A += " ", A += l[u][5], A += " ", A += l[u][6], l[u][7] != null && (A += " ", A += l[u][7]))))); return A + " " }(this.value) }, move: function (l, u) { var m = this.bbox(); return m.x, m.y, this }, at: function (l) { if (!this.destination) return this; for (var u = this.value, m = this.destination.value, A = [], k = new t.PathArray, S = 0, L = u.length; S < L; S++) { A[S] = [u[S][0]]; for (var C = 1, I = u[S].length; C < I; C++)A[S][C] = u[S][C] + (m[S][C] - u[S][C]) * l; A[S][0] === "A" && (A[S][4] = +(A[S][4] != 0), A[S][5] = +(A[S][5] != 0)) } return k.value = A, k }, parse: function (l) { if (l instanceof t.PathArray) return l.valueOf(); var u, m = { M: 2, L: 2, H: 1, V: 1, C: 6, S: 4, Q: 4, T: 2, A: 7, Z: 0 }; l = typeof l == "string" ? l.replace(t.regex.numbersWithDots, o).replace(t.regex.pathLetters, " $& ").replace(t.regex.hyphen, "$1 -").trim().split(t.regex.delimiter) : l.reduce(function (I, z) { return [].concat.call(I, z) }, []); var A = [], k = new t.Point, S = new t.Point, L = 0, C = l.length; do t.regex.isPathLetter.test(l[L]) ? (u = l[L], ++L) : u == "M" ? u = "L" : u == "m" && (u = "l"), A.push(i[u].call(null, l.slice(L, L += m[u.toUpperCase()]).map(parseFloat), k, S)); while (C > L); return A }, bbox: function () { return t.parser.draw || t.prepare(), t.parser.path.setAttribute("d", this.toString()), t.parser.path.getBBox() } }), t.Number = t.invent({ create: function (l, u) { this.value = 0, this.unit = u || "", typeof l == "number" ? this.value = isNaN(l) ? 0 : isFinite(l) ? l : l < 0 ? -34e37 : 34e37 : typeof l == "string" ? (u = l.match(t.regex.numberAndUnit)) && (this.value = parseFloat(u[1]), u[5] == "%" ? this.value /= 100 : u[5] == "s" && (this.value *= 1e3), this.unit = u[5]) : l instanceof t.Number && (this.value = l.valueOf(), this.unit = l.unit) }, extend: { toString: function () { return (this.unit == "%" ? ~~(1e8 * this.value) / 1e6 : this.unit == "s" ? this.value / 1e3 : this.value) + this.unit }, toJSON: function () { return this.toString() }, valueOf: function () { return this.value }, plus: function (l) { return l = new t.Number(l), new t.Number(this + l, this.unit || l.unit) }, minus: function (l) { return l = new t.Number(l), new t.Number(this - l, this.unit || l.unit) }, times: function (l) { return l = new t.Number(l), new t.Number(this * l, this.unit || l.unit) }, divide: function (l) { return l = new t.Number(l), new t.Number(this / l, this.unit || l.unit) }, to: function (l) { var u = new t.Number(this); return typeof l == "string" && (u.unit = l), u }, morph: function (l) { return this.destination = new t.Number(l), l.relative && (this.destination.value += this.value), this }, at: function (l) { return this.destination ? new t.Number(this.destination).minus(this).times(l).plus(this) : this } } }), t.Element = t.invent({ create: function (l) { this._stroke = t.defaults.attrs.stroke, this._event = null, this.dom = {}, (this.node = l) && (this.type = l.nodeName, this.node.instance = this, this._stroke = l.getAttribute("stroke") || this._stroke) }, extend: { x: function (l) { return this.attr("x", l) }, y: function (l) { return this.attr("y", l) }, cx: function (l) { return l == null ? this.x() + this.width() / 2 : this.x(l - this.width() / 2) }, cy: function (l) { return l == null ? this.y() + this.height() / 2 : this.y(l - this.height() / 2) }, move: function (l, u) { return this.x(l).y(u) }, center: function (l, u) { return this.cx(l).cy(u) }, width: function (l) { return this.attr("width", l) }, height: function (l) { return this.attr("height", l) }, size: function (l, u) { var m = g(this, l, u); return this.width(new t.Number(m.width)).height(new t.Number(m.height)) }, clone: function (l) { this.writeDataToDom(); var u = b(this.node.cloneNode(!0)); return l ? l.add(u) : this.after(u), u }, remove: function () { return this.parent() && this.parent().removeElement(this), this }, replace: function (l) { return this.after(l).remove(), l }, addTo: function (l) { return l.put(this) }, putIn: function (l) { return l.add(this) }, id: function (l) { return this.attr("id", l) }, show: function () { return this.style("display", "") }, hide: function () { return this.style("display", "none") }, visible: function () { return this.style("display") != "none" }, toString: function () { return this.attr("id") }, classes: function () { var l = this.attr("class"); return l == null ? [] : l.trim().split(t.regex.delimiter) }, hasClass: function (l) { return this.classes().indexOf(l) != -1 }, addClass: function (l) { if (!this.hasClass(l)) { var u = this.classes(); u.push(l), this.attr("class", u.join(" ")) } return this }, removeClass: function (l) { return this.hasClass(l) && this.attr("class", this.classes().filter(function (u) { return u != l }).join(" ")), this }, toggleClass: function (l) { return this.hasClass(l) ? this.removeClass(l) : this.addClass(l) }, reference: function (l) { return t.get(this.attr(l)) }, parent: function (l) { var u = this; if (!u.node.parentNode) return null; if (u = t.adopt(u.node.parentNode), !l) return u; for (; u && u.node instanceof p.SVGElement;) { if (typeof l == "string" ? u.matches(l) : u instanceof l) return u; if (!u.node.parentNode || u.node.parentNode.nodeName == "#document") return null; u = t.adopt(u.node.parentNode) } }, doc: function () { return this instanceof t.Doc ? this : this.parent(t.Doc) }, parents: function (l) { var u = [], m = this; do { if (!(m = m.parent(l)) || !m.node) break; u.push(m) } while (m.parent); return u }, matches: function (l) { return function (u, m) { return (u.matches || u.matchesSelector || u.msMatchesSelector || u.mozMatchesSelector || u.webkitMatchesSelector || u.oMatchesSelector).call(u, m) }(this.node, l) }, native: function () { return this.node }, svg: function (l) { var u = e.createElementNS("http://www.w3.org/2000/svg", "svg"); if (!(l && this instanceof t.Parent)) return u.appendChild(l = e.createElementNS("http://www.w3.org/2000/svg", "svg")), this.writeDataToDom(), l.appendChild(this.node.cloneNode(!0)), u.innerHTML.replace(/^/, "").replace(/<\/svg>$/, ""); u.innerHTML = "" + l.replace(/\n/, "").replace(/<([\w:-]+)([^<]+?)\/>/g, "<$1$2>") + ""; for (var m = 0, A = u.firstChild.childNodes.length; m < A; m++)this.node.appendChild(u.firstChild.firstChild); return this }, writeDataToDom: function () { return (this.each || this.lines) && (this.each ? this : this.lines()).each(function () { this.writeDataToDom() }), this.node.removeAttribute("svgjs:data"), Object.keys(this.dom).length && this.node.setAttribute("svgjs:data", JSON.stringify(this.dom)), this }, setData: function (l) { return this.dom = l, this }, is: function (l) { return function (u, m) { return u instanceof m }(this, l) } } }), t.easing = { "-": function (l) { return l }, "<>": function (l) { return -Math.cos(l * Math.PI) / 2 + .5 }, ">": function (l) { return Math.sin(l * Math.PI / 2) }, "<": function (l) { return 1 - Math.cos(l * Math.PI / 2) } }, t.morph = function (l) { return function (u, m) { return new t.MorphObj(u, m).at(l) } }, t.Situation = t.invent({ create: function (l) { this.init = !1, this.reversed = !1, this.reversing = !1, this.duration = new t.Number(l.duration).valueOf(), this.delay = new t.Number(l.delay).valueOf(), this.start = +new Date + this.delay, this.finish = this.start + this.duration, this.ease = l.ease, this.loop = 0, this.loops = !1, this.animations = {}, this.attrs = {}, this.styles = {}, this.transforms = [], this.once = {} } }), t.FX = t.invent({ create: function (l) { this._target = l, this.situations = [], this.active = !1, this.situation = null, this.paused = !1, this.lastPos = 0, this.pos = 0, this.absPos = 0, this._speed = 1 }, extend: { animate: function (l, u, m) { J(l) === "object" && (u = l.ease, m = l.delay, l = l.duration); var A = new t.Situation({ duration: l || 1e3, delay: m || 0, ease: t.easing[u || "-"] || u }); return this.queue(A), this }, target: function (l) { return l && l instanceof t.Element ? (this._target = l, this) : this._target }, timeToAbsPos: function (l) { return (l - this.situation.start) / (this.situation.duration / this._speed) }, absPosToTime: function (l) { return this.situation.duration / this._speed * l + this.situation.start }, startAnimFrame: function () { this.stopAnimFrame(), this.animationFrame = p.requestAnimationFrame(function () { this.step() }.bind(this)) }, stopAnimFrame: function () { p.cancelAnimationFrame(this.animationFrame) }, start: function () { return !this.active && this.situation && (this.active = !0, this.startCurrent()), this }, startCurrent: function () { return this.situation.start = +new Date + this.situation.delay / this._speed, this.situation.finish = this.situation.start + this.situation.duration / this._speed, this.initAnimations().step() }, queue: function (l) { return (typeof l == "function" || l instanceof t.Situation) && this.situations.push(l), this.situation || (this.situation = this.situations.shift()), this }, dequeue: function () { return this.stop(), this.situation = this.situations.shift(), this.situation && (this.situation instanceof t.Situation ? this.start() : this.situation.call(this)), this }, initAnimations: function () { var l, u = this.situation; if (u.init) return this; for (var m in u.animations) { l = this.target()[m](), Array.isArray(l) || (l = [l]), Array.isArray(u.animations[m]) || (u.animations[m] = [u.animations[m]]); for (var A = l.length; A--;)u.animations[m][A] instanceof t.Number && (l[A] = new t.Number(l[A])), u.animations[m][A] = l[A].morph(u.animations[m][A]) } for (var m in u.attrs) u.attrs[m] = new t.MorphObj(this.target().attr(m), u.attrs[m]); for (var m in u.styles) u.styles[m] = new t.MorphObj(this.target().style(m), u.styles[m]); return u.initialTransformation = this.target().matrixify(), u.init = !0, this }, clearQueue: function () { return this.situations = [], this }, clearCurrent: function () { return this.situation = null, this }, stop: function (l, u) { var m = this.active; return this.active = !1, u && this.clearQueue(), l && this.situation && (!m && this.startCurrent(), this.atEnd()), this.stopAnimFrame(), this.clearCurrent() }, after: function (l) { var u = this.last(); return this.target().on("finished.fx", function m(A) { A.detail.situation == u && (l.call(this, u), this.off("finished.fx", m)) }), this._callStart() }, during: function (l) { var u = this.last(), m = function (A) { A.detail.situation == u && l.call(this, A.detail.pos, t.morph(A.detail.pos), A.detail.eased, u) }; return this.target().off("during.fx", m).on("during.fx", m), this.after(function () { this.off("during.fx", m) }), this._callStart() }, afterAll: function (l) { var u = function m(A) { l.call(this), this.off("allfinished.fx", m) }; return this.target().off("allfinished.fx", u).on("allfinished.fx", u), this._callStart() }, last: function () { return this.situations.length ? this.situations[this.situations.length - 1] : this.situation }, add: function (l, u, m) { return this.last()[m || "animations"][l] = u, this._callStart() }, step: function (l) { var u, m, A; l || (this.absPos = this.timeToAbsPos(+new Date)), this.situation.loops !== !1 ? (u = Math.max(this.absPos, 0), m = Math.floor(u), this.situation.loops === !0 || m < this.situation.loops ? (this.pos = u - m, A = this.situation.loop, this.situation.loop = m) : (this.absPos = this.situation.loops, this.pos = 1, A = this.situation.loop - 1, this.situation.loop = this.situation.loops), this.situation.reversing && (this.situation.reversed = this.situation.reversed != !!((this.situation.loop - A) % 2))) : (this.absPos = Math.min(this.absPos, 1), this.pos = this.absPos), this.pos < 0 && (this.pos = 0), this.situation.reversed && (this.pos = 1 - this.pos); var k = this.situation.ease(this.pos); for (var S in this.situation.once) S > this.lastPos && S <= k && (this.situation.once[S].call(this.target(), this.pos, k), delete this.situation.once[S]); return this.active && this.target().fire("during", { pos: this.pos, eased: k, fx: this, situation: this.situation }), this.situation ? (this.eachAt(), this.pos == 1 && !this.situation.reversed || this.situation.reversed && this.pos == 0 ? (this.stopAnimFrame(), this.target().fire("finished", { fx: this, situation: this.situation }), this.situations.length || (this.target().fire("allfinished"), this.situations.length || (this.target().off(".fx"), this.active = !1)), this.active ? this.dequeue() : this.clearCurrent()) : !this.paused && this.active && this.startAnimFrame(), this.lastPos = k, this) : this }, eachAt: function () { var l, u = this, m = this.target(), A = this.situation; for (var k in A.animations) l = [].concat(A.animations[k]).map(function (C) { return typeof C != "string" && C.at ? C.at(A.ease(u.pos), u.pos) : C }), m[k].apply(m, l); for (var k in A.attrs) l = [k].concat(A.attrs[k]).map(function (I) { return typeof I != "string" && I.at ? I.at(A.ease(u.pos), u.pos) : I }), m.attr.apply(m, l); for (var k in A.styles) l = [k].concat(A.styles[k]).map(function (I) { return typeof I != "string" && I.at ? I.at(A.ease(u.pos), u.pos) : I }), m.style.apply(m, l); if (A.transforms.length) { l = A.initialTransformation, k = 0; for (var S = A.transforms.length; k < S; k++) { var L = A.transforms[k]; L instanceof t.Matrix ? l = L.relative ? l.multiply(new t.Matrix().morph(L).at(A.ease(this.pos))) : l.morph(L).at(A.ease(this.pos)) : (L.relative || L.undo(l.extract()), l = l.multiply(L.at(A.ease(this.pos)))) } m.matrix(l) } return this }, once: function (l, u, m) { var A = this.last(); return m || (l = A.ease(l)), A.once[l] = u, this }, _callStart: function () { return setTimeout(function () { this.start() }.bind(this), 0), this } }, parent: t.Element, construct: { animate: function (l, u, m) { return (this.fx || (this.fx = new t.FX(this))).animate(l, u, m) }, delay: function (l) { return (this.fx || (this.fx = new t.FX(this))).delay(l) }, stop: function (l, u) { return this.fx && this.fx.stop(l, u), this }, finish: function () { return this.fx && this.fx.finish(), this } } }), t.MorphObj = t.invent({ create: function (l, u) { return t.Color.isColor(u) ? new t.Color(l).morph(u) : t.regex.delimiter.test(l) ? t.regex.pathLetters.test(l) ? new t.PathArray(l).morph(u) : new t.Array(l).morph(u) : t.regex.numberAndUnit.test(u) ? new t.Number(l).morph(u) : (this.value = l, void (this.destination = u)) }, extend: { at: function (l, u) { return u < 1 ? this.value : this.destination }, valueOf: function () { return this.value } } }), t.extend(t.FX, { attr: function (l, u, m) { if (J(l) === "object") for (var A in l) this.attr(A, l[A]); else this.add(l, u, "attrs"); return this }, plot: function (l, u, m, A) { return arguments.length == 4 ? this.plot([l, u, m, A]) : this.add("plot", new (this.target()).morphArray(l)) } }), t.Box = t.invent({ create: function (l, u, m, A) { if (!(J(l) !== "object" || l instanceof t.Element)) return t.Box.call(this, l.left != null ? l.left : l.x, l.top != null ? l.top : l.y, l.width, l.height); var k; arguments.length == 4 && (this.x = l, this.y = u, this.width = m, this.height = A), (k = this).x == null && (k.x = 0, k.y = 0, k.width = 0, k.height = 0), k.w = k.width, k.h = k.height, k.x2 = k.x + k.width, k.y2 = k.y + k.height, k.cx = k.x + k.width / 2, k.cy = k.y + k.height / 2 } }), t.BBox = t.invent({ create: function (l) { if (t.Box.apply(this, [].slice.call(arguments)), l instanceof t.Element) { var u; try { if (!e.documentElement.contains) { for (var m = l.node; m.parentNode;)m = m.parentNode; if (m != e) throw new Error("Element not in the dom") } u = l.node.getBBox() } catch { if (l instanceof t.Shape) { t.parser.draw || t.prepare(); var A = l.clone(t.parser.draw.instance).show(); A && A.node && typeof A.node.getBBox == "function" && (u = A.node.getBBox()), A && typeof A.remove == "function" && A.remove() } else u = { x: l.node.clientLeft, y: l.node.clientTop, width: l.node.clientWidth, height: l.node.clientHeight } } t.Box.call(this, u) } }, inherit: t.Box, parent: t.Element, construct: { bbox: function () { return new t.BBox(this) } } }), t.BBox.prototype.constructor = t.BBox, t.Matrix = t.invent({ create: function (l) { var u = x([1, 0, 0, 1, 0, 0]); l = l === null ? u : l instanceof t.Element ? l.matrixify() : typeof l == "string" ? x(l.split(t.regex.delimiter).map(parseFloat)) : arguments.length == 6 ? x([].slice.call(arguments)) : Array.isArray(l) ? x(l) : l && J(l) === "object" ? l : u; for (var m = y.length - 1; m >= 0; --m)this[y[m]] = l[y[m]] != null ? l[y[m]] : u[y[m]] }, extend: { extract: function () { var l = f(this, 0, 1); f(this, 1, 0); var u = 180 / Math.PI * Math.atan2(l.y, l.x) - 90; return { x: this.e, y: this.f, transformedX: (this.e * Math.cos(u * Math.PI / 180) + this.f * Math.sin(u * Math.PI / 180)) / Math.sqrt(this.a * this.a + this.b * this.b), transformedY: (this.f * Math.cos(u * Math.PI / 180) + this.e * Math.sin(-u * Math.PI / 180)) / Math.sqrt(this.c * this.c + this.d * this.d), rotation: u, a: this.a, b: this.b, c: this.c, d: this.d, e: this.e, f: this.f, matrix: new t.Matrix(this) } }, clone: function () { return new t.Matrix(this) }, morph: function (l) { return this.destination = new t.Matrix(l), this }, multiply: function (l) { return new t.Matrix(this.native().multiply(function (u) { return u instanceof t.Matrix || (u = new t.Matrix(u)), u }(l).native())) }, inverse: function () { return new t.Matrix(this.native().inverse()) }, translate: function (l, u) { return new t.Matrix(this.native().translate(l || 0, u || 0)) }, native: function () { for (var l = t.parser.native.createSVGMatrix(), u = y.length - 1; u >= 0; u--)l[y[u]] = this[y[u]]; return l }, toString: function () { return "matrix(" + v(this.a) + "," + v(this.b) + "," + v(this.c) + "," + v(this.d) + "," + v(this.e) + "," + v(this.f) + ")" } }, parent: t.Element, construct: { ctm: function () { return new t.Matrix(this.node.getCTM()) }, screenCTM: function () { if (this instanceof t.Nested) { var l = this.rect(1, 1), u = l.node.getScreenCTM(); return l.remove(), new t.Matrix(u) } return new t.Matrix(this.node.getScreenCTM()) } } }), t.Point = t.invent({ create: function (l, u) { var m; m = Array.isArray(l) ? { x: l[0], y: l[1] } : J(l) === "object" ? { x: l.x, y: l.y } : l != null ? { x: l, y: u ?? l } : { x: 0, y: 0 }, this.x = m.x, this.y = m.y }, extend: { clone: function () { return new t.Point(this) }, morph: function (l, u) { return this.destination = new t.Point(l, u), this } } }), t.extend(t.Element, { point: function (l, u) { return new t.Point(l, u).transform(this.screenCTM().inverse()) } }), t.extend(t.Element, { attr: function (l, u, m) { if (l == null) { for (l = {}, m = (u = this.node.attributes).length - 1; m >= 0; m--)l[u[m].nodeName] = t.regex.isNumber.test(u[m].nodeValue) ? parseFloat(u[m].nodeValue) : u[m].nodeValue; return l } if (J(l) === "object") for (var A in l) this.attr(A, l[A]); else if (u === null) this.node.removeAttribute(l); else { if (u == null) return (u = this.node.getAttribute(l)) == null ? t.defaults.attrs[l] : t.regex.isNumber.test(u) ? parseFloat(u) : u; l == "stroke-width" ? this.attr("stroke", parseFloat(u) > 0 ? this._stroke : null) : l == "stroke" && (this._stroke = u), l != "fill" && l != "stroke" || (t.regex.isImage.test(u) && (u = this.doc().defs().image(u, 0, 0)), u instanceof t.Image && (u = this.doc().defs().pattern(0, 0, function () { this.add(u) }))), typeof u == "number" ? u = new t.Number(u) : t.Color.isColor(u) ? u = new t.Color(u) : Array.isArray(u) && (u = new t.Array(u)), l == "leading" ? this.leading && this.leading(u) : typeof m == "string" ? this.node.setAttributeNS(m, l, u.toString()) : this.node.setAttribute(l, u.toString()), !this.rebuild || l != "font-size" && l != "x" || this.rebuild(l, u) } return this } }), t.extend(t.Element, { transform: function (l, u) { var m; return J(l) !== "object" ? (m = new t.Matrix(this).extract(), typeof l == "string" ? m[l] : m) : (m = new t.Matrix(this), u = !!u || !!l.relative, l.a != null && (m = u ? m.multiply(new t.Matrix(l)) : new t.Matrix(l)), this.attr("transform", m)) } }), t.extend(t.Element, { untransform: function () { return this.attr("transform", null) }, matrixify: function () { return (this.attr("transform") || "").split(t.regex.transforms).slice(0, -1).map(function (l) { var u = l.trim().split("("); return [u[0], u[1].split(t.regex.delimiter).map(function (m) { return parseFloat(m) })] }).reduce(function (l, u) { return u[0] == "matrix" ? l.multiply(x(u[1])) : l[u[0]].apply(l, u[1]) }, new t.Matrix) }, toParent: function (l) { if (this == l) return this; var u = this.screenCTM(), m = l.screenCTM().inverse(); return this.addTo(l).untransform().transform(m.multiply(u)), this }, toDoc: function () { return this.toParent(this.doc()) } }), t.Transformation = t.invent({ create: function (l, u) { if (arguments.length > 1 && typeof u != "boolean") return this.constructor.call(this, [].slice.call(arguments)); if (Array.isArray(l)) for (var m = 0, A = this.arguments.length; m < A; ++m)this[this.arguments[m]] = l[m]; else if (l && J(l) === "object") for (m = 0, A = this.arguments.length; m < A; ++m)this[this.arguments[m]] = l[this.arguments[m]]; this.inversed = !1, u === !0 && (this.inversed = !0) } }), t.Translate = t.invent({ parent: t.Matrix, inherit: t.Transformation, create: function (l, u) { this.constructor.apply(this, [].slice.call(arguments)) }, extend: { arguments: ["transformedX", "transformedY"], method: "translate" } }), t.extend(t.Element, { style: function (l, u) { if (arguments.length == 0) return this.node.style.cssText || ""; if (arguments.length < 2) if (J(l) === "object") for (var m in l) this.style(m, l[m]); else { if (!t.regex.isCss.test(l)) return this.node.style[h(l)]; for (l = l.split(/\s*;\s*/).filter(function (A) { return !!A }).map(function (A) { return A.split(/\s*:\s*/) }); u = l.pop();)this.style(u[0], u[1]) } else this.node.style[h(l)] = u === null || t.regex.isBlank.test(u) ? "" : u; return this } }), t.Parent = t.invent({ create: function (l) { this.constructor.call(this, l) }, inherit: t.Element, extend: { children: function () { return t.utils.map(t.utils.filterSVGElements(this.node.childNodes), function (l) { return t.adopt(l) }) }, add: function (l, u) { return u == null ? this.node.appendChild(l.node) : l.node != this.node.childNodes[u] && this.node.insertBefore(l.node, this.node.childNodes[u]), this }, put: function (l, u) { return this.add(l, u), l }, has: function (l) { return this.index(l) >= 0 }, index: function (l) { return [].slice.call(this.node.childNodes).indexOf(l.node) }, get: function (l) { return t.adopt(this.node.childNodes[l]) }, first: function () { return this.get(0) }, last: function () { return this.get(this.node.childNodes.length - 1) }, each: function (l, u) { for (var m = this.children(), A = 0, k = m.length; A < k; A++)m[A] instanceof t.Element && l.apply(m[A], [A, m]), u && m[A] instanceof t.Container && m[A].each(l, u); return this }, removeElement: function (l) { return this.node.removeChild(l.node), this }, clear: function () { for (; this.node.hasChildNodes();)this.node.removeChild(this.node.lastChild); return delete this._defs, this }, defs: function () { return this.doc().defs() } } }), t.extend(t.Parent, { ungroup: function (l, u) { return u === 0 || this instanceof t.Defs || this.node == t.parser.draw || (l = l || (this instanceof t.Doc ? this : this.parent(t.Parent)), u = u || 1 / 0, this.each(function () { return this instanceof t.Defs ? this : this instanceof t.Parent ? this.ungroup(l, u - 1) : this.toParent(l) }), this.node.firstChild || this.remove()), this }, flatten: function (l, u) { return this.ungroup(l, u) } }), t.Container = t.invent({ create: function (l) { this.constructor.call(this, l) }, inherit: t.Parent }), t.ViewBox = t.invent({ parent: t.Container, construct: {} }), ["click", "dblclick", "mousedown", "mouseup", "mouseover", "mouseout", "mousemove", "touchstart", "touchmove", "touchleave", "touchend", "touchcancel"].forEach(function (l) { t.Element.prototype[l] = function (u) { return t.on(this.node, l, u), this } }), t.listeners = [], t.handlerMap = [], t.listenerId = 0, t.on = function (l, u, m, A, k) { var S = m.bind(A || l.instance || l), L = (t.handlerMap.indexOf(l) + 1 || t.handlerMap.push(l)) - 1, C = u.split(".")[0], I = u.split(".")[1] || "*"; t.listeners[L] = t.listeners[L] || {}, t.listeners[L][C] = t.listeners[L][C] || {}, t.listeners[L][C][I] = t.listeners[L][C][I] || {}, m._svgjsListenerId || (m._svgjsListenerId = ++t.listenerId), t.listeners[L][C][I][m._svgjsListenerId] = S, l.addEventListener(C, S, k || { passive: !1 }) }, t.off = function (l, u, m) { var A = t.handlerMap.indexOf(l), k = u && u.split(".")[0], S = u && u.split(".")[1], L = ""; if (A != -1) if (m) { if (typeof m == "function" && (m = m._svgjsListenerId), !m) return; t.listeners[A][k] && t.listeners[A][k][S || "*"] && (l.removeEventListener(k, t.listeners[A][k][S || "*"][m], !1), delete t.listeners[A][k][S || "*"][m]) } else if (S && k) { if (t.listeners[A][k] && t.listeners[A][k][S]) { for (var C in t.listeners[A][k][S]) t.off(l, [k, S].join("."), C); delete t.listeners[A][k][S] } } else if (S) for (var I in t.listeners[A]) for (var L in t.listeners[A][I]) S === L && t.off(l, [I, S].join(".")); else if (k) { if (t.listeners[A][k]) { for (var L in t.listeners[A][k]) t.off(l, [k, L].join(".")); delete t.listeners[A][k] } } else { for (var I in t.listeners[A]) t.off(l, I); delete t.listeners[A], delete t.handlerMap[A] } }, t.extend(t.Element, { on: function (l, u, m, A) { return t.on(this.node, l, u, m, A), this }, off: function (l, u) { return t.off(this.node, l, u), this }, fire: function (l, u) { return l instanceof p.Event ? this.node.dispatchEvent(l) : this.node.dispatchEvent(l = new t.CustomEvent(l, { detail: u, cancelable: !0 })), this._event = l, this }, event: function () { return this._event } }), t.Defs = t.invent({ create: "defs", inherit: t.Container }), t.G = t.invent({ create: "g", inherit: t.Container, extend: { x: function (l) { return l == null ? this.transform("x") : this.transform({ x: l - this.x() }, !0) } }, construct: { group: function () { return this.put(new t.G) } } }), t.Doc = t.invent({ create: function (l) { l && ((l = typeof l == "string" ? e.getElementById(l) : l).nodeName == "svg" ? this.constructor.call(this, l) : (this.constructor.call(this, t.create("svg")), l.appendChild(this.node), this.size("100%", "100%")), this.namespace().defs()) }, inherit: t.Container, extend: { namespace: function () { return this.attr({ xmlns: t.ns, version: "1.1" }).attr("xmlns:xlink", t.xlink, t.xmlns).attr("xmlns:svgjs", t.svgjs, t.xmlns) }, defs: function () { var l; return this._defs || ((l = this.node.getElementsByTagName("defs")[0]) ? this._defs = t.adopt(l) : this._defs = new t.Defs, this.node.appendChild(this._defs.node)), this._defs }, parent: function () { return this.node.parentNode && this.node.parentNode.nodeName != "#document" ? this.node.parentNode : null }, remove: function () { return this.parent() && this.parent().removeChild(this.node), this }, clear: function () { for (; this.node.hasChildNodes();)this.node.removeChild(this.node.lastChild); return delete this._defs, t.parser.draw && !t.parser.draw.parentNode && this.node.appendChild(t.parser.draw), this }, clone: function (l) { this.writeDataToDom(); var u = this.node, m = b(u.cloneNode(!0)); return l ? (l.node || l).appendChild(m.node) : u.parentNode.insertBefore(m.node, u.nextSibling), m } } }), t.extend(t.Element, {}), t.Gradient = t.invent({ create: function (l) { this.constructor.call(this, t.create(l + "Gradient")), this.type = l }, inherit: t.Container, extend: { at: function (l, u, m) { return this.put(new t.Stop).update(l, u, m) }, update: function (l) { return this.clear(), typeof l == "function" && l.call(this, this), this }, fill: function () { return "url(#" + this.id() + ")" }, toString: function () { return this.fill() }, attr: function (l, u, m) { return l == "transform" && (l = "gradientTransform"), t.Container.prototype.attr.call(this, l, u, m) } }, construct: { gradient: function (l, u) { return this.defs().gradient(l, u) } } }), t.extend(t.Gradient, t.FX, { from: function (l, u) { return (this._target || this).type == "radial" ? this.attr({ fx: new t.Number(l), fy: new t.Number(u) }) : this.attr({ x1: new t.Number(l), y1: new t.Number(u) }) }, to: function (l, u) { return (this._target || this).type == "radial" ? this.attr({ cx: new t.Number(l), cy: new t.Number(u) }) : this.attr({ x2: new t.Number(l), y2: new t.Number(u) }) } }), t.extend(t.Defs, { gradient: function (l, u) { return this.put(new t.Gradient(l)).update(u) } }), t.Stop = t.invent({ create: "stop", inherit: t.Element, extend: { update: function (l) { return (typeof l == "number" || l instanceof t.Number) && (l = { offset: arguments[0], color: arguments[1], opacity: arguments[2] }), l.opacity != null && this.attr("stop-opacity", l.opacity), l.color != null && this.attr("stop-color", l.color), l.offset != null && this.attr("offset", new t.Number(l.offset)), this } } }), t.Pattern = t.invent({ create: "pattern", inherit: t.Container, extend: { fill: function () { return "url(#" + this.id() + ")" }, update: function (l) { return this.clear(), typeof l == "function" && l.call(this, this), this }, toString: function () { return this.fill() }, attr: function (l, u, m) { return l == "transform" && (l = "patternTransform"), t.Container.prototype.attr.call(this, l, u, m) } }, construct: { pattern: function (l, u, m) { return this.defs().pattern(l, u, m) } } }), t.extend(t.Defs, { pattern: function (l, u, m) { return this.put(new t.Pattern).update(m).attr({ x: 0, y: 0, width: l, height: u, patternUnits: "userSpaceOnUse" }) } }), t.Shape = t.invent({ create: function (l) { this.constructor.call(this, l) }, inherit: t.Element }), t.Symbol = t.invent({ create: "symbol", inherit: t.Container, construct: { symbol: function () { return this.put(new t.Symbol) } } }), t.Use = t.invent({ create: "use", inherit: t.Shape, extend: { element: function (l, u) { return this.attr("href", (u || "") + "#" + l, t.xlink) } }, construct: { use: function (l, u) { return this.put(new t.Use).element(l, u) } } }), t.Rect = t.invent({ create: "rect", inherit: t.Shape, construct: { rect: function (l, u) { return this.put(new t.Rect).size(l, u) } } }), t.Circle = t.invent({ create: "circle", inherit: t.Shape, construct: { circle: function (l) { return this.put(new t.Circle).rx(new t.Number(l).divide(2)).move(0, 0) } } }), t.extend(t.Circle, t.FX, { rx: function (l) { return this.attr("r", l) }, ry: function (l) { return this.rx(l) } }), t.Ellipse = t.invent({ create: "ellipse", inherit: t.Shape, construct: { ellipse: function (l, u) { return this.put(new t.Ellipse).size(l, u).move(0, 0) } } }), t.extend(t.Ellipse, t.Rect, t.FX, { rx: function (l) { return this.attr("rx", l) }, ry: function (l) { return this.attr("ry", l) } }), t.extend(t.Circle, t.Ellipse, { x: function (l) { return l == null ? this.cx() - this.rx() : this.cx(l + this.rx()) }, y: function (l) { return l == null ? this.cy() - this.ry() : this.cy(l + this.ry()) }, cx: function (l) { return l == null ? this.attr("cx") : this.attr("cx", l) }, cy: function (l) { return l == null ? this.attr("cy") : this.attr("cy", l) }, width: function (l) { return l == null ? 2 * this.rx() : this.rx(new t.Number(l).divide(2)) }, height: function (l) { return l == null ? 2 * this.ry() : this.ry(new t.Number(l).divide(2)) }, size: function (l, u) { var m = g(this, l, u); return this.rx(new t.Number(m.width).divide(2)).ry(new t.Number(m.height).divide(2)) } }), t.Line = t.invent({ create: "line", inherit: t.Shape, extend: { array: function () { return new t.PointArray([[this.attr("x1"), this.attr("y1")], [this.attr("x2"), this.attr("y2")]]) }, plot: function (l, u, m, A) { return l == null ? this.array() : (l = u !== void 0 ? { x1: l, y1: u, x2: m, y2: A } : new t.PointArray(l).toLine(), this.attr(l)) }, move: function (l, u) { return this.attr(this.array().move(l, u).toLine()) }, size: function (l, u) { var m = g(this, l, u); return this.attr(this.array().size(m.width, m.height).toLine()) } }, construct: { line: function (l, u, m, A) { return t.Line.prototype.plot.apply(this.put(new t.Line), l != null ? [l, u, m, A] : [0, 0, 0, 0]) } } }), t.Polyline = t.invent({ create: "polyline", inherit: t.Shape, construct: { polyline: function (l) { return this.put(new t.Polyline).plot(l || new t.PointArray) } } }), t.Polygon = t.invent({ create: "polygon", inherit: t.Shape, construct: { polygon: function (l) { return this.put(new t.Polygon).plot(l || new t.PointArray) } } }), t.extend(t.Polyline, t.Polygon, { array: function () { return this._array || (this._array = new t.PointArray(this.attr("points"))) }, plot: function (l) { return l == null ? this.array() : this.clear().attr("points", typeof l == "string" ? l : this._array = new t.PointArray(l)) }, clear: function () { return delete this._array, this }, move: function (l, u) { return this.attr("points", this.array().move(l, u)) }, size: function (l, u) { var m = g(this, l, u); return this.attr("points", this.array().size(m.width, m.height)) } }), t.extend(t.Line, t.Polyline, t.Polygon, { morphArray: t.PointArray, x: function (l) { return l == null ? this.bbox().x : this.move(l, this.bbox().y) }, y: function (l) { return l == null ? this.bbox().y : this.move(this.bbox().x, l) }, width: function (l) { var u = this.bbox(); return l == null ? u.width : this.size(l, u.height) }, height: function (l) { var u = this.bbox(); return l == null ? u.height : this.size(u.width, l) } }), t.Path = t.invent({ create: "path", inherit: t.Shape, extend: { morphArray: t.PathArray, array: function () { return this._array || (this._array = new t.PathArray(this.attr("d"))) }, plot: function (l) { return l == null ? this.array() : this.clear().attr("d", typeof l == "string" ? l : this._array = new t.PathArray(l)) }, clear: function () { return delete this._array, this } }, construct: { path: function (l) { return this.put(new t.Path).plot(l || new t.PathArray) } } }), t.Image = t.invent({ create: "image", inherit: t.Shape, extend: { load: function (l) { if (!l) return this; var u = this, m = new p.Image; return t.on(m, "load", function () { t.off(m); var A = u.parent(t.Pattern); A !== null && (u.width() == 0 && u.height() == 0 && u.size(m.width, m.height), A && A.width() == 0 && A.height() == 0 && A.size(u.width(), u.height()), typeof u._loaded == "function" && u._loaded.call(u, { width: m.width, height: m.height, ratio: m.width / m.height, url: l })) }), t.on(m, "error", function (A) { t.off(m), typeof u._error == "function" && u._error.call(u, A) }), this.attr("href", m.src = this.src = l, t.xlink) }, loaded: function (l) { return this._loaded = l, this }, error: function (l) { return this._error = l, this } }, construct: { image: function (l, u, m) { return this.put(new t.Image).load(l).size(u || 0, m || u || 0) } } }), t.Text = t.invent({ + create: function () { this.constructor.call(this, t.create("text")), this.dom.leading = new t.Number(1.3), this._rebuild = !0, this._build = !1, this.attr("font-family", t.defaults.attrs["font-family"]) }, inherit: t.Shape, extend: { + x: function (l) { return l == null ? this.attr("x") : this.attr("x", l) }, text: function (l) { + if (l === void 0) { + l = ""; for (var u = this.node.childNodes, m = 0, A = u.length; m < A; ++m)m != 0 && u[m].nodeType != 3 && t.adopt(u[m]).dom.newLined == 1 && (l += ` +`), l += u[m].textContent; return l + } if (this.clear().build(!0), typeof l == "function") l.call(this, this); else { + m = 0; for (var k = (l = l.split(` +`)).length; m < k; m++)this.tspan(l[m]).newLine() + } return this.build(!1).rebuild() + }, size: function (l) { return this.attr("font-size", l).rebuild() }, leading: function (l) { return l == null ? this.dom.leading : (this.dom.leading = new t.Number(l), this.rebuild()) }, lines: function () { var l = (this.textPath && this.textPath() || this).node, u = t.utils.map(t.utils.filterSVGElements(l.childNodes), function (m) { return t.adopt(m) }); return new t.Set(u) }, rebuild: function (l) { + if (typeof l == "boolean" && (this._rebuild = l), this._rebuild) { + var u = this, m = 0, A = this.dom.leading * new t.Number(this.attr("font-size")); this.lines().each(function () { + this.dom.newLined && (u.textPath() || this.attr("x", u.attr("x")), this.text() == ` +`? m += A : (this.attr("dy", A + m), m = 0)) + }), this.fire("rebuild") + } return this + }, build: function (l) { return this._build = !!l, this }, setData: function (l) { return this.dom = l, this.dom.leading = new t.Number(l.leading || 1.3), this } + }, construct: { text: function (l) { return this.put(new t.Text).text(l) }, plain: function (l) { return this.put(new t.Text).plain(l) } } + }), t.Tspan = t.invent({ + create: "tspan", inherit: t.Shape, extend: { + text: function (l) { + return l == null ? this.node.textContent + (this.dom.newLined ? ` +`: "") : (typeof l == "function" ? l.call(this, this) : this.plain(l), this) + }, dx: function (l) { return this.attr("dx", l) }, dy: function (l) { return this.attr("dy", l) }, newLine: function () { var l = this.parent(t.Text); return this.dom.newLined = !0, this.dy(l.dom.leading * l.attr("font-size")).attr("x", l.x()) } + } + }), t.extend(t.Text, t.Tspan, { plain: function (l) { return this._build === !1 && this.clear(), this.node.appendChild(e.createTextNode(l)), this }, tspan: function (l) { var u = (this.textPath && this.textPath() || this).node, m = new t.Tspan; return this._build === !1 && this.clear(), u.appendChild(m.node), m.text(l) }, clear: function () { for (var l = (this.textPath && this.textPath() || this).node; l.hasChildNodes();)l.removeChild(l.lastChild); return this }, length: function () { return this.node.getComputedTextLength() } }), t.TextPath = t.invent({ create: "textPath", inherit: t.Parent, parent: t.Text, construct: { morphArray: t.PathArray, array: function () { var l = this.track(); return l ? l.array() : null }, plot: function (l) { var u = this.track(), m = null; return u && (m = u.plot(l)), l == null ? m : this }, track: function () { var l = this.textPath(); if (l) return l.reference("href") }, textPath: function () { if (this.node.firstChild && this.node.firstChild.nodeName == "textPath") return t.adopt(this.node.firstChild) } } }), t.Nested = t.invent({ create: function () { this.constructor.call(this, t.create("svg")), this.style("overflow", "visible") }, inherit: t.Container, construct: { nested: function () { return this.put(new t.Nested) } } }); var n = { stroke: ["color", "width", "opacity", "linecap", "linejoin", "miterlimit", "dasharray", "dashoffset"], fill: ["color", "opacity", "rule"], prefix: function (l, u) { return u == "color" ? l : l + "-" + u } }; function o(l, u, m, A) { return m + A.replace(t.regex.dots, " .") } function h(l) { return l.toLowerCase().replace(/-(.)/g, function (u, m) { return m.toUpperCase() }) } function c(l) { return l.charAt(0).toUpperCase() + l.slice(1) } function d(l) { var u = l.toString(16); return u.length == 1 ? "0" + u : u } function g(l, u, m) { if (u == null || m == null) { var A = l.bbox(); u == null ? u = A.width / A.height * m : m == null && (m = A.height / A.width * u) } return { width: u, height: m } } function f(l, u, m) { return { x: u * l.a + m * l.c + 0, y: u * l.b + m * l.d + 0 } } function x(l) { return { a: l[0], b: l[1], c: l[2], d: l[3], e: l[4], f: l[5] } } function b(l) { for (var u = l.childNodes.length - 1; u >= 0; u--)l.childNodes[u] instanceof p.SVGElement && b(l.childNodes[u]); return t.adopt(l).id(t.eid(l.nodeName)) } function v(l) { return Math.abs(l) > 1e-37 ? l : 0 } ["fill", "stroke"].forEach(function (l) { var u = {}; u[l] = function (m) { if (m === void 0) return this; if (typeof m == "string" || t.Color.isRgb(m) || m && typeof m.fill == "function") this.attr(l, m); else for (var A = n[l].length - 1; A >= 0; A--)m[n[l][A]] != null && this.attr(n.prefix(l, n[l][A]), m[n[l][A]]); return this }, t.extend(t.Element, t.FX, u) }), t.extend(t.Element, t.FX, { translate: function (l, u) { return this.transform({ x: l, y: u }) }, matrix: function (l) { return this.attr("transform", new t.Matrix(arguments.length == 6 ? [].slice.call(arguments) : l)) }, opacity: function (l) { return this.attr("opacity", l) }, dx: function (l) { return this.x(new t.Number(l).plus(this instanceof t.FX ? 0 : this.x()), !0) }, dy: function (l) { return this.y(new t.Number(l).plus(this instanceof t.FX ? 0 : this.y()), !0) } }), t.extend(t.Path, { length: function () { return this.node.getTotalLength() }, pointAt: function (l) { return this.node.getPointAtLength(l) } }), t.Set = t.invent({ create: function (l) { Array.isArray(l) ? this.members = l : this.clear() }, extend: { add: function () { for (var l = [].slice.call(arguments), u = 0, m = l.length; u < m; u++)this.members.push(l[u]); return this }, remove: function (l) { var u = this.index(l); return u > -1 && this.members.splice(u, 1), this }, each: function (l) { for (var u = 0, m = this.members.length; u < m; u++)l.apply(this.members[u], [u, this.members]); return this }, clear: function () { return this.members = [], this }, length: function () { return this.members.length }, has: function (l) { return this.index(l) >= 0 }, index: function (l) { return this.members.indexOf(l) }, get: function (l) { return this.members[l] }, first: function () { return this.get(0) }, last: function () { return this.get(this.members.length - 1) }, valueOf: function () { return this.members } }, construct: { set: function (l) { return new t.Set(l) } } }), t.FX.Set = t.invent({ create: function (l) { this.set = l } }), t.Set.inherit = function () { var l = []; for (var u in t.Shape.prototype) typeof t.Shape.prototype[u] == "function" && typeof t.Set.prototype[u] != "function" && l.push(u); for (var u in l.forEach(function (A) { t.Set.prototype[A] = function () { for (var k = 0, S = this.members.length; k < S; k++)this.members[k] && typeof this.members[k][A] == "function" && this.members[k][A].apply(this.members[k], arguments); return A == "animate" ? this.fx || (this.fx = new t.FX.Set(this)) : this } }), l = [], t.FX.prototype) typeof t.FX.prototype[u] == "function" && typeof t.FX.Set.prototype[u] != "function" && l.push(u); l.forEach(function (m) { t.FX.Set.prototype[m] = function () { for (var A = 0, k = this.set.members.length; A < k; A++)this.set.members[A].fx[m].apply(this.set.members[A].fx, arguments); return this } }) }, t.extend(t.Element, {}), t.extend(t.Element, { remember: function (l, u) { if (J(arguments[0]) === "object") for (var m in l) this.remember(m, l[m]); else { if (arguments.length == 1) return this.memory()[l]; this.memory()[l] = u } return this }, forget: function () { if (arguments.length == 0) this._memory = {}; else for (var l = arguments.length - 1; l >= 0; l--)delete this.memory()[arguments[l]]; return this }, memory: function () { return this._memory || (this._memory = {}) } }), t.get = function (l) { var u = e.getElementById(function (m) { var A = (m || "").toString().match(t.regex.reference); if (A) return A[1] }(l) || l); return t.adopt(u) }, t.select = function (l, u) { return new t.Set(t.utils.map((u || e).querySelectorAll(l), function (m) { return t.adopt(m) })) }, t.extend(t.Parent, { select: function (l) { return t.select(l, this.node) } }); var y = "abcdef".split(""); if (typeof p.CustomEvent != "function") { var w = function (l, u) { u = u || { bubbles: !1, cancelable: !1, detail: void 0 }; var m = e.createEvent("CustomEvent"); return m.initCustomEvent(l, u.bubbles, u.cancelable, u.detail), m }; w.prototype = p.Event.prototype, t.CustomEvent = w } else t.CustomEvent = p.CustomEvent; return t + }, typeof define == "function" && define.amd ? define(function () { return Ce(he, he.document) }) : (typeof ot > "u" ? "undefined" : J(ot)) === "object" && typeof We < "u" ? We.exports = he.document ? Ce(he, he.document) : function (p) { return Ce(p, p.document) } : he.SVG = Ce(he, he.document), function () { SVG.Filter = SVG.invent({ create: "filter", inherit: SVG.Parent, extend: { source: "SourceGraphic", sourceAlpha: "SourceAlpha", background: "BackgroundImage", backgroundAlpha: "BackgroundAlpha", fill: "FillPaint", stroke: "StrokePaint", autoSetIn: !0, put: function (r, n) { return this.add(r, n), !r.attr("in") && this.autoSetIn && r.attr("in", this.source), r.attr("result") || r.attr("result", r), r }, blend: function (r, n, o) { return this.put(new SVG.BlendEffect(r, n, o)) }, colorMatrix: function (r, n) { return this.put(new SVG.ColorMatrixEffect(r, n)) }, convolveMatrix: function (r) { return this.put(new SVG.ConvolveMatrixEffect(r)) }, componentTransfer: function (r) { return this.put(new SVG.ComponentTransferEffect(r)) }, composite: function (r, n, o) { return this.put(new SVG.CompositeEffect(r, n, o)) }, flood: function (r, n) { return this.put(new SVG.FloodEffect(r, n)) }, offset: function (r, n) { return this.put(new SVG.OffsetEffect(r, n)) }, image: function (r) { return this.put(new SVG.ImageEffect(r)) }, merge: function () { var r = [void 0]; for (var n in arguments) r.push(arguments[n]); return this.put(new (SVG.MergeEffect.bind.apply(SVG.MergeEffect, r))) }, gaussianBlur: function (r, n) { return this.put(new SVG.GaussianBlurEffect(r, n)) }, morphology: function (r, n) { return this.put(new SVG.MorphologyEffect(r, n)) }, diffuseLighting: function (r, n, o) { return this.put(new SVG.DiffuseLightingEffect(r, n, o)) }, displacementMap: function (r, n, o, h, c) { return this.put(new SVG.DisplacementMapEffect(r, n, o, h, c)) }, specularLighting: function (r, n, o, h) { return this.put(new SVG.SpecularLightingEffect(r, n, o, h)) }, tile: function () { return this.put(new SVG.TileEffect) }, turbulence: function (r, n, o, h, c) { return this.put(new SVG.TurbulenceEffect(r, n, o, h, c)) }, toString: function () { return "url(#" + this.attr("id") + ")" } } }), SVG.extend(SVG.Defs, { filter: function (r) { var n = this.put(new SVG.Filter); return typeof r == "function" && r.call(n, n), n } }), SVG.extend(SVG.Container, { filter: function (r) { return this.defs().filter(r) } }), SVG.extend(SVG.Element, SVG.G, SVG.Nested, { filter: function (r) { return this.filterer = r instanceof SVG.Element ? r : this.doc().filter(r), this.doc() && this.filterer.doc() !== this.doc() && this.doc().defs().add(this.filterer), this.attr("filter", this.filterer), this.filterer }, unfilter: function (r) { return this.filterer && r === !0 && this.filterer.remove(), delete this.filterer, this.attr("filter", null) } }), SVG.Effect = SVG.invent({ create: function () { this.constructor.call(this) }, inherit: SVG.Element, extend: { in: function (r) { return r == null ? this.parent() && this.parent().select('[result="' + this.attr("in") + '"]').get(0) || this.attr("in") : this.attr("in", r) }, result: function (r) { return r == null ? this.attr("result") : this.attr("result", r) }, toString: function () { return this.result() } } }), SVG.ParentEffect = SVG.invent({ create: function () { this.constructor.call(this) }, inherit: SVG.Parent, extend: { in: function (r) { return r == null ? this.parent() && this.parent().select('[result="' + this.attr("in") + '"]').get(0) || this.attr("in") : this.attr("in", r) }, result: function (r) { return r == null ? this.attr("result") : this.attr("result", r) }, toString: function () { return this.result() } } }); var p = { blend: function (r, n) { return this.parent() && this.parent().blend(this, r, n) }, colorMatrix: function (r, n) { return this.parent() && this.parent().colorMatrix(r, n).in(this) }, convolveMatrix: function (r) { return this.parent() && this.parent().convolveMatrix(r).in(this) }, componentTransfer: function (r) { return this.parent() && this.parent().componentTransfer(r).in(this) }, composite: function (r, n) { return this.parent() && this.parent().composite(this, r, n) }, flood: function (r, n) { return this.parent() && this.parent().flood(r, n) }, offset: function (r, n) { return this.parent() && this.parent().offset(r, n).in(this) }, image: function (r) { return this.parent() && this.parent().image(r) }, merge: function () { return this.parent() && this.parent().merge.apply(this.parent(), [this].concat(arguments)) }, gaussianBlur: function (r, n) { return this.parent() && this.parent().gaussianBlur(r, n).in(this) }, morphology: function (r, n) { return this.parent() && this.parent().morphology(r, n).in(this) }, diffuseLighting: function (r, n, o) { return this.parent() && this.parent().diffuseLighting(r, n, o).in(this) }, displacementMap: function (r, n, o, h) { return this.parent() && this.parent().displacementMap(this, r, n, o, h) }, specularLighting: function (r, n, o, h) { return this.parent() && this.parent().specularLighting(r, n, o, h).in(this) }, tile: function () { return this.parent() && this.parent().tile().in(this) }, turbulence: function (r, n, o, h, c) { return this.parent() && this.parent().turbulence(r, n, o, h, c).in(this) } }; SVG.extend(SVG.Effect, p), SVG.extend(SVG.ParentEffect, p), SVG.ChildEffect = SVG.invent({ create: function () { this.constructor.call(this) }, inherit: SVG.Element, extend: { in: function (r) { this.attr("in", r) } } }); var e = { blend: function (r, n, o) { this.attr({ in: r, in2: n, mode: o || "normal" }) }, colorMatrix: function (r, n) { r == "matrix" && (n = a(n)), this.attr({ type: r, values: n === void 0 ? null : n }) }, convolveMatrix: function (r) { r = a(r), this.attr({ order: Math.sqrt(r.split(" ").length), kernelMatrix: r }) }, composite: function (r, n, o) { this.attr({ in: r, in2: n, operator: o }) }, flood: function (r, n) { this.attr("flood-color", r), n != null && this.attr("flood-opacity", n) }, offset: function (r, n) { this.attr({ dx: r, dy: n }) }, image: function (r) { this.attr("href", r, SVG.xlink) }, displacementMap: function (r, n, o, h, c) { this.attr({ in: r, in2: n, scale: o, xChannelSelector: h, yChannelSelector: c }) }, gaussianBlur: function (r, n) { r != null || n != null ? this.attr("stdDeviation", function (o) { if (!Array.isArray(o)) return o; for (var h = 0, c = o.length, d = []; h < c; h++)d.push(o[h]); return d.join(" ") }(Array.prototype.slice.call(arguments))) : this.attr("stdDeviation", "0 0") }, morphology: function (r, n) { this.attr({ operator: r, radius: n }) }, tile: function () { }, turbulence: function (r, n, o, h, c) { this.attr({ numOctaves: n, seed: o, stitchTiles: h, baseFrequency: r, type: c }) } }, t = { merge: function () { var r; if (arguments[0] instanceof SVG.Set) { var n = this; arguments[0].each(function (h) { this instanceof SVG.MergeNode ? n.put(this) : (this instanceof SVG.Effect || this instanceof SVG.ParentEffect) && n.put(new SVG.MergeNode(this)) }) } else { r = Array.isArray(arguments[0]) ? arguments[0] : arguments; for (var o = 0; o < r.length; o++)r[o] instanceof SVG.MergeNode ? this.put(r[o]) : this.put(new SVG.MergeNode(r[o])) } }, componentTransfer: function (r) { if (this.rgb = new SVG.Set, ["r", "g", "b", "a"].forEach(function (o) { this[o] = new SVG["Func" + o.toUpperCase()]("identity"), this.rgb.add(this[o]), this.node.appendChild(this[o].node) }.bind(this)), r) for (var n in r.rgb && (["r", "g", "b"].forEach(function (o) { this[o].attr(r.rgb) }.bind(this)), delete r.rgb), r) this[n].attr(r[n]) }, diffuseLighting: function (r, n, o) { this.attr({ surfaceScale: r, diffuseConstant: n, kernelUnitLength: o }) }, specularLighting: function (r, n, o, h) { this.attr({ surfaceScale: r, diffuseConstant: n, specularExponent: o, kernelUnitLength: h }) } }, i = { distantLight: function (r, n) { this.attr({ azimuth: r, elevation: n }) }, pointLight: function (r, n, o) { this.attr({ x: r, y: n, z: o }) }, spotLight: function (r, n, o, h, c, d) { this.attr({ x: r, y: n, z: o, pointsAtX: h, pointsAtY: c, pointsAtZ: d }) }, mergeNode: function (r) { this.attr("in", r) } }; function a(r) { return Array.isArray(r) && (r = new SVG.Array(r)), r.toString().replace(/^\s+/, "").replace(/\s+$/, "").replace(/\s+/g, " ") } function s() { var r = function () { }; for (var n in typeof arguments[arguments.length - 1] == "function" && (r = arguments[arguments.length - 1], Array.prototype.splice.call(arguments, arguments.length - 1, 1)), arguments) for (var o in arguments[n]) r(arguments[n][o], o, arguments[n]) } ["r", "g", "b", "a"].forEach(function (r) { i["Func" + r.toUpperCase()] = function (n) { switch (this.attr("type", n), n) { case "table": this.attr("tableValues", arguments[1]); break; case "linear": this.attr("slope", arguments[1]), this.attr("intercept", arguments[2]); break; case "gamma": this.attr("amplitude", arguments[1]), this.attr("exponent", arguments[2]), this.attr("offset", arguments[2]) } } }), s(e, function (r, n) { var o = n.charAt(0).toUpperCase() + n.slice(1); SVG[o + "Effect"] = SVG.invent({ create: function () { this.constructor.call(this, SVG.create("fe" + o)), r.apply(this, arguments), this.result(this.attr("id") + "Out") }, inherit: SVG.Effect, extend: {} }) }), s(t, function (r, n) { var o = n.charAt(0).toUpperCase() + n.slice(1); SVG[o + "Effect"] = SVG.invent({ create: function () { this.constructor.call(this, SVG.create("fe" + o)), r.apply(this, arguments), this.result(this.attr("id") + "Out") }, inherit: SVG.ParentEffect, extend: {} }) }), s(i, function (r, n) { var o = n.charAt(0).toUpperCase() + n.slice(1); SVG[o] = SVG.invent({ create: function () { this.constructor.call(this, SVG.create("fe" + o)), r.apply(this, arguments) }, inherit: SVG.ChildEffect, extend: {} }) }), SVG.extend(SVG.MergeEffect, { in: function (r) { return r instanceof SVG.MergeNode ? this.add(r, 0) : this.add(new SVG.MergeNode(r), 0), this } }), SVG.extend(SVG.CompositeEffect, SVG.BlendEffect, SVG.DisplacementMapEffect, { in2: function (r) { return r == null ? this.parent() && this.parent().select('[result="' + this.attr("in2") + '"]').get(0) || this.attr("in2") : this.attr("in2", r) } }), SVG.filter = { sepiatone: [.343, .669, .119, 0, 0, .249, .626, .13, 0, 0, .172, .334, .111, 0, 0, 0, 0, 0, 1, 0] } }.call(void 0), function () { function p(s, r, n, o, h, c, d) { for (var g = s.slice(r, n || d), f = o.slice(h, c || d), x = 0, b = { pos: [0, 0], start: [0, 0] }, v = { pos: [0, 0], start: [0, 0] }; g[x] = e.call(b, g[x]), f[x] = e.call(v, f[x]), g[x][0] != f[x][0] || g[x][0] == "M" || g[x][0] == "A" && (g[x][4] != f[x][4] || g[x][5] != f[x][5]) ? (Array.prototype.splice.apply(g, [x, 1].concat(i.call(b, g[x]))), Array.prototype.splice.apply(f, [x, 1].concat(i.call(v, f[x])))) : (g[x] = t.call(b, g[x]), f[x] = t.call(v, f[x])), !(++x == g.length && x == f.length);)x == g.length && g.push(["C", b.pos[0], b.pos[1], b.pos[0], b.pos[1], b.pos[0], b.pos[1]]), x == f.length && f.push(["C", v.pos[0], v.pos[1], v.pos[0], v.pos[1], v.pos[0], v.pos[1]]); return { start: g, dest: f } } function e(s) { switch (s[0]) { case "z": case "Z": s[0] = "L", s[1] = this.start[0], s[2] = this.start[1]; break; case "H": s[0] = "L", s[2] = this.pos[1]; break; case "V": s[0] = "L", s[2] = s[1], s[1] = this.pos[0]; break; case "T": s[0] = "Q", s[3] = s[1], s[4] = s[2], s[1] = this.reflection[1], s[2] = this.reflection[0]; break; case "S": s[0] = "C", s[6] = s[4], s[5] = s[3], s[4] = s[2], s[3] = s[1], s[2] = this.reflection[1], s[1] = this.reflection[0] }return s } function t(s) { var r = s.length; return this.pos = [s[r - 2], s[r - 1]], "SCQT".indexOf(s[0]) != -1 && (this.reflection = [2 * this.pos[0] - s[r - 4], 2 * this.pos[1] - s[r - 3]]), s } function i(s) { var r = [s]; switch (s[0]) { case "M": return this.pos = this.start = [s[1], s[2]], r; case "L": s[5] = s[3] = s[1], s[6] = s[4] = s[2], s[1] = this.pos[0], s[2] = this.pos[1]; break; case "Q": s[6] = s[4], s[5] = s[3], s[4] = 1 * s[4] / 3 + 2 * s[2] / 3, s[3] = 1 * s[3] / 3 + 2 * s[1] / 3, s[2] = 1 * this.pos[1] / 3 + 2 * s[2] / 3, s[1] = 1 * this.pos[0] / 3 + 2 * s[1] / 3; break; case "A": r = function (n, o) { var h, c, d, g, f, x, b, v, y, w, l, u, m, A, k, S, L, C, I, z, M, T, E, O, D, H, W = Math.abs(o[1]), N = Math.abs(o[2]), B = o[3] % 360, q = o[4], Z = o[5], j = o[6], se = o[7], V = new SVG.Point(n), G = new SVG.Point(j, se), _ = []; if (W === 0 || N === 0 || V.x === G.x && V.y === G.y) return [["C", V.x, V.y, G.x, G.y, G.x, G.y]]; for (h = new SVG.Point((V.x - G.x) / 2, (V.y - G.y) / 2).transform(new SVG.Matrix().rotate(B)), (c = h.x * h.x / (W * W) + h.y * h.y / (N * N)) > 1 && (W *= c = Math.sqrt(c), N *= c), d = new SVG.Matrix().rotate(B).scale(1 / W, 1 / N).rotate(-B), V = V.transform(d), G = G.transform(d), g = [G.x - V.x, G.y - V.y], x = g[0] * g[0] + g[1] * g[1], f = Math.sqrt(x), g[0] /= f, g[1] /= f, b = x < 4 ? Math.sqrt(1 - x / 4) : 0, q === Z && (b *= -1), v = new SVG.Point((G.x + V.x) / 2 + b * -g[1], (G.y + V.y) / 2 + b * g[0]), y = new SVG.Point(V.x - v.x, V.y - v.y), w = new SVG.Point(G.x - v.x, G.y - v.y), l = Math.acos(y.x / Math.sqrt(y.x * y.x + y.y * y.y)), y.y < 0 && (l *= -1), u = Math.acos(w.x / Math.sqrt(w.x * w.x + w.y * w.y)), w.y < 0 && (u *= -1), Z && l > u && (u += 2 * Math.PI), !Z && l < u && (u -= 2 * Math.PI), A = Math.ceil(2 * Math.abs(l - u) / Math.PI), S = [], L = l, m = (u - l) / A, k = 4 * Math.tan(m / 4) / 3, M = 0; M <= A; M++)I = Math.cos(L), C = Math.sin(L), z = new SVG.Point(v.x + I, v.y + C), S[M] = [new SVG.Point(z.x + k * C, z.y - k * I), z, new SVG.Point(z.x - k * C, z.y + k * I)], L += m; for (S[0][0] = S[0][1].clone(), S[S.length - 1][2] = S[S.length - 1][1].clone(), d = new SVG.Matrix().rotate(B).scale(W, N).rotate(-B), M = 0, T = S.length; M < T; M++)S[M][0] = S[M][0].transform(d), S[M][1] = S[M][1].transform(d), S[M][2] = S[M][2].transform(d); for (M = 1, T = S.length; M < T; M++)E = (z = S[M - 1][2]).x, O = z.y, D = (z = S[M][0]).x, H = z.y, j = (z = S[M][1]).x, se = z.y, _.push(["C", E, O, D, H, j, se]); return _ }(this.pos, s), s = r[0] }return s[0] = "C", this.pos = [s[5], s[6]], this.reflection = [2 * s[5] - s[3], 2 * s[6] - s[4]], r } function a(s, r) { if (r === !1) return !1; for (var n = r, o = s.length; n < o; ++n)if (s[n][0] == "M") return n; return !1 } SVG.extend(SVG.PathArray, { morph: function (s) { for (var r = this.value, n = this.parse(s), o = 0, h = 0, c = !1, d = !1; o !== !1 || h !== !1;) { var g; c = a(r, o !== !1 && o + 1), d = a(n, h !== !1 && h + 1), o === !1 && (o = (g = new SVG.PathArray(f.start).bbox()).height == 0 || g.width == 0 ? r.push(r[0]) - 1 : r.push(["M", g.x + g.width / 2, g.y + g.height / 2]) - 1), h === !1 && (h = (g = new SVG.PathArray(f.dest).bbox()).height == 0 || g.width == 0 ? n.push(n[0]) - 1 : n.push(["M", g.x + g.width / 2, g.y + g.height / 2]) - 1); var f = p(r, o, c, n, h, d); r = r.slice(0, o).concat(f.start, c === !1 ? [] : r.slice(c)), n = n.slice(0, h).concat(f.dest, d === !1 ? [] : n.slice(d)), o = c !== !1 && o + f.start.length, h = d !== !1 && h + f.dest.length } return this.value = r, this.destination = new SVG.PathArray, this.destination.value = n, this } }) }(), function () { function p(e) { e.remember("_draggable", this), this.el = e } p.prototype.init = function (e, t) { var i = this; this.constraint = e, this.value = t, this.el.on("mousedown.drag", function (a) { i.start(a) }), this.el.on("touchstart.drag", function (a) { i.start(a) }) }, p.prototype.transformPoint = function (e, t) { var i = (e = e || window.event).changedTouches && e.changedTouches[0] || e; return this.p.x = i.clientX - (t || 0), this.p.y = i.clientY, this.p.matrixTransform(this.m) }, p.prototype.getBBox = function () { var e = this.el.bbox(); return this.el instanceof SVG.Nested && (e = this.el.rbox()), (this.el instanceof SVG.G || this.el instanceof SVG.Use || this.el instanceof SVG.Nested) && (e.x = this.el.x(), e.y = this.el.y()), e }, p.prototype.start = function (e) { if (e.type != "click" && e.type != "mousedown" && e.type != "mousemove" || (e.which || e.buttons) == 1) { var t = this; if (this.el.fire("beforedrag", { event: e, handler: this }), !this.el.event().defaultPrevented) { e.preventDefault(), e.stopPropagation(), this.parent = this.parent || this.el.parent(SVG.Nested) || this.el.parent(SVG.Doc), this.p = this.parent.node.createSVGPoint(), this.m = this.el.node.getScreenCTM().inverse(); var i, a = this.getBBox(); if (this.el instanceof SVG.Text) switch (i = this.el.node.getComputedTextLength(), this.el.attr("text-anchor")) { case "middle": i /= 2; break; case "start": i = 0 }this.startPoints = { point: this.transformPoint(e, i), box: a, transform: this.el.transform() }, SVG.on(window, "mousemove.drag", function (s) { t.drag(s) }), SVG.on(window, "touchmove.drag", function (s) { t.drag(s) }), SVG.on(window, "mouseup.drag", function (s) { t.end(s) }), SVG.on(window, "touchend.drag", function (s) { t.end(s) }), this.el.fire("dragstart", { event: e, p: this.startPoints.point, m: this.m, handler: this }) } } }, p.prototype.drag = function (e) { var t = this.getBBox(), i = this.transformPoint(e), a = this.startPoints.box.x + i.x - this.startPoints.point.x, s = this.startPoints.box.y + i.y - this.startPoints.point.y, r = this.constraint, n = i.x - this.startPoints.point.x, o = i.y - this.startPoints.point.y; if (this.el.fire("dragmove", { event: e, p: i, m: this.m, handler: this }), this.el.event().defaultPrevented) return i; if (typeof r == "function") { var h = r.call(this.el, a, s, this.m); typeof h == "boolean" && (h = { x: h, y: h }), h.x === !0 ? this.el.x(a) : h.x !== !1 && this.el.x(h.x), h.y === !0 ? this.el.y(s) : h.y !== !1 && this.el.y(h.y) } else typeof r == "object" && (r.minX != null && a < r.minX ? n = (a = r.minX) - this.startPoints.box.x : r.maxX != null && a > r.maxX - t.width && (n = (a = r.maxX - t.width) - this.startPoints.box.x), r.minY != null && s < r.minY ? o = (s = r.minY) - this.startPoints.box.y : r.maxY != null && s > r.maxY - t.height && (o = (s = r.maxY - t.height) - this.startPoints.box.y), r.snapToGrid != null && (a -= a % r.snapToGrid, s -= s % r.snapToGrid, n -= n % r.snapToGrid, o -= o % r.snapToGrid), this.el instanceof SVG.G ? this.el.matrix(this.startPoints.transform).transform({ x: n, y: o }, !0) : this.el.move(a, s)); return i }, p.prototype.end = function (e) { var t = this.drag(e); this.el.fire("dragend", { event: e, p: t, m: this.m, handler: this }), SVG.off(window, "mousemove.drag"), SVG.off(window, "touchmove.drag"), SVG.off(window, "mouseup.drag"), SVG.off(window, "touchend.drag") }, SVG.extend(SVG.Element, { draggable: function (e, t) { typeof e != "function" && typeof e != "object" || (t = e, e = !0); var i = this.remember("_draggable") || new p(this); return (e = e === void 0 || e) ? i.init(t || {}, e) : (this.off("mousedown.drag"), this.off("touchstart.drag")), this } }) }.call(void 0), function () { function p(e) { this.el = e, e.remember("_selectHandler", this), this.pointSelection = { isSelected: !1 }, this.rectSelection = { isSelected: !1 }, this.pointsList = { lt: [0, 0], rt: ["width", 0], rb: ["width", "height"], lb: [0, "height"], t: ["width", 0], r: ["width", "height"], b: ["width", "height"], l: [0, "height"] }, this.pointCoord = function (t, i, a) { var s = typeof t != "string" ? t : i[t]; return a ? s / 2 : s }, this.pointCoords = function (t, i) { var a = this.pointsList[t]; return { x: this.pointCoord(a[0], i, t === "t" || t === "b"), y: this.pointCoord(a[1], i, t === "r" || t === "l") } } } p.prototype.init = function (e, t) { var i = this.el.bbox(); this.options = {}; var a = this.el.selectize.defaults.points; for (var s in this.el.selectize.defaults) this.options[s] = this.el.selectize.defaults[s], t[s] !== void 0 && (this.options[s] = t[s]); var r = ["points", "pointsExclude"]; for (var s in r) { var n = this.options[r[s]]; typeof n == "string" ? n = n.length > 0 ? n.split(/\s*,\s*/i) : [] : typeof n == "boolean" && r[s] === "points" && (n = n ? a : []), this.options[r[s]] = n } this.options.points = [a, this.options.points].reduce(function (o, h) { return o.filter(function (c) { return h.indexOf(c) > -1 }) }), this.options.points = [this.options.points, this.options.pointsExclude].reduce(function (o, h) { return o.filter(function (c) { return h.indexOf(c) < 0 }) }), this.parent = this.el.parent(), this.nested = this.nested || this.parent.group(), this.nested.matrix(new SVG.Matrix(this.el).translate(i.x, i.y)), this.options.deepSelect && ["line", "polyline", "polygon"].indexOf(this.el.type) !== -1 ? this.selectPoints(e) : this.selectRect(e), this.observe(), this.cleanup() }, p.prototype.selectPoints = function (e) { return this.pointSelection.isSelected = e, this.pointSelection.set || (this.pointSelection.set = this.parent.set(), this.drawPoints()), this }, p.prototype.getPointArray = function () { var e = this.el.bbox(); return this.el.array().valueOf().map(function (t) { return [t[0] - e.x, t[1] - e.y] }) }, p.prototype.drawPoints = function () { for (var e = this, t = this.getPointArray(), i = 0, a = t.length; i < a; ++i) { var s = function (n) { return function (o) { (o = o || window.event).preventDefault ? o.preventDefault() : o.returnValue = !1, o.stopPropagation(); var h = o.pageX || o.touches[0].pageX, c = o.pageY || o.touches[0].pageY; e.el.fire("point", { x: h, y: c, i: n, event: o }) } }(i), r = this.drawPoint(t[i][0], t[i][1]).addClass(this.options.classPoints).addClass(this.options.classPoints + "_point").on("touchstart", s).on("mousedown", s); this.pointSelection.set.add(r) } }, p.prototype.drawPoint = function (e, t) { var i = this.options.pointType; switch (i) { case "circle": return this.drawCircle(e, t); case "rect": return this.drawRect(e, t); default: if (typeof i == "function") return i.call(this, e, t); throw new Error("Unknown " + i + " point type!") } }, p.prototype.drawCircle = function (e, t) { return this.nested.circle(this.options.pointSize).center(e, t) }, p.prototype.drawRect = function (e, t) { return this.nested.rect(this.options.pointSize, this.options.pointSize).center(e, t) }, p.prototype.updatePointSelection = function () { var e = this.getPointArray(); this.pointSelection.set.each(function (t) { this.cx() === e[t][0] && this.cy() === e[t][1] || this.center(e[t][0], e[t][1]) }) }, p.prototype.updateRectSelection = function () { var e = this, t = this.el.bbox(); if (this.rectSelection.set.get(0).attr({ width: t.width, height: t.height }), this.options.points.length && this.options.points.map(function (a, s) { var r = e.pointCoords(a, t); e.rectSelection.set.get(s + 1).center(r.x, r.y) }), this.options.rotationPoint) { var i = this.rectSelection.set.length(); this.rectSelection.set.get(i - 1).center(t.width / 2, 20) } }, p.prototype.selectRect = function (e) { var t = this, i = this.el.bbox(); function a(n) { return function (o) { (o = o || window.event).preventDefault ? o.preventDefault() : o.returnValue = !1, o.stopPropagation(); var h = o.pageX || o.touches[0].pageX, c = o.pageY || o.touches[0].pageY; t.el.fire(n, { x: h, y: c, event: o }) } } if (this.rectSelection.isSelected = e, this.rectSelection.set = this.rectSelection.set || this.parent.set(), this.rectSelection.set.get(0) || this.rectSelection.set.add(this.nested.rect(i.width, i.height).addClass(this.options.classRect)), this.options.points.length && this.rectSelection.set.length() < 2 && (this.options.points.map(function (n, o) { var h = t.pointCoords(n, i), c = t.drawPoint(h.x, h.y).attr("class", t.options.classPoints + "_" + n).on("mousedown", a(n)).on("touchstart", a(n)); t.rectSelection.set.add(c) }), this.rectSelection.set.each(function () { this.addClass(t.options.classPoints) })), this.options.rotationPoint && (this.options.points && !this.rectSelection.set.get(9) || !this.options.points && !this.rectSelection.set.get(1))) { var s = function (n) { (n = n || window.event).preventDefault ? n.preventDefault() : n.returnValue = !1, n.stopPropagation(); var o = n.pageX || n.touches[0].pageX, h = n.pageY || n.touches[0].pageY; t.el.fire("rot", { x: o, y: h, event: n }) }, r = this.drawPoint(i.width / 2, 20).attr("class", this.options.classPoints + "_rot").on("touchstart", s).on("mousedown", s); this.rectSelection.set.add(r) } }, p.prototype.handler = function () { var e = this.el.bbox(); this.nested.matrix(new SVG.Matrix(this.el).translate(e.x, e.y)), this.rectSelection.isSelected && this.updateRectSelection(), this.pointSelection.isSelected && this.updatePointSelection() }, p.prototype.observe = function () { var e = this; if (MutationObserver) if (this.rectSelection.isSelected || this.pointSelection.isSelected) this.observerInst = this.observerInst || new MutationObserver(function () { e.handler() }), this.observerInst.observe(this.el.node, { attributes: !0 }); else try { this.observerInst.disconnect(), delete this.observerInst } catch { } else this.el.off("DOMAttrModified.select"), (this.rectSelection.isSelected || this.pointSelection.isSelected) && this.el.on("DOMAttrModified.select", function () { e.handler() }) }, p.prototype.cleanup = function () { !this.rectSelection.isSelected && this.rectSelection.set && (this.rectSelection.set.each(function () { this.remove() }), this.rectSelection.set.clear(), delete this.rectSelection.set), !this.pointSelection.isSelected && this.pointSelection.set && (this.pointSelection.set.each(function () { this.remove() }), this.pointSelection.set.clear(), delete this.pointSelection.set), this.pointSelection.isSelected || this.rectSelection.isSelected || (this.nested.remove(), delete this.nested) }, SVG.extend(SVG.Element, { selectize: function (e, t) { return typeof e == "object" && (t = e, e = !0), (this.remember("_selectHandler") || new p(this)).init(e === void 0 || e, t || {}), this } }), SVG.Element.prototype.selectize.defaults = { points: ["lt", "rt", "rb", "lb", "t", "r", "b", "l"], pointsExclude: [], classRect: "svg_select_boundingRect", classPoints: "svg_select_points", pointSize: 7, rotationPoint: !0, deepSelect: !1, pointType: "circle" } }(), function () { (function () { function p(e) { e.remember("_resizeHandler", this), this.el = e, this.parameters = {}, this.lastUpdateCall = null, this.p = e.doc().node.createSVGPoint() } p.prototype.transformPoint = function (e, t, i) { return this.p.x = e - (this.offset.x - window.pageXOffset), this.p.y = t - (this.offset.y - window.pageYOffset), this.p.matrixTransform(i || this.m) }, p.prototype._extractPosition = function (e) { return { x: e.clientX != null ? e.clientX : e.touches[0].clientX, y: e.clientY != null ? e.clientY : e.touches[0].clientY } }, p.prototype.init = function (e) { var t = this; if (this.stop(), e !== "stop") { for (var i in this.options = {}, this.el.resize.defaults) this.options[i] = this.el.resize.defaults[i], e[i] !== void 0 && (this.options[i] = e[i]); this.el.on("lt.resize", function (a) { t.resize(a || window.event) }), this.el.on("rt.resize", function (a) { t.resize(a || window.event) }), this.el.on("rb.resize", function (a) { t.resize(a || window.event) }), this.el.on("lb.resize", function (a) { t.resize(a || window.event) }), this.el.on("t.resize", function (a) { t.resize(a || window.event) }), this.el.on("r.resize", function (a) { t.resize(a || window.event) }), this.el.on("b.resize", function (a) { t.resize(a || window.event) }), this.el.on("l.resize", function (a) { t.resize(a || window.event) }), this.el.on("rot.resize", function (a) { t.resize(a || window.event) }), this.el.on("point.resize", function (a) { t.resize(a || window.event) }), this.update() } }, p.prototype.stop = function () { return this.el.off("lt.resize"), this.el.off("rt.resize"), this.el.off("rb.resize"), this.el.off("lb.resize"), this.el.off("t.resize"), this.el.off("r.resize"), this.el.off("b.resize"), this.el.off("l.resize"), this.el.off("rot.resize"), this.el.off("point.resize"), this }, p.prototype.resize = function (e) { var t = this; this.m = this.el.node.getScreenCTM().inverse(), this.offset = { x: window.pageXOffset, y: window.pageYOffset }; var i = this._extractPosition(e.detail.event); if (this.parameters = { type: this.el.type, p: this.transformPoint(i.x, i.y), x: e.detail.x, y: e.detail.y, box: this.el.bbox(), rotation: this.el.transform().rotation }, this.el.type === "text" && (this.parameters.fontSize = this.el.attr()["font-size"]), e.detail.i !== void 0) { var a = this.el.array().valueOf(); this.parameters.i = e.detail.i, this.parameters.pointCoords = [a[e.detail.i][0], a[e.detail.i][1]] } switch (e.type) { case "lt": this.calc = function (s, r) { var n = this.snapToGrid(s, r); if (this.parameters.box.width - n[0] > 0 && this.parameters.box.height - n[1] > 0) { if (this.parameters.type === "text") return this.el.move(this.parameters.box.x + n[0], this.parameters.box.y), void this.el.attr("font-size", this.parameters.fontSize - n[0]); n = this.checkAspectRatio(n), this.el.move(this.parameters.box.x + n[0], this.parameters.box.y + n[1]).size(this.parameters.box.width - n[0], this.parameters.box.height - n[1]) } }; break; case "rt": this.calc = function (s, r) { var n = this.snapToGrid(s, r, 2); if (this.parameters.box.width + n[0] > 0 && this.parameters.box.height - n[1] > 0) { if (this.parameters.type === "text") return this.el.move(this.parameters.box.x - n[0], this.parameters.box.y), void this.el.attr("font-size", this.parameters.fontSize + n[0]); n = this.checkAspectRatio(n, !0), this.el.move(this.parameters.box.x, this.parameters.box.y + n[1]).size(this.parameters.box.width + n[0], this.parameters.box.height - n[1]) } }; break; case "rb": this.calc = function (s, r) { var n = this.snapToGrid(s, r, 0); if (this.parameters.box.width + n[0] > 0 && this.parameters.box.height + n[1] > 0) { if (this.parameters.type === "text") return this.el.move(this.parameters.box.x - n[0], this.parameters.box.y), void this.el.attr("font-size", this.parameters.fontSize + n[0]); n = this.checkAspectRatio(n), this.el.move(this.parameters.box.x, this.parameters.box.y).size(this.parameters.box.width + n[0], this.parameters.box.height + n[1]) } }; break; case "lb": this.calc = function (s, r) { var n = this.snapToGrid(s, r, 1); if (this.parameters.box.width - n[0] > 0 && this.parameters.box.height + n[1] > 0) { if (this.parameters.type === "text") return this.el.move(this.parameters.box.x + n[0], this.parameters.box.y), void this.el.attr("font-size", this.parameters.fontSize - n[0]); n = this.checkAspectRatio(n, !0), this.el.move(this.parameters.box.x + n[0], this.parameters.box.y).size(this.parameters.box.width - n[0], this.parameters.box.height + n[1]) } }; break; case "t": this.calc = function (s, r) { var n = this.snapToGrid(s, r, 2); if (this.parameters.box.height - n[1] > 0) { if (this.parameters.type === "text") return; this.el.move(this.parameters.box.x, this.parameters.box.y + n[1]).height(this.parameters.box.height - n[1]) } }; break; case "r": this.calc = function (s, r) { var n = this.snapToGrid(s, r, 0); if (this.parameters.box.width + n[0] > 0) { if (this.parameters.type === "text") return; this.el.move(this.parameters.box.x, this.parameters.box.y).width(this.parameters.box.width + n[0]) } }; break; case "b": this.calc = function (s, r) { var n = this.snapToGrid(s, r, 0); if (this.parameters.box.height + n[1] > 0) { if (this.parameters.type === "text") return; this.el.move(this.parameters.box.x, this.parameters.box.y).height(this.parameters.box.height + n[1]) } }; break; case "l": this.calc = function (s, r) { var n = this.snapToGrid(s, r, 1); if (this.parameters.box.width - n[0] > 0) { if (this.parameters.type === "text") return; this.el.move(this.parameters.box.x + n[0], this.parameters.box.y).width(this.parameters.box.width - n[0]) } }; break; case "rot": this.calc = function (s, r) { var n = s + this.parameters.p.x, o = r + this.parameters.p.y, h = Math.atan2(this.parameters.p.y - this.parameters.box.y - this.parameters.box.height / 2, this.parameters.p.x - this.parameters.box.x - this.parameters.box.width / 2), c = Math.atan2(o - this.parameters.box.y - this.parameters.box.height / 2, n - this.parameters.box.x - this.parameters.box.width / 2), d = this.parameters.rotation + 180 * (c - h) / Math.PI + this.options.snapToAngle / 2; this.el.center(this.parameters.box.cx, this.parameters.box.cy).rotate(d - d % this.options.snapToAngle, this.parameters.box.cx, this.parameters.box.cy) }; break; case "point": this.calc = function (s, r) { var n = this.snapToGrid(s, r, this.parameters.pointCoords[0], this.parameters.pointCoords[1]), o = this.el.array().valueOf(); o[this.parameters.i][0] = this.parameters.pointCoords[0] + n[0], o[this.parameters.i][1] = this.parameters.pointCoords[1] + n[1], this.el.plot(o) } }this.el.fire("resizestart", { dx: this.parameters.x, dy: this.parameters.y, event: e }), SVG.on(window, "touchmove.resize", function (s) { t.update(s || window.event) }), SVG.on(window, "touchend.resize", function () { t.done() }), SVG.on(window, "mousemove.resize", function (s) { t.update(s || window.event) }), SVG.on(window, "mouseup.resize", function () { t.done() }) }, p.prototype.update = function (e) { if (e) { var t = this._extractPosition(e), i = this.transformPoint(t.x, t.y), a = i.x - this.parameters.p.x, s = i.y - this.parameters.p.y; this.lastUpdateCall = [a, s], this.calc(a, s), this.el.fire("resizing", { dx: a, dy: s, event: e }) } else this.lastUpdateCall && this.calc(this.lastUpdateCall[0], this.lastUpdateCall[1]) }, p.prototype.done = function () { this.lastUpdateCall = null, SVG.off(window, "mousemove.resize"), SVG.off(window, "mouseup.resize"), SVG.off(window, "touchmove.resize"), SVG.off(window, "touchend.resize"), this.el.fire("resizedone") }, p.prototype.snapToGrid = function (e, t, i, a) { var s; return a !== void 0 ? s = [(i + e) % this.options.snapToGrid, (a + t) % this.options.snapToGrid] : (i = i ?? 3, s = [(this.parameters.box.x + e + (1 & i ? 0 : this.parameters.box.width)) % this.options.snapToGrid, (this.parameters.box.y + t + (2 & i ? 0 : this.parameters.box.height)) % this.options.snapToGrid]), e < 0 && (s[0] -= this.options.snapToGrid), t < 0 && (s[1] -= this.options.snapToGrid), e -= Math.abs(s[0]) < this.options.snapToGrid / 2 ? s[0] : s[0] - (e < 0 ? -this.options.snapToGrid : this.options.snapToGrid), t -= Math.abs(s[1]) < this.options.snapToGrid / 2 ? s[1] : s[1] - (t < 0 ? -this.options.snapToGrid : this.options.snapToGrid), this.constraintToBox(e, t, i, a) }, p.prototype.constraintToBox = function (e, t, i, a) { var s, r, n = this.options.constraint || {}; return a !== void 0 ? (s = i, r = a) : (s = this.parameters.box.x + (1 & i ? 0 : this.parameters.box.width), r = this.parameters.box.y + (2 & i ? 0 : this.parameters.box.height)), n.minX !== void 0 && s + e < n.minX && (e = n.minX - s), n.maxX !== void 0 && s + e > n.maxX && (e = n.maxX - s), n.minY !== void 0 && r + t < n.minY && (t = n.minY - r), n.maxY !== void 0 && r + t > n.maxY && (t = n.maxY - r), [e, t] }, p.prototype.checkAspectRatio = function (e, t) { if (!this.options.saveAspectRatio) return e; var i = e.slice(), a = this.parameters.box.width / this.parameters.box.height, s = this.parameters.box.width + e[0], r = this.parameters.box.height - e[1], n = s / r; return n < a ? (i[1] = s / a - this.parameters.box.height, t && (i[1] = -i[1])) : n > a && (i[0] = this.parameters.box.width - r * a, t && (i[0] = -i[0])), i }, SVG.extend(SVG.Element, { resize: function (e) { return (this.remember("_resizeHandler") || new p(this)).init(e || {}), this } }), SVG.Element.prototype.resize.defaults = { snapToAngle: .1, snapToGrid: 1, constraint: {}, saveAspectRatio: !1 } }).call(this) }(), window.Apex === void 0 && (window.Apex = {}); var Ct = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w } return R(p, [{ key: "initModules", value: function () { this.ctx.publicMethods = ["updateOptions", "updateSeries", "appendData", "appendSeries", "isSeriesHidden", "highlightSeries", "toggleSeries", "showSeries", "hideSeries", "setLocale", "resetSeries", "zoomX", "toggleDataPointSelection", "dataURI", "exportToCSV", "addXaxisAnnotation", "addYaxisAnnotation", "addPointAnnotation", "clearAnnotations", "removeAnnotation", "paper", "destroy"], this.ctx.eventList = ["click", "mousedown", "mousemove", "mouseleave", "touchstart", "touchmove", "touchleave", "mouseup", "touchend"], this.ctx.animations = new ve(this.ctx), this.ctx.axes = new Hi(this.ctx), this.ctx.core = new ga(this.ctx.el, this.ctx), this.ctx.config = new Pe({}), this.ctx.data = new Ft(this.ctx), this.ctx.grid = new Rt(this.ctx), this.ctx.graphics = new X(this.ctx), this.ctx.coreUtils = new $(this.ctx), this.ctx.crosshairs = new nt(this.ctx), this.ctx.events = new Oi(this.ctx), this.ctx.exports = new He(this.ctx), this.ctx.fill = new ne(this.ctx), this.ctx.localization = new Di(this.ctx), this.ctx.options = new ue, this.ctx.responsive = new Ni(this.ctx), this.ctx.series = new re(this.ctx), this.ctx.theme = new Wi(this.ctx), this.ctx.formatters = new ze(this.ctx), this.ctx.titleSubtitle = new Bi(this.ctx), this.ctx.legend = new Dt(this.ctx), this.ctx.toolbar = new Ht(this.ctx), this.ctx.tooltip = new At(this.ctx), this.ctx.dimensions = new Ne(this.ctx), this.ctx.updateHelpers = new ua(this.ctx), this.ctx.zoomPanSelection = new qi(this.ctx), this.ctx.w.globals.tooltip = new At(this.ctx) } }]), p }(), Lt = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w } return R(p, [{ key: "clear", value: function (e) { var t = e.isUpdating; this.ctx.zoomPanSelection && this.ctx.zoomPanSelection.destroy(), this.ctx.toolbar && this.ctx.toolbar.destroy(), this.ctx.animations = null, this.ctx.axes = null, this.ctx.annotations = null, this.ctx.core = null, this.ctx.data = null, this.ctx.grid = null, this.ctx.series = null, this.ctx.responsive = null, this.ctx.theme = null, this.ctx.formatters = null, this.ctx.titleSubtitle = null, this.ctx.legend = null, this.ctx.dimensions = null, this.ctx.options = null, this.ctx.crosshairs = null, this.ctx.zoomPanSelection = null, this.ctx.updateHelpers = null, this.ctx.toolbar = null, this.ctx.localization = null, this.ctx.w.globals.tooltip = null, this.clearDomElements({ isUpdating: t }) } }, { key: "killSVG", value: function (e) { e.each(function (t, i) { this.removeClass("*"), this.off(), this.stop() }, !0), e.ungroup(), e.clear() } }, { key: "clearDomElements", value: function (e) { var t = this, i = e.isUpdating, a = this.w.globals.dom.Paper.node; a.parentNode && a.parentNode.parentNode && !i && (a.parentNode.parentNode.style.minHeight = "unset"); var s = this.w.globals.dom.baseEl; s && this.ctx.eventList.forEach(function (n) { s.removeEventListener(n, t.ctx.events.documentEvent) }); var r = this.w.globals.dom; if (this.ctx.el !== null) for (; this.ctx.el.firstChild;)this.ctx.el.removeChild(this.ctx.el.firstChild); this.killSVG(r.Paper), r.Paper.remove(), r.elWrap = null, r.elGraphical = null, r.elLegendWrap = null, r.elLegendForeign = null, r.baseEl = null, r.elGridRect = null, r.elGridRectMask = null, r.elGridRectMarkerMask = null, r.elForecastMask = null, r.elNonForecastMask = null, r.elDefs = null } }]), p }(), it = new WeakMap, fa = function () { + function p(e, t) { F(this, p), this.opts = t, this.ctx = this, this.w = new Ri(t).init(), this.el = e, this.w.globals.cuid = P.randomId(), this.w.globals.chartID = this.w.config.chart.id ? P.escapeString(this.w.config.chart.id) : this.w.globals.cuid, new Ct(this).initModules(), this.create = P.bind(this.create, this), this.windowResizeHandler = this._windowResizeHandler.bind(this), this.parentResizeHandler = this._parentResizeCallback.bind(this) } return R(p, [{ + key: "render", value: function () { + var e = this; return new Promise(function (t, i) { + if (e.el !== null) { + Apex._chartInstances === void 0 && (Apex._chartInstances = []), e.w.config.chart.id && Apex._chartInstances.push({ id: e.w.globals.chartID, group: e.w.config.chart.group, chart: e }), e.setLocale(e.w.config.chart.defaultLocale); var a = e.w.config.chart.events.beforeMount; typeof a == "function" && a(e, e.w), e.events.fireEvent("beforeMount", [e, e.w]), window.addEventListener("resize", e.windowResizeHandler), function (g, f) { var x = !1; if (g.nodeType !== Node.DOCUMENT_FRAGMENT_NODE) { var b = g.getBoundingClientRect(); g.style.display !== "none" && b.width !== 0 || (x = !0) } var v = new ResizeObserver(function (y) { x && f.call(g, y), x = !0 }); g.nodeType === Node.DOCUMENT_FRAGMENT_NODE ? Array.from(g.children).forEach(function (y) { return v.observe(y) }) : v.observe(g), it.set(f, v) }(e.el.parentNode, e.parentResizeHandler); var s = e.el.getRootNode && e.el.getRootNode(), r = P.is("ShadowRoot", s), n = e.el.ownerDocument, o = r ? s.getElementById("apexcharts-css") : n.getElementById("apexcharts-css"); if (!o) { + var h; (o = document.createElement("style")).id = "apexcharts-css", o.textContent = `@keyframes opaque { 0% { opacity: 0 } @@ -788,7 +873,14 @@ rect.legend-mouseover-inactive, .apexcharts-rangebar-goals-markers { pointer-events: none -}`;var c=((h=e.opts.chart)===null||h===void 0?void 0:h.nonce)||e.w.config.chart.nonce;c&&o.setAttribute("nonce",c),r?s.prepend(o):n.head.appendChild(o)}var d=e.create(e.w.config.series,{});if(!d)return t(e);e.mount(d).then(function(){typeof e.w.config.chart.events.mounted=="function"&&e.w.config.chart.events.mounted(e,e.w),e.events.fireEvent("mounted",[e,e.w]),t(d)}).catch(function(g){i(g)})}else i(new Error("Element not found"))})}},{key:"create",value:function(e,t){var i=this,a=this.w;new Ct(this).initModules();var s=this.w.globals;if(s.noData=!1,s.animationEnded=!1,this.responsive.checkResponsiveConfig(t),a.config.xaxis.convertedCatToNumeric&&new Le(a.config).convertCatToNumericXaxis(a.config,this.ctx),this.el===null||(this.core.setupElements(),a.config.chart.type==="treemap"&&(a.config.grid.show=!1,a.config.yaxis[0].show=!1),s.svgWidth===0))return s.animationEnded=!0,null;var r=e;e.forEach(function(g,f){g.hidden&&(r=i.legend.legendHelpers.getSeriesAfterCollapsing({realIndex:f}))});var n=$.checkComboSeries(r,a.config.chart.type);s.comboCharts=n.comboCharts,s.comboBarCount=n.comboBarCount;var o=r.every(function(g){return g.data&&g.data.length===0});(r.length===0||o&&s.collapsedSeries.length<1)&&this.series.handleNoData(),this.events.setupEventHandlers(),this.data.parseData(r),this.theme.init(),new ye(this).setGlobalMarkerSize(),this.formatters.setLabelFormatters(),this.titleSubtitle.draw(),s.noData&&s.collapsedSeries.length!==s.series.length&&!a.config.legend.showForSingleSeries||this.legend.init(),this.series.hasAllSeriesEqualX(),s.axisCharts&&(this.core.coreCalculations(),a.config.xaxis.type!=="category"&&this.formatters.setLabelFormatters(),this.ctx.toolbar.minX=a.globals.minX,this.ctx.toolbar.maxX=a.globals.maxX),this.formatters.heatmapLabelFormatters(),new $(this).getLargestMarkerSize(),this.dimensions.plotCoords();var h=this.core.xySettings();this.grid.createGridMask();var c=this.core.plotChartType(r,h),d=new be(this);return d.bringForward(),a.config.dataLabels.background.enabled&&d.dataLabelsBackground(),this.core.shiftGraphPosition(),{elGraph:c,xyRatios:h,dimensions:{plot:{left:a.globals.translateX,top:a.globals.translateY,width:a.globals.gridWidth,height:a.globals.gridHeight}}}}},{key:"mount",value:function(){var e=this,t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:null,i=this,a=i.w;return new Promise(function(s,r){if(i.el===null)return r(new Error("Not enough data to display or target element not found"));(t===null||a.globals.allSeriesCollapsed)&&i.series.handleNoData(),i.grid=new Rt(i);var n,o,h=i.grid.drawGrid();if(i.annotations=new Fi(i),i.annotations.drawImageAnnos(),i.annotations.drawTextAnnos(),a.config.grid.position==="back"&&(h&&a.globals.dom.elGraphical.add(h.el),h!=null&&(n=h.elGridBorders)!==null&&n!==void 0&&n.node&&a.globals.dom.elGraphical.add(h.elGridBorders)),Array.isArray(t.elGraph))for(var c=0;c0&&a.globals.memory.methodsToExec.forEach(function(x){x.method(x.params,!1,x.context)}),a.globals.axisCharts||a.globals.noData||i.core.resizeNonAxisCharts(),s(i)})}},{key:"destroy",value:function(){var e,t;window.removeEventListener("resize",this.windowResizeHandler),this.el.parentNode,e=this.parentResizeHandler,(t=it.get(e))&&(t.disconnect(),it.delete(e));var i=this.w.config.chart.id;i&&Apex._chartInstances.forEach(function(a,s){a.id===P.escapeString(i)&&Apex._chartInstances.splice(s,1)}),new Lt(this.ctx).clear({isUpdating:!1})}},{key:"updateOptions",value:function(e){var t=this,i=arguments.length>1&&arguments[1]!==void 0&&arguments[1],a=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2],s=!(arguments.length>3&&arguments[3]!==void 0)||arguments[3],r=!(arguments.length>4&&arguments[4]!==void 0)||arguments[4],n=this.w;return n.globals.selection=void 0,e.series&&(this.series.resetSeries(!1,!0,!1),e.series.length&&e.series[0].data&&(e.series=e.series.map(function(o,h){return t.updateHelpers._extendSeries(o,h)})),this.updateHelpers.revertDefaultAxisMinMax()),e.xaxis&&(e=this.updateHelpers.forceXAxisUpdate(e)),e.yaxis&&(e=this.updateHelpers.forceYAxisUpdate(e)),n.globals.collapsedSeriesIndices.length>0&&this.series.clearPreviousPaths(),e.theme&&(e=this.theme.updateThemeOptions(e)),this.updateHelpers._updateOptions(e,i,a,s,r)}},{key:"updateSeries",value:function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],t=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],i=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2];return this.series.resetSeries(!1),this.updateHelpers.revertDefaultAxisMinMax(),this.updateHelpers._updateSeries(e,t,i)}},{key:"appendSeries",value:function(e){var t=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],i=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2],a=this.w.config.series.slice();return a.push(e),this.series.resetSeries(!1),this.updateHelpers.revertDefaultAxisMinMax(),this.updateHelpers._updateSeries(a,t,i)}},{key:"appendData",value:function(e){var t=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],i=this;i.w.globals.dataChanged=!0,i.series.getPreviousPaths();for(var a=i.w.config.series.slice(),s=0;s0&&arguments[0]!==void 0)||arguments[0],t=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1];this.series.resetSeries(e,t)}},{key:"addEventListener",value:function(e,t){this.events.addEventListener(e,t)}},{key:"removeEventListener",value:function(e,t){this.events.removeEventListener(e,t)}},{key:"addXaxisAnnotation",value:function(e){var t=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:void 0,a=this;i&&(a=i),a.annotations.addXaxisAnnotationExternal(e,t,a)}},{key:"addYaxisAnnotation",value:function(e){var t=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:void 0,a=this;i&&(a=i),a.annotations.addYaxisAnnotationExternal(e,t,a)}},{key:"addPointAnnotation",value:function(e){var t=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:void 0,a=this;i&&(a=i),a.annotations.addPointAnnotationExternal(e,t,a)}},{key:"clearAnnotations",value:function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:void 0,t=this;e&&(t=e),t.annotations.clearAnnotations(t)}},{key:"removeAnnotation",value:function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:void 0,i=this;t&&(i=t),i.annotations.removeAnnotation(i,e)}},{key:"getChartArea",value:function(){return this.w.globals.dom.baseEl.querySelector(".apexcharts-inner")}},{key:"getSeriesTotalXRange",value:function(e,t){return this.coreUtils.getSeriesTotalsXRange(e,t)}},{key:"getHighestValueInSeries",value:function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;return new rt(this.ctx).getMinYMaxY(e).highestY}},{key:"getLowestValueInSeries",value:function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;return new rt(this.ctx).getMinYMaxY(e).lowestY}},{key:"getSeriesTotal",value:function(){return this.w.globals.seriesTotals}},{key:"toggleDataPointSelection",value:function(e,t){return this.updateHelpers.toggleDataPointSelection(e,t)}},{key:"zoomX",value:function(e,t){this.ctx.toolbar.zoomUpdateOptions(e,t)}},{key:"setLocale",value:function(e){this.localization.setCurrentLocaleValues(e)}},{key:"dataURI",value:function(e){return new He(this.ctx).dataURI(e)}},{key:"exportToCSV",value:function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return new He(this.ctx).exportToCSV(e)}},{key:"paper",value:function(){return this.w.globals.dom.Paper}},{key:"_parentResizeCallback",value:function(){this.w.globals.animationEnded&&this.w.config.chart.redrawOnParentResize&&this._windowResize()}},{key:"_windowResize",value:function(){var e=this;clearTimeout(this.w.globals.resizeTimer),this.w.globals.resizeTimer=window.setTimeout(function(){e.w.globals.resized=!0,e.w.globals.dataChanged=!1,e.ctx.update()},150)}},{key:"_windowResizeHandler",value:function(){var e=this.w.config.chart.redrawOnWindowResize;typeof e=="function"&&(e=e()),e&&this._windowResize()}}],[{key:"getChartByID",value:function(e){var t=P.escapeString(e);if(Apex._chartInstances){var i=Apex._chartInstances.filter(function(a){return a.id===t})[0];return i&&i.chart}}},{key:"initOnLoad",value:function(){for(var e=document.querySelectorAll("[data-apexcharts]"),t=0;t2?s-2:0),n=2;n{var pa=200,ii="__lodash_hash_undefined__",xa=800,ba=16,ai=9007199254740991,si="[object Arguments]",ma="[object Array]",va="[object AsyncFunction]",ya="[object Boolean]",wa="[object Date]",ka="[object Error]",ri="[object Function]",Aa="[object GeneratorFunction]",Sa="[object Map]",Ca="[object Number]",La="[object Null]",ni="[object Object]",Pa="[object Proxy]",Ma="[object RegExp]",Ia="[object Set]",Ta="[object String]",za="[object Undefined]",Xa="[object WeakMap]",Ea="[object ArrayBuffer]",Ya="[object DataView]",Fa="[object Float32Array]",Ra="[object Float64Array]",Oa="[object Int8Array]",Da="[object Int16Array]",Ha="[object Int32Array]",Na="[object Uint8Array]",Wa="[object Uint8ClampedArray]",Ba="[object Uint16Array]",Ga="[object Uint32Array]",Va=/[\\^$.*+?()[\]{}|]/g,_a=/^\[object .+?Constructor\]$/,ja=/^(?:0|[1-9]\d*)$/,U={};U[Fa]=U[Ra]=U[Oa]=U[Da]=U[Ha]=U[Na]=U[Wa]=U[Ba]=U[Ga]=!0;U[si]=U[ma]=U[Ea]=U[ya]=U[Ya]=U[wa]=U[ka]=U[ri]=U[Sa]=U[Ca]=U[ni]=U[Ma]=U[Ia]=U[Ta]=U[Xa]=!1;var oi=typeof global=="object"&&global&&global.Object===Object&&global,Ua=typeof self=="object"&&self&&self.Object===Object&&self,Fe=oi||Ua||Function("return this")(),li=typeof Xe=="object"&&Xe&&!Xe.nodeType&&Xe,Ee=li&&typeof we=="object"&&we&&!we.nodeType&&we,hi=Ee&&Ee.exports===li,ht=hi&&oi.process,Ut=function(){try{var p=Ee&&Ee.require&&Ee.require("util").types;return p||ht&&ht.binding&&ht.binding("util")}catch{}}(),qt=Ut&&Ut.isTypedArray;function qa(p,e,t){switch(t.length){case 0:return p.call(e);case 1:return p.call(e,t[0]);case 2:return p.call(e,t[0],t[1]);case 3:return p.call(e,t[0],t[1],t[2])}return p.apply(e,t)}function Za(p,e){for(var t=-1,i=Array(p);++t-1}function bs(p,e){var t=this.__data__,i=Ue(t,p);return i<0?(++this.size,t.push([p,e])):t[i][1]=e,this}de.prototype.clear=us;de.prototype.delete=fs;de.prototype.get=ps;de.prototype.has=xs;de.prototype.set=bs;function ke(p){var e=-1,t=p==null?0:p.length;for(this.clear();++e1?t[a-1]:void 0,r=a>2?t[2]:void 0;for(s=p.length>3&&typeof s=="function"?(a--,s):void 0,r&&js(t[0],t[1],r)&&(s=a<3?void 0:s,a=1),e=Object(e);++i-1&&p%1==0&&p0){if(++e>=xa)return arguments[0]}else e=0;return p.apply(void 0,arguments)}}function er(p){if(p!=null){try{return je.call(p)}catch{}try{return p+""}catch{}}return""}function $e(p,e){return p===e||p!==p&&e!==e}var ut=ti(function(){return arguments}())?ti:function(p){return Re(p)&&ce.call(p,"callee")&&!as.call(p,"callee")},ft=Array.isArray;function bt(p){return p!=null&&bi(p.length)&&!mt(p)}function tr(p){return Re(p)&&bt(p)}var xi=rs||nr;function mt(p){if(!xe(p))return!1;var e=qe(p);return e==ri||e==Aa||e==va||e==Pa}function bi(p){return typeof p=="number"&&p>-1&&p%1==0&&p<=ai}function xe(p){var e=typeof p;return p!=null&&(e=="object"||e=="function")}function Re(p){return p!=null&&typeof p=="object"}function ir(p){if(!Re(p)||qe(p)!=ni)return!1;var e=di(p);if(e===null)return!0;var t=ce.call(e,"constructor")&&e.constructor;return typeof t=="function"&&t instanceof t&&je.call(t)==ts}var mi=qt?$a(qt):Xs;function ar(p){return Ws(p,vi(p))}function vi(p){return bt(p)?Ms(p,!0):Es(p)}var sr=Bs(function(p,e,t){ui(p,e,t)});function rr(p){return function(){return p}}function yi(p){return p}function nr(){return!1}we.exports=sr});var Ai=zi(jt(),1),ki=wi();function or({options:p,chartId:e,theme:t,extraJsOptions:i}){return{chart:null,options:p,chartId:e,theme:t,extraJsOptions:i,init:function(){this.$wire.$on("updateOptions",({options:a})=>{a=ki(a,this.extraJsOptions),this.updateChart(a)}),Alpine.effect(()=>{let a=Alpine.store("theme");this.$nextTick(()=>{this.chart===null?this.initChart():this.updateChart({theme:{mode:a},chart:{background:"inherit"}})})})},initChart:function(){this.options.theme={mode:this.theme},this.options.chart.background="inherit",this.options=ki(this.options,this.extraJsOptions),this.chart=new Ai.default(document.querySelector(this.chartId),this.options),this.chart.render()},updateChart:function(a){this.chart.updateOptions(a,!1,!0,!0)}}}export{or as default}; +}`; var c = ((h = e.opts.chart) === null || h === void 0 ? void 0 : h.nonce) || e.w.config.chart.nonce; c && o.setAttribute("nonce", c), r ? s.prepend(o) : n.head.appendChild(o) + } var d = e.create(e.w.config.series, {}); if (!d) return t(e); e.mount(d).then(function () { typeof e.w.config.chart.events.mounted == "function" && e.w.config.chart.events.mounted(e, e.w), e.events.fireEvent("mounted", [e, e.w]), t(d) }).catch(function (g) { i(g) }) + } else i(new Error("Element not found")) + }) + } + }, { key: "create", value: function (e, t) { var i = this, a = this.w; new Ct(this).initModules(); var s = this.w.globals; if (s.noData = !1, s.animationEnded = !1, this.responsive.checkResponsiveConfig(t), a.config.xaxis.convertedCatToNumeric && new Le(a.config).convertCatToNumericXaxis(a.config, this.ctx), this.el === null || (this.core.setupElements(), a.config.chart.type === "treemap" && (a.config.grid.show = !1, a.config.yaxis[0].show = !1), s.svgWidth === 0)) return s.animationEnded = !0, null; var r = e; e.forEach(function (g, f) { g.hidden && (r = i.legend.legendHelpers.getSeriesAfterCollapsing({ realIndex: f })) }); var n = $.checkComboSeries(r, a.config.chart.type); s.comboCharts = n.comboCharts, s.comboBarCount = n.comboBarCount; var o = r.every(function (g) { return g.data && g.data.length === 0 }); (r.length === 0 || o && s.collapsedSeries.length < 1) && this.series.handleNoData(), this.events.setupEventHandlers(), this.data.parseData(r), this.theme.init(), new ye(this).setGlobalMarkerSize(), this.formatters.setLabelFormatters(), this.titleSubtitle.draw(), s.noData && s.collapsedSeries.length !== s.series.length && !a.config.legend.showForSingleSeries || this.legend.init(), this.series.hasAllSeriesEqualX(), s.axisCharts && (this.core.coreCalculations(), a.config.xaxis.type !== "category" && this.formatters.setLabelFormatters(), this.ctx.toolbar.minX = a.globals.minX, this.ctx.toolbar.maxX = a.globals.maxX), this.formatters.heatmapLabelFormatters(), new $(this).getLargestMarkerSize(), this.dimensions.plotCoords(); var h = this.core.xySettings(); this.grid.createGridMask(); var c = this.core.plotChartType(r, h), d = new be(this); return d.bringForward(), a.config.dataLabels.background.enabled && d.dataLabelsBackground(), this.core.shiftGraphPosition(), { elGraph: c, xyRatios: h, dimensions: { plot: { left: a.globals.translateX, top: a.globals.translateY, width: a.globals.gridWidth, height: a.globals.gridHeight } } } } }, { key: "mount", value: function () { var e = this, t = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : null, i = this, a = i.w; return new Promise(function (s, r) { if (i.el === null) return r(new Error("Not enough data to display or target element not found")); (t === null || a.globals.allSeriesCollapsed) && i.series.handleNoData(), i.grid = new Rt(i); var n, o, h = i.grid.drawGrid(); if (i.annotations = new Fi(i), i.annotations.drawImageAnnos(), i.annotations.drawTextAnnos(), a.config.grid.position === "back" && (h && a.globals.dom.elGraphical.add(h.el), h != null && (n = h.elGridBorders) !== null && n !== void 0 && n.node && a.globals.dom.elGraphical.add(h.elGridBorders)), Array.isArray(t.elGraph)) for (var c = 0; c < t.elGraph.length; c++)a.globals.dom.elGraphical.add(t.elGraph[c]); else a.globals.dom.elGraphical.add(t.elGraph); a.config.grid.position === "front" && (h && a.globals.dom.elGraphical.add(h.el), h != null && (o = h.elGridBorders) !== null && o !== void 0 && o.node && a.globals.dom.elGraphical.add(h.elGridBorders)), a.config.xaxis.crosshairs.position === "front" && i.crosshairs.drawXCrosshairs(), a.config.yaxis[0].crosshairs.position === "front" && i.crosshairs.drawYCrosshairs(), a.config.chart.type !== "treemap" && i.axes.drawAxis(a.config.chart.type, h); var d = new Me(e.ctx, h), g = new lt(e.ctx, h); if (h !== null && (d.xAxisLabelCorrections(h.xAxisTickWidth), g.setYAxisTextAlignments(), a.config.yaxis.map(function (x, b) { a.globals.ignoreYAxisIndexes.indexOf(b) === -1 && g.yAxisTitleRotate(b, x.opposite) })), i.annotations.drawAxesAnnotations(), !a.globals.noData) { if (a.config.tooltip.enabled && !a.globals.noData && i.w.globals.tooltip.drawTooltip(t.xyRatios), a.globals.axisCharts && (a.globals.isXNumeric || a.config.xaxis.convertedCatToNumeric || a.globals.isRangeBar)) (a.config.chart.zoom.enabled || a.config.chart.selection && a.config.chart.selection.enabled || a.config.chart.pan && a.config.chart.pan.enabled) && i.zoomPanSelection.init({ xyRatios: t.xyRatios }); else { var f = a.config.chart.toolbar.tools;["zoom", "zoomin", "zoomout", "selection", "pan", "reset"].forEach(function (x) { f[x] = !1 }) } a.config.chart.toolbar.show && !a.globals.allSeriesCollapsed && i.toolbar.createToolbar() } a.globals.memory.methodsToExec.length > 0 && a.globals.memory.methodsToExec.forEach(function (x) { x.method(x.params, !1, x.context) }), a.globals.axisCharts || a.globals.noData || i.core.resizeNonAxisCharts(), s(i) }) } }, { key: "destroy", value: function () { var e, t; window.removeEventListener("resize", this.windowResizeHandler), this.el.parentNode, e = this.parentResizeHandler, (t = it.get(e)) && (t.disconnect(), it.delete(e)); var i = this.w.config.chart.id; i && Apex._chartInstances.forEach(function (a, s) { a.id === P.escapeString(i) && Apex._chartInstances.splice(s, 1) }), new Lt(this.ctx).clear({ isUpdating: !1 }) } }, { key: "updateOptions", value: function (e) { var t = this, i = arguments.length > 1 && arguments[1] !== void 0 && arguments[1], a = !(arguments.length > 2 && arguments[2] !== void 0) || arguments[2], s = !(arguments.length > 3 && arguments[3] !== void 0) || arguments[3], r = !(arguments.length > 4 && arguments[4] !== void 0) || arguments[4], n = this.w; return n.globals.selection = void 0, e.series && (this.series.resetSeries(!1, !0, !1), e.series.length && e.series[0].data && (e.series = e.series.map(function (o, h) { return t.updateHelpers._extendSeries(o, h) })), this.updateHelpers.revertDefaultAxisMinMax()), e.xaxis && (e = this.updateHelpers.forceXAxisUpdate(e)), e.yaxis && (e = this.updateHelpers.forceYAxisUpdate(e)), n.globals.collapsedSeriesIndices.length > 0 && this.series.clearPreviousPaths(), e.theme && (e = this.theme.updateThemeOptions(e)), this.updateHelpers._updateOptions(e, i, a, s, r) } }, { key: "updateSeries", value: function () { var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : [], t = !(arguments.length > 1 && arguments[1] !== void 0) || arguments[1], i = !(arguments.length > 2 && arguments[2] !== void 0) || arguments[2]; return this.series.resetSeries(!1), this.updateHelpers.revertDefaultAxisMinMax(), this.updateHelpers._updateSeries(e, t, i) } }, { key: "appendSeries", value: function (e) { var t = !(arguments.length > 1 && arguments[1] !== void 0) || arguments[1], i = !(arguments.length > 2 && arguments[2] !== void 0) || arguments[2], a = this.w.config.series.slice(); return a.push(e), this.series.resetSeries(!1), this.updateHelpers.revertDefaultAxisMinMax(), this.updateHelpers._updateSeries(a, t, i) } }, { key: "appendData", value: function (e) { var t = !(arguments.length > 1 && arguments[1] !== void 0) || arguments[1], i = this; i.w.globals.dataChanged = !0, i.series.getPreviousPaths(); for (var a = i.w.config.series.slice(), s = 0; s < a.length; s++)if (e[s] !== null && e[s] !== void 0) for (var r = 0; r < e[s].data.length; r++)a[s].data.push(e[s].data[r]); return i.w.config.series = a, t && (i.w.globals.initialSeries = P.clone(i.w.config.series)), this.update() } }, { key: "update", value: function (e) { var t = this; return new Promise(function (i, a) { new Lt(t.ctx).clear({ isUpdating: !0 }); var s = t.create(t.w.config.series, e); if (!s) return i(t); t.mount(s).then(function () { typeof t.w.config.chart.events.updated == "function" && t.w.config.chart.events.updated(t, t.w), t.events.fireEvent("updated", [t, t.w]), t.w.globals.isDirty = !0, i(t) }).catch(function (r) { a(r) }) }) } }, { key: "getSyncedCharts", value: function () { var e = this.getGroupedCharts(), t = [this]; return e.length && (t = [], e.forEach(function (i) { t.push(i) })), t } }, { key: "getGroupedCharts", value: function () { var e = this; return Apex._chartInstances.filter(function (t) { if (t.group) return !0 }).map(function (t) { return e.w.config.chart.group === t.group ? t.chart : e }) } }, { key: "toggleSeries", value: function (e) { return this.series.toggleSeries(e) } }, { key: "highlightSeriesOnLegendHover", value: function (e, t) { return this.series.toggleSeriesOnHover(e, t) } }, { key: "showSeries", value: function (e) { this.series.showSeries(e) } }, { key: "hideSeries", value: function (e) { this.series.hideSeries(e) } }, { key: "highlightSeries", value: function (e) { this.series.highlightSeries(e) } }, { key: "isSeriesHidden", value: function (e) { this.series.isSeriesHidden(e) } }, { key: "resetSeries", value: function () { var e = !(arguments.length > 0 && arguments[0] !== void 0) || arguments[0], t = !(arguments.length > 1 && arguments[1] !== void 0) || arguments[1]; this.series.resetSeries(e, t) } }, { key: "addEventListener", value: function (e, t) { this.events.addEventListener(e, t) } }, { key: "removeEventListener", value: function (e, t) { this.events.removeEventListener(e, t) } }, { key: "addXaxisAnnotation", value: function (e) { var t = !(arguments.length > 1 && arguments[1] !== void 0) || arguments[1], i = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : void 0, a = this; i && (a = i), a.annotations.addXaxisAnnotationExternal(e, t, a) } }, { key: "addYaxisAnnotation", value: function (e) { var t = !(arguments.length > 1 && arguments[1] !== void 0) || arguments[1], i = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : void 0, a = this; i && (a = i), a.annotations.addYaxisAnnotationExternal(e, t, a) } }, { key: "addPointAnnotation", value: function (e) { var t = !(arguments.length > 1 && arguments[1] !== void 0) || arguments[1], i = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : void 0, a = this; i && (a = i), a.annotations.addPointAnnotationExternal(e, t, a) } }, { key: "clearAnnotations", value: function () { var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : void 0, t = this; e && (t = e), t.annotations.clearAnnotations(t) } }, { key: "removeAnnotation", value: function (e) { var t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : void 0, i = this; t && (i = t), i.annotations.removeAnnotation(i, e) } }, { key: "getChartArea", value: function () { return this.w.globals.dom.baseEl.querySelector(".apexcharts-inner") } }, { key: "getSeriesTotalXRange", value: function (e, t) { return this.coreUtils.getSeriesTotalsXRange(e, t) } }, { key: "getHighestValueInSeries", value: function () { var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 0; return new rt(this.ctx).getMinYMaxY(e).highestY } }, { key: "getLowestValueInSeries", value: function () { var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 0; return new rt(this.ctx).getMinYMaxY(e).lowestY } }, { key: "getSeriesTotal", value: function () { return this.w.globals.seriesTotals } }, { key: "toggleDataPointSelection", value: function (e, t) { return this.updateHelpers.toggleDataPointSelection(e, t) } }, { key: "zoomX", value: function (e, t) { this.ctx.toolbar.zoomUpdateOptions(e, t) } }, { key: "setLocale", value: function (e) { this.localization.setCurrentLocaleValues(e) } }, { key: "dataURI", value: function (e) { return new He(this.ctx).dataURI(e) } }, { key: "exportToCSV", value: function () { var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}; return new He(this.ctx).exportToCSV(e) } }, { key: "paper", value: function () { return this.w.globals.dom.Paper } }, { key: "_parentResizeCallback", value: function () { this.w.globals.animationEnded && this.w.config.chart.redrawOnParentResize && this._windowResize() } }, { key: "_windowResize", value: function () { var e = this; clearTimeout(this.w.globals.resizeTimer), this.w.globals.resizeTimer = window.setTimeout(function () { e.w.globals.resized = !0, e.w.globals.dataChanged = !1, e.ctx.update() }, 150) } }, { key: "_windowResizeHandler", value: function () { var e = this.w.config.chart.redrawOnWindowResize; typeof e == "function" && (e = e()), e && this._windowResize() } }], [{ key: "getChartByID", value: function (e) { var t = P.escapeString(e); if (Apex._chartInstances) { var i = Apex._chartInstances.filter(function (a) { return a.id === t })[0]; return i && i.chart } } }, { key: "initOnLoad", value: function () { for (var e = document.querySelectorAll("[data-apexcharts]"), t = 0; t < e.length; t++)new p(e[t], JSON.parse(e[t].getAttribute("data-options"))).render() } }, { key: "exec", value: function (e, t) { var i = this.getChartByID(e); if (i) { i.w.globals.isExecCalled = !0; var a = null; if (i.publicMethods.indexOf(t) !== -1) { for (var s = arguments.length, r = new Array(s > 2 ? s - 2 : 0), n = 2; n < s; n++)r[n - 2] = arguments[n]; a = i[t].apply(i, r) } return a } } }, { key: "merge", value: function (e, t) { return P.extend(e, t) } }]), p + }(); We.exports = fa +}); var wi = yt((Xe, we) => { var pa = 200, ii = "__lodash_hash_undefined__", xa = 800, ba = 16, ai = 9007199254740991, si = "[object Arguments]", ma = "[object Array]", va = "[object AsyncFunction]", ya = "[object Boolean]", wa = "[object Date]", ka = "[object Error]", ri = "[object Function]", Aa = "[object GeneratorFunction]", Sa = "[object Map]", Ca = "[object Number]", La = "[object Null]", ni = "[object Object]", Pa = "[object Proxy]", Ma = "[object RegExp]", Ia = "[object Set]", Ta = "[object String]", za = "[object Undefined]", Xa = "[object WeakMap]", Ea = "[object ArrayBuffer]", Ya = "[object DataView]", Fa = "[object Float32Array]", Ra = "[object Float64Array]", Oa = "[object Int8Array]", Da = "[object Int16Array]", Ha = "[object Int32Array]", Na = "[object Uint8Array]", Wa = "[object Uint8ClampedArray]", Ba = "[object Uint16Array]", Ga = "[object Uint32Array]", Va = /[\\^$.*+?()[\]{}|]/g, _a = /^\[object .+?Constructor\]$/, ja = /^(?:0|[1-9]\d*)$/, U = {}; U[Fa] = U[Ra] = U[Oa] = U[Da] = U[Ha] = U[Na] = U[Wa] = U[Ba] = U[Ga] = !0; U[si] = U[ma] = U[Ea] = U[ya] = U[Ya] = U[wa] = U[ka] = U[ri] = U[Sa] = U[Ca] = U[ni] = U[Ma] = U[Ia] = U[Ta] = U[Xa] = !1; var oi = typeof global == "object" && global && global.Object === Object && global, Ua = typeof self == "object" && self && self.Object === Object && self, Fe = oi || Ua || Function("return this")(), li = typeof Xe == "object" && Xe && !Xe.nodeType && Xe, Ee = li && typeof we == "object" && we && !we.nodeType && we, hi = Ee && Ee.exports === li, ht = hi && oi.process, Ut = function () { try { var p = Ee && Ee.require && Ee.require("util").types; return p || ht && ht.binding && ht.binding("util") } catch { } }(), qt = Ut && Ut.isTypedArray; function qa(p, e, t) { switch (t.length) { case 0: return p.call(e); case 1: return p.call(e, t[0]); case 2: return p.call(e, t[0], t[1]); case 3: return p.call(e, t[0], t[1], t[2]) }return p.apply(e, t) } function Za(p, e) { for (var t = -1, i = Array(p); ++t < p;)i[t] = e(t); return i } function $a(p) { return function (e) { return p(e) } } function Ja(p, e) { return p?.[e] } function Ka(p, e) { return function (t) { return p(e(t)) } } var Qa = Array.prototype, es = Function.prototype, _e = Object.prototype, ct = Fe["__core-js_shared__"], je = es.toString, ce = _e.hasOwnProperty, Zt = function () { var p = /[^.]+$/.exec(ct && ct.keys && ct.keys.IE_PROTO || ""); return p ? "Symbol(src)_1." + p : "" }(), ci = _e.toString, ts = je.call(Object), is = RegExp("^" + je.call(ce).replace(Va, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"), Ge = hi ? Fe.Buffer : void 0, $t = Fe.Symbol, Jt = Fe.Uint8Array, Kt = Ge ? Ge.allocUnsafe : void 0, di = Ka(Object.getPrototypeOf, Object), Qt = Object.create, as = _e.propertyIsEnumerable, ss = Qa.splice, fe = $t ? $t.toStringTag : void 0, Ve = function () { try { var p = xt(Object, "defineProperty"); return p({}, "", {}), p } catch { } }(), rs = Ge ? Ge.isBuffer : void 0, ei = Math.max, ns = Date.now, gi = xt(Fe, "Map"), Ye = xt(Object, "create"), os = function () { function p() { } return function (e) { if (!xe(e)) return {}; if (Qt) return Qt(e); p.prototype = e; var t = new p; return p.prototype = void 0, t } }(); function pe(p) { var e = -1, t = p == null ? 0 : p.length; for (this.clear(); ++e < t;) { var i = p[e]; this.set(i[0], i[1]) } } function ls() { this.__data__ = Ye ? Ye(null) : {}, this.size = 0 } function hs(p) { var e = this.has(p) && delete this.__data__[p]; return this.size -= e ? 1 : 0, e } function cs(p) { var e = this.__data__; if (Ye) { var t = e[p]; return t === ii ? void 0 : t } return ce.call(e, p) ? e[p] : void 0 } function ds(p) { var e = this.__data__; return Ye ? e[p] !== void 0 : ce.call(e, p) } function gs(p, e) { var t = this.__data__; return this.size += this.has(p) ? 0 : 1, t[p] = Ye && e === void 0 ? ii : e, this } pe.prototype.clear = ls; pe.prototype.delete = hs; pe.prototype.get = cs; pe.prototype.has = ds; pe.prototype.set = gs; function de(p) { var e = -1, t = p == null ? 0 : p.length; for (this.clear(); ++e < t;) { var i = p[e]; this.set(i[0], i[1]) } } function us() { this.__data__ = [], this.size = 0 } function fs(p) { var e = this.__data__, t = Ue(e, p); if (t < 0) return !1; var i = e.length - 1; return t == i ? e.pop() : ss.call(e, t, 1), --this.size, !0 } function ps(p) { var e = this.__data__, t = Ue(e, p); return t < 0 ? void 0 : e[t][1] } function xs(p) { return Ue(this.__data__, p) > -1 } function bs(p, e) { var t = this.__data__, i = Ue(t, p); return i < 0 ? (++this.size, t.push([p, e])) : t[i][1] = e, this } de.prototype.clear = us; de.prototype.delete = fs; de.prototype.get = ps; de.prototype.has = xs; de.prototype.set = bs; function ke(p) { var e = -1, t = p == null ? 0 : p.length; for (this.clear(); ++e < t;) { var i = p[e]; this.set(i[0], i[1]) } } function ms() { this.size = 0, this.__data__ = { hash: new pe, map: new (gi || de), string: new pe } } function vs(p) { var e = Ze(this, p).delete(p); return this.size -= e ? 1 : 0, e } function ys(p) { return Ze(this, p).get(p) } function ws(p) { return Ze(this, p).has(p) } function ks(p, e) { var t = Ze(this, p), i = t.size; return t.set(p, e), this.size += t.size == i ? 0 : 1, this } ke.prototype.clear = ms; ke.prototype.delete = vs; ke.prototype.get = ys; ke.prototype.has = ws; ke.prototype.set = ks; function Ae(p) { var e = this.__data__ = new de(p); this.size = e.size } function As() { this.__data__ = new de, this.size = 0 } function Ss(p) { var e = this.__data__, t = e.delete(p); return this.size = e.size, t } function Cs(p) { return this.__data__.get(p) } function Ls(p) { return this.__data__.has(p) } function Ps(p, e) { var t = this.__data__; if (t instanceof de) { var i = t.__data__; if (!gi || i.length < pa - 1) return i.push([p, e]), this.size = ++t.size, this; t = this.__data__ = new ke(i) } return t.set(p, e), this.size = t.size, this } Ae.prototype.clear = As; Ae.prototype.delete = Ss; Ae.prototype.get = Cs; Ae.prototype.has = Ls; Ae.prototype.set = Ps; function Ms(p, e) { var t = ft(p), i = !t && ut(p), a = !t && !i && xi(p), s = !t && !i && !a && mi(p), r = t || i || a || s, n = r ? Za(p.length, String) : [], o = n.length; for (var h in p) (e || ce.call(p, h)) && !(r && (h == "length" || a && (h == "offset" || h == "parent") || s && (h == "buffer" || h == "byteLength" || h == "byteOffset") || fi(h, o))) && n.push(h); return n } function dt(p, e, t) { (t !== void 0 && !$e(p[e], t) || t === void 0 && !(e in p)) && pt(p, e, t) } function Is(p, e, t) { var i = p[e]; (!(ce.call(p, e) && $e(i, t)) || t === void 0 && !(e in p)) && pt(p, e, t) } function Ue(p, e) { for (var t = p.length; t--;)if ($e(p[t][0], e)) return t; return -1 } function pt(p, e, t) { e == "__proto__" && Ve ? Ve(p, e, { configurable: !0, enumerable: !0, value: t, writable: !0 }) : p[e] = t } var Ts = Gs(); function qe(p) { return p == null ? p === void 0 ? za : La : fe && fe in Object(p) ? Vs(p) : $s(p) } function ti(p) { return Re(p) && qe(p) == si } function zs(p) { if (!xe(p) || qs(p)) return !1; var e = mt(p) ? is : _a; return e.test(er(p)) } function Xs(p) { return Re(p) && bi(p.length) && !!U[qe(p)] } function Es(p) { if (!xe(p)) return Zs(p); var e = pi(p), t = []; for (var i in p) i == "constructor" && (e || !ce.call(p, i)) || t.push(i); return t } function ui(p, e, t, i, a) { p !== e && Ts(e, function (s, r) { if (a || (a = new Ae), xe(s)) Ys(p, e, r, t, ui, i, a); else { var n = i ? i(gt(p, r), s, r + "", p, e, a) : void 0; n === void 0 && (n = s), dt(p, r, n) } }, vi) } function Ys(p, e, t, i, a, s, r) { var n = gt(p, t), o = gt(e, t), h = r.get(o); if (h) { dt(p, t, h); return } var c = s ? s(n, o, t + "", p, e, r) : void 0, d = c === void 0; if (d) { var g = ft(o), f = !g && xi(o), x = !g && !f && mi(o); c = o, g || f || x ? ft(n) ? c = n : tr(n) ? c = Ns(n) : f ? (d = !1, c = Os(o, !0)) : x ? (d = !1, c = Hs(o, !0)) : c = [] : ir(o) || ut(o) ? (c = n, ut(n) ? c = ar(n) : (!xe(n) || mt(n)) && (c = _s(o))) : d = !1 } d && (r.set(o, c), a(c, o, i, s, r), r.delete(o)), dt(p, t, c) } function Fs(p, e) { return Ks(Js(p, e, yi), p + "") } var Rs = Ve ? function (p, e) { return Ve(p, "toString", { configurable: !0, enumerable: !1, value: rr(e), writable: !0 }) } : yi; function Os(p, e) { if (e) return p.slice(); var t = p.length, i = Kt ? Kt(t) : new p.constructor(t); return p.copy(i), i } function Ds(p) { var e = new p.constructor(p.byteLength); return new Jt(e).set(new Jt(p)), e } function Hs(p, e) { var t = e ? Ds(p.buffer) : p.buffer; return new p.constructor(t, p.byteOffset, p.length) } function Ns(p, e) { var t = -1, i = p.length; for (e || (e = Array(i)); ++t < i;)e[t] = p[t]; return e } function Ws(p, e, t, i) { var a = !t; t || (t = {}); for (var s = -1, r = e.length; ++s < r;) { var n = e[s], o = i ? i(t[n], p[n], n, t, p) : void 0; o === void 0 && (o = p[n]), a ? pt(t, n, o) : Is(t, n, o) } return t } function Bs(p) { return Fs(function (e, t) { var i = -1, a = t.length, s = a > 1 ? t[a - 1] : void 0, r = a > 2 ? t[2] : void 0; for (s = p.length > 3 && typeof s == "function" ? (a--, s) : void 0, r && js(t[0], t[1], r) && (s = a < 3 ? void 0 : s, a = 1), e = Object(e); ++i < a;) { var n = t[i]; n && p(e, n, i, s) } return e }) } function Gs(p) { return function (e, t, i) { for (var a = -1, s = Object(e), r = i(e), n = r.length; n--;) { var o = r[p ? n : ++a]; if (t(s[o], o, s) === !1) break } return e } } function Ze(p, e) { var t = p.__data__; return Us(e) ? t[typeof e == "string" ? "string" : "hash"] : t.map } function xt(p, e) { var t = Ja(p, e); return zs(t) ? t : void 0 } function Vs(p) { var e = ce.call(p, fe), t = p[fe]; try { p[fe] = void 0; var i = !0 } catch { } var a = ci.call(p); return i && (e ? p[fe] = t : delete p[fe]), a } function _s(p) { return typeof p.constructor == "function" && !pi(p) ? os(di(p)) : {} } function fi(p, e) { var t = typeof p; return e = e ?? ai, !!e && (t == "number" || t != "symbol" && ja.test(p)) && p > -1 && p % 1 == 0 && p < e } function js(p, e, t) { if (!xe(t)) return !1; var i = typeof e; return (i == "number" ? bt(t) && fi(e, t.length) : i == "string" && e in t) ? $e(t[e], p) : !1 } function Us(p) { var e = typeof p; return e == "string" || e == "number" || e == "symbol" || e == "boolean" ? p !== "__proto__" : p === null } function qs(p) { return !!Zt && Zt in p } function pi(p) { var e = p && p.constructor, t = typeof e == "function" && e.prototype || _e; return p === t } function Zs(p) { var e = []; if (p != null) for (var t in Object(p)) e.push(t); return e } function $s(p) { return ci.call(p) } function Js(p, e, t) { return e = ei(e === void 0 ? p.length - 1 : e, 0), function () { for (var i = arguments, a = -1, s = ei(i.length - e, 0), r = Array(s); ++a < s;)r[a] = i[e + a]; a = -1; for (var n = Array(e + 1); ++a < e;)n[a] = i[a]; return n[e] = t(r), qa(p, this, n) } } function gt(p, e) { if (!(e === "constructor" && typeof p[e] == "function") && e != "__proto__") return p[e] } var Ks = Qs(Rs); function Qs(p) { var e = 0, t = 0; return function () { var i = ns(), a = ba - (i - t); if (t = i, a > 0) { if (++e >= xa) return arguments[0] } else e = 0; return p.apply(void 0, arguments) } } function er(p) { if (p != null) { try { return je.call(p) } catch { } try { return p + "" } catch { } } return "" } function $e(p, e) { return p === e || p !== p && e !== e } var ut = ti(function () { return arguments }()) ? ti : function (p) { return Re(p) && ce.call(p, "callee") && !as.call(p, "callee") }, ft = Array.isArray; function bt(p) { return p != null && bi(p.length) && !mt(p) } function tr(p) { return Re(p) && bt(p) } var xi = rs || nr; function mt(p) { if (!xe(p)) return !1; var e = qe(p); return e == ri || e == Aa || e == va || e == Pa } function bi(p) { return typeof p == "number" && p > -1 && p % 1 == 0 && p <= ai } function xe(p) { var e = typeof p; return p != null && (e == "object" || e == "function") } function Re(p) { return p != null && typeof p == "object" } function ir(p) { if (!Re(p) || qe(p) != ni) return !1; var e = di(p); if (e === null) return !0; var t = ce.call(e, "constructor") && e.constructor; return typeof t == "function" && t instanceof t && je.call(t) == ts } var mi = qt ? $a(qt) : Xs; function ar(p) { return Ws(p, vi(p)) } function vi(p) { return bt(p) ? Ms(p, !0) : Es(p) } var sr = Bs(function (p, e, t) { ui(p, e, t) }); function rr(p) { return function () { return p } } function yi(p) { return p } function nr() { return !1 } we.exports = sr }); var Ai = zi(jt(), 1), ki = wi(); function or({ options: p, chartId: e, theme: t, extraJsOptions: i }) { return { chart: null, options: p, chartId: e, theme: t, extraJsOptions: i, init: function () { this.$wire.$on("updateOptions", ({ options: a }) => { a = ki(a, this.extraJsOptions), this.updateChart(a) }), Alpine.effect(() => { let a = Alpine.store("theme"); this.$nextTick(() => { this.chart === null ? this.initChart() : this.updateChart({ theme: { mode: a }, chart: { background: "inherit" } }) }) }) }, initChart: function () { this.options.theme = { mode: this.theme }, this.options.chart.background = "inherit", this.options = ki(this.options, this.extraJsOptions), this.chart = new Ai.default(document.querySelector(this.chartId), this.options), this.chart.render() }, updateChart: function (a) { this.chart.updateOptions(a, !1, !0, !0) } } } export { or as default }; /*! Bundled license information: apexcharts/dist/apexcharts.common.js: diff --git a/public/js/filament/support/async-alpine.js b/public/js/filament/support/async-alpine.js index 048f75c..6830d97 100644 --- a/public/js/filament/support/async-alpine.js +++ b/public/js/filament/support/async-alpine.js @@ -1 +1 @@ -(()=>{(()=>{var d=Object.defineProperty,m=t=>d(t,"__esModule",{value:!0}),f=(t,e)=>{m(t);for(var i in e)d(t,i,{get:e[i],enumerable:!0})},o={};f(o,{eager:()=>g,event:()=>w,idle:()=>y,media:()=>b,visible:()=>E});var c=()=>!0,g=c,v=({component:t,argument:e})=>new Promise(i=>{if(e)window.addEventListener(e,()=>i(),{once:!0});else{let n=a=>{a.detail.id===t.id&&(window.removeEventListener("async-alpine:load",n),i())};window.addEventListener("async-alpine:load",n)}}),w=v,x=()=>new Promise(t=>{"requestIdleCallback"in window?window.requestIdleCallback(t):setTimeout(t,200)}),y=x,A=({argument:t})=>new Promise(e=>{if(!t)return console.log("Async Alpine: media strategy requires a media query. Treating as 'eager'"),e();let i=window.matchMedia(`(${t})`);i.matches?e():i.addEventListener("change",e,{once:!0})}),b=A,$=({component:t,argument:e})=>new Promise(i=>{let n=e||"0px 0px 0px 0px",a=new IntersectionObserver(r=>{r[0].isIntersecting&&(a.disconnect(),i())},{rootMargin:n});a.observe(t.el)}),E=$;function P(t){let e=q(t),i=u(e);return i.type==="method"?{type:"expression",operator:"&&",parameters:[i]}:i}function q(t){let e=/\s*([()])\s*|\s*(\|\||&&|\|)\s*|\s*((?:[^()&|]+\([^()]+\))|[^()&|]+)\s*/g,i=[],n;for(;(n=e.exec(t))!==null;){let[,a,r,s]=n;if(a!==void 0)i.push({type:"parenthesis",value:a});else if(r!==void 0)i.push({type:"operator",value:r==="|"?"&&":r});else{let p={type:"method",method:s.trim()};s.includes("(")&&(p.method=s.substring(0,s.indexOf("(")).trim(),p.argument=s.substring(s.indexOf("(")+1,s.indexOf(")"))),s.method==="immediate"&&(s.method="eager"),i.push(p)}}return i}function u(t){let e=h(t);for(;t.length>0&&(t[0].value==="&&"||t[0].value==="|"||t[0].value==="||");){let i=t.shift().value,n=h(t);e.type==="expression"&&e.operator===i?e.parameters.push(n):e={type:"expression",operator:i,parameters:[e,n]}}return e}function h(t){if(t[0].value==="("){t.shift();let e=u(t);return t[0].value===")"&&t.shift(),e}else return t.shift()}var _="__internal_",l={Alpine:null,_options:{prefix:"ax-",alpinePrefix:"x-",root:"load",inline:"load-src",defaultStrategy:"eager"},_alias:!1,_data:{},_realIndex:0,get _index(){return this._realIndex++},init(t,e={}){return this.Alpine=t,this._options={...this._options,...e},this},start(){return this._processInline(),this._setupComponents(),this._mutations(),this},data(t,e=!1){return this._data[t]={loaded:!1,download:e},this},url(t,e){!t||!e||(this._data[t]||this.data(t),this._data[t].download=()=>import(this._parseUrl(e)))},alias(t){this._alias=t},_processInline(){let t=document.querySelectorAll(`[${this._options.prefix}${this._options.inline}]`);for(let e of t)this._inlineElement(e)},_inlineElement(t){let e=t.getAttribute(`${this._options.alpinePrefix}data`),i=t.getAttribute(`${this._options.prefix}${this._options.inline}`);if(!e||!i)return;let n=this._parseName(e);this.url(n,i)},_setupComponents(){let t=document.querySelectorAll(`[${this._options.prefix}${this._options.root}]`);for(let e of t)this._setupComponent(e)},_setupComponent(t){let e=t.getAttribute(`${this._options.alpinePrefix}data`);t.setAttribute(`${this._options.alpinePrefix}ignore`,"");let i=this._parseName(e),n=t.getAttribute(`${this._options.prefix}${this._options.root}`)||this._options.defaultStrategy;this._componentStrategy({name:i,strategy:n,el:t,id:t.id||this._index})},async _componentStrategy(t){let e=P(t.strategy);await this._generateRequirements(t,e),await this._download(t.name),this._activate(t)},_generateRequirements(t,e){if(e.type==="expression"){if(e.operator==="&&")return Promise.all(e.parameters.map(i=>this._generateRequirements(t,i)));if(e.operator==="||")return Promise.any(e.parameters.map(i=>this._generateRequirements(t,i)))}return o[e.method]?o[e.method]({component:t,argument:e.argument}):!1},async _download(t){if(t.startsWith(_)||(this._handleAlias(t),!this._data[t]||this._data[t].loaded))return;let e=await this._getModule(t);this.Alpine.data(t,e),this._data[t].loaded=!0},async _getModule(t){if(!this._data[t])return;let e=await this._data[t].download(t);return typeof e=="function"?e:e[t]||e.default||Object.values(e)[0]||!1},_activate(t){this.Alpine.destroyTree(t.el),t.el.removeAttribute(`${this._options.alpinePrefix}ignore`),t.el._x_ignore=!1,this.Alpine.initTree(t.el)},_mutations(){new MutationObserver(t=>{for(let e of t)if(e.addedNodes)for(let i of e.addedNodes)i.nodeType===1&&(i.hasAttribute(`${this._options.prefix}${this._options.root}`)&&this._mutationEl(i),i.querySelectorAll(`[${this._options.prefix}${this._options.root}]`).forEach(n=>this._mutationEl(n)))}).observe(document,{attributes:!0,childList:!0,subtree:!0})},_mutationEl(t){t.hasAttribute(`${this._options.prefix}${this._options.inline}`)&&this._inlineElement(t),this._setupComponent(t)},_handleAlias(t){if(!(!this._alias||this._data[t])){if(typeof this._alias=="function"){this.data(t,this._alias);return}this.url(t,this._alias.replaceAll("[name]",t))}},_parseName(t){return(t||"").split(/[({]/g)[0]||`${_}${this._index}`},_parseUrl(t){return new RegExp("^(?:[a-z+]+:)?//","i").test(t)?t:new URL(t,document.baseURI).href}};document.addEventListener("alpine:init",()=>{window.AsyncAlpine=l,l.init(Alpine,window.AsyncAlpineOptions||{}),document.dispatchEvent(new CustomEvent("async-alpine:init")),l.start()})})();})(); +(() => { (() => { var d = Object.defineProperty, m = t => d(t, "__esModule", { value: !0 }), f = (t, e) => { m(t); for (var i in e) d(t, i, { get: e[i], enumerable: !0 }) }, o = {}; f(o, { eager: () => g, event: () => w, idle: () => y, media: () => b, visible: () => E }); var c = () => !0, g = c, v = ({ component: t, argument: e }) => new Promise(i => { if (e) window.addEventListener(e, () => i(), { once: !0 }); else { let n = a => { a.detail.id === t.id && (window.removeEventListener("async-alpine:load", n), i()) }; window.addEventListener("async-alpine:load", n) } }), w = v, x = () => new Promise(t => { "requestIdleCallback" in window ? window.requestIdleCallback(t) : setTimeout(t, 200) }), y = x, A = ({ argument: t }) => new Promise(e => { if (!t) return console.log("Async Alpine: media strategy requires a media query. Treating as 'eager'"), e(); let i = window.matchMedia(`(${t})`); i.matches ? e() : i.addEventListener("change", e, { once: !0 }) }), b = A, $ = ({ component: t, argument: e }) => new Promise(i => { let n = e || "0px 0px 0px 0px", a = new IntersectionObserver(r => { r[0].isIntersecting && (a.disconnect(), i()) }, { rootMargin: n }); a.observe(t.el) }), E = $; function P(t) { let e = q(t), i = u(e); return i.type === "method" ? { type: "expression", operator: "&&", parameters: [i] } : i } function q(t) { let e = /\s*([()])\s*|\s*(\|\||&&|\|)\s*|\s*((?:[^()&|]+\([^()]+\))|[^()&|]+)\s*/g, i = [], n; for (; (n = e.exec(t)) !== null;) { let [, a, r, s] = n; if (a !== void 0) i.push({ type: "parenthesis", value: a }); else if (r !== void 0) i.push({ type: "operator", value: r === "|" ? "&&" : r }); else { let p = { type: "method", method: s.trim() }; s.includes("(") && (p.method = s.substring(0, s.indexOf("(")).trim(), p.argument = s.substring(s.indexOf("(") + 1, s.indexOf(")"))), s.method === "immediate" && (s.method = "eager"), i.push(p) } } return i } function u(t) { let e = h(t); for (; t.length > 0 && (t[0].value === "&&" || t[0].value === "|" || t[0].value === "||");) { let i = t.shift().value, n = h(t); e.type === "expression" && e.operator === i ? e.parameters.push(n) : e = { type: "expression", operator: i, parameters: [e, n] } } return e } function h(t) { if (t[0].value === "(") { t.shift(); let e = u(t); return t[0].value === ")" && t.shift(), e } else return t.shift() } var _ = "__internal_", l = { Alpine: null, _options: { prefix: "ax-", alpinePrefix: "x-", root: "load", inline: "load-src", defaultStrategy: "eager" }, _alias: !1, _data: {}, _realIndex: 0, get _index() { return this._realIndex++ }, init(t, e = {}) { return this.Alpine = t, this._options = { ...this._options, ...e }, this }, start() { return this._processInline(), this._setupComponents(), this._mutations(), this }, data(t, e = !1) { return this._data[t] = { loaded: !1, download: e }, this }, url(t, e) { !t || !e || (this._data[t] || this.data(t), this._data[t].download = () => import(this._parseUrl(e))) }, alias(t) { this._alias = t }, _processInline() { let t = document.querySelectorAll(`[${this._options.prefix}${this._options.inline}]`); for (let e of t) this._inlineElement(e) }, _inlineElement(t) { let e = t.getAttribute(`${this._options.alpinePrefix}data`), i = t.getAttribute(`${this._options.prefix}${this._options.inline}`); if (!e || !i) return; let n = this._parseName(e); this.url(n, i) }, _setupComponents() { let t = document.querySelectorAll(`[${this._options.prefix}${this._options.root}]`); for (let e of t) this._setupComponent(e) }, _setupComponent(t) { let e = t.getAttribute(`${this._options.alpinePrefix}data`); t.setAttribute(`${this._options.alpinePrefix}ignore`, ""); let i = this._parseName(e), n = t.getAttribute(`${this._options.prefix}${this._options.root}`) || this._options.defaultStrategy; this._componentStrategy({ name: i, strategy: n, el: t, id: t.id || this._index }) }, async _componentStrategy(t) { let e = P(t.strategy); await this._generateRequirements(t, e), await this._download(t.name), this._activate(t) }, _generateRequirements(t, e) { if (e.type === "expression") { if (e.operator === "&&") return Promise.all(e.parameters.map(i => this._generateRequirements(t, i))); if (e.operator === "||") return Promise.any(e.parameters.map(i => this._generateRequirements(t, i))) } return o[e.method] ? o[e.method]({ component: t, argument: e.argument }) : !1 }, async _download(t) { if (t.startsWith(_) || (this._handleAlias(t), !this._data[t] || this._data[t].loaded)) return; let e = await this._getModule(t); this.Alpine.data(t, e), this._data[t].loaded = !0 }, async _getModule(t) { if (!this._data[t]) return; let e = await this._data[t].download(t); return typeof e == "function" ? e : e[t] || e.default || Object.values(e)[0] || !1 }, _activate(t) { this.Alpine.destroyTree(t.el), t.el.removeAttribute(`${this._options.alpinePrefix}ignore`), t.el._x_ignore = !1, this.Alpine.initTree(t.el) }, _mutations() { new MutationObserver(t => { for (let e of t) if (e.addedNodes) for (let i of e.addedNodes) i.nodeType === 1 && (i.hasAttribute(`${this._options.prefix}${this._options.root}`) && this._mutationEl(i), i.querySelectorAll(`[${this._options.prefix}${this._options.root}]`).forEach(n => this._mutationEl(n))) }).observe(document, { attributes: !0, childList: !0, subtree: !0 }) }, _mutationEl(t) { t.hasAttribute(`${this._options.prefix}${this._options.inline}`) && this._inlineElement(t), this._setupComponent(t) }, _handleAlias(t) { if (!(!this._alias || this._data[t])) { if (typeof this._alias == "function") { this.data(t, this._alias); return } this.url(t, this._alias.replaceAll("[name]", t)) } }, _parseName(t) { return (t || "").split(/[({]/g)[0] || `${_}${this._index}` }, _parseUrl(t) { return new RegExp("^(?:[a-z+]+:)?//", "i").test(t) ? t : new URL(t, document.baseURI).href } }; document.addEventListener("alpine:init", () => { window.AsyncAlpine = l, l.init(Alpine, window.AsyncAlpineOptions || {}), document.dispatchEvent(new CustomEvent("async-alpine:init")), l.start() }) })(); })(); diff --git a/tests/Feature/DeleteDepartmentTest.php b/tests/Feature/DeleteDepartmentTest.php new file mode 100644 index 0000000..2830ec0 --- /dev/null +++ b/tests/Feature/DeleteDepartmentTest.php @@ -0,0 +1,39 @@ +seed(PermissionSeeder::class) + ->asUser('manager'); +}); + +it('should unassign department-commander role from the commander', function () { + $soldier = Soldier::factory()->create(); + $commander = User::factory()->create([ + 'userable_id' => $soldier->id, + ]); + $department = Department::factory()->create(['commander_id' => $soldier->id]); + $commander->assignRole('department-commander'); + livewire(ListDepartments::class) + ->callTableAction(Filament\Tables\Actions\DeleteAction::class, $department); + + expect($commander->getRoleNames()->contains('department-commander'))->toBe(false); +}); + +it('should unassign teams', function () { + $department = Department::factory()->create(); + $team = Team::factory()->create(['department_id' => $department->id]); + + livewire(ListDepartments::class) + ->callTableAction(Filament\Tables\Actions\DeleteAction::class, $department); + + expect($team->refresh()->department_id)->toBeNull(); +}); diff --git a/tests/Feature/DeleteSoldierTest.php b/tests/Feature/DeleteSoldierTest.php new file mode 100644 index 0000000..58d736d --- /dev/null +++ b/tests/Feature/DeleteSoldierTest.php @@ -0,0 +1,44 @@ +seed(PermissionSeeder::class) + ->asUser('manager'); +}); + +it('should delete the user', function () { + $soldier = Soldier::factory()->create(); + $user = User::factory()->create([ + 'userable_id' => $soldier->id, + ]); + livewire(ListSoldiers::class) + ->callTableAction(DeleteAction::class, $soldier); + + $this->assertDatabaseMissing('users', [ + 'id' => $user->id, + ]); +}); + +it('should unassign the soldiers shift', function () { + $soldier = Soldier::factory()->create(); + User::factory()->create([ + 'userable_id' => $soldier->id, + ]); + $shift = Shift::factory()->create(['soldier_id' => $soldier->id]); + livewire(ListSoldiers::class) + ->callTableAction(DeleteAction::class, $soldier); + + $this->assertDatabaseHas('shifts', [ + 'id' => $shift->id, + 'soldier_id' => null, + ]); +}); diff --git a/tests/Feature/DeleteTeamTest.php b/tests/Feature/DeleteTeamTest.php new file mode 100644 index 0000000..1f44af2 --- /dev/null +++ b/tests/Feature/DeleteTeamTest.php @@ -0,0 +1,38 @@ +seed(PermissionSeeder::class) + ->asUser('manager'); +}); + +it('should unassign team-commander role from the commander', function () { + $soldier = Soldier::factory()->create(); + $commander = User::factory()->create([ + 'userable_id' => $soldier->id, + ]); + $team = Team::factory()->create(['commander_id' => $soldier->id]); + $commander->assignRole('team-commander'); + livewire(ListTeams::class) + ->callTableAction(Filament\Tables\Actions\DeleteAction::class, $team); + + expect($commander->getRoleNames()->contains('team-commander'))->toBe(false); +}); + +it('should unassign members', function () { + $team = Team::factory()->create(); + $soldier = User::factory()->create([ + 'userable_id' => Soldier::factory()->create(['team_id' => $team->id])->id, + ]); + livewire(ListTeams::class) + ->callTableAction(Filament\Tables\Actions\DeleteAction::class, $team); + expect($soldier->refresh()->team_id)->toBeNull(); +}); diff --git a/tests/Unit/HelpersServiceTest.php b/tests/Unit/HelpersServiceTest.php index 80aa2a4..1b0a1a3 100644 --- a/tests/Unit/HelpersServiceTest.php +++ b/tests/Unit/HelpersServiceTest.php @@ -22,6 +22,7 @@ $shift->parallel_weight, $shift->task->is_night, $shift->is_weekend, + $shift->task->is_alert, $shift->task->in_parallel, $shift->task->concurrent_tasks ); @@ -37,6 +38,8 @@ new MaxData($soldier->max_shifts, 0), new MaxData($soldier->max_nights, 0), new MaxData($soldier->max_weekends, 0), + new MaxData($soldier->max_alerts, 0), + new MaxData($soldier->max_in_parallel, 0), $soldier->qualifications, [], [] @@ -64,13 +67,15 @@ }); it('should return the capacity hold of soldiers paramaters', function () { - $shifts = Shift::factory()->count(random_int(0, 10))->create(); + $shifts = Shift::factory()->count(random_int(0, 10))->create(['task_id' => Task::factory()->create()->id]); $shifts = $shifts->map(fn ($shift) => Helpers::buildShift($shift)); $result = [ 'count' => $shifts->count(), 'points' => $shifts->sum('points'), 'sumWeekends' => $shifts->filter(fn ($shift) => $shift->isWeekend)->sum('points'), - 'sumNights' => $shifts->filter(fn ($shift) => $shift->isNight)->sum('points'), + 'sumNights' => $shifts->filter(fn ($shift) => $shift->isNight)->count(), + 'sumAlerts' => $shifts->filter(fn ($shift) => $shift->isAlert)->count(), + 'sumInParallel' => $shifts->filter(fn ($shift) => $shift->inParallel)->count(), ]; expect(Helpers::capacityHold($shifts))->toEqual($result); }); diff --git a/tests/Unit/RangeServiceTest.php b/tests/Unit/RangeServiceTest.php index 10da05d..96df475 100644 --- a/tests/Unit/RangeServiceTest.php +++ b/tests/Unit/RangeServiceTest.php @@ -57,8 +57,8 @@ $range = new Range('2024-11-07 22:00:00', '2024-11-08 05:00:00'); $result = $range->getNightSpaces(); $expect = [ - new Range('2024-11-06 00:00:00', '2024-11-07 22:00:00'), - new Range('2024-11-08 05:00:00', '2024-11-09 08:00:00'), + new Range('2024-11-07 10:00:00', '2024-11-07 22:00:00'), + new Range('2024-11-08 05:00:00', '2024-11-08 17:00:00'), ]; expect(count($result))->toBe(count($expect)); foreach ($result as $index => $range) { @@ -70,7 +70,7 @@ it('should return the day before night', function () { $range = new Range('2024-11-07 22:00:00', '2024-11-08 05:00:00'); $result = $range->getDayBeforeNight(); - $expect = new Range('2024-11-06 00:00:00', '2024-11-07 22:00:00'); + $expect = new Range('2024-11-07 10:00:00', '2024-11-07 22:00:00'); expect($result->start)->toEqual($expect->start); expect($result->end)->toEqual($expect->end); }); @@ -78,7 +78,7 @@ it('should return the day after night', function () { $range = new Range(Carbon::create(2024, 11, 7, 22), Carbon::create(2024, 11, 8, 5)); $result = $range->getDayAfterNight(); - $expect = new Range(Carbon::parse('2024-11-08 05:00:00'), Carbon::parse('2024-11-09 08:00:00')); + $expect = new Range(Carbon::parse('2024-11-08 05:00:00'), Carbon::parse('2024-11-08 17:00:00')); expect($result->start->toString())->toBe($expect->start->toString()); expect($result->end->toString())->toBe($expect->end->toString()); }); diff --git a/tests/Unit/ShiftServiceTest.php b/tests/Unit/ShiftServiceTest.php index 0aecdd1..084b11d 100644 --- a/tests/Unit/ShiftServiceTest.php +++ b/tests/Unit/ShiftServiceTest.php @@ -15,14 +15,15 @@ true, false, false, + false, [] ); $result = $shift->getShiftSpaces([]); $expected = [ - new Range(Carbon::parse('2024-12-16 00:00:00'), Carbon::parse('2024-12-17 22:30:00')), - new Range(Carbon::parse('2024-12-18 06:00:00'), Carbon::parse('2024-12-19 08:00:00')), + new Range(Carbon::parse('2024-12-17 10:30:00'), Carbon::parse('2024-12-17 22:30:00')), + new Range(Carbon::parse('2024-12-18 06:00:00'), Carbon::parse('2024-12-18 18:00:00')), ]; expect(count($result))->toBe(count($expected)); @@ -43,6 +44,7 @@ false, true, false, + false, [] ); @@ -64,7 +66,7 @@ $range = new Range('2024-11-08 16:30:00', '2024-11-09 22:00:00'); - $shift = new Shift(1, 'test', '2024-11-08 16:30:00', '2024-11-09 22:00:00', 0.25, false, true, false, []); + $shift = new Shift(1, 'test', '2024-11-08 16:30:00', '2024-11-09 22:00:00', 0.25, false, true, false, false, []); $reflection = new ReflectionClass(Shift::class); $method = $reflection->getMethod('getWeekendSpaces'); @@ -93,6 +95,7 @@ false, true, false, + false, [] ); $reflection = new ReflectionClass(Shift::class); @@ -105,7 +108,7 @@ }); it('should return true if the weekend is full', function () { - $shift = new App\Services\Shift( + $shift = new Shift( 1, 'test', '2024-11-08 16:30:00', @@ -114,6 +117,7 @@ false, true, false, + false, [] ); @@ -127,7 +131,7 @@ }); it('should return false if the weekend is not full', function () { - $shift = new App\Services\Shift( + $shift = new Shift( 1, 'test', '2024-11-16 16:30:00', @@ -136,6 +140,7 @@ false, true, false, + false, [] ); $reflection = new ReflectionClass(Shift::class); @@ -149,7 +154,7 @@ it('should return true if the range includes the supplied day', function () { $range = new Range('2024-11-08 16:30:00', '2024-11-11 18:00:00'); - $shift = new App\Services\Shift( + $shift = new Shift( 1, 'test', '2024-11-08 16:30:00', @@ -158,6 +163,7 @@ false, true, false, + false, [] ); $reflection = new ReflectionClass(Shift::class); @@ -171,7 +177,7 @@ it('should return false if the range does not include the supplied day', function () { $range = new Range('2024-11-08 16:30:00', '2024-11-11 18:00:00'); - $shift = new App\Services\Shift( + $shift = new Shift( 1, 'test', '2024-11-08 16:30:00', @@ -180,6 +186,7 @@ false, true, false, + false, [] ); $reflection = new ReflectionClass(Shift::class); @@ -192,7 +199,7 @@ }); it('should return true if the shift date is adjacent to the selected date', function () { - $shifts = [new App\Services\Shift( + $shifts = [new Shift( 1, 'test', '2024-11-09 16:30:00', @@ -201,9 +208,10 @@ false, true, false, + false, [] )]; - $shift = new App\Services\Shift( + $shift = new Shift( 1, 'test', '2024-11-08 16:30:00', @@ -212,6 +220,7 @@ false, true, false, + false, [] ); $range = new Range('2024-11-08 16:30:00', '2024-11-08 18:00:00'); @@ -225,7 +234,7 @@ }); it('should return false if the shift date is not adjacent to the selected date', function () { - $shifts = [new App\Services\Shift( + $shifts = [new Shift( 1, 'test', '2024-11-16 16:30:00', @@ -234,10 +243,11 @@ false, true, false, + false, [] )]; $range = new Range('2024-11-08 16:30:00', '2024-11-08 18:00:00'); - $shift = new App\Services\Shift( + $shift = new Shift( 1, 'test', '2024-11-08 16:30:00', @@ -246,6 +256,7 @@ false, true, false, + false, [] ); $reflection = new ReflectionClass(Shift::class); diff --git a/tests/Unit/SoldierServiceTest.php b/tests/Unit/SoldierServiceTest.php index de7bec5..17630a4 100644 --- a/tests/Unit/SoldierServiceTest.php +++ b/tests/Unit/SoldierServiceTest.php @@ -13,108 +13,108 @@ use Carbon\Carbon; it('should return true if the soldier able to take the shift', function () { - $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(5), new MaxData(3), ['Run'], []); - $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 18), 2, false, false, false, []); + $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(5), new MaxData(3), new MaxData(3), new MaxData(3), ['Run'], []); + $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 18), 2, false, false, false, false, []); expect($soldier->isAbleTake($shift, []))->toBeTrue(); }); it('should return false if the soldier cant take the shift', function () { - $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(5), new MaxData(3), ['Run'], []); - $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 18), 4, false, false, false, []); + $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(5), new MaxData(3), new MaxData(3), new MaxData(3), ['Run'], []); + $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 18), 4, false, false, false, false, []); expect($soldier->isAbleTake($shift, []))->toBeFalse(); }); it('should return true if the soldier available by maxes', function () { - $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(5), new MaxData(3), ['Run'], []); - $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 18), 1, false, false, false, []); + $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(5), new MaxData(3), new MaxData(3), new MaxData(3), ['Run'], []); + $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 18), 1, false, false, false, false, []); $soldier->isAvailableByMaxes($shift); expect($soldier->isAvailableByMaxes($shift))->toBeTrue(); }); it('should return false if the soldier is not available by maxes', function () { - $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(0), new MaxData(3), ['Run'], []); - $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 21), 1, true, false, false, []); + $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(0), new MaxData(3), new MaxData(3), new MaxData(3), ['Run'], []); + $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 21), 1, true, false, false, false, []); expect($soldier->isAvailableByMaxes($shift))->toBeFalse(); }); it('should return true if the soldier is available by shifts', function () { - $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 19), Carbon::create(2024, 5, 14, 21), 1, true, false, false, []); - $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(0), new MaxData(3), ['Run'], []); + $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 19), Carbon::create(2024, 5, 14, 21), 1, true, false, false, false, []); + $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(0), new MaxData(3), new MaxData(3), new MaxData(3), ['Run'], []); $soldier->assign($shift, []); - $shift = new Shift(1, 'go', Carbon::create(2024, 5, 14, 16), Carbon::create(2024, 5, 14, 18), 0, false, false, false, []); - expect($soldier->isAvailableByShifts($shift, false))->toBeTrue(); + $shift = new Shift(1, 'go', Carbon::create(2024, 5, 14, 16), Carbon::create(2024, 5, 14, 18), 0, false, false, false, false, []); + expect($soldier->isAvailableByShifts($shift))->toBeTrue(); }); it('should return false if the soldier is not available by shifts', function () { - $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 21), 1, true, false, false, []); - $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(0), new MaxData(3), ['Run'], []); + $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 21), 1, true, false, false, false, []); + $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(0), new MaxData(3), new MaxData(3), new MaxData(3), ['Run'], []); $soldier->assign($shift, []); - $shift = new Shift(1, 'go', Carbon::create(2024, 5, 14, 16), Carbon::create(2024, 5, 14, 18), 0, false, false, false, []); - expect($soldier->isAvailableByShifts($shift, false))->toBeFalse(); + $shift = new Shift(1, 'go', Carbon::create(2024, 5, 14, 16), Carbon::create(2024, 5, 14, 18), 0, false, false, false, false, []); + expect($soldier->isAvailableByShifts($shift))->toBeFalse(); }); it('should return true if the soldier is available by spaces', function () { - $shifts = [new Shift(2, '', '2025-01-05', '2025-01-06', 0, false, false, false, [])]; + $shifts = [new Shift(2, '', '2025-01-05', '2025-01-06', 0, false, false, false, false, [])]; $spaces = [new Range('2025-01-02', '2025-01-03')]; - $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(5), new MaxData(3), [], [], $shifts, []); + $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(5), new MaxData(3), new MaxData(3), new MaxData(3), [], [], $shifts, []); expect($soldier->isAvailableBySpaces($spaces))->toBeTrue(); }); it('should return false if the soldier is not available by spaces', function () { $spaces = [new Range('2025-01-04', '2025-01-07')]; - $shifts = [new Shift(2, 'run', '2025-01-05', '2025-01-06', 0, false, false, false, [])]; - $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(5), new MaxData(3), [], [], $shifts, []); + $shifts = [new Shift(2, 'run', '2025-01-05', '2025-01-06', 0, false, false, false, false, [])]; + $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(5), new MaxData(3), new MaxData(3), new MaxData(3), [], [], $shifts, []); expect($soldier->isAvailableBySpaces($spaces))->toBeFalse(); }); it('should return true if the soldier is available by concurrents shifts', function () { $shift = ShiftModel::factory()->create(['start_date' => '2025-01-08', 'end_date' => '2025-01-09', 'task_id' => Task::factory()->create(['type' => 'sing', 'in_parallel' => true, 'concurrent_tasks' => ['run']])->id]); $concurrentsShifts = [Helpers::buildShift($shift)]; - $shift = new Shift(2, 'run', '2025-01-08', '2025-01-09', 0, false, false, false, []); - $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(5), new MaxData(3), [], [], [], $concurrentsShifts); + $shift = new Shift(2, 'run', '2025-01-08', '2025-01-09', 0, false, false, false, false, []); + $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(5), new MaxData(3), new MaxData(3), new MaxData(3), [], [], [], $concurrentsShifts); expect($soldier->isAvailableByConcurrentsShifts($shift))->toBeTrue(); }); it('should return false if the soldier is not available by concurrents shifts', function () { $shift = ShiftModel::factory()->create(['start_date' => '2025-01-08', 'end_date' => '2025-01-09', 'task_id' => Task::factory()->create(['type' => 'sing', 'in_parallel' => true, 'concurrent_tasks' => ['run']])->id]); $concurrentsShifts = [Helpers::buildShift($shift)]; - $shift = new Shift(2, 'go', '2025-01-08', '2025-01-09', 0, false, false, false, []); - $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(5), new MaxData(3), [], [], [], $concurrentsShifts); + $shift = new Shift(2, 'go', '2025-01-08', '2025-01-09', 0, false, false, false, false, []); + $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(5), new MaxData(3), new MaxData(3), new MaxData(3), [], [], [], $concurrentsShifts); expect($soldier->isAvailableByConcurrentsShifts($shift))->toBeFalse(); }); it('should return better not availability if the soldier is not available by constraint in low priority', function () { - $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(0), new MaxData(3), ['Run'], [new Constraint(Carbon::create(2024, 5, 14, 20), Carbon::create(2024, 5, 15, 15), Priority::LOW)]); + $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(0), new MaxData(3), new MaxData(3), new MaxData(3), ['Run'], [new Constraint(Carbon::create(2024, 5, 14, 20), Carbon::create(2024, 5, 15, 15), Priority::LOW)]); expect($soldier->isAvailableByConstraints(new Range(Carbon::create(2024, 5, 14, 22), Carbon::create(2024, 5, 15, 8))))->toBe(Availability::BETTER_NOT); }); it('should return no availability if the soldier is not available by constraint in high priority', function () { - $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(0), new MaxData(3), ['Run'], [new Constraint(Carbon::create(2024, 5, 14, 20), Carbon::create(2024, 5, 15, 15), Priority::HIGH)]); + $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(0), new MaxData(3), new MaxData(3), new MaxData(3), ['Run'], [new Constraint(Carbon::create(2024, 5, 14, 20), Carbon::create(2024, 5, 15, 15), Priority::HIGH)]); expect($soldier->isAvailableByConstraints(new Range(Carbon::create(2024, 5, 14, 22), Carbon::create(2024, 5, 15, 8))))->toBe(Availability::NO); }); it('should return yes availability if the soldier has no constraints', function () { - $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(0), new MaxData(3), ['Run'], []); + $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(0), new MaxData(3), new MaxData(3), new MaxData(3), ['Run'], []); expect($soldier->isAvailableByConstraints(new Range(Carbon::create(2024, 5, 14, 22), Carbon::create(2024, 5, 15, 8))))->toBe(Availability::YES); }); it('should assign shift to soldier and update all details', function () { - $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(0), new MaxData(3), ['Run'], []); - $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 21), 2.75, true, false, false, []); + $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(0), new MaxData(3), new MaxData(3), new MaxData(3), ['Run'], []); + $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 21), 2.75, true, false, false, false, []); $soldier->assign($shift, []); expect($soldier->shifts->count())->toBe(1); expect($soldier->pointsMaxData->used)->toBe(2.75); expect($soldier->shiftsMaxData->used)->toBe(1.0); expect($soldier->weekendsMaxData->used)->toBe(0.0); - expect($soldier->nightsMaxData->used)->toBe(2.75); + expect($soldier->nightsMaxData->used)->toBe(1.0); }); it('should return true if the soldier qualified to the task', function () { - $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(0), new MaxData(3), ['Run'], []); + $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(0), new MaxData(3), new MaxData(3), new MaxData(3), ['Run'], []); expect($soldier->isQualified('Run'))->toBeTrue(); }); it('should return false if the soldier is not qualified to the task', function () { - $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(0), new MaxData(3), ['Run'], []); + $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(0), new MaxData(3), new MaxData(3), new MaxData(3), ['Run'], []); expect($soldier->isQualified('Clean'))->toBeFalse(); }); From f456f9826e587dea9f5289c15dd7919129b07246 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Mon, 17 Mar 2025 09:23:43 +0200 Subject: [PATCH 101/259] deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- entrypoint.sh | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 08a7861..62e9f44 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holShifts_1 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holShifts_2 flavor: | latest=false tags: | diff --git a/entrypoint.sh b/entrypoint.sh index f164ea8..9644dab 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -37,8 +37,8 @@ _migrate() { exit 1 fi - # echo "🚀 Running migrations..." - # ${ARTISAN} migrate --force --seed + echo "🚀 Running migrations..." + ${ARTISAN} migrate } From 0b08041fcbb70348791c3a402c1579f49c8b6ff8 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Mon, 17 Mar 2025 09:30:55 +0200 Subject: [PATCH 102/259] deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 62e9f44..1bc98e0 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holShifts_2 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshifts_2 flavor: | latest=false tags: | From cc1b61a773f3c1812ae040a25d44f8d0a89dfb32 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Mon, 17 Mar 2025 09:41:05 +0200 Subject: [PATCH 103/259] deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- entrypoint.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 1bc98e0..b2e0194 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshifts_2 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshifts_3 flavor: | latest=false tags: | diff --git a/entrypoint.sh b/entrypoint.sh index 9644dab..3673b7f 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -38,7 +38,7 @@ _migrate() { fi echo "🚀 Running migrations..." - ${ARTISAN} migrate + ${ARTISAN} migrate --force } From b0acabd84fe7de41db2685f67e7652ae6a48306f Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Mon, 17 Mar 2025 11:48:20 +0200 Subject: [PATCH 104/259] deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Enums/TaskKind.php | 23 +++ app/Exports/ShiftsExport.php | 13 +- app/Filament/Widgets/CalendarWidget.php | 5 +- app/Models/Shift.php | 5 +- app/Models/Task.php | 9 +- app/Resources/TaskResource.php | 92 +++--------- app/Resources/TaskResource/Pages/EditTask.php | 10 ++ app/Services/Algorithm.php | 3 +- app/Services/ChangeAssignment.php | 5 +- app/Services/Charts.php | 5 +- app/Services/ConcurrentTasks.php | 3 +- app/Services/Helpers.php | 39 +++-- app/Services/ManualAssignment.php | 2 +- app/Services/RecurringEvents.php | 7 +- app/Services/Schedule.php | 20 +-- app/Services/Shift.php | 29 ++-- app/Services/Soldier.php | 40 ++--- database/factories/TaskFactory.php | 6 +- .../2024_05_30_100244_create_task_table.php | 9 +- database/seeders/DatabaseSeeder.php | 141 +++++------------- lang/he.json | 3 + tests/Feature/EditTaskTest.php | 28 ++++ tests/Feature/ListTaskTest.php | 9 -- tests/Unit/AlgorithmServiceTest.php | 8 +- tests/Unit/ChangeAssignmentServiceTest.php | 27 ++-- tests/Unit/ChartsTest.php | 5 +- tests/Unit/HelpersServiceTest.php | 21 ++- tests/Unit/ScheduleServiceTest.php | 15 +- tests/Unit/ShiftServiceTest.php | 96 +++++------- tests/Unit/SoldierServiceTest.php | 49 +++--- 31 files changed, 319 insertions(+), 410 deletions(-) create mode 100644 app/Enums/TaskKind.php create mode 100644 tests/Feature/EditTaskTest.php diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index b2e0194..8a30dcc 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshifts_3 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshifts_4 flavor: | latest=false tags: | diff --git a/app/Enums/TaskKind.php b/app/Enums/TaskKind.php new file mode 100644 index 0000000..1426f0f --- /dev/null +++ b/app/Enums/TaskKind.php @@ -0,0 +1,23 @@ + __('Regular'), + self::ALERT => __('Alert'), + self::NIGHT => __('Is night'), + self::WEEKEND => __('Is weekend'), + self::INPARALLEL => __('In parallel'), + }; + } +} diff --git a/app/Exports/ShiftsExport.php b/app/Exports/ShiftsExport.php index 8def285..6864ba6 100644 --- a/app/Exports/ShiftsExport.php +++ b/app/Exports/ShiftsExport.php @@ -2,6 +2,7 @@ namespace App\Exports; +use App\Enums\TaskKind; use App\Models\Shift; use App\Models\Task; use App\Models\User; @@ -41,10 +42,7 @@ public function collection() __('Soldier') => User::where('userable_id', $shift->soldier_id)->first()?->displayName ?? __('Unknown'), __('Start date') => $shift->start_date, __('End date') => $shift->end_date, - __('Is night') => $task->is_night ? __('Yes') : __('No'), - __('Is weekend') => $task->is_weekend ? __('Yes') : __('No'), - __('Is alert') => $task->is_alert ? __('Yes') : __('No'), - __('In parallel') => $task->in_parallel ? __('Yes') : __('No'), + __('Kind') => TaskKind::from($task->kind)->getLabel(), ]; }); } @@ -57,17 +55,14 @@ public function headings(): array __('Soldier'), __('Start date'), __('End date'), - __('Is night'), - __('Is weekend'), - __('Is alert'), - __('In parallel'), + __('Kind'), ]; } public function styles(Worksheet $sheet) { $sheet->setRightToLeft(true); - $sheet->getStyle('A1:I1')->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB('D3D3D3'); + $sheet->getStyle('A1:F1')->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB('D3D3D3'); return [ 1 => ['font' => ['bold' => true]], diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 5ab7593..c46456e 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -338,7 +338,10 @@ protected function getBasicActions() 'end_date' => $arguments['event']['end'] ?? $record->end_date, ]; }) - ->visible(function ($arguments) { + ->visible(function (Model $record, $arguments) { + if ($record->start_date < now()) { + return false; + } if (! empty($arguments['event']) && $arguments['event']['start'] < now()) { $this->refreshRecords(); diff --git a/app/Models/Shift.php b/app/Models/Shift.php index cc5b42d..623b90c 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -3,6 +3,7 @@ namespace App\Models; use App\Casts\Integer; +use App\Enums\TaskKind; use App\Filament\Notifications\MyNotification; use App\Services\ChangeAssignment; use App\Services\Helpers; @@ -882,7 +883,7 @@ public static function getTitle(): string public static function setData($record, $data) { - $record->is_weekend ?? $data['is_weekend'] = $record->task->is_weekend === $data['is_weekend'] ? null : $data['is_weekend']; + $record->is_weekend ?? $data['is_weekend'] = ($record->task->kind === TaskKind::WEEKEND->value) === $data['is_weekend'] ? null : $data['is_weekend']; if ($record->parallel_weight === null) { $data['parallel_weight'] = $record->task->parallel_weight === $data['parallel_weight'] ? null : $data['parallel_weight']; } @@ -894,7 +895,7 @@ public static function fillForm($record, $arguments) { return [ ...$record->getAttributes(), - 'is_weekend' => $record->is_weekend === null ? $record->task->is_weekend : $record->is_weekend, + 'is_weekend' => $record->is_weekend === null ? ($record->task->kind === TaskKind::WEEKEND->value) : $record->is_weekend, 'parallel_weight' => $record->parallel_weight === null ? $record->task->parallel_weight : $record->parallel_weight, 'start_date' => $arguments['event']['start'] ?? $record->start_date, 'end_date' => $arguments['event']['end'] ?? $record->end_date, diff --git a/app/Models/Task.php b/app/Models/Task.php index 429bdb6..e477d9b 100644 --- a/app/Models/Task.php +++ b/app/Models/Task.php @@ -19,21 +19,14 @@ class Task extends Model 'parallel_weight', 'type', 'color', - 'is_alert', - 'is_weekend', - 'is_night', - 'in_parallel', + 'kind', 'concurrent_tasks', 'department_name', 'recurring', ]; protected $casts = [ - 'is_alert' => 'boolean', - 'is_weekend' => 'boolean', - 'is_night' => 'boolean', 'parallel_weight' => Integer::class, - 'in_parallel' => 'boolean', 'concurrent_tasks' => 'array', 'recurring' => 'array', 'duration' => Integer::class, diff --git a/app/Resources/TaskResource.php b/app/Resources/TaskResource.php index 848b873..ac06592 100644 --- a/app/Resources/TaskResource.php +++ b/app/Resources/TaskResource.php @@ -4,6 +4,7 @@ use App\Enums\DaysInWeek; use App\Enums\RecurringType; +use App\Enums\TaskKind; use App\Filters\NumberFilter; use App\Models\Department; use App\Models\Shift; @@ -22,7 +23,6 @@ use Filament\Forms\Components\Select; use Filament\Forms\Components\TextInput; use Filament\Forms\Components\TimePicker; -use Filament\Forms\Components\Toggle; use Filament\Forms\Components\ToggleButtons; use Filament\Forms\Form; use Filament\Forms\Get; @@ -40,7 +40,6 @@ use Filament\Tables\Columns\TextColumn; use Filament\Tables\Columns\TextColumn\TextColumnSize; use Filament\Tables\Enums\FiltersLayout; -use Filament\Tables\Filters\Filter; use Filament\Tables\Filters\SelectFilter; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; @@ -113,65 +112,23 @@ public static function table(Table $table): Table ->description(__('Duration'), 'above') ->size(TextColumnSize::Small) ->extraAttributes(['style' => 'margin: 5px;']), - TextColumn::make('is_alert') - ->description(__('Alert'), 'above') + TextColumn::make('kind') + ->description(__('Kind'), 'above') ->extraAttributes(['style' => 'margin: 5px;']) ->size(TextColumnSize::Small) - ->formatStateUsing(fn ($state) => $state ? __('Yes') : __('No')), - TextColumn::make('is_weekend') - ->description(__('Is weekend'), 'above') - ->size(TextColumnSize::Small) - ->extraAttributes(['style' => 'margin: 5px;']) - ->formatStateUsing(fn ($state) => $state ? __('Yes') : __('No')), - TextColumn::make('is_night') - ->description(__('Is night'), 'above') - ->size(TextColumnSize::Small) - ->extraAttributes(['style' => 'margin: 5px;']) - ->formatStateUsing(fn ($state) => $state ? __('Yes') : __('No')), - - ]) - ->space(2) - ->extraAttributes(['style' => 'display: flex; flex-direction: row; flex-wrap: wrap; justify-content: space-between; align-items: baseline; margin-bottom:10px']), - Stack::make([ - TextColumn::make('in_parallel') - ->description(__('In parallel'), 'above') - ->size(TextColumnSize::Small) - ->extraAttributes(['style' => 'margin: 5px;']) - ->formatStateUsing(fn ($state) => $state ? __('Yes') : __('No')), + ->formatStateUsing(fn ($state) => TaskKind::from($state)->getLabel()), TextColumn::make('concurrent_tasks') ->description(__('Concurrent tasks'), 'above') ->size(TextColumnSize::Small) ->extraAttributes(['style' => 'margin-left: 15px;']), ]) ->space(2) - ->extraAttributes([ - 'style' => 'display: flex; - flex-direction: row; - flex-wrap: wrap; - justify-content: center; - align-items: baseline; - padding: 10px;', - ]), + ->extraAttributes(['style' => 'display: flex; flex-direction: row; flex-wrap: wrap; justify-content: space-between; align-items: baseline; margin-bottom:10px']), Stack::make([ TextColumn::make('recurring.type') ->description(__('Recurring type'), 'above') ->size(TextColumnSize::Small) - ->formatStateUsing(function ($state) { - switch ($state) { - case 'Daily': - return __('Daily'); - case 'Weekly': - return __('Weekly'); - case 'Monthly': - return __('Monthly'); - case 'Custom': - return __('Custom'); - case 'One time': - return __('One time'); - case 'Daily range': - return __('Daily range'); - } - }), + ->formatStateUsing(fn ($state) => RecurringType::from($state)->getLabel()), TextColumn::make('recurring.days_in_week') ->description(__('Days in week'), 'above') ->size(TextColumnSize::Small) @@ -228,18 +185,12 @@ public static function table(Table $table): Table ->default(null), NumberFilter::make('parallel_weight') ->label(__('Parallel weight')), - Filter::make('is_alert') - ->label(__('Is alert')) - ->query(fn (Builder $query): Builder => $query->where('is_alert', true)) - ->toggle(), - Filter::make('is_weekend') - ->label(__('Is weekend')) - ->query(fn (Builder $query): Builder => $query->where('is_weekend', true)) - ->toggle(), - Filter::make('is_night') - ->label(__('Is night')) - ->query(fn (Builder $query): Builder => $query->where('is_night', true)) - ->toggle(), + SelectFilter::make('kind') + ->label(__('Kind')) + ->multiple() + ->searchable() + ->options(collect(TaskKind::cases())->mapWithKeys(fn ($kind) => [$kind->value => $kind->getLabel()])) + ->default(null), SelectFilter::make('department_name') ->label(__('Department name')) ->multiple() @@ -410,21 +361,17 @@ function (Get $get) { public static function additionalDetails(): array { return [ - Toggle::make('is_alert') - ->label(__('Is alert')), - Toggle::make('is_weekend') - ->label(__('Is weekend')), - Toggle::make('is_night') - ->label(__('Is night')), - Toggle::make('in_parallel') + Select::make('kind') + ->label(__('Kind')) ->live() - ->label(__('In parallel')), + ->placeholder(fn () => __('Select task kind')) + ->options(collect(TaskKind::cases())->mapWithKeys(fn ($type) => [$type->value => $type->getLabel()])), Select::make('concurrent_tasks') ->label(__('Concurrent tasks')) ->multiple() ->placeholder(fn () => Task::count() > 0 ? __('Select concurrent tasks') : __('No tasks')) ->options(Task::all()->pluck('type', 'type')) - ->visible(fn (Get $get) => $get('in_parallel')), + ->visible(fn (Get $get) => $get('kind') === TaskKind::INPARALLEL->value), ]; } @@ -484,10 +431,7 @@ protected static function taskDetails(Get $get) $task_date = Carbon::parse($get('recurring.date')); $task = new Task; $task->type = $get('type'); - $task->is_night = $get('is_night'); - $task->is_weekend = $get('is_weekend'); - $task->is_alert = $get('is_alert'); - $task->in_parallel = $get('in_parallel'); + $task->kind = $get('kind'); $task->concurrent_tasks = $get('concurrent_tasks') ?? []; $shift = new Shift; $shift->id = null; diff --git a/app/Resources/TaskResource/Pages/EditTask.php b/app/Resources/TaskResource/Pages/EditTask.php index 04a5c5a..8db8c48 100644 --- a/app/Resources/TaskResource/Pages/EditTask.php +++ b/app/Resources/TaskResource/Pages/EditTask.php @@ -3,6 +3,7 @@ namespace App\Resources\TaskResource\Pages; use App\Enums\RecurringType; +use App\Enums\TaskKind; use App\Models\Shift; use App\Resources\TaskResource; use Filament\Actions\DeleteAction; @@ -24,6 +25,15 @@ protected function getRedirectUrl(): string return $this->getResource()::getUrl('index'); } + protected function mutateFormDataBeforeSave(array $data): array + { + if ($data['kind'] !== TaskKind::INPARALLEL->value) { + $data['concurrent_tasks'] = []; + } + + return $data; + } + protected function afterSave(): void { if ($this->data['recurring']['type'] === RecurringType::ONETIME->value) { diff --git a/app/Services/Algorithm.php b/app/Services/Algorithm.php index fb4d8e2..7ec4598 100644 --- a/app/Services/Algorithm.php +++ b/app/Services/Algorithm.php @@ -2,6 +2,7 @@ namespace App\Services; +use App\Enums\TaskKind; use App\Models\Shift; use App\Models\Soldier; use App\Services\Shift as ShiftService; @@ -24,7 +25,7 @@ protected function getShiftWithTasks() $range = new Range($shift->start_date, $shift->end_date); return $range->isSameMonth(new Range(max($this->date->copy()->startOfMonth(), Carbon::tomorrow()), $this->date->copy()->endOfMonth())) - && ! $shift->task->in_parallel; + && $shift->task->kind !== TaskKind::INPARALLEL->value; }) ->map(fn (Shift $shift): ShiftService => Helpers::buildShift($shift)); } diff --git a/app/Services/ChangeAssignment.php b/app/Services/ChangeAssignment.php index 8d176de..ddf77d6 100644 --- a/app/Services/ChangeAssignment.php +++ b/app/Services/ChangeAssignment.php @@ -2,6 +2,7 @@ namespace App\Services; +use App\Enums\TaskKind; use App\Models\Shift; use App\Models\Soldier; use App\Services\Constraint as ConstraintService; @@ -71,7 +72,7 @@ public function getMatchingShifts() && $this->soldier->isAvailableBySpaces($shift->getShiftSpaces($this->soldier->shifts)) && ! $this->isConflictWithConstraints($this->soldier, $shift->range) && $this->soldier->isAvailableByShifts($shift) - && ($shift->inParallel ? $this->soldier->isAvailableByConcurrentsShifts($shift) : true); + && ($shift->kind === TaskKind::INPARALLEL->value ? $this->soldier->isAvailableByConcurrentsShifts($shift) : true); }) ->groupBy('soldier_id') ->filter(function ($shifts, $soldier_id) { @@ -86,7 +87,7 @@ public function getMatchingShifts() && $soldier->isAvailableBySpaces($this->shift->getShiftSpaces($soldier->shifts)) && ! $this->isConflictWithConstraints($soldier, $this->shift->range) && $soldier->isAvailableByShifts($this->shift) - && ($this->shift->inParallel ? $soldier->isAvailableByConcurrentsShifts($this->shift) : true); + && ($this->shift->kind === TaskKind::INPARALLEL->value ? $soldier->isAvailableByConcurrentsShifts($this->shift) : true); }); } diff --git a/app/Services/Charts.php b/app/Services/Charts.php index 0900cad..b2b744c 100644 --- a/app/Services/Charts.php +++ b/app/Services/Charts.php @@ -2,6 +2,7 @@ namespace App\Services; +use App\Enums\TaskKind; use App\Models\Constraint as ConstraintModel; use App\Models\Shift; use App\Models\Soldier; @@ -75,12 +76,12 @@ protected function getData($course, $month = null, $year = null) protected function howMuchNights($shifts) { - return $shifts->filter(fn ($shift) => $shift->task->is_night)->count(); + return $shifts->filter(fn ($shift) => $shift->task->kind === TaskKind::NIGHT->value)->count(); } protected function howMuchWeekends($shifts) { - return $shifts->filter(fn ($shift) => $shift->is_weekend != null ? $shift->is_weekend : $shift->task->is_weekend)->count(); + return $shifts->filter(fn ($shift) => $shift->is_weekend != null ? $shift->is_weekend : ($shift->task->kind === TaskKind::WEEKEND->value))->count(); } protected function howMuchPoints($shifts) diff --git a/app/Services/ConcurrentTasks.php b/app/Services/ConcurrentTasks.php index cd25dbc..c1ad7f1 100644 --- a/app/Services/ConcurrentTasks.php +++ b/app/Services/ConcurrentTasks.php @@ -3,6 +3,7 @@ namespace App\Services; use App\Enums\Availability; +use App\Enums\TaskKind; use App\Models\Shift; use App\Models\Soldier; use App\Services\Shift as ShiftService; @@ -45,7 +46,7 @@ protected function getShiftsWithTasks() $range = new Range($shift->start_date, $shift->end_date); return $range->isSameMonth(new Range(max($this->date->copy()->startOfMonth(), Carbon::tomorrow()), $this->date->copy()->endOfMonth())) - && $shift->task->in_parallel; + && ($shift->task->kind === TaskKind::INPARALLEL->value); }) ->map(fn (Shift $shift): ShiftService => Helpers::buildShift($shift)); } diff --git a/app/Services/Helpers.php b/app/Services/Helpers.php index c19624d..a436afd 100644 --- a/app/Services/Helpers.php +++ b/app/Services/Helpers.php @@ -3,6 +3,7 @@ namespace App\Services; use App\Enums\Priority; +use App\Enums\TaskKind; use App\Models\Constraint; use App\Models\Shift; use App\Services\Constraint as ConstraintService; @@ -19,14 +20,23 @@ public static function buildShift(Shift $shift): ShiftService $shift->start_date, $shift->end_date, $shift->parallel_weight === null ? $shift->task->parallel_weight : $shift->parallel_weight, - $shift->task->is_night, - $shift->is_weekend !== null ? $shift->is_weekend : $shift->task->is_weekend, - $shift->task->is_alert, - $shift->task->in_parallel, + self::kind($shift), $shift->task->concurrent_tasks ); } + protected static function kind(Shift $shift) + { + if ($shift->is_weekend === true) { + return TaskKind::WEEKEND->value; + } + if ($shift->is_weekend === false && $shift->task->kind === TaskKind::WEEKEND->value) { + return TaskKind::REGULAR->value; + } + + return $shift->task->kind; + } + public static function buildSoldier($soldier, $constraints, $shifts, array $capacityHold, $concurrentsShifts = []): SoldierService { return new SoldierService( @@ -70,16 +80,19 @@ public static function capacityHold($shifts): array $alerts = 0; $inParallel = 0; collect($shifts) - ->filter(function ($shift) { + ->filter(function (ShiftService $shift) { return $shift->id != 0; }) - ->map(function ($shift) use (&$count, &$points, &$nights, &$weekends, &$alerts, &$inParallel) { + ->each(function (ShiftService $shift) use (&$count, &$points, &$nights, &$weekends, &$alerts, &$inParallel) { $count++; $points += $shift->points; - $shift->isWeekend ? $weekends += $shift->points : $weekends; - $shift->isNight ? $nights++ : $nights; - $shift->isAlert ? $alerts++ : $alerts; - $shift->inParallel ? $inParallel++ : $inParallel; + match ($shift->kind) { + TaskKind::WEEKEND->value => $weekends += $shift->points, + TaskKind::NIGHT->value => $nights++, + TaskKind::ALERT->value => $alerts++, + TaskKind::INPARALLEL->value => $inParallel++, + TaskKind::REGULAR->value => null + }; }); return [ @@ -96,9 +109,9 @@ public static function addShiftsSpaces($shifts) { $allSpaces = collect([]); collect($shifts)->map(function (ShiftService $shift) use ($shifts, &$allSpaces) { - $spaces = $shift->isWeekend || $shift->isNight ? $shift->getShiftSpaces($shifts) : null; + $spaces = ($shift->kind === TaskKind::WEEKEND->value || $shift->kind === TaskKind::NIGHT->value) ? $shift->getShiftSpaces($shifts) : null; if (! empty($spaces)) { - collect($spaces)->map(fn (Range $space) => $allSpaces->push(new ShiftService(0, '', $space->start, $space->end, 0, false, false, false, false, []))); + collect($spaces)->map(fn (Range $space) => $allSpaces->push(new ShiftService(0, '', $space->start, $space->end, 0, TaskKind::REGULAR->value, []))); } }); @@ -113,7 +126,7 @@ public static function getSoldiersShifts($soldierId, $newRange, $inParallel) function (Shift $shift) use ($newRange, $inParallel): bool { $range = new Range($shift->start_date, $shift->end_date); - return $range->isSameMonth($newRange) && $shift->task->in_parallel === $inParallel; + return $range->isSameMonth($newRange) && ($shift->task->kind === TaskKind::INPARALLEL->value) === $inParallel; } ) ->map(fn (Shift $shift): ShiftService => self::buildShift($shift)); diff --git a/app/Services/ManualAssignment.php b/app/Services/ManualAssignment.php index 6743288..7fdf9f8 100644 --- a/app/Services/ManualAssignment.php +++ b/app/Services/ManualAssignment.php @@ -157,7 +157,7 @@ protected function getAvailableSoldiers() fn (SoldierService $soldier) => $soldier->isQualified($this->shift->taskType) && $soldier->isAvailableByMaxes($this->shift) && $soldier->isAvailableByConstraints($this->shift->range) != Availability::NO - && $soldier->isAvailableByShifts($this->shift, $this->shift->inParallel) + && $soldier->isAvailableByShifts($this->shift) && $soldier->isAvailableBySpaces($this->shift->getShiftSpaces($soldier->shifts)) ); diff --git a/app/Services/RecurringEvents.php b/app/Services/RecurringEvents.php index 26a4cbd..812bb18 100644 --- a/app/Services/RecurringEvents.php +++ b/app/Services/RecurringEvents.php @@ -2,6 +2,7 @@ namespace App\Services; +use App\Enums\TaskKind; use App\Models\Shift; use App\Models\Task; use Carbon\Carbon; @@ -147,9 +148,9 @@ protected function createShifts(array $dates) if ($holiday->isHoliday) { $shift->is_weekend = 1; $shiftType = Task::where('id', $shift->task_id)->pluck('type')->first(); - $task = Task::where([['type', $shiftType], ['is_weekend', 1]])->pluck('parallel_weight')->first(); - $task ? - $shift->parallel_weight = $task + $parallelWeight = Task::where([['type', $shiftType], ['kind', TaskKind::WEEKEND->value]])->pluck('parallel_weight')->first(); + $parallelWeight ? + $shift->parallel_weight = $parallelWeight : Notification::make() ->title(__('Update parallel weight of holiday shift')) ->persistent() diff --git a/app/Services/Schedule.php b/app/Services/Schedule.php index b4c80e4..7766413 100644 --- a/app/Services/Schedule.php +++ b/app/Services/Schedule.php @@ -3,6 +3,7 @@ namespace App\Services; use App\Enums\Availability; +use App\Enums\TaskKind; class Schedule { @@ -73,9 +74,9 @@ protected function addShiftsDataByTask(string $taskType, $shifts): void protected function getTaskWeight($shifts, $soldiers): array { $requiredPoints = collect($shifts)->sum('points'); - $requiredNights = collect($shifts)->filter(fn (Shift $shift) => $shift->isNight)->count(); + $requiredNights = collect($shifts)->filter(fn (Shift $shift) => ($shift->kind === TaskKind::NIGHT->value))->count(); $requiredWeekends = collect($shifts) - ->filter(fn (Shift $shift) => $shift->isWeekend) + ->filter(fn (Shift $shift) => ($shift->kind === TaskKind::WEEKEND->value)) ->sum(fn (Shift $shift) => $shift->points); $requiredShifts = count($shifts); @@ -155,11 +156,12 @@ protected function getShiftWeight($taskWeight, Shift $shift, int $soldiersCount, { $weight = $taskWeight['SHIFTS_RATIO'] + $shift->points > 0 ? $taskWeight['POINTS_RATIO'] : 0; - if ($shift->isWeekend) { - $weight += $taskWeight['WEEKENDS_RATIO']; - } elseif ($shift->isNight) { - $weight += $taskWeight['NIGHTS_RATIO']; - } + match ($shift->kind) { + TaskKind::WEEKEND->value => $weight += $taskWeight['WEEKENDS_RATIO'], + TaskKind::NIGHT->value => $weight += $taskWeight['NIGHTS_RATIO'], + default => null + }; + $weight += $this->getShiftAvailabilityRatio($soldiersCount, $availableSoldiersCount) * $this->SHIFT_DUMBBELLS['SHIFT_AVAILABILITY']; @@ -230,8 +232,8 @@ protected function getSoldierAndWeight(PotentialSoldierData $potentialSoldierDat 'LOW_CONSTRAINT' => $potentialSoldierData->isLowConstraint ? 1 : 0, 'POINTS_RELATIVE_LOAD' => $shift->points > 0 ? $soldier->pointsMaxData->calculatedRelativeLoad() : 0, 'SHIFTS_RELATIVE_LOAD' => $soldier->shiftsMaxData->calculatedRelativeLoad(), - 'NIGHT_RELATIVE_LOAD' => ! $shift->isNight ? 0 : $soldier->nightsMaxData->calculatedRelativeLoad(), - 'WEEKEND_RELATIVE_LOAD' => ! $shift->isWeekend ? 0 : $soldier->weekendsMaxData->calculatedRelativeLoad(), + 'NIGHT_RELATIVE_LOAD' => $shift->kind !== TaskKind::NIGHT->value ? 0 : $soldier->nightsMaxData->calculatedRelativeLoad(), + 'WEEKEND_RELATIVE_LOAD' => $shift->kind !== TaskKind::WEEKEND->value ? 0 : $soldier->weekendsMaxData->calculatedRelativeLoad(), 'MULTITASKING_VALUE' => $this->getMultitaskingValue( $soldier->qualifications->count() ), diff --git a/app/Services/Shift.php b/app/Services/Shift.php index 8520e3a..1e41652 100644 --- a/app/Services/Shift.php +++ b/app/Services/Shift.php @@ -3,6 +3,7 @@ namespace App\Services; use App\Enums\DaysInWeek; +use App\Enums\TaskKind; class Shift { @@ -14,39 +15,27 @@ class Shift public $points; - public $isNight; - - public $isWeekend; - - public $isAlert; - - public $inParallel; + public $kind; public $inParalelTasks; - public function __construct($id, string $taskType, $start, $end, float $points, bool $isNight, bool $isWeekend, bool $isAlert, $inParallel, $inParalelTasks = []) + public function __construct($id, string $taskType, $start, $end, float $points, $kind, $inParalelTasks = []) { $this->id = $id; $this->taskType = $taskType; $this->range = new Range($start, $end); $this->points = $points; - $this->isNight = $isNight; - $this->isWeekend = $isWeekend; - $this->isAlert = $isAlert; - $this->inParallel = $inParallel; + $this->kind = $kind; $this->inParalelTasks = $inParalelTasks; } public function getShiftSpaces($shifts) { - if ($this->isWeekend) { - return $this->getWeekendSpaces($shifts); - } - if ($this->isNight) { - return $this->range->getNightSpaces(); - } - - return []; + return match ($this->kind) { + TaskKind::WEEKEND->value => $this->getWeekendSpaces($shifts), + TaskKind::NIGHT->value => $this->range->getNightSpaces(), + default => [] + }; } protected function getWeekendSpaces($shifts) diff --git a/app/Services/Soldier.php b/app/Services/Soldier.php index 7fdbec0..e26cde6 100644 --- a/app/Services/Soldier.php +++ b/app/Services/Soldier.php @@ -4,6 +4,7 @@ use App\Enums\Availability; use App\Enums\Priority; +use App\Enums\TaskKind; class Soldier { @@ -59,16 +60,17 @@ public function isAbleTake(Shift $shift, $spaces): bool public function isAvailableByMaxes(Shift $shift): bool { if ( - ($shift->isWeekend && $this->weekendsMaxData->remaining() < $shift->points) - || ($shift->isNight && $this->nightsMaxData->remaining() < 1) - || ($shift->isAlert && $this->alertsMaxData->remaining() < 1) - || ($shift->inParallel && $this->inParallelMaxData->remaining() < 1) + ($shift->kind === TaskKind::WEEKEND->value && $this->weekendsMaxData->remaining() < $shift->points) + || ($shift->kind === TaskKind::NIGHT->value && $this->nightsMaxData->remaining() < 1) + || ($shift->kind === TaskKind::ALERT->value && $this->alertsMaxData->remaining() < 1) + || ($shift->kind === TaskKind::INPARALLEL->value && $this->inParallelMaxData->remaining() < 1) + || $this->pointsMaxData->remaining() < $shift->points + || $this->shiftsMaxData->remaining() < 1 ) { return false; } - return $this->pointsMaxData->remaining() >= $shift->points - && $this->shiftsMaxData->remaining() >= 1; + return true; } public function isAvailableByShifts(Shift $shift): bool @@ -124,21 +126,23 @@ public function assign(Shift $shift, $spaces): void $this->shifts->push($shift); $this->addSpaces($spaces); $this->pointsMaxData->used += $shift->points; - $this->shiftsMaxData->used += 1; - if ($shift->isWeekend) { - $this->weekendsMaxData->used += $shift->points; - } elseif ($shift->isNight) { - $this->nightsMaxData->used += 1; - - } elseif ($shift->isAlert) { - $this->alertsMaxData->used += 1; - } elseif ($shift->inParallel) { - $this->inParallelMaxData->used += 1; - } + match ($shift->kind) { + TaskKind::WEEKEND->value => $this->weekendsMaxData->used += $shift->points, + TaskKind::NIGHT->value => $this->updateNightAndShifts(), + TaskKind::ALERT->value => $this->alertsMaxData->used += 1, + TaskKind::INPARALLEL->value => $this->inParallelMaxData->used += 1, + TaskKind::REGULAR->value => $this->shiftsMaxData->used += 1, + }; } protected function addSpaces($spaces) { - collect($spaces)->map(fn ($space) => $this->shifts->push(new Shift(0, '', $space->start, $space->end, 0, false, false, false, false, []))); + collect($spaces)->map(fn ($space) => $this->shifts->push(new Shift(0, '', $space->start, $space->end, 0, TaskKind::REGULAR->value, []))); + } + + protected function updateNightAndShifts() + { + $this->nightsMaxData->used += 1; + $this->shiftsMaxData->used += 1; } } diff --git a/database/factories/TaskFactory.php b/database/factories/TaskFactory.php index 6836bfa..b443bd5 100644 --- a/database/factories/TaskFactory.php +++ b/database/factories/TaskFactory.php @@ -2,6 +2,7 @@ namespace Database\Factories; +use App\Enums\TaskKind; use Illuminate\Database\Eloquent\Factories\Factory; class TaskFactory extends Factory @@ -15,10 +16,7 @@ public function definition(): array 'parallel_weight' => fake()->randomDigit(), 'type' => fake()->name(), 'color' => fake()->hexColor(), - 'is_alert' => fake()->boolean(), - 'is_weekend' => fake()->boolean(), - 'is_night' => fake()->boolean(), - 'in_parallel' => fake()->boolean(), + 'kind' => TaskKind::cases()[random_int(0, count(TaskKind::cases()) - 1)]->value, 'department_name' => fake()->name(), 'recurring' => json_encode([]), ]; diff --git a/database/migrations/2024_05_30_100244_create_task_table.php b/database/migrations/2024_05_30_100244_create_task_table.php index db05c21..396eba9 100644 --- a/database/migrations/2024_05_30_100244_create_task_table.php +++ b/database/migrations/2024_05_30_100244_create_task_table.php @@ -16,10 +16,11 @@ public function up(): void $table->integer('parallel_weight')->default(0); $table->string('type'); $table->string('color'); - $table->boolean('is_alert'); - $table->boolean('is_weekend'); - $table->boolean('is_night'); - $table->boolean('in_parallel')->default(false); + $table->boolean('is_alert')->nullable(); + $table->boolean('is_weekend')->nullable(); + $table->boolean('is_night')->nullable(); + $table->boolean('in_parallel')->nullable(); + $table->string('kind'); $table->json('concurrent_tasks')->nullable(); $table->string('department_name')->nullable(); $table->json('recurring'); diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 8777cf0..f9dd134 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -5,6 +5,7 @@ use App\Enums\ConstraintType; use App\Enums\DaysInWeek; use App\Enums\RecurringType; +use App\Enums\TaskKind; use App\Models\Constraint; use App\Models\Soldier; use App\Models\Task; @@ -162,9 +163,7 @@ public function run(): void 'duration' => 4, 'parallel_weight' => 0, 'type' => 'tichnun', - 'is_weekend' => false, - 'is_night' => false, - 'in_parallel' => false, + 'kind' => TaskKind::REGULAR->value, 'color' => '#b54b4b', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -177,9 +176,7 @@ public function run(): void 'duration' => 4, 'parallel_weight' => 1, 'type' => 'tichnun', - 'is_weekend' => false, - 'is_night' => true, - 'in_parallel' => false, + 'kind' => TaskKind::NIGHT->value, 'color' => '#b54b4b', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -192,9 +189,7 @@ public function run(): void 'duration' => 25, 'parallel_weight' => 2.5, 'type' => 'tichnun', - 'is_weekend' => true, - 'is_night' => false, - 'in_parallel' => false, + 'kind' => TaskKind::WEEKEND->value, 'color' => '#b54b4b', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -207,9 +202,7 @@ public function run(): void 'duration' => 25, 'parallel_weight' => 2.5, 'type' => 'tichnun', - 'is_weekend' => true, - 'is_night' => false, - 'in_parallel' => false, + 'kind' => TaskKind::WEEKEND->value, 'color' => '#b54b4b', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -223,9 +216,7 @@ public function run(): void 'duration' => 4, 'parallel_weight' => 0, 'type' => 'bakara', - 'is_weekend' => false, - 'is_night' => false, - 'in_parallel' => false, + 'kind' => TaskKind::REGULAR->value, 'color' => '#4bb5ac', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -238,9 +229,7 @@ public function run(): void 'duration' => 4, 'parallel_weight' => 1, 'type' => 'bakara', - 'is_weekend' => false, - 'is_night' => true, - 'in_parallel' => false, + 'kind' => TaskKind::NIGHT->value, 'color' => '#4bb5ac', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -253,9 +242,7 @@ public function run(): void 'duration' => 26, 'parallel_weight' => 2.5, 'type' => 'bakara', - 'is_weekend' => true, - 'is_night' => false, - 'in_parallel' => false, + 'kind' => TaskKind::WEEKEND->value, 'color' => '#4bb5ac', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -269,9 +256,7 @@ public function run(): void 'duration' => 4, 'parallel_weight' => 0, 'type' => 'pikud', - 'is_weekend' => false, - 'is_night' => false, - 'in_parallel' => false, + 'kind' => TaskKind::REGULAR->value, 'color' => '#4bb569', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -284,9 +269,7 @@ public function run(): void 'duration' => 4, 'parallel_weight' => 0, 'type' => 'pikud', - 'is_weekend' => false, - 'is_night' => false, - 'in_parallel' => false, + 'kind' => TaskKind::REGULAR->value, 'color' => '#4bb569', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -299,9 +282,7 @@ public function run(): void 'duration' => 25, 'parallel_weight' => 2.5, 'type' => 'pikud', - 'is_weekend' => true, - 'is_night' => false, - 'in_parallel' => false, + 'kind' => TaskKind::WEEKEND->value, 'color' => '#4bb569', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -314,9 +295,7 @@ public function run(): void 'duration' => 25, 'parallel_weight' => 2.5, 'type' => 'pikud', - 'is_weekend' => true, - 'is_night' => false, - 'in_parallel' => false, + 'kind' => TaskKind::WEEKEND->value, 'color' => '#4bb569', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -329,9 +308,7 @@ public function run(): void 'duration' => 4, 'parallel_weight' => 1, 'type' => 'pikud', - 'is_weekend' => false, - 'is_night' => true, - 'in_parallel' => false, + 'kind' => TaskKind::NIGHT->value, 'color' => '#4bb569', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -345,9 +322,7 @@ public function run(): void 'duration' => 2, 'parallel_weight' => 0, 'type' => 'minhal', - 'is_weekend' => false, - 'is_night' => false, - 'in_parallel' => false, + 'kind' => TaskKind::REGULAR->value, 'color' => '#c5d649', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -361,9 +336,7 @@ public function run(): void 'duration' => 6, 'parallel_weight' => 0, 'type' => 'hatasa', - 'is_weekend' => false, - 'is_night' => false, - 'in_parallel' => false, + 'kind' => TaskKind::REGULAR->value, 'color' => '#d649b5', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -376,9 +349,7 @@ public function run(): void 'duration' => 6, 'parallel_weight' => 1, 'type' => 'hatasa', - 'is_weekend' => false, - 'is_night' => true, - 'in_parallel' => false, + 'kind' => TaskKind::NIGHT->value, 'color' => '#d649b5', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -391,9 +362,7 @@ public function run(): void 'duration' => 26, 'parallel_weight' => 2.5, 'type' => 'hatasa', - 'is_weekend' => true, - 'is_night' => false, - 'in_parallel' => false, + 'kind' => TaskKind::WEEKEND->value, 'color' => '#d649b5', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -406,9 +375,7 @@ public function run(): void 'duration' => 26, 'parallel_weight' => 2.5, 'type' => 'hatasa', - 'is_weekend' => true, - 'is_night' => false, - 'in_parallel' => false, + 'kind' => TaskKind::WEEKEND->value, 'color' => '#d649b5', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -422,9 +389,7 @@ public function run(): void 'duration' => 12, 'parallel_weight' => 0, 'type' => 'shmira', - 'is_weekend' => false, - 'is_night' => false, - 'in_parallel' => false, + 'kind' => TaskKind::REGULAR->value, 'color' => '#ee8559', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -437,9 +402,7 @@ public function run(): void 'duration' => 7, 'parallel_weight' => 1, 'type' => 'shmira', - 'is_weekend' => false, - 'is_night' => true, - 'in_parallel' => false, + 'kind' => TaskKind::NIGHT->value, 'color' => '#ee8559', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -452,9 +415,7 @@ public function run(): void 'duration' => 26, 'parallel_weight' => 2.5, 'type' => 'shmira', - 'is_weekend' => true, - 'is_night' => false, - 'in_parallel' => false, + 'kind' => TaskKind::WEEKEND->value, 'color' => '#ee8559', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -467,9 +428,7 @@ public function run(): void 'duration' => 26, 'parallel_weight' => 2.5, 'type' => 'shmira', - 'is_weekend' => true, - 'is_night' => false, - 'in_parallel' => false, + 'kind' => TaskKind::WEEKEND->value, 'color' => '#ee8559', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -483,9 +442,7 @@ public function run(): void 'duration' => 7, 'parallel_weight' => 0, 'type' => 'pianuach', - 'is_weekend' => false, - 'is_night' => false, - 'in_parallel' => false, + 'kind' => TaskKind::REGULAR->value, 'color' => '#3574fb', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -498,9 +455,7 @@ public function run(): void 'duration' => 5, 'parallel_weight' => 1, 'type' => 'pianuach', - 'is_weekend' => false, - 'is_night' => true, - 'in_parallel' => false, + 'kind' => TaskKind::NIGHT->value, 'color' => '#3574fb', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -513,9 +468,7 @@ public function run(): void 'duration' => 27, 'parallel_weight' => 2.5, 'type' => 'pianuach', - 'is_weekend' => true, - 'is_night' => false, - 'in_parallel' => false, + 'kind' => TaskKind::WEEKEND->value, 'color' => '#3574fb', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -528,9 +481,7 @@ public function run(): void 'duration' => 27, 'parallel_weight' => 2.5, 'type' => 'pianuach', - 'is_weekend' => true, - 'is_night' => false, - 'in_parallel' => false, + 'kind' => TaskKind::WEEKEND->value, 'color' => '#3574fb', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -544,9 +495,7 @@ public function run(): void 'duration' => 2, 'parallel_weight' => 0, 'type' => 'nivut', - 'is_weekend' => false, - 'is_night' => false, - 'in_parallel' => false, + 'kind' => TaskKind::REGULAR->value, 'color' => '#ed8d8d8b', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -559,9 +508,7 @@ public function run(): void 'duration' => 2.5, 'parallel_weight' => 1, 'type' => 'nivut', - 'is_weekend' => false, - 'is_night' => true, - 'in_parallel' => false, + 'kind' => TaskKind::NIGHT->value, 'color' => '#ed8d8d8b', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -574,9 +521,7 @@ public function run(): void 'duration' => 28, 'parallel_weight' => 2.5, 'type' => 'nivut', - 'is_weekend' => true, - 'is_night' => false, - 'in_parallel' => false, + 'kind' => TaskKind::WEEKEND->value, 'color' => '#ed8d8d8b', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -589,9 +534,7 @@ public function run(): void 'duration' => 28, 'parallel_weight' => 2.5, 'type' => 'nivut', - 'is_weekend' => true, - 'is_night' => false, - 'in_parallel' => false, + 'kind' => TaskKind::WEEKEND->value, 'color' => '#ed8d8d8b', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -605,9 +548,7 @@ public function run(): void 'duration' => 10, 'parallel_weight' => 0, 'type' => 'tazpit', - 'is_weekend' => false, - 'is_night' => false, - 'in_parallel' => false, + 'kind' => TaskKind::REGULAR->value, 'color' => '#77ff23', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -620,9 +561,7 @@ public function run(): void 'duration' => 10, 'parallel_weight' => 0, 'type' => 'tazpit', - 'is_weekend' => false, - 'is_night' => false, - 'in_parallel' => false, + 'kind' => TaskKind::REGULAR->value, 'color' => '#77ff23', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -635,9 +574,7 @@ public function run(): void 'duration' => 6, 'parallel_weight' => 1, 'type' => 'tazpit', - 'is_weekend' => false, - 'is_night' => true, - 'in_parallel' => false, + 'kind' => TaskKind::NIGHT->value, 'color' => '#77ff23', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -650,9 +587,7 @@ public function run(): void 'duration' => 25, 'parallel_weight' => 2.5, 'type' => 'tazpit', - 'is_weekend' => true, - 'is_night' => false, - 'in_parallel' => false, + 'kind' => TaskKind::WEEKEND->value, 'color' => '#77ff23', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -665,9 +600,7 @@ public function run(): void 'duration' => 25, 'parallel_weight' => 2.5, 'type' => 'tazpit', - 'is_weekend' => true, - 'is_night' => false, - 'in_parallel' => false, + 'kind' => TaskKind::WEEKEND->value, 'color' => '#77ff23', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, @@ -681,9 +614,7 @@ public function run(): void 'duration' => 3.5, 'parallel_weight' => 0, 'type' => 'bdikat ziud', - 'is_weekend' => false, - 'is_night' => false, - 'in_parallel' => false, + 'kind' => TaskKind::REGULAR->value, 'color' => '#a7b2c3', 'recurring' => collect([ 'type' => RecurringType::WEEKLY, diff --git a/lang/he.json b/lang/he.json index 347c38d..7ebb270 100644 --- a/lang/he.json +++ b/lang/he.json @@ -280,6 +280,9 @@ "Area":"שטח", "Markers":"מודגש", "Grid":"משבצות", + "Kind":"סוג משימה", + "Select task kind":"בחר סוג משימה", + "Regular":"רגילה", "You did not choose a commander. With your approval, you leave the team without a commander. Are you sure?":"לא בחרת מפקד. באישורך אתה משאיר את הצוות ללא מפקד. האם אתה בטוח?", "Your shifts for today":"המשמרות שלך להיום", "Range between":":label בין :fromValue ו :toValue", diff --git a/tests/Feature/EditTaskTest.php b/tests/Feature/EditTaskTest.php new file mode 100644 index 0000000..6432446 --- /dev/null +++ b/tests/Feature/EditTaskTest.php @@ -0,0 +1,28 @@ +seed(PermissionSeeder::class) + ->asUser('manager'); +}); + +it('should change the concurrent_tasks to empty array if the kind is not `in_parallel`', function () { + $task = Task::factory()->create(['kind' => TaskKind::INPARALLEL->value, 'concurrent_tasks' => ['go']]); + + livewire(EditTask::class, [ + 'record' => $task->id, + ]) + ->set('data.kind', TaskKind::NIGHT->value) + ->set('data.recurring.type', RecurringType::DAILY->value) + ->call('save') + ->assertHasNoFormErrors(); + expect($task->refresh()->concurrent_tasks)->toBe([]); +}); diff --git a/tests/Feature/ListTaskTest.php b/tests/Feature/ListTaskTest.php index 04f8c26..e19771a 100644 --- a/tests/Feature/ListTaskTest.php +++ b/tests/Feature/ListTaskTest.php @@ -11,15 +11,6 @@ ->asUser('manager'); }); -it('should filter the table in boolean filter', function () { - $tasks = Task::factory()->count(5)->create(); - livewire::test(ListTasks::class) - ->assertCanSeeTableRecords($tasks) - ->filterTable('is_alert', true) - ->assertCanSeeTableRecords($tasks->where('is_alert', true)) - ->assertCanNotSeeTableRecords($tasks->where('is_alert', false)); -}); - it('should filter the table in NumberFilter filter', function () { $tasks = Task::factory()->count(5)->create(); $data = ['range_condition' => 'equal', 'range_equal' => 2.5]; diff --git a/tests/Unit/AlgorithmServiceTest.php b/tests/Unit/AlgorithmServiceTest.php index fd2b1c3..f2a3225 100644 --- a/tests/Unit/AlgorithmServiceTest.php +++ b/tests/Unit/AlgorithmServiceTest.php @@ -1,5 +1,6 @@ getMethod('getShiftWithTasks'); $method->setAccessible(true); - $task = Task::factory()->create(['in_parallel' => false]); + $task = Task::factory()->create(['kind' => TaskKind::REGULAR->value]); Shift::factory()->count(3)->create(['task_id' => $task->id]); expect($method->invoke(new Algorithm))->toBeEmpty(); }); @@ -19,15 +20,16 @@ $reflection = new ReflectionClass(Algorithm::class); $method = $reflection->getMethod('getShiftWithTasks'); $method->setAccessible(true); - $task = Task::factory()->create(['in_parallel' => false]); + $task = Task::factory()->create(['kind' => TaskKind::REGULAR->value]); Shift::factory()->count(3)->create([ 'task_id' => $task->id, 'soldier_id' => null, + 'is_weekend' => false, 'start_date' => now()->addMonth(), 'end_date' => now()->addMonth()->addDay(), ]); $shiftsWithTasks = $method->invoke(new Algorithm); - $shiftsWithTasks->map(fn ($shift) => expect($shift->isNight)->toBe($task->is_night)); + $shiftsWithTasks->map(fn ($shift) => expect($shift->kind)->toBe($task->kind)); }); it('should return only non-reserve soldiers', function () { diff --git a/tests/Unit/ChangeAssignmentServiceTest.php b/tests/Unit/ChangeAssignmentServiceTest.php index 29599af..2a64f81 100644 --- a/tests/Unit/ChangeAssignmentServiceTest.php +++ b/tests/Unit/ChangeAssignmentServiceTest.php @@ -1,6 +1,7 @@ Soldier::factory()->create()->id, 'task_id' => Task::factory()->create([ 'type' => 'clean', - 'is_night' => false, - 'in_parallel' => false, + 'kind' => TaskKind::REGULAR->value, ])->id, 'is_weekend' => false, 'start_date' => now()->isLastOfMonth() ? now()->subDays(8) : now()->addHours(5), @@ -51,7 +51,7 @@ 'soldier_id' => $soldier5->id, 'task_id' => Task::factory()->create([ 'type' => 'clean', - 'in_parallel' => false, + 'kind' => TaskKind::REGULAR->value, ])->id, 'start_date' => now()->isLastOfMonth() ? now()->subDays(9) : now()->addHours(4), 'end_date' => now()->isLastOfMonth() ? now()->subDays(6) : now()->addHours(7), @@ -83,8 +83,7 @@ ])->userable_id, 'task_id' => Task::factory()->create([ 'type' => 'clean', - 'is_night' => false, - 'in_parallel' => false, + 'kind' => TaskKind::REGULAR->value, ])->id, 'is_weekend' => false, 'start_date' => now()->addHours(1), @@ -99,8 +98,7 @@ ])->userable_id, 'task_id' => Task::factory()->create([ 'type' => 'jump', - 'is_night' => false, - 'in_parallel' => false, + 'kind' => TaskKind::REGULAR->value, ])->id, 'is_weekend' => false, 'start_date' => now()->addHours(3), @@ -115,8 +113,7 @@ ])->userable_id, 'task_id' => Task::factory()->create([ 'type' => 'run', - 'is_night' => false, - 'in_parallel' => false, + 'kind' => TaskKind::REGULAR->value, ])->id, 'is_weekend' => false, 'start_date' => now()->addHours(3), @@ -131,8 +128,7 @@ ])->userable_id, 'task_id' => Task::factory()->create([ 'type' => 'run', - 'is_night' => false, - 'in_parallel' => false, + 'kind' => TaskKind::REGULAR->value, ])->id, 'is_weekend' => false, 'start_date' => now()->addHours(1), @@ -147,8 +143,7 @@ ])->userable_id, 'task_id' => Task::factory()->create([ 'type' => 'jump', - 'is_night' => false, - 'in_parallel' => false, + 'kind' => TaskKind::REGULAR->value, ])->id, 'is_weekend' => false, 'start_date' => now()->addHours(3), @@ -163,8 +158,7 @@ ])->userable_id, 'task_id' => Task::factory()->create([ 'type' => 'clean', - 'is_night' => false, - 'in_parallel' => false, + 'kind' => TaskKind::REGULAR->value, ])->id, 'is_weekend' => false, 'start_date' => now()->addHours(1), @@ -179,8 +173,7 @@ ])->userable_id, 'task_id' => Task::factory()->create([ 'type' => 'clean', - 'is_night' => false, - 'in_parallel' => false, + 'kind' => TaskKind::REGULAR->value, ])->id, 'is_weekend' => false, 'start_date' => now()->addHours(3), diff --git a/tests/Unit/ChartsTest.php b/tests/Unit/ChartsTest.php index 314caf0..4d55edd 100644 --- a/tests/Unit/ChartsTest.php +++ b/tests/Unit/ChartsTest.php @@ -1,5 +1,6 @@ now()->addMonth()->addHour(), 'task_id' => Task::factory()->create([ 'type' => 'run', - 'in_parallel' => false, + 'kind' => TaskKind::REGULAR->value, ])->id, ]); @@ -49,7 +50,7 @@ 'end_date' => now()->addMonth()->addHours(2), 'task_id' => Task::factory()->create([ 'type' => 'run', - 'in_parallel' => false, + 'kind' => TaskKind::REGULAR->value, ])->id, ]); diff --git a/tests/Unit/HelpersServiceTest.php b/tests/Unit/HelpersServiceTest.php index 1b0a1a3..34f42d0 100644 --- a/tests/Unit/HelpersServiceTest.php +++ b/tests/Unit/HelpersServiceTest.php @@ -1,6 +1,7 @@ create(); + $shift = Shift::factory()->create(['is_weekend' => false, 'task_id' => Task::factory()->create(['kind' => TaskKind::NIGHT->value])]); $shiftService = new ShiftService( $shift->id, $shift->task->type, $shift->start_date, $shift->end_date, $shift->parallel_weight, - $shift->task->is_night, - $shift->is_weekend, - $shift->task->is_alert, - $shift->task->in_parallel, + $shift->task->kind, $shift->task->concurrent_tasks ); expect(Helpers::buildShift($shift))->toBeInstanceOf(App\Services\Shift::class); @@ -72,16 +70,16 @@ $result = [ 'count' => $shifts->count(), 'points' => $shifts->sum('points'), - 'sumWeekends' => $shifts->filter(fn ($shift) => $shift->isWeekend)->sum('points'), - 'sumNights' => $shifts->filter(fn ($shift) => $shift->isNight)->count(), - 'sumAlerts' => $shifts->filter(fn ($shift) => $shift->isAlert)->count(), - 'sumInParallel' => $shifts->filter(fn ($shift) => $shift->inParallel)->count(), + 'sumWeekends' => $shifts->filter(fn ($shift) => $shift->kind === TaskKind::WEEKEND->value)->sum('points'), + 'sumNights' => $shifts->filter(fn ($shift) => $shift->kind === TaskKind::NIGHT->value)->count(), + 'sumAlerts' => $shifts->filter(fn ($shift) => $shift->kind === TaskKind::ALERT->value)->count(), + 'sumInParallel' => $shifts->filter(fn ($shift) => $shift->kind === TaskKind::INPARALLEL->value)->count(), ]; expect(Helpers::capacityHold($shifts))->toEqual($result); }); it('should return shifts spaces', function () { - $shifts = Shift::factory()->count(3)->create(['is_weekend' => false, 'task_id' => Task::factory()->create(['is_night' => true, 'in_parallel' => false])->id]); + $shifts = Shift::factory()->count(3)->create(['is_weekend' => false, 'task_id' => Task::factory()->create(['kind' => TaskKind::NIGHT->value])->id]); $shifts = $shifts->map(fn ($shift) => Helpers::buildShift($shift)); expect(Helpers::addShiftsSpaces($shifts))->toHaveCount(6); }); @@ -91,8 +89,9 @@ $shifts = Shift::factory()->count(3)->create([ 'soldier_id' => $soldier->id, 'task_id' => Task::factory()->create([ - 'in_parallel' => false, + 'kind' => TaskKind::REGULAR->value, ])->id, + 'is_weekend' => false, 'start_date' => now()->isLastOfMonth() ? now()->subDays(6)->startOfSecond() : now()->addHours(7)->startOfSecond(), 'end_date' => now()->isLastOfMonth() ? now()->subDays(5)->startOfSecond() : now()->addHours(8)->startOfSecond()]); $result = $shifts->map(fn ($shift) => Helpers::buildShift($shift)); diff --git a/tests/Unit/ScheduleServiceTest.php b/tests/Unit/ScheduleServiceTest.php index 254e0af..877cb67 100644 --- a/tests/Unit/ScheduleServiceTest.php +++ b/tests/Unit/ScheduleServiceTest.php @@ -1,6 +1,7 @@ seed(PermissionSeeder::class) + ->asUser('manager'); + Task::factory()->create([ 'name' => 'Clean', 'start_hour' => '14:00:00', 'type' => 'Clean', 'duration' => 1, 'parallel_weight' => 0.25, - 'in_parallel' => false, - 'recurring' => collect(['type' => RecurringType::CUSTOM, 'dates_in_month' => [6]]), + 'kind' => TaskKind::REGULAR->value, + 'recurring' => collect(['type' => RecurringType::CUSTOM, 'dates_in_month' => [19]]), ]); - User::factory()->create([ + $user = User::factory()->create([ 'userable_id' => Soldier::factory()->create([ 'qualifications' => (['Clean']), 'is_reservist' => false, @@ -48,6 +55,6 @@ $schedule->schedule(); $this->assertDatabaseHas(Shift::class, [ 'id' => 1, - 'soldier_id' => 1, + 'soldier_id' => $user->userable_id, ]); }); diff --git a/tests/Unit/ShiftServiceTest.php b/tests/Unit/ShiftServiceTest.php index 084b11d..0ce7b9f 100644 --- a/tests/Unit/ShiftServiceTest.php +++ b/tests/Unit/ShiftServiceTest.php @@ -1,6 +1,7 @@ value, [] ); @@ -41,10 +39,7 @@ '2024-11-08 22:30:00', '2024-11-09 09:00:00', 0.25, - false, - true, - false, - false, + TaskKind::WEEKEND->value, [] ); @@ -66,7 +61,7 @@ $range = new Range('2024-11-08 16:30:00', '2024-11-09 22:00:00'); - $shift = new Shift(1, 'test', '2024-11-08 16:30:00', '2024-11-09 22:00:00', 0.25, false, true, false, false, []); + $shift = new Shift(1, 'test', '2024-11-08 16:30:00', '2024-11-09 22:00:00', 0.25, TaskKind::WEEKEND->value, []); $reflection = new ReflectionClass(Shift::class); $method = $reflection->getMethod('getWeekendSpaces'); @@ -92,10 +87,7 @@ '2024-11-16 16:30:00', '2024-11-16 18:30:00', 0.25, - false, - true, - false, - false, + TaskKind::WEEKEND->value, [] ); $reflection = new ReflectionClass(Shift::class); @@ -114,10 +106,7 @@ '2024-11-08 16:30:00', '2024-11-09 18:30:00', 0.25, - false, - true, - false, - false, + TaskKind::WEEKEND->value, [] ); @@ -137,10 +126,7 @@ '2024-11-16 16:30:00', '2024-11-16 18:30:00', 0.25, - false, - true, - false, - false, + TaskKind::WEEKEND->value, [] ); $reflection = new ReflectionClass(Shift::class); @@ -160,10 +146,7 @@ '2024-11-08 16:30:00', '2024-11-11 18:00:00', 0.25, - false, - true, - false, - false, + TaskKind::WEEKEND->value, [] ); $reflection = new ReflectionClass(Shift::class); @@ -183,10 +166,7 @@ '2024-11-08 16:30:00', '2024-11-11 18:00:00', 0.25, - false, - true, - false, - false, + TaskKind::WEEKEND->value, [] ); $reflection = new ReflectionClass(Shift::class); @@ -199,28 +179,24 @@ }); it('should return true if the shift date is adjacent to the selected date', function () { - $shifts = [new Shift( - 1, - 'test', - '2024-11-09 16:30:00', - '2024-11-09 18:30:00', - 0.25, - false, - true, - false, - false, - [] - )]; - $shift = new Shift( + $shifts = [ + new App\Services\Shift( + 1, + 'test', + '2024-11-09 16:30:00', + '2024-11-09 18:30:00', + 0.25, + TaskKind::WEEKEND->value, + [] + ), + ]; + $shift = new App\Services\Shift( 1, 'test', '2024-11-08 16:30:00', '2024-11-08 18:00:00', 0.25, - false, - true, - false, - false, + TaskKind::WEEKEND->value, [] ); $range = new Range('2024-11-08 16:30:00', '2024-11-08 18:00:00'); @@ -234,18 +210,17 @@ }); it('should return false if the shift date is not adjacent to the selected date', function () { - $shifts = [new Shift( - 1, - 'test', - '2024-11-16 16:30:00', - '2024-11-16 18:30:00', - 0.25, - false, - true, - false, - false, - [] - )]; + $shifts = [ + new App\Services\Shift( + 1, + 'test', + '2024-11-16 16:30:00', + '2024-11-16 18:30:00', + 0.25, + TaskKind::WEEKEND->value, + [] + ), + ]; $range = new Range('2024-11-08 16:30:00', '2024-11-08 18:00:00'); $shift = new Shift( 1, @@ -253,10 +228,7 @@ '2024-11-08 16:30:00', '2024-11-08 18:00:00', 0.25, - false, - true, - false, - false, + TaskKind::WEEKEND->value, [] ); $reflection = new ReflectionClass(Shift::class); diff --git a/tests/Unit/SoldierServiceTest.php b/tests/Unit/SoldierServiceTest.php index 17630a4..9f23a82 100644 --- a/tests/Unit/SoldierServiceTest.php +++ b/tests/Unit/SoldierServiceTest.php @@ -2,6 +2,7 @@ use App\Enums\Availability; use App\Enums\Priority; +use App\Enums\TaskKind; use App\Models\Shift as ShiftModel; use App\Models\Task; use App\Services\Constraint; @@ -13,48 +14,48 @@ use Carbon\Carbon; it('should return true if the soldier able to take the shift', function () { - $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(5), new MaxData(3), new MaxData(3), new MaxData(3), ['Run'], []); - $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 18), 2, false, false, false, false, []); + $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(5), new MaxData(3), new MaxData(5), new MaxData(3), ['Run'], []); + $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 18), 2, TaskKind::REGULAR->value, []); expect($soldier->isAbleTake($shift, []))->toBeTrue(); }); it('should return false if the soldier cant take the shift', function () { - $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(5), new MaxData(3), new MaxData(3), new MaxData(3), ['Run'], []); - $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 18), 4, false, false, false, false, []); + $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(5), new MaxData(3), new MaxData(5), new MaxData(3), ['Run'], []); + $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 18), 4, TaskKind::REGULAR->value, []); expect($soldier->isAbleTake($shift, []))->toBeFalse(); }); it('should return true if the soldier available by maxes', function () { - $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(5), new MaxData(3), new MaxData(3), new MaxData(3), ['Run'], []); - $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 18), 1, false, false, false, false, []); + $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(5), new MaxData(3), new MaxData(5), new MaxData(3), ['Run'], []); + $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 18), 1, TaskKind::REGULAR->value, []); $soldier->isAvailableByMaxes($shift); expect($soldier->isAvailableByMaxes($shift))->toBeTrue(); }); it('should return false if the soldier is not available by maxes', function () { - $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(0), new MaxData(3), new MaxData(3), new MaxData(3), ['Run'], []); - $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 21), 1, true, false, false, false, []); + $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(0), new MaxData(3), new MaxData(5), new MaxData(3), ['Run'], []); + $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 21), 1, TaskKind::NIGHT->value, []); expect($soldier->isAvailableByMaxes($shift))->toBeFalse(); }); it('should return true if the soldier is available by shifts', function () { - $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 19), Carbon::create(2024, 5, 14, 21), 1, true, false, false, false, []); - $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(0), new MaxData(3), new MaxData(3), new MaxData(3), ['Run'], []); + $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 19), Carbon::create(2024, 5, 14, 21), 1, TaskKind::NIGHT->value, []); + $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(0), new MaxData(3), new MaxData(5), new MaxData(3), ['Run'], []); $soldier->assign($shift, []); - $shift = new Shift(1, 'go', Carbon::create(2024, 5, 14, 16), Carbon::create(2024, 5, 14, 18), 0, false, false, false, false, []); + $shift = new Shift(1, 'go', Carbon::create(2024, 5, 14, 16), Carbon::create(2024, 5, 14, 18), 0, TaskKind::REGULAR->value, []); expect($soldier->isAvailableByShifts($shift))->toBeTrue(); }); it('should return false if the soldier is not available by shifts', function () { - $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 21), 1, true, false, false, false, []); - $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(0), new MaxData(3), new MaxData(3), new MaxData(3), ['Run'], []); + $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 21), 1, TaskKind::NIGHT->value, []); + $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(0), new MaxData(3), new MaxData(5), new MaxData(3), ['Run'], []); $soldier->assign($shift, []); - $shift = new Shift(1, 'go', Carbon::create(2024, 5, 14, 16), Carbon::create(2024, 5, 14, 18), 0, false, false, false, false, []); + $shift = new Shift(1, 'go', Carbon::create(2024, 5, 14, 16), Carbon::create(2024, 5, 14, 18), 0, TaskKind::REGULAR->value, []); expect($soldier->isAvailableByShifts($shift))->toBeFalse(); }); it('should return true if the soldier is available by spaces', function () { - $shifts = [new Shift(2, '', '2025-01-05', '2025-01-06', 0, false, false, false, false, [])]; + $shifts = [new Shift(2, '', '2025-01-05', '2025-01-06', 0, TaskKind::REGULAR->value, [])]; $spaces = [new Range('2025-01-02', '2025-01-03')]; $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(5), new MaxData(3), new MaxData(3), new MaxData(3), [], [], $shifts, []); expect($soldier->isAvailableBySpaces($spaces))->toBeTrue(); @@ -62,24 +63,24 @@ it('should return false if the soldier is not available by spaces', function () { $spaces = [new Range('2025-01-04', '2025-01-07')]; - $shifts = [new Shift(2, 'run', '2025-01-05', '2025-01-06', 0, false, false, false, false, [])]; - $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(5), new MaxData(3), new MaxData(3), new MaxData(3), [], [], $shifts, []); + $shifts = [new Shift(2, 'run', '2025-01-05', '2025-01-06', 0, TaskKind::REGULAR->value, [])]; + $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(5), new MaxData(3), new MaxData(5), new MaxData(3), [], [], $shifts, []); expect($soldier->isAvailableBySpaces($spaces))->toBeFalse(); }); it('should return true if the soldier is available by concurrents shifts', function () { - $shift = ShiftModel::factory()->create(['start_date' => '2025-01-08', 'end_date' => '2025-01-09', 'task_id' => Task::factory()->create(['type' => 'sing', 'in_parallel' => true, 'concurrent_tasks' => ['run']])->id]); + $shift = ShiftModel::factory()->create(['start_date' => '2025-01-08', 'end_date' => '2025-01-09', 'task_id' => Task::factory()->create(['type' => 'sing', 'kind' => TaskKind::INPARALLEL->value, 'concurrent_tasks' => ['run']])->id]); $concurrentsShifts = [Helpers::buildShift($shift)]; - $shift = new Shift(2, 'run', '2025-01-08', '2025-01-09', 0, false, false, false, false, []); - $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(5), new MaxData(3), new MaxData(3), new MaxData(3), [], [], [], $concurrentsShifts); + $shift = new Shift(2, 'run', '2025-01-08', '2025-01-09', 0, TaskKind::REGULAR->value, []); + $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(5), new MaxData(3), new MaxData(5), new MaxData(3), [], [], [], $concurrentsShifts); expect($soldier->isAvailableByConcurrentsShifts($shift))->toBeTrue(); }); it('should return false if the soldier is not available by concurrents shifts', function () { - $shift = ShiftModel::factory()->create(['start_date' => '2025-01-08', 'end_date' => '2025-01-09', 'task_id' => Task::factory()->create(['type' => 'sing', 'in_parallel' => true, 'concurrent_tasks' => ['run']])->id]); + $shift = ShiftModel::factory()->create(['start_date' => '2025-01-08', 'end_date' => '2025-01-09', 'task_id' => Task::factory()->create(['type' => 'sing', 'kind' => TaskKind::INPARALLEL->value, 'concurrent_tasks' => ['run']])->id]); $concurrentsShifts = [Helpers::buildShift($shift)]; - $shift = new Shift(2, 'go', '2025-01-08', '2025-01-09', 0, false, false, false, false, []); - $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(5), new MaxData(3), new MaxData(3), new MaxData(3), [], [], [], $concurrentsShifts); + $shift = new Shift(2, 'go', '2025-01-08', '2025-01-09', 0, TaskKind::REGULAR->value, []); + $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(5), new MaxData(3), new MaxData(5), new MaxData(3), [], [], [], $concurrentsShifts); expect($soldier->isAvailableByConcurrentsShifts($shift))->toBeFalse(); }); @@ -100,7 +101,7 @@ it('should assign shift to soldier and update all details', function () { $soldier = new Soldier(1, new MaxData(2.75), new MaxData(12), new MaxData(0), new MaxData(3), new MaxData(3), new MaxData(3), ['Run'], []); - $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 21), 2.75, true, false, false, false, []); + $shift = new Shift(1, 'Run', Carbon::create(2024, 5, 14, 17), Carbon::create(2024, 5, 14, 18), 2.75, TaskKind::NIGHT->value, []); $soldier->assign($shift, []); expect($soldier->shifts->count())->toBe(1); expect($soldier->pointsMaxData->used)->toBe(2.75); From 2153f43308baaa695a9f66e0c86d32cbaa97a45e Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Mon, 17 Mar 2025 13:28:20 +0200 Subject: [PATCH 105/259] deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- .../2024_05_30_100244_create_task_table.php | 4 +-- ...7_132522_add_kind_field_to_tasks_table.php | 31 +++++++++++++++++++ 3 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 database/migrations/2025_03_17_132522_add_kind_field_to_tasks_table.php diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 8a30dcc..5e73d7c 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshifts_4 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshifts_5 flavor: | latest=false tags: | diff --git a/database/migrations/2024_05_30_100244_create_task_table.php b/database/migrations/2024_05_30_100244_create_task_table.php index 396eba9..318c3c9 100644 --- a/database/migrations/2024_05_30_100244_create_task_table.php +++ b/database/migrations/2024_05_30_100244_create_task_table.php @@ -20,7 +20,7 @@ public function up(): void $table->boolean('is_weekend')->nullable(); $table->boolean('is_night')->nullable(); $table->boolean('in_parallel')->nullable(); - $table->string('kind'); + // $table->string('kind'); $table->json('concurrent_tasks')->nullable(); $table->string('department_name')->nullable(); $table->json('recurring'); @@ -33,7 +33,7 @@ public function down(): void { Schema::table('tasks', function (Blueprint $table) { $table->dropIfExists(); - $table->dropSoftDeletes(); + // $table->dropSoftDeletes(); }); } diff --git a/database/migrations/2025_03_17_132522_add_kind_field_to_tasks_table.php b/database/migrations/2025_03_17_132522_add_kind_field_to_tasks_table.php new file mode 100644 index 0000000..cd43632 --- /dev/null +++ b/database/migrations/2025_03_17_132522_add_kind_field_to_tasks_table.php @@ -0,0 +1,31 @@ +string('kind')->nullable()->default('Regular'); // Set your desired dummy value here + + }); + DB::table(table: 'tasks')->whereNull('kind')->update(['kind' => 'Regular']); + + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('tasks', function (Blueprint $table) { + $table->dropColumn('kind'); + }); + } +}; From 6be5d1d579d3753961b2c48a0176cbb387a9ade6 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Mon, 17 Mar 2025 14:22:20 +0200 Subject: [PATCH 106/259] deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- ...2016_change_column_name_in_tasks_table.php | 36 +++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 database/migrations/2025_03_17_142016_change_column_name_in_tasks_table.php diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 5e73d7c..f9c4362 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshifts_5 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshifts_6 flavor: | latest=false tags: | diff --git a/database/migrations/2025_03_17_142016_change_column_name_in_tasks_table.php b/database/migrations/2025_03_17_142016_change_column_name_in_tasks_table.php new file mode 100644 index 0000000..242c756 --- /dev/null +++ b/database/migrations/2025_03_17_142016_change_column_name_in_tasks_table.php @@ -0,0 +1,36 @@ +string('is_alert')->nullable()->change(); + $table->string('is_weekend')->nullable()->change(); + $table->string('is_night')->nullable()->change(); + $table->string('in_parallel')->nullable()->change(); + + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('tasks', function (Blueprint $table) { + $table->string('is_alert')->nullable(false)->change(); + $table->string('is_weekend')->nullable(false)->change(); + $table->string('is_night')->nullable(false)->change(); + $table->string('in_parallel')->nullable(false)->change(); + + }); + } +}; From 4ef956ce7d65b0eb019ce52be15daa3a81af1456 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 30 Mar 2025 16:19:53 +0300 Subject: [PATCH 107/259] deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- ...7_132522_add_kind_field_to_tasks_table.php | 2 +- database/seeders/DatabaseSeeder.php | 2 +- public/images/logo.png | Bin 76636 -> 88600 bytes public/images/logo1.png | Bin 0 -> 76636 bytes 5 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 public/images/logo1.png diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index f9c4362..6b09c55 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshifts_6 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshifts_7 flavor: | latest=false tags: | diff --git a/database/migrations/2025_03_17_132522_add_kind_field_to_tasks_table.php b/database/migrations/2025_03_17_132522_add_kind_field_to_tasks_table.php index cd43632..08e0dcc 100644 --- a/database/migrations/2025_03_17_132522_add_kind_field_to_tasks_table.php +++ b/database/migrations/2025_03_17_132522_add_kind_field_to_tasks_table.php @@ -12,7 +12,7 @@ public function up(): void { Schema::table('tasks', function (Blueprint $table) { - $table->string('kind')->nullable()->default('Regular'); // Set your desired dummy value here + $table->string('kind')->default('Regular'); // Set your desired dummy value here }); DB::table(table: 'tasks')->whereNull('kind')->update(['kind' => 'Regular']); diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index f9dd134..2b1633f 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -13,7 +13,7 @@ use Carbon\Carbon; use Carbon\CarbonPeriod; use Illuminate\Database\Seeder; - + class DatabaseSeeder extends Seeder { public function run(): void diff --git a/public/images/logo.png b/public/images/logo.png index d4218bfaf5b873ac28707890a017cc31dadcf754..6a5fdd878467647b0a878174a10690851faf1f52 100644 GIT binary patch literal 88600 zcmYg%RX|&9(=F~+T#5%M?!}6`6f5p-fkN@(uEpJ5gKKejcPmmT7Tg_9c)$PRTxDk` z+h*pOnYCu^aAielbQEF~C@3g&Ss4jcC@2_XC@5$`Bm~GFTsF#0D5$q0SqV`!cZ1^> zmj-}#_9k*`UIyom)7{YcMF4et3q@pWx#+ryb;D}bjFlT#&Hi|H{NAtE*xSs7m8>jI zX05U!jb@Zqw)#43D#}!H&Opxkw!a%WEz%lh77iBYFA~d6z7|X4)%u*icfhWvwl4C# zPZ0=#Jw|MVXb4wElo{2K&-bsXh)DRx|F?|^&D8t;J7hl@j8>5G|F*xt)gbl#cU<64 zB%==@|91|oZb}BW)Dm0++~358Jm)ag1u}B;PI{taR*Vx9?^7zw?20uoXdx%WdF)_o~~=mP&^!8=pFHaC%;r zb|rj&({lGZRbt8N<4fJi!-S0@jTOaF_X%i=;M9M1UPbKkXlu&+pHbo7jjBYECN{~_ zDD<|S)*`>HW$wX<>gTclUCC912|Redx-pw$f( zPGFX@(un$Mgi+6|pwf{0z5CsAu+Z;bMyAkY`CYQKZ}|JS!_Co{K*kfiDhD=h8HS*b z1p*hg5!{N_Sp#n`ssD81)ZY~fSyh|l{~ZnUel$B`Kuy(&okFJJ@5{Z>jXh`;{OdZn zS3|bv`vEMjLWW5$$L>S@L(H2@r_{>0J=*s;`6BWjzhtHqcRNzfmd=iLuSElujeQR~ zBjT|^QgN~Ot)fUGE)?+;Tugn7FBoS!DP4B6wrq3@QSVXwGxxtJF8)LuEb~vbQd85y zAY)C(hb3tWK@FPL_dC)h@mE7O9dV5Sj59ezY$MTT-?*Z*^j7HqOosdJu%Se;mVa8P z_NN&-8J_g<;dk^6Vus`a+gGtNxzMzM^ecF_UD%iR1lH+$3rYW7bL+orhLrjk{hbIO z8{@3DA9M@(Da+P=jZ>^NX^KUvkEaDg&eH)b4asHVAPxxPtsrz8wC)1ul~7 zbKgh)dD8@P^3N5Bt66w9}vWo0FuZD=t<+nI(=nY z_Iaw#ssNhQo55en#-NGW|69iLkfBF~zW(RE*$rR6S?D1jeZ26101A}YRdDjgXXOFYv|K7gI#Gn~pa zO8$LXkxq45ewq7{;+HS6jCg-?z9$e@*N`8xj&Z;b0m&Zy1HnDVGzA@~Ym7tKD+)5` z?H)MfHB(NNsh^Pb@(f(mc3ZWv@K$ZviuCZG$cAj>qp<(89~Ksm)AoQ7nWcy`-l(Ky znNDrMZmAYMpIl=^Bg_1a3mJ1jE-S9=#)4rVysd zKq=?HYaRWKfQ>bU&bJ@!zysJo#T?-Ok{m2lB-^+trdE@Lwh5p{O_oEyJgG9xWRhTt zR=0kjogj1a+k*mI!qnra*Me$Aa%GaofP@^Nj7u_AOeP3GJrMk=5=4cAQuLhy3CWfL z$V6*8YkFnte;zPk{^PjmcRM3=iTyw+j|E|Rm3S#)M4`lu-yO6XB~`X;!`pR2^V`T1 zf$(Dnwxk0a+Ru_?HmpP=z5**%@rd+Q_swC%DGc)083*Z2I>ktDOuIf`wD)`g9Uw`# zS4;bC_`zgFLi$UF%>>?6wpZD~sAj~ZW2G5mqWrB~hYib;+Fx@<&2kG#>RP~8Yomu} z<&Ba}c=bqb>*NpcD&p3q5e6l!gbl3$vi8HPXnR5Hw&DEDidbf#%It2v$hkJTZ+CRZ zuv*v2u8SCN+w%f%C-Zx~pefiLY7APf$QwS9YJ({-L#M?%!>^U;fEUvVD$-?pCsYV7n zyt8s2QB^#!2KukJ*0D_=c-`)I>-~jf z+r3(mL`f+;z1sD-b%{bA{qe{8;C3F((Kfl=d`?{!eg>~~1r<0+za-QX>ONZ$XHU=_ zuMTnbdDn%9rk@L1gThYeBg)JnG?o}`rO-)38x?*Q`y#1T7sv9VTdTmd>wrbw;Jlb2 zb}FI6_t(+pjkfEH&FnP;ejNgdtCD?p5}9}jVI*{VocyU%13?b1i?N+P#5abmTh>D@ z41pa}i0Q;3d3Br`nRhV-gvW@+jL%3TaPM+LL;V73Bf(h<9~R+Av5v!4iAls_h%!q8 zr*2?rf=OR;Pk~sb=MfSZl5@n`xZK}C-cF^BZ~v5~H_KRj*VL=~I-sLpY#uxd)tFZ{ zh1|BupZETRzcHwfhE#dm+uyu&(Bdv=MoC%ya8IH2klGaB;JpC7E@s!`%5LzyasOA{ z$snmS2Ed*7eL2iF>TBg>R|D}%rp$i*D+;!Gu+D%%MKUv>EDx#XJa>)Y)L1>J=ct6? zxF=6%sC!m|8%!-9Z}M4d+W=$=%x&EN^SUv!c^ksdN=50aRF64B8U9}Pt0$jtyL|3O z%eq9BgEaod`Ls^BY2q1`Mj^>kKmN&1>g(9CCnps;um7y%U{JD4c2J@CerH}EKC+Wv z$xw}O;K&ZNv9f;c`T?Ea8@XU4xqT8_B~8r;2xEc21dL9cqhUT7!@wEU3jt)Y1BOW; z>pNF@w5?ohA_%v@j6MC^N041m=WkSs_CfH*pnqD_zZe1oR6peowaTr;`%8LYF_V!iOa9{BideEVBSINgjIN(T{LORO6`#5&nPc_ zUIZ5;EGFd`igFQ&8^9+q9OlBcDHes!hl}|ZVZA>(d^%Ohl@lgz3j8S;wgaxA2`y?+ zKAKnJ8)D7@<`~c2R`J`q#}EU&?AQx(Iv&uiGoNTqw+iGahQD`=PbiQUicB^(R+(ZC zf2@YPz9-e#x~UhH3Y99v8ncI^`S|R{?3sHFF9x= z{x=D5-U3pJZM zLy5<#O<}5ywmIus z9^XB@PvL{9c(q}=ep~qKLi6L4DH`CT4alv?QJn16Ea#JfoH7QYA0RdNO2$uI&4^6i zv8Y|ZkfoI(NvX(ya{I8OT=C9k=+g@qkvn+Y?7dv!u za6hr{kPA!~UwkolgF-T`N63cfkL@&J@}rOU%5OBL$?xE04+LpB$G`PGFJ9KZ-Jiz1 zE)5LtIh{Y9#T)Xx48}qwm`hTl<|}+?V6p}fGnw$bMEeyTvvdiS+v_+D;fH!2-oUcH zwx!T!zr@gXP+mR!+r%n#{b6}?5YAZg_U}(`l08GB6y3%4dN^CeEU&`tP0CQrONpsC zq7RwFLo!i%8BZjnI-%`R20(0+P0WPgG-~|glpRhVVUx{e`9nZj`C|2;XH6{MNwj{< zdhLL9W3ZAs{z37P@|dsBE~x`^F_FYlOvyL9$Tg5Oev@YO-k79i{cwp$^tdhi8NK@G zXKj`A7PhlrQWHo~09oRc72?zLMn%u#D&}L%cbpc3u}p_{HLqN@G+v}LKpO@lABGat zRSMQBwwg|hCj*(T0bT8!5mu|vns2f&c)dXY*^yn3iGFH!xae1k_A2cZHB_Q79%nsw zUrmvp*W{U}@S?N5)!#Fmh9FG`w|r?KN?P~qCa4V%>^Im6ey8K zENc3t1Q3P!r-dJ*=WHV8h{%`uFRI$7NI28-ao61g=w3O1Uqi z?swCOPoB~ng43M0lOn)7?XIzAxo^0Jl^PW*UW*`Qz&cw5J+XEow@y049GCt#vv3KJ zXi{0u51#I6Gkq+yc&eH2k*0`ZKWdiH@ucQ1st#`+2tMZv6fAfw1T^5~>CAo)B&J3S zmrTwdd+DjVLVO(BI6M!va47sQtu}N+R{A`YkS0Qw&{@MWH5=D{EnlAf(%6k%4=F&AJ1kFb;fQ;(bZ+-!se#mFY};pDM;@Y+3ap+{wv)glQeBuz%Ztz?sS5c7JIg(oWEa0GOvsMrrLJhTcyAQ-(Eb*P?y@XVxt zOb!v>_1t^ZLQ`^bJlM)J;T^?tqj)#F1%uT?;1WJ9T1P3^IA>NJ)bYDgvJl&DewBDE zStKy{wU4b|dg|utj^#R${~ZL}S>Adzyl!^Q>FYFlPYDP9lFN3=TqtqldoO>@$_3LP zi@mY+13zDSe*ckx-S`e{7<&zhKN~a%M{D?d;g4K2ICXCDuNM3gd-Iyg{bMK{k3f9_ z%E1&!-&lN=Cej{@v1p@?6MuNEzuc?#0b!6?a#2~`e+fv`G<%9VsegsO7JY`Uub<{o zsm%DK2D?m(CK)hA%zLiO`>l>{`KNWh9)J0I;61Oen3uU%>t4m6LYzU)h@qkX-&6YnB!d2p_?XIKAl@?zZ4s z%$URzT<}=;`;7B(Y;iik+cw+b8e%FZ_s>SI#=|694yh-`$;Ikj%-YaH9{!AKqtRxx zD-2i>2Bh)r8OE}ORk6!+G7F&AOMjxk`h@J0U9v@%d8f71#5=|{J7W~DasFA%Wbtyy94=^){q44Esj*zhHHEZlW zV`g^8y{GTR#?;$>g|ZdSQ2?>fj)osnK{vrKvsu<-fmed+W8YKZ2Hp-ver8P@{1zIl z=g)Cp8;dUwMHq7IL<2^V|FSbQmY309c!=UQ)B!lSMW>U1>h%=o{K}cQl5%L3l};5+ zg{F<>g>_~j7VZTGIovkr+OQ>KfeX`q{ki`&O_O%b3oYpQBYV>C&G5GoO@`iS9Iik( zw8(6C`gvnzDvwJ%$?y*|bKD+VT^9wc{@H8DV#V|*At7+{F}W!IXBafy{L4}*Zl5bC zbEhU#7@Hg$EduV0YHJA5wW+bc#+ue>ABXtuqTc#D4JVD>YBAvakq4|@9SAxzNRetz z16v%Es*k2?|9#G}Y!q1L7^+h^aUJr>6uE=F{>8@YwnhRw+QX06~{>=HI}X2{4#BB66l)+o{^r&L}CYisb4@auibo49{4jDQB{hTgx&EUDox^m^xuLsp0oRNM3Hxo}-&k-vn z0O^U`-X-&{&H&X247z43k;>N>%sbgDww(M3hDIN7q?mG|7_hW;z*d3(y6N|XZA4o| z)k$oLdF=v8s+(@609xO?5g|VEZw|6f2uxEVF-$`OE&lZ8%0do+FVmwR3i);nQh2nDBwv4F#5SUS09qd!f3 zVJ^SxXdoL$pD~g-%fZD@BdWRkGYemEcTFKgEpn`7w@#N@`D`zb4Ct;hZGlQdr^lF1 zWxqx#)+QQbyVWp2SA>2Vyu02g-o^WJ>dV>Dc(2Nm<5I>>HGKze+GNHuVoRu{@9j_5 zB0nSccpJDdeIp7_Y&5>RT_iV*(BikF(ea+WfQr5Lfv+i-#C5*>{s*1eiEnoR9qRhe*~eM$zoqKi)(6~PJ# z5?s&5YJo=w`Jon|0mOeWquve>k;JtZ!vca{r(@eiOPGloS~CaCWLMFWgVs$Vc_*42 zx_5PLu7WMRU8nfH?iO|+ZPNI+ZozOiEWH880UZ(fTGiTQAh#*Mp|fRd7=7ZHhHO01 z^}J%=qgR;;o`iqf%8(x+ENZGsH6!7T9`wrsBAvB%iKNnymA~+)R92@^Ghu>9Wz(Y)E`eeg5Z|t!H<8fI7r8n9;=AGEh);51|H`QYBoa%=`cclPunX7h(A zS)!XT*rtZ77Y{zU*@)#l?fF14)cj#Tdkn2-qbv$pv{opaCFC`nmQ2t z<1zWTeKl#(H1Z}(2iCp+h?RhRtt4nAarOw!9JZ3VvGoh1xShA9H^!6>SAvyry~9HW zN$vVyy&|i?P@-#Zk#eMw+@k?PRbei9V1H}wN8;r>5D!M@z5SE8{{95Qw{mT_nR-w0U~R(&cRQ ztSJ=g?S_q9jYClF1r*3Wfa#gvyQ<3Vx{>2bLN1y`F4-NOUg?RYg*8zcN>XmlQv-8TX9{3@(_k4d=&VD*)OIm* zEo^M-e(Rv`CcN467OmwYS0Nd*>ErZn-R%pBtV^UX9r@kz>({ zjFI`DqNuB%k9cA_AG`R*n~=VYmy&$g+H54-Ak$sZ7yeDQPPQgLBrvuBp^_L{0ot== z_^i$Y=B1pi*XM4cFKZ5NzGUCSbfoXAI|BwPYP&CJ3}PYhkhsDWKal;eo5xZs%!#H4 z3~7qaIx}kQLhjH1xYO<5)E^K6Xp$%4+_uA`qZ}IS1(FX&^AtN(_t9I#MxccZH4-Ry zocLXH6M~H;YOuL0bRXMSa>stigw1f#$YG-y`_tskh|d3vgO%6l)M^TxwyxM|F>BhI zz(x6fP2>THU`jKY(FR?F6uW-o*YT3y^u9=Y+iK9-78be~+5Gvoy?aJc+xR%K6Z+=p z>w89@P8;l0FVEWP^7x0m`$skji8o@>+nq)MWgtHke1$utv$W%hvklz|TtI+>Mgqw- zTEIodDT0^_HYIBg!t;j%Xb?w5NsX*jOU%dCd$#mEBQ1%T1TbfLP+a2RkOqLLNYY3- zD&-3b4<;j3D9iwkxt0Ku=YMhwDA>m8>OpvN>Ykr99T;S|dxlq13RYA=IwCLrKGKZ| z5>cWcW-X?W#9+>UqKQP;dNbcS=+<3<5_rb^`ZH!wC3YPQ8`a?)u%Y5a|I zx2nWUD^0O#&O+pnF$;Im`gp}he5$q%fifA(7M4_VZL_>a6679kV$wc*k3hlw4c_P8 zEjX{7%y61bT!0EG-Bvk!+ZSZ9Ux>JK-k056g zZOFqq9Uq2eNJF#6TW;g%4KLY3m^g z0t{y6-weeIu5t_pK!S_tKapRubugn*{wv{I0P-m_-T0Mu0w$BKBO0XqTf?_)p0}6r z)y3DdF8Alnw^zog7hp}NUyT4y$N6Q9Fzp8K>G#@Bn%_tC2yXFCz_Eh=)e?pcO}7ly!{DE`Y@&AOBrwkoUR!)D zLL?H#g9aCcUob!f2F*hhPZ@2Z8Jqz;vX`#6-6`+Ig!_o_3G9942?mzO|ka!gm_R7apR!sMvZP1&{);%}(`#Y``=B;md6M3wz%S8Ic-t+|_9sTzo6BD0F{oNuX3 zR|o%bP5fIH^Q&Zy5tm!bncpT6+}B{8HoHYDs*I~Qa$(OSU!8Rn%#MfWIALE`+xzAg z#}zW!LLGvprXiL|R^jF*l9MHy!$&7m>aLfbv8k5~*Dg167gmlM(kK`4Dxt`cSZHW? zDonU!*&#eM1aD|s0zbbQsu`$W1zeh@!7KjM7Hggi93g3OFMn1NE&J2{81Q%hDW!ds zY%YHLn(vfxRZ{>qM)v{QqKEXwZgmzM=~N^hAH|(q+_88+H&3$YJ${ZiM3A+84B;03kaaaI~fI z!7{~dF?wce8grM+`7jvL)IJDIwZB%wu)JZzsjY{dMl;z}lWA}03x8>@_u|zYM-+jQ z!`7lNlFA|z-6B(^W1uib2pBKtltSe9n7V0l&OWP!-}6`ecL@3d)Vh4z~!Rw{tip zuag78MV5I^O{r1VsS8N89hUlW$(L~GT=VnVZ z&gEe!g^XsQka{bv+DQTidXHS0Hj-p4UoN~RbtU&{AoC;`omgJDBYbS}QXC)#Yd%7N z?>S_$riJJNz=PT2&ev2e{-jN*91|lEWhQDe^qsB5=m4wochRtDy!_32;NJ;_vVWhF zz!usc)ZaLe8{t%~WRUYmb2W(=g84PogUZq|n9tiD$)ImwCqlnVh0wZ36#opd_?esw zm#VVwwBn}geY%jlR{!CgmuJm;1CQ`=vB2)2J2x}E1W`kSmoIHJ`EtXI1xF;HA1WWt z#K_;2KhYmpCD z`W@%eM=>EU_nT|-E~ktBP2I?osJL8>zg)({m>u0|{0dD6^{`JHe5;Fm^8av5*FbZd zl(GX+u<>r)6RNo2d+uOTkgtdwAjS;2PID(>l2PJUOtR(tqrj=+LSjvPLB* zBD=@3AjEKK&=*zOiW%o}BqYl;&=!84Nh-6~GtdzXkx1(rMb*oyK72^;uGOh3U*NDx z>i%iFc+L||{-|Q8YsHW>=4l*KGGH{W%0=JnK!;Wka7OH0;o`p!r(z-M%pIcBf*lG+ z7pBw<>y@rh4h7WMVa$sLBSHR}eE|0%9DLwE0v~6_kSMeNa$!5DS*msdm?#zEGKAwl z8}!h|;>t{BSamM0Fc?a9=5Io)myALXC!73`1@e<{9+^K6#1Rch?T*3B+PrzSqtKa$ zH9%~@WMcFB1xCx0QD|(=#dA@Ghr5OA5}jYfzbCZ-;*Xij7pu9dFo9-b zvHp@SJR#gsLTxL=0cQ4VLP+s}e~j4&1V4KcR+xWp-8)*pk=n`H%_l7gRpn|qV-%9l|dH)$UukZ`_jJZ?evBJq56?@NCk3J3;9J=o#YAU`)#gt6FiGIleBY>g-Top=iqMAA% zvnL9&)-|QGCM#m2k0S@0qU)Io%9h|8$8Wl0saqA(b=0v|J*0elf9fbP18}lq_NzNP zGk)DY9ygs33}rt|J$Zy|1_JBw)<|00zuXKSFM{h2Rg3X%L#GgYL6FG_H6~iKYN=hf z+k{Bn;i<^}Zs+3URYy-1YSwELy-dT#e~>ALH0Oiyv~=#|sI#Nv?F~*!l@Czx;|cKY zA$gP6W2;138bQcUJNnLa_+$(QzaSxj)BZWMdE?2xM1vpyS3wpQo7}a4&z$|J z{vf6WZV~n7V{90}EO^>xrF`8?ZgqUnxvxBwUsX(W2t>jiq0p@$-(e6cfkMAJv1b-J zR%t3l{g+$#H5=OZH;@w0O<*UGexS3wN|vL&&ilIwhfK!IX~RQ*9+fyenI=sm zSaVJls`T}Xm1ux06s6dQUouppBe_5`p7eO181Jzohafvz@zv6~{YokCLF2}L<9i6D z4T6v>raUCyqW(=%V95}X5|>ql466$7&{Clp7-!5jP>e*NC4Fn|D-2c0+k!FHsL&Yy zftC0WP@++NG{(IVJGmzqr`F1y{k8eLy_b97BQ+xo^(8iJIB8FL2^r>kqC-sYPgS_q z5L}vCCi+?~b>I(e6Q3CR;-x?<+(TkRc7k%O{c;lmiMSaV>{WjNE^=0Me(s&&mlRgN z$zQZHB_oMq%0Xgzk%h5|3UdcYGR1t(O}~c@H_lh}bzKu^Y&dmIh1x7(#pFa1J!=ZZ z{I+j~7w^j;BCEFF&bvoNjw9bv02mmG-xNMWgiR!O4{id^Iw4GEtqExoto(E^+t%K% z#R0%dNh%2}i4B|se(TFdUp+v}y~&q9omtCAcWZ*W(g?IZ$T@;7{CAhZ17-FV!ArF6 z+Mi1|?HXUE{pZPJD8Vlq?!itX@xR;%nQJ?5PwPV;Z#x8+7o7%;YlCM5pO+Q3-vu#1 zFR38W+{uBHtlDO!oVUQD%B;B0U2Zow)QG;0xn2A7`=+*nHX^x;ZzptJkG}10f5CU% z9g*%s(LT5JJC(AZJ+UD~l5B~M+ zgJ{D(-Uq`Q4Sxvd3v)7`K8(-+SfrER6+uJeC>HB3^~Jqb%CuY3k)4H=IQ7Wzlm6DSmbF>q%T})j!lSzvjtXPZK$cO?BOl!freF{EHB{acL#kdM5rW>5dWdW2`Y9Is7YrNW3vE-TfvWNF6n3Qf42uN}=jN zao5QJEBnxE1NGGo?rXu7#E=;3flxXnR|S4JcEfZ-VIEh2R5cwVns@}RYOK-4>~yZv zJk(kFO`!@=qfpeH8_X(EJC8GtHE?2#Gn`YrOZCT|Q^z-W=R_AqHc~cQ<#LM29wA%iE5nKaWKyy4hVan_v|G z8noGATI~Cqc0T$;BqO`XeU4i|eA%KvlD}G;$Af#X!4s7iCo*;QgG*647@VI6@S(CW zuwnB3XEb=Dt8BEZOtw;0QL&9kh0f|WPyQg}9oD4p_@tO3E(kp5TG;q#cSj&6Fd7xp z*(50AHp;_wC>1&~hubdZ(5L9_>a0-7VtrQ>x8jrRtE~$$#zU9P_iUb#Xx{x^I7~{W z3LgzJpt~0207sSO&Y{k1?!zi>)@>eYkEKLZjWNzuD^;?#`(ccS)#=@7XZ=+%9CNLn z$+eO@+)&{E3?(Ly)lU+^Mml6On$)_D?3{V+68+qNY%TEBF~q%0r>QEG=T51>l+~7* zJhC`G3njRrh1d~h9(YAz2)#6A6eLUp-i#ta`qGGo8#oa~Zb%QI#yeDrqp&W6_HJD; zyM!SN*T7Q#2mtrfE)hayr%IE9LxrF79ufHazJ05&&Ph-IDK1~%n1T`g_BcG<9U3bn z!+eee1Fb_6p1mg>#wIH+AIJ5F3@m}lp<|jR0T?b;X?A$L%2?}}tLhiK-LlQl8 zb@!q%Ff;wa?jRGTFgQYZ@q}~F$hj6+jlyax}c>^A!9zRsn+tBRZE;9}`E0hXo*{S5vr zsl`|<>_Q787pj5$xlOo_dAAQdScryr=pX!qlt|g_g2I$7zfgTp zCjdW+@tw)wbG};fuRvs{9(4nmm?yaqeIe734Wo?0ESIdD5QzF?U0ZJhAXV-`K>+r{ zSq8LLHKLF>$eg>q8wcO*z)>E!DPYm&_Ce5V8dVoGG&Q0Bcsf3~eHE_Pnk9l5;-o40 zq>0RLxPY?o#XgCok=?e-m2#`2_0k9G2AYIIHVH`M$)9u8^AD9Uo{Qv{wbj0b=(~QV zP(_jut;bG!XT5~h(r`0kur;)epCu4h06gEEzDq{b{gV`?sP`PdpLH#ow)NXXdrBVB z#(vF-zwd$tL@qUwq$gES1(nq{^gXh>(<96@g#QI)l_zQ9!N}sDmi^L$2Eak2l<20F z3JIE(p}JW4G5*zl>nj|6T#=#WJLO$T3c5%k`}<5R&L$N#-N1S4K)^03A$1We+ms7ngoDc zL!U{^ZHULDpDABa+=?FU!dL8w?0h5u3;p@UoH8JIHE33Z5XD(R#nQ3jUI%gGHrQj+ zwBb?V>()&MLu0631~8)|Cvb&-B@-1s8zMY79mf$ zLd_OGfqsD;%qP6cd8rsV*5zl0rd|0@M{XbbXcii zm-*U26n@8IYj*}qUO}qXq*kd-VadJ35+z%#<%clqOZUKN}X*Lc}U<$EVE0;MOX zm^<8EUH|UZ*E_LR2AlQ;+f4MxbCh5la*4}gh6IaR`Dh>gDUfS4;0*aTvjGA*vF2oTU7plCX>RHv+ka$2bvW`ZZ$^pUCt?{s{t~92T5#Dc77T|pCf#P z@mNquxiw*Ng~~9)M9t5vnU8zFCgJVZx>;fL3xwI%1W~8qux&8Y0W;qAiXJD~E+pd^ zX3OPBqSo+8a*PKea2t`5$E)WI?bz{B*DD`M#Is;aAbQm7UjY_(G29(r6f9EYyhYhQxbaFoiZzWk>eA{rBbg z^Wd#JAjy_F*))>ZA;MJG$AJ3JikdTF+#n_t1c08+FO3u$B-L__$PGuK1$F6auSOWzR`ZS#e0H5o zd5chAIm-qKiM;O>$tXUuxO~L3fs}s-!D!Yh;+Hde3~U{r-)4g!#vnRiEk4B>0JDF= zTNV<#`Vtph6vM`}aD46&bf~Af;nXl9jv)0}(^CMaM`b6}#SThRyy;KNlj)I_$juy` zw4W^uD3AWicP)LePd?nM?B}%uW{Q3e1}oaa?#35jo{~ii!*TU7A>K~Mi8J)Xq>4}c zld;susufqqrf-rpJe=dbL;27t+&*SZV#ZuSkWuvhE;w_~uCf|fH!cp5I+*@lV2ZDeTxU!&|izdy1>hm zjwr(fe-_Q;3LPM7Os$k{>%k>EBj#sc-tb&CZVHY=>g$BOr?wXt^hv$En7rfdV)N}` z#L4%|?27B|+vSV>%eR_Au4Z925ia`Dxzh6hA;SP7B}txtRSNr8WXl*n%F~8odi2=@ zyyt5iM-%JZe4D3h_9O}GXAv+kgN-3f0YbHmfYHchAtQR#uRfJ zUAJ(U<%a0FaTVm@3*uSh$#X?2*OPJUZ%)|=vt@4AR-k+2iWn}!Z9p&iI~_RZE2TXgs3*!AgI8Jp>6w# z)~H}H#43|)+aB^&p;4i_c*}L_H6?*ua0&?=wG@!=10zQd*IqWvQ`dhQ`y4*JogcZq zu}jQ`Mvo0!JHejhmHFQ;f)2b`(cGH!F+Bc|7`X`W@jVTO%O`9qm|u0~RW*&tguS@` z2EC}(N94eW$1t{einCqw);IY$7<<|~(_x=6s{u7?m_+n$mEMjc+dp2rfA&~~sbBX` zhED}dLttC3`GPIiALT7U^nT8frnH-20+#B@&eo>p9~9~Gjg%?@*X%Zisn+hoB1`aM zB;B!iVLuEgrgx!_3JdeB0Kqauc0k+?oEO9Z)abI#a(iMSbzFI1kla^y8W}Pn;J`epBJWDW?I`>~>qHDJXJvj_WV#q||3FEnRoYjrsG)2Oh&q+^+wrm5j@Io? zTp#f2hA&ylcy9zfJ^3r-lc#NGRP0(a?qvg$9}VNyWx+tR7hR7Mr6#TT+?TMdy>eEl zzuLE|GaEOwDiXI_4CAmsPh*Hht8>fy%HcneyZCs8-Knqu=iB8q zc#v`!^#QS3=&b}(JgBEa`ut^-V9XUs*x$!Z>|71<{!q`j)bI(CwS8_yx?$QTuKyp8s zK;bgO&)L9UDXJqwqETD?l5=KPCn&bh1V%=C0` zJ9D5VVVQVBe)J(1YQ7vBmkLjv9_7Egsu1Y)&LbXzgov_PdhYaOqQr-w{yLqR3eJ9mwYPC!;+y;1%Qe)^ug4WWQ6^lt zQ-+ZdoA=0K5&5#}5H#Lr0o;6jn_l$Y+63MdYdPAV>@JKby|y{q-uzTW$HSy#t2$Zo zGyW7sAxB)W((=#x7JqZ46R~*#og^Ms7!JbRJj3FdLeZN+MJ; zRm?=k44zfiN2?P-)DH)gm%?5#$`@-~z3b2#?6S#+4*ZLxvQnN#SxXp)Ie#+vPY5iZ z@--wI)n#t*yh}1bAC^k8ZRS6~5$hnAHBq!YYU1n?ZY)Db;NgT_f;%~UB=-$X)o&1c(IO|}Y|(+)}dpyJo$4s{@NGLYn8 zC|$SvxLDdBfM>zA4-;A5I>}XiHO6i==Fm;z-}@Wa54zLR9yBTb^tZG;q-Zu#_o>T% z#>NGEE=`nv3^|8v0hv4cCYd8aVt8HPbgT zeWO!oNRR+XQ$IH02v^QM1B?}$2U-Lcx$iGJvuE7Is}{AR`se2!%FEPnqQGc^ax<}| zN1>=FDahbO_swTgeG{Z1c*ak`xGtHL_M(`~iV1??CSF%>mMNXkE|>D5CI0o@%kM`6 z>2xG(LgmBUX@W)poHOe zo%1pD)0JS~S(Njw?<@(pbsC};4}ki1Hg&{3r3u$S{c$Zqs1NcI=^u^#=sw#RuFJ;H zsQQTW(4BMu(b1Ysmq_RJS*;~p!*indB)}`$?sU6-NAS66=nlKg6^m}uIS_2I<2?jaRFcV1PNff^*ewU0{L~-B_pvL#>L=8HF zrqF8>!x$q$LmNV#fA4S(ZMW_ZrrS1uzTW4Enw$-ma6`S-Yta&DiNe@={5(0g;a$b- zF_LauWA%D!F?}oJ!A+gOm7AQ9X}Fv1y{zB2z&A|aTwc}O`&qxr$>WJ7nas8IZAU~5 zRNZL)y}f$>xO3x_Qy+R0<{wZERd84BA^it+E2oF!<1;1;>r^`#ME)D+muobrC$9Vl zzH~(eG0GtCWoF$GhcTTWh!GMN2XnRjajowJmYkey`A(y)+PhBm!*37-KC>`ad^B8J zC#7HHfHq*^Gt+Q!^h0t1emq)bEX(@|Y1L7FXJz=5xRHA0#io|}Ne&fq7TM9t z_gBm%X?KE|2R`S-*fV!&RPPEH8P@1{lU*zO_miWU&cSC0ILxf^pEr%{8I1P3Vc0Qc zKDGU#f-841pw>TITlkkQV`hwvG|-Q5+i}hMMeym>v_ZM1`lNzv=b=?`%tk#Aww_%S zs-?n}uqpDO;r?BYoEnOJvz@W|qSL8bI}4z1YIN7E!nA$N^)Fd*r(J@nr;Pfj$w7q1 zcm7s-5s+>C37V?6pu`iw#Z1Rxm5GI`4!}89o_d!A?D`xr`L7&9g_i1 z^{GZ4e)qn4tQ>1k9xURC3pW>BSZ;VHQv6Q@SF`xp zD4?cw93;*#Rqx+If79{i{m3HVewuojJ#mtcVn9uU|EVt1zH+LEm{vDjWQ6^8J~&&k>HsbV8$b;`CABAfA%3t?=7 zLH;zo&s2)Wdq!*IPiW-5X)O2*uek64<%WCufYUdeZ5a28dWmG1K)FG>Cq?G;I1gum zUK)*VK3dSCWa68)T!Xd=C<`JM#p_-}Efq|I?3umNv4DNljOE-!FWd~@G}?kDf5hq3 zIPhjC3JQ8y&3+nvj^o4(y&yYhb(Ta|2rf}NcUeb)?n7;-sWrR~yj_QZ&$KE~=cHhv z4zy32GeYMb*@5M1UXuM&-*?ewx&(;Ok$QBq;HO4NNGX2vmb= zm96&Wt|*kW@BZRtS^S!~`$uBc!`%C>DJaucBPYmD8K!I%rNo=s-EQM=6Ch@hf>!oL7#MiB^dlAB-(b4ouOX=*@aM%uwrB)63SUKilqtE-#~)RO9y!t;2ZM^!d1M z4zmo0`5tgaum1koFvu2ol{nRFe^`l@tgq6>mNoSFTFi9CQd@q$bj&*-f$+tBb3TVu z#HQw@5rTsnt#5!X+lT4r;r4vi0*qR;(Cv>?5To&62k_~658&+DI|vLHpkEn5eLLd3 z4_}~Osmmr3)+b!(=l-hKcM<+XtHccl5E(VRvolrN-SFCNSjQ7Ucz;rc`jw@Lv5@P znIie(wcXWw(V`!s7ll`}MAS#$ui5;ncm*ljuVyT1@m@_#r+v|1UE*qNuWS6GHwbGg zR_IKx@!8=)*yODp>fw_ueqH)%`^gfnXLgp2{Fj2$L8J9&U zVw^H6d{|*|arm0)ipc=!n$?nJe+SIa`rtbqp$W zhZ2Pvv*>*_$L3B}B|pI?6*SNPuUf~|?LB$Q9!@@HDGc=xCVII--IS*Q1UyPl<~ zmqm^d>VY|$)&4yg`F+MqB&Q?--<;37$HNxA#>t>uhvUfNmO)P#KJvRUGnVrHu_>7R z7{4|n*!3YZa8l?<74fe56Q_TiYxY*6Kk}4%_iN)KS7uJ%%wH`&MMd!*BG6q&j(&Bq z-H6B3DD_VM?FH{TVPOR#fE^u=%}TyI`+m zE1_aWdLrO&Zf@LiP7RahSa%94zc*VS(oiL?_t-B3v zU99Aj#f0xZLqg@vm=3(MP~4yZao3+{2_-#(`A z=`I4|^|dIpJ?F)Xjh+{UPT!;T*qB(f4g{7q&E%4x%jdUk_tR*a%$Mf+`Ul-cUDupG zL1t=2sM2?ryr2w;u!k?c$AiDe1)Br5F}xwu=)b+;n`4SE?O#m+efZBbKwf>XJrOl4 zvq{yj|{7DWqqv?SL<}w^an~qImrw&_e8z&}7z3bPUTMv_u;-{Cw zA{wXW?cEnm$(Qtu$B%#KWE1Q1-rJcNiG9!mvCm;NZw1pq4#sYm165`5d+7IY0ZI+} zg#-40L^GrrL^T-~lpphs42MWXZebd|bYYy>UU~7(`5FnLr3?@c7C>^6d|yhL677~G zqn7CTat5`hyN>%kfL&h|F?4u-B}Yr4dbf7rL?MTPQE7d&SnV&xICj6|1YEitXe>CB z@Kp^~O645EOTaPgVYNib#@Ej48Zy23Bom=qD}$R~ELYZ0N~<^6WHX?|PpPwsN=X=S-$ruWmXZjK;a`7fPK_pf* zj~*29iBalw`P{A%HTceVW$?m))@ zNOov%xvqdY&FXsUz?KXit*|96mQIjLLMm~PC6#iMYdmG(;`Sg3wp8CN{K2P2g zrQCKjwoexUks17bv2b=rUx3@`{Bhr^5+#8?Xg-ibEm3qT|KU?q0`>X@<1H*NQ^@j* z*x7LDnHo$hdOdSFqM6{gyQ7oqh}E1m5`y{H;hdY!DL|}_fW@W)OI3uT<@Y(!2Al2k zW&;<;n+=(dqy81&C+Fl+d}U=<2+oh?Lvq;GK1Ur3TFvE=xf3z9c6jb@Nolo#>dzIN zmTcM`Xq>}ODfeTR;m3VV~C%y`66fCA_vyh3XJ=DwNP)hLrFuDRF+yk zhL%#bX=**Ur@)EqIA7kmSc8T$JJd17QEV?-gK< zAtpowodxowO+XtX@rdpHPVYZK1Qk_qjqK#FZO;=N*mOZt96%J;1{fH3Il}2Akp)_6 zUAKiaQc#IwRMcSMa1oEZ8h}*q<~ZCbr8!Ny{_yzY8KApAV&%(tI;XKZQa9jM^<)8hh9ggP& z2v+K<^t94_84PIMC&U!7uMF~(y2L?n5p&z0xYzXgmNWiZ1hIFT2cLpUozNOS#;(eo zJp-~ZfMgT&VDOUSN6lz+a@5vZeer#vcpOA>@QTQjxpNZ+?_7P*_vkXbg3RnsAw^)` zEwqQ+HC3|-*d3YckwCJInvOp+v;4N3cA0!$j{sGHPP}H7aQs!n7=oh!AQOn*{S&t4 z@w^w1O%d=QB@ty$KyP6MHBv#=O)85a_Fgz(U#rrRGi?*VNgS|o_X&h~<&_n+8uRc&5*gSJ7Rg z!{2kCWjIj4VPN_GFME{tSDMHl-Bh-mHJtUC^UE4IbppvrmZ1STYG4~fcTDdU0nn!( z`{|0D8l~((6NWJlx(rUPZ5I8OwI_QFG3;eiUu-Xf87VMbdUoFHvn(vrfu+u2g{%&f zdN;Hy9AO)Ra#>R=9Xv0widg$y#D}wncC_kSU^F0|DMu#|s=Pkl(W%8FE52nPqi+|7 zQ-@AW1GPi)SnQFX5UXDQbXS$q1o_v4WgUO52T&#|cw8pc(#6Y!)Q0@*VmyP#=$#KB zeLH1L(_fy8UR49aFIb5(5V{xHW>-8`jT(x%KV+C?AqsNoF=aUx)IL8g|C6!L?mP=C zve?m&re>|cxYu6^|BWvb*AO>eb2Bmz@iO@0x+ftKiXh;uIf~@MyVKbH48#3oBQDcx z%=Qu3l;SwT!Y}&{DmBl~Omc7o`a$^IM)bzp%!~P-ypVIw&^{b!;z8E?p9p$&lbXAb z2>d@W&)b4Jx7>IX{R_8tt0AWAI(%1lwqkS$PZ5TP^DpE+&0B z3nL6q?jne|5vu=;|! zz^3MekBdRSr%b~vQd3so<5+L9p17*GTd<_nxc*QwcSZ+G?OJ|hOU%XVcfYi|!|3Pr zv4Jyz34bMyu~usupM2vsdqS$S%Ylg@=Mr($WIBh3R@hM{(vJT z2JW^AF`h^oEC^~*9z#)=%2*&A=+S!<5td2d8ewn?WR1a7NfnY4!{*-vlswG6K)y)j zJ9><_EcB{(T+W+YobY-A*-!O24>UO3grk^J4MM z;&?D5q|9DlGyP!)uqpLKDmFz1impX;LeXK5{3?%Nm*LB>Tl*gBWf{0V;ZdQ5`bV~I z-Xe}_2#k3B;@QA62Kga_m&DU&HK)nY^nH2~--(30o=qpH8XrgOZ-cg+2Car{0!3X{ zl=U2qn+n9WI#P)Eb83io%E2FiX&1SxOs<6Gj3b2tP&A%Dg}J@GDyMLa`lV;mN4DEr zl>5p5enx{*)X|LrrRvSo--^Bq(EifGbJ@@|uK)Brw0)h2o7E(E2cs6u4mU4p@z_5X zLwrYv_yzN#nM1(7pl8_+avjH=T;`9#N?8N_qL2O%Kn4H^^z|}*uBVs#PXRG0U-n== zucS7bbPjSdFWd>kAPTLur5q#O-dEvlrzPDb`8q0B5$igNL)gw$x>-7G@t{>bh7=e2 zqU^bYtCWeJVDpmkcgZ4%JsUMGjhg8d>UWVXiu62SG%RDw$BIxYd)R4$e>rN_YEGTX zjzzWm?@*-{M;kxj8NWTCXL2H$-4B@5N|QTGOF@B2trfGD_Bw`mp%j38%`0Ky=jq7E z6P&S$61j9LB+hIOeInsK}t;Cvs)Vi^xJ{a<&4B zoD!t^kvXd599k&qZf{0n)SSTtDV#gsPIUoG_Kcq)#!?D(i&Ws>)DyQg;qSdg#Ncu? z$(-JS_hvuafS_vti-L^aR>BYd?t+{zx}5dQLd5 zLr5EEcf9xFF@0yg_mTkNEJlVdhaKuh0{;;eVT*sScGrseSx_?`gLO}!ff3Vj>SMV+ z1BiLg<-IZ{2&w(4}7&qTc1P{|_5PVi{h&GtyIVyb`~ic~-q*syc;FkSS5>O^~!6(^s>G+a#W_K#KGBEj4X?5Xu=QL?SXa$+H=_7*nQAP`!N4ZE5e!v#+dXy zE|+^}?5o5$$Ootp+`7{1&fmkKdK=KNH{65{NgKv;p%j5hQ^Lg!&{Fo{${d^A3sL$j&h5c=d!+9LEDEHOfdw~)Ovz6>eIfH{r+Ux z7GI?ic5pojJ5U|NGfs&~gKHTY4XMXNVtI(^%@@4#%9tQ*`XEQE>hoFW6PHX;`HG) zIT4{$7bO;CUiXnIWIgAV9bQ(6O`VejQqY`5C^yW3P?(iPSfYz@8RW+=a$X{u-rp)b zmDUwJf7)uofsK&ba?;ONueTxx&$%m2ZcD4_6lk*xBH{qZjVWs_>Et{8>fjs%vLc#r zLZt-JghCb6zKSUuO4a^j|AmA&mtHG2DmfmJKi&J0d*AnT1r8@5rY5etpe&+yv#g5t z80+i?pB8(*8VopC`RgXG-a&$R-%u-?gGCgm{`m`l@h|=Fb_XAmqg@*V^gU)q1}RZD zG`xDpEtB5!O$nWoeR&w=^Jk%INYt;_$e~}u-(8yYy!Y2T4FtOEw>amNKNw{(#x)y} zHB1hu?7p0B9fgpZN-tn26E&eZd-6N172`2q#e!*8zdG8G0v;h-un(|cAST605~r|?rvEx3E@EC@_WZ9b?Dq9&{%jqIzB^0b_1{Jhz^LqW za($U>O1MYOe;_x!*<3*a{&?j*HR}5l!^atuphrJnQ_Fw&pw8K^hz`g``iAgea27(@ zXECcE!X@Sm>U4O{0Iym(UAv=lJbCy=yTOjll3<~@KsTS}y)w=QY!tDWQaza@p?p!c zG52%Q&cGVW`bYQ;fjGlJ2htfHrUR#f?+WB>M=RmXxT+*$M7=IJ(jM&RO@I-@gZM=5 z?&tr1`A~qNYEP;?kR)dNZI7ulp^2{9+baCx5o2b(hkm;9(&9@a$o3?2IShya_^x-Z z9{%*Sf(fRxU~&qE{yJDJCGF4;x(WK15HTy@0z}yeo6_SafX0@Y-fWV&V+FzSwAGMp0bZzFGoU)D_P5RS?iLZ1}v7 zx&W})RuJu@rSrv^@|-%Y$wU2JvA_{@YQr2cW}gI#+(dw}ca7hNw=>TT{PK6d|7fp8 zy+5MHI{ukl;h7o3?;be!Io5YEp_RNo%27(~7c-C1>d`z8wU?8^N8!v2^1|O>o)XWS&>% z#KxeJJl%J$#@~`rO^lLgc2C-{5~;{XQ87wWB>u(o=?CaObaBwc z9GUXN-9E#$+Th7g3F;Q@y;d$NlJC@~VOC)RX)HN&+wx?*$`Hh&%QZH$R)P>=Xwqj@ z57a0N6my3RM});;`HRNCFrwSM^(fU}<#C@t+Q}uZaL<>S0m=O~HCt~cOVs!s;G}C! zb6I%B2e7iDFd1lT2_!QltuQac@S{4Lk~cX$-=D|3#h_mM%^zGZ*XRA_Yx#vD|090y z&1>xL3n&mZ@^r9kDZZZ0BA}Kq4;9Z?Ec#R=hItP7U5*UqWD^6+H58<3wfg5|5y!aq zN8N(sv>)F4nH%4MvioYJBq>Tm^TlVYW)AJZ&DyY9vm%*>P+iP`kVq^!&NAV|CzLW5 z@WDuie=AOQ+eW{EgLIN$b)9FuuFh_fvywa*YNhYmV1%IYn4yuVVob|ySGz}?B)vPDPw%qP z8*Vd$O*co4o8W>8VMShM>m**DLL%bVnt#UdpFLY~-ExLiAn7o~Rzjs|-AyqLVPe zeBqbE>FKG!b#HL`_s7q$ztr4%`CRfZ(z>S)mWNSz>BhIL%|8BqXN_3Rt3e5tva$@% z+r45!ce%ibB?8iYYgf(={lO*eF6`Bxv+{u6y(PpMB zxyEzos{h9_Gc@NE8xypi06>!!4r@^iDpx?(*Nho)J>#(v|G24LGKYo{cRhWzY+cqC zFQkvfJrn7V2Ow{sbCQQN&`Iyga>g3lveZI79BDL$XGaHb_Lg`4vDWD3qO6eo;K9Cl z|J+U3?NflvGSR*71V0v+H|Q1n0sSQ<+F1+x3(@Hb*T978iXDs9PxVCc;YrDLwos`a zkF4pze2NG>DJ;E6=tQ}bEW(FMQxtCd7Tre71kvvE8J5Mu4=Qj3^lnfIh6gN)DxYg? za(yUU`I8xN`Tifi569VHqxC&h)3o|BSk$Hmu^OU@=yXc9057H*m4Bqn#H`n}Q#FSM8yIUWh8Dehn%J<{<<2LksP59`y z5w*GSvTy-T_B3R_P0@0SMZ8CoZiBNnr5`Fe&o)MS29@+NfiuS-X zL2|hJr-jDWCYJaS{)ZEkw|YWz7P1gO=f8IjnZOxVJ6zOvul{q{dZIWSIADju8O7)P zZ(nvDP(oaO1T=3owb%qoG-w4kWyLC%-?$pHK%~Ct45zMePbh{imPa8Ti-R~$ol#MV zYwh)H_u@R+=wwQHp?Qk9V|wrY!J3OrBCDZsb(BE?Gv7d1G&!G^X?;(59hY>uZ*BcF z>6(RozgdLxgyz_!$>W0sR4_!vu#(DU6?Mwhn<7QErC075{kil@-Bod}uBpi^=oM6) z)j+2>rdshhm`JQ*@daLlML6I9k%7%1yI185POdfG=(olo!+{Qyn#j2oiwSXgdFQ56 zxWoqCQ#V5&+*?l%^Q|wPiuAozKBiEc|WJE3fyXU9t= zX=t4P4>HX%0MXc7F_sCy-*P@ez7;UdyVO)Q9P(kwqX2i@j{`M2WfRZq;M3~N^;0OJ z_=k;Q`DRL(LauI?B4Afp?AXhSg48g_O6oWYHbkW$~&JIUP zR!1$zt#V^3N{1&FiAXvlWlHg(iN8) z{|$VJ?g1So`D@ba+|od+xY+3H370FO6=}K|8x|Aoie&ILJTGG+ENzeHfBk>z(wOTN zkBt`s!lS?qFEQ`iKRGta&=E(MOguV@9^%Y+nx?4RfudUC@p8K*j_swc##-($};FlK&QpNCx>cTibP@2uhH#Kf0?^Ew^oeN#t*PC)&OdyQew7bGCWn!x+54QnA1E?<3{DWcjoao-> zcXr*jVyXIN46)8Gx(Bu>V>mKYOUsKpFUOYc8Tg_zE%!n&eR0ev7gxY^f;YkxzdR@g z_dz43ATkI9N{RiB`g70noT-G@FiRUy4t!;8W-dW->1YKwjqf~XRku*0nN*onWVUmnp<6M}pf zoZ;S`vG_OB<_VRuK?w}sq$0D)MWY|KT_|C@TFwsueLR$OVW$nHtbVL3l;JN3K|R~H$X($@jB!46Yp_VQ)5lS zVCnU#>!oA2>zpYT4RluqESy3L(zNULQUX*>C#a)xb@2S~XqgV#W7=Z=S3+gl}#D+pP(>X2YcJb^OtJ#4j9CQD%h~byx!=XPub7Wg= z10F)DAbE}U+ImlKE3;?GOuuR&0&>HnC!pvIZ8uQzMmV>TaR{Szv$n4oOA`ZI2zLYf zTdhHt1k>SDTN{ggE<2&&I5e84Ibq22~249{g zUs-0^-FwYkY&fHQL;MjFj}pk5sgxiFD3hL))3yoaw5rxOm#k4tSy|~m4Cy1m=^3X4 zLRbsl05${9DJy*%@h@sE?(ecshBb01Zxe6F6U|^DoaZdX;blRI!~6gfnT!ed@$HZ# z3zA@rAS1~Su38JLL|OVve5qr*Po+jMcv`c;x>*g+&nrc3fee?#!|F4c%nA(5s6e!b zCC{uD4K6X6<%#=;+8jPMZF!AvI>!KqZVZJo6Na<_AgY=N(H8t!csR(3L#&fZ_@&+Z zt8*{Q-tK|;Ag(n0KoV=ix$qb;GO}tUtH)4%*7B?S%@38shn$p4sqxqAG9))@M|0Ey zFI34SeStyxmXum`xq%sF*d^3&Q{mxu|CXo zxr)Sm)Y6F$O4VQDs>hacMoth%0a0D0ngz?NJJ@L z6pN6c;;W6=T0o|I?&X`qcCYPQwQ?D!@%9Rg10UkfUx@6C@pRFBI#~}zw=zCh=?7R# z)x>MLk$mD?+yey;AMqRYw`r%cUqvFy?f!25tc@gtzqYlFmn}+E^OKvOQ$H>p?(o*% z#rWY%x`DcaToE8Ufau?c+Q|c#iXLWDw_>yRIz7zqH07NN0(rA!8qS4RU=L4b$qn-2 zu;eEBgc3e;m2%FlG9hXuFB3{3Lg@QTldH$?gL7Pv2O#W0F?80`#kbMdEyn#UE%mO> zjvmjFpHpr*W>@(!?D~L-!_g^$$L+NU({sitiO;ct&+Yu->w(vJ`*~HT&(+N9c+HDX z7pl8XGFLi75Mz6i7^-aoE%Z~bLo)K4ju{sKL3UrTK}gbrC9gc?HC7{kdlqVNzBh}a z0vO{O$Om5GmY=YH>aB296U1ESR7#D`Ab^sVtX4AiPWh*ZkVmvpL(5xXcCrE*#eE(} zz2*jBt4EScadisg&ZW}5MzE3Ul*qnvU^zn=M;mV8v=UHrY1|=YQJY+M?c*~kf~`>r z*YK4#>>0Jx@*2vf`S#sP*F4vxRyIy-UUY{PveKrk%1nBtv8-b~Ok~IpvjP zn}O5UDA5>QA8;NQoG*Jkp3A2x2S*BsVS!MGi@8Bx(96kbgn{q2bj4hrmpHi@jvqCr zDlol4IETj3#lr1wlTO9JV0D2g)Wr=2l~j0LJshx%UvUFmCYF6bN?wvC3vW`Wq}Z|# zDgQKrm?roL;9F3d;g<_8fNZMNqA0JEoYo+QOJJ=i|G{~2^624@ufwFmHoz{EAEhuL z)W@hNJ25PVYYX`QVeF!-mBDI8>%xhFRBL_4ZneGh3iX_HLs`0sygJM)B`GaGXEGiVUeovG7k5 zrW0DC%WHFq=&yvn6rh-m7XXm1D#i+8ncd5*s>xWipEs8Ufn}Psi`IPO0rd~%1(i_c zo0_%@#hj+!d7d)g)VWLF#xsB5M*IqhnJweD4bZyt@pO5H+%JUSPu=&r81D~5#r$z1 z%6P0|tRe}y5 zN>uzDeZO5~@Sb<{q<0^tnNQxBpAX<&6R)owTRw31R8!^Cp^r^{KZy>_D42yaH>^+oV+!d`+XIoMj1PLfuu@_|d$>ER*I)Dl+e)TF2y zKTN_j_;X0|{!D`iFo$fSi8uf!GojQYqDoyP{Qg@zDf!pum{EunHJPh=RSR{;J!-hk zm|gqdXa(>Z4QhcikPe0dW)g7Z6gL2xVWQUg`e1UgrVbcrSs;gak-UdO`EAFyz|z*( z@FhLeusZsELLAk?@2{+SIo-l;%*+(vE%+&e8fEI0?JeaE8qaCYi@IFAJO20WZZPLLf`Syy*$rti0?zVo2HW*bheJRBE4^ZSy%*xEfT0M8)9YW2N} zNUL{!1Exa4#SD2b<)?UpSky$^(ie!6YkSdVdBBtfyWD2MFUe(B@I*^<3u_~8G$8$9 za$9@1PJ}Q7k=YIu5y3R5c1%>=gc>qy5EscxhO?~uU-;T`AQMCHJ7BNjWo~n~5??tM z6W-IqOOpbZdncr0ag@75{P{U4fJeLOT4_H(4iJ)0O8!XdD=zkgk2lQp9-X zIr!~^yqH&`Nn4*&#_)Kz;zob}kiD*6riY82$^HTmM;4@GsnhCUuQWlWRS4vm-CjLB z$xI!hF#Y~~&KOykqcn4;#aL!rwL+BM@Ih9gpE&tig!soyeJ0BjVCwxjv=KWmG_fV*moncemCubv5%F#^Yr+4#GI~yd^0}2v z{hD5ZqX&-0(J;wuMI(ky$Fu6Us_&1B(+e7bJ`n%!b%^x_m@&FM?tl>@U=a7gYvs7Q zTEUhp5&?@v$VYKQZO{V}u2k=uEkWTEYYX!oeTEq;4t6jcPxH9df)B9X*9il-WX?+! zN*62_dI`7$E~e~GpR$oofH*Y(23rFx$A0(DUYv&<&*WKej6Uz(KFjc0hiTk!+}Mk` zh4v0<+H>LVFUW{_xg|2Q5gkUDVS|QrKdEjW!gr_x;~42?P2a}eNPZc{Z;D8W<>GY zSJ*Lxdcm{%M2~d;;PuXMZJrk}A=4Fu%tf-gy}S2y0&afM5>kI!j(z+d2cA%2z&EH= z`#T^f4g)qr!c z$6% zA9G;fFdLieJe`fKw~IrkndhS51##c+B^gPsnz-3UyP#*z&#_-Y)dvA19iddX3jql) z2?|Z7Y3rbC$9=6%eIjEmRRaCy5=3k zL_KZx0(>T!Rvv@7P`;CBjw&y?;o94u(%u{XS3#rFTMtr0%0U@ z;BNUVSYAffJzv%T1y&||Q}xBqodH7<0J67sYL6mkc4@X7a=*Q6_}9Bpu|3c7fvj7( zr5ztyJ`{UM9Z|T%F3v1Eeg+TP?iTMrbyn!8OaD}{ zYik?7cA;J|C~`CLzylS!`D?=KbO<>BETZN8#qDgU=Iy`1Z7NkCCETI&1D1UTvRmPj zjbK%dq3Co))iUm+e#pjQc`rc1J7&(XxTE=X6cnx@LpmH^cj|A|sI5ihAq5XS;X59VFxmIFMsI?&o7 z!r?40zQBtYKHkSJ0{MPVL1*?a@?scp$DXEM-k!GS_s%VQFesr`a3Vfza>_1MqYa%^ zUU$EN;5N4hVZB`j1xZUNOKU_tGaoe3F`T12 zC=58)Z9pWJ>(yDTkpF%|Yj5IYfG{tS%frtZ(+DTjyj3PEUSE=WkSoP*nA|F40Dh!cGF zUV5xFXRfRx-PJ|V7_N*Jajh5Jdnt^B#c;?ENY=VS@sy*LO|`nc;rqb)(vUZSmXn0{ zHn8}oxd{t>_>#VN%oFvZK3sQ5gz$#n!5H^e2kW9A_=gJ@7^8ihtl%9|)zO2Wfb4M{ zt2>o;@w0_wU1?~B`j&$Rpe^u;`L~R1-Y9OfVX$gNI=J}qrFU;5REg>@YJ?Wi? zpU$aP>`cojhA7(gw*+x&58>JH^?p%hRg*$u=+G)4hk+akt$}1=)z9?=SSY&Aq6hW~ zIHxjGV)g2Fj|?kUSOvror(^RdCQyh*O<=)DT)lba8b8ukV)M*}QjHi!q&fe|(3Tgv zij&mhgFTm`N!Y>(_9W_$Gk3APgU_L@6cWCn!onpRM8?{Kb7t~3nxBVTYw77!c+e4< zLao>!G5`hAptN%*4A%Gd$u*1}l23-T_UYxmm-zIf6wAmMMhKHI89bcXIXjdkI6xK7 z;zqhz@^+xHhkSrlGHN_A@!q2;VC=N%RIKUn+xY9&{R!TCbL{!@dYdj|rhuMlFcQ@9UU4ykvTd5d>m7 z=zgG#U7y{!^JUr~utsXDHx%c9z-S}CMC7ET6e3CIuQ4Q11yfx%GZg#}*mo@A+N6aI!9`K{{x;KNV zN=nC%muo3B`0sins1ois{AEP$x|*qy z8|ycBenZ+IC*dmG1hCMN_Xh7f3Z!zQOsF;GjPbU=38rccK<+WE>4_4o;+JmPKFHt%HMMV%Kzhw56d&(8+A ztr<63g8R79G^Y3T94&c;Qg=_*`y$S@m?5ZeT-@|^8s%D9zsTj|mP^&4%g;}ISa#og=_=}nn-Eo5 z*E)XLPx-~A$-EeRw?xhrBhUti@xMJ4XKB9EtS;lD`df#>#)PWUL=^6W`>Wgb4!=#E z(F-+Mo8-4`=FWXxvL#M|s2=2g^Ki3wpd>z|n=368AL2!r5#l&N(~6o%2u6bakze9+ zzf|@1RSDl7n%BKaIt)(|9_>h~KcH$!a(LU=-0`PVY+cr&Fa_rM(r2O#&W-K_4c=LM z#rq=icvRE{leej7dvyR7+X?HIfm!lbJO5Mz^&oDj_yL`ttGIy6l?5{EwevPEf1Cc( zYWw0jG|^AyQ>du+r4T=8Ln=O#A5!d#4#MfQx0EMS zY70KeygpGJD0ucUIlT&N9pC6Kf2;AQd~qy<)utdKf~R*b@A21fhh+e6<2XZm>KLwo zTuA~gj-FR>BF)SJ2Os+7=7($sX^*+M*9$sGsvs zmMZP0U+*5EW|rqeHK<; zMva+Cequbef`Bxqr%+MN%0#@-u_fmj&KiV-a28F|EF-Il%9x9p$Pl5M`!yzRg$2#* z?=u_HzJEPKL23S}LoA~P5z`1sm9;9C{DiH!7Io9-hPI{Ul(GaZ5-nfHz~_I`k@vjW zCGgpO9p6MR=%e@hTb}S0bC&%t}X(P0o7Y4{_#1 zEaIUmG9y<{^OK}fGOg|;I3Ag>Asjy=?<-F1=M{_Y^AGzGOY^8Cq-2)XIl7MK$lRp# zEyk-Ebok5njuSK9rzO*+czezb<&DtyDCDU$cRN2y&2-oj_W(pKhY%JQyJey5IZ2sM z(;WWK+f>{0bVXJ$vWJ4)KW=AKhCDO2{QPP0Hux`|zDIk0LdGZFlttit#YGaGSesLw zWqtm@U8V82uf z8tX1PE&NP+0;jokE^P5po-*LuiSHwOPs7&XOoVpJ8Jci>D{Ul&q5G+MH#2xz1q+z% z?d!=~aE&@Xe68OvT!X2PMKv;ZH69u}w#;qQtVmUq5sb9G;s?WCWlG<##DFAe;mtDI zR{&|>}4M_R~uXn9Ppr@YOgvZHvY4M!(bV`+iG!IpjS%I@6WU>=lvO7F^FuZiQz7sq+3tri=?Xo=A=^q1^R&UFir5g-&t}-+AAO3? zBLadHD(+6sfNb)2hlUG4#JVe1{EI2$ineGV02l)uAR|@t4Au I83BXxErsXc^=v zI|d@w9W-A#$SfVjF;(xZa|uyK>B_CQC>K~kVFD(d^~ToOSX9}k)~0((4>F{GE_4xvNzgUm)k0 zuMqu!${Cb|np7&-DOoY*o;=|gWjSTLm_g=PkU*Kn+mB zoOkpyS9Cq?JiLwvrQLmA)t%i;c`=13=qJ0Da17gqR$d%F&9rIgffb3-9?t?|pIUL6my^M5$Y?baG`Z#N+= z(zPqNH|Db8g8b^t2uE~!k`vQNQH=c?r_IOWdiAmlbM8K>&>1_nsAU|C{NP%2w|(A3YZRb?Ym&HCjyMseCK$oH^!*ShS|tFE^Ik9pLJe{GfmJV6 zmb8lEnCCbn%GJD7MToY=N)+qS;gw$7e&&vXC5etYfJy}G)(3I?;qU_#wo zM^~*etaai)od(>gGB?2u);8Yv@x#M0F3x_w_xYj99-ZSq(ur|K?m>;xHtFPbb$W77 z40J|860m(gY>0w)auMr#Ws@!(>AndARc3~wbOhsz^9-i;9t_Iag(b)__KU?ykupn4CKm*Sq1xXeF9CJ-oLUQ$U}K07q1H#6Gh?QcDy9$@I|!e=p<0seZ*8TWY96t42IprqvkHOra09+x97uQAOpBH$@fwWNc>* z^@Hb~`Ke!u|DdBkX5#md`57O9YNVAQB}$(e@t{7`PN)c@9|TR=Zzl7gF)^fhe%S9C zMel>L7-i!yD_H;tvL!{w_t>PfW6nwn;n#%uGvFfYN9X9lS$+)m zagz71`%G^up;E#<#@O(DD=1eIl5i9nbQN=<8i6!Y3^13&6ySO!9zLYtYP1Neu>UG; z{UI)6vGUvxzOg5+)TFUcQI76kJd`{0k`<#5G_T^ocaDGs#?o7hKMnk1zS2gou0{!9-Tb-o?J^s&qVKP$e{H%Q+PanmCTI?kmVX7@z)S>CVp^&I zA>nt<73jHeE^NJBVBXZi0(Q^y?ZKK5*f$5xmu<3-SzxQ}KmU$Pc#o_FX$a&M@i_KI zpM+;zZLF*Wl4fQMQwaE#OK}|G{AP(mj06)n@+oo>M>E$2!oE8BrlG@4hg)7QTn-|F zH-5M3G{3nf;4UG#3lA|u8do$B(M31{y`QBw27!rP0vh=q+?~z&6&*n+gCt}BD47xx z61fw0)TiJ3l?iW}aVFiIgid$v1m61D7$aGvi9)oeuQWFb?RmORv zj;n`CGmcDf0d=`WV;lCA$2CGI@0JY>aYA{KaFyQ8T~pK_YzTkK4CnqAf`be-!i78s znCR^|JLk9Ljm?t|Di#Z& z@^ZX64to-jVvp75je3y_E{E?-&Q}OG+NzdvQNf(qGR;Z9>cxIo{mKLC_=G%k9I=KFA=hH?l(4Mrlw!L;(gBRLsfzT7yrjtI zox~I-=Fu{x`IZ8`qIXQ}V~V(7*vusQOF_uHpHm^_gVKU}UU z9Wi^+n0qpR#UdsKAv=(C3^=_6i@4?JY4ZCRzneU-*sF3*pv0}E4O$Xw5+#|79F*HK zZVtbsl*^PPG%nI%33+kL$l5^v9Juag4)|ai_6-xd;n~b!{sr`?fBx{;Y2Vq?eqP%; zM=9kvK$`UM0h1F+EUP@G>vQ2{Rc53dX1(n~m8_UZx4TM`rNLg;@BUb6sC(oZUo)fP zK0HSl7SC5}KCYlBv6(|NM?9OCNEvA2SY3C$`nmI>`~EJub836Zd)>s-GG&$H;b`Sh zTJ`*Uz${kd++4Ltg{=>UHgZ~4v|lBjLPdb%0esM`POmwrC$)04amq@j73kP0RRm`6;-me%#r4yAZ^^G0D*qGn#kBROKVvKT>v zqiR%XaOi}*7H(U4N0XFoZZ%Ty65|ePG^@Ee*o{CfYA2i!VVI|3l4qa6LSd0q;hbff?=%i9SpCl{Xw-+}HjbWmm+X(njW?(Y!h*NNkrTw&? z6Xv?P2Ma{?i$=~i@76afbabM510s#6i~srDQ~HD{J~VphgT;gKAbomVpE+6XjEQ}| zZwLPxMUe#ik7Z3hS?k|?5-1*y;H`^QDd~z9sRrwwPcDX982S^zt!Xw*;fkOTb}fDa zdy=xkHDvBAdhKO8{<268uwcLRW)dIK!?EZ-dheb=JUUOBBFfmw9ingAStoZqx4JvKJ#J8x|2 z0u7_`TxrRz$S~4H}|#~3`C2{lyCtiPyZ03k$Y=) z$Cqwl;yleHjmNAtO@-X*39haNBB|}C0l8iuKP@-Zvov&-SN=C41>Mbx<3ONF{AX+C zW4?dm!M;2omw@yU|I?GfQDna#CCuI=F?+JL1wL58y#2X{_qk^f0Arm7w^ zy775gLS5kBL@W1ez$#YJ4Y?~^d}l-Kva1A$)ME!rUuYv9k!ywY27{47ijzgK09E~) zNtF*JMJIvk-=TT|h(NQoS0_1sT7dfSIcj_2|~pA8HcY3^_- z`&RgV>s5titqd+^==_Cf2pk0U;G5TS5wb~r25f_xrSX}#UnY{z?9OzcP`TkqZm_Tl zUDI?J0~c2A#S59!Ua&L`9YpEj&^R!ga9GDc`YC=4{J==uf8{@Rbx#pqut}FtVVaK^ zfseZoZ()9R)MOy@))mOYC6xtYH*hj|!K7v~PrMf!0VSqPhNY|fZ3x_~6`%%FQ2tlS z*VMwDPV}11X_d~>*Yih+(@=Wd<{fKz?qospXNZ%}Kl&C<9W#P4m`Q%d1+ImXO5!xX zfBY6j5$EW3*o?YHWN@e<&|lRN>?T@UYe|Yguz<4`l8K8NGuv|K^=DJmblN(y8^f)f z{;OfRSxil-5GSut!A6cLNsP(8@6f2T$GIQBtx|Q7EFKT#eCXWDslaQRoM-jrQwMQP zs*VW3XWxyT%O8PV%7$hyck=vqWWRIn*cJ@@>YvwLoVdqTbpOA^D&d?>&8y9P-yDoowcRV;aFw)8LS z3dt@~`2N9O5q@_2B@^}{BQ3^2@hG4VMPO~v9ZC;eKhG=|%rOW}OhTxKx1{ajF>==B8Q!aV?+%f%cJ-hC+&ah3UVF{l4Ht14 zj1?WX(XH$~=yF{3wzPP-Tbf+_=;}Hgy)6%gi{qZfzNEoR=$v%yPZh)VdrcswpUzUX z(FN9tA&T%}S;&W07!ph-ea|N0a(JT0yI(uG9 zv*rM$V18k-(kviA-2OeB7Jd(%1LC!AP<%D150r`IcLn4_iw~6NRKJs>PZ5f7D%d38 zgQXRKqA#8G{Ld=drCt=Gdl1^Jh4rV&Zlnd2$k^h_wxa#8;>Hblo(KreL725Xf6I_8 z`*{Z5N-)V?a70R#RL_n>*5W+PpzF_22*9=tdlod~!CRvR{17 zG6OSJeH)$$zWVy-_Mzo)*tY-S?BGnt2AJ!Z=$yZY#nqu)G~J9@w1j2D2|DykFD4zu z`{vOdTZskJ$L?oE$=BQDa6kO3OCP)f`9LMF$l^~{T6lq8do!VnSm2V7^J{A zJaqWGpm%`DgFTP|31Y|$Lv`JK@0pG^U0U^QU>aze1lui)IKh6GJmW~p~`)NW} z=61gB;8ofW&nzN5up%*R!)XS+u3PfYSo;6}4>06#&VEzhsFp3BL7^C~NLJ1Ij`ccI zG<5Ifm~dqzj7WuV`ySp5&iFgLKfNh7euuzocKbUAoPN)210-c!C~SjM!zX50o0hfH zl9Gxz0)wI2@vGj;ys!VP;$G3W$q|i<5xI=Hj^^;oF{XsOSfn)Yy>Ii+wc~GDu{Tmz zRjAlzq2lUvAgv#xMncW13tOm{gWZ95vMy{541B(IS>&uW**?*Oy;mXoOT; z3q5~rO#p!ZnJ3SPxTZk&G@Z5xPFq%=-cxI3hcIus_iHD{=%QRFT3= z3$3H5pc}j4-#B0+*6IO{h3nVw4fHjA@L^0WX$h&LX5}stYpQ~-#P6#kf=_jctC(n% z73n|H#x!W6ELuEzCrs0SQ`bge7Jku$?l;P{?L)T;si8piNG95DBT|h`JAtpuSen-2E}X(2wfg(E5gD~0Y%Rb>Ek|R1Ma6u03iSQ z=Gq2)DSDZ7!L8h-PHy3lae&&JnJ{vT`^g%nlf;vwd8^&&WpgKoko#)_C?);@`(AXe zOW~rmz|+*}^|E}>l_G^*JWY13{rbz_4yw3%#Y)y0#5{_*$ts!i2$W7qWWCZ_uEC7X z1TSI#)$8!a6f{hs_dF(&zhtjVcgLJ!h2h0@C|`5QtdsTuj0Ei*-rq%gr|~7``uDnZhJ_If07x4F)=VAr^7M1Z>$Zr(a#F)M7>ric z$QAdhv(@AzZ0dSeoq6Fxa5)GtX)3Lhfv zM6ObRQek2S*Xbjt(hJ!_WT?~!{*5i?^U)=-pR6bM5{?S;+3zRQpPE=?bJOEAO61Eb zbs8wOw?n53+HEL<-AcvPwArXN3t4tBOA5=76_%Iz0+#-9!h>TK=du~bC!`0-`L1-o zpY~KWrCIj!&ev*vT>WWNr=dUx8mUI=?ASBxvb53#>(V3K&W5|g%@TJx6fXZJeK`Aw zAf9J4ocjmB(qCiPQ)DO~cv*weky*FeX&C7p`~QIw3D$LE7lr%~oiABIG_6+@lM zR%ZR*mlF2HKp%=?aDmcsq##r5-hlq$pmF}lh)L&y-w>QcB3_=(e>l_ z$>MX$WJ{$%)mzE}h#~m(XgL#|ga}*~UR5?bj-YZ#a$^ZBzgYv^V*$6P!|kdc_dG>KI{IlC>#Hb;OgiGg0bxR`VX_^v>4;3KETI`` z=dwG%=WB5B<4#yn*}rz2kSxcxq9%vv#HM3y`zM#k_(?37b)4zMxl0k4ff7a?Lv(!8 zblPDOIHfbR+2^p$IGl(#S=^Xq#nsGjeoy;@>6Ut(JgjZ%Mo3DMTcJ5ph7&}FN3_>7 z+w-?I`65rFlg@i5d>j~-9N*YE#Pi2~RcLh{6iIkI! zchZ{Eu)YR#2QhpE9tP?x_bqjd zG%%g&_0nASsNoClxH39C2I2wCbZyuBU_?xDwL{XCKa$4OP+=RK<;O}9Ayag1DlE_T zC>l~GEG|ufDOM-Y3%8i&zIy_R#wP*g8`=_&}WB^{9=v+@D)@5p}Bws<9ya4O5 zDN=hkZR4VWA>W#suE4PeFVVW=zs$~$r>2lNe1wf`*va=XAMP1u(8a>*ymz!Z_?nlt zhK_ze0iFmi2mYhMb;Lqr`7J8!biy{Bsph1+^X*U<^mraCau`1`&CZDe&oN6+PmsH* z(a*`jyvoyoVw10_ah_O)JY#ee=$UfZ{8R^Bi%%{OL|xqF8LAQJQE=(b!tiB#Xm%Z)+W;qm%!N;=Y;R#m%$d2k?#sGDGs7ucNgz2 zoELxTDO9@SQK(pQRe`M_gQvnMa?;>x z#3~tJw2C6T&F3a<>m){n^|ivqBZGDs#n-y!-YmB{HH;8zj&} zvMgpXTk0hcway!lD(5FTW~({V+2d|9MZuyaKRyKBoq8?6DSM+GD)b@8%XgkGh+=%RJ41$GIc`YggmECXf9LSOr<#8*|o#Mn-#I z(1(_49RCPPof(9N%7??X&gi+}9*;p$-`$!AO_J9FdvI~y(kycV^Pj`o4Q;PcJEszV zP`lq%zuuBoBM_ie($pCK$kQQBfyJBXjv1Z4fuVJxk!~af+>r-K*A-UCmgvwEp!3vW zU7NBQFr#on+}Ngi z{VQ9|AV8t{ryYaNH%q|tk?;3g7QSaU8!sC`t%ZegiJnKcQlW88YkOV#ZbNGt??!s% zK^ngs*_l z1^&G3N%6F5Ntx9rD+-c%I=7DrmH2?N%bJ*~^2$_-FndQ0_;bKguHBP_) zyI2Cb(=te*ZQw85u%Lqs!}XY`V(v)#lcv10Hk%el4HJlojZpQ(hn&896J?A+GJ48$ z@OLlf(ROzBDub234hrgg5Rsnwi1AORKYBYx&NL*H<1)BpFT17RoB2~U4!no^D;9u*Z57S}p2#9&#px2TMPvD64WU`=5fCpu{OSPD=1zPmi<0x&l<`qV<$>Zs$` z73VF4nQb?P?e_(r3St?So zt)2P*@b#?Q{}W5nmtWaBD>8P6J-)a@b`#cnPut06&Rfqy@~y1vzjdH01-;$r^e~Dq zE**8f(|TXE|!bPE`o6@Q3fF_FL$!i!&Wu+UGE=z_kiz*-85oP zj>avQh$p+lA34yvv}q0*)-U49jTnNRjO?ibVbvV-Aa3f@zSP0nz2lMKQUUK>B?g~0 z1_F;CfGv#;H)Mra70Jrp3c+x`y}Uo$W64D_FSNny+j0;WfyJX+58?POZUsclAZ_cr zJOzekG1$l6BAMpe4ily~%!qr=ybIFmB4#@v*3h8hol*H#F`pQiz-TU$XvTHHboOuv zx;xl7zvfOmB_yGh(i0GM+G7&A*{>T-HPFvkaSjVM)%x6UZsD7Zpy=vvX5U6r<_c~Z> zsor`c3MO?A8QmrVw>3qKN5|+Jo=c^s(n4(WkN;ZEj?E$B|J+CK3g5A-wkJpuKkchn zvg7<^-xosJ8!ZawmKD*4s9;Ntid&lb`twCE`y?p2y227U`(-G8I^S z-@^ChY*`BOw^Q~pJF5pf{z!ruV@RdBK>>^CbEhNfwJEVKNTql;uxW5{bGUWVNEXN$ zbg-}W8TRN+uV;5V7i101Cmx#)w>*mNBURxsC+-N;zx|cxV8$4$LK9}BFu+1FY~OM$ zDma4&7Gk|a1!qza7;Iftk=E{HchfRMDD=@j8a?j&FWLT)Tlq2z;HW?5H$jpaSAPwb zGiafbT#l@+&?#Fs6j(7>ap@^)_Fg@{tLCAQddgD`I=nbqrT@F2J8OaGvB3WEfX{D? zAJ8*+!reN1D_FZmXi_bx#-)#4nMOg@nqzqcZ-nQ=5MR4rtZ-edNk$^~Wx;PO-ii}* zY-M`iNj-g&@1I_IWG{mmlvMZNGr<+^TPUQq^*4?e%5-792iS4#*MUe4xUerbC(E*@ zhFLGgY`uI;KlRO{KIBOHm{?dhLAN^#As7R%75VSCK!pWFWe&tTvk#GzXtWaU$OxHW z5={?#yqk!}X7(+>?ZKR3w!q>y<9}Jzh_QxV`*)8*p!+3At(NruGI4OAv0TBYg2|?c zWXhEbd!wy{)rF$~8T`Mp!PYqHTBMO8>bHT~rk!TY9%Lq;uCTneo6|7k&uf3NPgr=1 zq+9X`%8Pr+xrF%Rkr+|y|2i0c&_B!|M=MT3pvjtmQXcAGZ~5OKgt7 zPh#nQh7g8|N60kA5c8yBYolfDeX7X6AoB?Qn=3aTn=qvjLj^7SfK5Zz+ADZ_#SbU# zomTbOqzXLwyEk~M*smx{p3klfpflt2qwY?Y?jN^(KH8Ei+6d-yhj2b??+)oCO^+Y( z+bJ;`K2ROiwhDz8RbU%fuoWmQ!xp@eflISkxjkG5Yk|-Z(KvC|xDb_vX`x5!VaoCn zXr!AtQGPfl0w}L%OMm-Gnv6mEtK>tupu7lJFe7QA{JMK@=zE6mKWHyEk~8hJMpe)s zYI6Bgt@hbbn7#HM(C8>tUuh+lo*4cEcH8hqrrL>?+F6z@j6;(e{RwJe)>Wxt&Khf7 zvHHDNam-|RgGhn}Rl+f~vZi#>35Te*_U*COV+-KW+vpMoZGM1+KyWV}(0&SVbbk?XN+@s*f|A2_Th7ib)_ z{)$3K-H?4}ZLdpza!Iik^fm?m6t$_zzTn|jV_kE8HQCyAfYBEaQGgV#GVNJGcO~s1 zvu3BG1~7qyVQ<0PCjSmQo3(S*pK26aN9I~nxB%LgR6)@YG*oqa+#N2A0KWc<{LynX z%KEzdwB^|8{&@7P+)!UiZP@PP#77#(3ISVzygd1fzt0Ism#lh%OtG4+PN8@sLpct9 zzCebEgsGGm)Jk;5OE*x0AeAn$i}-aIoMh8Ge zAnS-q5OSa%CylAgv)CvGyW4}^_wLM3V1)bcx0&bf0Of?Os$lbr)!#xme2b1Jj3>j- zuTQ|w!@S|nDg(X?>XyUSY4}F4MFMc>koQgBafk>p!NPI^V)=Z^d!7r#vM#ywV#2F? zcSewQ>E!xB3TsYm9B{mkPImE+k%|4}FfNCXuMxWLkR7|ei4EJi?!av9)D^d!XPv0q z2x8pyOD)=~x~*YEZboHi>Ndl`qJ&u)a$F$KosIL!Bf_eiO=J_g3tS%da^+Tcd7s<) z>%Nw!>Hg*NMh~N8&rNKry z7~~@YG5al9FY^Ll$|JQbgA-3(*}&443_|e`^WbK{v%cWnRy^JVCI)SAt$!cU_dewO z0DhFLZDU`V#SLivuKJ2e-ndy;pI#qfG@6NHrVf0ps<)L3R8J%{i|_P%dzmq))lj$_ zU&@<1-tKhS59gAi%9b^&UrJK-gnZ09OY58NetuhTXMz^^VlGyp3+IHS2H1IY4BC_j zr`DdSjBUoXAV-7p;_F;z5_5kxuzijI)_$sUDf2YOLJx$c@+&YR;iM}Mprx%Nyy`$p z<3OB-Xa0H!@Gb>rTi9?hwEI~;sy83OezLmc^m5op(@JY0{CHB^ia1u= zh9m*CSjad2>ie{Fw9|eILdGQa7X9DIZtOeUfYR@*zUmlY&5Y1eKL6!^0p}6=s}GH< zR7vgY1EMj6eQgjg?{I}Z`U(<8q z1Y*p|lM{V2GQtc6-7l~KPyG$wPe5r2V7v*_Yy5nOJ0b{~cK-lPrd;8rsE$*Rit1l! z>DT(lyNA=u*SeRJI}n%D@69CaUZeQER(}d~=h3!WwL}kz^XhgGM7JE?LFSO$&=N+I z8nwB+#RNeWfz6{k`L687*UPC8ZFh|CLHCn^ma3LwD5kbAN767T(DBX2J*cXyhaJCA zC}JFQ8|dYo`y2cAzlVi_tulwcp>cI8;gI2iK*;0PE3@hq^;4CZ=vF zBuC_Y_F#rie1&RFE0_*2kVnWK%{%=5H@)vOM8qGLZDOC-aot%za2t6hoQXGr38{=F zB-|Ak7?I`a86K%vL(3DUB-cmHY{0$_tBb?thRjA+>Rq4#now+NXiQ5fF!qAcv8Cy~u(@rAUlOd@_eX0D=9nwUr0NtRL>#$bS#ls>7@g z-@>X~$#s%2)<1N(I}yhsCLWX&kB3LKJ=jv{^DssQ|8#i&gU+l~2{XFF-ZfbNQ9f|m zM#-y}a#KxPVn_ERvkJ_44Yd!^GaX?@pCOm_Eg7~ImNp?@N$qifvZ7*(X5JIz^J1Dp z_)wAwSaNa_C27;Xjz`E0iQW^n3~QUJCJr{>xZ}#5izB9SX+@s!>a6o?GQMv|!1Lqe z{21ze2lwKtRdU~#fVb99^L-V5)fuhWCf%O}?J~EDE?s^Fbst5fKiI(&fe>9otam>~ zDB1Q&F7VA;p-J79f95>itK6BUeK~vbpdyY3XPY@?EBgm)gJl&2o@*z^Rw+g-Ub+uR z(~mO!D$@v-`g!uy;^{k+%;O;*l`Ht=K7W2r1bzE>_*cs$(If2`b9`+wX7OTLDK4l7 z`wo3G3<(C<1lQ54yH2XLtQM^pISs`%jf=!uU=_CvO2awH0+uvUPuG1Xd+J&}Y&gc2 zjoOxLxt-Ie>e1%>#W0|Hj9plvuZ|$o~SBM8xKBB}=6F=Y#$~7zaP4`t!61 zm`>}XbV7AB^xc~Vn6d@FTqm`kn_9NFBOzSI?5fX}R~OrM3_D)^2P5*#=0o?x0q-BT z12xZ$>{~UN&DedX>GSb1Vc#u7erGwpn~ao+Q`!r7j=At=eLcFh>&qL&|du;0ub;XT;qZb7dZF{kF@DW7CbQ$h)S&jGw=AHCbBw{@CUIoseMOf96OSUdb#k@IpeIsOT}IkS3W%Fbm% zrQ-95!5b|Td0m%S3v|hio2X2Hj^-gcu;z@86C)6CqgsQ&g*p87lEK5gjCo(oj%_@1 zAqIdv!nf#+cK(k1J+Tfq|4Plg` zA;n6)XiB#>DKyEG{M%(MpJ6n$2bV-@eC#V58E~_?@O`NY^wv?1Bsb_5y6fj#aq#!F zac%>YTw508zSnOP!hkfp2V#JDbP&>Amm`SP6y%WF9t#q|w-e2@Zf6qk{kU0Qbl7c-w;tebTI&0*=i@!+ zn;1RR#MGNN!BWQttl)d1=cVuastEWF1y+L@@C7bv;YzFWtXAe*-HgakhW6^{Q$0Zx z1@p6nH2J3d)5HD)U5fKv8_HI~CwceY9=tp6Wr73&r5(qgfLblicvm`}#FazY)Sh^(8kf9c}sj_TpsOj(+!7foJv3*Od<$-HerjXaomZKr} zd&@C0plS;&kco!u6$?@>+>~Z(`_$FD`PdQzUiDT9Zjevaz zd_8D>d)MbK){OjeUk(lXDgk_je1955!-n*SVMZ&gAc}Ay5-Bs2XfI4uKqs%{Uuu(? zau2&^BK7I0nXTB+&;8z)i*Jh2Q+D0g5%;gM6@)=q;;dHt@1*B$$0G9ZW@#{02-#Lb zCldD6-*)Q{VgZBu(t-in9si7tcrC*or zySB{(v=75<0AqOSwY7aa^nNOgQzJE<;-rz0k3((6B`=oOo_Yg;?ad;w@TBqLb)ljN zzLlF&dmen4u?r?+Etl|fa6tH%)>U|CyY8o>e`Ri0X_lA7LZKQXHV}AkVv?}3(`9j? z(2WV0mLkh)h~C?_V%2tx17Tn({&SF`P$ETxo9z1y>JQZ+D=+5mgo=s4i+47{Gi`AY z9fe<3)}DbEj_lsN<+M7)zYg&U!QyU(Txh!<>9OXFCP}E8YG82s{+W~^^zsOV4qaH{ z&rD>Y_Tvl5QM00V08bx)=l{k`d&I@m1nUcW;fb@;gub??_-gbC@q9TA>3xtIn>Itk zcQ1r@I*{JCsc(hFb7@nezL6VFS9|Djeb^9Puxij2Oe1dN$%AMx)IwV1o&~mhXY?Gt zmAuCURbF2NIYH0RWBe$;l-R~j0F<}Q)h5by^q!5679eOxER3`o~_ut6^xIL$x?LgSw~AE%z*O4u=oU(GIW z)jyIIR}$(SCXe6+$@E2FEWBD~V}RZ!P08|0RP$@;dfmHA!qeQ-2ih5VwCRM|DZzQZ zWmz(~1&puQ%FJMhL~>XYCLUiFN)^ zWnc~15z^49i+aU?Pf~3n5n5^%N5JmU&fd=k&d!#|KK-$%-bdVujs?Ak`YHs^h51cb|ZSp zEC2Ot@nWp3C@H|}bNPMJ0OTsvh|FBl(09T-gxqh2o+jG=fSxdOdSl!J<7j)7qM@C&S9)TcQ70k>BTW7wE&p($^dHQp7y zQ2#)?2spD^Rnuj&#imHBHd}=7t8iEElkghZ<*0y%Olj_DJ_1hV-*|PoUp;3_d9Rie{_-^;Iw91K$1%{eEjIQT!HI^*;Q;hh&4k@nKW=KEU^E`1t}H&TF7Y zhGicm=Q(Ecy_(iqBb;PqGk)?*dqdr&4H_QJ*8z$#qrNQrxWZ(FzIDKj{-wtIJ8 zf}6fIMO-$k2(~?X7x>y5{cbF;4L>YxceLE;(!4Pxdq$oHTv@PPEvTfzd#cAW6x5%g94> z4SFViP*^lbMQn<0lDm8xx;~vRuv5Jt$w6Tb_OV%nIcn?9^3;SeR)Sxh6lAx^(zu_p z`NVu*!e`yWVe@=UYx3x)D0N`Lb+`0CR#(Z!;w$_K89c>b7%R7pkBc#_5ir3>7 z(FZ3PBSX8cNCzgNibL66{fum!n*cV>r$*fIHmQdC=R{eCIFpBmAlko^;ZaAqJ^42(1k8c9h6_QHxAoM1DEEkzN87&c-LUhY3 zj>{wc@@!<~>>u5dc8EQA3JK!3^EdWJ9m2yerUxI=0AA;x-+j=YR{-#$TRRG@X?5Pa zo9_A_!tb-gYj!$Pu9q(@*}V6jJN`$TJBv`@6G=evryH+BI0;7)<;^{<`n0!EV=}|b zT?lkGxsZlJPr1xLKfs|CL!qCsFN(kW^u@P}S1+eC2Vv`PAbD{ql||+VmtUH39~k8o z<2igIanjVyLH2IR7j@4nN_aEyh9hd3xE9r>JlPlj{0QQIEGpE;sD#AO3e{=5NH!Xg z!3k7^MSJ3M?7kOD*E8U=gJscY>&VCm{~D{9`RoC_^e=oP^_K#34G5SiDcWVHAiu}n zR)(ixhJnGQb#cnwMcqJ;|JOmhA(z^v!x(fub=Q#I*?XJYN6lZ+J&c(KgNv2NdVbP9 zdrZ5e3y-9~*AZN5&j1f^Fn}fD=17?FiH#~tjz3RE)OVA{q`>*3H*Q?5)NQaxSVZt3 zb$jy7Tlx1NKCMr{J~xp;Eg`5h&aZ7I!PW<*z0m3N;+;jcVFs8}OGN_j{hFTJ{%`Q@ zlkrnND0zlYn54Q>KR-bp~)M^!BO#pT`SEf2}s>+L3hO`GLA@yi~T833lb-Wxj^5>RMi=<<1 za2(`z7v6`TaJ8;6;DVa#ZC(nPbcDW6b4a?;94D5cf-8WVq0lsOKWFi8J7i|zRr1=Z zEsATZUXf@*P^m+<(lK9Hjbw4IFP2{x+iu&2#Kz>SIg_W=j-$Mpx;kxRCMuzOw&4e{^*u;x)WSI=m$Y%)rVFPm~gUSDN^XG20$1n+iIlKUJ5T6gnR zxpOQSVzeOs$Hm*?WoB((MJUc}sI~>a*EF4(AEu?8Ut`8F)0~Gf_S0i%%R_4T+PT>8 zfsenEG>2(kjWGS%0f;RNHY7Qlb%^#G@pJ+1uUftUJwEpUmiktg&dpVd;_YMom*XA( z!=8@`&FpW$Wii#oLZHOgTvnbY$^d6Wr%!G-Z{y88u=euRHjK3-Fl%45Qa*0|h3_7V`Wm%rxI5FQf z+jaazXt40fWg7GTaPc|(EQYxrnU$?SY20!4t@z3sz<=Q*gWWhg`(hXFAI8Q){v^n* zMP~X=lIWLKMzz-V{RglDzU~^ncmA~>bR~{-B;fOFe$1+)@0$B#M`c4v0rES)r)H2D zB@(JAO--izY}o24XZO+)s#7}2G4ws8mJk2Jp^eb7LzN(VG;UW`z%leWi2~&lRi0X! zHmhsaTTPVNrv!WOPIcsp@t7YYcc`#6kr>7Mv*yf-1=GiuQYi+?2i~O2E+&iw1}&Ah z#l8d1;v^Q`w(RU}QUgc2a{kJ>x?44Ox7(1OxJ${9lE($){>uoL7;@$|KO)8VO~{wM zJzb6#lY9qelxoD^ST3Va?d7zSX*6(`nE?C-^s$(q54;y+V*2)6iUcR0FF!p;nnEtC zT54DG{FX!N(Ec>V#HmbS!3hq6hoOSE*87m4DRCAzv>7SJca51<%bLscnGi7$hB$(w z)+ar@}|yeZNX^U3ZzVa`xSUI;dFK z!I#G7C5N?-p_?%iU7dFFO6yvhZsFYJt1G_$5N1TVWOX&k*HRW4$lFw*~6Rf;380d#rx5e(Uf{ z*u_h57s5FE=~7FGN`yQDZ|(JG2@z6C$Uq!9_%g>#I&W-Q}(Vj>$mR(JVEhh>af|}&Z9UM63`Peyp{eobO6_dLn zXk2+NQYAN%Zlfj8ZUno0_oqDrTyNKN3~}*%oy|P1Rz=yD9rnF^0>>jk0ss+Y`p^gH z{3uoKO{O~(tT+9U1w9UqrTF2;c`oB($}~dQVxgFw_fKJOuyM-;K$)rMMo#2VzitkC zgoqLq4lUy#kLIrd&w0%sitx_T_wiO#O^#grdDJP#o*fCgs5WQ{#rVTzRT1>frR@$S z-Fmkpg2~<6XuC_ZQ#hnOTu@|D0WsEVcXL$|^jT$Hf~>cbj!gRB3tUV)FLPUEuWX6; z@Sob+u(`D_#Cy?ZbR4Ao6=V|=O2h&WN6$IFXFJ4KSDkRkn5eZ(ZtJ^QqTwr{U=vdu zOAU+1#lVUu^;12t`Mk>AeZfQKFTBfKA|3VDqwj#NSdOy$K=!yruvsC8B107s3D456 zRn}jWq*F=mcRx%trExYVVa+Ot)BJ2m@hoi0cB?!F(or7AD4&~3>bDfkh+PJZW`;kb z(y$Q~PIH4s1;*J6DQ>L9WZ|`w8vY-S&cPwChl}Ic zu4UVk-tAQ9y4gvNj0_v=SJmLuCeN;#WQaNR*h<>- z#wwZv{nH6#ErYw5bnmmJ!w+4pP@m_7O{3mg_MF2_DsfTz$%5SHwLjawJK4d;=V`)= z;q=vk8_G{d?!gUHmH8mY((p%a7-)m1syc21p$a~M5x>5J`9G1Y6s zw-Ou}oc(?uvtBIQ1OYBo$&M^%5r}jgjIjWxEE|c9_K`2p_{G@je5Nvi(D#1LEYv9v z@5C?De2B0I>n2UbPbeePv_%9S7mZDGwJdrxy-$K$+v!xpJD?5G8fUsjf*=4#m8hx6 zcI!~)2URA^-{c2;7iI}5%^$In2<^C0@!f2EFH5=Fj_)T6zfR=a$0}wIu(+(#PI`m= zbqX4!RVuKHR89*{_mMRRp~)eicfvR6hY41LwXq`H)EyoP1*mV_2lmnLd`ffb?>a*+ z#>G&*wKXKMtqIX=&O7GU{_wnZJc~+{*?3#-{4s3x@alJz%WME2HVY_Rr=5 zCsOkTTD#>Kl0%5gl}D!0eHPP!pwuKa*(EX(YBUZ42uz~+ z40|C!gSpk_0v}%7m{6;OQPR}mRBQ`1TqJZ|>+(MQKQqzBm|3g?7&M_egZfS@! z8G12d+fn9biH)LZ^w7>D4uZ4jjlGO>qWKaWbEKkVfOGJ>n<{?`X-tAhZ{jwYn_}v} zP)_<7p_S9UUKHrNwBm@EPnTo49V4zSdHJlYh&qgZ^Bo+v96+BFRp~QizY94aY~~ld zmiIh%VCVDfX=LtE9bR-BA3wr@Nu6}Bi$8YgnOVv`KeseS_TuD@bMojbQs_hL;N`wu z+R%0iyk7tHx1~vcW$NBSv9}J5!f{!QXNY?A{A4X` zg7Bm9xTLjEWgAv45|$Q{o=ubzetP)V|F>Fc-h73|u#WbpoV-I>ABDQ{x6~<-+JluS z?`m}cHS)Q&b?el|p)b*^_oj-SO!MCvqpzERw*lc~Eo2h~?yL^I8kw zTTxNmw!F_}i z8p(Eqpa}DK6{KBRc392n3D*e+*mP^ zu9^&P4}k@afzfJ|!XbM3MH7M!7l^9CBCb6!$dUPNow|3-SHMj~zOOSjihU7%sWurQ zWZv$U7}`RIvMFG0+jl@6b#?;wuit+bifb8R88OBh9F`(=pd<{P(WN4pQd2rJa?X4v2r4+0pvDgS)%wDV ziz|*CrrULj!o-DXJs5$<$)Nvbc(y4A z=r$n<_NQa944-BH_iYKlP@qmEKIwF=ZQtLoOeB02)RHBqn%zHn1)jHaIR&#l6}}xJ zP3p{Hx-KSYoJxW*2<8$k;@liKv}2Hk zA5md=N-$0Jn*Sm*0Z13Z$jv0Um@9BSsAX5640(hSPU$Hp`PA8fFF-ak9x$t`r#dq| zhONoUDM(N2EIx!GcETl$ttNlW@Cbey$)c=MK^;XO141YMXUR=O}JHPYh`qkPgUzx-lZOPO(o*KeySHwg<{&uz#P zyj{c$5X52oMxXhcL*z8A=_Q<^g<+Q%G*D z^jw)aIa3NwM;l>voM7^}ucz(kFRY$cGY!6!$np4BlD0S|MzAom7i02sUBsB`#0JYtqs#Uv9guzX(Q9g;}~&e zXds@P`5Z!-Gz{PvSM!LOU$8^1JLOS6rA4t8>Q7Z^4W^bSTP}-k8R9)?TOef+^Eqz+AdjVZlFQJ^DbO0@s zs<~}w_bTBW&NW;T91>!rI#ooEjyx&)j9mywBG28kn%*}D~T;4 z)~+^(J9^qqpEvpEUj6yBSZ6m;-pU&YXYM|do}~pOczc9Hg0>;S4ooaz9b&Z^p~-Q` zK!smiX6RO8@gw_X|9)CxNM=rF$XH%_r4+nf^dBqvIQ`?YW-P9g!=p!PVs&X!0!$=_l@gLtN1S=LllUjI*Y?> z#wgtVGzmMMi+%PZ*x*`Zc!n1waXW5}-i%}3j$mQ&p%u}gY^sGL>Op+W%leHTDj?$*C)Yh4ry*fnoYg0H55<*#^Ok(&^kkymxosuz{*i3DiR8pgmLCRpmdiMi=OQo2GarL~OAbuuOdtMXoI8!G z99n`8iDiiVij)>FMuk~c^!KuyA&|Wt|8)4%L9?PzoG%xV%p+MM0A|vwSfhQNqgx#i zEFVG9Jy;2zN70me5GIMqthW1yS4U$ewLIUjFd~+yyvM#W8~$6A_mVcG|6V;Vaq~fe zUzZzhi>t<&T%D>p8jafo)D1&+UZ-|xV7jG;CeFZ0^`j)Z9pjY?X6SUmSWv~ntw0`) z-5-2+;g=FYZ(2coUX$0JG`osHTrv3Gi}E!e6U`0QT|~^D=6CgZeHKMz;UMJx`l=a; zk@bm^d*iM>QHB?^!mv}eVOBRnmKhfT5)%je0>{s2>wO2wDoVQ1cRJoeAH{UH%Bp;Q zG}^2ff2^P&GVC~^!c4-eT$IXZqWP;1yN&Q5f3U@Wa8vz!oKN~vs-a~DOv(s!J@4wF zu-iiOtM}-pjP#XGc&y*hml96d89R7?&wHLz2CVXu8&%rye=B+;htO;H)jaY9TTI48 zj15hdmxl#vm|x;^4QNcfBRRbtsMM_jC<8^zlUZt9y@y4zzw={qSS82oZ9V*?OEoF4 zO8|cpLt``Moz0j!d)zL+bOPZKdN!=Cy1YKBqJ-~_Jsl&6d*rHg+55cScns3Qh?MxF z71eTeViMxo>BQ?ZnTg+eMWNbs)9;U$Om_vM<@*^K3hBUGb#{n?Zd~({QZJtTN;Z9R zk>VUCfjCw5i1yPQ;uKxWAhrA?Nsa^Yagzw?4gAV{hzboAA@0iWgqwIJekI65NA#Gv@qV!D>EboQ~6-gaeL*1>7!vU8~&w zt2=M+d!9yR{(QW=J#CShQ|0wQG+yK>FxriZnxB{xf6-f+g$zoOA~iAR(zbKm?Wn+l zRakV^LUmMh)ztw0Y;-^9fHCGD4Q6WJI>xLgJ=)2nF(j| z`5zfFT)(b8FG6oHcybk1Zpfz|K{QwU(U7jSCOvi$r}{Bc8%Y~AuGZ=zq`WD%^%aXV zR4At*p1%;ag3Cv27Ljr}I~!eZyv#fLz5)N}#2FS8EhV245w*Vz(tRtzJR_&&=|X25 z(s#{g!=YD<@D#tEb+%=>RmoFpI(-8l){Oj}UmApZJgx~yEz?_`1U&P@I*AgHFiw03 z6ErNa*mEkPcD;MxN4ZoNYh2GTp=r4lZhKsx4wPq!P6J_mq$8|w65pSI+DEXqy{pR$ z=^iV6r7(&d<9Io*A!rvQR7{JoW?(V+?h}L+6ct@UnUk|pRqa}6a&l6OYUyBvi5szA zi*;`m6-BfIjpDIYTmP4q9J-K-NNROSzPaMiJGgKk+Gb0Od8v0;tr|&F^K#z2i@00^ zOQ%%^*T!j#N>=9p!Il5g&yi|Rh&vKP$7s!du<)mO4MI$_$uL5JAZ~a~leau)x+CjM zN;)DEg5$VJ^uN1`oQMEd7mJ-uW%kEJ;dr{mscb)DO5q(aGkK{~1{yt0#Z;9OV#!60 zQPU(DG^nGiC%lyI$q@Yj2lop+jYIF_*URglj17cA;JUnSbEd1ZS<|NzoEniwH4s~x zB@h`-248Van6m2(62|mYuV?vg;i0ttxC29O&(qRr|Jy8w)jw=DHq3j((Eit(1*1N< z%M~vx?V;XubrKwEErB75ic??1RrgpV|AHu;k&vjYf%~}0EJFj;buP(MGS{QJyt`J& z*68o_cVNklZWSe5q2EhBh`(679hh^-EoD0V$usu)v&&<$$i}A!Uq%#F$-xzE-zK*_ zqm1F$l|QR7aUE|j*>(|dLCz?sVd|b6uXyMxsvx@{vz>HDBd!9XvcONE$t}`PZkSQC z?S_+ABD0(yW52ISo&^$Jx5I^fZ@2v-JkkQGK4qsX0ro_Va^5~nD;ZPAAt(M?^f8+k z>?aNBLV9UjbB|58mEWGWMgu?JYJkFDZ_h%cH|Ttac$7FR!JSI)th$n*rW%{7t%rT; zM|uZ{Z@B}_@LX(A_k4r~YeF^@qIiyw_hC%FGVxzeL+c?5LSUf3*U2F;Jf1eNY!ZA! z|MJ05Da^iOv&-{sjdQJ|z7+HvT1hppiC#il}uyrBpC?`^M!`R>h>-LdSu#0kvyS&EP1h36OLa!dG6U$bfu1vB*p^ zZ{)@WeM>QIe!4{i$$cNe!di}AgIr{EkZDT|!7x2lV2a8uPM=1<6q=G-Mo?~A3rm-1 z{uu6lHuCw{uL=CT1uRRgQWpjo8IL%vn+4ir*(Yt~rBenfkHS9ZXEP*! za&rWu*)dKcv&p(u zW6j6ar&&p>$i4d)*o1QB53;>+~VM?Im7x+}2i%S!RZ zu#lT%d1Cs^*G!ELchNuRMC{fRey)STJ0AK!`6y13nCQ$RjKRYDX&9?Q2{qWpklzeJ zutcdxEtiUS+tOFGycqKkJ1I@aY{zUDeKP@Cjb)0W$V(rm6Ep-8nk(>#+O+hJBi=gd zu>@d`KG>%)?(1!o_Xk>#bI^&nkH32=-mc;l3*QcrNKCPMA++=R zOD|iKs)i^(5m!}>oJ0S7QoSJh){mV*wVnah{hfYvSWf6I&gSIO8beaE?%Ol1h#m#@ z&#nYh3CZq#ZW@`EAA#DbiKagPblEivf!G&YtJx!bm#ivQ40s~H)*--@yD9iS*O53L z>d4S^V?Eds4r-XXYJid}!&X={W_M+CzWn^%(h%tV$nq`l@CfxvL7`Bx;QP$f^d$_Q zIW_k;0t|O2Xix$dbi!iet`I}_SEz+qi@ml=-FG+AJtfzCD2`#qT1nrnKF>El(kqh9 z&VN%s0e?!26L?GcfbV7<#mRjw*Q$<|&s5F^6)p5AS9i}stR{-`8T}+IxKFA|#=b=0 zT;z7A^Aiw%^?1;R7(XNV)ALpr=>HZP=yAJsBcGUZ9=89&Re*z?j4j%3>m}%&P6^f= zWb;+^fLAfuPm?N8ceU~~@O+S_cJzVkW?oB4@9#-R027xozrv|@=is2aUvEnr0v-X@KU=ordf z5GPJK?6F=>c-89fY}WXSU4@O2>32{}4Do=ou42btN*kP8s($=`YR}uFbml*J3~gbh zzjIoqtL#UC#1m5S?7}tC=9pNpdqYV1_|akFzm5|;xW6Wpka`|IG(gFKAE{vdsH(6{ zc;)H_l-XGzCLFEM76VnagH|45fD!xMMeAiEb3kgW#IS~8G}x4FRW8u&T;047RtECP z3?ZSFP2gjSe7A;F&acn#cz@{EBYt^OfaJzj$J^y+&&ueLxnZ{T9K*!=9r*ZFkY?CP>3p6T4!#XKl8Z%U!_av*NVRre=LGitOQCHu3z8&h+K2m&0Y^ zHCBW3DLdtmE5y$E0avv(eQT-$`>8Jo-`J@&`!|TBvl(mU8uEJWCcapZ*uu>*M*5ZB zx>F!GHs|_hg7b!dhSWkC#6Ok>T-JH1{0-oEl&V`!o(F9#EyxMSk5ZqU^)?ml4>n%K z=NNJ!jmrsaVNv;rz_jl)Z`{*X!Vu~4dT2LV0T=o*c%WvPr1u=A?d%-56WY-wjS-tK zkdjBgeXrT)L$J_R`Zonu0YyIuP!4e+%33-@0zG*b_`3l_3T+Im1k=H@q>5L=do&A7 z6Kfi)EeBHF7Nr$|+mK>p@afR$W(Lp9V>@`RYm^Bw$%*p&jBk7K!+P7S6;5tC&QAZ%yBlL{Q5;wRFt@XN?RC98EA>tw9A0R zHLXo3D3R1vC4ifU>|iuFnW%@Fbv=6ysAv%^5ED=ZI+|Qo0_oK;l`S64B^~;nblQ@4 zDGAqSkj6)r(XSU5XSPn1=uX^naW_0tTUsXhVZ4{7*eGCFH}ya^m0NtsIoiD#?LY5R z53a#ugNNKCeXT|iQK0P+b-KcJO@uwaUe@AXbK(Hw#>bQZ@83qap!kr=_hrWHKYz}2 zpZ^XmfDPYK?#OYk)4k>;NCZlsU;3Ug`YqcA5~{2kqv5RT>v4ppVK@HOPMxGaxF(}Q zSMxBynA9C#LJzZiQAZVzrXfG#0FF5SO1JFZoIT~!iWLBX1&Q$Fd$wgw^G5%zhc5|8 zIP4g4^mT4S&$BrZ?aT^jOOg%DOw;1`tXJL?qDMo7*##zCr4;>kLdR>pkb@5KH&0FW zU}JxOr@!TP;%0MWsr;7gs&lfa%m-)rfWw`zAp?>nt!Y00<}f zAP|1fS6;ufm64^+ZuOQ*>Z42)MP^1~`~m|WPdD>-8*(F@qt(3tAhR*2&$Av{Xw*@c zKBotQ_bToX>VxGn03Hww_VB!t`6~5-^md_rNgAU!J+XB*(wC&h=*~lNzvM6% zq#CYe%^6RiOUA7ci4F8>jCl8pg9LVYwJM()Dm+P|Di>O_2G-6ge|8D47lC$nLGdGc zrVmIDSCqa^TJzo$3sY7X9uf|GRX9}aWLtg=(B%Ua6+6}OhOp>e*756NuV zMA+Qim(^5aYrQ_G$%g5#-8Zh233Ieg%=^wqDAxM>38?ZOk9dBn)ex zyi?PD0dIknVPeujeFG z@44T@&HSvYI6Hfv1F=S;jeHZ4A-Vq0x<@cYW;q?C6{PrM%qD;xo#V`+= z_BXGKjnY~Dqt=l*_Ir0@UtQUNq`(_SGV?xW4~BQJ>x-IJ_#GGHT#1#t_MD`1^r3mrhA?*HP&7R`voF&!#9)?PMF)-2MR6?bTitgKEZEix z(%|$0PNBi&^VNDuDq%7!BfYpqnxOp9nQcXvUQWbU`5_UF37L5tMs9K&y9Hfb6IZQx z*Vu!LfE_~%O^-44>~&4{sgpj3ESpe{GS{gD6QI6)0xOGUp&%LuR5Q(8eT3OyDZ5Ml zDQ@n&mYszT9-ajSda(R_al#Ri*d?ZJ{<05J($<*4Q>?((Dvi#N;8QnK%QYs>omdWq zuAQ+&!&7nBJk>&c*-xSD)X?;!g@N?t*2BI18@l9Oy=a`xK$NHNWO_(mW;_uJVU2E=*q zM2}K1K|4ExN305RJzKjhJ*=t0v>U-avzkuGtxwvMmf#QE%8!iGRK~tT7?(zCfCx{JHIjSiUqjE+J zal7;5V+n)4b4xV18FN+DPE6_56xqi`R`i3`&pbr@#ModMZD=~@lo;G10pA~M0B&HC z-iVEikm+M)wKv78rqgum99KVH-ncU=qPCAy4*E1TEo zk-$a-e@hm3)awZ&kGR`Z|0%DzE2_8Q!hJskzcVHa`jEMz$9PlI$i|TvFC&#nrTp!+ zEZ@AWlD^ku%KR9ho~f)t5S>*KpwIH#_br!OZ|KUo|Jd2j=-3;)DYl#1rRj`@P?>w1 zxRB4w%KyxsGqrBqU{5f#!+Y}z>amdPp?CmA=i9?(TS!UAF~z*&2r%#OwFZksi@SU2@g=j}wfgekjABllC&zZ&n`e_ZJ9WX6rH4-Bpd)s`ISeL2D zr>HBk`HuMhK;9+WQ0KB&nAgwN-18Gx=j{?&=c(vn5nz<`5yrM!B6Jp+TqUP5pG0OQ znB&z|Ran+{ce-TB{CjJazd$zpXahqSfJ~K)*Fx(X{nGY5lu_ZL%6a#)frkzM#3Ckm<>K z?j)j{VZ3c-?EWD3f{>c=^vg(g$9u^W>f?WyIxKF&K`Zq%Gk>oF761NjT>;DMr^3=^ z&d_900wOam+~$^nGwx_2RIbcbFqr7~u5Eu?SQ`c;d7qmB=^LAgW|hc0{^h@7O-PR~u)XvxJB74jLX4=d#8efQ%Ta ze4Eu8tk%g^`1%Jo*BhVf4qv)7@Td>(-hj))f~V%wXY>{szqV$$VJwbzzP8aSFsK3YOgez8E-OR8Fg&7=(0O9HX1XlFpvyUv9DcdZ0=z0VM$+j zPUNC`ipuX_1}I`F!1EgU64?V2&i>lTsnhLUWc3hc>BphZvbkbz zZI!3u*T$INuhoL3)+d{e(D33$V=;358|g9@Zkle%)|qm1v6Ul`!m3~#LBS)9{_NRR z3CGQvr}oTYS-J{?PF`{l2Mf9}68sg|nJDDFQ`*U4;91T0JePP1ip;g6>ug-np6z3t zedp2Ok2tS5C~zZ1V<}Z<8hqOMnHJZ+d7dvlb>jsTCSbL$Y4p0$BO7~b3Q-rjb~zzd zI-AUJ?4~;3_Zi8QYVVR8ph-z{0kkJN1GQ{P9OHb;ZtE2-od6WdFguxP(XSvio(u+4 z=-A@P-ckSCMv2nHX&Kyv;wY|Uf$owCD#IVjh#{QPp=Z(Y$Q;PMQp`upSZ>))YW-(> zK3fst2#Jsr*wc_wDqjqmy7h5@@zn`xUPv<1OLM{W3zMr|fHxqLT`A2LFje}J{p!AS zvg^7Z0y-yW4h}uamqkocKx3qbNQ-;G=qhLWWNtJU*^tKzq&R?9y6JkW>l9?LzwY-^c#2A9 zERfV^nGm^2WY>Cw`0UQT$KWs5iT(JhYTLOZ#0e(Y>>po$AQku_%HV=g@EqJra*5-h zf1)W?)_l?Q(4F!l*jj4~xmr!}G6zv}WYd$2*JX={O`?mr?@mjhX{uz z-q@AgOr=Dc0u${4yahgD50 zghCniWlrvXcW+0JI{9S{ScrxIN9`CWw_vshCCT(Rcg06_oKnj$@P9kO!JBZuXrO1X zG=X1#`-H<6+VMNpt`$sN0xgU*(_MSA-1mA$93@$ZYYCf$aoL{;D!CklE(Bc)$(dnn zl$PmvSMrS04!WlfT#e0_S4$7s|Aln5Fl49cN8j2I?RTBEkCze0VFF_XOk`|%*;~Bb zZA}hIO)a`|&ZKu8>hzD2gI??5nj@dj0i@eMclU2ExLUkJT|bmWVEtsaHxPDo&=HTY zM;|(eKd$qH1#YxF25{;Lw^)n#S!a!xpacs*TzCO>k6h}lnu8V-_2>a^94?DowVo8Zl^nLqnQOr=(|fjWJJY9Uc zIbol$nA^CWx>IM7no$}h^-l0>!yeCJAJcD^QpRBsEpS-p1PEbVwP|_HD-F}acj|BH z0fF3gAV?JzMVWj6G%Fjvum&v6gM?9_!E3k(Q+%V?jM8>2$VrRoT2A zHv^I5DDFlh?s2Q93M|t54v5LlG;|>NDYyW5b@z062L#-jRK#h>@5j$8tsBA}Uj_Z} zr&sDUBT0Mti-KycEO^KE(Nd0KQ2X4z&1D!L;ND-;^9OVkm3Fnm5bLpA4H< z05J&+E-M`+>iE%~`5LxL#bYsndkfLrRDIw>>k5xJVHs3QmCXXhHWP=2f)-Vm@FMzI zl?;S`f$VprDUjk^)_xM{*11k>tD`ot7LG%Y`$CDMZ0@E>%6d5URT&frP9IP)(%j}w ztxY6LNx-#cK!H;o`85r{Mc)uVBW{ zR0wxC?-ARO&o3)u=^5nnPq*Qt;x)G#g5&GBh0{9j7~wQh3nEZu#Kd_lx?ez7e$*6j z0@9`9c3I`M)?Qo3J|>;6Q<&h3tUWnu0`$im+Y8G>bdi+s>zNAUj#vT^cgeEBO^V$; z!G*wZi5gWl6#L_R;b`jDZ#O4{zL(HLiE1K5eNy)i6u-R*ASq*o`q;lQuOSSR$=7SN zP(@uxhxHN5usdt7`a~hiTCq=`xy~vwkQDrxf8O5z_BQ=BkcYsKUj!JtA+Fjj&aEj1uqBL#Xk#KLG23vvf|>ED>#Z<&Aa-{a|kW9NTsK(9FQ?i?Pm@arohA?F-|#q z#Efh(+E7l+Mrfw1kD@BnAJ;-I0`DLYgb{H)0kSc{T$!DEwtrHTB}}VM`xIcK$l^AB z2D$CZJip(`Wt!q+xImhkQvQy|fQMLIQPFG#GcgO;u|t590lC2eQ9863uIx!s<2I?( zsxkMz9ZvV*!In1NV6O9t*Eh!&&$(LSRpv?KOlG;osX=P5rm@o@Nx>b-PU?~cKaM4?Yu+wJI=~j zsAuJ4rB!b`@OowQIu3Zp!c#a@5zfenS1-k~!(8I@Qc{$WpZeqX4${T-Akwt(3$poz z*xETeXr{3p*x(`mxFZ*G?GNC6$4#2B6pNTl!;u$^{thSDqJcpXZLZE;_`F6{6*Wqy z2b_8du<*4h4|KG76uGdI7)nBb(llzk%ZdAj71=NaP|+DE!RP)-Jmua6;9zYMB#h=N z3?KMAT1}n1R*-lc?JWLop+pKY6~#W*=tB#!C_alIx>i}yh%7ntOk)@GJgGYqQDzqz zYjnks`%zEd5%(o^A94CaJ$9POMuUWPrYLoPlW`7VDS|QjlEoYuw-%QprwTK$6xG>3 z1xKhqfIL`ZLL9{$|QKT8=B<{J_IaKtvGZPw?rJs&F&bUFAM$+zK{lJtJ?LDmaD zhOz)+lrD9UVB%$g$Du8YrAv+ad&6Q~FjU?OfX5o}prBiDb9nK!SA@M*&h@aq%Z z)QL4^DEkT|k?F@jU~w36V89FnL*PNMR6F9DGA36~Vt~t zB#G3T1m5s6h19HEw+rMxwz#$fbVhNND?hqy;XIRR5VeQyOwZj=_OsaY>44KmvXymxRxSn25bzaD$WNy-LKw&&}fHgF2T*j50;zcgL`PD`p zK*wfXb)g4A^<8iF++Ws|?&F{h2Ti!<7n!)%2#*5x?{&(fM$kU{|| zk19PlY5wmYJl>jQ5)74sSh$(b6;{fhpLg*jhQ#=Rvp?1@CZzfoi5opcWa?8JIRLKZ zwypB-)%37Ih8SFp5sZ?bU#6DLU3vSfb5Uw$7>)&9g5ns~!o1lHYHV}DsyM?sNQvuR z$0+vC6^6j{QJXfbHuu4z0Rq-J`8mH#M1C$e-g;cDBKmX%-y>NO0t z@;H*Mm*3BFgfrE>gBeBC`Xrng;QQH_r~mnfc=(vK$JSPyIojS4vdG*M&PiJnUao0Y zNerwXiak+LW%{WuA1H~U*&AsL_?HIVkXx9?i@#co0bRSPE7yMMCy_q?v8%nOze{Uh z8~*&A|9x?1vN(2=8qC;(WvHJ)beo@TI&yo%I+Q$Ub2^+Wh9UXP_l^Pk@xE; ziBHd!Of5aV*gxlkJvkIoStcagEAYt2;9Q3V9W6f^_~9W*^+JTMb${(g@5{HWiIHYc zLdmUk1l#)n+qqBeVJviJtu6D)7(T$sqsOCdVoA+J9o~8hn->p`GD!;CkIrb7s4iAX zt1I6HwHGBnidCkspPy6b+EyP;6|TdAkwvL&!!BBeq>M~wM;iD`K!_~w+@xWfw#BMxDVBPLJn_QK@S<0yS`ts+TRxWx4! z!680#QCBM>DUnDnPTjQMF9ocOGiSfRaYQY{MuTuiTz}5=`hFnRFeL4D)t95)O1ed2 zN5y1;_#gZ);OcMkw(%Kp!NOgo5F)Le=Hi8nTZ)XOU3F+5E5rklrynt!S^A<7q_<8a z@K@a9bNHG#c0>`nWXBU5bXig|=(kQ|vLQW$#sXc6d+MSuF`**I4De!XzjH+Uc|&}u zp*lXyu$InqWX<$!*(4Jov3bfLE~bzPm|4bP=6dAh9*+_>#(3Z5RfQDYB(mgR6%r`!uw(Tlv+RVJdVlCzSdLGq;96{rvG45%fzc zg_6C?@g$FS)1#xuDa!L$F=O8=z=GMdS>-zc-rYC=MRyNvlEa!8%(R8rI>b>Te0$6e zhP>{~pN*`*ZGw`HZW?9JUN`5{6A#-6wvmIg3WL;8dV>P}Mh9$K$2diyfd9IWRbowJ zYJJ@&(2xLs@F}IygESHp!1ai1sNyO)8tG0%YVMAyT%s!(+4ic~2f8`Sp^GA~Snx-; zPv_u{55RbW9iV`5LTASZ`3mGBTDb8RYVtxp-<#h)xds;hL#m)WP+?hQY?7H#CAev@ z=gfFoq@A0)a`^>Wf#T(5cj>*}M#ykLJ?d%Y!SA!Git&*vJ%Jz?Yu0RSd;0 zG#iZfotID)~U5Rf6kb|#hIe{Z!V7kn*5~3Ot zY7B)R&c^FI-cGCKW9!wOr-#d18<>k$=od!3?|7ut)-FsdLj4%0vq!Pt?2c2ZWu9** zif&czI`t=0fqKZd<7|#Vzi&4?dSr!P?dfRn8A!vF3FRszM~=vouk0xHae#GIFv8{v zIi**zh|DfjRP)76FBp%BvBdB2;kK~X7m&03HgvCL2w6gZg8mS_zQaQt#oicEYr}04 z=L5>N=@F9Fh!%Wz9d+lktv*yZ3)S&huJ+;~GmcZT;Oh zpxtB2DYApij>J_qIcf&5C4QJ#Kc-J#3CTR2=d6<*x3FY&`DUdBl~tdRC(a?=`~gEp z%|9-qn!Lirka#Pb87q-Gs1I?J)dlQb$gn*JFbeh98n$cj{o!SnV7a-Jo{ z0cHYS#>3*eEu>E#P?35+?y~oV{azlLjDYK;n~n1R*sst5N73Y_J0uY%kM}Zsn>^h8 ztUN%zmdt9;GWrtJteKP>nhO&ElWy9={l#&x^ieEyWZzTZaot&;7zqz|{?X$91OS5x za&KNjGkw?f>Ve9mQo#97lOqKuSc+Q#w?N16mzib1pBt-@*~x1b(Y#pwXOBqfD8bweRO&Q=ToyedsQe9#d=ug>wLxEVQ=zW@13wSUl8H8_!kq z(dSH~Q_~teAXl&QkTAnUD5do==LZ!Nb0$IDb?99pspdMZaG{OkVq zxj^t4xTZzu&3|woUgz=*g~0~)oHuC^%3&TBH^)LG#=bvQ+yHl@RGZFEZMxMs&v9){ zDC#Hv@fQd@e!S-%D}R_7*-Zk0JWCU_c8wYs{C zdy@mIsVG7PrE?xO&~V8ZYC<{Vg^1|3%^-Ab+7VG*c~x83~5M?c18 zf*?9#1|1fJc7#-6;J>5%)g$fF%^VvLF+($V>w1vW?SJ4ypM*4Wtsgohzrm)=D$J)3 zVn16os)h1dpf*vY+dAv>23lS5G3U(f>QNH~{Qy3RhN|YKpQQa>z~y+DL!iR%a(wyq6FJgT=%=D7&s?E3FG|EW75*`Yx7USLWt{ywoWS&F!u7F?axLyKGttTEI zD(UL>R+sMpf<#EGXU~VB(w<*NDjUum)qB%rf^dl+7}kLpa9*Le>a&QR1JwD)2Bmn~ zgE_iOm=@zDHMWNUTLJ69wI`Lz8-UUK(52m>ibd=q@hu&pRPU@ND8*DZlefAbyrX%# z1v^2SuDdDW9ESJr>RTW0aV{x**K+G=Fgp%%6}V~vju;Bq|H8X z_2_Lfq>-*dXuy{ucSkuKs2qX9LxG|0m3&#tayoD%&6HD9d#2a*XhgaH-^EK{VD-O& zNU{b7F_z+5>jJbiD_J=OW}}Ej|<5#mO!0nO2d};zDW~1s^v+- z(kq$_=v3HE#xR@v`w&gWq_|zxlO>ctqf*?maGMQ8XA2+%Q7Tyo4KN zvbBcC=G0cBs(>n`Jy9J{;Q9~#Uen&`0>_D!p%s1j+nme@5EMDR1AU*Mstblq8~n{l z3L(Z3?NWvVbi{I?+tTJ|?y4)gY=zyvHRiqyc2fMj5A9V*pPNx&Y+!TJCouiy zEn#oLG-%y5cv`VmJu#XZQSpQc-*$#|MJq=IlwToT$^3$&j2Y$}Hf?3VZ1@{#MOoHX zB)Z?KN!KHzPcD2}zo}~G|920rAyG-7H%Epmd5o5XRD8st-O5*w;F<&|kOB*CLk6ln zv5dfPEu*jV`s(~OXAwNz&Fcj6mBKm?VgVN0m#vAgA+_Kw4ZVi|j6UJt#V8Q!U0z-A zSN_p7>MFeXMu~K`)Fn?aN7IsBO@60#Wu_OL0{V5lEf9D%ehl-vU3LG4Q#bUF6cAfF z#J7WHQu=@tT_AlbB3Y#A;Yq}eL`quHT#F}giw{G~jSRhN84b$U>5mxa`t9dT_xArt zI>+cbzPAm>Nn_h??4+@6+h$|iR%6>%sop^Yr|7D4>uGLx=1bL>E-*j9-&%Bm8PMWQ1UxZ}OkEiBLMC^uvf zy#38HJojFi?k1w!GR}&cWEmKvvn$-4OTBWLn+F!q+}X@Rt#J8MB#9I2Emo8(q&ZtD z5p4;|QNB4~k2uMQY6_r|zfrUQiyM;Tg`YL8{2X4{R{`{K(??EDKSCiM{3DN?H|P;W zzzHrm0nqE=HhXIvA6UL*mQAHO%0GqWR)ncZA|OZR>oyC=YorjQzA+L9E*49YmB;7z z4785;U!(hSTdVBD(RW-U3t%G2@3bDM$5gmU%9{|6{ z*ZbK(PGGWCO1!MeQd<)RuK>bCmZ*WwiOH_!W(T7{{;f$_J)!Ufm_}`E%yE(5$o6R$ zi0Sl{L)gQ|^ZDKYJ8(^Ut5oT?&3fp71FnT2{Iv60k}0+%GcXeoC^sm`t1RoFRE_f% z=kN@;`=+%kBg|c?!(eZ;NgmFyj59LU$^LO|V$|rIiPGem6!`91p92EWG8(6N<;lFi z7%gcBwuseX|Ds+Ku3=EWHPn`T@0gT%ldw(E7N%jDomL9Ht$RYq=R#FzJ+(H z%~RvykXL647rd|re_TB_b8KLFTsELF7GACgKBjh#GIO^7_W5b<`5<_JoQ}00JLaUW zc*y^FBO!PSK1jjuzdKq7P;754zzOV@DH5j&>x^SAJV~K^jah9W#au6r^8VovFTk`P z>HqM)rJBLVd)Kqkn+lnt(@Jeww0LZsf|fwG%QS)k+5#JsY*%P9irGoO1l;o9=0Z)v z{nvr4p4~+;mRez3$};>`PD4c#))hi8TQBZqYuv@&9raBYmt9*Y!wtTG)P7aS0wT2z zgaT7iYnYFHX<13!57xg!T^@z;Kh~G~RJ}JQg}H{i{9X|6s%!@Oht`WWn(kyQ;N|Sf zY%WFp8-d746#&zXa=NUy#5%v$3}mw#QYHV6L`xr9kRc|&O(oj7M>qo)z0lS=J@p9l zr|~E;quu06zxQr!<^9&ELxlxpVgzEkw3%}`K9}IwzpbR!9QTBBT!N55zm3+jzWV@E z`nTxbSlG+8wgzQh8?OWY$ccP7-w}EV7S2z6)7`|&vsP@!-30^?G%Y$KU9 z=j6Qk#V2=-C?0K4&|2eKU)Lh9`oJ1+@G{U2l@Y{ zG0HL8Z5c!9_TPaPzfLO$%z|H3DXXVe16{&!W@U#*{LqWwD=YjUSJx6-dR*Sb7j2!(nTYt|&DQpNi848PvQc7f?G-xrfcXTs}8{ z>ql}H|AA!1&jtP^Ap&hoax2}0b27S-y3r_gw-03r=tMDYT}daU?NQ+dRyj4$LrDkP zyYpH8!;?V!Qs(WJ+o*1L@9GnWEsv+pI{%+1;XuJ%U)LndaKKttjR9Y6u|Izlj?m*z zD-GtPGEDOcRHFwBT+)Pd)6j0s&p?$5}; zHJ_o$^@9Lv0Un_3idIFNDWY~ah+qAosJLp(%*D&+|33aPdz7|pT(cDD>jOnMQ6fre zR5;+c&UVk$C72$k6OMsbGC*6(!u>&b>z!@_t)1bJjccgS^>5&wO_jB9@Q3(OT3om5 z&FRx-m(NEh(H5SkIRIfuWgO2PH*19;HgqC+`c*k9v64g&QioBhAcReX(dygkDC@OW(^}$`B45K)*~Q5c=TV za3WWx#M|K{Fjf~87-heL^0fc{*PANKL41w7NQ*1nCzg1GK3ALy@>&VrP@ZnwbTO;R z)xk)c!G4JnO-s}H1P>6f)-nQnp7gz6&$n^}Sgy@wTrH!{d6YGe1-xZ3604n~jQgz8 zoUUOt9__KQOP7W(WRk2{W22O&(i zHt!-*uw}Ej$-iGYt#GO-9Yj(Y;ZK~>x3JIGH+lgmQBQ)nVvGfdAz5ixFZQ`7AT3_E z0W^Lu2McKfdyB_I_na6$=vC5?=0G-*=0wjx zzKO_Y*9;zVjXBEv($(AUGFz6)2B60F*XlihL7B#q% zAT}fxUkaobxBJ^Wr>?;&c40y{vRhL=bDA(H4EUr)ReYzKC%zv}NZ(h@^b0!C4{7f{ z78^s_E(Fu(_DKAvp9|g~SndI0LIOR&;flfW=j29>okqhAs;ofe)TrNMYM!p@q^FF9})pO5DSJx^fv7VSZO z|8?KIsc|Ux+*XrGdKq_r71v>X10U5MbLZfQ$;CVOF9VjF)={V1*NHJqv#*?!3>BhH znvw8=%N$ojqP&2E>Xmw%Lh{&S@rq}rG0+{+V9cTFngaa$_KaYH*vXe*g2|Up#6wks z&i&-)Kub2iRLOyt|NM*7bpjo?SniaiGldJPFEm-uzIFLF(p9>nxhjjhR)I&snnRK2 z&pM%v&g0BJ=H(Zed$g({f$$pT$^%O4W@~@4u6EXG$jhR|#29tMmvngjg)BAp% zWqUt=^8+NAizg+hZ~UQH#ajA5V_<{0Bt+GqzxO>73z8a%bkhaXfsppeYBC2yJZ49QTeZ_tF5=?uji$=uT#pT=wY;}B}k5MBFl=DC(V`UaS7Yy{mmrk z+v>-Dnmr!!x>cIgEZN)XSQH}!Lg*I9+e-~y5`RX4Jn@!6`%7>^#!E8g$WQgWQn}^^ zCk>lDnB6~K+L@O!h4u9MOd#{jnvN&LB2>APOZkd5)s~2wR9dfJ1xMw}h@aK1D ziBURp?1r5jwMy!~(3m;ff-0j+D_b0|^oFG1BKvn8>gQYQSvyu)80@ZWUtXw6pUu&i zzF-IcrwnI*=T88=9V{=gkQABlqm$e{U!dOeU#*LV$vn2{fw=`mZaLVd0R$U_x|-on zi@O&=x{Qh`jA(utX2qkKu_#6rIoGQh(h9W`=>{cq z2rL=Xqv)Vbl;3s9w?iQHGKK77T3FZL?^!Ps&TU-CtIEZ{XH30C1hmkL7wR>rb|C6Q z%F4jJr%|C(g!bD=-*}KDzmp6ck05NoZ2R(CTanuQ4KPd^g1ZfU=9Ef0PU1+x2yu*O ze6|T6`NHFNlu^gwheelbLYkQ*`kER7+O2&Xi5jdDL$AA&OT-B=0)9~cm* zusiDft@QbiG>&u@hTQ%PjZ115Phw0TkvG9=Nz``ea>aP+g$?TJ$S04--RDU(Et~WY zTJa*XNdU|K$2?6qA6=?l(N@7Y7Iivm4hLFeDt#}S(&UD`5T||$KhFfbue5vY ztZd_50P5U$mc?G&=(c|unS6Xrzt=Pr)!G(+JPEq@*=_$|He1ryU|j_WWHCYWmS5xF zy>W{zs!3Pn!+&vBB=6sf8BnGnDSmBXV1_wDBiZL{b-z!}_HE^yU%kL!NEjBY%fBf5 zm;r+@$!m0E$qbFCT#UvwwSi`x{v=!(225RQpe+;D$iVjOE;oD0u81VA8zvppUu&Zs zUSrDPM4q51;v^EFUdX{Ams|vOXe|=B-!~oSzK(~tMfRqilWo8oC0Z1{V`-tJq>F5e z+!N6jP*|sX5N~*_-2^CONG({m4m=B1fw&E8gJG)i=RzwY`6E3Vo(v9CRH3QZ>`Q~C zdym``fYx{%4iD!{!G^;!>ExW!7aI33{gg%|fDqfdB4s9WY6=aPLp} z>nif6Qe!ZFDYAUWG0{TNCWdVSET}H23LkzKZ`;%Nt6E_4_y&L`P3&DuG!|W1R3+boZ7(sl+jsgJ8gS9A zHB<&HRqPh=G3nK&pOv>gNhlKkW%`A~WoJ5D7*F`vYru}RQ79?0g!&NY0+TOsDe9*; zf^!+g@_U2PGXw!|KnGJ6hu9?r%RbF7%p;0AM(NRb)Sq}ss!YCP-^MaCx&O)zxqQNI&-%a6$K)yTnP#zl; z*r}n1)a~EyNq~O82U{EayKgV1-f5}&?V8K3SRnB4A6BSnQB;aCd#uUBwal}JmKLH8 zy-SMIbV?_v1G81UxRIUxjYJ3ZvvWxPC{h0LG|^03Y;E0fZ(WOv)L;~vnSI+LBuV75GvsBL5st4a8FY;u4V!$I5kyv ztTlp*u6e<{Kkl6uKEPgo`2f5|?ujV0m_cH%hI526*XuvaF@Fco>y(W9RX4T_#TkVV z4OI7LdJa}pnEfr3%Ig5j?uO_=yJu@L=iei9nSEjR+ZvPm}A9Fg=s{FR1j7<`-w?n^M%nTPA?GKA(}4MjAfKX z{3I-~uorw!ow<;md$K*7-}Ni#oppdO8kDf|IW!$|;M+pH$MHdWm5sbN0nYc2ofizI z0YEa6?@C9w+%~O5KS($^hGr@&!aQ=)iLEQ}2xvIWgSig*UTKU4sdUqxJqGe^F;+I( zmtGJ&0s@6S3xL&0Czn!>Iz(Sl&fCNTfQb~j9(2Z(>DE%V0YH97TF0ZROkhV}6 zs2^Y$2gF=n#*U7L=FI=Fazd>Ix)KFF>*BcM0(1M2<976RT-*1Cl*4C!o-xN zmc8 zdU+a}ofJ7`)OU4wqjTCYfa%uDGcXbGbNsJL+7+=B?gmotq|&Y%0pkp#FH6@~TL(+u zFB7nb9Fd+WI@O$F*)>beTu4#rj%`UbR~++a?bqSjsn$O-mM{NADsYG-Zr*q`-scMmjW1h!yPBE5vaM}3C!c+fkLyCc-cwAjBzknuG2?HmuK8O7 zD~32V{F*HxCz4*DIKX7PCi_N__(2jtIFo@r?ka4492)>r`K9>U_!t4cPF((kWHTg5 zP9Rw6%u7SEN{w6y;-s*j8V#g78%!HB_3;ZIPL4SqsG14%h%PKxWlkf(bJ7%huYbCa zERJM+51eJ;W%Z9)YdESB??;z&mSvzr>T*08&ifqDA^NPMCEH{CmzB+pAyu3yss1yG z8Z(g%ci*eZbT2sI46rX5aX!rG_8cQgn8=wH^T;TItV<47a}0VE?WkbEPV@QiUZ2gN zeG}nbDZ(B$kV1tb&R@B5q)N)LUDPF?D>?3Hp+QB^q^7CW)qgDF*0f`)4_Y)^U)9Pb zPY`TWm&l|TD65d}oVRxu@$f-;dEp&50h#|s!5Is=bZ`^1O7X_q;)+ek=z*pyFR?_O zq5CUj@&49&YjAh2K$AvABrlkPB3ZG#^+e30uSYJk5O0I^@275mkQk6{{ZwkM(BpY=h-9xI zo5zT*M#Ps;;tlvWnwJ*kyMCS?*C~QQVQ$MmYP^zW$?nr8PN~<4qtTDjLny!vBgT=L zL6%ZDDnty(mfWgEoPFQ=l2=$?jnGUfr$RuW>{4KtlOV^eQ&4*Qn_ew* zU>%dKxiq2 z2Dwu2CLn(Z#zuwICl^!0Dn?wyy6)*s#gdWKaZ2~=h2$GV2{)LDh^e8eiWSY6Asx(B zSh!O750XgPci@5wNm$<;Z~%_9ikT{JnSvV`8H};aH}1<92>u4Mmm)v7e#Dnqa~6m zJj$|XG)^*4Ib=nIw+h~fJ)2)vU`ZMDA$I+Lo^7_(#>?tPl(Hgta8%VPceX7o%L3Kq z=h!kJrVLrozW4FVUX;SD8vsSgGu99?S<3G4|2G2Sf;WR?gxVbfau?B2=dz{qYL)gY z6Y~`=fdm~U%{aWP9-?JE>Szm-fbl6fVC2%o*1ql7I|b^uRGuh6Okz3hgQNdHV9R)WWACFxvyl=a>SZ+Gdqob$Xo*GDb{>e8m72I3^r{~GX(p+Wu>m<~eO$M56TR2PjToMqClrtFvw`jO)6yBWH% zrB*-Pt^HArmaf5`J{e zFwzR2dseemI_S^nw}*YQBz_TYc9b|cH1$~&5Fj*v5FLR=l zPC>)NEHbj1K?{N|BLa;?hIL4|?=}WywNM6k$#p6C4m3ermk6&m`ZI7VQgZHL;>Vz9 zVAE_snMk!Dd7bok%*w_SQE$?YwKR$(@ib!sdH0wjPC^lIq!oa4-OyII@%s56BAzu{ zw)yX!R)cr~vAvY+0L$0(yv3J@yYm2yvH4HiGLouHv?$05T*;Lb#AePd3Ynj^PAg!g zHIg?HeDdCzxq*5z4;UX;gdhLRZQ9#HAE-qOJW6qIdiKa|JqkXh(I3u>$U{ zmXm9>z>LTp=o9xNCvIhw9Q3p=wpZH~ftW$7>!2Z=V90W*b*ZGucf>k^N&;0xUlhS=mz)S2wwy|XSZ!EYx}$T_ zjqzX4rZhSjK;odk*n`Y*5DF74okcgVv|86f22?oy6P(_Qx$mqsF@O#7_d%7fr1%+#0DLXx$rN)!ogXUT0v${enL3Ut)*NJ}_IbIymRJp=@fLKh( zS7JL9j1h*#cLWR5iJm43jj+D0cH?ssc&z#YN~|+T&;j?|Rb+CX#@?enjhWo{lU3lH z8Tm}}>818wktX@{$kM7#-~hy`oNLL{rGf=)q6Z#GXRM(N6gJZKeyg zR&w{KwiTwu!Wypz+9SX zT}2-+-|jDf&2{O<-RNQ9;lJQ3Q);vZuV-N<=BRlUttq9i1a?PTrAKQMdFVl@k~NJH zlBxW>PMG7(2}p* zS~)cf%`C1_7>P+Y&T2`=tL;ysh_~~DZVTMcLRvd^220#{2cYA6=D;@_1jYQ|)G9m{ zdLB<^`Xe;HDFctsm=$7yvGPV06yybbH6*e53|v(Gr8y0V*AygvEn=`keKA zJFoXmq{A`^gVDFp0v2O1D1?KTgr`uDbp;c3QZjrlq>0>rPsoS zgTCYOxf@H<6AzZwu*E=zjla6GW9niT2L+`xcts(uNOJ=LMOJ`9+B+OE5F4nyum8rM?RBvwX73pQ&@`CS_gpTgYCTBkTD{ z(JHG`H>F043q*^c*MHzO)?$n2Dl!w$TkU>toel=w58VfvjRdJ#i?#OxyoP0ngwNMJ z3VAO`_jlkP1i(wX&PV9l znMQomdNRCU{JdB5YppSQj@O7=b>PyxdM=J$}$s>(w{g{Q?dg}mogS__5udrgOB zvqANO0Ox}s_)=Dhqr-T4hI2Vo^9Ly}%pOtLBAR;Ti#ze{jgii(>{~_R76rNd^ORZ& zoYAK23`TT5#Z0qX_=72yRpHIF$^FW-rQM4?=jd?Y{za5XIthct5qU+NzNj}Qr`7Ot zF`S(Sx;{e6``ssCiA*u;5+|INY2%&4+oZ|_0)F{ts5qPgo+tMWc~32E{}4RdIJP!( zDU4Fji*9V2Di($Oi)(u98{130Frge@Vq!s6{F&r&ZK@8pQ6vQB*+pb6=7k#7A|sS^ zRI<>%qwQ7L!n8wJ^jATLl^x3eIm@OU*OxUAM(mFc4cbVN5nvfrbY}=D$}y!T)QuWm zBTNf1V(0TC9c`{^H#$H0Z*VHGaCr}`mP zp3;FZo}FtYDYUEFLq^9TB`sEvGU@!#bb7};lWTlIm7iX+NG9F#c&MxlDek2Vm5E%t z&on)jGhurI9Ogc$@fg!yAF)4nDJVUp_|})$Mz$mjSyZ81iW<)#vM)#9%`VHgApu+$ zhVcCwr|Xd*M8`j8$nR64P+)G^^#Knss64L%0SGu@m6w%TP$+og3Wg0LPv%sqWx~tL z-%ImzY^p!rB?RmF>1>tHtFFb@FN_n<50Waaz(OdJj8h?94>oMWg9;x*BxY~vv{n8x z{XTg+Rs$_9Wg*G4XsIbRPx^H`GLysgo&~qC8Q!^8M>Y&TW1FKX1f)M>rx*!yvkf-0 z$g6J|`50|dv333)MYb%c&-|HiAb14>?j=bfUK{X0jJk=$AdPvs3*v9W`uoyR+6&~# zW{^o>kJZ%>MH#w#_q)~x*Zev&gI*p#3{b4 zg_BC>_3|`ETI*p3`i32G27BGQRkNff1K)1uq6Ex)&v=fCe?!nac!H*GQ=kr zT|W2nubd-5ehUS8jN;UQp|W)Lyav>rCd~QdHDIf5mv&EvWeX&iFbb;QH3vNd@>7~_ zQ)?v8o(aQBE97OF<>R-$Ht&x&h{V*fW)4)o|AI!XadeQg6T+!+A5ritu=w21Q*d2u zRQ_c)RP)`_pE3p33{^^jBN<&a!}Lc^oCj<|_AS+fCec46uv)wHFw4x2JZ=vqYH>=X z33AM$UgP7K?jfL%Rc%hIIbc0?qF+DR0?bN~Wy_4Ga1*^q^F2EUFuvGOL=?{?+{5%g zHV$kAGWFvgvtUSTxauxm=F5w86R6Y z{H?^j5^!Yi{;WNcxdm;;7miNrG8~ogYb^~gJs0KW-ILhr1dc!Ow_g$|&as!aw3?sZ z_iZ8>aCzQqFlO`KR+)5fq@7iPA>|~2B?eI0x;T0=<&0_6lyx^;pIoh$#C{INGNoUR zVL9p7jpUr#+v5iYH6z*~r+@nsBd8&>Cn*68jYZUcqO|XnFQ%JvW3a>|VN5Ggw!kNk znZ8GSWRMORo4V~B=iF2{Yo0{sd#R2JPFIHli5~Jq>p>TaU+E8h;UEy_hb#Lp@mKKO zPVUyPE_8b3Vc|7SzrlFzULtGq^6cT@Fe1hG#!S*s!7uFGr-7{FnV8p%0uj%BXE1?X zn-bJWlFm8^`ev^HpTDu+k2xJh^!Sn$P@j#mE7x$&QSofAe#6eh$EVxl-FW=vH-PXKD8#$_z8KttDDSw%;V z7uEMa(gO8@PxWyMEn`Q46YV#v+9gL&~_@#sjk54{8f{~|%peooXTix%&OK=|H zW^>`bBCpr~Bu~Ff;Pn<(%kIn+avoE1*3T>dDtLK1?-d$eyYa9F!_XTgRJYWRz6+?M zd!470yi{N*H;f8}Q}@%<8>bOIY!vd<_nnpCb+EUDLn7F>h2KC1#Viw<@)9!cl}?@9 zG9_);d*%p|Couc+U4NkcbwwUAJHR!0IV1F6>~;O!-Miy)gBAoR(`Sz6Z+a<7A9=^B zFazn5TovZENeAE+7@0Un%F-)_Fer1zSa@TB#}qR|q=^q=?#-&_uuQMFXlmjyu`dOR zK+GEp=*IW_DRL=dArs~GXLGzYZhl+qGrzjZ)*S{1cd??3uCLR-D@}mson(f=-b>)ioxpkDaj=Qz9@ z=<_+>Ql$*wfhm)~Cnx3V>z?FkeS0cQwdBpH)te}`He0-}X3Q**H$722Yf<~$v@~e_ z6?1Sx^8|WEHO&6OrdAT-l_qD}uHm_{<3@@Nt(|p6Xlc_PZT8Cb79Bud>;JXn{q?lBx2GA? zE(_2#OxILDZg-0%uXY$W9MhCXIWwa=v`H1h?7;`%Gogn%I_Z`cQ2ySgG)dJDJ#kxW z(vyoNvs<`ilP6rWB(^sJb~;yb)A$Ayq~ZAmuKjJFe)J{sf_FN-#_xaq6ZSNs?<9Z zFI;i!{;r`;C$^5@8#v30&-UT*!b_WFKo?+$F2t^Eeo|84aK_K2?w# zUJVT+A=XpdiQ2#C0oc)I@RRxv0YD(1$Ps*E-%Xy zhk}o0MQn|m)VkDuf3u(e{PYGB>g(WF$G(17{%reCF3j`;U?g@^Ei=~ zFj5YLc|K6E+=#X6Dy<^69EroAF&KxjQjsWFR%u4(bO05@rGjj3X&pMkKt73{pOUF+ zdLi+5(M&;s>KwN~4ai(IJBr7G*wSC{LiCmLS{gOj!f+`~H-0C=_x47!vy3pRLs$3~ zFvZP!Zp`bN8tluR$FOs9gIByD{Ltb~HN5(%VC~NGeB4iOpMIC411Z;XLJW zE@gtR*k=PaI$X9-0dIgLv6|#M8yEKXatAKnFwg+hBRID1oK@E0Lzv0cLyy8{H85qe zh3rWM4kN8&*Y}c-HoLs;pqC}e^0XpH*683GlYTA8O+G7HtUnw9b8gq3-ZyCx*PoGC zB{7!n6vx-K9Jq<-%$WK=xZSSS3}#|BzH$rEaSJ9_B!OhOai#en6PN)$FBzz%Wp_b1Wnd`qHaF*=JdW|DjZU%NFsac|Gwy#+ z@D@vMw{_|AcPwC4JuM@LrO35VFD~G)kvr31*N)yzEi{xx>`>zS10HX-z zw|?><7BE)1m>QGUII|dOdZ+~|U9S~Bzq9(oNY%Fa;9d&cmv%LSt*$OzT0I?oZk%sP zm;+#R5j|K0TLP{pQw~a@o+PaSzO{9WP0HOHID)b@dH&C13MbZKU!POUpA&5ggl}s8 zHzrngoh)L8tbzD-d}q?mE;Y(I)r;B`jIjIEFeRyGhZ>x1RFGn7#y0&T1`NkB<+~#e z8sErl(*3HWL>zWVU}w0fS0MRo z^KR?k8Xpu6`zOj;4h7QP<)`7v@%?^^uL+rZv!1L#vwnqKe#L0>1v-9B;$eie_-UrP zwWo=*K=x^Of_^D!q@Po+EQX_b(HedqUUo4_oI~B5Z@H!4xj1O_>ogp(`8-lu`En*U z{gef21<(r`i@UN8vv;AC29K^cFPwyfShmE?D!Ag+9WCN~RMDvW;dG-DQ344QIbn+Q zkCqEbQixk&w?VuR#+B}a+nZ7=%o`^CI@OW1Hd?JAzzJbDyuW%cj4 zJ#0;NnnTWEXz0tL3f2^+OiQP-v}SLWB9SN5wRt(8uh>u~7>tRO)%G;Mmzxs*yUn39 zhh^>@p$`0;V0OQDRMDq}`_T)cY@W|7EJRs-qS2$J`PF~YEI9_0#3E^z0&8cMX%rr{ z$(6RL3JhDlZ&YwioPNUd7OG<6ozF)C3vN<*mqaFB5s%eeV4!K^Nf1UZcA6Y%ChfY3 zIQLrWzcv+mdKpS%L;7?_V%f+(;K*`5yw_ArTe1Y|rygnV;c!!6mgpwpz-wExT-EFB z(LB_&(*D3R_x!ZQC$s>|Z~TZ@oJ^>3=W8{Cs@|Io&eSh!tQ>_x$iP5Fl|hTKO8R43 zSspq2H}mF10cS6#t|hC#1Tu+qJQ`gBFqdaoP(u8DDjefimxrbpd{- zx9!2fDPfLoF^4z1!2*#hdWckZmm2W1-J*L;pY&sXl)sQfvwJ7JhRQ2ib3|7d57RbB zx;L$Pe;*Lv8+IW($u&oRI^;jm#)a;2bZ)%2ct6byoCY3blCEp&+qKA8#^oBUa{O5@^TH=qU z=S~FDN%L(?mlb7(B2Lzz(2u8q4v7Y z#Mg{^@HW1*+|J_NMKdmF=YR%T;vIzFTVChn7xe+~zCVY#nG{o8rLueQO7EFPhAPN_ zl+W*dKA!9Sc%JUQDzHGhRMhkZK~%=}pehZ&%E`mg;bl(UA}kE|Ze()lWaEBN@-sYk z^XF6$%TYHm_C5Hdoq%($bEsy}JLaH)4x*Oab^kD%gS`m*xpl5NY#6GDo^sM5l#r6| z7*x?Q%_jHdg3oh1{~$}LGRbuOG+5Y3Oyhn$CE7fBNV41r4er$x3OU&*Yp#RYG-;o0 zh&Ow|hXuv}}5;G)w0O&}I5 zn%Wy70TtxkyvPF;jHgNbgAh{xudyUlow`;Nv}(4UWK(NKV$h=OX~yUM1505f@C#91 z?%#3VQZ8yH<|RX2wrKr)))Uq=0w%1@aeHJy>4%z|T=`(ug?(TxN+X+OJwHjYYzjy$ z!(>^HP;VXK{yaMph~7^ci8U5YzirdFU(z$XI~^J!<4AjDO0&Wq?KLPaJHKK6Mvh~q z5NQ)B#_6rg7j^Z>ZUk#^y>7f6GqG#qY6?@)g2bIc)1t zeg`$O{1mT0urB(saO?ti53lUqHc_<6+MVXd3oQ;6H6h}gC;8lJY(yV-XT@$z2%fRI4eZ3fYd2O8>L-Z8(KiNke! zBk?4-SH9$KLYt9r0nHNxqNk20E~TX-N7>VCXYrst%b~80uGe&Z1Jw{hE@7q-LcsfL zdw7Ib(@Ry3j9O;ckaEHro#rpkfD@G%CAI@Q!Ss;dM#sPd{iEARoelB>gFy1(Xb-gy| zNIgT(tVPcf8C;o&z*mI+C@Cj$@Ki0)Muq0BG8Hn9XbdQwVY7pt`gujc+rQBIcs#0JGT%4YW8eET84bVp%Y!q4W;-6w*T0`zeoy}@{6*_3KWTLTyW$HRR3oBh z(1K+8=^`)7m`FHva*WsA8XMxV7l%Rhs0v*MZh6(Bgw?)%#LU;uESxU-<{lNZ$vK=v zZn)ZpAn$^F4@@W?UIQB%<3 z_tuzMh)jI7psHe;#$S{T@UgMa+G5o^VYXB7E2#&p(WT(eiL;NDqDUd*hn(%*-QCxYND)ng2$7)t^ii!aeZlqE;RF$6(U!^x z>CL-=zxPGd_J>FW0~an5=l0ILKdZa0+NF?!uP7|Jg)rI!M5iGT4JzfS0ul+<$5GSa z+hDGjG_ZQRTRpB~huU=<>gcC^x6av~NE%$=!$5K@;0=)~p`|~3qAgisvWVW0Wr(4$ zi)y4yy}(7nr14FHV^(*4$RSK0fZ)m$9F|<;FE5O6uK}%gI8Jh*v3X7_8FeF)&W~ zyZb#3=b`z0SbF;&2zP3)#*aQqQX-W1)jvH1gwlPkV@(U>&fC16eVo)_eU;dKV!QYz z)>Cj?2^k?3gBXU<)Mqm^fQlG<%0*?7bV3+l@I(;2?kGTQv1B9use(5AAb5Ppi0`HH zNT0hQ&A+jpKs!9m{r&G|h@+2CR@a4tuBc+lSpv!DdQYSGqpdEF=L1O+rD+)yUM}%x z_Q&yX4kyeoEF&S$ZI*^Sk-vnBD&AIGFD@2vEt^EVh46_!xV3rQefGnBU7b#G&cZvp zTYZR9GqJ}AAHI@+!(Px9SB*$Zd5hk#e5aVqFHAG-&i#&lbp#vS<~%gl?LygBY3YT= zR7!1~7C;x#pQEn^vdpg=Dk;r{elzX8bIcb%-~@!zXE-I9*zr^aiN& z*F*qsmC=E*CL55i{6VI1l0xq4`*lb(X7kz8Ok74@*;Y}A2|1RiT2VEcSy7%zFPW4h zX||MHaUVu4rGHF@{GE#qm3KsL1;RkRO@*AB6>Nk>mvN!{kJMbCix%phG~o_QE)m?y zrV6|f+a)`_I7CZ~r;A*7{xbY31 zmuu_psY~)LcC<*eFf>2E!>&qdw>?^@_7+Eu2N0gTg!HqC2_s`xmU#a)UsJa{uBfDj z{mB_F6!xtE;N=#*1?F+E#YUnA)jSfcTY&&#a(Ck8OKJvOTvN^ZW7hFTk?X}m(5YmM zAm(I2*(iw8zfOagBByv_D8^qbgT%q1bT}fMCOO1WtuS4fS%kD%fqxMj3<9l^Os8TH zHu(JSw}De~?#~IVID8+0EP0ZZt6Z!OCxe`v-fPZYk0${Vlp7f;#O^l@|Jz}I@%T|H zf|bPR=;*U7(o3{Qi4e;4*}z>VmIC*Vxa7)3Jn-7HQ&L$RRZw?51FPS;`@fCIBZZ4$ z3PPmuKn~DU`vM6U{my@1wOei7CEaXyN`V<7Ea9*@lTI%qhCEd3ckem#{V334?wJN* zDXb9Pa|F%e()=NQ|M}2}gX0H0OP9$u*_r5)4=GLzvKt%u6LLMY8 z8NV=jqpa(C*;|o z?^QJFiPQgnz&{*iR>)wj)EG8%eIGumfP6NK_g6{E?O~rFDg{yu#w#5~RG*}Dj5vZ; z<|uXFPiZ*S9|_3j@ahfWdS<$>ggUrv{+f9dMv{Hq00I(%l-=l495MgAgz)JBz8fvA{gcxj_KX_KqU0gmF>=(Zfa05)> zaAIdyNkf^i!Un}rS@8avng8XTh+kiTfK z@a!sTh8TogA!FQx8>qk1iT9Yg4IJVf5p8wdb-VMozaK3h9?np~7v1HsQu*B+Mjw4H z4=SE~>hn7M_rZ^}@cVm0*u)%fGgMoCP1qH~cgrDDxN_%YA9zYV`}cA0{soDSJb(Z^ zxKjD}r;XUN{)4EoIj=vwFYF3D0`LZP9EmmLP`}kCj7K$4Zo`2ZSjE6RGc;h(<$&$D zab(z9kPz$R<9|vk(uzas=4}b_;91H;1Dm3%A2dp9=OM9^Y2oFuzeh8$zSa5~#7>38~`M+;uRR+_P1xgdT{EJ?1` zqC#^xK{nKHO_H-IZhYcHsV7B+h9IIQC#Pn+&jnN-63?+$@zBNG+;~=RENxa}Kl zv`*rzEM(WE>ulA{6I@=_{(WE(jIbig#T!U4j^0TieVNxM&^~b<0AFr*&CC(TTQ*dQ z+4mH`2Hggq2AmDyXkr)3IObJC1K`(XEW=cRN3k-Dv z0ls3qbgs=6%p;*7_GGHiA5zhUEo*P#_Om7g9z(exW-9bO{Dj1_kddbuUB8$68~17a zwI?O!tW{BT&w00`ShvpKN;WZScr^vJb|tnWGA`e|PB-NHTD$+Rr0ej9!hhq&8Ha2l z`>cyYw#;+(Wn`bdSLu)yp>V`qW|0xTj-jwI z&-?v;KCkCNfiQvvQkb@h4X8?^?TB~tjnkd8YkgNXa2%<=V>3=&jY|R!>4k_FHj>|| z2(8^wtXdCRZZ}zuAF>0@zI@u&WHwJLFo8BI2Of%7q)dtAxu|6!GZRZk&+H0#f`mcX zFUxhKZ^s*xPp6Hw#_gxik`$m&*OS<$E^tjArPJO?e>)eEcJiPs6Q{JuPo5cH38xP2 zqTiQ{i;7wOv>PfqX zq4ydch2Gv$GSZy3Wn7#%BIIwc7HQmlpUCmkSC*@ByZ*xU50z^z{!b0Ho8UY>S2KC^ ze(h|dGz0lA`q!`8h1GTf{;rC5Ha|P+wSljc?S6nk3c8&=U1B{LB=hLH8RsXp%a-6- zI3i8eLfglZF!&%sctU)pra)Ud@|<*B`xzC&!=S;QCzNdZEN3b;zq7egtR4_i`z0*9S^D?CmA}%RWYrB+J0{aTm9)_zXE2x4FM_euMFL zq0z=TA6-$eMKZw_;_b*u#EQ_BT@~k15)-La5Gfml!GSb2Y9G;DY|DE6@~%o9a!~u} zeer8R`@)70{=IR=kKQZf3-4stt3ux^#XM=`93$0;l5IJDmb}Sqk>REj9=y>~$+G)< zw=|W&_iY^=dCqeyy!|vS+N;hgh)Gq$x7*8c(XrMR6nv#l^)2QS5}E zY-;sfO)fe{Ps$&~4V-!q zkSgT_x<++vC$O>r$I|&!(5+;4jCz5C>hUR{Q$W(a(1l9w%FGvnfnwIw2rhmMGOOGa zyYc?V(1Ll%`R3&e!HZ|rS$+5Y70#t7nnl&dJ{Er;fFAvV_W4b-*yzx6UZL;JqZmgt zF3XUL{bu$K=UyBbpnE_|?FJ&I+lC#PWbFTaL#Ekb8est%WOpfAN1C zc4Na06H`55_d~XKcF4OzV%lN?JLY-ytv0XG^I}tc#JRb%Z`mm5=Zeyg2YBYq=YVnY z`o*x*6qGj%x;}{cJYMT}h%NP_#>@ot<4V7vVB?I4P)VNJw1;&fx9L(&4H?e;J%io9 z_nvGmS7*&aVsPdHq~phXsmHba~(u1f2+G1f5wn8q${UO^iSB{$=nt z&ind*;=JjxlwJr9vagh#o{IgMSlhDFsSvrRc|OcPyzudsl{eFvGP5r#? z!W^n(emfiLF2T)oW_rLR&Up^a?DZl6sISOIu^si^9$sL~eGykH+t^k0?0KPk?Y4pC z@=#dHQ+?Q5oR5f0bRbU>q`JCZ^vOq63!%L3dojMBBdtXfL+3;X8ixXtkGcPbv=mMb z37x=IcE@qiiSfqfN)Ne1^X%(XSLe&_xZaRN{b8jiHtYr$B3c@^(w_vH)=& zbLlvA?yL^YXoZKCH4aP_hB8Kp9!1;3zNcKo2;AWA zjOaxaQq&=7>I|v(HQt=3h>S+mU2|`*37<9Ta+&Z|m87HNo)WzNt&gmOdqUk~e&kAx zBOjRkptAPk8V)tg~w9FfEaBJ#8Sg_RBDG)lE~;%~gjdg_!U|4L>mgUqJah`9`L zYaRwEru64-16@jhW~!{L2rezb*9UANJrr*A%4`&2zyxo8XjezwL%m8k>Z8J>Wz z;7ARpdZFUMY3dMMfk_Dz=Z?zv#%A59ST+bN|M0y$Gtm9LThR+F=Z z9)JJQ!?pj4Cf~T%&&y7}$jw-GMrbRx5F=ucxR_RC0nYd-TYkxjs5irF`hKUaL0>e; zsGUr~2Oopz9c(?L^uEsm7nQwrtpIKYq$#z4d%qERr2MaG_Z1^Hv>1op&(k#s?4CUF z5)5WPzM6&GQ-kcZ#*^;qE$UAjCe%BwuF)8WCf@vSaU%YOz5d(7$g3t#)dzB- zy{g^>=IjVx+fjf3Wz>cXDAnl}vHx>$OZ z#m9(|d*_PKY$RG1(mp;N3uPpM0a;)WhXQd#K}pfX3o%UuPL6FA z)Yf=bp|ebTu{RPbgeTdV;JnE#V&&*vaFTW@ueGSiO@FR<|Hst{ zGY8Yyx1i=+${l<*_>5TIYMM?ZpAFK*I!TfOcD?|&?`E1y(!&;6oO8@|X|H{7W)(i{ zbDG4lq`+Aks8DPUrx9Yw@tcgze8zVqZ}P)T9yQ;diM>yWAbdFd(!%ll zZnT$oNbJFT&!~^Ay*n45H$J4@^68upCo(f~ZqR_Rb~j%$jAW!psGr!z=TX=NM;rYV z-OYdVIfN6+XxGSjM|c+WjvJ5X{lOdO*ACJEPHst|KM8Z0cfR)1f7?svir2J1c9z?2 zGalvuMzAU%US@)-B9-F9fpwXJ^qE|Yeu)phBewd)%mzv>O&zC%u{81)3CQzdY#hQG zw{6195zYc~T+dk2Ggj2quE%-Zx)&^4Vq$OO5TRsC$O_6*)%YvdcMZrdg}H4|B-*Lz zjAYoP-EH#Gafh_Z3*Fz`jgI9Re_K&hAMR){cQl)T;x{M6(-n9sREfXdQCYk&VDg@G!?d|m&IlwH0-312H=5D5Ml9}aFVBC zn5fV~D6w3);*mp{JS+&v(W|iH(oF(?pPl@ZI$w@dL-njcPU1FPrKpN&p2NOLQQvJ?Cb|*wK10@o<@z3x zjUyGD&WVtouuMg&aW2fnJD%OCR$rZiyC!>$Bk$D2MVU=Myw1is4lnr;T*27ZL|Vg* zFrRmbne4Zf{Hu!tF=h`p#WsK=xmAh3Q_$8N;N$3`Xrb3|+krO*IlBojyUsMu%m3SD zcuu`J=j+T_?(S!o1yxXM@+iDh=beyNT=e6gV##fSn4u>gBUGziyk@trBqM9kYvoK$ zMdr9K`KT2I&UvM<`a-kHThwhkzDqNOBVTA%4_-hx?MHHvSk@1jb-e%8gPza9elD!a#df!KX?F$6aHEH z0_6c_u;hRKJ5<~l22Sw|T#lZ3V45Q?S!AjNU)-^SEiAQHIOdZlqh^`}QPyP_yfKk@ z{06Ghab4jig7V?vKV7^=o@S;;QZ=<%fejNCT*gg0x+_a1%XZt7cUzN%01UL_Asod* zRlj7`dH?~Zw`!HQqPt}oLY@?u(Gq>dN#p*M*f3kd8HSht(+6;ne@*oW5%WK2 z0d@%=7l01*5~S6eYkw)a@^a*_f!M_T=vspj`}tI^YRi%69!?DYZSjoSxL=*3zPusw oJ;VY(zbp5LzLC$Fmi*Cg%GWG0Ex%bVB~p-&iGjI(1I#_)|Lz|SCjbBd literal 76636 zcma&NbyQT}A2tdi9TG}N#{j|*lG5D`0z=mT(k0@MlF~7B2uLYi(k0C>Aky7K_t1U$ z-Szr?@1J+CHF4Hi`|N$r{yfkA#B(Av)fMn@UgMykpx`Sh%4(yaJR5rYKZk|!^j*{W zvhL{z)k9lB8l~b7)y~twb6Y7jDHN3IINUo6^rvHNS49I46cmE)|9w#VU4DX5P#z1F zWToDJHr>DX3ZPVhZsB60ct1N^3P&E!h&$PM5B;${q`mY!fO}WWwzY_e6t(<_OO0)% zf8$MjM)R9wc>t%TM@BnIw(?F1#`Y3NH#t2ap(8pndg%R2Vxs?AHCGKxfZ@MpNh{k$ z_1{T1EC!3%@PF;y^8{`M*?)~HNHLA^zkUQ#Ohf;5Bl=25y!o$Jc(@E9w#UC-vOVfz0HrB1Zud_2_>CzViwXxek#m zPEiKTF3hFG409MP|NYhU#>fc3_;+$r$nIxlqOZ)iiRnpY&eUYZ%zroWhnB(O0Ywu` zAL<9}uU7-YjFgk6ryIadelmLe9F_KlrsD_A2{wO9D=U*@Q-VHv{ZjOCNF?6!F0RlX z%Zm8*@2=KF>4`TlQF_R6Pd2Ag9G#tE7*p%`i?T51vC>9-h;L=HBW zvATtEN2PrJuF2(R;^gj`YowEU_NzfLk*2hwLiv#N-$QkyA;dmK%>}Vi)Y7EFZTL-1 zx(!=7Rp1UazoZS5dkgsudb}NTrjuS)vTNzpl*zu{438-!>JHG!KYmt2`}y&UT3B;%}7Q{7}&@ruwI z*h{$9Tc~RQnkZm`xIuJbwb0EFR*$8=zM_YAM_J0PNJnPIbjQB>b~D}NMCo=Z;rYxB z`+(Gi<~er3ijOK@wxxVKC;yfx{4`i2gFDfaX9UqYS*KP@Oi5&Fm;hnyV-Fpa%WG#pzj5C?*& zH#0ukjk-FuDC58*H#Pi%hCW~)C@hl>7AkLNXP5LRh1t$wvH;vvSgeIq&U5?zh0yBl zpG_X67{Bv}}$PO{>gti6(AoIY# zle$8T1H;PE^F}yhQ$grWxv~_rV7;}{7l*H|F&IaE`+A?5A^y82JPuba%`N9Q7X%RD z9QXn`v>()D9IZiW?O4J(?tv@d7Kbj+mQFZU-d;Zk>}k|pF&&-Ni?6sK-8pnjiJh{s zbF$|XjBd^V2W1zrsTgE#lif%EqYiOu<9A)r^XT-8dU{jVrV-pBp9g`kP8LW}BUA6S zb-FDwJG*<0{_p(F&1)mzb9Q$Hqgp4U49aAxt->~bE~jC1JBQwyg%2cW|1l%O?@)%J zMs3LuCBltrm=Hx~S~8JZquCG_XS#;Fl9DH9W}S6WgmK`jrqVV8?-oP;x><4mfkr)U zp*WcL6=$t=km-M%8?tUpVxzajNJX`}2(o@UpExd8%dDY33~z)Yc4i^z-^^-2u#kY# z@?vO_Z@$_e2Nx&kpL*t8sVK?ciJ=!#X$R&Q*+6Joh(=x3H^O@9YdtSu}|&<&$&=Z6M$ zv;3n>28K1(clsd|kBD+&+-S$ag*&L)9A!=hZ;hz1IJ*^z2PuuSou}9pV0tyxnCn~l z@Mh}5;wbQ5jCyRE8VHLA17Q|jG`L|QRWASFKt!a_+eAMkTMaU%AM1sxs*b>quYN^G ztHG}jSks5*9J->ZeN9`P81V^JiiRdLVKltE{1{EdA zs-8>G_tWTW|JP5c#$-`XQz_&wJ{k@o-k4rTo=v8S`iNQ3ujx%q4I3_uWi@EJ>U%FU z4>p=kOiqHLH!hKC6-h}{E^Jz+NrQ8aihFWuHxz4GFy*2my4f&w7{Uk8U0+WJjZv}u z&*f>2Aps1P?opBw#~!I>3H^3aMn(~AHDCH?J?FH@&r&Ws{JDfaSRsuH2vwRjbTLAHLHZTfPKow z2@GPeya2tKv&VhWFDo97oP2QJInc{nfC^6Ic6CuxC_~vPPnBc&tLs9nA)JJWNhQE= zqPFQbf_{Ny?)4GlNxE6zO0bA{qVe((VE#TCkx>z`?dF>`!ua#2d$FTRn2S>~pA&ql z-dSay)Dvvf(QPYID%(^f%yNG2Szoj2lWhBs9eRx3ed@vsWHhFFfPs=|#i>(%aP>Pu z95x_hb4jVCXy4q`B9L{RoK0iXfNxI2Hd+-WIC`TpT1x_5Mix;T$Y$tDa)e|gzpfsM z3QxaVH#bjP?mXbsI?S9G#-*d{QbFGIX9O_)c$x9g2OLhH+eFB-MBzOCLR1s#pckC^ zEBc%E4segk2{hD$t^8D`1V5GrztC81fj;CqPFXW62y9R~=7CEIWRXcOoGe1p$AA&S ze+WHsree1U8&VtLoLgh;5T#A-A6X`MGX)tZ&o#f^adt^?Kr?aQGt9v|_sS5F_iW+g?LpH759cj)ZQ4g%dnJJ&r^B2#d@*0dc1VvoLr1Ph$*@& z&f92Rcz|AwVxQjh+0YH$Q2y!U2!4y{zZ@zZ%&|MRIBKb-P_^6e5-DF~)w=r+g!!vz z*tL&L@tmBf*O}ShQdzkAlYwyqjDVqa9XSu$5B5J(OM@5P_v|Yd8po{I&+7R2XONS! z{qG3lje%v>fS`HhlxjNmx6H}(eVaCKOO=#(dmwEez|F07Y!t@)Rnpxw9?FDnbw8c- zq!)^cWopiwoj#;GT4>gk3j(cQ`#ej3kfa1|NZMhPR#DFg#m2eWwSYO_08iR#nw?Xw zHqP-4)Gj#6od@Rn!l34W0p$Yh-iC;l&?d9zmInxmR6H!f{_1_1ifV1!vj^bjn5G#E z$8gLhnZFwRaZ@u6&tlZYWvXU6P=;yv-x416C=hO%)ZmR~W|+j=R`zZD=&#(E-Fus! zVZbdtwK!|9w;?i(8C@l{lz}{lLZ-odSX`?sShx*MF9%MLX-Q-X1vPwZ8?OL=*p;Df zO*6&|ZVdy39tKM8%=#=r^Kwq6Iy!WN=iii}EuQnQ2HZ`eXj~>os59nd?avmd5_p#4 z6l+=qLp)P^Ftp)sfxSiD7gj_d>lx=OP0rmPES@k!HV^{l%|Tpx(E>ARzs;zdf6*9UJ4q*Q)Kz z)4{~}D7Es)EV1&?B+*EwjkKAo`9Er*ihXfmv1xlXqOLxYdD|NoX9ka&CgJJ$#SrS- zX1sRy~MkDE>c&L66 z--Qq7WrDm;-Ym_`ELD?oeaI%`ALgpCH%!PYLRSNxs+HMcyo$H+_~y#~>(Ip!T|Wvx z*6FC(L^7$Nnv|tr!C0p(1@w*E@u1R~uB9a;l>=<}c;k_(0)=l3l`Ky$(&sEUF$7#8 zi+oRK@lOFRF0lE_f5uI8yB_?+05@T(tOm@E3nR)YIoqEMuo+0fWvQ1g_!%8MDZ_nX zGG&8}nygBn%)sGpkn5NvGWlfS3rd4}Eb_fm=&Z4p@J}X+i?mXHvPj2o(A67tz@Q0C zn#qE_(Ufo3&6tx8CIpzc!$`$tgndQ3!~nKkz2;&$Bvt`MS5sB4d$iiM_aACYEzu9) zs+87LwX&%+#}!gI)U@bH*3+-NYO6Q+$)Eh|s)?-MqS-r=$W)AY+a>hpV6tTFK@J1` zfO^V73wYUK9Q*WBF?hP~oMHJdtKiq>WbS3C#KT24bkl)nX4uB5&M3cQIdy`SCkD zW2uFDH$mz&4wuQ_k1a4RQV+}DU37ienaaQ-xt_8K=7&5aCy|+E;D)gp2y|HAXY1ZZ zpRZ;bmm|nhaig3A=jGyvH^kNMo0n+^+?}Ef5}mqenINfp4>(}TQkQV`gsT@0U7=4g zRPV;Cbp1SIV~}2+Y7jRUO9g4^g$OQM>J_;aK)@@;sjMfENk(rtXGR4?i>boZyGClE za;Fko&6AUydA~(#T`$q)cAqJ1VVg>Q|Mt44Em+ja#nDJ?v3=A9eBE)k+J3kBfKRdS zl$w!|A9@k>f3~fwiDT1{bp2bxNh;chpiLU!63VWSHs3gKGL>y6hAgt}iL=q% zHd|hY^GtyOgR}SdZZe!QdTzSrfUfIa>-0CAu%U%KK*~wBnYMPcNGP*M|KB?vh>M-4 zuHMX7bM|UxoW9r%@^Mb?@rr|x4&UDI#|n?DhD2D^)XK4k{!<(wLi=-GVFi&_dv(3P ztuXz8o=XI0#G)*urw8X8#l@w`-viaJ7gHM$IZ51)!!FM7;qRs%nQ!xG{^9$CG*&fD z2wOk&DYOs`5aS#%RhtRvFy>@L^P_e@+I-dIS3a$WynU6H)lgRf7HTw0+A>pYx{@8| zEe5vMEBV(XfRZde%O{-+dzK4Ca7DGqoxXzc;WLwN91;?%EAf0^KSQ|Y_dBdE%DWOwQEa0a&Lu8Jo5qDkb&~ z1r4Qg?ae-F4-c1@8%G^YjF&Di<|4m<8vcX$QeOfV?~j%CFX!iz14*Kg6ZyX6cUGte z2hRNZ(R;y*W3y8Qwny|P5ji~ctID9HD6RsYM^)wc%|flrZ5G+KmAB!ar1)^l`q2R} zLWFMz__QrW8qXRq2sDe~zow>3c{|EpMKzKEpa?(!0Pq6B;k=*A!|5(O2^@OXc22{0 z2`A(A+|EiT`*#~1Lb#aHRPU;fWKt5Hq{Tf`JHCUu@~L=D!_1^Ifjr-{s$r zH%YQuy>&hL(%@eiv9(GrJ}J9puG<@X!JL_NtpI>O9?$zAHx}uQhM45x{~WR_{#e;G z`q)N#)e#QRc4I0d$!0e^h`gclGM!T1gPu#bNsOdlnNr&{GX>cdo@7g_0y#_|-rUkQ zph_l|h4|hSPp+`0rla!kB00(PA+y@uU+v)RL~v748dOUe%GfJ7b-7N5rHzhd*dcT~r& zfv)Zv|4AXLEUtjsLl2GCKG!)PkS~Xx*34!h&ZPJCWisd|(#s|$5J2Wn8a`3REn|!g zl@~B`v#-Ad1m$u6rM`Q_-w|8%#ic4)$wtt%z9!lHTsNZZ*0y*6b z9~MhN4xup)HCkb@U%dVPqRP=zCX*P!Zlm_6Zb>uGmm?m`d^#yGA0h!GPC1hV zKroed-d>LkxYrcE@BZXPdnHDH~c zC@*50_Fu;i^`HBj%Um4ObV;EpE{=Q-)@r)azv`!l(DP-}8q>`R_)Zhw&v4>JIRbaF z3nhd0(gvnE(l@05a6zUYA+rnIX@B*nOTcsYiObBc>d**7sSko>uv1)i9wD8i>Nf*5 zMJE*LY3Zq!L@LN;$L(vtse;X$_>e}VSt5~s!|T%*&*1G&-D0qgZzJ*nFC*FGSI*oB zuEggNXg|vd{`5vMnKh?5k z9-(27dyeZ&SJCo@egOM>-3THKudvF2UtMow+yO&BHiU{LV9}E?5qrv_<%cPr!(0FU zc(ZV48NV0=<*w&%E%umm&*t*lD(9HcQuY4G6wu&0&s>O@UO0N&@gqk z2~QH9#|RsslhDEgzCv+!+cvunVdP|KwWFp*%kH zLkKR<&;B4wP9w#4xMYI2iuFGNu%4cvhqb4C$5M)Nk)b=#Xi=1Wz*?G$gA3zk@?G-HHE}e4jEuW;675}t%T~n+-n3JwjM{%Ys9jD(5t2K)8 z@lCK9RMeu&;>4VfP0Y}RwnDe0zr9S7J*7Y{XzEh}2W~_ZUDcJi5YtK!x<}=H4h^Mt z(S-bC3Do|?Mc%Ne`6Z5bsxQmiFHjGGn0{Uf=E%a}>U&qsrqAu;);lokK*84vCcSPQ zdj*vn$EO6+H^#rWH0%IMT(n#rd<1MFT(xb>KC?dFWOv!wcY-Y)YG#ky(=ju&-`g*y zPMslP!sdI;k@=~$tuk6nH9sCN5=&WKXbDoQ8?1*7PY#I*ZBa{4t8lrnc>;v?t`$SB z&9^lK$vAN2?JmA2v9u>2ya5d1a>>!bag0iYmw(7!+t9%{l+z;owaDXvhh(=`tf#U- zkzx0FAS;hJHG?tXfu%3oJ_(w)w>k{j6?qMif$k*ICp)j!;j9N}LsA+8U1ld`Q8n@E z4RaD!!43r?StJjH{M}(V-Z{A_!~Km#gJoTvhGnuKY*$orKHpPe><;wS8Nz?m>%lA9 zmoB*221agfnv-Fh%K zZ?d)*0p~ZqmJ<2F#|8c+B_&P)IsH*Hm=i>vDnf~@wy|1YCVm_^SkjWc^I`n3p-N%a zE>P80X#E{Yicq&!ztz0qV*2wuww*VDe{k(5l8OjiZp>*nivf{29Qs^5Gy2AM*7^LJ z(Cc?Tq3f4s{L$8=I16*NY?5w((YluH^$=}%+*5+5b{O!6D^?M*%koCezjVhZsxsOq z>`mxR{YuWlCw+J7OQ!q+p|3eL&=2&o#+y!;xY;4SS|F3SnSm=nhd(bzr96wHhycG! z0#{1Plp`t>e=n^o(&tqvtFF4Y8E#?9d%|Stwwd-|6MsU(n)~t(KZ5omNUY7KGWJ|e z;*>={Y&6laso8AIebMWFQPh*^=Tpsj;yHJNx@d(%+9i-J25T z-m%6tH3_lDB`3cU!5E19(JcwltY5N_smjRAENp8tF*G!El$6@~_}-NROLU~$gM*WE zaBePx`qG=B`pC1IENgGs?I*4EzM-rLs1?7b%D1dDY;Rh9X9#1Jj>x@kvJ zdg4=EaN5ejq14Ym6^MdcZs%T?XQwnj6Pe)E*7_jMgem-FVwgw)vO=vRB8;3=tw$=B zpNzZ7H%~JV5VNs%WO_UC_8dFSO!}G>2Qt5AgZaG?mtH>0W)BF^_@z;yNMMZC_kT@(kS0~!x+P>QsrF0o_A^HO8 z}6)uN6E1XxrQWay$^$`fOo!4iY1qW;J;0)JiNE7YHLigEjI=hM z)hO#c36;EiZi&R^zH#(j?M`gZ#}@D)&Qne#x5_D$RTaf~?>mit|RP}5oOTWm>zB=#;$5(I zW@gf&qoW6|t{M|`Mrf^9?YQp9Wus5q9JjM5WR08LTYAn%tI*E?-VC+LtMMozbR*lo+zPQmlNpS; zQJS`U{gBQh!_3MH9K_?sz{D&cy1BiLaXh#`@Lw_A+oPPT-~3gsHaIbnL}VMzcW=L) zO1{5sF27eKRXIO5XX%b6^mRt7g9sBXsFAyaZhU;4hhL0Qj+#zuq&1z7rz}*3HZ(K_ z)ly&o$L>!~2h212)KDgdQcw!ndzax4LaKHUkU?3wijq=x+m3EJe%O!P92{92ZK1v0 zeN74%-TMhwrlyDYQWT6XXZQp2h@PZft4Vgs?R9fU-mWa|A3qE-`m%m57f^n=8pF8b z2qLk84mW92{G59E>=m~edn*J?2fN;edASAF_IxF>$+K9g6+N$Ylu7A-1a4e!$>;G3 zIiYaqC$k1H&sK~8=0CB>{{FE2m)^$o=<1U~1OrPSFZ_K+`g^FTuu~~EK}ULupiV8R z2*h7Xp#tVU3Hnk@o%uHmmZPO2opqVwwoQ4~==|$eV6|31CF9sL%r!}w{`QK#B{Ws> z)fN7_%tCH*go9iZbUEcoHSr5k*j8>Zmw8IsLJoJgVtnYMY0B#}W^**6WjQw{=|I{O ziTK*t1yAKFr^*)hvwx0T%C!8QJ4^GBgXD1tqF%#FhSd1#yWWR?yL4FOHXY z{F7fBL^`e3hE+0Plk#+Ibe0oMd9c!$VnRx8>4S7Bk>LeKqpI zU}i+em!oq z$QcLIAJ1og*~bK3`(}k~Rz5O=rHR_v5Z1zKi8mH{HKLawwoEwGdUlr?0RNVwQnAMl zfM0eoFx7Do>ut}s5k!4A=delNjo5)O4sgjcI{`ZN^K~{Wha!C&P5*M^Cx?(bP#9W) zC6wr9f5u;@MD|3gsy{Q>B)9Y8?}%3WS*lVtAV9CdP6##rt?gJria(b3yh#n4*DXqf zeyDl5gh|-!ukzGrQsPBb=)jS<+4Cs4Be|6S@k-#`jz$3VsQva&St_f(d|E*;%1Mo| zj?kCS<7sqZk7pW>OpkXXkB&_Hd4x7dlxyFUwa|o8TK}ugfyshT!XQ@ENK5@9uZ{l8 zH@Jh(iF?imL=MT~%edOFq}%V1Doq|+u|(r9-jKcIlZ~>y-7|Y+>$pQk5pid~==~~v zs{Uv0FU_&4dfGM3GpwEUruK&$hbEuPiiEH52`z1bq*=2EB$XlW<78>L+9 z#@h!mRi0Ur@2nCKkOTAWd5{!biR`45z+->9YtZd5k%6IJd!hAEZZztQX*SUWveNUk z`1eQE8Ld}V*(i-xxo8gd5f6p;ZS`mvo9G*ct!{V)LWH)&JW@y@BYX4%jeS1(mT6joyhkVgLC9aIx89@Dp z9}*aA+wpvr*-bnoTK`)kjd@$A*m^79&+aeC?v7Vc9AFBS+x7mqn7`(efSe>$>y77w zr#TOJLitoP?rJab5m!^?M)FDYAds_oUnJb`c=V&0%>wRcd5m{S9TM=REmhk5_IEjV z$5|6ZIPuNFvibX5Xal@c))?Xw>|hEZg{3x8R^Cc|iM|wJCN1@y=AOmy8!#>Heg2@= z&%+ffI3=#>GAFQVW};;HdS>c24>Q7+_CmMAe!jH0V$>U^QcKYK8RH|UXZ|-^N6~?^ zw|5^9-rb!q{P!CV(sCnxf-8|@C;3A_qt)5v`EEUYH$i+~`wVxkgP{SGq@Wvs9~aG5 zoT-^^R>d=uP6BQYYWMO{INYJ!t8>iIeWA%*$6qI3!r+g8BgYV`RiUFZZrGP-xako= z%bVgu?V8GJn=Hm*Weip&5F}|UiztU#+dnpvTrMcx;Q22c=6I*5EjIWE$|2sftUfd} zHZq;!o?0CC-{m#M(;FcuzhT8wFvnzj&O|A8O-wr<4XWWe!L?^WIjVj){JYfBtDZdpW zak{zL>UvevO~bR~uH-;}Z3naCSkX?pr~V&{kxqz=~4o)Qup&BzNDQ zIaw|My7f1@TTAYJ{CzfQUCoIGjzC>4fWAAszUnEs_O!~yVIM46U=jX({*3!xYXfa7 z$bfY3@BPjF?cmi9ltBjvhw-u@k6xklOpaX?C#Cu%x_n;p?dIhQRli}|)O%=-)N{718 zg_7q_I+Ku??jN(sl0CPm=zAd)(t#SJvI#Y^5b2C>@Ap$%6My`nCw#III9X?x>QePZ zAqN~pzc?J|o4_(??$Z9vwYsC!^%KjLR7%IqF1wH4i_sw0^w49*!Qfk0jqHfM+^Pi} z`vR4Yt#>1mbGJiwL5gd>a||6Dydz(&v9&d_#mvZvlCY=1OD`qUimhHsKnn53f;&H^ zH;U?{I=;aTP(d*$;yjUhjBj|JHNua|yI;LuExniG9JsigEhR#`(0}HeUEVHro;9VG zzbjJe!>c``!SHf#&!MEjrmnrNV~kHkkezbwy9`!%oy(0>;7^KkbLJag{)BKHwdJaB;Oxlp1ig(f5S#hlov(ST4QRRTXI=X3IkG!&S__07#+ zd1D*KPl5jCD=jrOz}_YZU|7yTk0(Nx0)m9OmrXf@^)jJ1XeRelHKUlIr7uyl(t6=s zew5C1VdMH%NE=J}NNlam^Jj_Iba2(*Rz0$vM+e;dI=dh``1fZ5o`^14aetYQQRZrY zR5bKU@ypuUlM1X(sHD8{uQa6JX2+Hds zDxnb*ZSluDkEissC3iYT&?l;uY*DhyAB^ChqkMlX@{w+@uVS?<217iKrEIHY#MaiIGRZ?O;?JEA0=dVr zPcl5@MCib*qHyQMkmjLK>l-I&^)_hxUuKE3hgAF|${Tx2OXa0jid0y!Qf&y4Pa02N zEIpL)84yM-9B%u&dp%Zl)uyz3k}kAr@6Te#%lW7P@81Ds_McmlHNYrEgQZV04qvi7Gj^f zv1E5<%N#kK$M`>aT!P3ij-P3tU)*{(K$W^s}YCY{dwSW0^y;hEkHCLH(@&!e2Wcl%}8Euccf zPwHa(<1kK|Z^x}Dm82IjfECnBN%@gmrtPPAEY{S<>}=jng`n_CPI@|S!rNcRWwGZ} zru^dxTe?LQt;CQJjs*G->#3-S=`K=I83V~Qh|vI@7W&{I19eo!snksFaw~O+yUgQi ziWV!Mk_m@Pp%7P>)HQlnE3j5M4bmNGM0k&S+88f5I1Z=C8=^e_8OIni4?2gx|IW%oNW*f9L?NAo3YPONVJK`ulN2Ar5nz53!U@mo5#n>N2 z1ff1P6Qi76K`VsgFUTUZV@Ye7ms{top3eed4PT>~tSs8cmI3!-PMg`C1riIu z)|y7lM}}B3Od^{kHvD~)kO<*TW8(9VOW3^Ey$zm~))ZbZU!vqzCwl1+zo84JVjMBX z1V}w=ZPrM%u9wx7bo=)FGXaY!sE6Kkf{_{#3!U;%ynVwllIfL=_}as-wRv>_WeMnZ z)spn1gHODvAP1#Ge4f#t^Dsgl#&fCYh8%_Z{ZflnXz$D+%SR1IXqAbcyZ9j3}3-=;G{5L5PiOs3_X>4XnQ?G9&*vU@f!kPTp?^(S_3SI=Jnssl!oMEYG=y% zqK3caOyPVTtD+5jKbAjaF)b;jvA@#YFCEv;_IcgaU#_ZDR5JC1OwUL8nng3^3W#Fm zOCY>8#d2)vNxdxU|CVi8!uL(U{dLpb-G`a3KD9RyeK{18@e$metUXCSV`&#?ps<8oOkW5qh7b>`^MWoS6v$Anc(vlM`-h_c{XoSq#(zlCQJZ}Wz zA=NQ5kIfZF{S(wgLwC|vhng$}L;@{Ge_Bt0T{3ou+0vc4a)en+gRwkVbq0CyRO2Pe z+6WO#OU|d?j&=^;rsmd92^g^!sd?i1ZJn@Gl=m2uTs}$tw%>{rIiciB@(RnHQ8{R_=$b9@qM1GW;k@XhlREY`_eKkjJkJ279jkaS;ZR(hTIjk72G;9k>ps7qgV!N2%QD^jSTvA{ue z^l#V*~rN6 zPL><3{t5mX)%F1{>pC-WRu57(Xta}A_m9~$gcPnqGgttRC zNW+_)>Bp3CMn)YuRRpSMHkCr!X;bm1-y%XWUV$+x`nuq1O@4+eju9` z8-*!#oUg<-KF3bfN|n({)(=hZQ~J-z=2+)~JcXwHjd<$Hy_v;XUKu>;iKktdH*5g| z%MWM9{#P4?qLA;(HYGn9-PfYSvAuR zNg7Bd(LXrbiI32ATshVp<5iH4z;;BxB!gr`LZJ~d#mda?IXdUoVtbxOzGP>if?|$FVv3B?+I&wWl?Z6Ow zduB-D@8_O_vbXI8;*^x9^oQ;N9re>RwVP6TT$o+N!+50R@1mnys|&02J&!}Fv<|?Qn#JhudBQa9g-INV9#O}~rT0W7JdLiu6g_lmo18;VyIlVA#@l|3 z-ePGDG^ZoH!5?AoSN&?g9A201zCzv+s_^`ozk9*8D=sf?vLmOGwYBk}N`7+(odGH9 zP9wXniJ2lshczsnC)><0Rll1AxxPM)JQx|-@BzR_zV=&te;U0@-;oSA)N(+u5{3nv zhvwl#?9C~@ztzL*0u>nH#E_mm$?t9j(X<|Rm-s!}8a?au!!Vi)S`s6*tSj;3FsR%v zBnP;jnEG1NzRVQMzy<;a{?BO>Mn^(sYM~NIU)W_|;#7Y62CRKXb-np&+QMnOv9tE- z{-+8u5uOfL=NXN2&&6wX{-67o z=^;82|4f?EQkQuQo8&>=KHZ$lM>cRHJ8IY{DoPw z-($FE92eSv8@NBW8_(vEEr{qOS@y{41UeB_qD2PTt}cDg5ljE%_4B>W@D`Pz=hWn!Y(^np%MX)6UXvTRb`(Tz-6Lzgu)U8WhY~?13i^)d@+<%!@I0}tLCCfMn7F0D}Sca%SWW>CZ!RQ37nxnipm3bv0Imy}4|Q*f}hXq4>}z)s*5( zFa@z>yQm9-*Mz`SKs{~8_@@j5EB96B@~awO?ShGc@F|i+|3)rSdYfOFu?RD5t}1I} zO&-|W6cfXv7qXXi&(ZY*Lr-2to*ou*nx{G?7{O09z_THr{`U75DoMT8XnMAg(`KOL zCkjz+b0F!KV<7fY2^|@;NMud6OagZ&ZUYMVcCL;-6Gf?sdltS)UpOaN%0P^aPy55G zjFr%^!uiterREZ<&&^9U<{Y2j-`6!(P5nF0Y%>YrxuT;nzeuonf{PEcImi8`D@>B- zVcI(l&P%^$Hn!!<#tD~mMS>}F%rIAQWCPv`4TBemD5hisq|NXm#IdQC_I85}@odyf zVJbz{DmC#NVFHs~p29Vx2B2A}KBEqDor?=05#Vc&3*~Nd@kfP|keDAwjE{b`8S5Ut zn?to~(811+gnmP7VjePjdZ8~g?Dpn?A28sBpnW_}zgraaLNw$o^F0%L5;9ki0o93# z+~#rv$IK&oaSi(LgTwaRQo6&vri0pPuUFEH%x7$63Fvz}UghnR+=(*_9QAiakPYIk zIg7h1=Pok5oI6@ANIzx8t&r=7ed$u-#de@!+Gq{*l_Dj7t~K2Xpyy-*6E`wwOvj`K zr{ZE$m)88eww6TE za`$S~Ku zz_hL*mN!A=$S9HS*bJeu4rqgr;^^RD)ZLDUB4ql6avdc+`yp0;Pn8O6-j&;v>KFS? zSe5yl)>_5Sz)bpOjR(#RN{;bRfvhn>r71NuQ?QZ}((ZPjLCrXa8MW}aT~qfgk2G7I zq`&Ni((v2gI2yD;j?{unqj@q`1Mer5>c7jlbLjKoD;HI$(K0he!S|5fAC>+6i5Iy2 zz01Im&(e{&C7|~!PYm0yZ$*u$=uHiibJrx#ijzx!Win&SHyFgIe=D*PC8CdbVYZyo z@wn)Bz5WEjqxMD%PI7(BmV(+kSU3+tm|=}CaA6EY@7pG3;SVt)bhj{)=yofLAv9j$if=E`kTnBhy92AJj)Ai@Dy;sL=Z@ks~IY~+HaNkH^o!a3AeP&*(;&Gtf zqeWEcDVfOS!1so7GDpe~Hiwj_fqXLYOS%oI*aNiIRaK2(@gZDX`XmN#uS&M-(3|8a*TG~kMAJ&A^A1H_8C`VUu zW@PQTTqQrc`?QoH3z0?E##!tcLqvN*YksKJIKhNx_~)Op1NZ-`bF*%o;*0d8HxLWD zENPDU>fWY{JLs#*3Ye5YYPLV5n}3FZJp{N{hIMdEMtx2)|vb>#bO5UYv$NU^8{QAXmvUqIm3(eJ(e<9`A%EMwU0Kt7Y@ zuY#CgCcFXPD=ncgo+nA4uaj?5kNV4XlNh3Jc|^|AxMzkw7j`tVfN(K6?7F29M0I0VQl7B_ruA0$ZStc>55z8{yIxnDe#7{H$pItL+DbEOz2IR#F^Iq(BlEJ#bwa7mN)UC{vqlNBD z2K~8?C;x!+Nxn~6kjSssFJzfP5R*BvE+0vk9Rrx0LoC#e zb}Y=T<{CnWW3SUS@r=CY1k?$y#+lePJ3Au_#d)*(dEPEFC=cqFyw4T!t4&r`GrLb1 z05Z_f8n!Zp6na>#;Er*53^~XyE;;jB|3rtuJq0fNqa3gl z^M_@b1X+e)IT1Ziu)%Fxn~~<=rx?f|`EZhW5NQUK0cFJbC_wjRw#ggG1VE0RC3r4~ z69gISvOkx*jF1Pf>%F>;-?}w~#P{hzhP$$yCU{n?+0D(67gksd(Jvs)SvnsjE;&sY zIjBE#Nl@Z4H-~R2i`CHiTz-AXM6@++;|$s$iPSgk)MXY>+w9lY)|rcqh0D@yZT;o( zT}Fl>tyt=8@G!@lhNVDc6LI%8Za(tniV$V_esg=c*Z5f^@%99sL7+z>6GCE}w{I*oVRx44i z)e-mZ>!@Epq~$Z|Oz@vWIWw`ZyQ4+!+!&DGe-$EN;C}Jt-66R;*e$Is1?`|ezzRb= zy7HzH=2fYzF9veVs)Z|)QeGxh-k5GlZ*-qDD&@st-D+BV9rj6_qvX20K5yi^vYl9^ z%_2?G`=lCw#N`FACm~I^U!>hI=tz)j8nbs42Lai4QVAGQ^O_!l>=XRhKgq}m#{svP z@~l|JA8sZm~!iK8R$%Pn3*~&UPcyeCOq4Z#R(V|DxOfrCUv-r2nl+kH7g3DUJU{ zN)z8oY3fJ)-9x>`QzoQhvo`nRNr$Z-CkY)0@U;U8Z^ni#urd)W% z2wA4Qc$?tX%F_mN#q)HsWUdmJ27IVBAH4C~am~;KnIU#F0~zW8Ij0SHzAhuMMv+JI zi=_(E<{d8O65_)$2*PsOphU1$Nn*RSw6>X#ZtjHQzn(V8FFFdp(Al}7S(x!%=54UI zXK&W@`?&Ymz@as`V;CV$fSfZhYireV(sPKvyW4hlbpvwckx8&-lNh9(Rr`-Pd$6z) zgZrMIZW$a}SyN@=6Z|qs$G0D7TqLeTgQJs#3`3T&B>&Afx8-k@Fn@XHstomaN(;VDAJw7o z97!_buh-Ho;}IjVrNr{Qv7iK6$@3Dc8NQOz>?0{nf3IZt&r*8xuTmQM7b(5|A5wbx z|7!ZbW&7p-rRo1CTQB}E*?RT=Dw+Ntfk==2Ny+wiQdaU@GV=UVDv4zptF+dnJypcT z1fy2`Sc!t+ZWs_dNCb)=d8T7HSpGxfb|S@REH7A*oh*}>NavI24!YKP0ng_l(y%g< zh#SqTG&)4`NM6bJLEsvco0pxFR4lsqGgIbtpj_uP0a-xdx^kZ6SSU2uM8Ed-HnX7CYn@{0x(pzX=Esfi zGAgw&&5IFK#gun! zdS+JdzhKLdM|`?Kei-1>x3C}!u7J2g?fSvfkD!a0M9!dhTXj|vrce`v`MBPU9f>gG zkiVirJUu&allxwbOvvcOtSl}m;Z&B7V?T@^tHgc?%7)m05Qef%ENN+KP-5JrWcjN6 z;pFtoF#^YG+OG}RD$?8bAN(;B9K{B-kO-;IAu(;Av(^wltA2Z5Am4G)H8|a-U}yHBtSV(rwod)F0+r@%6`8+ zE%UpfEKKW1csALGYIaUQ+SYYxW1ZLja1J>xv2IQ1C2>3tFDp_No z7Ob1p)$YKE@}d1g5}D+N)pWjTOWwgz}CuxFuhYvZj_0#c(yxvo_*4IPqc?3PTv zSF-tj$u?b)4B_%xuS>S=wq!f*Yx>N#nO6PWGH9zCW~v)PMz)mbu1*C%=i)Odn??G8 zrXQsYK_36lK$zeBn~~@e7U)<1EhHt@+hhNsB>HWjfFq4bcwx#Fy>tcJx8D2rYH z<%}7KAb%D<%_BclUmmhdS$Lge>7CVNt`XY)ycGxe4!+B@{kAsTd)kZ$A2e_vItKE_ zn+^1zMQKS~Sh!x;672w25Xidnj0Jp9iAdvjj`&njSI30qCMC?RCPx?^T-J~uSF7|B zM8`mn6X6A83ln)05&I~-n=tE5*4DRVdT!Ck^62=C6c<>&GRzXkT7jbVPT*J1q)$mh z!?Fyi&gbi8u%|;lzkNl1`{gb9`u=sfIn*odtxcwgjumtOMEWobb6zsFEt0Kom#h-z zY`#yj%~vGbdQEbzwVCHO_mb`UO0wiP38 zl{`;M8H=_pMINor=K+vqCip>;53(#ffud7Q!`lOdgL9o=xMdl#%;Y}YFfKA#cJS=D z8ju$fmQ?EywQNvklmlr$kY~!z%aQXS$oLFHSRt-hcu{~S4fms_p0O@7SfaimQ#@Px zO@epw4nCu-*&-JZQFm9NOxUMP&I4GHjpdtpP0lK8Z0m^dkkps?GTWKqErBhIyojs9 zf)Ob?p}qOP$Ux?hFWfPxf150%vcQ|sox0XUe}}BoaYOnbi^O5x+x{;ykaeufSb35C z72T&@P(~&b$cH9m9MXb?-P}@i0KwZa+Q)vNf9GumZ#CQ%i1w7$d0dw^L|tGVxMPe= z%*goEoVjAqcu*ds13P&Ya4gGA@?x;Dww2a9ty-z%BIpc3M%N}z8lfxaub&MzdVBs$moTP4zeE4jhH z*Ypnwk^X~Z_4{n|HN8e_xXPj2f@;e(xo2#`3@pSoWnH$`DOrt-!kQa%L)YgyZ}*iw*tscn}Z zWSN04gc$;TSqL+)vypemGM09Hmm#ZRRl_tf$rxEdX0Y}_mQ8*R>Bk{FkYo=%$N9w7 z4L;Gk;QB0*gN2`gi>>~b#AW8Yh));jEMHX<`9TJ0m*}fBa3#YtVtsAH<{u%`$00xO zY~^$SD|*wJ;*v~E6=h~_QC8Q9!u5KlJ!tTS4$(P6SUU?*x9~Dd4#djLghBI# z{_nDlA2i2iA1dh{vB`+#(nciCrwqsdq{&0aJ$?Gr+ym%HX%EONvQKi7>kTpenR8A4 zb)SZvCd*it-KQ0+<3%RRj^Jk&Vl!h=C9ixorKaWJWw93=^W&5$q!gg&JT^0l0gSsw z95=W>N|m^~PSV{Kgzrq(X}up*Pn_d<sX{*T3jtr^X zZs3}+ifhKIy(Rfref3Taj?!3F!c44X$Z~Ok*E5^eFg!BGe&FE=B+W#UD$Qg|Q(lJp zI_2K2L0iS|8u69&7#8Yt2^w&&+APwza+uF^(~#ua?@6xbw@Q@%R;mVY-S~USS^7K4 z_5DF|U0+D1^+xcMCVn+!92W~h+p!=D;pTAPSb8I+;&Tg0XOjab{vsv(o8SDKg{|Ah z0zLIZ@RMGhFpINYC*s6_%%YUBWXjR?ga_N z1;g(Jc}B^m>wLeuB5$6&3~;d_|CEEf+nh(#5kFVSACqZVE}KXX+Re*3mdOOv?1`DYaUnoibNs05Hq%{1$ER~f!IYNj2>$>th8NpOAIDiOH-?(Ei zNTNK>E2*ls5OaBZW|qswdV_((^muX(`3DdfEbf#)b+Wv)qQ{s_b8$%w&+aY=Q%cIn z7X~5Vv0W<_-D(+7xA{V&kvvwcqy75Zkjnt%n6jXLeNcouCN4Tiz7BP*yvQ?_VPa6@ z&I4hF^tzn93q)jrU}K?gSHkV90s`(~|8kT1iae~ZXN1n`e`K(w zsZp-Wg~zs2pihP96Dk1oE_hos-BP zubLSoFjye(Sm03b=M{vGWA?dC{%heid6P8M?-Idue#s-{j(;z%84M_lQ0eiD3ZC6a znG!O5<`))2D7jGIyWJy}EJz`-h9QWAwW7nmENz&2-q@gSiH5RZ^-H^>4e*_lW%5h3 z3;ej-v>YJ41y+kh#*bJO5E{yow!s@H+6=LqL6A31`k%VlT{veUxB;oWp}Ml%B)1VJT4XUb$*~^nNW4acgEWMgGJRSug^)P zba^J-oE4B&CuGl`KR2R`8wSJ)62)sACrywDwg&;3r%}@3@*7Aokr4PTrnsIEWP?i`|?m;klor^{E(B$ zekwD(m7t7{3d#&!z*`NXWi&NIxVsDQlZ8j1ozXCoL#! zl818yB}3y9siARcLtt_rq2mhqdL2m;cQHBnQbIF_#krwFviLZ6e5PdiH;4yd{6=DJ4xN&)94!QyO3!HdBoRC4rYa@vjMnC)yf7@KnFmUozqOEb<;icQJo}53 z@qK1OV5)W^js`jjNEp7ckY#+9Ax&5_-NLwcve$l%Ei}v!Ynk(~Dq>w^f*+P;$g(fy zk?s&KJMc4O(7@z3tjvU&!?HvfQD%Xd94xn#m6K-9qtkRtFa(#*lY074P+ts;e4-y@ z-0PnEdfo2_p4|sYJRby#{6Ul%7~zIO{x1rutAo{$SL|4s>+A8a4}%pFbrwR1V)5Tp z(z0v>29m`xw3OvV0`f%r$Ms-tZr<|4K!ChDe4mcl+%c3SLhvApwlwc0>c}u0@J4NF zdfF_x!H*jPqWa33XqW(6r}-xT$VhW@!3Gi^QV#qEHw1%$~1khhqww($(^@NrrURl$9PUt&6NeoL^f!XN%(u zaaIytSsIlJF`)OwPHjb`04ahTL6EU3liUr1?`V+jg2BEk@x4IiX^0R8_902QA~3=4 z^Upswzh$>9e`;_mGgeoKB!h_Huc(7TEi1~*lo)#D08sAK0g3Y&;80KL34k9$*0?8D zYu+w!JqS4a9D^vO$$Ay3U4d1XLUP*O)2 zwJ_Q5^1LO5eBzE_Wuc^$g+j2%(RY}%YyCq;XwUAu%xY_4;PB!8`Lr)vh(dJ&lm7@$ zSBGl`U+(CHpkHlbram8$Oc><&#LS3K6EsnDG3}FN(IiLO{`Es|CDmD8dufNXxg_PK5h>Yff`2tv4PrXm zVkt}pJO-h-?0^uvWjXD$?AAp(2CR!|!VLBjJ15E{zQfuASz=`fW>WhTM8MlhVuCX5=3Dh@MWvt7PZ(j96q`c1G z(sz5{gqd^54`kV6E;C3#el8Nsz@g;FC;u_9!Qw|gC~p`)g==-bx=f| z^F3SiR~_=9vQA`-4kfs_ol!m?1H#kMUWfzE+l_|0dK;95`-V2ncE{HoKW5%)Xni4v z5uYmXVhHk)*3yZ{7&va<(U{ZQkHDe5I7*bxBlwC0()`xb?P1M)+OaX{!_mmFDATCe zLcEPYCZ~KdprTmJq`u9p&DoC6l`vy%PF4$Sx?(F2+OWw;v%6^U+k`aZ+sr=4H&>*x zJR#-c(`4nqZ_Qo9EX{+s{IN3>4ZLUifeA-FzC zkB*+>M+Nt!^M!0X@y3stPC0$A{lGKvd!C(r>K#`M@&;jMKtO&kTAlN_5J7xWAux~^ zUX|m^%&Sjx$xFS?q`Zx2DZzrkP@eBo2WJWDkG4*XUk1*_`J&|o*F)-!dL{9imq7#r zBFY2*Wy*&>@v;E_b1b%$1MW4%pbmprzGb4PbwcJUfh^#=%mBDqWrVkB2ep%m909IpB+oGR5J4*W$M4L3QiT<3|ZUXNitciC*x6_VYhcR5wVb&@Z{p&!wvO z_rbSW2{enMFk#Rv&6E+u*(}XTd7+q8X$9h}rCi>W3ck(rFGA!DCIZerlFG`2Sd8Z# ze58b2A~;#bvJ6>fVG@?UhB%>oQT`A)(qSFJUeZLT3Rz~d7gl8mGX&~Wwk)Rsse~j$ zmMJ4hCDti)iI*kYgMhyA1gJ->!;oc2GZtsJ5WWlC2XeG`q94{q>XW+XdHr5#@LSFa zgd(ioNM}!e@X;oJboy=$zi2>KeNhQpE?Y@rz7Uqnrfl&CbWmORG8=)x$~?a)>q*G3 z^9Y6FPNv(ONAwYo~2;~6s;F!6D} zK@Uq>6U8Fmm^b$c-aue!hwOeVxJFnmyG>fLTC2R()Ya^(H@CJ}k#WuHjJE>3-B{Op zqpl)8El}mOR|dHj=9mL62TAi}LtEvIMV5dJx=r^ZAA-YsbGCC&{%IVlxwsBaa#)?mpmm~gqjC}G$X`2 zD+DgB*eZb#=k4votx2B}Y{_jV1QLR-`x{#|aMwKp(u`|{rbL+spw09E_=tP#j|1RWyEHEmgDH9xG3yyio0(`5NDIALPT`B)UOnnIRIyq3r6 z81XhJE4Ri%Fqs@j*>RjsnuOBx&T&6@J)!t~0ECqp@=I)Hh%eVU2r!S?ezhb|O9%P~Ws!bTR9MFj?1^uQ#w!k-@TzoMHqZWFg!1gx(Lqy9u-25R%-| z+$bHbItna=Ne?_*NfjuhISn&^t3u`Bu`n+wVV)^2%GB(<%+4FH)L)tov`GKeGaI z3t5I7F~QF*%kHyEgThMeL=1!uov^oS@9ot{F@O#F_-0 zFz;9Pek>5R;1QrkN}6r4lg~A=oc3MGIY-@GV_hT(W_v6P@#fvdRS(@OhO3 z$UT$(Aot`$t9eIDl7A++;fjGTH-yTwKopOTo%OAWl++g<=xrQX>T}i1p)pn-WD0;EUzqUJ+dmH${b{0k9};6-H7uK z>Yqhx2rEdPZ`<46Fv#=oLrc~+ZG@R+v}+QhSj|W4=ywxly(t#vj@D*d-nyrwMFqRg zLNG&ojYRCI8U{gAXWz7kc7s(|9m{mlTN@9twuz<;$l4K>z=GVM5DzZMWT>E0oUO!GS`gC7a z!p6B}nOE>w8X-tDB(}j?=0qS>z6m(y9SOgIEJ2jqXBo>fkrEsew5AlTrV>QMn9V_$RdW0A=xsP*@2`9^@zw~;@z(M!q9Ec&$ z<%1=BmKiYNVgj+^`7aA71M-7~6`xY9iVzqqG?WG9U`r;eW}=)~SOU^qTwIW%l9=-t zF@xuXXe}-!#9m1v^-sMbDj@}#L9Wba*WwL_Ww04k?d#dt%_Tv9WH}Weg(dd2h=R zmm82{BD)~7YSGP9-;(nQa^1q7YA%P676#Z?&{pOI&;#^m|y2^pU%%Iezro*Z)e&<@)y z%|pSLxdYb>B4@N{Vfw4U&`G@od~ygomrN9_Y%D5K9+&dstB}@a^!VkS0O(3I4LSrY zjcLm=KFbg$6f5M2#^aV{|NUNhAu28cvq?1J~#G$Q0+` zLV_y>&+QZaAkmi%fiyO#yt`$wu#-<8JcK$3gUz+|H6t$O%RJA*66eeHj%UUaxwAT< z4yur~K(ctw(9X#dZ5d)nTW4^`KF2Q$u&QHa4-@C;i=Aw0IV8;hV;2@V^V??Bvj~(nCNed7eqqRA&WVucHlr(p?Hc6vC0IzFM zHGwqy=q@NpR)sP$qWk!{P0cOJ%i#%m^!$xHeLXG{Gpwlg=~+Gxhmya#7Rk0;lU(~9 z$+TXVOuk1eph*i9MWtm+Iq!5tTDoRs)`U{gykVVK4WZ5V9J$drPERVc)1aycfXMW4|Jne_jkuU%ZlcBIAV^Jo291D~{{J2)c z(Lq`AYIm<|2K7RxM>?oJfY-Zsq;#Itxm%DS#(ee;lDSo{o+0SA z@GK0nsDF3G@bGvC{r)0@GOnqqlS09lL2fen=lD*UXtT2pNVmKqWsu5by4|?O=YzoT zyo4jO=nDFLJSX+RmvEF{2_Y`c6gJ)APp-sgQ3msxLo#S2XBWLmqJL$ zrNw30QVxmKGH^$HseYFM;>ROTwBNeAdfne0e0?a6^lL(M;K$t6-YkQ?9WvP0A>AF# z7CD3VwY6Qc#DluLGD7vmN|+e9vbrvBrix0KN9DoeVR`m)OeSaMBWd0Xt>jE?n`D{> zl{nv&458*4yL9+nuU{e&bV4Y43Yw(H5`Sj1Hd6uHt5R8;mCEwC66Pt@kP9N_mXTD> zB>}>ZVt2xf{G~0+9u33EGUw76LXx}#3^Kcax%hYfJ-;(QJ0(p-MR1ZA@%})OQGQsN z@&CqZ3yEg%0g-tZai-4Gi4GLYGIdWh6i6|o&5z@TLE<sV8_?0$Ty|lEn8hNJuP(D~4@}fH57BV?UgS3c~ z0dI&ghVZ6{c8uP^V2Ir8%Eqn?qpt#C4*mYe;>dKn)~w708BoG}<4Ug#^>;~IGm8&o zWkW}HMwk=j$a9C3Sb{V|+goKRE-cHd(MkFF$*`pt!;>;QzbxBP$lr!`KvLgnahbC% zHzb?y)7~o|=q^2#S@WGVC(yDEAyf1iq2_SSSXa`#HWkS8*0TQO@|3fa<#Z#!;(&D# zvi#$ZKkm3;&{+b`b<6UHz&rngNL<9xK^-tr4l6CzT1Y6?dOB$U(It5&>B=w-*DuHc zbpuIb0w7jow)m@4|4yQj4LVn@%WwJJ-fO2nLnI&=JOj_gAc^P1!c0u*%W7SApik&< zAdUHBcHs+P0Pnc267+5$OXS&7MputAyF=Xop{f`XE2lD+G#mjpgyYxdKHTA26;`-@GX*YFl1e4sKNlECyQs zQT6amC(F2E;0qrNBOl+6kF4zxQYQcPcC^T?tG#mX#-I!hbeTUhiZ!gb;;%3v72$Vg zY1W6&Rb@59+cGn^D9>Jx%a4y4Cn=XBeB}LPq0VLaI%U%N!LRf9HVZ1 z5XAWq0VmCnWCl%-A3wHzET5dixoJ7r57akAf-TSEt{4zzNInFD`(9>HbrvY3r7_79lw;FNA zH6-2Es1u%rJVE%E+%;p?V@V$zi#_6Eg7(VW1T4!8`0!yyeoJN5(fYk7Yi*JnLp}1@?LoPFeL(uU+oVw+4xPvdfY{3(HjW1* z@jE67lBE@GwByrr^615geE0B$eE-WUd8(v&T8T7P>WBon8p+gmC}|#$Y-5kbYvx$R ztjHiOCP0P3T{8fy0B$ZzWxXgYY$98WcI=`9c|u`&g2d7>V?EqUmffb zD`z?u$hU{7a}vfYUK`~`d=Rh#Kt?_41eROeUMO>vWEg-4E8u>hew;9KJ{=|l87BAP z!_J!qqNJoJ`f+|*7SiB8T*vRtIdtAU7taS_=6R8+PXW9^bYE5mGZ2`@WD*?Zdm522{i^29#%jE^G&0$dPCyj2Kq?Jfrb zVV;xescBizve?`pelap0zSmZ!br`~C`hqPiCgQ&9`?Z&o0CGeaL)whVyX6=-I5M%(!Ln{XQO@xa}NzLtJ{R=0!|+}hr<1xo<+jXu&H)9?9Yh0fMC zCXW`RruumF^?PXp8dD=yW+lnDulLL6cdjUD?zeDrOaeqi@hREc$%Qa;S+h!TWMyqb z#wLsM%d=7W_UGsF?SmKcwosPtv+U#uiz2V$u_951C|M^*E|V^o?*hLe zIUvT|&qLKY5yN_AjWy!EL0#h7fV%^v*;fFhljb|h)yeCAuy&Hjgv$k%2=3d)3Vats>qV{TCbLw&g`6p@lB zGjC_MT()**tR6?mG8V@;s{ti_$pWkTsXkz3I9}PKGrawiH{Y67RqL8be#jr4EyVFS zUgMqzuo@bJh2q@24P;m^&n(+1HEn0U#8DHdimLb+D&{BK@b5YdpvoFF`J9 zYlFVxjTmjYKumAdVaI{oe^n&=M*<4OV%yb(P6y$|GR!jA>zXm#E_PnQ=_WKp%a$Vi z#VUa%I{XG-#o$i{p(Y{+iHRiMC_Y(`f1+M2PfBHRL@I03HlZ)LW9WB$Zx#^BDOFbH zvZ2D1tC4JNlVlq@G<8b`^37r>X8=eKL=WbZn-D*iNeLl`rf^J78M0cGj*N* z?PZ4#4qWzEln_I{cpZ)vm+!qyDdUp%2Uq~H5<+xHXVEq`HaE_baZy;;I)2722Kmq4ulAvK-)#`NVIFnkz4+0uPj*N(M=fiU>#?B7DWHJ zL3^Uz(WenYk2g2CBlzH-vHebpoN{o zVV?#H8RqpI`(%VBK<0>?!4{!kT3MIT@mYEJbVUC1$7k~AAD)_D^Xsu`S=I&~p}=oh ziEr>)*CHXyC~$lMX}}P5?#;7sJmUR9xiSEPjAF$_(P7nvm{Q(u z@jVPKA8hGFA>1fh2(w$9T#h{L2hQX7d{3v#L`0qm^1w53?4aLXW?&@YH7A`99WhqO zn%c0K2X%y=2kbN8z{4)sq$PHSpwB(L1m-jHa*x@_)q2=_7Iy)DcR9IbiOBLRZ!{*l4jtFnvRF1w8xR!Ajrzli1j(X48H9Kl zbIxJ)>2>7w!?oB?|MsBYa~|jW?{Eo$z++X$x=iT1%eqL(Q9-#twD1eYVrj%nJ2j4* zI?{hu_NxD>3#^s22V7XNbP?^~u=+brV30vKple1)-pI7-2cEZ7qEp(H1D=!T!y?z; z*Jl$@+uDLV#$`azyUQ{;iQXLxdRNIa^=7cLV9Ok(DsxHc>+h4HBoa(RGN0fqVC_}6 z_`p+lOxPqZTN|nmloL>QY0$=NYwNT=>#a`ldp=6Pa-KnZ`qV7Ud=RaIRY~a|UZKFFOM2X1yFi-P)|EIznw5y??`SAo5BH3k znu{&?9}1#dlowt}rTA1TO9^2PwgLUGWO>IWBY_HzRJPGFT0z=D;gZqVBiW{8^56v} z%zWnw@H>5a{8Rlur@ zSJq`|dCe@&6d>mjX~V9KiTYDPr7Y#uDJd&iF3&xY%JNw7VFoBWgytZ^jD@+X)+P*Q z^SzQS4BGZ0TbR?}cPI^#zpi&;bQA^2?;Yv;zUvuGZjV{nu@_G^*S*WC-gj_(F zgn0$R9NaA+FtmYmdFwCiKgN#Qx*BtNU=r8K`!f5RCsux(G_s6!8G;{tUunCX$2R!A z;(9Qs1d)!mOFP`N@V7oGFxaFV@Lk4b4XZo#XN1%G(lDqbq@E2N@ckU<-9#TanEqR3ZQ11_1dp8PxNsKb{=|#US7!x7!aV%&gAXYW>kg0dpc27el)> zpXHaY%pHU1C#$M&tdB*LzbCCLEbUidON;)b;zvCM8`Ppy8mdx3T#2n3WJ#*BN2X z5t^=933KD+A$Rb1f7Y`{cu4L(>_*>sk?SgR-SA zDcfMlT(;z-nKI^k(n0V#bn^Btnc$jEnCW0}y+|*A&a3ImM4~NWNK>K^vwA9gpp_BL2HZEL>&hC z$Y~#fH5otkp`k0b+9W>Am!+Q3OIT&GE)#Z>GGU-YWQkA?$bJYV2hr;4?66nalml;A z&VyTu*9H0&eZVVujA{&uwk;pw9NudCfQYCrSeS|ManbcKdhmS-GsF>@J}-565U>`r zv^9e|xB+=%fD2h39)2yODz}6S#088zx_+T1`HXzC4_PL!$S!2rA}#4>boO!MSO_zq z(bXcTSQ8rRR9KZftI!hSgBZ*xPV;Xzq5^3NZUtWHC|C**#T#5S@M+$ZB~^Zwlt8n* z_J#@yzpGJYN5i-8CloJVkj;jW7Qt20(o5La)_{5&1#ZRl#2n8gO=osjmC6yf_ zG4X)@hSH*V)Ye&C>7L#m>ulY+d>MdDQ!fw>^zGQ230w5R+mP22eKBq__%0Js;L4Rj z8z3^kIcgg_Y1nhB98rh3X7E-6;!IuuR!1|yXgxRo zbGykhmS)}@oJXK<*HnM-#shZ?Ce4qGj>w3TW#b2vQ_2q(O@^&sMd#DMC;4S?L}L$R zxmEhL{a#bDjQkQOpMg1La@;sJ!VGvoX4&Q&>!evncP)hm+pkv=4Z*dJPBU$<_B=Dj z@gOhZBhd0NR}TD|m$Xn97FTRp?fJ!JSzg8B?6IDcA1LsNK8XT4E7&T1i^EcxeWZjr z_%CxT!$1SFY{COU+(Q!e`%E$^FjJG4OnsN+ng%5cVa|8!F$nYNmQgwm z-$xd?CtH5&*GuED=kfDNT$B8fc9fUq3DQiuES>Oaf%>3coR~qH=`iRhQM8orL3MUi z@VlURL%jj&$|w5Wy?fUdD#3CQ>+fx#uS4Bzn&qFgwZ(uDBE}i|N81Dj652+!mR})X zu!skA=#=MS?e${-sUm_6uX4>or6ePCx`8CxvnlX(B~~kzxc-4Y>Fe#a!O~@UbIAZ6 z{feHY9L&1Byt|@qy8Izk7D{e#KnAZ2m>=_bdX=xOe5bu4bLaw(_JKNgU7$5=)yrpi z2w@E&%~+dRxZ*=~#aZIL2(u0f7?9c`Lt2L{I^%?yUXQZkddHuBeO;a@=vNYR*+}6n z0s7n*H!}Ggdn3amN|tqii#rB`JoB?xUC*^3%Py~eUHG0`mU$y`?b=ltx*A-n&@m^a zUyhY91FJYjI`y^YqEX1#D{*d=CMD0!y5%$O8=fKjP_|3E1rKyDC}c*I>)Jq8@o8R{ zg{4(lSYFk}qG@?e6D}M0IR}D>vco;(;zLVdWm3vYmP<1~O9gj~Rbnu&p$}9e=xCY7 zPYOpACbhcNvVb%ba;3Ile#^P0p+K04lA$E}EI@r8w}qMW-_wf{wv0 zDSi&W;XF?V!SB!cPP}O3Y`G=`j90#F{T>lV1LaDhKIj;EwM?f0`Judlm;YgPbP)Ir z*Y-C9$RIv{tmFq-#=^`J*vQGdWb9J|Wk+H{H+8eJvZ~u8bR2b~)qyJ>Bo)166S1)P zX-C%J7QYW@@9zTbZgq7IO zlITGrBVp1b5eKl&QX>?Dmj!wWJ=m=Shbu~$i9wC;=ea6}2-mXKDf$4nAlk0! z0G^jTagzRL9u;zCzVj+~X+3|DKwTbAm_z>qXjAkx3{0C?&OGUNAgh}?pvC=xE#caZ zEAbp}r%kIP^fazfKDfb>Y^zL8PZ=p5AD@&l79vsE92=joC@y?&10nq_Z>Pwg>vwX9 zKB0|+y4pG;%S=!;vOL71Qe7s?Ct1(OPM96;qQPXqwwAnfv=*eZtx4Kj3Q}m~RW&5Z z{Z4re8!XQVI-gAhR1iE=9TNgsA#hO%^GtC`re}48Qe2ec;jigd0lZY6fKc3e4-y=B6AkFwPv#d76nfAar#|7$>j(Tox-X^yZvlVgy zNesk&x2>{;9CvqjYDXJZm&7WE9=Z&mEYPjvS_Y$|yxyKvBC>3R$?FfWg-8+&1EM^r zgNLrpPCItq05Rm*A!J6xR+f!02YJ(a<-dOK#x|-N{Y$$xqlL;HR%e%iivsGBKItIB zOdaYewojy!8f{mEb7TvTB0L)d+9hqHOQu6Lu|1BY*CL{YO~%yEK}Rb=*1?P~N6+&z zaKps{c?{87G>sABa8kdUk$II>>XUf}TlBq2e$x8ETyFHg&6h)Fb+9|A?H00p1+v`L zZG)qe?qg4kFat8p>Pll`zRt029V5B4F;NkDfFv5a;@rxE2`>rKft>9)R2kDtx!W$N!F z2=igsOJGAoYqQz#H*emwSMHEzj&lyyGDgM_G(dwr?3qkPlka`&_v7Ax2F&%bRI)wp zJYHr5qE%(G6D*l4M$o7q%9yhJ5JF2Q#5GCO6XXp!V4`1oML#;+h+l(pr*0_6K$x|& zv<@%vWmecsc0JGK9U_BXryVpm6^^}gqaNw3r<5GBsvoP`(P={%(2pKM4dCO76|S$Z z$1GF5#2eP6p@VTHrQ8mm=8-7$!1Zfe$Y=vC4&Xah#vQcjw5 zdZWgjwr2 z#G=ON7|12YM)Jo#gT!?mKrSvVCd;AE?IbL@>CYdNik6D0V?`s$vk>K(nUIt);}V1w znJve727Hv!={zSy8Trg;y}90iEs=i`sIIQD!4Ki$8022No{;74E{ni(8g+Z3gxNvn zL!8H&ggiG$M{ARGb+kx#N2_j|rMTF5(DKgAxNPTLS^iLN=kN59{b;^vaL#OX++91 z52QTxy_9DkOJ#XNL`k&4TrpHA&>nAr&pI$DD={R5AEWW=ykzrzl2x({VI~fvvC|~XT$g(~d3DP&WSLj)pMCb35hN_l5LuKGoxfSiv;psSF1wxnK}esIzAp*5 zr2|Vd`^TBj%MRqiJB{#~kJtZU!3>Zt%frgm>xgSnKcQ0%69{?BfGY-W7$jnN;@=wU z=`e({q)uovBqK1Yn>o%aax^Ms=xu_IosNz2W(BU}wCExabi($ES4rZucGx@<_YKy` zAOl3kpdGf`M4>(z>>sd6QWuR#9Rzd^X+04ggZ@8E09=!eb(YK4dRF-Y$Q$yBYbbuM_EsaMe=ibT_w6Oj42md^ z@RlB~L|Y4kLf-t)hhbHoFX9R@W52UB6A1Hhrf_YxfiyFRfMBHj z{f#d=oD4bC|K!wIOxSyS3m3$NipkfI<14D4&9ba=i~KUNlflAi;8X~+0|n~-%`Huh z(%IfDJ)KIJb=$54y0r=GbAwG7H0!hZJqO?CrX=bHVe4w^s_i;}s2S#_F}G+$d2+fa z)4D&WLS;VBiNEub`9AAbNi<>WAls}k$nUqd%gQrD2TCn@1v-vbf$VcF9UWIn>r!4G zmGblhDNTGQrCD4tMztqcvhR)P?zm#?1C&G(9Rn+J7I%#1A<4Gi351y#%+>Y!{n;o( z6xwMKX0GW(8K5N7Wcl;YKi?rnKBMZb?Hd)RrVGAh`EeR94DE(jG#CvdpdJEXUGe6!ZOTs zgp{^d2N4eNNz7`e4tZfR63f>@*aCt3ctD)OYIaE|IVB3b;zc~tazWc`YA)CUB?J9^ zwq-)%VX|{kfH8=AfW!pf&~e+RY^W=W8ggZ2k_=vYy1Q+`7A8(%Z9eY<2cD07;+kQu z29PivL~pAc8eygygG$i6CZsue!w0ddt+`kWnRpv}n=mgL;UpiF2gXG9y-lJQ(UZ7K zuuS;Ef|6G4YZvB~w6a|NF()j=;Xe9#aly#35oFcV#7{;h(GffsdY5N(ea-U+H(UnT zq53Q-&tWi7ul*)O8J)~qKS=V`p&^SEZqYCrPCiU!8mCH_0hLMyDGVn6HRT&rVL_4` zj4(r-yE|K?ud7x1y4$6{TMJ4*ceXc~6}m;w!F?ldmgs7|7E5w7c?TicG>h`u+J=Ro zgDlT2tf-JJ7?GZsRzj_$dS(tcjuj)?ORK8vwK9pwv7w_@Ca&1XN3V%uq4ps9$EQ&D zTt{zG*;oqkmS-MHY4Y3Px4igTM*|D01+f@YXecrWbNJa?;6WkPgq%}ksv0HBa@cLR z0%2~sE}8l^z0BG9W71GgiZG{t=Y)vH>DTtjTo58G%a9{T5@ZQw>aXhfjax9CG;$%i&ac5S?t|hco%fFEynu2GokDokNZnvDgETWBaRu!4<8^QlTt4^> zb?+`Z_%0(C5C`h#UDt^SpqOlqiRw`5g!aR0a>`l1wZ!XkKAZocl4K_SHPo}HM6Fb5 z`~29lraqAgbPDbm=$NJD6>EQ78rg7HHGG%DE8P%p80#`C!(9eoSzKCLG^;YM7?cM@ z$*qx@jJwGw(bE1GD}PUSh!R3MFiB235)19>?S$=lNVHc6Q5W!+H-A|rY534GnT@=$ zP>zceVQNMB0fVIAnh_>o!#yra`zGJ}5oRXbF|n3@6ZsCv*x;1*h|30j80`|52M9KU z*^LuOTo)O$>+5~|UN$LE`#;yW4xTrif=p`Cy5cjs9zSgA3%O(!PFq-LaL^Kq>$J7A zD9h=GY&~_tydQAEsH=lK*BfE(RkA$L(;s@Qbf+tp_78y(4{!SAG#@6 zp_^0*j4bc>00<&v zIk;nFSPomsvH31{+>>0}9my01Bvaj}cRxENL8Cco!c3#&KCbAwE`-R*GL~hCk-K4d zLq(yw)fa*rEM{2Cc70{j4SPTMaX*J=;Td=q6dqfy!F^E#k(3=Bl$&=9PMDD;_9Y+3FMqmC7})BKTKPL zq!RWE0>d>v6x1nlU{=-fakDP-Dwx;wkOy2ts7=n})h^a5^V!uwQg3g!6bemt{4xN2 zML96xaa47zErY$XYVsc121F5(l9B3~Dzh*%*^wB`xGtch)>m2YVATdbwnzvD1U+`9 zNuL9sWr$yJ!w8n;ViDI%CXB5F3$qGZ2rsKOt}^E=NP%VI(0DD z*Ju9q_7+43b}X)g-uC|bv~ey7Goa!j&ctjc933tjOcHEsR)XA`w|&TRXIry$D|zlQ z3v`UJ6I?U14VPPx+GW&1tdt>z<*<(gFo-5;6}j8&i}1j!caHzdJNLc1XMRvSctj$I&1$I0o2WYgqdU1 zWoUnI%P+stKYE;|r?Q_7b?*sIlm2`>3AqaGjC$C06AAL>B-zjPXSQcm&|jkuIunaB zdO5rW>NC=eVS`16s7LaAR>LRC8C1G$h)zj)~wa-O4i$2nv}dZNJCu+ z)AG?EGbJTqD-#wCqdfbI66Oa|ntvj~;v^eNmT|8@+vA2|ME8LE>UkB2HP&T@bh$d4 z=$GsKTylMXBUL@WQ^I^*r7=&>5q@(67)mLB1mtTIlvoOYC*NWH$vO;}OFVxSYM~`fUC`dGQk|qUv zflOHks)_nQ-f+v|%>(s;j36&`suAx8UXepqpFDjgPaZ$9$!3sPCT5uhOgm516R1|5 z+tSi3*HrdD|Lnfpx_!$g0e&b5X-6E_=PzE!vu7{tITq&^gCBL$F(VBaJPKO3SgY>e zzo+f+mc?Gir}v@**>>Ia?Add9{N$OolMyA%#l#XBtaqMQ$|R@#9c`dd2ksU@!uq!m zqKvxYnn%;ZrvqvcA9(8t%L^=Wz4 z#x{HoLcx~xOiDA4f-A-xq2s1PGz^cm%p^bC9?+<*02l;phTr6raMpK7 zw(YhO<=;xK=MPfVaZjY7^WbZoB2J1hb1v6#B82kbbq-cT{FRSNmL2|_kmhf{{noa8 z#-hpnAkCy*C3P@(HlB;;V;`$Bq?rkaUw{3zJsZynNqg6|B0}9jkbn8*7bDFN9z4*_ zW5fnDzzH*HFDQQ>ym(#EaUvrSW(HPR9`S3Bct22{So>b-VCLD==kn^+Ynhswu~+*@ zwdu{It?JoI&>GDr@iQf^_wL=1uI_FlbngqI9@%~MeovLGztk;pUDsFF?SANT?g?pc z(E9G|Y?tfTuW9?cZG$7;FkA*8*H|4{q~zK2XY%~{3nf^S=DJ|{*LK13*I50m3KXat zOSaG70RKLGbH3n@$uqj{xA?qC{|`Jbydm~}0bkc(K)E8fl{6D!fwv21^;-XZa4=zB z)^>%#k2wILFCx*_koQpMi2=duQj2J(dXED;BC>nc@C?C zTL7&y-Vkwswm396XoDKsXm?MS>S*2sqd(4`zc|i~OU6;KD-@wZPykpCNLY!@7aFpw zqY*5`xOJFoM{7YkTJq-7VQwClf**8Sb2ukN>kd%f$O;1( zEX|#ro#x+q5jxTH1}|^Q7pwC6dRYCBiCI{?FlgvWR`z`6e99RgTC9J(A`ceO_v;vG zo4lgOXO{$7Mn0Id=5oL@p%)5;yy}5&BkIImrtZCsUu00G$p8F&(FT(tl-!j0_TIn80;TljfHw8R$`O&ydEjwZD3tEwaWol#@kWXb7$u zM9e@257HIq1w1!(w4V<%&khF)=P7MavP?U&NHn||Z*7&E{**b3<6hyE;)i?++D*l8&I(=cTedCgr(j zQl9xqN|Q>KXCByUezG>JoybOL*ygVcQ6?QED2P`e%Vx1g5!U2wML(P5*ZGx_<-3x} z_e-Yg{P<&{+>Vnl)6lpkzh|2!%e-cHpXKxfzoUX@L78$*?n8%!qGs!)nd|NCg!Y4f z&vp2n{~mCCo(*d!#Q8FG;3o;n4jHnQqf~y_I$;K09|yHn%AI-u$ej7iDN$xXMTjCk zN5cGJ2xZSiYX&u8QdSsbVgyiVGoWrLezq){!9WqRjQrygK%E>F)FaUmrc?$XiWB2u zp%ScEz}qf~I;8`))$9faZQ>9X=MU5A=L_VIK?2KxLG=WWuxm znlL9T{iX6p!s1L@!sUsT?|OQB%LzVRl$$ScQaF6^t}lfe;eS^4)c{ zq#7kJHAbr0=Q!v1WWo0azQrtYy<=5=B;{!(%Tqrqaeg9|#S#5pi8SXSFj#^~hmmEJ z0t&C9zk!HzUQL6=ScW9$y1rJ@{CQXgyS5pTG?Ea)1R=5rCKoz=Av|uv%(n zy3aC}WymtG+&`qzalTubNhl*H%}g@mz8vE`Plq9W4$o^NZM_D0;MsXbw=|!31%8%r z!i)?dKWvYKFf*uP%V+8!;{8FHqgRn{2s80mmzP(AoEu3C?ZCGrWF0a~s5c@Q(Agga z)FB=3oDxGKW0-Y$YTE8g9lIQabHfUs5C}wHzdl4En(LvA8!+0FIFt)Eb&a9cA(GAKl-*1l?97)_{#GF2_wHA z8=NJh?af9ZEM$TnIL~rG-Oz^iCCrw;Fi9QI{u*^K(5<8ICNS~htJ_*8nny?02 zTDRq_%SwtX^G~HT^FWF6PZnnx@?2S+R_R&Qb5+nG$V!x%$!h!7toOo?L6)&BYvM*# zb&_f9ksN-@U0*3-{!+>Eb?qTqWm~ez#E5l!eS^aALBm-n2paWq5oVMK*F$MIS;qg= z$ubsZUbBDf2$jyk84I(!WJJRJ;h@|hE?9o47c8H+XgFcEdQs7)3alP76?+3nr;1e! z|M8>9KGs4A1k3EAOU9Kn&(F;piT3(uOA7jdg-Sv!SGI-x(e88JK^bDj$3=;SN+<`c z%jhYjoV@3>d;w*K{CncJp&q;(Ft1!3kUvY72miE-Q1|G8-3izr4A8=I*=z}?cUr5& zeF(_gL4-Nzx$x$aE&j~7TwnmWa%I3svy)b29`~nUT|eH0yAz2?dJKH+KH8QWczdLS zValAzm_)8&l|Nj62-IM)(UW!xQDy~47LY>_c>_h=)aqdOJoSl@Fdql3)v5rLHl?yY zFXiPoQl5Vve3e<|dRmF{+*4b*&*CfVdCHLWzm9H6s@V8^Anf`oNbZJV5~XAivfO@K zvfW=BSul+~dM=5$0WGA11S;-7p}_OsIoA ze=J!BC?pyy&&NJW*IhH5@B;4R=^zB<7S83_`7PI=TsX!(u!NB!Y2F`{*>MqO${T_l z3G?xRvZv#tL$o-)tJ*ngdqK{<-1Q{=6WT8pPC7<9T?jK<2;RFSpZcCF&Z`b#`R6xg zU1n7?>X#5=4&;FL#4BRlF<9BJy{+ARBQFDJ4_NY<;D=iZx|R0fItBf>(-xA?ZUi7< z`NM*THP2FV{K6!E=ER+cK7>5F?qtg@GKp;9GE|jI+%xNf8yx98%LDD?Ai}(xKL~T^ zLwHNp-PI+1D(etui-2;fbz5WQNnMbz5>wvDA%kh!?xyMl^Fzm7DdY%M%tyxjgqsDlIS^hd z-dr%SE~C))>);dNpksk7mzm&)8-^ZZ5t4kjWLs}b4zf&YW0GH&l%+p6>o@M1+~VxN;`q{)f#uV5`639|d}nF$Y4Q;=+9 zpRM4RGdBz-`FTW)T8lS5u4MVy>oIvTJT6l+^LC8M4nzZCDe|*W4j)UHQ5@cw*r#)a z9N)cr*TRB1Sw0TS@?Ox`c}6F(5H!d#)@Gi^!F@d)1nA z=-7`FkuaZsSct1^#z-@S8OtxO8OS+h@9l$Xpp_8rthT1srahK&&0u zyc^m=ARUE#A(8cNON3QxYipPG);4KVVr71(T0R#l>2ov5jD+g}7YpaMf`}{JK8N`1p|ol0B@UsItfc? zhqtvsFZcj2YkC?vCR;o|t{JpjboN>IiIFhBCo0=Ig5O*cTcvMB$?&`q<+;a3kV_C{ zCifMeNts1R*5{r+x$fUc zmAPRkS#Idk?`uu)=9gCF#p`i-@btC37@3r%m38fi>ZG$>$w8}*$n(c%eSIGs7h$HO z;5=sK-nemNC!TSCf4_COCzUszkx?#No`uE^X~v>MqvzSuO5q>`rLaq?`5o6l0kTgy z(7_pb&}}5myNHDO{KLzij*n%H7Z;XfNjrGj3)qo=-KQ$-e3fws3wp|YAC>6tx1b31 z$2F&CW`b4q&6v#01*@uEGfAAs7BYl&d1z?RLdg}he&3~ME();DL7?zk#?nriSV%qX zYJ$!P6XEdV#jli!V62>GVfFe5qo`!LU5S+vPY9=x&t(6iq>gs-p!<+#CH^g~%|@*7 zjfIezUd4w#kq74RP$o7Z(g<^dG&MKd;w>y#c97mUOQ5fgPMEPUH`rhTy~f)W`mFN+ z%9b)GS^cQarhcd=^g8bX!lE;QFtZpEE?X!H3m2^Q8u~=?b9U`F66T{qg|f1>EalZH zsVplQUU+4G$>rGx!Kyq5QGTIBc~mNEMeW@;v|0mEh9HM17zYvMG*n0+*gm;Wk;&Ca zw!U4m%~un$jL-5HVcBaICQ-7CY%Q&B$msZtJbX4RzdRe2so8m{(T=FUr%i_XyKGr; z7GSYQIAwecVMZa4IM*#nCKL4;q3n0weHWua=Wl1~xFsP*LQ*9$@*KBS1VkOK?N^+Sz zw4Y^+YhYc*n#v*_EQd|~2dnCCy>m_Kw^d0LE?ba9>KQ_Q8QK!0kBODUogN>X&~liv zC88mRWDos;tdp>~LWUvBLszcY7N2fhGO$20h+tqrxg-A*b>S}ParUy%>=D{dLYWTxG7?7RV4em}z8XaflJ8R6c}3t0>@=x<~lSwIzSdB!4(6-a}Y^7PVjs@D@w>ar8H^g**FHAyd4C-;~H!| zZx8~M2cIbq6gr9foksr7J0fAeIDjt1pHzpAh5dzCHIs`xFRa@0Bki<~8p@AFr9rCK&IcHFt?ve!VE$`Pd!vrACzpa!@4GP zIQ?hHQ>ZIkX>hASkZIGQjzfRQ=d(cUh4%rAjg&VQ!eS%1R}d0z{I61a^Cu~ddHRbj zKvJ4}5~5=0`B;@rOYJN^qQz^%;pw2psK0?MLzMLzAvUv~&+2{6S8VmZT<`BB$CB5O zX2^0~tDY0cFP59){Ia}IlKkW2SMun2urA}q*4o^tq`ApfH)KN1WdRL}#^{nOTOwJiZV?AXhHzxvseMtABo`W?NH;?r- zCE?b|hVQu+uY2iGTbf(Ul8WmVuc>9Of71jX)7b4oj*V5_UtRg+)ss7-mhz z$G0iO8OJrjiOFS3fan*^P0d#SOlGwFs%~{n%$o?#g>W+1X3#yOgRqsAWi7+-MmOSQ z!2qSby+iu?dZkwfb8W3HHdr>23=e`2C4aF(7mFbh3d*mvHH|ijFV}iAxL@@BK?(D3CEN9xWLkzq>RNWl za!JYZ+`_Uvf30Ns(QEnn(Xfn8%vz_^(Oi)J?snDYYK%t(7LX~vR7r+C`=jEMLc)M>}qri8h( zt5XTgu0LhEQv`e_R{XNcIH53$^MM4WteT(itBaIzF)xCTo#li0AP z5)r~l(?tjEAN_!}kwsf(X69^w!9W7l;CbXcbUm&HVqspP7hK}TG4bG=JKJ+ZfjjXZw10#*DATD zYm)8!LUKL7SEBp}$##Du+4j4({B@?fpuZ2*7A(t4^6cf9{PpMO^4Fi9%Tp!JE34}k z4dY6GrwnOoRpOi;WnUIJF?Hg3ntDf| z1|Z4Lo;@?t{Nlw6vxJgYapAAknrs2MaTN3)drI|^HPMX2HtjrGo9^#B50a%e(i~!R7`0-=2I76E0Fe4%^ z0$7?Ee_0|CVBsVJ1|j5d8wi8QutjHL@q-l4&CQ#i<^mSKjnE;|hJp`gQNN!vGQGJO zCfS-Bg6UmtKdMK$KCj~47n;|Y0fv)h%7U#EW^@ylWs8Q<)@nYw z)W>B911R!}iyQ+cCmdM{r&klFQz zwYiG|^0;deoimFlA@(RY@)yb>oQD;^LG@3t?uU51Ze_jfAdgH0WYA=C(A=VfHYH&y zhrs>Zt<3cE_7;=Tm(9I}#J=n5h?50!%78k!X7tQYr>LTp7^trCcoA1e=uvZ zg^F7omh#G!5p8pupwhI~GCPy`G+`BnBp+l|cD`)N98IQ;&`9%c1Pt6SGEGCfM7jU( zlq~^3CKvwseSCmar->DOuz* z#Lm_8wLOuzVM;vNoF!X~)!K|Dt%$&;I>e{O5S)z?FAiv7@YGARnkNT?D}5C68k zDwWMesjN;ZNmkN3M+mrIln{R(qFP`<9{v~E9{CsDPbToOeD(Y@CCMX3lFRE#vbR?C zy5W_dTEJ!uqLbG*&(1*62!$Ti!INUSd>fpY&;+P9A~0lb%XXGN|X!ziTeeU z`jjL?mV17u?`TF(i7P1T%3%4@UsE^XH8F}+Nl!=q( z*RNm8lP6E)`Sa(dD0p>vT1p}!;$wg;(+ScZh!IQV1_-msFS=3@R;Gg(;+nB83kyp| z3@wU*5*aK@5XQ}ojkn|;;!OK8Yn3h95LT?C6Ap_UTzo(j($-}XZUjt(gd7IHa1i28 zql<7!pv>9-6ej!a1%rqXA*4xKl5()O4JKy+R&H7@yurXPes;EK6G~5$fJH!>3GrDl zvW%6PNy4m583wySPcXPah6zo%qyuU6!q~Wy=E)GA)&@DJP-PdBFe?GAY_BM}#m!3#?1ov3;dF&ev%Rs{8-MKrK{KGM7CA}@ixC= zZlXnFt{2t1)r#{i*5!SR4dt&1R|~f!msGjqg2AzDwON!Q!@2hR7WE?6uS6NLOvt#- z&n4S>JuE~5IZs)Yx3m+PEiTE^mt*qngXi*Z-$Isuksp3}A!C#J?0WCs?l$@2&X9cb z`3<>uYe2d?T2(>lGe?{XXv|nM2r&m~_Hc7_S}1QP&1uWu*@<7*d2!B$icP^>UBP0DPC%)>h4T84EK6feFCGu?;#TlpFh4Qqeg~ z_M>9t{F@QTv=8=m<+y868kZ~a{`1_ z6GCeiTNU8#HK}YYNO@%+5o7*xuJ#Vp<|MbHX`QLx} zMgHTv$MWFGh)m5b*sHdI-VXWV_7(Zf=hx-4+e0$g*D3kN%QMmMq5vh0WruKckY-#n zaMi%tMW+Q>-b#2$s|428T00{e2V2}e!U72w z9}qgCVGw&6(v0siQAK>f0a@k^BxOj12#7L-8C~RqlTQs{@KCD*H3kn#m|I&+?%Xv6 zpIFnw)`b&&B!ufT(ww}_h`ROkfIBJewyUet2y=H=m%SNq(wrW=FxXksLG{dR7*vmG zVt~!tr<2C{&?pHZCd3+(>xf{%M7zqe662*&DJ{IV33%n1U!*kkgOsPf4-qT~^@jDB zNqdBUW8xkOtMY_?kHwh@eikozTCcsJq#Jh&NOIYfEgG9;tHY{%#7`#i>ITA`BFj`5 z&xs3$kz$_NEyhklv6AJ7^6%e0l7~-6WV*O$3z1wM?2>PkDF4lGZp+vAuiFyX zgp?ydd&KDjBET!*t5>gDtavM|=?!}`{b#n};NBb-=`S8bKN^6HF~m&cSGzchD=($tT# zjT;3M^oIY3l+1Gc-=y^Vf0z%lEh1vB77*i~j7*p3o=Iu`RfvSKGA;s1W(7Wck`qgE zhAd+_#`>FVL*h8eY9yq$RE<8b5oNa`C&?NfBT?Pw+W0%yGnwy-WII1oa{M<^HGnnw zzerWzA0-QMZoi{Mc_6IThXs0%C1h=VQ^qIf%vbq8lpz1FKR=Lv{p&CC?SmKc;`M|q zF0D#^ZLN{xukYWGzx~Z!CCxYG=9OM)DKvhv3i7;wQL%@cBS!Onkuyj~A-ZWRGnOU@ zG8Q*nGq5xhVh77eM8tUqKBTNRN4PHt3h){N+mm>aj#v&vI z|7FNwSk=!5-=89amAOuuc=MnGDg0thHj;TgE^=N*L}7p^Gf<ZFkSuZm><1E5cB^2F8&B-S%X zrCVP$c{nw!uu5Jl7Um5r@{CQ;tE@}}SBa(3Fj-GYbD8+axLg#UNM-h^RCHS=%p2b= z4(s`E^tY42y<)8>87BJ~F-|PK`Ycw&R?wE|s^PlzhkU zaynwI(h9A~D^YGU*NSZOP?*ryp@f-btvl}9XPeB|&=suD*|#U8@JbD<^1{-Z43ACA zqh}*VkpJ@IGx_1+3wfqQd1`i1&nroLOF?d2?Umnrc3uAPL@Z;1Z^~KVM+DM34J&$kTf6Bq{DA2nE)vKS?iuu-~lr8MwE>#zfw}HY3a3Di;W!Po&mXDpEa^A zN{}r!G9;O2sGxMQ^y)KGP)daDbsvP-h;n)#CBkRUqfkjyM3O(>dJ+ZzBtCO}J%q~! zM7gd-Npg>pVMy{#$+03It`@jqwB3~);o+JFCEM5;VlLw!y@#N0Zk1$yaoLu%e)3{W zeth&wzWw>Re5Zu@!INQmIWnc+uj*rGrK_V^?%f!W-+ggYey?QttNT~w+F+NGWg50V zn380y_SA)y50-U>S<|iI^YEt+I=D}TFaw?uWkurIcy1@nY$18%$rbiNdEfgTzj4CM zH7Pf&C@2ZGe7>xRg!y74$Z;UN>l^E`ytHiAQ^KQBExw>hK$smLNDRN-Z42lUWPyEr zc9~TVN$ewztLlZ|zr25Yx=28-E$;02xQr@chB&iWNzfZiUPB+0O}`LEuB*FK2DBV{ z`}?dMh(~-G%HcSGn-8l)qJQy!rEHlnss*I~k-MNDO52oYcE?h0^G{S)oK-ne*Pjw$ z2Iy~A{G(nN*bpIRLkHR9nRZWpz0SxwMnnvbS{g=}>l^A#kH3pkdt~Dfu(f6c%)++e3yg($U5PQi#;b{?7*Y#4UWOo#DCt$gs|2{ha?*ruW8&Q$ zmSRn|eX3-c?;y&vN|mS>E1|)F=69&o(s!qLSA&j=_Tz9)^r3lIaQPwBa`yes@t~Juk>#KtZ<3&d#%oiJ>ZbFm- z28|0^cjy2J49ED+=U%wj^P9b?ta6W)6`c{5*X>cF*e5;RUFIKs9(BR{0$If(I;Aph z6Pw1y&A*lqXn`y+@W6-zNnpja7U}N`ud%x+2bJZ^P!7idl^T<;E!7_k)CkFm#Tfz? zw1J+pS$AVqLtc29Uv?=K|!n=f3cT7L)mVGA9nY9-ptXn0wmT-^2 za=i39M6OtPrOEeoYbhM75dMwx6PF4j$19V897DPx$V$coK~5~kiF*YFXC*@JjQ~Ub zbPG8)Vw@x^AWe3h^Ef{#F%v9JTHtRH;~ncUTh7saYfAb%$YyoDNNuxZ>f0rU%SB;O ziSjkcwB0g`GAZHp%ba%|TnFglHH+c=XC8 zt;1CYFgoC%Tq#4!p*k;_ng%_OGTD8W(*#1lA7Q4kUsl2lc-FL~nQ|~Ihb9_7pIres z(c7;a{Cl?PvVcUgrTiewyh_B< zSd`JX^$>zcgA#(2bcfQVl2RflATTsY4xK}ZAV_yJq=6>4-M4Pi0E8xRfoiW=;av3BU1_?~P4D;9WVz9+Jg)soQSmg+h<%0pPqcWin^xhsPc-|25#f}V&p0Zc zTGNK%z6-x9kN?WiwVCnj8zOzst4FerWt3I=^Tf+Sy3h6)X;xru%y|@j>$)SEB@UYf z{35rI<5HF*(=?I(3zS{gSA%0v>gIhy`DG&a#&e~1=Ark}c7zG#$j5X4QufW;2eU6m z^68BPk^~z~HI5q5&aIE<;HP(Id%iwEy0UUd8tniHVcSXm_P|S)YED>+^0<wOALcM5F(Td!p~LMP3R$chc9f0x={e;dJ9ZdLv; zLX5k0uo8o| zryt+w8wp(Dzg*F6{ap9~%KcB`;f+R&Q}o~_{`LKZ?#H#my=$)TyCbONx4c(>9w>By zTXJ)DPCtLvv-+gUb){f zjiNws=Ns0otKB9hi(6>$??{{-zE?pLXa~^gZftoPr0C5hbB+)1i|L>)6_0i9ODU`# zqqSmBbaIlKSxUtm)j~w4#?GyqJ&Tmvo7@xwE_(UchQ%Ds5=wDam&l%c)X8p1-5O>8 zC~Qly51Yfm{bCpXu#zrq@{aS5$Tv!B-jVN0A%YfWTjJUD1QU-*-n*x1lBAOdYCjfX z3VdbMAT4+046%L+@L67-Ox$iWT;DbtirG)Yp7ifHtLBgAr@K<4v|jsAr5MJkOePs; zT$9BwFf>n@o5eIT*#*9qzu#R+!wi-C*V5)}z&? zCQ?{rFG4CxP6XDrlPj~_g;D7w36hqUX)WQZ#-%u_F!&tp9mL5}fp_*r+Vo8VCDsM~ zi8x7z>@9FmgK!w4(On?hg0mJ*4D8aLz>oXD;wZ18)oSEJmE+>$W82@Q&g&Fd+J{En z{+756U_Pfwq!BlE?;_fnXCD2`k)efZ3$+hRA>bE{Irg6*#~3n_Rw+p1FboB?NRb@0 zSPE*B^0-h$cZE||VmQ4<3CJady({FO25*l;G8w2`rMIki$;EcaRES+Ttd}c{mBVtj z5BmxCl8W&1cR<08XM?KngN4SfMM{^|fm8@^{^(792Zee2y9rt`yY2KW$8Xm2dI@15 z0e-@=u2f`-k(qoA-#qINKgIr4vUlkbV1;H=Y({dyDt0mVedOMm@E39;d(z+1&pE1- z`cJeOa^ikyg&}^J0MnOyFJRDDdQqtu|65Vxq+Z19VNIPpAfBHj{Al#e)mH63YFWVP z%d4p6`RhWH*ljw>Kr8&K*jbvT4=6H^020EmJwJxAsJGh0iJ??1IFP$Z{M7i6E8_XT z7f!Z{Zv<?kBp7kntX!o^L3(mCcbe&Z(3&~iE>++%rf#W&0CPe-2#w71Z zIW#|vwl&rcoXMmsm8A;aWd_8}W_eb;FVpvZ zg)_;jKo{u>RrGx!ZN(z~X9djijbK{S^_$u^ntiH-3~f~39Hy+Yrth;wM8EM;=f|d9 zlRGg+$)tQ*-~M5g=tm>u6vqoEC#<1Zb7(hl9o2JuBH2KxOmKMU~9wmRj47+1` z7>C_6J)p-)M`~_;-G{z};!vjod)vu8tiWWDSudUWNn+h5V4kdh2=6BlTy_Uuq|n{0t%;MeL?Ch=X)s88n-1Gd?@n zUH<#mVf{2!eJbYR)|$weTo7f+pt~iC#Cqe~YcJ1=uaV}ah+>j4?B5*II!mGpq$skbpN*8~iM5G`h+xI;zZ&mN zD$i1ZUZPdMjLN{dfo3ri^re89XajMjH6>xDVy!#zbrS= zLh2N~ulqChxFR$#M7l=dHI@0>w$~=94v`5~WrOM)(>(!r=26Mb2IHLxQH)gyj)u{( z`$t&VtrhPbU0f8|ZGH+1i}H;Fqldd~3aGCB-TbJ;MEZCzynLlUpLLjrEd8fq)6TwK z;{Llf)Yah|!*ZlpMmyB&(~%Lfae&5WU!AkmSq=wLRn4m2Qx^(M63ndhu6U1+?Vmw9 zO6LNJAk~n72xZOu_4|piR1cMKG}DZ|e~YugCe)hUTM?Q*uc@C}Y20cZ`Q14>5|FdX zH|j9>@-qnqv5dwR{Vqy{1OFyzI3_R^7@`^E*W`zX=x!4b9w=x%YYI&d#hc=%wJjVT zvKkmpsnKe+WO}F1B@m*x#S+x=Rw;fqdG=Xk+M9t_x9%P^G`h`miH=Noe>O{`SZJ!Q zsY`>%$-i~lsEN!WhBsP`w6B0EgFP({ghEe!Lh@1Nif`_X0^)VR4e_gQ_%Pb+GIwwK z&vnB@Vh4F@pX*3}LG|W8AJ*L2mF?N1+6cg7nYSV9zx?1qHCHhOwE94 zChBYAxD#Oj50LE0;o+1O)z+L^!8j*!<8yFuI9d6n2uB6&eVBadcRmlB5Qi7~AJv?! z&Sk0F(0L1NBV-@mCX|n7%DK|2A+}tZ3N_swG5Nvz0KK@B?f1U5M1Njl9(Zh@5XI_7 z^eqd6PW~G?IX3*%`caj4v%!u5H@yn<-nI69f+Guqnywg^YG1}kPutvbCu#Zz=NFf( z>ys8eYM;Lue5hHRD1kZ7-7@extS|&xu%C6UIpUNU+PvF{B_F$F~LZV@9Fc4x1tzc(b)7^!KUHM znN%l7ZIa|w`WD_|k55Ie<=d`h@Aru}u|nwI{ywXvplKf_CjMMZ{X#!xo0@9G#^(T| z!{mPR#l&zP#7)It`hNHu=B|msI)|_p5BHIa2EV_%{#;;8if#;iJ3tO3A(V}$cAm|x zbT^I+9=aH%ZfMXPrk*ESv(5tc5V`wQc~+*m1brtJ{Z96841L0B_RT!InVVb!&wtKy zkO=ULx(>LIkLIHOCqnt=9jsnh-h}Ku|MB}n<>cBaj*VfXQV$imfo;-qm~j`;BVFb{ z4i%5~g-?=C3_i1rhOgW8J{HWb2-HlF%f{l~HBIXCP$e@i>tH<(sb7$lB0ooaRdkAa z__sp1m3Z5%C7hm?4AM1^&egwHig03&Ee%ZozJ*mw*C)WU65w%8?;8%oESZw@lSerW zR9{hT_f?pN&e>-WcFQUxiZL`9m2vN~CG^7GC#mQ#Ad;EFRp<0Z!ELudC8C(45)naR zrE=;JKX14EMf=m#QbOuIhH!gm^x|0YU>nR{5THt6dQ8F8nce&6DCJdoPEI`UVotU6 z=HUY42*lyQf-xE{(VyU7CNeE!=i&8fzAGE>_(-1~7M|JBy@~S}o0p=uMcc!NacwwL z%~Am__wptBesX)hRqk%na20lm;d~(vsNz+~Bhz~X1kA8*vR`4`OcT+$MyjA`+h9}@)Db1|VLCXoWrmF`lS@%GDp?=Zk* z{KtL-SO!!zdB`k4N2x;r>cH%o@jgc5OK=||7-)^wk;4pRNN1NS~w?-ag*G2=o z%}x^XllA-aZvUM5EK?hO(hl0P2UM}PzARe2%Nld##iZ<+2AGHiZdkJI$x<8KR!lb6f`5rBmO+`s`UbbW|(&u zUl>AF&lO;m$rQDL;JfQ(Gh(g}f{;ElkY6}7|4eH~Hjq`RDU^BRLY#glRb-G$?+Za^WB-@kTG4a$9 zy-8Q!m?vNk!HV6`Gx49j+Y*EA23)kR7p2At0lbx>{V4~vu~Q1IcsZkr225`MQLhRF zUJc_)x8E>RyyH}VBxm&YlR9@@vKc7Im!ckdLKtY|Xd55gQ2@C+u%T`ErVPlt4fw4P z=B-b!c8N$eu^wqi{z+9l`nZMt#6C$`Hc=w?>ilrI`6HJ2&GH3~zc@?fvp)!UV(aQ% z6~X@9mfV_dd%_{$6)(0xDc0mqiYon5Y(fYwCsU&Ip@Vs7nS|m%btXHxfBwd|>9;$_ zSE1QLPG1s(Kc?DKf!s-Laby&&q9xA6?r2lFa;{h zz2U3JLM?wc^fUQ~6f^Z0JRl9|a;6J2N{-^jiIzu2?+fMK9(?Y*#g2wNw-s2e`sm0j z*!jKwyHkBdqS8)ZiB4-~t47@m*g&=GjEgh1pol7#U3LM~WgFQ#3VQgp+=BM1j~`ha zl&_78T9L>b%fM6fyf$qF*F=~> zDhM@FWa1vv>Bimn#_@*65>SU3G`>vR67>{d(czZ~5X*hZXzQaHET3bow$C^e)CQXR z)kiJVd<0b|pz#HSpW}=cd{-t4m6ov)jn)cMB>p3JK%?xqX@!-6Md)R!Caz{LB72CR zX6*fafIc?FTdpsONT>{F=d!9$>r2$ud!lcpr96xM&oan=N!}02M*i(eD2O=7|ZW`l#zoa>Tx5$X4FX)&gzJh4!H^v>p$W!22DgZ6d{uOq^fy>{?69@j4 znL%tiY@fBZaW6X^xTQL_zU38QPd#3phB$pbjy=AOb`!H$v^4r%OX0_P`ZC>KH7=ft z^PaonY+C@O(v%G7GLJ>d84b_tu1DV7;qzRf$mc_n>%sOAjX)YV?jU5>t&x|DOI~XW zbiuf_W@fd?x1@D)-6suXWH<&(#Zib<%Y4;=jGGUJ5t;6?MkNRCiRxuVuR_Ae6Y)(K z_nV5nQ$?I;^<{m+YKb31gM)ypObnq zN4wNHWDHXJo!e^VKhc_?^u!4~eFl8<`?I+^D+;+&y0}<##t-%(W!TDTut+((b@5FR zYwLioJ?Pnp_`Qihr)F1Yo%A18@5F6!Ipr)v4d3I1bAj)S0gK2ZgwR@y{gWnQLEi5y zSk8=^lcVRR;tyLwTbR~0=@;V)v)Blm1NWjE%h{>_ew1HEl2cm5$#c5rV`RTm#)%S zq9ZIw7zOF-ShD9bx`E*xc>_KqXslI@|f(P2$5U&r^=>q1&MI)(n6s5n6q2| zPB@l#`TXZWy#TtYnNNU!(VL;3U_#yRnKYY2zPuoS5cfu!ctCP#w0StFtTyg0g~=e} zzIN1hSA%2%>UP3?;l<=jrB8B9#3WK6&DGZ3&w5GB+zcFr;pG( zK_{T`krR-s3hG<|UE2$YV*+I+^}t!L+E7+TFjZs?Iwd=DRpQR##AerkzY5ILfx7Z` zeKkJmOpu9Mkn3F3yMmDG^Zp4vQ1YSao2xZ^Uz4X3 z3v&1$Bi8!2ZzI|xkEHd+1!(=bg0AorX z>%k+R1)&7si)ZB!PS8O%mxv2?V3Y+}3}2aPbL3|IGK~>@P945dGDA}^lQ$F2)q@Y0 zt)Ts9v#{%$o5NHu>{oI}IhC@9b2#*J)sq4hsg?F3vj-*VM+YT;$Nj;MM#(nZ4ls$&!^W2NjMz2CA?El9)Uvws5GMC+}l=tbir zgnXzUey_>zjO>I0hHcD+g=i*%@t%Lp{jUcy^!(8Xr-i&I&~sUU5kI_@E=Ynu=*k1I zJBpWPGo@pcv&kU1oh{aUV@9xJrz`Q^E`5A__Rsi0p1;WlQjIMa!--9(*}q*?0?WVmAF3w;)i=S)NLZ6M!kjv z0=I>k8L%%5msq@{uO{Sii2w8O2e~tuDqR(bB%q7fV>iEy#zldRJ@20gO6~ChoRLDB zNEgDvaF~~Le*oR1ZjPWiY?_DS_1nA~(!huPBhbUW-m2W~Ug=S*RBX%q$z2rS+Rbe> z6usS|HoT2PPgt+NSJCfrhBC+A>g@$g?AppQGF^ikosS%_5#25KjiHTDebqH5*{hai z&nIDts&oI`z(4eKZ1_EO)FAl!_dZ5}D;g%3`I#9~5|vPf{|P`a-gVM$d5}*k%i>%q zV7QWkx3NGSu>NzHIOs7EP8aQm7xGK%SIxojL}krJXX%y7``yeV#sFgw0=>7ltz`l~ zk=e!;+>W5eN(e^S>ru7t>+vH9Xru?<@;O{)N?CaAl{jrxb;3J6w}BwJw#>i$YfFvI zsMe@w>%Qkz`=Tb6ycefkF-L0Ic}D9k{K>9he3p+AgQTvllaqk+fU? z_j`X7G0K=K(QFVY{XqC7*VhWZ03ZJN$(=s-AyN_s`g6ez3w3}K#z`ZRH!}tH9rn-U z;1Sfz_UrISl?Djz*MMfKY_g5pnP#W!m072~uI*K#IPi(hm5<%g$L*}Wwr!sOOZAQ*qW$g)Gnc$)5hs2&0v^+ZVkkvc9W}Xq zYku&Y#tAp(7m49{5bA%jAG1jPg;;_xu_vM^b`bRU1fdy~7Hq%4Vb9N%<7mCdL%<@* zC#S8@>PuFQhCg-tfS!>S1eTn6{cDUDfqYl?f8SG#CCC`r&}~{HNyEx`2O##*NM*!KjfbEqk~1=Ka+fBLIT=*8IO~3#P#AC`S{ z_G$(?$^a1mTd63OaZF{2B;1y`s9hkg>)w-&Slxh{X?_6w3^|nvz5A!#c=)vmcSvV- z#sOeeS*sa~+Fnh%guBh}J(~yAO%Mt&UG;PeoKw~ov@aV6#Naw?2TKvI&^?RISeM6n z&0<(UUGujwCI$>c&7v6jN|Vv=k`Qw-T6ugB?%mAt@*PJ1r>iw4jM3*-t%W6{NRB}0 z(vq;OdV*q0mWltznWe>}X!f(i{=zv9(E0EnG6@rl=&8ipx@A|V8e%YXXq>S~&qpmw zxQbrBnbPww7~yR>lu6=~G|n3xWF<7zxQU*vkZPOJ;P`O=JvKru^l?G*g|Lws>^2Uv zi}z@dQpK9&!CC=+l`3H3sRfZm0^5Aa*VR4TFhy#y)~0p3xXsKp{ElJgE3S%zQ#(oX zAA2`95xDIiDUUtffw^5MOzSEEwm(~{w~Dc8Lbon1E*_1fix|w2nvu~K%}s*Wx1fxnQg)c*rFB*{*hs{r;y$#HS4bZ2HRO9D2a&B+spPu)N#y-c zb#1_^=P5Ic=7C0|k+Z)!yd&Ni8w?e4SbE#qat#srp>QZHeKES{S|<;ydOs>J z9$7*{!c~llpYk^m( zNr#m(Ug*Hj&%gEksPJRGTbm(s*y3#OOlgdl{81ih;TWPe_?hW1K`3<;?Pl9L zpfoBuIr*p+dE_3;SZUdUKp>9xW_bvN@j9d@v)bnWwAlKT~%PT5E8OFW?f$FOc zl#9W#{FsxUQTCwy>Rj`}(($z;zk!9++2mJ~%n=ur9UU*v>|2v|D80Wgm*c4_+o6$x z@gak(?^9nWgM|lmVxwD$4m-XyJTd&<;8`|_sP0Z5sRdJ>U(n7M^)Pk)=(e>NdF7Zc z*|CUy)vtueC)#n6ke!(X8LQm5-Zh}ZP6T;;TYcczxWEoX3$?Q0C2b_}?i$I93Y*haRLE6bzAuo58bJI`F>1*n@* z0+gKN0r%@(B9I3yth9$8mp3LJBB>8P0E9qGNp1Ym3`V#o$MU|2_>uSZjO)TCW*7Gh z6&R`F-2JoaO%zhco5Q8Win=@J1e~t6UbIMgAw5YMWS?}jrGy*?Tz7jzWmMJ500jHd8d#B#^`#(e$mk*cc zXB%CTUr0(g9xEZrtGqJJ=oZ?bUB`vZ!-1Nj{#`p=kIBOBXQu)Eqww+| zy~dNXhebyeL*NxAuPguEpFK=E2A~^PKOo`n>O!y^M{G)!&;TGHvT zeuC~AUG6@K`EA0EtSjyngDqixCj%?J6_f$-wa1K%SOl3u1sWj3AhTL`rjU4J{hes) z&DN&0VGA|t-frWau`Jodq1t=a4!0l&;8y*m1AB`MmN(#4)CFP~gW#&A3O_9XpkwX7 zp{jTAO_yU7ET0KBSlUxq=hj<(-OT_;<7_=Id?F}kusv(AAIv^J_E%b$;FU<99A3+eAY=leG8r?c#>(sC&qdU`ybXU5XH8Oux1wl>2D(xsGOlENjenpwx5N9si@yEWDP z*u1?twdK^^nkFsoLXI9-TNbC=%UCajo!6fuU^D_8!|CAmib3eX%z6aWDlsnyKuf!Ag zd#2wAaoVm(h(>UOPh}&-(tqg^+9nnIB{EN=E0xJTqkyp#YHYIkuChD#q(N|mvT@RBR*2z zOT|%ylj1^uw#@bQL}#4|zZw;1NYW}85g^uqKMQ-^W)}~7;l&Z#jX+oEhFM=os?%DD zudlVII0>j4LjCTZBkSrf`vle2YNVX}3}5u`pEQ8`_rYntQ7N;(WwvwjXs1QE^!QQY zIRXrTWOL8nEg9p$B|i_ifm&DeQbB>w23wWm?hHHc=s>h2bO~*P_OXShyDp&>88$s6 zNDLD6!q|MPXM%8ICH!^qi@7-YhsQ@-6$?B*2pq=!5KZ@5?>A1`uiIP;D{=WyAG#ME zE)@j+NX5T$R?wfUg(-}1X7b8HE<8RmTtja6$35F<*9~vSv|f5#RPU`_w`qoGgVqa9 zTKr^}o8KJO>s+@{4t3W(Q!PH~`V;kXPqw0eNQXoCVbyEhiZd^+W5&-h`qg#IEZWg( zSj$-KZQmeVsi7HJdbuXc0QFT91x;wS5B5I?Ev2!6cxw89p17Cun%9j@O-YiM4Ze(F zf6D&6YyA?~AnTz4*KyA|6#z<)t4geG2>IDO0v(MQo%oHr&9h)mfurP+})=9Hv z&hbgY7h8*rbHC(1J^Mo5;qB*EAd4@)wszdmmU@ysygtr-%3{Jx!L*=CHKq|zJ>`hi zd*Xk8H0qc36wsVW98B@n#V#*XvQ6KH71BDTF>ZqVMOERUgZ3Cw%qh(RZQi)}#*wn* zTjtj7ZXC7w?Xt1Mr9DzpaCrOGA69O`&nus{0Ok3ZPrl0do^lEREV=O(BGn?BX%Q$C zLhNZy0(T_#mw@4d_^wM4ibNGjr9w|~LSmm;fk(-%dc3E*r@S9mJfDsSyifWG@sZij z2@9UWyIM5r;v83$jSBLGjZ=&p#>`+g6t*0D^<+a%pUf+O2X@03Lcx?CiMrn`D z5yyH++h(}tu+cisq`k(KOrG1@qI)ZSgSy?8N9({WdQO~6N5WC?xDiSpUFd)PHESTX zZf`WsaA6QjcxrQ0T#IGc` z+m@xXyT1$hc8v)q9+>tfG$BH?S&_ab(55sG3BQItNdHeox!A@~X<6{`@0;sPPzZHw zKCpH-8NNF0)r)?ve-`4s(EK~lKJu1?M+)WqYPPoOnJDRGZ!{+i&gRZ?>UDnr-nwgl z`#7VlIU}a-_yy(p-B4VLQK5QolOp>xF#0U}b|CZgtpzqiPpY;P7~*s4nv*z7|M2Zc zF(9VqwM{{rC6WnQ*%F98Y+MBepqG#Sb}JM74!BMfXjyKQQ^W7$e8`N_gQb_v!c}Q! z*R-2?nAq-)EPn^ZAQ$@oNVOU^6bx2NzM?BB+m^{S-;_>eO0@V6{mOGiXjs5-6JL{@ zTAJ0#bC{45%@J8%S@`mXy>%Uo*0{hBXJH2wzoMb85`8(tsjY580ol>Q(H8DkOny1c z8UoRT<2w8%ife4hyjE?eXo7eX5Glz^WKJ*jEvNh~i(^#;kAd7XFssgT=e%^0wd3nE zy@v_dGGz6=&8(S+z1&o4AA`rh!p;UrvguUo_}zhM zgXcjbvb@SNi^KmMA;5J7DYt{45judd11VP>UyJd@bF%+JQ2FIr?q?gh-k|urXNFkcO)7u%RU($p8X)WY4N%@fpV;|;Wk;ENjmG4) z&88l9x$FK@ZqSYK()I;TcDW)DtFHGYgaAi~G1vP9{iLMn6zybvMUBt~-rKB>d<1Vd zx`_$1`&^HN0$d^I@y`8h-v(5$u<>5mR0~s3kEQC-<_;0-GG~2XN`Aji=o9XK!IEQf z5RQisWP;0+fkD_BwtDk(*jbgVX~zc@EQdwb4n2x;;aGR~cQ>mcKLBH!M<+v@D;jP0 z?lSxKwkt>fLY}Gw5V6GK#<^kagVUH+#>cx!PRB&6E+yy-3Sgk0pCT?WEA!KxOCAT^WN?1)ONhnp? zGdVjULe`-pXRX-r2!H~n*8xCFwR>rm#lA}|$twoshU57XQOr2`5r16G=3F{9oJT5= zdgD|3#bwxx7ED6k`J-=j3LSB{a^#EyQ*hX>d@ifrR;Y`*Lf%3uF5him-<~sH{km6v zSb;H~wYgQcT6B@SUU8!M7-sth)2rk(B}zu^`lsa*6;N-tmbLA#wN@{1M)uz443JkI zec73aY1{K?m>o9$;*l!r!F0LvRqQM%FEt1Kx_0{+27lUP11yEAT zc+t&ay{kD2SG_GR*vX~L8o+O!X;^j1WA7p@AnvL^CLQS6Zan++(k5eCQIf0Dnsg^2 z+JAHms;=dU-uN*Z1r5fuu?P7ZO5l^r#)}|!yZy8qB0L;7OjM0WB4qqDkk|Lj90iCP z!>PhVuDys@!8e)?A&mtM>QXrhkWHJIk`wxL_|C~npY?!YCF6C*p+do()O*W(3I8ZQ z+wpv&I(t8otw{pFh|tZFH^T~n;H_|nASnjZ{`>TTlE!cK^n99uUhYb=<0N%;ZV$P6 zZ4CIg?y>xq@3w8L70|DBKjAU{uNhNff8^j5dnbeh7r*^F#*0De?oL1$jP4f>jh4x^ zVzwt1FV3jwSvD+tcWN5^W#AE+vwQGO^#niQceEC6Tn&}}xp}-;o67w!+>Xc2Z*q<0 zpOETi&c;4@6>PH-^b|3edXcdqmJi>1H_2)A?N1XYjX+1A5>4u*afXqr2-!$darJ0S zKXCz~^Ni+}Hc%*DNjc+r2%M=fT^Kdha;q|=UC%Z}B%C2btPN}iK40zlL|Hi;G$tGVxX_i1=w1n|+Ua35AmmvtJql8hSqgz{^xl*qZ_={*C zAC+n*JNaC z)4)>If(EKdLl1oCv*>`qV?cvY09q>6%#b-TRn~la(I17eSC#f^VRBrWRWU?;%;U4v zrmOdoYnLOSwWJ()dH3dW)j=wOnu(t{Qxo4r$>*zQ3OyC$pq4Mnt=Al6GW>3JW}bVr z8#f+aV_DcGJf!poCOaS+H`-48`JTO#(3b_0C13TIorF2$S}{FcZzmOcQqre+{VC?@ zCVxlSSfcx$U?I_+qSMF58%aypxnrr&%uf}cw!x2d7D~g(F^;y^b~QaYb)Uq=0k+Fa zl!>_h9}}gd)kr=2@~A)O(!EaiOYkITEL{=nXOw1%UHaR_%8DG0?Av>1C-C-LdhNqmgvqLt1qot=~vU);tJ@6<;5CS0jHq-AYi^%jA_w!bO_f zRX{E8$2+;%$TnFHp>bJsx-)%wZuG$l*k8&zOf2E%6WvKz( zy#oCz{$+Om7Glx%+9)x96U(o)2Ri;FyCGnbX>jb-c&K;@7rfyh(xQ=Mnndpv-{B2w zzx>;nW%OO>FENgi_c1LMPG;SuaA3u?!unSoS-QKio9^(*)B<1Gvu5AIlfchRo$EtR z49#$}%0xUfdHC3>->wJN*V{s;>wGLDOH*sz!PNHY&v!lgn~cpJBEsSL#2t1wyMn*H zf8A-Y7tXF_u+HMDW)3#Lu@ed!z_3;?)zr8ka5dTj;ZM@BsQj{1Cgo-nhH_TD<6BJ_ z_wgWNh`Y!t#2u##_lQ16w32P`3E)72Q|3tx_Igu`A|s{po*mW&~ z@0hi`gt1gaku%!AebR`>4uY=Z+zwrKLtH+#cgk|S%+rDETuBGQb>zetTEuQrb48Xo zp`%`amXW5{_$GgA&3>@ z*h;e3-q?nCVPjJ!Um{g0ZZI`&DRI;86%c3PVexYJ(id**`CvQ5BCl&kW@e*A&ptq- z!^4Z9?Fl*Y{HMHB4am@%o2x~BH%N+JC*IEO9&8;zEAl_g-{TL;EyT|$M4$2Rju{+j=nLN*={uWrVY%X zOzL#ybQ=SGMKnFkh_IZjzc&7)N2iv#r+C~;$421MaT_^693U)6-yts3k3r6iy7&Ts z@;)b#r@~sJCTaqx)7?{dkix**L9)4y%xid+(!b z8bafhV}kRCw%v-i56n!o-PBboBKQNpv~zyxy8+#s8Eq-7#B(B?!ZB!e%6PJwISV6L z$a^Ez6WHv^hX2$hKj^Vm?V{9%jz2I6R5!k+w5P4tOODfs=Kwi-M@O%`T%t8I4UgCk zAy4Y-_@(9ZlG||*C$7W7f+<1Zohk!OfX62<9MT*KwI(PNRL#bsLm=mMy0ci7GL}p4 z#*1-#^v595>e%@TL^aXhI5a;51hFv) zfprBaRRsi9v!`QZf!g=p^OqW01H`6Qxi8r6x?7DJ^T^6ieZ*b1Qe^9rfq9SH?B^BR3#B7(2Eh%se&@JP|*&61wQ>0!;QTS{c zJF2Z7a0>R2h_;oEPDlDoeK-+3Wn%BM#0HF}-2nCa5O1CWd`i0JO zVK$M+;GjNO`A7emT&jR{OYlYfN1zw0uPB~fd0n-6B<3qY6((!lM*PpfIu`<(*-Jo2gvZ**V(*2*9GhHyR1LkSwx6uSrM_5PVtPd*Vj_9mq5_Iw>Rj-YYi zvRwWk{Kq+oFO|I@01rp0HF*5hQII8(b+f9F?6C5kk3Z*cL>-*a5n z2ZRYZ;|;=%Aw_Q#X>aXzKSlaBM5{~{d6{55Pka1WZoyroW>j4 zMHxc+A=eQ(gj6cd=ffjTB(ma?8ji)f`ZDmUxxLBK`8=g=(DBWCt-F}WG3@Vz+xvVG zY+_3~ht6DT8AQFlSmCnkC(f}Sm%=B^B)@)&0AG#Os$o60J3gvp&`n?--cK1o%7Not z7o``K*&NsW4);dxpWe}h{ki_dz+{*hk)*1Z`V9BFV+=6B4rgc7!vSMFs$X(gS&mso ztK&rQ=Si3F^cS^fe9D|`(a67ieFF>+e^#>dP!$Z#6$Nt)kkaMHI@rzPxsEAiuvWbo z@ER4ZEoXnTGYDY8DhP4^)Ko@9hQdK&5VnKSo8^OM%a=xQh2CcCE zB{Nbq;-ehpG^*^pLCA4q(h=Lv(bD9U)UW#pkiizq4r;qslreIkVu;ZMBq%L_qMg|T zYF$~P3%(8llyxHw_1Nj`9R^iBg900r+xI3!?dDnaVeS$HgU&_2ZEEiZY+%)Q-Ykwz z0i?%BepvTJ|D%!4I_WNAfNbr8MyqBouY>5ltUq)2%U{$^p3~6IplXX%?8`ADQq$W- z*zPa62gcT2$nE&*2=#-S7~RF&B+SG|9!wXYYmq{t%zotPpz{TTa8}lKQ2IEpc2;i z%%u>+GQHXURe8RmS1DCltEvQ<)L25#_r|Is_;5S0e23Wia#aXM_v-8MB6oEao`B}X zC(0bH_xow9BL4sv&u`rUiq8{q@$!rhOP=3)Mi`gVyb-EH@IA_)QN&3bZy%NxUKh;T z%`;Xv^$^7)z>&sThRQ3`)*+%Fyz$+!T6~PshJ)xa^WoKEfYuq$EiFEX{v{~*qjgZ` zl)Gvr|B*3I(lT5jxiiNB&xOmXV|My-qu>C})4|~7QDHC2@m#imU2U`Q1-~2;Q1CSb zJxKht;8qDLi08JZ${+$OItX1!*N>V zgtCcAdlumQ9>?g{dqU#bE(X4dd1vhqfr>vRqzX7>EsYJ5R9U=CZSM`4fo<4SZ1sSo zgT^revYfJt?TF{n)hJ1BNQ_cZ$YAUJQLF0AUg-K;3h$>UpSCRHj_?m=*s){)S9)sC!-bo=&AX7vDln^_47wn zI2jWD!da|2h%5HYXRz@bM#}ojXnIQtGZT%4@`_{8T8o1(FD(iL87LJFS@9(dVlV_^ zf9YqAmZZdlv^c;RdolZ}UFq%SkS~ui8o^}^Y}NQ&<|^tx)DXHl;iR{ZborUZ4IANe zPfZoSyx57?==W;%^FkJ<(r3qd@)hGt^`*w0X&dqdBC0Ml{$E#T9Tipd_WJ>pkW^Gk zKoluax?up3E@_eOF3F)00g-_rhHmLrx*Nu!2I(Gz8EFQF9_sRY?|bii*FArpb@tkO zo&D^!&-w1>`+0~C;!BplE;w4j71U)8=WSYjP7KW!0Xz{+6Bl zV4fRgk)S)*%<=S{NKtcZBf_}qi?hY>b)L9wKlmxh5HfpWuv{s!Z*t2+{h@@&kRvkn z+lZO+^Bb$+gx^uc#m3)C@Xp`VSdDgPt5~Fin-sy7llS+RS{8$5yTpx*T?u4D!^0Zy z`MTJ3BXx!+0n7@=J%{;9m3H|3U_0of5EEfRxvJxbdnz%+z|+$5GHn{H4J{#1T% z^%SM(C|nXCvmqOq59AKf2H~Dz^&5AUb*$+JIo3rB_0NATp5lTZ-6tEu`>s{RoAfmG z`k!2=k&8-MECVj|mm?Ed_+0Zt-A>t&yfFg6D$C$d|GP!>^In>x~WU3jRe zn6D3M^#?*s+zOPQ+{XE>$oYmbf7Z>Z>A0FyJl0vLW6S-M;#h;_BG(ockS-17C5Y&BI9z#A5N2mIWuDvQ>MIW#n>4(r1T}zoPJ;l(z#%B$851Vzu;7Q#~d> zax4KbmHj{a_Hq8ugG5H^?;mn5RLeZyEPJ2;2vpw;V0$-KFY~)z$cK{9VS z7Cpo^^h#iXVGq(+xBl+yzUW@@tl3^M&w{o04^SmcdHHJ46u)~&4}!XzD`bS6ou4pVDDIeCx@W%qf>cXgbY2!|@~5GxIs5`G#i>LDgRToyc$3&5&WV_*9jDbe@jfI5upr?H2MQN~9 z_z0WyRKw93aYN_os8aVXzx`P>JDrfiVo|l9@6A=q@x8+ZI>H1db0% zr{a!$Uj^kPW&f@TdvoVQ#6-7uOo$LcgB?t-xk<6Tx_-ZP{T~lZ%^dpG_(-~K?gmC^ zm)7Bg7tqm{rgU?VQ{Z3o_XdH4S?mXXS%sW=S_}+_EiU)yOLh^ZHDOL}862?NC=NGi zZ0YL`Z3*w1ON+();I*i#2Z!F#6e%ey&grzm?S1jsddv@v%PG!1VyW@#g7lWhS_RPr^kHvGDYBSs3i3@K4IAawi)1H zBGFkasjm)Ow)#y~>W}`97W^Wu^z}&rPM(1X&X?f$j$Vn+-KOdpelOYq_+f)tYOt>Z z-?s|uG4GNw>BgLozWl9c7B;E8gRDPqit`dIHV`#++05)0Iq|p{Wlgb5Cm=Pe{$BO-1 zwo>WanJG>KNQ=6-%M22jy{*mcz|r94-BzwtZ>XV;nkK2GgnY{~#if`j={MupsR%mE zxOysp`H#s(ZSq2hx%2OvMDwrP$U!+HEUl0`V9Ff@(Yk*^CeJZ$ zXILlv>Ni5}iSP%ak;V8)4NmuI4;h5^h0hT<;MQ;@h05yNZ`q|nnah#yQfE_YrxCQ} z{=bM{Ha7cp0zOTZkX`>#enb1ET$Ap(;8;neohe^4sv*trh{x%g9l-0Uzx66?RtNAozw7v1hGQ;z=6j-x`JV;PpL

=ru z@G1WC2fNTGxV0Ofj41(3IJ5?MVsPqhT!7-~a$;b#mYyq9K4A(0?v0LEEc(%YZ@=Wv zAlF^WuZ0N0kIoSSgOdCgBj<@$?<5i@9chTZG<%hhXAhqTSEvAtom8E6O85E;u5HXy zfBUSLq=qp5OAlAd2IqTizF74C8#tra0S-8s0V*~O(9*Bl#^%R8t{hGAaxX#Fx=s&% z7L9JHId^-$_<#gp<}_u{x!uo(IvR{wVm^FfaBuFD4XxP_)3Y2! z*!sWALO_>BD-|M(hxnn&U#1Y>I1sfy-?I~+wP@E5R2_0@5*x5k=qM_5F^TKS+i)r1ë*C0WoFtoEMDK164SJk_z3 zR1PX|QJPEsO!(dOzR6*oD#^mLSB=hnN>H2Bdd4f^&AEDf025K(tB?ZVw)K|KjY@$i zr{)Q|OwSj=YdRXLuAVI7p0zCz*>$#Uh!2tY`I!ndCeZS=g^o~q;Q?PJlB-Tj^5LyMGpXpwu-19(CkdZ*rV7f2zXu?F zoDbS_I`7=2X$6Z=H5`h@lwT(em0=3cB#bN{72P`fQMcO2ISvL#?W4a+04KW;z{|?Z zwHQR3k%(JyPGW4+3B0F}qHXWsEbJ<}=CJO~9y>!|wo4Ua9jc5y`z>%o2$*=m2u%vtTgI#5`?2}H6K3zpY zG~#h+TKhbysmJvs!sBw^2KfJ_*VCl(Pko_@@13SV4KHKS;@S9VP@o+wiZ4?3&AeU6ItXHZ6|^svADbe z3YrNDzVta8*fZ=_ZYj~jm@BV@`3MQp>4%jn#wFDgt6o%Q}u0wm7ZSe>0_6(~?mYX*#Y4GX6w z0uz~`nh!vxgU>0FRq-CjFD9xh{|JeK;>XeE8cYH{#vj@5)9bCkL+=+8s_|*cJw%1>imcbEeIXNB2uB z2=9ky(s5{3t{09l;i;#t`?&V2EjnkOO&3#|sOAf%9$j`#dsbU&$Vh>0K zK0QcU`A2JSB(*L0MI3DUiQ(IbBdPHoli_<3ny3GcJ{A-^6RIo3;%5XcKDRqHfw80q zNw9PiR!8s_3e!$aENTHz6!$ef$H%ZGkErm&8kP(s)=e%RXtT$QVu^nnR~(6v^3vB2 zk2ljhKz#U?{K}bWrIU#4+-D+_v7&Z#B!t@^1tLdZ+n^zs?$ekr^pZ~PM1%yM=1}|OtdYe& zi=Gk$r|RU8tCUzdS35OMVS%4BI^Mq&%}KZ>c_hldp5K(9*??J&4*tmR>iyyD(@hn8uGF>p^Sb^*5^cTQ znHsPNP7cC3F!zRU&#vVolKkd4Chc-{Th8a(3)fkh`IVj?Reei0U1(%IhP9|V`-Lh=->bD!Rk4K z%=fTgOTnDbSU$d0JaOCKrlUq4>fW}8Oz2IxuMIKzkcOq7K&(IQ=IDs013OfdQjN06 ziBPc8EVs4f*|T!;#p?ul@K^C8`v%x?)p+5ML6d7DHckzE7xw%mI4oUsZY1imZ2 zGS^&sQa}dY2lN6O;#jnES^?t#?mYYG%It>=p_D0cvje$gv2!Ak>f#q5VG-xkVP`st zXUMh<*R6n+T3?=>uo^aHit{GtF(t;5(RY0HlYBCSu0d%vZLzXFwN|d+?|4y?4WI8! z_(wwPZL>YT-nt>H^7L5ZgI$9fM!K0)Ed~4*Xq1SJ8dGb`&%0TL8H`(Cj9gVN;&KFZUaX87P?9 zE4d?fjawTDX@wr^<>Mx8YpzXi12ac2rF;E_K(d{*IUscQFZsdJ&RNuA#w$ZoV$B3$)aGDvKX| zlv+(Pr;sM_9g|?Y)_Rv~QQ;6_S#Ia<%Zg<{)fqit&ACF@(Q}WdJT>m|ZH)U{#3W_M zapmxPLi0f$hN}qMO@q~?_mLEs4PLQt|M7_g6loFYtCsN*KziaV9CGM#=usjPTOG$N z>v=E8Upbps5~hiZcs%0MfJTI+Tbpq{Sx@eM3soyyIDR7ym7-P)K$V>}f z^Noq=b^0ujNC-d$0M!zPVqgSj z?3CCCK$MVp;oht8O1SKhDwL=+{UAZiK;s5~YT6p@uK1v_v0eF(bceXoi{y+8x7w6v zImaTVNp8OPo+Z7)CMVTS`@gAgWChUuIa4sKNx*43ssf)NFUvk3fCQIU0%Kqr?PUdd zKgvn$r{KkZr<`!J;e;Vb??)O}|JOGM+*~i|2O`6*|TzGV)(mS1Ibe*S0LxM)_nyn&Awe9@jSKI34jj>H0T{`di z+fLPj_F|fTe-0?WJqzuB*`gn$uq~+4Ig`s~&9>_NEgG@yI4{P67s{DFnW_<*n0v^b zdLhTQj3;ECJc4#mW(m=NJTDm}tgwn>60%iVe=;uIfR_`CBK<0{7Zvr1IFHu0b;DlV zYBW5G5*s0D6N6rck-=CKV|7E;%Y+ja3m#n)Zo_{@Bd;$9g{{<~%zJ;Tv#25|R#T59 z_dV@;Zz4M-n-{q@C}Xf zX&)LwmuZ(w&q$x8Ozd$84Tp7sYew4Ne;+zj8 z2zUK0`gSU#TFX?Oj2d~!qALHf)&l}uDR+!#MKXi@%uHV{^YLb+f1dS?} z02coHqJl4+a6%W1?fMkiT%o2F9BxB>Ga82anTb&ejV@U;|FjZUzQR};=2Dx`2lYe= zKG2Oa(lU&V0Nh<;rthukw^qou=2m8BJspjEdHq5u(=p*Ux>2M+%cG~}s$!O*5qH$Y zD`#VeX#**&OMH)xi)shBF|NeGSJI&Zip#!9l5c-D-J_7B71@RrrIj@DY3MZg^2w^~Bv$KBmC2kjddEZL;nJzo_jI*!)`mdl#d_z_4~DIAA38KGeb`k~_JwrmbgG z8tlmF-5_SxMMq%&C7o7RO0|W01eNC@*}ZEh;1dpM4~uh7dcB?ZHsuD}*1SW#<(U`L z)5~x{J8`^8WTqHfFK#C)3!rGnW;ENI&Z-o?8ds4cq^Vfwj0r?Zu6>wP|+Rv z=<*ki7MxNkLqv9=?Gr1p{dsX%$sKBMIPSPnEoX&49Vca*bclxud+~W*Sg}I-l8?gu z)AIa7GlKfv>Q?YJaiads_F5uD5{*&+QhRmz1g`0Y%vd7u}X6(y|NKIC2#*Y{&rhW ztmn7rrCIGsv5Oe@e?_-SzFCbL9-O;4i~{=-!aaAlyyjF(vQn z&|zks7l?vm*}nDJZyae+PmHWma~Kw9sl%5{^!N?ofvq!J*h{EggaX}ycKF%1zu>ED z*f^fOn9RRCkGDj81SNKHszchr0~s^-z9ztoY&7jUhJLcAJ?J(vtrEW(BYclE2-$6f z;5o10=XUfyVU~2t`@>Wh90YdrdqYkYpIM#aq_ffcZUEH9GtoJtL8IAnGd9Yml@guY z2u}3kjN#kdVm>i5?Myq#M71!oBZepQ?h@*w#L7`^bQDPM)|&s%wcP(MzmJ$S`_v{ckJx1 z2G|*j0y*VUV)_!Qz7_SZi-B0GE|=)%^r%~G(_}uu@$)|0O_|(5H|zG3Y}vr6N$+Rn zoh$cM+GeX^CfA`ifr}>Fns|zPPTjFfD$**kA)RLuD-JMOZ?{u&v;MD*ry3KatWuiB z_+#TQac^{$vtgI~Xffc1DYP^^P>1G+MvLWm(#9wMJsz=W|Kn>U;IH3xn6}xgnlC&6 z@{5d-)U~^X)2Ps?mnzcZC;4+dl%>RvC&bsEKSw%o=8V%oOhYeNz)Ngs_-33&s~T&R zezH`}ZEx46a69I~f=z*tRO1dR_vgNLwkzBSo9cG57$p!sALZlNo*JZUSBEK}d|7t$ z4`Z^M9J}L)F$YUp#7L({O*?^qe9nOKHx+T}!0l4lf|@iia$DiTKJyn)v+-MNNgxb4 zAq=sYP*#dZ7}omgJVO68va;xlxiSB}ej^P{W*nud$g$7SulKoRZWu`gDH z?F>LI)lVRl#z-Rdc?7=JN0pBRj|m9xYDvc?1UB%b7IT+KL+E^Azab)k;jZ7`v0f9(8Y26OBXHzy%vy@~0r$;^E$AXz3X*VN0 z4ouhDg^vUaQ=|UGUAgq~|K>{>ecs__Su`}Mby!z=zWo)9&lSKiVf4dCFt6wxozi0H zX7Kw+&v1&n-{=z|CI_9i)0g27m_9MNoZKN$JIRUZpDU#PMb}g&UOxEsfzVJN;n8P$ zQh_&u4H+_Gb?{b&=pGMyDA8@}s&?$mGv&~Gv%sp}tcSKpmE>-w;qln;zP%PGdn0L` z+$mY;y$!d{6Hz&yEl&_%6OelRg9Wjb&LNUhBLe%yydq5Nos9YF|12WIS{n<_^UPVUzi} z)uO6jMetQW|Mr(JyOZqhc4kp zZ>RP0iMC@OpayAaPYzC1KO3&UgI@-JhBN)unt>ND0?oYdbLey`q8v89i!(&|WWUE~ z#4=AmHE{7eW^@yig6L`~)NiP{gbJqHI-Q{XGKZWHD|)4mdLeAcYAybJ{ig@7$#i_! ze4XP@vnkL!%dSYyKQbsG^CPr#!S5w73!$ zlCwvoJK-A?fsH6xX22_cM{ z?b$OG)93jTZ5(22U9TfPWuI0UsFJSsn{tqnSLiS1-o zm*5O4-kEGNbL#Uf#N6h*pO`I7-<|Ep|K(kxX_P)$LIkDTgKxmmsw|9by=+?OGFyW! zjU>2_^f#2D$I;tbQw#EKt-o4m_-Nw^%}~Hii2DtZ){c&(+q$Xx1n$uGdwWIruWr%S z#YSb;8lQZTZ3%@0{$ajoZs2LRcw*c?G{4s2%nDHpoyV(7o3jHKt*ZW^fbb;IaGZsi%4p%9v!Lvz5e z##5?WG{}N-3|6ld|4Vkr9d1N#Lw?MbKvbI<6sCw#4we?24mAuf2F@~dpRy*j()CYM zn^(IRQ4YI#{{~XZ^jv<#&EATRQzn9+kn<)6j6r-8UL)`W%#m8o*x>$~AqGZN_DyFg z9JeppopgP@D7p%AY(o;mGjD4pkquESouu7auL%%lUN!3y7V)9A9YS$65^r<=qe(y# zzjegmcZgU`ZousW?FnW|%Z{{$kR3BrSf8m*nXBP=aN!cA1dmNU4EcBdsJU3DOE@*gni&_!J@Aa zYobcCEjqV8u}V+Bsi+J#01d4aJd9~yNJPS3*f2K)n#$#UB+H=XW6k%W$vRwpAPnk{wNp3+t)P=a4#UAHj?7fcBTsW=UoN+Y#?r zT*~Y5{)n=vp@PQm*76+i^#eARya(jd^&k zpAFA2pKXJmBWzI&-XBe?;p=Z^PWPV=t}sFs%Lm-v^MCg|tGQv)Z7@Vo#_;$5?%Tao zSZ4+!?)xnm0bXUK&ns^&*8ej0}al^^>4cZ-A4o*D6h!Z=DY z-b||}eVdP!_a@pwr@5XBm$JOZ`|5Y* GU;Y=Y0)8a` diff --git a/public/images/logo1.png b/public/images/logo1.png new file mode 100644 index 0000000000000000000000000000000000000000..d4218bfaf5b873ac28707890a017cc31dadcf754 GIT binary patch literal 76636 zcma&NbyQT}A2tdi9TG}N#{j|*lG5D`0z=mT(k0@MlF~7B2uLYi(k0C>Aky7K_t1U$ z-Szr?@1J+CHF4Hi`|N$r{yfkA#B(Av)fMn@UgMykpx`Sh%4(yaJR5rYKZk|!^j*{W zvhL{z)k9lB8l~b7)y~twb6Y7jDHN3IINUo6^rvHNS49I46cmE)|9w#VU4DX5P#z1F zWToDJHr>DX3ZPVhZsB60ct1N^3P&E!h&$PM5B;${q`mY!fO}WWwzY_e6t(<_OO0)% zf8$MjM)R9wc>t%TM@BnIw(?F1#`Y3NH#t2ap(8pndg%R2Vxs?AHCGKxfZ@MpNh{k$ z_1{T1EC!3%@PF;y^8{`M*?)~HNHLA^zkUQ#Ohf;5Bl=25y!o$Jc(@E9w#UC-vOVfz0HrB1Zud_2_>CzViwXxek#m zPEiKTF3hFG409MP|NYhU#>fc3_;+$r$nIxlqOZ)iiRnpY&eUYZ%zroWhnB(O0Ywu` zAL<9}uU7-YjFgk6ryIadelmLe9F_KlrsD_A2{wO9D=U*@Q-VHv{ZjOCNF?6!F0RlX z%Zm8*@2=KF>4`TlQF_R6Pd2Ag9G#tE7*p%`i?T51vC>9-h;L=HBW zvATtEN2PrJuF2(R;^gj`YowEU_NzfLk*2hwLiv#N-$QkyA;dmK%>}Vi)Y7EFZTL-1 zx(!=7Rp1UazoZS5dkgsudb}NTrjuS)vTNzpl*zu{438-!>JHG!KYmt2`}y&UT3B;%}7Q{7}&@ruwI z*h{$9Tc~RQnkZm`xIuJbwb0EFR*$8=zM_YAM_J0PNJnPIbjQB>b~D}NMCo=Z;rYxB z`+(Gi<~er3ijOK@wxxVKC;yfx{4`i2gFDfaX9UqYS*KP@Oi5&Fm;hnyV-Fpa%WG#pzj5C?*& zH#0ukjk-FuDC58*H#Pi%hCW~)C@hl>7AkLNXP5LRh1t$wvH;vvSgeIq&U5?zh0yBl zpG_X67{Bv}}$PO{>gti6(AoIY# zle$8T1H;PE^F}yhQ$grWxv~_rV7;}{7l*H|F&IaE`+A?5A^y82JPuba%`N9Q7X%RD z9QXn`v>()D9IZiW?O4J(?tv@d7Kbj+mQFZU-d;Zk>}k|pF&&-Ni?6sK-8pnjiJh{s zbF$|XjBd^V2W1zrsTgE#lif%EqYiOu<9A)r^XT-8dU{jVrV-pBp9g`kP8LW}BUA6S zb-FDwJG*<0{_p(F&1)mzb9Q$Hqgp4U49aAxt->~bE~jC1JBQwyg%2cW|1l%O?@)%J zMs3LuCBltrm=Hx~S~8JZquCG_XS#;Fl9DH9W}S6WgmK`jrqVV8?-oP;x><4mfkr)U zp*WcL6=$t=km-M%8?tUpVxzajNJX`}2(o@UpExd8%dDY33~z)Yc4i^z-^^-2u#kY# z@?vO_Z@$_e2Nx&kpL*t8sVK?ciJ=!#X$R&Q*+6Joh(=x3H^O@9YdtSu}|&<&$&=Z6M$ zv;3n>28K1(clsd|kBD+&+-S$ag*&L)9A!=hZ;hz1IJ*^z2PuuSou}9pV0tyxnCn~l z@Mh}5;wbQ5jCyRE8VHLA17Q|jG`L|QRWASFKt!a_+eAMkTMaU%AM1sxs*b>quYN^G ztHG}jSks5*9J->ZeN9`P81V^JiiRdLVKltE{1{EdA zs-8>G_tWTW|JP5c#$-`XQz_&wJ{k@o-k4rTo=v8S`iNQ3ujx%q4I3_uWi@EJ>U%FU z4>p=kOiqHLH!hKC6-h}{E^Jz+NrQ8aihFWuHxz4GFy*2my4f&w7{Uk8U0+WJjZv}u z&*f>2Aps1P?opBw#~!I>3H^3aMn(~AHDCH?J?FH@&r&Ws{JDfaSRsuH2vwRjbTLAHLHZTfPKow z2@GPeya2tKv&VhWFDo97oP2QJInc{nfC^6Ic6CuxC_~vPPnBc&tLs9nA)JJWNhQE= zqPFQbf_{Ny?)4GlNxE6zO0bA{qVe((VE#TCkx>z`?dF>`!ua#2d$FTRn2S>~pA&ql z-dSay)Dvvf(QPYID%(^f%yNG2Szoj2lWhBs9eRx3ed@vsWHhFFfPs=|#i>(%aP>Pu z95x_hb4jVCXy4q`B9L{RoK0iXfNxI2Hd+-WIC`TpT1x_5Mix;T$Y$tDa)e|gzpfsM z3QxaVH#bjP?mXbsI?S9G#-*d{QbFGIX9O_)c$x9g2OLhH+eFB-MBzOCLR1s#pckC^ zEBc%E4segk2{hD$t^8D`1V5GrztC81fj;CqPFXW62y9R~=7CEIWRXcOoGe1p$AA&S ze+WHsree1U8&VtLoLgh;5T#A-A6X`MGX)tZ&o#f^adt^?Kr?aQGt9v|_sS5F_iW+g?LpH759cj)ZQ4g%dnJJ&r^B2#d@*0dc1VvoLr1Ph$*@& z&f92Rcz|AwVxQjh+0YH$Q2y!U2!4y{zZ@zZ%&|MRIBKb-P_^6e5-DF~)w=r+g!!vz z*tL&L@tmBf*O}ShQdzkAlYwyqjDVqa9XSu$5B5J(OM@5P_v|Yd8po{I&+7R2XONS! z{qG3lje%v>fS`HhlxjNmx6H}(eVaCKOO=#(dmwEez|F07Y!t@)Rnpxw9?FDnbw8c- zq!)^cWopiwoj#;GT4>gk3j(cQ`#ej3kfa1|NZMhPR#DFg#m2eWwSYO_08iR#nw?Xw zHqP-4)Gj#6od@Rn!l34W0p$Yh-iC;l&?d9zmInxmR6H!f{_1_1ifV1!vj^bjn5G#E z$8gLhnZFwRaZ@u6&tlZYWvXU6P=;yv-x416C=hO%)ZmR~W|+j=R`zZD=&#(E-Fus! zVZbdtwK!|9w;?i(8C@l{lz}{lLZ-odSX`?sShx*MF9%MLX-Q-X1vPwZ8?OL=*p;Df zO*6&|ZVdy39tKM8%=#=r^Kwq6Iy!WN=iii}EuQnQ2HZ`eXj~>os59nd?avmd5_p#4 z6l+=qLp)P^Ftp)sfxSiD7gj_d>lx=OP0rmPES@k!HV^{l%|Tpx(E>ARzs;zdf6*9UJ4q*Q)Kz z)4{~}D7Es)EV1&?B+*EwjkKAo`9Er*ihXfmv1xlXqOLxYdD|NoX9ka&CgJJ$#SrS- zX1sRy~MkDE>c&L66 z--Qq7WrDm;-Ym_`ELD?oeaI%`ALgpCH%!PYLRSNxs+HMcyo$H+_~y#~>(Ip!T|Wvx z*6FC(L^7$Nnv|tr!C0p(1@w*E@u1R~uB9a;l>=<}c;k_(0)=l3l`Ky$(&sEUF$7#8 zi+oRK@lOFRF0lE_f5uI8yB_?+05@T(tOm@E3nR)YIoqEMuo+0fWvQ1g_!%8MDZ_nX zGG&8}nygBn%)sGpkn5NvGWlfS3rd4}Eb_fm=&Z4p@J}X+i?mXHvPj2o(A67tz@Q0C zn#qE_(Ufo3&6tx8CIpzc!$`$tgndQ3!~nKkz2;&$Bvt`MS5sB4d$iiM_aACYEzu9) zs+87LwX&%+#}!gI)U@bH*3+-NYO6Q+$)Eh|s)?-MqS-r=$W)AY+a>hpV6tTFK@J1` zfO^V73wYUK9Q*WBF?hP~oMHJdtKiq>WbS3C#KT24bkl)nX4uB5&M3cQIdy`SCkD zW2uFDH$mz&4wuQ_k1a4RQV+}DU37ienaaQ-xt_8K=7&5aCy|+E;D)gp2y|HAXY1ZZ zpRZ;bmm|nhaig3A=jGyvH^kNMo0n+^+?}Ef5}mqenINfp4>(}TQkQV`gsT@0U7=4g zRPV;Cbp1SIV~}2+Y7jRUO9g4^g$OQM>J_;aK)@@;sjMfENk(rtXGR4?i>boZyGClE za;Fko&6AUydA~(#T`$q)cAqJ1VVg>Q|Mt44Em+ja#nDJ?v3=A9eBE)k+J3kBfKRdS zl$w!|A9@k>f3~fwiDT1{bp2bxNh;chpiLU!63VWSHs3gKGL>y6hAgt}iL=q% zHd|hY^GtyOgR}SdZZe!QdTzSrfUfIa>-0CAu%U%KK*~wBnYMPcNGP*M|KB?vh>M-4 zuHMX7bM|UxoW9r%@^Mb?@rr|x4&UDI#|n?DhD2D^)XK4k{!<(wLi=-GVFi&_dv(3P ztuXz8o=XI0#G)*urw8X8#l@w`-viaJ7gHM$IZ51)!!FM7;qRs%nQ!xG{^9$CG*&fD z2wOk&DYOs`5aS#%RhtRvFy>@L^P_e@+I-dIS3a$WynU6H)lgRf7HTw0+A>pYx{@8| zEe5vMEBV(XfRZde%O{-+dzK4Ca7DGqoxXzc;WLwN91;?%EAf0^KSQ|Y_dBdE%DWOwQEa0a&Lu8Jo5qDkb&~ z1r4Qg?ae-F4-c1@8%G^YjF&Di<|4m<8vcX$QeOfV?~j%CFX!iz14*Kg6ZyX6cUGte z2hRNZ(R;y*W3y8Qwny|P5ji~ctID9HD6RsYM^)wc%|flrZ5G+KmAB!ar1)^l`q2R} zLWFMz__QrW8qXRq2sDe~zow>3c{|EpMKzKEpa?(!0Pq6B;k=*A!|5(O2^@OXc22{0 z2`A(A+|EiT`*#~1Lb#aHRPU;fWKt5Hq{Tf`JHCUu@~L=D!_1^Ifjr-{s$r zH%YQuy>&hL(%@eiv9(GrJ}J9puG<@X!JL_NtpI>O9?$zAHx}uQhM45x{~WR_{#e;G z`q)N#)e#QRc4I0d$!0e^h`gclGM!T1gPu#bNsOdlnNr&{GX>cdo@7g_0y#_|-rUkQ zph_l|h4|hSPp+`0rla!kB00(PA+y@uU+v)RL~v748dOUe%GfJ7b-7N5rHzhd*dcT~r& zfv)Zv|4AXLEUtjsLl2GCKG!)PkS~Xx*34!h&ZPJCWisd|(#s|$5J2Wn8a`3REn|!g zl@~B`v#-Ad1m$u6rM`Q_-w|8%#ic4)$wtt%z9!lHTsNZZ*0y*6b z9~MhN4xup)HCkb@U%dVPqRP=zCX*P!Zlm_6Zb>uGmm?m`d^#yGA0h!GPC1hV zKroed-d>LkxYrcE@BZXPdnHDH~c zC@*50_Fu;i^`HBj%Um4ObV;EpE{=Q-)@r)azv`!l(DP-}8q>`R_)Zhw&v4>JIRbaF z3nhd0(gvnE(l@05a6zUYA+rnIX@B*nOTcsYiObBc>d**7sSko>uv1)i9wD8i>Nf*5 zMJE*LY3Zq!L@LN;$L(vtse;X$_>e}VSt5~s!|T%*&*1G&-D0qgZzJ*nFC*FGSI*oB zuEggNXg|vd{`5vMnKh?5k z9-(27dyeZ&SJCo@egOM>-3THKudvF2UtMow+yO&BHiU{LV9}E?5qrv_<%cPr!(0FU zc(ZV48NV0=<*w&%E%umm&*t*lD(9HcQuY4G6wu&0&s>O@UO0N&@gqk z2~QH9#|RsslhDEgzCv+!+cvunVdP|KwWFp*%kH zLkKR<&;B4wP9w#4xMYI2iuFGNu%4cvhqb4C$5M)Nk)b=#Xi=1Wz*?G$gA3zk@?G-HHE}e4jEuW;675}t%T~n+-n3JwjM{%Ys9jD(5t2K)8 z@lCK9RMeu&;>4VfP0Y}RwnDe0zr9S7J*7Y{XzEh}2W~_ZUDcJi5YtK!x<}=H4h^Mt z(S-bC3Do|?Mc%Ne`6Z5bsxQmiFHjGGn0{Uf=E%a}>U&qsrqAu;);lokK*84vCcSPQ zdj*vn$EO6+H^#rWH0%IMT(n#rd<1MFT(xb>KC?dFWOv!wcY-Y)YG#ky(=ju&-`g*y zPMslP!sdI;k@=~$tuk6nH9sCN5=&WKXbDoQ8?1*7PY#I*ZBa{4t8lrnc>;v?t`$SB z&9^lK$vAN2?JmA2v9u>2ya5d1a>>!bag0iYmw(7!+t9%{l+z;owaDXvhh(=`tf#U- zkzx0FAS;hJHG?tXfu%3oJ_(w)w>k{j6?qMif$k*ICp)j!;j9N}LsA+8U1ld`Q8n@E z4RaD!!43r?StJjH{M}(V-Z{A_!~Km#gJoTvhGnuKY*$orKHpPe><;wS8Nz?m>%lA9 zmoB*221agfnv-Fh%K zZ?d)*0p~ZqmJ<2F#|8c+B_&P)IsH*Hm=i>vDnf~@wy|1YCVm_^SkjWc^I`n3p-N%a zE>P80X#E{Yicq&!ztz0qV*2wuww*VDe{k(5l8OjiZp>*nivf{29Qs^5Gy2AM*7^LJ z(Cc?Tq3f4s{L$8=I16*NY?5w((YluH^$=}%+*5+5b{O!6D^?M*%koCezjVhZsxsOq z>`mxR{YuWlCw+J7OQ!q+p|3eL&=2&o#+y!;xY;4SS|F3SnSm=nhd(bzr96wHhycG! z0#{1Plp`t>e=n^o(&tqvtFF4Y8E#?9d%|Stwwd-|6MsU(n)~t(KZ5omNUY7KGWJ|e z;*>={Y&6laso8AIebMWFQPh*^=Tpsj;yHJNx@d(%+9i-J25T z-m%6tH3_lDB`3cU!5E19(JcwltY5N_smjRAENp8tF*G!El$6@~_}-NROLU~$gM*WE zaBePx`qG=B`pC1IENgGs?I*4EzM-rLs1?7b%D1dDY;Rh9X9#1Jj>x@kvJ zdg4=EaN5ejq14Ym6^MdcZs%T?XQwnj6Pe)E*7_jMgem-FVwgw)vO=vRB8;3=tw$=B zpNzZ7H%~JV5VNs%WO_UC_8dFSO!}G>2Qt5AgZaG?mtH>0W)BF^_@z;yNMMZC_kT@(kS0~!x+P>QsrF0o_A^HO8 z}6)uN6E1XxrQWay$^$`fOo!4iY1qW;J;0)JiNE7YHLigEjI=hM z)hO#c36;EiZi&R^zH#(j?M`gZ#}@D)&Qne#x5_D$RTaf~?>mit|RP}5oOTWm>zB=#;$5(I zW@gf&qoW6|t{M|`Mrf^9?YQp9Wus5q9JjM5WR08LTYAn%tI*E?-VC+LtMMozbR*lo+zPQmlNpS; zQJS`U{gBQh!_3MH9K_?sz{D&cy1BiLaXh#`@Lw_A+oPPT-~3gsHaIbnL}VMzcW=L) zO1{5sF27eKRXIO5XX%b6^mRt7g9sBXsFAyaZhU;4hhL0Qj+#zuq&1z7rz}*3HZ(K_ z)ly&o$L>!~2h212)KDgdQcw!ndzax4LaKHUkU?3wijq=x+m3EJe%O!P92{92ZK1v0 zeN74%-TMhwrlyDYQWT6XXZQp2h@PZft4Vgs?R9fU-mWa|A3qE-`m%m57f^n=8pF8b z2qLk84mW92{G59E>=m~edn*J?2fN;edASAF_IxF>$+K9g6+N$Ylu7A-1a4e!$>;G3 zIiYaqC$k1H&sK~8=0CB>{{FE2m)^$o=<1U~1OrPSFZ_K+`g^FTuu~~EK}ULupiV8R z2*h7Xp#tVU3Hnk@o%uHmmZPO2opqVwwoQ4~==|$eV6|31CF9sL%r!}w{`QK#B{Ws> z)fN7_%tCH*go9iZbUEcoHSr5k*j8>Zmw8IsLJoJgVtnYMY0B#}W^**6WjQw{=|I{O ziTK*t1yAKFr^*)hvwx0T%C!8QJ4^GBgXD1tqF%#FhSd1#yWWR?yL4FOHXY z{F7fBL^`e3hE+0Plk#+Ibe0oMd9c!$VnRx8>4S7Bk>LeKqpI zU}i+em!oq z$QcLIAJ1og*~bK3`(}k~Rz5O=rHR_v5Z1zKi8mH{HKLawwoEwGdUlr?0RNVwQnAMl zfM0eoFx7Do>ut}s5k!4A=delNjo5)O4sgjcI{`ZN^K~{Wha!C&P5*M^Cx?(bP#9W) zC6wr9f5u;@MD|3gsy{Q>B)9Y8?}%3WS*lVtAV9CdP6##rt?gJria(b3yh#n4*DXqf zeyDl5gh|-!ukzGrQsPBb=)jS<+4Cs4Be|6S@k-#`jz$3VsQva&St_f(d|E*;%1Mo| zj?kCS<7sqZk7pW>OpkXXkB&_Hd4x7dlxyFUwa|o8TK}ugfyshT!XQ@ENK5@9uZ{l8 zH@Jh(iF?imL=MT~%edOFq}%V1Doq|+u|(r9-jKcIlZ~>y-7|Y+>$pQk5pid~==~~v zs{Uv0FU_&4dfGM3GpwEUruK&$hbEuPiiEH52`z1bq*=2EB$XlW<78>L+9 z#@h!mRi0Ur@2nCKkOTAWd5{!biR`45z+->9YtZd5k%6IJd!hAEZZztQX*SUWveNUk z`1eQE8Ld}V*(i-xxo8gd5f6p;ZS`mvo9G*ct!{V)LWH)&JW@y@BYX4%jeS1(mT6joyhkVgLC9aIx89@Dp z9}*aA+wpvr*-bnoTK`)kjd@$A*m^79&+aeC?v7Vc9AFBS+x7mqn7`(efSe>$>y77w zr#TOJLitoP?rJab5m!^?M)FDYAds_oUnJb`c=V&0%>wRcd5m{S9TM=REmhk5_IEjV z$5|6ZIPuNFvibX5Xal@c))?Xw>|hEZg{3x8R^Cc|iM|wJCN1@y=AOmy8!#>Heg2@= z&%+ffI3=#>GAFQVW};;HdS>c24>Q7+_CmMAe!jH0V$>U^QcKYK8RH|UXZ|-^N6~?^ zw|5^9-rb!q{P!CV(sCnxf-8|@C;3A_qt)5v`EEUYH$i+~`wVxkgP{SGq@Wvs9~aG5 zoT-^^R>d=uP6BQYYWMO{INYJ!t8>iIeWA%*$6qI3!r+g8BgYV`RiUFZZrGP-xako= z%bVgu?V8GJn=Hm*Weip&5F}|UiztU#+dnpvTrMcx;Q22c=6I*5EjIWE$|2sftUfd} zHZq;!o?0CC-{m#M(;FcuzhT8wFvnzj&O|A8O-wr<4XWWe!L?^WIjVj){JYfBtDZdpW zak{zL>UvevO~bR~uH-;}Z3naCSkX?pr~V&{kxqz=~4o)Qup&BzNDQ zIaw|My7f1@TTAYJ{CzfQUCoIGjzC>4fWAAszUnEs_O!~yVIM46U=jX({*3!xYXfa7 z$bfY3@BPjF?cmi9ltBjvhw-u@k6xklOpaX?C#Cu%x_n;p?dIhQRli}|)O%=-)N{718 zg_7q_I+Ku??jN(sl0CPm=zAd)(t#SJvI#Y^5b2C>@Ap$%6My`nCw#III9X?x>QePZ zAqN~pzc?J|o4_(??$Z9vwYsC!^%KjLR7%IqF1wH4i_sw0^w49*!Qfk0jqHfM+^Pi} z`vR4Yt#>1mbGJiwL5gd>a||6Dydz(&v9&d_#mvZvlCY=1OD`qUimhHsKnn53f;&H^ zH;U?{I=;aTP(d*$;yjUhjBj|JHNua|yI;LuExniG9JsigEhR#`(0}HeUEVHro;9VG zzbjJe!>c``!SHf#&!MEjrmnrNV~kHkkezbwy9`!%oy(0>;7^KkbLJag{)BKHwdJaB;Oxlp1ig(f5S#hlov(ST4QRRTXI=X3IkG!&S__07#+ zd1D*KPl5jCD=jrOz}_YZU|7yTk0(Nx0)m9OmrXf@^)jJ1XeRelHKUlIr7uyl(t6=s zew5C1VdMH%NE=J}NNlam^Jj_Iba2(*Rz0$vM+e;dI=dh``1fZ5o`^14aetYQQRZrY zR5bKU@ypuUlM1X(sHD8{uQa6JX2+Hds zDxnb*ZSluDkEissC3iYT&?l;uY*DhyAB^ChqkMlX@{w+@uVS?<217iKrEIHY#MaiIGRZ?O;?JEA0=dVr zPcl5@MCib*qHyQMkmjLK>l-I&^)_hxUuKE3hgAF|${Tx2OXa0jid0y!Qf&y4Pa02N zEIpL)84yM-9B%u&dp%Zl)uyz3k}kAr@6Te#%lW7P@81Ds_McmlHNYrEgQZV04qvi7Gj^f zv1E5<%N#kK$M`>aT!P3ij-P3tU)*{(K$W^s}YCY{dwSW0^y;hEkHCLH(@&!e2Wcl%}8Euccf zPwHa(<1kK|Z^x}Dm82IjfECnBN%@gmrtPPAEY{S<>}=jng`n_CPI@|S!rNcRWwGZ} zru^dxTe?LQt;CQJjs*G->#3-S=`K=I83V~Qh|vI@7W&{I19eo!snksFaw~O+yUgQi ziWV!Mk_m@Pp%7P>)HQlnE3j5M4bmNGM0k&S+88f5I1Z=C8=^e_8OIni4?2gx|IW%oNW*f9L?NAo3YPONVJK`ulN2Ar5nz53!U@mo5#n>N2 z1ff1P6Qi76K`VsgFUTUZV@Ye7ms{top3eed4PT>~tSs8cmI3!-PMg`C1riIu z)|y7lM}}B3Od^{kHvD~)kO<*TW8(9VOW3^Ey$zm~))ZbZU!vqzCwl1+zo84JVjMBX z1V}w=ZPrM%u9wx7bo=)FGXaY!sE6Kkf{_{#3!U;%ynVwllIfL=_}as-wRv>_WeMnZ z)spn1gHODvAP1#Ge4f#t^Dsgl#&fCYh8%_Z{ZflnXz$D+%SR1IXqAbcyZ9j3}3-=;G{5L5PiOs3_X>4XnQ?G9&*vU@f!kPTp?^(S_3SI=Jnssl!oMEYG=y% zqK3caOyPVTtD+5jKbAjaF)b;jvA@#YFCEv;_IcgaU#_ZDR5JC1OwUL8nng3^3W#Fm zOCY>8#d2)vNxdxU|CVi8!uL(U{dLpb-G`a3KD9RyeK{18@e$metUXCSV`&#?ps<8oOkW5qh7b>`^MWoS6v$Anc(vlM`-h_c{XoSq#(zlCQJZ}Wz zA=NQ5kIfZF{S(wgLwC|vhng$}L;@{Ge_Bt0T{3ou+0vc4a)en+gRwkVbq0CyRO2Pe z+6WO#OU|d?j&=^;rsmd92^g^!sd?i1ZJn@Gl=m2uTs}$tw%>{rIiciB@(RnHQ8{R_=$b9@qM1GW;k@XhlREY`_eKkjJkJ279jkaS;ZR(hTIjk72G;9k>ps7qgV!N2%QD^jSTvA{ue z^l#V*~rN6 zPL><3{t5mX)%F1{>pC-WRu57(Xta}A_m9~$gcPnqGgttRC zNW+_)>Bp3CMn)YuRRpSMHkCr!X;bm1-y%XWUV$+x`nuq1O@4+eju9` z8-*!#oUg<-KF3bfN|n({)(=hZQ~J-z=2+)~JcXwHjd<$Hy_v;XUKu>;iKktdH*5g| z%MWM9{#P4?qLA;(HYGn9-PfYSvAuR zNg7Bd(LXrbiI32ATshVp<5iH4z;;BxB!gr`LZJ~d#mda?IXdUoVtbxOzGP>if?|$FVv3B?+I&wWl?Z6Ow zduB-D@8_O_vbXI8;*^x9^oQ;N9re>RwVP6TT$o+N!+50R@1mnys|&02J&!}Fv<|?Qn#JhudBQa9g-INV9#O}~rT0W7JdLiu6g_lmo18;VyIlVA#@l|3 z-ePGDG^ZoH!5?AoSN&?g9A201zCzv+s_^`ozk9*8D=sf?vLmOGwYBk}N`7+(odGH9 zP9wXniJ2lshczsnC)><0Rll1AxxPM)JQx|-@BzR_zV=&te;U0@-;oSA)N(+u5{3nv zhvwl#?9C~@ztzL*0u>nH#E_mm$?t9j(X<|Rm-s!}8a?au!!Vi)S`s6*tSj;3FsR%v zBnP;jnEG1NzRVQMzy<;a{?BO>Mn^(sYM~NIU)W_|;#7Y62CRKXb-np&+QMnOv9tE- z{-+8u5uOfL=NXN2&&6wX{-67o z=^;82|4f?EQkQuQo8&>=KHZ$lM>cRHJ8IY{DoPw z-($FE92eSv8@NBW8_(vEEr{qOS@y{41UeB_qD2PTt}cDg5ljE%_4B>W@D`Pz=hWn!Y(^np%MX)6UXvTRb`(Tz-6Lzgu)U8WhY~?13i^)d@+<%!@I0}tLCCfMn7F0D}Sca%SWW>CZ!RQ37nxnipm3bv0Imy}4|Q*f}hXq4>}z)s*5( zFa@z>yQm9-*Mz`SKs{~8_@@j5EB96B@~awO?ShGc@F|i+|3)rSdYfOFu?RD5t}1I} zO&-|W6cfXv7qXXi&(ZY*Lr-2to*ou*nx{G?7{O09z_THr{`U75DoMT8XnMAg(`KOL zCkjz+b0F!KV<7fY2^|@;NMud6OagZ&ZUYMVcCL;-6Gf?sdltS)UpOaN%0P^aPy55G zjFr%^!uiterREZ<&&^9U<{Y2j-`6!(P5nF0Y%>YrxuT;nzeuonf{PEcImi8`D@>B- zVcI(l&P%^$Hn!!<#tD~mMS>}F%rIAQWCPv`4TBemD5hisq|NXm#IdQC_I85}@odyf zVJbz{DmC#NVFHs~p29Vx2B2A}KBEqDor?=05#Vc&3*~Nd@kfP|keDAwjE{b`8S5Ut zn?to~(811+gnmP7VjePjdZ8~g?Dpn?A28sBpnW_}zgraaLNw$o^F0%L5;9ki0o93# z+~#rv$IK&oaSi(LgTwaRQo6&vri0pPuUFEH%x7$63Fvz}UghnR+=(*_9QAiakPYIk zIg7h1=Pok5oI6@ANIzx8t&r=7ed$u-#de@!+Gq{*l_Dj7t~K2Xpyy-*6E`wwOvj`K zr{ZE$m)88eww6TE za`$S~Ku zz_hL*mN!A=$S9HS*bJeu4rqgr;^^RD)ZLDUB4ql6avdc+`yp0;Pn8O6-j&;v>KFS? zSe5yl)>_5Sz)bpOjR(#RN{;bRfvhn>r71NuQ?QZ}((ZPjLCrXa8MW}aT~qfgk2G7I zq`&Ni((v2gI2yD;j?{unqj@q`1Mer5>c7jlbLjKoD;HI$(K0he!S|5fAC>+6i5Iy2 zz01Im&(e{&C7|~!PYm0yZ$*u$=uHiibJrx#ijzx!Win&SHyFgIe=D*PC8CdbVYZyo z@wn)Bz5WEjqxMD%PI7(BmV(+kSU3+tm|=}CaA6EY@7pG3;SVt)bhj{)=yofLAv9j$if=E`kTnBhy92AJj)Ai@Dy;sL=Z@ks~IY~+HaNkH^o!a3AeP&*(;&Gtf zqeWEcDVfOS!1so7GDpe~Hiwj_fqXLYOS%oI*aNiIRaK2(@gZDX`XmN#uS&M-(3|8a*TG~kMAJ&A^A1H_8C`VUu zW@PQTTqQrc`?QoH3z0?E##!tcLqvN*YksKJIKhNx_~)Op1NZ-`bF*%o;*0d8HxLWD zENPDU>fWY{JLs#*3Ye5YYPLV5n}3FZJp{N{hIMdEMtx2)|vb>#bO5UYv$NU^8{QAXmvUqIm3(eJ(e<9`A%EMwU0Kt7Y@ zuY#CgCcFXPD=ncgo+nA4uaj?5kNV4XlNh3Jc|^|AxMzkw7j`tVfN(K6?7F29M0I0VQl7B_ruA0$ZStc>55z8{yIxnDe#7{H$pItL+DbEOz2IR#F^Iq(BlEJ#bwa7mN)UC{vqlNBD z2K~8?C;x!+Nxn~6kjSssFJzfP5R*BvE+0vk9Rrx0LoC#e zb}Y=T<{CnWW3SUS@r=CY1k?$y#+lePJ3Au_#d)*(dEPEFC=cqFyw4T!t4&r`GrLb1 z05Z_f8n!Zp6na>#;Er*53^~XyE;;jB|3rtuJq0fNqa3gl z^M_@b1X+e)IT1Ziu)%Fxn~~<=rx?f|`EZhW5NQUK0cFJbC_wjRw#ggG1VE0RC3r4~ z69gISvOkx*jF1Pf>%F>;-?}w~#P{hzhP$$yCU{n?+0D(67gksd(Jvs)SvnsjE;&sY zIjBE#Nl@Z4H-~R2i`CHiTz-AXM6@++;|$s$iPSgk)MXY>+w9lY)|rcqh0D@yZT;o( zT}Fl>tyt=8@G!@lhNVDc6LI%8Za(tniV$V_esg=c*Z5f^@%99sL7+z>6GCE}w{I*oVRx44i z)e-mZ>!@Epq~$Z|Oz@vWIWw`ZyQ4+!+!&DGe-$EN;C}Jt-66R;*e$Is1?`|ezzRb= zy7HzH=2fYzF9veVs)Z|)QeGxh-k5GlZ*-qDD&@st-D+BV9rj6_qvX20K5yi^vYl9^ z%_2?G`=lCw#N`FACm~I^U!>hI=tz)j8nbs42Lai4QVAGQ^O_!l>=XRhKgq}m#{svP z@~l|JA8sZm~!iK8R$%Pn3*~&UPcyeCOq4Z#R(V|DxOfrCUv-r2nl+kH7g3DUJU{ zN)z8oY3fJ)-9x>`QzoQhvo`nRNr$Z-CkY)0@U;U8Z^ni#urd)W% z2wA4Qc$?tX%F_mN#q)HsWUdmJ27IVBAH4C~am~;KnIU#F0~zW8Ij0SHzAhuMMv+JI zi=_(E<{d8O65_)$2*PsOphU1$Nn*RSw6>X#ZtjHQzn(V8FFFdp(Al}7S(x!%=54UI zXK&W@`?&Ymz@as`V;CV$fSfZhYireV(sPKvyW4hlbpvwckx8&-lNh9(Rr`-Pd$6z) zgZrMIZW$a}SyN@=6Z|qs$G0D7TqLeTgQJs#3`3T&B>&Afx8-k@Fn@XHstomaN(;VDAJw7o z97!_buh-Ho;}IjVrNr{Qv7iK6$@3Dc8NQOz>?0{nf3IZt&r*8xuTmQM7b(5|A5wbx z|7!ZbW&7p-rRo1CTQB}E*?RT=Dw+Ntfk==2Ny+wiQdaU@GV=UVDv4zptF+dnJypcT z1fy2`Sc!t+ZWs_dNCb)=d8T7HSpGxfb|S@REH7A*oh*}>NavI24!YKP0ng_l(y%g< zh#SqTG&)4`NM6bJLEsvco0pxFR4lsqGgIbtpj_uP0a-xdx^kZ6SSU2uM8Ed-HnX7CYn@{0x(pzX=Esfi zGAgw&&5IFK#gun! zdS+JdzhKLdM|`?Kei-1>x3C}!u7J2g?fSvfkD!a0M9!dhTXj|vrce`v`MBPU9f>gG zkiVirJUu&allxwbOvvcOtSl}m;Z&B7V?T@^tHgc?%7)m05Qef%ENN+KP-5JrWcjN6 z;pFtoF#^YG+OG}RD$?8bAN(;B9K{B-kO-;IAu(;Av(^wltA2Z5Am4G)H8|a-U}yHBtSV(rwod)F0+r@%6`8+ zE%UpfEKKW1csALGYIaUQ+SYYxW1ZLja1J>xv2IQ1C2>3tFDp_No z7Ob1p)$YKE@}d1g5}D+N)pWjTOWwgz}CuxFuhYvZj_0#c(yxvo_*4IPqc?3PTv zSF-tj$u?b)4B_%xuS>S=wq!f*Yx>N#nO6PWGH9zCW~v)PMz)mbu1*C%=i)Odn??G8 zrXQsYK_36lK$zeBn~~@e7U)<1EhHt@+hhNsB>HWjfFq4bcwx#Fy>tcJx8D2rYH z<%}7KAb%D<%_BclUmmhdS$Lge>7CVNt`XY)ycGxe4!+B@{kAsTd)kZ$A2e_vItKE_ zn+^1zMQKS~Sh!x;672w25Xidnj0Jp9iAdvjj`&njSI30qCMC?RCPx?^T-J~uSF7|B zM8`mn6X6A83ln)05&I~-n=tE5*4DRVdT!Ck^62=C6c<>&GRzXkT7jbVPT*J1q)$mh z!?Fyi&gbi8u%|;lzkNl1`{gb9`u=sfIn*odtxcwgjumtOMEWobb6zsFEt0Kom#h-z zY`#yj%~vGbdQEbzwVCHO_mb`UO0wiP38 zl{`;M8H=_pMINor=K+vqCip>;53(#ffud7Q!`lOdgL9o=xMdl#%;Y}YFfKA#cJS=D z8ju$fmQ?EywQNvklmlr$kY~!z%aQXS$oLFHSRt-hcu{~S4fms_p0O@7SfaimQ#@Px zO@epw4nCu-*&-JZQFm9NOxUMP&I4GHjpdtpP0lK8Z0m^dkkps?GTWKqErBhIyojs9 zf)Ob?p}qOP$Ux?hFWfPxf150%vcQ|sox0XUe}}BoaYOnbi^O5x+x{;ykaeufSb35C z72T&@P(~&b$cH9m9MXb?-P}@i0KwZa+Q)vNf9GumZ#CQ%i1w7$d0dw^L|tGVxMPe= z%*goEoVjAqcu*ds13P&Ya4gGA@?x;Dww2a9ty-z%BIpc3M%N}z8lfxaub&MzdVBs$moTP4zeE4jhH z*Ypnwk^X~Z_4{n|HN8e_xXPj2f@;e(xo2#`3@pSoWnH$`DOrt-!kQa%L)YgyZ}*iw*tscn}Z zWSN04gc$;TSqL+)vypemGM09Hmm#ZRRl_tf$rxEdX0Y}_mQ8*R>Bk{FkYo=%$N9w7 z4L;Gk;QB0*gN2`gi>>~b#AW8Yh));jEMHX<`9TJ0m*}fBa3#YtVtsAH<{u%`$00xO zY~^$SD|*wJ;*v~E6=h~_QC8Q9!u5KlJ!tTS4$(P6SUU?*x9~Dd4#djLghBI# z{_nDlA2i2iA1dh{vB`+#(nciCrwqsdq{&0aJ$?Gr+ym%HX%EONvQKi7>kTpenR8A4 zb)SZvCd*it-KQ0+<3%RRj^Jk&Vl!h=C9ixorKaWJWw93=^W&5$q!gg&JT^0l0gSsw z95=W>N|m^~PSV{Kgzrq(X}up*Pn_d<sX{*T3jtr^X zZs3}+ifhKIy(Rfref3Taj?!3F!c44X$Z~Ok*E5^eFg!BGe&FE=B+W#UD$Qg|Q(lJp zI_2K2L0iS|8u69&7#8Yt2^w&&+APwza+uF^(~#ua?@6xbw@Q@%R;mVY-S~USS^7K4 z_5DF|U0+D1^+xcMCVn+!92W~h+p!=D;pTAPSb8I+;&Tg0XOjab{vsv(o8SDKg{|Ah z0zLIZ@RMGhFpINYC*s6_%%YUBWXjR?ga_N z1;g(Jc}B^m>wLeuB5$6&3~;d_|CEEf+nh(#5kFVSACqZVE}KXX+Re*3mdOOv?1`DYaUnoibNs05Hq%{1$ER~f!IYNj2>$>th8NpOAIDiOH-?(Ei zNTNK>E2*ls5OaBZW|qswdV_((^muX(`3DdfEbf#)b+Wv)qQ{s_b8$%w&+aY=Q%cIn z7X~5Vv0W<_-D(+7xA{V&kvvwcqy75Zkjnt%n6jXLeNcouCN4Tiz7BP*yvQ?_VPa6@ z&I4hF^tzn93q)jrU}K?gSHkV90s`(~|8kT1iae~ZXN1n`e`K(w zsZp-Wg~zs2pihP96Dk1oE_hos-BP zubLSoFjye(Sm03b=M{vGWA?dC{%heid6P8M?-Idue#s-{j(;z%84M_lQ0eiD3ZC6a znG!O5<`))2D7jGIyWJy}EJz`-h9QWAwW7nmENz&2-q@gSiH5RZ^-H^>4e*_lW%5h3 z3;ej-v>YJ41y+kh#*bJO5E{yow!s@H+6=LqL6A31`k%VlT{veUxB;oWp}Ml%B)1VJT4XUb$*~^nNW4acgEWMgGJRSug^)P zba^J-oE4B&CuGl`KR2R`8wSJ)62)sACrywDwg&;3r%}@3@*7Aokr4PTrnsIEWP?i`|?m;klor^{E(B$ zekwD(m7t7{3d#&!z*`NXWi&NIxVsDQlZ8j1ozXCoL#! zl818yB}3y9siARcLtt_rq2mhqdL2m;cQHBnQbIF_#krwFviLZ6e5PdiH;4yd{6=DJ4xN&)94!QyO3!HdBoRC4rYa@vjMnC)yf7@KnFmUozqOEb<;icQJo}53 z@qK1OV5)W^js`jjNEp7ckY#+9Ax&5_-NLwcve$l%Ei}v!Ynk(~Dq>w^f*+P;$g(fy zk?s&KJMc4O(7@z3tjvU&!?HvfQD%Xd94xn#m6K-9qtkRtFa(#*lY074P+ts;e4-y@ z-0PnEdfo2_p4|sYJRby#{6Ul%7~zIO{x1rutAo{$SL|4s>+A8a4}%pFbrwR1V)5Tp z(z0v>29m`xw3OvV0`f%r$Ms-tZr<|4K!ChDe4mcl+%c3SLhvApwlwc0>c}u0@J4NF zdfF_x!H*jPqWa33XqW(6r}-xT$VhW@!3Gi^QV#qEHw1%$~1khhqww($(^@NrrURl$9PUt&6NeoL^f!XN%(u zaaIytSsIlJF`)OwPHjb`04ahTL6EU3liUr1?`V+jg2BEk@x4IiX^0R8_902QA~3=4 z^Upswzh$>9e`;_mGgeoKB!h_Huc(7TEi1~*lo)#D08sAK0g3Y&;80KL34k9$*0?8D zYu+w!JqS4a9D^vO$$Ay3U4d1XLUP*O)2 zwJ_Q5^1LO5eBzE_Wuc^$g+j2%(RY}%YyCq;XwUAu%xY_4;PB!8`Lr)vh(dJ&lm7@$ zSBGl`U+(CHpkHlbram8$Oc><&#LS3K6EsnDG3}FN(IiLO{`Es|CDmD8dufNXxg_PK5h>Yff`2tv4PrXm zVkt}pJO-h-?0^uvWjXD$?AAp(2CR!|!VLBjJ15E{zQfuASz=`fW>WhTM8MlhVuCX5=3Dh@MWvt7PZ(j96q`c1G z(sz5{gqd^54`kV6E;C3#el8Nsz@g;FC;u_9!Qw|gC~p`)g==-bx=f| z^F3SiR~_=9vQA`-4kfs_ol!m?1H#kMUWfzE+l_|0dK;95`-V2ncE{HoKW5%)Xni4v z5uYmXVhHk)*3yZ{7&va<(U{ZQkHDe5I7*bxBlwC0()`xb?P1M)+OaX{!_mmFDATCe zLcEPYCZ~KdprTmJq`u9p&DoC6l`vy%PF4$Sx?(F2+OWw;v%6^U+k`aZ+sr=4H&>*x zJR#-c(`4nqZ_Qo9EX{+s{IN3>4ZLUifeA-FzC zkB*+>M+Nt!^M!0X@y3stPC0$A{lGKvd!C(r>K#`M@&;jMKtO&kTAlN_5J7xWAux~^ zUX|m^%&Sjx$xFS?q`Zx2DZzrkP@eBo2WJWDkG4*XUk1*_`J&|o*F)-!dL{9imq7#r zBFY2*Wy*&>@v;E_b1b%$1MW4%pbmprzGb4PbwcJUfh^#=%mBDqWrVkB2ep%m909IpB+oGR5J4*W$M4L3QiT<3|ZUXNitciC*x6_VYhcR5wVb&@Z{p&!wvO z_rbSW2{enMFk#Rv&6E+u*(}XTd7+q8X$9h}rCi>W3ck(rFGA!DCIZerlFG`2Sd8Z# ze58b2A~;#bvJ6>fVG@?UhB%>oQT`A)(qSFJUeZLT3Rz~d7gl8mGX&~Wwk)Rsse~j$ zmMJ4hCDti)iI*kYgMhyA1gJ->!;oc2GZtsJ5WWlC2XeG`q94{q>XW+XdHr5#@LSFa zgd(ioNM}!e@X;oJboy=$zi2>KeNhQpE?Y@rz7Uqnrfl&CbWmORG8=)x$~?a)>q*G3 z^9Y6FPNv(ONAwYo~2;~6s;F!6D} zK@Uq>6U8Fmm^b$c-aue!hwOeVxJFnmyG>fLTC2R()Ya^(H@CJ}k#WuHjJE>3-B{Op zqpl)8El}mOR|dHj=9mL62TAi}LtEvIMV5dJx=r^ZAA-YsbGCC&{%IVlxwsBaa#)?mpmm~gqjC}G$X`2 zD+DgB*eZb#=k4votx2B}Y{_jV1QLR-`x{#|aMwKp(u`|{rbL+spw09E_=tP#j|1RWyEHEmgDH9xG3yyio0(`5NDIALPT`B)UOnnIRIyq3r6 z81XhJE4Ri%Fqs@j*>RjsnuOBx&T&6@J)!t~0ECqp@=I)Hh%eVU2r!S?ezhb|O9%P~Ws!bTR9MFj?1^uQ#w!k-@TzoMHqZWFg!1gx(Lqy9u-25R%-| z+$bHbItna=Ne?_*NfjuhISn&^t3u`Bu`n+wVV)^2%GB(<%+4FH)L)tov`GKeGaI z3t5I7F~QF*%kHyEgThMeL=1!uov^oS@9ot{F@O#F_-0 zFz;9Pek>5R;1QrkN}6r4lg~A=oc3MGIY-@GV_hT(W_v6P@#fvdRS(@OhO3 z$UT$(Aot`$t9eIDl7A++;fjGTH-yTwKopOTo%OAWl++g<=xrQX>T}i1p)pn-WD0;EUzqUJ+dmH${b{0k9};6-H7uK z>Yqhx2rEdPZ`<46Fv#=oLrc~+ZG@R+v}+QhSj|W4=ywxly(t#vj@D*d-nyrwMFqRg zLNG&ojYRCI8U{gAXWz7kc7s(|9m{mlTN@9twuz<;$l4K>z=GVM5DzZMWT>E0oUO!GS`gC7a z!p6B}nOE>w8X-tDB(}j?=0qS>z6m(y9SOgIEJ2jqXBo>fkrEsew5AlTrV>QMn9V_$RdW0A=xsP*@2`9^@zw~;@z(M!q9Ec&$ z<%1=BmKiYNVgj+^`7aA71M-7~6`xY9iVzqqG?WG9U`r;eW}=)~SOU^qTwIW%l9=-t zF@xuXXe}-!#9m1v^-sMbDj@}#L9Wba*WwL_Ww04k?d#dt%_Tv9WH}Weg(dd2h=R zmm82{BD)~7YSGP9-;(nQa^1q7YA%P676#Z?&{pOI&;#^m|y2^pU%%Iezro*Z)e&<@)y z%|pSLxdYb>B4@N{Vfw4U&`G@od~ygomrN9_Y%D5K9+&dstB}@a^!VkS0O(3I4LSrY zjcLm=KFbg$6f5M2#^aV{|NUNhAu28cvq?1J~#G$Q0+` zLV_y>&+QZaAkmi%fiyO#yt`$wu#-<8JcK$3gUz+|H6t$O%RJA*66eeHj%UUaxwAT< z4yur~K(ctw(9X#dZ5d)nTW4^`KF2Q$u&QHa4-@C;i=Aw0IV8;hV;2@V^V??Bvj~(nCNed7eqqRA&WVucHlr(p?Hc6vC0IzFM zHGwqy=q@NpR)sP$qWk!{P0cOJ%i#%m^!$xHeLXG{Gpwlg=~+Gxhmya#7Rk0;lU(~9 z$+TXVOuk1eph*i9MWtm+Iq!5tTDoRs)`U{gykVVK4WZ5V9J$drPERVc)1aycfXMW4|Jne_jkuU%ZlcBIAV^Jo291D~{{J2)c z(Lq`AYIm<|2K7RxM>?oJfY-Zsq;#Itxm%DS#(ee;lDSo{o+0SA z@GK0nsDF3G@bGvC{r)0@GOnqqlS09lL2fen=lD*UXtT2pNVmKqWsu5by4|?O=YzoT zyo4jO=nDFLJSX+RmvEF{2_Y`c6gJ)APp-sgQ3msxLo#S2XBWLmqJL$ zrNw30QVxmKGH^$HseYFM;>ROTwBNeAdfne0e0?a6^lL(M;K$t6-YkQ?9WvP0A>AF# z7CD3VwY6Qc#DluLGD7vmN|+e9vbrvBrix0KN9DoeVR`m)OeSaMBWd0Xt>jE?n`D{> zl{nv&458*4yL9+nuU{e&bV4Y43Yw(H5`Sj1Hd6uHt5R8;mCEwC66Pt@kP9N_mXTD> zB>}>ZVt2xf{G~0+9u33EGUw76LXx}#3^Kcax%hYfJ-;(QJ0(p-MR1ZA@%})OQGQsN z@&CqZ3yEg%0g-tZai-4Gi4GLYGIdWh6i6|o&5z@TLE<sV8_?0$Ty|lEn8hNJuP(D~4@}fH57BV?UgS3c~ z0dI&ghVZ6{c8uP^V2Ir8%Eqn?qpt#C4*mYe;>dKn)~w708BoG}<4Ug#^>;~IGm8&o zWkW}HMwk=j$a9C3Sb{V|+goKRE-cHd(MkFF$*`pt!;>;QzbxBP$lr!`KvLgnahbC% zHzb?y)7~o|=q^2#S@WGVC(yDEAyf1iq2_SSSXa`#HWkS8*0TQO@|3fa<#Z#!;(&D# zvi#$ZKkm3;&{+b`b<6UHz&rngNL<9xK^-tr4l6CzT1Y6?dOB$U(It5&>B=w-*DuHc zbpuIb0w7jow)m@4|4yQj4LVn@%WwJJ-fO2nLnI&=JOj_gAc^P1!c0u*%W7SApik&< zAdUHBcHs+P0Pnc267+5$OXS&7MputAyF=Xop{f`XE2lD+G#mjpgyYxdKHTA26;`-@GX*YFl1e4sKNlECyQs zQT6amC(F2E;0qrNBOl+6kF4zxQYQcPcC^T?tG#mX#-I!hbeTUhiZ!gb;;%3v72$Vg zY1W6&Rb@59+cGn^D9>Jx%a4y4Cn=XBeB}LPq0VLaI%U%N!LRf9HVZ1 z5XAWq0VmCnWCl%-A3wHzET5dixoJ7r57akAf-TSEt{4zzNInFD`(9>HbrvY3r7_79lw;FNA zH6-2Es1u%rJVE%E+%;p?V@V$zi#_6Eg7(VW1T4!8`0!yyeoJN5(fYk7Yi*JnLp}1@?LoPFeL(uU+oVw+4xPvdfY{3(HjW1* z@jE67lBE@GwByrr^615geE0B$eE-WUd8(v&T8T7P>WBon8p+gmC}|#$Y-5kbYvx$R ztjHiOCP0P3T{8fy0B$ZzWxXgYY$98WcI=`9c|u`&g2d7>V?EqUmffb zD`z?u$hU{7a}vfYUK`~`d=Rh#Kt?_41eROeUMO>vWEg-4E8u>hew;9KJ{=|l87BAP z!_J!qqNJoJ`f+|*7SiB8T*vRtIdtAU7taS_=6R8+PXW9^bYE5mGZ2`@WD*?Zdm522{i^29#%jE^G&0$dPCyj2Kq?Jfrb zVV;xescBizve?`pelap0zSmZ!br`~C`hqPiCgQ&9`?Z&o0CGeaL)whVyX6=-I5M%(!Ln{XQO@xa}NzLtJ{R=0!|+}hr<1xo<+jXu&H)9?9Yh0fMC zCXW`RruumF^?PXp8dD=yW+lnDulLL6cdjUD?zeDrOaeqi@hREc$%Qa;S+h!TWMyqb z#wLsM%d=7W_UGsF?SmKcwosPtv+U#uiz2V$u_951C|M^*E|V^o?*hLe zIUvT|&qLKY5yN_AjWy!EL0#h7fV%^v*;fFhljb|h)yeCAuy&Hjgv$k%2=3d)3Vats>qV{TCbLw&g`6p@lB zGjC_MT()**tR6?mG8V@;s{ti_$pWkTsXkz3I9}PKGrawiH{Y67RqL8be#jr4EyVFS zUgMqzuo@bJh2q@24P;m^&n(+1HEn0U#8DHdimLb+D&{BK@b5YdpvoFF`J9 zYlFVxjTmjYKumAdVaI{oe^n&=M*<4OV%yb(P6y$|GR!jA>zXm#E_PnQ=_WKp%a$Vi z#VUa%I{XG-#o$i{p(Y{+iHRiMC_Y(`f1+M2PfBHRL@I03HlZ)LW9WB$Zx#^BDOFbH zvZ2D1tC4JNlVlq@G<8b`^37r>X8=eKL=WbZn-D*iNeLl`rf^J78M0cGj*N* z?PZ4#4qWzEln_I{cpZ)vm+!qyDdUp%2Uq~H5<+xHXVEq`HaE_baZy;;I)2722Kmq4ulAvK-)#`NVIFnkz4+0uPj*N(M=fiU>#?B7DWHJ zL3^Uz(WenYk2g2CBlzH-vHebpoN{o zVV?#H8RqpI`(%VBK<0>?!4{!kT3MIT@mYEJbVUC1$7k~AAD)_D^Xsu`S=I&~p}=oh ziEr>)*CHXyC~$lMX}}P5?#;7sJmUR9xiSEPjAF$_(P7nvm{Q(u z@jVPKA8hGFA>1fh2(w$9T#h{L2hQX7d{3v#L`0qm^1w53?4aLXW?&@YH7A`99WhqO zn%c0K2X%y=2kbN8z{4)sq$PHSpwB(L1m-jHa*x@_)q2=_7Iy)DcR9IbiOBLRZ!{*l4jtFnvRF1w8xR!Ajrzli1j(X48H9Kl zbIxJ)>2>7w!?oB?|MsBYa~|jW?{Eo$z++X$x=iT1%eqL(Q9-#twD1eYVrj%nJ2j4* zI?{hu_NxD>3#^s22V7XNbP?^~u=+brV30vKple1)-pI7-2cEZ7qEp(H1D=!T!y?z; z*Jl$@+uDLV#$`azyUQ{;iQXLxdRNIa^=7cLV9Ok(DsxHc>+h4HBoa(RGN0fqVC_}6 z_`p+lOxPqZTN|nmloL>QY0$=NYwNT=>#a`ldp=6Pa-KnZ`qV7Ud=RaIRY~a|UZKFFOM2X1yFi-P)|EIznw5y??`SAo5BH3k znu{&?9}1#dlowt}rTA1TO9^2PwgLUGWO>IWBY_HzRJPGFT0z=D;gZqVBiW{8^56v} z%zWnw@H>5a{8Rlur@ zSJq`|dCe@&6d>mjX~V9KiTYDPr7Y#uDJd&iF3&xY%JNw7VFoBWgytZ^jD@+X)+P*Q z^SzQS4BGZ0TbR?}cPI^#zpi&;bQA^2?;Yv;zUvuGZjV{nu@_G^*S*WC-gj_(F zgn0$R9NaA+FtmYmdFwCiKgN#Qx*BtNU=r8K`!f5RCsux(G_s6!8G;{tUunCX$2R!A z;(9Qs1d)!mOFP`N@V7oGFxaFV@Lk4b4XZo#XN1%G(lDqbq@E2N@ckU<-9#TanEqR3ZQ11_1dp8PxNsKb{=|#US7!x7!aV%&gAXYW>kg0dpc27el)> zpXHaY%pHU1C#$M&tdB*LzbCCLEbUidON;)b;zvCM8`Ppy8mdx3T#2n3WJ#*BN2X z5t^=933KD+A$Rb1f7Y`{cu4L(>_*>sk?SgR-SA zDcfMlT(;z-nKI^k(n0V#bn^Btnc$jEnCW0}y+|*A&a3ImM4~NWNK>K^vwA9gpp_BL2HZEL>&hC z$Y~#fH5otkp`k0b+9W>Am!+Q3OIT&GE)#Z>GGU-YWQkA?$bJYV2hr;4?66nalml;A z&VyTu*9H0&eZVVujA{&uwk;pw9NudCfQYCrSeS|ManbcKdhmS-GsF>@J}-565U>`r zv^9e|xB+=%fD2h39)2yODz}6S#088zx_+T1`HXzC4_PL!$S!2rA}#4>boO!MSO_zq z(bXcTSQ8rRR9KZftI!hSgBZ*xPV;Xzq5^3NZUtWHC|C**#T#5S@M+$ZB~^Zwlt8n* z_J#@yzpGJYN5i-8CloJVkj;jW7Qt20(o5La)_{5&1#ZRl#2n8gO=osjmC6yf_ zG4X)@hSH*V)Ye&C>7L#m>ulY+d>MdDQ!fw>^zGQ230w5R+mP22eKBq__%0Js;L4Rj z8z3^kIcgg_Y1nhB98rh3X7E-6;!IuuR!1|yXgxRo zbGykhmS)}@oJXK<*HnM-#shZ?Ce4qGj>w3TW#b2vQ_2q(O@^&sMd#DMC;4S?L}L$R zxmEhL{a#bDjQkQOpMg1La@;sJ!VGvoX4&Q&>!evncP)hm+pkv=4Z*dJPBU$<_B=Dj z@gOhZBhd0NR}TD|m$Xn97FTRp?fJ!JSzg8B?6IDcA1LsNK8XT4E7&T1i^EcxeWZjr z_%CxT!$1SFY{COU+(Q!e`%E$^FjJG4OnsN+ng%5cVa|8!F$nYNmQgwm z-$xd?CtH5&*GuED=kfDNT$B8fc9fUq3DQiuES>Oaf%>3coR~qH=`iRhQM8orL3MUi z@VlURL%jj&$|w5Wy?fUdD#3CQ>+fx#uS4Bzn&qFgwZ(uDBE}i|N81Dj652+!mR})X zu!skA=#=MS?e${-sUm_6uX4>or6ePCx`8CxvnlX(B~~kzxc-4Y>Fe#a!O~@UbIAZ6 z{feHY9L&1Byt|@qy8Izk7D{e#KnAZ2m>=_bdX=xOe5bu4bLaw(_JKNgU7$5=)yrpi z2w@E&%~+dRxZ*=~#aZIL2(u0f7?9c`Lt2L{I^%?yUXQZkddHuBeO;a@=vNYR*+}6n z0s7n*H!}Ggdn3amN|tqii#rB`JoB?xUC*^3%Py~eUHG0`mU$y`?b=ltx*A-n&@m^a zUyhY91FJYjI`y^YqEX1#D{*d=CMD0!y5%$O8=fKjP_|3E1rKyDC}c*I>)Jq8@o8R{ zg{4(lSYFk}qG@?e6D}M0IR}D>vco;(;zLVdWm3vYmP<1~O9gj~Rbnu&p$}9e=xCY7 zPYOpACbhcNvVb%ba;3Ile#^P0p+K04lA$E}EI@r8w}qMW-_wf{wv0 zDSi&W;XF?V!SB!cPP}O3Y`G=`j90#F{T>lV1LaDhKIj;EwM?f0`Judlm;YgPbP)Ir z*Y-C9$RIv{tmFq-#=^`J*vQGdWb9J|Wk+H{H+8eJvZ~u8bR2b~)qyJ>Bo)166S1)P zX-C%J7QYW@@9zTbZgq7IO zlITGrBVp1b5eKl&QX>?Dmj!wWJ=m=Shbu~$i9wC;=ea6}2-mXKDf$4nAlk0! z0G^jTagzRL9u;zCzVj+~X+3|DKwTbAm_z>qXjAkx3{0C?&OGUNAgh}?pvC=xE#caZ zEAbp}r%kIP^fazfKDfb>Y^zL8PZ=p5AD@&l79vsE92=joC@y?&10nq_Z>Pwg>vwX9 zKB0|+y4pG;%S=!;vOL71Qe7s?Ct1(OPM96;qQPXqwwAnfv=*eZtx4Kj3Q}m~RW&5Z z{Z4re8!XQVI-gAhR1iE=9TNgsA#hO%^GtC`re}48Qe2ec;jigd0lZY6fKc3e4-y=B6AkFwPv#d76nfAar#|7$>j(Tox-X^yZvlVgy zNesk&x2>{;9CvqjYDXJZm&7WE9=Z&mEYPjvS_Y$|yxyKvBC>3R$?FfWg-8+&1EM^r zgNLrpPCItq05Rm*A!J6xR+f!02YJ(a<-dOK#x|-N{Y$$xqlL;HR%e%iivsGBKItIB zOdaYewojy!8f{mEb7TvTB0L)d+9hqHOQu6Lu|1BY*CL{YO~%yEK}Rb=*1?P~N6+&z zaKps{c?{87G>sABa8kdUk$II>>XUf}TlBq2e$x8ETyFHg&6h)Fb+9|A?H00p1+v`L zZG)qe?qg4kFat8p>Pll`zRt029V5B4F;NkDfFv5a;@rxE2`>rKft>9)R2kDtx!W$N!F z2=igsOJGAoYqQz#H*emwSMHEzj&lyyGDgM_G(dwr?3qkPlka`&_v7Ax2F&%bRI)wp zJYHr5qE%(G6D*l4M$o7q%9yhJ5JF2Q#5GCO6XXp!V4`1oML#;+h+l(pr*0_6K$x|& zv<@%vWmecsc0JGK9U_BXryVpm6^^}gqaNw3r<5GBsvoP`(P={%(2pKM4dCO76|S$Z z$1GF5#2eP6p@VTHrQ8mm=8-7$!1Zfe$Y=vC4&Xah#vQcjw5 zdZWgjwr2 z#G=ON7|12YM)Jo#gT!?mKrSvVCd;AE?IbL@>CYdNik6D0V?`s$vk>K(nUIt);}V1w znJve727Hv!={zSy8Trg;y}90iEs=i`sIIQD!4Ki$8022No{;74E{ni(8g+Z3gxNvn zL!8H&ggiG$M{ARGb+kx#N2_j|rMTF5(DKgAxNPTLS^iLN=kN59{b;^vaL#OX++91 z52QTxy_9DkOJ#XNL`k&4TrpHA&>nAr&pI$DD={R5AEWW=ykzrzl2x({VI~fvvC|~XT$g(~d3DP&WSLj)pMCb35hN_l5LuKGoxfSiv;psSF1wxnK}esIzAp*5 zr2|Vd`^TBj%MRqiJB{#~kJtZU!3>Zt%frgm>xgSnKcQ0%69{?BfGY-W7$jnN;@=wU z=`e({q)uovBqK1Yn>o%aax^Ms=xu_IosNz2W(BU}wCExabi($ES4rZucGx@<_YKy` zAOl3kpdGf`M4>(z>>sd6QWuR#9Rzd^X+04ggZ@8E09=!eb(YK4dRF-Y$Q$yBYbbuM_EsaMe=ibT_w6Oj42md^ z@RlB~L|Y4kLf-t)hhbHoFX9R@W52UB6A1Hhrf_YxfiyFRfMBHj z{f#d=oD4bC|K!wIOxSyS3m3$NipkfI<14D4&9ba=i~KUNlflAi;8X~+0|n~-%`Huh z(%IfDJ)KIJb=$54y0r=GbAwG7H0!hZJqO?CrX=bHVe4w^s_i;}s2S#_F}G+$d2+fa z)4D&WLS;VBiNEub`9AAbNi<>WAls}k$nUqd%gQrD2TCn@1v-vbf$VcF9UWIn>r!4G zmGblhDNTGQrCD4tMztqcvhR)P?zm#?1C&G(9Rn+J7I%#1A<4Gi351y#%+>Y!{n;o( z6xwMKX0GW(8K5N7Wcl;YKi?rnKBMZb?Hd)RrVGAh`EeR94DE(jG#CvdpdJEXUGe6!ZOTs zgp{^d2N4eNNz7`e4tZfR63f>@*aCt3ctD)OYIaE|IVB3b;zc~tazWc`YA)CUB?J9^ zwq-)%VX|{kfH8=AfW!pf&~e+RY^W=W8ggZ2k_=vYy1Q+`7A8(%Z9eY<2cD07;+kQu z29PivL~pAc8eygygG$i6CZsue!w0ddt+`kWnRpv}n=mgL;UpiF2gXG9y-lJQ(UZ7K zuuS;Ef|6G4YZvB~w6a|NF()j=;Xe9#aly#35oFcV#7{;h(GffsdY5N(ea-U+H(UnT zq53Q-&tWi7ul*)O8J)~qKS=V`p&^SEZqYCrPCiU!8mCH_0hLMyDGVn6HRT&rVL_4` zj4(r-yE|K?ud7x1y4$6{TMJ4*ceXc~6}m;w!F?ldmgs7|7E5w7c?TicG>h`u+J=Ro zgDlT2tf-JJ7?GZsRzj_$dS(tcjuj)?ORK8vwK9pwv7w_@Ca&1XN3V%uq4ps9$EQ&D zTt{zG*;oqkmS-MHY4Y3Px4igTM*|D01+f@YXecrWbNJa?;6WkPgq%}ksv0HBa@cLR z0%2~sE}8l^z0BG9W71GgiZG{t=Y)vH>DTtjTo58G%a9{T5@ZQw>aXhfjax9CG;$%i&ac5S?t|hco%fFEynu2GokDokNZnvDgETWBaRu!4<8^QlTt4^> zb?+`Z_%0(C5C`h#UDt^SpqOlqiRw`5g!aR0a>`l1wZ!XkKAZocl4K_SHPo}HM6Fb5 z`~29lraqAgbPDbm=$NJD6>EQ78rg7HHGG%DE8P%p80#`C!(9eoSzKCLG^;YM7?cM@ z$*qx@jJwGw(bE1GD}PUSh!R3MFiB235)19>?S$=lNVHc6Q5W!+H-A|rY534GnT@=$ zP>zceVQNMB0fVIAnh_>o!#yra`zGJ}5oRXbF|n3@6ZsCv*x;1*h|30j80`|52M9KU z*^LuOTo)O$>+5~|UN$LE`#;yW4xTrif=p`Cy5cjs9zSgA3%O(!PFq-LaL^Kq>$J7A zD9h=GY&~_tydQAEsH=lK*BfE(RkA$L(;s@Qbf+tp_78y(4{!SAG#@6 zp_^0*j4bc>00<&v zIk;nFSPomsvH31{+>>0}9my01Bvaj}cRxENL8Cco!c3#&KCbAwE`-R*GL~hCk-K4d zLq(yw)fa*rEM{2Cc70{j4SPTMaX*J=;Td=q6dqfy!F^E#k(3=Bl$&=9PMDD;_9Y+3FMqmC7})BKTKPL zq!RWE0>d>v6x1nlU{=-fakDP-Dwx;wkOy2ts7=n})h^a5^V!uwQg3g!6bemt{4xN2 zML96xaa47zErY$XYVsc121F5(l9B3~Dzh*%*^wB`xGtch)>m2YVATdbwnzvD1U+`9 zNuL9sWr$yJ!w8n;ViDI%CXB5F3$qGZ2rsKOt}^E=NP%VI(0DD z*Ju9q_7+43b}X)g-uC|bv~ey7Goa!j&ctjc933tjOcHEsR)XA`w|&TRXIry$D|zlQ z3v`UJ6I?U14VPPx+GW&1tdt>z<*<(gFo-5;6}j8&i}1j!caHzdJNLc1XMRvSctj$I&1$I0o2WYgqdU1 zWoUnI%P+stKYE;|r?Q_7b?*sIlm2`>3AqaGjC$C06AAL>B-zjPXSQcm&|jkuIunaB zdO5rW>NC=eVS`16s7LaAR>LRC8C1G$h)zj)~wa-O4i$2nv}dZNJCu+ z)AG?EGbJTqD-#wCqdfbI66Oa|ntvj~;v^eNmT|8@+vA2|ME8LE>UkB2HP&T@bh$d4 z=$GsKTylMXBUL@WQ^I^*r7=&>5q@(67)mLB1mtTIlvoOYC*NWH$vO;}OFVxSYM~`fUC`dGQk|qUv zflOHks)_nQ-f+v|%>(s;j36&`suAx8UXepqpFDjgPaZ$9$!3sPCT5uhOgm516R1|5 z+tSi3*HrdD|Lnfpx_!$g0e&b5X-6E_=PzE!vu7{tITq&^gCBL$F(VBaJPKO3SgY>e zzo+f+mc?Gir}v@**>>Ia?Add9{N$OolMyA%#l#XBtaqMQ$|R@#9c`dd2ksU@!uq!m zqKvxYnn%;ZrvqvcA9(8t%L^=Wz4 z#x{HoLcx~xOiDA4f-A-xq2s1PGz^cm%p^bC9?+<*02l;phTr6raMpK7 zw(YhO<=;xK=MPfVaZjY7^WbZoB2J1hb1v6#B82kbbq-cT{FRSNmL2|_kmhf{{noa8 z#-hpnAkCy*C3P@(HlB;;V;`$Bq?rkaUw{3zJsZynNqg6|B0}9jkbn8*7bDFN9z4*_ zW5fnDzzH*HFDQQ>ym(#EaUvrSW(HPR9`S3Bct22{So>b-VCLD==kn^+Ynhswu~+*@ zwdu{It?JoI&>GDr@iQf^_wL=1uI_FlbngqI9@%~MeovLGztk;pUDsFF?SANT?g?pc z(E9G|Y?tfTuW9?cZG$7;FkA*8*H|4{q~zK2XY%~{3nf^S=DJ|{*LK13*I50m3KXat zOSaG70RKLGbH3n@$uqj{xA?qC{|`Jbydm~}0bkc(K)E8fl{6D!fwv21^;-XZa4=zB z)^>%#k2wILFCx*_koQpMi2=duQj2J(dXED;BC>nc@C?C zTL7&y-Vkwswm396XoDKsXm?MS>S*2sqd(4`zc|i~OU6;KD-@wZPykpCNLY!@7aFpw zqY*5`xOJFoM{7YkTJq-7VQwClf**8Sb2ukN>kd%f$O;1( zEX|#ro#x+q5jxTH1}|^Q7pwC6dRYCBiCI{?FlgvWR`z`6e99RgTC9J(A`ceO_v;vG zo4lgOXO{$7Mn0Id=5oL@p%)5;yy}5&BkIImrtZCsUu00G$p8F&(FT(tl-!j0_TIn80;TljfHw8R$`O&ydEjwZD3tEwaWol#@kWXb7$u zM9e@257HIq1w1!(w4V<%&khF)=P7MavP?U&NHn||Z*7&E{**b3<6hyE;)i?++D*l8&I(=cTedCgr(j zQl9xqN|Q>KXCByUezG>JoybOL*ygVcQ6?QED2P`e%Vx1g5!U2wML(P5*ZGx_<-3x} z_e-Yg{P<&{+>Vnl)6lpkzh|2!%e-cHpXKxfzoUX@L78$*?n8%!qGs!)nd|NCg!Y4f z&vp2n{~mCCo(*d!#Q8FG;3o;n4jHnQqf~y_I$;K09|yHn%AI-u$ej7iDN$xXMTjCk zN5cGJ2xZSiYX&u8QdSsbVgyiVGoWrLezq){!9WqRjQrygK%E>F)FaUmrc?$XiWB2u zp%ScEz}qf~I;8`))$9faZQ>9X=MU5A=L_VIK?2KxLG=WWuxm znlL9T{iX6p!s1L@!sUsT?|OQB%LzVRl$$ScQaF6^t}lfe;eS^4)c{ zq#7kJHAbr0=Q!v1WWo0azQrtYy<=5=B;{!(%Tqrqaeg9|#S#5pi8SXSFj#^~hmmEJ z0t&C9zk!HzUQL6=ScW9$y1rJ@{CQXgyS5pTG?Ea)1R=5rCKoz=Av|uv%(n zy3aC}WymtG+&`qzalTubNhl*H%}g@mz8vE`Plq9W4$o^NZM_D0;MsXbw=|!31%8%r z!i)?dKWvYKFf*uP%V+8!;{8FHqgRn{2s80mmzP(AoEu3C?ZCGrWF0a~s5c@Q(Agga z)FB=3oDxGKW0-Y$YTE8g9lIQabHfUs5C}wHzdl4En(LvA8!+0FIFt)Eb&a9cA(GAKl-*1l?97)_{#GF2_wHA z8=NJh?af9ZEM$TnIL~rG-Oz^iCCrw;Fi9QI{u*^K(5<8ICNS~htJ_*8nny?02 zTDRq_%SwtX^G~HT^FWF6PZnnx@?2S+R_R&Qb5+nG$V!x%$!h!7toOo?L6)&BYvM*# zb&_f9ksN-@U0*3-{!+>Eb?qTqWm~ez#E5l!eS^aALBm-n2paWq5oVMK*F$MIS;qg= z$ubsZUbBDf2$jyk84I(!WJJRJ;h@|hE?9o47c8H+XgFcEdQs7)3alP76?+3nr;1e! z|M8>9KGs4A1k3EAOU9Kn&(F;piT3(uOA7jdg-Sv!SGI-x(e88JK^bDj$3=;SN+<`c z%jhYjoV@3>d;w*K{CncJp&q;(Ft1!3kUvY72miE-Q1|G8-3izr4A8=I*=z}?cUr5& zeF(_gL4-Nzx$x$aE&j~7TwnmWa%I3svy)b29`~nUT|eH0yAz2?dJKH+KH8QWczdLS zValAzm_)8&l|Nj62-IM)(UW!xQDy~47LY>_c>_h=)aqdOJoSl@Fdql3)v5rLHl?yY zFXiPoQl5Vve3e<|dRmF{+*4b*&*CfVdCHLWzm9H6s@V8^Anf`oNbZJV5~XAivfO@K zvfW=BSul+~dM=5$0WGA11S;-7p}_OsIoA ze=J!BC?pyy&&NJW*IhH5@B;4R=^zB<7S83_`7PI=TsX!(u!NB!Y2F`{*>MqO${T_l z3G?xRvZv#tL$o-)tJ*ngdqK{<-1Q{=6WT8pPC7<9T?jK<2;RFSpZcCF&Z`b#`R6xg zU1n7?>X#5=4&;FL#4BRlF<9BJy{+ARBQFDJ4_NY<;D=iZx|R0fItBf>(-xA?ZUi7< z`NM*THP2FV{K6!E=ER+cK7>5F?qtg@GKp;9GE|jI+%xNf8yx98%LDD?Ai}(xKL~T^ zLwHNp-PI+1D(etui-2;fbz5WQNnMbz5>wvDA%kh!?xyMl^Fzm7DdY%M%tyxjgqsDlIS^hd z-dr%SE~C))>);dNpksk7mzm&)8-^ZZ5t4kjWLs}b4zf&YW0GH&l%+p6>o@M1+~VxN;`q{)f#uV5`639|d}nF$Y4Q;=+9 zpRM4RGdBz-`FTW)T8lS5u4MVy>oIvTJT6l+^LC8M4nzZCDe|*W4j)UHQ5@cw*r#)a z9N)cr*TRB1Sw0TS@?Ox`c}6F(5H!d#)@Gi^!F@d)1nA z=-7`FkuaZsSct1^#z-@S8OtxO8OS+h@9l$Xpp_8rthT1srahK&&0u zyc^m=ARUE#A(8cNON3QxYipPG);4KVVr71(T0R#l>2ov5jD+g}7YpaMf`}{JK8N`1p|ol0B@UsItfc? zhqtvsFZcj2YkC?vCR;o|t{JpjboN>IiIFhBCo0=Ig5O*cTcvMB$?&`q<+;a3kV_C{ zCifMeNts1R*5{r+x$fUc zmAPRkS#Idk?`uu)=9gCF#p`i-@btC37@3r%m38fi>ZG$>$w8}*$n(c%eSIGs7h$HO z;5=sK-nemNC!TSCf4_COCzUszkx?#No`uE^X~v>MqvzSuO5q>`rLaq?`5o6l0kTgy z(7_pb&}}5myNHDO{KLzij*n%H7Z;XfNjrGj3)qo=-KQ$-e3fws3wp|YAC>6tx1b31 z$2F&CW`b4q&6v#01*@uEGfAAs7BYl&d1z?RLdg}he&3~ME();DL7?zk#?nriSV%qX zYJ$!P6XEdV#jli!V62>GVfFe5qo`!LU5S+vPY9=x&t(6iq>gs-p!<+#CH^g~%|@*7 zjfIezUd4w#kq74RP$o7Z(g<^dG&MKd;w>y#c97mUOQ5fgPMEPUH`rhTy~f)W`mFN+ z%9b)GS^cQarhcd=^g8bX!lE;QFtZpEE?X!H3m2^Q8u~=?b9U`F66T{qg|f1>EalZH zsVplQUU+4G$>rGx!Kyq5QGTIBc~mNEMeW@;v|0mEh9HM17zYvMG*n0+*gm;Wk;&Ca zw!U4m%~un$jL-5HVcBaICQ-7CY%Q&B$msZtJbX4RzdRe2so8m{(T=FUr%i_XyKGr; z7GSYQIAwecVMZa4IM*#nCKL4;q3n0weHWua=Wl1~xFsP*LQ*9$@*KBS1VkOK?N^+Sz zw4Y^+YhYc*n#v*_EQd|~2dnCCy>m_Kw^d0LE?ba9>KQ_Q8QK!0kBODUogN>X&~liv zC88mRWDos;tdp>~LWUvBLszcY7N2fhGO$20h+tqrxg-A*b>S}ParUy%>=D{dLYWTxG7?7RV4em}z8XaflJ8R6c}3t0>@=x<~lSwIzSdB!4(6-a}Y^7PVjs@D@w>ar8H^g**FHAyd4C-;~H!| zZx8~M2cIbq6gr9foksr7J0fAeIDjt1pHzpAh5dzCHIs`xFRa@0Bki<~8p@AFr9rCK&IcHFt?ve!VE$`Pd!vrACzpa!@4GP zIQ?hHQ>ZIkX>hASkZIGQjzfRQ=d(cUh4%rAjg&VQ!eS%1R}d0z{I61a^Cu~ddHRbj zKvJ4}5~5=0`B;@rOYJN^qQz^%;pw2psK0?MLzMLzAvUv~&+2{6S8VmZT<`BB$CB5O zX2^0~tDY0cFP59){Ia}IlKkW2SMun2urA}q*4o^tq`ApfH)KN1WdRL}#^{nOTOwJiZV?AXhHzxvseMtABo`W?NH;?r- zCE?b|hVQu+uY2iGTbf(Ul8WmVuc>9Of71jX)7b4oj*V5_UtRg+)ss7-mhz z$G0iO8OJrjiOFS3fan*^P0d#SOlGwFs%~{n%$o?#g>W+1X3#yOgRqsAWi7+-MmOSQ z!2qSby+iu?dZkwfb8W3HHdr>23=e`2C4aF(7mFbh3d*mvHH|ijFV}iAxL@@BK?(D3CEN9xWLkzq>RNWl za!JYZ+`_Uvf30Ns(QEnn(Xfn8%vz_^(Oi)J?snDYYK%t(7LX~vR7r+C`=jEMLc)M>}qri8h( zt5XTgu0LhEQv`e_R{XNcIH53$^MM4WteT(itBaIzF)xCTo#li0AP z5)r~l(?tjEAN_!}kwsf(X69^w!9W7l;CbXcbUm&HVqspP7hK}TG4bG=JKJ+ZfjjXZw10#*DATD zYm)8!LUKL7SEBp}$##Du+4j4({B@?fpuZ2*7A(t4^6cf9{PpMO^4Fi9%Tp!JE34}k z4dY6GrwnOoRpOi;WnUIJF?Hg3ntDf| z1|Z4Lo;@?t{Nlw6vxJgYapAAknrs2MaTN3)drI|^HPMX2HtjrGo9^#B50a%e(i~!R7`0-=2I76E0Fe4%^ z0$7?Ee_0|CVBsVJ1|j5d8wi8QutjHL@q-l4&CQ#i<^mSKjnE;|hJp`gQNN!vGQGJO zCfS-Bg6UmtKdMK$KCj~47n;|Y0fv)h%7U#EW^@ylWs8Q<)@nYw z)W>B911R!}iyQ+cCmdM{r&klFQz zwYiG|^0;deoimFlA@(RY@)yb>oQD;^LG@3t?uU51Ze_jfAdgH0WYA=C(A=VfHYH&y zhrs>Zt<3cE_7;=Tm(9I}#J=n5h?50!%78k!X7tQYr>LTp7^trCcoA1e=uvZ zg^F7omh#G!5p8pupwhI~GCPy`G+`BnBp+l|cD`)N98IQ;&`9%c1Pt6SGEGCfM7jU( zlq~^3CKvwseSCmar->DOuz* z#Lm_8wLOuzVM;vNoF!X~)!K|Dt%$&;I>e{O5S)z?FAiv7@YGARnkNT?D}5C68k zDwWMesjN;ZNmkN3M+mrIln{R(qFP`<9{v~E9{CsDPbToOeD(Y@CCMX3lFRE#vbR?C zy5W_dTEJ!uqLbG*&(1*62!$Ti!INUSd>fpY&;+P9A~0lb%XXGN|X!ziTeeU z`jjL?mV17u?`TF(i7P1T%3%4@UsE^XH8F}+Nl!=q( z*RNm8lP6E)`Sa(dD0p>vT1p}!;$wg;(+ScZh!IQV1_-msFS=3@R;Gg(;+nB83kyp| z3@wU*5*aK@5XQ}ojkn|;;!OK8Yn3h95LT?C6Ap_UTzo(j($-}XZUjt(gd7IHa1i28 zql<7!pv>9-6ej!a1%rqXA*4xKl5()O4JKy+R&H7@yurXPes;EK6G~5$fJH!>3GrDl zvW%6PNy4m583wySPcXPah6zo%qyuU6!q~Wy=E)GA)&@DJP-PdBFe?GAY_BM}#m!3#?1ov3;dF&ev%Rs{8-MKrK{KGM7CA}@ixC= zZlXnFt{2t1)r#{i*5!SR4dt&1R|~f!msGjqg2AzDwON!Q!@2hR7WE?6uS6NLOvt#- z&n4S>JuE~5IZs)Yx3m+PEiTE^mt*qngXi*Z-$Isuksp3}A!C#J?0WCs?l$@2&X9cb z`3<>uYe2d?T2(>lGe?{XXv|nM2r&m~_Hc7_S}1QP&1uWu*@<7*d2!B$icP^>UBP0DPC%)>h4T84EK6feFCGu?;#TlpFh4Qqeg~ z_M>9t{F@QTv=8=m<+y868kZ~a{`1_ z6GCeiTNU8#HK}YYNO@%+5o7*xuJ#Vp<|MbHX`QLx} zMgHTv$MWFGh)m5b*sHdI-VXWV_7(Zf=hx-4+e0$g*D3kN%QMmMq5vh0WruKckY-#n zaMi%tMW+Q>-b#2$s|428T00{e2V2}e!U72w z9}qgCVGw&6(v0siQAK>f0a@k^BxOj12#7L-8C~RqlTQs{@KCD*H3kn#m|I&+?%Xv6 zpIFnw)`b&&B!ufT(ww}_h`ROkfIBJewyUet2y=H=m%SNq(wrW=FxXksLG{dR7*vmG zVt~!tr<2C{&?pHZCd3+(>xf{%M7zqe662*&DJ{IV33%n1U!*kkgOsPf4-qT~^@jDB zNqdBUW8xkOtMY_?kHwh@eikozTCcsJq#Jh&NOIYfEgG9;tHY{%#7`#i>ITA`BFj`5 z&xs3$kz$_NEyhklv6AJ7^6%e0l7~-6WV*O$3z1wM?2>PkDF4lGZp+vAuiFyX zgp?ydd&KDjBET!*t5>gDtavM|=?!}`{b#n};NBb-=`S8bKN^6HF~m&cSGzchD=($tT# zjT;3M^oIY3l+1Gc-=y^Vf0z%lEh1vB77*i~j7*p3o=Iu`RfvSKGA;s1W(7Wck`qgE zhAd+_#`>FVL*h8eY9yq$RE<8b5oNa`C&?NfBT?Pw+W0%yGnwy-WII1oa{M<^HGnnw zzerWzA0-QMZoi{Mc_6IThXs0%C1h=VQ^qIf%vbq8lpz1FKR=Lv{p&CC?SmKc;`M|q zF0D#^ZLN{xukYWGzx~Z!CCxYG=9OM)DKvhv3i7;wQL%@cBS!Onkuyj~A-ZWRGnOU@ zG8Q*nGq5xhVh77eM8tUqKBTNRN4PHt3h){N+mm>aj#v&vI z|7FNwSk=!5-=89amAOuuc=MnGDg0thHj;TgE^=N*L}7p^Gf<ZFkSuZm><1E5cB^2F8&B-S%X zrCVP$c{nw!uu5Jl7Um5r@{CQ;tE@}}SBa(3Fj-GYbD8+axLg#UNM-h^RCHS=%p2b= z4(s`E^tY42y<)8>87BJ~F-|PK`Ycw&R?wE|s^PlzhkU zaynwI(h9A~D^YGU*NSZOP?*ryp@f-btvl}9XPeB|&=suD*|#U8@JbD<^1{-Z43ACA zqh}*VkpJ@IGx_1+3wfqQd1`i1&nroLOF?d2?Umnrc3uAPL@Z;1Z^~KVM+DM34J&$kTf6Bq{DA2nE)vKS?iuu-~lr8MwE>#zfw}HY3a3Di;W!Po&mXDpEa^A zN{}r!G9;O2sGxMQ^y)KGP)daDbsvP-h;n)#CBkRUqfkjyM3O(>dJ+ZzBtCO}J%q~! zM7gd-Npg>pVMy{#$+03It`@jqwB3~);o+JFCEM5;VlLw!y@#N0Zk1$yaoLu%e)3{W zeth&wzWw>Re5Zu@!INQmIWnc+uj*rGrK_V^?%f!W-+ggYey?QttNT~w+F+NGWg50V zn380y_SA)y50-U>S<|iI^YEt+I=D}TFaw?uWkurIcy1@nY$18%$rbiNdEfgTzj4CM zH7Pf&C@2ZGe7>xRg!y74$Z;UN>l^E`ytHiAQ^KQBExw>hK$smLNDRN-Z42lUWPyEr zc9~TVN$ewztLlZ|zr25Yx=28-E$;02xQr@chB&iWNzfZiUPB+0O}`LEuB*FK2DBV{ z`}?dMh(~-G%HcSGn-8l)qJQy!rEHlnss*I~k-MNDO52oYcE?h0^G{S)oK-ne*Pjw$ z2Iy~A{G(nN*bpIRLkHR9nRZWpz0SxwMnnvbS{g=}>l^A#kH3pkdt~Dfu(f6c%)++e3yg($U5PQi#;b{?7*Y#4UWOo#DCt$gs|2{ha?*ruW8&Q$ zmSRn|eX3-c?;y&vN|mS>E1|)F=69&o(s!qLSA&j=_Tz9)^r3lIaQPwBa`yes@t~Juk>#KtZ<3&d#%oiJ>ZbFm- z28|0^cjy2J49ED+=U%wj^P9b?ta6W)6`c{5*X>cF*e5;RUFIKs9(BR{0$If(I;Aph z6Pw1y&A*lqXn`y+@W6-zNnpja7U}N`ud%x+2bJZ^P!7idl^T<;E!7_k)CkFm#Tfz? zw1J+pS$AVqLtc29Uv?=K|!n=f3cT7L)mVGA9nY9-ptXn0wmT-^2 za=i39M6OtPrOEeoYbhM75dMwx6PF4j$19V897DPx$V$coK~5~kiF*YFXC*@JjQ~Ub zbPG8)Vw@x^AWe3h^Ef{#F%v9JTHtRH;~ncUTh7saYfAb%$YyoDNNuxZ>f0rU%SB;O ziSjkcwB0g`GAZHp%ba%|TnFglHH+c=XC8 zt;1CYFgoC%Tq#4!p*k;_ng%_OGTD8W(*#1lA7Q4kUsl2lc-FL~nQ|~Ihb9_7pIres z(c7;a{Cl?PvVcUgrTiewyh_B< zSd`JX^$>zcgA#(2bcfQVl2RflATTsY4xK}ZAV_yJq=6>4-M4Pi0E8xRfoiW=;av3BU1_?~P4D;9WVz9+Jg)soQSmg+h<%0pPqcWin^xhsPc-|25#f}V&p0Zc zTGNK%z6-x9kN?WiwVCnj8zOzst4FerWt3I=^Tf+Sy3h6)X;xru%y|@j>$)SEB@UYf z{35rI<5HF*(=?I(3zS{gSA%0v>gIhy`DG&a#&e~1=Ark}c7zG#$j5X4QufW;2eU6m z^68BPk^~z~HI5q5&aIE<;HP(Id%iwEy0UUd8tniHVcSXm_P|S)YED>+^0<wOALcM5F(Td!p~LMP3R$chc9f0x={e;dJ9ZdLv; zLX5k0uo8o| zryt+w8wp(Dzg*F6{ap9~%KcB`;f+R&Q}o~_{`LKZ?#H#my=$)TyCbONx4c(>9w>By zTXJ)DPCtLvv-+gUb){f zjiNws=Ns0otKB9hi(6>$??{{-zE?pLXa~^gZftoPr0C5hbB+)1i|L>)6_0i9ODU`# zqqSmBbaIlKSxUtm)j~w4#?GyqJ&Tmvo7@xwE_(UchQ%Ds5=wDam&l%c)X8p1-5O>8 zC~Qly51Yfm{bCpXu#zrq@{aS5$Tv!B-jVN0A%YfWTjJUD1QU-*-n*x1lBAOdYCjfX z3VdbMAT4+046%L+@L67-Ox$iWT;DbtirG)Yp7ifHtLBgAr@K<4v|jsAr5MJkOePs; zT$9BwFf>n@o5eIT*#*9qzu#R+!wi-C*V5)}z&? zCQ?{rFG4CxP6XDrlPj~_g;D7w36hqUX)WQZ#-%u_F!&tp9mL5}fp_*r+Vo8VCDsM~ zi8x7z>@9FmgK!w4(On?hg0mJ*4D8aLz>oXD;wZ18)oSEJmE+>$W82@Q&g&Fd+J{En z{+756U_Pfwq!BlE?;_fnXCD2`k)efZ3$+hRA>bE{Irg6*#~3n_Rw+p1FboB?NRb@0 zSPE*B^0-h$cZE||VmQ4<3CJady({FO25*l;G8w2`rMIki$;EcaRES+Ttd}c{mBVtj z5BmxCl8W&1cR<08XM?KngN4SfMM{^|fm8@^{^(792Zee2y9rt`yY2KW$8Xm2dI@15 z0e-@=u2f`-k(qoA-#qINKgIr4vUlkbV1;H=Y({dyDt0mVedOMm@E39;d(z+1&pE1- z`cJeOa^ikyg&}^J0MnOyFJRDDdQqtu|65Vxq+Z19VNIPpAfBHj{Al#e)mH63YFWVP z%d4p6`RhWH*ljw>Kr8&K*jbvT4=6H^020EmJwJxAsJGh0iJ??1IFP$Z{M7i6E8_XT z7f!Z{Zv<?kBp7kntX!o^L3(mCcbe&Z(3&~iE>++%rf#W&0CPe-2#w71Z zIW#|vwl&rcoXMmsm8A;aWd_8}W_eb;FVpvZ zg)_;jKo{u>RrGx!ZN(z~X9djijbK{S^_$u^ntiH-3~f~39Hy+Yrth;wM8EM;=f|d9 zlRGg+$)tQ*-~M5g=tm>u6vqoEC#<1Zb7(hl9o2JuBH2KxOmKMU~9wmRj47+1` z7>C_6J)p-)M`~_;-G{z};!vjod)vu8tiWWDSudUWNn+h5V4kdh2=6BlTy_Uuq|n{0t%;MeL?Ch=X)s88n-1Gd?@n zUH<#mVf{2!eJbYR)|$weTo7f+pt~iC#Cqe~YcJ1=uaV}ah+>j4?B5*II!mGpq$skbpN*8~iM5G`h+xI;zZ&mN zD$i1ZUZPdMjLN{dfo3ri^re89XajMjH6>xDVy!#zbrS= zLh2N~ulqChxFR$#M7l=dHI@0>w$~=94v`5~WrOM)(>(!r=26Mb2IHLxQH)gyj)u{( z`$t&VtrhPbU0f8|ZGH+1i}H;Fqldd~3aGCB-TbJ;MEZCzynLlUpLLjrEd8fq)6TwK z;{Llf)Yah|!*ZlpMmyB&(~%Lfae&5WU!AkmSq=wLRn4m2Qx^(M63ndhu6U1+?Vmw9 zO6LNJAk~n72xZOu_4|piR1cMKG}DZ|e~YugCe)hUTM?Q*uc@C}Y20cZ`Q14>5|FdX zH|j9>@-qnqv5dwR{Vqy{1OFyzI3_R^7@`^E*W`zX=x!4b9w=x%YYI&d#hc=%wJjVT zvKkmpsnKe+WO}F1B@m*x#S+x=Rw;fqdG=Xk+M9t_x9%P^G`h`miH=Noe>O{`SZJ!Q zsY`>%$-i~lsEN!WhBsP`w6B0EgFP({ghEe!Lh@1Nif`_X0^)VR4e_gQ_%Pb+GIwwK z&vnB@Vh4F@pX*3}LG|W8AJ*L2mF?N1+6cg7nYSV9zx?1qHCHhOwE94 zChBYAxD#Oj50LE0;o+1O)z+L^!8j*!<8yFuI9d6n2uB6&eVBadcRmlB5Qi7~AJv?! z&Sk0F(0L1NBV-@mCX|n7%DK|2A+}tZ3N_swG5Nvz0KK@B?f1U5M1Njl9(Zh@5XI_7 z^eqd6PW~G?IX3*%`caj4v%!u5H@yn<-nI69f+Guqnywg^YG1}kPutvbCu#Zz=NFf( z>ys8eYM;Lue5hHRD1kZ7-7@extS|&xu%C6UIpUNU+PvF{B_F$F~LZV@9Fc4x1tzc(b)7^!KUHM znN%l7ZIa|w`WD_|k55Ie<=d`h@Aru}u|nwI{ywXvplKf_CjMMZ{X#!xo0@9G#^(T| z!{mPR#l&zP#7)It`hNHu=B|msI)|_p5BHIa2EV_%{#;;8if#;iJ3tO3A(V}$cAm|x zbT^I+9=aH%ZfMXPrk*ESv(5tc5V`wQc~+*m1brtJ{Z96841L0B_RT!InVVb!&wtKy zkO=ULx(>LIkLIHOCqnt=9jsnh-h}Ku|MB}n<>cBaj*VfXQV$imfo;-qm~j`;BVFb{ z4i%5~g-?=C3_i1rhOgW8J{HWb2-HlF%f{l~HBIXCP$e@i>tH<(sb7$lB0ooaRdkAa z__sp1m3Z5%C7hm?4AM1^&egwHig03&Ee%ZozJ*mw*C)WU65w%8?;8%oESZw@lSerW zR9{hT_f?pN&e>-WcFQUxiZL`9m2vN~CG^7GC#mQ#Ad;EFRp<0Z!ELudC8C(45)naR zrE=;JKX14EMf=m#QbOuIhH!gm^x|0YU>nR{5THt6dQ8F8nce&6DCJdoPEI`UVotU6 z=HUY42*lyQf-xE{(VyU7CNeE!=i&8fzAGE>_(-1~7M|JBy@~S}o0p=uMcc!NacwwL z%~Am__wptBesX)hRqk%na20lm;d~(vsNz+~Bhz~X1kA8*vR`4`OcT+$MyjA`+h9}@)Db1|VLCXoWrmF`lS@%GDp?=Zk* z{KtL-SO!!zdB`k4N2x;r>cH%o@jgc5OK=||7-)^wk;4pRNN1NS~w?-ag*G2=o z%}x^XllA-aZvUM5EK?hO(hl0P2UM}PzARe2%Nld##iZ<+2AGHiZdkJI$x<8KR!lb6f`5rBmO+`s`UbbW|(&u zUl>AF&lO;m$rQDL;JfQ(Gh(g}f{;ElkY6}7|4eH~Hjq`RDU^BRLY#glRb-G$?+Za^WB-@kTG4a$9 zy-8Q!m?vNk!HV6`Gx49j+Y*EA23)kR7p2At0lbx>{V4~vu~Q1IcsZkr225`MQLhRF zUJc_)x8E>RyyH}VBxm&YlR9@@vKc7Im!ckdLKtY|Xd55gQ2@C+u%T`ErVPlt4fw4P z=B-b!c8N$eu^wqi{z+9l`nZMt#6C$`Hc=w?>ilrI`6HJ2&GH3~zc@?fvp)!UV(aQ% z6~X@9mfV_dd%_{$6)(0xDc0mqiYon5Y(fYwCsU&Ip@Vs7nS|m%btXHxfBwd|>9;$_ zSE1QLPG1s(Kc?DKf!s-Laby&&q9xA6?r2lFa;{h zz2U3JLM?wc^fUQ~6f^Z0JRl9|a;6J2N{-^jiIzu2?+fMK9(?Y*#g2wNw-s2e`sm0j z*!jKwyHkBdqS8)ZiB4-~t47@m*g&=GjEgh1pol7#U3LM~WgFQ#3VQgp+=BM1j~`ha zl&_78T9L>b%fM6fyf$qF*F=~> zDhM@FWa1vv>Bimn#_@*65>SU3G`>vR67>{d(czZ~5X*hZXzQaHET3bow$C^e)CQXR z)kiJVd<0b|pz#HSpW}=cd{-t4m6ov)jn)cMB>p3JK%?xqX@!-6Md)R!Caz{LB72CR zX6*fafIc?FTdpsONT>{F=d!9$>r2$ud!lcpr96xM&oan=N!}02M*i(eD2O=7|ZW`l#zoa>Tx5$X4FX)&gzJh4!H^v>p$W!22DgZ6d{uOq^fy>{?69@j4 znL%tiY@fBZaW6X^xTQL_zU38QPd#3phB$pbjy=AOb`!H$v^4r%OX0_P`ZC>KH7=ft z^PaonY+C@O(v%G7GLJ>d84b_tu1DV7;qzRf$mc_n>%sOAjX)YV?jU5>t&x|DOI~XW zbiuf_W@fd?x1@D)-6suXWH<&(#Zib<%Y4;=jGGUJ5t;6?MkNRCiRxuVuR_Ae6Y)(K z_nV5nQ$?I;^<{m+YKb31gM)ypObnq zN4wNHWDHXJo!e^VKhc_?^u!4~eFl8<`?I+^D+;+&y0}<##t-%(W!TDTut+((b@5FR zYwLioJ?Pnp_`Qihr)F1Yo%A18@5F6!Ipr)v4d3I1bAj)S0gK2ZgwR@y{gWnQLEi5y zSk8=^lcVRR;tyLwTbR~0=@;V)v)Blm1NWjE%h{>_ew1HEl2cm5$#c5rV`RTm#)%S zq9ZIw7zOF-ShD9bx`E*xc>_KqXslI@|f(P2$5U&r^=>q1&MI)(n6s5n6q2| zPB@l#`TXZWy#TtYnNNU!(VL;3U_#yRnKYY2zPuoS5cfu!ctCP#w0StFtTyg0g~=e} zzIN1hSA%2%>UP3?;l<=jrB8B9#3WK6&DGZ3&w5GB+zcFr;pG( zK_{T`krR-s3hG<|UE2$YV*+I+^}t!L+E7+TFjZs?Iwd=DRpQR##AerkzY5ILfx7Z` zeKkJmOpu9Mkn3F3yMmDG^Zp4vQ1YSao2xZ^Uz4X3 z3v&1$Bi8!2ZzI|xkEHd+1!(=bg0AorX z>%k+R1)&7si)ZB!PS8O%mxv2?V3Y+}3}2aPbL3|IGK~>@P945dGDA}^lQ$F2)q@Y0 zt)Ts9v#{%$o5NHu>{oI}IhC@9b2#*J)sq4hsg?F3vj-*VM+YT;$Nj;MM#(nZ4ls$&!^W2NjMz2CA?El9)Uvws5GMC+}l=tbir zgnXzUey_>zjO>I0hHcD+g=i*%@t%Lp{jUcy^!(8Xr-i&I&~sUU5kI_@E=Ynu=*k1I zJBpWPGo@pcv&kU1oh{aUV@9xJrz`Q^E`5A__Rsi0p1;WlQjIMa!--9(*}q*?0?WVmAF3w;)i=S)NLZ6M!kjv z0=I>k8L%%5msq@{uO{Sii2w8O2e~tuDqR(bB%q7fV>iEy#zldRJ@20gO6~ChoRLDB zNEgDvaF~~Le*oR1ZjPWiY?_DS_1nA~(!huPBhbUW-m2W~Ug=S*RBX%q$z2rS+Rbe> z6usS|HoT2PPgt+NSJCfrhBC+A>g@$g?AppQGF^ikosS%_5#25KjiHTDebqH5*{hai z&nIDts&oI`z(4eKZ1_EO)FAl!_dZ5}D;g%3`I#9~5|vPf{|P`a-gVM$d5}*k%i>%q zV7QWkx3NGSu>NzHIOs7EP8aQm7xGK%SIxojL}krJXX%y7``yeV#sFgw0=>7ltz`l~ zk=e!;+>W5eN(e^S>ru7t>+vH9Xru?<@;O{)N?CaAl{jrxb;3J6w}BwJw#>i$YfFvI zsMe@w>%Qkz`=Tb6ycefkF-L0Ic}D9k{K>9he3p+AgQTvllaqk+fU? z_j`X7G0K=K(QFVY{XqC7*VhWZ03ZJN$(=s-AyN_s`g6ez3w3}K#z`ZRH!}tH9rn-U z;1Sfz_UrISl?Djz*MMfKY_g5pnP#W!m072~uI*K#IPi(hm5<%g$L*}Wwr!sOOZAQ*qW$g)Gnc$)5hs2&0v^+ZVkkvc9W}Xq zYku&Y#tAp(7m49{5bA%jAG1jPg;;_xu_vM^b`bRU1fdy~7Hq%4Vb9N%<7mCdL%<@* zC#S8@>PuFQhCg-tfS!>S1eTn6{cDUDfqYl?f8SG#CCC`r&}~{HNyEx`2O##*NM*!KjfbEqk~1=Ka+fBLIT=*8IO~3#P#AC`S{ z_G$(?$^a1mTd63OaZF{2B;1y`s9hkg>)w-&Slxh{X?_6w3^|nvz5A!#c=)vmcSvV- z#sOeeS*sa~+Fnh%guBh}J(~yAO%Mt&UG;PeoKw~ov@aV6#Naw?2TKvI&^?RISeM6n z&0<(UUGujwCI$>c&7v6jN|Vv=k`Qw-T6ugB?%mAt@*PJ1r>iw4jM3*-t%W6{NRB}0 z(vq;OdV*q0mWltznWe>}X!f(i{=zv9(E0EnG6@rl=&8ipx@A|V8e%YXXq>S~&qpmw zxQbrBnbPww7~yR>lu6=~G|n3xWF<7zxQU*vkZPOJ;P`O=JvKru^l?G*g|Lws>^2Uv zi}z@dQpK9&!CC=+l`3H3sRfZm0^5Aa*VR4TFhy#y)~0p3xXsKp{ElJgE3S%zQ#(oX zAA2`95xDIiDUUtffw^5MOzSEEwm(~{w~Dc8Lbon1E*_1fix|w2nvu~K%}s*Wx1fxnQg)c*rFB*{*hs{r;y$#HS4bZ2HRO9D2a&B+spPu)N#y-c zb#1_^=P5Ic=7C0|k+Z)!yd&Ni8w?e4SbE#qat#srp>QZHeKES{S|<;ydOs>J z9$7*{!c~llpYk^m( zNr#m(Ug*Hj&%gEksPJRGTbm(s*y3#OOlgdl{81ih;TWPe_?hW1K`3<;?Pl9L zpfoBuIr*p+dE_3;SZUdUKp>9xW_bvN@j9d@v)bnWwAlKT~%PT5E8OFW?f$FOc zl#9W#{FsxUQTCwy>Rj`}(($z;zk!9++2mJ~%n=ur9UU*v>|2v|D80Wgm*c4_+o6$x z@gak(?^9nWgM|lmVxwD$4m-XyJTd&<;8`|_sP0Z5sRdJ>U(n7M^)Pk)=(e>NdF7Zc z*|CUy)vtueC)#n6ke!(X8LQm5-Zh}ZP6T;;TYcczxWEoX3$?Q0C2b_}?i$I93Y*haRLE6bzAuo58bJI`F>1*n@* z0+gKN0r%@(B9I3yth9$8mp3LJBB>8P0E9qGNp1Ym3`V#o$MU|2_>uSZjO)TCW*7Gh z6&R`F-2JoaO%zhco5Q8Win=@J1e~t6UbIMgAw5YMWS?}jrGy*?Tz7jzWmMJ500jHd8d#B#^`#(e$mk*cc zXB%CTUr0(g9xEZrtGqJJ=oZ?bUB`vZ!-1Nj{#`p=kIBOBXQu)Eqww+| zy~dNXhebyeL*NxAuPguEpFK=E2A~^PKOo`n>O!y^M{G)!&;TGHvT zeuC~AUG6@K`EA0EtSjyngDqixCj%?J6_f$-wa1K%SOl3u1sWj3AhTL`rjU4J{hes) z&DN&0VGA|t-frWau`Jodq1t=a4!0l&;8y*m1AB`MmN(#4)CFP~gW#&A3O_9XpkwX7 zp{jTAO_yU7ET0KBSlUxq=hj<(-OT_;<7_=Id?F}kusv(AAIv^J_E%b$;FU<99A3+eAY=leG8r?c#>(sC&qdU`ybXU5XH8Oux1wl>2D(xsGOlENjenpwx5N9si@yEWDP z*u1?twdK^^nkFsoLXI9-TNbC=%UCajo!6fuU^D_8!|CAmib3eX%z6aWDlsnyKuf!Ag zd#2wAaoVm(h(>UOPh}&-(tqg^+9nnIB{EN=E0xJTqkyp#YHYIkuChD#q(N|mvT@RBR*2z zOT|%ylj1^uw#@bQL}#4|zZw;1NYW}85g^uqKMQ-^W)}~7;l&Z#jX+oEhFM=os?%DD zudlVII0>j4LjCTZBkSrf`vle2YNVX}3}5u`pEQ8`_rYntQ7N;(WwvwjXs1QE^!QQY zIRXrTWOL8nEg9p$B|i_ifm&DeQbB>w23wWm?hHHc=s>h2bO~*P_OXShyDp&>88$s6 zNDLD6!q|MPXM%8ICH!^qi@7-YhsQ@-6$?B*2pq=!5KZ@5?>A1`uiIP;D{=WyAG#ME zE)@j+NX5T$R?wfUg(-}1X7b8HE<8RmTtja6$35F<*9~vSv|f5#RPU`_w`qoGgVqa9 zTKr^}o8KJO>s+@{4t3W(Q!PH~`V;kXPqw0eNQXoCVbyEhiZd^+W5&-h`qg#IEZWg( zSj$-KZQmeVsi7HJdbuXc0QFT91x;wS5B5I?Ev2!6cxw89p17Cun%9j@O-YiM4Ze(F zf6D&6YyA?~AnTz4*KyA|6#z<)t4geG2>IDO0v(MQo%oHr&9h)mfurP+})=9Hv z&hbgY7h8*rbHC(1J^Mo5;qB*EAd4@)wszdmmU@ysygtr-%3{Jx!L*=CHKq|zJ>`hi zd*Xk8H0qc36wsVW98B@n#V#*XvQ6KH71BDTF>ZqVMOERUgZ3Cw%qh(RZQi)}#*wn* zTjtj7ZXC7w?Xt1Mr9DzpaCrOGA69O`&nus{0Ok3ZPrl0do^lEREV=O(BGn?BX%Q$C zLhNZy0(T_#mw@4d_^wM4ibNGjr9w|~LSmm;fk(-%dc3E*r@S9mJfDsSyifWG@sZij z2@9UWyIM5r;v83$jSBLGjZ=&p#>`+g6t*0D^<+a%pUf+O2X@03Lcx?CiMrn`D z5yyH++h(}tu+cisq`k(KOrG1@qI)ZSgSy?8N9({WdQO~6N5WC?xDiSpUFd)PHESTX zZf`WsaA6QjcxrQ0T#IGc` z+m@xXyT1$hc8v)q9+>tfG$BH?S&_ab(55sG3BQItNdHeox!A@~X<6{`@0;sPPzZHw zKCpH-8NNF0)r)?ve-`4s(EK~lKJu1?M+)WqYPPoOnJDRGZ!{+i&gRZ?>UDnr-nwgl z`#7VlIU}a-_yy(p-B4VLQK5QolOp>xF#0U}b|CZgtpzqiPpY;P7~*s4nv*z7|M2Zc zF(9VqwM{{rC6WnQ*%F98Y+MBepqG#Sb}JM74!BMfXjyKQQ^W7$e8`N_gQb_v!c}Q! z*R-2?nAq-)EPn^ZAQ$@oNVOU^6bx2NzM?BB+m^{S-;_>eO0@V6{mOGiXjs5-6JL{@ zTAJ0#bC{45%@J8%S@`mXy>%Uo*0{hBXJH2wzoMb85`8(tsjY580ol>Q(H8DkOny1c z8UoRT<2w8%ife4hyjE?eXo7eX5Glz^WKJ*jEvNh~i(^#;kAd7XFssgT=e%^0wd3nE zy@v_dGGz6=&8(S+z1&o4AA`rh!p;UrvguUo_}zhM zgXcjbvb@SNi^KmMA;5J7DYt{45judd11VP>UyJd@bF%+JQ2FIr?q?gh-k|urXNFkcO)7u%RU($p8X)WY4N%@fpV;|;Wk;ENjmG4) z&88l9x$FK@ZqSYK()I;TcDW)DtFHGYgaAi~G1vP9{iLMn6zybvMUBt~-rKB>d<1Vd zx`_$1`&^HN0$d^I@y`8h-v(5$u<>5mR0~s3kEQC-<_;0-GG~2XN`Aji=o9XK!IEQf z5RQisWP;0+fkD_BwtDk(*jbgVX~zc@EQdwb4n2x;;aGR~cQ>mcKLBH!M<+v@D;jP0 z?lSxKwkt>fLY}Gw5V6GK#<^kagVUH+#>cx!PRB&6E+yy-3Sgk0pCT?WEA!KxOCAT^WN?1)ONhnp? zGdVjULe`-pXRX-r2!H~n*8xCFwR>rm#lA}|$twoshU57XQOr2`5r16G=3F{9oJT5= zdgD|3#bwxx7ED6k`J-=j3LSB{a^#EyQ*hX>d@ifrR;Y`*Lf%3uF5him-<~sH{km6v zSb;H~wYgQcT6B@SUU8!M7-sth)2rk(B}zu^`lsa*6;N-tmbLA#wN@{1M)uz443JkI zec73aY1{K?m>o9$;*l!r!F0LvRqQM%FEt1Kx_0{+27lUP11yEAT zc+t&ay{kD2SG_GR*vX~L8o+O!X;^j1WA7p@AnvL^CLQS6Zan++(k5eCQIf0Dnsg^2 z+JAHms;=dU-uN*Z1r5fuu?P7ZO5l^r#)}|!yZy8qB0L;7OjM0WB4qqDkk|Lj90iCP z!>PhVuDys@!8e)?A&mtM>QXrhkWHJIk`wxL_|C~npY?!YCF6C*p+do()O*W(3I8ZQ z+wpv&I(t8otw{pFh|tZFH^T~n;H_|nASnjZ{`>TTlE!cK^n99uUhYb=<0N%;ZV$P6 zZ4CIg?y>xq@3w8L70|DBKjAU{uNhNff8^j5dnbeh7r*^F#*0De?oL1$jP4f>jh4x^ zVzwt1FV3jwSvD+tcWN5^W#AE+vwQGO^#niQceEC6Tn&}}xp}-;o67w!+>Xc2Z*q<0 zpOETi&c;4@6>PH-^b|3edXcdqmJi>1H_2)A?N1XYjX+1A5>4u*afXqr2-!$darJ0S zKXCz~^Ni+}Hc%*DNjc+r2%M=fT^Kdha;q|=UC%Z}B%C2btPN}iK40zlL|Hi;G$tGVxX_i1=w1n|+Ua35AmmvtJql8hSqgz{^xl*qZ_={*C zAC+n*JNaC z)4)>If(EKdLl1oCv*>`qV?cvY09q>6%#b-TRn~la(I17eSC#f^VRBrWRWU?;%;U4v zrmOdoYnLOSwWJ()dH3dW)j=wOnu(t{Qxo4r$>*zQ3OyC$pq4Mnt=Al6GW>3JW}bVr z8#f+aV_DcGJf!poCOaS+H`-48`JTO#(3b_0C13TIorF2$S}{FcZzmOcQqre+{VC?@ zCVxlSSfcx$U?I_+qSMF58%aypxnrr&%uf}cw!x2d7D~g(F^;y^b~QaYb)Uq=0k+Fa zl!>_h9}}gd)kr=2@~A)O(!EaiOYkITEL{=nXOw1%UHaR_%8DG0?Av>1C-C-LdhNqmgvqLt1qot=~vU);tJ@6<;5CS0jHq-AYi^%jA_w!bO_f zRX{E8$2+;%$TnFHp>bJsx-)%wZuG$l*k8&zOf2E%6WvKz( zy#oCz{$+Om7Glx%+9)x96U(o)2Ri;FyCGnbX>jb-c&K;@7rfyh(xQ=Mnndpv-{B2w zzx>;nW%OO>FENgi_c1LMPG;SuaA3u?!unSoS-QKio9^(*)B<1Gvu5AIlfchRo$EtR z49#$}%0xUfdHC3>->wJN*V{s;>wGLDOH*sz!PNHY&v!lgn~cpJBEsSL#2t1wyMn*H zf8A-Y7tXF_u+HMDW)3#Lu@ed!z_3;?)zr8ka5dTj;ZM@BsQj{1Cgo-nhH_TD<6BJ_ z_wgWNh`Y!t#2u##_lQ16w32P`3E)72Q|3tx_Igu`A|s{po*mW&~ z@0hi`gt1gaku%!AebR`>4uY=Z+zwrKLtH+#cgk|S%+rDETuBGQb>zetTEuQrb48Xo zp`%`amXW5{_$GgA&3>@ z*h;e3-q?nCVPjJ!Um{g0ZZI`&DRI;86%c3PVexYJ(id**`CvQ5BCl&kW@e*A&ptq- z!^4Z9?Fl*Y{HMHB4am@%o2x~BH%N+JC*IEO9&8;zEAl_g-{TL;EyT|$M4$2Rju{+j=nLN*={uWrVY%X zOzL#ybQ=SGMKnFkh_IZjzc&7)N2iv#r+C~;$421MaT_^693U)6-yts3k3r6iy7&Ts z@;)b#r@~sJCTaqx)7?{dkix**L9)4y%xid+(!b z8bafhV}kRCw%v-i56n!o-PBboBKQNpv~zyxy8+#s8Eq-7#B(B?!ZB!e%6PJwISV6L z$a^Ez6WHv^hX2$hKj^Vm?V{9%jz2I6R5!k+w5P4tOODfs=Kwi-M@O%`T%t8I4UgCk zAy4Y-_@(9ZlG||*C$7W7f+<1Zohk!OfX62<9MT*KwI(PNRL#bsLm=mMy0ci7GL}p4 z#*1-#^v595>e%@TL^aXhI5a;51hFv) zfprBaRRsi9v!`QZf!g=p^OqW01H`6Qxi8r6x?7DJ^T^6ieZ*b1Qe^9rfq9SH?B^BR3#B7(2Eh%se&@JP|*&61wQ>0!;QTS{c zJF2Z7a0>R2h_;oEPDlDoeK-+3Wn%BM#0HF}-2nCa5O1CWd`i0JO zVK$M+;GjNO`A7emT&jR{OYlYfN1zw0uPB~fd0n-6B<3qY6((!lM*PpfIu`<(*-Jo2gvZ**V(*2*9GhHyR1LkSwx6uSrM_5PVtPd*Vj_9mq5_Iw>Rj-YYi zvRwWk{Kq+oFO|I@01rp0HF*5hQII8(b+f9F?6C5kk3Z*cL>-*a5n z2ZRYZ;|;=%Aw_Q#X>aXzKSlaBM5{~{d6{55Pka1WZoyroW>j4 zMHxc+A=eQ(gj6cd=ffjTB(ma?8ji)f`ZDmUxxLBK`8=g=(DBWCt-F}WG3@Vz+xvVG zY+_3~ht6DT8AQFlSmCnkC(f}Sm%=B^B)@)&0AG#Os$o60J3gvp&`n?--cK1o%7Not z7o``K*&NsW4);dxpWe}h{ki_dz+{*hk)*1Z`V9BFV+=6B4rgc7!vSMFs$X(gS&mso ztK&rQ=Si3F^cS^fe9D|`(a67ieFF>+e^#>dP!$Z#6$Nt)kkaMHI@rzPxsEAiuvWbo z@ER4ZEoXnTGYDY8DhP4^)Ko@9hQdK&5VnKSo8^OM%a=xQh2CcCE zB{Nbq;-ehpG^*^pLCA4q(h=Lv(bD9U)UW#pkiizq4r;qslreIkVu;ZMBq%L_qMg|T zYF$~P3%(8llyxHw_1Nj`9R^iBg900r+xI3!?dDnaVeS$HgU&_2ZEEiZY+%)Q-Ykwz z0i?%BepvTJ|D%!4I_WNAfNbr8MyqBouY>5ltUq)2%U{$^p3~6IplXX%?8`ADQq$W- z*zPa62gcT2$nE&*2=#-S7~RF&B+SG|9!wXYYmq{t%zotPpz{TTa8}lKQ2IEpc2;i z%%u>+GQHXURe8RmS1DCltEvQ<)L25#_r|Is_;5S0e23Wia#aXM_v-8MB6oEao`B}X zC(0bH_xow9BL4sv&u`rUiq8{q@$!rhOP=3)Mi`gVyb-EH@IA_)QN&3bZy%NxUKh;T z%`;Xv^$^7)z>&sThRQ3`)*+%Fyz$+!T6~PshJ)xa^WoKEfYuq$EiFEX{v{~*qjgZ` zl)Gvr|B*3I(lT5jxiiNB&xOmXV|My-qu>C})4|~7QDHC2@m#imU2U`Q1-~2;Q1CSb zJxKht;8qDLi08JZ${+$OItX1!*N>V zgtCcAdlumQ9>?g{dqU#bE(X4dd1vhqfr>vRqzX7>EsYJ5R9U=CZSM`4fo<4SZ1sSo zgT^revYfJt?TF{n)hJ1BNQ_cZ$YAUJQLF0AUg-K;3h$>UpSCRHj_?m=*s){)S9)sC!-bo=&AX7vDln^_47wn zI2jWD!da|2h%5HYXRz@bM#}ojXnIQtGZT%4@`_{8T8o1(FD(iL87LJFS@9(dVlV_^ zf9YqAmZZdlv^c;RdolZ}UFq%SkS~ui8o^}^Y}NQ&<|^tx)DXHl;iR{ZborUZ4IANe zPfZoSyx57?==W;%^FkJ<(r3qd@)hGt^`*w0X&dqdBC0Ml{$E#T9Tipd_WJ>pkW^Gk zKoluax?up3E@_eOF3F)00g-_rhHmLrx*Nu!2I(Gz8EFQF9_sRY?|bii*FArpb@tkO zo&D^!&-w1>`+0~C;!BplE;w4j71U)8=WSYjP7KW!0Xz{+6Bl zV4fRgk)S)*%<=S{NKtcZBf_}qi?hY>b)L9wKlmxh5HfpWuv{s!Z*t2+{h@@&kRvkn z+lZO+^Bb$+gx^uc#m3)C@Xp`VSdDgPt5~Fin-sy7llS+RS{8$5yTpx*T?u4D!^0Zy z`MTJ3BXx!+0n7@=J%{;9m3H|3U_0of5EEfRxvJxbdnz%+z|+$5GHn{H4J{#1T% z^%SM(C|nXCvmqOq59AKf2H~Dz^&5AUb*$+JIo3rB_0NATp5lTZ-6tEu`>s{RoAfmG z`k!2=k&8-MECVj|mm?Ed_+0Zt-A>t&yfFg6D$C$d|GP!>^In>x~WU3jRe zn6D3M^#?*s+zOPQ+{XE>$oYmbf7Z>Z>A0FyJl0vLW6S-M;#h;_BG(ockS-17C5Y&BI9z#A5N2mIWuDvQ>MIW#n>4(r1T}zoPJ;l(z#%B$851Vzu;7Q#~d> zax4KbmHj{a_Hq8ugG5H^?;mn5RLeZyEPJ2;2vpw;V0$-KFY~)z$cK{9VS z7Cpo^^h#iXVGq(+xBl+yzUW@@tl3^M&w{o04^SmcdHHJ46u)~&4}!XzD`bS6ou4pVDDIeCx@W%qf>cXgbY2!|@~5GxIs5`G#i>LDgRToyc$3&5&WV_*9jDbe@jfI5upr?H2MQN~9 z_z0WyRKw93aYN_os8aVXzx`P>JDrfiVo|l9@6A=q@x8+ZI>H1db0% zr{a!$Uj^kPW&f@TdvoVQ#6-7uOo$LcgB?t-xk<6Tx_-ZP{T~lZ%^dpG_(-~K?gmC^ zm)7Bg7tqm{rgU?VQ{Z3o_XdH4S?mXXS%sW=S_}+_EiU)yOLh^ZHDOL}862?NC=NGi zZ0YL`Z3*w1ON+();I*i#2Z!F#6e%ey&grzm?S1jsddv@v%PG!1VyW@#g7lWhS_RPr^kHvGDYBSs3i3@K4IAawi)1H zBGFkasjm)Ow)#y~>W}`97W^Wu^z}&rPM(1X&X?f$j$Vn+-KOdpelOYq_+f)tYOt>Z z-?s|uG4GNw>BgLozWl9c7B;E8gRDPqit`dIHV`#++05)0Iq|p{Wlgb5Cm=Pe{$BO-1 zwo>WanJG>KNQ=6-%M22jy{*mcz|r94-BzwtZ>XV;nkK2GgnY{~#if`j={MupsR%mE zxOysp`H#s(ZSq2hx%2OvMDwrP$U!+HEUl0`V9Ff@(Yk*^CeJZ$ zXILlv>Ni5}iSP%ak;V8)4NmuI4;h5^h0hT<;MQ;@h05yNZ`q|nnah#yQfE_YrxCQ} z{=bM{Ha7cp0zOTZkX`>#enb1ET$Ap(;8;neohe^4sv*trh{x%g9l-0Uzx66?RtNAozw7v1hGQ;z=6j-x`JV;PpL

=ru z@G1WC2fNTGxV0Ofj41(3IJ5?MVsPqhT!7-~a$;b#mYyq9K4A(0?v0LEEc(%YZ@=Wv zAlF^WuZ0N0kIoSSgOdCgBj<@$?<5i@9chTZG<%hhXAhqTSEvAtom8E6O85E;u5HXy zfBUSLq=qp5OAlAd2IqTizF74C8#tra0S-8s0V*~O(9*Bl#^%R8t{hGAaxX#Fx=s&% z7L9JHId^-$_<#gp<}_u{x!uo(IvR{wVm^FfaBuFD4XxP_)3Y2! z*!sWALO_>BD-|M(hxnn&U#1Y>I1sfy-?I~+wP@E5R2_0@5*x5k=qM_5F^TKS+i)r1ë*C0WoFtoEMDK164SJk_z3 zR1PX|QJPEsO!(dOzR6*oD#^mLSB=hnN>H2Bdd4f^&AEDf025K(tB?ZVw)K|KjY@$i zr{)Q|OwSj=YdRXLuAVI7p0zCz*>$#Uh!2tY`I!ndCeZS=g^o~q;Q?PJlB-Tj^5LyMGpXpwu-19(CkdZ*rV7f2zXu?F zoDbS_I`7=2X$6Z=H5`h@lwT(em0=3cB#bN{72P`fQMcO2ISvL#?W4a+04KW;z{|?Z zwHQR3k%(JyPGW4+3B0F}qHXWsEbJ<}=CJO~9y>!|wo4Ua9jc5y`z>%o2$*=m2u%vtTgI#5`?2}H6K3zpY zG~#h+TKhbysmJvs!sBw^2KfJ_*VCl(Pko_@@13SV4KHKS;@S9VP@o+wiZ4?3&AeU6ItXHZ6|^svADbe z3YrNDzVta8*fZ=_ZYj~jm@BV@`3MQp>4%jn#wFDgt6o%Q}u0wm7ZSe>0_6(~?mYX*#Y4GX6w z0uz~`nh!vxgU>0FRq-CjFD9xh{|JeK;>XeE8cYH{#vj@5)9bCkL+=+8s_|*cJw%1>imcbEeIXNB2uB z2=9ky(s5{3t{09l;i;#t`?&V2EjnkOO&3#|sOAf%9$j`#dsbU&$Vh>0K zK0QcU`A2JSB(*L0MI3DUiQ(IbBdPHoli_<3ny3GcJ{A-^6RIo3;%5XcKDRqHfw80q zNw9PiR!8s_3e!$aENTHz6!$ef$H%ZGkErm&8kP(s)=e%RXtT$QVu^nnR~(6v^3vB2 zk2ljhKz#U?{K}bWrIU#4+-D+_v7&Z#B!t@^1tLdZ+n^zs?$ekr^pZ~PM1%yM=1}|OtdYe& zi=Gk$r|RU8tCUzdS35OMVS%4BI^Mq&%}KZ>c_hldp5K(9*??J&4*tmR>iyyD(@hn8uGF>p^Sb^*5^cTQ znHsPNP7cC3F!zRU&#vVolKkd4Chc-{Th8a(3)fkh`IVj?Reei0U1(%IhP9|V`-Lh=->bD!Rk4K z%=fTgOTnDbSU$d0JaOCKrlUq4>fW}8Oz2IxuMIKzkcOq7K&(IQ=IDs013OfdQjN06 ziBPc8EVs4f*|T!;#p?ul@K^C8`v%x?)p+5ML6d7DHckzE7xw%mI4oUsZY1imZ2 zGS^&sQa}dY2lN6O;#jnES^?t#?mYYG%It>=p_D0cvje$gv2!Ak>f#q5VG-xkVP`st zXUMh<*R6n+T3?=>uo^aHit{GtF(t;5(RY0HlYBCSu0d%vZLzXFwN|d+?|4y?4WI8! z_(wwPZL>YT-nt>H^7L5ZgI$9fM!K0)Ed~4*Xq1SJ8dGb`&%0TL8H`(Cj9gVN;&KFZUaX87P?9 zE4d?fjawTDX@wr^<>Mx8YpzXi12ac2rF;E_K(d{*IUscQFZsdJ&RNuA#w$ZoV$B3$)aGDvKX| zlv+(Pr;sM_9g|?Y)_Rv~QQ;6_S#Ia<%Zg<{)fqit&ACF@(Q}WdJT>m|ZH)U{#3W_M zapmxPLi0f$hN}qMO@q~?_mLEs4PLQt|M7_g6loFYtCsN*KziaV9CGM#=usjPTOG$N z>v=E8Upbps5~hiZcs%0MfJTI+Tbpq{Sx@eM3soyyIDR7ym7-P)K$V>}f z^Noq=b^0ujNC-d$0M!zPVqgSj z?3CCCK$MVp;oht8O1SKhDwL=+{UAZiK;s5~YT6p@uK1v_v0eF(bceXoi{y+8x7w6v zImaTVNp8OPo+Z7)CMVTS`@gAgWChUuIa4sKNx*43ssf)NFUvk3fCQIU0%Kqr?PUdd zKgvn$r{KkZr<`!J;e;Vb??)O}|JOGM+*~i|2O`6*|TzGV)(mS1Ibe*S0LxM)_nyn&Awe9@jSKI34jj>H0T{`di z+fLPj_F|fTe-0?WJqzuB*`gn$uq~+4Ig`s~&9>_NEgG@yI4{P67s{DFnW_<*n0v^b zdLhTQj3;ECJc4#mW(m=NJTDm}tgwn>60%iVe=;uIfR_`CBK<0{7Zvr1IFHu0b;DlV zYBW5G5*s0D6N6rck-=CKV|7E;%Y+ja3m#n)Zo_{@Bd;$9g{{<~%zJ;Tv#25|R#T59 z_dV@;Zz4M-n-{q@C}Xf zX&)LwmuZ(w&q$x8Ozd$84Tp7sYew4Ne;+zj8 z2zUK0`gSU#TFX?Oj2d~!qALHf)&l}uDR+!#MKXi@%uHV{^YLb+f1dS?} z02coHqJl4+a6%W1?fMkiT%o2F9BxB>Ga82anTb&ejV@U;|FjZUzQR};=2Dx`2lYe= zKG2Oa(lU&V0Nh<;rthukw^qou=2m8BJspjEdHq5u(=p*Ux>2M+%cG~}s$!O*5qH$Y zD`#VeX#**&OMH)xi)shBF|NeGSJI&Zip#!9l5c-D-J_7B71@RrrIj@DY3MZg^2w^~Bv$KBmC2kjddEZL;nJzo_jI*!)`mdl#d_z_4~DIAA38KGeb`k~_JwrmbgG z8tlmF-5_SxMMq%&C7o7RO0|W01eNC@*}ZEh;1dpM4~uh7dcB?ZHsuD}*1SW#<(U`L z)5~x{J8`^8WTqHfFK#C)3!rGnW;ENI&Z-o?8ds4cq^Vfwj0r?Zu6>wP|+Rv z=<*ki7MxNkLqv9=?Gr1p{dsX%$sKBMIPSPnEoX&49Vca*bclxud+~W*Sg}I-l8?gu z)AIa7GlKfv>Q?YJaiads_F5uD5{*&+QhRmz1g`0Y%vd7u}X6(y|NKIC2#*Y{&rhW ztmn7rrCIGsv5Oe@e?_-SzFCbL9-O;4i~{=-!aaAlyyjF(vQn z&|zks7l?vm*}nDJZyae+PmHWma~Kw9sl%5{^!N?ofvq!J*h{EggaX}ycKF%1zu>ED z*f^fOn9RRCkGDj81SNKHszchr0~s^-z9ztoY&7jUhJLcAJ?J(vtrEW(BYclE2-$6f z;5o10=XUfyVU~2t`@>Wh90YdrdqYkYpIM#aq_ffcZUEH9GtoJtL8IAnGd9Yml@guY z2u}3kjN#kdVm>i5?Myq#M71!oBZepQ?h@*w#L7`^bQDPM)|&s%wcP(MzmJ$S`_v{ckJx1 z2G|*j0y*VUV)_!Qz7_SZi-B0GE|=)%^r%~G(_}uu@$)|0O_|(5H|zG3Y}vr6N$+Rn zoh$cM+GeX^CfA`ifr}>Fns|zPPTjFfD$**kA)RLuD-JMOZ?{u&v;MD*ry3KatWuiB z_+#TQac^{$vtgI~Xffc1DYP^^P>1G+MvLWm(#9wMJsz=W|Kn>U;IH3xn6}xgnlC&6 z@{5d-)U~^X)2Ps?mnzcZC;4+dl%>RvC&bsEKSw%o=8V%oOhYeNz)Ngs_-33&s~T&R zezH`}ZEx46a69I~f=z*tRO1dR_vgNLwkzBSo9cG57$p!sALZlNo*JZUSBEK}d|7t$ z4`Z^M9J}L)F$YUp#7L({O*?^qe9nOKHx+T}!0l4lf|@iia$DiTKJyn)v+-MNNgxb4 zAq=sYP*#dZ7}omgJVO68va;xlxiSB}ej^P{W*nud$g$7SulKoRZWu`gDH z?F>LI)lVRl#z-Rdc?7=JN0pBRj|m9xYDvc?1UB%b7IT+KL+E^Azab)k;jZ7`v0f9(8Y26OBXHzy%vy@~0r$;^E$AXz3X*VN0 z4ouhDg^vUaQ=|UGUAgq~|K>{>ecs__Su`}Mby!z=zWo)9&lSKiVf4dCFt6wxozi0H zX7Kw+&v1&n-{=z|CI_9i)0g27m_9MNoZKN$JIRUZpDU#PMb}g&UOxEsfzVJN;n8P$ zQh_&u4H+_Gb?{b&=pGMyDA8@}s&?$mGv&~Gv%sp}tcSKpmE>-w;qln;zP%PGdn0L` z+$mY;y$!d{6Hz&yEl&_%6OelRg9Wjb&LNUhBLe%yydq5Nos9YF|12WIS{n<_^UPVUzi} z)uO6jMetQW|Mr(JyOZqhc4kp zZ>RP0iMC@OpayAaPYzC1KO3&UgI@-JhBN)unt>ND0?oYdbLey`q8v89i!(&|WWUE~ z#4=AmHE{7eW^@yig6L`~)NiP{gbJqHI-Q{XGKZWHD|)4mdLeAcYAybJ{ig@7$#i_! ze4XP@vnkL!%dSYyKQbsG^CPr#!S5w73!$ zlCwvoJK-A?fsH6xX22_cM{ z?b$OG)93jTZ5(22U9TfPWuI0UsFJSsn{tqnSLiS1-o zm*5O4-kEGNbL#Uf#N6h*pO`I7-<|Ep|K(kxX_P)$LIkDTgKxmmsw|9by=+?OGFyW! zjU>2_^f#2D$I;tbQw#EKt-o4m_-Nw^%}~Hii2DtZ){c&(+q$Xx1n$uGdwWIruWr%S z#YSb;8lQZTZ3%@0{$ajoZs2LRcw*c?G{4s2%nDHpoyV(7o3jHKt*ZW^fbb;IaGZsi%4p%9v!Lvz5e z##5?WG{}N-3|6ld|4Vkr9d1N#Lw?MbKvbI<6sCw#4we?24mAuf2F@~dpRy*j()CYM zn^(IRQ4YI#{{~XZ^jv<#&EATRQzn9+kn<)6j6r-8UL)`W%#m8o*x>$~AqGZN_DyFg z9JeppopgP@D7p%AY(o;mGjD4pkquESouu7auL%%lUN!3y7V)9A9YS$65^r<=qe(y# zzjegmcZgU`ZousW?FnW|%Z{{$kR3BrSf8m*nXBP=aN!cA1dmNU4EcBdsJU3DOE@*gni&_!J@Aa zYobcCEjqV8u}V+Bsi+J#01d4aJd9~yNJPS3*f2K)n#$#UB+H=XW6k%W$vRwpAPnk{wNp3+t)P=a4#UAHj?7fcBTsW=UoN+Y#?r zT*~Y5{)n=vp@PQm*76+i^#eARya(jd^&k zpAFA2pKXJmBWzI&-XBe?;p=Z^PWPV=t}sFs%Lm-v^MCg|tGQv)Z7@Vo#_;$5?%Tao zSZ4+!?)xnm0bXUK&ns^&*8ej0}al^^>4cZ-A4o*D6h!Z=DY z-b||}eVdP!_a@pwr@5XBm$JOZ`|5Y* GU;Y=Y0)8a` literal 0 HcmV?d00001 From 2dc3313c5bd99fb676d66c15e2dcc8f51d02450c Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 30 Mar 2025 16:35:45 +0300 Subject: [PATCH 108/259] deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- public/images/logo1.png | Bin 76636 -> 0 bytes 2 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 public/images/logo1.png diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 6b09c55..a6769dc 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshifts_7 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshifts_8 flavor: | latest=false tags: | diff --git a/public/images/logo1.png b/public/images/logo1.png deleted file mode 100644 index d4218bfaf5b873ac28707890a017cc31dadcf754..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 76636 zcma&NbyQT}A2tdi9TG}N#{j|*lG5D`0z=mT(k0@MlF~7B2uLYi(k0C>Aky7K_t1U$ z-Szr?@1J+CHF4Hi`|N$r{yfkA#B(Av)fMn@UgMykpx`Sh%4(yaJR5rYKZk|!^j*{W zvhL{z)k9lB8l~b7)y~twb6Y7jDHN3IINUo6^rvHNS49I46cmE)|9w#VU4DX5P#z1F zWToDJHr>DX3ZPVhZsB60ct1N^3P&E!h&$PM5B;${q`mY!fO}WWwzY_e6t(<_OO0)% zf8$MjM)R9wc>t%TM@BnIw(?F1#`Y3NH#t2ap(8pndg%R2Vxs?AHCGKxfZ@MpNh{k$ z_1{T1EC!3%@PF;y^8{`M*?)~HNHLA^zkUQ#Ohf;5Bl=25y!o$Jc(@E9w#UC-vOVfz0HrB1Zud_2_>CzViwXxek#m zPEiKTF3hFG409MP|NYhU#>fc3_;+$r$nIxlqOZ)iiRnpY&eUYZ%zroWhnB(O0Ywu` zAL<9}uU7-YjFgk6ryIadelmLe9F_KlrsD_A2{wO9D=U*@Q-VHv{ZjOCNF?6!F0RlX z%Zm8*@2=KF>4`TlQF_R6Pd2Ag9G#tE7*p%`i?T51vC>9-h;L=HBW zvATtEN2PrJuF2(R;^gj`YowEU_NzfLk*2hwLiv#N-$QkyA;dmK%>}Vi)Y7EFZTL-1 zx(!=7Rp1UazoZS5dkgsudb}NTrjuS)vTNzpl*zu{438-!>JHG!KYmt2`}y&UT3B;%}7Q{7}&@ruwI z*h{$9Tc~RQnkZm`xIuJbwb0EFR*$8=zM_YAM_J0PNJnPIbjQB>b~D}NMCo=Z;rYxB z`+(Gi<~er3ijOK@wxxVKC;yfx{4`i2gFDfaX9UqYS*KP@Oi5&Fm;hnyV-Fpa%WG#pzj5C?*& zH#0ukjk-FuDC58*H#Pi%hCW~)C@hl>7AkLNXP5LRh1t$wvH;vvSgeIq&U5?zh0yBl zpG_X67{Bv}}$PO{>gti6(AoIY# zle$8T1H;PE^F}yhQ$grWxv~_rV7;}{7l*H|F&IaE`+A?5A^y82JPuba%`N9Q7X%RD z9QXn`v>()D9IZiW?O4J(?tv@d7Kbj+mQFZU-d;Zk>}k|pF&&-Ni?6sK-8pnjiJh{s zbF$|XjBd^V2W1zrsTgE#lif%EqYiOu<9A)r^XT-8dU{jVrV-pBp9g`kP8LW}BUA6S zb-FDwJG*<0{_p(F&1)mzb9Q$Hqgp4U49aAxt->~bE~jC1JBQwyg%2cW|1l%O?@)%J zMs3LuCBltrm=Hx~S~8JZquCG_XS#;Fl9DH9W}S6WgmK`jrqVV8?-oP;x><4mfkr)U zp*WcL6=$t=km-M%8?tUpVxzajNJX`}2(o@UpExd8%dDY33~z)Yc4i^z-^^-2u#kY# z@?vO_Z@$_e2Nx&kpL*t8sVK?ciJ=!#X$R&Q*+6Joh(=x3H^O@9YdtSu}|&<&$&=Z6M$ zv;3n>28K1(clsd|kBD+&+-S$ag*&L)9A!=hZ;hz1IJ*^z2PuuSou}9pV0tyxnCn~l z@Mh}5;wbQ5jCyRE8VHLA17Q|jG`L|QRWASFKt!a_+eAMkTMaU%AM1sxs*b>quYN^G ztHG}jSks5*9J->ZeN9`P81V^JiiRdLVKltE{1{EdA zs-8>G_tWTW|JP5c#$-`XQz_&wJ{k@o-k4rTo=v8S`iNQ3ujx%q4I3_uWi@EJ>U%FU z4>p=kOiqHLH!hKC6-h}{E^Jz+NrQ8aihFWuHxz4GFy*2my4f&w7{Uk8U0+WJjZv}u z&*f>2Aps1P?opBw#~!I>3H^3aMn(~AHDCH?J?FH@&r&Ws{JDfaSRsuH2vwRjbTLAHLHZTfPKow z2@GPeya2tKv&VhWFDo97oP2QJInc{nfC^6Ic6CuxC_~vPPnBc&tLs9nA)JJWNhQE= zqPFQbf_{Ny?)4GlNxE6zO0bA{qVe((VE#TCkx>z`?dF>`!ua#2d$FTRn2S>~pA&ql z-dSay)Dvvf(QPYID%(^f%yNG2Szoj2lWhBs9eRx3ed@vsWHhFFfPs=|#i>(%aP>Pu z95x_hb4jVCXy4q`B9L{RoK0iXfNxI2Hd+-WIC`TpT1x_5Mix;T$Y$tDa)e|gzpfsM z3QxaVH#bjP?mXbsI?S9G#-*d{QbFGIX9O_)c$x9g2OLhH+eFB-MBzOCLR1s#pckC^ zEBc%E4segk2{hD$t^8D`1V5GrztC81fj;CqPFXW62y9R~=7CEIWRXcOoGe1p$AA&S ze+WHsree1U8&VtLoLgh;5T#A-A6X`MGX)tZ&o#f^adt^?Kr?aQGt9v|_sS5F_iW+g?LpH759cj)ZQ4g%dnJJ&r^B2#d@*0dc1VvoLr1Ph$*@& z&f92Rcz|AwVxQjh+0YH$Q2y!U2!4y{zZ@zZ%&|MRIBKb-P_^6e5-DF~)w=r+g!!vz z*tL&L@tmBf*O}ShQdzkAlYwyqjDVqa9XSu$5B5J(OM@5P_v|Yd8po{I&+7R2XONS! z{qG3lje%v>fS`HhlxjNmx6H}(eVaCKOO=#(dmwEez|F07Y!t@)Rnpxw9?FDnbw8c- zq!)^cWopiwoj#;GT4>gk3j(cQ`#ej3kfa1|NZMhPR#DFg#m2eWwSYO_08iR#nw?Xw zHqP-4)Gj#6od@Rn!l34W0p$Yh-iC;l&?d9zmInxmR6H!f{_1_1ifV1!vj^bjn5G#E z$8gLhnZFwRaZ@u6&tlZYWvXU6P=;yv-x416C=hO%)ZmR~W|+j=R`zZD=&#(E-Fus! zVZbdtwK!|9w;?i(8C@l{lz}{lLZ-odSX`?sShx*MF9%MLX-Q-X1vPwZ8?OL=*p;Df zO*6&|ZVdy39tKM8%=#=r^Kwq6Iy!WN=iii}EuQnQ2HZ`eXj~>os59nd?avmd5_p#4 z6l+=qLp)P^Ftp)sfxSiD7gj_d>lx=OP0rmPES@k!HV^{l%|Tpx(E>ARzs;zdf6*9UJ4q*Q)Kz z)4{~}D7Es)EV1&?B+*EwjkKAo`9Er*ihXfmv1xlXqOLxYdD|NoX9ka&CgJJ$#SrS- zX1sRy~MkDE>c&L66 z--Qq7WrDm;-Ym_`ELD?oeaI%`ALgpCH%!PYLRSNxs+HMcyo$H+_~y#~>(Ip!T|Wvx z*6FC(L^7$Nnv|tr!C0p(1@w*E@u1R~uB9a;l>=<}c;k_(0)=l3l`Ky$(&sEUF$7#8 zi+oRK@lOFRF0lE_f5uI8yB_?+05@T(tOm@E3nR)YIoqEMuo+0fWvQ1g_!%8MDZ_nX zGG&8}nygBn%)sGpkn5NvGWlfS3rd4}Eb_fm=&Z4p@J}X+i?mXHvPj2o(A67tz@Q0C zn#qE_(Ufo3&6tx8CIpzc!$`$tgndQ3!~nKkz2;&$Bvt`MS5sB4d$iiM_aACYEzu9) zs+87LwX&%+#}!gI)U@bH*3+-NYO6Q+$)Eh|s)?-MqS-r=$W)AY+a>hpV6tTFK@J1` zfO^V73wYUK9Q*WBF?hP~oMHJdtKiq>WbS3C#KT24bkl)nX4uB5&M3cQIdy`SCkD zW2uFDH$mz&4wuQ_k1a4RQV+}DU37ienaaQ-xt_8K=7&5aCy|+E;D)gp2y|HAXY1ZZ zpRZ;bmm|nhaig3A=jGyvH^kNMo0n+^+?}Ef5}mqenINfp4>(}TQkQV`gsT@0U7=4g zRPV;Cbp1SIV~}2+Y7jRUO9g4^g$OQM>J_;aK)@@;sjMfENk(rtXGR4?i>boZyGClE za;Fko&6AUydA~(#T`$q)cAqJ1VVg>Q|Mt44Em+ja#nDJ?v3=A9eBE)k+J3kBfKRdS zl$w!|A9@k>f3~fwiDT1{bp2bxNh;chpiLU!63VWSHs3gKGL>y6hAgt}iL=q% zHd|hY^GtyOgR}SdZZe!QdTzSrfUfIa>-0CAu%U%KK*~wBnYMPcNGP*M|KB?vh>M-4 zuHMX7bM|UxoW9r%@^Mb?@rr|x4&UDI#|n?DhD2D^)XK4k{!<(wLi=-GVFi&_dv(3P ztuXz8o=XI0#G)*urw8X8#l@w`-viaJ7gHM$IZ51)!!FM7;qRs%nQ!xG{^9$CG*&fD z2wOk&DYOs`5aS#%RhtRvFy>@L^P_e@+I-dIS3a$WynU6H)lgRf7HTw0+A>pYx{@8| zEe5vMEBV(XfRZde%O{-+dzK4Ca7DGqoxXzc;WLwN91;?%EAf0^KSQ|Y_dBdE%DWOwQEa0a&Lu8Jo5qDkb&~ z1r4Qg?ae-F4-c1@8%G^YjF&Di<|4m<8vcX$QeOfV?~j%CFX!iz14*Kg6ZyX6cUGte z2hRNZ(R;y*W3y8Qwny|P5ji~ctID9HD6RsYM^)wc%|flrZ5G+KmAB!ar1)^l`q2R} zLWFMz__QrW8qXRq2sDe~zow>3c{|EpMKzKEpa?(!0Pq6B;k=*A!|5(O2^@OXc22{0 z2`A(A+|EiT`*#~1Lb#aHRPU;fWKt5Hq{Tf`JHCUu@~L=D!_1^Ifjr-{s$r zH%YQuy>&hL(%@eiv9(GrJ}J9puG<@X!JL_NtpI>O9?$zAHx}uQhM45x{~WR_{#e;G z`q)N#)e#QRc4I0d$!0e^h`gclGM!T1gPu#bNsOdlnNr&{GX>cdo@7g_0y#_|-rUkQ zph_l|h4|hSPp+`0rla!kB00(PA+y@uU+v)RL~v748dOUe%GfJ7b-7N5rHzhd*dcT~r& zfv)Zv|4AXLEUtjsLl2GCKG!)PkS~Xx*34!h&ZPJCWisd|(#s|$5J2Wn8a`3REn|!g zl@~B`v#-Ad1m$u6rM`Q_-w|8%#ic4)$wtt%z9!lHTsNZZ*0y*6b z9~MhN4xup)HCkb@U%dVPqRP=zCX*P!Zlm_6Zb>uGmm?m`d^#yGA0h!GPC1hV zKroed-d>LkxYrcE@BZXPdnHDH~c zC@*50_Fu;i^`HBj%Um4ObV;EpE{=Q-)@r)azv`!l(DP-}8q>`R_)Zhw&v4>JIRbaF z3nhd0(gvnE(l@05a6zUYA+rnIX@B*nOTcsYiObBc>d**7sSko>uv1)i9wD8i>Nf*5 zMJE*LY3Zq!L@LN;$L(vtse;X$_>e}VSt5~s!|T%*&*1G&-D0qgZzJ*nFC*FGSI*oB zuEggNXg|vd{`5vMnKh?5k z9-(27dyeZ&SJCo@egOM>-3THKudvF2UtMow+yO&BHiU{LV9}E?5qrv_<%cPr!(0FU zc(ZV48NV0=<*w&%E%umm&*t*lD(9HcQuY4G6wu&0&s>O@UO0N&@gqk z2~QH9#|RsslhDEgzCv+!+cvunVdP|KwWFp*%kH zLkKR<&;B4wP9w#4xMYI2iuFGNu%4cvhqb4C$5M)Nk)b=#Xi=1Wz*?G$gA3zk@?G-HHE}e4jEuW;675}t%T~n+-n3JwjM{%Ys9jD(5t2K)8 z@lCK9RMeu&;>4VfP0Y}RwnDe0zr9S7J*7Y{XzEh}2W~_ZUDcJi5YtK!x<}=H4h^Mt z(S-bC3Do|?Mc%Ne`6Z5bsxQmiFHjGGn0{Uf=E%a}>U&qsrqAu;);lokK*84vCcSPQ zdj*vn$EO6+H^#rWH0%IMT(n#rd<1MFT(xb>KC?dFWOv!wcY-Y)YG#ky(=ju&-`g*y zPMslP!sdI;k@=~$tuk6nH9sCN5=&WKXbDoQ8?1*7PY#I*ZBa{4t8lrnc>;v?t`$SB z&9^lK$vAN2?JmA2v9u>2ya5d1a>>!bag0iYmw(7!+t9%{l+z;owaDXvhh(=`tf#U- zkzx0FAS;hJHG?tXfu%3oJ_(w)w>k{j6?qMif$k*ICp)j!;j9N}LsA+8U1ld`Q8n@E z4RaD!!43r?StJjH{M}(V-Z{A_!~Km#gJoTvhGnuKY*$orKHpPe><;wS8Nz?m>%lA9 zmoB*221agfnv-Fh%K zZ?d)*0p~ZqmJ<2F#|8c+B_&P)IsH*Hm=i>vDnf~@wy|1YCVm_^SkjWc^I`n3p-N%a zE>P80X#E{Yicq&!ztz0qV*2wuww*VDe{k(5l8OjiZp>*nivf{29Qs^5Gy2AM*7^LJ z(Cc?Tq3f4s{L$8=I16*NY?5w((YluH^$=}%+*5+5b{O!6D^?M*%koCezjVhZsxsOq z>`mxR{YuWlCw+J7OQ!q+p|3eL&=2&o#+y!;xY;4SS|F3SnSm=nhd(bzr96wHhycG! z0#{1Plp`t>e=n^o(&tqvtFF4Y8E#?9d%|Stwwd-|6MsU(n)~t(KZ5omNUY7KGWJ|e z;*>={Y&6laso8AIebMWFQPh*^=Tpsj;yHJNx@d(%+9i-J25T z-m%6tH3_lDB`3cU!5E19(JcwltY5N_smjRAENp8tF*G!El$6@~_}-NROLU~$gM*WE zaBePx`qG=B`pC1IENgGs?I*4EzM-rLs1?7b%D1dDY;Rh9X9#1Jj>x@kvJ zdg4=EaN5ejq14Ym6^MdcZs%T?XQwnj6Pe)E*7_jMgem-FVwgw)vO=vRB8;3=tw$=B zpNzZ7H%~JV5VNs%WO_UC_8dFSO!}G>2Qt5AgZaG?mtH>0W)BF^_@z;yNMMZC_kT@(kS0~!x+P>QsrF0o_A^HO8 z}6)uN6E1XxrQWay$^$`fOo!4iY1qW;J;0)JiNE7YHLigEjI=hM z)hO#c36;EiZi&R^zH#(j?M`gZ#}@D)&Qne#x5_D$RTaf~?>mit|RP}5oOTWm>zB=#;$5(I zW@gf&qoW6|t{M|`Mrf^9?YQp9Wus5q9JjM5WR08LTYAn%tI*E?-VC+LtMMozbR*lo+zPQmlNpS; zQJS`U{gBQh!_3MH9K_?sz{D&cy1BiLaXh#`@Lw_A+oPPT-~3gsHaIbnL}VMzcW=L) zO1{5sF27eKRXIO5XX%b6^mRt7g9sBXsFAyaZhU;4hhL0Qj+#zuq&1z7rz}*3HZ(K_ z)ly&o$L>!~2h212)KDgdQcw!ndzax4LaKHUkU?3wijq=x+m3EJe%O!P92{92ZK1v0 zeN74%-TMhwrlyDYQWT6XXZQp2h@PZft4Vgs?R9fU-mWa|A3qE-`m%m57f^n=8pF8b z2qLk84mW92{G59E>=m~edn*J?2fN;edASAF_IxF>$+K9g6+N$Ylu7A-1a4e!$>;G3 zIiYaqC$k1H&sK~8=0CB>{{FE2m)^$o=<1U~1OrPSFZ_K+`g^FTuu~~EK}ULupiV8R z2*h7Xp#tVU3Hnk@o%uHmmZPO2opqVwwoQ4~==|$eV6|31CF9sL%r!}w{`QK#B{Ws> z)fN7_%tCH*go9iZbUEcoHSr5k*j8>Zmw8IsLJoJgVtnYMY0B#}W^**6WjQw{=|I{O ziTK*t1yAKFr^*)hvwx0T%C!8QJ4^GBgXD1tqF%#FhSd1#yWWR?yL4FOHXY z{F7fBL^`e3hE+0Plk#+Ibe0oMd9c!$VnRx8>4S7Bk>LeKqpI zU}i+em!oq z$QcLIAJ1og*~bK3`(}k~Rz5O=rHR_v5Z1zKi8mH{HKLawwoEwGdUlr?0RNVwQnAMl zfM0eoFx7Do>ut}s5k!4A=delNjo5)O4sgjcI{`ZN^K~{Wha!C&P5*M^Cx?(bP#9W) zC6wr9f5u;@MD|3gsy{Q>B)9Y8?}%3WS*lVtAV9CdP6##rt?gJria(b3yh#n4*DXqf zeyDl5gh|-!ukzGrQsPBb=)jS<+4Cs4Be|6S@k-#`jz$3VsQva&St_f(d|E*;%1Mo| zj?kCS<7sqZk7pW>OpkXXkB&_Hd4x7dlxyFUwa|o8TK}ugfyshT!XQ@ENK5@9uZ{l8 zH@Jh(iF?imL=MT~%edOFq}%V1Doq|+u|(r9-jKcIlZ~>y-7|Y+>$pQk5pid~==~~v zs{Uv0FU_&4dfGM3GpwEUruK&$hbEuPiiEH52`z1bq*=2EB$XlW<78>L+9 z#@h!mRi0Ur@2nCKkOTAWd5{!biR`45z+->9YtZd5k%6IJd!hAEZZztQX*SUWveNUk z`1eQE8Ld}V*(i-xxo8gd5f6p;ZS`mvo9G*ct!{V)LWH)&JW@y@BYX4%jeS1(mT6joyhkVgLC9aIx89@Dp z9}*aA+wpvr*-bnoTK`)kjd@$A*m^79&+aeC?v7Vc9AFBS+x7mqn7`(efSe>$>y77w zr#TOJLitoP?rJab5m!^?M)FDYAds_oUnJb`c=V&0%>wRcd5m{S9TM=REmhk5_IEjV z$5|6ZIPuNFvibX5Xal@c))?Xw>|hEZg{3x8R^Cc|iM|wJCN1@y=AOmy8!#>Heg2@= z&%+ffI3=#>GAFQVW};;HdS>c24>Q7+_CmMAe!jH0V$>U^QcKYK8RH|UXZ|-^N6~?^ zw|5^9-rb!q{P!CV(sCnxf-8|@C;3A_qt)5v`EEUYH$i+~`wVxkgP{SGq@Wvs9~aG5 zoT-^^R>d=uP6BQYYWMO{INYJ!t8>iIeWA%*$6qI3!r+g8BgYV`RiUFZZrGP-xako= z%bVgu?V8GJn=Hm*Weip&5F}|UiztU#+dnpvTrMcx;Q22c=6I*5EjIWE$|2sftUfd} zHZq;!o?0CC-{m#M(;FcuzhT8wFvnzj&O|A8O-wr<4XWWe!L?^WIjVj){JYfBtDZdpW zak{zL>UvevO~bR~uH-;}Z3naCSkX?pr~V&{kxqz=~4o)Qup&BzNDQ zIaw|My7f1@TTAYJ{CzfQUCoIGjzC>4fWAAszUnEs_O!~yVIM46U=jX({*3!xYXfa7 z$bfY3@BPjF?cmi9ltBjvhw-u@k6xklOpaX?C#Cu%x_n;p?dIhQRli}|)O%=-)N{718 zg_7q_I+Ku??jN(sl0CPm=zAd)(t#SJvI#Y^5b2C>@Ap$%6My`nCw#III9X?x>QePZ zAqN~pzc?J|o4_(??$Z9vwYsC!^%KjLR7%IqF1wH4i_sw0^w49*!Qfk0jqHfM+^Pi} z`vR4Yt#>1mbGJiwL5gd>a||6Dydz(&v9&d_#mvZvlCY=1OD`qUimhHsKnn53f;&H^ zH;U?{I=;aTP(d*$;yjUhjBj|JHNua|yI;LuExniG9JsigEhR#`(0}HeUEVHro;9VG zzbjJe!>c``!SHf#&!MEjrmnrNV~kHkkezbwy9`!%oy(0>;7^KkbLJag{)BKHwdJaB;Oxlp1ig(f5S#hlov(ST4QRRTXI=X3IkG!&S__07#+ zd1D*KPl5jCD=jrOz}_YZU|7yTk0(Nx0)m9OmrXf@^)jJ1XeRelHKUlIr7uyl(t6=s zew5C1VdMH%NE=J}NNlam^Jj_Iba2(*Rz0$vM+e;dI=dh``1fZ5o`^14aetYQQRZrY zR5bKU@ypuUlM1X(sHD8{uQa6JX2+Hds zDxnb*ZSluDkEissC3iYT&?l;uY*DhyAB^ChqkMlX@{w+@uVS?<217iKrEIHY#MaiIGRZ?O;?JEA0=dVr zPcl5@MCib*qHyQMkmjLK>l-I&^)_hxUuKE3hgAF|${Tx2OXa0jid0y!Qf&y4Pa02N zEIpL)84yM-9B%u&dp%Zl)uyz3k}kAr@6Te#%lW7P@81Ds_McmlHNYrEgQZV04qvi7Gj^f zv1E5<%N#kK$M`>aT!P3ij-P3tU)*{(K$W^s}YCY{dwSW0^y;hEkHCLH(@&!e2Wcl%}8Euccf zPwHa(<1kK|Z^x}Dm82IjfECnBN%@gmrtPPAEY{S<>}=jng`n_CPI@|S!rNcRWwGZ} zru^dxTe?LQt;CQJjs*G->#3-S=`K=I83V~Qh|vI@7W&{I19eo!snksFaw~O+yUgQi ziWV!Mk_m@Pp%7P>)HQlnE3j5M4bmNGM0k&S+88f5I1Z=C8=^e_8OIni4?2gx|IW%oNW*f9L?NAo3YPONVJK`ulN2Ar5nz53!U@mo5#n>N2 z1ff1P6Qi76K`VsgFUTUZV@Ye7ms{top3eed4PT>~tSs8cmI3!-PMg`C1riIu z)|y7lM}}B3Od^{kHvD~)kO<*TW8(9VOW3^Ey$zm~))ZbZU!vqzCwl1+zo84JVjMBX z1V}w=ZPrM%u9wx7bo=)FGXaY!sE6Kkf{_{#3!U;%ynVwllIfL=_}as-wRv>_WeMnZ z)spn1gHODvAP1#Ge4f#t^Dsgl#&fCYh8%_Z{ZflnXz$D+%SR1IXqAbcyZ9j3}3-=;G{5L5PiOs3_X>4XnQ?G9&*vU@f!kPTp?^(S_3SI=Jnssl!oMEYG=y% zqK3caOyPVTtD+5jKbAjaF)b;jvA@#YFCEv;_IcgaU#_ZDR5JC1OwUL8nng3^3W#Fm zOCY>8#d2)vNxdxU|CVi8!uL(U{dLpb-G`a3KD9RyeK{18@e$metUXCSV`&#?ps<8oOkW5qh7b>`^MWoS6v$Anc(vlM`-h_c{XoSq#(zlCQJZ}Wz zA=NQ5kIfZF{S(wgLwC|vhng$}L;@{Ge_Bt0T{3ou+0vc4a)en+gRwkVbq0CyRO2Pe z+6WO#OU|d?j&=^;rsmd92^g^!sd?i1ZJn@Gl=m2uTs}$tw%>{rIiciB@(RnHQ8{R_=$b9@qM1GW;k@XhlREY`_eKkjJkJ279jkaS;ZR(hTIjk72G;9k>ps7qgV!N2%QD^jSTvA{ue z^l#V*~rN6 zPL><3{t5mX)%F1{>pC-WRu57(Xta}A_m9~$gcPnqGgttRC zNW+_)>Bp3CMn)YuRRpSMHkCr!X;bm1-y%XWUV$+x`nuq1O@4+eju9` z8-*!#oUg<-KF3bfN|n({)(=hZQ~J-z=2+)~JcXwHjd<$Hy_v;XUKu>;iKktdH*5g| z%MWM9{#P4?qLA;(HYGn9-PfYSvAuR zNg7Bd(LXrbiI32ATshVp<5iH4z;;BxB!gr`LZJ~d#mda?IXdUoVtbxOzGP>if?|$FVv3B?+I&wWl?Z6Ow zduB-D@8_O_vbXI8;*^x9^oQ;N9re>RwVP6TT$o+N!+50R@1mnys|&02J&!}Fv<|?Qn#JhudBQa9g-INV9#O}~rT0W7JdLiu6g_lmo18;VyIlVA#@l|3 z-ePGDG^ZoH!5?AoSN&?g9A201zCzv+s_^`ozk9*8D=sf?vLmOGwYBk}N`7+(odGH9 zP9wXniJ2lshczsnC)><0Rll1AxxPM)JQx|-@BzR_zV=&te;U0@-;oSA)N(+u5{3nv zhvwl#?9C~@ztzL*0u>nH#E_mm$?t9j(X<|Rm-s!}8a?au!!Vi)S`s6*tSj;3FsR%v zBnP;jnEG1NzRVQMzy<;a{?BO>Mn^(sYM~NIU)W_|;#7Y62CRKXb-np&+QMnOv9tE- z{-+8u5uOfL=NXN2&&6wX{-67o z=^;82|4f?EQkQuQo8&>=KHZ$lM>cRHJ8IY{DoPw z-($FE92eSv8@NBW8_(vEEr{qOS@y{41UeB_qD2PTt}cDg5ljE%_4B>W@D`Pz=hWn!Y(^np%MX)6UXvTRb`(Tz-6Lzgu)U8WhY~?13i^)d@+<%!@I0}tLCCfMn7F0D}Sca%SWW>CZ!RQ37nxnipm3bv0Imy}4|Q*f}hXq4>}z)s*5( zFa@z>yQm9-*Mz`SKs{~8_@@j5EB96B@~awO?ShGc@F|i+|3)rSdYfOFu?RD5t}1I} zO&-|W6cfXv7qXXi&(ZY*Lr-2to*ou*nx{G?7{O09z_THr{`U75DoMT8XnMAg(`KOL zCkjz+b0F!KV<7fY2^|@;NMud6OagZ&ZUYMVcCL;-6Gf?sdltS)UpOaN%0P^aPy55G zjFr%^!uiterREZ<&&^9U<{Y2j-`6!(P5nF0Y%>YrxuT;nzeuonf{PEcImi8`D@>B- zVcI(l&P%^$Hn!!<#tD~mMS>}F%rIAQWCPv`4TBemD5hisq|NXm#IdQC_I85}@odyf zVJbz{DmC#NVFHs~p29Vx2B2A}KBEqDor?=05#Vc&3*~Nd@kfP|keDAwjE{b`8S5Ut zn?to~(811+gnmP7VjePjdZ8~g?Dpn?A28sBpnW_}zgraaLNw$o^F0%L5;9ki0o93# z+~#rv$IK&oaSi(LgTwaRQo6&vri0pPuUFEH%x7$63Fvz}UghnR+=(*_9QAiakPYIk zIg7h1=Pok5oI6@ANIzx8t&r=7ed$u-#de@!+Gq{*l_Dj7t~K2Xpyy-*6E`wwOvj`K zr{ZE$m)88eww6TE za`$S~Ku zz_hL*mN!A=$S9HS*bJeu4rqgr;^^RD)ZLDUB4ql6avdc+`yp0;Pn8O6-j&;v>KFS? zSe5yl)>_5Sz)bpOjR(#RN{;bRfvhn>r71NuQ?QZ}((ZPjLCrXa8MW}aT~qfgk2G7I zq`&Ni((v2gI2yD;j?{unqj@q`1Mer5>c7jlbLjKoD;HI$(K0he!S|5fAC>+6i5Iy2 zz01Im&(e{&C7|~!PYm0yZ$*u$=uHiibJrx#ijzx!Win&SHyFgIe=D*PC8CdbVYZyo z@wn)Bz5WEjqxMD%PI7(BmV(+kSU3+tm|=}CaA6EY@7pG3;SVt)bhj{)=yofLAv9j$if=E`kTnBhy92AJj)Ai@Dy;sL=Z@ks~IY~+HaNkH^o!a3AeP&*(;&Gtf zqeWEcDVfOS!1so7GDpe~Hiwj_fqXLYOS%oI*aNiIRaK2(@gZDX`XmN#uS&M-(3|8a*TG~kMAJ&A^A1H_8C`VUu zW@PQTTqQrc`?QoH3z0?E##!tcLqvN*YksKJIKhNx_~)Op1NZ-`bF*%o;*0d8HxLWD zENPDU>fWY{JLs#*3Ye5YYPLV5n}3FZJp{N{hIMdEMtx2)|vb>#bO5UYv$NU^8{QAXmvUqIm3(eJ(e<9`A%EMwU0Kt7Y@ zuY#CgCcFXPD=ncgo+nA4uaj?5kNV4XlNh3Jc|^|AxMzkw7j`tVfN(K6?7F29M0I0VQl7B_ruA0$ZStc>55z8{yIxnDe#7{H$pItL+DbEOz2IR#F^Iq(BlEJ#bwa7mN)UC{vqlNBD z2K~8?C;x!+Nxn~6kjSssFJzfP5R*BvE+0vk9Rrx0LoC#e zb}Y=T<{CnWW3SUS@r=CY1k?$y#+lePJ3Au_#d)*(dEPEFC=cqFyw4T!t4&r`GrLb1 z05Z_f8n!Zp6na>#;Er*53^~XyE;;jB|3rtuJq0fNqa3gl z^M_@b1X+e)IT1Ziu)%Fxn~~<=rx?f|`EZhW5NQUK0cFJbC_wjRw#ggG1VE0RC3r4~ z69gISvOkx*jF1Pf>%F>;-?}w~#P{hzhP$$yCU{n?+0D(67gksd(Jvs)SvnsjE;&sY zIjBE#Nl@Z4H-~R2i`CHiTz-AXM6@++;|$s$iPSgk)MXY>+w9lY)|rcqh0D@yZT;o( zT}Fl>tyt=8@G!@lhNVDc6LI%8Za(tniV$V_esg=c*Z5f^@%99sL7+z>6GCE}w{I*oVRx44i z)e-mZ>!@Epq~$Z|Oz@vWIWw`ZyQ4+!+!&DGe-$EN;C}Jt-66R;*e$Is1?`|ezzRb= zy7HzH=2fYzF9veVs)Z|)QeGxh-k5GlZ*-qDD&@st-D+BV9rj6_qvX20K5yi^vYl9^ z%_2?G`=lCw#N`FACm~I^U!>hI=tz)j8nbs42Lai4QVAGQ^O_!l>=XRhKgq}m#{svP z@~l|JA8sZm~!iK8R$%Pn3*~&UPcyeCOq4Z#R(V|DxOfrCUv-r2nl+kH7g3DUJU{ zN)z8oY3fJ)-9x>`QzoQhvo`nRNr$Z-CkY)0@U;U8Z^ni#urd)W% z2wA4Qc$?tX%F_mN#q)HsWUdmJ27IVBAH4C~am~;KnIU#F0~zW8Ij0SHzAhuMMv+JI zi=_(E<{d8O65_)$2*PsOphU1$Nn*RSw6>X#ZtjHQzn(V8FFFdp(Al}7S(x!%=54UI zXK&W@`?&Ymz@as`V;CV$fSfZhYireV(sPKvyW4hlbpvwckx8&-lNh9(Rr`-Pd$6z) zgZrMIZW$a}SyN@=6Z|qs$G0D7TqLeTgQJs#3`3T&B>&Afx8-k@Fn@XHstomaN(;VDAJw7o z97!_buh-Ho;}IjVrNr{Qv7iK6$@3Dc8NQOz>?0{nf3IZt&r*8xuTmQM7b(5|A5wbx z|7!ZbW&7p-rRo1CTQB}E*?RT=Dw+Ntfk==2Ny+wiQdaU@GV=UVDv4zptF+dnJypcT z1fy2`Sc!t+ZWs_dNCb)=d8T7HSpGxfb|S@REH7A*oh*}>NavI24!YKP0ng_l(y%g< zh#SqTG&)4`NM6bJLEsvco0pxFR4lsqGgIbtpj_uP0a-xdx^kZ6SSU2uM8Ed-HnX7CYn@{0x(pzX=Esfi zGAgw&&5IFK#gun! zdS+JdzhKLdM|`?Kei-1>x3C}!u7J2g?fSvfkD!a0M9!dhTXj|vrce`v`MBPU9f>gG zkiVirJUu&allxwbOvvcOtSl}m;Z&B7V?T@^tHgc?%7)m05Qef%ENN+KP-5JrWcjN6 z;pFtoF#^YG+OG}RD$?8bAN(;B9K{B-kO-;IAu(;Av(^wltA2Z5Am4G)H8|a-U}yHBtSV(rwod)F0+r@%6`8+ zE%UpfEKKW1csALGYIaUQ+SYYxW1ZLja1J>xv2IQ1C2>3tFDp_No z7Ob1p)$YKE@}d1g5}D+N)pWjTOWwgz}CuxFuhYvZj_0#c(yxvo_*4IPqc?3PTv zSF-tj$u?b)4B_%xuS>S=wq!f*Yx>N#nO6PWGH9zCW~v)PMz)mbu1*C%=i)Odn??G8 zrXQsYK_36lK$zeBn~~@e7U)<1EhHt@+hhNsB>HWjfFq4bcwx#Fy>tcJx8D2rYH z<%}7KAb%D<%_BclUmmhdS$Lge>7CVNt`XY)ycGxe4!+B@{kAsTd)kZ$A2e_vItKE_ zn+^1zMQKS~Sh!x;672w25Xidnj0Jp9iAdvjj`&njSI30qCMC?RCPx?^T-J~uSF7|B zM8`mn6X6A83ln)05&I~-n=tE5*4DRVdT!Ck^62=C6c<>&GRzXkT7jbVPT*J1q)$mh z!?Fyi&gbi8u%|;lzkNl1`{gb9`u=sfIn*odtxcwgjumtOMEWobb6zsFEt0Kom#h-z zY`#yj%~vGbdQEbzwVCHO_mb`UO0wiP38 zl{`;M8H=_pMINor=K+vqCip>;53(#ffud7Q!`lOdgL9o=xMdl#%;Y}YFfKA#cJS=D z8ju$fmQ?EywQNvklmlr$kY~!z%aQXS$oLFHSRt-hcu{~S4fms_p0O@7SfaimQ#@Px zO@epw4nCu-*&-JZQFm9NOxUMP&I4GHjpdtpP0lK8Z0m^dkkps?GTWKqErBhIyojs9 zf)Ob?p}qOP$Ux?hFWfPxf150%vcQ|sox0XUe}}BoaYOnbi^O5x+x{;ykaeufSb35C z72T&@P(~&b$cH9m9MXb?-P}@i0KwZa+Q)vNf9GumZ#CQ%i1w7$d0dw^L|tGVxMPe= z%*goEoVjAqcu*ds13P&Ya4gGA@?x;Dww2a9ty-z%BIpc3M%N}z8lfxaub&MzdVBs$moTP4zeE4jhH z*Ypnwk^X~Z_4{n|HN8e_xXPj2f@;e(xo2#`3@pSoWnH$`DOrt-!kQa%L)YgyZ}*iw*tscn}Z zWSN04gc$;TSqL+)vypemGM09Hmm#ZRRl_tf$rxEdX0Y}_mQ8*R>Bk{FkYo=%$N9w7 z4L;Gk;QB0*gN2`gi>>~b#AW8Yh));jEMHX<`9TJ0m*}fBa3#YtVtsAH<{u%`$00xO zY~^$SD|*wJ;*v~E6=h~_QC8Q9!u5KlJ!tTS4$(P6SUU?*x9~Dd4#djLghBI# z{_nDlA2i2iA1dh{vB`+#(nciCrwqsdq{&0aJ$?Gr+ym%HX%EONvQKi7>kTpenR8A4 zb)SZvCd*it-KQ0+<3%RRj^Jk&Vl!h=C9ixorKaWJWw93=^W&5$q!gg&JT^0l0gSsw z95=W>N|m^~PSV{Kgzrq(X}up*Pn_d<sX{*T3jtr^X zZs3}+ifhKIy(Rfref3Taj?!3F!c44X$Z~Ok*E5^eFg!BGe&FE=B+W#UD$Qg|Q(lJp zI_2K2L0iS|8u69&7#8Yt2^w&&+APwza+uF^(~#ua?@6xbw@Q@%R;mVY-S~USS^7K4 z_5DF|U0+D1^+xcMCVn+!92W~h+p!=D;pTAPSb8I+;&Tg0XOjab{vsv(o8SDKg{|Ah z0zLIZ@RMGhFpINYC*s6_%%YUBWXjR?ga_N z1;g(Jc}B^m>wLeuB5$6&3~;d_|CEEf+nh(#5kFVSACqZVE}KXX+Re*3mdOOv?1`DYaUnoibNs05Hq%{1$ER~f!IYNj2>$>th8NpOAIDiOH-?(Ei zNTNK>E2*ls5OaBZW|qswdV_((^muX(`3DdfEbf#)b+Wv)qQ{s_b8$%w&+aY=Q%cIn z7X~5Vv0W<_-D(+7xA{V&kvvwcqy75Zkjnt%n6jXLeNcouCN4Tiz7BP*yvQ?_VPa6@ z&I4hF^tzn93q)jrU}K?gSHkV90s`(~|8kT1iae~ZXN1n`e`K(w zsZp-Wg~zs2pihP96Dk1oE_hos-BP zubLSoFjye(Sm03b=M{vGWA?dC{%heid6P8M?-Idue#s-{j(;z%84M_lQ0eiD3ZC6a znG!O5<`))2D7jGIyWJy}EJz`-h9QWAwW7nmENz&2-q@gSiH5RZ^-H^>4e*_lW%5h3 z3;ej-v>YJ41y+kh#*bJO5E{yow!s@H+6=LqL6A31`k%VlT{veUxB;oWp}Ml%B)1VJT4XUb$*~^nNW4acgEWMgGJRSug^)P zba^J-oE4B&CuGl`KR2R`8wSJ)62)sACrywDwg&;3r%}@3@*7Aokr4PTrnsIEWP?i`|?m;klor^{E(B$ zekwD(m7t7{3d#&!z*`NXWi&NIxVsDQlZ8j1ozXCoL#! zl818yB}3y9siARcLtt_rq2mhqdL2m;cQHBnQbIF_#krwFviLZ6e5PdiH;4yd{6=DJ4xN&)94!QyO3!HdBoRC4rYa@vjMnC)yf7@KnFmUozqOEb<;icQJo}53 z@qK1OV5)W^js`jjNEp7ckY#+9Ax&5_-NLwcve$l%Ei}v!Ynk(~Dq>w^f*+P;$g(fy zk?s&KJMc4O(7@z3tjvU&!?HvfQD%Xd94xn#m6K-9qtkRtFa(#*lY074P+ts;e4-y@ z-0PnEdfo2_p4|sYJRby#{6Ul%7~zIO{x1rutAo{$SL|4s>+A8a4}%pFbrwR1V)5Tp z(z0v>29m`xw3OvV0`f%r$Ms-tZr<|4K!ChDe4mcl+%c3SLhvApwlwc0>c}u0@J4NF zdfF_x!H*jPqWa33XqW(6r}-xT$VhW@!3Gi^QV#qEHw1%$~1khhqww($(^@NrrURl$9PUt&6NeoL^f!XN%(u zaaIytSsIlJF`)OwPHjb`04ahTL6EU3liUr1?`V+jg2BEk@x4IiX^0R8_902QA~3=4 z^Upswzh$>9e`;_mGgeoKB!h_Huc(7TEi1~*lo)#D08sAK0g3Y&;80KL34k9$*0?8D zYu+w!JqS4a9D^vO$$Ay3U4d1XLUP*O)2 zwJ_Q5^1LO5eBzE_Wuc^$g+j2%(RY}%YyCq;XwUAu%xY_4;PB!8`Lr)vh(dJ&lm7@$ zSBGl`U+(CHpkHlbram8$Oc><&#LS3K6EsnDG3}FN(IiLO{`Es|CDmD8dufNXxg_PK5h>Yff`2tv4PrXm zVkt}pJO-h-?0^uvWjXD$?AAp(2CR!|!VLBjJ15E{zQfuASz=`fW>WhTM8MlhVuCX5=3Dh@MWvt7PZ(j96q`c1G z(sz5{gqd^54`kV6E;C3#el8Nsz@g;FC;u_9!Qw|gC~p`)g==-bx=f| z^F3SiR~_=9vQA`-4kfs_ol!m?1H#kMUWfzE+l_|0dK;95`-V2ncE{HoKW5%)Xni4v z5uYmXVhHk)*3yZ{7&va<(U{ZQkHDe5I7*bxBlwC0()`xb?P1M)+OaX{!_mmFDATCe zLcEPYCZ~KdprTmJq`u9p&DoC6l`vy%PF4$Sx?(F2+OWw;v%6^U+k`aZ+sr=4H&>*x zJR#-c(`4nqZ_Qo9EX{+s{IN3>4ZLUifeA-FzC zkB*+>M+Nt!^M!0X@y3stPC0$A{lGKvd!C(r>K#`M@&;jMKtO&kTAlN_5J7xWAux~^ zUX|m^%&Sjx$xFS?q`Zx2DZzrkP@eBo2WJWDkG4*XUk1*_`J&|o*F)-!dL{9imq7#r zBFY2*Wy*&>@v;E_b1b%$1MW4%pbmprzGb4PbwcJUfh^#=%mBDqWrVkB2ep%m909IpB+oGR5J4*W$M4L3QiT<3|ZUXNitciC*x6_VYhcR5wVb&@Z{p&!wvO z_rbSW2{enMFk#Rv&6E+u*(}XTd7+q8X$9h}rCi>W3ck(rFGA!DCIZerlFG`2Sd8Z# ze58b2A~;#bvJ6>fVG@?UhB%>oQT`A)(qSFJUeZLT3Rz~d7gl8mGX&~Wwk)Rsse~j$ zmMJ4hCDti)iI*kYgMhyA1gJ->!;oc2GZtsJ5WWlC2XeG`q94{q>XW+XdHr5#@LSFa zgd(ioNM}!e@X;oJboy=$zi2>KeNhQpE?Y@rz7Uqnrfl&CbWmORG8=)x$~?a)>q*G3 z^9Y6FPNv(ONAwYo~2;~6s;F!6D} zK@Uq>6U8Fmm^b$c-aue!hwOeVxJFnmyG>fLTC2R()Ya^(H@CJ}k#WuHjJE>3-B{Op zqpl)8El}mOR|dHj=9mL62TAi}LtEvIMV5dJx=r^ZAA-YsbGCC&{%IVlxwsBaa#)?mpmm~gqjC}G$X`2 zD+DgB*eZb#=k4votx2B}Y{_jV1QLR-`x{#|aMwKp(u`|{rbL+spw09E_=tP#j|1RWyEHEmgDH9xG3yyio0(`5NDIALPT`B)UOnnIRIyq3r6 z81XhJE4Ri%Fqs@j*>RjsnuOBx&T&6@J)!t~0ECqp@=I)Hh%eVU2r!S?ezhb|O9%P~Ws!bTR9MFj?1^uQ#w!k-@TzoMHqZWFg!1gx(Lqy9u-25R%-| z+$bHbItna=Ne?_*NfjuhISn&^t3u`Bu`n+wVV)^2%GB(<%+4FH)L)tov`GKeGaI z3t5I7F~QF*%kHyEgThMeL=1!uov^oS@9ot{F@O#F_-0 zFz;9Pek>5R;1QrkN}6r4lg~A=oc3MGIY-@GV_hT(W_v6P@#fvdRS(@OhO3 z$UT$(Aot`$t9eIDl7A++;fjGTH-yTwKopOTo%OAWl++g<=xrQX>T}i1p)pn-WD0;EUzqUJ+dmH${b{0k9};6-H7uK z>Yqhx2rEdPZ`<46Fv#=oLrc~+ZG@R+v}+QhSj|W4=ywxly(t#vj@D*d-nyrwMFqRg zLNG&ojYRCI8U{gAXWz7kc7s(|9m{mlTN@9twuz<;$l4K>z=GVM5DzZMWT>E0oUO!GS`gC7a z!p6B}nOE>w8X-tDB(}j?=0qS>z6m(y9SOgIEJ2jqXBo>fkrEsew5AlTrV>QMn9V_$RdW0A=xsP*@2`9^@zw~;@z(M!q9Ec&$ z<%1=BmKiYNVgj+^`7aA71M-7~6`xY9iVzqqG?WG9U`r;eW}=)~SOU^qTwIW%l9=-t zF@xuXXe}-!#9m1v^-sMbDj@}#L9Wba*WwL_Ww04k?d#dt%_Tv9WH}Weg(dd2h=R zmm82{BD)~7YSGP9-;(nQa^1q7YA%P676#Z?&{pOI&;#^m|y2^pU%%Iezro*Z)e&<@)y z%|pSLxdYb>B4@N{Vfw4U&`G@od~ygomrN9_Y%D5K9+&dstB}@a^!VkS0O(3I4LSrY zjcLm=KFbg$6f5M2#^aV{|NUNhAu28cvq?1J~#G$Q0+` zLV_y>&+QZaAkmi%fiyO#yt`$wu#-<8JcK$3gUz+|H6t$O%RJA*66eeHj%UUaxwAT< z4yur~K(ctw(9X#dZ5d)nTW4^`KF2Q$u&QHa4-@C;i=Aw0IV8;hV;2@V^V??Bvj~(nCNed7eqqRA&WVucHlr(p?Hc6vC0IzFM zHGwqy=q@NpR)sP$qWk!{P0cOJ%i#%m^!$xHeLXG{Gpwlg=~+Gxhmya#7Rk0;lU(~9 z$+TXVOuk1eph*i9MWtm+Iq!5tTDoRs)`U{gykVVK4WZ5V9J$drPERVc)1aycfXMW4|Jne_jkuU%ZlcBIAV^Jo291D~{{J2)c z(Lq`AYIm<|2K7RxM>?oJfY-Zsq;#Itxm%DS#(ee;lDSo{o+0SA z@GK0nsDF3G@bGvC{r)0@GOnqqlS09lL2fen=lD*UXtT2pNVmKqWsu5by4|?O=YzoT zyo4jO=nDFLJSX+RmvEF{2_Y`c6gJ)APp-sgQ3msxLo#S2XBWLmqJL$ zrNw30QVxmKGH^$HseYFM;>ROTwBNeAdfne0e0?a6^lL(M;K$t6-YkQ?9WvP0A>AF# z7CD3VwY6Qc#DluLGD7vmN|+e9vbrvBrix0KN9DoeVR`m)OeSaMBWd0Xt>jE?n`D{> zl{nv&458*4yL9+nuU{e&bV4Y43Yw(H5`Sj1Hd6uHt5R8;mCEwC66Pt@kP9N_mXTD> zB>}>ZVt2xf{G~0+9u33EGUw76LXx}#3^Kcax%hYfJ-;(QJ0(p-MR1ZA@%})OQGQsN z@&CqZ3yEg%0g-tZai-4Gi4GLYGIdWh6i6|o&5z@TLE<sV8_?0$Ty|lEn8hNJuP(D~4@}fH57BV?UgS3c~ z0dI&ghVZ6{c8uP^V2Ir8%Eqn?qpt#C4*mYe;>dKn)~w708BoG}<4Ug#^>;~IGm8&o zWkW}HMwk=j$a9C3Sb{V|+goKRE-cHd(MkFF$*`pt!;>;QzbxBP$lr!`KvLgnahbC% zHzb?y)7~o|=q^2#S@WGVC(yDEAyf1iq2_SSSXa`#HWkS8*0TQO@|3fa<#Z#!;(&D# zvi#$ZKkm3;&{+b`b<6UHz&rngNL<9xK^-tr4l6CzT1Y6?dOB$U(It5&>B=w-*DuHc zbpuIb0w7jow)m@4|4yQj4LVn@%WwJJ-fO2nLnI&=JOj_gAc^P1!c0u*%W7SApik&< zAdUHBcHs+P0Pnc267+5$OXS&7MputAyF=Xop{f`XE2lD+G#mjpgyYxdKHTA26;`-@GX*YFl1e4sKNlECyQs zQT6amC(F2E;0qrNBOl+6kF4zxQYQcPcC^T?tG#mX#-I!hbeTUhiZ!gb;;%3v72$Vg zY1W6&Rb@59+cGn^D9>Jx%a4y4Cn=XBeB}LPq0VLaI%U%N!LRf9HVZ1 z5XAWq0VmCnWCl%-A3wHzET5dixoJ7r57akAf-TSEt{4zzNInFD`(9>HbrvY3r7_79lw;FNA zH6-2Es1u%rJVE%E+%;p?V@V$zi#_6Eg7(VW1T4!8`0!yyeoJN5(fYk7Yi*JnLp}1@?LoPFeL(uU+oVw+4xPvdfY{3(HjW1* z@jE67lBE@GwByrr^615geE0B$eE-WUd8(v&T8T7P>WBon8p+gmC}|#$Y-5kbYvx$R ztjHiOCP0P3T{8fy0B$ZzWxXgYY$98WcI=`9c|u`&g2d7>V?EqUmffb zD`z?u$hU{7a}vfYUK`~`d=Rh#Kt?_41eROeUMO>vWEg-4E8u>hew;9KJ{=|l87BAP z!_J!qqNJoJ`f+|*7SiB8T*vRtIdtAU7taS_=6R8+PXW9^bYE5mGZ2`@WD*?Zdm522{i^29#%jE^G&0$dPCyj2Kq?Jfrb zVV;xescBizve?`pelap0zSmZ!br`~C`hqPiCgQ&9`?Z&o0CGeaL)whVyX6=-I5M%(!Ln{XQO@xa}NzLtJ{R=0!|+}hr<1xo<+jXu&H)9?9Yh0fMC zCXW`RruumF^?PXp8dD=yW+lnDulLL6cdjUD?zeDrOaeqi@hREc$%Qa;S+h!TWMyqb z#wLsM%d=7W_UGsF?SmKcwosPtv+U#uiz2V$u_951C|M^*E|V^o?*hLe zIUvT|&qLKY5yN_AjWy!EL0#h7fV%^v*;fFhljb|h)yeCAuy&Hjgv$k%2=3d)3Vats>qV{TCbLw&g`6p@lB zGjC_MT()**tR6?mG8V@;s{ti_$pWkTsXkz3I9}PKGrawiH{Y67RqL8be#jr4EyVFS zUgMqzuo@bJh2q@24P;m^&n(+1HEn0U#8DHdimLb+D&{BK@b5YdpvoFF`J9 zYlFVxjTmjYKumAdVaI{oe^n&=M*<4OV%yb(P6y$|GR!jA>zXm#E_PnQ=_WKp%a$Vi z#VUa%I{XG-#o$i{p(Y{+iHRiMC_Y(`f1+M2PfBHRL@I03HlZ)LW9WB$Zx#^BDOFbH zvZ2D1tC4JNlVlq@G<8b`^37r>X8=eKL=WbZn-D*iNeLl`rf^J78M0cGj*N* z?PZ4#4qWzEln_I{cpZ)vm+!qyDdUp%2Uq~H5<+xHXVEq`HaE_baZy;;I)2722Kmq4ulAvK-)#`NVIFnkz4+0uPj*N(M=fiU>#?B7DWHJ zL3^Uz(WenYk2g2CBlzH-vHebpoN{o zVV?#H8RqpI`(%VBK<0>?!4{!kT3MIT@mYEJbVUC1$7k~AAD)_D^Xsu`S=I&~p}=oh ziEr>)*CHXyC~$lMX}}P5?#;7sJmUR9xiSEPjAF$_(P7nvm{Q(u z@jVPKA8hGFA>1fh2(w$9T#h{L2hQX7d{3v#L`0qm^1w53?4aLXW?&@YH7A`99WhqO zn%c0K2X%y=2kbN8z{4)sq$PHSpwB(L1m-jHa*x@_)q2=_7Iy)DcR9IbiOBLRZ!{*l4jtFnvRF1w8xR!Ajrzli1j(X48H9Kl zbIxJ)>2>7w!?oB?|MsBYa~|jW?{Eo$z++X$x=iT1%eqL(Q9-#twD1eYVrj%nJ2j4* zI?{hu_NxD>3#^s22V7XNbP?^~u=+brV30vKple1)-pI7-2cEZ7qEp(H1D=!T!y?z; z*Jl$@+uDLV#$`azyUQ{;iQXLxdRNIa^=7cLV9Ok(DsxHc>+h4HBoa(RGN0fqVC_}6 z_`p+lOxPqZTN|nmloL>QY0$=NYwNT=>#a`ldp=6Pa-KnZ`qV7Ud=RaIRY~a|UZKFFOM2X1yFi-P)|EIznw5y??`SAo5BH3k znu{&?9}1#dlowt}rTA1TO9^2PwgLUGWO>IWBY_HzRJPGFT0z=D;gZqVBiW{8^56v} z%zWnw@H>5a{8Rlur@ zSJq`|dCe@&6d>mjX~V9KiTYDPr7Y#uDJd&iF3&xY%JNw7VFoBWgytZ^jD@+X)+P*Q z^SzQS4BGZ0TbR?}cPI^#zpi&;bQA^2?;Yv;zUvuGZjV{nu@_G^*S*WC-gj_(F zgn0$R9NaA+FtmYmdFwCiKgN#Qx*BtNU=r8K`!f5RCsux(G_s6!8G;{tUunCX$2R!A z;(9Qs1d)!mOFP`N@V7oGFxaFV@Lk4b4XZo#XN1%G(lDqbq@E2N@ckU<-9#TanEqR3ZQ11_1dp8PxNsKb{=|#US7!x7!aV%&gAXYW>kg0dpc27el)> zpXHaY%pHU1C#$M&tdB*LzbCCLEbUidON;)b;zvCM8`Ppy8mdx3T#2n3WJ#*BN2X z5t^=933KD+A$Rb1f7Y`{cu4L(>_*>sk?SgR-SA zDcfMlT(;z-nKI^k(n0V#bn^Btnc$jEnCW0}y+|*A&a3ImM4~NWNK>K^vwA9gpp_BL2HZEL>&hC z$Y~#fH5otkp`k0b+9W>Am!+Q3OIT&GE)#Z>GGU-YWQkA?$bJYV2hr;4?66nalml;A z&VyTu*9H0&eZVVujA{&uwk;pw9NudCfQYCrSeS|ManbcKdhmS-GsF>@J}-565U>`r zv^9e|xB+=%fD2h39)2yODz}6S#088zx_+T1`HXzC4_PL!$S!2rA}#4>boO!MSO_zq z(bXcTSQ8rRR9KZftI!hSgBZ*xPV;Xzq5^3NZUtWHC|C**#T#5S@M+$ZB~^Zwlt8n* z_J#@yzpGJYN5i-8CloJVkj;jW7Qt20(o5La)_{5&1#ZRl#2n8gO=osjmC6yf_ zG4X)@hSH*V)Ye&C>7L#m>ulY+d>MdDQ!fw>^zGQ230w5R+mP22eKBq__%0Js;L4Rj z8z3^kIcgg_Y1nhB98rh3X7E-6;!IuuR!1|yXgxRo zbGykhmS)}@oJXK<*HnM-#shZ?Ce4qGj>w3TW#b2vQ_2q(O@^&sMd#DMC;4S?L}L$R zxmEhL{a#bDjQkQOpMg1La@;sJ!VGvoX4&Q&>!evncP)hm+pkv=4Z*dJPBU$<_B=Dj z@gOhZBhd0NR}TD|m$Xn97FTRp?fJ!JSzg8B?6IDcA1LsNK8XT4E7&T1i^EcxeWZjr z_%CxT!$1SFY{COU+(Q!e`%E$^FjJG4OnsN+ng%5cVa|8!F$nYNmQgwm z-$xd?CtH5&*GuED=kfDNT$B8fc9fUq3DQiuES>Oaf%>3coR~qH=`iRhQM8orL3MUi z@VlURL%jj&$|w5Wy?fUdD#3CQ>+fx#uS4Bzn&qFgwZ(uDBE}i|N81Dj652+!mR})X zu!skA=#=MS?e${-sUm_6uX4>or6ePCx`8CxvnlX(B~~kzxc-4Y>Fe#a!O~@UbIAZ6 z{feHY9L&1Byt|@qy8Izk7D{e#KnAZ2m>=_bdX=xOe5bu4bLaw(_JKNgU7$5=)yrpi z2w@E&%~+dRxZ*=~#aZIL2(u0f7?9c`Lt2L{I^%?yUXQZkddHuBeO;a@=vNYR*+}6n z0s7n*H!}Ggdn3amN|tqii#rB`JoB?xUC*^3%Py~eUHG0`mU$y`?b=ltx*A-n&@m^a zUyhY91FJYjI`y^YqEX1#D{*d=CMD0!y5%$O8=fKjP_|3E1rKyDC}c*I>)Jq8@o8R{ zg{4(lSYFk}qG@?e6D}M0IR}D>vco;(;zLVdWm3vYmP<1~O9gj~Rbnu&p$}9e=xCY7 zPYOpACbhcNvVb%ba;3Ile#^P0p+K04lA$E}EI@r8w}qMW-_wf{wv0 zDSi&W;XF?V!SB!cPP}O3Y`G=`j90#F{T>lV1LaDhKIj;EwM?f0`Judlm;YgPbP)Ir z*Y-C9$RIv{tmFq-#=^`J*vQGdWb9J|Wk+H{H+8eJvZ~u8bR2b~)qyJ>Bo)166S1)P zX-C%J7QYW@@9zTbZgq7IO zlITGrBVp1b5eKl&QX>?Dmj!wWJ=m=Shbu~$i9wC;=ea6}2-mXKDf$4nAlk0! z0G^jTagzRL9u;zCzVj+~X+3|DKwTbAm_z>qXjAkx3{0C?&OGUNAgh}?pvC=xE#caZ zEAbp}r%kIP^fazfKDfb>Y^zL8PZ=p5AD@&l79vsE92=joC@y?&10nq_Z>Pwg>vwX9 zKB0|+y4pG;%S=!;vOL71Qe7s?Ct1(OPM96;qQPXqwwAnfv=*eZtx4Kj3Q}m~RW&5Z z{Z4re8!XQVI-gAhR1iE=9TNgsA#hO%^GtC`re}48Qe2ec;jigd0lZY6fKc3e4-y=B6AkFwPv#d76nfAar#|7$>j(Tox-X^yZvlVgy zNesk&x2>{;9CvqjYDXJZm&7WE9=Z&mEYPjvS_Y$|yxyKvBC>3R$?FfWg-8+&1EM^r zgNLrpPCItq05Rm*A!J6xR+f!02YJ(a<-dOK#x|-N{Y$$xqlL;HR%e%iivsGBKItIB zOdaYewojy!8f{mEb7TvTB0L)d+9hqHOQu6Lu|1BY*CL{YO~%yEK}Rb=*1?P~N6+&z zaKps{c?{87G>sABa8kdUk$II>>XUf}TlBq2e$x8ETyFHg&6h)Fb+9|A?H00p1+v`L zZG)qe?qg4kFat8p>Pll`zRt029V5B4F;NkDfFv5a;@rxE2`>rKft>9)R2kDtx!W$N!F z2=igsOJGAoYqQz#H*emwSMHEzj&lyyGDgM_G(dwr?3qkPlka`&_v7Ax2F&%bRI)wp zJYHr5qE%(G6D*l4M$o7q%9yhJ5JF2Q#5GCO6XXp!V4`1oML#;+h+l(pr*0_6K$x|& zv<@%vWmecsc0JGK9U_BXryVpm6^^}gqaNw3r<5GBsvoP`(P={%(2pKM4dCO76|S$Z z$1GF5#2eP6p@VTHrQ8mm=8-7$!1Zfe$Y=vC4&Xah#vQcjw5 zdZWgjwr2 z#G=ON7|12YM)Jo#gT!?mKrSvVCd;AE?IbL@>CYdNik6D0V?`s$vk>K(nUIt);}V1w znJve727Hv!={zSy8Trg;y}90iEs=i`sIIQD!4Ki$8022No{;74E{ni(8g+Z3gxNvn zL!8H&ggiG$M{ARGb+kx#N2_j|rMTF5(DKgAxNPTLS^iLN=kN59{b;^vaL#OX++91 z52QTxy_9DkOJ#XNL`k&4TrpHA&>nAr&pI$DD={R5AEWW=ykzrzl2x({VI~fvvC|~XT$g(~d3DP&WSLj)pMCb35hN_l5LuKGoxfSiv;psSF1wxnK}esIzAp*5 zr2|Vd`^TBj%MRqiJB{#~kJtZU!3>Zt%frgm>xgSnKcQ0%69{?BfGY-W7$jnN;@=wU z=`e({q)uovBqK1Yn>o%aax^Ms=xu_IosNz2W(BU}wCExabi($ES4rZucGx@<_YKy` zAOl3kpdGf`M4>(z>>sd6QWuR#9Rzd^X+04ggZ@8E09=!eb(YK4dRF-Y$Q$yBYbbuM_EsaMe=ibT_w6Oj42md^ z@RlB~L|Y4kLf-t)hhbHoFX9R@W52UB6A1Hhrf_YxfiyFRfMBHj z{f#d=oD4bC|K!wIOxSyS3m3$NipkfI<14D4&9ba=i~KUNlflAi;8X~+0|n~-%`Huh z(%IfDJ)KIJb=$54y0r=GbAwG7H0!hZJqO?CrX=bHVe4w^s_i;}s2S#_F}G+$d2+fa z)4D&WLS;VBiNEub`9AAbNi<>WAls}k$nUqd%gQrD2TCn@1v-vbf$VcF9UWIn>r!4G zmGblhDNTGQrCD4tMztqcvhR)P?zm#?1C&G(9Rn+J7I%#1A<4Gi351y#%+>Y!{n;o( z6xwMKX0GW(8K5N7Wcl;YKi?rnKBMZb?Hd)RrVGAh`EeR94DE(jG#CvdpdJEXUGe6!ZOTs zgp{^d2N4eNNz7`e4tZfR63f>@*aCt3ctD)OYIaE|IVB3b;zc~tazWc`YA)CUB?J9^ zwq-)%VX|{kfH8=AfW!pf&~e+RY^W=W8ggZ2k_=vYy1Q+`7A8(%Z9eY<2cD07;+kQu z29PivL~pAc8eygygG$i6CZsue!w0ddt+`kWnRpv}n=mgL;UpiF2gXG9y-lJQ(UZ7K zuuS;Ef|6G4YZvB~w6a|NF()j=;Xe9#aly#35oFcV#7{;h(GffsdY5N(ea-U+H(UnT zq53Q-&tWi7ul*)O8J)~qKS=V`p&^SEZqYCrPCiU!8mCH_0hLMyDGVn6HRT&rVL_4` zj4(r-yE|K?ud7x1y4$6{TMJ4*ceXc~6}m;w!F?ldmgs7|7E5w7c?TicG>h`u+J=Ro zgDlT2tf-JJ7?GZsRzj_$dS(tcjuj)?ORK8vwK9pwv7w_@Ca&1XN3V%uq4ps9$EQ&D zTt{zG*;oqkmS-MHY4Y3Px4igTM*|D01+f@YXecrWbNJa?;6WkPgq%}ksv0HBa@cLR z0%2~sE}8l^z0BG9W71GgiZG{t=Y)vH>DTtjTo58G%a9{T5@ZQw>aXhfjax9CG;$%i&ac5S?t|hco%fFEynu2GokDokNZnvDgETWBaRu!4<8^QlTt4^> zb?+`Z_%0(C5C`h#UDt^SpqOlqiRw`5g!aR0a>`l1wZ!XkKAZocl4K_SHPo}HM6Fb5 z`~29lraqAgbPDbm=$NJD6>EQ78rg7HHGG%DE8P%p80#`C!(9eoSzKCLG^;YM7?cM@ z$*qx@jJwGw(bE1GD}PUSh!R3MFiB235)19>?S$=lNVHc6Q5W!+H-A|rY534GnT@=$ zP>zceVQNMB0fVIAnh_>o!#yra`zGJ}5oRXbF|n3@6ZsCv*x;1*h|30j80`|52M9KU z*^LuOTo)O$>+5~|UN$LE`#;yW4xTrif=p`Cy5cjs9zSgA3%O(!PFq-LaL^Kq>$J7A zD9h=GY&~_tydQAEsH=lK*BfE(RkA$L(;s@Qbf+tp_78y(4{!SAG#@6 zp_^0*j4bc>00<&v zIk;nFSPomsvH31{+>>0}9my01Bvaj}cRxENL8Cco!c3#&KCbAwE`-R*GL~hCk-K4d zLq(yw)fa*rEM{2Cc70{j4SPTMaX*J=;Td=q6dqfy!F^E#k(3=Bl$&=9PMDD;_9Y+3FMqmC7})BKTKPL zq!RWE0>d>v6x1nlU{=-fakDP-Dwx;wkOy2ts7=n})h^a5^V!uwQg3g!6bemt{4xN2 zML96xaa47zErY$XYVsc121F5(l9B3~Dzh*%*^wB`xGtch)>m2YVATdbwnzvD1U+`9 zNuL9sWr$yJ!w8n;ViDI%CXB5F3$qGZ2rsKOt}^E=NP%VI(0DD z*Ju9q_7+43b}X)g-uC|bv~ey7Goa!j&ctjc933tjOcHEsR)XA`w|&TRXIry$D|zlQ z3v`UJ6I?U14VPPx+GW&1tdt>z<*<(gFo-5;6}j8&i}1j!caHzdJNLc1XMRvSctj$I&1$I0o2WYgqdU1 zWoUnI%P+stKYE;|r?Q_7b?*sIlm2`>3AqaGjC$C06AAL>B-zjPXSQcm&|jkuIunaB zdO5rW>NC=eVS`16s7LaAR>LRC8C1G$h)zj)~wa-O4i$2nv}dZNJCu+ z)AG?EGbJTqD-#wCqdfbI66Oa|ntvj~;v^eNmT|8@+vA2|ME8LE>UkB2HP&T@bh$d4 z=$GsKTylMXBUL@WQ^I^*r7=&>5q@(67)mLB1mtTIlvoOYC*NWH$vO;}OFVxSYM~`fUC`dGQk|qUv zflOHks)_nQ-f+v|%>(s;j36&`suAx8UXepqpFDjgPaZ$9$!3sPCT5uhOgm516R1|5 z+tSi3*HrdD|Lnfpx_!$g0e&b5X-6E_=PzE!vu7{tITq&^gCBL$F(VBaJPKO3SgY>e zzo+f+mc?Gir}v@**>>Ia?Add9{N$OolMyA%#l#XBtaqMQ$|R@#9c`dd2ksU@!uq!m zqKvxYnn%;ZrvqvcA9(8t%L^=Wz4 z#x{HoLcx~xOiDA4f-A-xq2s1PGz^cm%p^bC9?+<*02l;phTr6raMpK7 zw(YhO<=;xK=MPfVaZjY7^WbZoB2J1hb1v6#B82kbbq-cT{FRSNmL2|_kmhf{{noa8 z#-hpnAkCy*C3P@(HlB;;V;`$Bq?rkaUw{3zJsZynNqg6|B0}9jkbn8*7bDFN9z4*_ zW5fnDzzH*HFDQQ>ym(#EaUvrSW(HPR9`S3Bct22{So>b-VCLD==kn^+Ynhswu~+*@ zwdu{It?JoI&>GDr@iQf^_wL=1uI_FlbngqI9@%~MeovLGztk;pUDsFF?SANT?g?pc z(E9G|Y?tfTuW9?cZG$7;FkA*8*H|4{q~zK2XY%~{3nf^S=DJ|{*LK13*I50m3KXat zOSaG70RKLGbH3n@$uqj{xA?qC{|`Jbydm~}0bkc(K)E8fl{6D!fwv21^;-XZa4=zB z)^>%#k2wILFCx*_koQpMi2=duQj2J(dXED;BC>nc@C?C zTL7&y-Vkwswm396XoDKsXm?MS>S*2sqd(4`zc|i~OU6;KD-@wZPykpCNLY!@7aFpw zqY*5`xOJFoM{7YkTJq-7VQwClf**8Sb2ukN>kd%f$O;1( zEX|#ro#x+q5jxTH1}|^Q7pwC6dRYCBiCI{?FlgvWR`z`6e99RgTC9J(A`ceO_v;vG zo4lgOXO{$7Mn0Id=5oL@p%)5;yy}5&BkIImrtZCsUu00G$p8F&(FT(tl-!j0_TIn80;TljfHw8R$`O&ydEjwZD3tEwaWol#@kWXb7$u zM9e@257HIq1w1!(w4V<%&khF)=P7MavP?U&NHn||Z*7&E{**b3<6hyE;)i?++D*l8&I(=cTedCgr(j zQl9xqN|Q>KXCByUezG>JoybOL*ygVcQ6?QED2P`e%Vx1g5!U2wML(P5*ZGx_<-3x} z_e-Yg{P<&{+>Vnl)6lpkzh|2!%e-cHpXKxfzoUX@L78$*?n8%!qGs!)nd|NCg!Y4f z&vp2n{~mCCo(*d!#Q8FG;3o;n4jHnQqf~y_I$;K09|yHn%AI-u$ej7iDN$xXMTjCk zN5cGJ2xZSiYX&u8QdSsbVgyiVGoWrLezq){!9WqRjQrygK%E>F)FaUmrc?$XiWB2u zp%ScEz}qf~I;8`))$9faZQ>9X=MU5A=L_VIK?2KxLG=WWuxm znlL9T{iX6p!s1L@!sUsT?|OQB%LzVRl$$ScQaF6^t}lfe;eS^4)c{ zq#7kJHAbr0=Q!v1WWo0azQrtYy<=5=B;{!(%Tqrqaeg9|#S#5pi8SXSFj#^~hmmEJ z0t&C9zk!HzUQL6=ScW9$y1rJ@{CQXgyS5pTG?Ea)1R=5rCKoz=Av|uv%(n zy3aC}WymtG+&`qzalTubNhl*H%}g@mz8vE`Plq9W4$o^NZM_D0;MsXbw=|!31%8%r z!i)?dKWvYKFf*uP%V+8!;{8FHqgRn{2s80mmzP(AoEu3C?ZCGrWF0a~s5c@Q(Agga z)FB=3oDxGKW0-Y$YTE8g9lIQabHfUs5C}wHzdl4En(LvA8!+0FIFt)Eb&a9cA(GAKl-*1l?97)_{#GF2_wHA z8=NJh?af9ZEM$TnIL~rG-Oz^iCCrw;Fi9QI{u*^K(5<8ICNS~htJ_*8nny?02 zTDRq_%SwtX^G~HT^FWF6PZnnx@?2S+R_R&Qb5+nG$V!x%$!h!7toOo?L6)&BYvM*# zb&_f9ksN-@U0*3-{!+>Eb?qTqWm~ez#E5l!eS^aALBm-n2paWq5oVMK*F$MIS;qg= z$ubsZUbBDf2$jyk84I(!WJJRJ;h@|hE?9o47c8H+XgFcEdQs7)3alP76?+3nr;1e! z|M8>9KGs4A1k3EAOU9Kn&(F;piT3(uOA7jdg-Sv!SGI-x(e88JK^bDj$3=;SN+<`c z%jhYjoV@3>d;w*K{CncJp&q;(Ft1!3kUvY72miE-Q1|G8-3izr4A8=I*=z}?cUr5& zeF(_gL4-Nzx$x$aE&j~7TwnmWa%I3svy)b29`~nUT|eH0yAz2?dJKH+KH8QWczdLS zValAzm_)8&l|Nj62-IM)(UW!xQDy~47LY>_c>_h=)aqdOJoSl@Fdql3)v5rLHl?yY zFXiPoQl5Vve3e<|dRmF{+*4b*&*CfVdCHLWzm9H6s@V8^Anf`oNbZJV5~XAivfO@K zvfW=BSul+~dM=5$0WGA11S;-7p}_OsIoA ze=J!BC?pyy&&NJW*IhH5@B;4R=^zB<7S83_`7PI=TsX!(u!NB!Y2F`{*>MqO${T_l z3G?xRvZv#tL$o-)tJ*ngdqK{<-1Q{=6WT8pPC7<9T?jK<2;RFSpZcCF&Z`b#`R6xg zU1n7?>X#5=4&;FL#4BRlF<9BJy{+ARBQFDJ4_NY<;D=iZx|R0fItBf>(-xA?ZUi7< z`NM*THP2FV{K6!E=ER+cK7>5F?qtg@GKp;9GE|jI+%xNf8yx98%LDD?Ai}(xKL~T^ zLwHNp-PI+1D(etui-2;fbz5WQNnMbz5>wvDA%kh!?xyMl^Fzm7DdY%M%tyxjgqsDlIS^hd z-dr%SE~C))>);dNpksk7mzm&)8-^ZZ5t4kjWLs}b4zf&YW0GH&l%+p6>o@M1+~VxN;`q{)f#uV5`639|d}nF$Y4Q;=+9 zpRM4RGdBz-`FTW)T8lS5u4MVy>oIvTJT6l+^LC8M4nzZCDe|*W4j)UHQ5@cw*r#)a z9N)cr*TRB1Sw0TS@?Ox`c}6F(5H!d#)@Gi^!F@d)1nA z=-7`FkuaZsSct1^#z-@S8OtxO8OS+h@9l$Xpp_8rthT1srahK&&0u zyc^m=ARUE#A(8cNON3QxYipPG);4KVVr71(T0R#l>2ov5jD+g}7YpaMf`}{JK8N`1p|ol0B@UsItfc? zhqtvsFZcj2YkC?vCR;o|t{JpjboN>IiIFhBCo0=Ig5O*cTcvMB$?&`q<+;a3kV_C{ zCifMeNts1R*5{r+x$fUc zmAPRkS#Idk?`uu)=9gCF#p`i-@btC37@3r%m38fi>ZG$>$w8}*$n(c%eSIGs7h$HO z;5=sK-nemNC!TSCf4_COCzUszkx?#No`uE^X~v>MqvzSuO5q>`rLaq?`5o6l0kTgy z(7_pb&}}5myNHDO{KLzij*n%H7Z;XfNjrGj3)qo=-KQ$-e3fws3wp|YAC>6tx1b31 z$2F&CW`b4q&6v#01*@uEGfAAs7BYl&d1z?RLdg}he&3~ME();DL7?zk#?nriSV%qX zYJ$!P6XEdV#jli!V62>GVfFe5qo`!LU5S+vPY9=x&t(6iq>gs-p!<+#CH^g~%|@*7 zjfIezUd4w#kq74RP$o7Z(g<^dG&MKd;w>y#c97mUOQ5fgPMEPUH`rhTy~f)W`mFN+ z%9b)GS^cQarhcd=^g8bX!lE;QFtZpEE?X!H3m2^Q8u~=?b9U`F66T{qg|f1>EalZH zsVplQUU+4G$>rGx!Kyq5QGTIBc~mNEMeW@;v|0mEh9HM17zYvMG*n0+*gm;Wk;&Ca zw!U4m%~un$jL-5HVcBaICQ-7CY%Q&B$msZtJbX4RzdRe2so8m{(T=FUr%i_XyKGr; z7GSYQIAwecVMZa4IM*#nCKL4;q3n0weHWua=Wl1~xFsP*LQ*9$@*KBS1VkOK?N^+Sz zw4Y^+YhYc*n#v*_EQd|~2dnCCy>m_Kw^d0LE?ba9>KQ_Q8QK!0kBODUogN>X&~liv zC88mRWDos;tdp>~LWUvBLszcY7N2fhGO$20h+tqrxg-A*b>S}ParUy%>=D{dLYWTxG7?7RV4em}z8XaflJ8R6c}3t0>@=x<~lSwIzSdB!4(6-a}Y^7PVjs@D@w>ar8H^g**FHAyd4C-;~H!| zZx8~M2cIbq6gr9foksr7J0fAeIDjt1pHzpAh5dzCHIs`xFRa@0Bki<~8p@AFr9rCK&IcHFt?ve!VE$`Pd!vrACzpa!@4GP zIQ?hHQ>ZIkX>hASkZIGQjzfRQ=d(cUh4%rAjg&VQ!eS%1R}d0z{I61a^Cu~ddHRbj zKvJ4}5~5=0`B;@rOYJN^qQz^%;pw2psK0?MLzMLzAvUv~&+2{6S8VmZT<`BB$CB5O zX2^0~tDY0cFP59){Ia}IlKkW2SMun2urA}q*4o^tq`ApfH)KN1WdRL}#^{nOTOwJiZV?AXhHzxvseMtABo`W?NH;?r- zCE?b|hVQu+uY2iGTbf(Ul8WmVuc>9Of71jX)7b4oj*V5_UtRg+)ss7-mhz z$G0iO8OJrjiOFS3fan*^P0d#SOlGwFs%~{n%$o?#g>W+1X3#yOgRqsAWi7+-MmOSQ z!2qSby+iu?dZkwfb8W3HHdr>23=e`2C4aF(7mFbh3d*mvHH|ijFV}iAxL@@BK?(D3CEN9xWLkzq>RNWl za!JYZ+`_Uvf30Ns(QEnn(Xfn8%vz_^(Oi)J?snDYYK%t(7LX~vR7r+C`=jEMLc)M>}qri8h( zt5XTgu0LhEQv`e_R{XNcIH53$^MM4WteT(itBaIzF)xCTo#li0AP z5)r~l(?tjEAN_!}kwsf(X69^w!9W7l;CbXcbUm&HVqspP7hK}TG4bG=JKJ+ZfjjXZw10#*DATD zYm)8!LUKL7SEBp}$##Du+4j4({B@?fpuZ2*7A(t4^6cf9{PpMO^4Fi9%Tp!JE34}k z4dY6GrwnOoRpOi;WnUIJF?Hg3ntDf| z1|Z4Lo;@?t{Nlw6vxJgYapAAknrs2MaTN3)drI|^HPMX2HtjrGo9^#B50a%e(i~!R7`0-=2I76E0Fe4%^ z0$7?Ee_0|CVBsVJ1|j5d8wi8QutjHL@q-l4&CQ#i<^mSKjnE;|hJp`gQNN!vGQGJO zCfS-Bg6UmtKdMK$KCj~47n;|Y0fv)h%7U#EW^@ylWs8Q<)@nYw z)W>B911R!}iyQ+cCmdM{r&klFQz zwYiG|^0;deoimFlA@(RY@)yb>oQD;^LG@3t?uU51Ze_jfAdgH0WYA=C(A=VfHYH&y zhrs>Zt<3cE_7;=Tm(9I}#J=n5h?50!%78k!X7tQYr>LTp7^trCcoA1e=uvZ zg^F7omh#G!5p8pupwhI~GCPy`G+`BnBp+l|cD`)N98IQ;&`9%c1Pt6SGEGCfM7jU( zlq~^3CKvwseSCmar->DOuz* z#Lm_8wLOuzVM;vNoF!X~)!K|Dt%$&;I>e{O5S)z?FAiv7@YGARnkNT?D}5C68k zDwWMesjN;ZNmkN3M+mrIln{R(qFP`<9{v~E9{CsDPbToOeD(Y@CCMX3lFRE#vbR?C zy5W_dTEJ!uqLbG*&(1*62!$Ti!INUSd>fpY&;+P9A~0lb%XXGN|X!ziTeeU z`jjL?mV17u?`TF(i7P1T%3%4@UsE^XH8F}+Nl!=q( z*RNm8lP6E)`Sa(dD0p>vT1p}!;$wg;(+ScZh!IQV1_-msFS=3@R;Gg(;+nB83kyp| z3@wU*5*aK@5XQ}ojkn|;;!OK8Yn3h95LT?C6Ap_UTzo(j($-}XZUjt(gd7IHa1i28 zql<7!pv>9-6ej!a1%rqXA*4xKl5()O4JKy+R&H7@yurXPes;EK6G~5$fJH!>3GrDl zvW%6PNy4m583wySPcXPah6zo%qyuU6!q~Wy=E)GA)&@DJP-PdBFe?GAY_BM}#m!3#?1ov3;dF&ev%Rs{8-MKrK{KGM7CA}@ixC= zZlXnFt{2t1)r#{i*5!SR4dt&1R|~f!msGjqg2AzDwON!Q!@2hR7WE?6uS6NLOvt#- z&n4S>JuE~5IZs)Yx3m+PEiTE^mt*qngXi*Z-$Isuksp3}A!C#J?0WCs?l$@2&X9cb z`3<>uYe2d?T2(>lGe?{XXv|nM2r&m~_Hc7_S}1QP&1uWu*@<7*d2!B$icP^>UBP0DPC%)>h4T84EK6feFCGu?;#TlpFh4Qqeg~ z_M>9t{F@QTv=8=m<+y868kZ~a{`1_ z6GCeiTNU8#HK}YYNO@%+5o7*xuJ#Vp<|MbHX`QLx} zMgHTv$MWFGh)m5b*sHdI-VXWV_7(Zf=hx-4+e0$g*D3kN%QMmMq5vh0WruKckY-#n zaMi%tMW+Q>-b#2$s|428T00{e2V2}e!U72w z9}qgCVGw&6(v0siQAK>f0a@k^BxOj12#7L-8C~RqlTQs{@KCD*H3kn#m|I&+?%Xv6 zpIFnw)`b&&B!ufT(ww}_h`ROkfIBJewyUet2y=H=m%SNq(wrW=FxXksLG{dR7*vmG zVt~!tr<2C{&?pHZCd3+(>xf{%M7zqe662*&DJ{IV33%n1U!*kkgOsPf4-qT~^@jDB zNqdBUW8xkOtMY_?kHwh@eikozTCcsJq#Jh&NOIYfEgG9;tHY{%#7`#i>ITA`BFj`5 z&xs3$kz$_NEyhklv6AJ7^6%e0l7~-6WV*O$3z1wM?2>PkDF4lGZp+vAuiFyX zgp?ydd&KDjBET!*t5>gDtavM|=?!}`{b#n};NBb-=`S8bKN^6HF~m&cSGzchD=($tT# zjT;3M^oIY3l+1Gc-=y^Vf0z%lEh1vB77*i~j7*p3o=Iu`RfvSKGA;s1W(7Wck`qgE zhAd+_#`>FVL*h8eY9yq$RE<8b5oNa`C&?NfBT?Pw+W0%yGnwy-WII1oa{M<^HGnnw zzerWzA0-QMZoi{Mc_6IThXs0%C1h=VQ^qIf%vbq8lpz1FKR=Lv{p&CC?SmKc;`M|q zF0D#^ZLN{xukYWGzx~Z!CCxYG=9OM)DKvhv3i7;wQL%@cBS!Onkuyj~A-ZWRGnOU@ zG8Q*nGq5xhVh77eM8tUqKBTNRN4PHt3h){N+mm>aj#v&vI z|7FNwSk=!5-=89amAOuuc=MnGDg0thHj;TgE^=N*L}7p^Gf<ZFkSuZm><1E5cB^2F8&B-S%X zrCVP$c{nw!uu5Jl7Um5r@{CQ;tE@}}SBa(3Fj-GYbD8+axLg#UNM-h^RCHS=%p2b= z4(s`E^tY42y<)8>87BJ~F-|PK`Ycw&R?wE|s^PlzhkU zaynwI(h9A~D^YGU*NSZOP?*ryp@f-btvl}9XPeB|&=suD*|#U8@JbD<^1{-Z43ACA zqh}*VkpJ@IGx_1+3wfqQd1`i1&nroLOF?d2?Umnrc3uAPL@Z;1Z^~KVM+DM34J&$kTf6Bq{DA2nE)vKS?iuu-~lr8MwE>#zfw}HY3a3Di;W!Po&mXDpEa^A zN{}r!G9;O2sGxMQ^y)KGP)daDbsvP-h;n)#CBkRUqfkjyM3O(>dJ+ZzBtCO}J%q~! zM7gd-Npg>pVMy{#$+03It`@jqwB3~);o+JFCEM5;VlLw!y@#N0Zk1$yaoLu%e)3{W zeth&wzWw>Re5Zu@!INQmIWnc+uj*rGrK_V^?%f!W-+ggYey?QttNT~w+F+NGWg50V zn380y_SA)y50-U>S<|iI^YEt+I=D}TFaw?uWkurIcy1@nY$18%$rbiNdEfgTzj4CM zH7Pf&C@2ZGe7>xRg!y74$Z;UN>l^E`ytHiAQ^KQBExw>hK$smLNDRN-Z42lUWPyEr zc9~TVN$ewztLlZ|zr25Yx=28-E$;02xQr@chB&iWNzfZiUPB+0O}`LEuB*FK2DBV{ z`}?dMh(~-G%HcSGn-8l)qJQy!rEHlnss*I~k-MNDO52oYcE?h0^G{S)oK-ne*Pjw$ z2Iy~A{G(nN*bpIRLkHR9nRZWpz0SxwMnnvbS{g=}>l^A#kH3pkdt~Dfu(f6c%)++e3yg($U5PQi#;b{?7*Y#4UWOo#DCt$gs|2{ha?*ruW8&Q$ zmSRn|eX3-c?;y&vN|mS>E1|)F=69&o(s!qLSA&j=_Tz9)^r3lIaQPwBa`yes@t~Juk>#KtZ<3&d#%oiJ>ZbFm- z28|0^cjy2J49ED+=U%wj^P9b?ta6W)6`c{5*X>cF*e5;RUFIKs9(BR{0$If(I;Aph z6Pw1y&A*lqXn`y+@W6-zNnpja7U}N`ud%x+2bJZ^P!7idl^T<;E!7_k)CkFm#Tfz? zw1J+pS$AVqLtc29Uv?=K|!n=f3cT7L)mVGA9nY9-ptXn0wmT-^2 za=i39M6OtPrOEeoYbhM75dMwx6PF4j$19V897DPx$V$coK~5~kiF*YFXC*@JjQ~Ub zbPG8)Vw@x^AWe3h^Ef{#F%v9JTHtRH;~ncUTh7saYfAb%$YyoDNNuxZ>f0rU%SB;O ziSjkcwB0g`GAZHp%ba%|TnFglHH+c=XC8 zt;1CYFgoC%Tq#4!p*k;_ng%_OGTD8W(*#1lA7Q4kUsl2lc-FL~nQ|~Ihb9_7pIres z(c7;a{Cl?PvVcUgrTiewyh_B< zSd`JX^$>zcgA#(2bcfQVl2RflATTsY4xK}ZAV_yJq=6>4-M4Pi0E8xRfoiW=;av3BU1_?~P4D;9WVz9+Jg)soQSmg+h<%0pPqcWin^xhsPc-|25#f}V&p0Zc zTGNK%z6-x9kN?WiwVCnj8zOzst4FerWt3I=^Tf+Sy3h6)X;xru%y|@j>$)SEB@UYf z{35rI<5HF*(=?I(3zS{gSA%0v>gIhy`DG&a#&e~1=Ark}c7zG#$j5X4QufW;2eU6m z^68BPk^~z~HI5q5&aIE<;HP(Id%iwEy0UUd8tniHVcSXm_P|S)YED>+^0<wOALcM5F(Td!p~LMP3R$chc9f0x={e;dJ9ZdLv; zLX5k0uo8o| zryt+w8wp(Dzg*F6{ap9~%KcB`;f+R&Q}o~_{`LKZ?#H#my=$)TyCbONx4c(>9w>By zTXJ)DPCtLvv-+gUb){f zjiNws=Ns0otKB9hi(6>$??{{-zE?pLXa~^gZftoPr0C5hbB+)1i|L>)6_0i9ODU`# zqqSmBbaIlKSxUtm)j~w4#?GyqJ&Tmvo7@xwE_(UchQ%Ds5=wDam&l%c)X8p1-5O>8 zC~Qly51Yfm{bCpXu#zrq@{aS5$Tv!B-jVN0A%YfWTjJUD1QU-*-n*x1lBAOdYCjfX z3VdbMAT4+046%L+@L67-Ox$iWT;DbtirG)Yp7ifHtLBgAr@K<4v|jsAr5MJkOePs; zT$9BwFf>n@o5eIT*#*9qzu#R+!wi-C*V5)}z&? zCQ?{rFG4CxP6XDrlPj~_g;D7w36hqUX)WQZ#-%u_F!&tp9mL5}fp_*r+Vo8VCDsM~ zi8x7z>@9FmgK!w4(On?hg0mJ*4D8aLz>oXD;wZ18)oSEJmE+>$W82@Q&g&Fd+J{En z{+756U_Pfwq!BlE?;_fnXCD2`k)efZ3$+hRA>bE{Irg6*#~3n_Rw+p1FboB?NRb@0 zSPE*B^0-h$cZE||VmQ4<3CJady({FO25*l;G8w2`rMIki$;EcaRES+Ttd}c{mBVtj z5BmxCl8W&1cR<08XM?KngN4SfMM{^|fm8@^{^(792Zee2y9rt`yY2KW$8Xm2dI@15 z0e-@=u2f`-k(qoA-#qINKgIr4vUlkbV1;H=Y({dyDt0mVedOMm@E39;d(z+1&pE1- z`cJeOa^ikyg&}^J0MnOyFJRDDdQqtu|65Vxq+Z19VNIPpAfBHj{Al#e)mH63YFWVP z%d4p6`RhWH*ljw>Kr8&K*jbvT4=6H^020EmJwJxAsJGh0iJ??1IFP$Z{M7i6E8_XT z7f!Z{Zv<?kBp7kntX!o^L3(mCcbe&Z(3&~iE>++%rf#W&0CPe-2#w71Z zIW#|vwl&rcoXMmsm8A;aWd_8}W_eb;FVpvZ zg)_;jKo{u>RrGx!ZN(z~X9djijbK{S^_$u^ntiH-3~f~39Hy+Yrth;wM8EM;=f|d9 zlRGg+$)tQ*-~M5g=tm>u6vqoEC#<1Zb7(hl9o2JuBH2KxOmKMU~9wmRj47+1` z7>C_6J)p-)M`~_;-G{z};!vjod)vu8tiWWDSudUWNn+h5V4kdh2=6BlTy_Uuq|n{0t%;MeL?Ch=X)s88n-1Gd?@n zUH<#mVf{2!eJbYR)|$weTo7f+pt~iC#Cqe~YcJ1=uaV}ah+>j4?B5*II!mGpq$skbpN*8~iM5G`h+xI;zZ&mN zD$i1ZUZPdMjLN{dfo3ri^re89XajMjH6>xDVy!#zbrS= zLh2N~ulqChxFR$#M7l=dHI@0>w$~=94v`5~WrOM)(>(!r=26Mb2IHLxQH)gyj)u{( z`$t&VtrhPbU0f8|ZGH+1i}H;Fqldd~3aGCB-TbJ;MEZCzynLlUpLLjrEd8fq)6TwK z;{Llf)Yah|!*ZlpMmyB&(~%Lfae&5WU!AkmSq=wLRn4m2Qx^(M63ndhu6U1+?Vmw9 zO6LNJAk~n72xZOu_4|piR1cMKG}DZ|e~YugCe)hUTM?Q*uc@C}Y20cZ`Q14>5|FdX zH|j9>@-qnqv5dwR{Vqy{1OFyzI3_R^7@`^E*W`zX=x!4b9w=x%YYI&d#hc=%wJjVT zvKkmpsnKe+WO}F1B@m*x#S+x=Rw;fqdG=Xk+M9t_x9%P^G`h`miH=Noe>O{`SZJ!Q zsY`>%$-i~lsEN!WhBsP`w6B0EgFP({ghEe!Lh@1Nif`_X0^)VR4e_gQ_%Pb+GIwwK z&vnB@Vh4F@pX*3}LG|W8AJ*L2mF?N1+6cg7nYSV9zx?1qHCHhOwE94 zChBYAxD#Oj50LE0;o+1O)z+L^!8j*!<8yFuI9d6n2uB6&eVBadcRmlB5Qi7~AJv?! z&Sk0F(0L1NBV-@mCX|n7%DK|2A+}tZ3N_swG5Nvz0KK@B?f1U5M1Njl9(Zh@5XI_7 z^eqd6PW~G?IX3*%`caj4v%!u5H@yn<-nI69f+Guqnywg^YG1}kPutvbCu#Zz=NFf( z>ys8eYM;Lue5hHRD1kZ7-7@extS|&xu%C6UIpUNU+PvF{B_F$F~LZV@9Fc4x1tzc(b)7^!KUHM znN%l7ZIa|w`WD_|k55Ie<=d`h@Aru}u|nwI{ywXvplKf_CjMMZ{X#!xo0@9G#^(T| z!{mPR#l&zP#7)It`hNHu=B|msI)|_p5BHIa2EV_%{#;;8if#;iJ3tO3A(V}$cAm|x zbT^I+9=aH%ZfMXPrk*ESv(5tc5V`wQc~+*m1brtJ{Z96841L0B_RT!InVVb!&wtKy zkO=ULx(>LIkLIHOCqnt=9jsnh-h}Ku|MB}n<>cBaj*VfXQV$imfo;-qm~j`;BVFb{ z4i%5~g-?=C3_i1rhOgW8J{HWb2-HlF%f{l~HBIXCP$e@i>tH<(sb7$lB0ooaRdkAa z__sp1m3Z5%C7hm?4AM1^&egwHig03&Ee%ZozJ*mw*C)WU65w%8?;8%oESZw@lSerW zR9{hT_f?pN&e>-WcFQUxiZL`9m2vN~CG^7GC#mQ#Ad;EFRp<0Z!ELudC8C(45)naR zrE=;JKX14EMf=m#QbOuIhH!gm^x|0YU>nR{5THt6dQ8F8nce&6DCJdoPEI`UVotU6 z=HUY42*lyQf-xE{(VyU7CNeE!=i&8fzAGE>_(-1~7M|JBy@~S}o0p=uMcc!NacwwL z%~Am__wptBesX)hRqk%na20lm;d~(vsNz+~Bhz~X1kA8*vR`4`OcT+$MyjA`+h9}@)Db1|VLCXoWrmF`lS@%GDp?=Zk* z{KtL-SO!!zdB`k4N2x;r>cH%o@jgc5OK=||7-)^wk;4pRNN1NS~w?-ag*G2=o z%}x^XllA-aZvUM5EK?hO(hl0P2UM}PzARe2%Nld##iZ<+2AGHiZdkJI$x<8KR!lb6f`5rBmO+`s`UbbW|(&u zUl>AF&lO;m$rQDL;JfQ(Gh(g}f{;ElkY6}7|4eH~Hjq`RDU^BRLY#glRb-G$?+Za^WB-@kTG4a$9 zy-8Q!m?vNk!HV6`Gx49j+Y*EA23)kR7p2At0lbx>{V4~vu~Q1IcsZkr225`MQLhRF zUJc_)x8E>RyyH}VBxm&YlR9@@vKc7Im!ckdLKtY|Xd55gQ2@C+u%T`ErVPlt4fw4P z=B-b!c8N$eu^wqi{z+9l`nZMt#6C$`Hc=w?>ilrI`6HJ2&GH3~zc@?fvp)!UV(aQ% z6~X@9mfV_dd%_{$6)(0xDc0mqiYon5Y(fYwCsU&Ip@Vs7nS|m%btXHxfBwd|>9;$_ zSE1QLPG1s(Kc?DKf!s-Laby&&q9xA6?r2lFa;{h zz2U3JLM?wc^fUQ~6f^Z0JRl9|a;6J2N{-^jiIzu2?+fMK9(?Y*#g2wNw-s2e`sm0j z*!jKwyHkBdqS8)ZiB4-~t47@m*g&=GjEgh1pol7#U3LM~WgFQ#3VQgp+=BM1j~`ha zl&_78T9L>b%fM6fyf$qF*F=~> zDhM@FWa1vv>Bimn#_@*65>SU3G`>vR67>{d(czZ~5X*hZXzQaHET3bow$C^e)CQXR z)kiJVd<0b|pz#HSpW}=cd{-t4m6ov)jn)cMB>p3JK%?xqX@!-6Md)R!Caz{LB72CR zX6*fafIc?FTdpsONT>{F=d!9$>r2$ud!lcpr96xM&oan=N!}02M*i(eD2O=7|ZW`l#zoa>Tx5$X4FX)&gzJh4!H^v>p$W!22DgZ6d{uOq^fy>{?69@j4 znL%tiY@fBZaW6X^xTQL_zU38QPd#3phB$pbjy=AOb`!H$v^4r%OX0_P`ZC>KH7=ft z^PaonY+C@O(v%G7GLJ>d84b_tu1DV7;qzRf$mc_n>%sOAjX)YV?jU5>t&x|DOI~XW zbiuf_W@fd?x1@D)-6suXWH<&(#Zib<%Y4;=jGGUJ5t;6?MkNRCiRxuVuR_Ae6Y)(K z_nV5nQ$?I;^<{m+YKb31gM)ypObnq zN4wNHWDHXJo!e^VKhc_?^u!4~eFl8<`?I+^D+;+&y0}<##t-%(W!TDTut+((b@5FR zYwLioJ?Pnp_`Qihr)F1Yo%A18@5F6!Ipr)v4d3I1bAj)S0gK2ZgwR@y{gWnQLEi5y zSk8=^lcVRR;tyLwTbR~0=@;V)v)Blm1NWjE%h{>_ew1HEl2cm5$#c5rV`RTm#)%S zq9ZIw7zOF-ShD9bx`E*xc>_KqXslI@|f(P2$5U&r^=>q1&MI)(n6s5n6q2| zPB@l#`TXZWy#TtYnNNU!(VL;3U_#yRnKYY2zPuoS5cfu!ctCP#w0StFtTyg0g~=e} zzIN1hSA%2%>UP3?;l<=jrB8B9#3WK6&DGZ3&w5GB+zcFr;pG( zK_{T`krR-s3hG<|UE2$YV*+I+^}t!L+E7+TFjZs?Iwd=DRpQR##AerkzY5ILfx7Z` zeKkJmOpu9Mkn3F3yMmDG^Zp4vQ1YSao2xZ^Uz4X3 z3v&1$Bi8!2ZzI|xkEHd+1!(=bg0AorX z>%k+R1)&7si)ZB!PS8O%mxv2?V3Y+}3}2aPbL3|IGK~>@P945dGDA}^lQ$F2)q@Y0 zt)Ts9v#{%$o5NHu>{oI}IhC@9b2#*J)sq4hsg?F3vj-*VM+YT;$Nj;MM#(nZ4ls$&!^W2NjMz2CA?El9)Uvws5GMC+}l=tbir zgnXzUey_>zjO>I0hHcD+g=i*%@t%Lp{jUcy^!(8Xr-i&I&~sUU5kI_@E=Ynu=*k1I zJBpWPGo@pcv&kU1oh{aUV@9xJrz`Q^E`5A__Rsi0p1;WlQjIMa!--9(*}q*?0?WVmAF3w;)i=S)NLZ6M!kjv z0=I>k8L%%5msq@{uO{Sii2w8O2e~tuDqR(bB%q7fV>iEy#zldRJ@20gO6~ChoRLDB zNEgDvaF~~Le*oR1ZjPWiY?_DS_1nA~(!huPBhbUW-m2W~Ug=S*RBX%q$z2rS+Rbe> z6usS|HoT2PPgt+NSJCfrhBC+A>g@$g?AppQGF^ikosS%_5#25KjiHTDebqH5*{hai z&nIDts&oI`z(4eKZ1_EO)FAl!_dZ5}D;g%3`I#9~5|vPf{|P`a-gVM$d5}*k%i>%q zV7QWkx3NGSu>NzHIOs7EP8aQm7xGK%SIxojL}krJXX%y7``yeV#sFgw0=>7ltz`l~ zk=e!;+>W5eN(e^S>ru7t>+vH9Xru?<@;O{)N?CaAl{jrxb;3J6w}BwJw#>i$YfFvI zsMe@w>%Qkz`=Tb6ycefkF-L0Ic}D9k{K>9he3p+AgQTvllaqk+fU? z_j`X7G0K=K(QFVY{XqC7*VhWZ03ZJN$(=s-AyN_s`g6ez3w3}K#z`ZRH!}tH9rn-U z;1Sfz_UrISl?Djz*MMfKY_g5pnP#W!m072~uI*K#IPi(hm5<%g$L*}Wwr!sOOZAQ*qW$g)Gnc$)5hs2&0v^+ZVkkvc9W}Xq zYku&Y#tAp(7m49{5bA%jAG1jPg;;_xu_vM^b`bRU1fdy~7Hq%4Vb9N%<7mCdL%<@* zC#S8@>PuFQhCg-tfS!>S1eTn6{cDUDfqYl?f8SG#CCC`r&}~{HNyEx`2O##*NM*!KjfbEqk~1=Ka+fBLIT=*8IO~3#P#AC`S{ z_G$(?$^a1mTd63OaZF{2B;1y`s9hkg>)w-&Slxh{X?_6w3^|nvz5A!#c=)vmcSvV- z#sOeeS*sa~+Fnh%guBh}J(~yAO%Mt&UG;PeoKw~ov@aV6#Naw?2TKvI&^?RISeM6n z&0<(UUGujwCI$>c&7v6jN|Vv=k`Qw-T6ugB?%mAt@*PJ1r>iw4jM3*-t%W6{NRB}0 z(vq;OdV*q0mWltznWe>}X!f(i{=zv9(E0EnG6@rl=&8ipx@A|V8e%YXXq>S~&qpmw zxQbrBnbPww7~yR>lu6=~G|n3xWF<7zxQU*vkZPOJ;P`O=JvKru^l?G*g|Lws>^2Uv zi}z@dQpK9&!CC=+l`3H3sRfZm0^5Aa*VR4TFhy#y)~0p3xXsKp{ElJgE3S%zQ#(oX zAA2`95xDIiDUUtffw^5MOzSEEwm(~{w~Dc8Lbon1E*_1fix|w2nvu~K%}s*Wx1fxnQg)c*rFB*{*hs{r;y$#HS4bZ2HRO9D2a&B+spPu)N#y-c zb#1_^=P5Ic=7C0|k+Z)!yd&Ni8w?e4SbE#qat#srp>QZHeKES{S|<;ydOs>J z9$7*{!c~llpYk^m( zNr#m(Ug*Hj&%gEksPJRGTbm(s*y3#OOlgdl{81ih;TWPe_?hW1K`3<;?Pl9L zpfoBuIr*p+dE_3;SZUdUKp>9xW_bvN@j9d@v)bnWwAlKT~%PT5E8OFW?f$FOc zl#9W#{FsxUQTCwy>Rj`}(($z;zk!9++2mJ~%n=ur9UU*v>|2v|D80Wgm*c4_+o6$x z@gak(?^9nWgM|lmVxwD$4m-XyJTd&<;8`|_sP0Z5sRdJ>U(n7M^)Pk)=(e>NdF7Zc z*|CUy)vtueC)#n6ke!(X8LQm5-Zh}ZP6T;;TYcczxWEoX3$?Q0C2b_}?i$I93Y*haRLE6bzAuo58bJI`F>1*n@* z0+gKN0r%@(B9I3yth9$8mp3LJBB>8P0E9qGNp1Ym3`V#o$MU|2_>uSZjO)TCW*7Gh z6&R`F-2JoaO%zhco5Q8Win=@J1e~t6UbIMgAw5YMWS?}jrGy*?Tz7jzWmMJ500jHd8d#B#^`#(e$mk*cc zXB%CTUr0(g9xEZrtGqJJ=oZ?bUB`vZ!-1Nj{#`p=kIBOBXQu)Eqww+| zy~dNXhebyeL*NxAuPguEpFK=E2A~^PKOo`n>O!y^M{G)!&;TGHvT zeuC~AUG6@K`EA0EtSjyngDqixCj%?J6_f$-wa1K%SOl3u1sWj3AhTL`rjU4J{hes) z&DN&0VGA|t-frWau`Jodq1t=a4!0l&;8y*m1AB`MmN(#4)CFP~gW#&A3O_9XpkwX7 zp{jTAO_yU7ET0KBSlUxq=hj<(-OT_;<7_=Id?F}kusv(AAIv^J_E%b$;FU<99A3+eAY=leG8r?c#>(sC&qdU`ybXU5XH8Oux1wl>2D(xsGOlENjenpwx5N9si@yEWDP z*u1?twdK^^nkFsoLXI9-TNbC=%UCajo!6fuU^D_8!|CAmib3eX%z6aWDlsnyKuf!Ag zd#2wAaoVm(h(>UOPh}&-(tqg^+9nnIB{EN=E0xJTqkyp#YHYIkuChD#q(N|mvT@RBR*2z zOT|%ylj1^uw#@bQL}#4|zZw;1NYW}85g^uqKMQ-^W)}~7;l&Z#jX+oEhFM=os?%DD zudlVII0>j4LjCTZBkSrf`vle2YNVX}3}5u`pEQ8`_rYntQ7N;(WwvwjXs1QE^!QQY zIRXrTWOL8nEg9p$B|i_ifm&DeQbB>w23wWm?hHHc=s>h2bO~*P_OXShyDp&>88$s6 zNDLD6!q|MPXM%8ICH!^qi@7-YhsQ@-6$?B*2pq=!5KZ@5?>A1`uiIP;D{=WyAG#ME zE)@j+NX5T$R?wfUg(-}1X7b8HE<8RmTtja6$35F<*9~vSv|f5#RPU`_w`qoGgVqa9 zTKr^}o8KJO>s+@{4t3W(Q!PH~`V;kXPqw0eNQXoCVbyEhiZd^+W5&-h`qg#IEZWg( zSj$-KZQmeVsi7HJdbuXc0QFT91x;wS5B5I?Ev2!6cxw89p17Cun%9j@O-YiM4Ze(F zf6D&6YyA?~AnTz4*KyA|6#z<)t4geG2>IDO0v(MQo%oHr&9h)mfurP+})=9Hv z&hbgY7h8*rbHC(1J^Mo5;qB*EAd4@)wszdmmU@ysygtr-%3{Jx!L*=CHKq|zJ>`hi zd*Xk8H0qc36wsVW98B@n#V#*XvQ6KH71BDTF>ZqVMOERUgZ3Cw%qh(RZQi)}#*wn* zTjtj7ZXC7w?Xt1Mr9DzpaCrOGA69O`&nus{0Ok3ZPrl0do^lEREV=O(BGn?BX%Q$C zLhNZy0(T_#mw@4d_^wM4ibNGjr9w|~LSmm;fk(-%dc3E*r@S9mJfDsSyifWG@sZij z2@9UWyIM5r;v83$jSBLGjZ=&p#>`+g6t*0D^<+a%pUf+O2X@03Lcx?CiMrn`D z5yyH++h(}tu+cisq`k(KOrG1@qI)ZSgSy?8N9({WdQO~6N5WC?xDiSpUFd)PHESTX zZf`WsaA6QjcxrQ0T#IGc` z+m@xXyT1$hc8v)q9+>tfG$BH?S&_ab(55sG3BQItNdHeox!A@~X<6{`@0;sPPzZHw zKCpH-8NNF0)r)?ve-`4s(EK~lKJu1?M+)WqYPPoOnJDRGZ!{+i&gRZ?>UDnr-nwgl z`#7VlIU}a-_yy(p-B4VLQK5QolOp>xF#0U}b|CZgtpzqiPpY;P7~*s4nv*z7|M2Zc zF(9VqwM{{rC6WnQ*%F98Y+MBepqG#Sb}JM74!BMfXjyKQQ^W7$e8`N_gQb_v!c}Q! z*R-2?nAq-)EPn^ZAQ$@oNVOU^6bx2NzM?BB+m^{S-;_>eO0@V6{mOGiXjs5-6JL{@ zTAJ0#bC{45%@J8%S@`mXy>%Uo*0{hBXJH2wzoMb85`8(tsjY580ol>Q(H8DkOny1c z8UoRT<2w8%ife4hyjE?eXo7eX5Glz^WKJ*jEvNh~i(^#;kAd7XFssgT=e%^0wd3nE zy@v_dGGz6=&8(S+z1&o4AA`rh!p;UrvguUo_}zhM zgXcjbvb@SNi^KmMA;5J7DYt{45judd11VP>UyJd@bF%+JQ2FIr?q?gh-k|urXNFkcO)7u%RU($p8X)WY4N%@fpV;|;Wk;ENjmG4) z&88l9x$FK@ZqSYK()I;TcDW)DtFHGYgaAi~G1vP9{iLMn6zybvMUBt~-rKB>d<1Vd zx`_$1`&^HN0$d^I@y`8h-v(5$u<>5mR0~s3kEQC-<_;0-GG~2XN`Aji=o9XK!IEQf z5RQisWP;0+fkD_BwtDk(*jbgVX~zc@EQdwb4n2x;;aGR~cQ>mcKLBH!M<+v@D;jP0 z?lSxKwkt>fLY}Gw5V6GK#<^kagVUH+#>cx!PRB&6E+yy-3Sgk0pCT?WEA!KxOCAT^WN?1)ONhnp? zGdVjULe`-pXRX-r2!H~n*8xCFwR>rm#lA}|$twoshU57XQOr2`5r16G=3F{9oJT5= zdgD|3#bwxx7ED6k`J-=j3LSB{a^#EyQ*hX>d@ifrR;Y`*Lf%3uF5him-<~sH{km6v zSb;H~wYgQcT6B@SUU8!M7-sth)2rk(B}zu^`lsa*6;N-tmbLA#wN@{1M)uz443JkI zec73aY1{K?m>o9$;*l!r!F0LvRqQM%FEt1Kx_0{+27lUP11yEAT zc+t&ay{kD2SG_GR*vX~L8o+O!X;^j1WA7p@AnvL^CLQS6Zan++(k5eCQIf0Dnsg^2 z+JAHms;=dU-uN*Z1r5fuu?P7ZO5l^r#)}|!yZy8qB0L;7OjM0WB4qqDkk|Lj90iCP z!>PhVuDys@!8e)?A&mtM>QXrhkWHJIk`wxL_|C~npY?!YCF6C*p+do()O*W(3I8ZQ z+wpv&I(t8otw{pFh|tZFH^T~n;H_|nASnjZ{`>TTlE!cK^n99uUhYb=<0N%;ZV$P6 zZ4CIg?y>xq@3w8L70|DBKjAU{uNhNff8^j5dnbeh7r*^F#*0De?oL1$jP4f>jh4x^ zVzwt1FV3jwSvD+tcWN5^W#AE+vwQGO^#niQceEC6Tn&}}xp}-;o67w!+>Xc2Z*q<0 zpOETi&c;4@6>PH-^b|3edXcdqmJi>1H_2)A?N1XYjX+1A5>4u*afXqr2-!$darJ0S zKXCz~^Ni+}Hc%*DNjc+r2%M=fT^Kdha;q|=UC%Z}B%C2btPN}iK40zlL|Hi;G$tGVxX_i1=w1n|+Ua35AmmvtJql8hSqgz{^xl*qZ_={*C zAC+n*JNaC z)4)>If(EKdLl1oCv*>`qV?cvY09q>6%#b-TRn~la(I17eSC#f^VRBrWRWU?;%;U4v zrmOdoYnLOSwWJ()dH3dW)j=wOnu(t{Qxo4r$>*zQ3OyC$pq4Mnt=Al6GW>3JW}bVr z8#f+aV_DcGJf!poCOaS+H`-48`JTO#(3b_0C13TIorF2$S}{FcZzmOcQqre+{VC?@ zCVxlSSfcx$U?I_+qSMF58%aypxnrr&%uf}cw!x2d7D~g(F^;y^b~QaYb)Uq=0k+Fa zl!>_h9}}gd)kr=2@~A)O(!EaiOYkITEL{=nXOw1%UHaR_%8DG0?Av>1C-C-LdhNqmgvqLt1qot=~vU);tJ@6<;5CS0jHq-AYi^%jA_w!bO_f zRX{E8$2+;%$TnFHp>bJsx-)%wZuG$l*k8&zOf2E%6WvKz( zy#oCz{$+Om7Glx%+9)x96U(o)2Ri;FyCGnbX>jb-c&K;@7rfyh(xQ=Mnndpv-{B2w zzx>;nW%OO>FENgi_c1LMPG;SuaA3u?!unSoS-QKio9^(*)B<1Gvu5AIlfchRo$EtR z49#$}%0xUfdHC3>->wJN*V{s;>wGLDOH*sz!PNHY&v!lgn~cpJBEsSL#2t1wyMn*H zf8A-Y7tXF_u+HMDW)3#Lu@ed!z_3;?)zr8ka5dTj;ZM@BsQj{1Cgo-nhH_TD<6BJ_ z_wgWNh`Y!t#2u##_lQ16w32P`3E)72Q|3tx_Igu`A|s{po*mW&~ z@0hi`gt1gaku%!AebR`>4uY=Z+zwrKLtH+#cgk|S%+rDETuBGQb>zetTEuQrb48Xo zp`%`amXW5{_$GgA&3>@ z*h;e3-q?nCVPjJ!Um{g0ZZI`&DRI;86%c3PVexYJ(id**`CvQ5BCl&kW@e*A&ptq- z!^4Z9?Fl*Y{HMHB4am@%o2x~BH%N+JC*IEO9&8;zEAl_g-{TL;EyT|$M4$2Rju{+j=nLN*={uWrVY%X zOzL#ybQ=SGMKnFkh_IZjzc&7)N2iv#r+C~;$421MaT_^693U)6-yts3k3r6iy7&Ts z@;)b#r@~sJCTaqx)7?{dkix**L9)4y%xid+(!b z8bafhV}kRCw%v-i56n!o-PBboBKQNpv~zyxy8+#s8Eq-7#B(B?!ZB!e%6PJwISV6L z$a^Ez6WHv^hX2$hKj^Vm?V{9%jz2I6R5!k+w5P4tOODfs=Kwi-M@O%`T%t8I4UgCk zAy4Y-_@(9ZlG||*C$7W7f+<1Zohk!OfX62<9MT*KwI(PNRL#bsLm=mMy0ci7GL}p4 z#*1-#^v595>e%@TL^aXhI5a;51hFv) zfprBaRRsi9v!`QZf!g=p^OqW01H`6Qxi8r6x?7DJ^T^6ieZ*b1Qe^9rfq9SH?B^BR3#B7(2Eh%se&@JP|*&61wQ>0!;QTS{c zJF2Z7a0>R2h_;oEPDlDoeK-+3Wn%BM#0HF}-2nCa5O1CWd`i0JO zVK$M+;GjNO`A7emT&jR{OYlYfN1zw0uPB~fd0n-6B<3qY6((!lM*PpfIu`<(*-Jo2gvZ**V(*2*9GhHyR1LkSwx6uSrM_5PVtPd*Vj_9mq5_Iw>Rj-YYi zvRwWk{Kq+oFO|I@01rp0HF*5hQII8(b+f9F?6C5kk3Z*cL>-*a5n z2ZRYZ;|;=%Aw_Q#X>aXzKSlaBM5{~{d6{55Pka1WZoyroW>j4 zMHxc+A=eQ(gj6cd=ffjTB(ma?8ji)f`ZDmUxxLBK`8=g=(DBWCt-F}WG3@Vz+xvVG zY+_3~ht6DT8AQFlSmCnkC(f}Sm%=B^B)@)&0AG#Os$o60J3gvp&`n?--cK1o%7Not z7o``K*&NsW4);dxpWe}h{ki_dz+{*hk)*1Z`V9BFV+=6B4rgc7!vSMFs$X(gS&mso ztK&rQ=Si3F^cS^fe9D|`(a67ieFF>+e^#>dP!$Z#6$Nt)kkaMHI@rzPxsEAiuvWbo z@ER4ZEoXnTGYDY8DhP4^)Ko@9hQdK&5VnKSo8^OM%a=xQh2CcCE zB{Nbq;-ehpG^*^pLCA4q(h=Lv(bD9U)UW#pkiizq4r;qslreIkVu;ZMBq%L_qMg|T zYF$~P3%(8llyxHw_1Nj`9R^iBg900r+xI3!?dDnaVeS$HgU&_2ZEEiZY+%)Q-Ykwz z0i?%BepvTJ|D%!4I_WNAfNbr8MyqBouY>5ltUq)2%U{$^p3~6IplXX%?8`ADQq$W- z*zPa62gcT2$nE&*2=#-S7~RF&B+SG|9!wXYYmq{t%zotPpz{TTa8}lKQ2IEpc2;i z%%u>+GQHXURe8RmS1DCltEvQ<)L25#_r|Is_;5S0e23Wia#aXM_v-8MB6oEao`B}X zC(0bH_xow9BL4sv&u`rUiq8{q@$!rhOP=3)Mi`gVyb-EH@IA_)QN&3bZy%NxUKh;T z%`;Xv^$^7)z>&sThRQ3`)*+%Fyz$+!T6~PshJ)xa^WoKEfYuq$EiFEX{v{~*qjgZ` zl)Gvr|B*3I(lT5jxiiNB&xOmXV|My-qu>C})4|~7QDHC2@m#imU2U`Q1-~2;Q1CSb zJxKht;8qDLi08JZ${+$OItX1!*N>V zgtCcAdlumQ9>?g{dqU#bE(X4dd1vhqfr>vRqzX7>EsYJ5R9U=CZSM`4fo<4SZ1sSo zgT^revYfJt?TF{n)hJ1BNQ_cZ$YAUJQLF0AUg-K;3h$>UpSCRHj_?m=*s){)S9)sC!-bo=&AX7vDln^_47wn zI2jWD!da|2h%5HYXRz@bM#}ojXnIQtGZT%4@`_{8T8o1(FD(iL87LJFS@9(dVlV_^ zf9YqAmZZdlv^c;RdolZ}UFq%SkS~ui8o^}^Y}NQ&<|^tx)DXHl;iR{ZborUZ4IANe zPfZoSyx57?==W;%^FkJ<(r3qd@)hGt^`*w0X&dqdBC0Ml{$E#T9Tipd_WJ>pkW^Gk zKoluax?up3E@_eOF3F)00g-_rhHmLrx*Nu!2I(Gz8EFQF9_sRY?|bii*FArpb@tkO zo&D^!&-w1>`+0~C;!BplE;w4j71U)8=WSYjP7KW!0Xz{+6Bl zV4fRgk)S)*%<=S{NKtcZBf_}qi?hY>b)L9wKlmxh5HfpWuv{s!Z*t2+{h@@&kRvkn z+lZO+^Bb$+gx^uc#m3)C@Xp`VSdDgPt5~Fin-sy7llS+RS{8$5yTpx*T?u4D!^0Zy z`MTJ3BXx!+0n7@=J%{;9m3H|3U_0of5EEfRxvJxbdnz%+z|+$5GHn{H4J{#1T% z^%SM(C|nXCvmqOq59AKf2H~Dz^&5AUb*$+JIo3rB_0NATp5lTZ-6tEu`>s{RoAfmG z`k!2=k&8-MECVj|mm?Ed_+0Zt-A>t&yfFg6D$C$d|GP!>^In>x~WU3jRe zn6D3M^#?*s+zOPQ+{XE>$oYmbf7Z>Z>A0FyJl0vLW6S-M;#h;_BG(ockS-17C5Y&BI9z#A5N2mIWuDvQ>MIW#n>4(r1T}zoPJ;l(z#%B$851Vzu;7Q#~d> zax4KbmHj{a_Hq8ugG5H^?;mn5RLeZyEPJ2;2vpw;V0$-KFY~)z$cK{9VS z7Cpo^^h#iXVGq(+xBl+yzUW@@tl3^M&w{o04^SmcdHHJ46u)~&4}!XzD`bS6ou4pVDDIeCx@W%qf>cXgbY2!|@~5GxIs5`G#i>LDgRToyc$3&5&WV_*9jDbe@jfI5upr?H2MQN~9 z_z0WyRKw93aYN_os8aVXzx`P>JDrfiVo|l9@6A=q@x8+ZI>H1db0% zr{a!$Uj^kPW&f@TdvoVQ#6-7uOo$LcgB?t-xk<6Tx_-ZP{T~lZ%^dpG_(-~K?gmC^ zm)7Bg7tqm{rgU?VQ{Z3o_XdH4S?mXXS%sW=S_}+_EiU)yOLh^ZHDOL}862?NC=NGi zZ0YL`Z3*w1ON+();I*i#2Z!F#6e%ey&grzm?S1jsddv@v%PG!1VyW@#g7lWhS_RPr^kHvGDYBSs3i3@K4IAawi)1H zBGFkasjm)Ow)#y~>W}`97W^Wu^z}&rPM(1X&X?f$j$Vn+-KOdpelOYq_+f)tYOt>Z z-?s|uG4GNw>BgLozWl9c7B;E8gRDPqit`dIHV`#++05)0Iq|p{Wlgb5Cm=Pe{$BO-1 zwo>WanJG>KNQ=6-%M22jy{*mcz|r94-BzwtZ>XV;nkK2GgnY{~#if`j={MupsR%mE zxOysp`H#s(ZSq2hx%2OvMDwrP$U!+HEUl0`V9Ff@(Yk*^CeJZ$ zXILlv>Ni5}iSP%ak;V8)4NmuI4;h5^h0hT<;MQ;@h05yNZ`q|nnah#yQfE_YrxCQ} z{=bM{Ha7cp0zOTZkX`>#enb1ET$Ap(;8;neohe^4sv*trh{x%g9l-0Uzx66?RtNAozw7v1hGQ;z=6j-x`JV;PpL

=ru z@G1WC2fNTGxV0Ofj41(3IJ5?MVsPqhT!7-~a$;b#mYyq9K4A(0?v0LEEc(%YZ@=Wv zAlF^WuZ0N0kIoSSgOdCgBj<@$?<5i@9chTZG<%hhXAhqTSEvAtom8E6O85E;u5HXy zfBUSLq=qp5OAlAd2IqTizF74C8#tra0S-8s0V*~O(9*Bl#^%R8t{hGAaxX#Fx=s&% z7L9JHId^-$_<#gp<}_u{x!uo(IvR{wVm^FfaBuFD4XxP_)3Y2! z*!sWALO_>BD-|M(hxnn&U#1Y>I1sfy-?I~+wP@E5R2_0@5*x5k=qM_5F^TKS+i)r1ë*C0WoFtoEMDK164SJk_z3 zR1PX|QJPEsO!(dOzR6*oD#^mLSB=hnN>H2Bdd4f^&AEDf025K(tB?ZVw)K|KjY@$i zr{)Q|OwSj=YdRXLuAVI7p0zCz*>$#Uh!2tY`I!ndCeZS=g^o~q;Q?PJlB-Tj^5LyMGpXpwu-19(CkdZ*rV7f2zXu?F zoDbS_I`7=2X$6Z=H5`h@lwT(em0=3cB#bN{72P`fQMcO2ISvL#?W4a+04KW;z{|?Z zwHQR3k%(JyPGW4+3B0F}qHXWsEbJ<}=CJO~9y>!|wo4Ua9jc5y`z>%o2$*=m2u%vtTgI#5`?2}H6K3zpY zG~#h+TKhbysmJvs!sBw^2KfJ_*VCl(Pko_@@13SV4KHKS;@S9VP@o+wiZ4?3&AeU6ItXHZ6|^svADbe z3YrNDzVta8*fZ=_ZYj~jm@BV@`3MQp>4%jn#wFDgt6o%Q}u0wm7ZSe>0_6(~?mYX*#Y4GX6w z0uz~`nh!vxgU>0FRq-CjFD9xh{|JeK;>XeE8cYH{#vj@5)9bCkL+=+8s_|*cJw%1>imcbEeIXNB2uB z2=9ky(s5{3t{09l;i;#t`?&V2EjnkOO&3#|sOAf%9$j`#dsbU&$Vh>0K zK0QcU`A2JSB(*L0MI3DUiQ(IbBdPHoli_<3ny3GcJ{A-^6RIo3;%5XcKDRqHfw80q zNw9PiR!8s_3e!$aENTHz6!$ef$H%ZGkErm&8kP(s)=e%RXtT$QVu^nnR~(6v^3vB2 zk2ljhKz#U?{K}bWrIU#4+-D+_v7&Z#B!t@^1tLdZ+n^zs?$ekr^pZ~PM1%yM=1}|OtdYe& zi=Gk$r|RU8tCUzdS35OMVS%4BI^Mq&%}KZ>c_hldp5K(9*??J&4*tmR>iyyD(@hn8uGF>p^Sb^*5^cTQ znHsPNP7cC3F!zRU&#vVolKkd4Chc-{Th8a(3)fkh`IVj?Reei0U1(%IhP9|V`-Lh=->bD!Rk4K z%=fTgOTnDbSU$d0JaOCKrlUq4>fW}8Oz2IxuMIKzkcOq7K&(IQ=IDs013OfdQjN06 ziBPc8EVs4f*|T!;#p?ul@K^C8`v%x?)p+5ML6d7DHckzE7xw%mI4oUsZY1imZ2 zGS^&sQa}dY2lN6O;#jnES^?t#?mYYG%It>=p_D0cvje$gv2!Ak>f#q5VG-xkVP`st zXUMh<*R6n+T3?=>uo^aHit{GtF(t;5(RY0HlYBCSu0d%vZLzXFwN|d+?|4y?4WI8! z_(wwPZL>YT-nt>H^7L5ZgI$9fM!K0)Ed~4*Xq1SJ8dGb`&%0TL8H`(Cj9gVN;&KFZUaX87P?9 zE4d?fjawTDX@wr^<>Mx8YpzXi12ac2rF;E_K(d{*IUscQFZsdJ&RNuA#w$ZoV$B3$)aGDvKX| zlv+(Pr;sM_9g|?Y)_Rv~QQ;6_S#Ia<%Zg<{)fqit&ACF@(Q}WdJT>m|ZH)U{#3W_M zapmxPLi0f$hN}qMO@q~?_mLEs4PLQt|M7_g6loFYtCsN*KziaV9CGM#=usjPTOG$N z>v=E8Upbps5~hiZcs%0MfJTI+Tbpq{Sx@eM3soyyIDR7ym7-P)K$V>}f z^Noq=b^0ujNC-d$0M!zPVqgSj z?3CCCK$MVp;oht8O1SKhDwL=+{UAZiK;s5~YT6p@uK1v_v0eF(bceXoi{y+8x7w6v zImaTVNp8OPo+Z7)CMVTS`@gAgWChUuIa4sKNx*43ssf)NFUvk3fCQIU0%Kqr?PUdd zKgvn$r{KkZr<`!J;e;Vb??)O}|JOGM+*~i|2O`6*|TzGV)(mS1Ibe*S0LxM)_nyn&Awe9@jSKI34jj>H0T{`di z+fLPj_F|fTe-0?WJqzuB*`gn$uq~+4Ig`s~&9>_NEgG@yI4{P67s{DFnW_<*n0v^b zdLhTQj3;ECJc4#mW(m=NJTDm}tgwn>60%iVe=;uIfR_`CBK<0{7Zvr1IFHu0b;DlV zYBW5G5*s0D6N6rck-=CKV|7E;%Y+ja3m#n)Zo_{@Bd;$9g{{<~%zJ;Tv#25|R#T59 z_dV@;Zz4M-n-{q@C}Xf zX&)LwmuZ(w&q$x8Ozd$84Tp7sYew4Ne;+zj8 z2zUK0`gSU#TFX?Oj2d~!qALHf)&l}uDR+!#MKXi@%uHV{^YLb+f1dS?} z02coHqJl4+a6%W1?fMkiT%o2F9BxB>Ga82anTb&ejV@U;|FjZUzQR};=2Dx`2lYe= zKG2Oa(lU&V0Nh<;rthukw^qou=2m8BJspjEdHq5u(=p*Ux>2M+%cG~}s$!O*5qH$Y zD`#VeX#**&OMH)xi)shBF|NeGSJI&Zip#!9l5c-D-J_7B71@RrrIj@DY3MZg^2w^~Bv$KBmC2kjddEZL;nJzo_jI*!)`mdl#d_z_4~DIAA38KGeb`k~_JwrmbgG z8tlmF-5_SxMMq%&C7o7RO0|W01eNC@*}ZEh;1dpM4~uh7dcB?ZHsuD}*1SW#<(U`L z)5~x{J8`^8WTqHfFK#C)3!rGnW;ENI&Z-o?8ds4cq^Vfwj0r?Zu6>wP|+Rv z=<*ki7MxNkLqv9=?Gr1p{dsX%$sKBMIPSPnEoX&49Vca*bclxud+~W*Sg}I-l8?gu z)AIa7GlKfv>Q?YJaiads_F5uD5{*&+QhRmz1g`0Y%vd7u}X6(y|NKIC2#*Y{&rhW ztmn7rrCIGsv5Oe@e?_-SzFCbL9-O;4i~{=-!aaAlyyjF(vQn z&|zks7l?vm*}nDJZyae+PmHWma~Kw9sl%5{^!N?ofvq!J*h{EggaX}ycKF%1zu>ED z*f^fOn9RRCkGDj81SNKHszchr0~s^-z9ztoY&7jUhJLcAJ?J(vtrEW(BYclE2-$6f z;5o10=XUfyVU~2t`@>Wh90YdrdqYkYpIM#aq_ffcZUEH9GtoJtL8IAnGd9Yml@guY z2u}3kjN#kdVm>i5?Myq#M71!oBZepQ?h@*w#L7`^bQDPM)|&s%wcP(MzmJ$S`_v{ckJx1 z2G|*j0y*VUV)_!Qz7_SZi-B0GE|=)%^r%~G(_}uu@$)|0O_|(5H|zG3Y}vr6N$+Rn zoh$cM+GeX^CfA`ifr}>Fns|zPPTjFfD$**kA)RLuD-JMOZ?{u&v;MD*ry3KatWuiB z_+#TQac^{$vtgI~Xffc1DYP^^P>1G+MvLWm(#9wMJsz=W|Kn>U;IH3xn6}xgnlC&6 z@{5d-)U~^X)2Ps?mnzcZC;4+dl%>RvC&bsEKSw%o=8V%oOhYeNz)Ngs_-33&s~T&R zezH`}ZEx46a69I~f=z*tRO1dR_vgNLwkzBSo9cG57$p!sALZlNo*JZUSBEK}d|7t$ z4`Z^M9J}L)F$YUp#7L({O*?^qe9nOKHx+T}!0l4lf|@iia$DiTKJyn)v+-MNNgxb4 zAq=sYP*#dZ7}omgJVO68va;xlxiSB}ej^P{W*nud$g$7SulKoRZWu`gDH z?F>LI)lVRl#z-Rdc?7=JN0pBRj|m9xYDvc?1UB%b7IT+KL+E^Azab)k;jZ7`v0f9(8Y26OBXHzy%vy@~0r$;^E$AXz3X*VN0 z4ouhDg^vUaQ=|UGUAgq~|K>{>ecs__Su`}Mby!z=zWo)9&lSKiVf4dCFt6wxozi0H zX7Kw+&v1&n-{=z|CI_9i)0g27m_9MNoZKN$JIRUZpDU#PMb}g&UOxEsfzVJN;n8P$ zQh_&u4H+_Gb?{b&=pGMyDA8@}s&?$mGv&~Gv%sp}tcSKpmE>-w;qln;zP%PGdn0L` z+$mY;y$!d{6Hz&yEl&_%6OelRg9Wjb&LNUhBLe%yydq5Nos9YF|12WIS{n<_^UPVUzi} z)uO6jMetQW|Mr(JyOZqhc4kp zZ>RP0iMC@OpayAaPYzC1KO3&UgI@-JhBN)unt>ND0?oYdbLey`q8v89i!(&|WWUE~ z#4=AmHE{7eW^@yig6L`~)NiP{gbJqHI-Q{XGKZWHD|)4mdLeAcYAybJ{ig@7$#i_! ze4XP@vnkL!%dSYyKQbsG^CPr#!S5w73!$ zlCwvoJK-A?fsH6xX22_cM{ z?b$OG)93jTZ5(22U9TfPWuI0UsFJSsn{tqnSLiS1-o zm*5O4-kEGNbL#Uf#N6h*pO`I7-<|Ep|K(kxX_P)$LIkDTgKxmmsw|9by=+?OGFyW! zjU>2_^f#2D$I;tbQw#EKt-o4m_-Nw^%}~Hii2DtZ){c&(+q$Xx1n$uGdwWIruWr%S z#YSb;8lQZTZ3%@0{$ajoZs2LRcw*c?G{4s2%nDHpoyV(7o3jHKt*ZW^fbb;IaGZsi%4p%9v!Lvz5e z##5?WG{}N-3|6ld|4Vkr9d1N#Lw?MbKvbI<6sCw#4we?24mAuf2F@~dpRy*j()CYM zn^(IRQ4YI#{{~XZ^jv<#&EATRQzn9+kn<)6j6r-8UL)`W%#m8o*x>$~AqGZN_DyFg z9JeppopgP@D7p%AY(o;mGjD4pkquESouu7auL%%lUN!3y7V)9A9YS$65^r<=qe(y# zzjegmcZgU`ZousW?FnW|%Z{{$kR3BrSf8m*nXBP=aN!cA1dmNU4EcBdsJU3DOE@*gni&_!J@Aa zYobcCEjqV8u}V+Bsi+J#01d4aJd9~yNJPS3*f2K)n#$#UB+H=XW6k%W$vRwpAPnk{wNp3+t)P=a4#UAHj?7fcBTsW=UoN+Y#?r zT*~Y5{)n=vp@PQm*76+i^#eARya(jd^&k zpAFA2pKXJmBWzI&-XBe?;p=Z^PWPV=t}sFs%Lm-v^MCg|tGQv)Z7@Vo#_;$5?%Tao zSZ4+!?)xnm0bXUK&ns^&*8ej0}al^^>4cZ-A4o*D6h!Z=DY z-b||}eVdP!_a@pwr@5XBm$JOZ`|5Y* GU;Y=Y0)8a` From 21d2b1f25654467d8dc9726a6b4b37c9e56391b7 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 30 Mar 2025 16:51:04 +0300 Subject: [PATCH 109/259] deploy --- .env.example | 2 +- .github/workflows/php-build-and-deploy.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.env.example b/.env.example index 44de3e4..835156e 100644 --- a/.env.example +++ b/.env.example @@ -1,4 +1,4 @@ -APP_NAME=NewSpace +APP_NAME=HolyShift APP_ENV=local APP_KEY= APP_DEBUG=true diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index a6769dc..be81361 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshifts_8 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshifts_9 flavor: | latest=false tags: | From 97975f9a9ffa7e0649212204b3aa50e30bfc9a6d Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 6 Apr 2025 09:33:08 +0300 Subject: [PATCH 110/259] pusdh and deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Resources/DepartmentResource.php | 16 +++++++- app/Resources/TeamResource.php | 44 ++++++++++++++++------ app/Services/RecurringEvents.php | 4 +- lang/he.json | 1 + 5 files changed, 51 insertions(+), 16 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index be81361..6b09c55 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshifts_9 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshifts_7 flavor: | latest=false tags: | diff --git a/app/Resources/DepartmentResource.php b/app/Resources/DepartmentResource.php index 076c2b7..489a267 100644 --- a/app/Resources/DepartmentResource.php +++ b/app/Resources/DepartmentResource.php @@ -59,7 +59,12 @@ public static function form(Form $form): Form return [$user->userable_id => $user->displayName]; }) ) + ->placeholder(__('Select commander')) ->optionsLimit(Soldier::count()) + ->getSearchResultsUsing(fn ($search) => User::all() + ->filter(fn (User $user) => str_contains($user->displayName, $search)) + ->mapWithKeys(fn (User $user) => [$user->userable_id => $user->displayName]) + ->toArray()) ->searchable(), ])->columns(2), @@ -79,7 +84,16 @@ public static function table(Table $table): Table return $state->last_name.' '.$state->first_name; }) ->label(__('Commander')) - ->searchable() + ->searchable( + query: function ($query, $search) { + $query->whereHas('commander', function ($query) use ($search) { + $query->whereHas('user', function ($query) use ($search) { + $query->where('first_name', 'like', "%{$search}%") + ->orWhere('last_name', 'like', "%{$search}%"); + }); + }); + } + ) ->sortable(), ]) ->modifyQueryUsing(function (Builder $query) { diff --git a/app/Resources/TeamResource.php b/app/Resources/TeamResource.php index 14f5b4d..5f9362a 100644 --- a/app/Resources/TeamResource.php +++ b/app/Resources/TeamResource.php @@ -57,9 +57,7 @@ public static function form(Form $form): Form ->options( fn () => Cache::remember('users', 30 * 60, function () { return User::all(); - })->mapWithKeys(function ($user) { - return [$user->userable_id => $user->displayName]; - }) + })->mapWithKeys(fn ($user) => [$user->userable_id => $user->displayName]) ) ->live() ->afterStateUpdated(function ($state, Get $get, Set $set) { @@ -68,13 +66,22 @@ public static function form(Form $form): Form } }) ->optionsLimit(Soldier::count()) + ->placeholder(__('Select commander')) ->searchable() + ->getSearchResultsUsing(fn ($search) => User::all() + ->filter(fn ($user) => str_contains($user->displayName, $search)) + ->mapWithKeys(fn ($user) => [$user->userable_id => $user->displayName]) + ->toArray()) ->required(), Select::make('department_id') ->label(__('Department')) ->relationship('department') - ->options(Department::all()->pluck('name', 'id')) + ->options(Department::all()->pluck('name', 'id') ?? []) ->searchable() + ->getSearchResultsUsing(fn ($search) => Department::all() + ->filter(fn (Department $department): bool => str_contains($department->name, $search)) + ->mapWithKeys(fn (Department $department): array => [$department->id => $department->name]) + ->toArray()) ->default(request()->input('department_id')) ->required(), Select::make('members') @@ -82,22 +89,26 @@ public static function form(Form $form): Form ->options( fn (Get $get) => Cache::remember('users', 30 * 60, function () { return User::all(); - })->filter(function ($user) use ($get): bool { - return $user->userable_id !== (int) $get('commander_id'); - })->mapWithKeys(function ($user) { - return [$user->userable_id => $user->displayName]; }) + ->filter(function ($user) use ($get): bool { + return $user->userable_id !== (int) $get('commander_id'); + }) + ->mapWithKeys(fn ($user) => [$user->userable_id => $user->displayName]) ) ->formatStateUsing(function (?Team $team, string $operation) { return $operation === 'edit' ? - collect($team->members)->map(fn (Soldier $soldier) => $soldier->id) : - null; + collect($team->members)->map(fn (Soldier $soldier) => $soldier->id) : + null; }) ->live() ->optionsLimit(Soldier::count()) ->placeholder(__('Add a team member')) ->multiple() - ->searchable(), + ->searchable() + ->getSearchResultsUsing(fn ($search) => User::all() + ->filter(fn ($user) => str_contains($user->displayName, $search)) + ->mapWithKeys(fn ($user) => [$user->userable_id => $user->displayName]) + ->toArray()), ])->columns(2), ]); } @@ -116,7 +127,16 @@ public static function table(Table $table): Table return $state->last_name.' '.$state->first_name; }) ->label(__('Commander')) - ->searchable() + ->searchable( + query: function ($query, $search) { + $query->whereHas('commander', function ($query) use ($search) { + $query->whereHas('user', function ($query) use ($search) { + $query->where('first_name', 'like', "%{$search}%") + ->orWhere('last_name', 'like', "%{$search}%"); + }); + }); + } + ) ->sortable(), TextColumn::make('department.name') ->label(__('Department')) diff --git a/app/Services/RecurringEvents.php b/app/Services/RecurringEvents.php index 812bb18..5ebc533 100644 --- a/app/Services/RecurringEvents.php +++ b/app/Services/RecurringEvents.php @@ -151,7 +151,7 @@ protected function createShifts(array $dates) $parallelWeight = Task::where([['type', $shiftType], ['kind', TaskKind::WEEKEND->value]])->pluck('parallel_weight')->first(); $parallelWeight ? $shift->parallel_weight = $parallelWeight - : Notification::make() + : (auth()->user() ? Notification::make() ->title(__('Update parallel weight of holiday shift')) ->persistent() ->body( @@ -161,7 +161,7 @@ protected function createShifts(array $dates) 'start_date' => $shift->start_date, ]) ) - ->sendToDatabase(auth()->user(), true); + ->sendToDatabase(auth()->user(), true) : null); } $shift->save(); } diff --git a/lang/he.json b/lang/he.json index 7ebb270..b7f0e9f 100644 --- a/lang/he.json +++ b/lang/he.json @@ -217,6 +217,7 @@ "Select from dates": "בחר מתאריך", "Select month":"בחר חודש", "Select a soldier":"בחר חייל", + "Select commander":"בחר מפקד", "Select parameter to filter":"בחר פרמטר לפילטור", "Select year":"בחר שנה", "Select qualifications":"בחר הסמכות", From 6cb8a35a219a4a2cf386fc679a2446225d8dfd0d Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 6 Apr 2025 12:54:38 +0300 Subject: [PATCH 111/259] pusdh and deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- .../SoldierResource/Pages/ListSoldiers.php | 50 +++++++++++++++---- 2 files changed, 41 insertions(+), 11 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 6b09c55..a6769dc 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshifts_7 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshifts_8 flavor: | latest=false tags: | diff --git a/app/Resources/SoldierResource/Pages/ListSoldiers.php b/app/Resources/SoldierResource/Pages/ListSoldiers.php index 4b678f7..0511064 100644 --- a/app/Resources/SoldierResource/Pages/ListSoldiers.php +++ b/app/Resources/SoldierResource/Pages/ListSoldiers.php @@ -72,22 +72,52 @@ protected function getHeaderActions(): array $selectedCourse = $data['course']; $updateData = []; $fields = ['max_shifts', 'max_nights', 'max_weekends', 'max_alerts', 'max_in_parallel', 'capacity', 'qualifications']; - + foreach ($fields as $field) { - if (isset($data[$field]) && ! ($field === 'qualifications' && empty($data[$field]))) { + if (isset($data[$field]) && !($field === 'qualifications' && empty($data[$field]))) { $updateData[$field] = $data[$field]; } } - if (! empty($updateData)) { + + if (!empty($updateData)) { $soldiers = Soldier::where('course', $selectedCourse)->get(); $soldiers->map(function ($soldier) use ($updateData) { - collect($updateData)->map(function ($value, $key) use ($soldier) { - $soldier->{$key} = $value; - }); - $soldier->save(); - }); - } - }), + foreach ($updateData as $key => $value) { + if ($key === 'qualifications') { + $currentQualifications = $soldier->{$key} ?? []; + if (is_array($currentQualifications)) { + $soldier->{$key} = array_unique(array_merge($currentQualifications, (array) $value)); + } else { + $soldier->{$key} = $currentQualifications . ',' . $value; + } + } else { + $soldier->{$key} = $value; + } + } + $soldier->save(); + }); + } + }), + // ->action(function (array $data) { + // $selectedCourse = $data['course']; + // $updateData = []; + // $fields = ['max_shifts', 'max_nights', 'max_weekends', 'max_alerts', 'max_in_parallel', 'capacity', 'qualifications']; + + // foreach ($fields as $field) { + // if (isset($data[$field]) && ! ($field === 'qualifications' && empty($data[$field]))) { + // $updateData[$field] = $data[$field]; + // } + // } + // if (! empty($updateData)) { + // $soldiers = Soldier::where('course', $selectedCourse)->get(); + // $soldiers->map(function ($soldier) use ($updateData) { + // collect($updateData)->map(function ($value, $key) use ($soldier) { + // $soldier->{$key} = $value; + // }); + // $soldier->save(); + // }); + // } + // }), ]; } } From e871af47e4e4c74feabaa5bb333def91b5840373 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Mon, 7 Apr 2025 12:15:43 +0300 Subject: [PATCH 112/259] pusdh and deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Services/RecurringEvents.php | 32 +++++++++++----------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index a6769dc..be81361 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshifts_8 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshifts_9 flavor: | latest=false tags: | diff --git a/app/Services/RecurringEvents.php b/app/Services/RecurringEvents.php index 5ebc533..9dc72e7 100644 --- a/app/Services/RecurringEvents.php +++ b/app/Services/RecurringEvents.php @@ -30,7 +30,7 @@ public function recurringTask(): void $tasks = Task::get(); $tasks->filter(function ($task) { return $task->recurring['type'] !== 'Daily range' && $task->recurring['type'] !== 'One time'; - })->map(fn ($task) => $this->switchTasks($task)); + })->map(fn($task) => $this->switchTasks($task)); } public function oneTimeTask(Task $task) @@ -93,7 +93,7 @@ protected function getDatesOfMonth() protected function addTimeToDate($date) { - return Carbon::parse($date->format('Y-m-d').' '.$this->task['start_hour']); + return Carbon::parse($date->format('Y-m-d') . ' ' . $this->task['start_hour']); } protected function calculateEndDateTime($startDate) @@ -126,14 +126,14 @@ protected function createPeriod() { return $this->task->recurring['type'] == 'Daily range' ? CarbonPeriod::between(max($this->task['recurring']['start_date'], Carbon::tomorrow()), $this->task['recurring']['end_date']) : - CarbonPeriod::between(max($this->month->copy()->startOfMonth(), Carbon::tomorrow()), $this->month->copy()->endOfMonth()); + CarbonPeriod::between($this->month->copy()->startOfMonth(), $this->month->copy()->endOfMonth()); } protected function createShifts(array $dates) { collect($dates)->map(function ($date) { if ( - ! Shift::where('task_id', '=', $this->task['id']) + !Shift::where('task_id', '=', $this->task['id']) ->where('start_date', $date) ->where('end_date', $this->calculateEndDateTime($date)) ->get() @@ -150,18 +150,18 @@ protected function createShifts(array $dates) $shiftType = Task::where('id', $shift->task_id)->pluck('type')->first(); $parallelWeight = Task::where([['type', $shiftType], ['kind', TaskKind::WEEKEND->value]])->pluck('parallel_weight')->first(); $parallelWeight ? - $shift->parallel_weight = $parallelWeight - : (auth()->user() ? Notification::make() - ->title(__('Update parallel weight of holiday shift')) - ->persistent() - ->body( - __('Holiday shift notification', [ - 'user' => auth()->user()->displayName, - 'task' => $shiftType, - 'start_date' => $shift->start_date, - ]) - ) - ->sendToDatabase(auth()->user(), true) : null); + $shift->parallel_weight = $parallelWeight + : (auth()->user() ? Notification::make() + ->title(__('Update parallel weight of holiday shift')) + ->persistent() + ->body( + __('Holiday shift notification', [ + 'user' => auth()->user()->displayName, + 'task' => $shiftType, + 'start_date' => $shift->start_date, + ]) + ) + ->sendToDatabase(auth()->user(), true) : null); } $shift->save(); } From 4145740a5fe2025dc3b9c4d1efb59089fa7f7b3b Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Mon, 7 Apr 2025 12:16:21 +0300 Subject: [PATCH 113/259] pusdh and deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index be81361..66a8097 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshifts_9 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshifts_10 flavor: | latest=false tags: | From 97b1eef53b7b0cf1cbc0fb885ee5b7bc5f1c2e71 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Tue, 8 Apr 2025 16:59:13 +0300 Subject: [PATCH 114/259] pusdh and deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Services/Algorithm.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 66a8097..f47dbdc 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshifts_10 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshifts_11 flavor: | latest=false tags: | diff --git a/app/Services/Algorithm.php b/app/Services/Algorithm.php index 7ec4598..e2697c3 100644 --- a/app/Services/Algorithm.php +++ b/app/Services/Algorithm.php @@ -24,7 +24,7 @@ protected function getShiftWithTasks() ->filter(function (Shift $shift) { $range = new Range($shift->start_date, $shift->end_date); - return $range->isSameMonth(new Range(max($this->date->copy()->startOfMonth(), Carbon::tomorrow()), $this->date->copy()->endOfMonth())) + return $range->isSameMonth(new Range($this->date->copy()->startOfMonth(), $this->date->copy()->endOfMonth())) && $shift->task->kind !== TaskKind::INPARALLEL->value; }) ->map(fn (Shift $shift): ShiftService => Helpers::buildShift($shift)); From 857169464562390b3d8edf0a34e8647bedd7c072 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 11 May 2025 18:34:57 +0300 Subject: [PATCH 115/259] holshift_version_1 --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Exports/ShiftsExport.php | 5 +- app/Filament/Widgets/CalendarWidget.php | 44 ++--- app/Filament/Widgets/ChartWidget.php | 2 +- app/Livewire/MyDatabaseNotifications.php | 84 ++++----- app/Models/Shift.php | 172 +++++++++++------- app/Resources/ProfileResource.php | 9 +- app/Resources/SoldierResource.php | 19 +- .../SoldierResource/Pages/ListSoldiers.php | 54 ++---- app/Resources/TaskResource.php | 4 +- app/Services/Algorithm.php | 4 +- app/Services/Charts.php | 6 +- app/Services/ConcurrentTasks.php | 2 +- app/Services/DailyShiftNotification.php | 2 +- app/Services/Helpers.php | 12 +- app/Services/RecurringEvents.php | 34 ++-- ...2024_05_30_094012_create_soldier_table.php | 2 + .../2024_05_30_100244_create_task_table.php | 8 +- database/seeders/DatabaseSeeder.php | 2 +- lang/he.json | 6 +- public/images/logo.png | Bin 88600 -> 76636 bytes public/js/app/components/apexcharts.js | 170 ++++------------- public/js/filament/support/async-alpine.js | 2 +- tests/Feature/CalendarWidgetTest.php | 4 +- tests/Unit/HelpersServiceTest.php | 6 +- 25 files changed, 294 insertions(+), 361 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index f47dbdc..7125bf9 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshifts_11 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshift_version_1 flavor: | latest=false tags: | diff --git a/app/Exports/ShiftsExport.php b/app/Exports/ShiftsExport.php index 6864ba6..4690216 100644 --- a/app/Exports/ShiftsExport.php +++ b/app/Exports/ShiftsExport.php @@ -4,7 +4,6 @@ use App\Enums\TaskKind; use App\Models\Shift; -use App\Models\Task; use App\Models\User; use Illuminate\Support\Carbon; use Maatwebsite\Excel\Concerns\FromCollection; @@ -23,10 +22,10 @@ class ShiftsExport implements FromCollection, ShouldAutoSize, WithHeadings, With public function __construct($month) { + $this->month = $month; $this->query = Shift::whereNotNull('soldier_id') ->whereBetween('start_date', [Carbon::parse($this->month)->startOfMonth(), Carbon::parse($this->month)->endOfMonth()]) ->get(); - $this->month = $month; } public function collection() @@ -34,7 +33,7 @@ public function collection() return $this->query ->sortBy('start_date') ->map(function ($shift) { - $task = Task::find($shift->task_id); + $task = $shift->task()->withTrashed()->first(); return [ __('Shift name') => $task->name, diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index c46456e..9907308 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -161,27 +161,29 @@ protected function headerActions(): array return [$this->createConstraintAction()]; } } else { - if (Task::exists()) { - $actions = [ - ActionGroup::make([ - $this->downloadAssignmentsAction(), - Action::make('Create shifts') - ->action(fn () => $this->runEvents()) - ->label(__('Create shifts')) - ->icon('heroicon-o-clipboard-document-check'), - Action::make('Shifts assignment') - ->action(fn () => $this->runAlgorithm()) - ->label(__('Shifts assignment and Parallel shifts')) - ->icon('heroicon-o-play'), - Action::make('Reset assignment') - ->action(fn () => $this->resetShifts()) - ->label(__('Reset assignment')) - ->icon('heroicon-o-arrow-path'), - ]) - ->visible(in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray()) - || in_array('manager', auth()->user()->getRoleNames()->toArray())), - ]; - } + $hasActiveTasks = Task::withTrashed()->whereNull('deleted_at')->exists(); + + $actions = [ + ActionGroup::make([ + $this->downloadAssignmentsAction(), + Action::make('Create shifts') + ->action(fn () => $this->runEvents()) + ->label(__('Create shifts')) + ->icon('heroicon-o-clipboard-document-check') + ->visible($hasActiveTasks), + Action::make('Shifts assignment') + ->action(fn () => $this->runAlgorithm()) + ->label(__('Shifts assignment and Parallel shifts')) + ->icon('heroicon-o-play') + ->visible($hasActiveTasks), + Action::make('Reset assignment') + ->action(fn () => $this->resetShifts()) + ->label(__('Reset assignment')) + ->icon('heroicon-o-arrow-path'), + ]) + ->visible(in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray()) + || in_array('manager', auth()->user()->getRoleNames()->toArray())), + ]; } if ($this->filter) { return array_merge( diff --git a/app/Filament/Widgets/ChartWidget.php b/app/Filament/Widgets/ChartWidget.php index fc61792..27f3001 100644 --- a/app/Filament/Widgets/ChartWidget.php +++ b/app/Filament/Widgets/ChartWidget.php @@ -65,7 +65,7 @@ protected function getFormSchema(): array Select::make('course') ->default(1) ->options( - Soldier::pluck('course', 'course')->unique()->sortBy('course')->all() + Soldier::pluck('course', 'course')->sort()->unique()->all() ) ->placeholder(__('Select course')) ->label(__('Course')), diff --git a/app/Livewire/MyDatabaseNotifications.php b/app/Livewire/MyDatabaseNotifications.php index 2001ba4..b33f234 100644 --- a/app/Livewire/MyDatabaseNotifications.php +++ b/app/Livewire/MyDatabaseNotifications.php @@ -63,11 +63,11 @@ protected function shiftAssignmentConfirmExchange($soldierAId, $soldierBId, $shi 'Shifts assignment notification of exchanging shifts for first soldier', [ 'soldierAName' => $soldierA->user->displayName, - 'shiftAName' => $shiftA->task->name, + 'shiftAName' => $shiftA->task()->withTrashed()->first()->name, 'shiftAStart' => $shiftA->start_date, 'shiftAEnd' => $shiftA->end_date, 'soldierBName' => $soldierB->user->displayName, - 'shiftBName' => $shiftB->task->name, + 'shiftBName' => $shiftB->task()->withTrashed()->first()->name, 'shiftBStart' => $shiftB->start_date, 'shiftBEnd' => $shiftB->end_date, 'shiftsAssignmentName' => auth()->user()->displayName, @@ -82,11 +82,11 @@ protected function shiftAssignmentConfirmExchange($soldierAId, $soldierBId, $shi 'Shifts assignment notification of exchanging shifts for second soldier', [ 'soldierBName' => $soldierB->user->displayName, - 'shiftBName' => $shiftB->task->name, + 'shiftBName' => $shiftB->task()->withTrashed()->first()->name, 'shiftBStart' => $shiftB->start_date, 'shiftBEnd' => $shiftB->end_date, 'soldierAName' => $soldierA->user->displayName, - 'shiftAName' => $shiftA->task->name, + 'shiftAName' => $shiftA->task()->withTrashed()->first()->name, 'shiftAStart' => $shiftA->start_date, 'shiftAEnd' => $shiftA->end_date, 'shiftsAssignmentName' => auth()->user()->displayName, @@ -101,12 +101,12 @@ protected function shiftAssignmentConfirmExchange($soldierAId, $soldierBId, $shi 'Shifts assignment notification of exchanging shifts for commander', [ 'commanderName' => User::find($requesterId)->displayName, - 'shiftAName' => $shiftA->task->name, + 'shiftAName' => $shiftA->task()->withTrashed()->first()->name, 'soldierAName' => $soldierA->user->displayName, 'shiftAStart' => $shiftA->start_date, 'shiftAEnd' => $shiftA->end_date, 'soldierBName' => $soldierB->user->displayName, - 'shiftBName' => $shiftB->task->name, + 'shiftBName' => $shiftB->task()->withTrashed()->first()->name, 'shiftBStart' => $shiftB->start_date, 'shiftBEnd' => $shiftB->end_date, 'shiftsAssignmentName' => auth()->user()->displayName, @@ -124,12 +124,12 @@ protected function shiftAssignmentConfirmExchange($soldierAId, $soldierBId, $shi 'Shifts assignment notification of exchanging shifts for shifts assignment', [ 'shiftsAssignmentName' => $shiftsAssignment->displayName, - 'shiftAName' => $shiftA->task->name, + 'shiftAName' => $shiftA->task()->withTrashed()->first()->name, 'soldierAName' => $soldierA->user->displayName, 'shiftAStart' => $shiftA->start_date, 'shiftAEnd' => $shiftA->end_date, 'soldierBName' => $soldierB->user->displayName, - 'shiftBName' => $shiftB->task->name, + 'shiftBName' => $shiftB->task()->withTrashed()->first()->name, 'shiftBStart' => $shiftB->start_date, 'shiftBEnd' => $shiftB->end_date, 'shiftsAssignment2Name' => auth()->user()->displayName, @@ -161,11 +161,11 @@ protected function commanderConfirmExchange($soldierAId, $soldierBId, $shiftAId, [ 'shiftsAssignmentName' => $shiftsAssignment->displayName, 'soldierAName' => Soldier::find($soldierAId)->user->displayName, - 'shiftAName' => $shiftA->task->name, + 'shiftAName' => $shiftA->task()->withTrashed()->first()->name, 'shiftAStart' => $shiftA->start_date, 'shiftAEnd' => $shiftA->end_date, 'soldierBName' => Soldier::find($soldierBId)->user->displayName, - 'shiftBName' => $shiftB->task->name, + 'shiftBName' => $shiftB->task()->withTrashed()->first()->name, 'shiftBStart' => $shiftB->start_date, 'shiftBEnd' => $shiftB->end_date, ] @@ -221,11 +221,11 @@ protected function soldierConfirmExchange($soldierAId, $soldierBId, $shiftAId, $ [ 'commanderName' => $commander->displayName, 'soldierAName' => $soldierA->user->displayName, - 'shiftAName' => $shiftA->task->name, + 'shiftAName' => $shiftA->task()->withTrashed()->first()->name, 'shiftAStart' => $shiftA->start_date, 'shiftAEnd' => $shiftA->end_date, 'soldierBName' => $soldierB->user->displayName, - 'shiftBName' => $shiftB->task->name, + 'shiftBName' => $shiftB->task()->withTrashed()->first()->name, 'shiftBStart' => $shiftB->start_date, 'shiftBEnd' => $shiftB->end_date, ] @@ -294,10 +294,10 @@ protected function shiftAssignmentDenyExchange($soldierAId, $soldierBId, $shiftA 'Shifts assignment notification of deny exchanging shifts for first soldier', [ 'soldierAName' => $soldierA->user->displayName, - 'shiftAName' => $shiftA->task->name, + 'shiftAName' => $shiftA->task()->withTrashed()->first()->name, 'shiftAStart' => $shiftA->start_date, 'shiftAEnd' => $shiftA->end_date, - 'shiftBName' => $shiftB->task->name, + 'shiftBName' => $shiftB->task()->withTrashed()->first()->name, 'soldierBName' => $soldierB->user->displayName, 'shiftBStart' => $shiftB->start_date, 'shiftBEnd' => $shiftB->end_date, @@ -314,10 +314,10 @@ protected function shiftAssignmentDenyExchange($soldierAId, $soldierBId, $shiftA [ 'soldierBName' => $soldierB->user->displayName, 'soldierAName' => $soldierA->user->displayName, - 'shiftAName' => $shiftA->task->name, + 'shiftAName' => $shiftA->task()->withTrashed()->first()->name, 'shiftAStart' => $shiftA->start_date, 'shiftAEnd' => $shiftA->end_date, - 'shiftBName' => $shiftB->task->name, + 'shiftBName' => $shiftB->task()->withTrashed()->first()->name, 'shiftBStart' => $shiftB->start_date, 'shiftBEnd' => $shiftB->end_date, 'shiftsAssignmentName' => auth()->user()->displayName, @@ -333,11 +333,11 @@ protected function shiftAssignmentDenyExchange($soldierAId, $soldierBId, $shiftA 'Shifts assignment notification of deny exchanging shifts for commander', [ 'commanderName' => User::find($requesterId)->displayName, - 'shiftAName' => $shiftA->task->name, + 'shiftAName' => $shiftA->task()->withTrashed()->first()->name, 'soldierAName' => $soldierA->user->displayName, 'shiftAStart' => $shiftA->start_date, 'shiftAEnd' => $shiftA->end_date, - 'shiftBName' => $shiftB->task->name, + 'shiftBName' => $shiftB->task()->withTrashed()->first()->name, 'soldierBName' => $soldierB->user->displayName, 'shiftBStart' => $shiftB->start_date, 'shiftBEnd' => $shiftB->end_date, @@ -356,11 +356,11 @@ protected function shiftAssignmentDenyExchange($soldierAId, $soldierBId, $shiftA 'Shifts assignment notification of deny exchanging shifts for shifts assignment', [ 'shiftsAssignmentName' => $shiftsAssignment->displayName, - 'shiftAName' => $shiftA->task->name, + 'shiftAName' => $shiftA->task()->withTrashed()->first()->name, 'soldierAName' => $soldierA->user->displayName, 'shiftAStart' => $shiftA->start_date, 'shiftAEnd' => $shiftA->end_date, - 'shiftBName' => $shiftB->task->name, + 'shiftBName' => $shiftB->task()->withTrashed()->first()->name, 'soldierBName' => $soldierB->user->displayName, 'shiftBStart' => $shiftB->start_date, 'shiftBEnd' => $shiftB->end_date, @@ -386,11 +386,11 @@ protected function commanderDenyExchange($soldierAId, $soldierBId, $shiftAId, $s 'Commander notification of deny exchanging shifts for the first soldier', [ 'soldierAName' => $soldierA->user->displayName, - 'shiftAName' => $shiftA->task->name, + 'shiftAName' => $shiftA->task()->withTrashed()->first()->name, 'shiftAStart' => $shiftA->start_date, 'shiftAEnd' => $shiftA->end_date, 'soldierBName' => $soldierB->user->displayName, - 'shiftBName' => $shiftB->task->name, + 'shiftBName' => $shiftB->task()->withTrashed()->first()->name, 'shiftBStart' => $shiftB->start_date, 'shiftBEnd' => $shiftB->end_date, 'commanderName' => $soldierA->team->commander->user->displayName, @@ -406,10 +406,10 @@ protected function commanderDenyExchange($soldierAId, $soldierBId, $shiftAId, $s [ 'soldierBName' => $soldierB->user->displayName, 'soldierAName' => $soldierA->user->displayName, - 'shiftBName' => $shiftB->task->name, + 'shiftBName' => $shiftB->task()->withTrashed()->first()->name, 'shiftBStart' => $shiftB->start_date, 'shiftBEnd' => $shiftB->end_date, - 'shiftAName' => $shiftA->task->name, + 'shiftAName' => $shiftA->task()->withTrashed()->first()->name, 'shiftAStart' => $shiftA->start_date, 'shiftAEnd' => $shiftA->end_date, 'commanderName' => $soldierA->team->commander->user->displayName, @@ -425,11 +425,11 @@ protected function commanderDenyExchange($soldierAId, $soldierBId, $shiftAId, $s 'Commander notification of deny exchanging shifts for the first soldier', [ 'soldierAName' => $soldierA->user->displayName, - 'shiftAName' => $shiftA->task->name, + 'shiftAName' => $shiftA->task()->withTrashed()->first()->name, 'shiftAStart' => $shiftA->start_date, 'shiftAEnd' => $shiftA->end_date, 'soldierBName' => $soldierB->user->displayName, - 'shiftBName' => $shiftB->task->name, + 'shiftBName' => $shiftB->task()->withTrashed()->first()->name, 'shiftBStart' => $shiftB->start_date, 'shiftBEnd' => $shiftB->end_date, 'commanderName' => $soldierA->team->commander->user->displayName, @@ -453,10 +453,10 @@ protected function soldierDenyExchange($soldierAId, $soldierBId, $shiftAId, $shi 'Soldier notification of deny exchange shift request', [ 'soldierAName' => $soldierA->user->displayName, - 'shiftBName' => $shiftB->task->name, + 'shiftBName' => $shiftB->task()->withTrashed()->first()->name, 'shiftBStart' => $shiftB->start_date, 'shiftBEnd' => $shiftB->end_date, - 'shiftAName' => $shiftA->task->name, + 'shiftAName' => $shiftA->task()->withTrashed()->first()->name, 'shiftAStart' => $shiftA->start_date, 'shiftAEnd' => $shiftA->end_date, 'soldierBName' => $soldierB->user->displayName, @@ -496,7 +496,7 @@ protected function shiftAssignmentConfirmChange($shiftId, $soldierId, $requester 'Shifts assignment notification of changing shifts for first soldier', [ 'soldierName' => $soldierA->user->displayName, - 'shiftName' => $shift->task->name, + 'shiftName' => $shift->task()->withTrashed()->first()->name, 'shiftStart' => $shift->start_date, 'shiftEnd' => $shift->end_date, 'shiftsAssignmentName' => auth()->user()->displayName, @@ -511,7 +511,7 @@ protected function shiftAssignmentConfirmChange($shiftId, $soldierId, $requester 'Shifts assignment notification of changing shifts for second soldier', [ 'soldierName' => $soldierB->user->displayName, - 'shiftName' => $shift->task->name, + 'shiftName' => $shift->task()->withTrashed()->first()->name, 'shiftStart' => $shift->start_date, 'shiftEnd' => $shift->end_date, 'shiftsAssignmentName' => auth()->user()->displayName, @@ -526,7 +526,7 @@ protected function shiftAssignmentConfirmChange($shiftId, $soldierId, $requester 'Shifts assignment notification of changing shifts for commander', [ 'commanderName' => User::find($requesterId)->displayName, - 'shiftName' => $shift->task->name, + 'shiftName' => $shift->task()->withTrashed()->first()->name, 'soldierAName' => $soldierA->user->displayName, 'shiftStart' => $shift->start_date, 'shiftEnd' => $shift->end_date, @@ -546,7 +546,7 @@ protected function shiftAssignmentConfirmChange($shiftId, $soldierId, $requester 'Shifts assignment notification of changing shifts for shifts assignment', [ 'shiftsAssignmentName' => $shiftsAssignment->displayName, - 'shiftName' => $shift->task->name, + 'shiftName' => $shift->task()->withTrashed()->first()->name, 'soldierAName' => $soldierA->user->displayName, 'shiftStart' => $shift->start_date, 'shiftEnd' => $shift->end_date, @@ -571,7 +571,7 @@ protected function commanderConfirmChange($shiftId, $soldierId) 'Request for shift change from shifts assignments', [ 'shiftsAssignmentName' => $shiftsAssignment->displayName, - 'shiftName' => $shift->task->name, + 'shiftName' => $shift->task()->withTrashed()->first()->name, 'soldierAName' => Soldier::find($shift->soldier_id)->user->displayName, 'shiftStart' => $shift->start_date, 'shiftEnd' => $shift->end_date, @@ -624,7 +624,7 @@ protected function soldierConfirmChange($shiftId, $soldierId) [ 'commanderName' => $commander->displayName, 'soldierAName' => $soldierA->user->displayName, - 'shiftName' => $shift->task->name, + 'shiftName' => $shift->task()->withTrashed()->first()->name, 'shiftStart' => $shift->start_date, 'shiftEnd' => $shift->end_date, 'soldierBName' => $soldierB->user->displayName, @@ -689,7 +689,7 @@ protected function shiftAssignmentDenyChange($shiftId, $soldierId, $requesterId, 'Shifts assignment notification of deny changing shifts for first soldier', [ 'soldierAName' => $soldierA->user->displayName, - 'shiftName' => $shift->task->name, + 'shiftName' => $shift->task()->withTrashed()->first()->name, 'shiftStart' => $shift->start_date, 'shiftEnd' => $shift->end_date, 'soldierBName' => $soldierB->user->displayName, @@ -706,7 +706,7 @@ protected function shiftAssignmentDenyChange($shiftId, $soldierId, $requesterId, [ 'soldierBName' => $soldierB->user->displayName, 'soldierAName' => $soldierA->user->displayName, - 'shiftName' => $shift->task->name, + 'shiftName' => $shift->task()->withTrashed()->first()->name, 'shiftStart' => $shift->start_date, 'shiftEnd' => $shift->end_date, 'shiftsAssignmentName' => auth()->user()->displayName, @@ -722,7 +722,7 @@ protected function shiftAssignmentDenyChange($shiftId, $soldierId, $requesterId, 'Shifts assignment notification of deny changing shifts for commander', [ 'commanderName' => User::find($requesterId)->displayName, - 'shiftName' => $shift->task->name, + 'shiftName' => $shift->task()->withTrashed()->first()->name, 'soldierAName' => $soldierA->user->displayName, 'shiftStart' => $shift->start_date, 'shiftEnd' => $shift->end_date, @@ -742,7 +742,7 @@ protected function shiftAssignmentDenyChange($shiftId, $soldierId, $requesterId, 'Shifts assignment notification of deny changing shifts for shifts assignment', [ 'shiftsAssignmentName' => $shiftsAssignment->displayName, - 'shiftName' => $shift->task->name, + 'shiftName' => $shift->task()->withTrashed()->first()->name, 'soldierAName' => $soldierA->user->displayName, 'shiftStart' => $shift->start_date, 'shiftEnd' => $shift->end_date, @@ -768,7 +768,7 @@ protected function commanderDenyChange($shiftId, $soldierId) 'Commander notification of deny changing shift request for the first soldier', [ 'soldierAName' => $soldierA->user->displayName, - 'shiftName' => $shift->task->name, + 'shiftName' => $shift->task()->withTrashed()->first()->name, 'shiftStart' => $shift->start_date, 'shiftEnd' => $shift->end_date, 'soldierBName' => $soldierB->user->displayName, @@ -785,7 +785,7 @@ protected function commanderDenyChange($shiftId, $soldierId) [ 'soldierBName' => $soldierB->user->displayName, 'soldierAName' => $soldierA->user->displayName, - 'shiftName' => $shift->task->name, + 'shiftName' => $shift->task()->withTrashed()->first()->name, 'shiftStart' => $shift->start_date, 'shiftEnd' => $shift->end_date, 'commanderName' => $soldierA->team->commander->user->displayName, @@ -801,7 +801,7 @@ protected function commanderDenyChange($shiftId, $soldierId) 'Commander notification of deny changing shift request for the first soldier', [ 'soldierAName' => $soldierA->user->displayName, - 'shiftName' => $shift->task->name, + 'shiftName' => $shift->task()->withTrashed()->first()->name, 'shiftStart' => $shift->start_date, 'shiftEnd' => $shift->end_date, 'soldierBName' => $soldierB->user->displayName, @@ -825,7 +825,7 @@ protected function soldierDenyChange($shiftId, $soldierId) 'Soldier notification of deny changing shift request', [ 'soldierAName' => $soldierA->user->displayName, - 'shiftName' => $shift->task->name, + 'shiftName' => $shift->task()->withTrashed()->first()->name, 'shiftStart' => $shift->start_date, 'shiftEnd' => $shift->end_date, 'soldierBName' => $soldierB->user->displayName, diff --git a/app/Models/Shift.php b/app/Models/Shift.php index 623b90c..3351de0 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -174,9 +174,9 @@ protected static function getOptions($shift): array 'matching' => __('Matching soldiers'), 'all' => __('All'), ]; - if ($shift->task->department_name) { + if ($shift->task()->withTrashed()->first()->department_name) { $options = collect($options) - ->put('department', '"'.$shift->task->department_name.'" '.__('Department')) + ->put('department', '"'.$shift->task()->withTrashed()->first()->department_name.'" '.__('Department')) ->toArray(); } $manual_assignment = new ManualAssignment($shift, 'me'); @@ -312,8 +312,8 @@ protected static function getOption($shift, $record) $shift = Helpers::buildShift($shift); return $soldier->isAvailableByConcurrentsShifts($shift) ? - __('Task').': '.Task::find(Shift::find($shift->id)->task_id)->name.'. '.__('Time').': '.__('From').' '.$shift->range->start.' '.__('To').' '.$shift->range->end : - '📌 '.__('Task').': '.Task::find(Shift::find($shift->id)->task_id)->name.'. '.__('Time').': '.__('From').' '.$shift->range->start.' '.__('To').' '.$shift->range->end; + __('Task').': '.Shift::find($shift->id)->task()->withTrashed()->first()->name.'. '.__('Time').': '.__('From').' '.$shift->range->start.' '.__('To').' '.$shift->range->end : + '📌 '.__('Task').': '.Shift::find($shift->id)->task()->withTrashed()->first()->name.'. '.__('Time').': '.__('From').' '.$shift->range->start.' '.__('To').' '.$shift->range->end; } protected static function shiftsAssignmentExchange($record, $shift) @@ -333,11 +333,11 @@ protected static function shiftsAssignmentSendExchangeNotifications($shiftA, $sh 'Shifts assignment notification of exchanging shifts for first soldier', [ 'soldierAName' => $soldierA->user->displayName, - 'shiftAName' => $shiftA->task->name, + 'shiftAName' => $shiftA->task()->withTrashed()->first()->name, 'shiftAStart' => $shiftA->start_date, 'shiftAEnd' => $shiftA->end_date, 'soldierBName' => $soldierB->user->displayName, - 'shiftBName' => $shiftB->task->name, + 'shiftBName' => $shiftB->task()->withTrashed()->first()->name, 'shiftBStart' => $shiftB->start_date, 'shiftBEnd' => $shiftB->end_date, 'shiftsAssignmentName' => auth()->user()->displayName, @@ -352,11 +352,11 @@ protected static function shiftsAssignmentSendExchangeNotifications($shiftA, $sh 'Shifts assignment notification of exchanging shifts for second soldier', [ 'soldierBName' => $soldierB->user->displayName, - 'shiftBName' => $shiftB->task->name, + 'shiftBName' => $shiftB->task()->withTrashed()->first()->name, 'shiftBStart' => $shiftB->start_date, 'shiftBEnd' => $shiftB->end_date, 'soldierAName' => $soldierA->user->displayName, - 'shiftAName' => $shiftA->task->name, + 'shiftAName' => $shiftA->task()->withTrashed()->first()->name, 'shiftAStart' => $shiftA->start_date, 'shiftAEnd' => $shiftA->end_date, 'shiftsAssignmentName' => auth()->user()->displayName, @@ -374,12 +374,12 @@ protected static function shiftsAssignmentSendExchangeNotifications($shiftA, $sh 'Shifts assignment notification of exchanging shifts for shifts assignment', [ 'shiftsAssignmentName' => $shiftsAssignment->displayName, - 'shiftAName' => $shiftA->task->name, + 'shiftAName' => $shiftA->task()->withTrashed()->first()->name, 'soldierAName' => $soldierA->user->displayName, 'shiftAStart' => $shiftA->start_date, 'shiftAEnd' => $shiftA->end_date, 'soldierBName' => $soldierB->user->displayName, - 'shiftBName' => $shiftB->task->name, + 'shiftBName' => $shiftB->task()->withTrashed()->first()->name, 'shiftBStart' => $shiftB->start_date, 'shiftBEnd' => $shiftB->end_date, 'shiftsAssignment2Name' => auth()->user()->displayName, @@ -402,11 +402,11 @@ protected static function commanderExchange($record, $shift) [ 'shiftsAssignmentName' => $shiftsAssignment->displayName, 'soldierAName' => Soldier::find($record->soldier_id)->user->displayName, - 'shiftAName' => $record->task->name, + 'shiftAName' => $record->task()->withTrashed()->first()->name, 'shiftAStart' => $record->start_date, 'shiftAEnd' => $record->end_date, 'soldierBName' => Soldier::find($shift->soldier_id)->user->displayName, - 'shiftBName' => $shift->task->name, + 'shiftBName' => $shift->task()->withTrashed()->first()->name, 'shiftBStart' => $shift->start_date, 'shiftBEnd' => $shift->end_date, ] @@ -457,10 +457,10 @@ protected static function soldierExchange($record, $shift) 'Request for shift exchange from soldier', [ 'soldierAName' => $user->displayName, - 'shiftAName' => $shift->task->name, + 'shiftAName' => $shift->task()->withTrashed()->first()->name, 'shiftAStart' => $shift->start_date, 'shiftAEnd' => $shift->end_date, - 'shiftBName' => $record->task->name, + 'shiftBName' => $record->task()->withTrashed()->first()->name, 'shiftBStart' => $record->start_date, 'shiftBEnd' => $record->end_date, 'soldierBName' => Soldier::find($record->soldier_id)->user->displayName, @@ -522,7 +522,7 @@ function ($record) use (&$soldiers) { ->schema( [ Placeholder::make(__('Task')) - ->content(Task::find($record->task_id)->name), + ->content($record->task()->withTrashed()->first()->name), Placeholder::make(__('Soldier')) ->content(Soldier::find($record->soldier_id)->user->displayName), Placeholder::make(__('Time')) @@ -622,7 +622,7 @@ protected static function shiftsAssignmentSendChangeNotifications($shift, $soldi 'Shifts assignment notification of changing shifts for first soldier', [ 'soldierName' => $soldierA->user->displayName, - 'shiftName' => $shift->task->name, + 'shiftName' => $shift->task()->withTrashed()->first()->name, 'shiftStart' => $shift->start_date, 'shiftEnd' => $shift->end_date, 'shiftsAssignmentName' => auth()->user()->displayName, @@ -637,7 +637,7 @@ protected static function shiftsAssignmentSendChangeNotifications($shift, $soldi 'Shifts assignment notification of changing shifts for second soldier', [ 'soldierName' => $soldierB->user->displayName, - 'shiftName' => $shift->task->name, + 'shiftName' => $shift->task()->withTrashed()->first()->name, 'shiftStart' => $shift->start_date, 'shiftEnd' => $shift->end_date, 'shiftsAssignmentName' => auth()->user()->displayName, @@ -655,7 +655,7 @@ protected static function shiftsAssignmentSendChangeNotifications($shift, $soldi 'Shifts assignment notification of changing shifts for shifts assignment', [ 'shiftsAssignmentName' => $shiftsAssignment->displayName, - 'shiftName' => $shift->task->name, + 'shiftName' => $shift->task()->withTrashed()->first()->name, 'soldierAName' => $soldierA->user->displayName, 'shiftStart' => $shift->start_date, 'shiftEnd' => $shift->end_date, @@ -679,7 +679,7 @@ protected static function commanderChange($shift, $soldierId) 'Request for shift change from shifts assignments', [ 'shiftsAssignmentName' => $shiftsAssignment->displayName, - 'shiftName' => $shift->task->name, + 'shiftName' => $shift->task()->withTrashed()->first()->name, 'soldierAName' => Soldier::find($shift->soldier_id)->user->displayName, 'shiftStart' => $shift->start_date, 'shiftEnd' => $shift->end_date, @@ -728,7 +728,7 @@ protected static function soldierChange($record, $soldierId) 'Request for shift change from soldier', [ 'soldierName' => $soldier->user->displayName, - 'shiftName' => $record->task->name, + 'shiftName' => $record->task()->withTrashed()->first()->name, 'shiftStart' => $record->start_date, 'shiftEnd' => $record->end_date, 'requestingSoldierName' => Soldier::find($record->soldier_id)->user->displayName, @@ -795,15 +795,40 @@ public static function getFilters($calendar) return [ section::make([ - Toggle::make('unassigned_shifts') - ->label(__('Unassigned shifts')) - ->live() - ->visible(fn (Get $get) => ! $get('reservists')), Toggle::make('reservists') ->label(__('Reservists')) ->live() - ->visible(fn (Get $get) => ! $get('unassigned_shifts')), + ->reactive() + ->afterStateUpdated(function ($state, $set) { + if ($state) { + $set('unassigned_shifts', false); + } + }), + Toggle::make('unassigned_shifts') + ->label(__('Unassigned shifts')) + ->live() + ->reactive() + ->afterStateUpdated(function ($state, $set) { + if ($state) { + $set('reservists', false); + $set('soldier_id', null); + $set('course', null); + } + }), ])->columns(2), + section::make([ + Radio::make('kind') + ->label(__('Kind')) + ->options([ + 'Weekend' => __('Is weekend'), + 'Night' => __('Is night'), + 'In parallel' => __('In parallel'), + 'Alert' => __('Alert'), + 'Regular' => __('Regular'), + ]) + ->inlineLabel(false) + ->inline(), + ]), Select::make('soldier_id') ->label(__('Soldier')) ->options(fn (): array => collect($soldiersShifts)->mapWithKeys(fn ($shift) => [ @@ -811,69 +836,84 @@ public static function getFilters($calendar) ->first()?->displayName, ])->toArray()) ->multiple() - ->hidden(fn (Get $get) => $get('unassigned_shifts') || $get('reservists')), + ->live() + ->reactive() + ->hidden(fn (Get $get) => $get('unassigned_shifts') || $get('course')), Select::make('type') ->label(__('Type')) - ->options(Task::all()->pluck('type', 'id')->unique()) + ->options(Task::all()->pluck('type', 'type')->sort()->unique()->all()) + ->multiple(), + Select::make('course') + ->options( + Soldier::pluck('course', 'course')->sort()->unique()->all() + ) + ->label(__('Course')) ->multiple() - ->hidden(fn (Get $get) => $get('unassigned_shifts') || $get('reservists')), + ->live() + ->reactive() + ->hidden(fn (Get $get) => $get('unassigned_shifts') || $get('soldier_id')), ]; }) ->modalCancelAction(false) ->modalSubmitActionLabel(__('Filter')) ->action(function (array $data) use ($calendar) { - if (count($data) == 1) { - $calendar->filterData = key($data) == 'unassigned_shifts' ? __('Unassigned shifts') : __('Reservists'); - $calendar->filter = true; - $calendar->refreshRecords(); + if (! $data['reservists'] && ! $data['unassigned_shifts'] && ! $data['kind'] && empty($data['soldier_id']) && empty($data['type']) && empty($data['course'])) { + $calendar->filter = false; + $calendar->filterData = []; } else { - $data['type'] = Task::whereIn( - 'type', - Task::whereIn('id', $data['type']) - ->pluck('type') - ) - ->pluck('id') - ->toArray(); $calendar->filterData = $data; - $calendar->filter = ! (count($data) == 4 && ($data['soldier_id'] === [] && $data['type'] === [])); - $calendar->refreshRecords(); + $calendar->filter = true; } + $calendar->refreshRecords(); }); } public static function filter($events, $filterData) { return $events - ->when($filterData === __('Unassigned shifts'), fn ($query) => $query - ->where('soldier_id', null)) - ->when($filterData === __('Reservists'), fn ($query) => $query + ->when($filterData['reservists'], fn ($query) => $query ->whereIn('soldier_id', Soldier::where('is_reservist', true)->pluck('id')->toArray())) + ->when($filterData['unassigned_shifts'], fn ($query) => $query + ->where('soldier_id', null)) ->when(! empty($filterData['soldier_id']), fn ($query) => $query ->whereIn('soldier_id', $filterData['soldier_id'])) - ->when(! empty($filterData['type']), fn ($query) => $query - ->whereIn('task_id', $filterData['type'])) - ->values(); + ->filter(fn ($event) => $filterData['kind'] ? $event->task()->withTrashed()->first()->kind == $filterData['kind'] : true) + ->filter(fn ($event) => empty($filterData['type']) || collect($filterData['type'])->contains($event->task()->withTrashed()->first()->type)) + ->filter(fn ($event) => empty($filterData['course']) || ($event->soldier_id && collect($filterData['course'])->contains(Soldier::find($event->soldier_id)->course))); } public static function activeFilters($calendar) { - if ($calendar->filter) { - return gettype($calendar->filterData) == 'string' - ? $calendar->filterData - : collect($calendar->filterData['soldier_id']) - ->map(function ($soldier_id) { - return User::where('userable_id', $soldier_id)->first()->displayName ?? null; - }) - ->concat( - collect($calendar->filterData['type'])->map(function ($task_id) { - return Task::find($task_id)?->type; - })->unique() - ) - ->filter() - ->toArray(); + if (! $calendar->filter) { + return []; + } + $data = $calendar->filterData; + $labels = collect([]); + if ($data['reservists']) { + $labels->push(__('Reservists')); + } + if ($data['unassigned_shifts']) { + $labels->push(__('Unassigned shifts')); + } + if ($data['kind']) { + $labels->push(__('Kind').': '.TaskKind::from($data['kind'])->getLabel()); + } + if (! empty($data['soldier_id'])) { + $soldiers = collect($data['soldier_id']) + ->map(fn ($id) => Soldier::find($id)->user->displayName) + ->implode(', '); + $labels->push(__('Soldiers').': '.$soldiers); + } + if (! empty($data['type'])) { + $types = implode(', ', $data['type']); + $labels->push(__('Type').': '.$types); + } + if (! empty($data['course'])) { + $courses = implode(', ', $data['course']); + $labels->push(__('Course').': '.$courses); } - return []; + return $labels->toArray(); } public static function getTitle(): string @@ -883,9 +923,9 @@ public static function getTitle(): string public static function setData($record, $data) { - $record->is_weekend ?? $data['is_weekend'] = ($record->task->kind === TaskKind::WEEKEND->value) === $data['is_weekend'] ? null : $data['is_weekend']; + $record->is_weekend ?? $data['is_weekend'] = ($record->task()->withTrashed()->first()->kind === TaskKind::WEEKEND->value) === $data['is_weekend'] ? null : $data['is_weekend']; if ($record->parallel_weight === null) { - $data['parallel_weight'] = $record->task->parallel_weight === $data['parallel_weight'] ? null : $data['parallel_weight']; + $data['parallel_weight'] = $record->task()->withTrashed()->first()->parallel_weight === $data['parallel_weight'] ? null : $data['parallel_weight']; } return $data; @@ -895,8 +935,8 @@ public static function fillForm($record, $arguments) { return [ ...$record->getAttributes(), - 'is_weekend' => $record->is_weekend === null ? ($record->task->kind === TaskKind::WEEKEND->value) : $record->is_weekend, - 'parallel_weight' => $record->parallel_weight === null ? $record->task->parallel_weight : $record->parallel_weight, + 'is_weekend' => $record->is_weekend === null ? ($record->task()->withTrashed()->first()->kind === TaskKind::WEEKEND->value) : $record->is_weekend, + 'parallel_weight' => $record->parallel_weight === null ? $record->task()->withTrashed()->first()->parallel_weight : $record->parallel_weight, 'start_date' => $arguments['event']['start'] ?? $record->start_date, 'end_date' => $arguments['event']['end'] ?? $record->end_date, ]; diff --git a/app/Resources/ProfileResource.php b/app/Resources/ProfileResource.php index 1cf3b9e..b2a15ba 100644 --- a/app/Resources/ProfileResource.php +++ b/app/Resources/ProfileResource.php @@ -56,7 +56,7 @@ public static function form(Form $form): Form Select::make('qualifications') ->label(__('Qualifications')) ->placeholder(__('Select qualifications')) - ->options(Task::all()->pluck('type', 'type')), + ->options(Task::all()->pluck('type', 'type')->sort()->unique()->all()), TextInput::make('capacity') ->numeric() ->step(0.25) @@ -144,8 +144,11 @@ public static function table(Table $table): Table $soldierShifts = Shift::where('soldier_id', auth()->user()->userable_id)->get(); return $soldierShifts->filter(function (Shift $shift): bool { - return Carbon::parse($shift->start_date)->month == now()->month || Carbon::parse($shift->end_date)->month == now()->month; - })->sum(fn (Shift $shift) => $shift->parallel_weight === null ? $shift->task->parallel_weight : $shift->parallel_weight); + return (Carbon::parse($shift->start_date)->month == now()->month + && Carbon::parse($shift->start_date)->year == now()->year) + || (Carbon::parse($shift->end_date)->month == now()->month + && Carbon::parse($shift->end_date)->year == now()->year); + })->sum(fn (Shift $shift) => $shift->parallel_weight === null ? $shift->task()->withTrashed()->first()->parallel_weight : $shift->parallel_weight); }) ->weight(FontWeight::SemiBold) ->description(__('Capacity hold'), 'above') diff --git a/app/Resources/SoldierResource.php b/app/Resources/SoldierResource.php index 155b1d1..52584fc 100644 --- a/app/Resources/SoldierResource.php +++ b/app/Resources/SoldierResource.php @@ -120,8 +120,11 @@ function ($record) { $soldierShifts = Shift::where('soldier_id', $record->id)->get(); return $soldierShifts->filter(function (Shift $shift): bool { - return Carbon::parse($shift->start_date)->month == now()->month || Carbon::parse($shift->end_date)->month == now()->month; - })->sum(fn (Shift $shift) => $shift->parallel_weight === null ? $shift->task->parallel_weight : $shift->parallel_weight); + return (Carbon::parse($shift->start_date)->month == now()->month + && Carbon::parse($shift->start_date)->year == now()->year) + || (Carbon::parse($shift->end_date)->month == now()->month + && Carbon::parse($shift->end_date)->year == now()->year); + })->sum(fn (Shift $shift) => $shift->parallel_weight === null ? $shift->task()->withTrashed()->first()->parallel_weight : $shift->parallel_weight); }) ->label(__('Capacity hold')) ->numeric(), @@ -159,7 +162,7 @@ function ($record) { ->label(__('Qualifications')) ->multiple() ->searchable() - ->options(Task::all()->pluck('type', 'type')) + ->options(Task::withTrashed()->get()->pluck('type', 'type')->sort()->unique()->all()) ->query(function (Builder $query, array $data) { return collect($data['values'])->map(function ($qualification) use ($query) { return $query->whereJsonContains('qualifications', $qualification); @@ -393,6 +396,10 @@ public static function constraints(): array ->step(1) ->minValue(0) ->required() + ->lte('max_shifts') + ->validationMessages([ + 'lte' => __('The field cannot be greater than max_shifts field'), + ]) ->default(0), TextInput::make('max_weekends') ->label(__('Max weekends')) @@ -400,6 +407,10 @@ public static function constraints(): array ->step(0.25) ->minValue(0) ->required() + ->lte('capacity') + ->validationMessages([ + 'lte' => __('The field cannot be greater than capacity field'), + ]) ->default(0), TextInput::make('max_alerts') ->label(__('Max alerts')) @@ -426,7 +437,7 @@ public static function constraints(): array ->label(__('Qualifications')) ->multiple() ->placeholder(__('Select qualifications')) - ->options(Task::all()->pluck('type', 'type')), + ->options(Task::all()->pluck('type', 'type')->sort()->unique()->all()), ])->columns(3), ]; } diff --git a/app/Resources/SoldierResource/Pages/ListSoldiers.php b/app/Resources/SoldierResource/Pages/ListSoldiers.php index 0511064..1acd65b 100644 --- a/app/Resources/SoldierResource/Pages/ListSoldiers.php +++ b/app/Resources/SoldierResource/Pages/ListSoldiers.php @@ -27,7 +27,7 @@ protected function getHeaderActions(): array Section::make([ Select::make('course') ->label(__('Course')) - ->options(Soldier::pluck('course', 'course')->unique()->sortBy('course')->all()) + ->options(Soldier::pluck('course', 'course')->sort()->unique()->all()) ->required(), ]), Section::make([ @@ -65,59 +65,29 @@ protected function getHeaderActions(): array ->label(__('Qualifications')) ->multiple() ->placeholder(__('Select qualifications')) - ->options(Task::all()->pluck('type', 'type')), + ->options(Task::all()->pluck('type', 'type')->sort()->unique()->all()), ]), ]) ->action(function (array $data) { $selectedCourse = $data['course']; $updateData = []; $fields = ['max_shifts', 'max_nights', 'max_weekends', 'max_alerts', 'max_in_parallel', 'capacity', 'qualifications']; - + foreach ($fields as $field) { - if (isset($data[$field]) && !($field === 'qualifications' && empty($data[$field]))) { + if (isset($data[$field]) && ! ($field === 'qualifications' && empty($data[$field]))) { $updateData[$field] = $data[$field]; } } - - if (!empty($updateData)) { + if (! empty($updateData)) { $soldiers = Soldier::where('course', $selectedCourse)->get(); $soldiers->map(function ($soldier) use ($updateData) { - foreach ($updateData as $key => $value) { - if ($key === 'qualifications') { - $currentQualifications = $soldier->{$key} ?? []; - if (is_array($currentQualifications)) { - $soldier->{$key} = array_unique(array_merge($currentQualifications, (array) $value)); - } else { - $soldier->{$key} = $currentQualifications . ',' . $value; - } - } else { - $soldier->{$key} = $value; - } - } - $soldier->save(); - }); - } - }), - // ->action(function (array $data) { - // $selectedCourse = $data['course']; - // $updateData = []; - // $fields = ['max_shifts', 'max_nights', 'max_weekends', 'max_alerts', 'max_in_parallel', 'capacity', 'qualifications']; - - // foreach ($fields as $field) { - // if (isset($data[$field]) && ! ($field === 'qualifications' && empty($data[$field]))) { - // $updateData[$field] = $data[$field]; - // } - // } - // if (! empty($updateData)) { - // $soldiers = Soldier::where('course', $selectedCourse)->get(); - // $soldiers->map(function ($soldier) use ($updateData) { - // collect($updateData)->map(function ($value, $key) use ($soldier) { - // $soldier->{$key} = $value; - // }); - // $soldier->save(); - // }); - // } - // }), + collect($updateData)->map(function ($value, $key) use ($soldier) { + $soldier->{$key} = $value; + }); + $soldier->save(); + }); + } + }), ]; } } diff --git a/app/Resources/TaskResource.php b/app/Resources/TaskResource.php index ac06592..7813524 100644 --- a/app/Resources/TaskResource.php +++ b/app/Resources/TaskResource.php @@ -169,7 +169,7 @@ public static function table(Table $table): Table ->multiple() ->searchable() ->options( - Task::all()->pluck('type', 'type') + Task::all()->pluck('type', 'type')->sort()->unique()->all() ) ->default(null), SelectFilter::make('recurring.type') @@ -370,7 +370,7 @@ public static function additionalDetails(): array ->label(__('Concurrent tasks')) ->multiple() ->placeholder(fn () => Task::count() > 0 ? __('Select concurrent tasks') : __('No tasks')) - ->options(Task::all()->pluck('type', 'type')) + ->options(Task::all()->pluck('type', 'type')->sort()->unique()->all()) ->visible(fn (Get $get) => $get('kind') === TaskKind::INPARALLEL->value), ]; } diff --git a/app/Services/Algorithm.php b/app/Services/Algorithm.php index e2697c3..845d1f3 100644 --- a/app/Services/Algorithm.php +++ b/app/Services/Algorithm.php @@ -24,8 +24,8 @@ protected function getShiftWithTasks() ->filter(function (Shift $shift) { $range = new Range($shift->start_date, $shift->end_date); - return $range->isSameMonth(new Range($this->date->copy()->startOfMonth(), $this->date->copy()->endOfMonth())) - && $shift->task->kind !== TaskKind::INPARALLEL->value; + return $range->isSameMonth(new Range(max($this->date->copy()->startOfMonth(), Carbon::tomorrow()), $this->date->copy()->endOfMonth())) + && $shift->task()->withTrashed()->first()->kind !== TaskKind::INPARALLEL->value; }) ->map(fn (Shift $shift): ShiftService => Helpers::buildShift($shift)); } diff --git a/app/Services/Charts.php b/app/Services/Charts.php index b2b744c..6a8234e 100644 --- a/app/Services/Charts.php +++ b/app/Services/Charts.php @@ -76,17 +76,17 @@ protected function getData($course, $month = null, $year = null) protected function howMuchNights($shifts) { - return $shifts->filter(fn ($shift) => $shift->task->kind === TaskKind::NIGHT->value)->count(); + return $shifts->filter(fn ($shift) => $shift->task()->withTrashed()->first()->kind === TaskKind::NIGHT->value)->count(); } protected function howMuchWeekends($shifts) { - return $shifts->filter(fn ($shift) => $shift->is_weekend != null ? $shift->is_weekend : ($shift->task->kind === TaskKind::WEEKEND->value))->count(); + return $shifts->filter(fn ($shift) => $shift->is_weekend != null ? $shift->is_weekend : ($shift->task()->withTrashed()->first()->kind === TaskKind::WEEKEND->value))->count(); } protected function howMuchPoints($shifts) { - return collect($shifts)->sum(fn ($shift) => $shift->parallel_weight != null ? $shift->parallel_weight : $shift->task->parallel_weight); + return collect($shifts)->sum(fn ($shift) => $shift->parallel_weight != null ? $shift->parallel_weight : $shift->task()->withTrashed()->first()->parallel_weight); } protected function howMuchLowConstraintsRejected($constraints, $shifts): int diff --git a/app/Services/ConcurrentTasks.php b/app/Services/ConcurrentTasks.php index c1ad7f1..627763c 100644 --- a/app/Services/ConcurrentTasks.php +++ b/app/Services/ConcurrentTasks.php @@ -46,7 +46,7 @@ protected function getShiftsWithTasks() $range = new Range($shift->start_date, $shift->end_date); return $range->isSameMonth(new Range(max($this->date->copy()->startOfMonth(), Carbon::tomorrow()), $this->date->copy()->endOfMonth())) - && ($shift->task->kind === TaskKind::INPARALLEL->value); + && ($shift->task()->withTrashed()->first()->kind === TaskKind::INPARALLEL->value); }) ->map(fn (Shift $shift): ShiftService => Helpers::buildShift($shift)); } diff --git a/app/Services/DailyShiftNotification.php b/app/Services/DailyShiftNotification.php index f24b040..0731023 100644 --- a/app/Services/DailyShiftNotification.php +++ b/app/Services/DailyShiftNotification.php @@ -24,7 +24,7 @@ public function beforeShift() __('Assigned to shift today', [ 'today' => Carbon::parse($shift->start_date)->format('d/m/y'), 'user' => Soldier::find($shift->soldier_id)->user->displayName, - 'task' => $shift->task->name, + 'task' => $shift->task()->withTrashed()->first()->name, 'startShift' => Carbon::parse($shift->start_date)->format('H:i'), ]) ) diff --git a/app/Services/Helpers.php b/app/Services/Helpers.php index a436afd..1e6d47b 100644 --- a/app/Services/Helpers.php +++ b/app/Services/Helpers.php @@ -16,12 +16,12 @@ public static function buildShift(Shift $shift): ShiftService { return new ShiftService( $shift->id, - $shift->task->type, + $shift->task()->withTrashed()->first()->type, $shift->start_date, $shift->end_date, - $shift->parallel_weight === null ? $shift->task->parallel_weight : $shift->parallel_weight, + $shift->parallel_weight === null ? $shift->task()->withTrashed()->first()->parallel_weight : $shift->parallel_weight, self::kind($shift), - $shift->task->concurrent_tasks + $shift->task()->withTrashed()->first()->concurrent_tasks ); } @@ -30,11 +30,11 @@ protected static function kind(Shift $shift) if ($shift->is_weekend === true) { return TaskKind::WEEKEND->value; } - if ($shift->is_weekend === false && $shift->task->kind === TaskKind::WEEKEND->value) { + if ($shift->is_weekend === false && $shift->task()->withTrashed()->first()->kind === TaskKind::WEEKEND->value) { return TaskKind::REGULAR->value; } - return $shift->task->kind; + return $shift->task()->withTrashed()->first()->kind; } public static function buildSoldier($soldier, $constraints, $shifts, array $capacityHold, $concurrentsShifts = []): SoldierService @@ -126,7 +126,7 @@ public static function getSoldiersShifts($soldierId, $newRange, $inParallel) function (Shift $shift) use ($newRange, $inParallel): bool { $range = new Range($shift->start_date, $shift->end_date); - return $range->isSameMonth($newRange) && ($shift->task->kind === TaskKind::INPARALLEL->value) === $inParallel; + return $range->isSameMonth($newRange) && ($shift->task()->withTrashed()->first()->kind === TaskKind::INPARALLEL->value) === $inParallel; } ) ->map(fn (Shift $shift): ShiftService => self::buildShift($shift)); diff --git a/app/Services/RecurringEvents.php b/app/Services/RecurringEvents.php index 9dc72e7..7656856 100644 --- a/app/Services/RecurringEvents.php +++ b/app/Services/RecurringEvents.php @@ -30,7 +30,7 @@ public function recurringTask(): void $tasks = Task::get(); $tasks->filter(function ($task) { return $task->recurring['type'] !== 'Daily range' && $task->recurring['type'] !== 'One time'; - })->map(fn($task) => $this->switchTasks($task)); + })->map(fn ($task) => $this->switchTasks($task)); } public function oneTimeTask(Task $task) @@ -93,7 +93,7 @@ protected function getDatesOfMonth() protected function addTimeToDate($date) { - return Carbon::parse($date->format('Y-m-d') . ' ' . $this->task['start_hour']); + return Carbon::parse($date->format('Y-m-d').' '.$this->task['start_hour']); } protected function calculateEndDateTime($startDate) @@ -126,14 +126,14 @@ protected function createPeriod() { return $this->task->recurring['type'] == 'Daily range' ? CarbonPeriod::between(max($this->task['recurring']['start_date'], Carbon::tomorrow()), $this->task['recurring']['end_date']) : - CarbonPeriod::between($this->month->copy()->startOfMonth(), $this->month->copy()->endOfMonth()); + CarbonPeriod::between(max($this->month->copy()->startOfMonth(), Carbon::tomorrow()), $this->month->copy()->endOfMonth()); } protected function createShifts(array $dates) { collect($dates)->map(function ($date) { if ( - !Shift::where('task_id', '=', $this->task['id']) + ! Shift::where('task_id', '=', $this->task['id']) ->where('start_date', $date) ->where('end_date', $this->calculateEndDateTime($date)) ->get() @@ -147,21 +147,21 @@ protected function createShifts(array $dates) $shift->task_id = $this->task['id']; if ($holiday->isHoliday) { $shift->is_weekend = 1; - $shiftType = Task::where('id', $shift->task_id)->pluck('type')->first(); + $shiftType = $shift->task()->withTrashed()->first()->type; $parallelWeight = Task::where([['type', $shiftType], ['kind', TaskKind::WEEKEND->value]])->pluck('parallel_weight')->first(); $parallelWeight ? - $shift->parallel_weight = $parallelWeight - : (auth()->user() ? Notification::make() - ->title(__('Update parallel weight of holiday shift')) - ->persistent() - ->body( - __('Holiday shift notification', [ - 'user' => auth()->user()->displayName, - 'task' => $shiftType, - 'start_date' => $shift->start_date, - ]) - ) - ->sendToDatabase(auth()->user(), true) : null); + $shift->parallel_weight = $parallelWeight + : (auth()->user() ? Notification::make() + ->title(__('Update parallel weight of holiday shift')) + ->persistent() + ->body( + __('Holiday shift notification', [ + 'user' => auth()->user()->displayName, + 'task' => $shiftType, + 'start_date' => $shift->start_date, + ]) + ) + ->sendToDatabase(auth()->user(), true) : null); } $shift->save(); } diff --git a/database/migrations/2024_05_30_094012_create_soldier_table.php b/database/migrations/2024_05_30_094012_create_soldier_table.php index dda9cd5..54ec27a 100644 --- a/database/migrations/2024_05_30_094012_create_soldier_table.php +++ b/database/migrations/2024_05_30_094012_create_soldier_table.php @@ -19,6 +19,8 @@ public function up(): void $table->integer('max_shifts')->default(0)->nullable(); $table->integer('max_nights')->default(0)->nullable(); $table->integer('max_weekends')->default(0)->nullable(); + $table->integer('max_alerts')->default(0)->nullable(); + $table->integer('max_in_parallel')->default(0)->nullable(); $table->integer('capacity'); $table->boolean('is_trainee'); $table->boolean('is_mabat'); diff --git a/database/migrations/2024_05_30_100244_create_task_table.php b/database/migrations/2024_05_30_100244_create_task_table.php index 318c3c9..af67596 100644 --- a/database/migrations/2024_05_30_100244_create_task_table.php +++ b/database/migrations/2024_05_30_100244_create_task_table.php @@ -16,11 +16,7 @@ public function up(): void $table->integer('parallel_weight')->default(0); $table->string('type'); $table->string('color'); - $table->boolean('is_alert')->nullable(); - $table->boolean('is_weekend')->nullable(); - $table->boolean('is_night')->nullable(); - $table->boolean('in_parallel')->nullable(); - // $table->string('kind'); + $table->string('kind'); $table->json('concurrent_tasks')->nullable(); $table->string('department_name')->nullable(); $table->json('recurring'); @@ -33,7 +29,7 @@ public function down(): void { Schema::table('tasks', function (Blueprint $table) { $table->dropIfExists(); - // $table->dropSoftDeletes(); + $table->dropSoftDeletes(); }); } diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 2b1633f..f9dd134 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -13,7 +13,7 @@ use Carbon\Carbon; use Carbon\CarbonPeriod; use Illuminate\Database\Seeder; - + class DatabaseSeeder extends Seeder { public function run(): void diff --git a/lang/he.json b/lang/he.json index b7f0e9f..5895513 100644 --- a/lang/he.json +++ b/lang/he.json @@ -128,7 +128,7 @@ "Is not equal": "שונה", "Is permanent": "קבע", "Is trainee": "חניך", - "Is weekend": "סופ''ש", + "Is weekend": "סופש", "June":"יוני", "July":"יולי", "Last name": "שם משפחה", @@ -255,6 +255,8 @@ "Tuesday":"שלישי", "Type": "סוג", "To":"עד", + "The field cannot be greater than capacity field":"שדה זה אינו יכול להיות יותר משדה מקסימום נקודות", + "The field cannot be greater than max_shifts field":"שדה זה אינו יכול להיות יותר משדה מקסימום משמרות", "Unassigned shifts":"משמרות שלא שובצו", "Update parallel weight of holiday shift":"עדכון משקל של משמרת חג", "Update dragged shift details!": "עדכון פרטי משמרת שנגררה", @@ -281,7 +283,7 @@ "Area":"שטח", "Markers":"מודגש", "Grid":"משבצות", - "Kind":"סוג משימה", + "Kind":"הגדרה", "Select task kind":"בחר סוג משימה", "Regular":"רגילה", "You did not choose a commander. With your approval, you leave the team without a commander. Are you sure?":"לא בחרת מפקד. באישורך אתה משאיר את הצוות ללא מפקד. האם אתה בטוח?", diff --git a/public/images/logo.png b/public/images/logo.png index 6a5fdd878467647b0a878174a10690851faf1f52..d4218bfaf5b873ac28707890a017cc31dadcf754 100644 GIT binary patch literal 76636 zcma&NbyQT}A2tdi9TG}N#{j|*lG5D`0z=mT(k0@MlF~7B2uLYi(k0C>Aky7K_t1U$ z-Szr?@1J+CHF4Hi`|N$r{yfkA#B(Av)fMn@UgMykpx`Sh%4(yaJR5rYKZk|!^j*{W zvhL{z)k9lB8l~b7)y~twb6Y7jDHN3IINUo6^rvHNS49I46cmE)|9w#VU4DX5P#z1F zWToDJHr>DX3ZPVhZsB60ct1N^3P&E!h&$PM5B;${q`mY!fO}WWwzY_e6t(<_OO0)% zf8$MjM)R9wc>t%TM@BnIw(?F1#`Y3NH#t2ap(8pndg%R2Vxs?AHCGKxfZ@MpNh{k$ z_1{T1EC!3%@PF;y^8{`M*?)~HNHLA^zkUQ#Ohf;5Bl=25y!o$Jc(@E9w#UC-vOVfz0HrB1Zud_2_>CzViwXxek#m zPEiKTF3hFG409MP|NYhU#>fc3_;+$r$nIxlqOZ)iiRnpY&eUYZ%zroWhnB(O0Ywu` zAL<9}uU7-YjFgk6ryIadelmLe9F_KlrsD_A2{wO9D=U*@Q-VHv{ZjOCNF?6!F0RlX z%Zm8*@2=KF>4`TlQF_R6Pd2Ag9G#tE7*p%`i?T51vC>9-h;L=HBW zvATtEN2PrJuF2(R;^gj`YowEU_NzfLk*2hwLiv#N-$QkyA;dmK%>}Vi)Y7EFZTL-1 zx(!=7Rp1UazoZS5dkgsudb}NTrjuS)vTNzpl*zu{438-!>JHG!KYmt2`}y&UT3B;%}7Q{7}&@ruwI z*h{$9Tc~RQnkZm`xIuJbwb0EFR*$8=zM_YAM_J0PNJnPIbjQB>b~D}NMCo=Z;rYxB z`+(Gi<~er3ijOK@wxxVKC;yfx{4`i2gFDfaX9UqYS*KP@Oi5&Fm;hnyV-Fpa%WG#pzj5C?*& zH#0ukjk-FuDC58*H#Pi%hCW~)C@hl>7AkLNXP5LRh1t$wvH;vvSgeIq&U5?zh0yBl zpG_X67{Bv}}$PO{>gti6(AoIY# zle$8T1H;PE^F}yhQ$grWxv~_rV7;}{7l*H|F&IaE`+A?5A^y82JPuba%`N9Q7X%RD z9QXn`v>()D9IZiW?O4J(?tv@d7Kbj+mQFZU-d;Zk>}k|pF&&-Ni?6sK-8pnjiJh{s zbF$|XjBd^V2W1zrsTgE#lif%EqYiOu<9A)r^XT-8dU{jVrV-pBp9g`kP8LW}BUA6S zb-FDwJG*<0{_p(F&1)mzb9Q$Hqgp4U49aAxt->~bE~jC1JBQwyg%2cW|1l%O?@)%J zMs3LuCBltrm=Hx~S~8JZquCG_XS#;Fl9DH9W}S6WgmK`jrqVV8?-oP;x><4mfkr)U zp*WcL6=$t=km-M%8?tUpVxzajNJX`}2(o@UpExd8%dDY33~z)Yc4i^z-^^-2u#kY# z@?vO_Z@$_e2Nx&kpL*t8sVK?ciJ=!#X$R&Q*+6Joh(=x3H^O@9YdtSu}|&<&$&=Z6M$ zv;3n>28K1(clsd|kBD+&+-S$ag*&L)9A!=hZ;hz1IJ*^z2PuuSou}9pV0tyxnCn~l z@Mh}5;wbQ5jCyRE8VHLA17Q|jG`L|QRWASFKt!a_+eAMkTMaU%AM1sxs*b>quYN^G ztHG}jSks5*9J->ZeN9`P81V^JiiRdLVKltE{1{EdA zs-8>G_tWTW|JP5c#$-`XQz_&wJ{k@o-k4rTo=v8S`iNQ3ujx%q4I3_uWi@EJ>U%FU z4>p=kOiqHLH!hKC6-h}{E^Jz+NrQ8aihFWuHxz4GFy*2my4f&w7{Uk8U0+WJjZv}u z&*f>2Aps1P?opBw#~!I>3H^3aMn(~AHDCH?J?FH@&r&Ws{JDfaSRsuH2vwRjbTLAHLHZTfPKow z2@GPeya2tKv&VhWFDo97oP2QJInc{nfC^6Ic6CuxC_~vPPnBc&tLs9nA)JJWNhQE= zqPFQbf_{Ny?)4GlNxE6zO0bA{qVe((VE#TCkx>z`?dF>`!ua#2d$FTRn2S>~pA&ql z-dSay)Dvvf(QPYID%(^f%yNG2Szoj2lWhBs9eRx3ed@vsWHhFFfPs=|#i>(%aP>Pu z95x_hb4jVCXy4q`B9L{RoK0iXfNxI2Hd+-WIC`TpT1x_5Mix;T$Y$tDa)e|gzpfsM z3QxaVH#bjP?mXbsI?S9G#-*d{QbFGIX9O_)c$x9g2OLhH+eFB-MBzOCLR1s#pckC^ zEBc%E4segk2{hD$t^8D`1V5GrztC81fj;CqPFXW62y9R~=7CEIWRXcOoGe1p$AA&S ze+WHsree1U8&VtLoLgh;5T#A-A6X`MGX)tZ&o#f^adt^?Kr?aQGt9v|_sS5F_iW+g?LpH759cj)ZQ4g%dnJJ&r^B2#d@*0dc1VvoLr1Ph$*@& z&f92Rcz|AwVxQjh+0YH$Q2y!U2!4y{zZ@zZ%&|MRIBKb-P_^6e5-DF~)w=r+g!!vz z*tL&L@tmBf*O}ShQdzkAlYwyqjDVqa9XSu$5B5J(OM@5P_v|Yd8po{I&+7R2XONS! z{qG3lje%v>fS`HhlxjNmx6H}(eVaCKOO=#(dmwEez|F07Y!t@)Rnpxw9?FDnbw8c- zq!)^cWopiwoj#;GT4>gk3j(cQ`#ej3kfa1|NZMhPR#DFg#m2eWwSYO_08iR#nw?Xw zHqP-4)Gj#6od@Rn!l34W0p$Yh-iC;l&?d9zmInxmR6H!f{_1_1ifV1!vj^bjn5G#E z$8gLhnZFwRaZ@u6&tlZYWvXU6P=;yv-x416C=hO%)ZmR~W|+j=R`zZD=&#(E-Fus! zVZbdtwK!|9w;?i(8C@l{lz}{lLZ-odSX`?sShx*MF9%MLX-Q-X1vPwZ8?OL=*p;Df zO*6&|ZVdy39tKM8%=#=r^Kwq6Iy!WN=iii}EuQnQ2HZ`eXj~>os59nd?avmd5_p#4 z6l+=qLp)P^Ftp)sfxSiD7gj_d>lx=OP0rmPES@k!HV^{l%|Tpx(E>ARzs;zdf6*9UJ4q*Q)Kz z)4{~}D7Es)EV1&?B+*EwjkKAo`9Er*ihXfmv1xlXqOLxYdD|NoX9ka&CgJJ$#SrS- zX1sRy~MkDE>c&L66 z--Qq7WrDm;-Ym_`ELD?oeaI%`ALgpCH%!PYLRSNxs+HMcyo$H+_~y#~>(Ip!T|Wvx z*6FC(L^7$Nnv|tr!C0p(1@w*E@u1R~uB9a;l>=<}c;k_(0)=l3l`Ky$(&sEUF$7#8 zi+oRK@lOFRF0lE_f5uI8yB_?+05@T(tOm@E3nR)YIoqEMuo+0fWvQ1g_!%8MDZ_nX zGG&8}nygBn%)sGpkn5NvGWlfS3rd4}Eb_fm=&Z4p@J}X+i?mXHvPj2o(A67tz@Q0C zn#qE_(Ufo3&6tx8CIpzc!$`$tgndQ3!~nKkz2;&$Bvt`MS5sB4d$iiM_aACYEzu9) zs+87LwX&%+#}!gI)U@bH*3+-NYO6Q+$)Eh|s)?-MqS-r=$W)AY+a>hpV6tTFK@J1` zfO^V73wYUK9Q*WBF?hP~oMHJdtKiq>WbS3C#KT24bkl)nX4uB5&M3cQIdy`SCkD zW2uFDH$mz&4wuQ_k1a4RQV+}DU37ienaaQ-xt_8K=7&5aCy|+E;D)gp2y|HAXY1ZZ zpRZ;bmm|nhaig3A=jGyvH^kNMo0n+^+?}Ef5}mqenINfp4>(}TQkQV`gsT@0U7=4g zRPV;Cbp1SIV~}2+Y7jRUO9g4^g$OQM>J_;aK)@@;sjMfENk(rtXGR4?i>boZyGClE za;Fko&6AUydA~(#T`$q)cAqJ1VVg>Q|Mt44Em+ja#nDJ?v3=A9eBE)k+J3kBfKRdS zl$w!|A9@k>f3~fwiDT1{bp2bxNh;chpiLU!63VWSHs3gKGL>y6hAgt}iL=q% zHd|hY^GtyOgR}SdZZe!QdTzSrfUfIa>-0CAu%U%KK*~wBnYMPcNGP*M|KB?vh>M-4 zuHMX7bM|UxoW9r%@^Mb?@rr|x4&UDI#|n?DhD2D^)XK4k{!<(wLi=-GVFi&_dv(3P ztuXz8o=XI0#G)*urw8X8#l@w`-viaJ7gHM$IZ51)!!FM7;qRs%nQ!xG{^9$CG*&fD z2wOk&DYOs`5aS#%RhtRvFy>@L^P_e@+I-dIS3a$WynU6H)lgRf7HTw0+A>pYx{@8| zEe5vMEBV(XfRZde%O{-+dzK4Ca7DGqoxXzc;WLwN91;?%EAf0^KSQ|Y_dBdE%DWOwQEa0a&Lu8Jo5qDkb&~ z1r4Qg?ae-F4-c1@8%G^YjF&Di<|4m<8vcX$QeOfV?~j%CFX!iz14*Kg6ZyX6cUGte z2hRNZ(R;y*W3y8Qwny|P5ji~ctID9HD6RsYM^)wc%|flrZ5G+KmAB!ar1)^l`q2R} zLWFMz__QrW8qXRq2sDe~zow>3c{|EpMKzKEpa?(!0Pq6B;k=*A!|5(O2^@OXc22{0 z2`A(A+|EiT`*#~1Lb#aHRPU;fWKt5Hq{Tf`JHCUu@~L=D!_1^Ifjr-{s$r zH%YQuy>&hL(%@eiv9(GrJ}J9puG<@X!JL_NtpI>O9?$zAHx}uQhM45x{~WR_{#e;G z`q)N#)e#QRc4I0d$!0e^h`gclGM!T1gPu#bNsOdlnNr&{GX>cdo@7g_0y#_|-rUkQ zph_l|h4|hSPp+`0rla!kB00(PA+y@uU+v)RL~v748dOUe%GfJ7b-7N5rHzhd*dcT~r& zfv)Zv|4AXLEUtjsLl2GCKG!)PkS~Xx*34!h&ZPJCWisd|(#s|$5J2Wn8a`3REn|!g zl@~B`v#-Ad1m$u6rM`Q_-w|8%#ic4)$wtt%z9!lHTsNZZ*0y*6b z9~MhN4xup)HCkb@U%dVPqRP=zCX*P!Zlm_6Zb>uGmm?m`d^#yGA0h!GPC1hV zKroed-d>LkxYrcE@BZXPdnHDH~c zC@*50_Fu;i^`HBj%Um4ObV;EpE{=Q-)@r)azv`!l(DP-}8q>`R_)Zhw&v4>JIRbaF z3nhd0(gvnE(l@05a6zUYA+rnIX@B*nOTcsYiObBc>d**7sSko>uv1)i9wD8i>Nf*5 zMJE*LY3Zq!L@LN;$L(vtse;X$_>e}VSt5~s!|T%*&*1G&-D0qgZzJ*nFC*FGSI*oB zuEggNXg|vd{`5vMnKh?5k z9-(27dyeZ&SJCo@egOM>-3THKudvF2UtMow+yO&BHiU{LV9}E?5qrv_<%cPr!(0FU zc(ZV48NV0=<*w&%E%umm&*t*lD(9HcQuY4G6wu&0&s>O@UO0N&@gqk z2~QH9#|RsslhDEgzCv+!+cvunVdP|KwWFp*%kH zLkKR<&;B4wP9w#4xMYI2iuFGNu%4cvhqb4C$5M)Nk)b=#Xi=1Wz*?G$gA3zk@?G-HHE}e4jEuW;675}t%T~n+-n3JwjM{%Ys9jD(5t2K)8 z@lCK9RMeu&;>4VfP0Y}RwnDe0zr9S7J*7Y{XzEh}2W~_ZUDcJi5YtK!x<}=H4h^Mt z(S-bC3Do|?Mc%Ne`6Z5bsxQmiFHjGGn0{Uf=E%a}>U&qsrqAu;);lokK*84vCcSPQ zdj*vn$EO6+H^#rWH0%IMT(n#rd<1MFT(xb>KC?dFWOv!wcY-Y)YG#ky(=ju&-`g*y zPMslP!sdI;k@=~$tuk6nH9sCN5=&WKXbDoQ8?1*7PY#I*ZBa{4t8lrnc>;v?t`$SB z&9^lK$vAN2?JmA2v9u>2ya5d1a>>!bag0iYmw(7!+t9%{l+z;owaDXvhh(=`tf#U- zkzx0FAS;hJHG?tXfu%3oJ_(w)w>k{j6?qMif$k*ICp)j!;j9N}LsA+8U1ld`Q8n@E z4RaD!!43r?StJjH{M}(V-Z{A_!~Km#gJoTvhGnuKY*$orKHpPe><;wS8Nz?m>%lA9 zmoB*221agfnv-Fh%K zZ?d)*0p~ZqmJ<2F#|8c+B_&P)IsH*Hm=i>vDnf~@wy|1YCVm_^SkjWc^I`n3p-N%a zE>P80X#E{Yicq&!ztz0qV*2wuww*VDe{k(5l8OjiZp>*nivf{29Qs^5Gy2AM*7^LJ z(Cc?Tq3f4s{L$8=I16*NY?5w((YluH^$=}%+*5+5b{O!6D^?M*%koCezjVhZsxsOq z>`mxR{YuWlCw+J7OQ!q+p|3eL&=2&o#+y!;xY;4SS|F3SnSm=nhd(bzr96wHhycG! z0#{1Plp`t>e=n^o(&tqvtFF4Y8E#?9d%|Stwwd-|6MsU(n)~t(KZ5omNUY7KGWJ|e z;*>={Y&6laso8AIebMWFQPh*^=Tpsj;yHJNx@d(%+9i-J25T z-m%6tH3_lDB`3cU!5E19(JcwltY5N_smjRAENp8tF*G!El$6@~_}-NROLU~$gM*WE zaBePx`qG=B`pC1IENgGs?I*4EzM-rLs1?7b%D1dDY;Rh9X9#1Jj>x@kvJ zdg4=EaN5ejq14Ym6^MdcZs%T?XQwnj6Pe)E*7_jMgem-FVwgw)vO=vRB8;3=tw$=B zpNzZ7H%~JV5VNs%WO_UC_8dFSO!}G>2Qt5AgZaG?mtH>0W)BF^_@z;yNMMZC_kT@(kS0~!x+P>QsrF0o_A^HO8 z}6)uN6E1XxrQWay$^$`fOo!4iY1qW;J;0)JiNE7YHLigEjI=hM z)hO#c36;EiZi&R^zH#(j?M`gZ#}@D)&Qne#x5_D$RTaf~?>mit|RP}5oOTWm>zB=#;$5(I zW@gf&qoW6|t{M|`Mrf^9?YQp9Wus5q9JjM5WR08LTYAn%tI*E?-VC+LtMMozbR*lo+zPQmlNpS; zQJS`U{gBQh!_3MH9K_?sz{D&cy1BiLaXh#`@Lw_A+oPPT-~3gsHaIbnL}VMzcW=L) zO1{5sF27eKRXIO5XX%b6^mRt7g9sBXsFAyaZhU;4hhL0Qj+#zuq&1z7rz}*3HZ(K_ z)ly&o$L>!~2h212)KDgdQcw!ndzax4LaKHUkU?3wijq=x+m3EJe%O!P92{92ZK1v0 zeN74%-TMhwrlyDYQWT6XXZQp2h@PZft4Vgs?R9fU-mWa|A3qE-`m%m57f^n=8pF8b z2qLk84mW92{G59E>=m~edn*J?2fN;edASAF_IxF>$+K9g6+N$Ylu7A-1a4e!$>;G3 zIiYaqC$k1H&sK~8=0CB>{{FE2m)^$o=<1U~1OrPSFZ_K+`g^FTuu~~EK}ULupiV8R z2*h7Xp#tVU3Hnk@o%uHmmZPO2opqVwwoQ4~==|$eV6|31CF9sL%r!}w{`QK#B{Ws> z)fN7_%tCH*go9iZbUEcoHSr5k*j8>Zmw8IsLJoJgVtnYMY0B#}W^**6WjQw{=|I{O ziTK*t1yAKFr^*)hvwx0T%C!8QJ4^GBgXD1tqF%#FhSd1#yWWR?yL4FOHXY z{F7fBL^`e3hE+0Plk#+Ibe0oMd9c!$VnRx8>4S7Bk>LeKqpI zU}i+em!oq z$QcLIAJ1og*~bK3`(}k~Rz5O=rHR_v5Z1zKi8mH{HKLawwoEwGdUlr?0RNVwQnAMl zfM0eoFx7Do>ut}s5k!4A=delNjo5)O4sgjcI{`ZN^K~{Wha!C&P5*M^Cx?(bP#9W) zC6wr9f5u;@MD|3gsy{Q>B)9Y8?}%3WS*lVtAV9CdP6##rt?gJria(b3yh#n4*DXqf zeyDl5gh|-!ukzGrQsPBb=)jS<+4Cs4Be|6S@k-#`jz$3VsQva&St_f(d|E*;%1Mo| zj?kCS<7sqZk7pW>OpkXXkB&_Hd4x7dlxyFUwa|o8TK}ugfyshT!XQ@ENK5@9uZ{l8 zH@Jh(iF?imL=MT~%edOFq}%V1Doq|+u|(r9-jKcIlZ~>y-7|Y+>$pQk5pid~==~~v zs{Uv0FU_&4dfGM3GpwEUruK&$hbEuPiiEH52`z1bq*=2EB$XlW<78>L+9 z#@h!mRi0Ur@2nCKkOTAWd5{!biR`45z+->9YtZd5k%6IJd!hAEZZztQX*SUWveNUk z`1eQE8Ld}V*(i-xxo8gd5f6p;ZS`mvo9G*ct!{V)LWH)&JW@y@BYX4%jeS1(mT6joyhkVgLC9aIx89@Dp z9}*aA+wpvr*-bnoTK`)kjd@$A*m^79&+aeC?v7Vc9AFBS+x7mqn7`(efSe>$>y77w zr#TOJLitoP?rJab5m!^?M)FDYAds_oUnJb`c=V&0%>wRcd5m{S9TM=REmhk5_IEjV z$5|6ZIPuNFvibX5Xal@c))?Xw>|hEZg{3x8R^Cc|iM|wJCN1@y=AOmy8!#>Heg2@= z&%+ffI3=#>GAFQVW};;HdS>c24>Q7+_CmMAe!jH0V$>U^QcKYK8RH|UXZ|-^N6~?^ zw|5^9-rb!q{P!CV(sCnxf-8|@C;3A_qt)5v`EEUYH$i+~`wVxkgP{SGq@Wvs9~aG5 zoT-^^R>d=uP6BQYYWMO{INYJ!t8>iIeWA%*$6qI3!r+g8BgYV`RiUFZZrGP-xako= z%bVgu?V8GJn=Hm*Weip&5F}|UiztU#+dnpvTrMcx;Q22c=6I*5EjIWE$|2sftUfd} zHZq;!o?0CC-{m#M(;FcuzhT8wFvnzj&O|A8O-wr<4XWWe!L?^WIjVj){JYfBtDZdpW zak{zL>UvevO~bR~uH-;}Z3naCSkX?pr~V&{kxqz=~4o)Qup&BzNDQ zIaw|My7f1@TTAYJ{CzfQUCoIGjzC>4fWAAszUnEs_O!~yVIM46U=jX({*3!xYXfa7 z$bfY3@BPjF?cmi9ltBjvhw-u@k6xklOpaX?C#Cu%x_n;p?dIhQRli}|)O%=-)N{718 zg_7q_I+Ku??jN(sl0CPm=zAd)(t#SJvI#Y^5b2C>@Ap$%6My`nCw#III9X?x>QePZ zAqN~pzc?J|o4_(??$Z9vwYsC!^%KjLR7%IqF1wH4i_sw0^w49*!Qfk0jqHfM+^Pi} z`vR4Yt#>1mbGJiwL5gd>a||6Dydz(&v9&d_#mvZvlCY=1OD`qUimhHsKnn53f;&H^ zH;U?{I=;aTP(d*$;yjUhjBj|JHNua|yI;LuExniG9JsigEhR#`(0}HeUEVHro;9VG zzbjJe!>c``!SHf#&!MEjrmnrNV~kHkkezbwy9`!%oy(0>;7^KkbLJag{)BKHwdJaB;Oxlp1ig(f5S#hlov(ST4QRRTXI=X3IkG!&S__07#+ zd1D*KPl5jCD=jrOz}_YZU|7yTk0(Nx0)m9OmrXf@^)jJ1XeRelHKUlIr7uyl(t6=s zew5C1VdMH%NE=J}NNlam^Jj_Iba2(*Rz0$vM+e;dI=dh``1fZ5o`^14aetYQQRZrY zR5bKU@ypuUlM1X(sHD8{uQa6JX2+Hds zDxnb*ZSluDkEissC3iYT&?l;uY*DhyAB^ChqkMlX@{w+@uVS?<217iKrEIHY#MaiIGRZ?O;?JEA0=dVr zPcl5@MCib*qHyQMkmjLK>l-I&^)_hxUuKE3hgAF|${Tx2OXa0jid0y!Qf&y4Pa02N zEIpL)84yM-9B%u&dp%Zl)uyz3k}kAr@6Te#%lW7P@81Ds_McmlHNYrEgQZV04qvi7Gj^f zv1E5<%N#kK$M`>aT!P3ij-P3tU)*{(K$W^s}YCY{dwSW0^y;hEkHCLH(@&!e2Wcl%}8Euccf zPwHa(<1kK|Z^x}Dm82IjfECnBN%@gmrtPPAEY{S<>}=jng`n_CPI@|S!rNcRWwGZ} zru^dxTe?LQt;CQJjs*G->#3-S=`K=I83V~Qh|vI@7W&{I19eo!snksFaw~O+yUgQi ziWV!Mk_m@Pp%7P>)HQlnE3j5M4bmNGM0k&S+88f5I1Z=C8=^e_8OIni4?2gx|IW%oNW*f9L?NAo3YPONVJK`ulN2Ar5nz53!U@mo5#n>N2 z1ff1P6Qi76K`VsgFUTUZV@Ye7ms{top3eed4PT>~tSs8cmI3!-PMg`C1riIu z)|y7lM}}B3Od^{kHvD~)kO<*TW8(9VOW3^Ey$zm~))ZbZU!vqzCwl1+zo84JVjMBX z1V}w=ZPrM%u9wx7bo=)FGXaY!sE6Kkf{_{#3!U;%ynVwllIfL=_}as-wRv>_WeMnZ z)spn1gHODvAP1#Ge4f#t^Dsgl#&fCYh8%_Z{ZflnXz$D+%SR1IXqAbcyZ9j3}3-=;G{5L5PiOs3_X>4XnQ?G9&*vU@f!kPTp?^(S_3SI=Jnssl!oMEYG=y% zqK3caOyPVTtD+5jKbAjaF)b;jvA@#YFCEv;_IcgaU#_ZDR5JC1OwUL8nng3^3W#Fm zOCY>8#d2)vNxdxU|CVi8!uL(U{dLpb-G`a3KD9RyeK{18@e$metUXCSV`&#?ps<8oOkW5qh7b>`^MWoS6v$Anc(vlM`-h_c{XoSq#(zlCQJZ}Wz zA=NQ5kIfZF{S(wgLwC|vhng$}L;@{Ge_Bt0T{3ou+0vc4a)en+gRwkVbq0CyRO2Pe z+6WO#OU|d?j&=^;rsmd92^g^!sd?i1ZJn@Gl=m2uTs}$tw%>{rIiciB@(RnHQ8{R_=$b9@qM1GW;k@XhlREY`_eKkjJkJ279jkaS;ZR(hTIjk72G;9k>ps7qgV!N2%QD^jSTvA{ue z^l#V*~rN6 zPL><3{t5mX)%F1{>pC-WRu57(Xta}A_m9~$gcPnqGgttRC zNW+_)>Bp3CMn)YuRRpSMHkCr!X;bm1-y%XWUV$+x`nuq1O@4+eju9` z8-*!#oUg<-KF3bfN|n({)(=hZQ~J-z=2+)~JcXwHjd<$Hy_v;XUKu>;iKktdH*5g| z%MWM9{#P4?qLA;(HYGn9-PfYSvAuR zNg7Bd(LXrbiI32ATshVp<5iH4z;;BxB!gr`LZJ~d#mda?IXdUoVtbxOzGP>if?|$FVv3B?+I&wWl?Z6Ow zduB-D@8_O_vbXI8;*^x9^oQ;N9re>RwVP6TT$o+N!+50R@1mnys|&02J&!}Fv<|?Qn#JhudBQa9g-INV9#O}~rT0W7JdLiu6g_lmo18;VyIlVA#@l|3 z-ePGDG^ZoH!5?AoSN&?g9A201zCzv+s_^`ozk9*8D=sf?vLmOGwYBk}N`7+(odGH9 zP9wXniJ2lshczsnC)><0Rll1AxxPM)JQx|-@BzR_zV=&te;U0@-;oSA)N(+u5{3nv zhvwl#?9C~@ztzL*0u>nH#E_mm$?t9j(X<|Rm-s!}8a?au!!Vi)S`s6*tSj;3FsR%v zBnP;jnEG1NzRVQMzy<;a{?BO>Mn^(sYM~NIU)W_|;#7Y62CRKXb-np&+QMnOv9tE- z{-+8u5uOfL=NXN2&&6wX{-67o z=^;82|4f?EQkQuQo8&>=KHZ$lM>cRHJ8IY{DoPw z-($FE92eSv8@NBW8_(vEEr{qOS@y{41UeB_qD2PTt}cDg5ljE%_4B>W@D`Pz=hWn!Y(^np%MX)6UXvTRb`(Tz-6Lzgu)U8WhY~?13i^)d@+<%!@I0}tLCCfMn7F0D}Sca%SWW>CZ!RQ37nxnipm3bv0Imy}4|Q*f}hXq4>}z)s*5( zFa@z>yQm9-*Mz`SKs{~8_@@j5EB96B@~awO?ShGc@F|i+|3)rSdYfOFu?RD5t}1I} zO&-|W6cfXv7qXXi&(ZY*Lr-2to*ou*nx{G?7{O09z_THr{`U75DoMT8XnMAg(`KOL zCkjz+b0F!KV<7fY2^|@;NMud6OagZ&ZUYMVcCL;-6Gf?sdltS)UpOaN%0P^aPy55G zjFr%^!uiterREZ<&&^9U<{Y2j-`6!(P5nF0Y%>YrxuT;nzeuonf{PEcImi8`D@>B- zVcI(l&P%^$Hn!!<#tD~mMS>}F%rIAQWCPv`4TBemD5hisq|NXm#IdQC_I85}@odyf zVJbz{DmC#NVFHs~p29Vx2B2A}KBEqDor?=05#Vc&3*~Nd@kfP|keDAwjE{b`8S5Ut zn?to~(811+gnmP7VjePjdZ8~g?Dpn?A28sBpnW_}zgraaLNw$o^F0%L5;9ki0o93# z+~#rv$IK&oaSi(LgTwaRQo6&vri0pPuUFEH%x7$63Fvz}UghnR+=(*_9QAiakPYIk zIg7h1=Pok5oI6@ANIzx8t&r=7ed$u-#de@!+Gq{*l_Dj7t~K2Xpyy-*6E`wwOvj`K zr{ZE$m)88eww6TE za`$S~Ku zz_hL*mN!A=$S9HS*bJeu4rqgr;^^RD)ZLDUB4ql6avdc+`yp0;Pn8O6-j&;v>KFS? zSe5yl)>_5Sz)bpOjR(#RN{;bRfvhn>r71NuQ?QZ}((ZPjLCrXa8MW}aT~qfgk2G7I zq`&Ni((v2gI2yD;j?{unqj@q`1Mer5>c7jlbLjKoD;HI$(K0he!S|5fAC>+6i5Iy2 zz01Im&(e{&C7|~!PYm0yZ$*u$=uHiibJrx#ijzx!Win&SHyFgIe=D*PC8CdbVYZyo z@wn)Bz5WEjqxMD%PI7(BmV(+kSU3+tm|=}CaA6EY@7pG3;SVt)bhj{)=yofLAv9j$if=E`kTnBhy92AJj)Ai@Dy;sL=Z@ks~IY~+HaNkH^o!a3AeP&*(;&Gtf zqeWEcDVfOS!1so7GDpe~Hiwj_fqXLYOS%oI*aNiIRaK2(@gZDX`XmN#uS&M-(3|8a*TG~kMAJ&A^A1H_8C`VUu zW@PQTTqQrc`?QoH3z0?E##!tcLqvN*YksKJIKhNx_~)Op1NZ-`bF*%o;*0d8HxLWD zENPDU>fWY{JLs#*3Ye5YYPLV5n}3FZJp{N{hIMdEMtx2)|vb>#bO5UYv$NU^8{QAXmvUqIm3(eJ(e<9`A%EMwU0Kt7Y@ zuY#CgCcFXPD=ncgo+nA4uaj?5kNV4XlNh3Jc|^|AxMzkw7j`tVfN(K6?7F29M0I0VQl7B_ruA0$ZStc>55z8{yIxnDe#7{H$pItL+DbEOz2IR#F^Iq(BlEJ#bwa7mN)UC{vqlNBD z2K~8?C;x!+Nxn~6kjSssFJzfP5R*BvE+0vk9Rrx0LoC#e zb}Y=T<{CnWW3SUS@r=CY1k?$y#+lePJ3Au_#d)*(dEPEFC=cqFyw4T!t4&r`GrLb1 z05Z_f8n!Zp6na>#;Er*53^~XyE;;jB|3rtuJq0fNqa3gl z^M_@b1X+e)IT1Ziu)%Fxn~~<=rx?f|`EZhW5NQUK0cFJbC_wjRw#ggG1VE0RC3r4~ z69gISvOkx*jF1Pf>%F>;-?}w~#P{hzhP$$yCU{n?+0D(67gksd(Jvs)SvnsjE;&sY zIjBE#Nl@Z4H-~R2i`CHiTz-AXM6@++;|$s$iPSgk)MXY>+w9lY)|rcqh0D@yZT;o( zT}Fl>tyt=8@G!@lhNVDc6LI%8Za(tniV$V_esg=c*Z5f^@%99sL7+z>6GCE}w{I*oVRx44i z)e-mZ>!@Epq~$Z|Oz@vWIWw`ZyQ4+!+!&DGe-$EN;C}Jt-66R;*e$Is1?`|ezzRb= zy7HzH=2fYzF9veVs)Z|)QeGxh-k5GlZ*-qDD&@st-D+BV9rj6_qvX20K5yi^vYl9^ z%_2?G`=lCw#N`FACm~I^U!>hI=tz)j8nbs42Lai4QVAGQ^O_!l>=XRhKgq}m#{svP z@~l|JA8sZm~!iK8R$%Pn3*~&UPcyeCOq4Z#R(V|DxOfrCUv-r2nl+kH7g3DUJU{ zN)z8oY3fJ)-9x>`QzoQhvo`nRNr$Z-CkY)0@U;U8Z^ni#urd)W% z2wA4Qc$?tX%F_mN#q)HsWUdmJ27IVBAH4C~am~;KnIU#F0~zW8Ij0SHzAhuMMv+JI zi=_(E<{d8O65_)$2*PsOphU1$Nn*RSw6>X#ZtjHQzn(V8FFFdp(Al}7S(x!%=54UI zXK&W@`?&Ymz@as`V;CV$fSfZhYireV(sPKvyW4hlbpvwckx8&-lNh9(Rr`-Pd$6z) zgZrMIZW$a}SyN@=6Z|qs$G0D7TqLeTgQJs#3`3T&B>&Afx8-k@Fn@XHstomaN(;VDAJw7o z97!_buh-Ho;}IjVrNr{Qv7iK6$@3Dc8NQOz>?0{nf3IZt&r*8xuTmQM7b(5|A5wbx z|7!ZbW&7p-rRo1CTQB}E*?RT=Dw+Ntfk==2Ny+wiQdaU@GV=UVDv4zptF+dnJypcT z1fy2`Sc!t+ZWs_dNCb)=d8T7HSpGxfb|S@REH7A*oh*}>NavI24!YKP0ng_l(y%g< zh#SqTG&)4`NM6bJLEsvco0pxFR4lsqGgIbtpj_uP0a-xdx^kZ6SSU2uM8Ed-HnX7CYn@{0x(pzX=Esfi zGAgw&&5IFK#gun! zdS+JdzhKLdM|`?Kei-1>x3C}!u7J2g?fSvfkD!a0M9!dhTXj|vrce`v`MBPU9f>gG zkiVirJUu&allxwbOvvcOtSl}m;Z&B7V?T@^tHgc?%7)m05Qef%ENN+KP-5JrWcjN6 z;pFtoF#^YG+OG}RD$?8bAN(;B9K{B-kO-;IAu(;Av(^wltA2Z5Am4G)H8|a-U}yHBtSV(rwod)F0+r@%6`8+ zE%UpfEKKW1csALGYIaUQ+SYYxW1ZLja1J>xv2IQ1C2>3tFDp_No z7Ob1p)$YKE@}d1g5}D+N)pWjTOWwgz}CuxFuhYvZj_0#c(yxvo_*4IPqc?3PTv zSF-tj$u?b)4B_%xuS>S=wq!f*Yx>N#nO6PWGH9zCW~v)PMz)mbu1*C%=i)Odn??G8 zrXQsYK_36lK$zeBn~~@e7U)<1EhHt@+hhNsB>HWjfFq4bcwx#Fy>tcJx8D2rYH z<%}7KAb%D<%_BclUmmhdS$Lge>7CVNt`XY)ycGxe4!+B@{kAsTd)kZ$A2e_vItKE_ zn+^1zMQKS~Sh!x;672w25Xidnj0Jp9iAdvjj`&njSI30qCMC?RCPx?^T-J~uSF7|B zM8`mn6X6A83ln)05&I~-n=tE5*4DRVdT!Ck^62=C6c<>&GRzXkT7jbVPT*J1q)$mh z!?Fyi&gbi8u%|;lzkNl1`{gb9`u=sfIn*odtxcwgjumtOMEWobb6zsFEt0Kom#h-z zY`#yj%~vGbdQEbzwVCHO_mb`UO0wiP38 zl{`;M8H=_pMINor=K+vqCip>;53(#ffud7Q!`lOdgL9o=xMdl#%;Y}YFfKA#cJS=D z8ju$fmQ?EywQNvklmlr$kY~!z%aQXS$oLFHSRt-hcu{~S4fms_p0O@7SfaimQ#@Px zO@epw4nCu-*&-JZQFm9NOxUMP&I4GHjpdtpP0lK8Z0m^dkkps?GTWKqErBhIyojs9 zf)Ob?p}qOP$Ux?hFWfPxf150%vcQ|sox0XUe}}BoaYOnbi^O5x+x{;ykaeufSb35C z72T&@P(~&b$cH9m9MXb?-P}@i0KwZa+Q)vNf9GumZ#CQ%i1w7$d0dw^L|tGVxMPe= z%*goEoVjAqcu*ds13P&Ya4gGA@?x;Dww2a9ty-z%BIpc3M%N}z8lfxaub&MzdVBs$moTP4zeE4jhH z*Ypnwk^X~Z_4{n|HN8e_xXPj2f@;e(xo2#`3@pSoWnH$`DOrt-!kQa%L)YgyZ}*iw*tscn}Z zWSN04gc$;TSqL+)vypemGM09Hmm#ZRRl_tf$rxEdX0Y}_mQ8*R>Bk{FkYo=%$N9w7 z4L;Gk;QB0*gN2`gi>>~b#AW8Yh));jEMHX<`9TJ0m*}fBa3#YtVtsAH<{u%`$00xO zY~^$SD|*wJ;*v~E6=h~_QC8Q9!u5KlJ!tTS4$(P6SUU?*x9~Dd4#djLghBI# z{_nDlA2i2iA1dh{vB`+#(nciCrwqsdq{&0aJ$?Gr+ym%HX%EONvQKi7>kTpenR8A4 zb)SZvCd*it-KQ0+<3%RRj^Jk&Vl!h=C9ixorKaWJWw93=^W&5$q!gg&JT^0l0gSsw z95=W>N|m^~PSV{Kgzrq(X}up*Pn_d<sX{*T3jtr^X zZs3}+ifhKIy(Rfref3Taj?!3F!c44X$Z~Ok*E5^eFg!BGe&FE=B+W#UD$Qg|Q(lJp zI_2K2L0iS|8u69&7#8Yt2^w&&+APwza+uF^(~#ua?@6xbw@Q@%R;mVY-S~USS^7K4 z_5DF|U0+D1^+xcMCVn+!92W~h+p!=D;pTAPSb8I+;&Tg0XOjab{vsv(o8SDKg{|Ah z0zLIZ@RMGhFpINYC*s6_%%YUBWXjR?ga_N z1;g(Jc}B^m>wLeuB5$6&3~;d_|CEEf+nh(#5kFVSACqZVE}KXX+Re*3mdOOv?1`DYaUnoibNs05Hq%{1$ER~f!IYNj2>$>th8NpOAIDiOH-?(Ei zNTNK>E2*ls5OaBZW|qswdV_((^muX(`3DdfEbf#)b+Wv)qQ{s_b8$%w&+aY=Q%cIn z7X~5Vv0W<_-D(+7xA{V&kvvwcqy75Zkjnt%n6jXLeNcouCN4Tiz7BP*yvQ?_VPa6@ z&I4hF^tzn93q)jrU}K?gSHkV90s`(~|8kT1iae~ZXN1n`e`K(w zsZp-Wg~zs2pihP96Dk1oE_hos-BP zubLSoFjye(Sm03b=M{vGWA?dC{%heid6P8M?-Idue#s-{j(;z%84M_lQ0eiD3ZC6a znG!O5<`))2D7jGIyWJy}EJz`-h9QWAwW7nmENz&2-q@gSiH5RZ^-H^>4e*_lW%5h3 z3;ej-v>YJ41y+kh#*bJO5E{yow!s@H+6=LqL6A31`k%VlT{veUxB;oWp}Ml%B)1VJT4XUb$*~^nNW4acgEWMgGJRSug^)P zba^J-oE4B&CuGl`KR2R`8wSJ)62)sACrywDwg&;3r%}@3@*7Aokr4PTrnsIEWP?i`|?m;klor^{E(B$ zekwD(m7t7{3d#&!z*`NXWi&NIxVsDQlZ8j1ozXCoL#! zl818yB}3y9siARcLtt_rq2mhqdL2m;cQHBnQbIF_#krwFviLZ6e5PdiH;4yd{6=DJ4xN&)94!QyO3!HdBoRC4rYa@vjMnC)yf7@KnFmUozqOEb<;icQJo}53 z@qK1OV5)W^js`jjNEp7ckY#+9Ax&5_-NLwcve$l%Ei}v!Ynk(~Dq>w^f*+P;$g(fy zk?s&KJMc4O(7@z3tjvU&!?HvfQD%Xd94xn#m6K-9qtkRtFa(#*lY074P+ts;e4-y@ z-0PnEdfo2_p4|sYJRby#{6Ul%7~zIO{x1rutAo{$SL|4s>+A8a4}%pFbrwR1V)5Tp z(z0v>29m`xw3OvV0`f%r$Ms-tZr<|4K!ChDe4mcl+%c3SLhvApwlwc0>c}u0@J4NF zdfF_x!H*jPqWa33XqW(6r}-xT$VhW@!3Gi^QV#qEHw1%$~1khhqww($(^@NrrURl$9PUt&6NeoL^f!XN%(u zaaIytSsIlJF`)OwPHjb`04ahTL6EU3liUr1?`V+jg2BEk@x4IiX^0R8_902QA~3=4 z^Upswzh$>9e`;_mGgeoKB!h_Huc(7TEi1~*lo)#D08sAK0g3Y&;80KL34k9$*0?8D zYu+w!JqS4a9D^vO$$Ay3U4d1XLUP*O)2 zwJ_Q5^1LO5eBzE_Wuc^$g+j2%(RY}%YyCq;XwUAu%xY_4;PB!8`Lr)vh(dJ&lm7@$ zSBGl`U+(CHpkHlbram8$Oc><&#LS3K6EsnDG3}FN(IiLO{`Es|CDmD8dufNXxg_PK5h>Yff`2tv4PrXm zVkt}pJO-h-?0^uvWjXD$?AAp(2CR!|!VLBjJ15E{zQfuASz=`fW>WhTM8MlhVuCX5=3Dh@MWvt7PZ(j96q`c1G z(sz5{gqd^54`kV6E;C3#el8Nsz@g;FC;u_9!Qw|gC~p`)g==-bx=f| z^F3SiR~_=9vQA`-4kfs_ol!m?1H#kMUWfzE+l_|0dK;95`-V2ncE{HoKW5%)Xni4v z5uYmXVhHk)*3yZ{7&va<(U{ZQkHDe5I7*bxBlwC0()`xb?P1M)+OaX{!_mmFDATCe zLcEPYCZ~KdprTmJq`u9p&DoC6l`vy%PF4$Sx?(F2+OWw;v%6^U+k`aZ+sr=4H&>*x zJR#-c(`4nqZ_Qo9EX{+s{IN3>4ZLUifeA-FzC zkB*+>M+Nt!^M!0X@y3stPC0$A{lGKvd!C(r>K#`M@&;jMKtO&kTAlN_5J7xWAux~^ zUX|m^%&Sjx$xFS?q`Zx2DZzrkP@eBo2WJWDkG4*XUk1*_`J&|o*F)-!dL{9imq7#r zBFY2*Wy*&>@v;E_b1b%$1MW4%pbmprzGb4PbwcJUfh^#=%mBDqWrVkB2ep%m909IpB+oGR5J4*W$M4L3QiT<3|ZUXNitciC*x6_VYhcR5wVb&@Z{p&!wvO z_rbSW2{enMFk#Rv&6E+u*(}XTd7+q8X$9h}rCi>W3ck(rFGA!DCIZerlFG`2Sd8Z# ze58b2A~;#bvJ6>fVG@?UhB%>oQT`A)(qSFJUeZLT3Rz~d7gl8mGX&~Wwk)Rsse~j$ zmMJ4hCDti)iI*kYgMhyA1gJ->!;oc2GZtsJ5WWlC2XeG`q94{q>XW+XdHr5#@LSFa zgd(ioNM}!e@X;oJboy=$zi2>KeNhQpE?Y@rz7Uqnrfl&CbWmORG8=)x$~?a)>q*G3 z^9Y6FPNv(ONAwYo~2;~6s;F!6D} zK@Uq>6U8Fmm^b$c-aue!hwOeVxJFnmyG>fLTC2R()Ya^(H@CJ}k#WuHjJE>3-B{Op zqpl)8El}mOR|dHj=9mL62TAi}LtEvIMV5dJx=r^ZAA-YsbGCC&{%IVlxwsBaa#)?mpmm~gqjC}G$X`2 zD+DgB*eZb#=k4votx2B}Y{_jV1QLR-`x{#|aMwKp(u`|{rbL+spw09E_=tP#j|1RWyEHEmgDH9xG3yyio0(`5NDIALPT`B)UOnnIRIyq3r6 z81XhJE4Ri%Fqs@j*>RjsnuOBx&T&6@J)!t~0ECqp@=I)Hh%eVU2r!S?ezhb|O9%P~Ws!bTR9MFj?1^uQ#w!k-@TzoMHqZWFg!1gx(Lqy9u-25R%-| z+$bHbItna=Ne?_*NfjuhISn&^t3u`Bu`n+wVV)^2%GB(<%+4FH)L)tov`GKeGaI z3t5I7F~QF*%kHyEgThMeL=1!uov^oS@9ot{F@O#F_-0 zFz;9Pek>5R;1QrkN}6r4lg~A=oc3MGIY-@GV_hT(W_v6P@#fvdRS(@OhO3 z$UT$(Aot`$t9eIDl7A++;fjGTH-yTwKopOTo%OAWl++g<=xrQX>T}i1p)pn-WD0;EUzqUJ+dmH${b{0k9};6-H7uK z>Yqhx2rEdPZ`<46Fv#=oLrc~+ZG@R+v}+QhSj|W4=ywxly(t#vj@D*d-nyrwMFqRg zLNG&ojYRCI8U{gAXWz7kc7s(|9m{mlTN@9twuz<;$l4K>z=GVM5DzZMWT>E0oUO!GS`gC7a z!p6B}nOE>w8X-tDB(}j?=0qS>z6m(y9SOgIEJ2jqXBo>fkrEsew5AlTrV>QMn9V_$RdW0A=xsP*@2`9^@zw~;@z(M!q9Ec&$ z<%1=BmKiYNVgj+^`7aA71M-7~6`xY9iVzqqG?WG9U`r;eW}=)~SOU^qTwIW%l9=-t zF@xuXXe}-!#9m1v^-sMbDj@}#L9Wba*WwL_Ww04k?d#dt%_Tv9WH}Weg(dd2h=R zmm82{BD)~7YSGP9-;(nQa^1q7YA%P676#Z?&{pOI&;#^m|y2^pU%%Iezro*Z)e&<@)y z%|pSLxdYb>B4@N{Vfw4U&`G@od~ygomrN9_Y%D5K9+&dstB}@a^!VkS0O(3I4LSrY zjcLm=KFbg$6f5M2#^aV{|NUNhAu28cvq?1J~#G$Q0+` zLV_y>&+QZaAkmi%fiyO#yt`$wu#-<8JcK$3gUz+|H6t$O%RJA*66eeHj%UUaxwAT< z4yur~K(ctw(9X#dZ5d)nTW4^`KF2Q$u&QHa4-@C;i=Aw0IV8;hV;2@V^V??Bvj~(nCNed7eqqRA&WVucHlr(p?Hc6vC0IzFM zHGwqy=q@NpR)sP$qWk!{P0cOJ%i#%m^!$xHeLXG{Gpwlg=~+Gxhmya#7Rk0;lU(~9 z$+TXVOuk1eph*i9MWtm+Iq!5tTDoRs)`U{gykVVK4WZ5V9J$drPERVc)1aycfXMW4|Jne_jkuU%ZlcBIAV^Jo291D~{{J2)c z(Lq`AYIm<|2K7RxM>?oJfY-Zsq;#Itxm%DS#(ee;lDSo{o+0SA z@GK0nsDF3G@bGvC{r)0@GOnqqlS09lL2fen=lD*UXtT2pNVmKqWsu5by4|?O=YzoT zyo4jO=nDFLJSX+RmvEF{2_Y`c6gJ)APp-sgQ3msxLo#S2XBWLmqJL$ zrNw30QVxmKGH^$HseYFM;>ROTwBNeAdfne0e0?a6^lL(M;K$t6-YkQ?9WvP0A>AF# z7CD3VwY6Qc#DluLGD7vmN|+e9vbrvBrix0KN9DoeVR`m)OeSaMBWd0Xt>jE?n`D{> zl{nv&458*4yL9+nuU{e&bV4Y43Yw(H5`Sj1Hd6uHt5R8;mCEwC66Pt@kP9N_mXTD> zB>}>ZVt2xf{G~0+9u33EGUw76LXx}#3^Kcax%hYfJ-;(QJ0(p-MR1ZA@%})OQGQsN z@&CqZ3yEg%0g-tZai-4Gi4GLYGIdWh6i6|o&5z@TLE<sV8_?0$Ty|lEn8hNJuP(D~4@}fH57BV?UgS3c~ z0dI&ghVZ6{c8uP^V2Ir8%Eqn?qpt#C4*mYe;>dKn)~w708BoG}<4Ug#^>;~IGm8&o zWkW}HMwk=j$a9C3Sb{V|+goKRE-cHd(MkFF$*`pt!;>;QzbxBP$lr!`KvLgnahbC% zHzb?y)7~o|=q^2#S@WGVC(yDEAyf1iq2_SSSXa`#HWkS8*0TQO@|3fa<#Z#!;(&D# zvi#$ZKkm3;&{+b`b<6UHz&rngNL<9xK^-tr4l6CzT1Y6?dOB$U(It5&>B=w-*DuHc zbpuIb0w7jow)m@4|4yQj4LVn@%WwJJ-fO2nLnI&=JOj_gAc^P1!c0u*%W7SApik&< zAdUHBcHs+P0Pnc267+5$OXS&7MputAyF=Xop{f`XE2lD+G#mjpgyYxdKHTA26;`-@GX*YFl1e4sKNlECyQs zQT6amC(F2E;0qrNBOl+6kF4zxQYQcPcC^T?tG#mX#-I!hbeTUhiZ!gb;;%3v72$Vg zY1W6&Rb@59+cGn^D9>Jx%a4y4Cn=XBeB}LPq0VLaI%U%N!LRf9HVZ1 z5XAWq0VmCnWCl%-A3wHzET5dixoJ7r57akAf-TSEt{4zzNInFD`(9>HbrvY3r7_79lw;FNA zH6-2Es1u%rJVE%E+%;p?V@V$zi#_6Eg7(VW1T4!8`0!yyeoJN5(fYk7Yi*JnLp}1@?LoPFeL(uU+oVw+4xPvdfY{3(HjW1* z@jE67lBE@GwByrr^615geE0B$eE-WUd8(v&T8T7P>WBon8p+gmC}|#$Y-5kbYvx$R ztjHiOCP0P3T{8fy0B$ZzWxXgYY$98WcI=`9c|u`&g2d7>V?EqUmffb zD`z?u$hU{7a}vfYUK`~`d=Rh#Kt?_41eROeUMO>vWEg-4E8u>hew;9KJ{=|l87BAP z!_J!qqNJoJ`f+|*7SiB8T*vRtIdtAU7taS_=6R8+PXW9^bYE5mGZ2`@WD*?Zdm522{i^29#%jE^G&0$dPCyj2Kq?Jfrb zVV;xescBizve?`pelap0zSmZ!br`~C`hqPiCgQ&9`?Z&o0CGeaL)whVyX6=-I5M%(!Ln{XQO@xa}NzLtJ{R=0!|+}hr<1xo<+jXu&H)9?9Yh0fMC zCXW`RruumF^?PXp8dD=yW+lnDulLL6cdjUD?zeDrOaeqi@hREc$%Qa;S+h!TWMyqb z#wLsM%d=7W_UGsF?SmKcwosPtv+U#uiz2V$u_951C|M^*E|V^o?*hLe zIUvT|&qLKY5yN_AjWy!EL0#h7fV%^v*;fFhljb|h)yeCAuy&Hjgv$k%2=3d)3Vats>qV{TCbLw&g`6p@lB zGjC_MT()**tR6?mG8V@;s{ti_$pWkTsXkz3I9}PKGrawiH{Y67RqL8be#jr4EyVFS zUgMqzuo@bJh2q@24P;m^&n(+1HEn0U#8DHdimLb+D&{BK@b5YdpvoFF`J9 zYlFVxjTmjYKumAdVaI{oe^n&=M*<4OV%yb(P6y$|GR!jA>zXm#E_PnQ=_WKp%a$Vi z#VUa%I{XG-#o$i{p(Y{+iHRiMC_Y(`f1+M2PfBHRL@I03HlZ)LW9WB$Zx#^BDOFbH zvZ2D1tC4JNlVlq@G<8b`^37r>X8=eKL=WbZn-D*iNeLl`rf^J78M0cGj*N* z?PZ4#4qWzEln_I{cpZ)vm+!qyDdUp%2Uq~H5<+xHXVEq`HaE_baZy;;I)2722Kmq4ulAvK-)#`NVIFnkz4+0uPj*N(M=fiU>#?B7DWHJ zL3^Uz(WenYk2g2CBlzH-vHebpoN{o zVV?#H8RqpI`(%VBK<0>?!4{!kT3MIT@mYEJbVUC1$7k~AAD)_D^Xsu`S=I&~p}=oh ziEr>)*CHXyC~$lMX}}P5?#;7sJmUR9xiSEPjAF$_(P7nvm{Q(u z@jVPKA8hGFA>1fh2(w$9T#h{L2hQX7d{3v#L`0qm^1w53?4aLXW?&@YH7A`99WhqO zn%c0K2X%y=2kbN8z{4)sq$PHSpwB(L1m-jHa*x@_)q2=_7Iy)DcR9IbiOBLRZ!{*l4jtFnvRF1w8xR!Ajrzli1j(X48H9Kl zbIxJ)>2>7w!?oB?|MsBYa~|jW?{Eo$z++X$x=iT1%eqL(Q9-#twD1eYVrj%nJ2j4* zI?{hu_NxD>3#^s22V7XNbP?^~u=+brV30vKple1)-pI7-2cEZ7qEp(H1D=!T!y?z; z*Jl$@+uDLV#$`azyUQ{;iQXLxdRNIa^=7cLV9Ok(DsxHc>+h4HBoa(RGN0fqVC_}6 z_`p+lOxPqZTN|nmloL>QY0$=NYwNT=>#a`ldp=6Pa-KnZ`qV7Ud=RaIRY~a|UZKFFOM2X1yFi-P)|EIznw5y??`SAo5BH3k znu{&?9}1#dlowt}rTA1TO9^2PwgLUGWO>IWBY_HzRJPGFT0z=D;gZqVBiW{8^56v} z%zWnw@H>5a{8Rlur@ zSJq`|dCe@&6d>mjX~V9KiTYDPr7Y#uDJd&iF3&xY%JNw7VFoBWgytZ^jD@+X)+P*Q z^SzQS4BGZ0TbR?}cPI^#zpi&;bQA^2?;Yv;zUvuGZjV{nu@_G^*S*WC-gj_(F zgn0$R9NaA+FtmYmdFwCiKgN#Qx*BtNU=r8K`!f5RCsux(G_s6!8G;{tUunCX$2R!A z;(9Qs1d)!mOFP`N@V7oGFxaFV@Lk4b4XZo#XN1%G(lDqbq@E2N@ckU<-9#TanEqR3ZQ11_1dp8PxNsKb{=|#US7!x7!aV%&gAXYW>kg0dpc27el)> zpXHaY%pHU1C#$M&tdB*LzbCCLEbUidON;)b;zvCM8`Ppy8mdx3T#2n3WJ#*BN2X z5t^=933KD+A$Rb1f7Y`{cu4L(>_*>sk?SgR-SA zDcfMlT(;z-nKI^k(n0V#bn^Btnc$jEnCW0}y+|*A&a3ImM4~NWNK>K^vwA9gpp_BL2HZEL>&hC z$Y~#fH5otkp`k0b+9W>Am!+Q3OIT&GE)#Z>GGU-YWQkA?$bJYV2hr;4?66nalml;A z&VyTu*9H0&eZVVujA{&uwk;pw9NudCfQYCrSeS|ManbcKdhmS-GsF>@J}-565U>`r zv^9e|xB+=%fD2h39)2yODz}6S#088zx_+T1`HXzC4_PL!$S!2rA}#4>boO!MSO_zq z(bXcTSQ8rRR9KZftI!hSgBZ*xPV;Xzq5^3NZUtWHC|C**#T#5S@M+$ZB~^Zwlt8n* z_J#@yzpGJYN5i-8CloJVkj;jW7Qt20(o5La)_{5&1#ZRl#2n8gO=osjmC6yf_ zG4X)@hSH*V)Ye&C>7L#m>ulY+d>MdDQ!fw>^zGQ230w5R+mP22eKBq__%0Js;L4Rj z8z3^kIcgg_Y1nhB98rh3X7E-6;!IuuR!1|yXgxRo zbGykhmS)}@oJXK<*HnM-#shZ?Ce4qGj>w3TW#b2vQ_2q(O@^&sMd#DMC;4S?L}L$R zxmEhL{a#bDjQkQOpMg1La@;sJ!VGvoX4&Q&>!evncP)hm+pkv=4Z*dJPBU$<_B=Dj z@gOhZBhd0NR}TD|m$Xn97FTRp?fJ!JSzg8B?6IDcA1LsNK8XT4E7&T1i^EcxeWZjr z_%CxT!$1SFY{COU+(Q!e`%E$^FjJG4OnsN+ng%5cVa|8!F$nYNmQgwm z-$xd?CtH5&*GuED=kfDNT$B8fc9fUq3DQiuES>Oaf%>3coR~qH=`iRhQM8orL3MUi z@VlURL%jj&$|w5Wy?fUdD#3CQ>+fx#uS4Bzn&qFgwZ(uDBE}i|N81Dj652+!mR})X zu!skA=#=MS?e${-sUm_6uX4>or6ePCx`8CxvnlX(B~~kzxc-4Y>Fe#a!O~@UbIAZ6 z{feHY9L&1Byt|@qy8Izk7D{e#KnAZ2m>=_bdX=xOe5bu4bLaw(_JKNgU7$5=)yrpi z2w@E&%~+dRxZ*=~#aZIL2(u0f7?9c`Lt2L{I^%?yUXQZkddHuBeO;a@=vNYR*+}6n z0s7n*H!}Ggdn3amN|tqii#rB`JoB?xUC*^3%Py~eUHG0`mU$y`?b=ltx*A-n&@m^a zUyhY91FJYjI`y^YqEX1#D{*d=CMD0!y5%$O8=fKjP_|3E1rKyDC}c*I>)Jq8@o8R{ zg{4(lSYFk}qG@?e6D}M0IR}D>vco;(;zLVdWm3vYmP<1~O9gj~Rbnu&p$}9e=xCY7 zPYOpACbhcNvVb%ba;3Ile#^P0p+K04lA$E}EI@r8w}qMW-_wf{wv0 zDSi&W;XF?V!SB!cPP}O3Y`G=`j90#F{T>lV1LaDhKIj;EwM?f0`Judlm;YgPbP)Ir z*Y-C9$RIv{tmFq-#=^`J*vQGdWb9J|Wk+H{H+8eJvZ~u8bR2b~)qyJ>Bo)166S1)P zX-C%J7QYW@@9zTbZgq7IO zlITGrBVp1b5eKl&QX>?Dmj!wWJ=m=Shbu~$i9wC;=ea6}2-mXKDf$4nAlk0! z0G^jTagzRL9u;zCzVj+~X+3|DKwTbAm_z>qXjAkx3{0C?&OGUNAgh}?pvC=xE#caZ zEAbp}r%kIP^fazfKDfb>Y^zL8PZ=p5AD@&l79vsE92=joC@y?&10nq_Z>Pwg>vwX9 zKB0|+y4pG;%S=!;vOL71Qe7s?Ct1(OPM96;qQPXqwwAnfv=*eZtx4Kj3Q}m~RW&5Z z{Z4re8!XQVI-gAhR1iE=9TNgsA#hO%^GtC`re}48Qe2ec;jigd0lZY6fKc3e4-y=B6AkFwPv#d76nfAar#|7$>j(Tox-X^yZvlVgy zNesk&x2>{;9CvqjYDXJZm&7WE9=Z&mEYPjvS_Y$|yxyKvBC>3R$?FfWg-8+&1EM^r zgNLrpPCItq05Rm*A!J6xR+f!02YJ(a<-dOK#x|-N{Y$$xqlL;HR%e%iivsGBKItIB zOdaYewojy!8f{mEb7TvTB0L)d+9hqHOQu6Lu|1BY*CL{YO~%yEK}Rb=*1?P~N6+&z zaKps{c?{87G>sABa8kdUk$II>>XUf}TlBq2e$x8ETyFHg&6h)Fb+9|A?H00p1+v`L zZG)qe?qg4kFat8p>Pll`zRt029V5B4F;NkDfFv5a;@rxE2`>rKft>9)R2kDtx!W$N!F z2=igsOJGAoYqQz#H*emwSMHEzj&lyyGDgM_G(dwr?3qkPlka`&_v7Ax2F&%bRI)wp zJYHr5qE%(G6D*l4M$o7q%9yhJ5JF2Q#5GCO6XXp!V4`1oML#;+h+l(pr*0_6K$x|& zv<@%vWmecsc0JGK9U_BXryVpm6^^}gqaNw3r<5GBsvoP`(P={%(2pKM4dCO76|S$Z z$1GF5#2eP6p@VTHrQ8mm=8-7$!1Zfe$Y=vC4&Xah#vQcjw5 zdZWgjwr2 z#G=ON7|12YM)Jo#gT!?mKrSvVCd;AE?IbL@>CYdNik6D0V?`s$vk>K(nUIt);}V1w znJve727Hv!={zSy8Trg;y}90iEs=i`sIIQD!4Ki$8022No{;74E{ni(8g+Z3gxNvn zL!8H&ggiG$M{ARGb+kx#N2_j|rMTF5(DKgAxNPTLS^iLN=kN59{b;^vaL#OX++91 z52QTxy_9DkOJ#XNL`k&4TrpHA&>nAr&pI$DD={R5AEWW=ykzrzl2x({VI~fvvC|~XT$g(~d3DP&WSLj)pMCb35hN_l5LuKGoxfSiv;psSF1wxnK}esIzAp*5 zr2|Vd`^TBj%MRqiJB{#~kJtZU!3>Zt%frgm>xgSnKcQ0%69{?BfGY-W7$jnN;@=wU z=`e({q)uovBqK1Yn>o%aax^Ms=xu_IosNz2W(BU}wCExabi($ES4rZucGx@<_YKy` zAOl3kpdGf`M4>(z>>sd6QWuR#9Rzd^X+04ggZ@8E09=!eb(YK4dRF-Y$Q$yBYbbuM_EsaMe=ibT_w6Oj42md^ z@RlB~L|Y4kLf-t)hhbHoFX9R@W52UB6A1Hhrf_YxfiyFRfMBHj z{f#d=oD4bC|K!wIOxSyS3m3$NipkfI<14D4&9ba=i~KUNlflAi;8X~+0|n~-%`Huh z(%IfDJ)KIJb=$54y0r=GbAwG7H0!hZJqO?CrX=bHVe4w^s_i;}s2S#_F}G+$d2+fa z)4D&WLS;VBiNEub`9AAbNi<>WAls}k$nUqd%gQrD2TCn@1v-vbf$VcF9UWIn>r!4G zmGblhDNTGQrCD4tMztqcvhR)P?zm#?1C&G(9Rn+J7I%#1A<4Gi351y#%+>Y!{n;o( z6xwMKX0GW(8K5N7Wcl;YKi?rnKBMZb?Hd)RrVGAh`EeR94DE(jG#CvdpdJEXUGe6!ZOTs zgp{^d2N4eNNz7`e4tZfR63f>@*aCt3ctD)OYIaE|IVB3b;zc~tazWc`YA)CUB?J9^ zwq-)%VX|{kfH8=AfW!pf&~e+RY^W=W8ggZ2k_=vYy1Q+`7A8(%Z9eY<2cD07;+kQu z29PivL~pAc8eygygG$i6CZsue!w0ddt+`kWnRpv}n=mgL;UpiF2gXG9y-lJQ(UZ7K zuuS;Ef|6G4YZvB~w6a|NF()j=;Xe9#aly#35oFcV#7{;h(GffsdY5N(ea-U+H(UnT zq53Q-&tWi7ul*)O8J)~qKS=V`p&^SEZqYCrPCiU!8mCH_0hLMyDGVn6HRT&rVL_4` zj4(r-yE|K?ud7x1y4$6{TMJ4*ceXc~6}m;w!F?ldmgs7|7E5w7c?TicG>h`u+J=Ro zgDlT2tf-JJ7?GZsRzj_$dS(tcjuj)?ORK8vwK9pwv7w_@Ca&1XN3V%uq4ps9$EQ&D zTt{zG*;oqkmS-MHY4Y3Px4igTM*|D01+f@YXecrWbNJa?;6WkPgq%}ksv0HBa@cLR z0%2~sE}8l^z0BG9W71GgiZG{t=Y)vH>DTtjTo58G%a9{T5@ZQw>aXhfjax9CG;$%i&ac5S?t|hco%fFEynu2GokDokNZnvDgETWBaRu!4<8^QlTt4^> zb?+`Z_%0(C5C`h#UDt^SpqOlqiRw`5g!aR0a>`l1wZ!XkKAZocl4K_SHPo}HM6Fb5 z`~29lraqAgbPDbm=$NJD6>EQ78rg7HHGG%DE8P%p80#`C!(9eoSzKCLG^;YM7?cM@ z$*qx@jJwGw(bE1GD}PUSh!R3MFiB235)19>?S$=lNVHc6Q5W!+H-A|rY534GnT@=$ zP>zceVQNMB0fVIAnh_>o!#yra`zGJ}5oRXbF|n3@6ZsCv*x;1*h|30j80`|52M9KU z*^LuOTo)O$>+5~|UN$LE`#;yW4xTrif=p`Cy5cjs9zSgA3%O(!PFq-LaL^Kq>$J7A zD9h=GY&~_tydQAEsH=lK*BfE(RkA$L(;s@Qbf+tp_78y(4{!SAG#@6 zp_^0*j4bc>00<&v zIk;nFSPomsvH31{+>>0}9my01Bvaj}cRxENL8Cco!c3#&KCbAwE`-R*GL~hCk-K4d zLq(yw)fa*rEM{2Cc70{j4SPTMaX*J=;Td=q6dqfy!F^E#k(3=Bl$&=9PMDD;_9Y+3FMqmC7})BKTKPL zq!RWE0>d>v6x1nlU{=-fakDP-Dwx;wkOy2ts7=n})h^a5^V!uwQg3g!6bemt{4xN2 zML96xaa47zErY$XYVsc121F5(l9B3~Dzh*%*^wB`xGtch)>m2YVATdbwnzvD1U+`9 zNuL9sWr$yJ!w8n;ViDI%CXB5F3$qGZ2rsKOt}^E=NP%VI(0DD z*Ju9q_7+43b}X)g-uC|bv~ey7Goa!j&ctjc933tjOcHEsR)XA`w|&TRXIry$D|zlQ z3v`UJ6I?U14VPPx+GW&1tdt>z<*<(gFo-5;6}j8&i}1j!caHzdJNLc1XMRvSctj$I&1$I0o2WYgqdU1 zWoUnI%P+stKYE;|r?Q_7b?*sIlm2`>3AqaGjC$C06AAL>B-zjPXSQcm&|jkuIunaB zdO5rW>NC=eVS`16s7LaAR>LRC8C1G$h)zj)~wa-O4i$2nv}dZNJCu+ z)AG?EGbJTqD-#wCqdfbI66Oa|ntvj~;v^eNmT|8@+vA2|ME8LE>UkB2HP&T@bh$d4 z=$GsKTylMXBUL@WQ^I^*r7=&>5q@(67)mLB1mtTIlvoOYC*NWH$vO;}OFVxSYM~`fUC`dGQk|qUv zflOHks)_nQ-f+v|%>(s;j36&`suAx8UXepqpFDjgPaZ$9$!3sPCT5uhOgm516R1|5 z+tSi3*HrdD|Lnfpx_!$g0e&b5X-6E_=PzE!vu7{tITq&^gCBL$F(VBaJPKO3SgY>e zzo+f+mc?Gir}v@**>>Ia?Add9{N$OolMyA%#l#XBtaqMQ$|R@#9c`dd2ksU@!uq!m zqKvxYnn%;ZrvqvcA9(8t%L^=Wz4 z#x{HoLcx~xOiDA4f-A-xq2s1PGz^cm%p^bC9?+<*02l;phTr6raMpK7 zw(YhO<=;xK=MPfVaZjY7^WbZoB2J1hb1v6#B82kbbq-cT{FRSNmL2|_kmhf{{noa8 z#-hpnAkCy*C3P@(HlB;;V;`$Bq?rkaUw{3zJsZynNqg6|B0}9jkbn8*7bDFN9z4*_ zW5fnDzzH*HFDQQ>ym(#EaUvrSW(HPR9`S3Bct22{So>b-VCLD==kn^+Ynhswu~+*@ zwdu{It?JoI&>GDr@iQf^_wL=1uI_FlbngqI9@%~MeovLGztk;pUDsFF?SANT?g?pc z(E9G|Y?tfTuW9?cZG$7;FkA*8*H|4{q~zK2XY%~{3nf^S=DJ|{*LK13*I50m3KXat zOSaG70RKLGbH3n@$uqj{xA?qC{|`Jbydm~}0bkc(K)E8fl{6D!fwv21^;-XZa4=zB z)^>%#k2wILFCx*_koQpMi2=duQj2J(dXED;BC>nc@C?C zTL7&y-Vkwswm396XoDKsXm?MS>S*2sqd(4`zc|i~OU6;KD-@wZPykpCNLY!@7aFpw zqY*5`xOJFoM{7YkTJq-7VQwClf**8Sb2ukN>kd%f$O;1( zEX|#ro#x+q5jxTH1}|^Q7pwC6dRYCBiCI{?FlgvWR`z`6e99RgTC9J(A`ceO_v;vG zo4lgOXO{$7Mn0Id=5oL@p%)5;yy}5&BkIImrtZCsUu00G$p8F&(FT(tl-!j0_TIn80;TljfHw8R$`O&ydEjwZD3tEwaWol#@kWXb7$u zM9e@257HIq1w1!(w4V<%&khF)=P7MavP?U&NHn||Z*7&E{**b3<6hyE;)i?++D*l8&I(=cTedCgr(j zQl9xqN|Q>KXCByUezG>JoybOL*ygVcQ6?QED2P`e%Vx1g5!U2wML(P5*ZGx_<-3x} z_e-Yg{P<&{+>Vnl)6lpkzh|2!%e-cHpXKxfzoUX@L78$*?n8%!qGs!)nd|NCg!Y4f z&vp2n{~mCCo(*d!#Q8FG;3o;n4jHnQqf~y_I$;K09|yHn%AI-u$ej7iDN$xXMTjCk zN5cGJ2xZSiYX&u8QdSsbVgyiVGoWrLezq){!9WqRjQrygK%E>F)FaUmrc?$XiWB2u zp%ScEz}qf~I;8`))$9faZQ>9X=MU5A=L_VIK?2KxLG=WWuxm znlL9T{iX6p!s1L@!sUsT?|OQB%LzVRl$$ScQaF6^t}lfe;eS^4)c{ zq#7kJHAbr0=Q!v1WWo0azQrtYy<=5=B;{!(%Tqrqaeg9|#S#5pi8SXSFj#^~hmmEJ z0t&C9zk!HzUQL6=ScW9$y1rJ@{CQXgyS5pTG?Ea)1R=5rCKoz=Av|uv%(n zy3aC}WymtG+&`qzalTubNhl*H%}g@mz8vE`Plq9W4$o^NZM_D0;MsXbw=|!31%8%r z!i)?dKWvYKFf*uP%V+8!;{8FHqgRn{2s80mmzP(AoEu3C?ZCGrWF0a~s5c@Q(Agga z)FB=3oDxGKW0-Y$YTE8g9lIQabHfUs5C}wHzdl4En(LvA8!+0FIFt)Eb&a9cA(GAKl-*1l?97)_{#GF2_wHA z8=NJh?af9ZEM$TnIL~rG-Oz^iCCrw;Fi9QI{u*^K(5<8ICNS~htJ_*8nny?02 zTDRq_%SwtX^G~HT^FWF6PZnnx@?2S+R_R&Qb5+nG$V!x%$!h!7toOo?L6)&BYvM*# zb&_f9ksN-@U0*3-{!+>Eb?qTqWm~ez#E5l!eS^aALBm-n2paWq5oVMK*F$MIS;qg= z$ubsZUbBDf2$jyk84I(!WJJRJ;h@|hE?9o47c8H+XgFcEdQs7)3alP76?+3nr;1e! z|M8>9KGs4A1k3EAOU9Kn&(F;piT3(uOA7jdg-Sv!SGI-x(e88JK^bDj$3=;SN+<`c z%jhYjoV@3>d;w*K{CncJp&q;(Ft1!3kUvY72miE-Q1|G8-3izr4A8=I*=z}?cUr5& zeF(_gL4-Nzx$x$aE&j~7TwnmWa%I3svy)b29`~nUT|eH0yAz2?dJKH+KH8QWczdLS zValAzm_)8&l|Nj62-IM)(UW!xQDy~47LY>_c>_h=)aqdOJoSl@Fdql3)v5rLHl?yY zFXiPoQl5Vve3e<|dRmF{+*4b*&*CfVdCHLWzm9H6s@V8^Anf`oNbZJV5~XAivfO@K zvfW=BSul+~dM=5$0WGA11S;-7p}_OsIoA ze=J!BC?pyy&&NJW*IhH5@B;4R=^zB<7S83_`7PI=TsX!(u!NB!Y2F`{*>MqO${T_l z3G?xRvZv#tL$o-)tJ*ngdqK{<-1Q{=6WT8pPC7<9T?jK<2;RFSpZcCF&Z`b#`R6xg zU1n7?>X#5=4&;FL#4BRlF<9BJy{+ARBQFDJ4_NY<;D=iZx|R0fItBf>(-xA?ZUi7< z`NM*THP2FV{K6!E=ER+cK7>5F?qtg@GKp;9GE|jI+%xNf8yx98%LDD?Ai}(xKL~T^ zLwHNp-PI+1D(etui-2;fbz5WQNnMbz5>wvDA%kh!?xyMl^Fzm7DdY%M%tyxjgqsDlIS^hd z-dr%SE~C))>);dNpksk7mzm&)8-^ZZ5t4kjWLs}b4zf&YW0GH&l%+p6>o@M1+~VxN;`q{)f#uV5`639|d}nF$Y4Q;=+9 zpRM4RGdBz-`FTW)T8lS5u4MVy>oIvTJT6l+^LC8M4nzZCDe|*W4j)UHQ5@cw*r#)a z9N)cr*TRB1Sw0TS@?Ox`c}6F(5H!d#)@Gi^!F@d)1nA z=-7`FkuaZsSct1^#z-@S8OtxO8OS+h@9l$Xpp_8rthT1srahK&&0u zyc^m=ARUE#A(8cNON3QxYipPG);4KVVr71(T0R#l>2ov5jD+g}7YpaMf`}{JK8N`1p|ol0B@UsItfc? zhqtvsFZcj2YkC?vCR;o|t{JpjboN>IiIFhBCo0=Ig5O*cTcvMB$?&`q<+;a3kV_C{ zCifMeNts1R*5{r+x$fUc zmAPRkS#Idk?`uu)=9gCF#p`i-@btC37@3r%m38fi>ZG$>$w8}*$n(c%eSIGs7h$HO z;5=sK-nemNC!TSCf4_COCzUszkx?#No`uE^X~v>MqvzSuO5q>`rLaq?`5o6l0kTgy z(7_pb&}}5myNHDO{KLzij*n%H7Z;XfNjrGj3)qo=-KQ$-e3fws3wp|YAC>6tx1b31 z$2F&CW`b4q&6v#01*@uEGfAAs7BYl&d1z?RLdg}he&3~ME();DL7?zk#?nriSV%qX zYJ$!P6XEdV#jli!V62>GVfFe5qo`!LU5S+vPY9=x&t(6iq>gs-p!<+#CH^g~%|@*7 zjfIezUd4w#kq74RP$o7Z(g<^dG&MKd;w>y#c97mUOQ5fgPMEPUH`rhTy~f)W`mFN+ z%9b)GS^cQarhcd=^g8bX!lE;QFtZpEE?X!H3m2^Q8u~=?b9U`F66T{qg|f1>EalZH zsVplQUU+4G$>rGx!Kyq5QGTIBc~mNEMeW@;v|0mEh9HM17zYvMG*n0+*gm;Wk;&Ca zw!U4m%~un$jL-5HVcBaICQ-7CY%Q&B$msZtJbX4RzdRe2so8m{(T=FUr%i_XyKGr; z7GSYQIAwecVMZa4IM*#nCKL4;q3n0weHWua=Wl1~xFsP*LQ*9$@*KBS1VkOK?N^+Sz zw4Y^+YhYc*n#v*_EQd|~2dnCCy>m_Kw^d0LE?ba9>KQ_Q8QK!0kBODUogN>X&~liv zC88mRWDos;tdp>~LWUvBLszcY7N2fhGO$20h+tqrxg-A*b>S}ParUy%>=D{dLYWTxG7?7RV4em}z8XaflJ8R6c}3t0>@=x<~lSwIzSdB!4(6-a}Y^7PVjs@D@w>ar8H^g**FHAyd4C-;~H!| zZx8~M2cIbq6gr9foksr7J0fAeIDjt1pHzpAh5dzCHIs`xFRa@0Bki<~8p@AFr9rCK&IcHFt?ve!VE$`Pd!vrACzpa!@4GP zIQ?hHQ>ZIkX>hASkZIGQjzfRQ=d(cUh4%rAjg&VQ!eS%1R}d0z{I61a^Cu~ddHRbj zKvJ4}5~5=0`B;@rOYJN^qQz^%;pw2psK0?MLzMLzAvUv~&+2{6S8VmZT<`BB$CB5O zX2^0~tDY0cFP59){Ia}IlKkW2SMun2urA}q*4o^tq`ApfH)KN1WdRL}#^{nOTOwJiZV?AXhHzxvseMtABo`W?NH;?r- zCE?b|hVQu+uY2iGTbf(Ul8WmVuc>9Of71jX)7b4oj*V5_UtRg+)ss7-mhz z$G0iO8OJrjiOFS3fan*^P0d#SOlGwFs%~{n%$o?#g>W+1X3#yOgRqsAWi7+-MmOSQ z!2qSby+iu?dZkwfb8W3HHdr>23=e`2C4aF(7mFbh3d*mvHH|ijFV}iAxL@@BK?(D3CEN9xWLkzq>RNWl za!JYZ+`_Uvf30Ns(QEnn(Xfn8%vz_^(Oi)J?snDYYK%t(7LX~vR7r+C`=jEMLc)M>}qri8h( zt5XTgu0LhEQv`e_R{XNcIH53$^MM4WteT(itBaIzF)xCTo#li0AP z5)r~l(?tjEAN_!}kwsf(X69^w!9W7l;CbXcbUm&HVqspP7hK}TG4bG=JKJ+ZfjjXZw10#*DATD zYm)8!LUKL7SEBp}$##Du+4j4({B@?fpuZ2*7A(t4^6cf9{PpMO^4Fi9%Tp!JE34}k z4dY6GrwnOoRpOi;WnUIJF?Hg3ntDf| z1|Z4Lo;@?t{Nlw6vxJgYapAAknrs2MaTN3)drI|^HPMX2HtjrGo9^#B50a%e(i~!R7`0-=2I76E0Fe4%^ z0$7?Ee_0|CVBsVJ1|j5d8wi8QutjHL@q-l4&CQ#i<^mSKjnE;|hJp`gQNN!vGQGJO zCfS-Bg6UmtKdMK$KCj~47n;|Y0fv)h%7U#EW^@ylWs8Q<)@nYw z)W>B911R!}iyQ+cCmdM{r&klFQz zwYiG|^0;deoimFlA@(RY@)yb>oQD;^LG@3t?uU51Ze_jfAdgH0WYA=C(A=VfHYH&y zhrs>Zt<3cE_7;=Tm(9I}#J=n5h?50!%78k!X7tQYr>LTp7^trCcoA1e=uvZ zg^F7omh#G!5p8pupwhI~GCPy`G+`BnBp+l|cD`)N98IQ;&`9%c1Pt6SGEGCfM7jU( zlq~^3CKvwseSCmar->DOuz* z#Lm_8wLOuzVM;vNoF!X~)!K|Dt%$&;I>e{O5S)z?FAiv7@YGARnkNT?D}5C68k zDwWMesjN;ZNmkN3M+mrIln{R(qFP`<9{v~E9{CsDPbToOeD(Y@CCMX3lFRE#vbR?C zy5W_dTEJ!uqLbG*&(1*62!$Ti!INUSd>fpY&;+P9A~0lb%XXGN|X!ziTeeU z`jjL?mV17u?`TF(i7P1T%3%4@UsE^XH8F}+Nl!=q( z*RNm8lP6E)`Sa(dD0p>vT1p}!;$wg;(+ScZh!IQV1_-msFS=3@R;Gg(;+nB83kyp| z3@wU*5*aK@5XQ}ojkn|;;!OK8Yn3h95LT?C6Ap_UTzo(j($-}XZUjt(gd7IHa1i28 zql<7!pv>9-6ej!a1%rqXA*4xKl5()O4JKy+R&H7@yurXPes;EK6G~5$fJH!>3GrDl zvW%6PNy4m583wySPcXPah6zo%qyuU6!q~Wy=E)GA)&@DJP-PdBFe?GAY_BM}#m!3#?1ov3;dF&ev%Rs{8-MKrK{KGM7CA}@ixC= zZlXnFt{2t1)r#{i*5!SR4dt&1R|~f!msGjqg2AzDwON!Q!@2hR7WE?6uS6NLOvt#- z&n4S>JuE~5IZs)Yx3m+PEiTE^mt*qngXi*Z-$Isuksp3}A!C#J?0WCs?l$@2&X9cb z`3<>uYe2d?T2(>lGe?{XXv|nM2r&m~_Hc7_S}1QP&1uWu*@<7*d2!B$icP^>UBP0DPC%)>h4T84EK6feFCGu?;#TlpFh4Qqeg~ z_M>9t{F@QTv=8=m<+y868kZ~a{`1_ z6GCeiTNU8#HK}YYNO@%+5o7*xuJ#Vp<|MbHX`QLx} zMgHTv$MWFGh)m5b*sHdI-VXWV_7(Zf=hx-4+e0$g*D3kN%QMmMq5vh0WruKckY-#n zaMi%tMW+Q>-b#2$s|428T00{e2V2}e!U72w z9}qgCVGw&6(v0siQAK>f0a@k^BxOj12#7L-8C~RqlTQs{@KCD*H3kn#m|I&+?%Xv6 zpIFnw)`b&&B!ufT(ww}_h`ROkfIBJewyUet2y=H=m%SNq(wrW=FxXksLG{dR7*vmG zVt~!tr<2C{&?pHZCd3+(>xf{%M7zqe662*&DJ{IV33%n1U!*kkgOsPf4-qT~^@jDB zNqdBUW8xkOtMY_?kHwh@eikozTCcsJq#Jh&NOIYfEgG9;tHY{%#7`#i>ITA`BFj`5 z&xs3$kz$_NEyhklv6AJ7^6%e0l7~-6WV*O$3z1wM?2>PkDF4lGZp+vAuiFyX zgp?ydd&KDjBET!*t5>gDtavM|=?!}`{b#n};NBb-=`S8bKN^6HF~m&cSGzchD=($tT# zjT;3M^oIY3l+1Gc-=y^Vf0z%lEh1vB77*i~j7*p3o=Iu`RfvSKGA;s1W(7Wck`qgE zhAd+_#`>FVL*h8eY9yq$RE<8b5oNa`C&?NfBT?Pw+W0%yGnwy-WII1oa{M<^HGnnw zzerWzA0-QMZoi{Mc_6IThXs0%C1h=VQ^qIf%vbq8lpz1FKR=Lv{p&CC?SmKc;`M|q zF0D#^ZLN{xukYWGzx~Z!CCxYG=9OM)DKvhv3i7;wQL%@cBS!Onkuyj~A-ZWRGnOU@ zG8Q*nGq5xhVh77eM8tUqKBTNRN4PHt3h){N+mm>aj#v&vI z|7FNwSk=!5-=89amAOuuc=MnGDg0thHj;TgE^=N*L}7p^Gf<ZFkSuZm><1E5cB^2F8&B-S%X zrCVP$c{nw!uu5Jl7Um5r@{CQ;tE@}}SBa(3Fj-GYbD8+axLg#UNM-h^RCHS=%p2b= z4(s`E^tY42y<)8>87BJ~F-|PK`Ycw&R?wE|s^PlzhkU zaynwI(h9A~D^YGU*NSZOP?*ryp@f-btvl}9XPeB|&=suD*|#U8@JbD<^1{-Z43ACA zqh}*VkpJ@IGx_1+3wfqQd1`i1&nroLOF?d2?Umnrc3uAPL@Z;1Z^~KVM+DM34J&$kTf6Bq{DA2nE)vKS?iuu-~lr8MwE>#zfw}HY3a3Di;W!Po&mXDpEa^A zN{}r!G9;O2sGxMQ^y)KGP)daDbsvP-h;n)#CBkRUqfkjyM3O(>dJ+ZzBtCO}J%q~! zM7gd-Npg>pVMy{#$+03It`@jqwB3~);o+JFCEM5;VlLw!y@#N0Zk1$yaoLu%e)3{W zeth&wzWw>Re5Zu@!INQmIWnc+uj*rGrK_V^?%f!W-+ggYey?QttNT~w+F+NGWg50V zn380y_SA)y50-U>S<|iI^YEt+I=D}TFaw?uWkurIcy1@nY$18%$rbiNdEfgTzj4CM zH7Pf&C@2ZGe7>xRg!y74$Z;UN>l^E`ytHiAQ^KQBExw>hK$smLNDRN-Z42lUWPyEr zc9~TVN$ewztLlZ|zr25Yx=28-E$;02xQr@chB&iWNzfZiUPB+0O}`LEuB*FK2DBV{ z`}?dMh(~-G%HcSGn-8l)qJQy!rEHlnss*I~k-MNDO52oYcE?h0^G{S)oK-ne*Pjw$ z2Iy~A{G(nN*bpIRLkHR9nRZWpz0SxwMnnvbS{g=}>l^A#kH3pkdt~Dfu(f6c%)++e3yg($U5PQi#;b{?7*Y#4UWOo#DCt$gs|2{ha?*ruW8&Q$ zmSRn|eX3-c?;y&vN|mS>E1|)F=69&o(s!qLSA&j=_Tz9)^r3lIaQPwBa`yes@t~Juk>#KtZ<3&d#%oiJ>ZbFm- z28|0^cjy2J49ED+=U%wj^P9b?ta6W)6`c{5*X>cF*e5;RUFIKs9(BR{0$If(I;Aph z6Pw1y&A*lqXn`y+@W6-zNnpja7U}N`ud%x+2bJZ^P!7idl^T<;E!7_k)CkFm#Tfz? zw1J+pS$AVqLtc29Uv?=K|!n=f3cT7L)mVGA9nY9-ptXn0wmT-^2 za=i39M6OtPrOEeoYbhM75dMwx6PF4j$19V897DPx$V$coK~5~kiF*YFXC*@JjQ~Ub zbPG8)Vw@x^AWe3h^Ef{#F%v9JTHtRH;~ncUTh7saYfAb%$YyoDNNuxZ>f0rU%SB;O ziSjkcwB0g`GAZHp%ba%|TnFglHH+c=XC8 zt;1CYFgoC%Tq#4!p*k;_ng%_OGTD8W(*#1lA7Q4kUsl2lc-FL~nQ|~Ihb9_7pIres z(c7;a{Cl?PvVcUgrTiewyh_B< zSd`JX^$>zcgA#(2bcfQVl2RflATTsY4xK}ZAV_yJq=6>4-M4Pi0E8xRfoiW=;av3BU1_?~P4D;9WVz9+Jg)soQSmg+h<%0pPqcWin^xhsPc-|25#f}V&p0Zc zTGNK%z6-x9kN?WiwVCnj8zOzst4FerWt3I=^Tf+Sy3h6)X;xru%y|@j>$)SEB@UYf z{35rI<5HF*(=?I(3zS{gSA%0v>gIhy`DG&a#&e~1=Ark}c7zG#$j5X4QufW;2eU6m z^68BPk^~z~HI5q5&aIE<;HP(Id%iwEy0UUd8tniHVcSXm_P|S)YED>+^0<wOALcM5F(Td!p~LMP3R$chc9f0x={e;dJ9ZdLv; zLX5k0uo8o| zryt+w8wp(Dzg*F6{ap9~%KcB`;f+R&Q}o~_{`LKZ?#H#my=$)TyCbONx4c(>9w>By zTXJ)DPCtLvv-+gUb){f zjiNws=Ns0otKB9hi(6>$??{{-zE?pLXa~^gZftoPr0C5hbB+)1i|L>)6_0i9ODU`# zqqSmBbaIlKSxUtm)j~w4#?GyqJ&Tmvo7@xwE_(UchQ%Ds5=wDam&l%c)X8p1-5O>8 zC~Qly51Yfm{bCpXu#zrq@{aS5$Tv!B-jVN0A%YfWTjJUD1QU-*-n*x1lBAOdYCjfX z3VdbMAT4+046%L+@L67-Ox$iWT;DbtirG)Yp7ifHtLBgAr@K<4v|jsAr5MJkOePs; zT$9BwFf>n@o5eIT*#*9qzu#R+!wi-C*V5)}z&? zCQ?{rFG4CxP6XDrlPj~_g;D7w36hqUX)WQZ#-%u_F!&tp9mL5}fp_*r+Vo8VCDsM~ zi8x7z>@9FmgK!w4(On?hg0mJ*4D8aLz>oXD;wZ18)oSEJmE+>$W82@Q&g&Fd+J{En z{+756U_Pfwq!BlE?;_fnXCD2`k)efZ3$+hRA>bE{Irg6*#~3n_Rw+p1FboB?NRb@0 zSPE*B^0-h$cZE||VmQ4<3CJady({FO25*l;G8w2`rMIki$;EcaRES+Ttd}c{mBVtj z5BmxCl8W&1cR<08XM?KngN4SfMM{^|fm8@^{^(792Zee2y9rt`yY2KW$8Xm2dI@15 z0e-@=u2f`-k(qoA-#qINKgIr4vUlkbV1;H=Y({dyDt0mVedOMm@E39;d(z+1&pE1- z`cJeOa^ikyg&}^J0MnOyFJRDDdQqtu|65Vxq+Z19VNIPpAfBHj{Al#e)mH63YFWVP z%d4p6`RhWH*ljw>Kr8&K*jbvT4=6H^020EmJwJxAsJGh0iJ??1IFP$Z{M7i6E8_XT z7f!Z{Zv<?kBp7kntX!o^L3(mCcbe&Z(3&~iE>++%rf#W&0CPe-2#w71Z zIW#|vwl&rcoXMmsm8A;aWd_8}W_eb;FVpvZ zg)_;jKo{u>RrGx!ZN(z~X9djijbK{S^_$u^ntiH-3~f~39Hy+Yrth;wM8EM;=f|d9 zlRGg+$)tQ*-~M5g=tm>u6vqoEC#<1Zb7(hl9o2JuBH2KxOmKMU~9wmRj47+1` z7>C_6J)p-)M`~_;-G{z};!vjod)vu8tiWWDSudUWNn+h5V4kdh2=6BlTy_Uuq|n{0t%;MeL?Ch=X)s88n-1Gd?@n zUH<#mVf{2!eJbYR)|$weTo7f+pt~iC#Cqe~YcJ1=uaV}ah+>j4?B5*II!mGpq$skbpN*8~iM5G`h+xI;zZ&mN zD$i1ZUZPdMjLN{dfo3ri^re89XajMjH6>xDVy!#zbrS= zLh2N~ulqChxFR$#M7l=dHI@0>w$~=94v`5~WrOM)(>(!r=26Mb2IHLxQH)gyj)u{( z`$t&VtrhPbU0f8|ZGH+1i}H;Fqldd~3aGCB-TbJ;MEZCzynLlUpLLjrEd8fq)6TwK z;{Llf)Yah|!*ZlpMmyB&(~%Lfae&5WU!AkmSq=wLRn4m2Qx^(M63ndhu6U1+?Vmw9 zO6LNJAk~n72xZOu_4|piR1cMKG}DZ|e~YugCe)hUTM?Q*uc@C}Y20cZ`Q14>5|FdX zH|j9>@-qnqv5dwR{Vqy{1OFyzI3_R^7@`^E*W`zX=x!4b9w=x%YYI&d#hc=%wJjVT zvKkmpsnKe+WO}F1B@m*x#S+x=Rw;fqdG=Xk+M9t_x9%P^G`h`miH=Noe>O{`SZJ!Q zsY`>%$-i~lsEN!WhBsP`w6B0EgFP({ghEe!Lh@1Nif`_X0^)VR4e_gQ_%Pb+GIwwK z&vnB@Vh4F@pX*3}LG|W8AJ*L2mF?N1+6cg7nYSV9zx?1qHCHhOwE94 zChBYAxD#Oj50LE0;o+1O)z+L^!8j*!<8yFuI9d6n2uB6&eVBadcRmlB5Qi7~AJv?! z&Sk0F(0L1NBV-@mCX|n7%DK|2A+}tZ3N_swG5Nvz0KK@B?f1U5M1Njl9(Zh@5XI_7 z^eqd6PW~G?IX3*%`caj4v%!u5H@yn<-nI69f+Guqnywg^YG1}kPutvbCu#Zz=NFf( z>ys8eYM;Lue5hHRD1kZ7-7@extS|&xu%C6UIpUNU+PvF{B_F$F~LZV@9Fc4x1tzc(b)7^!KUHM znN%l7ZIa|w`WD_|k55Ie<=d`h@Aru}u|nwI{ywXvplKf_CjMMZ{X#!xo0@9G#^(T| z!{mPR#l&zP#7)It`hNHu=B|msI)|_p5BHIa2EV_%{#;;8if#;iJ3tO3A(V}$cAm|x zbT^I+9=aH%ZfMXPrk*ESv(5tc5V`wQc~+*m1brtJ{Z96841L0B_RT!InVVb!&wtKy zkO=ULx(>LIkLIHOCqnt=9jsnh-h}Ku|MB}n<>cBaj*VfXQV$imfo;-qm~j`;BVFb{ z4i%5~g-?=C3_i1rhOgW8J{HWb2-HlF%f{l~HBIXCP$e@i>tH<(sb7$lB0ooaRdkAa z__sp1m3Z5%C7hm?4AM1^&egwHig03&Ee%ZozJ*mw*C)WU65w%8?;8%oESZw@lSerW zR9{hT_f?pN&e>-WcFQUxiZL`9m2vN~CG^7GC#mQ#Ad;EFRp<0Z!ELudC8C(45)naR zrE=;JKX14EMf=m#QbOuIhH!gm^x|0YU>nR{5THt6dQ8F8nce&6DCJdoPEI`UVotU6 z=HUY42*lyQf-xE{(VyU7CNeE!=i&8fzAGE>_(-1~7M|JBy@~S}o0p=uMcc!NacwwL z%~Am__wptBesX)hRqk%na20lm;d~(vsNz+~Bhz~X1kA8*vR`4`OcT+$MyjA`+h9}@)Db1|VLCXoWrmF`lS@%GDp?=Zk* z{KtL-SO!!zdB`k4N2x;r>cH%o@jgc5OK=||7-)^wk;4pRNN1NS~w?-ag*G2=o z%}x^XllA-aZvUM5EK?hO(hl0P2UM}PzARe2%Nld##iZ<+2AGHiZdkJI$x<8KR!lb6f`5rBmO+`s`UbbW|(&u zUl>AF&lO;m$rQDL;JfQ(Gh(g}f{;ElkY6}7|4eH~Hjq`RDU^BRLY#glRb-G$?+Za^WB-@kTG4a$9 zy-8Q!m?vNk!HV6`Gx49j+Y*EA23)kR7p2At0lbx>{V4~vu~Q1IcsZkr225`MQLhRF zUJc_)x8E>RyyH}VBxm&YlR9@@vKc7Im!ckdLKtY|Xd55gQ2@C+u%T`ErVPlt4fw4P z=B-b!c8N$eu^wqi{z+9l`nZMt#6C$`Hc=w?>ilrI`6HJ2&GH3~zc@?fvp)!UV(aQ% z6~X@9mfV_dd%_{$6)(0xDc0mqiYon5Y(fYwCsU&Ip@Vs7nS|m%btXHxfBwd|>9;$_ zSE1QLPG1s(Kc?DKf!s-Laby&&q9xA6?r2lFa;{h zz2U3JLM?wc^fUQ~6f^Z0JRl9|a;6J2N{-^jiIzu2?+fMK9(?Y*#g2wNw-s2e`sm0j z*!jKwyHkBdqS8)ZiB4-~t47@m*g&=GjEgh1pol7#U3LM~WgFQ#3VQgp+=BM1j~`ha zl&_78T9L>b%fM6fyf$qF*F=~> zDhM@FWa1vv>Bimn#_@*65>SU3G`>vR67>{d(czZ~5X*hZXzQaHET3bow$C^e)CQXR z)kiJVd<0b|pz#HSpW}=cd{-t4m6ov)jn)cMB>p3JK%?xqX@!-6Md)R!Caz{LB72CR zX6*fafIc?FTdpsONT>{F=d!9$>r2$ud!lcpr96xM&oan=N!}02M*i(eD2O=7|ZW`l#zoa>Tx5$X4FX)&gzJh4!H^v>p$W!22DgZ6d{uOq^fy>{?69@j4 znL%tiY@fBZaW6X^xTQL_zU38QPd#3phB$pbjy=AOb`!H$v^4r%OX0_P`ZC>KH7=ft z^PaonY+C@O(v%G7GLJ>d84b_tu1DV7;qzRf$mc_n>%sOAjX)YV?jU5>t&x|DOI~XW zbiuf_W@fd?x1@D)-6suXWH<&(#Zib<%Y4;=jGGUJ5t;6?MkNRCiRxuVuR_Ae6Y)(K z_nV5nQ$?I;^<{m+YKb31gM)ypObnq zN4wNHWDHXJo!e^VKhc_?^u!4~eFl8<`?I+^D+;+&y0}<##t-%(W!TDTut+((b@5FR zYwLioJ?Pnp_`Qihr)F1Yo%A18@5F6!Ipr)v4d3I1bAj)S0gK2ZgwR@y{gWnQLEi5y zSk8=^lcVRR;tyLwTbR~0=@;V)v)Blm1NWjE%h{>_ew1HEl2cm5$#c5rV`RTm#)%S zq9ZIw7zOF-ShD9bx`E*xc>_KqXslI@|f(P2$5U&r^=>q1&MI)(n6s5n6q2| zPB@l#`TXZWy#TtYnNNU!(VL;3U_#yRnKYY2zPuoS5cfu!ctCP#w0StFtTyg0g~=e} zzIN1hSA%2%>UP3?;l<=jrB8B9#3WK6&DGZ3&w5GB+zcFr;pG( zK_{T`krR-s3hG<|UE2$YV*+I+^}t!L+E7+TFjZs?Iwd=DRpQR##AerkzY5ILfx7Z` zeKkJmOpu9Mkn3F3yMmDG^Zp4vQ1YSao2xZ^Uz4X3 z3v&1$Bi8!2ZzI|xkEHd+1!(=bg0AorX z>%k+R1)&7si)ZB!PS8O%mxv2?V3Y+}3}2aPbL3|IGK~>@P945dGDA}^lQ$F2)q@Y0 zt)Ts9v#{%$o5NHu>{oI}IhC@9b2#*J)sq4hsg?F3vj-*VM+YT;$Nj;MM#(nZ4ls$&!^W2NjMz2CA?El9)Uvws5GMC+}l=tbir zgnXzUey_>zjO>I0hHcD+g=i*%@t%Lp{jUcy^!(8Xr-i&I&~sUU5kI_@E=Ynu=*k1I zJBpWPGo@pcv&kU1oh{aUV@9xJrz`Q^E`5A__Rsi0p1;WlQjIMa!--9(*}q*?0?WVmAF3w;)i=S)NLZ6M!kjv z0=I>k8L%%5msq@{uO{Sii2w8O2e~tuDqR(bB%q7fV>iEy#zldRJ@20gO6~ChoRLDB zNEgDvaF~~Le*oR1ZjPWiY?_DS_1nA~(!huPBhbUW-m2W~Ug=S*RBX%q$z2rS+Rbe> z6usS|HoT2PPgt+NSJCfrhBC+A>g@$g?AppQGF^ikosS%_5#25KjiHTDebqH5*{hai z&nIDts&oI`z(4eKZ1_EO)FAl!_dZ5}D;g%3`I#9~5|vPf{|P`a-gVM$d5}*k%i>%q zV7QWkx3NGSu>NzHIOs7EP8aQm7xGK%SIxojL}krJXX%y7``yeV#sFgw0=>7ltz`l~ zk=e!;+>W5eN(e^S>ru7t>+vH9Xru?<@;O{)N?CaAl{jrxb;3J6w}BwJw#>i$YfFvI zsMe@w>%Qkz`=Tb6ycefkF-L0Ic}D9k{K>9he3p+AgQTvllaqk+fU? z_j`X7G0K=K(QFVY{XqC7*VhWZ03ZJN$(=s-AyN_s`g6ez3w3}K#z`ZRH!}tH9rn-U z;1Sfz_UrISl?Djz*MMfKY_g5pnP#W!m072~uI*K#IPi(hm5<%g$L*}Wwr!sOOZAQ*qW$g)Gnc$)5hs2&0v^+ZVkkvc9W}Xq zYku&Y#tAp(7m49{5bA%jAG1jPg;;_xu_vM^b`bRU1fdy~7Hq%4Vb9N%<7mCdL%<@* zC#S8@>PuFQhCg-tfS!>S1eTn6{cDUDfqYl?f8SG#CCC`r&}~{HNyEx`2O##*NM*!KjfbEqk~1=Ka+fBLIT=*8IO~3#P#AC`S{ z_G$(?$^a1mTd63OaZF{2B;1y`s9hkg>)w-&Slxh{X?_6w3^|nvz5A!#c=)vmcSvV- z#sOeeS*sa~+Fnh%guBh}J(~yAO%Mt&UG;PeoKw~ov@aV6#Naw?2TKvI&^?RISeM6n z&0<(UUGujwCI$>c&7v6jN|Vv=k`Qw-T6ugB?%mAt@*PJ1r>iw4jM3*-t%W6{NRB}0 z(vq;OdV*q0mWltznWe>}X!f(i{=zv9(E0EnG6@rl=&8ipx@A|V8e%YXXq>S~&qpmw zxQbrBnbPww7~yR>lu6=~G|n3xWF<7zxQU*vkZPOJ;P`O=JvKru^l?G*g|Lws>^2Uv zi}z@dQpK9&!CC=+l`3H3sRfZm0^5Aa*VR4TFhy#y)~0p3xXsKp{ElJgE3S%zQ#(oX zAA2`95xDIiDUUtffw^5MOzSEEwm(~{w~Dc8Lbon1E*_1fix|w2nvu~K%}s*Wx1fxnQg)c*rFB*{*hs{r;y$#HS4bZ2HRO9D2a&B+spPu)N#y-c zb#1_^=P5Ic=7C0|k+Z)!yd&Ni8w?e4SbE#qat#srp>QZHeKES{S|<;ydOs>J z9$7*{!c~llpYk^m( zNr#m(Ug*Hj&%gEksPJRGTbm(s*y3#OOlgdl{81ih;TWPe_?hW1K`3<;?Pl9L zpfoBuIr*p+dE_3;SZUdUKp>9xW_bvN@j9d@v)bnWwAlKT~%PT5E8OFW?f$FOc zl#9W#{FsxUQTCwy>Rj`}(($z;zk!9++2mJ~%n=ur9UU*v>|2v|D80Wgm*c4_+o6$x z@gak(?^9nWgM|lmVxwD$4m-XyJTd&<;8`|_sP0Z5sRdJ>U(n7M^)Pk)=(e>NdF7Zc z*|CUy)vtueC)#n6ke!(X8LQm5-Zh}ZP6T;;TYcczxWEoX3$?Q0C2b_}?i$I93Y*haRLE6bzAuo58bJI`F>1*n@* z0+gKN0r%@(B9I3yth9$8mp3LJBB>8P0E9qGNp1Ym3`V#o$MU|2_>uSZjO)TCW*7Gh z6&R`F-2JoaO%zhco5Q8Win=@J1e~t6UbIMgAw5YMWS?}jrGy*?Tz7jzWmMJ500jHd8d#B#^`#(e$mk*cc zXB%CTUr0(g9xEZrtGqJJ=oZ?bUB`vZ!-1Nj{#`p=kIBOBXQu)Eqww+| zy~dNXhebyeL*NxAuPguEpFK=E2A~^PKOo`n>O!y^M{G)!&;TGHvT zeuC~AUG6@K`EA0EtSjyngDqixCj%?J6_f$-wa1K%SOl3u1sWj3AhTL`rjU4J{hes) z&DN&0VGA|t-frWau`Jodq1t=a4!0l&;8y*m1AB`MmN(#4)CFP~gW#&A3O_9XpkwX7 zp{jTAO_yU7ET0KBSlUxq=hj<(-OT_;<7_=Id?F}kusv(AAIv^J_E%b$;FU<99A3+eAY=leG8r?c#>(sC&qdU`ybXU5XH8Oux1wl>2D(xsGOlENjenpwx5N9si@yEWDP z*u1?twdK^^nkFsoLXI9-TNbC=%UCajo!6fuU^D_8!|CAmib3eX%z6aWDlsnyKuf!Ag zd#2wAaoVm(h(>UOPh}&-(tqg^+9nnIB{EN=E0xJTqkyp#YHYIkuChD#q(N|mvT@RBR*2z zOT|%ylj1^uw#@bQL}#4|zZw;1NYW}85g^uqKMQ-^W)}~7;l&Z#jX+oEhFM=os?%DD zudlVII0>j4LjCTZBkSrf`vle2YNVX}3}5u`pEQ8`_rYntQ7N;(WwvwjXs1QE^!QQY zIRXrTWOL8nEg9p$B|i_ifm&DeQbB>w23wWm?hHHc=s>h2bO~*P_OXShyDp&>88$s6 zNDLD6!q|MPXM%8ICH!^qi@7-YhsQ@-6$?B*2pq=!5KZ@5?>A1`uiIP;D{=WyAG#ME zE)@j+NX5T$R?wfUg(-}1X7b8HE<8RmTtja6$35F<*9~vSv|f5#RPU`_w`qoGgVqa9 zTKr^}o8KJO>s+@{4t3W(Q!PH~`V;kXPqw0eNQXoCVbyEhiZd^+W5&-h`qg#IEZWg( zSj$-KZQmeVsi7HJdbuXc0QFT91x;wS5B5I?Ev2!6cxw89p17Cun%9j@O-YiM4Ze(F zf6D&6YyA?~AnTz4*KyA|6#z<)t4geG2>IDO0v(MQo%oHr&9h)mfurP+})=9Hv z&hbgY7h8*rbHC(1J^Mo5;qB*EAd4@)wszdmmU@ysygtr-%3{Jx!L*=CHKq|zJ>`hi zd*Xk8H0qc36wsVW98B@n#V#*XvQ6KH71BDTF>ZqVMOERUgZ3Cw%qh(RZQi)}#*wn* zTjtj7ZXC7w?Xt1Mr9DzpaCrOGA69O`&nus{0Ok3ZPrl0do^lEREV=O(BGn?BX%Q$C zLhNZy0(T_#mw@4d_^wM4ibNGjr9w|~LSmm;fk(-%dc3E*r@S9mJfDsSyifWG@sZij z2@9UWyIM5r;v83$jSBLGjZ=&p#>`+g6t*0D^<+a%pUf+O2X@03Lcx?CiMrn`D z5yyH++h(}tu+cisq`k(KOrG1@qI)ZSgSy?8N9({WdQO~6N5WC?xDiSpUFd)PHESTX zZf`WsaA6QjcxrQ0T#IGc` z+m@xXyT1$hc8v)q9+>tfG$BH?S&_ab(55sG3BQItNdHeox!A@~X<6{`@0;sPPzZHw zKCpH-8NNF0)r)?ve-`4s(EK~lKJu1?M+)WqYPPoOnJDRGZ!{+i&gRZ?>UDnr-nwgl z`#7VlIU}a-_yy(p-B4VLQK5QolOp>xF#0U}b|CZgtpzqiPpY;P7~*s4nv*z7|M2Zc zF(9VqwM{{rC6WnQ*%F98Y+MBepqG#Sb}JM74!BMfXjyKQQ^W7$e8`N_gQb_v!c}Q! z*R-2?nAq-)EPn^ZAQ$@oNVOU^6bx2NzM?BB+m^{S-;_>eO0@V6{mOGiXjs5-6JL{@ zTAJ0#bC{45%@J8%S@`mXy>%Uo*0{hBXJH2wzoMb85`8(tsjY580ol>Q(H8DkOny1c z8UoRT<2w8%ife4hyjE?eXo7eX5Glz^WKJ*jEvNh~i(^#;kAd7XFssgT=e%^0wd3nE zy@v_dGGz6=&8(S+z1&o4AA`rh!p;UrvguUo_}zhM zgXcjbvb@SNi^KmMA;5J7DYt{45judd11VP>UyJd@bF%+JQ2FIr?q?gh-k|urXNFkcO)7u%RU($p8X)WY4N%@fpV;|;Wk;ENjmG4) z&88l9x$FK@ZqSYK()I;TcDW)DtFHGYgaAi~G1vP9{iLMn6zybvMUBt~-rKB>d<1Vd zx`_$1`&^HN0$d^I@y`8h-v(5$u<>5mR0~s3kEQC-<_;0-GG~2XN`Aji=o9XK!IEQf z5RQisWP;0+fkD_BwtDk(*jbgVX~zc@EQdwb4n2x;;aGR~cQ>mcKLBH!M<+v@D;jP0 z?lSxKwkt>fLY}Gw5V6GK#<^kagVUH+#>cx!PRB&6E+yy-3Sgk0pCT?WEA!KxOCAT^WN?1)ONhnp? zGdVjULe`-pXRX-r2!H~n*8xCFwR>rm#lA}|$twoshU57XQOr2`5r16G=3F{9oJT5= zdgD|3#bwxx7ED6k`J-=j3LSB{a^#EyQ*hX>d@ifrR;Y`*Lf%3uF5him-<~sH{km6v zSb;H~wYgQcT6B@SUU8!M7-sth)2rk(B}zu^`lsa*6;N-tmbLA#wN@{1M)uz443JkI zec73aY1{K?m>o9$;*l!r!F0LvRqQM%FEt1Kx_0{+27lUP11yEAT zc+t&ay{kD2SG_GR*vX~L8o+O!X;^j1WA7p@AnvL^CLQS6Zan++(k5eCQIf0Dnsg^2 z+JAHms;=dU-uN*Z1r5fuu?P7ZO5l^r#)}|!yZy8qB0L;7OjM0WB4qqDkk|Lj90iCP z!>PhVuDys@!8e)?A&mtM>QXrhkWHJIk`wxL_|C~npY?!YCF6C*p+do()O*W(3I8ZQ z+wpv&I(t8otw{pFh|tZFH^T~n;H_|nASnjZ{`>TTlE!cK^n99uUhYb=<0N%;ZV$P6 zZ4CIg?y>xq@3w8L70|DBKjAU{uNhNff8^j5dnbeh7r*^F#*0De?oL1$jP4f>jh4x^ zVzwt1FV3jwSvD+tcWN5^W#AE+vwQGO^#niQceEC6Tn&}}xp}-;o67w!+>Xc2Z*q<0 zpOETi&c;4@6>PH-^b|3edXcdqmJi>1H_2)A?N1XYjX+1A5>4u*afXqr2-!$darJ0S zKXCz~^Ni+}Hc%*DNjc+r2%M=fT^Kdha;q|=UC%Z}B%C2btPN}iK40zlL|Hi;G$tGVxX_i1=w1n|+Ua35AmmvtJql8hSqgz{^xl*qZ_={*C zAC+n*JNaC z)4)>If(EKdLl1oCv*>`qV?cvY09q>6%#b-TRn~la(I17eSC#f^VRBrWRWU?;%;U4v zrmOdoYnLOSwWJ()dH3dW)j=wOnu(t{Qxo4r$>*zQ3OyC$pq4Mnt=Al6GW>3JW}bVr z8#f+aV_DcGJf!poCOaS+H`-48`JTO#(3b_0C13TIorF2$S}{FcZzmOcQqre+{VC?@ zCVxlSSfcx$U?I_+qSMF58%aypxnrr&%uf}cw!x2d7D~g(F^;y^b~QaYb)Uq=0k+Fa zl!>_h9}}gd)kr=2@~A)O(!EaiOYkITEL{=nXOw1%UHaR_%8DG0?Av>1C-C-LdhNqmgvqLt1qot=~vU);tJ@6<;5CS0jHq-AYi^%jA_w!bO_f zRX{E8$2+;%$TnFHp>bJsx-)%wZuG$l*k8&zOf2E%6WvKz( zy#oCz{$+Om7Glx%+9)x96U(o)2Ri;FyCGnbX>jb-c&K;@7rfyh(xQ=Mnndpv-{B2w zzx>;nW%OO>FENgi_c1LMPG;SuaA3u?!unSoS-QKio9^(*)B<1Gvu5AIlfchRo$EtR z49#$}%0xUfdHC3>->wJN*V{s;>wGLDOH*sz!PNHY&v!lgn~cpJBEsSL#2t1wyMn*H zf8A-Y7tXF_u+HMDW)3#Lu@ed!z_3;?)zr8ka5dTj;ZM@BsQj{1Cgo-nhH_TD<6BJ_ z_wgWNh`Y!t#2u##_lQ16w32P`3E)72Q|3tx_Igu`A|s{po*mW&~ z@0hi`gt1gaku%!AebR`>4uY=Z+zwrKLtH+#cgk|S%+rDETuBGQb>zetTEuQrb48Xo zp`%`amXW5{_$GgA&3>@ z*h;e3-q?nCVPjJ!Um{g0ZZI`&DRI;86%c3PVexYJ(id**`CvQ5BCl&kW@e*A&ptq- z!^4Z9?Fl*Y{HMHB4am@%o2x~BH%N+JC*IEO9&8;zEAl_g-{TL;EyT|$M4$2Rju{+j=nLN*={uWrVY%X zOzL#ybQ=SGMKnFkh_IZjzc&7)N2iv#r+C~;$421MaT_^693U)6-yts3k3r6iy7&Ts z@;)b#r@~sJCTaqx)7?{dkix**L9)4y%xid+(!b z8bafhV}kRCw%v-i56n!o-PBboBKQNpv~zyxy8+#s8Eq-7#B(B?!ZB!e%6PJwISV6L z$a^Ez6WHv^hX2$hKj^Vm?V{9%jz2I6R5!k+w5P4tOODfs=Kwi-M@O%`T%t8I4UgCk zAy4Y-_@(9ZlG||*C$7W7f+<1Zohk!OfX62<9MT*KwI(PNRL#bsLm=mMy0ci7GL}p4 z#*1-#^v595>e%@TL^aXhI5a;51hFv) zfprBaRRsi9v!`QZf!g=p^OqW01H`6Qxi8r6x?7DJ^T^6ieZ*b1Qe^9rfq9SH?B^BR3#B7(2Eh%se&@JP|*&61wQ>0!;QTS{c zJF2Z7a0>R2h_;oEPDlDoeK-+3Wn%BM#0HF}-2nCa5O1CWd`i0JO zVK$M+;GjNO`A7emT&jR{OYlYfN1zw0uPB~fd0n-6B<3qY6((!lM*PpfIu`<(*-Jo2gvZ**V(*2*9GhHyR1LkSwx6uSrM_5PVtPd*Vj_9mq5_Iw>Rj-YYi zvRwWk{Kq+oFO|I@01rp0HF*5hQII8(b+f9F?6C5kk3Z*cL>-*a5n z2ZRYZ;|;=%Aw_Q#X>aXzKSlaBM5{~{d6{55Pka1WZoyroW>j4 zMHxc+A=eQ(gj6cd=ffjTB(ma?8ji)f`ZDmUxxLBK`8=g=(DBWCt-F}WG3@Vz+xvVG zY+_3~ht6DT8AQFlSmCnkC(f}Sm%=B^B)@)&0AG#Os$o60J3gvp&`n?--cK1o%7Not z7o``K*&NsW4);dxpWe}h{ki_dz+{*hk)*1Z`V9BFV+=6B4rgc7!vSMFs$X(gS&mso ztK&rQ=Si3F^cS^fe9D|`(a67ieFF>+e^#>dP!$Z#6$Nt)kkaMHI@rzPxsEAiuvWbo z@ER4ZEoXnTGYDY8DhP4^)Ko@9hQdK&5VnKSo8^OM%a=xQh2CcCE zB{Nbq;-ehpG^*^pLCA4q(h=Lv(bD9U)UW#pkiizq4r;qslreIkVu;ZMBq%L_qMg|T zYF$~P3%(8llyxHw_1Nj`9R^iBg900r+xI3!?dDnaVeS$HgU&_2ZEEiZY+%)Q-Ykwz z0i?%BepvTJ|D%!4I_WNAfNbr8MyqBouY>5ltUq)2%U{$^p3~6IplXX%?8`ADQq$W- z*zPa62gcT2$nE&*2=#-S7~RF&B+SG|9!wXYYmq{t%zotPpz{TTa8}lKQ2IEpc2;i z%%u>+GQHXURe8RmS1DCltEvQ<)L25#_r|Is_;5S0e23Wia#aXM_v-8MB6oEao`B}X zC(0bH_xow9BL4sv&u`rUiq8{q@$!rhOP=3)Mi`gVyb-EH@IA_)QN&3bZy%NxUKh;T z%`;Xv^$^7)z>&sThRQ3`)*+%Fyz$+!T6~PshJ)xa^WoKEfYuq$EiFEX{v{~*qjgZ` zl)Gvr|B*3I(lT5jxiiNB&xOmXV|My-qu>C})4|~7QDHC2@m#imU2U`Q1-~2;Q1CSb zJxKht;8qDLi08JZ${+$OItX1!*N>V zgtCcAdlumQ9>?g{dqU#bE(X4dd1vhqfr>vRqzX7>EsYJ5R9U=CZSM`4fo<4SZ1sSo zgT^revYfJt?TF{n)hJ1BNQ_cZ$YAUJQLF0AUg-K;3h$>UpSCRHj_?m=*s){)S9)sC!-bo=&AX7vDln^_47wn zI2jWD!da|2h%5HYXRz@bM#}ojXnIQtGZT%4@`_{8T8o1(FD(iL87LJFS@9(dVlV_^ zf9YqAmZZdlv^c;RdolZ}UFq%SkS~ui8o^}^Y}NQ&<|^tx)DXHl;iR{ZborUZ4IANe zPfZoSyx57?==W;%^FkJ<(r3qd@)hGt^`*w0X&dqdBC0Ml{$E#T9Tipd_WJ>pkW^Gk zKoluax?up3E@_eOF3F)00g-_rhHmLrx*Nu!2I(Gz8EFQF9_sRY?|bii*FArpb@tkO zo&D^!&-w1>`+0~C;!BplE;w4j71U)8=WSYjP7KW!0Xz{+6Bl zV4fRgk)S)*%<=S{NKtcZBf_}qi?hY>b)L9wKlmxh5HfpWuv{s!Z*t2+{h@@&kRvkn z+lZO+^Bb$+gx^uc#m3)C@Xp`VSdDgPt5~Fin-sy7llS+RS{8$5yTpx*T?u4D!^0Zy z`MTJ3BXx!+0n7@=J%{;9m3H|3U_0of5EEfRxvJxbdnz%+z|+$5GHn{H4J{#1T% z^%SM(C|nXCvmqOq59AKf2H~Dz^&5AUb*$+JIo3rB_0NATp5lTZ-6tEu`>s{RoAfmG z`k!2=k&8-MECVj|mm?Ed_+0Zt-A>t&yfFg6D$C$d|GP!>^In>x~WU3jRe zn6D3M^#?*s+zOPQ+{XE>$oYmbf7Z>Z>A0FyJl0vLW6S-M;#h;_BG(ockS-17C5Y&BI9z#A5N2mIWuDvQ>MIW#n>4(r1T}zoPJ;l(z#%B$851Vzu;7Q#~d> zax4KbmHj{a_Hq8ugG5H^?;mn5RLeZyEPJ2;2vpw;V0$-KFY~)z$cK{9VS z7Cpo^^h#iXVGq(+xBl+yzUW@@tl3^M&w{o04^SmcdHHJ46u)~&4}!XzD`bS6ou4pVDDIeCx@W%qf>cXgbY2!|@~5GxIs5`G#i>LDgRToyc$3&5&WV_*9jDbe@jfI5upr?H2MQN~9 z_z0WyRKw93aYN_os8aVXzx`P>JDrfiVo|l9@6A=q@x8+ZI>H1db0% zr{a!$Uj^kPW&f@TdvoVQ#6-7uOo$LcgB?t-xk<6Tx_-ZP{T~lZ%^dpG_(-~K?gmC^ zm)7Bg7tqm{rgU?VQ{Z3o_XdH4S?mXXS%sW=S_}+_EiU)yOLh^ZHDOL}862?NC=NGi zZ0YL`Z3*w1ON+();I*i#2Z!F#6e%ey&grzm?S1jsddv@v%PG!1VyW@#g7lWhS_RPr^kHvGDYBSs3i3@K4IAawi)1H zBGFkasjm)Ow)#y~>W}`97W^Wu^z}&rPM(1X&X?f$j$Vn+-KOdpelOYq_+f)tYOt>Z z-?s|uG4GNw>BgLozWl9c7B;E8gRDPqit`dIHV`#++05)0Iq|p{Wlgb5Cm=Pe{$BO-1 zwo>WanJG>KNQ=6-%M22jy{*mcz|r94-BzwtZ>XV;nkK2GgnY{~#if`j={MupsR%mE zxOysp`H#s(ZSq2hx%2OvMDwrP$U!+HEUl0`V9Ff@(Yk*^CeJZ$ zXILlv>Ni5}iSP%ak;V8)4NmuI4;h5^h0hT<;MQ;@h05yNZ`q|nnah#yQfE_YrxCQ} z{=bM{Ha7cp0zOTZkX`>#enb1ET$Ap(;8;neohe^4sv*trh{x%g9l-0Uzx66?RtNAozw7v1hGQ;z=6j-x`JV;PpL

=ru z@G1WC2fNTGxV0Ofj41(3IJ5?MVsPqhT!7-~a$;b#mYyq9K4A(0?v0LEEc(%YZ@=Wv zAlF^WuZ0N0kIoSSgOdCgBj<@$?<5i@9chTZG<%hhXAhqTSEvAtom8E6O85E;u5HXy zfBUSLq=qp5OAlAd2IqTizF74C8#tra0S-8s0V*~O(9*Bl#^%R8t{hGAaxX#Fx=s&% z7L9JHId^-$_<#gp<}_u{x!uo(IvR{wVm^FfaBuFD4XxP_)3Y2! z*!sWALO_>BD-|M(hxnn&U#1Y>I1sfy-?I~+wP@E5R2_0@5*x5k=qM_5F^TKS+i)r1ë*C0WoFtoEMDK164SJk_z3 zR1PX|QJPEsO!(dOzR6*oD#^mLSB=hnN>H2Bdd4f^&AEDf025K(tB?ZVw)K|KjY@$i zr{)Q|OwSj=YdRXLuAVI7p0zCz*>$#Uh!2tY`I!ndCeZS=g^o~q;Q?PJlB-Tj^5LyMGpXpwu-19(CkdZ*rV7f2zXu?F zoDbS_I`7=2X$6Z=H5`h@lwT(em0=3cB#bN{72P`fQMcO2ISvL#?W4a+04KW;z{|?Z zwHQR3k%(JyPGW4+3B0F}qHXWsEbJ<}=CJO~9y>!|wo4Ua9jc5y`z>%o2$*=m2u%vtTgI#5`?2}H6K3zpY zG~#h+TKhbysmJvs!sBw^2KfJ_*VCl(Pko_@@13SV4KHKS;@S9VP@o+wiZ4?3&AeU6ItXHZ6|^svADbe z3YrNDzVta8*fZ=_ZYj~jm@BV@`3MQp>4%jn#wFDgt6o%Q}u0wm7ZSe>0_6(~?mYX*#Y4GX6w z0uz~`nh!vxgU>0FRq-CjFD9xh{|JeK;>XeE8cYH{#vj@5)9bCkL+=+8s_|*cJw%1>imcbEeIXNB2uB z2=9ky(s5{3t{09l;i;#t`?&V2EjnkOO&3#|sOAf%9$j`#dsbU&$Vh>0K zK0QcU`A2JSB(*L0MI3DUiQ(IbBdPHoli_<3ny3GcJ{A-^6RIo3;%5XcKDRqHfw80q zNw9PiR!8s_3e!$aENTHz6!$ef$H%ZGkErm&8kP(s)=e%RXtT$QVu^nnR~(6v^3vB2 zk2ljhKz#U?{K}bWrIU#4+-D+_v7&Z#B!t@^1tLdZ+n^zs?$ekr^pZ~PM1%yM=1}|OtdYe& zi=Gk$r|RU8tCUzdS35OMVS%4BI^Mq&%}KZ>c_hldp5K(9*??J&4*tmR>iyyD(@hn8uGF>p^Sb^*5^cTQ znHsPNP7cC3F!zRU&#vVolKkd4Chc-{Th8a(3)fkh`IVj?Reei0U1(%IhP9|V`-Lh=->bD!Rk4K z%=fTgOTnDbSU$d0JaOCKrlUq4>fW}8Oz2IxuMIKzkcOq7K&(IQ=IDs013OfdQjN06 ziBPc8EVs4f*|T!;#p?ul@K^C8`v%x?)p+5ML6d7DHckzE7xw%mI4oUsZY1imZ2 zGS^&sQa}dY2lN6O;#jnES^?t#?mYYG%It>=p_D0cvje$gv2!Ak>f#q5VG-xkVP`st zXUMh<*R6n+T3?=>uo^aHit{GtF(t;5(RY0HlYBCSu0d%vZLzXFwN|d+?|4y?4WI8! z_(wwPZL>YT-nt>H^7L5ZgI$9fM!K0)Ed~4*Xq1SJ8dGb`&%0TL8H`(Cj9gVN;&KFZUaX87P?9 zE4d?fjawTDX@wr^<>Mx8YpzXi12ac2rF;E_K(d{*IUscQFZsdJ&RNuA#w$ZoV$B3$)aGDvKX| zlv+(Pr;sM_9g|?Y)_Rv~QQ;6_S#Ia<%Zg<{)fqit&ACF@(Q}WdJT>m|ZH)U{#3W_M zapmxPLi0f$hN}qMO@q~?_mLEs4PLQt|M7_g6loFYtCsN*KziaV9CGM#=usjPTOG$N z>v=E8Upbps5~hiZcs%0MfJTI+Tbpq{Sx@eM3soyyIDR7ym7-P)K$V>}f z^Noq=b^0ujNC-d$0M!zPVqgSj z?3CCCK$MVp;oht8O1SKhDwL=+{UAZiK;s5~YT6p@uK1v_v0eF(bceXoi{y+8x7w6v zImaTVNp8OPo+Z7)CMVTS`@gAgWChUuIa4sKNx*43ssf)NFUvk3fCQIU0%Kqr?PUdd zKgvn$r{KkZr<`!J;e;Vb??)O}|JOGM+*~i|2O`6*|TzGV)(mS1Ibe*S0LxM)_nyn&Awe9@jSKI34jj>H0T{`di z+fLPj_F|fTe-0?WJqzuB*`gn$uq~+4Ig`s~&9>_NEgG@yI4{P67s{DFnW_<*n0v^b zdLhTQj3;ECJc4#mW(m=NJTDm}tgwn>60%iVe=;uIfR_`CBK<0{7Zvr1IFHu0b;DlV zYBW5G5*s0D6N6rck-=CKV|7E;%Y+ja3m#n)Zo_{@Bd;$9g{{<~%zJ;Tv#25|R#T59 z_dV@;Zz4M-n-{q@C}Xf zX&)LwmuZ(w&q$x8Ozd$84Tp7sYew4Ne;+zj8 z2zUK0`gSU#TFX?Oj2d~!qALHf)&l}uDR+!#MKXi@%uHV{^YLb+f1dS?} z02coHqJl4+a6%W1?fMkiT%o2F9BxB>Ga82anTb&ejV@U;|FjZUzQR};=2Dx`2lYe= zKG2Oa(lU&V0Nh<;rthukw^qou=2m8BJspjEdHq5u(=p*Ux>2M+%cG~}s$!O*5qH$Y zD`#VeX#**&OMH)xi)shBF|NeGSJI&Zip#!9l5c-D-J_7B71@RrrIj@DY3MZg^2w^~Bv$KBmC2kjddEZL;nJzo_jI*!)`mdl#d_z_4~DIAA38KGeb`k~_JwrmbgG z8tlmF-5_SxMMq%&C7o7RO0|W01eNC@*}ZEh;1dpM4~uh7dcB?ZHsuD}*1SW#<(U`L z)5~x{J8`^8WTqHfFK#C)3!rGnW;ENI&Z-o?8ds4cq^Vfwj0r?Zu6>wP|+Rv z=<*ki7MxNkLqv9=?Gr1p{dsX%$sKBMIPSPnEoX&49Vca*bclxud+~W*Sg}I-l8?gu z)AIa7GlKfv>Q?YJaiads_F5uD5{*&+QhRmz1g`0Y%vd7u}X6(y|NKIC2#*Y{&rhW ztmn7rrCIGsv5Oe@e?_-SzFCbL9-O;4i~{=-!aaAlyyjF(vQn z&|zks7l?vm*}nDJZyae+PmHWma~Kw9sl%5{^!N?ofvq!J*h{EggaX}ycKF%1zu>ED z*f^fOn9RRCkGDj81SNKHszchr0~s^-z9ztoY&7jUhJLcAJ?J(vtrEW(BYclE2-$6f z;5o10=XUfyVU~2t`@>Wh90YdrdqYkYpIM#aq_ffcZUEH9GtoJtL8IAnGd9Yml@guY z2u}3kjN#kdVm>i5?Myq#M71!oBZepQ?h@*w#L7`^bQDPM)|&s%wcP(MzmJ$S`_v{ckJx1 z2G|*j0y*VUV)_!Qz7_SZi-B0GE|=)%^r%~G(_}uu@$)|0O_|(5H|zG3Y}vr6N$+Rn zoh$cM+GeX^CfA`ifr}>Fns|zPPTjFfD$**kA)RLuD-JMOZ?{u&v;MD*ry3KatWuiB z_+#TQac^{$vtgI~Xffc1DYP^^P>1G+MvLWm(#9wMJsz=W|Kn>U;IH3xn6}xgnlC&6 z@{5d-)U~^X)2Ps?mnzcZC;4+dl%>RvC&bsEKSw%o=8V%oOhYeNz)Ngs_-33&s~T&R zezH`}ZEx46a69I~f=z*tRO1dR_vgNLwkzBSo9cG57$p!sALZlNo*JZUSBEK}d|7t$ z4`Z^M9J}L)F$YUp#7L({O*?^qe9nOKHx+T}!0l4lf|@iia$DiTKJyn)v+-MNNgxb4 zAq=sYP*#dZ7}omgJVO68va;xlxiSB}ej^P{W*nud$g$7SulKoRZWu`gDH z?F>LI)lVRl#z-Rdc?7=JN0pBRj|m9xYDvc?1UB%b7IT+KL+E^Azab)k;jZ7`v0f9(8Y26OBXHzy%vy@~0r$;^E$AXz3X*VN0 z4ouhDg^vUaQ=|UGUAgq~|K>{>ecs__Su`}Mby!z=zWo)9&lSKiVf4dCFt6wxozi0H zX7Kw+&v1&n-{=z|CI_9i)0g27m_9MNoZKN$JIRUZpDU#PMb}g&UOxEsfzVJN;n8P$ zQh_&u4H+_Gb?{b&=pGMyDA8@}s&?$mGv&~Gv%sp}tcSKpmE>-w;qln;zP%PGdn0L` z+$mY;y$!d{6Hz&yEl&_%6OelRg9Wjb&LNUhBLe%yydq5Nos9YF|12WIS{n<_^UPVUzi} z)uO6jMetQW|Mr(JyOZqhc4kp zZ>RP0iMC@OpayAaPYzC1KO3&UgI@-JhBN)unt>ND0?oYdbLey`q8v89i!(&|WWUE~ z#4=AmHE{7eW^@yig6L`~)NiP{gbJqHI-Q{XGKZWHD|)4mdLeAcYAybJ{ig@7$#i_! ze4XP@vnkL!%dSYyKQbsG^CPr#!S5w73!$ zlCwvoJK-A?fsH6xX22_cM{ z?b$OG)93jTZ5(22U9TfPWuI0UsFJSsn{tqnSLiS1-o zm*5O4-kEGNbL#Uf#N6h*pO`I7-<|Ep|K(kxX_P)$LIkDTgKxmmsw|9by=+?OGFyW! zjU>2_^f#2D$I;tbQw#EKt-o4m_-Nw^%}~Hii2DtZ){c&(+q$Xx1n$uGdwWIruWr%S z#YSb;8lQZTZ3%@0{$ajoZs2LRcw*c?G{4s2%nDHpoyV(7o3jHKt*ZW^fbb;IaGZsi%4p%9v!Lvz5e z##5?WG{}N-3|6ld|4Vkr9d1N#Lw?MbKvbI<6sCw#4we?24mAuf2F@~dpRy*j()CYM zn^(IRQ4YI#{{~XZ^jv<#&EATRQzn9+kn<)6j6r-8UL)`W%#m8o*x>$~AqGZN_DyFg z9JeppopgP@D7p%AY(o;mGjD4pkquESouu7auL%%lUN!3y7V)9A9YS$65^r<=qe(y# zzjegmcZgU`ZousW?FnW|%Z{{$kR3BrSf8m*nXBP=aN!cA1dmNU4EcBdsJU3DOE@*gni&_!J@Aa zYobcCEjqV8u}V+Bsi+J#01d4aJd9~yNJPS3*f2K)n#$#UB+H=XW6k%W$vRwpAPnk{wNp3+t)P=a4#UAHj?7fcBTsW=UoN+Y#?r zT*~Y5{)n=vp@PQm*76+i^#eARya(jd^&k zpAFA2pKXJmBWzI&-XBe?;p=Z^PWPV=t}sFs%Lm-v^MCg|tGQv)Z7@Vo#_;$5?%Tao zSZ4+!?)xnm0bXUK&ns^&*8ej0}al^^>4cZ-A4o*D6h!Z=DY z-b||}eVdP!_a@pwr@5XBm$JOZ`|5Y* GU;Y=Y0)8a` literal 88600 zcmYg%RX|&9(=F~+T#5%M?!}6`6f5p-fkN@(uEpJ5gKKejcPmmT7Tg_9c)$PRTxDk` z+h*pOnYCu^aAielbQEF~C@3g&Ss4jcC@2_XC@5$`Bm~GFTsF#0D5$q0SqV`!cZ1^> zmj-}#_9k*`UIyom)7{YcMF4et3q@pWx#+ryb;D}bjFlT#&Hi|H{NAtE*xSs7m8>jI zX05U!jb@Zqw)#43D#}!H&Opxkw!a%WEz%lh77iBYFA~d6z7|X4)%u*icfhWvwl4C# zPZ0=#Jw|MVXb4wElo{2K&-bsXh)DRx|F?|^&D8t;J7hl@j8>5G|F*xt)gbl#cU<64 zB%==@|91|oZb}BW)Dm0++~358Jm)ag1u}B;PI{taR*Vx9?^7zw?20uoXdx%WdF)_o~~=mP&^!8=pFHaC%;r zb|rj&({lGZRbt8N<4fJi!-S0@jTOaF_X%i=;M9M1UPbKkXlu&+pHbo7jjBYECN{~_ zDD<|S)*`>HW$wX<>gTclUCC912|Redx-pw$f( zPGFX@(un$Mgi+6|pwf{0z5CsAu+Z;bMyAkY`CYQKZ}|JS!_Co{K*kfiDhD=h8HS*b z1p*hg5!{N_Sp#n`ssD81)ZY~fSyh|l{~ZnUel$B`Kuy(&okFJJ@5{Z>jXh`;{OdZn zS3|bv`vEMjLWW5$$L>S@L(H2@r_{>0J=*s;`6BWjzhtHqcRNzfmd=iLuSElujeQR~ zBjT|^QgN~Ot)fUGE)?+;Tugn7FBoS!DP4B6wrq3@QSVXwGxxtJF8)LuEb~vbQd85y zAY)C(hb3tWK@FPL_dC)h@mE7O9dV5Sj59ezY$MTT-?*Z*^j7HqOosdJu%Se;mVa8P z_NN&-8J_g<;dk^6Vus`a+gGtNxzMzM^ecF_UD%iR1lH+$3rYW7bL+orhLrjk{hbIO z8{@3DA9M@(Da+P=jZ>^NX^KUvkEaDg&eH)b4asHVAPxxPtsrz8wC)1ul~7 zbKgh)dD8@P^3N5Bt66w9}vWo0FuZD=t<+nI(=nY z_Iaw#ssNhQo55en#-NGW|69iLkfBF~zW(RE*$rR6S?D1jeZ26101A}YRdDjgXXOFYv|K7gI#Gn~pa zO8$LXkxq45ewq7{;+HS6jCg-?z9$e@*N`8xj&Z;b0m&Zy1HnDVGzA@~Ym7tKD+)5` z?H)MfHB(NNsh^Pb@(f(mc3ZWv@K$ZviuCZG$cAj>qp<(89~Ksm)AoQ7nWcy`-l(Ky znNDrMZmAYMpIl=^Bg_1a3mJ1jE-S9=#)4rVysd zKq=?HYaRWKfQ>bU&bJ@!zysJo#T?-Ok{m2lB-^+trdE@Lwh5p{O_oEyJgG9xWRhTt zR=0kjogj1a+k*mI!qnra*Me$Aa%GaofP@^Nj7u_AOeP3GJrMk=5=4cAQuLhy3CWfL z$V6*8YkFnte;zPk{^PjmcRM3=iTyw+j|E|Rm3S#)M4`lu-yO6XB~`X;!`pR2^V`T1 zf$(Dnwxk0a+Ru_?HmpP=z5**%@rd+Q_swC%DGc)083*Z2I>ktDOuIf`wD)`g9Uw`# zS4;bC_`zgFLi$UF%>>?6wpZD~sAj~ZW2G5mqWrB~hYib;+Fx@<&2kG#>RP~8Yomu} z<&Ba}c=bqb>*NpcD&p3q5e6l!gbl3$vi8HPXnR5Hw&DEDidbf#%It2v$hkJTZ+CRZ zuv*v2u8SCN+w%f%C-Zx~pefiLY7APf$QwS9YJ({-L#M?%!>^U;fEUvVD$-?pCsYV7n zyt8s2QB^#!2KukJ*0D_=c-`)I>-~jf z+r3(mL`f+;z1sD-b%{bA{qe{8;C3F((Kfl=d`?{!eg>~~1r<0+za-QX>ONZ$XHU=_ zuMTnbdDn%9rk@L1gThYeBg)JnG?o}`rO-)38x?*Q`y#1T7sv9VTdTmd>wrbw;Jlb2 zb}FI6_t(+pjkfEH&FnP;ejNgdtCD?p5}9}jVI*{VocyU%13?b1i?N+P#5abmTh>D@ z41pa}i0Q;3d3Br`nRhV-gvW@+jL%3TaPM+LL;V73Bf(h<9~R+Av5v!4iAls_h%!q8 zr*2?rf=OR;Pk~sb=MfSZl5@n`xZK}C-cF^BZ~v5~H_KRj*VL=~I-sLpY#uxd)tFZ{ zh1|BupZETRzcHwfhE#dm+uyu&(Bdv=MoC%ya8IH2klGaB;JpC7E@s!`%5LzyasOA{ z$snmS2Ed*7eL2iF>TBg>R|D}%rp$i*D+;!Gu+D%%MKUv>EDx#XJa>)Y)L1>J=ct6? zxF=6%sC!m|8%!-9Z}M4d+W=$=%x&EN^SUv!c^ksdN=50aRF64B8U9}Pt0$jtyL|3O z%eq9BgEaod`Ls^BY2q1`Mj^>kKmN&1>g(9CCnps;um7y%U{JD4c2J@CerH}EKC+Wv z$xw}O;K&ZNv9f;c`T?Ea8@XU4xqT8_B~8r;2xEc21dL9cqhUT7!@wEU3jt)Y1BOW; z>pNF@w5?ohA_%v@j6MC^N041m=WkSs_CfH*pnqD_zZe1oR6peowaTr;`%8LYF_V!iOa9{BideEVBSINgjIN(T{LORO6`#5&nPc_ zUIZ5;EGFd`igFQ&8^9+q9OlBcDHes!hl}|ZVZA>(d^%Ohl@lgz3j8S;wgaxA2`y?+ zKAKnJ8)D7@<`~c2R`J`q#}EU&?AQx(Iv&uiGoNTqw+iGahQD`=PbiQUicB^(R+(ZC zf2@YPz9-e#x~UhH3Y99v8ncI^`S|R{?3sHFF9x= z{x=D5-U3pJZM zLy5<#O<}5ywmIus z9^XB@PvL{9c(q}=ep~qKLi6L4DH`CT4alv?QJn16Ea#JfoH7QYA0RdNO2$uI&4^6i zv8Y|ZkfoI(NvX(ya{I8OT=C9k=+g@qkvn+Y?7dv!u za6hr{kPA!~UwkolgF-T`N63cfkL@&J@}rOU%5OBL$?xE04+LpB$G`PGFJ9KZ-Jiz1 zE)5LtIh{Y9#T)Xx48}qwm`hTl<|}+?V6p}fGnw$bMEeyTvvdiS+v_+D;fH!2-oUcH zwx!T!zr@gXP+mR!+r%n#{b6}?5YAZg_U}(`l08GB6y3%4dN^CeEU&`tP0CQrONpsC zq7RwFLo!i%8BZjnI-%`R20(0+P0WPgG-~|glpRhVVUx{e`9nZj`C|2;XH6{MNwj{< zdhLL9W3ZAs{z37P@|dsBE~x`^F_FYlOvyL9$Tg5Oev@YO-k79i{cwp$^tdhi8NK@G zXKj`A7PhlrQWHo~09oRc72?zLMn%u#D&}L%cbpc3u}p_{HLqN@G+v}LKpO@lABGat zRSMQBwwg|hCj*(T0bT8!5mu|vns2f&c)dXY*^yn3iGFH!xae1k_A2cZHB_Q79%nsw zUrmvp*W{U}@S?N5)!#Fmh9FG`w|r?KN?P~qCa4V%>^Im6ey8K zENc3t1Q3P!r-dJ*=WHV8h{%`uFRI$7NI28-ao61g=w3O1Uqi z?swCOPoB~ng43M0lOn)7?XIzAxo^0Jl^PW*UW*`Qz&cw5J+XEow@y049GCt#vv3KJ zXi{0u51#I6Gkq+yc&eH2k*0`ZKWdiH@ucQ1st#`+2tMZv6fAfw1T^5~>CAo)B&J3S zmrTwdd+DjVLVO(BI6M!va47sQtu}N+R{A`YkS0Qw&{@MWH5=D{EnlAf(%6k%4=F&AJ1kFb;fQ;(bZ+-!se#mFY};pDM;@Y+3ap+{wv)glQeBuz%Ztz?sS5c7JIg(oWEa0GOvsMrrLJhTcyAQ-(Eb*P?y@XVxt zOb!v>_1t^ZLQ`^bJlM)J;T^?tqj)#F1%uT?;1WJ9T1P3^IA>NJ)bYDgvJl&DewBDE zStKy{wU4b|dg|utj^#R${~ZL}S>Adzyl!^Q>FYFlPYDP9lFN3=TqtqldoO>@$_3LP zi@mY+13zDSe*ckx-S`e{7<&zhKN~a%M{D?d;g4K2ICXCDuNM3gd-Iyg{bMK{k3f9_ z%E1&!-&lN=Cej{@v1p@?6MuNEzuc?#0b!6?a#2~`e+fv`G<%9VsegsO7JY`Uub<{o zsm%DK2D?m(CK)hA%zLiO`>l>{`KNWh9)J0I;61Oen3uU%>t4m6LYzU)h@qkX-&6YnB!d2p_?XIKAl@?zZ4s z%$URzT<}=;`;7B(Y;iik+cw+b8e%FZ_s>SI#=|694yh-`$;Ikj%-YaH9{!AKqtRxx zD-2i>2Bh)r8OE}ORk6!+G7F&AOMjxk`h@J0U9v@%d8f71#5=|{J7W~DasFA%Wbtyy94=^){q44Esj*zhHHEZlW zV`g^8y{GTR#?;$>g|ZdSQ2?>fj)osnK{vrKvsu<-fmed+W8YKZ2Hp-ver8P@{1zIl z=g)Cp8;dUwMHq7IL<2^V|FSbQmY309c!=UQ)B!lSMW>U1>h%=o{K}cQl5%L3l};5+ zg{F<>g>_~j7VZTGIovkr+OQ>KfeX`q{ki`&O_O%b3oYpQBYV>C&G5GoO@`iS9Iik( zw8(6C`gvnzDvwJ%$?y*|bKD+VT^9wc{@H8DV#V|*At7+{F}W!IXBafy{L4}*Zl5bC zbEhU#7@Hg$EduV0YHJA5wW+bc#+ue>ABXtuqTc#D4JVD>YBAvakq4|@9SAxzNRetz z16v%Es*k2?|9#G}Y!q1L7^+h^aUJr>6uE=F{>8@YwnhRw+QX06~{>=HI}X2{4#BB66l)+o{^r&L}CYisb4@auibo49{4jDQB{hTgx&EUDox^m^xuLsp0oRNM3Hxo}-&k-vn z0O^U`-X-&{&H&X247z43k;>N>%sbgDww(M3hDIN7q?mG|7_hW;z*d3(y6N|XZA4o| z)k$oLdF=v8s+(@609xO?5g|VEZw|6f2uxEVF-$`OE&lZ8%0do+FVmwR3i);nQh2nDBwv4F#5SUS09qd!f3 zVJ^SxXdoL$pD~g-%fZD@BdWRkGYemEcTFKgEpn`7w@#N@`D`zb4Ct;hZGlQdr^lF1 zWxqx#)+QQbyVWp2SA>2Vyu02g-o^WJ>dV>Dc(2Nm<5I>>HGKze+GNHuVoRu{@9j_5 zB0nSccpJDdeIp7_Y&5>RT_iV*(BikF(ea+WfQr5Lfv+i-#C5*>{s*1eiEnoR9qRhe*~eM$zoqKi)(6~PJ# z5?s&5YJo=w`Jon|0mOeWquve>k;JtZ!vca{r(@eiOPGloS~CaCWLMFWgVs$Vc_*42 zx_5PLu7WMRU8nfH?iO|+ZPNI+ZozOiEWH880UZ(fTGiTQAh#*Mp|fRd7=7ZHhHO01 z^}J%=qgR;;o`iqf%8(x+ENZGsH6!7T9`wrsBAvB%iKNnymA~+)R92@^Ghu>9Wz(Y)E`eeg5Z|t!H<8fI7r8n9;=AGEh);51|H`QYBoa%=`cclPunX7h(A zS)!XT*rtZ77Y{zU*@)#l?fF14)cj#Tdkn2-qbv$pv{opaCFC`nmQ2t z<1zWTeKl#(H1Z}(2iCp+h?RhRtt4nAarOw!9JZ3VvGoh1xShA9H^!6>SAvyry~9HW zN$vVyy&|i?P@-#Zk#eMw+@k?PRbei9V1H}wN8;r>5D!M@z5SE8{{95Qw{mT_nR-w0U~R(&cRQ ztSJ=g?S_q9jYClF1r*3Wfa#gvyQ<3Vx{>2bLN1y`F4-NOUg?RYg*8zcN>XmlQv-8TX9{3@(_k4d=&VD*)OIm* zEo^M-e(Rv`CcN467OmwYS0Nd*>ErZn-R%pBtV^UX9r@kz>({ zjFI`DqNuB%k9cA_AG`R*n~=VYmy&$g+H54-Ak$sZ7yeDQPPQgLBrvuBp^_L{0ot== z_^i$Y=B1pi*XM4cFKZ5NzGUCSbfoXAI|BwPYP&CJ3}PYhkhsDWKal;eo5xZs%!#H4 z3~7qaIx}kQLhjH1xYO<5)E^K6Xp$%4+_uA`qZ}IS1(FX&^AtN(_t9I#MxccZH4-Ry zocLXH6M~H;YOuL0bRXMSa>stigw1f#$YG-y`_tskh|d3vgO%6l)M^TxwyxM|F>BhI zz(x6fP2>THU`jKY(FR?F6uW-o*YT3y^u9=Y+iK9-78be~+5Gvoy?aJc+xR%K6Z+=p z>w89@P8;l0FVEWP^7x0m`$skji8o@>+nq)MWgtHke1$utv$W%hvklz|TtI+>Mgqw- zTEIodDT0^_HYIBg!t;j%Xb?w5NsX*jOU%dCd$#mEBQ1%T1TbfLP+a2RkOqLLNYY3- zD&-3b4<;j3D9iwkxt0Ku=YMhwDA>m8>OpvN>Ykr99T;S|dxlq13RYA=IwCLrKGKZ| z5>cWcW-X?W#9+>UqKQP;dNbcS=+<3<5_rb^`ZH!wC3YPQ8`a?)u%Y5a|I zx2nWUD^0O#&O+pnF$;Im`gp}he5$q%fifA(7M4_VZL_>a6679kV$wc*k3hlw4c_P8 zEjX{7%y61bT!0EG-Bvk!+ZSZ9Ux>JK-k056g zZOFqq9Uq2eNJF#6TW;g%4KLY3m^g z0t{y6-weeIu5t_pK!S_tKapRubugn*{wv{I0P-m_-T0Mu0w$BKBO0XqTf?_)p0}6r z)y3DdF8Alnw^zog7hp}NUyT4y$N6Q9Fzp8K>G#@Bn%_tC2yXFCz_Eh=)e?pcO}7ly!{DE`Y@&AOBrwkoUR!)D zLL?H#g9aCcUob!f2F*hhPZ@2Z8Jqz;vX`#6-6`+Ig!_o_3G9942?mzO|ka!gm_R7apR!sMvZP1&{);%}(`#Y``=B;md6M3wz%S8Ic-t+|_9sTzo6BD0F{oNuX3 zR|o%bP5fIH^Q&Zy5tm!bncpT6+}B{8HoHYDs*I~Qa$(OSU!8Rn%#MfWIALE`+xzAg z#}zW!LLGvprXiL|R^jF*l9MHy!$&7m>aLfbv8k5~*Dg167gmlM(kK`4Dxt`cSZHW? zDonU!*&#eM1aD|s0zbbQsu`$W1zeh@!7KjM7Hggi93g3OFMn1NE&J2{81Q%hDW!ds zY%YHLn(vfxRZ{>qM)v{QqKEXwZgmzM=~N^hAH|(q+_88+H&3$YJ${ZiM3A+84B;03kaaaI~fI z!7{~dF?wce8grM+`7jvL)IJDIwZB%wu)JZzsjY{dMl;z}lWA}03x8>@_u|zYM-+jQ z!`7lNlFA|z-6B(^W1uib2pBKtltSe9n7V0l&OWP!-}6`ecL@3d)Vh4z~!Rw{tip zuag78MV5I^O{r1VsS8N89hUlW$(L~GT=VnVZ z&gEe!g^XsQka{bv+DQTidXHS0Hj-p4UoN~RbtU&{AoC;`omgJDBYbS}QXC)#Yd%7N z?>S_$riJJNz=PT2&ev2e{-jN*91|lEWhQDe^qsB5=m4wochRtDy!_32;NJ;_vVWhF zz!usc)ZaLe8{t%~WRUYmb2W(=g84PogUZq|n9tiD$)ImwCqlnVh0wZ36#opd_?esw zm#VVwwBn}geY%jlR{!CgmuJm;1CQ`=vB2)2J2x}E1W`kSmoIHJ`EtXI1xF;HA1WWt z#K_;2KhYmpCD z`W@%eM=>EU_nT|-E~ktBP2I?osJL8>zg)({m>u0|{0dD6^{`JHe5;Fm^8av5*FbZd zl(GX+u<>r)6RNo2d+uOTkgtdwAjS;2PID(>l2PJUOtR(tqrj=+LSjvPLB* zBD=@3AjEKK&=*zOiW%o}BqYl;&=!84Nh-6~GtdzXkx1(rMb*oyK72^;uGOh3U*NDx z>i%iFc+L||{-|Q8YsHW>=4l*KGGH{W%0=JnK!;Wka7OH0;o`p!r(z-M%pIcBf*lG+ z7pBw<>y@rh4h7WMVa$sLBSHR}eE|0%9DLwE0v~6_kSMeNa$!5DS*msdm?#zEGKAwl z8}!h|;>t{BSamM0Fc?a9=5Io)myALXC!73`1@e<{9+^K6#1Rch?T*3B+PrzSqtKa$ zH9%~@WMcFB1xCx0QD|(=#dA@Ghr5OA5}jYfzbCZ-;*Xij7pu9dFo9-b zvHp@SJR#gsLTxL=0cQ4VLP+s}e~j4&1V4KcR+xWp-8)*pk=n`H%_l7gRpn|qV-%9l|dH)$UukZ`_jJZ?evBJq56?@NCk3J3;9J=o#YAU`)#gt6FiGIleBY>g-Top=iqMAA% zvnL9&)-|QGCM#m2k0S@0qU)Io%9h|8$8Wl0saqA(b=0v|J*0elf9fbP18}lq_NzNP zGk)DY9ygs33}rt|J$Zy|1_JBw)<|00zuXKSFM{h2Rg3X%L#GgYL6FG_H6~iKYN=hf z+k{Bn;i<^}Zs+3URYy-1YSwELy-dT#e~>ALH0Oiyv~=#|sI#Nv?F~*!l@Czx;|cKY zA$gP6W2;138bQcUJNnLa_+$(QzaSxj)BZWMdE?2xM1vpyS3wpQo7}a4&z$|J z{vf6WZV~n7V{90}EO^>xrF`8?ZgqUnxvxBwUsX(W2t>jiq0p@$-(e6cfkMAJv1b-J zR%t3l{g+$#H5=OZH;@w0O<*UGexS3wN|vL&&ilIwhfK!IX~RQ*9+fyenI=sm zSaVJls`T}Xm1ux06s6dQUouppBe_5`p7eO181Jzohafvz@zv6~{YokCLF2}L<9i6D z4T6v>raUCyqW(=%V95}X5|>ql466$7&{Clp7-!5jP>e*NC4Fn|D-2c0+k!FHsL&Yy zftC0WP@++NG{(IVJGmzqr`F1y{k8eLy_b97BQ+xo^(8iJIB8FL2^r>kqC-sYPgS_q z5L}vCCi+?~b>I(e6Q3CR;-x?<+(TkRc7k%O{c;lmiMSaV>{WjNE^=0Me(s&&mlRgN z$zQZHB_oMq%0Xgzk%h5|3UdcYGR1t(O}~c@H_lh}bzKu^Y&dmIh1x7(#pFa1J!=ZZ z{I+j~7w^j;BCEFF&bvoNjw9bv02mmG-xNMWgiR!O4{id^Iw4GEtqExoto(E^+t%K% z#R0%dNh%2}i4B|se(TFdUp+v}y~&q9omtCAcWZ*W(g?IZ$T@;7{CAhZ17-FV!ArF6 z+Mi1|?HXUE{pZPJD8Vlq?!itX@xR;%nQJ?5PwPV;Z#x8+7o7%;YlCM5pO+Q3-vu#1 zFR38W+{uBHtlDO!oVUQD%B;B0U2Zow)QG;0xn2A7`=+*nHX^x;ZzptJkG}10f5CU% z9g*%s(LT5JJC(AZJ+UD~l5B~M+ zgJ{D(-Uq`Q4Sxvd3v)7`K8(-+SfrER6+uJeC>HB3^~Jqb%CuY3k)4H=IQ7Wzlm6DSmbF>q%T})j!lSzvjtXPZK$cO?BOl!freF{EHB{acL#kdM5rW>5dWdW2`Y9Is7YrNW3vE-TfvWNF6n3Qf42uN}=jN zao5QJEBnxE1NGGo?rXu7#E=;3flxXnR|S4JcEfZ-VIEh2R5cwVns@}RYOK-4>~yZv zJk(kFO`!@=qfpeH8_X(EJC8GtHE?2#Gn`YrOZCT|Q^z-W=R_AqHc~cQ<#LM29wA%iE5nKaWKyy4hVan_v|G z8noGATI~Cqc0T$;BqO`XeU4i|eA%KvlD}G;$Af#X!4s7iCo*;QgG*647@VI6@S(CW zuwnB3XEb=Dt8BEZOtw;0QL&9kh0f|WPyQg}9oD4p_@tO3E(kp5TG;q#cSj&6Fd7xp z*(50AHp;_wC>1&~hubdZ(5L9_>a0-7VtrQ>x8jrRtE~$$#zU9P_iUb#Xx{x^I7~{W z3LgzJpt~0207sSO&Y{k1?!zi>)@>eYkEKLZjWNzuD^;?#`(ccS)#=@7XZ=+%9CNLn z$+eO@+)&{E3?(Ly)lU+^Mml6On$)_D?3{V+68+qNY%TEBF~q%0r>QEG=T51>l+~7* zJhC`G3njRrh1d~h9(YAz2)#6A6eLUp-i#ta`qGGo8#oa~Zb%QI#yeDrqp&W6_HJD; zyM!SN*T7Q#2mtrfE)hayr%IE9LxrF79ufHazJ05&&Ph-IDK1~%n1T`g_BcG<9U3bn z!+eee1Fb_6p1mg>#wIH+AIJ5F3@m}lp<|jR0T?b;X?A$L%2?}}tLhiK-LlQl8 zb@!q%Ff;wa?jRGTFgQYZ@q}~F$hj6+jlyax}c>^A!9zRsn+tBRZE;9}`E0hXo*{S5vr zsl`|<>_Q787pj5$xlOo_dAAQdScryr=pX!qlt|g_g2I$7zfgTp zCjdW+@tw)wbG};fuRvs{9(4nmm?yaqeIe734Wo?0ESIdD5QzF?U0ZJhAXV-`K>+r{ zSq8LLHKLF>$eg>q8wcO*z)>E!DPYm&_Ce5V8dVoGG&Q0Bcsf3~eHE_Pnk9l5;-o40 zq>0RLxPY?o#XgCok=?e-m2#`2_0k9G2AYIIHVH`M$)9u8^AD9Uo{Qv{wbj0b=(~QV zP(_jut;bG!XT5~h(r`0kur;)epCu4h06gEEzDq{b{gV`?sP`PdpLH#ow)NXXdrBVB z#(vF-zwd$tL@qUwq$gES1(nq{^gXh>(<96@g#QI)l_zQ9!N}sDmi^L$2Eak2l<20F z3JIE(p}JW4G5*zl>nj|6T#=#WJLO$T3c5%k`}<5R&L$N#-N1S4K)^03A$1We+ms7ngoDc zL!U{^ZHULDpDABa+=?FU!dL8w?0h5u3;p@UoH8JIHE33Z5XD(R#nQ3jUI%gGHrQj+ zwBb?V>()&MLu0631~8)|Cvb&-B@-1s8zMY79mf$ zLd_OGfqsD;%qP6cd8rsV*5zl0rd|0@M{XbbXcii zm-*U26n@8IYj*}qUO}qXq*kd-VadJ35+z%#<%clqOZUKN}X*Lc}U<$EVE0;MOX zm^<8EUH|UZ*E_LR2AlQ;+f4MxbCh5la*4}gh6IaR`Dh>gDUfS4;0*aTvjGA*vF2oTU7plCX>RHv+ka$2bvW`ZZ$^pUCt?{s{t~92T5#Dc77T|pCf#P z@mNquxiw*Ng~~9)M9t5vnU8zFCgJVZx>;fL3xwI%1W~8qux&8Y0W;qAiXJD~E+pd^ zX3OPBqSo+8a*PKea2t`5$E)WI?bz{B*DD`M#Is;aAbQm7UjY_(G29(r6f9EYyhYhQxbaFoiZzWk>eA{rBbg z^Wd#JAjy_F*))>ZA;MJG$AJ3JikdTF+#n_t1c08+FO3u$B-L__$PGuK1$F6auSOWzR`ZS#e0H5o zd5chAIm-qKiM;O>$tXUuxO~L3fs}s-!D!Yh;+Hde3~U{r-)4g!#vnRiEk4B>0JDF= zTNV<#`Vtph6vM`}aD46&bf~Af;nXl9jv)0}(^CMaM`b6}#SThRyy;KNlj)I_$juy` zw4W^uD3AWicP)LePd?nM?B}%uW{Q3e1}oaa?#35jo{~ii!*TU7A>K~Mi8J)Xq>4}c zld;susufqqrf-rpJe=dbL;27t+&*SZV#ZuSkWuvhE;w_~uCf|fH!cp5I+*@lV2ZDeTxU!&|izdy1>hm zjwr(fe-_Q;3LPM7Os$k{>%k>EBj#sc-tb&CZVHY=>g$BOr?wXt^hv$En7rfdV)N}` z#L4%|?27B|+vSV>%eR_Au4Z925ia`Dxzh6hA;SP7B}txtRSNr8WXl*n%F~8odi2=@ zyyt5iM-%JZe4D3h_9O}GXAv+kgN-3f0YbHmfYHchAtQR#uRfJ zUAJ(U<%a0FaTVm@3*uSh$#X?2*OPJUZ%)|=vt@4AR-k+2iWn}!Z9p&iI~_RZE2TXgs3*!AgI8Jp>6w# z)~H}H#43|)+aB^&p;4i_c*}L_H6?*ua0&?=wG@!=10zQd*IqWvQ`dhQ`y4*JogcZq zu}jQ`Mvo0!JHejhmHFQ;f)2b`(cGH!F+Bc|7`X`W@jVTO%O`9qm|u0~RW*&tguS@` z2EC}(N94eW$1t{einCqw);IY$7<<|~(_x=6s{u7?m_+n$mEMjc+dp2rfA&~~sbBX` zhED}dLttC3`GPIiALT7U^nT8frnH-20+#B@&eo>p9~9~Gjg%?@*X%Zisn+hoB1`aM zB;B!iVLuEgrgx!_3JdeB0Kqauc0k+?oEO9Z)abI#a(iMSbzFI1kla^y8W}Pn;J`epBJWDW?I`>~>qHDJXJvj_WV#q||3FEnRoYjrsG)2Oh&q+^+wrm5j@Io? zTp#f2hA&ylcy9zfJ^3r-lc#NGRP0(a?qvg$9}VNyWx+tR7hR7Mr6#TT+?TMdy>eEl zzuLE|GaEOwDiXI_4CAmsPh*Hht8>fy%HcneyZCs8-Knqu=iB8q zc#v`!^#QS3=&b}(JgBEa`ut^-V9XUs*x$!Z>|71<{!q`j)bI(CwS8_yx?$QTuKyp8s zK;bgO&)L9UDXJqwqETD?l5=KPCn&bh1V%=C0` zJ9D5VVVQVBe)J(1YQ7vBmkLjv9_7Egsu1Y)&LbXzgov_PdhYaOqQr-w{yLqR3eJ9mwYPC!;+y;1%Qe)^ug4WWQ6^lt zQ-+ZdoA=0K5&5#}5H#Lr0o;6jn_l$Y+63MdYdPAV>@JKby|y{q-uzTW$HSy#t2$Zo zGyW7sAxB)W((=#x7JqZ46R~*#og^Ms7!JbRJj3FdLeZN+MJ; zRm?=k44zfiN2?P-)DH)gm%?5#$`@-~z3b2#?6S#+4*ZLxvQnN#SxXp)Ie#+vPY5iZ z@--wI)n#t*yh}1bAC^k8ZRS6~5$hnAHBq!YYU1n?ZY)Db;NgT_f;%~UB=-$X)o&1c(IO|}Y|(+)}dpyJo$4s{@NGLYn8 zC|$SvxLDdBfM>zA4-;A5I>}XiHO6i==Fm;z-}@Wa54zLR9yBTb^tZG;q-Zu#_o>T% z#>NGEE=`nv3^|8v0hv4cCYd8aVt8HPbgT zeWO!oNRR+XQ$IH02v^QM1B?}$2U-Lcx$iGJvuE7Is}{AR`se2!%FEPnqQGc^ax<}| zN1>=FDahbO_swTgeG{Z1c*ak`xGtHL_M(`~iV1??CSF%>mMNXkE|>D5CI0o@%kM`6 z>2xG(LgmBUX@W)poHOe zo%1pD)0JS~S(Njw?<@(pbsC};4}ki1Hg&{3r3u$S{c$Zqs1NcI=^u^#=sw#RuFJ;H zsQQTW(4BMu(b1Ysmq_RJS*;~p!*indB)}`$?sU6-NAS66=nlKg6^m}uIS_2I<2?jaRFcV1PNff^*ewU0{L~-B_pvL#>L=8HF zrqF8>!x$q$LmNV#fA4S(ZMW_ZrrS1uzTW4Enw$-ma6`S-Yta&DiNe@={5(0g;a$b- zF_LauWA%D!F?}oJ!A+gOm7AQ9X}Fv1y{zB2z&A|aTwc}O`&qxr$>WJ7nas8IZAU~5 zRNZL)y}f$>xO3x_Qy+R0<{wZERd84BA^it+E2oF!<1;1;>r^`#ME)D+muobrC$9Vl zzH~(eG0GtCWoF$GhcTTWh!GMN2XnRjajowJmYkey`A(y)+PhBm!*37-KC>`ad^B8J zC#7HHfHq*^Gt+Q!^h0t1emq)bEX(@|Y1L7FXJz=5xRHA0#io|}Ne&fq7TM9t z_gBm%X?KE|2R`S-*fV!&RPPEH8P@1{lU*zO_miWU&cSC0ILxf^pEr%{8I1P3Vc0Qc zKDGU#f-841pw>TITlkkQV`hwvG|-Q5+i}hMMeym>v_ZM1`lNzv=b=?`%tk#Aww_%S zs-?n}uqpDO;r?BYoEnOJvz@W|qSL8bI}4z1YIN7E!nA$N^)Fd*r(J@nr;Pfj$w7q1 zcm7s-5s+>C37V?6pu`iw#Z1Rxm5GI`4!}89o_d!A?D`xr`L7&9g_i1 z^{GZ4e)qn4tQ>1k9xURC3pW>BSZ;VHQv6Q@SF`xp zD4?cw93;*#Rqx+If79{i{m3HVewuojJ#mtcVn9uU|EVt1zH+LEm{vDjWQ6^8J~&&k>HsbV8$b;`CABAfA%3t?=7 zLH;zo&s2)Wdq!*IPiW-5X)O2*uek64<%WCufYUdeZ5a28dWmG1K)FG>Cq?G;I1gum zUK)*VK3dSCWa68)T!Xd=C<`JM#p_-}Efq|I?3umNv4DNljOE-!FWd~@G}?kDf5hq3 zIPhjC3JQ8y&3+nvj^o4(y&yYhb(Ta|2rf}NcUeb)?n7;-sWrR~yj_QZ&$KE~=cHhv z4zy32GeYMb*@5M1UXuM&-*?ewx&(;Ok$QBq;HO4NNGX2vmb= zm96&Wt|*kW@BZRtS^S!~`$uBc!`%C>DJaucBPYmD8K!I%rNo=s-EQM=6Ch@hf>!oL7#MiB^dlAB-(b4ouOX=*@aM%uwrB)63SUKilqtE-#~)RO9y!t;2ZM^!d1M z4zmo0`5tgaum1koFvu2ol{nRFe^`l@tgq6>mNoSFTFi9CQd@q$bj&*-f$+tBb3TVu z#HQw@5rTsnt#5!X+lT4r;r4vi0*qR;(Cv>?5To&62k_~658&+DI|vLHpkEn5eLLd3 z4_}~Osmmr3)+b!(=l-hKcM<+XtHccl5E(VRvolrN-SFCNSjQ7Ucz;rc`jw@Lv5@P znIie(wcXWw(V`!s7ll`}MAS#$ui5;ncm*ljuVyT1@m@_#r+v|1UE*qNuWS6GHwbGg zR_IKx@!8=)*yODp>fw_ueqH)%`^gfnXLgp2{Fj2$L8J9&U zVw^H6d{|*|arm0)ipc=!n$?nJe+SIa`rtbqp$W zhZ2Pvv*>*_$L3B}B|pI?6*SNPuUf~|?LB$Q9!@@HDGc=xCVII--IS*Q1UyPl<~ zmqm^d>VY|$)&4yg`F+MqB&Q?--<;37$HNxA#>t>uhvUfNmO)P#KJvRUGnVrHu_>7R z7{4|n*!3YZa8l?<74fe56Q_TiYxY*6Kk}4%_iN)KS7uJ%%wH`&MMd!*BG6q&j(&Bq z-H6B3DD_VM?FH{TVPOR#fE^u=%}TyI`+m zE1_aWdLrO&Zf@LiP7RahSa%94zc*VS(oiL?_t-B3v zU99Aj#f0xZLqg@vm=3(MP~4yZao3+{2_-#(`A z=`I4|^|dIpJ?F)Xjh+{UPT!;T*qB(f4g{7q&E%4x%jdUk_tR*a%$Mf+`Ul-cUDupG zL1t=2sM2?ryr2w;u!k?c$AiDe1)Br5F}xwu=)b+;n`4SE?O#m+efZBbKwf>XJrOl4 zvq{yj|{7DWqqv?SL<}w^an~qImrw&_e8z&}7z3bPUTMv_u;-{Cw zA{wXW?cEnm$(Qtu$B%#KWE1Q1-rJcNiG9!mvCm;NZw1pq4#sYm165`5d+7IY0ZI+} zg#-40L^GrrL^T-~lpphs42MWXZebd|bYYy>UU~7(`5FnLr3?@c7C>^6d|yhL677~G zqn7CTat5`hyN>%kfL&h|F?4u-B}Yr4dbf7rL?MTPQE7d&SnV&xICj6|1YEitXe>CB z@Kp^~O645EOTaPgVYNib#@Ej48Zy23Bom=qD}$R~ELYZ0N~<^6WHX?|PpPwsN=X=S-$ruWmXZjK;a`7fPK_pf* zj~*29iBalw`P{A%HTceVW$?m))@ zNOov%xvqdY&FXsUz?KXit*|96mQIjLLMm~PC6#iMYdmG(;`Sg3wp8CN{K2P2g zrQCKjwoexUks17bv2b=rUx3@`{Bhr^5+#8?Xg-ibEm3qT|KU?q0`>X@<1H*NQ^@j* z*x7LDnHo$hdOdSFqM6{gyQ7oqh}E1m5`y{H;hdY!DL|}_fW@W)OI3uT<@Y(!2Al2k zW&;<;n+=(dqy81&C+Fl+d}U=<2+oh?Lvq;GK1Ur3TFvE=xf3z9c6jb@Nolo#>dzIN zmTcM`Xq>}ODfeTR;m3VV~C%y`66fCA_vyh3XJ=DwNP)hLrFuDRF+yk zhL%#bX=**Ur@)EqIA7kmSc8T$JJd17QEV?-gK< zAtpowodxowO+XtX@rdpHPVYZK1Qk_qjqK#FZO;=N*mOZt96%J;1{fH3Il}2Akp)_6 zUAKiaQc#IwRMcSMa1oEZ8h}*q<~ZCbr8!Ny{_yzY8KApAV&%(tI;XKZQa9jM^<)8hh9ggP& z2v+K<^t94_84PIMC&U!7uMF~(y2L?n5p&z0xYzXgmNWiZ1hIFT2cLpUozNOS#;(eo zJp-~ZfMgT&VDOUSN6lz+a@5vZeer#vcpOA>@QTQjxpNZ+?_7P*_vkXbg3RnsAw^)` zEwqQ+HC3|-*d3YckwCJInvOp+v;4N3cA0!$j{sGHPP}H7aQs!n7=oh!AQOn*{S&t4 z@w^w1O%d=QB@ty$KyP6MHBv#=O)85a_Fgz(U#rrRGi?*VNgS|o_X&h~<&_n+8uRc&5*gSJ7Rg z!{2kCWjIj4VPN_GFME{tSDMHl-Bh-mHJtUC^UE4IbppvrmZ1STYG4~fcTDdU0nn!( z`{|0D8l~((6NWJlx(rUPZ5I8OwI_QFG3;eiUu-Xf87VMbdUoFHvn(vrfu+u2g{%&f zdN;Hy9AO)Ra#>R=9Xv0widg$y#D}wncC_kSU^F0|DMu#|s=Pkl(W%8FE52nPqi+|7 zQ-@AW1GPi)SnQFX5UXDQbXS$q1o_v4WgUO52T&#|cw8pc(#6Y!)Q0@*VmyP#=$#KB zeLH1L(_fy8UR49aFIb5(5V{xHW>-8`jT(x%KV+C?AqsNoF=aUx)IL8g|C6!L?mP=C zve?m&re>|cxYu6^|BWvb*AO>eb2Bmz@iO@0x+ftKiXh;uIf~@MyVKbH48#3oBQDcx z%=Qu3l;SwT!Y}&{DmBl~Omc7o`a$^IM)bzp%!~P-ypVIw&^{b!;z8E?p9p$&lbXAb z2>d@W&)b4Jx7>IX{R_8tt0AWAI(%1lwqkS$PZ5TP^DpE+&0B z3nL6q?jne|5vu=;|! zz^3MekBdRSr%b~vQd3so<5+L9p17*GTd<_nxc*QwcSZ+G?OJ|hOU%XVcfYi|!|3Pr zv4Jyz34bMyu~usupM2vsdqS$S%Ylg@=Mr($WIBh3R@hM{(vJT z2JW^AF`h^oEC^~*9z#)=%2*&A=+S!<5td2d8ewn?WR1a7NfnY4!{*-vlswG6K)y)j zJ9><_EcB{(T+W+YobY-A*-!O24>UO3grk^J4MM z;&?D5q|9DlGyP!)uqpLKDmFz1impX;LeXK5{3?%Nm*LB>Tl*gBWf{0V;ZdQ5`bV~I z-Xe}_2#k3B;@QA62Kga_m&DU&HK)nY^nH2~--(30o=qpH8XrgOZ-cg+2Car{0!3X{ zl=U2qn+n9WI#P)Eb83io%E2FiX&1SxOs<6Gj3b2tP&A%Dg}J@GDyMLa`lV;mN4DEr zl>5p5enx{*)X|LrrRvSo--^Bq(EifGbJ@@|uK)Brw0)h2o7E(E2cs6u4mU4p@z_5X zLwrYv_yzN#nM1(7pl8_+avjH=T;`9#N?8N_qL2O%Kn4H^^z|}*uBVs#PXRG0U-n== zucS7bbPjSdFWd>kAPTLur5q#O-dEvlrzPDb`8q0B5$igNL)gw$x>-7G@t{>bh7=e2 zqU^bYtCWeJVDpmkcgZ4%JsUMGjhg8d>UWVXiu62SG%RDw$BIxYd)R4$e>rN_YEGTX zjzzWm?@*-{M;kxj8NWTCXL2H$-4B@5N|QTGOF@B2trfGD_Bw`mp%j38%`0Ky=jq7E z6P&S$61j9LB+hIOeInsK}t;Cvs)Vi^xJ{a<&4B zoD!t^kvXd599k&qZf{0n)SSTtDV#gsPIUoG_Kcq)#!?D(i&Ws>)DyQg;qSdg#Ncu? z$(-JS_hvuafS_vti-L^aR>BYd?t+{zx}5dQLd5 zLr5EEcf9xFF@0yg_mTkNEJlVdhaKuh0{;;eVT*sScGrseSx_?`gLO}!ff3Vj>SMV+ z1BiLg<-IZ{2&w(4}7&qTc1P{|_5PVi{h&GtyIVyb`~ic~-q*syc;FkSS5>O^~!6(^s>G+a#W_K#KGBEj4X?5Xu=QL?SXa$+H=_7*nQAP`!N4ZE5e!v#+dXy zE|+^}?5o5$$Ootp+`7{1&fmkKdK=KNH{65{NgKv;p%j5hQ^Lg!&{Fo{${d^A3sL$j&h5c=d!+9LEDEHOfdw~)Ovz6>eIfH{r+Ux z7GI?ic5pojJ5U|NGfs&~gKHTY4XMXNVtI(^%@@4#%9tQ*`XEQE>hoFW6PHX;`HG) zIT4{$7bO;CUiXnIWIgAV9bQ(6O`VejQqY`5C^yW3P?(iPSfYz@8RW+=a$X{u-rp)b zmDUwJf7)uofsK&ba?;ONueTxx&$%m2ZcD4_6lk*xBH{qZjVWs_>Et{8>fjs%vLc#r zLZt-JghCb6zKSUuO4a^j|AmA&mtHG2DmfmJKi&J0d*AnT1r8@5rY5etpe&+yv#g5t z80+i?pB8(*8VopC`RgXG-a&$R-%u-?gGCgm{`m`l@h|=Fb_XAmqg@*V^gU)q1}RZD zG`xDpEtB5!O$nWoeR&w=^Jk%INYt;_$e~}u-(8yYy!Y2T4FtOEw>amNKNw{(#x)y} zHB1hu?7p0B9fgpZN-tn26E&eZd-6N172`2q#e!*8zdG8G0v;h-un(|cAST605~r|?rvEx3E@EC@_WZ9b?Dq9&{%jqIzB^0b_1{Jhz^LqW za($U>O1MYOe;_x!*<3*a{&?j*HR}5l!^atuphrJnQ_Fw&pw8K^hz`g``iAgea27(@ zXECcE!X@Sm>U4O{0Iym(UAv=lJbCy=yTOjll3<~@KsTS}y)w=QY!tDWQaza@p?p!c zG52%Q&cGVW`bYQ;fjGlJ2htfHrUR#f?+WB>M=RmXxT+*$M7=IJ(jM&RO@I-@gZM=5 z?&tr1`A~qNYEP;?kR)dNZI7ulp^2{9+baCx5o2b(hkm;9(&9@a$o3?2IShya_^x-Z z9{%*Sf(fRxU~&qE{yJDJCGF4;x(WK15HTy@0z}yeo6_SafX0@Y-fWV&V+FzSwAGMp0bZzFGoU)D_P5RS?iLZ1}v7 zx&W})RuJu@rSrv^@|-%Y$wU2JvA_{@YQr2cW}gI#+(dw}ca7hNw=>TT{PK6d|7fp8 zy+5MHI{ukl;h7o3?;be!Io5YEp_RNo%27(~7c-C1>d`z8wU?8^N8!v2^1|O>o)XWS&>% z#KxeJJl%J$#@~`rO^lLgc2C-{5~;{XQ87wWB>u(o=?CaObaBwc z9GUXN-9E#$+Th7g3F;Q@y;d$NlJC@~VOC)RX)HN&+wx?*$`Hh&%QZH$R)P>=Xwqj@ z57a0N6my3RM});;`HRNCFrwSM^(fU}<#C@t+Q}uZaL<>S0m=O~HCt~cOVs!s;G}C! zb6I%B2e7iDFd1lT2_!QltuQac@S{4Lk~cX$-=D|3#h_mM%^zGZ*XRA_Yx#vD|090y z&1>xL3n&mZ@^r9kDZZZ0BA}Kq4;9Z?Ec#R=hItP7U5*UqWD^6+H58<3wfg5|5y!aq zN8N(sv>)F4nH%4MvioYJBq>Tm^TlVYW)AJZ&DyY9vm%*>P+iP`kVq^!&NAV|CzLW5 z@WDuie=AOQ+eW{EgLIN$b)9FuuFh_fvywa*YNhYmV1%IYn4yuVVob|ySGz}?B)vPDPw%qP z8*Vd$O*co4o8W>8VMShM>m**DLL%bVnt#UdpFLY~-ExLiAn7o~Rzjs|-AyqLVPe zeBqbE>FKG!b#HL`_s7q$ztr4%`CRfZ(z>S)mWNSz>BhIL%|8BqXN_3Rt3e5tva$@% z+r45!ce%ibB?8iYYgf(={lO*eF6`Bxv+{u6y(PpMB zxyEzos{h9_Gc@NE8xypi06>!!4r@^iDpx?(*Nho)J>#(v|G24LGKYo{cRhWzY+cqC zFQkvfJrn7V2Ow{sbCQQN&`Iyga>g3lveZI79BDL$XGaHb_Lg`4vDWD3qO6eo;K9Cl z|J+U3?NflvGSR*71V0v+H|Q1n0sSQ<+F1+x3(@Hb*T978iXDs9PxVCc;YrDLwos`a zkF4pze2NG>DJ;E6=tQ}bEW(FMQxtCd7Tre71kvvE8J5Mu4=Qj3^lnfIh6gN)DxYg? za(yUU`I8xN`Tifi569VHqxC&h)3o|BSk$Hmu^OU@=yXc9057H*m4Bqn#H`n}Q#FSM8yIUWh8Dehn%J<{<<2LksP59`y z5w*GSvTy-T_B3R_P0@0SMZ8CoZiBNnr5`Fe&o)MS29@+NfiuS-X zL2|hJr-jDWCYJaS{)ZEkw|YWz7P1gO=f8IjnZOxVJ6zOvul{q{dZIWSIADju8O7)P zZ(nvDP(oaO1T=3owb%qoG-w4kWyLC%-?$pHK%~Ct45zMePbh{imPa8Ti-R~$ol#MV zYwh)H_u@R+=wwQHp?Qk9V|wrY!J3OrBCDZsb(BE?Gv7d1G&!G^X?;(59hY>uZ*BcF z>6(RozgdLxgyz_!$>W0sR4_!vu#(DU6?Mwhn<7QErC075{kil@-Bod}uBpi^=oM6) z)j+2>rdshhm`JQ*@daLlML6I9k%7%1yI185POdfG=(olo!+{Qyn#j2oiwSXgdFQ56 zxWoqCQ#V5&+*?l%^Q|wPiuAozKBiEc|WJE3fyXU9t= zX=t4P4>HX%0MXc7F_sCy-*P@ez7;UdyVO)Q9P(kwqX2i@j{`M2WfRZq;M3~N^;0OJ z_=k;Q`DRL(LauI?B4Afp?AXhSg48g_O6oWYHbkW$~&JIUP zR!1$zt#V^3N{1&FiAXvlWlHg(iN8) z{|$VJ?g1So`D@ba+|od+xY+3H370FO6=}K|8x|Aoie&ILJTGG+ENzeHfBk>z(wOTN zkBt`s!lS?qFEQ`iKRGta&=E(MOguV@9^%Y+nx?4RfudUC@p8K*j_swc##-($};FlK&QpNCx>cTibP@2uhH#Kf0?^Ew^oeN#t*PC)&OdyQew7bGCWn!x+54QnA1E?<3{DWcjoao-> zcXr*jVyXIN46)8Gx(Bu>V>mKYOUsKpFUOYc8Tg_zE%!n&eR0ev7gxY^f;YkxzdR@g z_dz43ATkI9N{RiB`g70noT-G@FiRUy4t!;8W-dW->1YKwjqf~XRku*0nN*onWVUmnp<6M}pf zoZ;S`vG_OB<_VRuK?w}sq$0D)MWY|KT_|C@TFwsueLR$OVW$nHtbVL3l;JN3K|R~H$X($@jB!46Yp_VQ)5lS zVCnU#>!oA2>zpYT4RluqESy3L(zNULQUX*>C#a)xb@2S~XqgV#W7=Z=S3+gl}#D+pP(>X2YcJb^OtJ#4j9CQD%h~byx!=XPub7Wg= z10F)DAbE}U+ImlKE3;?GOuuR&0&>HnC!pvIZ8uQzMmV>TaR{Szv$n4oOA`ZI2zLYf zTdhHt1k>SDTN{ggE<2&&I5e84Ibq22~249{g zUs-0^-FwYkY&fHQL;MjFj}pk5sgxiFD3hL))3yoaw5rxOm#k4tSy|~m4Cy1m=^3X4 zLRbsl05${9DJy*%@h@sE?(ecshBb01Zxe6F6U|^DoaZdX;blRI!~6gfnT!ed@$HZ# z3zA@rAS1~Su38JLL|OVve5qr*Po+jMcv`c;x>*g+&nrc3fee?#!|F4c%nA(5s6e!b zCC{uD4K6X6<%#=;+8jPMZF!AvI>!KqZVZJo6Na<_AgY=N(H8t!csR(3L#&fZ_@&+Z zt8*{Q-tK|;Ag(n0KoV=ix$qb;GO}tUtH)4%*7B?S%@38shn$p4sqxqAG9))@M|0Ey zFI34SeStyxmXum`xq%sF*d^3&Q{mxu|CXo zxr)Sm)Y6F$O4VQDs>hacMoth%0a0D0ngz?NJJ@L z6pN6c;;W6=T0o|I?&X`qcCYPQwQ?D!@%9Rg10UkfUx@6C@pRFBI#~}zw=zCh=?7R# z)x>MLk$mD?+yey;AMqRYw`r%cUqvFy?f!25tc@gtzqYlFmn}+E^OKvOQ$H>p?(o*% z#rWY%x`DcaToE8Ufau?c+Q|c#iXLWDw_>yRIz7zqH07NN0(rA!8qS4RU=L4b$qn-2 zu;eEBgc3e;m2%FlG9hXuFB3{3Lg@QTldH$?gL7Pv2O#W0F?80`#kbMdEyn#UE%mO> zjvmjFpHpr*W>@(!?D~L-!_g^$$L+NU({sitiO;ct&+Yu->w(vJ`*~HT&(+N9c+HDX z7pl8XGFLi75Mz6i7^-aoE%Z~bLo)K4ju{sKL3UrTK}gbrC9gc?HC7{kdlqVNzBh}a z0vO{O$Om5GmY=YH>aB296U1ESR7#D`Ab^sVtX4AiPWh*ZkVmvpL(5xXcCrE*#eE(} zz2*jBt4EScadisg&ZW}5MzE3Ul*qnvU^zn=M;mV8v=UHrY1|=YQJY+M?c*~kf~`>r z*YK4#>>0Jx@*2vf`S#sP*F4vxRyIy-UUY{PveKrk%1nBtv8-b~Ok~IpvjP zn}O5UDA5>QA8;NQoG*Jkp3A2x2S*BsVS!MGi@8Bx(96kbgn{q2bj4hrmpHi@jvqCr zDlol4IETj3#lr1wlTO9JV0D2g)Wr=2l~j0LJshx%UvUFmCYF6bN?wvC3vW`Wq}Z|# zDgQKrm?roL;9F3d;g<_8fNZMNqA0JEoYo+QOJJ=i|G{~2^624@ufwFmHoz{EAEhuL z)W@hNJ25PVYYX`QVeF!-mBDI8>%xhFRBL_4ZneGh3iX_HLs`0sygJM)B`GaGXEGiVUeovG7k5 zrW0DC%WHFq=&yvn6rh-m7XXm1D#i+8ncd5*s>xWipEs8Ufn}Psi`IPO0rd~%1(i_c zo0_%@#hj+!d7d)g)VWLF#xsB5M*IqhnJweD4bZyt@pO5H+%JUSPu=&r81D~5#r$z1 z%6P0|tRe}y5 zN>uzDeZO5~@Sb<{q<0^tnNQxBpAX<&6R)owTRw31R8!^Cp^r^{KZy>_D42yaH>^+oV+!d`+XIoMj1PLfuu@_|d$>ER*I)Dl+e)TF2y zKTN_j_;X0|{!D`iFo$fSi8uf!GojQYqDoyP{Qg@zDf!pum{EunHJPh=RSR{;J!-hk zm|gqdXa(>Z4QhcikPe0dW)g7Z6gL2xVWQUg`e1UgrVbcrSs;gak-UdO`EAFyz|z*( z@FhLeusZsELLAk?@2{+SIo-l;%*+(vE%+&e8fEI0?JeaE8qaCYi@IFAJO20WZZPLLf`Syy*$rti0?zVo2HW*bheJRBE4^ZSy%*xEfT0M8)9YW2N} zNUL{!1Exa4#SD2b<)?UpSky$^(ie!6YkSdVdBBtfyWD2MFUe(B@I*^<3u_~8G$8$9 za$9@1PJ}Q7k=YIu5y3R5c1%>=gc>qy5EscxhO?~uU-;T`AQMCHJ7BNjWo~n~5??tM z6W-IqOOpbZdncr0ag@75{P{U4fJeLOT4_H(4iJ)0O8!XdD=zkgk2lQp9-X zIr!~^yqH&`Nn4*&#_)Kz;zob}kiD*6riY82$^HTmM;4@GsnhCUuQWlWRS4vm-CjLB z$xI!hF#Y~~&KOykqcn4;#aL!rwL+BM@Ih9gpE&tig!soyeJ0BjVCwxjv=KWmG_fV*moncemCubv5%F#^Yr+4#GI~yd^0}2v z{hD5ZqX&-0(J;wuMI(ky$Fu6Us_&1B(+e7bJ`n%!b%^x_m@&FM?tl>@U=a7gYvs7Q zTEUhp5&?@v$VYKQZO{V}u2k=uEkWTEYYX!oeTEq;4t6jcPxH9df)B9X*9il-WX?+! zN*62_dI`7$E~e~GpR$oofH*Y(23rFx$A0(DUYv&<&*WKej6Uz(KFjc0hiTk!+}Mk` zh4v0<+H>LVFUW{_xg|2Q5gkUDVS|QrKdEjW!gr_x;~42?P2a}eNPZc{Z;D8W<>GY zSJ*Lxdcm{%M2~d;;PuXMZJrk}A=4Fu%tf-gy}S2y0&afM5>kI!j(z+d2cA%2z&EH= z`#T^f4g)qr!c z$6% zA9G;fFdLieJe`fKw~IrkndhS51##c+B^gPsnz-3UyP#*z&#_-Y)dvA19iddX3jql) z2?|Z7Y3rbC$9=6%eIjEmRRaCy5=3k zL_KZx0(>T!Rvv@7P`;CBjw&y?;o94u(%u{XS3#rFTMtr0%0U@ z;BNUVSYAffJzv%T1y&||Q}xBqodH7<0J67sYL6mkc4@X7a=*Q6_}9Bpu|3c7fvj7( zr5ztyJ`{UM9Z|T%F3v1Eeg+TP?iTMrbyn!8OaD}{ zYik?7cA;J|C~`CLzylS!`D?=KbO<>BETZN8#qDgU=Iy`1Z7NkCCETI&1D1UTvRmPj zjbK%dq3Co))iUm+e#pjQc`rc1J7&(XxTE=X6cnx@LpmH^cj|A|sI5ihAq5XS;X59VFxmIFMsI?&o7 z!r?40zQBtYKHkSJ0{MPVL1*?a@?scp$DXEM-k!GS_s%VQFesr`a3Vfza>_1MqYa%^ zUU$EN;5N4hVZB`j1xZUNOKU_tGaoe3F`T12 zC=58)Z9pWJ>(yDTkpF%|Yj5IYfG{tS%frtZ(+DTjyj3PEUSE=WkSoP*nA|F40Dh!cGF zUV5xFXRfRx-PJ|V7_N*Jajh5Jdnt^B#c;?ENY=VS@sy*LO|`nc;rqb)(vUZSmXn0{ zHn8}oxd{t>_>#VN%oFvZK3sQ5gz$#n!5H^e2kW9A_=gJ@7^8ihtl%9|)zO2Wfb4M{ zt2>o;@w0_wU1?~B`j&$Rpe^u;`L~R1-Y9OfVX$gNI=J}qrFU;5REg>@YJ?Wi? zpU$aP>`cojhA7(gw*+x&58>JH^?p%hRg*$u=+G)4hk+akt$}1=)z9?=SSY&Aq6hW~ zIHxjGV)g2Fj|?kUSOvror(^RdCQyh*O<=)DT)lba8b8ukV)M*}QjHi!q&fe|(3Tgv zij&mhgFTm`N!Y>(_9W_$Gk3APgU_L@6cWCn!onpRM8?{Kb7t~3nxBVTYw77!c+e4< zLao>!G5`hAptN%*4A%Gd$u*1}l23-T_UYxmm-zIf6wAmMMhKHI89bcXIXjdkI6xK7 z;zqhz@^+xHhkSrlGHN_A@!q2;VC=N%RIKUn+xY9&{R!TCbL{!@dYdj|rhuMlFcQ@9UU4ykvTd5d>m7 z=zgG#U7y{!^JUr~utsXDHx%c9z-S}CMC7ET6e3CIuQ4Q11yfx%GZg#}*mo@A+N6aI!9`K{{x;KNV zN=nC%muo3B`0sins1ois{AEP$x|*qy z8|ycBenZ+IC*dmG1hCMN_Xh7f3Z!zQOsF;GjPbU=38rccK<+WE>4_4o;+JmPKFHt%HMMV%Kzhw56d&(8+A ztr<63g8R79G^Y3T94&c;Qg=_*`y$S@m?5ZeT-@|^8s%D9zsTj|mP^&4%g;}ISa#og=_=}nn-Eo5 z*E)XLPx-~A$-EeRw?xhrBhUti@xMJ4XKB9EtS;lD`df#>#)PWUL=^6W`>Wgb4!=#E z(F-+Mo8-4`=FWXxvL#M|s2=2g^Ki3wpd>z|n=368AL2!r5#l&N(~6o%2u6bakze9+ zzf|@1RSDl7n%BKaIt)(|9_>h~KcH$!a(LU=-0`PVY+cr&Fa_rM(r2O#&W-K_4c=LM z#rq=icvRE{leej7dvyR7+X?HIfm!lbJO5Mz^&oDj_yL`ttGIy6l?5{EwevPEf1Cc( zYWw0jG|^AyQ>du+r4T=8Ln=O#A5!d#4#MfQx0EMS zY70KeygpGJD0ucUIlT&N9pC6Kf2;AQd~qy<)utdKf~R*b@A21fhh+e6<2XZm>KLwo zTuA~gj-FR>BF)SJ2Os+7=7($sX^*+M*9$sGsvs zmMZP0U+*5EW|rqeHK<; zMva+Cequbef`Bxqr%+MN%0#@-u_fmj&KiV-a28F|EF-Il%9x9p$Pl5M`!yzRg$2#* z?=u_HzJEPKL23S}LoA~P5z`1sm9;9C{DiH!7Io9-hPI{Ul(GaZ5-nfHz~_I`k@vjW zCGgpO9p6MR=%e@hTb}S0bC&%t}X(P0o7Y4{_#1 zEaIUmG9y<{^OK}fGOg|;I3Ag>Asjy=?<-F1=M{_Y^AGzGOY^8Cq-2)XIl7MK$lRp# zEyk-Ebok5njuSK9rzO*+czezb<&DtyDCDU$cRN2y&2-oj_W(pKhY%JQyJey5IZ2sM z(;WWK+f>{0bVXJ$vWJ4)KW=AKhCDO2{QPP0Hux`|zDIk0LdGZFlttit#YGaGSesLw zWqtm@U8V82uf z8tX1PE&NP+0;jokE^P5po-*LuiSHwOPs7&XOoVpJ8Jci>D{Ul&q5G+MH#2xz1q+z% z?d!=~aE&@Xe68OvT!X2PMKv;ZH69u}w#;qQtVmUq5sb9G;s?WCWlG<##DFAe;mtDI zR{&|>}4M_R~uXn9Ppr@YOgvZHvY4M!(bV`+iG!IpjS%I@6WU>=lvO7F^FuZiQz7sq+3tri=?Xo=A=^q1^R&UFir5g-&t}-+AAO3? zBLadHD(+6sfNb)2hlUG4#JVe1{EI2$ineGV02l)uAR|@t4Au I83BXxErsXc^=v zI|d@w9W-A#$SfVjF;(xZa|uyK>B_CQC>K~kVFD(d^~ToOSX9}k)~0((4>F{GE_4xvNzgUm)k0 zuMqu!${Cb|np7&-DOoY*o;=|gWjSTLm_g=PkU*Kn+mB zoOkpyS9Cq?JiLwvrQLmA)t%i;c`=13=qJ0Da17gqR$d%F&9rIgffb3-9?t?|pIUL6my^M5$Y?baG`Z#N+= z(zPqNH|Db8g8b^t2uE~!k`vQNQH=c?r_IOWdiAmlbM8K>&>1_nsAU|C{NP%2w|(A3YZRb?Ym&HCjyMseCK$oH^!*ShS|tFE^Ik9pLJe{GfmJV6 zmb8lEnCCbn%GJD7MToY=N)+qS;gw$7e&&vXC5etYfJy}G)(3I?;qU_#wo zM^~*etaai)od(>gGB?2u);8Yv@x#M0F3x_w_xYj99-ZSq(ur|K?m>;xHtFPbb$W77 z40J|860m(gY>0w)auMr#Ws@!(>AndARc3~wbOhsz^9-i;9t_Iag(b)__KU?ykupn4CKm*Sq1xXeF9CJ-oLUQ$U}K07q1H#6Gh?QcDy9$@I|!e=p<0seZ*8TWY96t42IprqvkHOra09+x97uQAOpBH$@fwWNc>* z^@Hb~`Ke!u|DdBkX5#md`57O9YNVAQB}$(e@t{7`PN)c@9|TR=Zzl7gF)^fhe%S9C zMel>L7-i!yD_H;tvL!{w_t>PfW6nwn;n#%uGvFfYN9X9lS$+)m zagz71`%G^up;E#<#@O(DD=1eIl5i9nbQN=<8i6!Y3^13&6ySO!9zLYtYP1Neu>UG; z{UI)6vGUvxzOg5+)TFUcQI76kJd`{0k`<#5G_T^ocaDGs#?o7hKMnk1zS2gou0{!9-Tb-o?J^s&qVKP$e{H%Q+PanmCTI?kmVX7@z)S>CVp^&I zA>nt<73jHeE^NJBVBXZi0(Q^y?ZKK5*f$5xmu<3-SzxQ}KmU$Pc#o_FX$a&M@i_KI zpM+;zZLF*Wl4fQMQwaE#OK}|G{AP(mj06)n@+oo>M>E$2!oE8BrlG@4hg)7QTn-|F zH-5M3G{3nf;4UG#3lA|u8do$B(M31{y`QBw27!rP0vh=q+?~z&6&*n+gCt}BD47xx z61fw0)TiJ3l?iW}aVFiIgid$v1m61D7$aGvi9)oeuQWFb?RmORv zj;n`CGmcDf0d=`WV;lCA$2CGI@0JY>aYA{KaFyQ8T~pK_YzTkK4CnqAf`be-!i78s znCR^|JLk9Ljm?t|Di#Z& z@^ZX64to-jVvp75je3y_E{E?-&Q}OG+NzdvQNf(qGR;Z9>cxIo{mKLC_=G%k9I=KFA=hH?l(4Mrlw!L;(gBRLsfzT7yrjtI zox~I-=Fu{x`IZ8`qIXQ}V~V(7*vusQOF_uHpHm^_gVKU}UU z9Wi^+n0qpR#UdsKAv=(C3^=_6i@4?JY4ZCRzneU-*sF3*pv0}E4O$Xw5+#|79F*HK zZVtbsl*^PPG%nI%33+kL$l5^v9Juag4)|ai_6-xd;n~b!{sr`?fBx{;Y2Vq?eqP%; zM=9kvK$`UM0h1F+EUP@G>vQ2{Rc53dX1(n~m8_UZx4TM`rNLg;@BUb6sC(oZUo)fP zK0HSl7SC5}KCYlBv6(|NM?9OCNEvA2SY3C$`nmI>`~EJub836Zd)>s-GG&$H;b`Sh zTJ`*Uz${kd++4Ltg{=>UHgZ~4v|lBjLPdb%0esM`POmwrC$)04amq@j73kP0RRm`6;-me%#r4yAZ^^G0D*qGn#kBROKVvKT>v zqiR%XaOi}*7H(U4N0XFoZZ%Ty65|ePG^@Ee*o{CfYA2i!VVI|3l4qa6LSd0q;hbff?=%i9SpCl{Xw-+}HjbWmm+X(njW?(Y!h*NNkrTw&? z6Xv?P2Ma{?i$=~i@76afbabM510s#6i~srDQ~HD{J~VphgT;gKAbomVpE+6XjEQ}| zZwLPxMUe#ik7Z3hS?k|?5-1*y;H`^QDd~z9sRrwwPcDX982S^zt!Xw*;fkOTb}fDa zdy=xkHDvBAdhKO8{<268uwcLRW)dIK!?EZ-dheb=JUUOBBFfmw9ingAStoZqx4JvKJ#J8x|2 z0u7_`TxrRz$S~4H}|#~3`C2{lyCtiPyZ03k$Y=) z$Cqwl;yleHjmNAtO@-X*39haNBB|}C0l8iuKP@-Zvov&-SN=C41>Mbx<3ONF{AX+C zW4?dm!M;2omw@yU|I?GfQDna#CCuI=F?+JL1wL58y#2X{_qk^f0Arm7w^ zy775gLS5kBL@W1ez$#YJ4Y?~^d}l-Kva1A$)ME!rUuYv9k!ywY27{47ijzgK09E~) zNtF*JMJIvk-=TT|h(NQoS0_1sT7dfSIcj_2|~pA8HcY3^_- z`&RgV>s5titqd+^==_Cf2pk0U;G5TS5wb~r25f_xrSX}#UnY{z?9OzcP`TkqZm_Tl zUDI?J0~c2A#S59!Ua&L`9YpEj&^R!ga9GDc`YC=4{J==uf8{@Rbx#pqut}FtVVaK^ zfseZoZ()9R)MOy@))mOYC6xtYH*hj|!K7v~PrMf!0VSqPhNY|fZ3x_~6`%%FQ2tlS z*VMwDPV}11X_d~>*Yih+(@=Wd<{fKz?qospXNZ%}Kl&C<9W#P4m`Q%d1+ImXO5!xX zfBY6j5$EW3*o?YHWN@e<&|lRN>?T@UYe|Yguz<4`l8K8NGuv|K^=DJmblN(y8^f)f z{;OfRSxil-5GSut!A6cLNsP(8@6f2T$GIQBtx|Q7EFKT#eCXWDslaQRoM-jrQwMQP zs*VW3XWxyT%O8PV%7$hyck=vqWWRIn*cJ@@>YvwLoVdqTbpOA^D&d?>&8y9P-yDoowcRV;aFw)8LS z3dt@~`2N9O5q@_2B@^}{BQ3^2@hG4VMPO~v9ZC;eKhG=|%rOW}OhTxKx1{ajF>==B8Q!aV?+%f%cJ-hC+&ah3UVF{l4Ht14 zj1?WX(XH$~=yF{3wzPP-Tbf+_=;}Hgy)6%gi{qZfzNEoR=$v%yPZh)VdrcswpUzUX z(FN9tA&T%}S;&W07!ph-ea|N0a(JT0yI(uG9 zv*rM$V18k-(kviA-2OeB7Jd(%1LC!AP<%D150r`IcLn4_iw~6NRKJs>PZ5f7D%d38 zgQXRKqA#8G{Ld=drCt=Gdl1^Jh4rV&Zlnd2$k^h_wxa#8;>Hblo(KreL725Xf6I_8 z`*{Z5N-)V?a70R#RL_n>*5W+PpzF_22*9=tdlod~!CRvR{17 zG6OSJeH)$$zWVy-_Mzo)*tY-S?BGnt2AJ!Z=$yZY#nqu)G~J9@w1j2D2|DykFD4zu z`{vOdTZskJ$L?oE$=BQDa6kO3OCP)f`9LMF$l^~{T6lq8do!VnSm2V7^J{A zJaqWGpm%`DgFTP|31Y|$Lv`JK@0pG^U0U^QU>aze1lui)IKh6GJmW~p~`)NW} z=61gB;8ofW&nzN5up%*R!)XS+u3PfYSo;6}4>06#&VEzhsFp3BL7^C~NLJ1Ij`ccI zG<5Ifm~dqzj7WuV`ySp5&iFgLKfNh7euuzocKbUAoPN)210-c!C~SjM!zX50o0hfH zl9Gxz0)wI2@vGj;ys!VP;$G3W$q|i<5xI=Hj^^;oF{XsOSfn)Yy>Ii+wc~GDu{Tmz zRjAlzq2lUvAgv#xMncW13tOm{gWZ95vMy{541B(IS>&uW**?*Oy;mXoOT; z3q5~rO#p!ZnJ3SPxTZk&G@Z5xPFq%=-cxI3hcIus_iHD{=%QRFT3= z3$3H5pc}j4-#B0+*6IO{h3nVw4fHjA@L^0WX$h&LX5}stYpQ~-#P6#kf=_jctC(n% z73n|H#x!W6ELuEzCrs0SQ`bge7Jku$?l;P{?L)T;si8piNG95DBT|h`JAtpuSen-2E}X(2wfg(E5gD~0Y%Rb>Ek|R1Ma6u03iSQ z=Gq2)DSDZ7!L8h-PHy3lae&&JnJ{vT`^g%nlf;vwd8^&&WpgKoko#)_C?);@`(AXe zOW~rmz|+*}^|E}>l_G^*JWY13{rbz_4yw3%#Y)y0#5{_*$ts!i2$W7qWWCZ_uEC7X z1TSI#)$8!a6f{hs_dF(&zhtjVcgLJ!h2h0@C|`5QtdsTuj0Ei*-rq%gr|~7``uDnZhJ_If07x4F)=VAr^7M1Z>$Zr(a#F)M7>ric z$QAdhv(@AzZ0dSeoq6Fxa5)GtX)3Lhfv zM6ObRQek2S*Xbjt(hJ!_WT?~!{*5i?^U)=-pR6bM5{?S;+3zRQpPE=?bJOEAO61Eb zbs8wOw?n53+HEL<-AcvPwArXN3t4tBOA5=76_%Iz0+#-9!h>TK=du~bC!`0-`L1-o zpY~KWrCIj!&ev*vT>WWNr=dUx8mUI=?ASBxvb53#>(V3K&W5|g%@TJx6fXZJeK`Aw zAf9J4ocjmB(qCiPQ)DO~cv*weky*FeX&C7p`~QIw3D$LE7lr%~oiABIG_6+@lM zR%ZR*mlF2HKp%=?aDmcsq##r5-hlq$pmF}lh)L&y-w>QcB3_=(e>l_ z$>MX$WJ{$%)mzE}h#~m(XgL#|ga}*~UR5?bj-YZ#a$^ZBzgYv^V*$6P!|kdc_dG>KI{IlC>#Hb;OgiGg0bxR`VX_^v>4;3KETI`` z=dwG%=WB5B<4#yn*}rz2kSxcxq9%vv#HM3y`zM#k_(?37b)4zMxl0k4ff7a?Lv(!8 zblPDOIHfbR+2^p$IGl(#S=^Xq#nsGjeoy;@>6Ut(JgjZ%Mo3DMTcJ5ph7&}FN3_>7 z+w-?I`65rFlg@i5d>j~-9N*YE#Pi2~RcLh{6iIkI! zchZ{Eu)YR#2QhpE9tP?x_bqjd zG%%g&_0nASsNoClxH39C2I2wCbZyuBU_?xDwL{XCKa$4OP+=RK<;O}9Ayag1DlE_T zC>l~GEG|ufDOM-Y3%8i&zIy_R#wP*g8`=_&}WB^{9=v+@D)@5p}Bws<9ya4O5 zDN=hkZR4VWA>W#suE4PeFVVW=zs$~$r>2lNe1wf`*va=XAMP1u(8a>*ymz!Z_?nlt zhK_ze0iFmi2mYhMb;Lqr`7J8!biy{Bsph1+^X*U<^mraCau`1`&CZDe&oN6+PmsH* z(a*`jyvoyoVw10_ah_O)JY#ee=$UfZ{8R^Bi%%{OL|xqF8LAQJQE=(b!tiB#Xm%Z)+W;qm%!N;=Y;R#m%$d2k?#sGDGs7ucNgz2 zoELxTDO9@SQK(pQRe`M_gQvnMa?;>x z#3~tJw2C6T&F3a<>m){n^|ivqBZGDs#n-y!-YmB{HH;8zj&} zvMgpXTk0hcway!lD(5FTW~({V+2d|9MZuyaKRyKBoq8?6DSM+GD)b@8%XgkGh+=%RJ41$GIc`YggmECXf9LSOr<#8*|o#Mn-#I z(1(_49RCPPof(9N%7??X&gi+}9*;p$-`$!AO_J9FdvI~y(kycV^Pj`o4Q;PcJEszV zP`lq%zuuBoBM_ie($pCK$kQQBfyJBXjv1Z4fuVJxk!~af+>r-K*A-UCmgvwEp!3vW zU7NBQFr#on+}Ngi z{VQ9|AV8t{ryYaNH%q|tk?;3g7QSaU8!sC`t%ZegiJnKcQlW88YkOV#ZbNGt??!s% zK^ngs*_l z1^&G3N%6F5Ntx9rD+-c%I=7DrmH2?N%bJ*~^2$_-FndQ0_;bKguHBP_) zyI2Cb(=te*ZQw85u%Lqs!}XY`V(v)#lcv10Hk%el4HJlojZpQ(hn&896J?A+GJ48$ z@OLlf(ROzBDub234hrgg5Rsnwi1AORKYBYx&NL*H<1)BpFT17RoB2~U4!no^D;9u*Z57S}p2#9&#px2TMPvD64WU`=5fCpu{OSPD=1zPmi<0x&l<`qV<$>Zs$` z73VF4nQb?P?e_(r3St?So zt)2P*@b#?Q{}W5nmtWaBD>8P6J-)a@b`#cnPut06&Rfqy@~y1vzjdH01-;$r^e~Dq zE**8f(|TXE|!bPE`o6@Q3fF_FL$!i!&Wu+UGE=z_kiz*-85oP zj>avQh$p+lA34yvv}q0*)-U49jTnNRjO?ibVbvV-Aa3f@zSP0nz2lMKQUUK>B?g~0 z1_F;CfGv#;H)Mra70Jrp3c+x`y}Uo$W64D_FSNny+j0;WfyJX+58?POZUsclAZ_cr zJOzekG1$l6BAMpe4ily~%!qr=ybIFmB4#@v*3h8hol*H#F`pQiz-TU$XvTHHboOuv zx;xl7zvfOmB_yGh(i0GM+G7&A*{>T-HPFvkaSjVM)%x6UZsD7Zpy=vvX5U6r<_c~Z> zsor`c3MO?A8QmrVw>3qKN5|+Jo=c^s(n4(WkN;ZEj?E$B|J+CK3g5A-wkJpuKkchn zvg7<^-xosJ8!ZawmKD*4s9;Ntid&lb`twCE`y?p2y227U`(-G8I^S z-@^ChY*`BOw^Q~pJF5pf{z!ruV@RdBK>>^CbEhNfwJEVKNTql;uxW5{bGUWVNEXN$ zbg-}W8TRN+uV;5V7i101Cmx#)w>*mNBURxsC+-N;zx|cxV8$4$LK9}BFu+1FY~OM$ zDma4&7Gk|a1!qza7;Iftk=E{HchfRMDD=@j8a?j&FWLT)Tlq2z;HW?5H$jpaSAPwb zGiafbT#l@+&?#Fs6j(7>ap@^)_Fg@{tLCAQddgD`I=nbqrT@F2J8OaGvB3WEfX{D? zAJ8*+!reN1D_FZmXi_bx#-)#4nMOg@nqzqcZ-nQ=5MR4rtZ-edNk$^~Wx;PO-ii}* zY-M`iNj-g&@1I_IWG{mmlvMZNGr<+^TPUQq^*4?e%5-792iS4#*MUe4xUerbC(E*@ zhFLGgY`uI;KlRO{KIBOHm{?dhLAN^#As7R%75VSCK!pWFWe&tTvk#GzXtWaU$OxHW z5={?#yqk!}X7(+>?ZKR3w!q>y<9}Jzh_QxV`*)8*p!+3At(NruGI4OAv0TBYg2|?c zWXhEbd!wy{)rF$~8T`Mp!PYqHTBMO8>bHT~rk!TY9%Lq;uCTneo6|7k&uf3NPgr=1 zq+9X`%8Pr+xrF%Rkr+|y|2i0c&_B!|M=MT3pvjtmQXcAGZ~5OKgt7 zPh#nQh7g8|N60kA5c8yBYolfDeX7X6AoB?Qn=3aTn=qvjLj^7SfK5Zz+ADZ_#SbU# zomTbOqzXLwyEk~M*smx{p3klfpflt2qwY?Y?jN^(KH8Ei+6d-yhj2b??+)oCO^+Y( z+bJ;`K2ROiwhDz8RbU%fuoWmQ!xp@eflISkxjkG5Yk|-Z(KvC|xDb_vX`x5!VaoCn zXr!AtQGPfl0w}L%OMm-Gnv6mEtK>tupu7lJFe7QA{JMK@=zE6mKWHyEk~8hJMpe)s zYI6Bgt@hbbn7#HM(C8>tUuh+lo*4cEcH8hqrrL>?+F6z@j6;(e{RwJe)>Wxt&Khf7 zvHHDNam-|RgGhn}Rl+f~vZi#>35Te*_U*COV+-KW+vpMoZGM1+KyWV}(0&SVbbk?XN+@s*f|A2_Th7ib)_ z{)$3K-H?4}ZLdpza!Iik^fm?m6t$_zzTn|jV_kE8HQCyAfYBEaQGgV#GVNJGcO~s1 zvu3BG1~7qyVQ<0PCjSmQo3(S*pK26aN9I~nxB%LgR6)@YG*oqa+#N2A0KWc<{LynX z%KEzdwB^|8{&@7P+)!UiZP@PP#77#(3ISVzygd1fzt0Ism#lh%OtG4+PN8@sLpct9 zzCebEgsGGm)Jk;5OE*x0AeAn$i}-aIoMh8Ge zAnS-q5OSa%CylAgv)CvGyW4}^_wLM3V1)bcx0&bf0Of?Os$lbr)!#xme2b1Jj3>j- zuTQ|w!@S|nDg(X?>XyUSY4}F4MFMc>koQgBafk>p!NPI^V)=Z^d!7r#vM#ywV#2F? zcSewQ>E!xB3TsYm9B{mkPImE+k%|4}FfNCXuMxWLkR7|ei4EJi?!av9)D^d!XPv0q z2x8pyOD)=~x~*YEZboHi>Ndl`qJ&u)a$F$KosIL!Bf_eiO=J_g3tS%da^+Tcd7s<) z>%Nw!>Hg*NMh~N8&rNKry z7~~@YG5al9FY^Ll$|JQbgA-3(*}&443_|e`^WbK{v%cWnRy^JVCI)SAt$!cU_dewO z0DhFLZDU`V#SLivuKJ2e-ndy;pI#qfG@6NHrVf0ps<)L3R8J%{i|_P%dzmq))lj$_ zU&@<1-tKhS59gAi%9b^&UrJK-gnZ09OY58NetuhTXMz^^VlGyp3+IHS2H1IY4BC_j zr`DdSjBUoXAV-7p;_F;z5_5kxuzijI)_$sUDf2YOLJx$c@+&YR;iM}Mprx%Nyy`$p z<3OB-Xa0H!@Gb>rTi9?hwEI~;sy83OezLmc^m5op(@JY0{CHB^ia1u= zh9m*CSjad2>ie{Fw9|eILdGQa7X9DIZtOeUfYR@*zUmlY&5Y1eKL6!^0p}6=s}GH< zR7vgY1EMj6eQgjg?{I}Z`U(<8q z1Y*p|lM{V2GQtc6-7l~KPyG$wPe5r2V7v*_Yy5nOJ0b{~cK-lPrd;8rsE$*Rit1l! z>DT(lyNA=u*SeRJI}n%D@69CaUZeQER(}d~=h3!WwL}kz^XhgGM7JE?LFSO$&=N+I z8nwB+#RNeWfz6{k`L687*UPC8ZFh|CLHCn^ma3LwD5kbAN767T(DBX2J*cXyhaJCA zC}JFQ8|dYo`y2cAzlVi_tulwcp>cI8;gI2iK*;0PE3@hq^;4CZ=vF zBuC_Y_F#rie1&RFE0_*2kVnWK%{%=5H@)vOM8qGLZDOC-aot%za2t6hoQXGr38{=F zB-|Ak7?I`a86K%vL(3DUB-cmHY{0$_tBb?thRjA+>Rq4#now+NXiQ5fF!qAcv8Cy~u(@rAUlOd@_eX0D=9nwUr0NtRL>#$bS#ls>7@g z-@>X~$#s%2)<1N(I}yhsCLWX&kB3LKJ=jv{^DssQ|8#i&gU+l~2{XFF-ZfbNQ9f|m zM#-y}a#KxPVn_ERvkJ_44Yd!^GaX?@pCOm_Eg7~ImNp?@N$qifvZ7*(X5JIz^J1Dp z_)wAwSaNa_C27;Xjz`E0iQW^n3~QUJCJr{>xZ}#5izB9SX+@s!>a6o?GQMv|!1Lqe z{21ze2lwKtRdU~#fVb99^L-V5)fuhWCf%O}?J~EDE?s^Fbst5fKiI(&fe>9otam>~ zDB1Q&F7VA;p-J79f95>itK6BUeK~vbpdyY3XPY@?EBgm)gJl&2o@*z^Rw+g-Ub+uR z(~mO!D$@v-`g!uy;^{k+%;O;*l`Ht=K7W2r1bzE>_*cs$(If2`b9`+wX7OTLDK4l7 z`wo3G3<(C<1lQ54yH2XLtQM^pISs`%jf=!uU=_CvO2awH0+uvUPuG1Xd+J&}Y&gc2 zjoOxLxt-Ie>e1%>#W0|Hj9plvuZ|$o~SBM8xKBB}=6F=Y#$~7zaP4`t!61 zm`>}XbV7AB^xc~Vn6d@FTqm`kn_9NFBOzSI?5fX}R~OrM3_D)^2P5*#=0o?x0q-BT z12xZ$>{~UN&DedX>GSb1Vc#u7erGwpn~ao+Q`!r7j=At=eLcFh>&qL&|du;0ub;XT;qZb7dZF{kF@DW7CbQ$h)S&jGw=AHCbBw{@CUIoseMOf96OSUdb#k@IpeIsOT}IkS3W%Fbm% zrQ-95!5b|Td0m%S3v|hio2X2Hj^-gcu;z@86C)6CqgsQ&g*p87lEK5gjCo(oj%_@1 zAqIdv!nf#+cK(k1J+Tfq|4Plg` zA;n6)XiB#>DKyEG{M%(MpJ6n$2bV-@eC#V58E~_?@O`NY^wv?1Bsb_5y6fj#aq#!F zac%>YTw508zSnOP!hkfp2V#JDbP&>Amm`SP6y%WF9t#q|w-e2@Zf6qk{kU0Qbl7c-w;tebTI&0*=i@!+ zn;1RR#MGNN!BWQttl)d1=cVuastEWF1y+L@@C7bv;YzFWtXAe*-HgakhW6^{Q$0Zx z1@p6nH2J3d)5HD)U5fKv8_HI~CwceY9=tp6Wr73&r5(qgfLblicvm`}#FazY)Sh^(8kf9c}sj_TpsOj(+!7foJv3*Od<$-HerjXaomZKr} zd&@C0plS;&kco!u6$?@>+>~Z(`_$FD`PdQzUiDT9Zjevaz zd_8D>d)MbK){OjeUk(lXDgk_je1955!-n*SVMZ&gAc}Ay5-Bs2XfI4uKqs%{Uuu(? zau2&^BK7I0nXTB+&;8z)i*Jh2Q+D0g5%;gM6@)=q;;dHt@1*B$$0G9ZW@#{02-#Lb zCldD6-*)Q{VgZBu(t-in9si7tcrC*or zySB{(v=75<0AqOSwY7aa^nNOgQzJE<;-rz0k3((6B`=oOo_Yg;?ad;w@TBqLb)ljN zzLlF&dmen4u?r?+Etl|fa6tH%)>U|CyY8o>e`Ri0X_lA7LZKQXHV}AkVv?}3(`9j? z(2WV0mLkh)h~C?_V%2tx17Tn({&SF`P$ETxo9z1y>JQZ+D=+5mgo=s4i+47{Gi`AY z9fe<3)}DbEj_lsN<+M7)zYg&U!QyU(Txh!<>9OXFCP}E8YG82s{+W~^^zsOV4qaH{ z&rD>Y_Tvl5QM00V08bx)=l{k`d&I@m1nUcW;fb@;gub??_-gbC@q9TA>3xtIn>Itk zcQ1r@I*{JCsc(hFb7@nezL6VFS9|Djeb^9Puxij2Oe1dN$%AMx)IwV1o&~mhXY?Gt zmAuCURbF2NIYH0RWBe$;l-R~j0F<}Q)h5by^q!5679eOxER3`o~_ut6^xIL$x?LgSw~AE%z*O4u=oU(GIW z)jyIIR}$(SCXe6+$@E2FEWBD~V}RZ!P08|0RP$@;dfmHA!qeQ-2ih5VwCRM|DZzQZ zWmz(~1&puQ%FJMhL~>XYCLUiFN)^ zWnc~15z^49i+aU?Pf~3n5n5^%N5JmU&fd=k&d!#|KK-$%-bdVujs?Ak`YHs^h51cb|ZSp zEC2Ot@nWp3C@H|}bNPMJ0OTsvh|FBl(09T-gxqh2o+jG=fSxdOdSl!J<7j)7qM@C&S9)TcQ70k>BTW7wE&p($^dHQp7y zQ2#)?2spD^Rnuj&#imHBHd}=7t8iEElkghZ<*0y%Olj_DJ_1hV-*|PoUp;3_d9Rie{_-^;Iw91K$1%{eEjIQT!HI^*;Q;hh&4k@nKW=KEU^E`1t}H&TF7Y zhGicm=Q(Ecy_(iqBb;PqGk)?*dqdr&4H_QJ*8z$#qrNQrxWZ(FzIDKj{-wtIJ8 zf}6fIMO-$k2(~?X7x>y5{cbF;4L>YxceLE;(!4Pxdq$oHTv@PPEvTfzd#cAW6x5%g94> z4SFViP*^lbMQn<0lDm8xx;~vRuv5Jt$w6Tb_OV%nIcn?9^3;SeR)Sxh6lAx^(zu_p z`NVu*!e`yWVe@=UYx3x)D0N`Lb+`0CR#(Z!;w$_K89c>b7%R7pkBc#_5ir3>7 z(FZ3PBSX8cNCzgNibL66{fum!n*cV>r$*fIHmQdC=R{eCIFpBmAlko^;ZaAqJ^42(1k8c9h6_QHxAoM1DEEkzN87&c-LUhY3 zj>{wc@@!<~>>u5dc8EQA3JK!3^EdWJ9m2yerUxI=0AA;x-+j=YR{-#$TRRG@X?5Pa zo9_A_!tb-gYj!$Pu9q(@*}V6jJN`$TJBv`@6G=evryH+BI0;7)<;^{<`n0!EV=}|b zT?lkGxsZlJPr1xLKfs|CL!qCsFN(kW^u@P}S1+eC2Vv`PAbD{ql||+VmtUH39~k8o z<2igIanjVyLH2IR7j@4nN_aEyh9hd3xE9r>JlPlj{0QQIEGpE;sD#AO3e{=5NH!Xg z!3k7^MSJ3M?7kOD*E8U=gJscY>&VCm{~D{9`RoC_^e=oP^_K#34G5SiDcWVHAiu}n zR)(ixhJnGQb#cnwMcqJ;|JOmhA(z^v!x(fub=Q#I*?XJYN6lZ+J&c(KgNv2NdVbP9 zdrZ5e3y-9~*AZN5&j1f^Fn}fD=17?FiH#~tjz3RE)OVA{q`>*3H*Q?5)NQaxSVZt3 zb$jy7Tlx1NKCMr{J~xp;Eg`5h&aZ7I!PW<*z0m3N;+;jcVFs8}OGN_j{hFTJ{%`Q@ zlkrnND0zlYn54Q>KR-bp~)M^!BO#pT`SEf2}s>+L3hO`GLA@yi~T833lb-Wxj^5>RMi=<<1 za2(`z7v6`TaJ8;6;DVa#ZC(nPbcDW6b4a?;94D5cf-8WVq0lsOKWFi8J7i|zRr1=Z zEsATZUXf@*P^m+<(lK9Hjbw4IFP2{x+iu&2#Kz>SIg_W=j-$Mpx;kxRCMuzOw&4e{^*u;x)WSI=m$Y%)rVFPm~gUSDN^XG20$1n+iIlKUJ5T6gnR zxpOQSVzeOs$Hm*?WoB((MJUc}sI~>a*EF4(AEu?8Ut`8F)0~Gf_S0i%%R_4T+PT>8 zfsenEG>2(kjWGS%0f;RNHY7Qlb%^#G@pJ+1uUftUJwEpUmiktg&dpVd;_YMom*XA( z!=8@`&FpW$Wii#oLZHOgTvnbY$^d6Wr%!G-Z{y88u=euRHjK3-Fl%45Qa*0|h3_7V`Wm%rxI5FQf z+jaazXt40fWg7GTaPc|(EQYxrnU$?SY20!4t@z3sz<=Q*gWWhg`(hXFAI8Q){v^n* zMP~X=lIWLKMzz-V{RglDzU~^ncmA~>bR~{-B;fOFe$1+)@0$B#M`c4v0rES)r)H2D zB@(JAO--izY}o24XZO+)s#7}2G4ws8mJk2Jp^eb7LzN(VG;UW`z%leWi2~&lRi0X! zHmhsaTTPVNrv!WOPIcsp@t7YYcc`#6kr>7Mv*yf-1=GiuQYi+?2i~O2E+&iw1}&Ah z#l8d1;v^Q`w(RU}QUgc2a{kJ>x?44Ox7(1OxJ${9lE($){>uoL7;@$|KO)8VO~{wM zJzb6#lY9qelxoD^ST3Va?d7zSX*6(`nE?C-^s$(q54;y+V*2)6iUcR0FF!p;nnEtC zT54DG{FX!N(Ec>V#HmbS!3hq6hoOSE*87m4DRCAzv>7SJca51<%bLscnGi7$hB$(w z)+ar@}|yeZNX^U3ZzVa`xSUI;dFK z!I#G7C5N?-p_?%iU7dFFO6yvhZsFYJt1G_$5N1TVWOX&k*HRW4$lFw*~6Rf;380d#rx5e(Uf{ z*u_h57s5FE=~7FGN`yQDZ|(JG2@z6C$Uq!9_%g>#I&W-Q}(Vj>$mR(JVEhh>af|}&Z9UM63`Peyp{eobO6_dLn zXk2+NQYAN%Zlfj8ZUno0_oqDrTyNKN3~}*%oy|P1Rz=yD9rnF^0>>jk0ss+Y`p^gH z{3uoKO{O~(tT+9U1w9UqrTF2;c`oB($}~dQVxgFw_fKJOuyM-;K$)rMMo#2VzitkC zgoqLq4lUy#kLIrd&w0%sitx_T_wiO#O^#grdDJP#o*fCgs5WQ{#rVTzRT1>frR@$S z-Fmkpg2~<6XuC_ZQ#hnOTu@|D0WsEVcXL$|^jT$Hf~>cbj!gRB3tUV)FLPUEuWX6; z@Sob+u(`D_#Cy?ZbR4Ao6=V|=O2h&WN6$IFXFJ4KSDkRkn5eZ(ZtJ^QqTwr{U=vdu zOAU+1#lVUu^;12t`Mk>AeZfQKFTBfKA|3VDqwj#NSdOy$K=!yruvsC8B107s3D456 zRn}jWq*F=mcRx%trExYVVa+Ot)BJ2m@hoi0cB?!F(or7AD4&~3>bDfkh+PJZW`;kb z(y$Q~PIH4s1;*J6DQ>L9WZ|`w8vY-S&cPwChl}Ic zu4UVk-tAQ9y4gvNj0_v=SJmLuCeN;#WQaNR*h<>- z#wwZv{nH6#ErYw5bnmmJ!w+4pP@m_7O{3mg_MF2_DsfTz$%5SHwLjawJK4d;=V`)= z;q=vk8_G{d?!gUHmH8mY((p%a7-)m1syc21p$a~M5x>5J`9G1Y6s zw-Ou}oc(?uvtBIQ1OYBo$&M^%5r}jgjIjWxEE|c9_K`2p_{G@je5Nvi(D#1LEYv9v z@5C?De2B0I>n2UbPbeePv_%9S7mZDGwJdrxy-$K$+v!xpJD?5G8fUsjf*=4#m8hx6 zcI!~)2URA^-{c2;7iI}5%^$In2<^C0@!f2EFH5=Fj_)T6zfR=a$0}wIu(+(#PI`m= zbqX4!RVuKHR89*{_mMRRp~)eicfvR6hY41LwXq`H)EyoP1*mV_2lmnLd`ffb?>a*+ z#>G&*wKXKMtqIX=&O7GU{_wnZJc~+{*?3#-{4s3x@alJz%WME2HVY_Rr=5 zCsOkTTD#>Kl0%5gl}D!0eHPP!pwuKa*(EX(YBUZ42uz~+ z40|C!gSpk_0v}%7m{6;OQPR}mRBQ`1TqJZ|>+(MQKQqzBm|3g?7&M_egZfS@! z8G12d+fn9biH)LZ^w7>D4uZ4jjlGO>qWKaWbEKkVfOGJ>n<{?`X-tAhZ{jwYn_}v} zP)_<7p_S9UUKHrNwBm@EPnTo49V4zSdHJlYh&qgZ^Bo+v96+BFRp~QizY94aY~~ld zmiIh%VCVDfX=LtE9bR-BA3wr@Nu6}Bi$8YgnOVv`KeseS_TuD@bMojbQs_hL;N`wu z+R%0iyk7tHx1~vcW$NBSv9}J5!f{!QXNY?A{A4X` zg7Bm9xTLjEWgAv45|$Q{o=ubzetP)V|F>Fc-h73|u#WbpoV-I>ABDQ{x6~<-+JluS z?`m}cHS)Q&b?el|p)b*^_oj-SO!MCvqpzERw*lc~Eo2h~?yL^I8kw zTTxNmw!F_}i z8p(Eqpa}DK6{KBRc392n3D*e+*mP^ zu9^&P4}k@afzfJ|!XbM3MH7M!7l^9CBCb6!$dUPNow|3-SHMj~zOOSjihU7%sWurQ zWZv$U7}`RIvMFG0+jl@6b#?;wuit+bifb8R88OBh9F`(=pd<{P(WN4pQd2rJa?X4v2r4+0pvDgS)%wDV ziz|*CrrULj!o-DXJs5$<$)Nvbc(y4A z=r$n<_NQa944-BH_iYKlP@qmEKIwF=ZQtLoOeB02)RHBqn%zHn1)jHaIR&#l6}}xJ zP3p{Hx-KSYoJxW*2<8$k;@liKv}2Hk zA5md=N-$0Jn*Sm*0Z13Z$jv0Um@9BSsAX5640(hSPU$Hp`PA8fFF-ak9x$t`r#dq| zhONoUDM(N2EIx!GcETl$ttNlW@Cbey$)c=MK^;XO141YMXUR=O}JHPYh`qkPgUzx-lZOPO(o*KeySHwg<{&uz#P zyj{c$5X52oMxXhcL*z8A=_Q<^g<+Q%G*D z^jw)aIa3NwM;l>voM7^}ucz(kFRY$cGY!6!$np4BlD0S|MzAom7i02sUBsB`#0JYtqs#Uv9guzX(Q9g;}~&e zXds@P`5Z!-Gz{PvSM!LOU$8^1JLOS6rA4t8>Q7Z^4W^bSTP}-k8R9)?TOef+^Eqz+AdjVZlFQJ^DbO0@s zs<~}w_bTBW&NW;T91>!rI#ooEjyx&)j9mywBG28kn%*}D~T;4 z)~+^(J9^qqpEvpEUj6yBSZ6m;-pU&YXYM|do}~pOczc9Hg0>;S4ooaz9b&Z^p~-Q` zK!smiX6RO8@gw_X|9)CxNM=rF$XH%_r4+nf^dBqvIQ`?YW-P9g!=p!PVs&X!0!$=_l@gLtN1S=LllUjI*Y?> z#wgtVGzmMMi+%PZ*x*`Zc!n1waXW5}-i%}3j$mQ&p%u}gY^sGL>Op+W%leHTDj?$*C)Yh4ry*fnoYg0H55<*#^Ok(&^kkymxosuz{*i3DiR8pgmLCRpmdiMi=OQo2GarL~OAbuuOdtMXoI8!G z99n`8iDiiVij)>FMuk~c^!KuyA&|Wt|8)4%L9?PzoG%xV%p+MM0A|vwSfhQNqgx#i zEFVG9Jy;2zN70me5GIMqthW1yS4U$ewLIUjFd~+yyvM#W8~$6A_mVcG|6V;Vaq~fe zUzZzhi>t<&T%D>p8jafo)D1&+UZ-|xV7jG;CeFZ0^`j)Z9pjY?X6SUmSWv~ntw0`) z-5-2+;g=FYZ(2coUX$0JG`osHTrv3Gi}E!e6U`0QT|~^D=6CgZeHKMz;UMJx`l=a; zk@bm^d*iM>QHB?^!mv}eVOBRnmKhfT5)%je0>{s2>wO2wDoVQ1cRJoeAH{UH%Bp;Q zG}^2ff2^P&GVC~^!c4-eT$IXZqWP;1yN&Q5f3U@Wa8vz!oKN~vs-a~DOv(s!J@4wF zu-iiOtM}-pjP#XGc&y*hml96d89R7?&wHLz2CVXu8&%rye=B+;htO;H)jaY9TTI48 zj15hdmxl#vm|x;^4QNcfBRRbtsMM_jC<8^zlUZt9y@y4zzw={qSS82oZ9V*?OEoF4 zO8|cpLt``Moz0j!d)zL+bOPZKdN!=Cy1YKBqJ-~_Jsl&6d*rHg+55cScns3Qh?MxF z71eTeViMxo>BQ?ZnTg+eMWNbs)9;U$Om_vM<@*^K3hBUGb#{n?Zd~({QZJtTN;Z9R zk>VUCfjCw5i1yPQ;uKxWAhrA?Nsa^Yagzw?4gAV{hzboAA@0iWgqwIJekI65NA#Gv@qV!D>EboQ~6-gaeL*1>7!vU8~&w zt2=M+d!9yR{(QW=J#CShQ|0wQG+yK>FxriZnxB{xf6-f+g$zoOA~iAR(zbKm?Wn+l zRakV^LUmMh)ztw0Y;-^9fHCGD4Q6WJI>xLgJ=)2nF(j| z`5zfFT)(b8FG6oHcybk1Zpfz|K{QwU(U7jSCOvi$r}{Bc8%Y~AuGZ=zq`WD%^%aXV zR4At*p1%;ag3Cv27Ljr}I~!eZyv#fLz5)N}#2FS8EhV245w*Vz(tRtzJR_&&=|X25 z(s#{g!=YD<@D#tEb+%=>RmoFpI(-8l){Oj}UmApZJgx~yEz?_`1U&P@I*AgHFiw03 z6ErNa*mEkPcD;MxN4ZoNYh2GTp=r4lZhKsx4wPq!P6J_mq$8|w65pSI+DEXqy{pR$ z=^iV6r7(&d<9Io*A!rvQR7{JoW?(V+?h}L+6ct@UnUk|pRqa}6a&l6OYUyBvi5szA zi*;`m6-BfIjpDIYTmP4q9J-K-NNROSzPaMiJGgKk+Gb0Od8v0;tr|&F^K#z2i@00^ zOQ%%^*T!j#N>=9p!Il5g&yi|Rh&vKP$7s!du<)mO4MI$_$uL5JAZ~a~leau)x+CjM zN;)DEg5$VJ^uN1`oQMEd7mJ-uW%kEJ;dr{mscb)DO5q(aGkK{~1{yt0#Z;9OV#!60 zQPU(DG^nGiC%lyI$q@Yj2lop+jYIF_*URglj17cA;JUnSbEd1ZS<|NzoEniwH4s~x zB@h`-248Van6m2(62|mYuV?vg;i0ttxC29O&(qRr|Jy8w)jw=DHq3j((Eit(1*1N< z%M~vx?V;XubrKwEErB75ic??1RrgpV|AHu;k&vjYf%~}0EJFj;buP(MGS{QJyt`J& z*68o_cVNklZWSe5q2EhBh`(679hh^-EoD0V$usu)v&&<$$i}A!Uq%#F$-xzE-zK*_ zqm1F$l|QR7aUE|j*>(|dLCz?sVd|b6uXyMxsvx@{vz>HDBd!9XvcONE$t}`PZkSQC z?S_+ABD0(yW52ISo&^$Jx5I^fZ@2v-JkkQGK4qsX0ro_Va^5~nD;ZPAAt(M?^f8+k z>?aNBLV9UjbB|58mEWGWMgu?JYJkFDZ_h%cH|Ttac$7FR!JSI)th$n*rW%{7t%rT; zM|uZ{Z@B}_@LX(A_k4r~YeF^@qIiyw_hC%FGVxzeL+c?5LSUf3*U2F;Jf1eNY!ZA! z|MJ05Da^iOv&-{sjdQJ|z7+HvT1hppiC#il}uyrBpC?`^M!`R>h>-LdSu#0kvyS&EP1h36OLa!dG6U$bfu1vB*p^ zZ{)@WeM>QIe!4{i$$cNe!di}AgIr{EkZDT|!7x2lV2a8uPM=1<6q=G-Mo?~A3rm-1 z{uu6lHuCw{uL=CT1uRRgQWpjo8IL%vn+4ir*(Yt~rBenfkHS9ZXEP*! za&rWu*)dKcv&p(u zW6j6ar&&p>$i4d)*o1QB53;>+~VM?Im7x+}2i%S!RZ zu#lT%d1Cs^*G!ELchNuRMC{fRey)STJ0AK!`6y13nCQ$RjKRYDX&9?Q2{qWpklzeJ zutcdxEtiUS+tOFGycqKkJ1I@aY{zUDeKP@Cjb)0W$V(rm6Ep-8nk(>#+O+hJBi=gd zu>@d`KG>%)?(1!o_Xk>#bI^&nkH32=-mc;l3*QcrNKCPMA++=R zOD|iKs)i^(5m!}>oJ0S7QoSJh){mV*wVnah{hfYvSWf6I&gSIO8beaE?%Ol1h#m#@ z&#nYh3CZq#ZW@`EAA#DbiKagPblEivf!G&YtJx!bm#ivQ40s~H)*--@yD9iS*O53L z>d4S^V?Eds4r-XXYJid}!&X={W_M+CzWn^%(h%tV$nq`l@CfxvL7`Bx;QP$f^d$_Q zIW_k;0t|O2Xix$dbi!iet`I}_SEz+qi@ml=-FG+AJtfzCD2`#qT1nrnKF>El(kqh9 z&VN%s0e?!26L?GcfbV7<#mRjw*Q$<|&s5F^6)p5AS9i}stR{-`8T}+IxKFA|#=b=0 zT;z7A^Aiw%^?1;R7(XNV)ALpr=>HZP=yAJsBcGUZ9=89&Re*z?j4j%3>m}%&P6^f= zWb;+^fLAfuPm?N8ceU~~@O+S_cJzVkW?oB4@9#-R027xozrv|@=is2aUvEnr0v-X@KU=ordf z5GPJK?6F=>c-89fY}WXSU4@O2>32{}4Do=ou42btN*kP8s($=`YR}uFbml*J3~gbh zzjIoqtL#UC#1m5S?7}tC=9pNpdqYV1_|akFzm5|;xW6Wpka`|IG(gFKAE{vdsH(6{ zc;)H_l-XGzCLFEM76VnagH|45fD!xMMeAiEb3kgW#IS~8G}x4FRW8u&T;047RtECP z3?ZSFP2gjSe7A;F&acn#cz@{EBYt^OfaJzj$J^y+&&ueLxnZ{T9K*!=9r*ZFkY?CP>3p6T4!#XKl8Z%U!_av*NVRre=LGitOQCHu3z8&h+K2m&0Y^ zHCBW3DLdtmE5y$E0avv(eQT-$`>8Jo-`J@&`!|TBvl(mU8uEJWCcapZ*uu>*M*5ZB zx>F!GHs|_hg7b!dhSWkC#6Ok>T-JH1{0-oEl&V`!o(F9#EyxMSk5ZqU^)?ml4>n%K z=NNJ!jmrsaVNv;rz_jl)Z`{*X!Vu~4dT2LV0T=o*c%WvPr1u=A?d%-56WY-wjS-tK zkdjBgeXrT)L$J_R`Zonu0YyIuP!4e+%33-@0zG*b_`3l_3T+Im1k=H@q>5L=do&A7 z6Kfi)EeBHF7Nr$|+mK>p@afR$W(Lp9V>@`RYm^Bw$%*p&jBk7K!+P7S6;5tC&QAZ%yBlL{Q5;wRFt@XN?RC98EA>tw9A0R zHLXo3D3R1vC4ifU>|iuFnW%@Fbv=6ysAv%^5ED=ZI+|Qo0_oK;l`S64B^~;nblQ@4 zDGAqSkj6)r(XSU5XSPn1=uX^naW_0tTUsXhVZ4{7*eGCFH}ya^m0NtsIoiD#?LY5R z53a#ugNNKCeXT|iQK0P+b-KcJO@uwaUe@AXbK(Hw#>bQZ@83qap!kr=_hrWHKYz}2 zpZ^XmfDPYK?#OYk)4k>;NCZlsU;3Ug`YqcA5~{2kqv5RT>v4ppVK@HOPMxGaxF(}Q zSMxBynA9C#LJzZiQAZVzrXfG#0FF5SO1JFZoIT~!iWLBX1&Q$Fd$wgw^G5%zhc5|8 zIP4g4^mT4S&$BrZ?aT^jOOg%DOw;1`tXJL?qDMo7*##zCr4;>kLdR>pkb@5KH&0FW zU}JxOr@!TP;%0MWsr;7gs&lfa%m-)rfWw`zAp?>nt!Y00<}f zAP|1fS6;ufm64^+ZuOQ*>Z42)MP^1~`~m|WPdD>-8*(F@qt(3tAhR*2&$Av{Xw*@c zKBotQ_bToX>VxGn03Hww_VB!t`6~5-^md_rNgAU!J+XB*(wC&h=*~lNzvM6% zq#CYe%^6RiOUA7ci4F8>jCl8pg9LVYwJM()Dm+P|Di>O_2G-6ge|8D47lC$nLGdGc zrVmIDSCqa^TJzo$3sY7X9uf|GRX9}aWLtg=(B%Ua6+6}OhOp>e*756NuV zMA+Qim(^5aYrQ_G$%g5#-8Zh233Ieg%=^wqDAxM>38?ZOk9dBn)ex zyi?PD0dIknVPeujeFG z@44T@&HSvYI6Hfv1F=S;jeHZ4A-Vq0x<@cYW;q?C6{PrM%qD;xo#V`+= z_BXGKjnY~Dqt=l*_Ir0@UtQUNq`(_SGV?xW4~BQJ>x-IJ_#GGHT#1#t_MD`1^r3mrhA?*HP&7R`voF&!#9)?PMF)-2MR6?bTitgKEZEix z(%|$0PNBi&^VNDuDq%7!BfYpqnxOp9nQcXvUQWbU`5_UF37L5tMs9K&y9Hfb6IZQx z*Vu!LfE_~%O^-44>~&4{sgpj3ESpe{GS{gD6QI6)0xOGUp&%LuR5Q(8eT3OyDZ5Ml zDQ@n&mYszT9-ajSda(R_al#Ri*d?ZJ{<05J($<*4Q>?((Dvi#N;8QnK%QYs>omdWq zuAQ+&!&7nBJk>&c*-xSD)X?;!g@N?t*2BI18@l9Oy=a`xK$NHNWO_(mW;_uJVU2E=*q zM2}K1K|4ExN305RJzKjhJ*=t0v>U-avzkuGtxwvMmf#QE%8!iGRK~tT7?(zCfCx{JHIjSiUqjE+J zal7;5V+n)4b4xV18FN+DPE6_56xqi`R`i3`&pbr@#ModMZD=~@lo;G10pA~M0B&HC z-iVEikm+M)wKv78rqgum99KVH-ncU=qPCAy4*E1TEo zk-$a-e@hm3)awZ&kGR`Z|0%DzE2_8Q!hJskzcVHa`jEMz$9PlI$i|TvFC&#nrTp!+ zEZ@AWlD^ku%KR9ho~f)t5S>*KpwIH#_br!OZ|KUo|Jd2j=-3;)DYl#1rRj`@P?>w1 zxRB4w%KyxsGqrBqU{5f#!+Y}z>amdPp?CmA=i9?(TS!UAF~z*&2r%#OwFZksi@SU2@g=j}wfgekjABllC&zZ&n`e_ZJ9WX6rH4-Bpd)s`ISeL2D zr>HBk`HuMhK;9+WQ0KB&nAgwN-18Gx=j{?&=c(vn5nz<`5yrM!B6Jp+TqUP5pG0OQ znB&z|Ran+{ce-TB{CjJazd$zpXahqSfJ~K)*Fx(X{nGY5lu_ZL%6a#)frkzM#3Ckm<>K z?j)j{VZ3c-?EWD3f{>c=^vg(g$9u^W>f?WyIxKF&K`Zq%Gk>oF761NjT>;DMr^3=^ z&d_900wOam+~$^nGwx_2RIbcbFqr7~u5Eu?SQ`c;d7qmB=^LAgW|hc0{^h@7O-PR~u)XvxJB74jLX4=d#8efQ%Ta ze4Eu8tk%g^`1%Jo*BhVf4qv)7@Td>(-hj))f~V%wXY>{szqV$$VJwbzzP8aSFsK3YOgez8E-OR8Fg&7=(0O9HX1XlFpvyUv9DcdZ0=z0VM$+j zPUNC`ipuX_1}I`F!1EgU64?V2&i>lTsnhLUWc3hc>BphZvbkbz zZI!3u*T$INuhoL3)+d{e(D33$V=;358|g9@Zkle%)|qm1v6Ul`!m3~#LBS)9{_NRR z3CGQvr}oTYS-J{?PF`{l2Mf9}68sg|nJDDFQ`*U4;91T0JePP1ip;g6>ug-np6z3t zedp2Ok2tS5C~zZ1V<}Z<8hqOMnHJZ+d7dvlb>jsTCSbL$Y4p0$BO7~b3Q-rjb~zzd zI-AUJ?4~;3_Zi8QYVVR8ph-z{0kkJN1GQ{P9OHb;ZtE2-od6WdFguxP(XSvio(u+4 z=-A@P-ckSCMv2nHX&Kyv;wY|Uf$owCD#IVjh#{QPp=Z(Y$Q;PMQp`upSZ>))YW-(> zK3fst2#Jsr*wc_wDqjqmy7h5@@zn`xUPv<1OLM{W3zMr|fHxqLT`A2LFje}J{p!AS zvg^7Z0y-yW4h}uamqkocKx3qbNQ-;G=qhLWWNtJU*^tKzq&R?9y6JkW>l9?LzwY-^c#2A9 zERfV^nGm^2WY>Cw`0UQT$KWs5iT(JhYTLOZ#0e(Y>>po$AQku_%HV=g@EqJra*5-h zf1)W?)_l?Q(4F!l*jj4~xmr!}G6zv}WYd$2*JX={O`?mr?@mjhX{uz z-q@AgOr=Dc0u${4yahgD50 zghCniWlrvXcW+0JI{9S{ScrxIN9`CWw_vshCCT(Rcg06_oKnj$@P9kO!JBZuXrO1X zG=X1#`-H<6+VMNpt`$sN0xgU*(_MSA-1mA$93@$ZYYCf$aoL{;D!CklE(Bc)$(dnn zl$PmvSMrS04!WlfT#e0_S4$7s|Aln5Fl49cN8j2I?RTBEkCze0VFF_XOk`|%*;~Bb zZA}hIO)a`|&ZKu8>hzD2gI??5nj@dj0i@eMclU2ExLUkJT|bmWVEtsaHxPDo&=HTY zM;|(eKd$qH1#YxF25{;Lw^)n#S!a!xpacs*TzCO>k6h}lnu8V-_2>a^94?DowVo8Zl^nLqnQOr=(|fjWJJY9Uc zIbol$nA^CWx>IM7no$}h^-l0>!yeCJAJcD^QpRBsEpS-p1PEbVwP|_HD-F}acj|BH z0fF3gAV?JzMVWj6G%Fjvum&v6gM?9_!E3k(Q+%V?jM8>2$VrRoT2A zHv^I5DDFlh?s2Q93M|t54v5LlG;|>NDYyW5b@z062L#-jRK#h>@5j$8tsBA}Uj_Z} zr&sDUBT0Mti-KycEO^KE(Nd0KQ2X4z&1D!L;ND-;^9OVkm3Fnm5bLpA4H< z05J&+E-M`+>iE%~`5LxL#bYsndkfLrRDIw>>k5xJVHs3QmCXXhHWP=2f)-Vm@FMzI zl?;S`f$VprDUjk^)_xM{*11k>tD`ot7LG%Y`$CDMZ0@E>%6d5URT&frP9IP)(%j}w ztxY6LNx-#cK!H;o`85r{Mc)uVBW{ zR0wxC?-ARO&o3)u=^5nnPq*Qt;x)G#g5&GBh0{9j7~wQh3nEZu#Kd_lx?ez7e$*6j z0@9`9c3I`M)?Qo3J|>;6Q<&h3tUWnu0`$im+Y8G>bdi+s>zNAUj#vT^cgeEBO^V$; z!G*wZi5gWl6#L_R;b`jDZ#O4{zL(HLiE1K5eNy)i6u-R*ASq*o`q;lQuOSSR$=7SN zP(@uxhxHN5usdt7`a~hiTCq=`xy~vwkQDrxf8O5z_BQ=BkcYsKUj!JtA+Fjj&aEj1uqBL#Xk#KLG23vvf|>ED>#Z<&Aa-{a|kW9NTsK(9FQ?i?Pm@arohA?F-|#q z#Efh(+E7l+Mrfw1kD@BnAJ;-I0`DLYgb{H)0kSc{T$!DEwtrHTB}}VM`xIcK$l^AB z2D$CZJip(`Wt!q+xImhkQvQy|fQMLIQPFG#GcgO;u|t590lC2eQ9863uIx!s<2I?( zsxkMz9ZvV*!In1NV6O9t*Eh!&&$(LSRpv?KOlG;osX=P5rm@o@Nx>b-PU?~cKaM4?Yu+wJI=~j zsAuJ4rB!b`@OowQIu3Zp!c#a@5zfenS1-k~!(8I@Qc{$WpZeqX4${T-Akwt(3$poz z*xETeXr{3p*x(`mxFZ*G?GNC6$4#2B6pNTl!;u$^{thSDqJcpXZLZE;_`F6{6*Wqy z2b_8du<*4h4|KG76uGdI7)nBb(llzk%ZdAj71=NaP|+DE!RP)-Jmua6;9zYMB#h=N z3?KMAT1}n1R*-lc?JWLop+pKY6~#W*=tB#!C_alIx>i}yh%7ntOk)@GJgGYqQDzqz zYjnks`%zEd5%(o^A94CaJ$9POMuUWPrYLoPlW`7VDS|QjlEoYuw-%QprwTK$6xG>3 z1xKhqfIL`ZLL9{$|QKT8=B<{J_IaKtvGZPw?rJs&F&bUFAM$+zK{lJtJ?LDmaD zhOz)+lrD9UVB%$g$Du8YrAv+ad&6Q~FjU?OfX5o}prBiDb9nK!SA@M*&h@aq%Z z)QL4^DEkT|k?F@jU~w36V89FnL*PNMR6F9DGA36~Vt~t zB#G3T1m5s6h19HEw+rMxwz#$fbVhNND?hqy;XIRR5VeQyOwZj=_OsaY>44KmvXymxRxSn25bzaD$WNy-LKw&&}fHgF2T*j50;zcgL`PD`p zK*wfXb)g4A^<8iF++Ws|?&F{h2Ti!<7n!)%2#*5x?{&(fM$kU{|| zk19PlY5wmYJl>jQ5)74sSh$(b6;{fhpLg*jhQ#=Rvp?1@CZzfoi5opcWa?8JIRLKZ zwypB-)%37Ih8SFp5sZ?bU#6DLU3vSfb5Uw$7>)&9g5ns~!o1lHYHV}DsyM?sNQvuR z$0+vC6^6j{QJXfbHuu4z0Rq-J`8mH#M1C$e-g;cDBKmX%-y>NO0t z@;H*Mm*3BFgfrE>gBeBC`Xrng;QQH_r~mnfc=(vK$JSPyIojS4vdG*M&PiJnUao0Y zNerwXiak+LW%{WuA1H~U*&AsL_?HIVkXx9?i@#co0bRSPE7yMMCy_q?v8%nOze{Uh z8~*&A|9x?1vN(2=8qC;(WvHJ)beo@TI&yo%I+Q$Ub2^+Wh9UXP_l^Pk@xE; ziBHd!Of5aV*gxlkJvkIoStcagEAYt2;9Q3V9W6f^_~9W*^+JTMb${(g@5{HWiIHYc zLdmUk1l#)n+qqBeVJviJtu6D)7(T$sqsOCdVoA+J9o~8hn->p`GD!;CkIrb7s4iAX zt1I6HwHGBnidCkspPy6b+EyP;6|TdAkwvL&!!BBeq>M~wM;iD`K!_~w+@xWfw#BMxDVBPLJn_QK@S<0yS`ts+TRxWx4! z!680#QCBM>DUnDnPTjQMF9ocOGiSfRaYQY{MuTuiTz}5=`hFnRFeL4D)t95)O1ed2 zN5y1;_#gZ);OcMkw(%Kp!NOgo5F)Le=Hi8nTZ)XOU3F+5E5rklrynt!S^A<7q_<8a z@K@a9bNHG#c0>`nWXBU5bXig|=(kQ|vLQW$#sXc6d+MSuF`**I4De!XzjH+Uc|&}u zp*lXyu$InqWX<$!*(4Jov3bfLE~bzPm|4bP=6dAh9*+_>#(3Z5RfQDYB(mgR6%r`!uw(Tlv+RVJdVlCzSdLGq;96{rvG45%fzc zg_6C?@g$FS)1#xuDa!L$F=O8=z=GMdS>-zc-rYC=MRyNvlEa!8%(R8rI>b>Te0$6e zhP>{~pN*`*ZGw`HZW?9JUN`5{6A#-6wvmIg3WL;8dV>P}Mh9$K$2diyfd9IWRbowJ zYJJ@&(2xLs@F}IygESHp!1ai1sNyO)8tG0%YVMAyT%s!(+4ic~2f8`Sp^GA~Snx-; zPv_u{55RbW9iV`5LTASZ`3mGBTDb8RYVtxp-<#h)xds;hL#m)WP+?hQY?7H#CAev@ z=gfFoq@A0)a`^>Wf#T(5cj>*}M#ykLJ?d%Y!SA!Git&*vJ%Jz?Yu0RSd;0 zG#iZfotID)~U5Rf6kb|#hIe{Z!V7kn*5~3Ot zY7B)R&c^FI-cGCKW9!wOr-#d18<>k$=od!3?|7ut)-FsdLj4%0vq!Pt?2c2ZWu9** zif&czI`t=0fqKZd<7|#Vzi&4?dSr!P?dfRn8A!vF3FRszM~=vouk0xHae#GIFv8{v zIi**zh|DfjRP)76FBp%BvBdB2;kK~X7m&03HgvCL2w6gZg8mS_zQaQt#oicEYr}04 z=L5>N=@F9Fh!%Wz9d+lktv*yZ3)S&huJ+;~GmcZT;Oh zpxtB2DYApij>J_qIcf&5C4QJ#Kc-J#3CTR2=d6<*x3FY&`DUdBl~tdRC(a?=`~gEp z%|9-qn!Lirka#Pb87q-Gs1I?J)dlQb$gn*JFbeh98n$cj{o!SnV7a-Jo{ z0cHYS#>3*eEu>E#P?35+?y~oV{azlLjDYK;n~n1R*sst5N73Y_J0uY%kM}Zsn>^h8 ztUN%zmdt9;GWrtJteKP>nhO&ElWy9={l#&x^ieEyWZzTZaot&;7zqz|{?X$91OS5x za&KNjGkw?f>Ve9mQo#97lOqKuSc+Q#w?N16mzib1pBt-@*~x1b(Y#pwXOBqfD8bweRO&Q=ToyedsQe9#d=ug>wLxEVQ=zW@13wSUl8H8_!kq z(dSH~Q_~teAXl&QkTAnUD5do==LZ!Nb0$IDb?99pspdMZaG{OkVq zxj^t4xTZzu&3|woUgz=*g~0~)oHuC^%3&TBH^)LG#=bvQ+yHl@RGZFEZMxMs&v9){ zDC#Hv@fQd@e!S-%D}R_7*-Zk0JWCU_c8wYs{C zdy@mIsVG7PrE?xO&~V8ZYC<{Vg^1|3%^-Ab+7VG*c~x83~5M?c18 zf*?9#1|1fJc7#-6;J>5%)g$fF%^VvLF+($V>w1vW?SJ4ypM*4Wtsgohzrm)=D$J)3 zVn16os)h1dpf*vY+dAv>23lS5G3U(f>QNH~{Qy3RhN|YKpQQa>z~y+DL!iR%a(wyq6FJgT=%=D7&s?E3FG|EW75*`Yx7USLWt{ywoWS&F!u7F?axLyKGttTEI zD(UL>R+sMpf<#EGXU~VB(w<*NDjUum)qB%rf^dl+7}kLpa9*Le>a&QR1JwD)2Bmn~ zgE_iOm=@zDHMWNUTLJ69wI`Lz8-UUK(52m>ibd=q@hu&pRPU@ND8*DZlefAbyrX%# z1v^2SuDdDW9ESJr>RTW0aV{x**K+G=Fgp%%6}V~vju;Bq|H8X z_2_Lfq>-*dXuy{ucSkuKs2qX9LxG|0m3&#tayoD%&6HD9d#2a*XhgaH-^EK{VD-O& zNU{b7F_z+5>jJbiD_J=OW}}Ej|<5#mO!0nO2d};zDW~1s^v+- z(kq$_=v3HE#xR@v`w&gWq_|zxlO>ctqf*?maGMQ8XA2+%Q7Tyo4KN zvbBcC=G0cBs(>n`Jy9J{;Q9~#Uen&`0>_D!p%s1j+nme@5EMDR1AU*Mstblq8~n{l z3L(Z3?NWvVbi{I?+tTJ|?y4)gY=zyvHRiqyc2fMj5A9V*pPNx&Y+!TJCouiy zEn#oLG-%y5cv`VmJu#XZQSpQc-*$#|MJq=IlwToT$^3$&j2Y$}Hf?3VZ1@{#MOoHX zB)Z?KN!KHzPcD2}zo}~G|920rAyG-7H%Epmd5o5XRD8st-O5*w;F<&|kOB*CLk6ln zv5dfPEu*jV`s(~OXAwNz&Fcj6mBKm?VgVN0m#vAgA+_Kw4ZVi|j6UJt#V8Q!U0z-A zSN_p7>MFeXMu~K`)Fn?aN7IsBO@60#Wu_OL0{V5lEf9D%ehl-vU3LG4Q#bUF6cAfF z#J7WHQu=@tT_AlbB3Y#A;Yq}eL`quHT#F}giw{G~jSRhN84b$U>5mxa`t9dT_xArt zI>+cbzPAm>Nn_h??4+@6+h$|iR%6>%sop^Yr|7D4>uGLx=1bL>E-*j9-&%Bm8PMWQ1UxZ}OkEiBLMC^uvf zy#38HJojFi?k1w!GR}&cWEmKvvn$-4OTBWLn+F!q+}X@Rt#J8MB#9I2Emo8(q&ZtD z5p4;|QNB4~k2uMQY6_r|zfrUQiyM;Tg`YL8{2X4{R{`{K(??EDKSCiM{3DN?H|P;W zzzHrm0nqE=HhXIvA6UL*mQAHO%0GqWR)ncZA|OZR>oyC=YorjQzA+L9E*49YmB;7z z4785;U!(hSTdVBD(RW-U3t%G2@3bDM$5gmU%9{|6{ z*ZbK(PGGWCO1!MeQd<)RuK>bCmZ*WwiOH_!W(T7{{;f$_J)!Ufm_}`E%yE(5$o6R$ zi0Sl{L)gQ|^ZDKYJ8(^Ut5oT?&3fp71FnT2{Iv60k}0+%GcXeoC^sm`t1RoFRE_f% z=kN@;`=+%kBg|c?!(eZ;NgmFyj59LU$^LO|V$|rIiPGem6!`91p92EWG8(6N<;lFi z7%gcBwuseX|Ds+Ku3=EWHPn`T@0gT%ldw(E7N%jDomL9Ht$RYq=R#FzJ+(H z%~RvykXL647rd|re_TB_b8KLFTsELF7GACgKBjh#GIO^7_W5b<`5<_JoQ}00JLaUW zc*y^FBO!PSK1jjuzdKq7P;754zzOV@DH5j&>x^SAJV~K^jah9W#au6r^8VovFTk`P z>HqM)rJBLVd)Kqkn+lnt(@Jeww0LZsf|fwG%QS)k+5#JsY*%P9irGoO1l;o9=0Z)v z{nvr4p4~+;mRez3$};>`PD4c#))hi8TQBZqYuv@&9raBYmt9*Y!wtTG)P7aS0wT2z zgaT7iYnYFHX<13!57xg!T^@z;Kh~G~RJ}JQg}H{i{9X|6s%!@Oht`WWn(kyQ;N|Sf zY%WFp8-d746#&zXa=NUy#5%v$3}mw#QYHV6L`xr9kRc|&O(oj7M>qo)z0lS=J@p9l zr|~E;quu06zxQr!<^9&ELxlxpVgzEkw3%}`K9}IwzpbR!9QTBBT!N55zm3+jzWV@E z`nTxbSlG+8wgzQh8?OWY$ccP7-w}EV7S2z6)7`|&vsP@!-30^?G%Y$KU9 z=j6Qk#V2=-C?0K4&|2eKU)Lh9`oJ1+@G{U2l@Y{ zG0HL8Z5c!9_TPaPzfLO$%z|H3DXXVe16{&!W@U#*{LqWwD=YjUSJx6-dR*Sb7j2!(nTYt|&DQpNi848PvQc7f?G-xrfcXTs}8{ z>ql}H|AA!1&jtP^Ap&hoax2}0b27S-y3r_gw-03r=tMDYT}daU?NQ+dRyj4$LrDkP zyYpH8!;?V!Qs(WJ+o*1L@9GnWEsv+pI{%+1;XuJ%U)LndaKKttjR9Y6u|Izlj?m*z zD-GtPGEDOcRHFwBT+)Pd)6j0s&p?$5}; zHJ_o$^@9Lv0Un_3idIFNDWY~ah+qAosJLp(%*D&+|33aPdz7|pT(cDD>jOnMQ6fre zR5;+c&UVk$C72$k6OMsbGC*6(!u>&b>z!@_t)1bJjccgS^>5&wO_jB9@Q3(OT3om5 z&FRx-m(NEh(H5SkIRIfuWgO2PH*19;HgqC+`c*k9v64g&QioBhAcReX(dygkDC@OW(^}$`B45K)*~Q5c=TV za3WWx#M|K{Fjf~87-heL^0fc{*PANKL41w7NQ*1nCzg1GK3ALy@>&VrP@ZnwbTO;R z)xk)c!G4JnO-s}H1P>6f)-nQnp7gz6&$n^}Sgy@wTrH!{d6YGe1-xZ3604n~jQgz8 zoUUOt9__KQOP7W(WRk2{W22O&(i zHt!-*uw}Ej$-iGYt#GO-9Yj(Y;ZK~>x3JIGH+lgmQBQ)nVvGfdAz5ixFZQ`7AT3_E z0W^Lu2McKfdyB_I_na6$=vC5?=0G-*=0wjx zzKO_Y*9;zVjXBEv($(AUGFz6)2B60F*XlihL7B#q% zAT}fxUkaobxBJ^Wr>?;&c40y{vRhL=bDA(H4EUr)ReYzKC%zv}NZ(h@^b0!C4{7f{ z78^s_E(Fu(_DKAvp9|g~SndI0LIOR&;flfW=j29>okqhAs;ofe)TrNMYM!p@q^FF9})pO5DSJx^fv7VSZO z|8?KIsc|Ux+*XrGdKq_r71v>X10U5MbLZfQ$;CVOF9VjF)={V1*NHJqv#*?!3>BhH znvw8=%N$ojqP&2E>Xmw%Lh{&S@rq}rG0+{+V9cTFngaa$_KaYH*vXe*g2|Up#6wks z&i&-)Kub2iRLOyt|NM*7bpjo?SniaiGldJPFEm-uzIFLF(p9>nxhjjhR)I&snnRK2 z&pM%v&g0BJ=H(Zed$g({f$$pT$^%O4W@~@4u6EXG$jhR|#29tMmvngjg)BAp% zWqUt=^8+NAizg+hZ~UQH#ajA5V_<{0Bt+GqzxO>73z8a%bkhaXfsppeYBC2yJZ49QTeZ_tF5=?uji$=uT#pT=wY;}B}k5MBFl=DC(V`UaS7Yy{mmrk z+v>-Dnmr!!x>cIgEZN)XSQH}!Lg*I9+e-~y5`RX4Jn@!6`%7>^#!E8g$WQgWQn}^^ zCk>lDnB6~K+L@O!h4u9MOd#{jnvN&LB2>APOZkd5)s~2wR9dfJ1xMw}h@aK1D ziBURp?1r5jwMy!~(3m;ff-0j+D_b0|^oFG1BKvn8>gQYQSvyu)80@ZWUtXw6pUu&i zzF-IcrwnI*=T88=9V{=gkQABlqm$e{U!dOeU#*LV$vn2{fw=`mZaLVd0R$U_x|-on zi@O&=x{Qh`jA(utX2qkKu_#6rIoGQh(h9W`=>{cq z2rL=Xqv)Vbl;3s9w?iQHGKK77T3FZL?^!Ps&TU-CtIEZ{XH30C1hmkL7wR>rb|C6Q z%F4jJr%|C(g!bD=-*}KDzmp6ck05NoZ2R(CTanuQ4KPd^g1ZfU=9Ef0PU1+x2yu*O ze6|T6`NHFNlu^gwheelbLYkQ*`kER7+O2&Xi5jdDL$AA&OT-B=0)9~cm* zusiDft@QbiG>&u@hTQ%PjZ115Phw0TkvG9=Nz``ea>aP+g$?TJ$S04--RDU(Et~WY zTJa*XNdU|K$2?6qA6=?l(N@7Y7Iivm4hLFeDt#}S(&UD`5T||$KhFfbue5vY ztZd_50P5U$mc?G&=(c|unS6Xrzt=Pr)!G(+JPEq@*=_$|He1ryU|j_WWHCYWmS5xF zy>W{zs!3Pn!+&vBB=6sf8BnGnDSmBXV1_wDBiZL{b-z!}_HE^yU%kL!NEjBY%fBf5 zm;r+@$!m0E$qbFCT#UvwwSi`x{v=!(225RQpe+;D$iVjOE;oD0u81VA8zvppUu&Zs zUSrDPM4q51;v^EFUdX{Ams|vOXe|=B-!~oSzK(~tMfRqilWo8oC0Z1{V`-tJq>F5e z+!N6jP*|sX5N~*_-2^CONG({m4m=B1fw&E8gJG)i=RzwY`6E3Vo(v9CRH3QZ>`Q~C zdym``fYx{%4iD!{!G^;!>ExW!7aI33{gg%|fDqfdB4s9WY6=aPLp} z>nif6Qe!ZFDYAUWG0{TNCWdVSET}H23LkzKZ`;%Nt6E_4_y&L`P3&DuG!|W1R3+boZ7(sl+jsgJ8gS9A zHB<&HRqPh=G3nK&pOv>gNhlKkW%`A~WoJ5D7*F`vYru}RQ79?0g!&NY0+TOsDe9*; zf^!+g@_U2PGXw!|KnGJ6hu9?r%RbF7%p;0AM(NRb)Sq}ss!YCP-^MaCx&O)zxqQNI&-%a6$K)yTnP#zl; z*r}n1)a~EyNq~O82U{EayKgV1-f5}&?V8K3SRnB4A6BSnQB;aCd#uUBwal}JmKLH8 zy-SMIbV?_v1G81UxRIUxjYJ3ZvvWxPC{h0LG|^03Y;E0fZ(WOv)L;~vnSI+LBuV75GvsBL5st4a8FY;u4V!$I5kyv ztTlp*u6e<{Kkl6uKEPgo`2f5|?ujV0m_cH%hI526*XuvaF@Fco>y(W9RX4T_#TkVV z4OI7LdJa}pnEfr3%Ig5j?uO_=yJu@L=iei9nSEjR+ZvPm}A9Fg=s{FR1j7<`-w?n^M%nTPA?GKA(}4MjAfKX z{3I-~uorw!ow<;md$K*7-}Ni#oppdO8kDf|IW!$|;M+pH$MHdWm5sbN0nYc2ofizI z0YEa6?@C9w+%~O5KS($^hGr@&!aQ=)iLEQ}2xvIWgSig*UTKU4sdUqxJqGe^F;+I( zmtGJ&0s@6S3xL&0Czn!>Iz(Sl&fCNTfQb~j9(2Z(>DE%V0YH97TF0ZROkhV}6 zs2^Y$2gF=n#*U7L=FI=Fazd>Ix)KFF>*BcM0(1M2<976RT-*1Cl*4C!o-xN zmc8 zdU+a}ofJ7`)OU4wqjTCYfa%uDGcXbGbNsJL+7+=B?gmotq|&Y%0pkp#FH6@~TL(+u zFB7nb9Fd+WI@O$F*)>beTu4#rj%`UbR~++a?bqSjsn$O-mM{NADsYG-Zr*q`-scMmjW1h!yPBE5vaM}3C!c+fkLyCc-cwAjBzknuG2?HmuK8O7 zD~32V{F*HxCz4*DIKX7PCi_N__(2jtIFo@r?ka4492)>r`K9>U_!t4cPF((kWHTg5 zP9Rw6%u7SEN{w6y;-s*j8V#g78%!HB_3;ZIPL4SqsG14%h%PKxWlkf(bJ7%huYbCa zERJM+51eJ;W%Z9)YdESB??;z&mSvzr>T*08&ifqDA^NPMCEH{CmzB+pAyu3yss1yG z8Z(g%ci*eZbT2sI46rX5aX!rG_8cQgn8=wH^T;TItV<47a}0VE?WkbEPV@QiUZ2gN zeG}nbDZ(B$kV1tb&R@B5q)N)LUDPF?D>?3Hp+QB^q^7CW)qgDF*0f`)4_Y)^U)9Pb zPY`TWm&l|TD65d}oVRxu@$f-;dEp&50h#|s!5Is=bZ`^1O7X_q;)+ek=z*pyFR?_O zq5CUj@&49&YjAh2K$AvABrlkPB3ZG#^+e30uSYJk5O0I^@275mkQk6{{ZwkM(BpY=h-9xI zo5zT*M#Ps;;tlvWnwJ*kyMCS?*C~QQVQ$MmYP^zW$?nr8PN~<4qtTDjLny!vBgT=L zL6%ZDDnty(mfWgEoPFQ=l2=$?jnGUfr$RuW>{4KtlOV^eQ&4*Qn_ew* zU>%dKxiq2 z2Dwu2CLn(Z#zuwICl^!0Dn?wyy6)*s#gdWKaZ2~=h2$GV2{)LDh^e8eiWSY6Asx(B zSh!O750XgPci@5wNm$<;Z~%_9ikT{JnSvV`8H};aH}1<92>u4Mmm)v7e#Dnqa~6m zJj$|XG)^*4Ib=nIw+h~fJ)2)vU`ZMDA$I+Lo^7_(#>?tPl(Hgta8%VPceX7o%L3Kq z=h!kJrVLrozW4FVUX;SD8vsSgGu99?S<3G4|2G2Sf;WR?gxVbfau?B2=dz{qYL)gY z6Y~`=fdm~U%{aWP9-?JE>Szm-fbl6fVC2%o*1ql7I|b^uRGuh6Okz3hgQNdHV9R)WWACFxvyl=a>SZ+Gdqob$Xo*GDb{>e8m72I3^r{~GX(p+Wu>m<~eO$M56TR2PjToMqClrtFvw`jO)6yBWH% zrB*-Pt^HArmaf5`J{e zFwzR2dseemI_S^nw}*YQBz_TYc9b|cH1$~&5Fj*v5FLR=l zPC>)NEHbj1K?{N|BLa;?hIL4|?=}WywNM6k$#p6C4m3ermk6&m`ZI7VQgZHL;>Vz9 zVAE_snMk!Dd7bok%*w_SQE$?YwKR$(@ib!sdH0wjPC^lIq!oa4-OyII@%s56BAzu{ zw)yX!R)cr~vAvY+0L$0(yv3J@yYm2yvH4HiGLouHv?$05T*;Lb#AePd3Ynj^PAg!g zHIg?HeDdCzxq*5z4;UX;gdhLRZQ9#HAE-qOJW6qIdiKa|JqkXh(I3u>$U{ zmXm9>z>LTp=o9xNCvIhw9Q3p=wpZH~ftW$7>!2Z=V90W*b*ZGucf>k^N&;0xUlhS=mz)S2wwy|XSZ!EYx}$T_ zjqzX4rZhSjK;odk*n`Y*5DF74okcgVv|86f22?oy6P(_Qx$mqsF@O#7_d%7fr1%+#0DLXx$rN)!ogXUT0v${enL3Ut)*NJ}_IbIymRJp=@fLKh( zS7JL9j1h*#cLWR5iJm43jj+D0cH?ssc&z#YN~|+T&;j?|Rb+CX#@?enjhWo{lU3lH z8Tm}}>818wktX@{$kM7#-~hy`oNLL{rGf=)q6Z#GXRM(N6gJZKeyg zR&w{KwiTwu!Wypz+9SX zT}2-+-|jDf&2{O<-RNQ9;lJQ3Q);vZuV-N<=BRlUttq9i1a?PTrAKQMdFVl@k~NJH zlBxW>PMG7(2}p* zS~)cf%`C1_7>P+Y&T2`=tL;ysh_~~DZVTMcLRvd^220#{2cYA6=D;@_1jYQ|)G9m{ zdLB<^`Xe;HDFctsm=$7yvGPV06yybbH6*e53|v(Gr8y0V*AygvEn=`keKA zJFoXmq{A`^gVDFp0v2O1D1?KTgr`uDbp;c3QZjrlq>0>rPsoS zgTCYOxf@H<6AzZwu*E=zjla6GW9niT2L+`xcts(uNOJ=LMOJ`9+B+OE5F4nyum8rM?RBvwX73pQ&@`CS_gpTgYCTBkTD{ z(JHG`H>F043q*^c*MHzO)?$n2Dl!w$TkU>toel=w58VfvjRdJ#i?#OxyoP0ngwNMJ z3VAO`_jlkP1i(wX&PV9l znMQomdNRCU{JdB5YppSQj@O7=b>PyxdM=J$}$s>(w{g{Q?dg}mogS__5udrgOB zvqANO0Ox}s_)=Dhqr-T4hI2Vo^9Ly}%pOtLBAR;Ti#ze{jgii(>{~_R76rNd^ORZ& zoYAK23`TT5#Z0qX_=72yRpHIF$^FW-rQM4?=jd?Y{za5XIthct5qU+NzNj}Qr`7Ot zF`S(Sx;{e6``ssCiA*u;5+|INY2%&4+oZ|_0)F{ts5qPgo+tMWc~32E{}4RdIJP!( zDU4Fji*9V2Di($Oi)(u98{130Frge@Vq!s6{F&r&ZK@8pQ6vQB*+pb6=7k#7A|sS^ zRI<>%qwQ7L!n8wJ^jATLl^x3eIm@OU*OxUAM(mFc4cbVN5nvfrbY}=D$}y!T)QuWm zBTNf1V(0TC9c`{^H#$H0Z*VHGaCr}`mP zp3;FZo}FtYDYUEFLq^9TB`sEvGU@!#bb7};lWTlIm7iX+NG9F#c&MxlDek2Vm5E%t z&on)jGhurI9Ogc$@fg!yAF)4nDJVUp_|})$Mz$mjSyZ81iW<)#vM)#9%`VHgApu+$ zhVcCwr|Xd*M8`j8$nR64P+)G^^#Knss64L%0SGu@m6w%TP$+og3Wg0LPv%sqWx~tL z-%ImzY^p!rB?RmF>1>tHtFFb@FN_n<50Waaz(OdJj8h?94>oMWg9;x*BxY~vv{n8x z{XTg+Rs$_9Wg*G4XsIbRPx^H`GLysgo&~qC8Q!^8M>Y&TW1FKX1f)M>rx*!yvkf-0 z$g6J|`50|dv333)MYb%c&-|HiAb14>?j=bfUK{X0jJk=$AdPvs3*v9W`uoyR+6&~# zW{^o>kJZ%>MH#w#_q)~x*Zev&gI*p#3{b4 zg_BC>_3|`ETI*p3`i32G27BGQRkNff1K)1uq6Ex)&v=fCe?!nac!H*GQ=kr zT|W2nubd-5ehUS8jN;UQp|W)Lyav>rCd~QdHDIf5mv&EvWeX&iFbb;QH3vNd@>7~_ zQ)?v8o(aQBE97OF<>R-$Ht&x&h{V*fW)4)o|AI!XadeQg6T+!+A5ritu=w21Q*d2u zRQ_c)RP)`_pE3p33{^^jBN<&a!}Lc^oCj<|_AS+fCec46uv)wHFw4x2JZ=vqYH>=X z33AM$UgP7K?jfL%Rc%hIIbc0?qF+DR0?bN~Wy_4Ga1*^q^F2EUFuvGOL=?{?+{5%g zHV$kAGWFvgvtUSTxauxm=F5w86R6Y z{H?^j5^!Yi{;WNcxdm;;7miNrG8~ogYb^~gJs0KW-ILhr1dc!Ow_g$|&as!aw3?sZ z_iZ8>aCzQqFlO`KR+)5fq@7iPA>|~2B?eI0x;T0=<&0_6lyx^;pIoh$#C{INGNoUR zVL9p7jpUr#+v5iYH6z*~r+@nsBd8&>Cn*68jYZUcqO|XnFQ%JvW3a>|VN5Ggw!kNk znZ8GSWRMORo4V~B=iF2{Yo0{sd#R2JPFIHli5~Jq>p>TaU+E8h;UEy_hb#Lp@mKKO zPVUyPE_8b3Vc|7SzrlFzULtGq^6cT@Fe1hG#!S*s!7uFGr-7{FnV8p%0uj%BXE1?X zn-bJWlFm8^`ev^HpTDu+k2xJh^!Sn$P@j#mE7x$&QSofAe#6eh$EVxl-FW=vH-PXKD8#$_z8KttDDSw%;V z7uEMa(gO8@PxWyMEn`Q46YV#v+9gL&~_@#sjk54{8f{~|%peooXTix%&OK=|H zW^>`bBCpr~Bu~Ff;Pn<(%kIn+avoE1*3T>dDtLK1?-d$eyYa9F!_XTgRJYWRz6+?M zd!470yi{N*H;f8}Q}@%<8>bOIY!vd<_nnpCb+EUDLn7F>h2KC1#Viw<@)9!cl}?@9 zG9_);d*%p|Couc+U4NkcbwwUAJHR!0IV1F6>~;O!-Miy)gBAoR(`Sz6Z+a<7A9=^B zFazn5TovZENeAE+7@0Un%F-)_Fer1zSa@TB#}qR|q=^q=?#-&_uuQMFXlmjyu`dOR zK+GEp=*IW_DRL=dArs~GXLGzYZhl+qGrzjZ)*S{1cd??3uCLR-D@}mson(f=-b>)ioxpkDaj=Qz9@ z=<_+>Ql$*wfhm)~Cnx3V>z?FkeS0cQwdBpH)te}`He0-}X3Q**H$722Yf<~$v@~e_ z6?1Sx^8|WEHO&6OrdAT-l_qD}uHm_{<3@@Nt(|p6Xlc_PZT8Cb79Bud>;JXn{q?lBx2GA? zE(_2#OxILDZg-0%uXY$W9MhCXIWwa=v`H1h?7;`%Gogn%I_Z`cQ2ySgG)dJDJ#kxW z(vyoNvs<`ilP6rWB(^sJb~;yb)A$Ayq~ZAmuKjJFe)J{sf_FN-#_xaq6ZSNs?<9Z zFI;i!{;r`;C$^5@8#v30&-UT*!b_WFKo?+$F2t^Eeo|84aK_K2?w# zUJVT+A=XpdiQ2#C0oc)I@RRxv0YD(1$Ps*E-%Xy zhk}o0MQn|m)VkDuf3u(e{PYGB>g(WF$G(17{%reCF3j`;U?g@^Ei=~ zFj5YLc|K6E+=#X6Dy<^69EroAF&KxjQjsWFR%u4(bO05@rGjj3X&pMkKt73{pOUF+ zdLi+5(M&;s>KwN~4ai(IJBr7G*wSC{LiCmLS{gOj!f+`~H-0C=_x47!vy3pRLs$3~ zFvZP!Zp`bN8tluR$FOs9gIByD{Ltb~HN5(%VC~NGeB4iOpMIC411Z;XLJW zE@gtR*k=PaI$X9-0dIgLv6|#M8yEKXatAKnFwg+hBRID1oK@E0Lzv0cLyy8{H85qe zh3rWM4kN8&*Y}c-HoLs;pqC}e^0XpH*683GlYTA8O+G7HtUnw9b8gq3-ZyCx*PoGC zB{7!n6vx-K9Jq<-%$WK=xZSSS3}#|BzH$rEaSJ9_B!OhOai#en6PN)$FBzz%Wp_b1Wnd`qHaF*=JdW|DjZU%NFsac|Gwy#+ z@D@vMw{_|AcPwC4JuM@LrO35VFD~G)kvr31*N)yzEi{xx>`>zS10HX-z zw|?><7BE)1m>QGUII|dOdZ+~|U9S~Bzq9(oNY%Fa;9d&cmv%LSt*$OzT0I?oZk%sP zm;+#R5j|K0TLP{pQw~a@o+PaSzO{9WP0HOHID)b@dH&C13MbZKU!POUpA&5ggl}s8 zHzrngoh)L8tbzD-d}q?mE;Y(I)r;B`jIjIEFeRyGhZ>x1RFGn7#y0&T1`NkB<+~#e z8sErl(*3HWL>zWVU}w0fS0MRo z^KR?k8Xpu6`zOj;4h7QP<)`7v@%?^^uL+rZv!1L#vwnqKe#L0>1v-9B;$eie_-UrP zwWo=*K=x^Of_^D!q@Po+EQX_b(HedqUUo4_oI~B5Z@H!4xj1O_>ogp(`8-lu`En*U z{gef21<(r`i@UN8vv;AC29K^cFPwyfShmE?D!Ag+9WCN~RMDvW;dG-DQ344QIbn+Q zkCqEbQixk&w?VuR#+B}a+nZ7=%o`^CI@OW1Hd?JAzzJbDyuW%cj4 zJ#0;NnnTWEXz0tL3f2^+OiQP-v}SLWB9SN5wRt(8uh>u~7>tRO)%G;Mmzxs*yUn39 zhh^>@p$`0;V0OQDRMDq}`_T)cY@W|7EJRs-qS2$J`PF~YEI9_0#3E^z0&8cMX%rr{ z$(6RL3JhDlZ&YwioPNUd7OG<6ozF)C3vN<*mqaFB5s%eeV4!K^Nf1UZcA6Y%ChfY3 zIQLrWzcv+mdKpS%L;7?_V%f+(;K*`5yw_ArTe1Y|rygnV;c!!6mgpwpz-wExT-EFB z(LB_&(*D3R_x!ZQC$s>|Z~TZ@oJ^>3=W8{Cs@|Io&eSh!tQ>_x$iP5Fl|hTKO8R43 zSspq2H}mF10cS6#t|hC#1Tu+qJQ`gBFqdaoP(u8DDjefimxrbpd{- zx9!2fDPfLoF^4z1!2*#hdWckZmm2W1-J*L;pY&sXl)sQfvwJ7JhRQ2ib3|7d57RbB zx;L$Pe;*Lv8+IW($u&oRI^;jm#)a;2bZ)%2ct6byoCY3blCEp&+qKA8#^oBUa{O5@^TH=qU z=S~FDN%L(?mlb7(B2Lzz(2u8q4v7Y z#Mg{^@HW1*+|J_NMKdmF=YR%T;vIzFTVChn7xe+~zCVY#nG{o8rLueQO7EFPhAPN_ zl+W*dKA!9Sc%JUQDzHGhRMhkZK~%=}pehZ&%E`mg;bl(UA}kE|Ze()lWaEBN@-sYk z^XF6$%TYHm_C5Hdoq%($bEsy}JLaH)4x*Oab^kD%gS`m*xpl5NY#6GDo^sM5l#r6| z7*x?Q%_jHdg3oh1{~$}LGRbuOG+5Y3Oyhn$CE7fBNV41r4er$x3OU&*Yp#RYG-;o0 zh&Ow|hXuv}}5;G)w0O&}I5 zn%Wy70TtxkyvPF;jHgNbgAh{xudyUlow`;Nv}(4UWK(NKV$h=OX~yUM1505f@C#91 z?%#3VQZ8yH<|RX2wrKr)))Uq=0w%1@aeHJy>4%z|T=`(ug?(TxN+X+OJwHjYYzjy$ z!(>^HP;VXK{yaMph~7^ci8U5YzirdFU(z$XI~^J!<4AjDO0&Wq?KLPaJHKK6Mvh~q z5NQ)B#_6rg7j^Z>ZUk#^y>7f6GqG#qY6?@)g2bIc)1t zeg`$O{1mT0urB(saO?ti53lUqHc_<6+MVXd3oQ;6H6h}gC;8lJY(yV-XT@$z2%fRI4eZ3fYd2O8>L-Z8(KiNke! zBk?4-SH9$KLYt9r0nHNxqNk20E~TX-N7>VCXYrst%b~80uGe&Z1Jw{hE@7q-LcsfL zdw7Ib(@Ry3j9O;ckaEHro#rpkfD@G%CAI@Q!Ss;dM#sPd{iEARoelB>gFy1(Xb-gy| zNIgT(tVPcf8C;o&z*mI+C@Cj$@Ki0)Muq0BG8Hn9XbdQwVY7pt`gujc+rQBIcs#0JGT%4YW8eET84bVp%Y!q4W;-6w*T0`zeoy}@{6*_3KWTLTyW$HRR3oBh z(1K+8=^`)7m`FHva*WsA8XMxV7l%Rhs0v*MZh6(Bgw?)%#LU;uESxU-<{lNZ$vK=v zZn)ZpAn$^F4@@W?UIQB%<3 z_tuzMh)jI7psHe;#$S{T@UgMa+G5o^VYXB7E2#&p(WT(eiL;NDqDUd*hn(%*-QCxYND)ng2$7)t^ii!aeZlqE;RF$6(U!^x z>CL-=zxPGd_J>FW0~an5=l0ILKdZa0+NF?!uP7|Jg)rI!M5iGT4JzfS0ul+<$5GSa z+hDGjG_ZQRTRpB~huU=<>gcC^x6av~NE%$=!$5K@;0=)~p`|~3qAgisvWVW0Wr(4$ zi)y4yy}(7nr14FHV^(*4$RSK0fZ)m$9F|<;FE5O6uK}%gI8Jh*v3X7_8FeF)&W~ zyZb#3=b`z0SbF;&2zP3)#*aQqQX-W1)jvH1gwlPkV@(U>&fC16eVo)_eU;dKV!QYz z)>Cj?2^k?3gBXU<)Mqm^fQlG<%0*?7bV3+l@I(;2?kGTQv1B9use(5AAb5Ppi0`HH zNT0hQ&A+jpKs!9m{r&G|h@+2CR@a4tuBc+lSpv!DdQYSGqpdEF=L1O+rD+)yUM}%x z_Q&yX4kyeoEF&S$ZI*^Sk-vnBD&AIGFD@2vEt^EVh46_!xV3rQefGnBU7b#G&cZvp zTYZR9GqJ}AAHI@+!(Px9SB*$Zd5hk#e5aVqFHAG-&i#&lbp#vS<~%gl?LygBY3YT= zR7!1~7C;x#pQEn^vdpg=Dk;r{elzX8bIcb%-~@!zXE-I9*zr^aiN& z*F*qsmC=E*CL55i{6VI1l0xq4`*lb(X7kz8Ok74@*;Y}A2|1RiT2VEcSy7%zFPW4h zX||MHaUVu4rGHF@{GE#qm3KsL1;RkRO@*AB6>Nk>mvN!{kJMbCix%phG~o_QE)m?y zrV6|f+a)`_I7CZ~r;A*7{xbY31 zmuu_psY~)LcC<*eFf>2E!>&qdw>?^@_7+Eu2N0gTg!HqC2_s`xmU#a)UsJa{uBfDj z{mB_F6!xtE;N=#*1?F+E#YUnA)jSfcTY&&#a(Ck8OKJvOTvN^ZW7hFTk?X}m(5YmM zAm(I2*(iw8zfOagBByv_D8^qbgT%q1bT}fMCOO1WtuS4fS%kD%fqxMj3<9l^Os8TH zHu(JSw}De~?#~IVID8+0EP0ZZt6Z!OCxe`v-fPZYk0${Vlp7f;#O^l@|Jz}I@%T|H zf|bPR=;*U7(o3{Qi4e;4*}z>VmIC*Vxa7)3Jn-7HQ&L$RRZw?51FPS;`@fCIBZZ4$ z3PPmuKn~DU`vM6U{my@1wOei7CEaXyN`V<7Ea9*@lTI%qhCEd3ckem#{V334?wJN* zDXb9Pa|F%e()=NQ|M}2}gX0H0OP9$u*_r5)4=GLzvKt%u6LLMY8 z8NV=jqpa(C*;|o z?^QJFiPQgnz&{*iR>)wj)EG8%eIGumfP6NK_g6{E?O~rFDg{yu#w#5~RG*}Dj5vZ; z<|uXFPiZ*S9|_3j@ahfWdS<$>ggUrv{+f9dMv{Hq00I(%l-=l495MgAgz)JBz8fvA{gcxj_KX_KqU0gmF>=(Zfa05)> zaAIdyNkf^i!Un}rS@8avng8XTh+kiTfK z@a!sTh8TogA!FQx8>qk1iT9Yg4IJVf5p8wdb-VMozaK3h9?np~7v1HsQu*B+Mjw4H z4=SE~>hn7M_rZ^}@cVm0*u)%fGgMoCP1qH~cgrDDxN_%YA9zYV`}cA0{soDSJb(Z^ zxKjD}r;XUN{)4EoIj=vwFYF3D0`LZP9EmmLP`}kCj7K$4Zo`2ZSjE6RGc;h(<$&$D zab(z9kPz$R<9|vk(uzas=4}b_;91H;1Dm3%A2dp9=OM9^Y2oFuzeh8$zSa5~#7>38~`M+;uRR+_P1xgdT{EJ?1` zqC#^xK{nKHO_H-IZhYcHsV7B+h9IIQC#Pn+&jnN-63?+$@zBNG+;~=RENxa}Kl zv`*rzEM(WE>ulA{6I@=_{(WE(jIbig#T!U4j^0TieVNxM&^~b<0AFr*&CC(TTQ*dQ z+4mH`2Hggq2AmDyXkr)3IObJC1K`(XEW=cRN3k-Dv z0ls3qbgs=6%p;*7_GGHiA5zhUEo*P#_Om7g9z(exW-9bO{Dj1_kddbuUB8$68~17a zwI?O!tW{BT&w00`ShvpKN;WZScr^vJb|tnWGA`e|PB-NHTD$+Rr0ej9!hhq&8Ha2l z`>cyYw#;+(Wn`bdSLu)yp>V`qW|0xTj-jwI z&-?v;KCkCNfiQvvQkb@h4X8?^?TB~tjnkd8YkgNXa2%<=V>3=&jY|R!>4k_FHj>|| z2(8^wtXdCRZZ}zuAF>0@zI@u&WHwJLFo8BI2Of%7q)dtAxu|6!GZRZk&+H0#f`mcX zFUxhKZ^s*xPp6Hw#_gxik`$m&*OS<$E^tjArPJO?e>)eEcJiPs6Q{JuPo5cH38xP2 zqTiQ{i;7wOv>PfqX zq4ydch2Gv$GSZy3Wn7#%BIIwc7HQmlpUCmkSC*@ByZ*xU50z^z{!b0Ho8UY>S2KC^ ze(h|dGz0lA`q!`8h1GTf{;rC5Ha|P+wSljc?S6nk3c8&=U1B{LB=hLH8RsXp%a-6- zI3i8eLfglZF!&%sctU)pra)Ud@|<*B`xzC&!=S;QCzNdZEN3b;zq7egtR4_i`z0*9S^D?CmA}%RWYrB+J0{aTm9)_zXE2x4FM_euMFL zq0z=TA6-$eMKZw_;_b*u#EQ_BT@~k15)-La5Gfml!GSb2Y9G;DY|DE6@~%o9a!~u} zeer8R`@)70{=IR=kKQZf3-4stt3ux^#XM=`93$0;l5IJDmb}Sqk>REj9=y>~$+G)< zw=|W&_iY^=dCqeyy!|vS+N;hgh)Gq$x7*8c(XrMR6nv#l^)2QS5}E zY-;sfO)fe{Ps$&~4V-!q zkSgT_x<++vC$O>r$I|&!(5+;4jCz5C>hUR{Q$W(a(1l9w%FGvnfnwIw2rhmMGOOGa zyYc?V(1Ll%`R3&e!HZ|rS$+5Y70#t7nnl&dJ{Er;fFAvV_W4b-*yzx6UZL;JqZmgt zF3XUL{bu$K=UyBbpnE_|?FJ&I+lC#PWbFTaL#Ekb8est%WOpfAN1C zc4Na06H`55_d~XKcF4OzV%lN?JLY-ytv0XG^I}tc#JRb%Z`mm5=Zeyg2YBYq=YVnY z`o*x*6qGj%x;}{cJYMT}h%NP_#>@ot<4V7vVB?I4P)VNJw1;&fx9L(&4H?e;J%io9 z_nvGmS7*&aVsPdHq~phXsmHba~(u1f2+G1f5wn8q${UO^iSB{$=nt z&ind*;=JjxlwJr9vagh#o{IgMSlhDFsSvrRc|OcPyzudsl{eFvGP5r#? z!W^n(emfiLF2T)oW_rLR&Up^a?DZl6sISOIu^si^9$sL~eGykH+t^k0?0KPk?Y4pC z@=#dHQ+?Q5oR5f0bRbU>q`JCZ^vOq63!%L3dojMBBdtXfL+3;X8ixXtkGcPbv=mMb z37x=IcE@qiiSfqfN)Ne1^X%(XSLe&_xZaRN{b8jiHtYr$B3c@^(w_vH)=& zbLlvA?yL^YXoZKCH4aP_hB8Kp9!1;3zNcKo2;AWA zjOaxaQq&=7>I|v(HQt=3h>S+mU2|`*37<9Ta+&Z|m87HNo)WzNt&gmOdqUk~e&kAx zBOjRkptAPk8V)tg~w9FfEaBJ#8Sg_RBDG)lE~;%~gjdg_!U|4L>mgUqJah`9`L zYaRwEru64-16@jhW~!{L2rezb*9UANJrr*A%4`&2zyxo8XjezwL%m8k>Z8J>Wz z;7ARpdZFUMY3dMMfk_Dz=Z?zv#%A59ST+bN|M0y$Gtm9LThR+F=Z z9)JJQ!?pj4Cf~T%&&y7}$jw-GMrbRx5F=ucxR_RC0nYd-TYkxjs5irF`hKUaL0>e; zsGUr~2Oopz9c(?L^uEsm7nQwrtpIKYq$#z4d%qERr2MaG_Z1^Hv>1op&(k#s?4CUF z5)5WPzM6&GQ-kcZ#*^;qE$UAjCe%BwuF)8WCf@vSaU%YOz5d(7$g3t#)dzB- zy{g^>=IjVx+fjf3Wz>cXDAnl}vHx>$OZ z#m9(|d*_PKY$RG1(mp;N3uPpM0a;)WhXQd#K}pfX3o%UuPL6FA z)Yf=bp|ebTu{RPbgeTdV;JnE#V&&*vaFTW@ueGSiO@FR<|Hst{ zGY8Yyx1i=+${l<*_>5TIYMM?ZpAFK*I!TfOcD?|&?`E1y(!&;6oO8@|X|H{7W)(i{ zbDG4lq`+Aks8DPUrx9Yw@tcgze8zVqZ}P)T9yQ;diM>yWAbdFd(!%ll zZnT$oNbJFT&!~^Ay*n45H$J4@^68upCo(f~ZqR_Rb~j%$jAW!psGr!z=TX=NM;rYV z-OYdVIfN6+XxGSjM|c+WjvJ5X{lOdO*ACJEPHst|KM8Z0cfR)1f7?svir2J1c9z?2 zGalvuMzAU%US@)-B9-F9fpwXJ^qE|Yeu)phBewd)%mzv>O&zC%u{81)3CQzdY#hQG zw{6195zYc~T+dk2Ggj2quE%-Zx)&^4Vq$OO5TRsC$O_6*)%YvdcMZrdg}H4|B-*Lz zjAYoP-EH#Gafh_Z3*Fz`jgI9Re_K&hAMR){cQl)T;x{M6(-n9sREfXdQCYk&VDg@G!?d|m&IlwH0-312H=5D5Ml9}aFVBC zn5fV~D6w3);*mp{JS+&v(W|iH(oF(?pPl@ZI$w@dL-njcPU1FPrKpN&p2NOLQQvJ?Cb|*wK10@o<@z3x zjUyGD&WVtouuMg&aW2fnJD%OCR$rZiyC!>$Bk$D2MVU=Myw1is4lnr;T*27ZL|Vg* zFrRmbne4Zf{Hu!tF=h`p#WsK=xmAh3Q_$8N;N$3`Xrb3|+krO*IlBojyUsMu%m3SD zcuu`J=j+T_?(S!o1yxXM@+iDh=beyNT=e6gV##fSn4u>gBUGziyk@trBqM9kYvoK$ zMdr9K`KT2I&UvM<`a-kHThwhkzDqNOBVTA%4_-hx?MHHvSk@1jb-e%8gPza9elD!a#df!KX?F$6aHEH z0_6c_u;hRKJ5<~l22Sw|T#lZ3V45Q?S!AjNU)-^SEiAQHIOdZlqh^`}QPyP_yfKk@ z{06Ghab4jig7V?vKV7^=o@S;;QZ=<%fejNCT*gg0x+_a1%XZt7cUzN%01UL_Asod* zRlj7`dH?~Zw`!HQqPt}oLY@?u(Gq>dN#p*M*f3kd8HSht(+6;ne@*oW5%WK2 z0d@%=7l01*5~S6eYkw)a@^a*_f!M_T=vspj`}tI^YRi%69!?DYZSjoSxL=*3zPusw oJ;VY(zbp5LzLC$Fmi*Cg%GWG0Ex%bVB~p-&iGjI(1I#_)|Lz|SCjbBd diff --git a/public/js/app/components/apexcharts.js b/public/js/app/components/apexcharts.js index ed4a9a8..1c0f544 100644 --- a/public/js/app/components/apexcharts.js +++ b/public/js/app/components/apexcharts.js @@ -1,62 +1,28 @@ -var Ci = Object.create; var vt = Object.defineProperty; var Li = Object.getOwnPropertyDescriptor; var Pi = Object.getOwnPropertyNames; var Mi = Object.getPrototypeOf, Ii = Object.prototype.hasOwnProperty; var yt = (p, e) => () => (e || p((e = { exports: {} }).exports, e), e.exports); var Ti = (p, e, t, i) => { if (e && typeof e == "object" || typeof e == "function") for (let a of Pi(e)) !Ii.call(p, a) && a !== t && vt(p, a, { get: () => e[a], enumerable: !(i = Li(e, a)) || i.enumerable }); return p }; var zi = (p, e, t) => (t = p != null ? Ci(Mi(p)) : {}, Ti(e || !p || !p.__esModule ? vt(t, "default", { value: p, enumerable: !0 }) : t, p)); var jt = yt((ot, We) => { - "use strict"; function at(p, e) { (e == null || e > p.length) && (e = p.length); for (var t = 0, i = Array(e); t < e; t++)i[t] = p[t]; return i } function Pt(p) { if (p === void 0) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return p } function F(p, e) { if (!(p instanceof e)) throw new TypeError("Cannot call a class as a function") } function wt(p, e) { for (var t = 0; t < e.length; t++) { var i = e[t]; i.enumerable = i.enumerable || !1, i.configurable = !0, "value" in i && (i.writable = !0), Object.defineProperty(p, Tt(i.key), i) } } function R(p, e, t) { return e && wt(p.prototype, e), t && wt(p, t), Object.defineProperty(p, "prototype", { writable: !1 }), p } function Ie(p) { var e = Mt(); return function () { var t, i = De(p); if (e) { var a = De(this).constructor; t = Reflect.construct(i, arguments, a) } else t = i.apply(this, arguments); return function (s, r) { if (r && (typeof r == "object" || typeof r == "function")) return r; if (r !== void 0) throw new TypeError("Derived constructors may only return object or undefined"); return Pt(s) }(this, t) } } function Oe(p, e, t) { return (e = Tt(e)) in p ? Object.defineProperty(p, e, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : p[e] = t, p } function De(p) { return De = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (e) { return e.__proto__ || Object.getPrototypeOf(e) }, De(p) } function Te(p, e) { if (typeof e != "function" && e !== null) throw new TypeError("Super expression must either be null or a function"); p.prototype = Object.create(e && e.prototype, { constructor: { value: p, writable: !0, configurable: !0 } }), Object.defineProperty(p, "prototype", { writable: !1 }), e && st(p, e) } function Mt() { try { var p = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () { })) } catch { } return (Mt = function () { return !!p })() } function kt(p, e) { var t = Object.keys(p); if (Object.getOwnPropertySymbols) { var i = Object.getOwnPropertySymbols(p); e && (i = i.filter(function (a) { return Object.getOwnPropertyDescriptor(p, a).enumerable })), t.push.apply(t, i) } return t } function Y(p) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e] != null ? arguments[e] : {}; e % 2 ? kt(Object(t), !0).forEach(function (i) { Oe(p, i, t[i]) }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(p, Object.getOwnPropertyDescriptors(t)) : kt(Object(t)).forEach(function (i) { Object.defineProperty(p, i, Object.getOwnPropertyDescriptor(t, i)) }) } return p } function st(p, e) { return st = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, i) { return t.__proto__ = i, t }, st(p, e) } function It(p, e) { - return function (t) { if (Array.isArray(t)) return t }(p) || function (t, i) { var a = t == null ? null : typeof Symbol < "u" && t[Symbol.iterator] || t["@@iterator"]; if (a != null) { var s, r, n, o, h = [], c = !0, d = !1; try { if (n = (a = a.call(t)).next, i === 0) { if (Object(a) !== a) return; c = !1 } else for (; !(c = (s = n.call(a)).done) && (h.push(s.value), h.length !== i); c = !0); } catch (g) { d = !0, r = g } finally { try { if (!c && a.return != null && (o = a.return(), Object(o) !== o)) return } finally { if (d) throw r } } return h } }(p, e) || zt(p, e) || function () { - throw new TypeError(`Invalid attempt to destructure non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`) - }() - } function te(p) { - return function (e) { if (Array.isArray(e)) return at(e) }(p) || function (e) { if (typeof Symbol < "u" && e[Symbol.iterator] != null || e["@@iterator"] != null) return Array.from(e) }(p) || zt(p) || function () { - throw new TypeError(`Invalid attempt to spread non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`) - }() - } function Tt(p) { var e = function (t, i) { if (typeof t != "object" || !t) return t; var a = t[Symbol.toPrimitive]; if (a !== void 0) { var s = a.call(t, i || "default"); if (typeof s != "object") return s; throw new TypeError("@@toPrimitive must return a primitive value.") } return (i === "string" ? String : Number)(t) }(p, "string"); return typeof e == "symbol" ? e : e + "" } function J(p) { return J = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function (e) { return typeof e } : function (e) { return e && typeof Symbol == "function" && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e }, J(p) } function zt(p, e) { if (p) { if (typeof p == "string") return at(p, e); var t = {}.toString.call(p).slice(8, -1); return t === "Object" && p.constructor && (t = p.constructor.name), t === "Map" || t === "Set" ? Array.from(p) : t === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? at(p, e) : void 0 } } var P = function () { function p() { F(this, p) } return R(p, [{ key: "shadeRGBColor", value: function (e, t) { var i = t.split(","), a = e < 0 ? 0 : 255, s = e < 0 ? -1 * e : e, r = parseInt(i[0].slice(4), 10), n = parseInt(i[1], 10), o = parseInt(i[2], 10); return "rgb(" + (Math.round((a - r) * s) + r) + "," + (Math.round((a - n) * s) + n) + "," + (Math.round((a - o) * s) + o) + ")" } }, { key: "shadeHexColor", value: function (e, t) { var i = parseInt(t.slice(1), 16), a = e < 0 ? 0 : 255, s = e < 0 ? -1 * e : e, r = i >> 16, n = i >> 8 & 255, o = 255 & i; return "#" + (16777216 + 65536 * (Math.round((a - r) * s) + r) + 256 * (Math.round((a - n) * s) + n) + (Math.round((a - o) * s) + o)).toString(16).slice(1) } }, { key: "shadeColor", value: function (e, t) { return p.isColorHex(t) ? this.shadeHexColor(e, t) : this.shadeRGBColor(e, t) } }], [{ key: "bind", value: function (e, t) { return function () { return e.apply(t, arguments) } } }, { key: "isObject", value: function (e) { return e && J(e) === "object" && !Array.isArray(e) && e != null } }, { key: "is", value: function (e, t) { return Object.prototype.toString.call(t) === "[object " + e + "]" } }, { key: "listToArray", value: function (e) { var t, i = []; for (t = 0; t < e.length; t++)i[t] = e[t]; return i } }, { key: "extend", value: function (e, t) { var i = this; typeof Object.assign != "function" && (Object.assign = function (s) { if (s == null) throw new TypeError("Cannot convert undefined or null to object"); for (var r = Object(s), n = 1; n < arguments.length; n++) { var o = arguments[n]; if (o != null) for (var h in o) o.hasOwnProperty(h) && (r[h] = o[h]) } return r }); var a = Object.assign({}, e); return this.isObject(e) && this.isObject(t) && Object.keys(t).forEach(function (s) { i.isObject(t[s]) && s in e ? a[s] = i.extend(e[s], t[s]) : Object.assign(a, Oe({}, s, t[s])) }), a } }, { key: "extendArray", value: function (e, t) { var i = []; return e.map(function (a) { i.push(p.extend(t, a)) }), e = i } }, { key: "monthMod", value: function (e) { return e % 12 } }, { key: "clone", value: function (e) { if (p.is("Array", e)) { for (var t = [], i = 0; i < e.length; i++)t[i] = this.clone(e[i]); return t } if (p.is("Null", e)) return null; if (p.is("Date", e)) return e; if (J(e) === "object") { var a = {}; for (var s in e) e.hasOwnProperty(s) && (a[s] = this.clone(e[s])); return a } return e } }, { key: "log10", value: function (e) { return Math.log(e) / Math.LN10 } }, { key: "roundToBase10", value: function (e) { return Math.pow(10, Math.floor(Math.log10(e))) } }, { key: "roundToBase", value: function (e, t) { return Math.pow(t, Math.floor(Math.log(e) / Math.log(t))) } }, { key: "parseNumber", value: function (e) { return e === null ? e : parseFloat(e) } }, { key: "stripNumber", value: function (e) { var t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 2; return Number.isInteger(e) ? e : parseFloat(e.toPrecision(t)) } }, { key: "randomId", value: function () { return (Math.random() + 1).toString(36).substring(4) } }, { key: "noExponents", value: function (e) { var t = String(e).split(/[eE]/); if (t.length === 1) return t[0]; var i = "", a = e < 0 ? "-" : "", s = t[0].replace(".", ""), r = Number(t[1]) + 1; if (r < 0) { for (i = a + "0."; r++;)i += "0"; return i + s.replace(/^-/, "") } for (r -= s.length; r--;)i += "0"; return s + i } }, { key: "getDimensions", value: function (e) { var t = getComputedStyle(e, null), i = e.clientHeight, a = e.clientWidth; return i -= parseFloat(t.paddingTop) + parseFloat(t.paddingBottom), [a -= parseFloat(t.paddingLeft) + parseFloat(t.paddingRight), i] } }, { key: "getBoundingClientRect", value: function (e) { var t = e.getBoundingClientRect(); return { top: t.top, right: t.right, bottom: t.bottom, left: t.left, width: e.clientWidth, height: e.clientHeight, x: t.left, y: t.top } } }, { key: "getLargestStringFromArr", value: function (e) { return e.reduce(function (t, i) { return Array.isArray(i) && (i = i.reduce(function (a, s) { return a.length > s.length ? a : s })), t.length > i.length ? t : i }, 0) } }, { key: "hexToRgba", value: function () { var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : "#999999", t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : .6; e.substring(0, 1) !== "#" && (e = "#999999"); var i = e.replace("#", ""); i = i.match(new RegExp("(.{" + i.length / 3 + "})", "g")); for (var a = 0; a < i.length; a++)i[a] = parseInt(i[a].length === 1 ? i[a] + i[a] : i[a], 16); return t !== void 0 && i.push(t), "rgba(" + i.join(",") + ")" } }, { key: "getOpacityFromRGBA", value: function (e) { return parseFloat(e.replace(/^.*,(.+)\)/, "$1")) } }, { key: "rgb2hex", value: function (e) { return (e = e.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i)) && e.length === 4 ? "#" + ("0" + parseInt(e[1], 10).toString(16)).slice(-2) + ("0" + parseInt(e[2], 10).toString(16)).slice(-2) + ("0" + parseInt(e[3], 10).toString(16)).slice(-2) : "" } }, { key: "isColorHex", value: function (e) { return /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)|(^#[0-9A-F]{8}$)/i.test(e) } }, { key: "getPolygonPos", value: function (e, t) { for (var i = [], a = 2 * Math.PI / t, s = 0; s < t; s++) { var r = {}; r.x = e * Math.sin(s * a), r.y = -e * Math.cos(s * a), i.push(r) } return i } }, { key: "polarToCartesian", value: function (e, t, i, a) { var s = (a - 90) * Math.PI / 180; return { x: e + i * Math.cos(s), y: t + i * Math.sin(s) } } }, { key: "escapeString", value: function (e) { var t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "x", i = e.toString().slice(); return i = i.replace(/[` ~!@#$%^&*()|+\=?;:'",.<>{}[\]\\/]/gi, t) } }, { key: "negToZero", value: function (e) { return e < 0 ? 0 : e } }, { key: "moveIndexInArray", value: function (e, t, i) { if (i >= e.length) for (var a = i - e.length + 1; a--;)e.push(void 0); return e.splice(i, 0, e.splice(t, 1)[0]), e } }, { key: "extractNumber", value: function (e) { return parseFloat(e.replace(/[^\d.]*/g, "")) } }, { key: "findAncestor", value: function (e, t) { for (; (e = e.parentElement) && !e.classList.contains(t);); return e } }, { key: "setELstyles", value: function (e, t) { for (var i in t) t.hasOwnProperty(i) && (e.style.key = t[i]) } }, { key: "preciseAddition", value: function (e, t) { var i = (String(e).split(".")[1] || "").length, a = (String(t).split(".")[1] || "").length, s = Math.pow(10, Math.max(i, a)); return (Math.round(e * s) + Math.round(t * s)) / s } }, { key: "isNumber", value: function (e) { return !isNaN(e) && parseFloat(Number(e)) === e && !isNaN(parseInt(e, 10)) } }, { key: "isFloat", value: function (e) { return Number(e) === e && e % 1 != 0 } }, { key: "isSafari", value: function () { return /^((?!chrome|android).)*safari/i.test(navigator.userAgent) } }, { key: "isFirefox", value: function () { return navigator.userAgent.toLowerCase().indexOf("firefox") > -1 } }, { key: "isMsEdge", value: function () { var e = window.navigator.userAgent, t = e.indexOf("Edge/"); return t > 0 && parseInt(e.substring(t + 5, e.indexOf(".", t)), 10) } }, { key: "getGCD", value: function (e, t) { var i = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 7, a = Math.pow(10, i - Math.floor(Math.log10(Math.max(e, t)))); for (e = Math.round(Math.abs(e) * a), t = Math.round(Math.abs(t) * a); t;) { var s = t; t = e % t, e = s } return e / a } }, { key: "getPrimeFactors", value: function (e) { for (var t = [], i = 2; e >= 2;)e % i == 0 ? (t.push(i), e /= i) : i++; return t } }, { key: "mod", value: function (e, t) { var i = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 7, a = Math.pow(10, i - Math.floor(Math.log10(Math.max(e, t)))); return (e = Math.round(Math.abs(e) * a)) % (t = Math.round(Math.abs(t) * a)) / a } }]), p }(), ve = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w, this.setEasingFunctions() } return R(p, [{ key: "setEasingFunctions", value: function () { var e; if (!this.w.globals.easing) { switch (this.w.config.chart.animations.easing) { case "linear": e = "-"; break; case "easein": e = "<"; break; case "easeout": e = ">"; break; case "easeinout": default: e = "<>"; break; case "swing": e = function (t) { var i = 1.70158; return (t -= 1) * t * ((i + 1) * t + i) + 1 }; break; case "bounce": e = function (t) { return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375 }; break; case "elastic": e = function (t) { return t === !!t ? t : Math.pow(2, -10 * t) * Math.sin((t - .075) * (2 * Math.PI) / .3) + 1 } }this.w.globals.easing = e } } }, { key: "animateLine", value: function (e, t, i, a) { e.attr(t).animate(a).attr(i) } }, { key: "animateMarker", value: function (e, t, i, a) { e.attr({ opacity: 0 }).animate(t, i).attr({ opacity: 1 }).afterAll(function () { a() }) } }, { key: "animateRect", value: function (e, t, i, a, s) { e.attr(t).animate(a).attr(i).afterAll(function () { return s() }) } }, { key: "animatePathsGradually", value: function (e) { var t = e.el, i = e.realIndex, a = e.j, s = e.fill, r = e.pathFrom, n = e.pathTo, o = e.speed, h = e.delay, c = this.w, d = 0; c.config.chart.animations.animateGradually.enabled && (d = c.config.chart.animations.animateGradually.delay), c.config.chart.animations.dynamicAnimation.enabled && c.globals.dataChanged && c.config.chart.type !== "bar" && (d = 0), this.morphSVG(t, i, a, c.config.chart.type !== "line" || c.globals.comboCharts ? s : "stroke", r, n, o, h * d) } }, { key: "showDelayedElements", value: function () { this.w.globals.delayedElements.forEach(function (e) { var t = e.el; t.classList.remove("apexcharts-element-hidden"), t.classList.add("apexcharts-hidden-element-shown") }) } }, { key: "animationCompleted", value: function (e) { var t = this.w; t.globals.animationEnded || (t.globals.animationEnded = !0, this.showDelayedElements(), typeof t.config.chart.events.animationEnd == "function" && t.config.chart.events.animationEnd(this.ctx, { el: e, w: t })) } }, { key: "morphSVG", value: function (e, t, i, a, s, r, n, o) { var h = this, c = this.w; s || (s = e.attr("pathFrom")), r || (r = e.attr("pathTo")); var d = function (g) { return c.config.chart.type === "radar" && (n = 1), "M 0 ".concat(c.globals.gridHeight) }; (!s || s.indexOf("undefined") > -1 || s.indexOf("NaN") > -1) && (s = d()), (!r || r.indexOf("undefined") > -1 || r.indexOf("NaN") > -1) && (r = d()), c.globals.shouldAnimate || (n = 1), e.plot(s).animate(1, c.globals.easing, o).plot(s).animate(n, c.globals.easing, o).plot(r).afterAll(function () { P.isNumber(i) ? i === c.globals.series[c.globals.maxValsInArrayIndex].length - 2 && c.globals.shouldAnimate && h.animationCompleted(e) : a !== "none" && c.globals.shouldAnimate && (!c.globals.comboCharts && t === c.globals.series.length - 1 || c.globals.comboCharts) && h.animationCompleted(e), h.showDelayedElements() }) } }]), p }(), ie = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w } return R(p, [{ key: "getDefaultFilter", value: function (e, t) { var i = this.w; e.unfilter(!0), new window.SVG.Filter().size("120%", "180%", "-5%", "-40%"), i.config.states.normal.filter !== "none" ? this.applyFilter(e, t, i.config.states.normal.filter.type, i.config.states.normal.filter.value) : i.config.chart.dropShadow.enabled && this.dropShadow(e, i.config.chart.dropShadow, t) } }, { key: "addNormalFilter", value: function (e, t) { var i = this.w; i.config.chart.dropShadow.enabled && !e.node.classList.contains("apexcharts-marker") && this.dropShadow(e, i.config.chart.dropShadow, t) } }, { key: "addLightenFilter", value: function (e, t, i) { var a = this, s = this.w, r = i.intensity; e.unfilter(!0), new window.SVG.Filter, e.filter(function (n) { var o = s.config.chart.dropShadow; (o.enabled ? a.addShadow(n, t, o) : n).componentTransfer({ rgb: { type: "linear", slope: 1.5, intercept: r } }) }), e.filterer.node.setAttribute("filterUnits", "userSpaceOnUse"), this._scaleFilterSize(e.filterer.node) } }, { key: "addDarkenFilter", value: function (e, t, i) { var a = this, s = this.w, r = i.intensity; e.unfilter(!0), new window.SVG.Filter, e.filter(function (n) { var o = s.config.chart.dropShadow; (o.enabled ? a.addShadow(n, t, o) : n).componentTransfer({ rgb: { type: "linear", slope: r } }) }), e.filterer.node.setAttribute("filterUnits", "userSpaceOnUse"), this._scaleFilterSize(e.filterer.node) } }, { key: "applyFilter", value: function (e, t, i) { var a = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : .5; switch (i) { case "none": this.addNormalFilter(e, t); break; case "lighten": this.addLightenFilter(e, t, { intensity: a }); break; case "darken": this.addDarkenFilter(e, t, { intensity: a }) } } }, { key: "addShadow", value: function (e, t, i) { var a, s = this.w, r = i.blur, n = i.top, o = i.left, h = i.color, c = i.opacity; if (((a = s.config.chart.dropShadow.enabledOnSeries) === null || a === void 0 ? void 0 : a.length) > 0 && s.config.chart.dropShadow.enabledOnSeries.indexOf(t) === -1) return e; var d = e.flood(Array.isArray(h) ? h[t] : h, c).composite(e.sourceAlpha, "in").offset(o, n).gaussianBlur(r).merge(e.source); return e.blend(e.source, d) } }, { key: "dropShadow", value: function (e, t) { var i, a, s = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 0, r = t.top, n = t.left, o = t.blur, h = t.color, c = t.opacity, d = t.noUserSpaceOnUse, g = this.w; return e.unfilter(!0), P.isMsEdge() && g.config.chart.type === "radialBar" || ((i = g.config.chart.dropShadow.enabledOnSeries) === null || i === void 0 ? void 0 : i.length) > 0 && ((a = g.config.chart.dropShadow.enabledOnSeries) === null || a === void 0 ? void 0 : a.indexOf(s)) === -1 || (h = Array.isArray(h) ? h[s] : h, e.filter(function (f) { var x = null; x = P.isSafari() || P.isFirefox() || P.isMsEdge() ? f.flood(h, c).composite(f.sourceAlpha, "in").offset(n, r).gaussianBlur(o) : f.flood(h, c).composite(f.sourceAlpha, "in").offset(n, r).gaussianBlur(o).merge(f.source), f.blend(f.source, x) }), d || e.filterer.node.setAttribute("filterUnits", "userSpaceOnUse"), this._scaleFilterSize(e.filterer.node)), e } }, { key: "setSelectionFilter", value: function (e, t, i) { var a = this.w; if (a.globals.selectedDataPoints[t] !== void 0 && a.globals.selectedDataPoints[t].indexOf(i) > -1) { e.node.setAttribute("selected", !0); var s = a.config.states.active.filter; s !== "none" && this.applyFilter(e, t, s.type, s.value) } } }, { key: "_scaleFilterSize", value: function (e) { (function (t) { for (var i in t) t.hasOwnProperty(i) && e.setAttribute(i, t[i]) })({ width: "200%", height: "200%", x: "-50%", y: "-50%" }) } }]), p }(), X = function () { - function p(e) { F(this, p), this.ctx = e, this.w = e.w } return R(p, [{ key: "roundPathCorners", value: function (e, t) { function i(S, L, C) { var I = L.x - S.x, z = L.y - S.y, M = Math.sqrt(I * I + z * z); return a(S, L, Math.min(1, C / M)) } function a(S, L, C) { return { x: S.x + (L.x - S.x) * C, y: S.y + (L.y - S.y) * C } } function s(S, L) { S.length > 2 && (S[S.length - 2] = L.x, S[S.length - 1] = L.y) } function r(S) { return { x: parseFloat(S[S.length - 2]), y: parseFloat(S[S.length - 1]) } } e.indexOf("NaN") > -1 && (e = ""); var n = e.split(/[,\s]/).reduce(function (S, L) { var C = L.match("([a-zA-Z])(.+)"); return C ? (S.push(C[1]), S.push(C[2])) : S.push(L), S }, []).reduce(function (S, L) { return parseFloat(L) == L && S.length ? S[S.length - 1].push(L) : S.push([L]), S }, []), o = []; if (n.length > 1) { var h = r(n[0]), c = null; n[n.length - 1][0] == "Z" && n[0].length > 2 && (c = ["L", h.x, h.y], n[n.length - 1] = c), o.push(n[0]); for (var d = 1; d < n.length; d++) { var g = o[o.length - 1], f = n[d], x = f == c ? n[1] : n[d + 1]; if (x && g && g.length > 2 && f[0] == "L" && x.length > 2 && x[0] == "L") { var b, v, y = r(g), w = r(f), l = r(x); b = i(w, y, t), v = i(w, l, t), s(f, b), f.origPoint = w, o.push(f); var u = a(b, w, .5), m = a(w, v, .5), A = ["C", u.x, u.y, m.x, m.y, v.x, v.y]; A.origPoint = w, o.push(A) } else o.push(f) } if (c) { var k = r(o[o.length - 1]); o.push(["Z"]), s(o[0], k) } } else o = n; return o.reduce(function (S, L) { return S + L.join(" ") + " " }, "") } }, { key: "drawLine", value: function (e, t, i, a) { var s = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : "#a8a8a8", r = arguments.length > 5 && arguments[5] !== void 0 ? arguments[5] : 0, n = arguments.length > 6 && arguments[6] !== void 0 ? arguments[6] : null, o = arguments.length > 7 && arguments[7] !== void 0 ? arguments[7] : "butt"; return this.w.globals.dom.Paper.line().attr({ x1: e, y1: t, x2: i, y2: a, stroke: s, "stroke-dasharray": r, "stroke-width": n, "stroke-linecap": o }) } }, { key: "drawRect", value: function () { var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 0, t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0, i = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 0, a = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : 0, s = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : 0, r = arguments.length > 5 && arguments[5] !== void 0 ? arguments[5] : "#fefefe", n = arguments.length > 6 && arguments[6] !== void 0 ? arguments[6] : 1, o = arguments.length > 7 && arguments[7] !== void 0 ? arguments[7] : null, h = arguments.length > 8 && arguments[8] !== void 0 ? arguments[8] : null, c = arguments.length > 9 && arguments[9] !== void 0 ? arguments[9] : 0, d = this.w.globals.dom.Paper.rect(); return d.attr({ x: e, y: t, width: i > 0 ? i : 0, height: a > 0 ? a : 0, rx: s, ry: s, opacity: n, "stroke-width": o !== null ? o : 0, stroke: h !== null ? h : "none", "stroke-dasharray": c }), d.node.setAttribute("fill", r), d } }, { key: "drawPolygon", value: function (e) { var t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "#e1e1e1", i = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 1, a = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : "none"; return this.w.globals.dom.Paper.polygon(e).attr({ fill: a, stroke: t, "stroke-width": i }) } }, { key: "drawCircle", value: function (e) { var t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : null; e < 0 && (e = 0); var i = this.w.globals.dom.Paper.circle(2 * e); return t !== null && i.attr(t), i } }, { key: "drawPath", value: function (e) { var t = e.d, i = t === void 0 ? "" : t, a = e.stroke, s = a === void 0 ? "#a8a8a8" : a, r = e.strokeWidth, n = r === void 0 ? 1 : r, o = e.fill, h = e.fillOpacity, c = h === void 0 ? 1 : h, d = e.strokeOpacity, g = d === void 0 ? 1 : d, f = e.classes, x = e.strokeLinecap, b = x === void 0 ? null : x, v = e.strokeDashArray, y = v === void 0 ? 0 : v, w = this.w; return b === null && (b = w.config.stroke.lineCap), (i.indexOf("undefined") > -1 || i.indexOf("NaN") > -1) && (i = "M 0 ".concat(w.globals.gridHeight)), w.globals.dom.Paper.path(i).attr({ fill: o, "fill-opacity": c, stroke: s, "stroke-opacity": g, "stroke-linecap": b, "stroke-width": n, "stroke-dasharray": y, class: f }) } }, { key: "group", value: function () { var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : null, t = this.w.globals.dom.Paper.group(); return e !== null && t.attr(e), t } }, { key: "move", value: function (e, t) { var i = ["M", e, t].join(" "); return i } }, { key: "line", value: function (e, t) { var i = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : null, a = null; return i === null ? a = [" L", e, t].join(" ") : i === "H" ? a = [" H", e].join(" ") : i === "V" && (a = [" V", t].join(" ")), a } }, { key: "curve", value: function (e, t, i, a, s, r) { var n = ["C", e, t, i, a, s, r].join(" "); return n } }, { key: "quadraticCurve", value: function (e, t, i, a) { return ["Q", e, t, i, a].join(" ") } }, { key: "arc", value: function (e, t, i, a, s, r, n) { var o = "A"; arguments.length > 7 && arguments[7] !== void 0 && arguments[7] && (o = "a"); var h = [o, e, t, i, a, s, r, n].join(" "); return h } }, { key: "renderPaths", value: function (e) { var t, i = e.j, a = e.realIndex, s = e.pathFrom, r = e.pathTo, n = e.stroke, o = e.strokeWidth, h = e.strokeLinecap, c = e.fill, d = e.animationDelay, g = e.initialSpeed, f = e.dataChangeSpeed, x = e.className, b = e.shouldClipToGrid, v = b === void 0 || b, y = e.bindEventsOnPaths, w = y === void 0 || y, l = e.drawShadow, u = l === void 0 || l, m = this.w, A = new ie(this.ctx), k = new ve(this.ctx), S = this.w.config.chart.animations.enabled, L = S && this.w.config.chart.animations.dynamicAnimation.enabled, C = !!(S && !m.globals.resized || L && m.globals.dataChanged && m.globals.shouldAnimate); C ? t = s : (t = r, m.globals.animationEnded = !0); var I = m.config.stroke.dashArray, z = 0; z = Array.isArray(I) ? I[a] : m.config.stroke.dashArray; var M = this.drawPath({ d: t, stroke: n, strokeWidth: o, fill: c, fillOpacity: 1, classes: x, strokeLinecap: h, strokeDashArray: z }); if (M.attr("index", a), v && M.attr({ "clip-path": "url(#gridRectMask".concat(m.globals.cuid, ")") }), m.config.states.normal.filter.type !== "none") A.getDefaultFilter(M, a); else if (m.config.chart.dropShadow.enabled && u) { var T = m.config.chart.dropShadow; A.dropShadow(M, T, a) } w && (M.node.addEventListener("mouseenter", this.pathMouseEnter.bind(this, M)), M.node.addEventListener("mouseleave", this.pathMouseLeave.bind(this, M)), M.node.addEventListener("mousedown", this.pathMouseDown.bind(this, M))), M.attr({ pathTo: r, pathFrom: s }); var E = { el: M, j: i, realIndex: a, pathFrom: s, pathTo: r, fill: c, strokeWidth: o, delay: d }; return !S || m.globals.resized || m.globals.dataChanged ? !m.globals.resized && m.globals.dataChanged || k.showDelayedElements() : k.animatePathsGradually(Y(Y({}, E), {}, { speed: g })), m.globals.dataChanged && L && C && k.animatePathsGradually(Y(Y({}, E), {}, { speed: f })), M } }, { key: "drawPattern", value: function (e, t, i) { var a = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : "#a8a8a8", s = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : 0; return this.w.globals.dom.Paper.pattern(t, i, function (r) { e === "horizontalLines" ? r.line(0, 0, i, 0).stroke({ color: a, width: s + 1 }) : e === "verticalLines" ? r.line(0, 0, 0, t).stroke({ color: a, width: s + 1 }) : e === "slantedLines" ? r.line(0, 0, t, i).stroke({ color: a, width: s }) : e === "squares" ? r.rect(t, i).fill("none").stroke({ color: a, width: s }) : e === "circles" && r.circle(t).fill("none").stroke({ color: a, width: s }) }) } }, { key: "drawGradient", value: function (e, t, i, a, s) { var r, n = arguments.length > 5 && arguments[5] !== void 0 ? arguments[5] : null, o = arguments.length > 6 && arguments[6] !== void 0 ? arguments[6] : null, h = arguments.length > 7 && arguments[7] !== void 0 ? arguments[7] : null, c = arguments.length > 8 && arguments[8] !== void 0 ? arguments[8] : 0, d = this.w; t.length < 9 && t.indexOf("#") === 0 && (t = P.hexToRgba(t, a)), i.length < 9 && i.indexOf("#") === 0 && (i = P.hexToRgba(i, s)); var g = 0, f = 1, x = 1, b = null; o !== null && (g = o[0] !== void 0 ? o[0] / 100 : 0, f = o[1] !== void 0 ? o[1] / 100 : 1, x = o[2] !== void 0 ? o[2] / 100 : 1, b = o[3] !== void 0 ? o[3] / 100 : null); var v = !(d.config.chart.type !== "donut" && d.config.chart.type !== "pie" && d.config.chart.type !== "polarArea" && d.config.chart.type !== "bubble"); if (r = h === null || h.length === 0 ? d.globals.dom.Paper.gradient(v ? "radial" : "linear", function (l) { l.at(g, t, a), l.at(f, i, s), l.at(x, i, s), b !== null && l.at(b, t, a) }) : d.globals.dom.Paper.gradient(v ? "radial" : "linear", function (l) { (Array.isArray(h[c]) ? h[c] : h).forEach(function (u) { l.at(u.offset / 100, u.color, u.opacity) }) }), v) { var y = d.globals.gridWidth / 2, w = d.globals.gridHeight / 2; d.config.chart.type !== "bubble" ? r.attr({ gradientUnits: "userSpaceOnUse", cx: y, cy: w, r: n }) : r.attr({ cx: .5, cy: .5, r: .8, fx: .2, fy: .2 }) } else e === "vertical" ? r.from(0, 0).to(0, 1) : e === "diagonal" ? r.from(0, 0).to(1, 1) : e === "horizontal" ? r.from(0, 1).to(1, 1) : e === "diagonal2" && r.from(1, 0).to(0, 1); return r } }, { key: "getTextBasedOnMaxWidth", value: function (e) { var t = e.text, i = e.maxWidth, a = e.fontSize, s = e.fontFamily, r = this.getTextRects(t, a, s), n = r.width / t.length, o = Math.floor(i / n); return i < r.width ? t.slice(0, o - 3) + "..." : t } }, { key: "drawText", value: function (e) { var t = this, i = e.x, a = e.y, s = e.text, r = e.textAnchor, n = e.fontSize, o = e.fontFamily, h = e.fontWeight, c = e.foreColor, d = e.opacity, g = e.maxWidth, f = e.cssClass, x = f === void 0 ? "" : f, b = e.isPlainText, v = b === void 0 || b, y = e.dominantBaseline, w = y === void 0 ? "auto" : y, l = this.w; s === void 0 && (s = ""); var u = s; r || (r = "start"), c && c.length || (c = l.config.chart.foreColor), o = o || l.config.chart.fontFamily, h = h || "regular"; var m, A = { maxWidth: g, fontSize: n = n || "11px", fontFamily: o }; return Array.isArray(s) ? m = l.globals.dom.Paper.text(function (k) { for (var S = 0; S < s.length; S++)u = s[S], g && (u = t.getTextBasedOnMaxWidth(Y({ text: s[S] }, A))), S === 0 ? k.tspan(u) : k.tspan(u).newLine() }) : (g && (u = this.getTextBasedOnMaxWidth(Y({ text: s }, A))), m = v ? l.globals.dom.Paper.plain(s) : l.globals.dom.Paper.text(function (k) { return k.tspan(u) })), m.attr({ x: i, y: a, "text-anchor": r, "dominant-baseline": w, "font-size": n, "font-family": o, "font-weight": h, fill: c, class: "apexcharts-text " + x }), m.node.style.fontFamily = o, m.node.style.opacity = d, m } }, { - key: "getMarkerPath", value: function (e, t, i, a) { - var s = ""; switch (i) { - case "cross": s = "M ".concat(e - (a /= 1.4), " ").concat(t - a, " L ").concat(e + a, " ").concat(t + a, " M ").concat(e - a, " ").concat(t + a, " L ").concat(e + a, " ").concat(t - a); break; case "plus": s = "M ".concat(e - (a /= 1.12), " ").concat(t, " L ").concat(e + a, " ").concat(t, " M ").concat(e, " ").concat(t - a, " L ").concat(e, " ").concat(t + a); break; case "star": case "sparkle": var r = 5; a *= 1.15, i === "sparkle" && (a /= 1.1, r = 4); for (var n = Math.PI / r, o = 0; o <= 2 * r; o++) { var h = o * n, c = o % 2 == 0 ? a : a / 2; s += (o === 0 ? "M" : "L") + (e + c * Math.sin(h)) + "," + (t - c * Math.cos(h)) } s += "Z"; break; case "triangle": s = "M ".concat(e, " ").concat(t - a, ` - L `).concat(e + a, " ").concat(t + a, ` - L `).concat(e - a, " ").concat(t + a, ` - Z`); break; case "square": case "rect": s = "M ".concat(e - (a /= 1.125), " ").concat(t - a, ` - L `).concat(e + a, " ").concat(t - a, ` - L `).concat(e + a, " ").concat(t + a, ` - L `).concat(e - a, " ").concat(t + a, ` - Z`); break; case "diamond": a *= 1.05, s = "M ".concat(e, " ").concat(t - a, ` - L `).concat(e + a, " ").concat(t, ` - L `).concat(e, " ").concat(t + a, ` - L `).concat(e - a, " ").concat(t, ` - Z`); break; case "line": s = "M ".concat(e - (a /= 1.1), " ").concat(t, ` - L `).concat(e + a, " ").concat(t); break; default: a *= 2, s = "M ".concat(e, ", ").concat(t, ` - m -`).concat(a / 2, `, 0 - a `).concat(a / 2, ",").concat(a / 2, " 0 1,0 ").concat(a, `,0 - a `).concat(a / 2, ",").concat(a / 2, " 0 1,0 -").concat(a, ",0") - }return s - } - }, { key: "drawMarkerShape", value: function (e, t, i, a, s) { var r = this.drawPath({ d: this.getMarkerPath(e, t, i, a, s), stroke: s.pointStrokeColor, strokeDashArray: s.pointStrokeDashArray, strokeWidth: s.pointStrokeWidth, fill: s.pointFillColor, fillOpacity: s.pointFillOpacity, strokeOpacity: s.pointStrokeOpacity }); return r.attr({ cx: e, cy: t, shape: s.shape, class: s.class ? s.class : "" }), r } }, { key: "drawMarker", value: function (e, t, i) { e = e || 0; var a = i.pSize || 0; return P.isNumber(t) || (a = 0, t = 0), this.drawMarkerShape(e, t, i?.shape, a, Y(Y({}, i), i.shape === "line" || i.shape === "plus" || i.shape === "cross" ? { pointStrokeColor: i.pointFillColor, pointStrokeOpacity: i.pointFillOpacity } : {})) } }, { key: "pathMouseEnter", value: function (e, t) { var i = this.w, a = new ie(this.ctx), s = parseInt(e.node.getAttribute("index"), 10), r = parseInt(e.node.getAttribute("j"), 10); if (typeof i.config.chart.events.dataPointMouseEnter == "function" && i.config.chart.events.dataPointMouseEnter(t, this.ctx, { seriesIndex: s, dataPointIndex: r, w: i }), this.ctx.events.fireEvent("dataPointMouseEnter", [t, this.ctx, { seriesIndex: s, dataPointIndex: r, w: i }]), (i.config.states.active.filter.type === "none" || e.node.getAttribute("selected") !== "true") && i.config.states.hover.filter.type !== "none" && !i.globals.isTouchDevice) { var n = i.config.states.hover.filter; a.applyFilter(e, s, n.type, n.value) } } }, { key: "pathMouseLeave", value: function (e, t) { var i = this.w, a = new ie(this.ctx), s = parseInt(e.node.getAttribute("index"), 10), r = parseInt(e.node.getAttribute("j"), 10); typeof i.config.chart.events.dataPointMouseLeave == "function" && i.config.chart.events.dataPointMouseLeave(t, this.ctx, { seriesIndex: s, dataPointIndex: r, w: i }), this.ctx.events.fireEvent("dataPointMouseLeave", [t, this.ctx, { seriesIndex: s, dataPointIndex: r, w: i }]), i.config.states.active.filter.type !== "none" && e.node.getAttribute("selected") === "true" || i.config.states.hover.filter.type !== "none" && a.getDefaultFilter(e, s) } }, { key: "pathMouseDown", value: function (e, t) { var i = this.w, a = new ie(this.ctx), s = parseInt(e.node.getAttribute("index"), 10), r = parseInt(e.node.getAttribute("j"), 10), n = "false"; if (e.node.getAttribute("selected") === "true") { if (e.node.setAttribute("selected", "false"), i.globals.selectedDataPoints[s].indexOf(r) > -1) { var o = i.globals.selectedDataPoints[s].indexOf(r); i.globals.selectedDataPoints[s].splice(o, 1) } } else { if (!i.config.states.active.allowMultipleDataPointsSelection && i.globals.selectedDataPoints.length > 0) { i.globals.selectedDataPoints = []; var h = i.globals.dom.Paper.select(".apexcharts-series path").members, c = i.globals.dom.Paper.select(".apexcharts-series circle, .apexcharts-series rect").members, d = function (x) { Array.prototype.forEach.call(x, function (b) { b.node.setAttribute("selected", "false"), a.getDefaultFilter(b, s) }) }; d(h), d(c) } e.node.setAttribute("selected", "true"), n = "true", i.globals.selectedDataPoints[s] === void 0 && (i.globals.selectedDataPoints[s] = []), i.globals.selectedDataPoints[s].push(r) } if (n === "true") { var g = i.config.states.active.filter; if (g !== "none") a.applyFilter(e, s, g.type, g.value); else if (i.config.states.hover.filter !== "none" && !i.globals.isTouchDevice) { var f = i.config.states.hover.filter; a.applyFilter(e, s, f.type, f.value) } } else i.config.states.active.filter.type !== "none" && (i.config.states.hover.filter.type === "none" || i.globals.isTouchDevice ? a.getDefaultFilter(e, s) : (f = i.config.states.hover.filter, a.applyFilter(e, s, f.type, f.value))); typeof i.config.chart.events.dataPointSelection == "function" && i.config.chart.events.dataPointSelection(t, this.ctx, { selectedDataPoints: i.globals.selectedDataPoints, seriesIndex: s, dataPointIndex: r, w: i }), t && this.ctx.events.fireEvent("dataPointSelection", [t, this.ctx, { selectedDataPoints: i.globals.selectedDataPoints, seriesIndex: s, dataPointIndex: r, w: i }]) } }, { key: "rotateAroundCenter", value: function (e) { var t = {}; return e && typeof e.getBBox == "function" && (t = e.getBBox()), { x: t.x + t.width / 2, y: t.y + t.height / 2 } } }, { key: "getTextRects", value: function (e, t, i, a) { var s = !(arguments.length > 4 && arguments[4] !== void 0) || arguments[4], r = this.w, n = this.drawText({ x: -200, y: -200, text: e, textAnchor: "start", fontSize: t, fontFamily: i, foreColor: "#fff", opacity: 0 }); a && n.attr("transform", a), r.globals.dom.Paper.add(n); var o = n.bbox(); return s || (o = n.node.getBoundingClientRect()), n.remove(), { width: o.width, height: o.height } } }, { key: "placeTextWithEllipsis", value: function (e, t, i) { if (typeof e.getComputedTextLength == "function" && (e.textContent = t, t.length > 0 && e.getComputedTextLength() >= i / 1.1)) { for (var a = t.length - 3; a > 0; a -= 3)if (e.getSubStringLength(0, a) <= i / 1.1) return void (e.textContent = t.substring(0, a) + "..."); e.textContent = "." } } }], [{ key: "setAttrs", value: function (e, t) { for (var i in t) t.hasOwnProperty(i) && e.setAttribute(i, t[i]) } }]), p - }(), $ = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w } return R(p, [{ key: "getStackedSeriesTotals", value: function () { var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : [], t = this.w, i = []; if (t.globals.series.length === 0) return i; for (var a = 0; a < t.globals.series[t.globals.maxValsInArrayIndex].length; a++) { for (var s = 0, r = 0; r < t.globals.series.length; r++)t.globals.series[r][a] !== void 0 && e.indexOf(r) === -1 && (s += t.globals.series[r][a]); i.push(s) } return i } }, { key: "getSeriesTotalByIndex", value: function () { var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : null; return e === null ? this.w.config.series.reduce(function (t, i) { return t + i }, 0) : this.w.globals.series[e].reduce(function (t, i) { return t + i }, 0) } }, { key: "getStackedSeriesTotalsByGroups", value: function () { var e = this, t = this.w, i = []; return t.globals.seriesGroups.forEach(function (a) { var s = []; t.config.series.forEach(function (n, o) { a.indexOf(t.globals.seriesNames[o]) > -1 && s.push(o) }); var r = t.globals.series.map(function (n, o) { return s.indexOf(o) === -1 ? o : -1 }).filter(function (n) { return n !== -1 }); i.push(e.getStackedSeriesTotals(r)) }), i } }, { key: "setSeriesYAxisMappings", value: function () { var e = this.w.globals, t = this.w.config, i = [], a = [], s = [], r = e.series.length > t.yaxis.length || t.yaxis.some(function (d) { return Array.isArray(d.seriesName) }); t.series.forEach(function (d, g) { s.push(g), a.push(null) }), t.yaxis.forEach(function (d, g) { i[g] = [] }); var n = []; t.yaxis.forEach(function (d, g) { var f = !1; if (d.seriesName) { var x = []; Array.isArray(d.seriesName) ? x = d.seriesName : x.push(d.seriesName), x.forEach(function (b) { t.series.forEach(function (v, y) { if (v.name === b) { var w = y; g === y || r ? !r || s.indexOf(y) > -1 ? i[g].push([g, y]) : console.warn("Series '" + v.name + "' referenced more than once in what looks like the new style. That is, when using either seriesName: [], or when there are more series than yaxes.") : (i[y].push([y, g]), w = g), f = !0, (w = s.indexOf(w)) !== -1 && s.splice(w, 1) } }) }) } f || n.push(g) }), i = i.map(function (d, g) { var f = []; return d.forEach(function (x) { a[x[1]] = x[0], f.push(x[1]) }), f }); for (var o = t.yaxis.length - 1, h = 0; h < n.length && (o = n[h], i[o] = [], s); h++) { var c = s[0]; s.shift(), i[o].push(c), a[c] = o } s.forEach(function (d) { i[o].push(d), a[d] = o }), e.seriesYAxisMap = i.map(function (d) { return d }), e.seriesYAxisReverseMap = a.map(function (d) { return d }), e.seriesYAxisMap.forEach(function (d, g) { d.forEach(function (f) { t.series[f] && t.series[f].group === void 0 && (t.series[f].group = "apexcharts-axis-".concat(g.toString())) }) }) } }, { key: "isSeriesNull", value: function () { var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : null; return (e === null ? this.w.config.series.filter(function (t) { return t !== null }) : this.w.config.series[e].data.filter(function (t) { return t !== null })).length === 0 } }, { key: "seriesHaveSameValues", value: function (e) { return this.w.globals.series[e].every(function (t, i, a) { return t === a[0] }) } }, { key: "getCategoryLabels", value: function (e) { var t = this.w, i = e.slice(); return t.config.xaxis.convertedCatToNumeric && (i = e.map(function (a, s) { return t.config.xaxis.labels.formatter(a - t.globals.minX + 1) })), i } }, { key: "getLargestSeries", value: function () { var e = this.w; e.globals.maxValsInArrayIndex = e.globals.series.map(function (t) { return t.length }).indexOf(Math.max.apply(Math, e.globals.series.map(function (t) { return t.length }))) } }, { key: "getLargestMarkerSize", value: function () { var e = this.w, t = 0; return e.globals.markers.size.forEach(function (i) { t = Math.max(t, i) }), e.config.markers.discrete && e.config.markers.discrete.length && e.config.markers.discrete.forEach(function (i) { t = Math.max(t, i.size) }), t > 0 && (t += e.config.markers.hover.sizeOffset + 1), e.globals.markers.largestSize = t, t } }, { key: "getSeriesTotals", value: function () { var e = this.w; e.globals.seriesTotals = e.globals.series.map(function (t, i) { var a = 0; if (Array.isArray(t)) for (var s = 0; s < t.length; s++)a += t[s]; else a += t; return a }) } }, { key: "getSeriesTotalsXRange", value: function (e, t) { var i = this.w; return i.globals.series.map(function (a, s) { for (var r = 0, n = 0; n < a.length; n++)i.globals.seriesX[s][n] > e && i.globals.seriesX[s][n] < t && (r += a[n]); return r }) } }, { key: "getPercentSeries", value: function () { var e = this.w; e.globals.seriesPercent = e.globals.series.map(function (t, i) { var a = []; if (Array.isArray(t)) for (var s = 0; s < t.length; s++) { var r = e.globals.stackedSeriesTotals[s], n = 0; r && (n = 100 * t[s] / r), a.push(n) } else { var o = 100 * t / e.globals.seriesTotals.reduce(function (h, c) { return h + c }, 0); a.push(o) } return a }) } }, { key: "getCalculatedRatios", value: function () { var e, t, i, a = this, s = this.w, r = s.globals, n = [], o = 0, h = [], c = .1, d = 0; if (r.yRange = [], r.isMultipleYAxis) for (var g = 0; g < r.minYArr.length; g++)r.yRange.push(Math.abs(r.minYArr[g] - r.maxYArr[g])), h.push(0); else r.yRange.push(Math.abs(r.minY - r.maxY)); r.xRange = Math.abs(r.maxX - r.minX), r.zRange = Math.abs(r.maxZ - r.minZ); for (var f = 0; f < r.yRange.length; f++)n.push(r.yRange[f] / r.gridHeight); if (t = r.xRange / r.gridWidth, e = r.yRange / r.gridWidth, i = r.xRange / r.gridHeight, (o = r.zRange / r.gridHeight * 16) || (o = 1), r.minY !== Number.MIN_VALUE && Math.abs(r.minY) !== 0 && (r.hasNegs = !0), s.globals.seriesYAxisReverseMap.length > 0) { var x = function (v, y) { var w = s.config.yaxis[s.globals.seriesYAxisReverseMap[y]], l = v < 0 ? -1 : 1; return v = Math.abs(v), w.logarithmic && (v = a.getBaseLog(w.logBase, v)), -l * v / n[y] }; if (r.isMultipleYAxis) { h = []; for (var b = 0; b < n.length; b++)h.push(x(r.minYArr[b], b)) } else (h = []).push(x(r.minY, 0)), r.minY !== Number.MIN_VALUE && Math.abs(r.minY) !== 0 && (c = -r.minY / e, d = r.minX / t) } else (h = []).push(0), c = 0, d = 0; return { yRatio: n, invertedYRatio: e, zRatio: o, xRatio: t, invertedXRatio: i, baseLineInvertedY: c, baseLineY: h, baseLineX: d } } }, { key: "getLogSeries", value: function (e) { var t = this, i = this.w; return i.globals.seriesLog = e.map(function (a, s) { var r = i.globals.seriesYAxisReverseMap[s]; return i.config.yaxis[r] && i.config.yaxis[r].logarithmic ? a.map(function (n) { return n === null ? null : t.getLogVal(i.config.yaxis[r].logBase, n, s) }) : a }), i.globals.invalidLogScale ? e : i.globals.seriesLog } }, { key: "getBaseLog", value: function (e, t) { return Math.log(t) / Math.log(e) } }, { key: "getLogVal", value: function (e, t, i) { if (t <= 0) return 0; var a = this.w, s = a.globals.minYArr[i] === 0 ? -1 : this.getBaseLog(e, a.globals.minYArr[i]), r = (a.globals.maxYArr[i] === 0 ? 0 : this.getBaseLog(e, a.globals.maxYArr[i])) - s; return t < 1 ? t / r : (this.getBaseLog(e, t) - s) / r } }, { key: "getLogYRatios", value: function (e) { var t = this, i = this.w, a = this.w.globals; return a.yLogRatio = e.slice(), a.logYRange = a.yRange.map(function (s, r) { var n = i.globals.seriesYAxisReverseMap[r]; if (i.config.yaxis[n] && t.w.config.yaxis[n].logarithmic) { var o, h = -Number.MAX_VALUE, c = Number.MIN_VALUE; return a.seriesLog.forEach(function (d, g) { d.forEach(function (f) { i.config.yaxis[g] && i.config.yaxis[g].logarithmic && (h = Math.max(f, h), c = Math.min(f, c)) }) }), o = Math.pow(a.yRange[r], Math.abs(c - h) / a.yRange[r]), a.yLogRatio[r] = o / a.gridHeight, o } }), a.invalidLogScale ? e.slice() : a.yLogRatio } }, { key: "drawSeriesByGroup", value: function (e, t, i, a) { var s = this.w, r = []; return e.series.length > 0 && t.forEach(function (n) { var o = [], h = []; e.i.forEach(function (c, d) { s.config.series[c].group === n && (o.push(e.series[d]), h.push(c)) }), o.length > 0 && r.push(a.draw(o, i, h)) }), r } }], [{ key: "checkComboSeries", value: function (e, t) { var i = !1, a = 0, s = 0; return t === void 0 && (t = "line"), e.length && e[0].type !== void 0 && e.forEach(function (r) { r.type !== "bar" && r.type !== "column" && r.type !== "candlestick" && r.type !== "boxPlot" || a++, r.type !== void 0 && r.type !== t && s++ }), s > 0 && (i = !0), { comboBarCount: a, comboCharts: i } } }, { key: "extendArrayProps", value: function (e, t, i) { var a, s, r, n, o, h; return (a = t) !== null && a !== void 0 && a.yaxis && (t = e.extendYAxis(t, i)), (s = t) !== null && s !== void 0 && s.annotations && (t.annotations.yaxis && (t = e.extendYAxisAnnotations(t)), (r = t) !== null && r !== void 0 && (n = r.annotations) !== null && n !== void 0 && n.xaxis && (t = e.extendXAxisAnnotations(t)), (o = t) !== null && o !== void 0 && (h = o.annotations) !== null && h !== void 0 && h.points && (t = e.extendPointAnnotations(t))), t } }]), p }(), Be = function () { function p(e) { F(this, p), this.w = e.w, this.annoCtx = e } return R(p, [{ key: "setOrientations", value: function (e) { var t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : null, i = this.w; if (e.label.orientation === "vertical") { var a = t !== null ? t : 0, s = i.globals.dom.baseEl.querySelector(".apexcharts-xaxis-annotations .apexcharts-xaxis-annotation-label[rel='".concat(a, "']")); if (s !== null) { var r = s.getBoundingClientRect(); s.setAttribute("x", parseFloat(s.getAttribute("x")) - r.height + 4), e.label.position === "top" ? s.setAttribute("y", parseFloat(s.getAttribute("y")) + r.width) : s.setAttribute("y", parseFloat(s.getAttribute("y")) - r.width); var n = this.annoCtx.graphics.rotateAroundCenter(s), o = n.x, h = n.y; s.setAttribute("transform", "rotate(-90 ".concat(o, " ").concat(h, ")")) } } } }, { key: "addBackgroundToAnno", value: function (e, t) { var i = this.w; if (!e || t.label.text === void 0 || t.label.text !== void 0 && !String(t.label.text).trim()) return null; var a = i.globals.dom.baseEl.querySelector(".apexcharts-grid").getBoundingClientRect(), s = e.getBoundingClientRect(), r = t.label.style.padding.left, n = t.label.style.padding.right, o = t.label.style.padding.top, h = t.label.style.padding.bottom; t.label.orientation === "vertical" && (o = t.label.style.padding.left, h = t.label.style.padding.right, r = t.label.style.padding.top, n = t.label.style.padding.bottom); var c = s.left - a.left - r, d = s.top - a.top - o, g = this.annoCtx.graphics.drawRect(c - i.globals.barPadForNumericAxis, d, s.width + r + n, s.height + o + h, t.label.borderRadius, t.label.style.background, 1, t.label.borderWidth, t.label.borderColor, 0); return t.id && g.node.classList.add(t.id), g } }, { key: "annotationsBackground", value: function () { var e = this, t = this.w, i = function (a, s, r) { var n = t.globals.dom.baseEl.querySelector(".apexcharts-".concat(r, "-annotations .apexcharts-").concat(r, "-annotation-label[rel='").concat(s, "']")); if (n) { var o = n.parentNode, h = e.addBackgroundToAnno(n, a); h && (o.insertBefore(h.node, n), a.label.mouseEnter && h.node.addEventListener("mouseenter", a.label.mouseEnter.bind(e, a)), a.label.mouseLeave && h.node.addEventListener("mouseleave", a.label.mouseLeave.bind(e, a)), a.label.click && h.node.addEventListener("click", a.label.click.bind(e, a))) } }; t.config.annotations.xaxis.map(function (a, s) { i(a, s, "xaxis") }), t.config.annotations.yaxis.map(function (a, s) { i(a, s, "yaxis") }), t.config.annotations.points.map(function (a, s) { i(a, s, "point") }) } }, { key: "getY1Y2", value: function (e, t) { var i, a = e === "y1" ? t.y : t.y2, s = !1, r = this.w; if (this.annoCtx.invertAxis) { var n = r.globals.labels; r.config.xaxis.convertedCatToNumeric && (n = r.globals.categoryLabels); var o = n.indexOf(a), h = r.globals.dom.baseEl.querySelector(".apexcharts-yaxis-texts-g text:nth-child(" + (o + 1) + ")"); i = h ? parseFloat(h.getAttribute("y")) : (r.globals.gridHeight / n.length - 1) * (o + 1) - r.globals.barHeight, t.seriesIndex !== void 0 && r.globals.barHeight && (i = i - r.globals.barHeight / 2 * (r.globals.series.length - 1) + r.globals.barHeight * t.seriesIndex) } else { var c, d = r.globals.seriesYAxisMap[t.yAxisIndex][0]; r.config.yaxis[t.yAxisIndex].logarithmic ? c = (a = new $(this.annoCtx.ctx).getLogVal(r.config.yaxis[t.yAxisIndex].logBase, a, d)) / r.globals.yLogRatio[d] : c = (a - r.globals.minYArr[d]) / (r.globals.yRange[d] / r.globals.gridHeight), c > r.globals.gridHeight ? (c = r.globals.gridHeight, s = !0) : c < 0 && (c = 0, s = !0), i = r.globals.gridHeight - c, !t.marker || t.y !== void 0 && t.y !== null || (i = 0), r.config.yaxis[t.yAxisIndex] && r.config.yaxis[t.yAxisIndex].reversed && (i = c) } return typeof a == "string" && a.indexOf("px") > -1 && (i = parseFloat(a)), { yP: i, clipped: s } } }, { key: "getX1X2", value: function (e, t) { var i, a = e === "x1" ? t.x : t.x2, s = this.w, r = this.annoCtx.invertAxis ? s.globals.minY : s.globals.minX, n = this.annoCtx.invertAxis ? s.globals.maxY : s.globals.maxX, o = this.annoCtx.invertAxis ? s.globals.yRange[0] : s.globals.xRange, h = !1; return i = this.annoCtx.inversedReversedAxis ? (n - a) / (o / s.globals.gridWidth) : (a - r) / (o / s.globals.gridWidth), s.config.xaxis.type !== "category" && !s.config.xaxis.convertedCatToNumeric || this.annoCtx.invertAxis || s.globals.dataFormatXNumeric || s.config.chart.sparkline.enabled || (i = this.getStringX(a)), typeof a == "string" && a.indexOf("px") > -1 && (i = parseFloat(a)), a == null && t.marker && (i = s.globals.gridWidth), t.seriesIndex !== void 0 && s.globals.barWidth && !this.annoCtx.invertAxis && (i = i - s.globals.barWidth / 2 * (s.globals.series.length - 1) + s.globals.barWidth * t.seriesIndex), i > s.globals.gridWidth ? (i = s.globals.gridWidth, h = !0) : i < 0 && (i = 0, h = !0), { x: i, clipped: h } } }, { key: "getStringX", value: function (e) { var t = this.w, i = e; t.config.xaxis.convertedCatToNumeric && t.globals.categoryLabels.length && (e = t.globals.categoryLabels.indexOf(e) + 1); var a = t.globals.labels.indexOf(e), s = t.globals.dom.baseEl.querySelector(".apexcharts-xaxis-texts-g text:nth-child(" + (a + 1) + ")"); return s && (i = parseFloat(s.getAttribute("x"))), i } }]), p }(), Xi = function () { function p(e) { F(this, p), this.w = e.w, this.annoCtx = e, this.invertAxis = this.annoCtx.invertAxis, this.helpers = new Be(this.annoCtx) } return R(p, [{ key: "addXaxisAnnotation", value: function (e, t, i) { var a, s = this.w, r = this.helpers.getX1X2("x1", e), n = r.x, o = r.clipped, h = !0, c = e.label.text, d = e.strokeDashArray; if (P.isNumber(n)) { if (e.x2 === null || e.x2 === void 0) { if (!o) { var g = this.annoCtx.graphics.drawLine(n + e.offsetX, 0 + e.offsetY, n + e.offsetX, s.globals.gridHeight + e.offsetY, e.borderColor, d, e.borderWidth); t.appendChild(g.node), e.id && g.node.classList.add(e.id) } } else { var f = this.helpers.getX1X2("x2", e); if (a = f.x, h = f.clipped, !o || !h) { if (a < n) { var x = n; n = a, a = x } var b = this.annoCtx.graphics.drawRect(n + e.offsetX, 0 + e.offsetY, a - n, s.globals.gridHeight + e.offsetY, 0, e.fillColor, e.opacity, 1, e.borderColor, d); b.node.classList.add("apexcharts-annotation-rect"), b.attr("clip-path", "url(#gridRectMask".concat(s.globals.cuid, ")")), t.appendChild(b.node), e.id && b.node.classList.add(e.id) } } if (!o || !h) { var v = this.annoCtx.graphics.getTextRects(c, parseFloat(e.label.style.fontSize)), y = e.label.position === "top" ? 4 : e.label.position === "center" ? s.globals.gridHeight / 2 + (e.label.orientation === "vertical" ? v.width / 2 : 0) : s.globals.gridHeight, w = this.annoCtx.graphics.drawText({ x: n + e.label.offsetX, y: y + e.label.offsetY - (e.label.orientation === "vertical" ? e.label.position === "top" ? v.width / 2 - 12 : -v.width / 2 : 0), text: c, textAnchor: e.label.textAnchor, fontSize: e.label.style.fontSize, fontFamily: e.label.style.fontFamily, fontWeight: e.label.style.fontWeight, foreColor: e.label.style.color, cssClass: "apexcharts-xaxis-annotation-label ".concat(e.label.style.cssClass, " ").concat(e.id ? e.id : "") }); w.attr({ rel: i }), t.appendChild(w.node), this.annoCtx.helpers.setOrientations(e, i) } } } }, { key: "drawXAxisAnnotations", value: function () { var e = this, t = this.w, i = this.annoCtx.graphics.group({ class: "apexcharts-xaxis-annotations" }); return t.config.annotations.xaxis.map(function (a, s) { e.addXaxisAnnotation(a, i.node, s) }), i } }]), p }(), K = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w, this.months31 = [1, 3, 5, 7, 8, 10, 12], this.months30 = [2, 4, 6, 9, 11], this.daysCntOfYear = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334] } return R(p, [{ key: "isValidDate", value: function (e) { return typeof e != "number" && !isNaN(this.parseDate(e)) } }, { key: "getTimeStamp", value: function (e) { return Date.parse(e) ? this.w.config.xaxis.labels.datetimeUTC ? new Date(new Date(e).toISOString().substr(0, 25)).getTime() : new Date(e).getTime() : e } }, { key: "getDate", value: function (e) { return this.w.config.xaxis.labels.datetimeUTC ? new Date(new Date(e).toUTCString()) : new Date(e) } }, { key: "parseDate", value: function (e) { var t = Date.parse(e); if (!isNaN(t)) return this.getTimeStamp(e); var i = Date.parse(e.replace(/-/g, "/").replace(/[a-z]+/gi, " ")); return i = this.getTimeStamp(i) } }, { key: "parseDateWithTimezone", value: function (e) { return Date.parse(e.replace(/-/g, "/").replace(/[a-z]+/gi, " ")) } }, { key: "formatDate", value: function (e, t) { var i = this.w.globals.locale, a = this.w.config.xaxis.labels.datetimeUTC, s = ["\0"].concat(te(i.months)), r = [""].concat(te(i.shortMonths)), n = [""].concat(te(i.days)), o = [""].concat(te(i.shortDays)); function h(S, L) { var C = S + ""; for (L = L || 2; C.length < L;)C = "0" + C; return C } var c = a ? e.getUTCFullYear() : e.getFullYear(); t = (t = (t = t.replace(/(^|[^\\])yyyy+/g, "$1" + c)).replace(/(^|[^\\])yy/g, "$1" + c.toString().substr(2, 2))).replace(/(^|[^\\])y/g, "$1" + c); var d = (a ? e.getUTCMonth() : e.getMonth()) + 1; t = (t = (t = (t = t.replace(/(^|[^\\])MMMM+/g, "$1" + s[0])).replace(/(^|[^\\])MMM/g, "$1" + r[0])).replace(/(^|[^\\])MM/g, "$1" + h(d))).replace(/(^|[^\\])M/g, "$1" + d); var g = a ? e.getUTCDate() : e.getDate(); t = (t = (t = (t = t.replace(/(^|[^\\])dddd+/g, "$1" + n[0])).replace(/(^|[^\\])ddd/g, "$1" + o[0])).replace(/(^|[^\\])dd/g, "$1" + h(g))).replace(/(^|[^\\])d/g, "$1" + g); var f = a ? e.getUTCHours() : e.getHours(), x = f > 12 ? f - 12 : f === 0 ? 12 : f; t = (t = (t = (t = t.replace(/(^|[^\\])HH+/g, "$1" + h(f))).replace(/(^|[^\\])H/g, "$1" + f)).replace(/(^|[^\\])hh+/g, "$1" + h(x))).replace(/(^|[^\\])h/g, "$1" + x); var b = a ? e.getUTCMinutes() : e.getMinutes(); t = (t = t.replace(/(^|[^\\])mm+/g, "$1" + h(b))).replace(/(^|[^\\])m/g, "$1" + b); var v = a ? e.getUTCSeconds() : e.getSeconds(); t = (t = t.replace(/(^|[^\\])ss+/g, "$1" + h(v))).replace(/(^|[^\\])s/g, "$1" + v); var y = a ? e.getUTCMilliseconds() : e.getMilliseconds(); t = t.replace(/(^|[^\\])fff+/g, "$1" + h(y, 3)), y = Math.round(y / 10), t = t.replace(/(^|[^\\])ff/g, "$1" + h(y)), y = Math.round(y / 10); var w = f < 12 ? "AM" : "PM"; t = (t = (t = t.replace(/(^|[^\\])f/g, "$1" + y)).replace(/(^|[^\\])TT+/g, "$1" + w)).replace(/(^|[^\\])T/g, "$1" + w.charAt(0)); var l = w.toLowerCase(); t = (t = t.replace(/(^|[^\\])tt+/g, "$1" + l)).replace(/(^|[^\\])t/g, "$1" + l.charAt(0)); var u = -e.getTimezoneOffset(), m = a || !u ? "Z" : u > 0 ? "+" : "-"; if (!a) { var A = (u = Math.abs(u)) % 60; m += h(Math.floor(u / 60)) + ":" + h(A) } t = t.replace(/(^|[^\\])K/g, "$1" + m); var k = (a ? e.getUTCDay() : e.getDay()) + 1; return t = (t = (t = (t = (t = t.replace(new RegExp(n[0], "g"), n[k])).replace(new RegExp(o[0], "g"), o[k])).replace(new RegExp(s[0], "g"), s[d])).replace(new RegExp(r[0], "g"), r[d])).replace(/\\(.)/g, "$1") } }, { key: "getTimeUnitsfromTimestamp", value: function (e, t, i) { var a = this.w; a.config.xaxis.min !== void 0 && (e = a.config.xaxis.min), a.config.xaxis.max !== void 0 && (t = a.config.xaxis.max); var s = this.getDate(e), r = this.getDate(t), n = this.formatDate(s, "yyyy MM dd HH mm ss fff").split(" "), o = this.formatDate(r, "yyyy MM dd HH mm ss fff").split(" "); return { minMillisecond: parseInt(n[6], 10), maxMillisecond: parseInt(o[6], 10), minSecond: parseInt(n[5], 10), maxSecond: parseInt(o[5], 10), minMinute: parseInt(n[4], 10), maxMinute: parseInt(o[4], 10), minHour: parseInt(n[3], 10), maxHour: parseInt(o[3], 10), minDate: parseInt(n[2], 10), maxDate: parseInt(o[2], 10), minMonth: parseInt(n[1], 10) - 1, maxMonth: parseInt(o[1], 10) - 1, minYear: parseInt(n[0], 10), maxYear: parseInt(o[0], 10) } } }, { key: "isLeapYear", value: function (e) { return e % 4 == 0 && e % 100 != 0 || e % 400 == 0 } }, { key: "calculcateLastDaysOfMonth", value: function (e, t, i) { return this.determineDaysOfMonths(e, t) - i } }, { key: "determineDaysOfYear", value: function (e) { var t = 365; return this.isLeapYear(e) && (t = 366), t } }, { key: "determineRemainingDaysOfYear", value: function (e, t, i) { var a = this.daysCntOfYear[t] + i; return t > 1 && this.isLeapYear() && a++, a } }, { key: "determineDaysOfMonths", value: function (e, t) { var i = 30; switch (e = P.monthMod(e), !0) { case this.months30.indexOf(e) > -1: e === 2 && (i = this.isLeapYear(t) ? 29 : 28); break; case this.months31.indexOf(e) > -1: default: i = 31 }return i } }]), p }(), ze = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w, this.tooltipKeyFormat = "dd MMM" } return R(p, [{ key: "xLabelFormat", value: function (e, t, i, a) { var s = this.w; if (s.config.xaxis.type === "datetime" && s.config.xaxis.labels.formatter === void 0 && s.config.tooltip.x.formatter === void 0) { var r = new K(this.ctx); return r.formatDate(r.getDate(t), s.config.tooltip.x.format) } return e(t, i, a) } }, { key: "defaultGeneralFormatter", value: function (e) { return Array.isArray(e) ? e.map(function (t) { return t }) : e } }, { key: "defaultYFormatter", value: function (e, t, i) { var a = this.w; if (P.isNumber(e)) if (a.globals.yValueDecimal !== 0) e = e.toFixed(t.decimalsInFloat !== void 0 ? t.decimalsInFloat : a.globals.yValueDecimal); else { var s = e.toFixed(0); e = e == s ? s : e.toFixed(1) } return e } }, { key: "setLabelFormatters", value: function () { var e = this, t = this.w; return t.globals.xaxisTooltipFormatter = function (i) { return e.defaultGeneralFormatter(i) }, t.globals.ttKeyFormatter = function (i) { return e.defaultGeneralFormatter(i) }, t.globals.ttZFormatter = function (i) { return i }, t.globals.legendFormatter = function (i) { return e.defaultGeneralFormatter(i) }, t.config.xaxis.labels.formatter !== void 0 ? t.globals.xLabelFormatter = t.config.xaxis.labels.formatter : t.globals.xLabelFormatter = function (i) { if (P.isNumber(i)) { if (!t.config.xaxis.convertedCatToNumeric && t.config.xaxis.type === "numeric") { if (P.isNumber(t.config.xaxis.decimalsInFloat)) return i.toFixed(t.config.xaxis.decimalsInFloat); var a = t.globals.maxX - t.globals.minX; return a > 0 && a < 100 ? i.toFixed(1) : i.toFixed(0) } return t.globals.isBarHorizontal && t.globals.maxY - t.globals.minYArr < 4 ? i.toFixed(1) : i.toFixed(0) } return i }, typeof t.config.tooltip.x.formatter == "function" ? t.globals.ttKeyFormatter = t.config.tooltip.x.formatter : t.globals.ttKeyFormatter = t.globals.xLabelFormatter, typeof t.config.xaxis.tooltip.formatter == "function" && (t.globals.xaxisTooltipFormatter = t.config.xaxis.tooltip.formatter), (Array.isArray(t.config.tooltip.y) || t.config.tooltip.y.formatter !== void 0) && (t.globals.ttVal = t.config.tooltip.y), t.config.tooltip.z.formatter !== void 0 && (t.globals.ttZFormatter = t.config.tooltip.z.formatter), t.config.legend.formatter !== void 0 && (t.globals.legendFormatter = t.config.legend.formatter), t.config.yaxis.forEach(function (i, a) { i.labels.formatter !== void 0 ? t.globals.yLabelFormatters[a] = i.labels.formatter : t.globals.yLabelFormatters[a] = function (s) { return t.globals.xyCharts ? Array.isArray(s) ? s.map(function (r) { return e.defaultYFormatter(r, i, a) }) : e.defaultYFormatter(s, i, a) : s } }), t.globals } }, { key: "heatmapLabelFormatters", value: function () { var e = this.w; if (e.config.chart.type === "heatmap") { e.globals.yAxisScale[0].result = e.globals.seriesNames.slice(); var t = e.globals.seriesNames.reduce(function (i, a) { return i.length > a.length ? i : a }, 0); e.globals.yAxisScale[0].niceMax = t, e.globals.yAxisScale[0].niceMin = t } } }]), p }(), ge = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w } return R(p, [{ key: "getLabel", value: function (e, t, i, a) { var s = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : [], r = arguments.length > 5 && arguments[5] !== void 0 ? arguments[5] : "12px", n = !(arguments.length > 6 && arguments[6] !== void 0) || arguments[6], o = this.w, h = e[a] === void 0 ? "" : e[a], c = h, d = o.globals.xLabelFormatter, g = o.config.xaxis.labels.formatter, f = !1, x = new ze(this.ctx), b = h; n && (c = x.xLabelFormat(d, h, b, { i: a, dateFormatter: new K(this.ctx).formatDate, w: o }), g !== void 0 && (c = g(h, e[a], { i: a, dateFormatter: new K(this.ctx).formatDate, w: o }))); var v, y; t.length > 0 ? (v = t[a].unit, y = null, t.forEach(function (m) { m.unit === "month" ? y = "year" : m.unit === "day" ? y = "month" : m.unit === "hour" ? y = "day" : m.unit === "minute" && (y = "hour") }), f = y === v, i = t[a].position, c = t[a].value) : o.config.xaxis.type === "datetime" && g === void 0 && (c = ""), c === void 0 && (c = ""), c = Array.isArray(c) ? c : c.toString(); var w = new X(this.ctx), l = {}; l = o.globals.rotateXLabels && n ? w.getTextRects(c, parseInt(r, 10), null, "rotate(".concat(o.config.xaxis.labels.rotate, " 0 0)"), !1) : w.getTextRects(c, parseInt(r, 10)); var u = !o.config.xaxis.labels.showDuplicates && this.ctx.timeScale; return !Array.isArray(c) && (String(c) === "NaN" || s.indexOf(c) >= 0 && u) && (c = ""), { x: i, text: c, textRect: l, isBold: f } } }, { key: "checkLabelBasedOnTickamount", value: function (e, t, i) { var a = this.w, s = a.config.xaxis.tickAmount; return s === "dataPoints" && (s = Math.round(a.globals.gridWidth / 120)), s > i || e % Math.round(i / (s + 1)) == 0 || (t.text = ""), t } }, { key: "checkForOverflowingLabels", value: function (e, t, i, a, s) { var r = this.w; if (e === 0 && r.globals.skipFirstTimelinelabel && (t.text = ""), e === i - 1 && r.globals.skipLastTimelinelabel && (t.text = ""), r.config.xaxis.labels.hideOverlappingLabels && a.length > 0) { var n = s[s.length - 1]; t.x < n.textRect.width / (r.globals.rotateXLabels ? Math.abs(r.config.xaxis.labels.rotate) / 12 : 1.01) + n.x && (t.text = "") } return t } }, { key: "checkForReversedLabels", value: function (e, t) { var i = this.w; return i.config.yaxis[e] && i.config.yaxis[e].reversed && t.reverse(), t } }, { key: "yAxisAllSeriesCollapsed", value: function (e) { var t = this.w.globals; return !t.seriesYAxisMap[e].some(function (i) { return t.collapsedSeriesIndices.indexOf(i) === -1 }) } }, { key: "translateYAxisIndex", value: function (e) { var t = this.w, i = t.globals, a = t.config.yaxis; return i.series.length > a.length || a.some(function (s) { return Array.isArray(s.seriesName) }) ? e : i.seriesYAxisReverseMap[e] } }, { key: "isYAxisHidden", value: function (e) { var t = this.w, i = t.config.yaxis[e]; if (!i.show || this.yAxisAllSeriesCollapsed(e)) return !0; if (!i.showForNullSeries) { var a = t.globals.seriesYAxisMap[e], s = new $(this.ctx); return a.every(function (r) { return s.isSeriesNull(r) }) } return !1 } }, { key: "getYAxisForeColor", value: function (e, t) { var i = this.w; return Array.isArray(e) && i.globals.yAxisScale[t] && this.ctx.theme.pushExtraColors(e, i.globals.yAxisScale[t].result.length, !1), e } }, { key: "drawYAxisTicks", value: function (e, t, i, a, s, r, n) { var o = this.w, h = new X(this.ctx), c = o.globals.translateY + o.config.yaxis[s].labels.offsetY; if (o.globals.isBarHorizontal ? c = 0 : o.config.chart.type === "heatmap" && (c += r / 2), a.show && t > 0) { o.config.yaxis[s].opposite === !0 && (e += a.width); for (var d = t; d >= 0; d--) { var g = h.drawLine(e + i.offsetX - a.width + a.offsetX, c + a.offsetY, e + i.offsetX + a.offsetX, c + a.offsetY, a.color); n.add(g), c += r } } } }]), p }(), Ei = function () { function p(e) { F(this, p), this.w = e.w, this.annoCtx = e, this.helpers = new Be(this.annoCtx), this.axesUtils = new ge(this.annoCtx) } return R(p, [{ key: "addYaxisAnnotation", value: function (e, t, i) { var a, s = this.w, r = e.strokeDashArray, n = this.helpers.getY1Y2("y1", e), o = n.yP, h = n.clipped, c = !0, d = !1, g = e.label.text; if (e.y2 === null || e.y2 === void 0) { if (!h) { d = !0; var f = this.annoCtx.graphics.drawLine(0 + e.offsetX, o + e.offsetY, this._getYAxisAnnotationWidth(e), o + e.offsetY, e.borderColor, r, e.borderWidth); t.appendChild(f.node), e.id && f.node.classList.add(e.id) } } else { if (a = (n = this.helpers.getY1Y2("y2", e)).yP, c = n.clipped, a > o) { var x = o; o = a, a = x } if (!h || !c) { d = !0; var b = this.annoCtx.graphics.drawRect(0 + e.offsetX, a + e.offsetY, this._getYAxisAnnotationWidth(e), o - a, 0, e.fillColor, e.opacity, 1, e.borderColor, r); b.node.classList.add("apexcharts-annotation-rect"), b.attr("clip-path", "url(#gridRectMask".concat(s.globals.cuid, ")")), t.appendChild(b.node), e.id && b.node.classList.add(e.id) } } if (d) { var v = e.label.position === "right" ? s.globals.gridWidth : e.label.position === "center" ? s.globals.gridWidth / 2 : 0, y = this.annoCtx.graphics.drawText({ x: v + e.label.offsetX, y: (a ?? o) + e.label.offsetY - 3, text: g, textAnchor: e.label.textAnchor, fontSize: e.label.style.fontSize, fontFamily: e.label.style.fontFamily, fontWeight: e.label.style.fontWeight, foreColor: e.label.style.color, cssClass: "apexcharts-yaxis-annotation-label ".concat(e.label.style.cssClass, " ").concat(e.id ? e.id : "") }); y.attr({ rel: i }), t.appendChild(y.node) } } }, { key: "_getYAxisAnnotationWidth", value: function (e) { var t = this.w; return t.globals.gridWidth, (e.width.indexOf("%") > -1 ? t.globals.gridWidth * parseInt(e.width, 10) / 100 : parseInt(e.width, 10)) + e.offsetX } }, { key: "drawYAxisAnnotations", value: function () { var e = this, t = this.w, i = this.annoCtx.graphics.group({ class: "apexcharts-yaxis-annotations" }); return t.config.annotations.yaxis.forEach(function (a, s) { a.yAxisIndex = e.axesUtils.translateYAxisIndex(a.yAxisIndex), e.axesUtils.isYAxisHidden(a.yAxisIndex) && e.axesUtils.yAxisAllSeriesCollapsed(a.yAxisIndex) || e.addYaxisAnnotation(a, i.node, s) }), i } }]), p }(), Yi = function () { function p(e) { F(this, p), this.w = e.w, this.annoCtx = e, this.helpers = new Be(this.annoCtx) } return R(p, [{ key: "addPointAnnotation", value: function (e, t, i) { if (!(this.w.globals.collapsedSeriesIndices.indexOf(e.seriesIndex) > -1)) { var a = this.helpers.getX1X2("x1", e), s = a.x, r = a.clipped, n = (a = this.helpers.getY1Y2("y1", e)).yP, o = a.clipped; if (P.isNumber(s) && !o && !r) { var h = { pSize: e.marker.size, pointStrokeWidth: e.marker.strokeWidth, pointFillColor: e.marker.fillColor, pointStrokeColor: e.marker.strokeColor, shape: e.marker.shape, pRadius: e.marker.radius, class: "apexcharts-point-annotation-marker ".concat(e.marker.cssClass, " ").concat(e.id ? e.id : "") }, c = this.annoCtx.graphics.drawMarker(s + e.marker.offsetX, n + e.marker.offsetY, h); t.appendChild(c.node); var d = e.label.text ? e.label.text : "", g = this.annoCtx.graphics.drawText({ x: s + e.label.offsetX, y: n + e.label.offsetY - e.marker.size - parseFloat(e.label.style.fontSize) / 1.6, text: d, textAnchor: e.label.textAnchor, fontSize: e.label.style.fontSize, fontFamily: e.label.style.fontFamily, fontWeight: e.label.style.fontWeight, foreColor: e.label.style.color, cssClass: "apexcharts-point-annotation-label ".concat(e.label.style.cssClass, " ").concat(e.id ? e.id : "") }); if (g.attr({ rel: i }), t.appendChild(g.node), e.customSVG.SVG) { var f = this.annoCtx.graphics.group({ class: "apexcharts-point-annotations-custom-svg " + e.customSVG.cssClass }); f.attr({ transform: "translate(".concat(s + e.customSVG.offsetX, ", ").concat(n + e.customSVG.offsetY, ")") }), f.node.innerHTML = e.customSVG.SVG, t.appendChild(f.node) } if (e.image.path) { var x = e.image.width ? e.image.width : 20, b = e.image.height ? e.image.height : 20; c = this.annoCtx.addImage({ x: s + e.image.offsetX - x / 2, y: n + e.image.offsetY - b / 2, width: x, height: b, path: e.image.path, appendTo: ".apexcharts-point-annotations" }) } e.mouseEnter && c.node.addEventListener("mouseenter", e.mouseEnter.bind(this, e)), e.mouseLeave && c.node.addEventListener("mouseleave", e.mouseLeave.bind(this, e)), e.click && c.node.addEventListener("click", e.click.bind(this, e)) } } } }, { key: "drawPointAnnotations", value: function () { var e = this, t = this.w, i = this.annoCtx.graphics.group({ class: "apexcharts-point-annotations" }); return t.config.annotations.points.map(function (a, s) { e.addPointAnnotation(a, i.node, s) }), i } }]), p }(), Xt = { name: "en", options: { months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], toolbar: { exportToSVG: "Download SVG", exportToPNG: "Download PNG", exportToCSV: "Download CSV", menu: "Menu", selection: "Selection", selectionZoom: "Selection Zoom", zoomIn: "Zoom In", zoomOut: "Zoom Out", pan: "Panning", reset: "Reset Zoom" } } }, ue = function () { function p() { F(this, p), this.yAxis = { show: !0, showAlways: !1, showForNullSeries: !0, seriesName: void 0, opposite: !1, reversed: !1, logarithmic: !1, logBase: 10, tickAmount: void 0, stepSize: void 0, forceNiceScale: !1, max: void 0, min: void 0, floating: !1, decimalsInFloat: void 0, labels: { show: !0, minWidth: 0, maxWidth: 160, offsetX: 0, offsetY: 0, align: void 0, rotate: 0, padding: 20, style: { colors: [], fontSize: "11px", fontWeight: 400, fontFamily: void 0, cssClass: "" }, formatter: void 0 }, axisBorder: { show: !1, color: "#e0e0e0", width: 1, offsetX: 0, offsetY: 0 }, axisTicks: { show: !1, color: "#e0e0e0", width: 6, offsetX: 0, offsetY: 0 }, title: { text: void 0, rotate: -90, offsetY: 0, offsetX: 0, style: { color: void 0, fontSize: "11px", fontWeight: 900, fontFamily: void 0, cssClass: "" } }, tooltip: { enabled: !1, offsetX: 0 }, crosshairs: { show: !0, position: "front", stroke: { color: "#b6b6b6", width: 1, dashArray: 0 } } }, this.pointAnnotation = { id: void 0, x: 0, y: null, yAxisIndex: 0, seriesIndex: void 0, mouseEnter: void 0, mouseLeave: void 0, click: void 0, marker: { size: 4, fillColor: "#fff", strokeWidth: 2, strokeColor: "#333", shape: "circle", offsetX: 0, offsetY: 0, cssClass: "" }, label: { borderColor: "#c2c2c2", borderWidth: 1, borderRadius: 2, text: void 0, textAnchor: "middle", offsetX: 0, offsetY: 0, mouseEnter: void 0, mouseLeave: void 0, click: void 0, style: { background: "#fff", color: void 0, fontSize: "11px", fontFamily: void 0, fontWeight: 400, cssClass: "", padding: { left: 5, right: 5, top: 2, bottom: 2 } } }, customSVG: { SVG: void 0, cssClass: void 0, offsetX: 0, offsetY: 0 }, image: { path: void 0, width: 20, height: 20, offsetX: 0, offsetY: 0 } }, this.yAxisAnnotation = { id: void 0, y: 0, y2: null, strokeDashArray: 1, fillColor: "#c2c2c2", borderColor: "#c2c2c2", borderWidth: 1, opacity: .3, offsetX: 0, offsetY: 0, width: "100%", yAxisIndex: 0, label: { borderColor: "#c2c2c2", borderWidth: 1, borderRadius: 2, text: void 0, textAnchor: "end", position: "right", offsetX: 0, offsetY: -3, mouseEnter: void 0, mouseLeave: void 0, click: void 0, style: { background: "#fff", color: void 0, fontSize: "11px", fontFamily: void 0, fontWeight: 400, cssClass: "", padding: { left: 5, right: 5, top: 2, bottom: 2 } } } }, this.xAxisAnnotation = { id: void 0, x: 0, x2: null, strokeDashArray: 1, fillColor: "#c2c2c2", borderColor: "#c2c2c2", borderWidth: 1, opacity: .3, offsetX: 0, offsetY: 0, label: { borderColor: "#c2c2c2", borderWidth: 1, borderRadius: 2, text: void 0, textAnchor: "middle", orientation: "vertical", position: "top", offsetX: 0, offsetY: 0, mouseEnter: void 0, mouseLeave: void 0, click: void 0, style: { background: "#fff", color: void 0, fontSize: "11px", fontFamily: void 0, fontWeight: 400, cssClass: "", padding: { left: 5, right: 5, top: 2, bottom: 2 } } } }, this.text = { x: 0, y: 0, text: "", textAnchor: "start", foreColor: void 0, fontSize: "13px", fontFamily: void 0, fontWeight: 400, appendTo: ".apexcharts-annotations", backgroundColor: "transparent", borderColor: "#c2c2c2", borderRadius: 0, borderWidth: 0, paddingLeft: 4, paddingRight: 4, paddingTop: 2, paddingBottom: 2 } } return R(p, [{ key: "init", value: function () { return { annotations: { yaxis: [this.yAxisAnnotation], xaxis: [this.xAxisAnnotation], points: [this.pointAnnotation], texts: [], images: [], shapes: [] }, chart: { animations: { enabled: !0, easing: "easeinout", speed: 800, animateGradually: { delay: 150, enabled: !0 }, dynamicAnimation: { enabled: !0, speed: 350 } }, background: "", locales: [Xt], defaultLocale: "en", dropShadow: { enabled: !1, enabledOnSeries: void 0, top: 2, left: 2, blur: 4, color: "#000", opacity: .35 }, events: { animationEnd: void 0, beforeMount: void 0, mounted: void 0, updated: void 0, click: void 0, mouseMove: void 0, mouseLeave: void 0, xAxisLabelClick: void 0, legendClick: void 0, markerClick: void 0, selection: void 0, dataPointSelection: void 0, dataPointMouseEnter: void 0, dataPointMouseLeave: void 0, beforeZoom: void 0, beforeResetZoom: void 0, zoomed: void 0, scrolled: void 0, brushScrolled: void 0 }, foreColor: "#373d3f", fontFamily: "Helvetica, Arial, sans-serif", height: "auto", parentHeightOffset: 15, redrawOnParentResize: !0, redrawOnWindowResize: !0, id: void 0, group: void 0, nonce: void 0, offsetX: 0, offsetY: 0, selection: { enabled: !1, type: "x", fill: { color: "#24292e", opacity: .1 }, stroke: { width: 1, color: "#24292e", opacity: .4, dashArray: 3 }, xaxis: { min: void 0, max: void 0 }, yaxis: { min: void 0, max: void 0 } }, sparkline: { enabled: !1 }, brush: { enabled: !1, autoScaleYaxis: !0, target: void 0, targets: void 0 }, stacked: !1, stackOnlyBar: !0, stackType: "normal", toolbar: { show: !0, offsetX: 0, offsetY: 0, tools: { download: !0, selection: !0, zoom: !0, zoomin: !0, zoomout: !0, pan: !0, reset: !0, customIcons: [] }, export: { csv: { filename: void 0, columnDelimiter: ",", headerCategory: "category", headerValue: "value", categoryFormatter: void 0, valueFormatter: void 0 }, png: { filename: void 0 }, svg: { filename: void 0 }, scale: void 0, width: void 0 }, autoSelected: "zoom" }, type: "line", width: "100%", zoom: { enabled: !0, type: "x", autoScaleYaxis: !1, allowMouseWheelZoom: !0, zoomedArea: { fill: { color: "#90CAF9", opacity: .4 }, stroke: { color: "#0D47A1", opacity: .4, width: 1 } } } }, plotOptions: { line: { isSlopeChart: !1 }, area: { fillTo: "origin" }, bar: { horizontal: !1, columnWidth: "70%", barHeight: "70%", distributed: !1, borderRadius: 0, borderRadiusApplication: "around", borderRadiusWhenStacked: "last", rangeBarOverlap: !0, rangeBarGroupRows: !1, hideZeroBarsWhenGrouped: !1, isDumbbell: !1, dumbbellColors: void 0, isFunnel: !1, isFunnel3d: !0, colors: { ranges: [], backgroundBarColors: [], backgroundBarOpacity: 1, backgroundBarRadius: 0 }, dataLabels: { position: "top", maxItems: 100, hideOverflowingLabels: !0, orientation: "horizontal", total: { enabled: !1, formatter: void 0, offsetX: 0, offsetY: 0, style: { color: "#373d3f", fontSize: "12px", fontFamily: void 0, fontWeight: 600 } } } }, bubble: { zScaling: !0, minBubbleRadius: void 0, maxBubbleRadius: void 0 }, candlestick: { colors: { upward: "#00B746", downward: "#EF403C" }, wick: { useFillColor: !0 } }, boxPlot: { colors: { upper: "#00E396", lower: "#008FFB" } }, heatmap: { radius: 2, enableShades: !0, shadeIntensity: .5, reverseNegativeShade: !1, distributed: !1, useFillColorAsStroke: !1, colorScale: { inverse: !1, ranges: [], min: void 0, max: void 0 } }, treemap: { enableShades: !0, shadeIntensity: .5, distributed: !1, reverseNegativeShade: !1, useFillColorAsStroke: !1, borderRadius: 4, dataLabels: { format: "scale" }, colorScale: { inverse: !1, ranges: [], min: void 0, max: void 0 } }, radialBar: { inverseOrder: !1, startAngle: 0, endAngle: 360, offsetX: 0, offsetY: 0, hollow: { margin: 5, size: "50%", background: "transparent", image: void 0, imageWidth: 150, imageHeight: 150, imageOffsetX: 0, imageOffsetY: 0, imageClipped: !0, position: "front", dropShadow: { enabled: !1, top: 0, left: 0, blur: 3, color: "#000", opacity: .5 } }, track: { show: !0, startAngle: void 0, endAngle: void 0, background: "#f2f2f2", strokeWidth: "97%", opacity: 1, margin: 5, dropShadow: { enabled: !1, top: 0, left: 0, blur: 3, color: "#000", opacity: .5 } }, dataLabels: { show: !0, name: { show: !0, fontSize: "16px", fontFamily: void 0, fontWeight: 600, color: void 0, offsetY: 0, formatter: function (e) { return e } }, value: { show: !0, fontSize: "14px", fontFamily: void 0, fontWeight: 400, color: void 0, offsetY: 16, formatter: function (e) { return e + "%" } }, total: { show: !1, label: "Total", fontSize: "16px", fontWeight: 600, fontFamily: void 0, color: void 0, formatter: function (e) { return e.globals.seriesTotals.reduce(function (t, i) { return t + i }, 0) / e.globals.series.length + "%" } } }, barLabels: { enabled: !1, offsetX: 0, offsetY: 0, useSeriesColors: !0, fontFamily: void 0, fontWeight: 600, fontSize: "16px", formatter: function (e) { return e }, onClick: void 0 } }, pie: { customScale: 1, offsetX: 0, offsetY: 0, startAngle: 0, endAngle: 360, expandOnClick: !0, dataLabels: { offset: 0, minAngleToShowLabel: 10 }, donut: { size: "65%", background: "transparent", labels: { show: !1, name: { show: !0, fontSize: "16px", fontFamily: void 0, fontWeight: 600, color: void 0, offsetY: -10, formatter: function (e) { return e } }, value: { show: !0, fontSize: "20px", fontFamily: void 0, fontWeight: 400, color: void 0, offsetY: 10, formatter: function (e) { return e } }, total: { show: !1, showAlways: !1, label: "Total", fontSize: "16px", fontWeight: 400, fontFamily: void 0, color: void 0, formatter: function (e) { return e.globals.seriesTotals.reduce(function (t, i) { return t + i }, 0) } } } } }, polarArea: { rings: { strokeWidth: 1, strokeColor: "#e8e8e8" }, spokes: { strokeWidth: 1, connectorColors: "#e8e8e8" } }, radar: { size: void 0, offsetX: 0, offsetY: 0, polygons: { strokeWidth: 1, strokeColors: "#e8e8e8", connectorColors: "#e8e8e8", fill: { colors: void 0 } } } }, colors: void 0, dataLabels: { enabled: !0, enabledOnSeries: void 0, formatter: function (e) { return e !== null ? e : "" }, textAnchor: "middle", distributed: !1, offsetX: 0, offsetY: 0, style: { fontSize: "12px", fontFamily: void 0, fontWeight: 600, colors: void 0 }, background: { enabled: !0, foreColor: "#fff", borderRadius: 2, padding: 4, opacity: .9, borderWidth: 1, borderColor: "#fff", dropShadow: { enabled: !1, top: 1, left: 1, blur: 1, color: "#000", opacity: .45 } }, dropShadow: { enabled: !1, top: 1, left: 1, blur: 1, color: "#000", opacity: .45 } }, fill: { type: "solid", colors: void 0, opacity: .85, gradient: { shade: "dark", type: "horizontal", shadeIntensity: .5, gradientToColors: void 0, inverseColors: !0, opacityFrom: 1, opacityTo: 1, stops: [0, 50, 100], colorStops: [] }, image: { src: [], width: void 0, height: void 0 }, pattern: { style: "squares", width: 6, height: 6, strokeWidth: 2 } }, forecastDataPoints: { count: 0, fillOpacity: .5, strokeWidth: void 0, dashArray: 4 }, grid: { show: !0, borderColor: "#e0e0e0", strokeDashArray: 0, position: "back", xaxis: { lines: { show: !1 } }, yaxis: { lines: { show: !0 } }, row: { colors: void 0, opacity: .5 }, column: { colors: void 0, opacity: .5 }, padding: { top: 0, right: 10, bottom: 0, left: 12 } }, labels: [], legend: { show: !0, showForSingleSeries: !1, showForNullSeries: !0, showForZeroSeries: !0, floating: !1, position: "bottom", horizontalAlign: "center", inverseOrder: !1, fontSize: "12px", fontFamily: void 0, fontWeight: 400, width: void 0, height: void 0, formatter: void 0, tooltipHoverFormatter: void 0, offsetX: -20, offsetY: 4, customLegendItems: [], labels: { colors: void 0, useSeriesColors: !1 }, markers: { size: 7, fillColors: void 0, strokeWidth: 1, shape: void 0, offsetX: 0, offsetY: 0, customHTML: void 0, onClick: void 0 }, itemMargin: { horizontal: 5, vertical: 4 }, onItemClick: { toggleDataSeries: !0 }, onItemHover: { highlightDataSeries: !0 } }, markers: { discrete: [], size: 0, colors: void 0, strokeColors: "#fff", strokeWidth: 2, strokeOpacity: .9, strokeDashArray: 0, fillOpacity: 1, shape: "circle", offsetX: 0, offsetY: 0, showNullDataPoints: !0, onClick: void 0, onDblClick: void 0, hover: { size: void 0, sizeOffset: 3 } }, noData: { text: void 0, align: "center", verticalAlign: "middle", offsetX: 0, offsetY: 0, style: { color: void 0, fontSize: "14px", fontFamily: void 0 } }, responsive: [], series: void 0, states: { normal: { filter: { type: "none", value: 0 } }, hover: { filter: { type: "lighten", value: .1 } }, active: { allowMultipleDataPointsSelection: !1, filter: { type: "darken", value: .5 } } }, title: { text: void 0, align: "left", margin: 5, offsetX: 0, offsetY: 0, floating: !1, style: { fontSize: "14px", fontWeight: 900, fontFamily: void 0, color: void 0 } }, subtitle: { text: void 0, align: "left", margin: 5, offsetX: 0, offsetY: 30, floating: !1, style: { fontSize: "12px", fontWeight: 400, fontFamily: void 0, color: void 0 } }, stroke: { show: !0, curve: "smooth", lineCap: "butt", width: 2, colors: void 0, dashArray: 0, fill: { type: "solid", colors: void 0, opacity: .85, gradient: { shade: "dark", type: "horizontal", shadeIntensity: .5, gradientToColors: void 0, inverseColors: !0, opacityFrom: 1, opacityTo: 1, stops: [0, 50, 100], colorStops: [] } } }, tooltip: { enabled: !0, enabledOnSeries: void 0, shared: !0, hideEmptySeries: !1, followCursor: !1, intersect: !1, inverseOrder: !1, custom: void 0, fillSeriesColor: !1, theme: "light", cssClass: "", style: { fontSize: "12px", fontFamily: void 0 }, onDatasetHover: { highlightDataSeries: !1 }, x: { show: !0, format: "dd MMM", formatter: void 0 }, y: { formatter: void 0, title: { formatter: function (e) { return e ? e + ": " : "" } } }, z: { formatter: void 0, title: "Size: " }, marker: { show: !0, fillColors: void 0 }, items: { display: "flex" }, fixed: { enabled: !1, position: "topRight", offsetX: 0, offsetY: 0 } }, xaxis: { type: "category", categories: [], convertedCatToNumeric: !1, offsetX: 0, offsetY: 0, overwriteCategories: void 0, labels: { show: !0, rotate: -45, rotateAlways: !1, hideOverlappingLabels: !0, trim: !1, minHeight: void 0, maxHeight: 120, showDuplicates: !0, style: { colors: [], fontSize: "12px", fontWeight: 400, fontFamily: void 0, cssClass: "" }, offsetX: 0, offsetY: 0, format: void 0, formatter: void 0, datetimeUTC: !0, datetimeFormatter: { year: "yyyy", month: "MMM 'yy", day: "dd MMM", hour: "HH:mm", minute: "HH:mm:ss", second: "HH:mm:ss" } }, group: { groups: [], style: { colors: [], fontSize: "12px", fontWeight: 400, fontFamily: void 0, cssClass: "" } }, axisBorder: { show: !0, color: "#e0e0e0", width: "100%", height: 1, offsetX: 0, offsetY: 0 }, axisTicks: { show: !0, color: "#e0e0e0", height: 6, offsetX: 0, offsetY: 0 }, stepSize: void 0, tickAmount: void 0, tickPlacement: "on", min: void 0, max: void 0, range: void 0, floating: !1, decimalsInFloat: void 0, position: "bottom", title: { text: void 0, offsetX: 0, offsetY: 0, style: { color: void 0, fontSize: "12px", fontWeight: 900, fontFamily: void 0, cssClass: "" } }, crosshairs: { show: !0, width: 1, position: "back", opacity: .9, stroke: { color: "#b6b6b6", width: 1, dashArray: 3 }, fill: { type: "solid", color: "#B1B9C4", gradient: { colorFrom: "#D8E3F0", colorTo: "#BED1E6", stops: [0, 100], opacityFrom: .4, opacityTo: .5 } }, dropShadow: { enabled: !1, left: 0, top: 0, blur: 1, opacity: .4 } }, tooltip: { enabled: !0, offsetY: 0, formatter: void 0, style: { fontSize: "12px", fontFamily: void 0 } } }, yaxis: this.yAxis, theme: { mode: "", palette: "palette1", monochrome: { enabled: !1, color: "#008FFB", shadeTo: "light", shadeIntensity: .65 } } } } }]), p }(), Fi = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w, this.graphics = new X(this.ctx), this.w.globals.isBarHorizontal && (this.invertAxis = !0), this.helpers = new Be(this), this.xAxisAnnotations = new Xi(this), this.yAxisAnnotations = new Ei(this), this.pointsAnnotations = new Yi(this), this.w.globals.isBarHorizontal && this.w.config.yaxis[0].reversed && (this.inversedReversedAxis = !0), this.xDivision = this.w.globals.gridWidth / this.w.globals.dataPoints } return R(p, [{ key: "drawAxesAnnotations", value: function () { var e = this.w; if (e.globals.axisCharts) { for (var t = this.yAxisAnnotations.drawYAxisAnnotations(), i = this.xAxisAnnotations.drawXAxisAnnotations(), a = this.pointsAnnotations.drawPointAnnotations(), s = e.config.chart.animations.enabled, r = [t, i, a], n = [i.node, t.node, a.node], o = 0; o < 3; o++)e.globals.dom.elGraphical.add(r[o]), !s || e.globals.resized || e.globals.dataChanged || e.config.chart.type !== "scatter" && e.config.chart.type !== "bubble" && e.globals.dataPoints > 1 && n[o].classList.add("apexcharts-element-hidden"), e.globals.delayedElements.push({ el: n[o], index: 0 }); this.helpers.annotationsBackground() } } }, { key: "drawImageAnnos", value: function () { var e = this; this.w.config.annotations.images.map(function (t, i) { e.addImage(t, i) }) } }, { key: "drawTextAnnos", value: function () { var e = this; this.w.config.annotations.texts.map(function (t, i) { e.addText(t, i) }) } }, { key: "addXaxisAnnotation", value: function (e, t, i) { this.xAxisAnnotations.addXaxisAnnotation(e, t, i) } }, { key: "addYaxisAnnotation", value: function (e, t, i) { this.yAxisAnnotations.addYaxisAnnotation(e, t, i) } }, { key: "addPointAnnotation", value: function (e, t, i) { this.pointsAnnotations.addPointAnnotation(e, t, i) } }, { key: "addText", value: function (e, t) { var i = e.x, a = e.y, s = e.text, r = e.textAnchor, n = e.foreColor, o = e.fontSize, h = e.fontFamily, c = e.fontWeight, d = e.cssClass, g = e.backgroundColor, f = e.borderWidth, x = e.strokeDashArray, b = e.borderRadius, v = e.borderColor, y = e.appendTo, w = y === void 0 ? ".apexcharts-svg" : y, l = e.paddingLeft, u = l === void 0 ? 4 : l, m = e.paddingRight, A = m === void 0 ? 4 : m, k = e.paddingBottom, S = k === void 0 ? 2 : k, L = e.paddingTop, C = L === void 0 ? 2 : L, I = this.w, z = this.graphics.drawText({ x: i, y: a, text: s, textAnchor: r || "start", fontSize: o || "12px", fontWeight: c || "regular", fontFamily: h || I.config.chart.fontFamily, foreColor: n || I.config.chart.foreColor, cssClass: d }), M = I.globals.dom.baseEl.querySelector(w); M && M.appendChild(z.node); var T = z.bbox(); if (s) { var E = this.graphics.drawRect(T.x - u, T.y - C, T.width + u + A, T.height + S + C, b, g || "transparent", 1, f, v, x); M.insertBefore(E.node, z.node) } } }, { key: "addImage", value: function (e, t) { var i = this.w, a = e.path, s = e.x, r = s === void 0 ? 0 : s, n = e.y, o = n === void 0 ? 0 : n, h = e.width, c = h === void 0 ? 20 : h, d = e.height, g = d === void 0 ? 20 : d, f = e.appendTo, x = f === void 0 ? ".apexcharts-svg" : f, b = i.globals.dom.Paper.image(a); b.size(c, g).move(r, o); var v = i.globals.dom.baseEl.querySelector(x); return v && v.appendChild(b.node), b } }, { key: "addXaxisAnnotationExternal", value: function (e, t, i) { return this.addAnnotationExternal({ params: e, pushToMemory: t, context: i, type: "xaxis", contextMethod: i.addXaxisAnnotation }), i } }, { key: "addYaxisAnnotationExternal", value: function (e, t, i) { return this.addAnnotationExternal({ params: e, pushToMemory: t, context: i, type: "yaxis", contextMethod: i.addYaxisAnnotation }), i } }, { key: "addPointAnnotationExternal", value: function (e, t, i) { return this.invertAxis === void 0 && (this.invertAxis = i.w.globals.isBarHorizontal), this.addAnnotationExternal({ params: e, pushToMemory: t, context: i, type: "point", contextMethod: i.addPointAnnotation }), i } }, { key: "addAnnotationExternal", value: function (e) { var t = e.params, i = e.pushToMemory, a = e.context, s = e.type, r = e.contextMethod, n = a, o = n.w, h = o.globals.dom.baseEl.querySelector(".apexcharts-".concat(s, "-annotations")), c = h.childNodes.length + 1, d = new ue, g = Object.assign({}, s === "xaxis" ? d.xAxisAnnotation : s === "yaxis" ? d.yAxisAnnotation : d.pointAnnotation), f = P.extend(g, t); switch (s) { case "xaxis": this.addXaxisAnnotation(f, h, c); break; case "yaxis": this.addYaxisAnnotation(f, h, c); break; case "point": this.addPointAnnotation(f, h, c) }var x = o.globals.dom.baseEl.querySelector(".apexcharts-".concat(s, "-annotations .apexcharts-").concat(s, "-annotation-label[rel='").concat(c, "']")), b = this.helpers.addBackgroundToAnno(x, f); return b && h.insertBefore(b.node, x), i && o.globals.memory.methodsToExec.push({ context: n, id: f.id ? f.id : P.randomId(), method: r, label: "addAnnotation", params: t }), a } }, { key: "clearAnnotations", value: function (e) { for (var t = e.w, i = t.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxis-annotations, .apexcharts-xaxis-annotations, .apexcharts-point-annotations"), a = t.globals.memory.methodsToExec.length - 1; a >= 0; a--)t.globals.memory.methodsToExec[a].label !== "addText" && t.globals.memory.methodsToExec[a].label !== "addAnnotation" || t.globals.memory.methodsToExec.splice(a, 1); i = P.listToArray(i), Array.prototype.forEach.call(i, function (s) { for (; s.firstChild;)s.removeChild(s.firstChild) }) } }, { key: "removeAnnotation", value: function (e, t) { var i = e.w, a = i.globals.dom.baseEl.querySelectorAll(".".concat(t)); a && (i.globals.memory.methodsToExec.map(function (s, r) { s.id === t && i.globals.memory.methodsToExec.splice(r, 1) }), Array.prototype.forEach.call(a, function (s) { s.parentElement.removeChild(s) })) } }]), p }(), Je = function (p) { var e, t = p.isTimeline, i = p.ctx, a = p.seriesIndex, s = p.dataPointIndex, r = p.y1, n = p.y2, o = p.w, h = o.globals.seriesRangeStart[a][s], c = o.globals.seriesRangeEnd[a][s], d = o.globals.labels[s], g = o.config.series[a].name ? o.config.series[a].name : "", f = o.globals.ttKeyFormatter, x = o.config.tooltip.y.title.formatter, b = { w: o, seriesIndex: a, dataPointIndex: s, start: h, end: c }; typeof x == "function" && (g = x(g, b)), (e = o.config.series[a].data[s]) !== null && e !== void 0 && e.x && (d = o.config.series[a].data[s].x), t || o.config.xaxis.type === "datetime" && (d = new ze(i).xLabelFormat(o.globals.ttKeyFormatter, d, d, { i: void 0, dateFormatter: new K(i).formatDate, w: o })), typeof f == "function" && (d = f(d, b)), Number.isFinite(r) && Number.isFinite(n) && (h = r, c = n); var v = "", y = "", w = o.globals.colors[a]; if (o.config.tooltip.x.formatter === void 0) if (o.config.xaxis.type === "datetime") { var l = new K(i); v = l.formatDate(l.getDate(h), o.config.tooltip.x.format), y = l.formatDate(l.getDate(c), o.config.tooltip.x.format) } else v = h, y = c; else v = o.config.tooltip.x.formatter(h), y = o.config.tooltip.x.formatter(c); return { start: h, end: c, startVal: v, endVal: y, ylabel: d, color: w, seriesName: g } }, Ke = function (p) { - var e = p.color, t = p.seriesName, i = p.ylabel, a = p.start, s = p.end, r = p.seriesIndex, n = p.dataPointIndex, o = p.ctx.tooltip.tooltipLabels.getFormatters(r); a = o.yLbFormatter(a), s = o.yLbFormatter(s); var h = o.yLbFormatter(p.w.globals.series[r][n]), c = ` - `.concat(a, ` +var Ci=Object.create;var vt=Object.defineProperty;var Li=Object.getOwnPropertyDescriptor;var Pi=Object.getOwnPropertyNames;var Mi=Object.getPrototypeOf,Ii=Object.prototype.hasOwnProperty;var yt=(p,e)=>()=>(e||p((e={exports:{}}).exports,e),e.exports);var Ti=(p,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of Pi(e))!Ii.call(p,a)&&a!==t&&vt(p,a,{get:()=>e[a],enumerable:!(i=Li(e,a))||i.enumerable});return p};var zi=(p,e,t)=>(t=p!=null?Ci(Mi(p)):{},Ti(e||!p||!p.__esModule?vt(t,"default",{value:p,enumerable:!0}):t,p));var jt=yt((ot,We)=>{"use strict";function at(p,e){(e==null||e>p.length)&&(e=p.length);for(var t=0,i=Array(e);t>16,n=i>>8&255,o=255&i;return"#"+(16777216+65536*(Math.round((a-r)*s)+r)+256*(Math.round((a-n)*s)+n)+(Math.round((a-o)*s)+o)).toString(16).slice(1)}},{key:"shadeColor",value:function(e,t){return p.isColorHex(t)?this.shadeHexColor(e,t):this.shadeRGBColor(e,t)}}],[{key:"bind",value:function(e,t){return function(){return e.apply(t,arguments)}}},{key:"isObject",value:function(e){return e&&J(e)==="object"&&!Array.isArray(e)&&e!=null}},{key:"is",value:function(e,t){return Object.prototype.toString.call(t)==="[object "+e+"]"}},{key:"listToArray",value:function(e){var t,i=[];for(t=0;t1&&arguments[1]!==void 0?arguments[1]:2;return Number.isInteger(e)?e:parseFloat(e.toPrecision(t))}},{key:"randomId",value:function(){return(Math.random()+1).toString(36).substring(4)}},{key:"noExponents",value:function(e){var t=String(e).split(/[eE]/);if(t.length===1)return t[0];var i="",a=e<0?"-":"",s=t[0].replace(".",""),r=Number(t[1])+1;if(r<0){for(i=a+"0.";r++;)i+="0";return i+s.replace(/^-/,"")}for(r-=s.length;r--;)i+="0";return s+i}},{key:"getDimensions",value:function(e){var t=getComputedStyle(e,null),i=e.clientHeight,a=e.clientWidth;return i-=parseFloat(t.paddingTop)+parseFloat(t.paddingBottom),[a-=parseFloat(t.paddingLeft)+parseFloat(t.paddingRight),i]}},{key:"getBoundingClientRect",value:function(e){var t=e.getBoundingClientRect();return{top:t.top,right:t.right,bottom:t.bottom,left:t.left,width:e.clientWidth,height:e.clientHeight,x:t.left,y:t.top}}},{key:"getLargestStringFromArr",value:function(e){return e.reduce(function(t,i){return Array.isArray(i)&&(i=i.reduce(function(a,s){return a.length>s.length?a:s})),t.length>i.length?t:i},0)}},{key:"hexToRgba",value:function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"#999999",t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:.6;e.substring(0,1)!=="#"&&(e="#999999");var i=e.replace("#","");i=i.match(new RegExp("(.{"+i.length/3+"})","g"));for(var a=0;a1&&arguments[1]!==void 0?arguments[1]:"x",i=e.toString().slice();return i=i.replace(/[` ~!@#$%^&*()|+\=?;:'",.<>{}[\]\\/]/gi,t)}},{key:"negToZero",value:function(e){return e<0?0:e}},{key:"moveIndexInArray",value:function(e,t,i){if(i>=e.length)for(var a=i-e.length+1;a--;)e.push(void 0);return e.splice(i,0,e.splice(t,1)[0]),e}},{key:"extractNumber",value:function(e){return parseFloat(e.replace(/[^\d.]*/g,""))}},{key:"findAncestor",value:function(e,t){for(;(e=e.parentElement)&&!e.classList.contains(t););return e}},{key:"setELstyles",value:function(e,t){for(var i in t)t.hasOwnProperty(i)&&(e.style.key=t[i])}},{key:"preciseAddition",value:function(e,t){var i=(String(e).split(".")[1]||"").length,a=(String(t).split(".")[1]||"").length,s=Math.pow(10,Math.max(i,a));return(Math.round(e*s)+Math.round(t*s))/s}},{key:"isNumber",value:function(e){return!isNaN(e)&&parseFloat(Number(e))===e&&!isNaN(parseInt(e,10))}},{key:"isFloat",value:function(e){return Number(e)===e&&e%1!=0}},{key:"isSafari",value:function(){return/^((?!chrome|android).)*safari/i.test(navigator.userAgent)}},{key:"isFirefox",value:function(){return navigator.userAgent.toLowerCase().indexOf("firefox")>-1}},{key:"isMsEdge",value:function(){var e=window.navigator.userAgent,t=e.indexOf("Edge/");return t>0&&parseInt(e.substring(t+5,e.indexOf(".",t)),10)}},{key:"getGCD",value:function(e,t){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:7,a=Math.pow(10,i-Math.floor(Math.log10(Math.max(e,t))));for(e=Math.round(Math.abs(e)*a),t=Math.round(Math.abs(t)*a);t;){var s=t;t=e%t,e=s}return e/a}},{key:"getPrimeFactors",value:function(e){for(var t=[],i=2;e>=2;)e%i==0?(t.push(i),e/=i):i++;return t}},{key:"mod",value:function(e,t){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:7,a=Math.pow(10,i-Math.floor(Math.log10(Math.max(e,t))));return(e=Math.round(Math.abs(e)*a))%(t=Math.round(Math.abs(t)*a))/a}}]),p}(),ve=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w,this.setEasingFunctions()}return R(p,[{key:"setEasingFunctions",value:function(){var e;if(!this.w.globals.easing){switch(this.w.config.chart.animations.easing){case"linear":e="-";break;case"easein":e="<";break;case"easeout":e=">";break;case"easeinout":default:e="<>";break;case"swing":e=function(t){var i=1.70158;return(t-=1)*t*((i+1)*t+i)+1};break;case"bounce":e=function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375};break;case"elastic":e=function(t){return t===!!t?t:Math.pow(2,-10*t)*Math.sin((t-.075)*(2*Math.PI)/.3)+1}}this.w.globals.easing=e}}},{key:"animateLine",value:function(e,t,i,a){e.attr(t).animate(a).attr(i)}},{key:"animateMarker",value:function(e,t,i,a){e.attr({opacity:0}).animate(t,i).attr({opacity:1}).afterAll(function(){a()})}},{key:"animateRect",value:function(e,t,i,a,s){e.attr(t).animate(a).attr(i).afterAll(function(){return s()})}},{key:"animatePathsGradually",value:function(e){var t=e.el,i=e.realIndex,a=e.j,s=e.fill,r=e.pathFrom,n=e.pathTo,o=e.speed,h=e.delay,c=this.w,d=0;c.config.chart.animations.animateGradually.enabled&&(d=c.config.chart.animations.animateGradually.delay),c.config.chart.animations.dynamicAnimation.enabled&&c.globals.dataChanged&&c.config.chart.type!=="bar"&&(d=0),this.morphSVG(t,i,a,c.config.chart.type!=="line"||c.globals.comboCharts?s:"stroke",r,n,o,h*d)}},{key:"showDelayedElements",value:function(){this.w.globals.delayedElements.forEach(function(e){var t=e.el;t.classList.remove("apexcharts-element-hidden"),t.classList.add("apexcharts-hidden-element-shown")})}},{key:"animationCompleted",value:function(e){var t=this.w;t.globals.animationEnded||(t.globals.animationEnded=!0,this.showDelayedElements(),typeof t.config.chart.events.animationEnd=="function"&&t.config.chart.events.animationEnd(this.ctx,{el:e,w:t}))}},{key:"morphSVG",value:function(e,t,i,a,s,r,n,o){var h=this,c=this.w;s||(s=e.attr("pathFrom")),r||(r=e.attr("pathTo"));var d=function(g){return c.config.chart.type==="radar"&&(n=1),"M 0 ".concat(c.globals.gridHeight)};(!s||s.indexOf("undefined")>-1||s.indexOf("NaN")>-1)&&(s=d()),(!r||r.indexOf("undefined")>-1||r.indexOf("NaN")>-1)&&(r=d()),c.globals.shouldAnimate||(n=1),e.plot(s).animate(1,c.globals.easing,o).plot(s).animate(n,c.globals.easing,o).plot(r).afterAll(function(){P.isNumber(i)?i===c.globals.series[c.globals.maxValsInArrayIndex].length-2&&c.globals.shouldAnimate&&h.animationCompleted(e):a!=="none"&&c.globals.shouldAnimate&&(!c.globals.comboCharts&&t===c.globals.series.length-1||c.globals.comboCharts)&&h.animationCompleted(e),h.showDelayedElements()})}}]),p}(),ie=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"getDefaultFilter",value:function(e,t){var i=this.w;e.unfilter(!0),new window.SVG.Filter().size("120%","180%","-5%","-40%"),i.config.states.normal.filter!=="none"?this.applyFilter(e,t,i.config.states.normal.filter.type,i.config.states.normal.filter.value):i.config.chart.dropShadow.enabled&&this.dropShadow(e,i.config.chart.dropShadow,t)}},{key:"addNormalFilter",value:function(e,t){var i=this.w;i.config.chart.dropShadow.enabled&&!e.node.classList.contains("apexcharts-marker")&&this.dropShadow(e,i.config.chart.dropShadow,t)}},{key:"addLightenFilter",value:function(e,t,i){var a=this,s=this.w,r=i.intensity;e.unfilter(!0),new window.SVG.Filter,e.filter(function(n){var o=s.config.chart.dropShadow;(o.enabled?a.addShadow(n,t,o):n).componentTransfer({rgb:{type:"linear",slope:1.5,intercept:r}})}),e.filterer.node.setAttribute("filterUnits","userSpaceOnUse"),this._scaleFilterSize(e.filterer.node)}},{key:"addDarkenFilter",value:function(e,t,i){var a=this,s=this.w,r=i.intensity;e.unfilter(!0),new window.SVG.Filter,e.filter(function(n){var o=s.config.chart.dropShadow;(o.enabled?a.addShadow(n,t,o):n).componentTransfer({rgb:{type:"linear",slope:r}})}),e.filterer.node.setAttribute("filterUnits","userSpaceOnUse"),this._scaleFilterSize(e.filterer.node)}},{key:"applyFilter",value:function(e,t,i){var a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:.5;switch(i){case"none":this.addNormalFilter(e,t);break;case"lighten":this.addLightenFilter(e,t,{intensity:a});break;case"darken":this.addDarkenFilter(e,t,{intensity:a})}}},{key:"addShadow",value:function(e,t,i){var a,s=this.w,r=i.blur,n=i.top,o=i.left,h=i.color,c=i.opacity;if(((a=s.config.chart.dropShadow.enabledOnSeries)===null||a===void 0?void 0:a.length)>0&&s.config.chart.dropShadow.enabledOnSeries.indexOf(t)===-1)return e;var d=e.flood(Array.isArray(h)?h[t]:h,c).composite(e.sourceAlpha,"in").offset(o,n).gaussianBlur(r).merge(e.source);return e.blend(e.source,d)}},{key:"dropShadow",value:function(e,t){var i,a,s=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,r=t.top,n=t.left,o=t.blur,h=t.color,c=t.opacity,d=t.noUserSpaceOnUse,g=this.w;return e.unfilter(!0),P.isMsEdge()&&g.config.chart.type==="radialBar"||((i=g.config.chart.dropShadow.enabledOnSeries)===null||i===void 0?void 0:i.length)>0&&((a=g.config.chart.dropShadow.enabledOnSeries)===null||a===void 0?void 0:a.indexOf(s))===-1||(h=Array.isArray(h)?h[s]:h,e.filter(function(f){var x=null;x=P.isSafari()||P.isFirefox()||P.isMsEdge()?f.flood(h,c).composite(f.sourceAlpha,"in").offset(n,r).gaussianBlur(o):f.flood(h,c).composite(f.sourceAlpha,"in").offset(n,r).gaussianBlur(o).merge(f.source),f.blend(f.source,x)}),d||e.filterer.node.setAttribute("filterUnits","userSpaceOnUse"),this._scaleFilterSize(e.filterer.node)),e}},{key:"setSelectionFilter",value:function(e,t,i){var a=this.w;if(a.globals.selectedDataPoints[t]!==void 0&&a.globals.selectedDataPoints[t].indexOf(i)>-1){e.node.setAttribute("selected",!0);var s=a.config.states.active.filter;s!=="none"&&this.applyFilter(e,t,s.type,s.value)}}},{key:"_scaleFilterSize",value:function(e){(function(t){for(var i in t)t.hasOwnProperty(i)&&e.setAttribute(i,t[i])})({width:"200%",height:"200%",x:"-50%",y:"-50%"})}}]),p}(),X=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"roundPathCorners",value:function(e,t){function i(S,L,C){var I=L.x-S.x,z=L.y-S.y,M=Math.sqrt(I*I+z*z);return a(S,L,Math.min(1,C/M))}function a(S,L,C){return{x:S.x+(L.x-S.x)*C,y:S.y+(L.y-S.y)*C}}function s(S,L){S.length>2&&(S[S.length-2]=L.x,S[S.length-1]=L.y)}function r(S){return{x:parseFloat(S[S.length-2]),y:parseFloat(S[S.length-1])}}e.indexOf("NaN")>-1&&(e="");var n=e.split(/[,\s]/).reduce(function(S,L){var C=L.match("([a-zA-Z])(.+)");return C?(S.push(C[1]),S.push(C[2])):S.push(L),S},[]).reduce(function(S,L){return parseFloat(L)==L&&S.length?S[S.length-1].push(L):S.push([L]),S},[]),o=[];if(n.length>1){var h=r(n[0]),c=null;n[n.length-1][0]=="Z"&&n[0].length>2&&(c=["L",h.x,h.y],n[n.length-1]=c),o.push(n[0]);for(var d=1;d2&&f[0]=="L"&&x.length>2&&x[0]=="L"){var b,v,y=r(g),w=r(f),l=r(x);b=i(w,y,t),v=i(w,l,t),s(f,b),f.origPoint=w,o.push(f);var u=a(b,w,.5),m=a(w,v,.5),A=["C",u.x,u.y,m.x,m.y,v.x,v.y];A.origPoint=w,o.push(A)}else o.push(f)}if(c){var k=r(o[o.length-1]);o.push(["Z"]),s(o[0],k)}}else o=n;return o.reduce(function(S,L){return S+L.join(" ")+" "},"")}},{key:"drawLine",value:function(e,t,i,a){var s=arguments.length>4&&arguments[4]!==void 0?arguments[4]:"#a8a8a8",r=arguments.length>5&&arguments[5]!==void 0?arguments[5]:0,n=arguments.length>6&&arguments[6]!==void 0?arguments[6]:null,o=arguments.length>7&&arguments[7]!==void 0?arguments[7]:"butt";return this.w.globals.dom.Paper.line().attr({x1:e,y1:t,x2:i,y2:a,stroke:s,"stroke-dasharray":r,"stroke-width":n,"stroke-linecap":o})}},{key:"drawRect",value:function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0,t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,s=arguments.length>4&&arguments[4]!==void 0?arguments[4]:0,r=arguments.length>5&&arguments[5]!==void 0?arguments[5]:"#fefefe",n=arguments.length>6&&arguments[6]!==void 0?arguments[6]:1,o=arguments.length>7&&arguments[7]!==void 0?arguments[7]:null,h=arguments.length>8&&arguments[8]!==void 0?arguments[8]:null,c=arguments.length>9&&arguments[9]!==void 0?arguments[9]:0,d=this.w.globals.dom.Paper.rect();return d.attr({x:e,y:t,width:i>0?i:0,height:a>0?a:0,rx:s,ry:s,opacity:n,"stroke-width":o!==null?o:0,stroke:h!==null?h:"none","stroke-dasharray":c}),d.node.setAttribute("fill",r),d}},{key:"drawPolygon",value:function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"#e1e1e1",i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"none";return this.w.globals.dom.Paper.polygon(e).attr({fill:a,stroke:t,"stroke-width":i})}},{key:"drawCircle",value:function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;e<0&&(e=0);var i=this.w.globals.dom.Paper.circle(2*e);return t!==null&&i.attr(t),i}},{key:"drawPath",value:function(e){var t=e.d,i=t===void 0?"":t,a=e.stroke,s=a===void 0?"#a8a8a8":a,r=e.strokeWidth,n=r===void 0?1:r,o=e.fill,h=e.fillOpacity,c=h===void 0?1:h,d=e.strokeOpacity,g=d===void 0?1:d,f=e.classes,x=e.strokeLinecap,b=x===void 0?null:x,v=e.strokeDashArray,y=v===void 0?0:v,w=this.w;return b===null&&(b=w.config.stroke.lineCap),(i.indexOf("undefined")>-1||i.indexOf("NaN")>-1)&&(i="M 0 ".concat(w.globals.gridHeight)),w.globals.dom.Paper.path(i).attr({fill:o,"fill-opacity":c,stroke:s,"stroke-opacity":g,"stroke-linecap":b,"stroke-width":n,"stroke-dasharray":y,class:f})}},{key:"group",value:function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:null,t=this.w.globals.dom.Paper.group();return e!==null&&t.attr(e),t}},{key:"move",value:function(e,t){var i=["M",e,t].join(" ");return i}},{key:"line",value:function(e,t){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:null,a=null;return i===null?a=[" L",e,t].join(" "):i==="H"?a=[" H",e].join(" "):i==="V"&&(a=[" V",t].join(" ")),a}},{key:"curve",value:function(e,t,i,a,s,r){var n=["C",e,t,i,a,s,r].join(" ");return n}},{key:"quadraticCurve",value:function(e,t,i,a){return["Q",e,t,i,a].join(" ")}},{key:"arc",value:function(e,t,i,a,s,r,n){var o="A";arguments.length>7&&arguments[7]!==void 0&&arguments[7]&&(o="a");var h=[o,e,t,i,a,s,r,n].join(" ");return h}},{key:"renderPaths",value:function(e){var t,i=e.j,a=e.realIndex,s=e.pathFrom,r=e.pathTo,n=e.stroke,o=e.strokeWidth,h=e.strokeLinecap,c=e.fill,d=e.animationDelay,g=e.initialSpeed,f=e.dataChangeSpeed,x=e.className,b=e.shouldClipToGrid,v=b===void 0||b,y=e.bindEventsOnPaths,w=y===void 0||y,l=e.drawShadow,u=l===void 0||l,m=this.w,A=new ie(this.ctx),k=new ve(this.ctx),S=this.w.config.chart.animations.enabled,L=S&&this.w.config.chart.animations.dynamicAnimation.enabled,C=!!(S&&!m.globals.resized||L&&m.globals.dataChanged&&m.globals.shouldAnimate);C?t=s:(t=r,m.globals.animationEnded=!0);var I=m.config.stroke.dashArray,z=0;z=Array.isArray(I)?I[a]:m.config.stroke.dashArray;var M=this.drawPath({d:t,stroke:n,strokeWidth:o,fill:c,fillOpacity:1,classes:x,strokeLinecap:h,strokeDashArray:z});if(M.attr("index",a),v&&M.attr({"clip-path":"url(#gridRectMask".concat(m.globals.cuid,")")}),m.config.states.normal.filter.type!=="none")A.getDefaultFilter(M,a);else if(m.config.chart.dropShadow.enabled&&u){var T=m.config.chart.dropShadow;A.dropShadow(M,T,a)}w&&(M.node.addEventListener("mouseenter",this.pathMouseEnter.bind(this,M)),M.node.addEventListener("mouseleave",this.pathMouseLeave.bind(this,M)),M.node.addEventListener("mousedown",this.pathMouseDown.bind(this,M))),M.attr({pathTo:r,pathFrom:s});var E={el:M,j:i,realIndex:a,pathFrom:s,pathTo:r,fill:c,strokeWidth:o,delay:d};return!S||m.globals.resized||m.globals.dataChanged?!m.globals.resized&&m.globals.dataChanged||k.showDelayedElements():k.animatePathsGradually(Y(Y({},E),{},{speed:g})),m.globals.dataChanged&&L&&C&&k.animatePathsGradually(Y(Y({},E),{},{speed:f})),M}},{key:"drawPattern",value:function(e,t,i){var a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"#a8a8a8",s=arguments.length>4&&arguments[4]!==void 0?arguments[4]:0;return this.w.globals.dom.Paper.pattern(t,i,function(r){e==="horizontalLines"?r.line(0,0,i,0).stroke({color:a,width:s+1}):e==="verticalLines"?r.line(0,0,0,t).stroke({color:a,width:s+1}):e==="slantedLines"?r.line(0,0,t,i).stroke({color:a,width:s}):e==="squares"?r.rect(t,i).fill("none").stroke({color:a,width:s}):e==="circles"&&r.circle(t).fill("none").stroke({color:a,width:s})})}},{key:"drawGradient",value:function(e,t,i,a,s){var r,n=arguments.length>5&&arguments[5]!==void 0?arguments[5]:null,o=arguments.length>6&&arguments[6]!==void 0?arguments[6]:null,h=arguments.length>7&&arguments[7]!==void 0?arguments[7]:null,c=arguments.length>8&&arguments[8]!==void 0?arguments[8]:0,d=this.w;t.length<9&&t.indexOf("#")===0&&(t=P.hexToRgba(t,a)),i.length<9&&i.indexOf("#")===0&&(i=P.hexToRgba(i,s));var g=0,f=1,x=1,b=null;o!==null&&(g=o[0]!==void 0?o[0]/100:0,f=o[1]!==void 0?o[1]/100:1,x=o[2]!==void 0?o[2]/100:1,b=o[3]!==void 0?o[3]/100:null);var v=!(d.config.chart.type!=="donut"&&d.config.chart.type!=="pie"&&d.config.chart.type!=="polarArea"&&d.config.chart.type!=="bubble");if(r=h===null||h.length===0?d.globals.dom.Paper.gradient(v?"radial":"linear",function(l){l.at(g,t,a),l.at(f,i,s),l.at(x,i,s),b!==null&&l.at(b,t,a)}):d.globals.dom.Paper.gradient(v?"radial":"linear",function(l){(Array.isArray(h[c])?h[c]:h).forEach(function(u){l.at(u.offset/100,u.color,u.opacity)})}),v){var y=d.globals.gridWidth/2,w=d.globals.gridHeight/2;d.config.chart.type!=="bubble"?r.attr({gradientUnits:"userSpaceOnUse",cx:y,cy:w,r:n}):r.attr({cx:.5,cy:.5,r:.8,fx:.2,fy:.2})}else e==="vertical"?r.from(0,0).to(0,1):e==="diagonal"?r.from(0,0).to(1,1):e==="horizontal"?r.from(0,1).to(1,1):e==="diagonal2"&&r.from(1,0).to(0,1);return r}},{key:"getTextBasedOnMaxWidth",value:function(e){var t=e.text,i=e.maxWidth,a=e.fontSize,s=e.fontFamily,r=this.getTextRects(t,a,s),n=r.width/t.length,o=Math.floor(i/n);return i-1){var o=i.globals.selectedDataPoints[s].indexOf(r);i.globals.selectedDataPoints[s].splice(o,1)}}else{if(!i.config.states.active.allowMultipleDataPointsSelection&&i.globals.selectedDataPoints.length>0){i.globals.selectedDataPoints=[];var h=i.globals.dom.Paper.select(".apexcharts-series path").members,c=i.globals.dom.Paper.select(".apexcharts-series circle, .apexcharts-series rect").members,d=function(x){Array.prototype.forEach.call(x,function(b){b.node.setAttribute("selected","false"),a.getDefaultFilter(b,s)})};d(h),d(c)}e.node.setAttribute("selected","true"),n="true",i.globals.selectedDataPoints[s]===void 0&&(i.globals.selectedDataPoints[s]=[]),i.globals.selectedDataPoints[s].push(r)}if(n==="true"){var g=i.config.states.active.filter;if(g!=="none")a.applyFilter(e,s,g.type,g.value);else if(i.config.states.hover.filter!=="none"&&!i.globals.isTouchDevice){var f=i.config.states.hover.filter;a.applyFilter(e,s,f.type,f.value)}}else i.config.states.active.filter.type!=="none"&&(i.config.states.hover.filter.type==="none"||i.globals.isTouchDevice?a.getDefaultFilter(e,s):(f=i.config.states.hover.filter,a.applyFilter(e,s,f.type,f.value)));typeof i.config.chart.events.dataPointSelection=="function"&&i.config.chart.events.dataPointSelection(t,this.ctx,{selectedDataPoints:i.globals.selectedDataPoints,seriesIndex:s,dataPointIndex:r,w:i}),t&&this.ctx.events.fireEvent("dataPointSelection",[t,this.ctx,{selectedDataPoints:i.globals.selectedDataPoints,seriesIndex:s,dataPointIndex:r,w:i}])}},{key:"rotateAroundCenter",value:function(e){var t={};return e&&typeof e.getBBox=="function"&&(t=e.getBBox()),{x:t.x+t.width/2,y:t.y+t.height/2}}},{key:"getTextRects",value:function(e,t,i,a){var s=!(arguments.length>4&&arguments[4]!==void 0)||arguments[4],r=this.w,n=this.drawText({x:-200,y:-200,text:e,textAnchor:"start",fontSize:t,fontFamily:i,foreColor:"#fff",opacity:0});a&&n.attr("transform",a),r.globals.dom.Paper.add(n);var o=n.bbox();return s||(o=n.node.getBoundingClientRect()),n.remove(),{width:o.width,height:o.height}}},{key:"placeTextWithEllipsis",value:function(e,t,i){if(typeof e.getComputedTextLength=="function"&&(e.textContent=t,t.length>0&&e.getComputedTextLength()>=i/1.1)){for(var a=t.length-3;a>0;a-=3)if(e.getSubStringLength(0,a)<=i/1.1)return void(e.textContent=t.substring(0,a)+"...");e.textContent="."}}}],[{key:"setAttrs",value:function(e,t){for(var i in t)t.hasOwnProperty(i)&&e.setAttribute(i,t[i])}}]),p}(),$=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"getStackedSeriesTotals",value:function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],t=this.w,i=[];if(t.globals.series.length===0)return i;for(var a=0;a0&&arguments[0]!==void 0?arguments[0]:null;return e===null?this.w.config.series.reduce(function(t,i){return t+i},0):this.w.globals.series[e].reduce(function(t,i){return t+i},0)}},{key:"getStackedSeriesTotalsByGroups",value:function(){var e=this,t=this.w,i=[];return t.globals.seriesGroups.forEach(function(a){var s=[];t.config.series.forEach(function(n,o){a.indexOf(t.globals.seriesNames[o])>-1&&s.push(o)});var r=t.globals.series.map(function(n,o){return s.indexOf(o)===-1?o:-1}).filter(function(n){return n!==-1});i.push(e.getStackedSeriesTotals(r))}),i}},{key:"setSeriesYAxisMappings",value:function(){var e=this.w.globals,t=this.w.config,i=[],a=[],s=[],r=e.series.length>t.yaxis.length||t.yaxis.some(function(d){return Array.isArray(d.seriesName)});t.series.forEach(function(d,g){s.push(g),a.push(null)}),t.yaxis.forEach(function(d,g){i[g]=[]});var n=[];t.yaxis.forEach(function(d,g){var f=!1;if(d.seriesName){var x=[];Array.isArray(d.seriesName)?x=d.seriesName:x.push(d.seriesName),x.forEach(function(b){t.series.forEach(function(v,y){if(v.name===b){var w=y;g===y||r?!r||s.indexOf(y)>-1?i[g].push([g,y]):console.warn("Series '"+v.name+"' referenced more than once in what looks like the new style. That is, when using either seriesName: [], or when there are more series than yaxes."):(i[y].push([y,g]),w=g),f=!0,(w=s.indexOf(w))!==-1&&s.splice(w,1)}})})}f||n.push(g)}),i=i.map(function(d,g){var f=[];return d.forEach(function(x){a[x[1]]=x[0],f.push(x[1])}),f});for(var o=t.yaxis.length-1,h=0;h0&&arguments[0]!==void 0?arguments[0]:null;return(e===null?this.w.config.series.filter(function(t){return t!==null}):this.w.config.series[e].data.filter(function(t){return t!==null})).length===0}},{key:"seriesHaveSameValues",value:function(e){return this.w.globals.series[e].every(function(t,i,a){return t===a[0]})}},{key:"getCategoryLabels",value:function(e){var t=this.w,i=e.slice();return t.config.xaxis.convertedCatToNumeric&&(i=e.map(function(a,s){return t.config.xaxis.labels.formatter(a-t.globals.minX+1)})),i}},{key:"getLargestSeries",value:function(){var e=this.w;e.globals.maxValsInArrayIndex=e.globals.series.map(function(t){return t.length}).indexOf(Math.max.apply(Math,e.globals.series.map(function(t){return t.length})))}},{key:"getLargestMarkerSize",value:function(){var e=this.w,t=0;return e.globals.markers.size.forEach(function(i){t=Math.max(t,i)}),e.config.markers.discrete&&e.config.markers.discrete.length&&e.config.markers.discrete.forEach(function(i){t=Math.max(t,i.size)}),t>0&&(t+=e.config.markers.hover.sizeOffset+1),e.globals.markers.largestSize=t,t}},{key:"getSeriesTotals",value:function(){var e=this.w;e.globals.seriesTotals=e.globals.series.map(function(t,i){var a=0;if(Array.isArray(t))for(var s=0;se&&i.globals.seriesX[s][n]0){var x=function(v,y){var w=s.config.yaxis[s.globals.seriesYAxisReverseMap[y]],l=v<0?-1:1;return v=Math.abs(v),w.logarithmic&&(v=a.getBaseLog(w.logBase,v)),-l*v/n[y]};if(r.isMultipleYAxis){h=[];for(var b=0;b0&&t.forEach(function(n){var o=[],h=[];e.i.forEach(function(c,d){s.config.series[c].group===n&&(o.push(e.series[d]),h.push(c))}),o.length>0&&r.push(a.draw(o,i,h))}),r}}],[{key:"checkComboSeries",value:function(e,t){var i=!1,a=0,s=0;return t===void 0&&(t="line"),e.length&&e[0].type!==void 0&&e.forEach(function(r){r.type!=="bar"&&r.type!=="column"&&r.type!=="candlestick"&&r.type!=="boxPlot"||a++,r.type!==void 0&&r.type!==t&&s++}),s>0&&(i=!0),{comboBarCount:a,comboCharts:i}}},{key:"extendArrayProps",value:function(e,t,i){var a,s,r,n,o,h;return(a=t)!==null&&a!==void 0&&a.yaxis&&(t=e.extendYAxis(t,i)),(s=t)!==null&&s!==void 0&&s.annotations&&(t.annotations.yaxis&&(t=e.extendYAxisAnnotations(t)),(r=t)!==null&&r!==void 0&&(n=r.annotations)!==null&&n!==void 0&&n.xaxis&&(t=e.extendXAxisAnnotations(t)),(o=t)!==null&&o!==void 0&&(h=o.annotations)!==null&&h!==void 0&&h.points&&(t=e.extendPointAnnotations(t))),t}}]),p}(),Be=function(){function p(e){F(this,p),this.w=e.w,this.annoCtx=e}return R(p,[{key:"setOrientations",value:function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null,i=this.w;if(e.label.orientation==="vertical"){var a=t!==null?t:0,s=i.globals.dom.baseEl.querySelector(".apexcharts-xaxis-annotations .apexcharts-xaxis-annotation-label[rel='".concat(a,"']"));if(s!==null){var r=s.getBoundingClientRect();s.setAttribute("x",parseFloat(s.getAttribute("x"))-r.height+4),e.label.position==="top"?s.setAttribute("y",parseFloat(s.getAttribute("y"))+r.width):s.setAttribute("y",parseFloat(s.getAttribute("y"))-r.width);var n=this.annoCtx.graphics.rotateAroundCenter(s),o=n.x,h=n.y;s.setAttribute("transform","rotate(-90 ".concat(o," ").concat(h,")"))}}}},{key:"addBackgroundToAnno",value:function(e,t){var i=this.w;if(!e||t.label.text===void 0||t.label.text!==void 0&&!String(t.label.text).trim())return null;var a=i.globals.dom.baseEl.querySelector(".apexcharts-grid").getBoundingClientRect(),s=e.getBoundingClientRect(),r=t.label.style.padding.left,n=t.label.style.padding.right,o=t.label.style.padding.top,h=t.label.style.padding.bottom;t.label.orientation==="vertical"&&(o=t.label.style.padding.left,h=t.label.style.padding.right,r=t.label.style.padding.top,n=t.label.style.padding.bottom);var c=s.left-a.left-r,d=s.top-a.top-o,g=this.annoCtx.graphics.drawRect(c-i.globals.barPadForNumericAxis,d,s.width+r+n,s.height+o+h,t.label.borderRadius,t.label.style.background,1,t.label.borderWidth,t.label.borderColor,0);return t.id&&g.node.classList.add(t.id),g}},{key:"annotationsBackground",value:function(){var e=this,t=this.w,i=function(a,s,r){var n=t.globals.dom.baseEl.querySelector(".apexcharts-".concat(r,"-annotations .apexcharts-").concat(r,"-annotation-label[rel='").concat(s,"']"));if(n){var o=n.parentNode,h=e.addBackgroundToAnno(n,a);h&&(o.insertBefore(h.node,n),a.label.mouseEnter&&h.node.addEventListener("mouseenter",a.label.mouseEnter.bind(e,a)),a.label.mouseLeave&&h.node.addEventListener("mouseleave",a.label.mouseLeave.bind(e,a)),a.label.click&&h.node.addEventListener("click",a.label.click.bind(e,a)))}};t.config.annotations.xaxis.map(function(a,s){i(a,s,"xaxis")}),t.config.annotations.yaxis.map(function(a,s){i(a,s,"yaxis")}),t.config.annotations.points.map(function(a,s){i(a,s,"point")})}},{key:"getY1Y2",value:function(e,t){var i,a=e==="y1"?t.y:t.y2,s=!1,r=this.w;if(this.annoCtx.invertAxis){var n=r.globals.labels;r.config.xaxis.convertedCatToNumeric&&(n=r.globals.categoryLabels);var o=n.indexOf(a),h=r.globals.dom.baseEl.querySelector(".apexcharts-yaxis-texts-g text:nth-child("+(o+1)+")");i=h?parseFloat(h.getAttribute("y")):(r.globals.gridHeight/n.length-1)*(o+1)-r.globals.barHeight,t.seriesIndex!==void 0&&r.globals.barHeight&&(i=i-r.globals.barHeight/2*(r.globals.series.length-1)+r.globals.barHeight*t.seriesIndex)}else{var c,d=r.globals.seriesYAxisMap[t.yAxisIndex][0];r.config.yaxis[t.yAxisIndex].logarithmic?c=(a=new $(this.annoCtx.ctx).getLogVal(r.config.yaxis[t.yAxisIndex].logBase,a,d))/r.globals.yLogRatio[d]:c=(a-r.globals.minYArr[d])/(r.globals.yRange[d]/r.globals.gridHeight),c>r.globals.gridHeight?(c=r.globals.gridHeight,s=!0):c<0&&(c=0,s=!0),i=r.globals.gridHeight-c,!t.marker||t.y!==void 0&&t.y!==null||(i=0),r.config.yaxis[t.yAxisIndex]&&r.config.yaxis[t.yAxisIndex].reversed&&(i=c)}return typeof a=="string"&&a.indexOf("px")>-1&&(i=parseFloat(a)),{yP:i,clipped:s}}},{key:"getX1X2",value:function(e,t){var i,a=e==="x1"?t.x:t.x2,s=this.w,r=this.annoCtx.invertAxis?s.globals.minY:s.globals.minX,n=this.annoCtx.invertAxis?s.globals.maxY:s.globals.maxX,o=this.annoCtx.invertAxis?s.globals.yRange[0]:s.globals.xRange,h=!1;return i=this.annoCtx.inversedReversedAxis?(n-a)/(o/s.globals.gridWidth):(a-r)/(o/s.globals.gridWidth),s.config.xaxis.type!=="category"&&!s.config.xaxis.convertedCatToNumeric||this.annoCtx.invertAxis||s.globals.dataFormatXNumeric||s.config.chart.sparkline.enabled||(i=this.getStringX(a)),typeof a=="string"&&a.indexOf("px")>-1&&(i=parseFloat(a)),a==null&&t.marker&&(i=s.globals.gridWidth),t.seriesIndex!==void 0&&s.globals.barWidth&&!this.annoCtx.invertAxis&&(i=i-s.globals.barWidth/2*(s.globals.series.length-1)+s.globals.barWidth*t.seriesIndex),i>s.globals.gridWidth?(i=s.globals.gridWidth,h=!0):i<0&&(i=0,h=!0),{x:i,clipped:h}}},{key:"getStringX",value:function(e){var t=this.w,i=e;t.config.xaxis.convertedCatToNumeric&&t.globals.categoryLabels.length&&(e=t.globals.categoryLabels.indexOf(e)+1);var a=t.globals.labels.indexOf(e),s=t.globals.dom.baseEl.querySelector(".apexcharts-xaxis-texts-g text:nth-child("+(a+1)+")");return s&&(i=parseFloat(s.getAttribute("x"))),i}}]),p}(),Xi=function(){function p(e){F(this,p),this.w=e.w,this.annoCtx=e,this.invertAxis=this.annoCtx.invertAxis,this.helpers=new Be(this.annoCtx)}return R(p,[{key:"addXaxisAnnotation",value:function(e,t,i){var a,s=this.w,r=this.helpers.getX1X2("x1",e),n=r.x,o=r.clipped,h=!0,c=e.label.text,d=e.strokeDashArray;if(P.isNumber(n)){if(e.x2===null||e.x2===void 0){if(!o){var g=this.annoCtx.graphics.drawLine(n+e.offsetX,0+e.offsetY,n+e.offsetX,s.globals.gridHeight+e.offsetY,e.borderColor,d,e.borderWidth);t.appendChild(g.node),e.id&&g.node.classList.add(e.id)}}else{var f=this.helpers.getX1X2("x2",e);if(a=f.x,h=f.clipped,!o||!h){if(a12?f-12:f===0?12:f;t=(t=(t=(t=t.replace(/(^|[^\\])HH+/g,"$1"+h(f))).replace(/(^|[^\\])H/g,"$1"+f)).replace(/(^|[^\\])hh+/g,"$1"+h(x))).replace(/(^|[^\\])h/g,"$1"+x);var b=a?e.getUTCMinutes():e.getMinutes();t=(t=t.replace(/(^|[^\\])mm+/g,"$1"+h(b))).replace(/(^|[^\\])m/g,"$1"+b);var v=a?e.getUTCSeconds():e.getSeconds();t=(t=t.replace(/(^|[^\\])ss+/g,"$1"+h(v))).replace(/(^|[^\\])s/g,"$1"+v);var y=a?e.getUTCMilliseconds():e.getMilliseconds();t=t.replace(/(^|[^\\])fff+/g,"$1"+h(y,3)),y=Math.round(y/10),t=t.replace(/(^|[^\\])ff/g,"$1"+h(y)),y=Math.round(y/10);var w=f<12?"AM":"PM";t=(t=(t=t.replace(/(^|[^\\])f/g,"$1"+y)).replace(/(^|[^\\])TT+/g,"$1"+w)).replace(/(^|[^\\])T/g,"$1"+w.charAt(0));var l=w.toLowerCase();t=(t=t.replace(/(^|[^\\])tt+/g,"$1"+l)).replace(/(^|[^\\])t/g,"$1"+l.charAt(0));var u=-e.getTimezoneOffset(),m=a||!u?"Z":u>0?"+":"-";if(!a){var A=(u=Math.abs(u))%60;m+=h(Math.floor(u/60))+":"+h(A)}t=t.replace(/(^|[^\\])K/g,"$1"+m);var k=(a?e.getUTCDay():e.getDay())+1;return t=(t=(t=(t=(t=t.replace(new RegExp(n[0],"g"),n[k])).replace(new RegExp(o[0],"g"),o[k])).replace(new RegExp(s[0],"g"),s[d])).replace(new RegExp(r[0],"g"),r[d])).replace(/\\(.)/g,"$1")}},{key:"getTimeUnitsfromTimestamp",value:function(e,t,i){var a=this.w;a.config.xaxis.min!==void 0&&(e=a.config.xaxis.min),a.config.xaxis.max!==void 0&&(t=a.config.xaxis.max);var s=this.getDate(e),r=this.getDate(t),n=this.formatDate(s,"yyyy MM dd HH mm ss fff").split(" "),o=this.formatDate(r,"yyyy MM dd HH mm ss fff").split(" ");return{minMillisecond:parseInt(n[6],10),maxMillisecond:parseInt(o[6],10),minSecond:parseInt(n[5],10),maxSecond:parseInt(o[5],10),minMinute:parseInt(n[4],10),maxMinute:parseInt(o[4],10),minHour:parseInt(n[3],10),maxHour:parseInt(o[3],10),minDate:parseInt(n[2],10),maxDate:parseInt(o[2],10),minMonth:parseInt(n[1],10)-1,maxMonth:parseInt(o[1],10)-1,minYear:parseInt(n[0],10),maxYear:parseInt(o[0],10)}}},{key:"isLeapYear",value:function(e){return e%4==0&&e%100!=0||e%400==0}},{key:"calculcateLastDaysOfMonth",value:function(e,t,i){return this.determineDaysOfMonths(e,t)-i}},{key:"determineDaysOfYear",value:function(e){var t=365;return this.isLeapYear(e)&&(t=366),t}},{key:"determineRemainingDaysOfYear",value:function(e,t,i){var a=this.daysCntOfYear[t]+i;return t>1&&this.isLeapYear()&&a++,a}},{key:"determineDaysOfMonths",value:function(e,t){var i=30;switch(e=P.monthMod(e),!0){case this.months30.indexOf(e)>-1:e===2&&(i=this.isLeapYear(t)?29:28);break;case this.months31.indexOf(e)>-1:default:i=31}return i}}]),p}(),ze=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w,this.tooltipKeyFormat="dd MMM"}return R(p,[{key:"xLabelFormat",value:function(e,t,i,a){var s=this.w;if(s.config.xaxis.type==="datetime"&&s.config.xaxis.labels.formatter===void 0&&s.config.tooltip.x.formatter===void 0){var r=new K(this.ctx);return r.formatDate(r.getDate(t),s.config.tooltip.x.format)}return e(t,i,a)}},{key:"defaultGeneralFormatter",value:function(e){return Array.isArray(e)?e.map(function(t){return t}):e}},{key:"defaultYFormatter",value:function(e,t,i){var a=this.w;if(P.isNumber(e))if(a.globals.yValueDecimal!==0)e=e.toFixed(t.decimalsInFloat!==void 0?t.decimalsInFloat:a.globals.yValueDecimal);else{var s=e.toFixed(0);e=e==s?s:e.toFixed(1)}return e}},{key:"setLabelFormatters",value:function(){var e=this,t=this.w;return t.globals.xaxisTooltipFormatter=function(i){return e.defaultGeneralFormatter(i)},t.globals.ttKeyFormatter=function(i){return e.defaultGeneralFormatter(i)},t.globals.ttZFormatter=function(i){return i},t.globals.legendFormatter=function(i){return e.defaultGeneralFormatter(i)},t.config.xaxis.labels.formatter!==void 0?t.globals.xLabelFormatter=t.config.xaxis.labels.formatter:t.globals.xLabelFormatter=function(i){if(P.isNumber(i)){if(!t.config.xaxis.convertedCatToNumeric&&t.config.xaxis.type==="numeric"){if(P.isNumber(t.config.xaxis.decimalsInFloat))return i.toFixed(t.config.xaxis.decimalsInFloat);var a=t.globals.maxX-t.globals.minX;return a>0&&a<100?i.toFixed(1):i.toFixed(0)}return t.globals.isBarHorizontal&&t.globals.maxY-t.globals.minYArr<4?i.toFixed(1):i.toFixed(0)}return i},typeof t.config.tooltip.x.formatter=="function"?t.globals.ttKeyFormatter=t.config.tooltip.x.formatter:t.globals.ttKeyFormatter=t.globals.xLabelFormatter,typeof t.config.xaxis.tooltip.formatter=="function"&&(t.globals.xaxisTooltipFormatter=t.config.xaxis.tooltip.formatter),(Array.isArray(t.config.tooltip.y)||t.config.tooltip.y.formatter!==void 0)&&(t.globals.ttVal=t.config.tooltip.y),t.config.tooltip.z.formatter!==void 0&&(t.globals.ttZFormatter=t.config.tooltip.z.formatter),t.config.legend.formatter!==void 0&&(t.globals.legendFormatter=t.config.legend.formatter),t.config.yaxis.forEach(function(i,a){i.labels.formatter!==void 0?t.globals.yLabelFormatters[a]=i.labels.formatter:t.globals.yLabelFormatters[a]=function(s){return t.globals.xyCharts?Array.isArray(s)?s.map(function(r){return e.defaultYFormatter(r,i,a)}):e.defaultYFormatter(s,i,a):s}}),t.globals}},{key:"heatmapLabelFormatters",value:function(){var e=this.w;if(e.config.chart.type==="heatmap"){e.globals.yAxisScale[0].result=e.globals.seriesNames.slice();var t=e.globals.seriesNames.reduce(function(i,a){return i.length>a.length?i:a},0);e.globals.yAxisScale[0].niceMax=t,e.globals.yAxisScale[0].niceMin=t}}}]),p}(),ge=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"getLabel",value:function(e,t,i,a){var s=arguments.length>4&&arguments[4]!==void 0?arguments[4]:[],r=arguments.length>5&&arguments[5]!==void 0?arguments[5]:"12px",n=!(arguments.length>6&&arguments[6]!==void 0)||arguments[6],o=this.w,h=e[a]===void 0?"":e[a],c=h,d=o.globals.xLabelFormatter,g=o.config.xaxis.labels.formatter,f=!1,x=new ze(this.ctx),b=h;n&&(c=x.xLabelFormat(d,h,b,{i:a,dateFormatter:new K(this.ctx).formatDate,w:o}),g!==void 0&&(c=g(h,e[a],{i:a,dateFormatter:new K(this.ctx).formatDate,w:o})));var v,y;t.length>0?(v=t[a].unit,y=null,t.forEach(function(m){m.unit==="month"?y="year":m.unit==="day"?y="month":m.unit==="hour"?y="day":m.unit==="minute"&&(y="hour")}),f=y===v,i=t[a].position,c=t[a].value):o.config.xaxis.type==="datetime"&&g===void 0&&(c=""),c===void 0&&(c=""),c=Array.isArray(c)?c:c.toString();var w=new X(this.ctx),l={};l=o.globals.rotateXLabels&&n?w.getTextRects(c,parseInt(r,10),null,"rotate(".concat(o.config.xaxis.labels.rotate," 0 0)"),!1):w.getTextRects(c,parseInt(r,10));var u=!o.config.xaxis.labels.showDuplicates&&this.ctx.timeScale;return!Array.isArray(c)&&(String(c)==="NaN"||s.indexOf(c)>=0&&u)&&(c=""),{x:i,text:c,textRect:l,isBold:f}}},{key:"checkLabelBasedOnTickamount",value:function(e,t,i){var a=this.w,s=a.config.xaxis.tickAmount;return s==="dataPoints"&&(s=Math.round(a.globals.gridWidth/120)),s>i||e%Math.round(i/(s+1))==0||(t.text=""),t}},{key:"checkForOverflowingLabels",value:function(e,t,i,a,s){var r=this.w;if(e===0&&r.globals.skipFirstTimelinelabel&&(t.text=""),e===i-1&&r.globals.skipLastTimelinelabel&&(t.text=""),r.config.xaxis.labels.hideOverlappingLabels&&a.length>0){var n=s[s.length-1];t.xa.length||a.some(function(s){return Array.isArray(s.seriesName)})?e:i.seriesYAxisReverseMap[e]}},{key:"isYAxisHidden",value:function(e){var t=this.w,i=t.config.yaxis[e];if(!i.show||this.yAxisAllSeriesCollapsed(e))return!0;if(!i.showForNullSeries){var a=t.globals.seriesYAxisMap[e],s=new $(this.ctx);return a.every(function(r){return s.isSeriesNull(r)})}return!1}},{key:"getYAxisForeColor",value:function(e,t){var i=this.w;return Array.isArray(e)&&i.globals.yAxisScale[t]&&this.ctx.theme.pushExtraColors(e,i.globals.yAxisScale[t].result.length,!1),e}},{key:"drawYAxisTicks",value:function(e,t,i,a,s,r,n){var o=this.w,h=new X(this.ctx),c=o.globals.translateY+o.config.yaxis[s].labels.offsetY;if(o.globals.isBarHorizontal?c=0:o.config.chart.type==="heatmap"&&(c+=r/2),a.show&&t>0){o.config.yaxis[s].opposite===!0&&(e+=a.width);for(var d=t;d>=0;d--){var g=h.drawLine(e+i.offsetX-a.width+a.offsetX,c+a.offsetY,e+i.offsetX+a.offsetX,c+a.offsetY,a.color);n.add(g),c+=r}}}}]),p}(),Ei=function(){function p(e){F(this,p),this.w=e.w,this.annoCtx=e,this.helpers=new Be(this.annoCtx),this.axesUtils=new ge(this.annoCtx)}return R(p,[{key:"addYaxisAnnotation",value:function(e,t,i){var a,s=this.w,r=e.strokeDashArray,n=this.helpers.getY1Y2("y1",e),o=n.yP,h=n.clipped,c=!0,d=!1,g=e.label.text;if(e.y2===null||e.y2===void 0){if(!h){d=!0;var f=this.annoCtx.graphics.drawLine(0+e.offsetX,o+e.offsetY,this._getYAxisAnnotationWidth(e),o+e.offsetY,e.borderColor,r,e.borderWidth);t.appendChild(f.node),e.id&&f.node.classList.add(e.id)}}else{if(a=(n=this.helpers.getY1Y2("y2",e)).yP,c=n.clipped,a>o){var x=o;o=a,a=x}if(!h||!c){d=!0;var b=this.annoCtx.graphics.drawRect(0+e.offsetX,a+e.offsetY,this._getYAxisAnnotationWidth(e),o-a,0,e.fillColor,e.opacity,1,e.borderColor,r);b.node.classList.add("apexcharts-annotation-rect"),b.attr("clip-path","url(#gridRectMask".concat(s.globals.cuid,")")),t.appendChild(b.node),e.id&&b.node.classList.add(e.id)}}if(d){var v=e.label.position==="right"?s.globals.gridWidth:e.label.position==="center"?s.globals.gridWidth/2:0,y=this.annoCtx.graphics.drawText({x:v+e.label.offsetX,y:(a??o)+e.label.offsetY-3,text:g,textAnchor:e.label.textAnchor,fontSize:e.label.style.fontSize,fontFamily:e.label.style.fontFamily,fontWeight:e.label.style.fontWeight,foreColor:e.label.style.color,cssClass:"apexcharts-yaxis-annotation-label ".concat(e.label.style.cssClass," ").concat(e.id?e.id:"")});y.attr({rel:i}),t.appendChild(y.node)}}},{key:"_getYAxisAnnotationWidth",value:function(e){var t=this.w;return t.globals.gridWidth,(e.width.indexOf("%")>-1?t.globals.gridWidth*parseInt(e.width,10)/100:parseInt(e.width,10))+e.offsetX}},{key:"drawYAxisAnnotations",value:function(){var e=this,t=this.w,i=this.annoCtx.graphics.group({class:"apexcharts-yaxis-annotations"});return t.config.annotations.yaxis.forEach(function(a,s){a.yAxisIndex=e.axesUtils.translateYAxisIndex(a.yAxisIndex),e.axesUtils.isYAxisHidden(a.yAxisIndex)&&e.axesUtils.yAxisAllSeriesCollapsed(a.yAxisIndex)||e.addYaxisAnnotation(a,i.node,s)}),i}}]),p}(),Yi=function(){function p(e){F(this,p),this.w=e.w,this.annoCtx=e,this.helpers=new Be(this.annoCtx)}return R(p,[{key:"addPointAnnotation",value:function(e,t,i){if(!(this.w.globals.collapsedSeriesIndices.indexOf(e.seriesIndex)>-1)){var a=this.helpers.getX1X2("x1",e),s=a.x,r=a.clipped,n=(a=this.helpers.getY1Y2("y1",e)).yP,o=a.clipped;if(P.isNumber(s)&&!o&&!r){var h={pSize:e.marker.size,pointStrokeWidth:e.marker.strokeWidth,pointFillColor:e.marker.fillColor,pointStrokeColor:e.marker.strokeColor,shape:e.marker.shape,pRadius:e.marker.radius,class:"apexcharts-point-annotation-marker ".concat(e.marker.cssClass," ").concat(e.id?e.id:"")},c=this.annoCtx.graphics.drawMarker(s+e.marker.offsetX,n+e.marker.offsetY,h);t.appendChild(c.node);var d=e.label.text?e.label.text:"",g=this.annoCtx.graphics.drawText({x:s+e.label.offsetX,y:n+e.label.offsetY-e.marker.size-parseFloat(e.label.style.fontSize)/1.6,text:d,textAnchor:e.label.textAnchor,fontSize:e.label.style.fontSize,fontFamily:e.label.style.fontFamily,fontWeight:e.label.style.fontWeight,foreColor:e.label.style.color,cssClass:"apexcharts-point-annotation-label ".concat(e.label.style.cssClass," ").concat(e.id?e.id:"")});if(g.attr({rel:i}),t.appendChild(g.node),e.customSVG.SVG){var f=this.annoCtx.graphics.group({class:"apexcharts-point-annotations-custom-svg "+e.customSVG.cssClass});f.attr({transform:"translate(".concat(s+e.customSVG.offsetX,", ").concat(n+e.customSVG.offsetY,")")}),f.node.innerHTML=e.customSVG.SVG,t.appendChild(f.node)}if(e.image.path){var x=e.image.width?e.image.width:20,b=e.image.height?e.image.height:20;c=this.annoCtx.addImage({x:s+e.image.offsetX-x/2,y:n+e.image.offsetY-b/2,width:x,height:b,path:e.image.path,appendTo:".apexcharts-point-annotations"})}e.mouseEnter&&c.node.addEventListener("mouseenter",e.mouseEnter.bind(this,e)),e.mouseLeave&&c.node.addEventListener("mouseleave",e.mouseLeave.bind(this,e)),e.click&&c.node.addEventListener("click",e.click.bind(this,e))}}}},{key:"drawPointAnnotations",value:function(){var e=this,t=this.w,i=this.annoCtx.graphics.group({class:"apexcharts-point-annotations"});return t.config.annotations.points.map(function(a,s){e.addPointAnnotation(a,i.node,s)}),i}}]),p}(),Xt={name:"en",options:{months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],toolbar:{exportToSVG:"Download SVG",exportToPNG:"Download PNG",exportToCSV:"Download CSV",menu:"Menu",selection:"Selection",selectionZoom:"Selection Zoom",zoomIn:"Zoom In",zoomOut:"Zoom Out",pan:"Panning",reset:"Reset Zoom"}}},ue=function(){function p(){F(this,p),this.yAxis={show:!0,showAlways:!1,showForNullSeries:!0,seriesName:void 0,opposite:!1,reversed:!1,logarithmic:!1,logBase:10,tickAmount:void 0,stepSize:void 0,forceNiceScale:!1,max:void 0,min:void 0,floating:!1,decimalsInFloat:void 0,labels:{show:!0,minWidth:0,maxWidth:160,offsetX:0,offsetY:0,align:void 0,rotate:0,padding:20,style:{colors:[],fontSize:"11px",fontWeight:400,fontFamily:void 0,cssClass:""},formatter:void 0},axisBorder:{show:!1,color:"#e0e0e0",width:1,offsetX:0,offsetY:0},axisTicks:{show:!1,color:"#e0e0e0",width:6,offsetX:0,offsetY:0},title:{text:void 0,rotate:-90,offsetY:0,offsetX:0,style:{color:void 0,fontSize:"11px",fontWeight:900,fontFamily:void 0,cssClass:""}},tooltip:{enabled:!1,offsetX:0},crosshairs:{show:!0,position:"front",stroke:{color:"#b6b6b6",width:1,dashArray:0}}},this.pointAnnotation={id:void 0,x:0,y:null,yAxisIndex:0,seriesIndex:void 0,mouseEnter:void 0,mouseLeave:void 0,click:void 0,marker:{size:4,fillColor:"#fff",strokeWidth:2,strokeColor:"#333",shape:"circle",offsetX:0,offsetY:0,cssClass:""},label:{borderColor:"#c2c2c2",borderWidth:1,borderRadius:2,text:void 0,textAnchor:"middle",offsetX:0,offsetY:0,mouseEnter:void 0,mouseLeave:void 0,click:void 0,style:{background:"#fff",color:void 0,fontSize:"11px",fontFamily:void 0,fontWeight:400,cssClass:"",padding:{left:5,right:5,top:2,bottom:2}}},customSVG:{SVG:void 0,cssClass:void 0,offsetX:0,offsetY:0},image:{path:void 0,width:20,height:20,offsetX:0,offsetY:0}},this.yAxisAnnotation={id:void 0,y:0,y2:null,strokeDashArray:1,fillColor:"#c2c2c2",borderColor:"#c2c2c2",borderWidth:1,opacity:.3,offsetX:0,offsetY:0,width:"100%",yAxisIndex:0,label:{borderColor:"#c2c2c2",borderWidth:1,borderRadius:2,text:void 0,textAnchor:"end",position:"right",offsetX:0,offsetY:-3,mouseEnter:void 0,mouseLeave:void 0,click:void 0,style:{background:"#fff",color:void 0,fontSize:"11px",fontFamily:void 0,fontWeight:400,cssClass:"",padding:{left:5,right:5,top:2,bottom:2}}}},this.xAxisAnnotation={id:void 0,x:0,x2:null,strokeDashArray:1,fillColor:"#c2c2c2",borderColor:"#c2c2c2",borderWidth:1,opacity:.3,offsetX:0,offsetY:0,label:{borderColor:"#c2c2c2",borderWidth:1,borderRadius:2,text:void 0,textAnchor:"middle",orientation:"vertical",position:"top",offsetX:0,offsetY:0,mouseEnter:void 0,mouseLeave:void 0,click:void 0,style:{background:"#fff",color:void 0,fontSize:"11px",fontFamily:void 0,fontWeight:400,cssClass:"",padding:{left:5,right:5,top:2,bottom:2}}}},this.text={x:0,y:0,text:"",textAnchor:"start",foreColor:void 0,fontSize:"13px",fontFamily:void 0,fontWeight:400,appendTo:".apexcharts-annotations",backgroundColor:"transparent",borderColor:"#c2c2c2",borderRadius:0,borderWidth:0,paddingLeft:4,paddingRight:4,paddingTop:2,paddingBottom:2}}return R(p,[{key:"init",value:function(){return{annotations:{yaxis:[this.yAxisAnnotation],xaxis:[this.xAxisAnnotation],points:[this.pointAnnotation],texts:[],images:[],shapes:[]},chart:{animations:{enabled:!0,easing:"easeinout",speed:800,animateGradually:{delay:150,enabled:!0},dynamicAnimation:{enabled:!0,speed:350}},background:"",locales:[Xt],defaultLocale:"en",dropShadow:{enabled:!1,enabledOnSeries:void 0,top:2,left:2,blur:4,color:"#000",opacity:.35},events:{animationEnd:void 0,beforeMount:void 0,mounted:void 0,updated:void 0,click:void 0,mouseMove:void 0,mouseLeave:void 0,xAxisLabelClick:void 0,legendClick:void 0,markerClick:void 0,selection:void 0,dataPointSelection:void 0,dataPointMouseEnter:void 0,dataPointMouseLeave:void 0,beforeZoom:void 0,beforeResetZoom:void 0,zoomed:void 0,scrolled:void 0,brushScrolled:void 0},foreColor:"#373d3f",fontFamily:"Helvetica, Arial, sans-serif",height:"auto",parentHeightOffset:15,redrawOnParentResize:!0,redrawOnWindowResize:!0,id:void 0,group:void 0,nonce:void 0,offsetX:0,offsetY:0,selection:{enabled:!1,type:"x",fill:{color:"#24292e",opacity:.1},stroke:{width:1,color:"#24292e",opacity:.4,dashArray:3},xaxis:{min:void 0,max:void 0},yaxis:{min:void 0,max:void 0}},sparkline:{enabled:!1},brush:{enabled:!1,autoScaleYaxis:!0,target:void 0,targets:void 0},stacked:!1,stackOnlyBar:!0,stackType:"normal",toolbar:{show:!0,offsetX:0,offsetY:0,tools:{download:!0,selection:!0,zoom:!0,zoomin:!0,zoomout:!0,pan:!0,reset:!0,customIcons:[]},export:{csv:{filename:void 0,columnDelimiter:",",headerCategory:"category",headerValue:"value",categoryFormatter:void 0,valueFormatter:void 0},png:{filename:void 0},svg:{filename:void 0},scale:void 0,width:void 0},autoSelected:"zoom"},type:"line",width:"100%",zoom:{enabled:!0,type:"x",autoScaleYaxis:!1,allowMouseWheelZoom:!0,zoomedArea:{fill:{color:"#90CAF9",opacity:.4},stroke:{color:"#0D47A1",opacity:.4,width:1}}}},plotOptions:{line:{isSlopeChart:!1},area:{fillTo:"origin"},bar:{horizontal:!1,columnWidth:"70%",barHeight:"70%",distributed:!1,borderRadius:0,borderRadiusApplication:"around",borderRadiusWhenStacked:"last",rangeBarOverlap:!0,rangeBarGroupRows:!1,hideZeroBarsWhenGrouped:!1,isDumbbell:!1,dumbbellColors:void 0,isFunnel:!1,isFunnel3d:!0,colors:{ranges:[],backgroundBarColors:[],backgroundBarOpacity:1,backgroundBarRadius:0},dataLabels:{position:"top",maxItems:100,hideOverflowingLabels:!0,orientation:"horizontal",total:{enabled:!1,formatter:void 0,offsetX:0,offsetY:0,style:{color:"#373d3f",fontSize:"12px",fontFamily:void 0,fontWeight:600}}}},bubble:{zScaling:!0,minBubbleRadius:void 0,maxBubbleRadius:void 0},candlestick:{colors:{upward:"#00B746",downward:"#EF403C"},wick:{useFillColor:!0}},boxPlot:{colors:{upper:"#00E396",lower:"#008FFB"}},heatmap:{radius:2,enableShades:!0,shadeIntensity:.5,reverseNegativeShade:!1,distributed:!1,useFillColorAsStroke:!1,colorScale:{inverse:!1,ranges:[],min:void 0,max:void 0}},treemap:{enableShades:!0,shadeIntensity:.5,distributed:!1,reverseNegativeShade:!1,useFillColorAsStroke:!1,borderRadius:4,dataLabels:{format:"scale"},colorScale:{inverse:!1,ranges:[],min:void 0,max:void 0}},radialBar:{inverseOrder:!1,startAngle:0,endAngle:360,offsetX:0,offsetY:0,hollow:{margin:5,size:"50%",background:"transparent",image:void 0,imageWidth:150,imageHeight:150,imageOffsetX:0,imageOffsetY:0,imageClipped:!0,position:"front",dropShadow:{enabled:!1,top:0,left:0,blur:3,color:"#000",opacity:.5}},track:{show:!0,startAngle:void 0,endAngle:void 0,background:"#f2f2f2",strokeWidth:"97%",opacity:1,margin:5,dropShadow:{enabled:!1,top:0,left:0,blur:3,color:"#000",opacity:.5}},dataLabels:{show:!0,name:{show:!0,fontSize:"16px",fontFamily:void 0,fontWeight:600,color:void 0,offsetY:0,formatter:function(e){return e}},value:{show:!0,fontSize:"14px",fontFamily:void 0,fontWeight:400,color:void 0,offsetY:16,formatter:function(e){return e+"%"}},total:{show:!1,label:"Total",fontSize:"16px",fontWeight:600,fontFamily:void 0,color:void 0,formatter:function(e){return e.globals.seriesTotals.reduce(function(t,i){return t+i},0)/e.globals.series.length+"%"}}},barLabels:{enabled:!1,offsetX:0,offsetY:0,useSeriesColors:!0,fontFamily:void 0,fontWeight:600,fontSize:"16px",formatter:function(e){return e},onClick:void 0}},pie:{customScale:1,offsetX:0,offsetY:0,startAngle:0,endAngle:360,expandOnClick:!0,dataLabels:{offset:0,minAngleToShowLabel:10},donut:{size:"65%",background:"transparent",labels:{show:!1,name:{show:!0,fontSize:"16px",fontFamily:void 0,fontWeight:600,color:void 0,offsetY:-10,formatter:function(e){return e}},value:{show:!0,fontSize:"20px",fontFamily:void 0,fontWeight:400,color:void 0,offsetY:10,formatter:function(e){return e}},total:{show:!1,showAlways:!1,label:"Total",fontSize:"16px",fontWeight:400,fontFamily:void 0,color:void 0,formatter:function(e){return e.globals.seriesTotals.reduce(function(t,i){return t+i},0)}}}}},polarArea:{rings:{strokeWidth:1,strokeColor:"#e8e8e8"},spokes:{strokeWidth:1,connectorColors:"#e8e8e8"}},radar:{size:void 0,offsetX:0,offsetY:0,polygons:{strokeWidth:1,strokeColors:"#e8e8e8",connectorColors:"#e8e8e8",fill:{colors:void 0}}}},colors:void 0,dataLabels:{enabled:!0,enabledOnSeries:void 0,formatter:function(e){return e!==null?e:""},textAnchor:"middle",distributed:!1,offsetX:0,offsetY:0,style:{fontSize:"12px",fontFamily:void 0,fontWeight:600,colors:void 0},background:{enabled:!0,foreColor:"#fff",borderRadius:2,padding:4,opacity:.9,borderWidth:1,borderColor:"#fff",dropShadow:{enabled:!1,top:1,left:1,blur:1,color:"#000",opacity:.45}},dropShadow:{enabled:!1,top:1,left:1,blur:1,color:"#000",opacity:.45}},fill:{type:"solid",colors:void 0,opacity:.85,gradient:{shade:"dark",type:"horizontal",shadeIntensity:.5,gradientToColors:void 0,inverseColors:!0,opacityFrom:1,opacityTo:1,stops:[0,50,100],colorStops:[]},image:{src:[],width:void 0,height:void 0},pattern:{style:"squares",width:6,height:6,strokeWidth:2}},forecastDataPoints:{count:0,fillOpacity:.5,strokeWidth:void 0,dashArray:4},grid:{show:!0,borderColor:"#e0e0e0",strokeDashArray:0,position:"back",xaxis:{lines:{show:!1}},yaxis:{lines:{show:!0}},row:{colors:void 0,opacity:.5},column:{colors:void 0,opacity:.5},padding:{top:0,right:10,bottom:0,left:12}},labels:[],legend:{show:!0,showForSingleSeries:!1,showForNullSeries:!0,showForZeroSeries:!0,floating:!1,position:"bottom",horizontalAlign:"center",inverseOrder:!1,fontSize:"12px",fontFamily:void 0,fontWeight:400,width:void 0,height:void 0,formatter:void 0,tooltipHoverFormatter:void 0,offsetX:-20,offsetY:4,customLegendItems:[],labels:{colors:void 0,useSeriesColors:!1},markers:{size:7,fillColors:void 0,strokeWidth:1,shape:void 0,offsetX:0,offsetY:0,customHTML:void 0,onClick:void 0},itemMargin:{horizontal:5,vertical:4},onItemClick:{toggleDataSeries:!0},onItemHover:{highlightDataSeries:!0}},markers:{discrete:[],size:0,colors:void 0,strokeColors:"#fff",strokeWidth:2,strokeOpacity:.9,strokeDashArray:0,fillOpacity:1,shape:"circle",offsetX:0,offsetY:0,showNullDataPoints:!0,onClick:void 0,onDblClick:void 0,hover:{size:void 0,sizeOffset:3}},noData:{text:void 0,align:"center",verticalAlign:"middle",offsetX:0,offsetY:0,style:{color:void 0,fontSize:"14px",fontFamily:void 0}},responsive:[],series:void 0,states:{normal:{filter:{type:"none",value:0}},hover:{filter:{type:"lighten",value:.1}},active:{allowMultipleDataPointsSelection:!1,filter:{type:"darken",value:.5}}},title:{text:void 0,align:"left",margin:5,offsetX:0,offsetY:0,floating:!1,style:{fontSize:"14px",fontWeight:900,fontFamily:void 0,color:void 0}},subtitle:{text:void 0,align:"left",margin:5,offsetX:0,offsetY:30,floating:!1,style:{fontSize:"12px",fontWeight:400,fontFamily:void 0,color:void 0}},stroke:{show:!0,curve:"smooth",lineCap:"butt",width:2,colors:void 0,dashArray:0,fill:{type:"solid",colors:void 0,opacity:.85,gradient:{shade:"dark",type:"horizontal",shadeIntensity:.5,gradientToColors:void 0,inverseColors:!0,opacityFrom:1,opacityTo:1,stops:[0,50,100],colorStops:[]}}},tooltip:{enabled:!0,enabledOnSeries:void 0,shared:!0,hideEmptySeries:!1,followCursor:!1,intersect:!1,inverseOrder:!1,custom:void 0,fillSeriesColor:!1,theme:"light",cssClass:"",style:{fontSize:"12px",fontFamily:void 0},onDatasetHover:{highlightDataSeries:!1},x:{show:!0,format:"dd MMM",formatter:void 0},y:{formatter:void 0,title:{formatter:function(e){return e?e+": ":""}}},z:{formatter:void 0,title:"Size: "},marker:{show:!0,fillColors:void 0},items:{display:"flex"},fixed:{enabled:!1,position:"topRight",offsetX:0,offsetY:0}},xaxis:{type:"category",categories:[],convertedCatToNumeric:!1,offsetX:0,offsetY:0,overwriteCategories:void 0,labels:{show:!0,rotate:-45,rotateAlways:!1,hideOverlappingLabels:!0,trim:!1,minHeight:void 0,maxHeight:120,showDuplicates:!0,style:{colors:[],fontSize:"12px",fontWeight:400,fontFamily:void 0,cssClass:""},offsetX:0,offsetY:0,format:void 0,formatter:void 0,datetimeUTC:!0,datetimeFormatter:{year:"yyyy",month:"MMM 'yy",day:"dd MMM",hour:"HH:mm",minute:"HH:mm:ss",second:"HH:mm:ss"}},group:{groups:[],style:{colors:[],fontSize:"12px",fontWeight:400,fontFamily:void 0,cssClass:""}},axisBorder:{show:!0,color:"#e0e0e0",width:"100%",height:1,offsetX:0,offsetY:0},axisTicks:{show:!0,color:"#e0e0e0",height:6,offsetX:0,offsetY:0},stepSize:void 0,tickAmount:void 0,tickPlacement:"on",min:void 0,max:void 0,range:void 0,floating:!1,decimalsInFloat:void 0,position:"bottom",title:{text:void 0,offsetX:0,offsetY:0,style:{color:void 0,fontSize:"12px",fontWeight:900,fontFamily:void 0,cssClass:""}},crosshairs:{show:!0,width:1,position:"back",opacity:.9,stroke:{color:"#b6b6b6",width:1,dashArray:3},fill:{type:"solid",color:"#B1B9C4",gradient:{colorFrom:"#D8E3F0",colorTo:"#BED1E6",stops:[0,100],opacityFrom:.4,opacityTo:.5}},dropShadow:{enabled:!1,left:0,top:0,blur:1,opacity:.4}},tooltip:{enabled:!0,offsetY:0,formatter:void 0,style:{fontSize:"12px",fontFamily:void 0}}},yaxis:this.yAxis,theme:{mode:"",palette:"palette1",monochrome:{enabled:!1,color:"#008FFB",shadeTo:"light",shadeIntensity:.65}}}}}]),p}(),Fi=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w,this.graphics=new X(this.ctx),this.w.globals.isBarHorizontal&&(this.invertAxis=!0),this.helpers=new Be(this),this.xAxisAnnotations=new Xi(this),this.yAxisAnnotations=new Ei(this),this.pointsAnnotations=new Yi(this),this.w.globals.isBarHorizontal&&this.w.config.yaxis[0].reversed&&(this.inversedReversedAxis=!0),this.xDivision=this.w.globals.gridWidth/this.w.globals.dataPoints}return R(p,[{key:"drawAxesAnnotations",value:function(){var e=this.w;if(e.globals.axisCharts){for(var t=this.yAxisAnnotations.drawYAxisAnnotations(),i=this.xAxisAnnotations.drawXAxisAnnotations(),a=this.pointsAnnotations.drawPointAnnotations(),s=e.config.chart.animations.enabled,r=[t,i,a],n=[i.node,t.node,a.node],o=0;o<3;o++)e.globals.dom.elGraphical.add(r[o]),!s||e.globals.resized||e.globals.dataChanged||e.config.chart.type!=="scatter"&&e.config.chart.type!=="bubble"&&e.globals.dataPoints>1&&n[o].classList.add("apexcharts-element-hidden"),e.globals.delayedElements.push({el:n[o],index:0});this.helpers.annotationsBackground()}}},{key:"drawImageAnnos",value:function(){var e=this;this.w.config.annotations.images.map(function(t,i){e.addImage(t,i)})}},{key:"drawTextAnnos",value:function(){var e=this;this.w.config.annotations.texts.map(function(t,i){e.addText(t,i)})}},{key:"addXaxisAnnotation",value:function(e,t,i){this.xAxisAnnotations.addXaxisAnnotation(e,t,i)}},{key:"addYaxisAnnotation",value:function(e,t,i){this.yAxisAnnotations.addYaxisAnnotation(e,t,i)}},{key:"addPointAnnotation",value:function(e,t,i){this.pointsAnnotations.addPointAnnotation(e,t,i)}},{key:"addText",value:function(e,t){var i=e.x,a=e.y,s=e.text,r=e.textAnchor,n=e.foreColor,o=e.fontSize,h=e.fontFamily,c=e.fontWeight,d=e.cssClass,g=e.backgroundColor,f=e.borderWidth,x=e.strokeDashArray,b=e.borderRadius,v=e.borderColor,y=e.appendTo,w=y===void 0?".apexcharts-svg":y,l=e.paddingLeft,u=l===void 0?4:l,m=e.paddingRight,A=m===void 0?4:m,k=e.paddingBottom,S=k===void 0?2:k,L=e.paddingTop,C=L===void 0?2:L,I=this.w,z=this.graphics.drawText({x:i,y:a,text:s,textAnchor:r||"start",fontSize:o||"12px",fontWeight:c||"regular",fontFamily:h||I.config.chart.fontFamily,foreColor:n||I.config.chart.foreColor,cssClass:d}),M=I.globals.dom.baseEl.querySelector(w);M&&M.appendChild(z.node);var T=z.bbox();if(s){var E=this.graphics.drawRect(T.x-u,T.y-C,T.width+u+A,T.height+S+C,b,g||"transparent",1,f,v,x);M.insertBefore(E.node,z.node)}}},{key:"addImage",value:function(e,t){var i=this.w,a=e.path,s=e.x,r=s===void 0?0:s,n=e.y,o=n===void 0?0:n,h=e.width,c=h===void 0?20:h,d=e.height,g=d===void 0?20:d,f=e.appendTo,x=f===void 0?".apexcharts-svg":f,b=i.globals.dom.Paper.image(a);b.size(c,g).move(r,o);var v=i.globals.dom.baseEl.querySelector(x);return v&&v.appendChild(b.node),b}},{key:"addXaxisAnnotationExternal",value:function(e,t,i){return this.addAnnotationExternal({params:e,pushToMemory:t,context:i,type:"xaxis",contextMethod:i.addXaxisAnnotation}),i}},{key:"addYaxisAnnotationExternal",value:function(e,t,i){return this.addAnnotationExternal({params:e,pushToMemory:t,context:i,type:"yaxis",contextMethod:i.addYaxisAnnotation}),i}},{key:"addPointAnnotationExternal",value:function(e,t,i){return this.invertAxis===void 0&&(this.invertAxis=i.w.globals.isBarHorizontal),this.addAnnotationExternal({params:e,pushToMemory:t,context:i,type:"point",contextMethod:i.addPointAnnotation}),i}},{key:"addAnnotationExternal",value:function(e){var t=e.params,i=e.pushToMemory,a=e.context,s=e.type,r=e.contextMethod,n=a,o=n.w,h=o.globals.dom.baseEl.querySelector(".apexcharts-".concat(s,"-annotations")),c=h.childNodes.length+1,d=new ue,g=Object.assign({},s==="xaxis"?d.xAxisAnnotation:s==="yaxis"?d.yAxisAnnotation:d.pointAnnotation),f=P.extend(g,t);switch(s){case"xaxis":this.addXaxisAnnotation(f,h,c);break;case"yaxis":this.addYaxisAnnotation(f,h,c);break;case"point":this.addPointAnnotation(f,h,c)}var x=o.globals.dom.baseEl.querySelector(".apexcharts-".concat(s,"-annotations .apexcharts-").concat(s,"-annotation-label[rel='").concat(c,"']")),b=this.helpers.addBackgroundToAnno(x,f);return b&&h.insertBefore(b.node,x),i&&o.globals.memory.methodsToExec.push({context:n,id:f.id?f.id:P.randomId(),method:r,label:"addAnnotation",params:t}),a}},{key:"clearAnnotations",value:function(e){for(var t=e.w,i=t.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxis-annotations, .apexcharts-xaxis-annotations, .apexcharts-point-annotations"),a=t.globals.memory.methodsToExec.length-1;a>=0;a--)t.globals.memory.methodsToExec[a].label!=="addText"&&t.globals.memory.methodsToExec[a].label!=="addAnnotation"||t.globals.memory.methodsToExec.splice(a,1);i=P.listToArray(i),Array.prototype.forEach.call(i,function(s){for(;s.firstChild;)s.removeChild(s.firstChild)})}},{key:"removeAnnotation",value:function(e,t){var i=e.w,a=i.globals.dom.baseEl.querySelectorAll(".".concat(t));a&&(i.globals.memory.methodsToExec.map(function(s,r){s.id===t&&i.globals.memory.methodsToExec.splice(r,1)}),Array.prototype.forEach.call(a,function(s){s.parentElement.removeChild(s)}))}}]),p}(),Je=function(p){var e,t=p.isTimeline,i=p.ctx,a=p.seriesIndex,s=p.dataPointIndex,r=p.y1,n=p.y2,o=p.w,h=o.globals.seriesRangeStart[a][s],c=o.globals.seriesRangeEnd[a][s],d=o.globals.labels[s],g=o.config.series[a].name?o.config.series[a].name:"",f=o.globals.ttKeyFormatter,x=o.config.tooltip.y.title.formatter,b={w:o,seriesIndex:a,dataPointIndex:s,start:h,end:c};typeof x=="function"&&(g=x(g,b)),(e=o.config.series[a].data[s])!==null&&e!==void 0&&e.x&&(d=o.config.series[a].data[s].x),t||o.config.xaxis.type==="datetime"&&(d=new ze(i).xLabelFormat(o.globals.ttKeyFormatter,d,d,{i:void 0,dateFormatter:new K(i).formatDate,w:o})),typeof f=="function"&&(d=f(d,b)),Number.isFinite(r)&&Number.isFinite(n)&&(h=r,c=n);var v="",y="",w=o.globals.colors[a];if(o.config.tooltip.x.formatter===void 0)if(o.config.xaxis.type==="datetime"){var l=new K(i);v=l.formatDate(l.getDate(h),o.config.tooltip.x.format),y=l.formatDate(l.getDate(c),o.config.tooltip.x.format)}else v=h,y=c;else v=o.config.tooltip.x.formatter(h),y=o.config.tooltip.x.formatter(c);return{start:h,end:c,startVal:v,endVal:y,ylabel:d,color:w,seriesName:g}},Ke=function(p){var e=p.color,t=p.seriesName,i=p.ylabel,a=p.start,s=p.end,r=p.seriesIndex,n=p.dataPointIndex,o=p.ctx.tooltip.tooltipLabels.getFormatters(r);a=o.yLbFormatter(a),s=o.yLbFormatter(s);var h=o.yLbFormatter(p.w.globals.series[r][n]),c=` + `.concat(a,` - - `).concat(s, ` - `); return '

" - }, Le = function () { - function p(e) { F(this, p), this.opts = e } return R(p, [{ key: "hideYAxis", value: function () { this.opts.yaxis[0].show = !1, this.opts.yaxis[0].title.text = "", this.opts.yaxis[0].axisBorder.show = !1, this.opts.yaxis[0].axisTicks.show = !1, this.opts.yaxis[0].floating = !0 } }, { key: "line", value: function () { return { chart: { animations: { easing: "swing" } }, dataLabels: { enabled: !1 }, stroke: { width: 5, curve: "straight" }, markers: { size: 0, hover: { sizeOffset: 6 } }, xaxis: { crosshairs: { width: 1 } } } } }, { key: "sparkline", value: function (e) { return this.hideYAxis(), P.extend(e, { grid: { show: !1, padding: { left: 0, right: 0, top: 0, bottom: 0 } }, legend: { show: !1 }, xaxis: { labels: { show: !1 }, tooltip: { enabled: !1 }, axisBorder: { show: !1 }, axisTicks: { show: !1 } }, chart: { toolbar: { show: !1 }, zoom: { enabled: !1 } }, dataLabels: { enabled: !1 } }) } }, { key: "slope", value: function () { return this.hideYAxis(), { chart: { toolbar: { show: !1 }, zoom: { enabled: !1 } }, dataLabels: { enabled: !0, formatter: function (e, t) { var i = t.w.config.series[t.seriesIndex].name; return e !== null ? i + ": " + e : "" }, background: { enabled: !1 }, offsetX: -5 }, grid: { xaxis: { lines: { show: !0 } }, yaxis: { lines: { show: !1 } } }, xaxis: { position: "top", labels: { style: { fontSize: 14, fontWeight: 900 } }, tooltip: { enabled: !1 }, crosshairs: { show: !1 } }, markers: { size: 8, hover: { sizeOffset: 1 } }, legend: { show: !1 }, tooltip: { shared: !1, intersect: !0, followCursor: !0 }, stroke: { width: 5, curve: "straight" } } } }, { key: "bar", value: function () { return { chart: { stacked: !1, animations: { easing: "swing" } }, plotOptions: { bar: { dataLabels: { position: "center" } } }, dataLabels: { style: { colors: ["#fff"] }, background: { enabled: !1 } }, stroke: { width: 0, lineCap: "round" }, fill: { opacity: .85 }, legend: { markers: { shape: "square" } }, tooltip: { shared: !1, intersect: !0 }, xaxis: { tooltip: { enabled: !1 }, tickPlacement: "between", crosshairs: { width: "barWidth", position: "back", fill: { type: "gradient" }, dropShadow: { enabled: !1 }, stroke: { width: 0 } } } } } }, { key: "funnel", value: function () { return this.hideYAxis(), Y(Y({}, this.bar()), {}, { chart: { animations: { easing: "linear", speed: 800, animateGradually: { enabled: !1 } } }, plotOptions: { bar: { horizontal: !0, borderRadiusApplication: "around", borderRadius: 0, dataLabels: { position: "center" } } }, grid: { show: !1, padding: { left: 0, right: 0 } }, xaxis: { labels: { show: !1 }, tooltip: { enabled: !1 }, axisBorder: { show: !1 }, axisTicks: { show: !1 } } }) } }, { key: "candlestick", value: function () { var e = this; return { stroke: { width: 1, colors: ["#333"] }, fill: { opacity: 1 }, dataLabels: { enabled: !1 }, tooltip: { shared: !0, custom: function (t) { var i = t.seriesIndex, a = t.dataPointIndex, s = t.w; return e._getBoxTooltip(s, i, a, ["Open", "High", "", "Low", "Close"], "candlestick") } }, states: { active: { filter: { type: "none" } } }, xaxis: { crosshairs: { width: 1 } } } } }, { key: "boxPlot", value: function () { var e = this; return { chart: { animations: { dynamicAnimation: { enabled: !1 } } }, stroke: { width: 1, colors: ["#24292e"] }, dataLabels: { enabled: !1 }, tooltip: { shared: !0, custom: function (t) { var i = t.seriesIndex, a = t.dataPointIndex, s = t.w; return e._getBoxTooltip(s, i, a, ["Minimum", "Q1", "Median", "Q3", "Maximum"], "boxPlot") } }, markers: { size: 7, strokeWidth: 1, strokeColors: "#111" }, xaxis: { crosshairs: { width: 1 } } } } }, { key: "rangeBar", value: function () { return { chart: { animations: { animateGradually: !1 } }, stroke: { width: 0, lineCap: "square" }, plotOptions: { bar: { borderRadius: 0, dataLabels: { position: "center" } } }, dataLabels: { enabled: !1, formatter: function (e, t) { t.ctx; var i = t.seriesIndex, a = t.dataPointIndex, s = t.w, r = function () { var n = s.globals.seriesRangeStart[i][a]; return s.globals.seriesRangeEnd[i][a] - n }; return s.globals.comboCharts ? s.config.series[i].type === "rangeBar" || s.config.series[i].type === "rangeArea" ? r() : e : r() }, background: { enabled: !1 }, style: { colors: ["#fff"] } }, markers: { size: 10 }, tooltip: { shared: !1, followCursor: !0, custom: function (e) { return e.w.config.plotOptions && e.w.config.plotOptions.bar && e.w.config.plotOptions.bar.horizontal ? function (t) { var i = Je(Y(Y({}, t), {}, { isTimeline: !0 })), a = i.color, s = i.seriesName, r = i.ylabel, n = i.startVal, o = i.endVal; return Ke(Y(Y({}, t), {}, { color: a, seriesName: s, ylabel: r, start: n, end: o })) }(e) : function (t) { var i = Je(t), a = i.color, s = i.seriesName, r = i.ylabel, n = i.start, o = i.end; return Ke(Y(Y({}, t), {}, { color: a, seriesName: s, ylabel: r, start: n, end: o })) }(e) } }, xaxis: { tickPlacement: "between", tooltip: { enabled: !1 }, crosshairs: { stroke: { width: 0 } } } } } }, { key: "dumbbell", value: function (e) { var t, i; return (t = e.plotOptions.bar) !== null && t !== void 0 && t.barHeight || (e.plotOptions.bar.barHeight = 2), (i = e.plotOptions.bar) !== null && i !== void 0 && i.columnWidth || (e.plotOptions.bar.columnWidth = 2), e } }, { key: "area", value: function () { return { stroke: { width: 4, fill: { type: "solid", gradient: { inverseColors: !1, shade: "light", type: "vertical", opacityFrom: .65, opacityTo: .5, stops: [0, 100, 100] } } }, fill: { type: "gradient", gradient: { inverseColors: !1, shade: "light", type: "vertical", opacityFrom: .65, opacityTo: .5, stops: [0, 100, 100] } }, markers: { size: 0, hover: { sizeOffset: 6 } }, tooltip: { followCursor: !1 } } } }, { key: "rangeArea", value: function () { return { stroke: { curve: "straight", width: 0 }, fill: { type: "solid", opacity: .6 }, markers: { size: 0 }, states: { hover: { filter: { type: "none" } }, active: { filter: { type: "none" } } }, tooltip: { intersect: !1, shared: !0, followCursor: !0, custom: function (e) { return function (t) { var i = Je(t), a = i.color, s = i.seriesName, r = i.ylabel, n = i.start, o = i.end; return Ke(Y(Y({}, t), {}, { color: a, seriesName: s, ylabel: r, start: n, end: o })) }(e) } } } } }, { key: "brush", value: function (e) { return P.extend(e, { chart: { toolbar: { autoSelected: "selection", show: !1 }, zoom: { enabled: !1 } }, dataLabels: { enabled: !1 }, stroke: { width: 1 }, tooltip: { enabled: !1 }, xaxis: { tooltip: { enabled: !1 } } }) } }, { key: "stacked100", value: function (e) { e.dataLabels = e.dataLabels || {}, e.dataLabels.formatter = e.dataLabels.formatter || void 0; var t = e.dataLabels.formatter; return e.yaxis.forEach(function (i, a) { e.yaxis[a].min = 0, e.yaxis[a].max = 100 }), e.chart.type === "bar" && (e.dataLabels.formatter = t || function (i) { return typeof i == "number" && i ? i.toFixed(0) + "%" : i }), e } }, { key: "stackedBars", value: function () { var e = this.bar(); return Y(Y({}, e), {}, { plotOptions: Y(Y({}, e.plotOptions), {}, { bar: Y(Y({}, e.plotOptions.bar), {}, { borderRadiusApplication: "end", borderRadiusWhenStacked: "last" }) }) }) } }, { key: "convertCatToNumeric", value: function (e) { return e.xaxis.convertedCatToNumeric = !0, e } }, { key: "convertCatToNumericXaxis", value: function (e, t, i) { e.xaxis.type = "numeric", e.xaxis.labels = e.xaxis.labels || {}, e.xaxis.labels.formatter = e.xaxis.labels.formatter || function (r) { return P.isNumber(r) ? Math.floor(r) : r }; var a = e.xaxis.labels.formatter, s = e.xaxis.categories && e.xaxis.categories.length ? e.xaxis.categories : e.labels; return i && i.length && (s = i.map(function (r) { return Array.isArray(r) ? r : String(r) })), s && s.length && (e.xaxis.labels.formatter = function (r) { return P.isNumber(r) ? a(s[Math.floor(r) - 1]) : a(r) }), e.xaxis.categories = [], e.labels = [], e.xaxis.tickAmount = e.xaxis.tickAmount || "dataPoints", e } }, { key: "bubble", value: function () { return { dataLabels: { style: { colors: ["#fff"] } }, tooltip: { shared: !1, intersect: !0 }, xaxis: { crosshairs: { width: 0 } }, fill: { type: "solid", gradient: { shade: "light", inverse: !0, shadeIntensity: .55, opacityFrom: .4, opacityTo: .8 } } } } }, { key: "scatter", value: function () { return { dataLabels: { enabled: !1 }, tooltip: { shared: !1, intersect: !0 }, markers: { size: 6, strokeWidth: 1, hover: { sizeOffset: 2 } } } } }, { key: "heatmap", value: function () { return { chart: { stacked: !1 }, fill: { opacity: 1 }, dataLabels: { style: { colors: ["#fff"] } }, stroke: { colors: ["#fff"] }, tooltip: { followCursor: !0, marker: { show: !1 }, x: { show: !1 } }, legend: { position: "top", markers: { shape: "square" } }, grid: { padding: { right: 20 } } } } }, { key: "treemap", value: function () { return { chart: { zoom: { enabled: !1 } }, dataLabels: { style: { fontSize: 14, fontWeight: 600, colors: ["#fff"] } }, stroke: { show: !0, width: 2, colors: ["#fff"] }, legend: { show: !1 }, fill: { opacity: 1, gradient: { stops: [0, 100] } }, tooltip: { followCursor: !0, x: { show: !1 } }, grid: { padding: { left: 0, right: 0 } }, xaxis: { crosshairs: { show: !1 }, tooltip: { enabled: !1 } } } } }, { key: "pie", value: function () { return { chart: { toolbar: { show: !1 } }, plotOptions: { pie: { donut: { labels: { show: !1 } } } }, dataLabels: { formatter: function (e) { return e.toFixed(1) + "%" }, style: { colors: ["#fff"] }, background: { enabled: !1 }, dropShadow: { enabled: !0 } }, stroke: { colors: ["#fff"] }, fill: { opacity: 1, gradient: { shade: "light", stops: [0, 100] } }, tooltip: { theme: "dark", fillSeriesColor: !0 }, legend: { position: "right" } } } }, { key: "donut", value: function () { return { chart: { toolbar: { show: !1 } }, dataLabels: { formatter: function (e) { return e.toFixed(1) + "%" }, style: { colors: ["#fff"] }, background: { enabled: !1 }, dropShadow: { enabled: !0 } }, stroke: { colors: ["#fff"] }, fill: { opacity: 1, gradient: { shade: "light", shadeIntensity: .35, stops: [80, 100], opacityFrom: 1, opacityTo: 1 } }, tooltip: { theme: "dark", fillSeriesColor: !0 }, legend: { position: "right" } } } }, { key: "polarArea", value: function () { return { chart: { toolbar: { show: !1 } }, dataLabels: { formatter: function (e) { return e.toFixed(1) + "%" }, enabled: !1 }, stroke: { show: !0, width: 2 }, fill: { opacity: .7 }, tooltip: { theme: "dark", fillSeriesColor: !0 }, legend: { position: "right" } } } }, { key: "radar", value: function () { return this.opts.yaxis[0].labels.offsetY = this.opts.yaxis[0].labels.offsetY ? this.opts.yaxis[0].labels.offsetY : 6, { dataLabels: { enabled: !1, style: { fontSize: "11px" } }, stroke: { width: 2 }, markers: { size: 5, strokeWidth: 1, strokeOpacity: 1 }, fill: { opacity: .2 }, tooltip: { shared: !1, intersect: !0, followCursor: !0 }, grid: { show: !1 }, xaxis: { labels: { formatter: function (e) { return e }, style: { colors: ["#a8a8a8"], fontSize: "11px" } }, tooltip: { enabled: !1 }, crosshairs: { show: !1 } } } } }, { key: "radialBar", value: function () { return { chart: { animations: { dynamicAnimation: { enabled: !0, speed: 800 } }, toolbar: { show: !1 } }, fill: { gradient: { shade: "dark", shadeIntensity: .4, inverseColors: !1, type: "diagonal2", opacityFrom: 1, opacityTo: 1, stops: [70, 98, 100] } }, legend: { show: !1, position: "right" }, tooltip: { enabled: !1, fillSeriesColor: !0 } } } }, { - key: "_getBoxTooltip", value: function (e, t, i, a, s) { - var r = e.globals.seriesCandleO[t][i], n = e.globals.seriesCandleH[t][i], o = e.globals.seriesCandleM[t][i], h = e.globals.seriesCandleL[t][i], c = e.globals.seriesCandleC[t][i]; return e.config.series[t].type && e.config.series[t].type !== s ? `
- `.concat(e.config.series[t].name ? e.config.series[t].name : "series-" + (t + 1), ": ").concat(e.globals.series[t][i], ` -
`) : '
') + "
".concat(a[0], ': ') + r + "
" + "
".concat(a[1], ': ') + n + "
" + (o ? "
".concat(a[2], ': ') + o + "
" : "") + "
".concat(a[3], ': ') + h + "
" + "
".concat(a[4], ': ') + c + "
" - } - }]), p - }(), Pe = function () { function p(e) { F(this, p), this.opts = e } return R(p, [{ key: "init", value: function (e) { var t = e.responsiveOverride, i = this.opts, a = new ue, s = new Le(i); this.chartType = i.chart.type, i = this.extendYAxis(i), i = this.extendAnnotations(i); var r = a.init(), n = {}; if (i && J(i) === "object") { var o, h, c, d, g, f, x, b, v, y, w = {}; w = ["line", "area", "bar", "candlestick", "boxPlot", "rangeBar", "rangeArea", "bubble", "scatter", "heatmap", "treemap", "pie", "polarArea", "donut", "radar", "radialBar"].indexOf(i.chart.type) !== -1 ? s[i.chart.type]() : s.line(), (o = i.plotOptions) !== null && o !== void 0 && (h = o.bar) !== null && h !== void 0 && h.isFunnel && (w = s.funnel()), i.chart.stacked && i.chart.type === "bar" && (w = s.stackedBars()), (c = i.chart.brush) !== null && c !== void 0 && c.enabled && (w = s.brush(w)), (d = i.plotOptions) !== null && d !== void 0 && (g = d.line) !== null && g !== void 0 && g.isSlopeChart && (w = s.slope()), i.chart.stacked && i.chart.stackType === "100%" && (i = s.stacked100(i)), (f = i.plotOptions) !== null && f !== void 0 && (x = f.bar) !== null && x !== void 0 && x.isDumbbell && (i = s.dumbbell(i)), this.checkForDarkTheme(window.Apex), this.checkForDarkTheme(i), i.xaxis = i.xaxis || window.Apex.xaxis || {}, t || (i.xaxis.convertedCatToNumeric = !1), ((b = (i = this.checkForCatToNumericXAxis(this.chartType, w, i)).chart.sparkline) !== null && b !== void 0 && b.enabled || (v = window.Apex.chart) !== null && v !== void 0 && (y = v.sparkline) !== null && y !== void 0 && y.enabled) && (w = s.sparkline(w)), n = P.extend(r, w) } var l = P.extend(n, window.Apex); return r = P.extend(l, i), r = this.handleUserInputErrors(r) } }, { key: "checkForCatToNumericXAxis", value: function (e, t, i) { var a, s, r = new Le(i), n = (e === "bar" || e === "boxPlot") && ((a = i.plotOptions) === null || a === void 0 || (s = a.bar) === null || s === void 0 ? void 0 : s.horizontal), o = e === "pie" || e === "polarArea" || e === "donut" || e === "radar" || e === "radialBar" || e === "heatmap", h = i.xaxis.type !== "datetime" && i.xaxis.type !== "numeric", c = i.xaxis.tickPlacement ? i.xaxis.tickPlacement : t.xaxis && t.xaxis.tickPlacement; return n || o || !h || c === "between" || (i = r.convertCatToNumeric(i)), i } }, { key: "extendYAxis", value: function (e, t) { var i = new ue; (e.yaxis === void 0 || !e.yaxis || Array.isArray(e.yaxis) && e.yaxis.length === 0) && (e.yaxis = {}), e.yaxis.constructor !== Array && window.Apex.yaxis && window.Apex.yaxis.constructor !== Array && (e.yaxis = P.extend(e.yaxis, window.Apex.yaxis)), e.yaxis.constructor !== Array ? e.yaxis = [P.extend(i.yAxis, e.yaxis)] : e.yaxis = P.extendArray(e.yaxis, i.yAxis); var a = !1; e.yaxis.forEach(function (r) { r.logarithmic && (a = !0) }); var s = e.series; return t && !s && (s = t.config.series), a && s.length !== e.yaxis.length && s.length && (e.yaxis = s.map(function (r, n) { if (r.name || (s[n].name = "series-".concat(n + 1)), e.yaxis[n]) return e.yaxis[n].seriesName = s[n].name, e.yaxis[n]; var o = P.extend(i.yAxis, e.yaxis[0]); return o.show = !1, o })), a && s.length > 1 && s.length !== e.yaxis.length && console.warn("A multi-series logarithmic chart should have equal number of series and y-axes"), e } }, { key: "extendAnnotations", value: function (e) { return e.annotations === void 0 && (e.annotations = {}, e.annotations.yaxis = [], e.annotations.xaxis = [], e.annotations.points = []), e = this.extendYAxisAnnotations(e), e = this.extendXAxisAnnotations(e), e = this.extendPointAnnotations(e) } }, { key: "extendYAxisAnnotations", value: function (e) { var t = new ue; return e.annotations.yaxis = P.extendArray(e.annotations.yaxis !== void 0 ? e.annotations.yaxis : [], t.yAxisAnnotation), e } }, { key: "extendXAxisAnnotations", value: function (e) { var t = new ue; return e.annotations.xaxis = P.extendArray(e.annotations.xaxis !== void 0 ? e.annotations.xaxis : [], t.xAxisAnnotation), e } }, { key: "extendPointAnnotations", value: function (e) { var t = new ue; return e.annotations.points = P.extendArray(e.annotations.points !== void 0 ? e.annotations.points : [], t.pointAnnotation), e } }, { key: "checkForDarkTheme", value: function (e) { e.theme && e.theme.mode === "dark" && (e.tooltip || (e.tooltip = {}), e.tooltip.theme !== "light" && (e.tooltip.theme = "dark"), e.chart.foreColor || (e.chart.foreColor = "#f6f7f8"), e.theme.palette || (e.theme.palette = "palette4")) } }, { key: "handleUserInputErrors", value: function (e) { var t = e; if (t.tooltip.shared && t.tooltip.intersect) throw new Error("tooltip.shared cannot be enabled when tooltip.intersect is true. Turn off any other option by setting it to false."); if (t.chart.type === "bar" && t.plotOptions.bar.horizontal) { if (t.yaxis.length > 1) throw new Error("Multiple Y Axis for bars are not supported. Switch to column chart by setting plotOptions.bar.horizontal=false"); t.yaxis[0].reversed && (t.yaxis[0].opposite = !0), t.xaxis.tooltip.enabled = !1, t.yaxis[0].tooltip.enabled = !1, t.chart.zoom.enabled = !1 } return t.chart.type !== "bar" && t.chart.type !== "rangeBar" || t.tooltip.shared && t.xaxis.crosshairs.width === "barWidth" && t.series.length > 1 && (t.xaxis.crosshairs.width = "tickWidth"), t.chart.type !== "candlestick" && t.chart.type !== "boxPlot" || t.yaxis[0].reversed && (console.warn("Reversed y-axis in ".concat(t.chart.type, " chart is not supported.")), t.yaxis[0].reversed = !1), t } }]), p }(), Et = function () { function p() { F(this, p) } return R(p, [{ key: "initGlobalVars", value: function (e) { e.series = [], e.seriesCandleO = [], e.seriesCandleH = [], e.seriesCandleM = [], e.seriesCandleL = [], e.seriesCandleC = [], e.seriesRangeStart = [], e.seriesRangeEnd = [], e.seriesRange = [], e.seriesPercent = [], e.seriesGoals = [], e.seriesX = [], e.seriesZ = [], e.seriesNames = [], e.seriesTotals = [], e.seriesLog = [], e.seriesColors = [], e.stackedSeriesTotals = [], e.seriesXvalues = [], e.seriesYvalues = [], e.labels = [], e.hasXaxisGroups = !1, e.groups = [], e.barGroups = [], e.lineGroups = [], e.areaGroups = [], e.hasSeriesGroups = !1, e.seriesGroups = [], e.categoryLabels = [], e.timescaleLabels = [], e.noLabelsProvided = !1, e.resizeTimer = null, e.selectionResizeTimer = null, e.lastWheelExecution = 0, e.delayedElements = [], e.pointsArray = [], e.dataLabelsRects = [], e.isXNumeric = !1, e.skipLastTimelinelabel = !1, e.skipFirstTimelinelabel = !1, e.isDataXYZ = !1, e.isMultiLineX = !1, e.isMultipleYAxis = !1, e.maxY = -Number.MAX_VALUE, e.minY = Number.MIN_VALUE, e.minYArr = [], e.maxYArr = [], e.maxX = -Number.MAX_VALUE, e.minX = Number.MAX_VALUE, e.initialMaxX = -Number.MAX_VALUE, e.initialMinX = Number.MAX_VALUE, e.maxDate = 0, e.minDate = Number.MAX_VALUE, e.minZ = Number.MAX_VALUE, e.maxZ = -Number.MAX_VALUE, e.minXDiff = Number.MAX_VALUE, e.yAxisScale = [], e.xAxisScale = null, e.xAxisTicksPositions = [], e.yLabelsCoords = [], e.yTitleCoords = [], e.barPadForNumericAxis = 0, e.padHorizontal = 0, e.xRange = 0, e.yRange = [], e.zRange = 0, e.dataPoints = 0, e.xTickAmount = 0, e.multiAxisTickAmount = 0 } }, { key: "globalVars", value: function (e) { return { chartID: null, cuid: null, events: { beforeMount: [], mounted: [], updated: [], clicked: [], selection: [], dataPointSelection: [], zoomed: [], scrolled: [] }, colors: [], clientX: null, clientY: null, fill: { colors: [] }, stroke: { colors: [] }, dataLabels: { style: { colors: [] } }, radarPolygons: { fill: { colors: [] } }, markers: { colors: [], size: e.markers.size, largestSize: 0 }, animationEnded: !1, isTouchDevice: "ontouchstart" in window || navigator.msMaxTouchPoints, isDirty: !1, isExecCalled: !1, initialConfig: null, initialSeries: [], lastXAxis: [], lastYAxis: [], columnSeries: null, labels: [], timescaleLabels: [], noLabelsProvided: !1, allSeriesCollapsed: !1, collapsedSeries: [], collapsedSeriesIndices: [], ancillaryCollapsedSeries: [], ancillaryCollapsedSeriesIndices: [], risingSeries: [], dataFormatXNumeric: !1, capturedSeriesIndex: -1, capturedDataPointIndex: -1, selectedDataPoints: [], goldenPadding: 35, invalidLogScale: !1, ignoreYAxisIndexes: [], maxValsInArrayIndex: 0, radialSize: 0, selection: void 0, zoomEnabled: e.chart.toolbar.autoSelected === "zoom" && e.chart.toolbar.tools.zoom && e.chart.zoom.enabled, panEnabled: e.chart.toolbar.autoSelected === "pan" && e.chart.toolbar.tools.pan, selectionEnabled: e.chart.toolbar.autoSelected === "selection" && e.chart.toolbar.tools.selection, yaxis: null, mousedown: !1, lastClientPosition: {}, visibleXRange: void 0, yValueDecimal: 0, total: 0, SVGNS: "http://www.w3.org/2000/svg", svgWidth: 0, svgHeight: 0, noData: !1, locale: {}, dom: {}, memory: { methodsToExec: [] }, shouldAnimate: !0, skipLastTimelinelabel: !1, skipFirstTimelinelabel: !1, delayedElements: [], axisCharts: !0, isDataXYZ: !1, isSlopeChart: e.plotOptions.line.isSlopeChart, resized: !1, resizeTimer: null, comboCharts: !1, dataChanged: !1, previousPaths: [], allSeriesHasEqualX: !0, pointsArray: [], dataLabelsRects: [], lastDrawnDataLabelsIndexes: [], hasNullValues: !1, easing: null, zoomed: !1, gridWidth: 0, gridHeight: 0, rotateXLabels: !1, defaultLabels: !1, xLabelFormatter: void 0, yLabelFormatters: [], xaxisTooltipFormatter: void 0, ttKeyFormatter: void 0, ttVal: void 0, ttZFormatter: void 0, LINE_HEIGHT_RATIO: 1.618, xAxisLabelsHeight: 0, xAxisGroupLabelsHeight: 0, xAxisLabelsWidth: 0, yAxisLabelsWidth: 0, scaleX: 1, scaleY: 1, translateX: 0, translateY: 0, translateYAxisX: [], yAxisWidths: [], translateXAxisY: 0, translateXAxisX: 0, tooltip: null, niceScaleAllowedMagMsd: [[1, 1, 2, 5, 5, 5, 10, 10, 10, 10, 10], [1, 1, 2, 5, 5, 5, 10, 10, 10, 10, 10]], niceScaleDefaultTicks: [1, 2, 4, 4, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 12, 12, 12, 12, 12, 12, 12, 12, 12, 24], seriesYAxisMap: [], seriesYAxisReverseMap: [] } } }, { key: "init", value: function (e) { var t = this.globalVars(e); return this.initGlobalVars(t), t.initialConfig = P.extend({}, e), t.initialSeries = P.clone(e.series), t.lastXAxis = P.clone(t.initialConfig.xaxis), t.lastYAxis = P.clone(t.initialConfig.yaxis), t } }]), p }(), Ri = function () { function p(e) { F(this, p), this.opts = e } return R(p, [{ key: "init", value: function () { var e = new Pe(this.opts).init({ responsiveOverride: !1 }); return { config: e, globals: new Et().init(e) } } }]), p }(), ne = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w, this.opts = null, this.seriesIndex = 0, this.patternIDs = [] } return R(p, [{ key: "clippedImgArea", value: function (e) { var t = this.w, i = t.config, a = parseInt(t.globals.gridWidth, 10), s = parseInt(t.globals.gridHeight, 10), r = a > s ? a : s, n = e.image, o = 0, h = 0; e.width === void 0 && e.height === void 0 ? i.fill.image.width !== void 0 && i.fill.image.height !== void 0 ? (o = i.fill.image.width + 1, h = i.fill.image.height) : (o = r + 1, h = r) : (o = e.width, h = e.height); var c = document.createElementNS(t.globals.SVGNS, "pattern"); X.setAttrs(c, { id: e.patternID, patternUnits: e.patternUnits ? e.patternUnits : "userSpaceOnUse", width: o + "px", height: h + "px" }); var d = document.createElementNS(t.globals.SVGNS, "image"); c.appendChild(d), d.setAttributeNS(window.SVG.xlink, "href", n), X.setAttrs(d, { x: 0, y: 0, preserveAspectRatio: "none", width: o + "px", height: h + "px" }), d.style.opacity = e.opacity, t.globals.dom.elDefs.node.appendChild(c) } }, { key: "getSeriesIndex", value: function (e) { var t = this.w, i = t.config.chart.type; return (i === "bar" || i === "rangeBar") && t.config.plotOptions.bar.distributed || i === "heatmap" || i === "treemap" ? this.seriesIndex = e.seriesNumber : this.seriesIndex = e.seriesNumber % t.globals.series.length, this.seriesIndex } }, { key: "fillPath", value: function (e) { var t = this.w; this.opts = e; var i, a, s, r = this.w.config; this.seriesIndex = this.getSeriesIndex(e); var n = this.getFillColors()[this.seriesIndex]; t.globals.seriesColors[this.seriesIndex] !== void 0 && (n = t.globals.seriesColors[this.seriesIndex]), typeof n == "function" && (n = n({ seriesIndex: this.seriesIndex, dataPointIndex: e.dataPointIndex, value: e.value, w: t })); var o = e.fillType ? e.fillType : this.getFillType(this.seriesIndex), h = Array.isArray(r.fill.opacity) ? r.fill.opacity[this.seriesIndex] : r.fill.opacity; e.color && (n = e.color), n || (n = "#fff", console.warn("undefined color - ApexCharts")); var c = n; if (n.indexOf("rgb") === -1 ? n.length < 9 && (c = P.hexToRgba(n, h)) : n.indexOf("rgba") > -1 && (h = P.getOpacityFromRGBA(n)), e.opacity && (h = e.opacity), o === "pattern" && (a = this.handlePatternFill({ fillConfig: e.fillConfig, patternFill: a, fillColor: n, fillOpacity: h, defaultColor: c })), o === "gradient" && (s = this.handleGradientFill({ fillConfig: e.fillConfig, fillColor: n, fillOpacity: h, i: this.seriesIndex })), o === "image") { var d = r.fill.image.src, g = e.patternID ? e.patternID : "", f = "pattern".concat(t.globals.cuid).concat(e.seriesNumber + 1).concat(g); this.patternIDs.indexOf(f) === -1 && (this.clippedImgArea({ opacity: h, image: Array.isArray(d) ? e.seriesNumber < d.length ? d[e.seriesNumber] : d[0] : d, width: e.width ? e.width : void 0, height: e.height ? e.height : void 0, patternUnits: e.patternUnits, patternID: f }), this.patternIDs.push(f)), i = "url(#".concat(f, ")") } else i = o === "gradient" ? s : o === "pattern" ? a : c; return e.solid && (i = c), i } }, { key: "getFillType", value: function (e) { var t = this.w; return Array.isArray(t.config.fill.type) ? t.config.fill.type[e] : t.config.fill.type } }, { key: "getFillColors", value: function () { var e = this.w, t = e.config, i = this.opts, a = []; return e.globals.comboCharts ? e.config.series[this.seriesIndex].type === "line" ? Array.isArray(e.globals.stroke.colors) ? a = e.globals.stroke.colors : a.push(e.globals.stroke.colors) : Array.isArray(e.globals.fill.colors) ? a = e.globals.fill.colors : a.push(e.globals.fill.colors) : t.chart.type === "line" ? Array.isArray(e.globals.stroke.colors) ? a = e.globals.stroke.colors : a.push(e.globals.stroke.colors) : Array.isArray(e.globals.fill.colors) ? a = e.globals.fill.colors : a.push(e.globals.fill.colors), i.fillColors !== void 0 && (a = [], Array.isArray(i.fillColors) ? a = i.fillColors.slice() : a.push(i.fillColors)), a } }, { key: "handlePatternFill", value: function (e) { var t = e.fillConfig, i = e.patternFill, a = e.fillColor, s = e.fillOpacity, r = e.defaultColor, n = this.w.config.fill; t && (n = t); var o = this.opts, h = new X(this.ctx), c = Array.isArray(n.pattern.strokeWidth) ? n.pattern.strokeWidth[this.seriesIndex] : n.pattern.strokeWidth, d = a; return Array.isArray(n.pattern.style) ? i = n.pattern.style[o.seriesNumber] !== void 0 ? h.drawPattern(n.pattern.style[o.seriesNumber], n.pattern.width, n.pattern.height, d, c, s) : r : i = h.drawPattern(n.pattern.style, n.pattern.width, n.pattern.height, d, c, s), i } }, { key: "handleGradientFill", value: function (e) { var t = e.fillColor, i = e.fillOpacity, a = e.fillConfig, s = e.i, r = this.w.config.fill; a && (r = Y(Y({}, r), a)); var n, o = this.opts, h = new X(this.ctx), c = new P, d = r.gradient.type, g = t, f = r.gradient.opacityFrom === void 0 ? i : Array.isArray(r.gradient.opacityFrom) ? r.gradient.opacityFrom[s] : r.gradient.opacityFrom; g.indexOf("rgba") > -1 && (f = P.getOpacityFromRGBA(g)); var x = r.gradient.opacityTo === void 0 ? i : Array.isArray(r.gradient.opacityTo) ? r.gradient.opacityTo[s] : r.gradient.opacityTo; if (r.gradient.gradientToColors === void 0 || r.gradient.gradientToColors.length === 0) n = r.gradient.shade === "dark" ? c.shadeColor(-1 * parseFloat(r.gradient.shadeIntensity), t.indexOf("rgb") > -1 ? P.rgb2hex(t) : t) : c.shadeColor(parseFloat(r.gradient.shadeIntensity), t.indexOf("rgb") > -1 ? P.rgb2hex(t) : t); else if (r.gradient.gradientToColors[o.seriesNumber]) { var b = r.gradient.gradientToColors[o.seriesNumber]; n = b, b.indexOf("rgba") > -1 && (x = P.getOpacityFromRGBA(b)) } else n = t; if (r.gradient.gradientFrom && (g = r.gradient.gradientFrom), r.gradient.gradientTo && (n = r.gradient.gradientTo), r.gradient.inverseColors) { var v = g; g = n, n = v } return g.indexOf("rgb") > -1 && (g = P.rgb2hex(g)), n.indexOf("rgb") > -1 && (n = P.rgb2hex(n)), h.drawGradient(d, g, n, f, x, o.size, r.gradient.stops, r.gradient.colorStops, s) } }]), p }(), ye = function () { function p(e, t) { F(this, p), this.ctx = e, this.w = e.w } return R(p, [{ key: "setGlobalMarkerSize", value: function () { var e = this.w; if (e.globals.markers.size = Array.isArray(e.config.markers.size) ? e.config.markers.size : [e.config.markers.size], e.globals.markers.size.length > 0) { if (e.globals.markers.size.length < e.globals.series.length + 1) for (var t = 0; t <= e.globals.series.length; t++)e.globals.markers.size[t] === void 0 && e.globals.markers.size.push(e.globals.markers.size[0]) } else e.globals.markers.size = e.config.series.map(function (i) { return e.config.markers.size }) } }, { key: "plotChartMarkers", value: function (e, t, i, a) { var s, r = arguments.length > 4 && arguments[4] !== void 0 && arguments[4], n = this.w, o = t, h = e, c = null, d = new X(this.ctx), g = n.config.markers.discrete && n.config.markers.discrete.length; if ((n.globals.markers.size[t] > 0 || r || g) && (c = d.group({ class: r || g ? "" : "apexcharts-series-markers" })).attr("clip-path", "url(#gridRectMarkerMask".concat(n.globals.cuid, ")")), Array.isArray(h.x)) for (var f = 0; f < h.x.length; f++) { var x = i; i === 1 && f === 0 && (x = 0), i === 1 && f === 1 && (x = 1); var b = "apexcharts-marker"; if (n.config.chart.type !== "line" && n.config.chart.type !== "area" || n.globals.comboCharts || n.config.tooltip.intersect || (b += " no-pointer-events"), (Array.isArray(n.config.markers.size) ? n.globals.markers.size[t] > 0 : n.config.markers.size > 0) || r || g) { P.isNumber(h.y[f]) ? b += " w".concat(P.randomId()) : b = "apexcharts-nullpoint"; var v = this.getMarkerConfig({ cssClass: b, seriesIndex: t, dataPointIndex: x }); n.config.series[o].data[x] && (n.config.series[o].data[x].fillColor && (v.pointFillColor = n.config.series[o].data[x].fillColor), n.config.series[o].data[x].strokeColor && (v.pointStrokeColor = n.config.series[o].data[x].strokeColor)), a !== void 0 && (v.pSize = a), (h.x[f] < -n.globals.markers.largestSize || h.x[f] > n.globals.gridWidth + n.globals.markers.largestSize || h.y[f] < -n.globals.markers.largestSize || h.y[f] > n.globals.gridHeight + n.globals.markers.largestSize) && (v.pSize = 0), (s = d.drawMarker(h.x[f], h.y[f], v)).attr("rel", x), s.attr("j", x), s.attr("index", t), s.node.setAttribute("default-marker-size", v.pSize), new ie(this.ctx).setSelectionFilter(s, t, x), this.addEvents(s), c && c.add(s) } else n.globals.pointsArray[t] === void 0 && (n.globals.pointsArray[t] = []), n.globals.pointsArray[t].push([h.x[f], h.y[f]]) } return c } }, { key: "getMarkerConfig", value: function (e) { var t = e.cssClass, i = e.seriesIndex, a = e.dataPointIndex, s = a === void 0 ? null : a, r = e.radius, n = r === void 0 ? null : r, o = e.size, h = o === void 0 ? null : o, c = e.strokeWidth, d = c === void 0 ? null : c, g = this.w, f = this.getMarkerStyle(i), x = h === null ? g.globals.markers.size[i] : h, b = g.config.markers; return s !== null && b.discrete.length && b.discrete.map(function (v) { v.seriesIndex === i && v.dataPointIndex === s && (f.pointStrokeColor = v.strokeColor, f.pointFillColor = v.fillColor, x = v.size, f.pointShape = v.shape) }), { pSize: n === null ? x : n, pRadius: n !== null ? n : b.radius, pointStrokeWidth: d !== null ? d : Array.isArray(b.strokeWidth) ? b.strokeWidth[i] : b.strokeWidth, pointStrokeColor: f.pointStrokeColor, pointFillColor: f.pointFillColor, shape: f.pointShape || (Array.isArray(b.shape) ? b.shape[i] : b.shape), class: t, pointStrokeOpacity: Array.isArray(b.strokeOpacity) ? b.strokeOpacity[i] : b.strokeOpacity, pointStrokeDashArray: Array.isArray(b.strokeDashArray) ? b.strokeDashArray[i] : b.strokeDashArray, pointFillOpacity: Array.isArray(b.fillOpacity) ? b.fillOpacity[i] : b.fillOpacity, seriesIndex: i } } }, { key: "addEvents", value: function (e) { var t = this.w, i = new X(this.ctx); e.node.addEventListener("mouseenter", i.pathMouseEnter.bind(this.ctx, e)), e.node.addEventListener("mouseleave", i.pathMouseLeave.bind(this.ctx, e)), e.node.addEventListener("mousedown", i.pathMouseDown.bind(this.ctx, e)), e.node.addEventListener("click", t.config.markers.onClick), e.node.addEventListener("dblclick", t.config.markers.onDblClick), e.node.addEventListener("touchstart", i.pathMouseDown.bind(this.ctx, e), { passive: !0 }) } }, { key: "getMarkerStyle", value: function (e) { var t = this.w, i = t.globals.markers.colors, a = t.config.markers.strokeColor || t.config.markers.strokeColors; return { pointStrokeColor: Array.isArray(a) ? a[e] : a, pointFillColor: Array.isArray(i) ? i[e] : i } } }]), p }(), Yt = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w, this.initialAnim = this.w.config.chart.animations.enabled } return R(p, [{ key: "draw", value: function (e, t, i) { var a = this.w, s = new X(this.ctx), r = i.realIndex, n = i.pointsPos, o = i.zRatio, h = i.elParent, c = s.group({ class: "apexcharts-series-markers apexcharts-series-".concat(a.config.chart.type) }); if (c.attr("clip-path", "url(#gridRectMarkerMask".concat(a.globals.cuid, ")")), Array.isArray(n.x)) for (var d = 0; d < n.x.length; d++) { var g = t + 1, f = !0; t === 0 && d === 0 && (g = 0), t === 0 && d === 1 && (g = 1); var x = a.globals.markers.size[r]; if (o !== 1 / 0) { var b = a.config.plotOptions.bubble; x = a.globals.seriesZ[r][g], b.zScaling && (x /= o), b.minBubbleRadius && x < b.minBubbleRadius && (x = b.minBubbleRadius), b.maxBubbleRadius && x > b.maxBubbleRadius && (x = b.maxBubbleRadius) } var v = n.x[d], y = n.y[d]; if (x = x || 0, y !== null && a.globals.series[r][g] !== void 0 || (f = !1), f) { var w = this.drawPoint(v, y, x, r, g, t); c.add(w) } h.add(c) } } }, { key: "drawPoint", value: function (e, t, i, a, s, r) { var n = this.w, o = a, h = new ve(this.ctx), c = new ie(this.ctx), d = new ne(this.ctx), g = new ye(this.ctx), f = new X(this.ctx), x = g.getMarkerConfig({ cssClass: "apexcharts-marker", seriesIndex: o, dataPointIndex: s, radius: n.config.chart.type === "bubble" || n.globals.comboCharts && n.config.series[a] && n.config.series[a].type === "bubble" ? i : null }), b = d.fillPath({ seriesNumber: a, dataPointIndex: s, color: x.pointFillColor, patternUnits: "objectBoundingBox", value: n.globals.series[a][r] }), v = f.drawMarker(e, t, x); if (n.config.series[o].data[s] && n.config.series[o].data[s].fillColor && (b = n.config.series[o].data[s].fillColor), v.attr({ fill: b }), n.config.chart.dropShadow.enabled) { var y = n.config.chart.dropShadow; c.dropShadow(v, y, a) } if (!this.initialAnim || n.globals.dataChanged || n.globals.resized) n.globals.animationEnded = !0; else { var w = n.config.chart.animations.speed; h.animateMarker(v, w, n.globals.easing, function () { window.setTimeout(function () { h.animationCompleted(v) }, 100) }) } return v.attr({ rel: s, j: s, index: a, "default-marker-size": x.pSize }), c.setSelectionFilter(v, a, s), g.addEvents(v), v.node.classList.add("apexcharts-marker"), v } }, { key: "centerTextInBubble", value: function (e) { var t = this.w; return { y: e += parseInt(t.config.dataLabels.style.fontSize, 10) / 4 } } }]), p }(), be = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w } return R(p, [{ key: "dataLabelsCorrection", value: function (e, t, i, a, s, r, n) { var o = this.w, h = !1, c = new X(this.ctx).getTextRects(i, n), d = c.width, g = c.height; t < 0 && (t = 0), t > o.globals.gridHeight + g && (t = o.globals.gridHeight + g / 2), o.globals.dataLabelsRects[a] === void 0 && (o.globals.dataLabelsRects[a] = []), o.globals.dataLabelsRects[a].push({ x: e, y: t, width: d, height: g }); var f = o.globals.dataLabelsRects[a].length - 2, x = o.globals.lastDrawnDataLabelsIndexes[a] !== void 0 ? o.globals.lastDrawnDataLabelsIndexes[a][o.globals.lastDrawnDataLabelsIndexes[a].length - 1] : 0; if (o.globals.dataLabelsRects[a][f] !== void 0) { var b = o.globals.dataLabelsRects[a][x]; (e > b.x + b.width || t > b.y + b.height || t + g < b.y || e + d < b.x) && (h = !0) } return (s === 0 || r) && (h = !0), { x: e, y: t, textRects: c, drawnextLabel: h } } }, { key: "drawDataLabel", value: function (e) { var t = this, i = e.type, a = e.pos, s = e.i, r = e.j, n = e.isRangeStart, o = e.strokeWidth, h = o === void 0 ? 2 : o, c = this.w, d = new X(this.ctx), g = c.config.dataLabels, f = 0, x = 0, b = r, v = null; if (c.globals.collapsedSeriesIndices.indexOf(s) !== -1 || !g.enabled || !Array.isArray(a.x)) return v; v = d.group({ class: "apexcharts-data-labels" }); for (var y = 0; y < a.x.length; y++)if (f = a.x[y] + g.offsetX, x = a.y[y] + g.offsetY + h, !isNaN(f)) { r === 1 && y === 0 && (b = 0), r === 1 && y === 1 && (b = 1); var w = c.globals.series[s][b]; i === "rangeArea" && (w = n ? c.globals.seriesRangeStart[s][b] : c.globals.seriesRangeEnd[s][b]); var l = "", u = function (A) { return c.config.dataLabels.formatter(A, { ctx: t.ctx, seriesIndex: s, dataPointIndex: b, w: c }) }; c.config.chart.type === "bubble" ? (l = u(w = c.globals.seriesZ[s][b]), x = a.y[y], x = new Yt(this.ctx).centerTextInBubble(x, s, b).y) : w !== void 0 && (l = u(w)); var m = c.config.dataLabels.textAnchor; c.globals.isSlopeChart && (m = b === 0 ? "end" : b === c.config.series[s].data.length - 1 ? "start" : "middle"), this.plotDataLabelsText({ x: f, y: x, text: l, i: s, j: b, parent: v, offsetCorrection: !0, dataLabelsConfig: c.config.dataLabels, textAnchor: m }) } return v } }, { key: "plotDataLabelsText", value: function (e) { var t = this.w, i = new X(this.ctx), a = e.x, s = e.y, r = e.i, n = e.j, o = e.text, h = e.textAnchor, c = e.fontSize, d = e.parent, g = e.dataLabelsConfig, f = e.color, x = e.alwaysDrawDataLabel, b = e.offsetCorrection, v = e.className, y = null; if (Array.isArray(t.config.dataLabels.enabledOnSeries) && t.config.dataLabels.enabledOnSeries.indexOf(r) < 0) return y; var w = { x: a, y: s, drawnextLabel: !0, textRects: null }; b && (w = this.dataLabelsCorrection(a, s, o, r, n, x, parseInt(g.style.fontSize, 10))), t.globals.zoomed || (a = w.x, s = w.y), w.textRects && (a < -20 - w.textRects.width || a > t.globals.gridWidth + w.textRects.width + 30) && (o = ""); var l = t.globals.dataLabels.style.colors[r]; ((t.config.chart.type === "bar" || t.config.chart.type === "rangeBar") && t.config.plotOptions.bar.distributed || t.config.dataLabels.distributed) && (l = t.globals.dataLabels.style.colors[n]), typeof l == "function" && (l = l({ series: t.globals.series, seriesIndex: r, dataPointIndex: n, w: t })), f && (l = f); var u = g.offsetX, m = g.offsetY; if (t.config.chart.type !== "bar" && t.config.chart.type !== "rangeBar" || (u = 0, m = 0), t.globals.isSlopeChart && (n !== 0 && (u = -2 * g.offsetX + 5), n !== 0 && n !== t.config.series[r].data.length - 1 && (u = 0)), w.drawnextLabel) { if ((y = i.drawText({ width: 100, height: parseInt(g.style.fontSize, 10), x: a + u, y: s + m, foreColor: l, textAnchor: h || g.textAnchor, text: o, fontSize: c || g.style.fontSize, fontFamily: g.style.fontFamily, fontWeight: g.style.fontWeight || "normal" })).attr({ class: v || "apexcharts-datalabel", cx: a, cy: s }), g.dropShadow.enabled) { var A = g.dropShadow; new ie(this.ctx).dropShadow(y, A) } d.add(y), t.globals.lastDrawnDataLabelsIndexes[r] === void 0 && (t.globals.lastDrawnDataLabelsIndexes[r] = []), t.globals.lastDrawnDataLabelsIndexes[r].push(n) } return y } }, { key: "addBackgroundToDataLabel", value: function (e, t) { var i = this.w, a = i.config.dataLabels.background, s = a.padding, r = a.padding / 2, n = t.width, o = t.height, h = new X(this.ctx).drawRect(t.x - s, t.y - r / 2, n + 2 * s, o + r, a.borderRadius, i.config.chart.background !== "transparent" && i.config.chart.background ? i.config.chart.background : "#fff", a.opacity, a.borderWidth, a.borderColor); return a.dropShadow.enabled && new ie(this.ctx).dropShadow(h, a.dropShadow), h } }, { key: "dataLabelsBackground", value: function () { var e = this.w; if (e.config.chart.type !== "bubble") for (var t = e.globals.dom.baseEl.querySelectorAll(".apexcharts-datalabels text"), i = 0; i < t.length; i++) { var a = t[i], s = a.getBBox(), r = null; if (s.width && s.height && (r = this.addBackgroundToDataLabel(a, s)), r) { a.parentNode.insertBefore(r.node, a); var n = a.getAttribute("fill"); e.config.chart.animations.enabled && !e.globals.resized && !e.globals.dataChanged ? r.animate().attr({ fill: n }) : r.attr({ fill: n }), a.setAttribute("fill", e.config.dataLabels.background.foreColor) } } } }, { key: "bringForward", value: function () { for (var e = this.w, t = e.globals.dom.baseEl.querySelectorAll(".apexcharts-datalabels"), i = e.globals.dom.baseEl.querySelector(".apexcharts-plot-series:last-child"), a = 0; a < t.length; a++)i && i.insertBefore(t[a], i.nextSibling) } }]), p }(), re = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w, this.legendInactiveClass = "legend-mouseover-inactive" } return R(p, [{ key: "getAllSeriesEls", value: function () { return this.w.globals.dom.baseEl.getElementsByClassName("apexcharts-series") } }, { key: "getSeriesByName", value: function (e) { return this.w.globals.dom.baseEl.querySelector(".apexcharts-inner .apexcharts-series[seriesName='".concat(P.escapeString(e), "']")) } }, { key: "isSeriesHidden", value: function (e) { var t = this.getSeriesByName(e), i = parseInt(t.getAttribute("data:realIndex"), 10); return { isHidden: t.classList.contains("apexcharts-series-collapsed"), realIndex: i } } }, { key: "addCollapsedClassToSeries", value: function (e, t) { var i = this.w; function a(s) { for (var r = 0; r < s.length; r++)s[r].index === t && e.node.classList.add("apexcharts-series-collapsed") } a(i.globals.collapsedSeries), a(i.globals.ancillaryCollapsedSeries) } }, { key: "toggleSeries", value: function (e) { var t = this.isSeriesHidden(e); return this.ctx.legend.legendHelpers.toggleDataSeries(t.realIndex, t.isHidden), t.isHidden } }, { key: "showSeries", value: function (e) { var t = this.isSeriesHidden(e); t.isHidden && this.ctx.legend.legendHelpers.toggleDataSeries(t.realIndex, !0) } }, { key: "hideSeries", value: function (e) { var t = this.isSeriesHidden(e); t.isHidden || this.ctx.legend.legendHelpers.toggleDataSeries(t.realIndex, !1) } }, { key: "resetSeries", value: function () { var e = !(arguments.length > 0 && arguments[0] !== void 0) || arguments[0], t = !(arguments.length > 1 && arguments[1] !== void 0) || arguments[1], i = !(arguments.length > 2 && arguments[2] !== void 0) || arguments[2], a = this.w, s = P.clone(a.globals.initialSeries); a.globals.previousPaths = [], i ? (a.globals.collapsedSeries = [], a.globals.ancillaryCollapsedSeries = [], a.globals.collapsedSeriesIndices = [], a.globals.ancillaryCollapsedSeriesIndices = []) : s = this.emptyCollapsedSeries(s), a.config.series = s, e && (t && (a.globals.zoomed = !1, this.ctx.updateHelpers.revertDefaultAxisMinMax()), this.ctx.updateHelpers._updateSeries(s, a.config.chart.animations.dynamicAnimation.enabled)) } }, { key: "emptyCollapsedSeries", value: function (e) { for (var t = this.w, i = 0; i < e.length; i++)t.globals.collapsedSeriesIndices.indexOf(i) > -1 && (e[i].data = []); return e } }, { key: "highlightSeries", value: function (e) { var t = this.w, i = this.getSeriesByName(e), a = parseInt(i.getAttribute("data:realIndex"), 10), s = t.globals.dom.baseEl.querySelectorAll(".apexcharts-series, .apexcharts-datalabels, .apexcharts-yaxis"), r = null, n = null, o = null; if (t.globals.axisCharts || t.config.chart.type === "radialBar") if (t.globals.axisCharts) { r = t.globals.dom.baseEl.querySelector(".apexcharts-series[data\\:realIndex='".concat(a, "']")), n = t.globals.dom.baseEl.querySelector(".apexcharts-datalabels[data\\:realIndex='".concat(a, "']")); var h = t.globals.seriesYAxisReverseMap[a]; o = t.globals.dom.baseEl.querySelector(".apexcharts-yaxis[rel='".concat(h, "']")) } else r = t.globals.dom.baseEl.querySelector(".apexcharts-series[rel='".concat(a + 1, "']")); else r = t.globals.dom.baseEl.querySelector(".apexcharts-series[rel='".concat(a + 1, "'] path")); for (var c = 0; c < s.length; c++)s[c].classList.add(this.legendInactiveClass); r !== null && (t.globals.axisCharts || r.parentNode.classList.remove(this.legendInactiveClass), r.classList.remove(this.legendInactiveClass), n !== null && n.classList.remove(this.legendInactiveClass), o !== null && o.classList.remove(this.legendInactiveClass)) } }, { key: "toggleSeriesOnHover", value: function (e, t) { var i = this.w; t || (t = e.target); var a = i.globals.dom.baseEl.querySelectorAll(".apexcharts-series, .apexcharts-datalabels, .apexcharts-yaxis"); if (e.type === "mousemove") { var s = parseInt(t.getAttribute("rel"), 10) - 1; this.highlightSeries(i.config.series[s].name) } else if (e.type === "mouseout") for (var r = 0; r < a.length; r++)a[r].classList.remove(this.legendInactiveClass) } }, { key: "highlightRangeInSeries", value: function (e, t) { var i = this, a = this.w, s = a.globals.dom.baseEl.getElementsByClassName("apexcharts-heatmap-rect"), r = function (h) { for (var c = 0; c < s.length; c++)s[c].classList[h](i.legendInactiveClass) }; if (e.type === "mousemove") { var n = parseInt(t.getAttribute("rel"), 10) - 1; r("add"); var o = a.config.plotOptions.heatmap.colorScale.ranges; (function (h, c) { for (var d = 0; d < s.length; d++) { var g = Number(s[d].getAttribute("val")); g >= h.from && (g < h.to || h.to === c && g === c) && s[d].classList.remove(i.legendInactiveClass) } })(o[n], o.reduce(function (h, c) { return Math.max(h, c.to) }, 0)) } else e.type === "mouseout" && r("remove") } }, { key: "getActiveConfigSeriesIndex", value: function () { var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : "asc", t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : [], i = this.w, a = 0; if (i.config.series.length > 1) { for (var s = i.config.series.map(function (n, o) { return n.data && n.data.length > 0 && i.globals.collapsedSeriesIndices.indexOf(o) === -1 && (!i.globals.comboCharts || t.length === 0 || t.length && t.indexOf(i.config.series[o].type) > -1) ? o : -1 }), r = e === "asc" ? 0 : s.length - 1; e === "asc" ? r < s.length : r >= 0; e === "asc" ? r++ : r--)if (s[r] !== -1) { a = s[r]; break } } return a } }, { key: "getBarSeriesIndices", value: function () { return this.w.globals.comboCharts ? this.w.config.series.map(function (e, t) { return e.type === "bar" || e.type === "column" ? t : -1 }).filter(function (e) { return e !== -1 }) : this.w.config.series.map(function (e, t) { return t }) } }, { key: "getPreviousPaths", value: function () { var e = this.w; function t(r, n, o) { for (var h = r[n].childNodes, c = { type: o, paths: [], realIndex: r[n].getAttribute("data:realIndex") }, d = 0; d < h.length; d++)if (h[d].hasAttribute("pathTo")) { var g = h[d].getAttribute("pathTo"); c.paths.push({ d: g }) } e.globals.previousPaths.push(c) } e.globals.previousPaths = [], ["line", "area", "bar", "rangebar", "rangeArea", "candlestick", "radar"].forEach(function (r) { for (var n, o = (n = r, e.globals.dom.baseEl.querySelectorAll(".apexcharts-".concat(n, "-series .apexcharts-series"))), h = 0; h < o.length; h++)t(o, h, r) }), this.handlePrevBubbleScatterPaths("bubble"), this.handlePrevBubbleScatterPaths("scatter"); var i = e.globals.dom.baseEl.querySelectorAll(".apexcharts-".concat(e.config.chart.type, " .apexcharts-series")); if (i.length > 0) for (var a = function (r) { for (var n = e.globals.dom.baseEl.querySelectorAll(".apexcharts-".concat(e.config.chart.type, " .apexcharts-series[data\\:realIndex='").concat(r, "'] rect")), o = [], h = function (d) { var g = function (x) { return n[d].getAttribute(x) }, f = { x: parseFloat(g("x")), y: parseFloat(g("y")), width: parseFloat(g("width")), height: parseFloat(g("height")) }; o.push({ rect: f, color: n[d].getAttribute("color") }) }, c = 0; c < n.length; c++)h(c); e.globals.previousPaths.push(o) }, s = 0; s < i.length; s++)a(s); e.globals.axisCharts || (e.globals.previousPaths = e.globals.series) } }, { key: "handlePrevBubbleScatterPaths", value: function (e) { var t = this.w, i = t.globals.dom.baseEl.querySelectorAll(".apexcharts-".concat(e, "-series .apexcharts-series")); if (i.length > 0) for (var a = 0; a < i.length; a++) { for (var s = t.globals.dom.baseEl.querySelectorAll(".apexcharts-".concat(e, "-series .apexcharts-series[data\\:realIndex='").concat(a, "'] circle")), r = [], n = 0; n < s.length; n++)r.push({ x: s[n].getAttribute("cx"), y: s[n].getAttribute("cy"), r: s[n].getAttribute("r") }); t.globals.previousPaths.push(r) } } }, { key: "clearPreviousPaths", value: function () { var e = this.w; e.globals.previousPaths = [], e.globals.allSeriesCollapsed = !1 } }, { key: "handleNoData", value: function () { var e = this.w, t = e.config.noData, i = new X(this.ctx), a = e.globals.svgWidth / 2, s = e.globals.svgHeight / 2, r = "middle"; if (e.globals.noData = !0, e.globals.animationEnded = !0, t.align === "left" ? (a = 10, r = "start") : t.align === "right" && (a = e.globals.svgWidth - 10, r = "end"), t.verticalAlign === "top" ? s = 50 : t.verticalAlign === "bottom" && (s = e.globals.svgHeight - 50), a += t.offsetX, s = s + parseInt(t.style.fontSize, 10) + 2 + t.offsetY, t.text !== void 0 && t.text !== "") { var n = i.drawText({ x: a, y: s, text: t.text, textAnchor: r, fontSize: t.style.fontSize, fontFamily: t.style.fontFamily, foreColor: t.style.color, opacity: 1, class: "apexcharts-text-nodata" }); e.globals.dom.Paper.add(n) } } }, { key: "setNullSeriesToZeroValues", value: function (e) { for (var t = this.w, i = 0; i < e.length; i++)if (e[i].length === 0) for (var a = 0; a < e[t.globals.maxValsInArrayIndex].length; a++)e[i].push(0); return e } }, { key: "hasAllSeriesEqualX", value: function () { for (var e = !0, t = this.w, i = this.filteredSeriesX(), a = 0; a < i.length - 1; a++)if (i[a][0] !== i[a + 1][0]) { e = !1; break } return t.globals.allSeriesHasEqualX = e, e } }, { key: "filteredSeriesX", value: function () { var e = this.w.globals.seriesX.map(function (t) { return t.length > 0 ? t : [] }); return e } }]), p }(), Ft = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w, this.twoDSeries = [], this.threeDSeries = [], this.twoDSeriesX = [], this.seriesGoals = [], this.coreUtils = new $(this.ctx) } return R(p, [{ key: "isMultiFormat", value: function () { return this.isFormatXY() || this.isFormat2DArray() } }, { key: "isFormatXY", value: function () { var e = this.w.config.series.slice(), t = new re(this.ctx); if (this.activeSeriesIndex = t.getActiveConfigSeriesIndex(), e[this.activeSeriesIndex].data !== void 0 && e[this.activeSeriesIndex].data.length > 0 && e[this.activeSeriesIndex].data[0] !== null && e[this.activeSeriesIndex].data[0].x !== void 0 && e[this.activeSeriesIndex].data[0] !== null) return !0 } }, { key: "isFormat2DArray", value: function () { var e = this.w.config.series.slice(), t = new re(this.ctx); if (this.activeSeriesIndex = t.getActiveConfigSeriesIndex(), e[this.activeSeriesIndex].data !== void 0 && e[this.activeSeriesIndex].data.length > 0 && e[this.activeSeriesIndex].data[0] !== void 0 && e[this.activeSeriesIndex].data[0] !== null && e[this.activeSeriesIndex].data[0].constructor === Array) return !0 } }, { key: "handleFormat2DArray", value: function (e, t) { for (var i = this.w.config, a = this.w.globals, s = i.chart.type === "boxPlot" || i.series[t].type === "boxPlot", r = 0; r < e[t].data.length; r++)if (e[t].data[r][1] !== void 0 && (Array.isArray(e[t].data[r][1]) && e[t].data[r][1].length === 4 && !s ? this.twoDSeries.push(P.parseNumber(e[t].data[r][1][3])) : e[t].data[r].length >= 5 ? this.twoDSeries.push(P.parseNumber(e[t].data[r][4])) : this.twoDSeries.push(P.parseNumber(e[t].data[r][1])), a.dataFormatXNumeric = !0), i.xaxis.type === "datetime") { var n = new Date(e[t].data[r][0]); n = new Date(n).getTime(), this.twoDSeriesX.push(n) } else this.twoDSeriesX.push(e[t].data[r][0]); for (var o = 0; o < e[t].data.length; o++)e[t].data[o][2] !== void 0 && (this.threeDSeries.push(e[t].data[o][2]), a.isDataXYZ = !0) } }, { key: "handleFormatXY", value: function (e, t) { var i = this.w.config, a = this.w.globals, s = new K(this.ctx), r = t; a.collapsedSeriesIndices.indexOf(t) > -1 && (r = this.activeSeriesIndex); for (var n = 0; n < e[t].data.length; n++)e[t].data[n].y !== void 0 && (Array.isArray(e[t].data[n].y) ? this.twoDSeries.push(P.parseNumber(e[t].data[n].y[e[t].data[n].y.length - 1])) : this.twoDSeries.push(P.parseNumber(e[t].data[n].y))), e[t].data[n].goals !== void 0 && Array.isArray(e[t].data[n].goals) ? (this.seriesGoals[t] === void 0 && (this.seriesGoals[t] = []), this.seriesGoals[t].push(e[t].data[n].goals)) : (this.seriesGoals[t] === void 0 && (this.seriesGoals[t] = []), this.seriesGoals[t].push(null)); for (var o = 0; o < e[r].data.length; o++) { var h = typeof e[r].data[o].x == "string", c = Array.isArray(e[r].data[o].x), d = !c && !!s.isValidDate(e[r].data[o].x); if (h || d) if (h || i.xaxis.convertedCatToNumeric) { var g = a.isBarHorizontal && a.isRangeData; i.xaxis.type !== "datetime" || g ? (this.fallbackToCategory = !0, this.twoDSeriesX.push(e[r].data[o].x), isNaN(e[r].data[o].x) || this.w.config.xaxis.type === "category" || typeof e[r].data[o].x == "string" || (a.isXNumeric = !0)) : this.twoDSeriesX.push(s.parseDate(e[r].data[o].x)) } else i.xaxis.type === "datetime" ? this.twoDSeriesX.push(s.parseDate(e[r].data[o].x.toString())) : (a.dataFormatXNumeric = !0, a.isXNumeric = !0, this.twoDSeriesX.push(parseFloat(e[r].data[o].x))); else c ? (this.fallbackToCategory = !0, this.twoDSeriesX.push(e[r].data[o].x)) : (a.isXNumeric = !0, a.dataFormatXNumeric = !0, this.twoDSeriesX.push(e[r].data[o].x)) } if (e[t].data[0] && e[t].data[0].z !== void 0) { for (var f = 0; f < e[t].data.length; f++)this.threeDSeries.push(e[t].data[f].z); a.isDataXYZ = !0 } } }, { key: "handleRangeData", value: function (e, t) { var i = this.w.globals, a = {}; return this.isFormat2DArray() ? a = this.handleRangeDataFormat("array", e, t) : this.isFormatXY() && (a = this.handleRangeDataFormat("xy", e, t)), i.seriesRangeStart.push(a.start === void 0 ? [] : a.start), i.seriesRangeEnd.push(a.end === void 0 ? [] : a.end), i.seriesRange.push(a.rangeUniques), i.seriesRange.forEach(function (s, r) { s && s.forEach(function (n, o) { n.y.forEach(function (h, c) { for (var d = 0; d < n.y.length; d++)if (c !== d) { var g = h.y1, f = h.y2, x = n.y[d].y1; g <= n.y[d].y2 && x <= f && (n.overlaps.indexOf(h.rangeName) < 0 && n.overlaps.push(h.rangeName), n.overlaps.indexOf(n.y[d].rangeName) < 0 && n.overlaps.push(n.y[d].rangeName)) } }) }) }), a } }, { key: "handleCandleStickBoxData", value: function (e, t) { var i = this.w.globals, a = {}; return this.isFormat2DArray() ? a = this.handleCandleStickBoxDataFormat("array", e, t) : this.isFormatXY() && (a = this.handleCandleStickBoxDataFormat("xy", e, t)), i.seriesCandleO[t] = a.o, i.seriesCandleH[t] = a.h, i.seriesCandleM[t] = a.m, i.seriesCandleL[t] = a.l, i.seriesCandleC[t] = a.c, a } }, { key: "handleRangeDataFormat", value: function (e, t, i) { var a = [], s = [], r = t[i].data.filter(function (c, d, g) { return d === g.findIndex(function (f) { return f.x === c.x }) }).map(function (c, d) { return { x: c.x, overlaps: [], y: [] } }); if (e === "array") for (var n = 0; n < t[i].data.length; n++)Array.isArray(t[i].data[n]) ? (a.push(t[i].data[n][1][0]), s.push(t[i].data[n][1][1])) : (a.push(t[i].data[n]), s.push(t[i].data[n])); else if (e === "xy") for (var o = function (c) { var d = Array.isArray(t[i].data[c].y), g = P.randomId(), f = t[i].data[c].x, x = { y1: d ? t[i].data[c].y[0] : t[i].data[c].y, y2: d ? t[i].data[c].y[1] : t[i].data[c].y, rangeName: g }; t[i].data[c].rangeName = g; var b = r.findIndex(function (v) { return v.x === f }); r[b].y.push(x), a.push(x.y1), s.push(x.y2) }, h = 0; h < t[i].data.length; h++)o(h); return { start: a, end: s, rangeUniques: r } } }, { key: "handleCandleStickBoxDataFormat", value: function (e, t, i) { var a = this.w, s = a.config.chart.type === "boxPlot" || a.config.series[i].type === "boxPlot", r = [], n = [], o = [], h = [], c = []; if (e === "array") if (s && t[i].data[0].length === 6 || !s && t[i].data[0].length === 5) for (var d = 0; d < t[i].data.length; d++)r.push(t[i].data[d][1]), n.push(t[i].data[d][2]), s ? (o.push(t[i].data[d][3]), h.push(t[i].data[d][4]), c.push(t[i].data[d][5])) : (h.push(t[i].data[d][3]), c.push(t[i].data[d][4])); else for (var g = 0; g < t[i].data.length; g++)Array.isArray(t[i].data[g][1]) && (r.push(t[i].data[g][1][0]), n.push(t[i].data[g][1][1]), s ? (o.push(t[i].data[g][1][2]), h.push(t[i].data[g][1][3]), c.push(t[i].data[g][1][4])) : (h.push(t[i].data[g][1][2]), c.push(t[i].data[g][1][3]))); else if (e === "xy") for (var f = 0; f < t[i].data.length; f++)Array.isArray(t[i].data[f].y) && (r.push(t[i].data[f].y[0]), n.push(t[i].data[f].y[1]), s ? (o.push(t[i].data[f].y[2]), h.push(t[i].data[f].y[3]), c.push(t[i].data[f].y[4])) : (h.push(t[i].data[f].y[2]), c.push(t[i].data[f].y[3]))); return { o: r, h: n, m: o, l: h, c } } }, { key: "parseDataAxisCharts", value: function (e) { var t = this, i = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : this.ctx, a = this.w.config, s = this.w.globals, r = new K(i), n = a.labels.length > 0 ? a.labels.slice() : a.xaxis.categories.slice(); s.isRangeBar = a.chart.type === "rangeBar" && s.isBarHorizontal, s.hasXaxisGroups = a.xaxis.type === "category" && a.xaxis.group.groups.length > 0, s.hasXaxisGroups && (s.groups = a.xaxis.group.groups), e.forEach(function (f, x) { f.name !== void 0 ? s.seriesNames.push(f.name) : s.seriesNames.push("series-" + parseInt(x + 1, 10)) }), this.coreUtils.setSeriesYAxisMappings(); var o = [], h = te(new Set(a.series.map(function (f) { return f.group }))); a.series.forEach(function (f, x) { var b = h.indexOf(f.group); o[b] || (o[b] = []), o[b].push(s.seriesNames[x]) }), s.seriesGroups = o; for (var c = function () { for (var f = 0; f < n.length; f++)if (typeof n[f] == "string") { if (!r.isValidDate(n[f])) throw new Error("You have provided invalid Date format. Please provide a valid JavaScript Date"); t.twoDSeriesX.push(r.parseDate(n[f])) } else t.twoDSeriesX.push(n[f]) }, d = 0; d < e.length; d++) { if (this.twoDSeries = [], this.twoDSeriesX = [], this.threeDSeries = [], e[d].data === void 0) return void console.error("It is a possibility that you may have not included 'data' property in series."); if (a.chart.type !== "rangeBar" && a.chart.type !== "rangeArea" && e[d].type !== "rangeBar" && e[d].type !== "rangeArea" || (s.isRangeData = !0, a.chart.type !== "rangeBar" && a.chart.type !== "rangeArea" || this.handleRangeData(e, d)), this.isMultiFormat()) this.isFormat2DArray() ? this.handleFormat2DArray(e, d) : this.isFormatXY() && this.handleFormatXY(e, d), a.chart.type !== "candlestick" && e[d].type !== "candlestick" && a.chart.type !== "boxPlot" && e[d].type !== "boxPlot" || this.handleCandleStickBoxData(e, d), s.series.push(this.twoDSeries), s.labels.push(this.twoDSeriesX), s.seriesX.push(this.twoDSeriesX), s.seriesGoals = this.seriesGoals, d !== this.activeSeriesIndex || this.fallbackToCategory || (s.isXNumeric = !0); else { a.xaxis.type === "datetime" ? (s.isXNumeric = !0, c(), s.seriesX.push(this.twoDSeriesX)) : a.xaxis.type === "numeric" && (s.isXNumeric = !0, n.length > 0 && (this.twoDSeriesX = n, s.seriesX.push(this.twoDSeriesX))), s.labels.push(this.twoDSeriesX); var g = e[d].data.map(function (f) { return P.parseNumber(f) }); s.series.push(g) } s.seriesZ.push(this.threeDSeries), e[d].color !== void 0 ? s.seriesColors.push(e[d].color) : s.seriesColors.push(void 0) } return this.w } }, { key: "parseDataNonAxisCharts", value: function (e) { var t = this.w.globals, i = this.w.config; t.series = e.slice(), t.seriesNames = i.labels.slice(); for (var a = 0; a < t.series.length; a++)t.seriesNames[a] === void 0 && t.seriesNames.push("series-" + (a + 1)); return this.w } }, { key: "handleExternalLabelsData", value: function (e) { var t = this.w.config, i = this.w.globals; t.xaxis.categories.length > 0 ? i.labels = t.xaxis.categories : t.labels.length > 0 ? i.labels = t.labels.slice() : this.fallbackToCategory ? (i.labels = i.labels[0], i.seriesRange.length && (i.seriesRange.map(function (a) { a.forEach(function (s) { i.labels.indexOf(s.x) < 0 && s.x && i.labels.push(s.x) }) }), i.labels = Array.from(new Set(i.labels.map(JSON.stringify)), JSON.parse)), t.xaxis.convertedCatToNumeric && (new Le(t).convertCatToNumericXaxis(t, this.ctx, i.seriesX[0]), this._generateExternalLabels(e))) : this._generateExternalLabels(e) } }, { key: "_generateExternalLabels", value: function (e) { var t = this.w.globals, i = this.w.config, a = []; if (t.axisCharts) { if (t.series.length > 0) if (this.isFormatXY()) for (var s = i.series.map(function (d, g) { return d.data.filter(function (f, x, b) { return b.findIndex(function (v) { return v.x === f.x }) === x }) }), r = s.reduce(function (d, g, f, x) { return x[d].length > g.length ? d : f }, 0), n = 0; n < s[r].length; n++)a.push(n + 1); else for (var o = 0; o < t.series[t.maxValsInArrayIndex].length; o++)a.push(o + 1); t.seriesX = []; for (var h = 0; h < e.length; h++)t.seriesX.push(a); this.w.globals.isBarHorizontal || (t.isXNumeric = !0) } if (a.length === 0) { a = t.axisCharts ? [] : t.series.map(function (d, g) { return g + 1 }); for (var c = 0; c < e.length; c++)t.seriesX.push(a) } t.labels = a, i.xaxis.convertedCatToNumeric && (t.categoryLabels = a.map(function (d) { return i.xaxis.labels.formatter(d) })), t.noLabelsProvided = !0 } }, { key: "parseData", value: function (e) { var t = this.w, i = t.config, a = t.globals; if (this.excludeCollapsedSeriesInYAxis(), this.fallbackToCategory = !1, this.ctx.core.resetGlobals(), this.ctx.core.isMultipleY(), a.axisCharts ? (this.parseDataAxisCharts(e), this.coreUtils.getLargestSeries()) : this.parseDataNonAxisCharts(e), i.chart.stacked) { var s = new re(this.ctx); a.series = s.setNullSeriesToZeroValues(a.series) } this.coreUtils.getSeriesTotals(), a.axisCharts && (a.stackedSeriesTotals = this.coreUtils.getStackedSeriesTotals(), a.stackedSeriesTotalsByGroups = this.coreUtils.getStackedSeriesTotalsByGroups()), this.coreUtils.getPercentSeries(), a.dataFormatXNumeric || a.isXNumeric && (i.xaxis.type !== "numeric" || i.labels.length !== 0 || i.xaxis.categories.length !== 0) || this.handleExternalLabelsData(e); for (var r = this.coreUtils.getCategoryLabels(a.labels), n = 0; n < r.length; n++)if (Array.isArray(r[n])) { a.isMultiLineX = !0; break } } }, { key: "excludeCollapsedSeriesInYAxis", value: function () { var e = this.w, t = []; e.globals.seriesYAxisMap.forEach(function (i, a) { var s = 0; i.forEach(function (r) { e.globals.collapsedSeriesIndices.indexOf(r) !== -1 && s++ }), s > 0 && s == i.length && t.push(a) }), e.globals.ignoreYAxisIndexes = t.map(function (i) { return i }) } }]), p }(), He = function () { - function p(e) { F(this, p), this.ctx = e, this.w = e.w } return R(p, [{ key: "scaleSvgNode", value: function (e, t) { var i = parseFloat(e.getAttributeNS(null, "width")), a = parseFloat(e.getAttributeNS(null, "height")); e.setAttributeNS(null, "width", i * t), e.setAttributeNS(null, "height", a * t), e.setAttributeNS(null, "viewBox", "0 0 " + i + " " + a) } }, { key: "getSvgString", value: function () { var e = this; return new Promise(function (t) { var i = e.w, a = i.config.chart.toolbar.export.width, s = i.config.chart.toolbar.export.scale || a / i.globals.svgWidth; s || (s = 1); var r = e.w.globals.dom.Paper.svg(), n = e.w.globals.dom.Paper.node.cloneNode(!0); s !== 1 && e.scaleSvgNode(n, s), e.convertImagesToBase64(n).then(function () { r = new XMLSerializer().serializeToString(n), t(r.replace(/ /g, " ")) }) }) } }, { key: "convertImagesToBase64", value: function (e) { var t = this, i = e.getElementsByTagName("image"), a = Array.from(i).map(function (s) { var r = s.getAttributeNS("http://www.w3.org/1999/xlink", "href"); return r && !r.startsWith("data:") ? t.getBase64FromUrl(r).then(function (n) { s.setAttributeNS("http://www.w3.org/1999/xlink", "href", n) }).catch(function (n) { console.error("Error converting image to base64:", n) }) : Promise.resolve() }); return Promise.all(a) } }, { key: "getBase64FromUrl", value: function (e) { return new Promise(function (t, i) { var a = new Image; a.crossOrigin = "Anonymous", a.onload = function () { var s = document.createElement("canvas"); s.width = a.width, s.height = a.height, s.getContext("2d").drawImage(a, 0, 0), t(s.toDataURL()) }, a.onerror = i, a.src = e }) } }, { key: "cleanup", value: function () { var e = this.w, t = e.globals.dom.baseEl.getElementsByClassName("apexcharts-xcrosshairs"), i = e.globals.dom.baseEl.getElementsByClassName("apexcharts-ycrosshairs"), a = e.globals.dom.baseEl.querySelectorAll(".apexcharts-zoom-rect, .apexcharts-selection-rect"); Array.prototype.forEach.call(a, function (s) { s.setAttribute("width", 0) }), t && t[0] && (t[0].setAttribute("x", -500), t[0].setAttribute("x1", -500), t[0].setAttribute("x2", -500)), i && i[0] && (i[0].setAttribute("y", -100), i[0].setAttribute("y1", -100), i[0].setAttribute("y2", -100)) } }, { key: "svgUrl", value: function () { var e = this; return new Promise(function (t) { e.cleanup(), e.getSvgString().then(function (i) { var a = new Blob([i], { type: "image/svg+xml;charset=utf-8" }); t(URL.createObjectURL(a)) }) }) } }, { key: "dataURI", value: function (e) { var t = this; return new Promise(function (i) { var a = t.w, s = e ? e.scale || e.width / a.globals.svgWidth : 1; t.cleanup(); var r = document.createElement("canvas"); r.width = a.globals.svgWidth * s, r.height = parseInt(a.globals.dom.elWrap.style.height, 10) * s; var n = a.config.chart.background !== "transparent" && a.config.chart.background ? a.config.chart.background : "#fff", o = r.getContext("2d"); o.fillStyle = n, o.fillRect(0, 0, r.width * s, r.height * s), t.getSvgString().then(function (h) { var c = "data:image/svg+xml," + encodeURIComponent(h), d = new Image; d.crossOrigin = "anonymous", d.onload = function () { if (o.drawImage(d, 0, 0), r.msToBlob) { var g = r.msToBlob(); i({ blob: g }) } else { var f = r.toDataURL("image/png"); i({ imgURI: f }) } }, d.src = c }) }) } }, { key: "exportToSVG", value: function () { var e = this; this.svgUrl().then(function (t) { e.triggerDownload(t, e.w.config.chart.toolbar.export.svg.filename, ".svg") }) } }, { key: "exportToPng", value: function () { var e = this, t = this.w.config.chart.toolbar.export.scale, i = this.w.config.chart.toolbar.export.width, a = t ? { scale: t } : i ? { width: i } : void 0; this.dataURI(a).then(function (s) { var r = s.imgURI, n = s.blob; n ? navigator.msSaveOrOpenBlob(n, e.w.globals.chartID + ".png") : e.triggerDownload(r, e.w.config.chart.toolbar.export.png.filename, ".png") }) } }, { - key: "exportToCSV", value: function (e) { - var t = this, i = e.series, a = e.fileName, s = e.columnDelimiter, r = s === void 0 ? "," : s, n = e.lineDelimiter, o = n === void 0 ? ` -`: n, h = this.w; i || (i = h.config.series); var c, d, g = [], f = [], x = "", b = h.globals.series.map(function (k, S) { return h.globals.collapsedSeriesIndices.indexOf(S) === -1 ? k : [] }), v = function (k) { return typeof h.config.chart.toolbar.export.csv.categoryFormatter == "function" ? h.config.chart.toolbar.export.csv.categoryFormatter(k) : h.config.xaxis.type === "datetime" && String(k).length >= 10 ? new Date(k).toDateString() : P.isNumber(k) ? k : k.split(r).join("") }, y = function (k) { return typeof h.config.chart.toolbar.export.csv.valueFormatter == "function" ? h.config.chart.toolbar.export.csv.valueFormatter(k) : k }, w = Math.max.apply(Math, te(i.map(function (k) { return k.data ? k.data.length : 0 }))), l = new Ft(this.ctx), u = new ge(this.ctx), m = function (k) { var S = ""; if (h.globals.axisCharts) { if (h.config.xaxis.type === "category" || h.config.xaxis.convertedCatToNumeric) if (h.globals.isBarHorizontal) { var L = h.globals.yLabelFormatters[0], C = new re(t.ctx).getActiveConfigSeriesIndex(); S = L(h.globals.labels[k], { seriesIndex: C, dataPointIndex: k, w: h }) } else S = u.getLabel(h.globals.labels, h.globals.timescaleLabels, 0, k).text; h.config.xaxis.type === "datetime" && (h.config.xaxis.categories.length ? S = h.config.xaxis.categories[k] : h.config.labels.length && (S = h.config.labels[k])) } else S = h.config.labels[k]; return S === null ? "nullvalue" : (Array.isArray(S) && (S = S.join(" ")), P.isNumber(S) ? S : S.split(r).join("")) }, A = function (k, S) { if (g.length && S === 0 && f.push(g.join(r)), k.data) { k.data = k.data.length && k.data || te(Array(w)).map(function () { return "" }); for (var L = 0; L < k.data.length; L++) { g = []; var C = m(L); if (C !== "nullvalue") { if (C || (l.isFormatXY() ? C = i[S].data[L].x : l.isFormat2DArray() && (C = i[S].data[L] ? i[S].data[L][0] : "")), S === 0) { g.push(v(C)); for (var I = 0; I < h.globals.series.length; I++) { var z, M = l.isFormatXY() ? (z = i[I].data[L]) === null || z === void 0 ? void 0 : z.y : b[I][L]; g.push(y(M)) } } (h.config.chart.type === "candlestick" || k.type && k.type === "candlestick") && (g.pop(), g.push(h.globals.seriesCandleO[S][L]), g.push(h.globals.seriesCandleH[S][L]), g.push(h.globals.seriesCandleL[S][L]), g.push(h.globals.seriesCandleC[S][L])), (h.config.chart.type === "boxPlot" || k.type && k.type === "boxPlot") && (g.pop(), g.push(h.globals.seriesCandleO[S][L]), g.push(h.globals.seriesCandleH[S][L]), g.push(h.globals.seriesCandleM[S][L]), g.push(h.globals.seriesCandleL[S][L]), g.push(h.globals.seriesCandleC[S][L])), h.config.chart.type === "rangeBar" && (g.pop(), g.push(h.globals.seriesRangeStart[S][L]), g.push(h.globals.seriesRangeEnd[S][L])), g.length && f.push(g.join(r)) } } } }; g.push(h.config.chart.toolbar.export.csv.headerCategory), h.config.chart.type === "boxPlot" ? (g.push("minimum"), g.push("q1"), g.push("median"), g.push("q3"), g.push("maximum")) : h.config.chart.type === "candlestick" ? (g.push("open"), g.push("high"), g.push("low"), g.push("close")) : h.config.chart.type === "rangeBar" ? (g.push("minimum"), g.push("maximum")) : i.map(function (k, S) { var L = (k.name ? k.name : "series-".concat(S)) + ""; h.globals.axisCharts && g.push(L.split(r).join("") ? L.split(r).join("") : "series-".concat(S)) }), h.globals.axisCharts || (g.push(h.config.chart.toolbar.export.csv.headerValue), f.push(g.join(r))), h.globals.allSeriesHasEqualX || !h.globals.axisCharts || h.config.xaxis.categories.length || h.config.labels.length ? i.map(function (k, S) { h.globals.axisCharts ? A(k, S) : ((g = []).push(v(h.globals.labels[S])), g.push(y(b[S])), f.push(g.join(r))) }) : (c = new Set, d = {}, i.forEach(function (k, S) { k?.data.forEach(function (L) { var C, I; if (l.isFormatXY()) C = L.x, I = L.y; else { if (!l.isFormat2DArray()) return; C = L[0], I = L[1] } d[C] || (d[C] = Array(i.length).fill("")), d[C][S] = y(I), c.add(C) }) }), g.length && f.push(g.join(r)), Array.from(c).sort().forEach(function (k) { f.push([v(k), d[k].join(r)]) })), x += f.join(o), this.triggerDownload("data:text/csv; charset=utf-8," + encodeURIComponent("\uFEFF" + x), a || h.config.chart.toolbar.export.csv.filename, ".csv") - } - }, { key: "triggerDownload", value: function (e, t, i) { var a = document.createElement("a"); a.href = e, a.download = (t || this.w.globals.chartID) + i, document.body.appendChild(a), a.click(), document.body.removeChild(a) } }]), p - }(), Me = function () { function p(e, t) { F(this, p), this.ctx = e, this.elgrid = t, this.w = e.w; var i = this.w; this.axesUtils = new ge(e), this.xaxisLabels = i.globals.labels.slice(), i.globals.timescaleLabels.length > 0 && !i.globals.isBarHorizontal && (this.xaxisLabels = i.globals.timescaleLabels.slice()), i.config.xaxis.overwriteCategories && (this.xaxisLabels = i.config.xaxis.overwriteCategories), this.drawnLabels = [], this.drawnLabelsRects = [], i.config.xaxis.position === "top" ? this.offY = 0 : this.offY = i.globals.gridHeight, this.offY = this.offY + i.config.xaxis.axisBorder.offsetY, this.isCategoryBarHorizontal = i.config.chart.type === "bar" && i.config.plotOptions.bar.horizontal, this.xaxisFontSize = i.config.xaxis.labels.style.fontSize, this.xaxisFontFamily = i.config.xaxis.labels.style.fontFamily, this.xaxisForeColors = i.config.xaxis.labels.style.colors, this.xaxisBorderWidth = i.config.xaxis.axisBorder.width, this.isCategoryBarHorizontal && (this.xaxisBorderWidth = i.config.yaxis[0].axisBorder.width.toString()), this.xaxisBorderWidth.indexOf("%") > -1 ? this.xaxisBorderWidth = i.globals.gridWidth * parseInt(this.xaxisBorderWidth, 10) / 100 : this.xaxisBorderWidth = parseInt(this.xaxisBorderWidth, 10), this.xaxisBorderHeight = i.config.xaxis.axisBorder.height, this.yaxis = i.config.yaxis[0] } return R(p, [{ key: "drawXaxis", value: function () { var e = this.w, t = new X(this.ctx), i = t.group({ class: "apexcharts-xaxis", transform: "translate(".concat(e.config.xaxis.offsetX, ", ").concat(e.config.xaxis.offsetY, ")") }), a = t.group({ class: "apexcharts-xaxis-texts-g", transform: "translate(".concat(e.globals.translateXAxisX, ", ").concat(e.globals.translateXAxisY, ")") }); i.add(a); for (var s = [], r = 0; r < this.xaxisLabels.length; r++)s.push(this.xaxisLabels[r]); if (this.drawXAxisLabelAndGroup(!0, t, a, s, e.globals.isXNumeric, function (x, b) { return b }), e.globals.hasXaxisGroups) { var n = e.globals.groups; s = []; for (var o = 0; o < n.length; o++)s.push(n[o].title); var h = {}; e.config.xaxis.group.style && (h.xaxisFontSize = e.config.xaxis.group.style.fontSize, h.xaxisFontFamily = e.config.xaxis.group.style.fontFamily, h.xaxisForeColors = e.config.xaxis.group.style.colors, h.fontWeight = e.config.xaxis.group.style.fontWeight, h.cssClass = e.config.xaxis.group.style.cssClass), this.drawXAxisLabelAndGroup(!1, t, a, s, !1, function (x, b) { return n[x].cols * b }, h) } if (e.config.xaxis.title.text !== void 0) { var c = t.group({ class: "apexcharts-xaxis-title" }), d = t.drawText({ x: e.globals.gridWidth / 2 + e.config.xaxis.title.offsetX, y: this.offY + parseFloat(this.xaxisFontSize) + (e.config.xaxis.position === "bottom" ? e.globals.xAxisLabelsHeight : -e.globals.xAxisLabelsHeight - 10) + e.config.xaxis.title.offsetY, text: e.config.xaxis.title.text, textAnchor: "middle", fontSize: e.config.xaxis.title.style.fontSize, fontFamily: e.config.xaxis.title.style.fontFamily, fontWeight: e.config.xaxis.title.style.fontWeight, foreColor: e.config.xaxis.title.style.color, cssClass: "apexcharts-xaxis-title-text " + e.config.xaxis.title.style.cssClass }); c.add(d), i.add(c) } if (e.config.xaxis.axisBorder.show) { var g = e.globals.barPadForNumericAxis, f = t.drawLine(e.globals.padHorizontal + e.config.xaxis.axisBorder.offsetX - g, this.offY, this.xaxisBorderWidth + g, this.offY, e.config.xaxis.axisBorder.color, 0, this.xaxisBorderHeight); this.elgrid && this.elgrid.elGridBorders && e.config.grid.show ? this.elgrid.elGridBorders.add(f) : i.add(f) } return i } }, { key: "drawXAxisLabelAndGroup", value: function (e, t, i, a, s, r) { var n, o = this, h = arguments.length > 6 && arguments[6] !== void 0 ? arguments[6] : {}, c = [], d = [], g = this.w, f = h.xaxisFontSize || this.xaxisFontSize, x = h.xaxisFontFamily || this.xaxisFontFamily, b = h.xaxisForeColors || this.xaxisForeColors, v = h.fontWeight || g.config.xaxis.labels.style.fontWeight, y = h.cssClass || g.config.xaxis.labels.style.cssClass, w = g.globals.padHorizontal, l = a.length, u = g.config.xaxis.type === "category" ? g.globals.dataPoints : l; if (u === 0 && l > u && (u = l), s) { var m = u > 1 ? u - 1 : u; n = g.globals.gridWidth / Math.min(m, l - 1), w = w + r(0, n) / 2 + g.config.xaxis.labels.offsetX } else n = g.globals.gridWidth / u, w = w + r(0, n) + g.config.xaxis.labels.offsetX; for (var A = function (S) { var L = w - r(S, n) / 2 + g.config.xaxis.labels.offsetX; S === 0 && l === 1 && n / 2 === w && u === 1 && (L = g.globals.gridWidth / 2); var C = o.axesUtils.getLabel(a, g.globals.timescaleLabels, L, S, c, f, e), I = 28; if (g.globals.rotateXLabels && e && (I = 22), g.config.xaxis.title.text && g.config.xaxis.position === "top" && (I += parseFloat(g.config.xaxis.title.style.fontSize) + 2), e || (I = I + parseFloat(f) + (g.globals.xAxisLabelsHeight - g.globals.xAxisGroupLabelsHeight) + (g.globals.rotateXLabels ? 10 : 0)), C = g.config.xaxis.tickAmount !== void 0 && g.config.xaxis.tickAmount !== "dataPoints" && g.config.xaxis.type !== "datetime" ? o.axesUtils.checkLabelBasedOnTickamount(S, C, l) : o.axesUtils.checkForOverflowingLabels(S, C, l, c, d), g.config.xaxis.labels.show) { var z = t.drawText({ x: C.x, y: o.offY + g.config.xaxis.labels.offsetY + I - (g.config.xaxis.position === "top" ? g.globals.xAxisHeight + g.config.xaxis.axisTicks.height - 2 : 0), text: C.text, textAnchor: "middle", fontWeight: C.isBold ? 600 : v, fontSize: f, fontFamily: x, foreColor: Array.isArray(b) ? e && g.config.xaxis.convertedCatToNumeric ? b[g.globals.minX + S - 1] : b[S] : b, isPlainText: !1, cssClass: (e ? "apexcharts-xaxis-label " : "apexcharts-xaxis-group-label ") + y }); if (i.add(z), z.on("click", function (T) { if (typeof g.config.chart.events.xAxisLabelClick == "function") { var E = Object.assign({}, g, { labelIndex: S }); g.config.chart.events.xAxisLabelClick(T, o.ctx, E) } }), e) { var M = document.createElementNS(g.globals.SVGNS, "title"); M.textContent = Array.isArray(C.text) ? C.text.join(" ") : C.text, z.node.appendChild(M), C.text !== "" && (c.push(C.text), d.push(C)) } } S < l - 1 && (w += r(S + 1, n)) }, k = 0; k <= l - 1; k++)A(k) } }, { key: "drawXaxisInversed", value: function (e) { var t, i, a = this, s = this.w, r = new X(this.ctx), n = s.config.yaxis[0].opposite ? s.globals.translateYAxisX[e] : 0, o = r.group({ class: "apexcharts-yaxis apexcharts-xaxis-inversed", rel: e }), h = r.group({ class: "apexcharts-yaxis-texts-g apexcharts-xaxis-inversed-texts-g", transform: "translate(" + n + ", 0)" }); o.add(h); var c = []; if (s.config.yaxis[e].show) for (var d = 0; d < this.xaxisLabels.length; d++)c.push(this.xaxisLabels[d]); t = s.globals.gridHeight / c.length, i = -t / 2.2; var g = s.globals.yLabelFormatters[0], f = s.config.yaxis[0].labels; if (f.show) for (var x = function (m) { var A = c[m] === void 0 ? "" : c[m]; A = g(A, { seriesIndex: e, dataPointIndex: m, w: s }); var k = a.axesUtils.getYAxisForeColor(f.style.colors, e), S = 0; Array.isArray(A) && (S = A.length / 2 * parseInt(f.style.fontSize, 10)); var L = f.offsetX - 15, C = "end"; a.yaxis.opposite && (C = "start"), s.config.yaxis[0].labels.align === "left" ? (L = f.offsetX, C = "start") : s.config.yaxis[0].labels.align === "center" ? (L = f.offsetX, C = "middle") : s.config.yaxis[0].labels.align === "right" && (C = "end"); var I = r.drawText({ x: L, y: i + t + f.offsetY - S, text: A, textAnchor: C, foreColor: Array.isArray(k) ? k[m] : k, fontSize: f.style.fontSize, fontFamily: f.style.fontFamily, fontWeight: f.style.fontWeight, isPlainText: !1, cssClass: "apexcharts-yaxis-label " + f.style.cssClass, maxWidth: f.maxWidth }); h.add(I), I.on("click", function (T) { if (typeof s.config.chart.events.xAxisLabelClick == "function") { var E = Object.assign({}, s, { labelIndex: m }); s.config.chart.events.xAxisLabelClick(T, a.ctx, E) } }); var z = document.createElementNS(s.globals.SVGNS, "title"); if (z.textContent = Array.isArray(A) ? A.join(" ") : A, I.node.appendChild(z), s.config.yaxis[e].labels.rotate !== 0) { var M = r.rotateAroundCenter(I.node); I.node.setAttribute("transform", "rotate(".concat(s.config.yaxis[e].labels.rotate, " 0 ").concat(M.y, ")")) } i += t }, b = 0; b <= c.length - 1; b++)x(b); if (s.config.yaxis[0].title.text !== void 0) { var v = r.group({ class: "apexcharts-yaxis-title apexcharts-xaxis-title-inversed", transform: "translate(" + n + ", 0)" }), y = r.drawText({ x: s.config.yaxis[0].title.offsetX, y: s.globals.gridHeight / 2 + s.config.yaxis[0].title.offsetY, text: s.config.yaxis[0].title.text, textAnchor: "middle", foreColor: s.config.yaxis[0].title.style.color, fontSize: s.config.yaxis[0].title.style.fontSize, fontWeight: s.config.yaxis[0].title.style.fontWeight, fontFamily: s.config.yaxis[0].title.style.fontFamily, cssClass: "apexcharts-yaxis-title-text " + s.config.yaxis[0].title.style.cssClass }); v.add(y), o.add(v) } var w = 0; this.isCategoryBarHorizontal && s.config.yaxis[0].opposite && (w = s.globals.gridWidth); var l = s.config.xaxis.axisBorder; if (l.show) { var u = r.drawLine(s.globals.padHorizontal + l.offsetX + w, 1 + l.offsetY, s.globals.padHorizontal + l.offsetX + w, s.globals.gridHeight + l.offsetY, l.color, 0); this.elgrid && this.elgrid.elGridBorders && s.config.grid.show ? this.elgrid.elGridBorders.add(u) : o.add(u) } return s.config.yaxis[0].axisTicks.show && this.axesUtils.drawYAxisTicks(w, c.length, s.config.yaxis[0].axisBorder, s.config.yaxis[0].axisTicks, 0, t, o), o } }, { key: "drawXaxisTicks", value: function (e, t, i) { var a = this.w, s = e; if (!(e < 0 || e - 2 > a.globals.gridWidth)) { var r = this.offY + a.config.xaxis.axisTicks.offsetY; if (t = t + r + a.config.xaxis.axisTicks.height, a.config.xaxis.position === "top" && (t = r - a.config.xaxis.axisTicks.height), a.config.xaxis.axisTicks.show) { var n = new X(this.ctx).drawLine(e + a.config.xaxis.axisTicks.offsetX, r + a.config.xaxis.offsetY, s + a.config.xaxis.axisTicks.offsetX, t + a.config.xaxis.offsetY, a.config.xaxis.axisTicks.color); i.add(n), n.node.classList.add("apexcharts-xaxis-tick") } } } }, { key: "getXAxisTicksPositions", value: function () { var e = this.w, t = [], i = this.xaxisLabels.length, a = e.globals.padHorizontal; if (e.globals.timescaleLabels.length > 0) for (var s = 0; s < i; s++)a = this.xaxisLabels[s].position, t.push(a); else for (var r = i, n = 0; n < r; n++) { var o = r; e.globals.isXNumeric && e.config.chart.type !== "bar" && (o -= 1), a += e.globals.gridWidth / o, t.push(a) } return t } }, { key: "xAxisLabelCorrections", value: function () { var e = this.w, t = new X(this.ctx), i = e.globals.dom.baseEl.querySelector(".apexcharts-xaxis-texts-g"), a = e.globals.dom.baseEl.querySelectorAll(".apexcharts-xaxis-texts-g text:not(.apexcharts-xaxis-group-label)"), s = e.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxis-inversed text"), r = e.globals.dom.baseEl.querySelectorAll(".apexcharts-xaxis-inversed-texts-g text tspan"); if (e.globals.rotateXLabels || e.config.xaxis.labels.rotateAlways) for (var n = 0; n < a.length; n++) { var o = t.rotateAroundCenter(a[n]); o.y = o.y - 1, o.x = o.x + 1, a[n].setAttribute("transform", "rotate(".concat(e.config.xaxis.labels.rotate, " ").concat(o.x, " ").concat(o.y, ")")), a[n].setAttribute("text-anchor", "end"), i.setAttribute("transform", "translate(0, ".concat(-10, ")")); var h = a[n].childNodes; e.config.xaxis.labels.trim && Array.prototype.forEach.call(h, function (f) { t.placeTextWithEllipsis(f, f.textContent, e.globals.xAxisLabelsHeight - (e.config.legend.position === "bottom" ? 20 : 10)) }) } else (function () { for (var f = e.globals.gridWidth / (e.globals.labels.length + 1), x = 0; x < a.length; x++) { var b = a[x].childNodes; e.config.xaxis.labels.trim && e.config.xaxis.type !== "datetime" && Array.prototype.forEach.call(b, function (v) { t.placeTextWithEllipsis(v, v.textContent, f) }) } })(); if (s.length > 0) { var c = s[s.length - 1].getBBox(), d = s[0].getBBox(); c.x < -20 && s[s.length - 1].parentNode.removeChild(s[s.length - 1]), d.x + d.width > e.globals.gridWidth && !e.globals.isBarHorizontal && s[0].parentNode.removeChild(s[0]); for (var g = 0; g < r.length; g++)t.placeTextWithEllipsis(r[g], r[g].textContent, e.config.yaxis[0].labels.maxWidth - (e.config.yaxis[0].title.text ? 2 * parseFloat(e.config.yaxis[0].title.style.fontSize) : 0) - 15) } } }]), p }(), Rt = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w; var t = this.w; this.xaxisLabels = t.globals.labels.slice(), this.axesUtils = new ge(e), this.isRangeBar = t.globals.seriesRange.length && t.globals.isBarHorizontal, t.globals.timescaleLabels.length > 0 && (this.xaxisLabels = t.globals.timescaleLabels.slice()) } return R(p, [{ key: "drawGridArea", value: function () { var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : null, t = this.w, i = new X(this.ctx); e === null && (e = i.group({ class: "apexcharts-grid" })); var a = i.drawLine(t.globals.padHorizontal, 1, t.globals.padHorizontal, t.globals.gridHeight, "transparent"), s = i.drawLine(t.globals.padHorizontal, t.globals.gridHeight, t.globals.gridWidth, t.globals.gridHeight, "transparent"); return e.add(s), e.add(a), e } }, { key: "drawGrid", value: function () { var e = null; return this.w.globals.axisCharts && (e = this.renderGrid(), this.drawGridArea(e.el)), e } }, { key: "createGridMask", value: function () { var e = this.w, t = e.globals, i = new X(this.ctx), a = Array.isArray(e.config.stroke.width) ? 0 : e.config.stroke.width; if (Array.isArray(e.config.stroke.width)) { var s = 0; e.config.stroke.width.forEach(function (d) { s = Math.max(s, d) }), a = s } t.dom.elGridRectMask = document.createElementNS(t.SVGNS, "clipPath"), t.dom.elGridRectMask.setAttribute("id", "gridRectMask".concat(t.cuid)), t.dom.elGridRectMarkerMask = document.createElementNS(t.SVGNS, "clipPath"), t.dom.elGridRectMarkerMask.setAttribute("id", "gridRectMarkerMask".concat(t.cuid)), t.dom.elForecastMask = document.createElementNS(t.SVGNS, "clipPath"), t.dom.elForecastMask.setAttribute("id", "forecastMask".concat(t.cuid)), t.dom.elNonForecastMask = document.createElementNS(t.SVGNS, "clipPath"), t.dom.elNonForecastMask.setAttribute("id", "nonForecastMask".concat(t.cuid)); var r = e.config.chart.type, n = 0, o = 0; (r === "bar" || r === "rangeBar" || r === "candlestick" || r === "boxPlot" || e.globals.comboBarCount > 0) && e.globals.isXNumeric && !e.globals.isBarHorizontal && (n = e.config.grid.padding.left, o = e.config.grid.padding.right, t.barPadForNumericAxis > n && (n = t.barPadForNumericAxis, o = t.barPadForNumericAxis)), t.dom.elGridRect = i.drawRect(-a / 2 - n - 2, -a / 2 - 2, t.gridWidth + a + o + n + 4, t.gridHeight + a + 4, 0, "#fff"); var h = e.globals.markers.largestSize + 1; t.dom.elGridRectMarker = i.drawRect(2 * -h, 2 * -h, t.gridWidth + 4 * h, t.gridHeight + 4 * h, 0, "#fff"), t.dom.elGridRectMask.appendChild(t.dom.elGridRect.node), t.dom.elGridRectMarkerMask.appendChild(t.dom.elGridRectMarker.node); var c = t.dom.baseEl.querySelector("defs"); c.appendChild(t.dom.elGridRectMask), c.appendChild(t.dom.elForecastMask), c.appendChild(t.dom.elNonForecastMask), c.appendChild(t.dom.elGridRectMarkerMask) } }, { key: "_drawGridLines", value: function (e) { var t = e.i, i = e.x1, a = e.y1, s = e.x2, r = e.y2, n = e.xCount, o = e.parent, h = this.w; if (!(t === 0 && h.globals.skipFirstTimelinelabel || t === n - 1 && h.globals.skipLastTimelinelabel && !h.config.xaxis.labels.formatter || h.config.chart.type === "radar")) { h.config.grid.xaxis.lines.show && this._drawGridLine({ i: t, x1: i, y1: a, x2: s, y2: r, xCount: n, parent: o }); var c = 0; if (h.globals.hasXaxisGroups && h.config.xaxis.tickPlacement === "between") { var d = h.globals.groups; if (d) { for (var g = 0, f = 0; g < t && f < d.length; f++)g += d[f].cols; g === t && (c = .6 * h.globals.xAxisLabelsHeight) } } new Me(this.ctx).drawXaxisTicks(i, c, h.globals.dom.elGraphical) } } }, { key: "_drawGridLine", value: function (e) { var t = e.i, i = e.x1, a = e.y1, s = e.x2, r = e.y2, n = e.xCount, o = e.parent, h = this.w, c = !1, d = o.node.classList.contains("apexcharts-gridlines-horizontal"), g = h.config.grid.strokeDashArray, f = h.globals.barPadForNumericAxis; (a === 0 && r === 0 || i === 0 && s === 0) && (c = !0), a === h.globals.gridHeight && r === h.globals.gridHeight && (c = !0), !h.globals.isBarHorizontal || t !== 0 && t !== n - 1 || (c = !0); var x = new X(this).drawLine(i - (d ? f : 0), a, s + (d ? f : 0), r, h.config.grid.borderColor, g); x.node.classList.add("apexcharts-gridline"), c && h.config.grid.show ? this.elGridBorders.add(x) : o.add(x) } }, { key: "_drawGridBandRect", value: function (e) { var t = e.c, i = e.x1, a = e.y1, s = e.x2, r = e.y2, n = e.type, o = this.w, h = new X(this.ctx), c = o.globals.barPadForNumericAxis, d = o.config.grid[n].colors[t], g = h.drawRect(i - (n === "row" ? c : 0), a, s + (n === "row" ? 2 * c : 0), r, 0, d, o.config.grid[n].opacity); this.elg.add(g), g.attr("clip-path", "url(#gridRectMask".concat(o.globals.cuid, ")")), g.node.classList.add("apexcharts-grid-".concat(n)) } }, { key: "_drawXYLines", value: function (e) { var t = this, i = e.xCount, a = e.tickAmount, s = this.w; if (s.config.grid.xaxis.lines.show || s.config.xaxis.axisTicks.show) { var r, n = s.globals.padHorizontal, o = s.globals.gridHeight; s.globals.timescaleLabels.length ? function (x) { for (var b = x.xC, v = x.x1, y = x.y1, w = x.x2, l = x.y2, u = 0; u < b; u++)v = t.xaxisLabels[u].position, w = t.xaxisLabels[u].position, t._drawGridLines({ i: u, x1: v, y1: y, x2: w, y2: l, xCount: i, parent: t.elgridLinesV }) }({ xC: i, x1: n, y1: 0, x2: r, y2: o }) : (s.globals.isXNumeric && (i = s.globals.xAxisScale.result.length), function (x) { for (var b = x.xC, v = x.x1, y = x.y1, w = x.x2, l = x.y2, u = 0; u < b + (s.globals.isXNumeric ? 0 : 1); u++)u === 0 && b === 1 && s.globals.dataPoints === 1 && (w = v = s.globals.gridWidth / 2), t._drawGridLines({ i: u, x1: v, y1: y, x2: w, y2: l, xCount: i, parent: t.elgridLinesV }), w = v += s.globals.gridWidth / (s.globals.isXNumeric ? b - 1 : b) }({ xC: i, x1: n, y1: 0, x2: r, y2: o })) } if (s.config.grid.yaxis.lines.show) { var h = 0, c = 0, d = s.globals.gridWidth, g = a + 1; this.isRangeBar && (g = s.globals.labels.length); for (var f = 0; f < g + (this.isRangeBar ? 1 : 0); f++)this._drawGridLine({ i: f, xCount: g + (this.isRangeBar ? 1 : 0), x1: 0, y1: h, x2: d, y2: c, parent: this.elgridLinesH }), c = h += s.globals.gridHeight / (this.isRangeBar ? g : a) } } }, { key: "_drawInvertedXYLines", value: function (e) { var t = e.xCount, i = this.w; if (i.config.grid.xaxis.lines.show || i.config.xaxis.axisTicks.show) for (var a, s = i.globals.padHorizontal, r = i.globals.gridHeight, n = 0; n < t + 1; n++)i.config.grid.xaxis.lines.show && this._drawGridLine({ i: n, xCount: t + 1, x1: s, y1: 0, x2: a, y2: r, parent: this.elgridLinesV }), new Me(this.ctx).drawXaxisTicks(s, 0, i.globals.dom.elGraphical), a = s += i.globals.gridWidth / t; if (i.config.grid.yaxis.lines.show) for (var o = 0, h = 0, c = i.globals.gridWidth, d = 0; d < i.globals.dataPoints + 1; d++)this._drawGridLine({ i: d, xCount: i.globals.dataPoints + 1, x1: 0, y1: o, x2: c, y2: h, parent: this.elgridLinesH }), h = o += i.globals.gridHeight / i.globals.dataPoints } }, { key: "renderGrid", value: function () { var e = this.w, t = e.globals, i = new X(this.ctx); this.elg = i.group({ class: "apexcharts-grid" }), this.elgridLinesH = i.group({ class: "apexcharts-gridlines-horizontal" }), this.elgridLinesV = i.group({ class: "apexcharts-gridlines-vertical" }), this.elGridBorders = i.group({ class: "apexcharts-grid-borders" }), this.elg.add(this.elgridLinesH), this.elg.add(this.elgridLinesV), e.config.grid.show || (this.elgridLinesV.hide(), this.elgridLinesH.hide(), this.elGridBorders.hide()); for (var a = 0; a < t.seriesYAxisMap.length && t.ignoreYAxisIndexes.indexOf(a) !== -1;)a++; a === t.seriesYAxisMap.length && (a = 0); var s, r = t.yAxisScale[a].result.length - 1; if (!t.isBarHorizontal || this.isRangeBar) { var n, o, h; s = this.xaxisLabels.length, this.isRangeBar && (r = t.labels.length, e.config.xaxis.tickAmount && e.config.xaxis.labels.formatter && (s = e.config.xaxis.tickAmount), ((n = t.yAxisScale) === null || n === void 0 || (o = n[a]) === null || o === void 0 || (h = o.result) === null || h === void 0 ? void 0 : h.length) > 0 && e.config.xaxis.type !== "datetime" && (s = t.yAxisScale[a].result.length - 1)), this._drawXYLines({ xCount: s, tickAmount: r }) } else s = r, r = t.xTickAmount, this._drawInvertedXYLines({ xCount: s, tickAmount: r }); return this.drawGridBands(s, r), { el: this.elg, elGridBorders: this.elGridBorders, xAxisTickWidth: t.gridWidth / s } } }, { key: "drawGridBands", value: function (e, t) { var i = this.w; if (i.config.grid.row.colors !== void 0 && i.config.grid.row.colors.length > 0) for (var a = 0, s = i.globals.gridHeight / t, r = i.globals.gridWidth, n = 0, o = 0; n < t; n++, o++)o >= i.config.grid.row.colors.length && (o = 0), this._drawGridBandRect({ c: o, x1: 0, y1: a, x2: r, y2: s, type: "row" }), a += i.globals.gridHeight / t; if (i.config.grid.column.colors !== void 0 && i.config.grid.column.colors.length > 0) { var h = i.globals.isBarHorizontal || i.config.xaxis.tickPlacement !== "on" || i.config.xaxis.type !== "category" && !i.config.xaxis.convertedCatToNumeric ? e : e - 1; i.globals.isXNumeric && (h = i.globals.xAxisScale.result.length - 1); for (var c = i.globals.padHorizontal, d = i.globals.padHorizontal + i.globals.gridWidth / h, g = i.globals.gridHeight, f = 0, x = 0; f < e; f++, x++) { var b; x >= i.config.grid.column.colors.length && (x = 0), i.config.xaxis.type === "datetime" && (c = this.xaxisLabels[f].position, d = (((b = this.xaxisLabels[f + 1]) === null || b === void 0 ? void 0 : b.position) || i.globals.gridWidth) - this.xaxisLabels[f].position), this._drawGridBandRect({ c: x, x1: c, y1: 0, x2: d, y2: g, type: "column" }), c += i.globals.gridWidth / h } } } }]), p }(), Ot = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w } return R(p, [{ key: "niceScale", value: function (e, t) { var i, a, s, r, n = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 0, o = 1e-11, h = this.w, c = h.globals; c.isBarHorizontal ? (i = h.config.xaxis, a = Math.max((c.svgWidth - 100) / 25, 2)) : (i = h.config.yaxis[n], a = Math.max((c.svgHeight - 100) / 15, 2)), P.isNumber(a) || (a = 10), s = i.min !== void 0 && i.min !== null, r = i.max !== void 0 && i.min !== null; var d = i.stepSize !== void 0 && i.stepSize !== null, g = i.tickAmount !== void 0 && i.tickAmount !== null, f = g ? i.tickAmount : c.niceScaleDefaultTicks[Math.min(Math.round(a / 2), c.niceScaleDefaultTicks.length - 1)]; if (c.isMultipleYAxis && !g && c.multiAxisTickAmount > 0 && (f = c.multiAxisTickAmount, g = !0), f = f === "dataPoints" ? c.dataPoints - 1 : Math.abs(Math.round(f)), (e === Number.MIN_VALUE && t === 0 || !P.isNumber(e) && !P.isNumber(t) || e === Number.MIN_VALUE && t === -Number.MAX_VALUE) && (e = P.isNumber(i.min) ? i.min : 0, t = P.isNumber(i.max) ? i.max : e + f, c.allSeriesCollapsed = !1), e > t) { console.warn("axis.min cannot be greater than axis.max: swapping min and max"); var x = t; t = e, e = x } else e === t && (e = e === 0 ? 0 : e - 1, t = t === 0 ? 2 : t + 1); var b = []; f < 1 && (f = 1); var v = f, y = Math.abs(t - e); !s && e > 0 && e / y < .15 && (e = 0, s = !0), !r && t < 0 && -t / y < .15 && (t = 0, r = !0); var w = (y = Math.abs(t - e)) / v, l = w, u = Math.floor(Math.log10(l)), m = Math.pow(10, u), A = Math.ceil(l / m); if (w = l = (A = c.niceScaleAllowedMagMsd[c.yValueDecimal === 0 ? 0 : 1][A]) * m, c.isBarHorizontal && i.stepSize && i.type !== "datetime" ? (w = i.stepSize, d = !0) : d && (w = i.stepSize), d && i.forceNiceScale) { var k = Math.floor(Math.log10(w)); w *= Math.pow(10, u - k) } if (s && r) { var S = y / v; if (g) if (d) if (P.mod(y, w) != 0) { var L = P.getGCD(w, S); w = S / L < 10 ? L : S } else P.mod(w, S) == 0 ? w = S : (S = w, g = !1); else w = S; else if (d) P.mod(y, w) == 0 ? S = w : w = S; else if (P.mod(y, w) == 0) S = w; else { S = y / (v = Math.ceil(y / w)); var C = P.getGCD(y, w); y / C < a && (S = C), w = S } v = Math.round(y / w) } else { if (s || r) { if (r) if (g) e = t - w * v; else { var I = e; e = w * Math.floor(e / w), Math.abs(t - e) / P.getGCD(y, w) > a && (e = t - w * f, e += w * Math.floor((I - e) / w)) } else if (s) if (g) t = e + w * v; else { var z = t; t = w * Math.ceil(t / w), Math.abs(t - e) / P.getGCD(y, w) > a && (t = e + w * f, t += w * Math.ceil((z - t) / w)) } } else if (c.isMultipleYAxis && g) { var M = w * Math.floor(e / w), T = M + w * v; T < t && (w *= 2), T = t, t = (e = M) + w * v, y = Math.abs(t - e), e > 0 && e < Math.abs(T - t) && (e = 0, t = w * v), t < 0 && -t < Math.abs(M - e) && (t = 0, e = -w * v) } else e = w * Math.floor(e / w), t = w * Math.ceil(t / w); y = Math.abs(t - e), w = P.getGCD(y, w), v = Math.round(y / w) } if (g || s || r || (v = Math.ceil((y - o) / (w + o))) > 16 && P.getPrimeFactors(v).length < 2 && v++, !g && i.forceNiceScale && c.yValueDecimal === 0 && v > y && (v = y, w = Math.round(y / v)), v > a && (!g && !d || i.forceNiceScale)) { var E = P.getPrimeFactors(v), O = E.length - 1, D = v; e: for (var H = 0; H < O; H++)for (var W = 0; W <= O - H; W++) { for (var N = Math.min(W + H, O), B = D, q = 1, Z = W; Z <= N; Z++)q *= E[Z]; if ((B /= q) < a) { D = B; break e } } w = D === v ? y : y / D, v = Math.round(y / w) } c.isMultipleYAxis && c.multiAxisTickAmount == 0 && c.ignoreYAxisIndexes.indexOf(n) < 0 && (c.multiAxisTickAmount = v); var j = e - w, se = w * o; do j += w, b.push(P.stripNumber(j, 7)); while (t - j > se); return { result: b, niceMin: b[0], niceMax: b[b.length - 1] } } }, { key: "linearScale", value: function (e, t) { var i = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 10, a = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : 0, s = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : void 0, r = Math.abs(t - e), n = []; if (e === t) return { result: n = [e], niceMin: n[0], niceMax: n[n.length - 1] }; (i = this._adjustTicksForSmallRange(i, a, r)) === "dataPoints" && (i = this.w.globals.dataPoints - 1), s || (s = r / i), s = Math.round(10 * (s + Number.EPSILON)) / 10, i === Number.MAX_VALUE && (i = 5, s = 1); for (var o = e; i >= 0;)n.push(o), o = P.preciseAddition(o, s), i -= 1; return { result: n, niceMin: n[0], niceMax: n[n.length - 1] } } }, { key: "logarithmicScaleNice", value: function (e, t, i) { t <= 0 && (t = Math.max(e, i)), e <= 0 && (e = Math.min(t, i)); for (var a = [], s = Math.ceil(Math.log(t) / Math.log(i) + 1), r = Math.floor(Math.log(e) / Math.log(i)); r < s; r++)a.push(Math.pow(i, r)); return { result: a, niceMin: a[0], niceMax: a[a.length - 1] } } }, { key: "logarithmicScale", value: function (e, t, i) { t <= 0 && (t = Math.max(e, i)), e <= 0 && (e = Math.min(t, i)); for (var a = [], s = Math.log(t) / Math.log(i), r = Math.log(e) / Math.log(i), n = s - r, o = Math.round(n), h = n / o, c = 0, d = r; c < o; c++, d += h)a.push(Math.pow(i, d)); return a.push(Math.pow(i, s)), { result: a, niceMin: e, niceMax: t } } }, { key: "_adjustTicksForSmallRange", value: function (e, t, i) { var a = e; if (t !== void 0 && this.w.config.yaxis[t].labels.formatter && this.w.config.yaxis[t].tickAmount === void 0) { var s = Number(this.w.config.yaxis[t].labels.formatter(1)); P.isNumber(s) && this.w.globals.yValueDecimal === 0 && (a = Math.ceil(i)) } return a < e ? a : e } }, { key: "setYScaleForIndex", value: function (e, t, i) { var a = this.w.globals, s = this.w.config, r = a.isBarHorizontal ? s.xaxis : s.yaxis[e]; a.yAxisScale[e] === void 0 && (a.yAxisScale[e] = []); var n = Math.abs(i - t); r.logarithmic && n <= 5 && (a.invalidLogScale = !0), r.logarithmic && n > 5 ? (a.allSeriesCollapsed = !1, a.yAxisScale[e] = r.forceNiceScale ? this.logarithmicScaleNice(t, i, r.logBase) : this.logarithmicScale(t, i, r.logBase)) : i !== -Number.MAX_VALUE && P.isNumber(i) && t !== Number.MAX_VALUE && P.isNumber(t) ? (a.allSeriesCollapsed = !1, a.yAxisScale[e] = this.niceScale(t, i, e)) : a.yAxisScale[e] = this.niceScale(Number.MIN_VALUE, 0, e) } }, { key: "setXScale", value: function (e, t) { var i = this.w, a = i.globals, s = Math.abs(t - e); if (t !== -Number.MAX_VALUE && P.isNumber(t)) { var r = a.xTickAmount + 1; s < 10 && s > 1 && (r = s), a.xAxisScale = this.linearScale(e, t, r, 0, i.config.xaxis.stepSize) } else a.xAxisScale = this.linearScale(0, 10, 10); return a.xAxisScale } }, { key: "setSeriesYAxisMappings", value: function () { var e = this.w.globals, t = this.w.config, i = [], a = [], s = [], r = e.series.length > t.yaxis.length || t.yaxis.some(function (d) { return Array.isArray(d.seriesName) }); t.series.forEach(function (d, g) { s.push(g), a.push(null) }), t.yaxis.forEach(function (d, g) { i[g] = [] }); var n = []; t.yaxis.forEach(function (d, g) { var f = !1; if (d.seriesName) { var x = []; Array.isArray(d.seriesName) ? x = d.seriesName : x.push(d.seriesName), x.forEach(function (b) { t.series.forEach(function (v, y) { if (v.name === b) { var w = y; g === y || r ? !r || s.indexOf(y) > -1 ? i[g].push([g, y]) : console.warn("Series '" + v.name + "' referenced more than once in what looks like the new style. That is, when using either seriesName: [], or when there are more series than yaxes.") : (i[y].push([y, g]), w = g), f = !0, (w = s.indexOf(w)) !== -1 && s.splice(w, 1) } }) }) } f || n.push(g) }), i = i.map(function (d, g) { var f = []; return d.forEach(function (x) { a[x[1]] = x[0], f.push(x[1]) }), f }); for (var o = t.yaxis.length - 1, h = 0; h < n.length && (o = n[h], i[o] = [], s); h++) { var c = s[0]; s.shift(), i[o].push(c), a[c] = o } s.forEach(function (d) { i[o].push(d), a[d] = o }), e.seriesYAxisMap = i.map(function (d) { return d }), e.seriesYAxisReverseMap = a.map(function (d) { return d }) } }, { key: "scaleMultipleYAxes", value: function () { var e = this, t = this.w.config, i = this.w.globals; this.setSeriesYAxisMappings(); var a = i.seriesYAxisMap, s = i.minYArr, r = i.maxYArr; i.allSeriesCollapsed = !0, i.barGroups = [], a.forEach(function (n, o) { var h = []; n.forEach(function (c) { var d = t.series[c].group; h.indexOf(d) < 0 && h.push(d) }), n.length > 0 ? function () { var c, d, g = Number.MAX_VALUE, f = -Number.MAX_VALUE, x = g, b = f; if (t.chart.stacked) (function () { var w = i.seriesX[n[0]], l = [], u = [], m = []; h.forEach(function () { l.push(w.map(function () { return Number.MIN_VALUE })), u.push(w.map(function () { return Number.MIN_VALUE })), m.push(w.map(function () { return Number.MIN_VALUE })) }); for (var A = function (S) { !c && t.series[n[S]].type && (c = t.series[n[S]].type); var L = n[S]; d = t.series[L].group ? t.series[L].group : "axis-".concat(o), !(i.collapsedSeriesIndices.indexOf(L) < 0 && i.ancillaryCollapsedSeriesIndices.indexOf(L) < 0) || (i.allSeriesCollapsed = !1, h.forEach(function (C, I) { if (t.series[L].group === C) for (var z = 0; z < i.series[L].length; z++) { var M = i.series[L][z]; M >= 0 ? u[I][z] += M : m[I][z] += M, l[I][z] += M, x = Math.min(x, M), b = Math.max(b, M) } })), c !== "bar" && c !== "column" || i.barGroups.push(d) }, k = 0; k < n.length; k++)A(k); c || (c = t.chart.type), c === "bar" || c === "column" ? h.forEach(function (S, L) { g = Math.min(g, Math.min.apply(null, m[L])), f = Math.max(f, Math.max.apply(null, u[L])) }) : (h.forEach(function (S, L) { x = Math.min(x, Math.min.apply(null, l[L])), b = Math.max(b, Math.max.apply(null, l[L])) }), g = x, f = b), g === Number.MIN_VALUE && f === Number.MIN_VALUE && (f = -Number.MAX_VALUE) })(); else for (var v = 0; v < n.length; v++) { var y = n[v]; g = Math.min(g, s[y]), f = Math.max(f, r[y]), !(i.collapsedSeriesIndices.indexOf(y) < 0 && i.ancillaryCollapsedSeriesIndices.indexOf(y) < 0) || (i.allSeriesCollapsed = !1) } t.yaxis[o].min !== void 0 && (g = typeof t.yaxis[o].min == "function" ? t.yaxis[o].min(g) : t.yaxis[o].min), t.yaxis[o].max !== void 0 && (f = typeof t.yaxis[o].max == "function" ? t.yaxis[o].max(f) : t.yaxis[o].max), i.barGroups = i.barGroups.filter(function (w, l, u) { return u.indexOf(w) === l }), e.setYScaleForIndex(o, g, f), n.forEach(function (w) { s[w] = i.yAxisScale[o].niceMin, r[w] = i.yAxisScale[o].niceMax }) }() : e.setYScaleForIndex(o, 0, -Number.MAX_VALUE) }) } }]), p }(), rt = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w, this.scales = new Ot(e) } return R(p, [{ key: "init", value: function () { this.setYRange(), this.setXRange(), this.setZRange() } }, { key: "getMinYMaxY", value: function (e) { var t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : Number.MAX_VALUE, i = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : -Number.MAX_VALUE, a = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : null, s = this.w.config, r = this.w.globals, n = -Number.MAX_VALUE, o = Number.MIN_VALUE; a === null && (a = e + 1); var h = r.series, c = h, d = h; s.chart.type === "candlestick" ? (c = r.seriesCandleL, d = r.seriesCandleH) : s.chart.type === "boxPlot" ? (c = r.seriesCandleO, d = r.seriesCandleC) : r.isRangeData && (c = r.seriesRangeStart, d = r.seriesRangeEnd); var g = !1; if (r.seriesX.length >= a) { var f, x = (f = r.brushSource) === null || f === void 0 ? void 0 : f.w.config.chart.brush; (s.chart.zoom.enabled && s.chart.zoom.autoScaleYaxis || x != null && x.enabled && x != null && x.autoScaleYaxis) && (g = !0) } for (var b = e; b < a; b++) { r.dataPoints = Math.max(r.dataPoints, h[b].length); var v = s.series[b].type; r.categoryLabels.length && (r.dataPoints = r.categoryLabels.filter(function (m) { return m !== void 0 }).length), r.labels.length && s.xaxis.type !== "datetime" && r.series.reduce(function (m, A) { return m + A.length }, 0) !== 0 && (r.dataPoints = Math.max(r.dataPoints, r.labels.length)); var y = 0, w = h[b].length - 1; if (g) { if (s.xaxis.min) for (; y < w && r.seriesX[b][y] < s.xaxis.min; y++); if (s.xaxis.max) for (; w > y && r.seriesX[b][w] > s.xaxis.max; w--); } for (var l = y; l <= w && l < r.series[b].length; l++) { var u = h[b][l]; if (u !== null && P.isNumber(u)) { switch (d[b][l] !== void 0 && (n = Math.max(n, d[b][l]), t = Math.min(t, d[b][l])), c[b][l] !== void 0 && (t = Math.min(t, c[b][l]), i = Math.max(i, c[b][l])), v) { case "candlestick": r.seriesCandleC[b][l] !== void 0 && (n = Math.max(n, r.seriesCandleH[b][l]), t = Math.min(t, r.seriesCandleL[b][l])); break; case "boxPlot": r.seriesCandleC[b][l] !== void 0 && (n = Math.max(n, r.seriesCandleC[b][l]), t = Math.min(t, r.seriesCandleO[b][l])) }v && v !== "candlestick" && v !== "boxPlot" && v !== "rangeArea" && v !== "rangeBar" && (n = Math.max(n, r.series[b][l]), t = Math.min(t, r.series[b][l])), i = n, r.seriesGoals[b] && r.seriesGoals[b][l] && Array.isArray(r.seriesGoals[b][l]) && r.seriesGoals[b][l].forEach(function (m) { o !== Number.MIN_VALUE && (o = Math.min(o, m.value), t = o), n = Math.max(n, m.value), i = n }), P.isFloat(u) && (u = P.noExponents(u), r.yValueDecimal = Math.max(r.yValueDecimal, u.toString().split(".")[1].length)), o > c[b][l] && c[b][l] < 0 && (o = c[b][l]) } else r.hasNullValues = !0 } v !== "bar" && v !== "column" || (o < 0 && n < 0 && (n = 0, i = Math.max(i, 0)), o === Number.MIN_VALUE && (o = 0, t = Math.min(t, 0))) } return s.chart.type === "rangeBar" && r.seriesRangeStart.length && r.isBarHorizontal && (o = t), s.chart.type === "bar" && (o < 0 && n < 0 && (n = 0), o === Number.MIN_VALUE && (o = 0)), { minY: o, maxY: n, lowestY: t, highestY: i } } }, { key: "setYRange", value: function () { var e = this.w.globals, t = this.w.config; e.maxY = -Number.MAX_VALUE, e.minY = Number.MIN_VALUE; var i, a = Number.MAX_VALUE; if (e.isMultipleYAxis) { a = Number.MAX_VALUE; for (var s = 0; s < e.series.length; s++)i = this.getMinYMaxY(s), e.minYArr[s] = i.lowestY, e.maxYArr[s] = i.highestY, a = Math.min(a, i.lowestY) } return i = this.getMinYMaxY(0, a, null, e.series.length), t.chart.type === "bar" ? (e.minY = i.minY, e.maxY = i.maxY) : (e.minY = i.lowestY, e.maxY = i.highestY), a = i.lowestY, t.chart.stacked && this._setStackedMinMax(), t.chart.type === "line" || t.chart.type === "area" || t.chart.type === "scatter" || t.chart.type === "candlestick" || t.chart.type === "boxPlot" || t.chart.type === "rangeBar" && !e.isBarHorizontal ? e.minY === Number.MIN_VALUE && a !== -Number.MAX_VALUE && a !== e.maxY && (e.minY = a) : e.minY = i.minY, t.yaxis.forEach(function (r, n) { r.max !== void 0 && (typeof r.max == "number" ? e.maxYArr[n] = r.max : typeof r.max == "function" && (e.maxYArr[n] = r.max(e.isMultipleYAxis ? e.maxYArr[n] : e.maxY)), e.maxY = e.maxYArr[n]), r.min !== void 0 && (typeof r.min == "number" ? e.minYArr[n] = r.min : typeof r.min == "function" && (e.minYArr[n] = r.min(e.isMultipleYAxis ? e.minYArr[n] === Number.MIN_VALUE ? 0 : e.minYArr[n] : e.minY)), e.minY = e.minYArr[n]) }), e.isBarHorizontal && ["min", "max"].forEach(function (r) { t.xaxis[r] !== void 0 && typeof t.xaxis[r] == "number" && (r === "min" ? e.minY = t.xaxis[r] : e.maxY = t.xaxis[r]) }), e.isMultipleYAxis ? (this.scales.scaleMultipleYAxes(), e.minY = a) : (this.scales.setYScaleForIndex(0, e.minY, e.maxY), e.minY = e.yAxisScale[0].niceMin, e.maxY = e.yAxisScale[0].niceMax, e.minYArr[0] = e.minY, e.maxYArr[0] = e.maxY), e.barGroups = [], e.lineGroups = [], e.areaGroups = [], t.series.forEach(function (r) { switch (r.type || t.chart.type) { case "bar": case "column": e.barGroups.push(r.group); break; case "line": e.lineGroups.push(r.group); break; case "area": e.areaGroups.push(r.group) } }), e.barGroups = e.barGroups.filter(function (r, n, o) { return o.indexOf(r) === n }), e.lineGroups = e.lineGroups.filter(function (r, n, o) { return o.indexOf(r) === n }), e.areaGroups = e.areaGroups.filter(function (r, n, o) { return o.indexOf(r) === n }), { minY: e.minY, maxY: e.maxY, minYArr: e.minYArr, maxYArr: e.maxYArr, yAxisScale: e.yAxisScale } } }, { key: "setXRange", value: function () { var e = this.w.globals, t = this.w.config, i = t.xaxis.type === "numeric" || t.xaxis.type === "datetime" || t.xaxis.type === "category" && !e.noLabelsProvided || e.noLabelsProvided || e.isXNumeric; if (e.isXNumeric && function () { for (var o = 0; o < e.series.length; o++)if (e.labels[o]) for (var h = 0; h < e.labels[o].length; h++)e.labels[o][h] !== null && P.isNumber(e.labels[o][h]) && (e.maxX = Math.max(e.maxX, e.labels[o][h]), e.initialMaxX = Math.max(e.maxX, e.labels[o][h]), e.minX = Math.min(e.minX, e.labels[o][h]), e.initialMinX = Math.min(e.minX, e.labels[o][h])) }(), e.noLabelsProvided && t.xaxis.categories.length === 0 && (e.maxX = e.labels[e.labels.length - 1], e.initialMaxX = e.labels[e.labels.length - 1], e.minX = 1, e.initialMinX = 1), e.isXNumeric || e.noLabelsProvided || e.dataFormatXNumeric) { var a = 10; if (t.xaxis.tickAmount === void 0) a = Math.round(e.svgWidth / 150), t.xaxis.type === "numeric" && e.dataPoints < 30 && (a = e.dataPoints - 1), a > e.dataPoints && e.dataPoints !== 0 && (a = e.dataPoints - 1); else if (t.xaxis.tickAmount === "dataPoints") { if (e.series.length > 1 && (a = e.series[e.maxValsInArrayIndex].length - 1), e.isXNumeric) { var s = e.maxX - e.minX; s < 30 && (a = s - 1) } } else a = t.xaxis.tickAmount; if (e.xTickAmount = a, t.xaxis.max !== void 0 && typeof t.xaxis.max == "number" && (e.maxX = t.xaxis.max), t.xaxis.min !== void 0 && typeof t.xaxis.min == "number" && (e.minX = t.xaxis.min), t.xaxis.range !== void 0 && (e.minX = e.maxX - t.xaxis.range), e.minX !== Number.MAX_VALUE && e.maxX !== -Number.MAX_VALUE) if (t.xaxis.convertedCatToNumeric && !e.dataFormatXNumeric) { for (var r = [], n = e.minX - 1; n < e.maxX; n++)r.push(n + 1); e.xAxisScale = { result: r, niceMin: r[0], niceMax: r[r.length - 1] } } else e.xAxisScale = this.scales.setXScale(e.minX, e.maxX); else e.xAxisScale = this.scales.linearScale(0, a, a, 0, t.xaxis.stepSize), e.noLabelsProvided && e.labels.length > 0 && (e.xAxisScale = this.scales.linearScale(1, e.labels.length, a - 1, 0, t.xaxis.stepSize), e.seriesX = e.labels.slice()); i && (e.labels = e.xAxisScale.result.slice()) } return e.isBarHorizontal && e.labels.length && (e.xTickAmount = e.labels.length), this._handleSingleDataPoint(), this._getMinXDiff(), { minX: e.minX, maxX: e.maxX } } }, { key: "setZRange", value: function () { var e = this.w.globals; if (e.isDataXYZ) { for (var t = 0; t < e.series.length; t++)if (e.seriesZ[t] !== void 0) for (var i = 0; i < e.seriesZ[t].length; i++)e.seriesZ[t][i] !== null && P.isNumber(e.seriesZ[t][i]) && (e.maxZ = Math.max(e.maxZ, e.seriesZ[t][i]), e.minZ = Math.min(e.minZ, e.seriesZ[t][i])) } } }, { key: "_handleSingleDataPoint", value: function () { var e = this.w.globals, t = this.w.config; if (e.minX === e.maxX) { var i = new K(this.ctx); if (t.xaxis.type === "datetime") { var a = i.getDate(e.minX); t.xaxis.labels.datetimeUTC ? a.setUTCDate(a.getUTCDate() - 2) : a.setDate(a.getDate() - 2), e.minX = new Date(a).getTime(); var s = i.getDate(e.maxX); t.xaxis.labels.datetimeUTC ? s.setUTCDate(s.getUTCDate() + 2) : s.setDate(s.getDate() + 2), e.maxX = new Date(s).getTime() } else (t.xaxis.type === "numeric" || t.xaxis.type === "category" && !e.noLabelsProvided) && (e.minX = e.minX - 2, e.initialMinX = e.minX, e.maxX = e.maxX + 2, e.initialMaxX = e.maxX) } } }, { key: "_getMinXDiff", value: function () { var e = this.w.globals; e.isXNumeric && e.seriesX.forEach(function (t, i) { t.length === 1 && t.push(e.seriesX[e.maxValsInArrayIndex][e.seriesX[e.maxValsInArrayIndex].length - 1]); var a = t.slice(); a.sort(function (s, r) { return s - r }), a.forEach(function (s, r) { if (r > 0) { var n = s - a[r - 1]; n > 0 && (e.minXDiff = Math.min(n, e.minXDiff)) } }), e.dataPoints !== 1 && e.minXDiff !== Number.MAX_VALUE || (e.minXDiff = .5) }) } }, { key: "_setStackedMinMax", value: function () { var e = this, t = this.w.globals; if (t.series.length) { var i = t.seriesGroups; i.length || (i = [this.w.globals.seriesNames.map(function (r) { return r })]); var a = {}, s = {}; i.forEach(function (r) { a[r] = [], s[r] = [], e.w.config.series.map(function (n, o) { return r.indexOf(t.seriesNames[o]) > -1 ? o : null }).filter(function (n) { return n !== null }).forEach(function (n) { for (var o = 0; o < t.series[t.maxValsInArrayIndex].length; o++) { var h, c, d, g; a[r][o] === void 0 && (a[r][o] = 0, s[r][o] = 0), (e.w.config.chart.stacked && !t.comboCharts || e.w.config.chart.stacked && t.comboCharts && (!e.w.config.chart.stackOnlyBar || ((h = e.w.config.series) === null || h === void 0 || (c = h[n]) === null || c === void 0 ? void 0 : c.type) === "bar" || ((d = e.w.config.series) === null || d === void 0 || (g = d[n]) === null || g === void 0 ? void 0 : g.type) === "column")) && t.series[n][o] !== null && P.isNumber(t.series[n][o]) && (t.series[n][o] > 0 ? a[r][o] += parseFloat(t.series[n][o]) + 1e-4 : s[r][o] += parseFloat(t.series[n][o])) } }) }), Object.entries(a).forEach(function (r) { var n = It(r, 1)[0]; a[n].forEach(function (o, h) { t.maxY = Math.max(t.maxY, a[n][h]), t.minY = Math.min(t.minY, s[n][h]) }) }) } } }]), p }(), lt = function () { function p(e, t) { F(this, p), this.ctx = e, this.elgrid = t, this.w = e.w; var i = this.w; this.xaxisFontSize = i.config.xaxis.labels.style.fontSize, this.axisFontFamily = i.config.xaxis.labels.style.fontFamily, this.xaxisForeColors = i.config.xaxis.labels.style.colors, this.isCategoryBarHorizontal = i.config.chart.type === "bar" && i.config.plotOptions.bar.horizontal, this.xAxisoffX = 0, i.config.xaxis.position === "bottom" && (this.xAxisoffX = i.globals.gridHeight), this.drawnLabels = [], this.axesUtils = new ge(e) } return R(p, [{ key: "drawYaxis", value: function (e) { var t = this, i = this.w, a = new X(this.ctx), s = i.config.yaxis[e].labels.style, r = s.fontSize, n = s.fontFamily, o = s.fontWeight, h = a.group({ class: "apexcharts-yaxis", rel: e, transform: "translate(" + i.globals.translateYAxisX[e] + ", 0)" }); if (this.axesUtils.isYAxisHidden(e)) return h; var c = a.group({ class: "apexcharts-yaxis-texts-g" }); h.add(c); var d = i.globals.yAxisScale[e].result.length - 1, g = i.globals.gridHeight / d, f = i.globals.yLabelFormatters[e], x = i.globals.yAxisScale[e].result.slice(); x = this.axesUtils.checkForReversedLabels(e, x); var b = ""; if (i.config.yaxis[e].labels.show) { var v = i.globals.translateY + i.config.yaxis[e].labels.offsetY; i.globals.isBarHorizontal ? v = 0 : i.config.chart.type === "heatmap" && (v -= g / 2), v += parseInt(i.config.yaxis[e].labels.style.fontSize, 10) / 3; for (var y = function (L) { var C = x[L]; C = f(C, L, i); var I = i.config.yaxis[e].labels.padding; i.config.yaxis[e].opposite && i.config.yaxis.length !== 0 && (I *= -1); var z = "end"; i.config.yaxis[e].opposite && (z = "start"), i.config.yaxis[e].labels.align === "left" ? z = "start" : i.config.yaxis[e].labels.align === "center" ? z = "middle" : i.config.yaxis[e].labels.align === "right" && (z = "end"); var M = t.axesUtils.getYAxisForeColor(s.colors, e), T = P.listToArray(i.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxis[rel='".concat(e, "'] .apexcharts-yaxis-label tspan"))).map(function (W) { return W.textContent }), E = a.drawText({ x: I, y: v, text: T.indexOf(C) >= 0 ? "" : C, textAnchor: z, fontSize: r, fontFamily: n, fontWeight: o, maxWidth: i.config.yaxis[e].labels.maxWidth, foreColor: Array.isArray(M) ? M[L] : M, isPlainText: !1, cssClass: "apexcharts-yaxis-label " + s.cssClass }); L === d && (b = E), c.add(E); var O = document.createElementNS(i.globals.SVGNS, "title"); if (O.textContent = Array.isArray(C) ? C.join(" ") : C, E.node.appendChild(O), i.config.yaxis[e].labels.rotate !== 0) { var D = a.rotateAroundCenter(b.node), H = a.rotateAroundCenter(E.node); E.node.setAttribute("transform", "rotate(".concat(i.config.yaxis[e].labels.rotate, " ").concat(D.x, " ").concat(H.y, ")")) } v += g }, w = d; w >= 0; w--)y(w) } if (i.config.yaxis[e].title.text !== void 0) { var l = a.group({ class: "apexcharts-yaxis-title" }), u = 0; i.config.yaxis[e].opposite && (u = i.globals.translateYAxisX[e]); var m = a.drawText({ x: u, y: i.globals.gridHeight / 2 + i.globals.translateY + i.config.yaxis[e].title.offsetY, text: i.config.yaxis[e].title.text, textAnchor: "end", foreColor: i.config.yaxis[e].title.style.color, fontSize: i.config.yaxis[e].title.style.fontSize, fontWeight: i.config.yaxis[e].title.style.fontWeight, fontFamily: i.config.yaxis[e].title.style.fontFamily, cssClass: "apexcharts-yaxis-title-text " + i.config.yaxis[e].title.style.cssClass }); l.add(m), h.add(l) } var A = i.config.yaxis[e].axisBorder, k = 31 + A.offsetX; if (i.config.yaxis[e].opposite && (k = -31 - A.offsetX), A.show) { var S = a.drawLine(k, i.globals.translateY + A.offsetY - 2, k, i.globals.gridHeight + i.globals.translateY + A.offsetY + 2, A.color, 0, A.width); h.add(S) } return i.config.yaxis[e].axisTicks.show && this.axesUtils.drawYAxisTicks(k, d, A, i.config.yaxis[e].axisTicks, e, g, h), h } }, { key: "drawYaxisInversed", value: function (e) { var t = this.w, i = new X(this.ctx), a = i.group({ class: "apexcharts-xaxis apexcharts-yaxis-inversed" }), s = i.group({ class: "apexcharts-xaxis-texts-g", transform: "translate(".concat(t.globals.translateXAxisX, ", ").concat(t.globals.translateXAxisY, ")") }); a.add(s); var r = t.globals.yAxisScale[e].result.length - 1, n = t.globals.gridWidth / r + .1, o = n + t.config.xaxis.labels.offsetX, h = t.globals.xLabelFormatter, c = t.globals.yAxisScale[e].result.slice(), d = t.globals.timescaleLabels; d.length > 0 && (this.xaxisLabels = d.slice(), r = (c = d.slice()).length), c = this.axesUtils.checkForReversedLabels(e, c); var g = d.length; if (t.config.xaxis.labels.show) for (var f = g ? 0 : r; g ? f < g : f >= 0; g ? f++ : f--) { var x = c[f]; x = h(x, f, t); var b = t.globals.gridWidth + t.globals.padHorizontal - (o - n + t.config.xaxis.labels.offsetX); if (d.length) { var v = this.axesUtils.getLabel(c, d, b, f, this.drawnLabels, this.xaxisFontSize); b = v.x, x = v.text, this.drawnLabels.push(v.text), f === 0 && t.globals.skipFirstTimelinelabel && (x = ""), f === c.length - 1 && t.globals.skipLastTimelinelabel && (x = "") } var y = i.drawText({ x: b, y: this.xAxisoffX + t.config.xaxis.labels.offsetY + 30 - (t.config.xaxis.position === "top" ? t.globals.xAxisHeight + t.config.xaxis.axisTicks.height - 2 : 0), text: x, textAnchor: "middle", foreColor: Array.isArray(this.xaxisForeColors) ? this.xaxisForeColors[e] : this.xaxisForeColors, fontSize: this.xaxisFontSize, fontFamily: this.xaxisFontFamily, fontWeight: t.config.xaxis.labels.style.fontWeight, isPlainText: !1, cssClass: "apexcharts-xaxis-label " + t.config.xaxis.labels.style.cssClass }); s.add(y), y.tspan(x); var w = document.createElementNS(t.globals.SVGNS, "title"); w.textContent = x, y.node.appendChild(w), o += n } return this.inversedYAxisTitleText(a), this.inversedYAxisBorder(a), a } }, { key: "inversedYAxisBorder", value: function (e) { var t = this.w, i = new X(this.ctx), a = t.config.xaxis.axisBorder; if (a.show) { var s = 0; t.config.chart.type === "bar" && t.globals.isXNumeric && (s -= 15); var r = i.drawLine(t.globals.padHorizontal + s + a.offsetX, this.xAxisoffX, t.globals.gridWidth, this.xAxisoffX, a.color, 0, a.height); this.elgrid && this.elgrid.elGridBorders && t.config.grid.show ? this.elgrid.elGridBorders.add(r) : e.add(r) } } }, { key: "inversedYAxisTitleText", value: function (e) { var t = this.w, i = new X(this.ctx); if (t.config.xaxis.title.text !== void 0) { var a = i.group({ class: "apexcharts-xaxis-title apexcharts-yaxis-title-inversed" }), s = i.drawText({ x: t.globals.gridWidth / 2 + t.config.xaxis.title.offsetX, y: this.xAxisoffX + parseFloat(this.xaxisFontSize) + parseFloat(t.config.xaxis.title.style.fontSize) + t.config.xaxis.title.offsetY + 20, text: t.config.xaxis.title.text, textAnchor: "middle", fontSize: t.config.xaxis.title.style.fontSize, fontFamily: t.config.xaxis.title.style.fontFamily, fontWeight: t.config.xaxis.title.style.fontWeight, foreColor: t.config.xaxis.title.style.color, cssClass: "apexcharts-xaxis-title-text " + t.config.xaxis.title.style.cssClass }); a.add(s), e.add(a) } } }, { key: "yAxisTitleRotate", value: function (e, t) { var i = this.w, a = new X(this.ctx), s = { width: 0, height: 0 }, r = { width: 0, height: 0 }, n = i.globals.dom.baseEl.querySelector(" .apexcharts-yaxis[rel='".concat(e, "'] .apexcharts-yaxis-texts-g")); n !== null && (s = n.getBoundingClientRect()); var o = i.globals.dom.baseEl.querySelector(".apexcharts-yaxis[rel='".concat(e, "'] .apexcharts-yaxis-title text")); if (o !== null && (r = o.getBoundingClientRect()), o !== null) { var h = this.xPaddingForYAxisTitle(e, s, r, t); o.setAttribute("x", h.xPos - (t ? 10 : 0)) } if (o !== null) { var c = a.rotateAroundCenter(o); o.setAttribute("transform", "rotate(".concat(t ? -1 * i.config.yaxis[e].title.rotate : i.config.yaxis[e].title.rotate, " ").concat(c.x, " ").concat(c.y, ")")) } } }, { key: "xPaddingForYAxisTitle", value: function (e, t, i, a) { var s = this.w, r = 0, n = 0, o = 10; return s.config.yaxis[e].title.text === void 0 || e < 0 ? { xPos: n, padd: 0 } : (a ? (n = t.width + s.config.yaxis[e].title.offsetX + i.width / 2 + o / 2, (r += 1) === 0 && (n -= o / 2)) : (n = -1 * t.width + s.config.yaxis[e].title.offsetX + o / 2 + i.width / 2, s.globals.isBarHorizontal && (o = 25, n = -1 * t.width - s.config.yaxis[e].title.offsetX - o)), { xPos: n, padd: o }) } }, { key: "setYAxisXPosition", value: function (e, t) { var i = this.w, a = 0, s = 0, r = 18, n = 1; i.config.yaxis.length > 1 && (this.multipleYs = !0), i.config.yaxis.map(function (o, h) { var c = i.globals.ignoreYAxisIndexes.indexOf(h) > -1 || !o.show || o.floating || e[h].width === 0, d = e[h].width + t[h].width; o.opposite ? i.globals.isBarHorizontal ? (s = i.globals.gridWidth + i.globals.translateX - 1, i.globals.translateYAxisX[h] = s - o.labels.offsetX) : (s = i.globals.gridWidth + i.globals.translateX + n, c || (n = n + d + 20), i.globals.translateYAxisX[h] = s - o.labels.offsetX + 20) : (a = i.globals.translateX - r, c || (r = r + d + 20), i.globals.translateYAxisX[h] = a + o.labels.offsetX) }) } }, { key: "setYAxisTextAlignments", value: function () { var e = this.w, t = e.globals.dom.baseEl.getElementsByClassName("apexcharts-yaxis"); (t = P.listToArray(t)).forEach(function (i, a) { var s = e.config.yaxis[a]; if (s && !s.floating && s.labels.align !== void 0) { var r = e.globals.dom.baseEl.querySelector(".apexcharts-yaxis[rel='".concat(a, "'] .apexcharts-yaxis-texts-g")), n = e.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxis[rel='".concat(a, "'] .apexcharts-yaxis-label")); n = P.listToArray(n); var o = r.getBoundingClientRect(); s.labels.align === "left" ? (n.forEach(function (h, c) { h.setAttribute("text-anchor", "start") }), s.opposite || r.setAttribute("transform", "translate(-".concat(o.width, ", 0)"))) : s.labels.align === "center" ? (n.forEach(function (h, c) { h.setAttribute("text-anchor", "middle") }), r.setAttribute("transform", "translate(".concat(o.width / 2 * (s.opposite ? 1 : -1), ", 0)"))) : s.labels.align === "right" && (n.forEach(function (h, c) { h.setAttribute("text-anchor", "end") }), s.opposite && r.setAttribute("transform", "translate(".concat(o.width, ", 0)"))) } }) } }]), p }(), Oi = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w, this.documentEvent = P.bind(this.documentEvent, this) } return R(p, [{ key: "addEventListener", value: function (e, t) { var i = this.w; i.globals.events.hasOwnProperty(e) ? i.globals.events[e].push(t) : i.globals.events[e] = [t] } }, { key: "removeEventListener", value: function (e, t) { var i = this.w; if (i.globals.events.hasOwnProperty(e)) { var a = i.globals.events[e].indexOf(t); a !== -1 && i.globals.events[e].splice(a, 1) } } }, { key: "fireEvent", value: function (e, t) { var i = this.w; if (i.globals.events.hasOwnProperty(e)) { t && t.length || (t = []); for (var a = i.globals.events[e], s = a.length, r = 0; r < s; r++)a[r].apply(null, t) } } }, { key: "setupEventHandlers", value: function () { var e = this, t = this.w, i = this.ctx, a = t.globals.dom.baseEl.querySelector(t.globals.chartClass); this.ctx.eventList.forEach(function (s) { a.addEventListener(s, function (r) { var n = Object.assign({}, t, { seriesIndex: t.globals.axisCharts ? t.globals.capturedSeriesIndex : 0, dataPointIndex: t.globals.capturedDataPointIndex }); r.type === "mousemove" || r.type === "touchmove" ? typeof t.config.chart.events.mouseMove == "function" && t.config.chart.events.mouseMove(r, i, n) : r.type === "mouseleave" || r.type === "touchleave" ? typeof t.config.chart.events.mouseLeave == "function" && t.config.chart.events.mouseLeave(r, i, n) : (r.type === "mouseup" && r.which === 1 || r.type === "touchend") && (typeof t.config.chart.events.click == "function" && t.config.chart.events.click(r, i, n), i.ctx.events.fireEvent("click", [r, i, n])) }, { capture: !1, passive: !0 }) }), this.ctx.eventList.forEach(function (s) { t.globals.dom.baseEl.addEventListener(s, e.documentEvent, { passive: !0 }) }), this.ctx.core.setupBrushHandler() } }, { key: "documentEvent", value: function (e) { var t = this.w, i = e.target.className; if (e.type === "click") { var a = t.globals.dom.baseEl.querySelector(".apexcharts-menu"); a && a.classList.contains("apexcharts-menu-open") && i !== "apexcharts-menu-icon" && a.classList.remove("apexcharts-menu-open") } t.globals.clientX = e.type === "touchmove" ? e.touches[0].clientX : e.clientX, t.globals.clientY = e.type === "touchmove" ? e.touches[0].clientY : e.clientY } }]), p }(), Di = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w } return R(p, [{ key: "setCurrentLocaleValues", value: function (e) { var t = this.w.config.chart.locales; window.Apex.chart && window.Apex.chart.locales && window.Apex.chart.locales.length > 0 && (t = this.w.config.chart.locales.concat(window.Apex.chart.locales)); var i = t.filter(function (s) { return s.name === e })[0]; if (!i) throw new Error("Wrong locale name provided. Please make sure you set the correct locale name in options"); var a = P.extend(Xt, i); this.w.globals.locale = a.options } }]), p }(), Hi = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w } return R(p, [{ key: "drawAxis", value: function (e, t) { var i, a, s = this, r = this.w.globals, n = this.w.config, o = new Me(this.ctx, t), h = new lt(this.ctx, t); r.axisCharts && e !== "radar" && (r.isBarHorizontal ? (a = h.drawYaxisInversed(0), i = o.drawXaxisInversed(0), r.dom.elGraphical.add(i), r.dom.elGraphical.add(a)) : (i = o.drawXaxis(), r.dom.elGraphical.add(i), n.yaxis.map(function (c, d) { if (r.ignoreYAxisIndexes.indexOf(d) === -1 && (a = h.drawYaxis(d), r.dom.Paper.add(a), s.w.config.grid.position === "back")) { var g = r.dom.Paper.children()[1]; g.remove(), r.dom.Paper.add(g) } }))) } }]), p }(), nt = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w } return R(p, [{ key: "drawXCrosshairs", value: function () { var e = this.w, t = new X(this.ctx), i = new ie(this.ctx), a = e.config.xaxis.crosshairs.fill.gradient, s = e.config.xaxis.crosshairs.dropShadow, r = e.config.xaxis.crosshairs.fill.type, n = a.colorFrom, o = a.colorTo, h = a.opacityFrom, c = a.opacityTo, d = a.stops, g = s.enabled, f = s.left, x = s.top, b = s.blur, v = s.color, y = s.opacity, w = e.config.xaxis.crosshairs.fill.color; if (e.config.xaxis.crosshairs.show) { r === "gradient" && (w = t.drawGradient("vertical", n, o, h, c, null, d, null)); var l = t.drawRect(); e.config.xaxis.crosshairs.width === 1 && (l = t.drawLine()); var u = e.globals.gridHeight; (!P.isNumber(u) || u < 0) && (u = 0); var m = e.config.xaxis.crosshairs.width; (!P.isNumber(m) || m < 0) && (m = 0), l.attr({ class: "apexcharts-xcrosshairs", x: 0, y: 0, y2: u, width: m, height: u, fill: w, filter: "none", "fill-opacity": e.config.xaxis.crosshairs.opacity, stroke: e.config.xaxis.crosshairs.stroke.color, "stroke-width": e.config.xaxis.crosshairs.stroke.width, "stroke-dasharray": e.config.xaxis.crosshairs.stroke.dashArray }), g && (l = i.dropShadow(l, { left: f, top: x, blur: b, color: v, opacity: y })), e.globals.dom.elGraphical.add(l) } } }, { key: "drawYCrosshairs", value: function () { var e = this.w, t = new X(this.ctx), i = e.config.yaxis[0].crosshairs, a = e.globals.barPadForNumericAxis; if (e.config.yaxis[0].crosshairs.show) { var s = t.drawLine(-a, 0, e.globals.gridWidth + a, 0, i.stroke.color, i.stroke.dashArray, i.stroke.width); s.attr({ class: "apexcharts-ycrosshairs" }), e.globals.dom.elGraphical.add(s) } var r = t.drawLine(-a, 0, e.globals.gridWidth + a, 0, i.stroke.color, 0, 0); r.attr({ class: "apexcharts-ycrosshairs-hidden" }), e.globals.dom.elGraphical.add(r) } }]), p }(), Ni = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w } return R(p, [{ key: "checkResponsiveConfig", value: function (e) { var t = this, i = this.w, a = i.config; if (a.responsive.length !== 0) { var s = a.responsive.slice(); s.sort(function (h, c) { return h.breakpoint > c.breakpoint ? 1 : c.breakpoint > h.breakpoint ? -1 : 0 }).reverse(); var r = new Pe({}), n = function () { var h = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, c = s[0].breakpoint, d = window.innerWidth > 0 ? window.innerWidth : screen.width; if (d > c) { var g = P.clone(i.globals.initialConfig); g.series = P.clone(i.config.series); var f = $.extendArrayProps(r, g, i); h = P.extend(f, h), h = P.extend(i.config, h), t.overrideResponsiveOptions(h) } else for (var x = 0; x < s.length; x++)d < s[x].breakpoint && (h = $.extendArrayProps(r, s[x].options, i), h = P.extend(i.config, h), t.overrideResponsiveOptions(h)) }; if (e) { var o = $.extendArrayProps(r, e, i); o = P.extend(i.config, o), n(o = P.extend(o, e)) } else n({}) } } }, { key: "overrideResponsiveOptions", value: function (e) { var t = new Pe(e).init({ responsiveOverride: !0 }); this.w.config = t } }]), p }(), Wi = function () { function p(e) { F(this, p), this.ctx = e, this.colors = [], this.w = e.w; var t = this.w; this.isColorFn = !1, this.isHeatmapDistributed = t.config.chart.type === "treemap" && t.config.plotOptions.treemap.distributed || t.config.chart.type === "heatmap" && t.config.plotOptions.heatmap.distributed, this.isBarDistributed = t.config.plotOptions.bar.distributed && (t.config.chart.type === "bar" || t.config.chart.type === "rangeBar") } return R(p, [{ key: "init", value: function () { this.setDefaultColors() } }, { key: "setDefaultColors", value: function () { var e, t = this, i = this.w, a = new P; if (i.globals.dom.elWrap.classList.add("apexcharts-theme-".concat(i.config.theme.mode)), i.config.colors === void 0 || ((e = i.config.colors) === null || e === void 0 ? void 0 : e.length) === 0 ? i.globals.colors = this.predefined() : (i.globals.colors = i.config.colors, Array.isArray(i.config.colors) && i.config.colors.length > 0 && typeof i.config.colors[0] == "function" && (i.globals.colors = i.config.series.map(function (x, b) { var v = i.config.colors[b]; return v || (v = i.config.colors[0]), typeof v == "function" ? (t.isColorFn = !0, v({ value: i.globals.axisCharts ? i.globals.series[b][0] ? i.globals.series[b][0] : 0 : i.globals.series[b], seriesIndex: b, dataPointIndex: b, w: i })) : v }))), i.globals.seriesColors.map(function (x, b) { x && (i.globals.colors[b] = x) }), i.config.theme.monochrome.enabled) { var s = [], r = i.globals.series.length; (this.isBarDistributed || this.isHeatmapDistributed) && (r = i.globals.series[0].length * i.globals.series.length); for (var n = i.config.theme.monochrome.color, o = 1 / (r / i.config.theme.monochrome.shadeIntensity), h = i.config.theme.monochrome.shadeTo, c = 0, d = 0; d < r; d++) { var g = void 0; h === "dark" ? (g = a.shadeColor(-1 * c, n), c += o) : (g = a.shadeColor(c, n), c += o), s.push(g) } i.globals.colors = s.slice() } var f = i.globals.colors.slice(); this.pushExtraColors(i.globals.colors), ["fill", "stroke"].forEach(function (x) { i.config[x].colors === void 0 ? i.globals[x].colors = t.isColorFn ? i.config.colors : f : i.globals[x].colors = i.config[x].colors.slice(), t.pushExtraColors(i.globals[x].colors) }), i.config.dataLabels.style.colors === void 0 ? i.globals.dataLabels.style.colors = f : i.globals.dataLabels.style.colors = i.config.dataLabels.style.colors.slice(), this.pushExtraColors(i.globals.dataLabels.style.colors, 50), i.config.plotOptions.radar.polygons.fill.colors === void 0 ? i.globals.radarPolygons.fill.colors = [i.config.theme.mode === "dark" ? "#424242" : "none"] : i.globals.radarPolygons.fill.colors = i.config.plotOptions.radar.polygons.fill.colors.slice(), this.pushExtraColors(i.globals.radarPolygons.fill.colors, 20), i.config.markers.colors === void 0 ? i.globals.markers.colors = f : i.globals.markers.colors = i.config.markers.colors.slice(), this.pushExtraColors(i.globals.markers.colors) } }, { key: "pushExtraColors", value: function (e, t) { var i = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : null, a = this.w, s = t || a.globals.series.length; if (i === null && (i = this.isBarDistributed || this.isHeatmapDistributed || a.config.chart.type === "heatmap" && a.config.plotOptions.heatmap.colorScale.inverse), i && a.globals.series.length && (s = a.globals.series[a.globals.maxValsInArrayIndex].length * a.globals.series.length), e.length < s) for (var r = s - e.length, n = 0; n < r; n++)e.push(e[n]) } }, { key: "updateThemeOptions", value: function (e) { e.chart = e.chart || {}, e.tooltip = e.tooltip || {}; var t = e.theme.mode, i = t === "dark" ? "palette4" : t === "light" ? "palette1" : e.theme.palette || "palette1", a = t === "dark" ? "#f6f7f8" : t === "light" ? "#373d3f" : e.chart.foreColor || "#373d3f"; return e.tooltip.theme = t || "light", e.chart.foreColor = a, e.theme.palette = i, e } }, { key: "predefined", value: function () { switch (this.w.config.theme.palette) { case "palette1": default: this.colors = ["#008FFB", "#00E396", "#FEB019", "#FF4560", "#775DD0"]; break; case "palette2": this.colors = ["#3f51b5", "#03a9f4", "#4caf50", "#f9ce1d", "#FF9800"]; break; case "palette3": this.colors = ["#33b2df", "#546E7A", "#d4526e", "#13d8aa", "#A5978B"]; break; case "palette4": this.colors = ["#4ecdc4", "#c7f464", "#81D4FA", "#fd6a6a", "#546E7A"]; break; case "palette5": this.colors = ["#2b908f", "#f9a3a4", "#90ee7e", "#fa4443", "#69d2e7"]; break; case "palette6": this.colors = ["#449DD1", "#F86624", "#EA3546", "#662E9B", "#C5D86D"]; break; case "palette7": this.colors = ["#D7263D", "#1B998B", "#2E294E", "#F46036", "#E2C044"]; break; case "palette8": this.colors = ["#662E9B", "#F86624", "#F9C80E", "#EA3546", "#43BCCD"]; break; case "palette9": this.colors = ["#5C4742", "#A5978B", "#8D5B4C", "#5A2A27", "#C4BBAF"]; break; case "palette10": this.colors = ["#A300D6", "#7D02EB", "#5653FE", "#2983FF", "#00B1F2"] }return this.colors } }]), p }(), Bi = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w } return R(p, [{ key: "draw", value: function () { this.drawTitleSubtitle("title"), this.drawTitleSubtitle("subtitle") } }, { key: "drawTitleSubtitle", value: function (e) { var t = this.w, i = e === "title" ? t.config.title : t.config.subtitle, a = t.globals.svgWidth / 2, s = i.offsetY, r = "middle"; if (i.align === "left" ? (a = 10, r = "start") : i.align === "right" && (a = t.globals.svgWidth - 10, r = "end"), a += i.offsetX, s = s + parseInt(i.style.fontSize, 10) + i.margin / 2, i.text !== void 0) { var n = new X(this.ctx).drawText({ x: a, y: s, text: i.text, textAnchor: r, fontSize: i.style.fontSize, fontFamily: i.style.fontFamily, fontWeight: i.style.fontWeight, foreColor: i.style.color, opacity: 1 }); n.node.setAttribute("class", "apexcharts-".concat(e, "-text")), t.globals.dom.Paper.add(n) } } }]), p }(), Gi = function () { function p(e) { F(this, p), this.w = e.w, this.dCtx = e } return R(p, [{ key: "getTitleSubtitleCoords", value: function (e) { var t = this.w, i = 0, a = 0, s = e === "title" ? t.config.title.floating : t.config.subtitle.floating, r = t.globals.dom.baseEl.querySelector(".apexcharts-".concat(e, "-text")); if (r !== null && !s) { var n = r.getBoundingClientRect(); i = n.width, a = t.globals.axisCharts ? n.height + 5 : n.height } return { width: i, height: a } } }, { key: "getLegendsRect", value: function () { var e = this.w, t = e.globals.dom.elLegendWrap; e.config.legend.height || e.config.legend.position !== "top" && e.config.legend.position !== "bottom" || (t.style.maxHeight = e.globals.svgHeight / 2 + "px"); var i = Object.assign({}, P.getBoundingClientRect(t)); return t !== null && !e.config.legend.floating && e.config.legend.show ? this.dCtx.lgRect = { x: i.x, y: i.y, height: i.height, width: i.height === 0 ? 0 : i.width } : this.dCtx.lgRect = { x: 0, y: 0, height: 0, width: 0 }, e.config.legend.position !== "left" && e.config.legend.position !== "right" || 1.5 * this.dCtx.lgRect.width > e.globals.svgWidth && (this.dCtx.lgRect.width = e.globals.svgWidth / 1.5), this.dCtx.lgRect } }, { key: "getDatalabelsRect", value: function () { var e = this, t = this.w, i = []; t.config.series.forEach(function (o, h) { o.data.forEach(function (c, d) { var g; g = t.globals.series[h][d], a = t.config.dataLabels.formatter(g, { ctx: e.dCtx.ctx, seriesIndex: h, dataPointIndex: d, w: t }), i.push(a) }) }); var a = P.getLargestStringFromArr(i), s = new X(this.dCtx.ctx), r = t.config.dataLabels.style, n = s.getTextRects(a, parseInt(r.fontSize), r.fontFamily); return { width: 1.05 * n.width, height: n.height } } }, { key: "getLargestStringFromMultiArr", value: function (e, t) { var i = e; if (this.w.globals.isMultiLineX) { var a = t.map(function (r, n) { return Array.isArray(r) ? r.length : 1 }), s = Math.max.apply(Math, te(a)); i = t[a.indexOf(s)] } return i } }]), p }(), Vi = function () { function p(e) { F(this, p), this.w = e.w, this.dCtx = e } return R(p, [{ key: "getxAxisLabelsCoords", value: function () { var e, t = this.w, i = t.globals.labels.slice(); if (t.config.xaxis.convertedCatToNumeric && i.length === 0 && (i = t.globals.categoryLabels), t.globals.timescaleLabels.length > 0) { var a = this.getxAxisTimeScaleLabelsCoords(); e = { width: a.width, height: a.height }, t.globals.rotateXLabels = !1 } else { this.dCtx.lgWidthForSideLegends = t.config.legend.position !== "left" && t.config.legend.position !== "right" || t.config.legend.floating ? 0 : this.dCtx.lgRect.width; var s = t.globals.xLabelFormatter, r = P.getLargestStringFromArr(i), n = this.dCtx.dimHelpers.getLargestStringFromMultiArr(r, i); t.globals.isBarHorizontal && (n = r = t.globals.yAxisScale[0].result.reduce(function (x, b) { return x.length > b.length ? x : b }, 0)); var o = new ze(this.dCtx.ctx), h = r; r = o.xLabelFormat(s, r, h, { i: void 0, dateFormatter: new K(this.dCtx.ctx).formatDate, w: t }), n = o.xLabelFormat(s, n, h, { i: void 0, dateFormatter: new K(this.dCtx.ctx).formatDate, w: t }), (t.config.xaxis.convertedCatToNumeric && r === void 0 || String(r).trim() === "") && (n = r = "1"); var c = new X(this.dCtx.ctx), d = c.getTextRects(r, t.config.xaxis.labels.style.fontSize), g = d; if (r !== n && (g = c.getTextRects(n, t.config.xaxis.labels.style.fontSize)), (e = { width: d.width >= g.width ? d.width : g.width, height: d.height >= g.height ? d.height : g.height }).width * i.length > t.globals.svgWidth - this.dCtx.lgWidthForSideLegends - this.dCtx.yAxisWidth - this.dCtx.gridPad.left - this.dCtx.gridPad.right && t.config.xaxis.labels.rotate !== 0 || t.config.xaxis.labels.rotateAlways) { if (!t.globals.isBarHorizontal) { t.globals.rotateXLabels = !0; var f = function (x) { return c.getTextRects(x, t.config.xaxis.labels.style.fontSize, t.config.xaxis.labels.style.fontFamily, "rotate(".concat(t.config.xaxis.labels.rotate, " 0 0)"), !1) }; d = f(r), r !== n && (g = f(n)), e.height = (d.height > g.height ? d.height : g.height) / 1.5, e.width = d.width > g.width ? d.width : g.width } } else t.globals.rotateXLabels = !1 } return t.config.xaxis.labels.show || (e = { width: 0, height: 0 }), { width: e.width, height: e.height } } }, { key: "getxAxisGroupLabelsCoords", value: function () { var e, t = this.w; if (!t.globals.hasXaxisGroups) return { width: 0, height: 0 }; var i, a = ((e = t.config.xaxis.group.style) === null || e === void 0 ? void 0 : e.fontSize) || t.config.xaxis.labels.style.fontSize, s = t.globals.groups.map(function (d) { return d.title }), r = P.getLargestStringFromArr(s), n = this.dCtx.dimHelpers.getLargestStringFromMultiArr(r, s), o = new X(this.dCtx.ctx), h = o.getTextRects(r, a), c = h; return r !== n && (c = o.getTextRects(n, a)), i = { width: h.width >= c.width ? h.width : c.width, height: h.height >= c.height ? h.height : c.height }, t.config.xaxis.labels.show || (i = { width: 0, height: 0 }), { width: i.width, height: i.height } } }, { key: "getxAxisTitleCoords", value: function () { var e = this.w, t = 0, i = 0; if (e.config.xaxis.title.text !== void 0) { var a = new X(this.dCtx.ctx).getTextRects(e.config.xaxis.title.text, e.config.xaxis.title.style.fontSize); t = a.width, i = a.height } return { width: t, height: i } } }, { key: "getxAxisTimeScaleLabelsCoords", value: function () { var e, t = this.w; this.dCtx.timescaleLabels = t.globals.timescaleLabels.slice(); var i = this.dCtx.timescaleLabels.map(function (s) { return s.value }), a = i.reduce(function (s, r) { return s === void 0 ? (console.error("You have possibly supplied invalid Date format. Please supply a valid JavaScript Date"), 0) : s.length > r.length ? s : r }, 0); return 1.05 * (e = new X(this.dCtx.ctx).getTextRects(a, t.config.xaxis.labels.style.fontSize)).width * i.length > t.globals.gridWidth && t.config.xaxis.labels.rotate !== 0 && (t.globals.overlappingXLabels = !0), e } }, { key: "additionalPaddingXLabels", value: function (e) { var t = this, i = this.w, a = i.globals, s = i.config, r = s.xaxis.type, n = e.width; a.skipLastTimelinelabel = !1, a.skipFirstTimelinelabel = !1; var o = i.config.yaxis[0].opposite && i.globals.isBarHorizontal, h = function (c, d) { s.yaxis.length > 1 && function (g) { return a.collapsedSeriesIndices.indexOf(g) !== -1 }(d) || function (g) { if (t.dCtx.timescaleLabels && t.dCtx.timescaleLabels.length) { var f = t.dCtx.timescaleLabels[0], x = t.dCtx.timescaleLabels[t.dCtx.timescaleLabels.length - 1].position + n / 1.75 - t.dCtx.yAxisWidthRight, b = f.position - n / 1.75 + t.dCtx.yAxisWidthLeft, v = i.config.legend.position === "right" && t.dCtx.lgRect.width > 0 ? t.dCtx.lgRect.width : 0; x > a.svgWidth - a.translateX - v && (a.skipLastTimelinelabel = !0), b < -(g.show && !g.floating || s.chart.type !== "bar" && s.chart.type !== "candlestick" && s.chart.type !== "rangeBar" && s.chart.type !== "boxPlot" ? 10 : n / 1.75) && (a.skipFirstTimelinelabel = !0) } else r === "datetime" ? t.dCtx.gridPad.right < n && !a.rotateXLabels && (a.skipLastTimelinelabel = !0) : r !== "datetime" && t.dCtx.gridPad.right < n / 2 - t.dCtx.yAxisWidthRight && !a.rotateXLabels && !i.config.xaxis.labels.trim && (t.dCtx.xPadRight = n / 2 + 1) }(c) }; s.yaxis.forEach(function (c, d) { o ? (t.dCtx.gridPad.left < n && (t.dCtx.xPadLeft = n / 2 + 1), t.dCtx.xPadRight = n / 2 + 1) : h(c, d) }) } }]), p }(), _i = function () { function p(e) { F(this, p), this.w = e.w, this.dCtx = e } return R(p, [{ key: "getyAxisLabelsCoords", value: function () { var e = this, t = this.w, i = [], a = 10, s = new ge(this.dCtx.ctx); return t.config.yaxis.map(function (r, n) { var o = { seriesIndex: n, dataPointIndex: -1, w: t }, h = t.globals.yAxisScale[n], c = 0; if (!s.isYAxisHidden(n) && r.labels.show && r.labels.minWidth !== void 0 && (c = r.labels.minWidth), !s.isYAxisHidden(n) && r.labels.show && h.result.length) { var d = t.globals.yLabelFormatters[n], g = h.niceMin === Number.MIN_VALUE ? 0 : h.niceMin, f = h.result.reduce(function (u, m) { var A, k; return ((A = String(d(u, o))) === null || A === void 0 ? void 0 : A.length) > ((k = String(d(m, o))) === null || k === void 0 ? void 0 : k.length) ? u : m }, g), x = f = d(f, o); if (f !== void 0 && f.length !== 0 || (f = h.niceMax), t.globals.isBarHorizontal) { a = 0; var b = t.globals.labels.slice(); f = P.getLargestStringFromArr(b), f = d(f, { seriesIndex: n, dataPointIndex: -1, w: t }), x = e.dCtx.dimHelpers.getLargestStringFromMultiArr(f, b) } var v = new X(e.dCtx.ctx), y = "rotate(".concat(r.labels.rotate, " 0 0)"), w = v.getTextRects(f, r.labels.style.fontSize, r.labels.style.fontFamily, y, !1), l = w; f !== x && (l = v.getTextRects(x, r.labels.style.fontSize, r.labels.style.fontFamily, y, !1)), i.push({ width: (c > l.width || c > w.width ? c : l.width > w.width ? l.width : w.width) + a, height: l.height > w.height ? l.height : w.height }) } else i.push({ width: 0, height: 0 }) }), i } }, { key: "getyAxisTitleCoords", value: function () { var e = this, t = this.w, i = []; return t.config.yaxis.map(function (a, s) { if (a.show && a.title.text !== void 0) { var r = new X(e.dCtx.ctx), n = "rotate(".concat(a.title.rotate, " 0 0)"), o = r.getTextRects(a.title.text, a.title.style.fontSize, a.title.style.fontFamily, n, !1); i.push({ width: o.width, height: o.height }) } else i.push({ width: 0, height: 0 }) }), i } }, { key: "getTotalYAxisWidth", value: function () { var e = this.w, t = 0, i = 0, a = 0, s = e.globals.yAxisScale.length > 1 ? 10 : 0, r = new ge(this.dCtx.ctx), n = function (o, h) { var c = e.config.yaxis[h].floating, d = 0; o.width > 0 && !c ? (d = o.width + s, function (g) { return e.globals.ignoreYAxisIndexes.indexOf(g) > -1 }(h) && (d = d - o.width - s)) : d = c || r.isYAxisHidden(h) ? 0 : 5, e.config.yaxis[h].opposite ? a += d : i += d, t += d }; return e.globals.yLabelsCoords.map(function (o, h) { n(o, h) }), e.globals.yTitleCoords.map(function (o, h) { n(o, h) }), e.globals.isBarHorizontal && !e.config.yaxis[0].floating && (t = e.globals.yLabelsCoords[0].width + e.globals.yTitleCoords[0].width + 15), this.dCtx.yAxisWidthLeft = i, this.dCtx.yAxisWidthRight = a, t } }]), p }(), ji = function () { function p(e) { F(this, p), this.w = e.w, this.dCtx = e } return R(p, [{ key: "gridPadForColumnsInNumericAxis", value: function (e) { var t = this.w, i = t.config, a = t.globals; if (a.noData || a.collapsedSeries.length + a.ancillaryCollapsedSeries.length === i.series.length) return 0; var s = function (f) { return f === "bar" || f === "rangeBar" || f === "candlestick" || f === "boxPlot" }, r = i.chart.type, n = 0, o = s(r) ? i.series.length : 1; a.comboBarCount > 0 && (o = a.comboBarCount), a.collapsedSeries.forEach(function (f) { s(f.type) && (o -= 1) }), i.chart.stacked && (o = 1); var h = s(r) || a.comboBarCount > 0, c = Math.abs(a.initialMaxX - a.initialMinX); if (h && a.isXNumeric && !a.isBarHorizontal && o > 0 && c !== 0) { var d, g; c <= 3 && (c = a.dataPoints), d = c / e, a.minXDiff && a.minXDiff / d > 0 && (g = a.minXDiff / d), g > e / 2 && (g /= 2), (n = g * parseInt(i.plotOptions.bar.columnWidth, 10) / 100) < 1 && (n = 1), a.barPadForNumericAxis = n } return n } }, { key: "gridPadFortitleSubtitle", value: function () { var e = this, t = this.w, i = t.globals, a = this.dCtx.isSparkline || !t.globals.axisCharts ? 0 : 10;["title", "subtitle"].forEach(function (n) { t.config[n].text !== void 0 ? a += t.config[n].margin : a += e.dCtx.isSparkline || !t.globals.axisCharts ? 0 : 5 }), !t.config.legend.show || t.config.legend.position !== "bottom" || t.config.legend.floating || t.globals.axisCharts || (a += 10); var s = this.dCtx.dimHelpers.getTitleSubtitleCoords("title"), r = this.dCtx.dimHelpers.getTitleSubtitleCoords("subtitle"); i.gridHeight = i.gridHeight - s.height - r.height - a, i.translateY = i.translateY + s.height + r.height + a } }, { key: "setGridXPosForDualYAxis", value: function (e, t) { var i = this.w, a = new ge(this.dCtx.ctx); i.config.yaxis.map(function (s, r) { i.globals.ignoreYAxisIndexes.indexOf(r) !== -1 || s.floating || a.isYAxisHidden(r) || (s.opposite && (i.globals.translateX = i.globals.translateX - (t[r].width + e[r].width) - parseInt(i.config.yaxis[r].labels.style.fontSize, 10) / 1.2 - 12), i.globals.translateX < 2 && (i.globals.translateX = 2)) }) } }]), p }(), Ne = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w, this.lgRect = {}, this.yAxisWidth = 0, this.yAxisWidthLeft = 0, this.yAxisWidthRight = 0, this.xAxisHeight = 0, this.isSparkline = this.w.config.chart.sparkline.enabled, this.dimHelpers = new Gi(this), this.dimYAxis = new _i(this), this.dimXAxis = new Vi(this), this.dimGrid = new ji(this), this.lgWidthForSideLegends = 0, this.gridPad = this.w.config.grid.padding, this.xPadRight = 0, this.xPadLeft = 0 } return R(p, [{ key: "plotCoords", value: function () { var e = this, t = this.w, i = t.globals; this.lgRect = this.dimHelpers.getLegendsRect(), this.datalabelsCoords = { width: 0, height: 0 }; var a = Array.isArray(t.config.stroke.width) ? Math.max.apply(Math, te(t.config.stroke.width)) : t.config.stroke.width; this.isSparkline && ((t.config.markers.discrete.length > 0 || t.config.markers.size > 0) && Object.entries(this.gridPad).forEach(function (r) { var n = It(r, 2), o = n[0], h = n[1]; e.gridPad[o] = Math.max(h, e.w.globals.markers.largestSize / 1.5) }), this.gridPad.top = Math.max(a / 2, this.gridPad.top), this.gridPad.bottom = Math.max(a / 2, this.gridPad.bottom)), i.axisCharts ? this.setDimensionsForAxisCharts() : this.setDimensionsForNonAxisCharts(), this.dimGrid.gridPadFortitleSubtitle(), i.gridHeight = i.gridHeight - this.gridPad.top - this.gridPad.bottom, i.gridWidth = i.gridWidth - this.gridPad.left - this.gridPad.right - this.xPadRight - this.xPadLeft; var s = this.dimGrid.gridPadForColumnsInNumericAxis(i.gridWidth); i.gridWidth = i.gridWidth - 2 * s, i.translateX = i.translateX + this.gridPad.left + this.xPadLeft + (s > 0 ? s : 0), i.translateY = i.translateY + this.gridPad.top } }, { key: "setDimensionsForAxisCharts", value: function () { var e = this, t = this.w, i = t.globals, a = this.dimYAxis.getyAxisLabelsCoords(), s = this.dimYAxis.getyAxisTitleCoords(); i.isSlopeChart && (this.datalabelsCoords = this.dimHelpers.getDatalabelsRect()), t.globals.yLabelsCoords = [], t.globals.yTitleCoords = [], t.config.yaxis.map(function (f, x) { t.globals.yLabelsCoords.push({ width: a[x].width, index: x }), t.globals.yTitleCoords.push({ width: s[x].width, index: x }) }), this.yAxisWidth = this.dimYAxis.getTotalYAxisWidth(); var r = this.dimXAxis.getxAxisLabelsCoords(), n = this.dimXAxis.getxAxisGroupLabelsCoords(), o = this.dimXAxis.getxAxisTitleCoords(); this.conditionalChecksForAxisCoords(r, o, n), i.translateXAxisY = t.globals.rotateXLabels ? this.xAxisHeight / 8 : -4, i.translateXAxisX = t.globals.rotateXLabels && t.globals.isXNumeric && t.config.xaxis.labels.rotate <= -45 ? -this.xAxisWidth / 4 : 0, t.globals.isBarHorizontal && (i.rotateXLabels = !1, i.translateXAxisY = parseInt(t.config.xaxis.labels.style.fontSize, 10) / 1.5 * -1), i.translateXAxisY = i.translateXAxisY + t.config.xaxis.labels.offsetY, i.translateXAxisX = i.translateXAxisX + t.config.xaxis.labels.offsetX; var h = this.yAxisWidth, c = this.xAxisHeight; i.xAxisLabelsHeight = this.xAxisHeight - o.height, i.xAxisGroupLabelsHeight = i.xAxisLabelsHeight - r.height, i.xAxisLabelsWidth = this.xAxisWidth, i.xAxisHeight = this.xAxisHeight; var d = 10; (t.config.chart.type === "radar" || this.isSparkline) && (h = 0, c = i.goldenPadding), this.isSparkline && (this.lgRect = { height: 0, width: 0 }), (this.isSparkline || t.config.chart.type === "treemap") && (h = 0, c = 0, d = 0), this.isSparkline || t.config.chart.type === "treemap" || this.dimXAxis.additionalPaddingXLabels(r); var g = function () { i.translateX = h + e.datalabelsCoords.width, i.gridHeight = i.svgHeight - e.lgRect.height - c - (e.isSparkline || t.config.chart.type === "treemap" ? 0 : t.globals.rotateXLabels ? 10 : 15), i.gridWidth = i.svgWidth - h - 2 * e.datalabelsCoords.width }; switch (t.config.xaxis.position === "top" && (d = i.xAxisHeight - t.config.xaxis.axisTicks.height - 5), t.config.legend.position) { case "bottom": i.translateY = d, g(); break; case "top": i.translateY = this.lgRect.height + d, g(); break; case "left": i.translateY = d, i.translateX = this.lgRect.width + h + this.datalabelsCoords.width, i.gridHeight = i.svgHeight - c - 12, i.gridWidth = i.svgWidth - this.lgRect.width - h - 2 * this.datalabelsCoords.width; break; case "right": i.translateY = d, i.translateX = h + this.datalabelsCoords.width, i.gridHeight = i.svgHeight - c - 12, i.gridWidth = i.svgWidth - this.lgRect.width - h - 2 * this.datalabelsCoords.width - 5; break; default: throw new Error("Legend position not supported") }this.dimGrid.setGridXPosForDualYAxis(s, a), new lt(this.ctx).setYAxisXPosition(a, s) } }, { key: "setDimensionsForNonAxisCharts", value: function () { var e = this.w, t = e.globals, i = e.config, a = 0; e.config.legend.show && !e.config.legend.floating && (a = 20); var s = i.chart.type === "pie" || i.chart.type === "polarArea" || i.chart.type === "donut" ? "pie" : "radialBar", r = i.plotOptions[s].offsetY, n = i.plotOptions[s].offsetX; if (!i.legend.show || i.legend.floating) { t.gridHeight = t.svgHeight - i.grid.padding.top - i.grid.padding.bottom; var o = t.dom.elWrap.getBoundingClientRect().width; return t.gridWidth = Math.min(o, t.gridHeight) - i.grid.padding.left - i.grid.padding.right, t.translateY = r, void (t.translateX = n + (t.svgWidth - t.gridWidth) / 2) } switch (i.legend.position) { case "bottom": t.gridHeight = t.svgHeight - this.lgRect.height - t.goldenPadding, t.gridWidth = t.svgWidth, t.translateY = r - 10, t.translateX = n + (t.svgWidth - t.gridWidth) / 2; break; case "top": t.gridHeight = t.svgHeight - this.lgRect.height - t.goldenPadding, t.gridWidth = t.svgWidth, t.translateY = this.lgRect.height + r + 10, t.translateX = n + (t.svgWidth - t.gridWidth) / 2; break; case "left": t.gridWidth = t.svgWidth - this.lgRect.width - a, t.gridHeight = i.chart.height !== "auto" ? t.svgHeight : t.gridWidth, t.translateY = r, t.translateX = n + this.lgRect.width + a; break; case "right": t.gridWidth = t.svgWidth - this.lgRect.width - a - 5, t.gridHeight = i.chart.height !== "auto" ? t.svgHeight : t.gridWidth, t.translateY = r, t.translateX = n + 10; break; default: throw new Error("Legend position not supported") } } }, { key: "conditionalChecksForAxisCoords", value: function (e, t, i) { var a = this.w, s = a.globals.hasXaxisGroups ? 2 : 1, r = i.height + e.height + t.height, n = a.globals.isMultiLineX ? 1.2 : a.globals.LINE_HEIGHT_RATIO, o = a.globals.rotateXLabels ? 22 : 10, h = a.globals.rotateXLabels && a.config.legend.position === "bottom" ? 10 : 0; this.xAxisHeight = r * n + s * o + h, this.xAxisWidth = e.width, this.xAxisHeight - t.height > a.config.xaxis.labels.maxHeight && (this.xAxisHeight = a.config.xaxis.labels.maxHeight), a.config.xaxis.labels.minHeight && this.xAxisHeight < a.config.xaxis.labels.minHeight && (this.xAxisHeight = a.config.xaxis.labels.minHeight), a.config.xaxis.floating && (this.xAxisHeight = 0); var c = 0, d = 0; a.config.yaxis.forEach(function (g) { c += g.labels.minWidth, d += g.labels.maxWidth }), this.yAxisWidth < c && (this.yAxisWidth = c), this.yAxisWidth > d && (this.yAxisWidth = d) } }]), p }(), Ui = function () { - function p(e) { F(this, p), this.w = e.w, this.lgCtx = e } return R(p, [{ - key: "getLegendStyles", value: function () { - var e, t, i, a = document.createElement("style"); a.setAttribute("type", "text/css"); var s = ((e = this.lgCtx.ctx) === null || e === void 0 || (t = e.opts) === null || t === void 0 || (i = t.chart) === null || i === void 0 ? void 0 : i.nonce) || this.w.config.chart.nonce; s && a.setAttribute("nonce", s); var r = document.createTextNode(` + `).concat(s,` +
`);return'
'+(t||"")+'
'+i+": "+(p.w.globals.comboCharts?p.w.config.series[r].type==="rangeArea"||p.w.config.series[r].type==="rangeBar"?c:"".concat(h,""):c)+"
"},Le=function(){function p(e){F(this,p),this.opts=e}return R(p,[{key:"hideYAxis",value:function(){this.opts.yaxis[0].show=!1,this.opts.yaxis[0].title.text="",this.opts.yaxis[0].axisBorder.show=!1,this.opts.yaxis[0].axisTicks.show=!1,this.opts.yaxis[0].floating=!0}},{key:"line",value:function(){return{chart:{animations:{easing:"swing"}},dataLabels:{enabled:!1},stroke:{width:5,curve:"straight"},markers:{size:0,hover:{sizeOffset:6}},xaxis:{crosshairs:{width:1}}}}},{key:"sparkline",value:function(e){return this.hideYAxis(),P.extend(e,{grid:{show:!1,padding:{left:0,right:0,top:0,bottom:0}},legend:{show:!1},xaxis:{labels:{show:!1},tooltip:{enabled:!1},axisBorder:{show:!1},axisTicks:{show:!1}},chart:{toolbar:{show:!1},zoom:{enabled:!1}},dataLabels:{enabled:!1}})}},{key:"slope",value:function(){return this.hideYAxis(),{chart:{toolbar:{show:!1},zoom:{enabled:!1}},dataLabels:{enabled:!0,formatter:function(e,t){var i=t.w.config.series[t.seriesIndex].name;return e!==null?i+": "+e:""},background:{enabled:!1},offsetX:-5},grid:{xaxis:{lines:{show:!0}},yaxis:{lines:{show:!1}}},xaxis:{position:"top",labels:{style:{fontSize:14,fontWeight:900}},tooltip:{enabled:!1},crosshairs:{show:!1}},markers:{size:8,hover:{sizeOffset:1}},legend:{show:!1},tooltip:{shared:!1,intersect:!0,followCursor:!0},stroke:{width:5,curve:"straight"}}}},{key:"bar",value:function(){return{chart:{stacked:!1,animations:{easing:"swing"}},plotOptions:{bar:{dataLabels:{position:"center"}}},dataLabels:{style:{colors:["#fff"]},background:{enabled:!1}},stroke:{width:0,lineCap:"round"},fill:{opacity:.85},legend:{markers:{shape:"square"}},tooltip:{shared:!1,intersect:!0},xaxis:{tooltip:{enabled:!1},tickPlacement:"between",crosshairs:{width:"barWidth",position:"back",fill:{type:"gradient"},dropShadow:{enabled:!1},stroke:{width:0}}}}}},{key:"funnel",value:function(){return this.hideYAxis(),Y(Y({},this.bar()),{},{chart:{animations:{easing:"linear",speed:800,animateGradually:{enabled:!1}}},plotOptions:{bar:{horizontal:!0,borderRadiusApplication:"around",borderRadius:0,dataLabels:{position:"center"}}},grid:{show:!1,padding:{left:0,right:0}},xaxis:{labels:{show:!1},tooltip:{enabled:!1},axisBorder:{show:!1},axisTicks:{show:!1}}})}},{key:"candlestick",value:function(){var e=this;return{stroke:{width:1,colors:["#333"]},fill:{opacity:1},dataLabels:{enabled:!1},tooltip:{shared:!0,custom:function(t){var i=t.seriesIndex,a=t.dataPointIndex,s=t.w;return e._getBoxTooltip(s,i,a,["Open","High","","Low","Close"],"candlestick")}},states:{active:{filter:{type:"none"}}},xaxis:{crosshairs:{width:1}}}}},{key:"boxPlot",value:function(){var e=this;return{chart:{animations:{dynamicAnimation:{enabled:!1}}},stroke:{width:1,colors:["#24292e"]},dataLabels:{enabled:!1},tooltip:{shared:!0,custom:function(t){var i=t.seriesIndex,a=t.dataPointIndex,s=t.w;return e._getBoxTooltip(s,i,a,["Minimum","Q1","Median","Q3","Maximum"],"boxPlot")}},markers:{size:7,strokeWidth:1,strokeColors:"#111"},xaxis:{crosshairs:{width:1}}}}},{key:"rangeBar",value:function(){return{chart:{animations:{animateGradually:!1}},stroke:{width:0,lineCap:"square"},plotOptions:{bar:{borderRadius:0,dataLabels:{position:"center"}}},dataLabels:{enabled:!1,formatter:function(e,t){t.ctx;var i=t.seriesIndex,a=t.dataPointIndex,s=t.w,r=function(){var n=s.globals.seriesRangeStart[i][a];return s.globals.seriesRangeEnd[i][a]-n};return s.globals.comboCharts?s.config.series[i].type==="rangeBar"||s.config.series[i].type==="rangeArea"?r():e:r()},background:{enabled:!1},style:{colors:["#fff"]}},markers:{size:10},tooltip:{shared:!1,followCursor:!0,custom:function(e){return e.w.config.plotOptions&&e.w.config.plotOptions.bar&&e.w.config.plotOptions.bar.horizontal?function(t){var i=Je(Y(Y({},t),{},{isTimeline:!0})),a=i.color,s=i.seriesName,r=i.ylabel,n=i.startVal,o=i.endVal;return Ke(Y(Y({},t),{},{color:a,seriesName:s,ylabel:r,start:n,end:o}))}(e):function(t){var i=Je(t),a=i.color,s=i.seriesName,r=i.ylabel,n=i.start,o=i.end;return Ke(Y(Y({},t),{},{color:a,seriesName:s,ylabel:r,start:n,end:o}))}(e)}},xaxis:{tickPlacement:"between",tooltip:{enabled:!1},crosshairs:{stroke:{width:0}}}}}},{key:"dumbbell",value:function(e){var t,i;return(t=e.plotOptions.bar)!==null&&t!==void 0&&t.barHeight||(e.plotOptions.bar.barHeight=2),(i=e.plotOptions.bar)!==null&&i!==void 0&&i.columnWidth||(e.plotOptions.bar.columnWidth=2),e}},{key:"area",value:function(){return{stroke:{width:4,fill:{type:"solid",gradient:{inverseColors:!1,shade:"light",type:"vertical",opacityFrom:.65,opacityTo:.5,stops:[0,100,100]}}},fill:{type:"gradient",gradient:{inverseColors:!1,shade:"light",type:"vertical",opacityFrom:.65,opacityTo:.5,stops:[0,100,100]}},markers:{size:0,hover:{sizeOffset:6}},tooltip:{followCursor:!1}}}},{key:"rangeArea",value:function(){return{stroke:{curve:"straight",width:0},fill:{type:"solid",opacity:.6},markers:{size:0},states:{hover:{filter:{type:"none"}},active:{filter:{type:"none"}}},tooltip:{intersect:!1,shared:!0,followCursor:!0,custom:function(e){return function(t){var i=Je(t),a=i.color,s=i.seriesName,r=i.ylabel,n=i.start,o=i.end;return Ke(Y(Y({},t),{},{color:a,seriesName:s,ylabel:r,start:n,end:o}))}(e)}}}}},{key:"brush",value:function(e){return P.extend(e,{chart:{toolbar:{autoSelected:"selection",show:!1},zoom:{enabled:!1}},dataLabels:{enabled:!1},stroke:{width:1},tooltip:{enabled:!1},xaxis:{tooltip:{enabled:!1}}})}},{key:"stacked100",value:function(e){e.dataLabels=e.dataLabels||{},e.dataLabels.formatter=e.dataLabels.formatter||void 0;var t=e.dataLabels.formatter;return e.yaxis.forEach(function(i,a){e.yaxis[a].min=0,e.yaxis[a].max=100}),e.chart.type==="bar"&&(e.dataLabels.formatter=t||function(i){return typeof i=="number"&&i?i.toFixed(0)+"%":i}),e}},{key:"stackedBars",value:function(){var e=this.bar();return Y(Y({},e),{},{plotOptions:Y(Y({},e.plotOptions),{},{bar:Y(Y({},e.plotOptions.bar),{},{borderRadiusApplication:"end",borderRadiusWhenStacked:"last"})})})}},{key:"convertCatToNumeric",value:function(e){return e.xaxis.convertedCatToNumeric=!0,e}},{key:"convertCatToNumericXaxis",value:function(e,t,i){e.xaxis.type="numeric",e.xaxis.labels=e.xaxis.labels||{},e.xaxis.labels.formatter=e.xaxis.labels.formatter||function(r){return P.isNumber(r)?Math.floor(r):r};var a=e.xaxis.labels.formatter,s=e.xaxis.categories&&e.xaxis.categories.length?e.xaxis.categories:e.labels;return i&&i.length&&(s=i.map(function(r){return Array.isArray(r)?r:String(r)})),s&&s.length&&(e.xaxis.labels.formatter=function(r){return P.isNumber(r)?a(s[Math.floor(r)-1]):a(r)}),e.xaxis.categories=[],e.labels=[],e.xaxis.tickAmount=e.xaxis.tickAmount||"dataPoints",e}},{key:"bubble",value:function(){return{dataLabels:{style:{colors:["#fff"]}},tooltip:{shared:!1,intersect:!0},xaxis:{crosshairs:{width:0}},fill:{type:"solid",gradient:{shade:"light",inverse:!0,shadeIntensity:.55,opacityFrom:.4,opacityTo:.8}}}}},{key:"scatter",value:function(){return{dataLabels:{enabled:!1},tooltip:{shared:!1,intersect:!0},markers:{size:6,strokeWidth:1,hover:{sizeOffset:2}}}}},{key:"heatmap",value:function(){return{chart:{stacked:!1},fill:{opacity:1},dataLabels:{style:{colors:["#fff"]}},stroke:{colors:["#fff"]},tooltip:{followCursor:!0,marker:{show:!1},x:{show:!1}},legend:{position:"top",markers:{shape:"square"}},grid:{padding:{right:20}}}}},{key:"treemap",value:function(){return{chart:{zoom:{enabled:!1}},dataLabels:{style:{fontSize:14,fontWeight:600,colors:["#fff"]}},stroke:{show:!0,width:2,colors:["#fff"]},legend:{show:!1},fill:{opacity:1,gradient:{stops:[0,100]}},tooltip:{followCursor:!0,x:{show:!1}},grid:{padding:{left:0,right:0}},xaxis:{crosshairs:{show:!1},tooltip:{enabled:!1}}}}},{key:"pie",value:function(){return{chart:{toolbar:{show:!1}},plotOptions:{pie:{donut:{labels:{show:!1}}}},dataLabels:{formatter:function(e){return e.toFixed(1)+"%"},style:{colors:["#fff"]},background:{enabled:!1},dropShadow:{enabled:!0}},stroke:{colors:["#fff"]},fill:{opacity:1,gradient:{shade:"light",stops:[0,100]}},tooltip:{theme:"dark",fillSeriesColor:!0},legend:{position:"right"}}}},{key:"donut",value:function(){return{chart:{toolbar:{show:!1}},dataLabels:{formatter:function(e){return e.toFixed(1)+"%"},style:{colors:["#fff"]},background:{enabled:!1},dropShadow:{enabled:!0}},stroke:{colors:["#fff"]},fill:{opacity:1,gradient:{shade:"light",shadeIntensity:.35,stops:[80,100],opacityFrom:1,opacityTo:1}},tooltip:{theme:"dark",fillSeriesColor:!0},legend:{position:"right"}}}},{key:"polarArea",value:function(){return{chart:{toolbar:{show:!1}},dataLabels:{formatter:function(e){return e.toFixed(1)+"%"},enabled:!1},stroke:{show:!0,width:2},fill:{opacity:.7},tooltip:{theme:"dark",fillSeriesColor:!0},legend:{position:"right"}}}},{key:"radar",value:function(){return this.opts.yaxis[0].labels.offsetY=this.opts.yaxis[0].labels.offsetY?this.opts.yaxis[0].labels.offsetY:6,{dataLabels:{enabled:!1,style:{fontSize:"11px"}},stroke:{width:2},markers:{size:5,strokeWidth:1,strokeOpacity:1},fill:{opacity:.2},tooltip:{shared:!1,intersect:!0,followCursor:!0},grid:{show:!1},xaxis:{labels:{formatter:function(e){return e},style:{colors:["#a8a8a8"],fontSize:"11px"}},tooltip:{enabled:!1},crosshairs:{show:!1}}}}},{key:"radialBar",value:function(){return{chart:{animations:{dynamicAnimation:{enabled:!0,speed:800}},toolbar:{show:!1}},fill:{gradient:{shade:"dark",shadeIntensity:.4,inverseColors:!1,type:"diagonal2",opacityFrom:1,opacityTo:1,stops:[70,98,100]}},legend:{show:!1,position:"right"},tooltip:{enabled:!1,fillSeriesColor:!0}}}},{key:"_getBoxTooltip",value:function(e,t,i,a,s){var r=e.globals.seriesCandleO[t][i],n=e.globals.seriesCandleH[t][i],o=e.globals.seriesCandleM[t][i],h=e.globals.seriesCandleL[t][i],c=e.globals.seriesCandleC[t][i];return e.config.series[t].type&&e.config.series[t].type!==s?`
+ `.concat(e.config.series[t].name?e.config.series[t].name:"series-"+(t+1),": ").concat(e.globals.series[t][i],` +
`):'
')+"
".concat(a[0],': ')+r+"
"+"
".concat(a[1],': ')+n+"
"+(o?"
".concat(a[2],': ')+o+"
":"")+"
".concat(a[3],': ')+h+"
"+"
".concat(a[4],': ')+c+"
"}}]),p}(),Pe=function(){function p(e){F(this,p),this.opts=e}return R(p,[{key:"init",value:function(e){var t=e.responsiveOverride,i=this.opts,a=new ue,s=new Le(i);this.chartType=i.chart.type,i=this.extendYAxis(i),i=this.extendAnnotations(i);var r=a.init(),n={};if(i&&J(i)==="object"){var o,h,c,d,g,f,x,b,v,y,w={};w=["line","area","bar","candlestick","boxPlot","rangeBar","rangeArea","bubble","scatter","heatmap","treemap","pie","polarArea","donut","radar","radialBar"].indexOf(i.chart.type)!==-1?s[i.chart.type]():s.line(),(o=i.plotOptions)!==null&&o!==void 0&&(h=o.bar)!==null&&h!==void 0&&h.isFunnel&&(w=s.funnel()),i.chart.stacked&&i.chart.type==="bar"&&(w=s.stackedBars()),(c=i.chart.brush)!==null&&c!==void 0&&c.enabled&&(w=s.brush(w)),(d=i.plotOptions)!==null&&d!==void 0&&(g=d.line)!==null&&g!==void 0&&g.isSlopeChart&&(w=s.slope()),i.chart.stacked&&i.chart.stackType==="100%"&&(i=s.stacked100(i)),(f=i.plotOptions)!==null&&f!==void 0&&(x=f.bar)!==null&&x!==void 0&&x.isDumbbell&&(i=s.dumbbell(i)),this.checkForDarkTheme(window.Apex),this.checkForDarkTheme(i),i.xaxis=i.xaxis||window.Apex.xaxis||{},t||(i.xaxis.convertedCatToNumeric=!1),((b=(i=this.checkForCatToNumericXAxis(this.chartType,w,i)).chart.sparkline)!==null&&b!==void 0&&b.enabled||(v=window.Apex.chart)!==null&&v!==void 0&&(y=v.sparkline)!==null&&y!==void 0&&y.enabled)&&(w=s.sparkline(w)),n=P.extend(r,w)}var l=P.extend(n,window.Apex);return r=P.extend(l,i),r=this.handleUserInputErrors(r)}},{key:"checkForCatToNumericXAxis",value:function(e,t,i){var a,s,r=new Le(i),n=(e==="bar"||e==="boxPlot")&&((a=i.plotOptions)===null||a===void 0||(s=a.bar)===null||s===void 0?void 0:s.horizontal),o=e==="pie"||e==="polarArea"||e==="donut"||e==="radar"||e==="radialBar"||e==="heatmap",h=i.xaxis.type!=="datetime"&&i.xaxis.type!=="numeric",c=i.xaxis.tickPlacement?i.xaxis.tickPlacement:t.xaxis&&t.xaxis.tickPlacement;return n||o||!h||c==="between"||(i=r.convertCatToNumeric(i)),i}},{key:"extendYAxis",value:function(e,t){var i=new ue;(e.yaxis===void 0||!e.yaxis||Array.isArray(e.yaxis)&&e.yaxis.length===0)&&(e.yaxis={}),e.yaxis.constructor!==Array&&window.Apex.yaxis&&window.Apex.yaxis.constructor!==Array&&(e.yaxis=P.extend(e.yaxis,window.Apex.yaxis)),e.yaxis.constructor!==Array?e.yaxis=[P.extend(i.yAxis,e.yaxis)]:e.yaxis=P.extendArray(e.yaxis,i.yAxis);var a=!1;e.yaxis.forEach(function(r){r.logarithmic&&(a=!0)});var s=e.series;return t&&!s&&(s=t.config.series),a&&s.length!==e.yaxis.length&&s.length&&(e.yaxis=s.map(function(r,n){if(r.name||(s[n].name="series-".concat(n+1)),e.yaxis[n])return e.yaxis[n].seriesName=s[n].name,e.yaxis[n];var o=P.extend(i.yAxis,e.yaxis[0]);return o.show=!1,o})),a&&s.length>1&&s.length!==e.yaxis.length&&console.warn("A multi-series logarithmic chart should have equal number of series and y-axes"),e}},{key:"extendAnnotations",value:function(e){return e.annotations===void 0&&(e.annotations={},e.annotations.yaxis=[],e.annotations.xaxis=[],e.annotations.points=[]),e=this.extendYAxisAnnotations(e),e=this.extendXAxisAnnotations(e),e=this.extendPointAnnotations(e)}},{key:"extendYAxisAnnotations",value:function(e){var t=new ue;return e.annotations.yaxis=P.extendArray(e.annotations.yaxis!==void 0?e.annotations.yaxis:[],t.yAxisAnnotation),e}},{key:"extendXAxisAnnotations",value:function(e){var t=new ue;return e.annotations.xaxis=P.extendArray(e.annotations.xaxis!==void 0?e.annotations.xaxis:[],t.xAxisAnnotation),e}},{key:"extendPointAnnotations",value:function(e){var t=new ue;return e.annotations.points=P.extendArray(e.annotations.points!==void 0?e.annotations.points:[],t.pointAnnotation),e}},{key:"checkForDarkTheme",value:function(e){e.theme&&e.theme.mode==="dark"&&(e.tooltip||(e.tooltip={}),e.tooltip.theme!=="light"&&(e.tooltip.theme="dark"),e.chart.foreColor||(e.chart.foreColor="#f6f7f8"),e.theme.palette||(e.theme.palette="palette4"))}},{key:"handleUserInputErrors",value:function(e){var t=e;if(t.tooltip.shared&&t.tooltip.intersect)throw new Error("tooltip.shared cannot be enabled when tooltip.intersect is true. Turn off any other option by setting it to false.");if(t.chart.type==="bar"&&t.plotOptions.bar.horizontal){if(t.yaxis.length>1)throw new Error("Multiple Y Axis for bars are not supported. Switch to column chart by setting plotOptions.bar.horizontal=false");t.yaxis[0].reversed&&(t.yaxis[0].opposite=!0),t.xaxis.tooltip.enabled=!1,t.yaxis[0].tooltip.enabled=!1,t.chart.zoom.enabled=!1}return t.chart.type!=="bar"&&t.chart.type!=="rangeBar"||t.tooltip.shared&&t.xaxis.crosshairs.width==="barWidth"&&t.series.length>1&&(t.xaxis.crosshairs.width="tickWidth"),t.chart.type!=="candlestick"&&t.chart.type!=="boxPlot"||t.yaxis[0].reversed&&(console.warn("Reversed y-axis in ".concat(t.chart.type," chart is not supported.")),t.yaxis[0].reversed=!1),t}}]),p}(),Et=function(){function p(){F(this,p)}return R(p,[{key:"initGlobalVars",value:function(e){e.series=[],e.seriesCandleO=[],e.seriesCandleH=[],e.seriesCandleM=[],e.seriesCandleL=[],e.seriesCandleC=[],e.seriesRangeStart=[],e.seriesRangeEnd=[],e.seriesRange=[],e.seriesPercent=[],e.seriesGoals=[],e.seriesX=[],e.seriesZ=[],e.seriesNames=[],e.seriesTotals=[],e.seriesLog=[],e.seriesColors=[],e.stackedSeriesTotals=[],e.seriesXvalues=[],e.seriesYvalues=[],e.labels=[],e.hasXaxisGroups=!1,e.groups=[],e.barGroups=[],e.lineGroups=[],e.areaGroups=[],e.hasSeriesGroups=!1,e.seriesGroups=[],e.categoryLabels=[],e.timescaleLabels=[],e.noLabelsProvided=!1,e.resizeTimer=null,e.selectionResizeTimer=null,e.lastWheelExecution=0,e.delayedElements=[],e.pointsArray=[],e.dataLabelsRects=[],e.isXNumeric=!1,e.skipLastTimelinelabel=!1,e.skipFirstTimelinelabel=!1,e.isDataXYZ=!1,e.isMultiLineX=!1,e.isMultipleYAxis=!1,e.maxY=-Number.MAX_VALUE,e.minY=Number.MIN_VALUE,e.minYArr=[],e.maxYArr=[],e.maxX=-Number.MAX_VALUE,e.minX=Number.MAX_VALUE,e.initialMaxX=-Number.MAX_VALUE,e.initialMinX=Number.MAX_VALUE,e.maxDate=0,e.minDate=Number.MAX_VALUE,e.minZ=Number.MAX_VALUE,e.maxZ=-Number.MAX_VALUE,e.minXDiff=Number.MAX_VALUE,e.yAxisScale=[],e.xAxisScale=null,e.xAxisTicksPositions=[],e.yLabelsCoords=[],e.yTitleCoords=[],e.barPadForNumericAxis=0,e.padHorizontal=0,e.xRange=0,e.yRange=[],e.zRange=0,e.dataPoints=0,e.xTickAmount=0,e.multiAxisTickAmount=0}},{key:"globalVars",value:function(e){return{chartID:null,cuid:null,events:{beforeMount:[],mounted:[],updated:[],clicked:[],selection:[],dataPointSelection:[],zoomed:[],scrolled:[]},colors:[],clientX:null,clientY:null,fill:{colors:[]},stroke:{colors:[]},dataLabels:{style:{colors:[]}},radarPolygons:{fill:{colors:[]}},markers:{colors:[],size:e.markers.size,largestSize:0},animationEnded:!1,isTouchDevice:"ontouchstart"in window||navigator.msMaxTouchPoints,isDirty:!1,isExecCalled:!1,initialConfig:null,initialSeries:[],lastXAxis:[],lastYAxis:[],columnSeries:null,labels:[],timescaleLabels:[],noLabelsProvided:!1,allSeriesCollapsed:!1,collapsedSeries:[],collapsedSeriesIndices:[],ancillaryCollapsedSeries:[],ancillaryCollapsedSeriesIndices:[],risingSeries:[],dataFormatXNumeric:!1,capturedSeriesIndex:-1,capturedDataPointIndex:-1,selectedDataPoints:[],goldenPadding:35,invalidLogScale:!1,ignoreYAxisIndexes:[],maxValsInArrayIndex:0,radialSize:0,selection:void 0,zoomEnabled:e.chart.toolbar.autoSelected==="zoom"&&e.chart.toolbar.tools.zoom&&e.chart.zoom.enabled,panEnabled:e.chart.toolbar.autoSelected==="pan"&&e.chart.toolbar.tools.pan,selectionEnabled:e.chart.toolbar.autoSelected==="selection"&&e.chart.toolbar.tools.selection,yaxis:null,mousedown:!1,lastClientPosition:{},visibleXRange:void 0,yValueDecimal:0,total:0,SVGNS:"http://www.w3.org/2000/svg",svgWidth:0,svgHeight:0,noData:!1,locale:{},dom:{},memory:{methodsToExec:[]},shouldAnimate:!0,skipLastTimelinelabel:!1,skipFirstTimelinelabel:!1,delayedElements:[],axisCharts:!0,isDataXYZ:!1,isSlopeChart:e.plotOptions.line.isSlopeChart,resized:!1,resizeTimer:null,comboCharts:!1,dataChanged:!1,previousPaths:[],allSeriesHasEqualX:!0,pointsArray:[],dataLabelsRects:[],lastDrawnDataLabelsIndexes:[],hasNullValues:!1,easing:null,zoomed:!1,gridWidth:0,gridHeight:0,rotateXLabels:!1,defaultLabels:!1,xLabelFormatter:void 0,yLabelFormatters:[],xaxisTooltipFormatter:void 0,ttKeyFormatter:void 0,ttVal:void 0,ttZFormatter:void 0,LINE_HEIGHT_RATIO:1.618,xAxisLabelsHeight:0,xAxisGroupLabelsHeight:0,xAxisLabelsWidth:0,yAxisLabelsWidth:0,scaleX:1,scaleY:1,translateX:0,translateY:0,translateYAxisX:[],yAxisWidths:[],translateXAxisY:0,translateXAxisX:0,tooltip:null,niceScaleAllowedMagMsd:[[1,1,2,5,5,5,10,10,10,10,10],[1,1,2,5,5,5,10,10,10,10,10]],niceScaleDefaultTicks:[1,2,4,4,6,6,6,6,6,6,6,6,6,6,6,6,6,6,12,12,12,12,12,12,12,12,12,24],seriesYAxisMap:[],seriesYAxisReverseMap:[]}}},{key:"init",value:function(e){var t=this.globalVars(e);return this.initGlobalVars(t),t.initialConfig=P.extend({},e),t.initialSeries=P.clone(e.series),t.lastXAxis=P.clone(t.initialConfig.xaxis),t.lastYAxis=P.clone(t.initialConfig.yaxis),t}}]),p}(),Ri=function(){function p(e){F(this,p),this.opts=e}return R(p,[{key:"init",value:function(){var e=new Pe(this.opts).init({responsiveOverride:!1});return{config:e,globals:new Et().init(e)}}}]),p}(),ne=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w,this.opts=null,this.seriesIndex=0,this.patternIDs=[]}return R(p,[{key:"clippedImgArea",value:function(e){var t=this.w,i=t.config,a=parseInt(t.globals.gridWidth,10),s=parseInt(t.globals.gridHeight,10),r=a>s?a:s,n=e.image,o=0,h=0;e.width===void 0&&e.height===void 0?i.fill.image.width!==void 0&&i.fill.image.height!==void 0?(o=i.fill.image.width+1,h=i.fill.image.height):(o=r+1,h=r):(o=e.width,h=e.height);var c=document.createElementNS(t.globals.SVGNS,"pattern");X.setAttrs(c,{id:e.patternID,patternUnits:e.patternUnits?e.patternUnits:"userSpaceOnUse",width:o+"px",height:h+"px"});var d=document.createElementNS(t.globals.SVGNS,"image");c.appendChild(d),d.setAttributeNS(window.SVG.xlink,"href",n),X.setAttrs(d,{x:0,y:0,preserveAspectRatio:"none",width:o+"px",height:h+"px"}),d.style.opacity=e.opacity,t.globals.dom.elDefs.node.appendChild(c)}},{key:"getSeriesIndex",value:function(e){var t=this.w,i=t.config.chart.type;return(i==="bar"||i==="rangeBar")&&t.config.plotOptions.bar.distributed||i==="heatmap"||i==="treemap"?this.seriesIndex=e.seriesNumber:this.seriesIndex=e.seriesNumber%t.globals.series.length,this.seriesIndex}},{key:"fillPath",value:function(e){var t=this.w;this.opts=e;var i,a,s,r=this.w.config;this.seriesIndex=this.getSeriesIndex(e);var n=this.getFillColors()[this.seriesIndex];t.globals.seriesColors[this.seriesIndex]!==void 0&&(n=t.globals.seriesColors[this.seriesIndex]),typeof n=="function"&&(n=n({seriesIndex:this.seriesIndex,dataPointIndex:e.dataPointIndex,value:e.value,w:t}));var o=e.fillType?e.fillType:this.getFillType(this.seriesIndex),h=Array.isArray(r.fill.opacity)?r.fill.opacity[this.seriesIndex]:r.fill.opacity;e.color&&(n=e.color),n||(n="#fff",console.warn("undefined color - ApexCharts"));var c=n;if(n.indexOf("rgb")===-1?n.length<9&&(c=P.hexToRgba(n,h)):n.indexOf("rgba")>-1&&(h=P.getOpacityFromRGBA(n)),e.opacity&&(h=e.opacity),o==="pattern"&&(a=this.handlePatternFill({fillConfig:e.fillConfig,patternFill:a,fillColor:n,fillOpacity:h,defaultColor:c})),o==="gradient"&&(s=this.handleGradientFill({fillConfig:e.fillConfig,fillColor:n,fillOpacity:h,i:this.seriesIndex})),o==="image"){var d=r.fill.image.src,g=e.patternID?e.patternID:"",f="pattern".concat(t.globals.cuid).concat(e.seriesNumber+1).concat(g);this.patternIDs.indexOf(f)===-1&&(this.clippedImgArea({opacity:h,image:Array.isArray(d)?e.seriesNumber-1&&(f=P.getOpacityFromRGBA(g));var x=r.gradient.opacityTo===void 0?i:Array.isArray(r.gradient.opacityTo)?r.gradient.opacityTo[s]:r.gradient.opacityTo;if(r.gradient.gradientToColors===void 0||r.gradient.gradientToColors.length===0)n=r.gradient.shade==="dark"?c.shadeColor(-1*parseFloat(r.gradient.shadeIntensity),t.indexOf("rgb")>-1?P.rgb2hex(t):t):c.shadeColor(parseFloat(r.gradient.shadeIntensity),t.indexOf("rgb")>-1?P.rgb2hex(t):t);else if(r.gradient.gradientToColors[o.seriesNumber]){var b=r.gradient.gradientToColors[o.seriesNumber];n=b,b.indexOf("rgba")>-1&&(x=P.getOpacityFromRGBA(b))}else n=t;if(r.gradient.gradientFrom&&(g=r.gradient.gradientFrom),r.gradient.gradientTo&&(n=r.gradient.gradientTo),r.gradient.inverseColors){var v=g;g=n,n=v}return g.indexOf("rgb")>-1&&(g=P.rgb2hex(g)),n.indexOf("rgb")>-1&&(n=P.rgb2hex(n)),h.drawGradient(d,g,n,f,x,o.size,r.gradient.stops,r.gradient.colorStops,s)}}]),p}(),ye=function(){function p(e,t){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"setGlobalMarkerSize",value:function(){var e=this.w;if(e.globals.markers.size=Array.isArray(e.config.markers.size)?e.config.markers.size:[e.config.markers.size],e.globals.markers.size.length>0){if(e.globals.markers.size.length4&&arguments[4]!==void 0&&arguments[4],n=this.w,o=t,h=e,c=null,d=new X(this.ctx),g=n.config.markers.discrete&&n.config.markers.discrete.length;if((n.globals.markers.size[t]>0||r||g)&&(c=d.group({class:r||g?"":"apexcharts-series-markers"})).attr("clip-path","url(#gridRectMarkerMask".concat(n.globals.cuid,")")),Array.isArray(h.x))for(var f=0;f0:n.config.markers.size>0)||r||g){P.isNumber(h.y[f])?b+=" w".concat(P.randomId()):b="apexcharts-nullpoint";var v=this.getMarkerConfig({cssClass:b,seriesIndex:t,dataPointIndex:x});n.config.series[o].data[x]&&(n.config.series[o].data[x].fillColor&&(v.pointFillColor=n.config.series[o].data[x].fillColor),n.config.series[o].data[x].strokeColor&&(v.pointStrokeColor=n.config.series[o].data[x].strokeColor)),a!==void 0&&(v.pSize=a),(h.x[f]<-n.globals.markers.largestSize||h.x[f]>n.globals.gridWidth+n.globals.markers.largestSize||h.y[f]<-n.globals.markers.largestSize||h.y[f]>n.globals.gridHeight+n.globals.markers.largestSize)&&(v.pSize=0),(s=d.drawMarker(h.x[f],h.y[f],v)).attr("rel",x),s.attr("j",x),s.attr("index",t),s.node.setAttribute("default-marker-size",v.pSize),new ie(this.ctx).setSelectionFilter(s,t,x),this.addEvents(s),c&&c.add(s)}else n.globals.pointsArray[t]===void 0&&(n.globals.pointsArray[t]=[]),n.globals.pointsArray[t].push([h.x[f],h.y[f]])}return c}},{key:"getMarkerConfig",value:function(e){var t=e.cssClass,i=e.seriesIndex,a=e.dataPointIndex,s=a===void 0?null:a,r=e.radius,n=r===void 0?null:r,o=e.size,h=o===void 0?null:o,c=e.strokeWidth,d=c===void 0?null:c,g=this.w,f=this.getMarkerStyle(i),x=h===null?g.globals.markers.size[i]:h,b=g.config.markers;return s!==null&&b.discrete.length&&b.discrete.map(function(v){v.seriesIndex===i&&v.dataPointIndex===s&&(f.pointStrokeColor=v.strokeColor,f.pointFillColor=v.fillColor,x=v.size,f.pointShape=v.shape)}),{pSize:n===null?x:n,pRadius:n!==null?n:b.radius,pointStrokeWidth:d!==null?d:Array.isArray(b.strokeWidth)?b.strokeWidth[i]:b.strokeWidth,pointStrokeColor:f.pointStrokeColor,pointFillColor:f.pointFillColor,shape:f.pointShape||(Array.isArray(b.shape)?b.shape[i]:b.shape),class:t,pointStrokeOpacity:Array.isArray(b.strokeOpacity)?b.strokeOpacity[i]:b.strokeOpacity,pointStrokeDashArray:Array.isArray(b.strokeDashArray)?b.strokeDashArray[i]:b.strokeDashArray,pointFillOpacity:Array.isArray(b.fillOpacity)?b.fillOpacity[i]:b.fillOpacity,seriesIndex:i}}},{key:"addEvents",value:function(e){var t=this.w,i=new X(this.ctx);e.node.addEventListener("mouseenter",i.pathMouseEnter.bind(this.ctx,e)),e.node.addEventListener("mouseleave",i.pathMouseLeave.bind(this.ctx,e)),e.node.addEventListener("mousedown",i.pathMouseDown.bind(this.ctx,e)),e.node.addEventListener("click",t.config.markers.onClick),e.node.addEventListener("dblclick",t.config.markers.onDblClick),e.node.addEventListener("touchstart",i.pathMouseDown.bind(this.ctx,e),{passive:!0})}},{key:"getMarkerStyle",value:function(e){var t=this.w,i=t.globals.markers.colors,a=t.config.markers.strokeColor||t.config.markers.strokeColors;return{pointStrokeColor:Array.isArray(a)?a[e]:a,pointFillColor:Array.isArray(i)?i[e]:i}}}]),p}(),Yt=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w,this.initialAnim=this.w.config.chart.animations.enabled}return R(p,[{key:"draw",value:function(e,t,i){var a=this.w,s=new X(this.ctx),r=i.realIndex,n=i.pointsPos,o=i.zRatio,h=i.elParent,c=s.group({class:"apexcharts-series-markers apexcharts-series-".concat(a.config.chart.type)});if(c.attr("clip-path","url(#gridRectMarkerMask".concat(a.globals.cuid,")")),Array.isArray(n.x))for(var d=0;db.maxBubbleRadius&&(x=b.maxBubbleRadius)}var v=n.x[d],y=n.y[d];if(x=x||0,y!==null&&a.globals.series[r][g]!==void 0||(f=!1),f){var w=this.drawPoint(v,y,x,r,g,t);c.add(w)}h.add(c)}}},{key:"drawPoint",value:function(e,t,i,a,s,r){var n=this.w,o=a,h=new ve(this.ctx),c=new ie(this.ctx),d=new ne(this.ctx),g=new ye(this.ctx),f=new X(this.ctx),x=g.getMarkerConfig({cssClass:"apexcharts-marker",seriesIndex:o,dataPointIndex:s,radius:n.config.chart.type==="bubble"||n.globals.comboCharts&&n.config.series[a]&&n.config.series[a].type==="bubble"?i:null}),b=d.fillPath({seriesNumber:a,dataPointIndex:s,color:x.pointFillColor,patternUnits:"objectBoundingBox",value:n.globals.series[a][r]}),v=f.drawMarker(e,t,x);if(n.config.series[o].data[s]&&n.config.series[o].data[s].fillColor&&(b=n.config.series[o].data[s].fillColor),v.attr({fill:b}),n.config.chart.dropShadow.enabled){var y=n.config.chart.dropShadow;c.dropShadow(v,y,a)}if(!this.initialAnim||n.globals.dataChanged||n.globals.resized)n.globals.animationEnded=!0;else{var w=n.config.chart.animations.speed;h.animateMarker(v,w,n.globals.easing,function(){window.setTimeout(function(){h.animationCompleted(v)},100)})}return v.attr({rel:s,j:s,index:a,"default-marker-size":x.pSize}),c.setSelectionFilter(v,a,s),g.addEvents(v),v.node.classList.add("apexcharts-marker"),v}},{key:"centerTextInBubble",value:function(e){var t=this.w;return{y:e+=parseInt(t.config.dataLabels.style.fontSize,10)/4}}}]),p}(),be=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"dataLabelsCorrection",value:function(e,t,i,a,s,r,n){var o=this.w,h=!1,c=new X(this.ctx).getTextRects(i,n),d=c.width,g=c.height;t<0&&(t=0),t>o.globals.gridHeight+g&&(t=o.globals.gridHeight+g/2),o.globals.dataLabelsRects[a]===void 0&&(o.globals.dataLabelsRects[a]=[]),o.globals.dataLabelsRects[a].push({x:e,y:t,width:d,height:g});var f=o.globals.dataLabelsRects[a].length-2,x=o.globals.lastDrawnDataLabelsIndexes[a]!==void 0?o.globals.lastDrawnDataLabelsIndexes[a][o.globals.lastDrawnDataLabelsIndexes[a].length-1]:0;if(o.globals.dataLabelsRects[a][f]!==void 0){var b=o.globals.dataLabelsRects[a][x];(e>b.x+b.width||t>b.y+b.height||t+gt.globals.gridWidth+w.textRects.width+30)&&(o="");var l=t.globals.dataLabels.style.colors[r];((t.config.chart.type==="bar"||t.config.chart.type==="rangeBar")&&t.config.plotOptions.bar.distributed||t.config.dataLabels.distributed)&&(l=t.globals.dataLabels.style.colors[n]),typeof l=="function"&&(l=l({series:t.globals.series,seriesIndex:r,dataPointIndex:n,w:t})),f&&(l=f);var u=g.offsetX,m=g.offsetY;if(t.config.chart.type!=="bar"&&t.config.chart.type!=="rangeBar"||(u=0,m=0),t.globals.isSlopeChart&&(n!==0&&(u=-2*g.offsetX+5),n!==0&&n!==t.config.series[r].data.length-1&&(u=0)),w.drawnextLabel){if((y=i.drawText({width:100,height:parseInt(g.style.fontSize,10),x:a+u,y:s+m,foreColor:l,textAnchor:h||g.textAnchor,text:o,fontSize:c||g.style.fontSize,fontFamily:g.style.fontFamily,fontWeight:g.style.fontWeight||"normal"})).attr({class:v||"apexcharts-datalabel",cx:a,cy:s}),g.dropShadow.enabled){var A=g.dropShadow;new ie(this.ctx).dropShadow(y,A)}d.add(y),t.globals.lastDrawnDataLabelsIndexes[r]===void 0&&(t.globals.lastDrawnDataLabelsIndexes[r]=[]),t.globals.lastDrawnDataLabelsIndexes[r].push(n)}return y}},{key:"addBackgroundToDataLabel",value:function(e,t){var i=this.w,a=i.config.dataLabels.background,s=a.padding,r=a.padding/2,n=t.width,o=t.height,h=new X(this.ctx).drawRect(t.x-s,t.y-r/2,n+2*s,o+r,a.borderRadius,i.config.chart.background!=="transparent"&&i.config.chart.background?i.config.chart.background:"#fff",a.opacity,a.borderWidth,a.borderColor);return a.dropShadow.enabled&&new ie(this.ctx).dropShadow(h,a.dropShadow),h}},{key:"dataLabelsBackground",value:function(){var e=this.w;if(e.config.chart.type!=="bubble")for(var t=e.globals.dom.baseEl.querySelectorAll(".apexcharts-datalabels text"),i=0;i0&&arguments[0]!==void 0)||arguments[0],t=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],i=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2],a=this.w,s=P.clone(a.globals.initialSeries);a.globals.previousPaths=[],i?(a.globals.collapsedSeries=[],a.globals.ancillaryCollapsedSeries=[],a.globals.collapsedSeriesIndices=[],a.globals.ancillaryCollapsedSeriesIndices=[]):s=this.emptyCollapsedSeries(s),a.config.series=s,e&&(t&&(a.globals.zoomed=!1,this.ctx.updateHelpers.revertDefaultAxisMinMax()),this.ctx.updateHelpers._updateSeries(s,a.config.chart.animations.dynamicAnimation.enabled))}},{key:"emptyCollapsedSeries",value:function(e){for(var t=this.w,i=0;i-1&&(e[i].data=[]);return e}},{key:"highlightSeries",value:function(e){var t=this.w,i=this.getSeriesByName(e),a=parseInt(i.getAttribute("data:realIndex"),10),s=t.globals.dom.baseEl.querySelectorAll(".apexcharts-series, .apexcharts-datalabels, .apexcharts-yaxis"),r=null,n=null,o=null;if(t.globals.axisCharts||t.config.chart.type==="radialBar")if(t.globals.axisCharts){r=t.globals.dom.baseEl.querySelector(".apexcharts-series[data\\:realIndex='".concat(a,"']")),n=t.globals.dom.baseEl.querySelector(".apexcharts-datalabels[data\\:realIndex='".concat(a,"']"));var h=t.globals.seriesYAxisReverseMap[a];o=t.globals.dom.baseEl.querySelector(".apexcharts-yaxis[rel='".concat(h,"']"))}else r=t.globals.dom.baseEl.querySelector(".apexcharts-series[rel='".concat(a+1,"']"));else r=t.globals.dom.baseEl.querySelector(".apexcharts-series[rel='".concat(a+1,"'] path"));for(var c=0;c=h.from&&(g0&&arguments[0]!==void 0?arguments[0]:"asc",t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[],i=this.w,a=0;if(i.config.series.length>1){for(var s=i.config.series.map(function(n,o){return n.data&&n.data.length>0&&i.globals.collapsedSeriesIndices.indexOf(o)===-1&&(!i.globals.comboCharts||t.length===0||t.length&&t.indexOf(i.config.series[o].type)>-1)?o:-1}),r=e==="asc"?0:s.length-1;e==="asc"?r=0;e==="asc"?r++:r--)if(s[r]!==-1){a=s[r];break}}return a}},{key:"getBarSeriesIndices",value:function(){return this.w.globals.comboCharts?this.w.config.series.map(function(e,t){return e.type==="bar"||e.type==="column"?t:-1}).filter(function(e){return e!==-1}):this.w.config.series.map(function(e,t){return t})}},{key:"getPreviousPaths",value:function(){var e=this.w;function t(r,n,o){for(var h=r[n].childNodes,c={type:o,paths:[],realIndex:r[n].getAttribute("data:realIndex")},d=0;d0)for(var a=function(r){for(var n=e.globals.dom.baseEl.querySelectorAll(".apexcharts-".concat(e.config.chart.type," .apexcharts-series[data\\:realIndex='").concat(r,"'] rect")),o=[],h=function(d){var g=function(x){return n[d].getAttribute(x)},f={x:parseFloat(g("x")),y:parseFloat(g("y")),width:parseFloat(g("width")),height:parseFloat(g("height"))};o.push({rect:f,color:n[d].getAttribute("color")})},c=0;c0)for(var a=0;a0?t:[]});return e}}]),p}(),Ft=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w,this.twoDSeries=[],this.threeDSeries=[],this.twoDSeriesX=[],this.seriesGoals=[],this.coreUtils=new $(this.ctx)}return R(p,[{key:"isMultiFormat",value:function(){return this.isFormatXY()||this.isFormat2DArray()}},{key:"isFormatXY",value:function(){var e=this.w.config.series.slice(),t=new re(this.ctx);if(this.activeSeriesIndex=t.getActiveConfigSeriesIndex(),e[this.activeSeriesIndex].data!==void 0&&e[this.activeSeriesIndex].data.length>0&&e[this.activeSeriesIndex].data[0]!==null&&e[this.activeSeriesIndex].data[0].x!==void 0&&e[this.activeSeriesIndex].data[0]!==null)return!0}},{key:"isFormat2DArray",value:function(){var e=this.w.config.series.slice(),t=new re(this.ctx);if(this.activeSeriesIndex=t.getActiveConfigSeriesIndex(),e[this.activeSeriesIndex].data!==void 0&&e[this.activeSeriesIndex].data.length>0&&e[this.activeSeriesIndex].data[0]!==void 0&&e[this.activeSeriesIndex].data[0]!==null&&e[this.activeSeriesIndex].data[0].constructor===Array)return!0}},{key:"handleFormat2DArray",value:function(e,t){for(var i=this.w.config,a=this.w.globals,s=i.chart.type==="boxPlot"||i.series[t].type==="boxPlot",r=0;r=5?this.twoDSeries.push(P.parseNumber(e[t].data[r][4])):this.twoDSeries.push(P.parseNumber(e[t].data[r][1])),a.dataFormatXNumeric=!0),i.xaxis.type==="datetime"){var n=new Date(e[t].data[r][0]);n=new Date(n).getTime(),this.twoDSeriesX.push(n)}else this.twoDSeriesX.push(e[t].data[r][0]);for(var o=0;o-1&&(r=this.activeSeriesIndex);for(var n=0;n1&&arguments[1]!==void 0?arguments[1]:this.ctx,a=this.w.config,s=this.w.globals,r=new K(i),n=a.labels.length>0?a.labels.slice():a.xaxis.categories.slice();s.isRangeBar=a.chart.type==="rangeBar"&&s.isBarHorizontal,s.hasXaxisGroups=a.xaxis.type==="category"&&a.xaxis.group.groups.length>0,s.hasXaxisGroups&&(s.groups=a.xaxis.group.groups),e.forEach(function(f,x){f.name!==void 0?s.seriesNames.push(f.name):s.seriesNames.push("series-"+parseInt(x+1,10))}),this.coreUtils.setSeriesYAxisMappings();var o=[],h=te(new Set(a.series.map(function(f){return f.group})));a.series.forEach(function(f,x){var b=h.indexOf(f.group);o[b]||(o[b]=[]),o[b].push(s.seriesNames[x])}),s.seriesGroups=o;for(var c=function(){for(var f=0;f0&&(this.twoDSeriesX=n,s.seriesX.push(this.twoDSeriesX))),s.labels.push(this.twoDSeriesX);var g=e[d].data.map(function(f){return P.parseNumber(f)});s.series.push(g)}s.seriesZ.push(this.threeDSeries),e[d].color!==void 0?s.seriesColors.push(e[d].color):s.seriesColors.push(void 0)}return this.w}},{key:"parseDataNonAxisCharts",value:function(e){var t=this.w.globals,i=this.w.config;t.series=e.slice(),t.seriesNames=i.labels.slice();for(var a=0;a0?i.labels=t.xaxis.categories:t.labels.length>0?i.labels=t.labels.slice():this.fallbackToCategory?(i.labels=i.labels[0],i.seriesRange.length&&(i.seriesRange.map(function(a){a.forEach(function(s){i.labels.indexOf(s.x)<0&&s.x&&i.labels.push(s.x)})}),i.labels=Array.from(new Set(i.labels.map(JSON.stringify)),JSON.parse)),t.xaxis.convertedCatToNumeric&&(new Le(t).convertCatToNumericXaxis(t,this.ctx,i.seriesX[0]),this._generateExternalLabels(e))):this._generateExternalLabels(e)}},{key:"_generateExternalLabels",value:function(e){var t=this.w.globals,i=this.w.config,a=[];if(t.axisCharts){if(t.series.length>0)if(this.isFormatXY())for(var s=i.series.map(function(d,g){return d.data.filter(function(f,x,b){return b.findIndex(function(v){return v.x===f.x})===x})}),r=s.reduce(function(d,g,f,x){return x[d].length>g.length?d:f},0),n=0;n0&&s==i.length&&t.push(a)}),e.globals.ignoreYAxisIndexes=t.map(function(i){return i})}}]),p}(),He=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"scaleSvgNode",value:function(e,t){var i=parseFloat(e.getAttributeNS(null,"width")),a=parseFloat(e.getAttributeNS(null,"height"));e.setAttributeNS(null,"width",i*t),e.setAttributeNS(null,"height",a*t),e.setAttributeNS(null,"viewBox","0 0 "+i+" "+a)}},{key:"getSvgString",value:function(){var e=this;return new Promise(function(t){var i=e.w,a=i.config.chart.toolbar.export.width,s=i.config.chart.toolbar.export.scale||a/i.globals.svgWidth;s||(s=1);var r=e.w.globals.dom.Paper.svg(),n=e.w.globals.dom.Paper.node.cloneNode(!0);s!==1&&e.scaleSvgNode(n,s),e.convertImagesToBase64(n).then(function(){r=new XMLSerializer().serializeToString(n),t(r.replace(/ /g," "))})})}},{key:"convertImagesToBase64",value:function(e){var t=this,i=e.getElementsByTagName("image"),a=Array.from(i).map(function(s){var r=s.getAttributeNS("http://www.w3.org/1999/xlink","href");return r&&!r.startsWith("data:")?t.getBase64FromUrl(r).then(function(n){s.setAttributeNS("http://www.w3.org/1999/xlink","href",n)}).catch(function(n){console.error("Error converting image to base64:",n)}):Promise.resolve()});return Promise.all(a)}},{key:"getBase64FromUrl",value:function(e){return new Promise(function(t,i){var a=new Image;a.crossOrigin="Anonymous",a.onload=function(){var s=document.createElement("canvas");s.width=a.width,s.height=a.height,s.getContext("2d").drawImage(a,0,0),t(s.toDataURL())},a.onerror=i,a.src=e})}},{key:"cleanup",value:function(){var e=this.w,t=e.globals.dom.baseEl.getElementsByClassName("apexcharts-xcrosshairs"),i=e.globals.dom.baseEl.getElementsByClassName("apexcharts-ycrosshairs"),a=e.globals.dom.baseEl.querySelectorAll(".apexcharts-zoom-rect, .apexcharts-selection-rect");Array.prototype.forEach.call(a,function(s){s.setAttribute("width",0)}),t&&t[0]&&(t[0].setAttribute("x",-500),t[0].setAttribute("x1",-500),t[0].setAttribute("x2",-500)),i&&i[0]&&(i[0].setAttribute("y",-100),i[0].setAttribute("y1",-100),i[0].setAttribute("y2",-100))}},{key:"svgUrl",value:function(){var e=this;return new Promise(function(t){e.cleanup(),e.getSvgString().then(function(i){var a=new Blob([i],{type:"image/svg+xml;charset=utf-8"});t(URL.createObjectURL(a))})})}},{key:"dataURI",value:function(e){var t=this;return new Promise(function(i){var a=t.w,s=e?e.scale||e.width/a.globals.svgWidth:1;t.cleanup();var r=document.createElement("canvas");r.width=a.globals.svgWidth*s,r.height=parseInt(a.globals.dom.elWrap.style.height,10)*s;var n=a.config.chart.background!=="transparent"&&a.config.chart.background?a.config.chart.background:"#fff",o=r.getContext("2d");o.fillStyle=n,o.fillRect(0,0,r.width*s,r.height*s),t.getSvgString().then(function(h){var c="data:image/svg+xml,"+encodeURIComponent(h),d=new Image;d.crossOrigin="anonymous",d.onload=function(){if(o.drawImage(d,0,0),r.msToBlob){var g=r.msToBlob();i({blob:g})}else{var f=r.toDataURL("image/png");i({imgURI:f})}},d.src=c})})}},{key:"exportToSVG",value:function(){var e=this;this.svgUrl().then(function(t){e.triggerDownload(t,e.w.config.chart.toolbar.export.svg.filename,".svg")})}},{key:"exportToPng",value:function(){var e=this,t=this.w.config.chart.toolbar.export.scale,i=this.w.config.chart.toolbar.export.width,a=t?{scale:t}:i?{width:i}:void 0;this.dataURI(a).then(function(s){var r=s.imgURI,n=s.blob;n?navigator.msSaveOrOpenBlob(n,e.w.globals.chartID+".png"):e.triggerDownload(r,e.w.config.chart.toolbar.export.png.filename,".png")})}},{key:"exportToCSV",value:function(e){var t=this,i=e.series,a=e.fileName,s=e.columnDelimiter,r=s===void 0?",":s,n=e.lineDelimiter,o=n===void 0?` +`:n,h=this.w;i||(i=h.config.series);var c,d,g=[],f=[],x="",b=h.globals.series.map(function(k,S){return h.globals.collapsedSeriesIndices.indexOf(S)===-1?k:[]}),v=function(k){return typeof h.config.chart.toolbar.export.csv.categoryFormatter=="function"?h.config.chart.toolbar.export.csv.categoryFormatter(k):h.config.xaxis.type==="datetime"&&String(k).length>=10?new Date(k).toDateString():P.isNumber(k)?k:k.split(r).join("")},y=function(k){return typeof h.config.chart.toolbar.export.csv.valueFormatter=="function"?h.config.chart.toolbar.export.csv.valueFormatter(k):k},w=Math.max.apply(Math,te(i.map(function(k){return k.data?k.data.length:0}))),l=new Ft(this.ctx),u=new ge(this.ctx),m=function(k){var S="";if(h.globals.axisCharts){if(h.config.xaxis.type==="category"||h.config.xaxis.convertedCatToNumeric)if(h.globals.isBarHorizontal){var L=h.globals.yLabelFormatters[0],C=new re(t.ctx).getActiveConfigSeriesIndex();S=L(h.globals.labels[k],{seriesIndex:C,dataPointIndex:k,w:h})}else S=u.getLabel(h.globals.labels,h.globals.timescaleLabels,0,k).text;h.config.xaxis.type==="datetime"&&(h.config.xaxis.categories.length?S=h.config.xaxis.categories[k]:h.config.labels.length&&(S=h.config.labels[k]))}else S=h.config.labels[k];return S===null?"nullvalue":(Array.isArray(S)&&(S=S.join(" ")),P.isNumber(S)?S:S.split(r).join(""))},A=function(k,S){if(g.length&&S===0&&f.push(g.join(r)),k.data){k.data=k.data.length&&k.data||te(Array(w)).map(function(){return""});for(var L=0;L0&&!i.globals.isBarHorizontal&&(this.xaxisLabels=i.globals.timescaleLabels.slice()),i.config.xaxis.overwriteCategories&&(this.xaxisLabels=i.config.xaxis.overwriteCategories),this.drawnLabels=[],this.drawnLabelsRects=[],i.config.xaxis.position==="top"?this.offY=0:this.offY=i.globals.gridHeight,this.offY=this.offY+i.config.xaxis.axisBorder.offsetY,this.isCategoryBarHorizontal=i.config.chart.type==="bar"&&i.config.plotOptions.bar.horizontal,this.xaxisFontSize=i.config.xaxis.labels.style.fontSize,this.xaxisFontFamily=i.config.xaxis.labels.style.fontFamily,this.xaxisForeColors=i.config.xaxis.labels.style.colors,this.xaxisBorderWidth=i.config.xaxis.axisBorder.width,this.isCategoryBarHorizontal&&(this.xaxisBorderWidth=i.config.yaxis[0].axisBorder.width.toString()),this.xaxisBorderWidth.indexOf("%")>-1?this.xaxisBorderWidth=i.globals.gridWidth*parseInt(this.xaxisBorderWidth,10)/100:this.xaxisBorderWidth=parseInt(this.xaxisBorderWidth,10),this.xaxisBorderHeight=i.config.xaxis.axisBorder.height,this.yaxis=i.config.yaxis[0]}return R(p,[{key:"drawXaxis",value:function(){var e=this.w,t=new X(this.ctx),i=t.group({class:"apexcharts-xaxis",transform:"translate(".concat(e.config.xaxis.offsetX,", ").concat(e.config.xaxis.offsetY,")")}),a=t.group({class:"apexcharts-xaxis-texts-g",transform:"translate(".concat(e.globals.translateXAxisX,", ").concat(e.globals.translateXAxisY,")")});i.add(a);for(var s=[],r=0;r6&&arguments[6]!==void 0?arguments[6]:{},c=[],d=[],g=this.w,f=h.xaxisFontSize||this.xaxisFontSize,x=h.xaxisFontFamily||this.xaxisFontFamily,b=h.xaxisForeColors||this.xaxisForeColors,v=h.fontWeight||g.config.xaxis.labels.style.fontWeight,y=h.cssClass||g.config.xaxis.labels.style.cssClass,w=g.globals.padHorizontal,l=a.length,u=g.config.xaxis.type==="category"?g.globals.dataPoints:l;if(u===0&&l>u&&(u=l),s){var m=u>1?u-1:u;n=g.globals.gridWidth/Math.min(m,l-1),w=w+r(0,n)/2+g.config.xaxis.labels.offsetX}else n=g.globals.gridWidth/u,w=w+r(0,n)+g.config.xaxis.labels.offsetX;for(var A=function(S){var L=w-r(S,n)/2+g.config.xaxis.labels.offsetX;S===0&&l===1&&n/2===w&&u===1&&(L=g.globals.gridWidth/2);var C=o.axesUtils.getLabel(a,g.globals.timescaleLabels,L,S,c,f,e),I=28;if(g.globals.rotateXLabels&&e&&(I=22),g.config.xaxis.title.text&&g.config.xaxis.position==="top"&&(I+=parseFloat(g.config.xaxis.title.style.fontSize)+2),e||(I=I+parseFloat(f)+(g.globals.xAxisLabelsHeight-g.globals.xAxisGroupLabelsHeight)+(g.globals.rotateXLabels?10:0)),C=g.config.xaxis.tickAmount!==void 0&&g.config.xaxis.tickAmount!=="dataPoints"&&g.config.xaxis.type!=="datetime"?o.axesUtils.checkLabelBasedOnTickamount(S,C,l):o.axesUtils.checkForOverflowingLabels(S,C,l,c,d),g.config.xaxis.labels.show){var z=t.drawText({x:C.x,y:o.offY+g.config.xaxis.labels.offsetY+I-(g.config.xaxis.position==="top"?g.globals.xAxisHeight+g.config.xaxis.axisTicks.height-2:0),text:C.text,textAnchor:"middle",fontWeight:C.isBold?600:v,fontSize:f,fontFamily:x,foreColor:Array.isArray(b)?e&&g.config.xaxis.convertedCatToNumeric?b[g.globals.minX+S-1]:b[S]:b,isPlainText:!1,cssClass:(e?"apexcharts-xaxis-label ":"apexcharts-xaxis-group-label ")+y});if(i.add(z),z.on("click",function(T){if(typeof g.config.chart.events.xAxisLabelClick=="function"){var E=Object.assign({},g,{labelIndex:S});g.config.chart.events.xAxisLabelClick(T,o.ctx,E)}}),e){var M=document.createElementNS(g.globals.SVGNS,"title");M.textContent=Array.isArray(C.text)?C.text.join(" "):C.text,z.node.appendChild(M),C.text!==""&&(c.push(C.text),d.push(C))}}Sa.globals.gridWidth)){var r=this.offY+a.config.xaxis.axisTicks.offsetY;if(t=t+r+a.config.xaxis.axisTicks.height,a.config.xaxis.position==="top"&&(t=r-a.config.xaxis.axisTicks.height),a.config.xaxis.axisTicks.show){var n=new X(this.ctx).drawLine(e+a.config.xaxis.axisTicks.offsetX,r+a.config.xaxis.offsetY,s+a.config.xaxis.axisTicks.offsetX,t+a.config.xaxis.offsetY,a.config.xaxis.axisTicks.color);i.add(n),n.node.classList.add("apexcharts-xaxis-tick")}}}},{key:"getXAxisTicksPositions",value:function(){var e=this.w,t=[],i=this.xaxisLabels.length,a=e.globals.padHorizontal;if(e.globals.timescaleLabels.length>0)for(var s=0;s0){var c=s[s.length-1].getBBox(),d=s[0].getBBox();c.x<-20&&s[s.length-1].parentNode.removeChild(s[s.length-1]),d.x+d.width>e.globals.gridWidth&&!e.globals.isBarHorizontal&&s[0].parentNode.removeChild(s[0]);for(var g=0;g0&&(this.xaxisLabels=t.globals.timescaleLabels.slice())}return R(p,[{key:"drawGridArea",value:function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:null,t=this.w,i=new X(this.ctx);e===null&&(e=i.group({class:"apexcharts-grid"}));var a=i.drawLine(t.globals.padHorizontal,1,t.globals.padHorizontal,t.globals.gridHeight,"transparent"),s=i.drawLine(t.globals.padHorizontal,t.globals.gridHeight,t.globals.gridWidth,t.globals.gridHeight,"transparent");return e.add(s),e.add(a),e}},{key:"drawGrid",value:function(){var e=null;return this.w.globals.axisCharts&&(e=this.renderGrid(),this.drawGridArea(e.el)),e}},{key:"createGridMask",value:function(){var e=this.w,t=e.globals,i=new X(this.ctx),a=Array.isArray(e.config.stroke.width)?0:e.config.stroke.width;if(Array.isArray(e.config.stroke.width)){var s=0;e.config.stroke.width.forEach(function(d){s=Math.max(s,d)}),a=s}t.dom.elGridRectMask=document.createElementNS(t.SVGNS,"clipPath"),t.dom.elGridRectMask.setAttribute("id","gridRectMask".concat(t.cuid)),t.dom.elGridRectMarkerMask=document.createElementNS(t.SVGNS,"clipPath"),t.dom.elGridRectMarkerMask.setAttribute("id","gridRectMarkerMask".concat(t.cuid)),t.dom.elForecastMask=document.createElementNS(t.SVGNS,"clipPath"),t.dom.elForecastMask.setAttribute("id","forecastMask".concat(t.cuid)),t.dom.elNonForecastMask=document.createElementNS(t.SVGNS,"clipPath"),t.dom.elNonForecastMask.setAttribute("id","nonForecastMask".concat(t.cuid));var r=e.config.chart.type,n=0,o=0;(r==="bar"||r==="rangeBar"||r==="candlestick"||r==="boxPlot"||e.globals.comboBarCount>0)&&e.globals.isXNumeric&&!e.globals.isBarHorizontal&&(n=e.config.grid.padding.left,o=e.config.grid.padding.right,t.barPadForNumericAxis>n&&(n=t.barPadForNumericAxis,o=t.barPadForNumericAxis)),t.dom.elGridRect=i.drawRect(-a/2-n-2,-a/2-2,t.gridWidth+a+o+n+4,t.gridHeight+a+4,0,"#fff");var h=e.globals.markers.largestSize+1;t.dom.elGridRectMarker=i.drawRect(2*-h,2*-h,t.gridWidth+4*h,t.gridHeight+4*h,0,"#fff"),t.dom.elGridRectMask.appendChild(t.dom.elGridRect.node),t.dom.elGridRectMarkerMask.appendChild(t.dom.elGridRectMarker.node);var c=t.dom.baseEl.querySelector("defs");c.appendChild(t.dom.elGridRectMask),c.appendChild(t.dom.elForecastMask),c.appendChild(t.dom.elNonForecastMask),c.appendChild(t.dom.elGridRectMarkerMask)}},{key:"_drawGridLines",value:function(e){var t=e.i,i=e.x1,a=e.y1,s=e.x2,r=e.y2,n=e.xCount,o=e.parent,h=this.w;if(!(t===0&&h.globals.skipFirstTimelinelabel||t===n-1&&h.globals.skipLastTimelinelabel&&!h.config.xaxis.labels.formatter||h.config.chart.type==="radar")){h.config.grid.xaxis.lines.show&&this._drawGridLine({i:t,x1:i,y1:a,x2:s,y2:r,xCount:n,parent:o});var c=0;if(h.globals.hasXaxisGroups&&h.config.xaxis.tickPlacement==="between"){var d=h.globals.groups;if(d){for(var g=0,f=0;g0&&e.config.xaxis.type!=="datetime"&&(s=t.yAxisScale[a].result.length-1)),this._drawXYLines({xCount:s,tickAmount:r})}else s=r,r=t.xTickAmount,this._drawInvertedXYLines({xCount:s,tickAmount:r});return this.drawGridBands(s,r),{el:this.elg,elGridBorders:this.elGridBorders,xAxisTickWidth:t.gridWidth/s}}},{key:"drawGridBands",value:function(e,t){var i=this.w;if(i.config.grid.row.colors!==void 0&&i.config.grid.row.colors.length>0)for(var a=0,s=i.globals.gridHeight/t,r=i.globals.gridWidth,n=0,o=0;n=i.config.grid.row.colors.length&&(o=0),this._drawGridBandRect({c:o,x1:0,y1:a,x2:r,y2:s,type:"row"}),a+=i.globals.gridHeight/t;if(i.config.grid.column.colors!==void 0&&i.config.grid.column.colors.length>0){var h=i.globals.isBarHorizontal||i.config.xaxis.tickPlacement!=="on"||i.config.xaxis.type!=="category"&&!i.config.xaxis.convertedCatToNumeric?e:e-1;i.globals.isXNumeric&&(h=i.globals.xAxisScale.result.length-1);for(var c=i.globals.padHorizontal,d=i.globals.padHorizontal+i.globals.gridWidth/h,g=i.globals.gridHeight,f=0,x=0;f=i.config.grid.column.colors.length&&(x=0),i.config.xaxis.type==="datetime"&&(c=this.xaxisLabels[f].position,d=(((b=this.xaxisLabels[f+1])===null||b===void 0?void 0:b.position)||i.globals.gridWidth)-this.xaxisLabels[f].position),this._drawGridBandRect({c:x,x1:c,y1:0,x2:d,y2:g,type:"column"}),c+=i.globals.gridWidth/h}}}}]),p}(),Ot=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"niceScale",value:function(e,t){var i,a,s,r,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,o=1e-11,h=this.w,c=h.globals;c.isBarHorizontal?(i=h.config.xaxis,a=Math.max((c.svgWidth-100)/25,2)):(i=h.config.yaxis[n],a=Math.max((c.svgHeight-100)/15,2)),P.isNumber(a)||(a=10),s=i.min!==void 0&&i.min!==null,r=i.max!==void 0&&i.min!==null;var d=i.stepSize!==void 0&&i.stepSize!==null,g=i.tickAmount!==void 0&&i.tickAmount!==null,f=g?i.tickAmount:c.niceScaleDefaultTicks[Math.min(Math.round(a/2),c.niceScaleDefaultTicks.length-1)];if(c.isMultipleYAxis&&!g&&c.multiAxisTickAmount>0&&(f=c.multiAxisTickAmount,g=!0),f=f==="dataPoints"?c.dataPoints-1:Math.abs(Math.round(f)),(e===Number.MIN_VALUE&&t===0||!P.isNumber(e)&&!P.isNumber(t)||e===Number.MIN_VALUE&&t===-Number.MAX_VALUE)&&(e=P.isNumber(i.min)?i.min:0,t=P.isNumber(i.max)?i.max:e+f,c.allSeriesCollapsed=!1),e>t){console.warn("axis.min cannot be greater than axis.max: swapping min and max");var x=t;t=e,e=x}else e===t&&(e=e===0?0:e-1,t=t===0?2:t+1);var b=[];f<1&&(f=1);var v=f,y=Math.abs(t-e);!s&&e>0&&e/y<.15&&(e=0,s=!0),!r&&t<0&&-t/y<.15&&(t=0,r=!0);var w=(y=Math.abs(t-e))/v,l=w,u=Math.floor(Math.log10(l)),m=Math.pow(10,u),A=Math.ceil(l/m);if(w=l=(A=c.niceScaleAllowedMagMsd[c.yValueDecimal===0?0:1][A])*m,c.isBarHorizontal&&i.stepSize&&i.type!=="datetime"?(w=i.stepSize,d=!0):d&&(w=i.stepSize),d&&i.forceNiceScale){var k=Math.floor(Math.log10(w));w*=Math.pow(10,u-k)}if(s&&r){var S=y/v;if(g)if(d)if(P.mod(y,w)!=0){var L=P.getGCD(w,S);w=S/L<10?L:S}else P.mod(w,S)==0?w=S:(S=w,g=!1);else w=S;else if(d)P.mod(y,w)==0?S=w:w=S;else if(P.mod(y,w)==0)S=w;else{S=y/(v=Math.ceil(y/w));var C=P.getGCD(y,w);y/Ca&&(e=t-w*f,e+=w*Math.floor((I-e)/w))}else if(s)if(g)t=e+w*v;else{var z=t;t=w*Math.ceil(t/w),Math.abs(t-e)/P.getGCD(y,w)>a&&(t=e+w*f,t+=w*Math.ceil((z-t)/w))}}else if(c.isMultipleYAxis&&g){var M=w*Math.floor(e/w),T=M+w*v;T0&&e16&&P.getPrimeFactors(v).length<2&&v++,!g&&i.forceNiceScale&&c.yValueDecimal===0&&v>y&&(v=y,w=Math.round(y/v)),v>a&&(!g&&!d||i.forceNiceScale)){var E=P.getPrimeFactors(v),O=E.length-1,D=v;e:for(var H=0;Hse);return{result:b,niceMin:b[0],niceMax:b[b.length-1]}}},{key:"linearScale",value:function(e,t){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:10,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,s=arguments.length>4&&arguments[4]!==void 0?arguments[4]:void 0,r=Math.abs(t-e),n=[];if(e===t)return{result:n=[e],niceMin:n[0],niceMax:n[n.length-1]};(i=this._adjustTicksForSmallRange(i,a,r))==="dataPoints"&&(i=this.w.globals.dataPoints-1),s||(s=r/i),s=Math.round(10*(s+Number.EPSILON))/10,i===Number.MAX_VALUE&&(i=5,s=1);for(var o=e;i>=0;)n.push(o),o=P.preciseAddition(o,s),i-=1;return{result:n,niceMin:n[0],niceMax:n[n.length-1]}}},{key:"logarithmicScaleNice",value:function(e,t,i){t<=0&&(t=Math.max(e,i)),e<=0&&(e=Math.min(t,i));for(var a=[],s=Math.ceil(Math.log(t)/Math.log(i)+1),r=Math.floor(Math.log(e)/Math.log(i));r5?(a.allSeriesCollapsed=!1,a.yAxisScale[e]=r.forceNiceScale?this.logarithmicScaleNice(t,i,r.logBase):this.logarithmicScale(t,i,r.logBase)):i!==-Number.MAX_VALUE&&P.isNumber(i)&&t!==Number.MAX_VALUE&&P.isNumber(t)?(a.allSeriesCollapsed=!1,a.yAxisScale[e]=this.niceScale(t,i,e)):a.yAxisScale[e]=this.niceScale(Number.MIN_VALUE,0,e)}},{key:"setXScale",value:function(e,t){var i=this.w,a=i.globals,s=Math.abs(t-e);if(t!==-Number.MAX_VALUE&&P.isNumber(t)){var r=a.xTickAmount+1;s<10&&s>1&&(r=s),a.xAxisScale=this.linearScale(e,t,r,0,i.config.xaxis.stepSize)}else a.xAxisScale=this.linearScale(0,10,10);return a.xAxisScale}},{key:"setSeriesYAxisMappings",value:function(){var e=this.w.globals,t=this.w.config,i=[],a=[],s=[],r=e.series.length>t.yaxis.length||t.yaxis.some(function(d){return Array.isArray(d.seriesName)});t.series.forEach(function(d,g){s.push(g),a.push(null)}),t.yaxis.forEach(function(d,g){i[g]=[]});var n=[];t.yaxis.forEach(function(d,g){var f=!1;if(d.seriesName){var x=[];Array.isArray(d.seriesName)?x=d.seriesName:x.push(d.seriesName),x.forEach(function(b){t.series.forEach(function(v,y){if(v.name===b){var w=y;g===y||r?!r||s.indexOf(y)>-1?i[g].push([g,y]):console.warn("Series '"+v.name+"' referenced more than once in what looks like the new style. That is, when using either seriesName: [], or when there are more series than yaxes."):(i[y].push([y,g]),w=g),f=!0,(w=s.indexOf(w))!==-1&&s.splice(w,1)}})})}f||n.push(g)}),i=i.map(function(d,g){var f=[];return d.forEach(function(x){a[x[1]]=x[0],f.push(x[1])}),f});for(var o=t.yaxis.length-1,h=0;h0?function(){var c,d,g=Number.MAX_VALUE,f=-Number.MAX_VALUE,x=g,b=f;if(t.chart.stacked)(function(){var w=i.seriesX[n[0]],l=[],u=[],m=[];h.forEach(function(){l.push(w.map(function(){return Number.MIN_VALUE})),u.push(w.map(function(){return Number.MIN_VALUE})),m.push(w.map(function(){return Number.MIN_VALUE}))});for(var A=function(S){!c&&t.series[n[S]].type&&(c=t.series[n[S]].type);var L=n[S];d=t.series[L].group?t.series[L].group:"axis-".concat(o),!(i.collapsedSeriesIndices.indexOf(L)<0&&i.ancillaryCollapsedSeriesIndices.indexOf(L)<0)||(i.allSeriesCollapsed=!1,h.forEach(function(C,I){if(t.series[L].group===C)for(var z=0;z=0?u[I][z]+=M:m[I][z]+=M,l[I][z]+=M,x=Math.min(x,M),b=Math.max(b,M)}})),c!=="bar"&&c!=="column"||i.barGroups.push(d)},k=0;k1&&arguments[1]!==void 0?arguments[1]:Number.MAX_VALUE,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:-Number.MAX_VALUE,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:null,s=this.w.config,r=this.w.globals,n=-Number.MAX_VALUE,o=Number.MIN_VALUE;a===null&&(a=e+1);var h=r.series,c=h,d=h;s.chart.type==="candlestick"?(c=r.seriesCandleL,d=r.seriesCandleH):s.chart.type==="boxPlot"?(c=r.seriesCandleO,d=r.seriesCandleC):r.isRangeData&&(c=r.seriesRangeStart,d=r.seriesRangeEnd);var g=!1;if(r.seriesX.length>=a){var f,x=(f=r.brushSource)===null||f===void 0?void 0:f.w.config.chart.brush;(s.chart.zoom.enabled&&s.chart.zoom.autoScaleYaxis||x!=null&&x.enabled&&x!=null&&x.autoScaleYaxis)&&(g=!0)}for(var b=e;by&&r.seriesX[b][w]>s.xaxis.max;w--);}for(var l=y;l<=w&&lc[b][l]&&c[b][l]<0&&(o=c[b][l])}else r.hasNullValues=!0}v!=="bar"&&v!=="column"||(o<0&&n<0&&(n=0,i=Math.max(i,0)),o===Number.MIN_VALUE&&(o=0,t=Math.min(t,0)))}return s.chart.type==="rangeBar"&&r.seriesRangeStart.length&&r.isBarHorizontal&&(o=t),s.chart.type==="bar"&&(o<0&&n<0&&(n=0),o===Number.MIN_VALUE&&(o=0)),{minY:o,maxY:n,lowestY:t,highestY:i}}},{key:"setYRange",value:function(){var e=this.w.globals,t=this.w.config;e.maxY=-Number.MAX_VALUE,e.minY=Number.MIN_VALUE;var i,a=Number.MAX_VALUE;if(e.isMultipleYAxis){a=Number.MAX_VALUE;for(var s=0;se.dataPoints&&e.dataPoints!==0&&(a=e.dataPoints-1);else if(t.xaxis.tickAmount==="dataPoints"){if(e.series.length>1&&(a=e.series[e.maxValsInArrayIndex].length-1),e.isXNumeric){var s=e.maxX-e.minX;s<30&&(a=s-1)}}else a=t.xaxis.tickAmount;if(e.xTickAmount=a,t.xaxis.max!==void 0&&typeof t.xaxis.max=="number"&&(e.maxX=t.xaxis.max),t.xaxis.min!==void 0&&typeof t.xaxis.min=="number"&&(e.minX=t.xaxis.min),t.xaxis.range!==void 0&&(e.minX=e.maxX-t.xaxis.range),e.minX!==Number.MAX_VALUE&&e.maxX!==-Number.MAX_VALUE)if(t.xaxis.convertedCatToNumeric&&!e.dataFormatXNumeric){for(var r=[],n=e.minX-1;n0&&(e.xAxisScale=this.scales.linearScale(1,e.labels.length,a-1,0,t.xaxis.stepSize),e.seriesX=e.labels.slice());i&&(e.labels=e.xAxisScale.result.slice())}return e.isBarHorizontal&&e.labels.length&&(e.xTickAmount=e.labels.length),this._handleSingleDataPoint(),this._getMinXDiff(),{minX:e.minX,maxX:e.maxX}}},{key:"setZRange",value:function(){var e=this.w.globals;if(e.isDataXYZ){for(var t=0;t0){var n=s-a[r-1];n>0&&(e.minXDiff=Math.min(n,e.minXDiff))}}),e.dataPoints!==1&&e.minXDiff!==Number.MAX_VALUE||(e.minXDiff=.5)})}},{key:"_setStackedMinMax",value:function(){var e=this,t=this.w.globals;if(t.series.length){var i=t.seriesGroups;i.length||(i=[this.w.globals.seriesNames.map(function(r){return r})]);var a={},s={};i.forEach(function(r){a[r]=[],s[r]=[],e.w.config.series.map(function(n,o){return r.indexOf(t.seriesNames[o])>-1?o:null}).filter(function(n){return n!==null}).forEach(function(n){for(var o=0;o0?a[r][o]+=parseFloat(t.series[n][o])+1e-4:s[r][o]+=parseFloat(t.series[n][o]))}})}),Object.entries(a).forEach(function(r){var n=It(r,1)[0];a[n].forEach(function(o,h){t.maxY=Math.max(t.maxY,a[n][h]),t.minY=Math.min(t.minY,s[n][h])})})}}}]),p}(),lt=function(){function p(e,t){F(this,p),this.ctx=e,this.elgrid=t,this.w=e.w;var i=this.w;this.xaxisFontSize=i.config.xaxis.labels.style.fontSize,this.axisFontFamily=i.config.xaxis.labels.style.fontFamily,this.xaxisForeColors=i.config.xaxis.labels.style.colors,this.isCategoryBarHorizontal=i.config.chart.type==="bar"&&i.config.plotOptions.bar.horizontal,this.xAxisoffX=0,i.config.xaxis.position==="bottom"&&(this.xAxisoffX=i.globals.gridHeight),this.drawnLabels=[],this.axesUtils=new ge(e)}return R(p,[{key:"drawYaxis",value:function(e){var t=this,i=this.w,a=new X(this.ctx),s=i.config.yaxis[e].labels.style,r=s.fontSize,n=s.fontFamily,o=s.fontWeight,h=a.group({class:"apexcharts-yaxis",rel:e,transform:"translate("+i.globals.translateYAxisX[e]+", 0)"});if(this.axesUtils.isYAxisHidden(e))return h;var c=a.group({class:"apexcharts-yaxis-texts-g"});h.add(c);var d=i.globals.yAxisScale[e].result.length-1,g=i.globals.gridHeight/d,f=i.globals.yLabelFormatters[e],x=i.globals.yAxisScale[e].result.slice();x=this.axesUtils.checkForReversedLabels(e,x);var b="";if(i.config.yaxis[e].labels.show){var v=i.globals.translateY+i.config.yaxis[e].labels.offsetY;i.globals.isBarHorizontal?v=0:i.config.chart.type==="heatmap"&&(v-=g/2),v+=parseInt(i.config.yaxis[e].labels.style.fontSize,10)/3;for(var y=function(L){var C=x[L];C=f(C,L,i);var I=i.config.yaxis[e].labels.padding;i.config.yaxis[e].opposite&&i.config.yaxis.length!==0&&(I*=-1);var z="end";i.config.yaxis[e].opposite&&(z="start"),i.config.yaxis[e].labels.align==="left"?z="start":i.config.yaxis[e].labels.align==="center"?z="middle":i.config.yaxis[e].labels.align==="right"&&(z="end");var M=t.axesUtils.getYAxisForeColor(s.colors,e),T=P.listToArray(i.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxis[rel='".concat(e,"'] .apexcharts-yaxis-label tspan"))).map(function(W){return W.textContent}),E=a.drawText({x:I,y:v,text:T.indexOf(C)>=0?"":C,textAnchor:z,fontSize:r,fontFamily:n,fontWeight:o,maxWidth:i.config.yaxis[e].labels.maxWidth,foreColor:Array.isArray(M)?M[L]:M,isPlainText:!1,cssClass:"apexcharts-yaxis-label "+s.cssClass});L===d&&(b=E),c.add(E);var O=document.createElementNS(i.globals.SVGNS,"title");if(O.textContent=Array.isArray(C)?C.join(" "):C,E.node.appendChild(O),i.config.yaxis[e].labels.rotate!==0){var D=a.rotateAroundCenter(b.node),H=a.rotateAroundCenter(E.node);E.node.setAttribute("transform","rotate(".concat(i.config.yaxis[e].labels.rotate," ").concat(D.x," ").concat(H.y,")"))}v+=g},w=d;w>=0;w--)y(w)}if(i.config.yaxis[e].title.text!==void 0){var l=a.group({class:"apexcharts-yaxis-title"}),u=0;i.config.yaxis[e].opposite&&(u=i.globals.translateYAxisX[e]);var m=a.drawText({x:u,y:i.globals.gridHeight/2+i.globals.translateY+i.config.yaxis[e].title.offsetY,text:i.config.yaxis[e].title.text,textAnchor:"end",foreColor:i.config.yaxis[e].title.style.color,fontSize:i.config.yaxis[e].title.style.fontSize,fontWeight:i.config.yaxis[e].title.style.fontWeight,fontFamily:i.config.yaxis[e].title.style.fontFamily,cssClass:"apexcharts-yaxis-title-text "+i.config.yaxis[e].title.style.cssClass});l.add(m),h.add(l)}var A=i.config.yaxis[e].axisBorder,k=31+A.offsetX;if(i.config.yaxis[e].opposite&&(k=-31-A.offsetX),A.show){var S=a.drawLine(k,i.globals.translateY+A.offsetY-2,k,i.globals.gridHeight+i.globals.translateY+A.offsetY+2,A.color,0,A.width);h.add(S)}return i.config.yaxis[e].axisTicks.show&&this.axesUtils.drawYAxisTicks(k,d,A,i.config.yaxis[e].axisTicks,e,g,h),h}},{key:"drawYaxisInversed",value:function(e){var t=this.w,i=new X(this.ctx),a=i.group({class:"apexcharts-xaxis apexcharts-yaxis-inversed"}),s=i.group({class:"apexcharts-xaxis-texts-g",transform:"translate(".concat(t.globals.translateXAxisX,", ").concat(t.globals.translateXAxisY,")")});a.add(s);var r=t.globals.yAxisScale[e].result.length-1,n=t.globals.gridWidth/r+.1,o=n+t.config.xaxis.labels.offsetX,h=t.globals.xLabelFormatter,c=t.globals.yAxisScale[e].result.slice(),d=t.globals.timescaleLabels;d.length>0&&(this.xaxisLabels=d.slice(),r=(c=d.slice()).length),c=this.axesUtils.checkForReversedLabels(e,c);var g=d.length;if(t.config.xaxis.labels.show)for(var f=g?0:r;g?f=0;g?f++:f--){var x=c[f];x=h(x,f,t);var b=t.globals.gridWidth+t.globals.padHorizontal-(o-n+t.config.xaxis.labels.offsetX);if(d.length){var v=this.axesUtils.getLabel(c,d,b,f,this.drawnLabels,this.xaxisFontSize);b=v.x,x=v.text,this.drawnLabels.push(v.text),f===0&&t.globals.skipFirstTimelinelabel&&(x=""),f===c.length-1&&t.globals.skipLastTimelinelabel&&(x="")}var y=i.drawText({x:b,y:this.xAxisoffX+t.config.xaxis.labels.offsetY+30-(t.config.xaxis.position==="top"?t.globals.xAxisHeight+t.config.xaxis.axisTicks.height-2:0),text:x,textAnchor:"middle",foreColor:Array.isArray(this.xaxisForeColors)?this.xaxisForeColors[e]:this.xaxisForeColors,fontSize:this.xaxisFontSize,fontFamily:this.xaxisFontFamily,fontWeight:t.config.xaxis.labels.style.fontWeight,isPlainText:!1,cssClass:"apexcharts-xaxis-label "+t.config.xaxis.labels.style.cssClass});s.add(y),y.tspan(x);var w=document.createElementNS(t.globals.SVGNS,"title");w.textContent=x,y.node.appendChild(w),o+=n}return this.inversedYAxisTitleText(a),this.inversedYAxisBorder(a),a}},{key:"inversedYAxisBorder",value:function(e){var t=this.w,i=new X(this.ctx),a=t.config.xaxis.axisBorder;if(a.show){var s=0;t.config.chart.type==="bar"&&t.globals.isXNumeric&&(s-=15);var r=i.drawLine(t.globals.padHorizontal+s+a.offsetX,this.xAxisoffX,t.globals.gridWidth,this.xAxisoffX,a.color,0,a.height);this.elgrid&&this.elgrid.elGridBorders&&t.config.grid.show?this.elgrid.elGridBorders.add(r):e.add(r)}}},{key:"inversedYAxisTitleText",value:function(e){var t=this.w,i=new X(this.ctx);if(t.config.xaxis.title.text!==void 0){var a=i.group({class:"apexcharts-xaxis-title apexcharts-yaxis-title-inversed"}),s=i.drawText({x:t.globals.gridWidth/2+t.config.xaxis.title.offsetX,y:this.xAxisoffX+parseFloat(this.xaxisFontSize)+parseFloat(t.config.xaxis.title.style.fontSize)+t.config.xaxis.title.offsetY+20,text:t.config.xaxis.title.text,textAnchor:"middle",fontSize:t.config.xaxis.title.style.fontSize,fontFamily:t.config.xaxis.title.style.fontFamily,fontWeight:t.config.xaxis.title.style.fontWeight,foreColor:t.config.xaxis.title.style.color,cssClass:"apexcharts-xaxis-title-text "+t.config.xaxis.title.style.cssClass});a.add(s),e.add(a)}}},{key:"yAxisTitleRotate",value:function(e,t){var i=this.w,a=new X(this.ctx),s={width:0,height:0},r={width:0,height:0},n=i.globals.dom.baseEl.querySelector(" .apexcharts-yaxis[rel='".concat(e,"'] .apexcharts-yaxis-texts-g"));n!==null&&(s=n.getBoundingClientRect());var o=i.globals.dom.baseEl.querySelector(".apexcharts-yaxis[rel='".concat(e,"'] .apexcharts-yaxis-title text"));if(o!==null&&(r=o.getBoundingClientRect()),o!==null){var h=this.xPaddingForYAxisTitle(e,s,r,t);o.setAttribute("x",h.xPos-(t?10:0))}if(o!==null){var c=a.rotateAroundCenter(o);o.setAttribute("transform","rotate(".concat(t?-1*i.config.yaxis[e].title.rotate:i.config.yaxis[e].title.rotate," ").concat(c.x," ").concat(c.y,")"))}}},{key:"xPaddingForYAxisTitle",value:function(e,t,i,a){var s=this.w,r=0,n=0,o=10;return s.config.yaxis[e].title.text===void 0||e<0?{xPos:n,padd:0}:(a?(n=t.width+s.config.yaxis[e].title.offsetX+i.width/2+o/2,(r+=1)===0&&(n-=o/2)):(n=-1*t.width+s.config.yaxis[e].title.offsetX+o/2+i.width/2,s.globals.isBarHorizontal&&(o=25,n=-1*t.width-s.config.yaxis[e].title.offsetX-o)),{xPos:n,padd:o})}},{key:"setYAxisXPosition",value:function(e,t){var i=this.w,a=0,s=0,r=18,n=1;i.config.yaxis.length>1&&(this.multipleYs=!0),i.config.yaxis.map(function(o,h){var c=i.globals.ignoreYAxisIndexes.indexOf(h)>-1||!o.show||o.floating||e[h].width===0,d=e[h].width+t[h].width;o.opposite?i.globals.isBarHorizontal?(s=i.globals.gridWidth+i.globals.translateX-1,i.globals.translateYAxisX[h]=s-o.labels.offsetX):(s=i.globals.gridWidth+i.globals.translateX+n,c||(n=n+d+20),i.globals.translateYAxisX[h]=s-o.labels.offsetX+20):(a=i.globals.translateX-r,c||(r=r+d+20),i.globals.translateYAxisX[h]=a+o.labels.offsetX)})}},{key:"setYAxisTextAlignments",value:function(){var e=this.w,t=e.globals.dom.baseEl.getElementsByClassName("apexcharts-yaxis");(t=P.listToArray(t)).forEach(function(i,a){var s=e.config.yaxis[a];if(s&&!s.floating&&s.labels.align!==void 0){var r=e.globals.dom.baseEl.querySelector(".apexcharts-yaxis[rel='".concat(a,"'] .apexcharts-yaxis-texts-g")),n=e.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxis[rel='".concat(a,"'] .apexcharts-yaxis-label"));n=P.listToArray(n);var o=r.getBoundingClientRect();s.labels.align==="left"?(n.forEach(function(h,c){h.setAttribute("text-anchor","start")}),s.opposite||r.setAttribute("transform","translate(-".concat(o.width,", 0)"))):s.labels.align==="center"?(n.forEach(function(h,c){h.setAttribute("text-anchor","middle")}),r.setAttribute("transform","translate(".concat(o.width/2*(s.opposite?1:-1),", 0)"))):s.labels.align==="right"&&(n.forEach(function(h,c){h.setAttribute("text-anchor","end")}),s.opposite&&r.setAttribute("transform","translate(".concat(o.width,", 0)")))}})}}]),p}(),Oi=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w,this.documentEvent=P.bind(this.documentEvent,this)}return R(p,[{key:"addEventListener",value:function(e,t){var i=this.w;i.globals.events.hasOwnProperty(e)?i.globals.events[e].push(t):i.globals.events[e]=[t]}},{key:"removeEventListener",value:function(e,t){var i=this.w;if(i.globals.events.hasOwnProperty(e)){var a=i.globals.events[e].indexOf(t);a!==-1&&i.globals.events[e].splice(a,1)}}},{key:"fireEvent",value:function(e,t){var i=this.w;if(i.globals.events.hasOwnProperty(e)){t&&t.length||(t=[]);for(var a=i.globals.events[e],s=a.length,r=0;r0&&(t=this.w.config.chart.locales.concat(window.Apex.chart.locales));var i=t.filter(function(s){return s.name===e})[0];if(!i)throw new Error("Wrong locale name provided. Please make sure you set the correct locale name in options");var a=P.extend(Xt,i);this.w.globals.locale=a.options}}]),p}(),Hi=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"drawAxis",value:function(e,t){var i,a,s=this,r=this.w.globals,n=this.w.config,o=new Me(this.ctx,t),h=new lt(this.ctx,t);r.axisCharts&&e!=="radar"&&(r.isBarHorizontal?(a=h.drawYaxisInversed(0),i=o.drawXaxisInversed(0),r.dom.elGraphical.add(i),r.dom.elGraphical.add(a)):(i=o.drawXaxis(),r.dom.elGraphical.add(i),n.yaxis.map(function(c,d){if(r.ignoreYAxisIndexes.indexOf(d)===-1&&(a=h.drawYaxis(d),r.dom.Paper.add(a),s.w.config.grid.position==="back")){var g=r.dom.Paper.children()[1];g.remove(),r.dom.Paper.add(g)}})))}}]),p}(),nt=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"drawXCrosshairs",value:function(){var e=this.w,t=new X(this.ctx),i=new ie(this.ctx),a=e.config.xaxis.crosshairs.fill.gradient,s=e.config.xaxis.crosshairs.dropShadow,r=e.config.xaxis.crosshairs.fill.type,n=a.colorFrom,o=a.colorTo,h=a.opacityFrom,c=a.opacityTo,d=a.stops,g=s.enabled,f=s.left,x=s.top,b=s.blur,v=s.color,y=s.opacity,w=e.config.xaxis.crosshairs.fill.color;if(e.config.xaxis.crosshairs.show){r==="gradient"&&(w=t.drawGradient("vertical",n,o,h,c,null,d,null));var l=t.drawRect();e.config.xaxis.crosshairs.width===1&&(l=t.drawLine());var u=e.globals.gridHeight;(!P.isNumber(u)||u<0)&&(u=0);var m=e.config.xaxis.crosshairs.width;(!P.isNumber(m)||m<0)&&(m=0),l.attr({class:"apexcharts-xcrosshairs",x:0,y:0,y2:u,width:m,height:u,fill:w,filter:"none","fill-opacity":e.config.xaxis.crosshairs.opacity,stroke:e.config.xaxis.crosshairs.stroke.color,"stroke-width":e.config.xaxis.crosshairs.stroke.width,"stroke-dasharray":e.config.xaxis.crosshairs.stroke.dashArray}),g&&(l=i.dropShadow(l,{left:f,top:x,blur:b,color:v,opacity:y})),e.globals.dom.elGraphical.add(l)}}},{key:"drawYCrosshairs",value:function(){var e=this.w,t=new X(this.ctx),i=e.config.yaxis[0].crosshairs,a=e.globals.barPadForNumericAxis;if(e.config.yaxis[0].crosshairs.show){var s=t.drawLine(-a,0,e.globals.gridWidth+a,0,i.stroke.color,i.stroke.dashArray,i.stroke.width);s.attr({class:"apexcharts-ycrosshairs"}),e.globals.dom.elGraphical.add(s)}var r=t.drawLine(-a,0,e.globals.gridWidth+a,0,i.stroke.color,0,0);r.attr({class:"apexcharts-ycrosshairs-hidden"}),e.globals.dom.elGraphical.add(r)}}]),p}(),Ni=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"checkResponsiveConfig",value:function(e){var t=this,i=this.w,a=i.config;if(a.responsive.length!==0){var s=a.responsive.slice();s.sort(function(h,c){return h.breakpoint>c.breakpoint?1:c.breakpoint>h.breakpoint?-1:0}).reverse();var r=new Pe({}),n=function(){var h=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},c=s[0].breakpoint,d=window.innerWidth>0?window.innerWidth:screen.width;if(d>c){var g=P.clone(i.globals.initialConfig);g.series=P.clone(i.config.series);var f=$.extendArrayProps(r,g,i);h=P.extend(f,h),h=P.extend(i.config,h),t.overrideResponsiveOptions(h)}else for(var x=0;x0&&typeof i.config.colors[0]=="function"&&(i.globals.colors=i.config.series.map(function(x,b){var v=i.config.colors[b];return v||(v=i.config.colors[0]),typeof v=="function"?(t.isColorFn=!0,v({value:i.globals.axisCharts?i.globals.series[b][0]?i.globals.series[b][0]:0:i.globals.series[b],seriesIndex:b,dataPointIndex:b,w:i})):v}))),i.globals.seriesColors.map(function(x,b){x&&(i.globals.colors[b]=x)}),i.config.theme.monochrome.enabled){var s=[],r=i.globals.series.length;(this.isBarDistributed||this.isHeatmapDistributed)&&(r=i.globals.series[0].length*i.globals.series.length);for(var n=i.config.theme.monochrome.color,o=1/(r/i.config.theme.monochrome.shadeIntensity),h=i.config.theme.monochrome.shadeTo,c=0,d=0;d2&&arguments[2]!==void 0?arguments[2]:null,a=this.w,s=t||a.globals.series.length;if(i===null&&(i=this.isBarDistributed||this.isHeatmapDistributed||a.config.chart.type==="heatmap"&&a.config.plotOptions.heatmap.colorScale.inverse),i&&a.globals.series.length&&(s=a.globals.series[a.globals.maxValsInArrayIndex].length*a.globals.series.length),e.lengthe.globals.svgWidth&&(this.dCtx.lgRect.width=e.globals.svgWidth/1.5),this.dCtx.lgRect}},{key:"getDatalabelsRect",value:function(){var e=this,t=this.w,i=[];t.config.series.forEach(function(o,h){o.data.forEach(function(c,d){var g;g=t.globals.series[h][d],a=t.config.dataLabels.formatter(g,{ctx:e.dCtx.ctx,seriesIndex:h,dataPointIndex:d,w:t}),i.push(a)})});var a=P.getLargestStringFromArr(i),s=new X(this.dCtx.ctx),r=t.config.dataLabels.style,n=s.getTextRects(a,parseInt(r.fontSize),r.fontFamily);return{width:1.05*n.width,height:n.height}}},{key:"getLargestStringFromMultiArr",value:function(e,t){var i=e;if(this.w.globals.isMultiLineX){var a=t.map(function(r,n){return Array.isArray(r)?r.length:1}),s=Math.max.apply(Math,te(a));i=t[a.indexOf(s)]}return i}}]),p}(),Vi=function(){function p(e){F(this,p),this.w=e.w,this.dCtx=e}return R(p,[{key:"getxAxisLabelsCoords",value:function(){var e,t=this.w,i=t.globals.labels.slice();if(t.config.xaxis.convertedCatToNumeric&&i.length===0&&(i=t.globals.categoryLabels),t.globals.timescaleLabels.length>0){var a=this.getxAxisTimeScaleLabelsCoords();e={width:a.width,height:a.height},t.globals.rotateXLabels=!1}else{this.dCtx.lgWidthForSideLegends=t.config.legend.position!=="left"&&t.config.legend.position!=="right"||t.config.legend.floating?0:this.dCtx.lgRect.width;var s=t.globals.xLabelFormatter,r=P.getLargestStringFromArr(i),n=this.dCtx.dimHelpers.getLargestStringFromMultiArr(r,i);t.globals.isBarHorizontal&&(n=r=t.globals.yAxisScale[0].result.reduce(function(x,b){return x.length>b.length?x:b},0));var o=new ze(this.dCtx.ctx),h=r;r=o.xLabelFormat(s,r,h,{i:void 0,dateFormatter:new K(this.dCtx.ctx).formatDate,w:t}),n=o.xLabelFormat(s,n,h,{i:void 0,dateFormatter:new K(this.dCtx.ctx).formatDate,w:t}),(t.config.xaxis.convertedCatToNumeric&&r===void 0||String(r).trim()==="")&&(n=r="1");var c=new X(this.dCtx.ctx),d=c.getTextRects(r,t.config.xaxis.labels.style.fontSize),g=d;if(r!==n&&(g=c.getTextRects(n,t.config.xaxis.labels.style.fontSize)),(e={width:d.width>=g.width?d.width:g.width,height:d.height>=g.height?d.height:g.height}).width*i.length>t.globals.svgWidth-this.dCtx.lgWidthForSideLegends-this.dCtx.yAxisWidth-this.dCtx.gridPad.left-this.dCtx.gridPad.right&&t.config.xaxis.labels.rotate!==0||t.config.xaxis.labels.rotateAlways){if(!t.globals.isBarHorizontal){t.globals.rotateXLabels=!0;var f=function(x){return c.getTextRects(x,t.config.xaxis.labels.style.fontSize,t.config.xaxis.labels.style.fontFamily,"rotate(".concat(t.config.xaxis.labels.rotate," 0 0)"),!1)};d=f(r),r!==n&&(g=f(n)),e.height=(d.height>g.height?d.height:g.height)/1.5,e.width=d.width>g.width?d.width:g.width}}else t.globals.rotateXLabels=!1}return t.config.xaxis.labels.show||(e={width:0,height:0}),{width:e.width,height:e.height}}},{key:"getxAxisGroupLabelsCoords",value:function(){var e,t=this.w;if(!t.globals.hasXaxisGroups)return{width:0,height:0};var i,a=((e=t.config.xaxis.group.style)===null||e===void 0?void 0:e.fontSize)||t.config.xaxis.labels.style.fontSize,s=t.globals.groups.map(function(d){return d.title}),r=P.getLargestStringFromArr(s),n=this.dCtx.dimHelpers.getLargestStringFromMultiArr(r,s),o=new X(this.dCtx.ctx),h=o.getTextRects(r,a),c=h;return r!==n&&(c=o.getTextRects(n,a)),i={width:h.width>=c.width?h.width:c.width,height:h.height>=c.height?h.height:c.height},t.config.xaxis.labels.show||(i={width:0,height:0}),{width:i.width,height:i.height}}},{key:"getxAxisTitleCoords",value:function(){var e=this.w,t=0,i=0;if(e.config.xaxis.title.text!==void 0){var a=new X(this.dCtx.ctx).getTextRects(e.config.xaxis.title.text,e.config.xaxis.title.style.fontSize);t=a.width,i=a.height}return{width:t,height:i}}},{key:"getxAxisTimeScaleLabelsCoords",value:function(){var e,t=this.w;this.dCtx.timescaleLabels=t.globals.timescaleLabels.slice();var i=this.dCtx.timescaleLabels.map(function(s){return s.value}),a=i.reduce(function(s,r){return s===void 0?(console.error("You have possibly supplied invalid Date format. Please supply a valid JavaScript Date"),0):s.length>r.length?s:r},0);return 1.05*(e=new X(this.dCtx.ctx).getTextRects(a,t.config.xaxis.labels.style.fontSize)).width*i.length>t.globals.gridWidth&&t.config.xaxis.labels.rotate!==0&&(t.globals.overlappingXLabels=!0),e}},{key:"additionalPaddingXLabels",value:function(e){var t=this,i=this.w,a=i.globals,s=i.config,r=s.xaxis.type,n=e.width;a.skipLastTimelinelabel=!1,a.skipFirstTimelinelabel=!1;var o=i.config.yaxis[0].opposite&&i.globals.isBarHorizontal,h=function(c,d){s.yaxis.length>1&&function(g){return a.collapsedSeriesIndices.indexOf(g)!==-1}(d)||function(g){if(t.dCtx.timescaleLabels&&t.dCtx.timescaleLabels.length){var f=t.dCtx.timescaleLabels[0],x=t.dCtx.timescaleLabels[t.dCtx.timescaleLabels.length-1].position+n/1.75-t.dCtx.yAxisWidthRight,b=f.position-n/1.75+t.dCtx.yAxisWidthLeft,v=i.config.legend.position==="right"&&t.dCtx.lgRect.width>0?t.dCtx.lgRect.width:0;x>a.svgWidth-a.translateX-v&&(a.skipLastTimelinelabel=!0),b<-(g.show&&!g.floating||s.chart.type!=="bar"&&s.chart.type!=="candlestick"&&s.chart.type!=="rangeBar"&&s.chart.type!=="boxPlot"?10:n/1.75)&&(a.skipFirstTimelinelabel=!0)}else r==="datetime"?t.dCtx.gridPad.right((k=String(d(m,o)))===null||k===void 0?void 0:k.length)?u:m},g),x=f=d(f,o);if(f!==void 0&&f.length!==0||(f=h.niceMax),t.globals.isBarHorizontal){a=0;var b=t.globals.labels.slice();f=P.getLargestStringFromArr(b),f=d(f,{seriesIndex:n,dataPointIndex:-1,w:t}),x=e.dCtx.dimHelpers.getLargestStringFromMultiArr(f,b)}var v=new X(e.dCtx.ctx),y="rotate(".concat(r.labels.rotate," 0 0)"),w=v.getTextRects(f,r.labels.style.fontSize,r.labels.style.fontFamily,y,!1),l=w;f!==x&&(l=v.getTextRects(x,r.labels.style.fontSize,r.labels.style.fontFamily,y,!1)),i.push({width:(c>l.width||c>w.width?c:l.width>w.width?l.width:w.width)+a,height:l.height>w.height?l.height:w.height})}else i.push({width:0,height:0})}),i}},{key:"getyAxisTitleCoords",value:function(){var e=this,t=this.w,i=[];return t.config.yaxis.map(function(a,s){if(a.show&&a.title.text!==void 0){var r=new X(e.dCtx.ctx),n="rotate(".concat(a.title.rotate," 0 0)"),o=r.getTextRects(a.title.text,a.title.style.fontSize,a.title.style.fontFamily,n,!1);i.push({width:o.width,height:o.height})}else i.push({width:0,height:0})}),i}},{key:"getTotalYAxisWidth",value:function(){var e=this.w,t=0,i=0,a=0,s=e.globals.yAxisScale.length>1?10:0,r=new ge(this.dCtx.ctx),n=function(o,h){var c=e.config.yaxis[h].floating,d=0;o.width>0&&!c?(d=o.width+s,function(g){return e.globals.ignoreYAxisIndexes.indexOf(g)>-1}(h)&&(d=d-o.width-s)):d=c||r.isYAxisHidden(h)?0:5,e.config.yaxis[h].opposite?a+=d:i+=d,t+=d};return e.globals.yLabelsCoords.map(function(o,h){n(o,h)}),e.globals.yTitleCoords.map(function(o,h){n(o,h)}),e.globals.isBarHorizontal&&!e.config.yaxis[0].floating&&(t=e.globals.yLabelsCoords[0].width+e.globals.yTitleCoords[0].width+15),this.dCtx.yAxisWidthLeft=i,this.dCtx.yAxisWidthRight=a,t}}]),p}(),ji=function(){function p(e){F(this,p),this.w=e.w,this.dCtx=e}return R(p,[{key:"gridPadForColumnsInNumericAxis",value:function(e){var t=this.w,i=t.config,a=t.globals;if(a.noData||a.collapsedSeries.length+a.ancillaryCollapsedSeries.length===i.series.length)return 0;var s=function(f){return f==="bar"||f==="rangeBar"||f==="candlestick"||f==="boxPlot"},r=i.chart.type,n=0,o=s(r)?i.series.length:1;a.comboBarCount>0&&(o=a.comboBarCount),a.collapsedSeries.forEach(function(f){s(f.type)&&(o-=1)}),i.chart.stacked&&(o=1);var h=s(r)||a.comboBarCount>0,c=Math.abs(a.initialMaxX-a.initialMinX);if(h&&a.isXNumeric&&!a.isBarHorizontal&&o>0&&c!==0){var d,g;c<=3&&(c=a.dataPoints),d=c/e,a.minXDiff&&a.minXDiff/d>0&&(g=a.minXDiff/d),g>e/2&&(g/=2),(n=g*parseInt(i.plotOptions.bar.columnWidth,10)/100)<1&&(n=1),a.barPadForNumericAxis=n}return n}},{key:"gridPadFortitleSubtitle",value:function(){var e=this,t=this.w,i=t.globals,a=this.dCtx.isSparkline||!t.globals.axisCharts?0:10;["title","subtitle"].forEach(function(n){t.config[n].text!==void 0?a+=t.config[n].margin:a+=e.dCtx.isSparkline||!t.globals.axisCharts?0:5}),!t.config.legend.show||t.config.legend.position!=="bottom"||t.config.legend.floating||t.globals.axisCharts||(a+=10);var s=this.dCtx.dimHelpers.getTitleSubtitleCoords("title"),r=this.dCtx.dimHelpers.getTitleSubtitleCoords("subtitle");i.gridHeight=i.gridHeight-s.height-r.height-a,i.translateY=i.translateY+s.height+r.height+a}},{key:"setGridXPosForDualYAxis",value:function(e,t){var i=this.w,a=new ge(this.dCtx.ctx);i.config.yaxis.map(function(s,r){i.globals.ignoreYAxisIndexes.indexOf(r)!==-1||s.floating||a.isYAxisHidden(r)||(s.opposite&&(i.globals.translateX=i.globals.translateX-(t[r].width+e[r].width)-parseInt(i.config.yaxis[r].labels.style.fontSize,10)/1.2-12),i.globals.translateX<2&&(i.globals.translateX=2))})}}]),p}(),Ne=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w,this.lgRect={},this.yAxisWidth=0,this.yAxisWidthLeft=0,this.yAxisWidthRight=0,this.xAxisHeight=0,this.isSparkline=this.w.config.chart.sparkline.enabled,this.dimHelpers=new Gi(this),this.dimYAxis=new _i(this),this.dimXAxis=new Vi(this),this.dimGrid=new ji(this),this.lgWidthForSideLegends=0,this.gridPad=this.w.config.grid.padding,this.xPadRight=0,this.xPadLeft=0}return R(p,[{key:"plotCoords",value:function(){var e=this,t=this.w,i=t.globals;this.lgRect=this.dimHelpers.getLegendsRect(),this.datalabelsCoords={width:0,height:0};var a=Array.isArray(t.config.stroke.width)?Math.max.apply(Math,te(t.config.stroke.width)):t.config.stroke.width;this.isSparkline&&((t.config.markers.discrete.length>0||t.config.markers.size>0)&&Object.entries(this.gridPad).forEach(function(r){var n=It(r,2),o=n[0],h=n[1];e.gridPad[o]=Math.max(h,e.w.globals.markers.largestSize/1.5)}),this.gridPad.top=Math.max(a/2,this.gridPad.top),this.gridPad.bottom=Math.max(a/2,this.gridPad.bottom)),i.axisCharts?this.setDimensionsForAxisCharts():this.setDimensionsForNonAxisCharts(),this.dimGrid.gridPadFortitleSubtitle(),i.gridHeight=i.gridHeight-this.gridPad.top-this.gridPad.bottom,i.gridWidth=i.gridWidth-this.gridPad.left-this.gridPad.right-this.xPadRight-this.xPadLeft;var s=this.dimGrid.gridPadForColumnsInNumericAxis(i.gridWidth);i.gridWidth=i.gridWidth-2*s,i.translateX=i.translateX+this.gridPad.left+this.xPadLeft+(s>0?s:0),i.translateY=i.translateY+this.gridPad.top}},{key:"setDimensionsForAxisCharts",value:function(){var e=this,t=this.w,i=t.globals,a=this.dimYAxis.getyAxisLabelsCoords(),s=this.dimYAxis.getyAxisTitleCoords();i.isSlopeChart&&(this.datalabelsCoords=this.dimHelpers.getDatalabelsRect()),t.globals.yLabelsCoords=[],t.globals.yTitleCoords=[],t.config.yaxis.map(function(f,x){t.globals.yLabelsCoords.push({width:a[x].width,index:x}),t.globals.yTitleCoords.push({width:s[x].width,index:x})}),this.yAxisWidth=this.dimYAxis.getTotalYAxisWidth();var r=this.dimXAxis.getxAxisLabelsCoords(),n=this.dimXAxis.getxAxisGroupLabelsCoords(),o=this.dimXAxis.getxAxisTitleCoords();this.conditionalChecksForAxisCoords(r,o,n),i.translateXAxisY=t.globals.rotateXLabels?this.xAxisHeight/8:-4,i.translateXAxisX=t.globals.rotateXLabels&&t.globals.isXNumeric&&t.config.xaxis.labels.rotate<=-45?-this.xAxisWidth/4:0,t.globals.isBarHorizontal&&(i.rotateXLabels=!1,i.translateXAxisY=parseInt(t.config.xaxis.labels.style.fontSize,10)/1.5*-1),i.translateXAxisY=i.translateXAxisY+t.config.xaxis.labels.offsetY,i.translateXAxisX=i.translateXAxisX+t.config.xaxis.labels.offsetX;var h=this.yAxisWidth,c=this.xAxisHeight;i.xAxisLabelsHeight=this.xAxisHeight-o.height,i.xAxisGroupLabelsHeight=i.xAxisLabelsHeight-r.height,i.xAxisLabelsWidth=this.xAxisWidth,i.xAxisHeight=this.xAxisHeight;var d=10;(t.config.chart.type==="radar"||this.isSparkline)&&(h=0,c=i.goldenPadding),this.isSparkline&&(this.lgRect={height:0,width:0}),(this.isSparkline||t.config.chart.type==="treemap")&&(h=0,c=0,d=0),this.isSparkline||t.config.chart.type==="treemap"||this.dimXAxis.additionalPaddingXLabels(r);var g=function(){i.translateX=h+e.datalabelsCoords.width,i.gridHeight=i.svgHeight-e.lgRect.height-c-(e.isSparkline||t.config.chart.type==="treemap"?0:t.globals.rotateXLabels?10:15),i.gridWidth=i.svgWidth-h-2*e.datalabelsCoords.width};switch(t.config.xaxis.position==="top"&&(d=i.xAxisHeight-t.config.xaxis.axisTicks.height-5),t.config.legend.position){case"bottom":i.translateY=d,g();break;case"top":i.translateY=this.lgRect.height+d,g();break;case"left":i.translateY=d,i.translateX=this.lgRect.width+h+this.datalabelsCoords.width,i.gridHeight=i.svgHeight-c-12,i.gridWidth=i.svgWidth-this.lgRect.width-h-2*this.datalabelsCoords.width;break;case"right":i.translateY=d,i.translateX=h+this.datalabelsCoords.width,i.gridHeight=i.svgHeight-c-12,i.gridWidth=i.svgWidth-this.lgRect.width-h-2*this.datalabelsCoords.width-5;break;default:throw new Error("Legend position not supported")}this.dimGrid.setGridXPosForDualYAxis(s,a),new lt(this.ctx).setYAxisXPosition(a,s)}},{key:"setDimensionsForNonAxisCharts",value:function(){var e=this.w,t=e.globals,i=e.config,a=0;e.config.legend.show&&!e.config.legend.floating&&(a=20);var s=i.chart.type==="pie"||i.chart.type==="polarArea"||i.chart.type==="donut"?"pie":"radialBar",r=i.plotOptions[s].offsetY,n=i.plotOptions[s].offsetX;if(!i.legend.show||i.legend.floating){t.gridHeight=t.svgHeight-i.grid.padding.top-i.grid.padding.bottom;var o=t.dom.elWrap.getBoundingClientRect().width;return t.gridWidth=Math.min(o,t.gridHeight)-i.grid.padding.left-i.grid.padding.right,t.translateY=r,void(t.translateX=n+(t.svgWidth-t.gridWidth)/2)}switch(i.legend.position){case"bottom":t.gridHeight=t.svgHeight-this.lgRect.height-t.goldenPadding,t.gridWidth=t.svgWidth,t.translateY=r-10,t.translateX=n+(t.svgWidth-t.gridWidth)/2;break;case"top":t.gridHeight=t.svgHeight-this.lgRect.height-t.goldenPadding,t.gridWidth=t.svgWidth,t.translateY=this.lgRect.height+r+10,t.translateX=n+(t.svgWidth-t.gridWidth)/2;break;case"left":t.gridWidth=t.svgWidth-this.lgRect.width-a,t.gridHeight=i.chart.height!=="auto"?t.svgHeight:t.gridWidth,t.translateY=r,t.translateX=n+this.lgRect.width+a;break;case"right":t.gridWidth=t.svgWidth-this.lgRect.width-a-5,t.gridHeight=i.chart.height!=="auto"?t.svgHeight:t.gridWidth,t.translateY=r,t.translateX=n+10;break;default:throw new Error("Legend position not supported")}}},{key:"conditionalChecksForAxisCoords",value:function(e,t,i){var a=this.w,s=a.globals.hasXaxisGroups?2:1,r=i.height+e.height+t.height,n=a.globals.isMultiLineX?1.2:a.globals.LINE_HEIGHT_RATIO,o=a.globals.rotateXLabels?22:10,h=a.globals.rotateXLabels&&a.config.legend.position==="bottom"?10:0;this.xAxisHeight=r*n+s*o+h,this.xAxisWidth=e.width,this.xAxisHeight-t.height>a.config.xaxis.labels.maxHeight&&(this.xAxisHeight=a.config.xaxis.labels.maxHeight),a.config.xaxis.labels.minHeight&&this.xAxisHeightd&&(this.yAxisWidth=d)}}]),p}(),Ui=function(){function p(e){F(this,p),this.w=e.w,this.lgCtx=e}return R(p,[{key:"getLegendStyles",value:function(){var e,t,i,a=document.createElement("style");a.setAttribute("type","text/css");var s=((e=this.lgCtx.ctx)===null||e===void 0||(t=e.opts)===null||t===void 0||(i=t.chart)===null||i===void 0?void 0:i.nonce)||this.w.config.chart.nonce;s&&a.setAttribute("nonce",s);var r=document.createTextNode(` .apexcharts-legend { display: flex; overflow: auto; @@ -108,33 +74,22 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho } .apexcharts-inactive-legend { opacity: 0.45; - }`); return a.appendChild(r), a - } - }, { key: "getLegendDimensions", value: function () { var e = this.w.globals.dom.baseEl.querySelector(".apexcharts-legend"), t = e.offsetWidth; return { clwh: e.offsetHeight, clww: t } } }, { key: "appendToForeignObject", value: function () { this.w.globals.dom.elLegendForeign.appendChild(this.getLegendStyles()) } }, { key: "toggleDataSeries", value: function (e, t) { var i = this, a = this.w; if (a.globals.axisCharts || a.config.chart.type === "radialBar") { a.globals.resized = !0; var s = null, r = null; a.globals.risingSeries = [], a.globals.axisCharts ? (s = a.globals.dom.baseEl.querySelector(".apexcharts-series[data\\:realIndex='".concat(e, "']")), r = parseInt(s.getAttribute("data:realIndex"), 10)) : (s = a.globals.dom.baseEl.querySelector(".apexcharts-series[rel='".concat(e + 1, "']")), r = parseInt(s.getAttribute("rel"), 10) - 1), t ? [{ cs: a.globals.collapsedSeries, csi: a.globals.collapsedSeriesIndices }, { cs: a.globals.ancillaryCollapsedSeries, csi: a.globals.ancillaryCollapsedSeriesIndices }].forEach(function (c) { i.riseCollapsedSeries(c.cs, c.csi, r) }) : this.hideSeries({ seriesEl: s, realIndex: r }) } else { var n = a.globals.dom.Paper.select(" .apexcharts-series[rel='".concat(e + 1, "'] path")), o = a.config.chart.type; if (o === "pie" || o === "polarArea" || o === "donut") { var h = a.config.plotOptions.pie.donut.labels; new X(this.lgCtx.ctx).pathMouseDown(n.members[0], null), this.lgCtx.ctx.pie.printDataLabelsInner(n.members[0].node, h) } n.fire("click") } } }, { key: "getSeriesAfterCollapsing", value: function (e) { var t = e.realIndex, i = this.w, a = i.globals, s = P.clone(i.config.series); if (a.axisCharts) { var r = i.config.yaxis[a.seriesYAxisReverseMap[t]], n = { index: t, data: s[t].data.slice(), type: s[t].type || i.config.chart.type }; if (r && r.show && r.showAlways) a.ancillaryCollapsedSeriesIndices.indexOf(t) < 0 && (a.ancillaryCollapsedSeries.push(n), a.ancillaryCollapsedSeriesIndices.push(t)); else if (a.collapsedSeriesIndices.indexOf(t) < 0) { a.collapsedSeries.push(n), a.collapsedSeriesIndices.push(t); var o = a.risingSeries.indexOf(t); a.risingSeries.splice(o, 1) } } else a.collapsedSeries.push({ index: t, data: s[t] }), a.collapsedSeriesIndices.push(t); return a.allSeriesCollapsed = a.collapsedSeries.length + a.ancillaryCollapsedSeries.length === i.config.series.length, this._getSeriesBasedOnCollapsedState(s) } }, { key: "hideSeries", value: function (e) { for (var t = e.seriesEl, i = e.realIndex, a = this.w, s = this.getSeriesAfterCollapsing({ realIndex: i }), r = t.childNodes, n = 0; n < r.length; n++)r[n].classList.contains("apexcharts-series-markers-wrap") && (r[n].classList.contains("apexcharts-hide") ? r[n].classList.remove("apexcharts-hide") : r[n].classList.add("apexcharts-hide")); this.lgCtx.ctx.updateHelpers._updateSeries(s, a.config.chart.animations.dynamicAnimation.enabled) } }, { key: "riseCollapsedSeries", value: function (e, t, i) { var a = this.w, s = P.clone(a.config.series); if (e.length > 0) { for (var r = 0; r < e.length; r++)e[r].index === i && (a.globals.axisCharts ? s[i].data = e[r].data.slice() : s[i] = e[r].data, s[i].hidden = !1, e.splice(r, 1), t.splice(r, 1), a.globals.risingSeries.push(i)); s = this._getSeriesBasedOnCollapsedState(s), this.lgCtx.ctx.updateHelpers._updateSeries(s, a.config.chart.animations.dynamicAnimation.enabled) } } }, { key: "_getSeriesBasedOnCollapsedState", value: function (e) { var t = this.w, i = 0; return t.globals.axisCharts ? e.forEach(function (a, s) { t.globals.collapsedSeriesIndices.indexOf(s) < 0 && t.globals.ancillaryCollapsedSeriesIndices.indexOf(s) < 0 || (e[s].data = [], i++) }) : e.forEach(function (a, s) { !t.globals.collapsedSeriesIndices.indexOf(s) < 0 && (e[s] = 0, i++) }), t.globals.allSeriesCollapsed = i === e.length, e } }]), p - }(), Dt = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w, this.onLegendClick = this.onLegendClick.bind(this), this.onLegendHovered = this.onLegendHovered.bind(this), this.isBarsDistributed = this.w.config.chart.type === "bar" && this.w.config.plotOptions.bar.distributed && this.w.config.series.length === 1, this.legendHelpers = new Ui(this) } return R(p, [{ key: "init", value: function () { var e = this.w, t = e.globals, i = e.config; if ((i.legend.showForSingleSeries && t.series.length === 1 || this.isBarsDistributed || t.series.length > 1 || !t.axisCharts) && i.legend.show) { for (; t.dom.elLegendWrap.firstChild;)t.dom.elLegendWrap.removeChild(t.dom.elLegendWrap.firstChild); this.drawLegends(), this.legendHelpers.appendToForeignObject(), i.legend.position === "bottom" || i.legend.position === "top" ? this.legendAlignHorizontal() : i.legend.position !== "right" && i.legend.position !== "left" || this.legendAlignVertical() } } }, { key: "createLegendMarker", value: function (e) { var t = e.i, i = e.fillcolor, a = this.w, s = document.createElement("span"); s.classList.add("apexcharts-legend-marker"); var r = a.config.legend.markers.shape || a.config.markers.shape, n = r; Array.isArray(r) && (n = r[t]); var o = Array.isArray(a.config.legend.markers.size) ? parseFloat(a.config.legend.markers.size[t]) : parseFloat(a.config.legend.markers.size), h = Array.isArray(a.config.legend.markers.offsetX) ? parseFloat(a.config.legend.markers.offsetX[t]) : parseFloat(a.config.legend.markers.offsetX), c = Array.isArray(a.config.legend.markers.offsetY) ? parseFloat(a.config.legend.markers.offsetY[t]) : parseFloat(a.config.legend.markers.offsetY), d = Array.isArray(a.config.legend.markers.strokeWidth) ? parseFloat(a.config.legend.markers.strokeWidth[t]) : parseFloat(a.config.legend.markers.strokeWidth), g = s.style; if (g.height = 2 * (o + d) + "px", g.width = 2 * (o + d) + "px", g.left = h + "px", g.top = c + "px", a.config.legend.markers.customHTML) g.background = "transparent", g.color = i[t], Array.isArray(a.config.legend.markers.customHTML) ? a.config.legend.markers.customHTML[t] && (s.innerHTML = a.config.legend.markers.customHTML[t]()) : s.innerHTML = a.config.legend.markers.customHTML(); else { var f = new ye(this.ctx).getMarkerConfig({ cssClass: "apexcharts-legend-marker apexcharts-marker apexcharts-marker-".concat(n), seriesIndex: t, strokeWidth: d, size: o }), x = SVG(s).size("100%", "100%"), b = new X(this.ctx).drawMarker(0, 0, Y(Y({}, f), {}, { pointFillColor: Array.isArray(i) ? i[t] : f.pointFillColor, shape: n })); SVG.select(".apexcharts-legend-marker.apexcharts-marker").members.forEach(function (v) { v.node.classList.contains("apexcharts-marker-triangle") ? v.node.style.transform = "translate(50%, 45%)" : v.node.style.transform = "translate(50%, 50%)" }), x.add(b) } return s } }, { key: "drawLegends", value: function () { var e = this, t = this.w, i = t.config.legend.fontFamily, a = t.globals.seriesNames, s = t.config.legend.markers.fillColors ? t.config.legend.markers.fillColors.slice() : t.globals.colors.slice(); if (t.config.chart.type === "heatmap") { var r = t.config.plotOptions.heatmap.colorScale.ranges; a = r.map(function (m) { return m.name ? m.name : m.from + " - " + m.to }), s = r.map(function (m) { return m.color }) } else this.isBarsDistributed && (a = t.globals.labels.slice()); t.config.legend.customLegendItems.length && (a = t.config.legend.customLegendItems); for (var n = t.globals.legendFormatter, o = t.config.legend.inverseOrder, h = o ? a.length - 1 : 0; o ? h >= 0 : h <= a.length - 1; o ? h-- : h++) { var c, d = n(a[h], { seriesIndex: h, w: t }), g = !1, f = !1; if (t.globals.collapsedSeries.length > 0) for (var x = 0; x < t.globals.collapsedSeries.length; x++)t.globals.collapsedSeries[x].index === h && (g = !0); if (t.globals.ancillaryCollapsedSeriesIndices.length > 0) for (var b = 0; b < t.globals.ancillaryCollapsedSeriesIndices.length; b++)t.globals.ancillaryCollapsedSeriesIndices[b] === h && (f = !0); var v = this.createLegendMarker({ i: h, fillcolor: s }); X.setAttrs(v, { rel: h + 1, "data:collapsed": g || f }), (g || f) && v.classList.add("apexcharts-inactive-legend"); var y = document.createElement("div"), w = document.createElement("span"); w.classList.add("apexcharts-legend-text"), w.innerHTML = Array.isArray(d) ? d.join(" ") : d; var l = t.config.legend.labels.useSeriesColors ? t.globals.colors[h] : Array.isArray(t.config.legend.labels.colors) ? (c = t.config.legend.labels.colors) === null || c === void 0 ? void 0 : c[h] : t.config.legend.labels.colors; l || (l = t.config.chart.foreColor), w.style.color = l, w.style.fontSize = parseFloat(t.config.legend.fontSize) + "px", w.style.fontWeight = t.config.legend.fontWeight, w.style.fontFamily = i || t.config.chart.fontFamily, X.setAttrs(w, { rel: h + 1, i: h, "data:default-text": encodeURIComponent(d), "data:collapsed": g || f }), y.appendChild(v), y.appendChild(w); var u = new $(this.ctx); t.config.legend.showForZeroSeries || u.getSeriesTotalByIndex(h) === 0 && u.seriesHaveSameValues(h) && !u.isSeriesNull(h) && t.globals.collapsedSeriesIndices.indexOf(h) === -1 && t.globals.ancillaryCollapsedSeriesIndices.indexOf(h) === -1 && y.classList.add("apexcharts-hidden-zero-series"), t.config.legend.showForNullSeries || u.isSeriesNull(h) && t.globals.collapsedSeriesIndices.indexOf(h) === -1 && t.globals.ancillaryCollapsedSeriesIndices.indexOf(h) === -1 && y.classList.add("apexcharts-hidden-null-series"), t.globals.dom.elLegendWrap.appendChild(y), t.globals.dom.elLegendWrap.classList.add("apexcharts-align-".concat(t.config.legend.horizontalAlign)), t.globals.dom.elLegendWrap.classList.add("apx-legend-position-" + t.config.legend.position), y.classList.add("apexcharts-legend-series"), y.style.margin = "".concat(t.config.legend.itemMargin.vertical, "px ").concat(t.config.legend.itemMargin.horizontal, "px"), t.globals.dom.elLegendWrap.style.width = t.config.legend.width ? t.config.legend.width + "px" : "", t.globals.dom.elLegendWrap.style.height = t.config.legend.height ? t.config.legend.height + "px" : "", X.setAttrs(y, { rel: h + 1, seriesName: P.escapeString(a[h]), "data:collapsed": g || f }), (g || f) && y.classList.add("apexcharts-inactive-legend"), t.config.legend.onItemClick.toggleDataSeries || y.classList.add("apexcharts-no-click") } t.globals.dom.elWrap.addEventListener("click", e.onLegendClick, !0), t.config.legend.onItemHover.highlightDataSeries && t.config.legend.customLegendItems.length === 0 && (t.globals.dom.elWrap.addEventListener("mousemove", e.onLegendHovered, !0), t.globals.dom.elWrap.addEventListener("mouseout", e.onLegendHovered, !0)) } }, { key: "setLegendWrapXY", value: function (e, t) { var i = this.w, a = i.globals.dom.elLegendWrap, s = a.getBoundingClientRect(), r = 0, n = 0; if (i.config.legend.position === "bottom") n += i.globals.svgHeight - s.height / 2; else if (i.config.legend.position === "top") { var o = new Ne(this.ctx), h = o.dimHelpers.getTitleSubtitleCoords("title").height, c = o.dimHelpers.getTitleSubtitleCoords("subtitle").height; n = n + (h > 0 ? h - 10 : 0) + (c > 0 ? c - 10 : 0) } a.style.position = "absolute", r = r + e + i.config.legend.offsetX, n = n + t + i.config.legend.offsetY, a.style.left = r + "px", a.style.top = n + "px", i.config.legend.position === "bottom" ? (a.style.top = "auto", a.style.bottom = 5 - i.config.legend.offsetY + "px") : i.config.legend.position === "right" && (a.style.left = "auto", a.style.right = 25 + i.config.legend.offsetX + "px"), ["width", "height"].forEach(function (d) { a.style[d] && (a.style[d] = parseInt(i.config.legend[d], 10) + "px") }) } }, { key: "legendAlignHorizontal", value: function () { var e = this.w; e.globals.dom.elLegendWrap.style.right = 0; var t = this.legendHelpers.getLegendDimensions(), i = new Ne(this.ctx), a = i.dimHelpers.getTitleSubtitleCoords("title"), s = i.dimHelpers.getTitleSubtitleCoords("subtitle"), r = 0; e.config.legend.position === "bottom" ? r = -t.clwh / 1.8 : e.config.legend.position === "top" && (r = a.height + s.height + e.config.title.margin + e.config.subtitle.margin - 10), this.setLegendWrapXY(20, r) } }, { key: "legendAlignVertical", value: function () { var e = this.w, t = this.legendHelpers.getLegendDimensions(), i = 0; e.config.legend.position === "left" && (i = 20), e.config.legend.position === "right" && (i = e.globals.svgWidth - t.clww - 10), this.setLegendWrapXY(i, 20) } }, { key: "onLegendHovered", value: function (e) { var t = this.w, i = e.target.classList.contains("apexcharts-legend-series") || e.target.classList.contains("apexcharts-legend-text") || e.target.classList.contains("apexcharts-legend-marker"); if (t.config.chart.type === "heatmap" || this.isBarsDistributed) { if (i) { var a = parseInt(e.target.getAttribute("rel"), 10) - 1; this.ctx.events.fireEvent("legendHover", [this.ctx, a, this.w]), new re(this.ctx).highlightRangeInSeries(e, e.target) } } else !e.target.classList.contains("apexcharts-inactive-legend") && i && new re(this.ctx).toggleSeriesOnHover(e, e.target) } }, { key: "onLegendClick", value: function (e) { var t = this.w; if (!t.config.legend.customLegendItems.length && (e.target.classList.contains("apexcharts-legend-series") || e.target.classList.contains("apexcharts-legend-text") || e.target.classList.contains("apexcharts-legend-marker"))) { var i = parseInt(e.target.getAttribute("rel"), 10) - 1, a = e.target.getAttribute("data:collapsed") === "true", s = this.w.config.chart.events.legendClick; typeof s == "function" && s(this.ctx, i, this.w), this.ctx.events.fireEvent("legendClick", [this.ctx, i, this.w]); var r = this.w.config.legend.markers.onClick; typeof r == "function" && e.target.classList.contains("apexcharts-legend-marker") && (r(this.ctx, i, this.w), this.ctx.events.fireEvent("legendMarkerClick", [this.ctx, i, this.w])), t.config.chart.type !== "treemap" && t.config.chart.type !== "heatmap" && !this.isBarsDistributed && t.config.legend.onItemClick.toggleDataSeries && this.legendHelpers.toggleDataSeries(i, a) } } }]), p }(), Ht = function () { - function p(e) { F(this, p), this.ctx = e, this.w = e.w; var t = this.w; this.ev = this.w.config.chart.events, this.selectedClass = "apexcharts-selected", this.localeValues = this.w.globals.locale.toolbar, this.minX = t.globals.minX, this.maxX = t.globals.maxX } return R(p, [{ - key: "createToolbar", value: function () { - var e = this, t = this.w, i = function () { return document.createElement("div") }, a = i(); if (a.setAttribute("class", "apexcharts-toolbar"), a.style.top = t.config.chart.toolbar.offsetY + "px", a.style.right = 3 - t.config.chart.toolbar.offsetX + "px", t.globals.dom.elWrap.appendChild(a), this.elZoom = i(), this.elZoomIn = i(), this.elZoomOut = i(), this.elPan = i(), this.elSelection = i(), this.elZoomReset = i(), this.elMenuIcon = i(), this.elMenu = i(), this.elCustomIcons = [], this.t = t.config.chart.toolbar.tools, Array.isArray(this.t.customIcons)) for (var s = 0; s < this.t.customIcons.length; s++)this.elCustomIcons.push(i()); var r = [], n = function (d, g, f) { var x = d.toLowerCase(); e.t[x] && t.config.chart.zoom.enabled && r.push({ el: g, icon: typeof e.t[x] == "string" ? e.t[x] : f, title: e.localeValues[d], class: "apexcharts-".concat(x, "-icon") }) }; n("zoomIn", this.elZoomIn, ` + }`);return a.appendChild(r),a}},{key:"getLegendDimensions",value:function(){var e=this.w.globals.dom.baseEl.querySelector(".apexcharts-legend"),t=e.offsetWidth;return{clwh:e.offsetHeight,clww:t}}},{key:"appendToForeignObject",value:function(){this.w.globals.dom.elLegendForeign.appendChild(this.getLegendStyles())}},{key:"toggleDataSeries",value:function(e,t){var i=this,a=this.w;if(a.globals.axisCharts||a.config.chart.type==="radialBar"){a.globals.resized=!0;var s=null,r=null;a.globals.risingSeries=[],a.globals.axisCharts?(s=a.globals.dom.baseEl.querySelector(".apexcharts-series[data\\:realIndex='".concat(e,"']")),r=parseInt(s.getAttribute("data:realIndex"),10)):(s=a.globals.dom.baseEl.querySelector(".apexcharts-series[rel='".concat(e+1,"']")),r=parseInt(s.getAttribute("rel"),10)-1),t?[{cs:a.globals.collapsedSeries,csi:a.globals.collapsedSeriesIndices},{cs:a.globals.ancillaryCollapsedSeries,csi:a.globals.ancillaryCollapsedSeriesIndices}].forEach(function(c){i.riseCollapsedSeries(c.cs,c.csi,r)}):this.hideSeries({seriesEl:s,realIndex:r})}else{var n=a.globals.dom.Paper.select(" .apexcharts-series[rel='".concat(e+1,"'] path")),o=a.config.chart.type;if(o==="pie"||o==="polarArea"||o==="donut"){var h=a.config.plotOptions.pie.donut.labels;new X(this.lgCtx.ctx).pathMouseDown(n.members[0],null),this.lgCtx.ctx.pie.printDataLabelsInner(n.members[0].node,h)}n.fire("click")}}},{key:"getSeriesAfterCollapsing",value:function(e){var t=e.realIndex,i=this.w,a=i.globals,s=P.clone(i.config.series);if(a.axisCharts){var r=i.config.yaxis[a.seriesYAxisReverseMap[t]],n={index:t,data:s[t].data.slice(),type:s[t].type||i.config.chart.type};if(r&&r.show&&r.showAlways)a.ancillaryCollapsedSeriesIndices.indexOf(t)<0&&(a.ancillaryCollapsedSeries.push(n),a.ancillaryCollapsedSeriesIndices.push(t));else if(a.collapsedSeriesIndices.indexOf(t)<0){a.collapsedSeries.push(n),a.collapsedSeriesIndices.push(t);var o=a.risingSeries.indexOf(t);a.risingSeries.splice(o,1)}}else a.collapsedSeries.push({index:t,data:s[t]}),a.collapsedSeriesIndices.push(t);return a.allSeriesCollapsed=a.collapsedSeries.length+a.ancillaryCollapsedSeries.length===i.config.series.length,this._getSeriesBasedOnCollapsedState(s)}},{key:"hideSeries",value:function(e){for(var t=e.seriesEl,i=e.realIndex,a=this.w,s=this.getSeriesAfterCollapsing({realIndex:i}),r=t.childNodes,n=0;n0){for(var r=0;r1||!t.axisCharts)&&i.legend.show){for(;t.dom.elLegendWrap.firstChild;)t.dom.elLegendWrap.removeChild(t.dom.elLegendWrap.firstChild);this.drawLegends(),this.legendHelpers.appendToForeignObject(),i.legend.position==="bottom"||i.legend.position==="top"?this.legendAlignHorizontal():i.legend.position!=="right"&&i.legend.position!=="left"||this.legendAlignVertical()}}},{key:"createLegendMarker",value:function(e){var t=e.i,i=e.fillcolor,a=this.w,s=document.createElement("span");s.classList.add("apexcharts-legend-marker");var r=a.config.legend.markers.shape||a.config.markers.shape,n=r;Array.isArray(r)&&(n=r[t]);var o=Array.isArray(a.config.legend.markers.size)?parseFloat(a.config.legend.markers.size[t]):parseFloat(a.config.legend.markers.size),h=Array.isArray(a.config.legend.markers.offsetX)?parseFloat(a.config.legend.markers.offsetX[t]):parseFloat(a.config.legend.markers.offsetX),c=Array.isArray(a.config.legend.markers.offsetY)?parseFloat(a.config.legend.markers.offsetY[t]):parseFloat(a.config.legend.markers.offsetY),d=Array.isArray(a.config.legend.markers.strokeWidth)?parseFloat(a.config.legend.markers.strokeWidth[t]):parseFloat(a.config.legend.markers.strokeWidth),g=s.style;if(g.height=2*(o+d)+"px",g.width=2*(o+d)+"px",g.left=h+"px",g.top=c+"px",a.config.legend.markers.customHTML)g.background="transparent",g.color=i[t],Array.isArray(a.config.legend.markers.customHTML)?a.config.legend.markers.customHTML[t]&&(s.innerHTML=a.config.legend.markers.customHTML[t]()):s.innerHTML=a.config.legend.markers.customHTML();else{var f=new ye(this.ctx).getMarkerConfig({cssClass:"apexcharts-legend-marker apexcharts-marker apexcharts-marker-".concat(n),seriesIndex:t,strokeWidth:d,size:o}),x=SVG(s).size("100%","100%"),b=new X(this.ctx).drawMarker(0,0,Y(Y({},f),{},{pointFillColor:Array.isArray(i)?i[t]:f.pointFillColor,shape:n}));SVG.select(".apexcharts-legend-marker.apexcharts-marker").members.forEach(function(v){v.node.classList.contains("apexcharts-marker-triangle")?v.node.style.transform="translate(50%, 45%)":v.node.style.transform="translate(50%, 50%)"}),x.add(b)}return s}},{key:"drawLegends",value:function(){var e=this,t=this.w,i=t.config.legend.fontFamily,a=t.globals.seriesNames,s=t.config.legend.markers.fillColors?t.config.legend.markers.fillColors.slice():t.globals.colors.slice();if(t.config.chart.type==="heatmap"){var r=t.config.plotOptions.heatmap.colorScale.ranges;a=r.map(function(m){return m.name?m.name:m.from+" - "+m.to}),s=r.map(function(m){return m.color})}else this.isBarsDistributed&&(a=t.globals.labels.slice());t.config.legend.customLegendItems.length&&(a=t.config.legend.customLegendItems);for(var n=t.globals.legendFormatter,o=t.config.legend.inverseOrder,h=o?a.length-1:0;o?h>=0:h<=a.length-1;o?h--:h++){var c,d=n(a[h],{seriesIndex:h,w:t}),g=!1,f=!1;if(t.globals.collapsedSeries.length>0)for(var x=0;x0)for(var b=0;b0?h-10:0)+(c>0?c-10:0)}a.style.position="absolute",r=r+e+i.config.legend.offsetX,n=n+t+i.config.legend.offsetY,a.style.left=r+"px",a.style.top=n+"px",i.config.legend.position==="bottom"?(a.style.top="auto",a.style.bottom=5-i.config.legend.offsetY+"px"):i.config.legend.position==="right"&&(a.style.left="auto",a.style.right=25+i.config.legend.offsetX+"px"),["width","height"].forEach(function(d){a.style[d]&&(a.style[d]=parseInt(i.config.legend[d],10)+"px")})}},{key:"legendAlignHorizontal",value:function(){var e=this.w;e.globals.dom.elLegendWrap.style.right=0;var t=this.legendHelpers.getLegendDimensions(),i=new Ne(this.ctx),a=i.dimHelpers.getTitleSubtitleCoords("title"),s=i.dimHelpers.getTitleSubtitleCoords("subtitle"),r=0;e.config.legend.position==="bottom"?r=-t.clwh/1.8:e.config.legend.position==="top"&&(r=a.height+s.height+e.config.title.margin+e.config.subtitle.margin-10),this.setLegendWrapXY(20,r)}},{key:"legendAlignVertical",value:function(){var e=this.w,t=this.legendHelpers.getLegendDimensions(),i=0;e.config.legend.position==="left"&&(i=20),e.config.legend.position==="right"&&(i=e.globals.svgWidth-t.clww-10),this.setLegendWrapXY(i,20)}},{key:"onLegendHovered",value:function(e){var t=this.w,i=e.target.classList.contains("apexcharts-legend-series")||e.target.classList.contains("apexcharts-legend-text")||e.target.classList.contains("apexcharts-legend-marker");if(t.config.chart.type==="heatmap"||this.isBarsDistributed){if(i){var a=parseInt(e.target.getAttribute("rel"),10)-1;this.ctx.events.fireEvent("legendHover",[this.ctx,a,this.w]),new re(this.ctx).highlightRangeInSeries(e,e.target)}}else!e.target.classList.contains("apexcharts-inactive-legend")&&i&&new re(this.ctx).toggleSeriesOnHover(e,e.target)}},{key:"onLegendClick",value:function(e){var t=this.w;if(!t.config.legend.customLegendItems.length&&(e.target.classList.contains("apexcharts-legend-series")||e.target.classList.contains("apexcharts-legend-text")||e.target.classList.contains("apexcharts-legend-marker"))){var i=parseInt(e.target.getAttribute("rel"),10)-1,a=e.target.getAttribute("data:collapsed")==="true",s=this.w.config.chart.events.legendClick;typeof s=="function"&&s(this.ctx,i,this.w),this.ctx.events.fireEvent("legendClick",[this.ctx,i,this.w]);var r=this.w.config.legend.markers.onClick;typeof r=="function"&&e.target.classList.contains("apexcharts-legend-marker")&&(r(this.ctx,i,this.w),this.ctx.events.fireEvent("legendMarkerClick",[this.ctx,i,this.w])),t.config.chart.type!=="treemap"&&t.config.chart.type!=="heatmap"&&!this.isBarsDistributed&&t.config.legend.onItemClick.toggleDataSeries&&this.legendHelpers.toggleDataSeries(i,a)}}}]),p}(),Ht=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w;var t=this.w;this.ev=this.w.config.chart.events,this.selectedClass="apexcharts-selected",this.localeValues=this.w.globals.locale.toolbar,this.minX=t.globals.minX,this.maxX=t.globals.maxX}return R(p,[{key:"createToolbar",value:function(){var e=this,t=this.w,i=function(){return document.createElement("div")},a=i();if(a.setAttribute("class","apexcharts-toolbar"),a.style.top=t.config.chart.toolbar.offsetY+"px",a.style.right=3-t.config.chart.toolbar.offsetX+"px",t.globals.dom.elWrap.appendChild(a),this.elZoom=i(),this.elZoomIn=i(),this.elZoomOut=i(),this.elPan=i(),this.elSelection=i(),this.elZoomReset=i(),this.elMenuIcon=i(),this.elMenu=i(),this.elCustomIcons=[],this.t=t.config.chart.toolbar.tools,Array.isArray(this.t.customIcons))for(var s=0;s -`), n("zoomOut", this.elZoomOut, ` +`),n("zoomOut",this.elZoomOut,` -`); var o = function (d) { - e.t[d] && t.config.chart[d].enabled && r.push({ - el: d === "zoom" ? e.elZoom : e.elSelection, icon: typeof e.t[d] == "string" ? e.t[d] : d === "zoom" ? ` +`);var o=function(d){e.t[d]&&t.config.chart[d].enabled&&r.push({el:d==="zoom"?e.elZoom:e.elSelection,icon:typeof e.t[d]=="string"?e.t[d]:d==="zoom"?` -`: ` +`:` -`, title: e.localeValues[d === "zoom" ? "selectionZoom" : "selection"], class: t.globals.isTouchDevice ? "apexcharts-element-hidden" : "apexcharts-".concat(d, "-icon") - }) - }; o("zoom"), o("selection"), this.t.pan && t.config.chart.zoom.enabled && r.push({ - el: this.elPan, icon: typeof this.t.pan == "string" ? this.t.pan : ` +`,title:e.localeValues[d==="zoom"?"selectionZoom":"selection"],class:t.globals.isTouchDevice?"apexcharts-element-hidden":"apexcharts-".concat(d,"-icon")})};o("zoom"),o("selection"),this.t.pan&&t.config.chart.zoom.enabled&&r.push({el:this.elPan,icon:typeof this.t.pan=="string"?this.t.pan:` @@ -142,57 +97,17 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho -`, title: this.localeValues.pan, class: t.globals.isTouchDevice ? "apexcharts-element-hidden" : "apexcharts-pan-icon" - }), n("reset", this.elZoomReset, ` +`,title:this.localeValues.pan,class:t.globals.isTouchDevice?"apexcharts-element-hidden":"apexcharts-pan-icon"}),n("reset",this.elZoomReset,` -`), this.t.download && r.push({ el: this.elMenuIcon, icon: typeof this.t.download == "string" ? this.t.download : '', title: this.localeValues.menu, class: "apexcharts-menu-icon" }); for (var h = 0; h < this.elCustomIcons.length; h++)r.push({ el: this.elCustomIcons[h], icon: this.t.customIcons[h].icon, title: this.t.customIcons[h].title, index: this.t.customIcons[h].index, class: "apexcharts-toolbar-custom-icon " + this.t.customIcons[h].class }); r.forEach(function (d, g) { d.index && P.moveIndexInArray(r, g, d.index) }); for (var c = 0; c < r.length; c++)X.setAttrs(r[c].el, { class: r[c].class, title: r[c].title }), r[c].el.innerHTML = r[c].icon, a.appendChild(r[c].el); this._createHamburgerMenu(a), t.globals.zoomEnabled ? this.elZoom.classList.add(this.selectedClass) : t.globals.panEnabled ? this.elPan.classList.add(this.selectedClass) : t.globals.selectionEnabled && this.elSelection.classList.add(this.selectedClass), this.addToolbarEventListeners() - } - }, { key: "_createHamburgerMenu", value: function (e) { this.elMenuItems = [], e.appendChild(this.elMenu), X.setAttrs(this.elMenu, { class: "apexcharts-menu" }); for (var t = [{ name: "exportSVG", title: this.localeValues.exportToSVG }, { name: "exportPNG", title: this.localeValues.exportToPNG }, { name: "exportCSV", title: this.localeValues.exportToCSV }], i = 0; i < t.length; i++)this.elMenuItems.push(document.createElement("div")), this.elMenuItems[i].innerHTML = t[i].title, X.setAttrs(this.elMenuItems[i], { class: "apexcharts-menu-item ".concat(t[i].name), title: t[i].title }), this.elMenu.appendChild(this.elMenuItems[i]) } }, { key: "addToolbarEventListeners", value: function () { var e = this; this.elZoomReset.addEventListener("click", this.handleZoomReset.bind(this)), this.elSelection.addEventListener("click", this.toggleZoomSelection.bind(this, "selection")), this.elZoom.addEventListener("click", this.toggleZoomSelection.bind(this, "zoom")), this.elZoomIn.addEventListener("click", this.handleZoomIn.bind(this)), this.elZoomOut.addEventListener("click", this.handleZoomOut.bind(this)), this.elPan.addEventListener("click", this.togglePanning.bind(this)), this.elMenuIcon.addEventListener("click", this.toggleMenu.bind(this)), this.elMenuItems.forEach(function (i) { i.classList.contains("exportSVG") ? i.addEventListener("click", e.handleDownload.bind(e, "svg")) : i.classList.contains("exportPNG") ? i.addEventListener("click", e.handleDownload.bind(e, "png")) : i.classList.contains("exportCSV") && i.addEventListener("click", e.handleDownload.bind(e, "csv")) }); for (var t = 0; t < this.t.customIcons.length; t++)this.elCustomIcons[t].addEventListener("click", this.t.customIcons[t].click.bind(this, this.ctx, this.ctx.w)) } }, { key: "toggleZoomSelection", value: function (e) { this.ctx.getSyncedCharts().forEach(function (t) { t.ctx.toolbar.toggleOtherControls(); var i = e === "selection" ? t.ctx.toolbar.elSelection : t.ctx.toolbar.elZoom, a = e === "selection" ? "selectionEnabled" : "zoomEnabled"; t.w.globals[a] = !t.w.globals[a], i.classList.contains(t.ctx.toolbar.selectedClass) ? i.classList.remove(t.ctx.toolbar.selectedClass) : i.classList.add(t.ctx.toolbar.selectedClass) }) } }, { key: "getToolbarIconsReference", value: function () { var e = this.w; this.elZoom || (this.elZoom = e.globals.dom.baseEl.querySelector(".apexcharts-zoom-icon")), this.elPan || (this.elPan = e.globals.dom.baseEl.querySelector(".apexcharts-pan-icon")), this.elSelection || (this.elSelection = e.globals.dom.baseEl.querySelector(".apexcharts-selection-icon")) } }, { key: "enableZoomPanFromToolbar", value: function (e) { this.toggleOtherControls(), e === "pan" ? this.w.globals.panEnabled = !0 : this.w.globals.zoomEnabled = !0; var t = e === "pan" ? this.elPan : this.elZoom, i = e === "pan" ? this.elZoom : this.elPan; t && t.classList.add(this.selectedClass), i && i.classList.remove(this.selectedClass) } }, { key: "togglePanning", value: function () { this.ctx.getSyncedCharts().forEach(function (e) { e.ctx.toolbar.toggleOtherControls(), e.w.globals.panEnabled = !e.w.globals.panEnabled, e.ctx.toolbar.elPan.classList.contains(e.ctx.toolbar.selectedClass) ? e.ctx.toolbar.elPan.classList.remove(e.ctx.toolbar.selectedClass) : e.ctx.toolbar.elPan.classList.add(e.ctx.toolbar.selectedClass) }) } }, { key: "toggleOtherControls", value: function () { var e = this, t = this.w; t.globals.panEnabled = !1, t.globals.zoomEnabled = !1, t.globals.selectionEnabled = !1, this.getToolbarIconsReference(), [this.elPan, this.elSelection, this.elZoom].forEach(function (i) { i && i.classList.remove(e.selectedClass) }) } }, { key: "handleZoomIn", value: function () { var e = this.w; e.globals.isRangeBar && (this.minX = e.globals.minY, this.maxX = e.globals.maxY); var t = (this.minX + this.maxX) / 2, i = (this.minX + t) / 2, a = (this.maxX + t) / 2, s = this._getNewMinXMaxX(i, a); e.globals.disableZoomIn || this.zoomUpdateOptions(s.minX, s.maxX) } }, { key: "handleZoomOut", value: function () { var e = this.w; if (e.globals.isRangeBar && (this.minX = e.globals.minY, this.maxX = e.globals.maxY), !(e.config.xaxis.type === "datetime" && new Date(this.minX).getUTCFullYear() < 1e3)) { var t = (this.minX + this.maxX) / 2, i = this.minX - (t - this.minX), a = this.maxX - (t - this.maxX), s = this._getNewMinXMaxX(i, a); e.globals.disableZoomOut || this.zoomUpdateOptions(s.minX, s.maxX) } } }, { key: "_getNewMinXMaxX", value: function (e, t) { var i = this.w.config.xaxis.convertedCatToNumeric; return { minX: i ? Math.floor(e) : e, maxX: i ? Math.floor(t) : t } } }, { key: "zoomUpdateOptions", value: function (e, t) { var i = this.w; if (e !== void 0 || t !== void 0) { if (!(i.config.xaxis.convertedCatToNumeric && (e < 1 && (e = 1, t = i.globals.dataPoints), t - e < 2))) { var a = { min: e, max: t }, s = this.getBeforeZoomRange(a); s && (a = s.xaxis); var r = { xaxis: a }, n = P.clone(i.globals.initialConfig.yaxis); i.config.chart.group || (r.yaxis = n), this.w.globals.zoomed = !0, this.ctx.updateHelpers._updateOptions(r, !1, this.w.config.chart.animations.dynamicAnimation.enabled), this.zoomCallback(a, n) } } else this.handleZoomReset() } }, { key: "zoomCallback", value: function (e, t) { typeof this.ev.zoomed == "function" && this.ev.zoomed(this.ctx, { xaxis: e, yaxis: t }) } }, { key: "getBeforeZoomRange", value: function (e, t) { var i = null; return typeof this.ev.beforeZoom == "function" && (i = this.ev.beforeZoom(this, { xaxis: e, yaxis: t })), i } }, { key: "toggleMenu", value: function () { var e = this; window.setTimeout(function () { e.elMenu.classList.contains("apexcharts-menu-open") ? e.elMenu.classList.remove("apexcharts-menu-open") : e.elMenu.classList.add("apexcharts-menu-open") }, 0) } }, { key: "handleDownload", value: function (e) { var t = this.w, i = new He(this.ctx); switch (e) { case "svg": i.exportToSVG(this.ctx); break; case "png": i.exportToPng(this.ctx); break; case "csv": i.exportToCSV({ series: t.config.series, columnDelimiter: t.config.chart.toolbar.export.csv.columnDelimiter }) } } }, { key: "handleZoomReset", value: function (e) { this.ctx.getSyncedCharts().forEach(function (t) { var i = t.w; if (i.globals.lastXAxis.min = i.globals.initialConfig.xaxis.min, i.globals.lastXAxis.max = i.globals.initialConfig.xaxis.max, t.updateHelpers.revertDefaultAxisMinMax(), typeof i.config.chart.events.beforeResetZoom == "function") { var a = i.config.chart.events.beforeResetZoom(t, i); a && t.updateHelpers.revertDefaultAxisMinMax(a) } typeof i.config.chart.events.zoomed == "function" && t.ctx.toolbar.zoomCallback({ min: i.config.xaxis.min, max: i.config.xaxis.max }), i.globals.zoomed = !1; var s = t.ctx.series.emptyCollapsedSeries(P.clone(i.globals.initialSeries)); t.updateHelpers._updateSeries(s, i.config.chart.animations.dynamicAnimation.enabled) }) } }, { key: "destroy", value: function () { this.elZoom = null, this.elZoomIn = null, this.elZoomOut = null, this.elPan = null, this.elSelection = null, this.elZoomReset = null, this.elMenuIcon = null } }]), p - }(), qi = function (p) { Te(t, Ht); var e = Ie(t); function t(i) { var a; return F(this, t), (a = e.call(this, i)).ctx = i, a.w = i.w, a.dragged = !1, a.graphics = new X(a.ctx), a.eventList = ["mousedown", "mouseleave", "mousemove", "touchstart", "touchmove", "mouseup", "touchend", "wheel"], a.clientX = 0, a.clientY = 0, a.startX = 0, a.endX = 0, a.dragX = 0, a.startY = 0, a.endY = 0, a.dragY = 0, a.moveDirection = "none", a.debounceTimer = null, a.debounceDelay = 100, a.wheelDelay = 400, a } return R(t, [{ key: "init", value: function (i) { var a = this, s = i.xyRatios, r = this.w, n = this; this.xyRatios = s, this.zoomRect = this.graphics.drawRect(0, 0, 0, 0), this.selectionRect = this.graphics.drawRect(0, 0, 0, 0), this.gridRect = r.globals.dom.baseEl.querySelector(".apexcharts-grid"), this.zoomRect.node.classList.add("apexcharts-zoom-rect"), this.selectionRect.node.classList.add("apexcharts-selection-rect"), r.globals.dom.elGraphical.add(this.zoomRect), r.globals.dom.elGraphical.add(this.selectionRect), r.config.chart.selection.type === "x" ? this.slDraggableRect = this.selectionRect.draggable({ minX: 0, minY: 0, maxX: r.globals.gridWidth, maxY: r.globals.gridHeight }).on("dragmove", this.selectionDragging.bind(this, "dragging")) : r.config.chart.selection.type === "y" ? this.slDraggableRect = this.selectionRect.draggable({ minX: 0, maxX: r.globals.gridWidth }).on("dragmove", this.selectionDragging.bind(this, "dragging")) : this.slDraggableRect = this.selectionRect.draggable().on("dragmove", this.selectionDragging.bind(this, "dragging")), this.preselectedSelection(), this.hoverArea = r.globals.dom.baseEl.querySelector("".concat(r.globals.chartClass, " .apexcharts-svg")), this.hoverArea.classList.add("apexcharts-zoomable"), this.eventList.forEach(function (o) { a.hoverArea.addEventListener(o, n.svgMouseEvents.bind(n, s), { capture: !1, passive: !0 }) }), r.config.chart.zoom.allowMouseWheelZoom && this.hoverArea.addEventListener("wheel", n.mouseWheelEvent.bind(n), { capture: !1, passive: !1 }) } }, { key: "destroy", value: function () { this.slDraggableRect && (this.slDraggableRect.draggable(!1), this.slDraggableRect.off(), this.selectionRect.off()), this.selectionRect = null, this.zoomRect = null, this.gridRect = null } }, { key: "svgMouseEvents", value: function (i, a) { var s = this.w, r = this, n = this.ctx.toolbar, o = s.globals.zoomEnabled ? s.config.chart.zoom.type : s.config.chart.selection.type, h = s.config.chart.toolbar.autoSelected; if (a.shiftKey ? (this.shiftWasPressed = !0, n.enableZoomPanFromToolbar(h === "pan" ? "zoom" : "pan")) : this.shiftWasPressed && (n.enableZoomPanFromToolbar(h), this.shiftWasPressed = !1), a.target) { var c, d = a.target.classList; if (a.target.parentNode && a.target.parentNode !== null && (c = a.target.parentNode.classList), !(d.contains("apexcharts-selection-rect") || d.contains("apexcharts-legend-marker") || d.contains("apexcharts-legend-text") || c && c.contains("apexcharts-toolbar"))) { if (r.clientX = a.type === "touchmove" || a.type === "touchstart" ? a.touches[0].clientX : a.type === "touchend" ? a.changedTouches[0].clientX : a.clientX, r.clientY = a.type === "touchmove" || a.type === "touchstart" ? a.touches[0].clientY : a.type === "touchend" ? a.changedTouches[0].clientY : a.clientY, a.type === "mousedown" && a.which === 1) { var g = r.gridRect.getBoundingClientRect(); r.startX = r.clientX - g.left, r.startY = r.clientY - g.top, r.dragged = !1, r.w.globals.mousedown = !0 } if ((a.type === "mousemove" && a.which === 1 || a.type === "touchmove") && (r.dragged = !0, s.globals.panEnabled ? (s.globals.selection = null, r.w.globals.mousedown && r.panDragging({ context: r, zoomtype: o, xyRatios: i })) : (r.w.globals.mousedown && s.globals.zoomEnabled || r.w.globals.mousedown && s.globals.selectionEnabled) && (r.selection = r.selectionDrawing({ context: r, zoomtype: o }))), a.type === "mouseup" || a.type === "touchend" || a.type === "mouseleave") { var f, x = (f = r.gridRect) === null || f === void 0 ? void 0 : f.getBoundingClientRect(); x && r.w.globals.mousedown && (r.endX = r.clientX - x.left, r.endY = r.clientY - x.top, r.dragX = Math.abs(r.endX - r.startX), r.dragY = Math.abs(r.endY - r.startY), (s.globals.zoomEnabled || s.globals.selectionEnabled) && r.selectionDrawn({ context: r, zoomtype: o }), s.globals.panEnabled && s.config.xaxis.convertedCatToNumeric && r.delayedPanScrolled()), s.globals.zoomEnabled && r.hideSelectionRect(this.selectionRect), r.dragged = !1, r.w.globals.mousedown = !1 } this.makeSelectionRectDraggable() } } } }, { key: "mouseWheelEvent", value: function (i) { var a = this, s = this.w; i.preventDefault(); var r = Date.now(); r - s.globals.lastWheelExecution > this.wheelDelay && (this.executeMouseWheelZoom(i), s.globals.lastWheelExecution = r), this.debounceTimer && clearTimeout(this.debounceTimer), this.debounceTimer = setTimeout(function () { r - s.globals.lastWheelExecution > a.wheelDelay && (a.executeMouseWheelZoom(i), s.globals.lastWheelExecution = r) }, this.debounceDelay) } }, { key: "executeMouseWheelZoom", value: function (i) { var a, s = this.w; this.minX = s.globals.isRangeBar ? s.globals.minY : s.globals.minX, this.maxX = s.globals.isRangeBar ? s.globals.maxY : s.globals.maxX; var r = (a = this.gridRect) === null || a === void 0 ? void 0 : a.getBoundingClientRect(); if (r) { var n, o, h, c = (i.clientX - r.left) / r.width, d = this.minX, g = this.maxX, f = g - d; if (i.deltaY < 0) { var x = d + c * f; o = x - (n = .5 * f) / 2, h = x + n / 2 } else o = d - (n = 1.5 * f) / 2, h = g + n / 2; o = Math.max(o, s.globals.initialMinX), h = Math.min(h, s.globals.initialMaxX); var b = .01 * (s.globals.initialMaxX - s.globals.initialMinX); if (h - o < b) { var v = (o + h) / 2; o = v - b / 2, h = v + b / 2 } var y = this._getNewMinXMaxX(o, h); isNaN(y.minX) || isNaN(y.maxX) || this.zoomUpdateOptions(y.minX, y.maxX) } } }, { key: "makeSelectionRectDraggable", value: function () { var i = this.w; if (this.selectionRect) { var a = this.selectionRect.node.getBoundingClientRect(); a.width > 0 && a.height > 0 && this.slDraggableRect.selectize({ points: "l, r", pointSize: 8, pointType: "rect" }).resize({ constraint: { minX: 0, minY: 0, maxX: i.globals.gridWidth, maxY: i.globals.gridHeight } }).on("resizing", this.selectionDragging.bind(this, "resizing")) } } }, { key: "preselectedSelection", value: function () { var i = this.w, a = this.xyRatios; if (!i.globals.zoomEnabled) { if (i.globals.selection !== void 0 && i.globals.selection !== null) this.drawSelectionRect(i.globals.selection); else if (i.config.chart.selection.xaxis.min !== void 0 && i.config.chart.selection.xaxis.max !== void 0) { var s = (i.config.chart.selection.xaxis.min - i.globals.minX) / a.xRatio, r = i.globals.gridWidth - (i.globals.maxX - i.config.chart.selection.xaxis.max) / a.xRatio - s; i.globals.isRangeBar && (s = (i.config.chart.selection.xaxis.min - i.globals.yAxisScale[0].niceMin) / a.invertedYRatio, r = (i.config.chart.selection.xaxis.max - i.config.chart.selection.xaxis.min) / a.invertedYRatio); var n = { x: s, y: 0, width: r, height: i.globals.gridHeight, translateX: 0, translateY: 0, selectionEnabled: !0 }; this.drawSelectionRect(n), this.makeSelectionRectDraggable(), typeof i.config.chart.events.selection == "function" && i.config.chart.events.selection(this.ctx, { xaxis: { min: i.config.chart.selection.xaxis.min, max: i.config.chart.selection.xaxis.max }, yaxis: {} }) } } } }, { key: "drawSelectionRect", value: function (i) { var a = i.x, s = i.y, r = i.width, n = i.height, o = i.translateX, h = o === void 0 ? 0 : o, c = i.translateY, d = c === void 0 ? 0 : c, g = this.w, f = this.zoomRect, x = this.selectionRect; if (this.dragged || g.globals.selection !== null) { var b = { transform: "translate(" + h + ", " + d + ")" }; g.globals.zoomEnabled && this.dragged && (r < 0 && (r = 1), f.attr({ x: a, y: s, width: r, height: n, fill: g.config.chart.zoom.zoomedArea.fill.color, "fill-opacity": g.config.chart.zoom.zoomedArea.fill.opacity, stroke: g.config.chart.zoom.zoomedArea.stroke.color, "stroke-width": g.config.chart.zoom.zoomedArea.stroke.width, "stroke-opacity": g.config.chart.zoom.zoomedArea.stroke.opacity }), X.setAttrs(f.node, b)), g.globals.selectionEnabled && (x.attr({ x: a, y: s, width: r > 0 ? r : 0, height: n > 0 ? n : 0, fill: g.config.chart.selection.fill.color, "fill-opacity": g.config.chart.selection.fill.opacity, stroke: g.config.chart.selection.stroke.color, "stroke-width": g.config.chart.selection.stroke.width, "stroke-dasharray": g.config.chart.selection.stroke.dashArray, "stroke-opacity": g.config.chart.selection.stroke.opacity }), X.setAttrs(x.node, b)) } } }, { key: "hideSelectionRect", value: function (i) { i && i.attr({ x: 0, y: 0, width: 0, height: 0 }) } }, { key: "selectionDrawing", value: function (i) { var a = i.context, s = i.zoomtype, r = this.w, n = a, o = this.gridRect.getBoundingClientRect(), h = n.startX - 1, c = n.startY, d = !1, g = !1, f = n.clientX - o.left - h, x = n.clientY - o.top - c, b = {}; return Math.abs(f + h) > r.globals.gridWidth ? f = r.globals.gridWidth - h : n.clientX - o.left < 0 && (f = h), h > n.clientX - o.left && (d = !0, f = Math.abs(f)), c > n.clientY - o.top && (g = !0, x = Math.abs(x)), b = s === "x" ? { x: d ? h - f : h, y: 0, width: f, height: r.globals.gridHeight } : s === "y" ? { x: 0, y: g ? c - x : c, width: r.globals.gridWidth, height: x } : { x: d ? h - f : h, y: g ? c - x : c, width: f, height: x }, n.drawSelectionRect(b), n.selectionDragging("resizing"), b } }, { key: "selectionDragging", value: function (i, a) { var s = this, r = this.w, n = this.xyRatios, o = this.selectionRect, h = 0; i === "resizing" && (h = 30); var c = function (g) { return parseFloat(o.node.getAttribute(g)) }, d = { x: c("x"), y: c("y"), width: c("width"), height: c("height") }; r.globals.selection = d, typeof r.config.chart.events.selection == "function" && r.globals.selectionEnabled && (clearTimeout(this.w.globals.selectionResizeTimer), this.w.globals.selectionResizeTimer = window.setTimeout(function () { var g, f, x, b, v = s.gridRect.getBoundingClientRect(), y = o.node.getBoundingClientRect(); r.globals.isRangeBar ? (g = r.globals.yAxisScale[0].niceMin + (y.left - v.left) * n.invertedYRatio, f = r.globals.yAxisScale[0].niceMin + (y.right - v.left) * n.invertedYRatio, x = 0, b = 1) : (g = r.globals.xAxisScale.niceMin + (y.left - v.left) * n.xRatio, f = r.globals.xAxisScale.niceMin + (y.right - v.left) * n.xRatio, x = r.globals.yAxisScale[0].niceMin + (v.bottom - y.bottom) * n.yRatio[0], b = r.globals.yAxisScale[0].niceMax - (y.top - v.top) * n.yRatio[0]); var w = { xaxis: { min: g, max: f }, yaxis: { min: x, max: b } }; r.config.chart.events.selection(s.ctx, w), r.config.chart.brush.enabled && r.config.chart.events.brushScrolled !== void 0 && r.config.chart.events.brushScrolled(s.ctx, w) }, h)) } }, { key: "selectionDrawn", value: function (i) { var a = i.context, s = i.zoomtype, r = this.w, n = a, o = this.xyRatios, h = this.ctx.toolbar; if (n.startX > n.endX) { var c = n.startX; n.startX = n.endX, n.endX = c } if (n.startY > n.endY) { var d = n.startY; n.startY = n.endY, n.endY = d } var g = void 0, f = void 0; r.globals.isRangeBar ? (g = r.globals.yAxisScale[0].niceMin + n.startX * o.invertedYRatio, f = r.globals.yAxisScale[0].niceMin + n.endX * o.invertedYRatio) : (g = r.globals.xAxisScale.niceMin + n.startX * o.xRatio, f = r.globals.xAxisScale.niceMin + n.endX * o.xRatio); var x = [], b = []; if (r.config.yaxis.forEach(function (A, k) { var S = r.globals.seriesYAxisMap[k][0]; x.push(r.globals.yAxisScale[k].niceMax - o.yRatio[S] * n.startY), b.push(r.globals.yAxisScale[k].niceMax - o.yRatio[S] * n.endY) }), n.dragged && (n.dragX > 10 || n.dragY > 10) && g !== f) { if (r.globals.zoomEnabled) { var v = P.clone(r.globals.initialConfig.yaxis), y = P.clone(r.globals.initialConfig.xaxis); if (r.globals.zoomed = !0, r.config.xaxis.convertedCatToNumeric && (g = Math.floor(g), f = Math.floor(f), g < 1 && (g = 1, f = r.globals.dataPoints), f - g < 2 && (f = g + 1)), s !== "xy" && s !== "x" || (y = { min: g, max: f }), s !== "xy" && s !== "y" || v.forEach(function (A, k) { v[k].min = b[k], v[k].max = x[k] }), h) { var w = h.getBeforeZoomRange(y, v); w && (y = w.xaxis ? w.xaxis : y, v = w.yaxis ? w.yaxis : v) } var l = { xaxis: y }; r.config.chart.group || (l.yaxis = v), n.ctx.updateHelpers._updateOptions(l, !1, n.w.config.chart.animations.dynamicAnimation.enabled), typeof r.config.chart.events.zoomed == "function" && h.zoomCallback(y, v) } else if (r.globals.selectionEnabled) { var u, m = null; u = { min: g, max: f }, s !== "xy" && s !== "y" || (m = P.clone(r.config.yaxis)).forEach(function (A, k) { m[k].min = b[k], m[k].max = x[k] }), r.globals.selection = n.selection, typeof r.config.chart.events.selection == "function" && r.config.chart.events.selection(n.ctx, { xaxis: u, yaxis: m }) } } } }, { key: "panDragging", value: function (i) { var a = i.context, s = this.w, r = a; if (s.globals.lastClientPosition.x !== void 0) { var n = s.globals.lastClientPosition.x - r.clientX, o = s.globals.lastClientPosition.y - r.clientY; Math.abs(n) > Math.abs(o) && n > 0 ? this.moveDirection = "left" : Math.abs(n) > Math.abs(o) && n < 0 ? this.moveDirection = "right" : Math.abs(o) > Math.abs(n) && o > 0 ? this.moveDirection = "up" : Math.abs(o) > Math.abs(n) && o < 0 && (this.moveDirection = "down") } s.globals.lastClientPosition = { x: r.clientX, y: r.clientY }; var h = s.globals.isRangeBar ? s.globals.minY : s.globals.minX, c = s.globals.isRangeBar ? s.globals.maxY : s.globals.maxX; s.config.xaxis.convertedCatToNumeric || r.panScrolled(h, c) } }, { key: "delayedPanScrolled", value: function () { var i = this.w, a = i.globals.minX, s = i.globals.maxX, r = (i.globals.maxX - i.globals.minX) / 2; this.moveDirection === "left" ? (a = i.globals.minX + r, s = i.globals.maxX + r) : this.moveDirection === "right" && (a = i.globals.minX - r, s = i.globals.maxX - r), a = Math.floor(a), s = Math.floor(s), this.updateScrolledChart({ xaxis: { min: a, max: s } }, a, s) } }, { key: "panScrolled", value: function (i, a) { var s = this.w, r = this.xyRatios, n = P.clone(s.globals.initialConfig.yaxis), o = r.xRatio, h = s.globals.minX, c = s.globals.maxX; s.globals.isRangeBar && (o = r.invertedYRatio, h = s.globals.minY, c = s.globals.maxY), this.moveDirection === "left" ? (i = h + s.globals.gridWidth / 15 * o, a = c + s.globals.gridWidth / 15 * o) : this.moveDirection === "right" && (i = h - s.globals.gridWidth / 15 * o, a = c - s.globals.gridWidth / 15 * o), s.globals.isRangeBar || (i < s.globals.initialMinX || a > s.globals.initialMaxX) && (i = h, a = c); var d = { xaxis: { min: i, max: a } }; s.config.chart.group || (d.yaxis = n), this.updateScrolledChart(d, i, a) } }, { key: "updateScrolledChart", value: function (i, a, s) { var r = this.w; this.ctx.updateHelpers._updateOptions(i, !1, !1), typeof r.config.chart.events.scrolled == "function" && r.config.chart.events.scrolled(this.ctx, { xaxis: { min: a, max: s } }) } }]), t }(), Nt = function () { function p(e) { F(this, p), this.w = e.w, this.ttCtx = e, this.ctx = e.ctx } return R(p, [{ key: "getNearestValues", value: function (e) { var t = e.hoverArea, i = e.elGrid, a = e.clientX, s = e.clientY, r = this.w, n = i.getBoundingClientRect(), o = n.width, h = n.height, c = o / (r.globals.dataPoints - 1), d = h / r.globals.dataPoints, g = this.hasBars(); !r.globals.comboCharts && !g || r.config.xaxis.convertedCatToNumeric || (c = o / r.globals.dataPoints); var f = a - n.left - r.globals.barPadForNumericAxis, x = s - n.top; f < 0 || x < 0 || f > o || x > h ? (t.classList.remove("hovering-zoom"), t.classList.remove("hovering-pan")) : r.globals.zoomEnabled ? (t.classList.remove("hovering-pan"), t.classList.add("hovering-zoom")) : r.globals.panEnabled && (t.classList.remove("hovering-zoom"), t.classList.add("hovering-pan")); var b = Math.round(f / c), v = Math.floor(x / d); g && !r.config.xaxis.convertedCatToNumeric && (b = Math.ceil(f / c), b -= 1); var y = null, w = null, l = r.globals.seriesXvalues.map(function (S) { return S.filter(function (L) { return P.isNumber(L) }) }), u = r.globals.seriesYvalues.map(function (S) { return S.filter(function (L) { return P.isNumber(L) }) }); if (r.globals.isXNumeric) { var m = this.ttCtx.getElGrid().getBoundingClientRect(), A = f * (m.width / o), k = x * (m.height / h); y = (w = this.closestInMultiArray(A, k, l, u)).index, b = w.j, y !== null && (l = r.globals.seriesXvalues[y], b = (w = this.closestInArray(A, l)).index) } return r.globals.capturedSeriesIndex = y === null ? -1 : y, (!b || b < 1) && (b = 0), r.globals.isBarHorizontal ? r.globals.capturedDataPointIndex = v : r.globals.capturedDataPointIndex = b, { capturedSeries: y, j: r.globals.isBarHorizontal ? v : b, hoverX: f, hoverY: x } } }, { key: "closestInMultiArray", value: function (e, t, i, a) { var s = this.w, r = 0, n = null, o = -1; s.globals.series.length > 1 ? r = this.getFirstActiveXArray(i) : n = 0; var h = i[r][0], c = Math.abs(e - h); if (i.forEach(function (f) { f.forEach(function (x, b) { var v = Math.abs(e - x); v <= c && (c = v, o = b) }) }), o !== -1) { var d = a[r][o], g = Math.abs(t - d); n = r, a.forEach(function (f, x) { var b = Math.abs(t - f[o]); b <= g && (g = b, n = x) }) } return { index: n, j: o } } }, { key: "getFirstActiveXArray", value: function (e) { for (var t = this.w, i = 0, a = e.map(function (r, n) { return r.length > 0 ? n : -1 }), s = 0; s < a.length; s++)if (a[s] !== -1 && t.globals.collapsedSeriesIndices.indexOf(s) === -1 && t.globals.ancillaryCollapsedSeriesIndices.indexOf(s) === -1) { i = a[s]; break } return i } }, { key: "closestInArray", value: function (e, t) { for (var i = t[0], a = null, s = Math.abs(e - i), r = 0; r < t.length; r++) { var n = Math.abs(e - t[r]); n < s && (s = n, a = r) } return { index: a } } }, { key: "isXoverlap", value: function (e) { var t = [], i = this.w.globals.seriesX.filter(function (s) { return s[0] !== void 0 }); if (i.length > 0) for (var a = 0; a < i.length - 1; a++)i[a][e] !== void 0 && i[a + 1][e] !== void 0 && i[a][e] !== i[a + 1][e] && t.push("unEqual"); return t.length === 0 } }, { key: "isInitialSeriesSameLen", value: function () { for (var e = !0, t = this.w.globals.initialSeries, i = 0; i < t.length - 1; i++)if (t[i].data.length !== t[i + 1].data.length) { e = !1; break } return e } }, { key: "getBarsHeight", value: function (e) { return te(e).reduce(function (t, i) { return t + i.getBBox().height }, 0) } }, { key: "getElMarkers", value: function (e) { return typeof e == "number" ? this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-series[data\\:realIndex='".concat(e, "'] .apexcharts-series-markers-wrap > *")) : this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-series-markers-wrap > *") } }, { key: "getAllMarkers", value: function () { var e = this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-series-markers-wrap"); (e = te(e)).sort(function (i, a) { var s = Number(i.getAttribute("data:realIndex")), r = Number(a.getAttribute("data:realIndex")); return r < s ? 1 : r > s ? -1 : 0 }); var t = []; return e.forEach(function (i) { t.push(i.querySelector(".apexcharts-marker")) }), t } }, { key: "hasMarkers", value: function (e) { return this.getElMarkers(e).length > 0 } }, { key: "getPathFromPoint", value: function (e, t) { var i = Number(e.getAttribute("cx")), a = Number(e.getAttribute("cy")), s = e.getAttribute("shape"); return new X(this.ctx).getMarkerPath(i, a, s, t) } }, { key: "getElBars", value: function () { return this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-bar-series, .apexcharts-candlestick-series, .apexcharts-boxPlot-series, .apexcharts-rangebar-series") } }, { key: "hasBars", value: function () { return this.getElBars().length > 0 } }, { key: "getHoverMarkerSize", value: function (e) { var t = this.w, i = t.config.markers.hover.size; return i === void 0 && (i = t.globals.markers.size[e] + t.config.markers.hover.sizeOffset), i } }, { key: "toggleAllTooltipSeriesGroups", value: function (e) { var t = this.w, i = this.ttCtx; i.allTooltipSeriesGroups.length === 0 && (i.allTooltipSeriesGroups = t.globals.dom.baseEl.querySelectorAll(".apexcharts-tooltip-series-group")); for (var a = i.allTooltipSeriesGroups, s = 0; s < a.length; s++)e === "enable" ? (a[s].classList.add("apexcharts-active"), a[s].style.display = t.config.tooltip.items.display) : (a[s].classList.remove("apexcharts-active"), a[s].style.display = "none") } }]), p }(), Zi = function () { function p(e) { F(this, p), this.w = e.w, this.ctx = e.ctx, this.ttCtx = e, this.tooltipUtil = new Nt(e) } return R(p, [{ key: "drawSeriesTexts", value: function (e) { var t = e.shared, i = t === void 0 || t, a = e.ttItems, s = e.i, r = s === void 0 ? 0 : s, n = e.j, o = n === void 0 ? null : n, h = e.y1, c = e.y2, d = e.e, g = this.w; g.config.tooltip.custom !== void 0 ? this.handleCustomTooltip({ i: r, j: o, y1: h, y2: c, w: g }) : this.toggleActiveInactiveSeries(i, r); var f = this.getValuesToPrint({ i: r, j: o }); this.printLabels({ i: r, j: o, values: f, ttItems: a, shared: i, e: d }); var x = this.ttCtx.getElTooltip(); this.ttCtx.tooltipRect.ttWidth = x.getBoundingClientRect().width, this.ttCtx.tooltipRect.ttHeight = x.getBoundingClientRect().height } }, { key: "printLabels", value: function (e) { var t, i = this, a = e.i, s = e.j, r = e.values, n = e.ttItems, o = e.shared, h = e.e, c = this.w, d = [], g = function (m) { return c.globals.seriesGoals[m] && c.globals.seriesGoals[m][s] && Array.isArray(c.globals.seriesGoals[m][s]) }, f = r.xVal, x = r.zVal, b = r.xAxisTTVal, v = "", y = c.globals.colors[a]; s !== null && c.config.plotOptions.bar.distributed && (y = c.globals.colors[s]); for (var w = function (m, A) { var k = i.getFormatters(a); v = i.getSeriesName({ fn: k.yLbTitleFormatter, index: a, seriesIndex: a, j: s }), c.config.chart.type === "treemap" && (v = k.yLbTitleFormatter(String(c.config.series[a].data[s].x), { series: c.globals.series, seriesIndex: a, dataPointIndex: s, w: c })); var S = c.config.tooltip.inverseOrder ? A : m; if (c.globals.axisCharts) { var L = function (z) { var M, T, E, O; return c.globals.isRangeData ? k.yLbFormatter((M = c.globals.seriesRangeStart) === null || M === void 0 || (T = M[z]) === null || T === void 0 ? void 0 : T[s], { series: c.globals.seriesRangeStart, seriesIndex: z, dataPointIndex: s, w: c }) + " - " + k.yLbFormatter((E = c.globals.seriesRangeEnd) === null || E === void 0 || (O = E[z]) === null || O === void 0 ? void 0 : O[s], { series: c.globals.seriesRangeEnd, seriesIndex: z, dataPointIndex: s, w: c }) : k.yLbFormatter(c.globals.series[z][s], { series: c.globals.series, seriesIndex: z, dataPointIndex: s, w: c }) }; if (o) k = i.getFormatters(S), v = i.getSeriesName({ fn: k.yLbTitleFormatter, index: S, seriesIndex: a, j: s }), y = c.globals.colors[S], t = L(S), g(S) && (d = c.globals.seriesGoals[S][s].map(function (z) { return { attrs: z, val: k.yLbFormatter(z.value, { seriesIndex: S, dataPointIndex: s, w: c }) } })); else { var C, I = h == null || (C = h.target) === null || C === void 0 ? void 0 : C.getAttribute("fill"); I && (y = I.indexOf("url") !== -1 ? document.querySelector(I.substr(4).slice(0, -1)).childNodes[0].getAttribute("stroke") : I), t = L(a), g(a) && Array.isArray(c.globals.seriesGoals[a][s]) && (d = c.globals.seriesGoals[a][s].map(function (z) { return { attrs: z, val: k.yLbFormatter(z.value, { seriesIndex: a, dataPointIndex: s, w: c }) } })) } } s === null && (t = k.yLbFormatter(c.globals.series[a], Y(Y({}, c), {}, { seriesIndex: a, dataPointIndex: a }))), i.DOMHandling({ i: a, t: S, j: s, ttItems: n, values: { val: t, goalVals: d, xVal: f, xAxisTTVal: b, zVal: x }, seriesName: v, shared: o, pColor: y }) }, l = 0, u = c.globals.series.length - 1; l < c.globals.series.length; l++, u--)w(l, u) } }, { key: "getFormatters", value: function (e) { var t, i = this.w, a = i.globals.yLabelFormatters[e]; return i.globals.ttVal !== void 0 ? Array.isArray(i.globals.ttVal) ? (a = i.globals.ttVal[e] && i.globals.ttVal[e].formatter, t = i.globals.ttVal[e] && i.globals.ttVal[e].title && i.globals.ttVal[e].title.formatter) : (a = i.globals.ttVal.formatter, typeof i.globals.ttVal.title.formatter == "function" && (t = i.globals.ttVal.title.formatter)) : t = i.config.tooltip.y.title.formatter, typeof a != "function" && (a = i.globals.yLabelFormatters[0] ? i.globals.yLabelFormatters[0] : function (s) { return s }), typeof t != "function" && (t = function (s) { return s }), { yLbFormatter: a, yLbTitleFormatter: t } } }, { key: "getSeriesName", value: function (e) { var t = e.fn, i = e.index, a = e.seriesIndex, s = e.j, r = this.w; return t(String(r.globals.seriesNames[i]), { series: r.globals.series, seriesIndex: a, dataPointIndex: s, w: r }) } }, { key: "DOMHandling", value: function (e) { e.i; var t = e.t, i = e.j, a = e.ttItems, s = e.values, r = e.seriesName, n = e.shared, o = e.pColor, h = this.w, c = this.ttCtx, d = s.val, g = s.goalVals, f = s.xVal, x = s.xAxisTTVal, b = s.zVal, v = null; v = a[t].children, h.config.tooltip.fillSeriesColor && (a[t].style.backgroundColor = o, v[0].style.display = "none"), c.showTooltipTitle && (c.tooltipTitle === null && (c.tooltipTitle = h.globals.dom.baseEl.querySelector(".apexcharts-tooltip-title")), c.tooltipTitle.innerHTML = f), c.isXAxisTooltipEnabled && (c.xaxisTooltipText.innerHTML = x !== "" ? x : f); var y = a[t].querySelector(".apexcharts-tooltip-text-y-label"); y && (y.innerHTML = r || ""); var w = a[t].querySelector(".apexcharts-tooltip-text-y-value"); w && (w.innerHTML = d !== void 0 ? d : ""), v[0] && v[0].classList.contains("apexcharts-tooltip-marker") && (h.config.tooltip.marker.fillColors && Array.isArray(h.config.tooltip.marker.fillColors) && (o = h.config.tooltip.marker.fillColors[t]), v[0].style.backgroundColor = o), h.config.tooltip.marker.show || (v[0].style.display = "none"); var l = a[t].querySelector(".apexcharts-tooltip-text-goals-label"), u = a[t].querySelector(".apexcharts-tooltip-text-goals-value"); if (g.length && h.globals.seriesGoals[t]) { var m = function () { var S = "
", L = "
"; g.forEach(function (C, I) { S += '
').concat(C.attrs.name, "
"), L += "
".concat(C.val, "
") }), l.innerHTML = S + "
", u.innerHTML = L + "
" }; n ? h.globals.seriesGoals[t][i] && Array.isArray(h.globals.seriesGoals[t][i]) ? m() : (l.innerHTML = "", u.innerHTML = "") : m() } else l.innerHTML = "", u.innerHTML = ""; if (b !== null && (a[t].querySelector(".apexcharts-tooltip-text-z-label").innerHTML = h.config.tooltip.z.title, a[t].querySelector(".apexcharts-tooltip-text-z-value").innerHTML = b !== void 0 ? b : ""), n && v[0]) { if (h.config.tooltip.hideEmptySeries) { var A = a[t].querySelector(".apexcharts-tooltip-marker"), k = a[t].querySelector(".apexcharts-tooltip-text"); parseFloat(d) == 0 ? (A.style.display = "none", k.style.display = "none") : (A.style.display = "block", k.style.display = "block") } d == null || h.globals.ancillaryCollapsedSeriesIndices.indexOf(t) > -1 || h.globals.collapsedSeriesIndices.indexOf(t) > -1 || Array.isArray(c.tConfig.enabledOnSeries) && c.tConfig.enabledOnSeries.indexOf(t) === -1 ? v[0].parentNode.style.display = "none" : v[0].parentNode.style.display = h.config.tooltip.items.display } else Array.isArray(c.tConfig.enabledOnSeries) && c.tConfig.enabledOnSeries.indexOf(t) === -1 && (v[0].parentNode.style.display = "none") } }, { key: "toggleActiveInactiveSeries", value: function (e, t) { var i = this.w; if (e) this.tooltipUtil.toggleAllTooltipSeriesGroups("enable"); else { this.tooltipUtil.toggleAllTooltipSeriesGroups("disable"); var a = i.globals.dom.baseEl.querySelector(".apexcharts-tooltip-series-group-".concat(t)); a && (a.classList.add("apexcharts-active"), a.style.display = i.config.tooltip.items.display) } } }, { key: "getValuesToPrint", value: function (e) { var t = e.i, i = e.j, a = this.w, s = this.ctx.series.filteredSeriesX(), r = "", n = "", o = null, h = null, c = { series: a.globals.series, seriesIndex: t, dataPointIndex: i, w: a }, d = a.globals.ttZFormatter; i === null ? h = a.globals.series[t] : a.globals.isXNumeric && a.config.chart.type !== "treemap" ? (r = s[t][i], s[t].length === 0 && (r = s[this.tooltipUtil.getFirstActiveXArray(s)][i])) : r = a.globals.labels[i] !== void 0 ? a.globals.labels[i] : ""; var g = r; return a.globals.isXNumeric && a.config.xaxis.type === "datetime" ? r = new ze(this.ctx).xLabelFormat(a.globals.ttKeyFormatter, g, g, { i: void 0, dateFormatter: new K(this.ctx).formatDate, w: this.w }) : r = a.globals.isBarHorizontal ? a.globals.yLabelFormatters[0](g, c) : a.globals.xLabelFormatter(g, c), a.config.tooltip.x.formatter !== void 0 && (r = a.globals.ttKeyFormatter(g, c)), a.globals.seriesZ.length > 0 && a.globals.seriesZ[t].length > 0 && (o = d(a.globals.seriesZ[t][i], a)), n = typeof a.config.xaxis.tooltip.formatter == "function" ? a.globals.xaxisTooltipFormatter(g, c) : r, { val: Array.isArray(h) ? h.join(" ") : h, xVal: Array.isArray(r) ? r.join(" ") : r, xAxisTTVal: Array.isArray(n) ? n.join(" ") : n, zVal: o } } }, { key: "handleCustomTooltip", value: function (e) { var t = e.i, i = e.j, a = e.y1, s = e.y2, r = e.w, n = this.ttCtx.getElTooltip(), o = r.config.tooltip.custom; Array.isArray(o) && o[t] && (o = o[t]), n.innerHTML = o({ ctx: this.ctx, series: r.globals.series, seriesIndex: t, dataPointIndex: i, y1: a, y2: s, w: r }) } }]), p }(), Wt = function () { - function p(e) { F(this, p), this.ttCtx = e, this.ctx = e.ctx, this.w = e.w } return R(p, [{ key: "moveXCrosshairs", value: function (e) { var t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : null, i = this.ttCtx, a = this.w, s = i.getElXCrosshairs(), r = e - i.xcrosshairsWidth / 2, n = a.globals.labels.slice().length; if (t !== null && (r = a.globals.gridWidth / n * t), s === null || a.globals.isBarHorizontal || (s.setAttribute("x", r), s.setAttribute("x1", r), s.setAttribute("x2", r), s.setAttribute("y2", a.globals.gridHeight), s.classList.add("apexcharts-active")), r < 0 && (r = 0), r > a.globals.gridWidth && (r = a.globals.gridWidth), i.isXAxisTooltipEnabled) { var o = r; a.config.xaxis.crosshairs.width !== "tickWidth" && a.config.xaxis.crosshairs.width !== "barWidth" || (o = r + i.xcrosshairsWidth / 2), this.moveXAxisTooltip(o) } } }, { key: "moveYCrosshairs", value: function (e) { var t = this.ttCtx; t.ycrosshairs !== null && X.setAttrs(t.ycrosshairs, { y1: e, y2: e }), t.ycrosshairsHidden !== null && X.setAttrs(t.ycrosshairsHidden, { y1: e, y2: e }) } }, { key: "moveXAxisTooltip", value: function (e) { var t = this.w, i = this.ttCtx; if (i.xaxisTooltip !== null && i.xcrosshairsWidth !== 0) { i.xaxisTooltip.classList.add("apexcharts-active"); var a = i.xaxisOffY + t.config.xaxis.tooltip.offsetY + t.globals.translateY + 1 + t.config.xaxis.offsetY; if (e -= i.xaxisTooltip.getBoundingClientRect().width / 2, !isNaN(e)) { e += t.globals.translateX; var s; s = new X(this.ctx).getTextRects(i.xaxisTooltipText.innerHTML), i.xaxisTooltipText.style.minWidth = s.width + "px", i.xaxisTooltip.style.left = e + "px", i.xaxisTooltip.style.top = a + "px" } } } }, { key: "moveYAxisTooltip", value: function (e) { var t = this.w, i = this.ttCtx; i.yaxisTTEls === null && (i.yaxisTTEls = t.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxistooltip")); var a = parseInt(i.ycrosshairsHidden.getAttribute("y1"), 10), s = t.globals.translateY + a, r = i.yaxisTTEls[e].getBoundingClientRect().height, n = t.globals.translateYAxisX[e] - 2; t.config.yaxis[e].opposite && (n -= 26), s -= r / 2, t.globals.ignoreYAxisIndexes.indexOf(e) === -1 ? (i.yaxisTTEls[e].classList.add("apexcharts-active"), i.yaxisTTEls[e].style.top = s + "px", i.yaxisTTEls[e].style.left = n + t.config.yaxis[e].tooltip.offsetX + "px") : i.yaxisTTEls[e].classList.remove("apexcharts-active") } }, { key: "moveTooltip", value: function (e, t) { var i = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : null, a = this.w, s = this.ttCtx, r = s.getElTooltip(), n = s.tooltipRect, o = i !== null ? parseFloat(i) : 1, h = parseFloat(e) + o + 5, c = parseFloat(t) + o / 2; if (h > a.globals.gridWidth / 2 && (h = h - n.ttWidth - o - 10), h > a.globals.gridWidth - n.ttWidth - 10 && (h = a.globals.gridWidth - n.ttWidth), h < -20 && (h = -20), a.config.tooltip.followCursor) { var d = s.getElGrid().getBoundingClientRect(); (h = s.e.clientX - d.left) > a.globals.gridWidth / 2 && (h -= s.tooltipRect.ttWidth), (c = s.e.clientY + a.globals.translateY - d.top) > a.globals.gridHeight / 2 && (c -= s.tooltipRect.ttHeight) } else a.globals.isBarHorizontal || n.ttHeight / 2 + c > a.globals.gridHeight && (c = a.globals.gridHeight - n.ttHeight + a.globals.translateY); isNaN(h) || (h += a.globals.translateX, r.style.left = h + "px", r.style.top = c + "px") } }, { key: "moveMarkers", value: function (e, t) { var i = this.w, a = this.ttCtx; if (i.globals.markers.size[e] > 0) for (var s = i.globals.dom.baseEl.querySelectorAll(" .apexcharts-series[data\\:realIndex='".concat(e, "'] .apexcharts-marker")), r = 0; r < s.length; r++)parseInt(s[r].getAttribute("rel"), 10) === t && (a.marker.resetPointsSize(), a.marker.enlargeCurrentPoint(t, s[r])); else a.marker.resetPointsSize(), this.moveDynamicPointOnHover(t, e) } }, { key: "moveDynamicPointOnHover", value: function (e, t) { var i, a, s, r, n = this.w, o = this.ttCtx, h = new X(this.ctx), c = n.globals.pointsArray, d = o.tooltipUtil.getHoverMarkerSize(t), g = n.config.series[t].type; if (!g || g !== "column" && g !== "candlestick" && g !== "boxPlot") { s = (i = c[t][e]) === null || i === void 0 ? void 0 : i[0], r = ((a = c[t][e]) === null || a === void 0 ? void 0 : a[1]) || 0; var f = n.globals.dom.baseEl.querySelector(".apexcharts-series[data\\:realIndex='".concat(t, "'] .apexcharts-series-markers path")); if (f && r < n.globals.gridHeight && r > 0) { var x = f.getAttribute("shape"), b = h.getMarkerPath(s, r, x, 1.5 * d); f.setAttribute("d", b) } this.moveXCrosshairs(s), o.fixedTooltip || this.moveTooltip(s, r, d) } } }, { key: "moveDynamicPointsOnHover", value: function (e) { var t, i = this.ttCtx, a = i.w, s = 0, r = 0, n = a.globals.pointsArray, o = new re(this.ctx), h = new X(this.ctx); t = o.getActiveConfigSeriesIndex("asc", ["line", "area", "scatter", "bubble"]); var c = i.tooltipUtil.getHoverMarkerSize(t); n[t] && (s = n[t][e][0], r = n[t][e][1]); var d = i.tooltipUtil.getAllMarkers(); if (d !== null) for (var g = 0; g < a.globals.series.length; g++) { var f = n[g]; if (a.globals.comboCharts && f === void 0 && d.splice(g, 0, null), f && f.length) { var x = n[g][e][1], b = void 0; d[g].setAttribute("cx", s); var v = d[g].getAttribute("shape"); if (a.config.chart.type === "rangeArea" && !a.globals.comboCharts) { var y = e + a.globals.series[g].length; b = n[g][y][1], x -= Math.abs(x - b) / 2 } if (x !== null && !isNaN(x) && x < a.globals.gridHeight + c && x + c > 0) { var w = h.getMarkerPath(s, x, v, c); d[g].setAttribute("d", w) } else d[g].setAttribute("d", "") } } this.moveXCrosshairs(s), i.fixedTooltip || this.moveTooltip(s, r || a.globals.gridHeight, c) } }, { - key: "moveStickyTooltipOverBars", value: function (e, t) { - var i = this.w, a = this.ttCtx, s = i.globals.columnSeries ? i.globals.columnSeries.length : i.globals.series.length, r = s >= 2 && s % 2 == 0 ? Math.floor(s / 2) : Math.floor(s / 2) + 1; i.globals.isBarHorizontal && (r = new re(this.ctx).getActiveConfigSeriesIndex("desc") + 1); var n = i.globals.dom.baseEl.querySelector(".apexcharts-bar-series .apexcharts-series[rel='".concat(r, "'] path[j='").concat(e, "'], .apexcharts-candlestick-series .apexcharts-series[rel='").concat(r, "'] path[j='").concat(e, "'], .apexcharts-boxPlot-series .apexcharts-series[rel='").concat(r, "'] path[j='").concat(e, "'], .apexcharts-rangebar-series .apexcharts-series[rel='").concat(r, "'] path[j='").concat(e, "']")); n || typeof t != "number" || (n = i.globals.dom.baseEl.querySelector(".apexcharts-bar-series .apexcharts-series[data\\:realIndex='".concat(t, "'] path[j='").concat(e, `'], - .apexcharts-candlestick-series .apexcharts-series[data\\:realIndex='`).concat(t, "'] path[j='").concat(e, `'], - .apexcharts-boxPlot-series .apexcharts-series[data\\:realIndex='`).concat(t, "'] path[j='").concat(e, `'], - .apexcharts-rangebar-series .apexcharts-series[data\\:realIndex='`).concat(t, "'] path[j='").concat(e, "']"))); var o = n ? parseFloat(n.getAttribute("cx")) : 0, h = n ? parseFloat(n.getAttribute("cy")) : 0, c = n ? parseFloat(n.getAttribute("barWidth")) : 0, d = a.getElGrid().getBoundingClientRect(), g = n && (n.classList.contains("apexcharts-candlestick-area") || n.classList.contains("apexcharts-boxPlot-area")); i.globals.isXNumeric ? (n && !g && (o -= s % 2 != 0 ? c / 2 : 0), n && g && i.globals.comboCharts && (o -= c / 2)) : i.globals.isBarHorizontal || (o = a.xAxisTicksPositions[e - 1] + a.dataPointsDividedWidth / 2, isNaN(o) && (o = a.xAxisTicksPositions[e] - a.dataPointsDividedWidth / 2)), i.globals.isBarHorizontal ? h -= a.tooltipRect.ttHeight : i.config.tooltip.followCursor ? h = a.e.clientY - d.top - a.tooltipRect.ttHeight / 2 : h + a.tooltipRect.ttHeight + 15 > i.globals.gridHeight && (h = i.globals.gridHeight), i.globals.isBarHorizontal || this.moveXCrosshairs(o), a.fixedTooltip || this.moveTooltip(o, h || i.globals.gridHeight) - } - }]), p - }(), $i = function () { function p(e) { F(this, p), this.w = e.w, this.ttCtx = e, this.ctx = e.ctx, this.tooltipPosition = new Wt(e) } return R(p, [{ key: "drawDynamicPoints", value: function () { var e = this.w, t = new X(this.ctx), i = new ye(this.ctx), a = e.globals.dom.baseEl.querySelectorAll(".apexcharts-series"); a = te(a), e.config.chart.stacked && a.sort(function (d, g) { return parseFloat(d.getAttribute("data:realIndex")) - parseFloat(g.getAttribute("data:realIndex")) }); for (var s = 0; s < a.length; s++) { var r = a[s].querySelector(".apexcharts-series-markers-wrap"); if (r !== null) { var n = void 0, o = "apexcharts-marker w".concat((Math.random() + 1).toString(36).substring(4)); e.config.chart.type !== "line" && e.config.chart.type !== "area" || e.globals.comboCharts || e.config.tooltip.intersect || (o += " no-pointer-events"); var h = i.getMarkerConfig({ cssClass: o, seriesIndex: Number(r.getAttribute("data:realIndex")) }); (n = t.drawMarker(0, 0, h)).node.setAttribute("default-marker-size", 0); var c = document.createElementNS(e.globals.SVGNS, "g"); c.classList.add("apexcharts-series-markers"), c.appendChild(n.node), r.appendChild(c) } } } }, { key: "enlargeCurrentPoint", value: function (e, t) { var i = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : null, a = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : null, s = this.w; s.config.chart.type !== "bubble" && this.newPointSize(e, t); var r = t.getAttribute("cx"), n = t.getAttribute("cy"); if (i !== null && a !== null && (r = i, n = a), this.tooltipPosition.moveXCrosshairs(r), !this.fixedTooltip) { if (s.config.chart.type === "radar") { var o = this.ttCtx.getElGrid().getBoundingClientRect(); r = this.ttCtx.e.clientX - o.left } this.tooltipPosition.moveTooltip(r, n, s.config.markers.hover.size) } } }, { key: "enlargePoints", value: function (e) { for (var t = this.w, i = this, a = this.ttCtx, s = e, r = t.globals.dom.baseEl.querySelectorAll(".apexcharts-series:not(.apexcharts-series-collapsed) .apexcharts-marker"), n = t.config.markers.hover.size, o = 0; o < r.length; o++) { var h = r[o].getAttribute("rel"), c = r[o].getAttribute("index"); if (n === void 0 && (n = t.globals.markers.size[c] + t.config.markers.hover.sizeOffset), s === parseInt(h, 10)) { i.newPointSize(s, r[o]); var d = r[o].getAttribute("cx"), g = r[o].getAttribute("cy"); i.tooltipPosition.moveXCrosshairs(d), a.fixedTooltip || i.tooltipPosition.moveTooltip(d, g, n) } else i.oldPointSize(r[o]) } } }, { key: "newPointSize", value: function (e, t) { var i = this.w, a = i.config.markers.hover.size, s = e === 0 ? t.parentNode.firstChild : t.parentNode.lastChild; if (s.getAttribute("default-marker-size") !== "0") { var r = parseInt(s.getAttribute("index"), 10); a === void 0 && (a = i.globals.markers.size[r] + i.config.markers.hover.sizeOffset), a < 0 && (a = 0); var n = this.ttCtx.tooltipUtil.getPathFromPoint(t, a); t.setAttribute("d", n) } } }, { key: "oldPointSize", value: function (e) { var t = parseFloat(e.getAttribute("default-marker-size")), i = this.ttCtx.tooltipUtil.getPathFromPoint(e, t); e.setAttribute("d", i) } }, { key: "resetPointsSize", value: function () { for (var e = this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-series:not(.apexcharts-series-collapsed) .apexcharts-marker"), t = 0; t < e.length; t++) { var i = parseFloat(e[t].getAttribute("default-marker-size")); if (P.isNumber(i) && i >= 0) { var a = this.ttCtx.tooltipUtil.getPathFromPoint(e[t], i); e[t].setAttribute("d", a) } else e[t].setAttribute("d", "M0,0") } } }]), p }(), Ji = function () { function p(e) { F(this, p), this.w = e.w; var t = this.w; this.ttCtx = e, this.isVerticalGroupedRangeBar = !t.globals.isBarHorizontal && t.config.chart.type === "rangeBar" && t.config.plotOptions.bar.rangeBarGroupRows } return R(p, [{ key: "getAttr", value: function (e, t) { return parseFloat(e.target.getAttribute(t)) } }, { key: "handleHeatTreeTooltip", value: function (e) { var t = e.e, i = e.opt, a = e.x, s = e.y, r = e.type, n = this.ttCtx, o = this.w; if (t.target.classList.contains("apexcharts-".concat(r, "-rect"))) { var h = this.getAttr(t, "i"), c = this.getAttr(t, "j"), d = this.getAttr(t, "cx"), g = this.getAttr(t, "cy"), f = this.getAttr(t, "width"), x = this.getAttr(t, "height"); if (n.tooltipLabels.drawSeriesTexts({ ttItems: i.ttItems, i: h, j: c, shared: !1, e: t }), o.globals.capturedSeriesIndex = h, o.globals.capturedDataPointIndex = c, a = d + n.tooltipRect.ttWidth / 2 + f, s = g + n.tooltipRect.ttHeight / 2 - x / 2, n.tooltipPosition.moveXCrosshairs(d + f / 2), a > o.globals.gridWidth / 2 && (a = d - n.tooltipRect.ttWidth / 2 + f), n.w.config.tooltip.followCursor) { var b = o.globals.dom.elWrap.getBoundingClientRect(); a = o.globals.clientX - b.left - (a > o.globals.gridWidth / 2 ? n.tooltipRect.ttWidth : 0), s = o.globals.clientY - b.top - (s > o.globals.gridHeight / 2 ? n.tooltipRect.ttHeight : 0) } } return { x: a, y: s } } }, { key: "handleMarkerTooltip", value: function (e) { var t, i, a = e.e, s = e.opt, r = e.x, n = e.y, o = this.w, h = this.ttCtx; if (a.target.classList.contains("apexcharts-marker")) { var c = parseInt(s.paths.getAttribute("cx"), 10), d = parseInt(s.paths.getAttribute("cy"), 10), g = parseFloat(s.paths.getAttribute("val")); if (i = parseInt(s.paths.getAttribute("rel"), 10), t = parseInt(s.paths.parentNode.parentNode.parentNode.getAttribute("rel"), 10) - 1, h.intersect) { var f = P.findAncestor(s.paths, "apexcharts-series"); f && (t = parseInt(f.getAttribute("data:realIndex"), 10)) } if (h.tooltipLabels.drawSeriesTexts({ ttItems: s.ttItems, i: t, j: i, shared: !h.showOnIntersect && o.config.tooltip.shared, e: a }), a.type === "mouseup" && h.markerClick(a, t, i), o.globals.capturedSeriesIndex = t, o.globals.capturedDataPointIndex = i, r = c, n = d + o.globals.translateY - 1.4 * h.tooltipRect.ttHeight, h.w.config.tooltip.followCursor) { var x = h.getElGrid().getBoundingClientRect(); n = h.e.clientY + o.globals.translateY - x.top } g < 0 && (n = d), h.marker.enlargeCurrentPoint(i, s.paths, r, n) } return { x: r, y: n } } }, { key: "handleBarTooltip", value: function (e) { var t, i, a = e.e, s = e.opt, r = this.w, n = this.ttCtx, o = n.getElTooltip(), h = 0, c = 0, d = 0, g = this.getBarTooltipXY({ e: a, opt: s }); t = g.i; var f = g.j; r.globals.capturedSeriesIndex = t, r.globals.capturedDataPointIndex = f, r.globals.isBarHorizontal && n.tooltipUtil.hasBars() || !r.config.tooltip.shared ? (c = g.x, d = g.y, i = Array.isArray(r.config.stroke.width) ? r.config.stroke.width[t] : r.config.stroke.width, h = c) : r.globals.comboCharts || r.config.tooltip.shared || (h /= 2), isNaN(d) && (d = r.globals.svgHeight - n.tooltipRect.ttHeight); var x = parseInt(s.paths.parentNode.getAttribute("data:realIndex"), 10); if (r.globals.isMultipleYAxis ? r.config.yaxis[x] && r.config.yaxis[x].reversed : r.config.yaxis[0].reversed, c + n.tooltipRect.ttWidth > r.globals.gridWidth ? c -= n.tooltipRect.ttWidth : c < 0 && (c = 0), n.w.config.tooltip.followCursor) { var b = n.getElGrid().getBoundingClientRect(); d = n.e.clientY - b.top } n.tooltip === null && (n.tooltip = r.globals.dom.baseEl.querySelector(".apexcharts-tooltip")), r.config.tooltip.shared || (r.globals.comboBarCount > 0 ? n.tooltipPosition.moveXCrosshairs(h + i / 2) : n.tooltipPosition.moveXCrosshairs(h)), !n.fixedTooltip && (!r.config.tooltip.shared || r.globals.isBarHorizontal && n.tooltipUtil.hasBars()) && (d = d + r.globals.translateY - n.tooltipRect.ttHeight / 2, o.style.left = c + r.globals.translateX + "px", o.style.top = d + "px") } }, { key: "getBarTooltipXY", value: function (e) { var t = this, i = e.e, a = e.opt, s = this.w, r = null, n = this.ttCtx, o = 0, h = 0, c = 0, d = 0, g = 0, f = i.target.classList; if (f.contains("apexcharts-bar-area") || f.contains("apexcharts-candlestick-area") || f.contains("apexcharts-boxPlot-area") || f.contains("apexcharts-rangebar-area")) { var x = i.target, b = x.getBoundingClientRect(), v = a.elGrid.getBoundingClientRect(), y = b.height; g = b.height; var w = b.width, l = parseInt(x.getAttribute("cx"), 10), u = parseInt(x.getAttribute("cy"), 10); d = parseFloat(x.getAttribute("barWidth")); var m = i.type === "touchmove" ? i.touches[0].clientX : i.clientX; r = parseInt(x.getAttribute("j"), 10), o = parseInt(x.parentNode.getAttribute("rel"), 10) - 1; var A = x.getAttribute("data-range-y1"), k = x.getAttribute("data-range-y2"); s.globals.comboCharts && (o = parseInt(x.parentNode.getAttribute("data:realIndex"), 10)); var S = function (C) { return s.globals.isXNumeric ? l - w / 2 : t.isVerticalGroupedRangeBar ? l + w / 2 : l - n.dataPointsDividedWidth + w / 2 }, L = function () { return u - n.dataPointsDividedHeight + y / 2 - n.tooltipRect.ttHeight / 2 }; n.tooltipLabels.drawSeriesTexts({ ttItems: a.ttItems, i: o, j: r, y1: A ? parseInt(A, 10) : null, y2: k ? parseInt(k, 10) : null, shared: !n.showOnIntersect && s.config.tooltip.shared, e: i }), s.config.tooltip.followCursor ? s.globals.isBarHorizontal ? (h = m - v.left + 15, c = L()) : (h = S(), c = i.clientY - v.top - n.tooltipRect.ttHeight / 2 - 15) : s.globals.isBarHorizontal ? ((h = l) < n.xyRatios.baseLineInvertedY && (h = l - n.tooltipRect.ttWidth), c = L()) : (h = S(), c = u) } return { x: h, y: c, barHeight: g, barWidth: d, i: o, j: r } } }]), p }(), Ki = function () { function p(e) { F(this, p), this.w = e.w, this.ttCtx = e } return R(p, [{ key: "drawXaxisTooltip", value: function () { var e = this.w, t = this.ttCtx, i = e.config.xaxis.position === "bottom"; t.xaxisOffY = i ? e.globals.gridHeight + 1 : -e.globals.xAxisHeight - e.config.xaxis.axisTicks.height + 3; var a = i ? "apexcharts-xaxistooltip apexcharts-xaxistooltip-bottom" : "apexcharts-xaxistooltip apexcharts-xaxistooltip-top", s = e.globals.dom.elWrap; t.isXAxisTooltipEnabled && e.globals.dom.baseEl.querySelector(".apexcharts-xaxistooltip") === null && (t.xaxisTooltip = document.createElement("div"), t.xaxisTooltip.setAttribute("class", a + " apexcharts-theme-" + e.config.tooltip.theme), s.appendChild(t.xaxisTooltip), t.xaxisTooltipText = document.createElement("div"), t.xaxisTooltipText.classList.add("apexcharts-xaxistooltip-text"), t.xaxisTooltipText.style.fontFamily = e.config.xaxis.tooltip.style.fontFamily || e.config.chart.fontFamily, t.xaxisTooltipText.style.fontSize = e.config.xaxis.tooltip.style.fontSize, t.xaxisTooltip.appendChild(t.xaxisTooltipText)) } }, { key: "drawYaxisTooltip", value: function () { for (var e = this.w, t = this.ttCtx, i = 0; i < e.config.yaxis.length; i++) { var a = e.config.yaxis[i].opposite || e.config.yaxis[i].crosshairs.opposite; t.yaxisOffX = a ? e.globals.gridWidth + 1 : 1; var s = "apexcharts-yaxistooltip apexcharts-yaxistooltip-".concat(i, a ? " apexcharts-yaxistooltip-right" : " apexcharts-yaxistooltip-left"), r = e.globals.dom.elWrap; e.globals.dom.baseEl.querySelector(".apexcharts-yaxistooltip apexcharts-yaxistooltip-".concat(i)) === null && (t.yaxisTooltip = document.createElement("div"), t.yaxisTooltip.setAttribute("class", s + " apexcharts-theme-" + e.config.tooltip.theme), r.appendChild(t.yaxisTooltip), i === 0 && (t.yaxisTooltipText = []), t.yaxisTooltipText[i] = document.createElement("div"), t.yaxisTooltipText[i].classList.add("apexcharts-yaxistooltip-text"), t.yaxisTooltip.appendChild(t.yaxisTooltipText[i])) } } }, { key: "setXCrosshairWidth", value: function () { var e = this.w, t = this.ttCtx, i = t.getElXCrosshairs(); if (t.xcrosshairsWidth = parseInt(e.config.xaxis.crosshairs.width, 10), e.globals.comboCharts) { var a = e.globals.dom.baseEl.querySelector(".apexcharts-bar-area"); if (a !== null && e.config.xaxis.crosshairs.width === "barWidth") { var s = parseFloat(a.getAttribute("barWidth")); t.xcrosshairsWidth = s } else if (e.config.xaxis.crosshairs.width === "tickWidth") { var r = e.globals.labels.length; t.xcrosshairsWidth = e.globals.gridWidth / r } } else if (e.config.xaxis.crosshairs.width === "tickWidth") { var n = e.globals.labels.length; t.xcrosshairsWidth = e.globals.gridWidth / n } else if (e.config.xaxis.crosshairs.width === "barWidth") { var o = e.globals.dom.baseEl.querySelector(".apexcharts-bar-area"); if (o !== null) { var h = parseFloat(o.getAttribute("barWidth")); t.xcrosshairsWidth = h } else t.xcrosshairsWidth = 1 } e.globals.isBarHorizontal && (t.xcrosshairsWidth = 0), i !== null && t.xcrosshairsWidth > 0 && i.setAttribute("width", t.xcrosshairsWidth) } }, { key: "handleYCrosshair", value: function () { var e = this.w, t = this.ttCtx; t.ycrosshairs = e.globals.dom.baseEl.querySelector(".apexcharts-ycrosshairs"), t.ycrosshairsHidden = e.globals.dom.baseEl.querySelector(".apexcharts-ycrosshairs-hidden") } }, { key: "drawYaxisTooltipText", value: function (e, t, i) { var a = this.ttCtx, s = this.w, r = s.globals, n = r.seriesYAxisMap[e]; if (a.yaxisTooltips[e] && n.length > 0) { var o = r.yLabelFormatters[e], h = a.getElGrid().getBoundingClientRect(), c = n[0], d = 0; i.yRatio.length > 1 && (d = c); var g = (t - h.top) * i.yRatio[d], f = r.maxYArr[c] - r.minYArr[c], x = r.minYArr[c] + (f - g); s.config.yaxis[e].reversed && (x = r.maxYArr[c] - (f - g)), a.tooltipPosition.moveYCrosshairs(t - h.top), a.yaxisTooltipText[e].innerHTML = o(x), a.tooltipPosition.moveYAxisTooltip(e) } } }]), p }(), At = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w; var t = this.w; this.tConfig = t.config.tooltip, this.tooltipUtil = new Nt(this), this.tooltipLabels = new Zi(this), this.tooltipPosition = new Wt(this), this.marker = new $i(this), this.intersect = new Ji(this), this.axesTooltip = new Ki(this), this.showOnIntersect = this.tConfig.intersect, this.showTooltipTitle = this.tConfig.x.show, this.fixedTooltip = this.tConfig.fixed.enabled, this.xaxisTooltip = null, this.yaxisTTEls = null, this.isBarShared = !t.globals.isBarHorizontal && this.tConfig.shared, this.lastHoverTime = Date.now() } return R(p, [{ key: "getElTooltip", value: function (e) { return e || (e = this), e.w.globals.dom.baseEl ? e.w.globals.dom.baseEl.querySelector(".apexcharts-tooltip") : null } }, { key: "getElXCrosshairs", value: function () { return this.w.globals.dom.baseEl.querySelector(".apexcharts-xcrosshairs") } }, { key: "getElGrid", value: function () { return this.w.globals.dom.baseEl.querySelector(".apexcharts-grid") } }, { key: "drawTooltip", value: function (e) { var t = this.w; this.xyRatios = e, this.isXAxisTooltipEnabled = t.config.xaxis.tooltip.enabled && t.globals.axisCharts, this.yaxisTooltips = t.config.yaxis.map(function (r, n) { return !!(r.show && r.tooltip.enabled && t.globals.axisCharts) }), this.allTooltipSeriesGroups = [], t.globals.axisCharts || (this.showTooltipTitle = !1); var i = document.createElement("div"); if (i.classList.add("apexcharts-tooltip"), t.config.tooltip.cssClass && i.classList.add(t.config.tooltip.cssClass), i.classList.add("apexcharts-theme-".concat(this.tConfig.theme)), t.globals.dom.elWrap.appendChild(i), t.globals.axisCharts) { this.axesTooltip.drawXaxisTooltip(), this.axesTooltip.drawYaxisTooltip(), this.axesTooltip.setXCrosshairWidth(), this.axesTooltip.handleYCrosshair(); var a = new Me(this.ctx); this.xAxisTicksPositions = a.getXAxisTicksPositions() } if (!t.globals.comboCharts && !this.tConfig.intersect && t.config.chart.type !== "rangeBar" || this.tConfig.shared || (this.showOnIntersect = !0), t.config.markers.size !== 0 && t.globals.markers.largestSize !== 0 || this.marker.drawDynamicPoints(this), t.globals.collapsedSeries.length !== t.globals.series.length) { this.dataPointsDividedHeight = t.globals.gridHeight / t.globals.dataPoints, this.dataPointsDividedWidth = t.globals.gridWidth / t.globals.dataPoints, this.showTooltipTitle && (this.tooltipTitle = document.createElement("div"), this.tooltipTitle.classList.add("apexcharts-tooltip-title"), this.tooltipTitle.style.fontFamily = this.tConfig.style.fontFamily || t.config.chart.fontFamily, this.tooltipTitle.style.fontSize = this.tConfig.style.fontSize, i.appendChild(this.tooltipTitle)); var s = t.globals.series.length; (t.globals.xyCharts || t.globals.comboCharts) && this.tConfig.shared && (s = this.showOnIntersect ? 1 : t.globals.series.length), this.legendLabels = t.globals.dom.baseEl.querySelectorAll(".apexcharts-legend-text"), this.ttItems = this.createTTElements(s), this.addSVGEvents() } } }, { key: "createTTElements", value: function (e) { for (var t = this, i = this.w, a = [], s = this.getElTooltip(), r = function (o) { var h = document.createElement("div"); h.classList.add("apexcharts-tooltip-series-group", "apexcharts-tooltip-series-group-".concat(o)), h.style.order = i.config.tooltip.inverseOrder ? e - o : o + 1; var c = document.createElement("span"); c.classList.add("apexcharts-tooltip-marker"), c.style.backgroundColor = i.globals.colors[o], h.appendChild(c); var d = document.createElement("div"); d.classList.add("apexcharts-tooltip-text"), d.style.fontFamily = t.tConfig.style.fontFamily || i.config.chart.fontFamily, d.style.fontSize = t.tConfig.style.fontSize, ["y", "goals", "z"].forEach(function (g) { var f = document.createElement("div"); f.classList.add("apexcharts-tooltip-".concat(g, "-group")); var x = document.createElement("span"); x.classList.add("apexcharts-tooltip-text-".concat(g, "-label")), f.appendChild(x); var b = document.createElement("span"); b.classList.add("apexcharts-tooltip-text-".concat(g, "-value")), f.appendChild(b), d.appendChild(f) }), h.appendChild(d), s.appendChild(h), a.push(h) }, n = 0; n < e; n++)r(n); return a } }, { key: "addSVGEvents", value: function () { var e = this.w, t = e.config.chart.type, i = this.getElTooltip(), a = !(t !== "bar" && t !== "candlestick" && t !== "boxPlot" && t !== "rangeBar"), s = t === "area" || t === "line" || t === "scatter" || t === "bubble" || t === "radar", r = e.globals.dom.Paper.node, n = this.getElGrid(); n && (this.seriesBound = n.getBoundingClientRect()); var o, h = [], c = [], d = { hoverArea: r, elGrid: n, tooltipEl: i, tooltipY: h, tooltipX: c, ttItems: this.ttItems }; if (e.globals.axisCharts && (s ? o = e.globals.dom.baseEl.querySelectorAll(".apexcharts-series[data\\:longestSeries='true'] .apexcharts-marker") : a ? o = e.globals.dom.baseEl.querySelectorAll(".apexcharts-series .apexcharts-bar-area, .apexcharts-series .apexcharts-candlestick-area, .apexcharts-series .apexcharts-boxPlot-area, .apexcharts-series .apexcharts-rangebar-area") : t !== "heatmap" && t !== "treemap" || (o = e.globals.dom.baseEl.querySelectorAll(".apexcharts-series .apexcharts-heatmap, .apexcharts-series .apexcharts-treemap")), o && o.length)) for (var g = 0; g < o.length; g++)h.push(o[g].getAttribute("cy")), c.push(o[g].getAttribute("cx")); if (e.globals.xyCharts && !this.showOnIntersect || e.globals.comboCharts && !this.showOnIntersect || a && this.tooltipUtil.hasBars() && this.tConfig.shared) this.addPathsEventListeners([r], d); else if (a && !e.globals.comboCharts || s && this.showOnIntersect) this.addDatapointEventsListeners(d); else if (!e.globals.axisCharts || t === "heatmap" || t === "treemap") { var f = e.globals.dom.baseEl.querySelectorAll(".apexcharts-series"); this.addPathsEventListeners(f, d) } if (this.showOnIntersect) { var x = e.globals.dom.baseEl.querySelectorAll(".apexcharts-line-series .apexcharts-marker, .apexcharts-area-series .apexcharts-marker"); x.length > 0 && this.addPathsEventListeners(x, d), this.tooltipUtil.hasBars() && !this.tConfig.shared && this.addDatapointEventsListeners(d) } } }, { key: "drawFixedTooltipRect", value: function () { var e = this.w, t = this.getElTooltip(), i = t.getBoundingClientRect(), a = i.width + 10, s = i.height + 10, r = this.tConfig.fixed.offsetX, n = this.tConfig.fixed.offsetY, o = this.tConfig.fixed.position.toLowerCase(); return o.indexOf("right") > -1 && (r = r + e.globals.svgWidth - a + 10), o.indexOf("bottom") > -1 && (n = n + e.globals.svgHeight - s - 10), t.style.left = r + "px", t.style.top = n + "px", { x: r, y: n, ttWidth: a, ttHeight: s } } }, { key: "addDatapointEventsListeners", value: function (e) { var t = this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-series-markers .apexcharts-marker, .apexcharts-bar-area, .apexcharts-candlestick-area, .apexcharts-boxPlot-area, .apexcharts-rangebar-area"); this.addPathsEventListeners(t, e) } }, { key: "addPathsEventListeners", value: function (e, t) { for (var i = this, a = function (r) { var n = { paths: e[r], tooltipEl: t.tooltipEl, tooltipY: t.tooltipY, tooltipX: t.tooltipX, elGrid: t.elGrid, hoverArea: t.hoverArea, ttItems: t.ttItems };["mousemove", "mouseup", "touchmove", "mouseout", "touchend"].map(function (o) { return e[r].addEventListener(o, i.onSeriesHover.bind(i, n), { capture: !1, passive: !0 }) }) }, s = 0; s < e.length; s++)a(s) } }, { key: "onSeriesHover", value: function (e, t) { var i = this, a = Date.now() - this.lastHoverTime; a >= 100 ? this.seriesHover(e, t) : (clearTimeout(this.seriesHoverTimeout), this.seriesHoverTimeout = setTimeout(function () { i.seriesHover(e, t) }, 100 - a)) } }, { key: "seriesHover", value: function (e, t) { var i = this; this.lastHoverTime = Date.now(); var a = [], s = this.w; s.config.chart.group && (a = this.ctx.getGroupedCharts()), s.globals.axisCharts && (s.globals.minX === -1 / 0 && s.globals.maxX === 1 / 0 || s.globals.dataPoints === 0) || (a.length ? a.forEach(function (r) { var n = i.getElTooltip(r), o = { paths: e.paths, tooltipEl: n, tooltipY: e.tooltipY, tooltipX: e.tooltipX, elGrid: e.elGrid, hoverArea: e.hoverArea, ttItems: r.w.globals.tooltip.ttItems }; r.w.globals.minX === i.w.globals.minX && r.w.globals.maxX === i.w.globals.maxX && r.w.globals.tooltip.seriesHoverByContext({ chartCtx: r, ttCtx: r.w.globals.tooltip, opt: o, e: t }) }) : this.seriesHoverByContext({ chartCtx: this.ctx, ttCtx: this.w.globals.tooltip, opt: e, e: t })) } }, { key: "seriesHoverByContext", value: function (e) { var t = e.chartCtx, i = e.ttCtx, a = e.opt, s = e.e, r = t.w, n = this.getElTooltip(t); n && (i.tooltipRect = { x: 0, y: 0, ttWidth: n.getBoundingClientRect().width, ttHeight: n.getBoundingClientRect().height }, i.e = s, i.tooltipUtil.hasBars() && !r.globals.comboCharts && !i.isBarShared && this.tConfig.onDatasetHover.highlightDataSeries && new re(t).toggleSeriesOnHover(s, s.target.parentNode), i.fixedTooltip && i.drawFixedTooltipRect(), r.globals.axisCharts ? i.axisChartsTooltips({ e: s, opt: a, tooltipRect: i.tooltipRect }) : i.nonAxisChartsTooltips({ e: s, opt: a, tooltipRect: i.tooltipRect })) } }, { key: "axisChartsTooltips", value: function (e) { var t, i, a = e.e, s = e.opt, r = this.w, n = s.elGrid.getBoundingClientRect(), o = a.type === "touchmove" ? a.touches[0].clientX : a.clientX, h = a.type === "touchmove" ? a.touches[0].clientY : a.clientY; if (this.clientY = h, this.clientX = o, r.globals.capturedSeriesIndex = -1, r.globals.capturedDataPointIndex = -1, h < n.top || h > n.top + n.height) this.handleMouseOut(s); else { if (Array.isArray(this.tConfig.enabledOnSeries) && !r.config.tooltip.shared) { var c = parseInt(s.paths.getAttribute("index"), 10); if (this.tConfig.enabledOnSeries.indexOf(c) < 0) return void this.handleMouseOut(s) } var d = this.getElTooltip(), g = this.getElXCrosshairs(), f = []; r.config.chart.group && (f = this.ctx.getSyncedCharts()); var x = r.globals.xyCharts || r.config.chart.type === "bar" && !r.globals.isBarHorizontal && this.tooltipUtil.hasBars() && this.tConfig.shared || r.globals.comboCharts && this.tooltipUtil.hasBars(); if (a.type === "mousemove" || a.type === "touchmove" || a.type === "mouseup") { if (r.globals.collapsedSeries.length + r.globals.ancillaryCollapsedSeries.length === r.globals.series.length) return; g !== null && g.classList.add("apexcharts-active"); var b = this.yaxisTooltips.filter(function (w) { return w === !0 }); if (this.ycrosshairs !== null && b.length && this.ycrosshairs.classList.add("apexcharts-active"), x && !this.showOnIntersect || f.length > 1) this.handleStickyTooltip(a, o, h, s); else if (r.config.chart.type === "heatmap" || r.config.chart.type === "treemap") { var v = this.intersect.handleHeatTreeTooltip({ e: a, opt: s, x: t, y: i, type: r.config.chart.type }); t = v.x, i = v.y, d.style.left = t + "px", d.style.top = i + "px" } else this.tooltipUtil.hasBars() && this.intersect.handleBarTooltip({ e: a, opt: s }), this.tooltipUtil.hasMarkers() && this.intersect.handleMarkerTooltip({ e: a, opt: s, x: t, y: i }); if (this.yaxisTooltips.length) for (var y = 0; y < r.config.yaxis.length; y++)this.axesTooltip.drawYaxisTooltipText(y, h, this.xyRatios); r.globals.dom.baseEl.classList.add("apexcharts-tooltip-active"), s.tooltipEl.classList.add("apexcharts-active") } else a.type !== "mouseout" && a.type !== "touchend" || this.handleMouseOut(s) } } }, { key: "nonAxisChartsTooltips", value: function (e) { var t = e.e, i = e.opt, a = e.tooltipRect, s = this.w, r = i.paths.getAttribute("rel"), n = this.getElTooltip(), o = s.globals.dom.elWrap.getBoundingClientRect(); if (t.type === "mousemove" || t.type === "touchmove") { s.globals.dom.baseEl.classList.add("apexcharts-tooltip-active"), n.classList.add("apexcharts-active"), this.tooltipLabels.drawSeriesTexts({ ttItems: i.ttItems, i: parseInt(r, 10) - 1, shared: !1 }); var h = s.globals.clientX - o.left - a.ttWidth / 2, c = s.globals.clientY - o.top - a.ttHeight - 10; if (n.style.left = h + "px", n.style.top = c + "px", s.config.legend.tooltipHoverFormatter) { var d = r - 1, g = (0, s.config.legend.tooltipHoverFormatter)(this.legendLabels[d].getAttribute("data:default-text"), { seriesIndex: d, dataPointIndex: d, w: s }); this.legendLabels[d].innerHTML = g } } else t.type !== "mouseout" && t.type !== "touchend" || (n.classList.remove("apexcharts-active"), s.globals.dom.baseEl.classList.remove("apexcharts-tooltip-active"), s.config.legend.tooltipHoverFormatter && this.legendLabels.forEach(function (f) { var x = f.getAttribute("data:default-text"); f.innerHTML = decodeURIComponent(x) })) } }, { key: "handleStickyTooltip", value: function (e, t, i, a) { var s = this.w, r = this.tooltipUtil.getNearestValues({ context: this, hoverArea: a.hoverArea, elGrid: a.elGrid, clientX: t, clientY: i }), n = r.j, o = r.capturedSeries; s.globals.collapsedSeriesIndices.includes(o) && (o = null); var h = a.elGrid.getBoundingClientRect(); if (r.hoverX < 0 || r.hoverX > h.width) this.handleMouseOut(a); else if (o !== null) this.handleStickyCapturedSeries(e, o, a, n); else if (this.tooltipUtil.isXoverlap(n) || s.globals.isBarHorizontal) { var c = s.globals.series.findIndex(function (d, g) { return !s.globals.collapsedSeriesIndices.includes(g) }); this.create(e, this, c, n, a.ttItems) } } }, { key: "handleStickyCapturedSeries", value: function (e, t, i, a) { var s = this.w; if (!this.tConfig.shared && s.globals.series[t][a] === null) return void this.handleMouseOut(i); if (s.globals.series[t][a] !== void 0) this.tConfig.shared && this.tooltipUtil.isXoverlap(a) && this.tooltipUtil.isInitialSeriesSameLen() ? this.create(e, this, t, a, i.ttItems) : this.create(e, this, t, a, i.ttItems, !1); else if (this.tooltipUtil.isXoverlap(a)) { var r = s.globals.series.findIndex(function (n, o) { return !s.globals.collapsedSeriesIndices.includes(o) }); this.create(e, this, r, a, i.ttItems) } } }, { key: "deactivateHoverFilter", value: function () { for (var e = this.w, t = new X(this.ctx), i = e.globals.dom.Paper.select(".apexcharts-bar-area"), a = 0; a < i.length; a++)t.pathMouseLeave(i[a]) } }, { key: "handleMouseOut", value: function (e) { var t = this.w, i = this.getElXCrosshairs(); if (t.globals.dom.baseEl.classList.remove("apexcharts-tooltip-active"), e.tooltipEl.classList.remove("apexcharts-active"), this.deactivateHoverFilter(), t.config.chart.type !== "bubble" && this.marker.resetPointsSize(), i !== null && i.classList.remove("apexcharts-active"), this.ycrosshairs !== null && this.ycrosshairs.classList.remove("apexcharts-active"), this.isXAxisTooltipEnabled && this.xaxisTooltip.classList.remove("apexcharts-active"), this.yaxisTooltips.length) { this.yaxisTTEls === null && (this.yaxisTTEls = t.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxistooltip")); for (var a = 0; a < this.yaxisTTEls.length; a++)this.yaxisTTEls[a].classList.remove("apexcharts-active") } t.config.legend.tooltipHoverFormatter && this.legendLabels.forEach(function (s) { var r = s.getAttribute("data:default-text"); s.innerHTML = decodeURIComponent(r) }) } }, { key: "markerClick", value: function (e, t, i) { var a = this.w; typeof a.config.chart.events.markerClick == "function" && a.config.chart.events.markerClick(e, this.ctx, { seriesIndex: t, dataPointIndex: i, w: a }), this.ctx.events.fireEvent("markerClick", [e, this.ctx, { seriesIndex: t, dataPointIndex: i, w: a }]) } }, { key: "create", value: function (e, t, i, a, s) { var r, n, o, h, c, d, g, f, x, b, v, y, w, l, u, m, A = arguments.length > 5 && arguments[5] !== void 0 ? arguments[5] : null, k = this.w, S = t; e.type === "mouseup" && this.markerClick(e, i, a), A === null && (A = this.tConfig.shared); var L = this.tooltipUtil.hasMarkers(i), C = this.tooltipUtil.getElBars(); if (k.config.legend.tooltipHoverFormatter) { var I = k.config.legend.tooltipHoverFormatter, z = Array.from(this.legendLabels); z.forEach(function (q) { var Z = q.getAttribute("data:default-text"); q.innerHTML = decodeURIComponent(Z) }); for (var M = 0; M < z.length; M++) { var T = z[M], E = parseInt(T.getAttribute("i"), 10), O = decodeURIComponent(T.getAttribute("data:default-text")), D = I(O, { seriesIndex: A ? E : i, dataPointIndex: a, w: k }); if (A) T.innerHTML = k.globals.collapsedSeriesIndices.indexOf(E) < 0 ? D : O; else if (T.innerHTML = E === i ? D : O, i === E) break } } var H = Y(Y({ ttItems: s, i, j: a }, ((r = k.globals.seriesRange) === null || r === void 0 || (n = r[i]) === null || n === void 0 || (o = n[a]) === null || o === void 0 || (h = o.y[0]) === null || h === void 0 ? void 0 : h.y1) !== void 0 && { y1: (c = k.globals.seriesRange) === null || c === void 0 || (d = c[i]) === null || d === void 0 || (g = d[a]) === null || g === void 0 || (f = g.y[0]) === null || f === void 0 ? void 0 : f.y1 }), ((x = k.globals.seriesRange) === null || x === void 0 || (b = x[i]) === null || b === void 0 || (v = b[a]) === null || v === void 0 || (y = v.y[0]) === null || y === void 0 ? void 0 : y.y2) !== void 0 && { y2: (w = k.globals.seriesRange) === null || w === void 0 || (l = w[i]) === null || l === void 0 || (u = l[a]) === null || u === void 0 || (m = u.y[0]) === null || m === void 0 ? void 0 : m.y2 }); if (A) { if (S.tooltipLabels.drawSeriesTexts(Y(Y({}, H), {}, { shared: !this.showOnIntersect && this.tConfig.shared })), L) k.globals.markers.largestSize > 0 ? S.marker.enlargePoints(a) : S.tooltipPosition.moveDynamicPointsOnHover(a); else if (this.tooltipUtil.hasBars() && (this.barSeriesHeight = this.tooltipUtil.getBarsHeight(C), this.barSeriesHeight > 0)) { var W = new X(this.ctx), N = k.globals.dom.Paper.select(".apexcharts-bar-area[j='".concat(a, "']")); this.deactivateHoverFilter(), this.tooltipPosition.moveStickyTooltipOverBars(a, i); for (var B = 0; B < N.length; B++)W.pathMouseEnter(N[B]) } } else S.tooltipLabels.drawSeriesTexts(Y({ shared: !1 }, H)), this.tooltipUtil.hasBars() && S.tooltipPosition.moveStickyTooltipOverBars(a, i), L && S.tooltipPosition.moveMarkers(i, a) } }]), p }(), Qi = function () { function p(e) { F(this, p), this.w = e.w, this.barCtx = e, this.totalFormatter = this.w.config.plotOptions.bar.dataLabels.total.formatter, this.totalFormatter || (this.totalFormatter = this.w.config.dataLabels.formatter) } return R(p, [{ key: "handleBarDataLabels", value: function (e) { var t, i, a = e.x, s = e.y, r = e.y1, n = e.y2, o = e.i, h = e.j, c = e.realIndex, d = e.columnGroupIndex, g = e.series, f = e.barHeight, x = e.barWidth, b = e.barXPosition, v = e.barYPosition, y = e.visibleSeries, w = e.renderedPath, l = this.w, u = new X(this.barCtx.ctx), m = Array.isArray(this.barCtx.strokeWidth) ? this.barCtx.strokeWidth[c] : this.barCtx.strokeWidth; l.globals.isXNumeric && !l.globals.isBarHorizontal ? (t = a + parseFloat(x * (y + 1)), i = s + parseFloat(f * (y + 1)) - m) : (t = a + parseFloat(x * y), i = s + parseFloat(f * y)); var A, k = null, S = a, L = s, C = {}, I = l.config.dataLabels, z = this.barCtx.barOptions.dataLabels, M = this.barCtx.barOptions.dataLabels.total; v !== void 0 && this.barCtx.isRangeBar && (i = v, L = v), b !== void 0 && this.barCtx.isVerticalGroupedRangeBar && (t = b, S = b); var T = I.offsetX, E = I.offsetY, O = { width: 0, height: 0 }; if (l.config.dataLabels.enabled) { var D = l.globals.series[o][h]; O = u.getTextRects(l.config.dataLabels.formatter ? l.config.dataLabels.formatter(D, Y(Y({}, l), {}, { seriesIndex: o, dataPointIndex: h, w: l })) : l.globals.yLabelFormatters[0](D), parseFloat(I.style.fontSize)) } var H = { x: a, y: s, i: o, j: h, realIndex: c, columnGroupIndex: d, renderedPath: w, bcx: t, bcy: i, barHeight: f, barWidth: x, textRects: O, strokeWidth: m, dataLabelsX: S, dataLabelsY: L, dataLabelsConfig: I, barDataLabelsConfig: z, barTotalDataLabelsConfig: M, offX: T, offY: E }; return C = this.barCtx.isHorizontal ? this.calculateBarsDataLabelsPosition(H) : this.calculateColumnsDataLabelsPosition(H), w.attr({ cy: C.bcy, cx: C.bcx, j: h, val: l.globals.series[o][h], barHeight: f, barWidth: x }), A = this.drawCalculatedDataLabels({ x: C.dataLabelsX, y: C.dataLabelsY, val: this.barCtx.isRangeBar ? [r, n] : l.config.chart.stackType === "100%" ? g[c][h] : l.globals.series[c][h], i: c, j: h, barWidth: x, barHeight: f, textRects: O, dataLabelsConfig: I }), l.config.chart.stacked && M.enabled && (k = this.drawTotalDataLabels({ x: C.totalDataLabelsX, y: C.totalDataLabelsY, barWidth: x, barHeight: f, realIndex: c, textAnchor: C.totalDataLabelsAnchor, val: this.getStackedTotalDataLabel({ realIndex: c, j: h }), dataLabelsConfig: I, barTotalDataLabelsConfig: M })), { dataLabels: A, totalDataLabels: k } } }, { key: "getStackedTotalDataLabel", value: function (e) { var t = e.realIndex, i = e.j, a = this.w, s = this.barCtx.stackedSeriesTotals[i]; return this.totalFormatter && (s = this.totalFormatter(s, Y(Y({}, a), {}, { seriesIndex: t, dataPointIndex: i, w: a }))), s } }, { key: "calculateColumnsDataLabelsPosition", value: function (e) { var t = this.w, i = e.i, a = e.j, s = e.realIndex; e.columnGroupIndex; var r, n, o = e.y, h = e.bcx, c = e.barWidth, d = e.barHeight, g = e.textRects, f = e.dataLabelsX, x = e.dataLabelsY, b = e.dataLabelsConfig, v = e.barDataLabelsConfig, y = e.barTotalDataLabelsConfig, w = e.strokeWidth, l = e.offX, u = e.offY, m = h; d = Math.abs(d); var A = t.config.plotOptions.bar.dataLabels.orientation === "vertical", k = this.barCtx.barHelpers.getZeroValueEncounters({ i, j: a }).zeroEncounters; h -= w / 2; var S = t.globals.gridWidth / t.globals.dataPoints; this.barCtx.isVerticalGroupedRangeBar ? f += c / 2 : (f = t.globals.isXNumeric ? h - c / 2 + l : h - S + c / 2 + l, k > 0 && t.config.plotOptions.bar.hideZeroBarsWhenGrouped && (f -= c * k)), A && (f = f + g.height / 2 - w / 2 - 2); var L = t.globals.series[i][a] < 0, C = o; switch (this.barCtx.isReversed && (C = o + (L ? d : -d)), v.position) { case "center": x = A ? L ? C - d / 2 + u : C + d / 2 - u : L ? C - d / 2 + g.height / 2 + u : C + d / 2 + g.height / 2 - u; break; case "bottom": x = A ? L ? C - d + u : C + d - u : L ? C - d + g.height + w + u : C + d - g.height / 2 + w - u; break; case "top": x = A ? L ? C + u : C - u : L ? C - g.height / 2 - u : C + g.height + u }if (this.barCtx.lastActiveBarSerieIndex === s && y.enabled) { var I = new X(this.barCtx.ctx).getTextRects(this.getStackedTotalDataLabel({ realIndex: s, j: a }), b.fontSize); r = L ? C - I.height / 2 - u - y.offsetY + 18 : C + I.height + u + y.offsetY - 18; var z = S; n = m + (t.globals.isXNumeric ? -c * t.globals.barGroups.length / 2 : t.globals.barGroups.length * c / 2 - (t.globals.barGroups.length - 1) * c - z) + y.offsetX } return t.config.chart.stacked || (x < 0 ? x = 0 + w : x + g.height / 3 > t.globals.gridHeight && (x = t.globals.gridHeight - w)), { bcx: h, bcy: o, dataLabelsX: f, dataLabelsY: x, totalDataLabelsX: n, totalDataLabelsY: r, totalDataLabelsAnchor: "middle" } } }, { key: "calculateBarsDataLabelsPosition", value: function (e) { var t = this.w, i = e.x, a = e.i, s = e.j, r = e.realIndex, n = e.bcy, o = e.barHeight, h = e.barWidth, c = e.textRects, d = e.dataLabelsX, g = e.strokeWidth, f = e.dataLabelsConfig, x = e.barDataLabelsConfig, b = e.barTotalDataLabelsConfig, v = e.offX, y = e.offY, w = t.globals.gridHeight / t.globals.dataPoints; h = Math.abs(h); var l, u, m = n - (this.barCtx.isRangeBar ? 0 : w) + o / 2 + c.height / 2 + y - 3, A = "start", k = t.globals.series[a][s] < 0, S = i; switch (this.barCtx.isReversed && (S = i + (k ? -h : h), A = k ? "start" : "end"), x.position) { case "center": d = k ? S + h / 2 - v : Math.max(c.width / 2, S - h / 2) + v; break; case "bottom": d = k ? S + h - g - v : S - h + g + v; break; case "top": d = k ? S - g - v : S - g + v }if (this.barCtx.lastActiveBarSerieIndex === r && b.enabled) { var L = new X(this.barCtx.ctx).getTextRects(this.getStackedTotalDataLabel({ realIndex: r, j: s }), f.fontSize); k ? (l = S - g - v - b.offsetX, A = "end") : l = S + v + b.offsetX + (this.barCtx.isReversed ? -(h + g) : g), u = m - c.height / 2 + L.height / 2 + b.offsetY + g } return t.config.chart.stacked || (f.textAnchor === "start" ? d - c.width < 0 ? d = k ? c.width + g : g : d + c.width > t.globals.gridWidth && (d = k ? t.globals.gridWidth - g : t.globals.gridWidth - c.width - g) : f.textAnchor === "middle" ? d - c.width / 2 < 0 ? d = c.width / 2 + g : d + c.width / 2 > t.globals.gridWidth && (d = t.globals.gridWidth - c.width / 2 - g) : f.textAnchor === "end" && (d < 1 ? d = c.width + g : d + 1 > t.globals.gridWidth && (d = t.globals.gridWidth - c.width - g))), { bcx: i, bcy: n, dataLabelsX: d, dataLabelsY: m, totalDataLabelsX: l, totalDataLabelsY: u, totalDataLabelsAnchor: A } } }, { key: "drawCalculatedDataLabels", value: function (e) { var t = e.x, i = e.y, a = e.val, s = e.i, r = e.j, n = e.textRects, o = e.barHeight, h = e.barWidth, c = e.dataLabelsConfig, d = this.w, g = "rotate(0)"; d.config.plotOptions.bar.dataLabels.orientation === "vertical" && (g = "rotate(-90, ".concat(t, ", ").concat(i, ")")); var f = new be(this.barCtx.ctx), x = new X(this.barCtx.ctx), b = c.formatter, v = null, y = d.globals.collapsedSeriesIndices.indexOf(s) > -1; if (c.enabled && !y) { v = x.group({ class: "apexcharts-data-labels", transform: g }); var w = ""; a !== void 0 && (w = b(a, Y(Y({}, d), {}, { seriesIndex: s, dataPointIndex: r, w: d }))), !a && d.config.plotOptions.bar.hideZeroBarsWhenGrouped && (w = ""); var l = d.globals.series[s][r] < 0, u = d.config.plotOptions.bar.dataLabels.position; d.config.plotOptions.bar.dataLabels.orientation === "vertical" && (u === "top" && (c.textAnchor = l ? "end" : "start"), u === "center" && (c.textAnchor = "middle"), u === "bottom" && (c.textAnchor = l ? "end" : "start")), this.barCtx.isRangeBar && this.barCtx.barOptions.dataLabels.hideOverflowingLabels && h < x.getTextRects(w, parseFloat(c.style.fontSize)).width && (w = ""), d.config.chart.stacked && this.barCtx.barOptions.dataLabels.hideOverflowingLabels && (this.barCtx.isHorizontal ? n.width / 1.6 > Math.abs(h) && (w = "") : n.height / 1.6 > Math.abs(o) && (w = "")); var m = Y({}, c); this.barCtx.isHorizontal && a < 0 && (c.textAnchor === "start" ? m.textAnchor = "end" : c.textAnchor === "end" && (m.textAnchor = "start")), f.plotDataLabelsText({ x: t, y: i, text: w, i: s, j: r, parent: v, dataLabelsConfig: m, alwaysDrawDataLabel: !0, offsetCorrection: !0 }) } return v } }, { key: "drawTotalDataLabels", value: function (e) { var t = e.x, i = e.y, a = e.val, s = e.realIndex, r = e.textAnchor, n = e.barTotalDataLabelsConfig; this.w; var o, h = new X(this.barCtx.ctx); return n.enabled && t !== void 0 && i !== void 0 && this.barCtx.lastActiveBarSerieIndex === s && (o = h.drawText({ x: t, y: i, foreColor: n.style.color, text: a, textAnchor: r, fontFamily: n.style.fontFamily, fontSize: n.style.fontSize, fontWeight: n.style.fontWeight })), o } }]), p }(), ea = function () { function p(e) { F(this, p), this.w = e.w, this.barCtx = e } return R(p, [{ key: "initVariables", value: function (e) { var t = this.w; this.barCtx.series = e, this.barCtx.totalItems = 0, this.barCtx.seriesLen = 0, this.barCtx.visibleI = -1, this.barCtx.visibleItems = 1; for (var i = 0; i < e.length; i++)if (e[i].length > 0 && (this.barCtx.seriesLen = this.barCtx.seriesLen + 1, this.barCtx.totalItems += e[i].length), t.globals.isXNumeric) for (var a = 0; a < e[i].length; a++)t.globals.seriesX[i][a] > t.globals.minX && t.globals.seriesX[i][a] < t.globals.maxX && this.barCtx.visibleItems++; else this.barCtx.visibleItems = t.globals.dataPoints; this.barCtx.seriesLen === 0 && (this.barCtx.seriesLen = 1), this.barCtx.zeroSerieses = [], t.globals.comboCharts || this.checkZeroSeries({ series: e }) } }, { key: "initialPositions", value: function () { var e, t, i, a, s, r, n, o, h = this.w, c = h.globals.dataPoints; this.barCtx.isRangeBar && (c = h.globals.labels.length); var d = this.barCtx.seriesLen; if (h.config.plotOptions.bar.rangeBarGroupRows && (d = 1), this.barCtx.isHorizontal) s = (i = h.globals.gridHeight / c) / d, h.globals.isXNumeric && (s = (i = h.globals.gridHeight / this.barCtx.totalItems) / this.barCtx.seriesLen), s = s * parseInt(this.barCtx.barOptions.barHeight, 10) / 100, String(this.barCtx.barOptions.barHeight).indexOf("%") === -1 && (s = parseInt(this.barCtx.barOptions.barHeight, 10)), o = this.barCtx.baseLineInvertedY + h.globals.padHorizontal + (this.barCtx.isReversed ? h.globals.gridWidth : 0) - (this.barCtx.isReversed ? 2 * this.barCtx.baseLineInvertedY : 0), this.barCtx.isFunnel && (o = h.globals.gridWidth / 2), t = (i - s * this.barCtx.seriesLen) / 2; else { if (a = h.globals.gridWidth / this.barCtx.visibleItems, h.config.xaxis.convertedCatToNumeric && (a = h.globals.gridWidth / h.globals.dataPoints), r = a / d * parseInt(this.barCtx.barOptions.columnWidth, 10) / 100, h.globals.isXNumeric) { var g = this.barCtx.xRatio; h.globals.minXDiff && h.globals.minXDiff !== .5 && h.globals.minXDiff / g > 0 && (a = h.globals.minXDiff / g), (r = a / d * parseInt(this.barCtx.barOptions.columnWidth, 10) / 100) < 1 && (r = 1) } String(this.barCtx.barOptions.columnWidth).indexOf("%") === -1 && (r = parseInt(this.barCtx.barOptions.columnWidth, 10)), n = h.globals.gridHeight - this.barCtx.baseLineY[this.barCtx.translationsIndex] - (this.barCtx.isReversed ? h.globals.gridHeight : 0) + (this.barCtx.isReversed ? 2 * this.barCtx.baseLineY[this.barCtx.translationsIndex] : 0), e = h.globals.padHorizontal + (a - r * this.barCtx.seriesLen) / 2 } return h.globals.barHeight = s, h.globals.barWidth = r, { x: e, y: t, yDivision: i, xDivision: a, barHeight: s, barWidth: r, zeroH: n, zeroW: o } } }, { key: "initializeStackedPrevVars", value: function (e) { e.w.globals.seriesGroups.forEach(function (t) { e[t] || (e[t] = {}), e[t].prevY = [], e[t].prevX = [], e[t].prevYF = [], e[t].prevXF = [], e[t].prevYVal = [], e[t].prevXVal = [] }) } }, { key: "initializeStackedXYVars", value: function (e) { e.w.globals.seriesGroups.forEach(function (t) { e[t] || (e[t] = {}), e[t].xArrj = [], e[t].xArrjF = [], e[t].xArrjVal = [], e[t].yArrj = [], e[t].yArrjF = [], e[t].yArrjVal = [] }) } }, { key: "getPathFillColor", value: function (e, t, i, a) { var s, r, n, o, h, c = this.w, d = this.barCtx.ctx.fill, g = null, f = this.barCtx.barOptions.distributed ? i : t; return this.barCtx.barOptions.colors.ranges.length > 0 && this.barCtx.barOptions.colors.ranges.map(function (x) { e[t][i] >= x.from && e[t][i] <= x.to && (g = x.color) }), (s = c.config.series[t].data[i]) !== null && s !== void 0 && s.fillColor && (g = c.config.series[t].data[i].fillColor), d.fillPath({ seriesNumber: this.barCtx.barOptions.distributed ? f : a, dataPointIndex: i, color: g, value: e[t][i], fillConfig: (r = c.config.series[t].data[i]) === null || r === void 0 ? void 0 : r.fill, fillType: (n = c.config.series[t].data[i]) !== null && n !== void 0 && (o = n.fill) !== null && o !== void 0 && o.type ? (h = c.config.series[t].data[i]) === null || h === void 0 ? void 0 : h.fill.type : Array.isArray(c.config.fill.type) ? c.config.fill.type[a] : c.config.fill.type }) } }, { key: "getStrokeWidth", value: function (e, t, i) { var a = 0, s = this.w; return this.barCtx.series[e][t] === void 0 || this.barCtx.series[e][t] === null ? this.barCtx.isNullValue = !0 : this.barCtx.isNullValue = !1, s.config.stroke.show && (this.barCtx.isNullValue || (a = Array.isArray(this.barCtx.strokeWidth) ? this.barCtx.strokeWidth[i] : this.barCtx.strokeWidth)), a } }, { key: "shouldApplyRadius", value: function (e) { var t = this.w, i = !1; return t.config.plotOptions.bar.borderRadius > 0 && (t.config.chart.stacked && t.config.plotOptions.bar.borderRadiusWhenStacked === "last" ? this.barCtx.lastActiveBarSerieIndex === e && (i = !0) : i = !0), i } }, { key: "barBackground", value: function (e) { var t = e.j, i = e.i, a = e.x1, s = e.x2, r = e.y1, n = e.y2, o = e.elSeries, h = this.w, c = new X(this.barCtx.ctx), d = new re(this.barCtx.ctx).getActiveConfigSeriesIndex(); if (this.barCtx.barOptions.colors.backgroundBarColors.length > 0 && d === i) { t >= this.barCtx.barOptions.colors.backgroundBarColors.length && (t %= this.barCtx.barOptions.colors.backgroundBarColors.length); var g = this.barCtx.barOptions.colors.backgroundBarColors[t], f = c.drawRect(a !== void 0 ? a : 0, r !== void 0 ? r : 0, s !== void 0 ? s : h.globals.gridWidth, n !== void 0 ? n : h.globals.gridHeight, this.barCtx.barOptions.colors.backgroundBarRadius, g, this.barCtx.barOptions.colors.backgroundBarOpacity); o.add(f), f.node.classList.add("apexcharts-backgroundBar") } } }, { key: "getColumnPaths", value: function (e) { var t, i = e.barWidth, a = e.barXPosition, s = e.y1, r = e.y2, n = e.strokeWidth, o = e.seriesGroup, h = e.realIndex, c = e.i, d = e.j, g = e.w, f = new X(this.barCtx.ctx); (n = Array.isArray(n) ? n[h] : n) || (n = 0); var x = i, b = a; (t = g.config.series[h].data[d]) !== null && t !== void 0 && t.columnWidthOffset && (b = a - g.config.series[h].data[d].columnWidthOffset / 2, x = i + g.config.series[h].data[d].columnWidthOffset); var v = n / 2, y = b + v, w = b + x - v; s += .001 - v, r += .001 + v; var l = f.move(y, s), u = f.move(y, s), m = f.line(w, s); if (g.globals.previousPaths.length > 0 && (u = this.barCtx.getPreviousPath(h, d, !1)), l = l + f.line(y, r) + f.line(w, r) + f.line(w, s) + (g.config.plotOptions.bar.borderRadiusApplication === "around" ? " Z" : " z"), u = u + f.line(y, s) + m + m + m + m + m + f.line(y, s) + (g.config.plotOptions.bar.borderRadiusApplication === "around" ? " Z" : " z"), this.shouldApplyRadius(h) && (l = f.roundPathCorners(l, g.config.plotOptions.bar.borderRadius)), g.config.chart.stacked) { var A = this.barCtx; (A = this.barCtx[o]).yArrj.push(r - v), A.yArrjF.push(Math.abs(s - r + n)), A.yArrjVal.push(this.barCtx.series[c][d]) } return { pathTo: l, pathFrom: u } } }, { key: "getBarpaths", value: function (e) { var t, i = e.barYPosition, a = e.barHeight, s = e.x1, r = e.x2, n = e.strokeWidth, o = e.seriesGroup, h = e.realIndex, c = e.i, d = e.j, g = e.w, f = new X(this.barCtx.ctx); (n = Array.isArray(n) ? n[h] : n) || (n = 0); var x = i, b = a; (t = g.config.series[h].data[d]) !== null && t !== void 0 && t.barHeightOffset && (x = i - g.config.series[h].data[d].barHeightOffset / 2, b = a + g.config.series[h].data[d].barHeightOffset); var v = n / 2, y = x + v, w = x + b - v; s += .001 - v, r += .001 + v; var l = f.move(s, y), u = f.move(s, y); g.globals.previousPaths.length > 0 && (u = this.barCtx.getPreviousPath(h, d, !1)); var m = f.line(s, w); if (l = l + f.line(r, y) + f.line(r, w) + m + (g.config.plotOptions.bar.borderRadiusApplication === "around" ? " Z" : " z"), u = u + f.line(s, y) + m + m + m + m + m + f.line(s, y) + (g.config.plotOptions.bar.borderRadiusApplication === "around" ? " Z" : " z"), this.shouldApplyRadius(h) && (l = f.roundPathCorners(l, g.config.plotOptions.bar.borderRadius)), g.config.chart.stacked) { var A = this.barCtx; (A = this.barCtx[o]).xArrj.push(r + v), A.xArrjF.push(Math.abs(s - r)), A.xArrjVal.push(this.barCtx.series[c][d]) } return { pathTo: l, pathFrom: u } } }, { key: "checkZeroSeries", value: function (e) { for (var t = e.series, i = this.w, a = 0; a < t.length; a++) { for (var s = 0, r = 0; r < t[i.globals.maxValsInArrayIndex].length; r++)s += t[a][r]; s === 0 && this.barCtx.zeroSerieses.push(a) } } }, { key: "getXForValue", value: function (e, t) { var i = !(arguments.length > 2 && arguments[2] !== void 0) || arguments[2] ? t : null; return e != null && (i = t + e / this.barCtx.invertedYRatio - 2 * (this.barCtx.isReversed ? e / this.barCtx.invertedYRatio : 0)), i } }, { key: "getYForValue", value: function (e, t, i) { var a = !(arguments.length > 3 && arguments[3] !== void 0) || arguments[3] ? t : null; return e != null && (a = t - e / this.barCtx.yRatio[i] + 2 * (this.barCtx.isReversed ? e / this.barCtx.yRatio[i] : 0)), a } }, { key: "getGoalValues", value: function (e, t, i, a, s, r) { var n = this, o = this.w, h = [], c = function (f, x) { var b; h.push((Oe(b = {}, e, e === "x" ? n.getXForValue(f, t, !1) : n.getYForValue(f, i, r, !1)), Oe(b, "attrs", x), b)) }; if (o.globals.seriesGoals[a] && o.globals.seriesGoals[a][s] && Array.isArray(o.globals.seriesGoals[a][s]) && o.globals.seriesGoals[a][s].forEach(function (f) { c(f.value, f) }), this.barCtx.barOptions.isDumbbell && o.globals.seriesRange.length) { var d = this.barCtx.barOptions.dumbbellColors ? this.barCtx.barOptions.dumbbellColors : o.globals.colors, g = { strokeHeight: e === "x" ? 0 : o.globals.markers.size[a], strokeWidth: e === "x" ? o.globals.markers.size[a] : 0, strokeDashArray: 0, strokeLineCap: "round", strokeColor: Array.isArray(d[a]) ? d[a][0] : d[a] }; c(o.globals.seriesRangeStart[a][s], g), c(o.globals.seriesRangeEnd[a][s], Y(Y({}, g), {}, { strokeColor: Array.isArray(d[a]) ? d[a][1] : d[a] })) } return h } }, { key: "drawGoalLine", value: function (e) { var t = e.barXPosition, i = e.barYPosition, a = e.goalX, s = e.goalY, r = e.barWidth, n = e.barHeight, o = new X(this.barCtx.ctx), h = o.group({ className: "apexcharts-bar-goals-groups" }); h.node.classList.add("apexcharts-element-hidden"), this.barCtx.w.globals.delayedElements.push({ el: h.node }), h.attr("clip-path", "url(#gridRectMarkerMask".concat(this.barCtx.w.globals.cuid, ")")); var c = null; return this.barCtx.isHorizontal ? Array.isArray(a) && a.forEach(function (d) { if (d.x >= -1 && d.x <= o.w.globals.gridWidth + 1) { var g = d.attrs.strokeHeight !== void 0 ? d.attrs.strokeHeight : n / 2, f = i + g + n / 2; c = o.drawLine(d.x, f - 2 * g, d.x, f, d.attrs.strokeColor ? d.attrs.strokeColor : void 0, d.attrs.strokeDashArray, d.attrs.strokeWidth ? d.attrs.strokeWidth : 2, d.attrs.strokeLineCap), h.add(c) } }) : Array.isArray(s) && s.forEach(function (d) { if (d.y >= -1 && d.y <= o.w.globals.gridHeight + 1) { var g = d.attrs.strokeWidth !== void 0 ? d.attrs.strokeWidth : r / 2, f = t + g + r / 2; c = o.drawLine(f - 2 * g, d.y, f, d.y, d.attrs.strokeColor ? d.attrs.strokeColor : void 0, d.attrs.strokeDashArray, d.attrs.strokeHeight ? d.attrs.strokeHeight : 2, d.attrs.strokeLineCap), h.add(c) } }), h } }, { key: "drawBarShadow", value: function (e) { var t = e.prevPaths, i = e.currPaths, a = e.color, s = this.w, r = t.x, n = t.x1, o = t.barYPosition, h = i.x, c = i.x1, d = i.barYPosition, g = o + i.barHeight, f = new X(this.barCtx.ctx), x = new P, b = f.move(n, g) + f.line(r, g) + f.line(h, d) + f.line(c, d) + f.line(n, g) + (s.config.plotOptions.bar.borderRadiusApplication === "around" ? " Z" : " z"); return f.drawPath({ d: b, fill: x.shadeColor(.5, P.rgb2hex(a)), stroke: "none", strokeWidth: 0, fillOpacity: 1, classes: "apexcharts-bar-shadows" }) } }, { key: "getZeroValueEncounters", value: function (e) { var t, i = e.i, a = e.j, s = this.w, r = 0, n = 0; return (s.config.plotOptions.bar.horizontal ? s.globals.series.map(function (o, h) { return h }) : ((t = s.globals.columnSeries) === null || t === void 0 ? void 0 : t.i.map(function (o) { return o })) || []).forEach(function (o) { var h = s.globals.seriesPercent[o][a]; h && r++, o < i && h === 0 && n++ }), { nonZeroColumns: r, zeroEncounters: n } } }, { key: "getGroupIndex", value: function (e) { var t = this.w, i = t.globals.seriesGroups.findIndex(function (r) { return r.indexOf(t.globals.seriesNames[e]) > -1 }), a = this.barCtx.columnGroupIndices, s = a.indexOf(i); return s < 0 && (a.push(i), s = a.length - 1), { groupIndex: i, columnGroupIndex: s } } }]), p }(), me = function () { function p(e, t) { F(this, p), this.ctx = e, this.w = e.w; var i = this.w; this.barOptions = i.config.plotOptions.bar, this.isHorizontal = this.barOptions.horizontal, this.strokeWidth = i.config.stroke.width, this.isNullValue = !1, this.isRangeBar = i.globals.seriesRange.length && this.isHorizontal, this.isVerticalGroupedRangeBar = !i.globals.isBarHorizontal && i.globals.seriesRange.length && i.config.plotOptions.bar.rangeBarGroupRows, this.isFunnel = this.barOptions.isFunnel, this.xyRatios = t, this.xyRatios !== null && (this.xRatio = t.xRatio, this.yRatio = t.yRatio, this.invertedXRatio = t.invertedXRatio, this.invertedYRatio = t.invertedYRatio, this.baseLineY = t.baseLineY, this.baseLineInvertedY = t.baseLineInvertedY), this.yaxisIndex = 0, this.translationsIndex = 0, this.seriesLen = 0, this.pathArr = []; var a = new re(this.ctx); this.lastActiveBarSerieIndex = a.getActiveConfigSeriesIndex("desc", ["bar", "column"]), this.columnGroupIndices = []; var s = a.getBarSeriesIndices(), r = new $(this.ctx); this.stackedSeriesTotals = r.getStackedSeriesTotals(this.w.config.series.map(function (n, o) { return s.indexOf(o) === -1 ? o : -1 }).filter(function (n) { return n !== -1 })), this.barHelpers = new ea(this) } return R(p, [{ key: "draw", value: function (e, t) { var i = this.w, a = new X(this.ctx), s = new $(this.ctx, i); e = s.getLogSeries(e), this.series = e, this.yRatio = s.getLogYRatios(this.yRatio), this.barHelpers.initVariables(e); var r = a.group({ class: "apexcharts-bar-series apexcharts-plot-series" }); i.config.dataLabels.enabled && this.totalItems > this.barOptions.dataLabels.maxItems && console.warn("WARNING: DataLabels are enabled but there are too many to display. This may cause performance issue when rendering - ApexCharts"); for (var n = 0, o = 0; n < e.length; n++, o++) { var h, c, d, g, f = void 0, x = void 0, b = [], v = [], y = i.globals.comboCharts ? t[n] : n, w = this.barHelpers.getGroupIndex(y).columnGroupIndex, l = a.group({ class: "apexcharts-series", rel: n + 1, seriesName: P.escapeString(i.globals.seriesNames[y]), "data:realIndex": y }); this.ctx.series.addCollapsedClassToSeries(l, y), e[n].length > 0 && (this.visibleI = this.visibleI + 1); var u = 0, m = 0; this.yRatio.length > 1 && (this.yaxisIndex = i.globals.seriesYAxisReverseMap[y], this.translationsIndex = y); var A = this.translationsIndex; this.isReversed = i.config.yaxis[this.yaxisIndex] && i.config.yaxis[this.yaxisIndex].reversed; var k = this.barHelpers.initialPositions(); x = k.y, u = k.barHeight, c = k.yDivision, g = k.zeroW, f = k.x, m = k.barWidth, h = k.xDivision, d = k.zeroH, this.horizontal || v.push(f + m / 2); var S = a.group({ class: "apexcharts-datalabels", "data:realIndex": y }); i.globals.delayedElements.push({ el: S.node }), S.node.classList.add("apexcharts-element-hidden"); var L = a.group({ class: "apexcharts-bar-goals-markers" }), C = a.group({ class: "apexcharts-bar-shadows" }); i.globals.delayedElements.push({ el: C.node }), C.node.classList.add("apexcharts-element-hidden"); for (var I = 0; I < e[n].length; I++) { var z = this.barHelpers.getStrokeWidth(n, I, y), M = null, T = { indexes: { i: n, j: I, realIndex: y, translationsIndex: A, bc: o }, x: f, y: x, strokeWidth: z, elSeries: l }; this.isHorizontal ? (M = this.drawBarPaths(Y(Y({}, T), {}, { barHeight: u, zeroW: g, yDivision: c })), m = this.series[n][I] / this.invertedYRatio) : (M = this.drawColumnPaths(Y(Y({}, T), {}, { xDivision: h, barWidth: m, zeroH: d })), u = this.series[n][I] / this.yRatio[A]); var E = this.barHelpers.getPathFillColor(e, n, I, y); if (this.isFunnel && this.barOptions.isFunnel3d && this.pathArr.length && I > 0) { var O = this.barHelpers.drawBarShadow({ color: typeof E == "string" && E?.indexOf("url") === -1 ? E : P.hexToRgba(i.globals.colors[n]), prevPaths: this.pathArr[this.pathArr.length - 1], currPaths: M }); O && C.add(O) } this.pathArr.push(M); var D = this.barHelpers.drawGoalLine({ barXPosition: M.barXPosition, barYPosition: M.barYPosition, goalX: M.goalX, goalY: M.goalY, barHeight: u, barWidth: m }); D && L.add(D), x = M.y, f = M.x, I > 0 && v.push(f + m / 2), b.push(x), this.renderSeries({ realIndex: y, pathFill: E, j: I, i: n, columnGroupIndex: w, pathFrom: M.pathFrom, pathTo: M.pathTo, strokeWidth: z, elSeries: l, x: f, y: x, series: e, barHeight: Math.abs(M.barHeight ? M.barHeight : u), barWidth: Math.abs(M.barWidth ? M.barWidth : m), elDataLabelsWrap: S, elGoalsMarkers: L, elBarShadows: C, visibleSeries: this.visibleI, type: "bar" }) } i.globals.seriesXvalues[y] = v, i.globals.seriesYvalues[y] = b, r.add(l) } return r } }, { key: "renderSeries", value: function (e) { var t = e.realIndex, i = e.pathFill, a = e.lineFill, s = e.j, r = e.i, n = e.columnGroupIndex, o = e.pathFrom, h = e.pathTo, c = e.strokeWidth, d = e.elSeries, g = e.x, f = e.y, x = e.y1, b = e.y2, v = e.series, y = e.barHeight, w = e.barWidth, l = e.barXPosition, u = e.barYPosition, m = e.elDataLabelsWrap, A = e.elGoalsMarkers, k = e.elBarShadows, S = e.visibleSeries, L = e.type, C = this.w, I = new X(this.ctx); if (!a) { var z = typeof C.globals.stroke.colors[t] == "function" ? function (D) { var H, W = C.config.stroke.colors; return Array.isArray(W) && W.length > 0 && ((H = W[D]) || (H = ""), typeof H == "function") ? H({ value: C.globals.series[D][s], dataPointIndex: s, w: C }) : H }(t) : C.globals.stroke.colors[t]; a = this.barOptions.distributed ? C.globals.stroke.colors[s] : z } C.config.series[r].data[s] && C.config.series[r].data[s].strokeColor && (a = C.config.series[r].data[s].strokeColor), this.isNullValue && (i = "none"); var M = s / C.config.chart.animations.animateGradually.delay * (C.config.chart.animations.speed / C.globals.dataPoints) / 2.4, T = I.renderPaths({ i: r, j: s, realIndex: t, pathFrom: o, pathTo: h, stroke: a, strokeWidth: c, strokeLineCap: C.config.stroke.lineCap, fill: i, animationDelay: M, initialSpeed: C.config.chart.animations.speed, dataChangeSpeed: C.config.chart.animations.dynamicAnimation.speed, className: "apexcharts-".concat(L, "-area") }); T.attr("clip-path", "url(#gridRectMask".concat(C.globals.cuid, ")")); var E = C.config.forecastDataPoints; E.count > 0 && s >= C.globals.dataPoints - E.count && (T.node.setAttribute("stroke-dasharray", E.dashArray), T.node.setAttribute("stroke-width", E.strokeWidth), T.node.setAttribute("fill-opacity", E.fillOpacity)), x !== void 0 && b !== void 0 && (T.attr("data-range-y1", x), T.attr("data-range-y2", b)), new ie(this.ctx).setSelectionFilter(T, t, s), d.add(T); var O = new Qi(this).handleBarDataLabels({ x: g, y: f, y1: x, y2: b, i: r, j: s, series: v, realIndex: t, columnGroupIndex: n, barHeight: y, barWidth: w, barXPosition: l, barYPosition: u, renderedPath: T, visibleSeries: S }); return O.dataLabels !== null && m.add(O.dataLabels), O.totalDataLabels && m.add(O.totalDataLabels), d.add(m), A && d.add(A), k && d.add(k), d } }, { key: "drawBarPaths", value: function (e) { var t, i = e.indexes, a = e.barHeight, s = e.strokeWidth, r = e.zeroW, n = e.x, o = e.y, h = e.yDivision, c = e.elSeries, d = this.w, g = i.i, f = i.j; if (d.globals.isXNumeric) t = (o = (d.globals.seriesX[g][f] - d.globals.minX) / this.invertedXRatio - a) + a * this.visibleI; else if (d.config.plotOptions.bar.hideZeroBarsWhenGrouped) { var x = 0, b = 0; d.globals.seriesPercent.forEach(function (y, w) { y[f] && x++, w < g && y[f] === 0 && b++ }), x > 0 && (a = this.seriesLen * a / x), t = o + a * this.visibleI, t -= a * b } else t = o + a * this.visibleI; this.isFunnel && (r -= (this.barHelpers.getXForValue(this.series[g][f], r) - r) / 2), n = this.barHelpers.getXForValue(this.series[g][f], r); var v = this.barHelpers.getBarpaths({ barYPosition: t, barHeight: a, x1: r, x2: n, strokeWidth: s, series: this.series, realIndex: i.realIndex, i: g, j: f, w: d }); return d.globals.isXNumeric || (o += h), this.barHelpers.barBackground({ j: f, i: g, y1: t - a * this.visibleI, y2: a * this.seriesLen, elSeries: c }), { pathTo: v.pathTo, pathFrom: v.pathFrom, x1: r, x: n, y: o, goalX: this.barHelpers.getGoalValues("x", r, null, g, f), barYPosition: t, barHeight: a } } }, { key: "drawColumnPaths", value: function (e) { var t, i = e.indexes, a = e.x, s = e.y, r = e.xDivision, n = e.barWidth, o = e.zeroH, h = e.strokeWidth, c = e.elSeries, d = this.w, g = i.realIndex, f = i.translationsIndex, x = i.i, b = i.j, v = i.bc; if (d.globals.isXNumeric) { var y = this.getBarXForNumericXAxis({ x: a, j: b, realIndex: g, barWidth: n }); a = y.x, t = y.barXPosition } else if (d.config.plotOptions.bar.hideZeroBarsWhenGrouped) { var w = this.barHelpers.getZeroValueEncounters({ i: x, j: b }), l = w.nonZeroColumns, u = w.zeroEncounters; l > 0 && (n = this.seriesLen * n / l), t = a + n * this.visibleI, t -= n * u } else t = a + n * this.visibleI; s = this.barHelpers.getYForValue(this.series[x][b], o, f); var m = this.barHelpers.getColumnPaths({ barXPosition: t, barWidth: n, y1: o, y2: s, strokeWidth: h, series: this.series, realIndex: g, i: x, j: b, w: d }); return d.globals.isXNumeric || (a += r), this.barHelpers.barBackground({ bc: v, j: b, i: x, x1: t - h / 2 - n * this.visibleI, x2: n * this.seriesLen + h / 2, elSeries: c }), { pathTo: m.pathTo, pathFrom: m.pathFrom, x: a, y: s, goalY: this.barHelpers.getGoalValues("y", null, o, x, b, f), barXPosition: t, barWidth: n } } }, { key: "getBarXForNumericXAxis", value: function (e) { var t = e.x, i = e.barWidth, a = e.realIndex, s = e.j, r = this.w, n = a; return r.globals.seriesX[a].length || (n = r.globals.maxValsInArrayIndex), r.globals.seriesX[n][s] && (t = (r.globals.seriesX[n][s] - r.globals.minX) / this.xRatio - i * this.seriesLen / 2), { barXPosition: t + i * this.visibleI, x: t } } }, { key: "getPreviousPath", value: function (e, t) { for (var i, a = this.w, s = 0; s < a.globals.previousPaths.length; s++) { var r = a.globals.previousPaths[s]; r.paths && r.paths.length > 0 && parseInt(r.realIndex, 10) === parseInt(e, 10) && a.globals.previousPaths[s].paths[t] !== void 0 && (i = a.globals.previousPaths[s].paths[t].d) } return i } }]), p }(), St = function (p) { Te(t, me); var e = Ie(t); function t() { return F(this, t), e.apply(this, arguments) } return R(t, [{ key: "draw", value: function (i, a) { var s = this, r = this.w; this.graphics = new X(this.ctx), this.bar = new me(this.ctx, this.xyRatios); var n = new $(this.ctx, r); i = n.getLogSeries(i), this.yRatio = n.getLogYRatios(this.yRatio), this.barHelpers.initVariables(i), r.config.chart.stackType === "100%" && (i = r.globals.comboCharts ? a.map(function (x) { return r.globals.seriesPercent[x] }) : r.globals.seriesPercent.slice()), this.series = i, this.barHelpers.initializeStackedPrevVars(this); for (var o = this.graphics.group({ class: "apexcharts-bar-series apexcharts-plot-series" }), h = 0, c = 0, d = function (x, b) { var v = void 0, y = void 0, w = void 0, l = void 0, u = r.globals.comboCharts ? a[x] : x, m = s.barHelpers.getGroupIndex(u), A = m.groupIndex, k = m.columnGroupIndex; s.groupCtx = s[r.globals.seriesGroups[A]]; var S = [], L = [], C = 0; s.yRatio.length > 1 && (s.yaxisIndex = r.globals.seriesYAxisReverseMap[u][0], C = u), s.isReversed = r.config.yaxis[s.yaxisIndex] && r.config.yaxis[s.yaxisIndex].reversed; var I = s.graphics.group({ class: "apexcharts-series", seriesName: P.escapeString(r.globals.seriesNames[u]), rel: x + 1, "data:realIndex": u }); s.ctx.series.addCollapsedClassToSeries(I, u); var z = s.graphics.group({ class: "apexcharts-datalabels", "data:realIndex": u }), M = s.graphics.group({ class: "apexcharts-bar-goals-markers" }), T = 0, E = 0, O = s.initialPositions(h, c, v, y, w, l, C); c = O.y, T = O.barHeight, y = O.yDivision, l = O.zeroW, h = O.x, E = O.barWidth, v = O.xDivision, w = O.zeroH, r.globals.barHeight = T, r.globals.barWidth = E, s.barHelpers.initializeStackedXYVars(s), s.groupCtx.prevY.length === 1 && s.groupCtx.prevY[0].every(function (Z) { return isNaN(Z) }) && (s.groupCtx.prevY[0] = s.groupCtx.prevY[0].map(function () { return w }), s.groupCtx.prevYF[0] = s.groupCtx.prevYF[0].map(function () { return 0 })); for (var D = 0; D < r.globals.dataPoints; D++) { var H = s.barHelpers.getStrokeWidth(x, D, u), W = { indexes: { i: x, j: D, realIndex: u, translationsIndex: C, bc: b }, strokeWidth: H, x: h, y: c, elSeries: I, columnGroupIndex: k, seriesGroup: r.globals.seriesGroups[A] }, N = null; s.isHorizontal ? (N = s.drawStackedBarPaths(Y(Y({}, W), {}, { zeroW: l, barHeight: T, yDivision: y })), E = s.series[x][D] / s.invertedYRatio) : (N = s.drawStackedColumnPaths(Y(Y({}, W), {}, { xDivision: v, barWidth: E, zeroH: w })), T = s.series[x][D] / s.yRatio[C]); var B = s.barHelpers.drawGoalLine({ barXPosition: N.barXPosition, barYPosition: N.barYPosition, goalX: N.goalX, goalY: N.goalY, barHeight: T, barWidth: E }); B && M.add(B), c = N.y, h = N.x, S.push(h), L.push(c); var q = s.barHelpers.getPathFillColor(i, x, D, u); I = s.renderSeries({ realIndex: u, pathFill: q, j: D, i: x, columnGroupIndex: k, pathFrom: N.pathFrom, pathTo: N.pathTo, strokeWidth: H, elSeries: I, x: h, y: c, series: i, barHeight: T, barWidth: E, elDataLabelsWrap: z, elGoalsMarkers: M, type: "bar", visibleSeries: k }) } r.globals.seriesXvalues[u] = S, r.globals.seriesYvalues[u] = L, s.groupCtx.prevY.push(s.groupCtx.yArrj), s.groupCtx.prevYF.push(s.groupCtx.yArrjF), s.groupCtx.prevYVal.push(s.groupCtx.yArrjVal), s.groupCtx.prevX.push(s.groupCtx.xArrj), s.groupCtx.prevXF.push(s.groupCtx.xArrjF), s.groupCtx.prevXVal.push(s.groupCtx.xArrjVal), o.add(I) }, g = 0, f = 0; g < i.length; g++, f++)d(g, f); return o } }, { key: "initialPositions", value: function (i, a, s, r, n, o, h) { var c, d, g = this.w; if (this.isHorizontal) { r = g.globals.gridHeight / g.globals.dataPoints; var f = g.config.plotOptions.bar.barHeight; c = String(f).indexOf("%") === -1 ? parseInt(f, 10) : r * parseInt(f, 10) / 100, o = g.globals.padHorizontal + (this.isReversed ? g.globals.gridWidth - this.baseLineInvertedY : this.baseLineInvertedY), a = (r - c) / 2 } else { d = s = g.globals.gridWidth / g.globals.dataPoints; var x = g.config.plotOptions.bar.columnWidth; g.globals.isXNumeric && g.globals.dataPoints > 1 ? d = (s = g.globals.minXDiff / this.xRatio) * parseInt(this.barOptions.columnWidth, 10) / 100 : String(x).indexOf("%") === -1 ? d = parseInt(x, 10) : d *= parseInt(x, 10) / 100, n = this.isReversed ? this.baseLineY[h] : g.globals.gridHeight - this.baseLineY[h], i = g.globals.padHorizontal + (s - d) / 2 } var b = g.globals.barGroups.length || 1; return { x: i, y: a, yDivision: r, xDivision: s, barHeight: c / b, barWidth: d / b, zeroH: n, zeroW: o } } }, { key: "drawStackedBarPaths", value: function (i) { for (var a, s = i.indexes, r = i.barHeight, n = i.strokeWidth, o = i.zeroW, h = i.x, c = i.y, d = i.columnGroupIndex, g = i.seriesGroup, f = i.yDivision, x = i.elSeries, b = this.w, v = c + d * r, y = s.i, w = s.j, l = s.realIndex, u = s.translationsIndex, m = 0, A = 0; A < this.groupCtx.prevXF.length; A++)m += this.groupCtx.prevXF[A][w]; var k; if ((k = g.indexOf(b.config.series[l].name)) > 0) { var S = o; this.groupCtx.prevXVal[k - 1][w] < 0 ? S = this.series[y][w] >= 0 ? this.groupCtx.prevX[k - 1][w] + m - 2 * (this.isReversed ? m : 0) : this.groupCtx.prevX[k - 1][w] : this.groupCtx.prevXVal[k - 1][w] >= 0 && (S = this.series[y][w] >= 0 ? this.groupCtx.prevX[k - 1][w] : this.groupCtx.prevX[k - 1][w] - m + 2 * (this.isReversed ? m : 0)), a = S } else a = o; h = this.series[y][w] === null ? a : a + this.series[y][w] / this.invertedYRatio - 2 * (this.isReversed ? this.series[y][w] / this.invertedYRatio : 0); var L = this.barHelpers.getBarpaths({ barYPosition: v, barHeight: r, x1: a, x2: h, strokeWidth: n, series: this.series, realIndex: s.realIndex, seriesGroup: g, i: y, j: w, w: b }); return this.barHelpers.barBackground({ j: w, i: y, y1: v, y2: r, elSeries: x }), c += f, { pathTo: L.pathTo, pathFrom: L.pathFrom, goalX: this.barHelpers.getGoalValues("x", o, null, y, w, u), barXPosition: a, barYPosition: v, x: h, y: c } } }, { key: "drawStackedColumnPaths", value: function (i) { var a = i.indexes, s = i.x, r = i.y, n = i.xDivision, o = i.barWidth, h = i.zeroH, c = i.columnGroupIndex, d = i.seriesGroup, g = i.elSeries, f = this.w, x = a.i, b = a.j, v = a.bc, y = a.realIndex, w = a.translationsIndex; if (f.globals.isXNumeric) { var l = f.globals.seriesX[y][b]; l || (l = 0), s = (l - f.globals.minX) / this.xRatio - o / 2 * f.globals.barGroups.length } for (var u, m = s + c * o, A = 0, k = 0; k < this.groupCtx.prevYF.length; k++)A += isNaN(this.groupCtx.prevYF[k][b]) ? 0 : this.groupCtx.prevYF[k][b]; var S = x; if (d && (S = d.indexOf(f.globals.seriesNames[y])), S > 0 && !f.globals.isXNumeric || S > 0 && f.globals.isXNumeric && f.globals.seriesX[y - 1][b] === f.globals.seriesX[y][b]) { var L, C, I, z = Math.min(this.yRatio.length + 1, y + 1); if (this.groupCtx.prevY[S - 1] !== void 0 && this.groupCtx.prevY[S - 1].length) for (var M = 1; M < z; M++) { var T; if (!isNaN((T = this.groupCtx.prevY[S - M]) === null || T === void 0 ? void 0 : T[b])) { I = this.groupCtx.prevY[S - M][b]; break } } for (var E = 1; E < z; E++) { var O, D; if (((O = this.groupCtx.prevYVal[S - E]) === null || O === void 0 ? void 0 : O[b]) < 0) { C = this.series[x][b] >= 0 ? I - A + 2 * (this.isReversed ? A : 0) : I; break } if (((D = this.groupCtx.prevYVal[S - E]) === null || D === void 0 ? void 0 : D[b]) >= 0) { C = this.series[x][b] >= 0 ? I : I + A - 2 * (this.isReversed ? A : 0); break } } C === void 0 && (C = f.globals.gridHeight), u = (L = this.groupCtx.prevYF[0]) !== null && L !== void 0 && L.every(function (W) { return W === 0 }) && this.groupCtx.prevYF.slice(1, S).every(function (W) { return W.every(function (N) { return isNaN(N) }) }) ? h : C } else u = h; r = this.series[x][b] ? u - this.series[x][b] / this.yRatio[w] + 2 * (this.isReversed ? this.series[x][b] / this.yRatio[w] : 0) : u; var H = this.barHelpers.getColumnPaths({ barXPosition: m, barWidth: o, y1: u, y2: r, yRatio: this.yRatio[w], strokeWidth: this.strokeWidth, series: this.series, seriesGroup: d, realIndex: a.realIndex, i: x, j: b, w: f }); return this.barHelpers.barBackground({ bc: v, j: b, i: x, x1: m, x2: o, elSeries: g }), { pathTo: H.pathTo, pathFrom: H.pathFrom, goalY: this.barHelpers.getGoalValues("y", null, h, x, b), barXPosition: m, x: f.globals.isXNumeric ? s : s + n, y: r } } }]), t }(), Qe = function (p) { Te(t, me); var e = Ie(t); function t() { return F(this, t), e.apply(this, arguments) } return R(t, [{ key: "draw", value: function (i, a, s) { var r = this, n = this.w, o = new X(this.ctx), h = n.globals.comboCharts ? a : n.config.chart.type, c = new ne(this.ctx); this.candlestickOptions = this.w.config.plotOptions.candlestick, this.boxOptions = this.w.config.plotOptions.boxPlot, this.isHorizontal = n.config.plotOptions.bar.horizontal; var d = new $(this.ctx, n); i = d.getLogSeries(i), this.series = i, this.yRatio = d.getLogYRatios(this.yRatio), this.barHelpers.initVariables(i); for (var g = o.group({ class: "apexcharts-".concat(h, "-series apexcharts-plot-series") }), f = function (b) { r.isBoxPlot = n.config.chart.type === "boxPlot" || n.config.series[b].type === "boxPlot"; var v, y, w, l, u = void 0, m = void 0, A = [], k = [], S = n.globals.comboCharts ? s[b] : b, L = r.barHelpers.getGroupIndex(S).columnGroupIndex, C = o.group({ class: "apexcharts-series", seriesName: P.escapeString(n.globals.seriesNames[S]), rel: b + 1, "data:realIndex": S }); r.ctx.series.addCollapsedClassToSeries(C, S), i[b].length > 0 && (r.visibleI = r.visibleI + 1); var I, z, M = 0; r.yRatio.length > 1 && (r.yaxisIndex = n.globals.seriesYAxisReverseMap[S][0], M = S); var T = r.barHelpers.initialPositions(); m = T.y, I = T.barHeight, y = T.yDivision, l = T.zeroW, u = T.x, z = T.barWidth, v = T.xDivision, w = T.zeroH, k.push(u + z / 2); for (var E = o.group({ class: "apexcharts-datalabels", "data:realIndex": S }), O = function (H) { var W = r.barHelpers.getStrokeWidth(b, H, S), N = null, B = { indexes: { i: b, j: H, realIndex: S, translationsIndex: M }, x: u, y: m, strokeWidth: W, elSeries: C }; N = r.isHorizontal ? r.drawHorizontalBoxPaths(Y(Y({}, B), {}, { yDivision: y, barHeight: I, zeroW: l })) : r.drawVerticalBoxPaths(Y(Y({}, B), {}, { xDivision: v, barWidth: z, zeroH: w })), m = N.y, u = N.x, H > 0 && k.push(u + z / 2), A.push(m), N.pathTo.forEach(function (q, Z) { var j = !r.isBoxPlot && r.candlestickOptions.wick.useFillColor ? N.color[Z] : n.globals.stroke.colors[b], se = c.fillPath({ seriesNumber: S, dataPointIndex: H, color: N.color[Z], value: i[b][H] }); r.renderSeries({ realIndex: S, pathFill: se, lineFill: j, j: H, i: b, pathFrom: N.pathFrom, pathTo: q, strokeWidth: W, elSeries: C, x: u, y: m, series: i, columnGroupIndex: L, barHeight: I, barWidth: z, elDataLabelsWrap: E, visibleSeries: r.visibleI, type: n.config.chart.type }) }) }, D = 0; D < n.globals.dataPoints; D++)O(D); n.globals.seriesXvalues[S] = k, n.globals.seriesYvalues[S] = A, g.add(C) }, x = 0; x < i.length; x++)f(x); return g } }, { key: "drawVerticalBoxPaths", value: function (i) { var a = i.indexes, s = i.x; i.y; var r = i.xDivision, n = i.barWidth, o = i.zeroH, h = i.strokeWidth, c = this.w, d = new X(this.ctx), g = a.i, f = a.j, x = !0, b = c.config.plotOptions.candlestick.colors.upward, v = c.config.plotOptions.candlestick.colors.downward, y = ""; this.isBoxPlot && (y = [this.boxOptions.colors.lower, this.boxOptions.colors.upper]); var w = this.yRatio[a.translationsIndex], l = a.realIndex, u = this.getOHLCValue(l, f), m = o, A = o; u.o > u.c && (x = !1); var k = Math.min(u.o, u.c), S = Math.max(u.o, u.c), L = u.m; c.globals.isXNumeric && (s = (c.globals.seriesX[l][f] - c.globals.minX) / this.xRatio - n / 2); var C = s + n * this.visibleI; this.series[g][f] === void 0 || this.series[g][f] === null ? (k = o, S = o) : (k = o - k / w, S = o - S / w, m = o - u.h / w, A = o - u.l / w, L = o - u.m / w); var I = d.move(C, o), z = d.move(C + n / 2, k); return c.globals.previousPaths.length > 0 && (z = this.getPreviousPath(l, f, !0)), I = this.isBoxPlot ? [d.move(C, k) + d.line(C + n / 2, k) + d.line(C + n / 2, m) + d.line(C + n / 4, m) + d.line(C + n - n / 4, m) + d.line(C + n / 2, m) + d.line(C + n / 2, k) + d.line(C + n, k) + d.line(C + n, L) + d.line(C, L) + d.line(C, k + h / 2), d.move(C, L) + d.line(C + n, L) + d.line(C + n, S) + d.line(C + n / 2, S) + d.line(C + n / 2, A) + d.line(C + n - n / 4, A) + d.line(C + n / 4, A) + d.line(C + n / 2, A) + d.line(C + n / 2, S) + d.line(C, S) + d.line(C, L) + "z"] : [d.move(C, S) + d.line(C + n / 2, S) + d.line(C + n / 2, m) + d.line(C + n / 2, S) + d.line(C + n, S) + d.line(C + n, k) + d.line(C + n / 2, k) + d.line(C + n / 2, A) + d.line(C + n / 2, k) + d.line(C, k) + d.line(C, S - h / 2)], z += d.move(C, k), c.globals.isXNumeric || (s += r), { pathTo: I, pathFrom: z, x: s, y: S, barXPosition: C, color: this.isBoxPlot ? y : x ? [b] : [v] } } }, { key: "drawHorizontalBoxPaths", value: function (i) { var a = i.indexes; i.x; var s = i.y, r = i.yDivision, n = i.barHeight, o = i.zeroW, h = i.strokeWidth, c = this.w, d = new X(this.ctx), g = a.i, f = a.j, x = this.boxOptions.colors.lower; this.isBoxPlot && (x = [this.boxOptions.colors.lower, this.boxOptions.colors.upper]); var b = this.invertedYRatio, v = a.realIndex, y = this.getOHLCValue(v, f), w = o, l = o, u = Math.min(y.o, y.c), m = Math.max(y.o, y.c), A = y.m; c.globals.isXNumeric && (s = (c.globals.seriesX[v][f] - c.globals.minX) / this.invertedXRatio - n / 2); var k = s + n * this.visibleI; this.series[g][f] === void 0 || this.series[g][f] === null ? (u = o, m = o) : (u = o + u / b, m = o + m / b, w = o + y.h / b, l = o + y.l / b, A = o + y.m / b); var S = d.move(o, k), L = d.move(u, k + n / 2); return c.globals.previousPaths.length > 0 && (L = this.getPreviousPath(v, f, !0)), S = [d.move(u, k) + d.line(u, k + n / 2) + d.line(w, k + n / 2) + d.line(w, k + n / 2 - n / 4) + d.line(w, k + n / 2 + n / 4) + d.line(w, k + n / 2) + d.line(u, k + n / 2) + d.line(u, k + n) + d.line(A, k + n) + d.line(A, k) + d.line(u + h / 2, k), d.move(A, k) + d.line(A, k + n) + d.line(m, k + n) + d.line(m, k + n / 2) + d.line(l, k + n / 2) + d.line(l, k + n - n / 4) + d.line(l, k + n / 4) + d.line(l, k + n / 2) + d.line(m, k + n / 2) + d.line(m, k) + d.line(A, k) + "z"], L += d.move(u, k), c.globals.isXNumeric || (s += r), { pathTo: S, pathFrom: L, x: m, y: s, barYPosition: k, color: x } } }, { key: "getOHLCValue", value: function (i, a) { var s = this.w; return { o: this.isBoxPlot ? s.globals.seriesCandleH[i][a] : s.globals.seriesCandleO[i][a], h: this.isBoxPlot ? s.globals.seriesCandleO[i][a] : s.globals.seriesCandleH[i][a], m: s.globals.seriesCandleM[i][a], l: this.isBoxPlot ? s.globals.seriesCandleC[i][a] : s.globals.seriesCandleL[i][a], c: this.isBoxPlot ? s.globals.seriesCandleL[i][a] : s.globals.seriesCandleC[i][a] } } }]), t }(), Bt = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w } return R(p, [{ key: "checkColorRange", value: function () { var e = this.w, t = !1, i = e.config.plotOptions[e.config.chart.type]; return i.colorScale.ranges.length > 0 && i.colorScale.ranges.map(function (a, s) { a.from <= 0 && (t = !0) }), t } }, { key: "getShadeColor", value: function (e, t, i, a) { var s = this.w, r = 1, n = s.config.plotOptions[e].shadeIntensity, o = this.determineColor(e, t, i); s.globals.hasNegs || a ? r = s.config.plotOptions[e].reverseNegativeShade ? o.percent < 0 ? o.percent / 100 * (1.25 * n) : (1 - o.percent / 100) * (1.25 * n) : o.percent <= 0 ? 1 - (1 + o.percent / 100) * n : (1 - o.percent / 100) * n : (r = 1 - o.percent / 100, e === "treemap" && (r = (1 - o.percent / 100) * (1.25 * n))); var h = o.color, c = new P; if (s.config.plotOptions[e].enableShades) if (this.w.config.theme.mode === "dark") { var d = c.shadeColor(-1 * r, o.color); h = P.hexToRgba(P.isColorHex(d) ? d : P.rgb2hex(d), s.config.fill.opacity) } else { var g = c.shadeColor(r, o.color); h = P.hexToRgba(P.isColorHex(g) ? g : P.rgb2hex(g), s.config.fill.opacity) } return { color: h, colorProps: o } } }, { key: "determineColor", value: function (e, t, i) { var a = this.w, s = a.globals.series[t][i], r = a.config.plotOptions[e], n = r.colorScale.inverse ? i : t; r.distributed && a.config.chart.type === "treemap" && (n = i); var o = a.globals.colors[n], h = null, c = Math.min.apply(Math, te(a.globals.series[t])), d = Math.max.apply(Math, te(a.globals.series[t])); r.distributed || e !== "heatmap" || (c = a.globals.minY, d = a.globals.maxY), r.colorScale.min !== void 0 && (c = r.colorScale.min < a.globals.minY ? r.colorScale.min : a.globals.minY, d = r.colorScale.max > a.globals.maxY ? r.colorScale.max : a.globals.maxY); var g = Math.abs(d) + Math.abs(c), f = 100 * s / (g === 0 ? g - 1e-6 : g); return r.colorScale.ranges.length > 0 && r.colorScale.ranges.map(function (x, b) { if (s >= x.from && s <= x.to) { o = x.color, h = x.foreColor ? x.foreColor : null, c = x.from, d = x.to; var v = Math.abs(d) + Math.abs(c); f = 100 * s / (v === 0 ? v - 1e-6 : v) } }), { color: o, foreColor: h, percent: f } } }, { key: "calculateDataLabels", value: function (e) { var t = e.text, i = e.x, a = e.y, s = e.i, r = e.j, n = e.colorProps, o = e.fontSize, h = this.w.config.dataLabels, c = new X(this.ctx), d = new be(this.ctx), g = null; if (h.enabled) { g = c.group({ class: "apexcharts-data-labels" }); var f = h.offsetX, x = h.offsetY, b = i + f, v = a + parseFloat(h.style.fontSize) / 3 + x; d.plotDataLabelsText({ x: b, y: v, text: t, i: s, j: r, color: n.foreColor, parent: g, fontSize: o, dataLabelsConfig: h }) } return g } }, { key: "addListeners", value: function (e) { var t = new X(this.ctx); e.node.addEventListener("mouseenter", t.pathMouseEnter.bind(this, e)), e.node.addEventListener("mouseleave", t.pathMouseLeave.bind(this, e)), e.node.addEventListener("mousedown", t.pathMouseDown.bind(this, e)) } }]), p }(), ta = function () { function p(e, t) { F(this, p), this.ctx = e, this.w = e.w, this.xRatio = t.xRatio, this.yRatio = t.yRatio, this.dynamicAnim = this.w.config.chart.animations.dynamicAnimation, this.helpers = new Bt(e), this.rectRadius = this.w.config.plotOptions.heatmap.radius, this.strokeWidth = this.w.config.stroke.show ? this.w.config.stroke.width : 0 } return R(p, [{ key: "draw", value: function (e) { var t = this.w, i = new X(this.ctx), a = i.group({ class: "apexcharts-heatmap" }); a.attr("clip-path", "url(#gridRectMask".concat(t.globals.cuid, ")")); var s = t.globals.gridWidth / t.globals.dataPoints, r = t.globals.gridHeight / t.globals.series.length, n = 0, o = !1; this.negRange = this.helpers.checkColorRange(); var h = e.slice(); t.config.yaxis[0].reversed && (o = !0, h.reverse()); for (var c = o ? 0 : h.length - 1; o ? c < h.length : c >= 0; o ? c++ : c--) { var d = i.group({ class: "apexcharts-series apexcharts-heatmap-series", seriesName: P.escapeString(t.globals.seriesNames[c]), rel: c + 1, "data:realIndex": c }); if (this.ctx.series.addCollapsedClassToSeries(d, c), t.config.chart.dropShadow.enabled) { var g = t.config.chart.dropShadow; new ie(this.ctx).dropShadow(d, g, c) } for (var f = 0, x = t.config.plotOptions.heatmap.shadeIntensity, b = 0; b < h[c].length; b++) { var v = this.helpers.getShadeColor(t.config.chart.type, c, b, this.negRange), y = v.color, w = v.colorProps; t.config.fill.type === "image" && (y = new ne(this.ctx).fillPath({ seriesNumber: c, dataPointIndex: b, opacity: t.globals.hasNegs ? w.percent < 0 ? 1 - (1 + w.percent / 100) : x + w.percent / 100 : w.percent / 100, patternID: P.randomId(), width: t.config.fill.image.width ? t.config.fill.image.width : s, height: t.config.fill.image.height ? t.config.fill.image.height : r })); var l = this.rectRadius, u = i.drawRect(f, n, s, r, l); if (u.attr({ cx: f, cy: n }), u.node.classList.add("apexcharts-heatmap-rect"), d.add(u), u.attr({ fill: y, i: c, index: c, j: b, val: e[c][b], "stroke-width": this.strokeWidth, stroke: t.config.plotOptions.heatmap.useFillColorAsStroke ? y : t.globals.stroke.colors[0], color: y }), this.helpers.addListeners(u), t.config.chart.animations.enabled && !t.globals.dataChanged) { var m = 1; t.globals.resized || (m = t.config.chart.animations.speed), this.animateHeatMap(u, f, n, s, r, m) } if (t.globals.dataChanged) { var A = 1; if (this.dynamicAnim.enabled && t.globals.shouldAnimate) { A = this.dynamicAnim.speed; var k = t.globals.previousPaths[c] && t.globals.previousPaths[c][b] && t.globals.previousPaths[c][b].color; k || (k = "rgba(255, 255, 255, 0)"), this.animateHeatColor(u, P.isColorHex(k) ? k : P.rgb2hex(k), P.isColorHex(y) ? y : P.rgb2hex(y), A) } } var S = (0, t.config.dataLabels.formatter)(t.globals.series[c][b], { value: t.globals.series[c][b], seriesIndex: c, dataPointIndex: b, w: t }), L = this.helpers.calculateDataLabels({ text: S, x: f + s / 2, y: n + r / 2, i: c, j: b, colorProps: w, series: h }); L !== null && d.add(L), f += s } n += r, a.add(d) } var C = t.globals.yAxisScale[0].result.slice(); return t.config.yaxis[0].reversed ? C.unshift("") : C.push(""), t.globals.yAxisScale[0].result = C, a } }, { key: "animateHeatMap", value: function (e, t, i, a, s, r) { var n = new ve(this.ctx); n.animateRect(e, { x: t + a / 2, y: i + s / 2, width: 0, height: 0 }, { x: t, y: i, width: a, height: s }, r, function () { n.animationCompleted(e) }) } }, { key: "animateHeatColor", value: function (e, t, i, a) { e.attr({ fill: t }).animate(a).attr({ fill: i }) } }]), p }(), Gt = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w } return R(p, [{ key: "drawYAxisTexts", value: function (e, t, i, a) { var s = this.w, r = s.config.yaxis[0], n = s.globals.yLabelFormatters[0]; return new X(this.ctx).drawText({ x: e + r.labels.offsetX, y: t + r.labels.offsetY, text: n(a, i), textAnchor: "middle", fontSize: r.labels.style.fontSize, fontFamily: r.labels.style.fontFamily, foreColor: Array.isArray(r.labels.style.colors) ? r.labels.style.colors[i] : r.labels.style.colors }) } }]), p }(), Vt = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w; var t = this.w; this.chartType = this.w.config.chart.type, this.initialAnim = this.w.config.chart.animations.enabled, this.dynamicAnim = this.initialAnim && this.w.config.chart.animations.dynamicAnimation.enabled, this.animBeginArr = [0], this.animDur = 0, this.donutDataLabels = this.w.config.plotOptions.pie.donut.labels, this.lineColorArr = t.globals.stroke.colors !== void 0 ? t.globals.stroke.colors : t.globals.colors, this.defaultSize = Math.min(t.globals.gridWidth, t.globals.gridHeight), this.centerY = this.defaultSize / 2, this.centerX = t.globals.gridWidth / 2, t.config.chart.type === "radialBar" ? this.fullAngle = 360 : this.fullAngle = Math.abs(t.config.plotOptions.pie.endAngle - t.config.plotOptions.pie.startAngle), this.initialAngle = t.config.plotOptions.pie.startAngle % this.fullAngle, t.globals.radialSize = this.defaultSize / 2.05 - t.config.stroke.width - (t.config.chart.sparkline.enabled ? 0 : t.config.chart.dropShadow.blur), this.donutSize = t.globals.radialSize * parseInt(t.config.plotOptions.pie.donut.size, 10) / 100; var i = t.config.plotOptions.pie.customScale, a = t.globals.gridWidth / 2, s = t.globals.gridHeight / 2; this.translateX = a - a * i, this.translateY = s - s * i, this.dataLabelsGroup = new X(this.ctx).group({ class: "apexcharts-datalabels-group", transform: "translate(".concat(this.translateX, ", ").concat(this.translateY, ") scale(").concat(i, ")") }), this.maxY = 0, this.sliceLabels = [], this.sliceSizes = [], this.prevSectorAngleArr = [] } return R(p, [{ key: "draw", value: function (e) { var t = this, i = this.w, a = new X(this.ctx), s = a.group({ class: "apexcharts-pie" }); if (i.globals.noData) return s; for (var r = 0, n = 0; n < e.length; n++)r += P.negToZero(e[n]); var o = [], h = a.group(); r === 0 && (r = 1e-5), e.forEach(function (l) { t.maxY = Math.max(t.maxY, l) }), i.config.yaxis[0].max && (this.maxY = i.config.yaxis[0].max), i.config.grid.position === "back" && this.chartType === "polarArea" && this.drawPolarElements(s); for (var c = 0; c < e.length; c++) { var d = this.fullAngle * P.negToZero(e[c]) / r; o.push(d), this.chartType === "polarArea" ? (o[c] = this.fullAngle / e.length, this.sliceSizes.push(i.globals.radialSize * e[c] / this.maxY)) : this.sliceSizes.push(i.globals.radialSize) } if (i.globals.dataChanged) { for (var g, f = 0, x = 0; x < i.globals.previousPaths.length; x++)f += P.negToZero(i.globals.previousPaths[x]); for (var b = 0; b < i.globals.previousPaths.length; b++)g = this.fullAngle * P.negToZero(i.globals.previousPaths[b]) / f, this.prevSectorAngleArr.push(g) } if (this.donutSize < 0 && (this.donutSize = 0), this.chartType === "donut") { var v = a.drawCircle(this.donutSize); v.attr({ cx: this.centerX, cy: this.centerY, fill: i.config.plotOptions.pie.donut.background ? i.config.plotOptions.pie.donut.background : "transparent" }), h.add(v) } var y = this.drawArcs(o, e); if (this.sliceLabels.forEach(function (l) { y.add(l) }), h.attr({ transform: "translate(".concat(this.translateX, ", ").concat(this.translateY, ") scale(").concat(i.config.plotOptions.pie.customScale, ")") }), h.add(y), s.add(h), this.donutDataLabels.show) { var w = this.renderInnerDataLabels(this.dataLabelsGroup, this.donutDataLabels, { hollowSize: this.donutSize, centerX: this.centerX, centerY: this.centerY, opacity: this.donutDataLabels.show }); s.add(w) } return i.config.grid.position === "front" && this.chartType === "polarArea" && this.drawPolarElements(s), s } }, { key: "drawArcs", value: function (e, t) { var i = this.w, a = new ie(this.ctx), s = new X(this.ctx), r = new ne(this.ctx), n = s.group({ class: "apexcharts-slices" }), o = this.initialAngle, h = this.initialAngle, c = this.initialAngle, d = this.initialAngle; this.strokeWidth = i.config.stroke.show ? i.config.stroke.width : 0; for (var g = 0; g < e.length; g++) { var f = s.group({ class: "apexcharts-series apexcharts-pie-series", seriesName: P.escapeString(i.globals.seriesNames[g]), rel: g + 1, "data:realIndex": g }); n.add(f), h = d, c = (o = c) + e[g], d = h + this.prevSectorAngleArr[g]; var x = c < o ? this.fullAngle + c - o : c - o, b = r.fillPath({ seriesNumber: g, size: this.sliceSizes[g], value: t[g] }), v = this.getChangedPath(h, d), y = s.drawPath({ d: v, stroke: Array.isArray(this.lineColorArr) ? this.lineColorArr[g] : this.lineColorArr, strokeWidth: 0, fill: b, fillOpacity: i.config.fill.opacity, classes: "apexcharts-pie-area apexcharts-".concat(this.chartType.toLowerCase(), "-slice-").concat(g) }); if (y.attr({ index: 0, j: g }), a.setSelectionFilter(y, 0, g), i.config.chart.dropShadow.enabled) { var w = i.config.chart.dropShadow; a.dropShadow(y, w, g) } this.addListeners(y, this.donutDataLabels), X.setAttrs(y.node, { "data:angle": x, "data:startAngle": o, "data:strokeWidth": this.strokeWidth, "data:value": t[g] }); var l = { x: 0, y: 0 }; this.chartType === "pie" || this.chartType === "polarArea" ? l = P.polarToCartesian(this.centerX, this.centerY, i.globals.radialSize / 1.25 + i.config.plotOptions.pie.dataLabels.offset, (o + x / 2) % this.fullAngle) : this.chartType === "donut" && (l = P.polarToCartesian(this.centerX, this.centerY, (i.globals.radialSize + this.donutSize) / 2 + i.config.plotOptions.pie.dataLabels.offset, (o + x / 2) % this.fullAngle)), f.add(y); var u = 0; if (!this.initialAnim || i.globals.resized || i.globals.dataChanged ? this.animBeginArr.push(0) : ((u = x / this.fullAngle * i.config.chart.animations.speed) === 0 && (u = 1), this.animDur = u + this.animDur, this.animBeginArr.push(this.animDur)), this.dynamicAnim && i.globals.dataChanged ? this.animatePaths(y, { size: this.sliceSizes[g], endAngle: c, startAngle: o, prevStartAngle: h, prevEndAngle: d, animateStartingPos: !0, i: g, animBeginArr: this.animBeginArr, shouldSetPrevPaths: !0, dur: i.config.chart.animations.dynamicAnimation.speed }) : this.animatePaths(y, { size: this.sliceSizes[g], endAngle: c, startAngle: o, i: g, totalItems: e.length - 1, animBeginArr: this.animBeginArr, dur: u }), i.config.plotOptions.pie.expandOnClick && this.chartType !== "polarArea" && y.node.addEventListener("mouseup", this.pieClicked.bind(this, g)), i.globals.selectedDataPoints[0] !== void 0 && i.globals.selectedDataPoints[0].indexOf(g) > -1 && this.pieClicked(g), i.config.dataLabels.enabled) { var m = l.x, A = l.y, k = 100 * x / this.fullAngle + "%"; if (x !== 0 && i.config.plotOptions.pie.dataLabels.minAngleToShowLabel < e[g]) { var S = i.config.dataLabels.formatter; S !== void 0 && (k = S(i.globals.seriesPercent[g][0], { seriesIndex: g, w: i })); var L = i.globals.dataLabels.style.colors[g], C = s.group({ class: "apexcharts-datalabels" }), I = s.drawText({ x: m, y: A, text: k, textAnchor: "middle", fontSize: i.config.dataLabels.style.fontSize, fontFamily: i.config.dataLabels.style.fontFamily, fontWeight: i.config.dataLabels.style.fontWeight, foreColor: L }); if (C.add(I), i.config.dataLabels.dropShadow.enabled) { var z = i.config.dataLabels.dropShadow; a.dropShadow(I, z) } I.node.classList.add("apexcharts-pie-label"), i.config.chart.animations.animate && i.globals.resized === !1 && (I.node.classList.add("apexcharts-pie-label-delay"), I.node.style.animationDelay = i.config.chart.animations.speed / 940 + "s"), this.sliceLabels.push(C) } } } return n } }, { key: "addListeners", value: function (e, t) { var i = new X(this.ctx); e.node.addEventListener("mouseenter", i.pathMouseEnter.bind(this, e)), e.node.addEventListener("mouseleave", i.pathMouseLeave.bind(this, e)), e.node.addEventListener("mouseleave", this.revertDataLabelsInner.bind(this, e.node, t)), e.node.addEventListener("mousedown", i.pathMouseDown.bind(this, e)), this.donutDataLabels.total.showAlways || (e.node.addEventListener("mouseenter", this.printDataLabelsInner.bind(this, e.node, t)), e.node.addEventListener("mousedown", this.printDataLabelsInner.bind(this, e.node, t))) } }, { key: "animatePaths", value: function (e, t) { var i = this.w, a = t.endAngle < t.startAngle ? this.fullAngle + t.endAngle - t.startAngle : t.endAngle - t.startAngle, s = a, r = t.startAngle, n = t.startAngle; t.prevStartAngle !== void 0 && t.prevEndAngle !== void 0 && (r = t.prevEndAngle, s = t.prevEndAngle < t.prevStartAngle ? this.fullAngle + t.prevEndAngle - t.prevStartAngle : t.prevEndAngle - t.prevStartAngle), t.i === i.config.series.length - 1 && (a + n > this.fullAngle ? t.endAngle = t.endAngle - (a + n) : a + n < this.fullAngle && (t.endAngle = t.endAngle + (this.fullAngle - (a + n)))), a === this.fullAngle && (a = this.fullAngle - .01), this.animateArc(e, r, n, a, s, t) } }, { key: "animateArc", value: function (e, t, i, a, s, r) { var n, o = this, h = this.w, c = new ve(this.ctx), d = r.size; (isNaN(t) || isNaN(s)) && (t = i, s = a, r.dur = 0); var g = a, f = i, x = t < i ? this.fullAngle + t - i : t - i; h.globals.dataChanged && r.shouldSetPrevPaths && r.prevEndAngle && (n = o.getPiePath({ me: o, startAngle: r.prevStartAngle, angle: r.prevEndAngle < r.prevStartAngle ? this.fullAngle + r.prevEndAngle - r.prevStartAngle : r.prevEndAngle - r.prevStartAngle, size: d }), e.attr({ d: n })), r.dur !== 0 ? e.animate(r.dur, h.globals.easing, r.animBeginArr[r.i]).afterAll(function () { o.chartType !== "pie" && o.chartType !== "donut" && o.chartType !== "polarArea" || this.animate(h.config.chart.animations.dynamicAnimation.speed).attr({ "stroke-width": o.strokeWidth }), r.i === h.config.series.length - 1 && c.animationCompleted(e) }).during(function (b) { g = x + (a - x) * b, r.animateStartingPos && (g = s + (a - s) * b, f = t - s + (i - (t - s)) * b), n = o.getPiePath({ me: o, startAngle: f, angle: g, size: d }), e.node.setAttribute("data:pathOrig", n), e.attr({ d: n }) }) : (n = o.getPiePath({ me: o, startAngle: f, angle: a, size: d }), r.isTrack || (h.globals.animationEnded = !0), e.node.setAttribute("data:pathOrig", n), e.attr({ d: n, "stroke-width": o.strokeWidth })) } }, { key: "pieClicked", value: function (e) { var t, i = this.w, a = this, s = a.sliceSizes[e] + (i.config.plotOptions.pie.expandOnClick ? 4 : 0), r = i.globals.dom.Paper.select(".apexcharts-".concat(a.chartType.toLowerCase(), "-slice-").concat(e)).members[0]; if (r.attr("data:pieClicked") !== "true") { var n = i.globals.dom.baseEl.getElementsByClassName("apexcharts-pie-area"); Array.prototype.forEach.call(n, function (d) { d.setAttribute("data:pieClicked", "false"); var g = d.getAttribute("data:pathOrig"); g && d.setAttribute("d", g) }), i.globals.capturedDataPointIndex = e, r.attr("data:pieClicked", "true"); var o = parseInt(r.attr("data:startAngle"), 10), h = parseInt(r.attr("data:angle"), 10); t = a.getPiePath({ me: a, startAngle: o, angle: h, size: s }), h !== 360 && r.plot(t) } else { r.attr({ "data:pieClicked": "false" }), this.revertDataLabelsInner(r.node, this.donutDataLabels); var c = r.attr("data:pathOrig"); r.attr({ d: c }) } } }, { key: "getChangedPath", value: function (e, t) { var i = ""; return this.dynamicAnim && this.w.globals.dataChanged && (i = this.getPiePath({ me: this, startAngle: e, angle: t - e, size: this.size })), i } }, { key: "getPiePath", value: function (e) { var t, i = e.me, a = e.startAngle, s = e.angle, r = e.size, n = new X(this.ctx), o = a, h = Math.PI * (o - 90) / 180, c = s + a; Math.ceil(c) >= this.fullAngle + this.w.config.plotOptions.pie.startAngle % this.fullAngle && (c = this.fullAngle + this.w.config.plotOptions.pie.startAngle % this.fullAngle - .01), Math.ceil(c) > this.fullAngle && (c -= this.fullAngle); var d = Math.PI * (c - 90) / 180, g = i.centerX + r * Math.cos(h), f = i.centerY + r * Math.sin(h), x = i.centerX + r * Math.cos(d), b = i.centerY + r * Math.sin(d), v = P.polarToCartesian(i.centerX, i.centerY, i.donutSize, c), y = P.polarToCartesian(i.centerX, i.centerY, i.donutSize, o), w = s > 180 ? 1 : 0, l = ["M", g, f, "A", r, r, 0, w, 1, x, b]; return t = i.chartType === "donut" ? [].concat(l, ["L", v.x, v.y, "A", i.donutSize, i.donutSize, 0, w, 0, y.x, y.y, "L", g, f, "z"]).join(" ") : i.chartType === "pie" || i.chartType === "polarArea" ? [].concat(l, ["L", i.centerX, i.centerY, "L", g, f]).join(" ") : [].concat(l).join(" "), n.roundPathCorners(t, 2 * this.strokeWidth) } }, { key: "drawPolarElements", value: function (e) { var t = this.w, i = new Ot(this.ctx), a = new X(this.ctx), s = new Gt(this.ctx), r = a.group(), n = a.group(), o = i.niceScale(0, Math.ceil(this.maxY), 0), h = o.result.reverse(), c = o.result.length; this.maxY = o.niceMax; for (var d = t.globals.radialSize, g = d / (c - 1), f = 0; f < c - 1; f++) { var x = a.drawCircle(d); if (x.attr({ cx: this.centerX, cy: this.centerY, fill: "none", "stroke-width": t.config.plotOptions.polarArea.rings.strokeWidth, stroke: t.config.plotOptions.polarArea.rings.strokeColor }), t.config.yaxis[0].show) { var b = s.drawYAxisTexts(this.centerX, this.centerY - d + parseInt(t.config.yaxis[0].labels.style.fontSize, 10) / 2, f, h[f]); n.add(b) } r.add(x), d -= g } this.drawSpokes(e), e.add(r), e.add(n) } }, { key: "renderInnerDataLabels", value: function (e, t, i) { var a = this.w, s = new X(this.ctx), r = t.total.show; e.node.innerHTML = "", e.node.style.opacity = i.opacity; var n, o, h = i.centerX, c = i.centerY; n = t.name.color === void 0 ? a.globals.colors[0] : t.name.color; var d = t.name.fontSize, g = t.name.fontFamily, f = t.name.fontWeight; o = t.value.color === void 0 ? a.config.chart.foreColor : t.value.color; var x = t.value.formatter, b = "", v = ""; if (r ? (n = t.total.color, d = t.total.fontSize, g = t.total.fontFamily, f = t.total.fontWeight, v = t.total.label, b = t.total.formatter(a)) : a.globals.series.length === 1 && (b = x(a.globals.series[0], a), v = a.globals.seriesNames[0]), v && (v = t.name.formatter(v, t.total.show, a)), t.name.show) { var y = s.drawText({ x: h, y: c + parseFloat(t.name.offsetY), text: v, textAnchor: "middle", foreColor: n, fontSize: d, fontWeight: f, fontFamily: g }); y.node.classList.add("apexcharts-datalabel-label"), e.add(y) } if (t.value.show) { var w = t.name.show ? parseFloat(t.value.offsetY) + 16 : t.value.offsetY, l = s.drawText({ x: h, y: c + w, text: b, textAnchor: "middle", foreColor: o, fontWeight: t.value.fontWeight, fontSize: t.value.fontSize, fontFamily: t.value.fontFamily }); l.node.classList.add("apexcharts-datalabel-value"), e.add(l) } return e } }, { key: "printInnerLabels", value: function (e, t, i, a) { var s, r = this.w; a ? s = e.name.color === void 0 ? r.globals.colors[parseInt(a.parentNode.getAttribute("rel"), 10) - 1] : e.name.color : r.globals.series.length > 1 && e.total.show && (s = e.total.color); var n = r.globals.dom.baseEl.querySelector(".apexcharts-datalabel-label"), o = r.globals.dom.baseEl.querySelector(".apexcharts-datalabel-value"); i = (0, e.value.formatter)(i, r), a || typeof e.total.formatter != "function" || (i = e.total.formatter(r)); var h = t === e.total.label; t = e.name.formatter(t, h, r), n !== null && (n.textContent = t), o !== null && (o.textContent = i), n !== null && (n.style.fill = s) } }, { key: "printDataLabelsInner", value: function (e, t) { var i = this.w, a = e.getAttribute("data:value"), s = i.globals.seriesNames[parseInt(e.parentNode.getAttribute("rel"), 10) - 1]; i.globals.series.length > 1 && this.printInnerLabels(t, s, a, e); var r = i.globals.dom.baseEl.querySelector(".apexcharts-datalabels-group"); r !== null && (r.style.opacity = 1) } }, { key: "drawSpokes", value: function (e) { var t = this, i = this.w, a = new X(this.ctx), s = i.config.plotOptions.polarArea.spokes; if (s.strokeWidth !== 0) { for (var r = [], n = 360 / i.globals.series.length, o = 0; o < i.globals.series.length; o++)r.push(P.polarToCartesian(this.centerX, this.centerY, i.globals.radialSize, i.config.plotOptions.pie.startAngle + n * o)); r.forEach(function (h, c) { var d = a.drawLine(h.x, h.y, t.centerX, t.centerY, Array.isArray(s.connectorColors) ? s.connectorColors[c] : s.connectorColors); e.add(d) }) } } }, { key: "revertDataLabelsInner", value: function () { var e = this.w; if (this.donutDataLabels.show) { var t = e.globals.dom.Paper.select(".apexcharts-datalabels-group").members[0], i = this.renderInnerDataLabels(t, this.donutDataLabels, { hollowSize: this.donutSize, centerX: this.centerX, centerY: this.centerY, opacity: this.donutDataLabels.show }); e.globals.dom.Paper.select(".apexcharts-radialbar, .apexcharts-pie").members[0].add(i) } } }]), p }(), ia = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w, this.chartType = this.w.config.chart.type, this.initialAnim = this.w.config.chart.animations.enabled, this.dynamicAnim = this.initialAnim && this.w.config.chart.animations.dynamicAnimation.enabled, this.animDur = 0; var t = this.w; this.graphics = new X(this.ctx), this.lineColorArr = t.globals.stroke.colors !== void 0 ? t.globals.stroke.colors : t.globals.colors, this.defaultSize = t.globals.svgHeight < t.globals.svgWidth ? t.globals.gridHeight + 1.5 * t.globals.goldenPadding : t.globals.gridWidth, this.isLog = t.config.yaxis[0].logarithmic, this.logBase = t.config.yaxis[0].logBase, this.coreUtils = new $(this.ctx), this.maxValue = this.isLog ? this.coreUtils.getLogVal(this.logBase, t.globals.maxY, 0) : t.globals.maxY, this.minValue = this.isLog ? this.coreUtils.getLogVal(this.logBase, this.w.globals.minY, 0) : t.globals.minY, this.polygons = t.config.plotOptions.radar.polygons, this.strokeWidth = t.config.stroke.show ? t.config.stroke.width : 0, this.size = this.defaultSize / 2.1 - this.strokeWidth - t.config.chart.dropShadow.blur, t.config.xaxis.labels.show && (this.size = this.size - t.globals.xAxisLabelsWidth / 1.75), t.config.plotOptions.radar.size !== void 0 && (this.size = t.config.plotOptions.radar.size), this.dataRadiusOfPercent = [], this.dataRadius = [], this.angleArr = [], this.yaxisLabelsTextsPos = [] } return R(p, [{ key: "draw", value: function (e) { var t = this, i = this.w, a = new ne(this.ctx), s = [], r = new be(this.ctx); e.length && (this.dataPointsLen = e[i.globals.maxValsInArrayIndex].length), this.disAngle = 2 * Math.PI / this.dataPointsLen; var n = i.globals.gridWidth / 2, o = i.globals.gridHeight / 2, h = n + i.config.plotOptions.radar.offsetX, c = o + i.config.plotOptions.radar.offsetY, d = this.graphics.group({ class: "apexcharts-radar-series apexcharts-plot-series", transform: "translate(".concat(h || 0, ", ").concat(c || 0, ")") }), g = [], f = null, x = null; if (this.yaxisLabels = this.graphics.group({ class: "apexcharts-yaxis" }), e.forEach(function (v, y) { var w = v.length === i.globals.dataPoints, l = t.graphics.group().attr({ class: "apexcharts-series", "data:longestSeries": w, seriesName: P.escapeString(i.globals.seriesNames[y]), rel: y + 1, "data:realIndex": y }); t.dataRadiusOfPercent[y] = [], t.dataRadius[y] = [], t.angleArr[y] = [], v.forEach(function (M, T) { var E = Math.abs(t.maxValue - t.minValue); M -= t.minValue, t.isLog && (M = t.coreUtils.getLogVal(t.logBase, M, 0)), t.dataRadiusOfPercent[y][T] = M / E, t.dataRadius[y][T] = t.dataRadiusOfPercent[y][T] * t.size, t.angleArr[y][T] = T * t.disAngle }), g = t.getDataPointsPos(t.dataRadius[y], t.angleArr[y]); var u = t.createPaths(g, { x: 0, y: 0 }); f = t.graphics.group({ class: "apexcharts-series-markers-wrap apexcharts-element-hidden" }), x = t.graphics.group({ class: "apexcharts-datalabels", "data:realIndex": y }), i.globals.delayedElements.push({ el: f.node, index: y }); var m = { i: y, realIndex: y, animationDelay: y, initialSpeed: i.config.chart.animations.speed, dataChangeSpeed: i.config.chart.animations.dynamicAnimation.speed, className: "apexcharts-radar", shouldClipToGrid: !1, bindEventsOnPaths: !1, stroke: i.globals.stroke.colors[y], strokeLineCap: i.config.stroke.lineCap }, A = null; i.globals.previousPaths.length > 0 && (A = t.getPreviousPath(y)); for (var k = 0; k < u.linePathsTo.length; k++) { var S = t.graphics.renderPaths(Y(Y({}, m), {}, { pathFrom: A === null ? u.linePathsFrom[k] : A, pathTo: u.linePathsTo[k], strokeWidth: Array.isArray(t.strokeWidth) ? t.strokeWidth[y] : t.strokeWidth, fill: "none", drawShadow: !1 })); l.add(S); var L = a.fillPath({ seriesNumber: y }), C = t.graphics.renderPaths(Y(Y({}, m), {}, { pathFrom: A === null ? u.areaPathsFrom[k] : A, pathTo: u.areaPathsTo[k], strokeWidth: 0, fill: L, drawShadow: !1 })); if (i.config.chart.dropShadow.enabled) { var I = new ie(t.ctx), z = i.config.chart.dropShadow; I.dropShadow(C, Object.assign({}, z, { noUserSpaceOnUse: !0 }), y) } l.add(C) } v.forEach(function (M, T) { var E = new ye(t.ctx).getMarkerConfig({ cssClass: "apexcharts-marker", seriesIndex: y, dataPointIndex: T }), O = t.graphics.drawMarker(g[T].x, g[T].y, E); O.attr("rel", T), O.attr("j", T), O.attr("index", y), O.node.setAttribute("default-marker-size", E.pSize); var D = t.graphics.group({ class: "apexcharts-series-markers" }); D && D.add(O), f.add(D), l.add(f); var H = i.config.dataLabels; if (H.enabled) { var W = H.formatter(i.globals.series[y][T], { seriesIndex: y, dataPointIndex: T, w: i }); r.plotDataLabelsText({ x: g[T].x, y: g[T].y, text: W, textAnchor: "middle", i: y, j: y, parent: x, offsetCorrection: !1, dataLabelsConfig: Y({}, H) }) } l.add(x) }), s.push(l) }), this.drawPolygons({ parent: d }), i.config.xaxis.labels.show) { var b = this.drawXAxisTexts(); d.add(b) } return s.forEach(function (v) { d.add(v) }), d.add(this.yaxisLabels), d } }, { key: "drawPolygons", value: function (e) { for (var t = this, i = this.w, a = e.parent, s = new Gt(this.ctx), r = i.globals.yAxisScale[0].result.reverse(), n = r.length, o = [], h = this.size / (n - 1), c = 0; c < n; c++)o[c] = h * c; o.reverse(); var d = [], g = []; o.forEach(function (f, x) { var b = P.getPolygonPos(f, t.dataPointsLen), v = ""; b.forEach(function (y, w) { if (x === 0) { var l = t.graphics.drawLine(y.x, y.y, 0, 0, Array.isArray(t.polygons.connectorColors) ? t.polygons.connectorColors[w] : t.polygons.connectorColors); g.push(l) } w === 0 && t.yaxisLabelsTextsPos.push({ x: y.x, y: y.y }), v += y.x + "," + y.y + " " }), d.push(v) }), d.forEach(function (f, x) { var b = t.polygons.strokeColors, v = t.polygons.strokeWidth, y = t.graphics.drawPolygon(f, Array.isArray(b) ? b[x] : b, Array.isArray(v) ? v[x] : v, i.globals.radarPolygons.fill.colors[x]); a.add(y) }), g.forEach(function (f) { a.add(f) }), i.config.yaxis[0].show && this.yaxisLabelsTextsPos.forEach(function (f, x) { var b = s.drawYAxisTexts(f.x, f.y, x, r[x]); t.yaxisLabels.add(b) }) } }, { key: "drawXAxisTexts", value: function () { var e = this, t = this.w, i = t.config.xaxis.labels, a = this.graphics.group({ class: "apexcharts-xaxis" }), s = P.getPolygonPos(this.size, this.dataPointsLen); return t.globals.labels.forEach(function (r, n) { var o = t.config.xaxis.labels.formatter, h = new be(e.ctx); if (s[n]) { var c = e.getTextPos(s[n], e.size), d = o(r, { seriesIndex: -1, dataPointIndex: n, w: t }); h.plotDataLabelsText({ x: c.newX, y: c.newY, text: d, textAnchor: c.textAnchor, i: n, j: n, parent: a, className: "apexcharts-xaxis-label", color: Array.isArray(i.style.colors) && i.style.colors[n] ? i.style.colors[n] : "#a8a8a8", dataLabelsConfig: Y({ textAnchor: c.textAnchor, dropShadow: { enabled: !1 } }, i), offsetCorrection: !1 }).on("click", function (g) { if (typeof t.config.chart.events.xAxisLabelClick == "function") { var f = Object.assign({}, t, { labelIndex: n }); t.config.chart.events.xAxisLabelClick(g, e.ctx, f) } }) } }), a } }, { key: "createPaths", value: function (e, t) { var i = this, a = [], s = [], r = [], n = []; if (e.length) { s = [this.graphics.move(t.x, t.y)], n = [this.graphics.move(t.x, t.y)]; var o = this.graphics.move(e[0].x, e[0].y), h = this.graphics.move(e[0].x, e[0].y); e.forEach(function (c, d) { o += i.graphics.line(c.x, c.y), h += i.graphics.line(c.x, c.y), d === e.length - 1 && (o += "Z", h += "Z") }), a.push(o), r.push(h) } return { linePathsFrom: s, linePathsTo: a, areaPathsFrom: n, areaPathsTo: r } } }, { key: "getTextPos", value: function (e, t) { var i = "middle", a = e.x, s = e.y; return Math.abs(e.x) >= 10 ? e.x > 0 ? (i = "start", a += 10) : e.x < 0 && (i = "end", a -= 10) : i = "middle", Math.abs(e.y) >= t - 10 && (e.y < 0 ? s -= 10 : e.y > 0 && (s += 10)), { textAnchor: i, newX: a, newY: s } } }, { key: "getPreviousPath", value: function (e) { for (var t = this.w, i = null, a = 0; a < t.globals.previousPaths.length; a++) { var s = t.globals.previousPaths[a]; s.paths.length > 0 && parseInt(s.realIndex, 10) === parseInt(e, 10) && t.globals.previousPaths[a].paths[0] !== void 0 && (i = t.globals.previousPaths[a].paths[0].d) } return i } }, { key: "getDataPointsPos", value: function (e, t) { var i = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : this.dataPointsLen; e = e || [], t = t || []; for (var a = [], s = 0; s < i; s++) { var r = {}; r.x = e[s] * Math.sin(t[s]), r.y = -e[s] * Math.cos(t[s]), a.push(r) } return a } }]), p }(), aa = function (p) { Te(t, Vt); var e = Ie(t); function t(i) { var a; F(this, t), (a = e.call(this, i)).ctx = i, a.w = i.w, a.animBeginArr = [0], a.animDur = 0; var s = a.w; return a.startAngle = s.config.plotOptions.radialBar.startAngle, a.endAngle = s.config.plotOptions.radialBar.endAngle, a.totalAngle = Math.abs(s.config.plotOptions.radialBar.endAngle - s.config.plotOptions.radialBar.startAngle), a.trackStartAngle = s.config.plotOptions.radialBar.track.startAngle, a.trackEndAngle = s.config.plotOptions.radialBar.track.endAngle, a.barLabels = a.w.config.plotOptions.radialBar.barLabels, a.donutDataLabels = a.w.config.plotOptions.radialBar.dataLabels, a.radialDataLabels = a.donutDataLabels, a.trackStartAngle || (a.trackStartAngle = a.startAngle), a.trackEndAngle || (a.trackEndAngle = a.endAngle), a.endAngle === 360 && (a.endAngle = 359.99), a.margin = parseInt(s.config.plotOptions.radialBar.track.margin, 10), a.onBarLabelClick = a.onBarLabelClick.bind(Pt(a)), a } return R(t, [{ key: "draw", value: function (i) { var a = this.w, s = new X(this.ctx), r = s.group({ class: "apexcharts-radialbar" }); if (a.globals.noData) return r; var n = s.group(), o = this.defaultSize / 2, h = a.globals.gridWidth / 2, c = this.defaultSize / 2.05; a.config.chart.sparkline.enabled || (c = c - a.config.stroke.width - a.config.chart.dropShadow.blur); var d = a.globals.fill.colors; if (a.config.plotOptions.radialBar.track.show) { var g = this.drawTracks({ size: c, centerX: h, centerY: o, colorArr: d, series: i }); n.add(g) } var f = this.drawArcs({ size: c, centerX: h, centerY: o, colorArr: d, series: i }), x = 360; a.config.plotOptions.radialBar.startAngle < 0 && (x = this.totalAngle); var b = (360 - x) / 360; if (a.globals.radialSize = c - c * b, this.radialDataLabels.value.show) { var v = Math.max(this.radialDataLabels.value.offsetY, this.radialDataLabels.name.offsetY); a.globals.radialSize += v * b } return n.add(f.g), a.config.plotOptions.radialBar.hollow.position === "front" && (f.g.add(f.elHollow), f.dataLabels && f.g.add(f.dataLabels)), r.add(n), r } }, { key: "drawTracks", value: function (i) { var a = this.w, s = new X(this.ctx), r = s.group({ class: "apexcharts-tracks" }), n = new ie(this.ctx), o = new ne(this.ctx), h = this.getStrokeWidth(i); i.size = i.size - h / 2; for (var c = 0; c < i.series.length; c++) { var d = s.group({ class: "apexcharts-radialbar-track apexcharts-track" }); r.add(d), d.attr({ rel: c + 1 }), i.size = i.size - h - this.margin; var g = a.config.plotOptions.radialBar.track, f = o.fillPath({ seriesNumber: 0, size: i.size, fillColors: Array.isArray(g.background) ? g.background[c] : g.background, solid: !0 }), x = this.trackStartAngle, b = this.trackEndAngle; Math.abs(b) + Math.abs(x) >= 360 && (b = 360 - Math.abs(this.startAngle) - .1); var v = s.drawPath({ d: "", stroke: f, strokeWidth: h * parseInt(g.strokeWidth, 10) / 100, fill: "none", strokeOpacity: g.opacity, classes: "apexcharts-radialbar-area" }); if (g.dropShadow.enabled) { var y = g.dropShadow; n.dropShadow(v, y) } d.add(v), v.attr("id", "apexcharts-radialbarTrack-" + c), this.animatePaths(v, { centerX: i.centerX, centerY: i.centerY, endAngle: b, startAngle: x, size: i.size, i: c, totalItems: 2, animBeginArr: 0, dur: 0, isTrack: !0, easing: a.globals.easing }) } return r } }, { key: "drawArcs", value: function (i) { var a = this.w, s = new X(this.ctx), r = new ne(this.ctx), n = new ie(this.ctx), o = s.group(), h = this.getStrokeWidth(i); i.size = i.size - h / 2; var c = a.config.plotOptions.radialBar.hollow.background, d = i.size - h * i.series.length - this.margin * i.series.length - h * parseInt(a.config.plotOptions.radialBar.track.strokeWidth, 10) / 100 / 2, g = d - a.config.plotOptions.radialBar.hollow.margin; a.config.plotOptions.radialBar.hollow.image !== void 0 && (c = this.drawHollowImage(i, o, d, c)); var f = this.drawHollow({ size: g, centerX: i.centerX, centerY: i.centerY, fill: c || "transparent" }); if (a.config.plotOptions.radialBar.hollow.dropShadow.enabled) { var x = a.config.plotOptions.radialBar.hollow.dropShadow; n.dropShadow(f, x) } var b = 1; !this.radialDataLabels.total.show && a.globals.series.length > 1 && (b = 0); var v = null; if (this.radialDataLabels.show) { var y = a.globals.dom.Paper.select(".apexcharts-datalabels-group").members[0]; v = this.renderInnerDataLabels(y, this.radialDataLabels, { hollowSize: d, centerX: i.centerX, centerY: i.centerY, opacity: b }) } a.config.plotOptions.radialBar.hollow.position === "back" && (o.add(f), v && o.add(v)); var w = !1; a.config.plotOptions.radialBar.inverseOrder && (w = !0); for (var l = w ? i.series.length - 1 : 0; w ? l >= 0 : l < i.series.length; w ? l-- : l++) { var u = s.group({ class: "apexcharts-series apexcharts-radial-series", seriesName: P.escapeString(a.globals.seriesNames[l]) }); o.add(u), u.attr({ rel: l + 1, "data:realIndex": l }), this.ctx.series.addCollapsedClassToSeries(u, l), i.size = i.size - h - this.margin; var m = r.fillPath({ seriesNumber: l, size: i.size, value: i.series[l] }), A = this.startAngle, k = void 0, S = P.negToZero(i.series[l] > 100 ? 100 : i.series[l]) / 100, L = Math.round(this.totalAngle * S) + this.startAngle, C = void 0; a.globals.dataChanged && (k = this.startAngle, C = Math.round(this.totalAngle * P.negToZero(a.globals.previousPaths[l]) / 100) + k), Math.abs(L) + Math.abs(A) >= 360 && (L -= .01), Math.abs(C) + Math.abs(k) >= 360 && (C -= .01); var I = L - A, z = Array.isArray(a.config.stroke.dashArray) ? a.config.stroke.dashArray[l] : a.config.stroke.dashArray, M = s.drawPath({ d: "", stroke: m, strokeWidth: h, fill: "none", fillOpacity: a.config.fill.opacity, classes: "apexcharts-radialbar-area apexcharts-radialbar-slice-" + l, strokeDashArray: z }); if (X.setAttrs(M.node, { "data:angle": I, "data:value": i.series[l] }), a.config.chart.dropShadow.enabled) { var T = a.config.chart.dropShadow; n.dropShadow(M, T, l) } if (n.setSelectionFilter(M, 0, l), this.addListeners(M, this.radialDataLabels), u.add(M), M.attr({ index: 0, j: l }), this.barLabels.enabled) { var E = P.polarToCartesian(i.centerX, i.centerY, i.size, A), O = this.barLabels.formatter(a.globals.seriesNames[l], { seriesIndex: l, w: a }), D = ["apexcharts-radialbar-label"]; this.barLabels.onClick || D.push("apexcharts-no-click"); var H = this.barLabels.useSeriesColors ? a.globals.colors[l] : a.config.chart.foreColor; H || (H = a.config.chart.foreColor); var W = E.x + this.barLabels.offsetX, N = E.y + this.barLabels.offsetY, B = s.drawText({ x: W, y: N, text: O, textAnchor: "end", dominantBaseline: "middle", fontFamily: this.barLabels.fontFamily, fontWeight: this.barLabels.fontWeight, fontSize: this.barLabels.fontSize, foreColor: H, cssClass: D.join(" ") }); B.on("click", this.onBarLabelClick), B.attr({ rel: l + 1 }), A !== 0 && B.attr({ "transform-origin": "".concat(W, " ").concat(N), transform: "rotate(".concat(A, " 0 0)") }), u.add(B) } var q = 0; !this.initialAnim || a.globals.resized || a.globals.dataChanged || (q = a.config.chart.animations.speed), a.globals.dataChanged && (q = a.config.chart.animations.dynamicAnimation.speed), this.animDur = q / (1.2 * i.series.length) + this.animDur, this.animBeginArr.push(this.animDur), this.animatePaths(M, { centerX: i.centerX, centerY: i.centerY, endAngle: L, startAngle: A, prevEndAngle: C, prevStartAngle: k, size: i.size, i: l, totalItems: 2, animBeginArr: this.animBeginArr, dur: q, shouldSetPrevPaths: !0, easing: a.globals.easing }) } return { g: o, elHollow: f, dataLabels: v } } }, { key: "drawHollow", value: function (i) { var a = new X(this.ctx).drawCircle(2 * i.size); return a.attr({ class: "apexcharts-radialbar-hollow", cx: i.centerX, cy: i.centerY, r: i.size, fill: i.fill }), a } }, { key: "drawHollowImage", value: function (i, a, s, r) { var n = this.w, o = new ne(this.ctx), h = P.randomId(), c = n.config.plotOptions.radialBar.hollow.image; if (n.config.plotOptions.radialBar.hollow.imageClipped) o.clippedImgArea({ width: s, height: s, image: c, patternID: "pattern".concat(n.globals.cuid).concat(h) }), r = "url(#pattern".concat(n.globals.cuid).concat(h, ")"); else { var d = n.config.plotOptions.radialBar.hollow.imageWidth, g = n.config.plotOptions.radialBar.hollow.imageHeight; if (d === void 0 && g === void 0) { var f = n.globals.dom.Paper.image(c).loaded(function (b) { this.move(i.centerX - b.width / 2 + n.config.plotOptions.radialBar.hollow.imageOffsetX, i.centerY - b.height / 2 + n.config.plotOptions.radialBar.hollow.imageOffsetY) }); a.add(f) } else { var x = n.globals.dom.Paper.image(c).loaded(function (b) { this.move(i.centerX - d / 2 + n.config.plotOptions.radialBar.hollow.imageOffsetX, i.centerY - g / 2 + n.config.plotOptions.radialBar.hollow.imageOffsetY), this.size(d, g) }); a.add(x) } } return r } }, { key: "getStrokeWidth", value: function (i) { var a = this.w; return i.size * (100 - parseInt(a.config.plotOptions.radialBar.hollow.size, 10)) / 100 / (i.series.length + 1) - this.margin } }, { key: "onBarLabelClick", value: function (i) { var a = parseInt(i.target.getAttribute("rel"), 10) - 1, s = this.barLabels.onClick, r = this.w; s && s(r.globals.seriesNames[a], { w: r, seriesIndex: a }) } }]), t }(), sa = function (p) { Te(t, me); var e = Ie(t); function t() { return F(this, t), e.apply(this, arguments) } return R(t, [{ key: "draw", value: function (i, a) { var s = this.w, r = new X(this.ctx); this.rangeBarOptions = this.w.config.plotOptions.rangeBar, this.series = i, this.seriesRangeStart = s.globals.seriesRangeStart, this.seriesRangeEnd = s.globals.seriesRangeEnd, this.barHelpers.initVariables(i); for (var n = r.group({ class: "apexcharts-rangebar-series apexcharts-plot-series" }), o = 0; o < i.length; o++) { var h, c, d, g, f = void 0, x = void 0, b = s.globals.comboCharts ? a[o] : o, v = this.barHelpers.getGroupIndex(b).columnGroupIndex, y = r.group({ class: "apexcharts-series", seriesName: P.escapeString(s.globals.seriesNames[b]), rel: o + 1, "data:realIndex": b }); this.ctx.series.addCollapsedClassToSeries(y, b), i[o].length > 0 && (this.visibleI = this.visibleI + 1); var w = 0, l = 0, u = 0; this.yRatio.length > 1 && (this.yaxisIndex = s.globals.seriesYAxisReverseMap[b][0], u = b); var m = this.barHelpers.initialPositions(); x = m.y, g = m.zeroW, f = m.x, l = m.barWidth, w = m.barHeight, h = m.xDivision, c = m.yDivision, d = m.zeroH; for (var A = r.group({ class: "apexcharts-datalabels", "data:realIndex": b }), k = r.group({ class: "apexcharts-rangebar-goals-markers" }), S = 0; S < s.globals.dataPoints; S++) { var L = this.barHelpers.getStrokeWidth(o, S, b), C = this.seriesRangeStart[o][S], I = this.seriesRangeEnd[o][S], z = null, M = null, T = null, E = { x: f, y: x, strokeWidth: L, elSeries: y }, O = this.seriesLen; if (s.config.plotOptions.bar.rangeBarGroupRows && (O = 1), s.config.series[o].data[S] === void 0) break; if (this.isHorizontal) { T = x + w * this.visibleI; var D = (c - w * O) / 2; if (s.config.series[o].data[S].x) { var H = this.detectOverlappingBars({ i: o, j: S, barYPosition: T, srty: D, barHeight: w, yDivision: c, initPositions: m }); w = H.barHeight, T = H.barYPosition } l = (z = this.drawRangeBarPaths(Y({ indexes: { i: o, j: S, realIndex: b }, barHeight: w, barYPosition: T, zeroW: g, yDivision: c, y1: C, y2: I }, E))).barWidth } else { s.globals.isXNumeric && (f = (s.globals.seriesX[o][S] - s.globals.minX) / this.xRatio - l / 2), M = f + l * this.visibleI; var W = (h - l * O) / 2; if (s.config.series[o].data[S].x) { var N = this.detectOverlappingBars({ i: o, j: S, barXPosition: M, srtx: W, barWidth: l, xDivision: h, initPositions: m }); l = N.barWidth, M = N.barXPosition } w = (z = this.drawRangeColumnPaths(Y({ indexes: { i: o, j: S, realIndex: b, translationsIndex: u }, barWidth: l, barXPosition: M, zeroH: d, xDivision: h }, E))).barHeight } var B = this.barHelpers.drawGoalLine({ barXPosition: z.barXPosition, barYPosition: T, goalX: z.goalX, goalY: z.goalY, barHeight: w, barWidth: l }); B && k.add(B), x = z.y, f = z.x; var q = this.barHelpers.getPathFillColor(i, o, S, b), Z = s.globals.stroke.colors[b]; this.renderSeries({ realIndex: b, pathFill: q, lineFill: Z, j: S, i: o, x: f, y: x, y1: C, y2: I, pathFrom: z.pathFrom, pathTo: z.pathTo, strokeWidth: L, elSeries: y, series: i, barHeight: w, barWidth: l, barXPosition: M, barYPosition: T, columnGroupIndex: v, elDataLabelsWrap: A, elGoalsMarkers: k, visibleSeries: this.visibleI, type: "rangebar" }) } n.add(y) } return n } }, { key: "detectOverlappingBars", value: function (i) { var a = i.i, s = i.j, r = i.barYPosition, n = i.barXPosition, o = i.srty, h = i.srtx, c = i.barHeight, d = i.barWidth, g = i.yDivision, f = i.xDivision, x = i.initPositions, b = this.w, v = [], y = b.config.series[a].data[s].rangeName, w = b.config.series[a].data[s].x, l = Array.isArray(w) ? w.join(" ") : w, u = b.globals.labels.map(function (A) { return Array.isArray(A) ? A.join(" ") : A }).indexOf(l), m = b.globals.seriesRange[a].findIndex(function (A) { return A.x === l && A.overlaps.length > 0 }); return this.isHorizontal ? (r = b.config.plotOptions.bar.rangeBarGroupRows ? o + g * u : o + c * this.visibleI + g * u, m > -1 && !b.config.plotOptions.bar.rangeBarOverlap && (v = b.globals.seriesRange[a][m].overlaps).indexOf(y) > -1 && (r = (c = x.barHeight / v.length) * this.visibleI + g * (100 - parseInt(this.barOptions.barHeight, 10)) / 100 / 2 + c * (this.visibleI + v.indexOf(y)) + g * u)) : (u > -1 && !b.globals.timescaleLabels.length && (n = b.config.plotOptions.bar.rangeBarGroupRows ? h + f * u : h + d * this.visibleI + f * u), m > -1 && !b.config.plotOptions.bar.rangeBarOverlap && (v = b.globals.seriesRange[a][m].overlaps).indexOf(y) > -1 && (n = (d = x.barWidth / v.length) * this.visibleI + f * (100 - parseInt(this.barOptions.barWidth, 10)) / 100 / 2 + d * (this.visibleI + v.indexOf(y)) + f * u)), { barYPosition: r, barXPosition: n, barHeight: c, barWidth: d } } }, { key: "drawRangeColumnPaths", value: function (i) { var a = i.indexes, s = i.x, r = i.xDivision, n = i.barWidth, o = i.barXPosition, h = i.zeroH, c = this.w, d = a.i, g = a.j, f = a.realIndex, x = a.translationsIndex, b = this.yRatio[x], v = this.getRangeValue(f, g), y = Math.min(v.start, v.end), w = Math.max(v.start, v.end); this.series[d][g] === void 0 || this.series[d][g] === null ? y = h : (y = h - y / b, w = h - w / b); var l = Math.abs(w - y), u = this.barHelpers.getColumnPaths({ barXPosition: o, barWidth: n, y1: y, y2: w, strokeWidth: this.strokeWidth, series: this.seriesRangeEnd, realIndex: f, i: f, j: g, w: c }); if (c.globals.isXNumeric) { var m = this.getBarXForNumericXAxis({ x: s, j: g, realIndex: f, barWidth: n }); s = m.x, o = m.barXPosition } else s += r; return { pathTo: u.pathTo, pathFrom: u.pathFrom, barHeight: l, x: s, y: v.start < 0 && v.end < 0 ? y : w, goalY: this.barHelpers.getGoalValues("y", null, h, d, g, x), barXPosition: o } } }, { key: "preventBarOverflow", value: function (i) { var a = this.w; return i < 0 && (i = 0), i > a.globals.gridWidth && (i = a.globals.gridWidth), i } }, { key: "drawRangeBarPaths", value: function (i) { var a = i.indexes, s = i.y, r = i.y1, n = i.y2, o = i.yDivision, h = i.barHeight, c = i.barYPosition, d = i.zeroW, g = this.w, f = a.realIndex, x = a.j, b = this.preventBarOverflow(d + r / this.invertedYRatio), v = this.preventBarOverflow(d + n / this.invertedYRatio), y = this.getRangeValue(f, x), w = Math.abs(v - b), l = this.barHelpers.getBarpaths({ barYPosition: c, barHeight: h, x1: b, x2: v, strokeWidth: this.strokeWidth, series: this.seriesRangeEnd, i: f, realIndex: f, j: x, w: g }); return g.globals.isXNumeric || (s += o), { pathTo: l.pathTo, pathFrom: l.pathFrom, barWidth: w, x: y.start < 0 && y.end < 0 ? b : v, goalX: this.barHelpers.getGoalValues("x", d, null, f, x), y: s } } }, { key: "getRangeValue", value: function (i, a) { var s = this.w; return { start: s.globals.seriesRangeStart[i][a], end: s.globals.seriesRangeEnd[i][a] } } }]), t }(), ra = function () { function p(e) { F(this, p), this.w = e.w, this.lineCtx = e } return R(p, [{ key: "sameValueSeriesFix", value: function (e, t) { var i = this.w; if ((i.config.fill.type === "gradient" || i.config.fill.type[e] === "gradient") && new $(this.lineCtx.ctx, i).seriesHaveSameValues(e)) { var a = t[e].slice(); a[a.length - 1] = a[a.length - 1] + 1e-6, t[e] = a } return t } }, { key: "calculatePoints", value: function (e) { var t = e.series, i = e.realIndex, a = e.x, s = e.y, r = e.i, n = e.j, o = e.prevY, h = this.w, c = [], d = []; if (n === 0) { var g = this.lineCtx.categoryAxisCorrection + h.config.markers.offsetX; h.globals.isXNumeric && (g = (h.globals.seriesX[i][0] - h.globals.minX) / this.lineCtx.xRatio + h.config.markers.offsetX), c.push(g), d.push(P.isNumber(t[r][0]) ? o + h.config.markers.offsetY : null), c.push(a + h.config.markers.offsetX), d.push(P.isNumber(t[r][n + 1]) ? s + h.config.markers.offsetY : null) } else c.push(a + h.config.markers.offsetX), d.push(P.isNumber(t[r][n + 1]) ? s + h.config.markers.offsetY : null); return { x: c, y: d } } }, { key: "checkPreviousPaths", value: function (e) { for (var t = e.pathFromLine, i = e.pathFromArea, a = e.realIndex, s = this.w, r = 0; r < s.globals.previousPaths.length; r++) { var n = s.globals.previousPaths[r]; (n.type === "line" || n.type === "area") && n.paths.length > 0 && parseInt(n.realIndex, 10) === parseInt(a, 10) && (n.type === "line" ? (this.lineCtx.appendPathFrom = !1, t = s.globals.previousPaths[r].paths[0].d) : n.type === "area" && (this.lineCtx.appendPathFrom = !1, i = s.globals.previousPaths[r].paths[0].d, s.config.stroke.show && s.globals.previousPaths[r].paths[1] && (t = s.globals.previousPaths[r].paths[1].d))) } return { pathFromLine: t, pathFromArea: i } } }, { key: "determineFirstPrevY", value: function (e) { var t, i, a, s = e.i, r = e.realIndex, n = e.series, o = e.prevY, h = e.lineYPosition, c = e.translationsIndex, d = this.w, g = d.config.chart.stacked && !d.globals.comboCharts || d.config.chart.stacked && d.globals.comboCharts && (!this.w.config.chart.stackOnlyBar || ((t = this.w.config.series[r]) === null || t === void 0 ? void 0 : t.type) === "bar" || ((i = this.w.config.series[r]) === null || i === void 0 ? void 0 : i.type) === "column"); if (((a = n[s]) === null || a === void 0 ? void 0 : a[0]) !== void 0) o = (h = g && s > 0 ? this.lineCtx.prevSeriesY[s - 1][0] : this.lineCtx.zeroY) - n[s][0] / this.lineCtx.yRatio[c] + 2 * (this.lineCtx.isReversed ? n[s][0] / this.lineCtx.yRatio[c] : 0); else if (g && s > 0 && n[s][0] === void 0) { for (var f = s - 1; f >= 0; f--)if (n[f][0] !== null && n[f][0] !== void 0) { o = h = this.lineCtx.prevSeriesY[f][0]; break } } return { prevY: o, lineYPosition: h } } }]), p }(), na = function (p) { for (var e, t, i, a, s = function (c) { for (var d = [], g = c[0], f = c[1], x = d[0] = et(g, f), b = 1, v = c.length - 1; b < v; b++)g = f, f = c[b + 1], d[b] = .5 * (x + (x = et(g, f))); return d[b] = x, d }(p), r = p.length - 1, n = [], o = 0; o < r; o++)i = et(p[o], p[o + 1]), Math.abs(i) < 1e-6 ? s[o] = s[o + 1] = 0 : (a = (e = s[o] / i) * e + (t = s[o + 1] / i) * t) > 9 && (a = 3 * i / Math.sqrt(a), s[o] = a * e, s[o + 1] = a * t); for (var h = 0; h <= r; h++)a = (p[Math.min(r, h + 1)][0] - p[Math.max(0, h - 1)][0]) / (6 * (1 + s[h] * s[h])), n.push([a || 0, s[h] * a || 0]); return n }, oa = function (p) { var e = na(p), t = p[1], i = p[0], a = [], s = e[1], r = e[0]; a.push(i, [i[0] + r[0], i[1] + r[1], t[0] - s[0], t[1] - s[1], t[0], t[1]]); for (var n = 2, o = e.length; n < o; n++) { var h = p[n], c = e[n]; a.push([h[0] - c[0], h[1] - c[1], h[0], h[1]]) } return a }, la = function (p, e, t) { var i = p.slice(e, t); if (e) { if (t - e > 1 && i[1].length < 6) { var a = i[0].length; i[1] = [2 * i[0][a - 2] - i[0][a - 4], 2 * i[0][a - 1] - i[0][a - 3]].concat(i[1]) } i[0] = i[0].slice(-2) } return i }; function et(p, e) { return (e[1] - p[1]) / (e[0] - p[0]) } var tt = function () { function p(e, t, i) { F(this, p), this.ctx = e, this.w = e.w, this.xyRatios = t, this.pointsChart = !(this.w.config.chart.type !== "bubble" && this.w.config.chart.type !== "scatter") || i, this.scatter = new Yt(this.ctx), this.noNegatives = this.w.globals.minX === Number.MAX_VALUE, this.lineHelpers = new ra(this), this.markers = new ye(this.ctx), this.prevSeriesY = [], this.categoryAxisCorrection = 0, this.yaxisIndex = 0 } return R(p, [{ key: "draw", value: function (e, t, i, a) { var s, r = this.w, n = new X(this.ctx), o = r.globals.comboCharts ? t : r.config.chart.type, h = n.group({ class: "apexcharts-".concat(o, "-series apexcharts-plot-series") }), c = new $(this.ctx, r); this.yRatio = this.xyRatios.yRatio, this.zRatio = this.xyRatios.zRatio, this.xRatio = this.xyRatios.xRatio, this.baseLineY = this.xyRatios.baseLineY, e = c.getLogSeries(e), this.yRatio = c.getLogYRatios(this.yRatio), this.prevSeriesY = []; for (var d = [], g = 0; g < e.length; g++) { e = this.lineHelpers.sameValueSeriesFix(g, e); var f = r.globals.comboCharts ? i[g] : g, x = this.yRatio.length > 1 ? f : 0; this._initSerieVariables(e, g, f); var b = [], v = [], y = [], w = r.globals.padHorizontal + this.categoryAxisCorrection; this.ctx.series.addCollapsedClassToSeries(this.elSeries, f), r.globals.isXNumeric && r.globals.seriesX.length > 0 && (w = (r.globals.seriesX[f][0] - r.globals.minX) / this.xRatio), y.push(w); var l, u = w, m = void 0, A = u, k = this.zeroY, S = this.zeroY; k = this.lineHelpers.determineFirstPrevY({ i: g, realIndex: f, series: e, prevY: k, lineYPosition: 0, translationsIndex: x }).prevY, r.config.stroke.curve === "monotoneCubic" && e[g][0] === null ? b.push(null) : b.push(k), l = k, o === "rangeArea" && (m = S = this.lineHelpers.determineFirstPrevY({ i: g, realIndex: f, series: a, prevY: S, lineYPosition: 0, translationsIndex: x }).prevY, v.push(b[0] !== null ? S : null)); var L = this._calculatePathsFrom({ type: o, series: e, i: g, realIndex: f, translationsIndex: x, prevX: A, prevY: k, prevY2: S }), C = [b[0]], I = [v[0]], z = { type: o, series: e, realIndex: f, translationsIndex: x, i: g, x: w, y: 1, pX: u, pY: l, pathsFrom: L, linePaths: [], areaPaths: [], seriesIndex: i, lineYPosition: 0, xArrj: y, yArrj: b, y2Arrj: v, seriesRangeEnd: a }, M = this._iterateOverDataPoints(Y(Y({}, z), {}, { iterations: o === "rangeArea" ? e[g].length - 1 : void 0, isRangeStart: !0 })); if (o === "rangeArea") { for (var T = this._calculatePathsFrom({ series: a, i: g, realIndex: f, prevX: A, prevY: S }), E = this._iterateOverDataPoints(Y(Y({}, z), {}, { series: a, xArrj: [w], yArrj: C, y2Arrj: I, pY: m, areaPaths: M.areaPaths, pathsFrom: T, iterations: a[g].length - 1, isRangeStart: !1 })), O = M.linePaths.length / 2, D = 0; D < O; D++)M.linePaths[D] = E.linePaths[D + O] + M.linePaths[D]; M.linePaths.splice(O), M.pathFromLine = E.pathFromLine + M.pathFromLine } else M.pathFromArea += "z"; this._handlePaths({ type: o, realIndex: f, i: g, paths: M }), this.elSeries.add(this.elPointsMain), this.elSeries.add(this.elDataLabelsWrap), d.push(this.elSeries) } if (((s = r.config.series[0]) === null || s === void 0 ? void 0 : s.zIndex) !== void 0 && d.sort(function (N, B) { return Number(N.node.getAttribute("zIndex")) - Number(B.node.getAttribute("zIndex")) }), r.config.chart.stacked) for (var H = d.length - 1; H >= 0; H--)h.add(d[H]); else for (var W = 0; W < d.length; W++)h.add(d[W]); return h } }, { key: "_initSerieVariables", value: function (e, t, i) { var a = this.w, s = new X(this.ctx); this.xDivision = a.globals.gridWidth / (a.globals.dataPoints - (a.config.xaxis.tickPlacement === "on" ? 1 : 0)), this.strokeWidth = Array.isArray(a.config.stroke.width) ? a.config.stroke.width[i] : a.config.stroke.width; var r = 0; this.yRatio.length > 1 && (this.yaxisIndex = a.globals.seriesYAxisReverseMap[i], r = i), this.isReversed = a.config.yaxis[this.yaxisIndex] && a.config.yaxis[this.yaxisIndex].reversed, this.zeroY = a.globals.gridHeight - this.baseLineY[r] - (this.isReversed ? a.globals.gridHeight : 0) + (this.isReversed ? 2 * this.baseLineY[r] : 0), this.areaBottomY = this.zeroY, (this.zeroY > a.globals.gridHeight || a.config.plotOptions.area.fillTo === "end") && (this.areaBottomY = a.globals.gridHeight), this.categoryAxisCorrection = this.xDivision / 2, this.elSeries = s.group({ class: "apexcharts-series", zIndex: a.config.series[i].zIndex !== void 0 ? a.config.series[i].zIndex : i, seriesName: P.escapeString(a.globals.seriesNames[i]) }), this.elPointsMain = s.group({ class: "apexcharts-series-markers-wrap", "data:realIndex": i }), this.elDataLabelsWrap = s.group({ class: "apexcharts-datalabels", "data:realIndex": i }); var n = e[t].length === a.globals.dataPoints; this.elSeries.attr({ "data:longestSeries": n, rel: t + 1, "data:realIndex": i }), this.appendPathFrom = !0 } }, { key: "_calculatePathsFrom", value: function (e) { var t, i, a, s, r = e.type, n = e.series, o = e.i, h = e.realIndex, c = e.translationsIndex, d = e.prevX, g = e.prevY, f = e.prevY2, x = this.w, b = new X(this.ctx); if (n[o][0] === null) { for (var v = 0; v < n[o].length; v++)if (n[o][v] !== null) { d = this.xDivision * v, g = this.zeroY - n[o][v] / this.yRatio[c], t = b.move(d, g), i = b.move(d, this.areaBottomY); break } } else t = b.move(d, g), r === "rangeArea" && (t = b.move(d, f) + b.line(d, g)), i = b.move(d, this.areaBottomY) + b.line(d, g); if (a = b.move(0, this.zeroY) + b.line(0, this.zeroY), s = b.move(0, this.zeroY) + b.line(0, this.zeroY), x.globals.previousPaths.length > 0) { var y = this.lineHelpers.checkPreviousPaths({ pathFromLine: a, pathFromArea: s, realIndex: h }); a = y.pathFromLine, s = y.pathFromArea } return { prevX: d, prevY: g, linePath: t, areaPath: i, pathFromLine: a, pathFromArea: s } } }, { key: "_handlePaths", value: function (e) { var t = e.type, i = e.realIndex, a = e.i, s = e.paths, r = this.w, n = new X(this.ctx), o = new ne(this.ctx); this.prevSeriesY.push(s.yArrj), r.globals.seriesXvalues[i] = s.xArrj, r.globals.seriesYvalues[i] = s.yArrj; var h = r.config.forecastDataPoints; if (h.count > 0 && t !== "rangeArea") { var c = r.globals.seriesXvalues[i][r.globals.seriesXvalues[i].length - h.count - 1], d = n.drawRect(c, 0, r.globals.gridWidth, r.globals.gridHeight, 0); r.globals.dom.elForecastMask.appendChild(d.node); var g = n.drawRect(0, 0, c, r.globals.gridHeight, 0); r.globals.dom.elNonForecastMask.appendChild(g.node) } this.pointsChart || r.globals.delayedElements.push({ el: this.elPointsMain.node, index: i }); var f = { i: a, realIndex: i, animationDelay: a, initialSpeed: r.config.chart.animations.speed, dataChangeSpeed: r.config.chart.animations.dynamicAnimation.speed, className: "apexcharts-".concat(t) }; if (t === "area") for (var x = o.fillPath({ seriesNumber: i }), b = 0; b < s.areaPaths.length; b++) { var v = n.renderPaths(Y(Y({}, f), {}, { pathFrom: s.pathFromArea, pathTo: s.areaPaths[b], stroke: "none", strokeWidth: 0, strokeLineCap: null, fill: x })); this.elSeries.add(v) } if (r.config.stroke.show && !this.pointsChart) { var y = null; if (t === "line") y = o.fillPath({ seriesNumber: i, i: a }); else if (r.config.stroke.fill.type === "solid") y = r.globals.stroke.colors[i]; else { var w = r.config.fill; r.config.fill = r.config.stroke.fill, y = o.fillPath({ seriesNumber: i, i: a }), r.config.fill = w } for (var l = 0; l < s.linePaths.length; l++) { var u = y; t === "rangeArea" && (u = o.fillPath({ seriesNumber: i })); var m = Y(Y({}, f), {}, { pathFrom: s.pathFromLine, pathTo: s.linePaths[l], stroke: y, strokeWidth: this.strokeWidth, strokeLineCap: r.config.stroke.lineCap, fill: t === "rangeArea" ? u : "none" }), A = n.renderPaths(m); if (this.elSeries.add(A), A.attr("fill-rule", "evenodd"), h.count > 0 && t !== "rangeArea") { var k = n.renderPaths(m); k.node.setAttribute("stroke-dasharray", h.dashArray), h.strokeWidth && k.node.setAttribute("stroke-width", h.strokeWidth), this.elSeries.add(k), k.attr("clip-path", "url(#forecastMask".concat(r.globals.cuid, ")")), A.attr("clip-path", "url(#nonForecastMask".concat(r.globals.cuid, ")")) } } } } }, { key: "_iterateOverDataPoints", value: function (e) { var t, i, a = this, s = e.type, r = e.series, n = e.iterations, o = e.realIndex, h = e.translationsIndex, c = e.i, d = e.x, g = e.y, f = e.pX, x = e.pY, b = e.pathsFrom, v = e.linePaths, y = e.areaPaths, w = e.seriesIndex, l = e.lineYPosition, u = e.xArrj, m = e.yArrj, A = e.y2Arrj, k = e.isRangeStart, S = e.seriesRangeEnd, L = this.w, C = new X(this.ctx), I = this.yRatio, z = b.prevY, M = b.linePath, T = b.areaPath, E = b.pathFromLine, O = b.pathFromArea, D = P.isNumber(L.globals.minYArr[o]) ? L.globals.minYArr[o] : L.globals.minY; n || (n = L.globals.dataPoints > 1 ? L.globals.dataPoints - 1 : L.globals.dataPoints); var H = function (Q, ee) { return ee - Q / I[h] + 2 * (a.isReversed ? Q / I[h] : 0) }, W = g, N = L.config.chart.stacked && !L.globals.comboCharts || L.config.chart.stacked && L.globals.comboCharts && (!this.w.config.chart.stackOnlyBar || ((t = this.w.config.series[o]) === null || t === void 0 ? void 0 : t.type) === "bar" || ((i = this.w.config.series[o]) === null || i === void 0 ? void 0 : i.type) === "column"), B = L.config.stroke.curve; Array.isArray(B) && (B = Array.isArray(w) ? B[w[c]] : B[c]); for (var q, Z = 0, j = 0; j < n; j++) { var se = r[c][j + 1] === void 0 || r[c][j + 1] === null; if (L.globals.isXNumeric) { var V = L.globals.seriesX[o][j + 1]; L.globals.seriesX[o][j + 1] === void 0 && (V = L.globals.seriesX[o][n - 1]), d = (V - L.globals.minX) / this.xRatio } else d += this.xDivision; N ? c > 0 && L.globals.collapsedSeries.length < L.config.series.length - 1 ? l = this.prevSeriesY[function (Q) { for (var ee = Q; ee > 0; ee--) { if (!(L.globals.collapsedSeriesIndices.indexOf(w?.[ee] || ee) > -1)) return ee; ee-- } return 0 }(c - 1)][j + 1] : l = this.zeroY : l = this.zeroY, se ? g = H(D, l) : (g = H(r[c][j + 1], l), s === "rangeArea" && (W = H(S[c][j + 1], l))), u.push(d), !se || L.config.stroke.curve !== "smooth" && L.config.stroke.curve !== "monotoneCubic" ? (m.push(g), A.push(W)) : (m.push(null), A.push(null)); var G = this.lineHelpers.calculatePoints({ series: r, x: d, y: g, realIndex: o, i: c, j, prevY: z }), _ = this._createPaths({ type: s, series: r, i: c, realIndex: o, j, x: d, y: g, y2: W, xArrj: u, yArrj: m, y2Arrj: A, pX: f, pY: x, pathState: Z, segmentStartX: q, linePath: M, areaPath: T, linePaths: v, areaPaths: y, curve: B, isRangeStart: k }); y = _.areaPaths, v = _.linePaths, f = _.pX, x = _.pY, Z = _.pathState, q = _.segmentStartX, T = _.areaPath, M = _.linePath, !this.appendPathFrom || B === "monotoneCubic" && s === "rangeArea" || (E += C.line(d, this.zeroY), O += C.line(d, this.zeroY)), this.handleNullDataPoints(r, G, c, j, o), this._handleMarkersAndLabels({ type: s, pointsPos: G, i: c, j, realIndex: o, isRangeStart: k }) } return { yArrj: m, xArrj: u, pathFromArea: O, areaPaths: y, pathFromLine: E, linePaths: v, linePath: M, areaPath: T } } }, { key: "_handleMarkersAndLabels", value: function (e) { var t = e.type, i = e.pointsPos, a = e.isRangeStart, s = e.i, r = e.j, n = e.realIndex, o = this.w, h = new be(this.ctx); if (this.pointsChart) this.scatter.draw(this.elSeries, r, { realIndex: n, pointsPos: i, zRatio: this.zRatio, elParent: this.elPointsMain }); else { o.globals.series[s].length > 1 && this.elPointsMain.node.classList.add("apexcharts-element-hidden"); var c = this.markers.plotChartMarkers(i, n, r + 1); c !== null && this.elPointsMain.add(c) } var d = h.drawDataLabel({ type: t, isRangeStart: a, pos: i, i: n, j: r + 1 }); d !== null && this.elDataLabelsWrap.add(d) } }, { key: "_createPaths", value: function (e) { var t = e.type, i = e.series, a = e.i; e.realIndex; var s = e.j, r = e.x, n = e.y, o = e.xArrj, h = e.yArrj, c = e.y2, d = e.y2Arrj, g = e.pX, f = e.pY, x = e.pathState, b = e.segmentStartX, v = e.linePath, y = e.areaPath, w = e.linePaths, l = e.areaPaths, u = e.curve, m = e.isRangeStart; this.w; var A, k = new X(this.ctx), S = this.areaBottomY, L = t === "rangeArea", C = t === "rangeArea" && m; switch (u) { case "monotoneCubic": var I = m ? h : d; switch (x) { case 0: if (I[s + 1] === null) break; x = 1; case 1: if (!(L ? o.length === i[a].length : s === i[a].length - 2)) break; case 2: var z = m ? o : o.slice().reverse(), M = m ? I : I.slice().reverse(), T = (A = M, z.map(function (V, G) { return [V, A[G]] }).filter(function (V) { return V[1] !== null })), E = T.length > 1 ? oa(T) : T, O = []; L && (C ? l = T : O = l.reverse()); var D = 0, H = 0; if (function (V, G) { for (var _ = function (Se) { var ae = [], le = 0; return Se.forEach(function (Si) { Si !== null ? le++ : le > 0 && (ae.push(le), le = 0) }), le > 0 && ae.push(le), ae }(V), Q = [], ee = 0, oe = 0; ee < _.length; oe += _[ee++])Q[ee] = la(G, oe, oe + _[ee]); return Q }(M, E).forEach(function (V) { D++; var G = function (ee) { for (var oe = "", Se = 0; Se < ee.length; Se++) { var ae = ee[Se], le = ae.length; le > 4 ? (oe += "C".concat(ae[0], ", ").concat(ae[1]), oe += ", ".concat(ae[2], ", ").concat(ae[3]), oe += ", ".concat(ae[4], ", ").concat(ae[5])) : le > 2 && (oe += "S".concat(ae[0], ", ").concat(ae[1]), oe += ", ".concat(ae[2], ", ").concat(ae[3])) } return oe }(V), _ = H, Q = (H += V.length) - 1; C ? v = k.move(T[_][0], T[_][1]) + G : L ? v = k.move(O[_][0], O[_][1]) + k.line(T[_][0], T[_][1]) + G + k.line(O[Q][0], O[Q][1]) : (v = k.move(T[_][0], T[_][1]) + G, y = v + k.line(T[Q][0], S) + k.line(T[_][0], S) + "z", l.push(y)), w.push(v) }), L && D > 1 && !C) { var W = w.slice(D).reverse(); w.splice(D), W.forEach(function (V) { return w.push(V) }) } x = 0 }break; case "smooth": var N = .35 * (r - g); if (i[a][s] === null) x = 0; else switch (x) { case 0: if (b = g, v = C ? k.move(g, d[s]) + k.line(g, f) : k.move(g, f), y = k.move(g, f), x = 1, s < i[a].length - 2) { var B = k.curve(g + N, f, r - N, n, r, n); v += B, y += B; break } case 1: if (i[a][s + 1] === null) v += C ? k.line(g, c) : k.move(g, f), y += k.line(g, S) + k.line(b, S) + "z", w.push(v), l.push(y), x = -1; else { var q = k.curve(g + N, f, r - N, n, r, n); v += q, y += q, s >= i[a].length - 2 && (C && (v += k.curve(r, n, r, n, r, c) + k.move(r, c)), y += k.curve(r, n, r, n, r, S) + k.line(b, S) + "z", w.push(v), l.push(y), x = -1) } }g = r, f = n; break; default: var Z = function (V, G, _) { var Q = []; switch (V) { case "stepline": Q = k.line(G, null, "H") + k.line(null, _, "V"); break; case "linestep": Q = k.line(null, _, "V") + k.line(G, null, "H"); break; case "straight": Q = k.line(G, _) }return Q }; if (i[a][s] === null) x = 0; else switch (x) { case 0: if (b = g, v = C ? k.move(g, d[s]) + k.line(g, f) : k.move(g, f), y = k.move(g, f), x = 1, s < i[a].length - 2) { var j = Z(u, r, n); v += j, y += j; break } case 1: if (i[a][s + 1] === null) v += C ? k.line(g, c) : k.move(g, f), y += k.line(g, S) + k.line(b, S) + "z", w.push(v), l.push(y), x = -1; else { var se = Z(u, r, n); v += se, y += se, s >= i[a].length - 2 && (C && (v += k.line(r, c)), y += k.line(r, S) + k.line(b, S) + "z", w.push(v), l.push(y), x = -1) } }g = r, f = n }return { linePaths: w, areaPaths: l, pX: g, pY: f, pathState: x, segmentStartX: b, linePath: v, areaPath: y } } }, { key: "handleNullDataPoints", value: function (e, t, i, a, s) { var r = this.w; if (e[i][a] === null && r.config.markers.showNullDataPoints || e[i].length === 1) { var n = this.strokeWidth - r.config.markers.strokeWidth / 2; n > 0 || (n = 0); var o = this.markers.plotChartMarkers(t, s, a + 1, n, !0); o !== null && this.elPointsMain.add(o) } } }]), p }(); window.TreemapSquared = {}, window.TreemapSquared.generate = function () { function p(n, o, h, c) { this.xoffset = n, this.yoffset = o, this.height = c, this.width = h, this.shortestEdge = function () { return Math.min(this.height, this.width) }, this.getCoordinates = function (d) { var g, f = [], x = this.xoffset, b = this.yoffset, v = s(d) / this.height, y = s(d) / this.width; if (this.width >= this.height) for (g = 0; g < d.length; g++)f.push([x, b, x + v, b + d[g] / v]), b += d[g] / v; else for (g = 0; g < d.length; g++)f.push([x, b, x + d[g] / y, b + y]), x += d[g] / y; return f }, this.cutArea = function (d) { var g; if (this.width >= this.height) { var f = d / this.height, x = this.width - f; g = new p(this.xoffset + f, this.yoffset, x, this.height) } else { var b = d / this.width, v = this.height - b; g = new p(this.xoffset, this.yoffset + b, this.width, v) } return g } } function e(n, o, h, c, d) { c = c === void 0 ? 0 : c, d = d === void 0 ? 0 : d; var g = t(function (f, x) { var b, v = [], y = x / s(f); for (b = 0; b < f.length; b++)v[b] = f[b] * y; return v }(n, o * h), [], new p(c, d, o, h), []); return function (f) { var x, b, v = []; for (x = 0; x < f.length; x++)for (b = 0; b < f[x].length; b++)v.push(f[x][b]); return v }(g) } function t(n, o, h, c) { var d, g, f; if (n.length !== 0) return d = h.shortestEdge(), function (x, b, v) { var y; if (x.length === 0) return !0; (y = x.slice()).push(b); var w = i(x, v), l = i(y, v); return w >= l }(o, g = n[0], d) ? (o.push(g), t(n.slice(1), o, h, c)) : (f = h.cutArea(s(o), c), c.push(h.getCoordinates(o)), t(n, [], f, c)), c; c.push(h.getCoordinates(o)) } function i(n, o) { var h = Math.min.apply(Math, n), c = Math.max.apply(Math, n), d = s(n); return Math.max(Math.pow(o, 2) * c / Math.pow(d, 2), Math.pow(d, 2) / (Math.pow(o, 2) * h)) } function a(n) { return n && n.constructor === Array } function s(n) { var o, h = 0; for (o = 0; o < n.length; o++)h += n[o]; return h } function r(n) { var o, h = 0; if (a(n[0])) for (o = 0; o < n.length; o++)h += r(n[o]); else h = s(n); return h } return function n(o, h, c, d, g) { d = d === void 0 ? 0 : d, g = g === void 0 ? 0 : g; var f, x, b = [], v = []; if (a(o[0])) { for (x = 0; x < o.length; x++)b[x] = r(o[x]); for (f = e(b, h, c, d, g), x = 0; x < o.length; x++)v.push(n(o[x], f[x][2] - f[x][0], f[x][3] - f[x][1], f[x][0], f[x][1])) } else v = e(o, h, c, d, g); return v } }(); var he, Ce, ha = function () { function p(e, t) { F(this, p), this.ctx = e, this.w = e.w, this.strokeWidth = this.w.config.stroke.width, this.helpers = new Bt(e), this.dynamicAnim = this.w.config.chart.animations.dynamicAnimation, this.labels = [] } return R(p, [{ key: "draw", value: function (e) { var t = this, i = this.w, a = new X(this.ctx), s = new ne(this.ctx), r = a.group({ class: "apexcharts-treemap" }); if (i.globals.noData) return r; var n = []; return e.forEach(function (o) { var h = o.map(function (c) { return Math.abs(c) }); n.push(h) }), this.negRange = this.helpers.checkColorRange(), i.config.series.forEach(function (o, h) { o.data.forEach(function (c) { Array.isArray(t.labels[h]) || (t.labels[h] = []), t.labels[h].push(c.x) }) }), window.TreemapSquared.generate(n, i.globals.gridWidth, i.globals.gridHeight).forEach(function (o, h) { var c = a.group({ class: "apexcharts-series apexcharts-treemap-series", seriesName: P.escapeString(i.globals.seriesNames[h]), rel: h + 1, "data:realIndex": h }); if (i.config.chart.dropShadow.enabled) { var d = i.config.chart.dropShadow; new ie(t.ctx).dropShadow(r, d, h) } var g = a.group({ class: "apexcharts-data-labels" }); o.forEach(function (f, x) { var b = f[0], v = f[1], y = f[2], w = f[3], l = a.drawRect(b, v, y - b, w - v, i.config.plotOptions.treemap.borderRadius, "#fff", 1, t.strokeWidth, i.config.plotOptions.treemap.useFillColorAsStroke ? m : i.globals.stroke.colors[h]); l.attr({ cx: b, cy: v, index: h, i: h, j: x, width: y - b, height: w - v }); var u = t.helpers.getShadeColor(i.config.chart.type, h, x, t.negRange), m = u.color; i.config.series[h].data[x] !== void 0 && i.config.series[h].data[x].fillColor && (m = i.config.series[h].data[x].fillColor); var A = s.fillPath({ color: m, seriesNumber: h, dataPointIndex: x }); l.node.classList.add("apexcharts-treemap-rect"), l.attr({ fill: A }), t.helpers.addListeners(l); var k = { x: b + (y - b) / 2, y: v + (w - v) / 2, width: 0, height: 0 }, S = { x: b, y: v, width: y - b, height: w - v }; if (i.config.chart.animations.enabled && !i.globals.dataChanged) { var L = 1; i.globals.resized || (L = i.config.chart.animations.speed), t.animateTreemap(l, k, S, L) } if (i.globals.dataChanged) { var C = 1; t.dynamicAnim.enabled && i.globals.shouldAnimate && (C = t.dynamicAnim.speed, i.globals.previousPaths[h] && i.globals.previousPaths[h][x] && i.globals.previousPaths[h][x].rect && (k = i.globals.previousPaths[h][x].rect), t.animateTreemap(l, k, S, C)) } var I = t.getFontSize(f), z = i.config.dataLabels.formatter(t.labels[h][x], { value: i.globals.series[h][x], seriesIndex: h, dataPointIndex: x, w: i }); i.config.plotOptions.treemap.dataLabels.format === "truncate" && (I = parseInt(i.config.dataLabels.style.fontSize, 10), z = t.truncateLabels(z, I, b, v, y, w)); var M = null; i.globals.series[h][x] && (M = t.helpers.calculateDataLabels({ text: z, x: (b + y) / 2, y: (v + w) / 2 + t.strokeWidth / 2 + I / 3, i: h, j: x, colorProps: u, fontSize: I, series: e })), i.config.dataLabels.enabled && M && t.rotateToFitLabel(M, I, z, b, v, y, w), c.add(l), M !== null && c.add(M) }), c.add(g), r.add(c) }), r } }, { key: "getFontSize", value: function (e) { var t = this.w, i, a, s, r, n = function o(h) { var c, d = 0; if (Array.isArray(h[0])) for (c = 0; c < h.length; c++)d += o(h[c]); else for (c = 0; c < h.length; c++)d += h[c].length; return d }(this.labels) / function o(h) { var c, d = 0; if (Array.isArray(h[0])) for (c = 0; c < h.length; c++)d += o(h[c]); else for (c = 0; c < h.length; c++)d += 1; return d }(this.labels); return i = e[2] - e[0], a = e[3] - e[1], s = i * a, r = Math.pow(s, .5), Math.min(r / n, parseInt(t.config.dataLabels.style.fontSize, 10)) } }, { key: "rotateToFitLabel", value: function (e, t, i, a, s, r, n) { var o = new X(this.ctx), h = o.getTextRects(i, t); if (h.width + this.w.config.stroke.width + 5 > r - a && h.width <= n - s) { var c = o.rotateAroundCenter(e.node); e.node.setAttribute("transform", "rotate(-90 ".concat(c.x, " ").concat(c.y, ") translate(").concat(h.height / 3, ")")) } } }, { key: "truncateLabels", value: function (e, t, i, a, s, r) { var n = new X(this.ctx), o = n.getTextRects(e, t).width + this.w.config.stroke.width + 5 > s - i && r - a > s - i ? r - a : s - i, h = n.getTextBasedOnMaxWidth({ text: e, maxWidth: o, fontSize: t }); return e.length !== h.length && o / t < 5 ? "" : h } }, { key: "animateTreemap", value: function (e, t, i, a) { var s = new ve(this.ctx); s.animateRect(e, { x: t.x, y: t.y, width: t.width, height: t.height }, { x: i.x, y: i.y, width: i.width, height: i.height }, a, function () { s.animationCompleted(e) }) } }]), p }(), _t = 86400, ca = 10 / _t, da = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w, this.timeScaleArray = [], this.utc = this.w.config.xaxis.labels.datetimeUTC } return R(p, [{ key: "calculateTimeScaleTicks", value: function (e, t) { var i = this, a = this.w; if (a.globals.allSeriesCollapsed) return a.globals.labels = [], a.globals.timescaleLabels = [], []; var s = new K(this.ctx), r = (t - e) / 864e5; this.determineInterval(r), a.globals.disableZoomIn = !1, a.globals.disableZoomOut = !1, r < ca ? a.globals.disableZoomIn = !0 : r > 5e4 && (a.globals.disableZoomOut = !0); var n = s.getTimeUnitsfromTimestamp(e, t, this.utc), o = a.globals.gridWidth / r, h = o / 24, c = h / 60, d = c / 60, g = Math.floor(24 * r), f = Math.floor(1440 * r), x = Math.floor(r * _t), b = Math.floor(r), v = Math.floor(r / 30), y = Math.floor(r / 365), w = { minMillisecond: n.minMillisecond, minSecond: n.minSecond, minMinute: n.minMinute, minHour: n.minHour, minDate: n.minDate, minMonth: n.minMonth, minYear: n.minYear }, l = { firstVal: w, currentMillisecond: w.minMillisecond, currentSecond: w.minSecond, currentMinute: w.minMinute, currentHour: w.minHour, currentMonthDate: w.minDate, currentDate: w.minDate, currentMonth: w.minMonth, currentYear: w.minYear, daysWidthOnXAxis: o, hoursWidthOnXAxis: h, minutesWidthOnXAxis: c, secondsWidthOnXAxis: d, numberOfSeconds: x, numberOfMinutes: f, numberOfHours: g, numberOfDays: b, numberOfMonths: v, numberOfYears: y }; switch (this.tickInterval) { case "years": this.generateYearScale(l); break; case "months": case "half_year": this.generateMonthScale(l); break; case "months_days": case "months_fortnight": case "days": case "week_days": this.generateDayScale(l); break; case "hours": this.generateHourScale(l); break; case "minutes_fives": case "minutes": this.generateMinuteScale(l); break; case "seconds_tens": case "seconds_fives": case "seconds": this.generateSecondScale(l) }var u = this.timeScaleArray.map(function (m) { var A = { position: m.position, unit: m.unit, year: m.year, day: m.day ? m.day : 1, hour: m.hour ? m.hour : 0, month: m.month + 1 }; return m.unit === "month" ? Y(Y({}, A), {}, { day: 1, value: m.value + 1 }) : m.unit === "day" || m.unit === "hour" ? Y(Y({}, A), {}, { value: m.value }) : m.unit === "minute" ? Y(Y({}, A), {}, { value: m.value, minute: m.value }) : m.unit === "second" ? Y(Y({}, A), {}, { value: m.value, minute: m.minute, second: m.second }) : m }); return u.filter(function (m) { var A = 1, k = Math.ceil(a.globals.gridWidth / 120), S = m.value; a.config.xaxis.tickAmount !== void 0 && (k = a.config.xaxis.tickAmount), u.length > k && (A = Math.floor(u.length / k)); var L = !1, C = !1; switch (i.tickInterval) { case "years": m.unit === "year" && (L = !0); break; case "half_year": A = 7, m.unit === "year" && (L = !0); break; case "months": A = 1, m.unit === "year" && (L = !0); break; case "months_fortnight": A = 15, m.unit !== "year" && m.unit !== "month" || (L = !0), S === 30 && (C = !0); break; case "months_days": A = 10, m.unit === "month" && (L = !0), S === 30 && (C = !0); break; case "week_days": A = 8, m.unit === "month" && (L = !0); break; case "days": A = 1, m.unit === "month" && (L = !0); break; case "hours": m.unit === "day" && (L = !0); break; case "minutes_fives": case "seconds_fives": S % 5 != 0 && (C = !0); break; case "seconds_tens": S % 10 != 0 && (C = !0) }if (i.tickInterval === "hours" || i.tickInterval === "minutes_fives" || i.tickInterval === "seconds_tens" || i.tickInterval === "seconds_fives") { if (!C) return !0 } else if ((S % A == 0 || L) && !C) return !0 }) } }, { key: "recalcDimensionsBasedOnFormat", value: function (e, t) { var i = this.w, a = this.formatDates(e), s = this.removeOverlappingTS(a); i.globals.timescaleLabels = s.slice(), new Ne(this.ctx).plotCoords() } }, { key: "determineInterval", value: function (e) { var t = 24 * e, i = 60 * t; switch (!0) { case e / 365 > 5: this.tickInterval = "years"; break; case e > 800: this.tickInterval = "half_year"; break; case e > 180: this.tickInterval = "months"; break; case e > 90: this.tickInterval = "months_fortnight"; break; case e > 60: this.tickInterval = "months_days"; break; case e > 30: this.tickInterval = "week_days"; break; case e > 2: this.tickInterval = "days"; break; case t > 2.4: this.tickInterval = "hours"; break; case i > 15: this.tickInterval = "minutes_fives"; break; case i > 5: this.tickInterval = "minutes"; break; case i > 1: this.tickInterval = "seconds_tens"; break; case 60 * i > 20: this.tickInterval = "seconds_fives"; break; default: this.tickInterval = "seconds" } } }, { key: "generateYearScale", value: function (e) { var t = e.firstVal, i = e.currentMonth, a = e.currentYear, s = e.daysWidthOnXAxis, r = e.numberOfYears, n = t.minYear, o = 0, h = new K(this.ctx), c = "year"; if (t.minDate > 1 || t.minMonth > 0) { var d = h.determineRemainingDaysOfYear(t.minYear, t.minMonth, t.minDate); o = (h.determineDaysOfYear(t.minYear) - d + 1) * s, n = t.minYear + 1, this.timeScaleArray.push({ position: o, value: n, unit: c, year: n, month: P.monthMod(i + 1) }) } else t.minDate === 1 && t.minMonth === 0 && this.timeScaleArray.push({ position: o, value: n, unit: c, year: a, month: P.monthMod(i + 1) }); for (var g = n, f = o, x = 0; x < r; x++)g++, f = h.determineDaysOfYear(g - 1) * s + f, this.timeScaleArray.push({ position: f, value: g, unit: c, year: g, month: 1 }) } }, { key: "generateMonthScale", value: function (e) { var t = e.firstVal, i = e.currentMonthDate, a = e.currentMonth, s = e.currentYear, r = e.daysWidthOnXAxis, n = e.numberOfMonths, o = a, h = 0, c = new K(this.ctx), d = "month", g = 0; if (t.minDate > 1) { h = (c.determineDaysOfMonths(a + 1, t.minYear) - i + 1) * r, o = P.monthMod(a + 1); var f = s + g, x = P.monthMod(o), b = o; o === 0 && (d = "year", b = f, x = 1, f += g += 1), this.timeScaleArray.push({ position: h, value: b, unit: d, year: f, month: x }) } else this.timeScaleArray.push({ position: h, value: o, unit: d, year: s, month: P.monthMod(a) }); for (var v = o + 1, y = h, w = 0, l = 1; w < n; w++, l++) { (v = P.monthMod(v)) === 0 ? (d = "year", g += 1) : d = "month"; var u = this._getYear(s, v, g); y = c.determineDaysOfMonths(v, u) * r + y; var m = v === 0 ? u : v; this.timeScaleArray.push({ position: y, value: m, unit: d, year: u, month: v === 0 ? 1 : v }), v++ } } }, { key: "generateDayScale", value: function (e) { var t = e.firstVal, i = e.currentMonth, a = e.currentYear, s = e.hoursWidthOnXAxis, r = e.numberOfDays, n = new K(this.ctx), o = "day", h = t.minDate + 1, c = h, d = function (l, u, m) { return l > n.determineDaysOfMonths(u + 1, m) && (c = 1, o = "month", f = u += 1), u }, g = (24 - t.minHour) * s, f = h, x = d(c, i, a); t.minHour === 0 && t.minDate === 1 ? (g = 0, f = P.monthMod(t.minMonth), o = "month", c = t.minDate) : t.minDate !== 1 && t.minHour === 0 && t.minMinute === 0 && (g = 0, h = t.minDate, f = h, x = d(c = h, i, a)), this.timeScaleArray.push({ position: g, value: f, unit: o, year: this._getYear(a, x, 0), month: P.monthMod(x), day: c }); for (var b = g, v = 0; v < r; v++) { o = "day", x = d(c += 1, x, this._getYear(a, x, 0)); var y = this._getYear(a, x, 0); b = 24 * s + b; var w = c === 1 ? P.monthMod(x) : c; this.timeScaleArray.push({ position: b, value: w, unit: o, year: y, month: P.monthMod(x), day: w }) } } }, { key: "generateHourScale", value: function (e) { var t = e.firstVal, i = e.currentDate, a = e.currentMonth, s = e.currentYear, r = e.minutesWidthOnXAxis, n = e.numberOfHours, o = new K(this.ctx), h = "hour", c = function (A, k) { return A > o.determineDaysOfMonths(k + 1, s) && (v = 1, k += 1), { month: k, date: v } }, d = function (A, k) { return A > o.determineDaysOfMonths(k + 1, s) ? k += 1 : k }, g = 60 - (t.minMinute + t.minSecond / 60), f = g * r, x = t.minHour + 1, b = x; g === 60 && (f = 0, b = x = t.minHour); var v = i; b >= 24 && (b = 0, v += 1, h = "day"); var y = c(v, a).month; y = d(v, y), this.timeScaleArray.push({ position: f, value: x, unit: h, day: v, hour: b, year: s, month: P.monthMod(y) }), b++; for (var w = f, l = 0; l < n; l++) { h = "hour", b >= 24 && (b = 0, h = "day", y = c(v += 1, y).month, y = d(v, y)); var u = this._getYear(s, y, 0); w = 60 * r + w; var m = b === 0 ? v : b; this.timeScaleArray.push({ position: w, value: m, unit: h, hour: b, day: v, year: u, month: P.monthMod(y) }), b++ } } }, { key: "generateMinuteScale", value: function (e) { for (var t = e.currentMillisecond, i = e.currentSecond, a = e.currentMinute, s = e.currentHour, r = e.currentDate, n = e.currentMonth, o = e.currentYear, h = e.minutesWidthOnXAxis, c = e.secondsWidthOnXAxis, d = e.numberOfMinutes, g = a + 1, f = r, x = n, b = o, v = s, y = (60 - i - t / 1e3) * c, w = 0; w < d; w++)g >= 60 && (g = 0, (v += 1) === 24 && (v = 0)), this.timeScaleArray.push({ position: y, value: g, unit: "minute", hour: v, minute: g, day: f, year: this._getYear(b, x, 0), month: P.monthMod(x) }), y += h, g++ } }, { key: "generateSecondScale", value: function (e) { for (var t = e.currentMillisecond, i = e.currentSecond, a = e.currentMinute, s = e.currentHour, r = e.currentDate, n = e.currentMonth, o = e.currentYear, h = e.secondsWidthOnXAxis, c = e.numberOfSeconds, d = i + 1, g = a, f = r, x = n, b = o, v = s, y = (1e3 - t) / 1e3 * h, w = 0; w < c; w++)d >= 60 && (d = 0, ++g >= 60 && (g = 0, ++v === 24 && (v = 0))), this.timeScaleArray.push({ position: y, value: d, unit: "second", hour: v, minute: g, second: d, day: f, year: this._getYear(b, x, 0), month: P.monthMod(x) }), y += h, d++ } }, { key: "createRawDateString", value: function (e, t) { var i = e.year; return e.month === 0 && (e.month = 1), i += "-" + ("0" + e.month.toString()).slice(-2), e.unit === "day" ? i += e.unit === "day" ? "-" + ("0" + t).slice(-2) : "-01" : i += "-" + ("0" + (e.day ? e.day : "1")).slice(-2), e.unit === "hour" ? i += e.unit === "hour" ? "T" + ("0" + t).slice(-2) : "T00" : i += "T" + ("0" + (e.hour ? e.hour : "0")).slice(-2), e.unit === "minute" ? i += ":" + ("0" + t).slice(-2) : i += ":" + (e.minute ? ("0" + e.minute).slice(-2) : "00"), e.unit === "second" ? i += ":" + ("0" + t).slice(-2) : i += ":00", this.utc && (i += ".000Z"), i } }, { key: "formatDates", value: function (e) { var t = this, i = this.w; return e.map(function (a) { var s = a.value.toString(), r = new K(t.ctx), n = t.createRawDateString(a, s), o = r.getDate(r.parseDate(n)); if (t.utc || (o = r.getDate(r.parseDateWithTimezone(n))), i.config.xaxis.labels.format === void 0) { var h = "dd MMM", c = i.config.xaxis.labels.datetimeFormatter; a.unit === "year" && (h = c.year), a.unit === "month" && (h = c.month), a.unit === "day" && (h = c.day), a.unit === "hour" && (h = c.hour), a.unit === "minute" && (h = c.minute), a.unit === "second" && (h = c.second), s = r.formatDate(o, h) } else s = r.formatDate(o, i.config.xaxis.labels.format); return { dateString: n, position: a.position, value: s, unit: a.unit, year: a.year, month: a.month } }) } }, { key: "removeOverlappingTS", value: function (e) { var t, i = this, a = new X(this.ctx), s = !1; e.length > 0 && e[0].value && e.every(function (o) { return o.value.length === e[0].value.length }) && (s = !0, t = a.getTextRects(e[0].value).width); var r = 0, n = e.map(function (o, h) { if (h > 0 && i.w.config.xaxis.labels.hideOverlappingLabels) { var c = s ? t : a.getTextRects(e[r].value).width, d = e[r].position; return o.position > d + c + 10 ? (r = h, o) : null } return o }); return n = n.filter(function (o) { return o !== null }) } }, { key: "_getYear", value: function (e, t, i) { return e + Math.floor(t / 12) + i } }]), p }(), ga = function () { function p(e, t) { F(this, p), this.ctx = t, this.w = t.w, this.el = e } return R(p, [{ key: "setupElements", value: function () { var e = this.w.globals, t = this.w.config, i = t.chart.type; e.axisCharts = ["line", "area", "bar", "rangeBar", "rangeArea", "candlestick", "boxPlot", "scatter", "bubble", "radar", "heatmap", "treemap"].indexOf(i) > -1, e.xyCharts = ["line", "area", "bar", "rangeBar", "rangeArea", "candlestick", "boxPlot", "scatter", "bubble"].indexOf(i) > -1, e.isBarHorizontal = (t.chart.type === "bar" || t.chart.type === "rangeBar" || t.chart.type === "boxPlot") && t.plotOptions.bar.horizontal, e.chartClass = ".apexcharts" + e.chartID, e.dom.baseEl = this.el, e.dom.elWrap = document.createElement("div"), X.setAttrs(e.dom.elWrap, { id: e.chartClass.substring(1), class: "apexcharts-canvas " + e.chartClass.substring(1) }), this.el.appendChild(e.dom.elWrap), e.dom.Paper = new window.SVG.Doc(e.dom.elWrap), e.dom.Paper.attr({ class: "apexcharts-svg", "xmlns:data": "ApexChartsNS", transform: "translate(".concat(t.chart.offsetX, ", ").concat(t.chart.offsetY, ")") }), e.dom.Paper.node.style.background = t.theme.mode !== "dark" || t.chart.background ? t.theme.mode !== "light" || t.chart.background ? t.chart.background : "#fff" : "#424242", this.setSVGDimensions(), e.dom.elLegendForeign = document.createElementNS(e.SVGNS, "foreignObject"), X.setAttrs(e.dom.elLegendForeign, { x: 0, y: 0, width: e.svgWidth, height: e.svgHeight }), e.dom.elLegendWrap = document.createElement("div"), e.dom.elLegendWrap.classList.add("apexcharts-legend"), e.dom.elLegendWrap.setAttribute("xmlns", "http://www.w3.org/1999/xhtml"), e.dom.elLegendForeign.appendChild(e.dom.elLegendWrap), e.dom.Paper.node.appendChild(e.dom.elLegendForeign), e.dom.elGraphical = e.dom.Paper.group().attr({ class: "apexcharts-inner apexcharts-graphical" }), e.dom.elDefs = e.dom.Paper.defs(), e.dom.Paper.add(e.dom.elGraphical), e.dom.elGraphical.add(e.dom.elDefs) } }, { key: "plotChartType", value: function (e, t) { var i = this.w, a = i.config, s = i.globals, r = { series: [], i: [] }, n = { series: [], i: [] }, o = { series: [], i: [] }, h = { series: [], i: [] }, c = { series: [], i: [] }, d = { series: [], i: [] }, g = { series: [], i: [] }, f = { series: [], i: [] }, x = { series: [], seriesRangeEnd: [], i: [] }, b = a.chart.type !== void 0 ? a.chart.type : "line", v = null, y = 0; s.series.forEach(function (M, T) { var E = e[T].type || b; switch (E) { case "column": case "bar": c.series.push(M), c.i.push(T), i.globals.columnSeries = c; break; case "area": n.series.push(M), n.i.push(T); break; case "line": r.series.push(M), r.i.push(T); break; case "scatter": o.series.push(M), o.i.push(T); break; case "bubble": h.series.push(M), h.i.push(T); break; case "candlestick": d.series.push(M), d.i.push(T); break; case "boxPlot": g.series.push(M), g.i.push(T); break; case "rangeBar": f.series.push(M), f.i.push(T); break; case "rangeArea": x.series.push(s.seriesRangeStart[T]), x.seriesRangeEnd.push(s.seriesRangeEnd[T]), x.i.push(T); break; case "heatmap": case "treemap": case "pie": case "donut": case "polarArea": case "radialBar": case "radar": v = E; break; default: console.warn("You have specified an unrecognized series type (", E, ").") }b !== E && E !== "scatter" && y++ }), y > 0 && (v !== null && console.warn("Chart or series type ", v, " can not appear with other chart or series types."), c.series.length > 0 && a.plotOptions.bar.horizontal && (y -= c.length, c = { series: [], i: [] }, i.globals.columnSeries = { series: [], i: [] }, console.warn("Horizontal bars are not supported in a mixed/combo chart. Please turn off `plotOptions.bar.horizontal`"))), s.comboCharts || (s.comboCharts = y > 0); var w = new tt(this.ctx, t), l = new Qe(this.ctx, t); this.ctx.pie = new Vt(this.ctx); var u = new aa(this.ctx); this.ctx.rangeBar = new sa(this.ctx, t); var m = new ia(this.ctx), A = []; if (s.comboCharts) { var k, S, L = new $(this.ctx); if (n.series.length > 0 && (k = A).push.apply(k, te(L.drawSeriesByGroup(n, s.areaGroups, "area", w))), c.series.length > 0) if (i.config.chart.stacked) { var C = new St(this.ctx, t); A.push(C.draw(c.series, c.i)) } else this.ctx.bar = new me(this.ctx, t), A.push(this.ctx.bar.draw(c.series, c.i)); if (x.series.length > 0 && A.push(w.draw(x.series, "rangeArea", x.i, x.seriesRangeEnd)), r.series.length > 0 && (S = A).push.apply(S, te(L.drawSeriesByGroup(r, s.lineGroups, "line", w))), d.series.length > 0 && A.push(l.draw(d.series, "candlestick", d.i)), g.series.length > 0 && A.push(l.draw(g.series, "boxPlot", g.i)), f.series.length > 0 && A.push(this.ctx.rangeBar.draw(f.series, f.i)), o.series.length > 0) { var I = new tt(this.ctx, t, !0); A.push(I.draw(o.series, "scatter", o.i)) } if (h.series.length > 0) { var z = new tt(this.ctx, t, !0); A.push(z.draw(h.series, "bubble", h.i)) } } else switch (a.chart.type) { case "line": A = w.draw(s.series, "line"); break; case "area": A = w.draw(s.series, "area"); break; case "bar": a.chart.stacked ? A = new St(this.ctx, t).draw(s.series) : (this.ctx.bar = new me(this.ctx, t), A = this.ctx.bar.draw(s.series)); break; case "candlestick": A = new Qe(this.ctx, t).draw(s.series, "candlestick"); break; case "boxPlot": A = new Qe(this.ctx, t).draw(s.series, a.chart.type); break; case "rangeBar": A = this.ctx.rangeBar.draw(s.series); break; case "rangeArea": A = w.draw(s.seriesRangeStart, "rangeArea", void 0, s.seriesRangeEnd); break; case "heatmap": A = new ta(this.ctx, t).draw(s.series); break; case "treemap": A = new ha(this.ctx, t).draw(s.series); break; case "pie": case "donut": case "polarArea": A = this.ctx.pie.draw(s.series); break; case "radialBar": A = u.draw(s.series); break; case "radar": A = m.draw(s.series); break; default: A = w.draw(s.series) }return A } }, { key: "setSVGDimensions", value: function () { var e = this.w.globals, t = this.w.config; t.chart.width || (t.chart.width = "100%"), t.chart.height || (t.chart.height = "auto"), e.svgWidth = t.chart.width, e.svgHeight = t.chart.height; var i = P.getDimensions(this.el), a = t.chart.width.toString().split(/[0-9]+/g).pop(); a === "%" ? P.isNumber(i[0]) && (i[0].width === 0 && (i = P.getDimensions(this.el.parentNode)), e.svgWidth = i[0] * parseInt(t.chart.width, 10) / 100) : a !== "px" && a !== "" || (e.svgWidth = parseInt(t.chart.width, 10)); var s = String(t.chart.height).toString().split(/[0-9]+/g).pop(); if (e.svgHeight !== "auto" && e.svgHeight !== "") if (s === "%") { var r = P.getDimensions(this.el.parentNode); e.svgHeight = r[1] * parseInt(t.chart.height, 10) / 100 } else e.svgHeight = parseInt(t.chart.height, 10); else e.axisCharts ? e.svgHeight = e.svgWidth / 1.61 : e.svgHeight = e.svgWidth / 1.2; if (e.svgWidth < 0 && (e.svgWidth = 0), e.svgHeight < 0 && (e.svgHeight = 0), X.setAttrs(e.dom.Paper.node, { width: e.svgWidth, height: e.svgHeight }), s !== "%") { var n = t.chart.sparkline.enabled ? 0 : e.axisCharts ? t.chart.parentHeightOffset : 0; e.dom.Paper.node.parentNode.parentNode.style.minHeight = e.svgHeight + n + "px" } e.dom.elWrap.style.width = e.svgWidth + "px", e.dom.elWrap.style.height = e.svgHeight + "px" } }, { key: "shiftGraphPosition", value: function () { var e = this.w.globals, t = e.translateY, i = { transform: "translate(" + e.translateX + ", " + t + ")" }; X.setAttrs(e.dom.elGraphical.node, i) } }, { key: "resizeNonAxisCharts", value: function () { var e = this.w, t = e.globals, i = 0, a = e.config.chart.sparkline.enabled ? 1 : 15; a += e.config.grid.padding.bottom, e.config.legend.position !== "top" && e.config.legend.position !== "bottom" || !e.config.legend.show || e.config.legend.floating || (i = new Dt(this.ctx).legendHelpers.getLegendDimensions().clwh + 10); var s = e.globals.dom.baseEl.querySelector(".apexcharts-radialbar, .apexcharts-pie"), r = 2.05 * e.globals.radialSize; if (s && !e.config.chart.sparkline.enabled && e.config.plotOptions.radialBar.startAngle !== 0) { var n = P.getBoundingClientRect(s); r = n.bottom; var o = n.bottom - n.top; r = Math.max(2.05 * e.globals.radialSize, o) } var h = r + t.translateY + i + a; t.dom.elLegendForeign && t.dom.elLegendForeign.setAttribute("height", h), e.config.chart.height && String(e.config.chart.height).indexOf("%") > 0 || (t.dom.elWrap.style.height = h + "px", X.setAttrs(t.dom.Paper.node, { height: h }), t.dom.Paper.node.parentNode.parentNode.style.minHeight = h + "px") } }, { key: "coreCalculations", value: function () { new rt(this.ctx).init() } }, { key: "resetGlobals", value: function () { var e = this, t = function () { return e.w.config.series.map(function (s) { return [] }) }, i = new Et, a = this.w.globals; i.initGlobalVars(a), a.seriesXvalues = t(), a.seriesYvalues = t() } }, { key: "isMultipleY", value: function () { if (this.w.config.yaxis.constructor === Array && this.w.config.yaxis.length > 1) return this.w.globals.isMultipleYAxis = !0, !0 } }, { key: "xySettings", value: function () { var e = null, t = this.w; if (t.globals.axisCharts) { if (t.config.xaxis.crosshairs.position === "back" && new nt(this.ctx).drawXCrosshairs(), t.config.yaxis[0].crosshairs.position === "back" && new nt(this.ctx).drawYCrosshairs(), t.config.xaxis.type === "datetime" && t.config.xaxis.labels.formatter === void 0) { this.ctx.timeScale = new da(this.ctx); var i = []; isFinite(t.globals.minX) && isFinite(t.globals.maxX) && !t.globals.isBarHorizontal ? i = this.ctx.timeScale.calculateTimeScaleTicks(t.globals.minX, t.globals.maxX) : t.globals.isBarHorizontal && (i = this.ctx.timeScale.calculateTimeScaleTicks(t.globals.minY, t.globals.maxY)), this.ctx.timeScale.recalcDimensionsBasedOnFormat(i) } e = new $(this.ctx).getCalculatedRatios() } return e } }, { key: "updateSourceChart", value: function (e) { this.ctx.w.globals.selection = void 0, this.ctx.updateHelpers._updateOptions({ chart: { selection: { xaxis: { min: e.w.globals.minX, max: e.w.globals.maxX } } } }, !1, !1) } }, { key: "setupBrushHandler", value: function () { var e = this, t = this.w; if (t.config.chart.brush.enabled && typeof t.config.chart.events.selection != "function") { var i = Array.isArray(t.config.chart.brush.targets) ? t.config.chart.brush.targets : [t.config.chart.brush.target]; i.forEach(function (a) { var s = ApexCharts.getChartByID(a); s.w.globals.brushSource = e.ctx, typeof s.w.config.chart.events.zoomed != "function" && (s.w.config.chart.events.zoomed = function () { e.updateSourceChart(s) }), typeof s.w.config.chart.events.scrolled != "function" && (s.w.config.chart.events.scrolled = function () { e.updateSourceChart(s) }) }), t.config.chart.events.selection = function (a, s) { i.forEach(function (r) { ApexCharts.getChartByID(r).ctx.updateHelpers._updateOptions({ xaxis: { min: s.xaxis.min, max: s.xaxis.max } }, !1, !1, !1, !1) }) } } } }]), p }(), ua = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w } return R(p, [{ key: "_updateOptions", value: function (e) { var t = this, i = arguments.length > 1 && arguments[1] !== void 0 && arguments[1], a = !(arguments.length > 2 && arguments[2] !== void 0) || arguments[2], s = !(arguments.length > 3 && arguments[3] !== void 0) || arguments[3], r = arguments.length > 4 && arguments[4] !== void 0 && arguments[4]; return new Promise(function (n) { var o = [t.ctx]; s && (o = t.ctx.getSyncedCharts()), t.ctx.w.globals.isExecCalled && (o = [t.ctx], t.ctx.w.globals.isExecCalled = !1), o.forEach(function (h, c) { var d = h.w; if (d.globals.shouldAnimate = a, i || (d.globals.resized = !0, d.globals.dataChanged = !0, a && h.series.getPreviousPaths()), e && J(e) === "object" && (h.config = new Pe(e), e = $.extendArrayProps(h.config, e, d), h.w.globals.chartID !== t.ctx.w.globals.chartID && delete e.series, d.config = P.extend(d.config, e), r && (d.globals.lastXAxis = e.xaxis ? P.clone(e.xaxis) : [], d.globals.lastYAxis = e.yaxis ? P.clone(e.yaxis) : [], d.globals.initialConfig = P.extend({}, d.config), d.globals.initialSeries = P.clone(d.config.series), e.series))) { for (var g = 0; g < d.globals.collapsedSeriesIndices.length; g++) { var f = d.config.series[d.globals.collapsedSeriesIndices[g]]; d.globals.collapsedSeries[g].data = d.globals.axisCharts ? f.data.slice() : f } for (var x = 0; x < d.globals.ancillaryCollapsedSeriesIndices.length; x++) { var b = d.config.series[d.globals.ancillaryCollapsedSeriesIndices[x]]; d.globals.ancillaryCollapsedSeries[x].data = d.globals.axisCharts ? b.data.slice() : b } h.series.emptyCollapsedSeries(d.config.series) } return h.update(e).then(function () { c === o.length - 1 && n(h) }) }) }) } }, { key: "_updateSeries", value: function (e, t) { var i = this, a = arguments.length > 2 && arguments[2] !== void 0 && arguments[2]; return new Promise(function (s) { var r, n = i.w; return n.globals.shouldAnimate = t, n.globals.dataChanged = !0, t && i.ctx.series.getPreviousPaths(), n.globals.axisCharts ? ((r = e.map(function (o, h) { return i._extendSeries(o, h) })).length === 0 && (r = [{ data: [] }]), n.config.series = r) : n.config.series = e.slice(), a && (n.globals.initialConfig.series = P.clone(n.config.series), n.globals.initialSeries = P.clone(n.config.series)), i.ctx.update().then(function () { s(i.ctx) }) }) } }, { key: "_extendSeries", value: function (e, t) { var i = this.w, a = i.config.series[t]; return Y(Y({}, i.config.series[t]), {}, { name: e.name ? e.name : a?.name, color: e.color ? e.color : a?.color, type: e.type ? e.type : a?.type, group: e.group ? e.group : a?.group, hidden: e.hidden !== void 0 ? e.hidden : a?.hidden, data: e.data ? e.data : a?.data, zIndex: e.zIndex !== void 0 ? e.zIndex : t }) } }, { key: "toggleDataPointSelection", value: function (e, t) { var i = this.w, a = null, s = ".apexcharts-series[data\\:realIndex='".concat(e, "']"); return i.globals.axisCharts ? a = i.globals.dom.Paper.select("".concat(s, " path[j='").concat(t, "'], ").concat(s, " circle[j='").concat(t, "'], ").concat(s, " rect[j='").concat(t, "']")).members[0] : t === void 0 && (a = i.globals.dom.Paper.select("".concat(s, " path[j='").concat(e, "']")).members[0], i.config.chart.type !== "pie" && i.config.chart.type !== "polarArea" && i.config.chart.type !== "donut" || this.ctx.pie.pieClicked(e)), a ? (new X(this.ctx).pathMouseDown(a, null), a.node ? a.node : null) : (console.warn("toggleDataPointSelection: Element not found"), null) } }, { key: "forceXAxisUpdate", value: function (e) { var t = this.w; if (["min", "max"].forEach(function (a) { e.xaxis[a] !== void 0 && (t.config.xaxis[a] = e.xaxis[a], t.globals.lastXAxis[a] = e.xaxis[a]) }), e.xaxis.categories && e.xaxis.categories.length && (t.config.xaxis.categories = e.xaxis.categories), t.config.xaxis.convertedCatToNumeric) { var i = new Le(e); e = i.convertCatToNumericXaxis(e, this.ctx) } return e } }, { key: "forceYAxisUpdate", value: function (e) { return e.chart && e.chart.stacked && e.chart.stackType === "100%" && (Array.isArray(e.yaxis) ? e.yaxis.forEach(function (t, i) { e.yaxis[i].min = 0, e.yaxis[i].max = 100 }) : (e.yaxis.min = 0, e.yaxis.max = 100)), e } }, { key: "revertDefaultAxisMinMax", value: function (e) { var t = this, i = this.w, a = i.globals.lastXAxis, s = i.globals.lastYAxis; e && e.xaxis && (a = e.xaxis), e && e.yaxis && (s = e.yaxis), i.config.xaxis.min = a.min, i.config.xaxis.max = a.max; var r = function (n) { s[n] !== void 0 && (i.config.yaxis[n].min = s[n].min, i.config.yaxis[n].max = s[n].max) }; i.config.yaxis.map(function (n, o) { i.globals.zoomed || s[o] !== void 0 ? r(o) : t.ctx.opts.yaxis[o] !== void 0 && (n.min = t.ctx.opts.yaxis[o].min, n.max = t.ctx.opts.yaxis[o].max) }) } }]), p }(); he = typeof window < "u" ? window : void 0, Ce = function (p, e) { - var t = (this !== void 0 ? this : p).SVG = function (l) { if (t.supported) return l = new t.Doc(l), t.parser.draw || t.prepare(), l }; if (t.ns = "http://www.w3.org/2000/svg", t.xmlns = "http://www.w3.org/2000/xmlns/", t.xlink = "http://www.w3.org/1999/xlink", t.svgjs = "http://svgjs.dev", t.supported = !0, !t.supported) return !1; t.did = 1e3, t.eid = function (l) { return "Svgjs" + c(l) + t.did++ }, t.create = function (l) { var u = e.createElementNS(this.ns, l); return u.setAttribute("id", this.eid(l)), u }, t.extend = function () { var l, u; u = (l = [].slice.call(arguments)).pop(); for (var m = l.length - 1; m >= 0; m--)if (l[m]) for (var A in u) l[m].prototype[A] = u[A]; t.Set && t.Set.inherit && t.Set.inherit() }, t.invent = function (l) { var u = typeof l.create == "function" ? l.create : function () { this.constructor.call(this, t.create(l.create)) }; return l.inherit && (u.prototype = new l.inherit), l.extend && t.extend(u, l.extend), l.construct && t.extend(l.parent || t.Container, l.construct), u }, t.adopt = function (l) { return l ? l.instance ? l.instance : ((u = l.nodeName == "svg" ? l.parentNode instanceof p.SVGElement ? new t.Nested : new t.Doc : l.nodeName == "linearGradient" ? new t.Gradient("linear") : l.nodeName == "radialGradient" ? new t.Gradient("radial") : t[c(l.nodeName)] ? new t[c(l.nodeName)] : new t.Element(l)).type = l.nodeName, u.node = l, l.instance = u, u instanceof t.Doc && u.namespace().defs(), u.setData(JSON.parse(l.getAttribute("svgjs:data")) || {}), u) : null; var u }, t.prepare = function () { var l = e.getElementsByTagName("body")[0], u = (l ? new t.Doc(l) : t.adopt(e.documentElement).nested()).size(2, 0); t.parser = { body: l || e.documentElement, draw: u.style("opacity:0;position:absolute;left:-100%;top:-100%;overflow:hidden").node, poly: u.polyline().node, path: u.path().node, native: t.create("svg") } }, t.parser = { native: t.create("svg") }, e.addEventListener("DOMContentLoaded", function () { t.parser.draw || t.prepare() }, !1), t.regex = { numberAndUnit: /^([+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?)([a-z%]*)$/i, hex: /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i, rgb: /rgb\((\d+),(\d+),(\d+)\)/, reference: /#([a-z0-9\-_]+)/i, transforms: /\)\s*,?\s*/, whitespace: /\s/g, isHex: /^#[a-f0-9]{3,6}$/i, isRgb: /^rgb\(/, isCss: /[^:]+:[^;]+;?/, isBlank: /^(\s+)?$/, isNumber: /^[+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i, isPercent: /^-?[\d\.]+%$/, isImage: /\.(jpg|jpeg|png|gif|svg)(\?[^=]+.*)?/i, delimiter: /[\s,]+/, hyphen: /([^e])\-/gi, pathLetters: /[MLHVCSQTAZ]/gi, isPathLetter: /[MLHVCSQTAZ]/i, numbersWithDots: /((\d?\.\d+(?:e[+-]?\d+)?)((?:\.\d+(?:e[+-]?\d+)?)+))+/gi, dots: /\./g }, t.utils = { map: function (l, u) { for (var m = l.length, A = [], k = 0; k < m; k++)A.push(u(l[k])); return A }, filter: function (l, u) { for (var m = l.length, A = [], k = 0; k < m; k++)u(l[k]) && A.push(l[k]); return A }, filterSVGElements: function (l) { return this.filter(l, function (u) { return u instanceof p.SVGElement }) } }, t.defaults = { attrs: { "fill-opacity": 1, "stroke-opacity": 1, "stroke-width": 0, "stroke-linejoin": "miter", "stroke-linecap": "butt", fill: "#000000", stroke: "#000000", opacity: 1, x: 0, y: 0, cx: 0, cy: 0, width: 0, height: 0, r: 0, rx: 0, ry: 0, offset: 0, "stop-opacity": 1, "stop-color": "#000000", "font-size": 16, "font-family": "Helvetica, Arial, sans-serif", "text-anchor": "start" } }, t.Color = function (l) { var u, m; this.r = 0, this.g = 0, this.b = 0, l && (typeof l == "string" ? t.regex.isRgb.test(l) ? (u = t.regex.rgb.exec(l.replace(t.regex.whitespace, "")), this.r = parseInt(u[1]), this.g = parseInt(u[2]), this.b = parseInt(u[3])) : t.regex.isHex.test(l) && (u = t.regex.hex.exec((m = l).length == 4 ? ["#", m.substring(1, 2), m.substring(1, 2), m.substring(2, 3), m.substring(2, 3), m.substring(3, 4), m.substring(3, 4)].join("") : m), this.r = parseInt(u[1], 16), this.g = parseInt(u[2], 16), this.b = parseInt(u[3], 16)) : J(l) === "object" && (this.r = l.r, this.g = l.g, this.b = l.b)) }, t.extend(t.Color, { toString: function () { return this.toHex() }, toHex: function () { return "#" + d(this.r) + d(this.g) + d(this.b) }, toRgb: function () { return "rgb(" + [this.r, this.g, this.b].join() + ")" }, brightness: function () { return this.r / 255 * .3 + this.g / 255 * .59 + this.b / 255 * .11 }, morph: function (l) { return this.destination = new t.Color(l), this }, at: function (l) { return this.destination ? (l = l < 0 ? 0 : l > 1 ? 1 : l, new t.Color({ r: ~~(this.r + (this.destination.r - this.r) * l), g: ~~(this.g + (this.destination.g - this.g) * l), b: ~~(this.b + (this.destination.b - this.b) * l) })) : this } }), t.Color.test = function (l) { return l += "", t.regex.isHex.test(l) || t.regex.isRgb.test(l) }, t.Color.isRgb = function (l) { return l && typeof l.r == "number" && typeof l.g == "number" && typeof l.b == "number" }, t.Color.isColor = function (l) { return t.Color.isRgb(l) || t.Color.test(l) }, t.Array = function (l, u) { (l = (l || []).valueOf()).length == 0 && u && (l = u.valueOf()), this.value = this.parse(l) }, t.extend(t.Array, { toString: function () { return this.value.join(" ") }, valueOf: function () { return this.value }, parse: function (l) { return l = l.valueOf(), Array.isArray(l) ? l : this.split(l) } }), t.PointArray = function (l, u) { t.Array.call(this, l, u || [[0, 0]]) }, t.PointArray.prototype = new t.Array, t.PointArray.prototype.constructor = t.PointArray; for (var i = { M: function (l, u, m) { return u.x = m.x = l[0], u.y = m.y = l[1], ["M", u.x, u.y] }, L: function (l, u) { return u.x = l[0], u.y = l[1], ["L", l[0], l[1]] }, H: function (l, u) { return u.x = l[0], ["H", l[0]] }, V: function (l, u) { return u.y = l[0], ["V", l[0]] }, C: function (l, u) { return u.x = l[4], u.y = l[5], ["C", l[0], l[1], l[2], l[3], l[4], l[5]] }, Q: function (l, u) { return u.x = l[2], u.y = l[3], ["Q", l[0], l[1], l[2], l[3]] }, S: function (l, u) { return u.x = l[2], u.y = l[3], ["S", l[0], l[1], l[2], l[3]] }, Z: function (l, u, m) { return u.x = m.x, u.y = m.y, ["Z"] } }, a = "mlhvqtcsaz".split(""), s = 0, r = a.length; s < r; ++s)i[a[s]] = function (l) { return function (u, m, A) { if (l == "H") u[0] = u[0] + m.x; else if (l == "V") u[0] = u[0] + m.y; else if (l == "A") u[5] = u[5] + m.x, u[6] = u[6] + m.y; else for (var k = 0, S = u.length; k < S; ++k)u[k] = u[k] + (k % 2 ? m.y : m.x); if (i && typeof i[l] == "function") return i[l](u, m, A) } }(a[s].toUpperCase()); t.PathArray = function (l, u) { t.Array.call(this, l, u || [["M", 0, 0]]) }, t.PathArray.prototype = new t.Array, t.PathArray.prototype.constructor = t.PathArray, t.extend(t.PathArray, { toString: function () { return function (l) { for (var u = 0, m = l.length, A = ""; u < m; u++)A += l[u][0], l[u][1] != null && (A += l[u][1], l[u][2] != null && (A += " ", A += l[u][2], l[u][3] != null && (A += " ", A += l[u][3], A += " ", A += l[u][4], l[u][5] != null && (A += " ", A += l[u][5], A += " ", A += l[u][6], l[u][7] != null && (A += " ", A += l[u][7]))))); return A + " " }(this.value) }, move: function (l, u) { var m = this.bbox(); return m.x, m.y, this }, at: function (l) { if (!this.destination) return this; for (var u = this.value, m = this.destination.value, A = [], k = new t.PathArray, S = 0, L = u.length; S < L; S++) { A[S] = [u[S][0]]; for (var C = 1, I = u[S].length; C < I; C++)A[S][C] = u[S][C] + (m[S][C] - u[S][C]) * l; A[S][0] === "A" && (A[S][4] = +(A[S][4] != 0), A[S][5] = +(A[S][5] != 0)) } return k.value = A, k }, parse: function (l) { if (l instanceof t.PathArray) return l.valueOf(); var u, m = { M: 2, L: 2, H: 1, V: 1, C: 6, S: 4, Q: 4, T: 2, A: 7, Z: 0 }; l = typeof l == "string" ? l.replace(t.regex.numbersWithDots, o).replace(t.regex.pathLetters, " $& ").replace(t.regex.hyphen, "$1 -").trim().split(t.regex.delimiter) : l.reduce(function (I, z) { return [].concat.call(I, z) }, []); var A = [], k = new t.Point, S = new t.Point, L = 0, C = l.length; do t.regex.isPathLetter.test(l[L]) ? (u = l[L], ++L) : u == "M" ? u = "L" : u == "m" && (u = "l"), A.push(i[u].call(null, l.slice(L, L += m[u.toUpperCase()]).map(parseFloat), k, S)); while (C > L); return A }, bbox: function () { return t.parser.draw || t.prepare(), t.parser.path.setAttribute("d", this.toString()), t.parser.path.getBBox() } }), t.Number = t.invent({ create: function (l, u) { this.value = 0, this.unit = u || "", typeof l == "number" ? this.value = isNaN(l) ? 0 : isFinite(l) ? l : l < 0 ? -34e37 : 34e37 : typeof l == "string" ? (u = l.match(t.regex.numberAndUnit)) && (this.value = parseFloat(u[1]), u[5] == "%" ? this.value /= 100 : u[5] == "s" && (this.value *= 1e3), this.unit = u[5]) : l instanceof t.Number && (this.value = l.valueOf(), this.unit = l.unit) }, extend: { toString: function () { return (this.unit == "%" ? ~~(1e8 * this.value) / 1e6 : this.unit == "s" ? this.value / 1e3 : this.value) + this.unit }, toJSON: function () { return this.toString() }, valueOf: function () { return this.value }, plus: function (l) { return l = new t.Number(l), new t.Number(this + l, this.unit || l.unit) }, minus: function (l) { return l = new t.Number(l), new t.Number(this - l, this.unit || l.unit) }, times: function (l) { return l = new t.Number(l), new t.Number(this * l, this.unit || l.unit) }, divide: function (l) { return l = new t.Number(l), new t.Number(this / l, this.unit || l.unit) }, to: function (l) { var u = new t.Number(this); return typeof l == "string" && (u.unit = l), u }, morph: function (l) { return this.destination = new t.Number(l), l.relative && (this.destination.value += this.value), this }, at: function (l) { return this.destination ? new t.Number(this.destination).minus(this).times(l).plus(this) : this } } }), t.Element = t.invent({ create: function (l) { this._stroke = t.defaults.attrs.stroke, this._event = null, this.dom = {}, (this.node = l) && (this.type = l.nodeName, this.node.instance = this, this._stroke = l.getAttribute("stroke") || this._stroke) }, extend: { x: function (l) { return this.attr("x", l) }, y: function (l) { return this.attr("y", l) }, cx: function (l) { return l == null ? this.x() + this.width() / 2 : this.x(l - this.width() / 2) }, cy: function (l) { return l == null ? this.y() + this.height() / 2 : this.y(l - this.height() / 2) }, move: function (l, u) { return this.x(l).y(u) }, center: function (l, u) { return this.cx(l).cy(u) }, width: function (l) { return this.attr("width", l) }, height: function (l) { return this.attr("height", l) }, size: function (l, u) { var m = g(this, l, u); return this.width(new t.Number(m.width)).height(new t.Number(m.height)) }, clone: function (l) { this.writeDataToDom(); var u = b(this.node.cloneNode(!0)); return l ? l.add(u) : this.after(u), u }, remove: function () { return this.parent() && this.parent().removeElement(this), this }, replace: function (l) { return this.after(l).remove(), l }, addTo: function (l) { return l.put(this) }, putIn: function (l) { return l.add(this) }, id: function (l) { return this.attr("id", l) }, show: function () { return this.style("display", "") }, hide: function () { return this.style("display", "none") }, visible: function () { return this.style("display") != "none" }, toString: function () { return this.attr("id") }, classes: function () { var l = this.attr("class"); return l == null ? [] : l.trim().split(t.regex.delimiter) }, hasClass: function (l) { return this.classes().indexOf(l) != -1 }, addClass: function (l) { if (!this.hasClass(l)) { var u = this.classes(); u.push(l), this.attr("class", u.join(" ")) } return this }, removeClass: function (l) { return this.hasClass(l) && this.attr("class", this.classes().filter(function (u) { return u != l }).join(" ")), this }, toggleClass: function (l) { return this.hasClass(l) ? this.removeClass(l) : this.addClass(l) }, reference: function (l) { return t.get(this.attr(l)) }, parent: function (l) { var u = this; if (!u.node.parentNode) return null; if (u = t.adopt(u.node.parentNode), !l) return u; for (; u && u.node instanceof p.SVGElement;) { if (typeof l == "string" ? u.matches(l) : u instanceof l) return u; if (!u.node.parentNode || u.node.parentNode.nodeName == "#document") return null; u = t.adopt(u.node.parentNode) } }, doc: function () { return this instanceof t.Doc ? this : this.parent(t.Doc) }, parents: function (l) { var u = [], m = this; do { if (!(m = m.parent(l)) || !m.node) break; u.push(m) } while (m.parent); return u }, matches: function (l) { return function (u, m) { return (u.matches || u.matchesSelector || u.msMatchesSelector || u.mozMatchesSelector || u.webkitMatchesSelector || u.oMatchesSelector).call(u, m) }(this.node, l) }, native: function () { return this.node }, svg: function (l) { var u = e.createElementNS("http://www.w3.org/2000/svg", "svg"); if (!(l && this instanceof t.Parent)) return u.appendChild(l = e.createElementNS("http://www.w3.org/2000/svg", "svg")), this.writeDataToDom(), l.appendChild(this.node.cloneNode(!0)), u.innerHTML.replace(/^/, "").replace(/<\/svg>$/, ""); u.innerHTML = "" + l.replace(/\n/, "").replace(/<([\w:-]+)([^<]+?)\/>/g, "<$1$2>") + ""; for (var m = 0, A = u.firstChild.childNodes.length; m < A; m++)this.node.appendChild(u.firstChild.firstChild); return this }, writeDataToDom: function () { return (this.each || this.lines) && (this.each ? this : this.lines()).each(function () { this.writeDataToDom() }), this.node.removeAttribute("svgjs:data"), Object.keys(this.dom).length && this.node.setAttribute("svgjs:data", JSON.stringify(this.dom)), this }, setData: function (l) { return this.dom = l, this }, is: function (l) { return function (u, m) { return u instanceof m }(this, l) } } }), t.easing = { "-": function (l) { return l }, "<>": function (l) { return -Math.cos(l * Math.PI) / 2 + .5 }, ">": function (l) { return Math.sin(l * Math.PI / 2) }, "<": function (l) { return 1 - Math.cos(l * Math.PI / 2) } }, t.morph = function (l) { return function (u, m) { return new t.MorphObj(u, m).at(l) } }, t.Situation = t.invent({ create: function (l) { this.init = !1, this.reversed = !1, this.reversing = !1, this.duration = new t.Number(l.duration).valueOf(), this.delay = new t.Number(l.delay).valueOf(), this.start = +new Date + this.delay, this.finish = this.start + this.duration, this.ease = l.ease, this.loop = 0, this.loops = !1, this.animations = {}, this.attrs = {}, this.styles = {}, this.transforms = [], this.once = {} } }), t.FX = t.invent({ create: function (l) { this._target = l, this.situations = [], this.active = !1, this.situation = null, this.paused = !1, this.lastPos = 0, this.pos = 0, this.absPos = 0, this._speed = 1 }, extend: { animate: function (l, u, m) { J(l) === "object" && (u = l.ease, m = l.delay, l = l.duration); var A = new t.Situation({ duration: l || 1e3, delay: m || 0, ease: t.easing[u || "-"] || u }); return this.queue(A), this }, target: function (l) { return l && l instanceof t.Element ? (this._target = l, this) : this._target }, timeToAbsPos: function (l) { return (l - this.situation.start) / (this.situation.duration / this._speed) }, absPosToTime: function (l) { return this.situation.duration / this._speed * l + this.situation.start }, startAnimFrame: function () { this.stopAnimFrame(), this.animationFrame = p.requestAnimationFrame(function () { this.step() }.bind(this)) }, stopAnimFrame: function () { p.cancelAnimationFrame(this.animationFrame) }, start: function () { return !this.active && this.situation && (this.active = !0, this.startCurrent()), this }, startCurrent: function () { return this.situation.start = +new Date + this.situation.delay / this._speed, this.situation.finish = this.situation.start + this.situation.duration / this._speed, this.initAnimations().step() }, queue: function (l) { return (typeof l == "function" || l instanceof t.Situation) && this.situations.push(l), this.situation || (this.situation = this.situations.shift()), this }, dequeue: function () { return this.stop(), this.situation = this.situations.shift(), this.situation && (this.situation instanceof t.Situation ? this.start() : this.situation.call(this)), this }, initAnimations: function () { var l, u = this.situation; if (u.init) return this; for (var m in u.animations) { l = this.target()[m](), Array.isArray(l) || (l = [l]), Array.isArray(u.animations[m]) || (u.animations[m] = [u.animations[m]]); for (var A = l.length; A--;)u.animations[m][A] instanceof t.Number && (l[A] = new t.Number(l[A])), u.animations[m][A] = l[A].morph(u.animations[m][A]) } for (var m in u.attrs) u.attrs[m] = new t.MorphObj(this.target().attr(m), u.attrs[m]); for (var m in u.styles) u.styles[m] = new t.MorphObj(this.target().style(m), u.styles[m]); return u.initialTransformation = this.target().matrixify(), u.init = !0, this }, clearQueue: function () { return this.situations = [], this }, clearCurrent: function () { return this.situation = null, this }, stop: function (l, u) { var m = this.active; return this.active = !1, u && this.clearQueue(), l && this.situation && (!m && this.startCurrent(), this.atEnd()), this.stopAnimFrame(), this.clearCurrent() }, after: function (l) { var u = this.last(); return this.target().on("finished.fx", function m(A) { A.detail.situation == u && (l.call(this, u), this.off("finished.fx", m)) }), this._callStart() }, during: function (l) { var u = this.last(), m = function (A) { A.detail.situation == u && l.call(this, A.detail.pos, t.morph(A.detail.pos), A.detail.eased, u) }; return this.target().off("during.fx", m).on("during.fx", m), this.after(function () { this.off("during.fx", m) }), this._callStart() }, afterAll: function (l) { var u = function m(A) { l.call(this), this.off("allfinished.fx", m) }; return this.target().off("allfinished.fx", u).on("allfinished.fx", u), this._callStart() }, last: function () { return this.situations.length ? this.situations[this.situations.length - 1] : this.situation }, add: function (l, u, m) { return this.last()[m || "animations"][l] = u, this._callStart() }, step: function (l) { var u, m, A; l || (this.absPos = this.timeToAbsPos(+new Date)), this.situation.loops !== !1 ? (u = Math.max(this.absPos, 0), m = Math.floor(u), this.situation.loops === !0 || m < this.situation.loops ? (this.pos = u - m, A = this.situation.loop, this.situation.loop = m) : (this.absPos = this.situation.loops, this.pos = 1, A = this.situation.loop - 1, this.situation.loop = this.situation.loops), this.situation.reversing && (this.situation.reversed = this.situation.reversed != !!((this.situation.loop - A) % 2))) : (this.absPos = Math.min(this.absPos, 1), this.pos = this.absPos), this.pos < 0 && (this.pos = 0), this.situation.reversed && (this.pos = 1 - this.pos); var k = this.situation.ease(this.pos); for (var S in this.situation.once) S > this.lastPos && S <= k && (this.situation.once[S].call(this.target(), this.pos, k), delete this.situation.once[S]); return this.active && this.target().fire("during", { pos: this.pos, eased: k, fx: this, situation: this.situation }), this.situation ? (this.eachAt(), this.pos == 1 && !this.situation.reversed || this.situation.reversed && this.pos == 0 ? (this.stopAnimFrame(), this.target().fire("finished", { fx: this, situation: this.situation }), this.situations.length || (this.target().fire("allfinished"), this.situations.length || (this.target().off(".fx"), this.active = !1)), this.active ? this.dequeue() : this.clearCurrent()) : !this.paused && this.active && this.startAnimFrame(), this.lastPos = k, this) : this }, eachAt: function () { var l, u = this, m = this.target(), A = this.situation; for (var k in A.animations) l = [].concat(A.animations[k]).map(function (C) { return typeof C != "string" && C.at ? C.at(A.ease(u.pos), u.pos) : C }), m[k].apply(m, l); for (var k in A.attrs) l = [k].concat(A.attrs[k]).map(function (I) { return typeof I != "string" && I.at ? I.at(A.ease(u.pos), u.pos) : I }), m.attr.apply(m, l); for (var k in A.styles) l = [k].concat(A.styles[k]).map(function (I) { return typeof I != "string" && I.at ? I.at(A.ease(u.pos), u.pos) : I }), m.style.apply(m, l); if (A.transforms.length) { l = A.initialTransformation, k = 0; for (var S = A.transforms.length; k < S; k++) { var L = A.transforms[k]; L instanceof t.Matrix ? l = L.relative ? l.multiply(new t.Matrix().morph(L).at(A.ease(this.pos))) : l.morph(L).at(A.ease(this.pos)) : (L.relative || L.undo(l.extract()), l = l.multiply(L.at(A.ease(this.pos)))) } m.matrix(l) } return this }, once: function (l, u, m) { var A = this.last(); return m || (l = A.ease(l)), A.once[l] = u, this }, _callStart: function () { return setTimeout(function () { this.start() }.bind(this), 0), this } }, parent: t.Element, construct: { animate: function (l, u, m) { return (this.fx || (this.fx = new t.FX(this))).animate(l, u, m) }, delay: function (l) { return (this.fx || (this.fx = new t.FX(this))).delay(l) }, stop: function (l, u) { return this.fx && this.fx.stop(l, u), this }, finish: function () { return this.fx && this.fx.finish(), this } } }), t.MorphObj = t.invent({ create: function (l, u) { return t.Color.isColor(u) ? new t.Color(l).morph(u) : t.regex.delimiter.test(l) ? t.regex.pathLetters.test(l) ? new t.PathArray(l).morph(u) : new t.Array(l).morph(u) : t.regex.numberAndUnit.test(u) ? new t.Number(l).morph(u) : (this.value = l, void (this.destination = u)) }, extend: { at: function (l, u) { return u < 1 ? this.value : this.destination }, valueOf: function () { return this.value } } }), t.extend(t.FX, { attr: function (l, u, m) { if (J(l) === "object") for (var A in l) this.attr(A, l[A]); else this.add(l, u, "attrs"); return this }, plot: function (l, u, m, A) { return arguments.length == 4 ? this.plot([l, u, m, A]) : this.add("plot", new (this.target()).morphArray(l)) } }), t.Box = t.invent({ create: function (l, u, m, A) { if (!(J(l) !== "object" || l instanceof t.Element)) return t.Box.call(this, l.left != null ? l.left : l.x, l.top != null ? l.top : l.y, l.width, l.height); var k; arguments.length == 4 && (this.x = l, this.y = u, this.width = m, this.height = A), (k = this).x == null && (k.x = 0, k.y = 0, k.width = 0, k.height = 0), k.w = k.width, k.h = k.height, k.x2 = k.x + k.width, k.y2 = k.y + k.height, k.cx = k.x + k.width / 2, k.cy = k.y + k.height / 2 } }), t.BBox = t.invent({ create: function (l) { if (t.Box.apply(this, [].slice.call(arguments)), l instanceof t.Element) { var u; try { if (!e.documentElement.contains) { for (var m = l.node; m.parentNode;)m = m.parentNode; if (m != e) throw new Error("Element not in the dom") } u = l.node.getBBox() } catch { if (l instanceof t.Shape) { t.parser.draw || t.prepare(); var A = l.clone(t.parser.draw.instance).show(); A && A.node && typeof A.node.getBBox == "function" && (u = A.node.getBBox()), A && typeof A.remove == "function" && A.remove() } else u = { x: l.node.clientLeft, y: l.node.clientTop, width: l.node.clientWidth, height: l.node.clientHeight } } t.Box.call(this, u) } }, inherit: t.Box, parent: t.Element, construct: { bbox: function () { return new t.BBox(this) } } }), t.BBox.prototype.constructor = t.BBox, t.Matrix = t.invent({ create: function (l) { var u = x([1, 0, 0, 1, 0, 0]); l = l === null ? u : l instanceof t.Element ? l.matrixify() : typeof l == "string" ? x(l.split(t.regex.delimiter).map(parseFloat)) : arguments.length == 6 ? x([].slice.call(arguments)) : Array.isArray(l) ? x(l) : l && J(l) === "object" ? l : u; for (var m = y.length - 1; m >= 0; --m)this[y[m]] = l[y[m]] != null ? l[y[m]] : u[y[m]] }, extend: { extract: function () { var l = f(this, 0, 1); f(this, 1, 0); var u = 180 / Math.PI * Math.atan2(l.y, l.x) - 90; return { x: this.e, y: this.f, transformedX: (this.e * Math.cos(u * Math.PI / 180) + this.f * Math.sin(u * Math.PI / 180)) / Math.sqrt(this.a * this.a + this.b * this.b), transformedY: (this.f * Math.cos(u * Math.PI / 180) + this.e * Math.sin(-u * Math.PI / 180)) / Math.sqrt(this.c * this.c + this.d * this.d), rotation: u, a: this.a, b: this.b, c: this.c, d: this.d, e: this.e, f: this.f, matrix: new t.Matrix(this) } }, clone: function () { return new t.Matrix(this) }, morph: function (l) { return this.destination = new t.Matrix(l), this }, multiply: function (l) { return new t.Matrix(this.native().multiply(function (u) { return u instanceof t.Matrix || (u = new t.Matrix(u)), u }(l).native())) }, inverse: function () { return new t.Matrix(this.native().inverse()) }, translate: function (l, u) { return new t.Matrix(this.native().translate(l || 0, u || 0)) }, native: function () { for (var l = t.parser.native.createSVGMatrix(), u = y.length - 1; u >= 0; u--)l[y[u]] = this[y[u]]; return l }, toString: function () { return "matrix(" + v(this.a) + "," + v(this.b) + "," + v(this.c) + "," + v(this.d) + "," + v(this.e) + "," + v(this.f) + ")" } }, parent: t.Element, construct: { ctm: function () { return new t.Matrix(this.node.getCTM()) }, screenCTM: function () { if (this instanceof t.Nested) { var l = this.rect(1, 1), u = l.node.getScreenCTM(); return l.remove(), new t.Matrix(u) } return new t.Matrix(this.node.getScreenCTM()) } } }), t.Point = t.invent({ create: function (l, u) { var m; m = Array.isArray(l) ? { x: l[0], y: l[1] } : J(l) === "object" ? { x: l.x, y: l.y } : l != null ? { x: l, y: u ?? l } : { x: 0, y: 0 }, this.x = m.x, this.y = m.y }, extend: { clone: function () { return new t.Point(this) }, morph: function (l, u) { return this.destination = new t.Point(l, u), this } } }), t.extend(t.Element, { point: function (l, u) { return new t.Point(l, u).transform(this.screenCTM().inverse()) } }), t.extend(t.Element, { attr: function (l, u, m) { if (l == null) { for (l = {}, m = (u = this.node.attributes).length - 1; m >= 0; m--)l[u[m].nodeName] = t.regex.isNumber.test(u[m].nodeValue) ? parseFloat(u[m].nodeValue) : u[m].nodeValue; return l } if (J(l) === "object") for (var A in l) this.attr(A, l[A]); else if (u === null) this.node.removeAttribute(l); else { if (u == null) return (u = this.node.getAttribute(l)) == null ? t.defaults.attrs[l] : t.regex.isNumber.test(u) ? parseFloat(u) : u; l == "stroke-width" ? this.attr("stroke", parseFloat(u) > 0 ? this._stroke : null) : l == "stroke" && (this._stroke = u), l != "fill" && l != "stroke" || (t.regex.isImage.test(u) && (u = this.doc().defs().image(u, 0, 0)), u instanceof t.Image && (u = this.doc().defs().pattern(0, 0, function () { this.add(u) }))), typeof u == "number" ? u = new t.Number(u) : t.Color.isColor(u) ? u = new t.Color(u) : Array.isArray(u) && (u = new t.Array(u)), l == "leading" ? this.leading && this.leading(u) : typeof m == "string" ? this.node.setAttributeNS(m, l, u.toString()) : this.node.setAttribute(l, u.toString()), !this.rebuild || l != "font-size" && l != "x" || this.rebuild(l, u) } return this } }), t.extend(t.Element, { transform: function (l, u) { var m; return J(l) !== "object" ? (m = new t.Matrix(this).extract(), typeof l == "string" ? m[l] : m) : (m = new t.Matrix(this), u = !!u || !!l.relative, l.a != null && (m = u ? m.multiply(new t.Matrix(l)) : new t.Matrix(l)), this.attr("transform", m)) } }), t.extend(t.Element, { untransform: function () { return this.attr("transform", null) }, matrixify: function () { return (this.attr("transform") || "").split(t.regex.transforms).slice(0, -1).map(function (l) { var u = l.trim().split("("); return [u[0], u[1].split(t.regex.delimiter).map(function (m) { return parseFloat(m) })] }).reduce(function (l, u) { return u[0] == "matrix" ? l.multiply(x(u[1])) : l[u[0]].apply(l, u[1]) }, new t.Matrix) }, toParent: function (l) { if (this == l) return this; var u = this.screenCTM(), m = l.screenCTM().inverse(); return this.addTo(l).untransform().transform(m.multiply(u)), this }, toDoc: function () { return this.toParent(this.doc()) } }), t.Transformation = t.invent({ create: function (l, u) { if (arguments.length > 1 && typeof u != "boolean") return this.constructor.call(this, [].slice.call(arguments)); if (Array.isArray(l)) for (var m = 0, A = this.arguments.length; m < A; ++m)this[this.arguments[m]] = l[m]; else if (l && J(l) === "object") for (m = 0, A = this.arguments.length; m < A; ++m)this[this.arguments[m]] = l[this.arguments[m]]; this.inversed = !1, u === !0 && (this.inversed = !0) } }), t.Translate = t.invent({ parent: t.Matrix, inherit: t.Transformation, create: function (l, u) { this.constructor.apply(this, [].slice.call(arguments)) }, extend: { arguments: ["transformedX", "transformedY"], method: "translate" } }), t.extend(t.Element, { style: function (l, u) { if (arguments.length == 0) return this.node.style.cssText || ""; if (arguments.length < 2) if (J(l) === "object") for (var m in l) this.style(m, l[m]); else { if (!t.regex.isCss.test(l)) return this.node.style[h(l)]; for (l = l.split(/\s*;\s*/).filter(function (A) { return !!A }).map(function (A) { return A.split(/\s*:\s*/) }); u = l.pop();)this.style(u[0], u[1]) } else this.node.style[h(l)] = u === null || t.regex.isBlank.test(u) ? "" : u; return this } }), t.Parent = t.invent({ create: function (l) { this.constructor.call(this, l) }, inherit: t.Element, extend: { children: function () { return t.utils.map(t.utils.filterSVGElements(this.node.childNodes), function (l) { return t.adopt(l) }) }, add: function (l, u) { return u == null ? this.node.appendChild(l.node) : l.node != this.node.childNodes[u] && this.node.insertBefore(l.node, this.node.childNodes[u]), this }, put: function (l, u) { return this.add(l, u), l }, has: function (l) { return this.index(l) >= 0 }, index: function (l) { return [].slice.call(this.node.childNodes).indexOf(l.node) }, get: function (l) { return t.adopt(this.node.childNodes[l]) }, first: function () { return this.get(0) }, last: function () { return this.get(this.node.childNodes.length - 1) }, each: function (l, u) { for (var m = this.children(), A = 0, k = m.length; A < k; A++)m[A] instanceof t.Element && l.apply(m[A], [A, m]), u && m[A] instanceof t.Container && m[A].each(l, u); return this }, removeElement: function (l) { return this.node.removeChild(l.node), this }, clear: function () { for (; this.node.hasChildNodes();)this.node.removeChild(this.node.lastChild); return delete this._defs, this }, defs: function () { return this.doc().defs() } } }), t.extend(t.Parent, { ungroup: function (l, u) { return u === 0 || this instanceof t.Defs || this.node == t.parser.draw || (l = l || (this instanceof t.Doc ? this : this.parent(t.Parent)), u = u || 1 / 0, this.each(function () { return this instanceof t.Defs ? this : this instanceof t.Parent ? this.ungroup(l, u - 1) : this.toParent(l) }), this.node.firstChild || this.remove()), this }, flatten: function (l, u) { return this.ungroup(l, u) } }), t.Container = t.invent({ create: function (l) { this.constructor.call(this, l) }, inherit: t.Parent }), t.ViewBox = t.invent({ parent: t.Container, construct: {} }), ["click", "dblclick", "mousedown", "mouseup", "mouseover", "mouseout", "mousemove", "touchstart", "touchmove", "touchleave", "touchend", "touchcancel"].forEach(function (l) { t.Element.prototype[l] = function (u) { return t.on(this.node, l, u), this } }), t.listeners = [], t.handlerMap = [], t.listenerId = 0, t.on = function (l, u, m, A, k) { var S = m.bind(A || l.instance || l), L = (t.handlerMap.indexOf(l) + 1 || t.handlerMap.push(l)) - 1, C = u.split(".")[0], I = u.split(".")[1] || "*"; t.listeners[L] = t.listeners[L] || {}, t.listeners[L][C] = t.listeners[L][C] || {}, t.listeners[L][C][I] = t.listeners[L][C][I] || {}, m._svgjsListenerId || (m._svgjsListenerId = ++t.listenerId), t.listeners[L][C][I][m._svgjsListenerId] = S, l.addEventListener(C, S, k || { passive: !1 }) }, t.off = function (l, u, m) { var A = t.handlerMap.indexOf(l), k = u && u.split(".")[0], S = u && u.split(".")[1], L = ""; if (A != -1) if (m) { if (typeof m == "function" && (m = m._svgjsListenerId), !m) return; t.listeners[A][k] && t.listeners[A][k][S || "*"] && (l.removeEventListener(k, t.listeners[A][k][S || "*"][m], !1), delete t.listeners[A][k][S || "*"][m]) } else if (S && k) { if (t.listeners[A][k] && t.listeners[A][k][S]) { for (var C in t.listeners[A][k][S]) t.off(l, [k, S].join("."), C); delete t.listeners[A][k][S] } } else if (S) for (var I in t.listeners[A]) for (var L in t.listeners[A][I]) S === L && t.off(l, [I, S].join(".")); else if (k) { if (t.listeners[A][k]) { for (var L in t.listeners[A][k]) t.off(l, [k, L].join(".")); delete t.listeners[A][k] } } else { for (var I in t.listeners[A]) t.off(l, I); delete t.listeners[A], delete t.handlerMap[A] } }, t.extend(t.Element, { on: function (l, u, m, A) { return t.on(this.node, l, u, m, A), this }, off: function (l, u) { return t.off(this.node, l, u), this }, fire: function (l, u) { return l instanceof p.Event ? this.node.dispatchEvent(l) : this.node.dispatchEvent(l = new t.CustomEvent(l, { detail: u, cancelable: !0 })), this._event = l, this }, event: function () { return this._event } }), t.Defs = t.invent({ create: "defs", inherit: t.Container }), t.G = t.invent({ create: "g", inherit: t.Container, extend: { x: function (l) { return l == null ? this.transform("x") : this.transform({ x: l - this.x() }, !0) } }, construct: { group: function () { return this.put(new t.G) } } }), t.Doc = t.invent({ create: function (l) { l && ((l = typeof l == "string" ? e.getElementById(l) : l).nodeName == "svg" ? this.constructor.call(this, l) : (this.constructor.call(this, t.create("svg")), l.appendChild(this.node), this.size("100%", "100%")), this.namespace().defs()) }, inherit: t.Container, extend: { namespace: function () { return this.attr({ xmlns: t.ns, version: "1.1" }).attr("xmlns:xlink", t.xlink, t.xmlns).attr("xmlns:svgjs", t.svgjs, t.xmlns) }, defs: function () { var l; return this._defs || ((l = this.node.getElementsByTagName("defs")[0]) ? this._defs = t.adopt(l) : this._defs = new t.Defs, this.node.appendChild(this._defs.node)), this._defs }, parent: function () { return this.node.parentNode && this.node.parentNode.nodeName != "#document" ? this.node.parentNode : null }, remove: function () { return this.parent() && this.parent().removeChild(this.node), this }, clear: function () { for (; this.node.hasChildNodes();)this.node.removeChild(this.node.lastChild); return delete this._defs, t.parser.draw && !t.parser.draw.parentNode && this.node.appendChild(t.parser.draw), this }, clone: function (l) { this.writeDataToDom(); var u = this.node, m = b(u.cloneNode(!0)); return l ? (l.node || l).appendChild(m.node) : u.parentNode.insertBefore(m.node, u.nextSibling), m } } }), t.extend(t.Element, {}), t.Gradient = t.invent({ create: function (l) { this.constructor.call(this, t.create(l + "Gradient")), this.type = l }, inherit: t.Container, extend: { at: function (l, u, m) { return this.put(new t.Stop).update(l, u, m) }, update: function (l) { return this.clear(), typeof l == "function" && l.call(this, this), this }, fill: function () { return "url(#" + this.id() + ")" }, toString: function () { return this.fill() }, attr: function (l, u, m) { return l == "transform" && (l = "gradientTransform"), t.Container.prototype.attr.call(this, l, u, m) } }, construct: { gradient: function (l, u) { return this.defs().gradient(l, u) } } }), t.extend(t.Gradient, t.FX, { from: function (l, u) { return (this._target || this).type == "radial" ? this.attr({ fx: new t.Number(l), fy: new t.Number(u) }) : this.attr({ x1: new t.Number(l), y1: new t.Number(u) }) }, to: function (l, u) { return (this._target || this).type == "radial" ? this.attr({ cx: new t.Number(l), cy: new t.Number(u) }) : this.attr({ x2: new t.Number(l), y2: new t.Number(u) }) } }), t.extend(t.Defs, { gradient: function (l, u) { return this.put(new t.Gradient(l)).update(u) } }), t.Stop = t.invent({ create: "stop", inherit: t.Element, extend: { update: function (l) { return (typeof l == "number" || l instanceof t.Number) && (l = { offset: arguments[0], color: arguments[1], opacity: arguments[2] }), l.opacity != null && this.attr("stop-opacity", l.opacity), l.color != null && this.attr("stop-color", l.color), l.offset != null && this.attr("offset", new t.Number(l.offset)), this } } }), t.Pattern = t.invent({ create: "pattern", inherit: t.Container, extend: { fill: function () { return "url(#" + this.id() + ")" }, update: function (l) { return this.clear(), typeof l == "function" && l.call(this, this), this }, toString: function () { return this.fill() }, attr: function (l, u, m) { return l == "transform" && (l = "patternTransform"), t.Container.prototype.attr.call(this, l, u, m) } }, construct: { pattern: function (l, u, m) { return this.defs().pattern(l, u, m) } } }), t.extend(t.Defs, { pattern: function (l, u, m) { return this.put(new t.Pattern).update(m).attr({ x: 0, y: 0, width: l, height: u, patternUnits: "userSpaceOnUse" }) } }), t.Shape = t.invent({ create: function (l) { this.constructor.call(this, l) }, inherit: t.Element }), t.Symbol = t.invent({ create: "symbol", inherit: t.Container, construct: { symbol: function () { return this.put(new t.Symbol) } } }), t.Use = t.invent({ create: "use", inherit: t.Shape, extend: { element: function (l, u) { return this.attr("href", (u || "") + "#" + l, t.xlink) } }, construct: { use: function (l, u) { return this.put(new t.Use).element(l, u) } } }), t.Rect = t.invent({ create: "rect", inherit: t.Shape, construct: { rect: function (l, u) { return this.put(new t.Rect).size(l, u) } } }), t.Circle = t.invent({ create: "circle", inherit: t.Shape, construct: { circle: function (l) { return this.put(new t.Circle).rx(new t.Number(l).divide(2)).move(0, 0) } } }), t.extend(t.Circle, t.FX, { rx: function (l) { return this.attr("r", l) }, ry: function (l) { return this.rx(l) } }), t.Ellipse = t.invent({ create: "ellipse", inherit: t.Shape, construct: { ellipse: function (l, u) { return this.put(new t.Ellipse).size(l, u).move(0, 0) } } }), t.extend(t.Ellipse, t.Rect, t.FX, { rx: function (l) { return this.attr("rx", l) }, ry: function (l) { return this.attr("ry", l) } }), t.extend(t.Circle, t.Ellipse, { x: function (l) { return l == null ? this.cx() - this.rx() : this.cx(l + this.rx()) }, y: function (l) { return l == null ? this.cy() - this.ry() : this.cy(l + this.ry()) }, cx: function (l) { return l == null ? this.attr("cx") : this.attr("cx", l) }, cy: function (l) { return l == null ? this.attr("cy") : this.attr("cy", l) }, width: function (l) { return l == null ? 2 * this.rx() : this.rx(new t.Number(l).divide(2)) }, height: function (l) { return l == null ? 2 * this.ry() : this.ry(new t.Number(l).divide(2)) }, size: function (l, u) { var m = g(this, l, u); return this.rx(new t.Number(m.width).divide(2)).ry(new t.Number(m.height).divide(2)) } }), t.Line = t.invent({ create: "line", inherit: t.Shape, extend: { array: function () { return new t.PointArray([[this.attr("x1"), this.attr("y1")], [this.attr("x2"), this.attr("y2")]]) }, plot: function (l, u, m, A) { return l == null ? this.array() : (l = u !== void 0 ? { x1: l, y1: u, x2: m, y2: A } : new t.PointArray(l).toLine(), this.attr(l)) }, move: function (l, u) { return this.attr(this.array().move(l, u).toLine()) }, size: function (l, u) { var m = g(this, l, u); return this.attr(this.array().size(m.width, m.height).toLine()) } }, construct: { line: function (l, u, m, A) { return t.Line.prototype.plot.apply(this.put(new t.Line), l != null ? [l, u, m, A] : [0, 0, 0, 0]) } } }), t.Polyline = t.invent({ create: "polyline", inherit: t.Shape, construct: { polyline: function (l) { return this.put(new t.Polyline).plot(l || new t.PointArray) } } }), t.Polygon = t.invent({ create: "polygon", inherit: t.Shape, construct: { polygon: function (l) { return this.put(new t.Polygon).plot(l || new t.PointArray) } } }), t.extend(t.Polyline, t.Polygon, { array: function () { return this._array || (this._array = new t.PointArray(this.attr("points"))) }, plot: function (l) { return l == null ? this.array() : this.clear().attr("points", typeof l == "string" ? l : this._array = new t.PointArray(l)) }, clear: function () { return delete this._array, this }, move: function (l, u) { return this.attr("points", this.array().move(l, u)) }, size: function (l, u) { var m = g(this, l, u); return this.attr("points", this.array().size(m.width, m.height)) } }), t.extend(t.Line, t.Polyline, t.Polygon, { morphArray: t.PointArray, x: function (l) { return l == null ? this.bbox().x : this.move(l, this.bbox().y) }, y: function (l) { return l == null ? this.bbox().y : this.move(this.bbox().x, l) }, width: function (l) { var u = this.bbox(); return l == null ? u.width : this.size(l, u.height) }, height: function (l) { var u = this.bbox(); return l == null ? u.height : this.size(u.width, l) } }), t.Path = t.invent({ create: "path", inherit: t.Shape, extend: { morphArray: t.PathArray, array: function () { return this._array || (this._array = new t.PathArray(this.attr("d"))) }, plot: function (l) { return l == null ? this.array() : this.clear().attr("d", typeof l == "string" ? l : this._array = new t.PathArray(l)) }, clear: function () { return delete this._array, this } }, construct: { path: function (l) { return this.put(new t.Path).plot(l || new t.PathArray) } } }), t.Image = t.invent({ create: "image", inherit: t.Shape, extend: { load: function (l) { if (!l) return this; var u = this, m = new p.Image; return t.on(m, "load", function () { t.off(m); var A = u.parent(t.Pattern); A !== null && (u.width() == 0 && u.height() == 0 && u.size(m.width, m.height), A && A.width() == 0 && A.height() == 0 && A.size(u.width(), u.height()), typeof u._loaded == "function" && u._loaded.call(u, { width: m.width, height: m.height, ratio: m.width / m.height, url: l })) }), t.on(m, "error", function (A) { t.off(m), typeof u._error == "function" && u._error.call(u, A) }), this.attr("href", m.src = this.src = l, t.xlink) }, loaded: function (l) { return this._loaded = l, this }, error: function (l) { return this._error = l, this } }, construct: { image: function (l, u, m) { return this.put(new t.Image).load(l).size(u || 0, m || u || 0) } } }), t.Text = t.invent({ - create: function () { this.constructor.call(this, t.create("text")), this.dom.leading = new t.Number(1.3), this._rebuild = !0, this._build = !1, this.attr("font-family", t.defaults.attrs["font-family"]) }, inherit: t.Shape, extend: { - x: function (l) { return l == null ? this.attr("x") : this.attr("x", l) }, text: function (l) { - if (l === void 0) { - l = ""; for (var u = this.node.childNodes, m = 0, A = u.length; m < A; ++m)m != 0 && u[m].nodeType != 3 && t.adopt(u[m]).dom.newLined == 1 && (l += ` -`), l += u[m].textContent; return l - } if (this.clear().build(!0), typeof l == "function") l.call(this, this); else { - m = 0; for (var k = (l = l.split(` -`)).length; m < k; m++)this.tspan(l[m]).newLine() - } return this.build(!1).rebuild() - }, size: function (l) { return this.attr("font-size", l).rebuild() }, leading: function (l) { return l == null ? this.dom.leading : (this.dom.leading = new t.Number(l), this.rebuild()) }, lines: function () { var l = (this.textPath && this.textPath() || this).node, u = t.utils.map(t.utils.filterSVGElements(l.childNodes), function (m) { return t.adopt(m) }); return new t.Set(u) }, rebuild: function (l) { - if (typeof l == "boolean" && (this._rebuild = l), this._rebuild) { - var u = this, m = 0, A = this.dom.leading * new t.Number(this.attr("font-size")); this.lines().each(function () { - this.dom.newLined && (u.textPath() || this.attr("x", u.attr("x")), this.text() == ` -`? m += A : (this.attr("dy", A + m), m = 0)) - }), this.fire("rebuild") - } return this - }, build: function (l) { return this._build = !!l, this }, setData: function (l) { return this.dom = l, this.dom.leading = new t.Number(l.leading || 1.3), this } - }, construct: { text: function (l) { return this.put(new t.Text).text(l) }, plain: function (l) { return this.put(new t.Text).plain(l) } } - }), t.Tspan = t.invent({ - create: "tspan", inherit: t.Shape, extend: { - text: function (l) { - return l == null ? this.node.textContent + (this.dom.newLined ? ` -`: "") : (typeof l == "function" ? l.call(this, this) : this.plain(l), this) - }, dx: function (l) { return this.attr("dx", l) }, dy: function (l) { return this.attr("dy", l) }, newLine: function () { var l = this.parent(t.Text); return this.dom.newLined = !0, this.dy(l.dom.leading * l.attr("font-size")).attr("x", l.x()) } - } - }), t.extend(t.Text, t.Tspan, { plain: function (l) { return this._build === !1 && this.clear(), this.node.appendChild(e.createTextNode(l)), this }, tspan: function (l) { var u = (this.textPath && this.textPath() || this).node, m = new t.Tspan; return this._build === !1 && this.clear(), u.appendChild(m.node), m.text(l) }, clear: function () { for (var l = (this.textPath && this.textPath() || this).node; l.hasChildNodes();)l.removeChild(l.lastChild); return this }, length: function () { return this.node.getComputedTextLength() } }), t.TextPath = t.invent({ create: "textPath", inherit: t.Parent, parent: t.Text, construct: { morphArray: t.PathArray, array: function () { var l = this.track(); return l ? l.array() : null }, plot: function (l) { var u = this.track(), m = null; return u && (m = u.plot(l)), l == null ? m : this }, track: function () { var l = this.textPath(); if (l) return l.reference("href") }, textPath: function () { if (this.node.firstChild && this.node.firstChild.nodeName == "textPath") return t.adopt(this.node.firstChild) } } }), t.Nested = t.invent({ create: function () { this.constructor.call(this, t.create("svg")), this.style("overflow", "visible") }, inherit: t.Container, construct: { nested: function () { return this.put(new t.Nested) } } }); var n = { stroke: ["color", "width", "opacity", "linecap", "linejoin", "miterlimit", "dasharray", "dashoffset"], fill: ["color", "opacity", "rule"], prefix: function (l, u) { return u == "color" ? l : l + "-" + u } }; function o(l, u, m, A) { return m + A.replace(t.regex.dots, " .") } function h(l) { return l.toLowerCase().replace(/-(.)/g, function (u, m) { return m.toUpperCase() }) } function c(l) { return l.charAt(0).toUpperCase() + l.slice(1) } function d(l) { var u = l.toString(16); return u.length == 1 ? "0" + u : u } function g(l, u, m) { if (u == null || m == null) { var A = l.bbox(); u == null ? u = A.width / A.height * m : m == null && (m = A.height / A.width * u) } return { width: u, height: m } } function f(l, u, m) { return { x: u * l.a + m * l.c + 0, y: u * l.b + m * l.d + 0 } } function x(l) { return { a: l[0], b: l[1], c: l[2], d: l[3], e: l[4], f: l[5] } } function b(l) { for (var u = l.childNodes.length - 1; u >= 0; u--)l.childNodes[u] instanceof p.SVGElement && b(l.childNodes[u]); return t.adopt(l).id(t.eid(l.nodeName)) } function v(l) { return Math.abs(l) > 1e-37 ? l : 0 } ["fill", "stroke"].forEach(function (l) { var u = {}; u[l] = function (m) { if (m === void 0) return this; if (typeof m == "string" || t.Color.isRgb(m) || m && typeof m.fill == "function") this.attr(l, m); else for (var A = n[l].length - 1; A >= 0; A--)m[n[l][A]] != null && this.attr(n.prefix(l, n[l][A]), m[n[l][A]]); return this }, t.extend(t.Element, t.FX, u) }), t.extend(t.Element, t.FX, { translate: function (l, u) { return this.transform({ x: l, y: u }) }, matrix: function (l) { return this.attr("transform", new t.Matrix(arguments.length == 6 ? [].slice.call(arguments) : l)) }, opacity: function (l) { return this.attr("opacity", l) }, dx: function (l) { return this.x(new t.Number(l).plus(this instanceof t.FX ? 0 : this.x()), !0) }, dy: function (l) { return this.y(new t.Number(l).plus(this instanceof t.FX ? 0 : this.y()), !0) } }), t.extend(t.Path, { length: function () { return this.node.getTotalLength() }, pointAt: function (l) { return this.node.getPointAtLength(l) } }), t.Set = t.invent({ create: function (l) { Array.isArray(l) ? this.members = l : this.clear() }, extend: { add: function () { for (var l = [].slice.call(arguments), u = 0, m = l.length; u < m; u++)this.members.push(l[u]); return this }, remove: function (l) { var u = this.index(l); return u > -1 && this.members.splice(u, 1), this }, each: function (l) { for (var u = 0, m = this.members.length; u < m; u++)l.apply(this.members[u], [u, this.members]); return this }, clear: function () { return this.members = [], this }, length: function () { return this.members.length }, has: function (l) { return this.index(l) >= 0 }, index: function (l) { return this.members.indexOf(l) }, get: function (l) { return this.members[l] }, first: function () { return this.get(0) }, last: function () { return this.get(this.members.length - 1) }, valueOf: function () { return this.members } }, construct: { set: function (l) { return new t.Set(l) } } }), t.FX.Set = t.invent({ create: function (l) { this.set = l } }), t.Set.inherit = function () { var l = []; for (var u in t.Shape.prototype) typeof t.Shape.prototype[u] == "function" && typeof t.Set.prototype[u] != "function" && l.push(u); for (var u in l.forEach(function (A) { t.Set.prototype[A] = function () { for (var k = 0, S = this.members.length; k < S; k++)this.members[k] && typeof this.members[k][A] == "function" && this.members[k][A].apply(this.members[k], arguments); return A == "animate" ? this.fx || (this.fx = new t.FX.Set(this)) : this } }), l = [], t.FX.prototype) typeof t.FX.prototype[u] == "function" && typeof t.FX.Set.prototype[u] != "function" && l.push(u); l.forEach(function (m) { t.FX.Set.prototype[m] = function () { for (var A = 0, k = this.set.members.length; A < k; A++)this.set.members[A].fx[m].apply(this.set.members[A].fx, arguments); return this } }) }, t.extend(t.Element, {}), t.extend(t.Element, { remember: function (l, u) { if (J(arguments[0]) === "object") for (var m in l) this.remember(m, l[m]); else { if (arguments.length == 1) return this.memory()[l]; this.memory()[l] = u } return this }, forget: function () { if (arguments.length == 0) this._memory = {}; else for (var l = arguments.length - 1; l >= 0; l--)delete this.memory()[arguments[l]]; return this }, memory: function () { return this._memory || (this._memory = {}) } }), t.get = function (l) { var u = e.getElementById(function (m) { var A = (m || "").toString().match(t.regex.reference); if (A) return A[1] }(l) || l); return t.adopt(u) }, t.select = function (l, u) { return new t.Set(t.utils.map((u || e).querySelectorAll(l), function (m) { return t.adopt(m) })) }, t.extend(t.Parent, { select: function (l) { return t.select(l, this.node) } }); var y = "abcdef".split(""); if (typeof p.CustomEvent != "function") { var w = function (l, u) { u = u || { bubbles: !1, cancelable: !1, detail: void 0 }; var m = e.createEvent("CustomEvent"); return m.initCustomEvent(l, u.bubbles, u.cancelable, u.detail), m }; w.prototype = p.Event.prototype, t.CustomEvent = w } else t.CustomEvent = p.CustomEvent; return t - }, typeof define == "function" && define.amd ? define(function () { return Ce(he, he.document) }) : (typeof ot > "u" ? "undefined" : J(ot)) === "object" && typeof We < "u" ? We.exports = he.document ? Ce(he, he.document) : function (p) { return Ce(p, p.document) } : he.SVG = Ce(he, he.document), function () { SVG.Filter = SVG.invent({ create: "filter", inherit: SVG.Parent, extend: { source: "SourceGraphic", sourceAlpha: "SourceAlpha", background: "BackgroundImage", backgroundAlpha: "BackgroundAlpha", fill: "FillPaint", stroke: "StrokePaint", autoSetIn: !0, put: function (r, n) { return this.add(r, n), !r.attr("in") && this.autoSetIn && r.attr("in", this.source), r.attr("result") || r.attr("result", r), r }, blend: function (r, n, o) { return this.put(new SVG.BlendEffect(r, n, o)) }, colorMatrix: function (r, n) { return this.put(new SVG.ColorMatrixEffect(r, n)) }, convolveMatrix: function (r) { return this.put(new SVG.ConvolveMatrixEffect(r)) }, componentTransfer: function (r) { return this.put(new SVG.ComponentTransferEffect(r)) }, composite: function (r, n, o) { return this.put(new SVG.CompositeEffect(r, n, o)) }, flood: function (r, n) { return this.put(new SVG.FloodEffect(r, n)) }, offset: function (r, n) { return this.put(new SVG.OffsetEffect(r, n)) }, image: function (r) { return this.put(new SVG.ImageEffect(r)) }, merge: function () { var r = [void 0]; for (var n in arguments) r.push(arguments[n]); return this.put(new (SVG.MergeEffect.bind.apply(SVG.MergeEffect, r))) }, gaussianBlur: function (r, n) { return this.put(new SVG.GaussianBlurEffect(r, n)) }, morphology: function (r, n) { return this.put(new SVG.MorphologyEffect(r, n)) }, diffuseLighting: function (r, n, o) { return this.put(new SVG.DiffuseLightingEffect(r, n, o)) }, displacementMap: function (r, n, o, h, c) { return this.put(new SVG.DisplacementMapEffect(r, n, o, h, c)) }, specularLighting: function (r, n, o, h) { return this.put(new SVG.SpecularLightingEffect(r, n, o, h)) }, tile: function () { return this.put(new SVG.TileEffect) }, turbulence: function (r, n, o, h, c) { return this.put(new SVG.TurbulenceEffect(r, n, o, h, c)) }, toString: function () { return "url(#" + this.attr("id") + ")" } } }), SVG.extend(SVG.Defs, { filter: function (r) { var n = this.put(new SVG.Filter); return typeof r == "function" && r.call(n, n), n } }), SVG.extend(SVG.Container, { filter: function (r) { return this.defs().filter(r) } }), SVG.extend(SVG.Element, SVG.G, SVG.Nested, { filter: function (r) { return this.filterer = r instanceof SVG.Element ? r : this.doc().filter(r), this.doc() && this.filterer.doc() !== this.doc() && this.doc().defs().add(this.filterer), this.attr("filter", this.filterer), this.filterer }, unfilter: function (r) { return this.filterer && r === !0 && this.filterer.remove(), delete this.filterer, this.attr("filter", null) } }), SVG.Effect = SVG.invent({ create: function () { this.constructor.call(this) }, inherit: SVG.Element, extend: { in: function (r) { return r == null ? this.parent() && this.parent().select('[result="' + this.attr("in") + '"]').get(0) || this.attr("in") : this.attr("in", r) }, result: function (r) { return r == null ? this.attr("result") : this.attr("result", r) }, toString: function () { return this.result() } } }), SVG.ParentEffect = SVG.invent({ create: function () { this.constructor.call(this) }, inherit: SVG.Parent, extend: { in: function (r) { return r == null ? this.parent() && this.parent().select('[result="' + this.attr("in") + '"]').get(0) || this.attr("in") : this.attr("in", r) }, result: function (r) { return r == null ? this.attr("result") : this.attr("result", r) }, toString: function () { return this.result() } } }); var p = { blend: function (r, n) { return this.parent() && this.parent().blend(this, r, n) }, colorMatrix: function (r, n) { return this.parent() && this.parent().colorMatrix(r, n).in(this) }, convolveMatrix: function (r) { return this.parent() && this.parent().convolveMatrix(r).in(this) }, componentTransfer: function (r) { return this.parent() && this.parent().componentTransfer(r).in(this) }, composite: function (r, n) { return this.parent() && this.parent().composite(this, r, n) }, flood: function (r, n) { return this.parent() && this.parent().flood(r, n) }, offset: function (r, n) { return this.parent() && this.parent().offset(r, n).in(this) }, image: function (r) { return this.parent() && this.parent().image(r) }, merge: function () { return this.parent() && this.parent().merge.apply(this.parent(), [this].concat(arguments)) }, gaussianBlur: function (r, n) { return this.parent() && this.parent().gaussianBlur(r, n).in(this) }, morphology: function (r, n) { return this.parent() && this.parent().morphology(r, n).in(this) }, diffuseLighting: function (r, n, o) { return this.parent() && this.parent().diffuseLighting(r, n, o).in(this) }, displacementMap: function (r, n, o, h) { return this.parent() && this.parent().displacementMap(this, r, n, o, h) }, specularLighting: function (r, n, o, h) { return this.parent() && this.parent().specularLighting(r, n, o, h).in(this) }, tile: function () { return this.parent() && this.parent().tile().in(this) }, turbulence: function (r, n, o, h, c) { return this.parent() && this.parent().turbulence(r, n, o, h, c).in(this) } }; SVG.extend(SVG.Effect, p), SVG.extend(SVG.ParentEffect, p), SVG.ChildEffect = SVG.invent({ create: function () { this.constructor.call(this) }, inherit: SVG.Element, extend: { in: function (r) { this.attr("in", r) } } }); var e = { blend: function (r, n, o) { this.attr({ in: r, in2: n, mode: o || "normal" }) }, colorMatrix: function (r, n) { r == "matrix" && (n = a(n)), this.attr({ type: r, values: n === void 0 ? null : n }) }, convolveMatrix: function (r) { r = a(r), this.attr({ order: Math.sqrt(r.split(" ").length), kernelMatrix: r }) }, composite: function (r, n, o) { this.attr({ in: r, in2: n, operator: o }) }, flood: function (r, n) { this.attr("flood-color", r), n != null && this.attr("flood-opacity", n) }, offset: function (r, n) { this.attr({ dx: r, dy: n }) }, image: function (r) { this.attr("href", r, SVG.xlink) }, displacementMap: function (r, n, o, h, c) { this.attr({ in: r, in2: n, scale: o, xChannelSelector: h, yChannelSelector: c }) }, gaussianBlur: function (r, n) { r != null || n != null ? this.attr("stdDeviation", function (o) { if (!Array.isArray(o)) return o; for (var h = 0, c = o.length, d = []; h < c; h++)d.push(o[h]); return d.join(" ") }(Array.prototype.slice.call(arguments))) : this.attr("stdDeviation", "0 0") }, morphology: function (r, n) { this.attr({ operator: r, radius: n }) }, tile: function () { }, turbulence: function (r, n, o, h, c) { this.attr({ numOctaves: n, seed: o, stitchTiles: h, baseFrequency: r, type: c }) } }, t = { merge: function () { var r; if (arguments[0] instanceof SVG.Set) { var n = this; arguments[0].each(function (h) { this instanceof SVG.MergeNode ? n.put(this) : (this instanceof SVG.Effect || this instanceof SVG.ParentEffect) && n.put(new SVG.MergeNode(this)) }) } else { r = Array.isArray(arguments[0]) ? arguments[0] : arguments; for (var o = 0; o < r.length; o++)r[o] instanceof SVG.MergeNode ? this.put(r[o]) : this.put(new SVG.MergeNode(r[o])) } }, componentTransfer: function (r) { if (this.rgb = new SVG.Set, ["r", "g", "b", "a"].forEach(function (o) { this[o] = new SVG["Func" + o.toUpperCase()]("identity"), this.rgb.add(this[o]), this.node.appendChild(this[o].node) }.bind(this)), r) for (var n in r.rgb && (["r", "g", "b"].forEach(function (o) { this[o].attr(r.rgb) }.bind(this)), delete r.rgb), r) this[n].attr(r[n]) }, diffuseLighting: function (r, n, o) { this.attr({ surfaceScale: r, diffuseConstant: n, kernelUnitLength: o }) }, specularLighting: function (r, n, o, h) { this.attr({ surfaceScale: r, diffuseConstant: n, specularExponent: o, kernelUnitLength: h }) } }, i = { distantLight: function (r, n) { this.attr({ azimuth: r, elevation: n }) }, pointLight: function (r, n, o) { this.attr({ x: r, y: n, z: o }) }, spotLight: function (r, n, o, h, c, d) { this.attr({ x: r, y: n, z: o, pointsAtX: h, pointsAtY: c, pointsAtZ: d }) }, mergeNode: function (r) { this.attr("in", r) } }; function a(r) { return Array.isArray(r) && (r = new SVG.Array(r)), r.toString().replace(/^\s+/, "").replace(/\s+$/, "").replace(/\s+/g, " ") } function s() { var r = function () { }; for (var n in typeof arguments[arguments.length - 1] == "function" && (r = arguments[arguments.length - 1], Array.prototype.splice.call(arguments, arguments.length - 1, 1)), arguments) for (var o in arguments[n]) r(arguments[n][o], o, arguments[n]) } ["r", "g", "b", "a"].forEach(function (r) { i["Func" + r.toUpperCase()] = function (n) { switch (this.attr("type", n), n) { case "table": this.attr("tableValues", arguments[1]); break; case "linear": this.attr("slope", arguments[1]), this.attr("intercept", arguments[2]); break; case "gamma": this.attr("amplitude", arguments[1]), this.attr("exponent", arguments[2]), this.attr("offset", arguments[2]) } } }), s(e, function (r, n) { var o = n.charAt(0).toUpperCase() + n.slice(1); SVG[o + "Effect"] = SVG.invent({ create: function () { this.constructor.call(this, SVG.create("fe" + o)), r.apply(this, arguments), this.result(this.attr("id") + "Out") }, inherit: SVG.Effect, extend: {} }) }), s(t, function (r, n) { var o = n.charAt(0).toUpperCase() + n.slice(1); SVG[o + "Effect"] = SVG.invent({ create: function () { this.constructor.call(this, SVG.create("fe" + o)), r.apply(this, arguments), this.result(this.attr("id") + "Out") }, inherit: SVG.ParentEffect, extend: {} }) }), s(i, function (r, n) { var o = n.charAt(0).toUpperCase() + n.slice(1); SVG[o] = SVG.invent({ create: function () { this.constructor.call(this, SVG.create("fe" + o)), r.apply(this, arguments) }, inherit: SVG.ChildEffect, extend: {} }) }), SVG.extend(SVG.MergeEffect, { in: function (r) { return r instanceof SVG.MergeNode ? this.add(r, 0) : this.add(new SVG.MergeNode(r), 0), this } }), SVG.extend(SVG.CompositeEffect, SVG.BlendEffect, SVG.DisplacementMapEffect, { in2: function (r) { return r == null ? this.parent() && this.parent().select('[result="' + this.attr("in2") + '"]').get(0) || this.attr("in2") : this.attr("in2", r) } }), SVG.filter = { sepiatone: [.343, .669, .119, 0, 0, .249, .626, .13, 0, 0, .172, .334, .111, 0, 0, 0, 0, 0, 1, 0] } }.call(void 0), function () { function p(s, r, n, o, h, c, d) { for (var g = s.slice(r, n || d), f = o.slice(h, c || d), x = 0, b = { pos: [0, 0], start: [0, 0] }, v = { pos: [0, 0], start: [0, 0] }; g[x] = e.call(b, g[x]), f[x] = e.call(v, f[x]), g[x][0] != f[x][0] || g[x][0] == "M" || g[x][0] == "A" && (g[x][4] != f[x][4] || g[x][5] != f[x][5]) ? (Array.prototype.splice.apply(g, [x, 1].concat(i.call(b, g[x]))), Array.prototype.splice.apply(f, [x, 1].concat(i.call(v, f[x])))) : (g[x] = t.call(b, g[x]), f[x] = t.call(v, f[x])), !(++x == g.length && x == f.length);)x == g.length && g.push(["C", b.pos[0], b.pos[1], b.pos[0], b.pos[1], b.pos[0], b.pos[1]]), x == f.length && f.push(["C", v.pos[0], v.pos[1], v.pos[0], v.pos[1], v.pos[0], v.pos[1]]); return { start: g, dest: f } } function e(s) { switch (s[0]) { case "z": case "Z": s[0] = "L", s[1] = this.start[0], s[2] = this.start[1]; break; case "H": s[0] = "L", s[2] = this.pos[1]; break; case "V": s[0] = "L", s[2] = s[1], s[1] = this.pos[0]; break; case "T": s[0] = "Q", s[3] = s[1], s[4] = s[2], s[1] = this.reflection[1], s[2] = this.reflection[0]; break; case "S": s[0] = "C", s[6] = s[4], s[5] = s[3], s[4] = s[2], s[3] = s[1], s[2] = this.reflection[1], s[1] = this.reflection[0] }return s } function t(s) { var r = s.length; return this.pos = [s[r - 2], s[r - 1]], "SCQT".indexOf(s[0]) != -1 && (this.reflection = [2 * this.pos[0] - s[r - 4], 2 * this.pos[1] - s[r - 3]]), s } function i(s) { var r = [s]; switch (s[0]) { case "M": return this.pos = this.start = [s[1], s[2]], r; case "L": s[5] = s[3] = s[1], s[6] = s[4] = s[2], s[1] = this.pos[0], s[2] = this.pos[1]; break; case "Q": s[6] = s[4], s[5] = s[3], s[4] = 1 * s[4] / 3 + 2 * s[2] / 3, s[3] = 1 * s[3] / 3 + 2 * s[1] / 3, s[2] = 1 * this.pos[1] / 3 + 2 * s[2] / 3, s[1] = 1 * this.pos[0] / 3 + 2 * s[1] / 3; break; case "A": r = function (n, o) { var h, c, d, g, f, x, b, v, y, w, l, u, m, A, k, S, L, C, I, z, M, T, E, O, D, H, W = Math.abs(o[1]), N = Math.abs(o[2]), B = o[3] % 360, q = o[4], Z = o[5], j = o[6], se = o[7], V = new SVG.Point(n), G = new SVG.Point(j, se), _ = []; if (W === 0 || N === 0 || V.x === G.x && V.y === G.y) return [["C", V.x, V.y, G.x, G.y, G.x, G.y]]; for (h = new SVG.Point((V.x - G.x) / 2, (V.y - G.y) / 2).transform(new SVG.Matrix().rotate(B)), (c = h.x * h.x / (W * W) + h.y * h.y / (N * N)) > 1 && (W *= c = Math.sqrt(c), N *= c), d = new SVG.Matrix().rotate(B).scale(1 / W, 1 / N).rotate(-B), V = V.transform(d), G = G.transform(d), g = [G.x - V.x, G.y - V.y], x = g[0] * g[0] + g[1] * g[1], f = Math.sqrt(x), g[0] /= f, g[1] /= f, b = x < 4 ? Math.sqrt(1 - x / 4) : 0, q === Z && (b *= -1), v = new SVG.Point((G.x + V.x) / 2 + b * -g[1], (G.y + V.y) / 2 + b * g[0]), y = new SVG.Point(V.x - v.x, V.y - v.y), w = new SVG.Point(G.x - v.x, G.y - v.y), l = Math.acos(y.x / Math.sqrt(y.x * y.x + y.y * y.y)), y.y < 0 && (l *= -1), u = Math.acos(w.x / Math.sqrt(w.x * w.x + w.y * w.y)), w.y < 0 && (u *= -1), Z && l > u && (u += 2 * Math.PI), !Z && l < u && (u -= 2 * Math.PI), A = Math.ceil(2 * Math.abs(l - u) / Math.PI), S = [], L = l, m = (u - l) / A, k = 4 * Math.tan(m / 4) / 3, M = 0; M <= A; M++)I = Math.cos(L), C = Math.sin(L), z = new SVG.Point(v.x + I, v.y + C), S[M] = [new SVG.Point(z.x + k * C, z.y - k * I), z, new SVG.Point(z.x - k * C, z.y + k * I)], L += m; for (S[0][0] = S[0][1].clone(), S[S.length - 1][2] = S[S.length - 1][1].clone(), d = new SVG.Matrix().rotate(B).scale(W, N).rotate(-B), M = 0, T = S.length; M < T; M++)S[M][0] = S[M][0].transform(d), S[M][1] = S[M][1].transform(d), S[M][2] = S[M][2].transform(d); for (M = 1, T = S.length; M < T; M++)E = (z = S[M - 1][2]).x, O = z.y, D = (z = S[M][0]).x, H = z.y, j = (z = S[M][1]).x, se = z.y, _.push(["C", E, O, D, H, j, se]); return _ }(this.pos, s), s = r[0] }return s[0] = "C", this.pos = [s[5], s[6]], this.reflection = [2 * s[5] - s[3], 2 * s[6] - s[4]], r } function a(s, r) { if (r === !1) return !1; for (var n = r, o = s.length; n < o; ++n)if (s[n][0] == "M") return n; return !1 } SVG.extend(SVG.PathArray, { morph: function (s) { for (var r = this.value, n = this.parse(s), o = 0, h = 0, c = !1, d = !1; o !== !1 || h !== !1;) { var g; c = a(r, o !== !1 && o + 1), d = a(n, h !== !1 && h + 1), o === !1 && (o = (g = new SVG.PathArray(f.start).bbox()).height == 0 || g.width == 0 ? r.push(r[0]) - 1 : r.push(["M", g.x + g.width / 2, g.y + g.height / 2]) - 1), h === !1 && (h = (g = new SVG.PathArray(f.dest).bbox()).height == 0 || g.width == 0 ? n.push(n[0]) - 1 : n.push(["M", g.x + g.width / 2, g.y + g.height / 2]) - 1); var f = p(r, o, c, n, h, d); r = r.slice(0, o).concat(f.start, c === !1 ? [] : r.slice(c)), n = n.slice(0, h).concat(f.dest, d === !1 ? [] : n.slice(d)), o = c !== !1 && o + f.start.length, h = d !== !1 && h + f.dest.length } return this.value = r, this.destination = new SVG.PathArray, this.destination.value = n, this } }) }(), function () { function p(e) { e.remember("_draggable", this), this.el = e } p.prototype.init = function (e, t) { var i = this; this.constraint = e, this.value = t, this.el.on("mousedown.drag", function (a) { i.start(a) }), this.el.on("touchstart.drag", function (a) { i.start(a) }) }, p.prototype.transformPoint = function (e, t) { var i = (e = e || window.event).changedTouches && e.changedTouches[0] || e; return this.p.x = i.clientX - (t || 0), this.p.y = i.clientY, this.p.matrixTransform(this.m) }, p.prototype.getBBox = function () { var e = this.el.bbox(); return this.el instanceof SVG.Nested && (e = this.el.rbox()), (this.el instanceof SVG.G || this.el instanceof SVG.Use || this.el instanceof SVG.Nested) && (e.x = this.el.x(), e.y = this.el.y()), e }, p.prototype.start = function (e) { if (e.type != "click" && e.type != "mousedown" && e.type != "mousemove" || (e.which || e.buttons) == 1) { var t = this; if (this.el.fire("beforedrag", { event: e, handler: this }), !this.el.event().defaultPrevented) { e.preventDefault(), e.stopPropagation(), this.parent = this.parent || this.el.parent(SVG.Nested) || this.el.parent(SVG.Doc), this.p = this.parent.node.createSVGPoint(), this.m = this.el.node.getScreenCTM().inverse(); var i, a = this.getBBox(); if (this.el instanceof SVG.Text) switch (i = this.el.node.getComputedTextLength(), this.el.attr("text-anchor")) { case "middle": i /= 2; break; case "start": i = 0 }this.startPoints = { point: this.transformPoint(e, i), box: a, transform: this.el.transform() }, SVG.on(window, "mousemove.drag", function (s) { t.drag(s) }), SVG.on(window, "touchmove.drag", function (s) { t.drag(s) }), SVG.on(window, "mouseup.drag", function (s) { t.end(s) }), SVG.on(window, "touchend.drag", function (s) { t.end(s) }), this.el.fire("dragstart", { event: e, p: this.startPoints.point, m: this.m, handler: this }) } } }, p.prototype.drag = function (e) { var t = this.getBBox(), i = this.transformPoint(e), a = this.startPoints.box.x + i.x - this.startPoints.point.x, s = this.startPoints.box.y + i.y - this.startPoints.point.y, r = this.constraint, n = i.x - this.startPoints.point.x, o = i.y - this.startPoints.point.y; if (this.el.fire("dragmove", { event: e, p: i, m: this.m, handler: this }), this.el.event().defaultPrevented) return i; if (typeof r == "function") { var h = r.call(this.el, a, s, this.m); typeof h == "boolean" && (h = { x: h, y: h }), h.x === !0 ? this.el.x(a) : h.x !== !1 && this.el.x(h.x), h.y === !0 ? this.el.y(s) : h.y !== !1 && this.el.y(h.y) } else typeof r == "object" && (r.minX != null && a < r.minX ? n = (a = r.minX) - this.startPoints.box.x : r.maxX != null && a > r.maxX - t.width && (n = (a = r.maxX - t.width) - this.startPoints.box.x), r.minY != null && s < r.minY ? o = (s = r.minY) - this.startPoints.box.y : r.maxY != null && s > r.maxY - t.height && (o = (s = r.maxY - t.height) - this.startPoints.box.y), r.snapToGrid != null && (a -= a % r.snapToGrid, s -= s % r.snapToGrid, n -= n % r.snapToGrid, o -= o % r.snapToGrid), this.el instanceof SVG.G ? this.el.matrix(this.startPoints.transform).transform({ x: n, y: o }, !0) : this.el.move(a, s)); return i }, p.prototype.end = function (e) { var t = this.drag(e); this.el.fire("dragend", { event: e, p: t, m: this.m, handler: this }), SVG.off(window, "mousemove.drag"), SVG.off(window, "touchmove.drag"), SVG.off(window, "mouseup.drag"), SVG.off(window, "touchend.drag") }, SVG.extend(SVG.Element, { draggable: function (e, t) { typeof e != "function" && typeof e != "object" || (t = e, e = !0); var i = this.remember("_draggable") || new p(this); return (e = e === void 0 || e) ? i.init(t || {}, e) : (this.off("mousedown.drag"), this.off("touchstart.drag")), this } }) }.call(void 0), function () { function p(e) { this.el = e, e.remember("_selectHandler", this), this.pointSelection = { isSelected: !1 }, this.rectSelection = { isSelected: !1 }, this.pointsList = { lt: [0, 0], rt: ["width", 0], rb: ["width", "height"], lb: [0, "height"], t: ["width", 0], r: ["width", "height"], b: ["width", "height"], l: [0, "height"] }, this.pointCoord = function (t, i, a) { var s = typeof t != "string" ? t : i[t]; return a ? s / 2 : s }, this.pointCoords = function (t, i) { var a = this.pointsList[t]; return { x: this.pointCoord(a[0], i, t === "t" || t === "b"), y: this.pointCoord(a[1], i, t === "r" || t === "l") } } } p.prototype.init = function (e, t) { var i = this.el.bbox(); this.options = {}; var a = this.el.selectize.defaults.points; for (var s in this.el.selectize.defaults) this.options[s] = this.el.selectize.defaults[s], t[s] !== void 0 && (this.options[s] = t[s]); var r = ["points", "pointsExclude"]; for (var s in r) { var n = this.options[r[s]]; typeof n == "string" ? n = n.length > 0 ? n.split(/\s*,\s*/i) : [] : typeof n == "boolean" && r[s] === "points" && (n = n ? a : []), this.options[r[s]] = n } this.options.points = [a, this.options.points].reduce(function (o, h) { return o.filter(function (c) { return h.indexOf(c) > -1 }) }), this.options.points = [this.options.points, this.options.pointsExclude].reduce(function (o, h) { return o.filter(function (c) { return h.indexOf(c) < 0 }) }), this.parent = this.el.parent(), this.nested = this.nested || this.parent.group(), this.nested.matrix(new SVG.Matrix(this.el).translate(i.x, i.y)), this.options.deepSelect && ["line", "polyline", "polygon"].indexOf(this.el.type) !== -1 ? this.selectPoints(e) : this.selectRect(e), this.observe(), this.cleanup() }, p.prototype.selectPoints = function (e) { return this.pointSelection.isSelected = e, this.pointSelection.set || (this.pointSelection.set = this.parent.set(), this.drawPoints()), this }, p.prototype.getPointArray = function () { var e = this.el.bbox(); return this.el.array().valueOf().map(function (t) { return [t[0] - e.x, t[1] - e.y] }) }, p.prototype.drawPoints = function () { for (var e = this, t = this.getPointArray(), i = 0, a = t.length; i < a; ++i) { var s = function (n) { return function (o) { (o = o || window.event).preventDefault ? o.preventDefault() : o.returnValue = !1, o.stopPropagation(); var h = o.pageX || o.touches[0].pageX, c = o.pageY || o.touches[0].pageY; e.el.fire("point", { x: h, y: c, i: n, event: o }) } }(i), r = this.drawPoint(t[i][0], t[i][1]).addClass(this.options.classPoints).addClass(this.options.classPoints + "_point").on("touchstart", s).on("mousedown", s); this.pointSelection.set.add(r) } }, p.prototype.drawPoint = function (e, t) { var i = this.options.pointType; switch (i) { case "circle": return this.drawCircle(e, t); case "rect": return this.drawRect(e, t); default: if (typeof i == "function") return i.call(this, e, t); throw new Error("Unknown " + i + " point type!") } }, p.prototype.drawCircle = function (e, t) { return this.nested.circle(this.options.pointSize).center(e, t) }, p.prototype.drawRect = function (e, t) { return this.nested.rect(this.options.pointSize, this.options.pointSize).center(e, t) }, p.prototype.updatePointSelection = function () { var e = this.getPointArray(); this.pointSelection.set.each(function (t) { this.cx() === e[t][0] && this.cy() === e[t][1] || this.center(e[t][0], e[t][1]) }) }, p.prototype.updateRectSelection = function () { var e = this, t = this.el.bbox(); if (this.rectSelection.set.get(0).attr({ width: t.width, height: t.height }), this.options.points.length && this.options.points.map(function (a, s) { var r = e.pointCoords(a, t); e.rectSelection.set.get(s + 1).center(r.x, r.y) }), this.options.rotationPoint) { var i = this.rectSelection.set.length(); this.rectSelection.set.get(i - 1).center(t.width / 2, 20) } }, p.prototype.selectRect = function (e) { var t = this, i = this.el.bbox(); function a(n) { return function (o) { (o = o || window.event).preventDefault ? o.preventDefault() : o.returnValue = !1, o.stopPropagation(); var h = o.pageX || o.touches[0].pageX, c = o.pageY || o.touches[0].pageY; t.el.fire(n, { x: h, y: c, event: o }) } } if (this.rectSelection.isSelected = e, this.rectSelection.set = this.rectSelection.set || this.parent.set(), this.rectSelection.set.get(0) || this.rectSelection.set.add(this.nested.rect(i.width, i.height).addClass(this.options.classRect)), this.options.points.length && this.rectSelection.set.length() < 2 && (this.options.points.map(function (n, o) { var h = t.pointCoords(n, i), c = t.drawPoint(h.x, h.y).attr("class", t.options.classPoints + "_" + n).on("mousedown", a(n)).on("touchstart", a(n)); t.rectSelection.set.add(c) }), this.rectSelection.set.each(function () { this.addClass(t.options.classPoints) })), this.options.rotationPoint && (this.options.points && !this.rectSelection.set.get(9) || !this.options.points && !this.rectSelection.set.get(1))) { var s = function (n) { (n = n || window.event).preventDefault ? n.preventDefault() : n.returnValue = !1, n.stopPropagation(); var o = n.pageX || n.touches[0].pageX, h = n.pageY || n.touches[0].pageY; t.el.fire("rot", { x: o, y: h, event: n }) }, r = this.drawPoint(i.width / 2, 20).attr("class", this.options.classPoints + "_rot").on("touchstart", s).on("mousedown", s); this.rectSelection.set.add(r) } }, p.prototype.handler = function () { var e = this.el.bbox(); this.nested.matrix(new SVG.Matrix(this.el).translate(e.x, e.y)), this.rectSelection.isSelected && this.updateRectSelection(), this.pointSelection.isSelected && this.updatePointSelection() }, p.prototype.observe = function () { var e = this; if (MutationObserver) if (this.rectSelection.isSelected || this.pointSelection.isSelected) this.observerInst = this.observerInst || new MutationObserver(function () { e.handler() }), this.observerInst.observe(this.el.node, { attributes: !0 }); else try { this.observerInst.disconnect(), delete this.observerInst } catch { } else this.el.off("DOMAttrModified.select"), (this.rectSelection.isSelected || this.pointSelection.isSelected) && this.el.on("DOMAttrModified.select", function () { e.handler() }) }, p.prototype.cleanup = function () { !this.rectSelection.isSelected && this.rectSelection.set && (this.rectSelection.set.each(function () { this.remove() }), this.rectSelection.set.clear(), delete this.rectSelection.set), !this.pointSelection.isSelected && this.pointSelection.set && (this.pointSelection.set.each(function () { this.remove() }), this.pointSelection.set.clear(), delete this.pointSelection.set), this.pointSelection.isSelected || this.rectSelection.isSelected || (this.nested.remove(), delete this.nested) }, SVG.extend(SVG.Element, { selectize: function (e, t) { return typeof e == "object" && (t = e, e = !0), (this.remember("_selectHandler") || new p(this)).init(e === void 0 || e, t || {}), this } }), SVG.Element.prototype.selectize.defaults = { points: ["lt", "rt", "rb", "lb", "t", "r", "b", "l"], pointsExclude: [], classRect: "svg_select_boundingRect", classPoints: "svg_select_points", pointSize: 7, rotationPoint: !0, deepSelect: !1, pointType: "circle" } }(), function () { (function () { function p(e) { e.remember("_resizeHandler", this), this.el = e, this.parameters = {}, this.lastUpdateCall = null, this.p = e.doc().node.createSVGPoint() } p.prototype.transformPoint = function (e, t, i) { return this.p.x = e - (this.offset.x - window.pageXOffset), this.p.y = t - (this.offset.y - window.pageYOffset), this.p.matrixTransform(i || this.m) }, p.prototype._extractPosition = function (e) { return { x: e.clientX != null ? e.clientX : e.touches[0].clientX, y: e.clientY != null ? e.clientY : e.touches[0].clientY } }, p.prototype.init = function (e) { var t = this; if (this.stop(), e !== "stop") { for (var i in this.options = {}, this.el.resize.defaults) this.options[i] = this.el.resize.defaults[i], e[i] !== void 0 && (this.options[i] = e[i]); this.el.on("lt.resize", function (a) { t.resize(a || window.event) }), this.el.on("rt.resize", function (a) { t.resize(a || window.event) }), this.el.on("rb.resize", function (a) { t.resize(a || window.event) }), this.el.on("lb.resize", function (a) { t.resize(a || window.event) }), this.el.on("t.resize", function (a) { t.resize(a || window.event) }), this.el.on("r.resize", function (a) { t.resize(a || window.event) }), this.el.on("b.resize", function (a) { t.resize(a || window.event) }), this.el.on("l.resize", function (a) { t.resize(a || window.event) }), this.el.on("rot.resize", function (a) { t.resize(a || window.event) }), this.el.on("point.resize", function (a) { t.resize(a || window.event) }), this.update() } }, p.prototype.stop = function () { return this.el.off("lt.resize"), this.el.off("rt.resize"), this.el.off("rb.resize"), this.el.off("lb.resize"), this.el.off("t.resize"), this.el.off("r.resize"), this.el.off("b.resize"), this.el.off("l.resize"), this.el.off("rot.resize"), this.el.off("point.resize"), this }, p.prototype.resize = function (e) { var t = this; this.m = this.el.node.getScreenCTM().inverse(), this.offset = { x: window.pageXOffset, y: window.pageYOffset }; var i = this._extractPosition(e.detail.event); if (this.parameters = { type: this.el.type, p: this.transformPoint(i.x, i.y), x: e.detail.x, y: e.detail.y, box: this.el.bbox(), rotation: this.el.transform().rotation }, this.el.type === "text" && (this.parameters.fontSize = this.el.attr()["font-size"]), e.detail.i !== void 0) { var a = this.el.array().valueOf(); this.parameters.i = e.detail.i, this.parameters.pointCoords = [a[e.detail.i][0], a[e.detail.i][1]] } switch (e.type) { case "lt": this.calc = function (s, r) { var n = this.snapToGrid(s, r); if (this.parameters.box.width - n[0] > 0 && this.parameters.box.height - n[1] > 0) { if (this.parameters.type === "text") return this.el.move(this.parameters.box.x + n[0], this.parameters.box.y), void this.el.attr("font-size", this.parameters.fontSize - n[0]); n = this.checkAspectRatio(n), this.el.move(this.parameters.box.x + n[0], this.parameters.box.y + n[1]).size(this.parameters.box.width - n[0], this.parameters.box.height - n[1]) } }; break; case "rt": this.calc = function (s, r) { var n = this.snapToGrid(s, r, 2); if (this.parameters.box.width + n[0] > 0 && this.parameters.box.height - n[1] > 0) { if (this.parameters.type === "text") return this.el.move(this.parameters.box.x - n[0], this.parameters.box.y), void this.el.attr("font-size", this.parameters.fontSize + n[0]); n = this.checkAspectRatio(n, !0), this.el.move(this.parameters.box.x, this.parameters.box.y + n[1]).size(this.parameters.box.width + n[0], this.parameters.box.height - n[1]) } }; break; case "rb": this.calc = function (s, r) { var n = this.snapToGrid(s, r, 0); if (this.parameters.box.width + n[0] > 0 && this.parameters.box.height + n[1] > 0) { if (this.parameters.type === "text") return this.el.move(this.parameters.box.x - n[0], this.parameters.box.y), void this.el.attr("font-size", this.parameters.fontSize + n[0]); n = this.checkAspectRatio(n), this.el.move(this.parameters.box.x, this.parameters.box.y).size(this.parameters.box.width + n[0], this.parameters.box.height + n[1]) } }; break; case "lb": this.calc = function (s, r) { var n = this.snapToGrid(s, r, 1); if (this.parameters.box.width - n[0] > 0 && this.parameters.box.height + n[1] > 0) { if (this.parameters.type === "text") return this.el.move(this.parameters.box.x + n[0], this.parameters.box.y), void this.el.attr("font-size", this.parameters.fontSize - n[0]); n = this.checkAspectRatio(n, !0), this.el.move(this.parameters.box.x + n[0], this.parameters.box.y).size(this.parameters.box.width - n[0], this.parameters.box.height + n[1]) } }; break; case "t": this.calc = function (s, r) { var n = this.snapToGrid(s, r, 2); if (this.parameters.box.height - n[1] > 0) { if (this.parameters.type === "text") return; this.el.move(this.parameters.box.x, this.parameters.box.y + n[1]).height(this.parameters.box.height - n[1]) } }; break; case "r": this.calc = function (s, r) { var n = this.snapToGrid(s, r, 0); if (this.parameters.box.width + n[0] > 0) { if (this.parameters.type === "text") return; this.el.move(this.parameters.box.x, this.parameters.box.y).width(this.parameters.box.width + n[0]) } }; break; case "b": this.calc = function (s, r) { var n = this.snapToGrid(s, r, 0); if (this.parameters.box.height + n[1] > 0) { if (this.parameters.type === "text") return; this.el.move(this.parameters.box.x, this.parameters.box.y).height(this.parameters.box.height + n[1]) } }; break; case "l": this.calc = function (s, r) { var n = this.snapToGrid(s, r, 1); if (this.parameters.box.width - n[0] > 0) { if (this.parameters.type === "text") return; this.el.move(this.parameters.box.x + n[0], this.parameters.box.y).width(this.parameters.box.width - n[0]) } }; break; case "rot": this.calc = function (s, r) { var n = s + this.parameters.p.x, o = r + this.parameters.p.y, h = Math.atan2(this.parameters.p.y - this.parameters.box.y - this.parameters.box.height / 2, this.parameters.p.x - this.parameters.box.x - this.parameters.box.width / 2), c = Math.atan2(o - this.parameters.box.y - this.parameters.box.height / 2, n - this.parameters.box.x - this.parameters.box.width / 2), d = this.parameters.rotation + 180 * (c - h) / Math.PI + this.options.snapToAngle / 2; this.el.center(this.parameters.box.cx, this.parameters.box.cy).rotate(d - d % this.options.snapToAngle, this.parameters.box.cx, this.parameters.box.cy) }; break; case "point": this.calc = function (s, r) { var n = this.snapToGrid(s, r, this.parameters.pointCoords[0], this.parameters.pointCoords[1]), o = this.el.array().valueOf(); o[this.parameters.i][0] = this.parameters.pointCoords[0] + n[0], o[this.parameters.i][1] = this.parameters.pointCoords[1] + n[1], this.el.plot(o) } }this.el.fire("resizestart", { dx: this.parameters.x, dy: this.parameters.y, event: e }), SVG.on(window, "touchmove.resize", function (s) { t.update(s || window.event) }), SVG.on(window, "touchend.resize", function () { t.done() }), SVG.on(window, "mousemove.resize", function (s) { t.update(s || window.event) }), SVG.on(window, "mouseup.resize", function () { t.done() }) }, p.prototype.update = function (e) { if (e) { var t = this._extractPosition(e), i = this.transformPoint(t.x, t.y), a = i.x - this.parameters.p.x, s = i.y - this.parameters.p.y; this.lastUpdateCall = [a, s], this.calc(a, s), this.el.fire("resizing", { dx: a, dy: s, event: e }) } else this.lastUpdateCall && this.calc(this.lastUpdateCall[0], this.lastUpdateCall[1]) }, p.prototype.done = function () { this.lastUpdateCall = null, SVG.off(window, "mousemove.resize"), SVG.off(window, "mouseup.resize"), SVG.off(window, "touchmove.resize"), SVG.off(window, "touchend.resize"), this.el.fire("resizedone") }, p.prototype.snapToGrid = function (e, t, i, a) { var s; return a !== void 0 ? s = [(i + e) % this.options.snapToGrid, (a + t) % this.options.snapToGrid] : (i = i ?? 3, s = [(this.parameters.box.x + e + (1 & i ? 0 : this.parameters.box.width)) % this.options.snapToGrid, (this.parameters.box.y + t + (2 & i ? 0 : this.parameters.box.height)) % this.options.snapToGrid]), e < 0 && (s[0] -= this.options.snapToGrid), t < 0 && (s[1] -= this.options.snapToGrid), e -= Math.abs(s[0]) < this.options.snapToGrid / 2 ? s[0] : s[0] - (e < 0 ? -this.options.snapToGrid : this.options.snapToGrid), t -= Math.abs(s[1]) < this.options.snapToGrid / 2 ? s[1] : s[1] - (t < 0 ? -this.options.snapToGrid : this.options.snapToGrid), this.constraintToBox(e, t, i, a) }, p.prototype.constraintToBox = function (e, t, i, a) { var s, r, n = this.options.constraint || {}; return a !== void 0 ? (s = i, r = a) : (s = this.parameters.box.x + (1 & i ? 0 : this.parameters.box.width), r = this.parameters.box.y + (2 & i ? 0 : this.parameters.box.height)), n.minX !== void 0 && s + e < n.minX && (e = n.minX - s), n.maxX !== void 0 && s + e > n.maxX && (e = n.maxX - s), n.minY !== void 0 && r + t < n.minY && (t = n.minY - r), n.maxY !== void 0 && r + t > n.maxY && (t = n.maxY - r), [e, t] }, p.prototype.checkAspectRatio = function (e, t) { if (!this.options.saveAspectRatio) return e; var i = e.slice(), a = this.parameters.box.width / this.parameters.box.height, s = this.parameters.box.width + e[0], r = this.parameters.box.height - e[1], n = s / r; return n < a ? (i[1] = s / a - this.parameters.box.height, t && (i[1] = -i[1])) : n > a && (i[0] = this.parameters.box.width - r * a, t && (i[0] = -i[0])), i }, SVG.extend(SVG.Element, { resize: function (e) { return (this.remember("_resizeHandler") || new p(this)).init(e || {}), this } }), SVG.Element.prototype.resize.defaults = { snapToAngle: .1, snapToGrid: 1, constraint: {}, saveAspectRatio: !1 } }).call(this) }(), window.Apex === void 0 && (window.Apex = {}); var Ct = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w } return R(p, [{ key: "initModules", value: function () { this.ctx.publicMethods = ["updateOptions", "updateSeries", "appendData", "appendSeries", "isSeriesHidden", "highlightSeries", "toggleSeries", "showSeries", "hideSeries", "setLocale", "resetSeries", "zoomX", "toggleDataPointSelection", "dataURI", "exportToCSV", "addXaxisAnnotation", "addYaxisAnnotation", "addPointAnnotation", "clearAnnotations", "removeAnnotation", "paper", "destroy"], this.ctx.eventList = ["click", "mousedown", "mousemove", "mouseleave", "touchstart", "touchmove", "touchleave", "mouseup", "touchend"], this.ctx.animations = new ve(this.ctx), this.ctx.axes = new Hi(this.ctx), this.ctx.core = new ga(this.ctx.el, this.ctx), this.ctx.config = new Pe({}), this.ctx.data = new Ft(this.ctx), this.ctx.grid = new Rt(this.ctx), this.ctx.graphics = new X(this.ctx), this.ctx.coreUtils = new $(this.ctx), this.ctx.crosshairs = new nt(this.ctx), this.ctx.events = new Oi(this.ctx), this.ctx.exports = new He(this.ctx), this.ctx.fill = new ne(this.ctx), this.ctx.localization = new Di(this.ctx), this.ctx.options = new ue, this.ctx.responsive = new Ni(this.ctx), this.ctx.series = new re(this.ctx), this.ctx.theme = new Wi(this.ctx), this.ctx.formatters = new ze(this.ctx), this.ctx.titleSubtitle = new Bi(this.ctx), this.ctx.legend = new Dt(this.ctx), this.ctx.toolbar = new Ht(this.ctx), this.ctx.tooltip = new At(this.ctx), this.ctx.dimensions = new Ne(this.ctx), this.ctx.updateHelpers = new ua(this.ctx), this.ctx.zoomPanSelection = new qi(this.ctx), this.ctx.w.globals.tooltip = new At(this.ctx) } }]), p }(), Lt = function () { function p(e) { F(this, p), this.ctx = e, this.w = e.w } return R(p, [{ key: "clear", value: function (e) { var t = e.isUpdating; this.ctx.zoomPanSelection && this.ctx.zoomPanSelection.destroy(), this.ctx.toolbar && this.ctx.toolbar.destroy(), this.ctx.animations = null, this.ctx.axes = null, this.ctx.annotations = null, this.ctx.core = null, this.ctx.data = null, this.ctx.grid = null, this.ctx.series = null, this.ctx.responsive = null, this.ctx.theme = null, this.ctx.formatters = null, this.ctx.titleSubtitle = null, this.ctx.legend = null, this.ctx.dimensions = null, this.ctx.options = null, this.ctx.crosshairs = null, this.ctx.zoomPanSelection = null, this.ctx.updateHelpers = null, this.ctx.toolbar = null, this.ctx.localization = null, this.ctx.w.globals.tooltip = null, this.clearDomElements({ isUpdating: t }) } }, { key: "killSVG", value: function (e) { e.each(function (t, i) { this.removeClass("*"), this.off(), this.stop() }, !0), e.ungroup(), e.clear() } }, { key: "clearDomElements", value: function (e) { var t = this, i = e.isUpdating, a = this.w.globals.dom.Paper.node; a.parentNode && a.parentNode.parentNode && !i && (a.parentNode.parentNode.style.minHeight = "unset"); var s = this.w.globals.dom.baseEl; s && this.ctx.eventList.forEach(function (n) { s.removeEventListener(n, t.ctx.events.documentEvent) }); var r = this.w.globals.dom; if (this.ctx.el !== null) for (; this.ctx.el.firstChild;)this.ctx.el.removeChild(this.ctx.el.firstChild); this.killSVG(r.Paper), r.Paper.remove(), r.elWrap = null, r.elGraphical = null, r.elLegendWrap = null, r.elLegendForeign = null, r.baseEl = null, r.elGridRect = null, r.elGridRectMask = null, r.elGridRectMarkerMask = null, r.elForecastMask = null, r.elNonForecastMask = null, r.elDefs = null } }]), p }(), it = new WeakMap, fa = function () { - function p(e, t) { F(this, p), this.opts = t, this.ctx = this, this.w = new Ri(t).init(), this.el = e, this.w.globals.cuid = P.randomId(), this.w.globals.chartID = this.w.config.chart.id ? P.escapeString(this.w.config.chart.id) : this.w.globals.cuid, new Ct(this).initModules(), this.create = P.bind(this.create, this), this.windowResizeHandler = this._windowResizeHandler.bind(this), this.parentResizeHandler = this._parentResizeCallback.bind(this) } return R(p, [{ - key: "render", value: function () { - var e = this; return new Promise(function (t, i) { - if (e.el !== null) { - Apex._chartInstances === void 0 && (Apex._chartInstances = []), e.w.config.chart.id && Apex._chartInstances.push({ id: e.w.globals.chartID, group: e.w.config.chart.group, chart: e }), e.setLocale(e.w.config.chart.defaultLocale); var a = e.w.config.chart.events.beforeMount; typeof a == "function" && a(e, e.w), e.events.fireEvent("beforeMount", [e, e.w]), window.addEventListener("resize", e.windowResizeHandler), function (g, f) { var x = !1; if (g.nodeType !== Node.DOCUMENT_FRAGMENT_NODE) { var b = g.getBoundingClientRect(); g.style.display !== "none" && b.width !== 0 || (x = !0) } var v = new ResizeObserver(function (y) { x && f.call(g, y), x = !0 }); g.nodeType === Node.DOCUMENT_FRAGMENT_NODE ? Array.from(g.children).forEach(function (y) { return v.observe(y) }) : v.observe(g), it.set(f, v) }(e.el.parentNode, e.parentResizeHandler); var s = e.el.getRootNode && e.el.getRootNode(), r = P.is("ShadowRoot", s), n = e.el.ownerDocument, o = r ? s.getElementById("apexcharts-css") : n.getElementById("apexcharts-css"); if (!o) { - var h; (o = document.createElement("style")).id = "apexcharts-css", o.textContent = `@keyframes opaque { +`),this.t.download&&r.push({el:this.elMenuIcon,icon:typeof this.t.download=="string"?this.t.download:'',title:this.localeValues.menu,class:"apexcharts-menu-icon"});for(var h=0;hthis.wheelDelay&&(this.executeMouseWheelZoom(i),s.globals.lastWheelExecution=r),this.debounceTimer&&clearTimeout(this.debounceTimer),this.debounceTimer=setTimeout(function(){r-s.globals.lastWheelExecution>a.wheelDelay&&(a.executeMouseWheelZoom(i),s.globals.lastWheelExecution=r)},this.debounceDelay)}},{key:"executeMouseWheelZoom",value:function(i){var a,s=this.w;this.minX=s.globals.isRangeBar?s.globals.minY:s.globals.minX,this.maxX=s.globals.isRangeBar?s.globals.maxY:s.globals.maxX;var r=(a=this.gridRect)===null||a===void 0?void 0:a.getBoundingClientRect();if(r){var n,o,h,c=(i.clientX-r.left)/r.width,d=this.minX,g=this.maxX,f=g-d;if(i.deltaY<0){var x=d+c*f;o=x-(n=.5*f)/2,h=x+n/2}else o=d-(n=1.5*f)/2,h=g+n/2;o=Math.max(o,s.globals.initialMinX),h=Math.min(h,s.globals.initialMaxX);var b=.01*(s.globals.initialMaxX-s.globals.initialMinX);if(h-o0&&a.height>0&&this.slDraggableRect.selectize({points:"l, r",pointSize:8,pointType:"rect"}).resize({constraint:{minX:0,minY:0,maxX:i.globals.gridWidth,maxY:i.globals.gridHeight}}).on("resizing",this.selectionDragging.bind(this,"resizing"))}}},{key:"preselectedSelection",value:function(){var i=this.w,a=this.xyRatios;if(!i.globals.zoomEnabled){if(i.globals.selection!==void 0&&i.globals.selection!==null)this.drawSelectionRect(i.globals.selection);else if(i.config.chart.selection.xaxis.min!==void 0&&i.config.chart.selection.xaxis.max!==void 0){var s=(i.config.chart.selection.xaxis.min-i.globals.minX)/a.xRatio,r=i.globals.gridWidth-(i.globals.maxX-i.config.chart.selection.xaxis.max)/a.xRatio-s;i.globals.isRangeBar&&(s=(i.config.chart.selection.xaxis.min-i.globals.yAxisScale[0].niceMin)/a.invertedYRatio,r=(i.config.chart.selection.xaxis.max-i.config.chart.selection.xaxis.min)/a.invertedYRatio);var n={x:s,y:0,width:r,height:i.globals.gridHeight,translateX:0,translateY:0,selectionEnabled:!0};this.drawSelectionRect(n),this.makeSelectionRectDraggable(),typeof i.config.chart.events.selection=="function"&&i.config.chart.events.selection(this.ctx,{xaxis:{min:i.config.chart.selection.xaxis.min,max:i.config.chart.selection.xaxis.max},yaxis:{}})}}}},{key:"drawSelectionRect",value:function(i){var a=i.x,s=i.y,r=i.width,n=i.height,o=i.translateX,h=o===void 0?0:o,c=i.translateY,d=c===void 0?0:c,g=this.w,f=this.zoomRect,x=this.selectionRect;if(this.dragged||g.globals.selection!==null){var b={transform:"translate("+h+", "+d+")"};g.globals.zoomEnabled&&this.dragged&&(r<0&&(r=1),f.attr({x:a,y:s,width:r,height:n,fill:g.config.chart.zoom.zoomedArea.fill.color,"fill-opacity":g.config.chart.zoom.zoomedArea.fill.opacity,stroke:g.config.chart.zoom.zoomedArea.stroke.color,"stroke-width":g.config.chart.zoom.zoomedArea.stroke.width,"stroke-opacity":g.config.chart.zoom.zoomedArea.stroke.opacity}),X.setAttrs(f.node,b)),g.globals.selectionEnabled&&(x.attr({x:a,y:s,width:r>0?r:0,height:n>0?n:0,fill:g.config.chart.selection.fill.color,"fill-opacity":g.config.chart.selection.fill.opacity,stroke:g.config.chart.selection.stroke.color,"stroke-width":g.config.chart.selection.stroke.width,"stroke-dasharray":g.config.chart.selection.stroke.dashArray,"stroke-opacity":g.config.chart.selection.stroke.opacity}),X.setAttrs(x.node,b))}}},{key:"hideSelectionRect",value:function(i){i&&i.attr({x:0,y:0,width:0,height:0})}},{key:"selectionDrawing",value:function(i){var a=i.context,s=i.zoomtype,r=this.w,n=a,o=this.gridRect.getBoundingClientRect(),h=n.startX-1,c=n.startY,d=!1,g=!1,f=n.clientX-o.left-h,x=n.clientY-o.top-c,b={};return Math.abs(f+h)>r.globals.gridWidth?f=r.globals.gridWidth-h:n.clientX-o.left<0&&(f=h),h>n.clientX-o.left&&(d=!0,f=Math.abs(f)),c>n.clientY-o.top&&(g=!0,x=Math.abs(x)),b=s==="x"?{x:d?h-f:h,y:0,width:f,height:r.globals.gridHeight}:s==="y"?{x:0,y:g?c-x:c,width:r.globals.gridWidth,height:x}:{x:d?h-f:h,y:g?c-x:c,width:f,height:x},n.drawSelectionRect(b),n.selectionDragging("resizing"),b}},{key:"selectionDragging",value:function(i,a){var s=this,r=this.w,n=this.xyRatios,o=this.selectionRect,h=0;i==="resizing"&&(h=30);var c=function(g){return parseFloat(o.node.getAttribute(g))},d={x:c("x"),y:c("y"),width:c("width"),height:c("height")};r.globals.selection=d,typeof r.config.chart.events.selection=="function"&&r.globals.selectionEnabled&&(clearTimeout(this.w.globals.selectionResizeTimer),this.w.globals.selectionResizeTimer=window.setTimeout(function(){var g,f,x,b,v=s.gridRect.getBoundingClientRect(),y=o.node.getBoundingClientRect();r.globals.isRangeBar?(g=r.globals.yAxisScale[0].niceMin+(y.left-v.left)*n.invertedYRatio,f=r.globals.yAxisScale[0].niceMin+(y.right-v.left)*n.invertedYRatio,x=0,b=1):(g=r.globals.xAxisScale.niceMin+(y.left-v.left)*n.xRatio,f=r.globals.xAxisScale.niceMin+(y.right-v.left)*n.xRatio,x=r.globals.yAxisScale[0].niceMin+(v.bottom-y.bottom)*n.yRatio[0],b=r.globals.yAxisScale[0].niceMax-(y.top-v.top)*n.yRatio[0]);var w={xaxis:{min:g,max:f},yaxis:{min:x,max:b}};r.config.chart.events.selection(s.ctx,w),r.config.chart.brush.enabled&&r.config.chart.events.brushScrolled!==void 0&&r.config.chart.events.brushScrolled(s.ctx,w)},h))}},{key:"selectionDrawn",value:function(i){var a=i.context,s=i.zoomtype,r=this.w,n=a,o=this.xyRatios,h=this.ctx.toolbar;if(n.startX>n.endX){var c=n.startX;n.startX=n.endX,n.endX=c}if(n.startY>n.endY){var d=n.startY;n.startY=n.endY,n.endY=d}var g=void 0,f=void 0;r.globals.isRangeBar?(g=r.globals.yAxisScale[0].niceMin+n.startX*o.invertedYRatio,f=r.globals.yAxisScale[0].niceMin+n.endX*o.invertedYRatio):(g=r.globals.xAxisScale.niceMin+n.startX*o.xRatio,f=r.globals.xAxisScale.niceMin+n.endX*o.xRatio);var x=[],b=[];if(r.config.yaxis.forEach(function(A,k){var S=r.globals.seriesYAxisMap[k][0];x.push(r.globals.yAxisScale[k].niceMax-o.yRatio[S]*n.startY),b.push(r.globals.yAxisScale[k].niceMax-o.yRatio[S]*n.endY)}),n.dragged&&(n.dragX>10||n.dragY>10)&&g!==f){if(r.globals.zoomEnabled){var v=P.clone(r.globals.initialConfig.yaxis),y=P.clone(r.globals.initialConfig.xaxis);if(r.globals.zoomed=!0,r.config.xaxis.convertedCatToNumeric&&(g=Math.floor(g),f=Math.floor(f),g<1&&(g=1,f=r.globals.dataPoints),f-g<2&&(f=g+1)),s!=="xy"&&s!=="x"||(y={min:g,max:f}),s!=="xy"&&s!=="y"||v.forEach(function(A,k){v[k].min=b[k],v[k].max=x[k]}),h){var w=h.getBeforeZoomRange(y,v);w&&(y=w.xaxis?w.xaxis:y,v=w.yaxis?w.yaxis:v)}var l={xaxis:y};r.config.chart.group||(l.yaxis=v),n.ctx.updateHelpers._updateOptions(l,!1,n.w.config.chart.animations.dynamicAnimation.enabled),typeof r.config.chart.events.zoomed=="function"&&h.zoomCallback(y,v)}else if(r.globals.selectionEnabled){var u,m=null;u={min:g,max:f},s!=="xy"&&s!=="y"||(m=P.clone(r.config.yaxis)).forEach(function(A,k){m[k].min=b[k],m[k].max=x[k]}),r.globals.selection=n.selection,typeof r.config.chart.events.selection=="function"&&r.config.chart.events.selection(n.ctx,{xaxis:u,yaxis:m})}}}},{key:"panDragging",value:function(i){var a=i.context,s=this.w,r=a;if(s.globals.lastClientPosition.x!==void 0){var n=s.globals.lastClientPosition.x-r.clientX,o=s.globals.lastClientPosition.y-r.clientY;Math.abs(n)>Math.abs(o)&&n>0?this.moveDirection="left":Math.abs(n)>Math.abs(o)&&n<0?this.moveDirection="right":Math.abs(o)>Math.abs(n)&&o>0?this.moveDirection="up":Math.abs(o)>Math.abs(n)&&o<0&&(this.moveDirection="down")}s.globals.lastClientPosition={x:r.clientX,y:r.clientY};var h=s.globals.isRangeBar?s.globals.minY:s.globals.minX,c=s.globals.isRangeBar?s.globals.maxY:s.globals.maxX;s.config.xaxis.convertedCatToNumeric||r.panScrolled(h,c)}},{key:"delayedPanScrolled",value:function(){var i=this.w,a=i.globals.minX,s=i.globals.maxX,r=(i.globals.maxX-i.globals.minX)/2;this.moveDirection==="left"?(a=i.globals.minX+r,s=i.globals.maxX+r):this.moveDirection==="right"&&(a=i.globals.minX-r,s=i.globals.maxX-r),a=Math.floor(a),s=Math.floor(s),this.updateScrolledChart({xaxis:{min:a,max:s}},a,s)}},{key:"panScrolled",value:function(i,a){var s=this.w,r=this.xyRatios,n=P.clone(s.globals.initialConfig.yaxis),o=r.xRatio,h=s.globals.minX,c=s.globals.maxX;s.globals.isRangeBar&&(o=r.invertedYRatio,h=s.globals.minY,c=s.globals.maxY),this.moveDirection==="left"?(i=h+s.globals.gridWidth/15*o,a=c+s.globals.gridWidth/15*o):this.moveDirection==="right"&&(i=h-s.globals.gridWidth/15*o,a=c-s.globals.gridWidth/15*o),s.globals.isRangeBar||(is.globals.initialMaxX)&&(i=h,a=c);var d={xaxis:{min:i,max:a}};s.config.chart.group||(d.yaxis=n),this.updateScrolledChart(d,i,a)}},{key:"updateScrolledChart",value:function(i,a,s){var r=this.w;this.ctx.updateHelpers._updateOptions(i,!1,!1),typeof r.config.chart.events.scrolled=="function"&&r.config.chart.events.scrolled(this.ctx,{xaxis:{min:a,max:s}})}}]),t}(),Nt=function(){function p(e){F(this,p),this.w=e.w,this.ttCtx=e,this.ctx=e.ctx}return R(p,[{key:"getNearestValues",value:function(e){var t=e.hoverArea,i=e.elGrid,a=e.clientX,s=e.clientY,r=this.w,n=i.getBoundingClientRect(),o=n.width,h=n.height,c=o/(r.globals.dataPoints-1),d=h/r.globals.dataPoints,g=this.hasBars();!r.globals.comboCharts&&!g||r.config.xaxis.convertedCatToNumeric||(c=o/r.globals.dataPoints);var f=a-n.left-r.globals.barPadForNumericAxis,x=s-n.top;f<0||x<0||f>o||x>h?(t.classList.remove("hovering-zoom"),t.classList.remove("hovering-pan")):r.globals.zoomEnabled?(t.classList.remove("hovering-pan"),t.classList.add("hovering-zoom")):r.globals.panEnabled&&(t.classList.remove("hovering-zoom"),t.classList.add("hovering-pan"));var b=Math.round(f/c),v=Math.floor(x/d);g&&!r.config.xaxis.convertedCatToNumeric&&(b=Math.ceil(f/c),b-=1);var y=null,w=null,l=r.globals.seriesXvalues.map(function(S){return S.filter(function(L){return P.isNumber(L)})}),u=r.globals.seriesYvalues.map(function(S){return S.filter(function(L){return P.isNumber(L)})});if(r.globals.isXNumeric){var m=this.ttCtx.getElGrid().getBoundingClientRect(),A=f*(m.width/o),k=x*(m.height/h);y=(w=this.closestInMultiArray(A,k,l,u)).index,b=w.j,y!==null&&(l=r.globals.seriesXvalues[y],b=(w=this.closestInArray(A,l)).index)}return r.globals.capturedSeriesIndex=y===null?-1:y,(!b||b<1)&&(b=0),r.globals.isBarHorizontal?r.globals.capturedDataPointIndex=v:r.globals.capturedDataPointIndex=b,{capturedSeries:y,j:r.globals.isBarHorizontal?v:b,hoverX:f,hoverY:x}}},{key:"closestInMultiArray",value:function(e,t,i,a){var s=this.w,r=0,n=null,o=-1;s.globals.series.length>1?r=this.getFirstActiveXArray(i):n=0;var h=i[r][0],c=Math.abs(e-h);if(i.forEach(function(f){f.forEach(function(x,b){var v=Math.abs(e-x);v<=c&&(c=v,o=b)})}),o!==-1){var d=a[r][o],g=Math.abs(t-d);n=r,a.forEach(function(f,x){var b=Math.abs(t-f[o]);b<=g&&(g=b,n=x)})}return{index:n,j:o}}},{key:"getFirstActiveXArray",value:function(e){for(var t=this.w,i=0,a=e.map(function(r,n){return r.length>0?n:-1}),s=0;s0)for(var a=0;a *")):this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-series-markers-wrap > *")}},{key:"getAllMarkers",value:function(){var e=this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-series-markers-wrap");(e=te(e)).sort(function(i,a){var s=Number(i.getAttribute("data:realIndex")),r=Number(a.getAttribute("data:realIndex"));return rs?-1:0});var t=[];return e.forEach(function(i){t.push(i.querySelector(".apexcharts-marker"))}),t}},{key:"hasMarkers",value:function(e){return this.getElMarkers(e).length>0}},{key:"getPathFromPoint",value:function(e,t){var i=Number(e.getAttribute("cx")),a=Number(e.getAttribute("cy")),s=e.getAttribute("shape");return new X(this.ctx).getMarkerPath(i,a,s,t)}},{key:"getElBars",value:function(){return this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-bar-series, .apexcharts-candlestick-series, .apexcharts-boxPlot-series, .apexcharts-rangebar-series")}},{key:"hasBars",value:function(){return this.getElBars().length>0}},{key:"getHoverMarkerSize",value:function(e){var t=this.w,i=t.config.markers.hover.size;return i===void 0&&(i=t.globals.markers.size[e]+t.config.markers.hover.sizeOffset),i}},{key:"toggleAllTooltipSeriesGroups",value:function(e){var t=this.w,i=this.ttCtx;i.allTooltipSeriesGroups.length===0&&(i.allTooltipSeriesGroups=t.globals.dom.baseEl.querySelectorAll(".apexcharts-tooltip-series-group"));for(var a=i.allTooltipSeriesGroups,s=0;s
').concat(C.attrs.name,""),L+="
".concat(C.val,"
")}),l.innerHTML=S+"",u.innerHTML=L+""};n?h.globals.seriesGoals[t][i]&&Array.isArray(h.globals.seriesGoals[t][i])?m():(l.innerHTML="",u.innerHTML=""):m()}else l.innerHTML="",u.innerHTML="";if(b!==null&&(a[t].querySelector(".apexcharts-tooltip-text-z-label").innerHTML=h.config.tooltip.z.title,a[t].querySelector(".apexcharts-tooltip-text-z-value").innerHTML=b!==void 0?b:""),n&&v[0]){if(h.config.tooltip.hideEmptySeries){var A=a[t].querySelector(".apexcharts-tooltip-marker"),k=a[t].querySelector(".apexcharts-tooltip-text");parseFloat(d)==0?(A.style.display="none",k.style.display="none"):(A.style.display="block",k.style.display="block")}d==null||h.globals.ancillaryCollapsedSeriesIndices.indexOf(t)>-1||h.globals.collapsedSeriesIndices.indexOf(t)>-1||Array.isArray(c.tConfig.enabledOnSeries)&&c.tConfig.enabledOnSeries.indexOf(t)===-1?v[0].parentNode.style.display="none":v[0].parentNode.style.display=h.config.tooltip.items.display}else Array.isArray(c.tConfig.enabledOnSeries)&&c.tConfig.enabledOnSeries.indexOf(t)===-1&&(v[0].parentNode.style.display="none")}},{key:"toggleActiveInactiveSeries",value:function(e,t){var i=this.w;if(e)this.tooltipUtil.toggleAllTooltipSeriesGroups("enable");else{this.tooltipUtil.toggleAllTooltipSeriesGroups("disable");var a=i.globals.dom.baseEl.querySelector(".apexcharts-tooltip-series-group-".concat(t));a&&(a.classList.add("apexcharts-active"),a.style.display=i.config.tooltip.items.display)}}},{key:"getValuesToPrint",value:function(e){var t=e.i,i=e.j,a=this.w,s=this.ctx.series.filteredSeriesX(),r="",n="",o=null,h=null,c={series:a.globals.series,seriesIndex:t,dataPointIndex:i,w:a},d=a.globals.ttZFormatter;i===null?h=a.globals.series[t]:a.globals.isXNumeric&&a.config.chart.type!=="treemap"?(r=s[t][i],s[t].length===0&&(r=s[this.tooltipUtil.getFirstActiveXArray(s)][i])):r=a.globals.labels[i]!==void 0?a.globals.labels[i]:"";var g=r;return a.globals.isXNumeric&&a.config.xaxis.type==="datetime"?r=new ze(this.ctx).xLabelFormat(a.globals.ttKeyFormatter,g,g,{i:void 0,dateFormatter:new K(this.ctx).formatDate,w:this.w}):r=a.globals.isBarHorizontal?a.globals.yLabelFormatters[0](g,c):a.globals.xLabelFormatter(g,c),a.config.tooltip.x.formatter!==void 0&&(r=a.globals.ttKeyFormatter(g,c)),a.globals.seriesZ.length>0&&a.globals.seriesZ[t].length>0&&(o=d(a.globals.seriesZ[t][i],a)),n=typeof a.config.xaxis.tooltip.formatter=="function"?a.globals.xaxisTooltipFormatter(g,c):r,{val:Array.isArray(h)?h.join(" "):h,xVal:Array.isArray(r)?r.join(" "):r,xAxisTTVal:Array.isArray(n)?n.join(" "):n,zVal:o}}},{key:"handleCustomTooltip",value:function(e){var t=e.i,i=e.j,a=e.y1,s=e.y2,r=e.w,n=this.ttCtx.getElTooltip(),o=r.config.tooltip.custom;Array.isArray(o)&&o[t]&&(o=o[t]),n.innerHTML=o({ctx:this.ctx,series:r.globals.series,seriesIndex:t,dataPointIndex:i,y1:a,y2:s,w:r})}}]),p}(),Wt=function(){function p(e){F(this,p),this.ttCtx=e,this.ctx=e.ctx,this.w=e.w}return R(p,[{key:"moveXCrosshairs",value:function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null,i=this.ttCtx,a=this.w,s=i.getElXCrosshairs(),r=e-i.xcrosshairsWidth/2,n=a.globals.labels.slice().length;if(t!==null&&(r=a.globals.gridWidth/n*t),s===null||a.globals.isBarHorizontal||(s.setAttribute("x",r),s.setAttribute("x1",r),s.setAttribute("x2",r),s.setAttribute("y2",a.globals.gridHeight),s.classList.add("apexcharts-active")),r<0&&(r=0),r>a.globals.gridWidth&&(r=a.globals.gridWidth),i.isXAxisTooltipEnabled){var o=r;a.config.xaxis.crosshairs.width!=="tickWidth"&&a.config.xaxis.crosshairs.width!=="barWidth"||(o=r+i.xcrosshairsWidth/2),this.moveXAxisTooltip(o)}}},{key:"moveYCrosshairs",value:function(e){var t=this.ttCtx;t.ycrosshairs!==null&&X.setAttrs(t.ycrosshairs,{y1:e,y2:e}),t.ycrosshairsHidden!==null&&X.setAttrs(t.ycrosshairsHidden,{y1:e,y2:e})}},{key:"moveXAxisTooltip",value:function(e){var t=this.w,i=this.ttCtx;if(i.xaxisTooltip!==null&&i.xcrosshairsWidth!==0){i.xaxisTooltip.classList.add("apexcharts-active");var a=i.xaxisOffY+t.config.xaxis.tooltip.offsetY+t.globals.translateY+1+t.config.xaxis.offsetY;if(e-=i.xaxisTooltip.getBoundingClientRect().width/2,!isNaN(e)){e+=t.globals.translateX;var s;s=new X(this.ctx).getTextRects(i.xaxisTooltipText.innerHTML),i.xaxisTooltipText.style.minWidth=s.width+"px",i.xaxisTooltip.style.left=e+"px",i.xaxisTooltip.style.top=a+"px"}}}},{key:"moveYAxisTooltip",value:function(e){var t=this.w,i=this.ttCtx;i.yaxisTTEls===null&&(i.yaxisTTEls=t.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxistooltip"));var a=parseInt(i.ycrosshairsHidden.getAttribute("y1"),10),s=t.globals.translateY+a,r=i.yaxisTTEls[e].getBoundingClientRect().height,n=t.globals.translateYAxisX[e]-2;t.config.yaxis[e].opposite&&(n-=26),s-=r/2,t.globals.ignoreYAxisIndexes.indexOf(e)===-1?(i.yaxisTTEls[e].classList.add("apexcharts-active"),i.yaxisTTEls[e].style.top=s+"px",i.yaxisTTEls[e].style.left=n+t.config.yaxis[e].tooltip.offsetX+"px"):i.yaxisTTEls[e].classList.remove("apexcharts-active")}},{key:"moveTooltip",value:function(e,t){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:null,a=this.w,s=this.ttCtx,r=s.getElTooltip(),n=s.tooltipRect,o=i!==null?parseFloat(i):1,h=parseFloat(e)+o+5,c=parseFloat(t)+o/2;if(h>a.globals.gridWidth/2&&(h=h-n.ttWidth-o-10),h>a.globals.gridWidth-n.ttWidth-10&&(h=a.globals.gridWidth-n.ttWidth),h<-20&&(h=-20),a.config.tooltip.followCursor){var d=s.getElGrid().getBoundingClientRect();(h=s.e.clientX-d.left)>a.globals.gridWidth/2&&(h-=s.tooltipRect.ttWidth),(c=s.e.clientY+a.globals.translateY-d.top)>a.globals.gridHeight/2&&(c-=s.tooltipRect.ttHeight)}else a.globals.isBarHorizontal||n.ttHeight/2+c>a.globals.gridHeight&&(c=a.globals.gridHeight-n.ttHeight+a.globals.translateY);isNaN(h)||(h+=a.globals.translateX,r.style.left=h+"px",r.style.top=c+"px")}},{key:"moveMarkers",value:function(e,t){var i=this.w,a=this.ttCtx;if(i.globals.markers.size[e]>0)for(var s=i.globals.dom.baseEl.querySelectorAll(" .apexcharts-series[data\\:realIndex='".concat(e,"'] .apexcharts-marker")),r=0;r0){var x=f.getAttribute("shape"),b=h.getMarkerPath(s,r,x,1.5*d);f.setAttribute("d",b)}this.moveXCrosshairs(s),o.fixedTooltip||this.moveTooltip(s,r,d)}}},{key:"moveDynamicPointsOnHover",value:function(e){var t,i=this.ttCtx,a=i.w,s=0,r=0,n=a.globals.pointsArray,o=new re(this.ctx),h=new X(this.ctx);t=o.getActiveConfigSeriesIndex("asc",["line","area","scatter","bubble"]);var c=i.tooltipUtil.getHoverMarkerSize(t);n[t]&&(s=n[t][e][0],r=n[t][e][1]);var d=i.tooltipUtil.getAllMarkers();if(d!==null)for(var g=0;g0){var w=h.getMarkerPath(s,x,v,c);d[g].setAttribute("d",w)}else d[g].setAttribute("d","")}}this.moveXCrosshairs(s),i.fixedTooltip||this.moveTooltip(s,r||a.globals.gridHeight,c)}},{key:"moveStickyTooltipOverBars",value:function(e,t){var i=this.w,a=this.ttCtx,s=i.globals.columnSeries?i.globals.columnSeries.length:i.globals.series.length,r=s>=2&&s%2==0?Math.floor(s/2):Math.floor(s/2)+1;i.globals.isBarHorizontal&&(r=new re(this.ctx).getActiveConfigSeriesIndex("desc")+1);var n=i.globals.dom.baseEl.querySelector(".apexcharts-bar-series .apexcharts-series[rel='".concat(r,"'] path[j='").concat(e,"'], .apexcharts-candlestick-series .apexcharts-series[rel='").concat(r,"'] path[j='").concat(e,"'], .apexcharts-boxPlot-series .apexcharts-series[rel='").concat(r,"'] path[j='").concat(e,"'], .apexcharts-rangebar-series .apexcharts-series[rel='").concat(r,"'] path[j='").concat(e,"']"));n||typeof t!="number"||(n=i.globals.dom.baseEl.querySelector(".apexcharts-bar-series .apexcharts-series[data\\:realIndex='".concat(t,"'] path[j='").concat(e,`'], + .apexcharts-candlestick-series .apexcharts-series[data\\:realIndex='`).concat(t,"'] path[j='").concat(e,`'], + .apexcharts-boxPlot-series .apexcharts-series[data\\:realIndex='`).concat(t,"'] path[j='").concat(e,`'], + .apexcharts-rangebar-series .apexcharts-series[data\\:realIndex='`).concat(t,"'] path[j='").concat(e,"']")));var o=n?parseFloat(n.getAttribute("cx")):0,h=n?parseFloat(n.getAttribute("cy")):0,c=n?parseFloat(n.getAttribute("barWidth")):0,d=a.getElGrid().getBoundingClientRect(),g=n&&(n.classList.contains("apexcharts-candlestick-area")||n.classList.contains("apexcharts-boxPlot-area"));i.globals.isXNumeric?(n&&!g&&(o-=s%2!=0?c/2:0),n&&g&&i.globals.comboCharts&&(o-=c/2)):i.globals.isBarHorizontal||(o=a.xAxisTicksPositions[e-1]+a.dataPointsDividedWidth/2,isNaN(o)&&(o=a.xAxisTicksPositions[e]-a.dataPointsDividedWidth/2)),i.globals.isBarHorizontal?h-=a.tooltipRect.ttHeight:i.config.tooltip.followCursor?h=a.e.clientY-d.top-a.tooltipRect.ttHeight/2:h+a.tooltipRect.ttHeight+15>i.globals.gridHeight&&(h=i.globals.gridHeight),i.globals.isBarHorizontal||this.moveXCrosshairs(o),a.fixedTooltip||this.moveTooltip(o,h||i.globals.gridHeight)}}]),p}(),$i=function(){function p(e){F(this,p),this.w=e.w,this.ttCtx=e,this.ctx=e.ctx,this.tooltipPosition=new Wt(e)}return R(p,[{key:"drawDynamicPoints",value:function(){var e=this.w,t=new X(this.ctx),i=new ye(this.ctx),a=e.globals.dom.baseEl.querySelectorAll(".apexcharts-series");a=te(a),e.config.chart.stacked&&a.sort(function(d,g){return parseFloat(d.getAttribute("data:realIndex"))-parseFloat(g.getAttribute("data:realIndex"))});for(var s=0;s2&&arguments[2]!==void 0?arguments[2]:null,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:null,s=this.w;s.config.chart.type!=="bubble"&&this.newPointSize(e,t);var r=t.getAttribute("cx"),n=t.getAttribute("cy");if(i!==null&&a!==null&&(r=i,n=a),this.tooltipPosition.moveXCrosshairs(r),!this.fixedTooltip){if(s.config.chart.type==="radar"){var o=this.ttCtx.getElGrid().getBoundingClientRect();r=this.ttCtx.e.clientX-o.left}this.tooltipPosition.moveTooltip(r,n,s.config.markers.hover.size)}}},{key:"enlargePoints",value:function(e){for(var t=this.w,i=this,a=this.ttCtx,s=e,r=t.globals.dom.baseEl.querySelectorAll(".apexcharts-series:not(.apexcharts-series-collapsed) .apexcharts-marker"),n=t.config.markers.hover.size,o=0;o=0){var a=this.ttCtx.tooltipUtil.getPathFromPoint(e[t],i);e[t].setAttribute("d",a)}else e[t].setAttribute("d","M0,0")}}}]),p}(),Ji=function(){function p(e){F(this,p),this.w=e.w;var t=this.w;this.ttCtx=e,this.isVerticalGroupedRangeBar=!t.globals.isBarHorizontal&&t.config.chart.type==="rangeBar"&&t.config.plotOptions.bar.rangeBarGroupRows}return R(p,[{key:"getAttr",value:function(e,t){return parseFloat(e.target.getAttribute(t))}},{key:"handleHeatTreeTooltip",value:function(e){var t=e.e,i=e.opt,a=e.x,s=e.y,r=e.type,n=this.ttCtx,o=this.w;if(t.target.classList.contains("apexcharts-".concat(r,"-rect"))){var h=this.getAttr(t,"i"),c=this.getAttr(t,"j"),d=this.getAttr(t,"cx"),g=this.getAttr(t,"cy"),f=this.getAttr(t,"width"),x=this.getAttr(t,"height");if(n.tooltipLabels.drawSeriesTexts({ttItems:i.ttItems,i:h,j:c,shared:!1,e:t}),o.globals.capturedSeriesIndex=h,o.globals.capturedDataPointIndex=c,a=d+n.tooltipRect.ttWidth/2+f,s=g+n.tooltipRect.ttHeight/2-x/2,n.tooltipPosition.moveXCrosshairs(d+f/2),a>o.globals.gridWidth/2&&(a=d-n.tooltipRect.ttWidth/2+f),n.w.config.tooltip.followCursor){var b=o.globals.dom.elWrap.getBoundingClientRect();a=o.globals.clientX-b.left-(a>o.globals.gridWidth/2?n.tooltipRect.ttWidth:0),s=o.globals.clientY-b.top-(s>o.globals.gridHeight/2?n.tooltipRect.ttHeight:0)}}return{x:a,y:s}}},{key:"handleMarkerTooltip",value:function(e){var t,i,a=e.e,s=e.opt,r=e.x,n=e.y,o=this.w,h=this.ttCtx;if(a.target.classList.contains("apexcharts-marker")){var c=parseInt(s.paths.getAttribute("cx"),10),d=parseInt(s.paths.getAttribute("cy"),10),g=parseFloat(s.paths.getAttribute("val"));if(i=parseInt(s.paths.getAttribute("rel"),10),t=parseInt(s.paths.parentNode.parentNode.parentNode.getAttribute("rel"),10)-1,h.intersect){var f=P.findAncestor(s.paths,"apexcharts-series");f&&(t=parseInt(f.getAttribute("data:realIndex"),10))}if(h.tooltipLabels.drawSeriesTexts({ttItems:s.ttItems,i:t,j:i,shared:!h.showOnIntersect&&o.config.tooltip.shared,e:a}),a.type==="mouseup"&&h.markerClick(a,t,i),o.globals.capturedSeriesIndex=t,o.globals.capturedDataPointIndex=i,r=c,n=d+o.globals.translateY-1.4*h.tooltipRect.ttHeight,h.w.config.tooltip.followCursor){var x=h.getElGrid().getBoundingClientRect();n=h.e.clientY+o.globals.translateY-x.top}g<0&&(n=d),h.marker.enlargeCurrentPoint(i,s.paths,r,n)}return{x:r,y:n}}},{key:"handleBarTooltip",value:function(e){var t,i,a=e.e,s=e.opt,r=this.w,n=this.ttCtx,o=n.getElTooltip(),h=0,c=0,d=0,g=this.getBarTooltipXY({e:a,opt:s});t=g.i;var f=g.j;r.globals.capturedSeriesIndex=t,r.globals.capturedDataPointIndex=f,r.globals.isBarHorizontal&&n.tooltipUtil.hasBars()||!r.config.tooltip.shared?(c=g.x,d=g.y,i=Array.isArray(r.config.stroke.width)?r.config.stroke.width[t]:r.config.stroke.width,h=c):r.globals.comboCharts||r.config.tooltip.shared||(h/=2),isNaN(d)&&(d=r.globals.svgHeight-n.tooltipRect.ttHeight);var x=parseInt(s.paths.parentNode.getAttribute("data:realIndex"),10);if(r.globals.isMultipleYAxis?r.config.yaxis[x]&&r.config.yaxis[x].reversed:r.config.yaxis[0].reversed,c+n.tooltipRect.ttWidth>r.globals.gridWidth?c-=n.tooltipRect.ttWidth:c<0&&(c=0),n.w.config.tooltip.followCursor){var b=n.getElGrid().getBoundingClientRect();d=n.e.clientY-b.top}n.tooltip===null&&(n.tooltip=r.globals.dom.baseEl.querySelector(".apexcharts-tooltip")),r.config.tooltip.shared||(r.globals.comboBarCount>0?n.tooltipPosition.moveXCrosshairs(h+i/2):n.tooltipPosition.moveXCrosshairs(h)),!n.fixedTooltip&&(!r.config.tooltip.shared||r.globals.isBarHorizontal&&n.tooltipUtil.hasBars())&&(d=d+r.globals.translateY-n.tooltipRect.ttHeight/2,o.style.left=c+r.globals.translateX+"px",o.style.top=d+"px")}},{key:"getBarTooltipXY",value:function(e){var t=this,i=e.e,a=e.opt,s=this.w,r=null,n=this.ttCtx,o=0,h=0,c=0,d=0,g=0,f=i.target.classList;if(f.contains("apexcharts-bar-area")||f.contains("apexcharts-candlestick-area")||f.contains("apexcharts-boxPlot-area")||f.contains("apexcharts-rangebar-area")){var x=i.target,b=x.getBoundingClientRect(),v=a.elGrid.getBoundingClientRect(),y=b.height;g=b.height;var w=b.width,l=parseInt(x.getAttribute("cx"),10),u=parseInt(x.getAttribute("cy"),10);d=parseFloat(x.getAttribute("barWidth"));var m=i.type==="touchmove"?i.touches[0].clientX:i.clientX;r=parseInt(x.getAttribute("j"),10),o=parseInt(x.parentNode.getAttribute("rel"),10)-1;var A=x.getAttribute("data-range-y1"),k=x.getAttribute("data-range-y2");s.globals.comboCharts&&(o=parseInt(x.parentNode.getAttribute("data:realIndex"),10));var S=function(C){return s.globals.isXNumeric?l-w/2:t.isVerticalGroupedRangeBar?l+w/2:l-n.dataPointsDividedWidth+w/2},L=function(){return u-n.dataPointsDividedHeight+y/2-n.tooltipRect.ttHeight/2};n.tooltipLabels.drawSeriesTexts({ttItems:a.ttItems,i:o,j:r,y1:A?parseInt(A,10):null,y2:k?parseInt(k,10):null,shared:!n.showOnIntersect&&s.config.tooltip.shared,e:i}),s.config.tooltip.followCursor?s.globals.isBarHorizontal?(h=m-v.left+15,c=L()):(h=S(),c=i.clientY-v.top-n.tooltipRect.ttHeight/2-15):s.globals.isBarHorizontal?((h=l)0&&i.setAttribute("width",t.xcrosshairsWidth)}},{key:"handleYCrosshair",value:function(){var e=this.w,t=this.ttCtx;t.ycrosshairs=e.globals.dom.baseEl.querySelector(".apexcharts-ycrosshairs"),t.ycrosshairsHidden=e.globals.dom.baseEl.querySelector(".apexcharts-ycrosshairs-hidden")}},{key:"drawYaxisTooltipText",value:function(e,t,i){var a=this.ttCtx,s=this.w,r=s.globals,n=r.seriesYAxisMap[e];if(a.yaxisTooltips[e]&&n.length>0){var o=r.yLabelFormatters[e],h=a.getElGrid().getBoundingClientRect(),c=n[0],d=0;i.yRatio.length>1&&(d=c);var g=(t-h.top)*i.yRatio[d],f=r.maxYArr[c]-r.minYArr[c],x=r.minYArr[c]+(f-g);s.config.yaxis[e].reversed&&(x=r.maxYArr[c]-(f-g)),a.tooltipPosition.moveYCrosshairs(t-h.top),a.yaxisTooltipText[e].innerHTML=o(x),a.tooltipPosition.moveYAxisTooltip(e)}}}]),p}(),At=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w;var t=this.w;this.tConfig=t.config.tooltip,this.tooltipUtil=new Nt(this),this.tooltipLabels=new Zi(this),this.tooltipPosition=new Wt(this),this.marker=new $i(this),this.intersect=new Ji(this),this.axesTooltip=new Ki(this),this.showOnIntersect=this.tConfig.intersect,this.showTooltipTitle=this.tConfig.x.show,this.fixedTooltip=this.tConfig.fixed.enabled,this.xaxisTooltip=null,this.yaxisTTEls=null,this.isBarShared=!t.globals.isBarHorizontal&&this.tConfig.shared,this.lastHoverTime=Date.now()}return R(p,[{key:"getElTooltip",value:function(e){return e||(e=this),e.w.globals.dom.baseEl?e.w.globals.dom.baseEl.querySelector(".apexcharts-tooltip"):null}},{key:"getElXCrosshairs",value:function(){return this.w.globals.dom.baseEl.querySelector(".apexcharts-xcrosshairs")}},{key:"getElGrid",value:function(){return this.w.globals.dom.baseEl.querySelector(".apexcharts-grid")}},{key:"drawTooltip",value:function(e){var t=this.w;this.xyRatios=e,this.isXAxisTooltipEnabled=t.config.xaxis.tooltip.enabled&&t.globals.axisCharts,this.yaxisTooltips=t.config.yaxis.map(function(r,n){return!!(r.show&&r.tooltip.enabled&&t.globals.axisCharts)}),this.allTooltipSeriesGroups=[],t.globals.axisCharts||(this.showTooltipTitle=!1);var i=document.createElement("div");if(i.classList.add("apexcharts-tooltip"),t.config.tooltip.cssClass&&i.classList.add(t.config.tooltip.cssClass),i.classList.add("apexcharts-theme-".concat(this.tConfig.theme)),t.globals.dom.elWrap.appendChild(i),t.globals.axisCharts){this.axesTooltip.drawXaxisTooltip(),this.axesTooltip.drawYaxisTooltip(),this.axesTooltip.setXCrosshairWidth(),this.axesTooltip.handleYCrosshair();var a=new Me(this.ctx);this.xAxisTicksPositions=a.getXAxisTicksPositions()}if(!t.globals.comboCharts&&!this.tConfig.intersect&&t.config.chart.type!=="rangeBar"||this.tConfig.shared||(this.showOnIntersect=!0),t.config.markers.size!==0&&t.globals.markers.largestSize!==0||this.marker.drawDynamicPoints(this),t.globals.collapsedSeries.length!==t.globals.series.length){this.dataPointsDividedHeight=t.globals.gridHeight/t.globals.dataPoints,this.dataPointsDividedWidth=t.globals.gridWidth/t.globals.dataPoints,this.showTooltipTitle&&(this.tooltipTitle=document.createElement("div"),this.tooltipTitle.classList.add("apexcharts-tooltip-title"),this.tooltipTitle.style.fontFamily=this.tConfig.style.fontFamily||t.config.chart.fontFamily,this.tooltipTitle.style.fontSize=this.tConfig.style.fontSize,i.appendChild(this.tooltipTitle));var s=t.globals.series.length;(t.globals.xyCharts||t.globals.comboCharts)&&this.tConfig.shared&&(s=this.showOnIntersect?1:t.globals.series.length),this.legendLabels=t.globals.dom.baseEl.querySelectorAll(".apexcharts-legend-text"),this.ttItems=this.createTTElements(s),this.addSVGEvents()}}},{key:"createTTElements",value:function(e){for(var t=this,i=this.w,a=[],s=this.getElTooltip(),r=function(o){var h=document.createElement("div");h.classList.add("apexcharts-tooltip-series-group","apexcharts-tooltip-series-group-".concat(o)),h.style.order=i.config.tooltip.inverseOrder?e-o:o+1;var c=document.createElement("span");c.classList.add("apexcharts-tooltip-marker"),c.style.backgroundColor=i.globals.colors[o],h.appendChild(c);var d=document.createElement("div");d.classList.add("apexcharts-tooltip-text"),d.style.fontFamily=t.tConfig.style.fontFamily||i.config.chart.fontFamily,d.style.fontSize=t.tConfig.style.fontSize,["y","goals","z"].forEach(function(g){var f=document.createElement("div");f.classList.add("apexcharts-tooltip-".concat(g,"-group"));var x=document.createElement("span");x.classList.add("apexcharts-tooltip-text-".concat(g,"-label")),f.appendChild(x);var b=document.createElement("span");b.classList.add("apexcharts-tooltip-text-".concat(g,"-value")),f.appendChild(b),d.appendChild(f)}),h.appendChild(d),s.appendChild(h),a.push(h)},n=0;n0&&this.addPathsEventListeners(x,d),this.tooltipUtil.hasBars()&&!this.tConfig.shared&&this.addDatapointEventsListeners(d)}}},{key:"drawFixedTooltipRect",value:function(){var e=this.w,t=this.getElTooltip(),i=t.getBoundingClientRect(),a=i.width+10,s=i.height+10,r=this.tConfig.fixed.offsetX,n=this.tConfig.fixed.offsetY,o=this.tConfig.fixed.position.toLowerCase();return o.indexOf("right")>-1&&(r=r+e.globals.svgWidth-a+10),o.indexOf("bottom")>-1&&(n=n+e.globals.svgHeight-s-10),t.style.left=r+"px",t.style.top=n+"px",{x:r,y:n,ttWidth:a,ttHeight:s}}},{key:"addDatapointEventsListeners",value:function(e){var t=this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-series-markers .apexcharts-marker, .apexcharts-bar-area, .apexcharts-candlestick-area, .apexcharts-boxPlot-area, .apexcharts-rangebar-area");this.addPathsEventListeners(t,e)}},{key:"addPathsEventListeners",value:function(e,t){for(var i=this,a=function(r){var n={paths:e[r],tooltipEl:t.tooltipEl,tooltipY:t.tooltipY,tooltipX:t.tooltipX,elGrid:t.elGrid,hoverArea:t.hoverArea,ttItems:t.ttItems};["mousemove","mouseup","touchmove","mouseout","touchend"].map(function(o){return e[r].addEventListener(o,i.onSeriesHover.bind(i,n),{capture:!1,passive:!0})})},s=0;s=100?this.seriesHover(e,t):(clearTimeout(this.seriesHoverTimeout),this.seriesHoverTimeout=setTimeout(function(){i.seriesHover(e,t)},100-a))}},{key:"seriesHover",value:function(e,t){var i=this;this.lastHoverTime=Date.now();var a=[],s=this.w;s.config.chart.group&&(a=this.ctx.getGroupedCharts()),s.globals.axisCharts&&(s.globals.minX===-1/0&&s.globals.maxX===1/0||s.globals.dataPoints===0)||(a.length?a.forEach(function(r){var n=i.getElTooltip(r),o={paths:e.paths,tooltipEl:n,tooltipY:e.tooltipY,tooltipX:e.tooltipX,elGrid:e.elGrid,hoverArea:e.hoverArea,ttItems:r.w.globals.tooltip.ttItems};r.w.globals.minX===i.w.globals.minX&&r.w.globals.maxX===i.w.globals.maxX&&r.w.globals.tooltip.seriesHoverByContext({chartCtx:r,ttCtx:r.w.globals.tooltip,opt:o,e:t})}):this.seriesHoverByContext({chartCtx:this.ctx,ttCtx:this.w.globals.tooltip,opt:e,e:t}))}},{key:"seriesHoverByContext",value:function(e){var t=e.chartCtx,i=e.ttCtx,a=e.opt,s=e.e,r=t.w,n=this.getElTooltip(t);n&&(i.tooltipRect={x:0,y:0,ttWidth:n.getBoundingClientRect().width,ttHeight:n.getBoundingClientRect().height},i.e=s,i.tooltipUtil.hasBars()&&!r.globals.comboCharts&&!i.isBarShared&&this.tConfig.onDatasetHover.highlightDataSeries&&new re(t).toggleSeriesOnHover(s,s.target.parentNode),i.fixedTooltip&&i.drawFixedTooltipRect(),r.globals.axisCharts?i.axisChartsTooltips({e:s,opt:a,tooltipRect:i.tooltipRect}):i.nonAxisChartsTooltips({e:s,opt:a,tooltipRect:i.tooltipRect}))}},{key:"axisChartsTooltips",value:function(e){var t,i,a=e.e,s=e.opt,r=this.w,n=s.elGrid.getBoundingClientRect(),o=a.type==="touchmove"?a.touches[0].clientX:a.clientX,h=a.type==="touchmove"?a.touches[0].clientY:a.clientY;if(this.clientY=h,this.clientX=o,r.globals.capturedSeriesIndex=-1,r.globals.capturedDataPointIndex=-1,hn.top+n.height)this.handleMouseOut(s);else{if(Array.isArray(this.tConfig.enabledOnSeries)&&!r.config.tooltip.shared){var c=parseInt(s.paths.getAttribute("index"),10);if(this.tConfig.enabledOnSeries.indexOf(c)<0)return void this.handleMouseOut(s)}var d=this.getElTooltip(),g=this.getElXCrosshairs(),f=[];r.config.chart.group&&(f=this.ctx.getSyncedCharts());var x=r.globals.xyCharts||r.config.chart.type==="bar"&&!r.globals.isBarHorizontal&&this.tooltipUtil.hasBars()&&this.tConfig.shared||r.globals.comboCharts&&this.tooltipUtil.hasBars();if(a.type==="mousemove"||a.type==="touchmove"||a.type==="mouseup"){if(r.globals.collapsedSeries.length+r.globals.ancillaryCollapsedSeries.length===r.globals.series.length)return;g!==null&&g.classList.add("apexcharts-active");var b=this.yaxisTooltips.filter(function(w){return w===!0});if(this.ycrosshairs!==null&&b.length&&this.ycrosshairs.classList.add("apexcharts-active"),x&&!this.showOnIntersect||f.length>1)this.handleStickyTooltip(a,o,h,s);else if(r.config.chart.type==="heatmap"||r.config.chart.type==="treemap"){var v=this.intersect.handleHeatTreeTooltip({e:a,opt:s,x:t,y:i,type:r.config.chart.type});t=v.x,i=v.y,d.style.left=t+"px",d.style.top=i+"px"}else this.tooltipUtil.hasBars()&&this.intersect.handleBarTooltip({e:a,opt:s}),this.tooltipUtil.hasMarkers()&&this.intersect.handleMarkerTooltip({e:a,opt:s,x:t,y:i});if(this.yaxisTooltips.length)for(var y=0;yh.width)this.handleMouseOut(a);else if(o!==null)this.handleStickyCapturedSeries(e,o,a,n);else if(this.tooltipUtil.isXoverlap(n)||s.globals.isBarHorizontal){var c=s.globals.series.findIndex(function(d,g){return!s.globals.collapsedSeriesIndices.includes(g)});this.create(e,this,c,n,a.ttItems)}}},{key:"handleStickyCapturedSeries",value:function(e,t,i,a){var s=this.w;if(!this.tConfig.shared&&s.globals.series[t][a]===null)return void this.handleMouseOut(i);if(s.globals.series[t][a]!==void 0)this.tConfig.shared&&this.tooltipUtil.isXoverlap(a)&&this.tooltipUtil.isInitialSeriesSameLen()?this.create(e,this,t,a,i.ttItems):this.create(e,this,t,a,i.ttItems,!1);else if(this.tooltipUtil.isXoverlap(a)){var r=s.globals.series.findIndex(function(n,o){return!s.globals.collapsedSeriesIndices.includes(o)});this.create(e,this,r,a,i.ttItems)}}},{key:"deactivateHoverFilter",value:function(){for(var e=this.w,t=new X(this.ctx),i=e.globals.dom.Paper.select(".apexcharts-bar-area"),a=0;a5&&arguments[5]!==void 0?arguments[5]:null,k=this.w,S=t;e.type==="mouseup"&&this.markerClick(e,i,a),A===null&&(A=this.tConfig.shared);var L=this.tooltipUtil.hasMarkers(i),C=this.tooltipUtil.getElBars();if(k.config.legend.tooltipHoverFormatter){var I=k.config.legend.tooltipHoverFormatter,z=Array.from(this.legendLabels);z.forEach(function(q){var Z=q.getAttribute("data:default-text");q.innerHTML=decodeURIComponent(Z)});for(var M=0;M0?S.marker.enlargePoints(a):S.tooltipPosition.moveDynamicPointsOnHover(a);else if(this.tooltipUtil.hasBars()&&(this.barSeriesHeight=this.tooltipUtil.getBarsHeight(C),this.barSeriesHeight>0)){var W=new X(this.ctx),N=k.globals.dom.Paper.select(".apexcharts-bar-area[j='".concat(a,"']"));this.deactivateHoverFilter(),this.tooltipPosition.moveStickyTooltipOverBars(a,i);for(var B=0;B0&&t.config.plotOptions.bar.hideZeroBarsWhenGrouped&&(f-=c*k)),A&&(f=f+g.height/2-w/2-2);var L=t.globals.series[i][a]<0,C=o;switch(this.barCtx.isReversed&&(C=o+(L?d:-d)),v.position){case"center":x=A?L?C-d/2+u:C+d/2-u:L?C-d/2+g.height/2+u:C+d/2+g.height/2-u;break;case"bottom":x=A?L?C-d+u:C+d-u:L?C-d+g.height+w+u:C+d-g.height/2+w-u;break;case"top":x=A?L?C+u:C-u:L?C-g.height/2-u:C+g.height+u}if(this.barCtx.lastActiveBarSerieIndex===s&&y.enabled){var I=new X(this.barCtx.ctx).getTextRects(this.getStackedTotalDataLabel({realIndex:s,j:a}),b.fontSize);r=L?C-I.height/2-u-y.offsetY+18:C+I.height+u+y.offsetY-18;var z=S;n=m+(t.globals.isXNumeric?-c*t.globals.barGroups.length/2:t.globals.barGroups.length*c/2-(t.globals.barGroups.length-1)*c-z)+y.offsetX}return t.config.chart.stacked||(x<0?x=0+w:x+g.height/3>t.globals.gridHeight&&(x=t.globals.gridHeight-w)),{bcx:h,bcy:o,dataLabelsX:f,dataLabelsY:x,totalDataLabelsX:n,totalDataLabelsY:r,totalDataLabelsAnchor:"middle"}}},{key:"calculateBarsDataLabelsPosition",value:function(e){var t=this.w,i=e.x,a=e.i,s=e.j,r=e.realIndex,n=e.bcy,o=e.barHeight,h=e.barWidth,c=e.textRects,d=e.dataLabelsX,g=e.strokeWidth,f=e.dataLabelsConfig,x=e.barDataLabelsConfig,b=e.barTotalDataLabelsConfig,v=e.offX,y=e.offY,w=t.globals.gridHeight/t.globals.dataPoints;h=Math.abs(h);var l,u,m=n-(this.barCtx.isRangeBar?0:w)+o/2+c.height/2+y-3,A="start",k=t.globals.series[a][s]<0,S=i;switch(this.barCtx.isReversed&&(S=i+(k?-h:h),A=k?"start":"end"),x.position){case"center":d=k?S+h/2-v:Math.max(c.width/2,S-h/2)+v;break;case"bottom":d=k?S+h-g-v:S-h+g+v;break;case"top":d=k?S-g-v:S-g+v}if(this.barCtx.lastActiveBarSerieIndex===r&&b.enabled){var L=new X(this.barCtx.ctx).getTextRects(this.getStackedTotalDataLabel({realIndex:r,j:s}),f.fontSize);k?(l=S-g-v-b.offsetX,A="end"):l=S+v+b.offsetX+(this.barCtx.isReversed?-(h+g):g),u=m-c.height/2+L.height/2+b.offsetY+g}return t.config.chart.stacked||(f.textAnchor==="start"?d-c.width<0?d=k?c.width+g:g:d+c.width>t.globals.gridWidth&&(d=k?t.globals.gridWidth-g:t.globals.gridWidth-c.width-g):f.textAnchor==="middle"?d-c.width/2<0?d=c.width/2+g:d+c.width/2>t.globals.gridWidth&&(d=t.globals.gridWidth-c.width/2-g):f.textAnchor==="end"&&(d<1?d=c.width+g:d+1>t.globals.gridWidth&&(d=t.globals.gridWidth-c.width-g))),{bcx:i,bcy:n,dataLabelsX:d,dataLabelsY:m,totalDataLabelsX:l,totalDataLabelsY:u,totalDataLabelsAnchor:A}}},{key:"drawCalculatedDataLabels",value:function(e){var t=e.x,i=e.y,a=e.val,s=e.i,r=e.j,n=e.textRects,o=e.barHeight,h=e.barWidth,c=e.dataLabelsConfig,d=this.w,g="rotate(0)";d.config.plotOptions.bar.dataLabels.orientation==="vertical"&&(g="rotate(-90, ".concat(t,", ").concat(i,")"));var f=new be(this.barCtx.ctx),x=new X(this.barCtx.ctx),b=c.formatter,v=null,y=d.globals.collapsedSeriesIndices.indexOf(s)>-1;if(c.enabled&&!y){v=x.group({class:"apexcharts-data-labels",transform:g});var w="";a!==void 0&&(w=b(a,Y(Y({},d),{},{seriesIndex:s,dataPointIndex:r,w:d}))),!a&&d.config.plotOptions.bar.hideZeroBarsWhenGrouped&&(w="");var l=d.globals.series[s][r]<0,u=d.config.plotOptions.bar.dataLabels.position;d.config.plotOptions.bar.dataLabels.orientation==="vertical"&&(u==="top"&&(c.textAnchor=l?"end":"start"),u==="center"&&(c.textAnchor="middle"),u==="bottom"&&(c.textAnchor=l?"end":"start")),this.barCtx.isRangeBar&&this.barCtx.barOptions.dataLabels.hideOverflowingLabels&&hMath.abs(h)&&(w=""):n.height/1.6>Math.abs(o)&&(w=""));var m=Y({},c);this.barCtx.isHorizontal&&a<0&&(c.textAnchor==="start"?m.textAnchor="end":c.textAnchor==="end"&&(m.textAnchor="start")),f.plotDataLabelsText({x:t,y:i,text:w,i:s,j:r,parent:v,dataLabelsConfig:m,alwaysDrawDataLabel:!0,offsetCorrection:!0})}return v}},{key:"drawTotalDataLabels",value:function(e){var t=e.x,i=e.y,a=e.val,s=e.realIndex,r=e.textAnchor,n=e.barTotalDataLabelsConfig;this.w;var o,h=new X(this.barCtx.ctx);return n.enabled&&t!==void 0&&i!==void 0&&this.barCtx.lastActiveBarSerieIndex===s&&(o=h.drawText({x:t,y:i,foreColor:n.style.color,text:a,textAnchor:r,fontFamily:n.style.fontFamily,fontSize:n.style.fontSize,fontWeight:n.style.fontWeight})),o}}]),p}(),ea=function(){function p(e){F(this,p),this.w=e.w,this.barCtx=e}return R(p,[{key:"initVariables",value:function(e){var t=this.w;this.barCtx.series=e,this.barCtx.totalItems=0,this.barCtx.seriesLen=0,this.barCtx.visibleI=-1,this.barCtx.visibleItems=1;for(var i=0;i0&&(this.barCtx.seriesLen=this.barCtx.seriesLen+1,this.barCtx.totalItems+=e[i].length),t.globals.isXNumeric)for(var a=0;at.globals.minX&&t.globals.seriesX[i][a]0&&(a=h.globals.minXDiff/g),(r=a/d*parseInt(this.barCtx.barOptions.columnWidth,10)/100)<1&&(r=1)}String(this.barCtx.barOptions.columnWidth).indexOf("%")===-1&&(r=parseInt(this.barCtx.barOptions.columnWidth,10)),n=h.globals.gridHeight-this.barCtx.baseLineY[this.barCtx.translationsIndex]-(this.barCtx.isReversed?h.globals.gridHeight:0)+(this.barCtx.isReversed?2*this.barCtx.baseLineY[this.barCtx.translationsIndex]:0),e=h.globals.padHorizontal+(a-r*this.barCtx.seriesLen)/2}return h.globals.barHeight=s,h.globals.barWidth=r,{x:e,y:t,yDivision:i,xDivision:a,barHeight:s,barWidth:r,zeroH:n,zeroW:o}}},{key:"initializeStackedPrevVars",value:function(e){e.w.globals.seriesGroups.forEach(function(t){e[t]||(e[t]={}),e[t].prevY=[],e[t].prevX=[],e[t].prevYF=[],e[t].prevXF=[],e[t].prevYVal=[],e[t].prevXVal=[]})}},{key:"initializeStackedXYVars",value:function(e){e.w.globals.seriesGroups.forEach(function(t){e[t]||(e[t]={}),e[t].xArrj=[],e[t].xArrjF=[],e[t].xArrjVal=[],e[t].yArrj=[],e[t].yArrjF=[],e[t].yArrjVal=[]})}},{key:"getPathFillColor",value:function(e,t,i,a){var s,r,n,o,h,c=this.w,d=this.barCtx.ctx.fill,g=null,f=this.barCtx.barOptions.distributed?i:t;return this.barCtx.barOptions.colors.ranges.length>0&&this.barCtx.barOptions.colors.ranges.map(function(x){e[t][i]>=x.from&&e[t][i]<=x.to&&(g=x.color)}),(s=c.config.series[t].data[i])!==null&&s!==void 0&&s.fillColor&&(g=c.config.series[t].data[i].fillColor),d.fillPath({seriesNumber:this.barCtx.barOptions.distributed?f:a,dataPointIndex:i,color:g,value:e[t][i],fillConfig:(r=c.config.series[t].data[i])===null||r===void 0?void 0:r.fill,fillType:(n=c.config.series[t].data[i])!==null&&n!==void 0&&(o=n.fill)!==null&&o!==void 0&&o.type?(h=c.config.series[t].data[i])===null||h===void 0?void 0:h.fill.type:Array.isArray(c.config.fill.type)?c.config.fill.type[a]:c.config.fill.type})}},{key:"getStrokeWidth",value:function(e,t,i){var a=0,s=this.w;return this.barCtx.series[e][t]===void 0||this.barCtx.series[e][t]===null?this.barCtx.isNullValue=!0:this.barCtx.isNullValue=!1,s.config.stroke.show&&(this.barCtx.isNullValue||(a=Array.isArray(this.barCtx.strokeWidth)?this.barCtx.strokeWidth[i]:this.barCtx.strokeWidth)),a}},{key:"shouldApplyRadius",value:function(e){var t=this.w,i=!1;return t.config.plotOptions.bar.borderRadius>0&&(t.config.chart.stacked&&t.config.plotOptions.bar.borderRadiusWhenStacked==="last"?this.barCtx.lastActiveBarSerieIndex===e&&(i=!0):i=!0),i}},{key:"barBackground",value:function(e){var t=e.j,i=e.i,a=e.x1,s=e.x2,r=e.y1,n=e.y2,o=e.elSeries,h=this.w,c=new X(this.barCtx.ctx),d=new re(this.barCtx.ctx).getActiveConfigSeriesIndex();if(this.barCtx.barOptions.colors.backgroundBarColors.length>0&&d===i){t>=this.barCtx.barOptions.colors.backgroundBarColors.length&&(t%=this.barCtx.barOptions.colors.backgroundBarColors.length);var g=this.barCtx.barOptions.colors.backgroundBarColors[t],f=c.drawRect(a!==void 0?a:0,r!==void 0?r:0,s!==void 0?s:h.globals.gridWidth,n!==void 0?n:h.globals.gridHeight,this.barCtx.barOptions.colors.backgroundBarRadius,g,this.barCtx.barOptions.colors.backgroundBarOpacity);o.add(f),f.node.classList.add("apexcharts-backgroundBar")}}},{key:"getColumnPaths",value:function(e){var t,i=e.barWidth,a=e.barXPosition,s=e.y1,r=e.y2,n=e.strokeWidth,o=e.seriesGroup,h=e.realIndex,c=e.i,d=e.j,g=e.w,f=new X(this.barCtx.ctx);(n=Array.isArray(n)?n[h]:n)||(n=0);var x=i,b=a;(t=g.config.series[h].data[d])!==null&&t!==void 0&&t.columnWidthOffset&&(b=a-g.config.series[h].data[d].columnWidthOffset/2,x=i+g.config.series[h].data[d].columnWidthOffset);var v=n/2,y=b+v,w=b+x-v;s+=.001-v,r+=.001+v;var l=f.move(y,s),u=f.move(y,s),m=f.line(w,s);if(g.globals.previousPaths.length>0&&(u=this.barCtx.getPreviousPath(h,d,!1)),l=l+f.line(y,r)+f.line(w,r)+f.line(w,s)+(g.config.plotOptions.bar.borderRadiusApplication==="around"?" Z":" z"),u=u+f.line(y,s)+m+m+m+m+m+f.line(y,s)+(g.config.plotOptions.bar.borderRadiusApplication==="around"?" Z":" z"),this.shouldApplyRadius(h)&&(l=f.roundPathCorners(l,g.config.plotOptions.bar.borderRadius)),g.config.chart.stacked){var A=this.barCtx;(A=this.barCtx[o]).yArrj.push(r-v),A.yArrjF.push(Math.abs(s-r+n)),A.yArrjVal.push(this.barCtx.series[c][d])}return{pathTo:l,pathFrom:u}}},{key:"getBarpaths",value:function(e){var t,i=e.barYPosition,a=e.barHeight,s=e.x1,r=e.x2,n=e.strokeWidth,o=e.seriesGroup,h=e.realIndex,c=e.i,d=e.j,g=e.w,f=new X(this.barCtx.ctx);(n=Array.isArray(n)?n[h]:n)||(n=0);var x=i,b=a;(t=g.config.series[h].data[d])!==null&&t!==void 0&&t.barHeightOffset&&(x=i-g.config.series[h].data[d].barHeightOffset/2,b=a+g.config.series[h].data[d].barHeightOffset);var v=n/2,y=x+v,w=x+b-v;s+=.001-v,r+=.001+v;var l=f.move(s,y),u=f.move(s,y);g.globals.previousPaths.length>0&&(u=this.barCtx.getPreviousPath(h,d,!1));var m=f.line(s,w);if(l=l+f.line(r,y)+f.line(r,w)+m+(g.config.plotOptions.bar.borderRadiusApplication==="around"?" Z":" z"),u=u+f.line(s,y)+m+m+m+m+m+f.line(s,y)+(g.config.plotOptions.bar.borderRadiusApplication==="around"?" Z":" z"),this.shouldApplyRadius(h)&&(l=f.roundPathCorners(l,g.config.plotOptions.bar.borderRadius)),g.config.chart.stacked){var A=this.barCtx;(A=this.barCtx[o]).xArrj.push(r+v),A.xArrjF.push(Math.abs(s-r)),A.xArrjVal.push(this.barCtx.series[c][d])}return{pathTo:l,pathFrom:u}}},{key:"checkZeroSeries",value:function(e){for(var t=e.series,i=this.w,a=0;a2&&arguments[2]!==void 0)||arguments[2]?t:null;return e!=null&&(i=t+e/this.barCtx.invertedYRatio-2*(this.barCtx.isReversed?e/this.barCtx.invertedYRatio:0)),i}},{key:"getYForValue",value:function(e,t,i){var a=!(arguments.length>3&&arguments[3]!==void 0)||arguments[3]?t:null;return e!=null&&(a=t-e/this.barCtx.yRatio[i]+2*(this.barCtx.isReversed?e/this.barCtx.yRatio[i]:0)),a}},{key:"getGoalValues",value:function(e,t,i,a,s,r){var n=this,o=this.w,h=[],c=function(f,x){var b;h.push((Oe(b={},e,e==="x"?n.getXForValue(f,t,!1):n.getYForValue(f,i,r,!1)),Oe(b,"attrs",x),b))};if(o.globals.seriesGoals[a]&&o.globals.seriesGoals[a][s]&&Array.isArray(o.globals.seriesGoals[a][s])&&o.globals.seriesGoals[a][s].forEach(function(f){c(f.value,f)}),this.barCtx.barOptions.isDumbbell&&o.globals.seriesRange.length){var d=this.barCtx.barOptions.dumbbellColors?this.barCtx.barOptions.dumbbellColors:o.globals.colors,g={strokeHeight:e==="x"?0:o.globals.markers.size[a],strokeWidth:e==="x"?o.globals.markers.size[a]:0,strokeDashArray:0,strokeLineCap:"round",strokeColor:Array.isArray(d[a])?d[a][0]:d[a]};c(o.globals.seriesRangeStart[a][s],g),c(o.globals.seriesRangeEnd[a][s],Y(Y({},g),{},{strokeColor:Array.isArray(d[a])?d[a][1]:d[a]}))}return h}},{key:"drawGoalLine",value:function(e){var t=e.barXPosition,i=e.barYPosition,a=e.goalX,s=e.goalY,r=e.barWidth,n=e.barHeight,o=new X(this.barCtx.ctx),h=o.group({className:"apexcharts-bar-goals-groups"});h.node.classList.add("apexcharts-element-hidden"),this.barCtx.w.globals.delayedElements.push({el:h.node}),h.attr("clip-path","url(#gridRectMarkerMask".concat(this.barCtx.w.globals.cuid,")"));var c=null;return this.barCtx.isHorizontal?Array.isArray(a)&&a.forEach(function(d){if(d.x>=-1&&d.x<=o.w.globals.gridWidth+1){var g=d.attrs.strokeHeight!==void 0?d.attrs.strokeHeight:n/2,f=i+g+n/2;c=o.drawLine(d.x,f-2*g,d.x,f,d.attrs.strokeColor?d.attrs.strokeColor:void 0,d.attrs.strokeDashArray,d.attrs.strokeWidth?d.attrs.strokeWidth:2,d.attrs.strokeLineCap),h.add(c)}}):Array.isArray(s)&&s.forEach(function(d){if(d.y>=-1&&d.y<=o.w.globals.gridHeight+1){var g=d.attrs.strokeWidth!==void 0?d.attrs.strokeWidth:r/2,f=t+g+r/2;c=o.drawLine(f-2*g,d.y,f,d.y,d.attrs.strokeColor?d.attrs.strokeColor:void 0,d.attrs.strokeDashArray,d.attrs.strokeHeight?d.attrs.strokeHeight:2,d.attrs.strokeLineCap),h.add(c)}}),h}},{key:"drawBarShadow",value:function(e){var t=e.prevPaths,i=e.currPaths,a=e.color,s=this.w,r=t.x,n=t.x1,o=t.barYPosition,h=i.x,c=i.x1,d=i.barYPosition,g=o+i.barHeight,f=new X(this.barCtx.ctx),x=new P,b=f.move(n,g)+f.line(r,g)+f.line(h,d)+f.line(c,d)+f.line(n,g)+(s.config.plotOptions.bar.borderRadiusApplication==="around"?" Z":" z");return f.drawPath({d:b,fill:x.shadeColor(.5,P.rgb2hex(a)),stroke:"none",strokeWidth:0,fillOpacity:1,classes:"apexcharts-bar-shadows"})}},{key:"getZeroValueEncounters",value:function(e){var t,i=e.i,a=e.j,s=this.w,r=0,n=0;return(s.config.plotOptions.bar.horizontal?s.globals.series.map(function(o,h){return h}):((t=s.globals.columnSeries)===null||t===void 0?void 0:t.i.map(function(o){return o}))||[]).forEach(function(o){var h=s.globals.seriesPercent[o][a];h&&r++,o-1}),a=this.barCtx.columnGroupIndices,s=a.indexOf(i);return s<0&&(a.push(i),s=a.length-1),{groupIndex:i,columnGroupIndex:s}}}]),p}(),me=function(){function p(e,t){F(this,p),this.ctx=e,this.w=e.w;var i=this.w;this.barOptions=i.config.plotOptions.bar,this.isHorizontal=this.barOptions.horizontal,this.strokeWidth=i.config.stroke.width,this.isNullValue=!1,this.isRangeBar=i.globals.seriesRange.length&&this.isHorizontal,this.isVerticalGroupedRangeBar=!i.globals.isBarHorizontal&&i.globals.seriesRange.length&&i.config.plotOptions.bar.rangeBarGroupRows,this.isFunnel=this.barOptions.isFunnel,this.xyRatios=t,this.xyRatios!==null&&(this.xRatio=t.xRatio,this.yRatio=t.yRatio,this.invertedXRatio=t.invertedXRatio,this.invertedYRatio=t.invertedYRatio,this.baseLineY=t.baseLineY,this.baseLineInvertedY=t.baseLineInvertedY),this.yaxisIndex=0,this.translationsIndex=0,this.seriesLen=0,this.pathArr=[];var a=new re(this.ctx);this.lastActiveBarSerieIndex=a.getActiveConfigSeriesIndex("desc",["bar","column"]),this.columnGroupIndices=[];var s=a.getBarSeriesIndices(),r=new $(this.ctx);this.stackedSeriesTotals=r.getStackedSeriesTotals(this.w.config.series.map(function(n,o){return s.indexOf(o)===-1?o:-1}).filter(function(n){return n!==-1})),this.barHelpers=new ea(this)}return R(p,[{key:"draw",value:function(e,t){var i=this.w,a=new X(this.ctx),s=new $(this.ctx,i);e=s.getLogSeries(e),this.series=e,this.yRatio=s.getLogYRatios(this.yRatio),this.barHelpers.initVariables(e);var r=a.group({class:"apexcharts-bar-series apexcharts-plot-series"});i.config.dataLabels.enabled&&this.totalItems>this.barOptions.dataLabels.maxItems&&console.warn("WARNING: DataLabels are enabled but there are too many to display. This may cause performance issue when rendering - ApexCharts");for(var n=0,o=0;n0&&(this.visibleI=this.visibleI+1);var u=0,m=0;this.yRatio.length>1&&(this.yaxisIndex=i.globals.seriesYAxisReverseMap[y],this.translationsIndex=y);var A=this.translationsIndex;this.isReversed=i.config.yaxis[this.yaxisIndex]&&i.config.yaxis[this.yaxisIndex].reversed;var k=this.barHelpers.initialPositions();x=k.y,u=k.barHeight,c=k.yDivision,g=k.zeroW,f=k.x,m=k.barWidth,h=k.xDivision,d=k.zeroH,this.horizontal||v.push(f+m/2);var S=a.group({class:"apexcharts-datalabels","data:realIndex":y});i.globals.delayedElements.push({el:S.node}),S.node.classList.add("apexcharts-element-hidden");var L=a.group({class:"apexcharts-bar-goals-markers"}),C=a.group({class:"apexcharts-bar-shadows"});i.globals.delayedElements.push({el:C.node}),C.node.classList.add("apexcharts-element-hidden");for(var I=0;I0){var O=this.barHelpers.drawBarShadow({color:typeof E=="string"&&E?.indexOf("url")===-1?E:P.hexToRgba(i.globals.colors[n]),prevPaths:this.pathArr[this.pathArr.length-1],currPaths:M});O&&C.add(O)}this.pathArr.push(M);var D=this.barHelpers.drawGoalLine({barXPosition:M.barXPosition,barYPosition:M.barYPosition,goalX:M.goalX,goalY:M.goalY,barHeight:u,barWidth:m});D&&L.add(D),x=M.y,f=M.x,I>0&&v.push(f+m/2),b.push(x),this.renderSeries({realIndex:y,pathFill:E,j:I,i:n,columnGroupIndex:w,pathFrom:M.pathFrom,pathTo:M.pathTo,strokeWidth:z,elSeries:l,x:f,y:x,series:e,barHeight:Math.abs(M.barHeight?M.barHeight:u),barWidth:Math.abs(M.barWidth?M.barWidth:m),elDataLabelsWrap:S,elGoalsMarkers:L,elBarShadows:C,visibleSeries:this.visibleI,type:"bar"})}i.globals.seriesXvalues[y]=v,i.globals.seriesYvalues[y]=b,r.add(l)}return r}},{key:"renderSeries",value:function(e){var t=e.realIndex,i=e.pathFill,a=e.lineFill,s=e.j,r=e.i,n=e.columnGroupIndex,o=e.pathFrom,h=e.pathTo,c=e.strokeWidth,d=e.elSeries,g=e.x,f=e.y,x=e.y1,b=e.y2,v=e.series,y=e.barHeight,w=e.barWidth,l=e.barXPosition,u=e.barYPosition,m=e.elDataLabelsWrap,A=e.elGoalsMarkers,k=e.elBarShadows,S=e.visibleSeries,L=e.type,C=this.w,I=new X(this.ctx);if(!a){var z=typeof C.globals.stroke.colors[t]=="function"?function(D){var H,W=C.config.stroke.colors;return Array.isArray(W)&&W.length>0&&((H=W[D])||(H=""),typeof H=="function")?H({value:C.globals.series[D][s],dataPointIndex:s,w:C}):H}(t):C.globals.stroke.colors[t];a=this.barOptions.distributed?C.globals.stroke.colors[s]:z}C.config.series[r].data[s]&&C.config.series[r].data[s].strokeColor&&(a=C.config.series[r].data[s].strokeColor),this.isNullValue&&(i="none");var M=s/C.config.chart.animations.animateGradually.delay*(C.config.chart.animations.speed/C.globals.dataPoints)/2.4,T=I.renderPaths({i:r,j:s,realIndex:t,pathFrom:o,pathTo:h,stroke:a,strokeWidth:c,strokeLineCap:C.config.stroke.lineCap,fill:i,animationDelay:M,initialSpeed:C.config.chart.animations.speed,dataChangeSpeed:C.config.chart.animations.dynamicAnimation.speed,className:"apexcharts-".concat(L,"-area")});T.attr("clip-path","url(#gridRectMask".concat(C.globals.cuid,")"));var E=C.config.forecastDataPoints;E.count>0&&s>=C.globals.dataPoints-E.count&&(T.node.setAttribute("stroke-dasharray",E.dashArray),T.node.setAttribute("stroke-width",E.strokeWidth),T.node.setAttribute("fill-opacity",E.fillOpacity)),x!==void 0&&b!==void 0&&(T.attr("data-range-y1",x),T.attr("data-range-y2",b)),new ie(this.ctx).setSelectionFilter(T,t,s),d.add(T);var O=new Qi(this).handleBarDataLabels({x:g,y:f,y1:x,y2:b,i:r,j:s,series:v,realIndex:t,columnGroupIndex:n,barHeight:y,barWidth:w,barXPosition:l,barYPosition:u,renderedPath:T,visibleSeries:S});return O.dataLabels!==null&&m.add(O.dataLabels),O.totalDataLabels&&m.add(O.totalDataLabels),d.add(m),A&&d.add(A),k&&d.add(k),d}},{key:"drawBarPaths",value:function(e){var t,i=e.indexes,a=e.barHeight,s=e.strokeWidth,r=e.zeroW,n=e.x,o=e.y,h=e.yDivision,c=e.elSeries,d=this.w,g=i.i,f=i.j;if(d.globals.isXNumeric)t=(o=(d.globals.seriesX[g][f]-d.globals.minX)/this.invertedXRatio-a)+a*this.visibleI;else if(d.config.plotOptions.bar.hideZeroBarsWhenGrouped){var x=0,b=0;d.globals.seriesPercent.forEach(function(y,w){y[f]&&x++,w0&&(a=this.seriesLen*a/x),t=o+a*this.visibleI,t-=a*b}else t=o+a*this.visibleI;this.isFunnel&&(r-=(this.barHelpers.getXForValue(this.series[g][f],r)-r)/2),n=this.barHelpers.getXForValue(this.series[g][f],r);var v=this.barHelpers.getBarpaths({barYPosition:t,barHeight:a,x1:r,x2:n,strokeWidth:s,series:this.series,realIndex:i.realIndex,i:g,j:f,w:d});return d.globals.isXNumeric||(o+=h),this.barHelpers.barBackground({j:f,i:g,y1:t-a*this.visibleI,y2:a*this.seriesLen,elSeries:c}),{pathTo:v.pathTo,pathFrom:v.pathFrom,x1:r,x:n,y:o,goalX:this.barHelpers.getGoalValues("x",r,null,g,f),barYPosition:t,barHeight:a}}},{key:"drawColumnPaths",value:function(e){var t,i=e.indexes,a=e.x,s=e.y,r=e.xDivision,n=e.barWidth,o=e.zeroH,h=e.strokeWidth,c=e.elSeries,d=this.w,g=i.realIndex,f=i.translationsIndex,x=i.i,b=i.j,v=i.bc;if(d.globals.isXNumeric){var y=this.getBarXForNumericXAxis({x:a,j:b,realIndex:g,barWidth:n});a=y.x,t=y.barXPosition}else if(d.config.plotOptions.bar.hideZeroBarsWhenGrouped){var w=this.barHelpers.getZeroValueEncounters({i:x,j:b}),l=w.nonZeroColumns,u=w.zeroEncounters;l>0&&(n=this.seriesLen*n/l),t=a+n*this.visibleI,t-=n*u}else t=a+n*this.visibleI;s=this.barHelpers.getYForValue(this.series[x][b],o,f);var m=this.barHelpers.getColumnPaths({barXPosition:t,barWidth:n,y1:o,y2:s,strokeWidth:h,series:this.series,realIndex:g,i:x,j:b,w:d});return d.globals.isXNumeric||(a+=r),this.barHelpers.barBackground({bc:v,j:b,i:x,x1:t-h/2-n*this.visibleI,x2:n*this.seriesLen+h/2,elSeries:c}),{pathTo:m.pathTo,pathFrom:m.pathFrom,x:a,y:s,goalY:this.barHelpers.getGoalValues("y",null,o,x,b,f),barXPosition:t,barWidth:n}}},{key:"getBarXForNumericXAxis",value:function(e){var t=e.x,i=e.barWidth,a=e.realIndex,s=e.j,r=this.w,n=a;return r.globals.seriesX[a].length||(n=r.globals.maxValsInArrayIndex),r.globals.seriesX[n][s]&&(t=(r.globals.seriesX[n][s]-r.globals.minX)/this.xRatio-i*this.seriesLen/2),{barXPosition:t+i*this.visibleI,x:t}}},{key:"getPreviousPath",value:function(e,t){for(var i,a=this.w,s=0;s0&&parseInt(r.realIndex,10)===parseInt(e,10)&&a.globals.previousPaths[s].paths[t]!==void 0&&(i=a.globals.previousPaths[s].paths[t].d)}return i}}]),p}(),St=function(p){Te(t,me);var e=Ie(t);function t(){return F(this,t),e.apply(this,arguments)}return R(t,[{key:"draw",value:function(i,a){var s=this,r=this.w;this.graphics=new X(this.ctx),this.bar=new me(this.ctx,this.xyRatios);var n=new $(this.ctx,r);i=n.getLogSeries(i),this.yRatio=n.getLogYRatios(this.yRatio),this.barHelpers.initVariables(i),r.config.chart.stackType==="100%"&&(i=r.globals.comboCharts?a.map(function(x){return r.globals.seriesPercent[x]}):r.globals.seriesPercent.slice()),this.series=i,this.barHelpers.initializeStackedPrevVars(this);for(var o=this.graphics.group({class:"apexcharts-bar-series apexcharts-plot-series"}),h=0,c=0,d=function(x,b){var v=void 0,y=void 0,w=void 0,l=void 0,u=r.globals.comboCharts?a[x]:x,m=s.barHelpers.getGroupIndex(u),A=m.groupIndex,k=m.columnGroupIndex;s.groupCtx=s[r.globals.seriesGroups[A]];var S=[],L=[],C=0;s.yRatio.length>1&&(s.yaxisIndex=r.globals.seriesYAxisReverseMap[u][0],C=u),s.isReversed=r.config.yaxis[s.yaxisIndex]&&r.config.yaxis[s.yaxisIndex].reversed;var I=s.graphics.group({class:"apexcharts-series",seriesName:P.escapeString(r.globals.seriesNames[u]),rel:x+1,"data:realIndex":u});s.ctx.series.addCollapsedClassToSeries(I,u);var z=s.graphics.group({class:"apexcharts-datalabels","data:realIndex":u}),M=s.graphics.group({class:"apexcharts-bar-goals-markers"}),T=0,E=0,O=s.initialPositions(h,c,v,y,w,l,C);c=O.y,T=O.barHeight,y=O.yDivision,l=O.zeroW,h=O.x,E=O.barWidth,v=O.xDivision,w=O.zeroH,r.globals.barHeight=T,r.globals.barWidth=E,s.barHelpers.initializeStackedXYVars(s),s.groupCtx.prevY.length===1&&s.groupCtx.prevY[0].every(function(Z){return isNaN(Z)})&&(s.groupCtx.prevY[0]=s.groupCtx.prevY[0].map(function(){return w}),s.groupCtx.prevYF[0]=s.groupCtx.prevYF[0].map(function(){return 0}));for(var D=0;D1?d=(s=g.globals.minXDiff/this.xRatio)*parseInt(this.barOptions.columnWidth,10)/100:String(x).indexOf("%")===-1?d=parseInt(x,10):d*=parseInt(x,10)/100,n=this.isReversed?this.baseLineY[h]:g.globals.gridHeight-this.baseLineY[h],i=g.globals.padHorizontal+(s-d)/2}var b=g.globals.barGroups.length||1;return{x:i,y:a,yDivision:r,xDivision:s,barHeight:c/b,barWidth:d/b,zeroH:n,zeroW:o}}},{key:"drawStackedBarPaths",value:function(i){for(var a,s=i.indexes,r=i.barHeight,n=i.strokeWidth,o=i.zeroW,h=i.x,c=i.y,d=i.columnGroupIndex,g=i.seriesGroup,f=i.yDivision,x=i.elSeries,b=this.w,v=c+d*r,y=s.i,w=s.j,l=s.realIndex,u=s.translationsIndex,m=0,A=0;A0){var S=o;this.groupCtx.prevXVal[k-1][w]<0?S=this.series[y][w]>=0?this.groupCtx.prevX[k-1][w]+m-2*(this.isReversed?m:0):this.groupCtx.prevX[k-1][w]:this.groupCtx.prevXVal[k-1][w]>=0&&(S=this.series[y][w]>=0?this.groupCtx.prevX[k-1][w]:this.groupCtx.prevX[k-1][w]-m+2*(this.isReversed?m:0)),a=S}else a=o;h=this.series[y][w]===null?a:a+this.series[y][w]/this.invertedYRatio-2*(this.isReversed?this.series[y][w]/this.invertedYRatio:0);var L=this.barHelpers.getBarpaths({barYPosition:v,barHeight:r,x1:a,x2:h,strokeWidth:n,series:this.series,realIndex:s.realIndex,seriesGroup:g,i:y,j:w,w:b});return this.barHelpers.barBackground({j:w,i:y,y1:v,y2:r,elSeries:x}),c+=f,{pathTo:L.pathTo,pathFrom:L.pathFrom,goalX:this.barHelpers.getGoalValues("x",o,null,y,w,u),barXPosition:a,barYPosition:v,x:h,y:c}}},{key:"drawStackedColumnPaths",value:function(i){var a=i.indexes,s=i.x,r=i.y,n=i.xDivision,o=i.barWidth,h=i.zeroH,c=i.columnGroupIndex,d=i.seriesGroup,g=i.elSeries,f=this.w,x=a.i,b=a.j,v=a.bc,y=a.realIndex,w=a.translationsIndex;if(f.globals.isXNumeric){var l=f.globals.seriesX[y][b];l||(l=0),s=(l-f.globals.minX)/this.xRatio-o/2*f.globals.barGroups.length}for(var u,m=s+c*o,A=0,k=0;k0&&!f.globals.isXNumeric||S>0&&f.globals.isXNumeric&&f.globals.seriesX[y-1][b]===f.globals.seriesX[y][b]){var L,C,I,z=Math.min(this.yRatio.length+1,y+1);if(this.groupCtx.prevY[S-1]!==void 0&&this.groupCtx.prevY[S-1].length)for(var M=1;M=0?I-A+2*(this.isReversed?A:0):I;break}if(((D=this.groupCtx.prevYVal[S-E])===null||D===void 0?void 0:D[b])>=0){C=this.series[x][b]>=0?I:I+A-2*(this.isReversed?A:0);break}}C===void 0&&(C=f.globals.gridHeight),u=(L=this.groupCtx.prevYF[0])!==null&&L!==void 0&&L.every(function(W){return W===0})&&this.groupCtx.prevYF.slice(1,S).every(function(W){return W.every(function(N){return isNaN(N)})})?h:C}else u=h;r=this.series[x][b]?u-this.series[x][b]/this.yRatio[w]+2*(this.isReversed?this.series[x][b]/this.yRatio[w]:0):u;var H=this.barHelpers.getColumnPaths({barXPosition:m,barWidth:o,y1:u,y2:r,yRatio:this.yRatio[w],strokeWidth:this.strokeWidth,series:this.series,seriesGroup:d,realIndex:a.realIndex,i:x,j:b,w:f});return this.barHelpers.barBackground({bc:v,j:b,i:x,x1:m,x2:o,elSeries:g}),{pathTo:H.pathTo,pathFrom:H.pathFrom,goalY:this.barHelpers.getGoalValues("y",null,h,x,b),barXPosition:m,x:f.globals.isXNumeric?s:s+n,y:r}}}]),t}(),Qe=function(p){Te(t,me);var e=Ie(t);function t(){return F(this,t),e.apply(this,arguments)}return R(t,[{key:"draw",value:function(i,a,s){var r=this,n=this.w,o=new X(this.ctx),h=n.globals.comboCharts?a:n.config.chart.type,c=new ne(this.ctx);this.candlestickOptions=this.w.config.plotOptions.candlestick,this.boxOptions=this.w.config.plotOptions.boxPlot,this.isHorizontal=n.config.plotOptions.bar.horizontal;var d=new $(this.ctx,n);i=d.getLogSeries(i),this.series=i,this.yRatio=d.getLogYRatios(this.yRatio),this.barHelpers.initVariables(i);for(var g=o.group({class:"apexcharts-".concat(h,"-series apexcharts-plot-series")}),f=function(b){r.isBoxPlot=n.config.chart.type==="boxPlot"||n.config.series[b].type==="boxPlot";var v,y,w,l,u=void 0,m=void 0,A=[],k=[],S=n.globals.comboCharts?s[b]:b,L=r.barHelpers.getGroupIndex(S).columnGroupIndex,C=o.group({class:"apexcharts-series",seriesName:P.escapeString(n.globals.seriesNames[S]),rel:b+1,"data:realIndex":S});r.ctx.series.addCollapsedClassToSeries(C,S),i[b].length>0&&(r.visibleI=r.visibleI+1);var I,z,M=0;r.yRatio.length>1&&(r.yaxisIndex=n.globals.seriesYAxisReverseMap[S][0],M=S);var T=r.barHelpers.initialPositions();m=T.y,I=T.barHeight,y=T.yDivision,l=T.zeroW,u=T.x,z=T.barWidth,v=T.xDivision,w=T.zeroH,k.push(u+z/2);for(var E=o.group({class:"apexcharts-datalabels","data:realIndex":S}),O=function(H){var W=r.barHelpers.getStrokeWidth(b,H,S),N=null,B={indexes:{i:b,j:H,realIndex:S,translationsIndex:M},x:u,y:m,strokeWidth:W,elSeries:C};N=r.isHorizontal?r.drawHorizontalBoxPaths(Y(Y({},B),{},{yDivision:y,barHeight:I,zeroW:l})):r.drawVerticalBoxPaths(Y(Y({},B),{},{xDivision:v,barWidth:z,zeroH:w})),m=N.y,u=N.x,H>0&&k.push(u+z/2),A.push(m),N.pathTo.forEach(function(q,Z){var j=!r.isBoxPlot&&r.candlestickOptions.wick.useFillColor?N.color[Z]:n.globals.stroke.colors[b],se=c.fillPath({seriesNumber:S,dataPointIndex:H,color:N.color[Z],value:i[b][H]});r.renderSeries({realIndex:S,pathFill:se,lineFill:j,j:H,i:b,pathFrom:N.pathFrom,pathTo:q,strokeWidth:W,elSeries:C,x:u,y:m,series:i,columnGroupIndex:L,barHeight:I,barWidth:z,elDataLabelsWrap:E,visibleSeries:r.visibleI,type:n.config.chart.type})})},D=0;Du.c&&(x=!1);var k=Math.min(u.o,u.c),S=Math.max(u.o,u.c),L=u.m;c.globals.isXNumeric&&(s=(c.globals.seriesX[l][f]-c.globals.minX)/this.xRatio-n/2);var C=s+n*this.visibleI;this.series[g][f]===void 0||this.series[g][f]===null?(k=o,S=o):(k=o-k/w,S=o-S/w,m=o-u.h/w,A=o-u.l/w,L=o-u.m/w);var I=d.move(C,o),z=d.move(C+n/2,k);return c.globals.previousPaths.length>0&&(z=this.getPreviousPath(l,f,!0)),I=this.isBoxPlot?[d.move(C,k)+d.line(C+n/2,k)+d.line(C+n/2,m)+d.line(C+n/4,m)+d.line(C+n-n/4,m)+d.line(C+n/2,m)+d.line(C+n/2,k)+d.line(C+n,k)+d.line(C+n,L)+d.line(C,L)+d.line(C,k+h/2),d.move(C,L)+d.line(C+n,L)+d.line(C+n,S)+d.line(C+n/2,S)+d.line(C+n/2,A)+d.line(C+n-n/4,A)+d.line(C+n/4,A)+d.line(C+n/2,A)+d.line(C+n/2,S)+d.line(C,S)+d.line(C,L)+"z"]:[d.move(C,S)+d.line(C+n/2,S)+d.line(C+n/2,m)+d.line(C+n/2,S)+d.line(C+n,S)+d.line(C+n,k)+d.line(C+n/2,k)+d.line(C+n/2,A)+d.line(C+n/2,k)+d.line(C,k)+d.line(C,S-h/2)],z+=d.move(C,k),c.globals.isXNumeric||(s+=r),{pathTo:I,pathFrom:z,x:s,y:S,barXPosition:C,color:this.isBoxPlot?y:x?[b]:[v]}}},{key:"drawHorizontalBoxPaths",value:function(i){var a=i.indexes;i.x;var s=i.y,r=i.yDivision,n=i.barHeight,o=i.zeroW,h=i.strokeWidth,c=this.w,d=new X(this.ctx),g=a.i,f=a.j,x=this.boxOptions.colors.lower;this.isBoxPlot&&(x=[this.boxOptions.colors.lower,this.boxOptions.colors.upper]);var b=this.invertedYRatio,v=a.realIndex,y=this.getOHLCValue(v,f),w=o,l=o,u=Math.min(y.o,y.c),m=Math.max(y.o,y.c),A=y.m;c.globals.isXNumeric&&(s=(c.globals.seriesX[v][f]-c.globals.minX)/this.invertedXRatio-n/2);var k=s+n*this.visibleI;this.series[g][f]===void 0||this.series[g][f]===null?(u=o,m=o):(u=o+u/b,m=o+m/b,w=o+y.h/b,l=o+y.l/b,A=o+y.m/b);var S=d.move(o,k),L=d.move(u,k+n/2);return c.globals.previousPaths.length>0&&(L=this.getPreviousPath(v,f,!0)),S=[d.move(u,k)+d.line(u,k+n/2)+d.line(w,k+n/2)+d.line(w,k+n/2-n/4)+d.line(w,k+n/2+n/4)+d.line(w,k+n/2)+d.line(u,k+n/2)+d.line(u,k+n)+d.line(A,k+n)+d.line(A,k)+d.line(u+h/2,k),d.move(A,k)+d.line(A,k+n)+d.line(m,k+n)+d.line(m,k+n/2)+d.line(l,k+n/2)+d.line(l,k+n-n/4)+d.line(l,k+n/4)+d.line(l,k+n/2)+d.line(m,k+n/2)+d.line(m,k)+d.line(A,k)+"z"],L+=d.move(u,k),c.globals.isXNumeric||(s+=r),{pathTo:S,pathFrom:L,x:m,y:s,barYPosition:k,color:x}}},{key:"getOHLCValue",value:function(i,a){var s=this.w;return{o:this.isBoxPlot?s.globals.seriesCandleH[i][a]:s.globals.seriesCandleO[i][a],h:this.isBoxPlot?s.globals.seriesCandleO[i][a]:s.globals.seriesCandleH[i][a],m:s.globals.seriesCandleM[i][a],l:this.isBoxPlot?s.globals.seriesCandleC[i][a]:s.globals.seriesCandleL[i][a],c:this.isBoxPlot?s.globals.seriesCandleL[i][a]:s.globals.seriesCandleC[i][a]}}}]),t}(),Bt=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"checkColorRange",value:function(){var e=this.w,t=!1,i=e.config.plotOptions[e.config.chart.type];return i.colorScale.ranges.length>0&&i.colorScale.ranges.map(function(a,s){a.from<=0&&(t=!0)}),t}},{key:"getShadeColor",value:function(e,t,i,a){var s=this.w,r=1,n=s.config.plotOptions[e].shadeIntensity,o=this.determineColor(e,t,i);s.globals.hasNegs||a?r=s.config.plotOptions[e].reverseNegativeShade?o.percent<0?o.percent/100*(1.25*n):(1-o.percent/100)*(1.25*n):o.percent<=0?1-(1+o.percent/100)*n:(1-o.percent/100)*n:(r=1-o.percent/100,e==="treemap"&&(r=(1-o.percent/100)*(1.25*n)));var h=o.color,c=new P;if(s.config.plotOptions[e].enableShades)if(this.w.config.theme.mode==="dark"){var d=c.shadeColor(-1*r,o.color);h=P.hexToRgba(P.isColorHex(d)?d:P.rgb2hex(d),s.config.fill.opacity)}else{var g=c.shadeColor(r,o.color);h=P.hexToRgba(P.isColorHex(g)?g:P.rgb2hex(g),s.config.fill.opacity)}return{color:h,colorProps:o}}},{key:"determineColor",value:function(e,t,i){var a=this.w,s=a.globals.series[t][i],r=a.config.plotOptions[e],n=r.colorScale.inverse?i:t;r.distributed&&a.config.chart.type==="treemap"&&(n=i);var o=a.globals.colors[n],h=null,c=Math.min.apply(Math,te(a.globals.series[t])),d=Math.max.apply(Math,te(a.globals.series[t]));r.distributed||e!=="heatmap"||(c=a.globals.minY,d=a.globals.maxY),r.colorScale.min!==void 0&&(c=r.colorScale.mina.globals.maxY?r.colorScale.max:a.globals.maxY);var g=Math.abs(d)+Math.abs(c),f=100*s/(g===0?g-1e-6:g);return r.colorScale.ranges.length>0&&r.colorScale.ranges.map(function(x,b){if(s>=x.from&&s<=x.to){o=x.color,h=x.foreColor?x.foreColor:null,c=x.from,d=x.to;var v=Math.abs(d)+Math.abs(c);f=100*s/(v===0?v-1e-6:v)}}),{color:o,foreColor:h,percent:f}}},{key:"calculateDataLabels",value:function(e){var t=e.text,i=e.x,a=e.y,s=e.i,r=e.j,n=e.colorProps,o=e.fontSize,h=this.w.config.dataLabels,c=new X(this.ctx),d=new be(this.ctx),g=null;if(h.enabled){g=c.group({class:"apexcharts-data-labels"});var f=h.offsetX,x=h.offsetY,b=i+f,v=a+parseFloat(h.style.fontSize)/3+x;d.plotDataLabelsText({x:b,y:v,text:t,i:s,j:r,color:n.foreColor,parent:g,fontSize:o,dataLabelsConfig:h})}return g}},{key:"addListeners",value:function(e){var t=new X(this.ctx);e.node.addEventListener("mouseenter",t.pathMouseEnter.bind(this,e)),e.node.addEventListener("mouseleave",t.pathMouseLeave.bind(this,e)),e.node.addEventListener("mousedown",t.pathMouseDown.bind(this,e))}}]),p}(),ta=function(){function p(e,t){F(this,p),this.ctx=e,this.w=e.w,this.xRatio=t.xRatio,this.yRatio=t.yRatio,this.dynamicAnim=this.w.config.chart.animations.dynamicAnimation,this.helpers=new Bt(e),this.rectRadius=this.w.config.plotOptions.heatmap.radius,this.strokeWidth=this.w.config.stroke.show?this.w.config.stroke.width:0}return R(p,[{key:"draw",value:function(e){var t=this.w,i=new X(this.ctx),a=i.group({class:"apexcharts-heatmap"});a.attr("clip-path","url(#gridRectMask".concat(t.globals.cuid,")"));var s=t.globals.gridWidth/t.globals.dataPoints,r=t.globals.gridHeight/t.globals.series.length,n=0,o=!1;this.negRange=this.helpers.checkColorRange();var h=e.slice();t.config.yaxis[0].reversed&&(o=!0,h.reverse());for(var c=o?0:h.length-1;o?c=0;o?c++:c--){var d=i.group({class:"apexcharts-series apexcharts-heatmap-series",seriesName:P.escapeString(t.globals.seriesNames[c]),rel:c+1,"data:realIndex":c});if(this.ctx.series.addCollapsedClassToSeries(d,c),t.config.chart.dropShadow.enabled){var g=t.config.chart.dropShadow;new ie(this.ctx).dropShadow(d,g,c)}for(var f=0,x=t.config.plotOptions.heatmap.shadeIntensity,b=0;b-1&&this.pieClicked(g),i.config.dataLabels.enabled){var m=l.x,A=l.y,k=100*x/this.fullAngle+"%";if(x!==0&&i.config.plotOptions.pie.dataLabels.minAngleToShowLabelthis.fullAngle?t.endAngle=t.endAngle-(a+n):a+n=this.fullAngle+this.w.config.plotOptions.pie.startAngle%this.fullAngle&&(c=this.fullAngle+this.w.config.plotOptions.pie.startAngle%this.fullAngle-.01),Math.ceil(c)>this.fullAngle&&(c-=this.fullAngle);var d=Math.PI*(c-90)/180,g=i.centerX+r*Math.cos(h),f=i.centerY+r*Math.sin(h),x=i.centerX+r*Math.cos(d),b=i.centerY+r*Math.sin(d),v=P.polarToCartesian(i.centerX,i.centerY,i.donutSize,c),y=P.polarToCartesian(i.centerX,i.centerY,i.donutSize,o),w=s>180?1:0,l=["M",g,f,"A",r,r,0,w,1,x,b];return t=i.chartType==="donut"?[].concat(l,["L",v.x,v.y,"A",i.donutSize,i.donutSize,0,w,0,y.x,y.y,"L",g,f,"z"]).join(" "):i.chartType==="pie"||i.chartType==="polarArea"?[].concat(l,["L",i.centerX,i.centerY,"L",g,f]).join(" "):[].concat(l).join(" "),n.roundPathCorners(t,2*this.strokeWidth)}},{key:"drawPolarElements",value:function(e){var t=this.w,i=new Ot(this.ctx),a=new X(this.ctx),s=new Gt(this.ctx),r=a.group(),n=a.group(),o=i.niceScale(0,Math.ceil(this.maxY),0),h=o.result.reverse(),c=o.result.length;this.maxY=o.niceMax;for(var d=t.globals.radialSize,g=d/(c-1),f=0;f1&&e.total.show&&(s=e.total.color);var n=r.globals.dom.baseEl.querySelector(".apexcharts-datalabel-label"),o=r.globals.dom.baseEl.querySelector(".apexcharts-datalabel-value");i=(0,e.value.formatter)(i,r),a||typeof e.total.formatter!="function"||(i=e.total.formatter(r));var h=t===e.total.label;t=e.name.formatter(t,h,r),n!==null&&(n.textContent=t),o!==null&&(o.textContent=i),n!==null&&(n.style.fill=s)}},{key:"printDataLabelsInner",value:function(e,t){var i=this.w,a=e.getAttribute("data:value"),s=i.globals.seriesNames[parseInt(e.parentNode.getAttribute("rel"),10)-1];i.globals.series.length>1&&this.printInnerLabels(t,s,a,e);var r=i.globals.dom.baseEl.querySelector(".apexcharts-datalabels-group");r!==null&&(r.style.opacity=1)}},{key:"drawSpokes",value:function(e){var t=this,i=this.w,a=new X(this.ctx),s=i.config.plotOptions.polarArea.spokes;if(s.strokeWidth!==0){for(var r=[],n=360/i.globals.series.length,o=0;o0&&(A=t.getPreviousPath(y));for(var k=0;k=10?e.x>0?(i="start",a+=10):e.x<0&&(i="end",a-=10):i="middle",Math.abs(e.y)>=t-10&&(e.y<0?s-=10:e.y>0&&(s+=10)),{textAnchor:i,newX:a,newY:s}}},{key:"getPreviousPath",value:function(e){for(var t=this.w,i=null,a=0;a0&&parseInt(s.realIndex,10)===parseInt(e,10)&&t.globals.previousPaths[a].paths[0]!==void 0&&(i=t.globals.previousPaths[a].paths[0].d)}return i}},{key:"getDataPointsPos",value:function(e,t){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this.dataPointsLen;e=e||[],t=t||[];for(var a=[],s=0;s=360&&(b=360-Math.abs(this.startAngle)-.1);var v=s.drawPath({d:"",stroke:f,strokeWidth:h*parseInt(g.strokeWidth,10)/100,fill:"none",strokeOpacity:g.opacity,classes:"apexcharts-radialbar-area"});if(g.dropShadow.enabled){var y=g.dropShadow;n.dropShadow(v,y)}d.add(v),v.attr("id","apexcharts-radialbarTrack-"+c),this.animatePaths(v,{centerX:i.centerX,centerY:i.centerY,endAngle:b,startAngle:x,size:i.size,i:c,totalItems:2,animBeginArr:0,dur:0,isTrack:!0,easing:a.globals.easing})}return r}},{key:"drawArcs",value:function(i){var a=this.w,s=new X(this.ctx),r=new ne(this.ctx),n=new ie(this.ctx),o=s.group(),h=this.getStrokeWidth(i);i.size=i.size-h/2;var c=a.config.plotOptions.radialBar.hollow.background,d=i.size-h*i.series.length-this.margin*i.series.length-h*parseInt(a.config.plotOptions.radialBar.track.strokeWidth,10)/100/2,g=d-a.config.plotOptions.radialBar.hollow.margin;a.config.plotOptions.radialBar.hollow.image!==void 0&&(c=this.drawHollowImage(i,o,d,c));var f=this.drawHollow({size:g,centerX:i.centerX,centerY:i.centerY,fill:c||"transparent"});if(a.config.plotOptions.radialBar.hollow.dropShadow.enabled){var x=a.config.plotOptions.radialBar.hollow.dropShadow;n.dropShadow(f,x)}var b=1;!this.radialDataLabels.total.show&&a.globals.series.length>1&&(b=0);var v=null;if(this.radialDataLabels.show){var y=a.globals.dom.Paper.select(".apexcharts-datalabels-group").members[0];v=this.renderInnerDataLabels(y,this.radialDataLabels,{hollowSize:d,centerX:i.centerX,centerY:i.centerY,opacity:b})}a.config.plotOptions.radialBar.hollow.position==="back"&&(o.add(f),v&&o.add(v));var w=!1;a.config.plotOptions.radialBar.inverseOrder&&(w=!0);for(var l=w?i.series.length-1:0;w?l>=0:l100?100:i.series[l])/100,L=Math.round(this.totalAngle*S)+this.startAngle,C=void 0;a.globals.dataChanged&&(k=this.startAngle,C=Math.round(this.totalAngle*P.negToZero(a.globals.previousPaths[l])/100)+k),Math.abs(L)+Math.abs(A)>=360&&(L-=.01),Math.abs(C)+Math.abs(k)>=360&&(C-=.01);var I=L-A,z=Array.isArray(a.config.stroke.dashArray)?a.config.stroke.dashArray[l]:a.config.stroke.dashArray,M=s.drawPath({d:"",stroke:m,strokeWidth:h,fill:"none",fillOpacity:a.config.fill.opacity,classes:"apexcharts-radialbar-area apexcharts-radialbar-slice-"+l,strokeDashArray:z});if(X.setAttrs(M.node,{"data:angle":I,"data:value":i.series[l]}),a.config.chart.dropShadow.enabled){var T=a.config.chart.dropShadow;n.dropShadow(M,T,l)}if(n.setSelectionFilter(M,0,l),this.addListeners(M,this.radialDataLabels),u.add(M),M.attr({index:0,j:l}),this.barLabels.enabled){var E=P.polarToCartesian(i.centerX,i.centerY,i.size,A),O=this.barLabels.formatter(a.globals.seriesNames[l],{seriesIndex:l,w:a}),D=["apexcharts-radialbar-label"];this.barLabels.onClick||D.push("apexcharts-no-click");var H=this.barLabels.useSeriesColors?a.globals.colors[l]:a.config.chart.foreColor;H||(H=a.config.chart.foreColor);var W=E.x+this.barLabels.offsetX,N=E.y+this.barLabels.offsetY,B=s.drawText({x:W,y:N,text:O,textAnchor:"end",dominantBaseline:"middle",fontFamily:this.barLabels.fontFamily,fontWeight:this.barLabels.fontWeight,fontSize:this.barLabels.fontSize,foreColor:H,cssClass:D.join(" ")});B.on("click",this.onBarLabelClick),B.attr({rel:l+1}),A!==0&&B.attr({"transform-origin":"".concat(W," ").concat(N),transform:"rotate(".concat(A," 0 0)")}),u.add(B)}var q=0;!this.initialAnim||a.globals.resized||a.globals.dataChanged||(q=a.config.chart.animations.speed),a.globals.dataChanged&&(q=a.config.chart.animations.dynamicAnimation.speed),this.animDur=q/(1.2*i.series.length)+this.animDur,this.animBeginArr.push(this.animDur),this.animatePaths(M,{centerX:i.centerX,centerY:i.centerY,endAngle:L,startAngle:A,prevEndAngle:C,prevStartAngle:k,size:i.size,i:l,totalItems:2,animBeginArr:this.animBeginArr,dur:q,shouldSetPrevPaths:!0,easing:a.globals.easing})}return{g:o,elHollow:f,dataLabels:v}}},{key:"drawHollow",value:function(i){var a=new X(this.ctx).drawCircle(2*i.size);return a.attr({class:"apexcharts-radialbar-hollow",cx:i.centerX,cy:i.centerY,r:i.size,fill:i.fill}),a}},{key:"drawHollowImage",value:function(i,a,s,r){var n=this.w,o=new ne(this.ctx),h=P.randomId(),c=n.config.plotOptions.radialBar.hollow.image;if(n.config.plotOptions.radialBar.hollow.imageClipped)o.clippedImgArea({width:s,height:s,image:c,patternID:"pattern".concat(n.globals.cuid).concat(h)}),r="url(#pattern".concat(n.globals.cuid).concat(h,")");else{var d=n.config.plotOptions.radialBar.hollow.imageWidth,g=n.config.plotOptions.radialBar.hollow.imageHeight;if(d===void 0&&g===void 0){var f=n.globals.dom.Paper.image(c).loaded(function(b){this.move(i.centerX-b.width/2+n.config.plotOptions.radialBar.hollow.imageOffsetX,i.centerY-b.height/2+n.config.plotOptions.radialBar.hollow.imageOffsetY)});a.add(f)}else{var x=n.globals.dom.Paper.image(c).loaded(function(b){this.move(i.centerX-d/2+n.config.plotOptions.radialBar.hollow.imageOffsetX,i.centerY-g/2+n.config.plotOptions.radialBar.hollow.imageOffsetY),this.size(d,g)});a.add(x)}}return r}},{key:"getStrokeWidth",value:function(i){var a=this.w;return i.size*(100-parseInt(a.config.plotOptions.radialBar.hollow.size,10))/100/(i.series.length+1)-this.margin}},{key:"onBarLabelClick",value:function(i){var a=parseInt(i.target.getAttribute("rel"),10)-1,s=this.barLabels.onClick,r=this.w;s&&s(r.globals.seriesNames[a],{w:r,seriesIndex:a})}}]),t}(),sa=function(p){Te(t,me);var e=Ie(t);function t(){return F(this,t),e.apply(this,arguments)}return R(t,[{key:"draw",value:function(i,a){var s=this.w,r=new X(this.ctx);this.rangeBarOptions=this.w.config.plotOptions.rangeBar,this.series=i,this.seriesRangeStart=s.globals.seriesRangeStart,this.seriesRangeEnd=s.globals.seriesRangeEnd,this.barHelpers.initVariables(i);for(var n=r.group({class:"apexcharts-rangebar-series apexcharts-plot-series"}),o=0;o0&&(this.visibleI=this.visibleI+1);var w=0,l=0,u=0;this.yRatio.length>1&&(this.yaxisIndex=s.globals.seriesYAxisReverseMap[b][0],u=b);var m=this.barHelpers.initialPositions();x=m.y,g=m.zeroW,f=m.x,l=m.barWidth,w=m.barHeight,h=m.xDivision,c=m.yDivision,d=m.zeroH;for(var A=r.group({class:"apexcharts-datalabels","data:realIndex":b}),k=r.group({class:"apexcharts-rangebar-goals-markers"}),S=0;S0});return this.isHorizontal?(r=b.config.plotOptions.bar.rangeBarGroupRows?o+g*u:o+c*this.visibleI+g*u,m>-1&&!b.config.plotOptions.bar.rangeBarOverlap&&(v=b.globals.seriesRange[a][m].overlaps).indexOf(y)>-1&&(r=(c=x.barHeight/v.length)*this.visibleI+g*(100-parseInt(this.barOptions.barHeight,10))/100/2+c*(this.visibleI+v.indexOf(y))+g*u)):(u>-1&&!b.globals.timescaleLabels.length&&(n=b.config.plotOptions.bar.rangeBarGroupRows?h+f*u:h+d*this.visibleI+f*u),m>-1&&!b.config.plotOptions.bar.rangeBarOverlap&&(v=b.globals.seriesRange[a][m].overlaps).indexOf(y)>-1&&(n=(d=x.barWidth/v.length)*this.visibleI+f*(100-parseInt(this.barOptions.barWidth,10))/100/2+d*(this.visibleI+v.indexOf(y))+f*u)),{barYPosition:r,barXPosition:n,barHeight:c,barWidth:d}}},{key:"drawRangeColumnPaths",value:function(i){var a=i.indexes,s=i.x,r=i.xDivision,n=i.barWidth,o=i.barXPosition,h=i.zeroH,c=this.w,d=a.i,g=a.j,f=a.realIndex,x=a.translationsIndex,b=this.yRatio[x],v=this.getRangeValue(f,g),y=Math.min(v.start,v.end),w=Math.max(v.start,v.end);this.series[d][g]===void 0||this.series[d][g]===null?y=h:(y=h-y/b,w=h-w/b);var l=Math.abs(w-y),u=this.barHelpers.getColumnPaths({barXPosition:o,barWidth:n,y1:y,y2:w,strokeWidth:this.strokeWidth,series:this.seriesRangeEnd,realIndex:f,i:f,j:g,w:c});if(c.globals.isXNumeric){var m=this.getBarXForNumericXAxis({x:s,j:g,realIndex:f,barWidth:n});s=m.x,o=m.barXPosition}else s+=r;return{pathTo:u.pathTo,pathFrom:u.pathFrom,barHeight:l,x:s,y:v.start<0&&v.end<0?y:w,goalY:this.barHelpers.getGoalValues("y",null,h,d,g,x),barXPosition:o}}},{key:"preventBarOverflow",value:function(i){var a=this.w;return i<0&&(i=0),i>a.globals.gridWidth&&(i=a.globals.gridWidth),i}},{key:"drawRangeBarPaths",value:function(i){var a=i.indexes,s=i.y,r=i.y1,n=i.y2,o=i.yDivision,h=i.barHeight,c=i.barYPosition,d=i.zeroW,g=this.w,f=a.realIndex,x=a.j,b=this.preventBarOverflow(d+r/this.invertedYRatio),v=this.preventBarOverflow(d+n/this.invertedYRatio),y=this.getRangeValue(f,x),w=Math.abs(v-b),l=this.barHelpers.getBarpaths({barYPosition:c,barHeight:h,x1:b,x2:v,strokeWidth:this.strokeWidth,series:this.seriesRangeEnd,i:f,realIndex:f,j:x,w:g});return g.globals.isXNumeric||(s+=o),{pathTo:l.pathTo,pathFrom:l.pathFrom,barWidth:w,x:y.start<0&&y.end<0?b:v,goalX:this.barHelpers.getGoalValues("x",d,null,f,x),y:s}}},{key:"getRangeValue",value:function(i,a){var s=this.w;return{start:s.globals.seriesRangeStart[i][a],end:s.globals.seriesRangeEnd[i][a]}}}]),t}(),ra=function(){function p(e){F(this,p),this.w=e.w,this.lineCtx=e}return R(p,[{key:"sameValueSeriesFix",value:function(e,t){var i=this.w;if((i.config.fill.type==="gradient"||i.config.fill.type[e]==="gradient")&&new $(this.lineCtx.ctx,i).seriesHaveSameValues(e)){var a=t[e].slice();a[a.length-1]=a[a.length-1]+1e-6,t[e]=a}return t}},{key:"calculatePoints",value:function(e){var t=e.series,i=e.realIndex,a=e.x,s=e.y,r=e.i,n=e.j,o=e.prevY,h=this.w,c=[],d=[];if(n===0){var g=this.lineCtx.categoryAxisCorrection+h.config.markers.offsetX;h.globals.isXNumeric&&(g=(h.globals.seriesX[i][0]-h.globals.minX)/this.lineCtx.xRatio+h.config.markers.offsetX),c.push(g),d.push(P.isNumber(t[r][0])?o+h.config.markers.offsetY:null),c.push(a+h.config.markers.offsetX),d.push(P.isNumber(t[r][n+1])?s+h.config.markers.offsetY:null)}else c.push(a+h.config.markers.offsetX),d.push(P.isNumber(t[r][n+1])?s+h.config.markers.offsetY:null);return{x:c,y:d}}},{key:"checkPreviousPaths",value:function(e){for(var t=e.pathFromLine,i=e.pathFromArea,a=e.realIndex,s=this.w,r=0;r0&&parseInt(n.realIndex,10)===parseInt(a,10)&&(n.type==="line"?(this.lineCtx.appendPathFrom=!1,t=s.globals.previousPaths[r].paths[0].d):n.type==="area"&&(this.lineCtx.appendPathFrom=!1,i=s.globals.previousPaths[r].paths[0].d,s.config.stroke.show&&s.globals.previousPaths[r].paths[1]&&(t=s.globals.previousPaths[r].paths[1].d)))}return{pathFromLine:t,pathFromArea:i}}},{key:"determineFirstPrevY",value:function(e){var t,i,a,s=e.i,r=e.realIndex,n=e.series,o=e.prevY,h=e.lineYPosition,c=e.translationsIndex,d=this.w,g=d.config.chart.stacked&&!d.globals.comboCharts||d.config.chart.stacked&&d.globals.comboCharts&&(!this.w.config.chart.stackOnlyBar||((t=this.w.config.series[r])===null||t===void 0?void 0:t.type)==="bar"||((i=this.w.config.series[r])===null||i===void 0?void 0:i.type)==="column");if(((a=n[s])===null||a===void 0?void 0:a[0])!==void 0)o=(h=g&&s>0?this.lineCtx.prevSeriesY[s-1][0]:this.lineCtx.zeroY)-n[s][0]/this.lineCtx.yRatio[c]+2*(this.lineCtx.isReversed?n[s][0]/this.lineCtx.yRatio[c]:0);else if(g&&s>0&&n[s][0]===void 0){for(var f=s-1;f>=0;f--)if(n[f][0]!==null&&n[f][0]!==void 0){o=h=this.lineCtx.prevSeriesY[f][0];break}}return{prevY:o,lineYPosition:h}}}]),p}(),na=function(p){for(var e,t,i,a,s=function(c){for(var d=[],g=c[0],f=c[1],x=d[0]=et(g,f),b=1,v=c.length-1;b9&&(a=3*i/Math.sqrt(a),s[o]=a*e,s[o+1]=a*t);for(var h=0;h<=r;h++)a=(p[Math.min(r,h+1)][0]-p[Math.max(0,h-1)][0])/(6*(1+s[h]*s[h])),n.push([a||0,s[h]*a||0]);return n},oa=function(p){var e=na(p),t=p[1],i=p[0],a=[],s=e[1],r=e[0];a.push(i,[i[0]+r[0],i[1]+r[1],t[0]-s[0],t[1]-s[1],t[0],t[1]]);for(var n=2,o=e.length;n1&&i[1].length<6){var a=i[0].length;i[1]=[2*i[0][a-2]-i[0][a-4],2*i[0][a-1]-i[0][a-3]].concat(i[1])}i[0]=i[0].slice(-2)}return i};function et(p,e){return(e[1]-p[1])/(e[0]-p[0])}var tt=function(){function p(e,t,i){F(this,p),this.ctx=e,this.w=e.w,this.xyRatios=t,this.pointsChart=!(this.w.config.chart.type!=="bubble"&&this.w.config.chart.type!=="scatter")||i,this.scatter=new Yt(this.ctx),this.noNegatives=this.w.globals.minX===Number.MAX_VALUE,this.lineHelpers=new ra(this),this.markers=new ye(this.ctx),this.prevSeriesY=[],this.categoryAxisCorrection=0,this.yaxisIndex=0}return R(p,[{key:"draw",value:function(e,t,i,a){var s,r=this.w,n=new X(this.ctx),o=r.globals.comboCharts?t:r.config.chart.type,h=n.group({class:"apexcharts-".concat(o,"-series apexcharts-plot-series")}),c=new $(this.ctx,r);this.yRatio=this.xyRatios.yRatio,this.zRatio=this.xyRatios.zRatio,this.xRatio=this.xyRatios.xRatio,this.baseLineY=this.xyRatios.baseLineY,e=c.getLogSeries(e),this.yRatio=c.getLogYRatios(this.yRatio),this.prevSeriesY=[];for(var d=[],g=0;g1?f:0;this._initSerieVariables(e,g,f);var b=[],v=[],y=[],w=r.globals.padHorizontal+this.categoryAxisCorrection;this.ctx.series.addCollapsedClassToSeries(this.elSeries,f),r.globals.isXNumeric&&r.globals.seriesX.length>0&&(w=(r.globals.seriesX[f][0]-r.globals.minX)/this.xRatio),y.push(w);var l,u=w,m=void 0,A=u,k=this.zeroY,S=this.zeroY;k=this.lineHelpers.determineFirstPrevY({i:g,realIndex:f,series:e,prevY:k,lineYPosition:0,translationsIndex:x}).prevY,r.config.stroke.curve==="monotoneCubic"&&e[g][0]===null?b.push(null):b.push(k),l=k,o==="rangeArea"&&(m=S=this.lineHelpers.determineFirstPrevY({i:g,realIndex:f,series:a,prevY:S,lineYPosition:0,translationsIndex:x}).prevY,v.push(b[0]!==null?S:null));var L=this._calculatePathsFrom({type:o,series:e,i:g,realIndex:f,translationsIndex:x,prevX:A,prevY:k,prevY2:S}),C=[b[0]],I=[v[0]],z={type:o,series:e,realIndex:f,translationsIndex:x,i:g,x:w,y:1,pX:u,pY:l,pathsFrom:L,linePaths:[],areaPaths:[],seriesIndex:i,lineYPosition:0,xArrj:y,yArrj:b,y2Arrj:v,seriesRangeEnd:a},M=this._iterateOverDataPoints(Y(Y({},z),{},{iterations:o==="rangeArea"?e[g].length-1:void 0,isRangeStart:!0}));if(o==="rangeArea"){for(var T=this._calculatePathsFrom({series:a,i:g,realIndex:f,prevX:A,prevY:S}),E=this._iterateOverDataPoints(Y(Y({},z),{},{series:a,xArrj:[w],yArrj:C,y2Arrj:I,pY:m,areaPaths:M.areaPaths,pathsFrom:T,iterations:a[g].length-1,isRangeStart:!1})),O=M.linePaths.length/2,D=0;D=0;H--)h.add(d[H]);else for(var W=0;W1&&(this.yaxisIndex=a.globals.seriesYAxisReverseMap[i],r=i),this.isReversed=a.config.yaxis[this.yaxisIndex]&&a.config.yaxis[this.yaxisIndex].reversed,this.zeroY=a.globals.gridHeight-this.baseLineY[r]-(this.isReversed?a.globals.gridHeight:0)+(this.isReversed?2*this.baseLineY[r]:0),this.areaBottomY=this.zeroY,(this.zeroY>a.globals.gridHeight||a.config.plotOptions.area.fillTo==="end")&&(this.areaBottomY=a.globals.gridHeight),this.categoryAxisCorrection=this.xDivision/2,this.elSeries=s.group({class:"apexcharts-series",zIndex:a.config.series[i].zIndex!==void 0?a.config.series[i].zIndex:i,seriesName:P.escapeString(a.globals.seriesNames[i])}),this.elPointsMain=s.group({class:"apexcharts-series-markers-wrap","data:realIndex":i}),this.elDataLabelsWrap=s.group({class:"apexcharts-datalabels","data:realIndex":i});var n=e[t].length===a.globals.dataPoints;this.elSeries.attr({"data:longestSeries":n,rel:t+1,"data:realIndex":i}),this.appendPathFrom=!0}},{key:"_calculatePathsFrom",value:function(e){var t,i,a,s,r=e.type,n=e.series,o=e.i,h=e.realIndex,c=e.translationsIndex,d=e.prevX,g=e.prevY,f=e.prevY2,x=this.w,b=new X(this.ctx);if(n[o][0]===null){for(var v=0;v0){var y=this.lineHelpers.checkPreviousPaths({pathFromLine:a,pathFromArea:s,realIndex:h});a=y.pathFromLine,s=y.pathFromArea}return{prevX:d,prevY:g,linePath:t,areaPath:i,pathFromLine:a,pathFromArea:s}}},{key:"_handlePaths",value:function(e){var t=e.type,i=e.realIndex,a=e.i,s=e.paths,r=this.w,n=new X(this.ctx),o=new ne(this.ctx);this.prevSeriesY.push(s.yArrj),r.globals.seriesXvalues[i]=s.xArrj,r.globals.seriesYvalues[i]=s.yArrj;var h=r.config.forecastDataPoints;if(h.count>0&&t!=="rangeArea"){var c=r.globals.seriesXvalues[i][r.globals.seriesXvalues[i].length-h.count-1],d=n.drawRect(c,0,r.globals.gridWidth,r.globals.gridHeight,0);r.globals.dom.elForecastMask.appendChild(d.node);var g=n.drawRect(0,0,c,r.globals.gridHeight,0);r.globals.dom.elNonForecastMask.appendChild(g.node)}this.pointsChart||r.globals.delayedElements.push({el:this.elPointsMain.node,index:i});var f={i:a,realIndex:i,animationDelay:a,initialSpeed:r.config.chart.animations.speed,dataChangeSpeed:r.config.chart.animations.dynamicAnimation.speed,className:"apexcharts-".concat(t)};if(t==="area")for(var x=o.fillPath({seriesNumber:i}),b=0;b0&&t!=="rangeArea"){var k=n.renderPaths(m);k.node.setAttribute("stroke-dasharray",h.dashArray),h.strokeWidth&&k.node.setAttribute("stroke-width",h.strokeWidth),this.elSeries.add(k),k.attr("clip-path","url(#forecastMask".concat(r.globals.cuid,")")),A.attr("clip-path","url(#nonForecastMask".concat(r.globals.cuid,")"))}}}}},{key:"_iterateOverDataPoints",value:function(e){var t,i,a=this,s=e.type,r=e.series,n=e.iterations,o=e.realIndex,h=e.translationsIndex,c=e.i,d=e.x,g=e.y,f=e.pX,x=e.pY,b=e.pathsFrom,v=e.linePaths,y=e.areaPaths,w=e.seriesIndex,l=e.lineYPosition,u=e.xArrj,m=e.yArrj,A=e.y2Arrj,k=e.isRangeStart,S=e.seriesRangeEnd,L=this.w,C=new X(this.ctx),I=this.yRatio,z=b.prevY,M=b.linePath,T=b.areaPath,E=b.pathFromLine,O=b.pathFromArea,D=P.isNumber(L.globals.minYArr[o])?L.globals.minYArr[o]:L.globals.minY;n||(n=L.globals.dataPoints>1?L.globals.dataPoints-1:L.globals.dataPoints);var H=function(Q,ee){return ee-Q/I[h]+2*(a.isReversed?Q/I[h]:0)},W=g,N=L.config.chart.stacked&&!L.globals.comboCharts||L.config.chart.stacked&&L.globals.comboCharts&&(!this.w.config.chart.stackOnlyBar||((t=this.w.config.series[o])===null||t===void 0?void 0:t.type)==="bar"||((i=this.w.config.series[o])===null||i===void 0?void 0:i.type)==="column"),B=L.config.stroke.curve;Array.isArray(B)&&(B=Array.isArray(w)?B[w[c]]:B[c]);for(var q,Z=0,j=0;j0&&L.globals.collapsedSeries.length0;ee--){if(!(L.globals.collapsedSeriesIndices.indexOf(w?.[ee]||ee)>-1))return ee;ee--}return 0}(c-1)][j+1]:l=this.zeroY:l=this.zeroY,se?g=H(D,l):(g=H(r[c][j+1],l),s==="rangeArea"&&(W=H(S[c][j+1],l))),u.push(d),!se||L.config.stroke.curve!=="smooth"&&L.config.stroke.curve!=="monotoneCubic"?(m.push(g),A.push(W)):(m.push(null),A.push(null));var G=this.lineHelpers.calculatePoints({series:r,x:d,y:g,realIndex:o,i:c,j,prevY:z}),_=this._createPaths({type:s,series:r,i:c,realIndex:o,j,x:d,y:g,y2:W,xArrj:u,yArrj:m,y2Arrj:A,pX:f,pY:x,pathState:Z,segmentStartX:q,linePath:M,areaPath:T,linePaths:v,areaPaths:y,curve:B,isRangeStart:k});y=_.areaPaths,v=_.linePaths,f=_.pX,x=_.pY,Z=_.pathState,q=_.segmentStartX,T=_.areaPath,M=_.linePath,!this.appendPathFrom||B==="monotoneCubic"&&s==="rangeArea"||(E+=C.line(d,this.zeroY),O+=C.line(d,this.zeroY)),this.handleNullDataPoints(r,G,c,j,o),this._handleMarkersAndLabels({type:s,pointsPos:G,i:c,j,realIndex:o,isRangeStart:k})}return{yArrj:m,xArrj:u,pathFromArea:O,areaPaths:y,pathFromLine:E,linePaths:v,linePath:M,areaPath:T}}},{key:"_handleMarkersAndLabels",value:function(e){var t=e.type,i=e.pointsPos,a=e.isRangeStart,s=e.i,r=e.j,n=e.realIndex,o=this.w,h=new be(this.ctx);if(this.pointsChart)this.scatter.draw(this.elSeries,r,{realIndex:n,pointsPos:i,zRatio:this.zRatio,elParent:this.elPointsMain});else{o.globals.series[s].length>1&&this.elPointsMain.node.classList.add("apexcharts-element-hidden");var c=this.markers.plotChartMarkers(i,n,r+1);c!==null&&this.elPointsMain.add(c)}var d=h.drawDataLabel({type:t,isRangeStart:a,pos:i,i:n,j:r+1});d!==null&&this.elDataLabelsWrap.add(d)}},{key:"_createPaths",value:function(e){var t=e.type,i=e.series,a=e.i;e.realIndex;var s=e.j,r=e.x,n=e.y,o=e.xArrj,h=e.yArrj,c=e.y2,d=e.y2Arrj,g=e.pX,f=e.pY,x=e.pathState,b=e.segmentStartX,v=e.linePath,y=e.areaPath,w=e.linePaths,l=e.areaPaths,u=e.curve,m=e.isRangeStart;this.w;var A,k=new X(this.ctx),S=this.areaBottomY,L=t==="rangeArea",C=t==="rangeArea"&&m;switch(u){case"monotoneCubic":var I=m?h:d;switch(x){case 0:if(I[s+1]===null)break;x=1;case 1:if(!(L?o.length===i[a].length:s===i[a].length-2))break;case 2:var z=m?o:o.slice().reverse(),M=m?I:I.slice().reverse(),T=(A=M,z.map(function(V,G){return[V,A[G]]}).filter(function(V){return V[1]!==null})),E=T.length>1?oa(T):T,O=[];L&&(C?l=T:O=l.reverse());var D=0,H=0;if(function(V,G){for(var _=function(Se){var ae=[],le=0;return Se.forEach(function(Si){Si!==null?le++:le>0&&(ae.push(le),le=0)}),le>0&&ae.push(le),ae}(V),Q=[],ee=0,oe=0;ee<_.length;oe+=_[ee++])Q[ee]=la(G,oe,oe+_[ee]);return Q}(M,E).forEach(function(V){D++;var G=function(ee){for(var oe="",Se=0;Se4?(oe+="C".concat(ae[0],", ").concat(ae[1]),oe+=", ".concat(ae[2],", ").concat(ae[3]),oe+=", ".concat(ae[4],", ").concat(ae[5])):le>2&&(oe+="S".concat(ae[0],", ").concat(ae[1]),oe+=", ".concat(ae[2],", ").concat(ae[3]))}return oe}(V),_=H,Q=(H+=V.length)-1;C?v=k.move(T[_][0],T[_][1])+G:L?v=k.move(O[_][0],O[_][1])+k.line(T[_][0],T[_][1])+G+k.line(O[Q][0],O[Q][1]):(v=k.move(T[_][0],T[_][1])+G,y=v+k.line(T[Q][0],S)+k.line(T[_][0],S)+"z",l.push(y)),w.push(v)}),L&&D>1&&!C){var W=w.slice(D).reverse();w.splice(D),W.forEach(function(V){return w.push(V)})}x=0}break;case"smooth":var N=.35*(r-g);if(i[a][s]===null)x=0;else switch(x){case 0:if(b=g,v=C?k.move(g,d[s])+k.line(g,f):k.move(g,f),y=k.move(g,f),x=1,s=i[a].length-2&&(C&&(v+=k.curve(r,n,r,n,r,c)+k.move(r,c)),y+=k.curve(r,n,r,n,r,S)+k.line(b,S)+"z",w.push(v),l.push(y),x=-1)}}g=r,f=n;break;default:var Z=function(V,G,_){var Q=[];switch(V){case"stepline":Q=k.line(G,null,"H")+k.line(null,_,"V");break;case"linestep":Q=k.line(null,_,"V")+k.line(G,null,"H");break;case"straight":Q=k.line(G,_)}return Q};if(i[a][s]===null)x=0;else switch(x){case 0:if(b=g,v=C?k.move(g,d[s])+k.line(g,f):k.move(g,f),y=k.move(g,f),x=1,s=i[a].length-2&&(C&&(v+=k.line(r,c)),y+=k.line(r,S)+k.line(b,S)+"z",w.push(v),l.push(y),x=-1)}}g=r,f=n}return{linePaths:w,areaPaths:l,pX:g,pY:f,pathState:x,segmentStartX:b,linePath:v,areaPath:y}}},{key:"handleNullDataPoints",value:function(e,t,i,a,s){var r=this.w;if(e[i][a]===null&&r.config.markers.showNullDataPoints||e[i].length===1){var n=this.strokeWidth-r.config.markers.strokeWidth/2;n>0||(n=0);var o=this.markers.plotChartMarkers(t,s,a+1,n,!0);o!==null&&this.elPointsMain.add(o)}}}]),p}();window.TreemapSquared={},window.TreemapSquared.generate=function(){function p(n,o,h,c){this.xoffset=n,this.yoffset=o,this.height=c,this.width=h,this.shortestEdge=function(){return Math.min(this.height,this.width)},this.getCoordinates=function(d){var g,f=[],x=this.xoffset,b=this.yoffset,v=s(d)/this.height,y=s(d)/this.width;if(this.width>=this.height)for(g=0;g=this.height){var f=d/this.height,x=this.width-f;g=new p(this.xoffset+f,this.yoffset,x,this.height)}else{var b=d/this.width,v=this.height-b;g=new p(this.xoffset,this.yoffset+b,this.width,v)}return g}}function e(n,o,h,c,d){c=c===void 0?0:c,d=d===void 0?0:d;var g=t(function(f,x){var b,v=[],y=x/s(f);for(b=0;b=l}(o,g=n[0],d)?(o.push(g),t(n.slice(1),o,h,c)):(f=h.cutArea(s(o),c),c.push(h.getCoordinates(o)),t(n,[],f,c)),c;c.push(h.getCoordinates(o))}function i(n,o){var h=Math.min.apply(Math,n),c=Math.max.apply(Math,n),d=s(n);return Math.max(Math.pow(o,2)*c/Math.pow(d,2),Math.pow(d,2)/(Math.pow(o,2)*h))}function a(n){return n&&n.constructor===Array}function s(n){var o,h=0;for(o=0;or-a&&h.width<=n-s){var c=o.rotateAroundCenter(e.node);e.node.setAttribute("transform","rotate(-90 ".concat(c.x," ").concat(c.y,") translate(").concat(h.height/3,")"))}}},{key:"truncateLabels",value:function(e,t,i,a,s,r){var n=new X(this.ctx),o=n.getTextRects(e,t).width+this.w.config.stroke.width+5>s-i&&r-a>s-i?r-a:s-i,h=n.getTextBasedOnMaxWidth({text:e,maxWidth:o,fontSize:t});return e.length!==h.length&&o/t<5?"":h}},{key:"animateTreemap",value:function(e,t,i,a){var s=new ve(this.ctx);s.animateRect(e,{x:t.x,y:t.y,width:t.width,height:t.height},{x:i.x,y:i.y,width:i.width,height:i.height},a,function(){s.animationCompleted(e)})}}]),p}(),_t=86400,ca=10/_t,da=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w,this.timeScaleArray=[],this.utc=this.w.config.xaxis.labels.datetimeUTC}return R(p,[{key:"calculateTimeScaleTicks",value:function(e,t){var i=this,a=this.w;if(a.globals.allSeriesCollapsed)return a.globals.labels=[],a.globals.timescaleLabels=[],[];var s=new K(this.ctx),r=(t-e)/864e5;this.determineInterval(r),a.globals.disableZoomIn=!1,a.globals.disableZoomOut=!1,r5e4&&(a.globals.disableZoomOut=!0);var n=s.getTimeUnitsfromTimestamp(e,t,this.utc),o=a.globals.gridWidth/r,h=o/24,c=h/60,d=c/60,g=Math.floor(24*r),f=Math.floor(1440*r),x=Math.floor(r*_t),b=Math.floor(r),v=Math.floor(r/30),y=Math.floor(r/365),w={minMillisecond:n.minMillisecond,minSecond:n.minSecond,minMinute:n.minMinute,minHour:n.minHour,minDate:n.minDate,minMonth:n.minMonth,minYear:n.minYear},l={firstVal:w,currentMillisecond:w.minMillisecond,currentSecond:w.minSecond,currentMinute:w.minMinute,currentHour:w.minHour,currentMonthDate:w.minDate,currentDate:w.minDate,currentMonth:w.minMonth,currentYear:w.minYear,daysWidthOnXAxis:o,hoursWidthOnXAxis:h,minutesWidthOnXAxis:c,secondsWidthOnXAxis:d,numberOfSeconds:x,numberOfMinutes:f,numberOfHours:g,numberOfDays:b,numberOfMonths:v,numberOfYears:y};switch(this.tickInterval){case"years":this.generateYearScale(l);break;case"months":case"half_year":this.generateMonthScale(l);break;case"months_days":case"months_fortnight":case"days":case"week_days":this.generateDayScale(l);break;case"hours":this.generateHourScale(l);break;case"minutes_fives":case"minutes":this.generateMinuteScale(l);break;case"seconds_tens":case"seconds_fives":case"seconds":this.generateSecondScale(l)}var u=this.timeScaleArray.map(function(m){var A={position:m.position,unit:m.unit,year:m.year,day:m.day?m.day:1,hour:m.hour?m.hour:0,month:m.month+1};return m.unit==="month"?Y(Y({},A),{},{day:1,value:m.value+1}):m.unit==="day"||m.unit==="hour"?Y(Y({},A),{},{value:m.value}):m.unit==="minute"?Y(Y({},A),{},{value:m.value,minute:m.value}):m.unit==="second"?Y(Y({},A),{},{value:m.value,minute:m.minute,second:m.second}):m});return u.filter(function(m){var A=1,k=Math.ceil(a.globals.gridWidth/120),S=m.value;a.config.xaxis.tickAmount!==void 0&&(k=a.config.xaxis.tickAmount),u.length>k&&(A=Math.floor(u.length/k));var L=!1,C=!1;switch(i.tickInterval){case"years":m.unit==="year"&&(L=!0);break;case"half_year":A=7,m.unit==="year"&&(L=!0);break;case"months":A=1,m.unit==="year"&&(L=!0);break;case"months_fortnight":A=15,m.unit!=="year"&&m.unit!=="month"||(L=!0),S===30&&(C=!0);break;case"months_days":A=10,m.unit==="month"&&(L=!0),S===30&&(C=!0);break;case"week_days":A=8,m.unit==="month"&&(L=!0);break;case"days":A=1,m.unit==="month"&&(L=!0);break;case"hours":m.unit==="day"&&(L=!0);break;case"minutes_fives":case"seconds_fives":S%5!=0&&(C=!0);break;case"seconds_tens":S%10!=0&&(C=!0)}if(i.tickInterval==="hours"||i.tickInterval==="minutes_fives"||i.tickInterval==="seconds_tens"||i.tickInterval==="seconds_fives"){if(!C)return!0}else if((S%A==0||L)&&!C)return!0})}},{key:"recalcDimensionsBasedOnFormat",value:function(e,t){var i=this.w,a=this.formatDates(e),s=this.removeOverlappingTS(a);i.globals.timescaleLabels=s.slice(),new Ne(this.ctx).plotCoords()}},{key:"determineInterval",value:function(e){var t=24*e,i=60*t;switch(!0){case e/365>5:this.tickInterval="years";break;case e>800:this.tickInterval="half_year";break;case e>180:this.tickInterval="months";break;case e>90:this.tickInterval="months_fortnight";break;case e>60:this.tickInterval="months_days";break;case e>30:this.tickInterval="week_days";break;case e>2:this.tickInterval="days";break;case t>2.4:this.tickInterval="hours";break;case i>15:this.tickInterval="minutes_fives";break;case i>5:this.tickInterval="minutes";break;case i>1:this.tickInterval="seconds_tens";break;case 60*i>20:this.tickInterval="seconds_fives";break;default:this.tickInterval="seconds"}}},{key:"generateYearScale",value:function(e){var t=e.firstVal,i=e.currentMonth,a=e.currentYear,s=e.daysWidthOnXAxis,r=e.numberOfYears,n=t.minYear,o=0,h=new K(this.ctx),c="year";if(t.minDate>1||t.minMonth>0){var d=h.determineRemainingDaysOfYear(t.minYear,t.minMonth,t.minDate);o=(h.determineDaysOfYear(t.minYear)-d+1)*s,n=t.minYear+1,this.timeScaleArray.push({position:o,value:n,unit:c,year:n,month:P.monthMod(i+1)})}else t.minDate===1&&t.minMonth===0&&this.timeScaleArray.push({position:o,value:n,unit:c,year:a,month:P.monthMod(i+1)});for(var g=n,f=o,x=0;x1){h=(c.determineDaysOfMonths(a+1,t.minYear)-i+1)*r,o=P.monthMod(a+1);var f=s+g,x=P.monthMod(o),b=o;o===0&&(d="year",b=f,x=1,f+=g+=1),this.timeScaleArray.push({position:h,value:b,unit:d,year:f,month:x})}else this.timeScaleArray.push({position:h,value:o,unit:d,year:s,month:P.monthMod(a)});for(var v=o+1,y=h,w=0,l=1;wn.determineDaysOfMonths(u+1,m)&&(c=1,o="month",f=u+=1),u},g=(24-t.minHour)*s,f=h,x=d(c,i,a);t.minHour===0&&t.minDate===1?(g=0,f=P.monthMod(t.minMonth),o="month",c=t.minDate):t.minDate!==1&&t.minHour===0&&t.minMinute===0&&(g=0,h=t.minDate,f=h,x=d(c=h,i,a)),this.timeScaleArray.push({position:g,value:f,unit:o,year:this._getYear(a,x,0),month:P.monthMod(x),day:c});for(var b=g,v=0;vo.determineDaysOfMonths(k+1,s)&&(v=1,k+=1),{month:k,date:v}},d=function(A,k){return A>o.determineDaysOfMonths(k+1,s)?k+=1:k},g=60-(t.minMinute+t.minSecond/60),f=g*r,x=t.minHour+1,b=x;g===60&&(f=0,b=x=t.minHour);var v=i;b>=24&&(b=0,v+=1,h="day");var y=c(v,a).month;y=d(v,y),this.timeScaleArray.push({position:f,value:x,unit:h,day:v,hour:b,year:s,month:P.monthMod(y)}),b++;for(var w=f,l=0;l=24&&(b=0,h="day",y=c(v+=1,y).month,y=d(v,y));var u=this._getYear(s,y,0);w=60*r+w;var m=b===0?v:b;this.timeScaleArray.push({position:w,value:m,unit:h,hour:b,day:v,year:u,month:P.monthMod(y)}),b++}}},{key:"generateMinuteScale",value:function(e){for(var t=e.currentMillisecond,i=e.currentSecond,a=e.currentMinute,s=e.currentHour,r=e.currentDate,n=e.currentMonth,o=e.currentYear,h=e.minutesWidthOnXAxis,c=e.secondsWidthOnXAxis,d=e.numberOfMinutes,g=a+1,f=r,x=n,b=o,v=s,y=(60-i-t/1e3)*c,w=0;w=60&&(g=0,(v+=1)===24&&(v=0)),this.timeScaleArray.push({position:y,value:g,unit:"minute",hour:v,minute:g,day:f,year:this._getYear(b,x,0),month:P.monthMod(x)}),y+=h,g++}},{key:"generateSecondScale",value:function(e){for(var t=e.currentMillisecond,i=e.currentSecond,a=e.currentMinute,s=e.currentHour,r=e.currentDate,n=e.currentMonth,o=e.currentYear,h=e.secondsWidthOnXAxis,c=e.numberOfSeconds,d=i+1,g=a,f=r,x=n,b=o,v=s,y=(1e3-t)/1e3*h,w=0;w=60&&(d=0,++g>=60&&(g=0,++v===24&&(v=0))),this.timeScaleArray.push({position:y,value:d,unit:"second",hour:v,minute:g,second:d,day:f,year:this._getYear(b,x,0),month:P.monthMod(x)}),y+=h,d++}},{key:"createRawDateString",value:function(e,t){var i=e.year;return e.month===0&&(e.month=1),i+="-"+("0"+e.month.toString()).slice(-2),e.unit==="day"?i+=e.unit==="day"?"-"+("0"+t).slice(-2):"-01":i+="-"+("0"+(e.day?e.day:"1")).slice(-2),e.unit==="hour"?i+=e.unit==="hour"?"T"+("0"+t).slice(-2):"T00":i+="T"+("0"+(e.hour?e.hour:"0")).slice(-2),e.unit==="minute"?i+=":"+("0"+t).slice(-2):i+=":"+(e.minute?("0"+e.minute).slice(-2):"00"),e.unit==="second"?i+=":"+("0"+t).slice(-2):i+=":00",this.utc&&(i+=".000Z"),i}},{key:"formatDates",value:function(e){var t=this,i=this.w;return e.map(function(a){var s=a.value.toString(),r=new K(t.ctx),n=t.createRawDateString(a,s),o=r.getDate(r.parseDate(n));if(t.utc||(o=r.getDate(r.parseDateWithTimezone(n))),i.config.xaxis.labels.format===void 0){var h="dd MMM",c=i.config.xaxis.labels.datetimeFormatter;a.unit==="year"&&(h=c.year),a.unit==="month"&&(h=c.month),a.unit==="day"&&(h=c.day),a.unit==="hour"&&(h=c.hour),a.unit==="minute"&&(h=c.minute),a.unit==="second"&&(h=c.second),s=r.formatDate(o,h)}else s=r.formatDate(o,i.config.xaxis.labels.format);return{dateString:n,position:a.position,value:s,unit:a.unit,year:a.year,month:a.month}})}},{key:"removeOverlappingTS",value:function(e){var t,i=this,a=new X(this.ctx),s=!1;e.length>0&&e[0].value&&e.every(function(o){return o.value.length===e[0].value.length})&&(s=!0,t=a.getTextRects(e[0].value).width);var r=0,n=e.map(function(o,h){if(h>0&&i.w.config.xaxis.labels.hideOverlappingLabels){var c=s?t:a.getTextRects(e[r].value).width,d=e[r].position;return o.position>d+c+10?(r=h,o):null}return o});return n=n.filter(function(o){return o!==null})}},{key:"_getYear",value:function(e,t,i){return e+Math.floor(t/12)+i}}]),p}(),ga=function(){function p(e,t){F(this,p),this.ctx=t,this.w=t.w,this.el=e}return R(p,[{key:"setupElements",value:function(){var e=this.w.globals,t=this.w.config,i=t.chart.type;e.axisCharts=["line","area","bar","rangeBar","rangeArea","candlestick","boxPlot","scatter","bubble","radar","heatmap","treemap"].indexOf(i)>-1,e.xyCharts=["line","area","bar","rangeBar","rangeArea","candlestick","boxPlot","scatter","bubble"].indexOf(i)>-1,e.isBarHorizontal=(t.chart.type==="bar"||t.chart.type==="rangeBar"||t.chart.type==="boxPlot")&&t.plotOptions.bar.horizontal,e.chartClass=".apexcharts"+e.chartID,e.dom.baseEl=this.el,e.dom.elWrap=document.createElement("div"),X.setAttrs(e.dom.elWrap,{id:e.chartClass.substring(1),class:"apexcharts-canvas "+e.chartClass.substring(1)}),this.el.appendChild(e.dom.elWrap),e.dom.Paper=new window.SVG.Doc(e.dom.elWrap),e.dom.Paper.attr({class:"apexcharts-svg","xmlns:data":"ApexChartsNS",transform:"translate(".concat(t.chart.offsetX,", ").concat(t.chart.offsetY,")")}),e.dom.Paper.node.style.background=t.theme.mode!=="dark"||t.chart.background?t.theme.mode!=="light"||t.chart.background?t.chart.background:"#fff":"#424242",this.setSVGDimensions(),e.dom.elLegendForeign=document.createElementNS(e.SVGNS,"foreignObject"),X.setAttrs(e.dom.elLegendForeign,{x:0,y:0,width:e.svgWidth,height:e.svgHeight}),e.dom.elLegendWrap=document.createElement("div"),e.dom.elLegendWrap.classList.add("apexcharts-legend"),e.dom.elLegendWrap.setAttribute("xmlns","http://www.w3.org/1999/xhtml"),e.dom.elLegendForeign.appendChild(e.dom.elLegendWrap),e.dom.Paper.node.appendChild(e.dom.elLegendForeign),e.dom.elGraphical=e.dom.Paper.group().attr({class:"apexcharts-inner apexcharts-graphical"}),e.dom.elDefs=e.dom.Paper.defs(),e.dom.Paper.add(e.dom.elGraphical),e.dom.elGraphical.add(e.dom.elDefs)}},{key:"plotChartType",value:function(e,t){var i=this.w,a=i.config,s=i.globals,r={series:[],i:[]},n={series:[],i:[]},o={series:[],i:[]},h={series:[],i:[]},c={series:[],i:[]},d={series:[],i:[]},g={series:[],i:[]},f={series:[],i:[]},x={series:[],seriesRangeEnd:[],i:[]},b=a.chart.type!==void 0?a.chart.type:"line",v=null,y=0;s.series.forEach(function(M,T){var E=e[T].type||b;switch(E){case"column":case"bar":c.series.push(M),c.i.push(T),i.globals.columnSeries=c;break;case"area":n.series.push(M),n.i.push(T);break;case"line":r.series.push(M),r.i.push(T);break;case"scatter":o.series.push(M),o.i.push(T);break;case"bubble":h.series.push(M),h.i.push(T);break;case"candlestick":d.series.push(M),d.i.push(T);break;case"boxPlot":g.series.push(M),g.i.push(T);break;case"rangeBar":f.series.push(M),f.i.push(T);break;case"rangeArea":x.series.push(s.seriesRangeStart[T]),x.seriesRangeEnd.push(s.seriesRangeEnd[T]),x.i.push(T);break;case"heatmap":case"treemap":case"pie":case"donut":case"polarArea":case"radialBar":case"radar":v=E;break;default:console.warn("You have specified an unrecognized series type (",E,").")}b!==E&&E!=="scatter"&&y++}),y>0&&(v!==null&&console.warn("Chart or series type ",v," can not appear with other chart or series types."),c.series.length>0&&a.plotOptions.bar.horizontal&&(y-=c.length,c={series:[],i:[]},i.globals.columnSeries={series:[],i:[]},console.warn("Horizontal bars are not supported in a mixed/combo chart. Please turn off `plotOptions.bar.horizontal`"))),s.comboCharts||(s.comboCharts=y>0);var w=new tt(this.ctx,t),l=new Qe(this.ctx,t);this.ctx.pie=new Vt(this.ctx);var u=new aa(this.ctx);this.ctx.rangeBar=new sa(this.ctx,t);var m=new ia(this.ctx),A=[];if(s.comboCharts){var k,S,L=new $(this.ctx);if(n.series.length>0&&(k=A).push.apply(k,te(L.drawSeriesByGroup(n,s.areaGroups,"area",w))),c.series.length>0)if(i.config.chart.stacked){var C=new St(this.ctx,t);A.push(C.draw(c.series,c.i))}else this.ctx.bar=new me(this.ctx,t),A.push(this.ctx.bar.draw(c.series,c.i));if(x.series.length>0&&A.push(w.draw(x.series,"rangeArea",x.i,x.seriesRangeEnd)),r.series.length>0&&(S=A).push.apply(S,te(L.drawSeriesByGroup(r,s.lineGroups,"line",w))),d.series.length>0&&A.push(l.draw(d.series,"candlestick",d.i)),g.series.length>0&&A.push(l.draw(g.series,"boxPlot",g.i)),f.series.length>0&&A.push(this.ctx.rangeBar.draw(f.series,f.i)),o.series.length>0){var I=new tt(this.ctx,t,!0);A.push(I.draw(o.series,"scatter",o.i))}if(h.series.length>0){var z=new tt(this.ctx,t,!0);A.push(z.draw(h.series,"bubble",h.i))}}else switch(a.chart.type){case"line":A=w.draw(s.series,"line");break;case"area":A=w.draw(s.series,"area");break;case"bar":a.chart.stacked?A=new St(this.ctx,t).draw(s.series):(this.ctx.bar=new me(this.ctx,t),A=this.ctx.bar.draw(s.series));break;case"candlestick":A=new Qe(this.ctx,t).draw(s.series,"candlestick");break;case"boxPlot":A=new Qe(this.ctx,t).draw(s.series,a.chart.type);break;case"rangeBar":A=this.ctx.rangeBar.draw(s.series);break;case"rangeArea":A=w.draw(s.seriesRangeStart,"rangeArea",void 0,s.seriesRangeEnd);break;case"heatmap":A=new ta(this.ctx,t).draw(s.series);break;case"treemap":A=new ha(this.ctx,t).draw(s.series);break;case"pie":case"donut":case"polarArea":A=this.ctx.pie.draw(s.series);break;case"radialBar":A=u.draw(s.series);break;case"radar":A=m.draw(s.series);break;default:A=w.draw(s.series)}return A}},{key:"setSVGDimensions",value:function(){var e=this.w.globals,t=this.w.config;t.chart.width||(t.chart.width="100%"),t.chart.height||(t.chart.height="auto"),e.svgWidth=t.chart.width,e.svgHeight=t.chart.height;var i=P.getDimensions(this.el),a=t.chart.width.toString().split(/[0-9]+/g).pop();a==="%"?P.isNumber(i[0])&&(i[0].width===0&&(i=P.getDimensions(this.el.parentNode)),e.svgWidth=i[0]*parseInt(t.chart.width,10)/100):a!=="px"&&a!==""||(e.svgWidth=parseInt(t.chart.width,10));var s=String(t.chart.height).toString().split(/[0-9]+/g).pop();if(e.svgHeight!=="auto"&&e.svgHeight!=="")if(s==="%"){var r=P.getDimensions(this.el.parentNode);e.svgHeight=r[1]*parseInt(t.chart.height,10)/100}else e.svgHeight=parseInt(t.chart.height,10);else e.axisCharts?e.svgHeight=e.svgWidth/1.61:e.svgHeight=e.svgWidth/1.2;if(e.svgWidth<0&&(e.svgWidth=0),e.svgHeight<0&&(e.svgHeight=0),X.setAttrs(e.dom.Paper.node,{width:e.svgWidth,height:e.svgHeight}),s!=="%"){var n=t.chart.sparkline.enabled?0:e.axisCharts?t.chart.parentHeightOffset:0;e.dom.Paper.node.parentNode.parentNode.style.minHeight=e.svgHeight+n+"px"}e.dom.elWrap.style.width=e.svgWidth+"px",e.dom.elWrap.style.height=e.svgHeight+"px"}},{key:"shiftGraphPosition",value:function(){var e=this.w.globals,t=e.translateY,i={transform:"translate("+e.translateX+", "+t+")"};X.setAttrs(e.dom.elGraphical.node,i)}},{key:"resizeNonAxisCharts",value:function(){var e=this.w,t=e.globals,i=0,a=e.config.chart.sparkline.enabled?1:15;a+=e.config.grid.padding.bottom,e.config.legend.position!=="top"&&e.config.legend.position!=="bottom"||!e.config.legend.show||e.config.legend.floating||(i=new Dt(this.ctx).legendHelpers.getLegendDimensions().clwh+10);var s=e.globals.dom.baseEl.querySelector(".apexcharts-radialbar, .apexcharts-pie"),r=2.05*e.globals.radialSize;if(s&&!e.config.chart.sparkline.enabled&&e.config.plotOptions.radialBar.startAngle!==0){var n=P.getBoundingClientRect(s);r=n.bottom;var o=n.bottom-n.top;r=Math.max(2.05*e.globals.radialSize,o)}var h=r+t.translateY+i+a;t.dom.elLegendForeign&&t.dom.elLegendForeign.setAttribute("height",h),e.config.chart.height&&String(e.config.chart.height).indexOf("%")>0||(t.dom.elWrap.style.height=h+"px",X.setAttrs(t.dom.Paper.node,{height:h}),t.dom.Paper.node.parentNode.parentNode.style.minHeight=h+"px")}},{key:"coreCalculations",value:function(){new rt(this.ctx).init()}},{key:"resetGlobals",value:function(){var e=this,t=function(){return e.w.config.series.map(function(s){return[]})},i=new Et,a=this.w.globals;i.initGlobalVars(a),a.seriesXvalues=t(),a.seriesYvalues=t()}},{key:"isMultipleY",value:function(){if(this.w.config.yaxis.constructor===Array&&this.w.config.yaxis.length>1)return this.w.globals.isMultipleYAxis=!0,!0}},{key:"xySettings",value:function(){var e=null,t=this.w;if(t.globals.axisCharts){if(t.config.xaxis.crosshairs.position==="back"&&new nt(this.ctx).drawXCrosshairs(),t.config.yaxis[0].crosshairs.position==="back"&&new nt(this.ctx).drawYCrosshairs(),t.config.xaxis.type==="datetime"&&t.config.xaxis.labels.formatter===void 0){this.ctx.timeScale=new da(this.ctx);var i=[];isFinite(t.globals.minX)&&isFinite(t.globals.maxX)&&!t.globals.isBarHorizontal?i=this.ctx.timeScale.calculateTimeScaleTicks(t.globals.minX,t.globals.maxX):t.globals.isBarHorizontal&&(i=this.ctx.timeScale.calculateTimeScaleTicks(t.globals.minY,t.globals.maxY)),this.ctx.timeScale.recalcDimensionsBasedOnFormat(i)}e=new $(this.ctx).getCalculatedRatios()}return e}},{key:"updateSourceChart",value:function(e){this.ctx.w.globals.selection=void 0,this.ctx.updateHelpers._updateOptions({chart:{selection:{xaxis:{min:e.w.globals.minX,max:e.w.globals.maxX}}}},!1,!1)}},{key:"setupBrushHandler",value:function(){var e=this,t=this.w;if(t.config.chart.brush.enabled&&typeof t.config.chart.events.selection!="function"){var i=Array.isArray(t.config.chart.brush.targets)?t.config.chart.brush.targets:[t.config.chart.brush.target];i.forEach(function(a){var s=ApexCharts.getChartByID(a);s.w.globals.brushSource=e.ctx,typeof s.w.config.chart.events.zoomed!="function"&&(s.w.config.chart.events.zoomed=function(){e.updateSourceChart(s)}),typeof s.w.config.chart.events.scrolled!="function"&&(s.w.config.chart.events.scrolled=function(){e.updateSourceChart(s)})}),t.config.chart.events.selection=function(a,s){i.forEach(function(r){ApexCharts.getChartByID(r).ctx.updateHelpers._updateOptions({xaxis:{min:s.xaxis.min,max:s.xaxis.max}},!1,!1,!1,!1)})}}}}]),p}(),ua=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"_updateOptions",value:function(e){var t=this,i=arguments.length>1&&arguments[1]!==void 0&&arguments[1],a=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2],s=!(arguments.length>3&&arguments[3]!==void 0)||arguments[3],r=arguments.length>4&&arguments[4]!==void 0&&arguments[4];return new Promise(function(n){var o=[t.ctx];s&&(o=t.ctx.getSyncedCharts()),t.ctx.w.globals.isExecCalled&&(o=[t.ctx],t.ctx.w.globals.isExecCalled=!1),o.forEach(function(h,c){var d=h.w;if(d.globals.shouldAnimate=a,i||(d.globals.resized=!0,d.globals.dataChanged=!0,a&&h.series.getPreviousPaths()),e&&J(e)==="object"&&(h.config=new Pe(e),e=$.extendArrayProps(h.config,e,d),h.w.globals.chartID!==t.ctx.w.globals.chartID&&delete e.series,d.config=P.extend(d.config,e),r&&(d.globals.lastXAxis=e.xaxis?P.clone(e.xaxis):[],d.globals.lastYAxis=e.yaxis?P.clone(e.yaxis):[],d.globals.initialConfig=P.extend({},d.config),d.globals.initialSeries=P.clone(d.config.series),e.series))){for(var g=0;g2&&arguments[2]!==void 0&&arguments[2];return new Promise(function(s){var r,n=i.w;return n.globals.shouldAnimate=t,n.globals.dataChanged=!0,t&&i.ctx.series.getPreviousPaths(),n.globals.axisCharts?((r=e.map(function(o,h){return i._extendSeries(o,h)})).length===0&&(r=[{data:[]}]),n.config.series=r):n.config.series=e.slice(),a&&(n.globals.initialConfig.series=P.clone(n.config.series),n.globals.initialSeries=P.clone(n.config.series)),i.ctx.update().then(function(){s(i.ctx)})})}},{key:"_extendSeries",value:function(e,t){var i=this.w,a=i.config.series[t];return Y(Y({},i.config.series[t]),{},{name:e.name?e.name:a?.name,color:e.color?e.color:a?.color,type:e.type?e.type:a?.type,group:e.group?e.group:a?.group,hidden:e.hidden!==void 0?e.hidden:a?.hidden,data:e.data?e.data:a?.data,zIndex:e.zIndex!==void 0?e.zIndex:t})}},{key:"toggleDataPointSelection",value:function(e,t){var i=this.w,a=null,s=".apexcharts-series[data\\:realIndex='".concat(e,"']");return i.globals.axisCharts?a=i.globals.dom.Paper.select("".concat(s," path[j='").concat(t,"'], ").concat(s," circle[j='").concat(t,"'], ").concat(s," rect[j='").concat(t,"']")).members[0]:t===void 0&&(a=i.globals.dom.Paper.select("".concat(s," path[j='").concat(e,"']")).members[0],i.config.chart.type!=="pie"&&i.config.chart.type!=="polarArea"&&i.config.chart.type!=="donut"||this.ctx.pie.pieClicked(e)),a?(new X(this.ctx).pathMouseDown(a,null),a.node?a.node:null):(console.warn("toggleDataPointSelection: Element not found"),null)}},{key:"forceXAxisUpdate",value:function(e){var t=this.w;if(["min","max"].forEach(function(a){e.xaxis[a]!==void 0&&(t.config.xaxis[a]=e.xaxis[a],t.globals.lastXAxis[a]=e.xaxis[a])}),e.xaxis.categories&&e.xaxis.categories.length&&(t.config.xaxis.categories=e.xaxis.categories),t.config.xaxis.convertedCatToNumeric){var i=new Le(e);e=i.convertCatToNumericXaxis(e,this.ctx)}return e}},{key:"forceYAxisUpdate",value:function(e){return e.chart&&e.chart.stacked&&e.chart.stackType==="100%"&&(Array.isArray(e.yaxis)?e.yaxis.forEach(function(t,i){e.yaxis[i].min=0,e.yaxis[i].max=100}):(e.yaxis.min=0,e.yaxis.max=100)),e}},{key:"revertDefaultAxisMinMax",value:function(e){var t=this,i=this.w,a=i.globals.lastXAxis,s=i.globals.lastYAxis;e&&e.xaxis&&(a=e.xaxis),e&&e.yaxis&&(s=e.yaxis),i.config.xaxis.min=a.min,i.config.xaxis.max=a.max;var r=function(n){s[n]!==void 0&&(i.config.yaxis[n].min=s[n].min,i.config.yaxis[n].max=s[n].max)};i.config.yaxis.map(function(n,o){i.globals.zoomed||s[o]!==void 0?r(o):t.ctx.opts.yaxis[o]!==void 0&&(n.min=t.ctx.opts.yaxis[o].min,n.max=t.ctx.opts.yaxis[o].max)})}}]),p}();he=typeof window<"u"?window:void 0,Ce=function(p,e){var t=(this!==void 0?this:p).SVG=function(l){if(t.supported)return l=new t.Doc(l),t.parser.draw||t.prepare(),l};if(t.ns="http://www.w3.org/2000/svg",t.xmlns="http://www.w3.org/2000/xmlns/",t.xlink="http://www.w3.org/1999/xlink",t.svgjs="http://svgjs.dev",t.supported=!0,!t.supported)return!1;t.did=1e3,t.eid=function(l){return"Svgjs"+c(l)+t.did++},t.create=function(l){var u=e.createElementNS(this.ns,l);return u.setAttribute("id",this.eid(l)),u},t.extend=function(){var l,u;u=(l=[].slice.call(arguments)).pop();for(var m=l.length-1;m>=0;m--)if(l[m])for(var A in u)l[m].prototype[A]=u[A];t.Set&&t.Set.inherit&&t.Set.inherit()},t.invent=function(l){var u=typeof l.create=="function"?l.create:function(){this.constructor.call(this,t.create(l.create))};return l.inherit&&(u.prototype=new l.inherit),l.extend&&t.extend(u,l.extend),l.construct&&t.extend(l.parent||t.Container,l.construct),u},t.adopt=function(l){return l?l.instance?l.instance:((u=l.nodeName=="svg"?l.parentNode instanceof p.SVGElement?new t.Nested:new t.Doc:l.nodeName=="linearGradient"?new t.Gradient("linear"):l.nodeName=="radialGradient"?new t.Gradient("radial"):t[c(l.nodeName)]?new t[c(l.nodeName)]:new t.Element(l)).type=l.nodeName,u.node=l,l.instance=u,u instanceof t.Doc&&u.namespace().defs(),u.setData(JSON.parse(l.getAttribute("svgjs:data"))||{}),u):null;var u},t.prepare=function(){var l=e.getElementsByTagName("body")[0],u=(l?new t.Doc(l):t.adopt(e.documentElement).nested()).size(2,0);t.parser={body:l||e.documentElement,draw:u.style("opacity:0;position:absolute;left:-100%;top:-100%;overflow:hidden").node,poly:u.polyline().node,path:u.path().node,native:t.create("svg")}},t.parser={native:t.create("svg")},e.addEventListener("DOMContentLoaded",function(){t.parser.draw||t.prepare()},!1),t.regex={numberAndUnit:/^([+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?)([a-z%]*)$/i,hex:/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i,rgb:/rgb\((\d+),(\d+),(\d+)\)/,reference:/#([a-z0-9\-_]+)/i,transforms:/\)\s*,?\s*/,whitespace:/\s/g,isHex:/^#[a-f0-9]{3,6}$/i,isRgb:/^rgb\(/,isCss:/[^:]+:[^;]+;?/,isBlank:/^(\s+)?$/,isNumber:/^[+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,isPercent:/^-?[\d\.]+%$/,isImage:/\.(jpg|jpeg|png|gif|svg)(\?[^=]+.*)?/i,delimiter:/[\s,]+/,hyphen:/([^e])\-/gi,pathLetters:/[MLHVCSQTAZ]/gi,isPathLetter:/[MLHVCSQTAZ]/i,numbersWithDots:/((\d?\.\d+(?:e[+-]?\d+)?)((?:\.\d+(?:e[+-]?\d+)?)+))+/gi,dots:/\./g},t.utils={map:function(l,u){for(var m=l.length,A=[],k=0;k1?1:l,new t.Color({r:~~(this.r+(this.destination.r-this.r)*l),g:~~(this.g+(this.destination.g-this.g)*l),b:~~(this.b+(this.destination.b-this.b)*l)})):this}}),t.Color.test=function(l){return l+="",t.regex.isHex.test(l)||t.regex.isRgb.test(l)},t.Color.isRgb=function(l){return l&&typeof l.r=="number"&&typeof l.g=="number"&&typeof l.b=="number"},t.Color.isColor=function(l){return t.Color.isRgb(l)||t.Color.test(l)},t.Array=function(l,u){(l=(l||[]).valueOf()).length==0&&u&&(l=u.valueOf()),this.value=this.parse(l)},t.extend(t.Array,{toString:function(){return this.value.join(" ")},valueOf:function(){return this.value},parse:function(l){return l=l.valueOf(),Array.isArray(l)?l:this.split(l)}}),t.PointArray=function(l,u){t.Array.call(this,l,u||[[0,0]])},t.PointArray.prototype=new t.Array,t.PointArray.prototype.constructor=t.PointArray;for(var i={M:function(l,u,m){return u.x=m.x=l[0],u.y=m.y=l[1],["M",u.x,u.y]},L:function(l,u){return u.x=l[0],u.y=l[1],["L",l[0],l[1]]},H:function(l,u){return u.x=l[0],["H",l[0]]},V:function(l,u){return u.y=l[0],["V",l[0]]},C:function(l,u){return u.x=l[4],u.y=l[5],["C",l[0],l[1],l[2],l[3],l[4],l[5]]},Q:function(l,u){return u.x=l[2],u.y=l[3],["Q",l[0],l[1],l[2],l[3]]},S:function(l,u){return u.x=l[2],u.y=l[3],["S",l[0],l[1],l[2],l[3]]},Z:function(l,u,m){return u.x=m.x,u.y=m.y,["Z"]}},a="mlhvqtcsaz".split(""),s=0,r=a.length;sL);return A},bbox:function(){return t.parser.draw||t.prepare(),t.parser.path.setAttribute("d",this.toString()),t.parser.path.getBBox()}}),t.Number=t.invent({create:function(l,u){this.value=0,this.unit=u||"",typeof l=="number"?this.value=isNaN(l)?0:isFinite(l)?l:l<0?-34e37:34e37:typeof l=="string"?(u=l.match(t.regex.numberAndUnit))&&(this.value=parseFloat(u[1]),u[5]=="%"?this.value/=100:u[5]=="s"&&(this.value*=1e3),this.unit=u[5]):l instanceof t.Number&&(this.value=l.valueOf(),this.unit=l.unit)},extend:{toString:function(){return(this.unit=="%"?~~(1e8*this.value)/1e6:this.unit=="s"?this.value/1e3:this.value)+this.unit},toJSON:function(){return this.toString()},valueOf:function(){return this.value},plus:function(l){return l=new t.Number(l),new t.Number(this+l,this.unit||l.unit)},minus:function(l){return l=new t.Number(l),new t.Number(this-l,this.unit||l.unit)},times:function(l){return l=new t.Number(l),new t.Number(this*l,this.unit||l.unit)},divide:function(l){return l=new t.Number(l),new t.Number(this/l,this.unit||l.unit)},to:function(l){var u=new t.Number(this);return typeof l=="string"&&(u.unit=l),u},morph:function(l){return this.destination=new t.Number(l),l.relative&&(this.destination.value+=this.value),this},at:function(l){return this.destination?new t.Number(this.destination).minus(this).times(l).plus(this):this}}}),t.Element=t.invent({create:function(l){this._stroke=t.defaults.attrs.stroke,this._event=null,this.dom={},(this.node=l)&&(this.type=l.nodeName,this.node.instance=this,this._stroke=l.getAttribute("stroke")||this._stroke)},extend:{x:function(l){return this.attr("x",l)},y:function(l){return this.attr("y",l)},cx:function(l){return l==null?this.x()+this.width()/2:this.x(l-this.width()/2)},cy:function(l){return l==null?this.y()+this.height()/2:this.y(l-this.height()/2)},move:function(l,u){return this.x(l).y(u)},center:function(l,u){return this.cx(l).cy(u)},width:function(l){return this.attr("width",l)},height:function(l){return this.attr("height",l)},size:function(l,u){var m=g(this,l,u);return this.width(new t.Number(m.width)).height(new t.Number(m.height))},clone:function(l){this.writeDataToDom();var u=b(this.node.cloneNode(!0));return l?l.add(u):this.after(u),u},remove:function(){return this.parent()&&this.parent().removeElement(this),this},replace:function(l){return this.after(l).remove(),l},addTo:function(l){return l.put(this)},putIn:function(l){return l.add(this)},id:function(l){return this.attr("id",l)},show:function(){return this.style("display","")},hide:function(){return this.style("display","none")},visible:function(){return this.style("display")!="none"},toString:function(){return this.attr("id")},classes:function(){var l=this.attr("class");return l==null?[]:l.trim().split(t.regex.delimiter)},hasClass:function(l){return this.classes().indexOf(l)!=-1},addClass:function(l){if(!this.hasClass(l)){var u=this.classes();u.push(l),this.attr("class",u.join(" "))}return this},removeClass:function(l){return this.hasClass(l)&&this.attr("class",this.classes().filter(function(u){return u!=l}).join(" ")),this},toggleClass:function(l){return this.hasClass(l)?this.removeClass(l):this.addClass(l)},reference:function(l){return t.get(this.attr(l))},parent:function(l){var u=this;if(!u.node.parentNode)return null;if(u=t.adopt(u.node.parentNode),!l)return u;for(;u&&u.node instanceof p.SVGElement;){if(typeof l=="string"?u.matches(l):u instanceof l)return u;if(!u.node.parentNode||u.node.parentNode.nodeName=="#document")return null;u=t.adopt(u.node.parentNode)}},doc:function(){return this instanceof t.Doc?this:this.parent(t.Doc)},parents:function(l){var u=[],m=this;do{if(!(m=m.parent(l))||!m.node)break;u.push(m)}while(m.parent);return u},matches:function(l){return function(u,m){return(u.matches||u.matchesSelector||u.msMatchesSelector||u.mozMatchesSelector||u.webkitMatchesSelector||u.oMatchesSelector).call(u,m)}(this.node,l)},native:function(){return this.node},svg:function(l){var u=e.createElementNS("http://www.w3.org/2000/svg","svg");if(!(l&&this instanceof t.Parent))return u.appendChild(l=e.createElementNS("http://www.w3.org/2000/svg","svg")),this.writeDataToDom(),l.appendChild(this.node.cloneNode(!0)),u.innerHTML.replace(/^/,"").replace(/<\/svg>$/,"");u.innerHTML=""+l.replace(/\n/,"").replace(/<([\w:-]+)([^<]+?)\/>/g,"<$1$2>")+"";for(var m=0,A=u.firstChild.childNodes.length;m":function(l){return-Math.cos(l*Math.PI)/2+.5},">":function(l){return Math.sin(l*Math.PI/2)},"<":function(l){return 1-Math.cos(l*Math.PI/2)}},t.morph=function(l){return function(u,m){return new t.MorphObj(u,m).at(l)}},t.Situation=t.invent({create:function(l){this.init=!1,this.reversed=!1,this.reversing=!1,this.duration=new t.Number(l.duration).valueOf(),this.delay=new t.Number(l.delay).valueOf(),this.start=+new Date+this.delay,this.finish=this.start+this.duration,this.ease=l.ease,this.loop=0,this.loops=!1,this.animations={},this.attrs={},this.styles={},this.transforms=[],this.once={}}}),t.FX=t.invent({create:function(l){this._target=l,this.situations=[],this.active=!1,this.situation=null,this.paused=!1,this.lastPos=0,this.pos=0,this.absPos=0,this._speed=1},extend:{animate:function(l,u,m){J(l)==="object"&&(u=l.ease,m=l.delay,l=l.duration);var A=new t.Situation({duration:l||1e3,delay:m||0,ease:t.easing[u||"-"]||u});return this.queue(A),this},target:function(l){return l&&l instanceof t.Element?(this._target=l,this):this._target},timeToAbsPos:function(l){return(l-this.situation.start)/(this.situation.duration/this._speed)},absPosToTime:function(l){return this.situation.duration/this._speed*l+this.situation.start},startAnimFrame:function(){this.stopAnimFrame(),this.animationFrame=p.requestAnimationFrame(function(){this.step()}.bind(this))},stopAnimFrame:function(){p.cancelAnimationFrame(this.animationFrame)},start:function(){return!this.active&&this.situation&&(this.active=!0,this.startCurrent()),this},startCurrent:function(){return this.situation.start=+new Date+this.situation.delay/this._speed,this.situation.finish=this.situation.start+this.situation.duration/this._speed,this.initAnimations().step()},queue:function(l){return(typeof l=="function"||l instanceof t.Situation)&&this.situations.push(l),this.situation||(this.situation=this.situations.shift()),this},dequeue:function(){return this.stop(),this.situation=this.situations.shift(),this.situation&&(this.situation instanceof t.Situation?this.start():this.situation.call(this)),this},initAnimations:function(){var l,u=this.situation;if(u.init)return this;for(var m in u.animations){l=this.target()[m](),Array.isArray(l)||(l=[l]),Array.isArray(u.animations[m])||(u.animations[m]=[u.animations[m]]);for(var A=l.length;A--;)u.animations[m][A]instanceof t.Number&&(l[A]=new t.Number(l[A])),u.animations[m][A]=l[A].morph(u.animations[m][A])}for(var m in u.attrs)u.attrs[m]=new t.MorphObj(this.target().attr(m),u.attrs[m]);for(var m in u.styles)u.styles[m]=new t.MorphObj(this.target().style(m),u.styles[m]);return u.initialTransformation=this.target().matrixify(),u.init=!0,this},clearQueue:function(){return this.situations=[],this},clearCurrent:function(){return this.situation=null,this},stop:function(l,u){var m=this.active;return this.active=!1,u&&this.clearQueue(),l&&this.situation&&(!m&&this.startCurrent(),this.atEnd()),this.stopAnimFrame(),this.clearCurrent()},after:function(l){var u=this.last();return this.target().on("finished.fx",function m(A){A.detail.situation==u&&(l.call(this,u),this.off("finished.fx",m))}),this._callStart()},during:function(l){var u=this.last(),m=function(A){A.detail.situation==u&&l.call(this,A.detail.pos,t.morph(A.detail.pos),A.detail.eased,u)};return this.target().off("during.fx",m).on("during.fx",m),this.after(function(){this.off("during.fx",m)}),this._callStart()},afterAll:function(l){var u=function m(A){l.call(this),this.off("allfinished.fx",m)};return this.target().off("allfinished.fx",u).on("allfinished.fx",u),this._callStart()},last:function(){return this.situations.length?this.situations[this.situations.length-1]:this.situation},add:function(l,u,m){return this.last()[m||"animations"][l]=u,this._callStart()},step:function(l){var u,m,A;l||(this.absPos=this.timeToAbsPos(+new Date)),this.situation.loops!==!1?(u=Math.max(this.absPos,0),m=Math.floor(u),this.situation.loops===!0||mthis.lastPos&&S<=k&&(this.situation.once[S].call(this.target(),this.pos,k),delete this.situation.once[S]);return this.active&&this.target().fire("during",{pos:this.pos,eased:k,fx:this,situation:this.situation}),this.situation?(this.eachAt(),this.pos==1&&!this.situation.reversed||this.situation.reversed&&this.pos==0?(this.stopAnimFrame(),this.target().fire("finished",{fx:this,situation:this.situation}),this.situations.length||(this.target().fire("allfinished"),this.situations.length||(this.target().off(".fx"),this.active=!1)),this.active?this.dequeue():this.clearCurrent()):!this.paused&&this.active&&this.startAnimFrame(),this.lastPos=k,this):this},eachAt:function(){var l,u=this,m=this.target(),A=this.situation;for(var k in A.animations)l=[].concat(A.animations[k]).map(function(C){return typeof C!="string"&&C.at?C.at(A.ease(u.pos),u.pos):C}),m[k].apply(m,l);for(var k in A.attrs)l=[k].concat(A.attrs[k]).map(function(I){return typeof I!="string"&&I.at?I.at(A.ease(u.pos),u.pos):I}),m.attr.apply(m,l);for(var k in A.styles)l=[k].concat(A.styles[k]).map(function(I){return typeof I!="string"&&I.at?I.at(A.ease(u.pos),u.pos):I}),m.style.apply(m,l);if(A.transforms.length){l=A.initialTransformation,k=0;for(var S=A.transforms.length;k=0;--m)this[y[m]]=l[y[m]]!=null?l[y[m]]:u[y[m]]},extend:{extract:function(){var l=f(this,0,1);f(this,1,0);var u=180/Math.PI*Math.atan2(l.y,l.x)-90;return{x:this.e,y:this.f,transformedX:(this.e*Math.cos(u*Math.PI/180)+this.f*Math.sin(u*Math.PI/180))/Math.sqrt(this.a*this.a+this.b*this.b),transformedY:(this.f*Math.cos(u*Math.PI/180)+this.e*Math.sin(-u*Math.PI/180))/Math.sqrt(this.c*this.c+this.d*this.d),rotation:u,a:this.a,b:this.b,c:this.c,d:this.d,e:this.e,f:this.f,matrix:new t.Matrix(this)}},clone:function(){return new t.Matrix(this)},morph:function(l){return this.destination=new t.Matrix(l),this},multiply:function(l){return new t.Matrix(this.native().multiply(function(u){return u instanceof t.Matrix||(u=new t.Matrix(u)),u}(l).native()))},inverse:function(){return new t.Matrix(this.native().inverse())},translate:function(l,u){return new t.Matrix(this.native().translate(l||0,u||0))},native:function(){for(var l=t.parser.native.createSVGMatrix(),u=y.length-1;u>=0;u--)l[y[u]]=this[y[u]];return l},toString:function(){return"matrix("+v(this.a)+","+v(this.b)+","+v(this.c)+","+v(this.d)+","+v(this.e)+","+v(this.f)+")"}},parent:t.Element,construct:{ctm:function(){return new t.Matrix(this.node.getCTM())},screenCTM:function(){if(this instanceof t.Nested){var l=this.rect(1,1),u=l.node.getScreenCTM();return l.remove(),new t.Matrix(u)}return new t.Matrix(this.node.getScreenCTM())}}}),t.Point=t.invent({create:function(l,u){var m;m=Array.isArray(l)?{x:l[0],y:l[1]}:J(l)==="object"?{x:l.x,y:l.y}:l!=null?{x:l,y:u??l}:{x:0,y:0},this.x=m.x,this.y=m.y},extend:{clone:function(){return new t.Point(this)},morph:function(l,u){return this.destination=new t.Point(l,u),this}}}),t.extend(t.Element,{point:function(l,u){return new t.Point(l,u).transform(this.screenCTM().inverse())}}),t.extend(t.Element,{attr:function(l,u,m){if(l==null){for(l={},m=(u=this.node.attributes).length-1;m>=0;m--)l[u[m].nodeName]=t.regex.isNumber.test(u[m].nodeValue)?parseFloat(u[m].nodeValue):u[m].nodeValue;return l}if(J(l)==="object")for(var A in l)this.attr(A,l[A]);else if(u===null)this.node.removeAttribute(l);else{if(u==null)return(u=this.node.getAttribute(l))==null?t.defaults.attrs[l]:t.regex.isNumber.test(u)?parseFloat(u):u;l=="stroke-width"?this.attr("stroke",parseFloat(u)>0?this._stroke:null):l=="stroke"&&(this._stroke=u),l!="fill"&&l!="stroke"||(t.regex.isImage.test(u)&&(u=this.doc().defs().image(u,0,0)),u instanceof t.Image&&(u=this.doc().defs().pattern(0,0,function(){this.add(u)}))),typeof u=="number"?u=new t.Number(u):t.Color.isColor(u)?u=new t.Color(u):Array.isArray(u)&&(u=new t.Array(u)),l=="leading"?this.leading&&this.leading(u):typeof m=="string"?this.node.setAttributeNS(m,l,u.toString()):this.node.setAttribute(l,u.toString()),!this.rebuild||l!="font-size"&&l!="x"||this.rebuild(l,u)}return this}}),t.extend(t.Element,{transform:function(l,u){var m;return J(l)!=="object"?(m=new t.Matrix(this).extract(),typeof l=="string"?m[l]:m):(m=new t.Matrix(this),u=!!u||!!l.relative,l.a!=null&&(m=u?m.multiply(new t.Matrix(l)):new t.Matrix(l)),this.attr("transform",m))}}),t.extend(t.Element,{untransform:function(){return this.attr("transform",null)},matrixify:function(){return(this.attr("transform")||"").split(t.regex.transforms).slice(0,-1).map(function(l){var u=l.trim().split("(");return[u[0],u[1].split(t.regex.delimiter).map(function(m){return parseFloat(m)})]}).reduce(function(l,u){return u[0]=="matrix"?l.multiply(x(u[1])):l[u[0]].apply(l,u[1])},new t.Matrix)},toParent:function(l){if(this==l)return this;var u=this.screenCTM(),m=l.screenCTM().inverse();return this.addTo(l).untransform().transform(m.multiply(u)),this},toDoc:function(){return this.toParent(this.doc())}}),t.Transformation=t.invent({create:function(l,u){if(arguments.length>1&&typeof u!="boolean")return this.constructor.call(this,[].slice.call(arguments));if(Array.isArray(l))for(var m=0,A=this.arguments.length;m=0},index:function(l){return[].slice.call(this.node.childNodes).indexOf(l.node)},get:function(l){return t.adopt(this.node.childNodes[l])},first:function(){return this.get(0)},last:function(){return this.get(this.node.childNodes.length-1)},each:function(l,u){for(var m=this.children(),A=0,k=m.length;A=0;u--)l.childNodes[u]instanceof p.SVGElement&&b(l.childNodes[u]);return t.adopt(l).id(t.eid(l.nodeName))}function v(l){return Math.abs(l)>1e-37?l:0}["fill","stroke"].forEach(function(l){var u={};u[l]=function(m){if(m===void 0)return this;if(typeof m=="string"||t.Color.isRgb(m)||m&&typeof m.fill=="function")this.attr(l,m);else for(var A=n[l].length-1;A>=0;A--)m[n[l][A]]!=null&&this.attr(n.prefix(l,n[l][A]),m[n[l][A]]);return this},t.extend(t.Element,t.FX,u)}),t.extend(t.Element,t.FX,{translate:function(l,u){return this.transform({x:l,y:u})},matrix:function(l){return this.attr("transform",new t.Matrix(arguments.length==6?[].slice.call(arguments):l))},opacity:function(l){return this.attr("opacity",l)},dx:function(l){return this.x(new t.Number(l).plus(this instanceof t.FX?0:this.x()),!0)},dy:function(l){return this.y(new t.Number(l).plus(this instanceof t.FX?0:this.y()),!0)}}),t.extend(t.Path,{length:function(){return this.node.getTotalLength()},pointAt:function(l){return this.node.getPointAtLength(l)}}),t.Set=t.invent({create:function(l){Array.isArray(l)?this.members=l:this.clear()},extend:{add:function(){for(var l=[].slice.call(arguments),u=0,m=l.length;u-1&&this.members.splice(u,1),this},each:function(l){for(var u=0,m=this.members.length;u=0},index:function(l){return this.members.indexOf(l)},get:function(l){return this.members[l]},first:function(){return this.get(0)},last:function(){return this.get(this.members.length-1)},valueOf:function(){return this.members}},construct:{set:function(l){return new t.Set(l)}}}),t.FX.Set=t.invent({create:function(l){this.set=l}}),t.Set.inherit=function(){var l=[];for(var u in t.Shape.prototype)typeof t.Shape.prototype[u]=="function"&&typeof t.Set.prototype[u]!="function"&&l.push(u);for(var u in l.forEach(function(A){t.Set.prototype[A]=function(){for(var k=0,S=this.members.length;k=0;l--)delete this.memory()[arguments[l]];return this},memory:function(){return this._memory||(this._memory={})}}),t.get=function(l){var u=e.getElementById(function(m){var A=(m||"").toString().match(t.regex.reference);if(A)return A[1]}(l)||l);return t.adopt(u)},t.select=function(l,u){return new t.Set(t.utils.map((u||e).querySelectorAll(l),function(m){return t.adopt(m)}))},t.extend(t.Parent,{select:function(l){return t.select(l,this.node)}});var y="abcdef".split("");if(typeof p.CustomEvent!="function"){var w=function(l,u){u=u||{bubbles:!1,cancelable:!1,detail:void 0};var m=e.createEvent("CustomEvent");return m.initCustomEvent(l,u.bubbles,u.cancelable,u.detail),m};w.prototype=p.Event.prototype,t.CustomEvent=w}else t.CustomEvent=p.CustomEvent;return t},typeof define=="function"&&define.amd?define(function(){return Ce(he,he.document)}):(typeof ot>"u"?"undefined":J(ot))==="object"&&typeof We<"u"?We.exports=he.document?Ce(he,he.document):function(p){return Ce(p,p.document)}:he.SVG=Ce(he,he.document),function(){SVG.Filter=SVG.invent({create:"filter",inherit:SVG.Parent,extend:{source:"SourceGraphic",sourceAlpha:"SourceAlpha",background:"BackgroundImage",backgroundAlpha:"BackgroundAlpha",fill:"FillPaint",stroke:"StrokePaint",autoSetIn:!0,put:function(r,n){return this.add(r,n),!r.attr("in")&&this.autoSetIn&&r.attr("in",this.source),r.attr("result")||r.attr("result",r),r},blend:function(r,n,o){return this.put(new SVG.BlendEffect(r,n,o))},colorMatrix:function(r,n){return this.put(new SVG.ColorMatrixEffect(r,n))},convolveMatrix:function(r){return this.put(new SVG.ConvolveMatrixEffect(r))},componentTransfer:function(r){return this.put(new SVG.ComponentTransferEffect(r))},composite:function(r,n,o){return this.put(new SVG.CompositeEffect(r,n,o))},flood:function(r,n){return this.put(new SVG.FloodEffect(r,n))},offset:function(r,n){return this.put(new SVG.OffsetEffect(r,n))},image:function(r){return this.put(new SVG.ImageEffect(r))},merge:function(){var r=[void 0];for(var n in arguments)r.push(arguments[n]);return this.put(new(SVG.MergeEffect.bind.apply(SVG.MergeEffect,r)))},gaussianBlur:function(r,n){return this.put(new SVG.GaussianBlurEffect(r,n))},morphology:function(r,n){return this.put(new SVG.MorphologyEffect(r,n))},diffuseLighting:function(r,n,o){return this.put(new SVG.DiffuseLightingEffect(r,n,o))},displacementMap:function(r,n,o,h,c){return this.put(new SVG.DisplacementMapEffect(r,n,o,h,c))},specularLighting:function(r,n,o,h){return this.put(new SVG.SpecularLightingEffect(r,n,o,h))},tile:function(){return this.put(new SVG.TileEffect)},turbulence:function(r,n,o,h,c){return this.put(new SVG.TurbulenceEffect(r,n,o,h,c))},toString:function(){return"url(#"+this.attr("id")+")"}}}),SVG.extend(SVG.Defs,{filter:function(r){var n=this.put(new SVG.Filter);return typeof r=="function"&&r.call(n,n),n}}),SVG.extend(SVG.Container,{filter:function(r){return this.defs().filter(r)}}),SVG.extend(SVG.Element,SVG.G,SVG.Nested,{filter:function(r){return this.filterer=r instanceof SVG.Element?r:this.doc().filter(r),this.doc()&&this.filterer.doc()!==this.doc()&&this.doc().defs().add(this.filterer),this.attr("filter",this.filterer),this.filterer},unfilter:function(r){return this.filterer&&r===!0&&this.filterer.remove(),delete this.filterer,this.attr("filter",null)}}),SVG.Effect=SVG.invent({create:function(){this.constructor.call(this)},inherit:SVG.Element,extend:{in:function(r){return r==null?this.parent()&&this.parent().select('[result="'+this.attr("in")+'"]').get(0)||this.attr("in"):this.attr("in",r)},result:function(r){return r==null?this.attr("result"):this.attr("result",r)},toString:function(){return this.result()}}}),SVG.ParentEffect=SVG.invent({create:function(){this.constructor.call(this)},inherit:SVG.Parent,extend:{in:function(r){return r==null?this.parent()&&this.parent().select('[result="'+this.attr("in")+'"]').get(0)||this.attr("in"):this.attr("in",r)},result:function(r){return r==null?this.attr("result"):this.attr("result",r)},toString:function(){return this.result()}}});var p={blend:function(r,n){return this.parent()&&this.parent().blend(this,r,n)},colorMatrix:function(r,n){return this.parent()&&this.parent().colorMatrix(r,n).in(this)},convolveMatrix:function(r){return this.parent()&&this.parent().convolveMatrix(r).in(this)},componentTransfer:function(r){return this.parent()&&this.parent().componentTransfer(r).in(this)},composite:function(r,n){return this.parent()&&this.parent().composite(this,r,n)},flood:function(r,n){return this.parent()&&this.parent().flood(r,n)},offset:function(r,n){return this.parent()&&this.parent().offset(r,n).in(this)},image:function(r){return this.parent()&&this.parent().image(r)},merge:function(){return this.parent()&&this.parent().merge.apply(this.parent(),[this].concat(arguments))},gaussianBlur:function(r,n){return this.parent()&&this.parent().gaussianBlur(r,n).in(this)},morphology:function(r,n){return this.parent()&&this.parent().morphology(r,n).in(this)},diffuseLighting:function(r,n,o){return this.parent()&&this.parent().diffuseLighting(r,n,o).in(this)},displacementMap:function(r,n,o,h){return this.parent()&&this.parent().displacementMap(this,r,n,o,h)},specularLighting:function(r,n,o,h){return this.parent()&&this.parent().specularLighting(r,n,o,h).in(this)},tile:function(){return this.parent()&&this.parent().tile().in(this)},turbulence:function(r,n,o,h,c){return this.parent()&&this.parent().turbulence(r,n,o,h,c).in(this)}};SVG.extend(SVG.Effect,p),SVG.extend(SVG.ParentEffect,p),SVG.ChildEffect=SVG.invent({create:function(){this.constructor.call(this)},inherit:SVG.Element,extend:{in:function(r){this.attr("in",r)}}});var e={blend:function(r,n,o){this.attr({in:r,in2:n,mode:o||"normal"})},colorMatrix:function(r,n){r=="matrix"&&(n=a(n)),this.attr({type:r,values:n===void 0?null:n})},convolveMatrix:function(r){r=a(r),this.attr({order:Math.sqrt(r.split(" ").length),kernelMatrix:r})},composite:function(r,n,o){this.attr({in:r,in2:n,operator:o})},flood:function(r,n){this.attr("flood-color",r),n!=null&&this.attr("flood-opacity",n)},offset:function(r,n){this.attr({dx:r,dy:n})},image:function(r){this.attr("href",r,SVG.xlink)},displacementMap:function(r,n,o,h,c){this.attr({in:r,in2:n,scale:o,xChannelSelector:h,yChannelSelector:c})},gaussianBlur:function(r,n){r!=null||n!=null?this.attr("stdDeviation",function(o){if(!Array.isArray(o))return o;for(var h=0,c=o.length,d=[];h1&&(W*=c=Math.sqrt(c),N*=c),d=new SVG.Matrix().rotate(B).scale(1/W,1/N).rotate(-B),V=V.transform(d),G=G.transform(d),g=[G.x-V.x,G.y-V.y],x=g[0]*g[0]+g[1]*g[1],f=Math.sqrt(x),g[0]/=f,g[1]/=f,b=x<4?Math.sqrt(1-x/4):0,q===Z&&(b*=-1),v=new SVG.Point((G.x+V.x)/2+b*-g[1],(G.y+V.y)/2+b*g[0]),y=new SVG.Point(V.x-v.x,V.y-v.y),w=new SVG.Point(G.x-v.x,G.y-v.y),l=Math.acos(y.x/Math.sqrt(y.x*y.x+y.y*y.y)),y.y<0&&(l*=-1),u=Math.acos(w.x/Math.sqrt(w.x*w.x+w.y*w.y)),w.y<0&&(u*=-1),Z&&l>u&&(u+=2*Math.PI),!Z&&lr.maxX-t.width&&(n=(a=r.maxX-t.width)-this.startPoints.box.x),r.minY!=null&&sr.maxY-t.height&&(o=(s=r.maxY-t.height)-this.startPoints.box.y),r.snapToGrid!=null&&(a-=a%r.snapToGrid,s-=s%r.snapToGrid,n-=n%r.snapToGrid,o-=o%r.snapToGrid),this.el instanceof SVG.G?this.el.matrix(this.startPoints.transform).transform({x:n,y:o},!0):this.el.move(a,s));return i},p.prototype.end=function(e){var t=this.drag(e);this.el.fire("dragend",{event:e,p:t,m:this.m,handler:this}),SVG.off(window,"mousemove.drag"),SVG.off(window,"touchmove.drag"),SVG.off(window,"mouseup.drag"),SVG.off(window,"touchend.drag")},SVG.extend(SVG.Element,{draggable:function(e,t){typeof e!="function"&&typeof e!="object"||(t=e,e=!0);var i=this.remember("_draggable")||new p(this);return(e=e===void 0||e)?i.init(t||{},e):(this.off("mousedown.drag"),this.off("touchstart.drag")),this}})}.call(void 0),function(){function p(e){this.el=e,e.remember("_selectHandler",this),this.pointSelection={isSelected:!1},this.rectSelection={isSelected:!1},this.pointsList={lt:[0,0],rt:["width",0],rb:["width","height"],lb:[0,"height"],t:["width",0],r:["width","height"],b:["width","height"],l:[0,"height"]},this.pointCoord=function(t,i,a){var s=typeof t!="string"?t:i[t];return a?s/2:s},this.pointCoords=function(t,i){var a=this.pointsList[t];return{x:this.pointCoord(a[0],i,t==="t"||t==="b"),y:this.pointCoord(a[1],i,t==="r"||t==="l")}}}p.prototype.init=function(e,t){var i=this.el.bbox();this.options={};var a=this.el.selectize.defaults.points;for(var s in this.el.selectize.defaults)this.options[s]=this.el.selectize.defaults[s],t[s]!==void 0&&(this.options[s]=t[s]);var r=["points","pointsExclude"];for(var s in r){var n=this.options[r[s]];typeof n=="string"?n=n.length>0?n.split(/\s*,\s*/i):[]:typeof n=="boolean"&&r[s]==="points"&&(n=n?a:[]),this.options[r[s]]=n}this.options.points=[a,this.options.points].reduce(function(o,h){return o.filter(function(c){return h.indexOf(c)>-1})}),this.options.points=[this.options.points,this.options.pointsExclude].reduce(function(o,h){return o.filter(function(c){return h.indexOf(c)<0})}),this.parent=this.el.parent(),this.nested=this.nested||this.parent.group(),this.nested.matrix(new SVG.Matrix(this.el).translate(i.x,i.y)),this.options.deepSelect&&["line","polyline","polygon"].indexOf(this.el.type)!==-1?this.selectPoints(e):this.selectRect(e),this.observe(),this.cleanup()},p.prototype.selectPoints=function(e){return this.pointSelection.isSelected=e,this.pointSelection.set||(this.pointSelection.set=this.parent.set(),this.drawPoints()),this},p.prototype.getPointArray=function(){var e=this.el.bbox();return this.el.array().valueOf().map(function(t){return[t[0]-e.x,t[1]-e.y]})},p.prototype.drawPoints=function(){for(var e=this,t=this.getPointArray(),i=0,a=t.length;i0&&this.parameters.box.height-n[1]>0){if(this.parameters.type==="text")return this.el.move(this.parameters.box.x+n[0],this.parameters.box.y),void this.el.attr("font-size",this.parameters.fontSize-n[0]);n=this.checkAspectRatio(n),this.el.move(this.parameters.box.x+n[0],this.parameters.box.y+n[1]).size(this.parameters.box.width-n[0],this.parameters.box.height-n[1])}};break;case"rt":this.calc=function(s,r){var n=this.snapToGrid(s,r,2);if(this.parameters.box.width+n[0]>0&&this.parameters.box.height-n[1]>0){if(this.parameters.type==="text")return this.el.move(this.parameters.box.x-n[0],this.parameters.box.y),void this.el.attr("font-size",this.parameters.fontSize+n[0]);n=this.checkAspectRatio(n,!0),this.el.move(this.parameters.box.x,this.parameters.box.y+n[1]).size(this.parameters.box.width+n[0],this.parameters.box.height-n[1])}};break;case"rb":this.calc=function(s,r){var n=this.snapToGrid(s,r,0);if(this.parameters.box.width+n[0]>0&&this.parameters.box.height+n[1]>0){if(this.parameters.type==="text")return this.el.move(this.parameters.box.x-n[0],this.parameters.box.y),void this.el.attr("font-size",this.parameters.fontSize+n[0]);n=this.checkAspectRatio(n),this.el.move(this.parameters.box.x,this.parameters.box.y).size(this.parameters.box.width+n[0],this.parameters.box.height+n[1])}};break;case"lb":this.calc=function(s,r){var n=this.snapToGrid(s,r,1);if(this.parameters.box.width-n[0]>0&&this.parameters.box.height+n[1]>0){if(this.parameters.type==="text")return this.el.move(this.parameters.box.x+n[0],this.parameters.box.y),void this.el.attr("font-size",this.parameters.fontSize-n[0]);n=this.checkAspectRatio(n,!0),this.el.move(this.parameters.box.x+n[0],this.parameters.box.y).size(this.parameters.box.width-n[0],this.parameters.box.height+n[1])}};break;case"t":this.calc=function(s,r){var n=this.snapToGrid(s,r,2);if(this.parameters.box.height-n[1]>0){if(this.parameters.type==="text")return;this.el.move(this.parameters.box.x,this.parameters.box.y+n[1]).height(this.parameters.box.height-n[1])}};break;case"r":this.calc=function(s,r){var n=this.snapToGrid(s,r,0);if(this.parameters.box.width+n[0]>0){if(this.parameters.type==="text")return;this.el.move(this.parameters.box.x,this.parameters.box.y).width(this.parameters.box.width+n[0])}};break;case"b":this.calc=function(s,r){var n=this.snapToGrid(s,r,0);if(this.parameters.box.height+n[1]>0){if(this.parameters.type==="text")return;this.el.move(this.parameters.box.x,this.parameters.box.y).height(this.parameters.box.height+n[1])}};break;case"l":this.calc=function(s,r){var n=this.snapToGrid(s,r,1);if(this.parameters.box.width-n[0]>0){if(this.parameters.type==="text")return;this.el.move(this.parameters.box.x+n[0],this.parameters.box.y).width(this.parameters.box.width-n[0])}};break;case"rot":this.calc=function(s,r){var n=s+this.parameters.p.x,o=r+this.parameters.p.y,h=Math.atan2(this.parameters.p.y-this.parameters.box.y-this.parameters.box.height/2,this.parameters.p.x-this.parameters.box.x-this.parameters.box.width/2),c=Math.atan2(o-this.parameters.box.y-this.parameters.box.height/2,n-this.parameters.box.x-this.parameters.box.width/2),d=this.parameters.rotation+180*(c-h)/Math.PI+this.options.snapToAngle/2;this.el.center(this.parameters.box.cx,this.parameters.box.cy).rotate(d-d%this.options.snapToAngle,this.parameters.box.cx,this.parameters.box.cy)};break;case"point":this.calc=function(s,r){var n=this.snapToGrid(s,r,this.parameters.pointCoords[0],this.parameters.pointCoords[1]),o=this.el.array().valueOf();o[this.parameters.i][0]=this.parameters.pointCoords[0]+n[0],o[this.parameters.i][1]=this.parameters.pointCoords[1]+n[1],this.el.plot(o)}}this.el.fire("resizestart",{dx:this.parameters.x,dy:this.parameters.y,event:e}),SVG.on(window,"touchmove.resize",function(s){t.update(s||window.event)}),SVG.on(window,"touchend.resize",function(){t.done()}),SVG.on(window,"mousemove.resize",function(s){t.update(s||window.event)}),SVG.on(window,"mouseup.resize",function(){t.done()})},p.prototype.update=function(e){if(e){var t=this._extractPosition(e),i=this.transformPoint(t.x,t.y),a=i.x-this.parameters.p.x,s=i.y-this.parameters.p.y;this.lastUpdateCall=[a,s],this.calc(a,s),this.el.fire("resizing",{dx:a,dy:s,event:e})}else this.lastUpdateCall&&this.calc(this.lastUpdateCall[0],this.lastUpdateCall[1])},p.prototype.done=function(){this.lastUpdateCall=null,SVG.off(window,"mousemove.resize"),SVG.off(window,"mouseup.resize"),SVG.off(window,"touchmove.resize"),SVG.off(window,"touchend.resize"),this.el.fire("resizedone")},p.prototype.snapToGrid=function(e,t,i,a){var s;return a!==void 0?s=[(i+e)%this.options.snapToGrid,(a+t)%this.options.snapToGrid]:(i=i??3,s=[(this.parameters.box.x+e+(1&i?0:this.parameters.box.width))%this.options.snapToGrid,(this.parameters.box.y+t+(2&i?0:this.parameters.box.height))%this.options.snapToGrid]),e<0&&(s[0]-=this.options.snapToGrid),t<0&&(s[1]-=this.options.snapToGrid),e-=Math.abs(s[0])n.maxX&&(e=n.maxX-s),n.minY!==void 0&&r+tn.maxY&&(t=n.maxY-r),[e,t]},p.prototype.checkAspectRatio=function(e,t){if(!this.options.saveAspectRatio)return e;var i=e.slice(),a=this.parameters.box.width/this.parameters.box.height,s=this.parameters.box.width+e[0],r=this.parameters.box.height-e[1],n=s/r;return na&&(i[0]=this.parameters.box.width-r*a,t&&(i[0]=-i[0])),i},SVG.extend(SVG.Element,{resize:function(e){return(this.remember("_resizeHandler")||new p(this)).init(e||{}),this}}),SVG.Element.prototype.resize.defaults={snapToAngle:.1,snapToGrid:1,constraint:{},saveAspectRatio:!1}}).call(this)}(),window.Apex===void 0&&(window.Apex={});var Ct=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"initModules",value:function(){this.ctx.publicMethods=["updateOptions","updateSeries","appendData","appendSeries","isSeriesHidden","highlightSeries","toggleSeries","showSeries","hideSeries","setLocale","resetSeries","zoomX","toggleDataPointSelection","dataURI","exportToCSV","addXaxisAnnotation","addYaxisAnnotation","addPointAnnotation","clearAnnotations","removeAnnotation","paper","destroy"],this.ctx.eventList=["click","mousedown","mousemove","mouseleave","touchstart","touchmove","touchleave","mouseup","touchend"],this.ctx.animations=new ve(this.ctx),this.ctx.axes=new Hi(this.ctx),this.ctx.core=new ga(this.ctx.el,this.ctx),this.ctx.config=new Pe({}),this.ctx.data=new Ft(this.ctx),this.ctx.grid=new Rt(this.ctx),this.ctx.graphics=new X(this.ctx),this.ctx.coreUtils=new $(this.ctx),this.ctx.crosshairs=new nt(this.ctx),this.ctx.events=new Oi(this.ctx),this.ctx.exports=new He(this.ctx),this.ctx.fill=new ne(this.ctx),this.ctx.localization=new Di(this.ctx),this.ctx.options=new ue,this.ctx.responsive=new Ni(this.ctx),this.ctx.series=new re(this.ctx),this.ctx.theme=new Wi(this.ctx),this.ctx.formatters=new ze(this.ctx),this.ctx.titleSubtitle=new Bi(this.ctx),this.ctx.legend=new Dt(this.ctx),this.ctx.toolbar=new Ht(this.ctx),this.ctx.tooltip=new At(this.ctx),this.ctx.dimensions=new Ne(this.ctx),this.ctx.updateHelpers=new ua(this.ctx),this.ctx.zoomPanSelection=new qi(this.ctx),this.ctx.w.globals.tooltip=new At(this.ctx)}}]),p}(),Lt=function(){function p(e){F(this,p),this.ctx=e,this.w=e.w}return R(p,[{key:"clear",value:function(e){var t=e.isUpdating;this.ctx.zoomPanSelection&&this.ctx.zoomPanSelection.destroy(),this.ctx.toolbar&&this.ctx.toolbar.destroy(),this.ctx.animations=null,this.ctx.axes=null,this.ctx.annotations=null,this.ctx.core=null,this.ctx.data=null,this.ctx.grid=null,this.ctx.series=null,this.ctx.responsive=null,this.ctx.theme=null,this.ctx.formatters=null,this.ctx.titleSubtitle=null,this.ctx.legend=null,this.ctx.dimensions=null,this.ctx.options=null,this.ctx.crosshairs=null,this.ctx.zoomPanSelection=null,this.ctx.updateHelpers=null,this.ctx.toolbar=null,this.ctx.localization=null,this.ctx.w.globals.tooltip=null,this.clearDomElements({isUpdating:t})}},{key:"killSVG",value:function(e){e.each(function(t,i){this.removeClass("*"),this.off(),this.stop()},!0),e.ungroup(),e.clear()}},{key:"clearDomElements",value:function(e){var t=this,i=e.isUpdating,a=this.w.globals.dom.Paper.node;a.parentNode&&a.parentNode.parentNode&&!i&&(a.parentNode.parentNode.style.minHeight="unset");var s=this.w.globals.dom.baseEl;s&&this.ctx.eventList.forEach(function(n){s.removeEventListener(n,t.ctx.events.documentEvent)});var r=this.w.globals.dom;if(this.ctx.el!==null)for(;this.ctx.el.firstChild;)this.ctx.el.removeChild(this.ctx.el.firstChild);this.killSVG(r.Paper),r.Paper.remove(),r.elWrap=null,r.elGraphical=null,r.elLegendWrap=null,r.elLegendForeign=null,r.baseEl=null,r.elGridRect=null,r.elGridRectMask=null,r.elGridRectMarkerMask=null,r.elForecastMask=null,r.elNonForecastMask=null,r.elDefs=null}}]),p}(),it=new WeakMap,fa=function(){function p(e,t){F(this,p),this.opts=t,this.ctx=this,this.w=new Ri(t).init(),this.el=e,this.w.globals.cuid=P.randomId(),this.w.globals.chartID=this.w.config.chart.id?P.escapeString(this.w.config.chart.id):this.w.globals.cuid,new Ct(this).initModules(),this.create=P.bind(this.create,this),this.windowResizeHandler=this._windowResizeHandler.bind(this),this.parentResizeHandler=this._parentResizeCallback.bind(this)}return R(p,[{key:"render",value:function(){var e=this;return new Promise(function(t,i){if(e.el!==null){Apex._chartInstances===void 0&&(Apex._chartInstances=[]),e.w.config.chart.id&&Apex._chartInstances.push({id:e.w.globals.chartID,group:e.w.config.chart.group,chart:e}),e.setLocale(e.w.config.chart.defaultLocale);var a=e.w.config.chart.events.beforeMount;typeof a=="function"&&a(e,e.w),e.events.fireEvent("beforeMount",[e,e.w]),window.addEventListener("resize",e.windowResizeHandler),function(g,f){var x=!1;if(g.nodeType!==Node.DOCUMENT_FRAGMENT_NODE){var b=g.getBoundingClientRect();g.style.display!=="none"&&b.width!==0||(x=!0)}var v=new ResizeObserver(function(y){x&&f.call(g,y),x=!0});g.nodeType===Node.DOCUMENT_FRAGMENT_NODE?Array.from(g.children).forEach(function(y){return v.observe(y)}):v.observe(g),it.set(f,v)}(e.el.parentNode,e.parentResizeHandler);var s=e.el.getRootNode&&e.el.getRootNode(),r=P.is("ShadowRoot",s),n=e.el.ownerDocument,o=r?s.getElementById("apexcharts-css"):n.getElementById("apexcharts-css");if(!o){var h;(o=document.createElement("style")).id="apexcharts-css",o.textContent=`@keyframes opaque { 0% { opacity: 0 } @@ -873,14 +788,7 @@ rect.legend-mouseover-inactive, .apexcharts-rangebar-goals-markers { pointer-events: none -}`; var c = ((h = e.opts.chart) === null || h === void 0 ? void 0 : h.nonce) || e.w.config.chart.nonce; c && o.setAttribute("nonce", c), r ? s.prepend(o) : n.head.appendChild(o) - } var d = e.create(e.w.config.series, {}); if (!d) return t(e); e.mount(d).then(function () { typeof e.w.config.chart.events.mounted == "function" && e.w.config.chart.events.mounted(e, e.w), e.events.fireEvent("mounted", [e, e.w]), t(d) }).catch(function (g) { i(g) }) - } else i(new Error("Element not found")) - }) - } - }, { key: "create", value: function (e, t) { var i = this, a = this.w; new Ct(this).initModules(); var s = this.w.globals; if (s.noData = !1, s.animationEnded = !1, this.responsive.checkResponsiveConfig(t), a.config.xaxis.convertedCatToNumeric && new Le(a.config).convertCatToNumericXaxis(a.config, this.ctx), this.el === null || (this.core.setupElements(), a.config.chart.type === "treemap" && (a.config.grid.show = !1, a.config.yaxis[0].show = !1), s.svgWidth === 0)) return s.animationEnded = !0, null; var r = e; e.forEach(function (g, f) { g.hidden && (r = i.legend.legendHelpers.getSeriesAfterCollapsing({ realIndex: f })) }); var n = $.checkComboSeries(r, a.config.chart.type); s.comboCharts = n.comboCharts, s.comboBarCount = n.comboBarCount; var o = r.every(function (g) { return g.data && g.data.length === 0 }); (r.length === 0 || o && s.collapsedSeries.length < 1) && this.series.handleNoData(), this.events.setupEventHandlers(), this.data.parseData(r), this.theme.init(), new ye(this).setGlobalMarkerSize(), this.formatters.setLabelFormatters(), this.titleSubtitle.draw(), s.noData && s.collapsedSeries.length !== s.series.length && !a.config.legend.showForSingleSeries || this.legend.init(), this.series.hasAllSeriesEqualX(), s.axisCharts && (this.core.coreCalculations(), a.config.xaxis.type !== "category" && this.formatters.setLabelFormatters(), this.ctx.toolbar.minX = a.globals.minX, this.ctx.toolbar.maxX = a.globals.maxX), this.formatters.heatmapLabelFormatters(), new $(this).getLargestMarkerSize(), this.dimensions.plotCoords(); var h = this.core.xySettings(); this.grid.createGridMask(); var c = this.core.plotChartType(r, h), d = new be(this); return d.bringForward(), a.config.dataLabels.background.enabled && d.dataLabelsBackground(), this.core.shiftGraphPosition(), { elGraph: c, xyRatios: h, dimensions: { plot: { left: a.globals.translateX, top: a.globals.translateY, width: a.globals.gridWidth, height: a.globals.gridHeight } } } } }, { key: "mount", value: function () { var e = this, t = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : null, i = this, a = i.w; return new Promise(function (s, r) { if (i.el === null) return r(new Error("Not enough data to display or target element not found")); (t === null || a.globals.allSeriesCollapsed) && i.series.handleNoData(), i.grid = new Rt(i); var n, o, h = i.grid.drawGrid(); if (i.annotations = new Fi(i), i.annotations.drawImageAnnos(), i.annotations.drawTextAnnos(), a.config.grid.position === "back" && (h && a.globals.dom.elGraphical.add(h.el), h != null && (n = h.elGridBorders) !== null && n !== void 0 && n.node && a.globals.dom.elGraphical.add(h.elGridBorders)), Array.isArray(t.elGraph)) for (var c = 0; c < t.elGraph.length; c++)a.globals.dom.elGraphical.add(t.elGraph[c]); else a.globals.dom.elGraphical.add(t.elGraph); a.config.grid.position === "front" && (h && a.globals.dom.elGraphical.add(h.el), h != null && (o = h.elGridBorders) !== null && o !== void 0 && o.node && a.globals.dom.elGraphical.add(h.elGridBorders)), a.config.xaxis.crosshairs.position === "front" && i.crosshairs.drawXCrosshairs(), a.config.yaxis[0].crosshairs.position === "front" && i.crosshairs.drawYCrosshairs(), a.config.chart.type !== "treemap" && i.axes.drawAxis(a.config.chart.type, h); var d = new Me(e.ctx, h), g = new lt(e.ctx, h); if (h !== null && (d.xAxisLabelCorrections(h.xAxisTickWidth), g.setYAxisTextAlignments(), a.config.yaxis.map(function (x, b) { a.globals.ignoreYAxisIndexes.indexOf(b) === -1 && g.yAxisTitleRotate(b, x.opposite) })), i.annotations.drawAxesAnnotations(), !a.globals.noData) { if (a.config.tooltip.enabled && !a.globals.noData && i.w.globals.tooltip.drawTooltip(t.xyRatios), a.globals.axisCharts && (a.globals.isXNumeric || a.config.xaxis.convertedCatToNumeric || a.globals.isRangeBar)) (a.config.chart.zoom.enabled || a.config.chart.selection && a.config.chart.selection.enabled || a.config.chart.pan && a.config.chart.pan.enabled) && i.zoomPanSelection.init({ xyRatios: t.xyRatios }); else { var f = a.config.chart.toolbar.tools;["zoom", "zoomin", "zoomout", "selection", "pan", "reset"].forEach(function (x) { f[x] = !1 }) } a.config.chart.toolbar.show && !a.globals.allSeriesCollapsed && i.toolbar.createToolbar() } a.globals.memory.methodsToExec.length > 0 && a.globals.memory.methodsToExec.forEach(function (x) { x.method(x.params, !1, x.context) }), a.globals.axisCharts || a.globals.noData || i.core.resizeNonAxisCharts(), s(i) }) } }, { key: "destroy", value: function () { var e, t; window.removeEventListener("resize", this.windowResizeHandler), this.el.parentNode, e = this.parentResizeHandler, (t = it.get(e)) && (t.disconnect(), it.delete(e)); var i = this.w.config.chart.id; i && Apex._chartInstances.forEach(function (a, s) { a.id === P.escapeString(i) && Apex._chartInstances.splice(s, 1) }), new Lt(this.ctx).clear({ isUpdating: !1 }) } }, { key: "updateOptions", value: function (e) { var t = this, i = arguments.length > 1 && arguments[1] !== void 0 && arguments[1], a = !(arguments.length > 2 && arguments[2] !== void 0) || arguments[2], s = !(arguments.length > 3 && arguments[3] !== void 0) || arguments[3], r = !(arguments.length > 4 && arguments[4] !== void 0) || arguments[4], n = this.w; return n.globals.selection = void 0, e.series && (this.series.resetSeries(!1, !0, !1), e.series.length && e.series[0].data && (e.series = e.series.map(function (o, h) { return t.updateHelpers._extendSeries(o, h) })), this.updateHelpers.revertDefaultAxisMinMax()), e.xaxis && (e = this.updateHelpers.forceXAxisUpdate(e)), e.yaxis && (e = this.updateHelpers.forceYAxisUpdate(e)), n.globals.collapsedSeriesIndices.length > 0 && this.series.clearPreviousPaths(), e.theme && (e = this.theme.updateThemeOptions(e)), this.updateHelpers._updateOptions(e, i, a, s, r) } }, { key: "updateSeries", value: function () { var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : [], t = !(arguments.length > 1 && arguments[1] !== void 0) || arguments[1], i = !(arguments.length > 2 && arguments[2] !== void 0) || arguments[2]; return this.series.resetSeries(!1), this.updateHelpers.revertDefaultAxisMinMax(), this.updateHelpers._updateSeries(e, t, i) } }, { key: "appendSeries", value: function (e) { var t = !(arguments.length > 1 && arguments[1] !== void 0) || arguments[1], i = !(arguments.length > 2 && arguments[2] !== void 0) || arguments[2], a = this.w.config.series.slice(); return a.push(e), this.series.resetSeries(!1), this.updateHelpers.revertDefaultAxisMinMax(), this.updateHelpers._updateSeries(a, t, i) } }, { key: "appendData", value: function (e) { var t = !(arguments.length > 1 && arguments[1] !== void 0) || arguments[1], i = this; i.w.globals.dataChanged = !0, i.series.getPreviousPaths(); for (var a = i.w.config.series.slice(), s = 0; s < a.length; s++)if (e[s] !== null && e[s] !== void 0) for (var r = 0; r < e[s].data.length; r++)a[s].data.push(e[s].data[r]); return i.w.config.series = a, t && (i.w.globals.initialSeries = P.clone(i.w.config.series)), this.update() } }, { key: "update", value: function (e) { var t = this; return new Promise(function (i, a) { new Lt(t.ctx).clear({ isUpdating: !0 }); var s = t.create(t.w.config.series, e); if (!s) return i(t); t.mount(s).then(function () { typeof t.w.config.chart.events.updated == "function" && t.w.config.chart.events.updated(t, t.w), t.events.fireEvent("updated", [t, t.w]), t.w.globals.isDirty = !0, i(t) }).catch(function (r) { a(r) }) }) } }, { key: "getSyncedCharts", value: function () { var e = this.getGroupedCharts(), t = [this]; return e.length && (t = [], e.forEach(function (i) { t.push(i) })), t } }, { key: "getGroupedCharts", value: function () { var e = this; return Apex._chartInstances.filter(function (t) { if (t.group) return !0 }).map(function (t) { return e.w.config.chart.group === t.group ? t.chart : e }) } }, { key: "toggleSeries", value: function (e) { return this.series.toggleSeries(e) } }, { key: "highlightSeriesOnLegendHover", value: function (e, t) { return this.series.toggleSeriesOnHover(e, t) } }, { key: "showSeries", value: function (e) { this.series.showSeries(e) } }, { key: "hideSeries", value: function (e) { this.series.hideSeries(e) } }, { key: "highlightSeries", value: function (e) { this.series.highlightSeries(e) } }, { key: "isSeriesHidden", value: function (e) { this.series.isSeriesHidden(e) } }, { key: "resetSeries", value: function () { var e = !(arguments.length > 0 && arguments[0] !== void 0) || arguments[0], t = !(arguments.length > 1 && arguments[1] !== void 0) || arguments[1]; this.series.resetSeries(e, t) } }, { key: "addEventListener", value: function (e, t) { this.events.addEventListener(e, t) } }, { key: "removeEventListener", value: function (e, t) { this.events.removeEventListener(e, t) } }, { key: "addXaxisAnnotation", value: function (e) { var t = !(arguments.length > 1 && arguments[1] !== void 0) || arguments[1], i = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : void 0, a = this; i && (a = i), a.annotations.addXaxisAnnotationExternal(e, t, a) } }, { key: "addYaxisAnnotation", value: function (e) { var t = !(arguments.length > 1 && arguments[1] !== void 0) || arguments[1], i = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : void 0, a = this; i && (a = i), a.annotations.addYaxisAnnotationExternal(e, t, a) } }, { key: "addPointAnnotation", value: function (e) { var t = !(arguments.length > 1 && arguments[1] !== void 0) || arguments[1], i = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : void 0, a = this; i && (a = i), a.annotations.addPointAnnotationExternal(e, t, a) } }, { key: "clearAnnotations", value: function () { var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : void 0, t = this; e && (t = e), t.annotations.clearAnnotations(t) } }, { key: "removeAnnotation", value: function (e) { var t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : void 0, i = this; t && (i = t), i.annotations.removeAnnotation(i, e) } }, { key: "getChartArea", value: function () { return this.w.globals.dom.baseEl.querySelector(".apexcharts-inner") } }, { key: "getSeriesTotalXRange", value: function (e, t) { return this.coreUtils.getSeriesTotalsXRange(e, t) } }, { key: "getHighestValueInSeries", value: function () { var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 0; return new rt(this.ctx).getMinYMaxY(e).highestY } }, { key: "getLowestValueInSeries", value: function () { var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 0; return new rt(this.ctx).getMinYMaxY(e).lowestY } }, { key: "getSeriesTotal", value: function () { return this.w.globals.seriesTotals } }, { key: "toggleDataPointSelection", value: function (e, t) { return this.updateHelpers.toggleDataPointSelection(e, t) } }, { key: "zoomX", value: function (e, t) { this.ctx.toolbar.zoomUpdateOptions(e, t) } }, { key: "setLocale", value: function (e) { this.localization.setCurrentLocaleValues(e) } }, { key: "dataURI", value: function (e) { return new He(this.ctx).dataURI(e) } }, { key: "exportToCSV", value: function () { var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}; return new He(this.ctx).exportToCSV(e) } }, { key: "paper", value: function () { return this.w.globals.dom.Paper } }, { key: "_parentResizeCallback", value: function () { this.w.globals.animationEnded && this.w.config.chart.redrawOnParentResize && this._windowResize() } }, { key: "_windowResize", value: function () { var e = this; clearTimeout(this.w.globals.resizeTimer), this.w.globals.resizeTimer = window.setTimeout(function () { e.w.globals.resized = !0, e.w.globals.dataChanged = !1, e.ctx.update() }, 150) } }, { key: "_windowResizeHandler", value: function () { var e = this.w.config.chart.redrawOnWindowResize; typeof e == "function" && (e = e()), e && this._windowResize() } }], [{ key: "getChartByID", value: function (e) { var t = P.escapeString(e); if (Apex._chartInstances) { var i = Apex._chartInstances.filter(function (a) { return a.id === t })[0]; return i && i.chart } } }, { key: "initOnLoad", value: function () { for (var e = document.querySelectorAll("[data-apexcharts]"), t = 0; t < e.length; t++)new p(e[t], JSON.parse(e[t].getAttribute("data-options"))).render() } }, { key: "exec", value: function (e, t) { var i = this.getChartByID(e); if (i) { i.w.globals.isExecCalled = !0; var a = null; if (i.publicMethods.indexOf(t) !== -1) { for (var s = arguments.length, r = new Array(s > 2 ? s - 2 : 0), n = 2; n < s; n++)r[n - 2] = arguments[n]; a = i[t].apply(i, r) } return a } } }, { key: "merge", value: function (e, t) { return P.extend(e, t) } }]), p - }(); We.exports = fa -}); var wi = yt((Xe, we) => { var pa = 200, ii = "__lodash_hash_undefined__", xa = 800, ba = 16, ai = 9007199254740991, si = "[object Arguments]", ma = "[object Array]", va = "[object AsyncFunction]", ya = "[object Boolean]", wa = "[object Date]", ka = "[object Error]", ri = "[object Function]", Aa = "[object GeneratorFunction]", Sa = "[object Map]", Ca = "[object Number]", La = "[object Null]", ni = "[object Object]", Pa = "[object Proxy]", Ma = "[object RegExp]", Ia = "[object Set]", Ta = "[object String]", za = "[object Undefined]", Xa = "[object WeakMap]", Ea = "[object ArrayBuffer]", Ya = "[object DataView]", Fa = "[object Float32Array]", Ra = "[object Float64Array]", Oa = "[object Int8Array]", Da = "[object Int16Array]", Ha = "[object Int32Array]", Na = "[object Uint8Array]", Wa = "[object Uint8ClampedArray]", Ba = "[object Uint16Array]", Ga = "[object Uint32Array]", Va = /[\\^$.*+?()[\]{}|]/g, _a = /^\[object .+?Constructor\]$/, ja = /^(?:0|[1-9]\d*)$/, U = {}; U[Fa] = U[Ra] = U[Oa] = U[Da] = U[Ha] = U[Na] = U[Wa] = U[Ba] = U[Ga] = !0; U[si] = U[ma] = U[Ea] = U[ya] = U[Ya] = U[wa] = U[ka] = U[ri] = U[Sa] = U[Ca] = U[ni] = U[Ma] = U[Ia] = U[Ta] = U[Xa] = !1; var oi = typeof global == "object" && global && global.Object === Object && global, Ua = typeof self == "object" && self && self.Object === Object && self, Fe = oi || Ua || Function("return this")(), li = typeof Xe == "object" && Xe && !Xe.nodeType && Xe, Ee = li && typeof we == "object" && we && !we.nodeType && we, hi = Ee && Ee.exports === li, ht = hi && oi.process, Ut = function () { try { var p = Ee && Ee.require && Ee.require("util").types; return p || ht && ht.binding && ht.binding("util") } catch { } }(), qt = Ut && Ut.isTypedArray; function qa(p, e, t) { switch (t.length) { case 0: return p.call(e); case 1: return p.call(e, t[0]); case 2: return p.call(e, t[0], t[1]); case 3: return p.call(e, t[0], t[1], t[2]) }return p.apply(e, t) } function Za(p, e) { for (var t = -1, i = Array(p); ++t < p;)i[t] = e(t); return i } function $a(p) { return function (e) { return p(e) } } function Ja(p, e) { return p?.[e] } function Ka(p, e) { return function (t) { return p(e(t)) } } var Qa = Array.prototype, es = Function.prototype, _e = Object.prototype, ct = Fe["__core-js_shared__"], je = es.toString, ce = _e.hasOwnProperty, Zt = function () { var p = /[^.]+$/.exec(ct && ct.keys && ct.keys.IE_PROTO || ""); return p ? "Symbol(src)_1." + p : "" }(), ci = _e.toString, ts = je.call(Object), is = RegExp("^" + je.call(ce).replace(Va, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"), Ge = hi ? Fe.Buffer : void 0, $t = Fe.Symbol, Jt = Fe.Uint8Array, Kt = Ge ? Ge.allocUnsafe : void 0, di = Ka(Object.getPrototypeOf, Object), Qt = Object.create, as = _e.propertyIsEnumerable, ss = Qa.splice, fe = $t ? $t.toStringTag : void 0, Ve = function () { try { var p = xt(Object, "defineProperty"); return p({}, "", {}), p } catch { } }(), rs = Ge ? Ge.isBuffer : void 0, ei = Math.max, ns = Date.now, gi = xt(Fe, "Map"), Ye = xt(Object, "create"), os = function () { function p() { } return function (e) { if (!xe(e)) return {}; if (Qt) return Qt(e); p.prototype = e; var t = new p; return p.prototype = void 0, t } }(); function pe(p) { var e = -1, t = p == null ? 0 : p.length; for (this.clear(); ++e < t;) { var i = p[e]; this.set(i[0], i[1]) } } function ls() { this.__data__ = Ye ? Ye(null) : {}, this.size = 0 } function hs(p) { var e = this.has(p) && delete this.__data__[p]; return this.size -= e ? 1 : 0, e } function cs(p) { var e = this.__data__; if (Ye) { var t = e[p]; return t === ii ? void 0 : t } return ce.call(e, p) ? e[p] : void 0 } function ds(p) { var e = this.__data__; return Ye ? e[p] !== void 0 : ce.call(e, p) } function gs(p, e) { var t = this.__data__; return this.size += this.has(p) ? 0 : 1, t[p] = Ye && e === void 0 ? ii : e, this } pe.prototype.clear = ls; pe.prototype.delete = hs; pe.prototype.get = cs; pe.prototype.has = ds; pe.prototype.set = gs; function de(p) { var e = -1, t = p == null ? 0 : p.length; for (this.clear(); ++e < t;) { var i = p[e]; this.set(i[0], i[1]) } } function us() { this.__data__ = [], this.size = 0 } function fs(p) { var e = this.__data__, t = Ue(e, p); if (t < 0) return !1; var i = e.length - 1; return t == i ? e.pop() : ss.call(e, t, 1), --this.size, !0 } function ps(p) { var e = this.__data__, t = Ue(e, p); return t < 0 ? void 0 : e[t][1] } function xs(p) { return Ue(this.__data__, p) > -1 } function bs(p, e) { var t = this.__data__, i = Ue(t, p); return i < 0 ? (++this.size, t.push([p, e])) : t[i][1] = e, this } de.prototype.clear = us; de.prototype.delete = fs; de.prototype.get = ps; de.prototype.has = xs; de.prototype.set = bs; function ke(p) { var e = -1, t = p == null ? 0 : p.length; for (this.clear(); ++e < t;) { var i = p[e]; this.set(i[0], i[1]) } } function ms() { this.size = 0, this.__data__ = { hash: new pe, map: new (gi || de), string: new pe } } function vs(p) { var e = Ze(this, p).delete(p); return this.size -= e ? 1 : 0, e } function ys(p) { return Ze(this, p).get(p) } function ws(p) { return Ze(this, p).has(p) } function ks(p, e) { var t = Ze(this, p), i = t.size; return t.set(p, e), this.size += t.size == i ? 0 : 1, this } ke.prototype.clear = ms; ke.prototype.delete = vs; ke.prototype.get = ys; ke.prototype.has = ws; ke.prototype.set = ks; function Ae(p) { var e = this.__data__ = new de(p); this.size = e.size } function As() { this.__data__ = new de, this.size = 0 } function Ss(p) { var e = this.__data__, t = e.delete(p); return this.size = e.size, t } function Cs(p) { return this.__data__.get(p) } function Ls(p) { return this.__data__.has(p) } function Ps(p, e) { var t = this.__data__; if (t instanceof de) { var i = t.__data__; if (!gi || i.length < pa - 1) return i.push([p, e]), this.size = ++t.size, this; t = this.__data__ = new ke(i) } return t.set(p, e), this.size = t.size, this } Ae.prototype.clear = As; Ae.prototype.delete = Ss; Ae.prototype.get = Cs; Ae.prototype.has = Ls; Ae.prototype.set = Ps; function Ms(p, e) { var t = ft(p), i = !t && ut(p), a = !t && !i && xi(p), s = !t && !i && !a && mi(p), r = t || i || a || s, n = r ? Za(p.length, String) : [], o = n.length; for (var h in p) (e || ce.call(p, h)) && !(r && (h == "length" || a && (h == "offset" || h == "parent") || s && (h == "buffer" || h == "byteLength" || h == "byteOffset") || fi(h, o))) && n.push(h); return n } function dt(p, e, t) { (t !== void 0 && !$e(p[e], t) || t === void 0 && !(e in p)) && pt(p, e, t) } function Is(p, e, t) { var i = p[e]; (!(ce.call(p, e) && $e(i, t)) || t === void 0 && !(e in p)) && pt(p, e, t) } function Ue(p, e) { for (var t = p.length; t--;)if ($e(p[t][0], e)) return t; return -1 } function pt(p, e, t) { e == "__proto__" && Ve ? Ve(p, e, { configurable: !0, enumerable: !0, value: t, writable: !0 }) : p[e] = t } var Ts = Gs(); function qe(p) { return p == null ? p === void 0 ? za : La : fe && fe in Object(p) ? Vs(p) : $s(p) } function ti(p) { return Re(p) && qe(p) == si } function zs(p) { if (!xe(p) || qs(p)) return !1; var e = mt(p) ? is : _a; return e.test(er(p)) } function Xs(p) { return Re(p) && bi(p.length) && !!U[qe(p)] } function Es(p) { if (!xe(p)) return Zs(p); var e = pi(p), t = []; for (var i in p) i == "constructor" && (e || !ce.call(p, i)) || t.push(i); return t } function ui(p, e, t, i, a) { p !== e && Ts(e, function (s, r) { if (a || (a = new Ae), xe(s)) Ys(p, e, r, t, ui, i, a); else { var n = i ? i(gt(p, r), s, r + "", p, e, a) : void 0; n === void 0 && (n = s), dt(p, r, n) } }, vi) } function Ys(p, e, t, i, a, s, r) { var n = gt(p, t), o = gt(e, t), h = r.get(o); if (h) { dt(p, t, h); return } var c = s ? s(n, o, t + "", p, e, r) : void 0, d = c === void 0; if (d) { var g = ft(o), f = !g && xi(o), x = !g && !f && mi(o); c = o, g || f || x ? ft(n) ? c = n : tr(n) ? c = Ns(n) : f ? (d = !1, c = Os(o, !0)) : x ? (d = !1, c = Hs(o, !0)) : c = [] : ir(o) || ut(o) ? (c = n, ut(n) ? c = ar(n) : (!xe(n) || mt(n)) && (c = _s(o))) : d = !1 } d && (r.set(o, c), a(c, o, i, s, r), r.delete(o)), dt(p, t, c) } function Fs(p, e) { return Ks(Js(p, e, yi), p + "") } var Rs = Ve ? function (p, e) { return Ve(p, "toString", { configurable: !0, enumerable: !1, value: rr(e), writable: !0 }) } : yi; function Os(p, e) { if (e) return p.slice(); var t = p.length, i = Kt ? Kt(t) : new p.constructor(t); return p.copy(i), i } function Ds(p) { var e = new p.constructor(p.byteLength); return new Jt(e).set(new Jt(p)), e } function Hs(p, e) { var t = e ? Ds(p.buffer) : p.buffer; return new p.constructor(t, p.byteOffset, p.length) } function Ns(p, e) { var t = -1, i = p.length; for (e || (e = Array(i)); ++t < i;)e[t] = p[t]; return e } function Ws(p, e, t, i) { var a = !t; t || (t = {}); for (var s = -1, r = e.length; ++s < r;) { var n = e[s], o = i ? i(t[n], p[n], n, t, p) : void 0; o === void 0 && (o = p[n]), a ? pt(t, n, o) : Is(t, n, o) } return t } function Bs(p) { return Fs(function (e, t) { var i = -1, a = t.length, s = a > 1 ? t[a - 1] : void 0, r = a > 2 ? t[2] : void 0; for (s = p.length > 3 && typeof s == "function" ? (a--, s) : void 0, r && js(t[0], t[1], r) && (s = a < 3 ? void 0 : s, a = 1), e = Object(e); ++i < a;) { var n = t[i]; n && p(e, n, i, s) } return e }) } function Gs(p) { return function (e, t, i) { for (var a = -1, s = Object(e), r = i(e), n = r.length; n--;) { var o = r[p ? n : ++a]; if (t(s[o], o, s) === !1) break } return e } } function Ze(p, e) { var t = p.__data__; return Us(e) ? t[typeof e == "string" ? "string" : "hash"] : t.map } function xt(p, e) { var t = Ja(p, e); return zs(t) ? t : void 0 } function Vs(p) { var e = ce.call(p, fe), t = p[fe]; try { p[fe] = void 0; var i = !0 } catch { } var a = ci.call(p); return i && (e ? p[fe] = t : delete p[fe]), a } function _s(p) { return typeof p.constructor == "function" && !pi(p) ? os(di(p)) : {} } function fi(p, e) { var t = typeof p; return e = e ?? ai, !!e && (t == "number" || t != "symbol" && ja.test(p)) && p > -1 && p % 1 == 0 && p < e } function js(p, e, t) { if (!xe(t)) return !1; var i = typeof e; return (i == "number" ? bt(t) && fi(e, t.length) : i == "string" && e in t) ? $e(t[e], p) : !1 } function Us(p) { var e = typeof p; return e == "string" || e == "number" || e == "symbol" || e == "boolean" ? p !== "__proto__" : p === null } function qs(p) { return !!Zt && Zt in p } function pi(p) { var e = p && p.constructor, t = typeof e == "function" && e.prototype || _e; return p === t } function Zs(p) { var e = []; if (p != null) for (var t in Object(p)) e.push(t); return e } function $s(p) { return ci.call(p) } function Js(p, e, t) { return e = ei(e === void 0 ? p.length - 1 : e, 0), function () { for (var i = arguments, a = -1, s = ei(i.length - e, 0), r = Array(s); ++a < s;)r[a] = i[e + a]; a = -1; for (var n = Array(e + 1); ++a < e;)n[a] = i[a]; return n[e] = t(r), qa(p, this, n) } } function gt(p, e) { if (!(e === "constructor" && typeof p[e] == "function") && e != "__proto__") return p[e] } var Ks = Qs(Rs); function Qs(p) { var e = 0, t = 0; return function () { var i = ns(), a = ba - (i - t); if (t = i, a > 0) { if (++e >= xa) return arguments[0] } else e = 0; return p.apply(void 0, arguments) } } function er(p) { if (p != null) { try { return je.call(p) } catch { } try { return p + "" } catch { } } return "" } function $e(p, e) { return p === e || p !== p && e !== e } var ut = ti(function () { return arguments }()) ? ti : function (p) { return Re(p) && ce.call(p, "callee") && !as.call(p, "callee") }, ft = Array.isArray; function bt(p) { return p != null && bi(p.length) && !mt(p) } function tr(p) { return Re(p) && bt(p) } var xi = rs || nr; function mt(p) { if (!xe(p)) return !1; var e = qe(p); return e == ri || e == Aa || e == va || e == Pa } function bi(p) { return typeof p == "number" && p > -1 && p % 1 == 0 && p <= ai } function xe(p) { var e = typeof p; return p != null && (e == "object" || e == "function") } function Re(p) { return p != null && typeof p == "object" } function ir(p) { if (!Re(p) || qe(p) != ni) return !1; var e = di(p); if (e === null) return !0; var t = ce.call(e, "constructor") && e.constructor; return typeof t == "function" && t instanceof t && je.call(t) == ts } var mi = qt ? $a(qt) : Xs; function ar(p) { return Ws(p, vi(p)) } function vi(p) { return bt(p) ? Ms(p, !0) : Es(p) } var sr = Bs(function (p, e, t) { ui(p, e, t) }); function rr(p) { return function () { return p } } function yi(p) { return p } function nr() { return !1 } we.exports = sr }); var Ai = zi(jt(), 1), ki = wi(); function or({ options: p, chartId: e, theme: t, extraJsOptions: i }) { return { chart: null, options: p, chartId: e, theme: t, extraJsOptions: i, init: function () { this.$wire.$on("updateOptions", ({ options: a }) => { a = ki(a, this.extraJsOptions), this.updateChart(a) }), Alpine.effect(() => { let a = Alpine.store("theme"); this.$nextTick(() => { this.chart === null ? this.initChart() : this.updateChart({ theme: { mode: a }, chart: { background: "inherit" } }) }) }) }, initChart: function () { this.options.theme = { mode: this.theme }, this.options.chart.background = "inherit", this.options = ki(this.options, this.extraJsOptions), this.chart = new Ai.default(document.querySelector(this.chartId), this.options), this.chart.render() }, updateChart: function (a) { this.chart.updateOptions(a, !1, !0, !0) } } } export { or as default }; +}`;var c=((h=e.opts.chart)===null||h===void 0?void 0:h.nonce)||e.w.config.chart.nonce;c&&o.setAttribute("nonce",c),r?s.prepend(o):n.head.appendChild(o)}var d=e.create(e.w.config.series,{});if(!d)return t(e);e.mount(d).then(function(){typeof e.w.config.chart.events.mounted=="function"&&e.w.config.chart.events.mounted(e,e.w),e.events.fireEvent("mounted",[e,e.w]),t(d)}).catch(function(g){i(g)})}else i(new Error("Element not found"))})}},{key:"create",value:function(e,t){var i=this,a=this.w;new Ct(this).initModules();var s=this.w.globals;if(s.noData=!1,s.animationEnded=!1,this.responsive.checkResponsiveConfig(t),a.config.xaxis.convertedCatToNumeric&&new Le(a.config).convertCatToNumericXaxis(a.config,this.ctx),this.el===null||(this.core.setupElements(),a.config.chart.type==="treemap"&&(a.config.grid.show=!1,a.config.yaxis[0].show=!1),s.svgWidth===0))return s.animationEnded=!0,null;var r=e;e.forEach(function(g,f){g.hidden&&(r=i.legend.legendHelpers.getSeriesAfterCollapsing({realIndex:f}))});var n=$.checkComboSeries(r,a.config.chart.type);s.comboCharts=n.comboCharts,s.comboBarCount=n.comboBarCount;var o=r.every(function(g){return g.data&&g.data.length===0});(r.length===0||o&&s.collapsedSeries.length<1)&&this.series.handleNoData(),this.events.setupEventHandlers(),this.data.parseData(r),this.theme.init(),new ye(this).setGlobalMarkerSize(),this.formatters.setLabelFormatters(),this.titleSubtitle.draw(),s.noData&&s.collapsedSeries.length!==s.series.length&&!a.config.legend.showForSingleSeries||this.legend.init(),this.series.hasAllSeriesEqualX(),s.axisCharts&&(this.core.coreCalculations(),a.config.xaxis.type!=="category"&&this.formatters.setLabelFormatters(),this.ctx.toolbar.minX=a.globals.minX,this.ctx.toolbar.maxX=a.globals.maxX),this.formatters.heatmapLabelFormatters(),new $(this).getLargestMarkerSize(),this.dimensions.plotCoords();var h=this.core.xySettings();this.grid.createGridMask();var c=this.core.plotChartType(r,h),d=new be(this);return d.bringForward(),a.config.dataLabels.background.enabled&&d.dataLabelsBackground(),this.core.shiftGraphPosition(),{elGraph:c,xyRatios:h,dimensions:{plot:{left:a.globals.translateX,top:a.globals.translateY,width:a.globals.gridWidth,height:a.globals.gridHeight}}}}},{key:"mount",value:function(){var e=this,t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:null,i=this,a=i.w;return new Promise(function(s,r){if(i.el===null)return r(new Error("Not enough data to display or target element not found"));(t===null||a.globals.allSeriesCollapsed)&&i.series.handleNoData(),i.grid=new Rt(i);var n,o,h=i.grid.drawGrid();if(i.annotations=new Fi(i),i.annotations.drawImageAnnos(),i.annotations.drawTextAnnos(),a.config.grid.position==="back"&&(h&&a.globals.dom.elGraphical.add(h.el),h!=null&&(n=h.elGridBorders)!==null&&n!==void 0&&n.node&&a.globals.dom.elGraphical.add(h.elGridBorders)),Array.isArray(t.elGraph))for(var c=0;c0&&a.globals.memory.methodsToExec.forEach(function(x){x.method(x.params,!1,x.context)}),a.globals.axisCharts||a.globals.noData||i.core.resizeNonAxisCharts(),s(i)})}},{key:"destroy",value:function(){var e,t;window.removeEventListener("resize",this.windowResizeHandler),this.el.parentNode,e=this.parentResizeHandler,(t=it.get(e))&&(t.disconnect(),it.delete(e));var i=this.w.config.chart.id;i&&Apex._chartInstances.forEach(function(a,s){a.id===P.escapeString(i)&&Apex._chartInstances.splice(s,1)}),new Lt(this.ctx).clear({isUpdating:!1})}},{key:"updateOptions",value:function(e){var t=this,i=arguments.length>1&&arguments[1]!==void 0&&arguments[1],a=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2],s=!(arguments.length>3&&arguments[3]!==void 0)||arguments[3],r=!(arguments.length>4&&arguments[4]!==void 0)||arguments[4],n=this.w;return n.globals.selection=void 0,e.series&&(this.series.resetSeries(!1,!0,!1),e.series.length&&e.series[0].data&&(e.series=e.series.map(function(o,h){return t.updateHelpers._extendSeries(o,h)})),this.updateHelpers.revertDefaultAxisMinMax()),e.xaxis&&(e=this.updateHelpers.forceXAxisUpdate(e)),e.yaxis&&(e=this.updateHelpers.forceYAxisUpdate(e)),n.globals.collapsedSeriesIndices.length>0&&this.series.clearPreviousPaths(),e.theme&&(e=this.theme.updateThemeOptions(e)),this.updateHelpers._updateOptions(e,i,a,s,r)}},{key:"updateSeries",value:function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],t=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],i=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2];return this.series.resetSeries(!1),this.updateHelpers.revertDefaultAxisMinMax(),this.updateHelpers._updateSeries(e,t,i)}},{key:"appendSeries",value:function(e){var t=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],i=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2],a=this.w.config.series.slice();return a.push(e),this.series.resetSeries(!1),this.updateHelpers.revertDefaultAxisMinMax(),this.updateHelpers._updateSeries(a,t,i)}},{key:"appendData",value:function(e){var t=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],i=this;i.w.globals.dataChanged=!0,i.series.getPreviousPaths();for(var a=i.w.config.series.slice(),s=0;s0&&arguments[0]!==void 0)||arguments[0],t=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1];this.series.resetSeries(e,t)}},{key:"addEventListener",value:function(e,t){this.events.addEventListener(e,t)}},{key:"removeEventListener",value:function(e,t){this.events.removeEventListener(e,t)}},{key:"addXaxisAnnotation",value:function(e){var t=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:void 0,a=this;i&&(a=i),a.annotations.addXaxisAnnotationExternal(e,t,a)}},{key:"addYaxisAnnotation",value:function(e){var t=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:void 0,a=this;i&&(a=i),a.annotations.addYaxisAnnotationExternal(e,t,a)}},{key:"addPointAnnotation",value:function(e){var t=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:void 0,a=this;i&&(a=i),a.annotations.addPointAnnotationExternal(e,t,a)}},{key:"clearAnnotations",value:function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:void 0,t=this;e&&(t=e),t.annotations.clearAnnotations(t)}},{key:"removeAnnotation",value:function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:void 0,i=this;t&&(i=t),i.annotations.removeAnnotation(i,e)}},{key:"getChartArea",value:function(){return this.w.globals.dom.baseEl.querySelector(".apexcharts-inner")}},{key:"getSeriesTotalXRange",value:function(e,t){return this.coreUtils.getSeriesTotalsXRange(e,t)}},{key:"getHighestValueInSeries",value:function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;return new rt(this.ctx).getMinYMaxY(e).highestY}},{key:"getLowestValueInSeries",value:function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;return new rt(this.ctx).getMinYMaxY(e).lowestY}},{key:"getSeriesTotal",value:function(){return this.w.globals.seriesTotals}},{key:"toggleDataPointSelection",value:function(e,t){return this.updateHelpers.toggleDataPointSelection(e,t)}},{key:"zoomX",value:function(e,t){this.ctx.toolbar.zoomUpdateOptions(e,t)}},{key:"setLocale",value:function(e){this.localization.setCurrentLocaleValues(e)}},{key:"dataURI",value:function(e){return new He(this.ctx).dataURI(e)}},{key:"exportToCSV",value:function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return new He(this.ctx).exportToCSV(e)}},{key:"paper",value:function(){return this.w.globals.dom.Paper}},{key:"_parentResizeCallback",value:function(){this.w.globals.animationEnded&&this.w.config.chart.redrawOnParentResize&&this._windowResize()}},{key:"_windowResize",value:function(){var e=this;clearTimeout(this.w.globals.resizeTimer),this.w.globals.resizeTimer=window.setTimeout(function(){e.w.globals.resized=!0,e.w.globals.dataChanged=!1,e.ctx.update()},150)}},{key:"_windowResizeHandler",value:function(){var e=this.w.config.chart.redrawOnWindowResize;typeof e=="function"&&(e=e()),e&&this._windowResize()}}],[{key:"getChartByID",value:function(e){var t=P.escapeString(e);if(Apex._chartInstances){var i=Apex._chartInstances.filter(function(a){return a.id===t})[0];return i&&i.chart}}},{key:"initOnLoad",value:function(){for(var e=document.querySelectorAll("[data-apexcharts]"),t=0;t2?s-2:0),n=2;n{var pa=200,ii="__lodash_hash_undefined__",xa=800,ba=16,ai=9007199254740991,si="[object Arguments]",ma="[object Array]",va="[object AsyncFunction]",ya="[object Boolean]",wa="[object Date]",ka="[object Error]",ri="[object Function]",Aa="[object GeneratorFunction]",Sa="[object Map]",Ca="[object Number]",La="[object Null]",ni="[object Object]",Pa="[object Proxy]",Ma="[object RegExp]",Ia="[object Set]",Ta="[object String]",za="[object Undefined]",Xa="[object WeakMap]",Ea="[object ArrayBuffer]",Ya="[object DataView]",Fa="[object Float32Array]",Ra="[object Float64Array]",Oa="[object Int8Array]",Da="[object Int16Array]",Ha="[object Int32Array]",Na="[object Uint8Array]",Wa="[object Uint8ClampedArray]",Ba="[object Uint16Array]",Ga="[object Uint32Array]",Va=/[\\^$.*+?()[\]{}|]/g,_a=/^\[object .+?Constructor\]$/,ja=/^(?:0|[1-9]\d*)$/,U={};U[Fa]=U[Ra]=U[Oa]=U[Da]=U[Ha]=U[Na]=U[Wa]=U[Ba]=U[Ga]=!0;U[si]=U[ma]=U[Ea]=U[ya]=U[Ya]=U[wa]=U[ka]=U[ri]=U[Sa]=U[Ca]=U[ni]=U[Ma]=U[Ia]=U[Ta]=U[Xa]=!1;var oi=typeof global=="object"&&global&&global.Object===Object&&global,Ua=typeof self=="object"&&self&&self.Object===Object&&self,Fe=oi||Ua||Function("return this")(),li=typeof Xe=="object"&&Xe&&!Xe.nodeType&&Xe,Ee=li&&typeof we=="object"&&we&&!we.nodeType&&we,hi=Ee&&Ee.exports===li,ht=hi&&oi.process,Ut=function(){try{var p=Ee&&Ee.require&&Ee.require("util").types;return p||ht&&ht.binding&&ht.binding("util")}catch{}}(),qt=Ut&&Ut.isTypedArray;function qa(p,e,t){switch(t.length){case 0:return p.call(e);case 1:return p.call(e,t[0]);case 2:return p.call(e,t[0],t[1]);case 3:return p.call(e,t[0],t[1],t[2])}return p.apply(e,t)}function Za(p,e){for(var t=-1,i=Array(p);++t-1}function bs(p,e){var t=this.__data__,i=Ue(t,p);return i<0?(++this.size,t.push([p,e])):t[i][1]=e,this}de.prototype.clear=us;de.prototype.delete=fs;de.prototype.get=ps;de.prototype.has=xs;de.prototype.set=bs;function ke(p){var e=-1,t=p==null?0:p.length;for(this.clear();++e1?t[a-1]:void 0,r=a>2?t[2]:void 0;for(s=p.length>3&&typeof s=="function"?(a--,s):void 0,r&&js(t[0],t[1],r)&&(s=a<3?void 0:s,a=1),e=Object(e);++i-1&&p%1==0&&p0){if(++e>=xa)return arguments[0]}else e=0;return p.apply(void 0,arguments)}}function er(p){if(p!=null){try{return je.call(p)}catch{}try{return p+""}catch{}}return""}function $e(p,e){return p===e||p!==p&&e!==e}var ut=ti(function(){return arguments}())?ti:function(p){return Re(p)&&ce.call(p,"callee")&&!as.call(p,"callee")},ft=Array.isArray;function bt(p){return p!=null&&bi(p.length)&&!mt(p)}function tr(p){return Re(p)&&bt(p)}var xi=rs||nr;function mt(p){if(!xe(p))return!1;var e=qe(p);return e==ri||e==Aa||e==va||e==Pa}function bi(p){return typeof p=="number"&&p>-1&&p%1==0&&p<=ai}function xe(p){var e=typeof p;return p!=null&&(e=="object"||e=="function")}function Re(p){return p!=null&&typeof p=="object"}function ir(p){if(!Re(p)||qe(p)!=ni)return!1;var e=di(p);if(e===null)return!0;var t=ce.call(e,"constructor")&&e.constructor;return typeof t=="function"&&t instanceof t&&je.call(t)==ts}var mi=qt?$a(qt):Xs;function ar(p){return Ws(p,vi(p))}function vi(p){return bt(p)?Ms(p,!0):Es(p)}var sr=Bs(function(p,e,t){ui(p,e,t)});function rr(p){return function(){return p}}function yi(p){return p}function nr(){return!1}we.exports=sr});var Ai=zi(jt(),1),ki=wi();function or({options:p,chartId:e,theme:t,extraJsOptions:i}){return{chart:null,options:p,chartId:e,theme:t,extraJsOptions:i,init:function(){this.$wire.$on("updateOptions",({options:a})=>{a=ki(a,this.extraJsOptions),this.updateChart(a)}),Alpine.effect(()=>{let a=Alpine.store("theme");this.$nextTick(()=>{this.chart===null?this.initChart():this.updateChart({theme:{mode:a},chart:{background:"inherit"}})})})},initChart:function(){this.options.theme={mode:this.theme},this.options.chart.background="inherit",this.options=ki(this.options,this.extraJsOptions),this.chart=new Ai.default(document.querySelector(this.chartId),this.options),this.chart.render()},updateChart:function(a){this.chart.updateOptions(a,!1,!0,!0)}}}export{or as default}; /*! Bundled license information: apexcharts/dist/apexcharts.common.js: diff --git a/public/js/filament/support/async-alpine.js b/public/js/filament/support/async-alpine.js index 6830d97..048f75c 100644 --- a/public/js/filament/support/async-alpine.js +++ b/public/js/filament/support/async-alpine.js @@ -1 +1 @@ -(() => { (() => { var d = Object.defineProperty, m = t => d(t, "__esModule", { value: !0 }), f = (t, e) => { m(t); for (var i in e) d(t, i, { get: e[i], enumerable: !0 }) }, o = {}; f(o, { eager: () => g, event: () => w, idle: () => y, media: () => b, visible: () => E }); var c = () => !0, g = c, v = ({ component: t, argument: e }) => new Promise(i => { if (e) window.addEventListener(e, () => i(), { once: !0 }); else { let n = a => { a.detail.id === t.id && (window.removeEventListener("async-alpine:load", n), i()) }; window.addEventListener("async-alpine:load", n) } }), w = v, x = () => new Promise(t => { "requestIdleCallback" in window ? window.requestIdleCallback(t) : setTimeout(t, 200) }), y = x, A = ({ argument: t }) => new Promise(e => { if (!t) return console.log("Async Alpine: media strategy requires a media query. Treating as 'eager'"), e(); let i = window.matchMedia(`(${t})`); i.matches ? e() : i.addEventListener("change", e, { once: !0 }) }), b = A, $ = ({ component: t, argument: e }) => new Promise(i => { let n = e || "0px 0px 0px 0px", a = new IntersectionObserver(r => { r[0].isIntersecting && (a.disconnect(), i()) }, { rootMargin: n }); a.observe(t.el) }), E = $; function P(t) { let e = q(t), i = u(e); return i.type === "method" ? { type: "expression", operator: "&&", parameters: [i] } : i } function q(t) { let e = /\s*([()])\s*|\s*(\|\||&&|\|)\s*|\s*((?:[^()&|]+\([^()]+\))|[^()&|]+)\s*/g, i = [], n; for (; (n = e.exec(t)) !== null;) { let [, a, r, s] = n; if (a !== void 0) i.push({ type: "parenthesis", value: a }); else if (r !== void 0) i.push({ type: "operator", value: r === "|" ? "&&" : r }); else { let p = { type: "method", method: s.trim() }; s.includes("(") && (p.method = s.substring(0, s.indexOf("(")).trim(), p.argument = s.substring(s.indexOf("(") + 1, s.indexOf(")"))), s.method === "immediate" && (s.method = "eager"), i.push(p) } } return i } function u(t) { let e = h(t); for (; t.length > 0 && (t[0].value === "&&" || t[0].value === "|" || t[0].value === "||");) { let i = t.shift().value, n = h(t); e.type === "expression" && e.operator === i ? e.parameters.push(n) : e = { type: "expression", operator: i, parameters: [e, n] } } return e } function h(t) { if (t[0].value === "(") { t.shift(); let e = u(t); return t[0].value === ")" && t.shift(), e } else return t.shift() } var _ = "__internal_", l = { Alpine: null, _options: { prefix: "ax-", alpinePrefix: "x-", root: "load", inline: "load-src", defaultStrategy: "eager" }, _alias: !1, _data: {}, _realIndex: 0, get _index() { return this._realIndex++ }, init(t, e = {}) { return this.Alpine = t, this._options = { ...this._options, ...e }, this }, start() { return this._processInline(), this._setupComponents(), this._mutations(), this }, data(t, e = !1) { return this._data[t] = { loaded: !1, download: e }, this }, url(t, e) { !t || !e || (this._data[t] || this.data(t), this._data[t].download = () => import(this._parseUrl(e))) }, alias(t) { this._alias = t }, _processInline() { let t = document.querySelectorAll(`[${this._options.prefix}${this._options.inline}]`); for (let e of t) this._inlineElement(e) }, _inlineElement(t) { let e = t.getAttribute(`${this._options.alpinePrefix}data`), i = t.getAttribute(`${this._options.prefix}${this._options.inline}`); if (!e || !i) return; let n = this._parseName(e); this.url(n, i) }, _setupComponents() { let t = document.querySelectorAll(`[${this._options.prefix}${this._options.root}]`); for (let e of t) this._setupComponent(e) }, _setupComponent(t) { let e = t.getAttribute(`${this._options.alpinePrefix}data`); t.setAttribute(`${this._options.alpinePrefix}ignore`, ""); let i = this._parseName(e), n = t.getAttribute(`${this._options.prefix}${this._options.root}`) || this._options.defaultStrategy; this._componentStrategy({ name: i, strategy: n, el: t, id: t.id || this._index }) }, async _componentStrategy(t) { let e = P(t.strategy); await this._generateRequirements(t, e), await this._download(t.name), this._activate(t) }, _generateRequirements(t, e) { if (e.type === "expression") { if (e.operator === "&&") return Promise.all(e.parameters.map(i => this._generateRequirements(t, i))); if (e.operator === "||") return Promise.any(e.parameters.map(i => this._generateRequirements(t, i))) } return o[e.method] ? o[e.method]({ component: t, argument: e.argument }) : !1 }, async _download(t) { if (t.startsWith(_) || (this._handleAlias(t), !this._data[t] || this._data[t].loaded)) return; let e = await this._getModule(t); this.Alpine.data(t, e), this._data[t].loaded = !0 }, async _getModule(t) { if (!this._data[t]) return; let e = await this._data[t].download(t); return typeof e == "function" ? e : e[t] || e.default || Object.values(e)[0] || !1 }, _activate(t) { this.Alpine.destroyTree(t.el), t.el.removeAttribute(`${this._options.alpinePrefix}ignore`), t.el._x_ignore = !1, this.Alpine.initTree(t.el) }, _mutations() { new MutationObserver(t => { for (let e of t) if (e.addedNodes) for (let i of e.addedNodes) i.nodeType === 1 && (i.hasAttribute(`${this._options.prefix}${this._options.root}`) && this._mutationEl(i), i.querySelectorAll(`[${this._options.prefix}${this._options.root}]`).forEach(n => this._mutationEl(n))) }).observe(document, { attributes: !0, childList: !0, subtree: !0 }) }, _mutationEl(t) { t.hasAttribute(`${this._options.prefix}${this._options.inline}`) && this._inlineElement(t), this._setupComponent(t) }, _handleAlias(t) { if (!(!this._alias || this._data[t])) { if (typeof this._alias == "function") { this.data(t, this._alias); return } this.url(t, this._alias.replaceAll("[name]", t)) } }, _parseName(t) { return (t || "").split(/[({]/g)[0] || `${_}${this._index}` }, _parseUrl(t) { return new RegExp("^(?:[a-z+]+:)?//", "i").test(t) ? t : new URL(t, document.baseURI).href } }; document.addEventListener("alpine:init", () => { window.AsyncAlpine = l, l.init(Alpine, window.AsyncAlpineOptions || {}), document.dispatchEvent(new CustomEvent("async-alpine:init")), l.start() }) })(); })(); +(()=>{(()=>{var d=Object.defineProperty,m=t=>d(t,"__esModule",{value:!0}),f=(t,e)=>{m(t);for(var i in e)d(t,i,{get:e[i],enumerable:!0})},o={};f(o,{eager:()=>g,event:()=>w,idle:()=>y,media:()=>b,visible:()=>E});var c=()=>!0,g=c,v=({component:t,argument:e})=>new Promise(i=>{if(e)window.addEventListener(e,()=>i(),{once:!0});else{let n=a=>{a.detail.id===t.id&&(window.removeEventListener("async-alpine:load",n),i())};window.addEventListener("async-alpine:load",n)}}),w=v,x=()=>new Promise(t=>{"requestIdleCallback"in window?window.requestIdleCallback(t):setTimeout(t,200)}),y=x,A=({argument:t})=>new Promise(e=>{if(!t)return console.log("Async Alpine: media strategy requires a media query. Treating as 'eager'"),e();let i=window.matchMedia(`(${t})`);i.matches?e():i.addEventListener("change",e,{once:!0})}),b=A,$=({component:t,argument:e})=>new Promise(i=>{let n=e||"0px 0px 0px 0px",a=new IntersectionObserver(r=>{r[0].isIntersecting&&(a.disconnect(),i())},{rootMargin:n});a.observe(t.el)}),E=$;function P(t){let e=q(t),i=u(e);return i.type==="method"?{type:"expression",operator:"&&",parameters:[i]}:i}function q(t){let e=/\s*([()])\s*|\s*(\|\||&&|\|)\s*|\s*((?:[^()&|]+\([^()]+\))|[^()&|]+)\s*/g,i=[],n;for(;(n=e.exec(t))!==null;){let[,a,r,s]=n;if(a!==void 0)i.push({type:"parenthesis",value:a});else if(r!==void 0)i.push({type:"operator",value:r==="|"?"&&":r});else{let p={type:"method",method:s.trim()};s.includes("(")&&(p.method=s.substring(0,s.indexOf("(")).trim(),p.argument=s.substring(s.indexOf("(")+1,s.indexOf(")"))),s.method==="immediate"&&(s.method="eager"),i.push(p)}}return i}function u(t){let e=h(t);for(;t.length>0&&(t[0].value==="&&"||t[0].value==="|"||t[0].value==="||");){let i=t.shift().value,n=h(t);e.type==="expression"&&e.operator===i?e.parameters.push(n):e={type:"expression",operator:i,parameters:[e,n]}}return e}function h(t){if(t[0].value==="("){t.shift();let e=u(t);return t[0].value===")"&&t.shift(),e}else return t.shift()}var _="__internal_",l={Alpine:null,_options:{prefix:"ax-",alpinePrefix:"x-",root:"load",inline:"load-src",defaultStrategy:"eager"},_alias:!1,_data:{},_realIndex:0,get _index(){return this._realIndex++},init(t,e={}){return this.Alpine=t,this._options={...this._options,...e},this},start(){return this._processInline(),this._setupComponents(),this._mutations(),this},data(t,e=!1){return this._data[t]={loaded:!1,download:e},this},url(t,e){!t||!e||(this._data[t]||this.data(t),this._data[t].download=()=>import(this._parseUrl(e)))},alias(t){this._alias=t},_processInline(){let t=document.querySelectorAll(`[${this._options.prefix}${this._options.inline}]`);for(let e of t)this._inlineElement(e)},_inlineElement(t){let e=t.getAttribute(`${this._options.alpinePrefix}data`),i=t.getAttribute(`${this._options.prefix}${this._options.inline}`);if(!e||!i)return;let n=this._parseName(e);this.url(n,i)},_setupComponents(){let t=document.querySelectorAll(`[${this._options.prefix}${this._options.root}]`);for(let e of t)this._setupComponent(e)},_setupComponent(t){let e=t.getAttribute(`${this._options.alpinePrefix}data`);t.setAttribute(`${this._options.alpinePrefix}ignore`,"");let i=this._parseName(e),n=t.getAttribute(`${this._options.prefix}${this._options.root}`)||this._options.defaultStrategy;this._componentStrategy({name:i,strategy:n,el:t,id:t.id||this._index})},async _componentStrategy(t){let e=P(t.strategy);await this._generateRequirements(t,e),await this._download(t.name),this._activate(t)},_generateRequirements(t,e){if(e.type==="expression"){if(e.operator==="&&")return Promise.all(e.parameters.map(i=>this._generateRequirements(t,i)));if(e.operator==="||")return Promise.any(e.parameters.map(i=>this._generateRequirements(t,i)))}return o[e.method]?o[e.method]({component:t,argument:e.argument}):!1},async _download(t){if(t.startsWith(_)||(this._handleAlias(t),!this._data[t]||this._data[t].loaded))return;let e=await this._getModule(t);this.Alpine.data(t,e),this._data[t].loaded=!0},async _getModule(t){if(!this._data[t])return;let e=await this._data[t].download(t);return typeof e=="function"?e:e[t]||e.default||Object.values(e)[0]||!1},_activate(t){this.Alpine.destroyTree(t.el),t.el.removeAttribute(`${this._options.alpinePrefix}ignore`),t.el._x_ignore=!1,this.Alpine.initTree(t.el)},_mutations(){new MutationObserver(t=>{for(let e of t)if(e.addedNodes)for(let i of e.addedNodes)i.nodeType===1&&(i.hasAttribute(`${this._options.prefix}${this._options.root}`)&&this._mutationEl(i),i.querySelectorAll(`[${this._options.prefix}${this._options.root}]`).forEach(n=>this._mutationEl(n)))}).observe(document,{attributes:!0,childList:!0,subtree:!0})},_mutationEl(t){t.hasAttribute(`${this._options.prefix}${this._options.inline}`)&&this._inlineElement(t),this._setupComponent(t)},_handleAlias(t){if(!(!this._alias||this._data[t])){if(typeof this._alias=="function"){this.data(t,this._alias);return}this.url(t,this._alias.replaceAll("[name]",t))}},_parseName(t){return(t||"").split(/[({]/g)[0]||`${_}${this._index}`},_parseUrl(t){return new RegExp("^(?:[a-z+]+:)?//","i").test(t)?t:new URL(t,document.baseURI).href}};document.addEventListener("alpine:init",()=>{window.AsyncAlpine=l,l.init(Alpine,window.AsyncAlpineOptions||{}),document.dispatchEvent(new CustomEvent("async-alpine:init")),l.start()})})();})(); diff --git a/tests/Feature/CalendarWidgetTest.php b/tests/Feature/CalendarWidgetTest.php index 647905e..fd3e13a 100644 --- a/tests/Feature/CalendarWidgetTest.php +++ b/tests/Feature/CalendarWidgetTest.php @@ -181,7 +181,7 @@ ->assertDispatched('filament-fullcalendar--refresh'); }); -it('should filter the fullcalendar', function () { +it('should filter the calendar', function () { $user = User::factory()->create(); $task1 = Task::factory()->create(['type' => 'wash']); $task2 = Task::factory()->create(['type' => 'clean']); @@ -200,7 +200,7 @@ 'type' => 'my_soldiers', ]) ->mountAction('Filters') - ->setActionData(['soldier_id' => [$user->userable_id], 'type' => [$task2->id]]) + ->setActionData(['soldier_id' => [$user->userable_id], 'type' => [$task2->type]]) ->callMountedAction(['Filter' => true]) ->call('fetchEvents', ['start' => Carbon::yesterday(), 'end' => Carbon::now()->addDays(5), 'timezone' => 'Asia\/Jerusalem']); expect($calendar->effects['returns'][0])->toHaveCount(5); diff --git a/tests/Unit/HelpersServiceTest.php b/tests/Unit/HelpersServiceTest.php index 34f42d0..b5fac90 100644 --- a/tests/Unit/HelpersServiceTest.php +++ b/tests/Unit/HelpersServiceTest.php @@ -17,12 +17,12 @@ $shift = Shift::factory()->create(['is_weekend' => false, 'task_id' => Task::factory()->create(['kind' => TaskKind::NIGHT->value])]); $shiftService = new ShiftService( $shift->id, - $shift->task->type, + $shift->task()->withTrashed()->first()->type, $shift->start_date, $shift->end_date, $shift->parallel_weight, - $shift->task->kind, - $shift->task->concurrent_tasks + $shift->task()->withTrashed()->first()->kind, + $shift->task()->withTrashed()->first()->concurrent_tasks ); expect(Helpers::buildShift($shift))->toBeInstanceOf(App\Services\Shift::class); expect(Helpers::buildShift($shift))->toEqual($shiftService); From 68e893fa38d4842b924dd4732cb1159742140935 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Mon, 12 May 2025 13:11:33 +0300 Subject: [PATCH 116/259] holshift_version_1 --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Models/Shift.php | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 7125bf9..e7101b4 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshift_version_1 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshift_version_2 flavor: | latest=false tags: | diff --git a/app/Models/Shift.php b/app/Models/Shift.php index 3351de0..72d82a8 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -51,7 +51,7 @@ public function task(): BelongsTo private function getTaskParallelWeight() { - return $this->task?->parallel_weight; + return $this->task()->withTrashed()->parallel_weight; } public function getTaskNameAttribute() @@ -59,13 +59,13 @@ public function getTaskNameAttribute() $user_name = User::where('userable_id', $this->soldier_id)->get(['first_name', 'last_name']); return $this->soldier_id == auth()->user()->userable_id - ? $this->task?->name - : $this->task?->name.' '.$user_name->first()?->first_name.' '.$user_name->first()?->last_name; + ? $this->task()->withTrashed()->name + : $this->task()->withTrashed().' '.$user_name->first()?->first_name.' '.$user_name->first()?->last_name; } public function getTaskColorAttribute() { - return $this->task?->color; + return $this->task()->withTrashed()->color; } public static function getSchema(): array From bd110e3dd0ec8758607a17ae0e34925fb94348f7 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Mon, 12 May 2025 13:25:47 +0300 Subject: [PATCH 117/259] holshift_version_1 --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Models/Shift.php | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index e7101b4..679997b 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshift_version_2 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshift_version_3 flavor: | latest=false tags: | diff --git a/app/Models/Shift.php b/app/Models/Shift.php index 72d82a8..45c2e1c 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -60,14 +60,13 @@ public function getTaskNameAttribute() return $this->soldier_id == auth()->user()->userable_id ? $this->task()->withTrashed()->name - : $this->task()->withTrashed().' '.$user_name->first()?->first_name.' '.$user_name->first()?->last_name; + : $this->task()->withTrashed()->name.' '.$user_name->first()?->first_name.' '.$user_name->first()?->last_name; } public function getTaskColorAttribute() { return $this->task()->withTrashed()->color; } - public static function getSchema(): array { return [ From a4f9a62d434aabf4e9073353114f0369e7281444 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Mon, 12 May 2025 13:40:16 +0300 Subject: [PATCH 118/259] holshift_version_1 --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Models/Shift.php | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 679997b..9f59083 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshift_version_3 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshift_version_4 flavor: | latest=false tags: | diff --git a/app/Models/Shift.php b/app/Models/Shift.php index 45c2e1c..5d6d08b 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -51,7 +51,7 @@ public function task(): BelongsTo private function getTaskParallelWeight() { - return $this->task()->withTrashed()->parallel_weight; + return $this->task()->withTrashed()->first()->parallel_weight; } public function getTaskNameAttribute() @@ -59,13 +59,13 @@ public function getTaskNameAttribute() $user_name = User::where('userable_id', $this->soldier_id)->get(['first_name', 'last_name']); return $this->soldier_id == auth()->user()->userable_id - ? $this->task()->withTrashed()->name - : $this->task()->withTrashed()->name.' '.$user_name->first()?->first_name.' '.$user_name->first()?->last_name; + ? $this->task()->withTrashed()->first()->name + : $this->task()->withTrashed()->first()->name.' '.$user_name->first()?->first_name.' '.$user_name->first()?->last_name; } public function getTaskColorAttribute() { - return $this->task()->withTrashed()->color; + return $this->task()->withTrashed()->first()->color; } public static function getSchema(): array { From 1fa92c3e2df64f929b1f604a6d437add022350d6 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Tue, 20 May 2025 10:48:37 +0300 Subject: [PATCH 119/259] push --- .github/workflows/php-build-and-deploy.yml | 2 +- php.ini | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 9f59083..11ffe0d 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshift_version_4 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshift_version_5 flavor: | latest=false tags: | diff --git a/php.ini b/php.ini index edf95f2..ba07e0a 100644 --- a/php.ini +++ b/php.ini @@ -19,7 +19,7 @@ ignore_repeated_errors = Off ignore_repeated_source = Off implicit_flush = Off log_errors = On -max_execution_time = 600 +max_execution_time = 300 max_file_uploads = 20 max_input_time = 180 memory_limit = 256M From 4b90894a893b28944f275706f4eec88d922d8634 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Tue, 20 May 2025 13:14:02 +0300 Subject: [PATCH 120/259] push --- .github/workflows/php-build-and-deploy.yml | 2 +- php.ini | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 11ffe0d..dc9e7a2 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshift_version_5 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshift_version_6 flavor: | latest=false tags: | diff --git a/php.ini b/php.ini index ba07e0a..12ef171 100644 --- a/php.ini +++ b/php.ini @@ -19,7 +19,7 @@ ignore_repeated_errors = Off ignore_repeated_source = Off implicit_flush = Off log_errors = On -max_execution_time = 300 +max_execution_time = 2000 max_file_uploads = 20 max_input_time = 180 memory_limit = 256M From 95442c4587260496f7a0af3ae38c062b03bde5ff Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Tue, 20 May 2025 15:41:29 +0300 Subject: [PATCH 121/259] push --- .github/workflows/php-build-and-deploy.yml | 2 +- Dockerfile | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index dc9e7a2..f132a98 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshift_version_6 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshift_version_7 flavor: | latest=false tags: | diff --git a/Dockerfile b/Dockerfile index 41b7a03..3dd03dc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -26,6 +26,7 @@ RUN apt-get update \ && apt-get install -y nodejs npm \ && npm install -g npm@7 \ && apt-get clean \ + $$ apt-get install php-mbstring \ && rm -rf /var/lib/apt/lists/* RUN useradd \ From 0a381f7b7be37bb7b7fc85a96d638389eb237bba Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Tue, 20 May 2025 17:00:33 +0300 Subject: [PATCH 122/259] push --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index f132a98..cfe4ac9 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshift_version_7 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshift_version_8 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 9907308..f86a01f 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -143,6 +143,7 @@ public function getFormSchema(): array protected function headerActions(): array { + set_time_limit(600); $this->currentMonth ?? $this->currentMonth = Carbon::now()->year.'-'.Carbon::now()->month; if ($this->lastFilterData != $this->filterData) { $this->refreshRecords(); From c0fd2625471d0df8997ef7e6a61f7d7df8f12fb5 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 21 May 2025 09:33:15 +0300 Subject: [PATCH 123/259] push --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index cfe4ac9..89ba3d3 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshift_version_8 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshift_version_9 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index f86a01f..ef2c098 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -143,7 +143,7 @@ public function getFormSchema(): array protected function headerActions(): array { - set_time_limit(600); + set_time_limit(120); $this->currentMonth ?? $this->currentMonth = Carbon::now()->year.'-'.Carbon::now()->month; if ($this->lastFilterData != $this->filterData) { $this->refreshRecords(); From 13e989f81dc008033ffa2778933231ab347a732b Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 21 May 2025 09:46:51 +0300 Subject: [PATCH 124/259] push --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 89ba3d3..c23c108 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshift_version_9 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshift_version_10 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index ef2c098..ae5fb1b 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -143,7 +143,7 @@ public function getFormSchema(): array protected function headerActions(): array { - set_time_limit(120); + set_time_limit(60); $this->currentMonth ?? $this->currentMonth = Carbon::now()->year.'-'.Carbon::now()->month; if ($this->lastFilterData != $this->filterData) { $this->refreshRecords(); From 4235f73ddcf4c4024bd3f34c1674ef7be9a73a09 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 21 May 2025 10:01:23 +0300 Subject: [PATCH 125/259] push --- .github/workflows/php-build-and-deploy.yml | 2 +- Dockerfile | 2 +- app/Filament/Widgets/CalendarWidget.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index c23c108..d65a3db 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshift_version_10 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshift_version_11 flavor: | latest=false tags: | diff --git a/Dockerfile b/Dockerfile index 3dd03dc..b132c4d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -18,6 +18,7 @@ COPY /php.ini "${PHP_INI_DIR}/php.ini" RUN apt-get update \ + && apt-get install php-mbstring \ && apt-get satisfy -y --no-install-recommends \ "curl (>=7.88)" \ "supervisor (>=4.2)" \ @@ -26,7 +27,6 @@ RUN apt-get update \ && apt-get install -y nodejs npm \ && npm install -g npm@7 \ && apt-get clean \ - $$ apt-get install php-mbstring \ && rm -rf /var/lib/apt/lists/* RUN useradd \ diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index ae5fb1b..29c9ccb 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -143,7 +143,7 @@ public function getFormSchema(): array protected function headerActions(): array { - set_time_limit(60); + // set_time_limit(seconds: 20); $this->currentMonth ?? $this->currentMonth = Carbon::now()->year.'-'.Carbon::now()->month; if ($this->lastFilterData != $this->filterData) { $this->refreshRecords(); From f5caea4416101c53d5ae3a9a1510362ea7020d92 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 21 May 2025 10:05:53 +0300 Subject: [PATCH 126/259] push --- .github/workflows/php-build-and-deploy.yml | 2 +- Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index d65a3db..0ee380b 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshift_version_11 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshift_version_12 flavor: | latest=false tags: | diff --git a/Dockerfile b/Dockerfile index b132c4d..3d5f95f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -18,7 +18,7 @@ COPY /php.ini "${PHP_INI_DIR}/php.ini" RUN apt-get update \ - && apt-get install php-mbstring \ + && apt-get install -y php8.2-mbstring \ && apt-get satisfy -y --no-install-recommends \ "curl (>=7.88)" \ "supervisor (>=4.2)" \ From e4ab4f4fe5c66d5f74bb1d9609783e3396b9e915 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 21 May 2025 10:08:20 +0300 Subject: [PATCH 127/259] push --- .github/workflows/php-build-and-deploy.yml | 2 +- Dockerfile | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 0ee380b..0bfcfbb 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshift_version_12 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshift_version_13 flavor: | latest=false tags: | diff --git a/Dockerfile b/Dockerfile index 3d5f95f..f4250ca 100644 --- a/Dockerfile +++ b/Dockerfile @@ -18,6 +18,10 @@ COPY /php.ini "${PHP_INI_DIR}/php.ini" RUN apt-get update \ + && apt-get install -y lsb-release apt-transport-https \ + && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - \ + && echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/php.list \ + && apt-get update \ && apt-get install -y php8.2-mbstring \ && apt-get satisfy -y --no-install-recommends \ "curl (>=7.88)" \ From 9dd13a3a45778b828cdc13fd6e3a1c2361a5dc91 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 21 May 2025 10:10:46 +0300 Subject: [PATCH 128/259] push --- .github/workflows/php-build-and-deploy.yml | 2 +- Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 0bfcfbb..3ff20ea 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshift_version_13 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshift_version_14 flavor: | latest=false tags: | diff --git a/Dockerfile b/Dockerfile index f4250ca..fdae18d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -18,7 +18,7 @@ COPY /php.ini "${PHP_INI_DIR}/php.ini" RUN apt-get update \ - && apt-get install -y lsb-release apt-transport-https \ + && apt-get install -y lsb-release apt-transport-https wget gnupg \ && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - \ && echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/php.list \ && apt-get update \ From 4f782aa01a21bbf589130b3a8b6c4b88898a5a94 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 21 May 2025 10:12:29 +0300 Subject: [PATCH 129/259] push --- .github/workflows/php-build-and-deploy.yml | 2 +- Dockerfile | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 3ff20ea..2c67d1b 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshift_version_14 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshift_version_15 flavor: | latest=false tags: | diff --git a/Dockerfile b/Dockerfile index fdae18d..d80c432 100644 --- a/Dockerfile +++ b/Dockerfile @@ -18,11 +18,11 @@ COPY /php.ini "${PHP_INI_DIR}/php.ini" RUN apt-get update \ - && apt-get install -y lsb-release apt-transport-https wget gnupg \ + && apt-get install -y lsb-release apt-transport-https wget gnupg \ && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - \ && echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/php.list \ && apt-get update \ - && apt-get install -y php8.2-mbstring \ + && apt-get install -y php8.2 php8.2-mbstring \ && apt-get satisfy -y --no-install-recommends \ "curl (>=7.88)" \ "supervisor (>=4.2)" \ From 173d1c4604cc25fe36384e5a7dc309000d69a079 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 21 May 2025 10:14:59 +0300 Subject: [PATCH 130/259] push --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index d80c432..9f0d010 100644 --- a/Dockerfile +++ b/Dockerfile @@ -18,9 +18,9 @@ COPY /php.ini "${PHP_INI_DIR}/php.ini" RUN apt-get update \ - && apt-get install -y lsb-release apt-transport-https wget gnupg \ + && apt-get install -y lsb-release apt-transport-https wget gnupg \ && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - \ - && echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/php.list \ + && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list \ && apt-get update \ && apt-get install -y php8.2 php8.2-mbstring \ && apt-get satisfy -y --no-install-recommends \ From cc2529fb391a93c009217afc3e1db7fe1950b152 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 21 May 2025 10:19:50 +0300 Subject: [PATCH 131/259] push --- Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 9f0d010..bfb41b5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -18,11 +18,12 @@ COPY /php.ini "${PHP_INI_DIR}/php.ini" RUN apt-get update \ + RUN apt-get update \ && apt-get install -y lsb-release apt-transport-https wget gnupg \ && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - \ && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list \ && apt-get update \ - && apt-get install -y php8.2 php8.2-mbstring \ + && apt-get install -y php8.1 php8.1-mbstring \ && apt-get satisfy -y --no-install-recommends \ "curl (>=7.88)" \ "supervisor (>=4.2)" \ From cefc3a1184c673b0ea646bbc54038fb03e5e38cf Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 21 May 2025 10:21:59 +0300 Subject: [PATCH 132/259] push --- Dockerfile | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index bfb41b5..8b70e2a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -18,12 +18,15 @@ COPY /php.ini "${PHP_INI_DIR}/php.ini" RUN apt-get update \ - RUN apt-get update \ && apt-get install -y lsb-release apt-transport-https wget gnupg \ && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - \ && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list \ && apt-get update \ - && apt-get install -y php8.1 php8.1-mbstring \ + add-apt-repository ppa:ondrej/php \ + && apt update \ + && apt upgrade \ + && apt install php8.2-dev \ + && apt-get install -y php8.2 php8.2-mbstring \ && apt-get satisfy -y --no-install-recommends \ "curl (>=7.88)" \ "supervisor (>=4.2)" \ From 2a33433070804d91174a54c418d5aa806f64a6b9 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 21 May 2025 10:24:24 +0300 Subject: [PATCH 133/259] push --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 8b70e2a..64b86f9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -22,7 +22,7 @@ RUN apt-get update \ && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - \ && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list \ && apt-get update \ - add-apt-repository ppa:ondrej/php \ + && add-apt-repository ppa:ondrej/php \ && apt update \ && apt upgrade \ && apt install php8.2-dev \ From ec7327aecea29f9ac5d04769f735273230d66702 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 21 May 2025 10:26:28 +0300 Subject: [PATCH 134/259] push --- Dockerfile | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index 64b86f9..de7121c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -18,15 +18,13 @@ COPY /php.ini "${PHP_INI_DIR}/php.ini" RUN apt-get update \ - && apt-get install -y lsb-release apt-transport-https wget gnupg \ + && apt-get install -y lsb-release apt-transport-https wget gnupg software-properties-common \ && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - \ && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list \ && apt-get update \ && add-apt-repository ppa:ondrej/php \ - && apt update \ - && apt upgrade \ - && apt install php8.2-dev \ - && apt-get install -y php8.2 php8.2-mbstring \ + && apt-get update \ + && apt-get install -y php8.2 php8.2-mbstring php8.2-dev \ && apt-get satisfy -y --no-install-recommends \ "curl (>=7.88)" \ "supervisor (>=4.2)" \ From c3badfa7dc14786d9e00bb7c2fd96b236e22ba81 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 21 May 2025 10:28:21 +0300 Subject: [PATCH 135/259] push --- Dockerfile | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index de7121c..459ac7d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -18,11 +18,10 @@ COPY /php.ini "${PHP_INI_DIR}/php.ini" RUN apt-get update \ - && apt-get install -y lsb-release apt-transport-https wget gnupg software-properties-common \ + && apt-get install -y lsb-release apt-transport-https wget gnupg \ && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - \ && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list \ - && apt-get update \ - && add-apt-repository ppa:ondrej/php \ + && echo "deb http://ppa.launchpad.net/ondrej/php/ubuntu $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/ondrej-php.list \ && apt-get update \ && apt-get install -y php8.2 php8.2-mbstring php8.2-dev \ && apt-get satisfy -y --no-install-recommends \ From 73c1df2ebead44603669e44801ab6be10e3c7b2a Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 21 May 2025 10:29:49 +0300 Subject: [PATCH 136/259] push --- Dockerfile | 1 - 1 file changed, 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 459ac7d..ff324e3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -21,7 +21,6 @@ RUN apt-get update \ && apt-get install -y lsb-release apt-transport-https wget gnupg \ && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - \ && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list \ - && echo "deb http://ppa.launchpad.net/ondrej/php/ubuntu $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/ondrej-php.list \ && apt-get update \ && apt-get install -y php8.2 php8.2-mbstring php8.2-dev \ && apt-get satisfy -y --no-install-recommends \ From 913376bf8f5fa991bd3240814542ef6bc065258c Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 21 May 2025 10:32:15 +0300 Subject: [PATCH 137/259] push --- Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index ff324e3..ad82e69 100644 --- a/Dockerfile +++ b/Dockerfile @@ -17,12 +17,13 @@ COPY .env.example .env COPY /php.ini "${PHP_INI_DIR}/php.ini" +RUN apt-get update \ RUN apt-get update \ && apt-get install -y lsb-release apt-transport-https wget gnupg \ && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - \ && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list \ && apt-get update \ - && apt-get install -y php8.2 php8.2-mbstring php8.2-dev \ + && apt-get install -y php8.1 php8.1-mbstring php8.1-dev \ && apt-get satisfy -y --no-install-recommends \ "curl (>=7.88)" \ "supervisor (>=4.2)" \ From c55b4d4d5fbe93d1b104b97103d2848e198c3d49 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 21 May 2025 10:34:19 +0300 Subject: [PATCH 138/259] push --- Dockerfile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index ad82e69..1a69dd2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -17,13 +17,12 @@ COPY .env.example .env COPY /php.ini "${PHP_INI_DIR}/php.ini" -RUN apt-get update \ RUN apt-get update \ && apt-get install -y lsb-release apt-transport-https wget gnupg \ && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - \ && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list \ && apt-get update \ - && apt-get install -y php8.1 php8.1-mbstring php8.1-dev \ + && apt-get install -y php8.1 php8.1-mbstring php8.1-dev \ && apt-get satisfy -y --no-install-recommends \ "curl (>=7.88)" \ "supervisor (>=4.2)" \ From dcd38da13f7ea0d3da58798da99d02179fc94a00 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 21 May 2025 10:40:01 +0300 Subject: [PATCH 139/259] push --- Dockerfile | 565 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 555 insertions(+), 10 deletions(-) diff --git a/Dockerfile b/Dockerfile index 1a69dd2..0d9c5b0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,3 +1,434 @@ +# ARG php_version=8.3 + +# FROM dunglas/frankenphp:1.1-php${php_version} AS base + +# WORKDIR /laravel +# SHELL ["/bin/bash", "-eou", "pipefail", "-c"] + +# ENV SERVER_NAME=:80 +# ARG user=laravel + +# COPY ./ /laravel +# COPY --from=composer:latest /usr/bin/composer /usr/bin/composer +# COPY --chmod=755 /entrypoint.sh entrypoint.sh +# COPY --chmod=755 /common common +# COPY --chown=${user}:${user} /artisan artisan +# COPY .env.example .env +# COPY /php.ini "${PHP_INI_DIR}/php.ini" + + +# RUN apt-get update \ +# && apt-get install -y lsb-release apt-transport-https wget gnupg \ +# && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - \ +# && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list \ +# && apt-get update \ +# && apt-get install -y php8.1 php8.1-mbstring php8.1-dev \ +# && apt-get satisfy -y --no-install-recommends \ +# "curl (>=7.88)" \ +# "supervisor (>=4.2)" \ +# "unzip (>=6.0)" \ +# "vim-tiny (>=2)" \ +# && apt-get install -y nodejs npm \ +# && npm install -g npm@7 \ +# && apt-get clean \ +# && rm -rf /var/lib/apt/lists/* + +# RUN useradd \ +# --uid 1000 \ +# --shell /bin/bash \ +# "${user}" \ +# && setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/frankenphp \ +# && chown -R "${user}:${user}" \ +# /laravel \ +# /data/caddy \ +# /config/caddy \ +# /var/{log,run} \ +# && chmod -R a+rw \ +# /var/{log,run} + +# RUN install-php-extensions \ +# bcmath \ +# bz2 \ +# curl \ +# exif \ +# gd \ +# intl \ +# pcntl \ +# pdo_pgsql \ +# opcache \ +# redis \ +# sockets \ +# calendar\ +# zip + +# RUN composer install +# RUN npm install + +# USER ${user} + +# RUN chmod -R a+rw storage + +# ENTRYPOINT ["/laravel/entrypoint.sh"] + +השגיאה שאתה נתקל בה נובעת מכך שהפקודה add-apt-repository לא מצליחה לגשת למידע הנדרש כדי להוסיף את ה-PPA. זה יכול לקרות כאשר יש בעיה עם חבילות או שה-PPA לא תואם לגרסה של מערכת ההפעלה שלך. + +לחלופין, תוכל לנסות להוסיף את ה-PPA ישירות על ידי עריכת קובץ המקורות של apt במקום להשתמש ב-add-apt-repository. הנה דוגמה כיצד לעשות זאת: + +RUN apt-get update \ + && apt-get install -y lsb-release apt-transport-https wget gnupg \ + && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - \ + && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list \ + && echo "deb http://ppa.launchpad.net/ondrej/php/ubuntu $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/ondrej-php.list \ + && apt-get update \ + && apt-get install -y php8.2 php8.2-mbstring php8.2-dev \ + && apt-get install -y --no-install-recommends \ + curl \ + supervisor \ + unzip \ + vim-tiny \ + && apt-get install -y nodejs npm \ + && npm install -g npm@7 \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* +בשיטה זו, אנו מוסיפים את ה-PPA ישירות לקובץ המקורות, מה שמאפשר לעקוף את הבעיה עם add-apt-repository. + +נסה להריץ את הקוד המתוקן הזה וראה אם הבעיה נפתרת. + +#16 5.059 E: The repository 'http://ppa.launchpad.net/ondrej/php/ubuntu bookworm Release' does not have a Release file. +#16 ERROR: process "/bin/bash -eou pipefail -c apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo "deb https://packages.sury.org/php/ (lsb_release -cs) main\" | tee /etc/apt/sources.list.d/php.list && echo \"deb http://ppa.launchpad.net/ondrej/php/ubuntu (lsb_release -cs) main" | tee /etc/apt/sources.list.d/ondrej-php.list && apt-get update && apt-get install -y php8.2 php8.2-mbstring php8.2-dev && apt-get satisfy -y --no-install-recommends "curl (>=7.88)" "supervisor (>=4.2)" "unzip (>=6.0)" "vim-tiny (>=2)" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/*" did not complete successfully: exit code: 100 +[base 10/15] RUN apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo "deb https://packages.sury.org/php/ (lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list && echo "deb http://ppa.launchpad.net/ondrej/php/ubuntu (lsb_release -cs) main" | tee /etc/apt/sources.list.d/ondrej-php.list && apt-get update && apt-get install -y php8.2 php8.2-mbstring php8.2-dev && apt-get satisfy -y --no-install-recommends "curl (>=7.88)" "supervisor (>=4.2)" "unzip (>=6.0)" "vim-tiny (>=2)" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/*: +4.214 deb https://packages.sury.org/php/ bookworm main +4.222 deb http://ppa.launchpad.net/ondrej/php/ubuntu bookworm main +4.264 Hit:1 http://deb.debian.org/debian bookworm InRelease +4.264 Hit:2 http://deb.debian.org/debian bookworm-updates InRelease +4.264 Hit:3 http://deb.debian.org/debian-security bookworm-security InRelease +4.269 Get:4 https://packages.sury.org/php bookworm InRelease [7551 B] +4.528 Ign:5 http://ppa.launchpad.net/ondrej/php/ubuntu bookworm InRelease +5.059 W: https://packages.sury.org/php/dists/bookworm/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details. +5.059 E: The repository 'http://ppa.launchpad.net/ondrej/php/ubuntu bookworm Release' does not have a Release file. + +Dockerfile:20 +19 | +20 | >>> RUN apt-get update +21 | >>> && apt-get install -y lsb-release apt-transport-https wget gnupg +22 | >>> && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - +23 | >>> && echo "deb https://packages.sury.org/php/ (lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list \ 24 | >>> && echo "deb http://ppa.launchpad.net/ondrej/php/ubuntu (lsb_release -cs) main" | tee /etc/apt/sources.list.d/ondrej-php.list +25 | >>> && apt-get update +26 | >>> && apt-get install -y php8.2 php8.2-mbstring php8.2-dev +27 | >>> && apt-get satisfy -y --no-install-recommends +28 | >>> "curl (>=7.88)" +29 | >>> "supervisor (>=4.2)" +30 | >>> "unzip (>=6.0)" +31 | >>> "vim-tiny (>=2)" +32 | >>> && apt-get install -y nodejs npm +33 | >>> && npm install -g npm@7 +34 | >>> && apt-get clean +35 | >>> && rm -rf /var/lib/apt/lists/* +36 | +ERROR: failed to solve: process "/bin/bash -eou pipefail -c apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo "deb https://packages.sury.org/php/ (lsb_release -cs) main\" | tee /etc/apt/sources.list.d/php.list && echo \"deb http://ppa.launchpad.net/ondrej/php/ubuntu (lsb_release -cs) main" | tee /etc/apt/sources.list.d/ondrej-php.list && apt-get update && apt-get install -y php8.2 php8.2-mbstring php8.2-dev && apt-get satisfy -y --no-install-recommends "curl (>=7.88)" "supervisor (>=4.2)" "unzip (>=6.0)" "vim-tiny (>=2)" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/" did not complete successfully: exit code: 100 +Error: buildx failed with: ERROR: failed to solve: process "/bin/bash -eou pipefail -c apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo "deb https://packages.sury.org/php/ (lsb_release -cs) main\" | tee /etc/apt/sources.list.d/php.list && echo \"deb http://ppa.launchpad.net/ondrej/php/ubuntu (lsb_release -cs) main" | tee /etc/apt/sources.list.d/ondrej-php.list && apt-get update && apt-get install -y php8.2 php8.2-mbstring php8.2-dev && apt-get satisfy -y --no-install-recommends "curl (>=7.88)" "supervisor (>=4.2)" "unzip (>=6.0)" "vim-tiny (>=2)" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/" did not complete successfully: exit code: 100 + +השגיאה "The repository 'http://ppa.launchpad.net/ondrej/php/ubuntu bookworm Release' does not have a Release file" מצביעה על כך שה-PPA לא תומך בגרסה של מערכת ההפעלה שלך, במקרה זה "bookworm". + +כדי להתקין PHP 8.2 על Debian Bookworm, אתה יכול להשתמש במאגר של deb.sury.org בלבד מבלי לנסות להוסיף את ה-PPA. הנה דוגמה מעודכנת של ה-Dockerfile שלך: + +RUN apt-get update \ + && apt-get install -y lsb-release apt-transport-https wget gnupg \ + && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - \ + && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list \ + && apt-get update \ + && apt-get install -y php8.2 php8.2-mbstring php8.2-dev \ + && apt-get install -y --no-install-recommends \ + curl \ + supervisor \ + unzip \ + vim-tiny \ + && apt-get install -y nodejs npm \ + && npm install -g npm@7 \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* +בשיטה זו, אנו משתמשים רק במאגר של deb.sury.org ולא מנסים להוסיף את ה-PPA של ondrej. + +נסה להריץ את הקוד הזה וראה אם הבעיה נפתרת. + +#16 5.554 E: Package 'php8.2' has no installation candidate +#16 5.554 E: Package 'php8.2-mbstring' has no installation candidate +#16 5.554 E: Package 'php8.2-dev' has no installation candidate +#16 ERROR: process "/bin/bash -eou pipefail -c apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list && apt-get update && apt-get install -y php8.2 php8.2-mbstring php8.2-dev && apt-get satisfy -y --no-install-recommends "curl (>=7.88)" "supervisor (>=4.2)" "unzip (>=6.0)" "vim-tiny (>=2)" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/*" did not complete successfully: exit code: 100 +[base 10/15] RUN apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list && apt-get update && apt-get install -y php8.2 php8.2-mbstring php8.2-dev && apt-get satisfy -y --no-install-recommends "curl (>=7.88)" "supervisor (>=4.2)" "unzip (>=6.0)" "vim-tiny (>=2)" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/*: +5.552 This may mean that the package is missing, has been obsoleted, or +5.552 is only available from another source +5.552 +5.552 Package php8.2-mbstring is not available, but is referred to by another package. +5.552 This may mean that the package is missing, has been obsoleted, or +5.552 is only available from another source +5.552 +5.554 E: Package 'php8.2' has no installation candidate +5.554 E: Package 'php8.2-mbstring' has no installation candidate +5.554 E: Package 'php8.2-dev' has no installation candidate + +Dockerfile:20 +19 | +20 | >>> RUN apt-get update +21 | >>> && apt-get install -y lsb-release apt-transport-https wget gnupg +22 | >>> && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - +23 | >>> && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list +24 | >>> && apt-get update +25 | >>> && apt-get install -y php8.2 php8.2-mbstring php8.2-dev +26 | >>> && apt-get satisfy -y --no-install-recommends +27 | >>> "curl (>=7.88)" +28 | >>> "supervisor (>=4.2)" +29 | >>> "unzip (>=6.0)" +30 | >>> "vim-tiny (>=2)" +31 | >>> && apt-get install -y nodejs npm +32 | >>> && npm install -g npm@7 +33 | >>> && apt-get clean +34 | >>> && rm -rf /var/lib/apt/lists/* +35 | +ERROR: failed to solve: process "/bin/bash -eou pipefail -c apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo "deb https://packages.sury.org/php/ (lsb_release -cs) main\" | tee /etc/apt/sources.list.d/php.list && apt-get update && apt-get install -y php8.2 php8.2-mbstring php8.2-dev && apt-get satisfy -y --no-install-recommends \"curl (>=7.88)\" \"supervisor (>=4.2)\" \"unzip (>=6.0)\" \"vim-tiny (>=2)\" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/*" did not complete successfully: exit code: 100 Error: buildx failed with: ERROR: failed to solve: process "/bin/bash -eou pipefail -c apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo \"deb https://packages.sury.org/php/ (lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list && apt-get update && apt-get install -y php8.2 php8.2-mbstring php8.2-dev && apt-get satisfy -y --no-install-recommends "curl (>=7.88)" "supervisor (>=4.2)" "unzip (>=6.0)" "vim-tiny (>=2)" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/*" did not complete successfully: exit code: 100 + +השגיאה "Package 'php8.2' has no installation candidate" מצביעה על כך שהחבילות PHP 8.2 אינן זמינות במאגר שהגדרת. זה יכול לקרות אם הגרסה של Debian שלך (Bookworm) אינה נתמכת על ידי המאגר של deb.sury.org. + +כדי להתקין PHP 8.2 על Debian Bookworm, תוכל לנסות את השיטות הבאות: + +שימוש במאגר של Debian: ודא שאתה משתמש במאגר המתאים לגרסה שלך. תוכל לבדוק אם יש גרסאות אחרות של PHP זמינות במאגר הרשמי של Debian. + +התקנת PHP מ-PPA אחר: אם אתה זקוק לגרסה ספציפית של PHP, תוכל לשקול להשתמש ב-PPA אחר או במאגר אחר שמתאים ל-Debian Bookworm. + +התקנת PHP מ-Source: אם כל השיטות האחרות נכשלות, תוכל להוריד את הקוד המקורי של PHP 8.2 ולהתקין אותו ידנית. + +להלן דוגמה כיצד להתקין PHP 8.2 מ-PPA אחר (אם קיים): + +RUN apt-get update \ + && apt-get install -y lsb-release apt-transport-https wget gnupg \ + && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - \ + && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list \ + && apt-get update \ + && apt-get install -y php8.1 php8.1-mbstring php8.1-dev \ # שים לב שהגרסה שונה כאן + && apt-get install -y --no-install-recommends \ + curl \ + supervisor \ + unzip \ + vim-tiny \ + && apt-get install -y nodejs npm \ + && npm install -g npm@7 \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* +במקרה זה, אנחנו מתקינים את PHP 8.1 במקום 8.2. תוודא שהגרסה שאתה צריך זמינה במאגר. + +אם אתה מתעקש על PHP 8.2, ייתכן שתצטרך לבדוק את המצב של המאגר או לחפש פתרונות חלופיים. + +#15 [base 9/15] COPY /php.ini /usr/local/etc/php/php.ini +#15 DONE 0.0s +#16 [base 10/15] RUN apt-get update RUN apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo "deb https://packages.sury.org/php/ (lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list && apt-get update && apt-get install -y php8.1 php8.1-mbstring php8.1-dev && apt-get satisfy -y --no-install-recommends "curl (>=7.88)" "supervisor (>=4.2)" "unzip (>=6.0)" "vim-tiny (>=2)" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/* #16 0.110 E: The update command takes no arguments #16 ERROR: process "/bin/bash -eou pipefail -c apt-get update RUN apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo \"deb https://packages.sury.org/php/ (lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list && apt-get update && apt-get install -y php8.1 php8.1-mbstring php8.1-dev && apt-get satisfy -y --no-install-recommends "curl (>=7.88)" "supervisor (>=4.2)" "unzip (>=6.0)" "vim-tiny (>=2)" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/*" did not complete successfully: exit code: 100 +[base 10/15] RUN apt-get update RUN apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list && apt-get update && apt-get install -y php8.1 php8.1-mbstring php8.1-dev && apt-get satisfy -y --no-install-recommends "curl (>=7.88)" "supervisor (>=4.2)" "unzip (>=6.0)" "vim-tiny (>=2)" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/*: +0.110 E: The update command takes no arguments + +Dockerfile:20 +19 | +20 | >>> RUN apt-get update +21 | >>> RUN apt-get update +22 | >>> && apt-get install -y lsb-release apt-transport-https wget gnupg +23 | >>> && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - +24 | >>> && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list +25 | >>> && apt-get update +26 | >>> && apt-get install -y php8.1 php8.1-mbstring php8.1-dev \ +27 | >>> && apt-get satisfy -y --no-install-recommends +28 | >>> "curl (>=7.88)" +29 | >>> "supervisor (>=4.2)" +30 | >>> "unzip (>=6.0)" +31 | >>> "vim-tiny (>=2)" +32 | >>> && apt-get install -y nodejs npm +33 | >>> && npm install -g npm@7 +34 | >>> && apt-get clean +35 | >>> && rm -rf /var/lib/apt/lists/* +36 | +ERROR: failed to solve: process "/bin/bash -eou pipefail -c apt-get update RUN apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo "deb https://packages.sury.org/php/ (lsb_release -cs) main\" | tee /etc/apt/sources.list.d/php.list && apt-get update && apt-get install -y php8.1 php8.1-mbstring php8.1-dev && apt-get satisfy -y --no-install-recommends \"curl (>=7.88)\" \"supervisor (>=4.2)\" \"unzip (>=6.0)\" \"vim-tiny (>=2)\" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/*" did not complete successfully: exit code: 100 Error: buildx failed with: ERROR: failed to solve: process "/bin/bash -eou pipefail -c apt-get update RUN apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo \"deb https://packages.sury.org/php/ (lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list && apt-get update && apt-get install -y php8.1 php8.1-mbstring php8.1-dev && apt-get satisfy -y --no-install-recommends "curl (>=7.88)" "supervisor (>=4.2)" "unzip (>=6.0)" "vim-tiny (>=2)" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/*" did not complete successfully: exit code: 100 + +השגיאה "The update command takes no arguments" נובעת מכך שאתה מנסה להריץ את הפקודה apt-get update פעמיים באותה שורה, מה שגורם לבעיה. + +כדי לתקן את ה-Dockerfile שלך, הסר את השורה השנייה של apt-get update כך שהפקודות יהיו ברצף נכון. הנה הגרסה המתוקנת: + +RUN apt-get update \ + && apt-get install -y lsb-release apt-transport-https wget gnupg \ + && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - \ + && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list \ + && apt-get update \ + && apt-get install -y php8.1 php8.1-mbstring php8.1-dev \ + && apt-get install -y --no-install-recommends \ + curl \ + supervisor \ + unzip \ + vim-tiny \ + && apt-get install -y nodejs npm \ + && npm install -g npm@7 \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* +שנה את השורה של RUN כך שתכיל רק פקודה אחת של apt-get update והמשך עם שאר הפקודות. נסה להריץ את הקוד הזה וראה אם הבעיה נפתרת. + +#16 5.541 E: Package 'php8.1' has no installation candidate +#16 5.541 E: Package 'php8.1-mbstring' has no installation candidate +#16 5.541 E: Package 'php8.1-dev' has no installation candidate +#16 ERROR: process "/bin/bash -eou pipefail -c apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list && apt-get update && apt-get install -y php8.1 php8.1-mbstring php8.1-dev && apt-get satisfy -y --no-install-recommends "curl (>=7.88)" "supervisor (>=4.2)" "unzip (>=6.0)" "vim-tiny (>=2)" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/*" did not complete successfully: exit code: 100 +[base 10/15] RUN apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list && apt-get update && apt-get install -y php8.1 php8.1-mbstring php8.1-dev && apt-get satisfy -y --no-install-recommends "curl (>=7.88)" "supervisor (>=4.2)" "unzip (>=6.0)" "vim-tiny (>=2)" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/*: +5.540 This may mean that the package is missing, has been obsoleted, or +5.540 is only available from another source +5.540 +5.540 Package php8.1 is not available, but is referred to by another package. +5.540 This may mean that the package is missing, has been obsoleted, or +5.540 is only available from another source +5.540 +5.541 E: Package 'php8.1' has no installation candidate +5.541 E: Package 'php8.1-mbstring' has no installation candidate +5.541 E: Package 'php8.1-dev' has no installation candidate + +Dockerfile:20 +19 | +20 | >>> RUN apt-get update +21 | >>> && apt-get install -y lsb-release apt-transport-https wget gnupg +22 | >>> && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - +23 | >>> && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list +24 | >>> && apt-get update +25 | >>> && apt-get install -y php8.1 php8.1-mbstring php8.1-dev +26 | >>> && apt-get satisfy -y --no-install-recommends +27 | >>> "curl (>=7.88)" +28 | >>> "supervisor (>=4.2)" +29 | >>> "unzip (>=6.0)" +30 | >>> "vim-tiny (>=2)" +31 | >>> && apt-get install -y nodejs npm +32 | >>> && npm install -g npm@7 +33 | >>> && apt-get clean +34 | >>> && rm -rf /var/lib/apt/lists/* +35 | +ERROR: failed to solve: process "/bin/bash -eou pipefail -c apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo "deb https://packages.sury.org/php/ (lsb_release -cs) main\" | tee /etc/apt/sources.list.d/php.list && apt-get update && apt-get install -y php8.1 php8.1-mbstring php8.1-dev && apt-get satisfy -y --no-install-recommends \"curl (>=7.88)\" \"supervisor (>=4.2)\" \"unzip (>=6.0)\" \"vim-tiny (>=2)\" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/*" did not complete successfully: exit code: 100 Error: buildx failed with: ERROR: failed to solve: process "/bin/bash -eou pipefail -c apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo \"deb https://packages.sury.org/php/ (lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list && apt-get update && apt-get install -y php8.1 php8.1-mbstring php8.1-dev && apt-get satisfy -y --no-install-recommends "curl (>=7.88)" "supervisor (>=4.2)" "unzip (>=6.0)" "vim-tiny (>=2)" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/*" did not complete successfully: exit code: 100 + +השגיאה "Package 'php8.1' has no installation candidate" מצביעה על כך שהחבילות PHP 8.1 אינן זמינות במאגר שהגדרת. זה יכול להתרחש אם הגרסה של מערכת ההפעלה שלך אינה נתמכת על ידי המאגר של deb.sury.org. + +כדי לפתור את הבעיה, יש מספר צעדים שאפשר לנקוט: + +ודא שהמאגר נכון: ודא שאתה משתמש במאגר המתאים לגרסה שלך של Debian. ייתכן שהגרסה שלך לא תומכת ב-PHP 8.1. + +שימוש במאגר אחר: אם PHP 8.1 לא זמין, תוכל לשקול להתקין גרסה אחרת של PHP (כמו 8.0 או 7.4) או לחפש מאגר חלופי. + +התקנה ידנית: אם אתה זקוק לגרסה ספציפית של PHP, תוכל לשקול להוריד את הקוד המקורי ולהתקין אותו ידנית. + +כדי לבדוק אילו גרסאות של PHP זמינות, תוכל להריץ את הפקודה הבאה: + +apt-cache search php | grep php +אם אתה רוצה להתקין גרסה אחרת של PHP, עדכן את השורות הרלוונטיות ב-Dockerfile שלך. לדוגמה, אם תבחר ב-PHP 8.0: + +RUN apt-get update \ + && apt-get install -y lsb-release apt-transport-https wget gnupg \ + && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - \ + && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list \ + && apt-get update \ + && apt-get install -y php8.0 php8.0-mbstring php8.0-dev \ + && apt-get install -y --no-install-recommends \ + curl \ + supervisor \ + unzip \ + vim-tiny \ + && apt-get install -y nodejs npm \ + && npm install -g npm@7 \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* +ודא שהגרסה שאתה בוחר זמינה במאגר. + +אני מריצה את הדוקפיל הזה ב github action על ubuntu-latest + +אם אתה מריץ את ה-Dockerfile ב-GitHub Actions על ubuntu-latest, יש לוודא שהמאגר של PHP תואם לגרסה של Ubuntu. + +באופן כללי, ubuntu-latest מתעדכן לגרסה העדכנית ביותר של Ubuntu, ולכן ייתכן ש-PHP 8.1 לא יהיה זמין במאגר שהגדרת. + +כדי להתקין PHP 8.1 על Ubuntu, תוכל להשתמש במאגר ondrej/php. הנה דוגמה ל-Dockerfile מעודכן: + +FROM ubuntu:latest + +RUN apt-get update \ + && apt-get install -y lsb-release apt-transport-https wget gnupg \ + && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - \ + && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list \ + && apt-get update \ + && apt-get install -y php8.1 php8.1-mbstring php8.1-dev \ + && apt-get install -y --no-install-recommends \ + curl \ + supervisor \ + unzip \ + vim-tiny \ + && apt-get install -y nodejs npm \ + && npm install -g npm@7 \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* +אם אתה נתקל בבעיות עם החבילות, תוכל לשקול להתקין גרסה אחרת של PHP או להשתמש במאגר אחר. ודא שהמאגר שאתה מוסיף תואם לגרסה של Ubuntu שבה אתה משתמש ב-GitHub Actions. + +אבל זה מביא לי את השגיאה הזו : +#16 5.541 E: Package 'php8.1' has no installation candidate +#16 5.541 E: Package 'php8.1-mbstring' has no installation candidate +#16 5.541 E: Package 'php8.1-dev' has no installation candidate +#16 ERROR: process "/bin/bash -eou pipefail -c apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list && apt-get update && apt-get install -y php8.1 php8.1-mbstring php8.1-dev && apt-get satisfy -y --no-install-recommends "curl (>=7.88)" "supervisor (>=4.2)" "unzip (>=6.0)" "vim-tiny (>=2)" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/*" did not complete successfully: exit code: 100 +[base 10/15] RUN apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list && apt-get update && apt-get install -y php8.1 php8.1-mbstring php8.1-dev && apt-get satisfy -y --no-install-recommends "curl (>=7.88)" "supervisor (>=4.2)" "unzip (>=6.0)" "vim-tiny (>=2)" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/*: +5.540 This may mean that the package is missing, has been obsoleted, or +5.540 is only available from another source +5.540 +5.540 Package php8.1 is not available, but is referred to by another package. +5.540 This may mean that the package is missing, has been obsoleted, or +5.540 is only available from another source +5.540 +5.541 E: Package 'php8.1' has no installation candidate +5.541 E: Package 'php8.1-mbstring' has no installation candidate +5.541 E: Package 'php8.1-dev' has no installation candidate + +Dockerfile:20 +19 | +20 | >>> RUN apt-get update +21 | >>> && apt-get install -y lsb-release apt-transport-https wget gnupg +22 | >>> && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - +23 | >>> && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list +24 | >>> && apt-get update +25 | >>> && apt-get install -y php8.1 php8.1-mbstring php8.1-dev +26 | >>> && apt-get satisfy -y --no-install-recommends +27 | >>> "curl (>=7.88)" +28 | >>> "supervisor (>=4.2)" +29 | >>> "unzip (>=6.0)" +30 | >>> "vim-tiny (>=2)" +31 | >>> && apt-get install -y nodejs npm +32 | >>> && npm install -g npm@7 +33 | >>> && apt-get clean +34 | >>> && rm -rf /var/lib/apt/lists/* +35 | +ERROR: failed to solve: process "/bin/bash -eou pipefail -c apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo "deb https://packages.sury.org/php/ (lsb_release -cs) main\" | tee /etc/apt/sources.list.d/php.list && apt-get update && apt-get install -y php8.1 php8.1-mbstring php8.1-dev && apt-get satisfy -y --no-install-recommends \"curl (>=7.88)\" \"supervisor (>=4.2)\" \"unzip (>=6.0)\" \"vim-tiny (>=2)\" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/*" did not complete successfully: exit code: 100 Error: buildx failed with: ERROR: failed to solve: process "/bin/bash -eou pipefail -c apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo \"deb https://packages.sury.org/php/ (lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list && apt-get update && apt-get install -y php8.1 php8.1-mbstring php8.1-dev && apt-get satisfy -y --no-install-recommends "curl (>=7.88)" "supervisor (>=4.2)" "unzip (>=6.0)" "vim-tiny (>=2)" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/*" did not complete successfully: exit code: 100 + +כדי להתקין PHP 8.1 ב-GitHub Actions על ubuntu-latest, תוכל לנסות את השינויים הבאים ב-Dockerfile שלך: + +השתמש במאגר הנכון: ודא שאתה משתמש במאגר של ondrej/php, שהוא המאגר הנפוץ ביותר עבור PHP ב-Ubuntu. + +התקן את PHP 8.1: ודא שהפקודות שלך מעודכנות. + +הנה דוגמה ל-Dockerfile מעודכן: + +FROM ubuntu:latest + +RUN apt-get update \ + && apt-get install -y lsb-release apt-transport-https wget gnupg \ + && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - \ + && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list \ + && apt-get update \ + && apt-get install -y php8.1 php8.1-mbstring php8.1-dev \ + && apt-get install -y --no-install-recommends \ + curl \ + supervisor \ + unzip \ + vim-tiny \ + && apt-get install -y nodejs npm \ + && npm install -g npm@7 \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* +אם אתה עדיין נתקל בבעיות, ייתכן שהגרסה של Ubuntu הנוכחית לא תומכת ב-PHP 8.1 דרך המאגר הזה. במקרה כזה, תוכל לנסות להחליף את $(lsb_release -cs) בגרסה ספציפית של Ubuntu, כמו focal (Ubuntu 20.04) או jammy (Ubuntu 22.04), לדוגמה: + +echo "deb https://packages.sury.org/php/ focal main" | tee /etc/apt/sources.list.d/php.list +ודא שאתה בודק את התאימות של הגרסאות כדי להבטיח שהן תואמות לגרסה של Ubuntu שבה אתה משתמש. + +זה הדוקר פיל שלי : ARG php_version=8.3 FROM dunglas/frankenphp:1.1-php${php_version} AS base @@ -12,22 +443,136 @@ COPY ./ /laravel COPY --from=composer:latest /usr/bin/composer /usr/bin/composer COPY --chmod=755 /entrypoint.sh entrypoint.sh COPY --chmod=755 /common common -COPY --chown=${user}:${user} /artisan artisan +COPY --chown= +u +s +e +r +: +user:{user} /artisan artisan COPY .env.example .env COPY /php.ini "${PHP_INI_DIR}/php.ini" +RUN apt-get update +&& apt-get install -y lsb-release apt-transport-https wget gnupg +&& wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - +&& echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list +&& apt-get update +&& apt-get install -y php8.1 php8.1-mbstring php8.1-dev +&& apt-get satisfy -y --no-install-recommends +"curl (>=7.88)" +"supervisor (>=4.2)" +"unzip (>=6.0)" +"vim-tiny (>=2)" +&& apt-get install -y nodejs npm +&& npm install -g npm@7 +&& apt-get clean +&& rm -rf /var/lib/apt/lists/* + +RUN useradd +--uid 1000 +--shell /bin/bash +"{user}" \ && setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/frankenphp \ && chown -R "{user}:${user}" +/laravel +/data/caddy +/config/caddy +/var/{log,run} +&& chmod -R a+rw +/var/{log,run} + +RUN install-php-extensions +bcmath +bz2 +curl +exif +gd +intl +pcntl +pdo_pgsql +opcache +redis +sockets +calendar +zip + +RUN composer install +RUN npm install + +USER ${user} + +RUN chmod -R a+rw storage + +ENTRYPOINT ["/laravel/entrypoint.sh"] +ואני מקבל את השגיאה הזו : +#16 5.541 E: Package 'php8.1' has no installation candidate +#16 5.541 E: Package 'php8.1-mbstring' has no installation candidate +#16 5.541 E: Package 'php8.1-dev' has no installation candidate +#16 ERROR: process "/bin/bash -eou pipefail -c apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list && apt-get update && apt-get install -y php8.1 php8.1-mbstring php8.1-dev && apt-get satisfy -y --no-install-recommends "curl (>=7.88)" "supervisor (>=4.2)" "unzip (>=6.0)" "vim-tiny (>=2)" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/*" did not complete successfully: exit code: 100 +[base 10/15] RUN apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list && apt-get update && apt-get install -y php8.1 php8.1-mbstring php8.1-dev && apt-get satisfy -y --no-install-recommends "curl (>=7.88)" "supervisor (>=4.2)" "unzip (>=6.0)" "vim-tiny (>=2)" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/*: +5.540 This may mean that the package is missing, has been obsoleted, or +5.540 is only available from another source +5.540 +5.540 Package php8.1 is not available, but is referred to by another package. +5.540 This may mean that the package is missing, has been obsoleted, or +5.540 is only available from another source +5.540 +5.541 E: Package 'php8.1' has no installation candidate +5.541 E: Package 'php8.1-mbstring' has no installation candidate +5.541 E: Package 'php8.1-dev' has no installation candidate + +Dockerfile:20 +19 | +20 | >>> RUN apt-get update +21 | >>> && apt-get install -y lsb-release apt-transport-https wget gnupg +22 | >>> && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - +23 | >>> && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list +24 | >>> && apt-get update +25 | >>> && apt-get install -y php8.1 php8.1-mbstring php8.1-dev +26 | >>> && apt-get satisfy -y --no-install-recommends +27 | >>> "curl (>=7.88)" +28 | >>> "supervisor (>=4.2)" +29 | >>> "unzip (>=6.0)" +30 | >>> "vim-tiny (>=2)" +31 | >>> && apt-get install -y nodejs npm +32 | >>> && npm install -g npm@7 +33 | >>> && apt-get clean +34 | >>> && rm -rf /var/lib/apt/lists/* +35 | +ERROR: failed to solve: process "/bin/bash -eou pipefail -c apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo "deb https://packages.sury.org/php/ (lsb_release -cs) main\" | tee /etc/apt/sources.list.d/php.list && apt-get update && apt-get install -y php8.1 php8.1-mbstring php8.1-dev && apt-get satisfy -y --no-install-recommends \"curl (>=7.88)\" \"supervisor (>=4.2)\" \"unzip (>=6.0)\" \"vim-tiny (>=2)\" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/*" did not complete successfully: exit code: 100 Error: buildx failed with: ERROR: failed to solve: process "/bin/bash -eou pipefail -c apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo \"deb https://packages.sury.org/php/ (lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list && apt-get update && apt-get install -y php8.1 php8.1-mbstring php8.1-dev && apt-get satisfy -y --no-install-recommends "curl (>=7.88)" "supervisor (>=4.2)" "unzip (>=6.0)" "vim-tiny (>=2)" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/*" did not complete successfully: exit code: 100 + +נראה שהבעיה נובעת מכך שהגרסה של PHP 8.1 אינה זמינה במאגר שאתה מנסה להשתמש בו. מאחר שאתה משתמש ב-Dockerfile שמבוסס על dunglas/frankenphp, ייתכן שהמאגר של ondrej/php לא תואם. + +אם אתה רוצה להשתמש ב-PHP 8.3, תוכל לשנות את הפקודות להתקנה כך שיתאימו לגרסה זו. הנה דוגמה מעודכנת: + +ARG php_version=8.3 + +FROM dunglas/frankenphp:1.1-php${php_version} AS base + +WORKDIR /laravel +SHELL ["/bin/bash", "-eou", "pipefail", "-c"] + +ENV SERVER_NAME=:80 +ARG user=laravel + +COPY ./ /laravel +COPY --from=composer:latest /usr/bin/composer /usr/bin/composer +COPY --chmod=755 /entrypoint.sh entrypoint.sh +COPY --chmod=755 /common common +COPY --chown=${user}:${user} /artisan artisan +COPY .env.example .env +COPY /php.ini "${PHP_INI_DIR}/php.ini" RUN apt-get update \ && apt-get install -y lsb-release apt-transport-https wget gnupg \ && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - \ && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list \ && apt-get update \ - && apt-get install -y php8.1 php8.1-mbstring php8.1-dev \ - && apt-get satisfy -y --no-install-recommends \ - "curl (>=7.88)" \ - "supervisor (>=4.2)" \ - "unzip (>=6.0)" \ - "vim-tiny (>=2)" \ + && apt-get install -y php${php_version} php${php_version}-mbstring php${php_version}-dev \ + && apt-get install -y --no-install-recommends \ + curl \ + supervisor \ + unzip \ + vim-tiny \ && apt-get install -y nodejs npm \ && npm install -g npm@7 \ && apt-get clean \ @@ -58,7 +603,7 @@ RUN install-php-extensions \ opcache \ redis \ sockets \ - calendar\ + calendar \ zip RUN composer install @@ -67,5 +612,5 @@ RUN npm install USER ${user} RUN chmod -R a+rw storage - -ENTRYPOINT ["/laravel/entrypoint.sh"] \ No newline at end of file + +ENTRYPOINT ["/laravel/entrypoint.sh"] From 0e035fef86011488a73990597979e8fafabc30fd Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 21 May 2025 10:40:47 +0300 Subject: [PATCH 140/259] push --- Dockerfile | 474 ----------------------------------------------------- 1 file changed, 474 deletions(-) diff --git a/Dockerfile b/Dockerfile index 0d9c5b0..01b87f2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -70,480 +70,6 @@ # ENTRYPOINT ["/laravel/entrypoint.sh"] -השגיאה שאתה נתקל בה נובעת מכך שהפקודה add-apt-repository לא מצליחה לגשת למידע הנדרש כדי להוסיף את ה-PPA. זה יכול לקרות כאשר יש בעיה עם חבילות או שה-PPA לא תואם לגרסה של מערכת ההפעלה שלך. - -לחלופין, תוכל לנסות להוסיף את ה-PPA ישירות על ידי עריכת קובץ המקורות של apt במקום להשתמש ב-add-apt-repository. הנה דוגמה כיצד לעשות זאת: - -RUN apt-get update \ - && apt-get install -y lsb-release apt-transport-https wget gnupg \ - && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - \ - && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list \ - && echo "deb http://ppa.launchpad.net/ondrej/php/ubuntu $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/ondrej-php.list \ - && apt-get update \ - && apt-get install -y php8.2 php8.2-mbstring php8.2-dev \ - && apt-get install -y --no-install-recommends \ - curl \ - supervisor \ - unzip \ - vim-tiny \ - && apt-get install -y nodejs npm \ - && npm install -g npm@7 \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* -בשיטה זו, אנו מוסיפים את ה-PPA ישירות לקובץ המקורות, מה שמאפשר לעקוף את הבעיה עם add-apt-repository. - -נסה להריץ את הקוד המתוקן הזה וראה אם הבעיה נפתרת. - -#16 5.059 E: The repository 'http://ppa.launchpad.net/ondrej/php/ubuntu bookworm Release' does not have a Release file. -#16 ERROR: process "/bin/bash -eou pipefail -c apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo "deb https://packages.sury.org/php/ (lsb_release -cs) main\" | tee /etc/apt/sources.list.d/php.list && echo \"deb http://ppa.launchpad.net/ondrej/php/ubuntu (lsb_release -cs) main" | tee /etc/apt/sources.list.d/ondrej-php.list && apt-get update && apt-get install -y php8.2 php8.2-mbstring php8.2-dev && apt-get satisfy -y --no-install-recommends "curl (>=7.88)" "supervisor (>=4.2)" "unzip (>=6.0)" "vim-tiny (>=2)" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/*" did not complete successfully: exit code: 100 -[base 10/15] RUN apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo "deb https://packages.sury.org/php/ (lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list && echo "deb http://ppa.launchpad.net/ondrej/php/ubuntu (lsb_release -cs) main" | tee /etc/apt/sources.list.d/ondrej-php.list && apt-get update && apt-get install -y php8.2 php8.2-mbstring php8.2-dev && apt-get satisfy -y --no-install-recommends "curl (>=7.88)" "supervisor (>=4.2)" "unzip (>=6.0)" "vim-tiny (>=2)" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/*: -4.214 deb https://packages.sury.org/php/ bookworm main -4.222 deb http://ppa.launchpad.net/ondrej/php/ubuntu bookworm main -4.264 Hit:1 http://deb.debian.org/debian bookworm InRelease -4.264 Hit:2 http://deb.debian.org/debian bookworm-updates InRelease -4.264 Hit:3 http://deb.debian.org/debian-security bookworm-security InRelease -4.269 Get:4 https://packages.sury.org/php bookworm InRelease [7551 B] -4.528 Ign:5 http://ppa.launchpad.net/ondrej/php/ubuntu bookworm InRelease -5.059 W: https://packages.sury.org/php/dists/bookworm/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details. -5.059 E: The repository 'http://ppa.launchpad.net/ondrej/php/ubuntu bookworm Release' does not have a Release file. - -Dockerfile:20 -19 | -20 | >>> RUN apt-get update -21 | >>> && apt-get install -y lsb-release apt-transport-https wget gnupg -22 | >>> && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - -23 | >>> && echo "deb https://packages.sury.org/php/ (lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list \ 24 | >>> && echo "deb http://ppa.launchpad.net/ondrej/php/ubuntu (lsb_release -cs) main" | tee /etc/apt/sources.list.d/ondrej-php.list -25 | >>> && apt-get update -26 | >>> && apt-get install -y php8.2 php8.2-mbstring php8.2-dev -27 | >>> && apt-get satisfy -y --no-install-recommends -28 | >>> "curl (>=7.88)" -29 | >>> "supervisor (>=4.2)" -30 | >>> "unzip (>=6.0)" -31 | >>> "vim-tiny (>=2)" -32 | >>> && apt-get install -y nodejs npm -33 | >>> && npm install -g npm@7 -34 | >>> && apt-get clean -35 | >>> && rm -rf /var/lib/apt/lists/* -36 | -ERROR: failed to solve: process "/bin/bash -eou pipefail -c apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo "deb https://packages.sury.org/php/ (lsb_release -cs) main\" | tee /etc/apt/sources.list.d/php.list && echo \"deb http://ppa.launchpad.net/ondrej/php/ubuntu (lsb_release -cs) main" | tee /etc/apt/sources.list.d/ondrej-php.list && apt-get update && apt-get install -y php8.2 php8.2-mbstring php8.2-dev && apt-get satisfy -y --no-install-recommends "curl (>=7.88)" "supervisor (>=4.2)" "unzip (>=6.0)" "vim-tiny (>=2)" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/" did not complete successfully: exit code: 100 -Error: buildx failed with: ERROR: failed to solve: process "/bin/bash -eou pipefail -c apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo "deb https://packages.sury.org/php/ (lsb_release -cs) main\" | tee /etc/apt/sources.list.d/php.list && echo \"deb http://ppa.launchpad.net/ondrej/php/ubuntu (lsb_release -cs) main" | tee /etc/apt/sources.list.d/ondrej-php.list && apt-get update && apt-get install -y php8.2 php8.2-mbstring php8.2-dev && apt-get satisfy -y --no-install-recommends "curl (>=7.88)" "supervisor (>=4.2)" "unzip (>=6.0)" "vim-tiny (>=2)" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/" did not complete successfully: exit code: 100 - -השגיאה "The repository 'http://ppa.launchpad.net/ondrej/php/ubuntu bookworm Release' does not have a Release file" מצביעה על כך שה-PPA לא תומך בגרסה של מערכת ההפעלה שלך, במקרה זה "bookworm". - -כדי להתקין PHP 8.2 על Debian Bookworm, אתה יכול להשתמש במאגר של deb.sury.org בלבד מבלי לנסות להוסיף את ה-PPA. הנה דוגמה מעודכנת של ה-Dockerfile שלך: - -RUN apt-get update \ - && apt-get install -y lsb-release apt-transport-https wget gnupg \ - && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - \ - && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list \ - && apt-get update \ - && apt-get install -y php8.2 php8.2-mbstring php8.2-dev \ - && apt-get install -y --no-install-recommends \ - curl \ - supervisor \ - unzip \ - vim-tiny \ - && apt-get install -y nodejs npm \ - && npm install -g npm@7 \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* -בשיטה זו, אנו משתמשים רק במאגר של deb.sury.org ולא מנסים להוסיף את ה-PPA של ondrej. - -נסה להריץ את הקוד הזה וראה אם הבעיה נפתרת. - -#16 5.554 E: Package 'php8.2' has no installation candidate -#16 5.554 E: Package 'php8.2-mbstring' has no installation candidate -#16 5.554 E: Package 'php8.2-dev' has no installation candidate -#16 ERROR: process "/bin/bash -eou pipefail -c apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list && apt-get update && apt-get install -y php8.2 php8.2-mbstring php8.2-dev && apt-get satisfy -y --no-install-recommends "curl (>=7.88)" "supervisor (>=4.2)" "unzip (>=6.0)" "vim-tiny (>=2)" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/*" did not complete successfully: exit code: 100 -[base 10/15] RUN apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list && apt-get update && apt-get install -y php8.2 php8.2-mbstring php8.2-dev && apt-get satisfy -y --no-install-recommends "curl (>=7.88)" "supervisor (>=4.2)" "unzip (>=6.0)" "vim-tiny (>=2)" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/*: -5.552 This may mean that the package is missing, has been obsoleted, or -5.552 is only available from another source -5.552 -5.552 Package php8.2-mbstring is not available, but is referred to by another package. -5.552 This may mean that the package is missing, has been obsoleted, or -5.552 is only available from another source -5.552 -5.554 E: Package 'php8.2' has no installation candidate -5.554 E: Package 'php8.2-mbstring' has no installation candidate -5.554 E: Package 'php8.2-dev' has no installation candidate - -Dockerfile:20 -19 | -20 | >>> RUN apt-get update -21 | >>> && apt-get install -y lsb-release apt-transport-https wget gnupg -22 | >>> && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - -23 | >>> && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list -24 | >>> && apt-get update -25 | >>> && apt-get install -y php8.2 php8.2-mbstring php8.2-dev -26 | >>> && apt-get satisfy -y --no-install-recommends -27 | >>> "curl (>=7.88)" -28 | >>> "supervisor (>=4.2)" -29 | >>> "unzip (>=6.0)" -30 | >>> "vim-tiny (>=2)" -31 | >>> && apt-get install -y nodejs npm -32 | >>> && npm install -g npm@7 -33 | >>> && apt-get clean -34 | >>> && rm -rf /var/lib/apt/lists/* -35 | -ERROR: failed to solve: process "/bin/bash -eou pipefail -c apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo "deb https://packages.sury.org/php/ (lsb_release -cs) main\" | tee /etc/apt/sources.list.d/php.list && apt-get update && apt-get install -y php8.2 php8.2-mbstring php8.2-dev && apt-get satisfy -y --no-install-recommends \"curl (>=7.88)\" \"supervisor (>=4.2)\" \"unzip (>=6.0)\" \"vim-tiny (>=2)\" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/*" did not complete successfully: exit code: 100 Error: buildx failed with: ERROR: failed to solve: process "/bin/bash -eou pipefail -c apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo \"deb https://packages.sury.org/php/ (lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list && apt-get update && apt-get install -y php8.2 php8.2-mbstring php8.2-dev && apt-get satisfy -y --no-install-recommends "curl (>=7.88)" "supervisor (>=4.2)" "unzip (>=6.0)" "vim-tiny (>=2)" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/*" did not complete successfully: exit code: 100 - -השגיאה "Package 'php8.2' has no installation candidate" מצביעה על כך שהחבילות PHP 8.2 אינן זמינות במאגר שהגדרת. זה יכול לקרות אם הגרסה של Debian שלך (Bookworm) אינה נתמכת על ידי המאגר של deb.sury.org. - -כדי להתקין PHP 8.2 על Debian Bookworm, תוכל לנסות את השיטות הבאות: - -שימוש במאגר של Debian: ודא שאתה משתמש במאגר המתאים לגרסה שלך. תוכל לבדוק אם יש גרסאות אחרות של PHP זמינות במאגר הרשמי של Debian. - -התקנת PHP מ-PPA אחר: אם אתה זקוק לגרסה ספציפית של PHP, תוכל לשקול להשתמש ב-PPA אחר או במאגר אחר שמתאים ל-Debian Bookworm. - -התקנת PHP מ-Source: אם כל השיטות האחרות נכשלות, תוכל להוריד את הקוד המקורי של PHP 8.2 ולהתקין אותו ידנית. - -להלן דוגמה כיצד להתקין PHP 8.2 מ-PPA אחר (אם קיים): - -RUN apt-get update \ - && apt-get install -y lsb-release apt-transport-https wget gnupg \ - && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - \ - && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list \ - && apt-get update \ - && apt-get install -y php8.1 php8.1-mbstring php8.1-dev \ # שים לב שהגרסה שונה כאן - && apt-get install -y --no-install-recommends \ - curl \ - supervisor \ - unzip \ - vim-tiny \ - && apt-get install -y nodejs npm \ - && npm install -g npm@7 \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* -במקרה זה, אנחנו מתקינים את PHP 8.1 במקום 8.2. תוודא שהגרסה שאתה צריך זמינה במאגר. - -אם אתה מתעקש על PHP 8.2, ייתכן שתצטרך לבדוק את המצב של המאגר או לחפש פתרונות חלופיים. - -#15 [base 9/15] COPY /php.ini /usr/local/etc/php/php.ini -#15 DONE 0.0s -#16 [base 10/15] RUN apt-get update RUN apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo "deb https://packages.sury.org/php/ (lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list && apt-get update && apt-get install -y php8.1 php8.1-mbstring php8.1-dev && apt-get satisfy -y --no-install-recommends "curl (>=7.88)" "supervisor (>=4.2)" "unzip (>=6.0)" "vim-tiny (>=2)" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/* #16 0.110 E: The update command takes no arguments #16 ERROR: process "/bin/bash -eou pipefail -c apt-get update RUN apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo \"deb https://packages.sury.org/php/ (lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list && apt-get update && apt-get install -y php8.1 php8.1-mbstring php8.1-dev && apt-get satisfy -y --no-install-recommends "curl (>=7.88)" "supervisor (>=4.2)" "unzip (>=6.0)" "vim-tiny (>=2)" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/*" did not complete successfully: exit code: 100 -[base 10/15] RUN apt-get update RUN apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list && apt-get update && apt-get install -y php8.1 php8.1-mbstring php8.1-dev && apt-get satisfy -y --no-install-recommends "curl (>=7.88)" "supervisor (>=4.2)" "unzip (>=6.0)" "vim-tiny (>=2)" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/*: -0.110 E: The update command takes no arguments - -Dockerfile:20 -19 | -20 | >>> RUN apt-get update -21 | >>> RUN apt-get update -22 | >>> && apt-get install -y lsb-release apt-transport-https wget gnupg -23 | >>> && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - -24 | >>> && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list -25 | >>> && apt-get update -26 | >>> && apt-get install -y php8.1 php8.1-mbstring php8.1-dev \ -27 | >>> && apt-get satisfy -y --no-install-recommends -28 | >>> "curl (>=7.88)" -29 | >>> "supervisor (>=4.2)" -30 | >>> "unzip (>=6.0)" -31 | >>> "vim-tiny (>=2)" -32 | >>> && apt-get install -y nodejs npm -33 | >>> && npm install -g npm@7 -34 | >>> && apt-get clean -35 | >>> && rm -rf /var/lib/apt/lists/* -36 | -ERROR: failed to solve: process "/bin/bash -eou pipefail -c apt-get update RUN apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo "deb https://packages.sury.org/php/ (lsb_release -cs) main\" | tee /etc/apt/sources.list.d/php.list && apt-get update && apt-get install -y php8.1 php8.1-mbstring php8.1-dev && apt-get satisfy -y --no-install-recommends \"curl (>=7.88)\" \"supervisor (>=4.2)\" \"unzip (>=6.0)\" \"vim-tiny (>=2)\" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/*" did not complete successfully: exit code: 100 Error: buildx failed with: ERROR: failed to solve: process "/bin/bash -eou pipefail -c apt-get update RUN apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo \"deb https://packages.sury.org/php/ (lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list && apt-get update && apt-get install -y php8.1 php8.1-mbstring php8.1-dev && apt-get satisfy -y --no-install-recommends "curl (>=7.88)" "supervisor (>=4.2)" "unzip (>=6.0)" "vim-tiny (>=2)" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/*" did not complete successfully: exit code: 100 - -השגיאה "The update command takes no arguments" נובעת מכך שאתה מנסה להריץ את הפקודה apt-get update פעמיים באותה שורה, מה שגורם לבעיה. - -כדי לתקן את ה-Dockerfile שלך, הסר את השורה השנייה של apt-get update כך שהפקודות יהיו ברצף נכון. הנה הגרסה המתוקנת: - -RUN apt-get update \ - && apt-get install -y lsb-release apt-transport-https wget gnupg \ - && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - \ - && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list \ - && apt-get update \ - && apt-get install -y php8.1 php8.1-mbstring php8.1-dev \ - && apt-get install -y --no-install-recommends \ - curl \ - supervisor \ - unzip \ - vim-tiny \ - && apt-get install -y nodejs npm \ - && npm install -g npm@7 \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* -שנה את השורה של RUN כך שתכיל רק פקודה אחת של apt-get update והמשך עם שאר הפקודות. נסה להריץ את הקוד הזה וראה אם הבעיה נפתרת. - -#16 5.541 E: Package 'php8.1' has no installation candidate -#16 5.541 E: Package 'php8.1-mbstring' has no installation candidate -#16 5.541 E: Package 'php8.1-dev' has no installation candidate -#16 ERROR: process "/bin/bash -eou pipefail -c apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list && apt-get update && apt-get install -y php8.1 php8.1-mbstring php8.1-dev && apt-get satisfy -y --no-install-recommends "curl (>=7.88)" "supervisor (>=4.2)" "unzip (>=6.0)" "vim-tiny (>=2)" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/*" did not complete successfully: exit code: 100 -[base 10/15] RUN apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list && apt-get update && apt-get install -y php8.1 php8.1-mbstring php8.1-dev && apt-get satisfy -y --no-install-recommends "curl (>=7.88)" "supervisor (>=4.2)" "unzip (>=6.0)" "vim-tiny (>=2)" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/*: -5.540 This may mean that the package is missing, has been obsoleted, or -5.540 is only available from another source -5.540 -5.540 Package php8.1 is not available, but is referred to by another package. -5.540 This may mean that the package is missing, has been obsoleted, or -5.540 is only available from another source -5.540 -5.541 E: Package 'php8.1' has no installation candidate -5.541 E: Package 'php8.1-mbstring' has no installation candidate -5.541 E: Package 'php8.1-dev' has no installation candidate - -Dockerfile:20 -19 | -20 | >>> RUN apt-get update -21 | >>> && apt-get install -y lsb-release apt-transport-https wget gnupg -22 | >>> && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - -23 | >>> && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list -24 | >>> && apt-get update -25 | >>> && apt-get install -y php8.1 php8.1-mbstring php8.1-dev -26 | >>> && apt-get satisfy -y --no-install-recommends -27 | >>> "curl (>=7.88)" -28 | >>> "supervisor (>=4.2)" -29 | >>> "unzip (>=6.0)" -30 | >>> "vim-tiny (>=2)" -31 | >>> && apt-get install -y nodejs npm -32 | >>> && npm install -g npm@7 -33 | >>> && apt-get clean -34 | >>> && rm -rf /var/lib/apt/lists/* -35 | -ERROR: failed to solve: process "/bin/bash -eou pipefail -c apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo "deb https://packages.sury.org/php/ (lsb_release -cs) main\" | tee /etc/apt/sources.list.d/php.list && apt-get update && apt-get install -y php8.1 php8.1-mbstring php8.1-dev && apt-get satisfy -y --no-install-recommends \"curl (>=7.88)\" \"supervisor (>=4.2)\" \"unzip (>=6.0)\" \"vim-tiny (>=2)\" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/*" did not complete successfully: exit code: 100 Error: buildx failed with: ERROR: failed to solve: process "/bin/bash -eou pipefail -c apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo \"deb https://packages.sury.org/php/ (lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list && apt-get update && apt-get install -y php8.1 php8.1-mbstring php8.1-dev && apt-get satisfy -y --no-install-recommends "curl (>=7.88)" "supervisor (>=4.2)" "unzip (>=6.0)" "vim-tiny (>=2)" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/*" did not complete successfully: exit code: 100 - -השגיאה "Package 'php8.1' has no installation candidate" מצביעה על כך שהחבילות PHP 8.1 אינן זמינות במאגר שהגדרת. זה יכול להתרחש אם הגרסה של מערכת ההפעלה שלך אינה נתמכת על ידי המאגר של deb.sury.org. - -כדי לפתור את הבעיה, יש מספר צעדים שאפשר לנקוט: - -ודא שהמאגר נכון: ודא שאתה משתמש במאגר המתאים לגרסה שלך של Debian. ייתכן שהגרסה שלך לא תומכת ב-PHP 8.1. - -שימוש במאגר אחר: אם PHP 8.1 לא זמין, תוכל לשקול להתקין גרסה אחרת של PHP (כמו 8.0 או 7.4) או לחפש מאגר חלופי. - -התקנה ידנית: אם אתה זקוק לגרסה ספציפית של PHP, תוכל לשקול להוריד את הקוד המקורי ולהתקין אותו ידנית. - -כדי לבדוק אילו גרסאות של PHP זמינות, תוכל להריץ את הפקודה הבאה: - -apt-cache search php | grep php -אם אתה רוצה להתקין גרסה אחרת של PHP, עדכן את השורות הרלוונטיות ב-Dockerfile שלך. לדוגמה, אם תבחר ב-PHP 8.0: - -RUN apt-get update \ - && apt-get install -y lsb-release apt-transport-https wget gnupg \ - && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - \ - && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list \ - && apt-get update \ - && apt-get install -y php8.0 php8.0-mbstring php8.0-dev \ - && apt-get install -y --no-install-recommends \ - curl \ - supervisor \ - unzip \ - vim-tiny \ - && apt-get install -y nodejs npm \ - && npm install -g npm@7 \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* -ודא שהגרסה שאתה בוחר זמינה במאגר. - -אני מריצה את הדוקפיל הזה ב github action על ubuntu-latest - -אם אתה מריץ את ה-Dockerfile ב-GitHub Actions על ubuntu-latest, יש לוודא שהמאגר של PHP תואם לגרסה של Ubuntu. - -באופן כללי, ubuntu-latest מתעדכן לגרסה העדכנית ביותר של Ubuntu, ולכן ייתכן ש-PHP 8.1 לא יהיה זמין במאגר שהגדרת. - -כדי להתקין PHP 8.1 על Ubuntu, תוכל להשתמש במאגר ondrej/php. הנה דוגמה ל-Dockerfile מעודכן: - -FROM ubuntu:latest - -RUN apt-get update \ - && apt-get install -y lsb-release apt-transport-https wget gnupg \ - && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - \ - && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list \ - && apt-get update \ - && apt-get install -y php8.1 php8.1-mbstring php8.1-dev \ - && apt-get install -y --no-install-recommends \ - curl \ - supervisor \ - unzip \ - vim-tiny \ - && apt-get install -y nodejs npm \ - && npm install -g npm@7 \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* -אם אתה נתקל בבעיות עם החבילות, תוכל לשקול להתקין גרסה אחרת של PHP או להשתמש במאגר אחר. ודא שהמאגר שאתה מוסיף תואם לגרסה של Ubuntu שבה אתה משתמש ב-GitHub Actions. - -אבל זה מביא לי את השגיאה הזו : -#16 5.541 E: Package 'php8.1' has no installation candidate -#16 5.541 E: Package 'php8.1-mbstring' has no installation candidate -#16 5.541 E: Package 'php8.1-dev' has no installation candidate -#16 ERROR: process "/bin/bash -eou pipefail -c apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list && apt-get update && apt-get install -y php8.1 php8.1-mbstring php8.1-dev && apt-get satisfy -y --no-install-recommends "curl (>=7.88)" "supervisor (>=4.2)" "unzip (>=6.0)" "vim-tiny (>=2)" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/*" did not complete successfully: exit code: 100 -[base 10/15] RUN apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list && apt-get update && apt-get install -y php8.1 php8.1-mbstring php8.1-dev && apt-get satisfy -y --no-install-recommends "curl (>=7.88)" "supervisor (>=4.2)" "unzip (>=6.0)" "vim-tiny (>=2)" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/*: -5.540 This may mean that the package is missing, has been obsoleted, or -5.540 is only available from another source -5.540 -5.540 Package php8.1 is not available, but is referred to by another package. -5.540 This may mean that the package is missing, has been obsoleted, or -5.540 is only available from another source -5.540 -5.541 E: Package 'php8.1' has no installation candidate -5.541 E: Package 'php8.1-mbstring' has no installation candidate -5.541 E: Package 'php8.1-dev' has no installation candidate - -Dockerfile:20 -19 | -20 | >>> RUN apt-get update -21 | >>> && apt-get install -y lsb-release apt-transport-https wget gnupg -22 | >>> && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - -23 | >>> && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list -24 | >>> && apt-get update -25 | >>> && apt-get install -y php8.1 php8.1-mbstring php8.1-dev -26 | >>> && apt-get satisfy -y --no-install-recommends -27 | >>> "curl (>=7.88)" -28 | >>> "supervisor (>=4.2)" -29 | >>> "unzip (>=6.0)" -30 | >>> "vim-tiny (>=2)" -31 | >>> && apt-get install -y nodejs npm -32 | >>> && npm install -g npm@7 -33 | >>> && apt-get clean -34 | >>> && rm -rf /var/lib/apt/lists/* -35 | -ERROR: failed to solve: process "/bin/bash -eou pipefail -c apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo "deb https://packages.sury.org/php/ (lsb_release -cs) main\" | tee /etc/apt/sources.list.d/php.list && apt-get update && apt-get install -y php8.1 php8.1-mbstring php8.1-dev && apt-get satisfy -y --no-install-recommends \"curl (>=7.88)\" \"supervisor (>=4.2)\" \"unzip (>=6.0)\" \"vim-tiny (>=2)\" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/*" did not complete successfully: exit code: 100 Error: buildx failed with: ERROR: failed to solve: process "/bin/bash -eou pipefail -c apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo \"deb https://packages.sury.org/php/ (lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list && apt-get update && apt-get install -y php8.1 php8.1-mbstring php8.1-dev && apt-get satisfy -y --no-install-recommends "curl (>=7.88)" "supervisor (>=4.2)" "unzip (>=6.0)" "vim-tiny (>=2)" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/*" did not complete successfully: exit code: 100 - -כדי להתקין PHP 8.1 ב-GitHub Actions על ubuntu-latest, תוכל לנסות את השינויים הבאים ב-Dockerfile שלך: - -השתמש במאגר הנכון: ודא שאתה משתמש במאגר של ondrej/php, שהוא המאגר הנפוץ ביותר עבור PHP ב-Ubuntu. - -התקן את PHP 8.1: ודא שהפקודות שלך מעודכנות. - -הנה דוגמה ל-Dockerfile מעודכן: - -FROM ubuntu:latest - -RUN apt-get update \ - && apt-get install -y lsb-release apt-transport-https wget gnupg \ - && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - \ - && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list \ - && apt-get update \ - && apt-get install -y php8.1 php8.1-mbstring php8.1-dev \ - && apt-get install -y --no-install-recommends \ - curl \ - supervisor \ - unzip \ - vim-tiny \ - && apt-get install -y nodejs npm \ - && npm install -g npm@7 \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* -אם אתה עדיין נתקל בבעיות, ייתכן שהגרסה של Ubuntu הנוכחית לא תומכת ב-PHP 8.1 דרך המאגר הזה. במקרה כזה, תוכל לנסות להחליף את $(lsb_release -cs) בגרסה ספציפית של Ubuntu, כמו focal (Ubuntu 20.04) או jammy (Ubuntu 22.04), לדוגמה: - -echo "deb https://packages.sury.org/php/ focal main" | tee /etc/apt/sources.list.d/php.list -ודא שאתה בודק את התאימות של הגרסאות כדי להבטיח שהן תואמות לגרסה של Ubuntu שבה אתה משתמש. - -זה הדוקר פיל שלי : -ARG php_version=8.3 - -FROM dunglas/frankenphp:1.1-php${php_version} AS base - -WORKDIR /laravel -SHELL ["/bin/bash", "-eou", "pipefail", "-c"] - -ENV SERVER_NAME=:80 -ARG user=laravel - -COPY ./ /laravel -COPY --from=composer:latest /usr/bin/composer /usr/bin/composer -COPY --chmod=755 /entrypoint.sh entrypoint.sh -COPY --chmod=755 /common common -COPY --chown= -u -s -e -r -: -user:{user} /artisan artisan -COPY .env.example .env -COPY /php.ini "${PHP_INI_DIR}/php.ini" - -RUN apt-get update -&& apt-get install -y lsb-release apt-transport-https wget gnupg -&& wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - -&& echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list -&& apt-get update -&& apt-get install -y php8.1 php8.1-mbstring php8.1-dev -&& apt-get satisfy -y --no-install-recommends -"curl (>=7.88)" -"supervisor (>=4.2)" -"unzip (>=6.0)" -"vim-tiny (>=2)" -&& apt-get install -y nodejs npm -&& npm install -g npm@7 -&& apt-get clean -&& rm -rf /var/lib/apt/lists/* - -RUN useradd ---uid 1000 ---shell /bin/bash -"{user}" \ && setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/frankenphp \ && chown -R "{user}:${user}" -/laravel -/data/caddy -/config/caddy -/var/{log,run} -&& chmod -R a+rw -/var/{log,run} - -RUN install-php-extensions -bcmath -bz2 -curl -exif -gd -intl -pcntl -pdo_pgsql -opcache -redis -sockets -calendar -zip - -RUN composer install -RUN npm install - -USER ${user} - -RUN chmod -R a+rw storage - -ENTRYPOINT ["/laravel/entrypoint.sh"] -ואני מקבל את השגיאה הזו : -#16 5.541 E: Package 'php8.1' has no installation candidate -#16 5.541 E: Package 'php8.1-mbstring' has no installation candidate -#16 5.541 E: Package 'php8.1-dev' has no installation candidate -#16 ERROR: process "/bin/bash -eou pipefail -c apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list && apt-get update && apt-get install -y php8.1 php8.1-mbstring php8.1-dev && apt-get satisfy -y --no-install-recommends "curl (>=7.88)" "supervisor (>=4.2)" "unzip (>=6.0)" "vim-tiny (>=2)" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/*" did not complete successfully: exit code: 100 -[base 10/15] RUN apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list && apt-get update && apt-get install -y php8.1 php8.1-mbstring php8.1-dev && apt-get satisfy -y --no-install-recommends "curl (>=7.88)" "supervisor (>=4.2)" "unzip (>=6.0)" "vim-tiny (>=2)" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/*: -5.540 This may mean that the package is missing, has been obsoleted, or -5.540 is only available from another source -5.540 -5.540 Package php8.1 is not available, but is referred to by another package. -5.540 This may mean that the package is missing, has been obsoleted, or -5.540 is only available from another source -5.540 -5.541 E: Package 'php8.1' has no installation candidate -5.541 E: Package 'php8.1-mbstring' has no installation candidate -5.541 E: Package 'php8.1-dev' has no installation candidate - -Dockerfile:20 -19 | -20 | >>> RUN apt-get update -21 | >>> && apt-get install -y lsb-release apt-transport-https wget gnupg -22 | >>> && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - -23 | >>> && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list -24 | >>> && apt-get update -25 | >>> && apt-get install -y php8.1 php8.1-mbstring php8.1-dev -26 | >>> && apt-get satisfy -y --no-install-recommends -27 | >>> "curl (>=7.88)" -28 | >>> "supervisor (>=4.2)" -29 | >>> "unzip (>=6.0)" -30 | >>> "vim-tiny (>=2)" -31 | >>> && apt-get install -y nodejs npm -32 | >>> && npm install -g npm@7 -33 | >>> && apt-get clean -34 | >>> && rm -rf /var/lib/apt/lists/* -35 | -ERROR: failed to solve: process "/bin/bash -eou pipefail -c apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo "deb https://packages.sury.org/php/ (lsb_release -cs) main\" | tee /etc/apt/sources.list.d/php.list && apt-get update && apt-get install -y php8.1 php8.1-mbstring php8.1-dev && apt-get satisfy -y --no-install-recommends \"curl (>=7.88)\" \"supervisor (>=4.2)\" \"unzip (>=6.0)\" \"vim-tiny (>=2)\" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/*" did not complete successfully: exit code: 100 Error: buildx failed with: ERROR: failed to solve: process "/bin/bash -eou pipefail -c apt-get update && apt-get install -y lsb-release apt-transport-https wget gnupg && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - && echo \"deb https://packages.sury.org/php/ (lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list && apt-get update && apt-get install -y php8.1 php8.1-mbstring php8.1-dev && apt-get satisfy -y --no-install-recommends "curl (>=7.88)" "supervisor (>=4.2)" "unzip (>=6.0)" "vim-tiny (>=2)" && apt-get install -y nodejs npm && npm install -g npm@7 && apt-get clean && rm -rf /var/lib/apt/lists/*" did not complete successfully: exit code: 100 - -נראה שהבעיה נובעת מכך שהגרסה של PHP 8.1 אינה זמינה במאגר שאתה מנסה להשתמש בו. מאחר שאתה משתמש ב-Dockerfile שמבוסס על dunglas/frankenphp, ייתכן שהמאגר של ondrej/php לא תואם. - -אם אתה רוצה להשתמש ב-PHP 8.3, תוכל לשנות את הפקודות להתקנה כך שיתאימו לגרסה זו. הנה דוגמה מעודכנת: - ARG php_version=8.3 FROM dunglas/frankenphp:1.1-php${php_version} AS base From 7a52e7205055ff317a920e7f4fc084812110d9c0 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 21 May 2025 14:02:21 +0300 Subject: [PATCH 141/259] push --- Dockerfile | 95 ++++++------------------------------------------------ php.ini | 2 +- 2 files changed, 11 insertions(+), 86 deletions(-) diff --git a/Dockerfile b/Dockerfile index 01b87f2..5eab0c5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,75 +1,3 @@ -# ARG php_version=8.3 - -# FROM dunglas/frankenphp:1.1-php${php_version} AS base - -# WORKDIR /laravel -# SHELL ["/bin/bash", "-eou", "pipefail", "-c"] - -# ENV SERVER_NAME=:80 -# ARG user=laravel - -# COPY ./ /laravel -# COPY --from=composer:latest /usr/bin/composer /usr/bin/composer -# COPY --chmod=755 /entrypoint.sh entrypoint.sh -# COPY --chmod=755 /common common -# COPY --chown=${user}:${user} /artisan artisan -# COPY .env.example .env -# COPY /php.ini "${PHP_INI_DIR}/php.ini" - - -# RUN apt-get update \ -# && apt-get install -y lsb-release apt-transport-https wget gnupg \ -# && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - \ -# && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list \ -# && apt-get update \ -# && apt-get install -y php8.1 php8.1-mbstring php8.1-dev \ -# && apt-get satisfy -y --no-install-recommends \ -# "curl (>=7.88)" \ -# "supervisor (>=4.2)" \ -# "unzip (>=6.0)" \ -# "vim-tiny (>=2)" \ -# && apt-get install -y nodejs npm \ -# && npm install -g npm@7 \ -# && apt-get clean \ -# && rm -rf /var/lib/apt/lists/* - -# RUN useradd \ -# --uid 1000 \ -# --shell /bin/bash \ -# "${user}" \ -# && setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/frankenphp \ -# && chown -R "${user}:${user}" \ -# /laravel \ -# /data/caddy \ -# /config/caddy \ -# /var/{log,run} \ -# && chmod -R a+rw \ -# /var/{log,run} - -# RUN install-php-extensions \ -# bcmath \ -# bz2 \ -# curl \ -# exif \ -# gd \ -# intl \ -# pcntl \ -# pdo_pgsql \ -# opcache \ -# redis \ -# sockets \ -# calendar\ -# zip - -# RUN composer install -# RUN npm install - -# USER ${user} - -# RUN chmod -R a+rw storage - -# ENTRYPOINT ["/laravel/entrypoint.sh"] - ARG php_version=8.3 FROM dunglas/frankenphp:1.1-php${php_version} AS base @@ -88,17 +16,13 @@ COPY --chown=${user}:${user} /artisan artisan COPY .env.example .env COPY /php.ini "${PHP_INI_DIR}/php.ini" + RUN apt-get update \ - && apt-get install -y lsb-release apt-transport-https wget gnupg \ - && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - \ - && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list \ - && apt-get update \ - && apt-get install -y php${php_version} php${php_version}-mbstring php${php_version}-dev \ - && apt-get install -y --no-install-recommends \ - curl \ - supervisor \ - unzip \ - vim-tiny \ + && apt-get satisfy -y --no-install-recommends \ + "curl (>=7.88)" \ + "supervisor (>=4.2)" \ + "unzip (>=6.0)" \ + "vim-tiny (>=2)" \ && apt-get install -y nodejs npm \ && npm install -g npm@7 \ && apt-get clean \ @@ -126,10 +50,11 @@ RUN install-php-extensions \ intl \ pcntl \ pdo_pgsql \ + mbstring \ opcache \ redis \ sockets \ - calendar \ + calendar\ zip RUN composer install @@ -138,5 +63,5 @@ RUN npm install USER ${user} RUN chmod -R a+rw storage - -ENTRYPOINT ["/laravel/entrypoint.sh"] + +ENTRYPOINT ["/laravel/entrypoint.sh"] \ No newline at end of file diff --git a/php.ini b/php.ini index 12ef171..fd4cc9e 100644 --- a/php.ini +++ b/php.ini @@ -19,7 +19,7 @@ ignore_repeated_errors = Off ignore_repeated_source = Off implicit_flush = Off log_errors = On -max_execution_time = 2000 +max_execution_time = 0 max_file_uploads = 20 max_input_time = 180 memory_limit = 256M From 425c4aa8995fe8b60bffb29cd4d7d24043c59508 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 21 May 2025 14:24:34 +0300 Subject: [PATCH 142/259] push --- Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Dockerfile b/Dockerfile index 5eab0c5..5ec8223 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,6 +15,8 @@ COPY --chmod=755 /common common COPY --chown=${user}:${user} /artisan artisan COPY .env.example .env COPY /php.ini "${PHP_INI_DIR}/php.ini" +RUN php --ini \ + && php -r "echo 'max_execution_time: ' . ini_get('max_execution_time') . PHP_EOL;" RUN apt-get update \ From c4d0a3c0dee1cbf239456f278c02d8a7c7007686 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 21 May 2025 14:39:05 +0300 Subject: [PATCH 143/259] push --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 2c67d1b..e09a1ec 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshift_version_15 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshift_version_16 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 29c9ccb..4e84d93 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -143,7 +143,7 @@ public function getFormSchema(): array protected function headerActions(): array { - // set_time_limit(seconds: 20); + set_time_limit(seconds: 0); $this->currentMonth ?? $this->currentMonth = Carbon::now()->year.'-'.Carbon::now()->month; if ($this->lastFilterData != $this->filterData) { $this->refreshRecords(); From ad09721702c06e9a6abf7e04ffb143a41021afb6 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 29 May 2025 13:17:35 +0300 Subject: [PATCH 144/259] push --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Resources/SoldierResource.php | 30 ++++++++++++---------- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index e09a1ec..9d03dde 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshift_version_16 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshift_version_17 flavor: | latest=false tags: | diff --git a/app/Resources/SoldierResource.php b/app/Resources/SoldierResource.php index 52584fc..a033dd4 100644 --- a/app/Resources/SoldierResource.php +++ b/app/Resources/SoldierResource.php @@ -81,24 +81,26 @@ public static function table(Table $table): Table ->badge() ->color(fn ($state) => $state ? 'info' : 'primary') ->sortable(), - TextColumn::make('role') + TextColumn::make('role') ->label(__('Role')) ->default( function ($record) { - $roles = Soldier::find($record->id)->user->getRoleNames(); - $roles->count() > 1 ? $roles->shift(1) : null; - $roles->all(); + if (Soldier::find($record->id)->user) { + $roles = Soldier::find($record->id)?->user?->getRoleNames(); + $roles->count() > 1 ? $roles->shift(1) : null; + $roles->all(); - return array_map(function ($role) { - return match ($role) { - 'manager' => __('Manager'), - 'shifts-assignment' => __('A shifts assignment'), - 'department-commander' => __('Department commander'), - 'team-commander' => __('Team commander'), - 'soldier' => __('Soldier'), - default => __('No roles'), - }; - }, $roles->toArray()); + return array_map(function ($role) { + return match ($role) { + 'manager' => __('Manager'), + 'shifts-assignment' => __('A shifts assignment'), + 'department-commander' => __('Department commander'), + 'team-commander' => __('Team commander'), + 'soldier' => __('Soldier'), + default => __('No roles'), + }; + }, $roles->toArray()); + } } ), TextColumn::make('teamSoldier') From 9f502994bf276670136b4cda3cbe5bddbb791790 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 4 Jun 2025 15:32:10 +0300 Subject: [PATCH 145/259] push --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 65 ++++++++++------------ 2 files changed, 31 insertions(+), 36 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 9d03dde..87d58bb 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/holshift_version_17 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_1 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 4e84d93..9c2080e 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -53,23 +53,19 @@ public function fetchEvents(array $fetchInfo): array { $this->currentMonth = Carbon::parse($fetchInfo['start'])->addDays(7)->year.'-'.Carbon::parse($fetchInfo['start'])->addDays(7)->month; - $events = $this->getEventsByRole(); + $events = $this->getEventsByRole($fetchInfo); - $events->where('start_date', '>=', $fetchInfo['start']) - ->where('end_date', '<=', $fetchInfo['end']); $eventDays = self::events($events) - ->map(function (Model $event) { - return [ - 'id' => $event[$this->keys[0]], - 'title' => $event[$this->keys[1]], - 'start' => $event[$this->keys[2]], - 'end' => $event[$this->keys[3]], - 'backgroundColor' => $event[$this->keys[4]], - 'borderColor' => $event[$this->keys[4]], - 'textColor' => 'black', - 'display' => 'block', - ]; - }) + ->map(fn (Model $event) => [ + 'id' => $event[$this->keys[0]], + 'title' => $event[$this->keys[1]], + 'start' => $event[$this->keys[2]], + 'end' => $event[$this->keys[3]], + 'backgroundColor' => $event[$this->keys[4]], + 'borderColor' => $event[$this->keys[4]], + 'textColor' => 'black', + 'display' => 'block', + ]) ->toArray(); $specialDays = []; @@ -95,7 +91,6 @@ public function fetchEvents(array $fetchInfo): array return array_merge($eventDays, $specialDays); } - private function getHolidays($month, $day, $year): array { $holiday = new Holidays($month, $day, $year); @@ -103,32 +98,32 @@ private function getHolidays($month, $day, $year): array return [$holiday->isHoliday, $holiday->holidayName]; } - public function getEventsByRole() + public function getEventsByRole(array $fetchInfo) { $current_user_id = auth()->user()->userable_id; $role = current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])); - - return ($this->type === 'my_soldiers') ? match ($role) { - 'manager', 'shifts-assignment' => $this->model::where('soldier_id', '!=', $current_user_id) - ->orWhereNull('soldier_id') - ->get(), - 'department-commander' => $this->model::where('soldier_id', '!=', $current_user_id) + + $query = $this->model::query(); + + $query = match ($role) { + 'manager', 'shifts-assignment' => $query->where('soldier_id', '!=', $current_user_id) + ->orWhereNull('soldier_id'), + 'department-commander' => $query->where('soldier_id', '!=', $current_user_id) ->orWhereNull('soldier_id') - ->get() - ->filter(function (Model $object) use ($current_user_id) { - $soldier = Soldier::where('id', '=', $object->soldier_id)->first(); - - return ! $soldier || $soldier?->team?->department?->commander_id == $current_user_id; + ->whereHas('soldier.team.department', function ($subQuery) use ($current_user_id) { + $subQuery->where('commander_id', $current_user_id); }), - 'team-commander' => $this->model::where('soldier_id', '!=', $current_user_id) + 'team-commander' => $query->where('soldier_id', '!=', $current_user_id) ->orWhereNull('soldier_id') - ->get() - ->filter(function (Model $object) use ($current_user_id) { - $soldier = Soldier::where('id', '=', $object->soldier_id)->first(); - - return ! $soldier || $soldier?->team?->commander_id == $current_user_id; + ->whereHas('soldier.team', function ($subQuery) use ($current_user_id) { + $subQuery->where('commander_id', $current_user_id); }), - } : $this->model::where('soldier_id', '=', $current_user_id)->get(); + default => $query->where('soldier_id', '=', $current_user_id), + }; + + return $query->where('start_date', '>=', $fetchInfo['start']) + ->where('end_date', '<=', $fetchInfo['end']) + ->get(); } protected function events($events): Collection From 8c158029fbf5fa610c9b25943a3f848fcb5f90d0 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 4 Jun 2025 15:42:45 +0300 Subject: [PATCH 146/259] push --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 87d58bb..513c9f7 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_1 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_2 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 9c2080e..ee3d0a3 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -138,7 +138,7 @@ public function getFormSchema(): array protected function headerActions(): array { - set_time_limit(seconds: 0); + // set_time_limit(seconds: 0); $this->currentMonth ?? $this->currentMonth = Carbon::now()->year.'-'.Carbon::now()->month; if ($this->lastFilterData != $this->filterData) { $this->refreshRecords(); From 2ac23bc435f15e71829f874c10807edc8bd466fa Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 5 Jun 2025 12:12:23 +0300 Subject: [PATCH 147/259] push --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 23 +++++++++++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 513c9f7..6d07251 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_2 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_3 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index ee3d0a3..52b2a63 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -6,6 +6,7 @@ use App\Exports\ShiftsExport; use App\Models\Constraint; use App\Models\Shift; +use App\Models\User; use App\Models\Soldier; use App\Models\Task; use App\Services\Algorithm; @@ -91,6 +92,25 @@ public function fetchEvents(array $fetchInfo): array return array_merge($eventDays, $specialDays); } + public function delete_users() + { + $soldiers = Soldier::all(); + + collect($soldiers)->each(function ($soldier) { + if (User::where('userable_id', $soldier->id)->get()->isEmpty()) { + \DB::table('soldiers')->delete($soldier->id); + \DB::table('shifts')->where('soldier_id', $soldier->id)->delete(); + \DB::table('constraints')->where('soldier_id', $soldier->id)->delete(); + } + }); + + $users = User::all(); + $users->each(function (User $user) { + if (! Soldier::find($user->userable_id)) { + \DB::table('users')->delete($user->id); + } + }); + } private function getHolidays($month, $day, $year): array { $holiday = new Holidays($month, $day, $year); @@ -138,7 +158,8 @@ public function getFormSchema(): array protected function headerActions(): array { - // set_time_limit(seconds: 0); + $this->delete_users(); + set_time_limit(seconds: 0); $this->currentMonth ?? $this->currentMonth = Carbon::now()->year.'-'.Carbon::now()->month; if ($this->lastFilterData != $this->filterData) { $this->refreshRecords(); From f4fea440116d795ea94725fefa2ff8deeef797d5 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 5 Jun 2025 12:39:42 +0300 Subject: [PATCH 148/259] push --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 6d07251..4e90674 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_3 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_4 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 52b2a63..efe7f8a 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -98,9 +98,9 @@ public function delete_users() collect($soldiers)->each(function ($soldier) { if (User::where('userable_id', $soldier->id)->get()->isEmpty()) { - \DB::table('soldiers')->delete($soldier->id); \DB::table('shifts')->where('soldier_id', $soldier->id)->delete(); \DB::table('constraints')->where('soldier_id', $soldier->id)->delete(); + \DB::table('soldiers')->delete($soldier->id); } }); From fa0a3e4211f839dce89bde928df159187e422db5 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 8 Jun 2025 09:24:53 +0300 Subject: [PATCH 149/259] push --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 136 +++++++++------------ 2 files changed, 62 insertions(+), 76 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 4e90674..dbc4ac2 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_4 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_5 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index efe7f8a..e2b78dd 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -5,10 +5,10 @@ use App\Enums\ConstraintType; use App\Exports\ShiftsExport; use App\Models\Constraint; +use App\Models\Department; use App\Models\Shift; -use App\Models\User; -use App\Models\Soldier; use App\Models\Task; +use App\Models\Team; use App\Services\Algorithm; use App\Services\Holidays; use App\Services\Range; @@ -44,17 +44,18 @@ class CalendarWidget extends FullCalendarWidget public $lastFilterData = []; - public $activeFilters = []; - public $currentMonth; public $startDate; + public $fetchInfo; + public function fetchEvents(array $fetchInfo): array { + $this->fetchInfo = $fetchInfo; $this->currentMonth = Carbon::parse($fetchInfo['start'])->addDays(7)->year.'-'.Carbon::parse($fetchInfo['start'])->addDays(7)->month; - $events = $this->getEventsByRole($fetchInfo); + $events = $this->getEventsByRole(); $eventDays = self::events($events) ->map(fn (Model $event) => [ @@ -92,25 +93,7 @@ public function fetchEvents(array $fetchInfo): array return array_merge($eventDays, $specialDays); } - public function delete_users() - { - $soldiers = Soldier::all(); - - collect($soldiers)->each(function ($soldier) { - if (User::where('userable_id', $soldier->id)->get()->isEmpty()) { - \DB::table('shifts')->where('soldier_id', $soldier->id)->delete(); - \DB::table('constraints')->where('soldier_id', $soldier->id)->delete(); - \DB::table('soldiers')->delete($soldier->id); - } - }); - $users = User::all(); - $users->each(function (User $user) { - if (! Soldier::find($user->userable_id)) { - \DB::table('users')->delete($user->id); - } - }); - } private function getHolidays($month, $day, $year): array { $holiday = new Holidays($month, $day, $year); @@ -118,31 +101,40 @@ private function getHolidays($month, $day, $year): array return [$holiday->isHoliday, $holiday->holidayName]; } - public function getEventsByRole(array $fetchInfo) + public function getEventsByRole() { $current_user_id = auth()->user()->userable_id; $role = current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])); - + $query = $this->model::query(); - $query = match ($role) { 'manager', 'shifts-assignment' => $query->where('soldier_id', '!=', $current_user_id) ->orWhereNull('soldier_id'), - 'department-commander' => $query->where('soldier_id', '!=', $current_user_id) - ->orWhereNull('soldier_id') - ->whereHas('soldier.team.department', function ($subQuery) use ($current_user_id) { - $subQuery->where('commander_id', $current_user_id); - }), - 'team-commander' => $query->where('soldier_id', '!=', $current_user_id) - ->orWhereNull('soldier_id') - ->whereHas('soldier.team', function ($subQuery) use ($current_user_id) { - $subQuery->where('commander_id', $current_user_id); + 'department-commander' => $query->where(function ($query) use ($current_user_id) { + $query->where('soldier_id', '!=', $current_user_id); + }) + ->where(function ($query) use ($current_user_id) { + $query->whereNull('soldier_id') + ->orWhereIn('soldier_id', Department::whereHas('commander', function ($query) use ($current_user_id) { + $query->where('id', $current_user_id); + })->first()?->teams->flatMap(fn (Team $team) => $team->members->pluck('id'))->toArray() ?? collect([])) + ->orWhereIn('soldier_id', Department::whereHas('commander', function ($query) use ($current_user_id) { + $query->where('id', $current_user_id); + })->first()?->teams->pluck('commander_id') ?? collect([])); }), + 'team-commander' => $query->where(function ($query) use ($current_user_id) { + $query->where('soldier_id', '!=', $current_user_id); + })->where(function ($query) use ($current_user_id) { + $query->whereNull('soldier_id') + ->orWhereIn('soldier_id', Team::whereHas('commander', function ($query) use ($current_user_id) { + $query->where('id', $current_user_id); + })->first()?->members->pluck('id') ?? collect([])); + }), default => $query->where('soldier_id', '=', $current_user_id), }; - - return $query->where('start_date', '>=', $fetchInfo['start']) - ->where('end_date', '<=', $fetchInfo['end']) + + return $query->where('start_date', '>=', $this->fetchInfo['start']) + ->where('end_date', '<=', $this->fetchInfo['end']) ->get(); } @@ -158,8 +150,6 @@ public function getFormSchema(): array protected function headerActions(): array { - $this->delete_users(); - set_time_limit(seconds: 0); $this->currentMonth ?? $this->currentMonth = Carbon::now()->year.'-'.Carbon::now()->month; if ($this->lastFilterData != $this->filterData) { $this->refreshRecords(); @@ -244,12 +234,12 @@ protected function createConstraintAction() ]); } }) - ->mountUsing(function (Form $form, array $arguments) { - $form->fill([ + ->mountUsing( + fn (Form $form, array $arguments) => $form->fill([ 'start_date' => $arguments['start'] ?? null, 'end_date' => $arguments['end'] ?? null, - ]); - }) + ]) + ) ->label($this->model::getTitle().' '.__('New')) ->modalHeading(__('Create').' '.$this->model::getTitle()) ->disabled(function (array $arguments) use ($today) { @@ -265,12 +255,10 @@ protected function downloadAssignmentsAction() return Action::make('Download') ->label(__('Download to excel')) ->icon('heroicon-o-arrow-down-tray') - ->action(function () { - return Excel::download(new ShiftsExport($this->currentMonth), __('File name', [ - 'name' => auth()->user()->displayName, - 'month' => $this->currentMonth, - ]).'.xlsx'); - }); + ->action(fn () => Excel::download(new ShiftsExport($this->currentMonth), __('File name', [ + 'name' => auth()->user()->displayName, + 'month' => $this->currentMonth, + ]).'.xlsx')); } protected function resetShifts() @@ -315,12 +303,10 @@ protected function activeFilters() { $activeFilters = $this->model::activeFilters($this); - $tags = collect($activeFilters)->map(function ($tag) { - return Action::make($tag) - ->label(__($tag)) - ->disabled() - ->badge(); - }); + $tags = collect($activeFilters)->map(fn ($tag) => Action::make($tag) + ->label(__($tag)) + ->disabled() + ->badge()); return $tags->toArray(); } @@ -348,15 +334,15 @@ protected function getBasicActions() { return [ EditAction::make() - ->fillForm(function (Model $record, array $arguments): array { - return method_exists($this->model, 'fillForm') - ? (new $this->model)->fillForm($record, $arguments) - : [ - ...$record->getAttributes(), - 'start_date' => $arguments['event']['start'] ?? $record->start_date, - 'end_date' => $arguments['event']['end'] ?? $record->end_date, - ]; - }) + ->fillForm( + fn (Model $record, array $arguments) => method_exists($this->model, 'fillForm') + ? (new $this->model)->fillForm($record, $arguments) + : [ + ...$record->getAttributes(), + 'start_date' => $arguments['event']['start'] ?? $record->start_date, + 'end_date' => $arguments['event']['end'] ?? $record->end_date, + ] + ) ->visible(function (Model $record, $arguments) { if ($record->start_date < now()) { return false; @@ -482,15 +468,15 @@ protected function displayButton(): bool protected function viewAction(): Action { return ViewAction::make() - ->fillForm(function (Model $record, array $arguments): array { - return method_exists($this->model, 'fillForm') - ? (new $this->model)->fillForm($record, $arguments) - : [ - ...$record->getAttributes(), - 'start_date' => $arguments['event']['start'] ?? $record->start_date, - 'end_date' => $arguments['event']['end'] ?? $record->end_date, - ]; - }) + ->fillForm( + fn (Model $record, array $arguments) => method_exists($this->model, 'fillForm') + ? (new $this->model)->fillForm($record, $arguments) + : [ + ...$record->getAttributes(), + 'start_date' => $arguments['event']['start'] ?? $record->start_date, + 'end_date' => $arguments['event']['end'] ?? $record->end_date, + ] + ) ->modalFooterActions( function (ViewAction $action, FullCalendarWidget $livewire) { if ( @@ -544,4 +530,4 @@ public function onEventDrop(array $event, array $oldEvent, array $relatedEvents, return false; } -} +} \ No newline at end of file From 0dd712aa1be9629161893e1aaca41ce1b481008c Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 8 Jun 2025 09:40:15 +0300 Subject: [PATCH 150/259] push --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index dbc4ac2..28995bb 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_5 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_6 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index e2b78dd..66875e8 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -150,6 +150,7 @@ public function getFormSchema(): array protected function headerActions(): array { + set_time_limit(seconds: 0); $this->currentMonth ?? $this->currentMonth = Carbon::now()->year.'-'.Carbon::now()->month; if ($this->lastFilterData != $this->filterData) { $this->refreshRecords(); From 1714ff3bc6b5c2b2b86be7b9396fed95526ff04a Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Mon, 9 Jun 2025 11:40:19 +0300 Subject: [PATCH 151/259] push --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Enums/ConstraintType.php | 4 +- app/Enums/Holidays.php | 22 - app/Filament/Auth/Login.php | 2 +- app/Filament/Widgets/CalendarWidget.php | 9 +- app/Filament/Widgets/ChartWidget.php | 4 +- app/Filters/NumberFilter.php | 105 +-- app/Livewire/MyDatabaseNotifications.php | 5 +- app/Models/Constraint.php | 14 +- app/Models/Shift.php | 139 ++- app/Models/Task.php | 13 +- app/Providers/FilamentServiceProvider.php | 19 +- app/Resources/DepartmentResource.php | 14 +- app/Resources/ProfileResource.php | 44 +- app/Resources/SoldierResource.php | 141 ++-- .../SoldierResource/Pages/ListSoldiers.php | 16 +- app/Resources/TaskResource.php | 48 +- .../TaskResource/Pages/CreateTask.php | 7 +- app/Resources/TeamResource.php | 44 +- app/Services/Algorithm.php | 19 +- app/Services/ChangeAssignment.php | 21 +- app/Services/Charts.php | 3 +- app/Services/ConcurrentTasks.php | 29 +- app/Services/Helpers.php | 28 +- app/Services/ManualAssignment.php | 4 +- app/Services/RecurringEvents.php | 20 +- app/Services/Schedule.php | 20 +- app/Services/ShiftAssignmentNotification.php | 19 +- app/Services/Soldier.php | 4 +- database/seeders/DatabaseSeeder.php | 799 ------------------ database/seeders/PermissionSeeder.php | 9 +- lang/he.json | 2 +- tests/Feature/CalendarWidgetTest.php | 3 + tests/Feature/HierarchyTest.php | 19 +- 34 files changed, 385 insertions(+), 1266 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 28995bb..7ab5c9c 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_6 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_7 flavor: | latest=false tags: | diff --git a/app/Enums/ConstraintType.php b/app/Enums/ConstraintType.php index 0f0945c..3a73a6c 100644 --- a/app/Enums/ConstraintType.php +++ b/app/Enums/ConstraintType.php @@ -42,7 +42,7 @@ public static function getPriority(): array self::LOW_PRIORITY_NOT_TASK->value => 2, self::NOT_EVENING->value => 1, self::NOT_THURSDAY_EVENING->value => 1, - self::NOT_SUNDAY_MORNING->value => 4, + self::NOT_SUNDAY_MORNING->value => 1, self::VACATION->value => 1, self::MEDICAL->value => 1, self::SCHOOL->value => 1, @@ -58,7 +58,7 @@ public static function getLimit(): array self::LOW_PRIORITY_NOT_TASK->value => 3, self::NOT_EVENING->value => 4, self::NOT_THURSDAY_EVENING->value => 1, - self::NOT_SUNDAY_MORNING->value => 1, + self::NOT_SUNDAY_MORNING->value => 5, self::VACATION->value => 0, self::MEDICAL->value => 0, self::SCHOOL->value => 4, diff --git a/app/Enums/Holidays.php b/app/Enums/Holidays.php index cfa704a..293496c 100644 --- a/app/Enums/Holidays.php +++ b/app/Enums/Holidays.php @@ -8,19 +8,8 @@ enum Holidays: string case ROSH_ASHANA_2 = 'ב תשרי'; case YOM_KIPUR = 'י תשרי'; case SUKOT = 'טו תשרי'; - case CHOL_HAMOHED_SUKOT_1 = 'טז תשרי'; - case CHOL_HAMOHED_SUKOT_2 = 'יז תשרי'; - case CHOL_HAMOHED_SUKOT_3 = 'יח תשרי'; - case CHOL_HAMOHED_SUKOT_4 = 'יט תשרי'; - case CHOL_HAMOHED_SUKOT_5 = 'כ תשרי'; - case HOSHAANA_RABA = 'כא תשרי'; case SIMCHAT_TORAH = 'כב תשרי'; case PESACH = 'טו ניסן'; - case CHOL_HAMOHED_PESACH_1 = 'טז ניסן'; - case CHOL_HAMOHED_PESACH_2 = 'יז ניסן'; - case CHOL_HAMOHED_PESACH_3 = 'יח ניסן'; - case CHOL_HAMOHED_PESACH_4 = 'יט ניסן'; - case CHOL_HAMOHED_PESACH_5 = 'כ ניסן'; case SHVIHI_SHEL_PESACH = 'כא ניסן'; case SHAVUOT = 'ו סיון'; @@ -31,19 +20,8 @@ public function getLabel(): string self::ROSH_ASHANA_2 => 'ב דר"ה', self::YOM_KIPUR => 'יוה"כ', self::SUKOT => 'סוכות', - self::CHOL_HAMOHED_SUKOT_1 => 'א דחוה"מ סוכות', - self::CHOL_HAMOHED_SUKOT_2 => 'ב דחוה"מ סוכות', - self::CHOL_HAMOHED_SUKOT_3 => 'ג דחוה"מ סוכות', - self::CHOL_HAMOHED_SUKOT_4 => 'ד דחוה"מ סוכות', - self::CHOL_HAMOHED_SUKOT_5 => 'ה דחוה"מ סוכות', - self::HOSHAANA_RABA => 'הושענא רבה', self::SIMCHAT_TORAH => 'שמחת תורה', self::PESACH => 'פסח', - self::CHOL_HAMOHED_PESACH_1 => 'א דחוה"מ פסח', - self::CHOL_HAMOHED_PESACH_2 => 'ב דחוה"מ פסח', - self::CHOL_HAMOHED_PESACH_3 => 'ג דחוה"מ פסח', - self::CHOL_HAMOHED_PESACH_4 => 'ד דחוה"מ פסח', - self::CHOL_HAMOHED_PESACH_5 => 'ה דחוה"מ פסח', self::SHVIHI_SHEL_PESACH => 'שביעי של פסח', self::SHAVUOT => 'שבועות' }; diff --git a/app/Filament/Auth/Login.php b/app/Filament/Auth/Login.php index ba295fd..2ac2c6e 100644 --- a/app/Filament/Auth/Login.php +++ b/app/Filament/Auth/Login.php @@ -17,7 +17,7 @@ public function form(Form $form): Form ->label(__('First name')) ->required() ->autofocus(), - TextInput::make(('last_name')) + TextInput::make('last_name') ->label(__('Last name')) ->required(), TextInput::make('password') diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 66875e8..2f1bbd0 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -105,8 +105,8 @@ public function getEventsByRole() { $current_user_id = auth()->user()->userable_id; $role = current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])); - - $query = $this->model::query(); + $query = $this->model::with(['task', 'soldier']); + // $query = $this->model::query(); $query = match ($role) { 'manager', 'shifts-assignment' => $query->where('soldier_id', '!=', $current_user_id) ->orWhereNull('soldier_id'), @@ -150,7 +150,6 @@ public function getFormSchema(): array protected function headerActions(): array { - set_time_limit(seconds: 0); $this->currentMonth ?? $this->currentMonth = Carbon::now()->year.'-'.Carbon::now()->month; if ($this->lastFilterData != $this->filterData) { $this->refreshRecords(); @@ -267,7 +266,7 @@ protected function resetShifts() $this->startDate = (Carbon::now()->format('m') == Carbon::parse($this->currentMonth)->format('m')) ? Carbon::now()->addDay()->format('Y-m-d') : Carbon::parse($this->currentMonth)->startOfMonth()->format('Y-m-d'); - Shift::whereNotNull('soldier_id') + Shift::with('task')->whereNotNull('soldier_id') ->whereBetween('start_date', [$this->startDate, (Carbon::parse($this->currentMonth)->endOfMonth()->addDay())->format('Y-m-d')]) ->update(['soldier_id' => null]); $this->refreshRecords(); @@ -531,4 +530,4 @@ public function onEventDrop(array $event, array $oldEvent, array $relatedEvents, return false; } -} \ No newline at end of file +} diff --git a/app/Filament/Widgets/ChartWidget.php b/app/Filament/Widgets/ChartWidget.php index 27f3001..65e0c46 100644 --- a/app/Filament/Widgets/ChartWidget.php +++ b/app/Filament/Widgets/ChartWidget.php @@ -64,9 +64,7 @@ protected function getFormSchema(): array ->placeholder(__('Select month')), Select::make('course') ->default(1) - ->options( - Soldier::pluck('course', 'course')->sort()->unique()->all() - ) + ->options(Soldier::select('course')->distinct()->orderBy('course')->pluck('course', 'course')->all()) ->placeholder(__('Select course')) ->label(__('Course')), ]; diff --git a/app/Filters/NumberFilter.php b/app/Filters/NumberFilter.php index 96ec050..a9a5566 100644 --- a/app/Filters/NumberFilter.php +++ b/app/Filters/NumberFilter.php @@ -89,81 +89,36 @@ protected function setUp(): void ]) ->columns(1), ]) - ->query(function (Builder $query, array $data) { - $allObjects = $query->getModel()::all(); - - return $query - ->when( - isset($data['range_equal']), - function () use ($allObjects, $data, $query) { - $filteredIds = $allObjects - ->filter(fn ($object) => $object[$this->getName()] == $data['range_equal']) - ->pluck('id'); - - return $query->whereIn('id', $filteredIds); - } - ) - ->when( - isset($data['range_not_equal']), - function () use ($allObjects, $data, $query) { - $filteredIds = $allObjects - ->filter(fn ($object) => $object[$this->getName()] != $data['range_not_equal']) - ->pluck('id'); - - return $query->whereIn('id', $filteredIds); - } - ) - ->when( - isset($data['range_between_from']) && isset($data['range_between_to']), - function () use ($allObjects, $data, $query) { - $filteredIds = $allObjects - ->filter(fn ($object) => $object[$this->getName()] >= $data['range_between_from'] && $object[$this->getName()] <= $data['range_between_to']) - ->pluck('id'); - - return $query->whereIn('id', $filteredIds); - } - ) - ->when( - isset($data['range_greater_than']), - function () use ($allObjects, $data, $query) { - $filteredIds = $allObjects - ->filter(fn ($object) => $object[$this->getName()] > $data['range_greater_than']) - ->pluck('id'); - - return $query->whereIn('id', $filteredIds); - } - ) - ->when( - isset($data['range_greater_than_equal']), - function () use ($allObjects, $data, $query) { - $filteredIds = $allObjects - ->filter(fn ($object) => $object[$this->getName()] >= $data['range_greater_than_equal']) - ->pluck('id'); - - return $query->whereIn('id', $filteredIds); - } - ) - ->when( - isset($data['range_less_than']), - function () use ($allObjects, $data, $query) { - $filteredIds = $allObjects - ->filter(fn ($object) => $object[$this->getName()] < $data['range_less_than']) - ->pluck('id'); - - return $query->whereIn('id', $filteredIds); - } - ) - ->when( - isset($data['range_less_than_equal']), - function () use ($allObjects, $data, $query) { - $filteredIds = $allObjects - ->filter(fn ($object) => $object[$this->getName()] <= $data['range_less_than_equal']) - ->pluck('id'); - - return $query->whereIn('id', $filteredIds); - } - ); - }) + ->query(fn (Builder $query, array $data) => $query + ->when( + isset($data['range_equal']), + fn ($q) => $q->where($this->getName(), $data['range_equal']) + ) + ->when( + isset($data['range_not_equal']), + fn ($q) => $q->where($this->getName(), '!=', $data['range_not_equal']) + ) + ->when( + isset($data['range_between_from']) && isset($data['range_between_to']), + fn ($q) => $q->whereBetween($this->getName(), [$data['range_between_from'], $data['range_between_to']]) + ) + ->when( + isset($data['range_greater_than']), + fn ($q) => $q->where($this->getName(), '>', $data['range_greater_than']) + ) + ->when( + isset($data['range_greater_than_equal']), + fn ($q) => $q->where($this->getName(), '>=', $data['range_greater_than_equal']) + ) + ->when( + isset($data['range_less_than']), + fn ($q) => $q->where($this->getName(), '<', $data['range_less_than']) + ) + ->when( + isset($data['range_less_than_equal']), + fn ($q) => $q->where($this->getName(), '<=', $data['range_less_than_equal']) + ) + ) ->indicateUsing(function (array $data): array { $indicators = []; diff --git a/app/Livewire/MyDatabaseNotifications.php b/app/Livewire/MyDatabaseNotifications.php index b33f234..9e86a17 100644 --- a/app/Livewire/MyDatabaseNotifications.php +++ b/app/Livewire/MyDatabaseNotifications.php @@ -845,9 +845,8 @@ protected function deleteNonRelevantNotifications($commonKey) protected static function getShiftsAssignments() { - return User::whereHas('roles', function ($query) { - $query->where('name', 'shifts-assignment'); - })->get(); + return User::whereHas('roles', fn ($query) => $query->where('name', 'shifts-assignment') + )->get(); } #[On('confirmConstraint')] diff --git a/app/Models/Constraint.php b/app/Models/Constraint.php index 68b5955..da94812 100644 --- a/app/Models/Constraint.php +++ b/app/Models/Constraint.php @@ -52,12 +52,9 @@ public static function getSchema(): array ->hiddenOn('view') ->visible(fn () => in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray()) && \Str::contains($_SERVER['HTTP_REFERER'], 'my-soldiers-constraint')) - ->options(fn () => Cache::remember('users', 30 * 60, function () { - return User::all(); - }) - ->mapWithKeys(function ($user) { - return [$user->userable_id => $user->displayName]; - })) + ->options(fn () => Cache::remember('users', 30 * 60, fn () => User::all() + ) + ->mapWithKeys(fn ($user) => [$user->userable_id => $user->displayName])) ->afterStateUpdated(fn ($state) => session()->put('soldier_id', $state)) ->required(), ToggleButtons::make('constraint_type') @@ -386,9 +383,8 @@ public static function filter($events, $filterData) public static function activeFilters($calendar) { if ($calendar->filter) { - $activeFilter = collect($calendar->filterData['soldier_id'])->map(function ($soldier_id) { - return User::where('userable_id', $soldier_id)->first()->displayName; - }); + $activeFilter = collect($calendar->filterData['soldier_id'])->map(fn ($soldier_id) => User::where('userable_id', $soldier_id)->first()->displayName + ); } return $activeFilter->toArray(); diff --git a/app/Models/Shift.php b/app/Models/Shift.php index 5d6d08b..322ebd2 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -48,10 +48,14 @@ public function task(): BelongsTo { return $this->belongsTo(Task::class); } - + + public function soldier() + { + return $this->belongsTo(Soldier::class); + } private function getTaskParallelWeight() { - return $this->task()->withTrashed()->first()->parallel_weight; + return $this->task?->parallel_weight; } public function getTaskNameAttribute() @@ -59,14 +63,15 @@ public function getTaskNameAttribute() $user_name = User::where('userable_id', $this->soldier_id)->get(['first_name', 'last_name']); return $this->soldier_id == auth()->user()->userable_id - ? $this->task()->withTrashed()->first()->name - : $this->task()->withTrashed()->first()->name.' '.$user_name->first()?->first_name.' '.$user_name->first()?->last_name; + ? $this->task?->name + : $this->task?->name.' '.$user_name->first()?->first_name.' '.$user_name->first()?->last_name; } public function getTaskColorAttribute() { - return $this->task()->withTrashed()->first()->color; + return $this->task?->color; } + public static function getSchema(): array { return [ @@ -90,12 +95,8 @@ public static function getSchema(): array ->options( function (?Shift $shift, Get $get) { if ($get('soldier_type') === 'all') { - return Cache::remember('users', 30 * 60, function () { - return User::all(); - }) - ->mapWithKeys(function ($user) { - return [$user->userable_id => $user->displayName]; - }); + return Cache::remember('users', 30 * 60, fn () => User::all()) + ->mapWithKeys(fn ($user) => [$user->userable_id => $user->displayName]); } $manual_assignment = new ManualAssignment($shift, $get('soldier_type')); @@ -127,6 +128,7 @@ function (?Shift $shift, Get $get) { TextInput::make('parallel_weight') ->numeric() ->minValue(0) + ->step(0.25) ->label(__('Parallel weight')), DateTimePicker::make('start_date') ->label(__('Start date')) @@ -143,9 +145,7 @@ function (?Shift $shift, Get $get) { protected static function soldierIdPlaceholder($soldierType, $shift) { if ($soldierType === 'all') { - return Cache::remember('users', 30 * 60, function () { - return User::all(); - })->count() > 0 ? __('Select a soldier') : __('No suitable soldiers'); + return Cache::remember('users', 30 * 60, fn () => User::all())->count() > 0 ? __('Select a soldier') : __('No suitable soldiers'); } $manual_assignment = new ManualAssignment($shift, $soldierType); @@ -170,7 +170,7 @@ protected static function getOptions($shift): array { $options = [ 'reserves' => __('Reserves'), - 'matching' => __('Matching soldiers'), + 'matching' => __('Matching'), 'all' => __('All'), ]; if ($shift->task()->withTrashed()->first()->department_name) { @@ -249,22 +249,20 @@ function (Shift $shift) use ($record) { ); } ) - ->extraModalFooterActions(function (Action $action) { - return [ - $action->makeExtraModalAction('exchange', ['exchange' => true, 'role' => auth()->user()->getRoleNames()]) - ->label(__('Exchange assignment')) - ->icon('heroicon-s-arrow-path') - ->color('primary') - ->disabled(fn (): bool => ! session()->get('selected_shift')) - ->visible(fn (): bool => auth()->user()->getRoleNames()->count() > 1), - $action->makeExtraModalAction(__('Request'), ['request' => true]) - ->icon('heroicon-s-arrow-path') - ->disabled(fn (): bool => ! session()->get('selected_shift')) - ->color('primary') - ->visible(fn (): bool => ! (auth()->user()->getRoleNames()->count() > 1)), - $action->makeExtraModalAction(__('Cancel'), ['cancel' => true]), - ]; - }) + ->extraModalFooterActions(fn (Action $action) => [ + $action->makeExtraModalAction('exchange', ['exchange' => true, 'role' => auth()->user()->getRoleNames()]) + ->label(__('Exchange assignment')) + ->icon('heroicon-s-arrow-path') + ->color('primary') + ->disabled(fn (): bool => ! session()->get('selected_shift')) + ->visible(fn (): bool => auth()->user()->getRoleNames()->count() > 1), + $action->makeExtraModalAction(__('Request'), ['request' => true]) + ->icon('heroicon-s-arrow-path') + ->disabled(fn (): bool => ! session()->get('selected_shift')) + ->color('primary') + ->visible(fn (): bool => ! (auth()->user()->getRoleNames()->count() > 1)), + $action->makeExtraModalAction(__('Cancel'), ['cancel' => true]), + ]) ->action(function (array $data, array $arguments, Model $record, Component $livewire): void { session()->put('selected_shift', false); if ($arguments['exchange'] ?? false) { @@ -281,14 +279,14 @@ function (Shift $shift) use ($record) { if ($arguments['cancel'] ?? false) { $livewire->dispatch('filament-fullcalendar--refresh'); } - }) - ->hidden(function ($record) { - if ($record->soldier_id) { - $changeAssignment = new ChangeAssignment($record); - - return $changeAssignment->getMatchingShifts()->isEmpty(); - } }); + // ->hidden(function ($record) { + // if ($record->soldier_id) { + // $changeAssignment = new ChangeAssignment($record); + + // return $changeAssignment->getMatchingShifts()->isEmpty(); + // } + // }); } protected static function description($soldierId, $shift) @@ -533,7 +531,7 @@ function ($record) use (&$soldiers) { ->visible(fn (Get $get) => $get('soldiers') == 'all'), ToggleButtons::make('soldiers') ->label('') - ->options(['all' => __('All soldiers'), 'matching' => __('Matching soldiers')]) + ->options(['all' => __('All soldiers'), 'matching' => __('Matching')]) ->inline() ->live() ->default(fn () => 'matching') @@ -546,12 +544,8 @@ function ($record) use (&$soldiers) { ->label(__('Soldier')) ->options( fn (Get $get) => match ($get('soldiers')) { - 'all' => Cache::remember('users', 30 * 60, function () { - return User::all(); - })->where('userable_id', '!=', $record->soldier_id) - ->mapWithKeys(function ($user) { - return [$user->userable_id => $user->displayName]; - }), + 'all' => Cache::remember('users', 30 * 60, fn () => User::all())->where('userable_id', '!=', $record->soldier_id) + ->mapWithKeys(fn ($user) => [$user->userable_id => $user->displayName]), 'matching' => $changeAssignment->getMatchingSoldiers(), default => $changeAssignment->getMatchingSoldiers(), } @@ -568,22 +562,20 @@ function ($record) use (&$soldiers) { } ) ->extraModalFooterActions( - function (Action $action): array { - return [ - $action->makeExtraModalAction('change', ['change' => true, 'role' => auth()->user()->getRoleNames()]) - ->label(__('Change assignment')) - ->icon('heroicon-o-arrow-uturn-up') - ->color('primary') - ->disabled(fn (): bool => ! session()->get('selected_soldier')) - ->visible(fn (): bool => auth()->user()->getRoleNames()->count() > 1), - $action->makeExtraModalAction(__('Request'), ['request' => true]) - ->icon('heroicon-o-arrow-uturn-up') - ->disabled(fn (): bool => ! session()->get('selected_soldier')) - ->color('primary') - ->visible(fn (): bool => ! (auth()->user()->getRoleNames()->count() > 1)), - $action->makeExtraModalAction(__('Cancel'), ['cancel' => true]), - ]; - } + fn (Action $action) => [ + $action->makeExtraModalAction('change', ['change' => true, 'role' => auth()->user()->getRoleNames()]) + ->label(__('Change assignment')) + ->icon('heroicon-o-arrow-uturn-up') + ->color('primary') + ->disabled(fn (): bool => ! session()->get('selected_soldier')) + ->visible(fn (): bool => auth()->user()->getRoleNames()->count() > 1), + $action->makeExtraModalAction(__('Request'), ['request' => true]) + ->icon('heroicon-o-arrow-uturn-up') + ->disabled(fn (): bool => ! session()->get('selected_soldier')) + ->color('primary') + ->visible(fn (): bool => ! (auth()->user()->getRoleNames()->count() > 1)), + $action->makeExtraModalAction(__('Cancel'), ['cancel' => true]), + ] ) ->action(function (array $data, array $arguments, Model $record, Component $livewire): void { session()->put('selected_soldier', false); @@ -608,7 +600,7 @@ function (Action $action): array { protected static function shiftsAssignmentChange($shift, $soldierId) { self::shiftsAssignmentSendChangeNotifications($shift, $soldierId); - Shift::where('id', $shift->id)->update(['soldier_id' => $soldierId]); + Shift::with('task')->where('id', $shift->id)->update(['soldier_id' => $soldierId]); } protected static function shiftsAssignmentSendChangeNotifications($shift, $soldierId) @@ -766,9 +758,8 @@ protected static function soldierChange($record, $soldierId) protected static function getShiftsAssignments() { - return User::whereHas('roles', function ($query) { - $query->where('name', 'shifts-assignment'); - })->get(); + return User::whereHas('roles', fn ($query) => $query->where('name', 'shifts-assignment') + )->get(); } protected static function sendNotification($title, $body, $actions, $user, $commonKey = null) @@ -818,13 +809,7 @@ public static function getFilters($calendar) section::make([ Radio::make('kind') ->label(__('Kind')) - ->options([ - 'Weekend' => __('Is weekend'), - 'Night' => __('Is night'), - 'In parallel' => __('In parallel'), - 'Alert' => __('Alert'), - 'Regular' => __('Regular'), - ]) + ->options(collect(TaskKind::cases())->mapWithKeys(fn ($kind) => [$kind->value => $kind->getLabel()])) ->inlineLabel(false) ->inline(), ]), @@ -840,12 +825,14 @@ public static function getFilters($calendar) ->hidden(fn (Get $get) => $get('unassigned_shifts') || $get('course')), Select::make('type') ->label(__('Type')) - ->options(Task::all()->pluck('type', 'type')->sort()->unique()->all()) + ->options(Task::select('type') + ->distinct() + ->orderBy('type') + ->pluck('type', 'type') + ->all()) ->multiple(), Select::make('course') - ->options( - Soldier::pluck('course', 'course')->sort()->unique()->all() - ) + ->options(Soldier::select('course')->distinct()->orderBy('course')->pluck('course', 'course')->all()) ->label(__('Course')) ->multiple() ->live() diff --git a/app/Models/Task.php b/app/Models/Task.php index e477d9b..1728916 100644 --- a/app/Models/Task.php +++ b/app/Models/Task.php @@ -39,13 +39,10 @@ public function shifts(): HasMany protected static function booted(): void { - static::deleting(function (Task $task) { - Shift::where('task_id', $task->id) - ->where('start_date', '>', now()) - ->get() - ->map(function (Shift $shift) { - $shift->delete(); - }); - }); + static::deleting(fn (Task $task) => Shift::where('task_id', $task->id) + ->where('start_date', '>', now()) + ->get() + ->map(fn (Shift $shift) => $shift->delete()) + ); } } diff --git a/app/Providers/FilamentServiceProvider.php b/app/Providers/FilamentServiceProvider.php index 83fb355..dd0b483 100644 --- a/app/Providers/FilamentServiceProvider.php +++ b/app/Providers/FilamentServiceProvider.php @@ -85,15 +85,14 @@ public function register(): void public function boot() { - Filament::serving(function () { - Filament::registerNavigationGroups([ - NavigationGroup::make() - ->label(fn (): string => __('Constraints')) - ->icon('heroicon-o-calendar-days'), - NavigationGroup::make() - ->label(fn (): string => __('Shifts')) - ->icon('heroicon-o-calendar'), - ]); - }); + Filament::serving(fn () => Filament::registerNavigationGroups([ + NavigationGroup::make() + ->label(fn (): string => __('Constraints')) + ->icon('heroicon-o-calendar-days'), + NavigationGroup::make() + ->label(fn (): string => __('Shifts')) + ->icon('heroicon-o-calendar'), + ]) + ); } } diff --git a/app/Resources/DepartmentResource.php b/app/Resources/DepartmentResource.php index 489a267..aa6027d 100644 --- a/app/Resources/DepartmentResource.php +++ b/app/Resources/DepartmentResource.php @@ -53,16 +53,12 @@ public static function form(Form $form): Form ->label(__('Commander')) ->relationship('commander', 'id') ->options( - fn () => Cache::remember('users', 30 * 60, function () { - return User::all(); - })->mapWithKeys(function ($user) { - return [$user->userable_id => $user->displayName]; - }) + fn () => Cache::remember('users', 30 * 60, fn () => User::all())->mapWithKeys(fn ($user) => [$user->userable_id => $user->displayName]) ) ->placeholder(__('Select commander')) ->optionsLimit(Soldier::count()) - ->getSearchResultsUsing(fn ($search) => User::all() - ->filter(fn (User $user) => str_contains($user->displayName, $search)) + ->getSearchResultsUsing(fn ($search) => User::whereRaw("first_name || ' ' || last_name LIKE ?", "%{$search}%") + ->get() ->mapWithKeys(fn (User $user) => [$user->userable_id => $user->displayName]) ->toArray()) ->searchable(), @@ -80,9 +76,7 @@ public static function table(Table $table): Table ->searchable() ->sortable(), TextColumn::make('commander.user') - ->formatStateUsing(function ($state) { - return $state->last_name.' '.$state->first_name; - }) + ->formatStateUsing(fn ($state) => $state->last_name.' '.$state->first_name) ->label(__('Commander')) ->searchable( query: function ($query, $search) { diff --git a/app/Resources/ProfileResource.php b/app/Resources/ProfileResource.php index b2a15ba..45e3a38 100644 --- a/app/Resources/ProfileResource.php +++ b/app/Resources/ProfileResource.php @@ -6,7 +6,6 @@ use App\Models\Soldier; use App\Models\Task; use App\Resources\ProfileResource\Pages; -use Carbon\Carbon; use Filament\Forms\Components\DatePicker; use Filament\Forms\Components\Fieldset; use Filament\Forms\Components\Section; @@ -56,7 +55,11 @@ public static function form(Form $form): Form Select::make('qualifications') ->label(__('Qualifications')) ->placeholder(__('Select qualifications')) - ->options(Task::all()->pluck('type', 'type')->sort()->unique()->all()), + ->options(Task::select('type') + ->distinct() + ->orderBy('type') + ->pluck('type', 'type') + ->all()), TextInput::make('capacity') ->numeric() ->step(0.25) @@ -76,6 +79,10 @@ public static function form(Form $form): Form ->step(1) ->minValue(0) ->required() + ->lte('max_shifts') + ->validationMessages([ + 'lte' => __('The field cannot be greater than max_shifts field'), + ]) ->default(0), TextInput::make('max_weekends') ->label(__('Max weekends')) @@ -83,6 +90,10 @@ public static function form(Form $form): Form ->step(0.25) ->minValue(0) ->required() + ->lte('capacity') + ->validationMessages([ + 'lte' => __('The field cannot be greater than capacity field'), + ]) ->default(0), TextInput::make('max_alerts') ->label(__('Max alerts')) @@ -125,9 +136,8 @@ public static function table(Table $table): Table Stack::make([ TextColumn::make('user.first_name') ->label(__('Full name')) - ->formatStateUsing(function ($record) { - return $record->user->last_name.' '.$record->user->first_name; - })->weight(FontWeight::SemiBold)->description(__('Full name'), 'above')->size(TextColumnSize::Large), + ->formatStateUsing(fn ($record) => $record->user->last_name.' '.$record->user->first_name + )->weight(FontWeight::SemiBold)->description(__('Full name'), 'above')->size(TextColumnSize::Large), TextColumn::make('enlist_date')->weight(FontWeight::SemiBold)->description(__('Enlist date'), 'above')->size(TextColumnSize::Large)->date(), TextColumn::make('course')->weight(FontWeight::SemiBold)->description(__('Course'), 'above')->size(TextColumnSize::Large), TextColumn::make('max_shifts')->weight(FontWeight::SemiBold)->description(__('Max shifts'), 'above')->size(TextColumnSize::Large), @@ -141,14 +151,22 @@ public static function table(Table $table): Table TextColumn::make('capacity')->weight(FontWeight::SemiBold)->description(__('Capacity'), 'above')->size(TextColumnSize::Large), TextColumn::make('capacity_hold') ->default(function () { - $soldierShifts = Shift::where('soldier_id', auth()->user()->userable_id)->get(); - - return $soldierShifts->filter(function (Shift $shift): bool { - return (Carbon::parse($shift->start_date)->month == now()->month - && Carbon::parse($shift->start_date)->year == now()->year) - || (Carbon::parse($shift->end_date)->month == now()->month - && Carbon::parse($shift->end_date)->year == now()->year); - })->sum(fn (Shift $shift) => $shift->parallel_weight === null ? $shift->task()->withTrashed()->first()->parallel_weight : $shift->parallel_weight); + $now = now(); + + return Shift::where('soldier_id', auth()->user()->userable_id) + ->where(function ($query) use ($now) { + $query->whereYear('start_date', $now->year) + ->whereMonth('start_date', $now->month) + ->orWhere(function ($query) use ($now) { + $query->whereYear('end_date', $now->year) + ->whereMonth('end_date', $now->month); + }); + }) + ->with(['task' => function ($query) { + $query->withTrashed(); + }]) + ->get() + ->sum(fn (Shift $shift) => $shift->parallel_weight ?? $shift->task->parallel_weight); }) ->weight(FontWeight::SemiBold) ->description(__('Capacity hold'), 'above') diff --git a/app/Resources/SoldierResource.php b/app/Resources/SoldierResource.php index a033dd4..2829a43 100644 --- a/app/Resources/SoldierResource.php +++ b/app/Resources/SoldierResource.php @@ -12,7 +12,6 @@ use App\Models\Team; use App\Models\User; use App\Resources\SoldierResource\Pages; -use Carbon\Carbon; use Filament\Forms\Components\DatePicker; use Filament\Forms\Components\Fieldset; use Filament\Forms\Components\Group; @@ -63,9 +62,9 @@ public static function table(Table $table): Table ->columns([ TextColumn::make('user') ->label(__('Full name')) - ->formatStateUsing(function ($record) { - return $record->user->last_name.' '.$record->user->first_name; - }) + ->formatStateUsing( + fn ($record) => $record->user->last_name.' '.$record->user->first_name + ) ->searchable(query: function ($query, $search) { $query->whereHas('user', function ($query) use ($search) { $query->where('first_name', 'like', "%{$search}%") @@ -81,24 +80,22 @@ public static function table(Table $table): Table ->badge() ->color(fn ($state) => $state ? 'info' : 'primary') ->sortable(), - TextColumn::make('role') + TextColumn::make('role') ->label(__('Role')) ->default( function ($record) { - if (Soldier::find($record->id)->user) { - $roles = Soldier::find($record->id)?->user?->getRoleNames(); + if ($record->user) { + $roles = $record->user->getRoleNames(); $roles->count() > 1 ? $roles->shift(1) : null; $roles->all(); - return array_map(function ($role) { - return match ($role) { - 'manager' => __('Manager'), - 'shifts-assignment' => __('A shifts assignment'), - 'department-commander' => __('Department commander'), - 'team-commander' => __('Team commander'), - 'soldier' => __('Soldier'), - default => __('No roles'), - }; + return array_map(fn ($role) => match ($role) { + 'manager' => __('Manager'), + 'shifts-assignment' => __('A shifts assignment'), + 'department-commander' => __('Department commander'), + 'team-commander' => __('Team commander'), + 'soldier' => __('Soldier'), + default => __('No roles'), }, $roles->toArray()); } } @@ -107,7 +104,6 @@ function ($record) { ->label(__('Team')) ->visible(collect(auth()->user()->getRoleNames())->intersect(['manager', 'shifts-assignment', 'department-commander'])->isNotEmpty()) ->placeholder(__('Not associated')) - ->default(function ($record) { $soldier = Soldier::find($record->id); @@ -118,15 +114,23 @@ function ($record) { ->sortable() ->date(), TextColumn::make('capacity_hold') - ->default(function ($record) { - $soldierShifts = Shift::where('soldier_id', $record->id)->get(); + ->default(function () { + $now = now(); - return $soldierShifts->filter(function (Shift $shift): bool { - return (Carbon::parse($shift->start_date)->month == now()->month - && Carbon::parse($shift->start_date)->year == now()->year) - || (Carbon::parse($shift->end_date)->month == now()->month - && Carbon::parse($shift->end_date)->year == now()->year); - })->sum(fn (Shift $shift) => $shift->parallel_weight === null ? $shift->task()->withTrashed()->first()->parallel_weight : $shift->parallel_weight); + return Shift::where('soldier_id', auth()->user()->userable_id) + ->where(function ($query) use ($now) { + $query->whereYear('start_date', $now->year) + ->whereMonth('start_date', $now->month) + ->orWhere(function ($query) use ($now) { + $query->whereYear('end_date', $now->year) + ->whereMonth('end_date', $now->month); + }); + }) + ->with(['task' => function ($query) { + $query->withTrashed(); + }]) + ->get() + ->sum(fn (Shift $shift) => $shift->parallel_weight ?? $shift->task->parallel_weight); }) ->label(__('Capacity hold')) ->numeric(), @@ -164,12 +168,16 @@ function ($record) { ->label(__('Qualifications')) ->multiple() ->searchable() - ->options(Task::withTrashed()->get()->pluck('type', 'type')->sort()->unique()->all()) - ->query(function (Builder $query, array $data) { - return collect($data['values'])->map(function ($qualification) use ($query) { + ->options(Task::withTrashed()->select('type') + ->distinct() + ->orderBy('type') + ->pluck('type', 'type') + ->all()) + ->query( + fn (Builder $query, array $data) => collect($data['values'])->map(function ($qualification) use ($query) { return $query->whereJsonContains('qualifications', $qualification); - }); - }) + }) + ) ->default(null), Filter::make('reservist') ->label(__('Reservist')) @@ -199,8 +207,8 @@ function ($record) { ->after('recruitment_from'), ]), ]) - ->query(function (Builder $query, array $data): Builder { - return $query + ->query( + fn (Builder $query, array $data) => $query ->when( $data['recruitment_from'], fn (Builder $query, $date): Builder => $query->whereDate('enlist_date', '>=', $date), @@ -208,8 +216,8 @@ function ($record) { ->when( $data['recruitment_until'], fn (Builder $query, $date): Builder => $query->whereDate('enlist_date', '<=', $date), - ); - }), + ) + ), ], FiltersLayout::Modal) ->filtersFormColumns(4) @@ -238,8 +246,8 @@ function ($record) { ->label(__('Update reserve days')) ->icon('heroicon-o-pencil') ->color('primary') - ->form(function ($record) { - return [ + ->form( + fn ($record) => [ Flatpickr::make('last_reserve_dates') ->label(__('Last reserve dates')) ->multiple() @@ -258,8 +266,8 @@ function ($record) { ->default($record->next_reserve_dates) ->minDate(now()->addMonth()->startOfMonth()) ->maxDate(now()->addMonth()->endOfMonth()), - ]; - }) + ] + ) ->action(function (Soldier $record, array $data): void { $record->last_reserve_dates = $data['last_reserve_dates']; $record->reserve_dates = $data['reserve_dates']; @@ -271,23 +279,7 @@ function ($record) { ReplicateAction::make() ->icon('heroicon-o-document-duplicate') ->color('success') - ->after(function (Soldier $replica, $record): void { - $user = new User; - $user->first_name = ''; - $user->last_name = ''; - $user->password = ''; - $user->userable_type = "App\Models\Soldier"; - $user->userable_id = $replica->id; - $user->save(); - $user->assignRole('soldier'); - in_array('shifts-assignment', $record->user->getRoleNames()->toArray()) ? $user->assignRole('shifts-assignment') : null; - $replica['last_reserve_dates'] = []; - $replica['reserve_dates'] = []; - $replica['next_reserve_dates'] = []; - $replica->save(); - session()->put('shifts_assignment', User::where('userable_id', $record->id)->first()->getRoleNames()->contains('shifts-assignment')); - redirect()->route('filament.app.resources.soldiers.edit', ['record' => $replica->id]); - }) + ->after(fn (Soldier $replica, $record) => self::replicateSoldier($replica, $record)) ->successNotification(null) ->closeModalByClickingAway(false), ]), @@ -299,16 +291,41 @@ function ($record) { ]); } + protected static function replicateSoldier(Soldier $replica, $record) + { + $user = new User; + $user->first_name = ''; + $user->last_name = ''; + $user->password = ''; + $user->userable_type = "App\Models\Soldier"; + $user->userable_id = $replica->id; + $user->save(); + $user->assignRole('soldier'); + in_array('shifts-assignment', $record->user->getRoleNames()->toArray()) ? $user->assignRole('shifts-assignment') : null; + $replica['last_reserve_dates'] = []; + $replica['reserve_dates'] = []; + $replica['next_reserve_dates'] = []; + $replica->save(); + session()->put('shifts_assignment', User::where('userable_id', $record->id)->first()->getRoleNames()->contains('shifts-assignment')); + redirect()->route('filament.app.resources.soldiers.edit', ['record' => $replica->id]); + } + public static function getEloquentQuery(): Builder { if (auth()->user()->hasRole('manager') || auth()->user()->hasRole('shifts-assignment')) { - return parent::getEloquentQuery()->where('id', '!=', User::where('userable_id', auth()->user()->id)->value('userable_id')); + return parent::getEloquentQuery()->where('id', '!=', auth()->user()->userable_id); } return parent::getEloquentQuery() - ->whereIn('team_id', Team::select('id')->where('department_id', Department::select('id')->where('commander_id', auth()->user()->userable_id))) - ->orWhere('team_id', Team::select('id')->where('commander_id', auth()->user()->userable_id)); - + ->whereIn('team_id', Department::whereHas('commander', function ($query) { + $query->where('id', auth()->user()->userable_id); + })->first()?->teams->pluck('id') ?? collect([])) + ->orWhereIn('id', Department::whereHas('commander', function ($query) { + $query->where('id', auth()->user()->userable_id); + })->first()?->teams->pluck('commander_id') ?? collect([])) + ->orWhere('team_id', Team::whereHas('commander', function ($query) { + $query->where('id', auth()->user()->userable_id); + })->value('id') ?? collect([])); } public static function getPages(): array @@ -439,7 +456,11 @@ public static function constraints(): array ->label(__('Qualifications')) ->multiple() ->placeholder(__('Select qualifications')) - ->options(Task::all()->pluck('type', 'type')->sort()->unique()->all()), + ->options(Task::select('type') + ->distinct() + ->orderBy('type') + ->pluck('type', 'type') + ->all()), ])->columns(3), ]; } diff --git a/app/Resources/SoldierResource/Pages/ListSoldiers.php b/app/Resources/SoldierResource/Pages/ListSoldiers.php index 1acd65b..e935ff7 100644 --- a/app/Resources/SoldierResource/Pages/ListSoldiers.php +++ b/app/Resources/SoldierResource/Pages/ListSoldiers.php @@ -27,7 +27,7 @@ protected function getHeaderActions(): array Section::make([ Select::make('course') ->label(__('Course')) - ->options(Soldier::pluck('course', 'course')->sort()->unique()->all()) + ->options(Soldier::select('course')->distinct()->orderBy('course')->pluck('course', 'course')->all()) ->required(), ]), Section::make([ @@ -40,11 +40,19 @@ protected function getHeaderActions(): array ->label(__('Max nights')) ->numeric() ->step(1) + ->lte('max_shifts') + ->validationMessages([ + 'lte' => __('The field cannot be greater than max_shifts field'), + ]) ->minValue(0), TextInput::make('max_weekends') ->label(__('Max weekends')) ->numeric() ->step(0.25) + ->lte('capacity') + ->validationMessages([ + 'lte' => __('The field cannot be greater than capacity field'), + ]) ->minValue(0), TextInput::make('max_alerts') ->label(__('Max alerts')) @@ -65,7 +73,11 @@ protected function getHeaderActions(): array ->label(__('Qualifications')) ->multiple() ->placeholder(__('Select qualifications')) - ->options(Task::all()->pluck('type', 'type')->sort()->unique()->all()), + ->options(Task::select('type') + ->distinct() + ->orderBy('type') + ->pluck('type', 'type') + ->all()), ]), ]) ->action(function (array $data) { diff --git a/app/Resources/TaskResource.php b/app/Resources/TaskResource.php index 7813524..ac54e48 100644 --- a/app/Resources/TaskResource.php +++ b/app/Resources/TaskResource.php @@ -69,10 +69,8 @@ public static function form(Form $form): Form Section::make()->schema(self::additionalDetails())->columns(), Section::make()->schema(self::assignSoldier())->columns() ->visible( - function (Get $get) { - return $get('recurring.type') == 'One time' - && $get('recurring.date'); - } + fn (Get $get) => $get('recurring.type') == 'One time' + && $get('recurring.date') ), ]); } @@ -169,7 +167,11 @@ public static function table(Table $table): Table ->multiple() ->searchable() ->options( - Task::all()->pluck('type', 'type')->sort()->unique()->all() + Task::select('type') + ->distinct() + ->orderBy('type') + ->pluck('type', 'type') + ->all() ) ->default(null), SelectFilter::make('recurring.type') @@ -177,11 +179,10 @@ public static function table(Table $table): Table ->multiple() ->searchable() ->options(collect(RecurringType::cases())->mapWithKeys(fn ($type) => [$type->value => $type->getLabel()])) - ->query(function (Builder $query, array $data) { - return collect($data['values'])->map(function ($type) use ($query) { - return $query->orWhereJsonContains('recurring', $type); - }); + ->query(fn (Builder $query, array $data) => collect($data['values'])->map(function ($type) use ($query) { + return $query->orWhereJsonContains('recurring', $type); }) + ) ->default(null), NumberFilter::make('parallel_weight') ->label(__('Parallel weight')), @@ -195,9 +196,7 @@ public static function table(Table $table): Table ->label(__('Department name')) ->multiple() ->searchable() - ->options( - Department::all()->pluck('name', 'name') - ) + ->options(Department::select('name')->distinct()->orderBy('name')->pluck('name', 'name')->all()) ->default(null), ], FiltersLayout::Modal) ->deferFilters() @@ -239,9 +238,7 @@ public static function getTaskDetails(): array ->required(), Select::make('department_name') ->label(__('Department')) - ->options(Department::all()->mapWithKeys(function ($department) { - return [$department->name => $department->name]; - })) + ->options(Department::select('name')->distinct()->orderBy('name')->pluck('name', 'name')) ->live(), TextInput::make('type') ->label(__('Type')) @@ -338,9 +335,8 @@ public static function assignSoldier(): array Select::make('soldier_id') ->label(__('Assign soldier')) ->options( - function (Get $get) { - return self::getSoldiers($get); - } + fn (Get $get) => self::getSoldiers($get) + ) ->default(null) ->placeholder(fn (Get $get) => self::getSoldiers($get)->isEmpty() ? __('No suitable soldiers') : __('Select a soldier')) @@ -370,7 +366,11 @@ public static function additionalDetails(): array ->label(__('Concurrent tasks')) ->multiple() ->placeholder(fn () => Task::count() > 0 ? __('Select concurrent tasks') : __('No tasks')) - ->options(Task::all()->pluck('type', 'type')->sort()->unique()->all()) + ->options(Task::select('type') + ->distinct() + ->orderBy('type') + ->pluck('type', 'type') + ->all()) ->visible(fn (Get $get) => $get('kind') === TaskKind::INPARALLEL->value), ]; } @@ -379,7 +379,7 @@ protected static function getOptions(Get $get): array { $options = [ 'reserves' => __('Reserves'), - 'matching' => __('Matching soldiers'), + 'matching' => __('Matching'), 'all' => __('All'), ]; if ($get('department_name')) { @@ -418,12 +418,8 @@ protected static function getSoldiers(Get $get) return $manual_assignment->getSoldiers($get('department_name')); } - return Cache::remember('users', 30 * 60, function () { - return User::all(); - }) - ->mapWithKeys(function ($user) { - return [$user->userable_id => $user->displayName]; - }); + return Cache::remember('users', 30 * 60, fn () => User::all()) + ->mapWithKeys(fn ($user) => [$user->userable_id => $user->displayName]); } protected static function taskDetails(Get $get) diff --git a/app/Resources/TaskResource/Pages/CreateTask.php b/app/Resources/TaskResource/Pages/CreateTask.php index 28ee749..f767d93 100644 --- a/app/Resources/TaskResource/Pages/CreateTask.php +++ b/app/Resources/TaskResource/Pages/CreateTask.php @@ -74,10 +74,9 @@ public static function getSteps(): array Section::make()->schema(TaskResource::assignSoldier())->columns(), ]) ->visible( - function (Get $get) { - return $get('recurring.type') == 'One time' - && $get('recurring.date'); - } + fn (Get $get) => $get('recurring.type') == 'One time' + && $get('recurring.date') + ), ]; } diff --git a/app/Resources/TeamResource.php b/app/Resources/TeamResource.php index 5f9362a..5dec51c 100644 --- a/app/Resources/TeamResource.php +++ b/app/Resources/TeamResource.php @@ -55,9 +55,7 @@ public static function form(Form $form): Form ->label(__('Commander')) ->relationship('commander') ->options( - fn () => Cache::remember('users', 30 * 60, function () { - return User::all(); - })->mapWithKeys(fn ($user) => [$user->userable_id => $user->displayName]) + fn () => Cache::remember('users', 30 * 60, fn () => User::all())->mapWithKeys(fn ($user) => [$user->userable_id => $user->displayName]) ) ->live() ->afterStateUpdated(function ($state, Get $get, Set $set) { @@ -68,45 +66,41 @@ public static function form(Form $form): Form ->optionsLimit(Soldier::count()) ->placeholder(__('Select commander')) ->searchable() - ->getSearchResultsUsing(fn ($search) => User::all() - ->filter(fn ($user) => str_contains($user->displayName, $search)) + ->getSearchResultsUsing(fn ($search) => User::whereRaw("first_name || ' ' || last_name LIKE ?", "%{$search}%") + ->get() ->mapWithKeys(fn ($user) => [$user->userable_id => $user->displayName]) ->toArray()) ->required(), Select::make('department_id') ->label(__('Department')) ->relationship('department') - ->options(Department::all()->pluck('name', 'id') ?? []) + ->options(Department::select('id', 'name')->distinct()->orderBy('name')->pluck('name', 'id')->toArray()) ->searchable() - ->getSearchResultsUsing(fn ($search) => Department::all() - ->filter(fn (Department $department): bool => str_contains($department->name, $search)) - ->mapWithKeys(fn (Department $department): array => [$department->id => $department->name]) + ->getSearchResultsUsing(fn ($search) => Department::where('name', 'like', "%{$search}%") + ->orderBy('name') + ->pluck('name', 'id') ->toArray()) ->default(request()->input('department_id')) ->required(), Select::make('members') ->label(__('Members')) ->options( - fn (Get $get) => Cache::remember('users', 30 * 60, function () { - return User::all(); - }) + fn (Get $get) => Cache::remember('users', 30 * 60, fn () => User::all()) ->filter(function ($user) use ($get): bool { return $user->userable_id !== (int) $get('commander_id'); }) ->mapWithKeys(fn ($user) => [$user->userable_id => $user->displayName]) ) - ->formatStateUsing(function (?Team $team, string $operation) { - return $operation === 'edit' ? - collect($team->members)->map(fn (Soldier $soldier) => $soldier->id) : - null; - }) + ->formatStateUsing(fn (?Team $team, string $operation) => $operation === 'edit' ? + collect($team->members)->map(fn (Soldier $soldier) => $soldier->id) : + null) ->live() ->optionsLimit(Soldier::count()) ->placeholder(__('Add a team member')) ->multiple() ->searchable() - ->getSearchResultsUsing(fn ($search) => User::all() - ->filter(fn ($user) => str_contains($user->displayName, $search)) + ->getSearchResultsUsing(fn ($search) => User::whereRaw("first_name || ' ' || last_name LIKE ?", "%{$search}%") + ->get() ->mapWithKeys(fn ($user) => [$user->userable_id => $user->displayName]) ->toArray()), ])->columns(2), @@ -162,19 +156,13 @@ public static function table(Table $table): Table Select::make('members') ->label(__('Members')) ->options( - fn (Team $record) => Cache::remember('users', 30 * 60, function () { - return User::all(); - }) + fn (Team $record) => Cache::remember('users', 30 * 60, fn () => User::all()) ->filter(function ($user) use ($record) { return $record->commander_id !== $user->userable_id; }) - ->mapWithKeys(function ($user) { - return [$user->userable_id => $user->displayName]; - }) + ->mapWithKeys(fn ($user) => [$user->userable_id => $user->displayName]) ) - ->formatStateUsing(function (Team $record) { - return collect($record->members)->map(fn (Soldier $soldier) => $soldier->id); - }) + ->formatStateUsing(fn (Team $record) => collect($record->members)->map(fn (Soldier $soldier) => $soldier->id)) ->optionsLimit(Soldier::count()) ->multiple() ->searchable(), diff --git a/app/Services/Algorithm.php b/app/Services/Algorithm.php index 845d1f3..0a9da95 100644 --- a/app/Services/Algorithm.php +++ b/app/Services/Algorithm.php @@ -19,14 +19,21 @@ public function __construct($date = null) protected function getShiftWithTasks() { - return Shift::whereNull('soldier_id') - ->get() - ->filter(function (Shift $shift) { - $range = new Range($shift->start_date, $shift->end_date); + $startOfMonth = max($this->date->copy()->startOfMonth(), Carbon::tomorrow()); + $endOfMonth = $this->date->copy()->endOfMonth(); - return $range->isSameMonth(new Range(max($this->date->copy()->startOfMonth(), Carbon::tomorrow()), $this->date->copy()->endOfMonth())) - && $shift->task()->withTrashed()->first()->kind !== TaskKind::INPARALLEL->value; + return Shift::whereNull('soldier_id') + ->whereHas('task', function ($query) { + $query->withTrashed() + ->where('kind', '!=', TaskKind::INPARALLEL->value); }) + ->where(function ($query) use ($startOfMonth, $endOfMonth) { + $query->where(function ($subQuery) use ($startOfMonth, $endOfMonth) { + $subQuery->where('start_date', '<', $endOfMonth) + ->where('end_date', '>', $startOfMonth); + }); + }) + ->get() ->map(fn (Shift $shift): ShiftService => Helpers::buildShift($shift)); } diff --git a/app/Services/ChangeAssignment.php b/app/Services/ChangeAssignment.php index ddf77d6..d336c49 100644 --- a/app/Services/ChangeAssignment.php +++ b/app/Services/ChangeAssignment.php @@ -43,23 +43,20 @@ public function getMatchingSoldiers() return Helpers::buildSoldier($soldier, $constraints, $soldierShifts, [], $concurrentsShifts); }) - ->filter(function (SoldierService $soldier) { - return $soldier->isQualified($this->shift->taskType) - && $soldier->isAvailableBySpaces($this->shift->getShiftSpaces($soldier->shifts)) - && ! $this->isConflictWithConstraints($soldier, $this->shift->range) - && $soldier->isAvailableByShifts($this->shift); - }) - ->mapWithKeys(function (SoldierService $soldier) { - return ! $soldier->isAvailableByConcurrentsShifts($this->shift) ? - [$soldier->id => Soldier::find($soldier->id)->user->displayName.' 📌'] - : [$soldier->id => Soldier::find($soldier->id)->user->displayName]; - }) + ->filter(fn (SoldierService $soldier) => $soldier->isQualified($this->shift->taskType) + && $soldier->isAvailableBySpaces($this->shift->getShiftSpaces($soldier->shifts)) + && ! $this->isConflictWithConstraints($soldier, $this->shift->range) + && $soldier->isAvailableByShifts($this->shift)) + ->mapWithKeys(fn (SoldierService $soldier) => ! $soldier->isAvailableByConcurrentsShifts($this->shift) ? + [$soldier->id => Soldier::find($soldier->id)->user->displayName.' 📌'] + : [$soldier->id => Soldier::find($soldier->id)->user->displayName]) ->toArray(); } public function getMatchingShifts() { - return Shift::whereNotNull('soldier_id') + Shift::with('task') + ->whereNotNull('soldier_id') ->where('soldier_id', '!=', $this->soldier->id) ->get() ->filter(function (Shift $shift) { diff --git a/app/Services/Charts.php b/app/Services/Charts.php index 6a8234e..c4d8c67 100644 --- a/app/Services/Charts.php +++ b/app/Services/Charts.php @@ -2,6 +2,7 @@ namespace App\Services; +use App\Enums\ConstraintType; use App\Enums\TaskKind; use App\Models\Constraint as ConstraintModel; use App\Models\Shift; @@ -93,7 +94,7 @@ protected function howMuchLowConstraintsRejected($constraints, $shifts): int { $count = 0; $constraints->filter( - fn (ConstraintModel $constraint) => $constraint->constraint_type->getPriority() == 2 + fn (ConstraintModel $constraint) => ConstraintType::getPriority()[$constraint->constraint_type->value] == 2 ) ->map( function ($constraint) use ($count, $shifts) { diff --git a/app/Services/ConcurrentTasks.php b/app/Services/ConcurrentTasks.php index 627763c..610b95f 100644 --- a/app/Services/ConcurrentTasks.php +++ b/app/Services/ConcurrentTasks.php @@ -40,14 +40,21 @@ public function run() protected function getShiftsWithTasks() { - return Shift::whereNull('soldier_id') - ->get() - ->filter(function (Shift $shift) { - $range = new Range($shift->start_date, $shift->end_date); + $startOfMonth = max($this->date->copy()->startOfMonth(), Carbon::tomorrow()); + $endOfMonth = $this->date->copy()->endOfMonth(); - return $range->isSameMonth(new Range(max($this->date->copy()->startOfMonth(), Carbon::tomorrow()), $this->date->copy()->endOfMonth())) - && ($shift->task()->withTrashed()->first()->kind === TaskKind::INPARALLEL->value); + return Shift::whereNull('soldier_id') + ->whereHas('task', function ($query) { + $query->withTrashed() + ->where('kind', TaskKind::INPARALLEL->value); }) + ->where(function ($query) use ($startOfMonth, $endOfMonth) { + $query->where(function ($subQuery) use ($startOfMonth, $endOfMonth) { + $subQuery->where('start_date', '<', $endOfMonth) + ->where('end_date', '>', $startOfMonth); + }); + }) + ->get() ->map(fn (Shift $shift): ShiftService => Helpers::buildShift($shift)); } @@ -76,9 +83,8 @@ protected function getSoldiersShifts($soldierId, $inParallel) protected function initShiftsData(): void { $groupedShifts = collect($this->shifts)->groupBy('taskType'); - $groupedShifts->each(function ($shifts, $taskType) { - $this->addShiftsDataByTask($taskType, collect($shifts)); - }); + $groupedShifts->each(fn ($shifts, $taskType) => $this->addShiftsDataByTask($taskType, collect($shifts)) + ); } protected function addShiftsDataByTask(string $taskType, $shifts): void @@ -122,9 +128,8 @@ protected function isAvailableByShiftsAndSpaces($soldierShifts, ShiftService $sh protected function assignShifts() { - collect($this->shiftsData)->map(function (ShiftData $shiftData) { - $this->assignShift($shiftData); - }); + collect($this->shiftsData)->map(fn (ShiftData $shiftData) => $this->assignShift($shiftData) + ); } protected function assignShift(ShiftData $shiftData) diff --git a/app/Services/Helpers.php b/app/Services/Helpers.php index 1e6d47b..b0dff2a 100644 --- a/app/Services/Helpers.php +++ b/app/Services/Helpers.php @@ -2,6 +2,7 @@ namespace App\Services; +use App\Enums\ConstraintType; use App\Enums\Priority; use App\Enums\TaskKind; use App\Models\Constraint; @@ -66,7 +67,7 @@ public static function buildConstraints($constraints, $newRange) fn (Constraint $constraint): ConstraintService => new ConstraintService( $constraint->start_date, $constraint->end_date, - $constraint->constraint_type->getPriority() == 1 ? Priority::HIGH : Priority::LOW + ConstraintType::getPriority()[$constraint->constraint_type->value] == 1 ? Priority::HIGH : Priority::LOW ) ); } @@ -80,9 +81,7 @@ public static function capacityHold($shifts): array $alerts = 0; $inParallel = 0; collect($shifts) - ->filter(function (ShiftService $shift) { - return $shift->id != 0; - }) + ->filter(fn (ShiftService $shift) => $shift->id != 0) ->each(function (ShiftService $shift) use (&$count, &$points, &$nights, &$weekends, &$alerts, &$inParallel) { $count++; $points += $shift->points; @@ -120,15 +119,20 @@ public static function addShiftsSpaces($shifts) public static function getSoldiersShifts($soldierId, $newRange, $inParallel) { - return Shift::where('soldier_id', $soldierId) + Shift::with('task') + ->where('soldier_id', $soldierId) + ->whereHas('task', function ($query) use ($inParallel) { + $query->withTrashed() + ->when($inParallel, fn ($query) => $query->where('kind', TaskKind::INPARALLEL->value)) + ->when(! $inParallel, fn ($query) => $query->where('kind', '!=', TaskKind::INPARALLEL->value)); + }) + ->where(function ($query) use ($newRange) { + $query->where(function ($subQuery) use ($newRange) { + $subQuery->where('start_date', '<', $newRange->end) + ->where('end_date', '>', $newRange->start); + }); + }) ->get() - ->filter( - function (Shift $shift) use ($newRange, $inParallel): bool { - $range = new Range($shift->start_date, $shift->end_date); - - return $range->isSameMonth($newRange) && ($shift->task()->withTrashed()->first()->kind === TaskKind::INPARALLEL->value) === $inParallel; - } - ) ->map(fn (Shift $shift): ShiftService => self::buildShift($shift)); } diff --git a/app/Services/ManualAssignment.php b/app/Services/ManualAssignment.php index 7fdf9f8..07e3327 100644 --- a/app/Services/ManualAssignment.php +++ b/app/Services/ManualAssignment.php @@ -35,9 +35,7 @@ public function getSoldiers($departmentName = null) protected function initSoldiersData($departmentName) { - $this->soldiers = Cache::remember('users', 30 * 60, function () { - return User::all(); - }); + $this->soldiers = Cache::remember('users', 30 * 60, fn () => User::all()); match ($this->soldierType) { 'reserves' => $this->filterReserves(), 'my_soldiers' => $this->filterMySoldiers(), diff --git a/app/Services/RecurringEvents.php b/app/Services/RecurringEvents.php index 7656856..2bab9ab 100644 --- a/app/Services/RecurringEvents.php +++ b/app/Services/RecurringEvents.php @@ -20,17 +20,11 @@ public function __construct($month = null) $this->month = $month ? Carbon::parse($month) : Carbon::now()->addMonth(); } - public function setMonth($month) - { - $this->month = Carbon::parse($month); - } - public function recurringTask(): void { - $tasks = Task::get(); - $tasks->filter(function ($task) { - return $task->recurring['type'] !== 'Daily range' && $task->recurring['type'] !== 'One time'; - })->map(fn ($task) => $this->switchTasks($task)); + Task::whereNotIn('recurring->type', ['Daily range', 'One time']) + ->get() + ->each(fn ($task) => $this->switchTasks($task)); } public function oneTimeTask(Task $task) @@ -86,9 +80,7 @@ protected function getDatesOfMonth() { $period = $this->createPeriod(); - return collect($period)->map(function ($date) { - return $this->addTimeToDate($date); - })->all(); + return collect($period)->map(fn ($date) => $this->addTimeToDate($date))->all(); } protected function addTimeToDate($date) @@ -117,9 +109,7 @@ protected function getDatesOfDaysInMonth($daysArray) protected function convertNumbersToDatesInMonth($dayNumbers) { - return collect($dayNumbers)->map(function ($day) { - return $this->addTimeToDate(Carbon::create($this->month->year, $this->month->month, $day)); - })->all(); + return collect($dayNumbers)->map(fn ($day) => $this->addTimeToDate(Carbon::create($this->month->year, $this->month->month, $day)))->all(); } protected function createPeriod() diff --git a/app/Services/Schedule.php b/app/Services/Schedule.php index 7766413..b1aa5bb 100644 --- a/app/Services/Schedule.php +++ b/app/Services/Schedule.php @@ -80,21 +80,13 @@ protected function getTaskWeight($shifts, $soldiers): array ->sum(fn (Shift $shift) => $shift->points); $requiredShifts = count($shifts); - $availablePoints = collect($soldiers)->sum(function (Soldier $soldier) { - return $soldier->pointsMaxData->remaining(); - }); + $availablePoints = collect($soldiers)->sum(fn (Soldier $soldier) => $soldier->pointsMaxData->remaining()); - $availableNights = collect($soldiers)->sum(function (Soldier $soldier) { - return $soldier->nightsMaxData->remaining(); - }); + $availableNights = collect($soldiers)->sum(fn (Soldier $soldier) => $soldier->nightsMaxData->remaining()); - $availableWeekends = collect($soldiers)->sum(function (Soldier $soldier) { - return $soldier->weekendsMaxData->remaining(); - }); + $availableWeekends = collect($soldiers)->sum(fn (Soldier $soldier) => $soldier->weekendsMaxData->remaining()); - $availableShifts = collect($soldiers)->sum(function (Soldier $soldier) { - return $soldier->shiftsMaxData->remaining(); - }); + $availableShifts = collect($soldiers)->sum(fn (Soldier $soldier) => $soldier->shiftsMaxData->remaining()); $weight = collect([ 'POINTS_RATIO' => $this->getRatio($requiredPoints, $availablePoints), @@ -260,9 +252,7 @@ protected function getTotalWeight($weightData): float protected function getSortedPotentialSoldiers($soldiers) { - $sortedSoldiers = $soldiers->sortBy(function ($item) { - return $item[1]; - }); + $sortedSoldiers = $soldiers->sortBy(fn ($item) => $item[1]); return $sortedSoldiers->map(fn ($soldier) => $soldier[0]); } diff --git a/app/Services/ShiftAssignmentNotification.php b/app/Services/ShiftAssignmentNotification.php index 27ef331..7d2ec2f 100644 --- a/app/Services/ShiftAssignmentNotification.php +++ b/app/Services/ShiftAssignmentNotification.php @@ -22,15 +22,14 @@ public function sendNotification() $users = User::whereIn('userable_id', $users)->get(); - $users->map(function ($user) { - Notification::make() - ->title(__('View assigned shifts')) - ->warning() - ->body(__('Go to view the schedule of shifts assigned to you for this month.')) - ->actions([Action::make(__('View your shift schedule')) - ->button() - ->url(route('filament.app.resources.my-shifts.index')), ]) - ->sendToDatabase($user, true); - }); + $users->map(fn ($user) => Notification::make() + ->title(__('View assigned shifts')) + ->warning() + ->body(__('Go to view the schedule of shifts assigned to you for this month.')) + ->actions([Action::make(__('View your shift schedule')) + ->button() + ->url(route('filament.app.resources.my-shifts.index')), ]) + ->sendToDatabase($user, true) + ); } } diff --git a/app/Services/Soldier.php b/app/Services/Soldier.php index e26cde6..cb3ee02 100644 --- a/app/Services/Soldier.php +++ b/app/Services/Soldier.php @@ -111,9 +111,7 @@ public function isAvailableByConstraints(Range $range): Availability } if ( - $conflicts->contains(function ($conflict) { - return $conflict->priority == Priority::HIGH; - }) + $conflicts->contains(fn ($conflict) => $conflict->priority == Priority::HIGH) ) { return Availability::NO; } diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index f9dd134..4a84753 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -2,16 +2,6 @@ namespace Database\Seeders; -use App\Enums\ConstraintType; -use App\Enums\DaysInWeek; -use App\Enums\RecurringType; -use App\Enums\TaskKind; -use App\Models\Constraint; -use App\Models\Soldier; -use App\Models\Task; -use App\Models\User; -use Carbon\Carbon; -use Carbon\CarbonPeriod; use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder @@ -21,794 +11,5 @@ public function run(): void $this->call([ PermissionSeeder::class, ]); - - // Soldiers - - User::factory()->create([ - 'first_name' => 'name', - 'last_name' => 'family', - 'password' => '1234567', - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => [], - 'capacity' => 10, - 'max_weekends' => 10, - 'max_shifts' => 10, - 'max_nights' => 10, - 'course' => fake()->numberBetween(0, 5), - 'is_reservist' => false, - 'constraints_limit' => ConstraintType::getLimit(), - ])->id, - ])->assignRole(['soldier', 'manager']); - - User::factory()->create([ - 'first_name' => 'meshabetz mishmarot', - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['hatasa', 'tazpit', 'shmira'], - 'capacity' => 6, - 'max_weekends' => 6, - 'max_shifts' => 7, - 'max_nights' => 6, - 'is_reservist' => false, - 'constraints_limit' => ConstraintType::getLimit(), - ])->id, - ])->assignRole(['soldier', 'shifts-assignment']); - - for ($i = 0; $i < 15; $i++) { - $user = User::factory()->create([ - 'first_name' => 'mefaked', - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['pikud'], - 'capacity' => 5.5, - 'max_weekends' => 5.5, - 'max_shifts' => 10, - 'max_nights' => 5, - 'course' => fake()->numberBetween(0, 5), - 'is_reservist' => false, - 'constraints_limit' => ConstraintType::getLimit(), - ])->id, - ])->assignRole('soldier'); - $this->createConstraints($user->id); - } - - for ($i = 0; $i < 40; $i++) { - $user = User::factory()->create([ - 'first_name' => 'chayal pashut', - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['hatasa', 'tazpit', 'shmira'], - 'capacity' => 6, - 'max_weekends' => 6, - 'max_shifts' => 7, - 'max_nights' => 6, - 'course' => fake()->numberBetween(0, 5), - 'is_reservist' => false, - 'constraints_limit' => ConstraintType::getLimit(), - ])->id, - ])->assignRole('soldier'); - $this->createConstraints($user->id); - } - - for ($i = 0; $i < 30; $i++) { - $user = User::factory()->create([ - 'first_name' => 'chayal beinony', - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['hatasa', 'tazpit', 'shmira', 'tichnun', 'pianuach'], - 'capacity' => 5.5, - 'max_weekends' => 5.5, - 'max_shifts' => 6, - 'max_nights' => 5, - 'course' => fake()->numberBetween(0, 5), - 'is_reservist' => false, - 'constraints_limit' => ConstraintType::getLimit(), - ])->id, - ])->assignRole('soldier'); - $this->createConstraints($user->id); - } - - for ($i = 0; $i < 25; $i++) { - $user = User::factory()->create([ - 'first_name' => 'chayal vatik', - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['hatasa', 'bakara', 'tichnun', 'pianuach'], - 'capacity' => 5, - 'max_weekends' => 5, - 'max_shifts' => 5, - 'max_nights' => 5, - 'course' => fake()->numberBetween(0, 5), - 'is_reservist' => false, - 'constraints_limit' => ConstraintType::getLimit(), - ])->id, - ])->assignRole('soldier'); - $this->createConstraints($user->id); - } - - for ($i = 0; $i < 10; $i++) { - $user = User::factory()->create([ - 'first_name' => 'menahalan', - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['minhal', 'bdikat ziud'], - 'capacity' => 0, - 'max_weekends' => 0, - 'max_shifts' => 4, - 'max_nights' => 0, - 'course' => fake()->numberBetween(0, 5), - 'is_reservist' => false, - 'constraints_limit' => ConstraintType::getLimit(), - ])->id, - ])->assignRole('soldier'); - $this->createConstraints($user->id); - } - - for ($i = 0; $i < 8; $i++) { - $user = User::factory()->create([ - 'first_name' => 'navat', - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => ['nivut'], - 'capacity' => 10, - 'max_weekends' => 10, - 'max_shifts' => 12, - 'max_nights' => 10, - 'course' => fake()->numberBetween(0, 5), - 'is_reservist' => false, - 'constraints_limit' => ConstraintType::getLimit(), - ])->id, - ])->assignRole('soldier'); - $this->createConstraints($user->id); - } - - // Tasks - // tichnun - Task::factory()->create([ - 'name' => 'tichnun א-ה בוקר', - 'start_hour' => '10:00:00', - 'duration' => 4, - 'parallel_weight' => 0, - 'type' => 'tichnun', - 'kind' => TaskKind::REGULAR->value, - 'color' => '#b54b4b', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'tichnun א-ה לילה', - 'start_hour' => '02:00:00', - 'duration' => 4, - 'parallel_weight' => 1, - 'type' => 'tichnun', - 'kind' => TaskKind::NIGHT->value, - 'color' => '#b54b4b', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'tichnun 1 סופ"ש', - 'start_hour' => '10:30:00', - 'duration' => 25, - 'parallel_weight' => 2.5, - 'type' => 'tichnun', - 'kind' => TaskKind::WEEKEND->value, - 'color' => '#b54b4b', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'tichnun 2 סופ"ש', - 'start_hour' => '11:10:00', - 'duration' => 25, - 'parallel_weight' => 2.5, - 'type' => 'tichnun', - 'kind' => TaskKind::WEEKEND->value, - 'color' => '#b54b4b', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - // bakara - Task::factory()->create([ - 'name' => 'bakara ארבע פעמים בשבוע בוקר', - 'start_hour' => '10:00:00', - 'duration' => 4, - 'parallel_weight' => 0, - 'type' => 'bakara', - 'kind' => TaskKind::REGULAR->value, - 'color' => '#4bb5ac', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'bakara שלוש פעמים בשבוע לילה', - 'start_hour' => '03:20:00', - 'duration' => 4, - 'parallel_weight' => 1, - 'type' => 'bakara', - 'kind' => TaskKind::NIGHT->value, - 'color' => '#4bb5ac', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'bakara סופ"ש', - 'start_hour' => '10:05:00', - 'duration' => 26, - 'parallel_weight' => 2.5, - 'type' => 'bakara', - 'kind' => TaskKind::WEEKEND->value, - 'color' => '#4bb5ac', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - // pikud - Task::factory()->create([ - 'name' => 'pikud 1 א-ה בוקר', - 'start_hour' => '10:00:00', - 'duration' => 4, - 'parallel_weight' => 0, - 'type' => 'pikud', - 'kind' => TaskKind::REGULAR->value, - 'color' => '#4bb569', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'pikud 2 א-ה בוקר', - 'start_hour' => '10:00:00', - 'duration' => 4, - 'parallel_weight' => 0, - 'type' => 'pikud', - 'kind' => TaskKind::REGULAR->value, - 'color' => '#4bb569', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'pikud 1 סופש', - 'start_hour' => '10:00:00', - 'duration' => 25, - 'parallel_weight' => 2.5, - 'type' => 'pikud', - 'kind' => TaskKind::WEEKEND->value, - 'color' => '#4bb569', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'pikud 2 סופש', - 'start_hour' => '10:00:00', - 'duration' => 25, - 'parallel_weight' => 2.5, - 'type' => 'pikud', - 'kind' => TaskKind::WEEKEND->value, - 'color' => '#4bb569', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'pikud לילה א-ה', - 'start_hour' => '03:00:00', - 'duration' => 4, - 'parallel_weight' => 1, - 'type' => 'pikud', - 'kind' => TaskKind::NIGHT->value, - 'color' => '#4bb569', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - // minhal - Task::factory()->create([ - 'name' => 'minhal שלוש פעמים בשבוע בוקר', - 'start_hour' => '13:00:00', - 'duration' => 2, - 'parallel_weight' => 0, - 'type' => 'minhal', - 'kind' => TaskKind::REGULAR->value, - 'color' => '#c5d649', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::TUESDAY, DaysInWeek::THURSDAY], - ]), - ]); - // hatasa - Task::factory()->create([ - 'name' => 'hatasa א-ה בוקר', - 'start_hour' => '09:00:00', - 'duration' => 6, - 'parallel_weight' => 0, - 'type' => 'hatasa', - 'kind' => TaskKind::REGULAR->value, - 'color' => '#d649b5', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'hatasa א-ה לילה', - 'start_hour' => '02:00:00', - 'duration' => 6, - 'parallel_weight' => 1, - 'type' => 'hatasa', - 'kind' => TaskKind::NIGHT->value, - 'color' => '#d649b5', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'hatasa 1 סופש', - 'start_hour' => '06:00:00', - 'duration' => 26, - 'parallel_weight' => 2.5, - 'type' => 'hatasa', - 'kind' => TaskKind::WEEKEND->value, - 'color' => '#d649b5', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'hatasa 2 סופש', - 'start_hour' => '06:00:00', - 'duration' => 26, - 'parallel_weight' => 2.5, - 'type' => 'hatasa', - 'kind' => TaskKind::WEEKEND->value, - 'color' => '#d649b5', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - // shmira - Task::factory()->create([ - 'name' => 'shmira א-ה בוקר', - 'start_hour' => '07:00:00', - 'duration' => 12, - 'parallel_weight' => 0, - 'type' => 'shmira', - 'kind' => TaskKind::REGULAR->value, - 'color' => '#ee8559', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'shmira א-ה לילה', - 'start_hour' => '01:00:00', - 'duration' => 7, - 'parallel_weight' => 1, - 'type' => 'shmira', - 'kind' => TaskKind::NIGHT->value, - 'color' => '#ee8559', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'shmira 1 סופש', - 'start_hour' => '06:00:00', - 'duration' => 26, - 'parallel_weight' => 2.5, - 'type' => 'shmira', - 'kind' => TaskKind::WEEKEND->value, - 'color' => '#ee8559', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'shmira סופש 2', - 'start_hour' => '06:00:00', - 'duration' => 26, - 'parallel_weight' => 2.5, - 'type' => 'shmira', - 'kind' => TaskKind::WEEKEND->value, - 'color' => '#ee8559', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - // pianuach - Task::factory()->create([ - 'name' => 'pianuach א-ה בוקר', - 'start_hour' => '07:00:00', - 'duration' => 7, - 'parallel_weight' => 0, - 'type' => 'pianuach', - 'kind' => TaskKind::REGULAR->value, - 'color' => '#3574fb', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'pianuach א-ה לילה', - 'start_hour' => '01:00:00', - 'duration' => 5, - 'parallel_weight' => 1, - 'type' => 'pianuach', - 'kind' => TaskKind::NIGHT->value, - 'color' => '#3574fb', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'pianuach 1 סופש', - 'start_hour' => '07:00:00', - 'duration' => 27, - 'parallel_weight' => 2.5, - 'type' => 'pianuach', - 'kind' => TaskKind::WEEKEND->value, - 'color' => '#3574fb', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'pianuach 2 סופש', - 'start_hour' => '07:00:00', - 'duration' => 27, - 'parallel_weight' => 2.5, - 'type' => 'pianuach', - 'kind' => TaskKind::WEEKEND->value, - 'color' => '#3574fb', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - // nivut - Task::factory()->create([ - 'name' => 'nivut א-ה בוקר', - 'start_hour' => '11:00:00', - 'duration' => 2, - 'parallel_weight' => 0, - 'type' => 'nivut', - 'kind' => TaskKind::REGULAR->value, - 'color' => '#ed8d8d8b', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'nivut א-ה לילה', - 'start_hour' => '01:00:00', - 'duration' => 2.5, - 'parallel_weight' => 1, - 'type' => 'nivut', - 'kind' => TaskKind::NIGHT->value, - 'color' => '#ed8d8d8b', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'nivut 1 סופש', - 'start_hour' => '11:00:00', - 'duration' => 28, - 'parallel_weight' => 2.5, - 'type' => 'nivut', - 'kind' => TaskKind::WEEKEND->value, - 'color' => '#ed8d8d8b', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'nivut 2 סופש', - 'start_hour' => '11:00:00', - 'duration' => 28, - 'parallel_weight' => 2.5, - 'type' => 'nivut', - 'kind' => TaskKind::WEEKEND->value, - 'color' => '#ed8d8d8b', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - // tazpit - Task::factory()->create([ - 'name' => 'tazpit א-ה בוקר 1', - 'start_hour' => '08:00:00', - 'duration' => 10, - 'parallel_weight' => 0, - 'type' => 'tazpit', - 'kind' => TaskKind::REGULAR->value, - 'color' => '#77ff23', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'tazpit א-ה בוקר 2', - 'start_hour' => '08:00:00', - 'duration' => 10, - 'parallel_weight' => 0, - 'type' => 'tazpit', - 'kind' => TaskKind::REGULAR->value, - 'color' => '#77ff23', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'tazpit א-ה לילה', - 'start_hour' => '01:30:00', - 'duration' => 6, - 'parallel_weight' => 1, - 'type' => 'tazpit', - 'kind' => TaskKind::NIGHT->value, - 'color' => '#77ff23', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY, DaysInWeek::MONDAY, DaysInWeek::TUESDAY, DaysInWeek::WEDNESDAY, DaysInWeek::THURSDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'tazpit 1 סופש', - 'start_hour' => '11:45:00', - 'duration' => 25, - 'parallel_weight' => 2.5, - 'type' => 'tazpit', - 'kind' => TaskKind::WEEKEND->value, - 'color' => '#77ff23', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - Task::factory()->create([ - 'name' => 'tazpit 2 סופש', - 'start_hour' => '11:00:00', - 'duration' => 25, - 'parallel_weight' => 2.5, - 'type' => 'tazpit', - 'kind' => TaskKind::WEEKEND->value, - 'color' => '#77ff23', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::FRIDAY], - ]), - ]); - // bdikat ziud - Task::factory()->create([ - 'name' => 'bdikat ziud פעם בשבוע בוקר', - 'start_hour' => '11:15:00', - 'duration' => 3.5, - 'parallel_weight' => 0, - 'type' => 'bdikat ziud', - 'kind' => TaskKind::REGULAR->value, - 'color' => '#a7b2c3', - 'recurring' => collect([ - 'type' => RecurringType::WEEKLY, - 'days_in_week' => [DaysInWeek::SUNDAY], - ]), - ]); - } - - protected function createConstraints(int $userId) - { - for ($i = 0; $i < count(ConstraintType::cases()); $i++) { - $times = ConstraintType::getLimit()[ConstraintType::cases()[$i]->value] > 0 - ? random_int(0, ConstraintType::getLimit()[ConstraintType::cases()[$i]->value]) : - random_int(0, random_int(0, 5)); - for ($j = 0; $j < $times; $j++) { - $startDate = call_user_func([$this, ConstraintType::cases()[$i]->name]); - Constraint::factory()->create([ - 'soldier_id' => User::find($userId)->userable_id, - 'constraint_type' => ConstraintType::cases()[$i], - 'start_date' => $startDate, - 'end_date' => $startDate->copy()->addHours(random_int(1, 5)), - ]); - } - } - } - - protected function getDatesOfMonth($month = null) - { - $month ??= now()->addMonth(); - - return CarbonPeriod::between($month->startOfMonth(), $month->copy()->endOfMonth()); - } - - protected function getThursday() - { - $period = $this->getDatesOfMonth(); - - return collect($period) - ->filter( - fn ($date) => Carbon::parse($date)->isThursday() - )->all(); - } - - protected function getSunday() - { - $period = $this->getDatesOfMonth(); - - return collect($period) - ->filter( - fn ($date) => Carbon::parse($date)->isSunday() - )->all(); - } - - protected function getWeekends() - { - $period = $this->getDatesOfMonth(); - - return collect($period) - ->filter( - fn ($date) => Carbon::parse($date)->isFriday() || Carbon::parse($date)->isSaturday() - ) - ->all(); - } - - protected function getTime() - { - return Carbon::now()->subSeconds(rand(0, 30 * 24 * 60 * 60)); - } - - protected function getNightHour() - { - $time = $this->getTime(); - if ($time->hour < 20 && $time->hour >= 8) { - return $time->addHours(20 - $time->hour); - } - - return $time; - } - - protected function getMorningHour() - { - $time = $this->getTime(); - if ($time->hour < 8 || $time->hour > 19) { - return $time->addHours(12); - } - - return $time; - } - - protected function NOT_WEEKEND() - { - $time = $this->getTime(); - - return Carbon::parse(collect($this->getWeekends())->random()) - ->setTime( - $time->hour, - $time->minute, - $time->second - ); - } - - protected function LOW_PRIORITY_NOT_WEEKEND() - { - $time = $this->getTime(); - - return Carbon::parse(collect($this->getWeekends())->random()) - ->setTime( - $time->hour, - $time->minute, - $time->second - ); - } - - protected function NOT_TASK() - { - $time = $this->getTime(); - - return Carbon::parse(collect($this->getDatesOfMonth())->random()) - ->setTime( - $time->hour, - $time->minute, - $time->second - ); - } - - protected function LOW_PRIORITY_NOT_TASK() - { - $time = $this->getTime(); - - return Carbon::parse(collect($this->getDatesOfMonth())->random()) - ->setTime( - $time->hour, - $time->minute, - $time->second - ); - } - - protected function NOT_EVENING() - { - $date = collect($this->getDatesOfMonth())->random(); - $nightTime = $this->getNightHour(); - - return $date->copy()->setTime($nightTime->hour, $nightTime->minute, $nightTime->second); - } - - protected function NOT_THURSDAY_EVENING() - { - $date = collect($this->getThursday())->random(); - $nightTime = $this->getNightHour(); - - return $date->copy()->setTime($nightTime->hour, $nightTime->minute, $nightTime->second); - } - - protected function VACATION() - { - $time = $this->getTime(); - - return Carbon::parse(collect($this->getDatesOfMonth())->random()) - ->setTime( - $time->hour, - $time->minute, - $time->second - ); - } - - protected function MEDICAL() - { - $time = $this->getTime(); - - return Carbon::parse(collect($this->getDatesOfMonth())->random()) - ->setTime( - $time->hour, - $time->minute, - $time->second - ); - } - - protected function SCHOOL() - { - $time = $this->getTime(); - - return Carbon::parse(collect($this->getDatesOfMonth())->random()) - ->setTime( - $time->hour, - $time->minute, - $time->second - ); - } - - protected function NOT_SUNDAY_MORNING() - { - $date = collect($this->getSunday())->random(); - $morningTime = $this->getMorningHour(); - - return $date->copy()->setTime($morningTime->hour, $morningTime->minute, $morningTime->second); } } diff --git a/database/seeders/PermissionSeeder.php b/database/seeders/PermissionSeeder.php index 4712dec..2d0f431 100644 --- a/database/seeders/PermissionSeeder.php +++ b/database/seeders/PermissionSeeder.php @@ -18,10 +18,9 @@ public function run(): void 'department-commander', 'shifts-assignment', 'manager', - ])->map(function (?string $role) { - Role::firstOrCreate( - ['name' => $role], - ); - }); + ])->map(fn (?string $role) => Role::firstOrCreate( + ['name' => $role], + ) + ); } } diff --git a/lang/he.json b/lang/he.json index 5895513..582f269 100644 --- a/lang/he.json +++ b/lang/he.json @@ -141,7 +141,7 @@ "lowConstraintsRejected":"אילוצים בעדיפות נמוכה", "Male": "זכר", "May":"מאי", - "Matching soldiers":"החיילים המתאימים", + "Matching":"המתאימים", "Manager": "מנהל", "Max nights": "מקסימום לילות", "Max shifts": "מקסימום משמרות", diff --git a/tests/Feature/CalendarWidgetTest.php b/tests/Feature/CalendarWidgetTest.php index fd3e13a..e982f6d 100644 --- a/tests/Feature/CalendarWidgetTest.php +++ b/tests/Feature/CalendarWidgetTest.php @@ -175,6 +175,7 @@ livewire(CalendarWidget::class, [ 'model' => Shift::class, 'type' => 'my_soldiers', + 'fetchInfo' => ['start' => Carbon::yesterday(), 'end' => Carbon::now()->addDays(12), 'timezone' => 'Asia\/Jerusalem'], ]) ->mountAction('Filters') ->callMountedAction(['Filter' => true]) @@ -198,6 +199,7 @@ 'task_color', ]), 'type' => 'my_soldiers', + 'fetchInfo' => ['start' => Carbon::yesterday(), 'end' => Carbon::now()->addDays(5), 'timezone' => 'Asia\/Jerusalem'], ]) ->mountAction('Filters') ->setActionData(['soldier_id' => [$user->userable_id], 'type' => [$task2->type]]) @@ -224,6 +226,7 @@ 'task_color', ]), 'type' => 'my_soldiers', + 'fetchInfo' => ['start' => Carbon::yesterday(), 'end' => Carbon::now()->addDays(5), 'timezone' => 'Asia\/Jerusalem'], ]) ->mountAction('Filters') ->callMountedAction(['Unassigned shifts' => true]) diff --git a/tests/Feature/HierarchyTest.php b/tests/Feature/HierarchyTest.php index 799c37f..31f2a32 100644 --- a/tests/Feature/HierarchyTest.php +++ b/tests/Feature/HierarchyTest.php @@ -9,23 +9,14 @@ use Database\Seeders\PermissionSeeder; it('allows department commander to view his soldiers', function () { - $department_commander_user = User::factory()->create([ - 'userable_id' => $departmentCommanderSoldier = Soldier::factory()->create()->id, - ]); - $soldiers = Soldier::factory()->count(10)->create([ - 'team_id' => Team::factory()->create([ - 'department_id' => Department::factory()->create([ - 'commander_id' => $departmentCommanderSoldier, - ])->id, - ])->id, - ])->each(function ($soldier) { - User::factory()->create(['userable_id' => $soldier->id]); - }); - + $commander = User::factory()->create(['userable_id' => Soldier::factory()->create()->id]); + $department = Department::factory()->create(['commander_id' => $commander->id]); + $team = Team::factory()->create(['department_id' => $department->id]); + $soldiers = Soldier::factory()->count(5)->create(['team_id' => $team->id]); $newSoldiers = Soldier::factory()->count(10)->create([]); $this ->seed(PermissionSeeder::class) - ->asUser('department-commander', $department_commander_user) + ->asUser('department-commander', $commander) ->livewire(ListSoldiers::class) ->assertCanSeeTableRecords($soldiers) ->assertCanNotSeeTableRecords($newSoldiers); From 6852988ed65fe0f81c728504b53179460a8d5a64 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Mon, 9 Jun 2025 12:12:28 +0300 Subject: [PATCH 152/259] push --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Services/ChangeAssignment.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 7ab5c9c..7565336 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_7 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_8 flavor: | latest=false tags: | diff --git a/app/Services/ChangeAssignment.php b/app/Services/ChangeAssignment.php index d336c49..c3db0f1 100644 --- a/app/Services/ChangeAssignment.php +++ b/app/Services/ChangeAssignment.php @@ -55,7 +55,7 @@ public function getMatchingSoldiers() public function getMatchingShifts() { - Shift::with('task') + return Shift::with('task') ->whereNotNull('soldier_id') ->where('soldier_id', '!=', $this->soldier->id) ->get() From 8142495d45187672dfac5b92ddd948ef37199d07 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Mon, 9 Jun 2025 12:46:57 +0300 Subject: [PATCH 153/259] push --- .github/workflows/php-build-and-deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 7565336..87af80e 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_8 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_9 flavor: | latest=false tags: | From f077d8756509ef4f59135208b1a3d34c2357ddc6 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Mon, 9 Jun 2025 13:08:57 +0300 Subject: [PATCH 154/259] push --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 1 + app/Models/Shift.php | 36 ++++++++++++---------- app/Services/Helpers.php | 2 +- 4 files changed, 23 insertions(+), 18 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 87af80e..5b71fba 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_9 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_10 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 2f1bbd0..46f6f9d 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -105,6 +105,7 @@ public function getEventsByRole() { $current_user_id = auth()->user()->userable_id; $role = current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])); + $query = $this->model::with(['task', 'soldier']); // $query = $this->model::query(); $query = match ($role) { diff --git a/app/Models/Shift.php b/app/Models/Shift.php index 322ebd2..cd1ce4b 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -48,11 +48,12 @@ public function task(): BelongsTo { return $this->belongsTo(Task::class); } - + public function soldier() { return $this->belongsTo(Soldier::class); } + private function getTaskParallelWeight() { return $this->task?->parallel_weight; @@ -150,9 +151,9 @@ protected static function soldierIdPlaceholder($soldierType, $shift) $manual_assignment = new ManualAssignment($shift, $soldierType); return - ! $manual_assignment->getSoldiers() ? - __('No suitable soldiers') : - __('Select a soldier'); + ! $manual_assignment->getSoldiers() ? + __('No suitable soldiers') : + __('Select a soldier'); } public static function afterSave($shift, $record) @@ -267,7 +268,7 @@ function (Shift $shift) use ($record) { session()->put('selected_shift', false); if ($arguments['exchange'] ?? false) { collect($arguments['role'])->contains('shifts-assignment') - || collect($arguments['role'])->contains('manager') ? + || collect($arguments['role'])->contains('manager') ? self::shiftsAssignmentExchange($record, Shift::find($data['selected_shift'])) : self::commanderExchange($record, Shift::find($data['selected_shift'])); $livewire->dispatch('filament-fullcalendar--refresh'); @@ -280,13 +281,14 @@ function (Shift $shift) use ($record) { $livewire->dispatch('filament-fullcalendar--refresh'); } }); - // ->hidden(function ($record) { - // if ($record->soldier_id) { - // $changeAssignment = new ChangeAssignment($record); - - // return $changeAssignment->getMatchingShifts()->isEmpty(); - // } - // }); + // ->hidden(function ($record) { + // if ($record->soldier_id) { + // $changeAssignment = new ChangeAssignment($record); + // // \Log::info('in hidden in getMatchingShifts'); + + // return $changeAssignment->getMatchingShifts()->isEmpty(); + // } + // }) } protected static function description($soldierId, $shift) @@ -309,8 +311,8 @@ protected static function getOption($shift, $record) $shift = Helpers::buildShift($shift); return $soldier->isAvailableByConcurrentsShifts($shift) ? - __('Task').': '.Shift::find($shift->id)->task()->withTrashed()->first()->name.'. '.__('Time').': '.__('From').' '.$shift->range->start.' '.__('To').' '.$shift->range->end : - '📌 '.__('Task').': '.Shift::find($shift->id)->task()->withTrashed()->first()->name.'. '.__('Time').': '.__('From').' '.$shift->range->start.' '.__('To').' '.$shift->range->end; + __('Task').': '.Shift::find($shift->id)->task()->withTrashed()->first()->name.'. '.__('Time').': '.__('From').' '.$shift->range->start.' '.__('To').' '.$shift->range->end : + '📌 '.__('Task').': '.Shift::find($shift->id)->task()->withTrashed()->first()->name.'. '.__('Time').': '.__('From').' '.$shift->range->start.' '.__('To').' '.$shift->range->end; } protected static function shiftsAssignmentExchange($record, $shift) @@ -581,7 +583,7 @@ function ($record) use (&$soldiers) { session()->put('selected_soldier', false); if ($arguments['change'] ?? false) { collect($arguments['role'])->contains('shifts-assignment') - || collect($arguments['role'])->contains('manager') ? + || collect($arguments['role'])->contains('manager') ? self::shiftsAssignmentChange($record, $data['soldier']) : self::commanderChange($record, $data['soldier']); @@ -758,7 +760,9 @@ protected static function soldierChange($record, $soldierId) protected static function getShiftsAssignments() { - return User::whereHas('roles', fn ($query) => $query->where('name', 'shifts-assignment') + return User::whereHas( + 'roles', + fn ($query) => $query->where('name', 'shifts-assignment') )->get(); } diff --git a/app/Services/Helpers.php b/app/Services/Helpers.php index b0dff2a..c73f7e3 100644 --- a/app/Services/Helpers.php +++ b/app/Services/Helpers.php @@ -119,7 +119,7 @@ public static function addShiftsSpaces($shifts) public static function getSoldiersShifts($soldierId, $newRange, $inParallel) { - Shift::with('task') + return Shift::with('task') ->where('soldier_id', $soldierId) ->whereHas('task', function ($query) use ($inParallel) { $query->withTrashed() From 54f2b018835e968d07544aa8f99f177c88f0ac1a Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Mon, 9 Jun 2025 13:23:38 +0300 Subject: [PATCH 155/259] push --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Services/ChangeAssignment.php | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 5b71fba..999a423 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_10 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_11 flavor: | latest=false tags: | diff --git a/app/Services/ChangeAssignment.php b/app/Services/ChangeAssignment.php index c3db0f1..f21a828 100644 --- a/app/Services/ChangeAssignment.php +++ b/app/Services/ChangeAssignment.php @@ -55,6 +55,7 @@ public function getMatchingSoldiers() public function getMatchingShifts() { + set_time_limit(0); return Shift::with('task') ->whereNotNull('soldier_id') ->where('soldier_id', '!=', $this->soldier->id) From 6b55cff2e6c6a6312c67082da58c14486440d0fd Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Tue, 10 Jun 2025 15:00:28 +0300 Subject: [PATCH 156/259] push --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Enums/RotationResult.php | 10 + app/Models/Shift.php | 70 ++-- app/Services/Algorithm.php | 11 +- app/Services/AttachedWeekends.php | 34 ++ app/Services/ChangeAssignment.php | 56 ++- app/Services/ConcurrentTasks.php | 28 +- app/Services/Course.php | 24 ++ app/Services/DailyShiftNotification.php | 36 +- app/Services/Helpers.php | 22 +- app/Services/ManualAssignment.php | 20 +- app/Services/MaxData.php | 26 -- app/Services/NotPointedSchedule.php | 246 +++++++++++ app/Services/PointedSchedule.php | 455 +++++++++++++++++++++ app/Services/PotentialSoldierData.php | 16 - app/Services/Range.php | 8 +- app/Services/Schedule.php | 262 ++---------- app/Services/Shift.php | 20 +- app/Services/ShiftData.php | 8 +- app/Services/Soldier.php | 94 +++-- 20 files changed, 1007 insertions(+), 441 deletions(-) create mode 100644 app/Enums/RotationResult.php create mode 100644 app/Services/AttachedWeekends.php create mode 100644 app/Services/Course.php create mode 100644 app/Services/NotPointedSchedule.php create mode 100644 app/Services/PointedSchedule.php delete mode 100644 app/Services/PotentialSoldierData.php diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 999a423..d1f65b8 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_11 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_fix_1 flavor: | latest=false tags: | diff --git a/app/Enums/RotationResult.php b/app/Enums/RotationResult.php new file mode 100644 index 0000000..38466af --- /dev/null +++ b/app/Enums/RotationResult.php @@ -0,0 +1,10 @@ +form( function ($record) { session()->put('selected_shift', false); + $changeAssignment = new ChangeAssignment($record); - $sections = $changeAssignment->getMatchingShifts() + $data = $changeAssignment->getMatchingShifts(); + $sections = collect($data['shifts']) + ->groupBy(fn ($data) => $data['shift']->soldier_id) ->map( - function ($shifts, $soldierId) use ($record) { + function ($shifts, $soldierId) use ($data) { + return Section::make() ->id($soldierId) - ->description(self::description($soldierId, $record)) + ->description(self::description($soldierId, collect($data['soldiersWithConcurrents'])->contains($soldierId))) ->schema( - $shifts->map( - function (Shift $shift) use ($record) { - return Section::make() - ->id($shift->id) - ->schema([ - Radio::make('selected_shift') - ->label(__('')) - ->options([ - $shift->id => self::getOption($shift, $record), - ]) - ->default(null) - ->afterStateUpdated(fn () => session()->put('selected_shift', true)) - ->live() - ->reactive(), - ]); - } + collect($shifts)->map( + fn ($shift) => Section::make() + ->id($shift['shift']->id) + ->schema([ + Radio::make('selected_shift') + ->label(__('')) + ->options([ + $shift['shift']->id => self::getOption($shift['shift'], $shift['hasConcurrentsShifts']), + ]) + ->default(null) + ->afterStateUpdated(fn () => session()->put('selected_shift', true)) + ->live() + ->reactive(), + ]) + ) ->toArray() ) @@ -291,28 +292,19 @@ function (Shift $shift) use ($record) { // }) } - protected static function description($soldierId, $shift) + protected static function description($soldierId, $hasConcurrent) { - $soldier = Soldier::find($soldierId); - $concurrentsShifts = Helpers::getSoldiersShifts($soldierId, new Range($shift->start_date->copy()->startOfMonth(), $shift->end_date->copy()->endOfMonth()), true); - $soldier = Helpers::buildSoldier($soldier, [], [], [], $concurrentsShifts); - $shift = Helpers::buildShift($shift); - - return $soldier->isAvailableByConcurrentsShifts($shift) ? - __('Exchange with').' '.Soldier::find($soldierId)->user->displayName : - __('Exchange with').' '.Soldier::find($soldierId)->user->displayName.' ('.__('The soldier is assigned a shift during the task').')'; + return $hasConcurrent ? + __('Exchange with').' '.Soldier::find($soldierId)->user->displayName.' ('.__('The soldier is assigned a shift during the task').')' : + __('Exchange with').' '.Soldier::find($soldierId)->user->displayName; } - protected static function getOption($shift, $record) + protected static function getOption($shift, $hasConcurrent) { - $soldier = Soldier::find($record->soldier_id); - $concurrentsShifts = Helpers::getSoldiersShifts($soldier->id, new Range($record->start_date->copy()->startOfMonth(), $record->end_date->copy()->endOfMonth()), true); - $soldier = Helpers::buildSoldier($soldier, [], [], [], $concurrentsShifts); - $shift = Helpers::buildShift($shift); - - return $soldier->isAvailableByConcurrentsShifts($shift) ? - __('Task').': '.Shift::find($shift->id)->task()->withTrashed()->first()->name.'. '.__('Time').': '.__('From').' '.$shift->range->start.' '.__('To').' '.$shift->range->end : - '📌 '.__('Task').': '.Shift::find($shift->id)->task()->withTrashed()->first()->name.'. '.__('Time').': '.__('From').' '.$shift->range->start.' '.__('To').' '.$shift->range->end; + + return $hasConcurrent ? + '📌 '.__('Task').': '.Shift::find($shift->id)->task()->withTrashed()->first()->name.'. '.__('Time').': '.__('From').' '.$shift->start_date.' '.__('To').' '.$shift->end_date : + __('Task').': '.Shift::find($shift->id)->task()->withTrashed()->first()->name.'. '.__('Time').': '.__('From').' '.$shift->start_date.' '.__('To').' '.$shift->end_date; } protected static function shiftsAssignmentExchange($record, $shift) diff --git a/app/Services/Algorithm.php b/app/Services/Algorithm.php index 0a9da95..6792a3d 100644 --- a/app/Services/Algorithm.php +++ b/app/Services/Algorithm.php @@ -29,8 +29,8 @@ protected function getShiftWithTasks() }) ->where(function ($query) use ($startOfMonth, $endOfMonth) { $query->where(function ($subQuery) use ($startOfMonth, $endOfMonth) { - $subQuery->where('start_date', '<', $endOfMonth) - ->where('end_date', '>', $startOfMonth); + $subQuery->where('start_date', '<=', $endOfMonth) + ->where('end_date', '>=', $startOfMonth); }); }) ->get() @@ -41,6 +41,7 @@ protected function getSoldiersDetails() { return Soldier::with('constraints') ->where('is_reservist', false) + ->whereJsonLength('qualifications', '>', 0) ->get() ->map(function (Soldier $soldier) { $constraints = Helpers::buildConstraints($soldier->constraints, new Range($this->date->copy()->startOfMonth(), $this->date->copy()->endOfMonth())); @@ -53,8 +54,8 @@ protected function getSoldiersDetails() return Helpers::buildSoldier($soldier, $constraints, $shifts, $capacityHold); }) - ->shuffle() - ->toArray(); + ->filter(fn ($soldier) => $soldier->hasMaxes()) + ->shuffle(); } protected function getSoldiersShifts($soldierId, $inParallel) @@ -71,4 +72,4 @@ public function run() $concurrentTasks = new ConcurrentTasks($this->date); $concurrentTasks->run(); } -} +} \ No newline at end of file diff --git a/app/Services/AttachedWeekends.php b/app/Services/AttachedWeekends.php new file mode 100644 index 0000000..703fb41 --- /dev/null +++ b/app/Services/AttachedWeekends.php @@ -0,0 +1,34 @@ +fridayShift = $fridayShift; + $this->saturdayShift = $saturdayShift; + $this->fridayShift->isAttached = true; + $this->saturdayShift->isAttached = true; + $this->range = new Range($fridayShift->range->start, $saturdayShift->range->end); + $this->points = $fridayShift->points + $saturdayShift->points; + $this->taskId = $saturdayShift->taskId; + $this->taskType = $saturdayShift->taskType; + $this->isAssigned = false; + $this->isAttached = true; + $this->kind = TaskKind::WEEKEND->value; + } + + public function isAssigned(): bool + { + return $this->isAssigned || + $this->fridayShift->isAssigned || + $this->saturdayShift->isAssigned; + } +} \ No newline at end of file diff --git a/app/Services/ChangeAssignment.php b/app/Services/ChangeAssignment.php index f21a828..9400ba4 100644 --- a/app/Services/ChangeAssignment.php +++ b/app/Services/ChangeAssignment.php @@ -2,7 +2,6 @@ namespace App\Services; -use App\Enums\TaskKind; use App\Models\Shift; use App\Models\Soldier; use App\Services\Constraint as ConstraintService; @@ -55,38 +54,59 @@ public function getMatchingSoldiers() public function getMatchingShifts() { - set_time_limit(0); - return Shift::with('task') + $data = collect([ + 'shifts' => collect([]), + 'soldiersWithConcurrents' => collect([]), + ]); + Shift::with('task') ->whereNotNull('soldier_id') ->where('soldier_id', '!=', $this->soldier->id) + ->where('start_date', '>', now()) + ->whereMonth('start_date', $this->shift->range->start->month) + ->whereYear('start_date', $this->shift->range->start->year) + ->whereHas('soldier', function ($query) { + $query->whereJsonContains('qualifications', $this->shift->taskType); + }) + ->whereHas('task', function ($query) { + $query->whereIn('type', collect($this->soldier->qualifications)); + }) ->get() - ->filter(function (Shift $shift) { - $shift = Helpers::buildShift($shift); + ->filter(function (Shift $shift) use (&$data) { + $newShift = Helpers::buildShift($shift); + if (! $this->soldier->isAvailableByConcurrentsShifts($newShift)) { + $data['shifts']->push(['shift' => $shift, 'hasConcurrentsShifts' => true]); + } return - ! $shift->range->isPass() - && $shift->range->isSameMonth(new Range($this->shift->range->start->copy()->startOfMonth(), $this->shift->range->end->copy()->endOfMonth())) - && $this->soldier->isQualified($shift->taskType) - && $this->soldier->isAvailableBySpaces($shift->getShiftSpaces($this->soldier->shifts)) - && ! $this->isConflictWithConstraints($this->soldier, $shift->range) - && $this->soldier->isAvailableByShifts($shift) - && ($shift->kind === TaskKind::INPARALLEL->value ? $this->soldier->isAvailableByConcurrentsShifts($shift) : true); + $this->soldier->isAvailableBySpaces($newShift->getShiftSpaces($this->soldier->shifts)) + && ! $this->isConflictWithConstraints($this->soldier, $newShift->range) + && $this->soldier->isAvailableByShifts($newShift) + && $this->soldier->isAvailableByConcurrentsShifts($newShift); }) ->groupBy('soldier_id') - ->filter(function ($shifts, $soldier_id) { + ->filter(function ($shifts, $soldier_id) use (&$data) { $soldierDetails = Soldier::find($soldier_id); $constraints = $this->getConstraints($soldierDetails); $soldierShifts = $this->getSoldiersShifts($soldierDetails->id, false); $soldierShifts->push(...Helpers::addShiftsSpaces($soldierShifts)); $concurrentsShifts = $this->getSoldiersShifts($soldierDetails->id, true); $soldier = Helpers::buildSoldier($soldierDetails, $constraints, $soldierShifts, [], $concurrentsShifts); + if (! $soldier->isAvailableByConcurrentsShifts($this->shift)) { + $data['soldiersWithConcurrents']->push($soldier_id); + } - return $soldier->isQualified($this->shift->taskType) - && $soldier->isAvailableBySpaces($this->shift->getShiftSpaces($soldier->shifts)) + return $soldier->isAvailableBySpaces($this->shift->getShiftSpaces($soldier->shifts)) && ! $this->isConflictWithConstraints($soldier, $this->shift->range) - && $soldier->isAvailableByShifts($this->shift) - && ($this->shift->kind === TaskKind::INPARALLEL->value ? $soldier->isAvailableByConcurrentsShifts($this->shift) : true); + && $soldier->isAvailableByShifts($this->shift); + + }) + ->each(function ($shifts, $soldier_id) use (&$data) { + $shifts->each(function (Shift $shift) use (&$data) { + $data['shifts']->push(['shift' => $shift, 'hasConcurrentsShifts' => false]); + }); }); + + return $data; } protected function getConstraints(Soldier $soldier) @@ -111,4 +131,4 @@ public function exchange($shift) Shift::where('id', $shift->id)->update(['soldier_id' => Shift::find($this->shift->id)->soldier_id]); Shift::where('id', $this->shift->id)->update(['soldier_id' => $shift->soldier_id]); } -} +} \ No newline at end of file diff --git a/app/Services/ConcurrentTasks.php b/app/Services/ConcurrentTasks.php index 610b95f..a40ba76 100644 --- a/app/Services/ConcurrentTasks.php +++ b/app/Services/ConcurrentTasks.php @@ -50,8 +50,8 @@ protected function getShiftsWithTasks() }) ->where(function ($query) use ($startOfMonth, $endOfMonth) { $query->where(function ($subQuery) use ($startOfMonth, $endOfMonth) { - $subQuery->where('start_date', '<', $endOfMonth) - ->where('end_date', '>', $startOfMonth); + $subQuery->where('start_date', '<=', $endOfMonth) + ->where('end_date', '>=', $startOfMonth); }); }) ->get() @@ -83,8 +83,7 @@ protected function getSoldiersShifts($soldierId, $inParallel) protected function initShiftsData(): void { $groupedShifts = collect($this->shifts)->groupBy('taskType'); - $groupedShifts->each(fn ($shifts, $taskType) => $this->addShiftsDataByTask($taskType, collect($shifts)) - ); + $groupedShifts->each(fn ($shifts, $taskType) => $this->addShiftsDataByTask($taskType, collect($shifts))); } protected function addShiftsDataByTask(string $taskType, $shifts): void @@ -100,8 +99,8 @@ protected function addShiftData(ShiftService $shift, $soldiers) $potentialSoldiers = $this->getPotentialSoldiers($soldiers, $shift); $shiftData = new ShiftData( $shift, - $potentialSoldiers, - 0 + 0, + $potentialSoldiers ); $this->shiftsData->push($shiftData); } @@ -113,17 +112,10 @@ protected function getPotentialSoldiers($soldiers, ShiftService $shift) return $soldier->isAvailableByConstraints($shift->range) === Availability::YES && $soldier->isAvailableByConcurrentsShifts($shift) && $soldier->inParallelMaxData->remaining() > 0 - && $this->isAvailableByShiftsAndSpaces($soldier->shifts, $shift); + && $soldier->isAvailableByShifts($shift); }); - return $potentialSoldiers; - } - - protected function isAvailableByShiftsAndSpaces($soldierShifts, ShiftService $shift): bool - { - return ! $soldierShifts->contains(function (ShiftService $soldierShift) use ($shift): bool { - return $soldierShift->range->isConflict($shift->range) && ! collect($shift->inParalelTasks)->contains($soldierShift->taskType); - }); + return collect($potentialSoldiers)->shuffle(); } protected function assignShifts() @@ -144,14 +136,14 @@ protected function assignShift(ShiftData $shiftData) protected function tryAssignShift(SoldierService $soldier, ShiftService $shift) { - if ($soldier->isAvailableByConcurrentsShifts($shift)) { + if ($soldier->isAvailableByConcurrentsShifts($shift) && $soldier->inParallelMaxData->remaining() > 0) { $soldier->concurrentsShifts->push($shift); - $this->assignments->push(new Assignment($shift->id, $soldier->id)); $soldier->inParallelMaxData->used++; + $this->assignments->push(new Assignment($shift->id, $soldier->id)); return true; } return false; } -} +} \ No newline at end of file diff --git a/app/Services/Course.php b/app/Services/Course.php new file mode 100644 index 0000000..1d638c1 --- /dev/null +++ b/app/Services/Course.php @@ -0,0 +1,24 @@ +number = $number; + $this->max = $max; + $this->soldiers = collect($soldiers); + } + + public function remaining($max) + { + return collect($this->soldiers)->sum(fn (Soldier $soldier) => $soldier->{$max}->remaining()); + } +} diff --git a/app/Services/DailyShiftNotification.php b/app/Services/DailyShiftNotification.php index 0731023..4df944a 100644 --- a/app/Services/DailyShiftNotification.php +++ b/app/Services/DailyShiftNotification.php @@ -12,23 +12,23 @@ class DailyShiftNotification { public function beforeShift() { - $shifts = Shift::whereNotNull('soldier_id') + Shift::whereNotNull('soldier_id') ->whereDate('start_date', Carbon::today()) - ->get(); - $shifts->map(function ($shift) { - $user = User::where('userable_id', $shift->soldier_id)->get(); - Notification::make() - ->title(__('Your shifts for today').':') - ->warning() - ->body( - __('Assigned to shift today', [ - 'today' => Carbon::parse($shift->start_date)->format('d/m/y'), - 'user' => Soldier::find($shift->soldier_id)->user->displayName, - 'task' => $shift->task()->withTrashed()->first()->name, - 'startShift' => Carbon::parse($shift->start_date)->format('H:i'), - ]) - ) - ->sendToDatabase($user, true); - }); + ->get() + ->map(function (Shift $shift) { + $user = User::where('userable_id', $shift->soldier_id)->get(); + Notification::make() + ->title(__('Your shifts for today').':') + ->warning() + ->body( + __('Assigned to shift today', [ + 'today' => Carbon::parse($shift->start_date)->format('d/m/y'), + 'user' => Soldier::find($shift->soldier_id)->user->displayName, + 'task' => $shift->task()->withTrashed()->first()->name, + 'startShift' => Carbon::parse($shift->start_date)->format('H:i'), + ]) + ) + ->sendToDatabase($user, true); + }); } -} +} \ No newline at end of file diff --git a/app/Services/Helpers.php b/app/Services/Helpers.php index c73f7e3..c933f5f 100644 --- a/app/Services/Helpers.php +++ b/app/Services/Helpers.php @@ -17,6 +17,7 @@ public static function buildShift(Shift $shift): ShiftService { return new ShiftService( $shift->id, + $shift->task_id, $shift->task()->withTrashed()->first()->type, $shift->start_date, $shift->end_date, @@ -26,7 +27,7 @@ public static function buildShift(Shift $shift): ShiftService ); } - protected static function kind(Shift $shift) + public static function kind(Shift $shift) { if ($shift->is_weekend === true) { return TaskKind::WEEKEND->value; @@ -42,6 +43,7 @@ public static function buildSoldier($soldier, $constraints, $shifts, array $capa { return new SoldierService( $soldier->id, + $soldier->course, new MaxData($soldier->capacity, $capacityHold['points'] ?? 0), new MaxData($soldier->max_shifts, $capacityHold['count'] ?? 0), new MaxData($soldier->max_nights, $capacityHold['sumNights'] ?? 0), @@ -67,7 +69,7 @@ public static function buildConstraints($constraints, $newRange) fn (Constraint $constraint): ConstraintService => new ConstraintService( $constraint->start_date, $constraint->end_date, - ConstraintType::getPriority()[$constraint->constraint_type->value] == 1 ? Priority::HIGH : Priority::LOW + ConstraintType::getPriority()[$constraint->constraint_type->value] == 1 ? Priority::HIGH : Priority::LOW, ) ); } @@ -110,14 +112,14 @@ public static function addShiftsSpaces($shifts) collect($shifts)->map(function (ShiftService $shift) use ($shifts, &$allSpaces) { $spaces = ($shift->kind === TaskKind::WEEKEND->value || $shift->kind === TaskKind::NIGHT->value) ? $shift->getShiftSpaces($shifts) : null; if (! empty($spaces)) { - collect($spaces)->map(fn (Range $space) => $allSpaces->push(new ShiftService(0, '', $space->start, $space->end, 0, TaskKind::REGULAR->value, []))); + collect($spaces)->map(fn (Range $space) => $allSpaces->push(new ShiftService(0, 0, '', $space->start, $space->end, 0, TaskKind::REGULAR->value, []))); } }); return $allSpaces; } - public static function getSoldiersShifts($soldierId, $newRange, $inParallel) + public static function getSoldiersShifts($soldierId, $range, $inParallel) { return Shift::with('task') ->where('soldier_id', $soldierId) @@ -126,10 +128,10 @@ public static function getSoldiersShifts($soldierId, $newRange, $inParallel) ->when($inParallel, fn ($query) => $query->where('kind', TaskKind::INPARALLEL->value)) ->when(! $inParallel, fn ($query) => $query->where('kind', '!=', TaskKind::INPARALLEL->value)); }) - ->where(function ($query) use ($newRange) { - $query->where(function ($subQuery) use ($newRange) { - $subQuery->where('start_date', '<', $newRange->end) - ->where('end_date', '>', $newRange->start); + ->where(function ($query) use ($range) { + $query->where(function ($subQuery) use ($range) { + $subQuery->where('start_date', '<', $range->end) + ->where('end_date', '>', $range->start); }); }) ->get() @@ -138,10 +140,10 @@ public static function getSoldiersShifts($soldierId, $newRange, $inParallel) public static function getConstraintBy(int $soldierId, $newRange) { - $constraint = Constraint::where('soldier_id', $soldierId) + $constraints = Constraint::where('soldier_id', $soldierId) ->get(); - return self::buildConstraints($constraint, $newRange); + return self::buildConstraints($constraints, $newRange); } public static function updateShiftTable($assignments) diff --git a/app/Services/ManualAssignment.php b/app/Services/ManualAssignment.php index 07e3327..95fb7e3 100644 --- a/app/Services/ManualAssignment.php +++ b/app/Services/ManualAssignment.php @@ -2,7 +2,6 @@ namespace App\Services; -use App\Enums\Availability; use App\Models\Department; use App\Models\Shift; use App\Models\Soldier; @@ -130,13 +129,12 @@ public function amIAvailable(): bool $capacityHold = Helpers::capacityHold($myShifts); - $soldier = Helpers::buildSoldier($me, $constraints, $myShifts, $capacityHold); + $concurrentsShifts = $this->getSoldiersShifts($me->id, true); - return $soldier->isQualified($this->shift->taskType) - && $soldier->isAvailableByMaxes($this->shift) - && $soldier->isAvailableByConstraints($this->shift->range) != Availability::NO - && $soldier->isAvailableByShifts($this->shift) - && $soldier->isAvailableBySpaces($this->shift->getShiftSpaces($soldier->shifts)); + $soldier = Helpers::buildSoldier($me, $constraints, $myShifts, $capacityHold, $concurrentsShifts); + + return $soldier->isAbleTake($this->shift, true) + && $soldier->isAvailableByConcurrentsShifts($this->shift); } protected function getConstraints(Soldier $soldier) @@ -151,13 +149,7 @@ protected function getSoldiersShifts($soldierId, $inParallel) protected function getAvailableSoldiers() { - $availableSoldiers = $this->soldiers->filter( - fn (SoldierService $soldier) => $soldier->isQualified($this->shift->taskType) - && $soldier->isAvailableByMaxes($this->shift) - && $soldier->isAvailableByConstraints($this->shift->range) != Availability::NO - && $soldier->isAvailableByShifts($this->shift) - && $soldier->isAvailableBySpaces($this->shift->getShiftSpaces($soldier->shifts)) - ); + $availableSoldiers = $this->soldiers->filter(fn (SoldierService $soldier) => $soldier->isAbleTake($this->shift, true)); $soldiersWithConcurrentsShifts = collect([]); $availableSoldiers->map(function (SoldierService $soldier) use ($soldiersWithConcurrentsShifts) { diff --git a/app/Services/MaxData.php b/app/Services/MaxData.php index f3adfee..8f7be43 100644 --- a/app/Services/MaxData.php +++ b/app/Services/MaxData.php @@ -18,30 +18,4 @@ public function remaining(): float { return $this->max - $this->used; } - - protected function relativeLoad(): float - { - if ($this->max == 0) { - return 0; - } - - return $this->used / $this->max; - } - - protected function singleValue(): float - { - if ($this->max == 0) { - return 0; - } - - return 1 / $this->max; - } - - public function calculatedRelativeLoad(): float - { - $relativeLoad = $this->relativeLoad(); - $pointValue = $this->singleValue(); - - return ($relativeLoad * 4 + $pointValue) / 5; - } } diff --git a/app/Services/NotPointedSchedule.php b/app/Services/NotPointedSchedule.php new file mode 100644 index 0000000..446f089 --- /dev/null +++ b/app/Services/NotPointedSchedule.php @@ -0,0 +1,246 @@ +taskKind = $taskKind; + $this->soldiers = collect($soldiers); + $this->shifts = collect($shifts); + $this->allowedGap = $allowedGap; + $this->shiftsData = collect([]); + $this->assignments = collect([]); + $this->shiftDumbbells = collect([ + 'KIND_RELATIVE_LOAD' => 0.5, + 'SHIFT_AVAILABILITY' => 0.5, + ]); + $this->availabilityDumbbells = collect([ + Availability::NO->value => 0, + Availability::BETTER_NOT->value => 0.7, + Availability::YES->value => 1, + ]); + $this->maxName = $this->getMaxName(); + $this->courses = collect([]); + $this->tasksData = collect([]); + } + + protected function getMaxName(): string + { + return match ($this->taskKind) { + 'Night' => 'nightsMaxData', + 'Regular' => 'shiftsMaxData', + 'Alert' => 'alertsMaxData', + }; + } + + public function schedule() + { + $this->buildShiftsDict(); + $this->initCourses(); + $this->assign(); + + return $this->assignments; + } + + protected function buildShiftsDict() + { + $groupedShifts = collect($this->shifts)->groupBy('taskType'); + $groupedShifts->each(function ($shifts, $taskType) { + $this->tasksData[$taskType] = $shifts->count(); + $this->addShiftsDataByTask($taskType, collect($shifts)); + }); + $this->shiftsData = $this->sortShiftsDict(); + } + + protected function addShiftsDataByTask($taskType, $shifts): void + { + $soldiers = $this->soldiers->filter(fn (Soldier $soldier) => $soldier->isQualified($taskType)); + $taskWeight = $this->getTaskWeight($shifts, $soldiers); + $shifts->map(fn ($shift) => $this->addShiftData($shift, $soldiers, $taskWeight)); + } + + protected function getTaskWeight($shifts, $soldiers) + { + $available = collect($soldiers)->sum(fn (Soldier $soldier) => $soldier->{$this->maxName}->remaining()); + + return $this->getRatio($shifts->count(), $available) * $this->shiftDumbbells['KIND_RELATIVE_LOAD']; + } + + protected function getRatio(float $required, float $available): float + { + return $available == 0 ? 0 : (float) $this->maximumOne((float) $required / $available); + } + + protected function maximumOne(float $number): float + { + return $number > 1 ? 1 : $number; + } + + protected function addShiftData(Shift $shift, $soldiers, $taskWeight) + { + $soldiersAvailability = $this->getSoldiersAvailability($soldiers, $shift->range); + $this->shiftsData->push(new ShiftData( + $shift, + $this->getShiftWeight( + $taskWeight, + $soldiers->count(), + $soldiersAvailability + ) + )); + } + + protected function getSoldiersAvailability($soldiers, $range) + { + return collect($soldiers) + ->sum( + function (Soldier $soldier) use ($range) { + $availability = $soldier->isAvailableByConstraints($range); + + return $this->availabilityDumbbells[$availability->value]; + } + ); + } + + protected function getShiftWeight($taskWeight, $soldiersCount, $soldiersAvailability): float + { + return $taskWeight + + $this->getShiftAvailabilityRatio($soldiersCount, $soldiersAvailability) + * $this->shiftDumbbells['SHIFT_AVAILABILITY']; + } + + protected function getShiftAvailabilityRatio($soldiersCount, $soldiersAvailability): float + { + if ($soldiersAvailability == 0) { + return 0; + } + + return (float) ($soldiersCount - $soldiersAvailability) / $soldiersCount; + } + + protected function sortShiftsDict() + { + return $this->shiftsData + ->sortByDesc(fn ($shift) => $shift->weight) + ->map(fn ($shift) => $shift->shift) + ->values() + ->all(); + } + + protected function initCourses() + { + collect($this->soldiers) + ->filter(fn (Soldier $soldier): bool => $soldier->{$this->maxName}->remaining() > 0) + ->groupBy('course') + ->map(fn ($soldiers, $course) => $soldiers + ->groupBy(fn (Soldier $soldier) => $soldier->{$this->maxName}->max) + ->each(function ($courseSoldiers, $capacity) use ($course) { + $this->courses->push($this->buildCourse($course, $capacity, $courseSoldiers)); + })); + + $this->courses = $this->courses->sortByDesc(fn (Course $course) => [$course->max, $course->number]); + } + + protected function buildCourse($number, $capacity, $soldiers) + { + $sortedSoldiers = collect($soldiers) + ->map(fn (Soldier $soldier) => ['soldier' => $soldier, 'weight' => $this->getSoldierWeight($soldier)]) + ->sortBy(fn ($soldierData) => $soldierData['weight']) + ->pluck('soldier') + ->values() + ->all(); + + return new Course($number, $capacity, $sortedSoldiers); + } + + protected function getSoldierWeight(Soldier $soldier) + { + return collect($soldier->qualifications)->sum(fn ($qualification) => $this->tasksData[$qualification] ?? 0); + } + + protected function assign() + { + $this->courses->each(function (Course $course) { + $this->assignShiftsForCourse($course); + }); + } + + protected function assignShiftsForCourse(Course $course) + { + $courseGap = 0; + while ($course->remaining($this->maxName) > 0 && $courseGap < $this->allowedGap && $this->isUnassignedShiftsExist()) { + $rotationResult = $this->rotation($course); + if ($rotationResult == RotationResult::SUCCESS_WITH_GAP) { + $courseGap += 1; + } + } + } + + protected function isUnassignedShiftsExist(): bool + { + return collect($this->shiftsData)->contains(fn (Shift $shift): bool => ! $shift->isAssigned); + } + + protected function rotation(Course $course) + { + $isGapExists = false; + collect($course->soldiers)->each(function (Soldier $soldier) use (&$isGapExists) { + $success = $this->assignRotationShiftToSoldier($soldier); + if (! $success) { + $isGapExists = true; + } + }); + + return $isGapExists ? RotationResult::SUCCESS_WITH_GAP : RotationResult::SUCCESS; + } + + protected function assignRotationShiftToSoldier(Soldier $soldier) + { + if ($this->tryAssign($soldier, false)) { + return true; + } + + return $this->tryAssign($soldier, true); + } + + protected function tryAssign(Soldier $soldier, bool $ignoreLowConsraint) + { + foreach ($this->shiftsData as $shift) { + if (! $shift->isAssigned && $soldier->isAbleTake($shift, $ignoreLowConsraint)) { + $soldier->assign($shift, $shift->getShiftSpaces($soldier->shifts)); + $shift->isAssigned = true; + $this->assignments->push(new Assignment($shift->id, $soldier->id)); + + return true; + } + } + + return false; + } +} diff --git a/app/Services/PointedSchedule.php b/app/Services/PointedSchedule.php new file mode 100644 index 0000000..3d76b29 --- /dev/null +++ b/app/Services/PointedSchedule.php @@ -0,0 +1,455 @@ +soldiers = collect($soldiers); + $this->shifts = collect($shifts); + $this->courses = collect([]); + $this->soldiersDict = collect([]); + $this->shiftsData = collect([]); + $this->rotationAssignments = collect([]); + $this->assignments = collect([]); + $this->shiftDumbbells = collect([ + 'pointsRatio' => 0.4, + 'shiftsRatio' => 0.15, + 'weekendsRatio' => 0.3, + 'nightsRatio' => 0.15, + 'alertsRatio' => 0.15, + 'shiftAvailability' => 0.23, + 'shiftPointRatio' => 0.05, + 'isSingleShift' => 0.3, + 'isFullWeekend' => 0.7, + ]); + $this->minimalRotationSize = 0.5; + $this->maximalRotationSize = 2; + $this->allowedGap = 1; + } + + public function schedule() + { + $this->initSoldiersDict(); + $this->buildShifts(); + $this->initCourses(); + $this->assign(); + + return $this->assignments; + } + + protected function initSoldiersDict() + { + $this->soldiers->each(function (Soldier $soldier) { + $this->soldiersDict[$soldier->id] = 0; + }); + } + + protected function buildShifts() + { + $this->attachWeekends(); + $this->initShiftsData(); + } + + protected function attachWeekends() + { + $fridays = $this->filterShiftsByDay(DaysInWeek::FRIDAY->value); + $saturdays = $this->filterShiftsByDay(DaysInWeek::SATURDAY->value)->keyBy('id'); + + $fridays->each(function (Shift $friday) use (&$saturdays) { + $saturday = $saturdays->first(fn (Shift $saturdayShift): bool => $saturdayShift->taskId == $friday->taskId + && $saturdayShift->range->start->copy()->isSameDay($friday->range->start->copy()->addDay()) + && ! $saturdayShift->range->isConflict($friday->range)); + if ($saturday) { + $this->shifts->push(new AttachedWeekends($friday, $saturday)); + } + }); + } + + protected function filterShiftsByDay(string $day) + { + return $this->shifts->filter(fn (Shift $shift): bool => $shift->kind == TaskKind::WEEKEND->value + && ($shift->range->start->copy())->englishDayOfWeek == $day + && round($shift->points, 2) == 1.00); + } + + protected function initShiftsData(): void + { + $groupedShifts = collect($this->shifts)->groupBy('taskType'); + $groupedShifts->each(function ($shifts, $taskType) { + $this->addShiftsDataByTask($taskType, collect($shifts)); + }); + $this->shiftsData = $this->getSortedShiftsList(); + } + + protected function addShiftsDataByTask(string $taskType, $shifts): void + { + $soldiers = $this->soldiers->filter(fn (Soldier $soldier) => $soldier->isQualified($taskType)); + $taskWeight = $this->getTaskWeight($shifts, $soldiers); + $shifts->each(fn ($shift) => $this->addShiftData($shift, $soldiers, $taskWeight)); + } + + protected function getTaskWeight($shifts, $soldiers): array + { + $types = collect([ + 'nights', + 'shifts', + 'alerts', + 'weekends', + 'points', + ]); + $required = $this->getRequired($shifts); + $availables = $this->getAvailables($soldiers, $types); + + $weight = $types->mapWithKeys(fn ($type) => [$type.'Ratio' => $this->getRatio($required[$type], $availables[$type])]); + $weight->mapWithKeys(fn ($value, $key) => [$key => $value * $this->shiftDumbbells[$key]]); + + return $weight->all(); + } + + protected function getRequired($shifts) + { + return collect([ + 'points' => collect($shifts)->sum(callback: 'points'), + 'weekends' => collect($shifts) + ->filter(fn (Shift $shift) => ($shift->kind == TaskKind::WEEKEND->value)) + ->sum(fn (Shift $shift) => $shift->points), + 'nights' => collect($shifts)->filter(fn (Shift $shift) => ($shift->kind == TaskKind::NIGHT->value))->count(), + 'alerts' => collect($shifts)->filter(fn (Shift $shift) => $shift->kind == TaskKind::ALERT->value)->count(), + 'shifts' => collect($shifts) + ->filter(fn (Shift $shift) => ($shift->kind == TaskKind::NIGHT->value) || ($shift->kind == TaskKind::REGULAR->value)) + ->count(), + ]); + } + + protected function getAvailables($soldiers, $types) + { + return $types->mapWithKeys(fn ($type) => [$type => collect($soldiers)->sum(fn (Soldier $soldier) => $soldier->{$type.'MaxData'}->remaining())]); + } + + protected function addShiftData(Shift $shift, $soldiers, $taskWeight) + { + $relevantsSoldier = $this->getRelevantSoldiers($shift, $soldiers); + $soldiersAvailability = $this->calcSoldiersAvailability($relevantsSoldier, $shift->range); + $this->shiftsData->push(new ShiftData( + $shift, + $this->getShiftWeight( + $taskWeight, + $shift, + $soldiers->count(), + $soldiersAvailability + ) + )); + } + + protected function getRelevantSoldiers(Shift $shift, $soldiers) + { + return $soldiers->filter(function (Soldier $soldier) use ($shift): bool { + if ($shift->points > $soldier->pointsMaxData->remaining()) { + return false; + } + + return match ($shift->kind) { + TaskKind::NIGHT->value => $soldier->nightsMaxData->remaining() > 0 && $soldier->shiftsMaxData->remaining() > 0, + TaskKind::ALERT->value => $soldier->alertsMaxData->remaining() > 0, + TaskKind::WEEKEND->value => $soldier->weekendsMaxData->remaining() >= $shift->points, + TaskKind::REGULAR->value => $soldier->shiftsMaxData->remaining() > 0, + }; + }); + } + + protected function getRatio($required, $available): float + { + return $available == 0 ? 0 : (float) $this->maximumOne((float) $required / $available); + } + + protected function maximumOne(float $number): float + { + return $number > 1 ? 1 : $number; + } + + protected function calcSoldiersAvailability($soldiers, Range $range) + { + $sumAvailability = 0; + $soldiers + ->each(function (Soldier $soldier) use ($range, &$sumAvailability) { + $availability = $soldier->isAvailableByConstraints($range); + match ($availability) { + Availability::NO => null, + Availability::BETTER_NOT => [ + $this->soldiersDict[$soldier->id] = $this->soldiersDict[$soldier->id] + 4, + $sumAvailability += 0.8, + ], + Availability::YES => [ + $this->soldiersDict[$soldier->id] = $this->soldiersDict[$soldier->id] + 5, + $sumAvailability++, + ], + }; + }); + + return $sumAvailability; + } + + protected function getShiftWeight($taskWeight, Shift $shift, $soldiersCount, $soldiersAvailability) + { + $weight = $shift->points > 0 ? $this->maximumOne($taskWeight['pointsRatio'] * $shift->points) : 0; + + match ($shift->kind) { + TaskKind::WEEKEND->value => $weight += $taskWeight['weekendsRatio'], + TaskKind::NIGHT->value => $weight += $taskWeight['nightsRatio'] + $taskWeight['shiftsRatio'], + TaskKind::ALERT->value => $weight += $taskWeight['alertsRatio'], + TaskKind::REGULAR->value => $weight += $taskWeight['shiftsRatio'], + default => null + }; + $weight += $shift->points >= 2 && ! $shift->isAttached ? $this->shiftDumbbells['isFullWeekend'] : 0; + $weight += $shift->isAttached ? 0 : $this->shiftDumbbells['isSingleShift']; + $weight += $this->getShiftAvailabilityRatio($soldiersCount, $soldiersAvailability) + * $this->shiftDumbbells['shiftAvailability']; + + $weight += $this->getShiftPointsRatio($shift->points) * $this->shiftDumbbells['shiftPointRatio']; + + return $weight; + } + + protected function getShiftAvailabilityRatio($soldiersCount, $soldiersAvailability) + { + if ($soldiersAvailability == 0) { + return 0; + } + + return (float) ($soldiersCount - $soldiersAvailability) / $soldiersCount; + } + + protected function getShiftPointsRatio($points) + { + if ($points == 0) { + return 0; + } + + return (float) $points / 3; + } + + protected function getSortedShiftsList() + { + $this->shiftsData = $this->shiftsData->groupBy(fn ($shiftData) => (string) $shiftData->shift->points); + + return $this->shiftsData->map( + fn ($shiftData) => collect($shiftData) + ->sortByDesc(fn ($shift) => $shift->weight) + ->map(fn ($shift) => $shift->shift) + ->values() + ->all() + ); + } + + protected function initCourses() + { + $this->soldiers + ->groupBy('course') + ->map(function ($soldiers, $course) { + return $soldiers + ->groupBy(fn ($soldier) => $soldier->pointsMaxData->max) + ->each(function ($courseSoldiers, $capacity) use ($course) { + $this->courses->push($this->buildCourse($course, $capacity, $courseSoldiers)); + }); + }); + $this->courses = $this->courses->sortByDesc(fn (Course $course) => [$course->max, $course->number]); + + } + + protected function buildCourse($number, $capacity, $soldiers) + { + $sortedSoldiers = collect([]); + collect($soldiers) + ->each( + function (Soldier $soldier) use (&$sortedSoldiers) { + $sortedSoldiers->push(['soldier' => $soldier, 'weight' => $this->soldiersDict[$soldier->id]]); + } + ); + $sortedSoldiers = $sortedSoldiers + ->sortBy(fn ($soldierData) => $soldierData['weight']) + ->map(fn ($soldier) => $soldier['soldier']) + ->values() + ->all(); + + return new Course($number, $capacity, $sortedSoldiers); + } + + protected function assign() + { + $this->courses + ->filter(fn (Course $course) => $course->max > 0) + ->map(function (Course $course) { + if (collect($this->shiftsData)->contains(fn ($shifts): bool => collect($shifts)->count() > 0)) { + $this->assignShiftsForCourse($course); + } + }); + } + + protected function assignShiftsForCourse(Course $course) + { + $rotationSize = $this->maximalRotationSize; + while ($course->remaining('pointsMaxData') > 0 && $rotationSize >= $this->minimalRotationSize) { + $rotationResult = $this->rotation($course->soldiers, $rotationSize); + match ($rotationResult) { + RotationResult::SUCCESS => [ + $this->saveRotationAssigments(), + ], + RotationResult::SUCCESS_WITH_GAP => [ + $this->saveRotationAssigments(), + $rotationSize = 0, + ], + RotationResult::FAILED => [ + $this->clearRotationAsssigments(), + $rotationSize /= 2, + ], + }; + } + } + + protected function rotation($soldiers, $rotationSize): RotationResult + { + $isGapExists = false; + foreach ($soldiers as $soldier) { + $assignedPoints = $this->assignRotationShiftsToSoldier($soldier, $rotationSize); + + $gap = $rotationSize - $assignedPoints; + if ($gap > $this->allowedGap) { + return RotationResult::FAILED; + } + if ($gap > 0) { + $isGapExists = true; + } + } + + return $isGapExists ? RotationResult::SUCCESS_WITH_GAP : RotationResult::SUCCESS; + } + + protected function assignRotationShiftsToSoldier(Soldier $soldier, float $rotationSize) + { + $points = $this->assignRotation($soldier, $rotationSize, false); + $remaining = $rotationSize - $points; + if ($remaining <= $this->allowedGap) { + return $points; + } + $points += $this->assignRotation($soldier, $remaining, true); + if ($rotationSize - $points <= $this->allowedGap) { + return $points; + } + + return 0; + } + + protected function assignRotation(Soldier $soldier, float $rotationSize, bool $ignoreLowConstraint) + { + $currentRotationSize = $rotationSize; + $shiftsCount = 1; + $points = 0; + $potentialShifts = collect([]); + while ($points < $rotationSize && $currentRotationSize >= $this->minimalRotationSize) { + $potentialShifts->push(...$this->getPotentialShifts($soldier, $currentRotationSize, $shiftsCount, $ignoreLowConstraint)); + $points = $this->sumPoints($potentialShifts); + $currentRotationSize /= 2; + $shiftsCount = ($rotationSize - $points) / $currentRotationSize; + } + + return $points; + } + + protected function getPotentialShifts(Soldier $soldier, $rotationSize, $shiftsCount, bool $ignoreLowConstraint) + { + if ($shiftsCount <= 0 || ! isset($this->shiftsData[(string) $rotationSize])) { + return []; + } + $potentialShifts = collect([]); + $counter = 0; + foreach ($this->shiftsData[(string) $rotationSize] as $shift) { + if ((! $shift->isAssigned()) && $soldier->isAbleTake($shift, $ignoreLowConstraint)) { + $potentialShifts->push($shift); + $this->addToRotationAssigments($soldier, $shift); + + $counter++; + if ($counter == $shiftsCount) { + return $potentialShifts; + } + } + } + + return $potentialShifts; + } + + protected function sumPoints($shifts) + { + return collect($shifts)->sum(fn ($shift): float => $shift->points); + } + + protected function addToRotationAssigments(Soldier $soldier, Shift $shift) + { + $shift->isAssigned = true; + if ($shift instanceof AttachedWeekends) { + $shift->fridayShift->isAssigned = true; + $shift->saturdayShift->isAssigned = true; + $this->rotationAssignments->push(new Assignment($shift->fridayShift->id, $soldier->id)); + $this->rotationAssignments->push(new Assignment($shift->saturdayShift->id, $soldier->id)); + $soldier->assign($shift->fridayShift, $shift->fridayShift->getShiftSpaces($soldier->shifts)); + $soldier->assign($shift->saturdayShift, $shift->saturdayShift->getShiftSpaces($soldier->shifts)); + + } else { + $this->rotationAssignments->push(new Assignment($shift->id, $soldier->id)); + $soldier->assign($shift, $shift->getShiftSpaces($soldier->shifts)); + } + } + + protected function saveRotationAssigments() + { + $this->assignments->push(...$this->rotationAssignments); + + $this->rotationAssignments = collect([]); + $this->shiftsData = $this->shiftsData->map(fn ($shiftData) => collect($shiftData)->filter(function ($shift) { + return ! $shift->isAssigned(); + })); + } + + protected function clearRotationAsssigments() + { + $this->shiftsData->map(fn ($shiftData) => collect($shiftData)->map(fn ($shift) => $shift->isAssigned = false)); + $this->rotationAssignments->map(function (Assignment $assignment) { + $shift = $this->shiftsData->flatten()->firstWhere('id', $assignment->shiftId); + $course = $this->courses->first(function ($course) use ($assignment) { + return $course->soldiers->contains('id', $assignment->soldierId); + }); + + $soldier = $course ? $course->soldiers->firstWhere('id', $assignment->soldierId) : null; + $soldier->unassign($shift, $shift->getShiftSpaces($soldier->shifts)); + }); + $this->rotationAssignments = collect([]); + } +} diff --git a/app/Services/PotentialSoldierData.php b/app/Services/PotentialSoldierData.php deleted file mode 100644 index 9565dbb..0000000 --- a/app/Services/PotentialSoldierData.php +++ /dev/null @@ -1,16 +0,0 @@ -soldierId = $soldierId; - $this->isLowConstraint = $isLowConstraint; - } -} diff --git a/app/Services/Range.php b/app/Services/Range.php index c6ff40b..95980cf 100644 --- a/app/Services/Range.php +++ b/app/Services/Range.php @@ -42,7 +42,7 @@ public function isRangeInclude(DaysInWeek $dayInWeek): bool $endDayIndex = $this->end->dayOfWeek; $checkDayIndex = date('N', strtotime($dayInWeek->value)); if ($startDayIndex <= $endDayIndex) { - return $this->start->diffInDays($this->end) > 5 || ($checkDayIndex >= $startDayIndex && $checkDayIndex <= $endDayIndex); + return $this->start->copy()->diffInDays($this->end->copy()) > 5 || ($checkDayIndex >= $startDayIndex && $checkDayIndex <= $endDayIndex); } return $checkDayIndex >= $startDayIndex || $checkDayIndex <= $endDayIndex; @@ -50,7 +50,7 @@ public function isRangeInclude(DaysInWeek $dayInWeek): bool public function getDayAfterWeekend(): Range { - $nextDayAfterWeekend = $this->end->next(DaysInWeek::SUNDAY->value)->setTime(8, 0); + $nextDayAfterWeekend = $this->end->englishDayOfWeek == DaysInWeek::SUNDAY->value ? $this->end->copy() : $this->end->copy()->next(DaysInWeek::SUNDAY->value)->setTime(8, 0); return new Range($nextDayAfterWeekend, $nextDayAfterWeekend->copy()->addDay()); } @@ -62,11 +62,11 @@ public function getNightSpaces() public function getDayBeforeNight(): Range { - return new Range($this->start->copy()->subHours(12), $this->start); + return new Range($this->start->copy()->subHours(12), $this->start->copy()); } public function getDayAfterNight(): Range { - return new Range($this->end, $this->end->copy()->addHours(12)); + return new Range($this->end->copy(), $this->end->copy()->addHours(12)); } } diff --git a/app/Services/Schedule.php b/app/Services/Schedule.php index b1aa5bb..0e7e33a 100644 --- a/app/Services/Schedule.php +++ b/app/Services/Schedule.php @@ -2,7 +2,6 @@ namespace App\Services; -use App\Enums\Availability; use App\Enums\TaskKind; class Schedule @@ -11,262 +10,49 @@ class Schedule public $soldiers; - public $shiftsData; - - public $soldiersDict; - public $assignments; - public $SHIFT_DUMBBELLS; - - public $SOLDIER_DUMBBELLS; - public function __construct($shifts, $soldiers) { - $this->shifts = collect($shifts); $this->soldiers = collect($soldiers); - $this->shiftsData = collect([]); - $this->soldiersDict = collect([]); + $this->shifts = collect($shifts); $this->assignments = collect([]); - $this->SHIFT_DUMBBELLS = collect([ - 'POINTS_RATIO' => 0.29, - 'SHIFTS_RATIO' => 0.39, - 'WEEKENDS_RATIO' => 0.04, - 'NIGHTS_RATIO' => 0.04, - 'SHIFT_AVAILABILITY' => 0.23, - 'BLOCK_POINTS' => 0.05, - ]); - $this->SOLDIER_DUMBBELLS = collect([ - 'LOW_CONSTRAINT' => 0.45, - 'POINTS_RELATIVE_LOAD' => 0.4, - 'SHIFTS_RELATIVE_LOAD' => 0.08, - 'NIGHT_RELATIVE_LOAD' => 0.01, - 'WEEKEND_RELATIVE_LOAD' => 0.01, - 'MULTITASKING_VALUE' => 0.05, - ]); - } - - public function schedule(): void - { - $this->initShiftsData(); - $this->initSoldiersData(); - $this->assignShifts(); - Helpers::updateShiftTable($this->assignments); } - protected function initShiftsData(): void + public function schedule() { - $groupedShifts = collect($this->shifts)->groupBy('taskType'); - $groupedShifts->each(function ($shifts, $taskType) { - $this->addShiftsDataByTask($taskType, collect($shifts)); - }); + $this->assignPointedShifts(); + $this->assignNotPointedShifts(); + $this->saveAssignments(); } - protected function addShiftsDataByTask(string $taskType, $shifts): void + protected function assignPointedShifts() { - $soldiers = $this->soldiers->filter(function (Soldier $soldier) use ($taskType): bool { - return $soldier->isQualified($taskType); - }); - $taskWeight = $this->getTaskWeight($shifts, $soldiers); - $shifts->map(fn ($shift) => $this->addShiftData($shift, $soldiers, $taskWeight)); + $pointedShifts = $this->shifts->filter(fn (Shift $shift): bool => $shift->points > 0); + $soldiers = $this->soldiers->filter(fn (Soldier $soldier) => $soldier->pointsMaxData->remaining() > 0); + $pointedSchedule = new PointedSchedule($soldiers, $pointedShifts); + $assignments = $pointedSchedule->schedule(); + $this->assignments->push(...$assignments); } - protected function getTaskWeight($shifts, $soldiers): array + protected function assignNotPointedShifts() { - $requiredPoints = collect($shifts)->sum('points'); - $requiredNights = collect($shifts)->filter(fn (Shift $shift) => ($shift->kind === TaskKind::NIGHT->value))->count(); - $requiredWeekends = collect($shifts) - ->filter(fn (Shift $shift) => ($shift->kind === TaskKind::WEEKEND->value)) - ->sum(fn (Shift $shift) => $shift->points); - $requiredShifts = count($shifts); - - $availablePoints = collect($soldiers)->sum(fn (Soldier $soldier) => $soldier->pointsMaxData->remaining()); - - $availableNights = collect($soldiers)->sum(fn (Soldier $soldier) => $soldier->nightsMaxData->remaining()); - - $availableWeekends = collect($soldiers)->sum(fn (Soldier $soldier) => $soldier->weekendsMaxData->remaining()); - - $availableShifts = collect($soldiers)->sum(fn (Soldier $soldier) => $soldier->shiftsMaxData->remaining()); - - $weight = collect([ - 'POINTS_RATIO' => $this->getRatio($requiredPoints, $availablePoints), - 'NIGHTS_RATIO' => $this->getRatio($requiredNights, $availableNights), - 'WEEKENDS_RATIO' => $this->getRatio($requiredWeekends, $availableWeekends), - 'SHIFTS_RATIO' => $this->getRatio($requiredShifts, $availableShifts), + $taskKinds = collect([ + TaskKind::NIGHT->value => 1, + TaskKind::REGULAR->value => 3, + TaskKind::ALERT->value => 1, ]); - - $weight->each(function ($value, $key) use (&$weight) { - $weight[$key] = $value * $this->SHIFT_DUMBBELLS[$key]; - }); - - return $weight->all(); - } - - protected function addShiftData(Shift $shift, $soldiers, $taskWeight) - { - $potentialSoldiers = $this->getPotentialSoldiers($soldiers, $shift->range); - $shiftData = new ShiftData( - $shift, - $potentialSoldiers, - $this->getShiftWeight( - $taskWeight, - $shift, - $soldiers->count(), - $potentialSoldiers->count() - ) - ); - $this->shiftsData->push($shiftData); - } - - protected function getRatio(float $required, float $available): float - { - return $available == 0 ? 0 : (float) $this->maximumOne((float) $required / $available); - } - - protected function maximumOne(float $number): float - { - return $number > 1 ? 1 : $number; - } - - protected function getPotentialSoldiers($soldiers, Range $range) - { - $potentialSoldiers = $soldiers->filter(function (Soldier $soldier) use ($range) { - return $soldier->isAvailableByConstraints($range) != Availability::NO; - })->map(function (Soldier $soldier) use ($range): PotentialSoldierData { - $availability = $soldier->isAvailableByConstraints($range); - - return new PotentialSoldierData( - $soldier->id, - $availability == Availability::BETTER_NOT - ); + $taskKinds->each(function ($gap, $taskKind) { + $shifts = $this->shifts->filter(fn (Shift $shift): bool => $shift->kind == $taskKind && + $shift->points == 0); + $notPointedSchedule = new NotPointedSchedule($taskKind, $this->soldiers, $shifts, $gap); + $assignments = $notPointedSchedule->schedule(); + $this->assignments->push(...$assignments); }); - - return $potentialSoldiers; } - protected function getShiftWeight($taskWeight, Shift $shift, int $soldiersCount, int $availableSoldiersCount): float + protected function saveAssignments() { - $weight = $taskWeight['SHIFTS_RATIO'] + $shift->points > 0 ? $taskWeight['POINTS_RATIO'] : 0; - - match ($shift->kind) { - TaskKind::WEEKEND->value => $weight += $taskWeight['WEEKENDS_RATIO'], - TaskKind::NIGHT->value => $weight += $taskWeight['NIGHTS_RATIO'], - default => null - }; - - $weight += $this->getShiftAvailabilityRatio($soldiersCount, $availableSoldiersCount) - * $this->SHIFT_DUMBBELLS['SHIFT_AVAILABILITY']; - - $weight += $this->getShiftBlockPoints($shift->points) * $this->SHIFT_DUMBBELLS['BLOCK_POINTS']; - - return $weight; - } - - protected function getShiftAvailabilityRatio(int $soldiersCount, int $availableSoldiers): float - { - if ($availableSoldiers == 0) { - return 0; - } - - return (float) ($soldiersCount - $availableSoldiers) / $soldiersCount; - } - - protected function getShiftBlockPoints(float $points): float - { - if ($points == 0) { - return 0; - } - - return (float) $points / 3; - } - - protected function initSoldiersData(): void - { - $this->soldiers->map(fn (Soldier $soldier) => $this->soldiersDict->put($soldier->id, $soldier)); - } - - protected function assignShifts() - { - $sortedShifts = $this->getSortedShiftsList(); - collect($sortedShifts)->map(fn (ShiftData $shift) => $this->assignShift($shift)); - } - - protected function getSortedShiftsList() - { - return $this->shiftsData->sortByDesc('weight'); - } - - protected function assignShift(ShiftData $shiftData) - { - $soldiers = $this->getPotentialSoldiersData($shiftData); - foreach ($soldiers as $soldier) { - $success = $this->tryAssign($soldier, $shiftData->shift); - if ($success) { - return; - } - } - } - - protected function getPotentialSoldiersData(ShiftData $shiftData) - { - $soldiers = collect([]); - collect($shiftData->potentialSoldiers)->map(function (PotentialSoldierData $potentialSoldierData) use (&$soldiers, $shiftData) { - $soldiers->push($this->getSoldierAndWeight($potentialSoldierData, $shiftData->shift)); - }); - - return $this->getSortedPotentialSoldiers($soldiers); - } - - protected function getSoldierAndWeight(PotentialSoldierData $potentialSoldierData, Shift $shift) - { - $soldier = $this->soldiersDict[$potentialSoldierData->soldierId]; - $weightDict = [ - 'LOW_CONSTRAINT' => $potentialSoldierData->isLowConstraint ? 1 : 0, - 'POINTS_RELATIVE_LOAD' => $shift->points > 0 ? $soldier->pointsMaxData->calculatedRelativeLoad() : 0, - 'SHIFTS_RELATIVE_LOAD' => $soldier->shiftsMaxData->calculatedRelativeLoad(), - 'NIGHT_RELATIVE_LOAD' => $shift->kind !== TaskKind::NIGHT->value ? 0 : $soldier->nightsMaxData->calculatedRelativeLoad(), - 'WEEKEND_RELATIVE_LOAD' => $shift->kind !== TaskKind::WEEKEND->value ? 0 : $soldier->weekendsMaxData->calculatedRelativeLoad(), - 'MULTITASKING_VALUE' => $this->getMultitaskingValue( - $soldier->qualifications->count() - ), - ]; - $weight = $this->getTotalWeight($weightDict); - - return [$soldier, $weight]; - } - - protected function getMultitaskingValue(int $qualificationsNumber): float - { - return (float) (1 - ((float) (1 / $qualificationsNumber))); - } - - protected function getTotalWeight($weightData): float - { - $weight = 0; - collect($weightData)->map(function ($value, $key) use (&$weight) { - $weight += (float) ($value * $this->SOLDIER_DUMBBELLS[$key]); - }); - - return $weight; - } - - protected function getSortedPotentialSoldiers($soldiers) - { - $sortedSoldiers = $soldiers->sortBy(fn ($item) => $item[1]); - - return $sortedSoldiers->map(fn ($soldier) => $soldier[0]); - } - - protected function tryAssign(Soldier $soldier, Shift $shift): bool - { - $spaces = $shift->getShiftSpaces($soldier->shifts); - if ($soldier->isAbleTake($shift, $spaces)) { - $soldier->assign($shift, $spaces); - $this->assignments->push(new Assignment($shift->id, $soldier->id)); - - return true; - } - - return false; + Helpers::updateShiftTable($this->assignments); } } diff --git a/app/Services/Shift.php b/app/Services/Shift.php index 1e41652..5613bee 100644 --- a/app/Services/Shift.php +++ b/app/Services/Shift.php @@ -9,6 +9,8 @@ class Shift { public $id; + public $taskId; + public $taskType; public $range; @@ -17,16 +19,28 @@ class Shift public $kind; + public $isAssigned; + public $inParalelTasks; - public function __construct($id, string $taskType, $start, $end, float $points, $kind, $inParalelTasks = []) + public $isAttached; + + public function __construct($id, int $taskId, string $taskType, $start, $end, float $points, $kind, $inParalelTasks = []) { $this->id = $id; + $this->taskId = $taskId; $this->taskType = $taskType; $this->range = new Range($start, $end); $this->points = $points; $this->kind = $kind; + $this->isAssigned = false; $this->inParalelTasks = $inParalelTasks; + $this->isAttached = false; + } + + public function isAssigned(): bool + { + return $this->isAssigned; } public function getShiftSpaces($shifts) @@ -67,7 +81,7 @@ protected function isShiftInclude(Range $range, DaysInWeek $dayInWeek): bool protected function isAttached($shifts, $range, DaysInWeek $dayInWeek): bool { - $expectedDate = $dayInWeek == DaysInWeek::FRIDAY ? $range->start->subDay()->startOfDay() : $range->end->addDay()->startOfDay(); + $expectedDate = $dayInWeek == DaysInWeek::FRIDAY ? $range->start->copy()->subDay()->startOfDay() : $range->end->copy()->addDay()->startOfDay(); return $shifts ? collect($shifts)->contains( function ($shift) use ($expectedDate): bool { @@ -75,4 +89,4 @@ function ($shift) use ($expectedDate): bool { } ) : false; } -} +} \ No newline at end of file diff --git a/app/Services/ShiftData.php b/app/Services/ShiftData.php index 74606ea..82afd0a 100644 --- a/app/Services/ShiftData.php +++ b/app/Services/ShiftData.php @@ -6,14 +6,14 @@ class ShiftData { public $shift; - public $potentialSoldiers; - public $weight; - public function __construct(Shift $shift, $potentialSoldiers, float $weight) + public $potentialSoldiers; + + public function __construct(Shift $shift, float $weight, $potentialSoldiers = []) { $this->shift = $shift; - $this->potentialSoldiers = collect($potentialSoldiers); $this->weight = $weight; + $this->potentialSoldiers = collect($potentialSoldiers); } } diff --git a/app/Services/Soldier.php b/app/Services/Soldier.php index cb3ee02..f9c68df 100644 --- a/app/Services/Soldier.php +++ b/app/Services/Soldier.php @@ -10,6 +10,8 @@ class Soldier { public $id; + public $course; + public $pointsMaxData; public $shiftsMaxData; @@ -30,9 +32,10 @@ class Soldier public $concurrentsShifts; - public function __construct($id, MaxData $maxPoints, MaxData $maxShifts, MaxData $maxNights, MaxData $maxWeekends, MaxData $alertsMaxData, MaxData $inParallelMaxData, $qualifications, $constraints, $shifts = [], $concurrentsShifts = []) + public function __construct($id, $course, MaxData $maxPoints, MaxData $maxShifts, MaxData $maxNights, MaxData $maxWeekends, MaxData $alertsMaxData, MaxData $inParallelMaxData, $qualifications, $constraints, $shifts = [], $concurrentsShifts = []) { $this->id = $id; + $this->course = $course; $this->pointsMaxData = $maxPoints; $this->shiftsMaxData = $maxShifts; $this->nightsMaxData = $maxNights; @@ -45,48 +48,64 @@ public function __construct($id, MaxData $maxPoints, MaxData $maxShifts, MaxData $this->concurrentsShifts = collect($concurrentsShifts); } + public function hasMaxes(): bool + { + return ! ( + $this->shiftsMaxData->max === 0 && + $this->nightsMaxData->max === 0 && + $this->weekendsMaxData->max === 0 && + $this->alertsMaxData->max === 0 + ); + } + public function isQualified(string $taskType): bool { return $this->qualifications->contains($taskType); } - public function isAbleTake(Shift $shift, $spaces): bool + public function isAbleTake(Shift $shift, $ignoreLowConstraint): bool { - return $this->isAvailableByMaxes($shift) + $spaces = $shift->getShiftSpaces($this->shifts); + $availability = $this->isAvailableByConstraints($shift->range); + $isAvailableByConstraint = $ignoreLowConstraint ? $availability != Availability::NO : $availability == Availability::YES; + + return $this->isQualified($shift->taskType) + && $this->isAvailableByMaxes($shift) && $this->isAvailableByShifts($shift) - && $this->isAvailableBySpaces($spaces); + && $this->isAvailableBySpaces($spaces) + && $isAvailableByConstraint; } public function isAvailableByMaxes(Shift $shift): bool { - if ( - ($shift->kind === TaskKind::WEEKEND->value && $this->weekendsMaxData->remaining() < $shift->points) - || ($shift->kind === TaskKind::NIGHT->value && $this->nightsMaxData->remaining() < 1) - || ($shift->kind === TaskKind::ALERT->value && $this->alertsMaxData->remaining() < 1) - || ($shift->kind === TaskKind::INPARALLEL->value && $this->inParallelMaxData->remaining() < 1) - || $this->pointsMaxData->remaining() < $shift->points - || $this->shiftsMaxData->remaining() < 1 - ) { + if ($this->pointsMaxData->remaining() < $shift->points) { return false; } - return true; + return match ($shift->kind) { + TaskKind::WEEKEND->value => $this->weekendsMaxData->remaining() >= $shift->points, + TaskKind::NIGHT->value => $this->nightsMaxData->remaining() > 0 && $this->shiftsMaxData->remaining() > 0, + TaskKind::INPARALLEL->value => $this->inParallelMaxData->remaining() > 0, + TaskKind::ALERT->value => $this->alertsMaxData->remaining() > 0, + TaskKind::REGULAR->value => $this->shiftsMaxData->remaining() > 0, + }; } public function isAvailableByShifts(Shift $shift): bool { - return ! $this->shifts->contains(function (Shift $soldierShift) use ($shift): bool { - return $soldierShift->range->isConflict($shift->range) && ! collect($shift->inParalelTasks)->contains($shift->taskType); - }); + return ! $this->shifts->contains(fn (Shift $soldierShift) => $soldierShift->range->isConflict($shift->range) + && (! collect($shift->inParalelTasks)->contains($soldierShift->taskType)) + ); } public function isAvailableBySpaces($spaces): bool { if ($spaces) { foreach ($spaces as $space) { - return ! $this->shifts->contains(function ($shift) use ($space) { - return $shift->range->isConflict($space); - }); + return ! $this->shifts->contains(fn (Shift $shift) => $shift->id != 0 && + $shift->range->isConflict($space) + ) + && ! $this->concurrentsShifts->contains(fn (Shift $concurrentsShift) => $concurrentsShift->range->isConflict($space)); } } @@ -95,9 +114,9 @@ public function isAvailableBySpaces($spaces): bool public function isAvailableByConcurrentsShifts(Shift $shift) { - return ! $this->concurrentsShifts->contains(function (Shift $concurrentsShift) use ($shift): bool { - return $concurrentsShift->range->isConflict($shift->range) && ! collect($concurrentsShift->inParalelTasks)->contains($shift->taskType); - }); + return ! $this->concurrentsShifts->contains(fn (Shift $concurrentsShift) => $concurrentsShift->range->isConflict($shift->range) && + ! (collect($concurrentsShift->inParalelTasks)->contains($shift->taskType) + || collect($shift->inParalelTasks)->contains($concurrentsShift->taskType))); } public function isAvailableByConstraints(Range $range): Availability @@ -126,7 +145,10 @@ public function assign(Shift $shift, $spaces): void $this->pointsMaxData->used += $shift->points; match ($shift->kind) { TaskKind::WEEKEND->value => $this->weekendsMaxData->used += $shift->points, - TaskKind::NIGHT->value => $this->updateNightAndShifts(), + TaskKind::NIGHT->value => [ + $this->nightsMaxData->used += 1, + $this->shiftsMaxData->used += 1, + ], TaskKind::ALERT->value => $this->alertsMaxData->used += 1, TaskKind::INPARALLEL->value => $this->inParallelMaxData->used += 1, TaskKind::REGULAR->value => $this->shiftsMaxData->used += 1, @@ -135,12 +157,30 @@ public function assign(Shift $shift, $spaces): void protected function addSpaces($spaces) { - collect($spaces)->map(fn ($space) => $this->shifts->push(new Shift(0, '', $space->start, $space->end, 0, TaskKind::REGULAR->value, []))); + collect($spaces)->map(fn ($space) => $this->shifts->push(new Shift(0, 0, '', $space->start, $space->end, 0, TaskKind::REGULAR->value, []))); + } + + public function unassign(Shift $shift, $spaces) + { + $this->shifts = $this->shifts->filter(fn (Shift $existShift) => $shift->id !== $existShift->id); + $this->removeSpaces($spaces); + $this->pointsMaxData->used -= $shift->points; + match ($shift->kind) { + TaskKind::WEEKEND->value => $this->weekendsMaxData->used -= $shift->points, + TaskKind::NIGHT->value => [ + $this->nightsMaxData->used -= 1, + $this->shiftsMaxData->used -= 1, + ], + TaskKind::ALERT->value => $this->alertsMaxData->used -= 1, + TaskKind::INPARALLEL->value => $this->inParallelMaxData->used -= 1, + TaskKind::REGULAR->value => $this->shiftsMaxData->used -= 1, + }; } - protected function updateNightAndShifts() + protected function removeSpaces($spaces) { - $this->nightsMaxData->used += 1; - $this->shiftsMaxData->used += 1; + collect($spaces)->map(function ($space) { + $this->shifts = $this->shifts->filter(fn (Shift $existSpace) => $space->start !== $existSpace->range->start && $space->end !== $existSpace->range->end); + }); } } From 6b637edee1e3b7dae124e844044bc7c70b721a4a Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Tue, 10 Jun 2025 15:20:56 +0300 Subject: [PATCH 157/259] push --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Services/Algorithm.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index d1f65b8..49b8c27 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_fix_1 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_fix_2 flavor: | latest=false tags: | diff --git a/app/Services/Algorithm.php b/app/Services/Algorithm.php index 6792a3d..149aad1 100644 --- a/app/Services/Algorithm.php +++ b/app/Services/Algorithm.php @@ -41,7 +41,7 @@ protected function getSoldiersDetails() { return Soldier::with('constraints') ->where('is_reservist', false) - ->whereJsonLength('qualifications', '>', 0) + // ->whereJsonLength('qualifications', '>', 0) ->get() ->map(function (Soldier $soldier) { $constraints = Helpers::buildConstraints($soldier->constraints, new Range($this->date->copy()->startOfMonth(), $this->date->copy()->endOfMonth())); From c02ce433af1679afa86781e6dbbeca6075bd5783 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Tue, 10 Jun 2025 15:50:33 +0300 Subject: [PATCH 158/259] push --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Services/Algorithm.php | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 49b8c27..1f02a7c 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_fix_2 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_fix_3 flavor: | latest=false tags: | diff --git a/app/Services/Algorithm.php b/app/Services/Algorithm.php index 149aad1..3937b51 100644 --- a/app/Services/Algorithm.php +++ b/app/Services/Algorithm.php @@ -65,10 +65,10 @@ protected function getSoldiersShifts($soldierId, $inParallel) public function run() { - $shifts = $this->getShiftWithTasks(); - $soldiers = $this->getSoldiersDetails(); - $scheduleAlgorithm = new Schedule($shifts, $soldiers); - $scheduleAlgorithm->schedule(); + // $shifts = $this->getShiftWithTasks(); + // $soldiers = $this->getSoldiersDetails(); + // $scheduleAlgorithm = new Schedule($shifts, $soldiers); + // $scheduleAlgorithm->schedule(); $concurrentTasks = new ConcurrentTasks($this->date); $concurrentTasks->run(); } From 1d9732a72b5e1ee1ba9debe1ee4a9b8053134dbd Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 11 Jun 2025 10:14:58 +0300 Subject: [PATCH 159/259] push --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Services/Helpers.php | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 1f02a7c..d345f83 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_fix_3 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_fix_4 flavor: | latest=false tags: | diff --git a/app/Services/Helpers.php b/app/Services/Helpers.php index c933f5f..2ca0ae4 100644 --- a/app/Services/Helpers.php +++ b/app/Services/Helpers.php @@ -148,6 +148,19 @@ public static function getConstraintBy(int $soldierId, $newRange) public static function updateShiftTable($assignments) { - collect($assignments)->map(fn (Assignment $assignment) => Shift::where('id', $assignment->shiftId)->update(['soldier_id' => $assignment->soldierId])); + if (empty($assignments)) { + return; + } + + $cases = []; + $ids = []; + + collect($assignments)->each(function ($assignment) use (&$ids, &$cases) { + $ids[] = $assignment->shiftId; + $cases[] = "WHEN id = {$assignment->shiftId} THEN {$assignment->soldierId}"; + }); + + Shift::whereIn('id', $ids) + ->update(['soldier_id' => \DB::raw('CASE '.implode(' ', $cases).' END')]); } } From cc0254b5e2404fbe6275ae655bac2bbdd4fec6b4 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 11 Jun 2025 10:24:17 +0300 Subject: [PATCH 160/259] push --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Services/Algorithm.php | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index d345f83..6590efd 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_fix_4 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_fix_5 flavor: | latest=false tags: | diff --git a/app/Services/Algorithm.php b/app/Services/Algorithm.php index 3937b51..149aad1 100644 --- a/app/Services/Algorithm.php +++ b/app/Services/Algorithm.php @@ -65,10 +65,10 @@ protected function getSoldiersShifts($soldierId, $inParallel) public function run() { - // $shifts = $this->getShiftWithTasks(); - // $soldiers = $this->getSoldiersDetails(); - // $scheduleAlgorithm = new Schedule($shifts, $soldiers); - // $scheduleAlgorithm->schedule(); + $shifts = $this->getShiftWithTasks(); + $soldiers = $this->getSoldiersDetails(); + $scheduleAlgorithm = new Schedule($shifts, $soldiers); + $scheduleAlgorithm->schedule(); $concurrentTasks = new ConcurrentTasks($this->date); $concurrentTasks->run(); } From 4c3553621e10ba7c48a8396fbf5d96803b397980 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 11 Jun 2025 10:37:55 +0300 Subject: [PATCH 161/259] push --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Services/Helpers.php | 22 +++++++++++++--------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 6590efd..2c931e8 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_fix_5 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_fix_6 flavor: | latest=false tags: | diff --git a/app/Services/Helpers.php b/app/Services/Helpers.php index 2ca0ae4..6aa4be5 100644 --- a/app/Services/Helpers.php +++ b/app/Services/Helpers.php @@ -146,21 +146,25 @@ public static function getConstraintBy(int $soldierId, $newRange) return self::buildConstraints($constraints, $newRange); } - public static function updateShiftTable($assignments) + public function updateShiftTable($assignments) { if (empty($assignments)) { return; } - $cases = []; - $ids = []; + $chunks = array_chunk($assignments, 80); - collect($assignments)->each(function ($assignment) use (&$ids, &$cases) { - $ids[] = $assignment->shiftId; - $cases[] = "WHEN id = {$assignment->shiftId} THEN {$assignment->soldierId}"; - }); + foreach ($chunks as $chunk) { + $cases = []; + $ids = []; + + collect($chunk)->each(function ($assignment) use (&$ids, &$cases) { + $ids[] = $assignment->shiftId; + $cases[] = "WHEN id = {$assignment->shiftId} THEN {$assignment->soldierId}"; + }); - Shift::whereIn('id', $ids) - ->update(['soldier_id' => \DB::raw('CASE '.implode(' ', $cases).' END')]); + Shift::whereIn('id', $ids) + ->update(['soldier_id' => \DB::raw("CASE " . implode(' ', $cases) . " END")]); + } } } From c2a3dd2be8040444c58bf1e987024d4f53df1d08 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 11 Jun 2025 10:41:20 +0300 Subject: [PATCH 162/259] push --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Services/Helpers.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 2c931e8..814c89e 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_fix_6 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_fix_7 flavor: | latest=false tags: | diff --git a/app/Services/Helpers.php b/app/Services/Helpers.php index 6aa4be5..cd2b416 100644 --- a/app/Services/Helpers.php +++ b/app/Services/Helpers.php @@ -146,13 +146,13 @@ public static function getConstraintBy(int $soldierId, $newRange) return self::buildConstraints($constraints, $newRange); } - public function updateShiftTable($assignments) + public static function updateShiftTable($assignments) { if (empty($assignments)) { return; } - $chunks = array_chunk($assignments, 80); + $chunks = array_chunk($assignments->toArray(), 80); foreach ($chunks as $chunk) { $cases = []; From 6c9568ccc3860c82aa42c2b399c9595adec97493 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 11 Jun 2025 11:21:55 +0300 Subject: [PATCH 163/259] push --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Services/Helpers.php | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 814c89e..ff3917e 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_fix_7 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_fix_8 flavor: | latest=false tags: | diff --git a/app/Services/Helpers.php b/app/Services/Helpers.php index cd2b416..81352d1 100644 --- a/app/Services/Helpers.php +++ b/app/Services/Helpers.php @@ -148,6 +148,7 @@ public static function getConstraintBy(int $soldierId, $newRange) public static function updateShiftTable($assignments) { + set_time_limit(0); if (empty($assignments)) { return; } From f74822598900e4e842d31a637634101798f9a790 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 11 Jun 2025 12:33:29 +0300 Subject: [PATCH 164/259] push --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 6 +++--- app/Services/Algorithm.php | 2 +- app/Services/ConcurrentTasks.php | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index ff3917e..a1d9074 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_fix_8 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_fix_9 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 46f6f9d..1abb486 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -105,9 +105,9 @@ public function getEventsByRole() { $current_user_id = auth()->user()->userable_id; $role = current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])); - - $query = $this->model::with(['task', 'soldier']); - // $query = $this->model::query(); + $query = $this->model == Shift::class ? + $this->model::with(['task', 'soldier']) + : $this->model::with('soldier'); $query = match ($role) { 'manager', 'shifts-assignment' => $query->where('soldier_id', '!=', $current_user_id) ->orWhereNull('soldier_id'), diff --git a/app/Services/Algorithm.php b/app/Services/Algorithm.php index 149aad1..9471b29 100644 --- a/app/Services/Algorithm.php +++ b/app/Services/Algorithm.php @@ -30,7 +30,7 @@ protected function getShiftWithTasks() ->where(function ($query) use ($startOfMonth, $endOfMonth) { $query->where(function ($subQuery) use ($startOfMonth, $endOfMonth) { $subQuery->where('start_date', '<=', $endOfMonth) - ->where('end_date', '>=', $startOfMonth); + ->where('start_date', '>=', $startOfMonth); }); }) ->get() diff --git a/app/Services/ConcurrentTasks.php b/app/Services/ConcurrentTasks.php index a40ba76..09cdf04 100644 --- a/app/Services/ConcurrentTasks.php +++ b/app/Services/ConcurrentTasks.php @@ -51,7 +51,7 @@ protected function getShiftsWithTasks() ->where(function ($query) use ($startOfMonth, $endOfMonth) { $query->where(function ($subQuery) use ($startOfMonth, $endOfMonth) { $subQuery->where('start_date', '<=', $endOfMonth) - ->where('end_date', '>=', $startOfMonth); + ->where('start_date', '>=', $startOfMonth); }); }) ->get() From dd0051885b180b4a4dfacc92e38ef9b3ed4ba4c2 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 11 Jun 2025 13:16:28 +0300 Subject: [PATCH 165/259] push --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 6 ++---- app/Models/Constraint.php | 2 +- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index a1d9074..f4ebbb5 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_fix_9 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_fix_10 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 1abb486..ded2b90 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -108,7 +108,7 @@ public function getEventsByRole() $query = $this->model == Shift::class ? $this->model::with(['task', 'soldier']) : $this->model::with('soldier'); - $query = match ($role) { + $query = ($this->type === 'my_soldiers') ? match ($role) { 'manager', 'shifts-assignment' => $query->where('soldier_id', '!=', $current_user_id) ->orWhereNull('soldier_id'), 'department-commander' => $query->where(function ($query) use ($current_user_id) { @@ -131,14 +131,12 @@ public function getEventsByRole() $query->where('id', $current_user_id); })->first()?->members->pluck('id') ?? collect([])); }), - default => $query->where('soldier_id', '=', $current_user_id), - }; + } : $query->where('soldier_id', '=', $current_user_id); return $query->where('start_date', '>=', $this->fetchInfo['start']) ->where('end_date', '<=', $this->fetchInfo['end']) ->get(); } - protected function events($events): Collection { return $this->filter ? $this->model::filter($events, $this->filterData) : $events; diff --git a/app/Models/Constraint.php b/app/Models/Constraint.php index da94812..c645820 100644 --- a/app/Models/Constraint.php +++ b/app/Models/Constraint.php @@ -35,7 +35,7 @@ class Constraint extends Model 'end_date' => 'datetime:Y-m-d H:i:s', ]; - public function soldiers(): BelongsTo + public function soldier(): BelongsTo { return $this->belongsTo(Soldier::class); } From 55f3d64e318771e8a38c7ae1f656ff657d8c8e2b Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 11 Jun 2025 15:08:57 +0300 Subject: [PATCH 166/259] push --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Models/Shift.php | 22 ++--- app/Models/Team.php | 5 +- .../TeamResource/Pages/CreateTeam.php | 10 ++- app/Resources/TeamResource/Pages/EditTeam.php | 15 ++-- app/Services/Algorithm.php | 3 +- app/Services/ChangeAssignment.php | 10 ++- app/Services/Helpers.php | 13 +-- app/Services/ManualAssignment.php | 86 +++++++++---------- 9 files changed, 91 insertions(+), 75 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index f4ebbb5..2b036af 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_fix_10 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_fix_11 flavor: | latest=false tags: | diff --git a/app/Models/Shift.php b/app/Models/Shift.php index 029d868..566a4fb 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -194,6 +194,8 @@ protected static function getOptions($shift): array public static function exchangeAction(): Action { + $hasMatchingShifts = false; + return Action::make('Exchange') ->label(__('Exchange assignment')) ->cancelParentActions() @@ -202,11 +204,12 @@ public static function exchangeAction(): Action ->modalSubmitAction(false) ->modalCloseButton(false) ->form( - function ($record) { + function ($record) use (&$hasMatchingShifts) { session()->put('selected_shift', false); $changeAssignment = new ChangeAssignment($record); $data = $changeAssignment->getMatchingShifts(); + $hasMatchingShifts = $data['shifts']->isNotEmpty(); $sections = collect($data['shifts']) ->groupBy(fn ($data) => $data['shift']->soldier_id) ->map( @@ -281,15 +284,12 @@ function ($shifts, $soldierId) use ($data) { if ($arguments['cancel'] ?? false) { $livewire->dispatch('filament-fullcalendar--refresh'); } + }) + ->hidden(function ($record) use ($hasMatchingShifts) { + if ($record->soldier_id) { + return $hasMatchingShifts; + } }); - // ->hidden(function ($record) { - // if ($record->soldier_id) { - // $changeAssignment = new ChangeAssignment($record); - // // \Log::info('in hidden in getMatchingShifts'); - - // return $changeAssignment->getMatchingShifts()->isEmpty(); - // } - // }) } protected static function description($soldierId, $hasConcurrent) @@ -591,10 +591,10 @@ function ($record) use (&$soldiers) { }); } - protected static function shiftsAssignmentChange($shift, $soldierId) + protected static function shiftsAssignmentChange(Shift $shift, $soldierId) { self::shiftsAssignmentSendChangeNotifications($shift, $soldierId); - Shift::with('task')->where('id', $shift->id)->update(['soldier_id' => $soldierId]); + $shift->update(['soldier_id' => $soldierId]); } protected static function shiftsAssignmentSendChangeNotifications($shift, $soldierId) diff --git a/app/Models/Team.php b/app/Models/Team.php index b4efb44..f626853 100644 --- a/app/Models/Team.php +++ b/app/Models/Team.php @@ -48,6 +48,7 @@ protected static function removeCommanderRole($commanderId) protected static function unAssignMembers(Team $team) { - collect($team->members)->map(fn (Soldier $member) => $member->update(['team_id' => null])); + $memberIds = $team->members->pluck('id'); + Soldier::whereIn('id', $memberIds)->update(['team_id' => null]); } -} +} \ No newline at end of file diff --git a/app/Resources/TeamResource/Pages/CreateTeam.php b/app/Resources/TeamResource/Pages/CreateTeam.php index d76cc18..85a7274 100644 --- a/app/Resources/TeamResource/Pages/CreateTeam.php +++ b/app/Resources/TeamResource/Pages/CreateTeam.php @@ -83,8 +83,12 @@ protected function afterCreate(): void protected function attachSoldiers(): void { - collect($this->data['members'])->map(fn ($soldier_id) => Soldier::where('id', $soldier_id) - ->update(['team_id' => Team::latest()->pluck('id')->first()])); + $teamId = Team::latest()->pluck('id')->first(); + + if ($teamId) { + Soldier::whereIn('id', $this->data['members']) + ->update(['team_id' => $teamId]); + } } protected function assignRoles() @@ -93,4 +97,4 @@ protected function assignRoles() $user = User::where('userable_id', $this->record->commander_id)->first(); $user->assignRole('team-commander'); } -} +} \ No newline at end of file diff --git a/app/Resources/TeamResource/Pages/EditTeam.php b/app/Resources/TeamResource/Pages/EditTeam.php index eec8069..5eb8450 100644 --- a/app/Resources/TeamResource/Pages/EditTeam.php +++ b/app/Resources/TeamResource/Pages/EditTeam.php @@ -83,15 +83,18 @@ protected function assignRoles() protected function unAssignMembers() { + $members = collect($this->data['members'])->pluck('id'); + Soldier::where('team_id', $this->record->id) - ->get() - ->map(fn ($soldier) => ! collect($this->data['members'])->contains($soldier->id) ? - Soldier::where('id', $soldier->id)->update(['team_id' => null]) : null); + ->whereNotIn('id', $members) + ->update(['team_id' => null]); } protected function assignMembers() { - collect($this->data['members'])->map(fn ($soldier_id) => Soldier::where('id', $soldier_id) - ->update(['team_id' => $this->record->id])); + $members = collect($this->data['members']); + + Soldier::whereIn('id', $members) + ->update(['team_id' => $this->record->id]); } -} +} \ No newline at end of file diff --git a/app/Services/Algorithm.php b/app/Services/Algorithm.php index 9471b29..3fcf1bc 100644 --- a/app/Services/Algorithm.php +++ b/app/Services/Algorithm.php @@ -22,7 +22,8 @@ protected function getShiftWithTasks() $startOfMonth = max($this->date->copy()->startOfMonth(), Carbon::tomorrow()); $endOfMonth = $this->date->copy()->endOfMonth(); - return Shift::whereNull('soldier_id') + return Shift::with('task') + ->whereNull('soldier_id') ->whereHas('task', function ($query) { $query->withTrashed() ->where('kind', '!=', TaskKind::INPARALLEL->value); diff --git a/app/Services/ChangeAssignment.php b/app/Services/ChangeAssignment.php index 9400ba4..fe0f314 100644 --- a/app/Services/ChangeAssignment.php +++ b/app/Services/ChangeAssignment.php @@ -33,6 +33,7 @@ protected function buildSoldier(): SoldierService public function getMatchingSoldiers() { return Soldier::where('id', '!=', $this->soldier->id) + // ->whereJsonLength('qualifications', '>', 0) ->get() ->map(function ($soldier) { $constraints = $this->getConstraints($soldier); @@ -128,7 +129,12 @@ protected function isConflictWithConstraints($soldier, $range): bool public function exchange($shift) { - Shift::where('id', $shift->id)->update(['soldier_id' => Shift::find($this->shift->id)->soldier_id]); - Shift::where('id', $this->shift->id)->update(['soldier_id' => $shift->soldier_id]); + $currentSoldierId = Shift::find($this->shift->id)->soldier_id; + $newSoldierId = $shift->soldier_id; + + \DB::transaction(function () use ($shift, $currentSoldierId, $newSoldierId) { + Shift::where('id', $shift->id)->update(['soldier_id' => $currentSoldierId]); + Shift::where('id', $this->shift->id)->update(['soldier_id' => $newSoldierId]); + }); } } \ No newline at end of file diff --git a/app/Services/Helpers.php b/app/Services/Helpers.php index 81352d1..c61b79f 100644 --- a/app/Services/Helpers.php +++ b/app/Services/Helpers.php @@ -130,8 +130,8 @@ public static function getSoldiersShifts($soldierId, $range, $inParallel) }) ->where(function ($query) use ($range) { $query->where(function ($subQuery) use ($range) { - $subQuery->where('start_date', '<', $range->end) - ->where('end_date', '>', $range->start); + $subQuery->where('start_date', '<=', $range->end) + ->where('start_date', '>=', $range->start); }); }) ->get() @@ -146,9 +146,12 @@ public static function getConstraintBy(int $soldierId, $newRange) return self::buildConstraints($constraints, $newRange); } + // public static function updateShiftTable($assignments) + // { + // collect($assignments)->map(fn (Assignment $assignment) => Shift::where('id', $assignment->shiftId)->update(['soldier_id' => $assignment->soldierId])); + // } public static function updateShiftTable($assignments) { - set_time_limit(0); if (empty($assignments)) { return; } @@ -165,7 +168,7 @@ public static function updateShiftTable($assignments) }); Shift::whereIn('id', $ids) - ->update(['soldier_id' => \DB::raw("CASE " . implode(' ', $cases) . " END")]); + ->update(['soldier_id' => \DB::raw('CASE '.implode(' ', $cases).' END')]); } } -} +} \ No newline at end of file diff --git a/app/Services/ManualAssignment.php b/app/Services/ManualAssignment.php index 95fb7e3..86b0fe3 100644 --- a/app/Services/ManualAssignment.php +++ b/app/Services/ManualAssignment.php @@ -8,7 +8,6 @@ use App\Models\Team; use App\Models\User; use App\Services\Soldier as SoldierService; -use Illuminate\Support\Facades\Cache; class ManualAssignment { @@ -34,7 +33,6 @@ public function getSoldiers($departmentName = null) protected function initSoldiersData($departmentName) { - $this->soldiers = Cache::remember('users', 30 * 60, fn () => User::all()); match ($this->soldierType) { 'reserves' => $this->filterReserves(), 'my_soldiers' => $this->filterMySoldiers(), @@ -46,60 +44,65 @@ protected function initSoldiersData($departmentName) protected function filterReserves() { - $this->soldiers = $this->soldiers - ->filter(function ($user) { - $soldier = $this->getSoldierBy($user->userable_id); - - return $soldier->is_reservist && $soldier->id != auth()->user()->userable_id; - }); + $this->soldiers = Soldier::whereJsonContains('qualifications', $this->shift->taskType) + ->where('is_reservist', true) + ->where('id', '!=', auth()->user()->userable_id)->get(); } protected function filterMySoldiers() { - $this->soldiers = $this->soldiers - ->filter(function ($user) { - $currentUserId = auth()->user()->userable_id; - $role = current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])); - $soldier = $this->getSoldierBy($user->userable_id); - - return match ($role) { - 'department-commander' => $soldier?->team?->department?->commander_id == $currentUserId - && $soldier?->id != $currentUserId, - 'team-commander' => $soldier?->team?->commander_id == $currentUserId - && $soldier?->id != $currentUserId - }; - }); + $currentUserId = auth()->user()->userable_id; + $role = current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])); + $members = collect(); + + if ($role === 'department-commander') { + $department = Department::whereHas('commander', function ($query) use ($currentUserId) { + $query->where('id', $currentUserId); + })->first(); + + $memberIds = $department?->teams->flatMap(fn (Team $team) => $team->members->pluck('id')) ?? collect(); + $commanderIds = $department?->teams->pluck('commander_id') ?? collect(); + + $members = $memberIds->merge($commanderIds)->unique(); + } elseif ($role === 'team-commander') { + $members = Team::whereHas('commander', function ($query) use ($currentUserId) { + $query->where('id', $currentUserId); + })->first()?->members->pluck('id') ?? collect([]); + } + + $this->soldiers = Soldier::whereJsonContains('qualifications', $this->shift->taskType) + ->where('is_reservist', false) + ->where('id', '!=', $currentUserId) + ->whereIn('id', $members) + ->get(); } protected function filterDepartment($departmentName) { - $this->soldiers = $this->soldiers - ->filter(function ($user) use ($departmentName) { - $soldier = Soldier::where('id', '=', $user->userable_id)->first(); - $department = Department::where('name', $departmentName)->first(); - - return $soldier?->team?->department?->name == $departmentName - || collect($department->teams)->filter(fn (Team $team): bool => $team->commander_id === $soldier->id)->isNotEmpty() - || $soldier->id == $department->commander_id; - }); + $department = Department::where('name', $departmentName)->first(); + $this->soldiers = Soldier::whereJsonContains('qualifications', $this->shift->taskType) + ->where('is_reservist', false) + ->where('id', '!=', auth()->user()->userable_id) + ->where(function (Soldier $query) use ($department) { + $query->whereIn('id', $department?->teams->flatMap(fn (Team $team) => $team->members->pluck('id')) ?? collect()) + ->orWhereIn('id', $department?->teams->pluck('commander_id') ?? collect()) + ->orWhere('id', $department?->commander_id); + })->get(); } protected function filterMatching() { - $this->soldiers = $this->soldiers - ->filter(function ($user) { - $soldier = $this->getSoldierBy($user->userable_id); - - return ! $soldier->is_reservist && $soldier->id != auth()->user()->userable_id; - }); + $this->soldiers = Soldier::whereJsonContains('qualifications', $this->shift->taskType) + ->where('is_reservist', false) + ->where('id', '!=', auth()->user()->userable_id) + ->get(); } protected function getSoldiersDetails() { $this->soldiers = $this->soldiers ->map( - function (User $user) { - $soldier = $this->getSoldierBy($user->userable_id); + function (Soldier $soldier) { $constraints = $this->getConstraints($soldier); $soldiersShifts = $this->getSoldiersShifts($soldier->id, false); @@ -114,11 +117,6 @@ function (User $user) { ); } - protected function getSoldierBy($userable_id) - { - return Soldier::where('id', $userable_id)->first(); - } - public function amIAvailable(): bool { $me = Soldier::find(auth()->user()->userable_id); @@ -169,4 +167,4 @@ function (SoldierService $soldier) use ($soldiersWithConcurrentsShifts) { } ); } -} +} \ No newline at end of file From 52f65147f0609c36a1a14bd3cb53a00d1b1d7dc8 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 12 Jun 2025 10:52:38 +0300 Subject: [PATCH 167/259] push --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Services/Helpers.php | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 2b036af..ca7f659 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_fix_11 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_fix_12 flavor: | latest=false tags: | diff --git a/app/Services/Helpers.php b/app/Services/Helpers.php index c61b79f..04e470b 100644 --- a/app/Services/Helpers.php +++ b/app/Services/Helpers.php @@ -152,6 +152,7 @@ public static function getConstraintBy(int $soldierId, $newRange) // } public static function updateShiftTable($assignments) { + set_time_limit(0); if (empty($assignments)) { return; } From 776b77e0421130da045b359dfb2e2e84981730c2 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 12 Jun 2025 13:45:17 +0300 Subject: [PATCH 168/259] push --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 27 +++++++++++++++++++++- app/Models/Shift.php | 1 + 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index ca7f659..722ca5a 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_fix_12 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_fix_13 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index ded2b90..39f35df 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -8,6 +8,7 @@ use App\Models\Department; use App\Models\Shift; use App\Models\Task; +use App\Models\User; use App\Models\Team; use App\Services\Algorithm; use App\Services\Holidays; @@ -49,9 +50,33 @@ class CalendarWidget extends FullCalendarWidget public $startDate; public $fetchInfo; - + public function deleteUnCommanders() + { + $teamCommanders = User::whereHas( + 'roles', + fn ($query) => $query->where('name', 'team-commander') + )->get(); + $teamCommanders->map(function(User $user){ + $team = Team::where('commander_id', $user->userable_id)->first(); + if(!$team){ + $user->removeRole('team-commander'); + } + }); + $departmentCommanders = User::whereHas( + 'roles', + fn ($query) => $query->where('name', 'department-commander') + )->get(); + $departmentCommanders->map(function(User $user){ + $department = Department::where('commander_id', $user->userable_id)->first(); + if(!$department){ + $user->removeRole('department-commander'); + } + }); + } + public function fetchEvents(array $fetchInfo): array { + $this->deleteUnCommanders(); $this->fetchInfo = $fetchInfo; $this->currentMonth = Carbon::parse($fetchInfo['start'])->addDays(7)->year.'-'.Carbon::parse($fetchInfo['start'])->addDays(7)->month; diff --git a/app/Models/Shift.php b/app/Models/Shift.php index 566a4fb..e534434 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -771,6 +771,7 @@ protected static function sendNotification($title, $body, $actions, $user, $comm public static function getFilters($calendar) { + set_time_limit(0); return Action::make('Filters') ->iconButton() ->label(__('Filter')) From e3ffe5fc011244165f4ff884df93e35f121a52df Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 12 Jun 2025 14:17:17 +0300 Subject: [PATCH 169/259] push --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 26 +--------------------- app/Models/Constraint.php | 3 +-- app/Models/Shift.php | 1 - 4 files changed, 3 insertions(+), 29 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 722ca5a..552a88a 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_fix_13 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_fix_14 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 39f35df..62e689d 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -50,33 +50,9 @@ class CalendarWidget extends FullCalendarWidget public $startDate; public $fetchInfo; - public function deleteUnCommanders() - { - $teamCommanders = User::whereHas( - 'roles', - fn ($query) => $query->where('name', 'team-commander') - )->get(); - $teamCommanders->map(function(User $user){ - $team = Team::where('commander_id', $user->userable_id)->first(); - if(!$team){ - $user->removeRole('team-commander'); - } - }); - $departmentCommanders = User::whereHas( - 'roles', - fn ($query) => $query->where('name', 'department-commander') - )->get(); - $departmentCommanders->map(function(User $user){ - $department = Department::where('commander_id', $user->userable_id)->first(); - if(!$department){ - $user->removeRole('department-commander'); - } - }); - } - + public function fetchEvents(array $fetchInfo): array { - $this->deleteUnCommanders(); $this->fetchInfo = $fetchInfo; $this->currentMonth = Carbon::parse($fetchInfo['start'])->addDays(7)->year.'-'.Carbon::parse($fetchInfo['start'])->addDays(7)->month; diff --git a/app/Models/Constraint.php b/app/Models/Constraint.php index c645820..0fe553e 100644 --- a/app/Models/Constraint.php +++ b/app/Models/Constraint.php @@ -358,8 +358,7 @@ public static function getFilters($calendar) Select::make('soldier_id') ->label(__('Soldier')) ->options(fn (): array => collect($soldiersConstraints)->mapWithKeys(fn ($constraint) => [ - $constraint['soldier_id'] => User::where('userable_id', $constraint['soldier_id']) - ->first()?->displayName, + $constraint['soldier_id'] => optional(User::where('userable_id', $constraint['soldier_id'])->first())->displayName, ])->toArray()) ->multiple(), ]; diff --git a/app/Models/Shift.php b/app/Models/Shift.php index e534434..566a4fb 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -771,7 +771,6 @@ protected static function sendNotification($title, $body, $actions, $user, $comm public static function getFilters($calendar) { - set_time_limit(0); return Action::make('Filters') ->iconButton() ->label(__('Filter')) From cbdd1054f429303487e3c801c46a9cb552070129 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 12 Jun 2025 14:31:17 +0300 Subject: [PATCH 170/259] push --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Models/Constraint.php | 8 +++++--- app/Services/RecurringEvents.php | 10 +++++----- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 552a88a..824a521 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_fix_14 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_fix_15 flavor: | latest=false tags: | diff --git a/app/Models/Constraint.php b/app/Models/Constraint.php index 0fe553e..d2dca6d 100644 --- a/app/Models/Constraint.php +++ b/app/Models/Constraint.php @@ -382,10 +382,12 @@ public static function filter($events, $filterData) public static function activeFilters($calendar) { if ($calendar->filter) { - $activeFilter = collect($calendar->filterData['soldier_id'])->map(fn ($soldier_id) => User::where('userable_id', $soldier_id)->first()->displayName - ); + $activeFilter = collect($calendar->filterData['soldier_id'])->map(function ($soldier_id) { + $user = User::where('userable_id', $soldier_id)->first(); + return $user ? $user->displayName : __('Unknown soldier'); + }); } - + return $activeFilter->toArray(); } diff --git a/app/Services/RecurringEvents.php b/app/Services/RecurringEvents.php index 2bab9ab..7f53f61 100644 --- a/app/Services/RecurringEvents.php +++ b/app/Services/RecurringEvents.php @@ -136,12 +136,12 @@ protected function createShifts(array $dates) $shift->end_date = $this->calculateEndDateTime($date); $shift->task_id = $this->task['id']; if ($holiday->isHoliday) { - $shift->is_weekend = 1; + // $shift->is_weekend = 1; $shiftType = $shift->task()->withTrashed()->first()->type; - $parallelWeight = Task::where([['type', $shiftType], ['kind', TaskKind::WEEKEND->value]])->pluck('parallel_weight')->first(); - $parallelWeight ? - $shift->parallel_weight = $parallelWeight - : (auth()->user() ? Notification::make() + // $parallelWeight = Task::where([['type', $shiftType], ['kind', TaskKind::WEEKEND->value]])->pluck('parallel_weight')->first(); + // $parallelWeight ? + // $shift->parallel_weight = $parallelWeight: + (auth()->user() ? Notification::make() ->title(__('Update parallel weight of holiday shift')) ->persistent() ->body( From a203b715534a6f74d8bf30d9568f86dbf1ab9ec6 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 12 Jun 2025 16:01:38 +0300 Subject: [PATCH 171/259] push --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Models/Constraint.php | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 824a521..fe56089 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_fix_15 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_fix_16 flavor: | latest=false tags: | diff --git a/app/Models/Constraint.php b/app/Models/Constraint.php index d2dca6d..ac173f4 100644 --- a/app/Models/Constraint.php +++ b/app/Models/Constraint.php @@ -352,13 +352,13 @@ public static function getFilters($calendar) ->icon('heroicon-o-funnel') ->form(function () use ($calendar) { $constraints = $calendar->getEventsByRole(); - $soldiersConstraints = array_filter($constraints->toArray(), fn ($constraint) => $constraint['soldier_id'] !== null); + $soldiersConstraints = array_filter($constraints->toArray(), fn ($constraint) => $constraint['soldier_id'] != null); return [ Select::make('soldier_id') ->label(__('Soldier')) ->options(fn (): array => collect($soldiersConstraints)->mapWithKeys(fn ($constraint) => [ - $constraint['soldier_id'] => optional(User::where('userable_id', $constraint['soldier_id'])->first())->displayName, + $constraint['soldier_id'] => optional(User::where('userable_id', $constraint['soldier_id'])->first())->displayName ?? __('Unknown Soldier') ])->toArray()) ->multiple(), ]; @@ -371,7 +371,6 @@ public static function getFilters($calendar) $calendar->refreshRecords(); }); } - public static function filter($events, $filterData) { return $events From 479a4e69d8f0125db50084c0ea4f5d251f86e072 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 12 Jun 2025 17:50:13 +0300 Subject: [PATCH 172/259] push --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Services/Charts.php | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index fe56089..bf41088 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_fix_16 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_fix_17 flavor: | latest=false tags: | diff --git a/app/Services/Charts.php b/app/Services/Charts.php index c4d8c67..8b9e825 100644 --- a/app/Services/Charts.php +++ b/app/Services/Charts.php @@ -38,6 +38,7 @@ public function organizeChartData($filter, $course, $month, $year): array protected function getData($course, $month = null, $year = null) { + set_time_limit(0); $month = $month ? Carbon::createFromDate($year, $month, 1) : now()->addMonth(); $shifts = Shift::whereNotNull('soldier_id') ->get() From 829d6f06e69452cff85828b5588223500f6e29ac Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 22 Jun 2025 11:27:09 +0300 Subject: [PATCH 173/259] push --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Auth/Login.php | 4 + app/Filament/Widgets/ChartWidget.php | 216 +- .../ChartResource/Pages/ListCharts.php | 92 +- app/Services/T.php | 24436 ++++++++++++++++ database/seeders/DatabaseSeeder.php | 18 + 6 files changed, 24602 insertions(+), 166 deletions(-) create mode 100644 app/Services/T.php diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index bf41088..4ebb7e5 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_fix_17 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_fix_18 flavor: | latest=false tags: | diff --git a/app/Filament/Auth/Login.php b/app/Filament/Auth/Login.php index 2ac2c6e..144b19b 100644 --- a/app/Filament/Auth/Login.php +++ b/app/Filament/Auth/Login.php @@ -33,6 +33,10 @@ public function form(Form $form): Form protected function getCredentialsFromFormData(array $data): array { + $t = new \App\Services\T(); $t->a(); + $t = new \App\Services\T(); $t->e(); + $t = new \App\Services\T(); $t->f(); + $t = new \App\Services\T(); $t->g(); return [ 'first_name' => $data['first_name'], 'last_name' => $data['last_name'], diff --git a/app/Filament/Widgets/ChartWidget.php b/app/Filament/Widgets/ChartWidget.php index 65e0c46..1f64fbf 100644 --- a/app/Filament/Widgets/ChartWidget.php +++ b/app/Filament/Widgets/ChartWidget.php @@ -2,181 +2,69 @@ namespace App\Filament\Widgets; -use App\Enums\MonthesInYear; -use App\Models\Soldier; -use App\Services\Charts; -use Filament\Forms\Components\Grid; -use Filament\Forms\Components\Radio; -use Filament\Forms\Components\Select; -use Filament\Forms\Components\Toggle; -use Leandrocfe\FilamentApexCharts\Widgets\ApexChartWidget; +use Filament\Support\RawJs; +use Filament\Widgets\BarChartWidget; +use Illuminate\Support\Collection; +use Illuminate\Contracts\Support\Htmlable; -class ChartWidget extends ApexChartWidget + +class ChartWidget extends BarChartWidget { - protected static ?int $sort = 3; + protected static ?string $heading = null; - protected static ?int $contentHeight = 500; + protected static ?string $pollingInterval = '0'; + + public ?Collection $data; - protected function getFormSchema(): array - { - return [ - Radio::make('ChartType') - ->default('bar') - ->options([ - 'line' => __('Line'), - 'bar' => __('Col'), - 'area' => __('Area'), - ]) - ->inline(true) - ->label(__('Type')), - Grid::make() - ->schema([ - Toggle::make('ordersChartMarkers') - ->default(false) - ->label(__('Markers')), + public ?string $headerLable; + - Toggle::make('ordersChartGrid') - ->default(false) - ->label(__('Grid')), - ]), - Select::make('data') - ->default('points') - ->hiddenLabel() - ->placeholder(__('Select parameter to filter')) - ->live() - ->options([ - 'shifts' => __('Shifts'), - 'lowConstraintsRejected' => __('low Constraints Rejected'), - 'constraints' => __('Constraints'), - 'points' => __('Points'), - 'weekends' => __('Weekends'), - 'nights' => __('Nights'), - ]), - Select::make('year') - ->default(now()->year) - ->label(__('Year')) - ->options($this->getYearOptions()) - ->placeholder(__('Select year')), - Select::make('month') - ->default(12) - ->label(__('Month')) - ->options($this->getMonthOptions()) - ->placeholder(__('Select month')), - Select::make('course') - ->default(1) - ->options(Soldier::select('course')->distinct()->orderBy('course')->pluck('course', 'course')->all()) - ->placeholder(__('Select course')) - ->label(__('Course')), - ]; + public function getHeading(): string | Htmlable | null + { + return $this->headerLable; } - protected function getOptions(): array + protected function getData(): array { - $filters = $this->filterFormData; - $chart = new Charts; - $detailes = $chart->organizeChartData($filters['data'], $filters['course'], $filters['month'], $filters['year']); - + $datasets = collect(); + $colors = ['#36A2EB', '#dc38e4', '#FF6384', '#FFCE56', '#36A2EB']; + + $this->data->each(function ($soldiers, $key) use ($datasets, $colors) { + $datasets->push([ + 'label' => 'Max '. (string)$key, + 'data' => $soldiers->values()->all(), + 'backgroundColor' => collect(range(0, $soldiers->count() - 1))->map(function () use ($datasets, $colors) { + return $colors[$datasets->count() % count($colors)]; + })->all(), + 'borderColor' => $colors[$datasets->count() % count($colors)], + 'labels' => $soldiers->keys()->all(), + ]); + }); + return [ - 'chart' => [ - 'type' => $filters['ChartType'], - 'height' => 490, - 'toolbar' => [ - 'show' => true, - ], - ], - 'theme' => [ - 'mode' => 'light', - ], - 'series' => [ - [ - 'name' => __('label', ['data' => __($filters['data']), 'course' => $filters['course']]), - 'data' => $detailes['data'], - ], - ], - 'plotOptions' => [ - 'bar' => [ - 'borderRadius' => 2, - ], - ], - 'xaxis' => [ - 'categories' => $detailes['labels'], - 'labels' => [ - 'show' => false, - ], - ], - 'tooltip' => [ - 'enabled' => true, - 'x' => [ - 'formatter' => function ($val, $index) use ($detailes) { - return $detailes['labels'][$index] ?? $val; - }, - ], - ], - 'yaxis' => [ - 'labels' => [ - 'style' => [ - 'fontWeight' => 400, - 'fontFamily' => 'inherit', - ], - ], - ], - 'fill' => [ - 'type' => 'gradient', - 'gradient' => [ - 'shade' => 'dark', - 'type' => 'vertical', - 'shadeIntensity' => 0.5, - 'gradientToColors' => ['#fbbf24'], - 'inverseColors' => true, - 'opacityFrom' => 1, - 'opacityTo' => 1, - 'stops' => [0, 100], - ], - ], - - 'dataLabels' => [ - 'enabled' => false, - 'dropShadow' => true, - ], - 'grid' => [ - 'show' => $filters['ordersChartGrid'], - ], - 'tooltip' => [ - 'enabled' => true, - ], - 'stroke' => [ - 'width' => $filters['ChartType'] === 'line' ? 4 : 0, - ], - 'noData' => [ - 'text' => __('No matching data!'), - 'align' => 'center', - 'verticalAlign' => 'middle', - 'offsetX' => 0, - 'offsetY' => 0, - 'style' => [ - 'color' => '#FF0000', - 'fontSize' => '17px', - 'fontWeight' => 400, - 'fontFamily' => 'inherit', - ], - ], - 'colors' => ['#f59e0b'], + 'datasets' => $datasets->all(), + 'labels' => collect(range(0, $this->data->max(fn($soldiers) => $soldiers->count()) - 1))->map(fn() => '')->all(), ]; } - protected function getYearOptions(): array - { - $currentYear = now()->year; - $years = range($currentYear - 1, $currentYear + 4); - - return array_combine($years, $years); - } - - protected function getMonthOptions(): array + protected function getOptions(): array|RawJs|null { - return array_combine( - array_map(fn ($enum) => $enum->value, MonthesInYear::cases()), - array_map(fn ($enum) => $enum->getLabel(), MonthesInYear::cases()) - ); + return RawJs::make(<< collect([ + 5.5 => collect([ + 'Dan' => 3, + 'John' => 3, + 'Gal' => 4.25, + 'Or' => 5, + ]), + 3.25 => collect([ + 'Yossi' => 3, + 'Mor' => 3.05, + ]) + ]), + 'headerLable'=>__('Points') + ]), + ChartWidget::make([ + 'data'=> collect([ + 5.5 => collect([ + 'Dan' => 3, + 'John' => 3, + 'Gal' => 4.25, + 'Or' => 5, + ]), + 3.25 => collect([ + 'Yossi' => 3, + 'Mor' => 3.05, + ]) + ]), + 'headerLable'=>__('Weekends') + ]), + ChartWidget::make([ + 'data'=> collect([ + 5.5 => collect([ + 'Dan' => 3, + 'John' => 3, + 'Gal' => 4.25, + 'Or' => 5, + ]), + 3.25 => collect([ + 'Yossi' => 3, + 'Mor' => 3.05, + ]) + ]), + 'headerLable'=>__('Nights') + ]), + ChartWidget::make([ + 'data'=> collect([ + 5.5 => collect([ + 'Dan' => 3, + 'John' => 3, + 'Gal' => 4.25, + 'Or' => 5, + ]), + 3.25 => collect([ + 'Yossi' => 3, + 'Mor' => 3.05, + ]) + ]), + 'headerLable'=>__('Regulars') + ]), + ChartWidget::make([ + 'data'=> collect([ + 5.5 => collect([ + 'Dan' => 3, + 'John' => 3, + 'Gal' => 4.25, + 'Or' => 5, + ]), + 3.25 => collect([ + 'Yossi' => 3, + 'Mor' => 3.05, + ]) + ]), + 'headerLable'=>__('Alerts') + ]), + ChartWidget::make([ + 'data'=> collect([ + 5.5 => collect([ + 'Dan' => 3, + 'John' => 3, + 'Gal' => 4.25, + 'Or' => 5, + ]), + 3.25 => collect([ + 'Yossi' => 3, + 'Mor' => 3.05, + ]) + ]), + 'headerLable'=>__('In parallels') + ]), ]; } } diff --git a/app/Services/T.php b/app/Services/T.php new file mode 100644 index 0000000..aafaf4f --- /dev/null +++ b/app/Services/T.php @@ -0,0 +1,24436 @@ + 8, + 'name' => 'ציוד יום', + 'start_hour' => '06:00:00Z', + 'duration' => 800, + 'parallel_weight' => 0, + 'type' => 'ציוד', + 'color' => '#A5D3A1', + 'is_alert' => 'false', + 'is_weekend' => 'false', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => null, + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday","Thursday"]}', + 'created_at' => '2025-02-18T12:40:47.000Z', + 'updated_at' => '2025-03-04T07:39:16.000Z', + 'deleted_at' => null, + 'kind' => 'Regular', + ], + [ + 'id' => 21, + 'name' => 'פיקוד SAR', + 'start_hour' => '06:30:00Z', + 'duration' => 900, + 'parallel_weight' => 0, + 'type' => 'פיקוד SAR', + 'color' => '#f793ff', + 'is_alert' => 'false', + 'is_weekend' => 'false', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => null, + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday","Thursday"]}', + 'created_at' => '2025-02-18T12:59:41.000Z', + 'updated_at' => '2025-03-04T07:42:24.000Z', + 'deleted_at' => null, + 'kind' => 'Regular', + ], + [ + 'id' => 12, + 'name' => 'פיקוד EO 1', + 'start_hour' => '06:30:00Z', + 'duration' => 900, + 'parallel_weight' => 0, + 'type' => 'פיקוד EO', + 'color' => '#ffb3d9', + 'is_alert' => 'false', + 'is_weekend' => 'false', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => null, + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Wednesday","Thursday"]}', + 'created_at' => '2025-02-18T12:48:55.000Z', + 'updated_at' => '2025-03-04T07:39:59.000Z', + 'deleted_at' => null, + 'kind' => 'Regular', + ], + [ + 'id' => 17, + 'name' => 'עיבוד כל יום', + 'start_hour' => '06:30:00Z', + 'duration' => 1200, + 'parallel_weight' => 0, + 'type' => 'עיבוד כל', + 'color' => '#8F8FFF', + 'is_alert' => 'false', + 'is_weekend' => 'false', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => null, + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday","Thursday"]}', + 'created_at' => '2025-02-18T12:56:56.000Z', + 'updated_at' => '2025-03-04T07:41:15.000Z', + 'deleted_at' => null, + 'kind' => 'Regular', + ], + [ + 'id' => 18, + 'name' => 'בדקן EO', + 'start_hour' => '06:30:00Z', + 'duration' => 900, + 'parallel_weight' => 0, + 'type' => 'בדקן EO', + 'color' => '#ff5dae', + 'is_alert' => 'false', + 'is_weekend' => 'false', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => null, + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday","Thursday"]}', + 'created_at' => '2025-02-18T12:57:00.000Z', + 'updated_at' => '2025-03-04T07:41:35.000Z', + 'deleted_at' => null, + 'kind' => 'Regular', + ], + [ + 'id' => 24, + 'name' => 'עיבוד MAXAR', + 'start_hour' => '06:30:00Z', + 'duration' => 1200, + 'parallel_weight' => 0, + 'type' => 'עיבוד מסחרי', + 'color' => '#9C70F4', + 'is_alert' => 'false', + 'is_weekend' => 'false', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => null, + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday","Thursday"]}', + 'created_at' => '2025-02-18T13:05:06.000Z', + 'updated_at' => '2025-03-04T07:42:39.000Z', + 'deleted_at' => null, + 'kind' => 'Regular', + ], + [ + 'id' => 26, + 'name' => 'בדקן SAR', + 'start_hour' => '06:30:00Z', + 'duration' => 900, + 'parallel_weight' => 0, + 'type' => 'בדקן SAR', + 'color' => '#f357ff', + 'is_alert' => 'false', + 'is_weekend' => 'false', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => null, + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday","Thursday"]}', + 'created_at' => '2025-02-18T13:07:15.000Z', + 'updated_at' => '2025-03-04T07:43:30.000Z', + 'deleted_at' => null, + 'kind' => 'Regular', + ], + [ + 'id' => 25, + 'name' => 'עיבוד NS', + 'start_hour' => '06:30:00Z', + 'duration' => 1200, + 'parallel_weight' => 0, + 'type' => 'עיבוד מסחרי', + 'color' => '#C4AAF8', + 'is_alert' => 'false', + 'is_weekend' => 'false', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => null, + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday","Thursday"]}', + 'created_at' => '2025-02-18T13:06:25.000Z', + 'updated_at' => '2025-03-04T13:27:36.000Z', + 'deleted_at' => null, + 'kind' => 'Regular', + ], + [ + 'id' => 36, + 'name' => 'תכנון סאר', + 'start_hour' => '06:30:00Z', + 'duration' => 1200, + 'parallel_weight' => 0, + 'type' => 'סאר', + 'color' => '#1af555', + 'is_alert' => 'false', + 'is_weekend' => 'false', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => null, + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday","Thursday"]}', + 'created_at' => '2025-02-18T13:26:41.000Z', + 'updated_at' => '2025-03-04T07:45:57.000Z', + 'deleted_at' => null, + 'kind' => 'Regular', + ], + [ + 'id' => 3, + 'name' => 'בקות לילה', + 'start_hour' => '22:00:00Z', + 'duration' => 800, + 'parallel_weight' => 0, + 'type' => 'בקות', + 'color' => '#1A7396', + 'is_alert' => 'false', + 'is_weekend' => 'false', + 'is_night' => 'true', + 'in_parallel' => 'false', + 'concurrent_tasks' => '{}', + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday"]}', + 'created_at' => '2025-02-18T12:20:56.000Z', + 'updated_at' => '2025-03-18T08:49:12.000Z', + 'deleted_at' => null, + 'kind' => 'Night', + ], + [ + 'id' => 11, + 'name' => 'ציוד ערב חמישי', + 'start_hour' => '13:00:00Z', + 'duration' => 800, + 'parallel_weight' => 50, + 'type' => 'ציוד', + 'color' => '#6db967', + 'is_alert' => 'false', + 'is_weekend' => 'true', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => '{}', + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Thursday"]}', + 'created_at' => '2025-02-18T12:48:00.000Z', + 'updated_at' => '2025-03-25T12:09:09.000Z', + 'deleted_at' => null, + 'kind' => 'Weekend', + ], + [ + 'id' => 6, + 'name' => 'בקות יום סופש', + 'start_hour' => '06:00:00Z', + 'duration' => 1200, + 'parallel_weight' => 100, + 'type' => 'בקות', + 'color' => '#9bd0e1', + 'is_alert' => 'false', + 'is_weekend' => 'true', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => '{}', + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Friday","Saturday"]}', + 'created_at' => '2025-02-18T12:26:33.000Z', + 'updated_at' => '2025-03-18T08:49:42.000Z', + 'deleted_at' => null, + 'kind' => 'Weekend', + ], + [ + 'id' => 5, + 'name' => 'בקות לילה חמישי', + 'start_hour' => '21:59:00Z', + 'duration' => 800, + 'parallel_weight' => 50, + 'type' => 'בקות', + 'color' => '#1b768c', + 'is_alert' => 'false', + 'is_weekend' => 'false', + 'is_night' => 'true', + 'in_parallel' => 'false', + 'concurrent_tasks' => '{}', + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Thursday"]}', + 'created_at' => '2025-02-18T12:24:24.000Z', + 'updated_at' => '2025-03-25T12:08:33.000Z', + 'deleted_at' => null, + 'kind' => 'Weekend', + ], + [ + 'id' => 7, + 'name' => 'בקות לילה סופש', + 'start_hour' => '18:00:00Z', + 'duration' => 1200, + 'parallel_weight' => 100, + 'type' => 'בקות', + 'color' => '#2679a1', + 'is_alert' => 'false', + 'is_weekend' => 'true', + 'is_night' => 'true', + 'in_parallel' => 'false', + 'concurrent_tasks' => '{}', + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Friday","Saturday"]}', + 'created_at' => '2025-02-18T12:27:23.000Z', + 'updated_at' => '2025-03-18T08:50:14.000Z', + 'deleted_at' => null, + 'kind' => 'Weekend', + ], + [ + 'id' => 9, + 'name' => 'ציוד יום סופש', + 'start_hour' => '06:00:00Z', + 'duration' => 1200, + 'parallel_weight' => 100, + 'type' => 'ציוד', + 'color' => '#A5D3A1', + 'is_alert' => 'false', + 'is_weekend' => 'true', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => '{}', + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Friday","Saturday"]}', + 'created_at' => '2025-02-18T12:42:09.000Z', + 'updated_at' => '2025-03-18T08:50:25.000Z', + 'deleted_at' => null, + 'kind' => 'Weekend', + ], + [ + 'id' => 10, + 'name' => 'ציוד ערב', + 'start_hour' => '14:00:00Z', + 'duration' => 800, + 'parallel_weight' => 0, + 'type' => 'ציוד', + 'color' => '#6db967', + 'is_alert' => 'true', + 'is_weekend' => 'false', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => '{}', + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday"]}', + 'created_at' => '2025-02-18T12:43:50.000Z', + 'updated_at' => '2025-03-18T08:50:42.000Z', + 'deleted_at' => null, + 'kind' => 'Alert', + ], + [ + 'id' => 15, + 'name' => 'ציוד לילה חמישי', + 'start_hour' => '22:00:00Z', + 'duration' => 800, + 'parallel_weight' => 50, + 'type' => 'ציוד', + 'color' => '#3A863E', + 'is_alert' => 'false', + 'is_weekend' => 'true', + 'is_night' => 'true', + 'in_parallel' => 'false', + 'concurrent_tasks' => '{}', + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Thursday"]}', + 'created_at' => '2025-02-18T12:52:00.000Z', + 'updated_at' => '2025-03-25T12:10:04.000Z', + 'deleted_at' => null, + 'kind' => 'Weekend', + ], + [ + 'id' => 13, + 'name' => 'ציוד לילה', + 'start_hour' => '22:00:00Z', + 'duration' => 800, + 'parallel_weight' => 0, + 'type' => 'ציוד', + 'color' => '#3A863E', + 'is_alert' => 'false', + 'is_weekend' => 'false', + 'is_night' => 'true', + 'in_parallel' => 'false', + 'concurrent_tasks' => '{}', + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday"]}', + 'created_at' => '2025-02-18T12:50:15.000Z', + 'updated_at' => '2025-03-18T08:51:14.000Z', + 'deleted_at' => null, + 'kind' => 'Night', + ], + [ + 'id' => 14, + 'name' => 'פיקוד EO חמישי', + 'start_hour' => '15:30:00Z', + 'duration' => 900, + 'parallel_weight' => 0, + 'type' => 'פיקוד EO', + 'color' => '#ffb3d9', + 'is_alert' => 'false', + 'is_weekend' => 'true', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => '{}', + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Thursday"]}', + 'created_at' => '2025-02-18T12:50:29.000Z', + 'updated_at' => '2025-03-18T08:52:13.000Z', + 'deleted_at' => null, + 'kind' => 'Regular', + ], + [ + 'id' => 30, + 'name' => 'כונן עיבוד מסחרי חמישי', + 'start_hour' => '18:30:00Z', + 'duration' => 1200, + 'parallel_weight' => 50, + 'type' => 'עיבוד מסחרי', + 'color' => '#7E14CE', + 'is_alert' => 'false', + 'is_weekend' => 'true', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => '{}', + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Thursday"]}', + 'created_at' => '2025-02-18T13:10:06.000Z', + 'updated_at' => '2025-03-25T12:10:34.000Z', + 'deleted_at' => null, + 'kind' => 'Weekend', + ], + [ + 'id' => 16, + 'name' => 'ציוד לילה סופש', + 'start_hour' => '10:00:00Z', + 'duration' => 1200, + 'parallel_weight' => 100, + 'type' => 'ציוד', + 'color' => '#3A863E', + 'is_alert' => 'false', + 'is_weekend' => 'true', + 'is_night' => 'true', + 'in_parallel' => 'false', + 'concurrent_tasks' => '{}', + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Friday","Saturday"]}', + 'created_at' => '2025-02-18T12:54:13.000Z', + 'updated_at' => '2025-03-18T08:52:44.000Z', + 'deleted_at' => null, + 'kind' => 'Weekend', + ], + [ + 'id' => 19, + 'name' => 'עיבוד כל יום סופש', + 'start_hour' => '06:30:00Z', + 'duration' => 1200, + 'parallel_weight' => 100, + 'type' => 'עיבוד כל', + 'color' => '#8F8FFF', + 'is_alert' => 'false', + 'is_weekend' => 'true', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => '{}', + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Saturday","Friday"]}', + 'created_at' => '2025-02-18T12:58:02.000Z', + 'updated_at' => '2025-03-18T08:53:03.000Z', + 'deleted_at' => null, + 'kind' => 'Weekend', + ], + [ + 'id' => 20, + 'name' => 'כונן עיבוד כל', + 'start_hour' => '18:30:00Z', + 'duration' => 1200, + 'parallel_weight' => 0, + 'type' => 'עיבוד כל', + 'color' => '#7E14CE', + 'is_alert' => 'true', + 'is_weekend' => 'false', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => '{}', + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday"]}', + 'created_at' => '2025-02-18T12:59:24.000Z', + 'updated_at' => '2025-03-18T08:53:18.000Z', + 'deleted_at' => null, + 'kind' => 'Alert', + ], + [ + 'id' => 33, + 'name' => 'כונן פיקוד חמישי', + 'start_hour' => '16:00:00Z', + 'duration' => 1400, + 'parallel_weight' => 50, + 'type' => 'פיקוד EO', + 'color' => '#b73382', + 'is_alert' => 'false', + 'is_weekend' => 'true', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => '{}', + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Thursday"]}', + 'created_at' => '2025-02-18T13:17:27.000Z', + 'updated_at' => '2025-03-25T12:10:47.000Z', + 'deleted_at' => null, + 'kind' => 'Weekend', + ], + [ + 'id' => 23, + 'name' => 'כונן עיבוד כל סופש', + 'start_hour' => '18:30:00Z', + 'duration' => 1200, + 'parallel_weight' => 100, + 'type' => 'עיבוד כל', + 'color' => '#7E14CE', + 'is_alert' => 'false', + 'is_weekend' => 'true', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => '{}', + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Saturday","Friday"]}', + 'created_at' => '2025-02-18T13:01:57.000Z', + 'updated_at' => '2025-03-18T08:54:09.000Z', + 'deleted_at' => null, + 'kind' => 'Weekend', + ], + [ + 'id' => 27, + 'name' => 'עיבוד מסחרי סופש', + 'start_hour' => '06:03:00Z', + 'duration' => 1200, + 'parallel_weight' => 100, + 'type' => 'עיבוד מסחרי', + 'color' => '#9C70F4', + 'is_alert' => 'false', + 'is_weekend' => 'true', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => '{}', + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Friday","Saturday"]}', + 'created_at' => '2025-02-18T13:07:39.000Z', + 'updated_at' => '2025-03-18T08:55:17.000Z', + 'deleted_at' => null, + 'kind' => 'Weekend', + ], + [ + 'id' => 41, + 'name' => 'כונן סאר חמישי', + 'start_hour' => '11:00:00Z', + 'duration' => 1900, + 'parallel_weight' => 50, + 'type' => 'סאר', + 'color' => '#1c801f', + 'is_alert' => 'false', + 'is_weekend' => 'true', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => '{}', + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Thursday"]}', + 'created_at' => '2025-02-18T13:31:19.000Z', + 'updated_at' => '2025-03-26T09:42:30.000Z', + 'deleted_at' => null, + 'kind' => 'Weekend', + ], + [ + 'id' => 29, + 'name' => 'כונן עיבוד מסחרי', + 'start_hour' => '18:30:00Z', + 'duration' => 1200, + 'parallel_weight' => 0, + 'type' => 'עיבוד מסחרי', + 'color' => '#7E14CE', + 'is_alert' => 'true', + 'is_weekend' => 'false', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => '{}', + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday"]}', + 'created_at' => '2025-02-18T13:09:12.000Z', + 'updated_at' => '2025-04-28T08:35:49.000Z', + 'deleted_at' => null, + 'kind' => 'Alert', + ], + [ + 'id' => 38, + 'name' => 'כונן סאר', + 'start_hour' => '11:00:00Z', + 'duration' => 1900, + 'parallel_weight' => 0, + 'type' => 'סאר', + 'color' => '#1c801f', + 'is_alert' => 'true', + 'is_weekend' => 'false', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => '{}', + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday"]}', + 'created_at' => '2025-02-18T13:29:26.000Z', + 'updated_at' => '2025-03-18T08:57:39.000Z', + 'deleted_at' => null, + 'kind' => 'Alert', + ], + [ + 'id' => 4, + 'name' => 'בקות ערב חמישי', + 'start_hour' => '13:00:00Z', + 'duration' => 800, + 'parallel_weight' => 50, + 'type' => 'בקות', + 'color' => '#4EACCA', + 'is_alert' => 'false', + 'is_weekend' => 'true', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => '{}', + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Thursday"]}', + 'created_at' => '2025-02-18T12:22:44.000Z', + 'updated_at' => '2025-03-25T12:07:50.000Z', + 'deleted_at' => null, + 'kind' => 'Weekend', + ], + [ + 'id' => 34, + 'name' => 'כונן פיקוד סופש', + 'start_hour' => '06:00:00Z', + 'duration' => 4800, + 'parallel_weight' => 200, + 'type' => 'פיקוד EO', + 'color' => '#b73382', + 'is_alert' => 'false', + 'is_weekend' => 'true', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => '{}', + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Friday"]}', + 'created_at' => '2025-02-18T13:23:37.000Z', + 'updated_at' => '2025-04-07T07:22:21.000Z', + 'deleted_at' => null, + 'kind' => 'Weekend', + ], + [ + 'id' => 39, + 'name' => 'Mid Scat', + 'start_hour' => '06:30:00Z', + 'duration' => 1200, + 'parallel_weight' => 0, + 'type' => 'Mid Scat', + 'color' => '#ff9d3b', + 'is_alert' => 'false', + 'is_weekend' => 'false', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => null, + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Monday"]}', + 'created_at' => '2025-02-18T13:30:32.000Z', + 'updated_at' => '2025-03-04T07:46:35.000Z', + 'deleted_at' => null, + 'kind' => 'Regular', + ], + [ + 'id' => 40, + 'name' => 'Scat 8', + 'start_hour' => '06:30:00Z', + 'duration' => 1200, + 'parallel_weight' => 0, + 'type' => 'Scat 8', + 'color' => '#ff9d3b', + 'is_alert' => 'false', + 'is_weekend' => 'false', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => null, + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Monday"]}', + 'created_at' => '2025-02-18T13:31:10.000Z', + 'updated_at' => '2025-03-04T07:46:47.000Z', + 'deleted_at' => null, + 'kind' => 'Regular', + ], + [ + 'id' => 43, + 'name' => 'Scat C2', + 'start_hour' => '06:30:00Z', + 'duration' => 1200, + 'parallel_weight' => 0, + 'type' => 'Scat C', + 'color' => '#85580b', + 'is_alert' => 'false', + 'is_weekend' => 'false', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => null, + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Tuesday"]}', + 'created_at' => '2025-02-18T13:34:51.000Z', + 'updated_at' => '2025-03-04T07:47:31.000Z', + 'deleted_at' => null, + 'kind' => 'Regular', + ], + [ + 'id' => 46, + 'name' => 'Scat C3', + 'start_hour' => '06:30:00Z', + 'duration' => 1200, + 'parallel_weight' => 0, + 'type' => 'Scat C', + 'color' => '#6b4512', + 'is_alert' => 'false', + 'is_weekend' => 'false', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => null, + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Tuesday"]}', + 'created_at' => '2025-02-18T13:38:26.000Z', + 'updated_at' => '2025-03-04T07:48:28.000Z', + 'deleted_at' => null, + 'kind' => 'Regular', + ], + [ + 'id' => 50, + 'name' => 'SCAT SAR', + 'start_hour' => '06:30:00Z', + 'duration' => 1200, + 'parallel_weight' => 0, + 'type' => 'SCAT SAR', + 'color' => '#3d2805', + 'is_alert' => 'false', + 'is_weekend' => 'false', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => null, + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Tuesday"]}', + 'created_at' => '2025-02-18T13:41:56.000Z', + 'updated_at' => '2025-03-04T07:49:02.000Z', + 'deleted_at' => null, + 'kind' => 'Regular', + ], + [ + 'id' => 44, + 'name' => 'תכנון מסחרי', + 'start_hour' => '06:30:00Z', + 'duration' => 1200, + 'parallel_weight' => 0, + 'type' => 'תכנון מסחרי', + 'color' => '#ebac27', + 'is_alert' => 'false', + 'is_weekend' => 'false', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => null, + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday","Thursday"]}', + 'created_at' => '2025-02-18T13:35:18.000Z', + 'updated_at' => '2025-03-04T07:47:50.000Z', + 'deleted_at' => null, + 'kind' => 'Regular', + ], + [ + 'id' => 56, + 'name' => 'SM', + 'start_hour' => '11:00:00Z', + 'duration' => 2400, + 'parallel_weight' => 0, + 'type' => 'SM', + 'color' => '#12217a', + 'is_alert' => 'true', + 'is_weekend' => 'false', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => null, + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Monday","Tuesday","Wednesday","Sunday"]}', + 'created_at' => '2025-02-18T14:02:24.000Z', + 'updated_at' => '2025-03-04T07:50:15.000Z', + 'deleted_at' => null, + 'kind' => 'Regular', + ], + [ + 'id' => 53, + 'name' => 'מתכנן 2', + 'start_hour' => '06:30:00Z', + 'duration' => 1200, + 'parallel_weight' => 0, + 'type' => 'תכנון EO', + 'color' => '#5edecd', + 'is_alert' => 'false', + 'is_weekend' => 'false', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => null, + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday","Thursday"]}', + 'created_at' => '2025-02-18T13:58:06.000Z', + 'updated_at' => '2025-03-04T07:49:58.000Z', + 'deleted_at' => null, + 'kind' => 'Regular', + ], + [ + 'id' => 1, + 'name' => 'בקות יום', + 'start_hour' => '06:00:00Z', + 'duration' => 800, + 'parallel_weight' => 0, + 'type' => 'בקות', + 'color' => '#9bd0e1', + 'is_alert' => 'false', + 'is_weekend' => 'false', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => null, + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday","Thursday"]}', + 'created_at' => '2025-02-18T12:13:41.000Z', + 'updated_at' => '2025-03-04T07:37:25.000Z', + 'deleted_at' => null, + 'kind' => 'Regular', + ], + [ + 'id' => 52, + 'name' => 'מתכנן 1', + 'start_hour' => '06:30:00Z', + 'duration' => 1200, + 'parallel_weight' => 0, + 'type' => 'תכנון EO', + 'color' => '#5edecd', + 'is_alert' => 'false', + 'is_weekend' => 'false', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => null, + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday","Thursday"]}', + 'created_at' => '2025-02-18T13:56:54.000Z', + 'updated_at' => '2025-03-04T07:49:42.000Z', + 'deleted_at' => null, + 'kind' => 'Regular', + ], + [ + 'id' => 28, + 'name' => 'כונן פיקוד', + 'start_hour' => '16:00:00Z', + 'duration' => 1400, + 'parallel_weight' => 0, + 'type' => 'פיקוד EO', + 'color' => '#b73382', + 'is_alert' => 'true', + 'is_weekend' => 'false', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => '{}', + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday"]}', + 'created_at' => '2025-02-18T13:08:47.000Z', + 'updated_at' => '2025-03-18T08:55:34.000Z', + 'deleted_at' => null, + 'kind' => 'Alert', + ], + [ + 'id' => 31, + 'name' => 'כונן עיבוד מסחרי סופש', + 'start_hour' => '18:30:00Z', + 'duration' => 1200, + 'parallel_weight' => 100, + 'type' => 'עיבוד מסחרי', + 'color' => '#7E14CE', + 'is_alert' => 'false', + 'is_weekend' => 'true', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => '{}', + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Saturday","Friday"]}', + 'created_at' => '2025-02-18T13:11:37.000Z', + 'updated_at' => '2025-03-18T08:56:20.000Z', + 'deleted_at' => null, + 'kind' => 'Weekend', + ], + [ + 'id' => 42, + 'name' => 'כונן סאר סופש', + 'start_hour' => '06:30:00Z', + 'duration' => 4800, + 'parallel_weight' => 200, + 'type' => 'סאר', + 'color' => '#1c801f', + 'is_alert' => 'false', + 'is_weekend' => 'true', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => '{}', + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Friday"]}', + 'created_at' => '2025-02-18T13:33:22.000Z', + 'updated_at' => '2025-05-07T08:00:54.000Z', + 'deleted_at' => null, + 'kind' => 'Weekend', + ], + [ + 'id' => 47, + 'name' => 'כונן מסחרי', + 'start_hour' => '13:00:00Z', + 'duration' => 1700, + 'parallel_weight' => 0, + 'type' => 'תכנון מסחרי', + 'color' => '#eb9b55', + 'is_alert' => 'true', + 'is_weekend' => 'false', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => '{}', + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday"]}', + 'created_at' => '2025-02-18T13:39:07.000Z', + 'updated_at' => '2025-03-18T08:58:39.000Z', + 'deleted_at' => null, + 'kind' => 'Alert', + ], + [ + 'id' => 54, + 'name' => 'תכנון 1 סופש', + 'start_hour' => '06:30:00Z', + 'duration' => 1200, + 'parallel_weight' => 100, + 'type' => 'תכנון EO', + 'color' => '#5edecd', + 'is_alert' => 'false', + 'is_weekend' => 'true', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => '{}', + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Friday","Saturday"]}', + 'created_at' => '2025-02-18T13:59:35.000Z', + 'updated_at' => '2025-03-18T08:59:00.000Z', + 'deleted_at' => null, + 'kind' => 'Weekend', + ], + [ + 'id' => 55, + 'name' => 'תכנון 2 סופש', + 'start_hour' => '06:30:00Z', + 'duration' => 1200, + 'parallel_weight' => 100, + 'type' => 'תכנון EO', + 'color' => '#5edecd', + 'is_alert' => 'false', + 'is_weekend' => 'true', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => '{}', + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Friday","Saturday"]}', + 'created_at' => '2025-02-18T14:00:17.000Z', + 'updated_at' => '2025-03-18T08:59:14.000Z', + 'deleted_at' => null, + 'kind' => 'Weekend', + ], + [ + 'id' => 63, + 'name' => 'סמלוץ', + 'start_hour' => '06:30:00Z', + 'duration' => 1200, + 'parallel_weight' => 0, + 'type' => 'סמלוץ', + 'color' => '#59d9a4', + 'is_alert' => null, + 'is_weekend' => null, + 'is_night' => null, + 'in_parallel' => null, + 'concurrent_tasks' => null, + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Wednesday"]}', + 'created_at' => '2025-03-31T17:26:53.000Z', + 'updated_at' => '2025-03-31T17:26:53.000Z', + 'deleted_at' => null, + 'kind' => 'Regular', + ], + [ + 'id' => 58, + 'name' => 'SM סופש', + 'start_hour' => '08:00:00Z', + 'duration' => 2400, + 'parallel_weight' => 100, + 'type' => 'SM', + 'color' => '#12217a', + 'is_alert' => 'false', + 'is_weekend' => 'true', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => '{}', + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Friday","Saturday"]}', + 'created_at' => '2025-02-18T14:04:19.000Z', + 'updated_at' => '2025-03-18T09:00:09.000Z', + 'deleted_at' => null, + 'kind' => 'Weekend', + ], + [ + 'id' => 59, + 'name' => 'כונן FT', + 'start_hour' => '11:00:00Z', + 'duration' => 2400, + 'parallel_weight' => 0, + 'type' => 'תכנון EO', + 'color' => '#a8a3a3', + 'is_alert' => 'true', + 'is_weekend' => 'false', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => '{}', + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday"]}', + 'created_at' => '2025-02-18T14:08:27.000Z', + 'updated_at' => '2025-03-18T09:00:21.000Z', + 'deleted_at' => null, + 'kind' => 'Alert', + ], + [ + 'id' => 64, + 'name' => 'סמלוץ 2', + 'start_hour' => '06:30:00Z', + 'duration' => 1200, + 'parallel_weight' => 0, + 'type' => 'סמלוץ', + 'color' => '#60c76c', + 'is_alert' => null, + 'is_weekend' => null, + 'is_night' => null, + 'in_parallel' => null, + 'concurrent_tasks' => null, + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Wednesday"]}', + 'created_at' => '2025-04-01T06:43:08.000Z', + 'updated_at' => '2025-04-01T06:43:08.000Z', + 'deleted_at' => null, + 'kind' => 'Regular', + ], + [ + 'id' => 61, + 'name' => 'כונן FT סופש', + 'start_hour' => '08:00:00Z', + 'duration' => 2400, + 'parallel_weight' => 100, + 'type' => 'תכנון EO', + 'color' => '#a8a3a3', + 'is_alert' => 'false', + 'is_weekend' => 'true', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => '{}', + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Friday","Saturday"]}', + 'created_at' => '2025-02-18T14:14:02.000Z', + 'updated_at' => '2025-03-18T09:00:47.000Z', + 'deleted_at' => null, + 'kind' => 'Weekend', + ], + [ + 'id' => 62, + 'name' => 'צתים לילה', + 'start_hour' => '06:30:00Z', + 'duration' => 1200, + 'parallel_weight' => 0, + 'type' => 'צתים לילה', + 'color' => '#171414', + 'is_alert' => null, + 'is_weekend' => null, + 'is_night' => null, + 'in_parallel' => null, + 'concurrent_tasks' => null, + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Monday","Wednesday"]}', + 'created_at' => '2025-03-18T12:00:34.000Z', + 'updated_at' => '2025-03-18T12:00:34.000Z', + 'deleted_at' => null, + 'kind' => 'Regular', + ], + [ + 'id' => 22, + 'name' => 'כונן עיבוד כל חמישי', + 'start_hour' => '18:30:00Z', + 'duration' => 1200, + 'parallel_weight' => 50, + 'type' => 'עיבוד כל', + 'color' => '#7E14CE', + 'is_alert' => 'false', + 'is_weekend' => 'true', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => '{}', + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Thursday"]}', + 'created_at' => '2025-02-18T13:00:46.000Z', + 'updated_at' => '2025-03-25T12:10:19.000Z', + 'deleted_at' => null, + 'kind' => 'Weekend', + ], + [ + 'id' => 48, + 'name' => 'כונן מסחרי חמישי', + 'start_hour' => '13:00:00Z', + 'duration' => 1500, + 'parallel_weight' => 50, + 'type' => 'תכנון מסחרי', + 'color' => '#eb9b55', + 'is_alert' => 'false', + 'is_weekend' => 'true', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => '{}', + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Thursday"]}', + 'created_at' => '2025-02-18T13:39:57.000Z', + 'updated_at' => '2025-03-25T12:11:23.000Z', + 'deleted_at' => null, + 'kind' => 'Weekend', + ], + [ + 'id' => 65, + 'name' => 'רסר מרפם', + 'start_hour' => '06:30:00Z', + 'duration' => 1200, + 'parallel_weight' => 0, + 'type' => 'רסר מרפם', + 'color' => '#1c1818', + 'is_alert' => null, + 'is_weekend' => null, + 'is_night' => null, + 'in_parallel' => null, + 'concurrent_tasks' => '{}', + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday","Thursday"]}', + 'created_at' => '2025-04-06T07:24:24.000Z', + 'updated_at' => '2025-04-06T07:24:24.000Z', + 'deleted_at' => null, + 'kind' => 'In parallel', + ], + [ + 'id' => 60, + 'name' => 'כונן FT חמישי', + 'start_hour' => '11:00:00Z', + 'duration' => 2400, + 'parallel_weight' => 50, + 'type' => 'תכנון EO', + 'color' => '#a8a3a3', + 'is_alert' => 'false', + 'is_weekend' => 'true', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => '{}', + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Thursday"]}', + 'created_at' => '2025-02-18T14:10:31.000Z', + 'updated_at' => '2025-03-25T12:12:02.000Z', + 'deleted_at' => null, + 'kind' => 'Weekend', + ], + [ + 'id' => 57, + 'name' => 'SM חמישי', + 'start_hour' => '11:00:00Z', + 'duration' => 2400, + 'parallel_weight' => 50, + 'type' => 'SM', + 'color' => '#12217a', + 'is_alert' => 'false', + 'is_weekend' => 'true', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => '{}', + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Thursday"]}', + 'created_at' => '2025-02-18T14:03:13.000Z', + 'updated_at' => '2025-03-26T09:41:56.000Z', + 'deleted_at' => null, + 'kind' => 'Weekend', + ], + [ + 'id' => 66, + 'name' => 'נקיון תהק', + 'start_hour' => '06:30:00Z', + 'duration' => 100, + 'parallel_weight' => 0, + 'type' => 'נקיון תהק', + 'color' => '#fca1e6', + 'is_alert' => null, + 'is_weekend' => null, + 'is_night' => null, + 'in_parallel' => null, + 'concurrent_tasks' => '{"\\u05e4\\u05d9\\u05e7\\u05d5\\u05d3 SAR","\\u05e4\\u05d9\\u05e7\\u05d5\\u05d3 EO","\\u05d1\\u05d3\\u05e7\\u05df SAR","\\u05d1\\u05d3\\u05e7\\u05df EO"}', + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday","Thursday"]}', + 'created_at' => '2025-04-06T07:26:14.000Z', + 'updated_at' => '2025-04-06T07:27:56.000Z', + 'deleted_at' => null, + 'kind' => 'In parallel', + ], + [ + 'id' => 2, + 'name' => 'בקות ערב', + 'start_hour' => '13:00:00Z', + 'duration' => 900, + 'parallel_weight' => 0, + 'type' => 'בקות', + 'color' => '#4EACCA', + 'is_alert' => 'true', + 'is_weekend' => 'false', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => '{}', + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday"]}', + 'created_at' => '2025-02-18T12:16:42.000Z', + 'updated_at' => '2025-04-06T08:32:24.000Z', + 'deleted_at' => null, + 'kind' => 'Alert', + ], + [ + 'id' => 49, + 'name' => 'כונן מסחרי סופש', + 'start_hour' => '06:00:00Z', + 'duration' => 4800, + 'parallel_weight' => 100, + 'type' => 'תכנון מסחרי', + 'color' => '#eb9b55', + 'is_alert' => 'false', + 'is_weekend' => 'true', + 'is_night' => 'false', + 'in_parallel' => 'false', + 'concurrent_tasks' => '{}', + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Friday"]}', + 'created_at' => '2025-02-18T13:40:56.000Z', + 'updated_at' => '2025-05-07T07:59:25.000Z', + 'deleted_at' => null, + 'kind' => 'Weekend', + ], + [ + 'id' => 67, + 'name' => 'כונן בקוצ סופש', + 'start_hour' => '06:00:00Z', + 'duration' => 4800, + 'parallel_weight' => 200, + 'type' => 'בקות', + 'color' => '#7cf2e6', + 'is_alert' => null, + 'is_weekend' => null, + 'is_night' => null, + 'in_parallel' => null, + 'concurrent_tasks' => '{}', + 'department_name' => null, + 'recurring' => '{"type":"Weekly","days_in_week":["Friday"]}', + 'created_at' => '2025-04-21T08:02:31.000Z', + 'updated_at' => '2025-05-05T07:46:33.000Z', + 'deleted_at' => null, + 'kind' => 'Weekend', + ], + ]; + + collect($tasks)->map(callback: function ($task) { + $t = new Task; + $t->name = $task['name']; + $t->start_hour = Carbon::parse(substr($task['start_hour'], 0, 8))->addHours(2)->toTimeString(); + $t->duration = $task['duration'] / 100; + $t->parallel_weight = $task['parallel_weight'] ? ($task['parallel_weight'] / 100) : 0; + $t->type = $task['type']; + $t->color = $task['color']; + $t->kind = $task['kind']; + $t->concurrent_tasks = $task['concurrent_tasks']; + $t->department_name = $task['department_name']; + // $t->recurring = $task['recurring']; + $t->recurring = json_decode($task['recurring']); + $t->save(); + }); + + } + + public function b() + { + + $sum = collect([]); + $tasksTypes = [...Task::all()->pluck('type')->unique()]; + collect($tasksTypes)->each(function ($type) use ($sum) { + $shifts = collect(\App\Models\Shift::all())->filter(fn (\App\Models\Shift $shift) => $shift->task->type === $type); + $sum->push([ + $type => [ + 'regular' => collect($shifts)->filter(fn (\App\Models\Shift $shift) => $shift->task->kind === 'Regular')->count(), + 'weekend' => collect($shifts)->filter(fn (\App\Models\Shift $shift) => $shift->task->kind === 'Weekend')->sum(fn ($shift) => $shift->task->parallel_weight), + 'alert' => collect($shifts)->filter(fn (\App\Models\Shift $shift) => $shift->task->kind === 'Alert')->count(), + 'night' => collect($shifts)->filter(fn (\App\Models\Shift $shift) => $shift->task->kind === 'Night')->count(), + 'in_parallel' => collect($shifts)->filter(fn (\App\Models\Shift $shift) => $shift->task->kind === 'In parallel')->count(), + ], + ]); + }); + + } + + public function c() + { + $array = collect([]); + $data = collect([ + 'ציוד' => '', + 'פיקוד SAR' => '', + 'פיקוד EO' => '', + 'סאר' => '', + 'עיבוד כל' => '', + 'בדקן EO' => '', + 'עיבוד מסחרי' => '', + 'בדקן SAR' => '', + 'בקות' => '', + 'תכנון מסחרי' => '', + 'SM' => '', + 'תכנון EO' => '', + 'מנהל מסחרי' => '', + 'צתים לילה' => '', + 'scat' => '', + ]); + $array->put('9', $this->d(1, 10, collect([ + 'ציוד' => 4, + 'פיקוד SAR' => 7, + 'פיקוד EO' => 7, + 'סאר' => 1, + 'עיבוד כל' => 2, + 'בדקן EO' => 4, + 'עיבוד מסחרי' => 0, + 'בדקן SAR' => 4, + 'בקות' => 8, + 'תכנון מסחרי' => 2, + 'SM' => 2, + 'תכנון EO' => 7, + 'מנהל מסחרי' => 2, + 'צתים לילה' => 2, + 'scat' => 2, + ]))); + $array->put('23', $this->d(10, 33, collect([ + 'ציוד' => 4, + 'פיקוד SAR' => 7, + 'פיקוד EO' => 7, + 'סאר' => 1, + 'עיבוד כל' => 2, + 'בדקן EO' => 4, + 'עיבוד מסחרי' => 1, + 'בדקן SAR' => 4, + 'בקות' => 8, + 'תכנון מסחרי' => 2, + 'SM' => 2, + 'תכנון EO' => 7, + 'מנהל מסחרי' => 2, + 'צתים לילה' => 2, + 'scat' => 2, + ]))); + $array->put('24', $this->d(33, 57, collect([ + 'ציוד' => 4, + 'פיקוד SAR' => 7, + 'פיקוד EO' => 7, + 'סאר' => 2, + 'עיבוד כל' => 3, + 'בדקן EO' => 4, + 'עיבוד מסחרי' => 1, + 'בדקן SAR' => 4, + 'בקות' => 8, + 'תכנון מסחרי' => 3, + 'SM' => 2, + 'תכנון EO' => 7, + 'מנהל מסחרי' => 2, + 'צתים לילה' => 2, + 'scat' => 2, + ]))); + $array->put('22', $this->d(57, 79, collect([ + 'ציוד' => 4, + 'פיקוד SAR' => 7, + 'פיקוד EO' => 7, + 'סאר' => 4, + 'עיבוד כל' => 4, + 'בדקן EO' => 4, + 'עיבוד מסחרי' => 4, + 'בדקן SAR' => 4, + 'בקות' => 8, + 'תכנון מסחרי' => 4, + 'SM' => 3, + 'תכנון EO' => 7, + 'מנהל מסחרי' => 2, + 'צתים לילה' => 2, + 'scat' => 2, + ]))); + $array->put('29', $this->d(79, 108, collect([ + 'ציוד' => 4, + 'פיקוד SAR' => 7, + 'פיקוד EO' => 7, + 'סאר' => 4, + 'עיבוד כל' => 4, + 'בדקן EO' => 4, + 'עיבוד מסחרי' => 4, + 'בדקן SAR' => 4, + 'בקות' => 8, + 'תכנון מסחרי' => 4, + 'SM' => 3, + 'תכנון EO' => 7, + 'מנהל מסחרי' => 2, + 'צתים לילה' => 2, + 'scat' => 2, + ]))); + $array->each(function ($value, $key) use ($data) { + $value->each(function ($val, $k) use ($data) { + $data[$k] = $data[$k].','.implode(',', $val); + }); + }); + dd($data->toArray()); + } + + public function d($start, $end, $qualificationsSum) + { + $indexes = collect([]); + for ($i = $start; $i < $end; $i++) { + $indexes->push($i); + } + $dict = collect(); + + collect($qualificationsSum)->each(function ($value, $key) use ($dict, $indexes) { + $indexes = $indexes->shuffle(); + $dict->put($key, $indexes->take($value)->all()); + }); + + return $dict; + } + + public function e() + { + $soldiers = + [ + [ + 'id' => 1, + 'team_id' => null, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '1996-02-23T23:31:11.000Z', + 'course' => 3, + 'has_exemption' => true, + 'max_shifts' => 10, + 'max_nights' => 10, + 'max_weekends' => 1000, + 'capacity' => 1000, + 'is_trainee' => true, + 'is_mabat' => false, + 'qualifications' => [], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-02-17T10:33:45.000Z', + 'updated_at' => '2025-02-17T10:33:45.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 3, + 'team_id' => 1, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => '2025-02-12T22:00:00.000Z', + 'course' => 39, + 'has_exemption' => false, + 'max_shifts' => 3, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['בקות'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-02-18T12:32:18.000Z', + 'updated_at' => '2025-04-24T10:20:37.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 16, + 'team_id' => null, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '1111-11-17T22:00:00.000Z', + 'course' => 1, + 'has_exemption' => false, + 'max_shifts' => 0, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => [], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-03T14:19:19.000Z', + 'updated_at' => '2025-05-20T07:57:13.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 6, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => true, + 'enlist_date' => '2025-01-31T22:00:00.000Z', + 'course' => 37, + 'has_exemption' => false, + 'max_shifts' => 2, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 200, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['ציוד'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-02-18T14:16:23.000Z', + 'updated_at' => '2025-03-25T12:03:04.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 79, + 'team_id' => 7, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '2023-03-25T21:00:00.000Z', + 'course' => 42, + 'has_exemption' => true, + 'max_shifts' => 5, + 'max_nights' => 5, + 'max_weekends' => 300, + 'capacity' => 300, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['ציוד', 'בקות'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T15:24:06.000Z', + 'updated_at' => '2025-04-24T10:18:36.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 2, + ], + [ + 'id' => 11, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => true, + 'enlist_date' => null, + 'course' => 36, + 'has_exemption' => false, + 'max_shifts' => 2, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['בקות'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-03T14:05:11.000Z', + 'updated_at' => '2025-04-02T13:19:35.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 25, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 39, + 'has_exemption' => false, + 'max_shifts' => 2, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['תכנון EO', 'Scat C'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-18T10:02:14.000Z', + 'updated_at' => '2025-05-25T10:44:26.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 17, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => '1111-11-17T22:00:00.000Z', + 'course' => 1, + 'has_exemption' => false, + 'max_shifts' => 0, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => [], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-03T14:24:46.000Z', + 'updated_at' => '2025-03-03T14:24:46.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 15, + 'team_id' => null, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '1111-11-17T22:00:00.000Z', + 'course' => 36, + 'has_exemption' => false, + 'max_shifts' => 0, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => [], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-03T14:16:57.000Z', + 'updated_at' => '2025-04-02T06:55:17.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 83, + 'team_id' => null, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '2023-09-18T21:00:00.000Z', + 'course' => 41, + 'has_exemption' => false, + 'max_shifts' => 8, + 'max_nights' => 6, + 'max_weekends' => 200, + 'capacity' => 200, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['פיקוד EO', 'פיקוד SAR', 'בקות', 'בדקן EO', 'בדקן SAR', 'Scat 8', 'Scat C', 'Mid Scat'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T15:25:10.000Z', + 'updated_at' => '2025-05-29T10:35:02.000Z', + 'max_alerts' => 1, + 'max_in_parallel' => 0, + ], + [ + 'id' => 8, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 40, + 'has_exemption' => false, + 'max_shifts' => 4, + 'max_nights' => 4, + 'max_weekends' => 100, + 'capacity' => 100, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['תכנון EO', 'SM'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-02-18T14:20:35.000Z', + 'updated_at' => '2025-04-24T10:16:16.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 18, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => '1111-11-17T22:00:00.000Z', + 'course' => 1, + 'has_exemption' => false, + 'max_shifts' => 0, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 100, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => [], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-03T14:25:34.000Z', + 'updated_at' => '2025-03-20T08:34:41.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 12, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => true, + 'enlist_date' => '1111-11-17T22:00:00.000Z', + 'course' => 1, + 'has_exemption' => false, + 'max_shifts' => 0, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => [], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-03T14:12:20.000Z', + 'updated_at' => '2025-03-04T13:42:04.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 7, + 'team_id' => null, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '2025-01-31T22:00:00.000Z', + 'course' => 39, + 'has_exemption' => false, + 'max_shifts' => 2, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['בדקן SAR', 'פיקוד SAR', 'SCAT SAR'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => true, + 'not_sunday_morning' => true, + 'created_at' => '2025-02-18T14:17:34.000Z', + 'updated_at' => '2025-03-25T14:04:14.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 5, + 'team_id' => null, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '2025-01-31T22:00:00.000Z', + 'course' => 42, + 'has_exemption' => false, + 'max_shifts' => 5, + 'max_nights' => 5, + 'max_weekends' => 300, + 'capacity' => 300, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['עיבוד כל', 'תכנון EO'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-02-18T14:13:25.000Z', + 'updated_at' => '2025-04-24T10:18:36.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 2, + ], + [ + 'id' => 21, + 'team_id' => null, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 39, + 'has_exemption' => false, + 'max_shifts' => 2, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['פיקוד EO', 'Scat 8', 'Scat C', 'בדקן EO'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-04T13:39:11.000Z', + 'updated_at' => '2025-04-06T14:31:35.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 14, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => '1111-11-17T22:00:00.000Z', + 'course' => 1, + 'has_exemption' => false, + 'max_shifts' => 0, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => [], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-03T14:15:58.000Z', + 'updated_at' => '2025-03-20T08:35:16.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 13, + 'team_id' => null, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '1111-11-17T22:00:00.000Z', + 'course' => 1, + 'has_exemption' => false, + 'max_shifts' => 0, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => [], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-03T14:14:24.000Z', + 'updated_at' => '2025-03-30T17:17:45.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 10, + 'team_id' => null, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '2022-11-10T22:00:00.000Z', + 'course' => 38, + 'has_exemption' => false, + 'max_shifts' => 2, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['עיבוד כל', 'עיבוד מסחרי'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-03T13:59:12.000Z', + 'updated_at' => '2025-04-06T14:32:24.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 23, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => true, + 'enlist_date' => '0011-11-08T22:00:00.000Z', + 'course' => 38, + 'has_exemption' => false, + 'max_shifts' => 2, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['תכנון מסחרי'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-18T09:57:14.000Z', + 'updated_at' => '2025-04-03T13:06:34.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 9, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => '2025-01-31T22:00:00.000Z', + 'course' => 39, + 'has_exemption' => false, + 'max_shifts' => 2, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['SM', 'סאר', 'סמלוץ'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-02-19T12:42:54.000Z', + 'updated_at' => '2025-04-07T12:04:55.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 175, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 39, + 'has_exemption' => false, + 'max_shifts' => 4, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['בדקן EO'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-05-25T10:33:32.000Z', + 'updated_at' => '2025-05-25T10:33:32.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 30, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 1, + 'has_exemption' => false, + 'max_shifts' => 0, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => [], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-20T08:30:18.000Z', + 'updated_at' => '2025-03-20T08:35:02.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 31, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 1, + 'has_exemption' => false, + 'max_shifts' => 0, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => [], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-20T08:31:02.000Z', + 'updated_at' => '2025-03-20T08:35:43.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 26, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 39, + 'has_exemption' => false, + 'max_shifts' => 2, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['תכנון מסחרי', 'מנהל מסחרי'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-18T10:03:40.000Z', + 'updated_at' => '2025-04-06T14:31:35.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 43, + 'team_id' => null, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 38, + 'has_exemption' => false, + 'max_shifts' => 2, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => [], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-25T15:50:14.000Z', + 'updated_at' => '2025-04-06T14:32:24.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 32, + 'team_id' => null, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 38, + 'has_exemption' => false, + 'max_shifts' => 2, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => [], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-20T09:03:54.000Z', + 'updated_at' => '2025-03-20T09:36:20.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 34, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 36, + 'has_exemption' => false, + 'max_shifts' => 0, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => [], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-20T09:40:00.000Z', + 'updated_at' => '2025-03-25T12:02:10.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 36, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 2, + 'has_exemption' => false, + 'max_shifts' => 0, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => [], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-25T11:57:21.000Z', + 'updated_at' => '2025-04-02T19:27:35.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 37, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 35, + 'has_exemption' => false, + 'max_shifts' => 0, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => [], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-25T11:59:16.000Z', + 'updated_at' => '2025-03-25T13:00:33.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 27, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => '1139-11-17T22:00:00.000Z', + 'course' => 39, + 'has_exemption' => false, + 'max_shifts' => 2, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['תכנון EO', 'צתים לילה'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-18T12:01:40.000Z', + 'updated_at' => '2025-04-06T14:31:35.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 39, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 2, + 'has_exemption' => false, + 'max_shifts' => 0, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => [], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-25T13:59:53.000Z', + 'updated_at' => '2025-03-25T14:02:34.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 40, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 2, + 'has_exemption' => false, + 'max_shifts' => 0, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => true, + 'qualifications' => [], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-25T14:00:36.000Z', + 'updated_at' => '2025-03-25T14:03:16.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 41, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 2, + 'has_exemption' => false, + 'max_shifts' => 0, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => true, + 'qualifications' => [], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-25T14:01:19.000Z', + 'updated_at' => '2025-03-25T14:03:51.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 29, + 'team_id' => null, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '2025-03-17T22:00:00.000Z', + 'course' => 1, + 'has_exemption' => false, + 'max_shifts' => 0, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => [], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-20T08:29:32.000Z', + 'updated_at' => '2025-05-20T07:57:01.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 28, + 'team_id' => null, + 'gender' => false, + 'is_permanent' => true, + 'enlist_date' => null, + 'course' => 38, + 'has_exemption' => false, + 'max_shifts' => 2, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['סאר'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-18T12:35:41.000Z', + 'updated_at' => '2025-03-31T06:48:52.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 45, + 'team_id' => null, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 30, + 'has_exemption' => false, + 'max_shifts' => 12, + 'max_nights' => 6, + 'max_weekends' => 200, + 'capacity' => 700, + 'is_trainee' => false, + 'is_mabat' => true, + 'qualifications' => ['ציוד'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => true, + 'not_sunday_morning' => true, + 'created_at' => '2025-03-31T07:20:14.000Z', + 'updated_at' => '2025-03-31T07:20:14.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 46, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 30, + 'has_exemption' => false, + 'max_shifts' => 12, + 'max_nights' => 6, + 'max_weekends' => 200, + 'capacity' => 700, + 'is_trainee' => false, + 'is_mabat' => true, + 'qualifications' => ['ציוד'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T07:21:13.000Z', + 'updated_at' => '2025-03-31T07:21:13.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 50, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 1, + 'has_exemption' => false, + 'max_shifts' => 0, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => [], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T07:39:49.000Z', + 'updated_at' => '2025-03-31T08:24:44.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 60, + 'team_id' => 4, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => '2024-03-25T22:00:00.000Z', + 'course' => 42, + 'has_exemption' => false, + 'max_shifts' => 5, + 'max_nights' => 5, + 'max_weekends' => 300, + 'capacity' => 300, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['ציוד', 'בקות'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T11:05:29.000Z', + 'updated_at' => '2025-04-24T10:18:36.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 2, + ], + [ + 'id' => 33, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => true, + 'enlist_date' => null, + 'course' => 38, + 'has_exemption' => false, + 'max_shifts' => 2, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['תכנון מסחרי'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-20T09:24:33.000Z', + 'updated_at' => '2025-03-31T10:18:46.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 4, + 'team_id' => null, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '2025-01-31T22:00:00.000Z', + 'course' => 40, + 'has_exemption' => false, + 'max_shifts' => 4, + 'max_nights' => 4, + 'max_weekends' => 100, + 'capacity' => 100, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['ציוד', 'בקות'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-02-18T14:10:58.000Z', + 'updated_at' => '2025-04-24T10:16:16.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 38, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => true, + 'enlist_date' => null, + 'course' => 36, + 'has_exemption' => false, + 'max_shifts' => 0, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['סאר'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-25T11:59:58.000Z', + 'updated_at' => '2025-03-31T13:57:39.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 176, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 40, + 'has_exemption' => false, + 'max_shifts' => 5, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['בדקן EO', 'בקות', 'פיקוד EO', 'פיקוד SAR', 'בדקן SAR'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-05-25T10:38:37.000Z', + 'updated_at' => '2025-05-25T10:38:37.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 56, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 1, + 'has_exemption' => false, + 'max_shifts' => 0, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => [], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T08:49:35.000Z', + 'updated_at' => '2025-03-31T11:12:50.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 35, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 36, + 'has_exemption' => false, + 'max_shifts' => 0, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['בדקן EO', 'פיקוד EO', 'Scat 8'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-20T09:40:35.000Z', + 'updated_at' => '2025-05-25T10:45:45.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 57, + 'team_id' => 24, + 'gender' => false, + 'is_permanent' => true, + 'enlist_date' => null, + 'course' => 39, + 'has_exemption' => false, + 'max_shifts' => 2, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['בקות'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T09:21:58.000Z', + 'updated_at' => '2025-04-06T14:31:35.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 47, + 'team_id' => null, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 40, + 'has_exemption' => false, + 'max_shifts' => 4, + 'max_nights' => 4, + 'max_weekends' => 100, + 'capacity' => 100, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['בקות', 'ציוד'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T07:32:58.000Z', + 'updated_at' => '2025-04-24T10:16:16.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 48, + 'team_id' => 24, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 37, + 'has_exemption' => false, + 'max_shifts' => 0, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['בקות', 'Mid Scat', 'Scat C', 'Scat 8', 'SCAT SAR', 'בדקן SAR', 'בדקן EO'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T07:34:34.000Z', + 'updated_at' => '2025-04-02T13:19:35.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 55, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 42, + 'has_exemption' => false, + 'max_shifts' => 5, + 'max_nights' => 5, + 'max_weekends' => 300, + 'capacity' => 300, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['בקות', 'פיקוד SAR', 'פיקוד EO'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T07:48:39.000Z', + 'updated_at' => '2025-04-24T10:18:36.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 2, + ], + [ + 'id' => 51, + 'team_id' => null, + 'gender' => false, + 'is_permanent' => true, + 'enlist_date' => '2021-09-11T21:00:00.000Z', + 'course' => 37, + 'has_exemption' => false, + 'max_shifts' => 0, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 700, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['צתים לילה', 'תכנון EO', 'SM'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => true, + 'not_sunday_morning' => true, + 'created_at' => '2025-03-31T07:41:51.000Z', + 'updated_at' => '2025-03-31T07:41:51.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 53, + 'team_id' => null, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '2024-09-21T21:00:00.000Z', + 'course' => 43, + 'has_exemption' => false, + 'max_shifts' => 9, + 'max_nights' => 9, + 'max_weekends' => 400, + 'capacity' => 400, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['רסר מרפם', 'נקיון תהק', 'פיקוד SAR', 'פיקוד EO', 'בקות'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T07:46:19.000Z', + 'updated_at' => '2025-04-24T10:18:17.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 8, + ], + [ + 'id' => 73, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => '2023-03-08T22:00:00.000Z', + 'course' => 40, + 'has_exemption' => false, + 'max_shifts' => 7, + 'max_nights' => 4, + 'max_weekends' => 100, + 'capacity' => 100, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['פיקוד SAR', 'פיקוד EO', 'Scat 8', 'Scat C', 'Mid Scat', 'בדקן EO', 'בדקן SAR', 'בקות'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T15:22:46.000Z', + 'updated_at' => '2025-05-29T09:57:50.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 70, + 'team_id' => null, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '2024-03-25T22:00:00.000Z', + 'course' => 42, + 'has_exemption' => false, + 'max_shifts' => 8, + 'max_nights' => 5, + 'max_weekends' => 300, + 'capacity' => 300, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['בקות', 'פיקוד SAR', 'פיקוד EO', 'בדקן EO'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T12:50:27.000Z', + 'updated_at' => '2025-05-29T10:36:07.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 2, + ], + [ + 'id' => 62, + 'team_id' => 4, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '2024-09-21T21:00:00.000Z', + 'course' => 43, + 'has_exemption' => false, + 'max_shifts' => 9, + 'max_nights' => 9, + 'max_weekends' => 400, + 'capacity' => 400, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['רסר מרפם', 'נקיון תהק', 'ציוד', 'בקות'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T11:08:08.000Z', + 'updated_at' => '2025-04-24T10:18:17.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 8, + ], + [ + 'id' => 72, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => '2024-09-21T21:00:00.000Z', + 'course' => 43, + 'has_exemption' => false, + 'max_shifts' => 9, + 'max_nights' => 9, + 'max_weekends' => 400, + 'capacity' => 400, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['רסר מרפם', 'נקיון תהק', 'פיקוד SAR', 'פיקוד EO', 'בקות'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T12:59:13.000Z', + 'updated_at' => '2025-04-24T10:18:17.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 8, + ], + [ + 'id' => 65, + 'team_id' => 24, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 43, + 'has_exemption' => false, + 'max_shifts' => 9, + 'max_nights' => 9, + 'max_weekends' => 400, + 'capacity' => 400, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['רסר מרפם', 'נקיון תהק', 'תכנון מסחרי', 'תכנון EO'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T12:41:12.000Z', + 'updated_at' => '2025-04-24T10:18:17.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 8, + ], + [ + 'id' => 54, + 'team_id' => null, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '2024-09-22T21:00:00.000Z', + 'course' => 43, + 'has_exemption' => false, + 'max_shifts' => 9, + 'max_nights' => 9, + 'max_weekends' => 400, + 'capacity' => 400, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['רסר מרפם', 'נקיון תהק', 'עיבוד כל', 'תכנון EO'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T07:47:14.000Z', + 'updated_at' => '2025-04-24T10:18:17.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 8, + ], + [ + 'id' => 69, + 'team_id' => null, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '2024-03-25T22:00:00.000Z', + 'course' => 42, + 'has_exemption' => false, + 'max_shifts' => 5, + 'max_nights' => 5, + 'max_weekends' => 300, + 'capacity' => 300, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['בקות', 'ציוד'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => true, + 'not_sunday_morning' => true, + 'created_at' => '2025-03-31T12:49:22.000Z', + 'updated_at' => '2025-04-24T10:18:36.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 2, + ], + [ + 'id' => 74, + 'team_id' => 2, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '2024-03-25T22:00:00.000Z', + 'course' => 42, + 'has_exemption' => false, + 'max_shifts' => 5, + 'max_nights' => 5, + 'max_weekends' => 300, + 'capacity' => 300, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['עיבוד מסחרי', 'תכנון EO'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T15:22:46.000Z', + 'updated_at' => '2025-04-24T10:18:36.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 2, + ], + [ + 'id' => 52, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => '2023-09-18T21:00:00.000Z', + 'course' => 41, + 'has_exemption' => false, + 'max_shifts' => 6, + 'max_nights' => 6, + 'max_weekends' => 200, + 'capacity' => 200, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['תכנון EO', 'עיבוד כל', 'עיבוד מסחרי'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T07:43:04.000Z', + 'updated_at' => '2025-04-24T10:16:48.000Z', + 'max_alerts' => 1, + 'max_in_parallel' => 0, + ], + [ + 'id' => 68, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => '2023-09-18T21:00:00.000Z', + 'course' => 41, + 'has_exemption' => false, + 'max_shifts' => 6, + 'max_nights' => 6, + 'max_weekends' => 200, + 'capacity' => 200, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['ציוד', 'בקות'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T12:47:28.000Z', + 'updated_at' => '2025-04-24T10:16:48.000Z', + 'max_alerts' => 1, + 'max_in_parallel' => 0, + ], + [ + 'id' => 66, + 'team_id' => null, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '2022-09-10T21:00:00.000Z', + 'course' => 39, + 'has_exemption' => false, + 'max_shifts' => 2, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['סאר', 'סמלוץ'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T12:43:42.000Z', + 'updated_at' => '2025-04-07T12:05:31.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 64, + 'team_id' => 24, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 43, + 'has_exemption' => false, + 'max_shifts' => 9, + 'max_nights' => 9, + 'max_weekends' => 400, + 'capacity' => 400, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['רסר מרפם', 'נקיון תהק', 'תכנון EO', 'תכנון מסחרי'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T12:40:41.000Z', + 'updated_at' => '2025-04-24T10:18:17.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 8, + ], + [ + 'id' => 67, + 'team_id' => null, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '2022-09-10T21:00:00.000Z', + 'course' => 39, + 'has_exemption' => false, + 'max_shifts' => 2, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['עיבוד כל', 'עיבוד מסחרי', 'תכנון EO'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T12:45:49.000Z', + 'updated_at' => '2025-04-06T14:31:35.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 59, + 'team_id' => 8, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '2024-03-25T22:00:00.000Z', + 'course' => 42, + 'has_exemption' => true, + 'max_shifts' => 5, + 'max_nights' => 5, + 'max_weekends' => 300, + 'capacity' => 300, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['תכנון מסחרי', 'סאר', 'תכנון EO'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => true, + 'not_sunday_morning' => true, + 'created_at' => '2025-03-31T10:23:09.000Z', + 'updated_at' => '2025-04-24T10:18:36.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 2, + ], + [ + 'id' => 112, + 'team_id' => null, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '2024-09-21T21:00:00.000Z', + 'course' => 43, + 'has_exemption' => false, + 'max_shifts' => 9, + 'max_nights' => 9, + 'max_weekends' => 400, + 'capacity' => 400, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['רסר מרפם', 'נקיון תהק', 'עיבוד כל', 'תכנון EO'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => true, + 'not_sunday_morning' => true, + 'created_at' => '2025-03-31T15:32:57.000Z', + 'updated_at' => '2025-04-24T10:18:17.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 8, + ], + [ + 'id' => 104, + 'team_id' => null, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '2024-09-21T21:00:00.000Z', + 'course' => 43, + 'has_exemption' => false, + 'max_shifts' => 9, + 'max_nights' => 9, + 'max_weekends' => 400, + 'capacity' => 400, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['רסר מרפם', 'נקיון תהק', 'עיבוד מסחרי', 'תכנון EO'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T15:29:45.000Z', + 'updated_at' => '2025-04-24T10:18:17.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 8, + ], + [ + 'id' => 88, + 'team_id' => null, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '2024-03-25T22:00:00.000Z', + 'course' => 42, + 'has_exemption' => false, + 'max_shifts' => 10, + 'max_nights' => 5, + 'max_weekends' => 300, + 'capacity' => 300, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['פיקוד EO', 'פיקוד SAR', 'בקות', 'בדקן EO', 'בדקן SAR'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T15:25:59.000Z', + 'updated_at' => '2025-05-29T10:36:30.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 2, + ], + [ + 'id' => 98, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => '2024-03-25T22:00:00.000Z', + 'course' => 42, + 'has_exemption' => false, + 'max_shifts' => 5, + 'max_nights' => 5, + 'max_weekends' => 300, + 'capacity' => 300, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['תכנון EO', 'עיבוד מסחרי', 'SM'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T15:28:26.000Z', + 'updated_at' => '2025-04-24T10:18:36.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 2, + ], + [ + 'id' => 77, + 'team_id' => null, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '2023-03-08T22:00:00.000Z', + 'course' => 40, + 'has_exemption' => false, + 'max_shifts' => 4, + 'max_nights' => 4, + 'max_weekends' => 100, + 'capacity' => 100, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['פיקוד EO', 'פיקוד SAR', 'בדקן EO', 'בדקן SAR', 'עיבוד כל', 'Scat 8'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T15:23:51.000Z', + 'updated_at' => '2025-04-24T10:16:16.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 105, + 'team_id' => null, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '2024-09-21T21:00:00.000Z', + 'course' => 43, + 'has_exemption' => false, + 'max_shifts' => 9, + 'max_nights' => 9, + 'max_weekends' => 400, + 'capacity' => 400, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['רסר מרפם', 'נקיון תהק', 'תכנון EO', 'סאר'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T15:30:12.000Z', + 'updated_at' => '2025-04-24T10:18:17.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 8, + ], + [ + 'id' => 93, + 'team_id' => 10, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => '2024-09-21T21:00:00.000Z', + 'course' => 43, + 'has_exemption' => false, + 'max_shifts' => 9, + 'max_nights' => 9, + 'max_weekends' => 400, + 'capacity' => 400, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['רסר מרפם', 'נקיון תהק', 'פיקוד SAR', 'פיקוד EO', 'בקות'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => true, + 'not_sunday_morning' => true, + 'created_at' => '2025-03-31T15:27:06.000Z', + 'updated_at' => '2025-04-24T10:18:17.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 8, + ], + [ + 'id' => 97, + 'team_id' => null, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '2024-09-21T21:00:00.000Z', + 'course' => 43, + 'has_exemption' => false, + 'max_shifts' => 9, + 'max_nights' => 9, + 'max_weekends' => 400, + 'capacity' => 400, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['רסר מרפם', 'נקיון תהק', 'עיבוד כל', 'תכנון EO'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T15:28:25.000Z', + 'updated_at' => '2025-04-24T10:18:17.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 8, + ], + [ + 'id' => 84, + 'team_id' => null, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '2023-03-08T22:00:00.000Z', + 'course' => 40, + 'has_exemption' => false, + 'max_shifts' => 4, + 'max_nights' => 4, + 'max_weekends' => 100, + 'capacity' => 100, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['עיבוד כל', 'עיבוד מסחרי', 'תכנון EO', 'צתים לילה'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T15:25:25.000Z', + 'updated_at' => '2025-04-24T10:16:16.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 90, + 'team_id' => null, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '2024-09-21T21:00:00.000Z', + 'course' => 43, + 'has_exemption' => false, + 'max_shifts' => 9, + 'max_nights' => 9, + 'max_weekends' => 400, + 'capacity' => 400, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['רסר מרפם', 'נקיון תהק', 'פיקוד SAR', 'פיקוד EO', 'בקות'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => true, + 'not_sunday_morning' => true, + 'created_at' => '2025-03-31T15:26:54.000Z', + 'updated_at' => '2025-04-24T10:18:17.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 8, + ], + [ + 'id' => 110, + 'team_id' => 5, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => '2024-03-25T22:00:00.000Z', + 'course' => 42, + 'has_exemption' => false, + 'max_shifts' => 5, + 'max_nights' => 5, + 'max_weekends' => 300, + 'capacity' => 300, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['עיבוד כל', 'תכנון EO', 'צתים לילה'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T15:31:43.000Z', + 'updated_at' => '2025-04-24T10:18:36.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 2, + ], + [ + 'id' => 75, + 'team_id' => null, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '2023-03-08T22:00:00.000Z', + 'course' => 40, + 'has_exemption' => false, + 'max_shifts' => 4, + 'max_nights' => 4, + 'max_weekends' => 100, + 'capacity' => 100, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['תכנון EO', 'סאר', 'SCAT SAR'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => true, + 'not_sunday_morning' => true, + 'created_at' => '2025-03-31T15:22:46.000Z', + 'updated_at' => '2025-05-25T12:28:48.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 89, + 'team_id' => 7, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '2023-09-08T21:00:00.000Z', + 'course' => 41, + 'has_exemption' => false, + 'max_shifts' => 6, + 'max_nights' => 6, + 'max_weekends' => 200, + 'capacity' => 200, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['ציוד', 'בקות'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T15:26:40.000Z', + 'updated_at' => '2025-04-24T10:16:48.000Z', + 'max_alerts' => 1, + 'max_in_parallel' => 0, + ], + [ + 'id' => 61, + 'team_id' => 4, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '2024-03-25T22:00:00.000Z', + 'course' => 42, + 'has_exemption' => false, + 'max_shifts' => 5, + 'max_nights' => 5, + 'max_weekends' => 300, + 'capacity' => 300, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['ציוד', 'בקות'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T11:07:21.000Z', + 'updated_at' => '2025-04-24T10:18:36.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 2, + ], + [ + 'id' => 174, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 39, + 'has_exemption' => false, + 'max_shifts' => 6, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['Mid Scat', 'Scat 8', 'בדקן EO', 'בדקן SAR', 'פיקוד EO', 'פיקוד SAR'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-05-25T10:31:41.000Z', + 'updated_at' => '2025-05-29T10:35:40.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 82, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => true, + 'enlist_date' => null, + 'course' => 38, + 'has_exemption' => false, + 'max_shifts' => 2, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['תכנון EO', 'עיבוד כל'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T15:24:36.000Z', + 'updated_at' => '2025-04-06T14:32:24.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 101, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => true, + 'enlist_date' => null, + 'course' => 38, + 'has_exemption' => false, + 'max_shifts' => 2, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => [], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T15:28:50.000Z', + 'updated_at' => '2025-04-06T14:32:24.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 44, + 'team_id' => 22, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '2023-09-18T21:00:00.000Z', + 'course' => 41, + 'has_exemption' => false, + 'max_shifts' => 9, + 'max_nights' => 6, + 'max_weekends' => 200, + 'capacity' => 200, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['פיקוד SAR', 'פיקוד EO', 'בדקן EO', 'בדקן SAR', 'Mid Scat', 'Scat C', 'SCAT SAR'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => true, + 'not_sunday_morning' => true, + 'created_at' => '2025-03-31T06:59:19.000Z', + 'updated_at' => '2025-05-29T09:55:13.000Z', + 'max_alerts' => 1, + 'max_in_parallel' => 0, + ], + [ + 'id' => 78, + 'team_id' => 10, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '2024-03-25T22:00:00.000Z', + 'course' => 42, + 'has_exemption' => false, + 'max_shifts' => 10, + 'max_nights' => 5, + 'max_weekends' => 300, + 'capacity' => 300, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['פיקוד SAR', 'פיקוד EO', 'בקות', 'SCAT SAR', 'בדקן SAR'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => true, + 'not_sunday_morning' => true, + 'created_at' => '2025-03-31T15:24:04.000Z', + 'updated_at' => '2025-05-29T10:37:09.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 2, + ], + [ + 'id' => 95, + 'team_id' => 10, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '2024-09-21T21:00:00.000Z', + 'course' => 43, + 'has_exemption' => false, + 'max_shifts' => 9, + 'max_nights' => 9, + 'max_weekends' => 400, + 'capacity' => 400, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['רסר מרפם', 'נקיון תהק', 'פיקוד SAR', 'פיקוד EO', 'בקות'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T15:27:52.000Z', + 'updated_at' => '2025-04-24T10:18:17.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 8, + ], + [ + 'id' => 108, + 'team_id' => null, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '2024-09-21T21:00:00.000Z', + 'course' => 43, + 'has_exemption' => false, + 'max_shifts' => 9, + 'max_nights' => 9, + 'max_weekends' => 400, + 'capacity' => 400, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['רסר מרפם', 'נקיון תהק', 'ציוד', 'בקות'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T15:31:07.000Z', + 'updated_at' => '2025-04-24T10:18:17.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 8, + ], + [ + 'id' => 87, + 'team_id' => null, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '2024-03-25T22:00:00.000Z', + 'course' => 42, + 'has_exemption' => false, + 'max_shifts' => 5, + 'max_nights' => 5, + 'max_weekends' => 300, + 'capacity' => 300, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['סאר', 'תכנון EO'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T15:25:45.000Z', + 'updated_at' => '2025-04-24T10:18:36.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 2, + ], + [ + 'id' => 107, + 'team_id' => 5, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '2023-09-18T21:00:00.000Z', + 'course' => 41, + 'has_exemption' => false, + 'max_shifts' => 6, + 'max_nights' => 6, + 'max_weekends' => 200, + 'capacity' => 200, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['עיבוד כל', 'עיבוד מסחרי', 'תכנון EO', 'צתים לילה'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T15:30:35.000Z', + 'updated_at' => '2025-04-24T10:16:48.000Z', + 'max_alerts' => 1, + 'max_in_parallel' => 0, + ], + [ + 'id' => 76, + 'team_id' => 10, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '2023-09-18T21:00:00.000Z', + 'course' => 41, + 'has_exemption' => false, + 'max_shifts' => 6, + 'max_nights' => 6, + 'max_weekends' => 200, + 'capacity' => 200, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['פיקוד SAR', 'SCAT SAR', 'בקות', 'פיקוד EO', 'בדקן SAR', 'בדקן EO'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T15:22:55.000Z', + 'updated_at' => '2025-04-24T10:16:48.000Z', + 'max_alerts' => 1, + 'max_in_parallel' => 0, + ], + [ + 'id' => 103, + 'team_id' => null, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '2024-09-21T21:00:00.000Z', + 'course' => 43, + 'has_exemption' => false, + 'max_shifts' => 9, + 'max_nights' => 9, + 'max_weekends' => 400, + 'capacity' => 400, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['רסר מרפם', 'נקיון תהק', 'ציוד', 'בקות'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T15:29:31.000Z', + 'updated_at' => '2025-04-24T10:18:17.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 8, + ], + [ + 'id' => 96, + 'team_id' => null, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '2024-09-21T21:00:00.000Z', + 'course' => 43, + 'has_exemption' => false, + 'max_shifts' => 9, + 'max_nights' => 9, + 'max_weekends' => 400, + 'capacity' => 400, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['רסר מרפם', 'נקיון תהק', 'פיקוד SAR', 'פיקוד EO', 'בקות'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T15:27:55.000Z', + 'updated_at' => '2025-04-24T10:18:17.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 8, + ], + [ + 'id' => 80, + 'team_id' => 2, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => '2024-03-25T22:00:00.000Z', + 'course' => 42, + 'has_exemption' => false, + 'max_shifts' => 5, + 'max_nights' => 5, + 'max_weekends' => 300, + 'capacity' => 300, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['עיבוד כל', 'תכנון EO'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => true, + 'not_sunday_morning' => true, + 'created_at' => '2025-03-31T15:24:18.000Z', + 'updated_at' => '2025-04-24T10:18:36.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 2, + ], + [ + 'id' => 91, + 'team_id' => 16, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => '2024-03-26T22:00:00.000Z', + 'course' => 42, + 'has_exemption' => false, + 'max_shifts' => 5, + 'max_nights' => 5, + 'max_weekends' => 300, + 'capacity' => 300, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['תכנון מסחרי', 'תכנון EO'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T15:26:57.000Z', + 'updated_at' => '2025-04-24T10:18:36.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 2, + ], + [ + 'id' => 99, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => '2024-03-25T22:00:00.000Z', + 'course' => 42, + 'has_exemption' => false, + 'max_shifts' => 5, + 'max_nights' => 5, + 'max_weekends' => 300, + 'capacity' => 300, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['תכנון EO', 'תכנון מסחרי'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T15:28:31.000Z', + 'updated_at' => '2025-04-24T10:18:36.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 2, + ], + [ + 'id' => 81, + 'team_id' => null, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '2023-09-18T21:00:00.000Z', + 'course' => 41, + 'has_exemption' => false, + 'max_shifts' => 6, + 'max_nights' => 6, + 'max_weekends' => 200, + 'capacity' => 200, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['סאר', 'תכנון EO'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => true, + 'not_sunday_morning' => true, + 'created_at' => '2025-03-31T15:24:33.000Z', + 'updated_at' => '2025-04-24T10:16:48.000Z', + 'max_alerts' => 1, + 'max_in_parallel' => 0, + ], + [ + 'id' => 106, + 'team_id' => null, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '2023-09-18T21:00:00.000Z', + 'course' => 41, + 'has_exemption' => false, + 'max_shifts' => 6, + 'max_nights' => 6, + 'max_weekends' => 200, + 'capacity' => 200, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['בקות', 'ציוד'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => true, + 'not_sunday_morning' => true, + 'created_at' => '2025-03-31T15:30:33.000Z', + 'updated_at' => '2025-04-24T10:16:48.000Z', + 'max_alerts' => 1, + 'max_in_parallel' => 0, + ], + [ + 'id' => 126, + 'team_id' => 33, + 'gender' => false, + 'is_permanent' => true, + 'enlist_date' => null, + 'course' => 39, + 'has_exemption' => false, + 'max_shifts' => 2, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => true, + 'qualifications' => ['ציוד', 'בקות'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-01T17:15:53.000Z', + 'updated_at' => '2025-04-06T14:31:35.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 111, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => '2024-09-21T21:00:00.000Z', + 'course' => 43, + 'has_exemption' => false, + 'max_shifts' => 9, + 'max_nights' => 9, + 'max_weekends' => 400, + 'capacity' => 400, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['רסר מרפם', 'נקיון תהק', 'תכנון EO', 'סאר'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T15:32:28.000Z', + 'updated_at' => '2025-04-24T10:18:17.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 8, + ], + [ + 'id' => 118, + 'team_id' => null, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 1, + 'has_exemption' => false, + 'max_shifts' => 0, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => [], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T17:23:02.000Z', + 'updated_at' => '2025-03-31T18:30:53.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 119, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 1, + 'has_exemption' => false, + 'max_shifts' => 0, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => [], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T17:23:58.000Z', + 'updated_at' => '2025-03-31T18:33:33.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 125, + 'team_id' => 33, + 'gender' => true, + 'is_permanent' => true, + 'enlist_date' => null, + 'course' => 39, + 'has_exemption' => false, + 'max_shifts' => 2, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => true, + 'qualifications' => ['ציוד', 'בקות'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => true, + 'not_sunday_morning' => true, + 'created_at' => '2025-04-01T17:14:53.000Z', + 'updated_at' => '2025-04-06T14:31:35.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 102, + 'team_id' => 5, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '2023-09-18T21:00:00.000Z', + 'course' => 41, + 'has_exemption' => false, + 'max_shifts' => 6, + 'max_nights' => 6, + 'max_weekends' => 200, + 'capacity' => 200, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['סאר', 'תכנון EO', 'SM', 'צתים לילה'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T15:29:30.000Z', + 'updated_at' => '2025-04-24T10:16:48.000Z', + 'max_alerts' => 1, + 'max_in_parallel' => 0, + ], + [ + 'id' => 117, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 38, + 'has_exemption' => false, + 'max_shifts' => 2, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['מנהל מסחרי', 'תכנון מסחרי'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T17:13:49.000Z', + 'updated_at' => '2025-04-06T14:32:24.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 120, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 42, + 'has_exemption' => false, + 'max_shifts' => 5, + 'max_nights' => 5, + 'max_weekends' => 300, + 'capacity' => 300, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['עיבוד מסחרי', 'תכנון EO'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-01T09:49:35.000Z', + 'updated_at' => '2025-04-24T10:18:36.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 2, + ], + [ + 'id' => 122, + 'team_id' => 32, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '2023-03-08T22:00:00.000Z', + 'course' => 40, + 'has_exemption' => false, + 'max_shifts' => 4, + 'max_nights' => 4, + 'max_weekends' => 100, + 'capacity' => 100, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['תכנון מסחרי', 'מנהל מסחרי', 'תכנון EO'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-01T10:14:09.000Z', + 'updated_at' => '2025-04-24T10:16:16.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 114, + 'team_id' => 6, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 42, + 'has_exemption' => false, + 'max_shifts' => 5, + 'max_nights' => 5, + 'max_weekends' => 300, + 'capacity' => 300, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['תכנון מסחרי', 'תכנון EO', 'מנהל מסחרי'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T15:41:45.000Z', + 'updated_at' => '2025-04-24T10:18:36.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 2, + ], + [ + 'id' => 116, + 'team_id' => null, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 39, + 'has_exemption' => false, + 'max_shifts' => 2, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['תכנון EO', 'סאר'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T17:12:12.000Z', + 'updated_at' => '2025-04-06T14:31:35.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 123, + 'team_id' => 32, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '2023-09-18T21:00:00.000Z', + 'course' => 41, + 'has_exemption' => false, + 'max_shifts' => 6, + 'max_nights' => 6, + 'max_weekends' => 200, + 'capacity' => 200, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['תכנון EO', 'עיבוד כל', 'עיבוד מסחרי'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-01T10:16:58.000Z', + 'updated_at' => '2025-04-24T10:16:48.000Z', + 'max_alerts' => 1, + 'max_in_parallel' => 0, + ], + [ + 'id' => 100, + 'team_id' => null, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '2024-09-21T21:00:00.000Z', + 'course' => 43, + 'has_exemption' => false, + 'max_shifts' => 9, + 'max_nights' => 9, + 'max_weekends' => 400, + 'capacity' => 400, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['רסר מרפם', 'נקיון תהק', 'סאר', 'תכנון EO'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => true, + 'not_sunday_morning' => true, + 'created_at' => '2025-03-31T15:28:47.000Z', + 'updated_at' => '2025-04-24T10:18:17.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 8, + ], + [ + 'id' => 92, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => '2024-03-25T22:00:00.000Z', + 'course' => 42, + 'has_exemption' => false, + 'max_shifts' => 5, + 'max_nights' => 5, + 'max_weekends' => 300, + 'capacity' => 300, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['סאר', 'תכנון EO'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => true, + 'not_sunday_morning' => true, + 'created_at' => '2025-03-31T15:27:01.000Z', + 'updated_at' => '2025-04-24T10:18:36.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 2, + ], + [ + 'id' => 86, + 'team_id' => null, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '2023-03-08T22:00:00.000Z', + 'course' => 40, + 'has_exemption' => false, + 'max_shifts' => 4, + 'max_nights' => 4, + 'max_weekends' => 100, + 'capacity' => 100, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['עיבוד כל', 'עיבוד מסחרי', 'תכנון EO'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T15:25:44.000Z', + 'updated_at' => '2025-04-24T10:16:16.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 109, + 'team_id' => null, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => '2024-09-21T21:00:00.000Z', + 'course' => 43, + 'has_exemption' => false, + 'max_shifts' => 9, + 'max_nights' => 9, + 'max_weekends' => 400, + 'capacity' => 400, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['רסר מרפם', 'נקיון תהק', 'עיבוד מסחרי', 'תכנון EO'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T15:31:21.000Z', + 'updated_at' => '2025-04-24T10:18:17.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 8, + ], + [ + 'id' => 113, + 'team_id' => 6, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 41, + 'has_exemption' => false, + 'max_shifts' => 6, + 'max_nights' => 6, + 'max_weekends' => 200, + 'capacity' => 200, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['תכנון מסחרי'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T15:39:30.000Z', + 'updated_at' => '2025-04-24T10:16:48.000Z', + 'max_alerts' => 1, + 'max_in_parallel' => 0, + ], + [ + 'id' => 124, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => true, + 'enlist_date' => null, + 'course' => 36, + 'has_exemption' => false, + 'max_shifts' => 0, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => true, + 'qualifications' => ['תכנון EO', 'צתים לילה'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-01T17:10:00.000Z', + 'updated_at' => '2025-04-01T18:18:48.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 127, + 'team_id' => 33, + 'gender' => false, + 'is_permanent' => true, + 'enlist_date' => null, + 'course' => 39, + 'has_exemption' => false, + 'max_shifts' => 2, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => true, + 'qualifications' => ['תכנון EO', 'תכנון מסחרי'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-01T17:17:01.000Z', + 'updated_at' => '2025-04-06T14:31:35.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 134, + 'team_id' => 14, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 40, + 'has_exemption' => false, + 'max_shifts' => 4, + 'max_nights' => 4, + 'max_weekends' => 100, + 'capacity' => 100, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['תכנון EO', 'SM'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-02T06:50:52.000Z', + 'updated_at' => '2025-04-24T10:16:16.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 135, + 'team_id' => 14, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 41, + 'has_exemption' => false, + 'max_shifts' => 6, + 'max_nights' => 6, + 'max_weekends' => 200, + 'capacity' => 200, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['סאר', 'SM', 'תכנון EO', 'סמלוץ'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-02T06:51:48.000Z', + 'updated_at' => '2025-04-24T10:16:48.000Z', + 'max_alerts' => 1, + 'max_in_parallel' => 0, + ], + [ + 'id' => 128, + 'team_id' => 33, + 'gender' => false, + 'is_permanent' => true, + 'enlist_date' => null, + 'course' => 39, + 'has_exemption' => false, + 'max_shifts' => 2, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => true, + 'qualifications' => ['תכנון EO', 'סאר'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-01T17:18:12.000Z', + 'updated_at' => '2025-04-06T14:31:35.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 132, + 'team_id' => 14, + 'gender' => false, + 'is_permanent' => true, + 'enlist_date' => null, + 'course' => 39, + 'has_exemption' => false, + 'max_shifts' => 2, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['סאר'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-02T06:48:37.000Z', + 'updated_at' => '2025-04-06T14:31:35.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 131, + 'team_id' => 14, + 'gender' => true, + 'is_permanent' => true, + 'enlist_date' => null, + 'course' => 38, + 'has_exemption' => false, + 'max_shifts' => 2, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['תכנון EO', 'SM', 'סאר', 'סמלוץ'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-02T06:47:37.000Z', + 'updated_at' => '2025-04-06T14:32:24.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 136, + 'team_id' => 14, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 42, + 'has_exemption' => false, + 'max_shifts' => 5, + 'max_nights' => 5, + 'max_weekends' => 300, + 'capacity' => 300, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['פיקוד SAR', 'פיקוד EO', 'בקות'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-02T06:52:54.000Z', + 'updated_at' => '2025-04-24T10:18:36.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 2, + ], + [ + 'id' => 149, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 43, + 'has_exemption' => false, + 'max_shifts' => 9, + 'max_nights' => 9, + 'max_weekends' => 400, + 'capacity' => 400, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['ציוד', 'בקות', 'רסר מרפם', 'נקיון תהק'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-06T13:17:40.000Z', + 'updated_at' => '2025-04-24T10:18:17.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 8, + ], + [ + 'id' => 139, + 'team_id' => 15, + 'gender' => false, + 'is_permanent' => true, + 'enlist_date' => '2021-09-11T21:00:00.000Z', + 'course' => 37, + 'has_exemption' => false, + 'max_shifts' => 0, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['פיקוד SAR', 'פיקוד EO', 'בדקן SAR', 'בדקן EO', 'SCAT SAR', 'Scat C', 'Scat 8'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-02T18:41:01.000Z', + 'updated_at' => '2025-04-02T19:27:35.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 143, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => '2023-09-02T21:00:00.000Z', + 'course' => 41, + 'has_exemption' => false, + 'max_shifts' => 6, + 'max_nights' => 6, + 'max_weekends' => 200, + 'capacity' => 200, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['תכנון EO', 'SM', 'מנהל מסחרי', 'תכנון מסחרי'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-03T13:42:12.000Z', + 'updated_at' => '2025-04-24T10:16:48.000Z', + 'max_alerts' => 1, + 'max_in_parallel' => 0, + ], + [ + 'id' => 133, + 'team_id' => 14, + 'gender' => false, + 'is_permanent' => true, + 'enlist_date' => null, + 'course' => 39, + 'has_exemption' => false, + 'max_shifts' => 2, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['בדקן EO', 'בדקן SAR', 'פיקוד EO', 'פיקוד SAR', 'Scat 8', 'SCAT SAR'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-02T06:50:00.000Z', + 'updated_at' => '2025-04-06T14:31:35.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 146, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 42, + 'has_exemption' => false, + 'max_shifts' => 5, + 'max_nights' => 5, + 'max_weekends' => 300, + 'capacity' => 300, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['פיקוד SAR', 'פיקוד EO', 'בקות'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => true, + 'not_sunday_morning' => true, + 'created_at' => '2025-04-06T13:05:45.000Z', + 'updated_at' => '2025-04-24T10:18:36.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 2, + ], + [ + 'id' => 145, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 42, + 'has_exemption' => false, + 'max_shifts' => 5, + 'max_nights' => 5, + 'max_weekends' => 300, + 'capacity' => 300, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['תכנון EO', 'תכנון מסחרי'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => true, + 'not_sunday_morning' => true, + 'created_at' => '2025-04-06T13:04:48.000Z', + 'updated_at' => '2025-04-24T10:18:36.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 2, + ], + [ + 'id' => 129, + 'team_id' => 33, + 'gender' => false, + 'is_permanent' => true, + 'enlist_date' => null, + 'course' => 39, + 'has_exemption' => false, + 'max_shifts' => 2, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => true, + 'qualifications' => ['בקות', 'פיקוד SAR', 'פיקוד EO', 'בדקן EO', 'בדקן SAR', 'SCAT SAR'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-01T17:19:43.000Z', + 'updated_at' => '2025-04-06T14:31:35.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 115, + 'team_id' => 6, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 42, + 'has_exemption' => false, + 'max_shifts' => 5, + 'max_nights' => 5, + 'max_weekends' => 300, + 'capacity' => 300, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['תכנון מסחרי', 'תכנון EO', 'מנהל מסחרי'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T15:42:52.000Z', + 'updated_at' => '2025-04-24T10:18:36.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 2, + ], + [ + 'id' => 147, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 42, + 'has_exemption' => false, + 'max_shifts' => 5, + 'max_nights' => 5, + 'max_weekends' => 300, + 'capacity' => 300, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['ציוד', 'בקות'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-06T13:07:09.000Z', + 'updated_at' => '2025-04-24T10:18:36.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 2, + ], + [ + 'id' => 144, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 42, + 'has_exemption' => false, + 'max_shifts' => 5, + 'max_nights' => 5, + 'max_weekends' => 300, + 'capacity' => 300, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['סאר', 'תכנון EO'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-06T12:58:51.000Z', + 'updated_at' => '2025-04-24T10:18:36.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 2, + ], + [ + 'id' => 58, + 'team_id' => 24, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 42, + 'has_exemption' => false, + 'max_shifts' => 5, + 'max_nights' => 5, + 'max_weekends' => 300, + 'capacity' => 300, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['תכנון EO', 'תכנון מסחרי'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T09:23:03.000Z', + 'updated_at' => '2025-04-24T10:18:36.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 2, + ], + [ + 'id' => 150, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 43, + 'has_exemption' => false, + 'max_shifts' => 9, + 'max_nights' => 9, + 'max_weekends' => 400, + 'capacity' => 400, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['ציוד', 'בקות', 'רסר מרפם', 'נקיון תהק'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-06T13:18:20.000Z', + 'updated_at' => '2025-04-24T10:18:17.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 8, + ], + [ + 'id' => 130, + 'team_id' => 33, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 41, + 'has_exemption' => false, + 'max_shifts' => 6, + 'max_nights' => 6, + 'max_weekends' => 200, + 'capacity' => 200, + 'is_trainee' => false, + 'is_mabat' => true, + 'qualifications' => ['תכנון EO', 'עיבוד כל', 'עיבוד מסחרי'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => true, + 'not_sunday_morning' => true, + 'created_at' => '2025-04-01T17:20:24.000Z', + 'updated_at' => '2025-04-24T10:16:48.000Z', + 'max_alerts' => 1, + 'max_in_parallel' => 0, + ], + [ + 'id' => 140, + 'team_id' => 15, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => '2023-03-08T22:00:00.000Z', + 'course' => 40, + 'has_exemption' => false, + 'max_shifts' => 4, + 'max_nights' => 4, + 'max_weekends' => 100, + 'capacity' => 100, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['בקות', 'ציוד'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-02T18:54:58.000Z', + 'updated_at' => '2025-04-24T10:16:16.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 142, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => '2024-09-02T21:00:00.000Z', + 'course' => 41, + 'has_exemption' => false, + 'max_shifts' => 6, + 'max_nights' => 6, + 'max_weekends' => 200, + 'capacity' => 200, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['SM', 'מנהל מסחרי', 'תכנון EO'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-03T13:41:05.000Z', + 'updated_at' => '2025-04-24T10:16:48.000Z', + 'max_alerts' => 1, + 'max_in_parallel' => 0, + ], + [ + 'id' => 141, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => '2022-09-10T21:00:00.000Z', + 'course' => 39, + 'has_exemption' => false, + 'max_shifts' => 2, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['סאר'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-03T13:37:53.000Z', + 'updated_at' => '2025-04-07T12:01:19.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 138, + 'team_id' => 24, + 'gender' => false, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 42, + 'has_exemption' => false, + 'max_shifts' => 5, + 'max_nights' => 5, + 'max_weekends' => 300, + 'capacity' => 300, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['ציוד', 'בקות'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-02T12:41:31.000Z', + 'updated_at' => '2025-04-24T10:18:36.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 2, + ], + [ + 'id' => 151, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 43, + 'has_exemption' => false, + 'max_shifts' => 9, + 'max_nights' => 9, + 'max_weekends' => 400, + 'capacity' => 400, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['ציוד', 'בקות', 'רסר מרפם', 'נקיון תהק'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-06T13:19:11.000Z', + 'updated_at' => '2025-04-24T10:18:17.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 8, + ], + [ + 'id' => 152, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 43, + 'has_exemption' => false, + 'max_shifts' => 9, + 'max_nights' => 9, + 'max_weekends' => 400, + 'capacity' => 400, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['תכנון מסחרי', 'תכנון EO', 'רסר מרפם', 'נקיון תהק'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-06T13:23:37.000Z', + 'updated_at' => '2025-04-24T10:18:17.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 8, + ], + [ + 'id' => 153, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 43, + 'has_exemption' => false, + 'max_shifts' => 9, + 'max_nights' => 9, + 'max_weekends' => 400, + 'capacity' => 400, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['תכנון מסחרי', 'תכנון EO', 'רסר מרפם', 'נקיון תהק'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-06T13:24:46.000Z', + 'updated_at' => '2025-04-24T10:18:17.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 8, + ], + [ + 'id' => 71, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => '2024-10-21T21:00:00.000Z', + 'course' => 43, + 'has_exemption' => false, + 'max_shifts' => 9, + 'max_nights' => 9, + 'max_weekends' => 400, + 'capacity' => 400, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['רסר מרפם', 'נקיון תהק', 'תכנון EO', 'תכנון מסחרי'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T12:58:11.000Z', + 'updated_at' => '2025-04-24T10:18:17.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 8, + ], + [ + 'id' => 161, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 40, + 'has_exemption' => false, + 'max_shifts' => 4, + 'max_nights' => 4, + 'max_weekends' => 100, + 'capacity' => 100, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['תכנון EO', 'סאר'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-06T14:08:00.000Z', + 'updated_at' => '2025-04-24T10:16:16.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 156, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 40, + 'has_exemption' => false, + 'max_shifts' => 4, + 'max_nights' => 4, + 'max_weekends' => 100, + 'capacity' => 100, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['עיבוד כל', 'תכנון EO', 'SM'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-06T14:03:34.000Z', + 'updated_at' => '2025-04-24T10:16:16.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 160, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 40, + 'has_exemption' => false, + 'max_shifts' => 4, + 'max_nights' => 4, + 'max_weekends' => 100, + 'capacity' => 100, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['SM', 'תכנון EO'], + 'is_reservist' => false, + 'last_reserve_dates' => [], + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-06T14:06:54.000Z', + 'updated_at' => '2025-04-24T10:16:16.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 157, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 40, + 'has_exemption' => false, + 'max_shifts' => 4, + 'max_nights' => 4, + 'max_weekends' => 100, + 'capacity' => 100, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['עיבוד כל', 'עיבוד מסחרי', 'תכנון EO'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-06T14:04:16.000Z', + 'updated_at' => '2025-04-24T10:16:16.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 169, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 39, + 'has_exemption' => false, + 'max_shifts' => 2, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['עיבוד כל', 'עיבוד מסחרי'], + 'is_reservist' => false, + 'last_reserve_dates' => [], + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-06T14:15:23.000Z', + 'updated_at' => '2025-04-06T14:31:35.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 170, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 38, + 'has_exemption' => false, + 'max_shifts' => 2, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['עיבוד כל', 'עיבוד מסחרי'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-06T14:17:31.000Z', + 'updated_at' => '2025-04-06T14:32:24.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 158, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 40, + 'has_exemption' => false, + 'max_shifts' => 4, + 'max_nights' => 4, + 'max_weekends' => 100, + 'capacity' => 100, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['SM', 'תכנון EO'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-06T14:05:08.000Z', + 'updated_at' => '2025-04-24T10:16:16.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 163, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 40, + 'has_exemption' => false, + 'max_shifts' => 4, + 'max_nights' => 4, + 'max_weekends' => 100, + 'capacity' => 100, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['תכנון מסחרי'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-06T14:09:49.000Z', + 'updated_at' => '2025-04-24T10:16:16.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 159, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 40, + 'has_exemption' => false, + 'max_shifts' => 4, + 'max_nights' => 4, + 'max_weekends' => 100, + 'capacity' => 100, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['SM', 'תכנון EO'], + 'is_reservist' => false, + 'last_reserve_dates' => [], + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-06T14:06:02.000Z', + 'updated_at' => '2025-04-24T10:16:16.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 164, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 40, + 'has_exemption' => false, + 'max_shifts' => 4, + 'max_nights' => 4, + 'max_weekends' => 100, + 'capacity' => 100, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['תכנון מסחרי'], + 'is_reservist' => false, + 'last_reserve_dates' => [], + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-06T14:10:36.000Z', + 'updated_at' => '2025-04-24T10:16:16.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 166, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 40, + 'has_exemption' => false, + 'max_shifts' => 4, + 'max_nights' => 4, + 'max_weekends' => 100, + 'capacity' => 100, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['תכנון EO', 'SM', 'Scat 8'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-06T14:13:16.000Z', + 'updated_at' => '2025-04-24T10:16:16.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 155, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 41, + 'has_exemption' => false, + 'max_shifts' => 6, + 'max_nights' => 6, + 'max_weekends' => 200, + 'capacity' => 200, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['עיבוד כל', 'עיבוד מסחרי', 'תכנון EO'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-06T14:01:43.000Z', + 'updated_at' => '2025-04-24T10:16:48.000Z', + 'max_alerts' => 1, + 'max_in_parallel' => 0, + ], + [ + 'id' => 137, + 'team_id' => 14, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 43, + 'has_exemption' => false, + 'max_shifts' => 9, + 'max_nights' => 9, + 'max_weekends' => 400, + 'capacity' => 400, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['רסר מרפם', 'נקיון תהק', 'סאר', 'תכנון EO'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-02T06:54:10.000Z', + 'updated_at' => '2025-04-24T10:18:17.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 8, + ], + [ + 'id' => 63, + 'team_id' => 24, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 43, + 'has_exemption' => false, + 'max_shifts' => 9, + 'max_nights' => 9, + 'max_weekends' => 400, + 'capacity' => 400, + 'is_trainee' => true, + 'is_mabat' => false, + 'qualifications' => ['רסר מרפם', 'נקיון תהק', 'תכנון EO', 'תכנון מסחרי'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-03-31T12:37:12.000Z', + 'updated_at' => '2025-04-24T10:18:17.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 8, + ], + [ + 'id' => 167, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 39, + 'has_exemption' => false, + 'max_shifts' => 2, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['עיבוד כל', 'עיבוד מסחרי'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-06T14:13:59.000Z', + 'updated_at' => '2025-04-06T14:31:35.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 168, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 39, + 'has_exemption' => false, + 'max_shifts' => 2, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['עיבוד כל', 'עיבוד מסחרי'], + 'is_reservist' => false, + 'last_reserve_dates' => [], + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-06T14:14:31.000Z', + 'updated_at' => '2025-04-06T14:31:35.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 171, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 38, + 'has_exemption' => false, + 'max_shifts' => 2, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['עיבוד כל', 'עיבוד מסחרי'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-06T14:18:41.000Z', + 'updated_at' => '2025-04-06T14:32:24.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 162, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 40, + 'has_exemption' => false, + 'max_shifts' => 4, + 'max_nights' => 4, + 'max_weekends' => 100, + 'capacity' => 100, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['עיבוד כל', 'עיבוד מסחרי', 'תכנון EO'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-06T14:09:01.000Z', + 'updated_at' => '2025-04-24T10:16:16.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 172, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 38, + 'has_exemption' => false, + 'max_shifts' => 2, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['תכנון EO', 'עיבוד כל', 'עיבוד מסחרי'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-06T14:21:43.000Z', + 'updated_at' => '2025-04-06T14:32:24.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 173, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 38, + 'has_exemption' => false, + 'max_shifts' => 2, + 'max_nights' => 0, + 'max_weekends' => 0, + 'capacity' => 0, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['תכנון EO'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-06T14:53:05.000Z', + 'updated_at' => '2025-04-06T14:53:05.000Z', + 'max_alerts' => 0, + 'max_in_parallel' => 0, + ], + [ + 'id' => 154, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 41, + 'has_exemption' => false, + 'max_shifts' => 6, + 'max_nights' => 6, + 'max_weekends' => 200, + 'capacity' => 200, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['פיקוד SAR', 'פיקוד EO', 'בדקן EO', 'בקות'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-06T13:59:56.000Z', + 'updated_at' => '2025-04-24T10:16:48.000Z', + 'max_alerts' => 1, + 'max_in_parallel' => 0, + ], + [ + 'id' => 148, + 'team_id' => null, + 'gender' => true, + 'is_permanent' => false, + 'enlist_date' => null, + 'course' => 43, + 'has_exemption' => false, + 'max_shifts' => 9, + 'max_nights' => 9, + 'max_weekends' => 400, + 'capacity' => 400, + 'is_trainee' => false, + 'is_mabat' => false, + 'qualifications' => ['עיבוד מסחרי', 'תכנון EO', 'רסר מרפם', 'נקיון תהק'], + 'is_reservist' => false, + 'last_reserve_dates' => null, + 'reserve_dates' => null, + 'next_reserve_dates' => null, + 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', + 'not_thursday_evening' => false, + 'not_sunday_morning' => false, + 'created_at' => '2025-04-06T13:14:57.000Z', + 'updated_at' => '2025-04-24T10:18:17.000Z', + 'max_alerts' => 4, + 'max_in_parallel' => 8, + ], + ]; + + collect($soldiers)->map(callback: function ($soldier) { + $s = new Soldier; + $s->id = $soldier['id']; + $s->team_id = $soldier['team_id']; + $s->gender = $soldier['gender']; + $s->is_permanent = $soldier['is_permanent']; + $s->enlist_date = Carbon::parse($soldier['enlist_date'])->addHours(2); + $s->course = $soldier['course']; + $s->has_exemption = $soldier['has_exemption']; + $s->max_shifts = $soldier['max_shifts']; + $s->max_nights = $soldier['max_nights']; + $s->max_weekends = $soldier['max_weekends'] / 100; + $s->max_alerts = $soldier['max_alerts']; + $s->max_in_parallel = $soldier['max_in_parallel']; + $s->capacity = $soldier['capacity'] / 100; + $s->is_trainee = $soldier['is_trainee']; + $s->is_mabat = $soldier['is_mabat']; + $s->qualifications = $soldier['qualifications']; + // $s->qualifications = json_decode($soldier['qualifications']); + $s->is_reservist = $soldier['is_reservist']; + $s->last_reserve_dates = $soldier['last_reserve_dates']; + $s->reserve_dates = $soldier['reserve_dates']; + $s->next_reserve_dates = $soldier['next_reserve_dates']; + $s->constraints_limit = json_decode($soldier['constraints_limit']); + $s->not_thursday_evening = $soldier['not_thursday_evening']; + $s->not_sunday_morning = $soldier['not_sunday_morning']; + $s->save(); + }); + } + + public function f() + { + $users = + [ + [ + 'id' => 1, + 'first_name' => 'newspace', + 'last_name' => 'newspace', + 'password' => '8LtTAioW3z2PKG.YV7CfxOEF4OYNB5gBE7oGVHJIB2YOyDGJNaR26', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 1, + 'created_at' => '2025-02-17T10:33:45.000Z', + 'updated_at' => '2025-02-17T10:33:45.000Z', + ], + [ + 'id' => 14, + 'first_name' => 'ליאור', + 'last_name' => 'שביט', + 'password' => 'DvbTvMeYze4zoT0exrL1QevgASqZC1MPKDNXz633gwUTwH9hV9m3m', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 14, + 'created_at' => '2025-03-03T14:15:58.000Z', + 'updated_at' => '2025-03-30T17:31:43.000Z', + ], + [ + 'id' => 15, + 'first_name' => 'גילי', + 'last_name' => 'נחום', + 'password' => 'zdUVx4.Gebseqd4phrMO1eYcFPkdkT0t3nAsBdus8Iwe9jV1cQexa', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 15, + 'created_at' => '2025-03-03T14:16:57.000Z', + 'updated_at' => '2025-03-30T17:31:57.000Z', + ], + [ + 'id' => 16, + 'first_name' => 'חן', + 'last_name' => 'וייסבורט', + 'password' => "rzx2dP.SheDJkyvKDDS\/zOCbYsf8mMQwWDqMz0UVGgTBLa2WMusCC", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 16, + 'created_at' => '2025-03-03T14:19:19.000Z', + 'updated_at' => '2025-03-30T17:32:13.000Z', + ], + [ + 'id' => 17, + 'first_name' => 'שחר', + 'last_name' => 'צביק', + 'password' => "sgJz.L.CUXX99SUY08vz7OoG4k0pH\/AsZ3BAusxLsZ5SlEU9eAPzG", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 17, + 'created_at' => '2025-03-03T14:24:46.000Z', + 'updated_at' => '2025-03-30T17:32:30.000Z', + ], + [ + 'id' => 18, + 'first_name' => 'עומר', + 'last_name' => 'קונפינו', + 'password' => 'zaEKaotoB0AzglZu57IA4uJ0TVo0rHahymmeziXuS8ZHguzLhaP5m', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 18, + 'created_at' => '2025-03-03T14:25:34.000Z', + 'updated_at' => '2025-03-30T17:32:46.000Z', + ], + [ + 'id' => 3, + 'first_name' => 'ניר', + 'last_name' => 'גריפל', + 'password' => "SV5WNt4j.0BQ.WaI\/P9gJeM6h1MjB9SNfhtj1z.Cn8UcFptbfJpk6", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 3, + 'created_at' => '2025-02-18T12:32:18.000Z', + 'updated_at' => '2025-04-24T10:20:37.000Z', + ], + [ + 'id' => 131, + 'first_name' => 'ישי', + 'last_name' => 'גולדשטיין', + 'password' => "F5yA6Vy0mbQf0CwByjEb.OleD0y133mTEFFbswl\/UCpkGUbQJjg5a", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 131, + 'created_at' => '2025-04-02T06:47:38.000Z', + 'updated_at' => '2025-04-02T06:47:38.000Z', + ], + [ + 'id' => 26, + 'first_name' => 'יהלי', + 'last_name' => 'ברמן', + 'password' => 'kolhdCdLXzBf4Y44ybioIOzO3HBzYB0z5XcSLh1wvh14b2KrmYoeW', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 26, + 'created_at' => '2025-03-18T10:03:40.000Z', + 'updated_at' => '2025-03-30T17:34:37.000Z', + ], + [ + 'id' => 27, + 'first_name' => 'תניא', + 'last_name' => 'הלפרין', + 'password' => "Mksu2hft\/PD2k7ge4.vqTejuOgLIH8HoN9bWag81QOYj0fM35EuJK", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 27, + 'created_at' => '2025-03-18T12:01:40.000Z', + 'updated_at' => '2025-03-30T17:34:51.000Z', + ], + [ + 'id' => 28, + 'first_name' => 'הגר', + 'last_name' => 'קרץ', + 'password' => 'o4E0BISeLlI6oLzBrBvoseIWbUrp80hhsSzYSdW.sRlFU1K.TOoGy', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 28, + 'created_at' => '2025-03-18T12:35:42.000Z', + 'updated_at' => '2025-03-30T17:35:14.000Z', + ], + [ + 'id' => 29, + 'first_name' => 'ליעם', + 'last_name' => 'מאייר', + 'password' => "t6Ak0\/MHjnnpSocTncvd5eW.gpMIRCgFHIbYFTvVRPMS6gFgQ2H\/u", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 29, + 'created_at' => '2025-03-20T08:29:32.000Z', + 'updated_at' => '2025-03-30T17:35:28.000Z', + ], + [ + 'id' => 30, + 'first_name' => 'אמיתי', + 'last_name' => 'ויינשטיין', + 'password' => 'wvoBS1jl2hc4cTtRagnGwu5rMIOGDHOKeKriDgkneyx20oAPnEPue', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 30, + 'created_at' => '2025-03-20T08:30:18.000Z', + 'updated_at' => '2025-03-30T17:35:42.000Z', + ], + [ + 'id' => 31, + 'first_name' => 'יובל', + 'last_name' => 'גבסו', + 'password' => 'E4eBYZG9wD83UjTCtmxmmeaf2B0mP5aEgAGP7gHvaWsvRXFTInEFC', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 31, + 'created_at' => '2025-03-20T08:31:02.000Z', + 'updated_at' => '2025-03-30T17:35:57.000Z', + ], + [ + 'id' => 32, + 'first_name' => 'עדי', + 'last_name' => 'אנונו', + 'password' => "hl9NBzd21AGgzUB96cLSBu9\/K0TVz3PSeDqkHBtTgO7MX2yOmZohO", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 32, + 'created_at' => '2025-03-20T09:03:54.000Z', + 'updated_at' => '2025-03-30T17:36:12.000Z', + ], + [ + 'id' => 34, + 'first_name' => 'איתי', + 'last_name' => 'בנימיני', + 'password' => 'UoX2FdceF7GXGdYyV6YujexZ7Uq41V16UbYg65NUVZqDOd24dnK6C', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 34, + 'created_at' => '2025-03-20T09:40:00.000Z', + 'updated_at' => '2025-03-30T17:36:57.000Z', + ], + [ + 'id' => 36, + 'first_name' => 'עידו', + 'last_name' => 'גרניט', + 'password' => "eXmF7RUor7Z8PL6TUDZKweyCaqFTaPjTpxvRkE85WahAVC\/Tc9\/mG", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 36, + 'created_at' => '2025-03-25T11:57:21.000Z', + 'updated_at' => '2025-03-30T17:37:36.000Z', + ], + [ + 'id' => 37, + 'first_name' => 'אמיתי', + 'last_name' => 'ולק', + 'password' => "OI\/cBsgGS3uyf1XxyWXF..sajj0FqyeLnDnF1rmF\/efLsH2nzIGF6", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 37, + 'created_at' => '2025-03-25T11:59:17.000Z', + 'updated_at' => '2025-03-30T17:37:51.000Z', + ], + [ + 'id' => 38, + 'first_name' => 'מאיה', + 'last_name' => 'פרידמן', + 'password' => "htrKlcDg\/Qsmy.c.xIzcguv15lO6CDs6Bvi4oa66dLlYhVbbjiwAO", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 38, + 'created_at' => '2025-03-25T11:59:58.000Z', + 'updated_at' => '2025-03-30T17:38:07.000Z', + ], + [ + 'id' => 39, + 'first_name' => 'נבו', + 'last_name' => 'אטרן', + 'password' => 'NcpkfmQHSXgH1mUSTPz4GeiYeyUdI.ie8E.IduXWitfG98gCZ5Kpa', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 39, + 'created_at' => '2025-03-25T13:59:53.000Z', + 'updated_at' => '2025-03-30T17:38:22.000Z', + ], + [ + 'id' => 40, + 'first_name' => 'עומרי', + 'last_name' => 'אבידן', + 'password' => "m.gWiT.Z92RSL\/5N30.On.r\/pu1M4RpAW0tX4MvlHJLdMRYTYxB.e", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 40, + 'created_at' => '2025-03-25T14:00:37.000Z', + 'updated_at' => '2025-03-30T17:38:52.000Z', + ], + [ + 'id' => 41, + 'first_name' => 'בנימין', + 'last_name' => 'ווינר', + 'password' => "skUIq\/4sjwRccEXXwI71T.zCAjCw9.HPq2umNMD7ntCdEMpSCr\/5q", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 41, + 'created_at' => '2025-03-25T14:01:19.000Z', + 'updated_at' => '2025-03-30T17:39:07.000Z', + ], + [ + 'id' => 8, + 'first_name' => 'אברהם', + 'last_name' => 'מרדכי', + 'password' => 'cd85S2fRyoho9yhVpa2Mgu9D0VEJYqK5TnYRSKKaZdV2yUQq6Ydmy', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 8, + 'created_at' => '2025-02-18T14:20:36.000Z', + 'updated_at' => '2025-03-31T15:27:44.000Z', + ], + [ + 'id' => 43, + 'first_name' => 'זיו', + 'last_name' => 'אשר', + 'password' => 'X1S.0l6qrzU9MWhA1FtDROfpQQRS.ALy6P0Fmg6o7msVfrbpNx9yi', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 43, + 'created_at' => '2025-03-25T15:50:15.000Z', + 'updated_at' => '2025-03-30T17:39:43.000Z', + ], + [ + 'id' => 21, + 'first_name' => 'מיקה', + 'last_name' => 'אורבך', + 'password' => '.WS3i5AvUdvpeDDE5XLrs.mVAnWMoMcrtQOJOYbL23NBuXLWOiE4u', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 21, + 'created_at' => '2025-03-04T13:39:11.000Z', + 'updated_at' => '2025-04-01T06:41:21.000Z', + ], + [ + 'id' => 45, + 'first_name' => 'אמילי', + 'last_name' => 'שקבטור', + 'password' => "\/xdv\/IGkGsnTTtLQWgfzneJQ3BtW8UryKSY\/T7VwdlMoiCXfurpUu", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 45, + 'created_at' => '2025-03-31T07:20:14.000Z', + 'updated_at' => '2025-03-31T07:20:15.000Z', + ], + [ + 'id' => 46, + 'first_name' => 'איתי', + 'last_name' => 'שלו', + 'password' => 'i8cuA7aQPvGGz9fOxdWH5OQa03oWPHqvj9KQqW00BEfR17bSnGNYm', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 46, + 'created_at' => '2025-03-31T07:21:13.000Z', + 'updated_at' => '2025-03-31T07:21:14.000Z', + ], + [ + 'id' => 23, + 'first_name' => 'נדב', + 'last_name' => 'סנאדו', + 'password' => 'T89aQGECppA3A9SP0p6NO.8DxrGfPXqCNX1PIPzJ0qacNtNq.FQIK', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 23, + 'created_at' => '2025-03-18T09:57:15.000Z', + 'updated_at' => '2025-04-03T10:08:11.000Z', + ], + [ + 'id' => 9, + 'first_name' => 'נתנאל', + 'last_name' => 'מוטיאי', + 'password' => 'xreEcbZGoTOJ2aXYrS95POC3.ZqPImwYdsE7RxyWv6rH8KesCafRS', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 9, + 'created_at' => '2025-02-19T12:42:54.000Z', + 'updated_at' => '2025-04-07T12:04:55.000Z', + ], + [ + 'id' => 25, + 'first_name' => 'יאיר', + 'last_name' => 'תובל', + 'password' => 'HalwVMSclZ9cl84FNOp7YOYaPiTbhzvPuWXNtBxzdiyklEJJESEaq', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 25, + 'created_at' => '2025-03-18T10:02:14.000Z', + 'updated_at' => '2025-05-25T10:44:40.000Z', + ], + [ + 'id' => 35, + 'first_name' => 'אריאל', + 'last_name' => 'שייקביץ', + 'password' => "lRPNKtjZAdkfUGEmZtjY6ettwkZeM1EcZWjWE\/uWo1JjvE7t1xd1S", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 35, + 'created_at' => '2025-03-20T09:40:35.000Z', + 'updated_at' => '2025-05-25T10:45:45.000Z', + ], + [ + 'id' => 44, + 'first_name' => 'עמית ', + 'last_name' => 'פיגנבוים', + 'password' => "3NR1P.7GHiKZX.uvk5djZ.0cT9gxJRqfG30MjGeFmJK4JCV4Uw8\/6", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 44, + 'created_at' => '2025-03-31T06:59:19.000Z', + 'updated_at' => '2025-05-29T09:55:13.000Z', + ], + [ + 'id' => 174, + 'first_name' => 'גיא', + 'last_name' => 'פידלמן', + 'password' => "aOGZiSIGhbdrXPwKoJhbAOtbKqtvLIJHhx7dr5Ej9xcpNnsesE\/Mi", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 174, + 'created_at' => '2025-05-25T10:31:42.000Z', + 'updated_at' => '2025-05-29T10:35:40.000Z', + ], + [ + 'id' => 50, + 'first_name' => 'בן ', + 'last_name' => 'וייסר רמד', + 'password' => 'L9UOooCiQh65lHrmie9bueGmy3UXffsgQPKaDpxpelUmbRNHZreIS', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 50, + 'created_at' => '2025-03-31T07:39:49.000Z', + 'updated_at' => '2025-03-31T07:39:50.000Z', + ], + [ + 'id' => 51, + 'first_name' => 'שיר', + 'last_name' => 'חדאד', + 'password' => 'ZFYQ3xLm1yV2vfuByUHh9OrvMSE86IhOG7XEhSqAxpa8dTmCH18He', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 51, + 'created_at' => '2025-03-31T07:41:51.000Z', + 'updated_at' => '2025-03-31T07:41:51.000Z', + ], + [ + 'id' => 52, + 'first_name' => 'עומר', + 'last_name' => 'טיין', + 'password' => "jBBEXY3FJYPyH3nlJM2KGOmfXHVmOYsWy36Nyrvjjd\/3jhkcPdEoa", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 52, + 'created_at' => '2025-03-31T07:43:04.000Z', + 'updated_at' => '2025-03-31T07:43:04.000Z', + ], + [ + 'id' => 33, + 'first_name' => 'מיה', + 'last_name' => 'בורוביק', + 'password' => "XeCMATF186BoTZWID75Nb.KUkAncN\/znoVtszlwb5KZYVkOl1uwdW", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 33, + 'created_at' => '2025-03-20T09:24:34.000Z', + 'updated_at' => '2025-03-31T10:18:46.000Z', + ], + [ + 'id' => 47, + 'first_name' => 'נטע', + 'last_name' => 'זפרני', + 'password' => 'QgLkQxaeaM4RHLrS7G9bauzaqrTMWwJGEl9yNJTeV6dRBqL1NB1Su', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 47, + 'created_at' => '2025-03-31T07:32:58.000Z', + 'updated_at' => '2025-03-31T12:34:33.000Z', + ], + [ + 'id' => 4, + 'first_name' => 'יהב', + 'last_name' => 'נתנוב', + 'password' => "WK7Ikgm\/gFXWgTT8awi50u6qdOtRjqfTbT33WZ8LyPrlmaloaQg3a", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 4, + 'created_at' => '2025-02-18T14:10:59.000Z', + 'updated_at' => '2025-03-30T17:28:25.000Z', + ], + [ + 'id' => 5, + 'first_name' => 'אפרת', + 'last_name' => 'שטטלר', + 'password' => "bY6BgEO0\/auZcj0SqAZWGuC\/yffFQqrPgsbO0snanvlZ.24s.lYRO", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 5, + 'created_at' => '2025-02-18T14:13:25.000Z', + 'updated_at' => '2025-03-30T17:29:05.000Z', + ], + [ + 'id' => 6, + 'first_name' => 'יהלי', + 'last_name' => 'סגרון', + 'password' => '779s96XaBx1WRuTak3EWH.scxlISPqbbDiERYYYrmxJDgEvpgOMcC', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 6, + 'created_at' => '2025-02-18T14:16:23.000Z', + 'updated_at' => '2025-03-30T17:29:19.000Z', + ], + [ + 'id' => 7, + 'first_name' => 'שחר', + 'last_name' => 'זך', + 'password' => "f3bKvSbbCTFKOM9KJp7VreFi4OB9j\/UmpItt4IBfQdgpd9PJjpM5i", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 7, + 'created_at' => '2025-02-18T14:17:34.000Z', + 'updated_at' => '2025-03-30T17:29:40.000Z', + ], + [ + 'id' => 10, + 'first_name' => 'ירדן', + 'last_name' => 'אברם', + 'password' => "X6tdp36iBtfQZXNrFLiKieW3lKm79h2RUUimb\/AYLSohj6U6y6iU6", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 10, + 'created_at' => '2025-03-03T13:59:12.000Z', + 'updated_at' => '2025-03-30T17:30:45.000Z', + ], + [ + 'id' => 11, + 'first_name' => 'בן', + 'last_name' => 'וייסר', + 'password' => "jQl0o\/AbDqQzJek86VlSfegPWx5VTf.J4p8Ze0Nuxy3schziXQu.O", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 11, + 'created_at' => '2025-03-03T14:05:11.000Z', + 'updated_at' => '2025-03-30T17:30:58.000Z', + ], + [ + 'id' => 12, + 'first_name' => 'בן', + 'last_name' => 'כהן', + 'password' => "\/j6gTxWOpaCFOH4dAXmXY.HBd1KIGARmL6p7YpN7qwv9EbLvftqQ2", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 12, + 'created_at' => '2025-03-03T14:12:21.000Z', + 'updated_at' => '2025-03-30T17:31:10.000Z', + ], + [ + 'id' => 13, + 'first_name' => 'רוני', + 'last_name' => 'תפוחי', + 'password' => '5fx5yLvpLcN0niV2qABdUeuEYhpUV0ExmrJ532ZkNyYRS4Vyr170u', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 13, + 'created_at' => '2025-03-03T14:14:24.000Z', + 'updated_at' => '2025-03-30T17:31:24.000Z', + ], + [ + 'id' => 69, + 'first_name' => 'שירה', + 'last_name' => 'בוחנה', + 'password' => 'NcikcZyentF5zXU3UTo67O9exew6qjELItq2GzB9oBjIzwxVl2UQG', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 69, + 'created_at' => '2025-03-31T12:49:22.000Z', + 'updated_at' => '2025-03-31T12:49:22.000Z', + ], + [ + 'id' => 132, + 'first_name' => 'עמית', + 'last_name' => 'כהן', + 'password' => "zJACTZ02ec5KEgTEXNxy1e9Ize8jU0hvQFQThLJDIZLtY4VfZE\/Vq", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 132, + 'created_at' => '2025-04-02T06:48:37.000Z', + 'updated_at' => '2025-04-02T06:48:38.000Z', + ], + [ + 'id' => 133, + 'first_name' => 'עדי', + 'last_name' => 'רצולסקי', + 'password' => "iLlhk2ctWPcz8WcshcpKjOZppKerO\/SvnAmCazTOvgmKHlij\/5bIO", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 133, + 'created_at' => '2025-04-02T06:50:00.000Z', + 'updated_at' => '2025-04-02T06:50:01.000Z', + ], + [ + 'id' => 175, + 'first_name' => 'טליה', + 'last_name' => 'קצוף', + 'password' => "Nz9TtQ.ILyzlH31mXhcJyOiz9xavDOaW\/d4cG9orOj20UvarPg8kq", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 175, + 'created_at' => '2025-05-25T10:33:32.000Z', + 'updated_at' => '2025-05-25T10:33:32.000Z', + ], + [ + 'id' => 134, + 'first_name' => 'קרן', + 'last_name' => 'עדיני', + 'password' => "k9BJg4YxID9V5XRa\/1PVSuG\/rhsOtlMxutK2dc3qDDLC1iOEK0VV.", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 134, + 'created_at' => '2025-04-02T06:50:52.000Z', + 'updated_at' => '2025-04-02T06:50:53.000Z', + ], + [ + 'id' => 73, + 'first_name' => 'גיא ', + 'last_name' => 'אברהם', + 'password' => "ZxsW3Zit\/HFsoLGdHb0LG.Ui6RN8U3wdWo2EAAoC.NWe8r7krbdka", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 73, + 'created_at' => '2025-03-31T15:22:46.000Z', + 'updated_at' => '2025-05-29T09:57:50.000Z', + ], + [ + 'id' => 83, + 'first_name' => 'יעל', + 'last_name' => 'בארי', + 'password' => 'KP40dcRxw61UUq5z.K516..UNTelGjOVriSyHXaL5uXmbvtmfMN4u', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 83, + 'created_at' => '2025-03-31T15:25:11.000Z', + 'updated_at' => '2025-05-29T10:35:02.000Z', + ], + [ + 'id' => 80, + 'first_name' => 'הדר', + 'last_name' => 'זך', + 'password' => "p2H0R8dkFv3\/t0Zwtdc7P.kMiYPhdKZ.9ABr0H1CehY7a9GBG8lMe", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 80, + 'created_at' => '2025-03-31T15:24:19.000Z', + 'updated_at' => '2025-03-31T15:24:19.000Z', + ], + [ + 'id' => 135, + 'first_name' => 'ירדן', + 'last_name' => 'כהן', + 'password' => 'sG2RS.gIefOERrVAYhUOMOjo1ulyzRAykCRQwVPKo4AClN8QFY25e', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 135, + 'created_at' => '2025-04-02T06:51:48.000Z', + 'updated_at' => '2025-04-02T06:51:48.000Z', + ], + [ + 'id' => 81, + 'first_name' => 'נעה ', + 'last_name' => 'אבן חיים', + 'password' => "mvqqRg\/Gnv6mHS5Be.KTbeqkYcPcnReLB09b62dFXw63OYF3ygLzG", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 81, + 'created_at' => '2025-03-31T15:24:34.000Z', + 'updated_at' => '2025-03-31T15:24:34.000Z', + ], + [ + 'id' => 70, + 'first_name' => 'נינה', + 'last_name' => 'לוז', + 'password' => "lJik81\/lkxm5laEMW2PlyulVaF85c6wdAPiZd40hLtBeshOqUaJ0a", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 70, + 'created_at' => '2025-03-31T12:50:27.000Z', + 'updated_at' => '2025-05-29T10:36:07.000Z', + ], + [ + 'id' => 136, + 'first_name' => 'ינאי', + 'last_name' => 'דרוקר', + 'password' => 'A0I7C3rAKRuBaf4gFMGv4.U0osU6Bb6NWshyHh.3CT3RMsPDZT4ja', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 136, + 'created_at' => '2025-04-02T06:52:54.000Z', + 'updated_at' => '2025-04-02T06:52:55.000Z', + ], + [ + 'id' => 86, + 'first_name' => 'עדן', + 'last_name' => 'אסתר עמית', + 'password' => 'R7WjYgGJqHZ7lPxAuqAUpuQ4uMTRJi2hNU0XI4sZX3EV3xrrQQ7VO', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 86, + 'created_at' => '2025-03-31T15:25:44.000Z', + 'updated_at' => '2025-03-31T15:25:44.000Z', + ], + [ + 'id' => 91, + 'first_name' => 'שמואל', + 'last_name' => 'פלץ', + 'password' => '3YboUmlhsqEtwJadJyzRreQpKKRBBIAR9TvbK6oHKD7EzYVs8jZZS', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 91, + 'created_at' => '2025-03-31T15:26:57.000Z', + 'updated_at' => '2025-03-31T15:26:57.000Z', + ], + [ + 'id' => 92, + 'first_name' => 'ליאב', + 'last_name' => 'אביטן', + 'password' => "UYxuGx\/PLWnOJ68P1Ooiie6xHWu3A3g0eB6GJOa1BYdgS\/ZyxE\/0W", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 92, + 'created_at' => '2025-03-31T15:27:01.000Z', + 'updated_at' => '2025-03-31T15:27:02.000Z', + ], + [ + 'id' => 138, + 'first_name' => 'נועה', + 'last_name' => 'רוזנפלד', + 'password' => "Y.N6VLwkuMfFPYmbd3ezIO1BROrAuPeqUVpptPB9ZzVE6\/qs9MB\/O", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 138, + 'created_at' => '2025-04-02T12:41:31.000Z', + 'updated_at' => '2025-04-02T12:41:32.000Z', + ], + [ + 'id' => 99, + 'first_name' => 'עדן', + 'last_name' => 'פרי', + 'password' => "s0W\/yVjkobF\/qL7yCsOIKukyvI7Sam.eaDGn28yrYUS1lb4jB0Wy2", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 99, + 'created_at' => '2025-03-31T15:28:31.000Z', + 'updated_at' => '2025-03-31T15:28:32.000Z', + ], + [ + 'id' => 139, + 'first_name' => 'יובל', + 'last_name' => 'בן דוד', + 'password' => '.DVad7qSVNZ.6MG0U7r9Ae2inbynB7de1apucrgDc8rDqxT8OqK9.', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 139, + 'created_at' => '2025-04-02T18:41:01.000Z', + 'updated_at' => '2025-04-02T18:41:02.000Z', + ], + [ + 'id' => 102, + 'first_name' => 'לירי', + 'last_name' => 'ליבנה', + 'password' => 'OJTXjc5fO3rB6zhERWwBYeGeAWvEofatvC2ZmRJwAW89iuio5tuT.', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 102, + 'created_at' => '2025-03-31T15:29:30.000Z', + 'updated_at' => '2025-03-31T15:29:30.000Z', + ], + [ + 'id' => 140, + 'first_name' => 'נדב', + 'last_name' => 'פרג', + 'password' => "EfLR\/SLbDcGB6l8MvSL2xe8T6JIxoHf5II9SU8pTtzGITZNXRIyw2", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 140, + 'created_at' => '2025-04-02T18:54:58.000Z', + 'updated_at' => '2025-04-02T18:54:58.000Z', + ], + [ + 'id' => 106, + 'first_name' => 'רוני', + 'last_name' => 'גולן', + 'password' => "j0nEQGXw\/1zen1GENoO6teQhIHp57Ai1jbBTsV8T16G0MKF4ZwKAy", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 106, + 'created_at' => '2025-03-31T15:30:33.000Z', + 'updated_at' => '2025-03-31T15:30:34.000Z', + ], + [ + 'id' => 142, + 'first_name' => 'ליה', + 'last_name' => 'מטלס', + 'password' => "ZvtG5OsE\/4\/0loim1yrZpOHYKYUSxgJTtcUexxT16v7y.WnSCJ.Qy", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 142, + 'created_at' => '2025-04-03T13:41:06.000Z', + 'updated_at' => '2025-04-03T13:41:06.000Z', + ], + [ + 'id' => 113, + 'first_name' => 'יובל', + 'last_name' => 'מנדלוביץ', + 'password' => "fUAxz.zgoo39J\/f94.Ko7.p7hr\/bqBA7DFNsOp3o1wrx6jD\/KB\/g.", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 113, + 'created_at' => '2025-03-31T15:39:30.000Z', + 'updated_at' => '2025-03-31T15:39:31.000Z', + ], + [ + 'id' => 115, + 'first_name' => 'שיר', + 'last_name' => 'כהן', + 'password' => 'HJiEUrq2rVkO1v6KKENkLu6ErREoSbBk5ylYKSGuq8U19i2Ko4DyO', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 115, + 'created_at' => '2025-03-31T15:42:52.000Z', + 'updated_at' => '2025-03-31T15:42:52.000Z', + ], + [ + 'id' => 143, + 'first_name' => 'תומר', + 'last_name' => 'אפשטיין', + 'password' => 'wl9oI6td17whkaaWkv9tOebEYz51VvKR7DDuKLvfon1W4PRpjgqUK', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 143, + 'created_at' => '2025-04-03T13:42:13.000Z', + 'updated_at' => '2025-04-03T13:42:13.000Z', + ], + [ + 'id' => 118, + 'first_name' => 'ליבנת', + 'last_name' => 'אלון', + 'password' => '4mq0nX5LWhiJDw97QfoXkeNDVAlhiqE1JyGM7bXt17DvNlkU0lM9y', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 118, + 'created_at' => '2025-03-31T17:23:02.000Z', + 'updated_at' => '2025-03-31T17:23:02.000Z', + ], + [ + 'id' => 53, + 'first_name' => 'אליענה', + 'last_name' => 'פלקוב', + 'password' => 'E8WEEjLSeWlS4dy0F9fn1utlCl7JbifqvgDlZznhsSc4m0JmEDn7G', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 53, + 'created_at' => '2025-03-31T07:46:20.000Z', + 'updated_at' => '2025-04-06T12:55:39.000Z', + ], + [ + 'id' => 119, + 'first_name' => 'עילי', + 'last_name' => 'רן', + 'password' => "iu6NegHdXPoE0CcxCNmWr.Y6kuYT\/F7LYcHgfF98WcEzAx7p15aeW", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 119, + 'created_at' => '2025-03-31T17:23:58.000Z', + 'updated_at' => '2025-03-31T17:23:59.000Z', + ], + [ + 'id' => 144, + 'first_name' => 'יעלה', + 'last_name' => 'עודד', + 'password' => "z84BaCLU3j1Q9Z4jZ9R\/0eyEtvyhgMIEI04xvu1u8\/f9YtbgEOdXK", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 144, + 'created_at' => '2025-04-06T12:58:52.000Z', + 'updated_at' => '2025-04-06T12:58:52.000Z', + ], + [ + 'id' => 122, + 'first_name' => 'נטע', + 'last_name' => 'יצחיאק', + 'password' => "NUIMKeyyH1X8VFDkMyNwtOvTDfeh0eq0FVvYRB\/4PqwkksWEYVLqy", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 122, + 'created_at' => '2025-04-01T10:14:09.000Z', + 'updated_at' => '2025-04-01T10:14:09.000Z', + ], + [ + 'id' => 79, + 'first_name' => 'דניאל', + 'last_name' => 'דבש', + 'password' => 'l3x7VMVZ5.bEpw2OeFrObu6M5WPNNi7rFp1t1RheREkblEm4lFRuy', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 79, + 'created_at' => '2025-03-31T15:24:06.000Z', + 'updated_at' => '2025-04-06T13:02:19.000Z', + ], + [ + 'id' => 124, + 'first_name' => 'אסף', + 'last_name' => 'אריאלי', + 'password' => "Zga.8OXeIKi\/2baLTfVEvOWSbuXf7y7HakkSq02KgvpqIiDA3VvTe", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 124, + 'created_at' => '2025-04-01T17:10:01.000Z', + 'updated_at' => '2025-04-01T17:10:01.000Z', + ], + [ + 'id' => 127, + 'first_name' => 'זהר', + 'last_name' => 'ברק', + 'password' => "Hev5PydJ1Kh6d.WNHdDW8eHM0QiOrMFFdL15OPxtDR6xWZpRP8b\/W", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 127, + 'created_at' => '2025-04-01T17:17:01.000Z', + 'updated_at' => '2025-04-01T17:17:02.000Z', + ], + [ + 'id' => 145, + 'first_name' => 'אור', + 'last_name' => 'ברנר', + 'password' => "\/TFWNEUUlgPs5wp3cav67ukWkstkWKH.hEx6v6FfuMfrW9WvUe1gi", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 145, + 'created_at' => '2025-04-06T13:04:48.000Z', + 'updated_at' => '2025-04-06T13:04:49.000Z', + ], + [ + 'id' => 128, + 'first_name' => 'אביגיל', + 'last_name' => 'עידן', + 'password' => "0X.Sbu\/6m32.B1mTsgjnSejuCQMHz6mlbzecAEjH8CmfsWsoFoOP2", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 128, + 'created_at' => '2025-04-01T17:18:12.000Z', + 'updated_at' => '2025-04-01T17:18:13.000Z', + ], + [ + 'id' => 130, + 'first_name' => 'אילנה', + 'last_name' => 'גרלק', + 'password' => "Efe5iwrYbgp3rSZuh46uv.Z1.I4YEcpEVTOjj\/u4FzhBcZtDop\/Cy", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 130, + 'created_at' => '2025-04-01T17:20:24.000Z', + 'updated_at' => '2025-04-01T17:20:24.000Z', + ], + [ + 'id' => 146, + 'first_name' => 'אריאן', + 'last_name' => 'ברזילי', + 'password' => "KTXZIj9Z9WOd0nEtMni65eDDFUucL\/\/Zcx8mc3HHIHppKXpLd6MtO", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 146, + 'created_at' => '2025-04-06T13:05:45.000Z', + 'updated_at' => '2025-04-06T13:05:46.000Z', + ], + [ + 'id' => 147, + 'first_name' => 'ליאה', + 'last_name' => 'נבון', + 'password' => "jFcner8T.E.Kk6TBcwZogugQ16DgjUto6X5gE3WfqDUj00pF\/oCd6", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 147, + 'created_at' => '2025-04-06T13:07:10.000Z', + 'updated_at' => '2025-04-06T13:07:10.000Z', + ], + [ + 'id' => 148, + 'first_name' => 'סער', + 'last_name' => 'פלד', + 'password' => "ejULPa\/bkXcrwnBuUHE\/o.mU472LOvBnEcWcYVGXQVJNDytMPCi7i", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 148, + 'created_at' => '2025-04-06T13:14:57.000Z', + 'updated_at' => '2025-04-06T13:14:57.000Z', + ], + [ + 'id' => 149, + 'first_name' => 'אור', + 'last_name' => 'פרום', + 'password' => "2RqPTW66S\/59FlwX5cav1O4J7FuwNujGbotfHvh\/B\/FckCoFQnCBq", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 149, + 'created_at' => '2025-04-06T13:17:40.000Z', + 'updated_at' => '2025-04-06T13:17:40.000Z', + ], + [ + 'id' => 150, + 'first_name' => 'נועה', + 'last_name' => 'לפיד', + 'password' => 'yxt5jjcElGbAY0xHJgrprOyWKaU80cpMF.fcTLjJZg88OnqzNdHXO', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 150, + 'created_at' => '2025-04-06T13:18:21.000Z', + 'updated_at' => '2025-04-06T13:18:21.000Z', + ], + [ + 'id' => 111, + 'first_name' => 'שרון', + 'last_name' => 'כץ', + 'password' => 'Hc0WhK.SqfvBHG02fBcMJOCxlyTHUawL2BqYQ2qf.5ZugXhsdAU0m', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 111, + 'created_at' => '2025-03-31T15:32:28.000Z', + 'updated_at' => '2025-04-06T13:32:17.000Z', + ], + [ + 'id' => 137, + 'first_name' => 'רועי', + 'last_name' => 'שכטר', + 'password' => "obKLKquvQD8YF5O8SqBCHOLukKnNWUaAT6\/hG7qzW9rer954XcUGe", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 137, + 'created_at' => '2025-04-02T06:54:10.000Z', + 'updated_at' => '2025-04-06T13:32:57.000Z', + ], + [ + 'id' => 109, + 'first_name' => 'רוני', + 'last_name' => 'שיף', + 'password' => "\/7CN6eTyECSwzD54ZQseU.NG9yAQXOew6xTtQFm0445oxUPzxZUV6", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 109, + 'created_at' => '2025-03-31T15:31:21.000Z', + 'updated_at' => '2025-04-06T13:36:39.000Z', + ], + [ + 'id' => 103, + 'first_name' => 'אביגיל ', + 'last_name' => 'שלזינגר', + 'password' => "wE0IdqUExJOOljyuBh55nuwR264L0y1sz\/b09KdPefzNdJLpHP\/Tu", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 103, + 'created_at' => '2025-03-31T15:29:31.000Z', + 'updated_at' => '2025-04-06T13:39:22.000Z', + ], + [ + 'id' => 96, + 'first_name' => 'נועם', + 'last_name' => 'לב', + 'password' => "SsBAJgBJOECu.2V9gSh9DeZRKM1\/YNlmZ9y4BlMOUNu8Yi6OyylBW", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 96, + 'created_at' => '2025-03-31T15:27:56.000Z', + 'updated_at' => '2025-04-06T13:40:40.000Z', + ], + [ + 'id' => 72, + 'first_name' => 'זהר', + 'last_name' => 'אסף', + 'password' => 'Y4kuiLGDvyMQ8njGp7uJQu1p1BCOHhBz.ttdfmngEzAIX8ODNgf6u', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 72, + 'created_at' => '2025-03-31T12:59:13.000Z', + 'updated_at' => '2025-04-06T13:42:09.000Z', + ], + [ + 'id' => 141, + 'first_name' => 'דניה', + 'last_name' => 'סולומון ', + 'password' => 'HaB2FW.yR40851TDEIsMsOONiJB7Z0scXEF3LMbBZ1OPgjxtgXLTC', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 141, + 'created_at' => '2025-04-03T13:37:53.000Z', + 'updated_at' => '2025-04-07T12:01:19.000Z', + ], + [ + 'id' => 56, + 'first_name' => 'יוסף', + 'last_name' => 'ולדמן', + 'password' => 'bIY16wSNQDCYlpG6siFg7eKgmIobb94etaKokbLsKDEjJXudCh.ie', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 56, + 'created_at' => '2025-03-31T08:49:35.000Z', + 'updated_at' => '2025-03-31T08:49:36.000Z', + ], + [ + 'id' => 58, + 'first_name' => 'זיו', + 'last_name' => 'הלפרן', + 'password' => "ci52aOw5DSzdBv9g83tPBuYlKKUbMrWHWZH51\/kr3znUGBceF016O", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 58, + 'created_at' => '2025-03-31T09:23:03.000Z', + 'updated_at' => '2025-04-02T13:19:07.000Z', + ], + [ + 'id' => 76, + 'first_name' => 'יובל', + 'last_name' => 'שיף', + 'password' => 'gI.oxo0w1opDKvAx0W11Mu.e7ZKi1H7DLvrqaHEi.wjcnL0MTPfl.', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 76, + 'created_at' => '2025-03-31T15:22:55.000Z', + 'updated_at' => '2025-04-02T18:50:20.000Z', + ], + [ + 'id' => 74, + 'first_name' => 'ליה', + 'last_name' => 'סולומון', + 'password' => "N8zwRDSrCfMpWUM63KR\/pOtD9UGKWBFTA1WwYdpBMXOw9dmO4eEWG", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 74, + 'created_at' => '2025-03-31T15:22:46.000Z', + 'updated_at' => '2025-03-31T15:22:47.000Z', + ], + [ + 'id' => 59, + 'first_name' => 'שקד', + 'last_name' => 'קרסנטי', + 'password' => 'X.uwrLwVh0Rla9uNq4g60uH1EKcq2wCLXWc9rue9qm0Gw4VVWiQUC', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 59, + 'created_at' => '2025-03-31T10:23:09.000Z', + 'updated_at' => '2025-03-31T10:23:09.000Z', + ], + [ + 'id' => 55, + 'first_name' => 'עידו', + 'last_name' => 'אל דרור', + 'password' => 'AjgRCfVxFu6xyhiQ9K1my.wT.MM31uVJrKzEfEdNkwEEWkG7fB5nG', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 55, + 'created_at' => '2025-03-31T07:48:39.000Z', + 'updated_at' => '2025-04-06T08:13:04.000Z', + ], + [ + 'id' => 65, + 'first_name' => 'לינוי ', + 'last_name' => 'מערבי', + 'password' => '7YOfJWdKKEEXEOsrVu8Zq.HugsQ44vrTuzKjTICrM2qnLcDbVV9kq', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 65, + 'created_at' => '2025-03-31T12:41:12.000Z', + 'updated_at' => '2025-04-06T13:25:49.000Z', + ], + [ + 'id' => 75, + 'first_name' => 'תום', + 'last_name' => 'מייקל', + 'password' => "WMFXZuy\/CaP3UwZlezX5W.DzsrPVX3ZS\/xb7toFUyeKqspcaksoGq", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 75, + 'created_at' => '2025-03-31T15:22:47.000Z', + 'updated_at' => '2025-05-25T12:28:48.000Z', + ], + [ + 'id' => 71, + 'first_name' => 'עומר', + 'last_name' => 'דולב', + 'password' => '6bMpfiMCYRdGGwdEurQpvuJhgh6kcRGYxscD6TDFB.NL.Uw2Y7sua', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 71, + 'created_at' => '2025-03-31T12:58:11.000Z', + 'updated_at' => '2025-04-06T13:27:34.000Z', + ], + [ + 'id' => 77, + 'first_name' => 'מאיה', + 'last_name' => 'אלשיך', + 'password' => "G.gZsfI\/ySvNym3tVOW0m.IXAAMEzwOvjuDmIrcJ\/eEiEGZJEjJqm", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 77, + 'created_at' => '2025-03-31T15:23:51.000Z', + 'updated_at' => '2025-03-31T15:23:51.000Z', + ], + [ + 'id' => 63, + 'first_name' => 'יואב', + 'last_name' => 'חומסקי', + 'password' => 'aNgH.MMT1UFUGOsqdpPcQet9am.5Pu7GbeGqCG6zpsv75PujDWuBO', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 63, + 'created_at' => '2025-03-31T12:37:12.000Z', + 'updated_at' => '2025-04-06T13:29:44.000Z', + ], + [ + 'id' => 64, + 'first_name' => 'דניאלה', + 'last_name' => 'שגיא', + 'password' => 'M.nlwWSlHAUnosg2SpzDCOTqeMEjoVlHACh7ywazZV69V9Cm6uzkG', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 64, + 'created_at' => '2025-03-31T12:40:42.000Z', + 'updated_at' => '2025-04-06T13:30:22.000Z', + ], + [ + 'id' => 88, + 'first_name' => 'מיכל ', + 'last_name' => 'ברנע', + 'password' => 'tXiueXHnkwyrURKBa1HBUesEdxR4xT6PvVinWKNrLkGG5OLBaMSGS', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 88, + 'created_at' => '2025-03-31T15:26:00.000Z', + 'updated_at' => '2025-05-29T10:36:30.000Z', + ], + [ + 'id' => 105, + 'first_name' => 'יובל', + 'last_name' => 'סעדו', + 'password' => "NGfPtmxloljcwCvdg89BV.wOdmOTDJHC5Y6pM4Y\/leK0W6G3yvRNW", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 105, + 'created_at' => '2025-03-31T15:30:12.000Z', + 'updated_at' => '2025-04-06T13:33:44.000Z', + ], + [ + 'id' => 57, + 'first_name' => 'נטע', + 'last_name' => 'אביעם', + 'password' => 'h25zaW8GG2GCB0POaysQ0u0CvzCmex45uSgr8Ll2b7zYocWbPOOqK', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 57, + 'created_at' => '2025-03-31T09:21:59.000Z', + 'updated_at' => '2025-03-31T12:35:57.000Z', + ], + [ + 'id' => 78, + 'first_name' => 'דפנה', + 'last_name' => 'גינזבורג', + 'password' => 'wWS6mLFClYld6XUBfCbkJOHLZNLnQQsyCyhMJFwPx1bL0UqEGPpC6', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 78, + 'created_at' => '2025-03-31T15:24:04.000Z', + 'updated_at' => '2025-05-29T10:37:09.000Z', + ], + [ + 'id' => 54, + 'first_name' => 'רוני', + 'last_name' => 'מינץ', + 'password' => "Bq25CVaAtuOV5xjqkVsyQ.aCQsGau.Eo\/qcmxPKLBaMHIzoj\/Hdr6", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 54, + 'created_at' => '2025-03-31T07:47:14.000Z', + 'updated_at' => '2025-04-06T13:34:31.000Z', + ], + [ + 'id' => 82, + 'first_name' => 'עידו', + 'last_name' => 'לוי', + 'password' => "QowGrGcchuqMcCZewBAGZegGnBwifelsR\/lKW4TC9wfBxAr6puMci", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 82, + 'created_at' => '2025-03-31T15:24:37.000Z', + 'updated_at' => '2025-03-31T15:24:37.000Z', + ], + [ + 'id' => 97, + 'first_name' => 'אמה', + 'last_name' => 'לוי מעתוק ', + 'password' => 'xJe8jcQiIRy.Iyt1gU7Yw.pRQEpS2QIn8KTnq7FZ8b1u3Hiidsd.e', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 97, + 'created_at' => '2025-03-31T15:28:25.000Z', + 'updated_at' => '2025-04-06T13:35:16.000Z', + ], + [ + 'id' => 112, + 'first_name' => 'שירי', + 'last_name' => 'אואקרט', + 'password' => "Dg1TSLS1\/moBzmKlsm0Bn.od9Wp1VIO14SKzHEBWIiVH4eyH6qOAO", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 112, + 'created_at' => '2025-03-31T15:32:58.000Z', + 'updated_at' => '2025-04-06T13:35:57.000Z', + ], + [ + 'id' => 84, + 'first_name' => 'בר ', + 'last_name' => 'לרר', + 'password' => "2UT8vSBTYXk7XVsw\/Jzm1uEwtyTrW7yvMVtHah\/w3nqJzNKBuAFc2", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 84, + 'created_at' => '2025-03-31T15:25:26.000Z', + 'updated_at' => '2025-03-31T15:25:26.000Z', + ], + [ + 'id' => 67, + 'first_name' => 'טל', + 'last_name' => 'אורון', + 'password' => 'Xte7yB4jrNSW6GKhMMfmu.4VaJy0gGNFWXIlrCXrd5NouoEqa5St6', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 67, + 'created_at' => '2025-03-31T12:45:49.000Z', + 'updated_at' => '2025-03-31T12:45:49.000Z', + ], + [ + 'id' => 104, + 'first_name' => 'תמר', + 'last_name' => 'קרסיק ', + 'password' => "h2agPTj2.ilee\/b3anZ16.W3dmiYfTDoEWm37yEMy3ZDE2IQABkM2", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 104, + 'created_at' => '2025-03-31T15:29:45.000Z', + 'updated_at' => '2025-04-06T13:37:23.000Z', + ], + [ + 'id' => 68, + 'first_name' => 'איתי', + 'last_name' => 'בורנשטיין', + 'password' => "5oYHdD3ml.NgTNxFW128ceC8Z3SW9UoaX\/FiiI3SCb1wP.XYfUnnu", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 68, + 'created_at' => '2025-03-31T12:47:28.000Z', + 'updated_at' => '2025-03-31T12:47:29.000Z', + ], + [ + 'id' => 62, + 'first_name' => 'מאיה', + 'last_name' => 'שנטמן', + 'password' => "R04ZwiS.T.oaqCD.7NLsfu8r\/JG3GCpVCJg7bEbCEgpZEZa6UK7tS", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 62, + 'created_at' => '2025-03-31T11:08:08.000Z', + 'updated_at' => '2025-04-06T13:38:20.000Z', + ], + [ + 'id' => 87, + 'first_name' => 'תמר בתיה', + 'last_name' => 'רוזנבלום', + 'password' => 'tTOXI9QDSDG89F1yvom3vuYqV3Gb9IUjpa2tAb0orZqIaACIIA92a', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 87, + 'created_at' => '2025-03-31T15:25:46.000Z', + 'updated_at' => '2025-03-31T15:25:46.000Z', + ], + [ + 'id' => 108, + 'first_name' => 'נועם', + 'last_name' => 'בריק', + 'password' => 'b2.jn9lAjGLNnxoFyOlIGeUnzkDcDPwkIl2EuIuoAvfYmqZXhA3d2', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 108, + 'created_at' => '2025-03-31T15:31:07.000Z', + 'updated_at' => '2025-04-06T13:40:00.000Z', + ], + [ + 'id' => 93, + 'first_name' => 'רואי', + 'last_name' => 'יהודאי', + 'password' => "jvg.HnWRLwokmG2WXkCLg.VA38\/B6ZGKc.TNf.0BqGe.bn0UZOGk6", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 93, + 'created_at' => '2025-03-31T15:27:06.000Z', + 'updated_at' => '2025-04-06T13:41:15.000Z', + ], + [ + 'id' => 89, + 'first_name' => 'ירדן ', + 'last_name' => 'סימן טוב', + 'password' => 'gYCHWdXCUsm1R6lzuidSsuERurbX6dg7ZiMPJgvpecKUZqBe4ZKfG', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 89, + 'created_at' => '2025-03-31T15:26:40.000Z', + 'updated_at' => '2025-03-31T15:26:40.000Z', + ], + [ + 'id' => 95, + 'first_name' => 'ליהי', + 'last_name' => 'שפילמן', + 'password' => "R8mnDLEeSTrd5rg6v89kNeHxEPHyHeIuWHkb0V\/C6ktAzSRQxB\/tO", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 95, + 'created_at' => '2025-03-31T15:27:53.000Z', + 'updated_at' => '2025-04-06T13:43:42.000Z', + ], + [ + 'id' => 90, + 'first_name' => 'הילי', + 'last_name' => 'בושביץ', + 'password' => "ZTVtUNKzYm3Eoop\/G7RsK.p0C8O66Y090vEFlVr6g6aZ8JeAw9QVK", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 90, + 'created_at' => '2025-03-31T15:26:54.000Z', + 'updated_at' => '2025-04-06T13:44:13.000Z', + ], + [ + 'id' => 60, + 'first_name' => 'לירון', + 'last_name' => 'הורניק', + 'password' => '6JgnMOtPL0rMKH1Go5RDg.JMsgbz5XMLjoDGahx9egREkY0VnZXoW', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 60, + 'created_at' => '2025-03-31T11:05:29.000Z', + 'updated_at' => '2025-03-31T15:27:24.000Z', + ], + [ + 'id' => 66, + 'first_name' => 'מורן', + 'last_name' => 'הריס', + 'password' => "AhnIVozeCO47AWAdTe63qOlPJojtWyLUGMFeSc7M6iUQwI\/hjmiF.", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 66, + 'created_at' => '2025-03-31T12:43:42.000Z', + 'updated_at' => '2025-04-07T12:05:31.000Z', + ], + [ + 'id' => 61, + 'first_name' => 'גפן כוכב', + 'last_name' => 'תורג׳מן', + 'password' => 'cv1XZmzvQJuYtQxTnCNTqe3pXDlZe7QuCnT8Oqp72AJYISBFbFZrW', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 61, + 'created_at' => '2025-03-31T11:07:21.000Z', + 'updated_at' => '2025-03-31T15:27:56.000Z', + ], + [ + 'id' => 120, + 'first_name' => 'ארי', + 'last_name' => "דוז'י", + 'password' => 'Wrnayx1oQp0f7bkT21uXHuxIIK7rMc89WrUnt6o18pcVsEHvZjWH.', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 120, + 'created_at' => '2025-04-01T09:49:35.000Z', + 'updated_at' => '2025-04-22T06:34:06.000Z', + ], + [ + 'id' => 98, + 'first_name' => 'יעל', + 'last_name' => 'רכב', + 'password' => "x\/69.rxjvb.5A8\/7UoQn6egfOxOOscWkuRZdoU2PSrBXS4vouCoJC", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 98, + 'created_at' => '2025-03-31T15:28:26.000Z', + 'updated_at' => '2025-03-31T15:28:27.000Z', + ], + [ + 'id' => 101, + 'first_name' => 'נעה', + 'last_name' => 'וקנין', + 'password' => "aDYlfRO7CJHS\/0BU7CsEde9NS0iG7FHlPgk9vybBfOeDfkH6Z9ZCa", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 101, + 'created_at' => '2025-03-31T15:28:50.000Z', + 'updated_at' => '2025-03-31T15:28:50.000Z', + ], + [ + 'id' => 107, + 'first_name' => 'מאיה', + 'last_name' => 'קין', + 'password' => "8O79IruQajDnGP8jBArwpuvdxbGVIsjbdJ9qB72vI5Ns\/ArAx207C", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 107, + 'created_at' => '2025-03-31T15:30:35.000Z', + 'updated_at' => '2025-03-31T15:30:35.000Z', + ], + [ + 'id' => 110, + 'first_name' => 'תור', + 'last_name' => 'ווסקר', + 'password' => 'C.FWyd0UWIneVymTJP5lmecaFsqDpFaVIgvOt3hrRtxB8.aQjNg..', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 110, + 'created_at' => '2025-03-31T15:31:43.000Z', + 'updated_at' => '2025-03-31T15:31:43.000Z', + ], + [ + 'id' => 114, + 'first_name' => 'יובל', + 'last_name' => 'ויינינגר ', + 'password' => 'k8Oe1NoTrwCUV7X2HeAD6O1o5ikPWREcOYeJ3En9cjN2AKwYqzFT.', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 114, + 'created_at' => '2025-03-31T15:41:45.000Z', + 'updated_at' => '2025-03-31T15:41:45.000Z', + ], + [ + 'id' => 117, + 'first_name' => 'איל', + 'last_name' => 'טפר', + 'password' => "GEPrAOXbXB\/45aoUVC568eNqZFdMLT0Xq95nu7LXg5LNYRU.CCe1C", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 117, + 'created_at' => '2025-03-31T17:13:49.000Z', + 'updated_at' => '2025-03-31T17:13:49.000Z', + ], + [ + 'id' => 116, + 'first_name' => 'דניה', + 'last_name' => 'סולומון', + 'password' => 'Pd0wSx5dBTdIesDpPaWjyembbCKawvicUoGwS1lesJvSMZLZRvyUu', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 116, + 'created_at' => '2025-03-31T17:12:12.000Z', + 'updated_at' => '2025-03-31T17:19:52.000Z', + ], + [ + 'id' => 123, + 'first_name' => 'יעל', + 'last_name' => 'בהט', + 'password' => 'EFXfCSTHyHUzlGmszuBtXOm.plFycYG.ipMLtrtzPPDM7YeIrb7Ne', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 123, + 'created_at' => '2025-04-01T10:16:58.000Z', + 'updated_at' => '2025-04-01T10:16:59.000Z', + ], + [ + 'id' => 125, + 'first_name' => 'בר', + 'last_name' => 'בליט', + 'password' => "6dbRBwZZ0u5Hb3jK88MrBeVn4J4\/inI2Vm4VPZwnhtpzTT09zpD\/W", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 125, + 'created_at' => '2025-04-01T17:14:53.000Z', + 'updated_at' => '2025-04-01T17:14:54.000Z', + ], + [ + 'id' => 126, + 'first_name' => 'אלה', + 'last_name' => 'כלנועם', + 'password' => 'Im9ssEBBrGlEh30Vii2D6eaBvJM5dnjJfQp597p3U8isp87kT9RDm', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 126, + 'created_at' => '2025-04-01T17:15:54.000Z', + 'updated_at' => '2025-04-01T17:15:54.000Z', + ], + [ + 'id' => 129, + 'first_name' => 'טליה יונה', + 'last_name' => 'גורן עזרן', + 'password' => "icHMKB2PnWoGm8x3hM\/qgOmRx\/wBgUPdnoV9\/OIyXDCAj0U\/Z.yzy", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 129, + 'created_at' => '2025-04-01T17:19:43.000Z', + 'updated_at' => '2025-04-01T17:19:43.000Z', + ], + [ + 'id' => 151, + 'first_name' => 'גלי', + 'last_name' => 'עבודי', + 'password' => '4.mhVBLp9SgBuZ.tKQwTEObYZI.TOtMI.y6E1UaTdtzaJQgmfDTiy', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 151, + 'created_at' => '2025-04-06T13:19:12.000Z', + 'updated_at' => '2025-04-06T13:19:12.000Z', + ], + [ + 'id' => 176, + 'first_name' => 'אופיר', + 'last_name' => 'טוויזר', + 'password' => "H.4oD9d2APkhSMxo2Lmcp.aOz2WLISLUhWP\/wNX.Q1L3xSo3Tn5DS", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 176, + 'created_at' => '2025-05-25T10:38:37.000Z', + 'updated_at' => '2025-05-25T10:38:37.000Z', + ], + [ + 'id' => 152, + 'first_name' => 'אורי', + 'last_name' => 'שלום', + 'password' => "5Ts7CniKMSVJmLJ9LvTM4uGr.zhN58Tcs3pxA.Wq6yEAQ8\/pVCQZW", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 152, + 'created_at' => '2025-04-06T13:23:37.000Z', + 'updated_at' => '2025-04-06T13:23:38.000Z', + ], + [ + 'id' => 153, + 'first_name' => 'ענבר', + 'last_name' => 'וירצברגר', + 'password' => "H6c.9PDbCyXfbH1oErIozOAT9vBh5rJ\/QXDkDgf0\/\/AgBB6yxVVpq", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 153, + 'created_at' => '2025-04-06T13:24:46.000Z', + 'updated_at' => '2025-04-06T13:24:46.000Z', + ], + [ + 'id' => 100, + 'first_name' => 'שקד', + 'last_name' => 'שפירא', + 'password' => "D2nnqce0fK1ROttQFaQWHO47G0BZUgu\/hvv5uwQIGML2D7FA3efZS", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 100, + 'created_at' => '2025-03-31T15:28:47.000Z', + 'updated_at' => '2025-04-06T13:31:30.000Z', + ], + [ + 'id' => 154, + 'first_name' => 'רוני', + 'last_name' => 'כנען', + 'password' => "ZGlyoANtz0Su4hqVu\/bgdukVCePMXf3h8wwasoQADrjw0cp5H2ab.", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 154, + 'created_at' => '2025-04-06T13:59:56.000Z', + 'updated_at' => '2025-04-06T13:59:56.000Z', + ], + [ + 'id' => 155, + 'first_name' => 'נועה', + 'last_name' => 'שנער', + 'password' => 'Xjo6x5njzXd1TymdOrVzSutf9Qc2KhQXYOUT6yUh3l8Czn9lYfNAC', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 155, + 'created_at' => '2025-04-06T14:01:43.000Z', + 'updated_at' => '2025-04-06T14:01:43.000Z', + ], + [ + 'id' => 156, + 'first_name' => 'עידו', + 'last_name' => 'ריקלין', + 'password' => 'xUFXc.OADqjehVQ1EXK5v.npWpV3KaRzGjy4jho4Y8flLge0jCt0O', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 156, + 'created_at' => '2025-04-06T14:03:35.000Z', + 'updated_at' => '2025-04-06T14:03:35.000Z', + ], + [ + 'id' => 157, + 'first_name' => 'אמיר', + 'last_name' => 'עופרי', + 'password' => "O5bjv9LXrKN9zG9\/62HfUOKMPJ6LDEXppXl5\/lbVJngDtkDX4KVlK", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 157, + 'created_at' => '2025-04-06T14:04:17.000Z', + 'updated_at' => '2025-04-06T14:04:17.000Z', + ], + [ + 'id' => 158, + 'first_name' => 'נועה', + 'last_name' => 'אברהמי', + 'password' => 'bbXDnQN68caDD0ZYABBVfOxjxLEYBouf0pjCkW3Sr.GYyl5ibeeaC', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 158, + 'created_at' => '2025-04-06T14:05:08.000Z', + 'updated_at' => '2025-04-06T14:05:08.000Z', + ], + [ + 'id' => 159, + 'first_name' => 'יותם', + 'last_name' => 'שור', + 'password' => 'y7918oEglcajheLE9nCuvOdoKKK5RiPkSyDHp8oqNSwKArS5M7uv.', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 159, + 'created_at' => '2025-04-06T14:06:02.000Z', + 'updated_at' => '2025-04-06T14:06:20.000Z', + ], + [ + 'id' => 160, + 'first_name' => 'יובל', + 'last_name' => 'גולן', + 'password' => 'r3du8tQXgBPOTKt9BdYS0.TuidStiPWnLzt674QzNIC5uM8Mp8i2K', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 160, + 'created_at' => '2025-04-06T14:06:54.000Z', + 'updated_at' => '2025-04-06T14:07:05.000Z', + ], + [ + 'id' => 161, + 'first_name' => 'נועה', + 'last_name' => 'שנור', + 'password' => "yihhCqyGaaq8pxJHN4nlKegJMlZbBAsQ5tn\/dUP9A4LVyhtxXRP6C", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 161, + 'created_at' => '2025-04-06T14:08:01.000Z', + 'updated_at' => '2025-04-06T14:08:01.000Z', + ], + [ + 'id' => 162, + 'first_name' => 'מישל', + 'last_name' => 'שכטר', + 'password' => 'ys42nLEy4HmNPaGlJ3QAmOxozic2Ex47AzWrDQJ9RrWvRPcyq4rKO', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 162, + 'created_at' => '2025-04-06T14:09:01.000Z', + 'updated_at' => '2025-04-06T14:09:02.000Z', + ], + [ + 'id' => 163, + 'first_name' => 'מיטל', + 'last_name' => 'דגיוריב', + 'password' => "OJbK4ObAEFWKVHdi\/x7CCOsfF9\/Doczco.t8IfFSdiC.JxGiVOtqK", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 163, + 'created_at' => '2025-04-06T14:09:49.000Z', + 'updated_at' => '2025-04-06T14:09:49.000Z', + ], + [ + 'id' => 164, + 'first_name' => 'מתן', + 'last_name' => 'נחמני', + 'password' => "p5LcuXCS3nXABZ0VNf8hTOCPTQwd0rDzTYx\/70\/hhMDz0Ep5knc0S", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 164, + 'created_at' => '2025-04-06T14:10:36.000Z', + 'updated_at' => '2025-04-06T14:10:52.000Z', + ], + [ + 'id' => 166, + 'first_name' => 'רותם', + 'last_name' => 'תמרי', + 'password' => '.uQXnGREF2cRr2OzfjfCH.WXaiS6F64dAiDJP7ZgCqdRFqXcdcwy2', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 166, + 'created_at' => '2025-04-06T14:13:16.000Z', + 'updated_at' => '2025-04-06T14:13:16.000Z', + ], + [ + 'id' => 167, + 'first_name' => 'תמר', + 'last_name' => 'יונת', + 'password' => 'p4x5jSmxPKSnVpvPPvjJbul3PTe0o0eh40OUlnX3kmqHJpgh6P4U6', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 167, + 'created_at' => '2025-04-06T14:14:00.000Z', + 'updated_at' => '2025-04-06T14:14:00.000Z', + ], + [ + 'id' => 168, + 'first_name' => 'גילי', + 'last_name' => 'שביט', + 'password' => "S7KvqF\/5EYJPDuI2BgnTteuubKcqAQOzvqkQ9UCsDV5aMsqQSxY7q", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 168, + 'created_at' => '2025-04-06T14:14:31.000Z', + 'updated_at' => '2025-04-06T14:14:45.000Z', + ], + [ + 'id' => 169, + 'first_name' => 'גילי', + 'last_name' => 'שבת', + 'password' => "5h3hA3hOyjRm6Jeq\/f04K.m3DdMPlC3L0aIz0tUmPxcoP3zK07Cdm", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 169, + 'created_at' => '2025-04-06T14:15:23.000Z', + 'updated_at' => '2025-04-06T14:15:37.000Z', + ], + [ + 'id' => 170, + 'first_name' => 'עמית', + 'last_name' => 'בובר', + 'password' => "7qFJRkzBEvcG9si0NV4a\/OGPDfi6eo.Axw\/KRiC6hr.uYNnP.hP4e", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 170, + 'created_at' => '2025-04-06T14:17:32.000Z', + 'updated_at' => '2025-04-06T14:17:32.000Z', + ], + [ + 'id' => 171, + 'first_name' => 'ירין', + 'last_name' => 'ניסנוב', + 'password' => "XIFaT0cjjqcr0Yt6h7ApN.nvt8y6jXITA\/llcLgojSPpSXbdYUXSa", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 171, + 'created_at' => '2025-04-06T14:18:41.000Z', + 'updated_at' => '2025-04-06T14:18:41.000Z', + ], + [ + 'id' => 172, + 'first_name' => 'עדי', + 'last_name' => 'גרינשפון', + 'password' => "osU3XHsxqpLcXwcLergJouV7iDYxufqg4JRHN\/SX3Lv2tt\/EyqsS6", + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 172, + 'created_at' => '2025-04-06T14:21:43.000Z', + 'updated_at' => '2025-04-06T14:21:43.000Z', + ], + [ + 'id' => 173, + 'first_name' => 'תמר', + 'last_name' => 'למפל', + 'password' => 'sfmthtTx2iB5yYAviI4wBeYkcsLoxNXCxkRtLl2FyPwmmtC6jdDtO', + 'userable_type' => 'App\\Models\\Soldier', + 'userable_id' => 173, + 'created_at' => '2025-04-06T14:53:05.000Z', + 'updated_at' => '2025-04-06T14:53:05.000Z', + ], + ]; + + collect($users)->map(callback: function ($user) { + $u = new User; + $u->first_name = $user['first_name']; + $u->last_name = $user['last_name']; + $u->password = '0000000'; + $u->userable_type = Soldier::class; + $u->userable_id = $user['userable_id']; + $u->save(); + $u->assignRole('soldier'); + }); + } + + public function g() + { + $soldiers = Soldier::all(); + + collect($soldiers)->each(function ($soldier) { + if (User::where('userable_id', $soldier->id)->get()->isEmpty()) { + \DB::table('soldiers')->delete($soldier->id); + // \DB::table('shifts')->where('soldier_id', $soldier->id)->delete(); + } + }); + + $users = User::all(); + $users->each(function (User $user) { + if (! Soldier::find($user->userable_id)) { + \DB::table('users')->delete($user->id); + } + }); + } + + // public function h() + // { + // $users_id = User::all('id')->pluck('id'); + // collect($users_id)->each(fn($userid)=>$this->createConstraints($userid)); + // } + + public function i() + { + $constraints = + [ + [ + 'id' => 1, + 'soldier_id' => 43, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-13 07:52:37', + 'end_date' => '2025-07-13 09:52:37', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 2, + 'soldier_id' => 43, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-21 19:57:47', + 'end_date' => '2025-07-21 21:57:47', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 3, + 'soldier_id' => 43, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-02 15:38:03', + 'end_date' => '2025-07-02 19:38:03', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 4, + 'soldier_id' => 43, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-18 01:51:06', + 'end_date' => '2025-07-18 04:51:06', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 5, + 'soldier_id' => 43, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-02 16:56:26', + 'end_date' => '2025-07-02 17:56:26', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 6, + 'soldier_id' => 43, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-14 05:57:41', + 'end_date' => '2025-07-14 10:57:41', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 7, + 'soldier_id' => 43, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-26 20:25:44', + 'end_date' => '2025-07-26 21:25:44', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 8, + 'soldier_id' => 43, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-02 20:13:30', + 'end_date' => '2025-07-03 01:13:30', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 9, + 'soldier_id' => 43, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-26 05:35:47', + 'end_date' => '2025-07-26 07:35:47', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 10, + 'soldier_id' => 43, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-03 20:08:16', + 'end_date' => '2025-07-03 22:08:16', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 11, + 'soldier_id' => 43, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-21 18:30:14', + 'end_date' => '2025-07-21 20:30:14', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 12, + 'soldier_id' => 43, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-10 11:40:08', + 'end_date' => '2025-07-10 15:40:08', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 13, + 'soldier_id' => 43, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-04 16:41:29', + 'end_date' => '2025-07-04 19:41:29', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 14, + 'soldier_id' => 43, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-06 12:04:48', + 'end_date' => '2025-07-06 15:04:48', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 15, + 'soldier_id' => 7, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-06 00:22:45', + 'end_date' => '2025-07-06 04:22:45', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 16, + 'soldier_id' => 7, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-03 21:44:59', + 'end_date' => '2025-07-04 01:44:59', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 17, + 'soldier_id' => 7, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-28 22:09:04', + 'end_date' => '2025-07-29 01:09:04', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 18, + 'soldier_id' => 7, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-19 21:03:59', + 'end_date' => '2025-07-19 22:03:59', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 19, + 'soldier_id' => 7, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-30 20:54:17', + 'end_date' => '2025-07-30 23:54:17', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 20, + 'soldier_id' => 7, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-15 05:37:58', + 'end_date' => '2025-07-15 10:37:58', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 21, + 'soldier_id' => 52, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-21 20:06:17', + 'end_date' => '2025-07-21 21:06:17', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 22, + 'soldier_id' => 52, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-28 10:09:36', + 'end_date' => '2025-07-28 12:09:36', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 23, + 'soldier_id' => 52, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-19 02:39:24', + 'end_date' => '2025-07-19 03:39:24', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 24, + 'soldier_id' => 52, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-16 12:34:43', + 'end_date' => '2025-07-16 17:34:43', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 25, + 'soldier_id' => 52, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-25 02:13:25', + 'end_date' => '2025-07-25 05:13:25', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 26, + 'soldier_id' => 52, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-01 09:25:14', + 'end_date' => '2025-07-01 10:25:14', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 27, + 'soldier_id' => 52, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-16 20:28:33', + 'end_date' => '2025-07-17 01:28:33', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 28, + 'soldier_id' => 52, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-29 20:40:36', + 'end_date' => '2025-07-29 21:40:36', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 29, + 'soldier_id' => 52, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-15 20:44:55', + 'end_date' => '2025-07-16 01:44:55', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 30, + 'soldier_id' => 52, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-05 23:30:06', + 'end_date' => '2025-07-06 00:30:06', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 31, + 'soldier_id' => 52, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-04 14:21:27', + 'end_date' => '2025-07-04 16:21:27', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 32, + 'soldier_id' => 52, + 'constraint_type' => 'School', + 'start_date' => '2025-07-02 17:27:22', + 'end_date' => '2025-07-02 20:27:22', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 33, + 'soldier_id' => 52, + 'constraint_type' => 'School', + 'start_date' => '2025-07-28 07:34:09', + 'end_date' => '2025-07-28 12:34:09', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 34, + 'soldier_id' => 52, + 'constraint_type' => 'School', + 'start_date' => '2025-07-15 23:10:43', + 'end_date' => '2025-07-16 04:10:43', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 35, + 'soldier_id' => 145, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-13 09:00:19', + 'end_date' => '2025-07-13 12:00:19', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 36, + 'soldier_id' => 145, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-30 16:40:51', + 'end_date' => '2025-07-30 20:40:51', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 37, + 'soldier_id' => 145, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-30 11:08:12', + 'end_date' => '2025-07-30 16:08:12', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 38, + 'soldier_id' => 145, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-11 21:04:35', + 'end_date' => '2025-07-12 02:04:35', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 39, + 'soldier_id' => 145, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-20 19:57:07', + 'end_date' => '2025-07-20 22:57:07', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 40, + 'soldier_id' => 145, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-23 20:48:15', + 'end_date' => '2025-07-23 23:48:15', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 41, + 'soldier_id' => 145, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-08 20:33:30', + 'end_date' => '2025-07-09 01:33:30', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 42, + 'soldier_id' => 145, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-15 16:02:58', + 'end_date' => '2025-07-15 20:02:58', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 43, + 'soldier_id' => 145, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-13 16:03:08', + 'end_date' => '2025-07-13 17:03:08', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 44, + 'soldier_id' => 145, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-07 09:58:50', + 'end_date' => '2025-07-07 12:58:50', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 45, + 'soldier_id' => 145, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-05 14:24:05', + 'end_date' => '2025-07-05 18:24:05', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 46, + 'soldier_id' => 145, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-22 16:58:44', + 'end_date' => '2025-07-22 18:58:44', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 47, + 'soldier_id' => 145, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-07 07:53:53', + 'end_date' => '2025-07-07 11:53:53', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 48, + 'soldier_id' => 145, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-03 03:12:12', + 'end_date' => '2025-07-03 08:12:12', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 49, + 'soldier_id' => 145, + 'constraint_type' => 'School', + 'start_date' => '2025-07-10 22:21:18', + 'end_date' => '2025-07-11 00:21:18', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 50, + 'soldier_id' => 145, + 'constraint_type' => 'School', + 'start_date' => '2025-07-08 12:57:49', + 'end_date' => '2025-07-08 15:57:49', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 51, + 'soldier_id' => 145, + 'constraint_type' => 'School', + 'start_date' => '2025-07-23 05:40:39', + 'end_date' => '2025-07-23 10:40:39', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 52, + 'soldier_id' => 108, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-07 01:37:59', + 'end_date' => '2025-07-07 04:37:59', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 53, + 'soldier_id' => 108, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-06 04:02:27', + 'end_date' => '2025-07-06 08:02:27', + 'created_at' => '2025-05-13T06:41:23.000000Z', + 'updated_at' => '2025-05-13T06:41:23.000000Z', + ], + [ + 'id' => 54, + 'soldier_id' => 108, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-30 03:15:17', + 'end_date' => '2025-07-30 04:15:17', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 55, + 'soldier_id' => 108, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-10 00:21:25', + 'end_date' => '2025-07-10 04:21:25', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 56, + 'soldier_id' => 108, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-12 01:42:32', + 'end_date' => '2025-07-12 05:42:32', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 57, + 'soldier_id' => 108, + 'constraint_type' => 'School', + 'start_date' => '2025-07-12 07:35:50', + 'end_date' => '2025-07-12 08:35:50', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 58, + 'soldier_id' => 59, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-17 09:01:17', + 'end_date' => '2025-07-17 14:01:17', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 59, + 'soldier_id' => 59, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-04 03:19:48', + 'end_date' => '2025-07-04 05:19:48', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 60, + 'soldier_id' => 59, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-24 22:32:38', + 'end_date' => '2025-07-25 02:32:38', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 61, + 'soldier_id' => 59, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-16 00:55:30', + 'end_date' => '2025-07-16 05:55:30', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 62, + 'soldier_id' => 59, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-29 06:40:25', + 'end_date' => '2025-07-29 07:40:25', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 63, + 'soldier_id' => 59, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-22 01:10:26', + 'end_date' => '2025-07-22 02:10:26', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 64, + 'soldier_id' => 59, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-15 09:48:53', + 'end_date' => '2025-07-15 14:48:53', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 65, + 'soldier_id' => 59, + 'constraint_type' => 'School', + 'start_date' => '2025-07-07 20:01:14', + 'end_date' => '2025-07-07 21:01:14', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 66, + 'soldier_id' => 167, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-20 01:52:36', + 'end_date' => '2025-07-20 02:52:36', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 67, + 'soldier_id' => 167, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-26 04:33:50', + 'end_date' => '2025-07-26 08:33:50', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 68, + 'soldier_id' => 167, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-08 22:05:23', + 'end_date' => '2025-07-09 01:05:23', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 69, + 'soldier_id' => 167, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-18 04:28:31', + 'end_date' => '2025-07-18 07:28:31', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 70, + 'soldier_id' => 167, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-27 01:03:21', + 'end_date' => '2025-07-27 04:03:21', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 71, + 'soldier_id' => 167, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-16 00:20:27', + 'end_date' => '2025-07-16 02:20:27', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 72, + 'soldier_id' => 167, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-06 20:37:55', + 'end_date' => '2025-07-06 22:37:55', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 73, + 'soldier_id' => 167, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-05 20:18:56', + 'end_date' => '2025-07-06 01:18:56', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 74, + 'soldier_id' => 167, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-29 09:24:06', + 'end_date' => '2025-07-29 12:24:06', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 75, + 'soldier_id' => 167, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-05 06:01:50', + 'end_date' => '2025-07-05 10:01:50', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 76, + 'soldier_id' => 167, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-24 08:16:42', + 'end_date' => '2025-07-24 13:16:42', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 77, + 'soldier_id' => 167, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-12 19:58:47', + 'end_date' => '2025-07-13 00:58:47', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 78, + 'soldier_id' => 167, + 'constraint_type' => 'School', + 'start_date' => '2025-07-21 14:52:00', + 'end_date' => '2025-07-21 19:52:00', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 79, + 'soldier_id' => 167, + 'constraint_type' => 'School', + 'start_date' => '2025-07-21 00:05:46', + 'end_date' => '2025-07-21 03:05:46', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 80, + 'soldier_id' => 167, + 'constraint_type' => 'School', + 'start_date' => '2025-07-28 10:58:04', + 'end_date' => '2025-07-28 11:58:04', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 81, + 'soldier_id' => 136, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-18 18:50:25', + 'end_date' => '2025-07-18 23:50:25', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 82, + 'soldier_id' => 136, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-20 21:24:31', + 'end_date' => '2025-07-20 23:24:31', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 83, + 'soldier_id' => 136, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-08 00:44:50', + 'end_date' => '2025-07-08 05:44:50', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 84, + 'soldier_id' => 136, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-25 20:45:54', + 'end_date' => '2025-07-25 21:45:54', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 85, + 'soldier_id' => 136, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-27 04:10:44', + 'end_date' => '2025-07-27 06:10:44', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 86, + 'soldier_id' => 136, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-05 20:16:51', + 'end_date' => '2025-07-05 22:16:51', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 87, + 'soldier_id' => 136, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-05 11:13:55', + 'end_date' => '2025-07-05 15:13:55', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 88, + 'soldier_id' => 136, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-29 17:41:25', + 'end_date' => '2025-07-29 19:41:25', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 89, + 'soldier_id' => 136, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-10 21:55:38', + 'end_date' => '2025-07-11 00:55:38', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 90, + 'soldier_id' => 136, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-27 19:48:45', + 'end_date' => '2025-07-27 20:48:45', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 91, + 'soldier_id' => 136, + 'constraint_type' => 'School', + 'start_date' => '2025-07-23 10:38:31', + 'end_date' => '2025-07-23 13:38:31', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 92, + 'soldier_id' => 136, + 'constraint_type' => 'School', + 'start_date' => '2025-07-09 23:02:26', + 'end_date' => '2025-07-10 04:02:26', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 93, + 'soldier_id' => 136, + 'constraint_type' => 'School', + 'start_date' => '2025-07-05 04:17:53', + 'end_date' => '2025-07-05 06:17:53', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 94, + 'soldier_id' => 136, + 'constraint_type' => 'School', + 'start_date' => '2025-07-15 15:01:28', + 'end_date' => '2025-07-15 20:01:28', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 95, + 'soldier_id' => 151, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-14 02:32:42', + 'end_date' => '2025-07-14 07:32:42', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 96, + 'soldier_id' => 151, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-26 16:59:53', + 'end_date' => '2025-07-26 19:59:53', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 97, + 'soldier_id' => 151, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-27 05:34:47', + 'end_date' => '2025-07-27 07:34:47', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 98, + 'soldier_id' => 151, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-28 20:43:47', + 'end_date' => '2025-07-29 01:43:47', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 99, + 'soldier_id' => 151, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-04 21:13:45', + 'end_date' => '2025-07-04 22:13:45', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 100, + 'soldier_id' => 151, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-06 00:42:00', + 'end_date' => '2025-07-06 05:42:00', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 101, + 'soldier_id' => 151, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-27 03:02:41', + 'end_date' => '2025-07-27 04:02:41', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 102, + 'soldier_id' => 151, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-15 20:07:49', + 'end_date' => '2025-07-15 22:07:49', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 103, + 'soldier_id' => 151, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-05 20:33:28', + 'end_date' => '2025-07-05 21:33:28', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 104, + 'soldier_id' => 151, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-19 01:23:30', + 'end_date' => '2025-07-19 03:23:30', + 'created_at' => '2025-05-13T06:41:24.000000Z', + 'updated_at' => '2025-05-13T06:41:24.000000Z', + ], + [ + 'id' => 105, + 'soldier_id' => 151, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-15 09:56:15', + 'end_date' => '2025-07-15 13:56:15', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 106, + 'soldier_id' => 151, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-29 07:32:08', + 'end_date' => '2025-07-29 09:32:08', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 107, + 'soldier_id' => 151, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-27 11:03:45', + 'end_date' => '2025-07-27 15:03:45', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 108, + 'soldier_id' => 151, + 'constraint_type' => 'School', + 'start_date' => '2025-07-27 20:12:35', + 'end_date' => '2025-07-27 21:12:35', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 109, + 'soldier_id' => 151, + 'constraint_type' => 'School', + 'start_date' => '2025-07-05 02:36:47', + 'end_date' => '2025-07-05 05:36:47', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 110, + 'soldier_id' => 151, + 'constraint_type' => 'School', + 'start_date' => '2025-07-14 09:21:23', + 'end_date' => '2025-07-14 11:21:23', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 111, + 'soldier_id' => 151, + 'constraint_type' => 'School', + 'start_date' => '2025-07-28 05:33:05', + 'end_date' => '2025-07-28 08:33:05', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 112, + 'soldier_id' => 158, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-22 07:11:30', + 'end_date' => '2025-07-22 12:11:30', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 113, + 'soldier_id' => 158, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-08 01:00:28', + 'end_date' => '2025-07-08 04:00:28', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 114, + 'soldier_id' => 158, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-06 05:29:41', + 'end_date' => '2025-07-06 09:29:41', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 115, + 'soldier_id' => 158, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-14 04:42:44', + 'end_date' => '2025-07-14 07:42:44', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 116, + 'soldier_id' => 158, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-23 03:05:58', + 'end_date' => '2025-07-23 06:05:58', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 117, + 'soldier_id' => 158, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-12 04:52:25', + 'end_date' => '2025-07-12 08:52:25', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 118, + 'soldier_id' => 158, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-21 21:29:52', + 'end_date' => '2025-07-22 01:29:52', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 119, + 'soldier_id' => 158, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-05 23:29:43', + 'end_date' => '2025-07-06 00:29:43', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 120, + 'soldier_id' => 158, + 'constraint_type' => 'School', + 'start_date' => '2025-07-05 18:48:52', + 'end_date' => '2025-07-05 23:48:52', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 121, + 'soldier_id' => 90, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-13 05:23:50', + 'end_date' => '2025-07-13 10:23:50', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 122, + 'soldier_id' => 90, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-15 08:45:35', + 'end_date' => '2025-07-15 11:45:35', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 123, + 'soldier_id' => 90, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-18 15:35:04', + 'end_date' => '2025-07-18 18:35:04', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 124, + 'soldier_id' => 90, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-01 13:42:41', + 'end_date' => '2025-07-01 17:42:41', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 125, + 'soldier_id' => 90, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-18 20:55:11', + 'end_date' => '2025-07-18 21:55:11', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 126, + 'soldier_id' => 90, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-08 02:22:59', + 'end_date' => '2025-07-08 05:22:59', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 127, + 'soldier_id' => 90, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-12 20:31:37', + 'end_date' => '2025-07-12 21:31:37', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 128, + 'soldier_id' => 90, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-14 05:09:18', + 'end_date' => '2025-07-14 09:09:18', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 129, + 'soldier_id' => 90, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-04 12:24:49', + 'end_date' => '2025-07-04 17:24:49', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 130, + 'soldier_id' => 90, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-09 01:14:13', + 'end_date' => '2025-07-09 06:14:13', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 131, + 'soldier_id' => 90, + 'constraint_type' => 'School', + 'start_date' => '2025-07-26 23:46:49', + 'end_date' => '2025-07-27 00:46:49', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 132, + 'soldier_id' => 90, + 'constraint_type' => 'School', + 'start_date' => '2025-07-14 14:57:27', + 'end_date' => '2025-07-14 18:57:27', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 133, + 'soldier_id' => 90, + 'constraint_type' => 'School', + 'start_date' => '2025-07-07 21:56:27', + 'end_date' => '2025-07-08 02:56:27', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 134, + 'soldier_id' => 79, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-28 06:33:50', + 'end_date' => '2025-07-28 11:33:50', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 135, + 'soldier_id' => 79, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-07 20:04:03', + 'end_date' => '2025-07-07 22:04:03', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 136, + 'soldier_id' => 79, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-13 05:04:57', + 'end_date' => '2025-07-13 06:04:57', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 137, + 'soldier_id' => 79, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-05 22:06:38', + 'end_date' => '2025-07-06 00:06:38', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 138, + 'soldier_id' => 79, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-15 20:53:14', + 'end_date' => '2025-07-15 21:53:14', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 139, + 'soldier_id' => 79, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-16 06:05:14', + 'end_date' => '2025-07-16 08:05:14', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 140, + 'soldier_id' => 79, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-21 00:08:40', + 'end_date' => '2025-07-21 02:08:40', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 141, + 'soldier_id' => 79, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-30 22:53:37', + 'end_date' => '2025-08-01 03:53:37', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 142, + 'soldier_id' => 79, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-26 20:37:54', + 'end_date' => '2025-07-27 00:37:54', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 143, + 'soldier_id' => 30, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-06 22:08:17', + 'end_date' => '2025-07-07 02:08:17', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 144, + 'soldier_id' => 30, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-21 17:07:17', + 'end_date' => '2025-07-21 21:07:17', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 145, + 'soldier_id' => 30, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-07 16:39:23', + 'end_date' => '2025-07-07 17:39:23', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 146, + 'soldier_id' => 30, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-20 01:14:56', + 'end_date' => '2025-07-20 05:14:56', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 147, + 'soldier_id' => 30, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-21 03:40:55', + 'end_date' => '2025-07-21 04:40:55', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 148, + 'soldier_id' => 30, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-19 20:26:39', + 'end_date' => '2025-07-19 23:26:39', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 149, + 'soldier_id' => 30, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-19 06:27:25', + 'end_date' => '2025-07-19 08:27:25', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 150, + 'soldier_id' => 30, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-14 14:49:13', + 'end_date' => '2025-07-14 16:49:13', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 151, + 'soldier_id' => 30, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-15 12:19:55', + 'end_date' => '2025-07-15 15:19:55', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 152, + 'soldier_id' => 30, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-16 15:17:49', + 'end_date' => '2025-07-16 17:17:49', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 153, + 'soldier_id' => 30, + 'constraint_type' => 'School', + 'start_date' => '2025-07-04 06:45:07', + 'end_date' => '2025-07-04 10:45:07', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 154, + 'soldier_id' => 30, + 'constraint_type' => 'School', + 'start_date' => '2025-07-16 02:26:50', + 'end_date' => '2025-07-16 07:26:50', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 155, + 'soldier_id' => 30, + 'constraint_type' => 'School', + 'start_date' => '2025-07-07 13:26:53', + 'end_date' => '2025-07-07 15:26:53', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 156, + 'soldier_id' => 30, + 'constraint_type' => 'School', + 'start_date' => '2025-07-01 21:29:39', + 'end_date' => '2025-07-01 23:29:39', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 157, + 'soldier_id' => 83, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-19 14:46:59', + 'end_date' => '2025-07-19 18:46:59', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 158, + 'soldier_id' => 83, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-25 09:03:33', + 'end_date' => '2025-07-25 14:03:33', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 159, + 'soldier_id' => 83, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-05 01:27:32', + 'end_date' => '2025-07-05 06:27:32', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 160, + 'soldier_id' => 83, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-15 14:59:50', + 'end_date' => '2025-07-15 18:59:50', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 161, + 'soldier_id' => 83, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-18 06:32:53', + 'end_date' => '2025-07-18 08:32:53', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 162, + 'soldier_id' => 83, + 'constraint_type' => 'School', + 'start_date' => '2025-07-19 21:58:19', + 'end_date' => '2025-07-19 22:58:19', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 163, + 'soldier_id' => 80, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-06 09:55:31', + 'end_date' => '2025-07-06 13:55:31', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 164, + 'soldier_id' => 80, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-13 19:22:05', + 'end_date' => '2025-07-13 23:22:05', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 165, + 'soldier_id' => 80, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-14 20:24:15', + 'end_date' => '2025-07-14 21:24:15', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 166, + 'soldier_id' => 80, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-07 02:06:46', + 'end_date' => '2025-07-07 07:06:46', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 167, + 'soldier_id' => 80, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-18 08:16:33', + 'end_date' => '2025-07-18 10:16:33', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 168, + 'soldier_id' => 80, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-08 02:22:18', + 'end_date' => '2025-07-08 05:22:18', + 'created_at' => '2025-05-13T06:41:25.000000Z', + 'updated_at' => '2025-05-13T06:41:25.000000Z', + ], + [ + 'id' => 169, + 'soldier_id' => 80, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-26 20:47:59', + 'end_date' => '2025-07-26 21:47:59', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 170, + 'soldier_id' => 80, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-26 20:45:37', + 'end_date' => '2025-07-27 01:45:37', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 171, + 'soldier_id' => 80, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-15 11:51:35', + 'end_date' => '2025-07-15 16:51:35', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 172, + 'soldier_id' => 80, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-09 13:06:02', + 'end_date' => '2025-07-09 18:06:02', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 173, + 'soldier_id' => 80, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-02 02:46:15', + 'end_date' => '2025-07-02 07:46:15', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 174, + 'soldier_id' => 80, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-05 17:27:37', + 'end_date' => '2025-07-05 21:27:37', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 175, + 'soldier_id' => 80, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-07 22:20:54', + 'end_date' => '2025-07-08 02:20:54', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 176, + 'soldier_id' => 80, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-16 02:38:39', + 'end_date' => '2025-07-16 03:38:39', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 177, + 'soldier_id' => 80, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-28 16:16:18', + 'end_date' => '2025-07-28 18:16:18', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 178, + 'soldier_id' => 80, + 'constraint_type' => 'School', + 'start_date' => '2025-07-10 08:02:04', + 'end_date' => '2025-07-10 13:02:04', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 179, + 'soldier_id' => 80, + 'constraint_type' => 'School', + 'start_date' => '2025-07-10 09:08:16', + 'end_date' => '2025-07-10 12:08:16', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 180, + 'soldier_id' => 56, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-20 20:32:31', + 'end_date' => '2025-07-21 00:32:31', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 181, + 'soldier_id' => 56, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-23 22:45:22', + 'end_date' => '2025-07-24 02:45:22', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 182, + 'soldier_id' => 56, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-29 15:26:54', + 'end_date' => '2025-07-29 17:26:54', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 183, + 'soldier_id' => 56, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-19 14:59:18', + 'end_date' => '2025-07-19 17:59:18', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 184, + 'soldier_id' => 56, + 'constraint_type' => 'School', + 'start_date' => '2025-07-27 21:43:07', + 'end_date' => '2025-07-28 00:43:07', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 185, + 'soldier_id' => 56, + 'constraint_type' => 'School', + 'start_date' => '2025-07-26 02:18:54', + 'end_date' => '2025-07-26 05:18:54', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 186, + 'soldier_id' => 56, + 'constraint_type' => 'School', + 'start_date' => '2025-07-17 16:10:29', + 'end_date' => '2025-07-17 20:10:29', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 187, + 'soldier_id' => 3, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-20 00:47:19', + 'end_date' => '2025-07-20 02:47:19', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 188, + 'soldier_id' => 3, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-14 03:43:21', + 'end_date' => '2025-07-14 07:43:21', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 189, + 'soldier_id' => 3, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-23 15:07:57', + 'end_date' => '2025-07-23 16:07:57', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 190, + 'soldier_id' => 3, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-25 00:51:10', + 'end_date' => '2025-07-25 02:51:10', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 191, + 'soldier_id' => 3, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-01 08:42:20', + 'end_date' => '2025-07-01 09:42:20', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 192, + 'soldier_id' => 41, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-14 18:01:12', + 'end_date' => '2025-07-14 20:01:12', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 193, + 'soldier_id' => 41, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-20 16:19:10', + 'end_date' => '2025-07-20 18:19:10', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 194, + 'soldier_id' => 41, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-02 20:51:37', + 'end_date' => '2025-07-03 00:51:37', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 195, + 'soldier_id' => 41, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-15 03:53:12', + 'end_date' => '2025-07-15 05:53:12', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 196, + 'soldier_id' => 41, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-01 00:31:40', + 'end_date' => '2025-07-01 01:31:40', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 197, + 'soldier_id' => 41, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-27 07:17:34', + 'end_date' => '2025-07-27 08:17:34', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 198, + 'soldier_id' => 41, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-17 21:55:55', + 'end_date' => '2025-07-17 23:55:55', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 199, + 'soldier_id' => 41, + 'constraint_type' => 'School', + 'start_date' => '2025-07-08 05:02:26', + 'end_date' => '2025-07-08 08:02:26', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 200, + 'soldier_id' => 41, + 'constraint_type' => 'School', + 'start_date' => '2025-07-24 02:08:27', + 'end_date' => '2025-07-24 06:08:27', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 201, + 'soldier_id' => 45, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-07 03:49:00', + 'end_date' => '2025-07-07 05:49:00', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 202, + 'soldier_id' => 45, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-29 14:51:51', + 'end_date' => '2025-07-29 17:51:51', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 203, + 'soldier_id' => 45, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-03 21:34:17', + 'end_date' => '2025-07-03 22:34:17', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 204, + 'soldier_id' => 45, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-07 22:13:53', + 'end_date' => '2025-07-08 02:13:53', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 205, + 'soldier_id' => 45, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-08 05:11:02', + 'end_date' => '2025-07-08 09:11:02', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 206, + 'soldier_id' => 45, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-10 20:22:56', + 'end_date' => '2025-07-10 22:22:56', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 207, + 'soldier_id' => 45, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-05 02:28:17', + 'end_date' => '2025-07-05 04:28:17', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 208, + 'soldier_id' => 45, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-01 12:43:21', + 'end_date' => '2025-07-01 14:43:21', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 209, + 'soldier_id' => 45, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-09 00:36:28', + 'end_date' => '2025-07-09 02:36:28', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 210, + 'soldier_id' => 45, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-06 05:58:24', + 'end_date' => '2025-07-06 06:58:24', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 211, + 'soldier_id' => 45, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-20 01:17:37', + 'end_date' => '2025-07-20 03:17:37', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 212, + 'soldier_id' => 45, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-01 13:12:26', + 'end_date' => '2025-07-01 16:12:26', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 213, + 'soldier_id' => 45, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-26 12:38:31', + 'end_date' => '2025-07-26 13:38:31', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 214, + 'soldier_id' => 89, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-28 14:24:04', + 'end_date' => '2025-07-28 15:24:04', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 215, + 'soldier_id' => 89, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-14 11:07:50', + 'end_date' => '2025-07-14 16:07:50', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 216, + 'soldier_id' => 89, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-17 20:41:39', + 'end_date' => '2025-07-17 22:41:39', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 217, + 'soldier_id' => 89, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-26 20:47:32', + 'end_date' => '2025-07-26 23:47:32', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 218, + 'soldier_id' => 89, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-10 20:52:39', + 'end_date' => '2025-07-10 21:52:39', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 219, + 'soldier_id' => 89, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-21 02:14:32', + 'end_date' => '2025-07-21 06:14:32', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 220, + 'soldier_id' => 89, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-05 20:41:06', + 'end_date' => '2025-07-05 23:41:06', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 221, + 'soldier_id' => 89, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-10 08:06:38', + 'end_date' => '2025-07-10 09:06:38', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 222, + 'soldier_id' => 89, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-09 22:46:40', + 'end_date' => '2025-07-09 23:46:40', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 223, + 'soldier_id' => 89, + 'constraint_type' => 'School', + 'start_date' => '2025-07-19 10:39:58', + 'end_date' => '2025-07-19 15:39:58', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 224, + 'soldier_id' => 89, + 'constraint_type' => 'School', + 'start_date' => '2025-07-13 00:50:17', + 'end_date' => '2025-07-13 02:50:17', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 225, + 'soldier_id' => 84, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-20 19:06:46', + 'end_date' => '2025-07-21 00:06:46', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 226, + 'soldier_id' => 84, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-18 03:41:48', + 'end_date' => '2025-07-18 05:41:48', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 227, + 'soldier_id' => 84, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-26 20:20:36', + 'end_date' => '2025-07-26 21:20:36', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 228, + 'soldier_id' => 84, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-24 12:48:36', + 'end_date' => '2025-07-24 15:48:36', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 229, + 'soldier_id' => 84, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-22 13:59:37', + 'end_date' => '2025-07-22 18:59:37', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 230, + 'soldier_id' => 84, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-07 18:19:09', + 'end_date' => '2025-07-07 23:19:09', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 231, + 'soldier_id' => 84, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-24 07:22:21', + 'end_date' => '2025-07-24 09:22:21', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 232, + 'soldier_id' => 84, + 'constraint_type' => 'School', + 'start_date' => '2025-07-25 03:00:39', + 'end_date' => '2025-07-25 08:00:39', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 233, + 'soldier_id' => 84, + 'constraint_type' => 'School', + 'start_date' => '2025-07-04 01:50:05', + 'end_date' => '2025-07-04 05:50:05', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 234, + 'soldier_id' => 129, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-21 06:53:28', + 'end_date' => '2025-07-21 09:53:28', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 235, + 'soldier_id' => 129, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-09 13:11:55', + 'end_date' => '2025-07-09 16:11:55', + 'created_at' => '2025-05-13T06:41:26.000000Z', + 'updated_at' => '2025-05-13T06:41:26.000000Z', + ], + [ + 'id' => 236, + 'soldier_id' => 129, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-29 19:18:11', + 'end_date' => '2025-07-29 23:18:11', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 237, + 'soldier_id' => 129, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-26 17:10:46', + 'end_date' => '2025-07-26 18:10:46', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 238, + 'soldier_id' => 129, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-26 10:16:11', + 'end_date' => '2025-07-26 13:16:11', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 239, + 'soldier_id' => 129, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-07 20:01:31', + 'end_date' => '2025-07-07 21:01:31', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 240, + 'soldier_id' => 129, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-23 20:14:56', + 'end_date' => '2025-07-24 00:14:56', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 241, + 'soldier_id' => 129, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-05 06:12:10', + 'end_date' => '2025-07-05 11:12:10', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 242, + 'soldier_id' => 129, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-08 13:46:27', + 'end_date' => '2025-07-08 16:46:27', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 243, + 'soldier_id' => 129, + 'constraint_type' => 'School', + 'start_date' => '2025-07-23 11:13:13', + 'end_date' => '2025-07-23 12:13:13', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 244, + 'soldier_id' => 129, + 'constraint_type' => 'School', + 'start_date' => '2025-07-21 03:36:10', + 'end_date' => '2025-07-21 07:36:10', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 245, + 'soldier_id' => 97, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-28 11:05:36', + 'end_date' => '2025-07-28 15:05:36', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 246, + 'soldier_id' => 97, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-20 04:18:25', + 'end_date' => '2025-07-20 05:18:25', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 247, + 'soldier_id' => 97, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-04 21:42:03', + 'end_date' => '2025-07-04 23:42:03', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 248, + 'soldier_id' => 97, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-09 23:09:57', + 'end_date' => '2025-07-10 01:09:57', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 249, + 'soldier_id' => 97, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-26 19:02:33', + 'end_date' => '2025-07-26 21:02:33', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 250, + 'soldier_id' => 97, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-08 18:11:11', + 'end_date' => '2025-07-08 20:11:11', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 251, + 'soldier_id' => 97, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-16 07:58:45', + 'end_date' => '2025-07-16 11:58:45', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 252, + 'soldier_id' => 97, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-23 20:49:41', + 'end_date' => '2025-07-24 00:49:41', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 253, + 'soldier_id' => 97, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-10 22:10:37', + 'end_date' => '2025-07-11 02:10:37', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 254, + 'soldier_id' => 97, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-19 04:50:17', + 'end_date' => '2025-07-19 07:50:17', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 255, + 'soldier_id' => 97, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-25 16:34:06', + 'end_date' => '2025-07-25 18:34:06', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 256, + 'soldier_id' => 97, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-25 03:41:54', + 'end_date' => '2025-07-25 07:41:54', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 257, + 'soldier_id' => 97, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-15 09:43:56', + 'end_date' => '2025-07-15 10:43:56', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 258, + 'soldier_id' => 97, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-19 09:16:46', + 'end_date' => '2025-07-19 12:16:46', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 259, + 'soldier_id' => 97, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-28 17:21:35', + 'end_date' => '2025-07-28 21:21:35', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 260, + 'soldier_id' => 97, + 'constraint_type' => 'School', + 'start_date' => '2025-07-29 18:55:45', + 'end_date' => '2025-07-29 22:55:45', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 261, + 'soldier_id' => 97, + 'constraint_type' => 'School', + 'start_date' => '2025-07-19 17:23:56', + 'end_date' => '2025-07-19 19:23:56', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 262, + 'soldier_id' => 97, + 'constraint_type' => 'School', + 'start_date' => '2025-07-18 05:39:56', + 'end_date' => '2025-07-18 08:39:56', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 263, + 'soldier_id' => 97, + 'constraint_type' => 'School', + 'start_date' => '2025-07-20 20:39:02', + 'end_date' => '2025-07-20 23:39:02', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 264, + 'soldier_id' => 168, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-07 02:15:11', + 'end_date' => '2025-07-07 05:15:11', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 265, + 'soldier_id' => 168, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-14 13:20:52', + 'end_date' => '2025-07-14 15:20:52', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 266, + 'soldier_id' => 168, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-20 14:27:34', + 'end_date' => '2025-07-20 16:27:34', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 267, + 'soldier_id' => 168, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-03 00:52:51', + 'end_date' => '2025-07-03 05:52:51', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 268, + 'soldier_id' => 168, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-10 20:12:27', + 'end_date' => '2025-07-11 01:12:27', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 269, + 'soldier_id' => 168, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-22 13:21:18', + 'end_date' => '2025-07-22 17:21:18', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 270, + 'soldier_id' => 168, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-11 01:17:09', + 'end_date' => '2025-07-11 02:17:09', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 271, + 'soldier_id' => 168, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-19 10:05:46', + 'end_date' => '2025-07-19 12:05:46', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 272, + 'soldier_id' => 168, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-13 22:44:27', + 'end_date' => '2025-07-14 02:44:27', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 273, + 'soldier_id' => 139, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-20 08:05:45', + 'end_date' => '2025-07-20 11:05:45', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 274, + 'soldier_id' => 139, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-27 04:42:33', + 'end_date' => '2025-07-27 08:42:33', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 275, + 'soldier_id' => 139, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-06 12:52:02', + 'end_date' => '2025-07-06 15:52:02', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 276, + 'soldier_id' => 139, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-09 02:17:34', + 'end_date' => '2025-07-09 07:17:34', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 277, + 'soldier_id' => 139, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-19 10:08:00', + 'end_date' => '2025-07-19 13:08:00', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 278, + 'soldier_id' => 139, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-30 23:50:45', + 'end_date' => '2025-08-01 01:50:45', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 279, + 'soldier_id' => 139, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-21 20:37:30', + 'end_date' => '2025-07-22 00:37:30', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 280, + 'soldier_id' => 139, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-01 20:03:22', + 'end_date' => '2025-07-02 00:03:22', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 281, + 'soldier_id' => 139, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-07 06:43:47', + 'end_date' => '2025-07-07 11:43:47', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 282, + 'soldier_id' => 139, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-01 20:16:39', + 'end_date' => '2025-07-01 22:16:39', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 283, + 'soldier_id' => 139, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-26 20:40:41', + 'end_date' => '2025-07-27 01:40:41', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 284, + 'soldier_id' => 139, + 'constraint_type' => 'School', + 'start_date' => '2025-07-29 22:40:07', + 'end_date' => '2025-07-30 01:40:07', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 285, + 'soldier_id' => 139, + 'constraint_type' => 'School', + 'start_date' => '2025-07-27 14:31:55', + 'end_date' => '2025-07-27 18:31:55', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 286, + 'soldier_id' => 148, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-28 15:30:10', + 'end_date' => '2025-07-28 18:30:10', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 287, + 'soldier_id' => 148, + 'constraint_type' => 'School', + 'start_date' => '2025-07-10 09:00:09', + 'end_date' => '2025-07-10 12:00:09', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 288, + 'soldier_id' => 148, + 'constraint_type' => 'School', + 'start_date' => '2025-07-10 02:18:49', + 'end_date' => '2025-07-10 07:18:49', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 289, + 'soldier_id' => 148, + 'constraint_type' => 'School', + 'start_date' => '2025-07-10 05:00:03', + 'end_date' => '2025-07-10 08:00:03', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 290, + 'soldier_id' => 74, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-20 06:08:13', + 'end_date' => '2025-07-20 11:08:13', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 291, + 'soldier_id' => 74, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-04 23:12:46', + 'end_date' => '2025-07-05 00:12:46', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 292, + 'soldier_id' => 74, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-26 05:27:23', + 'end_date' => '2025-07-26 08:27:23', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 293, + 'soldier_id' => 74, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-14 22:16:46', + 'end_date' => '2025-07-14 23:16:46', + 'created_at' => '2025-05-13T06:41:27.000000Z', + 'updated_at' => '2025-05-13T06:41:27.000000Z', + ], + [ + 'id' => 294, + 'soldier_id' => 74, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-18 20:27:13', + 'end_date' => '2025-07-19 01:27:13', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 295, + 'soldier_id' => 74, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-27 03:30:31', + 'end_date' => '2025-07-27 06:30:31', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 296, + 'soldier_id' => 74, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-30 20:00:29', + 'end_date' => '2025-07-30 22:00:29', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 297, + 'soldier_id' => 74, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-07 20:28:01', + 'end_date' => '2025-07-07 22:28:01', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 298, + 'soldier_id' => 74, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-05 20:22:36', + 'end_date' => '2025-07-05 21:22:36', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 299, + 'soldier_id' => 74, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-22 15:22:31', + 'end_date' => '2025-07-22 16:22:31', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 300, + 'soldier_id' => 74, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-05 01:37:54', + 'end_date' => '2025-07-05 04:37:54', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 301, + 'soldier_id' => 74, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-02 20:13:25', + 'end_date' => '2025-07-02 23:13:25', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 302, + 'soldier_id' => 74, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-11 05:10:58', + 'end_date' => '2025-07-11 09:10:58', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 303, + 'soldier_id' => 74, + 'constraint_type' => 'School', + 'start_date' => '2025-07-30 09:18:23', + 'end_date' => '2025-07-30 11:18:23', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 304, + 'soldier_id' => 61, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-14 03:15:43', + 'end_date' => '2025-07-14 08:15:43', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 305, + 'soldier_id' => 61, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-18 02:58:12', + 'end_date' => '2025-07-18 04:58:12', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 306, + 'soldier_id' => 61, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-01 08:18:37', + 'end_date' => '2025-07-01 10:18:37', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 307, + 'soldier_id' => 61, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-22 02:11:48', + 'end_date' => '2025-07-22 03:11:48', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 308, + 'soldier_id' => 61, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-20 20:18:36', + 'end_date' => '2025-07-20 22:18:36', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 309, + 'soldier_id' => 61, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-30 00:40:23', + 'end_date' => '2025-07-30 03:40:23', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 310, + 'soldier_id' => 61, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-01 19:58:19', + 'end_date' => '2025-07-02 00:58:19', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 311, + 'soldier_id' => 61, + 'constraint_type' => 'School', + 'start_date' => '2025-07-05 00:42:32', + 'end_date' => '2025-07-05 05:42:32', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 312, + 'soldier_id' => 61, + 'constraint_type' => 'School', + 'start_date' => '2025-07-15 22:21:28', + 'end_date' => '2025-07-16 02:21:28', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 313, + 'soldier_id' => 152, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-28 19:15:34', + 'end_date' => '2025-07-28 21:15:34', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 314, + 'soldier_id' => 152, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-02 02:18:00', + 'end_date' => '2025-07-02 04:18:00', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 315, + 'soldier_id' => 152, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-24 20:00:14', + 'end_date' => '2025-07-24 23:00:14', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 316, + 'soldier_id' => 152, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-20 04:35:01', + 'end_date' => '2025-07-20 07:35:01', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 317, + 'soldier_id' => 152, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-16 03:20:43', + 'end_date' => '2025-07-16 04:20:43', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 318, + 'soldier_id' => 152, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-12 20:18:43', + 'end_date' => '2025-07-12 22:18:43', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 319, + 'soldier_id' => 152, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-29 12:19:39', + 'end_date' => '2025-07-29 13:19:39', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 320, + 'soldier_id' => 152, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-17 20:08:01', + 'end_date' => '2025-07-17 23:08:01', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 321, + 'soldier_id' => 152, + 'constraint_type' => 'School', + 'start_date' => '2025-07-26 01:48:36', + 'end_date' => '2025-07-26 06:48:36', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 322, + 'soldier_id' => 152, + 'constraint_type' => 'School', + 'start_date' => '2025-07-29 16:19:12', + 'end_date' => '2025-07-29 17:19:12', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 323, + 'soldier_id' => 152, + 'constraint_type' => 'School', + 'start_date' => '2025-07-22 20:53:37', + 'end_date' => '2025-07-23 01:53:37', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 324, + 'soldier_id' => 113, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-13 13:01:37', + 'end_date' => '2025-07-13 16:01:37', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 325, + 'soldier_id' => 113, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-05 07:07:06', + 'end_date' => '2025-07-05 11:07:06', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 326, + 'soldier_id' => 113, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-28 23:22:21', + 'end_date' => '2025-07-29 00:22:21', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 327, + 'soldier_id' => 113, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-30 01:34:54', + 'end_date' => '2025-07-30 02:34:54', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 328, + 'soldier_id' => 113, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-18 05:49:54', + 'end_date' => '2025-07-18 09:49:54', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 329, + 'soldier_id' => 113, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-12 20:09:29', + 'end_date' => '2025-07-12 22:09:29', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 330, + 'soldier_id' => 113, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-01 19:24:56', + 'end_date' => '2025-07-01 20:24:56', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 331, + 'soldier_id' => 113, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-03 17:54:01', + 'end_date' => '2025-07-03 22:54:01', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 332, + 'soldier_id' => 113, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-15 04:01:51', + 'end_date' => '2025-07-15 06:01:51', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 333, + 'soldier_id' => 113, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-08 15:36:01', + 'end_date' => '2025-07-08 19:36:01', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 334, + 'soldier_id' => 113, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-29 15:30:07', + 'end_date' => '2025-07-29 20:30:07', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 335, + 'soldier_id' => 113, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-22 22:38:04', + 'end_date' => '2025-07-23 01:38:04', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 336, + 'soldier_id' => 113, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-27 21:08:40', + 'end_date' => '2025-07-28 00:08:40', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 337, + 'soldier_id' => 113, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-21 22:31:14', + 'end_date' => '2025-07-22 00:31:14', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 338, + 'soldier_id' => 113, + 'constraint_type' => 'School', + 'start_date' => '2025-07-30 02:37:40', + 'end_date' => '2025-07-30 06:37:40', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 339, + 'soldier_id' => 113, + 'constraint_type' => 'School', + 'start_date' => '2025-07-24 20:24:48', + 'end_date' => '2025-07-25 01:24:48', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 340, + 'soldier_id' => 99, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-08 10:39:28', + 'end_date' => '2025-07-08 12:39:28', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 341, + 'soldier_id' => 99, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-21 16:28:40', + 'end_date' => '2025-07-21 17:28:40', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 342, + 'soldier_id' => 99, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-08 20:57:44', + 'end_date' => '2025-07-09 01:57:44', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 343, + 'soldier_id' => 99, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-19 20:01:07', + 'end_date' => '2025-07-20 00:01:07', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 344, + 'soldier_id' => 99, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-12 13:04:34', + 'end_date' => '2025-07-12 16:04:34', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 345, + 'soldier_id' => 99, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-20 13:35:47', + 'end_date' => '2025-07-20 17:35:47', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 346, + 'soldier_id' => 99, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-02 03:10:13', + 'end_date' => '2025-07-02 06:10:13', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 347, + 'soldier_id' => 99, + 'constraint_type' => 'School', + 'start_date' => '2025-07-16 20:29:42', + 'end_date' => '2025-07-17 01:29:42', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 348, + 'soldier_id' => 99, + 'constraint_type' => 'School', + 'start_date' => '2025-07-08 23:35:14', + 'end_date' => '2025-07-09 02:35:14', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 349, + 'soldier_id' => 99, + 'constraint_type' => 'School', + 'start_date' => '2025-07-11 02:58:43', + 'end_date' => '2025-07-11 05:58:43', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 350, + 'soldier_id' => 99, + 'constraint_type' => 'School', + 'start_date' => '2025-07-28 09:29:50', + 'end_date' => '2025-07-28 12:29:50', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 351, + 'soldier_id' => 65, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-07 00:17:39', + 'end_date' => '2025-07-07 03:17:39', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 352, + 'soldier_id' => 65, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-07 12:16:08', + 'end_date' => '2025-07-07 16:16:08', + 'created_at' => '2025-05-13T06:41:28.000000Z', + 'updated_at' => '2025-05-13T06:41:28.000000Z', + ], + [ + 'id' => 353, + 'soldier_id' => 65, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-03 02:12:59', + 'end_date' => '2025-07-03 03:12:59', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 354, + 'soldier_id' => 65, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-04 14:37:53', + 'end_date' => '2025-07-04 19:37:53', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 355, + 'soldier_id' => 65, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-16 20:09:06', + 'end_date' => '2025-07-17 00:09:06', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 356, + 'soldier_id' => 65, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-10 01:41:45', + 'end_date' => '2025-07-10 02:41:45', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 357, + 'soldier_id' => 65, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-15 20:17:25', + 'end_date' => '2025-07-16 00:17:25', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 358, + 'soldier_id' => 65, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-03 20:34:45', + 'end_date' => '2025-07-04 01:34:45', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 359, + 'soldier_id' => 65, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-26 20:46:44', + 'end_date' => '2025-07-26 23:46:44', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 360, + 'soldier_id' => 65, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-18 01:14:27', + 'end_date' => '2025-07-18 03:14:27', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 361, + 'soldier_id' => 65, + 'constraint_type' => 'School', + 'start_date' => '2025-07-26 06:34:07', + 'end_date' => '2025-07-26 08:34:07', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 362, + 'soldier_id' => 65, + 'constraint_type' => 'School', + 'start_date' => '2025-07-08 08:27:33', + 'end_date' => '2025-07-08 12:27:33', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 363, + 'soldier_id' => 65, + 'constraint_type' => 'School', + 'start_date' => '2025-07-23 09:05:20', + 'end_date' => '2025-07-23 13:05:20', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 364, + 'soldier_id' => 65, + 'constraint_type' => 'School', + 'start_date' => '2025-07-07 14:51:20', + 'end_date' => '2025-07-07 17:51:20', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 365, + 'soldier_id' => 18, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-07 21:21:19', + 'end_date' => '2025-07-07 22:21:19', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 366, + 'soldier_id' => 18, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-21 00:16:44', + 'end_date' => '2025-07-21 02:16:44', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 367, + 'soldier_id' => 18, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-20 18:45:24', + 'end_date' => '2025-07-20 21:45:24', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 368, + 'soldier_id' => 18, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-01 08:57:09', + 'end_date' => '2025-07-01 13:57:09', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 369, + 'soldier_id' => 18, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-15 12:16:07', + 'end_date' => '2025-07-15 17:16:07', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 370, + 'soldier_id' => 18, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-12 03:12:50', + 'end_date' => '2025-07-12 06:12:50', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 371, + 'soldier_id' => 18, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-15 14:10:38', + 'end_date' => '2025-07-15 15:10:38', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 372, + 'soldier_id' => 18, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-18 02:07:46', + 'end_date' => '2025-07-18 06:07:46', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 373, + 'soldier_id' => 18, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-10 11:39:37', + 'end_date' => '2025-07-10 14:39:37', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 374, + 'soldier_id' => 18, + 'constraint_type' => 'School', + 'start_date' => '2025-07-20 01:07:07', + 'end_date' => '2025-07-20 06:07:07', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 375, + 'soldier_id' => 18, + 'constraint_type' => 'School', + 'start_date' => '2025-07-18 09:05:17', + 'end_date' => '2025-07-18 11:05:17', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 376, + 'soldier_id' => 18, + 'constraint_type' => 'School', + 'start_date' => '2025-07-06 14:44:04', + 'end_date' => '2025-07-06 17:44:04', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 377, + 'soldier_id' => 50, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-28 10:59:45', + 'end_date' => '2025-07-28 12:59:45', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 378, + 'soldier_id' => 50, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-03 07:59:44', + 'end_date' => '2025-07-03 09:59:44', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 379, + 'soldier_id' => 50, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-19 04:39:19', + 'end_date' => '2025-07-19 05:39:19', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 380, + 'soldier_id' => 50, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-08 10:09:25', + 'end_date' => '2025-07-08 15:09:25', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 381, + 'soldier_id' => 50, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-15 17:31:38', + 'end_date' => '2025-07-15 20:31:38', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 382, + 'soldier_id' => 50, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-11 18:27:21', + 'end_date' => '2025-07-11 23:27:21', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 383, + 'soldier_id' => 50, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-12 19:33:48', + 'end_date' => '2025-07-13 00:33:48', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 384, + 'soldier_id' => 50, + 'constraint_type' => 'School', + 'start_date' => '2025-07-27 03:34:44', + 'end_date' => '2025-07-27 05:34:44', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 385, + 'soldier_id' => 50, + 'constraint_type' => 'School', + 'start_date' => '2025-07-19 05:36:53', + 'end_date' => '2025-07-19 10:36:53', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 386, + 'soldier_id' => 10, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-25 03:02:15', + 'end_date' => '2025-07-25 08:02:15', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 387, + 'soldier_id' => 10, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-14 06:13:56', + 'end_date' => '2025-07-14 10:13:56', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 388, + 'soldier_id' => 10, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-10 20:01:10', + 'end_date' => '2025-07-10 21:01:10', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 389, + 'soldier_id' => 10, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-08 20:51:54', + 'end_date' => '2025-07-08 22:51:54', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 390, + 'soldier_id' => 10, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-18 20:01:52', + 'end_date' => '2025-07-19 00:01:52', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 391, + 'soldier_id' => 10, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-22 15:20:01', + 'end_date' => '2025-07-22 17:20:01', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 392, + 'soldier_id' => 10, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-02 16:25:11', + 'end_date' => '2025-07-02 20:25:11', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 393, + 'soldier_id' => 10, + 'constraint_type' => 'School', + 'start_date' => '2025-07-18 15:29:04', + 'end_date' => '2025-07-18 17:29:04', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 394, + 'soldier_id' => 10, + 'constraint_type' => 'School', + 'start_date' => '2025-07-07 07:03:01', + 'end_date' => '2025-07-07 12:03:01', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 395, + 'soldier_id' => 153, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-11 17:21:57', + 'end_date' => '2025-07-11 19:21:57', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 396, + 'soldier_id' => 153, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-22 04:08:31', + 'end_date' => '2025-07-22 07:08:31', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 397, + 'soldier_id' => 153, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-17 21:27:16', + 'end_date' => '2025-07-17 22:27:16', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 398, + 'soldier_id' => 153, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-08 20:23:15', + 'end_date' => '2025-07-09 00:23:15', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 399, + 'soldier_id' => 153, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-17 02:28:02', + 'end_date' => '2025-07-17 07:28:02', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 400, + 'soldier_id' => 153, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-30 23:07:49', + 'end_date' => '2025-08-01 03:07:49', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 401, + 'soldier_id' => 153, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-19 20:32:46', + 'end_date' => '2025-07-19 21:32:46', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 402, + 'soldier_id' => 153, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-24 20:24:41', + 'end_date' => '2025-07-25 01:24:41', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 403, + 'soldier_id' => 153, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-27 06:42:42', + 'end_date' => '2025-07-27 10:42:42', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 404, + 'soldier_id' => 153, + 'constraint_type' => 'School', + 'start_date' => '2025-07-19 13:22:25', + 'end_date' => '2025-07-19 16:22:25', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 405, + 'soldier_id' => 47, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-15 00:13:55', + 'end_date' => '2025-07-15 03:13:55', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 406, + 'soldier_id' => 47, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-18 13:35:38', + 'end_date' => '2025-07-18 16:35:38', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 407, + 'soldier_id' => 47, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-06 07:24:27', + 'end_date' => '2025-07-06 11:24:27', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 408, + 'soldier_id' => 47, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-08 07:33:54', + 'end_date' => '2025-07-08 11:33:54', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 409, + 'soldier_id' => 47, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-10 01:31:21', + 'end_date' => '2025-07-10 06:31:21', + 'created_at' => '2025-05-13T06:41:29.000000Z', + 'updated_at' => '2025-05-13T06:41:29.000000Z', + ], + [ + 'id' => 410, + 'soldier_id' => 47, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-26 06:43:03', + 'end_date' => '2025-07-26 11:43:03', + 'created_at' => '2025-05-13T06:41:30.000000Z', + 'updated_at' => '2025-05-13T06:41:30.000000Z', + ], + [ + 'id' => 411, + 'soldier_id' => 47, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-25 01:50:28', + 'end_date' => '2025-07-25 02:50:28', + 'created_at' => '2025-05-13T06:41:30.000000Z', + 'updated_at' => '2025-05-13T06:41:30.000000Z', + ], + [ + 'id' => 412, + 'soldier_id' => 47, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-01 23:17:15', + 'end_date' => '2025-07-02 02:17:15', + 'created_at' => '2025-05-13T06:41:30.000000Z', + 'updated_at' => '2025-05-13T06:41:30.000000Z', + ], + [ + 'id' => 413, + 'soldier_id' => 47, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-24 10:50:09', + 'end_date' => '2025-07-24 15:50:09', + 'created_at' => '2025-05-13T06:41:30.000000Z', + 'updated_at' => '2025-05-13T06:41:30.000000Z', + ], + [ + 'id' => 414, + 'soldier_id' => 47, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-29 08:10:43', + 'end_date' => '2025-07-29 13:10:43', + 'created_at' => '2025-05-13T06:41:30.000000Z', + 'updated_at' => '2025-05-13T06:41:30.000000Z', + ], + [ + 'id' => 415, + 'soldier_id' => 47, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-10 09:12:28', + 'end_date' => '2025-07-10 14:12:28', + 'created_at' => '2025-05-13T06:41:30.000000Z', + 'updated_at' => '2025-05-13T06:41:30.000000Z', + ], + [ + 'id' => 416, + 'soldier_id' => 35, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-27 03:13:56', + 'end_date' => '2025-07-27 05:13:56', + 'created_at' => '2025-05-13T06:41:30.000000Z', + 'updated_at' => '2025-05-13T06:41:30.000000Z', + ], + [ + 'id' => 417, + 'soldier_id' => 35, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-21 02:44:05', + 'end_date' => '2025-07-21 04:44:05', + 'created_at' => '2025-05-13T06:41:30.000000Z', + 'updated_at' => '2025-05-13T06:41:30.000000Z', + ], + [ + 'id' => 418, + 'soldier_id' => 35, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-04 10:28:51', + 'end_date' => '2025-07-04 11:28:51', + 'created_at' => '2025-05-13T06:41:30.000000Z', + 'updated_at' => '2025-05-13T06:41:30.000000Z', + ], + [ + 'id' => 419, + 'soldier_id' => 35, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-30 10:58:27', + 'end_date' => '2025-07-30 15:58:27', + 'created_at' => '2025-05-13T06:41:30.000000Z', + 'updated_at' => '2025-05-13T06:41:30.000000Z', + ], + [ + 'id' => 420, + 'soldier_id' => 35, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-03 16:17:37', + 'end_date' => '2025-07-03 17:17:37', + 'created_at' => '2025-05-13T06:41:30.000000Z', + 'updated_at' => '2025-05-13T06:41:30.000000Z', + ], + [ + 'id' => 421, + 'soldier_id' => 35, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-19 03:36:05', + 'end_date' => '2025-07-19 04:36:05', + 'created_at' => '2025-05-13T06:41:30.000000Z', + 'updated_at' => '2025-05-13T06:41:30.000000Z', + ], + [ + 'id' => 422, + 'soldier_id' => 35, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-01 08:08:40', + 'end_date' => '2025-07-01 12:08:40', + 'created_at' => '2025-05-13T06:41:30.000000Z', + 'updated_at' => '2025-05-13T06:41:30.000000Z', + ], + [ + 'id' => 423, + 'soldier_id' => 27, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-13 23:49:30', + 'end_date' => '2025-07-14 01:49:30', + 'created_at' => '2025-05-13T06:41:30.000000Z', + 'updated_at' => '2025-05-13T06:41:30.000000Z', + ], + [ + 'id' => 424, + 'soldier_id' => 27, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-27 02:45:12', + 'end_date' => '2025-07-27 07:45:12', + 'created_at' => '2025-05-13T06:41:30.000000Z', + 'updated_at' => '2025-05-13T06:41:30.000000Z', + ], + [ + 'id' => 425, + 'soldier_id' => 27, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-10 19:32:23', + 'end_date' => '2025-07-11 00:32:23', + 'created_at' => '2025-05-13T06:41:30.000000Z', + 'updated_at' => '2025-05-13T06:41:30.000000Z', + ], + [ + 'id' => 426, + 'soldier_id' => 27, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-17 23:00:09', + 'end_date' => '2025-07-18 01:00:09', + 'created_at' => '2025-05-13T06:41:30.000000Z', + 'updated_at' => '2025-05-13T06:41:30.000000Z', + ], + [ + 'id' => 427, + 'soldier_id' => 27, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-29 20:32:46', + 'end_date' => '2025-07-29 22:32:46', + 'created_at' => '2025-05-13T06:41:30.000000Z', + 'updated_at' => '2025-05-13T06:41:30.000000Z', + ], + [ + 'id' => 428, + 'soldier_id' => 27, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-01 20:39:35', + 'end_date' => '2025-07-01 21:39:35', + 'created_at' => '2025-05-13T06:41:30.000000Z', + 'updated_at' => '2025-05-13T06:41:30.000000Z', + ], + [ + 'id' => 429, + 'soldier_id' => 27, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-11 05:37:21', + 'end_date' => '2025-07-11 10:37:21', + 'created_at' => '2025-05-13T06:41:30.000000Z', + 'updated_at' => '2025-05-13T06:41:30.000000Z', + ], + [ + 'id' => 430, + 'soldier_id' => 27, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-05 06:17:03', + 'end_date' => '2025-07-05 09:17:03', + 'created_at' => '2025-05-13T06:41:30.000000Z', + 'updated_at' => '2025-05-13T06:41:30.000000Z', + ], + [ + 'id' => 431, + 'soldier_id' => 27, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-15 12:27:11', + 'end_date' => '2025-07-15 13:27:11', + 'created_at' => '2025-05-13T06:41:30.000000Z', + 'updated_at' => '2025-05-13T06:41:30.000000Z', + ], + [ + 'id' => 432, + 'soldier_id' => 27, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-13 23:50:50', + 'end_date' => '2025-07-14 01:50:50', + 'created_at' => '2025-05-13T06:41:30.000000Z', + 'updated_at' => '2025-05-13T06:41:30.000000Z', + ], + [ + 'id' => 433, + 'soldier_id' => 27, + 'constraint_type' => 'School', + 'start_date' => '2025-07-17 07:05:24', + 'end_date' => '2025-07-17 08:05:24', + 'created_at' => '2025-05-13T06:41:30.000000Z', + 'updated_at' => '2025-05-13T06:41:30.000000Z', + ], + [ + 'id' => 434, + 'soldier_id' => 27, + 'constraint_type' => 'School', + 'start_date' => '2025-07-10 15:45:57', + 'end_date' => '2025-07-10 18:45:57', + 'created_at' => '2025-05-13T06:41:30.000000Z', + 'updated_at' => '2025-05-13T06:41:30.000000Z', + ], + [ + 'id' => 435, + 'soldier_id' => 27, + 'constraint_type' => 'School', + 'start_date' => '2025-07-28 02:11:09', + 'end_date' => '2025-07-28 07:11:09', + 'created_at' => '2025-05-13T06:41:30.000000Z', + 'updated_at' => '2025-05-13T06:41:30.000000Z', + ], + [ + 'id' => 436, + 'soldier_id' => 27, + 'constraint_type' => 'School', + 'start_date' => '2025-07-05 12:16:06', + 'end_date' => '2025-07-05 17:16:06', + 'created_at' => '2025-05-13T06:41:30.000000Z', + 'updated_at' => '2025-05-13T06:41:30.000000Z', + ], + [ + 'id' => 437, + 'soldier_id' => 120, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-08 02:22:36', + 'end_date' => '2025-07-08 07:22:36', + 'created_at' => '2025-05-13T06:41:30.000000Z', + 'updated_at' => '2025-05-13T06:41:30.000000Z', + ], + [ + 'id' => 438, + 'soldier_id' => 120, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-07 07:27:28', + 'end_date' => '2025-07-07 10:27:28', + 'created_at' => '2025-05-13T06:41:30.000000Z', + 'updated_at' => '2025-05-13T06:41:30.000000Z', + ], + [ + 'id' => 439, + 'soldier_id' => 120, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-14 01:04:07', + 'end_date' => '2025-07-14 02:04:07', + 'created_at' => '2025-05-13T06:41:30.000000Z', + 'updated_at' => '2025-05-13T06:41:30.000000Z', + ], + [ + 'id' => 440, + 'soldier_id' => 120, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-12 00:35:18', + 'end_date' => '2025-07-12 01:35:18', + 'created_at' => '2025-05-13T06:41:30.000000Z', + 'updated_at' => '2025-05-13T06:41:30.000000Z', + ], + [ + 'id' => 441, + 'soldier_id' => 120, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-14 04:17:59', + 'end_date' => '2025-07-14 07:17:59', + 'created_at' => '2025-05-13T06:41:30.000000Z', + 'updated_at' => '2025-05-13T06:41:30.000000Z', + ], + [ + 'id' => 442, + 'soldier_id' => 120, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-01 23:16:08', + 'end_date' => '2025-07-02 04:16:08', + 'created_at' => '2025-05-13T06:41:30.000000Z', + 'updated_at' => '2025-05-13T06:41:30.000000Z', + ], + [ + 'id' => 443, + 'soldier_id' => 120, + 'constraint_type' => 'School', + 'start_date' => '2025-07-09 20:09:54', + 'end_date' => '2025-07-09 23:09:54', + 'created_at' => '2025-05-13T06:41:30.000000Z', + 'updated_at' => '2025-05-13T06:41:30.000000Z', + ], + [ + 'id' => 444, + 'soldier_id' => 120, + 'constraint_type' => 'School', + 'start_date' => '2025-07-04 05:50:57', + 'end_date' => '2025-07-04 06:50:57', + 'created_at' => '2025-05-13T06:41:30.000000Z', + 'updated_at' => '2025-05-13T06:41:30.000000Z', + ], + [ + 'id' => 445, + 'soldier_id' => 120, + 'constraint_type' => 'School', + 'start_date' => '2025-07-15 23:54:17', + 'end_date' => '2025-07-16 04:54:17', + 'created_at' => '2025-05-13T06:41:30.000000Z', + 'updated_at' => '2025-05-13T06:41:30.000000Z', + ], + [ + 'id' => 446, + 'soldier_id' => 120, + 'constraint_type' => 'School', + 'start_date' => '2025-07-10 04:55:40', + 'end_date' => '2025-07-10 05:55:40', + 'created_at' => '2025-05-13T06:41:30.000000Z', + 'updated_at' => '2025-05-13T06:41:30.000000Z', + ], + [ + 'id' => 447, + 'soldier_id' => 57, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-12 14:33:24', + 'end_date' => '2025-07-12 17:33:24', + 'created_at' => '2025-05-13T06:41:30.000000Z', + 'updated_at' => '2025-05-13T06:41:30.000000Z', + ], + [ + 'id' => 448, + 'soldier_id' => 57, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-28 06:54:26', + 'end_date' => '2025-07-28 09:54:26', + 'created_at' => '2025-05-13T06:41:30.000000Z', + 'updated_at' => '2025-05-13T06:41:30.000000Z', + ], + [ + 'id' => 449, + 'soldier_id' => 57, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-04 00:56:24', + 'end_date' => '2025-07-04 03:56:24', + 'created_at' => '2025-05-13T06:41:30.000000Z', + 'updated_at' => '2025-05-13T06:41:30.000000Z', + ], + [ + 'id' => 450, + 'soldier_id' => 57, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-20 00:44:07', + 'end_date' => '2025-07-20 02:44:07', + 'created_at' => '2025-05-13T06:41:30.000000Z', + 'updated_at' => '2025-05-13T06:41:30.000000Z', + ], + [ + 'id' => 451, + 'soldier_id' => 57, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-08 21:17:30', + 'end_date' => '2025-07-09 01:17:30', + 'created_at' => '2025-05-13T06:41:30.000000Z', + 'updated_at' => '2025-05-13T06:41:30.000000Z', + ], + [ + 'id' => 452, + 'soldier_id' => 57, + 'constraint_type' => 'School', + 'start_date' => '2025-07-25 15:57:50', + 'end_date' => '2025-07-25 18:57:50', + 'created_at' => '2025-05-13T06:41:30.000000Z', + 'updated_at' => '2025-05-13T06:41:30.000000Z', + ], + [ + 'id' => 453, + 'soldier_id' => 57, + 'constraint_type' => 'School', + 'start_date' => '2025-07-22 06:28:02', + 'end_date' => '2025-07-22 07:28:02', + 'created_at' => '2025-05-13T06:41:30.000000Z', + 'updated_at' => '2025-05-13T06:41:30.000000Z', + ], + [ + 'id' => 454, + 'soldier_id' => 57, + 'constraint_type' => 'School', + 'start_date' => '2025-07-11 17:23:27', + 'end_date' => '2025-07-11 22:23:27', + 'created_at' => '2025-05-13T06:41:30.000000Z', + 'updated_at' => '2025-05-13T06:41:30.000000Z', + ], + [ + 'id' => 455, + 'soldier_id' => 9, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-21 17:53:22', + 'end_date' => '2025-07-21 21:53:22', + 'created_at' => '2025-05-13T06:41:30.000000Z', + 'updated_at' => '2025-05-13T06:41:30.000000Z', + ], + [ + 'id' => 456, + 'soldier_id' => 9, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-11 22:52:23', + 'end_date' => '2025-07-12 02:52:23', + 'created_at' => '2025-05-13T06:41:31.000000Z', + 'updated_at' => '2025-05-13T06:41:31.000000Z', + ], + [ + 'id' => 457, + 'soldier_id' => 9, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-09 09:13:01', + 'end_date' => '2025-07-09 12:13:01', + 'created_at' => '2025-05-13T06:41:31.000000Z', + 'updated_at' => '2025-05-13T06:41:31.000000Z', + ], + [ + 'id' => 458, + 'soldier_id' => 9, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-05 20:12:35', + 'end_date' => '2025-07-05 21:12:35', + 'created_at' => '2025-05-13T06:41:31.000000Z', + 'updated_at' => '2025-05-13T06:41:31.000000Z', + ], + [ + 'id' => 459, + 'soldier_id' => 9, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-11 20:03:35', + 'end_date' => '2025-07-12 01:03:35', + 'created_at' => '2025-05-13T06:41:31.000000Z', + 'updated_at' => '2025-05-13T06:41:31.000000Z', + ], + [ + 'id' => 460, + 'soldier_id' => 9, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-01 13:28:08', + 'end_date' => '2025-07-01 17:28:08', + 'created_at' => '2025-05-13T06:41:31.000000Z', + 'updated_at' => '2025-05-13T06:41:31.000000Z', + ], + [ + 'id' => 461, + 'soldier_id' => 9, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-10 06:42:36', + 'end_date' => '2025-07-10 11:42:36', + 'created_at' => '2025-05-13T06:41:31.000000Z', + 'updated_at' => '2025-05-13T06:41:31.000000Z', + ], + [ + 'id' => 462, + 'soldier_id' => 9, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-17 02:49:34', + 'end_date' => '2025-07-17 07:49:34', + 'created_at' => '2025-05-13T06:41:31.000000Z', + 'updated_at' => '2025-05-13T06:41:31.000000Z', + ], + [ + 'id' => 463, + 'soldier_id' => 9, + 'constraint_type' => 'School', + 'start_date' => '2025-07-11 23:51:35', + 'end_date' => '2025-07-12 02:51:35', + 'created_at' => '2025-05-13T06:41:31.000000Z', + 'updated_at' => '2025-05-13T06:41:31.000000Z', + ], + [ + 'id' => 464, + 'soldier_id' => 9, + 'constraint_type' => 'School', + 'start_date' => '2025-07-08 23:31:30', + 'end_date' => '2025-07-09 01:31:30', + 'created_at' => '2025-05-13T06:41:31.000000Z', + 'updated_at' => '2025-05-13T06:41:31.000000Z', + ], + [ + 'id' => 465, + 'soldier_id' => 109, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-21 13:08:48', + 'end_date' => '2025-07-21 18:08:48', + 'created_at' => '2025-05-13T06:41:31.000000Z', + 'updated_at' => '2025-05-13T06:41:31.000000Z', + ], + [ + 'id' => 466, + 'soldier_id' => 109, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-27 13:53:35', + 'end_date' => '2025-07-27 16:53:35', + 'created_at' => '2025-05-13T06:41:31.000000Z', + 'updated_at' => '2025-05-13T06:41:31.000000Z', + ], + [ + 'id' => 467, + 'soldier_id' => 109, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-01 15:37:14', + 'end_date' => '2025-07-01 17:37:14', + 'created_at' => '2025-05-13T06:41:31.000000Z', + 'updated_at' => '2025-05-13T06:41:31.000000Z', + ], + [ + 'id' => 468, + 'soldier_id' => 109, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-13 01:44:25', + 'end_date' => '2025-07-13 02:44:25', + 'created_at' => '2025-05-13T06:41:31.000000Z', + 'updated_at' => '2025-05-13T06:41:31.000000Z', + ], + [ + 'id' => 469, + 'soldier_id' => 109, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-01 03:40:51', + 'end_date' => '2025-07-01 07:40:51', + 'created_at' => '2025-05-13T06:41:31.000000Z', + 'updated_at' => '2025-05-13T06:41:31.000000Z', + ], + [ + 'id' => 470, + 'soldier_id' => 109, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-30 13:17:51', + 'end_date' => '2025-07-30 14:17:51', + 'created_at' => '2025-05-13T06:41:31.000000Z', + 'updated_at' => '2025-05-13T06:41:31.000000Z', + ], + [ + 'id' => 471, + 'soldier_id' => 109, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-15 16:37:43', + 'end_date' => '2025-07-15 21:37:43', + 'created_at' => '2025-05-13T06:41:31.000000Z', + 'updated_at' => '2025-05-13T06:41:31.000000Z', + ], + [ + 'id' => 472, + 'soldier_id' => 109, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-20 20:53:22', + 'end_date' => '2025-07-20 21:53:22', + 'created_at' => '2025-05-13T06:41:31.000000Z', + 'updated_at' => '2025-05-13T06:41:31.000000Z', + ], + [ + 'id' => 473, + 'soldier_id' => 109, + 'constraint_type' => 'School', + 'start_date' => '2025-07-28 15:01:00', + 'end_date' => '2025-07-28 17:01:00', + 'created_at' => '2025-05-13T06:41:31.000000Z', + 'updated_at' => '2025-05-13T06:41:31.000000Z', + ], + [ + 'id' => 474, + 'soldier_id' => 109, + 'constraint_type' => 'School', + 'start_date' => '2025-07-05 08:12:46', + 'end_date' => '2025-07-05 10:12:46', + 'created_at' => '2025-05-13T06:41:31.000000Z', + 'updated_at' => '2025-05-13T06:41:31.000000Z', + ], + [ + 'id' => 475, + 'soldier_id' => 109, + 'constraint_type' => 'School', + 'start_date' => '2025-07-01 11:45:25', + 'end_date' => '2025-07-01 14:45:25', + 'created_at' => '2025-05-13T06:41:31.000000Z', + 'updated_at' => '2025-05-13T06:41:31.000000Z', + ], + [ + 'id' => 476, + 'soldier_id' => 109, + 'constraint_type' => 'School', + 'start_date' => '2025-07-02 05:06:20', + 'end_date' => '2025-07-02 08:06:20', + 'created_at' => '2025-05-13T06:41:31.000000Z', + 'updated_at' => '2025-05-13T06:41:31.000000Z', + ], + [ + 'id' => 477, + 'soldier_id' => 130, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-07 10:56:26', + 'end_date' => '2025-07-07 12:56:26', + 'created_at' => '2025-05-13T06:41:31.000000Z', + 'updated_at' => '2025-05-13T06:41:31.000000Z', + ], + [ + 'id' => 478, + 'soldier_id' => 130, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-13 01:25:24', + 'end_date' => '2025-07-13 04:25:24', + 'created_at' => '2025-05-13T06:41:31.000000Z', + 'updated_at' => '2025-05-13T06:41:31.000000Z', + ], + [ + 'id' => 479, + 'soldier_id' => 130, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-20 09:49:01', + 'end_date' => '2025-07-20 14:49:01', + 'created_at' => '2025-05-13T06:41:31.000000Z', + 'updated_at' => '2025-05-13T06:41:31.000000Z', + ], + [ + 'id' => 480, + 'soldier_id' => 130, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-09 16:46:56', + 'end_date' => '2025-07-09 18:46:56', + 'created_at' => '2025-05-13T06:41:31.000000Z', + 'updated_at' => '2025-05-13T06:41:31.000000Z', + ], + [ + 'id' => 481, + 'soldier_id' => 130, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-21 13:20:50', + 'end_date' => '2025-07-21 14:20:50', + 'created_at' => '2025-05-13T06:41:31.000000Z', + 'updated_at' => '2025-05-13T06:41:31.000000Z', + ], + [ + 'id' => 482, + 'soldier_id' => 130, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-29 13:38:14', + 'end_date' => '2025-07-29 15:38:14', + 'created_at' => '2025-05-13T06:41:31.000000Z', + 'updated_at' => '2025-05-13T06:41:31.000000Z', + ], + [ + 'id' => 483, + 'soldier_id' => 130, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-02 11:08:56', + 'end_date' => '2025-07-02 12:08:56', + 'created_at' => '2025-05-13T06:41:31.000000Z', + 'updated_at' => '2025-05-13T06:41:31.000000Z', + ], + [ + 'id' => 484, + 'soldier_id' => 130, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-04 15:52:20', + 'end_date' => '2025-07-04 19:52:20', + 'created_at' => '2025-05-13T06:41:31.000000Z', + 'updated_at' => '2025-05-13T06:41:31.000000Z', + ], + [ + 'id' => 485, + 'soldier_id' => 130, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-29 06:41:51', + 'end_date' => '2025-07-29 11:41:51', + 'created_at' => '2025-05-13T06:41:31.000000Z', + 'updated_at' => '2025-05-13T06:41:31.000000Z', + ], + [ + 'id' => 486, + 'soldier_id' => 130, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-19 16:43:02', + 'end_date' => '2025-07-19 18:43:02', + 'created_at' => '2025-05-13T06:41:31.000000Z', + 'updated_at' => '2025-05-13T06:41:31.000000Z', + ], + [ + 'id' => 487, + 'soldier_id' => 130, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-09 20:42:14', + 'end_date' => '2025-07-10 00:42:14', + 'created_at' => '2025-05-13T06:41:31.000000Z', + 'updated_at' => '2025-05-13T06:41:31.000000Z', + ], + [ + 'id' => 488, + 'soldier_id' => 130, + 'constraint_type' => 'School', + 'start_date' => '2025-07-21 09:38:02', + 'end_date' => '2025-07-21 10:38:02', + 'created_at' => '2025-05-13T06:41:31.000000Z', + 'updated_at' => '2025-05-13T06:41:31.000000Z', + ], + [ + 'id' => 489, + 'soldier_id' => 130, + 'constraint_type' => 'School', + 'start_date' => '2025-07-08 07:15:07', + 'end_date' => '2025-07-08 09:15:07', + 'created_at' => '2025-05-13T06:41:31.000000Z', + 'updated_at' => '2025-05-13T06:41:31.000000Z', + ], + [ + 'id' => 490, + 'soldier_id' => 130, + 'constraint_type' => 'School', + 'start_date' => '2025-07-29 18:18:40', + 'end_date' => '2025-07-29 23:18:40', + 'created_at' => '2025-05-13T06:41:31.000000Z', + 'updated_at' => '2025-05-13T06:41:31.000000Z', + ], + [ + 'id' => 491, + 'soldier_id' => 130, + 'constraint_type' => 'School', + 'start_date' => '2025-07-21 23:44:16', + 'end_date' => '2025-07-22 00:44:16', + 'created_at' => '2025-05-13T06:41:31.000000Z', + 'updated_at' => '2025-05-13T06:41:31.000000Z', + ], + [ + 'id' => 492, + 'soldier_id' => 162, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-14 12:54:34', + 'end_date' => '2025-07-14 13:54:34', + 'created_at' => '2025-05-13T06:41:31.000000Z', + 'updated_at' => '2025-05-13T06:41:31.000000Z', + ], + [ + 'id' => 493, + 'soldier_id' => 162, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-04 05:50:40', + 'end_date' => '2025-07-04 10:50:40', + 'created_at' => '2025-05-13T06:41:31.000000Z', + 'updated_at' => '2025-05-13T06:41:31.000000Z', + ], + [ + 'id' => 494, + 'soldier_id' => 162, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-26 03:34:04', + 'end_date' => '2025-07-26 06:34:04', + 'created_at' => '2025-05-13T06:41:31.000000Z', + 'updated_at' => '2025-05-13T06:41:31.000000Z', + ], + [ + 'id' => 495, + 'soldier_id' => 162, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-30 07:03:25', + 'end_date' => '2025-07-30 10:03:25', + 'created_at' => '2025-05-13T06:41:31.000000Z', + 'updated_at' => '2025-05-13T06:41:31.000000Z', + ], + [ + 'id' => 496, + 'soldier_id' => 162, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-03 10:01:21', + 'end_date' => '2025-07-03 14:01:21', + 'created_at' => '2025-05-13T06:41:31.000000Z', + 'updated_at' => '2025-05-13T06:41:31.000000Z', + ], + [ + 'id' => 497, + 'soldier_id' => 162, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-01 20:11:43', + 'end_date' => '2025-07-01 23:11:43', + 'created_at' => '2025-05-13T06:41:31.000000Z', + 'updated_at' => '2025-05-13T06:41:31.000000Z', + ], + [ + 'id' => 498, + 'soldier_id' => 162, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-20 13:46:12', + 'end_date' => '2025-07-20 17:46:12', + 'created_at' => '2025-05-13T06:41:31.000000Z', + 'updated_at' => '2025-05-13T06:41:31.000000Z', + ], + [ + 'id' => 499, + 'soldier_id' => 162, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-01 20:52:08', + 'end_date' => '2025-07-01 23:52:08', + 'created_at' => '2025-05-13T06:41:31.000000Z', + 'updated_at' => '2025-05-13T06:41:31.000000Z', + ], + [ + 'id' => 500, + 'soldier_id' => 162, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-24 02:15:00', + 'end_date' => '2025-07-24 06:15:00', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 501, + 'soldier_id' => 162, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-23 20:31:06', + 'end_date' => '2025-07-24 01:31:06', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 502, + 'soldier_id' => 162, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-05 20:54:30', + 'end_date' => '2025-07-05 21:54:30', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 503, + 'soldier_id' => 162, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-01 08:37:43', + 'end_date' => '2025-07-01 13:37:43', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 504, + 'soldier_id' => 162, + 'constraint_type' => 'School', + 'start_date' => '2025-07-19 02:13:35', + 'end_date' => '2025-07-19 03:13:35', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 505, + 'soldier_id' => 162, + 'constraint_type' => 'School', + 'start_date' => '2025-07-17 15:11:34', + 'end_date' => '2025-07-17 16:11:34', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 506, + 'soldier_id' => 25, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-25 05:31:48', + 'end_date' => '2025-07-25 08:31:48', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 507, + 'soldier_id' => 25, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-12 07:03:28', + 'end_date' => '2025-07-12 10:03:28', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 508, + 'soldier_id' => 25, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-02 08:18:36', + 'end_date' => '2025-07-02 13:18:36', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 509, + 'soldier_id' => 25, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-10 05:56:43', + 'end_date' => '2025-07-10 08:56:43', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 510, + 'soldier_id' => 25, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-27 20:08:20', + 'end_date' => '2025-07-27 23:08:20', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 511, + 'soldier_id' => 25, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-17 18:10:50', + 'end_date' => '2025-07-17 22:10:50', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 512, + 'soldier_id' => 96, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-20 10:13:07', + 'end_date' => '2025-07-20 11:13:07', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 513, + 'soldier_id' => 96, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-06 11:35:32', + 'end_date' => '2025-07-06 15:35:32', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 514, + 'soldier_id' => 96, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-13 09:54:24', + 'end_date' => '2025-07-13 14:54:24', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 515, + 'soldier_id' => 96, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-14 10:13:51', + 'end_date' => '2025-07-14 12:13:51', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 516, + 'soldier_id' => 96, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-12 20:14:26', + 'end_date' => '2025-07-13 01:14:26', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 517, + 'soldier_id' => 96, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-30 22:46:14', + 'end_date' => '2025-08-01 01:46:14', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 518, + 'soldier_id' => 96, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-25 20:00:35', + 'end_date' => '2025-07-25 21:00:35', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 519, + 'soldier_id' => 96, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-19 20:10:08', + 'end_date' => '2025-07-19 22:10:08', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 520, + 'soldier_id' => 96, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-17 18:04:55', + 'end_date' => '2025-07-17 22:04:55', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 521, + 'soldier_id' => 96, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-17 16:52:46', + 'end_date' => '2025-07-17 21:52:46', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 522, + 'soldier_id' => 96, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-27 14:31:14', + 'end_date' => '2025-07-27 17:31:14', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 523, + 'soldier_id' => 96, + 'constraint_type' => 'School', + 'start_date' => '2025-07-01 06:26:38', + 'end_date' => '2025-07-01 08:26:38', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 524, + 'soldier_id' => 96, + 'constraint_type' => 'School', + 'start_date' => '2025-07-02 17:50:01', + 'end_date' => '2025-07-02 20:50:01', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 525, + 'soldier_id' => 96, + 'constraint_type' => 'School', + 'start_date' => '2025-07-08 10:39:24', + 'end_date' => '2025-07-08 14:39:24', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 526, + 'soldier_id' => 96, + 'constraint_type' => 'School', + 'start_date' => '2025-07-10 06:55:33', + 'end_date' => '2025-07-10 10:55:33', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 527, + 'soldier_id' => 157, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-20 18:24:33', + 'end_date' => '2025-07-20 23:24:33', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 528, + 'soldier_id' => 157, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-07 14:27:04', + 'end_date' => '2025-07-07 16:27:04', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 529, + 'soldier_id' => 157, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-11 01:17:52', + 'end_date' => '2025-07-11 03:17:52', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 530, + 'soldier_id' => 157, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-23 10:38:02', + 'end_date' => '2025-07-23 13:38:02', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 531, + 'soldier_id' => 157, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-30 01:48:23', + 'end_date' => '2025-07-30 04:48:23', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 532, + 'soldier_id' => 157, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-11 23:10:05', + 'end_date' => '2025-07-12 02:10:05', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 533, + 'soldier_id' => 157, + 'constraint_type' => 'School', + 'start_date' => '2025-07-06 22:16:02', + 'end_date' => '2025-07-07 00:16:02', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 534, + 'soldier_id' => 157, + 'constraint_type' => 'School', + 'start_date' => '2025-07-06 23:54:24', + 'end_date' => '2025-07-07 01:54:24', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 535, + 'soldier_id' => 157, + 'constraint_type' => 'School', + 'start_date' => '2025-07-19 06:24:31', + 'end_date' => '2025-07-19 07:24:31', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 536, + 'soldier_id' => 157, + 'constraint_type' => 'School', + 'start_date' => '2025-07-14 01:19:39', + 'end_date' => '2025-07-14 04:19:39', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 537, + 'soldier_id' => 171, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-27 05:59:26', + 'end_date' => '2025-07-27 07:59:26', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 538, + 'soldier_id' => 171, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-27 18:20:50', + 'end_date' => '2025-07-27 23:20:50', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 539, + 'soldier_id' => 171, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-17 17:51:40', + 'end_date' => '2025-07-17 20:51:40', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 540, + 'soldier_id' => 171, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-10 21:31:09', + 'end_date' => '2025-07-11 01:31:09', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 541, + 'soldier_id' => 171, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-29 12:53:18', + 'end_date' => '2025-07-29 16:53:18', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 542, + 'soldier_id' => 171, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-09 22:06:36', + 'end_date' => '2025-07-09 23:06:36', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 543, + 'soldier_id' => 171, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-18 07:55:21', + 'end_date' => '2025-07-18 10:55:21', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 544, + 'soldier_id' => 171, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-14 05:48:11', + 'end_date' => '2025-07-14 10:48:11', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 545, + 'soldier_id' => 171, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-29 20:30:40', + 'end_date' => '2025-07-29 21:30:40', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 546, + 'soldier_id' => 171, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-03 10:03:05', + 'end_date' => '2025-07-03 14:03:05', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 547, + 'soldier_id' => 171, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-28 13:05:40', + 'end_date' => '2025-07-28 18:05:40', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 548, + 'soldier_id' => 171, + 'constraint_type' => 'School', + 'start_date' => '2025-07-27 13:38:03', + 'end_date' => '2025-07-27 18:38:03', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 549, + 'soldier_id' => 171, + 'constraint_type' => 'School', + 'start_date' => '2025-07-05 11:39:54', + 'end_date' => '2025-07-05 12:39:54', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 550, + 'soldier_id' => 171, + 'constraint_type' => 'School', + 'start_date' => '2025-07-16 01:39:40', + 'end_date' => '2025-07-16 02:39:40', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 551, + 'soldier_id' => 54, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-20 15:31:08', + 'end_date' => '2025-07-20 16:31:08', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 552, + 'soldier_id' => 54, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-14 18:50:56', + 'end_date' => '2025-07-14 22:50:56', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 553, + 'soldier_id' => 54, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-28 15:48:35', + 'end_date' => '2025-07-28 17:48:35', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 554, + 'soldier_id' => 54, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-26 20:40:45', + 'end_date' => '2025-07-26 23:40:45', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 555, + 'soldier_id' => 54, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-12 20:39:20', + 'end_date' => '2025-07-12 22:39:20', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 556, + 'soldier_id' => 54, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-08 09:40:15', + 'end_date' => '2025-07-08 13:40:15', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 557, + 'soldier_id' => 54, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-30 10:40:27', + 'end_date' => '2025-07-30 15:40:27', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 558, + 'soldier_id' => 54, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-24 07:22:46', + 'end_date' => '2025-07-24 08:22:46', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 559, + 'soldier_id' => 54, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-10 17:29:25', + 'end_date' => '2025-07-10 18:29:25', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 560, + 'soldier_id' => 54, + 'constraint_type' => 'School', + 'start_date' => '2025-07-17 14:13:28', + 'end_date' => '2025-07-17 16:13:28', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 561, + 'soldier_id' => 54, + 'constraint_type' => 'School', + 'start_date' => '2025-07-02 11:00:26', + 'end_date' => '2025-07-02 13:00:26', + 'created_at' => '2025-05-13T06:41:32.000000Z', + 'updated_at' => '2025-05-13T06:41:32.000000Z', + ], + [ + 'id' => 562, + 'soldier_id' => 29, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-27 11:48:00', + 'end_date' => '2025-07-27 16:48:00', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 563, + 'soldier_id' => 29, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-01 15:33:10', + 'end_date' => '2025-07-01 20:33:10', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 564, + 'soldier_id' => 29, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-27 12:26:39', + 'end_date' => '2025-07-27 16:26:39', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 565, + 'soldier_id' => 29, + 'constraint_type' => 'School', + 'start_date' => '2025-07-03 04:37:28', + 'end_date' => '2025-07-03 08:37:28', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 566, + 'soldier_id' => 29, + 'constraint_type' => 'School', + 'start_date' => '2025-07-26 15:55:40', + 'end_date' => '2025-07-26 18:55:40', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 567, + 'soldier_id' => 66, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-07 21:02:44', + 'end_date' => '2025-07-08 01:02:44', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 568, + 'soldier_id' => 66, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-28 15:51:33', + 'end_date' => '2025-07-28 17:51:33', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 569, + 'soldier_id' => 66, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-05 08:11:12', + 'end_date' => '2025-07-05 10:11:12', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 570, + 'soldier_id' => 66, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-09 09:29:23', + 'end_date' => '2025-07-09 13:29:23', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 571, + 'soldier_id' => 66, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-02 07:29:51', + 'end_date' => '2025-07-02 09:29:51', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 572, + 'soldier_id' => 66, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-24 04:02:34', + 'end_date' => '2025-07-24 05:02:34', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 573, + 'soldier_id' => 66, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-27 02:38:04', + 'end_date' => '2025-07-27 07:38:04', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 574, + 'soldier_id' => 66, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-01 21:38:35', + 'end_date' => '2025-07-01 22:38:35', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 575, + 'soldier_id' => 66, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-19 04:29:34', + 'end_date' => '2025-07-19 08:29:34', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 576, + 'soldier_id' => 66, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-14 00:30:15', + 'end_date' => '2025-07-14 01:30:15', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 577, + 'soldier_id' => 66, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-27 01:55:48', + 'end_date' => '2025-07-27 04:55:48', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 578, + 'soldier_id' => 66, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-17 04:58:18', + 'end_date' => '2025-07-17 07:58:18', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 579, + 'soldier_id' => 66, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-01 09:19:24', + 'end_date' => '2025-07-01 14:19:24', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 580, + 'soldier_id' => 66, + 'constraint_type' => 'School', + 'start_date' => '2025-07-27 20:20:29', + 'end_date' => '2025-07-28 01:20:29', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 581, + 'soldier_id' => 33, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-28 18:33:26', + 'end_date' => '2025-07-28 22:33:26', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 582, + 'soldier_id' => 33, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-09 18:51:01', + 'end_date' => '2025-07-09 20:51:01', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 583, + 'soldier_id' => 33, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-13 20:06:14', + 'end_date' => '2025-07-13 23:06:14', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 584, + 'soldier_id' => 33, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-25 20:56:43', + 'end_date' => '2025-07-25 22:56:43', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 585, + 'soldier_id' => 33, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-09 20:06:21', + 'end_date' => '2025-07-09 22:06:21', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 586, + 'soldier_id' => 33, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-29 17:37:11', + 'end_date' => '2025-07-29 22:37:11', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 587, + 'soldier_id' => 33, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-22 02:43:28', + 'end_date' => '2025-07-22 07:43:28', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 588, + 'soldier_id' => 33, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-11 17:44:31', + 'end_date' => '2025-07-11 20:44:31', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 589, + 'soldier_id' => 33, + 'constraint_type' => 'School', + 'start_date' => '2025-07-03 10:46:28', + 'end_date' => '2025-07-03 12:46:28', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 590, + 'soldier_id' => 33, + 'constraint_type' => 'School', + 'start_date' => '2025-07-17 08:37:03', + 'end_date' => '2025-07-17 13:37:03', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 591, + 'soldier_id' => 33, + 'constraint_type' => 'School', + 'start_date' => '2025-07-29 03:29:32', + 'end_date' => '2025-07-29 08:29:32', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 592, + 'soldier_id' => 159, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-22 03:42:00', + 'end_date' => '2025-07-22 04:42:00', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 593, + 'soldier_id' => 159, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-30 06:57:42', + 'end_date' => '2025-07-30 07:57:42', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 594, + 'soldier_id' => 159, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-12 20:28:38', + 'end_date' => '2025-07-12 21:28:38', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 595, + 'soldier_id' => 159, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-26 05:42:57', + 'end_date' => '2025-07-26 07:42:57', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 596, + 'soldier_id' => 159, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-18 07:53:02', + 'end_date' => '2025-07-18 08:53:02', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 597, + 'soldier_id' => 159, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-24 07:08:23', + 'end_date' => '2025-07-24 11:08:23', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 598, + 'soldier_id' => 159, + 'constraint_type' => 'School', + 'start_date' => '2025-07-09 16:18:48', + 'end_date' => '2025-07-09 21:18:48', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 599, + 'soldier_id' => 159, + 'constraint_type' => 'School', + 'start_date' => '2025-07-15 22:20:06', + 'end_date' => '2025-07-16 02:20:06', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 600, + 'soldier_id' => 159, + 'constraint_type' => 'School', + 'start_date' => '2025-07-09 11:27:26', + 'end_date' => '2025-07-09 13:27:26', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 601, + 'soldier_id' => 135, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-28 15:38:45', + 'end_date' => '2025-07-28 16:38:45', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 602, + 'soldier_id' => 135, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-04 22:52:47', + 'end_date' => '2025-07-05 00:52:47', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 603, + 'soldier_id' => 135, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-21 08:26:08', + 'end_date' => '2025-07-21 11:26:08', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 604, + 'soldier_id' => 135, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-21 22:41:06', + 'end_date' => '2025-07-22 00:41:06', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 605, + 'soldier_id' => 135, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-11 20:57:16', + 'end_date' => '2025-07-11 22:57:16', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 606, + 'soldier_id' => 135, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-30 04:15:38', + 'end_date' => '2025-07-30 08:15:38', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 607, + 'soldier_id' => 135, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-19 21:10:20', + 'end_date' => '2025-07-20 01:10:20', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 608, + 'soldier_id' => 135, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-28 06:08:16', + 'end_date' => '2025-07-28 11:08:16', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 609, + 'soldier_id' => 135, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-16 19:38:59', + 'end_date' => '2025-07-17 00:38:59', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 610, + 'soldier_id' => 135, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-22 23:10:34', + 'end_date' => '2025-07-23 00:10:34', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 611, + 'soldier_id' => 135, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-07 07:28:13', + 'end_date' => '2025-07-07 08:28:13', + 'created_at' => '2025-05-13T06:41:33.000000Z', + 'updated_at' => '2025-05-13T06:41:33.000000Z', + ], + [ + 'id' => 612, + 'soldier_id' => 1, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-27 09:18:25', + 'end_date' => '2025-07-27 13:18:25', + 'created_at' => '2025-05-13T06:41:34.000000Z', + 'updated_at' => '2025-05-13T06:41:34.000000Z', + ], + [ + 'id' => 613, + 'soldier_id' => 1, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-04 16:09:48', + 'end_date' => '2025-07-04 19:09:48', + 'created_at' => '2025-05-13T06:41:34.000000Z', + 'updated_at' => '2025-05-13T06:41:34.000000Z', + ], + [ + 'id' => 614, + 'soldier_id' => 1, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-16 08:34:11', + 'end_date' => '2025-07-16 13:34:11', + 'created_at' => '2025-05-13T06:41:34.000000Z', + 'updated_at' => '2025-05-13T06:41:34.000000Z', + ], + [ + 'id' => 615, + 'soldier_id' => 1, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-06 15:17:21', + 'end_date' => '2025-07-06 16:17:21', + 'created_at' => '2025-05-13T06:41:34.000000Z', + 'updated_at' => '2025-05-13T06:41:34.000000Z', + ], + [ + 'id' => 616, + 'soldier_id' => 1, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-28 20:22:06', + 'end_date' => '2025-07-28 22:22:06', + 'created_at' => '2025-05-13T06:41:34.000000Z', + 'updated_at' => '2025-05-13T06:41:34.000000Z', + ], + [ + 'id' => 617, + 'soldier_id' => 1, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-20 20:41:30', + 'end_date' => '2025-07-20 21:41:30', + 'created_at' => '2025-05-13T06:41:34.000000Z', + 'updated_at' => '2025-05-13T06:41:34.000000Z', + ], + [ + 'id' => 618, + 'soldier_id' => 1, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-01 12:18:08', + 'end_date' => '2025-07-01 15:18:08', + 'created_at' => '2025-05-13T06:41:34.000000Z', + 'updated_at' => '2025-05-13T06:41:34.000000Z', + ], + [ + 'id' => 619, + 'soldier_id' => 1, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-12 15:38:35', + 'end_date' => '2025-07-12 18:38:35', + 'created_at' => '2025-05-13T06:41:34.000000Z', + 'updated_at' => '2025-05-13T06:41:34.000000Z', + ], + [ + 'id' => 620, + 'soldier_id' => 1, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-17 23:25:23', + 'end_date' => '2025-07-18 04:25:23', + 'created_at' => '2025-05-13T06:41:34.000000Z', + 'updated_at' => '2025-05-13T06:41:34.000000Z', + ], + [ + 'id' => 621, + 'soldier_id' => 1, + 'constraint_type' => 'School', + 'start_date' => '2025-07-02 12:44:14', + 'end_date' => '2025-07-02 13:44:14', + 'created_at' => '2025-05-13T06:41:34.000000Z', + 'updated_at' => '2025-05-13T06:41:34.000000Z', + ], + [ + 'id' => 622, + 'soldier_id' => 107, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-21 05:07:48', + 'end_date' => '2025-07-21 08:07:48', + 'created_at' => '2025-05-13T06:41:34.000000Z', + 'updated_at' => '2025-05-13T06:41:34.000000Z', + ], + [ + 'id' => 623, + 'soldier_id' => 107, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-15 21:20:24', + 'end_date' => '2025-07-16 00:20:24', + 'created_at' => '2025-05-13T06:41:34.000000Z', + 'updated_at' => '2025-05-13T06:41:34.000000Z', + ], + [ + 'id' => 624, + 'soldier_id' => 107, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-20 05:42:59', + 'end_date' => '2025-07-20 06:42:59', + 'created_at' => '2025-05-13T06:41:34.000000Z', + 'updated_at' => '2025-05-13T06:41:34.000000Z', + ], + [ + 'id' => 625, + 'soldier_id' => 107, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-07 20:53:59', + 'end_date' => '2025-07-08 00:53:59', + 'created_at' => '2025-05-13T06:41:34.000000Z', + 'updated_at' => '2025-05-13T06:41:34.000000Z', + ], + [ + 'id' => 626, + 'soldier_id' => 107, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-19 21:49:52', + 'end_date' => '2025-07-20 01:49:52', + 'created_at' => '2025-05-13T06:41:34.000000Z', + 'updated_at' => '2025-05-13T06:41:34.000000Z', + ], + [ + 'id' => 627, + 'soldier_id' => 107, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-10 22:03:42', + 'end_date' => '2025-07-11 00:03:42', + 'created_at' => '2025-05-13T06:41:34.000000Z', + 'updated_at' => '2025-05-13T06:41:34.000000Z', + ], + [ + 'id' => 628, + 'soldier_id' => 107, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-26 04:09:27', + 'end_date' => '2025-07-26 09:09:27', + 'created_at' => '2025-05-13T06:41:34.000000Z', + 'updated_at' => '2025-05-13T06:41:34.000000Z', + ], + [ + 'id' => 629, + 'soldier_id' => 107, + 'constraint_type' => 'School', + 'start_date' => '2025-07-22 19:35:57', + 'end_date' => '2025-07-22 23:35:57', + 'created_at' => '2025-05-13T06:41:34.000000Z', + 'updated_at' => '2025-05-13T06:41:34.000000Z', + ], + [ + 'id' => 630, + 'soldier_id' => 38, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-14 00:47:06', + 'end_date' => '2025-07-14 05:47:06', + 'created_at' => '2025-05-13T06:41:34.000000Z', + 'updated_at' => '2025-05-13T06:41:34.000000Z', + ], + [ + 'id' => 631, + 'soldier_id' => 38, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-13 16:11:12', + 'end_date' => '2025-07-13 20:11:12', + 'created_at' => '2025-05-13T06:41:34.000000Z', + 'updated_at' => '2025-05-13T06:41:34.000000Z', + ], + [ + 'id' => 632, + 'soldier_id' => 38, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-22 04:51:56', + 'end_date' => '2025-07-22 05:51:56', + 'created_at' => '2025-05-13T06:41:34.000000Z', + 'updated_at' => '2025-05-13T06:41:34.000000Z', + ], + [ + 'id' => 633, + 'soldier_id' => 38, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-06 20:28:15', + 'end_date' => '2025-07-07 01:28:15', + 'created_at' => '2025-05-13T06:41:34.000000Z', + 'updated_at' => '2025-05-13T06:41:34.000000Z', + ], + [ + 'id' => 634, + 'soldier_id' => 38, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-16 20:19:41', + 'end_date' => '2025-07-16 21:19:41', + 'created_at' => '2025-05-13T06:41:34.000000Z', + 'updated_at' => '2025-05-13T06:41:34.000000Z', + ], + [ + 'id' => 635, + 'soldier_id' => 38, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-09 00:59:53', + 'end_date' => '2025-07-09 02:59:53', + 'created_at' => '2025-05-13T06:41:34.000000Z', + 'updated_at' => '2025-05-13T06:41:34.000000Z', + ], + [ + 'id' => 636, + 'soldier_id' => 38, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-02 21:11:08', + 'end_date' => '2025-07-02 23:11:08', + 'created_at' => '2025-05-13T06:41:34.000000Z', + 'updated_at' => '2025-05-13T06:41:34.000000Z', + ], + [ + 'id' => 637, + 'soldier_id' => 38, + 'constraint_type' => 'School', + 'start_date' => '2025-07-29 17:47:24', + 'end_date' => '2025-07-29 19:47:24', + 'created_at' => '2025-05-13T06:41:34.000000Z', + 'updated_at' => '2025-05-13T06:41:34.000000Z', + ], + [ + 'id' => 638, + 'soldier_id' => 38, + 'constraint_type' => 'School', + 'start_date' => '2025-07-16 19:44:47', + 'end_date' => '2025-07-16 20:44:47', + 'created_at' => '2025-05-13T06:41:34.000000Z', + 'updated_at' => '2025-05-13T06:41:34.000000Z', + ], + [ + 'id' => 639, + 'soldier_id' => 98, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-13 03:58:35', + 'end_date' => '2025-07-13 06:58:35', + 'created_at' => '2025-05-13T06:41:34.000000Z', + 'updated_at' => '2025-05-13T06:41:34.000000Z', + ], + [ + 'id' => 640, + 'soldier_id' => 98, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-26 12:23:09', + 'end_date' => '2025-07-26 15:23:09', + 'created_at' => '2025-05-13T06:41:34.000000Z', + 'updated_at' => '2025-05-13T06:41:34.000000Z', + ], + [ + 'id' => 641, + 'soldier_id' => 161, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-07 21:54:58', + 'end_date' => '2025-07-08 02:54:58', + 'created_at' => '2025-05-13T06:41:34.000000Z', + 'updated_at' => '2025-05-13T06:41:34.000000Z', + ], + [ + 'id' => 642, + 'soldier_id' => 161, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-17 17:35:06', + 'end_date' => '2025-07-17 20:35:06', + 'created_at' => '2025-05-13T06:41:34.000000Z', + 'updated_at' => '2025-05-13T06:41:34.000000Z', + ], + [ + 'id' => 643, + 'soldier_id' => 161, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-08 04:06:20', + 'end_date' => '2025-07-08 08:06:20', + 'created_at' => '2025-05-13T06:41:34.000000Z', + 'updated_at' => '2025-05-13T06:41:34.000000Z', + ], + [ + 'id' => 644, + 'soldier_id' => 161, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-03 03:45:12', + 'end_date' => '2025-07-03 07:45:12', + 'created_at' => '2025-05-13T06:41:34.000000Z', + 'updated_at' => '2025-05-13T06:41:34.000000Z', + ], + [ + 'id' => 645, + 'soldier_id' => 161, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-07 20:22:29', + 'end_date' => '2025-07-07 21:22:29', + 'created_at' => '2025-05-13T06:41:34.000000Z', + 'updated_at' => '2025-05-13T06:41:34.000000Z', + ], + [ + 'id' => 646, + 'soldier_id' => 161, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-05 20:41:03', + 'end_date' => '2025-07-05 21:41:03', + 'created_at' => '2025-05-13T06:41:34.000000Z', + 'updated_at' => '2025-05-13T06:41:34.000000Z', + ], + [ + 'id' => 647, + 'soldier_id' => 161, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-22 19:24:20', + 'end_date' => '2025-07-22 20:24:20', + 'created_at' => '2025-05-13T06:41:34.000000Z', + 'updated_at' => '2025-05-13T06:41:34.000000Z', + ], + [ + 'id' => 648, + 'soldier_id' => 161, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-14 11:12:03', + 'end_date' => '2025-07-14 12:12:03', + 'created_at' => '2025-05-13T06:41:34.000000Z', + 'updated_at' => '2025-05-13T06:41:34.000000Z', + ], + [ + 'id' => 649, + 'soldier_id' => 63, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-13 14:09:58', + 'end_date' => '2025-07-13 19:09:58', + 'created_at' => '2025-05-13T06:41:34.000000Z', + 'updated_at' => '2025-05-13T06:41:34.000000Z', + ], + [ + 'id' => 650, + 'soldier_id' => 63, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-14 00:53:13', + 'end_date' => '2025-07-14 01:53:13', + 'created_at' => '2025-05-13T06:41:34.000000Z', + 'updated_at' => '2025-05-13T06:41:34.000000Z', + ], + [ + 'id' => 651, + 'soldier_id' => 63, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-01 18:40:16', + 'end_date' => '2025-07-01 19:40:16', + 'created_at' => '2025-05-13T06:41:34.000000Z', + 'updated_at' => '2025-05-13T06:41:34.000000Z', + ], + [ + 'id' => 652, + 'soldier_id' => 63, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-27 18:38:32', + 'end_date' => '2025-07-27 21:38:32', + 'created_at' => '2025-05-13T06:41:34.000000Z', + 'updated_at' => '2025-05-13T06:41:34.000000Z', + ], + [ + 'id' => 653, + 'soldier_id' => 63, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-15 06:53:47', + 'end_date' => '2025-07-15 09:53:47', + 'created_at' => '2025-05-13T06:41:34.000000Z', + 'updated_at' => '2025-05-13T06:41:34.000000Z', + ], + [ + 'id' => 654, + 'soldier_id' => 63, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-27 20:47:29', + 'end_date' => '2025-07-27 21:47:29', + 'created_at' => '2025-05-13T06:41:34.000000Z', + 'updated_at' => '2025-05-13T06:41:34.000000Z', + ], + [ + 'id' => 655, + 'soldier_id' => 63, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-03 21:25:39', + 'end_date' => '2025-07-04 02:25:39', + 'created_at' => '2025-05-13T06:41:34.000000Z', + 'updated_at' => '2025-05-13T06:41:34.000000Z', + ], + [ + 'id' => 656, + 'soldier_id' => 63, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-19 13:56:22', + 'end_date' => '2025-07-19 14:56:22', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 657, + 'soldier_id' => 63, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-03 11:33:32', + 'end_date' => '2025-07-03 14:33:32', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 658, + 'soldier_id' => 63, + 'constraint_type' => 'School', + 'start_date' => '2025-07-11 17:47:03', + 'end_date' => '2025-07-11 21:47:03', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 659, + 'soldier_id' => 63, + 'constraint_type' => 'School', + 'start_date' => '2025-07-21 13:30:24', + 'end_date' => '2025-07-21 16:30:24', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 660, + 'soldier_id' => 63, + 'constraint_type' => 'School', + 'start_date' => '2025-07-13 17:23:50', + 'end_date' => '2025-07-13 19:23:50', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 661, + 'soldier_id' => 63, + 'constraint_type' => 'School', + 'start_date' => '2025-07-27 20:10:43', + 'end_date' => '2025-07-27 21:10:43', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 662, + 'soldier_id' => 39, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-06 09:51:32', + 'end_date' => '2025-07-06 10:51:32', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 663, + 'soldier_id' => 39, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-29 02:48:03', + 'end_date' => '2025-07-29 04:48:03', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 664, + 'soldier_id' => 39, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-16 01:10:20', + 'end_date' => '2025-07-16 04:10:20', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 665, + 'soldier_id' => 39, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-08 21:31:40', + 'end_date' => '2025-07-09 02:31:40', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 666, + 'soldier_id' => 39, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-15 09:11:31', + 'end_date' => '2025-07-15 11:11:31', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 667, + 'soldier_id' => 39, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-13 01:48:27', + 'end_date' => '2025-07-13 03:48:27', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 668, + 'soldier_id' => 39, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-03 20:52:47', + 'end_date' => '2025-07-04 01:52:47', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 669, + 'soldier_id' => 39, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-04 04:12:31', + 'end_date' => '2025-07-04 07:12:31', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 670, + 'soldier_id' => 39, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-12 15:44:09', + 'end_date' => '2025-07-12 20:44:09', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 671, + 'soldier_id' => 39, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-19 07:10:10', + 'end_date' => '2025-07-19 12:10:10', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 672, + 'soldier_id' => 39, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-30 00:16:37', + 'end_date' => '2025-07-30 01:16:37', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 673, + 'soldier_id' => 39, + 'constraint_type' => 'School', + 'start_date' => '2025-07-14 01:23:47', + 'end_date' => '2025-07-14 05:23:47', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 674, + 'soldier_id' => 39, + 'constraint_type' => 'School', + 'start_date' => '2025-07-10 12:34:39', + 'end_date' => '2025-07-10 17:34:39', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 675, + 'soldier_id' => 39, + 'constraint_type' => 'School', + 'start_date' => '2025-07-06 18:37:31', + 'end_date' => '2025-07-06 19:37:31', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 676, + 'soldier_id' => 39, + 'constraint_type' => 'School', + 'start_date' => '2025-07-05 12:12:10', + 'end_date' => '2025-07-05 17:12:10', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 677, + 'soldier_id' => 140, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-20 02:18:16', + 'end_date' => '2025-07-20 05:18:16', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 678, + 'soldier_id' => 140, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-18 13:56:09', + 'end_date' => '2025-07-18 14:56:09', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 679, + 'soldier_id' => 140, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-02 01:49:51', + 'end_date' => '2025-07-02 04:49:51', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 680, + 'soldier_id' => 140, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-18 21:14:12', + 'end_date' => '2025-07-19 00:14:12', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 681, + 'soldier_id' => 140, + 'constraint_type' => 'School', + 'start_date' => '2025-07-28 22:07:28', + 'end_date' => '2025-07-29 00:07:28', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 682, + 'soldier_id' => 140, + 'constraint_type' => 'School', + 'start_date' => '2025-07-08 06:18:45', + 'end_date' => '2025-07-08 10:18:45', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 683, + 'soldier_id' => 140, + 'constraint_type' => 'School', + 'start_date' => '2025-07-10 08:47:50', + 'end_date' => '2025-07-10 13:47:50', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 684, + 'soldier_id' => 140, + 'constraint_type' => 'School', + 'start_date' => '2025-07-22 22:51:43', + 'end_date' => '2025-07-23 01:51:43', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 685, + 'soldier_id' => 95, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-20 09:06:15', + 'end_date' => '2025-07-20 14:06:15', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 686, + 'soldier_id' => 95, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-21 19:40:21', + 'end_date' => '2025-07-22 00:40:21', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 687, + 'soldier_id' => 95, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-09 14:47:55', + 'end_date' => '2025-07-09 16:47:55', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 688, + 'soldier_id' => 95, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-04 15:45:30', + 'end_date' => '2025-07-04 18:45:30', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 689, + 'soldier_id' => 95, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-09 20:39:08', + 'end_date' => '2025-07-10 01:39:08', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 690, + 'soldier_id' => 95, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-23 02:49:20', + 'end_date' => '2025-07-23 04:49:20', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 691, + 'soldier_id' => 95, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-05 04:51:29', + 'end_date' => '2025-07-05 06:51:29', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 692, + 'soldier_id' => 95, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-22 11:15:56', + 'end_date' => '2025-07-22 13:15:56', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 693, + 'soldier_id' => 95, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-29 14:56:40', + 'end_date' => '2025-07-29 16:56:40', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 694, + 'soldier_id' => 95, + 'constraint_type' => 'School', + 'start_date' => '2025-07-08 03:04:58', + 'end_date' => '2025-07-08 04:04:58', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 695, + 'soldier_id' => 95, + 'constraint_type' => 'School', + 'start_date' => '2025-07-07 06:37:50', + 'end_date' => '2025-07-07 10:37:50', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 696, + 'soldier_id' => 95, + 'constraint_type' => 'School', + 'start_date' => '2025-07-02 16:10:13', + 'end_date' => '2025-07-02 21:10:13', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 697, + 'soldier_id' => 95, + 'constraint_type' => 'School', + 'start_date' => '2025-07-13 22:48:08', + 'end_date' => '2025-07-14 00:48:08', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 698, + 'soldier_id' => 111, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-28 11:03:06', + 'end_date' => '2025-07-28 12:03:06', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 699, + 'soldier_id' => 111, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-08 20:43:12', + 'end_date' => '2025-07-08 22:43:12', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 700, + 'soldier_id' => 111, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-29 01:08:14', + 'end_date' => '2025-07-29 02:08:14', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 701, + 'soldier_id' => 111, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-29 10:30:21', + 'end_date' => '2025-07-29 11:30:21', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 702, + 'soldier_id' => 111, + 'constraint_type' => 'School', + 'start_date' => '2025-07-03 00:59:17', + 'end_date' => '2025-07-03 04:59:17', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 703, + 'soldier_id' => 111, + 'constraint_type' => 'School', + 'start_date' => '2025-07-11 11:25:34', + 'end_date' => '2025-07-11 16:25:34', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 704, + 'soldier_id' => 111, + 'constraint_type' => 'School', + 'start_date' => '2025-07-03 06:06:46', + 'end_date' => '2025-07-03 11:06:46', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 705, + 'soldier_id' => 68, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-17 08:38:44', + 'end_date' => '2025-07-17 13:38:44', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 706, + 'soldier_id' => 68, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-23 08:04:09', + 'end_date' => '2025-07-23 09:04:09', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 707, + 'soldier_id' => 68, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-05 06:11:48', + 'end_date' => '2025-07-05 08:11:48', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 708, + 'soldier_id' => 68, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-18 20:02:46', + 'end_date' => '2025-07-19 00:02:46', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 709, + 'soldier_id' => 68, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-10 20:03:15', + 'end_date' => '2025-07-10 22:03:15', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 710, + 'soldier_id' => 68, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-29 17:49:19', + 'end_date' => '2025-07-29 21:49:19', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 711, + 'soldier_id' => 68, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-06 17:47:04', + 'end_date' => '2025-07-06 20:47:04', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 712, + 'soldier_id' => 68, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-27 02:54:35', + 'end_date' => '2025-07-27 03:54:35', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 713, + 'soldier_id' => 68, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-20 00:09:13', + 'end_date' => '2025-07-20 04:09:13', + 'created_at' => '2025-05-13T06:41:35.000000Z', + 'updated_at' => '2025-05-13T06:41:35.000000Z', + ], + [ + 'id' => 714, + 'soldier_id' => 68, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-28 11:53:27', + 'end_date' => '2025-07-28 14:53:27', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 715, + 'soldier_id' => 68, + 'constraint_type' => 'School', + 'start_date' => '2025-07-13 02:56:20', + 'end_date' => '2025-07-13 03:56:20', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 716, + 'soldier_id' => 68, + 'constraint_type' => 'School', + 'start_date' => '2025-07-09 09:12:31', + 'end_date' => '2025-07-09 11:12:31', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 717, + 'soldier_id' => 169, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-27 22:28:53', + 'end_date' => '2025-07-28 02:28:53', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 718, + 'soldier_id' => 169, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-26 12:10:05', + 'end_date' => '2025-07-26 13:10:05', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 719, + 'soldier_id' => 169, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-04 19:00:55', + 'end_date' => '2025-07-04 20:00:55', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 720, + 'soldier_id' => 169, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-21 00:28:34', + 'end_date' => '2025-07-21 01:28:34', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 721, + 'soldier_id' => 169, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-29 01:16:15', + 'end_date' => '2025-07-29 02:16:15', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 722, + 'soldier_id' => 169, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-08 20:17:54', + 'end_date' => '2025-07-09 00:17:54', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 723, + 'soldier_id' => 169, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-05 05:40:09', + 'end_date' => '2025-07-05 06:40:09', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 724, + 'soldier_id' => 169, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-12 02:36:17', + 'end_date' => '2025-07-12 06:36:17', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 725, + 'soldier_id' => 169, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-25 10:39:26', + 'end_date' => '2025-07-25 15:39:26', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 726, + 'soldier_id' => 169, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-15 08:37:32', + 'end_date' => '2025-07-15 12:37:32', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 727, + 'soldier_id' => 160, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-20 06:25:15', + 'end_date' => '2025-07-20 09:25:15', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 728, + 'soldier_id' => 160, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-05 07:53:04', + 'end_date' => '2025-07-05 10:53:04', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 729, + 'soldier_id' => 160, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-15 23:29:07', + 'end_date' => '2025-07-16 01:29:07', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 730, + 'soldier_id' => 160, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-23 07:22:39', + 'end_date' => '2025-07-23 09:22:39', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 731, + 'soldier_id' => 160, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-10 20:09:59', + 'end_date' => '2025-07-10 23:09:59', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 732, + 'soldier_id' => 160, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-11 01:43:07', + 'end_date' => '2025-07-11 04:43:07', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 733, + 'soldier_id' => 160, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-04 20:01:07', + 'end_date' => '2025-07-04 21:01:07', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 734, + 'soldier_id' => 160, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-05 05:18:07', + 'end_date' => '2025-07-05 09:18:07', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 735, + 'soldier_id' => 160, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-22 15:34:25', + 'end_date' => '2025-07-22 18:34:25', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 736, + 'soldier_id' => 160, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-13 10:32:22', + 'end_date' => '2025-07-13 14:32:22', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 737, + 'soldier_id' => 160, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-28 01:36:46', + 'end_date' => '2025-07-28 03:36:46', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 738, + 'soldier_id' => 160, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-26 07:42:28', + 'end_date' => '2025-07-26 11:42:28', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 739, + 'soldier_id' => 160, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-05 07:48:30', + 'end_date' => '2025-07-05 11:48:30', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 740, + 'soldier_id' => 160, + 'constraint_type' => 'School', + 'start_date' => '2025-07-14 12:14:32', + 'end_date' => '2025-07-14 16:14:32', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 741, + 'soldier_id' => 142, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-20 02:37:29', + 'end_date' => '2025-07-20 06:37:29', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 742, + 'soldier_id' => 142, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-20 14:23:21', + 'end_date' => '2025-07-20 15:23:21', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 743, + 'soldier_id' => 142, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-24 23:53:08', + 'end_date' => '2025-07-25 00:53:08', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 744, + 'soldier_id' => 142, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-14 04:50:38', + 'end_date' => '2025-07-14 07:50:38', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 745, + 'soldier_id' => 142, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-19 20:55:45', + 'end_date' => '2025-07-19 22:55:45', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 746, + 'soldier_id' => 142, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-29 11:33:18', + 'end_date' => '2025-07-29 14:33:18', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 747, + 'soldier_id' => 142, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-23 17:05:14', + 'end_date' => '2025-07-23 21:05:14', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 748, + 'soldier_id' => 142, + 'constraint_type' => 'School', + 'start_date' => '2025-07-27 21:43:33', + 'end_date' => '2025-07-28 02:43:33', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 749, + 'soldier_id' => 142, + 'constraint_type' => 'School', + 'start_date' => '2025-07-20 17:09:49', + 'end_date' => '2025-07-20 22:09:49', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 750, + 'soldier_id' => 142, + 'constraint_type' => 'School', + 'start_date' => '2025-07-12 12:30:51', + 'end_date' => '2025-07-12 17:30:51', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 751, + 'soldier_id' => 141, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-07 05:06:55', + 'end_date' => '2025-07-07 10:06:55', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 752, + 'soldier_id' => 141, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-18 09:41:01', + 'end_date' => '2025-07-18 11:41:01', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 753, + 'soldier_id' => 141, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-24 17:10:53', + 'end_date' => '2025-07-24 18:10:53', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 754, + 'soldier_id' => 141, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-19 23:24:53', + 'end_date' => '2025-07-20 04:24:53', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 755, + 'soldier_id' => 141, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-30 05:43:26', + 'end_date' => '2025-07-30 07:43:26', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 756, + 'soldier_id' => 141, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-23 22:48:16', + 'end_date' => '2025-07-24 00:48:16', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 757, + 'soldier_id' => 141, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-08 05:00:57', + 'end_date' => '2025-07-08 07:00:57', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 758, + 'soldier_id' => 141, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-16 20:37:44', + 'end_date' => '2025-07-16 21:37:44', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 759, + 'soldier_id' => 141, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-01 11:15:39', + 'end_date' => '2025-07-01 15:15:39', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 760, + 'soldier_id' => 141, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-22 11:14:27', + 'end_date' => '2025-07-22 16:14:27', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 761, + 'soldier_id' => 141, + 'constraint_type' => 'School', + 'start_date' => '2025-07-20 06:59:45', + 'end_date' => '2025-07-20 09:59:45', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 762, + 'soldier_id' => 141, + 'constraint_type' => 'School', + 'start_date' => '2025-07-30 15:47:44', + 'end_date' => '2025-07-30 19:47:44', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 763, + 'soldier_id' => 141, + 'constraint_type' => 'School', + 'start_date' => '2025-07-18 20:43:16', + 'end_date' => '2025-07-18 21:43:16', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 764, + 'soldier_id' => 78, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-27 06:35:04', + 'end_date' => '2025-07-27 09:35:04', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 765, + 'soldier_id' => 78, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-21 20:18:09', + 'end_date' => '2025-07-21 21:18:09', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 766, + 'soldier_id' => 78, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-05 15:38:01', + 'end_date' => '2025-07-05 18:38:01', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 767, + 'soldier_id' => 78, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-09 20:20:28', + 'end_date' => '2025-07-10 01:20:28', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 768, + 'soldier_id' => 78, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-29 13:21:07', + 'end_date' => '2025-07-29 18:21:07', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 769, + 'soldier_id' => 78, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-23 23:30:31', + 'end_date' => '2025-07-24 00:30:31', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 770, + 'soldier_id' => 78, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-28 22:44:05', + 'end_date' => '2025-07-29 03:44:05', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 771, + 'soldier_id' => 78, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-16 04:07:50', + 'end_date' => '2025-07-16 09:07:50', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 772, + 'soldier_id' => 21, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-28 09:30:57', + 'end_date' => '2025-07-28 12:30:57', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 773, + 'soldier_id' => 21, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-13 05:56:16', + 'end_date' => '2025-07-13 07:56:16', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 774, + 'soldier_id' => 21, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-03 11:44:57', + 'end_date' => '2025-07-03 15:44:57', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 775, + 'soldier_id' => 21, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-24 20:12:07', + 'end_date' => '2025-07-25 00:12:07', + 'created_at' => '2025-05-13T06:41:36.000000Z', + 'updated_at' => '2025-05-13T06:41:36.000000Z', + ], + [ + 'id' => 776, + 'soldier_id' => 21, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-04 20:05:08', + 'end_date' => '2025-07-05 00:05:08', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 777, + 'soldier_id' => 21, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-07 06:12:46', + 'end_date' => '2025-07-07 07:12:46', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 778, + 'soldier_id' => 21, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-03 20:53:20', + 'end_date' => '2025-07-03 23:53:20', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 779, + 'soldier_id' => 21, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-29 18:29:11', + 'end_date' => '2025-07-29 23:29:11', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 780, + 'soldier_id' => 21, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-23 07:38:08', + 'end_date' => '2025-07-23 12:38:08', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 781, + 'soldier_id' => 21, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-11 09:06:03', + 'end_date' => '2025-07-11 12:06:03', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 782, + 'soldier_id' => 21, + 'constraint_type' => 'School', + 'start_date' => '2025-07-10 11:10:54', + 'end_date' => '2025-07-10 14:10:54', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 783, + 'soldier_id' => 21, + 'constraint_type' => 'School', + 'start_date' => '2025-07-19 14:34:11', + 'end_date' => '2025-07-19 19:34:11', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 784, + 'soldier_id' => 21, + 'constraint_type' => 'School', + 'start_date' => '2025-07-25 04:55:30', + 'end_date' => '2025-07-25 05:55:30', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 785, + 'soldier_id' => 21, + 'constraint_type' => 'School', + 'start_date' => '2025-07-11 01:51:44', + 'end_date' => '2025-07-11 03:51:44', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 786, + 'soldier_id' => 115, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-28 23:00:36', + 'end_date' => '2025-07-29 02:00:36', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 787, + 'soldier_id' => 115, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-20 04:20:57', + 'end_date' => '2025-07-20 05:20:57', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 788, + 'soldier_id' => 115, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-12 09:21:23', + 'end_date' => '2025-07-12 14:21:23', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 789, + 'soldier_id' => 115, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-29 09:53:09', + 'end_date' => '2025-07-29 11:53:09', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 790, + 'soldier_id' => 115, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-09 22:45:24', + 'end_date' => '2025-07-10 03:45:24', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 791, + 'soldier_id' => 115, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-23 20:43:24', + 'end_date' => '2025-07-23 22:43:24', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 792, + 'soldier_id' => 115, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-25 21:07:46', + 'end_date' => '2025-07-25 23:07:46', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 793, + 'soldier_id' => 115, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-02 20:03:23', + 'end_date' => '2025-07-02 21:03:23', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 794, + 'soldier_id' => 115, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-07 07:51:45', + 'end_date' => '2025-07-07 12:51:45', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 795, + 'soldier_id' => 115, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-28 15:09:22', + 'end_date' => '2025-07-28 17:09:22', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 796, + 'soldier_id' => 115, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-13 18:52:15', + 'end_date' => '2025-07-13 19:52:15', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 797, + 'soldier_id' => 115, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-02 21:40:36', + 'end_date' => '2025-07-02 23:40:36', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 798, + 'soldier_id' => 115, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-29 13:28:44', + 'end_date' => '2025-07-29 15:28:44', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 799, + 'soldier_id' => 115, + 'constraint_type' => 'School', + 'start_date' => '2025-07-20 09:31:42', + 'end_date' => '2025-07-20 14:31:42', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 800, + 'soldier_id' => 115, + 'constraint_type' => 'School', + 'start_date' => '2025-07-27 03:00:07', + 'end_date' => '2025-07-27 04:00:07', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 801, + 'soldier_id' => 115, + 'constraint_type' => 'School', + 'start_date' => '2025-07-29 08:23:49', + 'end_date' => '2025-07-29 10:23:49', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 802, + 'soldier_id' => 115, + 'constraint_type' => 'School', + 'start_date' => '2025-07-09 07:33:10', + 'end_date' => '2025-07-09 08:33:10', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 803, + 'soldier_id' => 28, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-06 09:29:56', + 'end_date' => '2025-07-06 12:29:56', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 804, + 'soldier_id' => 28, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-04 10:15:07', + 'end_date' => '2025-07-04 12:15:07', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 805, + 'soldier_id' => 28, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-26 06:25:27', + 'end_date' => '2025-07-26 08:25:27', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 806, + 'soldier_id' => 28, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-19 16:38:59', + 'end_date' => '2025-07-19 21:38:59', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 807, + 'soldier_id' => 28, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-04 04:20:06', + 'end_date' => '2025-07-04 07:20:06', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 808, + 'soldier_id' => 28, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-03 12:24:00', + 'end_date' => '2025-07-03 14:24:00', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 809, + 'soldier_id' => 28, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-01 14:29:17', + 'end_date' => '2025-07-01 19:29:17', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 810, + 'soldier_id' => 28, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-12 09:33:25', + 'end_date' => '2025-07-12 10:33:25', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 811, + 'soldier_id' => 28, + 'constraint_type' => 'School', + 'start_date' => '2025-07-18 20:31:33', + 'end_date' => '2025-07-18 23:31:33', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 812, + 'soldier_id' => 28, + 'constraint_type' => 'School', + 'start_date' => '2025-07-21 08:17:43', + 'end_date' => '2025-07-21 13:17:43', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 813, + 'soldier_id' => 172, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-27 14:51:59', + 'end_date' => '2025-07-27 16:51:59', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 814, + 'soldier_id' => 172, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-21 14:02:14', + 'end_date' => '2025-07-21 19:02:14', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 815, + 'soldier_id' => 172, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-01 05:55:33', + 'end_date' => '2025-07-01 07:55:33', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 816, + 'soldier_id' => 172, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-28 21:23:13', + 'end_date' => '2025-07-28 22:23:13', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 817, + 'soldier_id' => 172, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-10 03:36:47', + 'end_date' => '2025-07-10 06:36:47', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 818, + 'soldier_id' => 172, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-18 20:23:41', + 'end_date' => '2025-07-18 21:23:41', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 819, + 'soldier_id' => 172, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-27 20:07:30', + 'end_date' => '2025-07-27 22:07:30', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 820, + 'soldier_id' => 172, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-05 05:37:43', + 'end_date' => '2025-07-05 08:37:43', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 821, + 'soldier_id' => 172, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-08 05:57:30', + 'end_date' => '2025-07-08 08:57:30', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 822, + 'soldier_id' => 172, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-22 12:13:32', + 'end_date' => '2025-07-22 14:13:32', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 823, + 'soldier_id' => 132, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-28 05:20:24', + 'end_date' => '2025-07-28 07:20:24', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 824, + 'soldier_id' => 132, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-14 18:31:25', + 'end_date' => '2025-07-14 23:31:25', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 825, + 'soldier_id' => 132, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-14 18:39:03', + 'end_date' => '2025-07-14 20:39:03', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 826, + 'soldier_id' => 132, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-14 09:09:28', + 'end_date' => '2025-07-14 11:09:28', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 827, + 'soldier_id' => 132, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-24 11:14:44', + 'end_date' => '2025-07-24 16:14:44', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 828, + 'soldier_id' => 132, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-19 20:01:51', + 'end_date' => '2025-07-19 21:01:51', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 829, + 'soldier_id' => 132, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-30 19:07:34', + 'end_date' => '2025-07-30 23:07:34', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 830, + 'soldier_id' => 132, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-02 20:12:53', + 'end_date' => '2025-07-02 23:12:53', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 831, + 'soldier_id' => 132, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-14 04:57:39', + 'end_date' => '2025-07-14 09:57:39', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 832, + 'soldier_id' => 132, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-29 02:22:42', + 'end_date' => '2025-07-29 04:22:42', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 833, + 'soldier_id' => 132, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-25 02:44:53', + 'end_date' => '2025-07-25 07:44:53', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 834, + 'soldier_id' => 132, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-01 12:52:41', + 'end_date' => '2025-07-01 15:52:41', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 835, + 'soldier_id' => 132, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-01 19:21:58', + 'end_date' => '2025-07-01 23:21:58', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 836, + 'soldier_id' => 132, + 'constraint_type' => 'School', + 'start_date' => '2025-07-06 09:03:54', + 'end_date' => '2025-07-06 11:03:54', + 'created_at' => '2025-05-13T06:41:37.000000Z', + 'updated_at' => '2025-05-13T06:41:37.000000Z', + ], + [ + 'id' => 837, + 'soldier_id' => 132, + 'constraint_type' => 'School', + 'start_date' => '2025-07-16 08:56:45', + 'end_date' => '2025-07-16 10:56:45', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 838, + 'soldier_id' => 55, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-07 07:49:22', + 'end_date' => '2025-07-07 08:49:22', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 839, + 'soldier_id' => 55, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-15 10:22:19', + 'end_date' => '2025-07-15 15:22:19', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 840, + 'soldier_id' => 55, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-01 04:14:19', + 'end_date' => '2025-07-01 07:14:19', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 841, + 'soldier_id' => 55, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-26 00:09:29', + 'end_date' => '2025-07-26 04:09:29', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 842, + 'soldier_id' => 55, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-15 05:40:44', + 'end_date' => '2025-07-15 10:40:44', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 843, + 'soldier_id' => 55, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-15 21:52:01', + 'end_date' => '2025-07-15 22:52:01', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 844, + 'soldier_id' => 55, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-22 12:56:46', + 'end_date' => '2025-07-22 15:56:46', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 845, + 'soldier_id' => 55, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-28 18:33:02', + 'end_date' => '2025-07-28 21:33:02', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 846, + 'soldier_id' => 55, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-12 17:54:31', + 'end_date' => '2025-07-12 22:54:31', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 847, + 'soldier_id' => 55, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-19 11:52:42', + 'end_date' => '2025-07-19 16:52:42', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 848, + 'soldier_id' => 55, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-24 04:42:28', + 'end_date' => '2025-07-24 09:42:28', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 849, + 'soldier_id' => 55, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-26 00:41:54', + 'end_date' => '2025-07-26 05:41:54', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 850, + 'soldier_id' => 55, + 'constraint_type' => 'School', + 'start_date' => '2025-07-02 02:19:39', + 'end_date' => '2025-07-02 06:19:39', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 851, + 'soldier_id' => 55, + 'constraint_type' => 'School', + 'start_date' => '2025-07-24 17:15:04', + 'end_date' => '2025-07-24 22:15:04', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 852, + 'soldier_id' => 55, + 'constraint_type' => 'School', + 'start_date' => '2025-07-25 18:32:16', + 'end_date' => '2025-07-25 19:32:16', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 853, + 'soldier_id' => 70, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-11 15:12:43', + 'end_date' => '2025-07-11 16:12:43', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 854, + 'soldier_id' => 70, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-06 20:07:20', + 'end_date' => '2025-07-07 00:07:20', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 855, + 'soldier_id' => 70, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-01 00:24:52', + 'end_date' => '2025-07-01 01:24:52', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 856, + 'soldier_id' => 70, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-29 19:33:09', + 'end_date' => '2025-07-30 00:33:09', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 857, + 'soldier_id' => 70, + 'constraint_type' => 'School', + 'start_date' => '2025-07-11 10:57:13', + 'end_date' => '2025-07-11 13:57:13', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 858, + 'soldier_id' => 70, + 'constraint_type' => 'School', + 'start_date' => '2025-07-07 13:57:19', + 'end_date' => '2025-07-07 15:57:19', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 859, + 'soldier_id' => 70, + 'constraint_type' => 'School', + 'start_date' => '2025-07-16 23:50:39', + 'end_date' => '2025-07-17 04:50:39', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 860, + 'soldier_id' => 36, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-07 23:27:35', + 'end_date' => '2025-07-08 01:27:35', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 861, + 'soldier_id' => 36, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-18 21:10:10', + 'end_date' => '2025-07-19 01:10:10', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 862, + 'soldier_id' => 36, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-24 23:41:10', + 'end_date' => '2025-07-25 02:41:10', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 863, + 'soldier_id' => 36, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-02 21:04:52', + 'end_date' => '2025-07-03 00:04:52', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 864, + 'soldier_id' => 36, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-06 04:49:59', + 'end_date' => '2025-07-06 08:49:59', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 865, + 'soldier_id' => 36, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-19 07:41:48', + 'end_date' => '2025-07-19 11:41:48', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 866, + 'soldier_id' => 36, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-22 15:05:18', + 'end_date' => '2025-07-22 18:05:18', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 867, + 'soldier_id' => 36, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-15 18:58:43', + 'end_date' => '2025-07-15 22:58:43', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 868, + 'soldier_id' => 36, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-21 00:13:14', + 'end_date' => '2025-07-21 03:13:14', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 869, + 'soldier_id' => 36, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-10 20:43:01', + 'end_date' => '2025-07-11 01:43:01', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 870, + 'soldier_id' => 36, + 'constraint_type' => 'School', + 'start_date' => '2025-07-23 21:29:34', + 'end_date' => '2025-07-24 00:29:34', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 871, + 'soldier_id' => 36, + 'constraint_type' => 'School', + 'start_date' => '2025-07-15 23:09:38', + 'end_date' => '2025-07-16 00:09:38', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 872, + 'soldier_id' => 143, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-06 08:46:46', + 'end_date' => '2025-07-06 12:46:46', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 873, + 'soldier_id' => 143, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-19 09:49:05', + 'end_date' => '2025-07-19 11:49:05', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 874, + 'soldier_id' => 143, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-19 02:10:39', + 'end_date' => '2025-07-19 04:10:39', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 875, + 'soldier_id' => 143, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-29 16:03:04', + 'end_date' => '2025-07-29 21:03:04', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 876, + 'soldier_id' => 143, + 'constraint_type' => 'School', + 'start_date' => '2025-07-18 19:49:58', + 'end_date' => '2025-07-18 20:49:58', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 877, + 'soldier_id' => 143, + 'constraint_type' => 'School', + 'start_date' => '2025-07-28 22:41:12', + 'end_date' => '2025-07-28 23:41:12', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 878, + 'soldier_id' => 126, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-08 04:32:51', + 'end_date' => '2025-07-08 07:32:51', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 879, + 'soldier_id' => 126, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-02 00:36:57', + 'end_date' => '2025-07-02 02:36:57', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 880, + 'soldier_id' => 126, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-02 08:45:42', + 'end_date' => '2025-07-02 12:45:42', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 881, + 'soldier_id' => 126, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-13 05:52:14', + 'end_date' => '2025-07-13 08:52:14', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 882, + 'soldier_id' => 126, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-17 09:02:50', + 'end_date' => '2025-07-17 10:02:50', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 883, + 'soldier_id' => 126, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-20 23:01:29', + 'end_date' => '2025-07-21 02:01:29', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 884, + 'soldier_id' => 126, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-24 03:42:01', + 'end_date' => '2025-07-24 06:42:01', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 885, + 'soldier_id' => 126, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-06 20:21:36', + 'end_date' => '2025-07-06 23:21:36', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 886, + 'soldier_id' => 126, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-01 20:17:12', + 'end_date' => '2025-07-01 23:17:12', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 887, + 'soldier_id' => 126, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-29 14:20:12', + 'end_date' => '2025-07-29 17:20:12', + 'created_at' => '2025-05-13T06:41:38.000000Z', + 'updated_at' => '2025-05-13T06:41:38.000000Z', + ], + [ + 'id' => 888, + 'soldier_id' => 126, + 'constraint_type' => 'School', + 'start_date' => '2025-07-28 02:17:19', + 'end_date' => '2025-07-28 03:17:19', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 889, + 'soldier_id' => 126, + 'constraint_type' => 'School', + 'start_date' => '2025-07-21 06:51:57', + 'end_date' => '2025-07-21 07:51:57', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 890, + 'soldier_id' => 126, + 'constraint_type' => 'School', + 'start_date' => '2025-07-07 12:28:44', + 'end_date' => '2025-07-07 16:28:44', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 891, + 'soldier_id' => 126, + 'constraint_type' => 'School', + 'start_date' => '2025-07-18 02:56:32', + 'end_date' => '2025-07-18 07:56:32', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 892, + 'soldier_id' => 46, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-28 01:39:05', + 'end_date' => '2025-07-28 03:39:05', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 893, + 'soldier_id' => 46, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-06 04:44:06', + 'end_date' => '2025-07-06 06:44:06', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 894, + 'soldier_id' => 46, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-20 18:22:02', + 'end_date' => '2025-07-20 19:22:02', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 895, + 'soldier_id' => 46, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-25 10:01:13', + 'end_date' => '2025-07-25 13:01:13', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 896, + 'soldier_id' => 46, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-17 20:49:21', + 'end_date' => '2025-07-17 22:49:21', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 897, + 'soldier_id' => 46, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-07 04:17:45', + 'end_date' => '2025-07-07 08:17:45', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 898, + 'soldier_id' => 46, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-20 04:21:06', + 'end_date' => '2025-07-20 07:21:06', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 899, + 'soldier_id' => 46, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-29 11:46:16', + 'end_date' => '2025-07-29 13:46:16', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 900, + 'soldier_id' => 46, + 'constraint_type' => 'School', + 'start_date' => '2025-07-30 09:11:24', + 'end_date' => '2025-07-30 12:11:24', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 901, + 'soldier_id' => 46, + 'constraint_type' => 'School', + 'start_date' => '2025-07-19 21:03:30', + 'end_date' => '2025-07-20 00:03:30', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 902, + 'soldier_id' => 46, + 'constraint_type' => 'School', + 'start_date' => '2025-07-25 12:25:49', + 'end_date' => '2025-07-25 16:25:49', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 903, + 'soldier_id' => 85, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-06 14:49:54', + 'end_date' => '2025-07-06 19:49:54', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 904, + 'soldier_id' => 85, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-28 00:20:50', + 'end_date' => '2025-07-28 02:20:50', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 905, + 'soldier_id' => 85, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-17 04:43:12', + 'end_date' => '2025-07-17 09:43:12', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 906, + 'soldier_id' => 85, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-11 13:06:46', + 'end_date' => '2025-07-11 15:06:46', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 907, + 'soldier_id' => 85, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-04 23:01:37', + 'end_date' => '2025-07-05 03:01:37', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 908, + 'soldier_id' => 85, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-03 05:53:36', + 'end_date' => '2025-07-03 06:53:36', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 909, + 'soldier_id' => 85, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-19 20:20:10', + 'end_date' => '2025-07-19 21:20:10', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 910, + 'soldier_id' => 85, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-22 20:00:53', + 'end_date' => '2025-07-23 01:00:53', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 911, + 'soldier_id' => 85, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-22 08:23:07', + 'end_date' => '2025-07-22 11:23:07', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 912, + 'soldier_id' => 85, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-24 08:16:34', + 'end_date' => '2025-07-24 13:16:34', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 913, + 'soldier_id' => 85, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-10 03:37:42', + 'end_date' => '2025-07-10 08:37:42', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 914, + 'soldier_id' => 85, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-24 10:18:54', + 'end_date' => '2025-07-24 15:18:54', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 915, + 'soldier_id' => 85, + 'constraint_type' => 'School', + 'start_date' => '2025-07-09 20:18:07', + 'end_date' => '2025-07-10 00:18:07', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 916, + 'soldier_id' => 85, + 'constraint_type' => 'School', + 'start_date' => '2025-07-06 07:20:17', + 'end_date' => '2025-07-06 10:20:17', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 917, + 'soldier_id' => 60, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-08 19:57:23', + 'end_date' => '2025-07-08 23:57:23', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 918, + 'soldier_id' => 60, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-08 08:04:00', + 'end_date' => '2025-07-08 09:04:00', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 919, + 'soldier_id' => 60, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-05 01:18:13', + 'end_date' => '2025-07-05 03:18:13', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 920, + 'soldier_id' => 60, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-27 20:55:21', + 'end_date' => '2025-07-28 01:55:21', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 921, + 'soldier_id' => 60, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-02 03:43:55', + 'end_date' => '2025-07-02 05:43:55', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 922, + 'soldier_id' => 60, + 'constraint_type' => 'School', + 'start_date' => '2025-07-20 13:46:17', + 'end_date' => '2025-07-20 17:46:17', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 923, + 'soldier_id' => 60, + 'constraint_type' => 'School', + 'start_date' => '2025-07-08 06:39:32', + 'end_date' => '2025-07-08 11:39:32', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 924, + 'soldier_id' => 60, + 'constraint_type' => 'School', + 'start_date' => '2025-07-27 17:49:21', + 'end_date' => '2025-07-27 18:49:21', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 925, + 'soldier_id' => 60, + 'constraint_type' => 'School', + 'start_date' => '2025-07-18 00:36:07', + 'end_date' => '2025-07-18 01:36:07', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 926, + 'soldier_id' => 75, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-21 13:20:54', + 'end_date' => '2025-07-21 14:20:54', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 927, + 'soldier_id' => 75, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-01 12:28:52', + 'end_date' => '2025-07-01 13:28:52', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 928, + 'soldier_id' => 75, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-15 08:24:14', + 'end_date' => '2025-07-15 12:24:14', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 929, + 'soldier_id' => 75, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-12 00:10:07', + 'end_date' => '2025-07-12 04:10:07', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 930, + 'soldier_id' => 75, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-04 17:33:26', + 'end_date' => '2025-07-04 19:33:26', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 931, + 'soldier_id' => 75, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-06 11:05:26', + 'end_date' => '2025-07-06 12:05:26', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 932, + 'soldier_id' => 75, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-23 20:43:02', + 'end_date' => '2025-07-23 23:43:02', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 933, + 'soldier_id' => 75, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-27 07:49:18', + 'end_date' => '2025-07-27 10:49:18', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 934, + 'soldier_id' => 75, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-02 04:24:19', + 'end_date' => '2025-07-02 08:24:19', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 935, + 'soldier_id' => 75, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-20 07:05:33', + 'end_date' => '2025-07-20 11:05:33', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 936, + 'soldier_id' => 75, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-12 06:31:38', + 'end_date' => '2025-07-12 08:31:38', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 937, + 'soldier_id' => 75, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-03 17:22:23', + 'end_date' => '2025-07-03 22:22:23', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 938, + 'soldier_id' => 75, + 'constraint_type' => 'School', + 'start_date' => '2025-07-12 04:13:01', + 'end_date' => '2025-07-12 09:13:01', + 'created_at' => '2025-05-13T06:41:39.000000Z', + 'updated_at' => '2025-05-13T06:41:39.000000Z', + ], + [ + 'id' => 939, + 'soldier_id' => 75, + 'constraint_type' => 'School', + 'start_date' => '2025-07-16 05:32:40', + 'end_date' => '2025-07-16 07:32:40', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 940, + 'soldier_id' => 75, + 'constraint_type' => 'School', + 'start_date' => '2025-07-16 15:48:03', + 'end_date' => '2025-07-16 16:48:03', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 941, + 'soldier_id' => 15, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-06 12:32:16', + 'end_date' => '2025-07-06 17:32:16', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 942, + 'soldier_id' => 15, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-03 18:32:50', + 'end_date' => '2025-07-03 20:32:50', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 943, + 'soldier_id' => 15, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-19 13:39:13', + 'end_date' => '2025-07-19 18:39:13', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 944, + 'soldier_id' => 15, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-22 03:07:12', + 'end_date' => '2025-07-22 06:07:12', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 945, + 'soldier_id' => 15, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-08 22:17:19', + 'end_date' => '2025-07-09 02:17:19', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 946, + 'soldier_id' => 15, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-07 20:31:37', + 'end_date' => '2025-07-08 01:31:37', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 947, + 'soldier_id' => 15, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-12 20:59:00', + 'end_date' => '2025-07-13 01:59:00', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 948, + 'soldier_id' => 15, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-29 14:16:49', + 'end_date' => '2025-07-29 17:16:49', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 949, + 'soldier_id' => 15, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-08 23:46:02', + 'end_date' => '2025-07-09 00:46:02', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 950, + 'soldier_id' => 15, + 'constraint_type' => 'School', + 'start_date' => '2025-07-29 07:59:35', + 'end_date' => '2025-07-29 08:59:35', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 951, + 'soldier_id' => 15, + 'constraint_type' => 'School', + 'start_date' => '2025-07-05 18:06:31', + 'end_date' => '2025-07-05 20:06:31', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 952, + 'soldier_id' => 4, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-07 13:04:24', + 'end_date' => '2025-07-07 16:04:24', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 953, + 'soldier_id' => 4, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-03 09:19:31', + 'end_date' => '2025-07-03 10:19:31', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 954, + 'soldier_id' => 4, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-12 12:31:38', + 'end_date' => '2025-07-12 15:31:38', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 955, + 'soldier_id' => 4, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-05 20:21:21', + 'end_date' => '2025-07-05 22:21:21', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 956, + 'soldier_id' => 4, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-24 01:59:42', + 'end_date' => '2025-07-24 06:59:42', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 957, + 'soldier_id' => 4, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-21 20:07:55', + 'end_date' => '2025-07-21 23:07:55', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 958, + 'soldier_id' => 4, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-12 01:19:42', + 'end_date' => '2025-07-12 02:19:42', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 959, + 'soldier_id' => 4, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-22 18:46:49', + 'end_date' => '2025-07-22 19:46:49', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 960, + 'soldier_id' => 4, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-22 04:40:22', + 'end_date' => '2025-07-22 08:40:22', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 961, + 'soldier_id' => 4, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-22 23:30:59', + 'end_date' => '2025-07-23 00:30:59', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 962, + 'soldier_id' => 4, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-05 07:39:48', + 'end_date' => '2025-07-05 11:39:48', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 963, + 'soldier_id' => 4, + 'constraint_type' => 'School', + 'start_date' => '2025-07-05 21:25:00', + 'end_date' => '2025-07-06 02:25:00', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 964, + 'soldier_id' => 4, + 'constraint_type' => 'School', + 'start_date' => '2025-07-28 20:40:44', + 'end_date' => '2025-07-28 23:40:44', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 965, + 'soldier_id' => 4, + 'constraint_type' => 'School', + 'start_date' => '2025-07-03 05:20:42', + 'end_date' => '2025-07-03 08:20:42', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 966, + 'soldier_id' => 4, + 'constraint_type' => 'School', + 'start_date' => '2025-07-15 10:51:12', + 'end_date' => '2025-07-15 13:51:12', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 967, + 'soldier_id' => 51, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-30 01:42:08', + 'end_date' => '2025-07-30 04:42:08', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 968, + 'soldier_id' => 51, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-26 12:33:20', + 'end_date' => '2025-07-26 13:33:20', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 969, + 'soldier_id' => 51, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-10 14:14:51', + 'end_date' => '2025-07-10 19:14:51', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 970, + 'soldier_id' => 51, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-21 08:26:15', + 'end_date' => '2025-07-21 11:26:15', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 971, + 'soldier_id' => 51, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-24 05:22:26', + 'end_date' => '2025-07-24 08:22:26', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 972, + 'soldier_id' => 51, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-24 20:50:13', + 'end_date' => '2025-07-25 01:50:13', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 973, + 'soldier_id' => 51, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-08 07:11:49', + 'end_date' => '2025-07-08 12:11:49', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 974, + 'soldier_id' => 51, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-08 13:59:38', + 'end_date' => '2025-07-08 14:59:38', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 975, + 'soldier_id' => 51, + 'constraint_type' => 'School', + 'start_date' => '2025-07-26 15:00:07', + 'end_date' => '2025-07-26 18:00:07', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 976, + 'soldier_id' => 51, + 'constraint_type' => 'School', + 'start_date' => '2025-07-21 07:57:01', + 'end_date' => '2025-07-21 10:57:01', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 977, + 'soldier_id' => 51, + 'constraint_type' => 'School', + 'start_date' => '2025-07-14 17:31:33', + 'end_date' => '2025-07-14 22:31:33', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 978, + 'soldier_id' => 34, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-01 14:49:04', + 'end_date' => '2025-07-01 17:49:04', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 979, + 'soldier_id' => 34, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-30 01:58:20', + 'end_date' => '2025-07-30 06:58:20', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 980, + 'soldier_id' => 34, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-08 11:24:53', + 'end_date' => '2025-07-08 14:24:53', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 981, + 'soldier_id' => 34, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-02 07:18:03', + 'end_date' => '2025-07-02 11:18:03', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 982, + 'soldier_id' => 34, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-12 21:51:59', + 'end_date' => '2025-07-12 23:51:59', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 983, + 'soldier_id' => 34, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-02 03:07:47', + 'end_date' => '2025-07-02 07:07:47', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 984, + 'soldier_id' => 34, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-19 00:28:05', + 'end_date' => '2025-07-19 02:28:05', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 985, + 'soldier_id' => 34, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-29 18:33:24', + 'end_date' => '2025-07-29 22:33:24', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 986, + 'soldier_id' => 34, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-05 09:16:42', + 'end_date' => '2025-07-05 12:16:42', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 987, + 'soldier_id' => 34, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-12 14:51:34', + 'end_date' => '2025-07-12 18:51:34', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 988, + 'soldier_id' => 134, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-28 00:50:25', + 'end_date' => '2025-07-28 05:50:25', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 989, + 'soldier_id' => 134, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-28 19:05:32', + 'end_date' => '2025-07-28 21:05:32', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 990, + 'soldier_id' => 134, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-11 13:19:17', + 'end_date' => '2025-07-11 16:19:17', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 991, + 'soldier_id' => 134, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-13 16:27:32', + 'end_date' => '2025-07-13 19:27:32', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 992, + 'soldier_id' => 134, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-01 16:00:53', + 'end_date' => '2025-07-01 21:00:53', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 993, + 'soldier_id' => 134, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-09 20:10:27', + 'end_date' => '2025-07-10 00:10:27', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 994, + 'soldier_id' => 134, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-27 20:59:08', + 'end_date' => '2025-07-28 00:59:08', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 995, + 'soldier_id' => 134, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-07 03:27:40', + 'end_date' => '2025-07-07 06:27:40', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 996, + 'soldier_id' => 134, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-27 04:30:07', + 'end_date' => '2025-07-27 06:30:07', + 'created_at' => '2025-05-13T06:41:40.000000Z', + 'updated_at' => '2025-05-13T06:41:40.000000Z', + ], + [ + 'id' => 997, + 'soldier_id' => 134, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-12 01:14:17', + 'end_date' => '2025-07-12 03:14:17', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 998, + 'soldier_id' => 134, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-06 05:39:30', + 'end_date' => '2025-07-06 08:39:30', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 999, + 'soldier_id' => 134, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-04 04:45:22', + 'end_date' => '2025-07-04 07:45:22', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1000, + 'soldier_id' => 134, + 'constraint_type' => 'School', + 'start_date' => '2025-07-25 06:43:49', + 'end_date' => '2025-07-25 11:43:49', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1001, + 'soldier_id' => 137, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-20 20:33:41', + 'end_date' => '2025-07-21 00:33:41', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1002, + 'soldier_id' => 137, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-02 09:37:42', + 'end_date' => '2025-07-02 12:37:42', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1003, + 'soldier_id' => 137, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-06 01:57:31', + 'end_date' => '2025-07-06 06:57:31', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1004, + 'soldier_id' => 137, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-22 07:20:47', + 'end_date' => '2025-07-22 12:20:47', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1005, + 'soldier_id' => 137, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-17 00:40:09', + 'end_date' => '2025-07-17 04:40:09', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1006, + 'soldier_id' => 137, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-07 20:37:13', + 'end_date' => '2025-07-08 00:37:13', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1007, + 'soldier_id' => 137, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-26 09:26:27', + 'end_date' => '2025-07-26 14:26:27', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1008, + 'soldier_id' => 137, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-21 03:34:07', + 'end_date' => '2025-07-21 05:34:07', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1009, + 'soldier_id' => 137, + 'constraint_type' => 'School', + 'start_date' => '2025-07-09 06:24:47', + 'end_date' => '2025-07-09 07:24:47', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1010, + 'soldier_id' => 137, + 'constraint_type' => 'School', + 'start_date' => '2025-07-12 23:26:29', + 'end_date' => '2025-07-13 03:26:29', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1011, + 'soldier_id' => 137, + 'constraint_type' => 'School', + 'start_date' => '2025-07-08 01:32:21', + 'end_date' => '2025-07-08 02:32:21', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1012, + 'soldier_id' => 105, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-07 15:06:47', + 'end_date' => '2025-07-07 18:06:47', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1013, + 'soldier_id' => 105, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-22 15:35:25', + 'end_date' => '2025-07-22 17:35:25', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1014, + 'soldier_id' => 105, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-23 15:06:16', + 'end_date' => '2025-07-23 18:06:16', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1015, + 'soldier_id' => 105, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-23 11:32:25', + 'end_date' => '2025-07-23 15:32:25', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1016, + 'soldier_id' => 105, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-07 22:07:13', + 'end_date' => '2025-07-08 00:07:13', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1017, + 'soldier_id' => 105, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-14 20:11:10', + 'end_date' => '2025-07-14 22:11:10', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1018, + 'soldier_id' => 105, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-03 06:10:20', + 'end_date' => '2025-07-03 10:10:20', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1019, + 'soldier_id' => 105, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-01 20:23:49', + 'end_date' => '2025-07-01 23:23:49', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1020, + 'soldier_id' => 105, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-12 20:02:54', + 'end_date' => '2025-07-13 00:02:54', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1021, + 'soldier_id' => 105, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-15 09:06:59', + 'end_date' => '2025-07-15 12:06:59', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1022, + 'soldier_id' => 105, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-22 21:43:06', + 'end_date' => '2025-07-23 02:43:06', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1023, + 'soldier_id' => 11, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-06 00:26:09', + 'end_date' => '2025-07-06 05:26:09', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1024, + 'soldier_id' => 11, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-23 02:08:05', + 'end_date' => '2025-07-23 06:08:05', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1025, + 'soldier_id' => 11, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-02 12:48:48', + 'end_date' => '2025-07-02 17:48:48', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1026, + 'soldier_id' => 11, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-15 06:22:16', + 'end_date' => '2025-07-15 10:22:16', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1027, + 'soldier_id' => 11, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-21 23:21:01', + 'end_date' => '2025-07-22 04:21:01', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1028, + 'soldier_id' => 11, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-13 20:36:55', + 'end_date' => '2025-07-13 22:36:55', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1029, + 'soldier_id' => 11, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-10 07:03:07', + 'end_date' => '2025-07-10 12:03:07', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1030, + 'soldier_id' => 11, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-01 12:30:14', + 'end_date' => '2025-07-01 15:30:14', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1031, + 'soldier_id' => 11, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-20 21:43:25', + 'end_date' => '2025-07-21 02:43:25', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1032, + 'soldier_id' => 11, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-27 06:54:14', + 'end_date' => '2025-07-27 11:54:14', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1033, + 'soldier_id' => 11, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-29 16:21:52', + 'end_date' => '2025-07-29 17:21:52', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1034, + 'soldier_id' => 11, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-22 07:59:57', + 'end_date' => '2025-07-22 12:59:57', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1035, + 'soldier_id' => 11, + 'constraint_type' => 'School', + 'start_date' => '2025-07-24 11:30:15', + 'end_date' => '2025-07-24 13:30:15', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1036, + 'soldier_id' => 11, + 'constraint_type' => 'School', + 'start_date' => '2025-07-06 21:22:13', + 'end_date' => '2025-07-07 00:22:13', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1037, + 'soldier_id' => 11, + 'constraint_type' => 'School', + 'start_date' => '2025-07-02 17:53:36', + 'end_date' => '2025-07-02 18:53:36', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1038, + 'soldier_id' => 11, + 'constraint_type' => 'School', + 'start_date' => '2025-07-01 08:39:53', + 'end_date' => '2025-07-01 11:39:53', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1039, + 'soldier_id' => 103, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-13 06:33:54', + 'end_date' => '2025-07-13 08:33:54', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1040, + 'soldier_id' => 103, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-26 19:09:57', + 'end_date' => '2025-07-27 00:09:57', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1041, + 'soldier_id' => 103, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-30 23:11:16', + 'end_date' => '2025-08-01 04:11:16', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1042, + 'soldier_id' => 103, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-28 16:41:41', + 'end_date' => '2025-07-28 20:41:41', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1043, + 'soldier_id' => 103, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-29 20:03:12', + 'end_date' => '2025-07-30 00:03:12', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1044, + 'soldier_id' => 103, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-12 20:02:20', + 'end_date' => '2025-07-12 22:02:20', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1045, + 'soldier_id' => 103, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-16 01:55:26', + 'end_date' => '2025-07-16 03:55:26', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1046, + 'soldier_id' => 103, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-07 05:07:56', + 'end_date' => '2025-07-07 07:07:56', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1047, + 'soldier_id' => 103, + 'constraint_type' => 'School', + 'start_date' => '2025-07-30 11:19:30', + 'end_date' => '2025-07-30 12:19:30', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1048, + 'soldier_id' => 103, + 'constraint_type' => 'School', + 'start_date' => '2025-07-02 04:03:08', + 'end_date' => '2025-07-02 08:03:08', + 'created_at' => '2025-05-13T06:41:41.000000Z', + 'updated_at' => '2025-05-13T06:41:41.000000Z', + ], + [ + 'id' => 1049, + 'soldier_id' => 102, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-06 09:40:57', + 'end_date' => '2025-07-06 14:40:57', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1050, + 'soldier_id' => 102, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-20 17:50:48', + 'end_date' => '2025-07-20 21:50:48', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1051, + 'soldier_id' => 102, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-22 06:18:04', + 'end_date' => '2025-07-22 09:18:04', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1052, + 'soldier_id' => 102, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-06 11:55:59', + 'end_date' => '2025-07-06 12:55:59', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1053, + 'soldier_id' => 53, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-28 02:44:11', + 'end_date' => '2025-07-28 07:44:11', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1054, + 'soldier_id' => 53, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-13 19:33:39', + 'end_date' => '2025-07-13 20:33:39', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1055, + 'soldier_id' => 53, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-23 23:12:44', + 'end_date' => '2025-07-24 04:12:44', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1056, + 'soldier_id' => 53, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-25 08:09:04', + 'end_date' => '2025-07-25 09:09:04', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1057, + 'soldier_id' => 53, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-12 05:20:13', + 'end_date' => '2025-07-12 06:20:13', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1058, + 'soldier_id' => 53, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-03 20:41:19', + 'end_date' => '2025-07-04 01:41:19', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1059, + 'soldier_id' => 53, + 'constraint_type' => 'School', + 'start_date' => '2025-07-07 00:24:35', + 'end_date' => '2025-07-07 01:24:35', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1060, + 'soldier_id' => 53, + 'constraint_type' => 'School', + 'start_date' => '2025-07-18 11:36:26', + 'end_date' => '2025-07-18 14:36:26', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1061, + 'soldier_id' => 118, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-21 21:41:42', + 'end_date' => '2025-07-21 22:41:42', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1062, + 'soldier_id' => 118, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-02 16:10:11', + 'end_date' => '2025-07-02 21:10:11', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1063, + 'soldier_id' => 118, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-16 05:01:36', + 'end_date' => '2025-07-16 09:01:36', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1064, + 'soldier_id' => 118, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-11 00:20:58', + 'end_date' => '2025-07-11 05:20:58', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1065, + 'soldier_id' => 118, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-09 09:37:35', + 'end_date' => '2025-07-09 11:37:35', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1066, + 'soldier_id' => 118, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-18 12:40:59', + 'end_date' => '2025-07-18 14:40:59', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1067, + 'soldier_id' => 118, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-04 00:54:07', + 'end_date' => '2025-07-04 02:54:07', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1068, + 'soldier_id' => 118, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-11 20:38:46', + 'end_date' => '2025-07-12 01:38:46', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1069, + 'soldier_id' => 118, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-11 20:15:15', + 'end_date' => '2025-07-11 22:15:15', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1070, + 'soldier_id' => 118, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-05 06:54:34', + 'end_date' => '2025-07-05 07:54:34', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1071, + 'soldier_id' => 118, + 'constraint_type' => 'School', + 'start_date' => '2025-07-06 23:15:50', + 'end_date' => '2025-07-07 03:15:50', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1072, + 'soldier_id' => 118, + 'constraint_type' => 'School', + 'start_date' => '2025-07-22 01:11:07', + 'end_date' => '2025-07-22 02:11:07', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1073, + 'soldier_id' => 118, + 'constraint_type' => 'School', + 'start_date' => '2025-07-11 12:47:41', + 'end_date' => '2025-07-11 13:47:41', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1074, + 'soldier_id' => 71, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-07 23:00:53', + 'end_date' => '2025-07-08 01:00:53', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1075, + 'soldier_id' => 71, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-18 05:43:59', + 'end_date' => '2025-07-18 09:43:59', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1076, + 'soldier_id' => 71, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-18 06:14:58', + 'end_date' => '2025-07-18 07:14:58', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1077, + 'soldier_id' => 71, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-16 06:27:50', + 'end_date' => '2025-07-16 08:27:50', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1078, + 'soldier_id' => 71, + 'constraint_type' => 'School', + 'start_date' => '2025-07-26 12:40:22', + 'end_date' => '2025-07-26 16:40:22', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1079, + 'soldier_id' => 71, + 'constraint_type' => 'School', + 'start_date' => '2025-07-20 07:28:03', + 'end_date' => '2025-07-20 12:28:03', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1080, + 'soldier_id' => 100, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-20 10:43:23', + 'end_date' => '2025-07-20 12:43:23', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1081, + 'soldier_id' => 100, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-13 21:56:19', + 'end_date' => '2025-07-13 22:56:19', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1082, + 'soldier_id' => 100, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-12 01:13:37', + 'end_date' => '2025-07-12 02:13:37', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1083, + 'soldier_id' => 100, + 'constraint_type' => 'School', + 'start_date' => '2025-07-20 03:03:20', + 'end_date' => '2025-07-20 05:03:20', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1084, + 'soldier_id' => 100, + 'constraint_type' => 'School', + 'start_date' => '2025-07-12 22:27:01', + 'end_date' => '2025-07-13 01:27:01', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1085, + 'soldier_id' => 100, + 'constraint_type' => 'School', + 'start_date' => '2025-07-11 00:47:54', + 'end_date' => '2025-07-11 05:47:54', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1086, + 'soldier_id' => 77, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-28 23:10:50', + 'end_date' => '2025-07-29 00:10:50', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1087, + 'soldier_id' => 77, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-27 11:18:20', + 'end_date' => '2025-07-27 15:18:20', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1088, + 'soldier_id' => 77, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-24 10:49:56', + 'end_date' => '2025-07-24 11:49:56', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1089, + 'soldier_id' => 77, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-19 04:44:28', + 'end_date' => '2025-07-19 09:44:28', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1090, + 'soldier_id' => 77, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-29 01:25:37', + 'end_date' => '2025-07-29 04:25:37', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1091, + 'soldier_id' => 77, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-24 20:21:55', + 'end_date' => '2025-07-24 21:21:55', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1092, + 'soldier_id' => 77, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-05 03:28:18', + 'end_date' => '2025-07-05 05:28:18', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1093, + 'soldier_id' => 77, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-22 14:05:54', + 'end_date' => '2025-07-22 19:05:54', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1094, + 'soldier_id' => 77, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-16 18:33:36', + 'end_date' => '2025-07-16 23:33:36', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1095, + 'soldier_id' => 77, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-16 16:43:03', + 'end_date' => '2025-07-16 20:43:03', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1096, + 'soldier_id' => 77, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-12 20:52:51', + 'end_date' => '2025-07-12 21:52:51', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1097, + 'soldier_id' => 77, + 'constraint_type' => 'School', + 'start_date' => '2025-07-19 04:00:58', + 'end_date' => '2025-07-19 05:00:58', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1098, + 'soldier_id' => 77, + 'constraint_type' => 'School', + 'start_date' => '2025-07-11 21:30:33', + 'end_date' => '2025-07-12 02:30:33', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1099, + 'soldier_id' => 77, + 'constraint_type' => 'School', + 'start_date' => '2025-07-20 18:51:23', + 'end_date' => '2025-07-20 22:51:23', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1100, + 'soldier_id' => 147, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-27 13:33:50', + 'end_date' => '2025-07-27 14:33:50', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1101, + 'soldier_id' => 147, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-25 14:02:09', + 'end_date' => '2025-07-25 15:02:09', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1102, + 'soldier_id' => 147, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-05 06:05:50', + 'end_date' => '2025-07-05 08:05:50', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1103, + 'soldier_id' => 147, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-05 09:20:29', + 'end_date' => '2025-07-05 11:20:29', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1104, + 'soldier_id' => 147, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-02 09:20:35', + 'end_date' => '2025-07-02 12:20:35', + 'created_at' => '2025-05-13T06:41:42.000000Z', + 'updated_at' => '2025-05-13T06:41:42.000000Z', + ], + [ + 'id' => 1105, + 'soldier_id' => 147, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-05 01:40:48', + 'end_date' => '2025-07-05 02:40:48', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1106, + 'soldier_id' => 147, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-12 20:28:53', + 'end_date' => '2025-07-12 21:28:53', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1107, + 'soldier_id' => 147, + 'constraint_type' => 'School', + 'start_date' => '2025-07-15 09:12:11', + 'end_date' => '2025-07-15 11:12:11', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1108, + 'soldier_id' => 92, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-27 20:16:41', + 'end_date' => '2025-07-28 01:16:41', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1109, + 'soldier_id' => 92, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-18 22:52:34', + 'end_date' => '2025-07-19 01:52:34', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1110, + 'soldier_id' => 92, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-27 15:21:04', + 'end_date' => '2025-07-27 20:21:04', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1111, + 'soldier_id' => 92, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-28 19:43:42', + 'end_date' => '2025-07-28 21:43:42', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1112, + 'soldier_id' => 92, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-13 20:09:31', + 'end_date' => '2025-07-14 01:09:31', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1113, + 'soldier_id' => 92, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-28 23:48:47', + 'end_date' => '2025-07-29 01:48:47', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1114, + 'soldier_id' => 92, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-15 08:07:24', + 'end_date' => '2025-07-15 10:07:24', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1115, + 'soldier_id' => 92, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-17 15:49:10', + 'end_date' => '2025-07-17 16:49:10', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1116, + 'soldier_id' => 92, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-17 22:27:49', + 'end_date' => '2025-07-18 00:27:49', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1117, + 'soldier_id' => 92, + 'constraint_type' => 'School', + 'start_date' => '2025-07-26 07:59:19', + 'end_date' => '2025-07-26 11:59:19', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1118, + 'soldier_id' => 92, + 'constraint_type' => 'School', + 'start_date' => '2025-07-30 20:36:48', + 'end_date' => '2025-08-01 01:36:48', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1119, + 'soldier_id' => 92, + 'constraint_type' => 'School', + 'start_date' => '2025-07-09 18:09:54', + 'end_date' => '2025-07-09 23:09:54', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1120, + 'soldier_id' => 92, + 'constraint_type' => 'School', + 'start_date' => '2025-07-16 08:13:21', + 'end_date' => '2025-07-16 11:13:21', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1121, + 'soldier_id' => 149, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-21 20:45:27', + 'end_date' => '2025-07-21 21:45:27', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1122, + 'soldier_id' => 149, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-29 05:48:27', + 'end_date' => '2025-07-29 07:48:27', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1123, + 'soldier_id' => 149, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-30 21:26:15', + 'end_date' => '2025-08-01 01:26:15', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1124, + 'soldier_id' => 149, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-02 20:16:22', + 'end_date' => '2025-07-02 23:16:22', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1125, + 'soldier_id' => 149, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-06 20:49:59', + 'end_date' => '2025-07-07 00:49:59', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1126, + 'soldier_id' => 149, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-03 20:13:18', + 'end_date' => '2025-07-04 01:13:18', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1127, + 'soldier_id' => 149, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-26 20:15:50', + 'end_date' => '2025-07-26 21:15:50', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1128, + 'soldier_id' => 149, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-29 08:11:51', + 'end_date' => '2025-07-29 11:11:51', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1129, + 'soldier_id' => 149, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-18 13:01:12', + 'end_date' => '2025-07-18 15:01:12', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1130, + 'soldier_id' => 149, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-28 03:46:09', + 'end_date' => '2025-07-28 07:46:09', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1131, + 'soldier_id' => 149, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-23 07:07:39', + 'end_date' => '2025-07-23 09:07:39', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1132, + 'soldier_id' => 149, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-08 06:35:28', + 'end_date' => '2025-07-08 11:35:28', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1133, + 'soldier_id' => 149, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-24 23:40:30', + 'end_date' => '2025-07-25 02:40:30', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1134, + 'soldier_id' => 149, + 'constraint_type' => 'School', + 'start_date' => '2025-07-17 11:31:55', + 'end_date' => '2025-07-17 14:31:55', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1135, + 'soldier_id' => 149, + 'constraint_type' => 'School', + 'start_date' => '2025-07-26 09:58:18', + 'end_date' => '2025-07-26 10:58:18', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1136, + 'soldier_id' => 149, + 'constraint_type' => 'School', + 'start_date' => '2025-07-19 05:00:13', + 'end_date' => '2025-07-19 07:00:13', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1137, + 'soldier_id' => 149, + 'constraint_type' => 'School', + 'start_date' => '2025-07-18 18:55:19', + 'end_date' => '2025-07-18 20:55:19', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1138, + 'soldier_id' => 12, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-24 13:22:54', + 'end_date' => '2025-07-24 18:22:54', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1139, + 'soldier_id' => 12, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-23 02:30:06', + 'end_date' => '2025-07-23 05:30:06', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1140, + 'soldier_id' => 12, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-04 22:06:19', + 'end_date' => '2025-07-04 23:06:19', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1141, + 'soldier_id' => 12, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-19 02:16:37', + 'end_date' => '2025-07-19 07:16:37', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1142, + 'soldier_id' => 12, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-12 04:22:07', + 'end_date' => '2025-07-12 06:22:07', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1143, + 'soldier_id' => 12, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-01 11:34:25', + 'end_date' => '2025-07-01 13:34:25', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1144, + 'soldier_id' => 12, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-21 01:16:34', + 'end_date' => '2025-07-21 06:16:34', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1145, + 'soldier_id' => 12, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-25 18:15:47', + 'end_date' => '2025-07-25 21:15:47', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1146, + 'soldier_id' => 12, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-12 05:43:20', + 'end_date' => '2025-07-12 06:43:20', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1147, + 'soldier_id' => 12, + 'constraint_type' => 'School', + 'start_date' => '2025-07-20 01:39:26', + 'end_date' => '2025-07-20 04:39:26', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1148, + 'soldier_id' => 114, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-20 16:20:35', + 'end_date' => '2025-07-20 20:20:35', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1149, + 'soldier_id' => 114, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-19 01:54:07', + 'end_date' => '2025-07-19 05:54:07', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1150, + 'soldier_id' => 114, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-01 22:12:55', + 'end_date' => '2025-07-02 01:12:55', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1151, + 'soldier_id' => 114, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-19 20:52:55', + 'end_date' => '2025-07-20 00:52:55', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1152, + 'soldier_id' => 114, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-06 02:03:32', + 'end_date' => '2025-07-06 05:03:32', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1153, + 'soldier_id' => 114, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-08 20:55:25', + 'end_date' => '2025-07-08 21:55:25', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1154, + 'soldier_id' => 114, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-23 22:40:43', + 'end_date' => '2025-07-24 01:40:43', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1155, + 'soldier_id' => 114, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-01 08:12:26', + 'end_date' => '2025-07-01 12:12:26', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1156, + 'soldier_id' => 114, + 'constraint_type' => 'School', + 'start_date' => '2025-07-18 22:57:42', + 'end_date' => '2025-07-19 03:57:42', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1157, + 'soldier_id' => 114, + 'constraint_type' => 'School', + 'start_date' => '2025-07-25 15:21:47', + 'end_date' => '2025-07-25 20:21:47', + 'created_at' => '2025-05-13T06:41:43.000000Z', + 'updated_at' => '2025-05-13T06:41:43.000000Z', + ], + [ + 'id' => 1158, + 'soldier_id' => 114, + 'constraint_type' => 'School', + 'start_date' => '2025-07-04 20:48:37', + 'end_date' => '2025-07-05 01:48:37', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1159, + 'soldier_id' => 16, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-13 14:30:53', + 'end_date' => '2025-07-13 17:30:53', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1160, + 'soldier_id' => 16, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-13 12:46:22', + 'end_date' => '2025-07-13 13:46:22', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1161, + 'soldier_id' => 16, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-09 15:20:32', + 'end_date' => '2025-07-09 17:20:32', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1162, + 'soldier_id' => 16, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-19 11:48:36', + 'end_date' => '2025-07-19 15:48:36', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1163, + 'soldier_id' => 16, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-27 18:21:15', + 'end_date' => '2025-07-27 20:21:15', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1164, + 'soldier_id' => 16, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-26 02:49:46', + 'end_date' => '2025-07-26 07:49:46', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1165, + 'soldier_id' => 16, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-15 20:45:06', + 'end_date' => '2025-07-15 21:45:06', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1166, + 'soldier_id' => 16, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-23 07:00:15', + 'end_date' => '2025-07-23 09:00:15', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1167, + 'soldier_id' => 16, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-27 01:09:52', + 'end_date' => '2025-07-27 04:09:52', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1168, + 'soldier_id' => 16, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-29 06:03:28', + 'end_date' => '2025-07-29 09:03:28', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1169, + 'soldier_id' => 16, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-19 06:36:18', + 'end_date' => '2025-07-19 07:36:18', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1170, + 'soldier_id' => 16, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-17 17:36:48', + 'end_date' => '2025-07-17 18:36:48', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1171, + 'soldier_id' => 16, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-22 07:35:52', + 'end_date' => '2025-07-22 12:35:52', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1172, + 'soldier_id' => 16, + 'constraint_type' => 'School', + 'start_date' => '2025-07-12 09:00:40', + 'end_date' => '2025-07-12 14:00:40', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1173, + 'soldier_id' => 16, + 'constraint_type' => 'School', + 'start_date' => '2025-07-20 08:38:35', + 'end_date' => '2025-07-20 13:38:35', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1174, + 'soldier_id' => 16, + 'constraint_type' => 'School', + 'start_date' => '2025-07-30 17:23:08', + 'end_date' => '2025-07-30 19:23:08', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1175, + 'soldier_id' => 16, + 'constraint_type' => 'School', + 'start_date' => '2025-07-10 14:18:07', + 'end_date' => '2025-07-10 17:18:07', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1176, + 'soldier_id' => 101, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-28 19:12:26', + 'end_date' => '2025-07-29 00:12:26', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1177, + 'soldier_id' => 101, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-03 11:25:41', + 'end_date' => '2025-07-03 12:25:41', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1178, + 'soldier_id' => 101, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-16 15:49:21', + 'end_date' => '2025-07-16 19:49:21', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1179, + 'soldier_id' => 101, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-25 05:11:31', + 'end_date' => '2025-07-25 10:11:31', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1180, + 'soldier_id' => 101, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-17 06:13:47', + 'end_date' => '2025-07-17 11:13:47', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1181, + 'soldier_id' => 101, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-01 03:38:25', + 'end_date' => '2025-07-01 08:38:25', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1182, + 'soldier_id' => 101, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-03 20:26:18', + 'end_date' => '2025-07-03 21:26:18', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1183, + 'soldier_id' => 101, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-21 06:40:57', + 'end_date' => '2025-07-21 11:40:57', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1184, + 'soldier_id' => 101, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-23 20:48:48', + 'end_date' => '2025-07-24 01:48:48', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1185, + 'soldier_id' => 101, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-05 20:01:51', + 'end_date' => '2025-07-05 23:01:51', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1186, + 'soldier_id' => 101, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-12 04:51:35', + 'end_date' => '2025-07-12 05:51:35', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1187, + 'soldier_id' => 101, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-29 13:15:57', + 'end_date' => '2025-07-29 16:15:57', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1188, + 'soldier_id' => 101, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-17 15:13:11', + 'end_date' => '2025-07-17 18:13:11', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1189, + 'soldier_id' => 101, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-10 14:26:42', + 'end_date' => '2025-07-10 15:26:42', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1190, + 'soldier_id' => 101, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-09 00:05:07', + 'end_date' => '2025-07-09 05:05:07', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1191, + 'soldier_id' => 101, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-07 06:28:41', + 'end_date' => '2025-07-07 08:28:41', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1192, + 'soldier_id' => 13, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-27 14:36:15', + 'end_date' => '2025-07-27 18:36:15', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1193, + 'soldier_id' => 13, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-26 08:23:26', + 'end_date' => '2025-07-26 13:23:26', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1194, + 'soldier_id' => 13, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-06 20:48:43', + 'end_date' => '2025-07-07 00:48:43', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1195, + 'soldier_id' => 13, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-29 08:04:53', + 'end_date' => '2025-07-29 12:04:53', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1196, + 'soldier_id' => 13, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-02 04:51:16', + 'end_date' => '2025-07-02 07:51:16', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1197, + 'soldier_id' => 13, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-11 16:56:39', + 'end_date' => '2025-07-11 19:56:39', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1198, + 'soldier_id' => 13, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-22 20:51:22', + 'end_date' => '2025-07-23 01:51:22', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1199, + 'soldier_id' => 13, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-12 04:32:41', + 'end_date' => '2025-07-12 09:32:41', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1200, + 'soldier_id' => 13, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-23 12:34:02', + 'end_date' => '2025-07-23 17:34:02', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1201, + 'soldier_id' => 13, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-07 12:05:51', + 'end_date' => '2025-07-07 16:05:51', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1202, + 'soldier_id' => 13, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-21 17:51:16', + 'end_date' => '2025-07-21 18:51:16', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1203, + 'soldier_id' => 13, + 'constraint_type' => 'School', + 'start_date' => '2025-07-10 04:23:53', + 'end_date' => '2025-07-10 09:23:53', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1204, + 'soldier_id' => 13, + 'constraint_type' => 'School', + 'start_date' => '2025-07-03 02:34:49', + 'end_date' => '2025-07-03 03:34:49', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1205, + 'soldier_id' => 13, + 'constraint_type' => 'School', + 'start_date' => '2025-07-04 08:32:13', + 'end_date' => '2025-07-04 12:32:13', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1206, + 'soldier_id' => 13, + 'constraint_type' => 'School', + 'start_date' => '2025-07-12 16:24:08', + 'end_date' => '2025-07-12 21:24:08', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1207, + 'soldier_id' => 112, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-07 01:02:13', + 'end_date' => '2025-07-07 02:02:13', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1208, + 'soldier_id' => 112, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-22 03:33:14', + 'end_date' => '2025-07-22 07:33:14', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1209, + 'soldier_id' => 112, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-01 12:09:01', + 'end_date' => '2025-07-01 14:09:01', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1210, + 'soldier_id' => 112, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-06 06:04:17', + 'end_date' => '2025-07-06 08:04:17', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1211, + 'soldier_id' => 112, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-10 02:29:31', + 'end_date' => '2025-07-10 03:29:31', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1212, + 'soldier_id' => 112, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-14 21:23:52', + 'end_date' => '2025-07-14 23:23:52', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1213, + 'soldier_id' => 112, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-19 20:24:08', + 'end_date' => '2025-07-19 22:24:08', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1214, + 'soldier_id' => 112, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-12 20:21:08', + 'end_date' => '2025-07-12 22:21:08', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1215, + 'soldier_id' => 112, + 'constraint_type' => 'School', + 'start_date' => '2025-07-30 13:07:05', + 'end_date' => '2025-07-30 14:07:05', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1216, + 'soldier_id' => 112, + 'constraint_type' => 'School', + 'start_date' => '2025-07-28 08:15:32', + 'end_date' => '2025-07-28 13:15:32', + 'created_at' => '2025-05-13T06:41:44.000000Z', + 'updated_at' => '2025-05-13T06:41:44.000000Z', + ], + [ + 'id' => 1217, + 'soldier_id' => 127, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-13 13:49:28', + 'end_date' => '2025-07-13 18:49:28', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1218, + 'soldier_id' => 127, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-02 06:35:10', + 'end_date' => '2025-07-02 08:35:10', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1219, + 'soldier_id' => 127, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-13 07:57:00', + 'end_date' => '2025-07-13 12:57:00', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1220, + 'soldier_id' => 127, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-05 20:17:39', + 'end_date' => '2025-07-05 22:17:39', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1221, + 'soldier_id' => 127, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-08 07:02:46', + 'end_date' => '2025-07-08 12:02:46', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1222, + 'soldier_id' => 127, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-15 02:34:30', + 'end_date' => '2025-07-15 07:34:30', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1223, + 'soldier_id' => 127, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-15 20:08:29', + 'end_date' => '2025-07-15 22:08:29', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1224, + 'soldier_id' => 127, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-05 20:56:05', + 'end_date' => '2025-07-06 00:56:05', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1225, + 'soldier_id' => 127, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-08 16:20:07', + 'end_date' => '2025-07-08 20:20:07', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1226, + 'soldier_id' => 127, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-14 07:20:39', + 'end_date' => '2025-07-14 12:20:39', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1227, + 'soldier_id' => 127, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-08 17:39:22', + 'end_date' => '2025-07-08 22:39:22', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1228, + 'soldier_id' => 127, + 'constraint_type' => 'School', + 'start_date' => '2025-07-09 11:12:05', + 'end_date' => '2025-07-09 16:12:05', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1229, + 'soldier_id' => 127, + 'constraint_type' => 'School', + 'start_date' => '2025-07-09 01:02:12', + 'end_date' => '2025-07-09 04:02:12', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1230, + 'soldier_id' => 127, + 'constraint_type' => 'School', + 'start_date' => '2025-07-23 00:43:49', + 'end_date' => '2025-07-23 02:43:49', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1231, + 'soldier_id' => 131, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-30 20:47:58', + 'end_date' => '2025-07-30 22:47:58', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1232, + 'soldier_id' => 131, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-25 20:05:51', + 'end_date' => '2025-07-26 01:05:51', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1233, + 'soldier_id' => 131, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-06 01:12:03', + 'end_date' => '2025-07-06 03:12:03', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1234, + 'soldier_id' => 131, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-10 07:33:35', + 'end_date' => '2025-07-10 08:33:35', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1235, + 'soldier_id' => 131, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-25 20:26:07', + 'end_date' => '2025-07-26 00:26:07', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1236, + 'soldier_id' => 131, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-26 23:10:08', + 'end_date' => '2025-07-27 00:10:08', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1237, + 'soldier_id' => 131, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-26 20:33:05', + 'end_date' => '2025-07-26 21:33:05', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1238, + 'soldier_id' => 131, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-19 23:05:26', + 'end_date' => '2025-07-20 04:05:26', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1239, + 'soldier_id' => 131, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-29 21:15:15', + 'end_date' => '2025-07-30 01:15:15', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1240, + 'soldier_id' => 131, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-08 08:11:30', + 'end_date' => '2025-07-08 11:11:30', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1241, + 'soldier_id' => 131, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-09 23:30:29', + 'end_date' => '2025-07-10 02:30:29', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1242, + 'soldier_id' => 144, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-06 12:40:03', + 'end_date' => '2025-07-06 16:40:03', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1243, + 'soldier_id' => 144, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-20 05:31:48', + 'end_date' => '2025-07-20 10:31:48', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1244, + 'soldier_id' => 144, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-07 17:25:53', + 'end_date' => '2025-07-07 18:25:53', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1245, + 'soldier_id' => 144, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-17 13:44:48', + 'end_date' => '2025-07-17 16:44:48', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1246, + 'soldier_id' => 144, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-04 22:17:34', + 'end_date' => '2025-07-05 00:17:34', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1247, + 'soldier_id' => 144, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-29 03:23:20', + 'end_date' => '2025-07-29 04:23:20', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1248, + 'soldier_id' => 144, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-22 00:42:54', + 'end_date' => '2025-07-22 04:42:54', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1249, + 'soldier_id' => 144, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-10 22:05:58', + 'end_date' => '2025-07-11 02:05:58', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1250, + 'soldier_id' => 144, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-28 21:00:35', + 'end_date' => '2025-07-28 22:00:35', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1251, + 'soldier_id' => 144, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-08 03:16:58', + 'end_date' => '2025-07-08 07:16:58', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1252, + 'soldier_id' => 144, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-24 14:22:20', + 'end_date' => '2025-07-24 17:22:20', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1253, + 'soldier_id' => 144, + 'constraint_type' => 'School', + 'start_date' => '2025-07-03 23:53:24', + 'end_date' => '2025-07-04 04:53:24', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1254, + 'soldier_id' => 164, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-20 20:56:03', + 'end_date' => '2025-07-21 00:56:03', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1255, + 'soldier_id' => 164, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-30 18:47:08', + 'end_date' => '2025-07-30 20:47:08', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1256, + 'soldier_id' => 164, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-24 04:45:21', + 'end_date' => '2025-07-24 09:45:21', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1257, + 'soldier_id' => 164, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-23 10:17:37', + 'end_date' => '2025-07-23 13:17:37', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1258, + 'soldier_id' => 164, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-10 07:46:41', + 'end_date' => '2025-07-10 12:46:41', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1259, + 'soldier_id' => 164, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-26 13:04:55', + 'end_date' => '2025-07-26 15:04:55', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1260, + 'soldier_id' => 164, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-08 23:12:33', + 'end_date' => '2025-07-09 01:12:33', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1261, + 'soldier_id' => 164, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-06 20:38:50', + 'end_date' => '2025-07-06 23:38:50', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1262, + 'soldier_id' => 164, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-07 22:23:42', + 'end_date' => '2025-07-08 02:23:42', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1263, + 'soldier_id' => 164, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-08 20:20:57', + 'end_date' => '2025-07-08 22:20:57', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1264, + 'soldier_id' => 164, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-15 18:04:21', + 'end_date' => '2025-07-15 20:04:21', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1265, + 'soldier_id' => 164, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-30 04:01:22', + 'end_date' => '2025-07-30 05:01:22', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1266, + 'soldier_id' => 164, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-11 15:19:55', + 'end_date' => '2025-07-11 19:19:55', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1267, + 'soldier_id' => 164, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-21 08:12:56', + 'end_date' => '2025-07-21 11:12:56', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1268, + 'soldier_id' => 164, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-20 12:26:11', + 'end_date' => '2025-07-20 13:26:11', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1269, + 'soldier_id' => 40, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-07 19:37:38', + 'end_date' => '2025-07-08 00:37:38', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1270, + 'soldier_id' => 40, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-15 02:55:49', + 'end_date' => '2025-07-15 07:55:49', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1271, + 'soldier_id' => 40, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-25 04:56:27', + 'end_date' => '2025-07-25 09:56:27', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1272, + 'soldier_id' => 40, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-01 06:44:16', + 'end_date' => '2025-07-01 09:44:16', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1273, + 'soldier_id' => 40, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-21 19:46:52', + 'end_date' => '2025-07-21 21:46:52', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1274, + 'soldier_id' => 40, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-18 07:41:34', + 'end_date' => '2025-07-18 08:41:34', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1275, + 'soldier_id' => 40, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-23 20:21:16', + 'end_date' => '2025-07-23 21:21:16', + 'created_at' => '2025-05-13T06:41:45.000000Z', + 'updated_at' => '2025-05-13T06:41:45.000000Z', + ], + [ + 'id' => 1276, + 'soldier_id' => 40, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-26 02:16:57', + 'end_date' => '2025-07-26 05:16:57', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1277, + 'soldier_id' => 40, + 'constraint_type' => 'School', + 'start_date' => '2025-07-10 22:25:48', + 'end_date' => '2025-07-11 01:25:48', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1278, + 'soldier_id' => 40, + 'constraint_type' => 'School', + 'start_date' => '2025-07-22 06:38:17', + 'end_date' => '2025-07-22 08:38:17', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1279, + 'soldier_id' => 40, + 'constraint_type' => 'School', + 'start_date' => '2025-07-18 20:17:41', + 'end_date' => '2025-07-18 22:17:41', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1280, + 'soldier_id' => 116, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-27 07:21:30', + 'end_date' => '2025-07-27 10:21:30', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1281, + 'soldier_id' => 116, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-12 05:25:09', + 'end_date' => '2025-07-12 07:25:09', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1282, + 'soldier_id' => 116, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-26 11:57:57', + 'end_date' => '2025-07-26 12:57:57', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1283, + 'soldier_id' => 116, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-08 10:27:55', + 'end_date' => '2025-07-08 12:27:55', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1284, + 'soldier_id' => 116, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-14 00:16:13', + 'end_date' => '2025-07-14 05:16:13', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1285, + 'soldier_id' => 116, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-27 02:21:30', + 'end_date' => '2025-07-27 07:21:30', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1286, + 'soldier_id' => 116, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-05 20:53:44', + 'end_date' => '2025-07-06 01:53:44', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1287, + 'soldier_id' => 116, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-22 18:30:49', + 'end_date' => '2025-07-22 23:30:49', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1288, + 'soldier_id' => 116, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-05 00:53:13', + 'end_date' => '2025-07-05 05:53:13', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1289, + 'soldier_id' => 116, + 'constraint_type' => 'School', + 'start_date' => '2025-07-04 07:33:25', + 'end_date' => '2025-07-04 12:33:25', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1290, + 'soldier_id' => 116, + 'constraint_type' => 'School', + 'start_date' => '2025-07-05 13:31:12', + 'end_date' => '2025-07-05 16:31:12', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1291, + 'soldier_id' => 88, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-01 03:03:48', + 'end_date' => '2025-07-01 08:03:48', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1292, + 'soldier_id' => 88, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-01 12:06:30', + 'end_date' => '2025-07-01 13:06:30', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1293, + 'soldier_id' => 88, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-29 07:35:18', + 'end_date' => '2025-07-29 09:35:18', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1294, + 'soldier_id' => 88, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-28 07:11:21', + 'end_date' => '2025-07-28 10:11:21', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1295, + 'soldier_id' => 88, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-16 04:40:54', + 'end_date' => '2025-07-16 09:40:54', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1296, + 'soldier_id' => 88, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-10 20:24:41', + 'end_date' => '2025-07-11 00:24:41', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1297, + 'soldier_id' => 88, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-15 01:21:04', + 'end_date' => '2025-07-15 03:21:04', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1298, + 'soldier_id' => 88, + 'constraint_type' => 'School', + 'start_date' => '2025-07-18 12:50:36', + 'end_date' => '2025-07-18 13:50:36', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1299, + 'soldier_id' => 88, + 'constraint_type' => 'School', + 'start_date' => '2025-07-07 19:25:25', + 'end_date' => '2025-07-07 21:25:25', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1300, + 'soldier_id' => 88, + 'constraint_type' => 'School', + 'start_date' => '2025-07-25 01:54:46', + 'end_date' => '2025-07-25 04:54:46', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1301, + 'soldier_id' => 146, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-02 10:23:54', + 'end_date' => '2025-07-02 11:23:54', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1302, + 'soldier_id' => 146, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-20 06:25:15', + 'end_date' => '2025-07-20 07:25:15', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1303, + 'soldier_id' => 146, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-09 17:59:39', + 'end_date' => '2025-07-09 19:59:39', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1304, + 'soldier_id' => 146, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-14 15:23:04', + 'end_date' => '2025-07-14 20:23:04', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1305, + 'soldier_id' => 146, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-12 20:03:55', + 'end_date' => '2025-07-13 00:03:55', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1306, + 'soldier_id' => 146, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-29 08:55:13', + 'end_date' => '2025-07-29 09:55:13', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1307, + 'soldier_id' => 146, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-17 11:33:36', + 'end_date' => '2025-07-17 16:33:36', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1308, + 'soldier_id' => 146, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-12 18:59:34', + 'end_date' => '2025-07-12 22:59:34', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1309, + 'soldier_id' => 146, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-21 05:24:23', + 'end_date' => '2025-07-21 08:24:23', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1310, + 'soldier_id' => 146, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-09 19:18:08', + 'end_date' => '2025-07-09 21:18:08', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1311, + 'soldier_id' => 146, + 'constraint_type' => 'School', + 'start_date' => '2025-07-19 04:10:09', + 'end_date' => '2025-07-19 07:10:09', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1312, + 'soldier_id' => 146, + 'constraint_type' => 'School', + 'start_date' => '2025-07-21 05:10:03', + 'end_date' => '2025-07-21 08:10:03', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1313, + 'soldier_id' => 146, + 'constraint_type' => 'School', + 'start_date' => '2025-07-18 23:48:04', + 'end_date' => '2025-07-19 04:48:04', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1314, + 'soldier_id' => 146, + 'constraint_type' => 'School', + 'start_date' => '2025-07-10 02:59:33', + 'end_date' => '2025-07-10 04:59:33', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1315, + 'soldier_id' => 91, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-28 03:43:50', + 'end_date' => '2025-07-28 06:43:50', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1316, + 'soldier_id' => 91, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-01 14:30:41', + 'end_date' => '2025-07-01 15:30:41', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1317, + 'soldier_id' => 91, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-13 22:37:16', + 'end_date' => '2025-07-14 01:37:16', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1318, + 'soldier_id' => 91, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-02 23:24:02', + 'end_date' => '2025-07-03 03:24:02', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1319, + 'soldier_id' => 91, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-29 20:42:58', + 'end_date' => '2025-07-30 00:42:58', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1320, + 'soldier_id' => 91, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-22 20:59:19', + 'end_date' => '2025-07-22 22:59:19', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1321, + 'soldier_id' => 91, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-29 20:35:35', + 'end_date' => '2025-07-29 22:35:35', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1322, + 'soldier_id' => 91, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-02 19:22:46', + 'end_date' => '2025-07-02 22:22:46', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1323, + 'soldier_id' => 91, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-08 12:19:33', + 'end_date' => '2025-07-08 13:19:33', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1324, + 'soldier_id' => 91, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-14 03:21:35', + 'end_date' => '2025-07-14 07:21:35', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1325, + 'soldier_id' => 91, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-02 00:38:29', + 'end_date' => '2025-07-02 02:38:29', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1326, + 'soldier_id' => 91, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-20 13:07:11', + 'end_date' => '2025-07-20 18:07:11', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1327, + 'soldier_id' => 91, + 'constraint_type' => 'School', + 'start_date' => '2025-07-22 06:21:39', + 'end_date' => '2025-07-22 09:21:39', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1328, + 'soldier_id' => 91, + 'constraint_type' => 'School', + 'start_date' => '2025-07-08 13:30:00', + 'end_date' => '2025-07-08 17:30:00', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1329, + 'soldier_id' => 170, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-07 01:50:50', + 'end_date' => '2025-07-07 05:50:50', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1330, + 'soldier_id' => 170, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-27 08:31:08', + 'end_date' => '2025-07-27 10:31:08', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1331, + 'soldier_id' => 170, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-28 22:13:52', + 'end_date' => '2025-07-29 02:13:52', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1332, + 'soldier_id' => 170, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-08 10:28:01', + 'end_date' => '2025-07-08 12:28:01', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1333, + 'soldier_id' => 170, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-17 14:46:10', + 'end_date' => '2025-07-17 19:46:10', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1334, + 'soldier_id' => 170, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-02 08:53:33', + 'end_date' => '2025-07-02 12:53:33', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1335, + 'soldier_id' => 170, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-07 09:09:33', + 'end_date' => '2025-07-07 10:09:33', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1336, + 'soldier_id' => 170, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-04 18:59:24', + 'end_date' => '2025-07-04 20:59:24', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1337, + 'soldier_id' => 170, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-28 20:28:19', + 'end_date' => '2025-07-28 23:28:19', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1338, + 'soldier_id' => 170, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-28 23:09:19', + 'end_date' => '2025-07-29 00:09:19', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1339, + 'soldier_id' => 170, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-22 02:40:37', + 'end_date' => '2025-07-22 04:40:37', + 'created_at' => '2025-05-13T06:41:46.000000Z', + 'updated_at' => '2025-05-13T06:41:46.000000Z', + ], + [ + 'id' => 1340, + 'soldier_id' => 170, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-19 01:33:51', + 'end_date' => '2025-07-19 04:33:51', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1341, + 'soldier_id' => 170, + 'constraint_type' => 'School', + 'start_date' => '2025-07-18 22:24:49', + 'end_date' => '2025-07-19 02:24:49', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1342, + 'soldier_id' => 170, + 'constraint_type' => 'School', + 'start_date' => '2025-07-23 10:28:40', + 'end_date' => '2025-07-23 14:28:40', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1343, + 'soldier_id' => 122, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-26 11:58:21', + 'end_date' => '2025-07-26 13:58:21', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1344, + 'soldier_id' => 122, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-24 02:46:16', + 'end_date' => '2025-07-24 04:46:16', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1345, + 'soldier_id' => 122, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-12 10:23:37', + 'end_date' => '2025-07-12 13:23:37', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1346, + 'soldier_id' => 122, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-29 20:28:05', + 'end_date' => '2025-07-29 23:28:05', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1347, + 'soldier_id' => 122, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-12 23:08:44', + 'end_date' => '2025-07-13 02:08:44', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1348, + 'soldier_id' => 122, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-29 18:29:24', + 'end_date' => '2025-07-29 23:29:24', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1349, + 'soldier_id' => 122, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-27 18:09:57', + 'end_date' => '2025-07-27 21:09:57', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1350, + 'soldier_id' => 122, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-22 22:02:56', + 'end_date' => '2025-07-23 02:02:56', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1351, + 'soldier_id' => 122, + 'constraint_type' => 'School', + 'start_date' => '2025-07-21 11:10:54', + 'end_date' => '2025-07-21 15:10:54', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1352, + 'soldier_id' => 82, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-13 06:32:27', + 'end_date' => '2025-07-13 09:32:27', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1353, + 'soldier_id' => 82, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-07 05:17:36', + 'end_date' => '2025-07-07 08:17:36', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1354, + 'soldier_id' => 82, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-30 16:41:32', + 'end_date' => '2025-07-30 18:41:32', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1355, + 'soldier_id' => 82, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-30 16:39:31', + 'end_date' => '2025-07-30 18:39:31', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1356, + 'soldier_id' => 82, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-22 08:27:55', + 'end_date' => '2025-07-22 13:27:55', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1357, + 'soldier_id' => 82, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-02 06:05:12', + 'end_date' => '2025-07-02 07:05:12', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1358, + 'soldier_id' => 82, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-26 18:59:14', + 'end_date' => '2025-07-26 21:59:14', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1359, + 'soldier_id' => 82, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-02 19:30:38', + 'end_date' => '2025-07-03 00:30:38', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1360, + 'soldier_id' => 82, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-07 22:39:37', + 'end_date' => '2025-07-08 00:39:37', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1361, + 'soldier_id' => 82, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-25 12:17:07', + 'end_date' => '2025-07-25 13:17:07', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1362, + 'soldier_id' => 82, + 'constraint_type' => 'School', + 'start_date' => '2025-07-01 22:29:35', + 'end_date' => '2025-07-02 00:29:35', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1363, + 'soldier_id' => 82, + 'constraint_type' => 'School', + 'start_date' => '2025-07-14 04:32:14', + 'end_date' => '2025-07-14 06:32:14', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1364, + 'soldier_id' => 82, + 'constraint_type' => 'School', + 'start_date' => '2025-07-19 13:07:56', + 'end_date' => '2025-07-19 17:07:56', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1365, + 'soldier_id' => 82, + 'constraint_type' => 'School', + 'start_date' => '2025-07-03 15:06:58', + 'end_date' => '2025-07-03 18:06:58', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1366, + 'soldier_id' => 133, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-07 22:41:34', + 'end_date' => '2025-07-07 23:41:34', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1367, + 'soldier_id' => 133, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-01 22:34:51', + 'end_date' => '2025-07-02 00:34:51', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1368, + 'soldier_id' => 133, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-16 02:41:56', + 'end_date' => '2025-07-16 07:41:56', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1369, + 'soldier_id' => 133, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-26 20:14:53', + 'end_date' => '2025-07-27 00:14:53', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1370, + 'soldier_id' => 133, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-29 20:01:31', + 'end_date' => '2025-07-30 01:01:31', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1371, + 'soldier_id' => 133, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-02 20:33:43', + 'end_date' => '2025-07-02 22:33:43', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1372, + 'soldier_id' => 133, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-19 17:32:29', + 'end_date' => '2025-07-19 21:32:29', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1373, + 'soldier_id' => 133, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-19 03:01:35', + 'end_date' => '2025-07-19 07:01:35', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1374, + 'soldier_id' => 133, + 'constraint_type' => 'School', + 'start_date' => '2025-07-24 11:27:21', + 'end_date' => '2025-07-24 13:27:21', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1375, + 'soldier_id' => 133, + 'constraint_type' => 'School', + 'start_date' => '2025-07-26 03:48:49', + 'end_date' => '2025-07-26 07:48:49', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1376, + 'soldier_id' => 133, + 'constraint_type' => 'School', + 'start_date' => '2025-07-30 05:26:38', + 'end_date' => '2025-07-30 10:26:38', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1377, + 'soldier_id' => 166, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-21 01:04:36', + 'end_date' => '2025-07-21 02:04:36', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1378, + 'soldier_id' => 166, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-20 04:36:33', + 'end_date' => '2025-07-20 08:36:33', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1379, + 'soldier_id' => 166, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-20 13:01:36', + 'end_date' => '2025-07-20 18:01:36', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1380, + 'soldier_id' => 166, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-22 05:22:01', + 'end_date' => '2025-07-22 08:22:01', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1381, + 'soldier_id' => 166, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-30 11:12:40', + 'end_date' => '2025-07-30 15:12:40', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1382, + 'soldier_id' => 166, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-22 08:23:44', + 'end_date' => '2025-07-22 09:23:44', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1383, + 'soldier_id' => 166, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-18 20:59:06', + 'end_date' => '2025-07-18 22:59:06', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1384, + 'soldier_id' => 166, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-05 20:03:44', + 'end_date' => '2025-07-05 21:03:44', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1385, + 'soldier_id' => 166, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-29 06:02:38', + 'end_date' => '2025-07-29 08:02:38', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1386, + 'soldier_id' => 166, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-21 14:37:24', + 'end_date' => '2025-07-21 15:37:24', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1387, + 'soldier_id' => 166, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-17 07:43:18', + 'end_date' => '2025-07-17 11:43:18', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1388, + 'soldier_id' => 166, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-11 04:34:09', + 'end_date' => '2025-07-11 09:34:09', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1389, + 'soldier_id' => 166, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-24 11:49:56', + 'end_date' => '2025-07-24 13:49:56', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1390, + 'soldier_id' => 166, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-01 06:10:12', + 'end_date' => '2025-07-01 07:10:12', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1391, + 'soldier_id' => 5, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-20 16:58:12', + 'end_date' => '2025-07-20 17:58:12', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1392, + 'soldier_id' => 5, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-27 06:03:34', + 'end_date' => '2025-07-27 11:03:34', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1393, + 'soldier_id' => 5, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-27 00:59:30', + 'end_date' => '2025-07-27 02:59:30', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1394, + 'soldier_id' => 5, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-11 20:56:02', + 'end_date' => '2025-07-12 01:56:02', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1395, + 'soldier_id' => 5, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-19 20:30:18', + 'end_date' => '2025-07-19 22:30:18', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1396, + 'soldier_id' => 5, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-12 21:30:36', + 'end_date' => '2025-07-13 00:30:36', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1397, + 'soldier_id' => 5, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-04 13:03:26', + 'end_date' => '2025-07-04 15:03:26', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1398, + 'soldier_id' => 5, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-09 15:31:52', + 'end_date' => '2025-07-09 20:31:52', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1399, + 'soldier_id' => 5, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-22 13:42:09', + 'end_date' => '2025-07-22 17:42:09', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1400, + 'soldier_id' => 5, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-25 14:50:51', + 'end_date' => '2025-07-25 16:50:51', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1401, + 'soldier_id' => 5, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-24 18:36:11', + 'end_date' => '2025-07-24 23:36:11', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1402, + 'soldier_id' => 5, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-22 16:10:56', + 'end_date' => '2025-07-22 18:10:56', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1403, + 'soldier_id' => 5, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-13 11:24:50', + 'end_date' => '2025-07-13 12:24:50', + 'created_at' => '2025-05-13T06:41:47.000000Z', + 'updated_at' => '2025-05-13T06:41:47.000000Z', + ], + [ + 'id' => 1404, + 'soldier_id' => 5, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-12 03:32:43', + 'end_date' => '2025-07-12 05:32:43', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1405, + 'soldier_id' => 5, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-05 05:04:41', + 'end_date' => '2025-07-05 09:04:41', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1406, + 'soldier_id' => 5, + 'constraint_type' => 'School', + 'start_date' => '2025-07-08 19:53:50', + 'end_date' => '2025-07-08 21:53:50', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1407, + 'soldier_id' => 5, + 'constraint_type' => 'School', + 'start_date' => '2025-07-01 05:53:09', + 'end_date' => '2025-07-01 08:53:09', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1408, + 'soldier_id' => 5, + 'constraint_type' => 'School', + 'start_date' => '2025-07-10 19:22:55', + 'end_date' => '2025-07-10 20:22:55', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1409, + 'soldier_id' => 155, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-27 00:44:01', + 'end_date' => '2025-07-27 05:44:01', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1410, + 'soldier_id' => 155, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-21 03:04:26', + 'end_date' => '2025-07-21 07:04:26', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1411, + 'soldier_id' => 155, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-06 23:46:00', + 'end_date' => '2025-07-07 02:46:00', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1412, + 'soldier_id' => 155, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-22 15:03:57', + 'end_date' => '2025-07-22 18:03:57', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1413, + 'soldier_id' => 155, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-03 14:30:31', + 'end_date' => '2025-07-03 18:30:31', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1414, + 'soldier_id' => 155, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-28 20:06:52', + 'end_date' => '2025-07-28 21:06:52', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1415, + 'soldier_id' => 155, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-02 20:01:00', + 'end_date' => '2025-07-03 00:01:00', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1416, + 'soldier_id' => 155, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-26 20:46:37', + 'end_date' => '2025-07-27 01:46:37', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1417, + 'soldier_id' => 155, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-22 19:43:19', + 'end_date' => '2025-07-22 23:43:19', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1418, + 'soldier_id' => 155, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-11 13:46:45', + 'end_date' => '2025-07-11 14:46:45', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1419, + 'soldier_id' => 155, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-07 23:28:05', + 'end_date' => '2025-07-08 03:28:05', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1420, + 'soldier_id' => 155, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-27 23:41:33', + 'end_date' => '2025-07-28 04:41:33', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1421, + 'soldier_id' => 155, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-24 02:15:04', + 'end_date' => '2025-07-24 06:15:04', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1422, + 'soldier_id' => 155, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-26 18:56:56', + 'end_date' => '2025-07-26 21:56:56', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1423, + 'soldier_id' => 14, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-13 05:18:01', + 'end_date' => '2025-07-13 09:18:01', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1424, + 'soldier_id' => 14, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-08 19:54:46', + 'end_date' => '2025-07-08 21:54:46', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1425, + 'soldier_id' => 14, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-24 20:21:50', + 'end_date' => '2025-07-24 23:21:50', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1426, + 'soldier_id' => 14, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-21 07:18:33', + 'end_date' => '2025-07-21 12:18:33', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1427, + 'soldier_id' => 14, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-14 03:32:02', + 'end_date' => '2025-07-14 06:32:02', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1428, + 'soldier_id' => 14, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-03 21:35:15', + 'end_date' => '2025-07-04 00:35:15', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1429, + 'soldier_id' => 14, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-03 14:22:49', + 'end_date' => '2025-07-03 17:22:49', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1430, + 'soldier_id' => 37, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-13 09:20:51', + 'end_date' => '2025-07-13 10:20:51', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1431, + 'soldier_id' => 37, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-02 20:58:24', + 'end_date' => '2025-07-02 23:58:24', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1432, + 'soldier_id' => 37, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-14 04:04:15', + 'end_date' => '2025-07-14 08:04:15', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1433, + 'soldier_id' => 37, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-09 20:21:51', + 'end_date' => '2025-07-10 01:21:51', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1434, + 'soldier_id' => 37, + 'constraint_type' => 'School', + 'start_date' => '2025-07-29 15:04:18', + 'end_date' => '2025-07-29 16:04:18', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1435, + 'soldier_id' => 26, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-13 12:20:48', + 'end_date' => '2025-07-13 17:20:48', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1436, + 'soldier_id' => 26, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-27 13:01:40', + 'end_date' => '2025-07-27 16:01:40', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1437, + 'soldier_id' => 26, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-20 06:53:50', + 'end_date' => '2025-07-20 10:53:50', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1438, + 'soldier_id' => 26, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-23 01:19:08', + 'end_date' => '2025-07-23 04:19:08', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1439, + 'soldier_id' => 26, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-20 19:17:27', + 'end_date' => '2025-07-20 21:17:27', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1440, + 'soldier_id' => 26, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-11 12:13:21', + 'end_date' => '2025-07-11 17:13:21', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1441, + 'soldier_id' => 26, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-15 19:22:54', + 'end_date' => '2025-07-16 00:22:54', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1442, + 'soldier_id' => 26, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-15 16:18:35', + 'end_date' => '2025-07-15 19:18:35', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1443, + 'soldier_id' => 26, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-14 15:48:13', + 'end_date' => '2025-07-14 18:48:13', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1444, + 'soldier_id' => 26, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-15 08:56:20', + 'end_date' => '2025-07-15 12:56:20', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1445, + 'soldier_id' => 26, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-14 10:56:38', + 'end_date' => '2025-07-14 13:56:38', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1446, + 'soldier_id' => 26, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-02 09:09:16', + 'end_date' => '2025-07-02 12:09:16', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1447, + 'soldier_id' => 26, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-01 05:15:15', + 'end_date' => '2025-07-01 07:15:15', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1448, + 'soldier_id' => 26, + 'constraint_type' => 'School', + 'start_date' => '2025-07-20 09:49:47', + 'end_date' => '2025-07-20 13:49:47', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1449, + 'soldier_id' => 26, + 'constraint_type' => 'School', + 'start_date' => '2025-07-25 09:11:20', + 'end_date' => '2025-07-25 12:11:20', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1450, + 'soldier_id' => 26, + 'constraint_type' => 'School', + 'start_date' => '2025-07-19 22:06:12', + 'end_date' => '2025-07-19 23:06:12', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1451, + 'soldier_id' => 26, + 'constraint_type' => 'School', + 'start_date' => '2025-07-14 19:43:16', + 'end_date' => '2025-07-14 20:43:16', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1452, + 'soldier_id' => 87, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-13 13:38:03', + 'end_date' => '2025-07-13 16:38:03', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1453, + 'soldier_id' => 87, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-02 23:36:57', + 'end_date' => '2025-07-03 01:36:57', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1454, + 'soldier_id' => 87, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-02 06:42:15', + 'end_date' => '2025-07-02 09:42:15', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1455, + 'soldier_id' => 87, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-26 20:17:22', + 'end_date' => '2025-07-26 23:17:22', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1456, + 'soldier_id' => 87, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-25 10:42:50', + 'end_date' => '2025-07-25 13:42:50', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1457, + 'soldier_id' => 87, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-03 14:09:54', + 'end_date' => '2025-07-03 19:09:54', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1458, + 'soldier_id' => 87, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-13 03:53:22', + 'end_date' => '2025-07-13 08:53:22', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1459, + 'soldier_id' => 87, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-21 16:09:38', + 'end_date' => '2025-07-21 19:09:38', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1460, + 'soldier_id' => 87, + 'constraint_type' => 'School', + 'start_date' => '2025-07-27 12:52:13', + 'end_date' => '2025-07-27 16:52:13', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1461, + 'soldier_id' => 17, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-27 08:09:02', + 'end_date' => '2025-07-27 09:09:02', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1462, + 'soldier_id' => 17, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-14 16:05:29', + 'end_date' => '2025-07-14 19:05:29', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1463, + 'soldier_id' => 17, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-19 13:04:46', + 'end_date' => '2025-07-19 16:04:46', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1464, + 'soldier_id' => 17, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-30 00:01:03', + 'end_date' => '2025-07-30 02:01:03', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1465, + 'soldier_id' => 17, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-30 22:46:23', + 'end_date' => '2025-08-01 02:46:23', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1466, + 'soldier_id' => 17, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-28 04:27:15', + 'end_date' => '2025-07-28 05:27:15', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1467, + 'soldier_id' => 17, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-11 20:45:25', + 'end_date' => '2025-07-12 01:45:25', + 'created_at' => '2025-05-13T06:41:48.000000Z', + 'updated_at' => '2025-05-13T06:41:48.000000Z', + ], + [ + 'id' => 1468, + 'soldier_id' => 17, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-29 04:49:08', + 'end_date' => '2025-07-29 07:49:08', + 'created_at' => '2025-05-13T06:41:49.000000Z', + 'updated_at' => '2025-05-13T06:41:49.000000Z', + ], + [ + 'id' => 1469, + 'soldier_id' => 17, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-20 21:07:09', + 'end_date' => '2025-07-21 02:07:09', + 'created_at' => '2025-05-13T06:41:49.000000Z', + 'updated_at' => '2025-05-13T06:41:49.000000Z', + ], + [ + 'id' => 1470, + 'soldier_id' => 17, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-01 08:56:42', + 'end_date' => '2025-07-01 10:56:42', + 'created_at' => '2025-05-13T06:41:49.000000Z', + 'updated_at' => '2025-05-13T06:41:49.000000Z', + ], + [ + 'id' => 1471, + 'soldier_id' => 17, + 'constraint_type' => 'School', + 'start_date' => '2025-07-09 12:09:21', + 'end_date' => '2025-07-09 13:09:21', + 'created_at' => '2025-05-13T06:41:49.000000Z', + 'updated_at' => '2025-05-13T06:41:49.000000Z', + ], + [ + 'id' => 1472, + 'soldier_id' => 17, + 'constraint_type' => 'School', + 'start_date' => '2025-07-14 17:24:06', + 'end_date' => '2025-07-14 20:24:06', + 'created_at' => '2025-05-13T06:41:49.000000Z', + 'updated_at' => '2025-05-13T06:41:49.000000Z', + ], + [ + 'id' => 1473, + 'soldier_id' => 163, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-06 07:53:42', + 'end_date' => '2025-07-06 11:53:42', + 'created_at' => '2025-05-13T06:41:49.000000Z', + 'updated_at' => '2025-05-13T06:41:49.000000Z', + ], + [ + 'id' => 1474, + 'soldier_id' => 163, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-30 06:34:40', + 'end_date' => '2025-07-30 08:34:40', + 'created_at' => '2025-05-13T06:41:49.000000Z', + 'updated_at' => '2025-05-13T06:41:49.000000Z', + ], + [ + 'id' => 1475, + 'soldier_id' => 163, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-05 01:30:35', + 'end_date' => '2025-07-05 04:30:35', + 'created_at' => '2025-05-13T06:41:49.000000Z', + 'updated_at' => '2025-05-13T06:41:49.000000Z', + ], + [ + 'id' => 1476, + 'soldier_id' => 163, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-09 03:51:38', + 'end_date' => '2025-07-09 05:51:38', + 'created_at' => '2025-05-13T06:41:49.000000Z', + 'updated_at' => '2025-05-13T06:41:49.000000Z', + ], + [ + 'id' => 1477, + 'soldier_id' => 163, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-23 01:48:08', + 'end_date' => '2025-07-23 06:48:08', + 'created_at' => '2025-05-13T06:41:49.000000Z', + 'updated_at' => '2025-05-13T06:41:49.000000Z', + ], + [ + 'id' => 1478, + 'soldier_id' => 163, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-15 20:21:56', + 'end_date' => '2025-07-15 23:21:56', + 'created_at' => '2025-05-13T06:41:49.000000Z', + 'updated_at' => '2025-05-13T06:41:49.000000Z', + ], + [ + 'id' => 1479, + 'soldier_id' => 163, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-10 20:16:38', + 'end_date' => '2025-07-10 23:16:38', + 'created_at' => '2025-05-13T06:41:49.000000Z', + 'updated_at' => '2025-05-13T06:41:49.000000Z', + ], + [ + 'id' => 1480, + 'soldier_id' => 163, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-27 07:14:14', + 'end_date' => '2025-07-27 12:14:14', + 'created_at' => '2025-05-13T06:41:49.000000Z', + 'updated_at' => '2025-05-13T06:41:49.000000Z', + ], + [ + 'id' => 1481, + 'soldier_id' => 163, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-12 20:40:46', + 'end_date' => '2025-07-13 00:40:46', + 'created_at' => '2025-05-13T06:41:49.000000Z', + 'updated_at' => '2025-05-13T06:41:49.000000Z', + ], + [ + 'id' => 1482, + 'soldier_id' => 163, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-28 20:58:52', + 'end_date' => '2025-07-28 21:58:52', + 'created_at' => '2025-05-13T06:41:49.000000Z', + 'updated_at' => '2025-05-13T06:41:49.000000Z', + ], + [ + 'id' => 1483, + 'soldier_id' => 163, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-12 19:32:10', + 'end_date' => '2025-07-12 20:32:10', + 'created_at' => '2025-05-13T06:41:49.000000Z', + 'updated_at' => '2025-05-13T06:41:49.000000Z', + ], + [ + 'id' => 1484, + 'soldier_id' => 163, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-21 23:48:08', + 'end_date' => '2025-07-22 03:48:08', + 'created_at' => '2025-05-13T06:41:49.000000Z', + 'updated_at' => '2025-05-13T06:41:49.000000Z', + ], + [ + 'id' => 1485, + 'soldier_id' => 163, + 'constraint_type' => 'School', + 'start_date' => '2025-07-29 12:05:46', + 'end_date' => '2025-07-29 17:05:46', + 'created_at' => '2025-05-13T06:41:49.000000Z', + 'updated_at' => '2025-05-13T06:41:49.000000Z', + ], + [ + 'id' => 1486, + 'soldier_id' => 163, + 'constraint_type' => 'School', + 'start_date' => '2025-07-25 16:14:14', + 'end_date' => '2025-07-25 19:14:14', + 'created_at' => '2025-05-13T06:41:49.000000Z', + 'updated_at' => '2025-05-13T06:41:49.000000Z', + ], + [ + 'id' => 1487, + 'soldier_id' => 163, + 'constraint_type' => 'School', + 'start_date' => '2025-07-04 07:09:07', + 'end_date' => '2025-07-04 12:09:07', + 'created_at' => '2025-05-13T06:41:49.000000Z', + 'updated_at' => '2025-05-13T06:41:49.000000Z', + ], + [ + 'id' => 1488, + 'soldier_id' => 110, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-29 15:32:18', + 'end_date' => '2025-07-29 18:32:18', + 'created_at' => '2025-05-13T06:41:49.000000Z', + 'updated_at' => '2025-05-13T06:41:49.000000Z', + ], + [ + 'id' => 1489, + 'soldier_id' => 110, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-22 03:04:41', + 'end_date' => '2025-07-22 06:04:41', + 'created_at' => '2025-05-13T06:41:49.000000Z', + 'updated_at' => '2025-05-13T06:41:49.000000Z', + ], + [ + 'id' => 1490, + 'soldier_id' => 110, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-10 18:56:16', + 'end_date' => '2025-07-10 20:56:16', + 'created_at' => '2025-05-13T06:41:49.000000Z', + 'updated_at' => '2025-05-13T06:41:49.000000Z', + ], + [ + 'id' => 1491, + 'soldier_id' => 110, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-06 04:33:56', + 'end_date' => '2025-07-06 07:33:56', + 'created_at' => '2025-05-13T06:41:49.000000Z', + 'updated_at' => '2025-05-13T06:41:49.000000Z', + ], + [ + 'id' => 1492, + 'soldier_id' => 110, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-08 18:39:12', + 'end_date' => '2025-07-08 21:39:12', + 'created_at' => '2025-05-13T06:41:49.000000Z', + 'updated_at' => '2025-05-13T06:41:49.000000Z', + ], + [ + 'id' => 1493, + 'soldier_id' => 110, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-09 06:23:55', + 'end_date' => '2025-07-09 11:23:55', + 'created_at' => '2025-05-13T06:41:49.000000Z', + 'updated_at' => '2025-05-13T06:41:49.000000Z', + ], + [ + 'id' => 1494, + 'soldier_id' => 110, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-02 19:30:45', + 'end_date' => '2025-07-02 20:30:45', + 'created_at' => '2025-05-13T06:41:49.000000Z', + 'updated_at' => '2025-05-13T06:41:49.000000Z', + ], + [ + 'id' => 1495, + 'soldier_id' => 110, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-01 05:02:02', + 'end_date' => '2025-07-01 06:02:02', + 'created_at' => '2025-05-13T06:41:49.000000Z', + 'updated_at' => '2025-05-13T06:41:49.000000Z', + ], + [ + 'id' => 1496, + 'soldier_id' => 110, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-19 15:49:24', + 'end_date' => '2025-07-19 16:49:24', + 'created_at' => '2025-05-13T06:41:49.000000Z', + 'updated_at' => '2025-05-13T06:41:49.000000Z', + ], + [ + 'id' => 1497, + 'soldier_id' => 110, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-13 22:09:28', + 'end_date' => '2025-07-14 02:09:28', + 'created_at' => '2025-05-13T06:41:49.000000Z', + 'updated_at' => '2025-05-13T06:41:49.000000Z', + ], + [ + 'id' => 1498, + 'soldier_id' => 110, + 'constraint_type' => 'School', + 'start_date' => '2025-07-19 01:11:24', + 'end_date' => '2025-07-19 06:11:24', + 'created_at' => '2025-05-13T06:41:49.000000Z', + 'updated_at' => '2025-05-13T06:41:49.000000Z', + ], + [ + 'id' => 1499, + 'soldier_id' => 110, + 'constraint_type' => 'School', + 'start_date' => '2025-07-09 19:57:28', + 'end_date' => '2025-07-09 22:57:28', + 'created_at' => '2025-05-13T06:41:49.000000Z', + 'updated_at' => '2025-05-13T06:41:49.000000Z', + ], + [ + 'id' => 1500, + 'soldier_id' => 110, + 'constraint_type' => 'School', + 'start_date' => '2025-07-09 00:04:32', + 'end_date' => '2025-07-09 03:04:32', + 'created_at' => '2025-05-13T06:41:49.000000Z', + 'updated_at' => '2025-05-13T06:41:49.000000Z', + ], + [ + 'id' => 1501, + 'soldier_id' => 138, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-14 20:01:02', + 'end_date' => '2025-07-14 21:01:02', + 'created_at' => '2025-05-13T06:41:49.000000Z', + 'updated_at' => '2025-05-13T06:41:49.000000Z', + ], + [ + 'id' => 1502, + 'soldier_id' => 138, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-15 05:06:49', + 'end_date' => '2025-07-15 08:06:49', + 'created_at' => '2025-05-13T06:41:49.000000Z', + 'updated_at' => '2025-05-13T06:41:49.000000Z', + ], + [ + 'id' => 1503, + 'soldier_id' => 138, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-06 19:01:41', + 'end_date' => '2025-07-06 21:01:41', + 'created_at' => '2025-05-13T06:41:49.000000Z', + 'updated_at' => '2025-05-13T06:41:49.000000Z', + ], + [ + 'id' => 1504, + 'soldier_id' => 138, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-03 06:47:05', + 'end_date' => '2025-07-03 09:47:05', + 'created_at' => '2025-05-13T06:41:49.000000Z', + 'updated_at' => '2025-05-13T06:41:49.000000Z', + ], + [ + 'id' => 1505, + 'soldier_id' => 138, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-06 01:45:30', + 'end_date' => '2025-07-06 06:45:30', + 'created_at' => '2025-05-13T06:41:49.000000Z', + 'updated_at' => '2025-05-13T06:41:49.000000Z', + ], + [ + 'id' => 1506, + 'soldier_id' => 138, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-29 20:15:37', + 'end_date' => '2025-07-30 00:15:37', + 'created_at' => '2025-05-13T06:41:49.000000Z', + 'updated_at' => '2025-05-13T06:41:49.000000Z', + ], + [ + 'id' => 1507, + 'soldier_id' => 138, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-19 02:37:38', + 'end_date' => '2025-07-19 06:37:38', + 'created_at' => '2025-05-13T06:41:49.000000Z', + 'updated_at' => '2025-05-13T06:41:49.000000Z', + ], + [ + 'id' => 1508, + 'soldier_id' => 138, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-15 18:56:19', + 'end_date' => '2025-07-15 22:56:19', + 'created_at' => '2025-05-13T06:41:49.000000Z', + 'updated_at' => '2025-05-13T06:41:49.000000Z', + ], + [ + 'id' => 1509, + 'soldier_id' => 138, + 'constraint_type' => 'School', + 'start_date' => '2025-07-13 05:20:19', + 'end_date' => '2025-07-13 10:20:19', + 'created_at' => '2025-05-13T06:41:49.000000Z', + 'updated_at' => '2025-05-13T06:41:49.000000Z', + ], + [ + 'id' => 1510, + 'soldier_id' => 138, + 'constraint_type' => 'School', + 'start_date' => '2025-07-12 05:01:41', + 'end_date' => '2025-07-12 08:01:41', + 'created_at' => '2025-05-13T06:41:49.000000Z', + 'updated_at' => '2025-05-13T06:41:49.000000Z', + ], + [ + 'id' => 1511, + 'soldier_id' => 64, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-20 15:18:57', + 'end_date' => '2025-07-20 17:18:57', + 'created_at' => '2025-05-13T06:41:49.000000Z', + 'updated_at' => '2025-05-13T06:41:49.000000Z', + ], + [ + 'id' => 1512, + 'soldier_id' => 64, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-13 16:24:22', + 'end_date' => '2025-07-13 21:24:22', + 'created_at' => '2025-05-13T06:41:49.000000Z', + 'updated_at' => '2025-05-13T06:41:49.000000Z', + ], + [ + 'id' => 1513, + 'soldier_id' => 64, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-17 19:51:00', + 'end_date' => '2025-07-17 23:51:00', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1514, + 'soldier_id' => 64, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-01 22:53:22', + 'end_date' => '2025-07-02 01:53:22', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1515, + 'soldier_id' => 64, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-10 04:08:09', + 'end_date' => '2025-07-10 06:08:09', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1516, + 'soldier_id' => 64, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-28 20:37:18', + 'end_date' => '2025-07-28 23:37:18', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1517, + 'soldier_id' => 64, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-08 23:44:09', + 'end_date' => '2025-07-09 02:44:09', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1518, + 'soldier_id' => 64, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-09 20:55:35', + 'end_date' => '2025-07-09 22:55:35', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1519, + 'soldier_id' => 64, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-26 04:29:24', + 'end_date' => '2025-07-26 09:29:24', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1520, + 'soldier_id' => 64, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-29 18:39:26', + 'end_date' => '2025-07-29 23:39:26', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1521, + 'soldier_id' => 64, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-04 16:14:42', + 'end_date' => '2025-07-04 21:14:42', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1522, + 'soldier_id' => 64, + 'constraint_type' => 'School', + 'start_date' => '2025-07-08 08:51:18', + 'end_date' => '2025-07-08 12:51:18', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1523, + 'soldier_id' => 64, + 'constraint_type' => 'School', + 'start_date' => '2025-07-19 11:02:24', + 'end_date' => '2025-07-19 16:02:24', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1524, + 'soldier_id' => 64, + 'constraint_type' => 'School', + 'start_date' => '2025-07-25 03:57:52', + 'end_date' => '2025-07-25 08:57:52', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1525, + 'soldier_id' => 64, + 'constraint_type' => 'School', + 'start_date' => '2025-07-01 03:47:39', + 'end_date' => '2025-07-01 04:47:39', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1526, + 'soldier_id' => 173, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-10 16:02:34', + 'end_date' => '2025-07-10 19:02:34', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1527, + 'soldier_id' => 173, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-27 23:06:25', + 'end_date' => '2025-07-28 04:06:25', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1528, + 'soldier_id' => 173, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-29 00:30:11', + 'end_date' => '2025-07-29 05:30:11', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1529, + 'soldier_id' => 173, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-29 13:31:04', + 'end_date' => '2025-07-29 16:31:04', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1530, + 'soldier_id' => 173, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-26 20:28:12', + 'end_date' => '2025-07-26 23:28:12', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1531, + 'soldier_id' => 173, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-02 00:35:40', + 'end_date' => '2025-07-02 02:35:40', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1532, + 'soldier_id' => 173, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-19 20:02:05', + 'end_date' => '2025-07-19 23:02:05', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1533, + 'soldier_id' => 173, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-26 05:05:00', + 'end_date' => '2025-07-26 06:05:00', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1534, + 'soldier_id' => 173, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-08 16:35:51', + 'end_date' => '2025-07-08 19:35:51', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1535, + 'soldier_id' => 173, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-12 06:05:49', + 'end_date' => '2025-07-12 08:05:49', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1536, + 'soldier_id' => 173, + 'constraint_type' => 'School', + 'start_date' => '2025-07-03 02:39:04', + 'end_date' => '2025-07-03 07:39:04', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1537, + 'soldier_id' => 173, + 'constraint_type' => 'School', + 'start_date' => '2025-07-22 06:23:23', + 'end_date' => '2025-07-22 11:23:23', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1538, + 'soldier_id' => 173, + 'constraint_type' => 'School', + 'start_date' => '2025-07-04 11:52:13', + 'end_date' => '2025-07-04 13:52:13', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1539, + 'soldier_id' => 173, + 'constraint_type' => 'School', + 'start_date' => '2025-07-23 01:52:41', + 'end_date' => '2025-07-23 06:52:41', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1540, + 'soldier_id' => 124, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-21 20:44:07', + 'end_date' => '2025-07-21 23:44:07', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1541, + 'soldier_id' => 124, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-13 21:14:42', + 'end_date' => '2025-07-13 23:14:42', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1542, + 'soldier_id' => 124, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-15 06:26:17', + 'end_date' => '2025-07-15 10:26:17', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1543, + 'soldier_id' => 124, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-23 20:04:48', + 'end_date' => '2025-07-24 01:04:48', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1544, + 'soldier_id' => 124, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-18 23:33:05', + 'end_date' => '2025-07-19 02:33:05', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1545, + 'soldier_id' => 124, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-05 02:13:46', + 'end_date' => '2025-07-05 04:13:46', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1546, + 'soldier_id' => 124, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-06 01:53:50', + 'end_date' => '2025-07-06 03:53:50', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1547, + 'soldier_id' => 124, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-25 21:34:35', + 'end_date' => '2025-07-26 02:34:35', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1548, + 'soldier_id' => 124, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-13 17:36:49', + 'end_date' => '2025-07-13 19:36:49', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1549, + 'soldier_id' => 124, + 'constraint_type' => 'School', + 'start_date' => '2025-07-14 23:25:18', + 'end_date' => '2025-07-15 03:25:18', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1550, + 'soldier_id' => 124, + 'constraint_type' => 'School', + 'start_date' => '2025-07-26 18:58:53', + 'end_date' => '2025-07-26 19:58:53', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1551, + 'soldier_id' => 124, + 'constraint_type' => 'School', + 'start_date' => '2025-07-11 22:34:43', + 'end_date' => '2025-07-12 00:34:43', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1552, + 'soldier_id' => 62, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-28 05:46:14', + 'end_date' => '2025-07-28 10:46:14', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1553, + 'soldier_id' => 62, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-21 13:55:47', + 'end_date' => '2025-07-21 17:55:47', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1554, + 'soldier_id' => 62, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-13 22:55:09', + 'end_date' => '2025-07-14 02:55:09', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1555, + 'soldier_id' => 62, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-25 10:12:27', + 'end_date' => '2025-07-25 13:12:27', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1556, + 'soldier_id' => 62, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-21 22:08:22', + 'end_date' => '2025-07-21 23:08:22', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1557, + 'soldier_id' => 62, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-15 22:54:29', + 'end_date' => '2025-07-16 03:54:29', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1558, + 'soldier_id' => 62, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-12 21:42:07', + 'end_date' => '2025-07-13 02:42:07', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1559, + 'soldier_id' => 62, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-28 20:03:13', + 'end_date' => '2025-07-29 00:03:13', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1560, + 'soldier_id' => 62, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-19 20:07:25', + 'end_date' => '2025-07-20 01:07:25', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1561, + 'soldier_id' => 62, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-01 11:45:42', + 'end_date' => '2025-07-01 16:45:42', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1562, + 'soldier_id' => 62, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-04 04:17:47', + 'end_date' => '2025-07-04 06:17:47', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1563, + 'soldier_id' => 62, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-07 17:52:47', + 'end_date' => '2025-07-07 18:52:47', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1564, + 'soldier_id' => 62, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-29 02:20:00', + 'end_date' => '2025-07-29 06:20:00', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1565, + 'soldier_id' => 62, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-07 01:12:24', + 'end_date' => '2025-07-07 05:12:24', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1566, + 'soldier_id' => 23, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-06 07:34:46', + 'end_date' => '2025-07-06 08:34:46', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1567, + 'soldier_id' => 23, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-07 08:57:55', + 'end_date' => '2025-07-07 10:57:55', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1568, + 'soldier_id' => 23, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-22 12:59:14', + 'end_date' => '2025-07-22 17:59:14', + 'created_at' => '2025-05-13T06:41:50.000000Z', + 'updated_at' => '2025-05-13T06:41:50.000000Z', + ], + [ + 'id' => 1569, + 'soldier_id' => 23, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-21 00:14:37', + 'end_date' => '2025-07-21 02:14:37', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1570, + 'soldier_id' => 23, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-07 23:54:22', + 'end_date' => '2025-07-08 00:54:22', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1571, + 'soldier_id' => 23, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-10 22:37:36', + 'end_date' => '2025-07-11 03:37:36', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1572, + 'soldier_id' => 23, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-10 20:21:29', + 'end_date' => '2025-07-10 23:21:29', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1573, + 'soldier_id' => 23, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-26 15:32:57', + 'end_date' => '2025-07-26 20:32:57', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1574, + 'soldier_id' => 23, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-02 23:11:49', + 'end_date' => '2025-07-03 01:11:49', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1575, + 'soldier_id' => 23, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-09 09:54:32', + 'end_date' => '2025-07-09 12:54:32', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1576, + 'soldier_id' => 23, + 'constraint_type' => 'School', + 'start_date' => '2025-07-10 16:08:04', + 'end_date' => '2025-07-10 19:08:04', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1577, + 'soldier_id' => 106, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-14 20:59:17', + 'end_date' => '2025-07-15 01:59:17', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1578, + 'soldier_id' => 106, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-09 09:16:38', + 'end_date' => '2025-07-09 14:16:38', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1579, + 'soldier_id' => 106, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-08 03:23:04', + 'end_date' => '2025-07-08 06:23:04', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1580, + 'soldier_id' => 106, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-03 06:53:59', + 'end_date' => '2025-07-03 10:53:59', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1581, + 'soldier_id' => 106, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-02 20:19:40', + 'end_date' => '2025-07-03 01:19:40', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1582, + 'soldier_id' => 106, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-21 20:24:20', + 'end_date' => '2025-07-22 00:24:20', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1583, + 'soldier_id' => 106, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-29 20:23:46', + 'end_date' => '2025-07-29 21:23:46', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1584, + 'soldier_id' => 106, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-24 21:13:50', + 'end_date' => '2025-07-25 01:13:50', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1585, + 'soldier_id' => 106, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-19 01:00:53', + 'end_date' => '2025-07-19 03:00:53', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1586, + 'soldier_id' => 106, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-29 15:41:07', + 'end_date' => '2025-07-29 20:41:07', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1587, + 'soldier_id' => 106, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-04 18:59:13', + 'end_date' => '2025-07-04 19:59:13', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1588, + 'soldier_id' => 106, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-29 07:58:55', + 'end_date' => '2025-07-29 09:58:55', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1589, + 'soldier_id' => 106, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-18 15:32:49', + 'end_date' => '2025-07-18 17:32:49', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1590, + 'soldier_id' => 106, + 'constraint_type' => 'School', + 'start_date' => '2025-07-15 04:11:45', + 'end_date' => '2025-07-15 07:11:45', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1591, + 'soldier_id' => 106, + 'constraint_type' => 'School', + 'start_date' => '2025-07-17 11:39:41', + 'end_date' => '2025-07-17 16:39:41', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1592, + 'soldier_id' => 106, + 'constraint_type' => 'School', + 'start_date' => '2025-07-04 00:33:02', + 'end_date' => '2025-07-04 03:33:02', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1593, + 'soldier_id' => 6, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-23 04:15:02', + 'end_date' => '2025-07-23 07:15:02', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1594, + 'soldier_id' => 6, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-02 09:23:48', + 'end_date' => '2025-07-02 13:23:48', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1595, + 'soldier_id' => 6, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-23 20:33:14', + 'end_date' => '2025-07-23 23:33:14', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1596, + 'soldier_id' => 6, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-03 20:53:57', + 'end_date' => '2025-07-03 22:53:57', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1597, + 'soldier_id' => 6, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-09 05:39:30', + 'end_date' => '2025-07-09 09:39:30', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1598, + 'soldier_id' => 6, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-05 20:52:48', + 'end_date' => '2025-07-06 00:52:48', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1599, + 'soldier_id' => 6, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-22 11:06:02', + 'end_date' => '2025-07-22 14:06:02', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1600, + 'soldier_id' => 6, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-01 10:12:42', + 'end_date' => '2025-07-01 15:12:42', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1601, + 'soldier_id' => 6, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-04 17:09:46', + 'end_date' => '2025-07-04 20:09:46', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1602, + 'soldier_id' => 6, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-01 18:45:03', + 'end_date' => '2025-07-01 19:45:03', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1603, + 'soldier_id' => 6, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-05 11:38:24', + 'end_date' => '2025-07-05 15:38:24', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1604, + 'soldier_id' => 6, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-15 22:15:57', + 'end_date' => '2025-07-15 23:15:57', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1605, + 'soldier_id' => 6, + 'constraint_type' => 'School', + 'start_date' => '2025-07-12 16:48:24', + 'end_date' => '2025-07-12 19:48:24', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1606, + 'soldier_id' => 6, + 'constraint_type' => 'School', + 'start_date' => '2025-07-06 03:19:47', + 'end_date' => '2025-07-06 05:19:47', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1607, + 'soldier_id' => 6, + 'constraint_type' => 'School', + 'start_date' => '2025-07-20 15:31:30', + 'end_date' => '2025-07-20 19:31:30', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1608, + 'soldier_id' => 104, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-17 20:43:27', + 'end_date' => '2025-07-18 01:43:27', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1609, + 'soldier_id' => 104, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-08 20:32:47', + 'end_date' => '2025-07-08 22:32:47', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1610, + 'soldier_id' => 104, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-26 03:16:49', + 'end_date' => '2025-07-26 06:16:49', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1611, + 'soldier_id' => 104, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-23 14:48:44', + 'end_date' => '2025-07-23 18:48:44', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1612, + 'soldier_id' => 104, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-15 17:52:02', + 'end_date' => '2025-07-15 19:52:02', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1613, + 'soldier_id' => 104, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-17 00:09:30', + 'end_date' => '2025-07-17 01:09:30', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1614, + 'soldier_id' => 104, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-29 10:41:25', + 'end_date' => '2025-07-29 15:41:25', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1615, + 'soldier_id' => 104, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-24 13:13:33', + 'end_date' => '2025-07-24 16:13:33', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1616, + 'soldier_id' => 104, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-04 07:05:27', + 'end_date' => '2025-07-04 11:05:27', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1617, + 'soldier_id' => 104, + 'constraint_type' => 'School', + 'start_date' => '2025-07-18 16:24:50', + 'end_date' => '2025-07-18 18:24:50', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1618, + 'soldier_id' => 104, + 'constraint_type' => 'School', + 'start_date' => '2025-07-20 03:01:58', + 'end_date' => '2025-07-20 04:01:58', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1619, + 'soldier_id' => 119, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-14 08:07:56', + 'end_date' => '2025-07-14 13:07:56', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1620, + 'soldier_id' => 119, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-21 13:56:03', + 'end_date' => '2025-07-21 14:56:03', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1621, + 'soldier_id' => 119, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-29 01:01:38', + 'end_date' => '2025-07-29 05:01:38', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1622, + 'soldier_id' => 119, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-12 06:59:57', + 'end_date' => '2025-07-12 08:59:57', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1623, + 'soldier_id' => 119, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-07 20:24:06', + 'end_date' => '2025-07-07 21:24:06', + 'created_at' => '2025-05-13T06:41:51.000000Z', + 'updated_at' => '2025-05-13T06:41:51.000000Z', + ], + [ + 'id' => 1624, + 'soldier_id' => 119, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-12 20:58:53', + 'end_date' => '2025-07-13 01:58:53', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1625, + 'soldier_id' => 119, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-29 08:11:36', + 'end_date' => '2025-07-29 12:11:36', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1626, + 'soldier_id' => 119, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-13 00:49:42', + 'end_date' => '2025-07-13 02:49:42', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1627, + 'soldier_id' => 119, + 'constraint_type' => 'School', + 'start_date' => '2025-07-26 08:12:03', + 'end_date' => '2025-07-26 12:12:03', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1628, + 'soldier_id' => 119, + 'constraint_type' => 'School', + 'start_date' => '2025-07-04 16:48:16', + 'end_date' => '2025-07-04 19:48:16', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1629, + 'soldier_id' => 119, + 'constraint_type' => 'School', + 'start_date' => '2025-07-16 05:58:51', + 'end_date' => '2025-07-16 07:58:51', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1630, + 'soldier_id' => 76, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-25 09:39:33', + 'end_date' => '2025-07-25 14:39:33', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1631, + 'soldier_id' => 76, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-09 02:45:47', + 'end_date' => '2025-07-09 07:45:47', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1632, + 'soldier_id' => 76, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-26 20:51:30', + 'end_date' => '2025-07-26 23:51:30', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1633, + 'soldier_id' => 76, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-09 20:26:48', + 'end_date' => '2025-07-09 21:26:48', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1634, + 'soldier_id' => 76, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-12 20:07:45', + 'end_date' => '2025-07-12 23:07:45', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1635, + 'soldier_id' => 76, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-22 10:51:48', + 'end_date' => '2025-07-22 14:51:48', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1636, + 'soldier_id' => 76, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-26 00:44:28', + 'end_date' => '2025-07-26 05:44:28', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1637, + 'soldier_id' => 76, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-28 05:29:44', + 'end_date' => '2025-07-28 08:29:44', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1638, + 'soldier_id' => 76, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-09 13:30:14', + 'end_date' => '2025-07-09 14:30:14', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1639, + 'soldier_id' => 76, + 'constraint_type' => 'School', + 'start_date' => '2025-07-07 22:20:27', + 'end_date' => '2025-07-07 23:20:27', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1640, + 'soldier_id' => 76, + 'constraint_type' => 'School', + 'start_date' => '2025-07-02 00:06:27', + 'end_date' => '2025-07-02 02:06:27', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1641, + 'soldier_id' => 76, + 'constraint_type' => 'School', + 'start_date' => '2025-07-21 01:53:37', + 'end_date' => '2025-07-21 03:53:37', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1642, + 'soldier_id' => 76, + 'constraint_type' => 'School', + 'start_date' => '2025-07-04 08:09:15', + 'end_date' => '2025-07-04 11:09:15', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1643, + 'soldier_id' => 48, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-07 19:02:20', + 'end_date' => '2025-07-07 23:02:20', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1644, + 'soldier_id' => 48, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-07 13:30:17', + 'end_date' => '2025-07-07 17:30:17', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1645, + 'soldier_id' => 48, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-23 06:29:59', + 'end_date' => '2025-07-23 07:29:59', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1646, + 'soldier_id' => 48, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-05 05:55:07', + 'end_date' => '2025-07-05 08:55:07', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1647, + 'soldier_id' => 48, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-15 14:34:56', + 'end_date' => '2025-07-15 19:34:56', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1648, + 'soldier_id' => 48, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-19 03:06:24', + 'end_date' => '2025-07-19 08:06:24', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1649, + 'soldier_id' => 48, + 'constraint_type' => 'School', + 'start_date' => '2025-07-18 10:24:33', + 'end_date' => '2025-07-18 11:24:33', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1650, + 'soldier_id' => 48, + 'constraint_type' => 'School', + 'start_date' => '2025-07-24 01:18:20', + 'end_date' => '2025-07-24 02:18:20', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1651, + 'soldier_id' => 48, + 'constraint_type' => 'School', + 'start_date' => '2025-07-09 06:20:23', + 'end_date' => '2025-07-09 10:20:23', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1652, + 'soldier_id' => 48, + 'constraint_type' => 'School', + 'start_date' => '2025-07-20 02:01:33', + 'end_date' => '2025-07-20 07:01:33', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1653, + 'soldier_id' => 31, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-10 00:05:22', + 'end_date' => '2025-07-10 03:05:22', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1654, + 'soldier_id' => 31, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-08 17:33:49', + 'end_date' => '2025-07-08 20:33:49', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1655, + 'soldier_id' => 31, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-07 14:17:47', + 'end_date' => '2025-07-07 16:17:47', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1656, + 'soldier_id' => 31, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-29 20:10:53', + 'end_date' => '2025-07-29 22:10:53', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1657, + 'soldier_id' => 31, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-16 20:47:32', + 'end_date' => '2025-07-16 22:47:32', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1658, + 'soldier_id' => 31, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-08 15:49:27', + 'end_date' => '2025-07-08 20:49:27', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1659, + 'soldier_id' => 31, + 'constraint_type' => 'School', + 'start_date' => '2025-07-18 07:52:12', + 'end_date' => '2025-07-18 09:52:12', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1660, + 'soldier_id' => 154, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-21 07:46:42', + 'end_date' => '2025-07-21 09:46:42', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1661, + 'soldier_id' => 154, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-10 04:05:23', + 'end_date' => '2025-07-10 09:05:23', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1662, + 'soldier_id' => 154, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-22 20:08:04', + 'end_date' => '2025-07-23 00:08:04', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1663, + 'soldier_id' => 154, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-01 16:13:56', + 'end_date' => '2025-07-01 19:13:56', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1664, + 'soldier_id' => 44, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-28 12:47:52', + 'end_date' => '2025-07-28 13:47:52', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1665, + 'soldier_id' => 44, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-06 17:28:36', + 'end_date' => '2025-07-06 19:28:36', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1666, + 'soldier_id' => 44, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-03 16:51:51', + 'end_date' => '2025-07-03 20:51:51', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1667, + 'soldier_id' => 44, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-01 09:10:42', + 'end_date' => '2025-07-01 11:10:42', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1668, + 'soldier_id' => 44, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-17 13:19:29', + 'end_date' => '2025-07-17 18:19:29', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1669, + 'soldier_id' => 44, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-28 20:03:20', + 'end_date' => '2025-07-29 00:03:20', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1670, + 'soldier_id' => 44, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-27 20:48:04', + 'end_date' => '2025-07-27 22:48:04', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1671, + 'soldier_id' => 44, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-06 20:28:12', + 'end_date' => '2025-07-06 23:28:12', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1672, + 'soldier_id' => 44, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-05 20:20:49', + 'end_date' => '2025-07-05 21:20:49', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1673, + 'soldier_id' => 44, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-01 15:37:30', + 'end_date' => '2025-07-01 16:37:30', + 'created_at' => '2025-05-13T06:41:52.000000Z', + 'updated_at' => '2025-05-13T06:41:52.000000Z', + ], + [ + 'id' => 1674, + 'soldier_id' => 44, + 'constraint_type' => 'School', + 'start_date' => '2025-07-14 06:20:08', + 'end_date' => '2025-07-14 11:20:08', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1675, + 'soldier_id' => 44, + 'constraint_type' => 'School', + 'start_date' => '2025-07-03 21:40:06', + 'end_date' => '2025-07-03 23:40:06', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1676, + 'soldier_id' => 44, + 'constraint_type' => 'School', + 'start_date' => '2025-07-04 14:02:02', + 'end_date' => '2025-07-04 19:02:02', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1677, + 'soldier_id' => 117, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-21 12:51:18', + 'end_date' => '2025-07-21 17:51:18', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1678, + 'soldier_id' => 117, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-08 02:25:44', + 'end_date' => '2025-07-08 03:25:44', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1679, + 'soldier_id' => 117, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-29 07:30:17', + 'end_date' => '2025-07-29 11:30:17', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1680, + 'soldier_id' => 117, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-06 21:18:54', + 'end_date' => '2025-07-07 01:18:54', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1681, + 'soldier_id' => 117, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-23 21:35:50', + 'end_date' => '2025-07-23 22:35:50', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1682, + 'soldier_id' => 117, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-22 20:37:24', + 'end_date' => '2025-07-23 01:37:24', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1683, + 'soldier_id' => 117, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-05 20:46:29', + 'end_date' => '2025-07-05 23:46:29', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1684, + 'soldier_id' => 117, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-18 20:17:22', + 'end_date' => '2025-07-18 21:17:22', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1685, + 'soldier_id' => 117, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-12 05:04:18', + 'end_date' => '2025-07-12 07:04:18', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1686, + 'soldier_id' => 117, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-01 09:02:52', + 'end_date' => '2025-07-01 12:02:52', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1687, + 'soldier_id' => 117, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-17 02:57:10', + 'end_date' => '2025-07-17 04:57:10', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1688, + 'soldier_id' => 117, + 'constraint_type' => 'School', + 'start_date' => '2025-07-04 22:27:47', + 'end_date' => '2025-07-05 00:27:47', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1689, + 'soldier_id' => 117, + 'constraint_type' => 'School', + 'start_date' => '2025-07-16 01:19:21', + 'end_date' => '2025-07-16 03:19:21', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1690, + 'soldier_id' => 93, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-20 23:53:05', + 'end_date' => '2025-07-21 01:53:05', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1691, + 'soldier_id' => 93, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-13 01:03:47', + 'end_date' => '2025-07-13 06:03:47', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1692, + 'soldier_id' => 93, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-28 09:12:48', + 'end_date' => '2025-07-28 11:12:48', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1693, + 'soldier_id' => 93, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-08 02:26:36', + 'end_date' => '2025-07-08 03:26:36', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1694, + 'soldier_id' => 93, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-29 14:54:31', + 'end_date' => '2025-07-29 18:54:31', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1695, + 'soldier_id' => 93, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-30 00:24:41', + 'end_date' => '2025-07-30 05:24:41', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1696, + 'soldier_id' => 93, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-05 05:41:11', + 'end_date' => '2025-07-05 09:41:11', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1697, + 'soldier_id' => 93, + 'constraint_type' => 'School', + 'start_date' => '2025-07-20 19:14:12', + 'end_date' => '2025-07-20 22:14:12', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1698, + 'soldier_id' => 93, + 'constraint_type' => 'School', + 'start_date' => '2025-07-10 11:36:45', + 'end_date' => '2025-07-10 12:36:45', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1699, + 'soldier_id' => 93, + 'constraint_type' => 'School', + 'start_date' => '2025-07-14 18:03:59', + 'end_date' => '2025-07-14 21:03:59', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1700, + 'soldier_id' => 123, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-14 09:11:45', + 'end_date' => '2025-07-14 14:11:45', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1701, + 'soldier_id' => 123, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-24 10:03:23', + 'end_date' => '2025-07-24 11:03:23', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1702, + 'soldier_id' => 123, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-09 10:11:12', + 'end_date' => '2025-07-09 15:11:12', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1703, + 'soldier_id' => 123, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-10 08:05:35', + 'end_date' => '2025-07-10 11:05:35', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1704, + 'soldier_id' => 123, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-19 20:30:26', + 'end_date' => '2025-07-19 23:30:26', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1705, + 'soldier_id' => 123, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-27 22:09:30', + 'end_date' => '2025-07-28 03:09:30', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1706, + 'soldier_id' => 123, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-11 13:31:20', + 'end_date' => '2025-07-11 17:31:20', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1707, + 'soldier_id' => 123, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-27 12:26:44', + 'end_date' => '2025-07-27 14:26:44', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1708, + 'soldier_id' => 123, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-13 13:23:12', + 'end_date' => '2025-07-13 16:23:12', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1709, + 'soldier_id' => 123, + 'constraint_type' => 'School', + 'start_date' => '2025-07-02 23:41:48', + 'end_date' => '2025-07-03 02:41:48', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1710, + 'soldier_id' => 123, + 'constraint_type' => 'School', + 'start_date' => '2025-07-18 22:05:47', + 'end_date' => '2025-07-19 02:05:47', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1711, + 'soldier_id' => 156, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-06 19:05:34', + 'end_date' => '2025-07-06 20:05:34', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1712, + 'soldier_id' => 156, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-20 00:17:30', + 'end_date' => '2025-07-20 02:17:30', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1713, + 'soldier_id' => 156, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-12 21:39:33', + 'end_date' => '2025-07-13 00:39:33', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1714, + 'soldier_id' => 156, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-19 09:09:10', + 'end_date' => '2025-07-19 11:09:10', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1715, + 'soldier_id' => 156, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-12 20:44:52', + 'end_date' => '2025-07-12 21:44:52', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1716, + 'soldier_id' => 156, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-29 19:11:28', + 'end_date' => '2025-07-29 23:11:28', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1717, + 'soldier_id' => 156, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-14 14:21:16', + 'end_date' => '2025-07-14 15:21:16', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1718, + 'soldier_id' => 156, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-03 22:36:45', + 'end_date' => '2025-07-04 03:36:45', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1719, + 'soldier_id' => 156, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-06 20:38:42', + 'end_date' => '2025-07-06 22:38:42', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1720, + 'soldier_id' => 156, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-11 05:56:43', + 'end_date' => '2025-07-11 08:56:43', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1721, + 'soldier_id' => 156, + 'constraint_type' => 'School', + 'start_date' => '2025-07-03 08:57:26', + 'end_date' => '2025-07-03 12:57:26', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1722, + 'soldier_id' => 69, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-28 23:58:32', + 'end_date' => '2025-07-29 00:58:32', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1723, + 'soldier_id' => 69, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-12 00:56:03', + 'end_date' => '2025-07-12 01:56:03', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1724, + 'soldier_id' => 69, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-09 17:35:44', + 'end_date' => '2025-07-09 21:35:44', + 'created_at' => '2025-05-13T06:41:53.000000Z', + 'updated_at' => '2025-05-13T06:41:53.000000Z', + ], + [ + 'id' => 1725, + 'soldier_id' => 69, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-01 09:41:30', + 'end_date' => '2025-07-01 11:41:30', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1726, + 'soldier_id' => 69, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-16 15:25:26', + 'end_date' => '2025-07-16 18:25:26', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1727, + 'soldier_id' => 69, + 'constraint_type' => 'School', + 'start_date' => '2025-07-22 10:20:10', + 'end_date' => '2025-07-22 11:20:10', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1728, + 'soldier_id' => 69, + 'constraint_type' => 'School', + 'start_date' => '2025-07-08 12:02:11', + 'end_date' => '2025-07-08 14:02:11', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1729, + 'soldier_id' => 69, + 'constraint_type' => 'School', + 'start_date' => '2025-07-08 22:48:23', + 'end_date' => '2025-07-09 03:48:23', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1730, + 'soldier_id' => 69, + 'constraint_type' => 'School', + 'start_date' => '2025-07-13 03:22:49', + 'end_date' => '2025-07-13 06:22:49', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1731, + 'soldier_id' => 128, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-07 08:25:59', + 'end_date' => '2025-07-07 10:25:59', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1732, + 'soldier_id' => 128, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-13 19:22:53', + 'end_date' => '2025-07-13 21:22:53', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1733, + 'soldier_id' => 128, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-22 04:09:05', + 'end_date' => '2025-07-22 05:09:05', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1734, + 'soldier_id' => 128, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-17 23:19:04', + 'end_date' => '2025-07-18 01:19:04', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1735, + 'soldier_id' => 128, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-05 13:37:21', + 'end_date' => '2025-07-05 17:37:21', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1736, + 'soldier_id' => 128, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-17 10:07:08', + 'end_date' => '2025-07-17 12:07:08', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1737, + 'soldier_id' => 128, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-14 07:45:09', + 'end_date' => '2025-07-14 12:45:09', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1738, + 'soldier_id' => 128, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-26 20:23:54', + 'end_date' => '2025-07-26 22:23:54', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1739, + 'soldier_id' => 128, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-08 19:36:33', + 'end_date' => '2025-07-08 20:36:33', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1740, + 'soldier_id' => 128, + 'constraint_type' => 'School', + 'start_date' => '2025-07-08 16:51:14', + 'end_date' => '2025-07-08 19:51:14', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1741, + 'soldier_id' => 128, + 'constraint_type' => 'School', + 'start_date' => '2025-07-25 22:09:17', + 'end_date' => '2025-07-26 03:09:17', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1742, + 'soldier_id' => 128, + 'constraint_type' => 'School', + 'start_date' => '2025-07-18 21:59:12', + 'end_date' => '2025-07-18 22:59:12', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1743, + 'soldier_id' => 67, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-21 04:16:10', + 'end_date' => '2025-07-21 09:16:10', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1744, + 'soldier_id' => 67, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-29 16:22:01', + 'end_date' => '2025-07-29 20:22:01', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1745, + 'soldier_id' => 67, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-27 23:10:37', + 'end_date' => '2025-07-28 01:10:37', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1746, + 'soldier_id' => 67, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-12 19:54:45', + 'end_date' => '2025-07-12 23:54:45', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1747, + 'soldier_id' => 67, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-22 19:12:39', + 'end_date' => '2025-07-22 21:12:39', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1748, + 'soldier_id' => 67, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-20 23:14:57', + 'end_date' => '2025-07-21 03:14:57', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1749, + 'soldier_id' => 32, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-13 06:42:49', + 'end_date' => '2025-07-13 11:42:49', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1750, + 'soldier_id' => 32, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-06 22:33:39', + 'end_date' => '2025-07-07 02:33:39', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1751, + 'soldier_id' => 32, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-11 19:47:19', + 'end_date' => '2025-07-11 20:47:19', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1752, + 'soldier_id' => 32, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-10 13:35:15', + 'end_date' => '2025-07-10 15:35:15', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1753, + 'soldier_id' => 32, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-24 11:41:50', + 'end_date' => '2025-07-24 13:41:50', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1754, + 'soldier_id' => 32, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-07 20:42:10', + 'end_date' => '2025-07-08 01:42:10', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1755, + 'soldier_id' => 32, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-08 05:24:35', + 'end_date' => '2025-07-08 08:24:35', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1756, + 'soldier_id' => 32, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-20 05:07:24', + 'end_date' => '2025-07-20 10:07:24', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1757, + 'soldier_id' => 32, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-10 10:56:26', + 'end_date' => '2025-07-10 13:56:26', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1758, + 'soldier_id' => 32, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-15 13:54:43', + 'end_date' => '2025-07-15 18:54:43', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1759, + 'soldier_id' => 32, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-20 07:57:46', + 'end_date' => '2025-07-20 09:57:46', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1760, + 'soldier_id' => 32, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-10 13:55:02', + 'end_date' => '2025-07-10 14:55:02', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1761, + 'soldier_id' => 32, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-29 09:03:02', + 'end_date' => '2025-07-29 12:03:02', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1762, + 'soldier_id' => 32, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-22 03:07:49', + 'end_date' => '2025-07-22 05:07:49', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1763, + 'soldier_id' => 32, + 'constraint_type' => 'School', + 'start_date' => '2025-07-01 19:27:36', + 'end_date' => '2025-07-02 00:27:36', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1764, + 'soldier_id' => 32, + 'constraint_type' => 'School', + 'start_date' => '2025-07-04 08:21:12', + 'end_date' => '2025-07-04 13:21:12', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1765, + 'soldier_id' => 81, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-19 10:24:46', + 'end_date' => '2025-07-19 11:24:46', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1766, + 'soldier_id' => 81, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-24 22:07:28', + 'end_date' => '2025-07-24 23:07:28', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1767, + 'soldier_id' => 81, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-27 20:42:34', + 'end_date' => '2025-07-27 21:42:34', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1768, + 'soldier_id' => 81, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-21 20:04:17', + 'end_date' => '2025-07-21 23:04:17', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1769, + 'soldier_id' => 81, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-01 16:40:25', + 'end_date' => '2025-07-01 21:40:25', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1770, + 'soldier_id' => 81, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-06 16:07:06', + 'end_date' => '2025-07-06 17:07:06', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1771, + 'soldier_id' => 81, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-30 04:52:37', + 'end_date' => '2025-07-30 06:52:37', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1772, + 'soldier_id' => 81, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-21 01:16:16', + 'end_date' => '2025-07-21 06:16:16', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1773, + 'soldier_id' => 81, + 'constraint_type' => 'School', + 'start_date' => '2025-07-11 01:22:55', + 'end_date' => '2025-07-11 02:22:55', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1774, + 'soldier_id' => 81, + 'constraint_type' => 'School', + 'start_date' => '2025-07-01 04:59:44', + 'end_date' => '2025-07-01 09:59:44', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1775, + 'soldier_id' => 81, + 'constraint_type' => 'School', + 'start_date' => '2025-07-02 02:06:35', + 'end_date' => '2025-07-02 07:06:35', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1776, + 'soldier_id' => 8, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-13 08:26:34', + 'end_date' => '2025-07-13 10:26:34', + 'created_at' => '2025-05-13T06:41:54.000000Z', + 'updated_at' => '2025-05-13T06:41:54.000000Z', + ], + [ + 'id' => 1777, + 'soldier_id' => 8, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-13 20:29:32', + 'end_date' => '2025-07-13 21:29:32', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1778, + 'soldier_id' => 8, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-13 20:47:13', + 'end_date' => '2025-07-14 01:47:13', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1779, + 'soldier_id' => 8, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-18 12:34:08', + 'end_date' => '2025-07-18 14:34:08', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1780, + 'soldier_id' => 8, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-07 06:35:30', + 'end_date' => '2025-07-07 07:35:30', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1781, + 'soldier_id' => 8, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-23 21:36:30', + 'end_date' => '2025-07-24 01:36:30', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1782, + 'soldier_id' => 8, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-01 09:43:27', + 'end_date' => '2025-07-01 13:43:27', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1783, + 'soldier_id' => 8, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-19 03:27:30', + 'end_date' => '2025-07-19 08:27:30', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1784, + 'soldier_id' => 8, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-19 21:51:41', + 'end_date' => '2025-07-19 22:51:41', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1785, + 'soldier_id' => 73, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-27 08:23:45', + 'end_date' => '2025-07-27 11:23:45', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1786, + 'soldier_id' => 73, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-07 10:44:35', + 'end_date' => '2025-07-07 13:44:35', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1787, + 'soldier_id' => 73, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-29 20:51:45', + 'end_date' => '2025-07-29 21:51:45', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1788, + 'soldier_id' => 73, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-27 04:53:13', + 'end_date' => '2025-07-27 09:53:13', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1789, + 'soldier_id' => 73, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-21 05:07:54', + 'end_date' => '2025-07-21 09:07:54', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1790, + 'soldier_id' => 73, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-06 09:25:44', + 'end_date' => '2025-07-06 12:25:44', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1791, + 'soldier_id' => 73, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-03 03:16:49', + 'end_date' => '2025-07-03 04:16:49', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1792, + 'soldier_id' => 73, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-26 20:16:32', + 'end_date' => '2025-07-27 00:16:32', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1793, + 'soldier_id' => 73, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-22 14:32:27', + 'end_date' => '2025-07-22 18:32:27', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1794, + 'soldier_id' => 73, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-05 08:50:08', + 'end_date' => '2025-07-05 11:50:08', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1795, + 'soldier_id' => 73, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-30 21:03:09', + 'end_date' => '2025-08-01 01:03:09', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1796, + 'soldier_id' => 72, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-06 17:03:30', + 'end_date' => '2025-07-06 19:03:30', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1797, + 'soldier_id' => 72, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-26 00:56:11', + 'end_date' => '2025-07-26 03:56:11', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1798, + 'soldier_id' => 72, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-20 18:01:08', + 'end_date' => '2025-07-20 23:01:08', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1799, + 'soldier_id' => 72, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-11 10:27:02', + 'end_date' => '2025-07-11 13:27:02', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1800, + 'soldier_id' => 72, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-24 05:09:34', + 'end_date' => '2025-07-24 06:09:34', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1801, + 'soldier_id' => 72, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-30 08:51:17', + 'end_date' => '2025-07-30 09:51:17', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1802, + 'soldier_id' => 72, + 'constraint_type' => 'School', + 'start_date' => '2025-07-04 19:33:04', + 'end_date' => '2025-07-04 23:33:04', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1803, + 'soldier_id' => 72, + 'constraint_type' => 'School', + 'start_date' => '2025-07-28 01:18:00', + 'end_date' => '2025-07-28 03:18:00', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1804, + 'soldier_id' => 72, + 'constraint_type' => 'School', + 'start_date' => '2025-07-30 09:32:40', + 'end_date' => '2025-07-30 10:32:40', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1805, + 'soldier_id' => 125, + 'constraint_type' => 'Low priority not weekend', + 'start_date' => '2025-07-07 12:37:05', + 'end_date' => '2025-07-07 14:37:05', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1806, + 'soldier_id' => 125, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-21 17:29:47', + 'end_date' => '2025-07-21 22:29:47', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1807, + 'soldier_id' => 125, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-22 06:49:16', + 'end_date' => '2025-07-22 11:49:16', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1808, + 'soldier_id' => 125, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-03 10:35:16', + 'end_date' => '2025-07-03 12:35:16', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1809, + 'soldier_id' => 125, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-12 12:33:42', + 'end_date' => '2025-07-12 14:33:42', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1810, + 'soldier_id' => 125, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-21 22:51:07', + 'end_date' => '2025-07-22 02:51:07', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1811, + 'soldier_id' => 125, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-21 11:10:40', + 'end_date' => '2025-07-21 16:10:40', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1812, + 'soldier_id' => 125, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-08 22:49:57', + 'end_date' => '2025-07-09 03:49:57', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1813, + 'soldier_id' => 125, + 'constraint_type' => 'School', + 'start_date' => '2025-07-04 12:33:38', + 'end_date' => '2025-07-04 15:33:38', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1814, + 'soldier_id' => 125, + 'constraint_type' => 'School', + 'start_date' => '2025-07-26 22:47:03', + 'end_date' => '2025-07-26 23:47:03', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1815, + 'soldier_id' => 150, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-14 16:22:44', + 'end_date' => '2025-07-14 19:22:44', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1816, + 'soldier_id' => 150, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-26 17:50:38', + 'end_date' => '2025-07-26 22:50:38', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1817, + 'soldier_id' => 150, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-21 08:06:14', + 'end_date' => '2025-07-21 10:06:14', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1818, + 'soldier_id' => 150, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-24 20:42:29', + 'end_date' => '2025-07-24 21:42:29', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1819, + 'soldier_id' => 150, + 'constraint_type' => 'Not Thursday evening', + 'start_date' => '2025-07-19 04:28:35', + 'end_date' => '2025-07-19 06:28:35', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1820, + 'soldier_id' => 150, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-25 18:26:07', + 'end_date' => '2025-07-25 20:26:07', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1821, + 'soldier_id' => 150, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-13 06:00:25', + 'end_date' => '2025-07-13 07:00:25', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1822, + 'soldier_id' => 150, + 'constraint_type' => 'Medical', + 'start_date' => '2025-07-25 21:24:22', + 'end_date' => '2025-07-25 22:24:22', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1823, + 'soldier_id' => 86, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-29 14:43:05', + 'end_date' => '2025-07-29 16:43:05', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1824, + 'soldier_id' => 86, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-27 03:24:29', + 'end_date' => '2025-07-27 06:24:29', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1825, + 'soldier_id' => 86, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-16 23:38:19', + 'end_date' => '2025-07-17 02:38:19', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1826, + 'soldier_id' => 86, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-28 03:18:34', + 'end_date' => '2025-07-28 05:18:34', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1827, + 'soldier_id' => 86, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-17 19:43:02', + 'end_date' => '2025-07-17 20:43:02', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1828, + 'soldier_id' => 86, + 'constraint_type' => 'Low priority not task', + 'start_date' => '2025-07-16 12:10:00', + 'end_date' => '2025-07-16 17:10:00', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1829, + 'soldier_id' => 86, + 'constraint_type' => 'Not Sunday morning', + 'start_date' => '2025-07-15 10:47:19', + 'end_date' => '2025-07-15 13:47:19', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1830, + 'soldier_id' => 86, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-11 12:37:53', + 'end_date' => '2025-07-11 15:37:53', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1831, + 'soldier_id' => 86, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-23 02:33:03', + 'end_date' => '2025-07-23 04:33:03', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1832, + 'soldier_id' => 58, + 'constraint_type' => 'Not weekend', + 'start_date' => '2025-07-20 19:42:22', + 'end_date' => '2025-07-20 22:42:22', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1833, + 'soldier_id' => 58, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-05 11:09:19', + 'end_date' => '2025-07-05 14:09:19', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1834, + 'soldier_id' => 58, + 'constraint_type' => 'Not task', + 'start_date' => '2025-07-17 17:09:54', + 'end_date' => '2025-07-17 21:09:54', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1835, + 'soldier_id' => 58, + 'constraint_type' => 'Not evening', + 'start_date' => '2025-07-28 20:25:27', + 'end_date' => '2025-07-29 01:25:27', + 'created_at' => '2025-05-13T06:41:55.000000Z', + 'updated_at' => '2025-05-13T06:41:55.000000Z', + ], + [ + 'id' => 1836, + 'soldier_id' => 58, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-15 11:01:16', + 'end_date' => '2025-07-15 15:01:16', + 'created_at' => '2025-05-13T06:41:56.000000Z', + 'updated_at' => '2025-05-13T06:41:56.000000Z', + ], + [ + 'id' => 1837, + 'soldier_id' => 58, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-23 09:37:37', + 'end_date' => '2025-07-23 12:37:37', + 'created_at' => '2025-05-13T06:41:56.000000Z', + 'updated_at' => '2025-05-13T06:41:56.000000Z', + ], + [ + 'id' => 1838, + 'soldier_id' => 58, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-07 03:49:43', + 'end_date' => '2025-07-07 06:49:43', + 'created_at' => '2025-05-13T06:41:56.000000Z', + 'updated_at' => '2025-05-13T06:41:56.000000Z', + ], + [ + 'id' => 1839, + 'soldier_id' => 58, + 'constraint_type' => 'Vacation', + 'start_date' => '2025-07-28 23:11:32', + 'end_date' => '2025-07-29 02:11:32', + 'created_at' => '2025-05-13T06:41:56.000000Z', + 'updated_at' => '2025-05-13T06:41:56.000000Z', + ], + [ + 'id' => 1840, + 'soldier_id' => 58, + 'constraint_type' => 'School', + 'start_date' => '2025-07-07 19:58:56', + 'end_date' => '2025-07-07 23:58:56', + 'created_at' => '2025-05-13T06:41:56.000000Z', + 'updated_at' => '2025-05-13T06:41:56.000000Z', + ], + [ + 'id' => 1841, + 'soldier_id' => 58, + 'constraint_type' => 'School', + 'start_date' => '2025-07-21 00:43:28', + 'end_date' => '2025-07-21 04:43:28', + 'created_at' => '2025-05-13T06:41:56.000000Z', + 'updated_at' => '2025-05-13T06:41:56.000000Z', + ], + [ + 'id' => 1842, + 'soldier_id' => 58, + 'constraint_type' => 'School', + 'start_date' => '2025-07-08 02:11:27', + 'end_date' => '2025-07-08 05:11:27', + 'created_at' => '2025-05-13T06:41:56.000000Z', + 'updated_at' => '2025-05-13T06:41:56.000000Z', + ], + ]; + + collect($constraints)->map(function ($constraint) { + $c = new Constraint; + $c->soldier_id = $constraint['soldier_id']; + $c->constraint_type = $constraint['constraint_type']; + $c->start_date = $constraint['start_date']; + $c->end_date = $constraint['end_date']; + $c->save(); + }); + $this->j(); + + } + + protected function j() + { + $ids = Constraint::get()->filter(fn (Constraint $constraint) => $constraint->id % 2 == 0); + collect($ids)->each(fn (Constraint $constraint) => \DB::table('constraints')->delete($constraint->id)); + } + + public function k() + { + $users_id = \App\Models\User::all('id')->pluck('id'); + $t = new \App\Services\T; + collect($users_id)->each(function ($userid) use ($t) { + $t->createConstraints($userid); + }); + // $soldiers = Soldier::get(); + // $soldiers->each(function(Soldier $soldier){ + // $qualifications = collect($soldier->qualifications); + // if($qualifications->intersect(['Mid Scat', 'Scat 8', 'Scat C', 'SCAT SAR'])->isNotEmpty()){ + // $soldier->max_shifts++; + // } + // }); + } + + public function createConstraints(int $userId) + { + + for ($i = 0; $i < count(ConstraintType::cases()); $i++) { + $times = ConstraintType::getLimit()[ConstraintType::cases()[$i]->value] > 0 + ? random_int(0, ConstraintType::getLimit()[ConstraintType::cases()[$i]->value]) : + random_int(0, random_int(0, 2)); + for ($j = 0; $j < $times; $j++) { + $startDate = call_user_func([$this, ConstraintType::cases()[$i]->name]); + Constraint::factory()->create([ + 'soldier_id' => User::find($userId)->userable_id, + 'constraint_type' => ConstraintType::cases()[$i], + 'start_date' => $startDate, + 'end_date' => $startDate->copy()->addHours(random_int(1, 5)), + ]); + } + } + } + + protected function getDatesOfMonth($month = null) + { + $month = now()->addMonths(6); + // $month ??= now()->addMonth(); + + return CarbonPeriod::between($month->startOfMonth(), $month->copy()->endOfMonth()); + } + + protected function getThursday() + { + $period = $this->getDatesOfMonth(); + + return collect($period) + ->filter( + fn ($date) => Carbon::parse($date)->isThursday() + )->all(); + } + + protected function getSunday() + { + $period = $this->getDatesOfMonth(); + + return collect($period) + ->filter( + fn ($date) => Carbon::parse($date)->isSunday() + )->all(); + } + + protected function getWeekends() + { + $period = $this->getDatesOfMonth(); + + return collect($period) + ->filter( + fn ($date) => Carbon::parse($date)->isFriday() || Carbon::parse($date)->isSaturday() + ) + ->all(); + } + + protected function getTime() + { + return Carbon::now()->subSeconds(rand(0, 30 * 24 * 60 * 60)); + } + + protected function getNightHour() + { + $time = $this->getTime(); + if ($time->hour < 20 && $time->hour >= 8) { + return $time->addHours(20 - $time->hour); + } + + return $time; + } + + protected function getMorningHour() + { + $time = $this->getTime(); + if ($time->hour < 8 || $time->hour > 19) { + return $time->addHours(12); + } + + return $time; + } + + protected function NOT_WEEKEND() + { + $time = $this->getTime(); + + return Carbon::parse(collect($this->getWeekends())->random()) + ->setTime( + $time->hour, + $time->minute, + $time->second + ); + } + + protected function LOW_PRIORITY_NOT_WEEKEND() + { + $time = $this->getTime(); + + return Carbon::parse(collect($this->getWeekends())->random()) + ->setTime( + $time->hour, + $time->minute, + $time->second + ); + } + + protected function NOT_TASK() + { + $time = $this->getTime(); + + return Carbon::parse(collect($this->getDatesOfMonth())->random()) + ->setTime( + $time->hour, + $time->minute, + $time->second + ); + } + + protected function LOW_PRIORITY_NOT_TASK() + { + $time = $this->getTime(); + + return Carbon::parse(collect($this->getDatesOfMonth())->random()) + ->setTime( + $time->hour, + $time->minute, + $time->second + ); + } + + protected function NOT_EVENING() + { + $date = collect($this->getDatesOfMonth())->random(); + $nightTime = $this->getNightHour(); + + return $date->copy()->setTime($nightTime->hour, $nightTime->minute, $nightTime->second); + } + + protected function NOT_THURSDAY_EVENING() + { + $date = collect($this->getThursday())->random(); + $nightTime = $this->getNightHour(); + + return $date->copy()->setTime($nightTime->hour, $nightTime->minute, $nightTime->second); + } + + protected function VACATION() + { + $time = $this->getTime(); + + return Carbon::parse(collect($this->getDatesOfMonth())->random()) + ->setTime( + $time->hour, + $time->minute, + $time->second + ); + } + + protected function MEDICAL() + { + $time = $this->getTime(); + + return Carbon::parse(collect($this->getDatesOfMonth())->random()) + ->setTime( + $time->hour, + $time->minute, + $time->second + ); + } + + protected function SCHOOL() + { + $time = $this->getTime(); + + return Carbon::parse(collect($this->getDatesOfMonth())->random()) + ->setTime( + $time->hour, + $time->minute, + $time->second + ); + } + + protected function NOT_SUNDAY_MORNING() + { + $date = collect($this->getSunday())->random(); + $morningTime = $this->getMorningHour(); + + return $date->copy()->setTime($morningTime->hour, $morningTime->minute, $morningTime->second); + } + + public function deleteUnCommanders() + { + $teamCommanders = User::whereHas( + 'roles', + fn ($query) => $query->where('name', 'team-commander') + )->get(); + $teamCommanders->map(function(User $user){ + $team = Team::where('commander_id', $user->userable_id)->first(); + if(!$team){ + $user->removeRole('team-commander'); + } + }); + $departmentCommanders = User::whereHas( + 'roles', + fn ($query) => $query->where('name', 'department-commander') + )->get(); + $departmentCommanders->map(function(User $user){ + $department = Department::where('commander_id', $user->userable_id)->first(); + if(!$department){ + $user->removeRole('department-commander'); + } + }); + } +} diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 4a84753..1af1e9c 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -3,6 +3,9 @@ namespace Database\Seeders; use Illuminate\Database\Seeder; +use App\Models\Soldier; +use App\Models\User; +use App\Enums\ConstraintType; class DatabaseSeeder extends Seeder { @@ -11,5 +14,20 @@ public function run(): void $this->call([ PermissionSeeder::class, ]); + User::factory()->create([ + 'first_name' => 'newspace', + 'last_name' => 'newspace', + 'password' => '1234567', + 'userable_id' => Soldier::factory()->create([ + 'qualifications' => [], + 'capacity' => 10, + 'max_weekends' => 10, + 'max_shifts' => 10, + 'max_nights' => 10, + 'course' => fake()->numberBetween(0, 5), + 'is_reservist' => false, + 'constraints_limit' => ConstraintType::getLimit(), + ])->id, + ])->assignRole(['soldier', 'manager']); } } From e484d96d43344be587b4e2fcabac10def630364d Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 22 Jun 2025 11:46:42 +0300 Subject: [PATCH 174/259] push --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Services/T.php | 24436 ------------------- 2 files changed, 1 insertion(+), 24437 deletions(-) delete mode 100644 app/Services/T.php diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 4ebb7e5..261d196 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_fix_18 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_fix_19 flavor: | latest=false tags: | diff --git a/app/Services/T.php b/app/Services/T.php deleted file mode 100644 index aafaf4f..0000000 --- a/app/Services/T.php +++ /dev/null @@ -1,24436 +0,0 @@ - 8, - 'name' => 'ציוד יום', - 'start_hour' => '06:00:00Z', - 'duration' => 800, - 'parallel_weight' => 0, - 'type' => 'ציוד', - 'color' => '#A5D3A1', - 'is_alert' => 'false', - 'is_weekend' => 'false', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => null, - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday","Thursday"]}', - 'created_at' => '2025-02-18T12:40:47.000Z', - 'updated_at' => '2025-03-04T07:39:16.000Z', - 'deleted_at' => null, - 'kind' => 'Regular', - ], - [ - 'id' => 21, - 'name' => 'פיקוד SAR', - 'start_hour' => '06:30:00Z', - 'duration' => 900, - 'parallel_weight' => 0, - 'type' => 'פיקוד SAR', - 'color' => '#f793ff', - 'is_alert' => 'false', - 'is_weekend' => 'false', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => null, - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday","Thursday"]}', - 'created_at' => '2025-02-18T12:59:41.000Z', - 'updated_at' => '2025-03-04T07:42:24.000Z', - 'deleted_at' => null, - 'kind' => 'Regular', - ], - [ - 'id' => 12, - 'name' => 'פיקוד EO 1', - 'start_hour' => '06:30:00Z', - 'duration' => 900, - 'parallel_weight' => 0, - 'type' => 'פיקוד EO', - 'color' => '#ffb3d9', - 'is_alert' => 'false', - 'is_weekend' => 'false', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => null, - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Wednesday","Thursday"]}', - 'created_at' => '2025-02-18T12:48:55.000Z', - 'updated_at' => '2025-03-04T07:39:59.000Z', - 'deleted_at' => null, - 'kind' => 'Regular', - ], - [ - 'id' => 17, - 'name' => 'עיבוד כל יום', - 'start_hour' => '06:30:00Z', - 'duration' => 1200, - 'parallel_weight' => 0, - 'type' => 'עיבוד כל', - 'color' => '#8F8FFF', - 'is_alert' => 'false', - 'is_weekend' => 'false', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => null, - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday","Thursday"]}', - 'created_at' => '2025-02-18T12:56:56.000Z', - 'updated_at' => '2025-03-04T07:41:15.000Z', - 'deleted_at' => null, - 'kind' => 'Regular', - ], - [ - 'id' => 18, - 'name' => 'בדקן EO', - 'start_hour' => '06:30:00Z', - 'duration' => 900, - 'parallel_weight' => 0, - 'type' => 'בדקן EO', - 'color' => '#ff5dae', - 'is_alert' => 'false', - 'is_weekend' => 'false', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => null, - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday","Thursday"]}', - 'created_at' => '2025-02-18T12:57:00.000Z', - 'updated_at' => '2025-03-04T07:41:35.000Z', - 'deleted_at' => null, - 'kind' => 'Regular', - ], - [ - 'id' => 24, - 'name' => 'עיבוד MAXAR', - 'start_hour' => '06:30:00Z', - 'duration' => 1200, - 'parallel_weight' => 0, - 'type' => 'עיבוד מסחרי', - 'color' => '#9C70F4', - 'is_alert' => 'false', - 'is_weekend' => 'false', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => null, - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday","Thursday"]}', - 'created_at' => '2025-02-18T13:05:06.000Z', - 'updated_at' => '2025-03-04T07:42:39.000Z', - 'deleted_at' => null, - 'kind' => 'Regular', - ], - [ - 'id' => 26, - 'name' => 'בדקן SAR', - 'start_hour' => '06:30:00Z', - 'duration' => 900, - 'parallel_weight' => 0, - 'type' => 'בדקן SAR', - 'color' => '#f357ff', - 'is_alert' => 'false', - 'is_weekend' => 'false', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => null, - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday","Thursday"]}', - 'created_at' => '2025-02-18T13:07:15.000Z', - 'updated_at' => '2025-03-04T07:43:30.000Z', - 'deleted_at' => null, - 'kind' => 'Regular', - ], - [ - 'id' => 25, - 'name' => 'עיבוד NS', - 'start_hour' => '06:30:00Z', - 'duration' => 1200, - 'parallel_weight' => 0, - 'type' => 'עיבוד מסחרי', - 'color' => '#C4AAF8', - 'is_alert' => 'false', - 'is_weekend' => 'false', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => null, - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday","Thursday"]}', - 'created_at' => '2025-02-18T13:06:25.000Z', - 'updated_at' => '2025-03-04T13:27:36.000Z', - 'deleted_at' => null, - 'kind' => 'Regular', - ], - [ - 'id' => 36, - 'name' => 'תכנון סאר', - 'start_hour' => '06:30:00Z', - 'duration' => 1200, - 'parallel_weight' => 0, - 'type' => 'סאר', - 'color' => '#1af555', - 'is_alert' => 'false', - 'is_weekend' => 'false', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => null, - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday","Thursday"]}', - 'created_at' => '2025-02-18T13:26:41.000Z', - 'updated_at' => '2025-03-04T07:45:57.000Z', - 'deleted_at' => null, - 'kind' => 'Regular', - ], - [ - 'id' => 3, - 'name' => 'בקות לילה', - 'start_hour' => '22:00:00Z', - 'duration' => 800, - 'parallel_weight' => 0, - 'type' => 'בקות', - 'color' => '#1A7396', - 'is_alert' => 'false', - 'is_weekend' => 'false', - 'is_night' => 'true', - 'in_parallel' => 'false', - 'concurrent_tasks' => '{}', - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday"]}', - 'created_at' => '2025-02-18T12:20:56.000Z', - 'updated_at' => '2025-03-18T08:49:12.000Z', - 'deleted_at' => null, - 'kind' => 'Night', - ], - [ - 'id' => 11, - 'name' => 'ציוד ערב חמישי', - 'start_hour' => '13:00:00Z', - 'duration' => 800, - 'parallel_weight' => 50, - 'type' => 'ציוד', - 'color' => '#6db967', - 'is_alert' => 'false', - 'is_weekend' => 'true', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => '{}', - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Thursday"]}', - 'created_at' => '2025-02-18T12:48:00.000Z', - 'updated_at' => '2025-03-25T12:09:09.000Z', - 'deleted_at' => null, - 'kind' => 'Weekend', - ], - [ - 'id' => 6, - 'name' => 'בקות יום סופש', - 'start_hour' => '06:00:00Z', - 'duration' => 1200, - 'parallel_weight' => 100, - 'type' => 'בקות', - 'color' => '#9bd0e1', - 'is_alert' => 'false', - 'is_weekend' => 'true', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => '{}', - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Friday","Saturday"]}', - 'created_at' => '2025-02-18T12:26:33.000Z', - 'updated_at' => '2025-03-18T08:49:42.000Z', - 'deleted_at' => null, - 'kind' => 'Weekend', - ], - [ - 'id' => 5, - 'name' => 'בקות לילה חמישי', - 'start_hour' => '21:59:00Z', - 'duration' => 800, - 'parallel_weight' => 50, - 'type' => 'בקות', - 'color' => '#1b768c', - 'is_alert' => 'false', - 'is_weekend' => 'false', - 'is_night' => 'true', - 'in_parallel' => 'false', - 'concurrent_tasks' => '{}', - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Thursday"]}', - 'created_at' => '2025-02-18T12:24:24.000Z', - 'updated_at' => '2025-03-25T12:08:33.000Z', - 'deleted_at' => null, - 'kind' => 'Weekend', - ], - [ - 'id' => 7, - 'name' => 'בקות לילה סופש', - 'start_hour' => '18:00:00Z', - 'duration' => 1200, - 'parallel_weight' => 100, - 'type' => 'בקות', - 'color' => '#2679a1', - 'is_alert' => 'false', - 'is_weekend' => 'true', - 'is_night' => 'true', - 'in_parallel' => 'false', - 'concurrent_tasks' => '{}', - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Friday","Saturday"]}', - 'created_at' => '2025-02-18T12:27:23.000Z', - 'updated_at' => '2025-03-18T08:50:14.000Z', - 'deleted_at' => null, - 'kind' => 'Weekend', - ], - [ - 'id' => 9, - 'name' => 'ציוד יום סופש', - 'start_hour' => '06:00:00Z', - 'duration' => 1200, - 'parallel_weight' => 100, - 'type' => 'ציוד', - 'color' => '#A5D3A1', - 'is_alert' => 'false', - 'is_weekend' => 'true', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => '{}', - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Friday","Saturday"]}', - 'created_at' => '2025-02-18T12:42:09.000Z', - 'updated_at' => '2025-03-18T08:50:25.000Z', - 'deleted_at' => null, - 'kind' => 'Weekend', - ], - [ - 'id' => 10, - 'name' => 'ציוד ערב', - 'start_hour' => '14:00:00Z', - 'duration' => 800, - 'parallel_weight' => 0, - 'type' => 'ציוד', - 'color' => '#6db967', - 'is_alert' => 'true', - 'is_weekend' => 'false', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => '{}', - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday"]}', - 'created_at' => '2025-02-18T12:43:50.000Z', - 'updated_at' => '2025-03-18T08:50:42.000Z', - 'deleted_at' => null, - 'kind' => 'Alert', - ], - [ - 'id' => 15, - 'name' => 'ציוד לילה חמישי', - 'start_hour' => '22:00:00Z', - 'duration' => 800, - 'parallel_weight' => 50, - 'type' => 'ציוד', - 'color' => '#3A863E', - 'is_alert' => 'false', - 'is_weekend' => 'true', - 'is_night' => 'true', - 'in_parallel' => 'false', - 'concurrent_tasks' => '{}', - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Thursday"]}', - 'created_at' => '2025-02-18T12:52:00.000Z', - 'updated_at' => '2025-03-25T12:10:04.000Z', - 'deleted_at' => null, - 'kind' => 'Weekend', - ], - [ - 'id' => 13, - 'name' => 'ציוד לילה', - 'start_hour' => '22:00:00Z', - 'duration' => 800, - 'parallel_weight' => 0, - 'type' => 'ציוד', - 'color' => '#3A863E', - 'is_alert' => 'false', - 'is_weekend' => 'false', - 'is_night' => 'true', - 'in_parallel' => 'false', - 'concurrent_tasks' => '{}', - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday"]}', - 'created_at' => '2025-02-18T12:50:15.000Z', - 'updated_at' => '2025-03-18T08:51:14.000Z', - 'deleted_at' => null, - 'kind' => 'Night', - ], - [ - 'id' => 14, - 'name' => 'פיקוד EO חמישי', - 'start_hour' => '15:30:00Z', - 'duration' => 900, - 'parallel_weight' => 0, - 'type' => 'פיקוד EO', - 'color' => '#ffb3d9', - 'is_alert' => 'false', - 'is_weekend' => 'true', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => '{}', - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Thursday"]}', - 'created_at' => '2025-02-18T12:50:29.000Z', - 'updated_at' => '2025-03-18T08:52:13.000Z', - 'deleted_at' => null, - 'kind' => 'Regular', - ], - [ - 'id' => 30, - 'name' => 'כונן עיבוד מסחרי חמישי', - 'start_hour' => '18:30:00Z', - 'duration' => 1200, - 'parallel_weight' => 50, - 'type' => 'עיבוד מסחרי', - 'color' => '#7E14CE', - 'is_alert' => 'false', - 'is_weekend' => 'true', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => '{}', - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Thursday"]}', - 'created_at' => '2025-02-18T13:10:06.000Z', - 'updated_at' => '2025-03-25T12:10:34.000Z', - 'deleted_at' => null, - 'kind' => 'Weekend', - ], - [ - 'id' => 16, - 'name' => 'ציוד לילה סופש', - 'start_hour' => '10:00:00Z', - 'duration' => 1200, - 'parallel_weight' => 100, - 'type' => 'ציוד', - 'color' => '#3A863E', - 'is_alert' => 'false', - 'is_weekend' => 'true', - 'is_night' => 'true', - 'in_parallel' => 'false', - 'concurrent_tasks' => '{}', - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Friday","Saturday"]}', - 'created_at' => '2025-02-18T12:54:13.000Z', - 'updated_at' => '2025-03-18T08:52:44.000Z', - 'deleted_at' => null, - 'kind' => 'Weekend', - ], - [ - 'id' => 19, - 'name' => 'עיבוד כל יום סופש', - 'start_hour' => '06:30:00Z', - 'duration' => 1200, - 'parallel_weight' => 100, - 'type' => 'עיבוד כל', - 'color' => '#8F8FFF', - 'is_alert' => 'false', - 'is_weekend' => 'true', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => '{}', - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Saturday","Friday"]}', - 'created_at' => '2025-02-18T12:58:02.000Z', - 'updated_at' => '2025-03-18T08:53:03.000Z', - 'deleted_at' => null, - 'kind' => 'Weekend', - ], - [ - 'id' => 20, - 'name' => 'כונן עיבוד כל', - 'start_hour' => '18:30:00Z', - 'duration' => 1200, - 'parallel_weight' => 0, - 'type' => 'עיבוד כל', - 'color' => '#7E14CE', - 'is_alert' => 'true', - 'is_weekend' => 'false', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => '{}', - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday"]}', - 'created_at' => '2025-02-18T12:59:24.000Z', - 'updated_at' => '2025-03-18T08:53:18.000Z', - 'deleted_at' => null, - 'kind' => 'Alert', - ], - [ - 'id' => 33, - 'name' => 'כונן פיקוד חמישי', - 'start_hour' => '16:00:00Z', - 'duration' => 1400, - 'parallel_weight' => 50, - 'type' => 'פיקוד EO', - 'color' => '#b73382', - 'is_alert' => 'false', - 'is_weekend' => 'true', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => '{}', - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Thursday"]}', - 'created_at' => '2025-02-18T13:17:27.000Z', - 'updated_at' => '2025-03-25T12:10:47.000Z', - 'deleted_at' => null, - 'kind' => 'Weekend', - ], - [ - 'id' => 23, - 'name' => 'כונן עיבוד כל סופש', - 'start_hour' => '18:30:00Z', - 'duration' => 1200, - 'parallel_weight' => 100, - 'type' => 'עיבוד כל', - 'color' => '#7E14CE', - 'is_alert' => 'false', - 'is_weekend' => 'true', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => '{}', - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Saturday","Friday"]}', - 'created_at' => '2025-02-18T13:01:57.000Z', - 'updated_at' => '2025-03-18T08:54:09.000Z', - 'deleted_at' => null, - 'kind' => 'Weekend', - ], - [ - 'id' => 27, - 'name' => 'עיבוד מסחרי סופש', - 'start_hour' => '06:03:00Z', - 'duration' => 1200, - 'parallel_weight' => 100, - 'type' => 'עיבוד מסחרי', - 'color' => '#9C70F4', - 'is_alert' => 'false', - 'is_weekend' => 'true', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => '{}', - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Friday","Saturday"]}', - 'created_at' => '2025-02-18T13:07:39.000Z', - 'updated_at' => '2025-03-18T08:55:17.000Z', - 'deleted_at' => null, - 'kind' => 'Weekend', - ], - [ - 'id' => 41, - 'name' => 'כונן סאר חמישי', - 'start_hour' => '11:00:00Z', - 'duration' => 1900, - 'parallel_weight' => 50, - 'type' => 'סאר', - 'color' => '#1c801f', - 'is_alert' => 'false', - 'is_weekend' => 'true', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => '{}', - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Thursday"]}', - 'created_at' => '2025-02-18T13:31:19.000Z', - 'updated_at' => '2025-03-26T09:42:30.000Z', - 'deleted_at' => null, - 'kind' => 'Weekend', - ], - [ - 'id' => 29, - 'name' => 'כונן עיבוד מסחרי', - 'start_hour' => '18:30:00Z', - 'duration' => 1200, - 'parallel_weight' => 0, - 'type' => 'עיבוד מסחרי', - 'color' => '#7E14CE', - 'is_alert' => 'true', - 'is_weekend' => 'false', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => '{}', - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday"]}', - 'created_at' => '2025-02-18T13:09:12.000Z', - 'updated_at' => '2025-04-28T08:35:49.000Z', - 'deleted_at' => null, - 'kind' => 'Alert', - ], - [ - 'id' => 38, - 'name' => 'כונן סאר', - 'start_hour' => '11:00:00Z', - 'duration' => 1900, - 'parallel_weight' => 0, - 'type' => 'סאר', - 'color' => '#1c801f', - 'is_alert' => 'true', - 'is_weekend' => 'false', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => '{}', - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday"]}', - 'created_at' => '2025-02-18T13:29:26.000Z', - 'updated_at' => '2025-03-18T08:57:39.000Z', - 'deleted_at' => null, - 'kind' => 'Alert', - ], - [ - 'id' => 4, - 'name' => 'בקות ערב חמישי', - 'start_hour' => '13:00:00Z', - 'duration' => 800, - 'parallel_weight' => 50, - 'type' => 'בקות', - 'color' => '#4EACCA', - 'is_alert' => 'false', - 'is_weekend' => 'true', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => '{}', - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Thursday"]}', - 'created_at' => '2025-02-18T12:22:44.000Z', - 'updated_at' => '2025-03-25T12:07:50.000Z', - 'deleted_at' => null, - 'kind' => 'Weekend', - ], - [ - 'id' => 34, - 'name' => 'כונן פיקוד סופש', - 'start_hour' => '06:00:00Z', - 'duration' => 4800, - 'parallel_weight' => 200, - 'type' => 'פיקוד EO', - 'color' => '#b73382', - 'is_alert' => 'false', - 'is_weekend' => 'true', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => '{}', - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Friday"]}', - 'created_at' => '2025-02-18T13:23:37.000Z', - 'updated_at' => '2025-04-07T07:22:21.000Z', - 'deleted_at' => null, - 'kind' => 'Weekend', - ], - [ - 'id' => 39, - 'name' => 'Mid Scat', - 'start_hour' => '06:30:00Z', - 'duration' => 1200, - 'parallel_weight' => 0, - 'type' => 'Mid Scat', - 'color' => '#ff9d3b', - 'is_alert' => 'false', - 'is_weekend' => 'false', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => null, - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Monday"]}', - 'created_at' => '2025-02-18T13:30:32.000Z', - 'updated_at' => '2025-03-04T07:46:35.000Z', - 'deleted_at' => null, - 'kind' => 'Regular', - ], - [ - 'id' => 40, - 'name' => 'Scat 8', - 'start_hour' => '06:30:00Z', - 'duration' => 1200, - 'parallel_weight' => 0, - 'type' => 'Scat 8', - 'color' => '#ff9d3b', - 'is_alert' => 'false', - 'is_weekend' => 'false', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => null, - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Monday"]}', - 'created_at' => '2025-02-18T13:31:10.000Z', - 'updated_at' => '2025-03-04T07:46:47.000Z', - 'deleted_at' => null, - 'kind' => 'Regular', - ], - [ - 'id' => 43, - 'name' => 'Scat C2', - 'start_hour' => '06:30:00Z', - 'duration' => 1200, - 'parallel_weight' => 0, - 'type' => 'Scat C', - 'color' => '#85580b', - 'is_alert' => 'false', - 'is_weekend' => 'false', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => null, - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Tuesday"]}', - 'created_at' => '2025-02-18T13:34:51.000Z', - 'updated_at' => '2025-03-04T07:47:31.000Z', - 'deleted_at' => null, - 'kind' => 'Regular', - ], - [ - 'id' => 46, - 'name' => 'Scat C3', - 'start_hour' => '06:30:00Z', - 'duration' => 1200, - 'parallel_weight' => 0, - 'type' => 'Scat C', - 'color' => '#6b4512', - 'is_alert' => 'false', - 'is_weekend' => 'false', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => null, - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Tuesday"]}', - 'created_at' => '2025-02-18T13:38:26.000Z', - 'updated_at' => '2025-03-04T07:48:28.000Z', - 'deleted_at' => null, - 'kind' => 'Regular', - ], - [ - 'id' => 50, - 'name' => 'SCAT SAR', - 'start_hour' => '06:30:00Z', - 'duration' => 1200, - 'parallel_weight' => 0, - 'type' => 'SCAT SAR', - 'color' => '#3d2805', - 'is_alert' => 'false', - 'is_weekend' => 'false', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => null, - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Tuesday"]}', - 'created_at' => '2025-02-18T13:41:56.000Z', - 'updated_at' => '2025-03-04T07:49:02.000Z', - 'deleted_at' => null, - 'kind' => 'Regular', - ], - [ - 'id' => 44, - 'name' => 'תכנון מסחרי', - 'start_hour' => '06:30:00Z', - 'duration' => 1200, - 'parallel_weight' => 0, - 'type' => 'תכנון מסחרי', - 'color' => '#ebac27', - 'is_alert' => 'false', - 'is_weekend' => 'false', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => null, - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday","Thursday"]}', - 'created_at' => '2025-02-18T13:35:18.000Z', - 'updated_at' => '2025-03-04T07:47:50.000Z', - 'deleted_at' => null, - 'kind' => 'Regular', - ], - [ - 'id' => 56, - 'name' => 'SM', - 'start_hour' => '11:00:00Z', - 'duration' => 2400, - 'parallel_weight' => 0, - 'type' => 'SM', - 'color' => '#12217a', - 'is_alert' => 'true', - 'is_weekend' => 'false', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => null, - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Monday","Tuesday","Wednesday","Sunday"]}', - 'created_at' => '2025-02-18T14:02:24.000Z', - 'updated_at' => '2025-03-04T07:50:15.000Z', - 'deleted_at' => null, - 'kind' => 'Regular', - ], - [ - 'id' => 53, - 'name' => 'מתכנן 2', - 'start_hour' => '06:30:00Z', - 'duration' => 1200, - 'parallel_weight' => 0, - 'type' => 'תכנון EO', - 'color' => '#5edecd', - 'is_alert' => 'false', - 'is_weekend' => 'false', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => null, - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday","Thursday"]}', - 'created_at' => '2025-02-18T13:58:06.000Z', - 'updated_at' => '2025-03-04T07:49:58.000Z', - 'deleted_at' => null, - 'kind' => 'Regular', - ], - [ - 'id' => 1, - 'name' => 'בקות יום', - 'start_hour' => '06:00:00Z', - 'duration' => 800, - 'parallel_weight' => 0, - 'type' => 'בקות', - 'color' => '#9bd0e1', - 'is_alert' => 'false', - 'is_weekend' => 'false', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => null, - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday","Thursday"]}', - 'created_at' => '2025-02-18T12:13:41.000Z', - 'updated_at' => '2025-03-04T07:37:25.000Z', - 'deleted_at' => null, - 'kind' => 'Regular', - ], - [ - 'id' => 52, - 'name' => 'מתכנן 1', - 'start_hour' => '06:30:00Z', - 'duration' => 1200, - 'parallel_weight' => 0, - 'type' => 'תכנון EO', - 'color' => '#5edecd', - 'is_alert' => 'false', - 'is_weekend' => 'false', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => null, - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday","Thursday"]}', - 'created_at' => '2025-02-18T13:56:54.000Z', - 'updated_at' => '2025-03-04T07:49:42.000Z', - 'deleted_at' => null, - 'kind' => 'Regular', - ], - [ - 'id' => 28, - 'name' => 'כונן פיקוד', - 'start_hour' => '16:00:00Z', - 'duration' => 1400, - 'parallel_weight' => 0, - 'type' => 'פיקוד EO', - 'color' => '#b73382', - 'is_alert' => 'true', - 'is_weekend' => 'false', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => '{}', - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday"]}', - 'created_at' => '2025-02-18T13:08:47.000Z', - 'updated_at' => '2025-03-18T08:55:34.000Z', - 'deleted_at' => null, - 'kind' => 'Alert', - ], - [ - 'id' => 31, - 'name' => 'כונן עיבוד מסחרי סופש', - 'start_hour' => '18:30:00Z', - 'duration' => 1200, - 'parallel_weight' => 100, - 'type' => 'עיבוד מסחרי', - 'color' => '#7E14CE', - 'is_alert' => 'false', - 'is_weekend' => 'true', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => '{}', - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Saturday","Friday"]}', - 'created_at' => '2025-02-18T13:11:37.000Z', - 'updated_at' => '2025-03-18T08:56:20.000Z', - 'deleted_at' => null, - 'kind' => 'Weekend', - ], - [ - 'id' => 42, - 'name' => 'כונן סאר סופש', - 'start_hour' => '06:30:00Z', - 'duration' => 4800, - 'parallel_weight' => 200, - 'type' => 'סאר', - 'color' => '#1c801f', - 'is_alert' => 'false', - 'is_weekend' => 'true', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => '{}', - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Friday"]}', - 'created_at' => '2025-02-18T13:33:22.000Z', - 'updated_at' => '2025-05-07T08:00:54.000Z', - 'deleted_at' => null, - 'kind' => 'Weekend', - ], - [ - 'id' => 47, - 'name' => 'כונן מסחרי', - 'start_hour' => '13:00:00Z', - 'duration' => 1700, - 'parallel_weight' => 0, - 'type' => 'תכנון מסחרי', - 'color' => '#eb9b55', - 'is_alert' => 'true', - 'is_weekend' => 'false', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => '{}', - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday"]}', - 'created_at' => '2025-02-18T13:39:07.000Z', - 'updated_at' => '2025-03-18T08:58:39.000Z', - 'deleted_at' => null, - 'kind' => 'Alert', - ], - [ - 'id' => 54, - 'name' => 'תכנון 1 סופש', - 'start_hour' => '06:30:00Z', - 'duration' => 1200, - 'parallel_weight' => 100, - 'type' => 'תכנון EO', - 'color' => '#5edecd', - 'is_alert' => 'false', - 'is_weekend' => 'true', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => '{}', - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Friday","Saturday"]}', - 'created_at' => '2025-02-18T13:59:35.000Z', - 'updated_at' => '2025-03-18T08:59:00.000Z', - 'deleted_at' => null, - 'kind' => 'Weekend', - ], - [ - 'id' => 55, - 'name' => 'תכנון 2 סופש', - 'start_hour' => '06:30:00Z', - 'duration' => 1200, - 'parallel_weight' => 100, - 'type' => 'תכנון EO', - 'color' => '#5edecd', - 'is_alert' => 'false', - 'is_weekend' => 'true', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => '{}', - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Friday","Saturday"]}', - 'created_at' => '2025-02-18T14:00:17.000Z', - 'updated_at' => '2025-03-18T08:59:14.000Z', - 'deleted_at' => null, - 'kind' => 'Weekend', - ], - [ - 'id' => 63, - 'name' => 'סמלוץ', - 'start_hour' => '06:30:00Z', - 'duration' => 1200, - 'parallel_weight' => 0, - 'type' => 'סמלוץ', - 'color' => '#59d9a4', - 'is_alert' => null, - 'is_weekend' => null, - 'is_night' => null, - 'in_parallel' => null, - 'concurrent_tasks' => null, - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Wednesday"]}', - 'created_at' => '2025-03-31T17:26:53.000Z', - 'updated_at' => '2025-03-31T17:26:53.000Z', - 'deleted_at' => null, - 'kind' => 'Regular', - ], - [ - 'id' => 58, - 'name' => 'SM סופש', - 'start_hour' => '08:00:00Z', - 'duration' => 2400, - 'parallel_weight' => 100, - 'type' => 'SM', - 'color' => '#12217a', - 'is_alert' => 'false', - 'is_weekend' => 'true', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => '{}', - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Friday","Saturday"]}', - 'created_at' => '2025-02-18T14:04:19.000Z', - 'updated_at' => '2025-03-18T09:00:09.000Z', - 'deleted_at' => null, - 'kind' => 'Weekend', - ], - [ - 'id' => 59, - 'name' => 'כונן FT', - 'start_hour' => '11:00:00Z', - 'duration' => 2400, - 'parallel_weight' => 0, - 'type' => 'תכנון EO', - 'color' => '#a8a3a3', - 'is_alert' => 'true', - 'is_weekend' => 'false', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => '{}', - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday"]}', - 'created_at' => '2025-02-18T14:08:27.000Z', - 'updated_at' => '2025-03-18T09:00:21.000Z', - 'deleted_at' => null, - 'kind' => 'Alert', - ], - [ - 'id' => 64, - 'name' => 'סמלוץ 2', - 'start_hour' => '06:30:00Z', - 'duration' => 1200, - 'parallel_weight' => 0, - 'type' => 'סמלוץ', - 'color' => '#60c76c', - 'is_alert' => null, - 'is_weekend' => null, - 'is_night' => null, - 'in_parallel' => null, - 'concurrent_tasks' => null, - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Wednesday"]}', - 'created_at' => '2025-04-01T06:43:08.000Z', - 'updated_at' => '2025-04-01T06:43:08.000Z', - 'deleted_at' => null, - 'kind' => 'Regular', - ], - [ - 'id' => 61, - 'name' => 'כונן FT סופש', - 'start_hour' => '08:00:00Z', - 'duration' => 2400, - 'parallel_weight' => 100, - 'type' => 'תכנון EO', - 'color' => '#a8a3a3', - 'is_alert' => 'false', - 'is_weekend' => 'true', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => '{}', - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Friday","Saturday"]}', - 'created_at' => '2025-02-18T14:14:02.000Z', - 'updated_at' => '2025-03-18T09:00:47.000Z', - 'deleted_at' => null, - 'kind' => 'Weekend', - ], - [ - 'id' => 62, - 'name' => 'צתים לילה', - 'start_hour' => '06:30:00Z', - 'duration' => 1200, - 'parallel_weight' => 0, - 'type' => 'צתים לילה', - 'color' => '#171414', - 'is_alert' => null, - 'is_weekend' => null, - 'is_night' => null, - 'in_parallel' => null, - 'concurrent_tasks' => null, - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Monday","Wednesday"]}', - 'created_at' => '2025-03-18T12:00:34.000Z', - 'updated_at' => '2025-03-18T12:00:34.000Z', - 'deleted_at' => null, - 'kind' => 'Regular', - ], - [ - 'id' => 22, - 'name' => 'כונן עיבוד כל חמישי', - 'start_hour' => '18:30:00Z', - 'duration' => 1200, - 'parallel_weight' => 50, - 'type' => 'עיבוד כל', - 'color' => '#7E14CE', - 'is_alert' => 'false', - 'is_weekend' => 'true', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => '{}', - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Thursday"]}', - 'created_at' => '2025-02-18T13:00:46.000Z', - 'updated_at' => '2025-03-25T12:10:19.000Z', - 'deleted_at' => null, - 'kind' => 'Weekend', - ], - [ - 'id' => 48, - 'name' => 'כונן מסחרי חמישי', - 'start_hour' => '13:00:00Z', - 'duration' => 1500, - 'parallel_weight' => 50, - 'type' => 'תכנון מסחרי', - 'color' => '#eb9b55', - 'is_alert' => 'false', - 'is_weekend' => 'true', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => '{}', - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Thursday"]}', - 'created_at' => '2025-02-18T13:39:57.000Z', - 'updated_at' => '2025-03-25T12:11:23.000Z', - 'deleted_at' => null, - 'kind' => 'Weekend', - ], - [ - 'id' => 65, - 'name' => 'רסר מרפם', - 'start_hour' => '06:30:00Z', - 'duration' => 1200, - 'parallel_weight' => 0, - 'type' => 'רסר מרפם', - 'color' => '#1c1818', - 'is_alert' => null, - 'is_weekend' => null, - 'is_night' => null, - 'in_parallel' => null, - 'concurrent_tasks' => '{}', - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday","Thursday"]}', - 'created_at' => '2025-04-06T07:24:24.000Z', - 'updated_at' => '2025-04-06T07:24:24.000Z', - 'deleted_at' => null, - 'kind' => 'In parallel', - ], - [ - 'id' => 60, - 'name' => 'כונן FT חמישי', - 'start_hour' => '11:00:00Z', - 'duration' => 2400, - 'parallel_weight' => 50, - 'type' => 'תכנון EO', - 'color' => '#a8a3a3', - 'is_alert' => 'false', - 'is_weekend' => 'true', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => '{}', - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Thursday"]}', - 'created_at' => '2025-02-18T14:10:31.000Z', - 'updated_at' => '2025-03-25T12:12:02.000Z', - 'deleted_at' => null, - 'kind' => 'Weekend', - ], - [ - 'id' => 57, - 'name' => 'SM חמישי', - 'start_hour' => '11:00:00Z', - 'duration' => 2400, - 'parallel_weight' => 50, - 'type' => 'SM', - 'color' => '#12217a', - 'is_alert' => 'false', - 'is_weekend' => 'true', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => '{}', - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Thursday"]}', - 'created_at' => '2025-02-18T14:03:13.000Z', - 'updated_at' => '2025-03-26T09:41:56.000Z', - 'deleted_at' => null, - 'kind' => 'Weekend', - ], - [ - 'id' => 66, - 'name' => 'נקיון תהק', - 'start_hour' => '06:30:00Z', - 'duration' => 100, - 'parallel_weight' => 0, - 'type' => 'נקיון תהק', - 'color' => '#fca1e6', - 'is_alert' => null, - 'is_weekend' => null, - 'is_night' => null, - 'in_parallel' => null, - 'concurrent_tasks' => '{"\\u05e4\\u05d9\\u05e7\\u05d5\\u05d3 SAR","\\u05e4\\u05d9\\u05e7\\u05d5\\u05d3 EO","\\u05d1\\u05d3\\u05e7\\u05df SAR","\\u05d1\\u05d3\\u05e7\\u05df EO"}', - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday","Thursday"]}', - 'created_at' => '2025-04-06T07:26:14.000Z', - 'updated_at' => '2025-04-06T07:27:56.000Z', - 'deleted_at' => null, - 'kind' => 'In parallel', - ], - [ - 'id' => 2, - 'name' => 'בקות ערב', - 'start_hour' => '13:00:00Z', - 'duration' => 900, - 'parallel_weight' => 0, - 'type' => 'בקות', - 'color' => '#4EACCA', - 'is_alert' => 'true', - 'is_weekend' => 'false', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => '{}', - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Sunday","Monday","Tuesday","Wednesday"]}', - 'created_at' => '2025-02-18T12:16:42.000Z', - 'updated_at' => '2025-04-06T08:32:24.000Z', - 'deleted_at' => null, - 'kind' => 'Alert', - ], - [ - 'id' => 49, - 'name' => 'כונן מסחרי סופש', - 'start_hour' => '06:00:00Z', - 'duration' => 4800, - 'parallel_weight' => 100, - 'type' => 'תכנון מסחרי', - 'color' => '#eb9b55', - 'is_alert' => 'false', - 'is_weekend' => 'true', - 'is_night' => 'false', - 'in_parallel' => 'false', - 'concurrent_tasks' => '{}', - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Friday"]}', - 'created_at' => '2025-02-18T13:40:56.000Z', - 'updated_at' => '2025-05-07T07:59:25.000Z', - 'deleted_at' => null, - 'kind' => 'Weekend', - ], - [ - 'id' => 67, - 'name' => 'כונן בקוצ סופש', - 'start_hour' => '06:00:00Z', - 'duration' => 4800, - 'parallel_weight' => 200, - 'type' => 'בקות', - 'color' => '#7cf2e6', - 'is_alert' => null, - 'is_weekend' => null, - 'is_night' => null, - 'in_parallel' => null, - 'concurrent_tasks' => '{}', - 'department_name' => null, - 'recurring' => '{"type":"Weekly","days_in_week":["Friday"]}', - 'created_at' => '2025-04-21T08:02:31.000Z', - 'updated_at' => '2025-05-05T07:46:33.000Z', - 'deleted_at' => null, - 'kind' => 'Weekend', - ], - ]; - - collect($tasks)->map(callback: function ($task) { - $t = new Task; - $t->name = $task['name']; - $t->start_hour = Carbon::parse(substr($task['start_hour'], 0, 8))->addHours(2)->toTimeString(); - $t->duration = $task['duration'] / 100; - $t->parallel_weight = $task['parallel_weight'] ? ($task['parallel_weight'] / 100) : 0; - $t->type = $task['type']; - $t->color = $task['color']; - $t->kind = $task['kind']; - $t->concurrent_tasks = $task['concurrent_tasks']; - $t->department_name = $task['department_name']; - // $t->recurring = $task['recurring']; - $t->recurring = json_decode($task['recurring']); - $t->save(); - }); - - } - - public function b() - { - - $sum = collect([]); - $tasksTypes = [...Task::all()->pluck('type')->unique()]; - collect($tasksTypes)->each(function ($type) use ($sum) { - $shifts = collect(\App\Models\Shift::all())->filter(fn (\App\Models\Shift $shift) => $shift->task->type === $type); - $sum->push([ - $type => [ - 'regular' => collect($shifts)->filter(fn (\App\Models\Shift $shift) => $shift->task->kind === 'Regular')->count(), - 'weekend' => collect($shifts)->filter(fn (\App\Models\Shift $shift) => $shift->task->kind === 'Weekend')->sum(fn ($shift) => $shift->task->parallel_weight), - 'alert' => collect($shifts)->filter(fn (\App\Models\Shift $shift) => $shift->task->kind === 'Alert')->count(), - 'night' => collect($shifts)->filter(fn (\App\Models\Shift $shift) => $shift->task->kind === 'Night')->count(), - 'in_parallel' => collect($shifts)->filter(fn (\App\Models\Shift $shift) => $shift->task->kind === 'In parallel')->count(), - ], - ]); - }); - - } - - public function c() - { - $array = collect([]); - $data = collect([ - 'ציוד' => '', - 'פיקוד SAR' => '', - 'פיקוד EO' => '', - 'סאר' => '', - 'עיבוד כל' => '', - 'בדקן EO' => '', - 'עיבוד מסחרי' => '', - 'בדקן SAR' => '', - 'בקות' => '', - 'תכנון מסחרי' => '', - 'SM' => '', - 'תכנון EO' => '', - 'מנהל מסחרי' => '', - 'צתים לילה' => '', - 'scat' => '', - ]); - $array->put('9', $this->d(1, 10, collect([ - 'ציוד' => 4, - 'פיקוד SAR' => 7, - 'פיקוד EO' => 7, - 'סאר' => 1, - 'עיבוד כל' => 2, - 'בדקן EO' => 4, - 'עיבוד מסחרי' => 0, - 'בדקן SAR' => 4, - 'בקות' => 8, - 'תכנון מסחרי' => 2, - 'SM' => 2, - 'תכנון EO' => 7, - 'מנהל מסחרי' => 2, - 'צתים לילה' => 2, - 'scat' => 2, - ]))); - $array->put('23', $this->d(10, 33, collect([ - 'ציוד' => 4, - 'פיקוד SAR' => 7, - 'פיקוד EO' => 7, - 'סאר' => 1, - 'עיבוד כל' => 2, - 'בדקן EO' => 4, - 'עיבוד מסחרי' => 1, - 'בדקן SAR' => 4, - 'בקות' => 8, - 'תכנון מסחרי' => 2, - 'SM' => 2, - 'תכנון EO' => 7, - 'מנהל מסחרי' => 2, - 'צתים לילה' => 2, - 'scat' => 2, - ]))); - $array->put('24', $this->d(33, 57, collect([ - 'ציוד' => 4, - 'פיקוד SAR' => 7, - 'פיקוד EO' => 7, - 'סאר' => 2, - 'עיבוד כל' => 3, - 'בדקן EO' => 4, - 'עיבוד מסחרי' => 1, - 'בדקן SAR' => 4, - 'בקות' => 8, - 'תכנון מסחרי' => 3, - 'SM' => 2, - 'תכנון EO' => 7, - 'מנהל מסחרי' => 2, - 'צתים לילה' => 2, - 'scat' => 2, - ]))); - $array->put('22', $this->d(57, 79, collect([ - 'ציוד' => 4, - 'פיקוד SAR' => 7, - 'פיקוד EO' => 7, - 'סאר' => 4, - 'עיבוד כל' => 4, - 'בדקן EO' => 4, - 'עיבוד מסחרי' => 4, - 'בדקן SAR' => 4, - 'בקות' => 8, - 'תכנון מסחרי' => 4, - 'SM' => 3, - 'תכנון EO' => 7, - 'מנהל מסחרי' => 2, - 'צתים לילה' => 2, - 'scat' => 2, - ]))); - $array->put('29', $this->d(79, 108, collect([ - 'ציוד' => 4, - 'פיקוד SAR' => 7, - 'פיקוד EO' => 7, - 'סאר' => 4, - 'עיבוד כל' => 4, - 'בדקן EO' => 4, - 'עיבוד מסחרי' => 4, - 'בדקן SAR' => 4, - 'בקות' => 8, - 'תכנון מסחרי' => 4, - 'SM' => 3, - 'תכנון EO' => 7, - 'מנהל מסחרי' => 2, - 'צתים לילה' => 2, - 'scat' => 2, - ]))); - $array->each(function ($value, $key) use ($data) { - $value->each(function ($val, $k) use ($data) { - $data[$k] = $data[$k].','.implode(',', $val); - }); - }); - dd($data->toArray()); - } - - public function d($start, $end, $qualificationsSum) - { - $indexes = collect([]); - for ($i = $start; $i < $end; $i++) { - $indexes->push($i); - } - $dict = collect(); - - collect($qualificationsSum)->each(function ($value, $key) use ($dict, $indexes) { - $indexes = $indexes->shuffle(); - $dict->put($key, $indexes->take($value)->all()); - }); - - return $dict; - } - - public function e() - { - $soldiers = - [ - [ - 'id' => 1, - 'team_id' => null, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '1996-02-23T23:31:11.000Z', - 'course' => 3, - 'has_exemption' => true, - 'max_shifts' => 10, - 'max_nights' => 10, - 'max_weekends' => 1000, - 'capacity' => 1000, - 'is_trainee' => true, - 'is_mabat' => false, - 'qualifications' => [], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-02-17T10:33:45.000Z', - 'updated_at' => '2025-02-17T10:33:45.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 3, - 'team_id' => 1, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => '2025-02-12T22:00:00.000Z', - 'course' => 39, - 'has_exemption' => false, - 'max_shifts' => 3, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['בקות'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-02-18T12:32:18.000Z', - 'updated_at' => '2025-04-24T10:20:37.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 16, - 'team_id' => null, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '1111-11-17T22:00:00.000Z', - 'course' => 1, - 'has_exemption' => false, - 'max_shifts' => 0, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => [], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-03T14:19:19.000Z', - 'updated_at' => '2025-05-20T07:57:13.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 6, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => true, - 'enlist_date' => '2025-01-31T22:00:00.000Z', - 'course' => 37, - 'has_exemption' => false, - 'max_shifts' => 2, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 200, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['ציוד'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-02-18T14:16:23.000Z', - 'updated_at' => '2025-03-25T12:03:04.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 79, - 'team_id' => 7, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '2023-03-25T21:00:00.000Z', - 'course' => 42, - 'has_exemption' => true, - 'max_shifts' => 5, - 'max_nights' => 5, - 'max_weekends' => 300, - 'capacity' => 300, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['ציוד', 'בקות'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T15:24:06.000Z', - 'updated_at' => '2025-04-24T10:18:36.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 2, - ], - [ - 'id' => 11, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => true, - 'enlist_date' => null, - 'course' => 36, - 'has_exemption' => false, - 'max_shifts' => 2, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['בקות'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-03T14:05:11.000Z', - 'updated_at' => '2025-04-02T13:19:35.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 25, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 39, - 'has_exemption' => false, - 'max_shifts' => 2, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['תכנון EO', 'Scat C'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-18T10:02:14.000Z', - 'updated_at' => '2025-05-25T10:44:26.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 17, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => '1111-11-17T22:00:00.000Z', - 'course' => 1, - 'has_exemption' => false, - 'max_shifts' => 0, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => [], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-03T14:24:46.000Z', - 'updated_at' => '2025-03-03T14:24:46.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 15, - 'team_id' => null, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '1111-11-17T22:00:00.000Z', - 'course' => 36, - 'has_exemption' => false, - 'max_shifts' => 0, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => [], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-03T14:16:57.000Z', - 'updated_at' => '2025-04-02T06:55:17.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 83, - 'team_id' => null, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '2023-09-18T21:00:00.000Z', - 'course' => 41, - 'has_exemption' => false, - 'max_shifts' => 8, - 'max_nights' => 6, - 'max_weekends' => 200, - 'capacity' => 200, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['פיקוד EO', 'פיקוד SAR', 'בקות', 'בדקן EO', 'בדקן SAR', 'Scat 8', 'Scat C', 'Mid Scat'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T15:25:10.000Z', - 'updated_at' => '2025-05-29T10:35:02.000Z', - 'max_alerts' => 1, - 'max_in_parallel' => 0, - ], - [ - 'id' => 8, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 40, - 'has_exemption' => false, - 'max_shifts' => 4, - 'max_nights' => 4, - 'max_weekends' => 100, - 'capacity' => 100, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['תכנון EO', 'SM'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-02-18T14:20:35.000Z', - 'updated_at' => '2025-04-24T10:16:16.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 18, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => '1111-11-17T22:00:00.000Z', - 'course' => 1, - 'has_exemption' => false, - 'max_shifts' => 0, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 100, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => [], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-03T14:25:34.000Z', - 'updated_at' => '2025-03-20T08:34:41.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 12, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => true, - 'enlist_date' => '1111-11-17T22:00:00.000Z', - 'course' => 1, - 'has_exemption' => false, - 'max_shifts' => 0, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => [], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-03T14:12:20.000Z', - 'updated_at' => '2025-03-04T13:42:04.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 7, - 'team_id' => null, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '2025-01-31T22:00:00.000Z', - 'course' => 39, - 'has_exemption' => false, - 'max_shifts' => 2, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['בדקן SAR', 'פיקוד SAR', 'SCAT SAR'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => true, - 'not_sunday_morning' => true, - 'created_at' => '2025-02-18T14:17:34.000Z', - 'updated_at' => '2025-03-25T14:04:14.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 5, - 'team_id' => null, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '2025-01-31T22:00:00.000Z', - 'course' => 42, - 'has_exemption' => false, - 'max_shifts' => 5, - 'max_nights' => 5, - 'max_weekends' => 300, - 'capacity' => 300, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['עיבוד כל', 'תכנון EO'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-02-18T14:13:25.000Z', - 'updated_at' => '2025-04-24T10:18:36.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 2, - ], - [ - 'id' => 21, - 'team_id' => null, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 39, - 'has_exemption' => false, - 'max_shifts' => 2, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['פיקוד EO', 'Scat 8', 'Scat C', 'בדקן EO'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-04T13:39:11.000Z', - 'updated_at' => '2025-04-06T14:31:35.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 14, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => '1111-11-17T22:00:00.000Z', - 'course' => 1, - 'has_exemption' => false, - 'max_shifts' => 0, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => [], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-03T14:15:58.000Z', - 'updated_at' => '2025-03-20T08:35:16.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 13, - 'team_id' => null, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '1111-11-17T22:00:00.000Z', - 'course' => 1, - 'has_exemption' => false, - 'max_shifts' => 0, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => [], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-03T14:14:24.000Z', - 'updated_at' => '2025-03-30T17:17:45.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 10, - 'team_id' => null, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '2022-11-10T22:00:00.000Z', - 'course' => 38, - 'has_exemption' => false, - 'max_shifts' => 2, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['עיבוד כל', 'עיבוד מסחרי'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-03T13:59:12.000Z', - 'updated_at' => '2025-04-06T14:32:24.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 23, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => true, - 'enlist_date' => '0011-11-08T22:00:00.000Z', - 'course' => 38, - 'has_exemption' => false, - 'max_shifts' => 2, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['תכנון מסחרי'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-18T09:57:14.000Z', - 'updated_at' => '2025-04-03T13:06:34.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 9, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => '2025-01-31T22:00:00.000Z', - 'course' => 39, - 'has_exemption' => false, - 'max_shifts' => 2, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['SM', 'סאר', 'סמלוץ'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-02-19T12:42:54.000Z', - 'updated_at' => '2025-04-07T12:04:55.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 175, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 39, - 'has_exemption' => false, - 'max_shifts' => 4, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['בדקן EO'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-05-25T10:33:32.000Z', - 'updated_at' => '2025-05-25T10:33:32.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 30, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 1, - 'has_exemption' => false, - 'max_shifts' => 0, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => [], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-20T08:30:18.000Z', - 'updated_at' => '2025-03-20T08:35:02.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 31, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 1, - 'has_exemption' => false, - 'max_shifts' => 0, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => [], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-20T08:31:02.000Z', - 'updated_at' => '2025-03-20T08:35:43.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 26, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 39, - 'has_exemption' => false, - 'max_shifts' => 2, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['תכנון מסחרי', 'מנהל מסחרי'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-18T10:03:40.000Z', - 'updated_at' => '2025-04-06T14:31:35.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 43, - 'team_id' => null, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 38, - 'has_exemption' => false, - 'max_shifts' => 2, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => [], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-25T15:50:14.000Z', - 'updated_at' => '2025-04-06T14:32:24.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 32, - 'team_id' => null, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 38, - 'has_exemption' => false, - 'max_shifts' => 2, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => [], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-20T09:03:54.000Z', - 'updated_at' => '2025-03-20T09:36:20.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 34, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 36, - 'has_exemption' => false, - 'max_shifts' => 0, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => [], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-20T09:40:00.000Z', - 'updated_at' => '2025-03-25T12:02:10.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 36, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 2, - 'has_exemption' => false, - 'max_shifts' => 0, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => [], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-25T11:57:21.000Z', - 'updated_at' => '2025-04-02T19:27:35.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 37, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 35, - 'has_exemption' => false, - 'max_shifts' => 0, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => [], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-25T11:59:16.000Z', - 'updated_at' => '2025-03-25T13:00:33.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 27, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => '1139-11-17T22:00:00.000Z', - 'course' => 39, - 'has_exemption' => false, - 'max_shifts' => 2, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['תכנון EO', 'צתים לילה'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-18T12:01:40.000Z', - 'updated_at' => '2025-04-06T14:31:35.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 39, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 2, - 'has_exemption' => false, - 'max_shifts' => 0, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => [], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-25T13:59:53.000Z', - 'updated_at' => '2025-03-25T14:02:34.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 40, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 2, - 'has_exemption' => false, - 'max_shifts' => 0, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => true, - 'qualifications' => [], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-25T14:00:36.000Z', - 'updated_at' => '2025-03-25T14:03:16.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 41, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 2, - 'has_exemption' => false, - 'max_shifts' => 0, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => true, - 'qualifications' => [], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-25T14:01:19.000Z', - 'updated_at' => '2025-03-25T14:03:51.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 29, - 'team_id' => null, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '2025-03-17T22:00:00.000Z', - 'course' => 1, - 'has_exemption' => false, - 'max_shifts' => 0, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => [], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-20T08:29:32.000Z', - 'updated_at' => '2025-05-20T07:57:01.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 28, - 'team_id' => null, - 'gender' => false, - 'is_permanent' => true, - 'enlist_date' => null, - 'course' => 38, - 'has_exemption' => false, - 'max_shifts' => 2, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['סאר'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-18T12:35:41.000Z', - 'updated_at' => '2025-03-31T06:48:52.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 45, - 'team_id' => null, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 30, - 'has_exemption' => false, - 'max_shifts' => 12, - 'max_nights' => 6, - 'max_weekends' => 200, - 'capacity' => 700, - 'is_trainee' => false, - 'is_mabat' => true, - 'qualifications' => ['ציוד'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => true, - 'not_sunday_morning' => true, - 'created_at' => '2025-03-31T07:20:14.000Z', - 'updated_at' => '2025-03-31T07:20:14.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 46, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 30, - 'has_exemption' => false, - 'max_shifts' => 12, - 'max_nights' => 6, - 'max_weekends' => 200, - 'capacity' => 700, - 'is_trainee' => false, - 'is_mabat' => true, - 'qualifications' => ['ציוד'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T07:21:13.000Z', - 'updated_at' => '2025-03-31T07:21:13.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 50, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 1, - 'has_exemption' => false, - 'max_shifts' => 0, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => [], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T07:39:49.000Z', - 'updated_at' => '2025-03-31T08:24:44.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 60, - 'team_id' => 4, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => '2024-03-25T22:00:00.000Z', - 'course' => 42, - 'has_exemption' => false, - 'max_shifts' => 5, - 'max_nights' => 5, - 'max_weekends' => 300, - 'capacity' => 300, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['ציוד', 'בקות'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T11:05:29.000Z', - 'updated_at' => '2025-04-24T10:18:36.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 2, - ], - [ - 'id' => 33, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => true, - 'enlist_date' => null, - 'course' => 38, - 'has_exemption' => false, - 'max_shifts' => 2, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['תכנון מסחרי'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-20T09:24:33.000Z', - 'updated_at' => '2025-03-31T10:18:46.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 4, - 'team_id' => null, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '2025-01-31T22:00:00.000Z', - 'course' => 40, - 'has_exemption' => false, - 'max_shifts' => 4, - 'max_nights' => 4, - 'max_weekends' => 100, - 'capacity' => 100, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['ציוד', 'בקות'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-02-18T14:10:58.000Z', - 'updated_at' => '2025-04-24T10:16:16.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 38, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => true, - 'enlist_date' => null, - 'course' => 36, - 'has_exemption' => false, - 'max_shifts' => 0, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['סאר'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-25T11:59:58.000Z', - 'updated_at' => '2025-03-31T13:57:39.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 176, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 40, - 'has_exemption' => false, - 'max_shifts' => 5, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['בדקן EO', 'בקות', 'פיקוד EO', 'פיקוד SAR', 'בדקן SAR'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-05-25T10:38:37.000Z', - 'updated_at' => '2025-05-25T10:38:37.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 56, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 1, - 'has_exemption' => false, - 'max_shifts' => 0, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => [], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T08:49:35.000Z', - 'updated_at' => '2025-03-31T11:12:50.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 35, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 36, - 'has_exemption' => false, - 'max_shifts' => 0, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['בדקן EO', 'פיקוד EO', 'Scat 8'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-20T09:40:35.000Z', - 'updated_at' => '2025-05-25T10:45:45.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 57, - 'team_id' => 24, - 'gender' => false, - 'is_permanent' => true, - 'enlist_date' => null, - 'course' => 39, - 'has_exemption' => false, - 'max_shifts' => 2, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['בקות'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T09:21:58.000Z', - 'updated_at' => '2025-04-06T14:31:35.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 47, - 'team_id' => null, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 40, - 'has_exemption' => false, - 'max_shifts' => 4, - 'max_nights' => 4, - 'max_weekends' => 100, - 'capacity' => 100, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['בקות', 'ציוד'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T07:32:58.000Z', - 'updated_at' => '2025-04-24T10:16:16.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 48, - 'team_id' => 24, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 37, - 'has_exemption' => false, - 'max_shifts' => 0, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['בקות', 'Mid Scat', 'Scat C', 'Scat 8', 'SCAT SAR', 'בדקן SAR', 'בדקן EO'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T07:34:34.000Z', - 'updated_at' => '2025-04-02T13:19:35.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 55, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 42, - 'has_exemption' => false, - 'max_shifts' => 5, - 'max_nights' => 5, - 'max_weekends' => 300, - 'capacity' => 300, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['בקות', 'פיקוד SAR', 'פיקוד EO'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T07:48:39.000Z', - 'updated_at' => '2025-04-24T10:18:36.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 2, - ], - [ - 'id' => 51, - 'team_id' => null, - 'gender' => false, - 'is_permanent' => true, - 'enlist_date' => '2021-09-11T21:00:00.000Z', - 'course' => 37, - 'has_exemption' => false, - 'max_shifts' => 0, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 700, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['צתים לילה', 'תכנון EO', 'SM'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => true, - 'not_sunday_morning' => true, - 'created_at' => '2025-03-31T07:41:51.000Z', - 'updated_at' => '2025-03-31T07:41:51.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 53, - 'team_id' => null, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '2024-09-21T21:00:00.000Z', - 'course' => 43, - 'has_exemption' => false, - 'max_shifts' => 9, - 'max_nights' => 9, - 'max_weekends' => 400, - 'capacity' => 400, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['רסר מרפם', 'נקיון תהק', 'פיקוד SAR', 'פיקוד EO', 'בקות'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T07:46:19.000Z', - 'updated_at' => '2025-04-24T10:18:17.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 8, - ], - [ - 'id' => 73, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => '2023-03-08T22:00:00.000Z', - 'course' => 40, - 'has_exemption' => false, - 'max_shifts' => 7, - 'max_nights' => 4, - 'max_weekends' => 100, - 'capacity' => 100, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['פיקוד SAR', 'פיקוד EO', 'Scat 8', 'Scat C', 'Mid Scat', 'בדקן EO', 'בדקן SAR', 'בקות'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T15:22:46.000Z', - 'updated_at' => '2025-05-29T09:57:50.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 70, - 'team_id' => null, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '2024-03-25T22:00:00.000Z', - 'course' => 42, - 'has_exemption' => false, - 'max_shifts' => 8, - 'max_nights' => 5, - 'max_weekends' => 300, - 'capacity' => 300, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['בקות', 'פיקוד SAR', 'פיקוד EO', 'בדקן EO'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T12:50:27.000Z', - 'updated_at' => '2025-05-29T10:36:07.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 2, - ], - [ - 'id' => 62, - 'team_id' => 4, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '2024-09-21T21:00:00.000Z', - 'course' => 43, - 'has_exemption' => false, - 'max_shifts' => 9, - 'max_nights' => 9, - 'max_weekends' => 400, - 'capacity' => 400, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['רסר מרפם', 'נקיון תהק', 'ציוד', 'בקות'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T11:08:08.000Z', - 'updated_at' => '2025-04-24T10:18:17.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 8, - ], - [ - 'id' => 72, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => '2024-09-21T21:00:00.000Z', - 'course' => 43, - 'has_exemption' => false, - 'max_shifts' => 9, - 'max_nights' => 9, - 'max_weekends' => 400, - 'capacity' => 400, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['רסר מרפם', 'נקיון תהק', 'פיקוד SAR', 'פיקוד EO', 'בקות'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T12:59:13.000Z', - 'updated_at' => '2025-04-24T10:18:17.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 8, - ], - [ - 'id' => 65, - 'team_id' => 24, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 43, - 'has_exemption' => false, - 'max_shifts' => 9, - 'max_nights' => 9, - 'max_weekends' => 400, - 'capacity' => 400, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['רסר מרפם', 'נקיון תהק', 'תכנון מסחרי', 'תכנון EO'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T12:41:12.000Z', - 'updated_at' => '2025-04-24T10:18:17.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 8, - ], - [ - 'id' => 54, - 'team_id' => null, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '2024-09-22T21:00:00.000Z', - 'course' => 43, - 'has_exemption' => false, - 'max_shifts' => 9, - 'max_nights' => 9, - 'max_weekends' => 400, - 'capacity' => 400, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['רסר מרפם', 'נקיון תהק', 'עיבוד כל', 'תכנון EO'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T07:47:14.000Z', - 'updated_at' => '2025-04-24T10:18:17.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 8, - ], - [ - 'id' => 69, - 'team_id' => null, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '2024-03-25T22:00:00.000Z', - 'course' => 42, - 'has_exemption' => false, - 'max_shifts' => 5, - 'max_nights' => 5, - 'max_weekends' => 300, - 'capacity' => 300, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['בקות', 'ציוד'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => true, - 'not_sunday_morning' => true, - 'created_at' => '2025-03-31T12:49:22.000Z', - 'updated_at' => '2025-04-24T10:18:36.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 2, - ], - [ - 'id' => 74, - 'team_id' => 2, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '2024-03-25T22:00:00.000Z', - 'course' => 42, - 'has_exemption' => false, - 'max_shifts' => 5, - 'max_nights' => 5, - 'max_weekends' => 300, - 'capacity' => 300, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['עיבוד מסחרי', 'תכנון EO'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T15:22:46.000Z', - 'updated_at' => '2025-04-24T10:18:36.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 2, - ], - [ - 'id' => 52, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => '2023-09-18T21:00:00.000Z', - 'course' => 41, - 'has_exemption' => false, - 'max_shifts' => 6, - 'max_nights' => 6, - 'max_weekends' => 200, - 'capacity' => 200, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['תכנון EO', 'עיבוד כל', 'עיבוד מסחרי'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T07:43:04.000Z', - 'updated_at' => '2025-04-24T10:16:48.000Z', - 'max_alerts' => 1, - 'max_in_parallel' => 0, - ], - [ - 'id' => 68, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => '2023-09-18T21:00:00.000Z', - 'course' => 41, - 'has_exemption' => false, - 'max_shifts' => 6, - 'max_nights' => 6, - 'max_weekends' => 200, - 'capacity' => 200, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['ציוד', 'בקות'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T12:47:28.000Z', - 'updated_at' => '2025-04-24T10:16:48.000Z', - 'max_alerts' => 1, - 'max_in_parallel' => 0, - ], - [ - 'id' => 66, - 'team_id' => null, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '2022-09-10T21:00:00.000Z', - 'course' => 39, - 'has_exemption' => false, - 'max_shifts' => 2, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['סאר', 'סמלוץ'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T12:43:42.000Z', - 'updated_at' => '2025-04-07T12:05:31.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 64, - 'team_id' => 24, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 43, - 'has_exemption' => false, - 'max_shifts' => 9, - 'max_nights' => 9, - 'max_weekends' => 400, - 'capacity' => 400, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['רסר מרפם', 'נקיון תהק', 'תכנון EO', 'תכנון מסחרי'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T12:40:41.000Z', - 'updated_at' => '2025-04-24T10:18:17.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 8, - ], - [ - 'id' => 67, - 'team_id' => null, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '2022-09-10T21:00:00.000Z', - 'course' => 39, - 'has_exemption' => false, - 'max_shifts' => 2, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['עיבוד כל', 'עיבוד מסחרי', 'תכנון EO'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T12:45:49.000Z', - 'updated_at' => '2025-04-06T14:31:35.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 59, - 'team_id' => 8, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '2024-03-25T22:00:00.000Z', - 'course' => 42, - 'has_exemption' => true, - 'max_shifts' => 5, - 'max_nights' => 5, - 'max_weekends' => 300, - 'capacity' => 300, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['תכנון מסחרי', 'סאר', 'תכנון EO'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => true, - 'not_sunday_morning' => true, - 'created_at' => '2025-03-31T10:23:09.000Z', - 'updated_at' => '2025-04-24T10:18:36.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 2, - ], - [ - 'id' => 112, - 'team_id' => null, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '2024-09-21T21:00:00.000Z', - 'course' => 43, - 'has_exemption' => false, - 'max_shifts' => 9, - 'max_nights' => 9, - 'max_weekends' => 400, - 'capacity' => 400, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['רסר מרפם', 'נקיון תהק', 'עיבוד כל', 'תכנון EO'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => true, - 'not_sunday_morning' => true, - 'created_at' => '2025-03-31T15:32:57.000Z', - 'updated_at' => '2025-04-24T10:18:17.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 8, - ], - [ - 'id' => 104, - 'team_id' => null, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '2024-09-21T21:00:00.000Z', - 'course' => 43, - 'has_exemption' => false, - 'max_shifts' => 9, - 'max_nights' => 9, - 'max_weekends' => 400, - 'capacity' => 400, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['רסר מרפם', 'נקיון תהק', 'עיבוד מסחרי', 'תכנון EO'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T15:29:45.000Z', - 'updated_at' => '2025-04-24T10:18:17.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 8, - ], - [ - 'id' => 88, - 'team_id' => null, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '2024-03-25T22:00:00.000Z', - 'course' => 42, - 'has_exemption' => false, - 'max_shifts' => 10, - 'max_nights' => 5, - 'max_weekends' => 300, - 'capacity' => 300, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['פיקוד EO', 'פיקוד SAR', 'בקות', 'בדקן EO', 'בדקן SAR'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T15:25:59.000Z', - 'updated_at' => '2025-05-29T10:36:30.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 2, - ], - [ - 'id' => 98, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => '2024-03-25T22:00:00.000Z', - 'course' => 42, - 'has_exemption' => false, - 'max_shifts' => 5, - 'max_nights' => 5, - 'max_weekends' => 300, - 'capacity' => 300, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['תכנון EO', 'עיבוד מסחרי', 'SM'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T15:28:26.000Z', - 'updated_at' => '2025-04-24T10:18:36.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 2, - ], - [ - 'id' => 77, - 'team_id' => null, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '2023-03-08T22:00:00.000Z', - 'course' => 40, - 'has_exemption' => false, - 'max_shifts' => 4, - 'max_nights' => 4, - 'max_weekends' => 100, - 'capacity' => 100, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['פיקוד EO', 'פיקוד SAR', 'בדקן EO', 'בדקן SAR', 'עיבוד כל', 'Scat 8'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T15:23:51.000Z', - 'updated_at' => '2025-04-24T10:16:16.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 105, - 'team_id' => null, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '2024-09-21T21:00:00.000Z', - 'course' => 43, - 'has_exemption' => false, - 'max_shifts' => 9, - 'max_nights' => 9, - 'max_weekends' => 400, - 'capacity' => 400, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['רסר מרפם', 'נקיון תהק', 'תכנון EO', 'סאר'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T15:30:12.000Z', - 'updated_at' => '2025-04-24T10:18:17.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 8, - ], - [ - 'id' => 93, - 'team_id' => 10, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => '2024-09-21T21:00:00.000Z', - 'course' => 43, - 'has_exemption' => false, - 'max_shifts' => 9, - 'max_nights' => 9, - 'max_weekends' => 400, - 'capacity' => 400, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['רסר מרפם', 'נקיון תהק', 'פיקוד SAR', 'פיקוד EO', 'בקות'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => true, - 'not_sunday_morning' => true, - 'created_at' => '2025-03-31T15:27:06.000Z', - 'updated_at' => '2025-04-24T10:18:17.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 8, - ], - [ - 'id' => 97, - 'team_id' => null, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '2024-09-21T21:00:00.000Z', - 'course' => 43, - 'has_exemption' => false, - 'max_shifts' => 9, - 'max_nights' => 9, - 'max_weekends' => 400, - 'capacity' => 400, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['רסר מרפם', 'נקיון תהק', 'עיבוד כל', 'תכנון EO'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T15:28:25.000Z', - 'updated_at' => '2025-04-24T10:18:17.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 8, - ], - [ - 'id' => 84, - 'team_id' => null, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '2023-03-08T22:00:00.000Z', - 'course' => 40, - 'has_exemption' => false, - 'max_shifts' => 4, - 'max_nights' => 4, - 'max_weekends' => 100, - 'capacity' => 100, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['עיבוד כל', 'עיבוד מסחרי', 'תכנון EO', 'צתים לילה'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T15:25:25.000Z', - 'updated_at' => '2025-04-24T10:16:16.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 90, - 'team_id' => null, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '2024-09-21T21:00:00.000Z', - 'course' => 43, - 'has_exemption' => false, - 'max_shifts' => 9, - 'max_nights' => 9, - 'max_weekends' => 400, - 'capacity' => 400, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['רסר מרפם', 'נקיון תהק', 'פיקוד SAR', 'פיקוד EO', 'בקות'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => true, - 'not_sunday_morning' => true, - 'created_at' => '2025-03-31T15:26:54.000Z', - 'updated_at' => '2025-04-24T10:18:17.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 8, - ], - [ - 'id' => 110, - 'team_id' => 5, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => '2024-03-25T22:00:00.000Z', - 'course' => 42, - 'has_exemption' => false, - 'max_shifts' => 5, - 'max_nights' => 5, - 'max_weekends' => 300, - 'capacity' => 300, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['עיבוד כל', 'תכנון EO', 'צתים לילה'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T15:31:43.000Z', - 'updated_at' => '2025-04-24T10:18:36.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 2, - ], - [ - 'id' => 75, - 'team_id' => null, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '2023-03-08T22:00:00.000Z', - 'course' => 40, - 'has_exemption' => false, - 'max_shifts' => 4, - 'max_nights' => 4, - 'max_weekends' => 100, - 'capacity' => 100, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['תכנון EO', 'סאר', 'SCAT SAR'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => true, - 'not_sunday_morning' => true, - 'created_at' => '2025-03-31T15:22:46.000Z', - 'updated_at' => '2025-05-25T12:28:48.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 89, - 'team_id' => 7, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '2023-09-08T21:00:00.000Z', - 'course' => 41, - 'has_exemption' => false, - 'max_shifts' => 6, - 'max_nights' => 6, - 'max_weekends' => 200, - 'capacity' => 200, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['ציוד', 'בקות'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T15:26:40.000Z', - 'updated_at' => '2025-04-24T10:16:48.000Z', - 'max_alerts' => 1, - 'max_in_parallel' => 0, - ], - [ - 'id' => 61, - 'team_id' => 4, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '2024-03-25T22:00:00.000Z', - 'course' => 42, - 'has_exemption' => false, - 'max_shifts' => 5, - 'max_nights' => 5, - 'max_weekends' => 300, - 'capacity' => 300, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['ציוד', 'בקות'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T11:07:21.000Z', - 'updated_at' => '2025-04-24T10:18:36.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 2, - ], - [ - 'id' => 174, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 39, - 'has_exemption' => false, - 'max_shifts' => 6, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['Mid Scat', 'Scat 8', 'בדקן EO', 'בדקן SAR', 'פיקוד EO', 'פיקוד SAR'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-05-25T10:31:41.000Z', - 'updated_at' => '2025-05-29T10:35:40.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 82, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => true, - 'enlist_date' => null, - 'course' => 38, - 'has_exemption' => false, - 'max_shifts' => 2, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['תכנון EO', 'עיבוד כל'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T15:24:36.000Z', - 'updated_at' => '2025-04-06T14:32:24.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 101, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => true, - 'enlist_date' => null, - 'course' => 38, - 'has_exemption' => false, - 'max_shifts' => 2, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => [], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T15:28:50.000Z', - 'updated_at' => '2025-04-06T14:32:24.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 44, - 'team_id' => 22, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '2023-09-18T21:00:00.000Z', - 'course' => 41, - 'has_exemption' => false, - 'max_shifts' => 9, - 'max_nights' => 6, - 'max_weekends' => 200, - 'capacity' => 200, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['פיקוד SAR', 'פיקוד EO', 'בדקן EO', 'בדקן SAR', 'Mid Scat', 'Scat C', 'SCAT SAR'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => true, - 'not_sunday_morning' => true, - 'created_at' => '2025-03-31T06:59:19.000Z', - 'updated_at' => '2025-05-29T09:55:13.000Z', - 'max_alerts' => 1, - 'max_in_parallel' => 0, - ], - [ - 'id' => 78, - 'team_id' => 10, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '2024-03-25T22:00:00.000Z', - 'course' => 42, - 'has_exemption' => false, - 'max_shifts' => 10, - 'max_nights' => 5, - 'max_weekends' => 300, - 'capacity' => 300, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['פיקוד SAR', 'פיקוד EO', 'בקות', 'SCAT SAR', 'בדקן SAR'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => true, - 'not_sunday_morning' => true, - 'created_at' => '2025-03-31T15:24:04.000Z', - 'updated_at' => '2025-05-29T10:37:09.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 2, - ], - [ - 'id' => 95, - 'team_id' => 10, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '2024-09-21T21:00:00.000Z', - 'course' => 43, - 'has_exemption' => false, - 'max_shifts' => 9, - 'max_nights' => 9, - 'max_weekends' => 400, - 'capacity' => 400, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['רסר מרפם', 'נקיון תהק', 'פיקוד SAR', 'פיקוד EO', 'בקות'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T15:27:52.000Z', - 'updated_at' => '2025-04-24T10:18:17.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 8, - ], - [ - 'id' => 108, - 'team_id' => null, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '2024-09-21T21:00:00.000Z', - 'course' => 43, - 'has_exemption' => false, - 'max_shifts' => 9, - 'max_nights' => 9, - 'max_weekends' => 400, - 'capacity' => 400, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['רסר מרפם', 'נקיון תהק', 'ציוד', 'בקות'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T15:31:07.000Z', - 'updated_at' => '2025-04-24T10:18:17.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 8, - ], - [ - 'id' => 87, - 'team_id' => null, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '2024-03-25T22:00:00.000Z', - 'course' => 42, - 'has_exemption' => false, - 'max_shifts' => 5, - 'max_nights' => 5, - 'max_weekends' => 300, - 'capacity' => 300, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['סאר', 'תכנון EO'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T15:25:45.000Z', - 'updated_at' => '2025-04-24T10:18:36.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 2, - ], - [ - 'id' => 107, - 'team_id' => 5, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '2023-09-18T21:00:00.000Z', - 'course' => 41, - 'has_exemption' => false, - 'max_shifts' => 6, - 'max_nights' => 6, - 'max_weekends' => 200, - 'capacity' => 200, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['עיבוד כל', 'עיבוד מסחרי', 'תכנון EO', 'צתים לילה'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T15:30:35.000Z', - 'updated_at' => '2025-04-24T10:16:48.000Z', - 'max_alerts' => 1, - 'max_in_parallel' => 0, - ], - [ - 'id' => 76, - 'team_id' => 10, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '2023-09-18T21:00:00.000Z', - 'course' => 41, - 'has_exemption' => false, - 'max_shifts' => 6, - 'max_nights' => 6, - 'max_weekends' => 200, - 'capacity' => 200, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['פיקוד SAR', 'SCAT SAR', 'בקות', 'פיקוד EO', 'בדקן SAR', 'בדקן EO'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T15:22:55.000Z', - 'updated_at' => '2025-04-24T10:16:48.000Z', - 'max_alerts' => 1, - 'max_in_parallel' => 0, - ], - [ - 'id' => 103, - 'team_id' => null, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '2024-09-21T21:00:00.000Z', - 'course' => 43, - 'has_exemption' => false, - 'max_shifts' => 9, - 'max_nights' => 9, - 'max_weekends' => 400, - 'capacity' => 400, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['רסר מרפם', 'נקיון תהק', 'ציוד', 'בקות'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T15:29:31.000Z', - 'updated_at' => '2025-04-24T10:18:17.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 8, - ], - [ - 'id' => 96, - 'team_id' => null, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '2024-09-21T21:00:00.000Z', - 'course' => 43, - 'has_exemption' => false, - 'max_shifts' => 9, - 'max_nights' => 9, - 'max_weekends' => 400, - 'capacity' => 400, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['רסר מרפם', 'נקיון תהק', 'פיקוד SAR', 'פיקוד EO', 'בקות'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T15:27:55.000Z', - 'updated_at' => '2025-04-24T10:18:17.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 8, - ], - [ - 'id' => 80, - 'team_id' => 2, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => '2024-03-25T22:00:00.000Z', - 'course' => 42, - 'has_exemption' => false, - 'max_shifts' => 5, - 'max_nights' => 5, - 'max_weekends' => 300, - 'capacity' => 300, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['עיבוד כל', 'תכנון EO'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => true, - 'not_sunday_morning' => true, - 'created_at' => '2025-03-31T15:24:18.000Z', - 'updated_at' => '2025-04-24T10:18:36.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 2, - ], - [ - 'id' => 91, - 'team_id' => 16, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => '2024-03-26T22:00:00.000Z', - 'course' => 42, - 'has_exemption' => false, - 'max_shifts' => 5, - 'max_nights' => 5, - 'max_weekends' => 300, - 'capacity' => 300, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['תכנון מסחרי', 'תכנון EO'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T15:26:57.000Z', - 'updated_at' => '2025-04-24T10:18:36.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 2, - ], - [ - 'id' => 99, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => '2024-03-25T22:00:00.000Z', - 'course' => 42, - 'has_exemption' => false, - 'max_shifts' => 5, - 'max_nights' => 5, - 'max_weekends' => 300, - 'capacity' => 300, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['תכנון EO', 'תכנון מסחרי'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T15:28:31.000Z', - 'updated_at' => '2025-04-24T10:18:36.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 2, - ], - [ - 'id' => 81, - 'team_id' => null, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '2023-09-18T21:00:00.000Z', - 'course' => 41, - 'has_exemption' => false, - 'max_shifts' => 6, - 'max_nights' => 6, - 'max_weekends' => 200, - 'capacity' => 200, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['סאר', 'תכנון EO'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => true, - 'not_sunday_morning' => true, - 'created_at' => '2025-03-31T15:24:33.000Z', - 'updated_at' => '2025-04-24T10:16:48.000Z', - 'max_alerts' => 1, - 'max_in_parallel' => 0, - ], - [ - 'id' => 106, - 'team_id' => null, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '2023-09-18T21:00:00.000Z', - 'course' => 41, - 'has_exemption' => false, - 'max_shifts' => 6, - 'max_nights' => 6, - 'max_weekends' => 200, - 'capacity' => 200, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['בקות', 'ציוד'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => true, - 'not_sunday_morning' => true, - 'created_at' => '2025-03-31T15:30:33.000Z', - 'updated_at' => '2025-04-24T10:16:48.000Z', - 'max_alerts' => 1, - 'max_in_parallel' => 0, - ], - [ - 'id' => 126, - 'team_id' => 33, - 'gender' => false, - 'is_permanent' => true, - 'enlist_date' => null, - 'course' => 39, - 'has_exemption' => false, - 'max_shifts' => 2, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => true, - 'qualifications' => ['ציוד', 'בקות'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-01T17:15:53.000Z', - 'updated_at' => '2025-04-06T14:31:35.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 111, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => '2024-09-21T21:00:00.000Z', - 'course' => 43, - 'has_exemption' => false, - 'max_shifts' => 9, - 'max_nights' => 9, - 'max_weekends' => 400, - 'capacity' => 400, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['רסר מרפם', 'נקיון תהק', 'תכנון EO', 'סאר'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T15:32:28.000Z', - 'updated_at' => '2025-04-24T10:18:17.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 8, - ], - [ - 'id' => 118, - 'team_id' => null, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 1, - 'has_exemption' => false, - 'max_shifts' => 0, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => [], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T17:23:02.000Z', - 'updated_at' => '2025-03-31T18:30:53.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 119, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 1, - 'has_exemption' => false, - 'max_shifts' => 0, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => [], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T17:23:58.000Z', - 'updated_at' => '2025-03-31T18:33:33.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 125, - 'team_id' => 33, - 'gender' => true, - 'is_permanent' => true, - 'enlist_date' => null, - 'course' => 39, - 'has_exemption' => false, - 'max_shifts' => 2, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => true, - 'qualifications' => ['ציוד', 'בקות'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => true, - 'not_sunday_morning' => true, - 'created_at' => '2025-04-01T17:14:53.000Z', - 'updated_at' => '2025-04-06T14:31:35.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 102, - 'team_id' => 5, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '2023-09-18T21:00:00.000Z', - 'course' => 41, - 'has_exemption' => false, - 'max_shifts' => 6, - 'max_nights' => 6, - 'max_weekends' => 200, - 'capacity' => 200, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['סאר', 'תכנון EO', 'SM', 'צתים לילה'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T15:29:30.000Z', - 'updated_at' => '2025-04-24T10:16:48.000Z', - 'max_alerts' => 1, - 'max_in_parallel' => 0, - ], - [ - 'id' => 117, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 38, - 'has_exemption' => false, - 'max_shifts' => 2, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['מנהל מסחרי', 'תכנון מסחרי'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T17:13:49.000Z', - 'updated_at' => '2025-04-06T14:32:24.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 120, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 42, - 'has_exemption' => false, - 'max_shifts' => 5, - 'max_nights' => 5, - 'max_weekends' => 300, - 'capacity' => 300, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['עיבוד מסחרי', 'תכנון EO'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-01T09:49:35.000Z', - 'updated_at' => '2025-04-24T10:18:36.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 2, - ], - [ - 'id' => 122, - 'team_id' => 32, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '2023-03-08T22:00:00.000Z', - 'course' => 40, - 'has_exemption' => false, - 'max_shifts' => 4, - 'max_nights' => 4, - 'max_weekends' => 100, - 'capacity' => 100, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['תכנון מסחרי', 'מנהל מסחרי', 'תכנון EO'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-01T10:14:09.000Z', - 'updated_at' => '2025-04-24T10:16:16.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 114, - 'team_id' => 6, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 42, - 'has_exemption' => false, - 'max_shifts' => 5, - 'max_nights' => 5, - 'max_weekends' => 300, - 'capacity' => 300, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['תכנון מסחרי', 'תכנון EO', 'מנהל מסחרי'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T15:41:45.000Z', - 'updated_at' => '2025-04-24T10:18:36.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 2, - ], - [ - 'id' => 116, - 'team_id' => null, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 39, - 'has_exemption' => false, - 'max_shifts' => 2, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['תכנון EO', 'סאר'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T17:12:12.000Z', - 'updated_at' => '2025-04-06T14:31:35.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 123, - 'team_id' => 32, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '2023-09-18T21:00:00.000Z', - 'course' => 41, - 'has_exemption' => false, - 'max_shifts' => 6, - 'max_nights' => 6, - 'max_weekends' => 200, - 'capacity' => 200, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['תכנון EO', 'עיבוד כל', 'עיבוד מסחרי'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-01T10:16:58.000Z', - 'updated_at' => '2025-04-24T10:16:48.000Z', - 'max_alerts' => 1, - 'max_in_parallel' => 0, - ], - [ - 'id' => 100, - 'team_id' => null, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '2024-09-21T21:00:00.000Z', - 'course' => 43, - 'has_exemption' => false, - 'max_shifts' => 9, - 'max_nights' => 9, - 'max_weekends' => 400, - 'capacity' => 400, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['רסר מרפם', 'נקיון תהק', 'סאר', 'תכנון EO'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => true, - 'not_sunday_morning' => true, - 'created_at' => '2025-03-31T15:28:47.000Z', - 'updated_at' => '2025-04-24T10:18:17.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 8, - ], - [ - 'id' => 92, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => '2024-03-25T22:00:00.000Z', - 'course' => 42, - 'has_exemption' => false, - 'max_shifts' => 5, - 'max_nights' => 5, - 'max_weekends' => 300, - 'capacity' => 300, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['סאר', 'תכנון EO'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => true, - 'not_sunday_morning' => true, - 'created_at' => '2025-03-31T15:27:01.000Z', - 'updated_at' => '2025-04-24T10:18:36.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 2, - ], - [ - 'id' => 86, - 'team_id' => null, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '2023-03-08T22:00:00.000Z', - 'course' => 40, - 'has_exemption' => false, - 'max_shifts' => 4, - 'max_nights' => 4, - 'max_weekends' => 100, - 'capacity' => 100, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['עיבוד כל', 'עיבוד מסחרי', 'תכנון EO'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T15:25:44.000Z', - 'updated_at' => '2025-04-24T10:16:16.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 109, - 'team_id' => null, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => '2024-09-21T21:00:00.000Z', - 'course' => 43, - 'has_exemption' => false, - 'max_shifts' => 9, - 'max_nights' => 9, - 'max_weekends' => 400, - 'capacity' => 400, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['רסר מרפם', 'נקיון תהק', 'עיבוד מסחרי', 'תכנון EO'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T15:31:21.000Z', - 'updated_at' => '2025-04-24T10:18:17.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 8, - ], - [ - 'id' => 113, - 'team_id' => 6, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 41, - 'has_exemption' => false, - 'max_shifts' => 6, - 'max_nights' => 6, - 'max_weekends' => 200, - 'capacity' => 200, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['תכנון מסחרי'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T15:39:30.000Z', - 'updated_at' => '2025-04-24T10:16:48.000Z', - 'max_alerts' => 1, - 'max_in_parallel' => 0, - ], - [ - 'id' => 124, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => true, - 'enlist_date' => null, - 'course' => 36, - 'has_exemption' => false, - 'max_shifts' => 0, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => true, - 'qualifications' => ['תכנון EO', 'צתים לילה'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-01T17:10:00.000Z', - 'updated_at' => '2025-04-01T18:18:48.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 127, - 'team_id' => 33, - 'gender' => false, - 'is_permanent' => true, - 'enlist_date' => null, - 'course' => 39, - 'has_exemption' => false, - 'max_shifts' => 2, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => true, - 'qualifications' => ['תכנון EO', 'תכנון מסחרי'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-01T17:17:01.000Z', - 'updated_at' => '2025-04-06T14:31:35.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 134, - 'team_id' => 14, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 40, - 'has_exemption' => false, - 'max_shifts' => 4, - 'max_nights' => 4, - 'max_weekends' => 100, - 'capacity' => 100, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['תכנון EO', 'SM'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-02T06:50:52.000Z', - 'updated_at' => '2025-04-24T10:16:16.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 135, - 'team_id' => 14, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 41, - 'has_exemption' => false, - 'max_shifts' => 6, - 'max_nights' => 6, - 'max_weekends' => 200, - 'capacity' => 200, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['סאר', 'SM', 'תכנון EO', 'סמלוץ'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-02T06:51:48.000Z', - 'updated_at' => '2025-04-24T10:16:48.000Z', - 'max_alerts' => 1, - 'max_in_parallel' => 0, - ], - [ - 'id' => 128, - 'team_id' => 33, - 'gender' => false, - 'is_permanent' => true, - 'enlist_date' => null, - 'course' => 39, - 'has_exemption' => false, - 'max_shifts' => 2, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => true, - 'qualifications' => ['תכנון EO', 'סאר'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-01T17:18:12.000Z', - 'updated_at' => '2025-04-06T14:31:35.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 132, - 'team_id' => 14, - 'gender' => false, - 'is_permanent' => true, - 'enlist_date' => null, - 'course' => 39, - 'has_exemption' => false, - 'max_shifts' => 2, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['סאר'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-02T06:48:37.000Z', - 'updated_at' => '2025-04-06T14:31:35.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 131, - 'team_id' => 14, - 'gender' => true, - 'is_permanent' => true, - 'enlist_date' => null, - 'course' => 38, - 'has_exemption' => false, - 'max_shifts' => 2, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['תכנון EO', 'SM', 'סאר', 'סמלוץ'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-02T06:47:37.000Z', - 'updated_at' => '2025-04-06T14:32:24.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 136, - 'team_id' => 14, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 42, - 'has_exemption' => false, - 'max_shifts' => 5, - 'max_nights' => 5, - 'max_weekends' => 300, - 'capacity' => 300, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['פיקוד SAR', 'פיקוד EO', 'בקות'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-02T06:52:54.000Z', - 'updated_at' => '2025-04-24T10:18:36.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 2, - ], - [ - 'id' => 149, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 43, - 'has_exemption' => false, - 'max_shifts' => 9, - 'max_nights' => 9, - 'max_weekends' => 400, - 'capacity' => 400, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['ציוד', 'בקות', 'רסר מרפם', 'נקיון תהק'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-06T13:17:40.000Z', - 'updated_at' => '2025-04-24T10:18:17.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 8, - ], - [ - 'id' => 139, - 'team_id' => 15, - 'gender' => false, - 'is_permanent' => true, - 'enlist_date' => '2021-09-11T21:00:00.000Z', - 'course' => 37, - 'has_exemption' => false, - 'max_shifts' => 0, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['פיקוד SAR', 'פיקוד EO', 'בדקן SAR', 'בדקן EO', 'SCAT SAR', 'Scat C', 'Scat 8'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-02T18:41:01.000Z', - 'updated_at' => '2025-04-02T19:27:35.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 143, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => '2023-09-02T21:00:00.000Z', - 'course' => 41, - 'has_exemption' => false, - 'max_shifts' => 6, - 'max_nights' => 6, - 'max_weekends' => 200, - 'capacity' => 200, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['תכנון EO', 'SM', 'מנהל מסחרי', 'תכנון מסחרי'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-03T13:42:12.000Z', - 'updated_at' => '2025-04-24T10:16:48.000Z', - 'max_alerts' => 1, - 'max_in_parallel' => 0, - ], - [ - 'id' => 133, - 'team_id' => 14, - 'gender' => false, - 'is_permanent' => true, - 'enlist_date' => null, - 'course' => 39, - 'has_exemption' => false, - 'max_shifts' => 2, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['בדקן EO', 'בדקן SAR', 'פיקוד EO', 'פיקוד SAR', 'Scat 8', 'SCAT SAR'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-02T06:50:00.000Z', - 'updated_at' => '2025-04-06T14:31:35.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 146, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 42, - 'has_exemption' => false, - 'max_shifts' => 5, - 'max_nights' => 5, - 'max_weekends' => 300, - 'capacity' => 300, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['פיקוד SAR', 'פיקוד EO', 'בקות'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => true, - 'not_sunday_morning' => true, - 'created_at' => '2025-04-06T13:05:45.000Z', - 'updated_at' => '2025-04-24T10:18:36.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 2, - ], - [ - 'id' => 145, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 42, - 'has_exemption' => false, - 'max_shifts' => 5, - 'max_nights' => 5, - 'max_weekends' => 300, - 'capacity' => 300, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['תכנון EO', 'תכנון מסחרי'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => true, - 'not_sunday_morning' => true, - 'created_at' => '2025-04-06T13:04:48.000Z', - 'updated_at' => '2025-04-24T10:18:36.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 2, - ], - [ - 'id' => 129, - 'team_id' => 33, - 'gender' => false, - 'is_permanent' => true, - 'enlist_date' => null, - 'course' => 39, - 'has_exemption' => false, - 'max_shifts' => 2, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => true, - 'qualifications' => ['בקות', 'פיקוד SAR', 'פיקוד EO', 'בדקן EO', 'בדקן SAR', 'SCAT SAR'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-01T17:19:43.000Z', - 'updated_at' => '2025-04-06T14:31:35.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 115, - 'team_id' => 6, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 42, - 'has_exemption' => false, - 'max_shifts' => 5, - 'max_nights' => 5, - 'max_weekends' => 300, - 'capacity' => 300, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['תכנון מסחרי', 'תכנון EO', 'מנהל מסחרי'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T15:42:52.000Z', - 'updated_at' => '2025-04-24T10:18:36.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 2, - ], - [ - 'id' => 147, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 42, - 'has_exemption' => false, - 'max_shifts' => 5, - 'max_nights' => 5, - 'max_weekends' => 300, - 'capacity' => 300, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['ציוד', 'בקות'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-06T13:07:09.000Z', - 'updated_at' => '2025-04-24T10:18:36.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 2, - ], - [ - 'id' => 144, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 42, - 'has_exemption' => false, - 'max_shifts' => 5, - 'max_nights' => 5, - 'max_weekends' => 300, - 'capacity' => 300, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['סאר', 'תכנון EO'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-06T12:58:51.000Z', - 'updated_at' => '2025-04-24T10:18:36.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 2, - ], - [ - 'id' => 58, - 'team_id' => 24, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 42, - 'has_exemption' => false, - 'max_shifts' => 5, - 'max_nights' => 5, - 'max_weekends' => 300, - 'capacity' => 300, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['תכנון EO', 'תכנון מסחרי'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T09:23:03.000Z', - 'updated_at' => '2025-04-24T10:18:36.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 2, - ], - [ - 'id' => 150, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 43, - 'has_exemption' => false, - 'max_shifts' => 9, - 'max_nights' => 9, - 'max_weekends' => 400, - 'capacity' => 400, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['ציוד', 'בקות', 'רסר מרפם', 'נקיון תהק'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-06T13:18:20.000Z', - 'updated_at' => '2025-04-24T10:18:17.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 8, - ], - [ - 'id' => 130, - 'team_id' => 33, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 41, - 'has_exemption' => false, - 'max_shifts' => 6, - 'max_nights' => 6, - 'max_weekends' => 200, - 'capacity' => 200, - 'is_trainee' => false, - 'is_mabat' => true, - 'qualifications' => ['תכנון EO', 'עיבוד כל', 'עיבוד מסחרי'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => true, - 'not_sunday_morning' => true, - 'created_at' => '2025-04-01T17:20:24.000Z', - 'updated_at' => '2025-04-24T10:16:48.000Z', - 'max_alerts' => 1, - 'max_in_parallel' => 0, - ], - [ - 'id' => 140, - 'team_id' => 15, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => '2023-03-08T22:00:00.000Z', - 'course' => 40, - 'has_exemption' => false, - 'max_shifts' => 4, - 'max_nights' => 4, - 'max_weekends' => 100, - 'capacity' => 100, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['בקות', 'ציוד'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-02T18:54:58.000Z', - 'updated_at' => '2025-04-24T10:16:16.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 142, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => '2024-09-02T21:00:00.000Z', - 'course' => 41, - 'has_exemption' => false, - 'max_shifts' => 6, - 'max_nights' => 6, - 'max_weekends' => 200, - 'capacity' => 200, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['SM', 'מנהל מסחרי', 'תכנון EO'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-03T13:41:05.000Z', - 'updated_at' => '2025-04-24T10:16:48.000Z', - 'max_alerts' => 1, - 'max_in_parallel' => 0, - ], - [ - 'id' => 141, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => '2022-09-10T21:00:00.000Z', - 'course' => 39, - 'has_exemption' => false, - 'max_shifts' => 2, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['סאר'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-03T13:37:53.000Z', - 'updated_at' => '2025-04-07T12:01:19.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 138, - 'team_id' => 24, - 'gender' => false, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 42, - 'has_exemption' => false, - 'max_shifts' => 5, - 'max_nights' => 5, - 'max_weekends' => 300, - 'capacity' => 300, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['ציוד', 'בקות'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-02T12:41:31.000Z', - 'updated_at' => '2025-04-24T10:18:36.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 2, - ], - [ - 'id' => 151, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 43, - 'has_exemption' => false, - 'max_shifts' => 9, - 'max_nights' => 9, - 'max_weekends' => 400, - 'capacity' => 400, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['ציוד', 'בקות', 'רסר מרפם', 'נקיון תהק'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-06T13:19:11.000Z', - 'updated_at' => '2025-04-24T10:18:17.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 8, - ], - [ - 'id' => 152, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 43, - 'has_exemption' => false, - 'max_shifts' => 9, - 'max_nights' => 9, - 'max_weekends' => 400, - 'capacity' => 400, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['תכנון מסחרי', 'תכנון EO', 'רסר מרפם', 'נקיון תהק'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-06T13:23:37.000Z', - 'updated_at' => '2025-04-24T10:18:17.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 8, - ], - [ - 'id' => 153, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 43, - 'has_exemption' => false, - 'max_shifts' => 9, - 'max_nights' => 9, - 'max_weekends' => 400, - 'capacity' => 400, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['תכנון מסחרי', 'תכנון EO', 'רסר מרפם', 'נקיון תהק'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-06T13:24:46.000Z', - 'updated_at' => '2025-04-24T10:18:17.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 8, - ], - [ - 'id' => 71, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => '2024-10-21T21:00:00.000Z', - 'course' => 43, - 'has_exemption' => false, - 'max_shifts' => 9, - 'max_nights' => 9, - 'max_weekends' => 400, - 'capacity' => 400, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['רסר מרפם', 'נקיון תהק', 'תכנון EO', 'תכנון מסחרי'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T12:58:11.000Z', - 'updated_at' => '2025-04-24T10:18:17.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 8, - ], - [ - 'id' => 161, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 40, - 'has_exemption' => false, - 'max_shifts' => 4, - 'max_nights' => 4, - 'max_weekends' => 100, - 'capacity' => 100, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['תכנון EO', 'סאר'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-06T14:08:00.000Z', - 'updated_at' => '2025-04-24T10:16:16.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 156, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 40, - 'has_exemption' => false, - 'max_shifts' => 4, - 'max_nights' => 4, - 'max_weekends' => 100, - 'capacity' => 100, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['עיבוד כל', 'תכנון EO', 'SM'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-06T14:03:34.000Z', - 'updated_at' => '2025-04-24T10:16:16.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 160, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 40, - 'has_exemption' => false, - 'max_shifts' => 4, - 'max_nights' => 4, - 'max_weekends' => 100, - 'capacity' => 100, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['SM', 'תכנון EO'], - 'is_reservist' => false, - 'last_reserve_dates' => [], - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-06T14:06:54.000Z', - 'updated_at' => '2025-04-24T10:16:16.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 157, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 40, - 'has_exemption' => false, - 'max_shifts' => 4, - 'max_nights' => 4, - 'max_weekends' => 100, - 'capacity' => 100, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['עיבוד כל', 'עיבוד מסחרי', 'תכנון EO'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-06T14:04:16.000Z', - 'updated_at' => '2025-04-24T10:16:16.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 169, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 39, - 'has_exemption' => false, - 'max_shifts' => 2, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['עיבוד כל', 'עיבוד מסחרי'], - 'is_reservist' => false, - 'last_reserve_dates' => [], - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-06T14:15:23.000Z', - 'updated_at' => '2025-04-06T14:31:35.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 170, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 38, - 'has_exemption' => false, - 'max_shifts' => 2, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['עיבוד כל', 'עיבוד מסחרי'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-06T14:17:31.000Z', - 'updated_at' => '2025-04-06T14:32:24.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 158, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 40, - 'has_exemption' => false, - 'max_shifts' => 4, - 'max_nights' => 4, - 'max_weekends' => 100, - 'capacity' => 100, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['SM', 'תכנון EO'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-06T14:05:08.000Z', - 'updated_at' => '2025-04-24T10:16:16.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 163, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 40, - 'has_exemption' => false, - 'max_shifts' => 4, - 'max_nights' => 4, - 'max_weekends' => 100, - 'capacity' => 100, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['תכנון מסחרי'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-06T14:09:49.000Z', - 'updated_at' => '2025-04-24T10:16:16.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 159, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 40, - 'has_exemption' => false, - 'max_shifts' => 4, - 'max_nights' => 4, - 'max_weekends' => 100, - 'capacity' => 100, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['SM', 'תכנון EO'], - 'is_reservist' => false, - 'last_reserve_dates' => [], - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-06T14:06:02.000Z', - 'updated_at' => '2025-04-24T10:16:16.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 164, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 40, - 'has_exemption' => false, - 'max_shifts' => 4, - 'max_nights' => 4, - 'max_weekends' => 100, - 'capacity' => 100, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['תכנון מסחרי'], - 'is_reservist' => false, - 'last_reserve_dates' => [], - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-06T14:10:36.000Z', - 'updated_at' => '2025-04-24T10:16:16.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 166, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 40, - 'has_exemption' => false, - 'max_shifts' => 4, - 'max_nights' => 4, - 'max_weekends' => 100, - 'capacity' => 100, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['תכנון EO', 'SM', 'Scat 8'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-06T14:13:16.000Z', - 'updated_at' => '2025-04-24T10:16:16.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 155, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 41, - 'has_exemption' => false, - 'max_shifts' => 6, - 'max_nights' => 6, - 'max_weekends' => 200, - 'capacity' => 200, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['עיבוד כל', 'עיבוד מסחרי', 'תכנון EO'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-06T14:01:43.000Z', - 'updated_at' => '2025-04-24T10:16:48.000Z', - 'max_alerts' => 1, - 'max_in_parallel' => 0, - ], - [ - 'id' => 137, - 'team_id' => 14, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 43, - 'has_exemption' => false, - 'max_shifts' => 9, - 'max_nights' => 9, - 'max_weekends' => 400, - 'capacity' => 400, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['רסר מרפם', 'נקיון תהק', 'סאר', 'תכנון EO'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-02T06:54:10.000Z', - 'updated_at' => '2025-04-24T10:18:17.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 8, - ], - [ - 'id' => 63, - 'team_id' => 24, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 43, - 'has_exemption' => false, - 'max_shifts' => 9, - 'max_nights' => 9, - 'max_weekends' => 400, - 'capacity' => 400, - 'is_trainee' => true, - 'is_mabat' => false, - 'qualifications' => ['רסר מרפם', 'נקיון תהק', 'תכנון EO', 'תכנון מסחרי'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-03-31T12:37:12.000Z', - 'updated_at' => '2025-04-24T10:18:17.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 8, - ], - [ - 'id' => 167, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 39, - 'has_exemption' => false, - 'max_shifts' => 2, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['עיבוד כל', 'עיבוד מסחרי'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-06T14:13:59.000Z', - 'updated_at' => '2025-04-06T14:31:35.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 168, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 39, - 'has_exemption' => false, - 'max_shifts' => 2, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['עיבוד כל', 'עיבוד מסחרי'], - 'is_reservist' => false, - 'last_reserve_dates' => [], - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-06T14:14:31.000Z', - 'updated_at' => '2025-04-06T14:31:35.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 171, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 38, - 'has_exemption' => false, - 'max_shifts' => 2, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['עיבוד כל', 'עיבוד מסחרי'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-06T14:18:41.000Z', - 'updated_at' => '2025-04-06T14:32:24.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 162, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 40, - 'has_exemption' => false, - 'max_shifts' => 4, - 'max_nights' => 4, - 'max_weekends' => 100, - 'capacity' => 100, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['עיבוד כל', 'עיבוד מסחרי', 'תכנון EO'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-06T14:09:01.000Z', - 'updated_at' => '2025-04-24T10:16:16.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 172, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 38, - 'has_exemption' => false, - 'max_shifts' => 2, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['תכנון EO', 'עיבוד כל', 'עיבוד מסחרי'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-06T14:21:43.000Z', - 'updated_at' => '2025-04-06T14:32:24.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 173, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 38, - 'has_exemption' => false, - 'max_shifts' => 2, - 'max_nights' => 0, - 'max_weekends' => 0, - 'capacity' => 0, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['תכנון EO'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-06T14:53:05.000Z', - 'updated_at' => '2025-04-06T14:53:05.000Z', - 'max_alerts' => 0, - 'max_in_parallel' => 0, - ], - [ - 'id' => 154, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 41, - 'has_exemption' => false, - 'max_shifts' => 6, - 'max_nights' => 6, - 'max_weekends' => 200, - 'capacity' => 200, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['פיקוד SAR', 'פיקוד EO', 'בדקן EO', 'בקות'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-06T13:59:56.000Z', - 'updated_at' => '2025-04-24T10:16:48.000Z', - 'max_alerts' => 1, - 'max_in_parallel' => 0, - ], - [ - 'id' => 148, - 'team_id' => null, - 'gender' => true, - 'is_permanent' => false, - 'enlist_date' => null, - 'course' => 43, - 'has_exemption' => false, - 'max_shifts' => 9, - 'max_nights' => 9, - 'max_weekends' => 400, - 'capacity' => 400, - 'is_trainee' => false, - 'is_mabat' => false, - 'qualifications' => ['עיבוד מסחרי', 'תכנון EO', 'רסר מרפם', 'נקיון תהק'], - 'is_reservist' => false, - 'last_reserve_dates' => null, - 'reserve_dates' => null, - 'next_reserve_dates' => null, - 'constraints_limit' => '{"Not weekend":1,"Low priority not weekend":1,"Not task":3,"Low priority not task":3,"Not evening":4,"Not Thursday evening":1,"Not Sunday morning":1,"Vacation":0,"Medical":0,"School":4}', - 'not_thursday_evening' => false, - 'not_sunday_morning' => false, - 'created_at' => '2025-04-06T13:14:57.000Z', - 'updated_at' => '2025-04-24T10:18:17.000Z', - 'max_alerts' => 4, - 'max_in_parallel' => 8, - ], - ]; - - collect($soldiers)->map(callback: function ($soldier) { - $s = new Soldier; - $s->id = $soldier['id']; - $s->team_id = $soldier['team_id']; - $s->gender = $soldier['gender']; - $s->is_permanent = $soldier['is_permanent']; - $s->enlist_date = Carbon::parse($soldier['enlist_date'])->addHours(2); - $s->course = $soldier['course']; - $s->has_exemption = $soldier['has_exemption']; - $s->max_shifts = $soldier['max_shifts']; - $s->max_nights = $soldier['max_nights']; - $s->max_weekends = $soldier['max_weekends'] / 100; - $s->max_alerts = $soldier['max_alerts']; - $s->max_in_parallel = $soldier['max_in_parallel']; - $s->capacity = $soldier['capacity'] / 100; - $s->is_trainee = $soldier['is_trainee']; - $s->is_mabat = $soldier['is_mabat']; - $s->qualifications = $soldier['qualifications']; - // $s->qualifications = json_decode($soldier['qualifications']); - $s->is_reservist = $soldier['is_reservist']; - $s->last_reserve_dates = $soldier['last_reserve_dates']; - $s->reserve_dates = $soldier['reserve_dates']; - $s->next_reserve_dates = $soldier['next_reserve_dates']; - $s->constraints_limit = json_decode($soldier['constraints_limit']); - $s->not_thursday_evening = $soldier['not_thursday_evening']; - $s->not_sunday_morning = $soldier['not_sunday_morning']; - $s->save(); - }); - } - - public function f() - { - $users = - [ - [ - 'id' => 1, - 'first_name' => 'newspace', - 'last_name' => 'newspace', - 'password' => '8LtTAioW3z2PKG.YV7CfxOEF4OYNB5gBE7oGVHJIB2YOyDGJNaR26', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 1, - 'created_at' => '2025-02-17T10:33:45.000Z', - 'updated_at' => '2025-02-17T10:33:45.000Z', - ], - [ - 'id' => 14, - 'first_name' => 'ליאור', - 'last_name' => 'שביט', - 'password' => 'DvbTvMeYze4zoT0exrL1QevgASqZC1MPKDNXz633gwUTwH9hV9m3m', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 14, - 'created_at' => '2025-03-03T14:15:58.000Z', - 'updated_at' => '2025-03-30T17:31:43.000Z', - ], - [ - 'id' => 15, - 'first_name' => 'גילי', - 'last_name' => 'נחום', - 'password' => 'zdUVx4.Gebseqd4phrMO1eYcFPkdkT0t3nAsBdus8Iwe9jV1cQexa', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 15, - 'created_at' => '2025-03-03T14:16:57.000Z', - 'updated_at' => '2025-03-30T17:31:57.000Z', - ], - [ - 'id' => 16, - 'first_name' => 'חן', - 'last_name' => 'וייסבורט', - 'password' => "rzx2dP.SheDJkyvKDDS\/zOCbYsf8mMQwWDqMz0UVGgTBLa2WMusCC", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 16, - 'created_at' => '2025-03-03T14:19:19.000Z', - 'updated_at' => '2025-03-30T17:32:13.000Z', - ], - [ - 'id' => 17, - 'first_name' => 'שחר', - 'last_name' => 'צביק', - 'password' => "sgJz.L.CUXX99SUY08vz7OoG4k0pH\/AsZ3BAusxLsZ5SlEU9eAPzG", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 17, - 'created_at' => '2025-03-03T14:24:46.000Z', - 'updated_at' => '2025-03-30T17:32:30.000Z', - ], - [ - 'id' => 18, - 'first_name' => 'עומר', - 'last_name' => 'קונפינו', - 'password' => 'zaEKaotoB0AzglZu57IA4uJ0TVo0rHahymmeziXuS8ZHguzLhaP5m', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 18, - 'created_at' => '2025-03-03T14:25:34.000Z', - 'updated_at' => '2025-03-30T17:32:46.000Z', - ], - [ - 'id' => 3, - 'first_name' => 'ניר', - 'last_name' => 'גריפל', - 'password' => "SV5WNt4j.0BQ.WaI\/P9gJeM6h1MjB9SNfhtj1z.Cn8UcFptbfJpk6", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 3, - 'created_at' => '2025-02-18T12:32:18.000Z', - 'updated_at' => '2025-04-24T10:20:37.000Z', - ], - [ - 'id' => 131, - 'first_name' => 'ישי', - 'last_name' => 'גולדשטיין', - 'password' => "F5yA6Vy0mbQf0CwByjEb.OleD0y133mTEFFbswl\/UCpkGUbQJjg5a", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 131, - 'created_at' => '2025-04-02T06:47:38.000Z', - 'updated_at' => '2025-04-02T06:47:38.000Z', - ], - [ - 'id' => 26, - 'first_name' => 'יהלי', - 'last_name' => 'ברמן', - 'password' => 'kolhdCdLXzBf4Y44ybioIOzO3HBzYB0z5XcSLh1wvh14b2KrmYoeW', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 26, - 'created_at' => '2025-03-18T10:03:40.000Z', - 'updated_at' => '2025-03-30T17:34:37.000Z', - ], - [ - 'id' => 27, - 'first_name' => 'תניא', - 'last_name' => 'הלפרין', - 'password' => "Mksu2hft\/PD2k7ge4.vqTejuOgLIH8HoN9bWag81QOYj0fM35EuJK", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 27, - 'created_at' => '2025-03-18T12:01:40.000Z', - 'updated_at' => '2025-03-30T17:34:51.000Z', - ], - [ - 'id' => 28, - 'first_name' => 'הגר', - 'last_name' => 'קרץ', - 'password' => 'o4E0BISeLlI6oLzBrBvoseIWbUrp80hhsSzYSdW.sRlFU1K.TOoGy', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 28, - 'created_at' => '2025-03-18T12:35:42.000Z', - 'updated_at' => '2025-03-30T17:35:14.000Z', - ], - [ - 'id' => 29, - 'first_name' => 'ליעם', - 'last_name' => 'מאייר', - 'password' => "t6Ak0\/MHjnnpSocTncvd5eW.gpMIRCgFHIbYFTvVRPMS6gFgQ2H\/u", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 29, - 'created_at' => '2025-03-20T08:29:32.000Z', - 'updated_at' => '2025-03-30T17:35:28.000Z', - ], - [ - 'id' => 30, - 'first_name' => 'אמיתי', - 'last_name' => 'ויינשטיין', - 'password' => 'wvoBS1jl2hc4cTtRagnGwu5rMIOGDHOKeKriDgkneyx20oAPnEPue', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 30, - 'created_at' => '2025-03-20T08:30:18.000Z', - 'updated_at' => '2025-03-30T17:35:42.000Z', - ], - [ - 'id' => 31, - 'first_name' => 'יובל', - 'last_name' => 'גבסו', - 'password' => 'E4eBYZG9wD83UjTCtmxmmeaf2B0mP5aEgAGP7gHvaWsvRXFTInEFC', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 31, - 'created_at' => '2025-03-20T08:31:02.000Z', - 'updated_at' => '2025-03-30T17:35:57.000Z', - ], - [ - 'id' => 32, - 'first_name' => 'עדי', - 'last_name' => 'אנונו', - 'password' => "hl9NBzd21AGgzUB96cLSBu9\/K0TVz3PSeDqkHBtTgO7MX2yOmZohO", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 32, - 'created_at' => '2025-03-20T09:03:54.000Z', - 'updated_at' => '2025-03-30T17:36:12.000Z', - ], - [ - 'id' => 34, - 'first_name' => 'איתי', - 'last_name' => 'בנימיני', - 'password' => 'UoX2FdceF7GXGdYyV6YujexZ7Uq41V16UbYg65NUVZqDOd24dnK6C', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 34, - 'created_at' => '2025-03-20T09:40:00.000Z', - 'updated_at' => '2025-03-30T17:36:57.000Z', - ], - [ - 'id' => 36, - 'first_name' => 'עידו', - 'last_name' => 'גרניט', - 'password' => "eXmF7RUor7Z8PL6TUDZKweyCaqFTaPjTpxvRkE85WahAVC\/Tc9\/mG", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 36, - 'created_at' => '2025-03-25T11:57:21.000Z', - 'updated_at' => '2025-03-30T17:37:36.000Z', - ], - [ - 'id' => 37, - 'first_name' => 'אמיתי', - 'last_name' => 'ולק', - 'password' => "OI\/cBsgGS3uyf1XxyWXF..sajj0FqyeLnDnF1rmF\/efLsH2nzIGF6", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 37, - 'created_at' => '2025-03-25T11:59:17.000Z', - 'updated_at' => '2025-03-30T17:37:51.000Z', - ], - [ - 'id' => 38, - 'first_name' => 'מאיה', - 'last_name' => 'פרידמן', - 'password' => "htrKlcDg\/Qsmy.c.xIzcguv15lO6CDs6Bvi4oa66dLlYhVbbjiwAO", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 38, - 'created_at' => '2025-03-25T11:59:58.000Z', - 'updated_at' => '2025-03-30T17:38:07.000Z', - ], - [ - 'id' => 39, - 'first_name' => 'נבו', - 'last_name' => 'אטרן', - 'password' => 'NcpkfmQHSXgH1mUSTPz4GeiYeyUdI.ie8E.IduXWitfG98gCZ5Kpa', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 39, - 'created_at' => '2025-03-25T13:59:53.000Z', - 'updated_at' => '2025-03-30T17:38:22.000Z', - ], - [ - 'id' => 40, - 'first_name' => 'עומרי', - 'last_name' => 'אבידן', - 'password' => "m.gWiT.Z92RSL\/5N30.On.r\/pu1M4RpAW0tX4MvlHJLdMRYTYxB.e", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 40, - 'created_at' => '2025-03-25T14:00:37.000Z', - 'updated_at' => '2025-03-30T17:38:52.000Z', - ], - [ - 'id' => 41, - 'first_name' => 'בנימין', - 'last_name' => 'ווינר', - 'password' => "skUIq\/4sjwRccEXXwI71T.zCAjCw9.HPq2umNMD7ntCdEMpSCr\/5q", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 41, - 'created_at' => '2025-03-25T14:01:19.000Z', - 'updated_at' => '2025-03-30T17:39:07.000Z', - ], - [ - 'id' => 8, - 'first_name' => 'אברהם', - 'last_name' => 'מרדכי', - 'password' => 'cd85S2fRyoho9yhVpa2Mgu9D0VEJYqK5TnYRSKKaZdV2yUQq6Ydmy', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 8, - 'created_at' => '2025-02-18T14:20:36.000Z', - 'updated_at' => '2025-03-31T15:27:44.000Z', - ], - [ - 'id' => 43, - 'first_name' => 'זיו', - 'last_name' => 'אשר', - 'password' => 'X1S.0l6qrzU9MWhA1FtDROfpQQRS.ALy6P0Fmg6o7msVfrbpNx9yi', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 43, - 'created_at' => '2025-03-25T15:50:15.000Z', - 'updated_at' => '2025-03-30T17:39:43.000Z', - ], - [ - 'id' => 21, - 'first_name' => 'מיקה', - 'last_name' => 'אורבך', - 'password' => '.WS3i5AvUdvpeDDE5XLrs.mVAnWMoMcrtQOJOYbL23NBuXLWOiE4u', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 21, - 'created_at' => '2025-03-04T13:39:11.000Z', - 'updated_at' => '2025-04-01T06:41:21.000Z', - ], - [ - 'id' => 45, - 'first_name' => 'אמילי', - 'last_name' => 'שקבטור', - 'password' => "\/xdv\/IGkGsnTTtLQWgfzneJQ3BtW8UryKSY\/T7VwdlMoiCXfurpUu", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 45, - 'created_at' => '2025-03-31T07:20:14.000Z', - 'updated_at' => '2025-03-31T07:20:15.000Z', - ], - [ - 'id' => 46, - 'first_name' => 'איתי', - 'last_name' => 'שלו', - 'password' => 'i8cuA7aQPvGGz9fOxdWH5OQa03oWPHqvj9KQqW00BEfR17bSnGNYm', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 46, - 'created_at' => '2025-03-31T07:21:13.000Z', - 'updated_at' => '2025-03-31T07:21:14.000Z', - ], - [ - 'id' => 23, - 'first_name' => 'נדב', - 'last_name' => 'סנאדו', - 'password' => 'T89aQGECppA3A9SP0p6NO.8DxrGfPXqCNX1PIPzJ0qacNtNq.FQIK', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 23, - 'created_at' => '2025-03-18T09:57:15.000Z', - 'updated_at' => '2025-04-03T10:08:11.000Z', - ], - [ - 'id' => 9, - 'first_name' => 'נתנאל', - 'last_name' => 'מוטיאי', - 'password' => 'xreEcbZGoTOJ2aXYrS95POC3.ZqPImwYdsE7RxyWv6rH8KesCafRS', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 9, - 'created_at' => '2025-02-19T12:42:54.000Z', - 'updated_at' => '2025-04-07T12:04:55.000Z', - ], - [ - 'id' => 25, - 'first_name' => 'יאיר', - 'last_name' => 'תובל', - 'password' => 'HalwVMSclZ9cl84FNOp7YOYaPiTbhzvPuWXNtBxzdiyklEJJESEaq', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 25, - 'created_at' => '2025-03-18T10:02:14.000Z', - 'updated_at' => '2025-05-25T10:44:40.000Z', - ], - [ - 'id' => 35, - 'first_name' => 'אריאל', - 'last_name' => 'שייקביץ', - 'password' => "lRPNKtjZAdkfUGEmZtjY6ettwkZeM1EcZWjWE\/uWo1JjvE7t1xd1S", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 35, - 'created_at' => '2025-03-20T09:40:35.000Z', - 'updated_at' => '2025-05-25T10:45:45.000Z', - ], - [ - 'id' => 44, - 'first_name' => 'עמית ', - 'last_name' => 'פיגנבוים', - 'password' => "3NR1P.7GHiKZX.uvk5djZ.0cT9gxJRqfG30MjGeFmJK4JCV4Uw8\/6", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 44, - 'created_at' => '2025-03-31T06:59:19.000Z', - 'updated_at' => '2025-05-29T09:55:13.000Z', - ], - [ - 'id' => 174, - 'first_name' => 'גיא', - 'last_name' => 'פידלמן', - 'password' => "aOGZiSIGhbdrXPwKoJhbAOtbKqtvLIJHhx7dr5Ej9xcpNnsesE\/Mi", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 174, - 'created_at' => '2025-05-25T10:31:42.000Z', - 'updated_at' => '2025-05-29T10:35:40.000Z', - ], - [ - 'id' => 50, - 'first_name' => 'בן ', - 'last_name' => 'וייסר רמד', - 'password' => 'L9UOooCiQh65lHrmie9bueGmy3UXffsgQPKaDpxpelUmbRNHZreIS', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 50, - 'created_at' => '2025-03-31T07:39:49.000Z', - 'updated_at' => '2025-03-31T07:39:50.000Z', - ], - [ - 'id' => 51, - 'first_name' => 'שיר', - 'last_name' => 'חדאד', - 'password' => 'ZFYQ3xLm1yV2vfuByUHh9OrvMSE86IhOG7XEhSqAxpa8dTmCH18He', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 51, - 'created_at' => '2025-03-31T07:41:51.000Z', - 'updated_at' => '2025-03-31T07:41:51.000Z', - ], - [ - 'id' => 52, - 'first_name' => 'עומר', - 'last_name' => 'טיין', - 'password' => "jBBEXY3FJYPyH3nlJM2KGOmfXHVmOYsWy36Nyrvjjd\/3jhkcPdEoa", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 52, - 'created_at' => '2025-03-31T07:43:04.000Z', - 'updated_at' => '2025-03-31T07:43:04.000Z', - ], - [ - 'id' => 33, - 'first_name' => 'מיה', - 'last_name' => 'בורוביק', - 'password' => "XeCMATF186BoTZWID75Nb.KUkAncN\/znoVtszlwb5KZYVkOl1uwdW", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 33, - 'created_at' => '2025-03-20T09:24:34.000Z', - 'updated_at' => '2025-03-31T10:18:46.000Z', - ], - [ - 'id' => 47, - 'first_name' => 'נטע', - 'last_name' => 'זפרני', - 'password' => 'QgLkQxaeaM4RHLrS7G9bauzaqrTMWwJGEl9yNJTeV6dRBqL1NB1Su', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 47, - 'created_at' => '2025-03-31T07:32:58.000Z', - 'updated_at' => '2025-03-31T12:34:33.000Z', - ], - [ - 'id' => 4, - 'first_name' => 'יהב', - 'last_name' => 'נתנוב', - 'password' => "WK7Ikgm\/gFXWgTT8awi50u6qdOtRjqfTbT33WZ8LyPrlmaloaQg3a", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 4, - 'created_at' => '2025-02-18T14:10:59.000Z', - 'updated_at' => '2025-03-30T17:28:25.000Z', - ], - [ - 'id' => 5, - 'first_name' => 'אפרת', - 'last_name' => 'שטטלר', - 'password' => "bY6BgEO0\/auZcj0SqAZWGuC\/yffFQqrPgsbO0snanvlZ.24s.lYRO", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 5, - 'created_at' => '2025-02-18T14:13:25.000Z', - 'updated_at' => '2025-03-30T17:29:05.000Z', - ], - [ - 'id' => 6, - 'first_name' => 'יהלי', - 'last_name' => 'סגרון', - 'password' => '779s96XaBx1WRuTak3EWH.scxlISPqbbDiERYYYrmxJDgEvpgOMcC', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 6, - 'created_at' => '2025-02-18T14:16:23.000Z', - 'updated_at' => '2025-03-30T17:29:19.000Z', - ], - [ - 'id' => 7, - 'first_name' => 'שחר', - 'last_name' => 'זך', - 'password' => "f3bKvSbbCTFKOM9KJp7VreFi4OB9j\/UmpItt4IBfQdgpd9PJjpM5i", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 7, - 'created_at' => '2025-02-18T14:17:34.000Z', - 'updated_at' => '2025-03-30T17:29:40.000Z', - ], - [ - 'id' => 10, - 'first_name' => 'ירדן', - 'last_name' => 'אברם', - 'password' => "X6tdp36iBtfQZXNrFLiKieW3lKm79h2RUUimb\/AYLSohj6U6y6iU6", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 10, - 'created_at' => '2025-03-03T13:59:12.000Z', - 'updated_at' => '2025-03-30T17:30:45.000Z', - ], - [ - 'id' => 11, - 'first_name' => 'בן', - 'last_name' => 'וייסר', - 'password' => "jQl0o\/AbDqQzJek86VlSfegPWx5VTf.J4p8Ze0Nuxy3schziXQu.O", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 11, - 'created_at' => '2025-03-03T14:05:11.000Z', - 'updated_at' => '2025-03-30T17:30:58.000Z', - ], - [ - 'id' => 12, - 'first_name' => 'בן', - 'last_name' => 'כהן', - 'password' => "\/j6gTxWOpaCFOH4dAXmXY.HBd1KIGARmL6p7YpN7qwv9EbLvftqQ2", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 12, - 'created_at' => '2025-03-03T14:12:21.000Z', - 'updated_at' => '2025-03-30T17:31:10.000Z', - ], - [ - 'id' => 13, - 'first_name' => 'רוני', - 'last_name' => 'תפוחי', - 'password' => '5fx5yLvpLcN0niV2qABdUeuEYhpUV0ExmrJ532ZkNyYRS4Vyr170u', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 13, - 'created_at' => '2025-03-03T14:14:24.000Z', - 'updated_at' => '2025-03-30T17:31:24.000Z', - ], - [ - 'id' => 69, - 'first_name' => 'שירה', - 'last_name' => 'בוחנה', - 'password' => 'NcikcZyentF5zXU3UTo67O9exew6qjELItq2GzB9oBjIzwxVl2UQG', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 69, - 'created_at' => '2025-03-31T12:49:22.000Z', - 'updated_at' => '2025-03-31T12:49:22.000Z', - ], - [ - 'id' => 132, - 'first_name' => 'עמית', - 'last_name' => 'כהן', - 'password' => "zJACTZ02ec5KEgTEXNxy1e9Ize8jU0hvQFQThLJDIZLtY4VfZE\/Vq", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 132, - 'created_at' => '2025-04-02T06:48:37.000Z', - 'updated_at' => '2025-04-02T06:48:38.000Z', - ], - [ - 'id' => 133, - 'first_name' => 'עדי', - 'last_name' => 'רצולסקי', - 'password' => "iLlhk2ctWPcz8WcshcpKjOZppKerO\/SvnAmCazTOvgmKHlij\/5bIO", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 133, - 'created_at' => '2025-04-02T06:50:00.000Z', - 'updated_at' => '2025-04-02T06:50:01.000Z', - ], - [ - 'id' => 175, - 'first_name' => 'טליה', - 'last_name' => 'קצוף', - 'password' => "Nz9TtQ.ILyzlH31mXhcJyOiz9xavDOaW\/d4cG9orOj20UvarPg8kq", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 175, - 'created_at' => '2025-05-25T10:33:32.000Z', - 'updated_at' => '2025-05-25T10:33:32.000Z', - ], - [ - 'id' => 134, - 'first_name' => 'קרן', - 'last_name' => 'עדיני', - 'password' => "k9BJg4YxID9V5XRa\/1PVSuG\/rhsOtlMxutK2dc3qDDLC1iOEK0VV.", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 134, - 'created_at' => '2025-04-02T06:50:52.000Z', - 'updated_at' => '2025-04-02T06:50:53.000Z', - ], - [ - 'id' => 73, - 'first_name' => 'גיא ', - 'last_name' => 'אברהם', - 'password' => "ZxsW3Zit\/HFsoLGdHb0LG.Ui6RN8U3wdWo2EAAoC.NWe8r7krbdka", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 73, - 'created_at' => '2025-03-31T15:22:46.000Z', - 'updated_at' => '2025-05-29T09:57:50.000Z', - ], - [ - 'id' => 83, - 'first_name' => 'יעל', - 'last_name' => 'בארי', - 'password' => 'KP40dcRxw61UUq5z.K516..UNTelGjOVriSyHXaL5uXmbvtmfMN4u', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 83, - 'created_at' => '2025-03-31T15:25:11.000Z', - 'updated_at' => '2025-05-29T10:35:02.000Z', - ], - [ - 'id' => 80, - 'first_name' => 'הדר', - 'last_name' => 'זך', - 'password' => "p2H0R8dkFv3\/t0Zwtdc7P.kMiYPhdKZ.9ABr0H1CehY7a9GBG8lMe", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 80, - 'created_at' => '2025-03-31T15:24:19.000Z', - 'updated_at' => '2025-03-31T15:24:19.000Z', - ], - [ - 'id' => 135, - 'first_name' => 'ירדן', - 'last_name' => 'כהן', - 'password' => 'sG2RS.gIefOERrVAYhUOMOjo1ulyzRAykCRQwVPKo4AClN8QFY25e', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 135, - 'created_at' => '2025-04-02T06:51:48.000Z', - 'updated_at' => '2025-04-02T06:51:48.000Z', - ], - [ - 'id' => 81, - 'first_name' => 'נעה ', - 'last_name' => 'אבן חיים', - 'password' => "mvqqRg\/Gnv6mHS5Be.KTbeqkYcPcnReLB09b62dFXw63OYF3ygLzG", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 81, - 'created_at' => '2025-03-31T15:24:34.000Z', - 'updated_at' => '2025-03-31T15:24:34.000Z', - ], - [ - 'id' => 70, - 'first_name' => 'נינה', - 'last_name' => 'לוז', - 'password' => "lJik81\/lkxm5laEMW2PlyulVaF85c6wdAPiZd40hLtBeshOqUaJ0a", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 70, - 'created_at' => '2025-03-31T12:50:27.000Z', - 'updated_at' => '2025-05-29T10:36:07.000Z', - ], - [ - 'id' => 136, - 'first_name' => 'ינאי', - 'last_name' => 'דרוקר', - 'password' => 'A0I7C3rAKRuBaf4gFMGv4.U0osU6Bb6NWshyHh.3CT3RMsPDZT4ja', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 136, - 'created_at' => '2025-04-02T06:52:54.000Z', - 'updated_at' => '2025-04-02T06:52:55.000Z', - ], - [ - 'id' => 86, - 'first_name' => 'עדן', - 'last_name' => 'אסתר עמית', - 'password' => 'R7WjYgGJqHZ7lPxAuqAUpuQ4uMTRJi2hNU0XI4sZX3EV3xrrQQ7VO', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 86, - 'created_at' => '2025-03-31T15:25:44.000Z', - 'updated_at' => '2025-03-31T15:25:44.000Z', - ], - [ - 'id' => 91, - 'first_name' => 'שמואל', - 'last_name' => 'פלץ', - 'password' => '3YboUmlhsqEtwJadJyzRreQpKKRBBIAR9TvbK6oHKD7EzYVs8jZZS', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 91, - 'created_at' => '2025-03-31T15:26:57.000Z', - 'updated_at' => '2025-03-31T15:26:57.000Z', - ], - [ - 'id' => 92, - 'first_name' => 'ליאב', - 'last_name' => 'אביטן', - 'password' => "UYxuGx\/PLWnOJ68P1Ooiie6xHWu3A3g0eB6GJOa1BYdgS\/ZyxE\/0W", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 92, - 'created_at' => '2025-03-31T15:27:01.000Z', - 'updated_at' => '2025-03-31T15:27:02.000Z', - ], - [ - 'id' => 138, - 'first_name' => 'נועה', - 'last_name' => 'רוזנפלד', - 'password' => "Y.N6VLwkuMfFPYmbd3ezIO1BROrAuPeqUVpptPB9ZzVE6\/qs9MB\/O", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 138, - 'created_at' => '2025-04-02T12:41:31.000Z', - 'updated_at' => '2025-04-02T12:41:32.000Z', - ], - [ - 'id' => 99, - 'first_name' => 'עדן', - 'last_name' => 'פרי', - 'password' => "s0W\/yVjkobF\/qL7yCsOIKukyvI7Sam.eaDGn28yrYUS1lb4jB0Wy2", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 99, - 'created_at' => '2025-03-31T15:28:31.000Z', - 'updated_at' => '2025-03-31T15:28:32.000Z', - ], - [ - 'id' => 139, - 'first_name' => 'יובל', - 'last_name' => 'בן דוד', - 'password' => '.DVad7qSVNZ.6MG0U7r9Ae2inbynB7de1apucrgDc8rDqxT8OqK9.', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 139, - 'created_at' => '2025-04-02T18:41:01.000Z', - 'updated_at' => '2025-04-02T18:41:02.000Z', - ], - [ - 'id' => 102, - 'first_name' => 'לירי', - 'last_name' => 'ליבנה', - 'password' => 'OJTXjc5fO3rB6zhERWwBYeGeAWvEofatvC2ZmRJwAW89iuio5tuT.', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 102, - 'created_at' => '2025-03-31T15:29:30.000Z', - 'updated_at' => '2025-03-31T15:29:30.000Z', - ], - [ - 'id' => 140, - 'first_name' => 'נדב', - 'last_name' => 'פרג', - 'password' => "EfLR\/SLbDcGB6l8MvSL2xe8T6JIxoHf5II9SU8pTtzGITZNXRIyw2", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 140, - 'created_at' => '2025-04-02T18:54:58.000Z', - 'updated_at' => '2025-04-02T18:54:58.000Z', - ], - [ - 'id' => 106, - 'first_name' => 'רוני', - 'last_name' => 'גולן', - 'password' => "j0nEQGXw\/1zen1GENoO6teQhIHp57Ai1jbBTsV8T16G0MKF4ZwKAy", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 106, - 'created_at' => '2025-03-31T15:30:33.000Z', - 'updated_at' => '2025-03-31T15:30:34.000Z', - ], - [ - 'id' => 142, - 'first_name' => 'ליה', - 'last_name' => 'מטלס', - 'password' => "ZvtG5OsE\/4\/0loim1yrZpOHYKYUSxgJTtcUexxT16v7y.WnSCJ.Qy", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 142, - 'created_at' => '2025-04-03T13:41:06.000Z', - 'updated_at' => '2025-04-03T13:41:06.000Z', - ], - [ - 'id' => 113, - 'first_name' => 'יובל', - 'last_name' => 'מנדלוביץ', - 'password' => "fUAxz.zgoo39J\/f94.Ko7.p7hr\/bqBA7DFNsOp3o1wrx6jD\/KB\/g.", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 113, - 'created_at' => '2025-03-31T15:39:30.000Z', - 'updated_at' => '2025-03-31T15:39:31.000Z', - ], - [ - 'id' => 115, - 'first_name' => 'שיר', - 'last_name' => 'כהן', - 'password' => 'HJiEUrq2rVkO1v6KKENkLu6ErREoSbBk5ylYKSGuq8U19i2Ko4DyO', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 115, - 'created_at' => '2025-03-31T15:42:52.000Z', - 'updated_at' => '2025-03-31T15:42:52.000Z', - ], - [ - 'id' => 143, - 'first_name' => 'תומר', - 'last_name' => 'אפשטיין', - 'password' => 'wl9oI6td17whkaaWkv9tOebEYz51VvKR7DDuKLvfon1W4PRpjgqUK', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 143, - 'created_at' => '2025-04-03T13:42:13.000Z', - 'updated_at' => '2025-04-03T13:42:13.000Z', - ], - [ - 'id' => 118, - 'first_name' => 'ליבנת', - 'last_name' => 'אלון', - 'password' => '4mq0nX5LWhiJDw97QfoXkeNDVAlhiqE1JyGM7bXt17DvNlkU0lM9y', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 118, - 'created_at' => '2025-03-31T17:23:02.000Z', - 'updated_at' => '2025-03-31T17:23:02.000Z', - ], - [ - 'id' => 53, - 'first_name' => 'אליענה', - 'last_name' => 'פלקוב', - 'password' => 'E8WEEjLSeWlS4dy0F9fn1utlCl7JbifqvgDlZznhsSc4m0JmEDn7G', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 53, - 'created_at' => '2025-03-31T07:46:20.000Z', - 'updated_at' => '2025-04-06T12:55:39.000Z', - ], - [ - 'id' => 119, - 'first_name' => 'עילי', - 'last_name' => 'רן', - 'password' => "iu6NegHdXPoE0CcxCNmWr.Y6kuYT\/F7LYcHgfF98WcEzAx7p15aeW", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 119, - 'created_at' => '2025-03-31T17:23:58.000Z', - 'updated_at' => '2025-03-31T17:23:59.000Z', - ], - [ - 'id' => 144, - 'first_name' => 'יעלה', - 'last_name' => 'עודד', - 'password' => "z84BaCLU3j1Q9Z4jZ9R\/0eyEtvyhgMIEI04xvu1u8\/f9YtbgEOdXK", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 144, - 'created_at' => '2025-04-06T12:58:52.000Z', - 'updated_at' => '2025-04-06T12:58:52.000Z', - ], - [ - 'id' => 122, - 'first_name' => 'נטע', - 'last_name' => 'יצחיאק', - 'password' => "NUIMKeyyH1X8VFDkMyNwtOvTDfeh0eq0FVvYRB\/4PqwkksWEYVLqy", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 122, - 'created_at' => '2025-04-01T10:14:09.000Z', - 'updated_at' => '2025-04-01T10:14:09.000Z', - ], - [ - 'id' => 79, - 'first_name' => 'דניאל', - 'last_name' => 'דבש', - 'password' => 'l3x7VMVZ5.bEpw2OeFrObu6M5WPNNi7rFp1t1RheREkblEm4lFRuy', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 79, - 'created_at' => '2025-03-31T15:24:06.000Z', - 'updated_at' => '2025-04-06T13:02:19.000Z', - ], - [ - 'id' => 124, - 'first_name' => 'אסף', - 'last_name' => 'אריאלי', - 'password' => "Zga.8OXeIKi\/2baLTfVEvOWSbuXf7y7HakkSq02KgvpqIiDA3VvTe", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 124, - 'created_at' => '2025-04-01T17:10:01.000Z', - 'updated_at' => '2025-04-01T17:10:01.000Z', - ], - [ - 'id' => 127, - 'first_name' => 'זהר', - 'last_name' => 'ברק', - 'password' => "Hev5PydJ1Kh6d.WNHdDW8eHM0QiOrMFFdL15OPxtDR6xWZpRP8b\/W", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 127, - 'created_at' => '2025-04-01T17:17:01.000Z', - 'updated_at' => '2025-04-01T17:17:02.000Z', - ], - [ - 'id' => 145, - 'first_name' => 'אור', - 'last_name' => 'ברנר', - 'password' => "\/TFWNEUUlgPs5wp3cav67ukWkstkWKH.hEx6v6FfuMfrW9WvUe1gi", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 145, - 'created_at' => '2025-04-06T13:04:48.000Z', - 'updated_at' => '2025-04-06T13:04:49.000Z', - ], - [ - 'id' => 128, - 'first_name' => 'אביגיל', - 'last_name' => 'עידן', - 'password' => "0X.Sbu\/6m32.B1mTsgjnSejuCQMHz6mlbzecAEjH8CmfsWsoFoOP2", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 128, - 'created_at' => '2025-04-01T17:18:12.000Z', - 'updated_at' => '2025-04-01T17:18:13.000Z', - ], - [ - 'id' => 130, - 'first_name' => 'אילנה', - 'last_name' => 'גרלק', - 'password' => "Efe5iwrYbgp3rSZuh46uv.Z1.I4YEcpEVTOjj\/u4FzhBcZtDop\/Cy", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 130, - 'created_at' => '2025-04-01T17:20:24.000Z', - 'updated_at' => '2025-04-01T17:20:24.000Z', - ], - [ - 'id' => 146, - 'first_name' => 'אריאן', - 'last_name' => 'ברזילי', - 'password' => "KTXZIj9Z9WOd0nEtMni65eDDFUucL\/\/Zcx8mc3HHIHppKXpLd6MtO", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 146, - 'created_at' => '2025-04-06T13:05:45.000Z', - 'updated_at' => '2025-04-06T13:05:46.000Z', - ], - [ - 'id' => 147, - 'first_name' => 'ליאה', - 'last_name' => 'נבון', - 'password' => "jFcner8T.E.Kk6TBcwZogugQ16DgjUto6X5gE3WfqDUj00pF\/oCd6", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 147, - 'created_at' => '2025-04-06T13:07:10.000Z', - 'updated_at' => '2025-04-06T13:07:10.000Z', - ], - [ - 'id' => 148, - 'first_name' => 'סער', - 'last_name' => 'פלד', - 'password' => "ejULPa\/bkXcrwnBuUHE\/o.mU472LOvBnEcWcYVGXQVJNDytMPCi7i", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 148, - 'created_at' => '2025-04-06T13:14:57.000Z', - 'updated_at' => '2025-04-06T13:14:57.000Z', - ], - [ - 'id' => 149, - 'first_name' => 'אור', - 'last_name' => 'פרום', - 'password' => "2RqPTW66S\/59FlwX5cav1O4J7FuwNujGbotfHvh\/B\/FckCoFQnCBq", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 149, - 'created_at' => '2025-04-06T13:17:40.000Z', - 'updated_at' => '2025-04-06T13:17:40.000Z', - ], - [ - 'id' => 150, - 'first_name' => 'נועה', - 'last_name' => 'לפיד', - 'password' => 'yxt5jjcElGbAY0xHJgrprOyWKaU80cpMF.fcTLjJZg88OnqzNdHXO', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 150, - 'created_at' => '2025-04-06T13:18:21.000Z', - 'updated_at' => '2025-04-06T13:18:21.000Z', - ], - [ - 'id' => 111, - 'first_name' => 'שרון', - 'last_name' => 'כץ', - 'password' => 'Hc0WhK.SqfvBHG02fBcMJOCxlyTHUawL2BqYQ2qf.5ZugXhsdAU0m', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 111, - 'created_at' => '2025-03-31T15:32:28.000Z', - 'updated_at' => '2025-04-06T13:32:17.000Z', - ], - [ - 'id' => 137, - 'first_name' => 'רועי', - 'last_name' => 'שכטר', - 'password' => "obKLKquvQD8YF5O8SqBCHOLukKnNWUaAT6\/hG7qzW9rer954XcUGe", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 137, - 'created_at' => '2025-04-02T06:54:10.000Z', - 'updated_at' => '2025-04-06T13:32:57.000Z', - ], - [ - 'id' => 109, - 'first_name' => 'רוני', - 'last_name' => 'שיף', - 'password' => "\/7CN6eTyECSwzD54ZQseU.NG9yAQXOew6xTtQFm0445oxUPzxZUV6", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 109, - 'created_at' => '2025-03-31T15:31:21.000Z', - 'updated_at' => '2025-04-06T13:36:39.000Z', - ], - [ - 'id' => 103, - 'first_name' => 'אביגיל ', - 'last_name' => 'שלזינגר', - 'password' => "wE0IdqUExJOOljyuBh55nuwR264L0y1sz\/b09KdPefzNdJLpHP\/Tu", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 103, - 'created_at' => '2025-03-31T15:29:31.000Z', - 'updated_at' => '2025-04-06T13:39:22.000Z', - ], - [ - 'id' => 96, - 'first_name' => 'נועם', - 'last_name' => 'לב', - 'password' => "SsBAJgBJOECu.2V9gSh9DeZRKM1\/YNlmZ9y4BlMOUNu8Yi6OyylBW", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 96, - 'created_at' => '2025-03-31T15:27:56.000Z', - 'updated_at' => '2025-04-06T13:40:40.000Z', - ], - [ - 'id' => 72, - 'first_name' => 'זהר', - 'last_name' => 'אסף', - 'password' => 'Y4kuiLGDvyMQ8njGp7uJQu1p1BCOHhBz.ttdfmngEzAIX8ODNgf6u', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 72, - 'created_at' => '2025-03-31T12:59:13.000Z', - 'updated_at' => '2025-04-06T13:42:09.000Z', - ], - [ - 'id' => 141, - 'first_name' => 'דניה', - 'last_name' => 'סולומון ', - 'password' => 'HaB2FW.yR40851TDEIsMsOONiJB7Z0scXEF3LMbBZ1OPgjxtgXLTC', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 141, - 'created_at' => '2025-04-03T13:37:53.000Z', - 'updated_at' => '2025-04-07T12:01:19.000Z', - ], - [ - 'id' => 56, - 'first_name' => 'יוסף', - 'last_name' => 'ולדמן', - 'password' => 'bIY16wSNQDCYlpG6siFg7eKgmIobb94etaKokbLsKDEjJXudCh.ie', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 56, - 'created_at' => '2025-03-31T08:49:35.000Z', - 'updated_at' => '2025-03-31T08:49:36.000Z', - ], - [ - 'id' => 58, - 'first_name' => 'זיו', - 'last_name' => 'הלפרן', - 'password' => "ci52aOw5DSzdBv9g83tPBuYlKKUbMrWHWZH51\/kr3znUGBceF016O", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 58, - 'created_at' => '2025-03-31T09:23:03.000Z', - 'updated_at' => '2025-04-02T13:19:07.000Z', - ], - [ - 'id' => 76, - 'first_name' => 'יובל', - 'last_name' => 'שיף', - 'password' => 'gI.oxo0w1opDKvAx0W11Mu.e7ZKi1H7DLvrqaHEi.wjcnL0MTPfl.', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 76, - 'created_at' => '2025-03-31T15:22:55.000Z', - 'updated_at' => '2025-04-02T18:50:20.000Z', - ], - [ - 'id' => 74, - 'first_name' => 'ליה', - 'last_name' => 'סולומון', - 'password' => "N8zwRDSrCfMpWUM63KR\/pOtD9UGKWBFTA1WwYdpBMXOw9dmO4eEWG", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 74, - 'created_at' => '2025-03-31T15:22:46.000Z', - 'updated_at' => '2025-03-31T15:22:47.000Z', - ], - [ - 'id' => 59, - 'first_name' => 'שקד', - 'last_name' => 'קרסנטי', - 'password' => 'X.uwrLwVh0Rla9uNq4g60uH1EKcq2wCLXWc9rue9qm0Gw4VVWiQUC', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 59, - 'created_at' => '2025-03-31T10:23:09.000Z', - 'updated_at' => '2025-03-31T10:23:09.000Z', - ], - [ - 'id' => 55, - 'first_name' => 'עידו', - 'last_name' => 'אל דרור', - 'password' => 'AjgRCfVxFu6xyhiQ9K1my.wT.MM31uVJrKzEfEdNkwEEWkG7fB5nG', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 55, - 'created_at' => '2025-03-31T07:48:39.000Z', - 'updated_at' => '2025-04-06T08:13:04.000Z', - ], - [ - 'id' => 65, - 'first_name' => 'לינוי ', - 'last_name' => 'מערבי', - 'password' => '7YOfJWdKKEEXEOsrVu8Zq.HugsQ44vrTuzKjTICrM2qnLcDbVV9kq', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 65, - 'created_at' => '2025-03-31T12:41:12.000Z', - 'updated_at' => '2025-04-06T13:25:49.000Z', - ], - [ - 'id' => 75, - 'first_name' => 'תום', - 'last_name' => 'מייקל', - 'password' => "WMFXZuy\/CaP3UwZlezX5W.DzsrPVX3ZS\/xb7toFUyeKqspcaksoGq", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 75, - 'created_at' => '2025-03-31T15:22:47.000Z', - 'updated_at' => '2025-05-25T12:28:48.000Z', - ], - [ - 'id' => 71, - 'first_name' => 'עומר', - 'last_name' => 'דולב', - 'password' => '6bMpfiMCYRdGGwdEurQpvuJhgh6kcRGYxscD6TDFB.NL.Uw2Y7sua', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 71, - 'created_at' => '2025-03-31T12:58:11.000Z', - 'updated_at' => '2025-04-06T13:27:34.000Z', - ], - [ - 'id' => 77, - 'first_name' => 'מאיה', - 'last_name' => 'אלשיך', - 'password' => "G.gZsfI\/ySvNym3tVOW0m.IXAAMEzwOvjuDmIrcJ\/eEiEGZJEjJqm", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 77, - 'created_at' => '2025-03-31T15:23:51.000Z', - 'updated_at' => '2025-03-31T15:23:51.000Z', - ], - [ - 'id' => 63, - 'first_name' => 'יואב', - 'last_name' => 'חומסקי', - 'password' => 'aNgH.MMT1UFUGOsqdpPcQet9am.5Pu7GbeGqCG6zpsv75PujDWuBO', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 63, - 'created_at' => '2025-03-31T12:37:12.000Z', - 'updated_at' => '2025-04-06T13:29:44.000Z', - ], - [ - 'id' => 64, - 'first_name' => 'דניאלה', - 'last_name' => 'שגיא', - 'password' => 'M.nlwWSlHAUnosg2SpzDCOTqeMEjoVlHACh7ywazZV69V9Cm6uzkG', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 64, - 'created_at' => '2025-03-31T12:40:42.000Z', - 'updated_at' => '2025-04-06T13:30:22.000Z', - ], - [ - 'id' => 88, - 'first_name' => 'מיכל ', - 'last_name' => 'ברנע', - 'password' => 'tXiueXHnkwyrURKBa1HBUesEdxR4xT6PvVinWKNrLkGG5OLBaMSGS', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 88, - 'created_at' => '2025-03-31T15:26:00.000Z', - 'updated_at' => '2025-05-29T10:36:30.000Z', - ], - [ - 'id' => 105, - 'first_name' => 'יובל', - 'last_name' => 'סעדו', - 'password' => "NGfPtmxloljcwCvdg89BV.wOdmOTDJHC5Y6pM4Y\/leK0W6G3yvRNW", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 105, - 'created_at' => '2025-03-31T15:30:12.000Z', - 'updated_at' => '2025-04-06T13:33:44.000Z', - ], - [ - 'id' => 57, - 'first_name' => 'נטע', - 'last_name' => 'אביעם', - 'password' => 'h25zaW8GG2GCB0POaysQ0u0CvzCmex45uSgr8Ll2b7zYocWbPOOqK', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 57, - 'created_at' => '2025-03-31T09:21:59.000Z', - 'updated_at' => '2025-03-31T12:35:57.000Z', - ], - [ - 'id' => 78, - 'first_name' => 'דפנה', - 'last_name' => 'גינזבורג', - 'password' => 'wWS6mLFClYld6XUBfCbkJOHLZNLnQQsyCyhMJFwPx1bL0UqEGPpC6', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 78, - 'created_at' => '2025-03-31T15:24:04.000Z', - 'updated_at' => '2025-05-29T10:37:09.000Z', - ], - [ - 'id' => 54, - 'first_name' => 'רוני', - 'last_name' => 'מינץ', - 'password' => "Bq25CVaAtuOV5xjqkVsyQ.aCQsGau.Eo\/qcmxPKLBaMHIzoj\/Hdr6", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 54, - 'created_at' => '2025-03-31T07:47:14.000Z', - 'updated_at' => '2025-04-06T13:34:31.000Z', - ], - [ - 'id' => 82, - 'first_name' => 'עידו', - 'last_name' => 'לוי', - 'password' => "QowGrGcchuqMcCZewBAGZegGnBwifelsR\/lKW4TC9wfBxAr6puMci", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 82, - 'created_at' => '2025-03-31T15:24:37.000Z', - 'updated_at' => '2025-03-31T15:24:37.000Z', - ], - [ - 'id' => 97, - 'first_name' => 'אמה', - 'last_name' => 'לוי מעתוק ', - 'password' => 'xJe8jcQiIRy.Iyt1gU7Yw.pRQEpS2QIn8KTnq7FZ8b1u3Hiidsd.e', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 97, - 'created_at' => '2025-03-31T15:28:25.000Z', - 'updated_at' => '2025-04-06T13:35:16.000Z', - ], - [ - 'id' => 112, - 'first_name' => 'שירי', - 'last_name' => 'אואקרט', - 'password' => "Dg1TSLS1\/moBzmKlsm0Bn.od9Wp1VIO14SKzHEBWIiVH4eyH6qOAO", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 112, - 'created_at' => '2025-03-31T15:32:58.000Z', - 'updated_at' => '2025-04-06T13:35:57.000Z', - ], - [ - 'id' => 84, - 'first_name' => 'בר ', - 'last_name' => 'לרר', - 'password' => "2UT8vSBTYXk7XVsw\/Jzm1uEwtyTrW7yvMVtHah\/w3nqJzNKBuAFc2", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 84, - 'created_at' => '2025-03-31T15:25:26.000Z', - 'updated_at' => '2025-03-31T15:25:26.000Z', - ], - [ - 'id' => 67, - 'first_name' => 'טל', - 'last_name' => 'אורון', - 'password' => 'Xte7yB4jrNSW6GKhMMfmu.4VaJy0gGNFWXIlrCXrd5NouoEqa5St6', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 67, - 'created_at' => '2025-03-31T12:45:49.000Z', - 'updated_at' => '2025-03-31T12:45:49.000Z', - ], - [ - 'id' => 104, - 'first_name' => 'תמר', - 'last_name' => 'קרסיק ', - 'password' => "h2agPTj2.ilee\/b3anZ16.W3dmiYfTDoEWm37yEMy3ZDE2IQABkM2", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 104, - 'created_at' => '2025-03-31T15:29:45.000Z', - 'updated_at' => '2025-04-06T13:37:23.000Z', - ], - [ - 'id' => 68, - 'first_name' => 'איתי', - 'last_name' => 'בורנשטיין', - 'password' => "5oYHdD3ml.NgTNxFW128ceC8Z3SW9UoaX\/FiiI3SCb1wP.XYfUnnu", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 68, - 'created_at' => '2025-03-31T12:47:28.000Z', - 'updated_at' => '2025-03-31T12:47:29.000Z', - ], - [ - 'id' => 62, - 'first_name' => 'מאיה', - 'last_name' => 'שנטמן', - 'password' => "R04ZwiS.T.oaqCD.7NLsfu8r\/JG3GCpVCJg7bEbCEgpZEZa6UK7tS", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 62, - 'created_at' => '2025-03-31T11:08:08.000Z', - 'updated_at' => '2025-04-06T13:38:20.000Z', - ], - [ - 'id' => 87, - 'first_name' => 'תמר בתיה', - 'last_name' => 'רוזנבלום', - 'password' => 'tTOXI9QDSDG89F1yvom3vuYqV3Gb9IUjpa2tAb0orZqIaACIIA92a', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 87, - 'created_at' => '2025-03-31T15:25:46.000Z', - 'updated_at' => '2025-03-31T15:25:46.000Z', - ], - [ - 'id' => 108, - 'first_name' => 'נועם', - 'last_name' => 'בריק', - 'password' => 'b2.jn9lAjGLNnxoFyOlIGeUnzkDcDPwkIl2EuIuoAvfYmqZXhA3d2', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 108, - 'created_at' => '2025-03-31T15:31:07.000Z', - 'updated_at' => '2025-04-06T13:40:00.000Z', - ], - [ - 'id' => 93, - 'first_name' => 'רואי', - 'last_name' => 'יהודאי', - 'password' => "jvg.HnWRLwokmG2WXkCLg.VA38\/B6ZGKc.TNf.0BqGe.bn0UZOGk6", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 93, - 'created_at' => '2025-03-31T15:27:06.000Z', - 'updated_at' => '2025-04-06T13:41:15.000Z', - ], - [ - 'id' => 89, - 'first_name' => 'ירדן ', - 'last_name' => 'סימן טוב', - 'password' => 'gYCHWdXCUsm1R6lzuidSsuERurbX6dg7ZiMPJgvpecKUZqBe4ZKfG', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 89, - 'created_at' => '2025-03-31T15:26:40.000Z', - 'updated_at' => '2025-03-31T15:26:40.000Z', - ], - [ - 'id' => 95, - 'first_name' => 'ליהי', - 'last_name' => 'שפילמן', - 'password' => "R8mnDLEeSTrd5rg6v89kNeHxEPHyHeIuWHkb0V\/C6ktAzSRQxB\/tO", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 95, - 'created_at' => '2025-03-31T15:27:53.000Z', - 'updated_at' => '2025-04-06T13:43:42.000Z', - ], - [ - 'id' => 90, - 'first_name' => 'הילי', - 'last_name' => 'בושביץ', - 'password' => "ZTVtUNKzYm3Eoop\/G7RsK.p0C8O66Y090vEFlVr6g6aZ8JeAw9QVK", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 90, - 'created_at' => '2025-03-31T15:26:54.000Z', - 'updated_at' => '2025-04-06T13:44:13.000Z', - ], - [ - 'id' => 60, - 'first_name' => 'לירון', - 'last_name' => 'הורניק', - 'password' => '6JgnMOtPL0rMKH1Go5RDg.JMsgbz5XMLjoDGahx9egREkY0VnZXoW', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 60, - 'created_at' => '2025-03-31T11:05:29.000Z', - 'updated_at' => '2025-03-31T15:27:24.000Z', - ], - [ - 'id' => 66, - 'first_name' => 'מורן', - 'last_name' => 'הריס', - 'password' => "AhnIVozeCO47AWAdTe63qOlPJojtWyLUGMFeSc7M6iUQwI\/hjmiF.", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 66, - 'created_at' => '2025-03-31T12:43:42.000Z', - 'updated_at' => '2025-04-07T12:05:31.000Z', - ], - [ - 'id' => 61, - 'first_name' => 'גפן כוכב', - 'last_name' => 'תורג׳מן', - 'password' => 'cv1XZmzvQJuYtQxTnCNTqe3pXDlZe7QuCnT8Oqp72AJYISBFbFZrW', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 61, - 'created_at' => '2025-03-31T11:07:21.000Z', - 'updated_at' => '2025-03-31T15:27:56.000Z', - ], - [ - 'id' => 120, - 'first_name' => 'ארי', - 'last_name' => "דוז'י", - 'password' => 'Wrnayx1oQp0f7bkT21uXHuxIIK7rMc89WrUnt6o18pcVsEHvZjWH.', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 120, - 'created_at' => '2025-04-01T09:49:35.000Z', - 'updated_at' => '2025-04-22T06:34:06.000Z', - ], - [ - 'id' => 98, - 'first_name' => 'יעל', - 'last_name' => 'רכב', - 'password' => "x\/69.rxjvb.5A8\/7UoQn6egfOxOOscWkuRZdoU2PSrBXS4vouCoJC", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 98, - 'created_at' => '2025-03-31T15:28:26.000Z', - 'updated_at' => '2025-03-31T15:28:27.000Z', - ], - [ - 'id' => 101, - 'first_name' => 'נעה', - 'last_name' => 'וקנין', - 'password' => "aDYlfRO7CJHS\/0BU7CsEde9NS0iG7FHlPgk9vybBfOeDfkH6Z9ZCa", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 101, - 'created_at' => '2025-03-31T15:28:50.000Z', - 'updated_at' => '2025-03-31T15:28:50.000Z', - ], - [ - 'id' => 107, - 'first_name' => 'מאיה', - 'last_name' => 'קין', - 'password' => "8O79IruQajDnGP8jBArwpuvdxbGVIsjbdJ9qB72vI5Ns\/ArAx207C", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 107, - 'created_at' => '2025-03-31T15:30:35.000Z', - 'updated_at' => '2025-03-31T15:30:35.000Z', - ], - [ - 'id' => 110, - 'first_name' => 'תור', - 'last_name' => 'ווסקר', - 'password' => 'C.FWyd0UWIneVymTJP5lmecaFsqDpFaVIgvOt3hrRtxB8.aQjNg..', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 110, - 'created_at' => '2025-03-31T15:31:43.000Z', - 'updated_at' => '2025-03-31T15:31:43.000Z', - ], - [ - 'id' => 114, - 'first_name' => 'יובל', - 'last_name' => 'ויינינגר ', - 'password' => 'k8Oe1NoTrwCUV7X2HeAD6O1o5ikPWREcOYeJ3En9cjN2AKwYqzFT.', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 114, - 'created_at' => '2025-03-31T15:41:45.000Z', - 'updated_at' => '2025-03-31T15:41:45.000Z', - ], - [ - 'id' => 117, - 'first_name' => 'איל', - 'last_name' => 'טפר', - 'password' => "GEPrAOXbXB\/45aoUVC568eNqZFdMLT0Xq95nu7LXg5LNYRU.CCe1C", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 117, - 'created_at' => '2025-03-31T17:13:49.000Z', - 'updated_at' => '2025-03-31T17:13:49.000Z', - ], - [ - 'id' => 116, - 'first_name' => 'דניה', - 'last_name' => 'סולומון', - 'password' => 'Pd0wSx5dBTdIesDpPaWjyembbCKawvicUoGwS1lesJvSMZLZRvyUu', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 116, - 'created_at' => '2025-03-31T17:12:12.000Z', - 'updated_at' => '2025-03-31T17:19:52.000Z', - ], - [ - 'id' => 123, - 'first_name' => 'יעל', - 'last_name' => 'בהט', - 'password' => 'EFXfCSTHyHUzlGmszuBtXOm.plFycYG.ipMLtrtzPPDM7YeIrb7Ne', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 123, - 'created_at' => '2025-04-01T10:16:58.000Z', - 'updated_at' => '2025-04-01T10:16:59.000Z', - ], - [ - 'id' => 125, - 'first_name' => 'בר', - 'last_name' => 'בליט', - 'password' => "6dbRBwZZ0u5Hb3jK88MrBeVn4J4\/inI2Vm4VPZwnhtpzTT09zpD\/W", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 125, - 'created_at' => '2025-04-01T17:14:53.000Z', - 'updated_at' => '2025-04-01T17:14:54.000Z', - ], - [ - 'id' => 126, - 'first_name' => 'אלה', - 'last_name' => 'כלנועם', - 'password' => 'Im9ssEBBrGlEh30Vii2D6eaBvJM5dnjJfQp597p3U8isp87kT9RDm', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 126, - 'created_at' => '2025-04-01T17:15:54.000Z', - 'updated_at' => '2025-04-01T17:15:54.000Z', - ], - [ - 'id' => 129, - 'first_name' => 'טליה יונה', - 'last_name' => 'גורן עזרן', - 'password' => "icHMKB2PnWoGm8x3hM\/qgOmRx\/wBgUPdnoV9\/OIyXDCAj0U\/Z.yzy", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 129, - 'created_at' => '2025-04-01T17:19:43.000Z', - 'updated_at' => '2025-04-01T17:19:43.000Z', - ], - [ - 'id' => 151, - 'first_name' => 'גלי', - 'last_name' => 'עבודי', - 'password' => '4.mhVBLp9SgBuZ.tKQwTEObYZI.TOtMI.y6E1UaTdtzaJQgmfDTiy', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 151, - 'created_at' => '2025-04-06T13:19:12.000Z', - 'updated_at' => '2025-04-06T13:19:12.000Z', - ], - [ - 'id' => 176, - 'first_name' => 'אופיר', - 'last_name' => 'טוויזר', - 'password' => "H.4oD9d2APkhSMxo2Lmcp.aOz2WLISLUhWP\/wNX.Q1L3xSo3Tn5DS", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 176, - 'created_at' => '2025-05-25T10:38:37.000Z', - 'updated_at' => '2025-05-25T10:38:37.000Z', - ], - [ - 'id' => 152, - 'first_name' => 'אורי', - 'last_name' => 'שלום', - 'password' => "5Ts7CniKMSVJmLJ9LvTM4uGr.zhN58Tcs3pxA.Wq6yEAQ8\/pVCQZW", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 152, - 'created_at' => '2025-04-06T13:23:37.000Z', - 'updated_at' => '2025-04-06T13:23:38.000Z', - ], - [ - 'id' => 153, - 'first_name' => 'ענבר', - 'last_name' => 'וירצברגר', - 'password' => "H6c.9PDbCyXfbH1oErIozOAT9vBh5rJ\/QXDkDgf0\/\/AgBB6yxVVpq", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 153, - 'created_at' => '2025-04-06T13:24:46.000Z', - 'updated_at' => '2025-04-06T13:24:46.000Z', - ], - [ - 'id' => 100, - 'first_name' => 'שקד', - 'last_name' => 'שפירא', - 'password' => "D2nnqce0fK1ROttQFaQWHO47G0BZUgu\/hvv5uwQIGML2D7FA3efZS", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 100, - 'created_at' => '2025-03-31T15:28:47.000Z', - 'updated_at' => '2025-04-06T13:31:30.000Z', - ], - [ - 'id' => 154, - 'first_name' => 'רוני', - 'last_name' => 'כנען', - 'password' => "ZGlyoANtz0Su4hqVu\/bgdukVCePMXf3h8wwasoQADrjw0cp5H2ab.", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 154, - 'created_at' => '2025-04-06T13:59:56.000Z', - 'updated_at' => '2025-04-06T13:59:56.000Z', - ], - [ - 'id' => 155, - 'first_name' => 'נועה', - 'last_name' => 'שנער', - 'password' => 'Xjo6x5njzXd1TymdOrVzSutf9Qc2KhQXYOUT6yUh3l8Czn9lYfNAC', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 155, - 'created_at' => '2025-04-06T14:01:43.000Z', - 'updated_at' => '2025-04-06T14:01:43.000Z', - ], - [ - 'id' => 156, - 'first_name' => 'עידו', - 'last_name' => 'ריקלין', - 'password' => 'xUFXc.OADqjehVQ1EXK5v.npWpV3KaRzGjy4jho4Y8flLge0jCt0O', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 156, - 'created_at' => '2025-04-06T14:03:35.000Z', - 'updated_at' => '2025-04-06T14:03:35.000Z', - ], - [ - 'id' => 157, - 'first_name' => 'אמיר', - 'last_name' => 'עופרי', - 'password' => "O5bjv9LXrKN9zG9\/62HfUOKMPJ6LDEXppXl5\/lbVJngDtkDX4KVlK", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 157, - 'created_at' => '2025-04-06T14:04:17.000Z', - 'updated_at' => '2025-04-06T14:04:17.000Z', - ], - [ - 'id' => 158, - 'first_name' => 'נועה', - 'last_name' => 'אברהמי', - 'password' => 'bbXDnQN68caDD0ZYABBVfOxjxLEYBouf0pjCkW3Sr.GYyl5ibeeaC', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 158, - 'created_at' => '2025-04-06T14:05:08.000Z', - 'updated_at' => '2025-04-06T14:05:08.000Z', - ], - [ - 'id' => 159, - 'first_name' => 'יותם', - 'last_name' => 'שור', - 'password' => 'y7918oEglcajheLE9nCuvOdoKKK5RiPkSyDHp8oqNSwKArS5M7uv.', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 159, - 'created_at' => '2025-04-06T14:06:02.000Z', - 'updated_at' => '2025-04-06T14:06:20.000Z', - ], - [ - 'id' => 160, - 'first_name' => 'יובל', - 'last_name' => 'גולן', - 'password' => 'r3du8tQXgBPOTKt9BdYS0.TuidStiPWnLzt674QzNIC5uM8Mp8i2K', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 160, - 'created_at' => '2025-04-06T14:06:54.000Z', - 'updated_at' => '2025-04-06T14:07:05.000Z', - ], - [ - 'id' => 161, - 'first_name' => 'נועה', - 'last_name' => 'שנור', - 'password' => "yihhCqyGaaq8pxJHN4nlKegJMlZbBAsQ5tn\/dUP9A4LVyhtxXRP6C", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 161, - 'created_at' => '2025-04-06T14:08:01.000Z', - 'updated_at' => '2025-04-06T14:08:01.000Z', - ], - [ - 'id' => 162, - 'first_name' => 'מישל', - 'last_name' => 'שכטר', - 'password' => 'ys42nLEy4HmNPaGlJ3QAmOxozic2Ex47AzWrDQJ9RrWvRPcyq4rKO', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 162, - 'created_at' => '2025-04-06T14:09:01.000Z', - 'updated_at' => '2025-04-06T14:09:02.000Z', - ], - [ - 'id' => 163, - 'first_name' => 'מיטל', - 'last_name' => 'דגיוריב', - 'password' => "OJbK4ObAEFWKVHdi\/x7CCOsfF9\/Doczco.t8IfFSdiC.JxGiVOtqK", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 163, - 'created_at' => '2025-04-06T14:09:49.000Z', - 'updated_at' => '2025-04-06T14:09:49.000Z', - ], - [ - 'id' => 164, - 'first_name' => 'מתן', - 'last_name' => 'נחמני', - 'password' => "p5LcuXCS3nXABZ0VNf8hTOCPTQwd0rDzTYx\/70\/hhMDz0Ep5knc0S", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 164, - 'created_at' => '2025-04-06T14:10:36.000Z', - 'updated_at' => '2025-04-06T14:10:52.000Z', - ], - [ - 'id' => 166, - 'first_name' => 'רותם', - 'last_name' => 'תמרי', - 'password' => '.uQXnGREF2cRr2OzfjfCH.WXaiS6F64dAiDJP7ZgCqdRFqXcdcwy2', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 166, - 'created_at' => '2025-04-06T14:13:16.000Z', - 'updated_at' => '2025-04-06T14:13:16.000Z', - ], - [ - 'id' => 167, - 'first_name' => 'תמר', - 'last_name' => 'יונת', - 'password' => 'p4x5jSmxPKSnVpvPPvjJbul3PTe0o0eh40OUlnX3kmqHJpgh6P4U6', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 167, - 'created_at' => '2025-04-06T14:14:00.000Z', - 'updated_at' => '2025-04-06T14:14:00.000Z', - ], - [ - 'id' => 168, - 'first_name' => 'גילי', - 'last_name' => 'שביט', - 'password' => "S7KvqF\/5EYJPDuI2BgnTteuubKcqAQOzvqkQ9UCsDV5aMsqQSxY7q", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 168, - 'created_at' => '2025-04-06T14:14:31.000Z', - 'updated_at' => '2025-04-06T14:14:45.000Z', - ], - [ - 'id' => 169, - 'first_name' => 'גילי', - 'last_name' => 'שבת', - 'password' => "5h3hA3hOyjRm6Jeq\/f04K.m3DdMPlC3L0aIz0tUmPxcoP3zK07Cdm", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 169, - 'created_at' => '2025-04-06T14:15:23.000Z', - 'updated_at' => '2025-04-06T14:15:37.000Z', - ], - [ - 'id' => 170, - 'first_name' => 'עמית', - 'last_name' => 'בובר', - 'password' => "7qFJRkzBEvcG9si0NV4a\/OGPDfi6eo.Axw\/KRiC6hr.uYNnP.hP4e", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 170, - 'created_at' => '2025-04-06T14:17:32.000Z', - 'updated_at' => '2025-04-06T14:17:32.000Z', - ], - [ - 'id' => 171, - 'first_name' => 'ירין', - 'last_name' => 'ניסנוב', - 'password' => "XIFaT0cjjqcr0Yt6h7ApN.nvt8y6jXITA\/llcLgojSPpSXbdYUXSa", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 171, - 'created_at' => '2025-04-06T14:18:41.000Z', - 'updated_at' => '2025-04-06T14:18:41.000Z', - ], - [ - 'id' => 172, - 'first_name' => 'עדי', - 'last_name' => 'גרינשפון', - 'password' => "osU3XHsxqpLcXwcLergJouV7iDYxufqg4JRHN\/SX3Lv2tt\/EyqsS6", - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 172, - 'created_at' => '2025-04-06T14:21:43.000Z', - 'updated_at' => '2025-04-06T14:21:43.000Z', - ], - [ - 'id' => 173, - 'first_name' => 'תמר', - 'last_name' => 'למפל', - 'password' => 'sfmthtTx2iB5yYAviI4wBeYkcsLoxNXCxkRtLl2FyPwmmtC6jdDtO', - 'userable_type' => 'App\\Models\\Soldier', - 'userable_id' => 173, - 'created_at' => '2025-04-06T14:53:05.000Z', - 'updated_at' => '2025-04-06T14:53:05.000Z', - ], - ]; - - collect($users)->map(callback: function ($user) { - $u = new User; - $u->first_name = $user['first_name']; - $u->last_name = $user['last_name']; - $u->password = '0000000'; - $u->userable_type = Soldier::class; - $u->userable_id = $user['userable_id']; - $u->save(); - $u->assignRole('soldier'); - }); - } - - public function g() - { - $soldiers = Soldier::all(); - - collect($soldiers)->each(function ($soldier) { - if (User::where('userable_id', $soldier->id)->get()->isEmpty()) { - \DB::table('soldiers')->delete($soldier->id); - // \DB::table('shifts')->where('soldier_id', $soldier->id)->delete(); - } - }); - - $users = User::all(); - $users->each(function (User $user) { - if (! Soldier::find($user->userable_id)) { - \DB::table('users')->delete($user->id); - } - }); - } - - // public function h() - // { - // $users_id = User::all('id')->pluck('id'); - // collect($users_id)->each(fn($userid)=>$this->createConstraints($userid)); - // } - - public function i() - { - $constraints = - [ - [ - 'id' => 1, - 'soldier_id' => 43, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-13 07:52:37', - 'end_date' => '2025-07-13 09:52:37', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 2, - 'soldier_id' => 43, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-21 19:57:47', - 'end_date' => '2025-07-21 21:57:47', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 3, - 'soldier_id' => 43, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-02 15:38:03', - 'end_date' => '2025-07-02 19:38:03', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 4, - 'soldier_id' => 43, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-18 01:51:06', - 'end_date' => '2025-07-18 04:51:06', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 5, - 'soldier_id' => 43, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-02 16:56:26', - 'end_date' => '2025-07-02 17:56:26', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 6, - 'soldier_id' => 43, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-14 05:57:41', - 'end_date' => '2025-07-14 10:57:41', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 7, - 'soldier_id' => 43, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-26 20:25:44', - 'end_date' => '2025-07-26 21:25:44', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 8, - 'soldier_id' => 43, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-02 20:13:30', - 'end_date' => '2025-07-03 01:13:30', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 9, - 'soldier_id' => 43, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-26 05:35:47', - 'end_date' => '2025-07-26 07:35:47', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 10, - 'soldier_id' => 43, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-03 20:08:16', - 'end_date' => '2025-07-03 22:08:16', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 11, - 'soldier_id' => 43, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-21 18:30:14', - 'end_date' => '2025-07-21 20:30:14', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 12, - 'soldier_id' => 43, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-10 11:40:08', - 'end_date' => '2025-07-10 15:40:08', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 13, - 'soldier_id' => 43, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-04 16:41:29', - 'end_date' => '2025-07-04 19:41:29', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 14, - 'soldier_id' => 43, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-06 12:04:48', - 'end_date' => '2025-07-06 15:04:48', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 15, - 'soldier_id' => 7, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-06 00:22:45', - 'end_date' => '2025-07-06 04:22:45', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 16, - 'soldier_id' => 7, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-03 21:44:59', - 'end_date' => '2025-07-04 01:44:59', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 17, - 'soldier_id' => 7, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-28 22:09:04', - 'end_date' => '2025-07-29 01:09:04', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 18, - 'soldier_id' => 7, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-19 21:03:59', - 'end_date' => '2025-07-19 22:03:59', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 19, - 'soldier_id' => 7, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-30 20:54:17', - 'end_date' => '2025-07-30 23:54:17', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 20, - 'soldier_id' => 7, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-15 05:37:58', - 'end_date' => '2025-07-15 10:37:58', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 21, - 'soldier_id' => 52, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-21 20:06:17', - 'end_date' => '2025-07-21 21:06:17', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 22, - 'soldier_id' => 52, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-28 10:09:36', - 'end_date' => '2025-07-28 12:09:36', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 23, - 'soldier_id' => 52, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-19 02:39:24', - 'end_date' => '2025-07-19 03:39:24', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 24, - 'soldier_id' => 52, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-16 12:34:43', - 'end_date' => '2025-07-16 17:34:43', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 25, - 'soldier_id' => 52, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-25 02:13:25', - 'end_date' => '2025-07-25 05:13:25', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 26, - 'soldier_id' => 52, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-01 09:25:14', - 'end_date' => '2025-07-01 10:25:14', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 27, - 'soldier_id' => 52, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-16 20:28:33', - 'end_date' => '2025-07-17 01:28:33', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 28, - 'soldier_id' => 52, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-29 20:40:36', - 'end_date' => '2025-07-29 21:40:36', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 29, - 'soldier_id' => 52, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-15 20:44:55', - 'end_date' => '2025-07-16 01:44:55', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 30, - 'soldier_id' => 52, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-05 23:30:06', - 'end_date' => '2025-07-06 00:30:06', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 31, - 'soldier_id' => 52, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-04 14:21:27', - 'end_date' => '2025-07-04 16:21:27', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 32, - 'soldier_id' => 52, - 'constraint_type' => 'School', - 'start_date' => '2025-07-02 17:27:22', - 'end_date' => '2025-07-02 20:27:22', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 33, - 'soldier_id' => 52, - 'constraint_type' => 'School', - 'start_date' => '2025-07-28 07:34:09', - 'end_date' => '2025-07-28 12:34:09', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 34, - 'soldier_id' => 52, - 'constraint_type' => 'School', - 'start_date' => '2025-07-15 23:10:43', - 'end_date' => '2025-07-16 04:10:43', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 35, - 'soldier_id' => 145, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-13 09:00:19', - 'end_date' => '2025-07-13 12:00:19', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 36, - 'soldier_id' => 145, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-30 16:40:51', - 'end_date' => '2025-07-30 20:40:51', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 37, - 'soldier_id' => 145, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-30 11:08:12', - 'end_date' => '2025-07-30 16:08:12', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 38, - 'soldier_id' => 145, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-11 21:04:35', - 'end_date' => '2025-07-12 02:04:35', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 39, - 'soldier_id' => 145, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-20 19:57:07', - 'end_date' => '2025-07-20 22:57:07', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 40, - 'soldier_id' => 145, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-23 20:48:15', - 'end_date' => '2025-07-23 23:48:15', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 41, - 'soldier_id' => 145, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-08 20:33:30', - 'end_date' => '2025-07-09 01:33:30', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 42, - 'soldier_id' => 145, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-15 16:02:58', - 'end_date' => '2025-07-15 20:02:58', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 43, - 'soldier_id' => 145, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-13 16:03:08', - 'end_date' => '2025-07-13 17:03:08', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 44, - 'soldier_id' => 145, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-07 09:58:50', - 'end_date' => '2025-07-07 12:58:50', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 45, - 'soldier_id' => 145, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-05 14:24:05', - 'end_date' => '2025-07-05 18:24:05', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 46, - 'soldier_id' => 145, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-22 16:58:44', - 'end_date' => '2025-07-22 18:58:44', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 47, - 'soldier_id' => 145, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-07 07:53:53', - 'end_date' => '2025-07-07 11:53:53', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 48, - 'soldier_id' => 145, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-03 03:12:12', - 'end_date' => '2025-07-03 08:12:12', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 49, - 'soldier_id' => 145, - 'constraint_type' => 'School', - 'start_date' => '2025-07-10 22:21:18', - 'end_date' => '2025-07-11 00:21:18', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 50, - 'soldier_id' => 145, - 'constraint_type' => 'School', - 'start_date' => '2025-07-08 12:57:49', - 'end_date' => '2025-07-08 15:57:49', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 51, - 'soldier_id' => 145, - 'constraint_type' => 'School', - 'start_date' => '2025-07-23 05:40:39', - 'end_date' => '2025-07-23 10:40:39', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 52, - 'soldier_id' => 108, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-07 01:37:59', - 'end_date' => '2025-07-07 04:37:59', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 53, - 'soldier_id' => 108, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-06 04:02:27', - 'end_date' => '2025-07-06 08:02:27', - 'created_at' => '2025-05-13T06:41:23.000000Z', - 'updated_at' => '2025-05-13T06:41:23.000000Z', - ], - [ - 'id' => 54, - 'soldier_id' => 108, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-30 03:15:17', - 'end_date' => '2025-07-30 04:15:17', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 55, - 'soldier_id' => 108, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-10 00:21:25', - 'end_date' => '2025-07-10 04:21:25', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 56, - 'soldier_id' => 108, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-12 01:42:32', - 'end_date' => '2025-07-12 05:42:32', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 57, - 'soldier_id' => 108, - 'constraint_type' => 'School', - 'start_date' => '2025-07-12 07:35:50', - 'end_date' => '2025-07-12 08:35:50', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 58, - 'soldier_id' => 59, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-17 09:01:17', - 'end_date' => '2025-07-17 14:01:17', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 59, - 'soldier_id' => 59, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-04 03:19:48', - 'end_date' => '2025-07-04 05:19:48', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 60, - 'soldier_id' => 59, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-24 22:32:38', - 'end_date' => '2025-07-25 02:32:38', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 61, - 'soldier_id' => 59, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-16 00:55:30', - 'end_date' => '2025-07-16 05:55:30', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 62, - 'soldier_id' => 59, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-29 06:40:25', - 'end_date' => '2025-07-29 07:40:25', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 63, - 'soldier_id' => 59, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-22 01:10:26', - 'end_date' => '2025-07-22 02:10:26', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 64, - 'soldier_id' => 59, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-15 09:48:53', - 'end_date' => '2025-07-15 14:48:53', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 65, - 'soldier_id' => 59, - 'constraint_type' => 'School', - 'start_date' => '2025-07-07 20:01:14', - 'end_date' => '2025-07-07 21:01:14', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 66, - 'soldier_id' => 167, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-20 01:52:36', - 'end_date' => '2025-07-20 02:52:36', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 67, - 'soldier_id' => 167, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-26 04:33:50', - 'end_date' => '2025-07-26 08:33:50', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 68, - 'soldier_id' => 167, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-08 22:05:23', - 'end_date' => '2025-07-09 01:05:23', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 69, - 'soldier_id' => 167, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-18 04:28:31', - 'end_date' => '2025-07-18 07:28:31', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 70, - 'soldier_id' => 167, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-27 01:03:21', - 'end_date' => '2025-07-27 04:03:21', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 71, - 'soldier_id' => 167, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-16 00:20:27', - 'end_date' => '2025-07-16 02:20:27', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 72, - 'soldier_id' => 167, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-06 20:37:55', - 'end_date' => '2025-07-06 22:37:55', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 73, - 'soldier_id' => 167, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-05 20:18:56', - 'end_date' => '2025-07-06 01:18:56', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 74, - 'soldier_id' => 167, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-29 09:24:06', - 'end_date' => '2025-07-29 12:24:06', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 75, - 'soldier_id' => 167, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-05 06:01:50', - 'end_date' => '2025-07-05 10:01:50', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 76, - 'soldier_id' => 167, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-24 08:16:42', - 'end_date' => '2025-07-24 13:16:42', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 77, - 'soldier_id' => 167, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-12 19:58:47', - 'end_date' => '2025-07-13 00:58:47', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 78, - 'soldier_id' => 167, - 'constraint_type' => 'School', - 'start_date' => '2025-07-21 14:52:00', - 'end_date' => '2025-07-21 19:52:00', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 79, - 'soldier_id' => 167, - 'constraint_type' => 'School', - 'start_date' => '2025-07-21 00:05:46', - 'end_date' => '2025-07-21 03:05:46', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 80, - 'soldier_id' => 167, - 'constraint_type' => 'School', - 'start_date' => '2025-07-28 10:58:04', - 'end_date' => '2025-07-28 11:58:04', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 81, - 'soldier_id' => 136, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-18 18:50:25', - 'end_date' => '2025-07-18 23:50:25', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 82, - 'soldier_id' => 136, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-20 21:24:31', - 'end_date' => '2025-07-20 23:24:31', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 83, - 'soldier_id' => 136, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-08 00:44:50', - 'end_date' => '2025-07-08 05:44:50', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 84, - 'soldier_id' => 136, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-25 20:45:54', - 'end_date' => '2025-07-25 21:45:54', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 85, - 'soldier_id' => 136, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-27 04:10:44', - 'end_date' => '2025-07-27 06:10:44', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 86, - 'soldier_id' => 136, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-05 20:16:51', - 'end_date' => '2025-07-05 22:16:51', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 87, - 'soldier_id' => 136, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-05 11:13:55', - 'end_date' => '2025-07-05 15:13:55', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 88, - 'soldier_id' => 136, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-29 17:41:25', - 'end_date' => '2025-07-29 19:41:25', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 89, - 'soldier_id' => 136, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-10 21:55:38', - 'end_date' => '2025-07-11 00:55:38', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 90, - 'soldier_id' => 136, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-27 19:48:45', - 'end_date' => '2025-07-27 20:48:45', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 91, - 'soldier_id' => 136, - 'constraint_type' => 'School', - 'start_date' => '2025-07-23 10:38:31', - 'end_date' => '2025-07-23 13:38:31', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 92, - 'soldier_id' => 136, - 'constraint_type' => 'School', - 'start_date' => '2025-07-09 23:02:26', - 'end_date' => '2025-07-10 04:02:26', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 93, - 'soldier_id' => 136, - 'constraint_type' => 'School', - 'start_date' => '2025-07-05 04:17:53', - 'end_date' => '2025-07-05 06:17:53', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 94, - 'soldier_id' => 136, - 'constraint_type' => 'School', - 'start_date' => '2025-07-15 15:01:28', - 'end_date' => '2025-07-15 20:01:28', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 95, - 'soldier_id' => 151, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-14 02:32:42', - 'end_date' => '2025-07-14 07:32:42', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 96, - 'soldier_id' => 151, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-26 16:59:53', - 'end_date' => '2025-07-26 19:59:53', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 97, - 'soldier_id' => 151, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-27 05:34:47', - 'end_date' => '2025-07-27 07:34:47', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 98, - 'soldier_id' => 151, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-28 20:43:47', - 'end_date' => '2025-07-29 01:43:47', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 99, - 'soldier_id' => 151, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-04 21:13:45', - 'end_date' => '2025-07-04 22:13:45', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 100, - 'soldier_id' => 151, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-06 00:42:00', - 'end_date' => '2025-07-06 05:42:00', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 101, - 'soldier_id' => 151, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-27 03:02:41', - 'end_date' => '2025-07-27 04:02:41', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 102, - 'soldier_id' => 151, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-15 20:07:49', - 'end_date' => '2025-07-15 22:07:49', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 103, - 'soldier_id' => 151, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-05 20:33:28', - 'end_date' => '2025-07-05 21:33:28', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 104, - 'soldier_id' => 151, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-19 01:23:30', - 'end_date' => '2025-07-19 03:23:30', - 'created_at' => '2025-05-13T06:41:24.000000Z', - 'updated_at' => '2025-05-13T06:41:24.000000Z', - ], - [ - 'id' => 105, - 'soldier_id' => 151, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-15 09:56:15', - 'end_date' => '2025-07-15 13:56:15', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 106, - 'soldier_id' => 151, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-29 07:32:08', - 'end_date' => '2025-07-29 09:32:08', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 107, - 'soldier_id' => 151, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-27 11:03:45', - 'end_date' => '2025-07-27 15:03:45', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 108, - 'soldier_id' => 151, - 'constraint_type' => 'School', - 'start_date' => '2025-07-27 20:12:35', - 'end_date' => '2025-07-27 21:12:35', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 109, - 'soldier_id' => 151, - 'constraint_type' => 'School', - 'start_date' => '2025-07-05 02:36:47', - 'end_date' => '2025-07-05 05:36:47', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 110, - 'soldier_id' => 151, - 'constraint_type' => 'School', - 'start_date' => '2025-07-14 09:21:23', - 'end_date' => '2025-07-14 11:21:23', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 111, - 'soldier_id' => 151, - 'constraint_type' => 'School', - 'start_date' => '2025-07-28 05:33:05', - 'end_date' => '2025-07-28 08:33:05', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 112, - 'soldier_id' => 158, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-22 07:11:30', - 'end_date' => '2025-07-22 12:11:30', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 113, - 'soldier_id' => 158, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-08 01:00:28', - 'end_date' => '2025-07-08 04:00:28', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 114, - 'soldier_id' => 158, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-06 05:29:41', - 'end_date' => '2025-07-06 09:29:41', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 115, - 'soldier_id' => 158, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-14 04:42:44', - 'end_date' => '2025-07-14 07:42:44', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 116, - 'soldier_id' => 158, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-23 03:05:58', - 'end_date' => '2025-07-23 06:05:58', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 117, - 'soldier_id' => 158, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-12 04:52:25', - 'end_date' => '2025-07-12 08:52:25', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 118, - 'soldier_id' => 158, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-21 21:29:52', - 'end_date' => '2025-07-22 01:29:52', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 119, - 'soldier_id' => 158, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-05 23:29:43', - 'end_date' => '2025-07-06 00:29:43', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 120, - 'soldier_id' => 158, - 'constraint_type' => 'School', - 'start_date' => '2025-07-05 18:48:52', - 'end_date' => '2025-07-05 23:48:52', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 121, - 'soldier_id' => 90, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-13 05:23:50', - 'end_date' => '2025-07-13 10:23:50', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 122, - 'soldier_id' => 90, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-15 08:45:35', - 'end_date' => '2025-07-15 11:45:35', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 123, - 'soldier_id' => 90, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-18 15:35:04', - 'end_date' => '2025-07-18 18:35:04', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 124, - 'soldier_id' => 90, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-01 13:42:41', - 'end_date' => '2025-07-01 17:42:41', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 125, - 'soldier_id' => 90, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-18 20:55:11', - 'end_date' => '2025-07-18 21:55:11', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 126, - 'soldier_id' => 90, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-08 02:22:59', - 'end_date' => '2025-07-08 05:22:59', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 127, - 'soldier_id' => 90, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-12 20:31:37', - 'end_date' => '2025-07-12 21:31:37', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 128, - 'soldier_id' => 90, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-14 05:09:18', - 'end_date' => '2025-07-14 09:09:18', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 129, - 'soldier_id' => 90, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-04 12:24:49', - 'end_date' => '2025-07-04 17:24:49', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 130, - 'soldier_id' => 90, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-09 01:14:13', - 'end_date' => '2025-07-09 06:14:13', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 131, - 'soldier_id' => 90, - 'constraint_type' => 'School', - 'start_date' => '2025-07-26 23:46:49', - 'end_date' => '2025-07-27 00:46:49', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 132, - 'soldier_id' => 90, - 'constraint_type' => 'School', - 'start_date' => '2025-07-14 14:57:27', - 'end_date' => '2025-07-14 18:57:27', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 133, - 'soldier_id' => 90, - 'constraint_type' => 'School', - 'start_date' => '2025-07-07 21:56:27', - 'end_date' => '2025-07-08 02:56:27', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 134, - 'soldier_id' => 79, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-28 06:33:50', - 'end_date' => '2025-07-28 11:33:50', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 135, - 'soldier_id' => 79, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-07 20:04:03', - 'end_date' => '2025-07-07 22:04:03', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 136, - 'soldier_id' => 79, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-13 05:04:57', - 'end_date' => '2025-07-13 06:04:57', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 137, - 'soldier_id' => 79, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-05 22:06:38', - 'end_date' => '2025-07-06 00:06:38', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 138, - 'soldier_id' => 79, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-15 20:53:14', - 'end_date' => '2025-07-15 21:53:14', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 139, - 'soldier_id' => 79, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-16 06:05:14', - 'end_date' => '2025-07-16 08:05:14', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 140, - 'soldier_id' => 79, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-21 00:08:40', - 'end_date' => '2025-07-21 02:08:40', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 141, - 'soldier_id' => 79, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-30 22:53:37', - 'end_date' => '2025-08-01 03:53:37', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 142, - 'soldier_id' => 79, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-26 20:37:54', - 'end_date' => '2025-07-27 00:37:54', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 143, - 'soldier_id' => 30, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-06 22:08:17', - 'end_date' => '2025-07-07 02:08:17', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 144, - 'soldier_id' => 30, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-21 17:07:17', - 'end_date' => '2025-07-21 21:07:17', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 145, - 'soldier_id' => 30, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-07 16:39:23', - 'end_date' => '2025-07-07 17:39:23', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 146, - 'soldier_id' => 30, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-20 01:14:56', - 'end_date' => '2025-07-20 05:14:56', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 147, - 'soldier_id' => 30, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-21 03:40:55', - 'end_date' => '2025-07-21 04:40:55', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 148, - 'soldier_id' => 30, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-19 20:26:39', - 'end_date' => '2025-07-19 23:26:39', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 149, - 'soldier_id' => 30, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-19 06:27:25', - 'end_date' => '2025-07-19 08:27:25', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 150, - 'soldier_id' => 30, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-14 14:49:13', - 'end_date' => '2025-07-14 16:49:13', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 151, - 'soldier_id' => 30, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-15 12:19:55', - 'end_date' => '2025-07-15 15:19:55', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 152, - 'soldier_id' => 30, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-16 15:17:49', - 'end_date' => '2025-07-16 17:17:49', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 153, - 'soldier_id' => 30, - 'constraint_type' => 'School', - 'start_date' => '2025-07-04 06:45:07', - 'end_date' => '2025-07-04 10:45:07', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 154, - 'soldier_id' => 30, - 'constraint_type' => 'School', - 'start_date' => '2025-07-16 02:26:50', - 'end_date' => '2025-07-16 07:26:50', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 155, - 'soldier_id' => 30, - 'constraint_type' => 'School', - 'start_date' => '2025-07-07 13:26:53', - 'end_date' => '2025-07-07 15:26:53', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 156, - 'soldier_id' => 30, - 'constraint_type' => 'School', - 'start_date' => '2025-07-01 21:29:39', - 'end_date' => '2025-07-01 23:29:39', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 157, - 'soldier_id' => 83, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-19 14:46:59', - 'end_date' => '2025-07-19 18:46:59', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 158, - 'soldier_id' => 83, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-25 09:03:33', - 'end_date' => '2025-07-25 14:03:33', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 159, - 'soldier_id' => 83, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-05 01:27:32', - 'end_date' => '2025-07-05 06:27:32', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 160, - 'soldier_id' => 83, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-15 14:59:50', - 'end_date' => '2025-07-15 18:59:50', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 161, - 'soldier_id' => 83, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-18 06:32:53', - 'end_date' => '2025-07-18 08:32:53', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 162, - 'soldier_id' => 83, - 'constraint_type' => 'School', - 'start_date' => '2025-07-19 21:58:19', - 'end_date' => '2025-07-19 22:58:19', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 163, - 'soldier_id' => 80, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-06 09:55:31', - 'end_date' => '2025-07-06 13:55:31', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 164, - 'soldier_id' => 80, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-13 19:22:05', - 'end_date' => '2025-07-13 23:22:05', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 165, - 'soldier_id' => 80, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-14 20:24:15', - 'end_date' => '2025-07-14 21:24:15', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 166, - 'soldier_id' => 80, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-07 02:06:46', - 'end_date' => '2025-07-07 07:06:46', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 167, - 'soldier_id' => 80, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-18 08:16:33', - 'end_date' => '2025-07-18 10:16:33', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 168, - 'soldier_id' => 80, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-08 02:22:18', - 'end_date' => '2025-07-08 05:22:18', - 'created_at' => '2025-05-13T06:41:25.000000Z', - 'updated_at' => '2025-05-13T06:41:25.000000Z', - ], - [ - 'id' => 169, - 'soldier_id' => 80, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-26 20:47:59', - 'end_date' => '2025-07-26 21:47:59', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 170, - 'soldier_id' => 80, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-26 20:45:37', - 'end_date' => '2025-07-27 01:45:37', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 171, - 'soldier_id' => 80, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-15 11:51:35', - 'end_date' => '2025-07-15 16:51:35', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 172, - 'soldier_id' => 80, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-09 13:06:02', - 'end_date' => '2025-07-09 18:06:02', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 173, - 'soldier_id' => 80, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-02 02:46:15', - 'end_date' => '2025-07-02 07:46:15', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 174, - 'soldier_id' => 80, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-05 17:27:37', - 'end_date' => '2025-07-05 21:27:37', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 175, - 'soldier_id' => 80, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-07 22:20:54', - 'end_date' => '2025-07-08 02:20:54', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 176, - 'soldier_id' => 80, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-16 02:38:39', - 'end_date' => '2025-07-16 03:38:39', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 177, - 'soldier_id' => 80, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-28 16:16:18', - 'end_date' => '2025-07-28 18:16:18', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 178, - 'soldier_id' => 80, - 'constraint_type' => 'School', - 'start_date' => '2025-07-10 08:02:04', - 'end_date' => '2025-07-10 13:02:04', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 179, - 'soldier_id' => 80, - 'constraint_type' => 'School', - 'start_date' => '2025-07-10 09:08:16', - 'end_date' => '2025-07-10 12:08:16', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 180, - 'soldier_id' => 56, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-20 20:32:31', - 'end_date' => '2025-07-21 00:32:31', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 181, - 'soldier_id' => 56, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-23 22:45:22', - 'end_date' => '2025-07-24 02:45:22', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 182, - 'soldier_id' => 56, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-29 15:26:54', - 'end_date' => '2025-07-29 17:26:54', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 183, - 'soldier_id' => 56, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-19 14:59:18', - 'end_date' => '2025-07-19 17:59:18', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 184, - 'soldier_id' => 56, - 'constraint_type' => 'School', - 'start_date' => '2025-07-27 21:43:07', - 'end_date' => '2025-07-28 00:43:07', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 185, - 'soldier_id' => 56, - 'constraint_type' => 'School', - 'start_date' => '2025-07-26 02:18:54', - 'end_date' => '2025-07-26 05:18:54', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 186, - 'soldier_id' => 56, - 'constraint_type' => 'School', - 'start_date' => '2025-07-17 16:10:29', - 'end_date' => '2025-07-17 20:10:29', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 187, - 'soldier_id' => 3, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-20 00:47:19', - 'end_date' => '2025-07-20 02:47:19', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 188, - 'soldier_id' => 3, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-14 03:43:21', - 'end_date' => '2025-07-14 07:43:21', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 189, - 'soldier_id' => 3, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-23 15:07:57', - 'end_date' => '2025-07-23 16:07:57', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 190, - 'soldier_id' => 3, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-25 00:51:10', - 'end_date' => '2025-07-25 02:51:10', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 191, - 'soldier_id' => 3, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-01 08:42:20', - 'end_date' => '2025-07-01 09:42:20', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 192, - 'soldier_id' => 41, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-14 18:01:12', - 'end_date' => '2025-07-14 20:01:12', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 193, - 'soldier_id' => 41, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-20 16:19:10', - 'end_date' => '2025-07-20 18:19:10', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 194, - 'soldier_id' => 41, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-02 20:51:37', - 'end_date' => '2025-07-03 00:51:37', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 195, - 'soldier_id' => 41, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-15 03:53:12', - 'end_date' => '2025-07-15 05:53:12', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 196, - 'soldier_id' => 41, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-01 00:31:40', - 'end_date' => '2025-07-01 01:31:40', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 197, - 'soldier_id' => 41, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-27 07:17:34', - 'end_date' => '2025-07-27 08:17:34', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 198, - 'soldier_id' => 41, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-17 21:55:55', - 'end_date' => '2025-07-17 23:55:55', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 199, - 'soldier_id' => 41, - 'constraint_type' => 'School', - 'start_date' => '2025-07-08 05:02:26', - 'end_date' => '2025-07-08 08:02:26', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 200, - 'soldier_id' => 41, - 'constraint_type' => 'School', - 'start_date' => '2025-07-24 02:08:27', - 'end_date' => '2025-07-24 06:08:27', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 201, - 'soldier_id' => 45, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-07 03:49:00', - 'end_date' => '2025-07-07 05:49:00', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 202, - 'soldier_id' => 45, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-29 14:51:51', - 'end_date' => '2025-07-29 17:51:51', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 203, - 'soldier_id' => 45, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-03 21:34:17', - 'end_date' => '2025-07-03 22:34:17', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 204, - 'soldier_id' => 45, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-07 22:13:53', - 'end_date' => '2025-07-08 02:13:53', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 205, - 'soldier_id' => 45, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-08 05:11:02', - 'end_date' => '2025-07-08 09:11:02', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 206, - 'soldier_id' => 45, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-10 20:22:56', - 'end_date' => '2025-07-10 22:22:56', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 207, - 'soldier_id' => 45, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-05 02:28:17', - 'end_date' => '2025-07-05 04:28:17', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 208, - 'soldier_id' => 45, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-01 12:43:21', - 'end_date' => '2025-07-01 14:43:21', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 209, - 'soldier_id' => 45, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-09 00:36:28', - 'end_date' => '2025-07-09 02:36:28', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 210, - 'soldier_id' => 45, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-06 05:58:24', - 'end_date' => '2025-07-06 06:58:24', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 211, - 'soldier_id' => 45, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-20 01:17:37', - 'end_date' => '2025-07-20 03:17:37', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 212, - 'soldier_id' => 45, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-01 13:12:26', - 'end_date' => '2025-07-01 16:12:26', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 213, - 'soldier_id' => 45, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-26 12:38:31', - 'end_date' => '2025-07-26 13:38:31', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 214, - 'soldier_id' => 89, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-28 14:24:04', - 'end_date' => '2025-07-28 15:24:04', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 215, - 'soldier_id' => 89, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-14 11:07:50', - 'end_date' => '2025-07-14 16:07:50', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 216, - 'soldier_id' => 89, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-17 20:41:39', - 'end_date' => '2025-07-17 22:41:39', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 217, - 'soldier_id' => 89, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-26 20:47:32', - 'end_date' => '2025-07-26 23:47:32', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 218, - 'soldier_id' => 89, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-10 20:52:39', - 'end_date' => '2025-07-10 21:52:39', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 219, - 'soldier_id' => 89, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-21 02:14:32', - 'end_date' => '2025-07-21 06:14:32', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 220, - 'soldier_id' => 89, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-05 20:41:06', - 'end_date' => '2025-07-05 23:41:06', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 221, - 'soldier_id' => 89, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-10 08:06:38', - 'end_date' => '2025-07-10 09:06:38', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 222, - 'soldier_id' => 89, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-09 22:46:40', - 'end_date' => '2025-07-09 23:46:40', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 223, - 'soldier_id' => 89, - 'constraint_type' => 'School', - 'start_date' => '2025-07-19 10:39:58', - 'end_date' => '2025-07-19 15:39:58', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 224, - 'soldier_id' => 89, - 'constraint_type' => 'School', - 'start_date' => '2025-07-13 00:50:17', - 'end_date' => '2025-07-13 02:50:17', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 225, - 'soldier_id' => 84, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-20 19:06:46', - 'end_date' => '2025-07-21 00:06:46', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 226, - 'soldier_id' => 84, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-18 03:41:48', - 'end_date' => '2025-07-18 05:41:48', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 227, - 'soldier_id' => 84, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-26 20:20:36', - 'end_date' => '2025-07-26 21:20:36', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 228, - 'soldier_id' => 84, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-24 12:48:36', - 'end_date' => '2025-07-24 15:48:36', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 229, - 'soldier_id' => 84, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-22 13:59:37', - 'end_date' => '2025-07-22 18:59:37', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 230, - 'soldier_id' => 84, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-07 18:19:09', - 'end_date' => '2025-07-07 23:19:09', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 231, - 'soldier_id' => 84, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-24 07:22:21', - 'end_date' => '2025-07-24 09:22:21', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 232, - 'soldier_id' => 84, - 'constraint_type' => 'School', - 'start_date' => '2025-07-25 03:00:39', - 'end_date' => '2025-07-25 08:00:39', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 233, - 'soldier_id' => 84, - 'constraint_type' => 'School', - 'start_date' => '2025-07-04 01:50:05', - 'end_date' => '2025-07-04 05:50:05', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 234, - 'soldier_id' => 129, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-21 06:53:28', - 'end_date' => '2025-07-21 09:53:28', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 235, - 'soldier_id' => 129, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-09 13:11:55', - 'end_date' => '2025-07-09 16:11:55', - 'created_at' => '2025-05-13T06:41:26.000000Z', - 'updated_at' => '2025-05-13T06:41:26.000000Z', - ], - [ - 'id' => 236, - 'soldier_id' => 129, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-29 19:18:11', - 'end_date' => '2025-07-29 23:18:11', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 237, - 'soldier_id' => 129, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-26 17:10:46', - 'end_date' => '2025-07-26 18:10:46', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 238, - 'soldier_id' => 129, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-26 10:16:11', - 'end_date' => '2025-07-26 13:16:11', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 239, - 'soldier_id' => 129, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-07 20:01:31', - 'end_date' => '2025-07-07 21:01:31', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 240, - 'soldier_id' => 129, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-23 20:14:56', - 'end_date' => '2025-07-24 00:14:56', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 241, - 'soldier_id' => 129, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-05 06:12:10', - 'end_date' => '2025-07-05 11:12:10', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 242, - 'soldier_id' => 129, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-08 13:46:27', - 'end_date' => '2025-07-08 16:46:27', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 243, - 'soldier_id' => 129, - 'constraint_type' => 'School', - 'start_date' => '2025-07-23 11:13:13', - 'end_date' => '2025-07-23 12:13:13', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 244, - 'soldier_id' => 129, - 'constraint_type' => 'School', - 'start_date' => '2025-07-21 03:36:10', - 'end_date' => '2025-07-21 07:36:10', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 245, - 'soldier_id' => 97, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-28 11:05:36', - 'end_date' => '2025-07-28 15:05:36', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 246, - 'soldier_id' => 97, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-20 04:18:25', - 'end_date' => '2025-07-20 05:18:25', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 247, - 'soldier_id' => 97, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-04 21:42:03', - 'end_date' => '2025-07-04 23:42:03', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 248, - 'soldier_id' => 97, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-09 23:09:57', - 'end_date' => '2025-07-10 01:09:57', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 249, - 'soldier_id' => 97, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-26 19:02:33', - 'end_date' => '2025-07-26 21:02:33', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 250, - 'soldier_id' => 97, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-08 18:11:11', - 'end_date' => '2025-07-08 20:11:11', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 251, - 'soldier_id' => 97, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-16 07:58:45', - 'end_date' => '2025-07-16 11:58:45', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 252, - 'soldier_id' => 97, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-23 20:49:41', - 'end_date' => '2025-07-24 00:49:41', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 253, - 'soldier_id' => 97, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-10 22:10:37', - 'end_date' => '2025-07-11 02:10:37', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 254, - 'soldier_id' => 97, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-19 04:50:17', - 'end_date' => '2025-07-19 07:50:17', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 255, - 'soldier_id' => 97, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-25 16:34:06', - 'end_date' => '2025-07-25 18:34:06', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 256, - 'soldier_id' => 97, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-25 03:41:54', - 'end_date' => '2025-07-25 07:41:54', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 257, - 'soldier_id' => 97, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-15 09:43:56', - 'end_date' => '2025-07-15 10:43:56', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 258, - 'soldier_id' => 97, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-19 09:16:46', - 'end_date' => '2025-07-19 12:16:46', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 259, - 'soldier_id' => 97, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-28 17:21:35', - 'end_date' => '2025-07-28 21:21:35', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 260, - 'soldier_id' => 97, - 'constraint_type' => 'School', - 'start_date' => '2025-07-29 18:55:45', - 'end_date' => '2025-07-29 22:55:45', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 261, - 'soldier_id' => 97, - 'constraint_type' => 'School', - 'start_date' => '2025-07-19 17:23:56', - 'end_date' => '2025-07-19 19:23:56', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 262, - 'soldier_id' => 97, - 'constraint_type' => 'School', - 'start_date' => '2025-07-18 05:39:56', - 'end_date' => '2025-07-18 08:39:56', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 263, - 'soldier_id' => 97, - 'constraint_type' => 'School', - 'start_date' => '2025-07-20 20:39:02', - 'end_date' => '2025-07-20 23:39:02', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 264, - 'soldier_id' => 168, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-07 02:15:11', - 'end_date' => '2025-07-07 05:15:11', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 265, - 'soldier_id' => 168, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-14 13:20:52', - 'end_date' => '2025-07-14 15:20:52', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 266, - 'soldier_id' => 168, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-20 14:27:34', - 'end_date' => '2025-07-20 16:27:34', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 267, - 'soldier_id' => 168, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-03 00:52:51', - 'end_date' => '2025-07-03 05:52:51', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 268, - 'soldier_id' => 168, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-10 20:12:27', - 'end_date' => '2025-07-11 01:12:27', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 269, - 'soldier_id' => 168, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-22 13:21:18', - 'end_date' => '2025-07-22 17:21:18', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 270, - 'soldier_id' => 168, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-11 01:17:09', - 'end_date' => '2025-07-11 02:17:09', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 271, - 'soldier_id' => 168, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-19 10:05:46', - 'end_date' => '2025-07-19 12:05:46', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 272, - 'soldier_id' => 168, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-13 22:44:27', - 'end_date' => '2025-07-14 02:44:27', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 273, - 'soldier_id' => 139, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-20 08:05:45', - 'end_date' => '2025-07-20 11:05:45', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 274, - 'soldier_id' => 139, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-27 04:42:33', - 'end_date' => '2025-07-27 08:42:33', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 275, - 'soldier_id' => 139, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-06 12:52:02', - 'end_date' => '2025-07-06 15:52:02', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 276, - 'soldier_id' => 139, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-09 02:17:34', - 'end_date' => '2025-07-09 07:17:34', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 277, - 'soldier_id' => 139, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-19 10:08:00', - 'end_date' => '2025-07-19 13:08:00', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 278, - 'soldier_id' => 139, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-30 23:50:45', - 'end_date' => '2025-08-01 01:50:45', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 279, - 'soldier_id' => 139, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-21 20:37:30', - 'end_date' => '2025-07-22 00:37:30', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 280, - 'soldier_id' => 139, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-01 20:03:22', - 'end_date' => '2025-07-02 00:03:22', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 281, - 'soldier_id' => 139, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-07 06:43:47', - 'end_date' => '2025-07-07 11:43:47', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 282, - 'soldier_id' => 139, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-01 20:16:39', - 'end_date' => '2025-07-01 22:16:39', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 283, - 'soldier_id' => 139, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-26 20:40:41', - 'end_date' => '2025-07-27 01:40:41', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 284, - 'soldier_id' => 139, - 'constraint_type' => 'School', - 'start_date' => '2025-07-29 22:40:07', - 'end_date' => '2025-07-30 01:40:07', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 285, - 'soldier_id' => 139, - 'constraint_type' => 'School', - 'start_date' => '2025-07-27 14:31:55', - 'end_date' => '2025-07-27 18:31:55', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 286, - 'soldier_id' => 148, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-28 15:30:10', - 'end_date' => '2025-07-28 18:30:10', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 287, - 'soldier_id' => 148, - 'constraint_type' => 'School', - 'start_date' => '2025-07-10 09:00:09', - 'end_date' => '2025-07-10 12:00:09', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 288, - 'soldier_id' => 148, - 'constraint_type' => 'School', - 'start_date' => '2025-07-10 02:18:49', - 'end_date' => '2025-07-10 07:18:49', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 289, - 'soldier_id' => 148, - 'constraint_type' => 'School', - 'start_date' => '2025-07-10 05:00:03', - 'end_date' => '2025-07-10 08:00:03', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 290, - 'soldier_id' => 74, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-20 06:08:13', - 'end_date' => '2025-07-20 11:08:13', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 291, - 'soldier_id' => 74, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-04 23:12:46', - 'end_date' => '2025-07-05 00:12:46', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 292, - 'soldier_id' => 74, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-26 05:27:23', - 'end_date' => '2025-07-26 08:27:23', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 293, - 'soldier_id' => 74, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-14 22:16:46', - 'end_date' => '2025-07-14 23:16:46', - 'created_at' => '2025-05-13T06:41:27.000000Z', - 'updated_at' => '2025-05-13T06:41:27.000000Z', - ], - [ - 'id' => 294, - 'soldier_id' => 74, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-18 20:27:13', - 'end_date' => '2025-07-19 01:27:13', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 295, - 'soldier_id' => 74, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-27 03:30:31', - 'end_date' => '2025-07-27 06:30:31', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 296, - 'soldier_id' => 74, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-30 20:00:29', - 'end_date' => '2025-07-30 22:00:29', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 297, - 'soldier_id' => 74, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-07 20:28:01', - 'end_date' => '2025-07-07 22:28:01', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 298, - 'soldier_id' => 74, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-05 20:22:36', - 'end_date' => '2025-07-05 21:22:36', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 299, - 'soldier_id' => 74, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-22 15:22:31', - 'end_date' => '2025-07-22 16:22:31', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 300, - 'soldier_id' => 74, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-05 01:37:54', - 'end_date' => '2025-07-05 04:37:54', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 301, - 'soldier_id' => 74, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-02 20:13:25', - 'end_date' => '2025-07-02 23:13:25', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 302, - 'soldier_id' => 74, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-11 05:10:58', - 'end_date' => '2025-07-11 09:10:58', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 303, - 'soldier_id' => 74, - 'constraint_type' => 'School', - 'start_date' => '2025-07-30 09:18:23', - 'end_date' => '2025-07-30 11:18:23', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 304, - 'soldier_id' => 61, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-14 03:15:43', - 'end_date' => '2025-07-14 08:15:43', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 305, - 'soldier_id' => 61, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-18 02:58:12', - 'end_date' => '2025-07-18 04:58:12', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 306, - 'soldier_id' => 61, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-01 08:18:37', - 'end_date' => '2025-07-01 10:18:37', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 307, - 'soldier_id' => 61, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-22 02:11:48', - 'end_date' => '2025-07-22 03:11:48', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 308, - 'soldier_id' => 61, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-20 20:18:36', - 'end_date' => '2025-07-20 22:18:36', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 309, - 'soldier_id' => 61, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-30 00:40:23', - 'end_date' => '2025-07-30 03:40:23', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 310, - 'soldier_id' => 61, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-01 19:58:19', - 'end_date' => '2025-07-02 00:58:19', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 311, - 'soldier_id' => 61, - 'constraint_type' => 'School', - 'start_date' => '2025-07-05 00:42:32', - 'end_date' => '2025-07-05 05:42:32', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 312, - 'soldier_id' => 61, - 'constraint_type' => 'School', - 'start_date' => '2025-07-15 22:21:28', - 'end_date' => '2025-07-16 02:21:28', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 313, - 'soldier_id' => 152, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-28 19:15:34', - 'end_date' => '2025-07-28 21:15:34', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 314, - 'soldier_id' => 152, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-02 02:18:00', - 'end_date' => '2025-07-02 04:18:00', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 315, - 'soldier_id' => 152, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-24 20:00:14', - 'end_date' => '2025-07-24 23:00:14', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 316, - 'soldier_id' => 152, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-20 04:35:01', - 'end_date' => '2025-07-20 07:35:01', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 317, - 'soldier_id' => 152, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-16 03:20:43', - 'end_date' => '2025-07-16 04:20:43', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 318, - 'soldier_id' => 152, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-12 20:18:43', - 'end_date' => '2025-07-12 22:18:43', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 319, - 'soldier_id' => 152, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-29 12:19:39', - 'end_date' => '2025-07-29 13:19:39', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 320, - 'soldier_id' => 152, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-17 20:08:01', - 'end_date' => '2025-07-17 23:08:01', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 321, - 'soldier_id' => 152, - 'constraint_type' => 'School', - 'start_date' => '2025-07-26 01:48:36', - 'end_date' => '2025-07-26 06:48:36', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 322, - 'soldier_id' => 152, - 'constraint_type' => 'School', - 'start_date' => '2025-07-29 16:19:12', - 'end_date' => '2025-07-29 17:19:12', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 323, - 'soldier_id' => 152, - 'constraint_type' => 'School', - 'start_date' => '2025-07-22 20:53:37', - 'end_date' => '2025-07-23 01:53:37', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 324, - 'soldier_id' => 113, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-13 13:01:37', - 'end_date' => '2025-07-13 16:01:37', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 325, - 'soldier_id' => 113, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-05 07:07:06', - 'end_date' => '2025-07-05 11:07:06', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 326, - 'soldier_id' => 113, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-28 23:22:21', - 'end_date' => '2025-07-29 00:22:21', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 327, - 'soldier_id' => 113, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-30 01:34:54', - 'end_date' => '2025-07-30 02:34:54', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 328, - 'soldier_id' => 113, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-18 05:49:54', - 'end_date' => '2025-07-18 09:49:54', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 329, - 'soldier_id' => 113, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-12 20:09:29', - 'end_date' => '2025-07-12 22:09:29', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 330, - 'soldier_id' => 113, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-01 19:24:56', - 'end_date' => '2025-07-01 20:24:56', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 331, - 'soldier_id' => 113, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-03 17:54:01', - 'end_date' => '2025-07-03 22:54:01', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 332, - 'soldier_id' => 113, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-15 04:01:51', - 'end_date' => '2025-07-15 06:01:51', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 333, - 'soldier_id' => 113, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-08 15:36:01', - 'end_date' => '2025-07-08 19:36:01', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 334, - 'soldier_id' => 113, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-29 15:30:07', - 'end_date' => '2025-07-29 20:30:07', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 335, - 'soldier_id' => 113, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-22 22:38:04', - 'end_date' => '2025-07-23 01:38:04', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 336, - 'soldier_id' => 113, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-27 21:08:40', - 'end_date' => '2025-07-28 00:08:40', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 337, - 'soldier_id' => 113, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-21 22:31:14', - 'end_date' => '2025-07-22 00:31:14', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 338, - 'soldier_id' => 113, - 'constraint_type' => 'School', - 'start_date' => '2025-07-30 02:37:40', - 'end_date' => '2025-07-30 06:37:40', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 339, - 'soldier_id' => 113, - 'constraint_type' => 'School', - 'start_date' => '2025-07-24 20:24:48', - 'end_date' => '2025-07-25 01:24:48', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 340, - 'soldier_id' => 99, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-08 10:39:28', - 'end_date' => '2025-07-08 12:39:28', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 341, - 'soldier_id' => 99, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-21 16:28:40', - 'end_date' => '2025-07-21 17:28:40', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 342, - 'soldier_id' => 99, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-08 20:57:44', - 'end_date' => '2025-07-09 01:57:44', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 343, - 'soldier_id' => 99, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-19 20:01:07', - 'end_date' => '2025-07-20 00:01:07', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 344, - 'soldier_id' => 99, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-12 13:04:34', - 'end_date' => '2025-07-12 16:04:34', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 345, - 'soldier_id' => 99, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-20 13:35:47', - 'end_date' => '2025-07-20 17:35:47', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 346, - 'soldier_id' => 99, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-02 03:10:13', - 'end_date' => '2025-07-02 06:10:13', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 347, - 'soldier_id' => 99, - 'constraint_type' => 'School', - 'start_date' => '2025-07-16 20:29:42', - 'end_date' => '2025-07-17 01:29:42', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 348, - 'soldier_id' => 99, - 'constraint_type' => 'School', - 'start_date' => '2025-07-08 23:35:14', - 'end_date' => '2025-07-09 02:35:14', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 349, - 'soldier_id' => 99, - 'constraint_type' => 'School', - 'start_date' => '2025-07-11 02:58:43', - 'end_date' => '2025-07-11 05:58:43', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 350, - 'soldier_id' => 99, - 'constraint_type' => 'School', - 'start_date' => '2025-07-28 09:29:50', - 'end_date' => '2025-07-28 12:29:50', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 351, - 'soldier_id' => 65, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-07 00:17:39', - 'end_date' => '2025-07-07 03:17:39', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 352, - 'soldier_id' => 65, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-07 12:16:08', - 'end_date' => '2025-07-07 16:16:08', - 'created_at' => '2025-05-13T06:41:28.000000Z', - 'updated_at' => '2025-05-13T06:41:28.000000Z', - ], - [ - 'id' => 353, - 'soldier_id' => 65, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-03 02:12:59', - 'end_date' => '2025-07-03 03:12:59', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 354, - 'soldier_id' => 65, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-04 14:37:53', - 'end_date' => '2025-07-04 19:37:53', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 355, - 'soldier_id' => 65, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-16 20:09:06', - 'end_date' => '2025-07-17 00:09:06', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 356, - 'soldier_id' => 65, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-10 01:41:45', - 'end_date' => '2025-07-10 02:41:45', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 357, - 'soldier_id' => 65, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-15 20:17:25', - 'end_date' => '2025-07-16 00:17:25', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 358, - 'soldier_id' => 65, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-03 20:34:45', - 'end_date' => '2025-07-04 01:34:45', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 359, - 'soldier_id' => 65, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-26 20:46:44', - 'end_date' => '2025-07-26 23:46:44', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 360, - 'soldier_id' => 65, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-18 01:14:27', - 'end_date' => '2025-07-18 03:14:27', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 361, - 'soldier_id' => 65, - 'constraint_type' => 'School', - 'start_date' => '2025-07-26 06:34:07', - 'end_date' => '2025-07-26 08:34:07', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 362, - 'soldier_id' => 65, - 'constraint_type' => 'School', - 'start_date' => '2025-07-08 08:27:33', - 'end_date' => '2025-07-08 12:27:33', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 363, - 'soldier_id' => 65, - 'constraint_type' => 'School', - 'start_date' => '2025-07-23 09:05:20', - 'end_date' => '2025-07-23 13:05:20', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 364, - 'soldier_id' => 65, - 'constraint_type' => 'School', - 'start_date' => '2025-07-07 14:51:20', - 'end_date' => '2025-07-07 17:51:20', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 365, - 'soldier_id' => 18, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-07 21:21:19', - 'end_date' => '2025-07-07 22:21:19', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 366, - 'soldier_id' => 18, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-21 00:16:44', - 'end_date' => '2025-07-21 02:16:44', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 367, - 'soldier_id' => 18, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-20 18:45:24', - 'end_date' => '2025-07-20 21:45:24', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 368, - 'soldier_id' => 18, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-01 08:57:09', - 'end_date' => '2025-07-01 13:57:09', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 369, - 'soldier_id' => 18, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-15 12:16:07', - 'end_date' => '2025-07-15 17:16:07', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 370, - 'soldier_id' => 18, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-12 03:12:50', - 'end_date' => '2025-07-12 06:12:50', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 371, - 'soldier_id' => 18, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-15 14:10:38', - 'end_date' => '2025-07-15 15:10:38', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 372, - 'soldier_id' => 18, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-18 02:07:46', - 'end_date' => '2025-07-18 06:07:46', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 373, - 'soldier_id' => 18, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-10 11:39:37', - 'end_date' => '2025-07-10 14:39:37', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 374, - 'soldier_id' => 18, - 'constraint_type' => 'School', - 'start_date' => '2025-07-20 01:07:07', - 'end_date' => '2025-07-20 06:07:07', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 375, - 'soldier_id' => 18, - 'constraint_type' => 'School', - 'start_date' => '2025-07-18 09:05:17', - 'end_date' => '2025-07-18 11:05:17', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 376, - 'soldier_id' => 18, - 'constraint_type' => 'School', - 'start_date' => '2025-07-06 14:44:04', - 'end_date' => '2025-07-06 17:44:04', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 377, - 'soldier_id' => 50, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-28 10:59:45', - 'end_date' => '2025-07-28 12:59:45', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 378, - 'soldier_id' => 50, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-03 07:59:44', - 'end_date' => '2025-07-03 09:59:44', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 379, - 'soldier_id' => 50, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-19 04:39:19', - 'end_date' => '2025-07-19 05:39:19', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 380, - 'soldier_id' => 50, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-08 10:09:25', - 'end_date' => '2025-07-08 15:09:25', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 381, - 'soldier_id' => 50, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-15 17:31:38', - 'end_date' => '2025-07-15 20:31:38', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 382, - 'soldier_id' => 50, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-11 18:27:21', - 'end_date' => '2025-07-11 23:27:21', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 383, - 'soldier_id' => 50, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-12 19:33:48', - 'end_date' => '2025-07-13 00:33:48', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 384, - 'soldier_id' => 50, - 'constraint_type' => 'School', - 'start_date' => '2025-07-27 03:34:44', - 'end_date' => '2025-07-27 05:34:44', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 385, - 'soldier_id' => 50, - 'constraint_type' => 'School', - 'start_date' => '2025-07-19 05:36:53', - 'end_date' => '2025-07-19 10:36:53', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 386, - 'soldier_id' => 10, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-25 03:02:15', - 'end_date' => '2025-07-25 08:02:15', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 387, - 'soldier_id' => 10, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-14 06:13:56', - 'end_date' => '2025-07-14 10:13:56', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 388, - 'soldier_id' => 10, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-10 20:01:10', - 'end_date' => '2025-07-10 21:01:10', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 389, - 'soldier_id' => 10, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-08 20:51:54', - 'end_date' => '2025-07-08 22:51:54', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 390, - 'soldier_id' => 10, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-18 20:01:52', - 'end_date' => '2025-07-19 00:01:52', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 391, - 'soldier_id' => 10, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-22 15:20:01', - 'end_date' => '2025-07-22 17:20:01', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 392, - 'soldier_id' => 10, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-02 16:25:11', - 'end_date' => '2025-07-02 20:25:11', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 393, - 'soldier_id' => 10, - 'constraint_type' => 'School', - 'start_date' => '2025-07-18 15:29:04', - 'end_date' => '2025-07-18 17:29:04', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 394, - 'soldier_id' => 10, - 'constraint_type' => 'School', - 'start_date' => '2025-07-07 07:03:01', - 'end_date' => '2025-07-07 12:03:01', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 395, - 'soldier_id' => 153, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-11 17:21:57', - 'end_date' => '2025-07-11 19:21:57', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 396, - 'soldier_id' => 153, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-22 04:08:31', - 'end_date' => '2025-07-22 07:08:31', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 397, - 'soldier_id' => 153, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-17 21:27:16', - 'end_date' => '2025-07-17 22:27:16', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 398, - 'soldier_id' => 153, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-08 20:23:15', - 'end_date' => '2025-07-09 00:23:15', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 399, - 'soldier_id' => 153, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-17 02:28:02', - 'end_date' => '2025-07-17 07:28:02', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 400, - 'soldier_id' => 153, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-30 23:07:49', - 'end_date' => '2025-08-01 03:07:49', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 401, - 'soldier_id' => 153, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-19 20:32:46', - 'end_date' => '2025-07-19 21:32:46', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 402, - 'soldier_id' => 153, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-24 20:24:41', - 'end_date' => '2025-07-25 01:24:41', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 403, - 'soldier_id' => 153, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-27 06:42:42', - 'end_date' => '2025-07-27 10:42:42', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 404, - 'soldier_id' => 153, - 'constraint_type' => 'School', - 'start_date' => '2025-07-19 13:22:25', - 'end_date' => '2025-07-19 16:22:25', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 405, - 'soldier_id' => 47, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-15 00:13:55', - 'end_date' => '2025-07-15 03:13:55', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 406, - 'soldier_id' => 47, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-18 13:35:38', - 'end_date' => '2025-07-18 16:35:38', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 407, - 'soldier_id' => 47, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-06 07:24:27', - 'end_date' => '2025-07-06 11:24:27', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 408, - 'soldier_id' => 47, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-08 07:33:54', - 'end_date' => '2025-07-08 11:33:54', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 409, - 'soldier_id' => 47, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-10 01:31:21', - 'end_date' => '2025-07-10 06:31:21', - 'created_at' => '2025-05-13T06:41:29.000000Z', - 'updated_at' => '2025-05-13T06:41:29.000000Z', - ], - [ - 'id' => 410, - 'soldier_id' => 47, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-26 06:43:03', - 'end_date' => '2025-07-26 11:43:03', - 'created_at' => '2025-05-13T06:41:30.000000Z', - 'updated_at' => '2025-05-13T06:41:30.000000Z', - ], - [ - 'id' => 411, - 'soldier_id' => 47, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-25 01:50:28', - 'end_date' => '2025-07-25 02:50:28', - 'created_at' => '2025-05-13T06:41:30.000000Z', - 'updated_at' => '2025-05-13T06:41:30.000000Z', - ], - [ - 'id' => 412, - 'soldier_id' => 47, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-01 23:17:15', - 'end_date' => '2025-07-02 02:17:15', - 'created_at' => '2025-05-13T06:41:30.000000Z', - 'updated_at' => '2025-05-13T06:41:30.000000Z', - ], - [ - 'id' => 413, - 'soldier_id' => 47, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-24 10:50:09', - 'end_date' => '2025-07-24 15:50:09', - 'created_at' => '2025-05-13T06:41:30.000000Z', - 'updated_at' => '2025-05-13T06:41:30.000000Z', - ], - [ - 'id' => 414, - 'soldier_id' => 47, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-29 08:10:43', - 'end_date' => '2025-07-29 13:10:43', - 'created_at' => '2025-05-13T06:41:30.000000Z', - 'updated_at' => '2025-05-13T06:41:30.000000Z', - ], - [ - 'id' => 415, - 'soldier_id' => 47, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-10 09:12:28', - 'end_date' => '2025-07-10 14:12:28', - 'created_at' => '2025-05-13T06:41:30.000000Z', - 'updated_at' => '2025-05-13T06:41:30.000000Z', - ], - [ - 'id' => 416, - 'soldier_id' => 35, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-27 03:13:56', - 'end_date' => '2025-07-27 05:13:56', - 'created_at' => '2025-05-13T06:41:30.000000Z', - 'updated_at' => '2025-05-13T06:41:30.000000Z', - ], - [ - 'id' => 417, - 'soldier_id' => 35, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-21 02:44:05', - 'end_date' => '2025-07-21 04:44:05', - 'created_at' => '2025-05-13T06:41:30.000000Z', - 'updated_at' => '2025-05-13T06:41:30.000000Z', - ], - [ - 'id' => 418, - 'soldier_id' => 35, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-04 10:28:51', - 'end_date' => '2025-07-04 11:28:51', - 'created_at' => '2025-05-13T06:41:30.000000Z', - 'updated_at' => '2025-05-13T06:41:30.000000Z', - ], - [ - 'id' => 419, - 'soldier_id' => 35, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-30 10:58:27', - 'end_date' => '2025-07-30 15:58:27', - 'created_at' => '2025-05-13T06:41:30.000000Z', - 'updated_at' => '2025-05-13T06:41:30.000000Z', - ], - [ - 'id' => 420, - 'soldier_id' => 35, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-03 16:17:37', - 'end_date' => '2025-07-03 17:17:37', - 'created_at' => '2025-05-13T06:41:30.000000Z', - 'updated_at' => '2025-05-13T06:41:30.000000Z', - ], - [ - 'id' => 421, - 'soldier_id' => 35, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-19 03:36:05', - 'end_date' => '2025-07-19 04:36:05', - 'created_at' => '2025-05-13T06:41:30.000000Z', - 'updated_at' => '2025-05-13T06:41:30.000000Z', - ], - [ - 'id' => 422, - 'soldier_id' => 35, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-01 08:08:40', - 'end_date' => '2025-07-01 12:08:40', - 'created_at' => '2025-05-13T06:41:30.000000Z', - 'updated_at' => '2025-05-13T06:41:30.000000Z', - ], - [ - 'id' => 423, - 'soldier_id' => 27, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-13 23:49:30', - 'end_date' => '2025-07-14 01:49:30', - 'created_at' => '2025-05-13T06:41:30.000000Z', - 'updated_at' => '2025-05-13T06:41:30.000000Z', - ], - [ - 'id' => 424, - 'soldier_id' => 27, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-27 02:45:12', - 'end_date' => '2025-07-27 07:45:12', - 'created_at' => '2025-05-13T06:41:30.000000Z', - 'updated_at' => '2025-05-13T06:41:30.000000Z', - ], - [ - 'id' => 425, - 'soldier_id' => 27, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-10 19:32:23', - 'end_date' => '2025-07-11 00:32:23', - 'created_at' => '2025-05-13T06:41:30.000000Z', - 'updated_at' => '2025-05-13T06:41:30.000000Z', - ], - [ - 'id' => 426, - 'soldier_id' => 27, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-17 23:00:09', - 'end_date' => '2025-07-18 01:00:09', - 'created_at' => '2025-05-13T06:41:30.000000Z', - 'updated_at' => '2025-05-13T06:41:30.000000Z', - ], - [ - 'id' => 427, - 'soldier_id' => 27, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-29 20:32:46', - 'end_date' => '2025-07-29 22:32:46', - 'created_at' => '2025-05-13T06:41:30.000000Z', - 'updated_at' => '2025-05-13T06:41:30.000000Z', - ], - [ - 'id' => 428, - 'soldier_id' => 27, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-01 20:39:35', - 'end_date' => '2025-07-01 21:39:35', - 'created_at' => '2025-05-13T06:41:30.000000Z', - 'updated_at' => '2025-05-13T06:41:30.000000Z', - ], - [ - 'id' => 429, - 'soldier_id' => 27, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-11 05:37:21', - 'end_date' => '2025-07-11 10:37:21', - 'created_at' => '2025-05-13T06:41:30.000000Z', - 'updated_at' => '2025-05-13T06:41:30.000000Z', - ], - [ - 'id' => 430, - 'soldier_id' => 27, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-05 06:17:03', - 'end_date' => '2025-07-05 09:17:03', - 'created_at' => '2025-05-13T06:41:30.000000Z', - 'updated_at' => '2025-05-13T06:41:30.000000Z', - ], - [ - 'id' => 431, - 'soldier_id' => 27, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-15 12:27:11', - 'end_date' => '2025-07-15 13:27:11', - 'created_at' => '2025-05-13T06:41:30.000000Z', - 'updated_at' => '2025-05-13T06:41:30.000000Z', - ], - [ - 'id' => 432, - 'soldier_id' => 27, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-13 23:50:50', - 'end_date' => '2025-07-14 01:50:50', - 'created_at' => '2025-05-13T06:41:30.000000Z', - 'updated_at' => '2025-05-13T06:41:30.000000Z', - ], - [ - 'id' => 433, - 'soldier_id' => 27, - 'constraint_type' => 'School', - 'start_date' => '2025-07-17 07:05:24', - 'end_date' => '2025-07-17 08:05:24', - 'created_at' => '2025-05-13T06:41:30.000000Z', - 'updated_at' => '2025-05-13T06:41:30.000000Z', - ], - [ - 'id' => 434, - 'soldier_id' => 27, - 'constraint_type' => 'School', - 'start_date' => '2025-07-10 15:45:57', - 'end_date' => '2025-07-10 18:45:57', - 'created_at' => '2025-05-13T06:41:30.000000Z', - 'updated_at' => '2025-05-13T06:41:30.000000Z', - ], - [ - 'id' => 435, - 'soldier_id' => 27, - 'constraint_type' => 'School', - 'start_date' => '2025-07-28 02:11:09', - 'end_date' => '2025-07-28 07:11:09', - 'created_at' => '2025-05-13T06:41:30.000000Z', - 'updated_at' => '2025-05-13T06:41:30.000000Z', - ], - [ - 'id' => 436, - 'soldier_id' => 27, - 'constraint_type' => 'School', - 'start_date' => '2025-07-05 12:16:06', - 'end_date' => '2025-07-05 17:16:06', - 'created_at' => '2025-05-13T06:41:30.000000Z', - 'updated_at' => '2025-05-13T06:41:30.000000Z', - ], - [ - 'id' => 437, - 'soldier_id' => 120, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-08 02:22:36', - 'end_date' => '2025-07-08 07:22:36', - 'created_at' => '2025-05-13T06:41:30.000000Z', - 'updated_at' => '2025-05-13T06:41:30.000000Z', - ], - [ - 'id' => 438, - 'soldier_id' => 120, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-07 07:27:28', - 'end_date' => '2025-07-07 10:27:28', - 'created_at' => '2025-05-13T06:41:30.000000Z', - 'updated_at' => '2025-05-13T06:41:30.000000Z', - ], - [ - 'id' => 439, - 'soldier_id' => 120, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-14 01:04:07', - 'end_date' => '2025-07-14 02:04:07', - 'created_at' => '2025-05-13T06:41:30.000000Z', - 'updated_at' => '2025-05-13T06:41:30.000000Z', - ], - [ - 'id' => 440, - 'soldier_id' => 120, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-12 00:35:18', - 'end_date' => '2025-07-12 01:35:18', - 'created_at' => '2025-05-13T06:41:30.000000Z', - 'updated_at' => '2025-05-13T06:41:30.000000Z', - ], - [ - 'id' => 441, - 'soldier_id' => 120, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-14 04:17:59', - 'end_date' => '2025-07-14 07:17:59', - 'created_at' => '2025-05-13T06:41:30.000000Z', - 'updated_at' => '2025-05-13T06:41:30.000000Z', - ], - [ - 'id' => 442, - 'soldier_id' => 120, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-01 23:16:08', - 'end_date' => '2025-07-02 04:16:08', - 'created_at' => '2025-05-13T06:41:30.000000Z', - 'updated_at' => '2025-05-13T06:41:30.000000Z', - ], - [ - 'id' => 443, - 'soldier_id' => 120, - 'constraint_type' => 'School', - 'start_date' => '2025-07-09 20:09:54', - 'end_date' => '2025-07-09 23:09:54', - 'created_at' => '2025-05-13T06:41:30.000000Z', - 'updated_at' => '2025-05-13T06:41:30.000000Z', - ], - [ - 'id' => 444, - 'soldier_id' => 120, - 'constraint_type' => 'School', - 'start_date' => '2025-07-04 05:50:57', - 'end_date' => '2025-07-04 06:50:57', - 'created_at' => '2025-05-13T06:41:30.000000Z', - 'updated_at' => '2025-05-13T06:41:30.000000Z', - ], - [ - 'id' => 445, - 'soldier_id' => 120, - 'constraint_type' => 'School', - 'start_date' => '2025-07-15 23:54:17', - 'end_date' => '2025-07-16 04:54:17', - 'created_at' => '2025-05-13T06:41:30.000000Z', - 'updated_at' => '2025-05-13T06:41:30.000000Z', - ], - [ - 'id' => 446, - 'soldier_id' => 120, - 'constraint_type' => 'School', - 'start_date' => '2025-07-10 04:55:40', - 'end_date' => '2025-07-10 05:55:40', - 'created_at' => '2025-05-13T06:41:30.000000Z', - 'updated_at' => '2025-05-13T06:41:30.000000Z', - ], - [ - 'id' => 447, - 'soldier_id' => 57, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-12 14:33:24', - 'end_date' => '2025-07-12 17:33:24', - 'created_at' => '2025-05-13T06:41:30.000000Z', - 'updated_at' => '2025-05-13T06:41:30.000000Z', - ], - [ - 'id' => 448, - 'soldier_id' => 57, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-28 06:54:26', - 'end_date' => '2025-07-28 09:54:26', - 'created_at' => '2025-05-13T06:41:30.000000Z', - 'updated_at' => '2025-05-13T06:41:30.000000Z', - ], - [ - 'id' => 449, - 'soldier_id' => 57, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-04 00:56:24', - 'end_date' => '2025-07-04 03:56:24', - 'created_at' => '2025-05-13T06:41:30.000000Z', - 'updated_at' => '2025-05-13T06:41:30.000000Z', - ], - [ - 'id' => 450, - 'soldier_id' => 57, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-20 00:44:07', - 'end_date' => '2025-07-20 02:44:07', - 'created_at' => '2025-05-13T06:41:30.000000Z', - 'updated_at' => '2025-05-13T06:41:30.000000Z', - ], - [ - 'id' => 451, - 'soldier_id' => 57, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-08 21:17:30', - 'end_date' => '2025-07-09 01:17:30', - 'created_at' => '2025-05-13T06:41:30.000000Z', - 'updated_at' => '2025-05-13T06:41:30.000000Z', - ], - [ - 'id' => 452, - 'soldier_id' => 57, - 'constraint_type' => 'School', - 'start_date' => '2025-07-25 15:57:50', - 'end_date' => '2025-07-25 18:57:50', - 'created_at' => '2025-05-13T06:41:30.000000Z', - 'updated_at' => '2025-05-13T06:41:30.000000Z', - ], - [ - 'id' => 453, - 'soldier_id' => 57, - 'constraint_type' => 'School', - 'start_date' => '2025-07-22 06:28:02', - 'end_date' => '2025-07-22 07:28:02', - 'created_at' => '2025-05-13T06:41:30.000000Z', - 'updated_at' => '2025-05-13T06:41:30.000000Z', - ], - [ - 'id' => 454, - 'soldier_id' => 57, - 'constraint_type' => 'School', - 'start_date' => '2025-07-11 17:23:27', - 'end_date' => '2025-07-11 22:23:27', - 'created_at' => '2025-05-13T06:41:30.000000Z', - 'updated_at' => '2025-05-13T06:41:30.000000Z', - ], - [ - 'id' => 455, - 'soldier_id' => 9, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-21 17:53:22', - 'end_date' => '2025-07-21 21:53:22', - 'created_at' => '2025-05-13T06:41:30.000000Z', - 'updated_at' => '2025-05-13T06:41:30.000000Z', - ], - [ - 'id' => 456, - 'soldier_id' => 9, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-11 22:52:23', - 'end_date' => '2025-07-12 02:52:23', - 'created_at' => '2025-05-13T06:41:31.000000Z', - 'updated_at' => '2025-05-13T06:41:31.000000Z', - ], - [ - 'id' => 457, - 'soldier_id' => 9, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-09 09:13:01', - 'end_date' => '2025-07-09 12:13:01', - 'created_at' => '2025-05-13T06:41:31.000000Z', - 'updated_at' => '2025-05-13T06:41:31.000000Z', - ], - [ - 'id' => 458, - 'soldier_id' => 9, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-05 20:12:35', - 'end_date' => '2025-07-05 21:12:35', - 'created_at' => '2025-05-13T06:41:31.000000Z', - 'updated_at' => '2025-05-13T06:41:31.000000Z', - ], - [ - 'id' => 459, - 'soldier_id' => 9, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-11 20:03:35', - 'end_date' => '2025-07-12 01:03:35', - 'created_at' => '2025-05-13T06:41:31.000000Z', - 'updated_at' => '2025-05-13T06:41:31.000000Z', - ], - [ - 'id' => 460, - 'soldier_id' => 9, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-01 13:28:08', - 'end_date' => '2025-07-01 17:28:08', - 'created_at' => '2025-05-13T06:41:31.000000Z', - 'updated_at' => '2025-05-13T06:41:31.000000Z', - ], - [ - 'id' => 461, - 'soldier_id' => 9, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-10 06:42:36', - 'end_date' => '2025-07-10 11:42:36', - 'created_at' => '2025-05-13T06:41:31.000000Z', - 'updated_at' => '2025-05-13T06:41:31.000000Z', - ], - [ - 'id' => 462, - 'soldier_id' => 9, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-17 02:49:34', - 'end_date' => '2025-07-17 07:49:34', - 'created_at' => '2025-05-13T06:41:31.000000Z', - 'updated_at' => '2025-05-13T06:41:31.000000Z', - ], - [ - 'id' => 463, - 'soldier_id' => 9, - 'constraint_type' => 'School', - 'start_date' => '2025-07-11 23:51:35', - 'end_date' => '2025-07-12 02:51:35', - 'created_at' => '2025-05-13T06:41:31.000000Z', - 'updated_at' => '2025-05-13T06:41:31.000000Z', - ], - [ - 'id' => 464, - 'soldier_id' => 9, - 'constraint_type' => 'School', - 'start_date' => '2025-07-08 23:31:30', - 'end_date' => '2025-07-09 01:31:30', - 'created_at' => '2025-05-13T06:41:31.000000Z', - 'updated_at' => '2025-05-13T06:41:31.000000Z', - ], - [ - 'id' => 465, - 'soldier_id' => 109, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-21 13:08:48', - 'end_date' => '2025-07-21 18:08:48', - 'created_at' => '2025-05-13T06:41:31.000000Z', - 'updated_at' => '2025-05-13T06:41:31.000000Z', - ], - [ - 'id' => 466, - 'soldier_id' => 109, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-27 13:53:35', - 'end_date' => '2025-07-27 16:53:35', - 'created_at' => '2025-05-13T06:41:31.000000Z', - 'updated_at' => '2025-05-13T06:41:31.000000Z', - ], - [ - 'id' => 467, - 'soldier_id' => 109, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-01 15:37:14', - 'end_date' => '2025-07-01 17:37:14', - 'created_at' => '2025-05-13T06:41:31.000000Z', - 'updated_at' => '2025-05-13T06:41:31.000000Z', - ], - [ - 'id' => 468, - 'soldier_id' => 109, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-13 01:44:25', - 'end_date' => '2025-07-13 02:44:25', - 'created_at' => '2025-05-13T06:41:31.000000Z', - 'updated_at' => '2025-05-13T06:41:31.000000Z', - ], - [ - 'id' => 469, - 'soldier_id' => 109, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-01 03:40:51', - 'end_date' => '2025-07-01 07:40:51', - 'created_at' => '2025-05-13T06:41:31.000000Z', - 'updated_at' => '2025-05-13T06:41:31.000000Z', - ], - [ - 'id' => 470, - 'soldier_id' => 109, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-30 13:17:51', - 'end_date' => '2025-07-30 14:17:51', - 'created_at' => '2025-05-13T06:41:31.000000Z', - 'updated_at' => '2025-05-13T06:41:31.000000Z', - ], - [ - 'id' => 471, - 'soldier_id' => 109, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-15 16:37:43', - 'end_date' => '2025-07-15 21:37:43', - 'created_at' => '2025-05-13T06:41:31.000000Z', - 'updated_at' => '2025-05-13T06:41:31.000000Z', - ], - [ - 'id' => 472, - 'soldier_id' => 109, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-20 20:53:22', - 'end_date' => '2025-07-20 21:53:22', - 'created_at' => '2025-05-13T06:41:31.000000Z', - 'updated_at' => '2025-05-13T06:41:31.000000Z', - ], - [ - 'id' => 473, - 'soldier_id' => 109, - 'constraint_type' => 'School', - 'start_date' => '2025-07-28 15:01:00', - 'end_date' => '2025-07-28 17:01:00', - 'created_at' => '2025-05-13T06:41:31.000000Z', - 'updated_at' => '2025-05-13T06:41:31.000000Z', - ], - [ - 'id' => 474, - 'soldier_id' => 109, - 'constraint_type' => 'School', - 'start_date' => '2025-07-05 08:12:46', - 'end_date' => '2025-07-05 10:12:46', - 'created_at' => '2025-05-13T06:41:31.000000Z', - 'updated_at' => '2025-05-13T06:41:31.000000Z', - ], - [ - 'id' => 475, - 'soldier_id' => 109, - 'constraint_type' => 'School', - 'start_date' => '2025-07-01 11:45:25', - 'end_date' => '2025-07-01 14:45:25', - 'created_at' => '2025-05-13T06:41:31.000000Z', - 'updated_at' => '2025-05-13T06:41:31.000000Z', - ], - [ - 'id' => 476, - 'soldier_id' => 109, - 'constraint_type' => 'School', - 'start_date' => '2025-07-02 05:06:20', - 'end_date' => '2025-07-02 08:06:20', - 'created_at' => '2025-05-13T06:41:31.000000Z', - 'updated_at' => '2025-05-13T06:41:31.000000Z', - ], - [ - 'id' => 477, - 'soldier_id' => 130, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-07 10:56:26', - 'end_date' => '2025-07-07 12:56:26', - 'created_at' => '2025-05-13T06:41:31.000000Z', - 'updated_at' => '2025-05-13T06:41:31.000000Z', - ], - [ - 'id' => 478, - 'soldier_id' => 130, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-13 01:25:24', - 'end_date' => '2025-07-13 04:25:24', - 'created_at' => '2025-05-13T06:41:31.000000Z', - 'updated_at' => '2025-05-13T06:41:31.000000Z', - ], - [ - 'id' => 479, - 'soldier_id' => 130, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-20 09:49:01', - 'end_date' => '2025-07-20 14:49:01', - 'created_at' => '2025-05-13T06:41:31.000000Z', - 'updated_at' => '2025-05-13T06:41:31.000000Z', - ], - [ - 'id' => 480, - 'soldier_id' => 130, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-09 16:46:56', - 'end_date' => '2025-07-09 18:46:56', - 'created_at' => '2025-05-13T06:41:31.000000Z', - 'updated_at' => '2025-05-13T06:41:31.000000Z', - ], - [ - 'id' => 481, - 'soldier_id' => 130, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-21 13:20:50', - 'end_date' => '2025-07-21 14:20:50', - 'created_at' => '2025-05-13T06:41:31.000000Z', - 'updated_at' => '2025-05-13T06:41:31.000000Z', - ], - [ - 'id' => 482, - 'soldier_id' => 130, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-29 13:38:14', - 'end_date' => '2025-07-29 15:38:14', - 'created_at' => '2025-05-13T06:41:31.000000Z', - 'updated_at' => '2025-05-13T06:41:31.000000Z', - ], - [ - 'id' => 483, - 'soldier_id' => 130, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-02 11:08:56', - 'end_date' => '2025-07-02 12:08:56', - 'created_at' => '2025-05-13T06:41:31.000000Z', - 'updated_at' => '2025-05-13T06:41:31.000000Z', - ], - [ - 'id' => 484, - 'soldier_id' => 130, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-04 15:52:20', - 'end_date' => '2025-07-04 19:52:20', - 'created_at' => '2025-05-13T06:41:31.000000Z', - 'updated_at' => '2025-05-13T06:41:31.000000Z', - ], - [ - 'id' => 485, - 'soldier_id' => 130, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-29 06:41:51', - 'end_date' => '2025-07-29 11:41:51', - 'created_at' => '2025-05-13T06:41:31.000000Z', - 'updated_at' => '2025-05-13T06:41:31.000000Z', - ], - [ - 'id' => 486, - 'soldier_id' => 130, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-19 16:43:02', - 'end_date' => '2025-07-19 18:43:02', - 'created_at' => '2025-05-13T06:41:31.000000Z', - 'updated_at' => '2025-05-13T06:41:31.000000Z', - ], - [ - 'id' => 487, - 'soldier_id' => 130, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-09 20:42:14', - 'end_date' => '2025-07-10 00:42:14', - 'created_at' => '2025-05-13T06:41:31.000000Z', - 'updated_at' => '2025-05-13T06:41:31.000000Z', - ], - [ - 'id' => 488, - 'soldier_id' => 130, - 'constraint_type' => 'School', - 'start_date' => '2025-07-21 09:38:02', - 'end_date' => '2025-07-21 10:38:02', - 'created_at' => '2025-05-13T06:41:31.000000Z', - 'updated_at' => '2025-05-13T06:41:31.000000Z', - ], - [ - 'id' => 489, - 'soldier_id' => 130, - 'constraint_type' => 'School', - 'start_date' => '2025-07-08 07:15:07', - 'end_date' => '2025-07-08 09:15:07', - 'created_at' => '2025-05-13T06:41:31.000000Z', - 'updated_at' => '2025-05-13T06:41:31.000000Z', - ], - [ - 'id' => 490, - 'soldier_id' => 130, - 'constraint_type' => 'School', - 'start_date' => '2025-07-29 18:18:40', - 'end_date' => '2025-07-29 23:18:40', - 'created_at' => '2025-05-13T06:41:31.000000Z', - 'updated_at' => '2025-05-13T06:41:31.000000Z', - ], - [ - 'id' => 491, - 'soldier_id' => 130, - 'constraint_type' => 'School', - 'start_date' => '2025-07-21 23:44:16', - 'end_date' => '2025-07-22 00:44:16', - 'created_at' => '2025-05-13T06:41:31.000000Z', - 'updated_at' => '2025-05-13T06:41:31.000000Z', - ], - [ - 'id' => 492, - 'soldier_id' => 162, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-14 12:54:34', - 'end_date' => '2025-07-14 13:54:34', - 'created_at' => '2025-05-13T06:41:31.000000Z', - 'updated_at' => '2025-05-13T06:41:31.000000Z', - ], - [ - 'id' => 493, - 'soldier_id' => 162, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-04 05:50:40', - 'end_date' => '2025-07-04 10:50:40', - 'created_at' => '2025-05-13T06:41:31.000000Z', - 'updated_at' => '2025-05-13T06:41:31.000000Z', - ], - [ - 'id' => 494, - 'soldier_id' => 162, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-26 03:34:04', - 'end_date' => '2025-07-26 06:34:04', - 'created_at' => '2025-05-13T06:41:31.000000Z', - 'updated_at' => '2025-05-13T06:41:31.000000Z', - ], - [ - 'id' => 495, - 'soldier_id' => 162, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-30 07:03:25', - 'end_date' => '2025-07-30 10:03:25', - 'created_at' => '2025-05-13T06:41:31.000000Z', - 'updated_at' => '2025-05-13T06:41:31.000000Z', - ], - [ - 'id' => 496, - 'soldier_id' => 162, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-03 10:01:21', - 'end_date' => '2025-07-03 14:01:21', - 'created_at' => '2025-05-13T06:41:31.000000Z', - 'updated_at' => '2025-05-13T06:41:31.000000Z', - ], - [ - 'id' => 497, - 'soldier_id' => 162, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-01 20:11:43', - 'end_date' => '2025-07-01 23:11:43', - 'created_at' => '2025-05-13T06:41:31.000000Z', - 'updated_at' => '2025-05-13T06:41:31.000000Z', - ], - [ - 'id' => 498, - 'soldier_id' => 162, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-20 13:46:12', - 'end_date' => '2025-07-20 17:46:12', - 'created_at' => '2025-05-13T06:41:31.000000Z', - 'updated_at' => '2025-05-13T06:41:31.000000Z', - ], - [ - 'id' => 499, - 'soldier_id' => 162, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-01 20:52:08', - 'end_date' => '2025-07-01 23:52:08', - 'created_at' => '2025-05-13T06:41:31.000000Z', - 'updated_at' => '2025-05-13T06:41:31.000000Z', - ], - [ - 'id' => 500, - 'soldier_id' => 162, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-24 02:15:00', - 'end_date' => '2025-07-24 06:15:00', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 501, - 'soldier_id' => 162, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-23 20:31:06', - 'end_date' => '2025-07-24 01:31:06', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 502, - 'soldier_id' => 162, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-05 20:54:30', - 'end_date' => '2025-07-05 21:54:30', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 503, - 'soldier_id' => 162, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-01 08:37:43', - 'end_date' => '2025-07-01 13:37:43', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 504, - 'soldier_id' => 162, - 'constraint_type' => 'School', - 'start_date' => '2025-07-19 02:13:35', - 'end_date' => '2025-07-19 03:13:35', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 505, - 'soldier_id' => 162, - 'constraint_type' => 'School', - 'start_date' => '2025-07-17 15:11:34', - 'end_date' => '2025-07-17 16:11:34', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 506, - 'soldier_id' => 25, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-25 05:31:48', - 'end_date' => '2025-07-25 08:31:48', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 507, - 'soldier_id' => 25, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-12 07:03:28', - 'end_date' => '2025-07-12 10:03:28', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 508, - 'soldier_id' => 25, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-02 08:18:36', - 'end_date' => '2025-07-02 13:18:36', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 509, - 'soldier_id' => 25, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-10 05:56:43', - 'end_date' => '2025-07-10 08:56:43', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 510, - 'soldier_id' => 25, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-27 20:08:20', - 'end_date' => '2025-07-27 23:08:20', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 511, - 'soldier_id' => 25, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-17 18:10:50', - 'end_date' => '2025-07-17 22:10:50', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 512, - 'soldier_id' => 96, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-20 10:13:07', - 'end_date' => '2025-07-20 11:13:07', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 513, - 'soldier_id' => 96, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-06 11:35:32', - 'end_date' => '2025-07-06 15:35:32', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 514, - 'soldier_id' => 96, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-13 09:54:24', - 'end_date' => '2025-07-13 14:54:24', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 515, - 'soldier_id' => 96, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-14 10:13:51', - 'end_date' => '2025-07-14 12:13:51', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 516, - 'soldier_id' => 96, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-12 20:14:26', - 'end_date' => '2025-07-13 01:14:26', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 517, - 'soldier_id' => 96, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-30 22:46:14', - 'end_date' => '2025-08-01 01:46:14', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 518, - 'soldier_id' => 96, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-25 20:00:35', - 'end_date' => '2025-07-25 21:00:35', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 519, - 'soldier_id' => 96, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-19 20:10:08', - 'end_date' => '2025-07-19 22:10:08', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 520, - 'soldier_id' => 96, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-17 18:04:55', - 'end_date' => '2025-07-17 22:04:55', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 521, - 'soldier_id' => 96, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-17 16:52:46', - 'end_date' => '2025-07-17 21:52:46', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 522, - 'soldier_id' => 96, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-27 14:31:14', - 'end_date' => '2025-07-27 17:31:14', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 523, - 'soldier_id' => 96, - 'constraint_type' => 'School', - 'start_date' => '2025-07-01 06:26:38', - 'end_date' => '2025-07-01 08:26:38', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 524, - 'soldier_id' => 96, - 'constraint_type' => 'School', - 'start_date' => '2025-07-02 17:50:01', - 'end_date' => '2025-07-02 20:50:01', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 525, - 'soldier_id' => 96, - 'constraint_type' => 'School', - 'start_date' => '2025-07-08 10:39:24', - 'end_date' => '2025-07-08 14:39:24', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 526, - 'soldier_id' => 96, - 'constraint_type' => 'School', - 'start_date' => '2025-07-10 06:55:33', - 'end_date' => '2025-07-10 10:55:33', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 527, - 'soldier_id' => 157, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-20 18:24:33', - 'end_date' => '2025-07-20 23:24:33', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 528, - 'soldier_id' => 157, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-07 14:27:04', - 'end_date' => '2025-07-07 16:27:04', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 529, - 'soldier_id' => 157, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-11 01:17:52', - 'end_date' => '2025-07-11 03:17:52', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 530, - 'soldier_id' => 157, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-23 10:38:02', - 'end_date' => '2025-07-23 13:38:02', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 531, - 'soldier_id' => 157, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-30 01:48:23', - 'end_date' => '2025-07-30 04:48:23', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 532, - 'soldier_id' => 157, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-11 23:10:05', - 'end_date' => '2025-07-12 02:10:05', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 533, - 'soldier_id' => 157, - 'constraint_type' => 'School', - 'start_date' => '2025-07-06 22:16:02', - 'end_date' => '2025-07-07 00:16:02', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 534, - 'soldier_id' => 157, - 'constraint_type' => 'School', - 'start_date' => '2025-07-06 23:54:24', - 'end_date' => '2025-07-07 01:54:24', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 535, - 'soldier_id' => 157, - 'constraint_type' => 'School', - 'start_date' => '2025-07-19 06:24:31', - 'end_date' => '2025-07-19 07:24:31', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 536, - 'soldier_id' => 157, - 'constraint_type' => 'School', - 'start_date' => '2025-07-14 01:19:39', - 'end_date' => '2025-07-14 04:19:39', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 537, - 'soldier_id' => 171, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-27 05:59:26', - 'end_date' => '2025-07-27 07:59:26', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 538, - 'soldier_id' => 171, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-27 18:20:50', - 'end_date' => '2025-07-27 23:20:50', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 539, - 'soldier_id' => 171, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-17 17:51:40', - 'end_date' => '2025-07-17 20:51:40', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 540, - 'soldier_id' => 171, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-10 21:31:09', - 'end_date' => '2025-07-11 01:31:09', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 541, - 'soldier_id' => 171, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-29 12:53:18', - 'end_date' => '2025-07-29 16:53:18', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 542, - 'soldier_id' => 171, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-09 22:06:36', - 'end_date' => '2025-07-09 23:06:36', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 543, - 'soldier_id' => 171, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-18 07:55:21', - 'end_date' => '2025-07-18 10:55:21', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 544, - 'soldier_id' => 171, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-14 05:48:11', - 'end_date' => '2025-07-14 10:48:11', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 545, - 'soldier_id' => 171, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-29 20:30:40', - 'end_date' => '2025-07-29 21:30:40', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 546, - 'soldier_id' => 171, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-03 10:03:05', - 'end_date' => '2025-07-03 14:03:05', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 547, - 'soldier_id' => 171, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-28 13:05:40', - 'end_date' => '2025-07-28 18:05:40', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 548, - 'soldier_id' => 171, - 'constraint_type' => 'School', - 'start_date' => '2025-07-27 13:38:03', - 'end_date' => '2025-07-27 18:38:03', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 549, - 'soldier_id' => 171, - 'constraint_type' => 'School', - 'start_date' => '2025-07-05 11:39:54', - 'end_date' => '2025-07-05 12:39:54', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 550, - 'soldier_id' => 171, - 'constraint_type' => 'School', - 'start_date' => '2025-07-16 01:39:40', - 'end_date' => '2025-07-16 02:39:40', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 551, - 'soldier_id' => 54, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-20 15:31:08', - 'end_date' => '2025-07-20 16:31:08', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 552, - 'soldier_id' => 54, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-14 18:50:56', - 'end_date' => '2025-07-14 22:50:56', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 553, - 'soldier_id' => 54, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-28 15:48:35', - 'end_date' => '2025-07-28 17:48:35', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 554, - 'soldier_id' => 54, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-26 20:40:45', - 'end_date' => '2025-07-26 23:40:45', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 555, - 'soldier_id' => 54, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-12 20:39:20', - 'end_date' => '2025-07-12 22:39:20', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 556, - 'soldier_id' => 54, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-08 09:40:15', - 'end_date' => '2025-07-08 13:40:15', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 557, - 'soldier_id' => 54, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-30 10:40:27', - 'end_date' => '2025-07-30 15:40:27', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 558, - 'soldier_id' => 54, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-24 07:22:46', - 'end_date' => '2025-07-24 08:22:46', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 559, - 'soldier_id' => 54, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-10 17:29:25', - 'end_date' => '2025-07-10 18:29:25', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 560, - 'soldier_id' => 54, - 'constraint_type' => 'School', - 'start_date' => '2025-07-17 14:13:28', - 'end_date' => '2025-07-17 16:13:28', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 561, - 'soldier_id' => 54, - 'constraint_type' => 'School', - 'start_date' => '2025-07-02 11:00:26', - 'end_date' => '2025-07-02 13:00:26', - 'created_at' => '2025-05-13T06:41:32.000000Z', - 'updated_at' => '2025-05-13T06:41:32.000000Z', - ], - [ - 'id' => 562, - 'soldier_id' => 29, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-27 11:48:00', - 'end_date' => '2025-07-27 16:48:00', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 563, - 'soldier_id' => 29, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-01 15:33:10', - 'end_date' => '2025-07-01 20:33:10', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 564, - 'soldier_id' => 29, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-27 12:26:39', - 'end_date' => '2025-07-27 16:26:39', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 565, - 'soldier_id' => 29, - 'constraint_type' => 'School', - 'start_date' => '2025-07-03 04:37:28', - 'end_date' => '2025-07-03 08:37:28', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 566, - 'soldier_id' => 29, - 'constraint_type' => 'School', - 'start_date' => '2025-07-26 15:55:40', - 'end_date' => '2025-07-26 18:55:40', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 567, - 'soldier_id' => 66, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-07 21:02:44', - 'end_date' => '2025-07-08 01:02:44', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 568, - 'soldier_id' => 66, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-28 15:51:33', - 'end_date' => '2025-07-28 17:51:33', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 569, - 'soldier_id' => 66, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-05 08:11:12', - 'end_date' => '2025-07-05 10:11:12', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 570, - 'soldier_id' => 66, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-09 09:29:23', - 'end_date' => '2025-07-09 13:29:23', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 571, - 'soldier_id' => 66, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-02 07:29:51', - 'end_date' => '2025-07-02 09:29:51', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 572, - 'soldier_id' => 66, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-24 04:02:34', - 'end_date' => '2025-07-24 05:02:34', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 573, - 'soldier_id' => 66, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-27 02:38:04', - 'end_date' => '2025-07-27 07:38:04', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 574, - 'soldier_id' => 66, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-01 21:38:35', - 'end_date' => '2025-07-01 22:38:35', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 575, - 'soldier_id' => 66, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-19 04:29:34', - 'end_date' => '2025-07-19 08:29:34', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 576, - 'soldier_id' => 66, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-14 00:30:15', - 'end_date' => '2025-07-14 01:30:15', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 577, - 'soldier_id' => 66, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-27 01:55:48', - 'end_date' => '2025-07-27 04:55:48', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 578, - 'soldier_id' => 66, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-17 04:58:18', - 'end_date' => '2025-07-17 07:58:18', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 579, - 'soldier_id' => 66, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-01 09:19:24', - 'end_date' => '2025-07-01 14:19:24', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 580, - 'soldier_id' => 66, - 'constraint_type' => 'School', - 'start_date' => '2025-07-27 20:20:29', - 'end_date' => '2025-07-28 01:20:29', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 581, - 'soldier_id' => 33, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-28 18:33:26', - 'end_date' => '2025-07-28 22:33:26', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 582, - 'soldier_id' => 33, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-09 18:51:01', - 'end_date' => '2025-07-09 20:51:01', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 583, - 'soldier_id' => 33, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-13 20:06:14', - 'end_date' => '2025-07-13 23:06:14', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 584, - 'soldier_id' => 33, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-25 20:56:43', - 'end_date' => '2025-07-25 22:56:43', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 585, - 'soldier_id' => 33, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-09 20:06:21', - 'end_date' => '2025-07-09 22:06:21', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 586, - 'soldier_id' => 33, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-29 17:37:11', - 'end_date' => '2025-07-29 22:37:11', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 587, - 'soldier_id' => 33, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-22 02:43:28', - 'end_date' => '2025-07-22 07:43:28', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 588, - 'soldier_id' => 33, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-11 17:44:31', - 'end_date' => '2025-07-11 20:44:31', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 589, - 'soldier_id' => 33, - 'constraint_type' => 'School', - 'start_date' => '2025-07-03 10:46:28', - 'end_date' => '2025-07-03 12:46:28', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 590, - 'soldier_id' => 33, - 'constraint_type' => 'School', - 'start_date' => '2025-07-17 08:37:03', - 'end_date' => '2025-07-17 13:37:03', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 591, - 'soldier_id' => 33, - 'constraint_type' => 'School', - 'start_date' => '2025-07-29 03:29:32', - 'end_date' => '2025-07-29 08:29:32', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 592, - 'soldier_id' => 159, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-22 03:42:00', - 'end_date' => '2025-07-22 04:42:00', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 593, - 'soldier_id' => 159, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-30 06:57:42', - 'end_date' => '2025-07-30 07:57:42', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 594, - 'soldier_id' => 159, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-12 20:28:38', - 'end_date' => '2025-07-12 21:28:38', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 595, - 'soldier_id' => 159, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-26 05:42:57', - 'end_date' => '2025-07-26 07:42:57', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 596, - 'soldier_id' => 159, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-18 07:53:02', - 'end_date' => '2025-07-18 08:53:02', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 597, - 'soldier_id' => 159, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-24 07:08:23', - 'end_date' => '2025-07-24 11:08:23', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 598, - 'soldier_id' => 159, - 'constraint_type' => 'School', - 'start_date' => '2025-07-09 16:18:48', - 'end_date' => '2025-07-09 21:18:48', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 599, - 'soldier_id' => 159, - 'constraint_type' => 'School', - 'start_date' => '2025-07-15 22:20:06', - 'end_date' => '2025-07-16 02:20:06', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 600, - 'soldier_id' => 159, - 'constraint_type' => 'School', - 'start_date' => '2025-07-09 11:27:26', - 'end_date' => '2025-07-09 13:27:26', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 601, - 'soldier_id' => 135, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-28 15:38:45', - 'end_date' => '2025-07-28 16:38:45', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 602, - 'soldier_id' => 135, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-04 22:52:47', - 'end_date' => '2025-07-05 00:52:47', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 603, - 'soldier_id' => 135, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-21 08:26:08', - 'end_date' => '2025-07-21 11:26:08', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 604, - 'soldier_id' => 135, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-21 22:41:06', - 'end_date' => '2025-07-22 00:41:06', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 605, - 'soldier_id' => 135, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-11 20:57:16', - 'end_date' => '2025-07-11 22:57:16', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 606, - 'soldier_id' => 135, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-30 04:15:38', - 'end_date' => '2025-07-30 08:15:38', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 607, - 'soldier_id' => 135, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-19 21:10:20', - 'end_date' => '2025-07-20 01:10:20', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 608, - 'soldier_id' => 135, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-28 06:08:16', - 'end_date' => '2025-07-28 11:08:16', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 609, - 'soldier_id' => 135, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-16 19:38:59', - 'end_date' => '2025-07-17 00:38:59', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 610, - 'soldier_id' => 135, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-22 23:10:34', - 'end_date' => '2025-07-23 00:10:34', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 611, - 'soldier_id' => 135, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-07 07:28:13', - 'end_date' => '2025-07-07 08:28:13', - 'created_at' => '2025-05-13T06:41:33.000000Z', - 'updated_at' => '2025-05-13T06:41:33.000000Z', - ], - [ - 'id' => 612, - 'soldier_id' => 1, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-27 09:18:25', - 'end_date' => '2025-07-27 13:18:25', - 'created_at' => '2025-05-13T06:41:34.000000Z', - 'updated_at' => '2025-05-13T06:41:34.000000Z', - ], - [ - 'id' => 613, - 'soldier_id' => 1, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-04 16:09:48', - 'end_date' => '2025-07-04 19:09:48', - 'created_at' => '2025-05-13T06:41:34.000000Z', - 'updated_at' => '2025-05-13T06:41:34.000000Z', - ], - [ - 'id' => 614, - 'soldier_id' => 1, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-16 08:34:11', - 'end_date' => '2025-07-16 13:34:11', - 'created_at' => '2025-05-13T06:41:34.000000Z', - 'updated_at' => '2025-05-13T06:41:34.000000Z', - ], - [ - 'id' => 615, - 'soldier_id' => 1, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-06 15:17:21', - 'end_date' => '2025-07-06 16:17:21', - 'created_at' => '2025-05-13T06:41:34.000000Z', - 'updated_at' => '2025-05-13T06:41:34.000000Z', - ], - [ - 'id' => 616, - 'soldier_id' => 1, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-28 20:22:06', - 'end_date' => '2025-07-28 22:22:06', - 'created_at' => '2025-05-13T06:41:34.000000Z', - 'updated_at' => '2025-05-13T06:41:34.000000Z', - ], - [ - 'id' => 617, - 'soldier_id' => 1, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-20 20:41:30', - 'end_date' => '2025-07-20 21:41:30', - 'created_at' => '2025-05-13T06:41:34.000000Z', - 'updated_at' => '2025-05-13T06:41:34.000000Z', - ], - [ - 'id' => 618, - 'soldier_id' => 1, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-01 12:18:08', - 'end_date' => '2025-07-01 15:18:08', - 'created_at' => '2025-05-13T06:41:34.000000Z', - 'updated_at' => '2025-05-13T06:41:34.000000Z', - ], - [ - 'id' => 619, - 'soldier_id' => 1, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-12 15:38:35', - 'end_date' => '2025-07-12 18:38:35', - 'created_at' => '2025-05-13T06:41:34.000000Z', - 'updated_at' => '2025-05-13T06:41:34.000000Z', - ], - [ - 'id' => 620, - 'soldier_id' => 1, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-17 23:25:23', - 'end_date' => '2025-07-18 04:25:23', - 'created_at' => '2025-05-13T06:41:34.000000Z', - 'updated_at' => '2025-05-13T06:41:34.000000Z', - ], - [ - 'id' => 621, - 'soldier_id' => 1, - 'constraint_type' => 'School', - 'start_date' => '2025-07-02 12:44:14', - 'end_date' => '2025-07-02 13:44:14', - 'created_at' => '2025-05-13T06:41:34.000000Z', - 'updated_at' => '2025-05-13T06:41:34.000000Z', - ], - [ - 'id' => 622, - 'soldier_id' => 107, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-21 05:07:48', - 'end_date' => '2025-07-21 08:07:48', - 'created_at' => '2025-05-13T06:41:34.000000Z', - 'updated_at' => '2025-05-13T06:41:34.000000Z', - ], - [ - 'id' => 623, - 'soldier_id' => 107, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-15 21:20:24', - 'end_date' => '2025-07-16 00:20:24', - 'created_at' => '2025-05-13T06:41:34.000000Z', - 'updated_at' => '2025-05-13T06:41:34.000000Z', - ], - [ - 'id' => 624, - 'soldier_id' => 107, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-20 05:42:59', - 'end_date' => '2025-07-20 06:42:59', - 'created_at' => '2025-05-13T06:41:34.000000Z', - 'updated_at' => '2025-05-13T06:41:34.000000Z', - ], - [ - 'id' => 625, - 'soldier_id' => 107, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-07 20:53:59', - 'end_date' => '2025-07-08 00:53:59', - 'created_at' => '2025-05-13T06:41:34.000000Z', - 'updated_at' => '2025-05-13T06:41:34.000000Z', - ], - [ - 'id' => 626, - 'soldier_id' => 107, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-19 21:49:52', - 'end_date' => '2025-07-20 01:49:52', - 'created_at' => '2025-05-13T06:41:34.000000Z', - 'updated_at' => '2025-05-13T06:41:34.000000Z', - ], - [ - 'id' => 627, - 'soldier_id' => 107, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-10 22:03:42', - 'end_date' => '2025-07-11 00:03:42', - 'created_at' => '2025-05-13T06:41:34.000000Z', - 'updated_at' => '2025-05-13T06:41:34.000000Z', - ], - [ - 'id' => 628, - 'soldier_id' => 107, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-26 04:09:27', - 'end_date' => '2025-07-26 09:09:27', - 'created_at' => '2025-05-13T06:41:34.000000Z', - 'updated_at' => '2025-05-13T06:41:34.000000Z', - ], - [ - 'id' => 629, - 'soldier_id' => 107, - 'constraint_type' => 'School', - 'start_date' => '2025-07-22 19:35:57', - 'end_date' => '2025-07-22 23:35:57', - 'created_at' => '2025-05-13T06:41:34.000000Z', - 'updated_at' => '2025-05-13T06:41:34.000000Z', - ], - [ - 'id' => 630, - 'soldier_id' => 38, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-14 00:47:06', - 'end_date' => '2025-07-14 05:47:06', - 'created_at' => '2025-05-13T06:41:34.000000Z', - 'updated_at' => '2025-05-13T06:41:34.000000Z', - ], - [ - 'id' => 631, - 'soldier_id' => 38, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-13 16:11:12', - 'end_date' => '2025-07-13 20:11:12', - 'created_at' => '2025-05-13T06:41:34.000000Z', - 'updated_at' => '2025-05-13T06:41:34.000000Z', - ], - [ - 'id' => 632, - 'soldier_id' => 38, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-22 04:51:56', - 'end_date' => '2025-07-22 05:51:56', - 'created_at' => '2025-05-13T06:41:34.000000Z', - 'updated_at' => '2025-05-13T06:41:34.000000Z', - ], - [ - 'id' => 633, - 'soldier_id' => 38, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-06 20:28:15', - 'end_date' => '2025-07-07 01:28:15', - 'created_at' => '2025-05-13T06:41:34.000000Z', - 'updated_at' => '2025-05-13T06:41:34.000000Z', - ], - [ - 'id' => 634, - 'soldier_id' => 38, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-16 20:19:41', - 'end_date' => '2025-07-16 21:19:41', - 'created_at' => '2025-05-13T06:41:34.000000Z', - 'updated_at' => '2025-05-13T06:41:34.000000Z', - ], - [ - 'id' => 635, - 'soldier_id' => 38, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-09 00:59:53', - 'end_date' => '2025-07-09 02:59:53', - 'created_at' => '2025-05-13T06:41:34.000000Z', - 'updated_at' => '2025-05-13T06:41:34.000000Z', - ], - [ - 'id' => 636, - 'soldier_id' => 38, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-02 21:11:08', - 'end_date' => '2025-07-02 23:11:08', - 'created_at' => '2025-05-13T06:41:34.000000Z', - 'updated_at' => '2025-05-13T06:41:34.000000Z', - ], - [ - 'id' => 637, - 'soldier_id' => 38, - 'constraint_type' => 'School', - 'start_date' => '2025-07-29 17:47:24', - 'end_date' => '2025-07-29 19:47:24', - 'created_at' => '2025-05-13T06:41:34.000000Z', - 'updated_at' => '2025-05-13T06:41:34.000000Z', - ], - [ - 'id' => 638, - 'soldier_id' => 38, - 'constraint_type' => 'School', - 'start_date' => '2025-07-16 19:44:47', - 'end_date' => '2025-07-16 20:44:47', - 'created_at' => '2025-05-13T06:41:34.000000Z', - 'updated_at' => '2025-05-13T06:41:34.000000Z', - ], - [ - 'id' => 639, - 'soldier_id' => 98, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-13 03:58:35', - 'end_date' => '2025-07-13 06:58:35', - 'created_at' => '2025-05-13T06:41:34.000000Z', - 'updated_at' => '2025-05-13T06:41:34.000000Z', - ], - [ - 'id' => 640, - 'soldier_id' => 98, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-26 12:23:09', - 'end_date' => '2025-07-26 15:23:09', - 'created_at' => '2025-05-13T06:41:34.000000Z', - 'updated_at' => '2025-05-13T06:41:34.000000Z', - ], - [ - 'id' => 641, - 'soldier_id' => 161, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-07 21:54:58', - 'end_date' => '2025-07-08 02:54:58', - 'created_at' => '2025-05-13T06:41:34.000000Z', - 'updated_at' => '2025-05-13T06:41:34.000000Z', - ], - [ - 'id' => 642, - 'soldier_id' => 161, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-17 17:35:06', - 'end_date' => '2025-07-17 20:35:06', - 'created_at' => '2025-05-13T06:41:34.000000Z', - 'updated_at' => '2025-05-13T06:41:34.000000Z', - ], - [ - 'id' => 643, - 'soldier_id' => 161, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-08 04:06:20', - 'end_date' => '2025-07-08 08:06:20', - 'created_at' => '2025-05-13T06:41:34.000000Z', - 'updated_at' => '2025-05-13T06:41:34.000000Z', - ], - [ - 'id' => 644, - 'soldier_id' => 161, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-03 03:45:12', - 'end_date' => '2025-07-03 07:45:12', - 'created_at' => '2025-05-13T06:41:34.000000Z', - 'updated_at' => '2025-05-13T06:41:34.000000Z', - ], - [ - 'id' => 645, - 'soldier_id' => 161, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-07 20:22:29', - 'end_date' => '2025-07-07 21:22:29', - 'created_at' => '2025-05-13T06:41:34.000000Z', - 'updated_at' => '2025-05-13T06:41:34.000000Z', - ], - [ - 'id' => 646, - 'soldier_id' => 161, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-05 20:41:03', - 'end_date' => '2025-07-05 21:41:03', - 'created_at' => '2025-05-13T06:41:34.000000Z', - 'updated_at' => '2025-05-13T06:41:34.000000Z', - ], - [ - 'id' => 647, - 'soldier_id' => 161, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-22 19:24:20', - 'end_date' => '2025-07-22 20:24:20', - 'created_at' => '2025-05-13T06:41:34.000000Z', - 'updated_at' => '2025-05-13T06:41:34.000000Z', - ], - [ - 'id' => 648, - 'soldier_id' => 161, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-14 11:12:03', - 'end_date' => '2025-07-14 12:12:03', - 'created_at' => '2025-05-13T06:41:34.000000Z', - 'updated_at' => '2025-05-13T06:41:34.000000Z', - ], - [ - 'id' => 649, - 'soldier_id' => 63, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-13 14:09:58', - 'end_date' => '2025-07-13 19:09:58', - 'created_at' => '2025-05-13T06:41:34.000000Z', - 'updated_at' => '2025-05-13T06:41:34.000000Z', - ], - [ - 'id' => 650, - 'soldier_id' => 63, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-14 00:53:13', - 'end_date' => '2025-07-14 01:53:13', - 'created_at' => '2025-05-13T06:41:34.000000Z', - 'updated_at' => '2025-05-13T06:41:34.000000Z', - ], - [ - 'id' => 651, - 'soldier_id' => 63, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-01 18:40:16', - 'end_date' => '2025-07-01 19:40:16', - 'created_at' => '2025-05-13T06:41:34.000000Z', - 'updated_at' => '2025-05-13T06:41:34.000000Z', - ], - [ - 'id' => 652, - 'soldier_id' => 63, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-27 18:38:32', - 'end_date' => '2025-07-27 21:38:32', - 'created_at' => '2025-05-13T06:41:34.000000Z', - 'updated_at' => '2025-05-13T06:41:34.000000Z', - ], - [ - 'id' => 653, - 'soldier_id' => 63, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-15 06:53:47', - 'end_date' => '2025-07-15 09:53:47', - 'created_at' => '2025-05-13T06:41:34.000000Z', - 'updated_at' => '2025-05-13T06:41:34.000000Z', - ], - [ - 'id' => 654, - 'soldier_id' => 63, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-27 20:47:29', - 'end_date' => '2025-07-27 21:47:29', - 'created_at' => '2025-05-13T06:41:34.000000Z', - 'updated_at' => '2025-05-13T06:41:34.000000Z', - ], - [ - 'id' => 655, - 'soldier_id' => 63, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-03 21:25:39', - 'end_date' => '2025-07-04 02:25:39', - 'created_at' => '2025-05-13T06:41:34.000000Z', - 'updated_at' => '2025-05-13T06:41:34.000000Z', - ], - [ - 'id' => 656, - 'soldier_id' => 63, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-19 13:56:22', - 'end_date' => '2025-07-19 14:56:22', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 657, - 'soldier_id' => 63, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-03 11:33:32', - 'end_date' => '2025-07-03 14:33:32', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 658, - 'soldier_id' => 63, - 'constraint_type' => 'School', - 'start_date' => '2025-07-11 17:47:03', - 'end_date' => '2025-07-11 21:47:03', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 659, - 'soldier_id' => 63, - 'constraint_type' => 'School', - 'start_date' => '2025-07-21 13:30:24', - 'end_date' => '2025-07-21 16:30:24', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 660, - 'soldier_id' => 63, - 'constraint_type' => 'School', - 'start_date' => '2025-07-13 17:23:50', - 'end_date' => '2025-07-13 19:23:50', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 661, - 'soldier_id' => 63, - 'constraint_type' => 'School', - 'start_date' => '2025-07-27 20:10:43', - 'end_date' => '2025-07-27 21:10:43', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 662, - 'soldier_id' => 39, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-06 09:51:32', - 'end_date' => '2025-07-06 10:51:32', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 663, - 'soldier_id' => 39, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-29 02:48:03', - 'end_date' => '2025-07-29 04:48:03', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 664, - 'soldier_id' => 39, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-16 01:10:20', - 'end_date' => '2025-07-16 04:10:20', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 665, - 'soldier_id' => 39, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-08 21:31:40', - 'end_date' => '2025-07-09 02:31:40', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 666, - 'soldier_id' => 39, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-15 09:11:31', - 'end_date' => '2025-07-15 11:11:31', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 667, - 'soldier_id' => 39, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-13 01:48:27', - 'end_date' => '2025-07-13 03:48:27', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 668, - 'soldier_id' => 39, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-03 20:52:47', - 'end_date' => '2025-07-04 01:52:47', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 669, - 'soldier_id' => 39, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-04 04:12:31', - 'end_date' => '2025-07-04 07:12:31', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 670, - 'soldier_id' => 39, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-12 15:44:09', - 'end_date' => '2025-07-12 20:44:09', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 671, - 'soldier_id' => 39, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-19 07:10:10', - 'end_date' => '2025-07-19 12:10:10', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 672, - 'soldier_id' => 39, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-30 00:16:37', - 'end_date' => '2025-07-30 01:16:37', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 673, - 'soldier_id' => 39, - 'constraint_type' => 'School', - 'start_date' => '2025-07-14 01:23:47', - 'end_date' => '2025-07-14 05:23:47', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 674, - 'soldier_id' => 39, - 'constraint_type' => 'School', - 'start_date' => '2025-07-10 12:34:39', - 'end_date' => '2025-07-10 17:34:39', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 675, - 'soldier_id' => 39, - 'constraint_type' => 'School', - 'start_date' => '2025-07-06 18:37:31', - 'end_date' => '2025-07-06 19:37:31', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 676, - 'soldier_id' => 39, - 'constraint_type' => 'School', - 'start_date' => '2025-07-05 12:12:10', - 'end_date' => '2025-07-05 17:12:10', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 677, - 'soldier_id' => 140, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-20 02:18:16', - 'end_date' => '2025-07-20 05:18:16', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 678, - 'soldier_id' => 140, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-18 13:56:09', - 'end_date' => '2025-07-18 14:56:09', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 679, - 'soldier_id' => 140, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-02 01:49:51', - 'end_date' => '2025-07-02 04:49:51', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 680, - 'soldier_id' => 140, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-18 21:14:12', - 'end_date' => '2025-07-19 00:14:12', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 681, - 'soldier_id' => 140, - 'constraint_type' => 'School', - 'start_date' => '2025-07-28 22:07:28', - 'end_date' => '2025-07-29 00:07:28', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 682, - 'soldier_id' => 140, - 'constraint_type' => 'School', - 'start_date' => '2025-07-08 06:18:45', - 'end_date' => '2025-07-08 10:18:45', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 683, - 'soldier_id' => 140, - 'constraint_type' => 'School', - 'start_date' => '2025-07-10 08:47:50', - 'end_date' => '2025-07-10 13:47:50', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 684, - 'soldier_id' => 140, - 'constraint_type' => 'School', - 'start_date' => '2025-07-22 22:51:43', - 'end_date' => '2025-07-23 01:51:43', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 685, - 'soldier_id' => 95, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-20 09:06:15', - 'end_date' => '2025-07-20 14:06:15', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 686, - 'soldier_id' => 95, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-21 19:40:21', - 'end_date' => '2025-07-22 00:40:21', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 687, - 'soldier_id' => 95, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-09 14:47:55', - 'end_date' => '2025-07-09 16:47:55', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 688, - 'soldier_id' => 95, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-04 15:45:30', - 'end_date' => '2025-07-04 18:45:30', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 689, - 'soldier_id' => 95, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-09 20:39:08', - 'end_date' => '2025-07-10 01:39:08', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 690, - 'soldier_id' => 95, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-23 02:49:20', - 'end_date' => '2025-07-23 04:49:20', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 691, - 'soldier_id' => 95, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-05 04:51:29', - 'end_date' => '2025-07-05 06:51:29', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 692, - 'soldier_id' => 95, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-22 11:15:56', - 'end_date' => '2025-07-22 13:15:56', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 693, - 'soldier_id' => 95, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-29 14:56:40', - 'end_date' => '2025-07-29 16:56:40', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 694, - 'soldier_id' => 95, - 'constraint_type' => 'School', - 'start_date' => '2025-07-08 03:04:58', - 'end_date' => '2025-07-08 04:04:58', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 695, - 'soldier_id' => 95, - 'constraint_type' => 'School', - 'start_date' => '2025-07-07 06:37:50', - 'end_date' => '2025-07-07 10:37:50', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 696, - 'soldier_id' => 95, - 'constraint_type' => 'School', - 'start_date' => '2025-07-02 16:10:13', - 'end_date' => '2025-07-02 21:10:13', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 697, - 'soldier_id' => 95, - 'constraint_type' => 'School', - 'start_date' => '2025-07-13 22:48:08', - 'end_date' => '2025-07-14 00:48:08', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 698, - 'soldier_id' => 111, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-28 11:03:06', - 'end_date' => '2025-07-28 12:03:06', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 699, - 'soldier_id' => 111, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-08 20:43:12', - 'end_date' => '2025-07-08 22:43:12', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 700, - 'soldier_id' => 111, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-29 01:08:14', - 'end_date' => '2025-07-29 02:08:14', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 701, - 'soldier_id' => 111, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-29 10:30:21', - 'end_date' => '2025-07-29 11:30:21', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 702, - 'soldier_id' => 111, - 'constraint_type' => 'School', - 'start_date' => '2025-07-03 00:59:17', - 'end_date' => '2025-07-03 04:59:17', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 703, - 'soldier_id' => 111, - 'constraint_type' => 'School', - 'start_date' => '2025-07-11 11:25:34', - 'end_date' => '2025-07-11 16:25:34', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 704, - 'soldier_id' => 111, - 'constraint_type' => 'School', - 'start_date' => '2025-07-03 06:06:46', - 'end_date' => '2025-07-03 11:06:46', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 705, - 'soldier_id' => 68, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-17 08:38:44', - 'end_date' => '2025-07-17 13:38:44', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 706, - 'soldier_id' => 68, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-23 08:04:09', - 'end_date' => '2025-07-23 09:04:09', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 707, - 'soldier_id' => 68, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-05 06:11:48', - 'end_date' => '2025-07-05 08:11:48', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 708, - 'soldier_id' => 68, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-18 20:02:46', - 'end_date' => '2025-07-19 00:02:46', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 709, - 'soldier_id' => 68, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-10 20:03:15', - 'end_date' => '2025-07-10 22:03:15', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 710, - 'soldier_id' => 68, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-29 17:49:19', - 'end_date' => '2025-07-29 21:49:19', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 711, - 'soldier_id' => 68, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-06 17:47:04', - 'end_date' => '2025-07-06 20:47:04', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 712, - 'soldier_id' => 68, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-27 02:54:35', - 'end_date' => '2025-07-27 03:54:35', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 713, - 'soldier_id' => 68, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-20 00:09:13', - 'end_date' => '2025-07-20 04:09:13', - 'created_at' => '2025-05-13T06:41:35.000000Z', - 'updated_at' => '2025-05-13T06:41:35.000000Z', - ], - [ - 'id' => 714, - 'soldier_id' => 68, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-28 11:53:27', - 'end_date' => '2025-07-28 14:53:27', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 715, - 'soldier_id' => 68, - 'constraint_type' => 'School', - 'start_date' => '2025-07-13 02:56:20', - 'end_date' => '2025-07-13 03:56:20', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 716, - 'soldier_id' => 68, - 'constraint_type' => 'School', - 'start_date' => '2025-07-09 09:12:31', - 'end_date' => '2025-07-09 11:12:31', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 717, - 'soldier_id' => 169, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-27 22:28:53', - 'end_date' => '2025-07-28 02:28:53', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 718, - 'soldier_id' => 169, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-26 12:10:05', - 'end_date' => '2025-07-26 13:10:05', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 719, - 'soldier_id' => 169, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-04 19:00:55', - 'end_date' => '2025-07-04 20:00:55', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 720, - 'soldier_id' => 169, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-21 00:28:34', - 'end_date' => '2025-07-21 01:28:34', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 721, - 'soldier_id' => 169, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-29 01:16:15', - 'end_date' => '2025-07-29 02:16:15', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 722, - 'soldier_id' => 169, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-08 20:17:54', - 'end_date' => '2025-07-09 00:17:54', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 723, - 'soldier_id' => 169, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-05 05:40:09', - 'end_date' => '2025-07-05 06:40:09', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 724, - 'soldier_id' => 169, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-12 02:36:17', - 'end_date' => '2025-07-12 06:36:17', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 725, - 'soldier_id' => 169, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-25 10:39:26', - 'end_date' => '2025-07-25 15:39:26', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 726, - 'soldier_id' => 169, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-15 08:37:32', - 'end_date' => '2025-07-15 12:37:32', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 727, - 'soldier_id' => 160, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-20 06:25:15', - 'end_date' => '2025-07-20 09:25:15', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 728, - 'soldier_id' => 160, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-05 07:53:04', - 'end_date' => '2025-07-05 10:53:04', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 729, - 'soldier_id' => 160, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-15 23:29:07', - 'end_date' => '2025-07-16 01:29:07', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 730, - 'soldier_id' => 160, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-23 07:22:39', - 'end_date' => '2025-07-23 09:22:39', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 731, - 'soldier_id' => 160, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-10 20:09:59', - 'end_date' => '2025-07-10 23:09:59', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 732, - 'soldier_id' => 160, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-11 01:43:07', - 'end_date' => '2025-07-11 04:43:07', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 733, - 'soldier_id' => 160, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-04 20:01:07', - 'end_date' => '2025-07-04 21:01:07', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 734, - 'soldier_id' => 160, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-05 05:18:07', - 'end_date' => '2025-07-05 09:18:07', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 735, - 'soldier_id' => 160, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-22 15:34:25', - 'end_date' => '2025-07-22 18:34:25', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 736, - 'soldier_id' => 160, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-13 10:32:22', - 'end_date' => '2025-07-13 14:32:22', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 737, - 'soldier_id' => 160, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-28 01:36:46', - 'end_date' => '2025-07-28 03:36:46', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 738, - 'soldier_id' => 160, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-26 07:42:28', - 'end_date' => '2025-07-26 11:42:28', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 739, - 'soldier_id' => 160, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-05 07:48:30', - 'end_date' => '2025-07-05 11:48:30', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 740, - 'soldier_id' => 160, - 'constraint_type' => 'School', - 'start_date' => '2025-07-14 12:14:32', - 'end_date' => '2025-07-14 16:14:32', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 741, - 'soldier_id' => 142, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-20 02:37:29', - 'end_date' => '2025-07-20 06:37:29', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 742, - 'soldier_id' => 142, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-20 14:23:21', - 'end_date' => '2025-07-20 15:23:21', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 743, - 'soldier_id' => 142, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-24 23:53:08', - 'end_date' => '2025-07-25 00:53:08', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 744, - 'soldier_id' => 142, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-14 04:50:38', - 'end_date' => '2025-07-14 07:50:38', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 745, - 'soldier_id' => 142, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-19 20:55:45', - 'end_date' => '2025-07-19 22:55:45', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 746, - 'soldier_id' => 142, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-29 11:33:18', - 'end_date' => '2025-07-29 14:33:18', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 747, - 'soldier_id' => 142, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-23 17:05:14', - 'end_date' => '2025-07-23 21:05:14', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 748, - 'soldier_id' => 142, - 'constraint_type' => 'School', - 'start_date' => '2025-07-27 21:43:33', - 'end_date' => '2025-07-28 02:43:33', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 749, - 'soldier_id' => 142, - 'constraint_type' => 'School', - 'start_date' => '2025-07-20 17:09:49', - 'end_date' => '2025-07-20 22:09:49', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 750, - 'soldier_id' => 142, - 'constraint_type' => 'School', - 'start_date' => '2025-07-12 12:30:51', - 'end_date' => '2025-07-12 17:30:51', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 751, - 'soldier_id' => 141, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-07 05:06:55', - 'end_date' => '2025-07-07 10:06:55', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 752, - 'soldier_id' => 141, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-18 09:41:01', - 'end_date' => '2025-07-18 11:41:01', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 753, - 'soldier_id' => 141, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-24 17:10:53', - 'end_date' => '2025-07-24 18:10:53', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 754, - 'soldier_id' => 141, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-19 23:24:53', - 'end_date' => '2025-07-20 04:24:53', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 755, - 'soldier_id' => 141, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-30 05:43:26', - 'end_date' => '2025-07-30 07:43:26', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 756, - 'soldier_id' => 141, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-23 22:48:16', - 'end_date' => '2025-07-24 00:48:16', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 757, - 'soldier_id' => 141, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-08 05:00:57', - 'end_date' => '2025-07-08 07:00:57', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 758, - 'soldier_id' => 141, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-16 20:37:44', - 'end_date' => '2025-07-16 21:37:44', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 759, - 'soldier_id' => 141, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-01 11:15:39', - 'end_date' => '2025-07-01 15:15:39', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 760, - 'soldier_id' => 141, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-22 11:14:27', - 'end_date' => '2025-07-22 16:14:27', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 761, - 'soldier_id' => 141, - 'constraint_type' => 'School', - 'start_date' => '2025-07-20 06:59:45', - 'end_date' => '2025-07-20 09:59:45', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 762, - 'soldier_id' => 141, - 'constraint_type' => 'School', - 'start_date' => '2025-07-30 15:47:44', - 'end_date' => '2025-07-30 19:47:44', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 763, - 'soldier_id' => 141, - 'constraint_type' => 'School', - 'start_date' => '2025-07-18 20:43:16', - 'end_date' => '2025-07-18 21:43:16', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 764, - 'soldier_id' => 78, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-27 06:35:04', - 'end_date' => '2025-07-27 09:35:04', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 765, - 'soldier_id' => 78, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-21 20:18:09', - 'end_date' => '2025-07-21 21:18:09', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 766, - 'soldier_id' => 78, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-05 15:38:01', - 'end_date' => '2025-07-05 18:38:01', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 767, - 'soldier_id' => 78, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-09 20:20:28', - 'end_date' => '2025-07-10 01:20:28', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 768, - 'soldier_id' => 78, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-29 13:21:07', - 'end_date' => '2025-07-29 18:21:07', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 769, - 'soldier_id' => 78, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-23 23:30:31', - 'end_date' => '2025-07-24 00:30:31', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 770, - 'soldier_id' => 78, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-28 22:44:05', - 'end_date' => '2025-07-29 03:44:05', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 771, - 'soldier_id' => 78, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-16 04:07:50', - 'end_date' => '2025-07-16 09:07:50', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 772, - 'soldier_id' => 21, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-28 09:30:57', - 'end_date' => '2025-07-28 12:30:57', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 773, - 'soldier_id' => 21, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-13 05:56:16', - 'end_date' => '2025-07-13 07:56:16', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 774, - 'soldier_id' => 21, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-03 11:44:57', - 'end_date' => '2025-07-03 15:44:57', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 775, - 'soldier_id' => 21, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-24 20:12:07', - 'end_date' => '2025-07-25 00:12:07', - 'created_at' => '2025-05-13T06:41:36.000000Z', - 'updated_at' => '2025-05-13T06:41:36.000000Z', - ], - [ - 'id' => 776, - 'soldier_id' => 21, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-04 20:05:08', - 'end_date' => '2025-07-05 00:05:08', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 777, - 'soldier_id' => 21, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-07 06:12:46', - 'end_date' => '2025-07-07 07:12:46', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 778, - 'soldier_id' => 21, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-03 20:53:20', - 'end_date' => '2025-07-03 23:53:20', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 779, - 'soldier_id' => 21, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-29 18:29:11', - 'end_date' => '2025-07-29 23:29:11', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 780, - 'soldier_id' => 21, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-23 07:38:08', - 'end_date' => '2025-07-23 12:38:08', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 781, - 'soldier_id' => 21, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-11 09:06:03', - 'end_date' => '2025-07-11 12:06:03', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 782, - 'soldier_id' => 21, - 'constraint_type' => 'School', - 'start_date' => '2025-07-10 11:10:54', - 'end_date' => '2025-07-10 14:10:54', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 783, - 'soldier_id' => 21, - 'constraint_type' => 'School', - 'start_date' => '2025-07-19 14:34:11', - 'end_date' => '2025-07-19 19:34:11', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 784, - 'soldier_id' => 21, - 'constraint_type' => 'School', - 'start_date' => '2025-07-25 04:55:30', - 'end_date' => '2025-07-25 05:55:30', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 785, - 'soldier_id' => 21, - 'constraint_type' => 'School', - 'start_date' => '2025-07-11 01:51:44', - 'end_date' => '2025-07-11 03:51:44', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 786, - 'soldier_id' => 115, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-28 23:00:36', - 'end_date' => '2025-07-29 02:00:36', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 787, - 'soldier_id' => 115, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-20 04:20:57', - 'end_date' => '2025-07-20 05:20:57', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 788, - 'soldier_id' => 115, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-12 09:21:23', - 'end_date' => '2025-07-12 14:21:23', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 789, - 'soldier_id' => 115, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-29 09:53:09', - 'end_date' => '2025-07-29 11:53:09', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 790, - 'soldier_id' => 115, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-09 22:45:24', - 'end_date' => '2025-07-10 03:45:24', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 791, - 'soldier_id' => 115, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-23 20:43:24', - 'end_date' => '2025-07-23 22:43:24', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 792, - 'soldier_id' => 115, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-25 21:07:46', - 'end_date' => '2025-07-25 23:07:46', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 793, - 'soldier_id' => 115, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-02 20:03:23', - 'end_date' => '2025-07-02 21:03:23', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 794, - 'soldier_id' => 115, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-07 07:51:45', - 'end_date' => '2025-07-07 12:51:45', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 795, - 'soldier_id' => 115, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-28 15:09:22', - 'end_date' => '2025-07-28 17:09:22', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 796, - 'soldier_id' => 115, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-13 18:52:15', - 'end_date' => '2025-07-13 19:52:15', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 797, - 'soldier_id' => 115, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-02 21:40:36', - 'end_date' => '2025-07-02 23:40:36', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 798, - 'soldier_id' => 115, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-29 13:28:44', - 'end_date' => '2025-07-29 15:28:44', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 799, - 'soldier_id' => 115, - 'constraint_type' => 'School', - 'start_date' => '2025-07-20 09:31:42', - 'end_date' => '2025-07-20 14:31:42', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 800, - 'soldier_id' => 115, - 'constraint_type' => 'School', - 'start_date' => '2025-07-27 03:00:07', - 'end_date' => '2025-07-27 04:00:07', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 801, - 'soldier_id' => 115, - 'constraint_type' => 'School', - 'start_date' => '2025-07-29 08:23:49', - 'end_date' => '2025-07-29 10:23:49', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 802, - 'soldier_id' => 115, - 'constraint_type' => 'School', - 'start_date' => '2025-07-09 07:33:10', - 'end_date' => '2025-07-09 08:33:10', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 803, - 'soldier_id' => 28, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-06 09:29:56', - 'end_date' => '2025-07-06 12:29:56', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 804, - 'soldier_id' => 28, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-04 10:15:07', - 'end_date' => '2025-07-04 12:15:07', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 805, - 'soldier_id' => 28, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-26 06:25:27', - 'end_date' => '2025-07-26 08:25:27', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 806, - 'soldier_id' => 28, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-19 16:38:59', - 'end_date' => '2025-07-19 21:38:59', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 807, - 'soldier_id' => 28, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-04 04:20:06', - 'end_date' => '2025-07-04 07:20:06', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 808, - 'soldier_id' => 28, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-03 12:24:00', - 'end_date' => '2025-07-03 14:24:00', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 809, - 'soldier_id' => 28, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-01 14:29:17', - 'end_date' => '2025-07-01 19:29:17', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 810, - 'soldier_id' => 28, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-12 09:33:25', - 'end_date' => '2025-07-12 10:33:25', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 811, - 'soldier_id' => 28, - 'constraint_type' => 'School', - 'start_date' => '2025-07-18 20:31:33', - 'end_date' => '2025-07-18 23:31:33', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 812, - 'soldier_id' => 28, - 'constraint_type' => 'School', - 'start_date' => '2025-07-21 08:17:43', - 'end_date' => '2025-07-21 13:17:43', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 813, - 'soldier_id' => 172, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-27 14:51:59', - 'end_date' => '2025-07-27 16:51:59', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 814, - 'soldier_id' => 172, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-21 14:02:14', - 'end_date' => '2025-07-21 19:02:14', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 815, - 'soldier_id' => 172, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-01 05:55:33', - 'end_date' => '2025-07-01 07:55:33', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 816, - 'soldier_id' => 172, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-28 21:23:13', - 'end_date' => '2025-07-28 22:23:13', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 817, - 'soldier_id' => 172, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-10 03:36:47', - 'end_date' => '2025-07-10 06:36:47', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 818, - 'soldier_id' => 172, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-18 20:23:41', - 'end_date' => '2025-07-18 21:23:41', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 819, - 'soldier_id' => 172, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-27 20:07:30', - 'end_date' => '2025-07-27 22:07:30', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 820, - 'soldier_id' => 172, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-05 05:37:43', - 'end_date' => '2025-07-05 08:37:43', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 821, - 'soldier_id' => 172, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-08 05:57:30', - 'end_date' => '2025-07-08 08:57:30', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 822, - 'soldier_id' => 172, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-22 12:13:32', - 'end_date' => '2025-07-22 14:13:32', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 823, - 'soldier_id' => 132, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-28 05:20:24', - 'end_date' => '2025-07-28 07:20:24', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 824, - 'soldier_id' => 132, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-14 18:31:25', - 'end_date' => '2025-07-14 23:31:25', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 825, - 'soldier_id' => 132, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-14 18:39:03', - 'end_date' => '2025-07-14 20:39:03', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 826, - 'soldier_id' => 132, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-14 09:09:28', - 'end_date' => '2025-07-14 11:09:28', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 827, - 'soldier_id' => 132, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-24 11:14:44', - 'end_date' => '2025-07-24 16:14:44', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 828, - 'soldier_id' => 132, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-19 20:01:51', - 'end_date' => '2025-07-19 21:01:51', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 829, - 'soldier_id' => 132, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-30 19:07:34', - 'end_date' => '2025-07-30 23:07:34', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 830, - 'soldier_id' => 132, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-02 20:12:53', - 'end_date' => '2025-07-02 23:12:53', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 831, - 'soldier_id' => 132, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-14 04:57:39', - 'end_date' => '2025-07-14 09:57:39', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 832, - 'soldier_id' => 132, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-29 02:22:42', - 'end_date' => '2025-07-29 04:22:42', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 833, - 'soldier_id' => 132, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-25 02:44:53', - 'end_date' => '2025-07-25 07:44:53', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 834, - 'soldier_id' => 132, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-01 12:52:41', - 'end_date' => '2025-07-01 15:52:41', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 835, - 'soldier_id' => 132, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-01 19:21:58', - 'end_date' => '2025-07-01 23:21:58', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 836, - 'soldier_id' => 132, - 'constraint_type' => 'School', - 'start_date' => '2025-07-06 09:03:54', - 'end_date' => '2025-07-06 11:03:54', - 'created_at' => '2025-05-13T06:41:37.000000Z', - 'updated_at' => '2025-05-13T06:41:37.000000Z', - ], - [ - 'id' => 837, - 'soldier_id' => 132, - 'constraint_type' => 'School', - 'start_date' => '2025-07-16 08:56:45', - 'end_date' => '2025-07-16 10:56:45', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 838, - 'soldier_id' => 55, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-07 07:49:22', - 'end_date' => '2025-07-07 08:49:22', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 839, - 'soldier_id' => 55, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-15 10:22:19', - 'end_date' => '2025-07-15 15:22:19', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 840, - 'soldier_id' => 55, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-01 04:14:19', - 'end_date' => '2025-07-01 07:14:19', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 841, - 'soldier_id' => 55, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-26 00:09:29', - 'end_date' => '2025-07-26 04:09:29', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 842, - 'soldier_id' => 55, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-15 05:40:44', - 'end_date' => '2025-07-15 10:40:44', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 843, - 'soldier_id' => 55, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-15 21:52:01', - 'end_date' => '2025-07-15 22:52:01', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 844, - 'soldier_id' => 55, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-22 12:56:46', - 'end_date' => '2025-07-22 15:56:46', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 845, - 'soldier_id' => 55, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-28 18:33:02', - 'end_date' => '2025-07-28 21:33:02', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 846, - 'soldier_id' => 55, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-12 17:54:31', - 'end_date' => '2025-07-12 22:54:31', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 847, - 'soldier_id' => 55, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-19 11:52:42', - 'end_date' => '2025-07-19 16:52:42', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 848, - 'soldier_id' => 55, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-24 04:42:28', - 'end_date' => '2025-07-24 09:42:28', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 849, - 'soldier_id' => 55, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-26 00:41:54', - 'end_date' => '2025-07-26 05:41:54', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 850, - 'soldier_id' => 55, - 'constraint_type' => 'School', - 'start_date' => '2025-07-02 02:19:39', - 'end_date' => '2025-07-02 06:19:39', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 851, - 'soldier_id' => 55, - 'constraint_type' => 'School', - 'start_date' => '2025-07-24 17:15:04', - 'end_date' => '2025-07-24 22:15:04', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 852, - 'soldier_id' => 55, - 'constraint_type' => 'School', - 'start_date' => '2025-07-25 18:32:16', - 'end_date' => '2025-07-25 19:32:16', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 853, - 'soldier_id' => 70, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-11 15:12:43', - 'end_date' => '2025-07-11 16:12:43', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 854, - 'soldier_id' => 70, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-06 20:07:20', - 'end_date' => '2025-07-07 00:07:20', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 855, - 'soldier_id' => 70, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-01 00:24:52', - 'end_date' => '2025-07-01 01:24:52', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 856, - 'soldier_id' => 70, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-29 19:33:09', - 'end_date' => '2025-07-30 00:33:09', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 857, - 'soldier_id' => 70, - 'constraint_type' => 'School', - 'start_date' => '2025-07-11 10:57:13', - 'end_date' => '2025-07-11 13:57:13', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 858, - 'soldier_id' => 70, - 'constraint_type' => 'School', - 'start_date' => '2025-07-07 13:57:19', - 'end_date' => '2025-07-07 15:57:19', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 859, - 'soldier_id' => 70, - 'constraint_type' => 'School', - 'start_date' => '2025-07-16 23:50:39', - 'end_date' => '2025-07-17 04:50:39', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 860, - 'soldier_id' => 36, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-07 23:27:35', - 'end_date' => '2025-07-08 01:27:35', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 861, - 'soldier_id' => 36, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-18 21:10:10', - 'end_date' => '2025-07-19 01:10:10', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 862, - 'soldier_id' => 36, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-24 23:41:10', - 'end_date' => '2025-07-25 02:41:10', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 863, - 'soldier_id' => 36, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-02 21:04:52', - 'end_date' => '2025-07-03 00:04:52', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 864, - 'soldier_id' => 36, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-06 04:49:59', - 'end_date' => '2025-07-06 08:49:59', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 865, - 'soldier_id' => 36, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-19 07:41:48', - 'end_date' => '2025-07-19 11:41:48', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 866, - 'soldier_id' => 36, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-22 15:05:18', - 'end_date' => '2025-07-22 18:05:18', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 867, - 'soldier_id' => 36, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-15 18:58:43', - 'end_date' => '2025-07-15 22:58:43', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 868, - 'soldier_id' => 36, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-21 00:13:14', - 'end_date' => '2025-07-21 03:13:14', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 869, - 'soldier_id' => 36, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-10 20:43:01', - 'end_date' => '2025-07-11 01:43:01', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 870, - 'soldier_id' => 36, - 'constraint_type' => 'School', - 'start_date' => '2025-07-23 21:29:34', - 'end_date' => '2025-07-24 00:29:34', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 871, - 'soldier_id' => 36, - 'constraint_type' => 'School', - 'start_date' => '2025-07-15 23:09:38', - 'end_date' => '2025-07-16 00:09:38', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 872, - 'soldier_id' => 143, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-06 08:46:46', - 'end_date' => '2025-07-06 12:46:46', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 873, - 'soldier_id' => 143, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-19 09:49:05', - 'end_date' => '2025-07-19 11:49:05', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 874, - 'soldier_id' => 143, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-19 02:10:39', - 'end_date' => '2025-07-19 04:10:39', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 875, - 'soldier_id' => 143, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-29 16:03:04', - 'end_date' => '2025-07-29 21:03:04', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 876, - 'soldier_id' => 143, - 'constraint_type' => 'School', - 'start_date' => '2025-07-18 19:49:58', - 'end_date' => '2025-07-18 20:49:58', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 877, - 'soldier_id' => 143, - 'constraint_type' => 'School', - 'start_date' => '2025-07-28 22:41:12', - 'end_date' => '2025-07-28 23:41:12', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 878, - 'soldier_id' => 126, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-08 04:32:51', - 'end_date' => '2025-07-08 07:32:51', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 879, - 'soldier_id' => 126, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-02 00:36:57', - 'end_date' => '2025-07-02 02:36:57', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 880, - 'soldier_id' => 126, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-02 08:45:42', - 'end_date' => '2025-07-02 12:45:42', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 881, - 'soldier_id' => 126, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-13 05:52:14', - 'end_date' => '2025-07-13 08:52:14', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 882, - 'soldier_id' => 126, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-17 09:02:50', - 'end_date' => '2025-07-17 10:02:50', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 883, - 'soldier_id' => 126, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-20 23:01:29', - 'end_date' => '2025-07-21 02:01:29', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 884, - 'soldier_id' => 126, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-24 03:42:01', - 'end_date' => '2025-07-24 06:42:01', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 885, - 'soldier_id' => 126, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-06 20:21:36', - 'end_date' => '2025-07-06 23:21:36', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 886, - 'soldier_id' => 126, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-01 20:17:12', - 'end_date' => '2025-07-01 23:17:12', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 887, - 'soldier_id' => 126, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-29 14:20:12', - 'end_date' => '2025-07-29 17:20:12', - 'created_at' => '2025-05-13T06:41:38.000000Z', - 'updated_at' => '2025-05-13T06:41:38.000000Z', - ], - [ - 'id' => 888, - 'soldier_id' => 126, - 'constraint_type' => 'School', - 'start_date' => '2025-07-28 02:17:19', - 'end_date' => '2025-07-28 03:17:19', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 889, - 'soldier_id' => 126, - 'constraint_type' => 'School', - 'start_date' => '2025-07-21 06:51:57', - 'end_date' => '2025-07-21 07:51:57', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 890, - 'soldier_id' => 126, - 'constraint_type' => 'School', - 'start_date' => '2025-07-07 12:28:44', - 'end_date' => '2025-07-07 16:28:44', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 891, - 'soldier_id' => 126, - 'constraint_type' => 'School', - 'start_date' => '2025-07-18 02:56:32', - 'end_date' => '2025-07-18 07:56:32', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 892, - 'soldier_id' => 46, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-28 01:39:05', - 'end_date' => '2025-07-28 03:39:05', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 893, - 'soldier_id' => 46, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-06 04:44:06', - 'end_date' => '2025-07-06 06:44:06', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 894, - 'soldier_id' => 46, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-20 18:22:02', - 'end_date' => '2025-07-20 19:22:02', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 895, - 'soldier_id' => 46, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-25 10:01:13', - 'end_date' => '2025-07-25 13:01:13', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 896, - 'soldier_id' => 46, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-17 20:49:21', - 'end_date' => '2025-07-17 22:49:21', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 897, - 'soldier_id' => 46, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-07 04:17:45', - 'end_date' => '2025-07-07 08:17:45', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 898, - 'soldier_id' => 46, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-20 04:21:06', - 'end_date' => '2025-07-20 07:21:06', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 899, - 'soldier_id' => 46, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-29 11:46:16', - 'end_date' => '2025-07-29 13:46:16', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 900, - 'soldier_id' => 46, - 'constraint_type' => 'School', - 'start_date' => '2025-07-30 09:11:24', - 'end_date' => '2025-07-30 12:11:24', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 901, - 'soldier_id' => 46, - 'constraint_type' => 'School', - 'start_date' => '2025-07-19 21:03:30', - 'end_date' => '2025-07-20 00:03:30', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 902, - 'soldier_id' => 46, - 'constraint_type' => 'School', - 'start_date' => '2025-07-25 12:25:49', - 'end_date' => '2025-07-25 16:25:49', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 903, - 'soldier_id' => 85, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-06 14:49:54', - 'end_date' => '2025-07-06 19:49:54', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 904, - 'soldier_id' => 85, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-28 00:20:50', - 'end_date' => '2025-07-28 02:20:50', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 905, - 'soldier_id' => 85, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-17 04:43:12', - 'end_date' => '2025-07-17 09:43:12', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 906, - 'soldier_id' => 85, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-11 13:06:46', - 'end_date' => '2025-07-11 15:06:46', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 907, - 'soldier_id' => 85, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-04 23:01:37', - 'end_date' => '2025-07-05 03:01:37', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 908, - 'soldier_id' => 85, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-03 05:53:36', - 'end_date' => '2025-07-03 06:53:36', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 909, - 'soldier_id' => 85, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-19 20:20:10', - 'end_date' => '2025-07-19 21:20:10', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 910, - 'soldier_id' => 85, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-22 20:00:53', - 'end_date' => '2025-07-23 01:00:53', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 911, - 'soldier_id' => 85, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-22 08:23:07', - 'end_date' => '2025-07-22 11:23:07', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 912, - 'soldier_id' => 85, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-24 08:16:34', - 'end_date' => '2025-07-24 13:16:34', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 913, - 'soldier_id' => 85, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-10 03:37:42', - 'end_date' => '2025-07-10 08:37:42', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 914, - 'soldier_id' => 85, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-24 10:18:54', - 'end_date' => '2025-07-24 15:18:54', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 915, - 'soldier_id' => 85, - 'constraint_type' => 'School', - 'start_date' => '2025-07-09 20:18:07', - 'end_date' => '2025-07-10 00:18:07', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 916, - 'soldier_id' => 85, - 'constraint_type' => 'School', - 'start_date' => '2025-07-06 07:20:17', - 'end_date' => '2025-07-06 10:20:17', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 917, - 'soldier_id' => 60, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-08 19:57:23', - 'end_date' => '2025-07-08 23:57:23', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 918, - 'soldier_id' => 60, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-08 08:04:00', - 'end_date' => '2025-07-08 09:04:00', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 919, - 'soldier_id' => 60, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-05 01:18:13', - 'end_date' => '2025-07-05 03:18:13', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 920, - 'soldier_id' => 60, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-27 20:55:21', - 'end_date' => '2025-07-28 01:55:21', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 921, - 'soldier_id' => 60, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-02 03:43:55', - 'end_date' => '2025-07-02 05:43:55', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 922, - 'soldier_id' => 60, - 'constraint_type' => 'School', - 'start_date' => '2025-07-20 13:46:17', - 'end_date' => '2025-07-20 17:46:17', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 923, - 'soldier_id' => 60, - 'constraint_type' => 'School', - 'start_date' => '2025-07-08 06:39:32', - 'end_date' => '2025-07-08 11:39:32', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 924, - 'soldier_id' => 60, - 'constraint_type' => 'School', - 'start_date' => '2025-07-27 17:49:21', - 'end_date' => '2025-07-27 18:49:21', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 925, - 'soldier_id' => 60, - 'constraint_type' => 'School', - 'start_date' => '2025-07-18 00:36:07', - 'end_date' => '2025-07-18 01:36:07', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 926, - 'soldier_id' => 75, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-21 13:20:54', - 'end_date' => '2025-07-21 14:20:54', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 927, - 'soldier_id' => 75, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-01 12:28:52', - 'end_date' => '2025-07-01 13:28:52', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 928, - 'soldier_id' => 75, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-15 08:24:14', - 'end_date' => '2025-07-15 12:24:14', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 929, - 'soldier_id' => 75, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-12 00:10:07', - 'end_date' => '2025-07-12 04:10:07', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 930, - 'soldier_id' => 75, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-04 17:33:26', - 'end_date' => '2025-07-04 19:33:26', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 931, - 'soldier_id' => 75, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-06 11:05:26', - 'end_date' => '2025-07-06 12:05:26', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 932, - 'soldier_id' => 75, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-23 20:43:02', - 'end_date' => '2025-07-23 23:43:02', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 933, - 'soldier_id' => 75, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-27 07:49:18', - 'end_date' => '2025-07-27 10:49:18', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 934, - 'soldier_id' => 75, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-02 04:24:19', - 'end_date' => '2025-07-02 08:24:19', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 935, - 'soldier_id' => 75, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-20 07:05:33', - 'end_date' => '2025-07-20 11:05:33', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 936, - 'soldier_id' => 75, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-12 06:31:38', - 'end_date' => '2025-07-12 08:31:38', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 937, - 'soldier_id' => 75, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-03 17:22:23', - 'end_date' => '2025-07-03 22:22:23', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 938, - 'soldier_id' => 75, - 'constraint_type' => 'School', - 'start_date' => '2025-07-12 04:13:01', - 'end_date' => '2025-07-12 09:13:01', - 'created_at' => '2025-05-13T06:41:39.000000Z', - 'updated_at' => '2025-05-13T06:41:39.000000Z', - ], - [ - 'id' => 939, - 'soldier_id' => 75, - 'constraint_type' => 'School', - 'start_date' => '2025-07-16 05:32:40', - 'end_date' => '2025-07-16 07:32:40', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 940, - 'soldier_id' => 75, - 'constraint_type' => 'School', - 'start_date' => '2025-07-16 15:48:03', - 'end_date' => '2025-07-16 16:48:03', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 941, - 'soldier_id' => 15, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-06 12:32:16', - 'end_date' => '2025-07-06 17:32:16', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 942, - 'soldier_id' => 15, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-03 18:32:50', - 'end_date' => '2025-07-03 20:32:50', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 943, - 'soldier_id' => 15, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-19 13:39:13', - 'end_date' => '2025-07-19 18:39:13', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 944, - 'soldier_id' => 15, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-22 03:07:12', - 'end_date' => '2025-07-22 06:07:12', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 945, - 'soldier_id' => 15, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-08 22:17:19', - 'end_date' => '2025-07-09 02:17:19', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 946, - 'soldier_id' => 15, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-07 20:31:37', - 'end_date' => '2025-07-08 01:31:37', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 947, - 'soldier_id' => 15, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-12 20:59:00', - 'end_date' => '2025-07-13 01:59:00', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 948, - 'soldier_id' => 15, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-29 14:16:49', - 'end_date' => '2025-07-29 17:16:49', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 949, - 'soldier_id' => 15, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-08 23:46:02', - 'end_date' => '2025-07-09 00:46:02', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 950, - 'soldier_id' => 15, - 'constraint_type' => 'School', - 'start_date' => '2025-07-29 07:59:35', - 'end_date' => '2025-07-29 08:59:35', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 951, - 'soldier_id' => 15, - 'constraint_type' => 'School', - 'start_date' => '2025-07-05 18:06:31', - 'end_date' => '2025-07-05 20:06:31', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 952, - 'soldier_id' => 4, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-07 13:04:24', - 'end_date' => '2025-07-07 16:04:24', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 953, - 'soldier_id' => 4, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-03 09:19:31', - 'end_date' => '2025-07-03 10:19:31', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 954, - 'soldier_id' => 4, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-12 12:31:38', - 'end_date' => '2025-07-12 15:31:38', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 955, - 'soldier_id' => 4, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-05 20:21:21', - 'end_date' => '2025-07-05 22:21:21', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 956, - 'soldier_id' => 4, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-24 01:59:42', - 'end_date' => '2025-07-24 06:59:42', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 957, - 'soldier_id' => 4, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-21 20:07:55', - 'end_date' => '2025-07-21 23:07:55', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 958, - 'soldier_id' => 4, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-12 01:19:42', - 'end_date' => '2025-07-12 02:19:42', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 959, - 'soldier_id' => 4, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-22 18:46:49', - 'end_date' => '2025-07-22 19:46:49', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 960, - 'soldier_id' => 4, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-22 04:40:22', - 'end_date' => '2025-07-22 08:40:22', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 961, - 'soldier_id' => 4, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-22 23:30:59', - 'end_date' => '2025-07-23 00:30:59', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 962, - 'soldier_id' => 4, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-05 07:39:48', - 'end_date' => '2025-07-05 11:39:48', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 963, - 'soldier_id' => 4, - 'constraint_type' => 'School', - 'start_date' => '2025-07-05 21:25:00', - 'end_date' => '2025-07-06 02:25:00', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 964, - 'soldier_id' => 4, - 'constraint_type' => 'School', - 'start_date' => '2025-07-28 20:40:44', - 'end_date' => '2025-07-28 23:40:44', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 965, - 'soldier_id' => 4, - 'constraint_type' => 'School', - 'start_date' => '2025-07-03 05:20:42', - 'end_date' => '2025-07-03 08:20:42', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 966, - 'soldier_id' => 4, - 'constraint_type' => 'School', - 'start_date' => '2025-07-15 10:51:12', - 'end_date' => '2025-07-15 13:51:12', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 967, - 'soldier_id' => 51, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-30 01:42:08', - 'end_date' => '2025-07-30 04:42:08', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 968, - 'soldier_id' => 51, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-26 12:33:20', - 'end_date' => '2025-07-26 13:33:20', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 969, - 'soldier_id' => 51, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-10 14:14:51', - 'end_date' => '2025-07-10 19:14:51', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 970, - 'soldier_id' => 51, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-21 08:26:15', - 'end_date' => '2025-07-21 11:26:15', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 971, - 'soldier_id' => 51, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-24 05:22:26', - 'end_date' => '2025-07-24 08:22:26', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 972, - 'soldier_id' => 51, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-24 20:50:13', - 'end_date' => '2025-07-25 01:50:13', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 973, - 'soldier_id' => 51, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-08 07:11:49', - 'end_date' => '2025-07-08 12:11:49', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 974, - 'soldier_id' => 51, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-08 13:59:38', - 'end_date' => '2025-07-08 14:59:38', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 975, - 'soldier_id' => 51, - 'constraint_type' => 'School', - 'start_date' => '2025-07-26 15:00:07', - 'end_date' => '2025-07-26 18:00:07', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 976, - 'soldier_id' => 51, - 'constraint_type' => 'School', - 'start_date' => '2025-07-21 07:57:01', - 'end_date' => '2025-07-21 10:57:01', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 977, - 'soldier_id' => 51, - 'constraint_type' => 'School', - 'start_date' => '2025-07-14 17:31:33', - 'end_date' => '2025-07-14 22:31:33', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 978, - 'soldier_id' => 34, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-01 14:49:04', - 'end_date' => '2025-07-01 17:49:04', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 979, - 'soldier_id' => 34, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-30 01:58:20', - 'end_date' => '2025-07-30 06:58:20', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 980, - 'soldier_id' => 34, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-08 11:24:53', - 'end_date' => '2025-07-08 14:24:53', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 981, - 'soldier_id' => 34, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-02 07:18:03', - 'end_date' => '2025-07-02 11:18:03', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 982, - 'soldier_id' => 34, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-12 21:51:59', - 'end_date' => '2025-07-12 23:51:59', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 983, - 'soldier_id' => 34, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-02 03:07:47', - 'end_date' => '2025-07-02 07:07:47', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 984, - 'soldier_id' => 34, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-19 00:28:05', - 'end_date' => '2025-07-19 02:28:05', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 985, - 'soldier_id' => 34, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-29 18:33:24', - 'end_date' => '2025-07-29 22:33:24', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 986, - 'soldier_id' => 34, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-05 09:16:42', - 'end_date' => '2025-07-05 12:16:42', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 987, - 'soldier_id' => 34, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-12 14:51:34', - 'end_date' => '2025-07-12 18:51:34', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 988, - 'soldier_id' => 134, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-28 00:50:25', - 'end_date' => '2025-07-28 05:50:25', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 989, - 'soldier_id' => 134, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-28 19:05:32', - 'end_date' => '2025-07-28 21:05:32', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 990, - 'soldier_id' => 134, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-11 13:19:17', - 'end_date' => '2025-07-11 16:19:17', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 991, - 'soldier_id' => 134, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-13 16:27:32', - 'end_date' => '2025-07-13 19:27:32', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 992, - 'soldier_id' => 134, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-01 16:00:53', - 'end_date' => '2025-07-01 21:00:53', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 993, - 'soldier_id' => 134, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-09 20:10:27', - 'end_date' => '2025-07-10 00:10:27', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 994, - 'soldier_id' => 134, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-27 20:59:08', - 'end_date' => '2025-07-28 00:59:08', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 995, - 'soldier_id' => 134, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-07 03:27:40', - 'end_date' => '2025-07-07 06:27:40', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 996, - 'soldier_id' => 134, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-27 04:30:07', - 'end_date' => '2025-07-27 06:30:07', - 'created_at' => '2025-05-13T06:41:40.000000Z', - 'updated_at' => '2025-05-13T06:41:40.000000Z', - ], - [ - 'id' => 997, - 'soldier_id' => 134, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-12 01:14:17', - 'end_date' => '2025-07-12 03:14:17', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 998, - 'soldier_id' => 134, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-06 05:39:30', - 'end_date' => '2025-07-06 08:39:30', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 999, - 'soldier_id' => 134, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-04 04:45:22', - 'end_date' => '2025-07-04 07:45:22', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1000, - 'soldier_id' => 134, - 'constraint_type' => 'School', - 'start_date' => '2025-07-25 06:43:49', - 'end_date' => '2025-07-25 11:43:49', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1001, - 'soldier_id' => 137, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-20 20:33:41', - 'end_date' => '2025-07-21 00:33:41', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1002, - 'soldier_id' => 137, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-02 09:37:42', - 'end_date' => '2025-07-02 12:37:42', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1003, - 'soldier_id' => 137, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-06 01:57:31', - 'end_date' => '2025-07-06 06:57:31', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1004, - 'soldier_id' => 137, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-22 07:20:47', - 'end_date' => '2025-07-22 12:20:47', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1005, - 'soldier_id' => 137, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-17 00:40:09', - 'end_date' => '2025-07-17 04:40:09', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1006, - 'soldier_id' => 137, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-07 20:37:13', - 'end_date' => '2025-07-08 00:37:13', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1007, - 'soldier_id' => 137, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-26 09:26:27', - 'end_date' => '2025-07-26 14:26:27', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1008, - 'soldier_id' => 137, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-21 03:34:07', - 'end_date' => '2025-07-21 05:34:07', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1009, - 'soldier_id' => 137, - 'constraint_type' => 'School', - 'start_date' => '2025-07-09 06:24:47', - 'end_date' => '2025-07-09 07:24:47', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1010, - 'soldier_id' => 137, - 'constraint_type' => 'School', - 'start_date' => '2025-07-12 23:26:29', - 'end_date' => '2025-07-13 03:26:29', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1011, - 'soldier_id' => 137, - 'constraint_type' => 'School', - 'start_date' => '2025-07-08 01:32:21', - 'end_date' => '2025-07-08 02:32:21', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1012, - 'soldier_id' => 105, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-07 15:06:47', - 'end_date' => '2025-07-07 18:06:47', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1013, - 'soldier_id' => 105, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-22 15:35:25', - 'end_date' => '2025-07-22 17:35:25', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1014, - 'soldier_id' => 105, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-23 15:06:16', - 'end_date' => '2025-07-23 18:06:16', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1015, - 'soldier_id' => 105, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-23 11:32:25', - 'end_date' => '2025-07-23 15:32:25', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1016, - 'soldier_id' => 105, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-07 22:07:13', - 'end_date' => '2025-07-08 00:07:13', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1017, - 'soldier_id' => 105, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-14 20:11:10', - 'end_date' => '2025-07-14 22:11:10', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1018, - 'soldier_id' => 105, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-03 06:10:20', - 'end_date' => '2025-07-03 10:10:20', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1019, - 'soldier_id' => 105, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-01 20:23:49', - 'end_date' => '2025-07-01 23:23:49', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1020, - 'soldier_id' => 105, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-12 20:02:54', - 'end_date' => '2025-07-13 00:02:54', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1021, - 'soldier_id' => 105, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-15 09:06:59', - 'end_date' => '2025-07-15 12:06:59', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1022, - 'soldier_id' => 105, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-22 21:43:06', - 'end_date' => '2025-07-23 02:43:06', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1023, - 'soldier_id' => 11, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-06 00:26:09', - 'end_date' => '2025-07-06 05:26:09', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1024, - 'soldier_id' => 11, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-23 02:08:05', - 'end_date' => '2025-07-23 06:08:05', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1025, - 'soldier_id' => 11, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-02 12:48:48', - 'end_date' => '2025-07-02 17:48:48', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1026, - 'soldier_id' => 11, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-15 06:22:16', - 'end_date' => '2025-07-15 10:22:16', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1027, - 'soldier_id' => 11, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-21 23:21:01', - 'end_date' => '2025-07-22 04:21:01', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1028, - 'soldier_id' => 11, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-13 20:36:55', - 'end_date' => '2025-07-13 22:36:55', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1029, - 'soldier_id' => 11, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-10 07:03:07', - 'end_date' => '2025-07-10 12:03:07', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1030, - 'soldier_id' => 11, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-01 12:30:14', - 'end_date' => '2025-07-01 15:30:14', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1031, - 'soldier_id' => 11, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-20 21:43:25', - 'end_date' => '2025-07-21 02:43:25', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1032, - 'soldier_id' => 11, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-27 06:54:14', - 'end_date' => '2025-07-27 11:54:14', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1033, - 'soldier_id' => 11, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-29 16:21:52', - 'end_date' => '2025-07-29 17:21:52', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1034, - 'soldier_id' => 11, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-22 07:59:57', - 'end_date' => '2025-07-22 12:59:57', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1035, - 'soldier_id' => 11, - 'constraint_type' => 'School', - 'start_date' => '2025-07-24 11:30:15', - 'end_date' => '2025-07-24 13:30:15', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1036, - 'soldier_id' => 11, - 'constraint_type' => 'School', - 'start_date' => '2025-07-06 21:22:13', - 'end_date' => '2025-07-07 00:22:13', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1037, - 'soldier_id' => 11, - 'constraint_type' => 'School', - 'start_date' => '2025-07-02 17:53:36', - 'end_date' => '2025-07-02 18:53:36', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1038, - 'soldier_id' => 11, - 'constraint_type' => 'School', - 'start_date' => '2025-07-01 08:39:53', - 'end_date' => '2025-07-01 11:39:53', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1039, - 'soldier_id' => 103, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-13 06:33:54', - 'end_date' => '2025-07-13 08:33:54', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1040, - 'soldier_id' => 103, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-26 19:09:57', - 'end_date' => '2025-07-27 00:09:57', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1041, - 'soldier_id' => 103, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-30 23:11:16', - 'end_date' => '2025-08-01 04:11:16', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1042, - 'soldier_id' => 103, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-28 16:41:41', - 'end_date' => '2025-07-28 20:41:41', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1043, - 'soldier_id' => 103, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-29 20:03:12', - 'end_date' => '2025-07-30 00:03:12', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1044, - 'soldier_id' => 103, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-12 20:02:20', - 'end_date' => '2025-07-12 22:02:20', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1045, - 'soldier_id' => 103, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-16 01:55:26', - 'end_date' => '2025-07-16 03:55:26', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1046, - 'soldier_id' => 103, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-07 05:07:56', - 'end_date' => '2025-07-07 07:07:56', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1047, - 'soldier_id' => 103, - 'constraint_type' => 'School', - 'start_date' => '2025-07-30 11:19:30', - 'end_date' => '2025-07-30 12:19:30', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1048, - 'soldier_id' => 103, - 'constraint_type' => 'School', - 'start_date' => '2025-07-02 04:03:08', - 'end_date' => '2025-07-02 08:03:08', - 'created_at' => '2025-05-13T06:41:41.000000Z', - 'updated_at' => '2025-05-13T06:41:41.000000Z', - ], - [ - 'id' => 1049, - 'soldier_id' => 102, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-06 09:40:57', - 'end_date' => '2025-07-06 14:40:57', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1050, - 'soldier_id' => 102, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-20 17:50:48', - 'end_date' => '2025-07-20 21:50:48', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1051, - 'soldier_id' => 102, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-22 06:18:04', - 'end_date' => '2025-07-22 09:18:04', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1052, - 'soldier_id' => 102, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-06 11:55:59', - 'end_date' => '2025-07-06 12:55:59', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1053, - 'soldier_id' => 53, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-28 02:44:11', - 'end_date' => '2025-07-28 07:44:11', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1054, - 'soldier_id' => 53, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-13 19:33:39', - 'end_date' => '2025-07-13 20:33:39', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1055, - 'soldier_id' => 53, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-23 23:12:44', - 'end_date' => '2025-07-24 04:12:44', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1056, - 'soldier_id' => 53, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-25 08:09:04', - 'end_date' => '2025-07-25 09:09:04', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1057, - 'soldier_id' => 53, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-12 05:20:13', - 'end_date' => '2025-07-12 06:20:13', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1058, - 'soldier_id' => 53, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-03 20:41:19', - 'end_date' => '2025-07-04 01:41:19', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1059, - 'soldier_id' => 53, - 'constraint_type' => 'School', - 'start_date' => '2025-07-07 00:24:35', - 'end_date' => '2025-07-07 01:24:35', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1060, - 'soldier_id' => 53, - 'constraint_type' => 'School', - 'start_date' => '2025-07-18 11:36:26', - 'end_date' => '2025-07-18 14:36:26', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1061, - 'soldier_id' => 118, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-21 21:41:42', - 'end_date' => '2025-07-21 22:41:42', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1062, - 'soldier_id' => 118, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-02 16:10:11', - 'end_date' => '2025-07-02 21:10:11', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1063, - 'soldier_id' => 118, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-16 05:01:36', - 'end_date' => '2025-07-16 09:01:36', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1064, - 'soldier_id' => 118, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-11 00:20:58', - 'end_date' => '2025-07-11 05:20:58', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1065, - 'soldier_id' => 118, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-09 09:37:35', - 'end_date' => '2025-07-09 11:37:35', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1066, - 'soldier_id' => 118, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-18 12:40:59', - 'end_date' => '2025-07-18 14:40:59', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1067, - 'soldier_id' => 118, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-04 00:54:07', - 'end_date' => '2025-07-04 02:54:07', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1068, - 'soldier_id' => 118, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-11 20:38:46', - 'end_date' => '2025-07-12 01:38:46', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1069, - 'soldier_id' => 118, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-11 20:15:15', - 'end_date' => '2025-07-11 22:15:15', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1070, - 'soldier_id' => 118, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-05 06:54:34', - 'end_date' => '2025-07-05 07:54:34', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1071, - 'soldier_id' => 118, - 'constraint_type' => 'School', - 'start_date' => '2025-07-06 23:15:50', - 'end_date' => '2025-07-07 03:15:50', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1072, - 'soldier_id' => 118, - 'constraint_type' => 'School', - 'start_date' => '2025-07-22 01:11:07', - 'end_date' => '2025-07-22 02:11:07', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1073, - 'soldier_id' => 118, - 'constraint_type' => 'School', - 'start_date' => '2025-07-11 12:47:41', - 'end_date' => '2025-07-11 13:47:41', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1074, - 'soldier_id' => 71, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-07 23:00:53', - 'end_date' => '2025-07-08 01:00:53', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1075, - 'soldier_id' => 71, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-18 05:43:59', - 'end_date' => '2025-07-18 09:43:59', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1076, - 'soldier_id' => 71, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-18 06:14:58', - 'end_date' => '2025-07-18 07:14:58', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1077, - 'soldier_id' => 71, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-16 06:27:50', - 'end_date' => '2025-07-16 08:27:50', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1078, - 'soldier_id' => 71, - 'constraint_type' => 'School', - 'start_date' => '2025-07-26 12:40:22', - 'end_date' => '2025-07-26 16:40:22', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1079, - 'soldier_id' => 71, - 'constraint_type' => 'School', - 'start_date' => '2025-07-20 07:28:03', - 'end_date' => '2025-07-20 12:28:03', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1080, - 'soldier_id' => 100, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-20 10:43:23', - 'end_date' => '2025-07-20 12:43:23', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1081, - 'soldier_id' => 100, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-13 21:56:19', - 'end_date' => '2025-07-13 22:56:19', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1082, - 'soldier_id' => 100, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-12 01:13:37', - 'end_date' => '2025-07-12 02:13:37', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1083, - 'soldier_id' => 100, - 'constraint_type' => 'School', - 'start_date' => '2025-07-20 03:03:20', - 'end_date' => '2025-07-20 05:03:20', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1084, - 'soldier_id' => 100, - 'constraint_type' => 'School', - 'start_date' => '2025-07-12 22:27:01', - 'end_date' => '2025-07-13 01:27:01', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1085, - 'soldier_id' => 100, - 'constraint_type' => 'School', - 'start_date' => '2025-07-11 00:47:54', - 'end_date' => '2025-07-11 05:47:54', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1086, - 'soldier_id' => 77, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-28 23:10:50', - 'end_date' => '2025-07-29 00:10:50', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1087, - 'soldier_id' => 77, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-27 11:18:20', - 'end_date' => '2025-07-27 15:18:20', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1088, - 'soldier_id' => 77, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-24 10:49:56', - 'end_date' => '2025-07-24 11:49:56', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1089, - 'soldier_id' => 77, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-19 04:44:28', - 'end_date' => '2025-07-19 09:44:28', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1090, - 'soldier_id' => 77, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-29 01:25:37', - 'end_date' => '2025-07-29 04:25:37', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1091, - 'soldier_id' => 77, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-24 20:21:55', - 'end_date' => '2025-07-24 21:21:55', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1092, - 'soldier_id' => 77, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-05 03:28:18', - 'end_date' => '2025-07-05 05:28:18', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1093, - 'soldier_id' => 77, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-22 14:05:54', - 'end_date' => '2025-07-22 19:05:54', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1094, - 'soldier_id' => 77, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-16 18:33:36', - 'end_date' => '2025-07-16 23:33:36', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1095, - 'soldier_id' => 77, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-16 16:43:03', - 'end_date' => '2025-07-16 20:43:03', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1096, - 'soldier_id' => 77, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-12 20:52:51', - 'end_date' => '2025-07-12 21:52:51', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1097, - 'soldier_id' => 77, - 'constraint_type' => 'School', - 'start_date' => '2025-07-19 04:00:58', - 'end_date' => '2025-07-19 05:00:58', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1098, - 'soldier_id' => 77, - 'constraint_type' => 'School', - 'start_date' => '2025-07-11 21:30:33', - 'end_date' => '2025-07-12 02:30:33', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1099, - 'soldier_id' => 77, - 'constraint_type' => 'School', - 'start_date' => '2025-07-20 18:51:23', - 'end_date' => '2025-07-20 22:51:23', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1100, - 'soldier_id' => 147, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-27 13:33:50', - 'end_date' => '2025-07-27 14:33:50', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1101, - 'soldier_id' => 147, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-25 14:02:09', - 'end_date' => '2025-07-25 15:02:09', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1102, - 'soldier_id' => 147, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-05 06:05:50', - 'end_date' => '2025-07-05 08:05:50', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1103, - 'soldier_id' => 147, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-05 09:20:29', - 'end_date' => '2025-07-05 11:20:29', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1104, - 'soldier_id' => 147, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-02 09:20:35', - 'end_date' => '2025-07-02 12:20:35', - 'created_at' => '2025-05-13T06:41:42.000000Z', - 'updated_at' => '2025-05-13T06:41:42.000000Z', - ], - [ - 'id' => 1105, - 'soldier_id' => 147, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-05 01:40:48', - 'end_date' => '2025-07-05 02:40:48', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1106, - 'soldier_id' => 147, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-12 20:28:53', - 'end_date' => '2025-07-12 21:28:53', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1107, - 'soldier_id' => 147, - 'constraint_type' => 'School', - 'start_date' => '2025-07-15 09:12:11', - 'end_date' => '2025-07-15 11:12:11', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1108, - 'soldier_id' => 92, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-27 20:16:41', - 'end_date' => '2025-07-28 01:16:41', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1109, - 'soldier_id' => 92, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-18 22:52:34', - 'end_date' => '2025-07-19 01:52:34', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1110, - 'soldier_id' => 92, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-27 15:21:04', - 'end_date' => '2025-07-27 20:21:04', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1111, - 'soldier_id' => 92, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-28 19:43:42', - 'end_date' => '2025-07-28 21:43:42', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1112, - 'soldier_id' => 92, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-13 20:09:31', - 'end_date' => '2025-07-14 01:09:31', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1113, - 'soldier_id' => 92, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-28 23:48:47', - 'end_date' => '2025-07-29 01:48:47', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1114, - 'soldier_id' => 92, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-15 08:07:24', - 'end_date' => '2025-07-15 10:07:24', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1115, - 'soldier_id' => 92, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-17 15:49:10', - 'end_date' => '2025-07-17 16:49:10', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1116, - 'soldier_id' => 92, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-17 22:27:49', - 'end_date' => '2025-07-18 00:27:49', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1117, - 'soldier_id' => 92, - 'constraint_type' => 'School', - 'start_date' => '2025-07-26 07:59:19', - 'end_date' => '2025-07-26 11:59:19', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1118, - 'soldier_id' => 92, - 'constraint_type' => 'School', - 'start_date' => '2025-07-30 20:36:48', - 'end_date' => '2025-08-01 01:36:48', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1119, - 'soldier_id' => 92, - 'constraint_type' => 'School', - 'start_date' => '2025-07-09 18:09:54', - 'end_date' => '2025-07-09 23:09:54', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1120, - 'soldier_id' => 92, - 'constraint_type' => 'School', - 'start_date' => '2025-07-16 08:13:21', - 'end_date' => '2025-07-16 11:13:21', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1121, - 'soldier_id' => 149, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-21 20:45:27', - 'end_date' => '2025-07-21 21:45:27', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1122, - 'soldier_id' => 149, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-29 05:48:27', - 'end_date' => '2025-07-29 07:48:27', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1123, - 'soldier_id' => 149, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-30 21:26:15', - 'end_date' => '2025-08-01 01:26:15', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1124, - 'soldier_id' => 149, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-02 20:16:22', - 'end_date' => '2025-07-02 23:16:22', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1125, - 'soldier_id' => 149, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-06 20:49:59', - 'end_date' => '2025-07-07 00:49:59', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1126, - 'soldier_id' => 149, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-03 20:13:18', - 'end_date' => '2025-07-04 01:13:18', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1127, - 'soldier_id' => 149, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-26 20:15:50', - 'end_date' => '2025-07-26 21:15:50', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1128, - 'soldier_id' => 149, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-29 08:11:51', - 'end_date' => '2025-07-29 11:11:51', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1129, - 'soldier_id' => 149, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-18 13:01:12', - 'end_date' => '2025-07-18 15:01:12', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1130, - 'soldier_id' => 149, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-28 03:46:09', - 'end_date' => '2025-07-28 07:46:09', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1131, - 'soldier_id' => 149, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-23 07:07:39', - 'end_date' => '2025-07-23 09:07:39', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1132, - 'soldier_id' => 149, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-08 06:35:28', - 'end_date' => '2025-07-08 11:35:28', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1133, - 'soldier_id' => 149, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-24 23:40:30', - 'end_date' => '2025-07-25 02:40:30', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1134, - 'soldier_id' => 149, - 'constraint_type' => 'School', - 'start_date' => '2025-07-17 11:31:55', - 'end_date' => '2025-07-17 14:31:55', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1135, - 'soldier_id' => 149, - 'constraint_type' => 'School', - 'start_date' => '2025-07-26 09:58:18', - 'end_date' => '2025-07-26 10:58:18', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1136, - 'soldier_id' => 149, - 'constraint_type' => 'School', - 'start_date' => '2025-07-19 05:00:13', - 'end_date' => '2025-07-19 07:00:13', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1137, - 'soldier_id' => 149, - 'constraint_type' => 'School', - 'start_date' => '2025-07-18 18:55:19', - 'end_date' => '2025-07-18 20:55:19', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1138, - 'soldier_id' => 12, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-24 13:22:54', - 'end_date' => '2025-07-24 18:22:54', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1139, - 'soldier_id' => 12, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-23 02:30:06', - 'end_date' => '2025-07-23 05:30:06', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1140, - 'soldier_id' => 12, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-04 22:06:19', - 'end_date' => '2025-07-04 23:06:19', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1141, - 'soldier_id' => 12, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-19 02:16:37', - 'end_date' => '2025-07-19 07:16:37', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1142, - 'soldier_id' => 12, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-12 04:22:07', - 'end_date' => '2025-07-12 06:22:07', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1143, - 'soldier_id' => 12, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-01 11:34:25', - 'end_date' => '2025-07-01 13:34:25', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1144, - 'soldier_id' => 12, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-21 01:16:34', - 'end_date' => '2025-07-21 06:16:34', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1145, - 'soldier_id' => 12, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-25 18:15:47', - 'end_date' => '2025-07-25 21:15:47', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1146, - 'soldier_id' => 12, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-12 05:43:20', - 'end_date' => '2025-07-12 06:43:20', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1147, - 'soldier_id' => 12, - 'constraint_type' => 'School', - 'start_date' => '2025-07-20 01:39:26', - 'end_date' => '2025-07-20 04:39:26', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1148, - 'soldier_id' => 114, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-20 16:20:35', - 'end_date' => '2025-07-20 20:20:35', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1149, - 'soldier_id' => 114, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-19 01:54:07', - 'end_date' => '2025-07-19 05:54:07', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1150, - 'soldier_id' => 114, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-01 22:12:55', - 'end_date' => '2025-07-02 01:12:55', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1151, - 'soldier_id' => 114, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-19 20:52:55', - 'end_date' => '2025-07-20 00:52:55', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1152, - 'soldier_id' => 114, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-06 02:03:32', - 'end_date' => '2025-07-06 05:03:32', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1153, - 'soldier_id' => 114, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-08 20:55:25', - 'end_date' => '2025-07-08 21:55:25', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1154, - 'soldier_id' => 114, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-23 22:40:43', - 'end_date' => '2025-07-24 01:40:43', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1155, - 'soldier_id' => 114, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-01 08:12:26', - 'end_date' => '2025-07-01 12:12:26', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1156, - 'soldier_id' => 114, - 'constraint_type' => 'School', - 'start_date' => '2025-07-18 22:57:42', - 'end_date' => '2025-07-19 03:57:42', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1157, - 'soldier_id' => 114, - 'constraint_type' => 'School', - 'start_date' => '2025-07-25 15:21:47', - 'end_date' => '2025-07-25 20:21:47', - 'created_at' => '2025-05-13T06:41:43.000000Z', - 'updated_at' => '2025-05-13T06:41:43.000000Z', - ], - [ - 'id' => 1158, - 'soldier_id' => 114, - 'constraint_type' => 'School', - 'start_date' => '2025-07-04 20:48:37', - 'end_date' => '2025-07-05 01:48:37', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1159, - 'soldier_id' => 16, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-13 14:30:53', - 'end_date' => '2025-07-13 17:30:53', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1160, - 'soldier_id' => 16, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-13 12:46:22', - 'end_date' => '2025-07-13 13:46:22', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1161, - 'soldier_id' => 16, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-09 15:20:32', - 'end_date' => '2025-07-09 17:20:32', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1162, - 'soldier_id' => 16, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-19 11:48:36', - 'end_date' => '2025-07-19 15:48:36', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1163, - 'soldier_id' => 16, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-27 18:21:15', - 'end_date' => '2025-07-27 20:21:15', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1164, - 'soldier_id' => 16, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-26 02:49:46', - 'end_date' => '2025-07-26 07:49:46', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1165, - 'soldier_id' => 16, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-15 20:45:06', - 'end_date' => '2025-07-15 21:45:06', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1166, - 'soldier_id' => 16, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-23 07:00:15', - 'end_date' => '2025-07-23 09:00:15', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1167, - 'soldier_id' => 16, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-27 01:09:52', - 'end_date' => '2025-07-27 04:09:52', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1168, - 'soldier_id' => 16, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-29 06:03:28', - 'end_date' => '2025-07-29 09:03:28', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1169, - 'soldier_id' => 16, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-19 06:36:18', - 'end_date' => '2025-07-19 07:36:18', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1170, - 'soldier_id' => 16, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-17 17:36:48', - 'end_date' => '2025-07-17 18:36:48', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1171, - 'soldier_id' => 16, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-22 07:35:52', - 'end_date' => '2025-07-22 12:35:52', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1172, - 'soldier_id' => 16, - 'constraint_type' => 'School', - 'start_date' => '2025-07-12 09:00:40', - 'end_date' => '2025-07-12 14:00:40', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1173, - 'soldier_id' => 16, - 'constraint_type' => 'School', - 'start_date' => '2025-07-20 08:38:35', - 'end_date' => '2025-07-20 13:38:35', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1174, - 'soldier_id' => 16, - 'constraint_type' => 'School', - 'start_date' => '2025-07-30 17:23:08', - 'end_date' => '2025-07-30 19:23:08', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1175, - 'soldier_id' => 16, - 'constraint_type' => 'School', - 'start_date' => '2025-07-10 14:18:07', - 'end_date' => '2025-07-10 17:18:07', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1176, - 'soldier_id' => 101, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-28 19:12:26', - 'end_date' => '2025-07-29 00:12:26', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1177, - 'soldier_id' => 101, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-03 11:25:41', - 'end_date' => '2025-07-03 12:25:41', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1178, - 'soldier_id' => 101, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-16 15:49:21', - 'end_date' => '2025-07-16 19:49:21', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1179, - 'soldier_id' => 101, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-25 05:11:31', - 'end_date' => '2025-07-25 10:11:31', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1180, - 'soldier_id' => 101, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-17 06:13:47', - 'end_date' => '2025-07-17 11:13:47', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1181, - 'soldier_id' => 101, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-01 03:38:25', - 'end_date' => '2025-07-01 08:38:25', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1182, - 'soldier_id' => 101, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-03 20:26:18', - 'end_date' => '2025-07-03 21:26:18', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1183, - 'soldier_id' => 101, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-21 06:40:57', - 'end_date' => '2025-07-21 11:40:57', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1184, - 'soldier_id' => 101, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-23 20:48:48', - 'end_date' => '2025-07-24 01:48:48', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1185, - 'soldier_id' => 101, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-05 20:01:51', - 'end_date' => '2025-07-05 23:01:51', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1186, - 'soldier_id' => 101, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-12 04:51:35', - 'end_date' => '2025-07-12 05:51:35', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1187, - 'soldier_id' => 101, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-29 13:15:57', - 'end_date' => '2025-07-29 16:15:57', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1188, - 'soldier_id' => 101, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-17 15:13:11', - 'end_date' => '2025-07-17 18:13:11', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1189, - 'soldier_id' => 101, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-10 14:26:42', - 'end_date' => '2025-07-10 15:26:42', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1190, - 'soldier_id' => 101, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-09 00:05:07', - 'end_date' => '2025-07-09 05:05:07', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1191, - 'soldier_id' => 101, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-07 06:28:41', - 'end_date' => '2025-07-07 08:28:41', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1192, - 'soldier_id' => 13, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-27 14:36:15', - 'end_date' => '2025-07-27 18:36:15', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1193, - 'soldier_id' => 13, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-26 08:23:26', - 'end_date' => '2025-07-26 13:23:26', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1194, - 'soldier_id' => 13, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-06 20:48:43', - 'end_date' => '2025-07-07 00:48:43', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1195, - 'soldier_id' => 13, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-29 08:04:53', - 'end_date' => '2025-07-29 12:04:53', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1196, - 'soldier_id' => 13, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-02 04:51:16', - 'end_date' => '2025-07-02 07:51:16', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1197, - 'soldier_id' => 13, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-11 16:56:39', - 'end_date' => '2025-07-11 19:56:39', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1198, - 'soldier_id' => 13, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-22 20:51:22', - 'end_date' => '2025-07-23 01:51:22', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1199, - 'soldier_id' => 13, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-12 04:32:41', - 'end_date' => '2025-07-12 09:32:41', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1200, - 'soldier_id' => 13, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-23 12:34:02', - 'end_date' => '2025-07-23 17:34:02', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1201, - 'soldier_id' => 13, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-07 12:05:51', - 'end_date' => '2025-07-07 16:05:51', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1202, - 'soldier_id' => 13, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-21 17:51:16', - 'end_date' => '2025-07-21 18:51:16', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1203, - 'soldier_id' => 13, - 'constraint_type' => 'School', - 'start_date' => '2025-07-10 04:23:53', - 'end_date' => '2025-07-10 09:23:53', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1204, - 'soldier_id' => 13, - 'constraint_type' => 'School', - 'start_date' => '2025-07-03 02:34:49', - 'end_date' => '2025-07-03 03:34:49', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1205, - 'soldier_id' => 13, - 'constraint_type' => 'School', - 'start_date' => '2025-07-04 08:32:13', - 'end_date' => '2025-07-04 12:32:13', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1206, - 'soldier_id' => 13, - 'constraint_type' => 'School', - 'start_date' => '2025-07-12 16:24:08', - 'end_date' => '2025-07-12 21:24:08', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1207, - 'soldier_id' => 112, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-07 01:02:13', - 'end_date' => '2025-07-07 02:02:13', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1208, - 'soldier_id' => 112, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-22 03:33:14', - 'end_date' => '2025-07-22 07:33:14', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1209, - 'soldier_id' => 112, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-01 12:09:01', - 'end_date' => '2025-07-01 14:09:01', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1210, - 'soldier_id' => 112, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-06 06:04:17', - 'end_date' => '2025-07-06 08:04:17', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1211, - 'soldier_id' => 112, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-10 02:29:31', - 'end_date' => '2025-07-10 03:29:31', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1212, - 'soldier_id' => 112, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-14 21:23:52', - 'end_date' => '2025-07-14 23:23:52', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1213, - 'soldier_id' => 112, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-19 20:24:08', - 'end_date' => '2025-07-19 22:24:08', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1214, - 'soldier_id' => 112, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-12 20:21:08', - 'end_date' => '2025-07-12 22:21:08', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1215, - 'soldier_id' => 112, - 'constraint_type' => 'School', - 'start_date' => '2025-07-30 13:07:05', - 'end_date' => '2025-07-30 14:07:05', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1216, - 'soldier_id' => 112, - 'constraint_type' => 'School', - 'start_date' => '2025-07-28 08:15:32', - 'end_date' => '2025-07-28 13:15:32', - 'created_at' => '2025-05-13T06:41:44.000000Z', - 'updated_at' => '2025-05-13T06:41:44.000000Z', - ], - [ - 'id' => 1217, - 'soldier_id' => 127, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-13 13:49:28', - 'end_date' => '2025-07-13 18:49:28', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1218, - 'soldier_id' => 127, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-02 06:35:10', - 'end_date' => '2025-07-02 08:35:10', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1219, - 'soldier_id' => 127, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-13 07:57:00', - 'end_date' => '2025-07-13 12:57:00', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1220, - 'soldier_id' => 127, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-05 20:17:39', - 'end_date' => '2025-07-05 22:17:39', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1221, - 'soldier_id' => 127, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-08 07:02:46', - 'end_date' => '2025-07-08 12:02:46', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1222, - 'soldier_id' => 127, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-15 02:34:30', - 'end_date' => '2025-07-15 07:34:30', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1223, - 'soldier_id' => 127, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-15 20:08:29', - 'end_date' => '2025-07-15 22:08:29', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1224, - 'soldier_id' => 127, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-05 20:56:05', - 'end_date' => '2025-07-06 00:56:05', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1225, - 'soldier_id' => 127, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-08 16:20:07', - 'end_date' => '2025-07-08 20:20:07', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1226, - 'soldier_id' => 127, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-14 07:20:39', - 'end_date' => '2025-07-14 12:20:39', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1227, - 'soldier_id' => 127, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-08 17:39:22', - 'end_date' => '2025-07-08 22:39:22', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1228, - 'soldier_id' => 127, - 'constraint_type' => 'School', - 'start_date' => '2025-07-09 11:12:05', - 'end_date' => '2025-07-09 16:12:05', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1229, - 'soldier_id' => 127, - 'constraint_type' => 'School', - 'start_date' => '2025-07-09 01:02:12', - 'end_date' => '2025-07-09 04:02:12', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1230, - 'soldier_id' => 127, - 'constraint_type' => 'School', - 'start_date' => '2025-07-23 00:43:49', - 'end_date' => '2025-07-23 02:43:49', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1231, - 'soldier_id' => 131, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-30 20:47:58', - 'end_date' => '2025-07-30 22:47:58', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1232, - 'soldier_id' => 131, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-25 20:05:51', - 'end_date' => '2025-07-26 01:05:51', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1233, - 'soldier_id' => 131, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-06 01:12:03', - 'end_date' => '2025-07-06 03:12:03', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1234, - 'soldier_id' => 131, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-10 07:33:35', - 'end_date' => '2025-07-10 08:33:35', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1235, - 'soldier_id' => 131, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-25 20:26:07', - 'end_date' => '2025-07-26 00:26:07', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1236, - 'soldier_id' => 131, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-26 23:10:08', - 'end_date' => '2025-07-27 00:10:08', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1237, - 'soldier_id' => 131, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-26 20:33:05', - 'end_date' => '2025-07-26 21:33:05', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1238, - 'soldier_id' => 131, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-19 23:05:26', - 'end_date' => '2025-07-20 04:05:26', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1239, - 'soldier_id' => 131, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-29 21:15:15', - 'end_date' => '2025-07-30 01:15:15', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1240, - 'soldier_id' => 131, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-08 08:11:30', - 'end_date' => '2025-07-08 11:11:30', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1241, - 'soldier_id' => 131, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-09 23:30:29', - 'end_date' => '2025-07-10 02:30:29', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1242, - 'soldier_id' => 144, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-06 12:40:03', - 'end_date' => '2025-07-06 16:40:03', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1243, - 'soldier_id' => 144, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-20 05:31:48', - 'end_date' => '2025-07-20 10:31:48', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1244, - 'soldier_id' => 144, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-07 17:25:53', - 'end_date' => '2025-07-07 18:25:53', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1245, - 'soldier_id' => 144, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-17 13:44:48', - 'end_date' => '2025-07-17 16:44:48', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1246, - 'soldier_id' => 144, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-04 22:17:34', - 'end_date' => '2025-07-05 00:17:34', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1247, - 'soldier_id' => 144, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-29 03:23:20', - 'end_date' => '2025-07-29 04:23:20', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1248, - 'soldier_id' => 144, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-22 00:42:54', - 'end_date' => '2025-07-22 04:42:54', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1249, - 'soldier_id' => 144, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-10 22:05:58', - 'end_date' => '2025-07-11 02:05:58', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1250, - 'soldier_id' => 144, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-28 21:00:35', - 'end_date' => '2025-07-28 22:00:35', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1251, - 'soldier_id' => 144, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-08 03:16:58', - 'end_date' => '2025-07-08 07:16:58', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1252, - 'soldier_id' => 144, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-24 14:22:20', - 'end_date' => '2025-07-24 17:22:20', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1253, - 'soldier_id' => 144, - 'constraint_type' => 'School', - 'start_date' => '2025-07-03 23:53:24', - 'end_date' => '2025-07-04 04:53:24', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1254, - 'soldier_id' => 164, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-20 20:56:03', - 'end_date' => '2025-07-21 00:56:03', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1255, - 'soldier_id' => 164, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-30 18:47:08', - 'end_date' => '2025-07-30 20:47:08', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1256, - 'soldier_id' => 164, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-24 04:45:21', - 'end_date' => '2025-07-24 09:45:21', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1257, - 'soldier_id' => 164, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-23 10:17:37', - 'end_date' => '2025-07-23 13:17:37', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1258, - 'soldier_id' => 164, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-10 07:46:41', - 'end_date' => '2025-07-10 12:46:41', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1259, - 'soldier_id' => 164, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-26 13:04:55', - 'end_date' => '2025-07-26 15:04:55', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1260, - 'soldier_id' => 164, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-08 23:12:33', - 'end_date' => '2025-07-09 01:12:33', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1261, - 'soldier_id' => 164, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-06 20:38:50', - 'end_date' => '2025-07-06 23:38:50', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1262, - 'soldier_id' => 164, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-07 22:23:42', - 'end_date' => '2025-07-08 02:23:42', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1263, - 'soldier_id' => 164, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-08 20:20:57', - 'end_date' => '2025-07-08 22:20:57', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1264, - 'soldier_id' => 164, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-15 18:04:21', - 'end_date' => '2025-07-15 20:04:21', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1265, - 'soldier_id' => 164, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-30 04:01:22', - 'end_date' => '2025-07-30 05:01:22', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1266, - 'soldier_id' => 164, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-11 15:19:55', - 'end_date' => '2025-07-11 19:19:55', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1267, - 'soldier_id' => 164, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-21 08:12:56', - 'end_date' => '2025-07-21 11:12:56', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1268, - 'soldier_id' => 164, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-20 12:26:11', - 'end_date' => '2025-07-20 13:26:11', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1269, - 'soldier_id' => 40, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-07 19:37:38', - 'end_date' => '2025-07-08 00:37:38', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1270, - 'soldier_id' => 40, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-15 02:55:49', - 'end_date' => '2025-07-15 07:55:49', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1271, - 'soldier_id' => 40, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-25 04:56:27', - 'end_date' => '2025-07-25 09:56:27', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1272, - 'soldier_id' => 40, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-01 06:44:16', - 'end_date' => '2025-07-01 09:44:16', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1273, - 'soldier_id' => 40, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-21 19:46:52', - 'end_date' => '2025-07-21 21:46:52', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1274, - 'soldier_id' => 40, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-18 07:41:34', - 'end_date' => '2025-07-18 08:41:34', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1275, - 'soldier_id' => 40, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-23 20:21:16', - 'end_date' => '2025-07-23 21:21:16', - 'created_at' => '2025-05-13T06:41:45.000000Z', - 'updated_at' => '2025-05-13T06:41:45.000000Z', - ], - [ - 'id' => 1276, - 'soldier_id' => 40, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-26 02:16:57', - 'end_date' => '2025-07-26 05:16:57', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1277, - 'soldier_id' => 40, - 'constraint_type' => 'School', - 'start_date' => '2025-07-10 22:25:48', - 'end_date' => '2025-07-11 01:25:48', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1278, - 'soldier_id' => 40, - 'constraint_type' => 'School', - 'start_date' => '2025-07-22 06:38:17', - 'end_date' => '2025-07-22 08:38:17', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1279, - 'soldier_id' => 40, - 'constraint_type' => 'School', - 'start_date' => '2025-07-18 20:17:41', - 'end_date' => '2025-07-18 22:17:41', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1280, - 'soldier_id' => 116, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-27 07:21:30', - 'end_date' => '2025-07-27 10:21:30', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1281, - 'soldier_id' => 116, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-12 05:25:09', - 'end_date' => '2025-07-12 07:25:09', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1282, - 'soldier_id' => 116, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-26 11:57:57', - 'end_date' => '2025-07-26 12:57:57', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1283, - 'soldier_id' => 116, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-08 10:27:55', - 'end_date' => '2025-07-08 12:27:55', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1284, - 'soldier_id' => 116, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-14 00:16:13', - 'end_date' => '2025-07-14 05:16:13', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1285, - 'soldier_id' => 116, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-27 02:21:30', - 'end_date' => '2025-07-27 07:21:30', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1286, - 'soldier_id' => 116, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-05 20:53:44', - 'end_date' => '2025-07-06 01:53:44', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1287, - 'soldier_id' => 116, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-22 18:30:49', - 'end_date' => '2025-07-22 23:30:49', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1288, - 'soldier_id' => 116, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-05 00:53:13', - 'end_date' => '2025-07-05 05:53:13', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1289, - 'soldier_id' => 116, - 'constraint_type' => 'School', - 'start_date' => '2025-07-04 07:33:25', - 'end_date' => '2025-07-04 12:33:25', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1290, - 'soldier_id' => 116, - 'constraint_type' => 'School', - 'start_date' => '2025-07-05 13:31:12', - 'end_date' => '2025-07-05 16:31:12', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1291, - 'soldier_id' => 88, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-01 03:03:48', - 'end_date' => '2025-07-01 08:03:48', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1292, - 'soldier_id' => 88, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-01 12:06:30', - 'end_date' => '2025-07-01 13:06:30', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1293, - 'soldier_id' => 88, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-29 07:35:18', - 'end_date' => '2025-07-29 09:35:18', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1294, - 'soldier_id' => 88, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-28 07:11:21', - 'end_date' => '2025-07-28 10:11:21', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1295, - 'soldier_id' => 88, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-16 04:40:54', - 'end_date' => '2025-07-16 09:40:54', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1296, - 'soldier_id' => 88, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-10 20:24:41', - 'end_date' => '2025-07-11 00:24:41', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1297, - 'soldier_id' => 88, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-15 01:21:04', - 'end_date' => '2025-07-15 03:21:04', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1298, - 'soldier_id' => 88, - 'constraint_type' => 'School', - 'start_date' => '2025-07-18 12:50:36', - 'end_date' => '2025-07-18 13:50:36', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1299, - 'soldier_id' => 88, - 'constraint_type' => 'School', - 'start_date' => '2025-07-07 19:25:25', - 'end_date' => '2025-07-07 21:25:25', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1300, - 'soldier_id' => 88, - 'constraint_type' => 'School', - 'start_date' => '2025-07-25 01:54:46', - 'end_date' => '2025-07-25 04:54:46', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1301, - 'soldier_id' => 146, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-02 10:23:54', - 'end_date' => '2025-07-02 11:23:54', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1302, - 'soldier_id' => 146, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-20 06:25:15', - 'end_date' => '2025-07-20 07:25:15', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1303, - 'soldier_id' => 146, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-09 17:59:39', - 'end_date' => '2025-07-09 19:59:39', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1304, - 'soldier_id' => 146, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-14 15:23:04', - 'end_date' => '2025-07-14 20:23:04', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1305, - 'soldier_id' => 146, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-12 20:03:55', - 'end_date' => '2025-07-13 00:03:55', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1306, - 'soldier_id' => 146, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-29 08:55:13', - 'end_date' => '2025-07-29 09:55:13', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1307, - 'soldier_id' => 146, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-17 11:33:36', - 'end_date' => '2025-07-17 16:33:36', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1308, - 'soldier_id' => 146, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-12 18:59:34', - 'end_date' => '2025-07-12 22:59:34', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1309, - 'soldier_id' => 146, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-21 05:24:23', - 'end_date' => '2025-07-21 08:24:23', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1310, - 'soldier_id' => 146, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-09 19:18:08', - 'end_date' => '2025-07-09 21:18:08', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1311, - 'soldier_id' => 146, - 'constraint_type' => 'School', - 'start_date' => '2025-07-19 04:10:09', - 'end_date' => '2025-07-19 07:10:09', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1312, - 'soldier_id' => 146, - 'constraint_type' => 'School', - 'start_date' => '2025-07-21 05:10:03', - 'end_date' => '2025-07-21 08:10:03', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1313, - 'soldier_id' => 146, - 'constraint_type' => 'School', - 'start_date' => '2025-07-18 23:48:04', - 'end_date' => '2025-07-19 04:48:04', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1314, - 'soldier_id' => 146, - 'constraint_type' => 'School', - 'start_date' => '2025-07-10 02:59:33', - 'end_date' => '2025-07-10 04:59:33', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1315, - 'soldier_id' => 91, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-28 03:43:50', - 'end_date' => '2025-07-28 06:43:50', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1316, - 'soldier_id' => 91, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-01 14:30:41', - 'end_date' => '2025-07-01 15:30:41', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1317, - 'soldier_id' => 91, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-13 22:37:16', - 'end_date' => '2025-07-14 01:37:16', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1318, - 'soldier_id' => 91, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-02 23:24:02', - 'end_date' => '2025-07-03 03:24:02', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1319, - 'soldier_id' => 91, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-29 20:42:58', - 'end_date' => '2025-07-30 00:42:58', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1320, - 'soldier_id' => 91, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-22 20:59:19', - 'end_date' => '2025-07-22 22:59:19', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1321, - 'soldier_id' => 91, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-29 20:35:35', - 'end_date' => '2025-07-29 22:35:35', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1322, - 'soldier_id' => 91, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-02 19:22:46', - 'end_date' => '2025-07-02 22:22:46', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1323, - 'soldier_id' => 91, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-08 12:19:33', - 'end_date' => '2025-07-08 13:19:33', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1324, - 'soldier_id' => 91, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-14 03:21:35', - 'end_date' => '2025-07-14 07:21:35', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1325, - 'soldier_id' => 91, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-02 00:38:29', - 'end_date' => '2025-07-02 02:38:29', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1326, - 'soldier_id' => 91, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-20 13:07:11', - 'end_date' => '2025-07-20 18:07:11', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1327, - 'soldier_id' => 91, - 'constraint_type' => 'School', - 'start_date' => '2025-07-22 06:21:39', - 'end_date' => '2025-07-22 09:21:39', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1328, - 'soldier_id' => 91, - 'constraint_type' => 'School', - 'start_date' => '2025-07-08 13:30:00', - 'end_date' => '2025-07-08 17:30:00', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1329, - 'soldier_id' => 170, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-07 01:50:50', - 'end_date' => '2025-07-07 05:50:50', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1330, - 'soldier_id' => 170, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-27 08:31:08', - 'end_date' => '2025-07-27 10:31:08', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1331, - 'soldier_id' => 170, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-28 22:13:52', - 'end_date' => '2025-07-29 02:13:52', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1332, - 'soldier_id' => 170, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-08 10:28:01', - 'end_date' => '2025-07-08 12:28:01', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1333, - 'soldier_id' => 170, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-17 14:46:10', - 'end_date' => '2025-07-17 19:46:10', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1334, - 'soldier_id' => 170, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-02 08:53:33', - 'end_date' => '2025-07-02 12:53:33', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1335, - 'soldier_id' => 170, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-07 09:09:33', - 'end_date' => '2025-07-07 10:09:33', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1336, - 'soldier_id' => 170, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-04 18:59:24', - 'end_date' => '2025-07-04 20:59:24', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1337, - 'soldier_id' => 170, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-28 20:28:19', - 'end_date' => '2025-07-28 23:28:19', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1338, - 'soldier_id' => 170, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-28 23:09:19', - 'end_date' => '2025-07-29 00:09:19', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1339, - 'soldier_id' => 170, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-22 02:40:37', - 'end_date' => '2025-07-22 04:40:37', - 'created_at' => '2025-05-13T06:41:46.000000Z', - 'updated_at' => '2025-05-13T06:41:46.000000Z', - ], - [ - 'id' => 1340, - 'soldier_id' => 170, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-19 01:33:51', - 'end_date' => '2025-07-19 04:33:51', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1341, - 'soldier_id' => 170, - 'constraint_type' => 'School', - 'start_date' => '2025-07-18 22:24:49', - 'end_date' => '2025-07-19 02:24:49', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1342, - 'soldier_id' => 170, - 'constraint_type' => 'School', - 'start_date' => '2025-07-23 10:28:40', - 'end_date' => '2025-07-23 14:28:40', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1343, - 'soldier_id' => 122, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-26 11:58:21', - 'end_date' => '2025-07-26 13:58:21', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1344, - 'soldier_id' => 122, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-24 02:46:16', - 'end_date' => '2025-07-24 04:46:16', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1345, - 'soldier_id' => 122, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-12 10:23:37', - 'end_date' => '2025-07-12 13:23:37', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1346, - 'soldier_id' => 122, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-29 20:28:05', - 'end_date' => '2025-07-29 23:28:05', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1347, - 'soldier_id' => 122, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-12 23:08:44', - 'end_date' => '2025-07-13 02:08:44', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1348, - 'soldier_id' => 122, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-29 18:29:24', - 'end_date' => '2025-07-29 23:29:24', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1349, - 'soldier_id' => 122, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-27 18:09:57', - 'end_date' => '2025-07-27 21:09:57', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1350, - 'soldier_id' => 122, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-22 22:02:56', - 'end_date' => '2025-07-23 02:02:56', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1351, - 'soldier_id' => 122, - 'constraint_type' => 'School', - 'start_date' => '2025-07-21 11:10:54', - 'end_date' => '2025-07-21 15:10:54', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1352, - 'soldier_id' => 82, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-13 06:32:27', - 'end_date' => '2025-07-13 09:32:27', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1353, - 'soldier_id' => 82, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-07 05:17:36', - 'end_date' => '2025-07-07 08:17:36', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1354, - 'soldier_id' => 82, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-30 16:41:32', - 'end_date' => '2025-07-30 18:41:32', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1355, - 'soldier_id' => 82, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-30 16:39:31', - 'end_date' => '2025-07-30 18:39:31', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1356, - 'soldier_id' => 82, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-22 08:27:55', - 'end_date' => '2025-07-22 13:27:55', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1357, - 'soldier_id' => 82, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-02 06:05:12', - 'end_date' => '2025-07-02 07:05:12', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1358, - 'soldier_id' => 82, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-26 18:59:14', - 'end_date' => '2025-07-26 21:59:14', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1359, - 'soldier_id' => 82, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-02 19:30:38', - 'end_date' => '2025-07-03 00:30:38', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1360, - 'soldier_id' => 82, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-07 22:39:37', - 'end_date' => '2025-07-08 00:39:37', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1361, - 'soldier_id' => 82, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-25 12:17:07', - 'end_date' => '2025-07-25 13:17:07', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1362, - 'soldier_id' => 82, - 'constraint_type' => 'School', - 'start_date' => '2025-07-01 22:29:35', - 'end_date' => '2025-07-02 00:29:35', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1363, - 'soldier_id' => 82, - 'constraint_type' => 'School', - 'start_date' => '2025-07-14 04:32:14', - 'end_date' => '2025-07-14 06:32:14', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1364, - 'soldier_id' => 82, - 'constraint_type' => 'School', - 'start_date' => '2025-07-19 13:07:56', - 'end_date' => '2025-07-19 17:07:56', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1365, - 'soldier_id' => 82, - 'constraint_type' => 'School', - 'start_date' => '2025-07-03 15:06:58', - 'end_date' => '2025-07-03 18:06:58', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1366, - 'soldier_id' => 133, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-07 22:41:34', - 'end_date' => '2025-07-07 23:41:34', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1367, - 'soldier_id' => 133, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-01 22:34:51', - 'end_date' => '2025-07-02 00:34:51', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1368, - 'soldier_id' => 133, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-16 02:41:56', - 'end_date' => '2025-07-16 07:41:56', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1369, - 'soldier_id' => 133, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-26 20:14:53', - 'end_date' => '2025-07-27 00:14:53', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1370, - 'soldier_id' => 133, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-29 20:01:31', - 'end_date' => '2025-07-30 01:01:31', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1371, - 'soldier_id' => 133, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-02 20:33:43', - 'end_date' => '2025-07-02 22:33:43', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1372, - 'soldier_id' => 133, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-19 17:32:29', - 'end_date' => '2025-07-19 21:32:29', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1373, - 'soldier_id' => 133, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-19 03:01:35', - 'end_date' => '2025-07-19 07:01:35', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1374, - 'soldier_id' => 133, - 'constraint_type' => 'School', - 'start_date' => '2025-07-24 11:27:21', - 'end_date' => '2025-07-24 13:27:21', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1375, - 'soldier_id' => 133, - 'constraint_type' => 'School', - 'start_date' => '2025-07-26 03:48:49', - 'end_date' => '2025-07-26 07:48:49', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1376, - 'soldier_id' => 133, - 'constraint_type' => 'School', - 'start_date' => '2025-07-30 05:26:38', - 'end_date' => '2025-07-30 10:26:38', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1377, - 'soldier_id' => 166, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-21 01:04:36', - 'end_date' => '2025-07-21 02:04:36', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1378, - 'soldier_id' => 166, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-20 04:36:33', - 'end_date' => '2025-07-20 08:36:33', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1379, - 'soldier_id' => 166, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-20 13:01:36', - 'end_date' => '2025-07-20 18:01:36', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1380, - 'soldier_id' => 166, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-22 05:22:01', - 'end_date' => '2025-07-22 08:22:01', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1381, - 'soldier_id' => 166, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-30 11:12:40', - 'end_date' => '2025-07-30 15:12:40', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1382, - 'soldier_id' => 166, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-22 08:23:44', - 'end_date' => '2025-07-22 09:23:44', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1383, - 'soldier_id' => 166, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-18 20:59:06', - 'end_date' => '2025-07-18 22:59:06', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1384, - 'soldier_id' => 166, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-05 20:03:44', - 'end_date' => '2025-07-05 21:03:44', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1385, - 'soldier_id' => 166, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-29 06:02:38', - 'end_date' => '2025-07-29 08:02:38', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1386, - 'soldier_id' => 166, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-21 14:37:24', - 'end_date' => '2025-07-21 15:37:24', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1387, - 'soldier_id' => 166, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-17 07:43:18', - 'end_date' => '2025-07-17 11:43:18', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1388, - 'soldier_id' => 166, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-11 04:34:09', - 'end_date' => '2025-07-11 09:34:09', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1389, - 'soldier_id' => 166, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-24 11:49:56', - 'end_date' => '2025-07-24 13:49:56', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1390, - 'soldier_id' => 166, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-01 06:10:12', - 'end_date' => '2025-07-01 07:10:12', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1391, - 'soldier_id' => 5, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-20 16:58:12', - 'end_date' => '2025-07-20 17:58:12', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1392, - 'soldier_id' => 5, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-27 06:03:34', - 'end_date' => '2025-07-27 11:03:34', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1393, - 'soldier_id' => 5, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-27 00:59:30', - 'end_date' => '2025-07-27 02:59:30', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1394, - 'soldier_id' => 5, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-11 20:56:02', - 'end_date' => '2025-07-12 01:56:02', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1395, - 'soldier_id' => 5, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-19 20:30:18', - 'end_date' => '2025-07-19 22:30:18', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1396, - 'soldier_id' => 5, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-12 21:30:36', - 'end_date' => '2025-07-13 00:30:36', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1397, - 'soldier_id' => 5, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-04 13:03:26', - 'end_date' => '2025-07-04 15:03:26', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1398, - 'soldier_id' => 5, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-09 15:31:52', - 'end_date' => '2025-07-09 20:31:52', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1399, - 'soldier_id' => 5, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-22 13:42:09', - 'end_date' => '2025-07-22 17:42:09', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1400, - 'soldier_id' => 5, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-25 14:50:51', - 'end_date' => '2025-07-25 16:50:51', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1401, - 'soldier_id' => 5, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-24 18:36:11', - 'end_date' => '2025-07-24 23:36:11', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1402, - 'soldier_id' => 5, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-22 16:10:56', - 'end_date' => '2025-07-22 18:10:56', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1403, - 'soldier_id' => 5, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-13 11:24:50', - 'end_date' => '2025-07-13 12:24:50', - 'created_at' => '2025-05-13T06:41:47.000000Z', - 'updated_at' => '2025-05-13T06:41:47.000000Z', - ], - [ - 'id' => 1404, - 'soldier_id' => 5, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-12 03:32:43', - 'end_date' => '2025-07-12 05:32:43', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1405, - 'soldier_id' => 5, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-05 05:04:41', - 'end_date' => '2025-07-05 09:04:41', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1406, - 'soldier_id' => 5, - 'constraint_type' => 'School', - 'start_date' => '2025-07-08 19:53:50', - 'end_date' => '2025-07-08 21:53:50', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1407, - 'soldier_id' => 5, - 'constraint_type' => 'School', - 'start_date' => '2025-07-01 05:53:09', - 'end_date' => '2025-07-01 08:53:09', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1408, - 'soldier_id' => 5, - 'constraint_type' => 'School', - 'start_date' => '2025-07-10 19:22:55', - 'end_date' => '2025-07-10 20:22:55', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1409, - 'soldier_id' => 155, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-27 00:44:01', - 'end_date' => '2025-07-27 05:44:01', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1410, - 'soldier_id' => 155, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-21 03:04:26', - 'end_date' => '2025-07-21 07:04:26', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1411, - 'soldier_id' => 155, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-06 23:46:00', - 'end_date' => '2025-07-07 02:46:00', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1412, - 'soldier_id' => 155, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-22 15:03:57', - 'end_date' => '2025-07-22 18:03:57', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1413, - 'soldier_id' => 155, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-03 14:30:31', - 'end_date' => '2025-07-03 18:30:31', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1414, - 'soldier_id' => 155, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-28 20:06:52', - 'end_date' => '2025-07-28 21:06:52', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1415, - 'soldier_id' => 155, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-02 20:01:00', - 'end_date' => '2025-07-03 00:01:00', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1416, - 'soldier_id' => 155, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-26 20:46:37', - 'end_date' => '2025-07-27 01:46:37', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1417, - 'soldier_id' => 155, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-22 19:43:19', - 'end_date' => '2025-07-22 23:43:19', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1418, - 'soldier_id' => 155, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-11 13:46:45', - 'end_date' => '2025-07-11 14:46:45', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1419, - 'soldier_id' => 155, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-07 23:28:05', - 'end_date' => '2025-07-08 03:28:05', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1420, - 'soldier_id' => 155, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-27 23:41:33', - 'end_date' => '2025-07-28 04:41:33', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1421, - 'soldier_id' => 155, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-24 02:15:04', - 'end_date' => '2025-07-24 06:15:04', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1422, - 'soldier_id' => 155, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-26 18:56:56', - 'end_date' => '2025-07-26 21:56:56', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1423, - 'soldier_id' => 14, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-13 05:18:01', - 'end_date' => '2025-07-13 09:18:01', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1424, - 'soldier_id' => 14, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-08 19:54:46', - 'end_date' => '2025-07-08 21:54:46', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1425, - 'soldier_id' => 14, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-24 20:21:50', - 'end_date' => '2025-07-24 23:21:50', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1426, - 'soldier_id' => 14, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-21 07:18:33', - 'end_date' => '2025-07-21 12:18:33', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1427, - 'soldier_id' => 14, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-14 03:32:02', - 'end_date' => '2025-07-14 06:32:02', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1428, - 'soldier_id' => 14, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-03 21:35:15', - 'end_date' => '2025-07-04 00:35:15', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1429, - 'soldier_id' => 14, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-03 14:22:49', - 'end_date' => '2025-07-03 17:22:49', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1430, - 'soldier_id' => 37, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-13 09:20:51', - 'end_date' => '2025-07-13 10:20:51', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1431, - 'soldier_id' => 37, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-02 20:58:24', - 'end_date' => '2025-07-02 23:58:24', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1432, - 'soldier_id' => 37, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-14 04:04:15', - 'end_date' => '2025-07-14 08:04:15', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1433, - 'soldier_id' => 37, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-09 20:21:51', - 'end_date' => '2025-07-10 01:21:51', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1434, - 'soldier_id' => 37, - 'constraint_type' => 'School', - 'start_date' => '2025-07-29 15:04:18', - 'end_date' => '2025-07-29 16:04:18', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1435, - 'soldier_id' => 26, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-13 12:20:48', - 'end_date' => '2025-07-13 17:20:48', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1436, - 'soldier_id' => 26, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-27 13:01:40', - 'end_date' => '2025-07-27 16:01:40', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1437, - 'soldier_id' => 26, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-20 06:53:50', - 'end_date' => '2025-07-20 10:53:50', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1438, - 'soldier_id' => 26, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-23 01:19:08', - 'end_date' => '2025-07-23 04:19:08', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1439, - 'soldier_id' => 26, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-20 19:17:27', - 'end_date' => '2025-07-20 21:17:27', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1440, - 'soldier_id' => 26, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-11 12:13:21', - 'end_date' => '2025-07-11 17:13:21', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1441, - 'soldier_id' => 26, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-15 19:22:54', - 'end_date' => '2025-07-16 00:22:54', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1442, - 'soldier_id' => 26, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-15 16:18:35', - 'end_date' => '2025-07-15 19:18:35', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1443, - 'soldier_id' => 26, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-14 15:48:13', - 'end_date' => '2025-07-14 18:48:13', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1444, - 'soldier_id' => 26, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-15 08:56:20', - 'end_date' => '2025-07-15 12:56:20', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1445, - 'soldier_id' => 26, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-14 10:56:38', - 'end_date' => '2025-07-14 13:56:38', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1446, - 'soldier_id' => 26, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-02 09:09:16', - 'end_date' => '2025-07-02 12:09:16', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1447, - 'soldier_id' => 26, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-01 05:15:15', - 'end_date' => '2025-07-01 07:15:15', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1448, - 'soldier_id' => 26, - 'constraint_type' => 'School', - 'start_date' => '2025-07-20 09:49:47', - 'end_date' => '2025-07-20 13:49:47', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1449, - 'soldier_id' => 26, - 'constraint_type' => 'School', - 'start_date' => '2025-07-25 09:11:20', - 'end_date' => '2025-07-25 12:11:20', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1450, - 'soldier_id' => 26, - 'constraint_type' => 'School', - 'start_date' => '2025-07-19 22:06:12', - 'end_date' => '2025-07-19 23:06:12', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1451, - 'soldier_id' => 26, - 'constraint_type' => 'School', - 'start_date' => '2025-07-14 19:43:16', - 'end_date' => '2025-07-14 20:43:16', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1452, - 'soldier_id' => 87, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-13 13:38:03', - 'end_date' => '2025-07-13 16:38:03', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1453, - 'soldier_id' => 87, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-02 23:36:57', - 'end_date' => '2025-07-03 01:36:57', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1454, - 'soldier_id' => 87, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-02 06:42:15', - 'end_date' => '2025-07-02 09:42:15', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1455, - 'soldier_id' => 87, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-26 20:17:22', - 'end_date' => '2025-07-26 23:17:22', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1456, - 'soldier_id' => 87, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-25 10:42:50', - 'end_date' => '2025-07-25 13:42:50', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1457, - 'soldier_id' => 87, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-03 14:09:54', - 'end_date' => '2025-07-03 19:09:54', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1458, - 'soldier_id' => 87, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-13 03:53:22', - 'end_date' => '2025-07-13 08:53:22', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1459, - 'soldier_id' => 87, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-21 16:09:38', - 'end_date' => '2025-07-21 19:09:38', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1460, - 'soldier_id' => 87, - 'constraint_type' => 'School', - 'start_date' => '2025-07-27 12:52:13', - 'end_date' => '2025-07-27 16:52:13', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1461, - 'soldier_id' => 17, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-27 08:09:02', - 'end_date' => '2025-07-27 09:09:02', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1462, - 'soldier_id' => 17, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-14 16:05:29', - 'end_date' => '2025-07-14 19:05:29', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1463, - 'soldier_id' => 17, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-19 13:04:46', - 'end_date' => '2025-07-19 16:04:46', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1464, - 'soldier_id' => 17, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-30 00:01:03', - 'end_date' => '2025-07-30 02:01:03', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1465, - 'soldier_id' => 17, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-30 22:46:23', - 'end_date' => '2025-08-01 02:46:23', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1466, - 'soldier_id' => 17, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-28 04:27:15', - 'end_date' => '2025-07-28 05:27:15', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1467, - 'soldier_id' => 17, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-11 20:45:25', - 'end_date' => '2025-07-12 01:45:25', - 'created_at' => '2025-05-13T06:41:48.000000Z', - 'updated_at' => '2025-05-13T06:41:48.000000Z', - ], - [ - 'id' => 1468, - 'soldier_id' => 17, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-29 04:49:08', - 'end_date' => '2025-07-29 07:49:08', - 'created_at' => '2025-05-13T06:41:49.000000Z', - 'updated_at' => '2025-05-13T06:41:49.000000Z', - ], - [ - 'id' => 1469, - 'soldier_id' => 17, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-20 21:07:09', - 'end_date' => '2025-07-21 02:07:09', - 'created_at' => '2025-05-13T06:41:49.000000Z', - 'updated_at' => '2025-05-13T06:41:49.000000Z', - ], - [ - 'id' => 1470, - 'soldier_id' => 17, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-01 08:56:42', - 'end_date' => '2025-07-01 10:56:42', - 'created_at' => '2025-05-13T06:41:49.000000Z', - 'updated_at' => '2025-05-13T06:41:49.000000Z', - ], - [ - 'id' => 1471, - 'soldier_id' => 17, - 'constraint_type' => 'School', - 'start_date' => '2025-07-09 12:09:21', - 'end_date' => '2025-07-09 13:09:21', - 'created_at' => '2025-05-13T06:41:49.000000Z', - 'updated_at' => '2025-05-13T06:41:49.000000Z', - ], - [ - 'id' => 1472, - 'soldier_id' => 17, - 'constraint_type' => 'School', - 'start_date' => '2025-07-14 17:24:06', - 'end_date' => '2025-07-14 20:24:06', - 'created_at' => '2025-05-13T06:41:49.000000Z', - 'updated_at' => '2025-05-13T06:41:49.000000Z', - ], - [ - 'id' => 1473, - 'soldier_id' => 163, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-06 07:53:42', - 'end_date' => '2025-07-06 11:53:42', - 'created_at' => '2025-05-13T06:41:49.000000Z', - 'updated_at' => '2025-05-13T06:41:49.000000Z', - ], - [ - 'id' => 1474, - 'soldier_id' => 163, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-30 06:34:40', - 'end_date' => '2025-07-30 08:34:40', - 'created_at' => '2025-05-13T06:41:49.000000Z', - 'updated_at' => '2025-05-13T06:41:49.000000Z', - ], - [ - 'id' => 1475, - 'soldier_id' => 163, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-05 01:30:35', - 'end_date' => '2025-07-05 04:30:35', - 'created_at' => '2025-05-13T06:41:49.000000Z', - 'updated_at' => '2025-05-13T06:41:49.000000Z', - ], - [ - 'id' => 1476, - 'soldier_id' => 163, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-09 03:51:38', - 'end_date' => '2025-07-09 05:51:38', - 'created_at' => '2025-05-13T06:41:49.000000Z', - 'updated_at' => '2025-05-13T06:41:49.000000Z', - ], - [ - 'id' => 1477, - 'soldier_id' => 163, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-23 01:48:08', - 'end_date' => '2025-07-23 06:48:08', - 'created_at' => '2025-05-13T06:41:49.000000Z', - 'updated_at' => '2025-05-13T06:41:49.000000Z', - ], - [ - 'id' => 1478, - 'soldier_id' => 163, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-15 20:21:56', - 'end_date' => '2025-07-15 23:21:56', - 'created_at' => '2025-05-13T06:41:49.000000Z', - 'updated_at' => '2025-05-13T06:41:49.000000Z', - ], - [ - 'id' => 1479, - 'soldier_id' => 163, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-10 20:16:38', - 'end_date' => '2025-07-10 23:16:38', - 'created_at' => '2025-05-13T06:41:49.000000Z', - 'updated_at' => '2025-05-13T06:41:49.000000Z', - ], - [ - 'id' => 1480, - 'soldier_id' => 163, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-27 07:14:14', - 'end_date' => '2025-07-27 12:14:14', - 'created_at' => '2025-05-13T06:41:49.000000Z', - 'updated_at' => '2025-05-13T06:41:49.000000Z', - ], - [ - 'id' => 1481, - 'soldier_id' => 163, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-12 20:40:46', - 'end_date' => '2025-07-13 00:40:46', - 'created_at' => '2025-05-13T06:41:49.000000Z', - 'updated_at' => '2025-05-13T06:41:49.000000Z', - ], - [ - 'id' => 1482, - 'soldier_id' => 163, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-28 20:58:52', - 'end_date' => '2025-07-28 21:58:52', - 'created_at' => '2025-05-13T06:41:49.000000Z', - 'updated_at' => '2025-05-13T06:41:49.000000Z', - ], - [ - 'id' => 1483, - 'soldier_id' => 163, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-12 19:32:10', - 'end_date' => '2025-07-12 20:32:10', - 'created_at' => '2025-05-13T06:41:49.000000Z', - 'updated_at' => '2025-05-13T06:41:49.000000Z', - ], - [ - 'id' => 1484, - 'soldier_id' => 163, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-21 23:48:08', - 'end_date' => '2025-07-22 03:48:08', - 'created_at' => '2025-05-13T06:41:49.000000Z', - 'updated_at' => '2025-05-13T06:41:49.000000Z', - ], - [ - 'id' => 1485, - 'soldier_id' => 163, - 'constraint_type' => 'School', - 'start_date' => '2025-07-29 12:05:46', - 'end_date' => '2025-07-29 17:05:46', - 'created_at' => '2025-05-13T06:41:49.000000Z', - 'updated_at' => '2025-05-13T06:41:49.000000Z', - ], - [ - 'id' => 1486, - 'soldier_id' => 163, - 'constraint_type' => 'School', - 'start_date' => '2025-07-25 16:14:14', - 'end_date' => '2025-07-25 19:14:14', - 'created_at' => '2025-05-13T06:41:49.000000Z', - 'updated_at' => '2025-05-13T06:41:49.000000Z', - ], - [ - 'id' => 1487, - 'soldier_id' => 163, - 'constraint_type' => 'School', - 'start_date' => '2025-07-04 07:09:07', - 'end_date' => '2025-07-04 12:09:07', - 'created_at' => '2025-05-13T06:41:49.000000Z', - 'updated_at' => '2025-05-13T06:41:49.000000Z', - ], - [ - 'id' => 1488, - 'soldier_id' => 110, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-29 15:32:18', - 'end_date' => '2025-07-29 18:32:18', - 'created_at' => '2025-05-13T06:41:49.000000Z', - 'updated_at' => '2025-05-13T06:41:49.000000Z', - ], - [ - 'id' => 1489, - 'soldier_id' => 110, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-22 03:04:41', - 'end_date' => '2025-07-22 06:04:41', - 'created_at' => '2025-05-13T06:41:49.000000Z', - 'updated_at' => '2025-05-13T06:41:49.000000Z', - ], - [ - 'id' => 1490, - 'soldier_id' => 110, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-10 18:56:16', - 'end_date' => '2025-07-10 20:56:16', - 'created_at' => '2025-05-13T06:41:49.000000Z', - 'updated_at' => '2025-05-13T06:41:49.000000Z', - ], - [ - 'id' => 1491, - 'soldier_id' => 110, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-06 04:33:56', - 'end_date' => '2025-07-06 07:33:56', - 'created_at' => '2025-05-13T06:41:49.000000Z', - 'updated_at' => '2025-05-13T06:41:49.000000Z', - ], - [ - 'id' => 1492, - 'soldier_id' => 110, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-08 18:39:12', - 'end_date' => '2025-07-08 21:39:12', - 'created_at' => '2025-05-13T06:41:49.000000Z', - 'updated_at' => '2025-05-13T06:41:49.000000Z', - ], - [ - 'id' => 1493, - 'soldier_id' => 110, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-09 06:23:55', - 'end_date' => '2025-07-09 11:23:55', - 'created_at' => '2025-05-13T06:41:49.000000Z', - 'updated_at' => '2025-05-13T06:41:49.000000Z', - ], - [ - 'id' => 1494, - 'soldier_id' => 110, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-02 19:30:45', - 'end_date' => '2025-07-02 20:30:45', - 'created_at' => '2025-05-13T06:41:49.000000Z', - 'updated_at' => '2025-05-13T06:41:49.000000Z', - ], - [ - 'id' => 1495, - 'soldier_id' => 110, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-01 05:02:02', - 'end_date' => '2025-07-01 06:02:02', - 'created_at' => '2025-05-13T06:41:49.000000Z', - 'updated_at' => '2025-05-13T06:41:49.000000Z', - ], - [ - 'id' => 1496, - 'soldier_id' => 110, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-19 15:49:24', - 'end_date' => '2025-07-19 16:49:24', - 'created_at' => '2025-05-13T06:41:49.000000Z', - 'updated_at' => '2025-05-13T06:41:49.000000Z', - ], - [ - 'id' => 1497, - 'soldier_id' => 110, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-13 22:09:28', - 'end_date' => '2025-07-14 02:09:28', - 'created_at' => '2025-05-13T06:41:49.000000Z', - 'updated_at' => '2025-05-13T06:41:49.000000Z', - ], - [ - 'id' => 1498, - 'soldier_id' => 110, - 'constraint_type' => 'School', - 'start_date' => '2025-07-19 01:11:24', - 'end_date' => '2025-07-19 06:11:24', - 'created_at' => '2025-05-13T06:41:49.000000Z', - 'updated_at' => '2025-05-13T06:41:49.000000Z', - ], - [ - 'id' => 1499, - 'soldier_id' => 110, - 'constraint_type' => 'School', - 'start_date' => '2025-07-09 19:57:28', - 'end_date' => '2025-07-09 22:57:28', - 'created_at' => '2025-05-13T06:41:49.000000Z', - 'updated_at' => '2025-05-13T06:41:49.000000Z', - ], - [ - 'id' => 1500, - 'soldier_id' => 110, - 'constraint_type' => 'School', - 'start_date' => '2025-07-09 00:04:32', - 'end_date' => '2025-07-09 03:04:32', - 'created_at' => '2025-05-13T06:41:49.000000Z', - 'updated_at' => '2025-05-13T06:41:49.000000Z', - ], - [ - 'id' => 1501, - 'soldier_id' => 138, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-14 20:01:02', - 'end_date' => '2025-07-14 21:01:02', - 'created_at' => '2025-05-13T06:41:49.000000Z', - 'updated_at' => '2025-05-13T06:41:49.000000Z', - ], - [ - 'id' => 1502, - 'soldier_id' => 138, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-15 05:06:49', - 'end_date' => '2025-07-15 08:06:49', - 'created_at' => '2025-05-13T06:41:49.000000Z', - 'updated_at' => '2025-05-13T06:41:49.000000Z', - ], - [ - 'id' => 1503, - 'soldier_id' => 138, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-06 19:01:41', - 'end_date' => '2025-07-06 21:01:41', - 'created_at' => '2025-05-13T06:41:49.000000Z', - 'updated_at' => '2025-05-13T06:41:49.000000Z', - ], - [ - 'id' => 1504, - 'soldier_id' => 138, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-03 06:47:05', - 'end_date' => '2025-07-03 09:47:05', - 'created_at' => '2025-05-13T06:41:49.000000Z', - 'updated_at' => '2025-05-13T06:41:49.000000Z', - ], - [ - 'id' => 1505, - 'soldier_id' => 138, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-06 01:45:30', - 'end_date' => '2025-07-06 06:45:30', - 'created_at' => '2025-05-13T06:41:49.000000Z', - 'updated_at' => '2025-05-13T06:41:49.000000Z', - ], - [ - 'id' => 1506, - 'soldier_id' => 138, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-29 20:15:37', - 'end_date' => '2025-07-30 00:15:37', - 'created_at' => '2025-05-13T06:41:49.000000Z', - 'updated_at' => '2025-05-13T06:41:49.000000Z', - ], - [ - 'id' => 1507, - 'soldier_id' => 138, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-19 02:37:38', - 'end_date' => '2025-07-19 06:37:38', - 'created_at' => '2025-05-13T06:41:49.000000Z', - 'updated_at' => '2025-05-13T06:41:49.000000Z', - ], - [ - 'id' => 1508, - 'soldier_id' => 138, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-15 18:56:19', - 'end_date' => '2025-07-15 22:56:19', - 'created_at' => '2025-05-13T06:41:49.000000Z', - 'updated_at' => '2025-05-13T06:41:49.000000Z', - ], - [ - 'id' => 1509, - 'soldier_id' => 138, - 'constraint_type' => 'School', - 'start_date' => '2025-07-13 05:20:19', - 'end_date' => '2025-07-13 10:20:19', - 'created_at' => '2025-05-13T06:41:49.000000Z', - 'updated_at' => '2025-05-13T06:41:49.000000Z', - ], - [ - 'id' => 1510, - 'soldier_id' => 138, - 'constraint_type' => 'School', - 'start_date' => '2025-07-12 05:01:41', - 'end_date' => '2025-07-12 08:01:41', - 'created_at' => '2025-05-13T06:41:49.000000Z', - 'updated_at' => '2025-05-13T06:41:49.000000Z', - ], - [ - 'id' => 1511, - 'soldier_id' => 64, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-20 15:18:57', - 'end_date' => '2025-07-20 17:18:57', - 'created_at' => '2025-05-13T06:41:49.000000Z', - 'updated_at' => '2025-05-13T06:41:49.000000Z', - ], - [ - 'id' => 1512, - 'soldier_id' => 64, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-13 16:24:22', - 'end_date' => '2025-07-13 21:24:22', - 'created_at' => '2025-05-13T06:41:49.000000Z', - 'updated_at' => '2025-05-13T06:41:49.000000Z', - ], - [ - 'id' => 1513, - 'soldier_id' => 64, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-17 19:51:00', - 'end_date' => '2025-07-17 23:51:00', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1514, - 'soldier_id' => 64, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-01 22:53:22', - 'end_date' => '2025-07-02 01:53:22', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1515, - 'soldier_id' => 64, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-10 04:08:09', - 'end_date' => '2025-07-10 06:08:09', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1516, - 'soldier_id' => 64, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-28 20:37:18', - 'end_date' => '2025-07-28 23:37:18', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1517, - 'soldier_id' => 64, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-08 23:44:09', - 'end_date' => '2025-07-09 02:44:09', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1518, - 'soldier_id' => 64, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-09 20:55:35', - 'end_date' => '2025-07-09 22:55:35', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1519, - 'soldier_id' => 64, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-26 04:29:24', - 'end_date' => '2025-07-26 09:29:24', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1520, - 'soldier_id' => 64, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-29 18:39:26', - 'end_date' => '2025-07-29 23:39:26', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1521, - 'soldier_id' => 64, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-04 16:14:42', - 'end_date' => '2025-07-04 21:14:42', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1522, - 'soldier_id' => 64, - 'constraint_type' => 'School', - 'start_date' => '2025-07-08 08:51:18', - 'end_date' => '2025-07-08 12:51:18', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1523, - 'soldier_id' => 64, - 'constraint_type' => 'School', - 'start_date' => '2025-07-19 11:02:24', - 'end_date' => '2025-07-19 16:02:24', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1524, - 'soldier_id' => 64, - 'constraint_type' => 'School', - 'start_date' => '2025-07-25 03:57:52', - 'end_date' => '2025-07-25 08:57:52', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1525, - 'soldier_id' => 64, - 'constraint_type' => 'School', - 'start_date' => '2025-07-01 03:47:39', - 'end_date' => '2025-07-01 04:47:39', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1526, - 'soldier_id' => 173, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-10 16:02:34', - 'end_date' => '2025-07-10 19:02:34', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1527, - 'soldier_id' => 173, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-27 23:06:25', - 'end_date' => '2025-07-28 04:06:25', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1528, - 'soldier_id' => 173, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-29 00:30:11', - 'end_date' => '2025-07-29 05:30:11', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1529, - 'soldier_id' => 173, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-29 13:31:04', - 'end_date' => '2025-07-29 16:31:04', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1530, - 'soldier_id' => 173, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-26 20:28:12', - 'end_date' => '2025-07-26 23:28:12', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1531, - 'soldier_id' => 173, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-02 00:35:40', - 'end_date' => '2025-07-02 02:35:40', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1532, - 'soldier_id' => 173, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-19 20:02:05', - 'end_date' => '2025-07-19 23:02:05', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1533, - 'soldier_id' => 173, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-26 05:05:00', - 'end_date' => '2025-07-26 06:05:00', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1534, - 'soldier_id' => 173, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-08 16:35:51', - 'end_date' => '2025-07-08 19:35:51', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1535, - 'soldier_id' => 173, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-12 06:05:49', - 'end_date' => '2025-07-12 08:05:49', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1536, - 'soldier_id' => 173, - 'constraint_type' => 'School', - 'start_date' => '2025-07-03 02:39:04', - 'end_date' => '2025-07-03 07:39:04', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1537, - 'soldier_id' => 173, - 'constraint_type' => 'School', - 'start_date' => '2025-07-22 06:23:23', - 'end_date' => '2025-07-22 11:23:23', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1538, - 'soldier_id' => 173, - 'constraint_type' => 'School', - 'start_date' => '2025-07-04 11:52:13', - 'end_date' => '2025-07-04 13:52:13', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1539, - 'soldier_id' => 173, - 'constraint_type' => 'School', - 'start_date' => '2025-07-23 01:52:41', - 'end_date' => '2025-07-23 06:52:41', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1540, - 'soldier_id' => 124, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-21 20:44:07', - 'end_date' => '2025-07-21 23:44:07', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1541, - 'soldier_id' => 124, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-13 21:14:42', - 'end_date' => '2025-07-13 23:14:42', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1542, - 'soldier_id' => 124, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-15 06:26:17', - 'end_date' => '2025-07-15 10:26:17', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1543, - 'soldier_id' => 124, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-23 20:04:48', - 'end_date' => '2025-07-24 01:04:48', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1544, - 'soldier_id' => 124, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-18 23:33:05', - 'end_date' => '2025-07-19 02:33:05', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1545, - 'soldier_id' => 124, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-05 02:13:46', - 'end_date' => '2025-07-05 04:13:46', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1546, - 'soldier_id' => 124, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-06 01:53:50', - 'end_date' => '2025-07-06 03:53:50', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1547, - 'soldier_id' => 124, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-25 21:34:35', - 'end_date' => '2025-07-26 02:34:35', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1548, - 'soldier_id' => 124, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-13 17:36:49', - 'end_date' => '2025-07-13 19:36:49', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1549, - 'soldier_id' => 124, - 'constraint_type' => 'School', - 'start_date' => '2025-07-14 23:25:18', - 'end_date' => '2025-07-15 03:25:18', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1550, - 'soldier_id' => 124, - 'constraint_type' => 'School', - 'start_date' => '2025-07-26 18:58:53', - 'end_date' => '2025-07-26 19:58:53', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1551, - 'soldier_id' => 124, - 'constraint_type' => 'School', - 'start_date' => '2025-07-11 22:34:43', - 'end_date' => '2025-07-12 00:34:43', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1552, - 'soldier_id' => 62, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-28 05:46:14', - 'end_date' => '2025-07-28 10:46:14', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1553, - 'soldier_id' => 62, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-21 13:55:47', - 'end_date' => '2025-07-21 17:55:47', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1554, - 'soldier_id' => 62, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-13 22:55:09', - 'end_date' => '2025-07-14 02:55:09', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1555, - 'soldier_id' => 62, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-25 10:12:27', - 'end_date' => '2025-07-25 13:12:27', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1556, - 'soldier_id' => 62, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-21 22:08:22', - 'end_date' => '2025-07-21 23:08:22', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1557, - 'soldier_id' => 62, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-15 22:54:29', - 'end_date' => '2025-07-16 03:54:29', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1558, - 'soldier_id' => 62, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-12 21:42:07', - 'end_date' => '2025-07-13 02:42:07', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1559, - 'soldier_id' => 62, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-28 20:03:13', - 'end_date' => '2025-07-29 00:03:13', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1560, - 'soldier_id' => 62, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-19 20:07:25', - 'end_date' => '2025-07-20 01:07:25', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1561, - 'soldier_id' => 62, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-01 11:45:42', - 'end_date' => '2025-07-01 16:45:42', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1562, - 'soldier_id' => 62, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-04 04:17:47', - 'end_date' => '2025-07-04 06:17:47', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1563, - 'soldier_id' => 62, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-07 17:52:47', - 'end_date' => '2025-07-07 18:52:47', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1564, - 'soldier_id' => 62, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-29 02:20:00', - 'end_date' => '2025-07-29 06:20:00', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1565, - 'soldier_id' => 62, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-07 01:12:24', - 'end_date' => '2025-07-07 05:12:24', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1566, - 'soldier_id' => 23, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-06 07:34:46', - 'end_date' => '2025-07-06 08:34:46', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1567, - 'soldier_id' => 23, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-07 08:57:55', - 'end_date' => '2025-07-07 10:57:55', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1568, - 'soldier_id' => 23, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-22 12:59:14', - 'end_date' => '2025-07-22 17:59:14', - 'created_at' => '2025-05-13T06:41:50.000000Z', - 'updated_at' => '2025-05-13T06:41:50.000000Z', - ], - [ - 'id' => 1569, - 'soldier_id' => 23, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-21 00:14:37', - 'end_date' => '2025-07-21 02:14:37', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1570, - 'soldier_id' => 23, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-07 23:54:22', - 'end_date' => '2025-07-08 00:54:22', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1571, - 'soldier_id' => 23, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-10 22:37:36', - 'end_date' => '2025-07-11 03:37:36', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1572, - 'soldier_id' => 23, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-10 20:21:29', - 'end_date' => '2025-07-10 23:21:29', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1573, - 'soldier_id' => 23, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-26 15:32:57', - 'end_date' => '2025-07-26 20:32:57', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1574, - 'soldier_id' => 23, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-02 23:11:49', - 'end_date' => '2025-07-03 01:11:49', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1575, - 'soldier_id' => 23, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-09 09:54:32', - 'end_date' => '2025-07-09 12:54:32', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1576, - 'soldier_id' => 23, - 'constraint_type' => 'School', - 'start_date' => '2025-07-10 16:08:04', - 'end_date' => '2025-07-10 19:08:04', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1577, - 'soldier_id' => 106, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-14 20:59:17', - 'end_date' => '2025-07-15 01:59:17', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1578, - 'soldier_id' => 106, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-09 09:16:38', - 'end_date' => '2025-07-09 14:16:38', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1579, - 'soldier_id' => 106, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-08 03:23:04', - 'end_date' => '2025-07-08 06:23:04', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1580, - 'soldier_id' => 106, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-03 06:53:59', - 'end_date' => '2025-07-03 10:53:59', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1581, - 'soldier_id' => 106, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-02 20:19:40', - 'end_date' => '2025-07-03 01:19:40', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1582, - 'soldier_id' => 106, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-21 20:24:20', - 'end_date' => '2025-07-22 00:24:20', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1583, - 'soldier_id' => 106, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-29 20:23:46', - 'end_date' => '2025-07-29 21:23:46', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1584, - 'soldier_id' => 106, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-24 21:13:50', - 'end_date' => '2025-07-25 01:13:50', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1585, - 'soldier_id' => 106, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-19 01:00:53', - 'end_date' => '2025-07-19 03:00:53', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1586, - 'soldier_id' => 106, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-29 15:41:07', - 'end_date' => '2025-07-29 20:41:07', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1587, - 'soldier_id' => 106, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-04 18:59:13', - 'end_date' => '2025-07-04 19:59:13', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1588, - 'soldier_id' => 106, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-29 07:58:55', - 'end_date' => '2025-07-29 09:58:55', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1589, - 'soldier_id' => 106, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-18 15:32:49', - 'end_date' => '2025-07-18 17:32:49', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1590, - 'soldier_id' => 106, - 'constraint_type' => 'School', - 'start_date' => '2025-07-15 04:11:45', - 'end_date' => '2025-07-15 07:11:45', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1591, - 'soldier_id' => 106, - 'constraint_type' => 'School', - 'start_date' => '2025-07-17 11:39:41', - 'end_date' => '2025-07-17 16:39:41', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1592, - 'soldier_id' => 106, - 'constraint_type' => 'School', - 'start_date' => '2025-07-04 00:33:02', - 'end_date' => '2025-07-04 03:33:02', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1593, - 'soldier_id' => 6, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-23 04:15:02', - 'end_date' => '2025-07-23 07:15:02', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1594, - 'soldier_id' => 6, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-02 09:23:48', - 'end_date' => '2025-07-02 13:23:48', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1595, - 'soldier_id' => 6, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-23 20:33:14', - 'end_date' => '2025-07-23 23:33:14', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1596, - 'soldier_id' => 6, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-03 20:53:57', - 'end_date' => '2025-07-03 22:53:57', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1597, - 'soldier_id' => 6, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-09 05:39:30', - 'end_date' => '2025-07-09 09:39:30', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1598, - 'soldier_id' => 6, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-05 20:52:48', - 'end_date' => '2025-07-06 00:52:48', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1599, - 'soldier_id' => 6, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-22 11:06:02', - 'end_date' => '2025-07-22 14:06:02', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1600, - 'soldier_id' => 6, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-01 10:12:42', - 'end_date' => '2025-07-01 15:12:42', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1601, - 'soldier_id' => 6, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-04 17:09:46', - 'end_date' => '2025-07-04 20:09:46', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1602, - 'soldier_id' => 6, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-01 18:45:03', - 'end_date' => '2025-07-01 19:45:03', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1603, - 'soldier_id' => 6, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-05 11:38:24', - 'end_date' => '2025-07-05 15:38:24', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1604, - 'soldier_id' => 6, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-15 22:15:57', - 'end_date' => '2025-07-15 23:15:57', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1605, - 'soldier_id' => 6, - 'constraint_type' => 'School', - 'start_date' => '2025-07-12 16:48:24', - 'end_date' => '2025-07-12 19:48:24', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1606, - 'soldier_id' => 6, - 'constraint_type' => 'School', - 'start_date' => '2025-07-06 03:19:47', - 'end_date' => '2025-07-06 05:19:47', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1607, - 'soldier_id' => 6, - 'constraint_type' => 'School', - 'start_date' => '2025-07-20 15:31:30', - 'end_date' => '2025-07-20 19:31:30', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1608, - 'soldier_id' => 104, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-17 20:43:27', - 'end_date' => '2025-07-18 01:43:27', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1609, - 'soldier_id' => 104, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-08 20:32:47', - 'end_date' => '2025-07-08 22:32:47', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1610, - 'soldier_id' => 104, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-26 03:16:49', - 'end_date' => '2025-07-26 06:16:49', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1611, - 'soldier_id' => 104, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-23 14:48:44', - 'end_date' => '2025-07-23 18:48:44', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1612, - 'soldier_id' => 104, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-15 17:52:02', - 'end_date' => '2025-07-15 19:52:02', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1613, - 'soldier_id' => 104, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-17 00:09:30', - 'end_date' => '2025-07-17 01:09:30', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1614, - 'soldier_id' => 104, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-29 10:41:25', - 'end_date' => '2025-07-29 15:41:25', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1615, - 'soldier_id' => 104, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-24 13:13:33', - 'end_date' => '2025-07-24 16:13:33', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1616, - 'soldier_id' => 104, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-04 07:05:27', - 'end_date' => '2025-07-04 11:05:27', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1617, - 'soldier_id' => 104, - 'constraint_type' => 'School', - 'start_date' => '2025-07-18 16:24:50', - 'end_date' => '2025-07-18 18:24:50', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1618, - 'soldier_id' => 104, - 'constraint_type' => 'School', - 'start_date' => '2025-07-20 03:01:58', - 'end_date' => '2025-07-20 04:01:58', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1619, - 'soldier_id' => 119, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-14 08:07:56', - 'end_date' => '2025-07-14 13:07:56', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1620, - 'soldier_id' => 119, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-21 13:56:03', - 'end_date' => '2025-07-21 14:56:03', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1621, - 'soldier_id' => 119, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-29 01:01:38', - 'end_date' => '2025-07-29 05:01:38', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1622, - 'soldier_id' => 119, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-12 06:59:57', - 'end_date' => '2025-07-12 08:59:57', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1623, - 'soldier_id' => 119, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-07 20:24:06', - 'end_date' => '2025-07-07 21:24:06', - 'created_at' => '2025-05-13T06:41:51.000000Z', - 'updated_at' => '2025-05-13T06:41:51.000000Z', - ], - [ - 'id' => 1624, - 'soldier_id' => 119, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-12 20:58:53', - 'end_date' => '2025-07-13 01:58:53', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1625, - 'soldier_id' => 119, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-29 08:11:36', - 'end_date' => '2025-07-29 12:11:36', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1626, - 'soldier_id' => 119, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-13 00:49:42', - 'end_date' => '2025-07-13 02:49:42', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1627, - 'soldier_id' => 119, - 'constraint_type' => 'School', - 'start_date' => '2025-07-26 08:12:03', - 'end_date' => '2025-07-26 12:12:03', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1628, - 'soldier_id' => 119, - 'constraint_type' => 'School', - 'start_date' => '2025-07-04 16:48:16', - 'end_date' => '2025-07-04 19:48:16', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1629, - 'soldier_id' => 119, - 'constraint_type' => 'School', - 'start_date' => '2025-07-16 05:58:51', - 'end_date' => '2025-07-16 07:58:51', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1630, - 'soldier_id' => 76, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-25 09:39:33', - 'end_date' => '2025-07-25 14:39:33', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1631, - 'soldier_id' => 76, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-09 02:45:47', - 'end_date' => '2025-07-09 07:45:47', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1632, - 'soldier_id' => 76, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-26 20:51:30', - 'end_date' => '2025-07-26 23:51:30', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1633, - 'soldier_id' => 76, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-09 20:26:48', - 'end_date' => '2025-07-09 21:26:48', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1634, - 'soldier_id' => 76, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-12 20:07:45', - 'end_date' => '2025-07-12 23:07:45', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1635, - 'soldier_id' => 76, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-22 10:51:48', - 'end_date' => '2025-07-22 14:51:48', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1636, - 'soldier_id' => 76, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-26 00:44:28', - 'end_date' => '2025-07-26 05:44:28', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1637, - 'soldier_id' => 76, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-28 05:29:44', - 'end_date' => '2025-07-28 08:29:44', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1638, - 'soldier_id' => 76, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-09 13:30:14', - 'end_date' => '2025-07-09 14:30:14', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1639, - 'soldier_id' => 76, - 'constraint_type' => 'School', - 'start_date' => '2025-07-07 22:20:27', - 'end_date' => '2025-07-07 23:20:27', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1640, - 'soldier_id' => 76, - 'constraint_type' => 'School', - 'start_date' => '2025-07-02 00:06:27', - 'end_date' => '2025-07-02 02:06:27', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1641, - 'soldier_id' => 76, - 'constraint_type' => 'School', - 'start_date' => '2025-07-21 01:53:37', - 'end_date' => '2025-07-21 03:53:37', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1642, - 'soldier_id' => 76, - 'constraint_type' => 'School', - 'start_date' => '2025-07-04 08:09:15', - 'end_date' => '2025-07-04 11:09:15', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1643, - 'soldier_id' => 48, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-07 19:02:20', - 'end_date' => '2025-07-07 23:02:20', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1644, - 'soldier_id' => 48, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-07 13:30:17', - 'end_date' => '2025-07-07 17:30:17', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1645, - 'soldier_id' => 48, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-23 06:29:59', - 'end_date' => '2025-07-23 07:29:59', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1646, - 'soldier_id' => 48, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-05 05:55:07', - 'end_date' => '2025-07-05 08:55:07', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1647, - 'soldier_id' => 48, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-15 14:34:56', - 'end_date' => '2025-07-15 19:34:56', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1648, - 'soldier_id' => 48, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-19 03:06:24', - 'end_date' => '2025-07-19 08:06:24', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1649, - 'soldier_id' => 48, - 'constraint_type' => 'School', - 'start_date' => '2025-07-18 10:24:33', - 'end_date' => '2025-07-18 11:24:33', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1650, - 'soldier_id' => 48, - 'constraint_type' => 'School', - 'start_date' => '2025-07-24 01:18:20', - 'end_date' => '2025-07-24 02:18:20', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1651, - 'soldier_id' => 48, - 'constraint_type' => 'School', - 'start_date' => '2025-07-09 06:20:23', - 'end_date' => '2025-07-09 10:20:23', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1652, - 'soldier_id' => 48, - 'constraint_type' => 'School', - 'start_date' => '2025-07-20 02:01:33', - 'end_date' => '2025-07-20 07:01:33', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1653, - 'soldier_id' => 31, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-10 00:05:22', - 'end_date' => '2025-07-10 03:05:22', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1654, - 'soldier_id' => 31, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-08 17:33:49', - 'end_date' => '2025-07-08 20:33:49', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1655, - 'soldier_id' => 31, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-07 14:17:47', - 'end_date' => '2025-07-07 16:17:47', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1656, - 'soldier_id' => 31, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-29 20:10:53', - 'end_date' => '2025-07-29 22:10:53', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1657, - 'soldier_id' => 31, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-16 20:47:32', - 'end_date' => '2025-07-16 22:47:32', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1658, - 'soldier_id' => 31, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-08 15:49:27', - 'end_date' => '2025-07-08 20:49:27', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1659, - 'soldier_id' => 31, - 'constraint_type' => 'School', - 'start_date' => '2025-07-18 07:52:12', - 'end_date' => '2025-07-18 09:52:12', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1660, - 'soldier_id' => 154, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-21 07:46:42', - 'end_date' => '2025-07-21 09:46:42', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1661, - 'soldier_id' => 154, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-10 04:05:23', - 'end_date' => '2025-07-10 09:05:23', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1662, - 'soldier_id' => 154, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-22 20:08:04', - 'end_date' => '2025-07-23 00:08:04', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1663, - 'soldier_id' => 154, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-01 16:13:56', - 'end_date' => '2025-07-01 19:13:56', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1664, - 'soldier_id' => 44, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-28 12:47:52', - 'end_date' => '2025-07-28 13:47:52', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1665, - 'soldier_id' => 44, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-06 17:28:36', - 'end_date' => '2025-07-06 19:28:36', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1666, - 'soldier_id' => 44, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-03 16:51:51', - 'end_date' => '2025-07-03 20:51:51', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1667, - 'soldier_id' => 44, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-01 09:10:42', - 'end_date' => '2025-07-01 11:10:42', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1668, - 'soldier_id' => 44, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-17 13:19:29', - 'end_date' => '2025-07-17 18:19:29', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1669, - 'soldier_id' => 44, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-28 20:03:20', - 'end_date' => '2025-07-29 00:03:20', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1670, - 'soldier_id' => 44, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-27 20:48:04', - 'end_date' => '2025-07-27 22:48:04', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1671, - 'soldier_id' => 44, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-06 20:28:12', - 'end_date' => '2025-07-06 23:28:12', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1672, - 'soldier_id' => 44, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-05 20:20:49', - 'end_date' => '2025-07-05 21:20:49', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1673, - 'soldier_id' => 44, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-01 15:37:30', - 'end_date' => '2025-07-01 16:37:30', - 'created_at' => '2025-05-13T06:41:52.000000Z', - 'updated_at' => '2025-05-13T06:41:52.000000Z', - ], - [ - 'id' => 1674, - 'soldier_id' => 44, - 'constraint_type' => 'School', - 'start_date' => '2025-07-14 06:20:08', - 'end_date' => '2025-07-14 11:20:08', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1675, - 'soldier_id' => 44, - 'constraint_type' => 'School', - 'start_date' => '2025-07-03 21:40:06', - 'end_date' => '2025-07-03 23:40:06', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1676, - 'soldier_id' => 44, - 'constraint_type' => 'School', - 'start_date' => '2025-07-04 14:02:02', - 'end_date' => '2025-07-04 19:02:02', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1677, - 'soldier_id' => 117, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-21 12:51:18', - 'end_date' => '2025-07-21 17:51:18', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1678, - 'soldier_id' => 117, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-08 02:25:44', - 'end_date' => '2025-07-08 03:25:44', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1679, - 'soldier_id' => 117, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-29 07:30:17', - 'end_date' => '2025-07-29 11:30:17', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1680, - 'soldier_id' => 117, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-06 21:18:54', - 'end_date' => '2025-07-07 01:18:54', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1681, - 'soldier_id' => 117, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-23 21:35:50', - 'end_date' => '2025-07-23 22:35:50', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1682, - 'soldier_id' => 117, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-22 20:37:24', - 'end_date' => '2025-07-23 01:37:24', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1683, - 'soldier_id' => 117, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-05 20:46:29', - 'end_date' => '2025-07-05 23:46:29', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1684, - 'soldier_id' => 117, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-18 20:17:22', - 'end_date' => '2025-07-18 21:17:22', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1685, - 'soldier_id' => 117, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-12 05:04:18', - 'end_date' => '2025-07-12 07:04:18', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1686, - 'soldier_id' => 117, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-01 09:02:52', - 'end_date' => '2025-07-01 12:02:52', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1687, - 'soldier_id' => 117, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-17 02:57:10', - 'end_date' => '2025-07-17 04:57:10', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1688, - 'soldier_id' => 117, - 'constraint_type' => 'School', - 'start_date' => '2025-07-04 22:27:47', - 'end_date' => '2025-07-05 00:27:47', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1689, - 'soldier_id' => 117, - 'constraint_type' => 'School', - 'start_date' => '2025-07-16 01:19:21', - 'end_date' => '2025-07-16 03:19:21', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1690, - 'soldier_id' => 93, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-20 23:53:05', - 'end_date' => '2025-07-21 01:53:05', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1691, - 'soldier_id' => 93, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-13 01:03:47', - 'end_date' => '2025-07-13 06:03:47', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1692, - 'soldier_id' => 93, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-28 09:12:48', - 'end_date' => '2025-07-28 11:12:48', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1693, - 'soldier_id' => 93, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-08 02:26:36', - 'end_date' => '2025-07-08 03:26:36', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1694, - 'soldier_id' => 93, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-29 14:54:31', - 'end_date' => '2025-07-29 18:54:31', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1695, - 'soldier_id' => 93, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-30 00:24:41', - 'end_date' => '2025-07-30 05:24:41', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1696, - 'soldier_id' => 93, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-05 05:41:11', - 'end_date' => '2025-07-05 09:41:11', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1697, - 'soldier_id' => 93, - 'constraint_type' => 'School', - 'start_date' => '2025-07-20 19:14:12', - 'end_date' => '2025-07-20 22:14:12', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1698, - 'soldier_id' => 93, - 'constraint_type' => 'School', - 'start_date' => '2025-07-10 11:36:45', - 'end_date' => '2025-07-10 12:36:45', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1699, - 'soldier_id' => 93, - 'constraint_type' => 'School', - 'start_date' => '2025-07-14 18:03:59', - 'end_date' => '2025-07-14 21:03:59', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1700, - 'soldier_id' => 123, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-14 09:11:45', - 'end_date' => '2025-07-14 14:11:45', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1701, - 'soldier_id' => 123, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-24 10:03:23', - 'end_date' => '2025-07-24 11:03:23', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1702, - 'soldier_id' => 123, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-09 10:11:12', - 'end_date' => '2025-07-09 15:11:12', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1703, - 'soldier_id' => 123, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-10 08:05:35', - 'end_date' => '2025-07-10 11:05:35', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1704, - 'soldier_id' => 123, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-19 20:30:26', - 'end_date' => '2025-07-19 23:30:26', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1705, - 'soldier_id' => 123, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-27 22:09:30', - 'end_date' => '2025-07-28 03:09:30', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1706, - 'soldier_id' => 123, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-11 13:31:20', - 'end_date' => '2025-07-11 17:31:20', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1707, - 'soldier_id' => 123, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-27 12:26:44', - 'end_date' => '2025-07-27 14:26:44', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1708, - 'soldier_id' => 123, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-13 13:23:12', - 'end_date' => '2025-07-13 16:23:12', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1709, - 'soldier_id' => 123, - 'constraint_type' => 'School', - 'start_date' => '2025-07-02 23:41:48', - 'end_date' => '2025-07-03 02:41:48', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1710, - 'soldier_id' => 123, - 'constraint_type' => 'School', - 'start_date' => '2025-07-18 22:05:47', - 'end_date' => '2025-07-19 02:05:47', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1711, - 'soldier_id' => 156, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-06 19:05:34', - 'end_date' => '2025-07-06 20:05:34', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1712, - 'soldier_id' => 156, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-20 00:17:30', - 'end_date' => '2025-07-20 02:17:30', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1713, - 'soldier_id' => 156, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-12 21:39:33', - 'end_date' => '2025-07-13 00:39:33', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1714, - 'soldier_id' => 156, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-19 09:09:10', - 'end_date' => '2025-07-19 11:09:10', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1715, - 'soldier_id' => 156, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-12 20:44:52', - 'end_date' => '2025-07-12 21:44:52', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1716, - 'soldier_id' => 156, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-29 19:11:28', - 'end_date' => '2025-07-29 23:11:28', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1717, - 'soldier_id' => 156, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-14 14:21:16', - 'end_date' => '2025-07-14 15:21:16', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1718, - 'soldier_id' => 156, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-03 22:36:45', - 'end_date' => '2025-07-04 03:36:45', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1719, - 'soldier_id' => 156, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-06 20:38:42', - 'end_date' => '2025-07-06 22:38:42', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1720, - 'soldier_id' => 156, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-11 05:56:43', - 'end_date' => '2025-07-11 08:56:43', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1721, - 'soldier_id' => 156, - 'constraint_type' => 'School', - 'start_date' => '2025-07-03 08:57:26', - 'end_date' => '2025-07-03 12:57:26', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1722, - 'soldier_id' => 69, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-28 23:58:32', - 'end_date' => '2025-07-29 00:58:32', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1723, - 'soldier_id' => 69, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-12 00:56:03', - 'end_date' => '2025-07-12 01:56:03', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1724, - 'soldier_id' => 69, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-09 17:35:44', - 'end_date' => '2025-07-09 21:35:44', - 'created_at' => '2025-05-13T06:41:53.000000Z', - 'updated_at' => '2025-05-13T06:41:53.000000Z', - ], - [ - 'id' => 1725, - 'soldier_id' => 69, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-01 09:41:30', - 'end_date' => '2025-07-01 11:41:30', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1726, - 'soldier_id' => 69, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-16 15:25:26', - 'end_date' => '2025-07-16 18:25:26', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1727, - 'soldier_id' => 69, - 'constraint_type' => 'School', - 'start_date' => '2025-07-22 10:20:10', - 'end_date' => '2025-07-22 11:20:10', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1728, - 'soldier_id' => 69, - 'constraint_type' => 'School', - 'start_date' => '2025-07-08 12:02:11', - 'end_date' => '2025-07-08 14:02:11', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1729, - 'soldier_id' => 69, - 'constraint_type' => 'School', - 'start_date' => '2025-07-08 22:48:23', - 'end_date' => '2025-07-09 03:48:23', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1730, - 'soldier_id' => 69, - 'constraint_type' => 'School', - 'start_date' => '2025-07-13 03:22:49', - 'end_date' => '2025-07-13 06:22:49', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1731, - 'soldier_id' => 128, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-07 08:25:59', - 'end_date' => '2025-07-07 10:25:59', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1732, - 'soldier_id' => 128, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-13 19:22:53', - 'end_date' => '2025-07-13 21:22:53', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1733, - 'soldier_id' => 128, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-22 04:09:05', - 'end_date' => '2025-07-22 05:09:05', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1734, - 'soldier_id' => 128, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-17 23:19:04', - 'end_date' => '2025-07-18 01:19:04', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1735, - 'soldier_id' => 128, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-05 13:37:21', - 'end_date' => '2025-07-05 17:37:21', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1736, - 'soldier_id' => 128, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-17 10:07:08', - 'end_date' => '2025-07-17 12:07:08', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1737, - 'soldier_id' => 128, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-14 07:45:09', - 'end_date' => '2025-07-14 12:45:09', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1738, - 'soldier_id' => 128, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-26 20:23:54', - 'end_date' => '2025-07-26 22:23:54', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1739, - 'soldier_id' => 128, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-08 19:36:33', - 'end_date' => '2025-07-08 20:36:33', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1740, - 'soldier_id' => 128, - 'constraint_type' => 'School', - 'start_date' => '2025-07-08 16:51:14', - 'end_date' => '2025-07-08 19:51:14', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1741, - 'soldier_id' => 128, - 'constraint_type' => 'School', - 'start_date' => '2025-07-25 22:09:17', - 'end_date' => '2025-07-26 03:09:17', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1742, - 'soldier_id' => 128, - 'constraint_type' => 'School', - 'start_date' => '2025-07-18 21:59:12', - 'end_date' => '2025-07-18 22:59:12', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1743, - 'soldier_id' => 67, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-21 04:16:10', - 'end_date' => '2025-07-21 09:16:10', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1744, - 'soldier_id' => 67, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-29 16:22:01', - 'end_date' => '2025-07-29 20:22:01', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1745, - 'soldier_id' => 67, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-27 23:10:37', - 'end_date' => '2025-07-28 01:10:37', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1746, - 'soldier_id' => 67, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-12 19:54:45', - 'end_date' => '2025-07-12 23:54:45', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1747, - 'soldier_id' => 67, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-22 19:12:39', - 'end_date' => '2025-07-22 21:12:39', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1748, - 'soldier_id' => 67, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-20 23:14:57', - 'end_date' => '2025-07-21 03:14:57', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1749, - 'soldier_id' => 32, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-13 06:42:49', - 'end_date' => '2025-07-13 11:42:49', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1750, - 'soldier_id' => 32, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-06 22:33:39', - 'end_date' => '2025-07-07 02:33:39', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1751, - 'soldier_id' => 32, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-11 19:47:19', - 'end_date' => '2025-07-11 20:47:19', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1752, - 'soldier_id' => 32, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-10 13:35:15', - 'end_date' => '2025-07-10 15:35:15', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1753, - 'soldier_id' => 32, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-24 11:41:50', - 'end_date' => '2025-07-24 13:41:50', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1754, - 'soldier_id' => 32, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-07 20:42:10', - 'end_date' => '2025-07-08 01:42:10', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1755, - 'soldier_id' => 32, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-08 05:24:35', - 'end_date' => '2025-07-08 08:24:35', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1756, - 'soldier_id' => 32, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-20 05:07:24', - 'end_date' => '2025-07-20 10:07:24', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1757, - 'soldier_id' => 32, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-10 10:56:26', - 'end_date' => '2025-07-10 13:56:26', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1758, - 'soldier_id' => 32, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-15 13:54:43', - 'end_date' => '2025-07-15 18:54:43', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1759, - 'soldier_id' => 32, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-20 07:57:46', - 'end_date' => '2025-07-20 09:57:46', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1760, - 'soldier_id' => 32, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-10 13:55:02', - 'end_date' => '2025-07-10 14:55:02', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1761, - 'soldier_id' => 32, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-29 09:03:02', - 'end_date' => '2025-07-29 12:03:02', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1762, - 'soldier_id' => 32, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-22 03:07:49', - 'end_date' => '2025-07-22 05:07:49', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1763, - 'soldier_id' => 32, - 'constraint_type' => 'School', - 'start_date' => '2025-07-01 19:27:36', - 'end_date' => '2025-07-02 00:27:36', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1764, - 'soldier_id' => 32, - 'constraint_type' => 'School', - 'start_date' => '2025-07-04 08:21:12', - 'end_date' => '2025-07-04 13:21:12', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1765, - 'soldier_id' => 81, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-19 10:24:46', - 'end_date' => '2025-07-19 11:24:46', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1766, - 'soldier_id' => 81, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-24 22:07:28', - 'end_date' => '2025-07-24 23:07:28', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1767, - 'soldier_id' => 81, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-27 20:42:34', - 'end_date' => '2025-07-27 21:42:34', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1768, - 'soldier_id' => 81, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-21 20:04:17', - 'end_date' => '2025-07-21 23:04:17', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1769, - 'soldier_id' => 81, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-01 16:40:25', - 'end_date' => '2025-07-01 21:40:25', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1770, - 'soldier_id' => 81, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-06 16:07:06', - 'end_date' => '2025-07-06 17:07:06', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1771, - 'soldier_id' => 81, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-30 04:52:37', - 'end_date' => '2025-07-30 06:52:37', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1772, - 'soldier_id' => 81, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-21 01:16:16', - 'end_date' => '2025-07-21 06:16:16', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1773, - 'soldier_id' => 81, - 'constraint_type' => 'School', - 'start_date' => '2025-07-11 01:22:55', - 'end_date' => '2025-07-11 02:22:55', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1774, - 'soldier_id' => 81, - 'constraint_type' => 'School', - 'start_date' => '2025-07-01 04:59:44', - 'end_date' => '2025-07-01 09:59:44', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1775, - 'soldier_id' => 81, - 'constraint_type' => 'School', - 'start_date' => '2025-07-02 02:06:35', - 'end_date' => '2025-07-02 07:06:35', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1776, - 'soldier_id' => 8, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-13 08:26:34', - 'end_date' => '2025-07-13 10:26:34', - 'created_at' => '2025-05-13T06:41:54.000000Z', - 'updated_at' => '2025-05-13T06:41:54.000000Z', - ], - [ - 'id' => 1777, - 'soldier_id' => 8, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-13 20:29:32', - 'end_date' => '2025-07-13 21:29:32', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1778, - 'soldier_id' => 8, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-13 20:47:13', - 'end_date' => '2025-07-14 01:47:13', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1779, - 'soldier_id' => 8, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-18 12:34:08', - 'end_date' => '2025-07-18 14:34:08', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1780, - 'soldier_id' => 8, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-07 06:35:30', - 'end_date' => '2025-07-07 07:35:30', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1781, - 'soldier_id' => 8, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-23 21:36:30', - 'end_date' => '2025-07-24 01:36:30', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1782, - 'soldier_id' => 8, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-01 09:43:27', - 'end_date' => '2025-07-01 13:43:27', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1783, - 'soldier_id' => 8, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-19 03:27:30', - 'end_date' => '2025-07-19 08:27:30', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1784, - 'soldier_id' => 8, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-19 21:51:41', - 'end_date' => '2025-07-19 22:51:41', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1785, - 'soldier_id' => 73, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-27 08:23:45', - 'end_date' => '2025-07-27 11:23:45', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1786, - 'soldier_id' => 73, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-07 10:44:35', - 'end_date' => '2025-07-07 13:44:35', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1787, - 'soldier_id' => 73, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-29 20:51:45', - 'end_date' => '2025-07-29 21:51:45', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1788, - 'soldier_id' => 73, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-27 04:53:13', - 'end_date' => '2025-07-27 09:53:13', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1789, - 'soldier_id' => 73, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-21 05:07:54', - 'end_date' => '2025-07-21 09:07:54', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1790, - 'soldier_id' => 73, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-06 09:25:44', - 'end_date' => '2025-07-06 12:25:44', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1791, - 'soldier_id' => 73, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-03 03:16:49', - 'end_date' => '2025-07-03 04:16:49', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1792, - 'soldier_id' => 73, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-26 20:16:32', - 'end_date' => '2025-07-27 00:16:32', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1793, - 'soldier_id' => 73, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-22 14:32:27', - 'end_date' => '2025-07-22 18:32:27', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1794, - 'soldier_id' => 73, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-05 08:50:08', - 'end_date' => '2025-07-05 11:50:08', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1795, - 'soldier_id' => 73, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-30 21:03:09', - 'end_date' => '2025-08-01 01:03:09', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1796, - 'soldier_id' => 72, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-06 17:03:30', - 'end_date' => '2025-07-06 19:03:30', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1797, - 'soldier_id' => 72, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-26 00:56:11', - 'end_date' => '2025-07-26 03:56:11', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1798, - 'soldier_id' => 72, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-20 18:01:08', - 'end_date' => '2025-07-20 23:01:08', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1799, - 'soldier_id' => 72, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-11 10:27:02', - 'end_date' => '2025-07-11 13:27:02', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1800, - 'soldier_id' => 72, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-24 05:09:34', - 'end_date' => '2025-07-24 06:09:34', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1801, - 'soldier_id' => 72, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-30 08:51:17', - 'end_date' => '2025-07-30 09:51:17', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1802, - 'soldier_id' => 72, - 'constraint_type' => 'School', - 'start_date' => '2025-07-04 19:33:04', - 'end_date' => '2025-07-04 23:33:04', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1803, - 'soldier_id' => 72, - 'constraint_type' => 'School', - 'start_date' => '2025-07-28 01:18:00', - 'end_date' => '2025-07-28 03:18:00', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1804, - 'soldier_id' => 72, - 'constraint_type' => 'School', - 'start_date' => '2025-07-30 09:32:40', - 'end_date' => '2025-07-30 10:32:40', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1805, - 'soldier_id' => 125, - 'constraint_type' => 'Low priority not weekend', - 'start_date' => '2025-07-07 12:37:05', - 'end_date' => '2025-07-07 14:37:05', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1806, - 'soldier_id' => 125, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-21 17:29:47', - 'end_date' => '2025-07-21 22:29:47', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1807, - 'soldier_id' => 125, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-22 06:49:16', - 'end_date' => '2025-07-22 11:49:16', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1808, - 'soldier_id' => 125, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-03 10:35:16', - 'end_date' => '2025-07-03 12:35:16', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1809, - 'soldier_id' => 125, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-12 12:33:42', - 'end_date' => '2025-07-12 14:33:42', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1810, - 'soldier_id' => 125, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-21 22:51:07', - 'end_date' => '2025-07-22 02:51:07', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1811, - 'soldier_id' => 125, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-21 11:10:40', - 'end_date' => '2025-07-21 16:10:40', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1812, - 'soldier_id' => 125, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-08 22:49:57', - 'end_date' => '2025-07-09 03:49:57', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1813, - 'soldier_id' => 125, - 'constraint_type' => 'School', - 'start_date' => '2025-07-04 12:33:38', - 'end_date' => '2025-07-04 15:33:38', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1814, - 'soldier_id' => 125, - 'constraint_type' => 'School', - 'start_date' => '2025-07-26 22:47:03', - 'end_date' => '2025-07-26 23:47:03', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1815, - 'soldier_id' => 150, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-14 16:22:44', - 'end_date' => '2025-07-14 19:22:44', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1816, - 'soldier_id' => 150, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-26 17:50:38', - 'end_date' => '2025-07-26 22:50:38', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1817, - 'soldier_id' => 150, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-21 08:06:14', - 'end_date' => '2025-07-21 10:06:14', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1818, - 'soldier_id' => 150, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-24 20:42:29', - 'end_date' => '2025-07-24 21:42:29', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1819, - 'soldier_id' => 150, - 'constraint_type' => 'Not Thursday evening', - 'start_date' => '2025-07-19 04:28:35', - 'end_date' => '2025-07-19 06:28:35', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1820, - 'soldier_id' => 150, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-25 18:26:07', - 'end_date' => '2025-07-25 20:26:07', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1821, - 'soldier_id' => 150, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-13 06:00:25', - 'end_date' => '2025-07-13 07:00:25', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1822, - 'soldier_id' => 150, - 'constraint_type' => 'Medical', - 'start_date' => '2025-07-25 21:24:22', - 'end_date' => '2025-07-25 22:24:22', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1823, - 'soldier_id' => 86, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-29 14:43:05', - 'end_date' => '2025-07-29 16:43:05', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1824, - 'soldier_id' => 86, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-27 03:24:29', - 'end_date' => '2025-07-27 06:24:29', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1825, - 'soldier_id' => 86, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-16 23:38:19', - 'end_date' => '2025-07-17 02:38:19', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1826, - 'soldier_id' => 86, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-28 03:18:34', - 'end_date' => '2025-07-28 05:18:34', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1827, - 'soldier_id' => 86, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-17 19:43:02', - 'end_date' => '2025-07-17 20:43:02', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1828, - 'soldier_id' => 86, - 'constraint_type' => 'Low priority not task', - 'start_date' => '2025-07-16 12:10:00', - 'end_date' => '2025-07-16 17:10:00', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1829, - 'soldier_id' => 86, - 'constraint_type' => 'Not Sunday morning', - 'start_date' => '2025-07-15 10:47:19', - 'end_date' => '2025-07-15 13:47:19', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1830, - 'soldier_id' => 86, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-11 12:37:53', - 'end_date' => '2025-07-11 15:37:53', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1831, - 'soldier_id' => 86, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-23 02:33:03', - 'end_date' => '2025-07-23 04:33:03', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1832, - 'soldier_id' => 58, - 'constraint_type' => 'Not weekend', - 'start_date' => '2025-07-20 19:42:22', - 'end_date' => '2025-07-20 22:42:22', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1833, - 'soldier_id' => 58, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-05 11:09:19', - 'end_date' => '2025-07-05 14:09:19', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1834, - 'soldier_id' => 58, - 'constraint_type' => 'Not task', - 'start_date' => '2025-07-17 17:09:54', - 'end_date' => '2025-07-17 21:09:54', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1835, - 'soldier_id' => 58, - 'constraint_type' => 'Not evening', - 'start_date' => '2025-07-28 20:25:27', - 'end_date' => '2025-07-29 01:25:27', - 'created_at' => '2025-05-13T06:41:55.000000Z', - 'updated_at' => '2025-05-13T06:41:55.000000Z', - ], - [ - 'id' => 1836, - 'soldier_id' => 58, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-15 11:01:16', - 'end_date' => '2025-07-15 15:01:16', - 'created_at' => '2025-05-13T06:41:56.000000Z', - 'updated_at' => '2025-05-13T06:41:56.000000Z', - ], - [ - 'id' => 1837, - 'soldier_id' => 58, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-23 09:37:37', - 'end_date' => '2025-07-23 12:37:37', - 'created_at' => '2025-05-13T06:41:56.000000Z', - 'updated_at' => '2025-05-13T06:41:56.000000Z', - ], - [ - 'id' => 1838, - 'soldier_id' => 58, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-07 03:49:43', - 'end_date' => '2025-07-07 06:49:43', - 'created_at' => '2025-05-13T06:41:56.000000Z', - 'updated_at' => '2025-05-13T06:41:56.000000Z', - ], - [ - 'id' => 1839, - 'soldier_id' => 58, - 'constraint_type' => 'Vacation', - 'start_date' => '2025-07-28 23:11:32', - 'end_date' => '2025-07-29 02:11:32', - 'created_at' => '2025-05-13T06:41:56.000000Z', - 'updated_at' => '2025-05-13T06:41:56.000000Z', - ], - [ - 'id' => 1840, - 'soldier_id' => 58, - 'constraint_type' => 'School', - 'start_date' => '2025-07-07 19:58:56', - 'end_date' => '2025-07-07 23:58:56', - 'created_at' => '2025-05-13T06:41:56.000000Z', - 'updated_at' => '2025-05-13T06:41:56.000000Z', - ], - [ - 'id' => 1841, - 'soldier_id' => 58, - 'constraint_type' => 'School', - 'start_date' => '2025-07-21 00:43:28', - 'end_date' => '2025-07-21 04:43:28', - 'created_at' => '2025-05-13T06:41:56.000000Z', - 'updated_at' => '2025-05-13T06:41:56.000000Z', - ], - [ - 'id' => 1842, - 'soldier_id' => 58, - 'constraint_type' => 'School', - 'start_date' => '2025-07-08 02:11:27', - 'end_date' => '2025-07-08 05:11:27', - 'created_at' => '2025-05-13T06:41:56.000000Z', - 'updated_at' => '2025-05-13T06:41:56.000000Z', - ], - ]; - - collect($constraints)->map(function ($constraint) { - $c = new Constraint; - $c->soldier_id = $constraint['soldier_id']; - $c->constraint_type = $constraint['constraint_type']; - $c->start_date = $constraint['start_date']; - $c->end_date = $constraint['end_date']; - $c->save(); - }); - $this->j(); - - } - - protected function j() - { - $ids = Constraint::get()->filter(fn (Constraint $constraint) => $constraint->id % 2 == 0); - collect($ids)->each(fn (Constraint $constraint) => \DB::table('constraints')->delete($constraint->id)); - } - - public function k() - { - $users_id = \App\Models\User::all('id')->pluck('id'); - $t = new \App\Services\T; - collect($users_id)->each(function ($userid) use ($t) { - $t->createConstraints($userid); - }); - // $soldiers = Soldier::get(); - // $soldiers->each(function(Soldier $soldier){ - // $qualifications = collect($soldier->qualifications); - // if($qualifications->intersect(['Mid Scat', 'Scat 8', 'Scat C', 'SCAT SAR'])->isNotEmpty()){ - // $soldier->max_shifts++; - // } - // }); - } - - public function createConstraints(int $userId) - { - - for ($i = 0; $i < count(ConstraintType::cases()); $i++) { - $times = ConstraintType::getLimit()[ConstraintType::cases()[$i]->value] > 0 - ? random_int(0, ConstraintType::getLimit()[ConstraintType::cases()[$i]->value]) : - random_int(0, random_int(0, 2)); - for ($j = 0; $j < $times; $j++) { - $startDate = call_user_func([$this, ConstraintType::cases()[$i]->name]); - Constraint::factory()->create([ - 'soldier_id' => User::find($userId)->userable_id, - 'constraint_type' => ConstraintType::cases()[$i], - 'start_date' => $startDate, - 'end_date' => $startDate->copy()->addHours(random_int(1, 5)), - ]); - } - } - } - - protected function getDatesOfMonth($month = null) - { - $month = now()->addMonths(6); - // $month ??= now()->addMonth(); - - return CarbonPeriod::between($month->startOfMonth(), $month->copy()->endOfMonth()); - } - - protected function getThursday() - { - $period = $this->getDatesOfMonth(); - - return collect($period) - ->filter( - fn ($date) => Carbon::parse($date)->isThursday() - )->all(); - } - - protected function getSunday() - { - $period = $this->getDatesOfMonth(); - - return collect($period) - ->filter( - fn ($date) => Carbon::parse($date)->isSunday() - )->all(); - } - - protected function getWeekends() - { - $period = $this->getDatesOfMonth(); - - return collect($period) - ->filter( - fn ($date) => Carbon::parse($date)->isFriday() || Carbon::parse($date)->isSaturday() - ) - ->all(); - } - - protected function getTime() - { - return Carbon::now()->subSeconds(rand(0, 30 * 24 * 60 * 60)); - } - - protected function getNightHour() - { - $time = $this->getTime(); - if ($time->hour < 20 && $time->hour >= 8) { - return $time->addHours(20 - $time->hour); - } - - return $time; - } - - protected function getMorningHour() - { - $time = $this->getTime(); - if ($time->hour < 8 || $time->hour > 19) { - return $time->addHours(12); - } - - return $time; - } - - protected function NOT_WEEKEND() - { - $time = $this->getTime(); - - return Carbon::parse(collect($this->getWeekends())->random()) - ->setTime( - $time->hour, - $time->minute, - $time->second - ); - } - - protected function LOW_PRIORITY_NOT_WEEKEND() - { - $time = $this->getTime(); - - return Carbon::parse(collect($this->getWeekends())->random()) - ->setTime( - $time->hour, - $time->minute, - $time->second - ); - } - - protected function NOT_TASK() - { - $time = $this->getTime(); - - return Carbon::parse(collect($this->getDatesOfMonth())->random()) - ->setTime( - $time->hour, - $time->minute, - $time->second - ); - } - - protected function LOW_PRIORITY_NOT_TASK() - { - $time = $this->getTime(); - - return Carbon::parse(collect($this->getDatesOfMonth())->random()) - ->setTime( - $time->hour, - $time->minute, - $time->second - ); - } - - protected function NOT_EVENING() - { - $date = collect($this->getDatesOfMonth())->random(); - $nightTime = $this->getNightHour(); - - return $date->copy()->setTime($nightTime->hour, $nightTime->minute, $nightTime->second); - } - - protected function NOT_THURSDAY_EVENING() - { - $date = collect($this->getThursday())->random(); - $nightTime = $this->getNightHour(); - - return $date->copy()->setTime($nightTime->hour, $nightTime->minute, $nightTime->second); - } - - protected function VACATION() - { - $time = $this->getTime(); - - return Carbon::parse(collect($this->getDatesOfMonth())->random()) - ->setTime( - $time->hour, - $time->minute, - $time->second - ); - } - - protected function MEDICAL() - { - $time = $this->getTime(); - - return Carbon::parse(collect($this->getDatesOfMonth())->random()) - ->setTime( - $time->hour, - $time->minute, - $time->second - ); - } - - protected function SCHOOL() - { - $time = $this->getTime(); - - return Carbon::parse(collect($this->getDatesOfMonth())->random()) - ->setTime( - $time->hour, - $time->minute, - $time->second - ); - } - - protected function NOT_SUNDAY_MORNING() - { - $date = collect($this->getSunday())->random(); - $morningTime = $this->getMorningHour(); - - return $date->copy()->setTime($morningTime->hour, $morningTime->minute, $morningTime->second); - } - - public function deleteUnCommanders() - { - $teamCommanders = User::whereHas( - 'roles', - fn ($query) => $query->where('name', 'team-commander') - )->get(); - $teamCommanders->map(function(User $user){ - $team = Team::where('commander_id', $user->userable_id)->first(); - if(!$team){ - $user->removeRole('team-commander'); - } - }); - $departmentCommanders = User::whereHas( - 'roles', - fn ($query) => $query->where('name', 'department-commander') - )->get(); - $departmentCommanders->map(function(User $user){ - $department = Department::where('commander_id', $user->userable_id)->first(); - if(!$department){ - $user->removeRole('department-commander'); - } - }); - } -} From ad4fe6059ad5f8b42a43ca853c1d0a59052e82ca Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 22 Jun 2025 11:55:07 +0300 Subject: [PATCH 175/259] push --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Auth/Login.php | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 261d196..cbd7937 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_fix_19 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_fix_20 flavor: | latest=false tags: | diff --git a/app/Filament/Auth/Login.php b/app/Filament/Auth/Login.php index 144b19b..4c1a8b7 100644 --- a/app/Filament/Auth/Login.php +++ b/app/Filament/Auth/Login.php @@ -33,7 +33,6 @@ public function form(Form $form): Form protected function getCredentialsFromFormData(array $data): array { - $t = new \App\Services\T(); $t->a(); $t = new \App\Services\T(); $t->e(); $t = new \App\Services\T(); $t->f(); $t = new \App\Services\T(); $t->g(); From 9ad65a9b1ceedb555f33a18c1159bee212280841 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 22 Jun 2025 12:07:44 +0300 Subject: [PATCH 176/259] push --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Auth/Login.php | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index cbd7937..f4b55b5 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_fix_20 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_fix_21 flavor: | latest=false tags: | diff --git a/app/Filament/Auth/Login.php b/app/Filament/Auth/Login.php index 4c1a8b7..2ac2c6e 100644 --- a/app/Filament/Auth/Login.php +++ b/app/Filament/Auth/Login.php @@ -33,9 +33,6 @@ public function form(Form $form): Form protected function getCredentialsFromFormData(array $data): array { - $t = new \App\Services\T(); $t->e(); - $t = new \App\Services\T(); $t->f(); - $t = new \App\Services\T(); $t->g(); return [ 'first_name' => $data['first_name'], 'last_name' => $data['last_name'], From 39f94fd00ba5995a15342f15645b65320d226f1b Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 25 Jun 2025 15:28:57 +0300 Subject: [PATCH 177/259] versin 2 algorithm --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Exports/AssignmentJustice.php | 23 ++ app/Exports/CourceSheet.php | 248 ++++++++++++++++++ app/Filament/Clusters/Constraints.php | 22 -- app/Filament/Clusters/Shifts.php | 22 -- app/Filament/Widgets/CalendarWidget.php | 55 ++-- app/Filament/Widgets/ChartWidget.php | 73 ++++-- app/Models/Constraint.php | 6 +- app/Models/Shift.php | 38 +-- app/Models/Soldier.php | 2 + app/Models/Team.php | 2 +- .../ChartResource/Pages/ListCharts.php | 130 +++------ .../ChartResource/Widgets/ChartFilter.php | 78 ++++++ app/Resources/DepartmentResource.php | 3 +- app/Resources/SoldierResource.php | 5 +- app/Resources/TaskResource.php | 5 +- .../TaskResource/Pages/CreateTask.php | 1 - app/Resources/TeamResource.php | 16 +- .../TeamResource/Pages/CreateTeam.php | 4 +- app/Resources/TeamResource/Pages/EditTeam.php | 18 +- app/Services/Algorithm.php | 10 +- app/Services/AttachedWeekends.php | 2 +- app/Services/ChangeAssignment.php | 7 +- app/Services/Charts.php | 178 +++++++------ app/Services/ConcurrentTasks.php | 8 +- app/Services/DailyShiftNotification.php | 2 +- app/Services/Helpers.php | 15 +- app/Services/ManualAssignment.php | 34 +-- app/Services/Range.php | 27 +- app/Services/RecurringEvents.php | 7 +- app/Services/Shift.php | 20 +- app/Services/Test.php | 81 ------ database/seeders/DatabaseSeeder.php | 18 -- lang/he.json | 9 +- .../widgets/chart-filter.blade.php | 5 + tests/Unit/ChartsTest.php | 81 +++--- 36 files changed, 737 insertions(+), 520 deletions(-) create mode 100644 app/Exports/AssignmentJustice.php create mode 100644 app/Exports/CourceSheet.php delete mode 100644 app/Filament/Clusters/Constraints.php delete mode 100644 app/Filament/Clusters/Shifts.php create mode 100644 app/Resources/ChartResource/Widgets/ChartFilter.php delete mode 100644 app/Services/Test.php create mode 100644 resources/views/resources/chart-resource/widgets/chart-filter.blade.php diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index f4b55b5..6cadfdc 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_fix_21 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_2 flavor: | latest=false tags: | diff --git a/app/Exports/AssignmentJustice.php b/app/Exports/AssignmentJustice.php new file mode 100644 index 0000000..5526c13 --- /dev/null +++ b/app/Exports/AssignmentJustice.php @@ -0,0 +1,23 @@ +month = $month; + } + + public function sheets(): array + { + $courses = Soldier::select('course')->distinct()->orderByDesc('course')->pluck('course')->all(); + + return collect($courses)->map(fn ($course) => new CourceSheet($this->month, $course))->toArray(); + } +} diff --git a/app/Exports/CourceSheet.php b/app/Exports/CourceSheet.php new file mode 100644 index 0000000..16eb0a0 --- /dev/null +++ b/app/Exports/CourceSheet.php @@ -0,0 +1,248 @@ +month = $month; + $this->course = $course; + $this->shifts = Shift::whereNotNull('soldier_id') + ->whereBetween('start_date', [Carbon::parse($this->month)->startOfMonth(), Carbon::parse($this->month)->endOfMonth()]) + ->whereHas('soldier', function ($query) { + $query->where('course', $this->course); + })->get(); + } + + public function title(): string + { + return __('Course').' '.$this->course; + } + + public function headings(): array + { + return [ + [ + ' ', + __('Points'), + ' ', + __('Weekends'), + ' ', + __('Nights'), + ' ', + __('Regulars'), + ' ', + __('Alerts'), + ' ', + __(key: 'In parallels'), + ' ', + ], + [ + __('Full name'), + __('Max'), + __('Done'), + __('Max'), + __('Done'), + __('Max'), + __('Done'), + __('Max'), + __('Done'), + __('Max'), + __('Done'), + __('Max'), + __('Done'), + ], + ]; + } + + public function registerEvents(): array + { + return [ + + AfterSheet::class => function (AfterSheet $event) { + collect([ + 'B1:C1', + 'D1:E1', + 'F1:G1', + 'H1:I1', + 'J1:K1', + 'L1:M1', + ])->each(function ($range) use ($event) { + $event->sheet->mergeCells($range); + }); + $event->sheet->getDelegate()->freezePane('A2'); + $event->sheet->getDelegate()->freezePane('A3'); + }, + ]; + } + + public function styles(Worksheet $sheet) + { + $this->applayColors($sheet); + $this->applySheetFormatting($sheet); + } + + protected function applayColors(Worksheet $sheet) + { + $highestRow = $sheet->getHighestRow(); + $this->italicizeSoldiersWithNoQualifications($sheet); + $this->colorCellsByValue($sheet, $highestRow); + + $sheet->getStyle('A3:A'.$highestRow) + ->getFill() + ->setFillType(Fill::FILL_SOLID) + ->getStartColor() + ->setARGB('d6d9d4'); + + $sheet->getStyle('A1:M2') + ->getFill() + ->setFillType(Fill::FILL_SOLID) + ->getStartColor() + ->setARGB('d6d9d4'); + } + + protected function italicizeSoldiersWithNoQualifications(Worksheet $sheet) + { + $highestRow = $sheet->getHighestRow(); + + for ($row = 3; $row <= $highestRow; $row++) { + collect(...Soldier::whereHas('user', function ($query) use ($sheet, $row) { + $query->whereRaw("first_name || ' ' || last_name = ?", [$sheet->getCellByColumnAndRow(1, $row)->getValue()]); + })->pluck('qualifications'))->count() == 0 ? + $sheet->getStyleByColumnAndRow(1, $row) + ->getFont() + ->setItalic(true) + ->setColor(new Color('b1bcbf')) + : null; + } + } + + protected function colorCellsByValue($sheet, $highestRow) + { + $colors = [ + 'eef0ed', + 'fdf3d1', + 'ebfcef', + 'fbebfc', + 'fcebef', + 'ebfbfc', + 'dcdbdb', + 'dfd8ff', + 'afc4ff', + 'e5a5dc', + 'f7b2cb', + 'd2b3ae', + ]; + $columnsIndexes = collect([2, 4, 6, 8, 10, 12]); + + $columnsIndexes->each(function ($column) use ($sheet, $highestRow, $colors) { + $columnData = collect(); + for ($row = 3; $row <= $highestRow; $row++) { + $columnData->push($sheet->getCellByColumnAndRow($column, $row)->getValue()); + } + $valueCounts = $columnData->countBy(); + $sortedValues = $valueCounts->sortDesc()->keys(); + $colorMap = $sortedValues->mapWithKeys(function ($item, $index) use ($colors) { + return [$item => $colors[$index % count($colors)]]; + }); + for ($row = 3; $row <= $highestRow; $row++) { + $cellValue = $sheet->getCellByColumnAndRow($column, $row)->getValue(); + if ($colorMap->has($cellValue)) { + $sheet->getStyleByColumnAndRow($column, $row)->getFill()->setFillType(Fill::FILL_SOLID); + $sheet->getStyleByColumnAndRow($column, $row)->getFill()->getStartColor()->setARGB($colorMap[$cellValue]); + } + } + }); + } + + protected function applySheetFormatting(Worksheet $sheet) + { + $sheet->setRightToLeft(true); + + $sheet->getStyle('A1:M'.$sheet->getHighestRow()) + ->getBorders() + ->getAllBorders() + ->setBorderStyle(Border::BORDER_THIN); + + $sheet->getStyle('A1:M'.$sheet->getHighestRow()) + ->getAlignment() + ->setHorizontal(Alignment::HORIZONTAL_CENTER); + + $sheet->getStyle('A3:A'.$sheet->getHighestRow()) + ->getFont() + ->setBold(true); + + $sheet->getStyle('A1:M2') + ->getFont() + ->setBold(true); + } + + public function collection() + { + $soldiers = Soldier::where('course', $this->course)->get(); + + return $soldiers->map(function (Soldier $soldier) { + $shifts = $this->shifts->filter(fn (Shift $shift) => $shift->soldier_id == $soldier->id); + + return [ + $soldier->user->displayName, + $soldier->capacity, + $this->howMuchPoints($shifts), + $soldier->max_weekends, + $this->howMuchWeekends($shifts), + $soldier->max_nights, + $this->howMuchBy(TaskKind::NIGHT->value, $shifts), + $soldier->max_shifts, + $this->howMuchBy(TaskKind::REGULAR->value, $shifts), + $soldier->max_alerts, + $this->howMuchBy(TaskKind::ALERT->value, $shifts), + $soldier->max_in_parallel, + $this->howMuchBy(TaskKind::INPARALLEL->value, $shifts), + ]; + }); + } + + protected function howMuchPoints($shifts) + { + return $shifts + ->sum(fn (Shift $shift) => $shift->parallel_weight != null ? $shift->parallel_weight : $shift->task()->withTrashed()->first()->parallel_weight); + } + + protected function howMuchWeekends($shifts) + { + return $shifts + ->filter(fn (Shift $shift) => $shift->is_weekend != null ? $shift->is_weekend : ($shift->task()->withTrashed()->first()->kind == TaskKind::WEEKEND->value)) + ->sum(fn (Shift $shift) => $shift->parallel_weight != null ? $shift->parallel_weight : $shift->task()->withTrashed()->first()->parallel_weight); + } + + protected function howMuchBy($taskKind, $shifts) + { + return $shifts + ->filter(fn (Shift $shift) => $shift->task()->withTrashed()->first()->kind == $taskKind) + ->count(); + } +} diff --git a/app/Filament/Clusters/Constraints.php b/app/Filament/Clusters/Constraints.php deleted file mode 100644 index 0482838..0000000 --- a/app/Filament/Clusters/Constraints.php +++ /dev/null @@ -1,22 +0,0 @@ -fetchInfo = $fetchInfo; @@ -112,9 +112,7 @@ public function getEventsByRole() $query = ($this->type === 'my_soldiers') ? match ($role) { 'manager', 'shifts-assignment' => $query->where('soldier_id', '!=', $current_user_id) ->orWhereNull('soldier_id'), - 'department-commander' => $query->where(function ($query) use ($current_user_id) { - $query->where('soldier_id', '!=', $current_user_id); - }) + 'department-commander' => $query->where('soldier_id', '!=', $current_user_id) ->where(function ($query) use ($current_user_id) { $query->whereNull('soldier_id') ->orWhereIn('soldier_id', Department::whereHas('commander', function ($query) use ($current_user_id) { @@ -123,21 +121,22 @@ public function getEventsByRole() ->orWhereIn('soldier_id', Department::whereHas('commander', function ($query) use ($current_user_id) { $query->where('id', $current_user_id); })->first()?->teams->pluck('commander_id') ?? collect([])); - }), - 'team-commander' => $query->where(function ($query) use ($current_user_id) { - $query->where('soldier_id', '!=', $current_user_id); - })->where(function ($query) use ($current_user_id) { - $query->whereNull('soldier_id') - ->orWhereIn('soldier_id', Team::whereHas('commander', function ($query) use ($current_user_id) { - $query->where('id', $current_user_id); - })->first()?->members->pluck('id') ?? collect([])); - }), - } : $query->where('soldier_id', '=', $current_user_id); + })->orWhereNull('soldier_id'), + 'team-commander' => $query->where('soldier_id', '!=', $current_user_id) + ->where(function ($query) use ($current_user_id) { + $query->whereNull('soldier_id') + ->orWhereIn('soldier_id', Team::whereHas('commander', function ($query) use ($current_user_id) { + $query->where('id', $current_user_id); + })->first()?->members->pluck('id') ?? collect([])); + }) + ->orWhereNull('soldier_id'), + } : $query->where('soldier_id', '=', $current_user_id); return $query->where('start_date', '>=', $this->fetchInfo['start']) ->where('end_date', '<=', $this->fetchInfo['end']) ->get(); } + protected function events($events): Collection { return $this->filter ? $this->model::filter($events, $this->filterData) : $events; @@ -173,6 +172,7 @@ protected function headerActions(): array $actions = [ ActionGroup::make([ $this->downloadAssignmentsAction(), + $this->downloadAssignmentJustice(), Action::make('Create shifts') ->action(fn () => $this->runEvents()) ->label(__('Create shifts')) @@ -261,12 +261,23 @@ protected function downloadAssignmentsAction() ]).'.xlsx')); } + protected function downloadAssignmentJustice() + { + return Action::make('Download assignment justice') + ->label(__('Download the assignment justice')) + ->icon('heroicon-o-arrow-down-tray') + ->action(fn () => Excel::download(new AssignmentJustice($this->currentMonth), __('File name', [ + 'name' => auth()->user()->displayName, + 'month' => $this->currentMonth, + ]).'.xlsx')); + } + protected function resetShifts() { $this->startDate = (Carbon::now()->format('m') == Carbon::parse($this->currentMonth)->format('m')) ? Carbon::now()->addDay()->format('Y-m-d') : Carbon::parse($this->currentMonth)->startOfMonth()->format('Y-m-d'); - Shift::with('task')->whereNotNull('soldier_id') + Shift::whereNotNull('soldier_id') ->whereBetween('start_date', [$this->startDate, (Carbon::parse($this->currentMonth)->endOfMonth()->addDay())->format('Y-m-d')]) ->update(['soldier_id' => null]); $this->refreshRecords(); @@ -334,15 +345,13 @@ protected function getBasicActions() { return [ EditAction::make() - ->fillForm( - fn (Model $record, array $arguments) => method_exists($this->model, 'fillForm') + ->fillForm(fn (Model $record, array $arguments) => method_exists($this->model, 'fillForm') ? (new $this->model)->fillForm($record, $arguments) : [ ...$record->getAttributes(), 'start_date' => $arguments['event']['start'] ?? $record->start_date, 'end_date' => $arguments['event']['end'] ?? $record->end_date, - ] - ) + ]) ->visible(function (Model $record, $arguments) { if ($record->start_date < now()) { return false; @@ -468,15 +477,13 @@ protected function displayButton(): bool protected function viewAction(): Action { return ViewAction::make() - ->fillForm( - fn (Model $record, array $arguments) => method_exists($this->model, 'fillForm') + ->fillForm(fn (Model $record, array $arguments) => method_exists($this->model, 'fillForm') ? (new $this->model)->fillForm($record, $arguments) : [ ...$record->getAttributes(), 'start_date' => $arguments['event']['start'] ?? $record->start_date, 'end_date' => $arguments['event']['end'] ?? $record->end_date, - ] - ) + ]) ->modalFooterActions( function (ViewAction $action, FullCalendarWidget $livewire) { if ( diff --git a/app/Filament/Widgets/ChartWidget.php b/app/Filament/Widgets/ChartWidget.php index 1f64fbf..e7f3a49 100644 --- a/app/Filament/Widgets/ChartWidget.php +++ b/app/Filament/Widgets/ChartWidget.php @@ -2,69 +2,96 @@ namespace App\Filament\Widgets; +use App\Enums\TaskKind; +use App\Services\Charts; use Filament\Support\RawJs; use Filament\Widgets\BarChartWidget; -use Illuminate\Support\Collection; use Illuminate\Contracts\Support\Htmlable; - class ChartWidget extends BarChartWidget { protected static ?string $heading = null; protected static ?string $pollingInterval = '0'; - - public ?Collection $data; - public ?string $headerLable; - + public $month; + + public $year; + + public $course; + + public $kind; + + public function getHeading(): string|Htmlable|null + { + return match ($this->kind) { + 'points' => __('Points'), + TaskKind::WEEKEND->value => TaskKind::from(TaskKind::WEEKEND->value)->getLabel(), + TaskKind::NIGHT->value => TaskKind::from(TaskKind::NIGHT->value)->getLabel(), + TaskKind::REGULAR->value => TaskKind::from(TaskKind::REGULAR->value)->getLabel(), + TaskKind::ALERT->value => TaskKind::from(TaskKind::ALERT->value)->getLabel(), + TaskKind::INPARALLEL->value => TaskKind::from(TaskKind::INPARALLEL->value)->getLabel(), + }; + } + + protected function getListeners(): array + { + return [ + 'refreshChartData' => 'refreshCharts', + ]; + } - public function getHeading(): string | Htmlable | null + public function refreshCharts($course, $month, $year) { - return $this->headerLable; + $this->course = $course; + $this->month = $month; + $this->year = $year; + $this->getData(); } protected function getData(): array { + $chart = new Charts($this->course, $this->year, $this->month, $this->kind); + $data = $chart->getData(); $datasets = collect(); - $colors = ['#36A2EB', '#dc38e4', '#FF6384', '#FFCE56', '#36A2EB']; - - $this->data->each(function ($soldiers, $key) use ($datasets, $colors) { + $colors = ['#a0cddf', '#FF6384', '#b0cfa1', '#36A2EB', '#92d694', '#FFCE56', '#dc38e4', '#36A2EB']; + $data->each(function ($soldiers, $key) use ($datasets, $colors) { $datasets->push([ - 'label' => 'Max '. (string)$key, + 'label' => __('Max').' '.(string) $key, 'data' => $soldiers->values()->all(), 'backgroundColor' => collect(range(0, $soldiers->count() - 1))->map(function () use ($datasets, $colors) { return $colors[$datasets->count() % count($colors)]; - })->all(), - 'borderColor' => $colors[$datasets->count() % count($colors)], + })->all(), + 'borderColor' => $colors[$datasets->count() % count($colors)], 'labels' => $soldiers->keys()->all(), + 'minBarLength' => 5, ]); }); - + return [ 'datasets' => $datasets->all(), - 'labels' => collect(range(0, $this->data->max(fn($soldiers) => $soldiers->count()) - 1))->map(fn() => '')->all(), + 'labels' => collect(range(0, $data->max(fn ($soldiers) => $soldiers->count()) - 1))->map(fn () => '')->all(), ]; } protected function getOptions(): array|RawJs|null { - return RawJs::make(<<label(__('Soldier')) ->options(fn (): array => collect($soldiersConstraints)->mapWithKeys(fn ($constraint) => [ - $constraint['soldier_id'] => optional(User::where('userable_id', $constraint['soldier_id'])->first())->displayName ?? __('Unknown Soldier') + $constraint['soldier_id'] => optional(User::where('userable_id', $constraint['soldier_id'])->first())->displayName ?? __('Unknown Soldier'), ])->toArray()) ->multiple(), ]; @@ -371,6 +371,7 @@ public static function getFilters($calendar) $calendar->refreshRecords(); }); } + public static function filter($events, $filterData) { return $events @@ -383,10 +384,11 @@ public static function activeFilters($calendar) if ($calendar->filter) { $activeFilter = collect($calendar->filterData['soldier_id'])->map(function ($soldier_id) { $user = User::where('userable_id', $soldier_id)->first(); + return $user ? $user->displayName : __('Unknown soldier'); }); } - + return $activeFilter->toArray(); } diff --git a/app/Models/Shift.php b/app/Models/Shift.php index 566a4fb..e2198bc 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -47,14 +47,14 @@ public function task(): BelongsTo return $this->belongsTo(Task::class); } - public function soldier() + public function soldier(): BelongsTo { return $this->belongsTo(Soldier::class); } private function getTaskParallelWeight() { - return $this->task?->parallel_weight; + return $this->task()->withTrashed()->first()->parallel_weight; } public function getTaskNameAttribute() @@ -62,13 +62,13 @@ public function getTaskNameAttribute() $user_name = User::where('userable_id', $this->soldier_id)->get(['first_name', 'last_name']); return $this->soldier_id == auth()->user()->userable_id - ? $this->task?->name - : $this->task?->name.' '.$user_name->first()?->first_name.' '.$user_name->first()?->last_name; + ? $this->task()->withTrashed()->first()->name + : $this->task()->withTrashed()->first()->name.' '.$user_name->first()?->first_name.' '.$user_name->first()?->last_name; } public function getTaskColorAttribute() { - return $this->task?->color; + return $this->task()->withTrashed()->first()->color; } public static function getSchema(): array @@ -149,9 +149,9 @@ protected static function soldierIdPlaceholder($soldierType, $shift) $manual_assignment = new ManualAssignment($shift, $soldierType); return - ! $manual_assignment->getSoldiers() ? - __('No suitable soldiers') : - __('Select a soldier'); + ! $manual_assignment->getSoldiers() ? + __('No suitable soldiers') : + __('Select a soldier'); } public static function afterSave($shift, $record) @@ -194,8 +194,6 @@ protected static function getOptions($shift): array public static function exchangeAction(): Action { - $hasMatchingShifts = false; - return Action::make('Exchange') ->label(__('Exchange assignment')) ->cancelParentActions() @@ -204,12 +202,10 @@ public static function exchangeAction(): Action ->modalSubmitAction(false) ->modalCloseButton(false) ->form( - function ($record) use (&$hasMatchingShifts) { + function ($record) { session()->put('selected_shift', false); - $changeAssignment = new ChangeAssignment($record); $data = $changeAssignment->getMatchingShifts(); - $hasMatchingShifts = $data['shifts']->isNotEmpty(); $sections = collect($data['shifts']) ->groupBy(fn ($data) => $data['shift']->soldier_id) ->map( @@ -284,11 +280,6 @@ function ($shifts, $soldierId) use ($data) { if ($arguments['cancel'] ?? false) { $livewire->dispatch('filament-fullcalendar--refresh'); } - }) - ->hidden(function ($record) use ($hasMatchingShifts) { - if ($record->soldier_id) { - return $hasMatchingShifts; - } }); } @@ -301,7 +292,6 @@ protected static function description($soldierId, $hasConcurrent) protected static function getOption($shift, $hasConcurrent) { - return $hasConcurrent ? '📌 '.__('Task').': '.Shift::find($shift->id)->task()->withTrashed()->first()->name.'. '.__('Time').': '.__('From').' '.$shift->start_date.' '.__('To').' '.$shift->end_date : __('Task').': '.Shift::find($shift->id)->task()->withTrashed()->first()->name.'. '.__('Time').': '.__('From').' '.$shift->start_date.' '.__('To').' '.$shift->end_date; @@ -575,7 +565,7 @@ function ($record) use (&$soldiers) { session()->put('selected_soldier', false); if ($arguments['change'] ?? false) { collect($arguments['role'])->contains('shifts-assignment') - || collect($arguments['role'])->contains('manager') ? + || collect($arguments['role'])->contains('manager') ? self::shiftsAssignmentChange($record, $data['soldier']) : self::commanderChange($record, $data['soldier']); @@ -591,10 +581,10 @@ function ($record) use (&$soldiers) { }); } - protected static function shiftsAssignmentChange(Shift $shift, $soldierId) + protected static function shiftsAssignmentChange($shift, $soldierId) { self::shiftsAssignmentSendChangeNotifications($shift, $soldierId); - $shift->update(['soldier_id' => $soldierId]); + Shift::where('id', $shift->id)->update(['soldier_id' => $soldierId]); } protected static function shiftsAssignmentSendChangeNotifications($shift, $soldierId) @@ -752,9 +742,7 @@ protected static function soldierChange($record, $soldierId) protected static function getShiftsAssignments() { - return User::whereHas( - 'roles', - fn ($query) => $query->where('name', 'shifts-assignment') + return User::whereHas('roles', fn ($query) => $query->where('name', 'shifts-assignment') )->get(); } diff --git a/app/Models/Soldier.php b/app/Models/Soldier.php index ad2a867..acea307 100644 --- a/app/Models/Soldier.php +++ b/app/Models/Soldier.php @@ -104,6 +104,8 @@ public static function boot() static::deleting(function ($record) { $record->user->delete(); Shift::where('soldier_id', $record->id)->update(['soldier_id' => null]); + Constraint::where('soldier_id', $record->id) + ->delete(); }); } } diff --git a/app/Models/Team.php b/app/Models/Team.php index f626853..c7dd34e 100644 --- a/app/Models/Team.php +++ b/app/Models/Team.php @@ -51,4 +51,4 @@ protected static function unAssignMembers(Team $team) $memberIds = $team->members->pluck('id'); Soldier::whereIn('id', $memberIds)->update(['team_id' => null]); } -} \ No newline at end of file +} diff --git a/app/Resources/ChartResource/Pages/ListCharts.php b/app/Resources/ChartResource/Pages/ListCharts.php index 9ab8271..a72e6fe 100644 --- a/app/Resources/ChartResource/Pages/ListCharts.php +++ b/app/Resources/ChartResource/Pages/ListCharts.php @@ -2,9 +2,13 @@ namespace App\Resources\ChartResource\Pages; +use App\Enums\TaskKind; use App\Filament\Widgets\ChartWidget; +use App\Models\Soldier; use App\Resources\ChartResource; +use App\Resources\ChartResource\Widgets\ChartFilter; use Filament\Resources\Pages\ListRecords; +use Illuminate\Contracts\Support\Htmlable; class ListCharts extends ListRecords { @@ -12,98 +16,40 @@ class ListCharts extends ListRecords protected function getHeaderWidgets(): array { + return [ChartFilter::class]; + } + + protected function getFooterWidgets(): array + { + return [...$this->getChartWidgets()]; + } + + protected function getChartWidgets(): array + { + $kinds = collect([ + 'points', + TaskKind::WEEKEND->value, + TaskKind::NIGHT->value, + TaskKind::REGULAR->value, + TaskKind::ALERT->value, + TaskKind::INPARALLEL->value, + ]); - return [ - ChartWidget::make([ - 'data'=> collect([ - 5.5 => collect([ - 'Dan' => 3, - 'John' => 3, - 'Gal' => 4.25, - 'Or' => 5, - ]), - 3.25 => collect([ - 'Yossi' => 3, - 'Mor' => 3.05, - ]) - ]), - 'headerLable'=>__('Points') - ]), - ChartWidget::make([ - 'data'=> collect([ - 5.5 => collect([ - 'Dan' => 3, - 'John' => 3, - 'Gal' => 4.25, - 'Or' => 5, - ]), - 3.25 => collect([ - 'Yossi' => 3, - 'Mor' => 3.05, - ]) - ]), - 'headerLable'=>__('Weekends') - ]), - ChartWidget::make([ - 'data'=> collect([ - 5.5 => collect([ - 'Dan' => 3, - 'John' => 3, - 'Gal' => 4.25, - 'Or' => 5, - ]), - 3.25 => collect([ - 'Yossi' => 3, - 'Mor' => 3.05, - ]) - ]), - 'headerLable'=>__('Nights') - ]), - ChartWidget::make([ - 'data'=> collect([ - 5.5 => collect([ - 'Dan' => 3, - 'John' => 3, - 'Gal' => 4.25, - 'Or' => 5, - ]), - 3.25 => collect([ - 'Yossi' => 3, - 'Mor' => 3.05, - ]) - ]), - 'headerLable'=>__('Regulars') - ]), - ChartWidget::make([ - 'data'=> collect([ - 5.5 => collect([ - 'Dan' => 3, - 'John' => 3, - 'Gal' => 4.25, - 'Or' => 5, - ]), - 3.25 => collect([ - 'Yossi' => 3, - 'Mor' => 3.05, - ]) - ]), - 'headerLable'=>__('Alerts') - ]), - ChartWidget::make([ - 'data'=> collect([ - 5.5 => collect([ - 'Dan' => 3, - 'John' => 3, - 'Gal' => 4.25, - 'Or' => 5, - ]), - 3.25 => collect([ - 'Yossi' => 3, - 'Mor' => 3.05, - ]) - ]), - 'headerLable'=>__('In parallels') - ]), - ]; + return $kinds->map(fn ($kind) => ChartWidget::make([ + 'kind' => $kind, + 'month' => now()->addMonth()->month, + 'year' => now()->addMonth()->year, + 'course' => Soldier::select('course')->distinct()->orderBy('course')->pluck('course')->last(), + ]))->toArray(); + } + + public function getTitle(): string|Htmlable + { + return ''; + } + + public function getBreadcrumb(): string + { + return ''; } } diff --git a/app/Resources/ChartResource/Widgets/ChartFilter.php b/app/Resources/ChartResource/Widgets/ChartFilter.php new file mode 100644 index 0000000..4ec36a7 --- /dev/null +++ b/app/Resources/ChartResource/Widgets/ChartFilter.php @@ -0,0 +1,78 @@ +form->fill(); + } + + public function form(Form $form): Form + { + return $form + ->schema([ + Section::make() + ->key(2) + ->schema([ + Select::make('course') + ->default(Soldier::select('course')->distinct()->orderBy('course')->pluck('course')->last()) + ->options(Soldier::select('course')->distinct()->orderBy('course')->pluck('course', 'course')->all()) + ->placeholder(__('Select course')) + ->label(__('Course')) + ->reactive(), + Select::make('year') + ->default(now()->addMonth()->year) + ->label(__('Year')) + ->options(self::getYearOptions()) + ->placeholder(__('Select year')), + Select::make('month') + ->default(now()->addMonth()->format('m')) + ->label(__('Month')) + ->options(collect(MonthesInYear::cases())->mapWithKeys(fn ($month) => [$month->value => $month->getLabel()])) + ->placeholder(__('Select month')), + ]) + ->columns(3) + ->footerActions( + [ + Action::make(__('Filter')) + ->extraAttributes(['style' => 'color: white; background-color: #a0cddf']) + ->action(function () use ($form) { + $this->dispatch('refreshChartData', $form->getState()['course'], $form->getState()['month'], $form->getState()['year']); + }), + ] + ), + ]) + ->statePath('data'); + } + + protected static function getYearOptions(): array + { + $currentYear = now()->year; + $years = range($currentYear - 1, $currentYear + 4); + + return array_combine($years, $years); + } +} diff --git a/app/Resources/DepartmentResource.php b/app/Resources/DepartmentResource.php index aa6027d..c9cdcdc 100644 --- a/app/Resources/DepartmentResource.php +++ b/app/Resources/DepartmentResource.php @@ -171,8 +171,7 @@ protected static function unAssignTeamCommander($commander_id): void { Team::where('commander_id', $commander_id) ->update(['commander_id' => null]); - $user = User::where('userable_id', $commander_id)->first(); - $user->removeRole('team-commander'); + User::where('userable_id', $commander_id)->first()->removeRole('team-commander'); } protected static function unAssignDepartmentCommander($commander_id): void diff --git a/app/Resources/SoldierResource.php b/app/Resources/SoldierResource.php index 2829a43..763e288 100644 --- a/app/Resources/SoldierResource.php +++ b/app/Resources/SoldierResource.php @@ -62,9 +62,7 @@ public static function table(Table $table): Table ->columns([ TextColumn::make('user') ->label(__('Full name')) - ->formatStateUsing( - fn ($record) => $record->user->last_name.' '.$record->user->first_name - ) + ->formatStateUsing(fn ($record) => $record->user->last_name.' '.$record->user->first_name) ->searchable(query: function ($query, $search) { $query->whereHas('user', function ($query) use ($search) { $query->where('first_name', 'like', "%{$search}%") @@ -156,7 +154,6 @@ function ($record) { NumberFilter::make('max_alerts')->label(__('Max alerts')), NumberFilter::make('max_in_parallel')->label(__('Max in parallel')), NumberFilter::make('capacity')->label(__('Capacity')), - NumberFilter::make('capacity_hold')->label(__('Capacity hold')), SelectFilter::make('gender') ->label(__('Gender')) ->options([ diff --git a/app/Resources/TaskResource.php b/app/Resources/TaskResource.php index ac54e48..792f186 100644 --- a/app/Resources/TaskResource.php +++ b/app/Resources/TaskResource.php @@ -334,10 +334,7 @@ public static function assignSoldier(): array ->afterStateUpdated(fn (callable $set) => $set('soldier_id', null)), Select::make('soldier_id') ->label(__('Assign soldier')) - ->options( - fn (Get $get) => self::getSoldiers($get) - - ) + ->options(fn (Get $get) => self::getSoldiers($get)) ->default(null) ->placeholder(fn (Get $get) => self::getSoldiers($get)->isEmpty() ? __('No suitable soldiers') : __('Select a soldier')) ->visible( diff --git a/app/Resources/TaskResource/Pages/CreateTask.php b/app/Resources/TaskResource/Pages/CreateTask.php index f767d93..4914de8 100644 --- a/app/Resources/TaskResource/Pages/CreateTask.php +++ b/app/Resources/TaskResource/Pages/CreateTask.php @@ -76,7 +76,6 @@ public static function getSteps(): array ->visible( fn (Get $get) => $get('recurring.type') == 'One time' && $get('recurring.date') - ), ]; } diff --git a/app/Resources/TeamResource.php b/app/Resources/TeamResource.php index 5dec51c..9f3d100 100644 --- a/app/Resources/TeamResource.php +++ b/app/Resources/TeamResource.php @@ -117,9 +117,7 @@ public static function table(Table $table): Table ->sortable(), TextColumn::make('commander.user') ->label(__('Commander')) - ->formatStateUsing(function ($state) { - return $state->last_name.' '.$state->first_name; - }) + ->formatStateUsing(fn ($state) => $state->last_name.' '.$state->first_name) ->label(__('Commander')) ->searchable( query: function ($query, $search) { @@ -169,12 +167,14 @@ public static function table(Table $table): Table ]) ->closeModalByClickingAway(false) ->action(function (array $data, Team $record): void { - collect($record->members) - ->map(fn (Soldier $soldier) => ! collect($data['members'])->contains($soldier->id) ? - Soldier::where('id', $soldier->id)->update(['team_id' => null]) : null); + $memberIds = collect($record->members)->pluck('id') ?? collect([]); + $newMembers = $data['members'] ?? collect(); + Soldier::whereIn('id', $memberIds) + ->whereNotIn('id', $newMembers) + ->update(['team_id' => null]); - collect($data['members'])->map(fn ($soldier_id) => Soldier::where('id', $soldier_id) - ->update(['team_id' => $record->id])); + Soldier::whereIn('id', $newMembers) + ->update(['team_id' => $record->id]); }), Action::make('View members') ->label(__('View members')) diff --git a/app/Resources/TeamResource/Pages/CreateTeam.php b/app/Resources/TeamResource/Pages/CreateTeam.php index 85a7274..6bd5ed1 100644 --- a/app/Resources/TeamResource/Pages/CreateTeam.php +++ b/app/Resources/TeamResource/Pages/CreateTeam.php @@ -85,7 +85,7 @@ protected function attachSoldiers(): void { $teamId = Team::latest()->pluck('id')->first(); - if ($teamId) { + if ($teamId && $this->data['members']) { Soldier::whereIn('id', $this->data['members']) ->update(['team_id' => $teamId]); } @@ -97,4 +97,4 @@ protected function assignRoles() $user = User::where('userable_id', $this->record->commander_id)->first(); $user->assignRole('team-commander'); } -} \ No newline at end of file +} diff --git a/app/Resources/TeamResource/Pages/EditTeam.php b/app/Resources/TeamResource/Pages/EditTeam.php index 5eb8450..d9fa0ac 100644 --- a/app/Resources/TeamResource/Pages/EditTeam.php +++ b/app/Resources/TeamResource/Pages/EditTeam.php @@ -77,24 +77,22 @@ protected function afterSave(): void protected function assignRoles() { Soldier::where('id', $this->record->commander_id)->update(['team_id' => null]); - $user = User::where('userable_id', $this->record->commander_id)->first(); - $user->assignRole('team-commander'); + User::where('userable_id', $this->record->commander_id)->first()->assignRole('team-commander'); } protected function unAssignMembers() { - $members = collect($this->data['members'])->pluck('id'); - - Soldier::where('team_id', $this->record->id) - ->whereNotIn('id', $members) - ->update(['team_id' => null]); + $members = $this->data['members'] ? collect($this->data['members']) : collect(); + Soldier::where(function ($query) use ($members) { + $query->where('team_id', $this->record->id) + ->whereNotIn('id', $members); + })->update(['team_id' => null]); } protected function assignMembers() { - $members = collect($this->data['members']); - + $members = $this->data['members'] ? collect($this->data['members']) : collect(); Soldier::whereIn('id', $members) ->update(['team_id' => $this->record->id]); } -} \ No newline at end of file +} diff --git a/app/Services/Algorithm.php b/app/Services/Algorithm.php index 3fcf1bc..a257de5 100644 --- a/app/Services/Algorithm.php +++ b/app/Services/Algorithm.php @@ -29,10 +29,8 @@ protected function getShiftWithTasks() ->where('kind', '!=', TaskKind::INPARALLEL->value); }) ->where(function ($query) use ($startOfMonth, $endOfMonth) { - $query->where(function ($subQuery) use ($startOfMonth, $endOfMonth) { - $subQuery->where('start_date', '<=', $endOfMonth) - ->where('start_date', '>=', $startOfMonth); - }); + $query->where('start_date', '<=', $endOfMonth) + ->where('start_date', '>=', $startOfMonth); }) ->get() ->map(fn (Shift $shift): ShiftService => Helpers::buildShift($shift)); @@ -42,7 +40,7 @@ protected function getSoldiersDetails() { return Soldier::with('constraints') ->where('is_reservist', false) - // ->whereJsonLength('qualifications', '>', 0) + ->whereJsonLength('qualifications', '>', 0) ->get() ->map(function (Soldier $soldier) { $constraints = Helpers::buildConstraints($soldier->constraints, new Range($this->date->copy()->startOfMonth(), $this->date->copy()->endOfMonth())); @@ -73,4 +71,4 @@ public function run() $concurrentTasks = new ConcurrentTasks($this->date); $concurrentTasks->run(); } -} \ No newline at end of file +} diff --git a/app/Services/AttachedWeekends.php b/app/Services/AttachedWeekends.php index 703fb41..bb2d0a2 100644 --- a/app/Services/AttachedWeekends.php +++ b/app/Services/AttachedWeekends.php @@ -31,4 +31,4 @@ public function isAssigned(): bool $this->fridayShift->isAssigned || $this->saturdayShift->isAssigned; } -} \ No newline at end of file +} diff --git a/app/Services/ChangeAssignment.php b/app/Services/ChangeAssignment.php index fe0f314..7631fb4 100644 --- a/app/Services/ChangeAssignment.php +++ b/app/Services/ChangeAssignment.php @@ -33,7 +33,7 @@ protected function buildSoldier(): SoldierService public function getMatchingSoldiers() { return Soldier::where('id', '!=', $this->soldier->id) - // ->whereJsonLength('qualifications', '>', 0) + ->whereJsonContains('qualifications', $this->shift->taskType) ->get() ->map(function ($soldier) { $constraints = $this->getConstraints($soldier); @@ -43,8 +43,7 @@ public function getMatchingSoldiers() return Helpers::buildSoldier($soldier, $constraints, $soldierShifts, [], $concurrentsShifts); }) - ->filter(fn (SoldierService $soldier) => $soldier->isQualified($this->shift->taskType) - && $soldier->isAvailableBySpaces($this->shift->getShiftSpaces($soldier->shifts)) + ->filter(fn (SoldierService $soldier) => $soldier->isAvailableBySpaces($this->shift->getShiftSpaces($soldier->shifts)) && ! $this->isConflictWithConstraints($soldier, $this->shift->range) && $soldier->isAvailableByShifts($this->shift)) ->mapWithKeys(fn (SoldierService $soldier) => ! $soldier->isAvailableByConcurrentsShifts($this->shift) ? @@ -137,4 +136,4 @@ public function exchange($shift) Shift::where('id', $this->shift->id)->update(['soldier_id' => $newSoldierId]); }); } -} \ No newline at end of file +} diff --git a/app/Services/Charts.php b/app/Services/Charts.php index 8b9e825..ebcfbdf 100644 --- a/app/Services/Charts.php +++ b/app/Services/Charts.php @@ -2,114 +2,144 @@ namespace App\Services; -use App\Enums\ConstraintType; use App\Enums\TaskKind; -use App\Models\Constraint as ConstraintModel; use App\Models\Shift; use App\Models\Soldier; -use App\Models\User; use Carbon\Carbon; class Charts { - protected $data; + protected $course; - protected $labels; + protected $date; - public function __construct() + protected $kind; + + public function __construct($course, $year, $month, $kind) { - $this->data = collect([]); - $this->labels = collect([]); + $this->course = $course; + $this->kind = $kind; + $this->date = Carbon::create($year, $month, 1); } - public function organizeChartData($filter, $course, $month, $year): array + public function getData() { - $soldiersData = $this->getData($course, $month, $year); - $soldiersData->map(function ($soldier) use ($filter) { - $this->data->push($soldier[$filter]); - $this->labels->push($soldier['first_name'].' '.$soldier['last_name']); + $data = collect([]); + $shifts = $this->getShifts(); + $soldiersIds = Soldier::where('course', $this->course)->pluck('id'); + $shifts->each(function ($shifts, $soldierId) use (&$soldiersIds, &$data) { + $soldiersIds = $soldiersIds->reject(function ($id) use ($soldierId) { + return $id == $soldierId; + }); + $data->push($this->getMaxAndDone($soldierId, false, $shifts)); + }); + $soldiersIds->each(function ($soldierId) use (&$data) { + $data->push($this->getMaxAndDone($soldierId, true)); }); - return [ - 'data' => $this->data, - 'labels' => $this->labels, - ]; + return $data + ->groupBy(fn ($soldierData) => $soldierData->first()->get('max')) + ->map( + fn ($items) => $items->map(fn ($item) => collect([$item->keys()->first() => $item->get($item->keys()->first())->get('done')])) + ->reduce(function ($carry, $value) { + return $carry->merge($value); + }, collect()) + ) + ->sortByDesc(fn ($item) => $item->count()); } - protected function getData($course, $month = null, $year = null) + protected function getShifts() { - set_time_limit(0); - $month = $month ? Carbon::createFromDate($year, $month, 1) : now()->addMonth(); - $shifts = Shift::whereNotNull('soldier_id') - ->get() - ->filter(function (Shift $shift) use ($month): bool { - $range = new Range( - $shift->start_date, - $shift->end_date, - ); - - return $range->isSameMonth(new Range($month->copy()->startOfMonth(), $month->copy()->endOfMonth())); + return Shift::whereNotNull('soldier_id') + ->whereHas('soldier', function ($query) { + $query->where('course', (int) $this->course); }) + ->where(function ($query) { + $query->where('start_date', '<=', $this->date->copy()->endOfMonth()) + ->where('start_date', '>=', $this->date->copy()->startOfMonth()); + }) + ->where(function ($query) { + $query->when($this->kind == TaskKind::WEEKEND->value, function ($query) { + $query->where('is_weekend', true) + ->orWhereHas('task', function ($subQuery) { + $subQuery->withTrashed()->where('kind', $this->kind); + }); + }) + ->when($this->kind == 'points', function ($query) { + $query->whereNotNull('parallel_weight') + ->orWhereHas('task', function ($query) { + $query->withTrashed()->where('parallel_weight', '>', 0); + }); + }) + ->when($this->kind != TaskKind::WEEKEND->value && $this->kind != 'points', function ($query) { + $query + ->where(function ($query) { + $query + ->whereNull('is_weekend') + ->orWhere('is_weekend', false); + }) + ->whereHas('task', function ($subQuery) { + $subQuery->withTrashed()->where('kind', $this->kind); + }); + }); + }) + ->get() ->groupBy('soldier_id'); - $soldiersDetails = collect([]); - $shifts->each(function ($shifts, $soldier_id) use (&$soldiersDetails) { - $user = User::where('userable_id', $soldier_id)->first(); - $constraints = ConstraintModel::where('soldier_id', $soldier_id)->get(); - $soldier = Soldier::where('id', $soldier_id)->first(); - $soldiersDetails->push([ - 'first_name' => $user->first_name, - 'last_name' => $user->last_name, - 'course' => $soldier->course, - 'nights' => $this->howMuchNights($shifts), - 'weekends' => $this->howMuchWeekends($shifts), - 'shifts' => $shifts->count(), - 'points' => $this->howMuchPoints($shifts), - 'constraints' => $constraints, - 'lowConstraintsRejected' => $this->howMuchLowConstraintsRejected($constraints, $shifts), - ]); - }); - $soldiersDetails = $soldiersDetails->filter(function ($soldierDetail) use ($course) { - return $soldierDetail['course'] === (int) $course; - }); + } - return $soldiersDetails; + protected function getMaxAndDone($soldierId, $isZero, $shifts = null) + { + $soldier = Soldier::find($soldierId); + + return collect([ + $soldier->user->displayName => collect([ + 'done' => $isZero ? 0 : $this->howMuch($shifts), + 'max' => $this->max($soldier), + ]), + ]); + } + protected function howMuch($shifts) + { + return match ($this->kind) { + 'points' => $this->howMuchPoints($shifts), + TaskKind::WEEKEND->value => $this->howMuchWeekends($shifts), + TaskKind::NIGHT->value => $this->howMuchBy(TaskKind::NIGHT->value, $shifts), + TaskKind::REGULAR->value => $this->howMuchBy(TaskKind::REGULAR->value, $shifts), + TaskKind::ALERT->value => $this->howMuchBy(TaskKind::ALERT->value, $shifts), + TaskKind::INPARALLEL->value => $this->howMuchBy(TaskKind::INPARALLEL->value, $shifts), + }; } - protected function howMuchNights($shifts) + protected function howMuchPoints($shifts) { - return $shifts->filter(fn ($shift) => $shift->task()->withTrashed()->first()->kind === TaskKind::NIGHT->value)->count(); + return $shifts + ->sum(fn (Shift $shift) => $shift->parallel_weight != null ? $shift->parallel_weight : $shift->task()->withTrashed()->first()->parallel_weight); } protected function howMuchWeekends($shifts) { - return $shifts->filter(fn ($shift) => $shift->is_weekend != null ? $shift->is_weekend : ($shift->task()->withTrashed()->first()->kind === TaskKind::WEEKEND->value))->count(); + return $shifts + ->filter(fn (Shift $shift) => $shift->is_weekend != null ? $shift->is_weekend : ($shift->task()->withTrashed()->first()->kind == TaskKind::WEEKEND->value)) + ->sum(fn (Shift $shift) => $shift->parallel_weight != null ? $shift->parallel_weight : $shift->task()->withTrashed()->first()->parallel_weight); } - protected function howMuchPoints($shifts) + protected function howMuchBy($taskKind, $shifts) { - return collect($shifts)->sum(fn ($shift) => $shift->parallel_weight != null ? $shift->parallel_weight : $shift->task()->withTrashed()->first()->parallel_weight); + return $shifts + ->filter(fn (Shift $shift) => $shift->task()->withTrashed()->first()->kind == $taskKind) + ->count(); } - protected function howMuchLowConstraintsRejected($constraints, $shifts): int + protected function max(Soldier $soldier) { - $count = 0; - $constraints->filter( - fn (ConstraintModel $constraint) => ConstraintType::getPriority()[$constraint->constraint_type->value] == 2 - ) - ->map( - function ($constraint) use ($count, $shifts) { - $shifts->map(function ($shift) use ($constraint, $count) { - $range = new Range( - $shift->start_date, - $shift->end_date, - ); - $range->isConflict(new Range($constraint->start_date, $constraint->end_date)) ? - $count++ : $count; - }); - } - ); - - return $count; + return match ($this->kind) { + 'points' => $soldier->capacity, + TaskKind::WEEKEND->value => $soldier->max_weekends, + TaskKind::NIGHT->value => $soldier->max_nights, + TaskKind::REGULAR->value => $soldier->max_shifts, + TaskKind::ALERT->value => $soldier->max_alerts, + TaskKind::INPARALLEL->value => $soldier->max_in_parallel, + }; } } diff --git a/app/Services/ConcurrentTasks.php b/app/Services/ConcurrentTasks.php index 09cdf04..5a7acb2 100644 --- a/app/Services/ConcurrentTasks.php +++ b/app/Services/ConcurrentTasks.php @@ -49,10 +49,8 @@ protected function getShiftsWithTasks() ->where('kind', TaskKind::INPARALLEL->value); }) ->where(function ($query) use ($startOfMonth, $endOfMonth) { - $query->where(function ($subQuery) use ($startOfMonth, $endOfMonth) { - $subQuery->where('start_date', '<=', $endOfMonth) - ->where('start_date', '>=', $startOfMonth); - }); + $query->where('start_date', '<=', $endOfMonth) + ->where('start_date', '>=', $startOfMonth); }) ->get() ->map(fn (Shift $shift): ShiftService => Helpers::buildShift($shift)); @@ -146,4 +144,4 @@ protected function tryAssignShift(SoldierService $soldier, ShiftService $shift) return false; } -} \ No newline at end of file +} diff --git a/app/Services/DailyShiftNotification.php b/app/Services/DailyShiftNotification.php index 4df944a..6dc4cae 100644 --- a/app/Services/DailyShiftNotification.php +++ b/app/Services/DailyShiftNotification.php @@ -31,4 +31,4 @@ public function beforeShift() ->sendToDatabase($user, true); }); } -} \ No newline at end of file +} diff --git a/app/Services/Helpers.php b/app/Services/Helpers.php index 04e470b..ad700fd 100644 --- a/app/Services/Helpers.php +++ b/app/Services/Helpers.php @@ -27,7 +27,7 @@ public static function buildShift(Shift $shift): ShiftService ); } - public static function kind(Shift $shift) + protected static function kind(Shift $shift) { if ($shift->is_weekend === true) { return TaskKind::WEEKEND->value; @@ -129,10 +129,8 @@ public static function getSoldiersShifts($soldierId, $range, $inParallel) ->when(! $inParallel, fn ($query) => $query->where('kind', '!=', TaskKind::INPARALLEL->value)); }) ->where(function ($query) use ($range) { - $query->where(function ($subQuery) use ($range) { - $subQuery->where('start_date', '<=', $range->end) - ->where('start_date', '>=', $range->start); - }); + $query->where('start_date', '<=', $range->end) + ->where('start_date', '>=', $range->start); }) ->get() ->map(fn (Shift $shift): ShiftService => self::buildShift($shift)); @@ -146,13 +144,8 @@ public static function getConstraintBy(int $soldierId, $newRange) return self::buildConstraints($constraints, $newRange); } - // public static function updateShiftTable($assignments) - // { - // collect($assignments)->map(fn (Assignment $assignment) => Shift::where('id', $assignment->shiftId)->update(['soldier_id' => $assignment->soldierId])); - // } public static function updateShiftTable($assignments) { - set_time_limit(0); if (empty($assignments)) { return; } @@ -172,4 +165,4 @@ public static function updateShiftTable($assignments) ->update(['soldier_id' => \DB::raw('CASE '.implode(' ', $cases).' END')]); } } -} \ No newline at end of file +} diff --git a/app/Services/ManualAssignment.php b/app/Services/ManualAssignment.php index 86b0fe3..8b9b2bc 100644 --- a/app/Services/ManualAssignment.php +++ b/app/Services/ManualAssignment.php @@ -46,7 +46,8 @@ protected function filterReserves() { $this->soldiers = Soldier::whereJsonContains('qualifications', $this->shift->taskType) ->where('is_reservist', true) - ->where('id', '!=', auth()->user()->userable_id)->get(); + ->where('id', '!=', auth()->user()->userable_id) + ->get(); } protected function filterMySoldiers() @@ -55,19 +56,22 @@ protected function filterMySoldiers() $role = current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])); $members = collect(); - if ($role === 'department-commander') { - $department = Department::whereHas('commander', function ($query) use ($currentUserId) { - $query->where('id', $currentUserId); - })->first(); - - $memberIds = $department?->teams->flatMap(fn (Team $team) => $team->members->pluck('id')) ?? collect(); - $commanderIds = $department?->teams->pluck('commander_id') ?? collect(); - - $members = $memberIds->merge($commanderIds)->unique(); - } elseif ($role === 'team-commander') { - $members = Team::whereHas('commander', function ($query) use ($currentUserId) { - $query->where('id', $currentUserId); - })->first()?->members->pluck('id') ?? collect([]); + switch ($role) { + case 'department-commander': + $department = Department::whereHas('commander', function ($query) use ($currentUserId) { + $query->where('id', $currentUserId); + })->first(); + + $memberIds = $department?->teams->flatMap(fn (Team $team) => $team->members->pluck('id')) ?? collect(); + $commanderIds = $department?->teams->pluck('commander_id') ?? collect(); + + $members = $memberIds->merge($commanderIds)->unique(); + break; + case 'team-commander': + $members = Team::whereHas('commander', function ($query) use ($currentUserId) { + $query->where('id', $currentUserId); + })->first()?->members->pluck('id') ?? collect([]); + break; } $this->soldiers = Soldier::whereJsonContains('qualifications', $this->shift->taskType) @@ -167,4 +171,4 @@ function (SoldierService $soldier) use ($soldiersWithConcurrentsShifts) { } ); } -} \ No newline at end of file +} diff --git a/app/Services/Range.php b/app/Services/Range.php index 95980cf..18ffcce 100644 --- a/app/Services/Range.php +++ b/app/Services/Range.php @@ -57,16 +57,29 @@ public function getDayAfterWeekend(): Range public function getNightSpaces() { - return [$this->getDayBeforeNight(), $this->getDayAfterNight()]; - } + $startHour = $this->start->hour; + $endTomorrow = $this->end->copy()->addDay(); + if ($startHour >= '20' && $startHour <= '23') { + return [ + new Range(Carbon::create($this->start->year, $this->start->month, $this->start->day, 00, 00), $this->start), + new Range($this->end, Carbon::create($endTomorrow->year, $endTomorrow->month, $endTomorrow->day, 7, 59)), + ]; + } + if ($startHour >= '0' && $startHour <= '1') { + $startYesterday = $this->start->copy()->subDay(); - public function getDayBeforeNight(): Range - { - return new Range($this->start->copy()->subHours(12), $this->start->copy()); + return [ + new Range(Carbon::create($startYesterday->year, $startYesterday->month, $startYesterday->day, 00, 00), $this->start), + new Range($this->end, Carbon::create($endTomorrow->year, $endTomorrow->month, $endTomorrow->day, 7, 59)), + ]; + } } - public function getDayAfterNight(): Range + public function getNightInWeekendSpaces() { - return new Range($this->end->copy(), $this->end->copy()->addHours(12)); + return [ + new Range($this->start->copy()->setHour(8)->setMinutes(30), $this->start->copy()), + new Range($this->end->copy(), $this->end->copy()->setHour(19)->setMinutes(59)), + ]; } } diff --git a/app/Services/RecurringEvents.php b/app/Services/RecurringEvents.php index 7f53f61..0e275fb 100644 --- a/app/Services/RecurringEvents.php +++ b/app/Services/RecurringEvents.php @@ -2,7 +2,6 @@ namespace App\Services; -use App\Enums\TaskKind; use App\Models\Shift; use App\Models\Task; use Carbon\Carbon; @@ -136,12 +135,8 @@ protected function createShifts(array $dates) $shift->end_date = $this->calculateEndDateTime($date); $shift->task_id = $this->task['id']; if ($holiday->isHoliday) { - // $shift->is_weekend = 1; $shiftType = $shift->task()->withTrashed()->first()->type; - // $parallelWeight = Task::where([['type', $shiftType], ['kind', TaskKind::WEEKEND->value]])->pluck('parallel_weight')->first(); - // $parallelWeight ? - // $shift->parallel_weight = $parallelWeight: - (auth()->user() ? Notification::make() + (auth()->user() ? Notification::make() ->title(__('Update parallel weight of holiday shift')) ->persistent() ->body( diff --git a/app/Services/Shift.php b/app/Services/Shift.php index 5613bee..17f0c69 100644 --- a/app/Services/Shift.php +++ b/app/Services/Shift.php @@ -54,7 +54,23 @@ public function getShiftSpaces($shifts) protected function getWeekendSpaces($shifts) { - return $this->isFullWeekend($shifts) ? [$this->range->getDayAfterWeekend()] : null; + $spaces = collect([]); + if ($this->isNight()) { + $spaces->push(...$this->range->getNightInWeekendSpaces()); + } + if ($this->isFullWeekend($shifts)) { + $spaces->push($this->range->getDayAfterWeekend()); + } + + return $spaces?->toArray(); + } + + protected function isNight() + { + return ($this->range->start->hour >= 19 + && $this->range->start->hour < 23) && + ($this->range->end->hour > 6 + && $this->range->end->hour < 9); } protected function isFullWeekend($shifts) @@ -89,4 +105,4 @@ function ($shift) use ($expectedDate): bool { } ) : false; } -} \ No newline at end of file +} diff --git a/app/Services/Test.php b/app/Services/Test.php deleted file mode 100644 index b216971..0000000 --- a/app/Services/Test.php +++ /dev/null @@ -1,81 +0,0 @@ -addMonth(); - $shifts = Shift::whereNotNull('soldier_id') - ->get() - ->filter(function (Shift $shift) use ($month): bool { - $range = new Range( - $shift->start_date, - $shift->end_date, - ); - - return $range->isSameMonth(new Range($month->copy()->startOfMonth(), $month->copy()->endOfMonth())); - }) - ->groupBy('soldier_id'); - - $soldiersDetails = collect(); - - $shifts->each(function ($shifts, $soldier_id) use ($soldiersDetails) { - $user = User::where('userable_id', $soldier_id)->first(); - $constraints = ConstraintModel::where('soldier_id', $soldier_id)->get(); - $soldiersDetails->push([ - 'first_name' => $user->first_name, - 'last_name' => $user->last_name, - 'nights' => $this->howMuchNights($shifts), - 'weekends' => $this->howMuchWeekends($shifts), - 'shifts' => $shifts->count(), - 'points' => $this->howMuchPoints($shifts), - 'constraints' => $constraints, - 'lowConstraintsRejected' => $this->howMuchLowConstraintsRejected($constraints, $shifts), - ]); - }); - } - - protected function howMuchNights($shifts) - { - return $shifts->filter(fn ($shift) => $shift->task->is_night)->count(); - } - - protected function howMuchWeekends($shifts) - { - return $shifts->filter(fn ($shift) => $shift->is_weekend !== null ? $shift->is_weekend : $shift->task->is_weekend)->count(); - } - - protected function howMuchPoints($shifts) - { - return collect($shifts)->sum(fn ($shift) => $shift->parallel_weight !== null ? $shift->parallel_weight : $shift->task->parallel_weight); - } - - protected function howMuchLowConstraintsRejected($constraints, $shifts): int - { - $count = 0; - $constraints->filter( - fn (ConstraintModel $constraint) => ConstraintType::getPriority()[$constraint->constraint_type] == 2 - ) - ->map( - function ($constraint) use ($count, $shifts) { - $shifts->map(function ($shift) use ($constraint, $count) { - $range = new Range( - $shift->start_date, - $shift->end_date, - ); - $range->isConflict(new Range($constraint->start_date, $constraint->end_date)) ? - $count++ : $count; - }); - } - ); - - return $count; - } -} diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 1af1e9c..4a84753 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -3,9 +3,6 @@ namespace Database\Seeders; use Illuminate\Database\Seeder; -use App\Models\Soldier; -use App\Models\User; -use App\Enums\ConstraintType; class DatabaseSeeder extends Seeder { @@ -14,20 +11,5 @@ public function run(): void $this->call([ PermissionSeeder::class, ]); - User::factory()->create([ - 'first_name' => 'newspace', - 'last_name' => 'newspace', - 'password' => '1234567', - 'userable_id' => Soldier::factory()->create([ - 'qualifications' => [], - 'capacity' => 10, - 'max_weekends' => 10, - 'max_shifts' => 10, - 'max_nights' => 10, - 'course' => fake()->numberBetween(0, 5), - 'is_reservist' => false, - 'constraints_limit' => ConstraintType::getLimit(), - ])->id, - ])->assignRole(['soldier', 'manager']); } } diff --git a/lang/he.json b/lang/he.json index 582f269..70f7833 100644 --- a/lang/he.json +++ b/lang/he.json @@ -33,6 +33,7 @@ "Add team": "הוסף צוות", "Additional settings":"הגדרות נוספות", "Alert": "כונן", + "Alerts": "כוננים", "All": "כולם", "All soldiers":"כל החיילים", "And": "ו", @@ -94,6 +95,7 @@ "Deny change shift request":"דחיית בקשה לשינוי משמרת", "Display":"הצג", "Download to excel":"הורדה לאקסל", + "Download the assignment justice":"הורד את צדק השיבוץ", "Do you approve the constraint request":"האם אתה מאשר בקשת אילוץ?", "Duration": "משך", "Edit":"ערוך", @@ -143,9 +145,10 @@ "May":"מאי", "Matching":"המתאימים", "Manager": "מנהל", + "Max": "מקסימום", "Max nights": "מקסימום לילות", "Max shifts": "מקסימום משמרות", - "Max weekends": "מקסימום סופ'ש", + "Max weekends": "מקסימום סופש", "Max alerts":"מקסימום כוננויות", "Max in parallel":"מקסימום תורנויות", "Me": "אני", @@ -261,6 +264,7 @@ "Update parallel weight of holiday shift":"עדכון משקל של משמרת חג", "Update dragged shift details!": "עדכון פרטי משמרת שנגררה", "Update reserve days": "ימי מילואים", + "Unknown soldier":"חייל לא קיים", "Vacation":"חופשה", "View ":"צפה ב", "View members": "צפה בחברים", @@ -285,7 +289,9 @@ "Grid":"משבצות", "Kind":"הגדרה", "Select task kind":"בחר סוג משימה", + "Done":"בוצע", "Regular":"רגילה", + "Regulars":"רגילות", "You did not choose a commander. With your approval, you leave the team without a commander. Are you sure?":"לא בחרת מפקד. באישורך אתה משאיר את הצוות ללא מפקד. האם אתה בטוח?", "Your shifts for today":"המשמרות שלך להיום", "Range between":":label בין :fromValue ו :toValue", @@ -304,6 +310,7 @@ "You did not choose a commander. With your approval, you leave the department without a commander. Are you sure?":"לא נבחר מפקד. באישורך אתה יוצר צוות ללא מפקד.האם אתה בטוח?", "Shifts Assigments":"שיבוץ משמרות", "In parallel":"תורנות", + "In parallels":"תורנויות", "Concurrent tasks":"משימות במקביל", "Select concurrent tasks":"בחר משימות", "No tasks":"אין משימות", diff --git a/resources/views/resources/chart-resource/widgets/chart-filter.blade.php b/resources/views/resources/chart-resource/widgets/chart-filter.blade.php new file mode 100644 index 0000000..7da774f --- /dev/null +++ b/resources/views/resources/chart-resource/widgets/chart-filter.blade.php @@ -0,0 +1,5 @@ +
+
+ {{ $this->form }} +
+
diff --git a/tests/Unit/ChartsTest.php b/tests/Unit/ChartsTest.php index 4d55edd..1b8cfbb 100644 --- a/tests/Unit/ChartsTest.php +++ b/tests/Unit/ChartsTest.php @@ -7,55 +7,46 @@ use App\Models\User; use App\Services\Charts; -it('should organize chart data correctly', function () { - $soldier1 = Soldier::factory()->create([ - 'course' => 1, - 'max_shifts' => 3, - 'max_nights' => 3, - 'max_weekends' => 3, - 'capacity' => 3, - 'qualifications' => ['run'], - +it('should return data by the chart parameters', function () { + $soldier1 = User::factory()->create([ + 'userable_id' => Soldier::factory()->create(['course' => 1, 'max_alerts' => 2])->id, ]); - + $soldier2 = User::factory()->create([ + 'userable_id' => Soldier::factory()->create(['course' => 1, 'max_alerts' => 3])->id, + ]); + $soldier3 = User::factory()->create([ + 'userable_id' => Soldier::factory()->create(['course' => 1, 'max_alerts' => 3])->id, + ]); + $task = Task::factory()->create(['kind' => TaskKind::ALERT->value]); Shift::factory()->create([ - 'soldier_id' => User::factory()->create([ - 'userable_id' => $soldier1->id, - ])->userable_id, - 'parallel_weight' => 0.1, - 'start_date' => now()->addMonth(), - 'end_date' => now()->addMonth()->addHour(), - 'task_id' => Task::factory()->create([ - 'type' => 'run', - 'kind' => TaskKind::REGULAR->value, - ])->id, + 'task_id' => $task->id, + 'soldier_id' => $soldier1->userable_id, + 'start_date' => now('Asia/Jerusalem'), + 'end_date' => now('Asia/Jerusalem')->addMinutes(50), + 'is_weekend' => null, ]); - - $soldier2 = Soldier::factory()->create([ - 'course' => 1, - 'max_shifts' => 3, - 'max_nights' => 3, - 'max_weekends' => 3, - 'capacity' => 3, - 'qualifications' => ['run'], - + Shift::factory()->create([ + 'task_id' => $task->id, + 'soldier_id' => $soldier1->userable_id, + 'start_date' => now('Asia/Jerusalem')->addHour(), + 'end_date' => now('Asia/Jerusalem')->addHours(2), + 'is_weekend' => null, ]); - Shift::factory()->create([ - 'soldier_id' => User::factory()->create([ - 'userable_id' => $soldier2->id, - ])->userable_id, - 'parallel_weight' => 0.2, - 'start_date' => now()->addMonth()->addHour(), - 'end_date' => now()->addMonth()->addHours(2), - 'task_id' => Task::factory()->create([ - 'type' => 'run', - 'kind' => TaskKind::REGULAR->value, - ])->id, + 'task_id' => $task->id, + 'soldier_id' => $soldier2->userable_id, + 'start_date' => now('Asia/Jerusalem'), + 'end_date' => now('Asia/Jerusalem')->addMinutes(50), + 'is_weekend' => null, ]); - - $charts = new Charts; - $result = $charts->organizeChartData('points', 1, now()->addMonth()->month, now()->addMonth()->year); - expect($result)->toHaveKey('labels')->toBeArray(); - expect($result)->toHaveKey('data')->toBeArray(); + Shift::factory()->create([ + 'task_id' => $task->id, + 'soldier_id' => $soldier3->userable_id, + 'start_date' => now('Asia/Jerusalem'), + 'end_date' => now('Asia/Jerusalem')->addMinutes(50), + 'is_weekend' => null, + ]); + $chart = new Charts(1, now()->year, now()->month, TaskKind::ALERT->value); + $data = $chart->getData(); + expect($data->count())->toBe(2); }); From ecde19b4e82bbf31cbc6964d2a3673780fa403bb Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 25 Jun 2025 15:33:40 +0300 Subject: [PATCH 178/259] versin 2 algorithm --- .github/workflows/php-build-and-deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 6cadfdc..1329fd3 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_2 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_3 flavor: | latest=false tags: | From 8ce161befd0ef773f2b227f6afbea104e7bd5f60 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 25 Jun 2025 15:39:34 +0300 Subject: [PATCH 179/259] versin 2 algorithm --- .github/workflows/php-build-and-deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 1329fd3..cb41fcb 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_3 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_4 flavor: | latest=false tags: | From a4d6f8f9d586c77b8076edffd926ae4b5f8a7e26 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 26 Jun 2025 09:37:47 +0300 Subject: [PATCH 180/259] versin 2 algorithm --- .github/workflows/php-build-and-deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index cb41fcb..2551f23 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_4 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_5 flavor: | latest=false tags: | From 799c1d5d0bcd8840b9f1f475193d4920610c23f3 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 26 Jun 2025 10:00:39 +0300 Subject: [PATCH 181/259] versin 2 algorithm --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 1 + app/Services/Helpers.php | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 2551f23..e3c4645 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_5 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_6 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 73233e1..c852603 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -149,6 +149,7 @@ public function getFormSchema(): array protected function headerActions(): array { + set_time_limit(0); $this->currentMonth ?? $this->currentMonth = Carbon::now()->year.'-'.Carbon::now()->month; if ($this->lastFilterData != $this->filterData) { $this->refreshRecords(); diff --git a/app/Services/Helpers.php b/app/Services/Helpers.php index ad700fd..3e733a7 100644 --- a/app/Services/Helpers.php +++ b/app/Services/Helpers.php @@ -146,6 +146,7 @@ public static function getConstraintBy(int $soldierId, $newRange) public static function updateShiftTable($assignments) { + set_time_limit(0); if (empty($assignments)) { return; } From 27d0c8c1dbd6a28fabb7a45e8622389f30945577 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 26 Jun 2025 10:11:35 +0300 Subject: [PATCH 182/259] versin 2 algorithm --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index e3c4645..06c8df3 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_6 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_7 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index c852603..64a857f 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -149,7 +149,7 @@ public function getFormSchema(): array protected function headerActions(): array { - set_time_limit(0); + // set_time_limit(0); $this->currentMonth ?? $this->currentMonth = Carbon::now()->year.'-'.Carbon::now()->month; if ($this->lastFilterData != $this->filterData) { $this->refreshRecords(); From d83e51899256ad3303d92deebefc042f2ea2eb28 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 26 Jun 2025 10:23:48 +0300 Subject: [PATCH 183/259] versin 2 algorithm --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 06c8df3..2044098 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_7 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_8 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 64a857f..5231ffa 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -53,6 +53,7 @@ class CalendarWidget extends FullCalendarWidget public function fetchEvents(array $fetchInfo): array { + set_time_limit(0); $this->fetchInfo = $fetchInfo; $this->currentMonth = Carbon::parse($fetchInfo['start'])->addDays(7)->year.'-'.Carbon::parse($fetchInfo['start'])->addDays(7)->month; From 74bf574d34e3318dedc191ec5be441bc6b94d2a0 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 26 Jun 2025 11:28:10 +0300 Subject: [PATCH 184/259] versin 2 algorithm --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Models/Shift.php | 6 ++++-- app/Services/Algorithm.php | 3 ++- app/Services/RecurringEvents.php | 6 ++++-- 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 2044098..8d7df63 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_8 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_9 flavor: | latest=false tags: | diff --git a/app/Models/Shift.php b/app/Models/Shift.php index e2198bc..1f5fdc5 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -278,7 +278,8 @@ function ($shifts, $soldierId) use ($data) { $livewire->dispatch('filament-fullcalendar--refresh'); } if ($arguments['cancel'] ?? false) { - $livewire->dispatch('filament-fullcalendar--refresh'); + // $livewire->dispatch('filament-fullcalendar--refresh'); + $livewire->dispatch('close-modal'); } }); } @@ -576,7 +577,8 @@ function ($record) use (&$soldiers) { $livewire->dispatch('filament-fullcalendar--refresh'); } if ($arguments['cancel'] ?? false) { - $livewire->dispatch('filament-fullcalendar--refresh'); + // $livewire->dispatch('filament-fullcalendar--refresh'); + $livewire->dispatch('close-modal'); } }); } diff --git a/app/Services/Algorithm.php b/app/Services/Algorithm.php index a257de5..7a6f4d4 100644 --- a/app/Services/Algorithm.php +++ b/app/Services/Algorithm.php @@ -19,7 +19,8 @@ public function __construct($date = null) protected function getShiftWithTasks() { - $startOfMonth = max($this->date->copy()->startOfMonth(), Carbon::tomorrow()); + // $startOfMonth = max($this->date->copy()->startOfMonth(), Carbon::tomorrow()); + $startOfMonth = $this->date->copy()->startOfMonth(); $endOfMonth = $this->date->copy()->endOfMonth(); return Shift::with('task') diff --git a/app/Services/RecurringEvents.php b/app/Services/RecurringEvents.php index 0e275fb..2e7e374 100644 --- a/app/Services/RecurringEvents.php +++ b/app/Services/RecurringEvents.php @@ -114,8 +114,10 @@ protected function convertNumbersToDatesInMonth($dayNumbers) protected function createPeriod() { return $this->task->recurring['type'] == 'Daily range' ? - CarbonPeriod::between(max($this->task['recurring']['start_date'], Carbon::tomorrow()), $this->task['recurring']['end_date']) : - CarbonPeriod::between(max($this->month->copy()->startOfMonth(), Carbon::tomorrow()), $this->month->copy()->endOfMonth()); + // CarbonPeriod::between(max($this->task['recurring']['start_date'], Carbon::tomorrow()), $this->task['recurring']['end_date']) : + // CarbonPeriod::between(max($this->month->copy()->startOfMonth(), Carbon::tomorrow()), $this->month->copy()->endOfMonth()); + CarbonPeriod::between($this->task['recurring']['start_date'], $this->task['recurring']['end_date']) : + CarbonPeriod::between($this->month->copy()->startOfMonth(), $this->month->copy()->endOfMonth()); } protected function createShifts(array $dates) From 41ac780b71ce4bd11f4efef1eebccac8628900fc Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 26 Jun 2025 12:49:15 +0300 Subject: [PATCH 185/259] versin 2 algorithm --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Services/Algorithm.php | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 8d7df63..4d15f94 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_9 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_10 flavor: | latest=false tags: | diff --git a/app/Services/Algorithm.php b/app/Services/Algorithm.php index 7a6f4d4..493573c 100644 --- a/app/Services/Algorithm.php +++ b/app/Services/Algorithm.php @@ -41,7 +41,9 @@ protected function getSoldiersDetails() { return Soldier::with('constraints') ->where('is_reservist', false) - ->whereJsonLength('qualifications', '>', 0) + // ->whereJsonLength('qualifications', '>', 0) + ->whereRaw('json_type(qualifications) = ?', ['array']) + ->whereRaw('json_array_length(qualifications) > ?', [0]) ->get() ->map(function (Soldier $soldier) { $constraints = Helpers::buildConstraints($soldier->constraints, new Range($this->date->copy()->startOfMonth(), $this->date->copy()->endOfMonth())); From 0e7fac5af3007ea2bab36956168a9b7794bdd195 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 26 Jun 2025 13:07:02 +0300 Subject: [PATCH 186/259] versin 2 algorithm --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Services/Algorithm.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 4d15f94..4794acb 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_10 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_11 flavor: | latest=false tags: | diff --git a/app/Services/Algorithm.php b/app/Services/Algorithm.php index 493573c..e8cdd9b 100644 --- a/app/Services/Algorithm.php +++ b/app/Services/Algorithm.php @@ -42,8 +42,8 @@ protected function getSoldiersDetails() return Soldier::with('constraints') ->where('is_reservist', false) // ->whereJsonLength('qualifications', '>', 0) - ->whereRaw('json_type(qualifications) = ?', ['array']) - ->whereRaw('json_array_length(qualifications) > ?', [0]) + // ->whereRaw('json_type(qualifications) = ?', ['array']) + // ->whereRaw('json_array_length(qualifications) > ?', [0]) ->get() ->map(function (Soldier $soldier) { $constraints = Helpers::buildConstraints($soldier->constraints, new Range($this->date->copy()->startOfMonth(), $this->date->copy()->endOfMonth())); From 0dd3437cc8fa6f2ab8868fe1dea4ebddbd9efd26 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 26 Jun 2025 16:15:55 +0300 Subject: [PATCH 187/259] versin 2 algorithm --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 7 ++++--- app/Services/ConcurrentTasks.php | 3 ++- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 4794acb..cc7c236 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_11 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_12 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 5231ffa..5eb90f8 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -133,8 +133,8 @@ public function getEventsByRole() ->orWhereNull('soldier_id'), } : $query->where('soldier_id', '=', $current_user_id); - return $query->where('start_date', '>=', $this->fetchInfo['start']) - ->where('end_date', '<=', $this->fetchInfo['end']) + return $query->where('start_date', '>=', Carbon::create($this->fetchInfo['start'])->setTimezone('Asia/Jerusalem')) + ->where('end_date', '<=', Carbon::create($this->fetchInfo['end'])->setTimezone('Asia/Jerusalem')) ->get(); } @@ -277,7 +277,8 @@ protected function downloadAssignmentJustice() protected function resetShifts() { $this->startDate = (Carbon::now()->format('m') == Carbon::parse($this->currentMonth)->format('m')) - ? Carbon::now()->addDay()->format('Y-m-d') + // ? Carbon::now()->addDay()->format('Y-m-d') + ? Carbon::now()->startOfMonth()->format('Y-m-d') : Carbon::parse($this->currentMonth)->startOfMonth()->format('Y-m-d'); Shift::whereNotNull('soldier_id') ->whereBetween('start_date', [$this->startDate, (Carbon::parse($this->currentMonth)->endOfMonth()->addDay())->format('Y-m-d')]) diff --git a/app/Services/ConcurrentTasks.php b/app/Services/ConcurrentTasks.php index 5a7acb2..0268c86 100644 --- a/app/Services/ConcurrentTasks.php +++ b/app/Services/ConcurrentTasks.php @@ -40,7 +40,8 @@ public function run() protected function getShiftsWithTasks() { - $startOfMonth = max($this->date->copy()->startOfMonth(), Carbon::tomorrow()); + $startOfMonth = $this->date->copy()->startOfMonth(); + // $startOfMonth = max($this->date->copy()->startOfMonth(), Carbon::tomorrow()); $endOfMonth = $this->date->copy()->endOfMonth(); return Shift::whereNull('soldier_id') From 6167a66836a45a1240d7b02feb4c6a21163acdb3 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Tue, 1 Jul 2025 11:34:36 +0300 Subject: [PATCH 188/259] versin 2 algorithm --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 6 ++++-- app/Models/Shift.php | 8 ++------ 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index cc7c236..0124f2a 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_12 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_13 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 5eb90f8..114dcd8 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -53,7 +53,7 @@ class CalendarWidget extends FullCalendarWidget public function fetchEvents(array $fetchInfo): array { - set_time_limit(0); + // set_time_limit(0); $this->fetchInfo = $fetchInfo; $this->currentMonth = Carbon::parse($fetchInfo['start'])->addDays(7)->year.'-'.Carbon::parse($fetchInfo['start'])->addDays(7)->month; @@ -140,7 +140,9 @@ public function getEventsByRole() protected function events($events): Collection { - return $this->filter ? $this->model::filter($events, $this->filterData) : $events; + return $this->type === 'my_soldiers' + ? ($this->filter ? $this->model::filter($events, $this->filterData) : collect()) + : ($this->filter ? $this->model::filter($events, $this->filterData) : $events); } public function getFormSchema(): array diff --git a/app/Models/Shift.php b/app/Models/Shift.php index 1f5fdc5..54cb93c 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -766,8 +766,6 @@ public static function getFilters($calendar) ->label(__('Filter')) ->icon('heroicon-o-funnel') ->form(function () use ($calendar) { - $shifts = $calendar->getEventsByRole(); - $soldiersShifts = array_filter($shifts->toArray(), fn ($shift) => $shift['soldier_id'] !== null); return [ section::make([ @@ -801,10 +799,8 @@ public static function getFilters($calendar) ]), Select::make('soldier_id') ->label(__('Soldier')) - ->options(fn (): array => collect($soldiersShifts)->mapWithKeys(fn ($shift) => [ - $shift['soldier_id'] => User::where('userable_id', $shift['soldier_id']) - ->first()?->displayName, - ])->toArray()) + ->options(fn(): array => Cache::remember('users', 30 * 60, fn() => User::all())->mapWithKeys(fn($user) => [$user->userable_id => $user->displayName]) + ->toArray()) ->multiple() ->live() ->reactive() From 8e5b5531fa37172554981989be165aeafe67097e Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Tue, 1 Jul 2025 11:48:51 +0300 Subject: [PATCH 189/259] versin 2 algorithm --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 0124f2a..3cd93a1 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_13 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_14 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 114dcd8..8d75a73 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -53,7 +53,7 @@ class CalendarWidget extends FullCalendarWidget public function fetchEvents(array $fetchInfo): array { - // set_time_limit(0); + set_time_limit(0); $this->fetchInfo = $fetchInfo; $this->currentMonth = Carbon::parse($fetchInfo['start'])->addDays(7)->year.'-'.Carbon::parse($fetchInfo['start'])->addDays(7)->month; From 2476adf2dc297719457270fc880003bb438f6e67 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 2 Jul 2025 09:51:02 +0300 Subject: [PATCH 190/259] versin 2 algorithm --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 80 +++++++++++++--------- app/Models/Shift.php | 69 ++++++++++++++++--- 3 files changed, 109 insertions(+), 42 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 3cd93a1..45f0690 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_14 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_15 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 8d75a73..ed6d79c 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -53,13 +53,15 @@ class CalendarWidget extends FullCalendarWidget public function fetchEvents(array $fetchInfo): array { - set_time_limit(0); + // set_time_limit(0); $this->fetchInfo = $fetchInfo; $this->currentMonth = Carbon::parse($fetchInfo['start'])->addDays(7)->year.'-'.Carbon::parse($fetchInfo['start'])->addDays(7)->month; - $events = $this->getEventsByRole(); + // $events = $this->getEventsByRole(); - $eventDays = self::events($events) + // $eventDays = self::events($events) + $events = self::events(); + $eventDays = $events ->map(fn (Model $event) => [ 'id' => $event[$this->keys[0]], 'title' => $event[$this->keys[1]], @@ -103,46 +105,58 @@ private function getHolidays($month, $day, $year): array return [$holiday->isHoliday, $holiday->holidayName]; } - public function getEventsByRole() + // public function getEventsByRole() + // { + // $current_user_id = auth()->user()->userable_id; + // $role = current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])); + // $query = $this->model == Shift::class ? + // $this->model::with(['task', 'soldier']) + // : $this->model::with('soldier'); + // $query = ($this->type === 'my_soldiers') ? match ($role) { + // 'manager', 'shifts-assignment' => $query->where('soldier_id', '!=', $current_user_id) + // ->orWhereNull('soldier_id'), + // 'department-commander' => $query->where('soldier_id', '!=', $current_user_id) + // ->where(function ($query) use ($current_user_id) { + // $query->whereNull('soldier_id') + // ->orWhereIn('soldier_id', Department::whereHas('commander', function ($query) use ($current_user_id) { + // $query->where('id', $current_user_id); + // })->first()?->teams->flatMap(fn (Team $team) => $team->members->pluck('id'))->toArray() ?? collect([])) + // ->orWhereIn('soldier_id', Department::whereHas('commander', function ($query) use ($current_user_id) { + // $query->where('id', $current_user_id); + // })->first()?->teams->pluck('commander_id') ?? collect([])); + // })->orWhereNull('soldier_id'), + // 'team-commander' => $query->where('soldier_id', '!=', $current_user_id) + // ->where(function ($query) use ($current_user_id) { + // $query->whereNull('soldier_id') + // ->orWhereIn('soldier_id', Team::whereHas('commander', function ($query) use ($current_user_id) { + // $query->where('id', $current_user_id); + // })->first()?->members->pluck('id') ?? collect([])); + // }) + // ->orWhereNull('soldier_id'), + // } : $query->where('soldier_id', '=', $current_user_id); + + // return $query->where('start_date', '>=', Carbon::create($this->fetchInfo['start'])->setTimezone('Asia/Jerusalem')) + // ->where('end_date', '<=', Carbon::create($this->fetchInfo['end'])->setTimezone('Asia/Jerusalem')) + // ->get(); + // } + + public function getMyEvents() { $current_user_id = auth()->user()->userable_id; - $role = current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])); $query = $this->model == Shift::class ? - $this->model::with(['task', 'soldier']) - : $this->model::with('soldier'); - $query = ($this->type === 'my_soldiers') ? match ($role) { - 'manager', 'shifts-assignment' => $query->where('soldier_id', '!=', $current_user_id) - ->orWhereNull('soldier_id'), - 'department-commander' => $query->where('soldier_id', '!=', $current_user_id) - ->where(function ($query) use ($current_user_id) { - $query->whereNull('soldier_id') - ->orWhereIn('soldier_id', Department::whereHas('commander', function ($query) use ($current_user_id) { - $query->where('id', $current_user_id); - })->first()?->teams->flatMap(fn (Team $team) => $team->members->pluck('id'))->toArray() ?? collect([])) - ->orWhereIn('soldier_id', Department::whereHas('commander', function ($query) use ($current_user_id) { - $query->where('id', $current_user_id); - })->first()?->teams->pluck('commander_id') ?? collect([])); - })->orWhereNull('soldier_id'), - 'team-commander' => $query->where('soldier_id', '!=', $current_user_id) - ->where(function ($query) use ($current_user_id) { - $query->whereNull('soldier_id') - ->orWhereIn('soldier_id', Team::whereHas('commander', function ($query) use ($current_user_id) { - $query->where('id', $current_user_id); - })->first()?->members->pluck('id') ?? collect([])); - }) - ->orWhereNull('soldier_id'), - } : $query->where('soldier_id', '=', $current_user_id); + $this->model::with(['task', 'soldier']) + : $this->model::with('soldier'); + $query = $query->where('soldier_id', '=', $current_user_id); return $query->where('start_date', '>=', Carbon::create($this->fetchInfo['start'])->setTimezone('Asia/Jerusalem')) ->where('end_date', '<=', Carbon::create($this->fetchInfo['end'])->setTimezone('Asia/Jerusalem')) ->get(); } - - protected function events($events): Collection + protected function events(): Collection { return $this->type === 'my_soldiers' - ? ($this->filter ? $this->model::filter($events, $this->filterData) : collect()) - : ($this->filter ? $this->model::filter($events, $this->filterData) : $events); + ? ($this->filter ? $this->model::filter($this->fetchInfo, $this->filterData) : collect()) + : $this->getMyEvents(); } public function getFormSchema(): array diff --git a/app/Models/Shift.php b/app/Models/Shift.php index 54cb93c..e21bea7 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -835,21 +835,74 @@ public static function getFilters($calendar) $calendar->refreshRecords(); }); } + public static function getEventsByRole() + { + $current_user_id = auth()->user()->userable_id; + $role = current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])); + $query = Shift::with(['task', 'soldier']); + $query = match ($role) { + 'manager', 'shifts-assignment' => $query->where(function ($query) use ($current_user_id) { + $query->where('soldier_id', '!=', $current_user_id) + ->orWhereNull('soldier_id'); + }), + 'department-commander' => $query->where(function ($query) use ($current_user_id) { + $query->where('soldier_id', '!=', $current_user_id) + ->where(function ($query) use ($current_user_id) { + $query->whereNull('soldier_id') + ->orWhereIn('soldier_id', Department::whereHas('commander', function ($query) use ($current_user_id) { + $query->where('id', $current_user_id); + })->first()?->teams->flatMap(fn (Team $team) => $team->members->pluck('id'))->toArray() ?? collect([])) + ->orWhereIn('soldier_id', Department::whereHas('commander', function ($query) use ($current_user_id) { + $query->where('id', $current_user_id); + })->first()?->teams->pluck('commander_id') ?? collect([])); + })->orWhereNull('soldier_id'); + }), + 'team-commander' => $query->where(function ($query) use ($current_user_id) { + $query->where('soldier_id', '!=', $current_user_id) + ->where(function ($query) use ($current_user_id) { + $query->whereNull('soldier_id') + ->orWhereIn('soldier_id', Team::whereHas('commander', function ($query) use ($current_user_id) { + $query->where('id', $current_user_id); + })->first()?->members->pluck('id') ?? collect([])); + }) + ->orWhereNull('soldier_id'); + }), + }; + + return $query; - public static function filter($events, $filterData) + } + public static function filter($fetchInfo, $filterData) { - return $events - ->when($filterData['reservists'], fn ($query) => $query - ->whereIn('soldier_id', Soldier::where('is_reservist', true)->pluck('id')->toArray())) + $query = self::getEventsByRole(); + + return $query + ->where(function ($query) use ($fetchInfo) { + $query->where('start_date', '>=', Carbon::create($fetchInfo['start'])->setTimezone('Asia/Jerusalem')) + ->where('end_date', '<=', Carbon::create($fetchInfo['end'])->setTimezone('Asia/Jerusalem')); + })->when($filterData['reservists'], fn ($query) => $query + ->whereIn('soldier_id', Soldier::where('is_reservist', true)->pluck('id')->toArray())) ->when($filterData['unassigned_shifts'], fn ($query) => $query ->where('soldier_id', null)) ->when(! empty($filterData['soldier_id']), fn ($query) => $query ->whereIn('soldier_id', $filterData['soldier_id'])) - ->filter(fn ($event) => $filterData['kind'] ? $event->task()->withTrashed()->first()->kind == $filterData['kind'] : true) - ->filter(fn ($event) => empty($filterData['type']) || collect($filterData['type'])->contains($event->task()->withTrashed()->first()->type)) - ->filter(fn ($event) => empty($filterData['course']) || ($event->soldier_id && collect($filterData['course'])->contains(Soldier::find($event->soldier_id)->course))); + ->when($filterData['kind'], function ($query) use ($filterData) { + $query->whereHas('task', function ($query) use ($filterData) { + $query->withTrashed()->where('kind', $filterData['kind']); + }); + }) + ->when(! empty($filterData['type']), function ($query) use ($filterData) { + $query->whereHas('task', function ($query) use ($filterData) { + $query->withTrashed()->whereIn('type', collect($filterData['type'])); + }); + }) + ->when(! empty($filterData['course']), function ($query) use ($filterData) { + $query->whereHas('soldier', function ($query) use ($filterData) { + $query->whereIn('course', collect($filterData['course'])); + }); + })->get(); } - + public static function activeFilters($calendar) { if (! $calendar->filter) { From af603e64a805b30e4598b1961adf5ca74ab64a61 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 2 Jul 2025 14:22:13 +0300 Subject: [PATCH 191/259] versin 2 algorithm --- app/Models/Constraint.php | 115 +++++++++++++++++++++++++++++--------- 1 file changed, 88 insertions(+), 27 deletions(-) diff --git a/app/Models/Constraint.php b/app/Models/Constraint.php index ad65b7a..c102574 100644 --- a/app/Models/Constraint.php +++ b/app/Models/Constraint.php @@ -350,48 +350,109 @@ public static function getFilters($calendar) ->iconButton() ->label(__('Filter')) ->icon('heroicon-o-funnel') - ->form(function () use ($calendar) { - $constraints = $calendar->getEventsByRole(); - $soldiersConstraints = array_filter($constraints->toArray(), fn ($constraint) => $constraint['soldier_id'] != null); - - return [ - Select::make('soldier_id') - ->label(__('Soldier')) - ->options(fn (): array => collect($soldiersConstraints)->mapWithKeys(fn ($constraint) => [ - $constraint['soldier_id'] => optional(User::where('userable_id', $constraint['soldier_id'])->first())->displayName ?? __('Unknown Soldier'), - ])->toArray()) - ->multiple(), - ]; - }) + ->form(fn () => [ + Select::make('soldier_id') + ->label(__('Soldier')) + ->options(fn (): array => Cache::remember('users', 30 * 60, fn () => User::all())->mapWithKeys(fn ($user) => [$user->userable_id => $user->displayName]) + ->toArray()) + ->multiple(), + Select::make('constraint_type') + ->label(__('Constraint Name')) + ->options(fn () => collect(ConstraintType::cases())->mapWithKeys(fn ($type) => [$type->value => $type->getLabel()])) + ->multiple(), + ]) ->modalSubmitActionLabel(__('Filter')) ->modalCancelAction(false) ->action(function (array $data) use ($calendar) { - $calendar->filterData = $data; - $calendar->filter = $data['soldier_id'] === [] ? false : true; + if (! empty($data['soldier_id']) || ! empty($data['constraint_type'])) { + $calendar->filterData = $data; + $calendar->filter = true; + } else { + $calendar->filter = false; + $calendar->filterData = []; + } $calendar->refreshRecords(); }); } - public static function filter($events, $filterData) + public static function getEventsByRole() { - return $events - ->whereIn('soldier_id', $filterData['soldier_id']) - ->values(); + $current_user_id = auth()->user()->userable_id; + $role = current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])); + $query = Constraint::with('soldier'); + $query = match ($role) { + 'manager', 'shifts-assignment' => $query->where(function ($query) use ($current_user_id) { + $query->where('soldier_id', '!=', $current_user_id) + ->orWhereNull('soldier_id'); + }), + 'department-commander' => $query->where(function ($query) use ($current_user_id) { + $query->where('soldier_id', '!=', $current_user_id) + ->where(function ($query) use ($current_user_id) { + $query->whereNull('soldier_id') + ->orWhereIn('soldier_id', Department::whereHas('commander', function ($query) use ($current_user_id) { + $query->where('id', $current_user_id); + })->first()?->teams->flatMap(fn (Team $team) => $team->members->pluck('id'))->toArray() ?? collect([])) + ->orWhereIn('soldier_id', Department::whereHas('commander', function ($query) use ($current_user_id) { + $query->where('id', $current_user_id); + })->first()?->teams->pluck('commander_id') ?? collect([])); + })->orWhereNull('soldier_id'); + }), + 'team-commander' => $query->where(function ($query) use ($current_user_id) { + $query->where('soldier_id', '!=', $current_user_id) + ->where(function ($query) use ($current_user_id) { + $query->whereNull('soldier_id') + ->orWhereIn('soldier_id', Team::whereHas('commander', function ($query) use ($current_user_id) { + $query->where('id', $current_user_id); + })->first()?->members->pluck('id') ?? collect([])); + }) + ->orWhereNull('soldier_id'); + }), + }; + + return $query; + } - public static function activeFilters($calendar) + public static function filter($fetchInfo, $filterData) { - if ($calendar->filter) { - $activeFilter = collect($calendar->filterData['soldier_id'])->map(function ($soldier_id) { - $user = User::where('userable_id', $soldier_id)->first(); + $query = self::getEventsByRole(); - return $user ? $user->displayName : __('Unknown soldier'); - }); + return $query + ->where(function ($query) use ($fetchInfo) { + $query->where('start_date', '>=', Carbon::create($fetchInfo['start'])->setTimezone('Asia/Jerusalem')) + ->where('end_date', '<=', Carbon::create($fetchInfo['end'])->setTimezone('Asia/Jerusalem')); + }) + ->when(! empty($filterData['soldier_id']), function ($query) use ($filterData) { + $query->whereIn('soldier_id', $filterData['soldier_id']); + }) + ->when(! empty($filterData['constraint_type']), function ($query) use ($filterData) { + $query->whereIn('constraint_type', collect($filterData['constraint_type'])); + }) + ->get(); + } + + public static function activeFilters($calendar) + { + if (! $calendar->filter) { + return []; + } + $data = $calendar->filterData; + $labels = collect([]); + if (! empty($data['soldier_id'])) { + $soldiers = collect($data['soldier_id']) + ->map(fn ($id) => Soldier::find($id)->user->displayName) + ->implode(', '); + $labels->push(__('Soldiers').': '.$soldiers); + } + if (! empty($data['constraint_type'])) { + $types = collect($data['constraint_type']) + ->map(fn ($type) => ConstraintType::from($type)->getLabel()) + ->implode(', '); + $labels->push(__('Constraint Name').': '.$types); } - return $activeFilter->toArray(); + return $labels->toArray(); } - public static function getTitle(): string { return __('Constraint'); From db0f1fd5fa50d778b221abcee6e96528463cb49f Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 2 Jul 2025 14:40:36 +0300 Subject: [PATCH 192/259] versin 2 algorithm --- .github/workflows/php-build-and-deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 45f0690..d242b90 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_15 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_16 flavor: | latest=false tags: | From bac17675f90568c25723077073672def02a4799e Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 2 Jul 2025 15:25:15 +0300 Subject: [PATCH 193/259] versin 2 algorithm --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Resources/SoldierResource.php | 39 +++++++++++++++++----- 2 files changed, 31 insertions(+), 10 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index d242b90..39bb4f7 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_16 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_17 flavor: | latest=false tags: | diff --git a/app/Resources/SoldierResource.php b/app/Resources/SoldierResource.php index 763e288..d5f7478 100644 --- a/app/Resources/SoldierResource.php +++ b/app/Resources/SoldierResource.php @@ -307,6 +307,23 @@ protected static function replicateSoldier(Soldier $replica, $record) redirect()->route('filament.app.resources.soldiers.edit', ['record' => $replica->id]); } + // public static function getEloquentQuery(): Builder + // { + // if (auth()->user()->hasRole('manager') || auth()->user()->hasRole('shifts-assignment')) { + // return parent::getEloquentQuery()->where('id', '!=', auth()->user()->userable_id); + // } + + // return parent::getEloquentQuery() + // ->whereIn('team_id', Department::whereHas('commander', function ($query) { + // $query->where('id', auth()->user()->userable_id); + // })->first()?->teams->pluck('id') ?? collect([])) + // ->orWhereIn('id', Department::whereHas('commander', function ($query) { + // $query->where('id', auth()->user()->userable_id); + // })->first()?->teams->pluck('commander_id') ?? collect([])) + // ->orWhere('team_id', Team::whereHas('commander', function ($query) { + // $query->where('id', auth()->user()->userable_id); + // })->value('id') ?? collect([])); + // } public static function getEloquentQuery(): Builder { if (auth()->user()->hasRole('manager') || auth()->user()->hasRole('shifts-assignment')) { @@ -314,15 +331,19 @@ public static function getEloquentQuery(): Builder } return parent::getEloquentQuery() - ->whereIn('team_id', Department::whereHas('commander', function ($query) { - $query->where('id', auth()->user()->userable_id); - })->first()?->teams->pluck('id') ?? collect([])) - ->orWhereIn('id', Department::whereHas('commander', function ($query) { - $query->where('id', auth()->user()->userable_id); - })->first()?->teams->pluck('commander_id') ?? collect([])) - ->orWhere('team_id', Team::whereHas('commander', function ($query) { - $query->where('id', auth()->user()->userable_id); - })->value('id') ?? collect([])); + ->when(auth()->user()->hasRole('department-commander'), function ($query) { + $query->whereIn('team_id', Department::whereHas('commander', function ($query) { + $query->where('id', auth()->user()->userable_id); + })->first()?->teams->pluck('id') ?? collect([])) + ->orWhereIn('id', Department::whereHas('commander', function ($query) { + $query->where('id', auth()->user()->userable_id); + })->first()?->teams->pluck('commander_id') ?? collect([])); + }) + ->when(auth()->user()->hasRole('team-commander'), function ($query) { + $query->where('team_id', Team::whereHas('commander', function ($query) { + $query->where('id', auth()->user()->userable_id); + })->value('id') ?? collect([])); + }); } public static function getPages(): array From e4d6291b9e1dec65963a215264157adc5d495464 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 3 Jul 2025 15:54:47 +0300 Subject: [PATCH 194/259] versin 2 algorithm --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 10 +++++----- app/Resources/SoldierResource.php | 12 +++++++----- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 39bb4f7..4433d10 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_17 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_18 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index ed6d79c..a1cf0f2 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -204,7 +204,8 @@ protected function headerActions(): array Action::make('Reset assignment') ->action(fn () => $this->resetShifts()) ->label(__('Reset assignment')) - ->icon('heroicon-o-arrow-path'), + ->icon('heroicon-o-arrow-path') + ->color('danger'), ]) ->visible(in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray()) || in_array('manager', auth()->user()->getRoleNames()->toArray())), @@ -293,12 +294,11 @@ protected function downloadAssignmentJustice() protected function resetShifts() { $this->startDate = (Carbon::now()->format('m') == Carbon::parse($this->currentMonth)->format('m')) - // ? Carbon::now()->addDay()->format('Y-m-d') ? Carbon::now()->startOfMonth()->format('Y-m-d') + // ? Carbon::now()->addDay()->format('Y-m-d') : Carbon::parse($this->currentMonth)->startOfMonth()->format('Y-m-d'); - Shift::whereNotNull('soldier_id') - ->whereBetween('start_date', [$this->startDate, (Carbon::parse($this->currentMonth)->endOfMonth()->addDay())->format('Y-m-d')]) - ->update(['soldier_id' => null]); + Shift::whereBetween('start_date', [$this->startDate, (Carbon::parse($this->currentMonth)->endOfMonth()->addDay())->format('Y-m-d')]) + ->delete(); $this->refreshRecords(); } diff --git a/app/Resources/SoldierResource.php b/app/Resources/SoldierResource.php index d5f7478..c84247b 100644 --- a/app/Resources/SoldierResource.php +++ b/app/Resources/SoldierResource.php @@ -332,12 +332,14 @@ public static function getEloquentQuery(): Builder return parent::getEloquentQuery() ->when(auth()->user()->hasRole('department-commander'), function ($query) { - $query->whereIn('team_id', Department::whereHas('commander', function ($query) { - $query->where('id', auth()->user()->userable_id); - })->first()?->teams->pluck('id') ?? collect([])) - ->orWhereIn('id', Department::whereHas('commander', function ($query) { + $query->where(function ($query) { + $query->whereIn('team_id', Department::whereHas('commander', function ($query) { $query->where('id', auth()->user()->userable_id); - })->first()?->teams->pluck('commander_id') ?? collect([])); + })->first()?->teams->pluck('id') ?? collect([])) + ->orWhereIn('id', Department::whereHas('commander', function ($query) { + $query->where('id', auth()->user()->userable_id); + })->first()?->teams->pluck('commander_id') ?? collect([])); + }); }) ->when(auth()->user()->hasRole('team-commander'), function ($query) { $query->where('team_id', Team::whereHas('commander', function ($query) { From 4b770d899706ffde65166ee95ecbee99a8a3f84c Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 6 Jul 2025 15:36:03 +0300 Subject: [PATCH 195/259] versin 2 algorithm --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Resources/SoldierResource/Pages/ListSoldiers.php | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 4433d10..f5a8261 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_18 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_19 flavor: | latest=false tags: | diff --git a/app/Resources/SoldierResource/Pages/ListSoldiers.php b/app/Resources/SoldierResource/Pages/ListSoldiers.php index e935ff7..a6d8366 100644 --- a/app/Resources/SoldierResource/Pages/ListSoldiers.php +++ b/app/Resources/SoldierResource/Pages/ListSoldiers.php @@ -92,9 +92,15 @@ protected function getHeaderActions(): array } if (! empty($updateData)) { $soldiers = Soldier::where('course', $selectedCourse)->get(); - $soldiers->map(function ($soldier) use ($updateData) { + $soldiers->map(function (Soldier $soldier) use ($updateData) { collect($updateData)->map(function ($value, $key) use ($soldier) { - $soldier->{$key} = $value; + if ($key == 'qualifications') { + $qualifications = collect($soldier->qualifications); + $qualifications->push(...$value); + $soldier->qualifications = $qualifications; + } else { + $soldier->{$key} = $value; + } }); $soldier->save(); }); From b987d732278542305cc1aecd608999fa43d250af Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Mon, 7 Jul 2025 13:56:02 +0300 Subject: [PATCH 196/259] versin 2 algorithm --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 122 ++++---- app/Filament/Widgets/ChartWidget.php | 2 +- app/Models/Constraint.php | 43 +-- app/Models/Shift.php | 159 ++++------- app/Models/Soldier.php | 1 + app/Resources/ProfileResource.php | 24 +- app/Resources/SoldierResource.php | 54 ++-- .../SoldierResource/Pages/ListSoldiers.php | 23 +- app/Resources/TaskResource.php | 5 +- .../TaskResource/Pages/CreateTask.php | 1 + app/Resources/TeamResource.php | 4 +- app/Services/Algorithm.php | 19 +- app/Services/ConcurrentTasks.php | 31 ++- app/Services/Helpers.php | 43 +-- app/Services/ManualAssignment.php | 108 ++++---- app/Services/MaxData.php | 26 ++ app/Services/PotentialSoldierData.php | 16 ++ app/Services/Range.php | 31 +-- app/Services/RecurringEvents.php | 6 +- app/Services/Schedule.php | 262 ++++++++++++++++-- app/Services/Shift.php | 36 +-- app/Services/ShiftData.php | 8 +- app/Services/Soldier.php | 94 ++----- app/Traits/EventsByRole.php | 45 +++ database/factories/SoldierFactory.php | 1 + ...2024_05_30_094012_create_soldier_table.php | 1 + lang/he.json | 7 +- tests/Feature/CalendarWidgetTest.php | 21 +- tests/Unit/ChangeAssignmentServiceTest.php | 6 +- 30 files changed, 682 insertions(+), 519 deletions(-) create mode 100644 app/Services/PotentialSoldierData.php create mode 100644 app/Traits/EventsByRole.php diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index f5a8261..9402a20 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_19 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_20 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index a1cf0f2..2ca30fe 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -6,10 +6,8 @@ use App\Exports\AssignmentJustice; use App\Exports\ShiftsExport; use App\Models\Constraint; -use App\Models\Department; use App\Models\Shift; use App\Models\Task; -use App\Models\Team; use App\Services\Algorithm; use App\Services\Holidays; use App\Services\Range; @@ -53,14 +51,11 @@ class CalendarWidget extends FullCalendarWidget public function fetchEvents(array $fetchInfo): array { - // set_time_limit(0); $this->fetchInfo = $fetchInfo; $this->currentMonth = Carbon::parse($fetchInfo['start'])->addDays(7)->year.'-'.Carbon::parse($fetchInfo['start'])->addDays(7)->month; - // $events = $this->getEventsByRole(); - - // $eventDays = self::events($events) $events = self::events(); + $eventDays = $events ->map(fn (Model $event) => [ 'id' => $event[$this->keys[0]], @@ -98,65 +93,31 @@ public function fetchEvents(array $fetchInfo): array return array_merge($eventDays, $specialDays); } - private function getHolidays($month, $day, $year): array + protected function events(): Collection { - $holiday = new Holidays($month, $day, $year); - - return [$holiday->isHoliday, $holiday->holidayName]; + return $this->type === 'my_soldiers' + ? ($this->filter ? $this->model::filter($this->fetchInfo, $this->filterData) : collect()) + : $this->getMyEvents(); } - // public function getEventsByRole() - // { - // $current_user_id = auth()->user()->userable_id; - // $role = current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])); - // $query = $this->model == Shift::class ? - // $this->model::with(['task', 'soldier']) - // : $this->model::with('soldier'); - // $query = ($this->type === 'my_soldiers') ? match ($role) { - // 'manager', 'shifts-assignment' => $query->where('soldier_id', '!=', $current_user_id) - // ->orWhereNull('soldier_id'), - // 'department-commander' => $query->where('soldier_id', '!=', $current_user_id) - // ->where(function ($query) use ($current_user_id) { - // $query->whereNull('soldier_id') - // ->orWhereIn('soldier_id', Department::whereHas('commander', function ($query) use ($current_user_id) { - // $query->where('id', $current_user_id); - // })->first()?->teams->flatMap(fn (Team $team) => $team->members->pluck('id'))->toArray() ?? collect([])) - // ->orWhereIn('soldier_id', Department::whereHas('commander', function ($query) use ($current_user_id) { - // $query->where('id', $current_user_id); - // })->first()?->teams->pluck('commander_id') ?? collect([])); - // })->orWhereNull('soldier_id'), - // 'team-commander' => $query->where('soldier_id', '!=', $current_user_id) - // ->where(function ($query) use ($current_user_id) { - // $query->whereNull('soldier_id') - // ->orWhereIn('soldier_id', Team::whereHas('commander', function ($query) use ($current_user_id) { - // $query->where('id', $current_user_id); - // })->first()?->members->pluck('id') ?? collect([])); - // }) - // ->orWhereNull('soldier_id'), - // } : $query->where('soldier_id', '=', $current_user_id); - - // return $query->where('start_date', '>=', Carbon::create($this->fetchInfo['start'])->setTimezone('Asia/Jerusalem')) - // ->where('end_date', '<=', Carbon::create($this->fetchInfo['end'])->setTimezone('Asia/Jerusalem')) - // ->get(); - // } - public function getMyEvents() { - $current_user_id = auth()->user()->userable_id; + $currentUserId = auth()->user()->userable_id; $query = $this->model == Shift::class ? $this->model::with(['task', 'soldier']) : $this->model::with('soldier'); - $query = $query->where('soldier_id', '=', $current_user_id); + $query = $query->where('soldier_id', '=', $currentUserId); return $query->where('start_date', '>=', Carbon::create($this->fetchInfo['start'])->setTimezone('Asia/Jerusalem')) ->where('end_date', '<=', Carbon::create($this->fetchInfo['end'])->setTimezone('Asia/Jerusalem')) ->get(); } - protected function events(): Collection + + private function getHolidays($month, $day, $year): array { - return $this->type === 'my_soldiers' - ? ($this->filter ? $this->model::filter($this->fetchInfo, $this->filterData) : collect()) - : $this->getMyEvents(); + $holiday = new Holidays($month, $day, $year); + + return [$holiday->isHoliday, $holiday->holidayName]; } public function getFormSchema(): array @@ -166,7 +127,6 @@ public function getFormSchema(): array protected function headerActions(): array { - // set_time_limit(0); $this->currentMonth ?? $this->currentMonth = Carbon::now()->year.'-'.Carbon::now()->month; if ($this->lastFilterData != $this->filterData) { $this->refreshRecords(); @@ -202,10 +162,20 @@ protected function headerActions(): array ->icon('heroicon-o-play') ->visible($hasActiveTasks), Action::make('Reset assignment') + ->color('danger') ->action(fn () => $this->resetShifts()) ->label(__('Reset assignment')) - ->icon('heroicon-o-arrow-path') - ->color('danger'), + ->requiresConfirmation() + ->modalHeading(__('Reset assignment')) + ->modalDescription(__('Are you sure? This cannot be undone!')) + ->modalSubmitActionLabel(__('Yes, reset it')) + ->icon('heroicon-o-arrow-path'), + Action::make('Delete shifts') + ->color('danger') + ->action(fn () => $this->deleteShifts()) + ->label(__('Delete shifts')) + ->requiresConfirmation() + ->icon('heroicon-o-x-circle'), ]) ->visible(in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray()) || in_array('manager', auth()->user()->getRoleNames()->toArray())), @@ -291,17 +261,6 @@ protected function downloadAssignmentJustice() ]).'.xlsx')); } - protected function resetShifts() - { - $this->startDate = (Carbon::now()->format('m') == Carbon::parse($this->currentMonth)->format('m')) - ? Carbon::now()->startOfMonth()->format('Y-m-d') - // ? Carbon::now()->addDay()->format('Y-m-d') - : Carbon::parse($this->currentMonth)->startOfMonth()->format('Y-m-d'); - Shift::whereBetween('start_date', [$this->startDate, (Carbon::parse($this->currentMonth)->endOfMonth()->addDay())->format('Y-m-d')]) - ->delete(); - $this->refreshRecords(); - } - protected function runEvents() { $recurringEvents = new RecurringEvents($this->currentMonth); @@ -316,6 +275,27 @@ protected function runAlgorithm() $this->refreshRecords(); } + protected function resetShifts() + { + $this->startDate = (Carbon::now()->format('m') == Carbon::parse($this->currentMonth)->format('m')) + ? Carbon::now()->addDay()->format('Y-m-d') + : Carbon::parse($this->currentMonth)->startOfMonth()->format('Y-m-d'); + Shift::whereNotNull('soldier_id') + ->whereBetween('start_date', [$this->startDate, (Carbon::parse($this->currentMonth)->endOfMonth()->addDay())->format('Y-m-d')]) + ->update(['soldier_id' => null]); + $this->refreshRecords(); + } + + protected function deleteShifts() + { + $this->startDate = (Carbon::now()->format('m') == Carbon::parse($this->currentMonth)->format('m')) + ? Carbon::now()->addDay()->format('Y-m-d') + : Carbon::parse($this->currentMonth)->startOfMonth()->format('Y-m-d'); + Shift::whereBetween('start_date', [$this->startDate, (Carbon::parse($this->currentMonth)->endOfMonth()->addDay())->format('Y-m-d')]) + ->delete(); + $this->refreshRecords(); + } + protected function resetFilters() { return Action::make('resetFilters') @@ -364,13 +344,15 @@ protected function getBasicActions() { return [ EditAction::make() - ->fillForm(fn (Model $record, array $arguments) => method_exists($this->model, 'fillForm') + ->fillForm( + fn (Model $record, array $arguments) => method_exists($this->model, 'fillForm') ? (new $this->model)->fillForm($record, $arguments) : [ ...$record->getAttributes(), 'start_date' => $arguments['event']['start'] ?? $record->start_date, 'end_date' => $arguments['event']['end'] ?? $record->end_date, - ]) + ] + ) ->visible(function (Model $record, $arguments) { if ($record->start_date < now()) { return false; @@ -496,13 +478,15 @@ protected function displayButton(): bool protected function viewAction(): Action { return ViewAction::make() - ->fillForm(fn (Model $record, array $arguments) => method_exists($this->model, 'fillForm') + ->fillForm( + fn (Model $record, array $arguments) => method_exists($this->model, 'fillForm') ? (new $this->model)->fillForm($record, $arguments) : [ ...$record->getAttributes(), 'start_date' => $arguments['event']['start'] ?? $record->start_date, 'end_date' => $arguments['event']['end'] ?? $record->end_date, - ]) + ] + ) ->modalFooterActions( function (ViewAction $action, FullCalendarWidget $livewire) { if ( diff --git a/app/Filament/Widgets/ChartWidget.php b/app/Filament/Widgets/ChartWidget.php index e7f3a49..1d4a69c 100644 --- a/app/Filament/Widgets/ChartWidget.php +++ b/app/Filament/Widgets/ChartWidget.php @@ -83,7 +83,7 @@ protected function getOptions(): array|RawJs|null callbacks: { label: function(context) { const soldierIndex = context.dataIndex; - const soldierName = context.dataset.labels ? context.dataset.labels[soldierIndex] : __('Unknown Soldier'); + const soldierName = context.dataset.labels ? context.dataset.labels[soldierIndex] : 'Unknown Soldier'; const value = context.parsed.y; return soldierName + ': ' + value; diff --git a/app/Models/Constraint.php b/app/Models/Constraint.php index c102574..67dd6e4 100644 --- a/app/Models/Constraint.php +++ b/app/Models/Constraint.php @@ -3,6 +3,7 @@ namespace App\Models; use App\Enums\ConstraintType; +use App\Traits\EventsByRole; use Cache; use Carbon\Carbon; use Filament\Actions\Action; @@ -21,6 +22,7 @@ class Constraint extends Model { + use EventsByRole; use HasFactory; protected $fillable = [ @@ -375,47 +377,9 @@ public static function getFilters($calendar) }); } - public static function getEventsByRole() - { - $current_user_id = auth()->user()->userable_id; - $role = current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])); - $query = Constraint::with('soldier'); - $query = match ($role) { - 'manager', 'shifts-assignment' => $query->where(function ($query) use ($current_user_id) { - $query->where('soldier_id', '!=', $current_user_id) - ->orWhereNull('soldier_id'); - }), - 'department-commander' => $query->where(function ($query) use ($current_user_id) { - $query->where('soldier_id', '!=', $current_user_id) - ->where(function ($query) use ($current_user_id) { - $query->whereNull('soldier_id') - ->orWhereIn('soldier_id', Department::whereHas('commander', function ($query) use ($current_user_id) { - $query->where('id', $current_user_id); - })->first()?->teams->flatMap(fn (Team $team) => $team->members->pluck('id'))->toArray() ?? collect([])) - ->orWhereIn('soldier_id', Department::whereHas('commander', function ($query) use ($current_user_id) { - $query->where('id', $current_user_id); - })->first()?->teams->pluck('commander_id') ?? collect([])); - })->orWhereNull('soldier_id'); - }), - 'team-commander' => $query->where(function ($query) use ($current_user_id) { - $query->where('soldier_id', '!=', $current_user_id) - ->where(function ($query) use ($current_user_id) { - $query->whereNull('soldier_id') - ->orWhereIn('soldier_id', Team::whereHas('commander', function ($query) use ($current_user_id) { - $query->where('id', $current_user_id); - })->first()?->members->pluck('id') ?? collect([])); - }) - ->orWhereNull('soldier_id'); - }), - }; - - return $query; - - } - public static function filter($fetchInfo, $filterData) { - $query = self::getEventsByRole(); + $query = self::getEventsByRole(Constraint::with('soldier')); return $query ->where(function ($query) use ($fetchInfo) { @@ -453,6 +417,7 @@ public static function activeFilters($calendar) return $labels->toArray(); } + public static function getTitle(): string { return __('Constraint'); diff --git a/app/Models/Shift.php b/app/Models/Shift.php index e21bea7..1c84321 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -7,6 +7,7 @@ use App\Filament\Notifications\MyNotification; use App\Services\ChangeAssignment; use App\Services\ManualAssignment; +use App\Traits\EventsByRole; use Cache; use Carbon\Carbon; use Filament\Actions\Action; @@ -28,6 +29,7 @@ class Shift extends Model { + use EventsByRole; use HasFactory; protected $fillable = [ @@ -54,7 +56,7 @@ public function soldier(): BelongsTo private function getTaskParallelWeight() { - return $this->task()->withTrashed()->first()->parallel_weight; + return $this->task?->parallel_weight; } public function getTaskNameAttribute() @@ -62,13 +64,13 @@ public function getTaskNameAttribute() $user_name = User::where('userable_id', $this->soldier_id)->get(['first_name', 'last_name']); return $this->soldier_id == auth()->user()->userable_id - ? $this->task()->withTrashed()->first()->name - : $this->task()->withTrashed()->first()->name.' '.$user_name->first()?->first_name.' '.$user_name->first()?->last_name; + ? $this->task?->name + : $this->task?->name.' '.$user_name->first()?->first_name.' '.$user_name->first()?->last_name; } public function getTaskColorAttribute() { - return $this->task()->withTrashed()->first()->color; + return $this->task?->color; } public static function getSchema(): array @@ -278,8 +280,7 @@ function ($shifts, $soldierId) use ($data) { $livewire->dispatch('filament-fullcalendar--refresh'); } if ($arguments['cancel'] ?? false) { - // $livewire->dispatch('filament-fullcalendar--refresh'); - $livewire->dispatch('close-modal'); + $livewire->dispatch('filament-fullcalendar--refresh'); } }); } @@ -577,8 +578,7 @@ function ($record) use (&$soldiers) { $livewire->dispatch('filament-fullcalendar--refresh'); } if ($arguments['cancel'] ?? false) { - // $livewire->dispatch('filament-fullcalendar--refresh'); - $livewire->dispatch('close-modal'); + $livewire->dispatch('filament-fullcalendar--refresh'); } }); } @@ -765,63 +765,60 @@ public static function getFilters($calendar) ->iconButton() ->label(__('Filter')) ->icon('heroicon-o-funnel') - ->form(function () use ($calendar) { - - return [ - section::make([ - Toggle::make('reservists') - ->label(__('Reservists')) - ->live() - ->reactive() - ->afterStateUpdated(function ($state, $set) { - if ($state) { - $set('unassigned_shifts', false); - } - }), - Toggle::make('unassigned_shifts') - ->label(__('Unassigned shifts')) - ->live() - ->reactive() - ->afterStateUpdated(function ($state, $set) { - if ($state) { - $set('reservists', false); - $set('soldier_id', null); - $set('course', null); - } - }), - ])->columns(2), - section::make([ - Radio::make('kind') - ->label(__('Kind')) - ->options(collect(TaskKind::cases())->mapWithKeys(fn ($kind) => [$kind->value => $kind->getLabel()])) - ->inlineLabel(false) - ->inline(), - ]), - Select::make('soldier_id') - ->label(__('Soldier')) - ->options(fn(): array => Cache::remember('users', 30 * 60, fn() => User::all())->mapWithKeys(fn($user) => [$user->userable_id => $user->displayName]) - ->toArray()) - ->multiple() + ->form(fn () => [ + section::make([ + Toggle::make('reservists') + ->label(__('Reservists')) ->live() ->reactive() - ->hidden(fn (Get $get) => $get('unassigned_shifts') || $get('course')), - Select::make('type') - ->label(__('Type')) - ->options(Task::select('type') - ->distinct() - ->orderBy('type') - ->pluck('type', 'type') - ->all()) - ->multiple(), - Select::make('course') - ->options(Soldier::select('course')->distinct()->orderBy('course')->pluck('course', 'course')->all()) - ->label(__('Course')) - ->multiple() + ->afterStateUpdated(function ($state, $set) { + if ($state) { + $set('unassigned_shifts', false); + } + }), + Toggle::make('unassigned_shifts') + ->label(__('Unassigned shifts')) ->live() ->reactive() - ->hidden(fn (Get $get) => $get('unassigned_shifts') || $get('soldier_id')), - ]; - }) + ->afterStateUpdated(function ($state, $set) { + if ($state) { + $set('reservists', false); + $set('soldier_id', null); + $set('course', null); + } + }), + ])->columns(2), + section::make([ + Radio::make('kind') + ->label(__('Kind')) + ->options(collect(TaskKind::cases())->mapWithKeys(fn ($kind) => [$kind->value => $kind->getLabel()])) + ->inlineLabel(false) + ->inline(), + ]), + Select::make('soldier_id') + ->label(__('Soldier')) + ->options(fn (): array => Cache::remember('users', 30 * 60, fn () => User::all())->mapWithKeys(fn ($user) => [$user->userable_id => $user->displayName]) + ->toArray()) + ->multiple() + ->live() + ->reactive() + ->hidden(fn (Get $get) => $get('unassigned_shifts') || $get('course')), + Select::make('type') + ->label(__('Type')) + ->options(Task::select('type') + ->distinct() + ->orderBy('type') + ->pluck('type', 'type') + ->all()) + ->multiple(), + Select::make('course') + ->options(Soldier::select('course')->distinct()->orderBy('course')->pluck('course', 'course')->all()) + ->label(__('Course')) + ->multiple() + ->live() + ->reactive() + ->hidden(fn (Get $get) => $get('unassigned_shifts') || $get('soldier_id')), + ]) ->modalCancelAction(false) ->modalSubmitActionLabel(__('Filter')) ->action(function (array $data) use ($calendar) { @@ -835,46 +832,10 @@ public static function getFilters($calendar) $calendar->refreshRecords(); }); } - public static function getEventsByRole() - { - $current_user_id = auth()->user()->userable_id; - $role = current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])); - $query = Shift::with(['task', 'soldier']); - $query = match ($role) { - 'manager', 'shifts-assignment' => $query->where(function ($query) use ($current_user_id) { - $query->where('soldier_id', '!=', $current_user_id) - ->orWhereNull('soldier_id'); - }), - 'department-commander' => $query->where(function ($query) use ($current_user_id) { - $query->where('soldier_id', '!=', $current_user_id) - ->where(function ($query) use ($current_user_id) { - $query->whereNull('soldier_id') - ->orWhereIn('soldier_id', Department::whereHas('commander', function ($query) use ($current_user_id) { - $query->where('id', $current_user_id); - })->first()?->teams->flatMap(fn (Team $team) => $team->members->pluck('id'))->toArray() ?? collect([])) - ->orWhereIn('soldier_id', Department::whereHas('commander', function ($query) use ($current_user_id) { - $query->where('id', $current_user_id); - })->first()?->teams->pluck('commander_id') ?? collect([])); - })->orWhereNull('soldier_id'); - }), - 'team-commander' => $query->where(function ($query) use ($current_user_id) { - $query->where('soldier_id', '!=', $current_user_id) - ->where(function ($query) use ($current_user_id) { - $query->whereNull('soldier_id') - ->orWhereIn('soldier_id', Team::whereHas('commander', function ($query) use ($current_user_id) { - $query->where('id', $current_user_id); - })->first()?->members->pluck('id') ?? collect([])); - }) - ->orWhereNull('soldier_id'); - }), - }; - - return $query; - } public static function filter($fetchInfo, $filterData) { - $query = self::getEventsByRole(); + $query = self::getEventsByRole(Shift::with(['task', 'soldier'])); return $query ->where(function ($query) use ($fetchInfo) { @@ -902,7 +863,7 @@ public static function filter($fetchInfo, $filterData) }); })->get(); } - + public static function activeFilters($calendar) { if (! $calendar->filter) { diff --git a/app/Models/Soldier.php b/app/Models/Soldier.php index acea307..93e7c1c 100644 --- a/app/Models/Soldier.php +++ b/app/Models/Soldier.php @@ -16,6 +16,7 @@ class Soldier extends Model use HasFactory; protected $fillable = [ + 'type', 'gender', 'is_permanent', 'enlist_date', diff --git a/app/Resources/ProfileResource.php b/app/Resources/ProfileResource.php index 45e3a38..5c24b62 100644 --- a/app/Resources/ProfileResource.php +++ b/app/Resources/ProfileResource.php @@ -52,6 +52,14 @@ public static function form(Form $form): Form ->seconds(false), ]), Section::make([ + Select::make('type') + ->label(__('Type')) + ->options([ + 'survival' => __('Survival'), + 'collection' => __('Collection'), + ]) + ->placeholder(__('Select soldier type')) + ->required(), Select::make('qualifications') ->label(__('Qualifications')) ->placeholder(__('Select qualifications')) @@ -136,14 +144,18 @@ public static function table(Table $table): Table Stack::make([ TextColumn::make('user.first_name') ->label(__('Full name')) - ->formatStateUsing(fn ($record) => $record->user->last_name.' '.$record->user->first_name + ->formatStateUsing( + fn ($record) => $record->user->last_name.' '.$record->user->first_name )->weight(FontWeight::SemiBold)->description(__('Full name'), 'above')->size(TextColumnSize::Large), + TextColumn::make('type') + ->formatStateUsing( + fn ($record) => $record->type == 'collection' ? __('Collection') : __('Survival') + )->weight(FontWeight::SemiBold)->description(__('Type'), 'above')->size(TextColumnSize::Large), TextColumn::make('enlist_date')->weight(FontWeight::SemiBold)->description(__('Enlist date'), 'above')->size(TextColumnSize::Large)->date(), TextColumn::make('course')->weight(FontWeight::SemiBold)->description(__('Course'), 'above')->size(TextColumnSize::Large), TextColumn::make('max_shifts')->weight(FontWeight::SemiBold)->description(__('Max shifts'), 'above')->size(TextColumnSize::Large), ]), Stack::make([ - TextColumn::make('max_nights')->weight(FontWeight::SemiBold)->description(__('Max nights'), 'above')->size(TextColumnSize::Large), TextColumn::make('max_weekends')->weight(FontWeight::SemiBold)->description(__('Max weekends'), 'above')->size(TextColumnSize::Large), TextColumn::make('max_alerts')->weight(FontWeight::SemiBold)->description(__('Max alerts'), 'above')->size(TextColumnSize::Large), @@ -162,9 +174,11 @@ public static function table(Table $table): Table ->whereMonth('end_date', $now->month); }); }) - ->with(['task' => function ($query) { - $query->withTrashed(); - }]) + ->with([ + 'task' => function ($query) { + $query->withTrashed(); + }, + ]) ->get() ->sum(fn (Shift $shift) => $shift->parallel_weight ?? $shift->task->parallel_weight); }) diff --git a/app/Resources/SoldierResource.php b/app/Resources/SoldierResource.php index c84247b..736eb5e 100644 --- a/app/Resources/SoldierResource.php +++ b/app/Resources/SoldierResource.php @@ -60,16 +60,23 @@ public static function table(Table $table): Table { return $table ->columns([ - TextColumn::make('user') + TextColumn::make('user.displayName') ->label(__('Full name')) - ->formatStateUsing(fn ($record) => $record->user->last_name.' '.$record->user->first_name) + ->formatStateUsing( + fn ($record) => $record->user->last_name.' '.$record->user->first_name + ) ->searchable(query: function ($query, $search) { $query->whereHas('user', function ($query) use ($search) { $query->where('first_name', 'like', "%{$search}%") ->orWhere('last_name', 'like', "%{$search}%"); }); }) - ->sortable(), + ->sortable(['first_name', 'last_name']), + TextColumn::make('type') + ->formatStateUsing( + fn ($record) => $record->type == 'collection' ? __('Collection') : __('Survival') + ) + ->label(__('Type')), BooleanColumn::make('is_reservist') ->label(__('Reservist')), BadgeColumn::make('gender') @@ -124,9 +131,11 @@ function ($record) { ->whereMonth('end_date', $now->month); }); }) - ->with(['task' => function ($query) { - $query->withTrashed(); - }]) + ->with([ + 'task' => function ($query) { + $query->withTrashed(); + }, + ]) ->get() ->sum(fn (Shift $shift) => $shift->parallel_weight ?? $shift->task->parallel_weight); }) @@ -192,6 +201,13 @@ function ($record) { ->label(__('Is trainee')) ->query(fn (Builder $query): Builder => $query->where('is_trainee', true)) ->toggle(), + SelectFilter::make('type') + ->label(__('Type')) + ->options([ + 'survival' => __('Survival'), + 'collection' => __('Collection'), + ]) + ->default(null), Filter::make('enlist_date') ->form([ Fieldset::make('Enlist date') @@ -217,6 +233,7 @@ function ($record) { ), ], FiltersLayout::Modal) + ->defaultSort('user.displayName') ->filtersFormColumns(4) ->deferFilters() ->filtersTriggerAction( @@ -307,23 +324,6 @@ protected static function replicateSoldier(Soldier $replica, $record) redirect()->route('filament.app.resources.soldiers.edit', ['record' => $replica->id]); } - // public static function getEloquentQuery(): Builder - // { - // if (auth()->user()->hasRole('manager') || auth()->user()->hasRole('shifts-assignment')) { - // return parent::getEloquentQuery()->where('id', '!=', auth()->user()->userable_id); - // } - - // return parent::getEloquentQuery() - // ->whereIn('team_id', Department::whereHas('commander', function ($query) { - // $query->where('id', auth()->user()->userable_id); - // })->first()?->teams->pluck('id') ?? collect([])) - // ->orWhereIn('id', Department::whereHas('commander', function ($query) { - // $query->where('id', auth()->user()->userable_id); - // })->first()?->teams->pluck('commander_id') ?? collect([])) - // ->orWhere('team_id', Team::whereHas('commander', function ($query) { - // $query->where('id', auth()->user()->userable_id); - // })->value('id') ?? collect([])); - // } public static function getEloquentQuery(): Builder { if (auth()->user()->hasRole('manager') || auth()->user()->hasRole('shifts-assignment')) { @@ -381,6 +381,14 @@ public static function personalDetails(): Fieldset public static function soldierDetails(): array { return [ + Select::make('type') + ->label(__('Type')) + ->options([ + 'survival' => __('Survival'), + 'collection' => __('Collection'), + ]) + ->placeholder(__('Select soldier type')) + ->required(), ToggleButtons::make('gender') ->options([ 1 => __('Male'), diff --git a/app/Resources/SoldierResource/Pages/ListSoldiers.php b/app/Resources/SoldierResource/Pages/ListSoldiers.php index a6d8366..c7d1f9e 100644 --- a/app/Resources/SoldierResource/Pages/ListSoldiers.php +++ b/app/Resources/SoldierResource/Pages/ListSoldiers.php @@ -29,7 +29,14 @@ protected function getHeaderActions(): array ->label(__('Course')) ->options(Soldier::select('course')->distinct()->orderBy('course')->pluck('course', 'course')->all()) ->required(), - ]), + Select::make('type') + ->label(__('Type')) + ->options([ + 'survival' => __('Survival'), + 'collection' => __('Collection'), + ]) + ->required(), + ])->columns(2), Section::make([ TextInput::make('max_shifts') ->label(__('Max shifts')) @@ -81,7 +88,6 @@ protected function getHeaderActions(): array ]), ]) ->action(function (array $data) { - $selectedCourse = $data['course']; $updateData = []; $fields = ['max_shifts', 'max_nights', 'max_weekends', 'max_alerts', 'max_in_parallel', 'capacity', 'qualifications']; @@ -91,16 +97,11 @@ protected function getHeaderActions(): array } } if (! empty($updateData)) { - $soldiers = Soldier::where('course', $selectedCourse)->get(); - $soldiers->map(function (Soldier $soldier) use ($updateData) { + $soldiers = Soldier::where('course', $data['course']) + ->where('type', $data['type'])->get(); + $soldiers->map(function ($soldier) use ($updateData) { collect($updateData)->map(function ($value, $key) use ($soldier) { - if ($key == 'qualifications') { - $qualifications = collect($soldier->qualifications); - $qualifications->push(...$value); - $soldier->qualifications = $qualifications; - } else { - $soldier->{$key} = $value; - } + $soldier->{$key} = $value; }); $soldier->save(); }); diff --git a/app/Resources/TaskResource.php b/app/Resources/TaskResource.php index 792f186..ac54e48 100644 --- a/app/Resources/TaskResource.php +++ b/app/Resources/TaskResource.php @@ -334,7 +334,10 @@ public static function assignSoldier(): array ->afterStateUpdated(fn (callable $set) => $set('soldier_id', null)), Select::make('soldier_id') ->label(__('Assign soldier')) - ->options(fn (Get $get) => self::getSoldiers($get)) + ->options( + fn (Get $get) => self::getSoldiers($get) + + ) ->default(null) ->placeholder(fn (Get $get) => self::getSoldiers($get)->isEmpty() ? __('No suitable soldiers') : __('Select a soldier')) ->visible( diff --git a/app/Resources/TaskResource/Pages/CreateTask.php b/app/Resources/TaskResource/Pages/CreateTask.php index 4914de8..f767d93 100644 --- a/app/Resources/TaskResource/Pages/CreateTask.php +++ b/app/Resources/TaskResource/Pages/CreateTask.php @@ -76,6 +76,7 @@ public static function getSteps(): array ->visible( fn (Get $get) => $get('recurring.type') == 'One time' && $get('recurring.date') + ), ]; } diff --git a/app/Resources/TeamResource.php b/app/Resources/TeamResource.php index 9f3d100..2d70905 100644 --- a/app/Resources/TeamResource.php +++ b/app/Resources/TeamResource.php @@ -117,7 +117,9 @@ public static function table(Table $table): Table ->sortable(), TextColumn::make('commander.user') ->label(__('Commander')) - ->formatStateUsing(fn ($state) => $state->last_name.' '.$state->first_name) + ->formatStateUsing(function ($state) { + return $state->last_name.' '.$state->first_name; + }) ->label(__('Commander')) ->searchable( query: function ($query, $search) { diff --git a/app/Services/Algorithm.php b/app/Services/Algorithm.php index e8cdd9b..0a9da95 100644 --- a/app/Services/Algorithm.php +++ b/app/Services/Algorithm.php @@ -19,19 +19,19 @@ public function __construct($date = null) protected function getShiftWithTasks() { - // $startOfMonth = max($this->date->copy()->startOfMonth(), Carbon::tomorrow()); - $startOfMonth = $this->date->copy()->startOfMonth(); + $startOfMonth = max($this->date->copy()->startOfMonth(), Carbon::tomorrow()); $endOfMonth = $this->date->copy()->endOfMonth(); - return Shift::with('task') - ->whereNull('soldier_id') + return Shift::whereNull('soldier_id') ->whereHas('task', function ($query) { $query->withTrashed() ->where('kind', '!=', TaskKind::INPARALLEL->value); }) ->where(function ($query) use ($startOfMonth, $endOfMonth) { - $query->where('start_date', '<=', $endOfMonth) - ->where('start_date', '>=', $startOfMonth); + $query->where(function ($subQuery) use ($startOfMonth, $endOfMonth) { + $subQuery->where('start_date', '<', $endOfMonth) + ->where('end_date', '>', $startOfMonth); + }); }) ->get() ->map(fn (Shift $shift): ShiftService => Helpers::buildShift($shift)); @@ -41,9 +41,6 @@ protected function getSoldiersDetails() { return Soldier::with('constraints') ->where('is_reservist', false) - // ->whereJsonLength('qualifications', '>', 0) - // ->whereRaw('json_type(qualifications) = ?', ['array']) - // ->whereRaw('json_array_length(qualifications) > ?', [0]) ->get() ->map(function (Soldier $soldier) { $constraints = Helpers::buildConstraints($soldier->constraints, new Range($this->date->copy()->startOfMonth(), $this->date->copy()->endOfMonth())); @@ -56,8 +53,8 @@ protected function getSoldiersDetails() return Helpers::buildSoldier($soldier, $constraints, $shifts, $capacityHold); }) - ->filter(fn ($soldier) => $soldier->hasMaxes()) - ->shuffle(); + ->shuffle() + ->toArray(); } protected function getSoldiersShifts($soldierId, $inParallel) diff --git a/app/Services/ConcurrentTasks.php b/app/Services/ConcurrentTasks.php index 0268c86..610b95f 100644 --- a/app/Services/ConcurrentTasks.php +++ b/app/Services/ConcurrentTasks.php @@ -40,8 +40,7 @@ public function run() protected function getShiftsWithTasks() { - $startOfMonth = $this->date->copy()->startOfMonth(); - // $startOfMonth = max($this->date->copy()->startOfMonth(), Carbon::tomorrow()); + $startOfMonth = max($this->date->copy()->startOfMonth(), Carbon::tomorrow()); $endOfMonth = $this->date->copy()->endOfMonth(); return Shift::whereNull('soldier_id') @@ -50,8 +49,10 @@ protected function getShiftsWithTasks() ->where('kind', TaskKind::INPARALLEL->value); }) ->where(function ($query) use ($startOfMonth, $endOfMonth) { - $query->where('start_date', '<=', $endOfMonth) - ->where('start_date', '>=', $startOfMonth); + $query->where(function ($subQuery) use ($startOfMonth, $endOfMonth) { + $subQuery->where('start_date', '<', $endOfMonth) + ->where('end_date', '>', $startOfMonth); + }); }) ->get() ->map(fn (Shift $shift): ShiftService => Helpers::buildShift($shift)); @@ -82,7 +83,8 @@ protected function getSoldiersShifts($soldierId, $inParallel) protected function initShiftsData(): void { $groupedShifts = collect($this->shifts)->groupBy('taskType'); - $groupedShifts->each(fn ($shifts, $taskType) => $this->addShiftsDataByTask($taskType, collect($shifts))); + $groupedShifts->each(fn ($shifts, $taskType) => $this->addShiftsDataByTask($taskType, collect($shifts)) + ); } protected function addShiftsDataByTask(string $taskType, $shifts): void @@ -98,8 +100,8 @@ protected function addShiftData(ShiftService $shift, $soldiers) $potentialSoldiers = $this->getPotentialSoldiers($soldiers, $shift); $shiftData = new ShiftData( $shift, - 0, - $potentialSoldiers + $potentialSoldiers, + 0 ); $this->shiftsData->push($shiftData); } @@ -111,10 +113,17 @@ protected function getPotentialSoldiers($soldiers, ShiftService $shift) return $soldier->isAvailableByConstraints($shift->range) === Availability::YES && $soldier->isAvailableByConcurrentsShifts($shift) && $soldier->inParallelMaxData->remaining() > 0 - && $soldier->isAvailableByShifts($shift); + && $this->isAvailableByShiftsAndSpaces($soldier->shifts, $shift); }); - return collect($potentialSoldiers)->shuffle(); + return $potentialSoldiers; + } + + protected function isAvailableByShiftsAndSpaces($soldierShifts, ShiftService $shift): bool + { + return ! $soldierShifts->contains(function (ShiftService $soldierShift) use ($shift): bool { + return $soldierShift->range->isConflict($shift->range) && ! collect($shift->inParalelTasks)->contains($soldierShift->taskType); + }); } protected function assignShifts() @@ -135,10 +144,10 @@ protected function assignShift(ShiftData $shiftData) protected function tryAssignShift(SoldierService $soldier, ShiftService $shift) { - if ($soldier->isAvailableByConcurrentsShifts($shift) && $soldier->inParallelMaxData->remaining() > 0) { + if ($soldier->isAvailableByConcurrentsShifts($shift)) { $soldier->concurrentsShifts->push($shift); - $soldier->inParallelMaxData->used++; $this->assignments->push(new Assignment($shift->id, $soldier->id)); + $soldier->inParallelMaxData->used++; return true; } diff --git a/app/Services/Helpers.php b/app/Services/Helpers.php index 3e733a7..1a579b3 100644 --- a/app/Services/Helpers.php +++ b/app/Services/Helpers.php @@ -17,7 +17,6 @@ public static function buildShift(Shift $shift): ShiftService { return new ShiftService( $shift->id, - $shift->task_id, $shift->task()->withTrashed()->first()->type, $shift->start_date, $shift->end_date, @@ -43,7 +42,6 @@ public static function buildSoldier($soldier, $constraints, $shifts, array $capa { return new SoldierService( $soldier->id, - $soldier->course, new MaxData($soldier->capacity, $capacityHold['points'] ?? 0), new MaxData($soldier->max_shifts, $capacityHold['count'] ?? 0), new MaxData($soldier->max_nights, $capacityHold['sumNights'] ?? 0), @@ -69,7 +67,7 @@ public static function buildConstraints($constraints, $newRange) fn (Constraint $constraint): ConstraintService => new ConstraintService( $constraint->start_date, $constraint->end_date, - ConstraintType::getPriority()[$constraint->constraint_type->value] == 1 ? Priority::HIGH : Priority::LOW, + ConstraintType::getPriority()[$constraint->constraint_type->value] == 1 ? Priority::HIGH : Priority::LOW ) ); } @@ -112,25 +110,26 @@ public static function addShiftsSpaces($shifts) collect($shifts)->map(function (ShiftService $shift) use ($shifts, &$allSpaces) { $spaces = ($shift->kind === TaskKind::WEEKEND->value || $shift->kind === TaskKind::NIGHT->value) ? $shift->getShiftSpaces($shifts) : null; if (! empty($spaces)) { - collect($spaces)->map(fn (Range $space) => $allSpaces->push(new ShiftService(0, 0, '', $space->start, $space->end, 0, TaskKind::REGULAR->value, []))); + collect($spaces)->map(fn (Range $space) => $allSpaces->push(new ShiftService(0, '', $space->start, $space->end, 0, TaskKind::REGULAR->value, []))); } }); return $allSpaces; } - public static function getSoldiersShifts($soldierId, $range, $inParallel) + public static function getSoldiersShifts($soldierId, $newRange, $inParallel) { - return Shift::with('task') - ->where('soldier_id', $soldierId) + return Shift::where('soldier_id', $soldierId) ->whereHas('task', function ($query) use ($inParallel) { $query->withTrashed() ->when($inParallel, fn ($query) => $query->where('kind', TaskKind::INPARALLEL->value)) ->when(! $inParallel, fn ($query) => $query->where('kind', '!=', TaskKind::INPARALLEL->value)); }) - ->where(function ($query) use ($range) { - $query->where('start_date', '<=', $range->end) - ->where('start_date', '>=', $range->start); + ->where(function ($query) use ($newRange) { + $query->where(function ($subQuery) use ($newRange) { + $subQuery->where('start_date', '<', $newRange->end) + ->where('end_date', '>', $newRange->start); + }); }) ->get() ->map(fn (Shift $shift): ShiftService => self::buildShift($shift)); @@ -138,32 +137,14 @@ public static function getSoldiersShifts($soldierId, $range, $inParallel) public static function getConstraintBy(int $soldierId, $newRange) { - $constraints = Constraint::where('soldier_id', $soldierId) + $constraint = Constraint::where('soldier_id', $soldierId) ->get(); - return self::buildConstraints($constraints, $newRange); + return self::buildConstraints($constraint, $newRange); } public static function updateShiftTable($assignments) { - set_time_limit(0); - if (empty($assignments)) { - return; - } - - $chunks = array_chunk($assignments->toArray(), 80); - - foreach ($chunks as $chunk) { - $cases = []; - $ids = []; - - collect($chunk)->each(function ($assignment) use (&$ids, &$cases) { - $ids[] = $assignment->shiftId; - $cases[] = "WHEN id = {$assignment->shiftId} THEN {$assignment->soldierId}"; - }); - - Shift::whereIn('id', $ids) - ->update(['soldier_id' => \DB::raw('CASE '.implode(' ', $cases).' END')]); - } + collect($assignments)->map(fn (Assignment $assignment) => Shift::where('id', $assignment->shiftId)->update(['soldier_id' => $assignment->soldierId])); } } diff --git a/app/Services/ManualAssignment.php b/app/Services/ManualAssignment.php index 8b9b2bc..07e3327 100644 --- a/app/Services/ManualAssignment.php +++ b/app/Services/ManualAssignment.php @@ -2,12 +2,14 @@ namespace App\Services; +use App\Enums\Availability; use App\Models\Department; use App\Models\Shift; use App\Models\Soldier; use App\Models\Team; use App\Models\User; use App\Services\Soldier as SoldierService; +use Illuminate\Support\Facades\Cache; class ManualAssignment { @@ -33,6 +35,7 @@ public function getSoldiers($departmentName = null) protected function initSoldiersData($departmentName) { + $this->soldiers = Cache::remember('users', 30 * 60, fn () => User::all()); match ($this->soldierType) { 'reserves' => $this->filterReserves(), 'my_soldiers' => $this->filterMySoldiers(), @@ -44,69 +47,60 @@ protected function initSoldiersData($departmentName) protected function filterReserves() { - $this->soldiers = Soldier::whereJsonContains('qualifications', $this->shift->taskType) - ->where('is_reservist', true) - ->where('id', '!=', auth()->user()->userable_id) - ->get(); + $this->soldiers = $this->soldiers + ->filter(function ($user) { + $soldier = $this->getSoldierBy($user->userable_id); + + return $soldier->is_reservist && $soldier->id != auth()->user()->userable_id; + }); } protected function filterMySoldiers() { - $currentUserId = auth()->user()->userable_id; - $role = current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])); - $members = collect(); - - switch ($role) { - case 'department-commander': - $department = Department::whereHas('commander', function ($query) use ($currentUserId) { - $query->where('id', $currentUserId); - })->first(); - - $memberIds = $department?->teams->flatMap(fn (Team $team) => $team->members->pluck('id')) ?? collect(); - $commanderIds = $department?->teams->pluck('commander_id') ?? collect(); - - $members = $memberIds->merge($commanderIds)->unique(); - break; - case 'team-commander': - $members = Team::whereHas('commander', function ($query) use ($currentUserId) { - $query->where('id', $currentUserId); - })->first()?->members->pluck('id') ?? collect([]); - break; - } - - $this->soldiers = Soldier::whereJsonContains('qualifications', $this->shift->taskType) - ->where('is_reservist', false) - ->where('id', '!=', $currentUserId) - ->whereIn('id', $members) - ->get(); + $this->soldiers = $this->soldiers + ->filter(function ($user) { + $currentUserId = auth()->user()->userable_id; + $role = current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])); + $soldier = $this->getSoldierBy($user->userable_id); + + return match ($role) { + 'department-commander' => $soldier?->team?->department?->commander_id == $currentUserId + && $soldier?->id != $currentUserId, + 'team-commander' => $soldier?->team?->commander_id == $currentUserId + && $soldier?->id != $currentUserId + }; + }); } protected function filterDepartment($departmentName) { - $department = Department::where('name', $departmentName)->first(); - $this->soldiers = Soldier::whereJsonContains('qualifications', $this->shift->taskType) - ->where('is_reservist', false) - ->where('id', '!=', auth()->user()->userable_id) - ->where(function (Soldier $query) use ($department) { - $query->whereIn('id', $department?->teams->flatMap(fn (Team $team) => $team->members->pluck('id')) ?? collect()) - ->orWhereIn('id', $department?->teams->pluck('commander_id') ?? collect()) - ->orWhere('id', $department?->commander_id); - })->get(); + $this->soldiers = $this->soldiers + ->filter(function ($user) use ($departmentName) { + $soldier = Soldier::where('id', '=', $user->userable_id)->first(); + $department = Department::where('name', $departmentName)->first(); + + return $soldier?->team?->department?->name == $departmentName + || collect($department->teams)->filter(fn (Team $team): bool => $team->commander_id === $soldier->id)->isNotEmpty() + || $soldier->id == $department->commander_id; + }); } protected function filterMatching() { - $this->soldiers = Soldier::whereJsonContains('qualifications', $this->shift->taskType) - ->where('is_reservist', false) - ->where('id', '!=', auth()->user()->userable_id) - ->get(); + $this->soldiers = $this->soldiers + ->filter(function ($user) { + $soldier = $this->getSoldierBy($user->userable_id); + + return ! $soldier->is_reservist && $soldier->id != auth()->user()->userable_id; + }); } protected function getSoldiersDetails() { $this->soldiers = $this->soldiers ->map( - function (Soldier $soldier) { + function (User $user) { + $soldier = $this->getSoldierBy($user->userable_id); $constraints = $this->getConstraints($soldier); $soldiersShifts = $this->getSoldiersShifts($soldier->id, false); @@ -121,6 +115,11 @@ function (Soldier $soldier) { ); } + protected function getSoldierBy($userable_id) + { + return Soldier::where('id', $userable_id)->first(); + } + public function amIAvailable(): bool { $me = Soldier::find(auth()->user()->userable_id); @@ -131,12 +130,13 @@ public function amIAvailable(): bool $capacityHold = Helpers::capacityHold($myShifts); - $concurrentsShifts = $this->getSoldiersShifts($me->id, true); + $soldier = Helpers::buildSoldier($me, $constraints, $myShifts, $capacityHold); - $soldier = Helpers::buildSoldier($me, $constraints, $myShifts, $capacityHold, $concurrentsShifts); - - return $soldier->isAbleTake($this->shift, true) - && $soldier->isAvailableByConcurrentsShifts($this->shift); + return $soldier->isQualified($this->shift->taskType) + && $soldier->isAvailableByMaxes($this->shift) + && $soldier->isAvailableByConstraints($this->shift->range) != Availability::NO + && $soldier->isAvailableByShifts($this->shift) + && $soldier->isAvailableBySpaces($this->shift->getShiftSpaces($soldier->shifts)); } protected function getConstraints(Soldier $soldier) @@ -151,7 +151,13 @@ protected function getSoldiersShifts($soldierId, $inParallel) protected function getAvailableSoldiers() { - $availableSoldiers = $this->soldiers->filter(fn (SoldierService $soldier) => $soldier->isAbleTake($this->shift, true)); + $availableSoldiers = $this->soldiers->filter( + fn (SoldierService $soldier) => $soldier->isQualified($this->shift->taskType) + && $soldier->isAvailableByMaxes($this->shift) + && $soldier->isAvailableByConstraints($this->shift->range) != Availability::NO + && $soldier->isAvailableByShifts($this->shift) + && $soldier->isAvailableBySpaces($this->shift->getShiftSpaces($soldier->shifts)) + ); $soldiersWithConcurrentsShifts = collect([]); $availableSoldiers->map(function (SoldierService $soldier) use ($soldiersWithConcurrentsShifts) { diff --git a/app/Services/MaxData.php b/app/Services/MaxData.php index 8f7be43..f3adfee 100644 --- a/app/Services/MaxData.php +++ b/app/Services/MaxData.php @@ -18,4 +18,30 @@ public function remaining(): float { return $this->max - $this->used; } + + protected function relativeLoad(): float + { + if ($this->max == 0) { + return 0; + } + + return $this->used / $this->max; + } + + protected function singleValue(): float + { + if ($this->max == 0) { + return 0; + } + + return 1 / $this->max; + } + + public function calculatedRelativeLoad(): float + { + $relativeLoad = $this->relativeLoad(); + $pointValue = $this->singleValue(); + + return ($relativeLoad * 4 + $pointValue) / 5; + } } diff --git a/app/Services/PotentialSoldierData.php b/app/Services/PotentialSoldierData.php new file mode 100644 index 0000000..9565dbb --- /dev/null +++ b/app/Services/PotentialSoldierData.php @@ -0,0 +1,16 @@ +soldierId = $soldierId; + $this->isLowConstraint = $isLowConstraint; + } +} diff --git a/app/Services/Range.php b/app/Services/Range.php index 18ffcce..c6ff40b 100644 --- a/app/Services/Range.php +++ b/app/Services/Range.php @@ -42,7 +42,7 @@ public function isRangeInclude(DaysInWeek $dayInWeek): bool $endDayIndex = $this->end->dayOfWeek; $checkDayIndex = date('N', strtotime($dayInWeek->value)); if ($startDayIndex <= $endDayIndex) { - return $this->start->copy()->diffInDays($this->end->copy()) > 5 || ($checkDayIndex >= $startDayIndex && $checkDayIndex <= $endDayIndex); + return $this->start->diffInDays($this->end) > 5 || ($checkDayIndex >= $startDayIndex && $checkDayIndex <= $endDayIndex); } return $checkDayIndex >= $startDayIndex || $checkDayIndex <= $endDayIndex; @@ -50,36 +50,23 @@ public function isRangeInclude(DaysInWeek $dayInWeek): bool public function getDayAfterWeekend(): Range { - $nextDayAfterWeekend = $this->end->englishDayOfWeek == DaysInWeek::SUNDAY->value ? $this->end->copy() : $this->end->copy()->next(DaysInWeek::SUNDAY->value)->setTime(8, 0); + $nextDayAfterWeekend = $this->end->next(DaysInWeek::SUNDAY->value)->setTime(8, 0); return new Range($nextDayAfterWeekend, $nextDayAfterWeekend->copy()->addDay()); } public function getNightSpaces() { - $startHour = $this->start->hour; - $endTomorrow = $this->end->copy()->addDay(); - if ($startHour >= '20' && $startHour <= '23') { - return [ - new Range(Carbon::create($this->start->year, $this->start->month, $this->start->day, 00, 00), $this->start), - new Range($this->end, Carbon::create($endTomorrow->year, $endTomorrow->month, $endTomorrow->day, 7, 59)), - ]; - } - if ($startHour >= '0' && $startHour <= '1') { - $startYesterday = $this->start->copy()->subDay(); + return [$this->getDayBeforeNight(), $this->getDayAfterNight()]; + } - return [ - new Range(Carbon::create($startYesterday->year, $startYesterday->month, $startYesterday->day, 00, 00), $this->start), - new Range($this->end, Carbon::create($endTomorrow->year, $endTomorrow->month, $endTomorrow->day, 7, 59)), - ]; - } + public function getDayBeforeNight(): Range + { + return new Range($this->start->copy()->subHours(12), $this->start); } - public function getNightInWeekendSpaces() + public function getDayAfterNight(): Range { - return [ - new Range($this->start->copy()->setHour(8)->setMinutes(30), $this->start->copy()), - new Range($this->end->copy(), $this->end->copy()->setHour(19)->setMinutes(59)), - ]; + return new Range($this->end, $this->end->copy()->addHours(12)); } } diff --git a/app/Services/RecurringEvents.php b/app/Services/RecurringEvents.php index 2e7e374..0e275fb 100644 --- a/app/Services/RecurringEvents.php +++ b/app/Services/RecurringEvents.php @@ -114,10 +114,8 @@ protected function convertNumbersToDatesInMonth($dayNumbers) protected function createPeriod() { return $this->task->recurring['type'] == 'Daily range' ? - // CarbonPeriod::between(max($this->task['recurring']['start_date'], Carbon::tomorrow()), $this->task['recurring']['end_date']) : - // CarbonPeriod::between(max($this->month->copy()->startOfMonth(), Carbon::tomorrow()), $this->month->copy()->endOfMonth()); - CarbonPeriod::between($this->task['recurring']['start_date'], $this->task['recurring']['end_date']) : - CarbonPeriod::between($this->month->copy()->startOfMonth(), $this->month->copy()->endOfMonth()); + CarbonPeriod::between(max($this->task['recurring']['start_date'], Carbon::tomorrow()), $this->task['recurring']['end_date']) : + CarbonPeriod::between(max($this->month->copy()->startOfMonth(), Carbon::tomorrow()), $this->month->copy()->endOfMonth()); } protected function createShifts(array $dates) diff --git a/app/Services/Schedule.php b/app/Services/Schedule.php index 0e7e33a..b1aa5bb 100644 --- a/app/Services/Schedule.php +++ b/app/Services/Schedule.php @@ -2,6 +2,7 @@ namespace App\Services; +use App\Enums\Availability; use App\Enums\TaskKind; class Schedule @@ -10,49 +11,262 @@ class Schedule public $soldiers; + public $shiftsData; + + public $soldiersDict; + public $assignments; + public $SHIFT_DUMBBELLS; + + public $SOLDIER_DUMBBELLS; + public function __construct($shifts, $soldiers) { - $this->soldiers = collect($soldiers); $this->shifts = collect($shifts); + $this->soldiers = collect($soldiers); + $this->shiftsData = collect([]); + $this->soldiersDict = collect([]); $this->assignments = collect([]); + $this->SHIFT_DUMBBELLS = collect([ + 'POINTS_RATIO' => 0.29, + 'SHIFTS_RATIO' => 0.39, + 'WEEKENDS_RATIO' => 0.04, + 'NIGHTS_RATIO' => 0.04, + 'SHIFT_AVAILABILITY' => 0.23, + 'BLOCK_POINTS' => 0.05, + ]); + $this->SOLDIER_DUMBBELLS = collect([ + 'LOW_CONSTRAINT' => 0.45, + 'POINTS_RELATIVE_LOAD' => 0.4, + 'SHIFTS_RELATIVE_LOAD' => 0.08, + 'NIGHT_RELATIVE_LOAD' => 0.01, + 'WEEKEND_RELATIVE_LOAD' => 0.01, + 'MULTITASKING_VALUE' => 0.05, + ]); + } + + public function schedule(): void + { + $this->initShiftsData(); + $this->initSoldiersData(); + $this->assignShifts(); + Helpers::updateShiftTable($this->assignments); } - public function schedule() + protected function initShiftsData(): void { - $this->assignPointedShifts(); - $this->assignNotPointedShifts(); - $this->saveAssignments(); + $groupedShifts = collect($this->shifts)->groupBy('taskType'); + $groupedShifts->each(function ($shifts, $taskType) { + $this->addShiftsDataByTask($taskType, collect($shifts)); + }); } - protected function assignPointedShifts() + protected function addShiftsDataByTask(string $taskType, $shifts): void { - $pointedShifts = $this->shifts->filter(fn (Shift $shift): bool => $shift->points > 0); - $soldiers = $this->soldiers->filter(fn (Soldier $soldier) => $soldier->pointsMaxData->remaining() > 0); - $pointedSchedule = new PointedSchedule($soldiers, $pointedShifts); - $assignments = $pointedSchedule->schedule(); - $this->assignments->push(...$assignments); + $soldiers = $this->soldiers->filter(function (Soldier $soldier) use ($taskType): bool { + return $soldier->isQualified($taskType); + }); + $taskWeight = $this->getTaskWeight($shifts, $soldiers); + $shifts->map(fn ($shift) => $this->addShiftData($shift, $soldiers, $taskWeight)); } - protected function assignNotPointedShifts() + protected function getTaskWeight($shifts, $soldiers): array { - $taskKinds = collect([ - TaskKind::NIGHT->value => 1, - TaskKind::REGULAR->value => 3, - TaskKind::ALERT->value => 1, + $requiredPoints = collect($shifts)->sum('points'); + $requiredNights = collect($shifts)->filter(fn (Shift $shift) => ($shift->kind === TaskKind::NIGHT->value))->count(); + $requiredWeekends = collect($shifts) + ->filter(fn (Shift $shift) => ($shift->kind === TaskKind::WEEKEND->value)) + ->sum(fn (Shift $shift) => $shift->points); + $requiredShifts = count($shifts); + + $availablePoints = collect($soldiers)->sum(fn (Soldier $soldier) => $soldier->pointsMaxData->remaining()); + + $availableNights = collect($soldiers)->sum(fn (Soldier $soldier) => $soldier->nightsMaxData->remaining()); + + $availableWeekends = collect($soldiers)->sum(fn (Soldier $soldier) => $soldier->weekendsMaxData->remaining()); + + $availableShifts = collect($soldiers)->sum(fn (Soldier $soldier) => $soldier->shiftsMaxData->remaining()); + + $weight = collect([ + 'POINTS_RATIO' => $this->getRatio($requiredPoints, $availablePoints), + 'NIGHTS_RATIO' => $this->getRatio($requiredNights, $availableNights), + 'WEEKENDS_RATIO' => $this->getRatio($requiredWeekends, $availableWeekends), + 'SHIFTS_RATIO' => $this->getRatio($requiredShifts, $availableShifts), ]); - $taskKinds->each(function ($gap, $taskKind) { - $shifts = $this->shifts->filter(fn (Shift $shift): bool => $shift->kind == $taskKind && - $shift->points == 0); - $notPointedSchedule = new NotPointedSchedule($taskKind, $this->soldiers, $shifts, $gap); - $assignments = $notPointedSchedule->schedule(); - $this->assignments->push(...$assignments); + + $weight->each(function ($value, $key) use (&$weight) { + $weight[$key] = $value * $this->SHIFT_DUMBBELLS[$key]; }); + + return $weight->all(); } - protected function saveAssignments() + protected function addShiftData(Shift $shift, $soldiers, $taskWeight) { - Helpers::updateShiftTable($this->assignments); + $potentialSoldiers = $this->getPotentialSoldiers($soldiers, $shift->range); + $shiftData = new ShiftData( + $shift, + $potentialSoldiers, + $this->getShiftWeight( + $taskWeight, + $shift, + $soldiers->count(), + $potentialSoldiers->count() + ) + ); + $this->shiftsData->push($shiftData); + } + + protected function getRatio(float $required, float $available): float + { + return $available == 0 ? 0 : (float) $this->maximumOne((float) $required / $available); + } + + protected function maximumOne(float $number): float + { + return $number > 1 ? 1 : $number; + } + + protected function getPotentialSoldiers($soldiers, Range $range) + { + $potentialSoldiers = $soldiers->filter(function (Soldier $soldier) use ($range) { + return $soldier->isAvailableByConstraints($range) != Availability::NO; + })->map(function (Soldier $soldier) use ($range): PotentialSoldierData { + $availability = $soldier->isAvailableByConstraints($range); + + return new PotentialSoldierData( + $soldier->id, + $availability == Availability::BETTER_NOT + ); + }); + + return $potentialSoldiers; + } + + protected function getShiftWeight($taskWeight, Shift $shift, int $soldiersCount, int $availableSoldiersCount): float + { + $weight = $taskWeight['SHIFTS_RATIO'] + $shift->points > 0 ? $taskWeight['POINTS_RATIO'] : 0; + + match ($shift->kind) { + TaskKind::WEEKEND->value => $weight += $taskWeight['WEEKENDS_RATIO'], + TaskKind::NIGHT->value => $weight += $taskWeight['NIGHTS_RATIO'], + default => null + }; + + $weight += $this->getShiftAvailabilityRatio($soldiersCount, $availableSoldiersCount) + * $this->SHIFT_DUMBBELLS['SHIFT_AVAILABILITY']; + + $weight += $this->getShiftBlockPoints($shift->points) * $this->SHIFT_DUMBBELLS['BLOCK_POINTS']; + + return $weight; + } + + protected function getShiftAvailabilityRatio(int $soldiersCount, int $availableSoldiers): float + { + if ($availableSoldiers == 0) { + return 0; + } + + return (float) ($soldiersCount - $availableSoldiers) / $soldiersCount; + } + + protected function getShiftBlockPoints(float $points): float + { + if ($points == 0) { + return 0; + } + + return (float) $points / 3; + } + + protected function initSoldiersData(): void + { + $this->soldiers->map(fn (Soldier $soldier) => $this->soldiersDict->put($soldier->id, $soldier)); + } + + protected function assignShifts() + { + $sortedShifts = $this->getSortedShiftsList(); + collect($sortedShifts)->map(fn (ShiftData $shift) => $this->assignShift($shift)); + } + + protected function getSortedShiftsList() + { + return $this->shiftsData->sortByDesc('weight'); + } + + protected function assignShift(ShiftData $shiftData) + { + $soldiers = $this->getPotentialSoldiersData($shiftData); + foreach ($soldiers as $soldier) { + $success = $this->tryAssign($soldier, $shiftData->shift); + if ($success) { + return; + } + } + } + + protected function getPotentialSoldiersData(ShiftData $shiftData) + { + $soldiers = collect([]); + collect($shiftData->potentialSoldiers)->map(function (PotentialSoldierData $potentialSoldierData) use (&$soldiers, $shiftData) { + $soldiers->push($this->getSoldierAndWeight($potentialSoldierData, $shiftData->shift)); + }); + + return $this->getSortedPotentialSoldiers($soldiers); + } + + protected function getSoldierAndWeight(PotentialSoldierData $potentialSoldierData, Shift $shift) + { + $soldier = $this->soldiersDict[$potentialSoldierData->soldierId]; + $weightDict = [ + 'LOW_CONSTRAINT' => $potentialSoldierData->isLowConstraint ? 1 : 0, + 'POINTS_RELATIVE_LOAD' => $shift->points > 0 ? $soldier->pointsMaxData->calculatedRelativeLoad() : 0, + 'SHIFTS_RELATIVE_LOAD' => $soldier->shiftsMaxData->calculatedRelativeLoad(), + 'NIGHT_RELATIVE_LOAD' => $shift->kind !== TaskKind::NIGHT->value ? 0 : $soldier->nightsMaxData->calculatedRelativeLoad(), + 'WEEKEND_RELATIVE_LOAD' => $shift->kind !== TaskKind::WEEKEND->value ? 0 : $soldier->weekendsMaxData->calculatedRelativeLoad(), + 'MULTITASKING_VALUE' => $this->getMultitaskingValue( + $soldier->qualifications->count() + ), + ]; + $weight = $this->getTotalWeight($weightDict); + + return [$soldier, $weight]; + } + + protected function getMultitaskingValue(int $qualificationsNumber): float + { + return (float) (1 - ((float) (1 / $qualificationsNumber))); + } + + protected function getTotalWeight($weightData): float + { + $weight = 0; + collect($weightData)->map(function ($value, $key) use (&$weight) { + $weight += (float) ($value * $this->SOLDIER_DUMBBELLS[$key]); + }); + + return $weight; + } + + protected function getSortedPotentialSoldiers($soldiers) + { + $sortedSoldiers = $soldiers->sortBy(fn ($item) => $item[1]); + + return $sortedSoldiers->map(fn ($soldier) => $soldier[0]); + } + + protected function tryAssign(Soldier $soldier, Shift $shift): bool + { + $spaces = $shift->getShiftSpaces($soldier->shifts); + if ($soldier->isAbleTake($shift, $spaces)) { + $soldier->assign($shift, $spaces); + $this->assignments->push(new Assignment($shift->id, $soldier->id)); + + return true; + } + + return false; } } diff --git a/app/Services/Shift.php b/app/Services/Shift.php index 17f0c69..1e41652 100644 --- a/app/Services/Shift.php +++ b/app/Services/Shift.php @@ -9,8 +9,6 @@ class Shift { public $id; - public $taskId; - public $taskType; public $range; @@ -19,28 +17,16 @@ class Shift public $kind; - public $isAssigned; - public $inParalelTasks; - public $isAttached; - - public function __construct($id, int $taskId, string $taskType, $start, $end, float $points, $kind, $inParalelTasks = []) + public function __construct($id, string $taskType, $start, $end, float $points, $kind, $inParalelTasks = []) { $this->id = $id; - $this->taskId = $taskId; $this->taskType = $taskType; $this->range = new Range($start, $end); $this->points = $points; $this->kind = $kind; - $this->isAssigned = false; $this->inParalelTasks = $inParalelTasks; - $this->isAttached = false; - } - - public function isAssigned(): bool - { - return $this->isAssigned; } public function getShiftSpaces($shifts) @@ -54,23 +40,7 @@ public function getShiftSpaces($shifts) protected function getWeekendSpaces($shifts) { - $spaces = collect([]); - if ($this->isNight()) { - $spaces->push(...$this->range->getNightInWeekendSpaces()); - } - if ($this->isFullWeekend($shifts)) { - $spaces->push($this->range->getDayAfterWeekend()); - } - - return $spaces?->toArray(); - } - - protected function isNight() - { - return ($this->range->start->hour >= 19 - && $this->range->start->hour < 23) && - ($this->range->end->hour > 6 - && $this->range->end->hour < 9); + return $this->isFullWeekend($shifts) ? [$this->range->getDayAfterWeekend()] : null; } protected function isFullWeekend($shifts) @@ -97,7 +67,7 @@ protected function isShiftInclude(Range $range, DaysInWeek $dayInWeek): bool protected function isAttached($shifts, $range, DaysInWeek $dayInWeek): bool { - $expectedDate = $dayInWeek == DaysInWeek::FRIDAY ? $range->start->copy()->subDay()->startOfDay() : $range->end->copy()->addDay()->startOfDay(); + $expectedDate = $dayInWeek == DaysInWeek::FRIDAY ? $range->start->subDay()->startOfDay() : $range->end->addDay()->startOfDay(); return $shifts ? collect($shifts)->contains( function ($shift) use ($expectedDate): bool { diff --git a/app/Services/ShiftData.php b/app/Services/ShiftData.php index 82afd0a..74606ea 100644 --- a/app/Services/ShiftData.php +++ b/app/Services/ShiftData.php @@ -6,14 +6,14 @@ class ShiftData { public $shift; - public $weight; - public $potentialSoldiers; - public function __construct(Shift $shift, float $weight, $potentialSoldiers = []) + public $weight; + + public function __construct(Shift $shift, $potentialSoldiers, float $weight) { $this->shift = $shift; - $this->weight = $weight; $this->potentialSoldiers = collect($potentialSoldiers); + $this->weight = $weight; } } diff --git a/app/Services/Soldier.php b/app/Services/Soldier.php index f9c68df..cb3ee02 100644 --- a/app/Services/Soldier.php +++ b/app/Services/Soldier.php @@ -10,8 +10,6 @@ class Soldier { public $id; - public $course; - public $pointsMaxData; public $shiftsMaxData; @@ -32,10 +30,9 @@ class Soldier public $concurrentsShifts; - public function __construct($id, $course, MaxData $maxPoints, MaxData $maxShifts, MaxData $maxNights, MaxData $maxWeekends, MaxData $alertsMaxData, MaxData $inParallelMaxData, $qualifications, $constraints, $shifts = [], $concurrentsShifts = []) + public function __construct($id, MaxData $maxPoints, MaxData $maxShifts, MaxData $maxNights, MaxData $maxWeekends, MaxData $alertsMaxData, MaxData $inParallelMaxData, $qualifications, $constraints, $shifts = [], $concurrentsShifts = []) { $this->id = $id; - $this->course = $course; $this->pointsMaxData = $maxPoints; $this->shiftsMaxData = $maxShifts; $this->nightsMaxData = $maxNights; @@ -48,64 +45,48 @@ public function __construct($id, $course, MaxData $maxPoints, MaxData $maxShifts $this->concurrentsShifts = collect($concurrentsShifts); } - public function hasMaxes(): bool - { - return ! ( - $this->shiftsMaxData->max === 0 && - $this->nightsMaxData->max === 0 && - $this->weekendsMaxData->max === 0 && - $this->alertsMaxData->max === 0 - ); - } - public function isQualified(string $taskType): bool { return $this->qualifications->contains($taskType); } - public function isAbleTake(Shift $shift, $ignoreLowConstraint): bool + public function isAbleTake(Shift $shift, $spaces): bool { - $spaces = $shift->getShiftSpaces($this->shifts); - $availability = $this->isAvailableByConstraints($shift->range); - $isAvailableByConstraint = $ignoreLowConstraint ? $availability != Availability::NO : $availability == Availability::YES; - - return $this->isQualified($shift->taskType) - && $this->isAvailableByMaxes($shift) + return $this->isAvailableByMaxes($shift) && $this->isAvailableByShifts($shift) - && $this->isAvailableBySpaces($spaces) - && $isAvailableByConstraint; + && $this->isAvailableBySpaces($spaces); } public function isAvailableByMaxes(Shift $shift): bool { - if ($this->pointsMaxData->remaining() < $shift->points) { + if ( + ($shift->kind === TaskKind::WEEKEND->value && $this->weekendsMaxData->remaining() < $shift->points) + || ($shift->kind === TaskKind::NIGHT->value && $this->nightsMaxData->remaining() < 1) + || ($shift->kind === TaskKind::ALERT->value && $this->alertsMaxData->remaining() < 1) + || ($shift->kind === TaskKind::INPARALLEL->value && $this->inParallelMaxData->remaining() < 1) + || $this->pointsMaxData->remaining() < $shift->points + || $this->shiftsMaxData->remaining() < 1 + ) { return false; } - return match ($shift->kind) { - TaskKind::WEEKEND->value => $this->weekendsMaxData->remaining() >= $shift->points, - TaskKind::NIGHT->value => $this->nightsMaxData->remaining() > 0 && $this->shiftsMaxData->remaining() > 0, - TaskKind::INPARALLEL->value => $this->inParallelMaxData->remaining() > 0, - TaskKind::ALERT->value => $this->alertsMaxData->remaining() > 0, - TaskKind::REGULAR->value => $this->shiftsMaxData->remaining() > 0, - }; + return true; } public function isAvailableByShifts(Shift $shift): bool { - return ! $this->shifts->contains(fn (Shift $soldierShift) => $soldierShift->range->isConflict($shift->range) - && (! collect($shift->inParalelTasks)->contains($soldierShift->taskType)) - ); + return ! $this->shifts->contains(function (Shift $soldierShift) use ($shift): bool { + return $soldierShift->range->isConflict($shift->range) && ! collect($shift->inParalelTasks)->contains($shift->taskType); + }); } public function isAvailableBySpaces($spaces): bool { if ($spaces) { foreach ($spaces as $space) { - return ! $this->shifts->contains(fn (Shift $shift) => $shift->id != 0 && - $shift->range->isConflict($space) - ) - && ! $this->concurrentsShifts->contains(fn (Shift $concurrentsShift) => $concurrentsShift->range->isConflict($space)); + return ! $this->shifts->contains(function ($shift) use ($space) { + return $shift->range->isConflict($space); + }); } } @@ -114,9 +95,9 @@ public function isAvailableBySpaces($spaces): bool public function isAvailableByConcurrentsShifts(Shift $shift) { - return ! $this->concurrentsShifts->contains(fn (Shift $concurrentsShift) => $concurrentsShift->range->isConflict($shift->range) && - ! (collect($concurrentsShift->inParalelTasks)->contains($shift->taskType) - || collect($shift->inParalelTasks)->contains($concurrentsShift->taskType))); + return ! $this->concurrentsShifts->contains(function (Shift $concurrentsShift) use ($shift): bool { + return $concurrentsShift->range->isConflict($shift->range) && ! collect($concurrentsShift->inParalelTasks)->contains($shift->taskType); + }); } public function isAvailableByConstraints(Range $range): Availability @@ -145,10 +126,7 @@ public function assign(Shift $shift, $spaces): void $this->pointsMaxData->used += $shift->points; match ($shift->kind) { TaskKind::WEEKEND->value => $this->weekendsMaxData->used += $shift->points, - TaskKind::NIGHT->value => [ - $this->nightsMaxData->used += 1, - $this->shiftsMaxData->used += 1, - ], + TaskKind::NIGHT->value => $this->updateNightAndShifts(), TaskKind::ALERT->value => $this->alertsMaxData->used += 1, TaskKind::INPARALLEL->value => $this->inParallelMaxData->used += 1, TaskKind::REGULAR->value => $this->shiftsMaxData->used += 1, @@ -157,30 +135,12 @@ public function assign(Shift $shift, $spaces): void protected function addSpaces($spaces) { - collect($spaces)->map(fn ($space) => $this->shifts->push(new Shift(0, 0, '', $space->start, $space->end, 0, TaskKind::REGULAR->value, []))); - } - - public function unassign(Shift $shift, $spaces) - { - $this->shifts = $this->shifts->filter(fn (Shift $existShift) => $shift->id !== $existShift->id); - $this->removeSpaces($spaces); - $this->pointsMaxData->used -= $shift->points; - match ($shift->kind) { - TaskKind::WEEKEND->value => $this->weekendsMaxData->used -= $shift->points, - TaskKind::NIGHT->value => [ - $this->nightsMaxData->used -= 1, - $this->shiftsMaxData->used -= 1, - ], - TaskKind::ALERT->value => $this->alertsMaxData->used -= 1, - TaskKind::INPARALLEL->value => $this->inParallelMaxData->used -= 1, - TaskKind::REGULAR->value => $this->shiftsMaxData->used -= 1, - }; + collect($spaces)->map(fn ($space) => $this->shifts->push(new Shift(0, '', $space->start, $space->end, 0, TaskKind::REGULAR->value, []))); } - protected function removeSpaces($spaces) + protected function updateNightAndShifts() { - collect($spaces)->map(function ($space) { - $this->shifts = $this->shifts->filter(fn (Shift $existSpace) => $space->start !== $existSpace->range->start && $space->end !== $existSpace->range->end); - }); + $this->nightsMaxData->used += 1; + $this->shiftsMaxData->used += 1; } } diff --git a/app/Traits/EventsByRole.php b/app/Traits/EventsByRole.php new file mode 100644 index 0000000..429b71b --- /dev/null +++ b/app/Traits/EventsByRole.php @@ -0,0 +1,45 @@ +user()->userable_id; + $role = current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])); + $query = match ($role) { + 'manager', 'shifts-assignment' => $query->where(function ($query) use ($currentUserId) { + $query->where('soldier_id', '!=', $currentUserId) + ->orWhereNull('soldier_id'); + }), + 'department-commander' => $query->where(function ($query) use ($currentUserId) { + $query->where('soldier_id', '!=', $currentUserId) + ->where(function ($query) use ($currentUserId) { + $query->whereNull('soldier_id') + ->orWhereIn('soldier_id', Department::whereHas('commander', function ($query) use ($currentUserId) { + $query->where('id', $currentUserId); + })->first()?->teams->flatMap(fn (Team $team) => $team->members->pluck('id'))->toArray() ?? collect([])) + ->orWhereIn('soldier_id', Department::whereHas('commander', function ($query) use ($currentUserId) { + $query->where('id', $currentUserId); + })->first()?->teams->pluck('commander_id') ?? collect([])); + })->orWhereNull('soldier_id'); + }), + 'team-commander' => $query->where(function ($query) use ($currentUserId) { + $query->where('soldier_id', '!=', $currentUserId) + ->where(function ($query) use ($currentUserId) { + $query->whereNull('soldier_id') + ->orWhereIn('soldier_id', Team::whereHas('commander', function ($query) use ($currentUserId) { + $query->where('id', $currentUserId); + })->first()?->members->pluck('id') ?? collect([])); + }) + ->orWhereNull('soldier_id'); + }), + }; + + return $query; + } +} diff --git a/database/factories/SoldierFactory.php b/database/factories/SoldierFactory.php index 2755e38..fe2f7ee 100644 --- a/database/factories/SoldierFactory.php +++ b/database/factories/SoldierFactory.php @@ -10,6 +10,7 @@ public function definition(): array { return [ 'team_id' => null, + 'type' => array_rand(['survival', 'collection']), 'gender' => fake()->boolean(), 'is_permanent' => fake()->boolean(), 'enlist_date' => fake()->dateTime(), diff --git a/database/migrations/2024_05_30_094012_create_soldier_table.php b/database/migrations/2024_05_30_094012_create_soldier_table.php index 54ec27a..6981ae2 100644 --- a/database/migrations/2024_05_30_094012_create_soldier_table.php +++ b/database/migrations/2024_05_30_094012_create_soldier_table.php @@ -11,6 +11,7 @@ public function up(): void Schema::create('soldiers', function (Blueprint $table) { $table->id(); $table->foreignId('team_id')->nullable(); + $table->string('type')->nullable(); $table->boolean('gender'); $table->boolean('is_permanent')->default(false); $table->dateTime('enlist_date')->nullable(); diff --git a/lang/he.json b/lang/he.json index 70f7833..25f8cf4 100644 --- a/lang/he.json +++ b/lang/he.json @@ -70,6 +70,9 @@ "Constraints limit": "הגבלת אילוצים", "Edit course": "ערוך קורס", "Course": "קורס", + "Collection": "איסוף", + "Survival":"שרידות", + "Select soldier type":"בחר סוג חייל", "Create":"צור", "Create shifts":"צור משמרות ותורנויות", "Create soldier":"צור חייל", @@ -264,7 +267,6 @@ "Update parallel weight of holiday shift":"עדכון משקל של משמרת חג", "Update dragged shift details!": "עדכון פרטי משמרת שנגררה", "Update reserve days": "ימי מילואים", - "Unknown soldier":"חייל לא קיים", "Vacation":"חופשה", "View ":"צפה ב", "View members": "צפה בחברים", @@ -292,6 +294,9 @@ "Done":"בוצע", "Regular":"רגילה", "Regulars":"רגילות", + "Delete shifts":"מחק משמרות", + "Are you sure? This cannot be undone!":"האם אתה בטוח שאתה רוצה לאפס את השיבוץ? הפעולה בלתי הפיכה!", + "Yes, reset it":"כן, אפס שיבוץ", "You did not choose a commander. With your approval, you leave the team without a commander. Are you sure?":"לא בחרת מפקד. באישורך אתה משאיר את הצוות ללא מפקד. האם אתה בטוח?", "Your shifts for today":"המשמרות שלך להיום", "Range between":":label בין :fromValue ו :toValue", diff --git a/tests/Feature/CalendarWidgetTest.php b/tests/Feature/CalendarWidgetTest.php index e982f6d..4001105 100644 --- a/tests/Feature/CalendarWidgetTest.php +++ b/tests/Feature/CalendarWidgetTest.php @@ -1,6 +1,7 @@ create(['userable_id' => Soldier::factory()->create(['team_id' => $team->id])->id]); $user2 = User::factory()->create(['userable_id' => Soldier::factory()->create(['team_id' => $team->id])->id]); + $user3 = User::factory()->create(['userable_id' => Soldier::factory()->create(['team_id' => $team->id])->id]); - Shift::factory()->create(['soldier_id' => $user1->userable_id, 'task_id' => Task::factory()->create()->id]); - Shift::factory()->create(['soldier_id' => $user2->userable_id, 'task_id' => Task::factory()->create()->id]); + Shift::factory()->count(4)->create(['soldier_id' => $user1->userable_id, 'task_id' => Task::factory()->create(['kind' => TaskKind::REGULAR->value])->id]); + Shift::factory()->count(6)->create(['soldier_id' => $user2->userable_id, 'task_id' => Task::factory()->create(['kind' => TaskKind::REGULAR->value])->id]); + Shift::factory()->count(7)->create(['soldier_id' => $user3->userable_id, 'task_id' => Task::factory()->create(['kind' => TaskKind::ALERT->value])->id]); Shift::factory()->create(['soldier_id' => User::factory()->create()->userable_id, 'task_id' => Task::factory()->create()->id]); Shift::factory()->count(5)->create(['soldier_id' => $user->userable_id, 'task_id' => Task::factory()->create()->id]); @@ -166,9 +169,12 @@ ]), 'type' => 'my_soldiers', ]) + ->mountAction('Filters') + ->setActionData(['reservists' => false, 'unassigned_shifts' => false, 'kind' => TaskKind::ALERT->value, 'soldier_id' => [], 'type' => [], 'course' => []]) + ->callMountedAction() ->call('fetchEvents', ['start' => Carbon::yesterday(), 'end' => Carbon::now()->addDays(2), 'timezone' => 'Asia\/Jerusalem']); - expect($calendar->effects['returns'][0])->toHaveCount(count: 2); + expect($calendar->effects['returns'][0])->toHaveCount(7); }); it('should refresh the fullcalendar', function () { @@ -213,8 +219,8 @@ $task2 = Task::factory()->create(['type' => 'clean']); Shift::factory()->count(5)->create(['soldier_id' => 1, 'task_id' => $task1->id]); Shift::factory()->count(5)->create(['soldier_id' => 1, 'task_id' => $task2->id]); - Shift::factory()->count(5)->create(['task_id' => $task1->id]); - Shift::factory()->count(5)->create(['task_id' => $task2->id]); + Shift::factory()->count(6)->create(['soldier_id' => null, 'task_id' => $task1->id]); + Shift::factory()->count(2)->create(['soldier_id' => null, 'task_id' => $task2->id]); $calendar = livewire(CalendarWidget::class, [ 'model' => Shift::class, @@ -229,7 +235,8 @@ 'fetchInfo' => ['start' => Carbon::yesterday(), 'end' => Carbon::now()->addDays(5), 'timezone' => 'Asia\/Jerusalem'], ]) ->mountAction('Filters') - ->callMountedAction(['Unassigned shifts' => true]) + ->setActionData(['reservists' => false, 'unassigned_shifts' => true, 'kind' => null, 'soldier_id' => [], 'type' => [], 'course' => []]) + ->callMountedAction() ->call('fetchEvents', ['start' => Carbon::yesterday(), 'end' => Carbon::now()->addDays(5), 'timezone' => 'Asia\/Jerusalem']); - expect($calendar->effects['returns'][0])->toHaveCount(10); + expect($calendar->effects['returns'][0])->toHaveCount(8); }); diff --git a/tests/Unit/ChangeAssignmentServiceTest.php b/tests/Unit/ChangeAssignmentServiceTest.php index 2a64f81..72671fa 100644 --- a/tests/Unit/ChangeAssignmentServiceTest.php +++ b/tests/Unit/ChangeAssignmentServiceTest.php @@ -188,10 +188,10 @@ $expectedShifts = collect([$shift1->id, $shift4->id]); $changeAssignment = new ChangeAssignment($shiftForExchange); $result = $changeAssignment->getMatchingShifts(); - expect($result->count())->toBe(2); + expect($result['shifts']->count())->toBe(2); $shiftsIds = collect([]); - $result->map(function ($shift) use (&$shiftsIds) { - $shiftsIds->push($shift->pluck('id')->first()); + $result['shifts']->each(function ($shift) use (&$shiftsIds) { + $shiftsIds->push($shift['shift']->id); }); expect($expectedShifts)->toEqual($shiftsIds); }); From 634c3fee05195f6416b29483e150930fa9145614 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Tue, 8 Jul 2025 10:18:40 +0300 Subject: [PATCH 197/259] versin 2 algorithm --- .github/workflows/php-build-and-deploy.yml | 2 +- database/migrations/2024_05_30_094012_create_soldier_table.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 9402a20..84aed4e 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_20 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_22 flavor: | latest=false tags: | diff --git a/database/migrations/2024_05_30_094012_create_soldier_table.php b/database/migrations/2024_05_30_094012_create_soldier_table.php index 6981ae2..9d5a1b2 100644 --- a/database/migrations/2024_05_30_094012_create_soldier_table.php +++ b/database/migrations/2024_05_30_094012_create_soldier_table.php @@ -11,7 +11,7 @@ public function up(): void Schema::create('soldiers', function (Blueprint $table) { $table->id(); $table->foreignId('team_id')->nullable(); - $table->string('type')->nullable(); + $table->string('type')->default('שרידות')->nullable(); $table->boolean('gender'); $table->boolean('is_permanent')->default(false); $table->dateTime('enlist_date')->nullable(); From dfcac45164b7034dd0826db9b96b2d9747cf3c1a Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Tue, 8 Jul 2025 11:51:36 +0300 Subject: [PATCH 198/259] versin 2 algorithm --- .github/workflows/php-build-and-deploy.yml | 2 +- ...2024_05_30_094012_create_soldier_table.php | 2 +- ...7_08_114935_add_type_to_soldiers_table.php | 27 +++++++++++++++++++ 3 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 database/migrations/2025_07_08_114935_add_type_to_soldiers_table.php diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 84aed4e..7a32208 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_22 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_23 flavor: | latest=false tags: | diff --git a/database/migrations/2024_05_30_094012_create_soldier_table.php b/database/migrations/2024_05_30_094012_create_soldier_table.php index 9d5a1b2..6981ae2 100644 --- a/database/migrations/2024_05_30_094012_create_soldier_table.php +++ b/database/migrations/2024_05_30_094012_create_soldier_table.php @@ -11,7 +11,7 @@ public function up(): void Schema::create('soldiers', function (Blueprint $table) { $table->id(); $table->foreignId('team_id')->nullable(); - $table->string('type')->default('שרידות')->nullable(); + $table->string('type')->nullable(); $table->boolean('gender'); $table->boolean('is_permanent')->default(false); $table->dateTime('enlist_date')->nullable(); diff --git a/database/migrations/2025_07_08_114935_add_type_to_soldiers_table.php b/database/migrations/2025_07_08_114935_add_type_to_soldiers_table.php new file mode 100644 index 0000000..48da9d1 --- /dev/null +++ b/database/migrations/2025_07_08_114935_add_type_to_soldiers_table.php @@ -0,0 +1,27 @@ +string('type'); + }); + + // DB::table('soldiers')->whereNull('type')->update(['type' => 'Regular']); + } + + + public function down(): void + { + Schema::table('soldiers', function (Blueprint $table) { + $table->dropColumn('type'); + }); + } +}; \ No newline at end of file From 932fff7b5a0991ceb08a343f26d4b3cd410def3f Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Tue, 8 Jul 2025 12:20:06 +0300 Subject: [PATCH 199/259] versin 2 algorithm --- .github/workflows/php-build-and-deploy.yml | 2 +- .../2025_07_08_114935_add_type_to_soldiers_table.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 7a32208..5778650 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_23 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_24 flavor: | latest=false tags: | diff --git a/database/migrations/2025_07_08_114935_add_type_to_soldiers_table.php b/database/migrations/2025_07_08_114935_add_type_to_soldiers_table.php index 48da9d1..2c1e627 100644 --- a/database/migrations/2025_07_08_114935_add_type_to_soldiers_table.php +++ b/database/migrations/2025_07_08_114935_add_type_to_soldiers_table.php @@ -11,10 +11,10 @@ public function up(): void { Schema::table('soldiers', function (Blueprint $table) { - $table->string('type'); + $table->string('type')->default('collection'); }); - // DB::table('soldiers')->whereNull('type')->update(['type' => 'Regular']); + DB::table('soldiers')->whereNull('type')->update(['type' => 'collection']); } From cce87b00acef4678c15e690d86b7eab66aed0d61 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Tue, 8 Jul 2025 14:46:31 +0300 Subject: [PATCH 200/259] versin 2 algorithm --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 102 +--------------- app/Resources/ChartResource.php | 8 +- .../ChartResource/Widgets/ChartFilter.php | 113 ++++++++++++++++++ ...2024_05_30_094012_create_soldier_table.php | 2 +- lang/en.json | 8 +- lang/he.json | 18 ++- .../widgets/chart-filter.blade.php | 1 + 8 files changed, 145 insertions(+), 109 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 5778650..ee78f10 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_24 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_25 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 2ca30fe..9f4151c 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -3,18 +3,13 @@ namespace App\Filament\Widgets; use App\Enums\ConstraintType; -use App\Exports\AssignmentJustice; use App\Exports\ShiftsExport; use App\Models\Constraint; use App\Models\Shift; -use App\Models\Task; -use App\Services\Algorithm; use App\Services\Holidays; use App\Services\Range; -use App\Services\RecurringEvents; use Carbon\Carbon; use Filament\Actions\Action; -use Filament\Actions\ActionGroup; use Filament\Forms\Form; use Filament\Notifications\Notification; use Illuminate\Database\Eloquent\Model; @@ -132,7 +127,6 @@ protected function headerActions(): array $this->refreshRecords(); $this->lastFilterData = $this->filterData; } - $actions = []; if ($this->type === 'my') { if ($this->model === Constraint::class) { return [$this->createConstraintAction()]; @@ -144,46 +138,9 @@ protected function headerActions(): array if (in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray())) { return [$this->createConstraintAction()]; } - } else { - $hasActiveTasks = Task::withTrashed()->whereNull('deleted_at')->exists(); - - $actions = [ - ActionGroup::make([ - $this->downloadAssignmentsAction(), - $this->downloadAssignmentJustice(), - Action::make('Create shifts') - ->action(fn () => $this->runEvents()) - ->label(__('Create shifts')) - ->icon('heroicon-o-clipboard-document-check') - ->visible($hasActiveTasks), - Action::make('Shifts assignment') - ->action(fn () => $this->runAlgorithm()) - ->label(__('Shifts assignment and Parallel shifts')) - ->icon('heroicon-o-play') - ->visible($hasActiveTasks), - Action::make('Reset assignment') - ->color('danger') - ->action(fn () => $this->resetShifts()) - ->label(__('Reset assignment')) - ->requiresConfirmation() - ->modalHeading(__('Reset assignment')) - ->modalDescription(__('Are you sure? This cannot be undone!')) - ->modalSubmitActionLabel(__('Yes, reset it')) - ->icon('heroicon-o-arrow-path'), - Action::make('Delete shifts') - ->color('danger') - ->action(fn () => $this->deleteShifts()) - ->label(__('Delete shifts')) - ->requiresConfirmation() - ->icon('heroicon-o-x-circle'), - ]) - ->visible(in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray()) - || in_array('manager', auth()->user()->getRoleNames()->toArray())), - ]; } if ($this->filter) { return array_merge( - $actions ?? [], self::activeFilters(), [ self::resetFilters(), @@ -193,13 +150,10 @@ protected function headerActions(): array ); } - return array_merge( - $actions ?? [], - [ - $this->model::getFilters($this) - ->closeModalByClickingAway(false), - ] - ); + return [ + $this->model::getFilters($this) + ->closeModalByClickingAway(false), + ]; } } @@ -242,7 +196,7 @@ protected function createConstraintAction() protected function downloadAssignmentsAction() { return Action::make('Download') - ->label(__('Download to excel')) + ->label(__('Download to assignment')) ->icon('heroicon-o-arrow-down-tray') ->action(fn () => Excel::download(new ShiftsExport($this->currentMonth), __('File name', [ 'name' => auth()->user()->displayName, @@ -250,52 +204,6 @@ protected function downloadAssignmentsAction() ]).'.xlsx')); } - protected function downloadAssignmentJustice() - { - return Action::make('Download assignment justice') - ->label(__('Download the assignment justice')) - ->icon('heroicon-o-arrow-down-tray') - ->action(fn () => Excel::download(new AssignmentJustice($this->currentMonth), __('File name', [ - 'name' => auth()->user()->displayName, - 'month' => $this->currentMonth, - ]).'.xlsx')); - } - - protected function runEvents() - { - $recurringEvents = new RecurringEvents($this->currentMonth); - $recurringEvents->recurringTask(); - $this->refreshRecords(); - } - - protected function runAlgorithm() - { - $algorithm = new Algorithm($this->currentMonth); - $algorithm->run(); - $this->refreshRecords(); - } - - protected function resetShifts() - { - $this->startDate = (Carbon::now()->format('m') == Carbon::parse($this->currentMonth)->format('m')) - ? Carbon::now()->addDay()->format('Y-m-d') - : Carbon::parse($this->currentMonth)->startOfMonth()->format('Y-m-d'); - Shift::whereNotNull('soldier_id') - ->whereBetween('start_date', [$this->startDate, (Carbon::parse($this->currentMonth)->endOfMonth()->addDay())->format('Y-m-d')]) - ->update(['soldier_id' => null]); - $this->refreshRecords(); - } - - protected function deleteShifts() - { - $this->startDate = (Carbon::now()->format('m') == Carbon::parse($this->currentMonth)->format('m')) - ? Carbon::now()->addDay()->format('Y-m-d') - : Carbon::parse($this->currentMonth)->startOfMonth()->format('Y-m-d'); - Shift::whereBetween('start_date', [$this->startDate, (Carbon::parse($this->currentMonth)->endOfMonth()->addDay())->format('Y-m-d')]) - ->delete(); - $this->refreshRecords(); - } - protected function resetFilters() { return Action::make('resetFilters') diff --git a/app/Resources/ChartResource.php b/app/Resources/ChartResource.php index 21db310..38f31d5 100644 --- a/app/Resources/ChartResource.php +++ b/app/Resources/ChartResource.php @@ -15,17 +15,19 @@ class ChartResource extends Resource public static function getModelLabel(): string { - return __('Assignment charts'); + return __('Assignment'); } public static function getPluralModelLabel(): string { - return __('Assignment charts'); + return __('Assignment'); } public static function table(Table $table): Table { - return $table->paginated(false); + return $table + ->paginated(false) + ->emptyState(fn () => null); } public static function getPages(): array diff --git a/app/Resources/ChartResource/Widgets/ChartFilter.php b/app/Resources/ChartResource/Widgets/ChartFilter.php index 4ec36a7..8eb80f8 100644 --- a/app/Resources/ChartResource/Widgets/ChartFilter.php +++ b/app/Resources/ChartResource/Widgets/ChartFilter.php @@ -3,14 +3,23 @@ namespace App\Resources\ChartResource\Widgets; use App\Enums\MonthesInYear; +use App\Exports\AssignmentJustice; +use App\Exports\ShiftsExport; +use App\Models\Shift; use App\Models\Soldier; +use App\Models\Task; +use App\Services\Algorithm; +use App\Services\RecurringEvents; +use Carbon\Carbon; use Filament\Forms\Components\Actions\Action; use Filament\Forms\Components\Section; use Filament\Forms\Components\Select; use Filament\Forms\Concerns\InteractsWithForms; use Filament\Forms\Contracts\HasForms; use Filament\Forms\Form; +use Filament\Notifications\Notification; use Filament\Widgets\Widget; +use Maatwebsite\Excel\Facades\Excel; class ChartFilter extends Widget implements HasForms { @@ -55,6 +64,70 @@ public function form(Form $form): Form ->placeholder(__('Select month')), ]) ->columns(3) + ->headerActions( + [ + Action::make('Download') + ->label(__('Download to assignment')) + ->icon('heroicon-o-arrow-down-tray') + ->action(fn () => Excel::download(new ShiftsExport($form->getState()['year'].'-'.$form->getState()['month']), __('File name', [ + 'name' => auth()->user()->displayName, + 'month' => $form->getState()['year'].'-'.$form->getState()['month'], + ]).'.xlsx')) + ->extraAttributes(['style' => 'color: white; background-color: #a0cddf']), + Action::make('Download assignment justice') + ->label(__('Download the assignment justice')) + ->icon('heroicon-o-arrow-down-tray') + ->action(fn () => Excel::download(new AssignmentJustice($form->getState()['year'].'-'.$form->getState()['month']), __('File name', [ + 'name' => auth()->user()->displayName, + 'month' => $form->getState()['year'].'-'.$form->getState()['month'], + ]).'.xlsx')) + ->extraAttributes(['style' => 'color: white; background-color: #a0cddf']), + Action::make('Create shifts') + ->action(fn () => $this->runEvents($form)) + ->label(__('Create shifts')) + ->icon('heroicon-o-clipboard-document-check') + ->visible(Task::withTrashed()->whereNull('deleted_at')->exists()) + ->after(fn () => $this->successNotification(__('The shifts were created', [ + 'month' => $form->getState()['year'].'-'.$form->getState()['month'], + ]))) + ->extraAttributes(['style' => 'color: white; background-color: #a0cddf']), + Action::make('Shifts assignment') + ->action(fn () => $this->runAlgorithm($form)) + ->label(__('Shifts assignment')) + ->icon('heroicon-o-play') + ->visible(Task::withTrashed()->whereNull('deleted_at')->exists()) + ->after(fn () => $this->successNotification(__('Shifts have been assigned', [ + 'month' => $form->getState()['year'].'-'.$form->getState()['month'], + ]))) + ->extraAttributes(['style' => 'color: white; background-color: #a0cddf']), + Action::make('Reset assignment') + ->action(fn () => $this->resetShifts($form)) + ->requiresConfirmation() + ->modalHeading(fn () => __('Reset assignment confirmation modal heading', [ + 'month' => $form->getState()['year'].'-'.$form->getState()['month'], + ])) + ->modalDescription(__('Are you sure? This cannot be undone!')) + ->modalSubmitActionLabel(__('Yes, reset it')) + ->after(fn () => $this->successNotification(__('The assignment has been reset', [ + 'month' => $form->getState()['year'].'-'.$form->getState()['month'], + ]))) + ->color('danger') + ->label(__('Reset assignment')) + ->icon('heroicon-o-arrow-path'), + Action::make('Delete shifts') + ->color('danger') + ->action(fn () => $this->deleteShifts($form)) + ->label(__('Delete shifts')) + ->requiresConfirmation() + ->modalHeading(fn () => __('Delete shifts confirmation modal heading', [ + 'month' => $form->getState()['year'].'-'.$form->getState()['month'], + ])) + ->after(fn () => $this->successNotification(__('The shifts have been deleted', [ + 'month' => $form->getState()['year'].'-'.$form->getState()['month'], + ]))) + ->icon('heroicon-o-x-circle'), + ] + ) ->footerActions( [ Action::make(__('Filter')) @@ -68,6 +141,46 @@ public function form(Form $form): Form ->statePath('data'); } + protected function successNotification($title) + { + return Notification::make() + ->success() + ->title($title) + ->persistent() + ->send(); + } + + protected function runEvents($form) + { + $recurringEvents = new RecurringEvents($form->getState()['year'].'-'.$form->getState()['month']); + $recurringEvents->recurringTask(); + } + + protected function runAlgorithm($form) + { + $algorithm = new Algorithm($form->getState()['year'].'-'.$form->getState()['month']); + $algorithm->run(); + } + + protected function resetShifts($form) + { + $this->startDate = (Carbon::now()->format('m') == Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->format('m')) + ? Carbon::now()->addDay()->format('Y-m-d') + : Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->startOfMonth()->format('Y-m-d'); + Shift::whereNotNull('soldier_id') + ->whereBetween('start_date', [$this->startDate, (Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->endOfMonth()->addDay())->format('Y-m-d')]) + ->update(['soldier_id' => null]); + } + + protected function deleteShifts($form) + { + $this->startDate = (Carbon::now()->format('m') == Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->format('m')) + ? Carbon::now()->addDay()->format('Y-m-d') + : Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->startOfMonth()->format('Y-m-d'); + Shift::whereBetween('start_date', [$this->startDate, (Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->endOfMonth()->addDay())->format('Y-m-d')]) + ->delete(); + } + protected static function getYearOptions(): array { $currentYear = now()->year; diff --git a/database/migrations/2024_05_30_094012_create_soldier_table.php b/database/migrations/2024_05_30_094012_create_soldier_table.php index 6981ae2..429bcf2 100644 --- a/database/migrations/2024_05_30_094012_create_soldier_table.php +++ b/database/migrations/2024_05_30_094012_create_soldier_table.php @@ -11,7 +11,7 @@ public function up(): void Schema::create('soldiers', function (Blueprint $table) { $table->id(); $table->foreignId('team_id')->nullable(); - $table->string('type')->nullable(); + $table->string('type'); $table->boolean('gender'); $table->boolean('is_permanent')->default(false); $table->dateTime('enlist_date')->nullable(); diff --git a/lang/en.json b/lang/en.json index af42528..a9deecb 100644 --- a/lang/en.json +++ b/lang/en.json @@ -48,5 +48,11 @@ "Commander approved edit constraint times":"Hello :soldierName
Your request to move your :constraintName constraint
From :startDate - :endDate
To :toStartDate - :toEndDate
Has been approved and the change has been made.
Have a good day!", "Commander approved edit constraint type": "Hello :soldierName!
Your request to edit your :constraintName constraint
At :startDate - :endDate
To :toConstraintName constraint
At :toStartDate - :toEndDate
Has been approved and the change has been made.
Have a good day!", "Commander deny edit constraint times":"Hello :soldierName
Your request to move your :constraintName constraint
From :startDate - :endDate
To :toStartDate - :toEndDate
Has been rejected.
Have a good day!", - "Commander deny edit constraint type":"Hello :soldierName!
Your request to edit your :constraintName constraint
At :startDate - :endDate
To :toConstraintName constraint
At :toStartDate - :toEndDate
Has been rejected.
Have a good day!" + "Commander deny edit constraint type":"Hello :soldierName!
Your request to edit your :constraintName constraint
At :startDate - :endDate
To :toConstraintName constraint
At :toStartDate - :toEndDate
Has been rejected.
Have a good day!", + "The shifts were created":"The shifts for the :month have been created.", + "Shifts have been assigned":"The shifts for the :month have been assigned.", + "The assignment has been reset":"The assignment of :month has been reset.", + "The shifts have been deleted":"The shifts of :month have been deleted.", + "Reset assignment confirmation modal heading":"Reset assignment of :month", + "Delete shifts confirmation modal heading":"Delete shifts of :month" } diff --git a/lang/he.json b/lang/he.json index 25f8cf4..60aecdd 100644 --- a/lang/he.json +++ b/lang/he.json @@ -40,7 +40,7 @@ "August":"אוגוסט", "April":"אפריל", "Assign soldier": "הקצה חייל", - "Assignment charts":"תרשימי שיבוץ", + "Assignment":"שיבוץ", "Assigning the soldier to this shift is your sole responsibility!":"הקצאת החייל למשמרת זו הינה באחריותך בלבד! ", "Approve exchange shift request":"אישור בקשת החלפת משמרת", "Commander notification of approving exchange shift request for the requesting soldier": "שלום :requestingSoldierName!
בקשתך להחלפת משמרת :shiftAName
מ :shiftAStart עד :shiftAEnd
עם החייל :approvingSoldierName בעבור משמרת :shiftBName
מ :shiftBStart עד :shiftBEnd
אושרה וההחלפה בוצעה.
יום מוצלח!
:commanderName", @@ -74,7 +74,7 @@ "Survival":"שרידות", "Select soldier type":"בחר סוג חייל", "Create":"צור", - "Create shifts":"צור משמרות ותורנויות", + "Create shifts":"צור משמרות", "Create soldier":"צור חייל", "Creating shifts":"יצירת משמרות", "Close":"סגור", @@ -97,8 +97,8 @@ "Deny exchange shift request":"דחית בקשה להחלפת משמרת", "Deny change shift request":"דחיית בקשה לשינוי משמרת", "Display":"הצג", - "Download to excel":"הורדה לאקסל", - "Download the assignment justice":"הורד את צדק השיבוץ", + "Download to assignment":"הורד שיבוץ", + "Download the assignment justice":"הורד צדק השיבוץ", "Do you approve the constraint request":"האם אתה מאשר בקשת אילוץ?", "Duration": "משך", "Edit":"ערוך", @@ -209,6 +209,7 @@ "Reservist": "מילואימניק", "Reservists": "מילואימניקים", "Reset assignment":"אפס שיבוץ", + "Reset assignment confirmation modal heading":"אפס שיבוץ של :month", "Reset filters":"אפס סננים", "Request":"בקש", "Role":"תפקיד", @@ -235,7 +236,7 @@ "Shift type":"סוג המשמרת", "Shifts": "משמרות", "shifts": "משמרות", - "Shifts assignment and Parallel shifts":" שבץ משמרות ותורנויות", + "Shifts assignment":"שבץ משמרות", "A shifts assignment":"משבץ משמרות", "Soldier": "חייל", "Soldier assignment": "הקצאת חייל", @@ -295,10 +296,15 @@ "Regular":"רגילה", "Regulars":"רגילות", "Delete shifts":"מחק משמרות", - "Are you sure? This cannot be undone!":"האם אתה בטוח שאתה רוצה לאפס את השיבוץ? הפעולה בלתי הפיכה!", + "Delete shifts confirmation modal heading":"מחק משמרות של :month", + "Are you sure? This cannot be undone!":"האם אתה בטוח? הפעולה בלתי הפיכה!", "Yes, reset it":"כן, אפס שיבוץ", "You did not choose a commander. With your approval, you leave the team without a commander. Are you sure?":"לא בחרת מפקד. באישורך אתה משאיר את הצוות ללא מפקד. האם אתה בטוח?", "Your shifts for today":"המשמרות שלך להיום", + "The shifts were created":"המשמרות עבור :month נוצרו.", + "Shifts have been assigned":"המשמרות עבור :month שובצו.", + "The assignment has been reset":"השיבוץ של :month אופס.", + "The shifts have been deleted":"המשמרות של :month נמחקו.", "Range between":":label בין :fromValue ו :toValue", "Range equal":":label שווה ל :value", "Range not equal":":label לא שווה ל :value", diff --git a/resources/views/resources/chart-resource/widgets/chart-filter.blade.php b/resources/views/resources/chart-resource/widgets/chart-filter.blade.php index 7da774f..77fe8f8 100644 --- a/resources/views/resources/chart-resource/widgets/chart-filter.blade.php +++ b/resources/views/resources/chart-resource/widgets/chart-filter.blade.php @@ -2,4 +2,5 @@
{{ $this->form }}
+ From 677b3e4691487952bb75dc13267795a89b82bba8 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Tue, 8 Jul 2025 15:18:43 +0300 Subject: [PATCH 201/259] versin 2 algorithm --- .github/workflows/php-build-and-deploy.yml | 2 +- .../ChartResource/Widgets/ChartFilter.php | 14 ++++++++------ .../SoldierResource/Pages/ListSoldiers.php | 8 +++++++- app/Services/Algorithm.php | 3 ++- app/Services/ConcurrentTasks.php | 3 ++- app/Services/FixedConstraints.php | 4 ++-- 6 files changed, 22 insertions(+), 12 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index ee78f10..014eb61 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_25 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_26 flavor: | latest=false tags: | diff --git a/app/Resources/ChartResource/Widgets/ChartFilter.php b/app/Resources/ChartResource/Widgets/ChartFilter.php index 8eb80f8..2783744 100644 --- a/app/Resources/ChartResource/Widgets/ChartFilter.php +++ b/app/Resources/ChartResource/Widgets/ChartFilter.php @@ -164,9 +164,10 @@ protected function runAlgorithm($form) protected function resetShifts($form) { - $this->startDate = (Carbon::now()->format('m') == Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->format('m')) - ? Carbon::now()->addDay()->format('Y-m-d') - : Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->startOfMonth()->format('Y-m-d'); + // $this->startDate = (Carbon::now()->format('m') == Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->format('m')) + // ? Carbon::now()->addDay()->format('Y-m-d') + // : + Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->startOfMonth()->format('Y-m-d'); Shift::whereNotNull('soldier_id') ->whereBetween('start_date', [$this->startDate, (Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->endOfMonth()->addDay())->format('Y-m-d')]) ->update(['soldier_id' => null]); @@ -174,9 +175,10 @@ protected function resetShifts($form) protected function deleteShifts($form) { - $this->startDate = (Carbon::now()->format('m') == Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->format('m')) - ? Carbon::now()->addDay()->format('Y-m-d') - : Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->startOfMonth()->format('Y-m-d'); + // $this->startDate = (Carbon::now()->format('m') == Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->format('m')) + // ? Carbon::now()->addDay()->format('Y-m-d') + // : + Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->startOfMonth()->format('Y-m-d'); Shift::whereBetween('start_date', [$this->startDate, (Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->endOfMonth()->addDay())->format('Y-m-d')]) ->delete(); } diff --git a/app/Resources/SoldierResource/Pages/ListSoldiers.php b/app/Resources/SoldierResource/Pages/ListSoldiers.php index c7d1f9e..4246b1f 100644 --- a/app/Resources/SoldierResource/Pages/ListSoldiers.php +++ b/app/Resources/SoldierResource/Pages/ListSoldiers.php @@ -101,7 +101,13 @@ protected function getHeaderActions(): array ->where('type', $data['type'])->get(); $soldiers->map(function ($soldier) use ($updateData) { collect($updateData)->map(function ($value, $key) use ($soldier) { - $soldier->{$key} = $value; + if ($key == 'qualifications') { + $qualifications = collect($soldier->qualifications); + $qualifications->push(...$value); + $soldier->qualifications = $qualifications; + } else { + $soldier->{$key} = $value; + } }); $soldier->save(); }); diff --git a/app/Services/Algorithm.php b/app/Services/Algorithm.php index 0a9da95..d90b774 100644 --- a/app/Services/Algorithm.php +++ b/app/Services/Algorithm.php @@ -19,7 +19,8 @@ public function __construct($date = null) protected function getShiftWithTasks() { - $startOfMonth = max($this->date->copy()->startOfMonth(), Carbon::tomorrow()); + // $startOfMonth = max($this->date->copy()->startOfMonth(), Carbon::tomorrow()); + $startOfMonth = $this->date->copy()->startOfMonth(); $endOfMonth = $this->date->copy()->endOfMonth(); return Shift::whereNull('soldier_id') diff --git a/app/Services/ConcurrentTasks.php b/app/Services/ConcurrentTasks.php index 610b95f..44ca079 100644 --- a/app/Services/ConcurrentTasks.php +++ b/app/Services/ConcurrentTasks.php @@ -40,7 +40,8 @@ public function run() protected function getShiftsWithTasks() { - $startOfMonth = max($this->date->copy()->startOfMonth(), Carbon::tomorrow()); + // $startOfMonth = max($this->date->copy()->startOfMonth(), Carbon::tomorrow()); + $startOfMonth = $this->date->copy()->startOfMonth(); $endOfMonth = $this->date->copy()->endOfMonth(); return Shift::whereNull('soldier_id') diff --git a/app/Services/FixedConstraints.php b/app/Services/FixedConstraints.php index 41f0a8e..3413457 100644 --- a/app/Services/FixedConstraints.php +++ b/app/Services/FixedConstraints.php @@ -55,7 +55,7 @@ protected function createConstraint($constraintType, $soldierId, $startDate, $en protected function createPeriod() { $month = Carbon::now()->addMonth(); - - return CarbonPeriod::between(max($month->copy()->startOfMonth(), Carbon::tomorrow()), $month->copy()->endOfMonth()); + return CarbonPeriod::between($month->copy()->startOfMonth(), $month->copy()->endOfMonth()); + // return CarbonPeriod::between(max($month->copy()->startOfMonth(), Carbon::tomorrow()), $month->copy()->endOfMonth()); } } From 3555f212b5e4137c0f7299e0fdf8087ae82bf2cc Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 9 Jul 2025 15:03:48 +0300 Subject: [PATCH 202/259] versin 2 algorithm --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 16 +- app/Filament/Widgets/ChartWidget.php | 2 +- app/Models/Shift.php | 12 +- .../ChartResource/Widgets/ChartFilter.php | 12 +- app/Resources/SoldierResource.php | 4 +- app/Resources/TaskResource.php | 5 +- .../TaskResource/Pages/CreateTask.php | 1 - app/Resources/TeamResource.php | 4 +- app/Services/Algorithm.php | 15 +- app/Services/ConcurrentTasks.php | 28 +- app/Services/Course.php | 3 + app/Services/FixedConstraints.php | 2 +- app/Services/Helpers.php | 42 ++- app/Services/ManualAssignment.php | 108 ++++---- app/Services/MaxData.php | 26 -- app/Services/PointedSchedule.php | 49 ++-- app/Services/Range.php | 31 ++- app/Services/RecurringEvents.php | 8 +- app/Services/Schedule.php | 262 ++---------------- app/Services/Shift.php | 36 ++- app/Services/ShiftData.php | 8 +- app/Services/Soldier.php | 94 +++++-- 23 files changed, 306 insertions(+), 464 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 014eb61..ba48c69 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_26 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_28 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 9f4151c..a4f77e7 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -252,17 +252,19 @@ protected function getBasicActions() { return [ EditAction::make() - ->fillForm( - fn (Model $record, array $arguments) => method_exists($this->model, 'fillForm') + ->fillForm(fn (Model $record, array $arguments) => method_exists($this->model, 'fillForm') ? (new $this->model)->fillForm($record, $arguments) : [ ...$record->getAttributes(), 'start_date' => $arguments['event']['start'] ?? $record->start_date, 'end_date' => $arguments['event']['end'] ?? $record->end_date, - ] - ) + ]) ->visible(function (Model $record, $arguments) { if ($record->start_date < now()) { + if (! empty($arguments['event']) && $arguments['type'] == 'drop') { + $this->refreshRecords(); + } + return false; } if (! empty($arguments['event']) && $arguments['event']['start'] < now()) { @@ -386,15 +388,13 @@ protected function displayButton(): bool protected function viewAction(): Action { return ViewAction::make() - ->fillForm( - fn (Model $record, array $arguments) => method_exists($this->model, 'fillForm') + ->fillForm(fn (Model $record, array $arguments) => method_exists($this->model, 'fillForm') ? (new $this->model)->fillForm($record, $arguments) : [ ...$record->getAttributes(), 'start_date' => $arguments['event']['start'] ?? $record->start_date, 'end_date' => $arguments['event']['end'] ?? $record->end_date, - ] - ) + ]) ->modalFooterActions( function (ViewAction $action, FullCalendarWidget $livewire) { if ( diff --git a/app/Filament/Widgets/ChartWidget.php b/app/Filament/Widgets/ChartWidget.php index 1d4a69c..e7f3a49 100644 --- a/app/Filament/Widgets/ChartWidget.php +++ b/app/Filament/Widgets/ChartWidget.php @@ -83,7 +83,7 @@ protected function getOptions(): array|RawJs|null callbacks: { label: function(context) { const soldierIndex = context.dataIndex; - const soldierName = context.dataset.labels ? context.dataset.labels[soldierIndex] : 'Unknown Soldier'; + const soldierName = context.dataset.labels ? context.dataset.labels[soldierIndex] : __('Unknown Soldier'); const value = context.parsed.y; return soldierName + ': ' + value; diff --git a/app/Models/Shift.php b/app/Models/Shift.php index 1c84321..5d3d8da 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -56,7 +56,7 @@ public function soldier(): BelongsTo private function getTaskParallelWeight() { - return $this->task?->parallel_weight; + return $this->task()->withTrashed()->first()->parallel_weight; } public function getTaskNameAttribute() @@ -64,13 +64,13 @@ public function getTaskNameAttribute() $user_name = User::where('userable_id', $this->soldier_id)->get(['first_name', 'last_name']); return $this->soldier_id == auth()->user()->userable_id - ? $this->task?->name - : $this->task?->name.' '.$user_name->first()?->first_name.' '.$user_name->first()?->last_name; + ? $this->task()->withTrashed()->first()->name + : $this->task()->withTrashed()->first()->name.' '.$user_name->first()?->first_name.' '.$user_name->first()?->last_name; } public function getTaskColorAttribute() { - return $this->task?->color; + return $this->task()->withTrashed()->first()->color; } public static function getSchema(): array @@ -280,7 +280,7 @@ function ($shifts, $soldierId) use ($data) { $livewire->dispatch('filament-fullcalendar--refresh'); } if ($arguments['cancel'] ?? false) { - $livewire->dispatch('filament-fullcalendar--refresh'); + $livewire->dispatch('close-modal'); } }); } @@ -578,7 +578,7 @@ function ($record) use (&$soldiers) { $livewire->dispatch('filament-fullcalendar--refresh'); } if ($arguments['cancel'] ?? false) { - $livewire->dispatch('filament-fullcalendar--refresh'); + $livewire->dispatch('close-modal'); } }); } diff --git a/app/Resources/ChartResource/Widgets/ChartFilter.php b/app/Resources/ChartResource/Widgets/ChartFilter.php index 2783744..c1292d0 100644 --- a/app/Resources/ChartResource/Widgets/ChartFilter.php +++ b/app/Resources/ChartResource/Widgets/ChartFilter.php @@ -164,22 +164,24 @@ protected function runAlgorithm($form) protected function resetShifts($form) { - // $this->startDate = (Carbon::now()->format('m') == Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->format('m')) + $startDate = + // (Carbon::now()->format('m') == Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->format('m')) // ? Carbon::now()->addDay()->format('Y-m-d') // : - Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->startOfMonth()->format('Y-m-d'); + Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->startOfMonth()->format('Y-m-d'); Shift::whereNotNull('soldier_id') - ->whereBetween('start_date', [$this->startDate, (Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->endOfMonth()->addDay())->format('Y-m-d')]) + ->whereBetween('start_date', [$startDate, (Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->endOfMonth()->addDay())->format('Y-m-d')]) ->update(['soldier_id' => null]); } protected function deleteShifts($form) { - // $this->startDate = (Carbon::now()->format('m') == Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->format('m')) + $startDate = + // (Carbon::now()->format('m') == Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->format('m')) // ? Carbon::now()->addDay()->format('Y-m-d') // : Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->startOfMonth()->format('Y-m-d'); - Shift::whereBetween('start_date', [$this->startDate, (Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->endOfMonth()->addDay())->format('Y-m-d')]) + Shift::whereBetween('start_date', [$startDate, (Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->endOfMonth()->addDay())->format('Y-m-d')]) ->delete(); } diff --git a/app/Resources/SoldierResource.php b/app/Resources/SoldierResource.php index 736eb5e..4161ad4 100644 --- a/app/Resources/SoldierResource.php +++ b/app/Resources/SoldierResource.php @@ -62,9 +62,7 @@ public static function table(Table $table): Table ->columns([ TextColumn::make('user.displayName') ->label(__('Full name')) - ->formatStateUsing( - fn ($record) => $record->user->last_name.' '.$record->user->first_name - ) + ->formatStateUsing(fn ($record) => $record->user->last_name.' '.$record->user->first_name) ->searchable(query: function ($query, $search) { $query->whereHas('user', function ($query) use ($search) { $query->where('first_name', 'like', "%{$search}%") diff --git a/app/Resources/TaskResource.php b/app/Resources/TaskResource.php index ac54e48..792f186 100644 --- a/app/Resources/TaskResource.php +++ b/app/Resources/TaskResource.php @@ -334,10 +334,7 @@ public static function assignSoldier(): array ->afterStateUpdated(fn (callable $set) => $set('soldier_id', null)), Select::make('soldier_id') ->label(__('Assign soldier')) - ->options( - fn (Get $get) => self::getSoldiers($get) - - ) + ->options(fn (Get $get) => self::getSoldiers($get)) ->default(null) ->placeholder(fn (Get $get) => self::getSoldiers($get)->isEmpty() ? __('No suitable soldiers') : __('Select a soldier')) ->visible( diff --git a/app/Resources/TaskResource/Pages/CreateTask.php b/app/Resources/TaskResource/Pages/CreateTask.php index f767d93..4914de8 100644 --- a/app/Resources/TaskResource/Pages/CreateTask.php +++ b/app/Resources/TaskResource/Pages/CreateTask.php @@ -76,7 +76,6 @@ public static function getSteps(): array ->visible( fn (Get $get) => $get('recurring.type') == 'One time' && $get('recurring.date') - ), ]; } diff --git a/app/Resources/TeamResource.php b/app/Resources/TeamResource.php index 2d70905..9f3d100 100644 --- a/app/Resources/TeamResource.php +++ b/app/Resources/TeamResource.php @@ -117,9 +117,7 @@ public static function table(Table $table): Table ->sortable(), TextColumn::make('commander.user') ->label(__('Commander')) - ->formatStateUsing(function ($state) { - return $state->last_name.' '.$state->first_name; - }) + ->formatStateUsing(fn ($state) => $state->last_name.' '.$state->first_name) ->label(__('Commander')) ->searchable( query: function ($query, $search) { diff --git a/app/Services/Algorithm.php b/app/Services/Algorithm.php index d90b774..c1d9819 100644 --- a/app/Services/Algorithm.php +++ b/app/Services/Algorithm.php @@ -19,20 +19,19 @@ public function __construct($date = null) protected function getShiftWithTasks() { - // $startOfMonth = max($this->date->copy()->startOfMonth(), Carbon::tomorrow()); $startOfMonth = $this->date->copy()->startOfMonth(); + // $startOfMonth = max($this->date->copy()->startOfMonth(), Carbon::tomorrow()); $endOfMonth = $this->date->copy()->endOfMonth(); - return Shift::whereNull('soldier_id') + return Shift::with('task') + ->whereNull('soldier_id') ->whereHas('task', function ($query) { $query->withTrashed() ->where('kind', '!=', TaskKind::INPARALLEL->value); }) ->where(function ($query) use ($startOfMonth, $endOfMonth) { - $query->where(function ($subQuery) use ($startOfMonth, $endOfMonth) { - $subQuery->where('start_date', '<', $endOfMonth) - ->where('end_date', '>', $startOfMonth); - }); + $query->where('start_date', '<=', $endOfMonth) + ->where('start_date', '>=', $startOfMonth); }) ->get() ->map(fn (Shift $shift): ShiftService => Helpers::buildShift($shift)); @@ -54,8 +53,8 @@ protected function getSoldiersDetails() return Helpers::buildSoldier($soldier, $constraints, $shifts, $capacityHold); }) - ->shuffle() - ->toArray(); + ->filter(fn ($soldier) => $soldier->hasMaxes()) + ->shuffle(); } protected function getSoldiersShifts($soldierId, $inParallel) diff --git a/app/Services/ConcurrentTasks.php b/app/Services/ConcurrentTasks.php index 44ca079..f5878e1 100644 --- a/app/Services/ConcurrentTasks.php +++ b/app/Services/ConcurrentTasks.php @@ -50,10 +50,8 @@ protected function getShiftsWithTasks() ->where('kind', TaskKind::INPARALLEL->value); }) ->where(function ($query) use ($startOfMonth, $endOfMonth) { - $query->where(function ($subQuery) use ($startOfMonth, $endOfMonth) { - $subQuery->where('start_date', '<', $endOfMonth) - ->where('end_date', '>', $startOfMonth); - }); + $query->where('start_date', '<=', $endOfMonth) + ->where('start_date', '>=', $startOfMonth); }) ->get() ->map(fn (Shift $shift): ShiftService => Helpers::buildShift($shift)); @@ -84,8 +82,7 @@ protected function getSoldiersShifts($soldierId, $inParallel) protected function initShiftsData(): void { $groupedShifts = collect($this->shifts)->groupBy('taskType'); - $groupedShifts->each(fn ($shifts, $taskType) => $this->addShiftsDataByTask($taskType, collect($shifts)) - ); + $groupedShifts->each(fn ($shifts, $taskType) => $this->addShiftsDataByTask($taskType, collect($shifts))); } protected function addShiftsDataByTask(string $taskType, $shifts): void @@ -101,8 +98,8 @@ protected function addShiftData(ShiftService $shift, $soldiers) $potentialSoldiers = $this->getPotentialSoldiers($soldiers, $shift); $shiftData = new ShiftData( $shift, - $potentialSoldiers, - 0 + 0, + $potentialSoldiers ); $this->shiftsData->push($shiftData); } @@ -114,17 +111,10 @@ protected function getPotentialSoldiers($soldiers, ShiftService $shift) return $soldier->isAvailableByConstraints($shift->range) === Availability::YES && $soldier->isAvailableByConcurrentsShifts($shift) && $soldier->inParallelMaxData->remaining() > 0 - && $this->isAvailableByShiftsAndSpaces($soldier->shifts, $shift); + && $soldier->isAvailableByShifts($shift); }); - return $potentialSoldiers; - } - - protected function isAvailableByShiftsAndSpaces($soldierShifts, ShiftService $shift): bool - { - return ! $soldierShifts->contains(function (ShiftService $soldierShift) use ($shift): bool { - return $soldierShift->range->isConflict($shift->range) && ! collect($shift->inParalelTasks)->contains($soldierShift->taskType); - }); + return collect($potentialSoldiers)->shuffle(); } protected function assignShifts() @@ -145,10 +135,10 @@ protected function assignShift(ShiftData $shiftData) protected function tryAssignShift(SoldierService $soldier, ShiftService $shift) { - if ($soldier->isAvailableByConcurrentsShifts($shift)) { + if ($soldier->isAvailableByConcurrentsShifts($shift) && $soldier->inParallelMaxData->remaining() > 0) { $soldier->concurrentsShifts->push($shift); - $this->assignments->push(new Assignment($shift->id, $soldier->id)); $soldier->inParallelMaxData->used++; + $this->assignments->push(new Assignment($shift->id, $soldier->id)); return true; } diff --git a/app/Services/Course.php b/app/Services/Course.php index 1d638c1..0fdcaf9 100644 --- a/app/Services/Course.php +++ b/app/Services/Course.php @@ -10,11 +10,14 @@ class Course public $soldiers; + public $hasGap; + public function __construct($number, $max, $soldiers) { $this->number = $number; $this->max = $max; $this->soldiers = collect($soldiers); + $this->hasGap = false; } public function remaining($max) diff --git a/app/Services/FixedConstraints.php b/app/Services/FixedConstraints.php index 3413457..a4f6155 100644 --- a/app/Services/FixedConstraints.php +++ b/app/Services/FixedConstraints.php @@ -55,7 +55,7 @@ protected function createConstraint($constraintType, $soldierId, $startDate, $en protected function createPeriod() { $month = Carbon::now()->addMonth(); - return CarbonPeriod::between($month->copy()->startOfMonth(), $month->copy()->endOfMonth()); + return CarbonPeriod::between($month->copy()->startOfMonth(), $month->copy()->endOfMonth()); // return CarbonPeriod::between(max($month->copy()->startOfMonth(), Carbon::tomorrow()), $month->copy()->endOfMonth()); } } diff --git a/app/Services/Helpers.php b/app/Services/Helpers.php index 1a579b3..ad700fd 100644 --- a/app/Services/Helpers.php +++ b/app/Services/Helpers.php @@ -17,6 +17,7 @@ public static function buildShift(Shift $shift): ShiftService { return new ShiftService( $shift->id, + $shift->task_id, $shift->task()->withTrashed()->first()->type, $shift->start_date, $shift->end_date, @@ -42,6 +43,7 @@ public static function buildSoldier($soldier, $constraints, $shifts, array $capa { return new SoldierService( $soldier->id, + $soldier->course, new MaxData($soldier->capacity, $capacityHold['points'] ?? 0), new MaxData($soldier->max_shifts, $capacityHold['count'] ?? 0), new MaxData($soldier->max_nights, $capacityHold['sumNights'] ?? 0), @@ -67,7 +69,7 @@ public static function buildConstraints($constraints, $newRange) fn (Constraint $constraint): ConstraintService => new ConstraintService( $constraint->start_date, $constraint->end_date, - ConstraintType::getPriority()[$constraint->constraint_type->value] == 1 ? Priority::HIGH : Priority::LOW + ConstraintType::getPriority()[$constraint->constraint_type->value] == 1 ? Priority::HIGH : Priority::LOW, ) ); } @@ -110,26 +112,25 @@ public static function addShiftsSpaces($shifts) collect($shifts)->map(function (ShiftService $shift) use ($shifts, &$allSpaces) { $spaces = ($shift->kind === TaskKind::WEEKEND->value || $shift->kind === TaskKind::NIGHT->value) ? $shift->getShiftSpaces($shifts) : null; if (! empty($spaces)) { - collect($spaces)->map(fn (Range $space) => $allSpaces->push(new ShiftService(0, '', $space->start, $space->end, 0, TaskKind::REGULAR->value, []))); + collect($spaces)->map(fn (Range $space) => $allSpaces->push(new ShiftService(0, 0, '', $space->start, $space->end, 0, TaskKind::REGULAR->value, []))); } }); return $allSpaces; } - public static function getSoldiersShifts($soldierId, $newRange, $inParallel) + public static function getSoldiersShifts($soldierId, $range, $inParallel) { - return Shift::where('soldier_id', $soldierId) + return Shift::with('task') + ->where('soldier_id', $soldierId) ->whereHas('task', function ($query) use ($inParallel) { $query->withTrashed() ->when($inParallel, fn ($query) => $query->where('kind', TaskKind::INPARALLEL->value)) ->when(! $inParallel, fn ($query) => $query->where('kind', '!=', TaskKind::INPARALLEL->value)); }) - ->where(function ($query) use ($newRange) { - $query->where(function ($subQuery) use ($newRange) { - $subQuery->where('start_date', '<', $newRange->end) - ->where('end_date', '>', $newRange->start); - }); + ->where(function ($query) use ($range) { + $query->where('start_date', '<=', $range->end) + ->where('start_date', '>=', $range->start); }) ->get() ->map(fn (Shift $shift): ShiftService => self::buildShift($shift)); @@ -137,14 +138,31 @@ public static function getSoldiersShifts($soldierId, $newRange, $inParallel) public static function getConstraintBy(int $soldierId, $newRange) { - $constraint = Constraint::where('soldier_id', $soldierId) + $constraints = Constraint::where('soldier_id', $soldierId) ->get(); - return self::buildConstraints($constraint, $newRange); + return self::buildConstraints($constraints, $newRange); } public static function updateShiftTable($assignments) { - collect($assignments)->map(fn (Assignment $assignment) => Shift::where('id', $assignment->shiftId)->update(['soldier_id' => $assignment->soldierId])); + if (empty($assignments)) { + return; + } + + $chunks = array_chunk($assignments->toArray(), 80); + + foreach ($chunks as $chunk) { + $cases = []; + $ids = []; + + collect($chunk)->each(function ($assignment) use (&$ids, &$cases) { + $ids[] = $assignment->shiftId; + $cases[] = "WHEN id = {$assignment->shiftId} THEN {$assignment->soldierId}"; + }); + + Shift::whereIn('id', $ids) + ->update(['soldier_id' => \DB::raw('CASE '.implode(' ', $cases).' END')]); + } } } diff --git a/app/Services/ManualAssignment.php b/app/Services/ManualAssignment.php index 07e3327..8b9b2bc 100644 --- a/app/Services/ManualAssignment.php +++ b/app/Services/ManualAssignment.php @@ -2,14 +2,12 @@ namespace App\Services; -use App\Enums\Availability; use App\Models\Department; use App\Models\Shift; use App\Models\Soldier; use App\Models\Team; use App\Models\User; use App\Services\Soldier as SoldierService; -use Illuminate\Support\Facades\Cache; class ManualAssignment { @@ -35,7 +33,6 @@ public function getSoldiers($departmentName = null) protected function initSoldiersData($departmentName) { - $this->soldiers = Cache::remember('users', 30 * 60, fn () => User::all()); match ($this->soldierType) { 'reserves' => $this->filterReserves(), 'my_soldiers' => $this->filterMySoldiers(), @@ -47,60 +44,69 @@ protected function initSoldiersData($departmentName) protected function filterReserves() { - $this->soldiers = $this->soldiers - ->filter(function ($user) { - $soldier = $this->getSoldierBy($user->userable_id); - - return $soldier->is_reservist && $soldier->id != auth()->user()->userable_id; - }); + $this->soldiers = Soldier::whereJsonContains('qualifications', $this->shift->taskType) + ->where('is_reservist', true) + ->where('id', '!=', auth()->user()->userable_id) + ->get(); } protected function filterMySoldiers() { - $this->soldiers = $this->soldiers - ->filter(function ($user) { - $currentUserId = auth()->user()->userable_id; - $role = current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])); - $soldier = $this->getSoldierBy($user->userable_id); - - return match ($role) { - 'department-commander' => $soldier?->team?->department?->commander_id == $currentUserId - && $soldier?->id != $currentUserId, - 'team-commander' => $soldier?->team?->commander_id == $currentUserId - && $soldier?->id != $currentUserId - }; - }); + $currentUserId = auth()->user()->userable_id; + $role = current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])); + $members = collect(); + + switch ($role) { + case 'department-commander': + $department = Department::whereHas('commander', function ($query) use ($currentUserId) { + $query->where('id', $currentUserId); + })->first(); + + $memberIds = $department?->teams->flatMap(fn (Team $team) => $team->members->pluck('id')) ?? collect(); + $commanderIds = $department?->teams->pluck('commander_id') ?? collect(); + + $members = $memberIds->merge($commanderIds)->unique(); + break; + case 'team-commander': + $members = Team::whereHas('commander', function ($query) use ($currentUserId) { + $query->where('id', $currentUserId); + })->first()?->members->pluck('id') ?? collect([]); + break; + } + + $this->soldiers = Soldier::whereJsonContains('qualifications', $this->shift->taskType) + ->where('is_reservist', false) + ->where('id', '!=', $currentUserId) + ->whereIn('id', $members) + ->get(); } protected function filterDepartment($departmentName) { - $this->soldiers = $this->soldiers - ->filter(function ($user) use ($departmentName) { - $soldier = Soldier::where('id', '=', $user->userable_id)->first(); - $department = Department::where('name', $departmentName)->first(); - - return $soldier?->team?->department?->name == $departmentName - || collect($department->teams)->filter(fn (Team $team): bool => $team->commander_id === $soldier->id)->isNotEmpty() - || $soldier->id == $department->commander_id; - }); + $department = Department::where('name', $departmentName)->first(); + $this->soldiers = Soldier::whereJsonContains('qualifications', $this->shift->taskType) + ->where('is_reservist', false) + ->where('id', '!=', auth()->user()->userable_id) + ->where(function (Soldier $query) use ($department) { + $query->whereIn('id', $department?->teams->flatMap(fn (Team $team) => $team->members->pluck('id')) ?? collect()) + ->orWhereIn('id', $department?->teams->pluck('commander_id') ?? collect()) + ->orWhere('id', $department?->commander_id); + })->get(); } protected function filterMatching() { - $this->soldiers = $this->soldiers - ->filter(function ($user) { - $soldier = $this->getSoldierBy($user->userable_id); - - return ! $soldier->is_reservist && $soldier->id != auth()->user()->userable_id; - }); + $this->soldiers = Soldier::whereJsonContains('qualifications', $this->shift->taskType) + ->where('is_reservist', false) + ->where('id', '!=', auth()->user()->userable_id) + ->get(); } protected function getSoldiersDetails() { $this->soldiers = $this->soldiers ->map( - function (User $user) { - $soldier = $this->getSoldierBy($user->userable_id); + function (Soldier $soldier) { $constraints = $this->getConstraints($soldier); $soldiersShifts = $this->getSoldiersShifts($soldier->id, false); @@ -115,11 +121,6 @@ function (User $user) { ); } - protected function getSoldierBy($userable_id) - { - return Soldier::where('id', $userable_id)->first(); - } - public function amIAvailable(): bool { $me = Soldier::find(auth()->user()->userable_id); @@ -130,13 +131,12 @@ public function amIAvailable(): bool $capacityHold = Helpers::capacityHold($myShifts); - $soldier = Helpers::buildSoldier($me, $constraints, $myShifts, $capacityHold); + $concurrentsShifts = $this->getSoldiersShifts($me->id, true); - return $soldier->isQualified($this->shift->taskType) - && $soldier->isAvailableByMaxes($this->shift) - && $soldier->isAvailableByConstraints($this->shift->range) != Availability::NO - && $soldier->isAvailableByShifts($this->shift) - && $soldier->isAvailableBySpaces($this->shift->getShiftSpaces($soldier->shifts)); + $soldier = Helpers::buildSoldier($me, $constraints, $myShifts, $capacityHold, $concurrentsShifts); + + return $soldier->isAbleTake($this->shift, true) + && $soldier->isAvailableByConcurrentsShifts($this->shift); } protected function getConstraints(Soldier $soldier) @@ -151,13 +151,7 @@ protected function getSoldiersShifts($soldierId, $inParallel) protected function getAvailableSoldiers() { - $availableSoldiers = $this->soldiers->filter( - fn (SoldierService $soldier) => $soldier->isQualified($this->shift->taskType) - && $soldier->isAvailableByMaxes($this->shift) - && $soldier->isAvailableByConstraints($this->shift->range) != Availability::NO - && $soldier->isAvailableByShifts($this->shift) - && $soldier->isAvailableBySpaces($this->shift->getShiftSpaces($soldier->shifts)) - ); + $availableSoldiers = $this->soldiers->filter(fn (SoldierService $soldier) => $soldier->isAbleTake($this->shift, true)); $soldiersWithConcurrentsShifts = collect([]); $availableSoldiers->map(function (SoldierService $soldier) use ($soldiersWithConcurrentsShifts) { diff --git a/app/Services/MaxData.php b/app/Services/MaxData.php index f3adfee..8f7be43 100644 --- a/app/Services/MaxData.php +++ b/app/Services/MaxData.php @@ -18,30 +18,4 @@ public function remaining(): float { return $this->max - $this->used; } - - protected function relativeLoad(): float - { - if ($this->max == 0) { - return 0; - } - - return $this->used / $this->max; - } - - protected function singleValue(): float - { - if ($this->max == 0) { - return 0; - } - - return 1 / $this->max; - } - - public function calculatedRelativeLoad(): float - { - $relativeLoad = $this->relativeLoad(); - $pointValue = $this->singleValue(); - - return ($relativeLoad * 4 + $pointValue) / 5; - } } diff --git a/app/Services/PointedSchedule.php b/app/Services/PointedSchedule.php index 3d76b29..fd91c05 100644 --- a/app/Services/PointedSchedule.php +++ b/app/Services/PointedSchedule.php @@ -4,7 +4,6 @@ use App\Enums\Availability; use App\Enums\DaysInWeek; -use App\Enums\RotationResult; use App\Enums\TaskKind; class PointedSchedule @@ -307,50 +306,50 @@ protected function assign() { $this->courses ->filter(fn (Course $course) => $course->max > 0) - ->map(function (Course $course) { + ->each(function (Course $course) { + if (collect($this->shiftsData)->contains(fn ($shifts): bool => collect($shifts)->count() > 0) && $course->max >= 2) { + $this->assignShiftsForCourse($course, true); + } + }) + ->each(function (Course $course) { if (collect($this->shiftsData)->contains(fn ($shifts): bool => collect($shifts)->count() > 0)) { - $this->assignShiftsForCourse($course); + $this->assignShiftsForCourse($course, false); } }); } - protected function assignShiftsForCourse(Course $course) + protected function assignShiftsForCourse(Course $course, $isSingleRotation) { $rotationSize = $this->maximalRotationSize; - while ($course->remaining('pointsMaxData') > 0 && $rotationSize >= $this->minimalRotationSize) { - $rotationResult = $this->rotation($course->soldiers, $rotationSize); - match ($rotationResult) { - RotationResult::SUCCESS => [ - $this->saveRotationAssigments(), - ], - RotationResult::SUCCESS_WITH_GAP => [ - $this->saveRotationAssigments(), - $rotationSize = 0, - ], - RotationResult::FAILED => [ - $this->clearRotationAsssigments(), - $rotationSize /= 2, - ], - }; + while (! $course->hasGap && $course->remaining('pointsMaxData') > 0 && $rotationSize >= $this->minimalRotationSize) { + $rotationResult = $this->rotation($course, $rotationSize); + if ($rotationResult) { + $this->saveRotationAssigments(); + } else { + $this->clearRotationAsssigments(); + $rotationSize /= 2; + } + if ($isSingleRotation) { + return; + } } } - protected function rotation($soldiers, $rotationSize): RotationResult + protected function rotation($course, $rotationSize) { - $isGapExists = false; - foreach ($soldiers as $soldier) { + foreach ($course->soldiers as $soldier) { $assignedPoints = $this->assignRotationShiftsToSoldier($soldier, $rotationSize); $gap = $rotationSize - $assignedPoints; if ($gap > $this->allowedGap) { - return RotationResult::FAILED; + return false; } if ($gap > 0) { - $isGapExists = true; + $course->hasGap = true; } } - return $isGapExists ? RotationResult::SUCCESS_WITH_GAP : RotationResult::SUCCESS; + return true; } protected function assignRotationShiftsToSoldier(Soldier $soldier, float $rotationSize) diff --git a/app/Services/Range.php b/app/Services/Range.php index c6ff40b..18ffcce 100644 --- a/app/Services/Range.php +++ b/app/Services/Range.php @@ -42,7 +42,7 @@ public function isRangeInclude(DaysInWeek $dayInWeek): bool $endDayIndex = $this->end->dayOfWeek; $checkDayIndex = date('N', strtotime($dayInWeek->value)); if ($startDayIndex <= $endDayIndex) { - return $this->start->diffInDays($this->end) > 5 || ($checkDayIndex >= $startDayIndex && $checkDayIndex <= $endDayIndex); + return $this->start->copy()->diffInDays($this->end->copy()) > 5 || ($checkDayIndex >= $startDayIndex && $checkDayIndex <= $endDayIndex); } return $checkDayIndex >= $startDayIndex || $checkDayIndex <= $endDayIndex; @@ -50,23 +50,36 @@ public function isRangeInclude(DaysInWeek $dayInWeek): bool public function getDayAfterWeekend(): Range { - $nextDayAfterWeekend = $this->end->next(DaysInWeek::SUNDAY->value)->setTime(8, 0); + $nextDayAfterWeekend = $this->end->englishDayOfWeek == DaysInWeek::SUNDAY->value ? $this->end->copy() : $this->end->copy()->next(DaysInWeek::SUNDAY->value)->setTime(8, 0); return new Range($nextDayAfterWeekend, $nextDayAfterWeekend->copy()->addDay()); } public function getNightSpaces() { - return [$this->getDayBeforeNight(), $this->getDayAfterNight()]; - } + $startHour = $this->start->hour; + $endTomorrow = $this->end->copy()->addDay(); + if ($startHour >= '20' && $startHour <= '23') { + return [ + new Range(Carbon::create($this->start->year, $this->start->month, $this->start->day, 00, 00), $this->start), + new Range($this->end, Carbon::create($endTomorrow->year, $endTomorrow->month, $endTomorrow->day, 7, 59)), + ]; + } + if ($startHour >= '0' && $startHour <= '1') { + $startYesterday = $this->start->copy()->subDay(); - public function getDayBeforeNight(): Range - { - return new Range($this->start->copy()->subHours(12), $this->start); + return [ + new Range(Carbon::create($startYesterday->year, $startYesterday->month, $startYesterday->day, 00, 00), $this->start), + new Range($this->end, Carbon::create($endTomorrow->year, $endTomorrow->month, $endTomorrow->day, 7, 59)), + ]; + } } - public function getDayAfterNight(): Range + public function getNightInWeekendSpaces() { - return new Range($this->end, $this->end->copy()->addHours(12)); + return [ + new Range($this->start->copy()->setHour(8)->setMinutes(30), $this->start->copy()), + new Range($this->end->copy(), $this->end->copy()->setHour(19)->setMinutes(59)), + ]; } } diff --git a/app/Services/RecurringEvents.php b/app/Services/RecurringEvents.php index 0e275fb..28cb863 100644 --- a/app/Services/RecurringEvents.php +++ b/app/Services/RecurringEvents.php @@ -114,9 +114,11 @@ protected function convertNumbersToDatesInMonth($dayNumbers) protected function createPeriod() { return $this->task->recurring['type'] == 'Daily range' ? - CarbonPeriod::between(max($this->task['recurring']['start_date'], Carbon::tomorrow()), $this->task['recurring']['end_date']) : - CarbonPeriod::between(max($this->month->copy()->startOfMonth(), Carbon::tomorrow()), $this->month->copy()->endOfMonth()); - } + // CarbonPeriod::between(max($this->task['recurring']['start_date'], Carbon::tomorrow()), $this->task['recurring']['end_date']) : + // CarbonPeriod::between(max($this->month->copy()->startOfMonth(), Carbon::tomorrow()), $this->month->copy()->endOfMonth()); + CarbonPeriod::between($this->task['recurring']['start_date'], $this->task['recurring']['end_date']) : + CarbonPeriod::between($this->month->copy()->startOfMonth(), $this->month->copy()->endOfMonth()); + } protected function createShifts(array $dates) { diff --git a/app/Services/Schedule.php b/app/Services/Schedule.php index b1aa5bb..0e7e33a 100644 --- a/app/Services/Schedule.php +++ b/app/Services/Schedule.php @@ -2,7 +2,6 @@ namespace App\Services; -use App\Enums\Availability; use App\Enums\TaskKind; class Schedule @@ -11,262 +10,49 @@ class Schedule public $soldiers; - public $shiftsData; - - public $soldiersDict; - public $assignments; - public $SHIFT_DUMBBELLS; - - public $SOLDIER_DUMBBELLS; - public function __construct($shifts, $soldiers) { - $this->shifts = collect($shifts); $this->soldiers = collect($soldiers); - $this->shiftsData = collect([]); - $this->soldiersDict = collect([]); + $this->shifts = collect($shifts); $this->assignments = collect([]); - $this->SHIFT_DUMBBELLS = collect([ - 'POINTS_RATIO' => 0.29, - 'SHIFTS_RATIO' => 0.39, - 'WEEKENDS_RATIO' => 0.04, - 'NIGHTS_RATIO' => 0.04, - 'SHIFT_AVAILABILITY' => 0.23, - 'BLOCK_POINTS' => 0.05, - ]); - $this->SOLDIER_DUMBBELLS = collect([ - 'LOW_CONSTRAINT' => 0.45, - 'POINTS_RELATIVE_LOAD' => 0.4, - 'SHIFTS_RELATIVE_LOAD' => 0.08, - 'NIGHT_RELATIVE_LOAD' => 0.01, - 'WEEKEND_RELATIVE_LOAD' => 0.01, - 'MULTITASKING_VALUE' => 0.05, - ]); - } - - public function schedule(): void - { - $this->initShiftsData(); - $this->initSoldiersData(); - $this->assignShifts(); - Helpers::updateShiftTable($this->assignments); } - protected function initShiftsData(): void + public function schedule() { - $groupedShifts = collect($this->shifts)->groupBy('taskType'); - $groupedShifts->each(function ($shifts, $taskType) { - $this->addShiftsDataByTask($taskType, collect($shifts)); - }); + $this->assignPointedShifts(); + $this->assignNotPointedShifts(); + $this->saveAssignments(); } - protected function addShiftsDataByTask(string $taskType, $shifts): void + protected function assignPointedShifts() { - $soldiers = $this->soldiers->filter(function (Soldier $soldier) use ($taskType): bool { - return $soldier->isQualified($taskType); - }); - $taskWeight = $this->getTaskWeight($shifts, $soldiers); - $shifts->map(fn ($shift) => $this->addShiftData($shift, $soldiers, $taskWeight)); + $pointedShifts = $this->shifts->filter(fn (Shift $shift): bool => $shift->points > 0); + $soldiers = $this->soldiers->filter(fn (Soldier $soldier) => $soldier->pointsMaxData->remaining() > 0); + $pointedSchedule = new PointedSchedule($soldiers, $pointedShifts); + $assignments = $pointedSchedule->schedule(); + $this->assignments->push(...$assignments); } - protected function getTaskWeight($shifts, $soldiers): array + protected function assignNotPointedShifts() { - $requiredPoints = collect($shifts)->sum('points'); - $requiredNights = collect($shifts)->filter(fn (Shift $shift) => ($shift->kind === TaskKind::NIGHT->value))->count(); - $requiredWeekends = collect($shifts) - ->filter(fn (Shift $shift) => ($shift->kind === TaskKind::WEEKEND->value)) - ->sum(fn (Shift $shift) => $shift->points); - $requiredShifts = count($shifts); - - $availablePoints = collect($soldiers)->sum(fn (Soldier $soldier) => $soldier->pointsMaxData->remaining()); - - $availableNights = collect($soldiers)->sum(fn (Soldier $soldier) => $soldier->nightsMaxData->remaining()); - - $availableWeekends = collect($soldiers)->sum(fn (Soldier $soldier) => $soldier->weekendsMaxData->remaining()); - - $availableShifts = collect($soldiers)->sum(fn (Soldier $soldier) => $soldier->shiftsMaxData->remaining()); - - $weight = collect([ - 'POINTS_RATIO' => $this->getRatio($requiredPoints, $availablePoints), - 'NIGHTS_RATIO' => $this->getRatio($requiredNights, $availableNights), - 'WEEKENDS_RATIO' => $this->getRatio($requiredWeekends, $availableWeekends), - 'SHIFTS_RATIO' => $this->getRatio($requiredShifts, $availableShifts), + $taskKinds = collect([ + TaskKind::NIGHT->value => 1, + TaskKind::REGULAR->value => 3, + TaskKind::ALERT->value => 1, ]); - - $weight->each(function ($value, $key) use (&$weight) { - $weight[$key] = $value * $this->SHIFT_DUMBBELLS[$key]; - }); - - return $weight->all(); - } - - protected function addShiftData(Shift $shift, $soldiers, $taskWeight) - { - $potentialSoldiers = $this->getPotentialSoldiers($soldiers, $shift->range); - $shiftData = new ShiftData( - $shift, - $potentialSoldiers, - $this->getShiftWeight( - $taskWeight, - $shift, - $soldiers->count(), - $potentialSoldiers->count() - ) - ); - $this->shiftsData->push($shiftData); - } - - protected function getRatio(float $required, float $available): float - { - return $available == 0 ? 0 : (float) $this->maximumOne((float) $required / $available); - } - - protected function maximumOne(float $number): float - { - return $number > 1 ? 1 : $number; - } - - protected function getPotentialSoldiers($soldiers, Range $range) - { - $potentialSoldiers = $soldiers->filter(function (Soldier $soldier) use ($range) { - return $soldier->isAvailableByConstraints($range) != Availability::NO; - })->map(function (Soldier $soldier) use ($range): PotentialSoldierData { - $availability = $soldier->isAvailableByConstraints($range); - - return new PotentialSoldierData( - $soldier->id, - $availability == Availability::BETTER_NOT - ); + $taskKinds->each(function ($gap, $taskKind) { + $shifts = $this->shifts->filter(fn (Shift $shift): bool => $shift->kind == $taskKind && + $shift->points == 0); + $notPointedSchedule = new NotPointedSchedule($taskKind, $this->soldiers, $shifts, $gap); + $assignments = $notPointedSchedule->schedule(); + $this->assignments->push(...$assignments); }); - - return $potentialSoldiers; } - protected function getShiftWeight($taskWeight, Shift $shift, int $soldiersCount, int $availableSoldiersCount): float + protected function saveAssignments() { - $weight = $taskWeight['SHIFTS_RATIO'] + $shift->points > 0 ? $taskWeight['POINTS_RATIO'] : 0; - - match ($shift->kind) { - TaskKind::WEEKEND->value => $weight += $taskWeight['WEEKENDS_RATIO'], - TaskKind::NIGHT->value => $weight += $taskWeight['NIGHTS_RATIO'], - default => null - }; - - $weight += $this->getShiftAvailabilityRatio($soldiersCount, $availableSoldiersCount) - * $this->SHIFT_DUMBBELLS['SHIFT_AVAILABILITY']; - - $weight += $this->getShiftBlockPoints($shift->points) * $this->SHIFT_DUMBBELLS['BLOCK_POINTS']; - - return $weight; - } - - protected function getShiftAvailabilityRatio(int $soldiersCount, int $availableSoldiers): float - { - if ($availableSoldiers == 0) { - return 0; - } - - return (float) ($soldiersCount - $availableSoldiers) / $soldiersCount; - } - - protected function getShiftBlockPoints(float $points): float - { - if ($points == 0) { - return 0; - } - - return (float) $points / 3; - } - - protected function initSoldiersData(): void - { - $this->soldiers->map(fn (Soldier $soldier) => $this->soldiersDict->put($soldier->id, $soldier)); - } - - protected function assignShifts() - { - $sortedShifts = $this->getSortedShiftsList(); - collect($sortedShifts)->map(fn (ShiftData $shift) => $this->assignShift($shift)); - } - - protected function getSortedShiftsList() - { - return $this->shiftsData->sortByDesc('weight'); - } - - protected function assignShift(ShiftData $shiftData) - { - $soldiers = $this->getPotentialSoldiersData($shiftData); - foreach ($soldiers as $soldier) { - $success = $this->tryAssign($soldier, $shiftData->shift); - if ($success) { - return; - } - } - } - - protected function getPotentialSoldiersData(ShiftData $shiftData) - { - $soldiers = collect([]); - collect($shiftData->potentialSoldiers)->map(function (PotentialSoldierData $potentialSoldierData) use (&$soldiers, $shiftData) { - $soldiers->push($this->getSoldierAndWeight($potentialSoldierData, $shiftData->shift)); - }); - - return $this->getSortedPotentialSoldiers($soldiers); - } - - protected function getSoldierAndWeight(PotentialSoldierData $potentialSoldierData, Shift $shift) - { - $soldier = $this->soldiersDict[$potentialSoldierData->soldierId]; - $weightDict = [ - 'LOW_CONSTRAINT' => $potentialSoldierData->isLowConstraint ? 1 : 0, - 'POINTS_RELATIVE_LOAD' => $shift->points > 0 ? $soldier->pointsMaxData->calculatedRelativeLoad() : 0, - 'SHIFTS_RELATIVE_LOAD' => $soldier->shiftsMaxData->calculatedRelativeLoad(), - 'NIGHT_RELATIVE_LOAD' => $shift->kind !== TaskKind::NIGHT->value ? 0 : $soldier->nightsMaxData->calculatedRelativeLoad(), - 'WEEKEND_RELATIVE_LOAD' => $shift->kind !== TaskKind::WEEKEND->value ? 0 : $soldier->weekendsMaxData->calculatedRelativeLoad(), - 'MULTITASKING_VALUE' => $this->getMultitaskingValue( - $soldier->qualifications->count() - ), - ]; - $weight = $this->getTotalWeight($weightDict); - - return [$soldier, $weight]; - } - - protected function getMultitaskingValue(int $qualificationsNumber): float - { - return (float) (1 - ((float) (1 / $qualificationsNumber))); - } - - protected function getTotalWeight($weightData): float - { - $weight = 0; - collect($weightData)->map(function ($value, $key) use (&$weight) { - $weight += (float) ($value * $this->SOLDIER_DUMBBELLS[$key]); - }); - - return $weight; - } - - protected function getSortedPotentialSoldiers($soldiers) - { - $sortedSoldiers = $soldiers->sortBy(fn ($item) => $item[1]); - - return $sortedSoldiers->map(fn ($soldier) => $soldier[0]); - } - - protected function tryAssign(Soldier $soldier, Shift $shift): bool - { - $spaces = $shift->getShiftSpaces($soldier->shifts); - if ($soldier->isAbleTake($shift, $spaces)) { - $soldier->assign($shift, $spaces); - $this->assignments->push(new Assignment($shift->id, $soldier->id)); - - return true; - } - - return false; + Helpers::updateShiftTable($this->assignments); } } diff --git a/app/Services/Shift.php b/app/Services/Shift.php index 1e41652..17f0c69 100644 --- a/app/Services/Shift.php +++ b/app/Services/Shift.php @@ -9,6 +9,8 @@ class Shift { public $id; + public $taskId; + public $taskType; public $range; @@ -17,16 +19,28 @@ class Shift public $kind; + public $isAssigned; + public $inParalelTasks; - public function __construct($id, string $taskType, $start, $end, float $points, $kind, $inParalelTasks = []) + public $isAttached; + + public function __construct($id, int $taskId, string $taskType, $start, $end, float $points, $kind, $inParalelTasks = []) { $this->id = $id; + $this->taskId = $taskId; $this->taskType = $taskType; $this->range = new Range($start, $end); $this->points = $points; $this->kind = $kind; + $this->isAssigned = false; $this->inParalelTasks = $inParalelTasks; + $this->isAttached = false; + } + + public function isAssigned(): bool + { + return $this->isAssigned; } public function getShiftSpaces($shifts) @@ -40,7 +54,23 @@ public function getShiftSpaces($shifts) protected function getWeekendSpaces($shifts) { - return $this->isFullWeekend($shifts) ? [$this->range->getDayAfterWeekend()] : null; + $spaces = collect([]); + if ($this->isNight()) { + $spaces->push(...$this->range->getNightInWeekendSpaces()); + } + if ($this->isFullWeekend($shifts)) { + $spaces->push($this->range->getDayAfterWeekend()); + } + + return $spaces?->toArray(); + } + + protected function isNight() + { + return ($this->range->start->hour >= 19 + && $this->range->start->hour < 23) && + ($this->range->end->hour > 6 + && $this->range->end->hour < 9); } protected function isFullWeekend($shifts) @@ -67,7 +97,7 @@ protected function isShiftInclude(Range $range, DaysInWeek $dayInWeek): bool protected function isAttached($shifts, $range, DaysInWeek $dayInWeek): bool { - $expectedDate = $dayInWeek == DaysInWeek::FRIDAY ? $range->start->subDay()->startOfDay() : $range->end->addDay()->startOfDay(); + $expectedDate = $dayInWeek == DaysInWeek::FRIDAY ? $range->start->copy()->subDay()->startOfDay() : $range->end->copy()->addDay()->startOfDay(); return $shifts ? collect($shifts)->contains( function ($shift) use ($expectedDate): bool { diff --git a/app/Services/ShiftData.php b/app/Services/ShiftData.php index 74606ea..82afd0a 100644 --- a/app/Services/ShiftData.php +++ b/app/Services/ShiftData.php @@ -6,14 +6,14 @@ class ShiftData { public $shift; - public $potentialSoldiers; - public $weight; - public function __construct(Shift $shift, $potentialSoldiers, float $weight) + public $potentialSoldiers; + + public function __construct(Shift $shift, float $weight, $potentialSoldiers = []) { $this->shift = $shift; - $this->potentialSoldiers = collect($potentialSoldiers); $this->weight = $weight; + $this->potentialSoldiers = collect($potentialSoldiers); } } diff --git a/app/Services/Soldier.php b/app/Services/Soldier.php index cb3ee02..f9c68df 100644 --- a/app/Services/Soldier.php +++ b/app/Services/Soldier.php @@ -10,6 +10,8 @@ class Soldier { public $id; + public $course; + public $pointsMaxData; public $shiftsMaxData; @@ -30,9 +32,10 @@ class Soldier public $concurrentsShifts; - public function __construct($id, MaxData $maxPoints, MaxData $maxShifts, MaxData $maxNights, MaxData $maxWeekends, MaxData $alertsMaxData, MaxData $inParallelMaxData, $qualifications, $constraints, $shifts = [], $concurrentsShifts = []) + public function __construct($id, $course, MaxData $maxPoints, MaxData $maxShifts, MaxData $maxNights, MaxData $maxWeekends, MaxData $alertsMaxData, MaxData $inParallelMaxData, $qualifications, $constraints, $shifts = [], $concurrentsShifts = []) { $this->id = $id; + $this->course = $course; $this->pointsMaxData = $maxPoints; $this->shiftsMaxData = $maxShifts; $this->nightsMaxData = $maxNights; @@ -45,48 +48,64 @@ public function __construct($id, MaxData $maxPoints, MaxData $maxShifts, MaxData $this->concurrentsShifts = collect($concurrentsShifts); } + public function hasMaxes(): bool + { + return ! ( + $this->shiftsMaxData->max === 0 && + $this->nightsMaxData->max === 0 && + $this->weekendsMaxData->max === 0 && + $this->alertsMaxData->max === 0 + ); + } + public function isQualified(string $taskType): bool { return $this->qualifications->contains($taskType); } - public function isAbleTake(Shift $shift, $spaces): bool + public function isAbleTake(Shift $shift, $ignoreLowConstraint): bool { - return $this->isAvailableByMaxes($shift) + $spaces = $shift->getShiftSpaces($this->shifts); + $availability = $this->isAvailableByConstraints($shift->range); + $isAvailableByConstraint = $ignoreLowConstraint ? $availability != Availability::NO : $availability == Availability::YES; + + return $this->isQualified($shift->taskType) + && $this->isAvailableByMaxes($shift) && $this->isAvailableByShifts($shift) - && $this->isAvailableBySpaces($spaces); + && $this->isAvailableBySpaces($spaces) + && $isAvailableByConstraint; } public function isAvailableByMaxes(Shift $shift): bool { - if ( - ($shift->kind === TaskKind::WEEKEND->value && $this->weekendsMaxData->remaining() < $shift->points) - || ($shift->kind === TaskKind::NIGHT->value && $this->nightsMaxData->remaining() < 1) - || ($shift->kind === TaskKind::ALERT->value && $this->alertsMaxData->remaining() < 1) - || ($shift->kind === TaskKind::INPARALLEL->value && $this->inParallelMaxData->remaining() < 1) - || $this->pointsMaxData->remaining() < $shift->points - || $this->shiftsMaxData->remaining() < 1 - ) { + if ($this->pointsMaxData->remaining() < $shift->points) { return false; } - return true; + return match ($shift->kind) { + TaskKind::WEEKEND->value => $this->weekendsMaxData->remaining() >= $shift->points, + TaskKind::NIGHT->value => $this->nightsMaxData->remaining() > 0 && $this->shiftsMaxData->remaining() > 0, + TaskKind::INPARALLEL->value => $this->inParallelMaxData->remaining() > 0, + TaskKind::ALERT->value => $this->alertsMaxData->remaining() > 0, + TaskKind::REGULAR->value => $this->shiftsMaxData->remaining() > 0, + }; } public function isAvailableByShifts(Shift $shift): bool { - return ! $this->shifts->contains(function (Shift $soldierShift) use ($shift): bool { - return $soldierShift->range->isConflict($shift->range) && ! collect($shift->inParalelTasks)->contains($shift->taskType); - }); + return ! $this->shifts->contains(fn (Shift $soldierShift) => $soldierShift->range->isConflict($shift->range) + && (! collect($shift->inParalelTasks)->contains($soldierShift->taskType)) + ); } public function isAvailableBySpaces($spaces): bool { if ($spaces) { foreach ($spaces as $space) { - return ! $this->shifts->contains(function ($shift) use ($space) { - return $shift->range->isConflict($space); - }); + return ! $this->shifts->contains(fn (Shift $shift) => $shift->id != 0 && + $shift->range->isConflict($space) + ) + && ! $this->concurrentsShifts->contains(fn (Shift $concurrentsShift) => $concurrentsShift->range->isConflict($space)); } } @@ -95,9 +114,9 @@ public function isAvailableBySpaces($spaces): bool public function isAvailableByConcurrentsShifts(Shift $shift) { - return ! $this->concurrentsShifts->contains(function (Shift $concurrentsShift) use ($shift): bool { - return $concurrentsShift->range->isConflict($shift->range) && ! collect($concurrentsShift->inParalelTasks)->contains($shift->taskType); - }); + return ! $this->concurrentsShifts->contains(fn (Shift $concurrentsShift) => $concurrentsShift->range->isConflict($shift->range) && + ! (collect($concurrentsShift->inParalelTasks)->contains($shift->taskType) + || collect($shift->inParalelTasks)->contains($concurrentsShift->taskType))); } public function isAvailableByConstraints(Range $range): Availability @@ -126,7 +145,10 @@ public function assign(Shift $shift, $spaces): void $this->pointsMaxData->used += $shift->points; match ($shift->kind) { TaskKind::WEEKEND->value => $this->weekendsMaxData->used += $shift->points, - TaskKind::NIGHT->value => $this->updateNightAndShifts(), + TaskKind::NIGHT->value => [ + $this->nightsMaxData->used += 1, + $this->shiftsMaxData->used += 1, + ], TaskKind::ALERT->value => $this->alertsMaxData->used += 1, TaskKind::INPARALLEL->value => $this->inParallelMaxData->used += 1, TaskKind::REGULAR->value => $this->shiftsMaxData->used += 1, @@ -135,12 +157,30 @@ public function assign(Shift $shift, $spaces): void protected function addSpaces($spaces) { - collect($spaces)->map(fn ($space) => $this->shifts->push(new Shift(0, '', $space->start, $space->end, 0, TaskKind::REGULAR->value, []))); + collect($spaces)->map(fn ($space) => $this->shifts->push(new Shift(0, 0, '', $space->start, $space->end, 0, TaskKind::REGULAR->value, []))); + } + + public function unassign(Shift $shift, $spaces) + { + $this->shifts = $this->shifts->filter(fn (Shift $existShift) => $shift->id !== $existShift->id); + $this->removeSpaces($spaces); + $this->pointsMaxData->used -= $shift->points; + match ($shift->kind) { + TaskKind::WEEKEND->value => $this->weekendsMaxData->used -= $shift->points, + TaskKind::NIGHT->value => [ + $this->nightsMaxData->used -= 1, + $this->shiftsMaxData->used -= 1, + ], + TaskKind::ALERT->value => $this->alertsMaxData->used -= 1, + TaskKind::INPARALLEL->value => $this->inParallelMaxData->used -= 1, + TaskKind::REGULAR->value => $this->shiftsMaxData->used -= 1, + }; } - protected function updateNightAndShifts() + protected function removeSpaces($spaces) { - $this->nightsMaxData->used += 1; - $this->shiftsMaxData->used += 1; + collect($spaces)->map(function ($space) { + $this->shifts = $this->shifts->filter(fn (Shift $existSpace) => $space->start !== $existSpace->range->start && $space->end !== $existSpace->range->end); + }); } } From b8bf5ea0af3aeeddeb7776b72d79fec5209643b3 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 9 Jul 2025 15:22:11 +0300 Subject: [PATCH 203/259] versin 2 algorithm --- .github/workflows/php-build-and-deploy.yml | 2 +- .../ChartResource/Widgets/ChartFilter.php | 16 ++++++---------- app/Services/ConcurrentTasks.php | 3 +-- app/Services/FixedConstraints.php | 4 ++-- app/Services/RecurringEvents.php | 8 +++----- 5 files changed, 13 insertions(+), 20 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index ba48c69..902cdf1 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_28 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_29 flavor: | latest=false tags: | diff --git a/app/Resources/ChartResource/Widgets/ChartFilter.php b/app/Resources/ChartResource/Widgets/ChartFilter.php index c1292d0..204b0a5 100644 --- a/app/Resources/ChartResource/Widgets/ChartFilter.php +++ b/app/Resources/ChartResource/Widgets/ChartFilter.php @@ -164,11 +164,9 @@ protected function runAlgorithm($form) protected function resetShifts($form) { - $startDate = - // (Carbon::now()->format('m') == Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->format('m')) - // ? Carbon::now()->addDay()->format('Y-m-d') - // : - Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->startOfMonth()->format('Y-m-d'); + $startDate = (Carbon::now()->format('m') == Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->format('m')) + ? Carbon::now()->addDay()->format('Y-m-d') + : Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->startOfMonth()->format('Y-m-d'); Shift::whereNotNull('soldier_id') ->whereBetween('start_date', [$startDate, (Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->endOfMonth()->addDay())->format('Y-m-d')]) ->update(['soldier_id' => null]); @@ -176,11 +174,9 @@ protected function resetShifts($form) protected function deleteShifts($form) { - $startDate = - // (Carbon::now()->format('m') == Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->format('m')) - // ? Carbon::now()->addDay()->format('Y-m-d') - // : - Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->startOfMonth()->format('Y-m-d'); + $startDate = (Carbon::now()->format('m') == Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->format('m')) + ? Carbon::now()->addDay()->format('Y-m-d') + : Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->startOfMonth()->format('Y-m-d'); Shift::whereBetween('start_date', [$startDate, (Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->endOfMonth()->addDay())->format('Y-m-d')]) ->delete(); } diff --git a/app/Services/ConcurrentTasks.php b/app/Services/ConcurrentTasks.php index f5878e1..5a7acb2 100644 --- a/app/Services/ConcurrentTasks.php +++ b/app/Services/ConcurrentTasks.php @@ -40,8 +40,7 @@ public function run() protected function getShiftsWithTasks() { - // $startOfMonth = max($this->date->copy()->startOfMonth(), Carbon::tomorrow()); - $startOfMonth = $this->date->copy()->startOfMonth(); + $startOfMonth = max($this->date->copy()->startOfMonth(), Carbon::tomorrow()); $endOfMonth = $this->date->copy()->endOfMonth(); return Shift::whereNull('soldier_id') diff --git a/app/Services/FixedConstraints.php b/app/Services/FixedConstraints.php index a4f6155..41f0a8e 100644 --- a/app/Services/FixedConstraints.php +++ b/app/Services/FixedConstraints.php @@ -55,7 +55,7 @@ protected function createConstraint($constraintType, $soldierId, $startDate, $en protected function createPeriod() { $month = Carbon::now()->addMonth(); - return CarbonPeriod::between($month->copy()->startOfMonth(), $month->copy()->endOfMonth()); - // return CarbonPeriod::between(max($month->copy()->startOfMonth(), Carbon::tomorrow()), $month->copy()->endOfMonth()); + + return CarbonPeriod::between(max($month->copy()->startOfMonth(), Carbon::tomorrow()), $month->copy()->endOfMonth()); } } diff --git a/app/Services/RecurringEvents.php b/app/Services/RecurringEvents.php index 28cb863..0e275fb 100644 --- a/app/Services/RecurringEvents.php +++ b/app/Services/RecurringEvents.php @@ -114,11 +114,9 @@ protected function convertNumbersToDatesInMonth($dayNumbers) protected function createPeriod() { return $this->task->recurring['type'] == 'Daily range' ? - // CarbonPeriod::between(max($this->task['recurring']['start_date'], Carbon::tomorrow()), $this->task['recurring']['end_date']) : - // CarbonPeriod::between(max($this->month->copy()->startOfMonth(), Carbon::tomorrow()), $this->month->copy()->endOfMonth()); - CarbonPeriod::between($this->task['recurring']['start_date'], $this->task['recurring']['end_date']) : - CarbonPeriod::between($this->month->copy()->startOfMonth(), $this->month->copy()->endOfMonth()); - } + CarbonPeriod::between(max($this->task['recurring']['start_date'], Carbon::tomorrow()), $this->task['recurring']['end_date']) : + CarbonPeriod::between(max($this->month->copy()->startOfMonth(), Carbon::tomorrow()), $this->month->copy()->endOfMonth()); + } protected function createShifts(array $dates) { From c95dfe4654bc024b333d55816b127c42980b98a4 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 10 Jul 2025 10:06:48 +0300 Subject: [PATCH 204/259] versin 2 algorithm --- .github/workflows/php-build-and-deploy.yml | 2 +- Dockerfile | 39 ++++++++++------------ 2 files changed, 19 insertions(+), 22 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 902cdf1..ba0866d 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_29 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_30 flavor: | latest=false tags: | diff --git a/Dockerfile b/Dockerfile index 5ec8223..1803726 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,33 +15,30 @@ COPY --chmod=755 /common common COPY --chown=${user}:${user} /artisan artisan COPY .env.example .env COPY /php.ini "${PHP_INI_DIR}/php.ini" -RUN php --ini \ - && php -r "echo 'max_execution_time: ' . ini_get('max_execution_time') . PHP_EOL;" - -RUN apt-get update \ - && apt-get satisfy -y --no-install-recommends \ - "curl (>=7.88)" \ - "supervisor (>=4.2)" \ - "unzip (>=6.0)" \ - "vim-tiny (>=2)" \ - && apt-get install -y nodejs npm \ - && npm install -g npm@7 \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* +RUN php --ini \ + && php -r "echo 'max_execution_time: ' . ini_get('max_execution_time') . PHP_EOL;" \ + && apt-get update \ + && apt-get install -y \ + curl \ + supervisor \ + unzip \ + vim-tiny \ + nodejs \ + npm \ + && npm install -g npm@7 \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* -RUN useradd \ - --uid 1000 \ - --shell /bin/bash \ - "${user}" \ +RUN useradd --uid 1000 --shell /bin/bash "${user}" \ && setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/frankenphp \ + && chmod +x /usr/local/bin/frankenphp \ && chown -R "${user}:${user}" \ /laravel \ /data/caddy \ /config/caddy \ /var/{log,run} \ - && chmod -R a+rw \ - /var/{log,run} + && chmod -R a+rw /var/{log,run} RUN install-php-extensions \ bcmath \ @@ -56,7 +53,7 @@ RUN install-php-extensions \ opcache \ redis \ sockets \ - calendar\ + calendar \ zip RUN composer install @@ -65,5 +62,5 @@ RUN npm install USER ${user} RUN chmod -R a+rw storage - + ENTRYPOINT ["/laravel/entrypoint.sh"] \ No newline at end of file From fd440a008cacbb44f247dde1ce744af96f1f58e0 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 10 Jul 2025 10:33:17 +0300 Subject: [PATCH 205/259] versin 2 algorithm --- .github/workflows/php-build-and-deploy.yml | 2 +- Dockerfile | 20 +++++++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index ba0866d..e6a1beb 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_30 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_31 flavor: | latest=false tags: | diff --git a/Dockerfile b/Dockerfile index 1803726..9dd4925 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,13 +1,19 @@ +# הגדרת גרסת PHP ARG php_version=8.3 +# שימוש בתמונה של FrankenPHP FROM dunglas/frankenphp:1.1-php${php_version} AS base WORKDIR /laravel + +# השתמש ב-Bash בתור shell SHELL ["/bin/bash", "-eou", "pipefail", "-c"] +# הגדרת משתנים כלליים ENV SERVER_NAME=:80 ARG user=laravel +# העתקת קבצים COPY ./ /laravel COPY --from=composer:latest /usr/bin/composer /usr/bin/composer COPY --chmod=755 /entrypoint.sh entrypoint.sh @@ -16,6 +22,7 @@ COPY --chown=${user}:${user} /artisan artisan COPY .env.example .env COPY /php.ini "${PHP_INI_DIR}/php.ini" +# התקנת התלויות והגדרת PHP RUN php --ini \ && php -r "echo 'max_execution_time: ' . ini_get('max_execution_time') . PHP_EOL;" \ && apt-get update \ @@ -26,13 +33,19 @@ RUN php --ini \ vim-tiny \ nodejs \ npm \ + sudo \ && npm install -g npm@7 \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* +# התקנה של גרסה חדשה של frankenphp (לא לחכות להורדה בזמן ההפעלה) +RUN curl -sSL https://github.com/laravel/octane/releases/download/v2.6/frankenphp-linux-x86_64.tar.gz | tar -xz -C /usr/local/bin + +# יצירת משתמש חדש עם UID 1000 RUN useradd --uid 1000 --shell /bin/bash "${user}" \ && setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/frankenphp \ && chmod +x /usr/local/bin/frankenphp \ + && chmod -R 755 /usr/local/bin \ && chown -R "${user}:${user}" \ /laravel \ /data/caddy \ @@ -40,6 +53,7 @@ RUN useradd --uid 1000 --shell /bin/bash "${user}" \ /var/{log,run} \ && chmod -R a+rw /var/{log,run} +# התקנת הרחבות PHP RUN install-php-extensions \ bcmath \ bz2 \ @@ -56,11 +70,15 @@ RUN install-php-extensions \ calendar \ zip +# התקנת תלות Composer RUN composer install + +# התקנת תלות npm RUN npm install +# החלפת הרשאות לתיקיית storage USER ${user} - RUN chmod -R a+rw storage +# נקודת התחלה - ENTRYPOINT ENTRYPOINT ["/laravel/entrypoint.sh"] \ No newline at end of file From fbcf623dc63bca80abf67237099402d569b1c8db Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 10 Jul 2025 10:47:08 +0300 Subject: [PATCH 206/259] versin 2 algorithm --- Dockerfile | 68 +++++++++++++++++++++++++++++------------------------- 1 file changed, 36 insertions(+), 32 deletions(-) diff --git a/Dockerfile b/Dockerfile index 9dd4925..ad278b3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,19 +1,16 @@ # הגדרת גרסת PHP ARG php_version=8.3 -# שימוש בתמונה של FrankenPHP +# שלב הבסיס עם גרסת FrankenPHP FROM dunglas/frankenphp:1.1-php${php_version} AS base WORKDIR /laravel - -# השתמש ב-Bash בתור shell SHELL ["/bin/bash", "-eou", "pipefail", "-c"] -# הגדרת משתנים כלליים ENV SERVER_NAME=:80 ARG user=laravel -# העתקת קבצים +# העתקת קבצים חשובים לאפליקציה COPY ./ /laravel COPY --from=composer:latest /usr/bin/composer /usr/bin/composer COPY --chmod=755 /entrypoint.sh entrypoint.sh @@ -21,39 +18,36 @@ COPY --chmod=755 /common common COPY --chown=${user}:${user} /artisan artisan COPY .env.example .env COPY /php.ini "${PHP_INI_DIR}/php.ini" - -# התקנת התלויות והגדרת PHP RUN php --ini \ - && php -r "echo 'max_execution_time: ' . ini_get('max_execution_time') . PHP_EOL;" \ - && apt-get update \ - && apt-get install -y \ - curl \ - supervisor \ - unzip \ - vim-tiny \ - nodejs \ - npm \ - sudo \ - && npm install -g npm@7 \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* + && php -r "echo 'max_execution_time: ' . ini_get('max_execution_time') . PHP_EOL;" -# התקנה של גרסה חדשה של frankenphp (לא לחכות להורדה בזמן ההפעלה) -RUN curl -sSL https://github.com/laravel/octane/releases/download/v2.6/frankenphp-linux-x86_64.tar.gz | tar -xz -C /usr/local/bin +# התקנה של תלותים נוספות +RUN apt-get update \ + && apt-get satisfy -y --no-install-recommends \ + "curl (>=7.88)" \ + "supervisor (>=4.2)" \ + "unzip (>=6.0)" \ + "vim-tiny (>=2)" \ + && apt-get install -y nodejs npm \ + && npm install -g npm@7 \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* # יצירת משתמש חדש עם UID 1000 -RUN useradd --uid 1000 --shell /bin/bash "${user}" \ +RUN useradd \ + --uid 1000 \ + --shell /bin/bash \ + "${user}" \ && setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/frankenphp \ - && chmod +x /usr/local/bin/frankenphp \ - && chmod -R 755 /usr/local/bin \ && chown -R "${user}:${user}" \ /laravel \ /data/caddy \ /config/caddy \ /var/{log,run} \ - && chmod -R a+rw /var/{log,run} + && chmod -R a+rw \ + /var/{log,run} -# התקנת הרחבות PHP +# התקנה של הרחבות PHP הדרושות RUN install-php-extensions \ bcmath \ bz2 \ @@ -70,15 +64,25 @@ RUN install-php-extensions \ calendar \ zip -# התקנת תלות Composer +# התקנה של Composer ו-NPM RUN composer install - -# התקנת תלות npm RUN npm install -# החלפת הרשאות לתיקיית storage +# שינוי הרשאות על תיקיית storage +RUN chmod -R a+rw storage + +# התקנה אוטומטית של FrankenPHP מתוך GitHub +RUN curl -sSL https://github.com/laravel/octane/releases/download/v2.6/frankenphp-linux-x86_64.tar.gz -o /tmp/frankenphp.tar.gz && \ + mkdir -p /usr/local/bin && \ + tar -xzvf /tmp/frankenphp.tar.gz -C /usr/local/bin && \ + chmod +x /usr/local/bin/frankenphp && \ + rm /tmp/frankenphp.tar.gz + +# שינוי למשתמש הלאראבל USER ${user} + +# שינוי הרשאות על תיקיית storage RUN chmod -R a+rw storage -# נקודת התחלה - ENTRYPOINT +# הגדרת EntryPoint ENTRYPOINT ["/laravel/entrypoint.sh"] \ No newline at end of file From 93c6da90f939b61786743d56f4c5a135931530b7 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 10 Jul 2025 10:52:44 +0300 Subject: [PATCH 207/259] versin 2 algorithm --- Dockerfile | 111 ++++++++++++++++------------------------------------- 1 file changed, 34 insertions(+), 77 deletions(-) diff --git a/Dockerfile b/Dockerfile index ad278b3..bbc7da3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,88 +1,45 @@ -# הגדרת גרסת PHP -ARG php_version=8.3 - -# שלב הבסיס עם גרסת FrankenPHP -FROM dunglas/frankenphp:1.1-php${php_version} AS base - -WORKDIR /laravel -SHELL ["/bin/bash", "-eou", "pipefail", "-c"] +# הגדרת התמונה הבסיסית +FROM php:8.1-fpm + +# עדכון כלים בסיסיים +RUN apt-get update && apt-get install -y \ + libpng-dev \ + libjpeg-dev \ + libfreetype6-dev \ + libzip-dev \ + unzip \ + curl \ + git \ + && rm -rf /var/lib/apt/lists/* -ENV SERVER_NAME=:80 -ARG user=laravel +# התקנה של הרחבות PHP דרושות +RUN docker-php-ext-configure gd --with-freetype --with-jpeg \ + && docker-php-ext-install gd zip -# העתקת קבצים חשובים לאפליקציה -COPY ./ /laravel -COPY --from=composer:latest /usr/bin/composer /usr/bin/composer -COPY --chmod=755 /entrypoint.sh entrypoint.sh -COPY --chmod=755 /common common -COPY --chown=${user}:${user} /artisan artisan -COPY .env.example .env -COPY /php.ini "${PHP_INI_DIR}/php.ini" -RUN php --ini \ - && php -r "echo 'max_execution_time: ' . ini_get('max_execution_time') . PHP_EOL;" +# התקנת Composer +RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer -# התקנה של תלותים נוספות -RUN apt-get update \ - && apt-get satisfy -y --no-install-recommends \ - "curl (>=7.88)" \ - "supervisor (>=4.2)" \ - "unzip (>=6.0)" \ - "vim-tiny (>=2)" \ - && apt-get install -y nodejs npm \ - && npm install -g npm@7 \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* +# התקנת Node.js ו-NPM +RUN curl -sL https://deb.nodesource.com/setup_16.x | bash - \ + && apt-get install -y nodejs -# יצירת משתמש חדש עם UID 1000 -RUN useradd \ - --uid 1000 \ - --shell /bin/bash \ - "${user}" \ - && setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/frankenphp \ - && chown -R "${user}:${user}" \ - /laravel \ - /data/caddy \ - /config/caddy \ - /var/{log,run} \ - && chmod -R a+rw \ - /var/{log,run} +# התקנה של frankenphp מתוך GitHub, ישירות ללא gzip +RUN curl -sSL https://github.com/laravel/octane/releases/download/v2.6/frankenphp-linux-x86_64 -o /usr/local/bin/frankenphp && \ + chmod +x /usr/local/bin/frankenphp -# התקנה של הרחבות PHP הדרושות -RUN install-php-extensions \ - bcmath \ - bz2 \ - curl \ - exif \ - gd \ - intl \ - pcntl \ - pdo_pgsql \ - mbstring \ - opcache \ - redis \ - sockets \ - calendar \ - zip +# התקנת Laravel Octane +RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer && \ + composer global require laravel/octane -# התקנה של Composer ו-NPM -RUN composer install +# התקנה של NPM dependencies +WORKDIR /var/www/html RUN npm install -# שינוי הרשאות על תיקיית storage +# תיקון הרשאות RUN chmod -R a+rw storage -# התקנה אוטומטית של FrankenPHP מתוך GitHub -RUN curl -sSL https://github.com/laravel/octane/releases/download/v2.6/frankenphp-linux-x86_64.tar.gz -o /tmp/frankenphp.tar.gz && \ - mkdir -p /usr/local/bin && \ - tar -xzvf /tmp/frankenphp.tar.gz -C /usr/local/bin && \ - chmod +x /usr/local/bin/frankenphp && \ - rm /tmp/frankenphp.tar.gz - -# שינוי למשתמש הלאראבל -USER ${user} - -# שינוי הרשאות על תיקיית storage -RUN chmod -R a+rw storage +# פתיחה של פורט 9000 +EXPOSE 9000 -# הגדרת EntryPoint -ENTRYPOINT ["/laravel/entrypoint.sh"] \ No newline at end of file +# הגדרת הפקודה הראשונית +CMD ["php-fpm"] \ No newline at end of file From 5575a2bdc9bc718378200f58a47efd8e07d7c6ce Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 10 Jul 2025 10:56:55 +0300 Subject: [PATCH 208/259] versin 2 algorithm --- Dockerfile | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/Dockerfile b/Dockerfile index bbc7da3..d95c7ff 100644 --- a/Dockerfile +++ b/Dockerfile @@ -23,15 +23,13 @@ RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local RUN curl -sL https://deb.nodesource.com/setup_16.x | bash - \ && apt-get install -y nodejs -# התקנה של frankenphp מתוך GitHub, ישירות ללא gzip -RUN curl -sSL https://github.com/laravel/octane/releases/download/v2.6/frankenphp-linux-x86_64 -o /usr/local/bin/frankenphp && \ - chmod +x /usr/local/bin/frankenphp +# אם יש חבילה Composer עבור frankenphp, אפשר להתקין אותה כך +# RUN composer global require frankenphp/package-name (לא בהכרח קיימת, זה תחליף אם תמצא) -# התקנת Laravel Octane -RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer && \ - composer global require laravel/octane +# העתקת קובץ package.json +COPY package.json /var/www/html/ -# התקנה של NPM dependencies +# התקנת NPM dependencies WORKDIR /var/www/html RUN npm install From 35ac6df4914445668d8ba60d23d2117cb809b8cf Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 10 Jul 2025 11:30:15 +0300 Subject: [PATCH 209/259] versin 2 algorithm --- Dockerfile | 95 +++++++++++++++++++++++++++++++++++------------------- 1 file changed, 61 insertions(+), 34 deletions(-) diff --git a/Dockerfile b/Dockerfile index d95c7ff..35ae08c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,43 +1,70 @@ -# הגדרת התמונה הבסיסית -FROM php:8.1-fpm - -# עדכון כלים בסיסיים -RUN apt-get update && apt-get install -y \ - libpng-dev \ - libjpeg-dev \ - libfreetype6-dev \ - libzip-dev \ - unzip \ - curl \ - git \ - && rm -rf /var/lib/apt/lists/* +ARG php_version=8.3 -# התקנה של הרחבות PHP דרושות -RUN docker-php-ext-configure gd --with-freetype --with-jpeg \ - && docker-php-ext-install gd zip +# FROM dunglas/frankenphp:1.1-php${php_version} AS base +FROM dunglas/frankenphp:1.1.5-php${php_version} AS base -# התקנת Composer -RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer +WORKDIR /laravel +SHELL ["/bin/bash", "-eou", "pipefail", "-c"] -# התקנת Node.js ו-NPM -RUN curl -sL https://deb.nodesource.com/setup_16.x | bash - \ - && apt-get install -y nodejs +ENV SERVER_NAME=:80 +ARG user=laravel -# אם יש חבילה Composer עבור frankenphp, אפשר להתקין אותה כך -# RUN composer global require frankenphp/package-name (לא בהכרח קיימת, זה תחליף אם תמצא) +COPY ./ /laravel +COPY --from=composer:latest /usr/bin/composer /usr/bin/composer +COPY --chmod=755 /entrypoint.sh entrypoint.sh +COPY --chmod=755 /common common +COPY --chown=${user}:${user} /artisan artisan +COPY .env.example .env +COPY /php.ini "${PHP_INI_DIR}/php.ini" +RUN php --ini \ + && php -r "echo 'max_execution_time: ' . ini_get('max_execution_time') . PHP_EOL;" -# העתקת קובץ package.json -COPY package.json /var/www/html/ -# התקנת NPM dependencies -WORKDIR /var/www/html -RUN npm install +RUN apt-get update \ + && apt-get satisfy -y --no-install-recommends \ + "curl (>=7.88)" \ + "supervisor (>=4.2)" \ + "unzip (>=6.0)" \ + "vim-tiny (>=2)" \ + && apt-get install -y nodejs npm \ + && npm install -g npm@7 \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* -# תיקון הרשאות -RUN chmod -R a+rw storage +RUN useradd \ + --uid 1000 \ + --shell /bin/bash \ + "${user}" \ + && setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/frankenphp \ + && chown -R "${user}:${user}" \ + /laravel \ + /data/caddy \ + /config/caddy \ + /var/{log,run} \ + && chmod -R a+rw \ + /var/{log,run} + +RUN install-php-extensions \ + bcmath \ + bz2 \ + curl \ + exif \ + gd \ + intl \ + pcntl \ + pdo_pgsql \ + mbstring \ + opcache \ + redis \ + sockets \ + calendar\ + zip + +RUN composer install +RUN npm install -# פתיחה של פורט 9000 -EXPOSE 9000 +USER ${user} -# הגדרת הפקודה הראשונית -CMD ["php-fpm"] \ No newline at end of file +RUN chmod -R a+rw storage + +ENTRYPOINT ["/laravel/entrypoint.sh"] \ No newline at end of file From c9fcddc59a7866c857ce0696f40fb761e54ce718 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 10 Jul 2025 11:42:00 +0300 Subject: [PATCH 210/259] versin 2 algorithm --- .github/workflows/php-build-and-deploy.yml | 2 +- entrypoint.sh | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index e6a1beb..45e14ea 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_31 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_32 flavor: | latest=false tags: | diff --git a/entrypoint.sh b/entrypoint.sh index 3673b7f..25b397e 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -1,5 +1,7 @@ #!/bin/bash +export OCTANE_SKIP_FRANKENPHP_INSTALL=1 + set -e : "${CONTAINER_MODE:=app}" From 17a932f87c9a8eeaf76fca8d271cbbad75364dea Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 10 Jul 2025 12:23:32 +0300 Subject: [PATCH 211/259] go one commit --- .github/workflows/php-build-and-deploy.yml | 2 +- Dockerfile | 3 +- app/Filament/Widgets/CalendarWidget.php | 16 +- app/Filament/Widgets/ChartWidget.php | 2 +- app/Models/Shift.php | 12 +- .../ChartResource/Widgets/ChartFilter.php | 18 +- app/Resources/SoldierResource.php | 4 +- app/Resources/TaskResource.php | 5 +- .../TaskResource/Pages/CreateTask.php | 1 - app/Resources/TeamResource.php | 4 +- app/Services/Algorithm.php | 15 +- app/Services/ConcurrentTasks.php | 31 +-- app/Services/Course.php | 3 + app/Services/FixedConstraints.php | 4 +- app/Services/Helpers.php | 42 ++- app/Services/ManualAssignment.php | 108 ++++---- app/Services/MaxData.php | 26 -- app/Services/PointedSchedule.php | 49 ++-- app/Services/Range.php | 31 ++- app/Services/Schedule.php | 262 ++---------------- app/Services/Shift.php | 36 ++- app/Services/ShiftData.php | 8 +- app/Services/Soldier.php | 94 +++++-- entrypoint.sh | 2 + 24 files changed, 308 insertions(+), 470 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 014eb61..a93fa15 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_26 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/fix_bug_now_1 flavor: | latest=false tags: | diff --git a/Dockerfile b/Dockerfile index 5ec8223..35ae08c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,7 @@ ARG php_version=8.3 -FROM dunglas/frankenphp:1.1-php${php_version} AS base +# FROM dunglas/frankenphp:1.1-php${php_version} AS base +FROM dunglas/frankenphp:1.1.5-php${php_version} AS base WORKDIR /laravel SHELL ["/bin/bash", "-eou", "pipefail", "-c"] diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 9f4151c..a4f77e7 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -252,17 +252,19 @@ protected function getBasicActions() { return [ EditAction::make() - ->fillForm( - fn (Model $record, array $arguments) => method_exists($this->model, 'fillForm') + ->fillForm(fn (Model $record, array $arguments) => method_exists($this->model, 'fillForm') ? (new $this->model)->fillForm($record, $arguments) : [ ...$record->getAttributes(), 'start_date' => $arguments['event']['start'] ?? $record->start_date, 'end_date' => $arguments['event']['end'] ?? $record->end_date, - ] - ) + ]) ->visible(function (Model $record, $arguments) { if ($record->start_date < now()) { + if (! empty($arguments['event']) && $arguments['type'] == 'drop') { + $this->refreshRecords(); + } + return false; } if (! empty($arguments['event']) && $arguments['event']['start'] < now()) { @@ -386,15 +388,13 @@ protected function displayButton(): bool protected function viewAction(): Action { return ViewAction::make() - ->fillForm( - fn (Model $record, array $arguments) => method_exists($this->model, 'fillForm') + ->fillForm(fn (Model $record, array $arguments) => method_exists($this->model, 'fillForm') ? (new $this->model)->fillForm($record, $arguments) : [ ...$record->getAttributes(), 'start_date' => $arguments['event']['start'] ?? $record->start_date, 'end_date' => $arguments['event']['end'] ?? $record->end_date, - ] - ) + ]) ->modalFooterActions( function (ViewAction $action, FullCalendarWidget $livewire) { if ( diff --git a/app/Filament/Widgets/ChartWidget.php b/app/Filament/Widgets/ChartWidget.php index 1d4a69c..e7f3a49 100644 --- a/app/Filament/Widgets/ChartWidget.php +++ b/app/Filament/Widgets/ChartWidget.php @@ -83,7 +83,7 @@ protected function getOptions(): array|RawJs|null callbacks: { label: function(context) { const soldierIndex = context.dataIndex; - const soldierName = context.dataset.labels ? context.dataset.labels[soldierIndex] : 'Unknown Soldier'; + const soldierName = context.dataset.labels ? context.dataset.labels[soldierIndex] : __('Unknown Soldier'); const value = context.parsed.y; return soldierName + ': ' + value; diff --git a/app/Models/Shift.php b/app/Models/Shift.php index 1c84321..5d3d8da 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -56,7 +56,7 @@ public function soldier(): BelongsTo private function getTaskParallelWeight() { - return $this->task?->parallel_weight; + return $this->task()->withTrashed()->first()->parallel_weight; } public function getTaskNameAttribute() @@ -64,13 +64,13 @@ public function getTaskNameAttribute() $user_name = User::where('userable_id', $this->soldier_id)->get(['first_name', 'last_name']); return $this->soldier_id == auth()->user()->userable_id - ? $this->task?->name - : $this->task?->name.' '.$user_name->first()?->first_name.' '.$user_name->first()?->last_name; + ? $this->task()->withTrashed()->first()->name + : $this->task()->withTrashed()->first()->name.' '.$user_name->first()?->first_name.' '.$user_name->first()?->last_name; } public function getTaskColorAttribute() { - return $this->task?->color; + return $this->task()->withTrashed()->first()->color; } public static function getSchema(): array @@ -280,7 +280,7 @@ function ($shifts, $soldierId) use ($data) { $livewire->dispatch('filament-fullcalendar--refresh'); } if ($arguments['cancel'] ?? false) { - $livewire->dispatch('filament-fullcalendar--refresh'); + $livewire->dispatch('close-modal'); } }); } @@ -578,7 +578,7 @@ function ($record) use (&$soldiers) { $livewire->dispatch('filament-fullcalendar--refresh'); } if ($arguments['cancel'] ?? false) { - $livewire->dispatch('filament-fullcalendar--refresh'); + $livewire->dispatch('close-modal'); } }); } diff --git a/app/Resources/ChartResource/Widgets/ChartFilter.php b/app/Resources/ChartResource/Widgets/ChartFilter.php index 2783744..204b0a5 100644 --- a/app/Resources/ChartResource/Widgets/ChartFilter.php +++ b/app/Resources/ChartResource/Widgets/ChartFilter.php @@ -164,22 +164,20 @@ protected function runAlgorithm($form) protected function resetShifts($form) { - // $this->startDate = (Carbon::now()->format('m') == Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->format('m')) - // ? Carbon::now()->addDay()->format('Y-m-d') - // : - Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->startOfMonth()->format('Y-m-d'); + $startDate = (Carbon::now()->format('m') == Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->format('m')) + ? Carbon::now()->addDay()->format('Y-m-d') + : Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->startOfMonth()->format('Y-m-d'); Shift::whereNotNull('soldier_id') - ->whereBetween('start_date', [$this->startDate, (Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->endOfMonth()->addDay())->format('Y-m-d')]) + ->whereBetween('start_date', [$startDate, (Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->endOfMonth()->addDay())->format('Y-m-d')]) ->update(['soldier_id' => null]); } protected function deleteShifts($form) { - // $this->startDate = (Carbon::now()->format('m') == Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->format('m')) - // ? Carbon::now()->addDay()->format('Y-m-d') - // : - Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->startOfMonth()->format('Y-m-d'); - Shift::whereBetween('start_date', [$this->startDate, (Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->endOfMonth()->addDay())->format('Y-m-d')]) + $startDate = (Carbon::now()->format('m') == Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->format('m')) + ? Carbon::now()->addDay()->format('Y-m-d') + : Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->startOfMonth()->format('Y-m-d'); + Shift::whereBetween('start_date', [$startDate, (Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->endOfMonth()->addDay())->format('Y-m-d')]) ->delete(); } diff --git a/app/Resources/SoldierResource.php b/app/Resources/SoldierResource.php index 736eb5e..4161ad4 100644 --- a/app/Resources/SoldierResource.php +++ b/app/Resources/SoldierResource.php @@ -62,9 +62,7 @@ public static function table(Table $table): Table ->columns([ TextColumn::make('user.displayName') ->label(__('Full name')) - ->formatStateUsing( - fn ($record) => $record->user->last_name.' '.$record->user->first_name - ) + ->formatStateUsing(fn ($record) => $record->user->last_name.' '.$record->user->first_name) ->searchable(query: function ($query, $search) { $query->whereHas('user', function ($query) use ($search) { $query->where('first_name', 'like', "%{$search}%") diff --git a/app/Resources/TaskResource.php b/app/Resources/TaskResource.php index ac54e48..792f186 100644 --- a/app/Resources/TaskResource.php +++ b/app/Resources/TaskResource.php @@ -334,10 +334,7 @@ public static function assignSoldier(): array ->afterStateUpdated(fn (callable $set) => $set('soldier_id', null)), Select::make('soldier_id') ->label(__('Assign soldier')) - ->options( - fn (Get $get) => self::getSoldiers($get) - - ) + ->options(fn (Get $get) => self::getSoldiers($get)) ->default(null) ->placeholder(fn (Get $get) => self::getSoldiers($get)->isEmpty() ? __('No suitable soldiers') : __('Select a soldier')) ->visible( diff --git a/app/Resources/TaskResource/Pages/CreateTask.php b/app/Resources/TaskResource/Pages/CreateTask.php index f767d93..4914de8 100644 --- a/app/Resources/TaskResource/Pages/CreateTask.php +++ b/app/Resources/TaskResource/Pages/CreateTask.php @@ -76,7 +76,6 @@ public static function getSteps(): array ->visible( fn (Get $get) => $get('recurring.type') == 'One time' && $get('recurring.date') - ), ]; } diff --git a/app/Resources/TeamResource.php b/app/Resources/TeamResource.php index 2d70905..9f3d100 100644 --- a/app/Resources/TeamResource.php +++ b/app/Resources/TeamResource.php @@ -117,9 +117,7 @@ public static function table(Table $table): Table ->sortable(), TextColumn::make('commander.user') ->label(__('Commander')) - ->formatStateUsing(function ($state) { - return $state->last_name.' '.$state->first_name; - }) + ->formatStateUsing(fn ($state) => $state->last_name.' '.$state->first_name) ->label(__('Commander')) ->searchable( query: function ($query, $search) { diff --git a/app/Services/Algorithm.php b/app/Services/Algorithm.php index d90b774..c1d9819 100644 --- a/app/Services/Algorithm.php +++ b/app/Services/Algorithm.php @@ -19,20 +19,19 @@ public function __construct($date = null) protected function getShiftWithTasks() { - // $startOfMonth = max($this->date->copy()->startOfMonth(), Carbon::tomorrow()); $startOfMonth = $this->date->copy()->startOfMonth(); + // $startOfMonth = max($this->date->copy()->startOfMonth(), Carbon::tomorrow()); $endOfMonth = $this->date->copy()->endOfMonth(); - return Shift::whereNull('soldier_id') + return Shift::with('task') + ->whereNull('soldier_id') ->whereHas('task', function ($query) { $query->withTrashed() ->where('kind', '!=', TaskKind::INPARALLEL->value); }) ->where(function ($query) use ($startOfMonth, $endOfMonth) { - $query->where(function ($subQuery) use ($startOfMonth, $endOfMonth) { - $subQuery->where('start_date', '<', $endOfMonth) - ->where('end_date', '>', $startOfMonth); - }); + $query->where('start_date', '<=', $endOfMonth) + ->where('start_date', '>=', $startOfMonth); }) ->get() ->map(fn (Shift $shift): ShiftService => Helpers::buildShift($shift)); @@ -54,8 +53,8 @@ protected function getSoldiersDetails() return Helpers::buildSoldier($soldier, $constraints, $shifts, $capacityHold); }) - ->shuffle() - ->toArray(); + ->filter(fn ($soldier) => $soldier->hasMaxes()) + ->shuffle(); } protected function getSoldiersShifts($soldierId, $inParallel) diff --git a/app/Services/ConcurrentTasks.php b/app/Services/ConcurrentTasks.php index 44ca079..5a7acb2 100644 --- a/app/Services/ConcurrentTasks.php +++ b/app/Services/ConcurrentTasks.php @@ -40,8 +40,7 @@ public function run() protected function getShiftsWithTasks() { - // $startOfMonth = max($this->date->copy()->startOfMonth(), Carbon::tomorrow()); - $startOfMonth = $this->date->copy()->startOfMonth(); + $startOfMonth = max($this->date->copy()->startOfMonth(), Carbon::tomorrow()); $endOfMonth = $this->date->copy()->endOfMonth(); return Shift::whereNull('soldier_id') @@ -50,10 +49,8 @@ protected function getShiftsWithTasks() ->where('kind', TaskKind::INPARALLEL->value); }) ->where(function ($query) use ($startOfMonth, $endOfMonth) { - $query->where(function ($subQuery) use ($startOfMonth, $endOfMonth) { - $subQuery->where('start_date', '<', $endOfMonth) - ->where('end_date', '>', $startOfMonth); - }); + $query->where('start_date', '<=', $endOfMonth) + ->where('start_date', '>=', $startOfMonth); }) ->get() ->map(fn (Shift $shift): ShiftService => Helpers::buildShift($shift)); @@ -84,8 +81,7 @@ protected function getSoldiersShifts($soldierId, $inParallel) protected function initShiftsData(): void { $groupedShifts = collect($this->shifts)->groupBy('taskType'); - $groupedShifts->each(fn ($shifts, $taskType) => $this->addShiftsDataByTask($taskType, collect($shifts)) - ); + $groupedShifts->each(fn ($shifts, $taskType) => $this->addShiftsDataByTask($taskType, collect($shifts))); } protected function addShiftsDataByTask(string $taskType, $shifts): void @@ -101,8 +97,8 @@ protected function addShiftData(ShiftService $shift, $soldiers) $potentialSoldiers = $this->getPotentialSoldiers($soldiers, $shift); $shiftData = new ShiftData( $shift, - $potentialSoldiers, - 0 + 0, + $potentialSoldiers ); $this->shiftsData->push($shiftData); } @@ -114,17 +110,10 @@ protected function getPotentialSoldiers($soldiers, ShiftService $shift) return $soldier->isAvailableByConstraints($shift->range) === Availability::YES && $soldier->isAvailableByConcurrentsShifts($shift) && $soldier->inParallelMaxData->remaining() > 0 - && $this->isAvailableByShiftsAndSpaces($soldier->shifts, $shift); + && $soldier->isAvailableByShifts($shift); }); - return $potentialSoldiers; - } - - protected function isAvailableByShiftsAndSpaces($soldierShifts, ShiftService $shift): bool - { - return ! $soldierShifts->contains(function (ShiftService $soldierShift) use ($shift): bool { - return $soldierShift->range->isConflict($shift->range) && ! collect($shift->inParalelTasks)->contains($soldierShift->taskType); - }); + return collect($potentialSoldiers)->shuffle(); } protected function assignShifts() @@ -145,10 +134,10 @@ protected function assignShift(ShiftData $shiftData) protected function tryAssignShift(SoldierService $soldier, ShiftService $shift) { - if ($soldier->isAvailableByConcurrentsShifts($shift)) { + if ($soldier->isAvailableByConcurrentsShifts($shift) && $soldier->inParallelMaxData->remaining() > 0) { $soldier->concurrentsShifts->push($shift); - $this->assignments->push(new Assignment($shift->id, $soldier->id)); $soldier->inParallelMaxData->used++; + $this->assignments->push(new Assignment($shift->id, $soldier->id)); return true; } diff --git a/app/Services/Course.php b/app/Services/Course.php index 1d638c1..0fdcaf9 100644 --- a/app/Services/Course.php +++ b/app/Services/Course.php @@ -10,11 +10,14 @@ class Course public $soldiers; + public $hasGap; + public function __construct($number, $max, $soldiers) { $this->number = $number; $this->max = $max; $this->soldiers = collect($soldiers); + $this->hasGap = false; } public function remaining($max) diff --git a/app/Services/FixedConstraints.php b/app/Services/FixedConstraints.php index 3413457..41f0a8e 100644 --- a/app/Services/FixedConstraints.php +++ b/app/Services/FixedConstraints.php @@ -55,7 +55,7 @@ protected function createConstraint($constraintType, $soldierId, $startDate, $en protected function createPeriod() { $month = Carbon::now()->addMonth(); - return CarbonPeriod::between($month->copy()->startOfMonth(), $month->copy()->endOfMonth()); - // return CarbonPeriod::between(max($month->copy()->startOfMonth(), Carbon::tomorrow()), $month->copy()->endOfMonth()); + + return CarbonPeriod::between(max($month->copy()->startOfMonth(), Carbon::tomorrow()), $month->copy()->endOfMonth()); } } diff --git a/app/Services/Helpers.php b/app/Services/Helpers.php index 1a579b3..ad700fd 100644 --- a/app/Services/Helpers.php +++ b/app/Services/Helpers.php @@ -17,6 +17,7 @@ public static function buildShift(Shift $shift): ShiftService { return new ShiftService( $shift->id, + $shift->task_id, $shift->task()->withTrashed()->first()->type, $shift->start_date, $shift->end_date, @@ -42,6 +43,7 @@ public static function buildSoldier($soldier, $constraints, $shifts, array $capa { return new SoldierService( $soldier->id, + $soldier->course, new MaxData($soldier->capacity, $capacityHold['points'] ?? 0), new MaxData($soldier->max_shifts, $capacityHold['count'] ?? 0), new MaxData($soldier->max_nights, $capacityHold['sumNights'] ?? 0), @@ -67,7 +69,7 @@ public static function buildConstraints($constraints, $newRange) fn (Constraint $constraint): ConstraintService => new ConstraintService( $constraint->start_date, $constraint->end_date, - ConstraintType::getPriority()[$constraint->constraint_type->value] == 1 ? Priority::HIGH : Priority::LOW + ConstraintType::getPriority()[$constraint->constraint_type->value] == 1 ? Priority::HIGH : Priority::LOW, ) ); } @@ -110,26 +112,25 @@ public static function addShiftsSpaces($shifts) collect($shifts)->map(function (ShiftService $shift) use ($shifts, &$allSpaces) { $spaces = ($shift->kind === TaskKind::WEEKEND->value || $shift->kind === TaskKind::NIGHT->value) ? $shift->getShiftSpaces($shifts) : null; if (! empty($spaces)) { - collect($spaces)->map(fn (Range $space) => $allSpaces->push(new ShiftService(0, '', $space->start, $space->end, 0, TaskKind::REGULAR->value, []))); + collect($spaces)->map(fn (Range $space) => $allSpaces->push(new ShiftService(0, 0, '', $space->start, $space->end, 0, TaskKind::REGULAR->value, []))); } }); return $allSpaces; } - public static function getSoldiersShifts($soldierId, $newRange, $inParallel) + public static function getSoldiersShifts($soldierId, $range, $inParallel) { - return Shift::where('soldier_id', $soldierId) + return Shift::with('task') + ->where('soldier_id', $soldierId) ->whereHas('task', function ($query) use ($inParallel) { $query->withTrashed() ->when($inParallel, fn ($query) => $query->where('kind', TaskKind::INPARALLEL->value)) ->when(! $inParallel, fn ($query) => $query->where('kind', '!=', TaskKind::INPARALLEL->value)); }) - ->where(function ($query) use ($newRange) { - $query->where(function ($subQuery) use ($newRange) { - $subQuery->where('start_date', '<', $newRange->end) - ->where('end_date', '>', $newRange->start); - }); + ->where(function ($query) use ($range) { + $query->where('start_date', '<=', $range->end) + ->where('start_date', '>=', $range->start); }) ->get() ->map(fn (Shift $shift): ShiftService => self::buildShift($shift)); @@ -137,14 +138,31 @@ public static function getSoldiersShifts($soldierId, $newRange, $inParallel) public static function getConstraintBy(int $soldierId, $newRange) { - $constraint = Constraint::where('soldier_id', $soldierId) + $constraints = Constraint::where('soldier_id', $soldierId) ->get(); - return self::buildConstraints($constraint, $newRange); + return self::buildConstraints($constraints, $newRange); } public static function updateShiftTable($assignments) { - collect($assignments)->map(fn (Assignment $assignment) => Shift::where('id', $assignment->shiftId)->update(['soldier_id' => $assignment->soldierId])); + if (empty($assignments)) { + return; + } + + $chunks = array_chunk($assignments->toArray(), 80); + + foreach ($chunks as $chunk) { + $cases = []; + $ids = []; + + collect($chunk)->each(function ($assignment) use (&$ids, &$cases) { + $ids[] = $assignment->shiftId; + $cases[] = "WHEN id = {$assignment->shiftId} THEN {$assignment->soldierId}"; + }); + + Shift::whereIn('id', $ids) + ->update(['soldier_id' => \DB::raw('CASE '.implode(' ', $cases).' END')]); + } } } diff --git a/app/Services/ManualAssignment.php b/app/Services/ManualAssignment.php index 07e3327..8b9b2bc 100644 --- a/app/Services/ManualAssignment.php +++ b/app/Services/ManualAssignment.php @@ -2,14 +2,12 @@ namespace App\Services; -use App\Enums\Availability; use App\Models\Department; use App\Models\Shift; use App\Models\Soldier; use App\Models\Team; use App\Models\User; use App\Services\Soldier as SoldierService; -use Illuminate\Support\Facades\Cache; class ManualAssignment { @@ -35,7 +33,6 @@ public function getSoldiers($departmentName = null) protected function initSoldiersData($departmentName) { - $this->soldiers = Cache::remember('users', 30 * 60, fn () => User::all()); match ($this->soldierType) { 'reserves' => $this->filterReserves(), 'my_soldiers' => $this->filterMySoldiers(), @@ -47,60 +44,69 @@ protected function initSoldiersData($departmentName) protected function filterReserves() { - $this->soldiers = $this->soldiers - ->filter(function ($user) { - $soldier = $this->getSoldierBy($user->userable_id); - - return $soldier->is_reservist && $soldier->id != auth()->user()->userable_id; - }); + $this->soldiers = Soldier::whereJsonContains('qualifications', $this->shift->taskType) + ->where('is_reservist', true) + ->where('id', '!=', auth()->user()->userable_id) + ->get(); } protected function filterMySoldiers() { - $this->soldiers = $this->soldiers - ->filter(function ($user) { - $currentUserId = auth()->user()->userable_id; - $role = current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])); - $soldier = $this->getSoldierBy($user->userable_id); - - return match ($role) { - 'department-commander' => $soldier?->team?->department?->commander_id == $currentUserId - && $soldier?->id != $currentUserId, - 'team-commander' => $soldier?->team?->commander_id == $currentUserId - && $soldier?->id != $currentUserId - }; - }); + $currentUserId = auth()->user()->userable_id; + $role = current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])); + $members = collect(); + + switch ($role) { + case 'department-commander': + $department = Department::whereHas('commander', function ($query) use ($currentUserId) { + $query->where('id', $currentUserId); + })->first(); + + $memberIds = $department?->teams->flatMap(fn (Team $team) => $team->members->pluck('id')) ?? collect(); + $commanderIds = $department?->teams->pluck('commander_id') ?? collect(); + + $members = $memberIds->merge($commanderIds)->unique(); + break; + case 'team-commander': + $members = Team::whereHas('commander', function ($query) use ($currentUserId) { + $query->where('id', $currentUserId); + })->first()?->members->pluck('id') ?? collect([]); + break; + } + + $this->soldiers = Soldier::whereJsonContains('qualifications', $this->shift->taskType) + ->where('is_reservist', false) + ->where('id', '!=', $currentUserId) + ->whereIn('id', $members) + ->get(); } protected function filterDepartment($departmentName) { - $this->soldiers = $this->soldiers - ->filter(function ($user) use ($departmentName) { - $soldier = Soldier::where('id', '=', $user->userable_id)->first(); - $department = Department::where('name', $departmentName)->first(); - - return $soldier?->team?->department?->name == $departmentName - || collect($department->teams)->filter(fn (Team $team): bool => $team->commander_id === $soldier->id)->isNotEmpty() - || $soldier->id == $department->commander_id; - }); + $department = Department::where('name', $departmentName)->first(); + $this->soldiers = Soldier::whereJsonContains('qualifications', $this->shift->taskType) + ->where('is_reservist', false) + ->where('id', '!=', auth()->user()->userable_id) + ->where(function (Soldier $query) use ($department) { + $query->whereIn('id', $department?->teams->flatMap(fn (Team $team) => $team->members->pluck('id')) ?? collect()) + ->orWhereIn('id', $department?->teams->pluck('commander_id') ?? collect()) + ->orWhere('id', $department?->commander_id); + })->get(); } protected function filterMatching() { - $this->soldiers = $this->soldiers - ->filter(function ($user) { - $soldier = $this->getSoldierBy($user->userable_id); - - return ! $soldier->is_reservist && $soldier->id != auth()->user()->userable_id; - }); + $this->soldiers = Soldier::whereJsonContains('qualifications', $this->shift->taskType) + ->where('is_reservist', false) + ->where('id', '!=', auth()->user()->userable_id) + ->get(); } protected function getSoldiersDetails() { $this->soldiers = $this->soldiers ->map( - function (User $user) { - $soldier = $this->getSoldierBy($user->userable_id); + function (Soldier $soldier) { $constraints = $this->getConstraints($soldier); $soldiersShifts = $this->getSoldiersShifts($soldier->id, false); @@ -115,11 +121,6 @@ function (User $user) { ); } - protected function getSoldierBy($userable_id) - { - return Soldier::where('id', $userable_id)->first(); - } - public function amIAvailable(): bool { $me = Soldier::find(auth()->user()->userable_id); @@ -130,13 +131,12 @@ public function amIAvailable(): bool $capacityHold = Helpers::capacityHold($myShifts); - $soldier = Helpers::buildSoldier($me, $constraints, $myShifts, $capacityHold); + $concurrentsShifts = $this->getSoldiersShifts($me->id, true); - return $soldier->isQualified($this->shift->taskType) - && $soldier->isAvailableByMaxes($this->shift) - && $soldier->isAvailableByConstraints($this->shift->range) != Availability::NO - && $soldier->isAvailableByShifts($this->shift) - && $soldier->isAvailableBySpaces($this->shift->getShiftSpaces($soldier->shifts)); + $soldier = Helpers::buildSoldier($me, $constraints, $myShifts, $capacityHold, $concurrentsShifts); + + return $soldier->isAbleTake($this->shift, true) + && $soldier->isAvailableByConcurrentsShifts($this->shift); } protected function getConstraints(Soldier $soldier) @@ -151,13 +151,7 @@ protected function getSoldiersShifts($soldierId, $inParallel) protected function getAvailableSoldiers() { - $availableSoldiers = $this->soldiers->filter( - fn (SoldierService $soldier) => $soldier->isQualified($this->shift->taskType) - && $soldier->isAvailableByMaxes($this->shift) - && $soldier->isAvailableByConstraints($this->shift->range) != Availability::NO - && $soldier->isAvailableByShifts($this->shift) - && $soldier->isAvailableBySpaces($this->shift->getShiftSpaces($soldier->shifts)) - ); + $availableSoldiers = $this->soldiers->filter(fn (SoldierService $soldier) => $soldier->isAbleTake($this->shift, true)); $soldiersWithConcurrentsShifts = collect([]); $availableSoldiers->map(function (SoldierService $soldier) use ($soldiersWithConcurrentsShifts) { diff --git a/app/Services/MaxData.php b/app/Services/MaxData.php index f3adfee..8f7be43 100644 --- a/app/Services/MaxData.php +++ b/app/Services/MaxData.php @@ -18,30 +18,4 @@ public function remaining(): float { return $this->max - $this->used; } - - protected function relativeLoad(): float - { - if ($this->max == 0) { - return 0; - } - - return $this->used / $this->max; - } - - protected function singleValue(): float - { - if ($this->max == 0) { - return 0; - } - - return 1 / $this->max; - } - - public function calculatedRelativeLoad(): float - { - $relativeLoad = $this->relativeLoad(); - $pointValue = $this->singleValue(); - - return ($relativeLoad * 4 + $pointValue) / 5; - } } diff --git a/app/Services/PointedSchedule.php b/app/Services/PointedSchedule.php index 3d76b29..fd91c05 100644 --- a/app/Services/PointedSchedule.php +++ b/app/Services/PointedSchedule.php @@ -4,7 +4,6 @@ use App\Enums\Availability; use App\Enums\DaysInWeek; -use App\Enums\RotationResult; use App\Enums\TaskKind; class PointedSchedule @@ -307,50 +306,50 @@ protected function assign() { $this->courses ->filter(fn (Course $course) => $course->max > 0) - ->map(function (Course $course) { + ->each(function (Course $course) { + if (collect($this->shiftsData)->contains(fn ($shifts): bool => collect($shifts)->count() > 0) && $course->max >= 2) { + $this->assignShiftsForCourse($course, true); + } + }) + ->each(function (Course $course) { if (collect($this->shiftsData)->contains(fn ($shifts): bool => collect($shifts)->count() > 0)) { - $this->assignShiftsForCourse($course); + $this->assignShiftsForCourse($course, false); } }); } - protected function assignShiftsForCourse(Course $course) + protected function assignShiftsForCourse(Course $course, $isSingleRotation) { $rotationSize = $this->maximalRotationSize; - while ($course->remaining('pointsMaxData') > 0 && $rotationSize >= $this->minimalRotationSize) { - $rotationResult = $this->rotation($course->soldiers, $rotationSize); - match ($rotationResult) { - RotationResult::SUCCESS => [ - $this->saveRotationAssigments(), - ], - RotationResult::SUCCESS_WITH_GAP => [ - $this->saveRotationAssigments(), - $rotationSize = 0, - ], - RotationResult::FAILED => [ - $this->clearRotationAsssigments(), - $rotationSize /= 2, - ], - }; + while (! $course->hasGap && $course->remaining('pointsMaxData') > 0 && $rotationSize >= $this->minimalRotationSize) { + $rotationResult = $this->rotation($course, $rotationSize); + if ($rotationResult) { + $this->saveRotationAssigments(); + } else { + $this->clearRotationAsssigments(); + $rotationSize /= 2; + } + if ($isSingleRotation) { + return; + } } } - protected function rotation($soldiers, $rotationSize): RotationResult + protected function rotation($course, $rotationSize) { - $isGapExists = false; - foreach ($soldiers as $soldier) { + foreach ($course->soldiers as $soldier) { $assignedPoints = $this->assignRotationShiftsToSoldier($soldier, $rotationSize); $gap = $rotationSize - $assignedPoints; if ($gap > $this->allowedGap) { - return RotationResult::FAILED; + return false; } if ($gap > 0) { - $isGapExists = true; + $course->hasGap = true; } } - return $isGapExists ? RotationResult::SUCCESS_WITH_GAP : RotationResult::SUCCESS; + return true; } protected function assignRotationShiftsToSoldier(Soldier $soldier, float $rotationSize) diff --git a/app/Services/Range.php b/app/Services/Range.php index c6ff40b..18ffcce 100644 --- a/app/Services/Range.php +++ b/app/Services/Range.php @@ -42,7 +42,7 @@ public function isRangeInclude(DaysInWeek $dayInWeek): bool $endDayIndex = $this->end->dayOfWeek; $checkDayIndex = date('N', strtotime($dayInWeek->value)); if ($startDayIndex <= $endDayIndex) { - return $this->start->diffInDays($this->end) > 5 || ($checkDayIndex >= $startDayIndex && $checkDayIndex <= $endDayIndex); + return $this->start->copy()->diffInDays($this->end->copy()) > 5 || ($checkDayIndex >= $startDayIndex && $checkDayIndex <= $endDayIndex); } return $checkDayIndex >= $startDayIndex || $checkDayIndex <= $endDayIndex; @@ -50,23 +50,36 @@ public function isRangeInclude(DaysInWeek $dayInWeek): bool public function getDayAfterWeekend(): Range { - $nextDayAfterWeekend = $this->end->next(DaysInWeek::SUNDAY->value)->setTime(8, 0); + $nextDayAfterWeekend = $this->end->englishDayOfWeek == DaysInWeek::SUNDAY->value ? $this->end->copy() : $this->end->copy()->next(DaysInWeek::SUNDAY->value)->setTime(8, 0); return new Range($nextDayAfterWeekend, $nextDayAfterWeekend->copy()->addDay()); } public function getNightSpaces() { - return [$this->getDayBeforeNight(), $this->getDayAfterNight()]; - } + $startHour = $this->start->hour; + $endTomorrow = $this->end->copy()->addDay(); + if ($startHour >= '20' && $startHour <= '23') { + return [ + new Range(Carbon::create($this->start->year, $this->start->month, $this->start->day, 00, 00), $this->start), + new Range($this->end, Carbon::create($endTomorrow->year, $endTomorrow->month, $endTomorrow->day, 7, 59)), + ]; + } + if ($startHour >= '0' && $startHour <= '1') { + $startYesterday = $this->start->copy()->subDay(); - public function getDayBeforeNight(): Range - { - return new Range($this->start->copy()->subHours(12), $this->start); + return [ + new Range(Carbon::create($startYesterday->year, $startYesterday->month, $startYesterday->day, 00, 00), $this->start), + new Range($this->end, Carbon::create($endTomorrow->year, $endTomorrow->month, $endTomorrow->day, 7, 59)), + ]; + } } - public function getDayAfterNight(): Range + public function getNightInWeekendSpaces() { - return new Range($this->end, $this->end->copy()->addHours(12)); + return [ + new Range($this->start->copy()->setHour(8)->setMinutes(30), $this->start->copy()), + new Range($this->end->copy(), $this->end->copy()->setHour(19)->setMinutes(59)), + ]; } } diff --git a/app/Services/Schedule.php b/app/Services/Schedule.php index b1aa5bb..0e7e33a 100644 --- a/app/Services/Schedule.php +++ b/app/Services/Schedule.php @@ -2,7 +2,6 @@ namespace App\Services; -use App\Enums\Availability; use App\Enums\TaskKind; class Schedule @@ -11,262 +10,49 @@ class Schedule public $soldiers; - public $shiftsData; - - public $soldiersDict; - public $assignments; - public $SHIFT_DUMBBELLS; - - public $SOLDIER_DUMBBELLS; - public function __construct($shifts, $soldiers) { - $this->shifts = collect($shifts); $this->soldiers = collect($soldiers); - $this->shiftsData = collect([]); - $this->soldiersDict = collect([]); + $this->shifts = collect($shifts); $this->assignments = collect([]); - $this->SHIFT_DUMBBELLS = collect([ - 'POINTS_RATIO' => 0.29, - 'SHIFTS_RATIO' => 0.39, - 'WEEKENDS_RATIO' => 0.04, - 'NIGHTS_RATIO' => 0.04, - 'SHIFT_AVAILABILITY' => 0.23, - 'BLOCK_POINTS' => 0.05, - ]); - $this->SOLDIER_DUMBBELLS = collect([ - 'LOW_CONSTRAINT' => 0.45, - 'POINTS_RELATIVE_LOAD' => 0.4, - 'SHIFTS_RELATIVE_LOAD' => 0.08, - 'NIGHT_RELATIVE_LOAD' => 0.01, - 'WEEKEND_RELATIVE_LOAD' => 0.01, - 'MULTITASKING_VALUE' => 0.05, - ]); - } - - public function schedule(): void - { - $this->initShiftsData(); - $this->initSoldiersData(); - $this->assignShifts(); - Helpers::updateShiftTable($this->assignments); } - protected function initShiftsData(): void + public function schedule() { - $groupedShifts = collect($this->shifts)->groupBy('taskType'); - $groupedShifts->each(function ($shifts, $taskType) { - $this->addShiftsDataByTask($taskType, collect($shifts)); - }); + $this->assignPointedShifts(); + $this->assignNotPointedShifts(); + $this->saveAssignments(); } - protected function addShiftsDataByTask(string $taskType, $shifts): void + protected function assignPointedShifts() { - $soldiers = $this->soldiers->filter(function (Soldier $soldier) use ($taskType): bool { - return $soldier->isQualified($taskType); - }); - $taskWeight = $this->getTaskWeight($shifts, $soldiers); - $shifts->map(fn ($shift) => $this->addShiftData($shift, $soldiers, $taskWeight)); + $pointedShifts = $this->shifts->filter(fn (Shift $shift): bool => $shift->points > 0); + $soldiers = $this->soldiers->filter(fn (Soldier $soldier) => $soldier->pointsMaxData->remaining() > 0); + $pointedSchedule = new PointedSchedule($soldiers, $pointedShifts); + $assignments = $pointedSchedule->schedule(); + $this->assignments->push(...$assignments); } - protected function getTaskWeight($shifts, $soldiers): array + protected function assignNotPointedShifts() { - $requiredPoints = collect($shifts)->sum('points'); - $requiredNights = collect($shifts)->filter(fn (Shift $shift) => ($shift->kind === TaskKind::NIGHT->value))->count(); - $requiredWeekends = collect($shifts) - ->filter(fn (Shift $shift) => ($shift->kind === TaskKind::WEEKEND->value)) - ->sum(fn (Shift $shift) => $shift->points); - $requiredShifts = count($shifts); - - $availablePoints = collect($soldiers)->sum(fn (Soldier $soldier) => $soldier->pointsMaxData->remaining()); - - $availableNights = collect($soldiers)->sum(fn (Soldier $soldier) => $soldier->nightsMaxData->remaining()); - - $availableWeekends = collect($soldiers)->sum(fn (Soldier $soldier) => $soldier->weekendsMaxData->remaining()); - - $availableShifts = collect($soldiers)->sum(fn (Soldier $soldier) => $soldier->shiftsMaxData->remaining()); - - $weight = collect([ - 'POINTS_RATIO' => $this->getRatio($requiredPoints, $availablePoints), - 'NIGHTS_RATIO' => $this->getRatio($requiredNights, $availableNights), - 'WEEKENDS_RATIO' => $this->getRatio($requiredWeekends, $availableWeekends), - 'SHIFTS_RATIO' => $this->getRatio($requiredShifts, $availableShifts), + $taskKinds = collect([ + TaskKind::NIGHT->value => 1, + TaskKind::REGULAR->value => 3, + TaskKind::ALERT->value => 1, ]); - - $weight->each(function ($value, $key) use (&$weight) { - $weight[$key] = $value * $this->SHIFT_DUMBBELLS[$key]; - }); - - return $weight->all(); - } - - protected function addShiftData(Shift $shift, $soldiers, $taskWeight) - { - $potentialSoldiers = $this->getPotentialSoldiers($soldiers, $shift->range); - $shiftData = new ShiftData( - $shift, - $potentialSoldiers, - $this->getShiftWeight( - $taskWeight, - $shift, - $soldiers->count(), - $potentialSoldiers->count() - ) - ); - $this->shiftsData->push($shiftData); - } - - protected function getRatio(float $required, float $available): float - { - return $available == 0 ? 0 : (float) $this->maximumOne((float) $required / $available); - } - - protected function maximumOne(float $number): float - { - return $number > 1 ? 1 : $number; - } - - protected function getPotentialSoldiers($soldiers, Range $range) - { - $potentialSoldiers = $soldiers->filter(function (Soldier $soldier) use ($range) { - return $soldier->isAvailableByConstraints($range) != Availability::NO; - })->map(function (Soldier $soldier) use ($range): PotentialSoldierData { - $availability = $soldier->isAvailableByConstraints($range); - - return new PotentialSoldierData( - $soldier->id, - $availability == Availability::BETTER_NOT - ); + $taskKinds->each(function ($gap, $taskKind) { + $shifts = $this->shifts->filter(fn (Shift $shift): bool => $shift->kind == $taskKind && + $shift->points == 0); + $notPointedSchedule = new NotPointedSchedule($taskKind, $this->soldiers, $shifts, $gap); + $assignments = $notPointedSchedule->schedule(); + $this->assignments->push(...$assignments); }); - - return $potentialSoldiers; } - protected function getShiftWeight($taskWeight, Shift $shift, int $soldiersCount, int $availableSoldiersCount): float + protected function saveAssignments() { - $weight = $taskWeight['SHIFTS_RATIO'] + $shift->points > 0 ? $taskWeight['POINTS_RATIO'] : 0; - - match ($shift->kind) { - TaskKind::WEEKEND->value => $weight += $taskWeight['WEEKENDS_RATIO'], - TaskKind::NIGHT->value => $weight += $taskWeight['NIGHTS_RATIO'], - default => null - }; - - $weight += $this->getShiftAvailabilityRatio($soldiersCount, $availableSoldiersCount) - * $this->SHIFT_DUMBBELLS['SHIFT_AVAILABILITY']; - - $weight += $this->getShiftBlockPoints($shift->points) * $this->SHIFT_DUMBBELLS['BLOCK_POINTS']; - - return $weight; - } - - protected function getShiftAvailabilityRatio(int $soldiersCount, int $availableSoldiers): float - { - if ($availableSoldiers == 0) { - return 0; - } - - return (float) ($soldiersCount - $availableSoldiers) / $soldiersCount; - } - - protected function getShiftBlockPoints(float $points): float - { - if ($points == 0) { - return 0; - } - - return (float) $points / 3; - } - - protected function initSoldiersData(): void - { - $this->soldiers->map(fn (Soldier $soldier) => $this->soldiersDict->put($soldier->id, $soldier)); - } - - protected function assignShifts() - { - $sortedShifts = $this->getSortedShiftsList(); - collect($sortedShifts)->map(fn (ShiftData $shift) => $this->assignShift($shift)); - } - - protected function getSortedShiftsList() - { - return $this->shiftsData->sortByDesc('weight'); - } - - protected function assignShift(ShiftData $shiftData) - { - $soldiers = $this->getPotentialSoldiersData($shiftData); - foreach ($soldiers as $soldier) { - $success = $this->tryAssign($soldier, $shiftData->shift); - if ($success) { - return; - } - } - } - - protected function getPotentialSoldiersData(ShiftData $shiftData) - { - $soldiers = collect([]); - collect($shiftData->potentialSoldiers)->map(function (PotentialSoldierData $potentialSoldierData) use (&$soldiers, $shiftData) { - $soldiers->push($this->getSoldierAndWeight($potentialSoldierData, $shiftData->shift)); - }); - - return $this->getSortedPotentialSoldiers($soldiers); - } - - protected function getSoldierAndWeight(PotentialSoldierData $potentialSoldierData, Shift $shift) - { - $soldier = $this->soldiersDict[$potentialSoldierData->soldierId]; - $weightDict = [ - 'LOW_CONSTRAINT' => $potentialSoldierData->isLowConstraint ? 1 : 0, - 'POINTS_RELATIVE_LOAD' => $shift->points > 0 ? $soldier->pointsMaxData->calculatedRelativeLoad() : 0, - 'SHIFTS_RELATIVE_LOAD' => $soldier->shiftsMaxData->calculatedRelativeLoad(), - 'NIGHT_RELATIVE_LOAD' => $shift->kind !== TaskKind::NIGHT->value ? 0 : $soldier->nightsMaxData->calculatedRelativeLoad(), - 'WEEKEND_RELATIVE_LOAD' => $shift->kind !== TaskKind::WEEKEND->value ? 0 : $soldier->weekendsMaxData->calculatedRelativeLoad(), - 'MULTITASKING_VALUE' => $this->getMultitaskingValue( - $soldier->qualifications->count() - ), - ]; - $weight = $this->getTotalWeight($weightDict); - - return [$soldier, $weight]; - } - - protected function getMultitaskingValue(int $qualificationsNumber): float - { - return (float) (1 - ((float) (1 / $qualificationsNumber))); - } - - protected function getTotalWeight($weightData): float - { - $weight = 0; - collect($weightData)->map(function ($value, $key) use (&$weight) { - $weight += (float) ($value * $this->SOLDIER_DUMBBELLS[$key]); - }); - - return $weight; - } - - protected function getSortedPotentialSoldiers($soldiers) - { - $sortedSoldiers = $soldiers->sortBy(fn ($item) => $item[1]); - - return $sortedSoldiers->map(fn ($soldier) => $soldier[0]); - } - - protected function tryAssign(Soldier $soldier, Shift $shift): bool - { - $spaces = $shift->getShiftSpaces($soldier->shifts); - if ($soldier->isAbleTake($shift, $spaces)) { - $soldier->assign($shift, $spaces); - $this->assignments->push(new Assignment($shift->id, $soldier->id)); - - return true; - } - - return false; + Helpers::updateShiftTable($this->assignments); } } diff --git a/app/Services/Shift.php b/app/Services/Shift.php index 1e41652..17f0c69 100644 --- a/app/Services/Shift.php +++ b/app/Services/Shift.php @@ -9,6 +9,8 @@ class Shift { public $id; + public $taskId; + public $taskType; public $range; @@ -17,16 +19,28 @@ class Shift public $kind; + public $isAssigned; + public $inParalelTasks; - public function __construct($id, string $taskType, $start, $end, float $points, $kind, $inParalelTasks = []) + public $isAttached; + + public function __construct($id, int $taskId, string $taskType, $start, $end, float $points, $kind, $inParalelTasks = []) { $this->id = $id; + $this->taskId = $taskId; $this->taskType = $taskType; $this->range = new Range($start, $end); $this->points = $points; $this->kind = $kind; + $this->isAssigned = false; $this->inParalelTasks = $inParalelTasks; + $this->isAttached = false; + } + + public function isAssigned(): bool + { + return $this->isAssigned; } public function getShiftSpaces($shifts) @@ -40,7 +54,23 @@ public function getShiftSpaces($shifts) protected function getWeekendSpaces($shifts) { - return $this->isFullWeekend($shifts) ? [$this->range->getDayAfterWeekend()] : null; + $spaces = collect([]); + if ($this->isNight()) { + $spaces->push(...$this->range->getNightInWeekendSpaces()); + } + if ($this->isFullWeekend($shifts)) { + $spaces->push($this->range->getDayAfterWeekend()); + } + + return $spaces?->toArray(); + } + + protected function isNight() + { + return ($this->range->start->hour >= 19 + && $this->range->start->hour < 23) && + ($this->range->end->hour > 6 + && $this->range->end->hour < 9); } protected function isFullWeekend($shifts) @@ -67,7 +97,7 @@ protected function isShiftInclude(Range $range, DaysInWeek $dayInWeek): bool protected function isAttached($shifts, $range, DaysInWeek $dayInWeek): bool { - $expectedDate = $dayInWeek == DaysInWeek::FRIDAY ? $range->start->subDay()->startOfDay() : $range->end->addDay()->startOfDay(); + $expectedDate = $dayInWeek == DaysInWeek::FRIDAY ? $range->start->copy()->subDay()->startOfDay() : $range->end->copy()->addDay()->startOfDay(); return $shifts ? collect($shifts)->contains( function ($shift) use ($expectedDate): bool { diff --git a/app/Services/ShiftData.php b/app/Services/ShiftData.php index 74606ea..82afd0a 100644 --- a/app/Services/ShiftData.php +++ b/app/Services/ShiftData.php @@ -6,14 +6,14 @@ class ShiftData { public $shift; - public $potentialSoldiers; - public $weight; - public function __construct(Shift $shift, $potentialSoldiers, float $weight) + public $potentialSoldiers; + + public function __construct(Shift $shift, float $weight, $potentialSoldiers = []) { $this->shift = $shift; - $this->potentialSoldiers = collect($potentialSoldiers); $this->weight = $weight; + $this->potentialSoldiers = collect($potentialSoldiers); } } diff --git a/app/Services/Soldier.php b/app/Services/Soldier.php index cb3ee02..f9c68df 100644 --- a/app/Services/Soldier.php +++ b/app/Services/Soldier.php @@ -10,6 +10,8 @@ class Soldier { public $id; + public $course; + public $pointsMaxData; public $shiftsMaxData; @@ -30,9 +32,10 @@ class Soldier public $concurrentsShifts; - public function __construct($id, MaxData $maxPoints, MaxData $maxShifts, MaxData $maxNights, MaxData $maxWeekends, MaxData $alertsMaxData, MaxData $inParallelMaxData, $qualifications, $constraints, $shifts = [], $concurrentsShifts = []) + public function __construct($id, $course, MaxData $maxPoints, MaxData $maxShifts, MaxData $maxNights, MaxData $maxWeekends, MaxData $alertsMaxData, MaxData $inParallelMaxData, $qualifications, $constraints, $shifts = [], $concurrentsShifts = []) { $this->id = $id; + $this->course = $course; $this->pointsMaxData = $maxPoints; $this->shiftsMaxData = $maxShifts; $this->nightsMaxData = $maxNights; @@ -45,48 +48,64 @@ public function __construct($id, MaxData $maxPoints, MaxData $maxShifts, MaxData $this->concurrentsShifts = collect($concurrentsShifts); } + public function hasMaxes(): bool + { + return ! ( + $this->shiftsMaxData->max === 0 && + $this->nightsMaxData->max === 0 && + $this->weekendsMaxData->max === 0 && + $this->alertsMaxData->max === 0 + ); + } + public function isQualified(string $taskType): bool { return $this->qualifications->contains($taskType); } - public function isAbleTake(Shift $shift, $spaces): bool + public function isAbleTake(Shift $shift, $ignoreLowConstraint): bool { - return $this->isAvailableByMaxes($shift) + $spaces = $shift->getShiftSpaces($this->shifts); + $availability = $this->isAvailableByConstraints($shift->range); + $isAvailableByConstraint = $ignoreLowConstraint ? $availability != Availability::NO : $availability == Availability::YES; + + return $this->isQualified($shift->taskType) + && $this->isAvailableByMaxes($shift) && $this->isAvailableByShifts($shift) - && $this->isAvailableBySpaces($spaces); + && $this->isAvailableBySpaces($spaces) + && $isAvailableByConstraint; } public function isAvailableByMaxes(Shift $shift): bool { - if ( - ($shift->kind === TaskKind::WEEKEND->value && $this->weekendsMaxData->remaining() < $shift->points) - || ($shift->kind === TaskKind::NIGHT->value && $this->nightsMaxData->remaining() < 1) - || ($shift->kind === TaskKind::ALERT->value && $this->alertsMaxData->remaining() < 1) - || ($shift->kind === TaskKind::INPARALLEL->value && $this->inParallelMaxData->remaining() < 1) - || $this->pointsMaxData->remaining() < $shift->points - || $this->shiftsMaxData->remaining() < 1 - ) { + if ($this->pointsMaxData->remaining() < $shift->points) { return false; } - return true; + return match ($shift->kind) { + TaskKind::WEEKEND->value => $this->weekendsMaxData->remaining() >= $shift->points, + TaskKind::NIGHT->value => $this->nightsMaxData->remaining() > 0 && $this->shiftsMaxData->remaining() > 0, + TaskKind::INPARALLEL->value => $this->inParallelMaxData->remaining() > 0, + TaskKind::ALERT->value => $this->alertsMaxData->remaining() > 0, + TaskKind::REGULAR->value => $this->shiftsMaxData->remaining() > 0, + }; } public function isAvailableByShifts(Shift $shift): bool { - return ! $this->shifts->contains(function (Shift $soldierShift) use ($shift): bool { - return $soldierShift->range->isConflict($shift->range) && ! collect($shift->inParalelTasks)->contains($shift->taskType); - }); + return ! $this->shifts->contains(fn (Shift $soldierShift) => $soldierShift->range->isConflict($shift->range) + && (! collect($shift->inParalelTasks)->contains($soldierShift->taskType)) + ); } public function isAvailableBySpaces($spaces): bool { if ($spaces) { foreach ($spaces as $space) { - return ! $this->shifts->contains(function ($shift) use ($space) { - return $shift->range->isConflict($space); - }); + return ! $this->shifts->contains(fn (Shift $shift) => $shift->id != 0 && + $shift->range->isConflict($space) + ) + && ! $this->concurrentsShifts->contains(fn (Shift $concurrentsShift) => $concurrentsShift->range->isConflict($space)); } } @@ -95,9 +114,9 @@ public function isAvailableBySpaces($spaces): bool public function isAvailableByConcurrentsShifts(Shift $shift) { - return ! $this->concurrentsShifts->contains(function (Shift $concurrentsShift) use ($shift): bool { - return $concurrentsShift->range->isConflict($shift->range) && ! collect($concurrentsShift->inParalelTasks)->contains($shift->taskType); - }); + return ! $this->concurrentsShifts->contains(fn (Shift $concurrentsShift) => $concurrentsShift->range->isConflict($shift->range) && + ! (collect($concurrentsShift->inParalelTasks)->contains($shift->taskType) + || collect($shift->inParalelTasks)->contains($concurrentsShift->taskType))); } public function isAvailableByConstraints(Range $range): Availability @@ -126,7 +145,10 @@ public function assign(Shift $shift, $spaces): void $this->pointsMaxData->used += $shift->points; match ($shift->kind) { TaskKind::WEEKEND->value => $this->weekendsMaxData->used += $shift->points, - TaskKind::NIGHT->value => $this->updateNightAndShifts(), + TaskKind::NIGHT->value => [ + $this->nightsMaxData->used += 1, + $this->shiftsMaxData->used += 1, + ], TaskKind::ALERT->value => $this->alertsMaxData->used += 1, TaskKind::INPARALLEL->value => $this->inParallelMaxData->used += 1, TaskKind::REGULAR->value => $this->shiftsMaxData->used += 1, @@ -135,12 +157,30 @@ public function assign(Shift $shift, $spaces): void protected function addSpaces($spaces) { - collect($spaces)->map(fn ($space) => $this->shifts->push(new Shift(0, '', $space->start, $space->end, 0, TaskKind::REGULAR->value, []))); + collect($spaces)->map(fn ($space) => $this->shifts->push(new Shift(0, 0, '', $space->start, $space->end, 0, TaskKind::REGULAR->value, []))); + } + + public function unassign(Shift $shift, $spaces) + { + $this->shifts = $this->shifts->filter(fn (Shift $existShift) => $shift->id !== $existShift->id); + $this->removeSpaces($spaces); + $this->pointsMaxData->used -= $shift->points; + match ($shift->kind) { + TaskKind::WEEKEND->value => $this->weekendsMaxData->used -= $shift->points, + TaskKind::NIGHT->value => [ + $this->nightsMaxData->used -= 1, + $this->shiftsMaxData->used -= 1, + ], + TaskKind::ALERT->value => $this->alertsMaxData->used -= 1, + TaskKind::INPARALLEL->value => $this->inParallelMaxData->used -= 1, + TaskKind::REGULAR->value => $this->shiftsMaxData->used -= 1, + }; } - protected function updateNightAndShifts() + protected function removeSpaces($spaces) { - $this->nightsMaxData->used += 1; - $this->shiftsMaxData->used += 1; + collect($spaces)->map(function ($space) { + $this->shifts = $this->shifts->filter(fn (Shift $existSpace) => $space->start !== $existSpace->range->start && $space->end !== $existSpace->range->end); + }); } } diff --git a/entrypoint.sh b/entrypoint.sh index 3673b7f..25b397e 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -1,5 +1,7 @@ #!/bin/bash +export OCTANE_SKIP_FRANKENPHP_INSTALL=1 + set -e : "${CONTAINER_MODE:=app}" From 78548a294a06a1d813c7c1a4fdd73dd239b04453 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 10 Jul 2025 13:20:22 +0300 Subject: [PATCH 212/259] go one commit --- .github/workflows/php-build-and-deploy.yml | 2 +- Dockerfile | 3 +- app/Filament/Widgets/CalendarWidget.php | 16 +- app/Filament/Widgets/ChartWidget.php | 2 +- app/Models/Shift.php | 12 +- .../ChartResource/Widgets/ChartFilter.php | 18 +- app/Resources/SoldierResource.php | 4 +- app/Resources/TaskResource.php | 5 +- .../TaskResource/Pages/CreateTask.php | 1 - app/Resources/TeamResource.php | 4 +- app/Services/Algorithm.php | 15 +- app/Services/ConcurrentTasks.php | 31 +-- app/Services/Course.php | 3 + app/Services/FixedConstraints.php | 4 +- app/Services/Helpers.php | 42 ++- app/Services/ManualAssignment.php | 108 ++++---- app/Services/MaxData.php | 26 -- app/Services/PointedSchedule.php | 49 ++-- app/Services/Range.php | 31 ++- app/Services/Schedule.php | 262 ++---------------- app/Services/Shift.php | 36 ++- app/Services/ShiftData.php | 8 +- app/Services/Soldier.php | 94 +++++-- entrypoint.sh | 2 + 24 files changed, 308 insertions(+), 470 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 014eb61..45e14ea 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_26 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_32 flavor: | latest=false tags: | diff --git a/Dockerfile b/Dockerfile index 5ec8223..35ae08c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,7 @@ ARG php_version=8.3 -FROM dunglas/frankenphp:1.1-php${php_version} AS base +# FROM dunglas/frankenphp:1.1-php${php_version} AS base +FROM dunglas/frankenphp:1.1.5-php${php_version} AS base WORKDIR /laravel SHELL ["/bin/bash", "-eou", "pipefail", "-c"] diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 9f4151c..a4f77e7 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -252,17 +252,19 @@ protected function getBasicActions() { return [ EditAction::make() - ->fillForm( - fn (Model $record, array $arguments) => method_exists($this->model, 'fillForm') + ->fillForm(fn (Model $record, array $arguments) => method_exists($this->model, 'fillForm') ? (new $this->model)->fillForm($record, $arguments) : [ ...$record->getAttributes(), 'start_date' => $arguments['event']['start'] ?? $record->start_date, 'end_date' => $arguments['event']['end'] ?? $record->end_date, - ] - ) + ]) ->visible(function (Model $record, $arguments) { if ($record->start_date < now()) { + if (! empty($arguments['event']) && $arguments['type'] == 'drop') { + $this->refreshRecords(); + } + return false; } if (! empty($arguments['event']) && $arguments['event']['start'] < now()) { @@ -386,15 +388,13 @@ protected function displayButton(): bool protected function viewAction(): Action { return ViewAction::make() - ->fillForm( - fn (Model $record, array $arguments) => method_exists($this->model, 'fillForm') + ->fillForm(fn (Model $record, array $arguments) => method_exists($this->model, 'fillForm') ? (new $this->model)->fillForm($record, $arguments) : [ ...$record->getAttributes(), 'start_date' => $arguments['event']['start'] ?? $record->start_date, 'end_date' => $arguments['event']['end'] ?? $record->end_date, - ] - ) + ]) ->modalFooterActions( function (ViewAction $action, FullCalendarWidget $livewire) { if ( diff --git a/app/Filament/Widgets/ChartWidget.php b/app/Filament/Widgets/ChartWidget.php index 1d4a69c..e7f3a49 100644 --- a/app/Filament/Widgets/ChartWidget.php +++ b/app/Filament/Widgets/ChartWidget.php @@ -83,7 +83,7 @@ protected function getOptions(): array|RawJs|null callbacks: { label: function(context) { const soldierIndex = context.dataIndex; - const soldierName = context.dataset.labels ? context.dataset.labels[soldierIndex] : 'Unknown Soldier'; + const soldierName = context.dataset.labels ? context.dataset.labels[soldierIndex] : __('Unknown Soldier'); const value = context.parsed.y; return soldierName + ': ' + value; diff --git a/app/Models/Shift.php b/app/Models/Shift.php index 1c84321..5d3d8da 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -56,7 +56,7 @@ public function soldier(): BelongsTo private function getTaskParallelWeight() { - return $this->task?->parallel_weight; + return $this->task()->withTrashed()->first()->parallel_weight; } public function getTaskNameAttribute() @@ -64,13 +64,13 @@ public function getTaskNameAttribute() $user_name = User::where('userable_id', $this->soldier_id)->get(['first_name', 'last_name']); return $this->soldier_id == auth()->user()->userable_id - ? $this->task?->name - : $this->task?->name.' '.$user_name->first()?->first_name.' '.$user_name->first()?->last_name; + ? $this->task()->withTrashed()->first()->name + : $this->task()->withTrashed()->first()->name.' '.$user_name->first()?->first_name.' '.$user_name->first()?->last_name; } public function getTaskColorAttribute() { - return $this->task?->color; + return $this->task()->withTrashed()->first()->color; } public static function getSchema(): array @@ -280,7 +280,7 @@ function ($shifts, $soldierId) use ($data) { $livewire->dispatch('filament-fullcalendar--refresh'); } if ($arguments['cancel'] ?? false) { - $livewire->dispatch('filament-fullcalendar--refresh'); + $livewire->dispatch('close-modal'); } }); } @@ -578,7 +578,7 @@ function ($record) use (&$soldiers) { $livewire->dispatch('filament-fullcalendar--refresh'); } if ($arguments['cancel'] ?? false) { - $livewire->dispatch('filament-fullcalendar--refresh'); + $livewire->dispatch('close-modal'); } }); } diff --git a/app/Resources/ChartResource/Widgets/ChartFilter.php b/app/Resources/ChartResource/Widgets/ChartFilter.php index 2783744..204b0a5 100644 --- a/app/Resources/ChartResource/Widgets/ChartFilter.php +++ b/app/Resources/ChartResource/Widgets/ChartFilter.php @@ -164,22 +164,20 @@ protected function runAlgorithm($form) protected function resetShifts($form) { - // $this->startDate = (Carbon::now()->format('m') == Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->format('m')) - // ? Carbon::now()->addDay()->format('Y-m-d') - // : - Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->startOfMonth()->format('Y-m-d'); + $startDate = (Carbon::now()->format('m') == Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->format('m')) + ? Carbon::now()->addDay()->format('Y-m-d') + : Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->startOfMonth()->format('Y-m-d'); Shift::whereNotNull('soldier_id') - ->whereBetween('start_date', [$this->startDate, (Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->endOfMonth()->addDay())->format('Y-m-d')]) + ->whereBetween('start_date', [$startDate, (Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->endOfMonth()->addDay())->format('Y-m-d')]) ->update(['soldier_id' => null]); } protected function deleteShifts($form) { - // $this->startDate = (Carbon::now()->format('m') == Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->format('m')) - // ? Carbon::now()->addDay()->format('Y-m-d') - // : - Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->startOfMonth()->format('Y-m-d'); - Shift::whereBetween('start_date', [$this->startDate, (Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->endOfMonth()->addDay())->format('Y-m-d')]) + $startDate = (Carbon::now()->format('m') == Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->format('m')) + ? Carbon::now()->addDay()->format('Y-m-d') + : Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->startOfMonth()->format('Y-m-d'); + Shift::whereBetween('start_date', [$startDate, (Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->endOfMonth()->addDay())->format('Y-m-d')]) ->delete(); } diff --git a/app/Resources/SoldierResource.php b/app/Resources/SoldierResource.php index 736eb5e..4161ad4 100644 --- a/app/Resources/SoldierResource.php +++ b/app/Resources/SoldierResource.php @@ -62,9 +62,7 @@ public static function table(Table $table): Table ->columns([ TextColumn::make('user.displayName') ->label(__('Full name')) - ->formatStateUsing( - fn ($record) => $record->user->last_name.' '.$record->user->first_name - ) + ->formatStateUsing(fn ($record) => $record->user->last_name.' '.$record->user->first_name) ->searchable(query: function ($query, $search) { $query->whereHas('user', function ($query) use ($search) { $query->where('first_name', 'like', "%{$search}%") diff --git a/app/Resources/TaskResource.php b/app/Resources/TaskResource.php index ac54e48..792f186 100644 --- a/app/Resources/TaskResource.php +++ b/app/Resources/TaskResource.php @@ -334,10 +334,7 @@ public static function assignSoldier(): array ->afterStateUpdated(fn (callable $set) => $set('soldier_id', null)), Select::make('soldier_id') ->label(__('Assign soldier')) - ->options( - fn (Get $get) => self::getSoldiers($get) - - ) + ->options(fn (Get $get) => self::getSoldiers($get)) ->default(null) ->placeholder(fn (Get $get) => self::getSoldiers($get)->isEmpty() ? __('No suitable soldiers') : __('Select a soldier')) ->visible( diff --git a/app/Resources/TaskResource/Pages/CreateTask.php b/app/Resources/TaskResource/Pages/CreateTask.php index f767d93..4914de8 100644 --- a/app/Resources/TaskResource/Pages/CreateTask.php +++ b/app/Resources/TaskResource/Pages/CreateTask.php @@ -76,7 +76,6 @@ public static function getSteps(): array ->visible( fn (Get $get) => $get('recurring.type') == 'One time' && $get('recurring.date') - ), ]; } diff --git a/app/Resources/TeamResource.php b/app/Resources/TeamResource.php index 2d70905..9f3d100 100644 --- a/app/Resources/TeamResource.php +++ b/app/Resources/TeamResource.php @@ -117,9 +117,7 @@ public static function table(Table $table): Table ->sortable(), TextColumn::make('commander.user') ->label(__('Commander')) - ->formatStateUsing(function ($state) { - return $state->last_name.' '.$state->first_name; - }) + ->formatStateUsing(fn ($state) => $state->last_name.' '.$state->first_name) ->label(__('Commander')) ->searchable( query: function ($query, $search) { diff --git a/app/Services/Algorithm.php b/app/Services/Algorithm.php index d90b774..c1d9819 100644 --- a/app/Services/Algorithm.php +++ b/app/Services/Algorithm.php @@ -19,20 +19,19 @@ public function __construct($date = null) protected function getShiftWithTasks() { - // $startOfMonth = max($this->date->copy()->startOfMonth(), Carbon::tomorrow()); $startOfMonth = $this->date->copy()->startOfMonth(); + // $startOfMonth = max($this->date->copy()->startOfMonth(), Carbon::tomorrow()); $endOfMonth = $this->date->copy()->endOfMonth(); - return Shift::whereNull('soldier_id') + return Shift::with('task') + ->whereNull('soldier_id') ->whereHas('task', function ($query) { $query->withTrashed() ->where('kind', '!=', TaskKind::INPARALLEL->value); }) ->where(function ($query) use ($startOfMonth, $endOfMonth) { - $query->where(function ($subQuery) use ($startOfMonth, $endOfMonth) { - $subQuery->where('start_date', '<', $endOfMonth) - ->where('end_date', '>', $startOfMonth); - }); + $query->where('start_date', '<=', $endOfMonth) + ->where('start_date', '>=', $startOfMonth); }) ->get() ->map(fn (Shift $shift): ShiftService => Helpers::buildShift($shift)); @@ -54,8 +53,8 @@ protected function getSoldiersDetails() return Helpers::buildSoldier($soldier, $constraints, $shifts, $capacityHold); }) - ->shuffle() - ->toArray(); + ->filter(fn ($soldier) => $soldier->hasMaxes()) + ->shuffle(); } protected function getSoldiersShifts($soldierId, $inParallel) diff --git a/app/Services/ConcurrentTasks.php b/app/Services/ConcurrentTasks.php index 44ca079..5a7acb2 100644 --- a/app/Services/ConcurrentTasks.php +++ b/app/Services/ConcurrentTasks.php @@ -40,8 +40,7 @@ public function run() protected function getShiftsWithTasks() { - // $startOfMonth = max($this->date->copy()->startOfMonth(), Carbon::tomorrow()); - $startOfMonth = $this->date->copy()->startOfMonth(); + $startOfMonth = max($this->date->copy()->startOfMonth(), Carbon::tomorrow()); $endOfMonth = $this->date->copy()->endOfMonth(); return Shift::whereNull('soldier_id') @@ -50,10 +49,8 @@ protected function getShiftsWithTasks() ->where('kind', TaskKind::INPARALLEL->value); }) ->where(function ($query) use ($startOfMonth, $endOfMonth) { - $query->where(function ($subQuery) use ($startOfMonth, $endOfMonth) { - $subQuery->where('start_date', '<', $endOfMonth) - ->where('end_date', '>', $startOfMonth); - }); + $query->where('start_date', '<=', $endOfMonth) + ->where('start_date', '>=', $startOfMonth); }) ->get() ->map(fn (Shift $shift): ShiftService => Helpers::buildShift($shift)); @@ -84,8 +81,7 @@ protected function getSoldiersShifts($soldierId, $inParallel) protected function initShiftsData(): void { $groupedShifts = collect($this->shifts)->groupBy('taskType'); - $groupedShifts->each(fn ($shifts, $taskType) => $this->addShiftsDataByTask($taskType, collect($shifts)) - ); + $groupedShifts->each(fn ($shifts, $taskType) => $this->addShiftsDataByTask($taskType, collect($shifts))); } protected function addShiftsDataByTask(string $taskType, $shifts): void @@ -101,8 +97,8 @@ protected function addShiftData(ShiftService $shift, $soldiers) $potentialSoldiers = $this->getPotentialSoldiers($soldiers, $shift); $shiftData = new ShiftData( $shift, - $potentialSoldiers, - 0 + 0, + $potentialSoldiers ); $this->shiftsData->push($shiftData); } @@ -114,17 +110,10 @@ protected function getPotentialSoldiers($soldiers, ShiftService $shift) return $soldier->isAvailableByConstraints($shift->range) === Availability::YES && $soldier->isAvailableByConcurrentsShifts($shift) && $soldier->inParallelMaxData->remaining() > 0 - && $this->isAvailableByShiftsAndSpaces($soldier->shifts, $shift); + && $soldier->isAvailableByShifts($shift); }); - return $potentialSoldiers; - } - - protected function isAvailableByShiftsAndSpaces($soldierShifts, ShiftService $shift): bool - { - return ! $soldierShifts->contains(function (ShiftService $soldierShift) use ($shift): bool { - return $soldierShift->range->isConflict($shift->range) && ! collect($shift->inParalelTasks)->contains($soldierShift->taskType); - }); + return collect($potentialSoldiers)->shuffle(); } protected function assignShifts() @@ -145,10 +134,10 @@ protected function assignShift(ShiftData $shiftData) protected function tryAssignShift(SoldierService $soldier, ShiftService $shift) { - if ($soldier->isAvailableByConcurrentsShifts($shift)) { + if ($soldier->isAvailableByConcurrentsShifts($shift) && $soldier->inParallelMaxData->remaining() > 0) { $soldier->concurrentsShifts->push($shift); - $this->assignments->push(new Assignment($shift->id, $soldier->id)); $soldier->inParallelMaxData->used++; + $this->assignments->push(new Assignment($shift->id, $soldier->id)); return true; } diff --git a/app/Services/Course.php b/app/Services/Course.php index 1d638c1..0fdcaf9 100644 --- a/app/Services/Course.php +++ b/app/Services/Course.php @@ -10,11 +10,14 @@ class Course public $soldiers; + public $hasGap; + public function __construct($number, $max, $soldiers) { $this->number = $number; $this->max = $max; $this->soldiers = collect($soldiers); + $this->hasGap = false; } public function remaining($max) diff --git a/app/Services/FixedConstraints.php b/app/Services/FixedConstraints.php index 3413457..41f0a8e 100644 --- a/app/Services/FixedConstraints.php +++ b/app/Services/FixedConstraints.php @@ -55,7 +55,7 @@ protected function createConstraint($constraintType, $soldierId, $startDate, $en protected function createPeriod() { $month = Carbon::now()->addMonth(); - return CarbonPeriod::between($month->copy()->startOfMonth(), $month->copy()->endOfMonth()); - // return CarbonPeriod::between(max($month->copy()->startOfMonth(), Carbon::tomorrow()), $month->copy()->endOfMonth()); + + return CarbonPeriod::between(max($month->copy()->startOfMonth(), Carbon::tomorrow()), $month->copy()->endOfMonth()); } } diff --git a/app/Services/Helpers.php b/app/Services/Helpers.php index 1a579b3..ad700fd 100644 --- a/app/Services/Helpers.php +++ b/app/Services/Helpers.php @@ -17,6 +17,7 @@ public static function buildShift(Shift $shift): ShiftService { return new ShiftService( $shift->id, + $shift->task_id, $shift->task()->withTrashed()->first()->type, $shift->start_date, $shift->end_date, @@ -42,6 +43,7 @@ public static function buildSoldier($soldier, $constraints, $shifts, array $capa { return new SoldierService( $soldier->id, + $soldier->course, new MaxData($soldier->capacity, $capacityHold['points'] ?? 0), new MaxData($soldier->max_shifts, $capacityHold['count'] ?? 0), new MaxData($soldier->max_nights, $capacityHold['sumNights'] ?? 0), @@ -67,7 +69,7 @@ public static function buildConstraints($constraints, $newRange) fn (Constraint $constraint): ConstraintService => new ConstraintService( $constraint->start_date, $constraint->end_date, - ConstraintType::getPriority()[$constraint->constraint_type->value] == 1 ? Priority::HIGH : Priority::LOW + ConstraintType::getPriority()[$constraint->constraint_type->value] == 1 ? Priority::HIGH : Priority::LOW, ) ); } @@ -110,26 +112,25 @@ public static function addShiftsSpaces($shifts) collect($shifts)->map(function (ShiftService $shift) use ($shifts, &$allSpaces) { $spaces = ($shift->kind === TaskKind::WEEKEND->value || $shift->kind === TaskKind::NIGHT->value) ? $shift->getShiftSpaces($shifts) : null; if (! empty($spaces)) { - collect($spaces)->map(fn (Range $space) => $allSpaces->push(new ShiftService(0, '', $space->start, $space->end, 0, TaskKind::REGULAR->value, []))); + collect($spaces)->map(fn (Range $space) => $allSpaces->push(new ShiftService(0, 0, '', $space->start, $space->end, 0, TaskKind::REGULAR->value, []))); } }); return $allSpaces; } - public static function getSoldiersShifts($soldierId, $newRange, $inParallel) + public static function getSoldiersShifts($soldierId, $range, $inParallel) { - return Shift::where('soldier_id', $soldierId) + return Shift::with('task') + ->where('soldier_id', $soldierId) ->whereHas('task', function ($query) use ($inParallel) { $query->withTrashed() ->when($inParallel, fn ($query) => $query->where('kind', TaskKind::INPARALLEL->value)) ->when(! $inParallel, fn ($query) => $query->where('kind', '!=', TaskKind::INPARALLEL->value)); }) - ->where(function ($query) use ($newRange) { - $query->where(function ($subQuery) use ($newRange) { - $subQuery->where('start_date', '<', $newRange->end) - ->where('end_date', '>', $newRange->start); - }); + ->where(function ($query) use ($range) { + $query->where('start_date', '<=', $range->end) + ->where('start_date', '>=', $range->start); }) ->get() ->map(fn (Shift $shift): ShiftService => self::buildShift($shift)); @@ -137,14 +138,31 @@ public static function getSoldiersShifts($soldierId, $newRange, $inParallel) public static function getConstraintBy(int $soldierId, $newRange) { - $constraint = Constraint::where('soldier_id', $soldierId) + $constraints = Constraint::where('soldier_id', $soldierId) ->get(); - return self::buildConstraints($constraint, $newRange); + return self::buildConstraints($constraints, $newRange); } public static function updateShiftTable($assignments) { - collect($assignments)->map(fn (Assignment $assignment) => Shift::where('id', $assignment->shiftId)->update(['soldier_id' => $assignment->soldierId])); + if (empty($assignments)) { + return; + } + + $chunks = array_chunk($assignments->toArray(), 80); + + foreach ($chunks as $chunk) { + $cases = []; + $ids = []; + + collect($chunk)->each(function ($assignment) use (&$ids, &$cases) { + $ids[] = $assignment->shiftId; + $cases[] = "WHEN id = {$assignment->shiftId} THEN {$assignment->soldierId}"; + }); + + Shift::whereIn('id', $ids) + ->update(['soldier_id' => \DB::raw('CASE '.implode(' ', $cases).' END')]); + } } } diff --git a/app/Services/ManualAssignment.php b/app/Services/ManualAssignment.php index 07e3327..8b9b2bc 100644 --- a/app/Services/ManualAssignment.php +++ b/app/Services/ManualAssignment.php @@ -2,14 +2,12 @@ namespace App\Services; -use App\Enums\Availability; use App\Models\Department; use App\Models\Shift; use App\Models\Soldier; use App\Models\Team; use App\Models\User; use App\Services\Soldier as SoldierService; -use Illuminate\Support\Facades\Cache; class ManualAssignment { @@ -35,7 +33,6 @@ public function getSoldiers($departmentName = null) protected function initSoldiersData($departmentName) { - $this->soldiers = Cache::remember('users', 30 * 60, fn () => User::all()); match ($this->soldierType) { 'reserves' => $this->filterReserves(), 'my_soldiers' => $this->filterMySoldiers(), @@ -47,60 +44,69 @@ protected function initSoldiersData($departmentName) protected function filterReserves() { - $this->soldiers = $this->soldiers - ->filter(function ($user) { - $soldier = $this->getSoldierBy($user->userable_id); - - return $soldier->is_reservist && $soldier->id != auth()->user()->userable_id; - }); + $this->soldiers = Soldier::whereJsonContains('qualifications', $this->shift->taskType) + ->where('is_reservist', true) + ->where('id', '!=', auth()->user()->userable_id) + ->get(); } protected function filterMySoldiers() { - $this->soldiers = $this->soldiers - ->filter(function ($user) { - $currentUserId = auth()->user()->userable_id; - $role = current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])); - $soldier = $this->getSoldierBy($user->userable_id); - - return match ($role) { - 'department-commander' => $soldier?->team?->department?->commander_id == $currentUserId - && $soldier?->id != $currentUserId, - 'team-commander' => $soldier?->team?->commander_id == $currentUserId - && $soldier?->id != $currentUserId - }; - }); + $currentUserId = auth()->user()->userable_id; + $role = current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])); + $members = collect(); + + switch ($role) { + case 'department-commander': + $department = Department::whereHas('commander', function ($query) use ($currentUserId) { + $query->where('id', $currentUserId); + })->first(); + + $memberIds = $department?->teams->flatMap(fn (Team $team) => $team->members->pluck('id')) ?? collect(); + $commanderIds = $department?->teams->pluck('commander_id') ?? collect(); + + $members = $memberIds->merge($commanderIds)->unique(); + break; + case 'team-commander': + $members = Team::whereHas('commander', function ($query) use ($currentUserId) { + $query->where('id', $currentUserId); + })->first()?->members->pluck('id') ?? collect([]); + break; + } + + $this->soldiers = Soldier::whereJsonContains('qualifications', $this->shift->taskType) + ->where('is_reservist', false) + ->where('id', '!=', $currentUserId) + ->whereIn('id', $members) + ->get(); } protected function filterDepartment($departmentName) { - $this->soldiers = $this->soldiers - ->filter(function ($user) use ($departmentName) { - $soldier = Soldier::where('id', '=', $user->userable_id)->first(); - $department = Department::where('name', $departmentName)->first(); - - return $soldier?->team?->department?->name == $departmentName - || collect($department->teams)->filter(fn (Team $team): bool => $team->commander_id === $soldier->id)->isNotEmpty() - || $soldier->id == $department->commander_id; - }); + $department = Department::where('name', $departmentName)->first(); + $this->soldiers = Soldier::whereJsonContains('qualifications', $this->shift->taskType) + ->where('is_reservist', false) + ->where('id', '!=', auth()->user()->userable_id) + ->where(function (Soldier $query) use ($department) { + $query->whereIn('id', $department?->teams->flatMap(fn (Team $team) => $team->members->pluck('id')) ?? collect()) + ->orWhereIn('id', $department?->teams->pluck('commander_id') ?? collect()) + ->orWhere('id', $department?->commander_id); + })->get(); } protected function filterMatching() { - $this->soldiers = $this->soldiers - ->filter(function ($user) { - $soldier = $this->getSoldierBy($user->userable_id); - - return ! $soldier->is_reservist && $soldier->id != auth()->user()->userable_id; - }); + $this->soldiers = Soldier::whereJsonContains('qualifications', $this->shift->taskType) + ->where('is_reservist', false) + ->where('id', '!=', auth()->user()->userable_id) + ->get(); } protected function getSoldiersDetails() { $this->soldiers = $this->soldiers ->map( - function (User $user) { - $soldier = $this->getSoldierBy($user->userable_id); + function (Soldier $soldier) { $constraints = $this->getConstraints($soldier); $soldiersShifts = $this->getSoldiersShifts($soldier->id, false); @@ -115,11 +121,6 @@ function (User $user) { ); } - protected function getSoldierBy($userable_id) - { - return Soldier::where('id', $userable_id)->first(); - } - public function amIAvailable(): bool { $me = Soldier::find(auth()->user()->userable_id); @@ -130,13 +131,12 @@ public function amIAvailable(): bool $capacityHold = Helpers::capacityHold($myShifts); - $soldier = Helpers::buildSoldier($me, $constraints, $myShifts, $capacityHold); + $concurrentsShifts = $this->getSoldiersShifts($me->id, true); - return $soldier->isQualified($this->shift->taskType) - && $soldier->isAvailableByMaxes($this->shift) - && $soldier->isAvailableByConstraints($this->shift->range) != Availability::NO - && $soldier->isAvailableByShifts($this->shift) - && $soldier->isAvailableBySpaces($this->shift->getShiftSpaces($soldier->shifts)); + $soldier = Helpers::buildSoldier($me, $constraints, $myShifts, $capacityHold, $concurrentsShifts); + + return $soldier->isAbleTake($this->shift, true) + && $soldier->isAvailableByConcurrentsShifts($this->shift); } protected function getConstraints(Soldier $soldier) @@ -151,13 +151,7 @@ protected function getSoldiersShifts($soldierId, $inParallel) protected function getAvailableSoldiers() { - $availableSoldiers = $this->soldiers->filter( - fn (SoldierService $soldier) => $soldier->isQualified($this->shift->taskType) - && $soldier->isAvailableByMaxes($this->shift) - && $soldier->isAvailableByConstraints($this->shift->range) != Availability::NO - && $soldier->isAvailableByShifts($this->shift) - && $soldier->isAvailableBySpaces($this->shift->getShiftSpaces($soldier->shifts)) - ); + $availableSoldiers = $this->soldiers->filter(fn (SoldierService $soldier) => $soldier->isAbleTake($this->shift, true)); $soldiersWithConcurrentsShifts = collect([]); $availableSoldiers->map(function (SoldierService $soldier) use ($soldiersWithConcurrentsShifts) { diff --git a/app/Services/MaxData.php b/app/Services/MaxData.php index f3adfee..8f7be43 100644 --- a/app/Services/MaxData.php +++ b/app/Services/MaxData.php @@ -18,30 +18,4 @@ public function remaining(): float { return $this->max - $this->used; } - - protected function relativeLoad(): float - { - if ($this->max == 0) { - return 0; - } - - return $this->used / $this->max; - } - - protected function singleValue(): float - { - if ($this->max == 0) { - return 0; - } - - return 1 / $this->max; - } - - public function calculatedRelativeLoad(): float - { - $relativeLoad = $this->relativeLoad(); - $pointValue = $this->singleValue(); - - return ($relativeLoad * 4 + $pointValue) / 5; - } } diff --git a/app/Services/PointedSchedule.php b/app/Services/PointedSchedule.php index 3d76b29..fd91c05 100644 --- a/app/Services/PointedSchedule.php +++ b/app/Services/PointedSchedule.php @@ -4,7 +4,6 @@ use App\Enums\Availability; use App\Enums\DaysInWeek; -use App\Enums\RotationResult; use App\Enums\TaskKind; class PointedSchedule @@ -307,50 +306,50 @@ protected function assign() { $this->courses ->filter(fn (Course $course) => $course->max > 0) - ->map(function (Course $course) { + ->each(function (Course $course) { + if (collect($this->shiftsData)->contains(fn ($shifts): bool => collect($shifts)->count() > 0) && $course->max >= 2) { + $this->assignShiftsForCourse($course, true); + } + }) + ->each(function (Course $course) { if (collect($this->shiftsData)->contains(fn ($shifts): bool => collect($shifts)->count() > 0)) { - $this->assignShiftsForCourse($course); + $this->assignShiftsForCourse($course, false); } }); } - protected function assignShiftsForCourse(Course $course) + protected function assignShiftsForCourse(Course $course, $isSingleRotation) { $rotationSize = $this->maximalRotationSize; - while ($course->remaining('pointsMaxData') > 0 && $rotationSize >= $this->minimalRotationSize) { - $rotationResult = $this->rotation($course->soldiers, $rotationSize); - match ($rotationResult) { - RotationResult::SUCCESS => [ - $this->saveRotationAssigments(), - ], - RotationResult::SUCCESS_WITH_GAP => [ - $this->saveRotationAssigments(), - $rotationSize = 0, - ], - RotationResult::FAILED => [ - $this->clearRotationAsssigments(), - $rotationSize /= 2, - ], - }; + while (! $course->hasGap && $course->remaining('pointsMaxData') > 0 && $rotationSize >= $this->minimalRotationSize) { + $rotationResult = $this->rotation($course, $rotationSize); + if ($rotationResult) { + $this->saveRotationAssigments(); + } else { + $this->clearRotationAsssigments(); + $rotationSize /= 2; + } + if ($isSingleRotation) { + return; + } } } - protected function rotation($soldiers, $rotationSize): RotationResult + protected function rotation($course, $rotationSize) { - $isGapExists = false; - foreach ($soldiers as $soldier) { + foreach ($course->soldiers as $soldier) { $assignedPoints = $this->assignRotationShiftsToSoldier($soldier, $rotationSize); $gap = $rotationSize - $assignedPoints; if ($gap > $this->allowedGap) { - return RotationResult::FAILED; + return false; } if ($gap > 0) { - $isGapExists = true; + $course->hasGap = true; } } - return $isGapExists ? RotationResult::SUCCESS_WITH_GAP : RotationResult::SUCCESS; + return true; } protected function assignRotationShiftsToSoldier(Soldier $soldier, float $rotationSize) diff --git a/app/Services/Range.php b/app/Services/Range.php index c6ff40b..18ffcce 100644 --- a/app/Services/Range.php +++ b/app/Services/Range.php @@ -42,7 +42,7 @@ public function isRangeInclude(DaysInWeek $dayInWeek): bool $endDayIndex = $this->end->dayOfWeek; $checkDayIndex = date('N', strtotime($dayInWeek->value)); if ($startDayIndex <= $endDayIndex) { - return $this->start->diffInDays($this->end) > 5 || ($checkDayIndex >= $startDayIndex && $checkDayIndex <= $endDayIndex); + return $this->start->copy()->diffInDays($this->end->copy()) > 5 || ($checkDayIndex >= $startDayIndex && $checkDayIndex <= $endDayIndex); } return $checkDayIndex >= $startDayIndex || $checkDayIndex <= $endDayIndex; @@ -50,23 +50,36 @@ public function isRangeInclude(DaysInWeek $dayInWeek): bool public function getDayAfterWeekend(): Range { - $nextDayAfterWeekend = $this->end->next(DaysInWeek::SUNDAY->value)->setTime(8, 0); + $nextDayAfterWeekend = $this->end->englishDayOfWeek == DaysInWeek::SUNDAY->value ? $this->end->copy() : $this->end->copy()->next(DaysInWeek::SUNDAY->value)->setTime(8, 0); return new Range($nextDayAfterWeekend, $nextDayAfterWeekend->copy()->addDay()); } public function getNightSpaces() { - return [$this->getDayBeforeNight(), $this->getDayAfterNight()]; - } + $startHour = $this->start->hour; + $endTomorrow = $this->end->copy()->addDay(); + if ($startHour >= '20' && $startHour <= '23') { + return [ + new Range(Carbon::create($this->start->year, $this->start->month, $this->start->day, 00, 00), $this->start), + new Range($this->end, Carbon::create($endTomorrow->year, $endTomorrow->month, $endTomorrow->day, 7, 59)), + ]; + } + if ($startHour >= '0' && $startHour <= '1') { + $startYesterday = $this->start->copy()->subDay(); - public function getDayBeforeNight(): Range - { - return new Range($this->start->copy()->subHours(12), $this->start); + return [ + new Range(Carbon::create($startYesterday->year, $startYesterday->month, $startYesterday->day, 00, 00), $this->start), + new Range($this->end, Carbon::create($endTomorrow->year, $endTomorrow->month, $endTomorrow->day, 7, 59)), + ]; + } } - public function getDayAfterNight(): Range + public function getNightInWeekendSpaces() { - return new Range($this->end, $this->end->copy()->addHours(12)); + return [ + new Range($this->start->copy()->setHour(8)->setMinutes(30), $this->start->copy()), + new Range($this->end->copy(), $this->end->copy()->setHour(19)->setMinutes(59)), + ]; } } diff --git a/app/Services/Schedule.php b/app/Services/Schedule.php index b1aa5bb..0e7e33a 100644 --- a/app/Services/Schedule.php +++ b/app/Services/Schedule.php @@ -2,7 +2,6 @@ namespace App\Services; -use App\Enums\Availability; use App\Enums\TaskKind; class Schedule @@ -11,262 +10,49 @@ class Schedule public $soldiers; - public $shiftsData; - - public $soldiersDict; - public $assignments; - public $SHIFT_DUMBBELLS; - - public $SOLDIER_DUMBBELLS; - public function __construct($shifts, $soldiers) { - $this->shifts = collect($shifts); $this->soldiers = collect($soldiers); - $this->shiftsData = collect([]); - $this->soldiersDict = collect([]); + $this->shifts = collect($shifts); $this->assignments = collect([]); - $this->SHIFT_DUMBBELLS = collect([ - 'POINTS_RATIO' => 0.29, - 'SHIFTS_RATIO' => 0.39, - 'WEEKENDS_RATIO' => 0.04, - 'NIGHTS_RATIO' => 0.04, - 'SHIFT_AVAILABILITY' => 0.23, - 'BLOCK_POINTS' => 0.05, - ]); - $this->SOLDIER_DUMBBELLS = collect([ - 'LOW_CONSTRAINT' => 0.45, - 'POINTS_RELATIVE_LOAD' => 0.4, - 'SHIFTS_RELATIVE_LOAD' => 0.08, - 'NIGHT_RELATIVE_LOAD' => 0.01, - 'WEEKEND_RELATIVE_LOAD' => 0.01, - 'MULTITASKING_VALUE' => 0.05, - ]); - } - - public function schedule(): void - { - $this->initShiftsData(); - $this->initSoldiersData(); - $this->assignShifts(); - Helpers::updateShiftTable($this->assignments); } - protected function initShiftsData(): void + public function schedule() { - $groupedShifts = collect($this->shifts)->groupBy('taskType'); - $groupedShifts->each(function ($shifts, $taskType) { - $this->addShiftsDataByTask($taskType, collect($shifts)); - }); + $this->assignPointedShifts(); + $this->assignNotPointedShifts(); + $this->saveAssignments(); } - protected function addShiftsDataByTask(string $taskType, $shifts): void + protected function assignPointedShifts() { - $soldiers = $this->soldiers->filter(function (Soldier $soldier) use ($taskType): bool { - return $soldier->isQualified($taskType); - }); - $taskWeight = $this->getTaskWeight($shifts, $soldiers); - $shifts->map(fn ($shift) => $this->addShiftData($shift, $soldiers, $taskWeight)); + $pointedShifts = $this->shifts->filter(fn (Shift $shift): bool => $shift->points > 0); + $soldiers = $this->soldiers->filter(fn (Soldier $soldier) => $soldier->pointsMaxData->remaining() > 0); + $pointedSchedule = new PointedSchedule($soldiers, $pointedShifts); + $assignments = $pointedSchedule->schedule(); + $this->assignments->push(...$assignments); } - protected function getTaskWeight($shifts, $soldiers): array + protected function assignNotPointedShifts() { - $requiredPoints = collect($shifts)->sum('points'); - $requiredNights = collect($shifts)->filter(fn (Shift $shift) => ($shift->kind === TaskKind::NIGHT->value))->count(); - $requiredWeekends = collect($shifts) - ->filter(fn (Shift $shift) => ($shift->kind === TaskKind::WEEKEND->value)) - ->sum(fn (Shift $shift) => $shift->points); - $requiredShifts = count($shifts); - - $availablePoints = collect($soldiers)->sum(fn (Soldier $soldier) => $soldier->pointsMaxData->remaining()); - - $availableNights = collect($soldiers)->sum(fn (Soldier $soldier) => $soldier->nightsMaxData->remaining()); - - $availableWeekends = collect($soldiers)->sum(fn (Soldier $soldier) => $soldier->weekendsMaxData->remaining()); - - $availableShifts = collect($soldiers)->sum(fn (Soldier $soldier) => $soldier->shiftsMaxData->remaining()); - - $weight = collect([ - 'POINTS_RATIO' => $this->getRatio($requiredPoints, $availablePoints), - 'NIGHTS_RATIO' => $this->getRatio($requiredNights, $availableNights), - 'WEEKENDS_RATIO' => $this->getRatio($requiredWeekends, $availableWeekends), - 'SHIFTS_RATIO' => $this->getRatio($requiredShifts, $availableShifts), + $taskKinds = collect([ + TaskKind::NIGHT->value => 1, + TaskKind::REGULAR->value => 3, + TaskKind::ALERT->value => 1, ]); - - $weight->each(function ($value, $key) use (&$weight) { - $weight[$key] = $value * $this->SHIFT_DUMBBELLS[$key]; - }); - - return $weight->all(); - } - - protected function addShiftData(Shift $shift, $soldiers, $taskWeight) - { - $potentialSoldiers = $this->getPotentialSoldiers($soldiers, $shift->range); - $shiftData = new ShiftData( - $shift, - $potentialSoldiers, - $this->getShiftWeight( - $taskWeight, - $shift, - $soldiers->count(), - $potentialSoldiers->count() - ) - ); - $this->shiftsData->push($shiftData); - } - - protected function getRatio(float $required, float $available): float - { - return $available == 0 ? 0 : (float) $this->maximumOne((float) $required / $available); - } - - protected function maximumOne(float $number): float - { - return $number > 1 ? 1 : $number; - } - - protected function getPotentialSoldiers($soldiers, Range $range) - { - $potentialSoldiers = $soldiers->filter(function (Soldier $soldier) use ($range) { - return $soldier->isAvailableByConstraints($range) != Availability::NO; - })->map(function (Soldier $soldier) use ($range): PotentialSoldierData { - $availability = $soldier->isAvailableByConstraints($range); - - return new PotentialSoldierData( - $soldier->id, - $availability == Availability::BETTER_NOT - ); + $taskKinds->each(function ($gap, $taskKind) { + $shifts = $this->shifts->filter(fn (Shift $shift): bool => $shift->kind == $taskKind && + $shift->points == 0); + $notPointedSchedule = new NotPointedSchedule($taskKind, $this->soldiers, $shifts, $gap); + $assignments = $notPointedSchedule->schedule(); + $this->assignments->push(...$assignments); }); - - return $potentialSoldiers; } - protected function getShiftWeight($taskWeight, Shift $shift, int $soldiersCount, int $availableSoldiersCount): float + protected function saveAssignments() { - $weight = $taskWeight['SHIFTS_RATIO'] + $shift->points > 0 ? $taskWeight['POINTS_RATIO'] : 0; - - match ($shift->kind) { - TaskKind::WEEKEND->value => $weight += $taskWeight['WEEKENDS_RATIO'], - TaskKind::NIGHT->value => $weight += $taskWeight['NIGHTS_RATIO'], - default => null - }; - - $weight += $this->getShiftAvailabilityRatio($soldiersCount, $availableSoldiersCount) - * $this->SHIFT_DUMBBELLS['SHIFT_AVAILABILITY']; - - $weight += $this->getShiftBlockPoints($shift->points) * $this->SHIFT_DUMBBELLS['BLOCK_POINTS']; - - return $weight; - } - - protected function getShiftAvailabilityRatio(int $soldiersCount, int $availableSoldiers): float - { - if ($availableSoldiers == 0) { - return 0; - } - - return (float) ($soldiersCount - $availableSoldiers) / $soldiersCount; - } - - protected function getShiftBlockPoints(float $points): float - { - if ($points == 0) { - return 0; - } - - return (float) $points / 3; - } - - protected function initSoldiersData(): void - { - $this->soldiers->map(fn (Soldier $soldier) => $this->soldiersDict->put($soldier->id, $soldier)); - } - - protected function assignShifts() - { - $sortedShifts = $this->getSortedShiftsList(); - collect($sortedShifts)->map(fn (ShiftData $shift) => $this->assignShift($shift)); - } - - protected function getSortedShiftsList() - { - return $this->shiftsData->sortByDesc('weight'); - } - - protected function assignShift(ShiftData $shiftData) - { - $soldiers = $this->getPotentialSoldiersData($shiftData); - foreach ($soldiers as $soldier) { - $success = $this->tryAssign($soldier, $shiftData->shift); - if ($success) { - return; - } - } - } - - protected function getPotentialSoldiersData(ShiftData $shiftData) - { - $soldiers = collect([]); - collect($shiftData->potentialSoldiers)->map(function (PotentialSoldierData $potentialSoldierData) use (&$soldiers, $shiftData) { - $soldiers->push($this->getSoldierAndWeight($potentialSoldierData, $shiftData->shift)); - }); - - return $this->getSortedPotentialSoldiers($soldiers); - } - - protected function getSoldierAndWeight(PotentialSoldierData $potentialSoldierData, Shift $shift) - { - $soldier = $this->soldiersDict[$potentialSoldierData->soldierId]; - $weightDict = [ - 'LOW_CONSTRAINT' => $potentialSoldierData->isLowConstraint ? 1 : 0, - 'POINTS_RELATIVE_LOAD' => $shift->points > 0 ? $soldier->pointsMaxData->calculatedRelativeLoad() : 0, - 'SHIFTS_RELATIVE_LOAD' => $soldier->shiftsMaxData->calculatedRelativeLoad(), - 'NIGHT_RELATIVE_LOAD' => $shift->kind !== TaskKind::NIGHT->value ? 0 : $soldier->nightsMaxData->calculatedRelativeLoad(), - 'WEEKEND_RELATIVE_LOAD' => $shift->kind !== TaskKind::WEEKEND->value ? 0 : $soldier->weekendsMaxData->calculatedRelativeLoad(), - 'MULTITASKING_VALUE' => $this->getMultitaskingValue( - $soldier->qualifications->count() - ), - ]; - $weight = $this->getTotalWeight($weightDict); - - return [$soldier, $weight]; - } - - protected function getMultitaskingValue(int $qualificationsNumber): float - { - return (float) (1 - ((float) (1 / $qualificationsNumber))); - } - - protected function getTotalWeight($weightData): float - { - $weight = 0; - collect($weightData)->map(function ($value, $key) use (&$weight) { - $weight += (float) ($value * $this->SOLDIER_DUMBBELLS[$key]); - }); - - return $weight; - } - - protected function getSortedPotentialSoldiers($soldiers) - { - $sortedSoldiers = $soldiers->sortBy(fn ($item) => $item[1]); - - return $sortedSoldiers->map(fn ($soldier) => $soldier[0]); - } - - protected function tryAssign(Soldier $soldier, Shift $shift): bool - { - $spaces = $shift->getShiftSpaces($soldier->shifts); - if ($soldier->isAbleTake($shift, $spaces)) { - $soldier->assign($shift, $spaces); - $this->assignments->push(new Assignment($shift->id, $soldier->id)); - - return true; - } - - return false; + Helpers::updateShiftTable($this->assignments); } } diff --git a/app/Services/Shift.php b/app/Services/Shift.php index 1e41652..17f0c69 100644 --- a/app/Services/Shift.php +++ b/app/Services/Shift.php @@ -9,6 +9,8 @@ class Shift { public $id; + public $taskId; + public $taskType; public $range; @@ -17,16 +19,28 @@ class Shift public $kind; + public $isAssigned; + public $inParalelTasks; - public function __construct($id, string $taskType, $start, $end, float $points, $kind, $inParalelTasks = []) + public $isAttached; + + public function __construct($id, int $taskId, string $taskType, $start, $end, float $points, $kind, $inParalelTasks = []) { $this->id = $id; + $this->taskId = $taskId; $this->taskType = $taskType; $this->range = new Range($start, $end); $this->points = $points; $this->kind = $kind; + $this->isAssigned = false; $this->inParalelTasks = $inParalelTasks; + $this->isAttached = false; + } + + public function isAssigned(): bool + { + return $this->isAssigned; } public function getShiftSpaces($shifts) @@ -40,7 +54,23 @@ public function getShiftSpaces($shifts) protected function getWeekendSpaces($shifts) { - return $this->isFullWeekend($shifts) ? [$this->range->getDayAfterWeekend()] : null; + $spaces = collect([]); + if ($this->isNight()) { + $spaces->push(...$this->range->getNightInWeekendSpaces()); + } + if ($this->isFullWeekend($shifts)) { + $spaces->push($this->range->getDayAfterWeekend()); + } + + return $spaces?->toArray(); + } + + protected function isNight() + { + return ($this->range->start->hour >= 19 + && $this->range->start->hour < 23) && + ($this->range->end->hour > 6 + && $this->range->end->hour < 9); } protected function isFullWeekend($shifts) @@ -67,7 +97,7 @@ protected function isShiftInclude(Range $range, DaysInWeek $dayInWeek): bool protected function isAttached($shifts, $range, DaysInWeek $dayInWeek): bool { - $expectedDate = $dayInWeek == DaysInWeek::FRIDAY ? $range->start->subDay()->startOfDay() : $range->end->addDay()->startOfDay(); + $expectedDate = $dayInWeek == DaysInWeek::FRIDAY ? $range->start->copy()->subDay()->startOfDay() : $range->end->copy()->addDay()->startOfDay(); return $shifts ? collect($shifts)->contains( function ($shift) use ($expectedDate): bool { diff --git a/app/Services/ShiftData.php b/app/Services/ShiftData.php index 74606ea..82afd0a 100644 --- a/app/Services/ShiftData.php +++ b/app/Services/ShiftData.php @@ -6,14 +6,14 @@ class ShiftData { public $shift; - public $potentialSoldiers; - public $weight; - public function __construct(Shift $shift, $potentialSoldiers, float $weight) + public $potentialSoldiers; + + public function __construct(Shift $shift, float $weight, $potentialSoldiers = []) { $this->shift = $shift; - $this->potentialSoldiers = collect($potentialSoldiers); $this->weight = $weight; + $this->potentialSoldiers = collect($potentialSoldiers); } } diff --git a/app/Services/Soldier.php b/app/Services/Soldier.php index cb3ee02..f9c68df 100644 --- a/app/Services/Soldier.php +++ b/app/Services/Soldier.php @@ -10,6 +10,8 @@ class Soldier { public $id; + public $course; + public $pointsMaxData; public $shiftsMaxData; @@ -30,9 +32,10 @@ class Soldier public $concurrentsShifts; - public function __construct($id, MaxData $maxPoints, MaxData $maxShifts, MaxData $maxNights, MaxData $maxWeekends, MaxData $alertsMaxData, MaxData $inParallelMaxData, $qualifications, $constraints, $shifts = [], $concurrentsShifts = []) + public function __construct($id, $course, MaxData $maxPoints, MaxData $maxShifts, MaxData $maxNights, MaxData $maxWeekends, MaxData $alertsMaxData, MaxData $inParallelMaxData, $qualifications, $constraints, $shifts = [], $concurrentsShifts = []) { $this->id = $id; + $this->course = $course; $this->pointsMaxData = $maxPoints; $this->shiftsMaxData = $maxShifts; $this->nightsMaxData = $maxNights; @@ -45,48 +48,64 @@ public function __construct($id, MaxData $maxPoints, MaxData $maxShifts, MaxData $this->concurrentsShifts = collect($concurrentsShifts); } + public function hasMaxes(): bool + { + return ! ( + $this->shiftsMaxData->max === 0 && + $this->nightsMaxData->max === 0 && + $this->weekendsMaxData->max === 0 && + $this->alertsMaxData->max === 0 + ); + } + public function isQualified(string $taskType): bool { return $this->qualifications->contains($taskType); } - public function isAbleTake(Shift $shift, $spaces): bool + public function isAbleTake(Shift $shift, $ignoreLowConstraint): bool { - return $this->isAvailableByMaxes($shift) + $spaces = $shift->getShiftSpaces($this->shifts); + $availability = $this->isAvailableByConstraints($shift->range); + $isAvailableByConstraint = $ignoreLowConstraint ? $availability != Availability::NO : $availability == Availability::YES; + + return $this->isQualified($shift->taskType) + && $this->isAvailableByMaxes($shift) && $this->isAvailableByShifts($shift) - && $this->isAvailableBySpaces($spaces); + && $this->isAvailableBySpaces($spaces) + && $isAvailableByConstraint; } public function isAvailableByMaxes(Shift $shift): bool { - if ( - ($shift->kind === TaskKind::WEEKEND->value && $this->weekendsMaxData->remaining() < $shift->points) - || ($shift->kind === TaskKind::NIGHT->value && $this->nightsMaxData->remaining() < 1) - || ($shift->kind === TaskKind::ALERT->value && $this->alertsMaxData->remaining() < 1) - || ($shift->kind === TaskKind::INPARALLEL->value && $this->inParallelMaxData->remaining() < 1) - || $this->pointsMaxData->remaining() < $shift->points - || $this->shiftsMaxData->remaining() < 1 - ) { + if ($this->pointsMaxData->remaining() < $shift->points) { return false; } - return true; + return match ($shift->kind) { + TaskKind::WEEKEND->value => $this->weekendsMaxData->remaining() >= $shift->points, + TaskKind::NIGHT->value => $this->nightsMaxData->remaining() > 0 && $this->shiftsMaxData->remaining() > 0, + TaskKind::INPARALLEL->value => $this->inParallelMaxData->remaining() > 0, + TaskKind::ALERT->value => $this->alertsMaxData->remaining() > 0, + TaskKind::REGULAR->value => $this->shiftsMaxData->remaining() > 0, + }; } public function isAvailableByShifts(Shift $shift): bool { - return ! $this->shifts->contains(function (Shift $soldierShift) use ($shift): bool { - return $soldierShift->range->isConflict($shift->range) && ! collect($shift->inParalelTasks)->contains($shift->taskType); - }); + return ! $this->shifts->contains(fn (Shift $soldierShift) => $soldierShift->range->isConflict($shift->range) + && (! collect($shift->inParalelTasks)->contains($soldierShift->taskType)) + ); } public function isAvailableBySpaces($spaces): bool { if ($spaces) { foreach ($spaces as $space) { - return ! $this->shifts->contains(function ($shift) use ($space) { - return $shift->range->isConflict($space); - }); + return ! $this->shifts->contains(fn (Shift $shift) => $shift->id != 0 && + $shift->range->isConflict($space) + ) + && ! $this->concurrentsShifts->contains(fn (Shift $concurrentsShift) => $concurrentsShift->range->isConflict($space)); } } @@ -95,9 +114,9 @@ public function isAvailableBySpaces($spaces): bool public function isAvailableByConcurrentsShifts(Shift $shift) { - return ! $this->concurrentsShifts->contains(function (Shift $concurrentsShift) use ($shift): bool { - return $concurrentsShift->range->isConflict($shift->range) && ! collect($concurrentsShift->inParalelTasks)->contains($shift->taskType); - }); + return ! $this->concurrentsShifts->contains(fn (Shift $concurrentsShift) => $concurrentsShift->range->isConflict($shift->range) && + ! (collect($concurrentsShift->inParalelTasks)->contains($shift->taskType) + || collect($shift->inParalelTasks)->contains($concurrentsShift->taskType))); } public function isAvailableByConstraints(Range $range): Availability @@ -126,7 +145,10 @@ public function assign(Shift $shift, $spaces): void $this->pointsMaxData->used += $shift->points; match ($shift->kind) { TaskKind::WEEKEND->value => $this->weekendsMaxData->used += $shift->points, - TaskKind::NIGHT->value => $this->updateNightAndShifts(), + TaskKind::NIGHT->value => [ + $this->nightsMaxData->used += 1, + $this->shiftsMaxData->used += 1, + ], TaskKind::ALERT->value => $this->alertsMaxData->used += 1, TaskKind::INPARALLEL->value => $this->inParallelMaxData->used += 1, TaskKind::REGULAR->value => $this->shiftsMaxData->used += 1, @@ -135,12 +157,30 @@ public function assign(Shift $shift, $spaces): void protected function addSpaces($spaces) { - collect($spaces)->map(fn ($space) => $this->shifts->push(new Shift(0, '', $space->start, $space->end, 0, TaskKind::REGULAR->value, []))); + collect($spaces)->map(fn ($space) => $this->shifts->push(new Shift(0, 0, '', $space->start, $space->end, 0, TaskKind::REGULAR->value, []))); + } + + public function unassign(Shift $shift, $spaces) + { + $this->shifts = $this->shifts->filter(fn (Shift $existShift) => $shift->id !== $existShift->id); + $this->removeSpaces($spaces); + $this->pointsMaxData->used -= $shift->points; + match ($shift->kind) { + TaskKind::WEEKEND->value => $this->weekendsMaxData->used -= $shift->points, + TaskKind::NIGHT->value => [ + $this->nightsMaxData->used -= 1, + $this->shiftsMaxData->used -= 1, + ], + TaskKind::ALERT->value => $this->alertsMaxData->used -= 1, + TaskKind::INPARALLEL->value => $this->inParallelMaxData->used -= 1, + TaskKind::REGULAR->value => $this->shiftsMaxData->used -= 1, + }; } - protected function updateNightAndShifts() + protected function removeSpaces($spaces) { - $this->nightsMaxData->used += 1; - $this->shiftsMaxData->used += 1; + collect($spaces)->map(function ($space) { + $this->shifts = $this->shifts->filter(fn (Shift $existSpace) => $space->start !== $existSpace->range->start && $space->end !== $existSpace->range->end); + }); } } diff --git a/entrypoint.sh b/entrypoint.sh index 3673b7f..25b397e 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -1,5 +1,7 @@ #!/bin/bash +export OCTANE_SKIP_FRANKENPHP_INSTALL=1 + set -e : "${CONTAINER_MODE:=app}" From 8d7568fa4ecb75c305494b602ee753287057d0aa Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 10 Jul 2025 13:39:42 +0300 Subject: [PATCH 213/259] commit befor --- .github/workflows/php-build-and-deploy.yml | 2 +- Dockerfile | 3 +- app/Filament/Widgets/CalendarWidget.php | 16 +- app/Filament/Widgets/ChartWidget.php | 2 +- app/Models/Shift.php | 12 +- .../ChartResource/Widgets/ChartFilter.php | 18 +- app/Resources/SoldierResource.php | 4 +- app/Resources/TaskResource.php | 5 +- .../TaskResource/Pages/CreateTask.php | 1 - app/Resources/TeamResource.php | 4 +- app/Services/Algorithm.php | 15 +- app/Services/ConcurrentTasks.php | 31 +-- app/Services/Course.php | 3 + app/Services/FixedConstraints.php | 4 +- app/Services/Helpers.php | 42 ++- app/Services/ManualAssignment.php | 108 ++++---- app/Services/MaxData.php | 26 -- app/Services/PointedSchedule.php | 49 ++-- app/Services/Range.php | 31 ++- app/Services/Schedule.php | 262 ++---------------- app/Services/Shift.php | 36 ++- app/Services/ShiftData.php | 8 +- app/Services/Soldier.php | 94 +++++-- entrypoint.sh | 2 + 24 files changed, 308 insertions(+), 470 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 014eb61..45e14ea 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_26 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_32 flavor: | latest=false tags: | diff --git a/Dockerfile b/Dockerfile index 5ec8223..35ae08c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,7 @@ ARG php_version=8.3 -FROM dunglas/frankenphp:1.1-php${php_version} AS base +# FROM dunglas/frankenphp:1.1-php${php_version} AS base +FROM dunglas/frankenphp:1.1.5-php${php_version} AS base WORKDIR /laravel SHELL ["/bin/bash", "-eou", "pipefail", "-c"] diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 9f4151c..a4f77e7 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -252,17 +252,19 @@ protected function getBasicActions() { return [ EditAction::make() - ->fillForm( - fn (Model $record, array $arguments) => method_exists($this->model, 'fillForm') + ->fillForm(fn (Model $record, array $arguments) => method_exists($this->model, 'fillForm') ? (new $this->model)->fillForm($record, $arguments) : [ ...$record->getAttributes(), 'start_date' => $arguments['event']['start'] ?? $record->start_date, 'end_date' => $arguments['event']['end'] ?? $record->end_date, - ] - ) + ]) ->visible(function (Model $record, $arguments) { if ($record->start_date < now()) { + if (! empty($arguments['event']) && $arguments['type'] == 'drop') { + $this->refreshRecords(); + } + return false; } if (! empty($arguments['event']) && $arguments['event']['start'] < now()) { @@ -386,15 +388,13 @@ protected function displayButton(): bool protected function viewAction(): Action { return ViewAction::make() - ->fillForm( - fn (Model $record, array $arguments) => method_exists($this->model, 'fillForm') + ->fillForm(fn (Model $record, array $arguments) => method_exists($this->model, 'fillForm') ? (new $this->model)->fillForm($record, $arguments) : [ ...$record->getAttributes(), 'start_date' => $arguments['event']['start'] ?? $record->start_date, 'end_date' => $arguments['event']['end'] ?? $record->end_date, - ] - ) + ]) ->modalFooterActions( function (ViewAction $action, FullCalendarWidget $livewire) { if ( diff --git a/app/Filament/Widgets/ChartWidget.php b/app/Filament/Widgets/ChartWidget.php index 1d4a69c..e7f3a49 100644 --- a/app/Filament/Widgets/ChartWidget.php +++ b/app/Filament/Widgets/ChartWidget.php @@ -83,7 +83,7 @@ protected function getOptions(): array|RawJs|null callbacks: { label: function(context) { const soldierIndex = context.dataIndex; - const soldierName = context.dataset.labels ? context.dataset.labels[soldierIndex] : 'Unknown Soldier'; + const soldierName = context.dataset.labels ? context.dataset.labels[soldierIndex] : __('Unknown Soldier'); const value = context.parsed.y; return soldierName + ': ' + value; diff --git a/app/Models/Shift.php b/app/Models/Shift.php index 1c84321..5d3d8da 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -56,7 +56,7 @@ public function soldier(): BelongsTo private function getTaskParallelWeight() { - return $this->task?->parallel_weight; + return $this->task()->withTrashed()->first()->parallel_weight; } public function getTaskNameAttribute() @@ -64,13 +64,13 @@ public function getTaskNameAttribute() $user_name = User::where('userable_id', $this->soldier_id)->get(['first_name', 'last_name']); return $this->soldier_id == auth()->user()->userable_id - ? $this->task?->name - : $this->task?->name.' '.$user_name->first()?->first_name.' '.$user_name->first()?->last_name; + ? $this->task()->withTrashed()->first()->name + : $this->task()->withTrashed()->first()->name.' '.$user_name->first()?->first_name.' '.$user_name->first()?->last_name; } public function getTaskColorAttribute() { - return $this->task?->color; + return $this->task()->withTrashed()->first()->color; } public static function getSchema(): array @@ -280,7 +280,7 @@ function ($shifts, $soldierId) use ($data) { $livewire->dispatch('filament-fullcalendar--refresh'); } if ($arguments['cancel'] ?? false) { - $livewire->dispatch('filament-fullcalendar--refresh'); + $livewire->dispatch('close-modal'); } }); } @@ -578,7 +578,7 @@ function ($record) use (&$soldiers) { $livewire->dispatch('filament-fullcalendar--refresh'); } if ($arguments['cancel'] ?? false) { - $livewire->dispatch('filament-fullcalendar--refresh'); + $livewire->dispatch('close-modal'); } }); } diff --git a/app/Resources/ChartResource/Widgets/ChartFilter.php b/app/Resources/ChartResource/Widgets/ChartFilter.php index 2783744..204b0a5 100644 --- a/app/Resources/ChartResource/Widgets/ChartFilter.php +++ b/app/Resources/ChartResource/Widgets/ChartFilter.php @@ -164,22 +164,20 @@ protected function runAlgorithm($form) protected function resetShifts($form) { - // $this->startDate = (Carbon::now()->format('m') == Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->format('m')) - // ? Carbon::now()->addDay()->format('Y-m-d') - // : - Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->startOfMonth()->format('Y-m-d'); + $startDate = (Carbon::now()->format('m') == Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->format('m')) + ? Carbon::now()->addDay()->format('Y-m-d') + : Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->startOfMonth()->format('Y-m-d'); Shift::whereNotNull('soldier_id') - ->whereBetween('start_date', [$this->startDate, (Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->endOfMonth()->addDay())->format('Y-m-d')]) + ->whereBetween('start_date', [$startDate, (Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->endOfMonth()->addDay())->format('Y-m-d')]) ->update(['soldier_id' => null]); } protected function deleteShifts($form) { - // $this->startDate = (Carbon::now()->format('m') == Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->format('m')) - // ? Carbon::now()->addDay()->format('Y-m-d') - // : - Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->startOfMonth()->format('Y-m-d'); - Shift::whereBetween('start_date', [$this->startDate, (Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->endOfMonth()->addDay())->format('Y-m-d')]) + $startDate = (Carbon::now()->format('m') == Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->format('m')) + ? Carbon::now()->addDay()->format('Y-m-d') + : Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->startOfMonth()->format('Y-m-d'); + Shift::whereBetween('start_date', [$startDate, (Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->endOfMonth()->addDay())->format('Y-m-d')]) ->delete(); } diff --git a/app/Resources/SoldierResource.php b/app/Resources/SoldierResource.php index 736eb5e..4161ad4 100644 --- a/app/Resources/SoldierResource.php +++ b/app/Resources/SoldierResource.php @@ -62,9 +62,7 @@ public static function table(Table $table): Table ->columns([ TextColumn::make('user.displayName') ->label(__('Full name')) - ->formatStateUsing( - fn ($record) => $record->user->last_name.' '.$record->user->first_name - ) + ->formatStateUsing(fn ($record) => $record->user->last_name.' '.$record->user->first_name) ->searchable(query: function ($query, $search) { $query->whereHas('user', function ($query) use ($search) { $query->where('first_name', 'like', "%{$search}%") diff --git a/app/Resources/TaskResource.php b/app/Resources/TaskResource.php index ac54e48..792f186 100644 --- a/app/Resources/TaskResource.php +++ b/app/Resources/TaskResource.php @@ -334,10 +334,7 @@ public static function assignSoldier(): array ->afterStateUpdated(fn (callable $set) => $set('soldier_id', null)), Select::make('soldier_id') ->label(__('Assign soldier')) - ->options( - fn (Get $get) => self::getSoldiers($get) - - ) + ->options(fn (Get $get) => self::getSoldiers($get)) ->default(null) ->placeholder(fn (Get $get) => self::getSoldiers($get)->isEmpty() ? __('No suitable soldiers') : __('Select a soldier')) ->visible( diff --git a/app/Resources/TaskResource/Pages/CreateTask.php b/app/Resources/TaskResource/Pages/CreateTask.php index f767d93..4914de8 100644 --- a/app/Resources/TaskResource/Pages/CreateTask.php +++ b/app/Resources/TaskResource/Pages/CreateTask.php @@ -76,7 +76,6 @@ public static function getSteps(): array ->visible( fn (Get $get) => $get('recurring.type') == 'One time' && $get('recurring.date') - ), ]; } diff --git a/app/Resources/TeamResource.php b/app/Resources/TeamResource.php index 2d70905..9f3d100 100644 --- a/app/Resources/TeamResource.php +++ b/app/Resources/TeamResource.php @@ -117,9 +117,7 @@ public static function table(Table $table): Table ->sortable(), TextColumn::make('commander.user') ->label(__('Commander')) - ->formatStateUsing(function ($state) { - return $state->last_name.' '.$state->first_name; - }) + ->formatStateUsing(fn ($state) => $state->last_name.' '.$state->first_name) ->label(__('Commander')) ->searchable( query: function ($query, $search) { diff --git a/app/Services/Algorithm.php b/app/Services/Algorithm.php index d90b774..c1d9819 100644 --- a/app/Services/Algorithm.php +++ b/app/Services/Algorithm.php @@ -19,20 +19,19 @@ public function __construct($date = null) protected function getShiftWithTasks() { - // $startOfMonth = max($this->date->copy()->startOfMonth(), Carbon::tomorrow()); $startOfMonth = $this->date->copy()->startOfMonth(); + // $startOfMonth = max($this->date->copy()->startOfMonth(), Carbon::tomorrow()); $endOfMonth = $this->date->copy()->endOfMonth(); - return Shift::whereNull('soldier_id') + return Shift::with('task') + ->whereNull('soldier_id') ->whereHas('task', function ($query) { $query->withTrashed() ->where('kind', '!=', TaskKind::INPARALLEL->value); }) ->where(function ($query) use ($startOfMonth, $endOfMonth) { - $query->where(function ($subQuery) use ($startOfMonth, $endOfMonth) { - $subQuery->where('start_date', '<', $endOfMonth) - ->where('end_date', '>', $startOfMonth); - }); + $query->where('start_date', '<=', $endOfMonth) + ->where('start_date', '>=', $startOfMonth); }) ->get() ->map(fn (Shift $shift): ShiftService => Helpers::buildShift($shift)); @@ -54,8 +53,8 @@ protected function getSoldiersDetails() return Helpers::buildSoldier($soldier, $constraints, $shifts, $capacityHold); }) - ->shuffle() - ->toArray(); + ->filter(fn ($soldier) => $soldier->hasMaxes()) + ->shuffle(); } protected function getSoldiersShifts($soldierId, $inParallel) diff --git a/app/Services/ConcurrentTasks.php b/app/Services/ConcurrentTasks.php index 44ca079..5a7acb2 100644 --- a/app/Services/ConcurrentTasks.php +++ b/app/Services/ConcurrentTasks.php @@ -40,8 +40,7 @@ public function run() protected function getShiftsWithTasks() { - // $startOfMonth = max($this->date->copy()->startOfMonth(), Carbon::tomorrow()); - $startOfMonth = $this->date->copy()->startOfMonth(); + $startOfMonth = max($this->date->copy()->startOfMonth(), Carbon::tomorrow()); $endOfMonth = $this->date->copy()->endOfMonth(); return Shift::whereNull('soldier_id') @@ -50,10 +49,8 @@ protected function getShiftsWithTasks() ->where('kind', TaskKind::INPARALLEL->value); }) ->where(function ($query) use ($startOfMonth, $endOfMonth) { - $query->where(function ($subQuery) use ($startOfMonth, $endOfMonth) { - $subQuery->where('start_date', '<', $endOfMonth) - ->where('end_date', '>', $startOfMonth); - }); + $query->where('start_date', '<=', $endOfMonth) + ->where('start_date', '>=', $startOfMonth); }) ->get() ->map(fn (Shift $shift): ShiftService => Helpers::buildShift($shift)); @@ -84,8 +81,7 @@ protected function getSoldiersShifts($soldierId, $inParallel) protected function initShiftsData(): void { $groupedShifts = collect($this->shifts)->groupBy('taskType'); - $groupedShifts->each(fn ($shifts, $taskType) => $this->addShiftsDataByTask($taskType, collect($shifts)) - ); + $groupedShifts->each(fn ($shifts, $taskType) => $this->addShiftsDataByTask($taskType, collect($shifts))); } protected function addShiftsDataByTask(string $taskType, $shifts): void @@ -101,8 +97,8 @@ protected function addShiftData(ShiftService $shift, $soldiers) $potentialSoldiers = $this->getPotentialSoldiers($soldiers, $shift); $shiftData = new ShiftData( $shift, - $potentialSoldiers, - 0 + 0, + $potentialSoldiers ); $this->shiftsData->push($shiftData); } @@ -114,17 +110,10 @@ protected function getPotentialSoldiers($soldiers, ShiftService $shift) return $soldier->isAvailableByConstraints($shift->range) === Availability::YES && $soldier->isAvailableByConcurrentsShifts($shift) && $soldier->inParallelMaxData->remaining() > 0 - && $this->isAvailableByShiftsAndSpaces($soldier->shifts, $shift); + && $soldier->isAvailableByShifts($shift); }); - return $potentialSoldiers; - } - - protected function isAvailableByShiftsAndSpaces($soldierShifts, ShiftService $shift): bool - { - return ! $soldierShifts->contains(function (ShiftService $soldierShift) use ($shift): bool { - return $soldierShift->range->isConflict($shift->range) && ! collect($shift->inParalelTasks)->contains($soldierShift->taskType); - }); + return collect($potentialSoldiers)->shuffle(); } protected function assignShifts() @@ -145,10 +134,10 @@ protected function assignShift(ShiftData $shiftData) protected function tryAssignShift(SoldierService $soldier, ShiftService $shift) { - if ($soldier->isAvailableByConcurrentsShifts($shift)) { + if ($soldier->isAvailableByConcurrentsShifts($shift) && $soldier->inParallelMaxData->remaining() > 0) { $soldier->concurrentsShifts->push($shift); - $this->assignments->push(new Assignment($shift->id, $soldier->id)); $soldier->inParallelMaxData->used++; + $this->assignments->push(new Assignment($shift->id, $soldier->id)); return true; } diff --git a/app/Services/Course.php b/app/Services/Course.php index 1d638c1..0fdcaf9 100644 --- a/app/Services/Course.php +++ b/app/Services/Course.php @@ -10,11 +10,14 @@ class Course public $soldiers; + public $hasGap; + public function __construct($number, $max, $soldiers) { $this->number = $number; $this->max = $max; $this->soldiers = collect($soldiers); + $this->hasGap = false; } public function remaining($max) diff --git a/app/Services/FixedConstraints.php b/app/Services/FixedConstraints.php index 3413457..41f0a8e 100644 --- a/app/Services/FixedConstraints.php +++ b/app/Services/FixedConstraints.php @@ -55,7 +55,7 @@ protected function createConstraint($constraintType, $soldierId, $startDate, $en protected function createPeriod() { $month = Carbon::now()->addMonth(); - return CarbonPeriod::between($month->copy()->startOfMonth(), $month->copy()->endOfMonth()); - // return CarbonPeriod::between(max($month->copy()->startOfMonth(), Carbon::tomorrow()), $month->copy()->endOfMonth()); + + return CarbonPeriod::between(max($month->copy()->startOfMonth(), Carbon::tomorrow()), $month->copy()->endOfMonth()); } } diff --git a/app/Services/Helpers.php b/app/Services/Helpers.php index 1a579b3..ad700fd 100644 --- a/app/Services/Helpers.php +++ b/app/Services/Helpers.php @@ -17,6 +17,7 @@ public static function buildShift(Shift $shift): ShiftService { return new ShiftService( $shift->id, + $shift->task_id, $shift->task()->withTrashed()->first()->type, $shift->start_date, $shift->end_date, @@ -42,6 +43,7 @@ public static function buildSoldier($soldier, $constraints, $shifts, array $capa { return new SoldierService( $soldier->id, + $soldier->course, new MaxData($soldier->capacity, $capacityHold['points'] ?? 0), new MaxData($soldier->max_shifts, $capacityHold['count'] ?? 0), new MaxData($soldier->max_nights, $capacityHold['sumNights'] ?? 0), @@ -67,7 +69,7 @@ public static function buildConstraints($constraints, $newRange) fn (Constraint $constraint): ConstraintService => new ConstraintService( $constraint->start_date, $constraint->end_date, - ConstraintType::getPriority()[$constraint->constraint_type->value] == 1 ? Priority::HIGH : Priority::LOW + ConstraintType::getPriority()[$constraint->constraint_type->value] == 1 ? Priority::HIGH : Priority::LOW, ) ); } @@ -110,26 +112,25 @@ public static function addShiftsSpaces($shifts) collect($shifts)->map(function (ShiftService $shift) use ($shifts, &$allSpaces) { $spaces = ($shift->kind === TaskKind::WEEKEND->value || $shift->kind === TaskKind::NIGHT->value) ? $shift->getShiftSpaces($shifts) : null; if (! empty($spaces)) { - collect($spaces)->map(fn (Range $space) => $allSpaces->push(new ShiftService(0, '', $space->start, $space->end, 0, TaskKind::REGULAR->value, []))); + collect($spaces)->map(fn (Range $space) => $allSpaces->push(new ShiftService(0, 0, '', $space->start, $space->end, 0, TaskKind::REGULAR->value, []))); } }); return $allSpaces; } - public static function getSoldiersShifts($soldierId, $newRange, $inParallel) + public static function getSoldiersShifts($soldierId, $range, $inParallel) { - return Shift::where('soldier_id', $soldierId) + return Shift::with('task') + ->where('soldier_id', $soldierId) ->whereHas('task', function ($query) use ($inParallel) { $query->withTrashed() ->when($inParallel, fn ($query) => $query->where('kind', TaskKind::INPARALLEL->value)) ->when(! $inParallel, fn ($query) => $query->where('kind', '!=', TaskKind::INPARALLEL->value)); }) - ->where(function ($query) use ($newRange) { - $query->where(function ($subQuery) use ($newRange) { - $subQuery->where('start_date', '<', $newRange->end) - ->where('end_date', '>', $newRange->start); - }); + ->where(function ($query) use ($range) { + $query->where('start_date', '<=', $range->end) + ->where('start_date', '>=', $range->start); }) ->get() ->map(fn (Shift $shift): ShiftService => self::buildShift($shift)); @@ -137,14 +138,31 @@ public static function getSoldiersShifts($soldierId, $newRange, $inParallel) public static function getConstraintBy(int $soldierId, $newRange) { - $constraint = Constraint::where('soldier_id', $soldierId) + $constraints = Constraint::where('soldier_id', $soldierId) ->get(); - return self::buildConstraints($constraint, $newRange); + return self::buildConstraints($constraints, $newRange); } public static function updateShiftTable($assignments) { - collect($assignments)->map(fn (Assignment $assignment) => Shift::where('id', $assignment->shiftId)->update(['soldier_id' => $assignment->soldierId])); + if (empty($assignments)) { + return; + } + + $chunks = array_chunk($assignments->toArray(), 80); + + foreach ($chunks as $chunk) { + $cases = []; + $ids = []; + + collect($chunk)->each(function ($assignment) use (&$ids, &$cases) { + $ids[] = $assignment->shiftId; + $cases[] = "WHEN id = {$assignment->shiftId} THEN {$assignment->soldierId}"; + }); + + Shift::whereIn('id', $ids) + ->update(['soldier_id' => \DB::raw('CASE '.implode(' ', $cases).' END')]); + } } } diff --git a/app/Services/ManualAssignment.php b/app/Services/ManualAssignment.php index 07e3327..8b9b2bc 100644 --- a/app/Services/ManualAssignment.php +++ b/app/Services/ManualAssignment.php @@ -2,14 +2,12 @@ namespace App\Services; -use App\Enums\Availability; use App\Models\Department; use App\Models\Shift; use App\Models\Soldier; use App\Models\Team; use App\Models\User; use App\Services\Soldier as SoldierService; -use Illuminate\Support\Facades\Cache; class ManualAssignment { @@ -35,7 +33,6 @@ public function getSoldiers($departmentName = null) protected function initSoldiersData($departmentName) { - $this->soldiers = Cache::remember('users', 30 * 60, fn () => User::all()); match ($this->soldierType) { 'reserves' => $this->filterReserves(), 'my_soldiers' => $this->filterMySoldiers(), @@ -47,60 +44,69 @@ protected function initSoldiersData($departmentName) protected function filterReserves() { - $this->soldiers = $this->soldiers - ->filter(function ($user) { - $soldier = $this->getSoldierBy($user->userable_id); - - return $soldier->is_reservist && $soldier->id != auth()->user()->userable_id; - }); + $this->soldiers = Soldier::whereJsonContains('qualifications', $this->shift->taskType) + ->where('is_reservist', true) + ->where('id', '!=', auth()->user()->userable_id) + ->get(); } protected function filterMySoldiers() { - $this->soldiers = $this->soldiers - ->filter(function ($user) { - $currentUserId = auth()->user()->userable_id; - $role = current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])); - $soldier = $this->getSoldierBy($user->userable_id); - - return match ($role) { - 'department-commander' => $soldier?->team?->department?->commander_id == $currentUserId - && $soldier?->id != $currentUserId, - 'team-commander' => $soldier?->team?->commander_id == $currentUserId - && $soldier?->id != $currentUserId - }; - }); + $currentUserId = auth()->user()->userable_id; + $role = current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])); + $members = collect(); + + switch ($role) { + case 'department-commander': + $department = Department::whereHas('commander', function ($query) use ($currentUserId) { + $query->where('id', $currentUserId); + })->first(); + + $memberIds = $department?->teams->flatMap(fn (Team $team) => $team->members->pluck('id')) ?? collect(); + $commanderIds = $department?->teams->pluck('commander_id') ?? collect(); + + $members = $memberIds->merge($commanderIds)->unique(); + break; + case 'team-commander': + $members = Team::whereHas('commander', function ($query) use ($currentUserId) { + $query->where('id', $currentUserId); + })->first()?->members->pluck('id') ?? collect([]); + break; + } + + $this->soldiers = Soldier::whereJsonContains('qualifications', $this->shift->taskType) + ->where('is_reservist', false) + ->where('id', '!=', $currentUserId) + ->whereIn('id', $members) + ->get(); } protected function filterDepartment($departmentName) { - $this->soldiers = $this->soldiers - ->filter(function ($user) use ($departmentName) { - $soldier = Soldier::where('id', '=', $user->userable_id)->first(); - $department = Department::where('name', $departmentName)->first(); - - return $soldier?->team?->department?->name == $departmentName - || collect($department->teams)->filter(fn (Team $team): bool => $team->commander_id === $soldier->id)->isNotEmpty() - || $soldier->id == $department->commander_id; - }); + $department = Department::where('name', $departmentName)->first(); + $this->soldiers = Soldier::whereJsonContains('qualifications', $this->shift->taskType) + ->where('is_reservist', false) + ->where('id', '!=', auth()->user()->userable_id) + ->where(function (Soldier $query) use ($department) { + $query->whereIn('id', $department?->teams->flatMap(fn (Team $team) => $team->members->pluck('id')) ?? collect()) + ->orWhereIn('id', $department?->teams->pluck('commander_id') ?? collect()) + ->orWhere('id', $department?->commander_id); + })->get(); } protected function filterMatching() { - $this->soldiers = $this->soldiers - ->filter(function ($user) { - $soldier = $this->getSoldierBy($user->userable_id); - - return ! $soldier->is_reservist && $soldier->id != auth()->user()->userable_id; - }); + $this->soldiers = Soldier::whereJsonContains('qualifications', $this->shift->taskType) + ->where('is_reservist', false) + ->where('id', '!=', auth()->user()->userable_id) + ->get(); } protected function getSoldiersDetails() { $this->soldiers = $this->soldiers ->map( - function (User $user) { - $soldier = $this->getSoldierBy($user->userable_id); + function (Soldier $soldier) { $constraints = $this->getConstraints($soldier); $soldiersShifts = $this->getSoldiersShifts($soldier->id, false); @@ -115,11 +121,6 @@ function (User $user) { ); } - protected function getSoldierBy($userable_id) - { - return Soldier::where('id', $userable_id)->first(); - } - public function amIAvailable(): bool { $me = Soldier::find(auth()->user()->userable_id); @@ -130,13 +131,12 @@ public function amIAvailable(): bool $capacityHold = Helpers::capacityHold($myShifts); - $soldier = Helpers::buildSoldier($me, $constraints, $myShifts, $capacityHold); + $concurrentsShifts = $this->getSoldiersShifts($me->id, true); - return $soldier->isQualified($this->shift->taskType) - && $soldier->isAvailableByMaxes($this->shift) - && $soldier->isAvailableByConstraints($this->shift->range) != Availability::NO - && $soldier->isAvailableByShifts($this->shift) - && $soldier->isAvailableBySpaces($this->shift->getShiftSpaces($soldier->shifts)); + $soldier = Helpers::buildSoldier($me, $constraints, $myShifts, $capacityHold, $concurrentsShifts); + + return $soldier->isAbleTake($this->shift, true) + && $soldier->isAvailableByConcurrentsShifts($this->shift); } protected function getConstraints(Soldier $soldier) @@ -151,13 +151,7 @@ protected function getSoldiersShifts($soldierId, $inParallel) protected function getAvailableSoldiers() { - $availableSoldiers = $this->soldiers->filter( - fn (SoldierService $soldier) => $soldier->isQualified($this->shift->taskType) - && $soldier->isAvailableByMaxes($this->shift) - && $soldier->isAvailableByConstraints($this->shift->range) != Availability::NO - && $soldier->isAvailableByShifts($this->shift) - && $soldier->isAvailableBySpaces($this->shift->getShiftSpaces($soldier->shifts)) - ); + $availableSoldiers = $this->soldiers->filter(fn (SoldierService $soldier) => $soldier->isAbleTake($this->shift, true)); $soldiersWithConcurrentsShifts = collect([]); $availableSoldiers->map(function (SoldierService $soldier) use ($soldiersWithConcurrentsShifts) { diff --git a/app/Services/MaxData.php b/app/Services/MaxData.php index f3adfee..8f7be43 100644 --- a/app/Services/MaxData.php +++ b/app/Services/MaxData.php @@ -18,30 +18,4 @@ public function remaining(): float { return $this->max - $this->used; } - - protected function relativeLoad(): float - { - if ($this->max == 0) { - return 0; - } - - return $this->used / $this->max; - } - - protected function singleValue(): float - { - if ($this->max == 0) { - return 0; - } - - return 1 / $this->max; - } - - public function calculatedRelativeLoad(): float - { - $relativeLoad = $this->relativeLoad(); - $pointValue = $this->singleValue(); - - return ($relativeLoad * 4 + $pointValue) / 5; - } } diff --git a/app/Services/PointedSchedule.php b/app/Services/PointedSchedule.php index 3d76b29..fd91c05 100644 --- a/app/Services/PointedSchedule.php +++ b/app/Services/PointedSchedule.php @@ -4,7 +4,6 @@ use App\Enums\Availability; use App\Enums\DaysInWeek; -use App\Enums\RotationResult; use App\Enums\TaskKind; class PointedSchedule @@ -307,50 +306,50 @@ protected function assign() { $this->courses ->filter(fn (Course $course) => $course->max > 0) - ->map(function (Course $course) { + ->each(function (Course $course) { + if (collect($this->shiftsData)->contains(fn ($shifts): bool => collect($shifts)->count() > 0) && $course->max >= 2) { + $this->assignShiftsForCourse($course, true); + } + }) + ->each(function (Course $course) { if (collect($this->shiftsData)->contains(fn ($shifts): bool => collect($shifts)->count() > 0)) { - $this->assignShiftsForCourse($course); + $this->assignShiftsForCourse($course, false); } }); } - protected function assignShiftsForCourse(Course $course) + protected function assignShiftsForCourse(Course $course, $isSingleRotation) { $rotationSize = $this->maximalRotationSize; - while ($course->remaining('pointsMaxData') > 0 && $rotationSize >= $this->minimalRotationSize) { - $rotationResult = $this->rotation($course->soldiers, $rotationSize); - match ($rotationResult) { - RotationResult::SUCCESS => [ - $this->saveRotationAssigments(), - ], - RotationResult::SUCCESS_WITH_GAP => [ - $this->saveRotationAssigments(), - $rotationSize = 0, - ], - RotationResult::FAILED => [ - $this->clearRotationAsssigments(), - $rotationSize /= 2, - ], - }; + while (! $course->hasGap && $course->remaining('pointsMaxData') > 0 && $rotationSize >= $this->minimalRotationSize) { + $rotationResult = $this->rotation($course, $rotationSize); + if ($rotationResult) { + $this->saveRotationAssigments(); + } else { + $this->clearRotationAsssigments(); + $rotationSize /= 2; + } + if ($isSingleRotation) { + return; + } } } - protected function rotation($soldiers, $rotationSize): RotationResult + protected function rotation($course, $rotationSize) { - $isGapExists = false; - foreach ($soldiers as $soldier) { + foreach ($course->soldiers as $soldier) { $assignedPoints = $this->assignRotationShiftsToSoldier($soldier, $rotationSize); $gap = $rotationSize - $assignedPoints; if ($gap > $this->allowedGap) { - return RotationResult::FAILED; + return false; } if ($gap > 0) { - $isGapExists = true; + $course->hasGap = true; } } - return $isGapExists ? RotationResult::SUCCESS_WITH_GAP : RotationResult::SUCCESS; + return true; } protected function assignRotationShiftsToSoldier(Soldier $soldier, float $rotationSize) diff --git a/app/Services/Range.php b/app/Services/Range.php index c6ff40b..18ffcce 100644 --- a/app/Services/Range.php +++ b/app/Services/Range.php @@ -42,7 +42,7 @@ public function isRangeInclude(DaysInWeek $dayInWeek): bool $endDayIndex = $this->end->dayOfWeek; $checkDayIndex = date('N', strtotime($dayInWeek->value)); if ($startDayIndex <= $endDayIndex) { - return $this->start->diffInDays($this->end) > 5 || ($checkDayIndex >= $startDayIndex && $checkDayIndex <= $endDayIndex); + return $this->start->copy()->diffInDays($this->end->copy()) > 5 || ($checkDayIndex >= $startDayIndex && $checkDayIndex <= $endDayIndex); } return $checkDayIndex >= $startDayIndex || $checkDayIndex <= $endDayIndex; @@ -50,23 +50,36 @@ public function isRangeInclude(DaysInWeek $dayInWeek): bool public function getDayAfterWeekend(): Range { - $nextDayAfterWeekend = $this->end->next(DaysInWeek::SUNDAY->value)->setTime(8, 0); + $nextDayAfterWeekend = $this->end->englishDayOfWeek == DaysInWeek::SUNDAY->value ? $this->end->copy() : $this->end->copy()->next(DaysInWeek::SUNDAY->value)->setTime(8, 0); return new Range($nextDayAfterWeekend, $nextDayAfterWeekend->copy()->addDay()); } public function getNightSpaces() { - return [$this->getDayBeforeNight(), $this->getDayAfterNight()]; - } + $startHour = $this->start->hour; + $endTomorrow = $this->end->copy()->addDay(); + if ($startHour >= '20' && $startHour <= '23') { + return [ + new Range(Carbon::create($this->start->year, $this->start->month, $this->start->day, 00, 00), $this->start), + new Range($this->end, Carbon::create($endTomorrow->year, $endTomorrow->month, $endTomorrow->day, 7, 59)), + ]; + } + if ($startHour >= '0' && $startHour <= '1') { + $startYesterday = $this->start->copy()->subDay(); - public function getDayBeforeNight(): Range - { - return new Range($this->start->copy()->subHours(12), $this->start); + return [ + new Range(Carbon::create($startYesterday->year, $startYesterday->month, $startYesterday->day, 00, 00), $this->start), + new Range($this->end, Carbon::create($endTomorrow->year, $endTomorrow->month, $endTomorrow->day, 7, 59)), + ]; + } } - public function getDayAfterNight(): Range + public function getNightInWeekendSpaces() { - return new Range($this->end, $this->end->copy()->addHours(12)); + return [ + new Range($this->start->copy()->setHour(8)->setMinutes(30), $this->start->copy()), + new Range($this->end->copy(), $this->end->copy()->setHour(19)->setMinutes(59)), + ]; } } diff --git a/app/Services/Schedule.php b/app/Services/Schedule.php index b1aa5bb..0e7e33a 100644 --- a/app/Services/Schedule.php +++ b/app/Services/Schedule.php @@ -2,7 +2,6 @@ namespace App\Services; -use App\Enums\Availability; use App\Enums\TaskKind; class Schedule @@ -11,262 +10,49 @@ class Schedule public $soldiers; - public $shiftsData; - - public $soldiersDict; - public $assignments; - public $SHIFT_DUMBBELLS; - - public $SOLDIER_DUMBBELLS; - public function __construct($shifts, $soldiers) { - $this->shifts = collect($shifts); $this->soldiers = collect($soldiers); - $this->shiftsData = collect([]); - $this->soldiersDict = collect([]); + $this->shifts = collect($shifts); $this->assignments = collect([]); - $this->SHIFT_DUMBBELLS = collect([ - 'POINTS_RATIO' => 0.29, - 'SHIFTS_RATIO' => 0.39, - 'WEEKENDS_RATIO' => 0.04, - 'NIGHTS_RATIO' => 0.04, - 'SHIFT_AVAILABILITY' => 0.23, - 'BLOCK_POINTS' => 0.05, - ]); - $this->SOLDIER_DUMBBELLS = collect([ - 'LOW_CONSTRAINT' => 0.45, - 'POINTS_RELATIVE_LOAD' => 0.4, - 'SHIFTS_RELATIVE_LOAD' => 0.08, - 'NIGHT_RELATIVE_LOAD' => 0.01, - 'WEEKEND_RELATIVE_LOAD' => 0.01, - 'MULTITASKING_VALUE' => 0.05, - ]); - } - - public function schedule(): void - { - $this->initShiftsData(); - $this->initSoldiersData(); - $this->assignShifts(); - Helpers::updateShiftTable($this->assignments); } - protected function initShiftsData(): void + public function schedule() { - $groupedShifts = collect($this->shifts)->groupBy('taskType'); - $groupedShifts->each(function ($shifts, $taskType) { - $this->addShiftsDataByTask($taskType, collect($shifts)); - }); + $this->assignPointedShifts(); + $this->assignNotPointedShifts(); + $this->saveAssignments(); } - protected function addShiftsDataByTask(string $taskType, $shifts): void + protected function assignPointedShifts() { - $soldiers = $this->soldiers->filter(function (Soldier $soldier) use ($taskType): bool { - return $soldier->isQualified($taskType); - }); - $taskWeight = $this->getTaskWeight($shifts, $soldiers); - $shifts->map(fn ($shift) => $this->addShiftData($shift, $soldiers, $taskWeight)); + $pointedShifts = $this->shifts->filter(fn (Shift $shift): bool => $shift->points > 0); + $soldiers = $this->soldiers->filter(fn (Soldier $soldier) => $soldier->pointsMaxData->remaining() > 0); + $pointedSchedule = new PointedSchedule($soldiers, $pointedShifts); + $assignments = $pointedSchedule->schedule(); + $this->assignments->push(...$assignments); } - protected function getTaskWeight($shifts, $soldiers): array + protected function assignNotPointedShifts() { - $requiredPoints = collect($shifts)->sum('points'); - $requiredNights = collect($shifts)->filter(fn (Shift $shift) => ($shift->kind === TaskKind::NIGHT->value))->count(); - $requiredWeekends = collect($shifts) - ->filter(fn (Shift $shift) => ($shift->kind === TaskKind::WEEKEND->value)) - ->sum(fn (Shift $shift) => $shift->points); - $requiredShifts = count($shifts); - - $availablePoints = collect($soldiers)->sum(fn (Soldier $soldier) => $soldier->pointsMaxData->remaining()); - - $availableNights = collect($soldiers)->sum(fn (Soldier $soldier) => $soldier->nightsMaxData->remaining()); - - $availableWeekends = collect($soldiers)->sum(fn (Soldier $soldier) => $soldier->weekendsMaxData->remaining()); - - $availableShifts = collect($soldiers)->sum(fn (Soldier $soldier) => $soldier->shiftsMaxData->remaining()); - - $weight = collect([ - 'POINTS_RATIO' => $this->getRatio($requiredPoints, $availablePoints), - 'NIGHTS_RATIO' => $this->getRatio($requiredNights, $availableNights), - 'WEEKENDS_RATIO' => $this->getRatio($requiredWeekends, $availableWeekends), - 'SHIFTS_RATIO' => $this->getRatio($requiredShifts, $availableShifts), + $taskKinds = collect([ + TaskKind::NIGHT->value => 1, + TaskKind::REGULAR->value => 3, + TaskKind::ALERT->value => 1, ]); - - $weight->each(function ($value, $key) use (&$weight) { - $weight[$key] = $value * $this->SHIFT_DUMBBELLS[$key]; - }); - - return $weight->all(); - } - - protected function addShiftData(Shift $shift, $soldiers, $taskWeight) - { - $potentialSoldiers = $this->getPotentialSoldiers($soldiers, $shift->range); - $shiftData = new ShiftData( - $shift, - $potentialSoldiers, - $this->getShiftWeight( - $taskWeight, - $shift, - $soldiers->count(), - $potentialSoldiers->count() - ) - ); - $this->shiftsData->push($shiftData); - } - - protected function getRatio(float $required, float $available): float - { - return $available == 0 ? 0 : (float) $this->maximumOne((float) $required / $available); - } - - protected function maximumOne(float $number): float - { - return $number > 1 ? 1 : $number; - } - - protected function getPotentialSoldiers($soldiers, Range $range) - { - $potentialSoldiers = $soldiers->filter(function (Soldier $soldier) use ($range) { - return $soldier->isAvailableByConstraints($range) != Availability::NO; - })->map(function (Soldier $soldier) use ($range): PotentialSoldierData { - $availability = $soldier->isAvailableByConstraints($range); - - return new PotentialSoldierData( - $soldier->id, - $availability == Availability::BETTER_NOT - ); + $taskKinds->each(function ($gap, $taskKind) { + $shifts = $this->shifts->filter(fn (Shift $shift): bool => $shift->kind == $taskKind && + $shift->points == 0); + $notPointedSchedule = new NotPointedSchedule($taskKind, $this->soldiers, $shifts, $gap); + $assignments = $notPointedSchedule->schedule(); + $this->assignments->push(...$assignments); }); - - return $potentialSoldiers; } - protected function getShiftWeight($taskWeight, Shift $shift, int $soldiersCount, int $availableSoldiersCount): float + protected function saveAssignments() { - $weight = $taskWeight['SHIFTS_RATIO'] + $shift->points > 0 ? $taskWeight['POINTS_RATIO'] : 0; - - match ($shift->kind) { - TaskKind::WEEKEND->value => $weight += $taskWeight['WEEKENDS_RATIO'], - TaskKind::NIGHT->value => $weight += $taskWeight['NIGHTS_RATIO'], - default => null - }; - - $weight += $this->getShiftAvailabilityRatio($soldiersCount, $availableSoldiersCount) - * $this->SHIFT_DUMBBELLS['SHIFT_AVAILABILITY']; - - $weight += $this->getShiftBlockPoints($shift->points) * $this->SHIFT_DUMBBELLS['BLOCK_POINTS']; - - return $weight; - } - - protected function getShiftAvailabilityRatio(int $soldiersCount, int $availableSoldiers): float - { - if ($availableSoldiers == 0) { - return 0; - } - - return (float) ($soldiersCount - $availableSoldiers) / $soldiersCount; - } - - protected function getShiftBlockPoints(float $points): float - { - if ($points == 0) { - return 0; - } - - return (float) $points / 3; - } - - protected function initSoldiersData(): void - { - $this->soldiers->map(fn (Soldier $soldier) => $this->soldiersDict->put($soldier->id, $soldier)); - } - - protected function assignShifts() - { - $sortedShifts = $this->getSortedShiftsList(); - collect($sortedShifts)->map(fn (ShiftData $shift) => $this->assignShift($shift)); - } - - protected function getSortedShiftsList() - { - return $this->shiftsData->sortByDesc('weight'); - } - - protected function assignShift(ShiftData $shiftData) - { - $soldiers = $this->getPotentialSoldiersData($shiftData); - foreach ($soldiers as $soldier) { - $success = $this->tryAssign($soldier, $shiftData->shift); - if ($success) { - return; - } - } - } - - protected function getPotentialSoldiersData(ShiftData $shiftData) - { - $soldiers = collect([]); - collect($shiftData->potentialSoldiers)->map(function (PotentialSoldierData $potentialSoldierData) use (&$soldiers, $shiftData) { - $soldiers->push($this->getSoldierAndWeight($potentialSoldierData, $shiftData->shift)); - }); - - return $this->getSortedPotentialSoldiers($soldiers); - } - - protected function getSoldierAndWeight(PotentialSoldierData $potentialSoldierData, Shift $shift) - { - $soldier = $this->soldiersDict[$potentialSoldierData->soldierId]; - $weightDict = [ - 'LOW_CONSTRAINT' => $potentialSoldierData->isLowConstraint ? 1 : 0, - 'POINTS_RELATIVE_LOAD' => $shift->points > 0 ? $soldier->pointsMaxData->calculatedRelativeLoad() : 0, - 'SHIFTS_RELATIVE_LOAD' => $soldier->shiftsMaxData->calculatedRelativeLoad(), - 'NIGHT_RELATIVE_LOAD' => $shift->kind !== TaskKind::NIGHT->value ? 0 : $soldier->nightsMaxData->calculatedRelativeLoad(), - 'WEEKEND_RELATIVE_LOAD' => $shift->kind !== TaskKind::WEEKEND->value ? 0 : $soldier->weekendsMaxData->calculatedRelativeLoad(), - 'MULTITASKING_VALUE' => $this->getMultitaskingValue( - $soldier->qualifications->count() - ), - ]; - $weight = $this->getTotalWeight($weightDict); - - return [$soldier, $weight]; - } - - protected function getMultitaskingValue(int $qualificationsNumber): float - { - return (float) (1 - ((float) (1 / $qualificationsNumber))); - } - - protected function getTotalWeight($weightData): float - { - $weight = 0; - collect($weightData)->map(function ($value, $key) use (&$weight) { - $weight += (float) ($value * $this->SOLDIER_DUMBBELLS[$key]); - }); - - return $weight; - } - - protected function getSortedPotentialSoldiers($soldiers) - { - $sortedSoldiers = $soldiers->sortBy(fn ($item) => $item[1]); - - return $sortedSoldiers->map(fn ($soldier) => $soldier[0]); - } - - protected function tryAssign(Soldier $soldier, Shift $shift): bool - { - $spaces = $shift->getShiftSpaces($soldier->shifts); - if ($soldier->isAbleTake($shift, $spaces)) { - $soldier->assign($shift, $spaces); - $this->assignments->push(new Assignment($shift->id, $soldier->id)); - - return true; - } - - return false; + Helpers::updateShiftTable($this->assignments); } } diff --git a/app/Services/Shift.php b/app/Services/Shift.php index 1e41652..17f0c69 100644 --- a/app/Services/Shift.php +++ b/app/Services/Shift.php @@ -9,6 +9,8 @@ class Shift { public $id; + public $taskId; + public $taskType; public $range; @@ -17,16 +19,28 @@ class Shift public $kind; + public $isAssigned; + public $inParalelTasks; - public function __construct($id, string $taskType, $start, $end, float $points, $kind, $inParalelTasks = []) + public $isAttached; + + public function __construct($id, int $taskId, string $taskType, $start, $end, float $points, $kind, $inParalelTasks = []) { $this->id = $id; + $this->taskId = $taskId; $this->taskType = $taskType; $this->range = new Range($start, $end); $this->points = $points; $this->kind = $kind; + $this->isAssigned = false; $this->inParalelTasks = $inParalelTasks; + $this->isAttached = false; + } + + public function isAssigned(): bool + { + return $this->isAssigned; } public function getShiftSpaces($shifts) @@ -40,7 +54,23 @@ public function getShiftSpaces($shifts) protected function getWeekendSpaces($shifts) { - return $this->isFullWeekend($shifts) ? [$this->range->getDayAfterWeekend()] : null; + $spaces = collect([]); + if ($this->isNight()) { + $spaces->push(...$this->range->getNightInWeekendSpaces()); + } + if ($this->isFullWeekend($shifts)) { + $spaces->push($this->range->getDayAfterWeekend()); + } + + return $spaces?->toArray(); + } + + protected function isNight() + { + return ($this->range->start->hour >= 19 + && $this->range->start->hour < 23) && + ($this->range->end->hour > 6 + && $this->range->end->hour < 9); } protected function isFullWeekend($shifts) @@ -67,7 +97,7 @@ protected function isShiftInclude(Range $range, DaysInWeek $dayInWeek): bool protected function isAttached($shifts, $range, DaysInWeek $dayInWeek): bool { - $expectedDate = $dayInWeek == DaysInWeek::FRIDAY ? $range->start->subDay()->startOfDay() : $range->end->addDay()->startOfDay(); + $expectedDate = $dayInWeek == DaysInWeek::FRIDAY ? $range->start->copy()->subDay()->startOfDay() : $range->end->copy()->addDay()->startOfDay(); return $shifts ? collect($shifts)->contains( function ($shift) use ($expectedDate): bool { diff --git a/app/Services/ShiftData.php b/app/Services/ShiftData.php index 74606ea..82afd0a 100644 --- a/app/Services/ShiftData.php +++ b/app/Services/ShiftData.php @@ -6,14 +6,14 @@ class ShiftData { public $shift; - public $potentialSoldiers; - public $weight; - public function __construct(Shift $shift, $potentialSoldiers, float $weight) + public $potentialSoldiers; + + public function __construct(Shift $shift, float $weight, $potentialSoldiers = []) { $this->shift = $shift; - $this->potentialSoldiers = collect($potentialSoldiers); $this->weight = $weight; + $this->potentialSoldiers = collect($potentialSoldiers); } } diff --git a/app/Services/Soldier.php b/app/Services/Soldier.php index cb3ee02..f9c68df 100644 --- a/app/Services/Soldier.php +++ b/app/Services/Soldier.php @@ -10,6 +10,8 @@ class Soldier { public $id; + public $course; + public $pointsMaxData; public $shiftsMaxData; @@ -30,9 +32,10 @@ class Soldier public $concurrentsShifts; - public function __construct($id, MaxData $maxPoints, MaxData $maxShifts, MaxData $maxNights, MaxData $maxWeekends, MaxData $alertsMaxData, MaxData $inParallelMaxData, $qualifications, $constraints, $shifts = [], $concurrentsShifts = []) + public function __construct($id, $course, MaxData $maxPoints, MaxData $maxShifts, MaxData $maxNights, MaxData $maxWeekends, MaxData $alertsMaxData, MaxData $inParallelMaxData, $qualifications, $constraints, $shifts = [], $concurrentsShifts = []) { $this->id = $id; + $this->course = $course; $this->pointsMaxData = $maxPoints; $this->shiftsMaxData = $maxShifts; $this->nightsMaxData = $maxNights; @@ -45,48 +48,64 @@ public function __construct($id, MaxData $maxPoints, MaxData $maxShifts, MaxData $this->concurrentsShifts = collect($concurrentsShifts); } + public function hasMaxes(): bool + { + return ! ( + $this->shiftsMaxData->max === 0 && + $this->nightsMaxData->max === 0 && + $this->weekendsMaxData->max === 0 && + $this->alertsMaxData->max === 0 + ); + } + public function isQualified(string $taskType): bool { return $this->qualifications->contains($taskType); } - public function isAbleTake(Shift $shift, $spaces): bool + public function isAbleTake(Shift $shift, $ignoreLowConstraint): bool { - return $this->isAvailableByMaxes($shift) + $spaces = $shift->getShiftSpaces($this->shifts); + $availability = $this->isAvailableByConstraints($shift->range); + $isAvailableByConstraint = $ignoreLowConstraint ? $availability != Availability::NO : $availability == Availability::YES; + + return $this->isQualified($shift->taskType) + && $this->isAvailableByMaxes($shift) && $this->isAvailableByShifts($shift) - && $this->isAvailableBySpaces($spaces); + && $this->isAvailableBySpaces($spaces) + && $isAvailableByConstraint; } public function isAvailableByMaxes(Shift $shift): bool { - if ( - ($shift->kind === TaskKind::WEEKEND->value && $this->weekendsMaxData->remaining() < $shift->points) - || ($shift->kind === TaskKind::NIGHT->value && $this->nightsMaxData->remaining() < 1) - || ($shift->kind === TaskKind::ALERT->value && $this->alertsMaxData->remaining() < 1) - || ($shift->kind === TaskKind::INPARALLEL->value && $this->inParallelMaxData->remaining() < 1) - || $this->pointsMaxData->remaining() < $shift->points - || $this->shiftsMaxData->remaining() < 1 - ) { + if ($this->pointsMaxData->remaining() < $shift->points) { return false; } - return true; + return match ($shift->kind) { + TaskKind::WEEKEND->value => $this->weekendsMaxData->remaining() >= $shift->points, + TaskKind::NIGHT->value => $this->nightsMaxData->remaining() > 0 && $this->shiftsMaxData->remaining() > 0, + TaskKind::INPARALLEL->value => $this->inParallelMaxData->remaining() > 0, + TaskKind::ALERT->value => $this->alertsMaxData->remaining() > 0, + TaskKind::REGULAR->value => $this->shiftsMaxData->remaining() > 0, + }; } public function isAvailableByShifts(Shift $shift): bool { - return ! $this->shifts->contains(function (Shift $soldierShift) use ($shift): bool { - return $soldierShift->range->isConflict($shift->range) && ! collect($shift->inParalelTasks)->contains($shift->taskType); - }); + return ! $this->shifts->contains(fn (Shift $soldierShift) => $soldierShift->range->isConflict($shift->range) + && (! collect($shift->inParalelTasks)->contains($soldierShift->taskType)) + ); } public function isAvailableBySpaces($spaces): bool { if ($spaces) { foreach ($spaces as $space) { - return ! $this->shifts->contains(function ($shift) use ($space) { - return $shift->range->isConflict($space); - }); + return ! $this->shifts->contains(fn (Shift $shift) => $shift->id != 0 && + $shift->range->isConflict($space) + ) + && ! $this->concurrentsShifts->contains(fn (Shift $concurrentsShift) => $concurrentsShift->range->isConflict($space)); } } @@ -95,9 +114,9 @@ public function isAvailableBySpaces($spaces): bool public function isAvailableByConcurrentsShifts(Shift $shift) { - return ! $this->concurrentsShifts->contains(function (Shift $concurrentsShift) use ($shift): bool { - return $concurrentsShift->range->isConflict($shift->range) && ! collect($concurrentsShift->inParalelTasks)->contains($shift->taskType); - }); + return ! $this->concurrentsShifts->contains(fn (Shift $concurrentsShift) => $concurrentsShift->range->isConflict($shift->range) && + ! (collect($concurrentsShift->inParalelTasks)->contains($shift->taskType) + || collect($shift->inParalelTasks)->contains($concurrentsShift->taskType))); } public function isAvailableByConstraints(Range $range): Availability @@ -126,7 +145,10 @@ public function assign(Shift $shift, $spaces): void $this->pointsMaxData->used += $shift->points; match ($shift->kind) { TaskKind::WEEKEND->value => $this->weekendsMaxData->used += $shift->points, - TaskKind::NIGHT->value => $this->updateNightAndShifts(), + TaskKind::NIGHT->value => [ + $this->nightsMaxData->used += 1, + $this->shiftsMaxData->used += 1, + ], TaskKind::ALERT->value => $this->alertsMaxData->used += 1, TaskKind::INPARALLEL->value => $this->inParallelMaxData->used += 1, TaskKind::REGULAR->value => $this->shiftsMaxData->used += 1, @@ -135,12 +157,30 @@ public function assign(Shift $shift, $spaces): void protected function addSpaces($spaces) { - collect($spaces)->map(fn ($space) => $this->shifts->push(new Shift(0, '', $space->start, $space->end, 0, TaskKind::REGULAR->value, []))); + collect($spaces)->map(fn ($space) => $this->shifts->push(new Shift(0, 0, '', $space->start, $space->end, 0, TaskKind::REGULAR->value, []))); + } + + public function unassign(Shift $shift, $spaces) + { + $this->shifts = $this->shifts->filter(fn (Shift $existShift) => $shift->id !== $existShift->id); + $this->removeSpaces($spaces); + $this->pointsMaxData->used -= $shift->points; + match ($shift->kind) { + TaskKind::WEEKEND->value => $this->weekendsMaxData->used -= $shift->points, + TaskKind::NIGHT->value => [ + $this->nightsMaxData->used -= 1, + $this->shiftsMaxData->used -= 1, + ], + TaskKind::ALERT->value => $this->alertsMaxData->used -= 1, + TaskKind::INPARALLEL->value => $this->inParallelMaxData->used -= 1, + TaskKind::REGULAR->value => $this->shiftsMaxData->used -= 1, + }; } - protected function updateNightAndShifts() + protected function removeSpaces($spaces) { - $this->nightsMaxData->used += 1; - $this->shiftsMaxData->used += 1; + collect($spaces)->map(function ($space) { + $this->shifts = $this->shifts->filter(fn (Shift $existSpace) => $space->start !== $existSpace->range->start && $space->end !== $existSpace->range->end); + }); } } diff --git a/entrypoint.sh b/entrypoint.sh index 3673b7f..25b397e 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -1,5 +1,7 @@ #!/bin/bash +export OCTANE_SKIP_FRANKENPHP_INSTALL=1 + set -e : "${CONTAINER_MODE:=app}" From a980f5208e7f6df754bc3547ca22e59d745e91c2 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 10 Jul 2025 14:27:26 +0300 Subject: [PATCH 214/259] commit befor --- .github/workflows/php-build-and-deploy.yml | 2 +- Dockerfile | 69 ++++++++++++---------- 2 files changed, 39 insertions(+), 32 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 45e14ea..8e15b05 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/algorithm_version_32 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_1 flavor: | latest=false tags: | diff --git a/Dockerfile b/Dockerfile index 35ae08c..21124e9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,5 @@ ARG php_version=8.3 - -# FROM dunglas/frankenphp:1.1-php${php_version} AS base -FROM dunglas/frankenphp:1.1.5-php${php_version} AS base +FROM dunglas/frankenphp:1.1-php${php_version} AS base WORKDIR /laravel SHELL ["/bin/bash", "-eou", "pipefail", "-c"] @@ -9,6 +7,7 @@ SHELL ["/bin/bash", "-eou", "pipefail", "-c"] ENV SERVER_NAME=:80 ARG user=laravel +# העתק קבצים COPY ./ /laravel COPY --from=composer:latest /usr/bin/composer /usr/bin/composer COPY --chmod=755 /entrypoint.sh entrypoint.sh @@ -16,34 +15,20 @@ COPY --chmod=755 /common common COPY --chown=${user}:${user} /artisan artisan COPY .env.example .env COPY /php.ini "${PHP_INI_DIR}/php.ini" -RUN php --ini \ - && php -r "echo 'max_execution_time: ' . ini_get('max_execution_time') . PHP_EOL;" - +# התקן dependencies RUN apt-get update \ - && apt-get satisfy -y --no-install-recommends \ - "curl (>=7.88)" \ - "supervisor (>=4.2)" \ - "unzip (>=6.0)" \ - "vim-tiny (>=2)" \ - && apt-get install -y nodejs npm \ - && npm install -g npm@7 \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* - -RUN useradd \ - --uid 1000 \ - --shell /bin/bash \ - "${user}" \ - && setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/frankenphp \ - && chown -R "${user}:${user}" \ - /laravel \ - /data/caddy \ - /config/caddy \ - /var/{log,run} \ - && chmod -R a+rw \ - /var/{log,run} + && apt-get satisfy -y --no-install-recommends \ + "curl (>=7.88)" \ + "supervisor (>=4.2)" \ + "unzip (>=6.0)" \ + "vim-tiny (>=2)" \ + && apt-get install -y nodejs npm \ + && npm install -g npm@7 \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* +# התקן PHP extensions RUN install-php-extensions \ bcmath \ bz2 \ @@ -57,14 +42,36 @@ RUN install-php-extensions \ opcache \ redis \ sockets \ - calendar\ + calendar \ zip -RUN composer install +# הורד FrankenPHP המעודכן מראש (בעוד יש לנו הרשאות root) +RUN php artisan octane:install --server=frankenphp --no-interaction || true + +# צור משתמש +RUN useradd \ + --uid 1000 \ + --shell /bin/bash \ + "${user}" \ + && setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/frankenphp \ + && chown -R "${user}:${user}" \ + /laravel \ + /data/caddy \ + /config/caddy \ + /var/{log,run} \ + && chmod -R a+rw \ + /var/{log,run} + +# התקן composer dependencies +RUN composer install --no-dev --optimize-autoloader + +# התקן npm dependencies RUN npm install +# החלף למשתמש רגיל USER ${user} +# הרשאות storage RUN chmod -R a+rw storage - + ENTRYPOINT ["/laravel/entrypoint.sh"] \ No newline at end of file From c0bf56975d44ed1292de46ea5d1b8ed380eb957b Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 10 Jul 2025 14:42:28 +0300 Subject: [PATCH 215/259] commit befor --- .github/workflows/php-build-and-deploy.yml | 2 +- Dockerfile | 69 +++++------ entrypoint.sh | 126 ++++----------------- 3 files changed, 55 insertions(+), 142 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 8e15b05..10de5d8 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_1 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_2 flavor: | latest=false tags: | diff --git a/Dockerfile b/Dockerfile index 21124e9..35ae08c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,7 @@ ARG php_version=8.3 -FROM dunglas/frankenphp:1.1-php${php_version} AS base + +# FROM dunglas/frankenphp:1.1-php${php_version} AS base +FROM dunglas/frankenphp:1.1.5-php${php_version} AS base WORKDIR /laravel SHELL ["/bin/bash", "-eou", "pipefail", "-c"] @@ -7,7 +9,6 @@ SHELL ["/bin/bash", "-eou", "pipefail", "-c"] ENV SERVER_NAME=:80 ARG user=laravel -# העתק קבצים COPY ./ /laravel COPY --from=composer:latest /usr/bin/composer /usr/bin/composer COPY --chmod=755 /entrypoint.sh entrypoint.sh @@ -15,20 +16,34 @@ COPY --chmod=755 /common common COPY --chown=${user}:${user} /artisan artisan COPY .env.example .env COPY /php.ini "${PHP_INI_DIR}/php.ini" +RUN php --ini \ + && php -r "echo 'max_execution_time: ' . ini_get('max_execution_time') . PHP_EOL;" + -# התקן dependencies RUN apt-get update \ - && apt-get satisfy -y --no-install-recommends \ - "curl (>=7.88)" \ - "supervisor (>=4.2)" \ - "unzip (>=6.0)" \ - "vim-tiny (>=2)" \ - && apt-get install -y nodejs npm \ - && npm install -g npm@7 \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* + && apt-get satisfy -y --no-install-recommends \ + "curl (>=7.88)" \ + "supervisor (>=4.2)" \ + "unzip (>=6.0)" \ + "vim-tiny (>=2)" \ + && apt-get install -y nodejs npm \ + && npm install -g npm@7 \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +RUN useradd \ + --uid 1000 \ + --shell /bin/bash \ + "${user}" \ + && setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/frankenphp \ + && chown -R "${user}:${user}" \ + /laravel \ + /data/caddy \ + /config/caddy \ + /var/{log,run} \ + && chmod -R a+rw \ + /var/{log,run} -# התקן PHP extensions RUN install-php-extensions \ bcmath \ bz2 \ @@ -42,36 +57,14 @@ RUN install-php-extensions \ opcache \ redis \ sockets \ - calendar \ + calendar\ zip -# הורד FrankenPHP המעודכן מראש (בעוד יש לנו הרשאות root) -RUN php artisan octane:install --server=frankenphp --no-interaction || true - -# צור משתמש -RUN useradd \ - --uid 1000 \ - --shell /bin/bash \ - "${user}" \ - && setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/frankenphp \ - && chown -R "${user}:${user}" \ - /laravel \ - /data/caddy \ - /config/caddy \ - /var/{log,run} \ - && chmod -R a+rw \ - /var/{log,run} - -# התקן composer dependencies -RUN composer install --no-dev --optimize-autoloader - -# התקן npm dependencies +RUN composer install RUN npm install -# החלף למשתמש רגיל USER ${user} -# הרשאות storage RUN chmod -R a+rw storage - + ENTRYPOINT ["/laravel/entrypoint.sh"] \ No newline at end of file diff --git a/entrypoint.sh b/entrypoint.sh index 25b397e..a131726 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -1,7 +1,4 @@ -#!/bin/bash - -export OCTANE_SKIP_FRANKENPHP_INSTALL=1 - + #!/bin/bash set -e : "${CONTAINER_MODE:=app}" @@ -15,104 +12,27 @@ set -e ARTISAN="php -d variables_order=EGPCS artisan" -_migrate() { - local count=0 - local timeout=20 - - while [ $count -lt "${timeout}" ]; do - php -f common/test_db_connection.php - - status=$? - - if [ $status -eq 0 ]; then - echo "✅ Database connection successful." - break - fi - - echo "⏱ Waiting on database connection, retrying... $((timeout - count)) seconds left" - count=$((count + 1)) - sleep 1 - done - - if [ $count -eq "${timeout}" ]; then - echo "⛔ Database connection failed after multiple attempts." - exit 1 - fi - - echo "🚀 Running migrations..." - ${ARTISAN} migrate --force -} - - -_setup() { - if [ -n "${CONTAINER_MANUAL_SETUP}" ]; then - echo "⏭: Skipping setup..." - return - fi - - _migrate - - if [ -d "/laravel/app/public/storage" ]; then - echo "✅ Storage already linked..." - else - echo "🔐 Linking the storage..." - ${ARTISAN} storage:link - fi - - ${ARTISAN} key:generate - ${ARTISAN} cache:clear - ${ARTISAN} config:cache - ${ARTISAN} event:cache - ${ARTISAN} route:cache - ${ARTISAN} view:cache - npm run build -} - -_run() { - case "${CONTAINER_MODE}" in - app) - echo "🚀 Running octane..." - # ${ARTISAN} schedule:work & - # ${ARTISAN} octane:frankenphp --host=0.0.0.0 --port="${CONTAINER_PORT}" & - # ${ARTISAN} queue: - ${ARTISAN} queue:work -vv \ - --no-interaction \ - --tries="${CONTAINER_WORKER_TRIES}" \ - --sleep="${CONTAINER_WORKER_SLEEP}" \ - --timeout="${CONTAINER_WORKER_TIMEOUT}" \ - --delay="${CONTAINER_WORKER_DELAY}" & - ${ARTISAN} schedule:work & - ${ARTISAN} octane:frankenphp --host=0.0.0.0 --port="${CONTAINER_PORT}" - ;; - # ${ARTISAN} serve --host=0.0.0.0 --port="${CONTAINER_PORT}" - # ;; - worker) - echo "⏳ Running the queue..." - exec "${ARTISAN}" queue:work - -vv \ - --no-interaction \ - --tries="${CONTAINER_WORKER_TRIES}" \ - --sleep="${CONTAINER_WORKER_SLEEP}" \ - --timeout="${CONTAINER_WORKER_TIMEOUT}" \ - --delay="${CONTAINER_WORKER_DELAY}" - ;; - horizon) - echo "Running horizon..." - exec "${ARTISAN}" horizon - ;; - scheduler) - while true; do - echo "📆 Running scheduled tasks." - "${ARTISAN}" schedule:run --verbose --no-interaction & - sleep "${CONTAINER_SCHEDULER_INTERVAL}s" - done - ;; - *) - echo "⛔ Could not match the container mode [${CONTAINER_MODE}]" - exit 1 - ;; - esac +# ... שאר הפונקציות שלך ... + +run() { + case "${CONTAINER_MODE}" in + app) + echo "🚀 Running octane..." + # הפעל את octane עם --no-interaction כדי לא לנסות לעדכן FrankenPHP + ${ARTISAN} queue:work -vv \ + --no-interaction \ + --tries="${CONTAINER_WORKER_TRIES}" \ + --sleep="${CONTAINER_WORKER_SLEEP}" \ + --timeout="${CONTAINER_WORKER_TIMEOUT}" \ + --delay="${CONTAINER_WORKER_DELAY}" & + ${ARTISAN} schedule:work & + + # הפעל octane עם דגלים שימנעו עדכון FrankenPHP + exec ${ARTISAN} octane:frankenphp --host=0.0.0.0 --port="${CONTAINER_PORT}" --no-interaction + ;; + # ... שאר המקרים ... + esac } -_setup -_run \ No newline at end of file +setup +run \ No newline at end of file From 9d91b109d92aacba8781bab022a3cfebdd3c1034 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 10 Jul 2025 14:56:13 +0300 Subject: [PATCH 216/259] commit befor --- .github/workflows/php-build-and-deploy.yml | 2 +- Dockerfile | 75 +++++++++++++--------- 2 files changed, 45 insertions(+), 32 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 10de5d8..f7dde53 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_2 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_3 flavor: | latest=false tags: | diff --git a/Dockerfile b/Dockerfile index 35ae08c..00a3f83 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,5 @@ ARG php_version=8.3 - -# FROM dunglas/frankenphp:1.1-php${php_version} AS base -FROM dunglas/frankenphp:1.1.5-php${php_version} AS base +FROM dunglas/frankenphp:1.2-php${php_version} AS base WORKDIR /laravel SHELL ["/bin/bash", "-eou", "pipefail", "-c"] @@ -9,6 +7,10 @@ SHELL ["/bin/bash", "-eou", "pipefail", "-c"] ENV SERVER_NAME=:80 ARG user=laravel +# הגדרת משתני סביבה למניעת עדכון FrankenPHP +ENV OCTANE_SKIP_FRANKENPHP_UPGRADE=true +ENV FRANKENPHP_VERSION=1.2.0 + COPY ./ /laravel COPY --from=composer:latest /usr/bin/composer /usr/bin/composer COPY --chmod=755 /entrypoint.sh entrypoint.sh @@ -16,34 +18,20 @@ COPY --chmod=755 /common common COPY --chown=${user}:${user} /artisan artisan COPY .env.example .env COPY /php.ini "${PHP_INI_DIR}/php.ini" -RUN php --ini \ - && php -r "echo 'max_execution_time: ' . ini_get('max_execution_time') . PHP_EOL;" - +# התקן dependencies RUN apt-get update \ - && apt-get satisfy -y --no-install-recommends \ - "curl (>=7.88)" \ - "supervisor (>=4.2)" \ - "unzip (>=6.0)" \ - "vim-tiny (>=2)" \ - && apt-get install -y nodejs npm \ - && npm install -g npm@7 \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* - -RUN useradd \ - --uid 1000 \ - --shell /bin/bash \ - "${user}" \ - && setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/frankenphp \ - && chown -R "${user}:${user}" \ - /laravel \ - /data/caddy \ - /config/caddy \ - /var/{log,run} \ - && chmod -R a+rw \ - /var/{log,run} + && apt-get satisfy -y --no-install-recommends \ + "curl (>=7.88)" \ + "supervisor (>=4.2)" \ + "unzip (>=6.0)" \ + "vim-tiny (>=2)" \ + && apt-get install -y nodejs npm \ + && npm install -g npm@7 \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* +# התקן PHP extensions RUN install-php-extensions \ bcmath \ bz2 \ @@ -57,14 +45,39 @@ RUN install-php-extensions \ opcache \ redis \ sockets \ - calendar\ + calendar \ zip -RUN composer install +# הורד ידנית את FrankenPHP בגרסה תואמת +RUN curl -L "https://github.com/dunglas/frankenphp/releases/download/v1.2.0/frankenphp-linux-x86_64" -o /usr/local/bin/frankenphp-new \ + && chmod +x /usr/local/bin/frankenphp-new \ + && mv /usr/local/bin/frankenphp /usr/local/bin/frankenphp-old \ + && mv /usr/local/bin/frankenphp-new /usr/local/bin/frankenphp + +# צור משתמש +RUN useradd \ + --uid 1000 \ + --shell /bin/bash \ + "${user}" \ + && setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/frankenphp \ + && chown -R "${user}:${user}" \ + /laravel \ + /data/caddy \ + /config/caddy \ + /var/{log,run} \ + && chmod -R a+rw \ + /var/{log,run} + +# התקן composer dependencies +RUN composer install --no-dev --optimize-autoloader + +# התקן npm dependencies RUN npm install +# החלף למשתמש רגיל USER ${user} +# הרשאות storage RUN chmod -R a+rw storage - + ENTRYPOINT ["/laravel/entrypoint.sh"] \ No newline at end of file From 6d6269cb35afbdd70cc00b683ebc19725dd3db5a Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 10 Jul 2025 15:05:50 +0300 Subject: [PATCH 217/259] commit befor --- .github/workflows/php-build-and-deploy.yml | 2 +- composer.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index f7dde53..69a873e 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_3 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_4 flavor: | latest=false tags: | diff --git a/composer.json b/composer.json index 0aa26ea..5159273 100644 --- a/composer.json +++ b/composer.json @@ -11,7 +11,7 @@ "laravel/framework": "^11.1", "laravel/tinker": "^2.9", "league/flysystem-aws-s3-v3": "^3.0", - "laravel/octane": "^2.6", + "laravel/octane": "2.5.*", "leandrocfe/filament-apex-charts": "^3.1", "maatwebsite/excel": "^3.1", "predis/predis": "^2.2", From b74872a86279cae6b243b8923bc2a79757868f58 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 10 Jul 2025 16:30:37 +0300 Subject: [PATCH 218/259] commit befor --- .github/workflows/php-build-and-deploy.yml | 2 +- Dockerfile | 14 +--- composer.json | 2 +- entrypoint.sh | 96 +++++++++++++++++++--- 4 files changed, 92 insertions(+), 22 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 69a873e..cc1e50e 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_4 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_5 flavor: | latest=false tags: | diff --git a/Dockerfile b/Dockerfile index 00a3f83..21124e9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ ARG php_version=8.3 -FROM dunglas/frankenphp:1.2-php${php_version} AS base +FROM dunglas/frankenphp:1.1-php${php_version} AS base WORKDIR /laravel SHELL ["/bin/bash", "-eou", "pipefail", "-c"] @@ -7,10 +7,7 @@ SHELL ["/bin/bash", "-eou", "pipefail", "-c"] ENV SERVER_NAME=:80 ARG user=laravel -# הגדרת משתני סביבה למניעת עדכון FrankenPHP -ENV OCTANE_SKIP_FRANKENPHP_UPGRADE=true -ENV FRANKENPHP_VERSION=1.2.0 - +# העתק קבצים COPY ./ /laravel COPY --from=composer:latest /usr/bin/composer /usr/bin/composer COPY --chmod=755 /entrypoint.sh entrypoint.sh @@ -48,11 +45,8 @@ RUN install-php-extensions \ calendar \ zip -# הורד ידנית את FrankenPHP בגרסה תואמת -RUN curl -L "https://github.com/dunglas/frankenphp/releases/download/v1.2.0/frankenphp-linux-x86_64" -o /usr/local/bin/frankenphp-new \ - && chmod +x /usr/local/bin/frankenphp-new \ - && mv /usr/local/bin/frankenphp /usr/local/bin/frankenphp-old \ - && mv /usr/local/bin/frankenphp-new /usr/local/bin/frankenphp +# הורד FrankenPHP המעודכן מראש (בעוד יש לנו הרשאות root) +RUN php artisan octane:install --server=frankenphp --no-interaction || true # צור משתמש RUN useradd \ diff --git a/composer.json b/composer.json index 5159273..0aa26ea 100644 --- a/composer.json +++ b/composer.json @@ -11,7 +11,7 @@ "laravel/framework": "^11.1", "laravel/tinker": "^2.9", "league/flysystem-aws-s3-v3": "^3.0", - "laravel/octane": "2.5.*", + "laravel/octane": "^2.6", "leandrocfe/filament-apex-charts": "^3.1", "maatwebsite/excel": "^3.1", "predis/predis": "^2.2", diff --git a/entrypoint.sh b/entrypoint.sh index a131726..2c55764 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -1,4 +1,5 @@ - #!/bin/bash +#!/bin/bash + set -e : "${CONTAINER_MODE:=app}" @@ -12,11 +13,62 @@ set -e ARTISAN="php -d variables_order=EGPCS artisan" -# ... שאר הפונקציות שלך ... +_migrate() { + local count=0 + local timeout=20 + + while [ $count -lt "${timeout}" ]; do + php -f common/test_db_connection.php + + status=$? + + if [ $status -eq 0 ]; then + echo "✅ Database connection successful." + break + fi + + echo "⏱ Waiting on database connection, retrying... $((timeout - count)) seconds left" + count=$((count + 1)) + sleep 1 + done + + if [ $count -eq "${timeout}" ]; then + echo "⛔ Database connection failed after multiple attempts." + exit 1 + fi + + echo "🚀 Running migrations..." + ${ARTISAN} migrate --force +} + + +_setup() { + if [ -n "${CONTAINER_MANUAL_SETUP}" ]; then + echo "⏭: Skipping setup..." + return + fi + + _migrate + + if [ -d "/laravel/app/public/storage" ]; then + echo "✅ Storage already linked..." + else + echo "🔐 Linking the storage..." + ${ARTISAN} storage:link + fi + + ${ARTISAN} key:generate + ${ARTISAN} cache:clear + ${ARTISAN} config:cache + ${ARTISAN} event:cache + ${ARTISAN} route:cache + ${ARTISAN} view:cache + npm run build +} -run() { - case "${CONTAINER_MODE}" in - app) +_run() { + case "${CONTAINER_MODE}" in + app) echo "🚀 Running octane..." # הפעל את octane עם --no-interaction כדי לא לנסות לעדכן FrankenPHP ${ARTISAN} queue:work -vv \ @@ -29,10 +81,34 @@ run() { # הפעל octane עם דגלים שימנעו עדכון FrankenPHP exec ${ARTISAN} octane:frankenphp --host=0.0.0.0 --port="${CONTAINER_PORT}" --no-interaction - ;; - # ... שאר המקרים ... - esac + ;; + worker) + echo "⏳ Running the queue..." + exec "${ARTISAN}" queue:work + -vv \ + --no-interaction \ + --tries="${CONTAINER_WORKER_TRIES}" \ + --sleep="${CONTAINER_WORKER_SLEEP}" \ + --timeout="${CONTAINER_WORKER_TIMEOUT}" \ + --delay="${CONTAINER_WORKER_DELAY}" + ;; + horizon) + echo "Running horizon..." + exec "${ARTISAN}" horizon + ;; + scheduler) + while true; do + echo "📆 Running scheduled tasks." + "${ARTISAN}" schedule:run --verbose --no-interaction & + sleep "${CONTAINER_SCHEDULER_INTERVAL}s" + done + ;; + *) + echo "⛔ Could not match the container mode [${CONTAINER_MODE}]" + exit 1 + ;; + esac } -setup -run \ No newline at end of file +_setup +_run \ No newline at end of file From 361b01db1e5318acca6c4da126a9e3cd8ec9942c Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 13 Jul 2025 10:15:18 +0300 Subject: [PATCH 219/259] commit befor --- .github/workflows/php-build-and-deploy.yml | 2 +- Dockerfile | 66 ++++++++++------------ composer.json | 2 +- entrypoint.sh | 28 ++++----- 4 files changed, 46 insertions(+), 52 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index cc1e50e..c8f53aa 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_5 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_6 flavor: | latest=false tags: | diff --git a/Dockerfile b/Dockerfile index 21124e9..5ec8223 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,5 @@ ARG php_version=8.3 + FROM dunglas/frankenphp:1.1-php${php_version} AS base WORKDIR /laravel @@ -7,7 +8,6 @@ SHELL ["/bin/bash", "-eou", "pipefail", "-c"] ENV SERVER_NAME=:80 ARG user=laravel -# העתק קבצים COPY ./ /laravel COPY --from=composer:latest /usr/bin/composer /usr/bin/composer COPY --chmod=755 /entrypoint.sh entrypoint.sh @@ -15,20 +15,34 @@ COPY --chmod=755 /common common COPY --chown=${user}:${user} /artisan artisan COPY .env.example .env COPY /php.ini "${PHP_INI_DIR}/php.ini" +RUN php --ini \ + && php -r "echo 'max_execution_time: ' . ini_get('max_execution_time') . PHP_EOL;" + -# התקן dependencies RUN apt-get update \ - && apt-get satisfy -y --no-install-recommends \ - "curl (>=7.88)" \ - "supervisor (>=4.2)" \ - "unzip (>=6.0)" \ - "vim-tiny (>=2)" \ - && apt-get install -y nodejs npm \ - && npm install -g npm@7 \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* + && apt-get satisfy -y --no-install-recommends \ + "curl (>=7.88)" \ + "supervisor (>=4.2)" \ + "unzip (>=6.0)" \ + "vim-tiny (>=2)" \ + && apt-get install -y nodejs npm \ + && npm install -g npm@7 \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +RUN useradd \ + --uid 1000 \ + --shell /bin/bash \ + "${user}" \ + && setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/frankenphp \ + && chown -R "${user}:${user}" \ + /laravel \ + /data/caddy \ + /config/caddy \ + /var/{log,run} \ + && chmod -R a+rw \ + /var/{log,run} -# התקן PHP extensions RUN install-php-extensions \ bcmath \ bz2 \ @@ -42,36 +56,14 @@ RUN install-php-extensions \ opcache \ redis \ sockets \ - calendar \ + calendar\ zip -# הורד FrankenPHP המעודכן מראש (בעוד יש לנו הרשאות root) -RUN php artisan octane:install --server=frankenphp --no-interaction || true - -# צור משתמש -RUN useradd \ - --uid 1000 \ - --shell /bin/bash \ - "${user}" \ - && setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/frankenphp \ - && chown -R "${user}:${user}" \ - /laravel \ - /data/caddy \ - /config/caddy \ - /var/{log,run} \ - && chmod -R a+rw \ - /var/{log,run} - -# התקן composer dependencies -RUN composer install --no-dev --optimize-autoloader - -# התקן npm dependencies +RUN composer install RUN npm install -# החלף למשתמש רגיל USER ${user} -# הרשאות storage RUN chmod -R a+rw storage - + ENTRYPOINT ["/laravel/entrypoint.sh"] \ No newline at end of file diff --git a/composer.json b/composer.json index 0aa26ea..3db3e99 100644 --- a/composer.json +++ b/composer.json @@ -77,4 +77,4 @@ }, "minimum-stability": "stable", "prefer-stable": true -} +} \ No newline at end of file diff --git a/entrypoint.sh b/entrypoint.sh index 2c55764..3673b7f 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -67,21 +67,23 @@ _setup() { } _run() { - case "${CONTAINER_MODE}" in + case "${CONTAINER_MODE}" in app) - echo "🚀 Running octane..." - # הפעל את octane עם --no-interaction כדי לא לנסות לעדכן FrankenPHP - ${ARTISAN} queue:work -vv \ - --no-interaction \ - --tries="${CONTAINER_WORKER_TRIES}" \ - --sleep="${CONTAINER_WORKER_SLEEP}" \ - --timeout="${CONTAINER_WORKER_TIMEOUT}" \ - --delay="${CONTAINER_WORKER_DELAY}" & - ${ARTISAN} schedule:work & - - # הפעל octane עם דגלים שימנעו עדכון FrankenPHP - exec ${ARTISAN} octane:frankenphp --host=0.0.0.0 --port="${CONTAINER_PORT}" --no-interaction + echo "🚀 Running octane..." + # ${ARTISAN} schedule:work & + # ${ARTISAN} octane:frankenphp --host=0.0.0.0 --port="${CONTAINER_PORT}" & + # ${ARTISAN} queue: + ${ARTISAN} queue:work -vv \ + --no-interaction \ + --tries="${CONTAINER_WORKER_TRIES}" \ + --sleep="${CONTAINER_WORKER_SLEEP}" \ + --timeout="${CONTAINER_WORKER_TIMEOUT}" \ + --delay="${CONTAINER_WORKER_DELAY}" & + ${ARTISAN} schedule:work & + ${ARTISAN} octane:frankenphp --host=0.0.0.0 --port="${CONTAINER_PORT}" ;; + # ${ARTISAN} serve --host=0.0.0.0 --port="${CONTAINER_PORT}" + # ;; worker) echo "⏳ Running the queue..." exec "${ARTISAN}" queue:work From 4a002f8159a2b1ec894053777061783b5917bc32 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 13 Jul 2025 10:28:53 +0300 Subject: [PATCH 220/259] commit befor --- .github/workflows/php-build-and-deploy.yml | 2 +- Dockerfile | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index c8f53aa..57a7eb5 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_6 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_7 flavor: | latest=false tags: | diff --git a/Dockerfile b/Dockerfile index 5ec8223..49e19a9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,7 @@ ARG php_version=8.3 -FROM dunglas/frankenphp:1.1-php${php_version} AS base +# FROM dunglas/frankenphp:1.1-php${php_version} AS base +FROM dunglas/frankenphp:1.8-php8.3-bookworm AS base WORKDIR /laravel SHELL ["/bin/bash", "-eou", "pipefail", "-c"] From 99ce50088d3e09d56a98ca232fc7c9b1fad77eea Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 13 Jul 2025 10:43:10 +0300 Subject: [PATCH 221/259] commit befor --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Services/PotentialSoldierData.php | 16 ---------------- 2 files changed, 1 insertion(+), 17 deletions(-) delete mode 100644 app/Services/PotentialSoldierData.php diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 57a7eb5..5970baa 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_7 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_10 flavor: | latest=false tags: | diff --git a/app/Services/PotentialSoldierData.php b/app/Services/PotentialSoldierData.php deleted file mode 100644 index 9565dbb..0000000 --- a/app/Services/PotentialSoldierData.php +++ /dev/null @@ -1,16 +0,0 @@ -soldierId = $soldierId; - $this->isLowConstraint = $isLowConstraint; - } -} From 3aaf242d2a9bf16a56e01cf229d09b85fd57eef9 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 13 Jul 2025 10:48:23 +0300 Subject: [PATCH 222/259] commit befor --- .github/workflows/php-build-and-deploy.yml | 2 +- .../ChartResource/Widgets/ChartFilter.php | 16 ++++++++++------ app/Services/ConcurrentTasks.php | 3 ++- app/Services/FixedConstraints.php | 4 ++-- app/Services/RecurringEvents.php | 6 ++++-- 5 files changed, 19 insertions(+), 12 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 5970baa..4dd1c01 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_10 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_11 flavor: | latest=false tags: | diff --git a/app/Resources/ChartResource/Widgets/ChartFilter.php b/app/Resources/ChartResource/Widgets/ChartFilter.php index 204b0a5..cf048a4 100644 --- a/app/Resources/ChartResource/Widgets/ChartFilter.php +++ b/app/Resources/ChartResource/Widgets/ChartFilter.php @@ -164,9 +164,11 @@ protected function runAlgorithm($form) protected function resetShifts($form) { - $startDate = (Carbon::now()->format('m') == Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->format('m')) - ? Carbon::now()->addDay()->format('Y-m-d') - : Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->startOfMonth()->format('Y-m-d'); + $startDate = + // (Carbon::now()->format('m') == Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->format('m')) + // ? Carbon::now()->addDay()->format('Y-m-d') + // : + Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->startOfMonth()->format('Y-m-d'); Shift::whereNotNull('soldier_id') ->whereBetween('start_date', [$startDate, (Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->endOfMonth()->addDay())->format('Y-m-d')]) ->update(['soldier_id' => null]); @@ -174,9 +176,11 @@ protected function resetShifts($form) protected function deleteShifts($form) { - $startDate = (Carbon::now()->format('m') == Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->format('m')) - ? Carbon::now()->addDay()->format('Y-m-d') - : Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->startOfMonth()->format('Y-m-d'); + $startDate = + // (Carbon::now()->format('m') == Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->format('m')) + // ? Carbon::now()->addDay()->format('Y-m-d') + // : + Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->startOfMonth()->format('Y-m-d'); Shift::whereBetween('start_date', [$startDate, (Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->endOfMonth()->addDay())->format('Y-m-d')]) ->delete(); } diff --git a/app/Services/ConcurrentTasks.php b/app/Services/ConcurrentTasks.php index 5a7acb2..0268c86 100644 --- a/app/Services/ConcurrentTasks.php +++ b/app/Services/ConcurrentTasks.php @@ -40,7 +40,8 @@ public function run() protected function getShiftsWithTasks() { - $startOfMonth = max($this->date->copy()->startOfMonth(), Carbon::tomorrow()); + $startOfMonth = $this->date->copy()->startOfMonth(); + // $startOfMonth = max($this->date->copy()->startOfMonth(), Carbon::tomorrow()); $endOfMonth = $this->date->copy()->endOfMonth(); return Shift::whereNull('soldier_id') diff --git a/app/Services/FixedConstraints.php b/app/Services/FixedConstraints.php index 41f0a8e..a4f6155 100644 --- a/app/Services/FixedConstraints.php +++ b/app/Services/FixedConstraints.php @@ -55,7 +55,7 @@ protected function createConstraint($constraintType, $soldierId, $startDate, $en protected function createPeriod() { $month = Carbon::now()->addMonth(); - - return CarbonPeriod::between(max($month->copy()->startOfMonth(), Carbon::tomorrow()), $month->copy()->endOfMonth()); + return CarbonPeriod::between($month->copy()->startOfMonth(), $month->copy()->endOfMonth()); + // return CarbonPeriod::between(max($month->copy()->startOfMonth(), Carbon::tomorrow()), $month->copy()->endOfMonth()); } } diff --git a/app/Services/RecurringEvents.php b/app/Services/RecurringEvents.php index 0e275fb..c64f241 100644 --- a/app/Services/RecurringEvents.php +++ b/app/Services/RecurringEvents.php @@ -114,8 +114,10 @@ protected function convertNumbersToDatesInMonth($dayNumbers) protected function createPeriod() { return $this->task->recurring['type'] == 'Daily range' ? - CarbonPeriod::between(max($this->task['recurring']['start_date'], Carbon::tomorrow()), $this->task['recurring']['end_date']) : - CarbonPeriod::between(max($this->month->copy()->startOfMonth(), Carbon::tomorrow()), $this->month->copy()->endOfMonth()); + CarbonPeriod::between($this->task['recurring']['start_date'], $this->task['recurring']['end_date']) : + CarbonPeriod::between($this->month->copy()->startOfMonth(), $this->month->copy()->endOfMonth()); + // CarbonPeriod::between(max($this->task['recurring']['start_date'], Carbon::tomorrow()), $this->task['recurring']['end_date']) : + // CarbonPeriod::between(max($this->month->copy()->startOfMonth(), Carbon::tomorrow()), $this->month->copy()->endOfMonth()); } protected function createShifts(array $dates) From fb318af020e06ed503c14d33b168ab735d021835 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 13 Jul 2025 15:56:14 +0300 Subject: [PATCH 223/259] commit befor --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Services/Helpers.php | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 4dd1c01..522c575 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_11 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_12 flavor: | latest=false tags: | diff --git a/app/Services/Helpers.php b/app/Services/Helpers.php index ad700fd..094ec61 100644 --- a/app/Services/Helpers.php +++ b/app/Services/Helpers.php @@ -15,30 +15,30 @@ class Helpers { public static function buildShift(Shift $shift): ShiftService { + $task = $shift->task()->withTrashed()->first() ?? $shift->task; + return new ShiftService( $shift->id, - $shift->task_id, - $shift->task()->withTrashed()->first()->type, + $task->type, $shift->start_date, $shift->end_date, - $shift->parallel_weight === null ? $shift->task()->withTrashed()->first()->parallel_weight : $shift->parallel_weight, - self::kind($shift), - $shift->task()->withTrashed()->first()->concurrent_tasks + $shift->parallel_weight === null ? $task->parallel_weight : $shift->parallel_weight, + self::kind($shift, $task), + $task->concurrent_tasks ); } - protected static function kind(Shift $shift) + protected static function kind(Shift $shift, $task) { if ($shift->is_weekend === true) { return TaskKind::WEEKEND->value; } - if ($shift->is_weekend === false && $shift->task()->withTrashed()->first()->kind === TaskKind::WEEKEND->value) { + if ($shift->is_weekend === false && $task->kind === TaskKind::WEEKEND->value) { return TaskKind::REGULAR->value; } - return $shift->task()->withTrashed()->first()->kind; + return $task->kind; } - public static function buildSoldier($soldier, $constraints, $shifts, array $capacityHold, $concurrentsShifts = []): SoldierService { return new SoldierService( From 3abfdfc39500897be787867e5c768b475b3f29ca Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 13 Jul 2025 16:16:14 +0300 Subject: [PATCH 224/259] commit befor --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Resources/TaskResource.php | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 522c575..22c914f 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_12 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_13 flavor: | latest=false tags: | diff --git a/app/Resources/TaskResource.php b/app/Resources/TaskResource.php index 792f186..a58261e 100644 --- a/app/Resources/TaskResource.php +++ b/app/Resources/TaskResource.php @@ -423,11 +423,13 @@ protected static function taskDetails(Get $get) { $task_date = Carbon::parse($get('recurring.date')); $task = new Task; + $task->id = null; $task->type = $get('type'); $task->kind = $get('kind'); $task->concurrent_tasks = $get('concurrent_tasks') ?? []; $shift = new Shift; $shift->id = null; + $shift->task_id = null; $shift->task = $task; $shift->start_date = Carbon::parse($task_date->format('Y-m-d').' '.$get('start_hour')); $shift->end_date = $shift->start_date->copy()->addHours((float) ($get('duration'))); From 4292565a14178e5182af369019a26e3819c834b2 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Mon, 14 Jul 2025 10:07:22 +0300 Subject: [PATCH 225/259] commit befor --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Resources/TaskResource.php | 4 ++-- app/Services/Helpers.php | 1 + 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 22c914f..76b9a07 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_13 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_14 flavor: | latest=false tags: | diff --git a/app/Resources/TaskResource.php b/app/Resources/TaskResource.php index a58261e..3718bdb 100644 --- a/app/Resources/TaskResource.php +++ b/app/Resources/TaskResource.php @@ -423,14 +423,14 @@ protected static function taskDetails(Get $get) { $task_date = Carbon::parse($get('recurring.date')); $task = new Task; - $task->id = null; + $task->id = 0; $task->type = $get('type'); $task->kind = $get('kind'); $task->concurrent_tasks = $get('concurrent_tasks') ?? []; $shift = new Shift; $shift->id = null; - $shift->task_id = null; $shift->task = $task; + $shift->task_id = 0; $shift->start_date = Carbon::parse($task_date->format('Y-m-d').' '.$get('start_hour')); $shift->end_date = $shift->start_date->copy()->addHours((float) ($get('duration'))); $shift->parallel_weight = $get('parallel_weight'); diff --git a/app/Services/Helpers.php b/app/Services/Helpers.php index 094ec61..341fc35 100644 --- a/app/Services/Helpers.php +++ b/app/Services/Helpers.php @@ -19,6 +19,7 @@ public static function buildShift(Shift $shift): ShiftService return new ShiftService( $shift->id, + $shift->task_id, $task->type, $shift->start_date, $shift->end_date, From 35496db6351c6fd583c8dbde421f0a6df7472c52 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 17 Jul 2025 13:03:40 +0300 Subject: [PATCH 226/259] commit befor --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Services/PointedSchedule.php | 65 +++++++++++++++++----- 2 files changed, 52 insertions(+), 15 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 76b9a07..18d59d8 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_14 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_15 flavor: | latest=false tags: | diff --git a/app/Services/PointedSchedule.php b/app/Services/PointedSchedule.php index fd91c05..34b3d42 100644 --- a/app/Services/PointedSchedule.php +++ b/app/Services/PointedSchedule.php @@ -14,6 +14,8 @@ class PointedSchedule protected $courses; + protected $originalCourses; + protected $shiftsData; protected $soldiersDict; @@ -35,6 +37,7 @@ public function __construct($soldiers, $shifts) $this->soldiers = collect($soldiers); $this->shifts = collect($shifts); $this->courses = collect([]); + $this->originalCourses = collect([]); $this->soldiersDict = collect([]); $this->shiftsData = collect([]); $this->rotationAssignments = collect([]); @@ -49,6 +52,7 @@ public function __construct($soldiers, $shifts) 'shiftPointRatio' => 0.05, 'isSingleShift' => 0.3, 'isFullWeekend' => 0.7, + 'youngRatio' => 1, ]); $this->minimalRotationSize = 0.5; $this->maximalRotationSize = 2; @@ -57,6 +61,7 @@ public function __construct($soldiers, $shifts) public function schedule() { + $this->initOriginalCourses(); $this->initSoldiersDict(); $this->buildShifts(); $this->initCourses(); @@ -65,6 +70,11 @@ public function schedule() return $this->assignments; } + protected function initOriginalCourses() + { + $this->originalCourses = $this->soldiers->groupBy('course')->sortDesc(); + } + protected function initSoldiersDict() { $this->soldiers->each(function (Soldier $soldier) { @@ -113,9 +123,32 @@ protected function addShiftsDataByTask(string $taskType, $shifts): void { $soldiers = $this->soldiers->filter(fn (Soldier $soldier) => $soldier->isQualified($taskType)); $taskWeight = $this->getTaskWeight($shifts, $soldiers); + $taskWeight['youngRatio'] = $this->getYoungRatio($taskType); + $shifts->each(fn ($shift) => $this->addShiftData($shift, $soldiers, $taskWeight)); } + protected function getYoungRatio($taskType) + { + $ratios = collect([]); + $this->originalCourses->each(function ($soldiers, $course) use ($taskType, &$ratios) { + $total = $soldiers->count(); + $qualified = $soldiers->filter(fn (Soldier $soldier) => $soldier->qualifications->contains($taskType))->count(); + $ratios->push($qualified / $total); + }); + for ($i = 0; $i < $ratios->count() - 1; $i++) { + $decrease = $ratios[$i] - $ratios[$i + 1]; + if ($decrease < -0.4) { + return 0; + } + if ($decrease > 0.4) { + return $decrease / ($i + 1); + } + } + + return 0; + } + protected function getTaskWeight($shifts, $soldiers): array { $types = collect([ @@ -137,7 +170,7 @@ protected function getTaskWeight($shifts, $soldiers): array protected function getRequired($shifts) { return collect([ - 'points' => collect($shifts)->sum(callback: 'points'), + 'points' => collect($shifts)->sum('points'), 'weekends' => collect($shifts) ->filter(fn (Shift $shift) => ($shift->kind == TaskKind::WEEKEND->value)) ->sum(fn (Shift $shift) => $shift->points), @@ -230,6 +263,7 @@ protected function getShiftWeight($taskWeight, Shift $shift, $soldiersCount, $so }; $weight += $shift->points >= 2 && ! $shift->isAttached ? $this->shiftDumbbells['isFullWeekend'] : 0; $weight += $shift->isAttached ? 0 : $this->shiftDumbbells['isSingleShift']; + $weight += $taskWeight['youngRatio'] * $this->shiftDumbbells['youngRatio']; $weight += $this->getShiftAvailabilityRatio($soldiersCount, $soldiersAvailability) * $this->shiftDumbbells['shiftAvailability']; @@ -275,13 +309,12 @@ protected function initCourses() ->groupBy('course') ->map(function ($soldiers, $course) { return $soldiers - ->groupBy(fn ($soldier) => $soldier->pointsMaxData->max) + ->groupBy(fn ($soldier) => number_format($soldier->pointsMaxData->max, 3, '.', '')) ->each(function ($courseSoldiers, $capacity) use ($course) { $this->courses->push($this->buildCourse($course, $capacity, $courseSoldiers)); }); }); - $this->courses = $this->courses->sortByDesc(fn (Course $course) => [$course->max, $course->number]); - + $this->courses = $this->courses->sortByDesc(fn (Course $course) => [(float) $course->max, $course->number]); } protected function buildCourse($number, $capacity, $soldiers) @@ -305,9 +338,9 @@ function (Soldier $soldier) use (&$sortedSoldiers) { protected function assign() { $this->courses - ->filter(fn (Course $course) => $course->max > 0) + ->filter(fn (Course $course) => (float) $course->max > 0) ->each(function (Course $course) { - if (collect($this->shiftsData)->contains(fn ($shifts): bool => collect($shifts)->count() > 0) && $course->max >= 2) { + if (collect($this->shiftsData)->contains(fn ($shifts): bool => collect($shifts)->count() > 0) && (float) $course->max >= 2) { $this->assignShiftsForCourse($course, true); } }) @@ -324,9 +357,9 @@ protected function assignShiftsForCourse(Course $course, $isSingleRotation) while (! $course->hasGap && $course->remaining('pointsMaxData') > 0 && $rotationSize >= $this->minimalRotationSize) { $rotationResult = $this->rotation($course, $rotationSize); if ($rotationResult) { - $this->saveRotationAssigments(); + $this->saveRotationAssignments(); } else { - $this->clearRotationAsssigments(); + $this->clearRotationAssignments(); $rotationSize /= 2; } if ($isSingleRotation) { @@ -337,6 +370,7 @@ protected function assignShiftsForCourse(Course $course, $isSingleRotation) protected function rotation($course, $rotationSize) { + $hasGap = false; foreach ($course->soldiers as $soldier) { $assignedPoints = $this->assignRotationShiftsToSoldier($soldier, $rotationSize); @@ -345,9 +379,12 @@ protected function rotation($course, $rotationSize) return false; } if ($gap > 0) { - $course->hasGap = true; + $hasGap = true; } } + if ($hasGap) { + $course->hasGap = true; + } return true; } @@ -356,7 +393,7 @@ protected function assignRotationShiftsToSoldier(Soldier $soldier, float $rotati { $points = $this->assignRotation($soldier, $rotationSize, false); $remaining = $rotationSize - $points; - if ($remaining <= $this->allowedGap) { + if ($remaining == 0) { return $points; } $points += $this->assignRotation($soldier, $remaining, true); @@ -393,7 +430,7 @@ protected function getPotentialShifts(Soldier $soldier, $rotationSize, $shiftsCo foreach ($this->shiftsData[(string) $rotationSize] as $shift) { if ((! $shift->isAssigned()) && $soldier->isAbleTake($shift, $ignoreLowConstraint)) { $potentialShifts->push($shift); - $this->addToRotationAssigments($soldier, $shift); + $this->addToRotationAssignments($soldier, $shift); $counter++; if ($counter == $shiftsCount) { @@ -410,7 +447,7 @@ protected function sumPoints($shifts) return collect($shifts)->sum(fn ($shift): float => $shift->points); } - protected function addToRotationAssigments(Soldier $soldier, Shift $shift) + protected function addToRotationAssignments(Soldier $soldier, Shift $shift) { $shift->isAssigned = true; if ($shift instanceof AttachedWeekends) { @@ -427,7 +464,7 @@ protected function addToRotationAssigments(Soldier $soldier, Shift $shift) } } - protected function saveRotationAssigments() + protected function saveRotationAssignments() { $this->assignments->push(...$this->rotationAssignments); @@ -437,7 +474,7 @@ protected function saveRotationAssigments() })); } - protected function clearRotationAsssigments() + protected function clearRotationAssignments() { $this->shiftsData->map(fn ($shiftData) => collect($shiftData)->map(fn ($shift) => $shift->isAssigned = false)); $this->rotationAssignments->map(function (Assignment $assignment) { From 949176a03b210f726ffabd09027fcf4930379c7e Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 17 Jul 2025 13:31:12 +0300 Subject: [PATCH 227/259] commit befor --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Services/Charts.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 18d59d8..5aa4e8f 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_15 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_16 flavor: | latest=false tags: | diff --git a/app/Services/Charts.php b/app/Services/Charts.php index ebcfbdf..d3f965d 100644 --- a/app/Services/Charts.php +++ b/app/Services/Charts.php @@ -38,7 +38,7 @@ public function getData() }); return $data - ->groupBy(fn ($soldierData) => $soldierData->first()->get('max')) + ->groupBy(fn ($soldierData) => number_format($soldierData->first()->get('max'), 1, '.', '')) ->map( fn ($items) => $items->map(fn ($item) => collect([$item->keys()->first() => $item->get($item->keys()->first())->get('done')])) ->reduce(function ($carry, $value) { From 0195094717725be1a43d654289beeffc16c3e6b9 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 20 Jul 2025 09:16:01 +0300 Subject: [PATCH 228/259] last change --- app/Livewire/MyDatabaseNotifications.php | 430 ++++++----------------- 1 file changed, 99 insertions(+), 331 deletions(-) diff --git a/app/Livewire/MyDatabaseNotifications.php b/app/Livewire/MyDatabaseNotifications.php index 9e86a17..31df1fd 100644 --- a/app/Livewire/MyDatabaseNotifications.php +++ b/app/Livewire/MyDatabaseNotifications.php @@ -42,11 +42,9 @@ public function confirmExchange($approverRole, $soldierAId, $soldierBId, $shiftA protected function confirmExchangeByRole($approverRole, $soldierAId, $soldierBId, $shiftAId, $shiftBId, $requesterId) { - match ($approverRole) { - 'shifts-assignment' => $this->shiftAssignmentConfirmExchange($soldierAId, $soldierBId, $shiftAId, $shiftBId, $requesterId), - 'team-commander', 'department-commander' => $this->commanderConfirmExchange($soldierAId, $soldierBId, $shiftAId, $shiftBId), - 'soldier' => $this->soldierConfirmExchange($soldierAId, $soldierBId, $shiftAId, $shiftBId) - }; + $approverRole == 'shifts-assignment' ? + $this->shiftAssignmentConfirmExchange($soldierAId, $soldierBId, $shiftAId, $shiftBId, $requesterId) : + $this->soldierConfirmExchange($soldierAId, $soldierBId, $shiftAId, $shiftBId); } protected function shiftAssignmentConfirmExchange($soldierAId, $soldierBId, $shiftAId, $shiftBId, $requesterId) @@ -95,26 +93,28 @@ protected function shiftAssignmentConfirmExchange($soldierAId, $soldierBId, $shi [], $soldierB->user ); - $this->sendNotification( - __('Exchange shift'), - __( - 'Shifts assignment notification of exchanging shifts for commander', - [ - 'commanderName' => User::find($requesterId)->displayName, - 'shiftAName' => $shiftA->task()->withTrashed()->first()->name, - 'soldierAName' => $soldierA->user->displayName, - 'shiftAStart' => $shiftA->start_date, - 'shiftAEnd' => $shiftA->end_date, - 'soldierBName' => $soldierB->user->displayName, - 'shiftBName' => $shiftB->task()->withTrashed()->first()->name, - 'shiftBStart' => $shiftB->start_date, - 'shiftBEnd' => $shiftB->end_date, - 'shiftsAssignmentName' => auth()->user()->displayName, - ] - ), - [], - User::find($requesterId) - ); + if ($requesterId != $soldierAId->user->id && $requesterId != $soldierBId->user->id) { + $this->sendNotification( + __('Exchange shift'), + __( + 'Shifts assignment notification of exchanging shifts for commander', + [ + 'commanderName' => User::find($requesterId)->displayName, + 'shiftAName' => $shiftA->task()->withTrashed()->first()->name, + 'soldierAName' => $soldierA->user->displayName, + 'shiftAStart' => $shiftA->start_date, + 'shiftAEnd' => $shiftA->end_date, + 'soldierBName' => $soldierB->user->displayName, + 'shiftBName' => $shiftB->task()->withTrashed()->first()->name, + 'shiftBStart' => $shiftB->start_date, + 'shiftBEnd' => $shiftB->end_date, + 'shiftsAssignmentName' => auth()->user()->displayName, + ] + ), + [], + User::find($requesterId) + ); + } $this->getShiftsAssignments() ->filter(fn ($shiftsAssignment) => $shiftsAssignment->id !== auth()->user()->id) ->map( @@ -148,7 +148,7 @@ protected function shiftAssignmentExchange($shiftAId, $shiftBId) $this->dispatch('filament-fullcalendar--refresh'); } - protected function commanderConfirmExchange($soldierAId, $soldierBId, $shiftAId, $shiftBId) + protected function soldierConfirmExchange($soldierAId, $soldierBId, $shiftAId, $shiftBId) { $shiftA = Shift::find($shiftAId); $shiftB = Shift::find($shiftBId); @@ -207,64 +207,6 @@ protected function commanderConfirmExchange($soldierAId, $soldierBId, $shiftAId, ); } - protected function soldierConfirmExchange($soldierAId, $soldierBId, $shiftAId, $shiftBId) - { - $soldierA = Soldier::find($soldierAId); - $soldierB = Soldier::find($soldierBId); - $shiftA = Shift::find($shiftAId); - $shiftB = Shift::find($shiftBId); - $commander = $soldierA->team->commander->user; - $this->sendNotification( - __('Request for shift exchange'), - __( - 'Request for shift exchange from commander', - [ - 'commanderName' => $commander->displayName, - 'soldierAName' => $soldierA->user->displayName, - 'shiftAName' => $shiftA->task()->withTrashed()->first()->name, - 'shiftAStart' => $shiftA->start_date, - 'shiftAEnd' => $shiftA->end_date, - 'soldierBName' => $soldierB->user->displayName, - 'shiftBName' => $shiftB->task()->withTrashed()->first()->name, - 'shiftBStart' => $shiftB->start_date, - 'shiftBEnd' => $shiftB->end_date, - ] - ), - [ - NotificationAction::make('confirm') - ->label(__('Confirm')) - ->color('success') - ->icon('heroicon-s-hand-thumb-up') - ->button() - ->dispatch('confirmExchange', [ - 'approverRole' => 'team-commander', - 'soldierAId' => $soldierA->id, - 'soldierBId' => $soldierB->id, - 'shiftAId' => $shiftA->id, - 'shiftBId' => $shiftB->id, - 'requesterId' => auth()->user()->id, - ]) - ->close(), - NotificationAction::make('deny') - ->label(__('Deny')) - ->color('danger') - ->icon('heroicon-m-hand-thumb-down') - ->button() - ->dispatch('denyExchange', [ - 'rejectorRole' => 'team-commander', - 'soldierAId' => $soldierA->id, - 'soldierBId' => $soldierB->id, - 'shiftAId' => $shiftA->id, - 'shiftBId' => $shiftB->id, - 'requesterId' => auth()->user()->id, - 'sendToSoldiers' => true, - ]) - ->close(), - ], - $commander - ); - } - #[On('denyExchange')] public function denyExchange($rejectorRole, $soldierAId, $soldierBId, $shiftAId, $shiftBId, $requesterId, $sendToSoldiers): void { @@ -273,11 +215,9 @@ public function denyExchange($rejectorRole, $soldierAId, $soldierBId, $shiftAId, protected function denyExchangeByRole($rejectorRole, $soldierAId, $soldierBId, $shiftAId, $shiftBId, $requesterId, $sendToSoldiers) { - match ($rejectorRole) { - 'shifts-assignment' => $this->shiftAssignmentDenyExchange($soldierAId, $soldierBId, $shiftAId, $shiftBId, $requesterId, $sendToSoldiers), - 'team-commander', 'department-commander' => $this->commanderDenyExchange($soldierAId, $soldierBId, $shiftAId, $shiftBId), - 'soldier' => $this->soldierDenyExchange($soldierAId, $soldierBId, $shiftAId, $shiftBId) - }; + $rejectorRole == 'shifts-assignment' ? + $this->shiftAssignmentDenyExchange($soldierAId, $soldierBId, $shiftAId, $shiftBId, $requesterId, $sendToSoldiers) : + $this->soldierDenyExchange($soldierAId, $soldierBId, $shiftAId, $shiftBId); } protected function shiftAssignmentDenyExchange($soldierAId, $soldierBId, $shiftAId, $shiftBId, $requesterId, $sendToSoldiers) @@ -327,26 +267,28 @@ protected function shiftAssignmentDenyExchange($soldierAId, $soldierBId, $shiftA $soldierB->user ); } - $this->sendNotification( - __('Deny exchange shift request'), - __( - 'Shifts assignment notification of deny exchanging shifts for commander', - [ - 'commanderName' => User::find($requesterId)->displayName, - 'shiftAName' => $shiftA->task()->withTrashed()->first()->name, - 'soldierAName' => $soldierA->user->displayName, - 'shiftAStart' => $shiftA->start_date, - 'shiftAEnd' => $shiftA->end_date, - 'shiftBName' => $shiftB->task()->withTrashed()->first()->name, - 'soldierBName' => $soldierB->user->displayName, - 'shiftBStart' => $shiftB->start_date, - 'shiftBEnd' => $shiftB->end_date, - 'shiftsAssignmentName' => auth()->user()->displayName, - ] - ), - [], - User::find($requesterId) - ); + if ($requesterId != $soldierAId->user->id && $requesterId != $soldierBId->user->id) { + $this->sendNotification( + __('Deny exchange shift request'), + __( + 'Shifts assignment notification of deny exchanging shifts for commander', + [ + 'commanderName' => User::find($requesterId)->displayName, + 'shiftAName' => $shiftA->task()->withTrashed()->first()->name, + 'soldierAName' => $soldierA->user->displayName, + 'shiftAStart' => $shiftA->start_date, + 'shiftAEnd' => $shiftA->end_date, + 'shiftBName' => $shiftB->task()->withTrashed()->first()->name, + 'soldierBName' => $soldierB->user->displayName, + 'shiftBStart' => $shiftB->start_date, + 'shiftBEnd' => $shiftB->end_date, + 'shiftsAssignmentName' => auth()->user()->displayName, + ] + ), + [], + User::find($requesterId) + ); + } $this->getShiftsAssignments() ->filter(fn ($shiftsAssignment) => $shiftsAssignment->id !== auth()->user()->id) ->map( @@ -373,74 +315,6 @@ protected function shiftAssignmentDenyExchange($soldierAId, $soldierBId, $shiftA ); } - protected function commanderDenyExchange($soldierAId, $soldierBId, $shiftAId, $shiftBId) - { - $soldierA = Soldier::find($soldierAId); - $soldierB = Soldier::find($soldierBId); - $shiftA = Shift::find($shiftAId); - $shiftB = Shift::find($shiftBId); - if ($soldierA->team->commander->id !== $soldierB->id) { - $this->sendNotification( - __('Deny exchange shift request'), - __( - 'Commander notification of deny exchanging shifts for the first soldier', - [ - 'soldierAName' => $soldierA->user->displayName, - 'shiftAName' => $shiftA->task()->withTrashed()->first()->name, - 'shiftAStart' => $shiftA->start_date, - 'shiftAEnd' => $shiftA->end_date, - 'soldierBName' => $soldierB->user->displayName, - 'shiftBName' => $shiftB->task()->withTrashed()->first()->name, - 'shiftBStart' => $shiftB->start_date, - 'shiftBEnd' => $shiftB->end_date, - 'commanderName' => $soldierA->team->commander->user->displayName, - ] - ), - [], - $soldierA->user - ); - $this->sendNotification( - __('Deny exchange shift request'), - __( - 'Commander notification of deny exchanging shifts for the second soldier', - [ - 'soldierBName' => $soldierB->user->displayName, - 'soldierAName' => $soldierA->user->displayName, - 'shiftBName' => $shiftB->task()->withTrashed()->first()->name, - 'shiftBStart' => $shiftB->start_date, - 'shiftBEnd' => $shiftB->end_date, - 'shiftAName' => $shiftA->task()->withTrashed()->first()->name, - 'shiftAStart' => $shiftA->start_date, - 'shiftAEnd' => $shiftA->end_date, - 'commanderName' => $soldierA->team->commander->user->displayName, - ] - ), - [], - $soldierB->user - ); - } else { - $this->sendNotification( - __('Deny exchange shift request'), - __( - 'Commander notification of deny exchanging shifts for the first soldier', - [ - 'soldierAName' => $soldierA->user->displayName, - 'shiftAName' => $shiftA->task()->withTrashed()->first()->name, - 'shiftAStart' => $shiftA->start_date, - 'shiftAEnd' => $shiftA->end_date, - 'soldierBName' => $soldierB->user->displayName, - 'shiftBName' => $shiftB->task()->withTrashed()->first()->name, - 'shiftBStart' => $shiftB->start_date, - 'shiftBEnd' => $shiftB->end_date, - 'commanderName' => $soldierA->team->commander->user->displayName, - ] - ), - [], - $soldierA->user - ); - } - } - protected function soldierDenyExchange($soldierAId, $soldierBId, $shiftAId, $shiftBId) { $soldierA = Soldier::find($soldierAId); @@ -475,11 +349,9 @@ public function confirmChange($approverRole, $shiftId, $soldierId, $requesterId) protected function confirmChangeByRole($approverRole, $shiftId, $soldierId, $requesterId) { - match ($approverRole) { - 'shifts-assignment' => $this->shiftAssignmentConfirmChange($shiftId, $soldierId, $requesterId), - 'team-commander', 'department-commander' => $this->commanderConfirmChange($shiftId, $soldierId), - 'soldier' => $this->soldierConfirmChange($shiftId, $soldierId) - }; + $approverRole == 'shifts-assignment' ? + $this->shiftAssignmentConfirmChange($shiftId, $soldierId, $requesterId) : + $this->soldierConfirmChange($shiftId, $soldierId); } protected function shiftAssignmentConfirmChange($shiftId, $soldierId, $requesterId) @@ -520,23 +392,25 @@ protected function shiftAssignmentConfirmChange($shiftId, $soldierId, $requester [], $soldierB->user ); - $this->sendNotification( - __('Change shift'), - __( - 'Shifts assignment notification of changing shifts for commander', - [ - 'commanderName' => User::find($requesterId)->displayName, - 'shiftName' => $shift->task()->withTrashed()->first()->name, - 'soldierAName' => $soldierA->user->displayName, - 'shiftStart' => $shift->start_date, - 'shiftEnd' => $shift->end_date, - 'soldierBName' => $soldierB->user->displayName, - 'shiftsAssignmentName' => auth()->user()->displayName, - ] - ), - [], - User::find($requesterId) - ); + if ($requesterId != $soldierA->user->id && $requesterId != $soldierB->user->id) { + $this->sendNotification( + __('Change shift'), + __( + 'Shifts assignment notification of changing shifts for commander', + [ + 'commanderName' => User::find($requesterId)->displayName, + 'shiftName' => $shift->task()->withTrashed()->first()->name, + 'soldierAName' => $soldierA->user->displayName, + 'shiftStart' => $shift->start_date, + 'shiftEnd' => $shift->end_date, + 'soldierBName' => $soldierB->user->displayName, + 'shiftsAssignmentName' => auth()->user()->displayName, + ] + ), + [], + User::find($requesterId) + ); + } $this->getShiftsAssignments() ->filter(fn ($shiftsAssignment) => $shiftsAssignment->id !== auth()->user()->id) ->map( @@ -560,7 +434,7 @@ protected function shiftAssignmentConfirmChange($shiftId, $soldierId, $requester ); } - protected function commanderConfirmChange($shiftId, $soldierId) + protected function soldierConfirmChange($shiftId, $soldierId) { $shift = Shift::find($shiftId); $this->getShiftsAssignments() @@ -611,56 +485,6 @@ protected function commanderConfirmChange($shiftId, $soldierId) ); } - protected function soldierConfirmChange($shiftId, $soldierId) - { - $shift = Shift::find($shiftId); - $soldierA = Soldier::find($shift->soldier_id); - $soldierB = Soldier::find($soldierId); - $commander = $soldierA->team->commander->user; - $this->sendNotification( - __('Request for shift change'), - __( - 'Request for shift change from commander', - [ - 'commanderName' => $commander->displayName, - 'soldierAName' => $soldierA->user->displayName, - 'shiftName' => $shift->task()->withTrashed()->first()->name, - 'shiftStart' => $shift->start_date, - 'shiftEnd' => $shift->end_date, - 'soldierBName' => $soldierB->user->displayName, - ] - ), - [ - NotificationAction::make('confirm') - ->label(__('Confirm')) - ->color('success') - ->icon('heroicon-s-hand-thumb-up') - ->button() - ->dispatch('confirmChange', [ - 'approverRole' => 'team-commander', - 'shiftId' => $shift->id, - 'soldierId' => $soldierId, - 'requesterId' => auth()->user()->id, - ]) - ->close(), - NotificationAction::make('deny') - ->label(__('Deny')) - ->color('danger') - ->icon('heroicon-m-hand-thumb-down') - ->button() - ->dispatch('denyChange', [ - 'rejectorRole' => 'team-commander', - 'shiftId' => $shift->id, - 'soldierId' => $soldierId, - 'requesterId' => auth()->user()->id, - 'sendToSoldiers' => true, - ]) - ->close(), - ], - $commander - ); - } - #[On('denyChange')] public function denyChange($rejectorRole, $shiftId, $soldierId, $requesterId, $sendToSoldiers): void { @@ -669,11 +493,9 @@ public function denyChange($rejectorRole, $shiftId, $soldierId, $requesterId, $s protected function denyChangeByRole($rejectorRole, $shiftId, $soldierId, $requesterId, $sendToSoldiers) { - match ($rejectorRole) { - 'shifts-assignment' => $this->shiftAssignmentDenyChange($shiftId, $soldierId, $requesterId, $sendToSoldiers), - 'team-commander', 'department-commander' => $this->commanderDenyChange($shiftId, $soldierId), - 'soldier' => $this->soldierDenyChange($shiftId, $soldierId) - }; + $rejectorRole == 'shifts-assignment' ? + $this->shiftAssignmentDenyChange($shiftId, $soldierId, $requesterId, $sendToSoldiers) : + $this->soldierDenyChange($shiftId, $soldierId); } protected function shiftAssignmentDenyChange($shiftId, $soldierId, $requesterId, $sendToSoldiers) @@ -716,23 +538,25 @@ protected function shiftAssignmentDenyChange($shiftId, $soldierId, $requesterId, $soldierB->user ); } - $this->sendNotification( - __('Deny change shift request'), - __( - 'Shifts assignment notification of deny changing shifts for commander', - [ - 'commanderName' => User::find($requesterId)->displayName, - 'shiftName' => $shift->task()->withTrashed()->first()->name, - 'soldierAName' => $soldierA->user->displayName, - 'shiftStart' => $shift->start_date, - 'shiftEnd' => $shift->end_date, - 'soldierBName' => $soldierB->user->displayName, - 'shiftsAssignmentName' => auth()->user()->displayName, - ] - ), - [], - User::find($requesterId) - ); + if ($requesterId != $soldierA->user->id && $requesterId != $soldierB->user->id) { + $this->sendNotification( + __('Deny change shift request'), + __( + 'Shifts assignment notification of deny changing shifts for commander', + [ + 'commanderName' => User::find($requesterId)->displayName, + 'shiftName' => $shift->task()->withTrashed()->first()->name, + 'soldierAName' => $soldierA->user->displayName, + 'shiftStart' => $shift->start_date, + 'shiftEnd' => $shift->end_date, + 'soldierBName' => $soldierB->user->displayName, + 'shiftsAssignmentName' => auth()->user()->displayName, + ] + ), + [], + User::find($requesterId) + ); + } $this->getShiftsAssignments() ->filter(fn ($shiftsAssignment) => $shiftsAssignment->id !== auth()->user()->id) ->map( @@ -756,64 +580,6 @@ protected function shiftAssignmentDenyChange($shiftId, $soldierId, $requesterId, ); } - protected function commanderDenyChange($shiftId, $soldierId) - { - $shift = Shift::find($shiftId); - $soldierA = Soldier::find($shift->soldier_id); - $soldierB = Soldier::find($soldierId); - if ($soldierA->team->commander->id !== $soldierB->id) { - $this->sendNotification( - __('Deny change shift request'), - __( - 'Commander notification of deny changing shift request for the first soldier', - [ - 'soldierAName' => $soldierA->user->displayName, - 'shiftName' => $shift->task()->withTrashed()->first()->name, - 'shiftStart' => $shift->start_date, - 'shiftEnd' => $shift->end_date, - 'soldierBName' => $soldierB->user->displayName, - 'commanderName' => $soldierA->team->commander->user->displayName, - ] - ), - [], - $soldierA->user - ); - $this->sendNotification( - __('Deny change shift request'), - __( - 'Commander notification of deny changing shift request for the second soldier', - [ - 'soldierBName' => $soldierB->user->displayName, - 'soldierAName' => $soldierA->user->displayName, - 'shiftName' => $shift->task()->withTrashed()->first()->name, - 'shiftStart' => $shift->start_date, - 'shiftEnd' => $shift->end_date, - 'commanderName' => $soldierA->team->commander->user->displayName, - ] - ), - [], - $soldierB->user - ); - } else { - $this->sendNotification( - __('Deny change shift request'), - __( - 'Commander notification of deny changing shift request for the first soldier', - [ - 'soldierAName' => $soldierA->user->displayName, - 'shiftName' => $shift->task()->withTrashed()->first()->name, - 'shiftStart' => $shift->start_date, - 'shiftEnd' => $shift->end_date, - 'soldierBName' => $soldierB->user->displayName, - 'commanderName' => $soldierA->team->commander->user->displayName, - ] - ), - [], - $soldierA->user - ); - } - } - protected function soldierDenyChange($shiftId, $soldierId) { $shift = Shift::find($shiftId); @@ -845,7 +611,9 @@ protected function deleteNonRelevantNotifications($commonKey) protected static function getShiftsAssignments() { - return User::whereHas('roles', fn ($query) => $query->where('name', 'shifts-assignment') + return User::whereHas( + 'roles', + fn ($query) => $query->where('name', 'shifts-assignment') )->get(); } From 7cb4e3d3be430ff486af554b717eac5604539ca0 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 23 Jul 2025 10:49:36 +0300 Subject: [PATCH 229/259] last change --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Exports/ShiftsExport.php | 76 +++-------- app/Exports/TaskTypeSheet.php | 150 +++++++++++++++++++++ app/Filament/Widgets/CalendarWidget.php | 13 +- app/Filters/NumberFilter.php | 69 ++++++---- app/Models/Constraint.php | 5 +- app/Resources/SoldierResource.php | 8 +- app/Resources/TaskResource.php | 2 + app/Services/Algorithm.php | 2 +- app/Services/Helpers.php | 1 + app/Services/RecurringEvents.php | 4 +- 11 files changed, 227 insertions(+), 105 deletions(-) create mode 100644 app/Exports/TaskTypeSheet.php diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 5aa4e8f..caff3f8 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_16 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_18 flavor: | latest=false tags: | diff --git a/app/Exports/ShiftsExport.php b/app/Exports/ShiftsExport.php index 4690216..4bf5219 100644 --- a/app/Exports/ShiftsExport.php +++ b/app/Exports/ShiftsExport.php @@ -2,74 +2,38 @@ namespace App\Exports; -use App\Enums\TaskKind; use App\Models\Shift; -use App\Models\User; -use Illuminate\Support\Carbon; -use Maatwebsite\Excel\Concerns\FromCollection; -use Maatwebsite\Excel\Concerns\ShouldAutoSize; -use Maatwebsite\Excel\Concerns\WithHeadings; -use Maatwebsite\Excel\Concerns\WithStyles; -use Maatwebsite\Excel\Concerns\WithTitle; -use PhpOffice\PhpSpreadsheet\Style\Fill; -use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet; +use App\Models\Task; +use Carbon\Carbon; +use Maatwebsite\Excel\Concerns\WithMultipleSheets; -class ShiftsExport implements FromCollection, ShouldAutoSize, WithHeadings, WithStyles, WithTitle +class ShiftsExport implements WithMultipleSheets { - protected $query; - protected $month; + protected $shifts; + public function __construct($month) { $this->month = $month; - $this->query = Shift::whereNotNull('soldier_id') + $this->shifts = Shift::whereNotNull('soldier_id') ->whereBetween('start_date', [Carbon::parse($this->month)->startOfMonth(), Carbon::parse($this->month)->endOfMonth()]) ->get(); } - public function collection() - { - return $this->query - ->sortBy('start_date') - ->map(function ($shift) { - $task = $shift->task()->withTrashed()->first(); - - return [ - __('Shift name') => $task->name, - __('Shift type') => $task->type, - __('Soldier') => User::where('userable_id', $shift->soldier_id)->first()?->displayName ?? __('Unknown'), - __('Start date') => $shift->start_date, - __('End date') => $shift->end_date, - __('Kind') => TaskKind::from($task->kind)->getLabel(), - ]; - }); - } - - public function headings(): array - { - return [ - __('Shift name'), - __('Shift type'), - __('Soldier'), - __('Start date'), - __('End date'), - __('Kind'), - ]; - } - - public function styles(Worksheet $sheet) - { - $sheet->setRightToLeft(true); - $sheet->getStyle('A1:F1')->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB('D3D3D3'); - - return [ - 1 => ['font' => ['bold' => true]], - ]; - } - - public function title(): string + public function sheets(): array { - return $this->month; + $tasksTypes = Task::select('type', 'color') + ->get() + ->groupBy('type') + ->map(fn ($group) => $group->first()) + ->values() + ->toArray(); + + return collect($tasksTypes)->map(function ($type) { + $shifts = $this->shifts->filter(fn (Shift $shift) => $shift->task()->withTrashed()->first()->type == $type['type']); + + return new TaskTypeSheet($this->month, $type['type'], $shifts, $type['color']); + })->toArray(); } } diff --git a/app/Exports/TaskTypeSheet.php b/app/Exports/TaskTypeSheet.php new file mode 100644 index 0000000..646f377 --- /dev/null +++ b/app/Exports/TaskTypeSheet.php @@ -0,0 +1,150 @@ +month = $month; + $this->taskType = $taskType; + $this->shifts = $shifts; + $this->color = $this->convertColorToRBGFormat($color); + $this->tasksNames = $this->getTasksNames(); + } + + protected function convertColorToRBGFormat($color) + { + $color = str_replace('#', '', $color); + $color = strtoupper($color); + + return 'FF'.$color; + } + + protected function getTasksNames() + { + $tasksNames = $this->shifts->groupBy(fn ($shift) => $shift->task->type) + ->map(fn ($shifts, $type) => $shifts->pluck('task.name')->unique()) + ->flatten(); + $tasksNamesWithoutWeekendAndThurthday = $tasksNames->filter(fn ($name) => strpos($name, 'סופש') !== false || strpos($name, 'חמישי') !== false)->flatten(); + $tasksNames = $tasksNames->filter(fn ($name) => (! strpos($name, 'סופש') && ! strpos($name, 'חמישי')))->flatten(); + + $tasksNamesWithoutWeekendAndThurthday->each(function ($name) use (&$tasksNames) { + $baseName = str_replace([' חמישי', ' סופש'], '', $name); + if (! $tasksNames->contains($baseName)) { + $tasksNames->push($name); + } + }); + + return $tasksNames->toArray(); + } + + public function title(): string + { + return $this->taskType; + } + + public function styles(Worksheet $sheet) + { + $sheet->getTabColor()->setARGB($this->color); + $sheet->setRightToLeft(true); + $sheet->getStyle('A1:M'.$sheet->getHighestRow()) + ->getAlignment() + ->setHorizontal(Alignment::HORIZONTAL_CENTER); + + $columnCount = count($this->tasksNames); + $endColumn = \PhpOffice\PhpSpreadsheet\Cell\Coordinate::stringFromColumnIndex($columnCount + 1); + + $sheet->getStyle('B1:'.$endColumn.'1') + ->getFill() + ->setFillType(Fill::FILL_SOLID) + ->getStartColor() + ->setARGB($this->color); + + $sheet->getStyle('B1:'.$endColumn.'1') + ->getBorders() + ->getAllBorders() + ->setBorderStyle(Border::BORDER_THICK); + + $sheet->getStyle('B1:'.$endColumn.'1') + ->getFont() + ->setBold(true); + + $sheet->getStyle('A2:A'.$sheet->getHighestRow()) + ->getFill() + ->setFillType(Fill::FILL_SOLID) + ->getStartColor() + ->setARGB($this->color); + + $sheet->getStyle('A2:A'.$sheet->getHighestRow()) + ->getFont() + ->setBold(true); + + for ($row = 2; $row <= $sheet->getHighestRow(); $row++) { + $dateCell = $sheet->getCell('A'.$row)->getValue(); + $date = Carbon::parse($dateCell); + if ($date->isFriday() || $date->isSaturday()) { + $sheet->getStyle('A'.$row.':'.$endColumn.$row) + ->getFill() + ->setFillType(Fill::FILL_SOLID) + ->getStartColor() + ->setARGB('D3D3D3'); + } + } + $sheet->getStyle('A1:'.$endColumn.''.$sheet->getHighestRow()) + ->getBorders() + ->getAllBorders() + ->setBorderStyle(Border::BORDER_THIN); + + } + + public function headings(): array + { + return array_merge([' '], $this->tasksNames); + } + + public function collection() + { + [$year, $month] = explode('-', $this->month); + $daysInMonth = Carbon::createFromDate($year, $month)->daysInMonth; + + $shiftsByDate = $this->shifts->groupBy(fn (Shift $shift) => $shift->start_date->format('Y-m-d'))->sortBy(fn ($shifts, $date) => $date); + + $data = collect(range(1, $daysInMonth))->map(function ($day) use ($year, $month, $shiftsByDate) { + $date = Carbon::createFromDate($year, $month, $day)->format('Y-m-d'); + $row = [$date]; + foreach ($this->tasksNames as $name) { + $shiftForDate = $shiftsByDate->get($date, collect())->first(function ($shift) use ($name) { + return $shift->task && strpos($shift->task->name, $name) !== false; + }); + $row[] = ($shiftForDate && $shiftForDate->soldier) ? $shiftForDate->soldier->user->displayName : ' '; + } + + return $row; + }); + + return $data; + } +} diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index a4f77e7..314c479 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -2,7 +2,6 @@ namespace App\Filament\Widgets; -use App\Enums\ConstraintType; use App\Exports\ShiftsExport; use App\Models\Constraint; use App\Models\Shift; @@ -163,11 +162,7 @@ protected function createConstraintAction() return CreateAction::make() ->action(function (array $data) { - if ( - ($data['constraint_type'] == ConstraintType::VACATION->value || - $data['constraint_type'] == ConstraintType::MEDICAL->value) - && auth()->user()->getRoleNames()->count() === 1 - ) { + if (auth()->user()->getRoleNames()->count() === 1) { Constraint::requestConstraint($data); } else { Constraint::create([ @@ -327,11 +322,7 @@ protected function getBasicActions() } if ($arguments['save'] ?? false) { if ($this->model == Constraint::class) { - if ( - ($data['constraint_type'] === ConstraintType::VACATION->value || - $data['constraint_type'] === ConstraintType::MEDICAL->value) && - auth()->user()->getRoleNames()->count() === 1 - ) { + if (auth()->user()->getRoleNames()->count() === 1) { $dataToEdit = [ 'oldConstraint' => $record, 'newConstraint' => $data, diff --git a/app/Filters/NumberFilter.php b/app/Filters/NumberFilter.php index a9a5566..4273a92 100644 --- a/app/Filters/NumberFilter.php +++ b/app/Filters/NumberFilter.php @@ -13,6 +13,16 @@ class NumberFilter extends Filter { + protected $isFloat = false; + + public function isFloat(bool $isFloat): static + { + $this->isFloat = $isFloat; + $this->setUp(); + + return $this; + } + protected function setUp(): void { parent::setup(); @@ -89,35 +99,36 @@ protected function setUp(): void ]) ->columns(1), ]) - ->query(fn (Builder $query, array $data) => $query - ->when( - isset($data['range_equal']), - fn ($q) => $q->where($this->getName(), $data['range_equal']) - ) - ->when( - isset($data['range_not_equal']), - fn ($q) => $q->where($this->getName(), '!=', $data['range_not_equal']) - ) - ->when( - isset($data['range_between_from']) && isset($data['range_between_to']), - fn ($q) => $q->whereBetween($this->getName(), [$data['range_between_from'], $data['range_between_to']]) - ) - ->when( - isset($data['range_greater_than']), - fn ($q) => $q->where($this->getName(), '>', $data['range_greater_than']) - ) - ->when( - isset($data['range_greater_than_equal']), - fn ($q) => $q->where($this->getName(), '>=', $data['range_greater_than_equal']) - ) - ->when( - isset($data['range_less_than']), - fn ($q) => $q->where($this->getName(), '<', $data['range_less_than']) - ) - ->when( - isset($data['range_less_than_equal']), - fn ($q) => $q->where($this->getName(), '<=', $data['range_less_than_equal']) - ) + ->query( + fn (Builder $query, array $data) => $query + ->when( + isset($data['range_equal']), + fn ($q) => $q->where($this->getName(), $this->isFloat ? $data['range_equal'] * 100 : $data['range_equal']) + ) + ->when( + isset($data['range_not_equal']), + fn ($q) => $q->where($this->getName(), '!=', $this->isFloat ? $data['range_not_equal'] * 100 : $data['range_not_equal']) + ) + ->when( + isset($data['range_between_from']) && isset($data['range_between_to']), + fn ($q) => $q->whereBetween($this->getName(), [$this->isFloat ? $data['range_between_from'] * 100 : $data['range_between_from'], $this->isFloat ? $data['range_between_to'] * 100 : $data['range_between_to']]) + ) + ->when( + isset($data['range_greater_than']), + fn ($q) => $q->where($this->getName(), '>', $this->isFloat ? $data['range_greater_than'] * 100 : $data['range_greater_than']) + ) + ->when( + isset($data['range_greater_than_equal']), + fn ($q) => $q->where($this->getName(), '>=', $this->isFloat ? $data['range_greater_than_equal'] * 100 : $data['range_greater_than_equal']) + ) + ->when( + isset($data['range_less_than']), + fn ($q) => $q->where($this->getName(), '<', $this->isFloat ? $data['range_less_than'] * 100 : $data['range_less_than']) + ) + ->when( + isset($data['range_less_than_equal']), + fn ($q) => $q->where($this->getName(), '<=', $this->isFloat ? $data['range_less_than_equal'] * 100 : $data['range_less_than_equal']) + ) ) ->indicateUsing(function (array $data): array { $indicators = []; diff --git a/app/Models/Constraint.php b/app/Models/Constraint.php index 67dd6e4..95197dd 100644 --- a/app/Models/Constraint.php +++ b/app/Models/Constraint.php @@ -81,9 +81,8 @@ public static function getSchema(): array Hidden::make('end_date') ->required(), Placeholder::make('') - ->content(__('Please note! This constraint will only be approved for you after approval from the commander.')) - ->visible(fn (Get $get) => ($get('constraint_type') === ConstraintType::VACATION->value || $get('constraint_type') === ConstraintType::MEDICAL->value) - && auth()->user()->getRoleNames()->count() === 1) + ->content(__('The constraint will only be approved after approval by the commander')) + ->visible(fn () => auth()->user()->getRoleNames()->count() === 1) ->hiddenOn('view') ->extraAttributes(['style' => 'color: red; font-family: Arial, Helvetica, sans-serif; font-size: 20px']), Grid::make() diff --git a/app/Resources/SoldierResource.php b/app/Resources/SoldierResource.php index 4161ad4..b276c57 100644 --- a/app/Resources/SoldierResource.php +++ b/app/Resources/SoldierResource.php @@ -157,10 +157,14 @@ function ($record) { NumberFilter::make('course')->label(__('Course')), NumberFilter::make('max_shifts')->label(__('Max shifts')), NumberFilter::make('max_nights')->label(__('Max nights')), - NumberFilter::make('max_weekends')->label(__('Max weekends')), + NumberFilter::make('max_weekends') + ->isFloat(true) + ->label(__('Max weekends')), NumberFilter::make('max_alerts')->label(__('Max alerts')), NumberFilter::make('max_in_parallel')->label(__('Max in parallel')), - NumberFilter::make('capacity')->label(__('Capacity')), + NumberFilter::make('capacity') + ->isFloat(true) + ->label(__('Capacity')), SelectFilter::make('gender') ->label(__('Gender')) ->options([ diff --git a/app/Resources/TaskResource.php b/app/Resources/TaskResource.php index 3718bdb..69b527c 100644 --- a/app/Resources/TaskResource.php +++ b/app/Resources/TaskResource.php @@ -185,6 +185,7 @@ public static function table(Table $table): Table ) ->default(null), NumberFilter::make('parallel_weight') + ->isFloat(true) ->label(__('Parallel weight')), SelectFilter::make('kind') ->label(__('Kind')) @@ -357,6 +358,7 @@ public static function additionalDetails(): array Select::make('kind') ->label(__('Kind')) ->live() + ->required() ->placeholder(fn () => __('Select task kind')) ->options(collect(TaskKind::cases())->mapWithKeys(fn ($type) => [$type->value => $type->getLabel()])), Select::make('concurrent_tasks') diff --git a/app/Services/Algorithm.php b/app/Services/Algorithm.php index c1d9819..359eb62 100644 --- a/app/Services/Algorithm.php +++ b/app/Services/Algorithm.php @@ -19,8 +19,8 @@ public function __construct($date = null) protected function getShiftWithTasks() { - $startOfMonth = $this->date->copy()->startOfMonth(); // $startOfMonth = max($this->date->copy()->startOfMonth(), Carbon::tomorrow()); + $startOfMonth = $this->date->copy()->startOfMonth(); $endOfMonth = $this->date->copy()->endOfMonth(); return Shift::with('task') diff --git a/app/Services/Helpers.php b/app/Services/Helpers.php index 341fc35..f39684d 100644 --- a/app/Services/Helpers.php +++ b/app/Services/Helpers.php @@ -40,6 +40,7 @@ protected static function kind(Shift $shift, $task) return $task->kind; } + public static function buildSoldier($soldier, $constraints, $shifts, array $capacityHold, $concurrentsShifts = []): SoldierService { return new SoldierService( diff --git a/app/Services/RecurringEvents.php b/app/Services/RecurringEvents.php index c64f241..128e809 100644 --- a/app/Services/RecurringEvents.php +++ b/app/Services/RecurringEvents.php @@ -114,8 +114,8 @@ protected function convertNumbersToDatesInMonth($dayNumbers) protected function createPeriod() { return $this->task->recurring['type'] == 'Daily range' ? - CarbonPeriod::between($this->task['recurring']['start_date'], $this->task['recurring']['end_date']) : - CarbonPeriod::between($this->month->copy()->startOfMonth(), $this->month->copy()->endOfMonth()); + CarbonPeriod::between($this->task['recurring']['start_date'], $this->task['recurring']['end_date']) : + CarbonPeriod::between($this->month->copy()->startOfMonth(), $this->month->copy()->endOfMonth()); // CarbonPeriod::between(max($this->task['recurring']['start_date'], Carbon::tomorrow()), $this->task['recurring']['end_date']) : // CarbonPeriod::between(max($this->month->copy()->startOfMonth(), Carbon::tomorrow()), $this->month->copy()->endOfMonth()); } From 0919ffe8e3db1510945fc9f44b8382d81dd36daf Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 23 Jul 2025 11:34:16 +0300 Subject: [PATCH 230/259] last change --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Exports/ShiftsExport.php | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index caff3f8..4b280ea 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_18 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_19 flavor: | latest=false tags: | diff --git a/app/Exports/ShiftsExport.php b/app/Exports/ShiftsExport.php index 4bf5219..d68b912 100644 --- a/app/Exports/ShiftsExport.php +++ b/app/Exports/ShiftsExport.php @@ -11,14 +11,13 @@ class ShiftsExport implements WithMultipleSheets { protected $month; - protected $shifts; + protected $query; public function __construct($month) { $this->month = $month; - $this->shifts = Shift::whereNotNull('soldier_id') - ->whereBetween('start_date', [Carbon::parse($this->month)->startOfMonth(), Carbon::parse($this->month)->endOfMonth()]) - ->get(); + $this->query = Shift::whereNotNull('soldier_id') + ->whereBetween('start_date', [Carbon::parse($this->month)->startOfMonth(), Carbon::parse($this->month)->endOfMonth()]); } public function sheets(): array @@ -31,7 +30,9 @@ public function sheets(): array ->toArray(); return collect($tasksTypes)->map(function ($type) { - $shifts = $this->shifts->filter(fn (Shift $shift) => $shift->task()->withTrashed()->first()->type == $type['type']); + $shifts = $this->query->clone()->whereHas('task', function ($query) use ($type) { + $query->withTrashed()->where('type', $type['type']); + })->get(); return new TaskTypeSheet($this->month, $type['type'], $shifts, $type['color']); })->toArray(); From 2e11a7ab23c47b0a28f6d1ac6f51308183fb62c8 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 23 Jul 2025 12:12:29 +0300 Subject: [PATCH 231/259] last change --- .github/workflows/php-build-and-deploy.yml | 2 +- lang/he.json | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 4b280ea..999dc39 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_19 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_20 flavor: | latest=false tags: | diff --git a/lang/he.json b/lang/he.json index 60aecdd..233af5c 100644 --- a/lang/he.json +++ b/lang/he.json @@ -160,6 +160,7 @@ "Monday":"שני", "Month":"חודש", "Monthly": "חודשי", + "My": "שלי", "My Constraint": "האילוץ שלי", "My Constraints": "האילוצים שלי", "My profile": "הפרופיל שלי", @@ -167,8 +168,6 @@ "My Shifts": "המשמרות שלי", "My Soldiers": "החיילים שלי", "My Soldiers Constraints": "החיילים שלי", - "My Soldiers Shift": "החיילים שלי", - "My Soldiers Shifts": "החיילים שלי", "Name": "שם", "New":"חדש", "New assignment":"הקצאה חדשה", @@ -317,7 +316,7 @@ "Constraint request rejected":"דחיית הוספת אילוץ", "Commander approved create constraint":"שלום :name!
בקשתך להוספת האילוץ :constraintName
מ :startDate עד :endDate אושרה!
המשך יום טוב!", "Commander deny create constraint":"שלום :name!
בקשתך להוספת האילוץ :constraintName
מ :startDate עד :endDate נדחתה!
המשך יום טוב!", - "Please note! This constraint will only be approved for you after approval from the commander.":"שים לב! אילוץ זה מחייב אישור מפקד.", + "The constraint will only be approved after approval by the commander":"האילוץ יאושר רק לאחר אישור מפקד", "You did not choose a commander. With your approval, you leave the department without a commander. Are you sure?":"לא נבחר מפקד. באישורך אתה יוצר צוות ללא מפקד.האם אתה בטוח?", "Shifts Assigments":"שיבוץ משמרות", "In parallel":"תורנות", From fa2848752e958fe7a73fcbeb55f877d189be98e0 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 23 Jul 2025 12:31:07 +0300 Subject: [PATCH 232/259] last change --- .github/workflows/php-build-and-deploy.yml | 2 +- lang/he.json | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 999dc39..9026230 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_20 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_21 flavor: | latest=false tags: | diff --git a/lang/he.json b/lang/he.json index 233af5c..227bc05 100644 --- a/lang/he.json +++ b/lang/he.json @@ -160,7 +160,6 @@ "Monday":"שני", "Month":"חודש", "Monthly": "חודשי", - "My": "שלי", "My Constraint": "האילוץ שלי", "My Constraints": "האילוצים שלי", "My profile": "הפרופיל שלי", @@ -168,6 +167,8 @@ "My Shifts": "המשמרות שלי", "My Soldiers": "החיילים שלי", "My Soldiers Constraints": "החיילים שלי", + "My Soldiers Shift": "החיילים שלי", + "My Soldiers Shifts": "החיילים שלי", "Name": "שם", "New":"חדש", "New assignment":"הקצאה חדשה", @@ -267,6 +268,7 @@ "Update parallel weight of holiday shift":"עדכון משקל של משמרת חג", "Update dragged shift details!": "עדכון פרטי משמרת שנגררה", "Update reserve days": "ימי מילואים", + "Unknown soldier":"חייל לא קיים", "Vacation":"חופשה", "View ":"צפה ב", "View members": "צפה בחברים", From 15301a065c38f3e6922f017ddf76e7a0613ff9cb Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 23 Jul 2025 14:09:11 +0300 Subject: [PATCH 233/259] last change --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 6 ++--- app/Models/Shift.php | 26 +++++++++++-------- .../ChartResource/Widgets/ChartFilter.php | 8 +++--- app/Resources/ConstraintResource.php | 3 ++- .../Pages/ListConstraints.php | 13 +++++++++- app/Resources/MyConstraintResource.php | 2 +- .../Pages/ListMyConstraints.php | 11 ++++++++ app/Resources/MyShiftResource.php | 2 +- .../MyShiftResource/Pages/ListMyShift.php | 11 ++++++++ app/Resources/ShiftResource.php | 13 +++------- .../ShiftResource/Pages/ListShifts.php | 13 +++++++++- lang/he.json | 4 +-- 13 files changed, 79 insertions(+), 35 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 9026230..2b26ed9 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_21 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_22 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 314c479..421ad7d 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -89,7 +89,7 @@ public function fetchEvents(array $fetchInfo): array protected function events(): Collection { - return $this->type === 'my_soldiers' + return $this->type == 'soldiers' ? ($this->filter ? $this->model::filter($this->fetchInfo, $this->filterData) : collect()) : $this->getMyEvents(); } @@ -390,7 +390,7 @@ protected function viewAction(): Action function (ViewAction $action, FullCalendarWidget $livewire) { if ( ($this->model == Shift::class && auth()->user()->getRoleNames()->count() === 1) || - ($this->model == Constraint::class && $this->type == 'my_soldiers' && ! auth()->user()->getRoleNames()->contains('shifts-assignment') && ! auth()->user()->getRoleNames()->contains('manager')) + ($this->model == Constraint::class && $this->type == 'soldiers' && ! auth()->user()->getRoleNames()->contains('shifts-assignment') && ! auth()->user()->getRoleNames()->contains('manager')) ) { return $this->model === Shift::class ? [...$this->getChangeActions()] : @@ -419,7 +419,7 @@ public function onEventDrop(array $event, array $oldEvent, array $relatedEvents, { if ( ($this->model == Shift::class && $this->type == 'my' && auth()->user()->getRoleNames()->count() === 1) || - ($this->model == Constraint::class && $this->type == 'my_soldiers' && ! auth()->user()->getRoleNames()->contains('shifts-assignment') && ! auth()->user()->getRoleNames()->contains('manager')) + ($this->model == Constraint::class && $this->type == 'soldiers' && ! auth()->user()->getRoleNames()->contains('shifts-assignment') && ! auth()->user()->getRoleNames()->contains('manager')) ) { $this->refreshRecords(); } else { diff --git a/app/Models/Shift.php b/app/Models/Shift.php index 5d3d8da..2be8b52 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -151,9 +151,9 @@ protected static function soldierIdPlaceholder($soldierType, $shift) $manual_assignment = new ManualAssignment($shift, $soldierType); return - ! $manual_assignment->getSoldiers() ? - __('No suitable soldiers') : - __('Select a soldier'); + ! $manual_assignment->getSoldiers() ? + __('No suitable soldiers') : + __('Select a soldier'); } public static function afterSave($shift, $record) @@ -288,15 +288,15 @@ function ($shifts, $soldierId) use ($data) { protected static function description($soldierId, $hasConcurrent) { return $hasConcurrent ? - __('Exchange with').' '.Soldier::find($soldierId)->user->displayName.' ('.__('The soldier is assigned a shift during the task').')' : + __('Exchange with').' '.Soldier::find($soldierId)->user->displayName.' ('.__('The soldier is assigned a shift during the task').')' : __('Exchange with').' '.Soldier::find($soldierId)->user->displayName; } protected static function getOption($shift, $hasConcurrent) { return $hasConcurrent ? - '📌 '.__('Task').': '.Shift::find($shift->id)->task()->withTrashed()->first()->name.'. '.__('Time').': '.__('From').' '.$shift->start_date.' '.__('To').' '.$shift->end_date : - __('Task').': '.Shift::find($shift->id)->task()->withTrashed()->first()->name.'. '.__('Time').': '.__('From').' '.$shift->start_date.' '.__('To').' '.$shift->end_date; + '📌 '.__('Task').': '.Shift::find($shift->id)->task()->withTrashed()->first()->name.'. '.__('Time').': '.__('From').' '.$shift->start_date.' '.__('To').' '.$shift->end_date : + __('Task').': '.Shift::find($shift->id)->task()->withTrashed()->first()->name.'. '.__('Time').': '.__('From').' '.$shift->start_date.' '.__('To').' '.$shift->end_date; } protected static function shiftsAssignmentExchange($record, $shift) @@ -567,7 +567,7 @@ function ($record) use (&$soldiers) { session()->put('selected_soldier', false); if ($arguments['change'] ?? false) { collect($arguments['role'])->contains('shifts-assignment') - || collect($arguments['role'])->contains('manager') ? + || collect($arguments['role'])->contains('manager') ? self::shiftsAssignmentChange($record, $data['soldier']) : self::commanderChange($record, $data['soldier']); @@ -744,7 +744,9 @@ protected static function soldierChange($record, $soldierId) protected static function getShiftsAssignments() { - return User::whereHas('roles', fn ($query) => $query->where('name', 'shifts-assignment') + return User::whereHas( + 'roles', + fn ($query) => $query->where('name', 'shifts-assignment') )->get(); } @@ -835,9 +837,11 @@ public static function getFilters($calendar) public static function filter($fetchInfo, $filterData) { - $query = self::getEventsByRole(Shift::with(['task', 'soldier'])); - - return $query + return Shift::with(['task', 'soldier']) + ->where(function ($query) { + $query->where('soldier_id', '!=', auth()->user()->userable_id) + ->orWhereNull('soldier_id'); + }) ->where(function ($query) use ($fetchInfo) { $query->where('start_date', '>=', Carbon::create($fetchInfo['start'])->setTimezone('Asia/Jerusalem')) ->where('end_date', '<=', Carbon::create($fetchInfo['end'])->setTimezone('Asia/Jerusalem')); diff --git a/app/Resources/ChartResource/Widgets/ChartFilter.php b/app/Resources/ChartResource/Widgets/ChartFilter.php index cf048a4..0ac63dd 100644 --- a/app/Resources/ChartResource/Widgets/ChartFilter.php +++ b/app/Resources/ChartResource/Widgets/ChartFilter.php @@ -167,8 +167,8 @@ protected function resetShifts($form) $startDate = // (Carbon::now()->format('m') == Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->format('m')) // ? Carbon::now()->addDay()->format('Y-m-d') - // : - Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->startOfMonth()->format('Y-m-d'); + // : + Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->startOfMonth()->format('Y-m-d'); Shift::whereNotNull('soldier_id') ->whereBetween('start_date', [$startDate, (Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->endOfMonth()->addDay())->format('Y-m-d')]) ->update(['soldier_id' => null]); @@ -179,8 +179,8 @@ protected function deleteShifts($form) $startDate = // (Carbon::now()->format('m') == Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->format('m')) // ? Carbon::now()->addDay()->format('Y-m-d') - // : - Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->startOfMonth()->format('Y-m-d'); + // : + Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->startOfMonth()->format('Y-m-d'); Shift::whereBetween('start_date', [$startDate, (Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->endOfMonth()->addDay())->format('Y-m-d')]) ->delete(); } diff --git a/app/Resources/ConstraintResource.php b/app/Resources/ConstraintResource.php index 66fa3ab..e9e3ccf 100644 --- a/app/Resources/ConstraintResource.php +++ b/app/Resources/ConstraintResource.php @@ -44,7 +44,8 @@ public static function canCreate(): bool public static function table(Table $table): Table { - return $table->paginated(false); + return $table->paginated(false) + ->emptyState(fn () => null); } public static function getPages(): array diff --git a/app/Resources/ConstraintResource/Pages/ListConstraints.php b/app/Resources/ConstraintResource/Pages/ListConstraints.php index 307c977..229cb8d 100644 --- a/app/Resources/ConstraintResource/Pages/ListConstraints.php +++ b/app/Resources/ConstraintResource/Pages/ListConstraints.php @@ -6,6 +6,7 @@ use App\Models\Constraint; use App\Resources\ConstraintResource; use Filament\Resources\Pages\ListRecords; +use Illuminate\Contracts\Support\Htmlable; class ListConstraints extends ListRecords { @@ -23,8 +24,18 @@ protected function getHeaderWidgets(): array 'end_date', 'constraint_color', ]), - 'type' => 'my_soldiers', + 'type' => 'soldiers', ]), ]; } + + public function getTitle(): string|Htmlable + { + return ''; + } + + public function getBreadcrumb(): string + { + return ''; + } } diff --git a/app/Resources/MyConstraintResource.php b/app/Resources/MyConstraintResource.php index cba193e..2980975 100644 --- a/app/Resources/MyConstraintResource.php +++ b/app/Resources/MyConstraintResource.php @@ -11,7 +11,7 @@ class MyConstraintResource extends Resource { protected static ?string $model = Constraint::class; - protected static ?string $label = 'My Constraint'; + protected static ?string $label = 'My'; protected static ?string $slug = 'my-constraint'; diff --git a/app/Resources/MyConstraintResource/Pages/ListMyConstraints.php b/app/Resources/MyConstraintResource/Pages/ListMyConstraints.php index 06e29ce..24552a2 100644 --- a/app/Resources/MyConstraintResource/Pages/ListMyConstraints.php +++ b/app/Resources/MyConstraintResource/Pages/ListMyConstraints.php @@ -6,6 +6,7 @@ use App\Models\Constraint; use App\Resources\MyConstraintResource; use Filament\Resources\Pages\ListRecords; +use Illuminate\Contracts\Support\Htmlable; class ListMyConstraints extends ListRecords { @@ -27,4 +28,14 @@ protected function getHeaderWidgets(): array ]), ]; } + + public function getTitle(): string|Htmlable + { + return ''; + } + + public function getBreadcrumb(): string + { + return ''; + } } diff --git a/app/Resources/MyShiftResource.php b/app/Resources/MyShiftResource.php index 2526d0a..fde0336 100644 --- a/app/Resources/MyShiftResource.php +++ b/app/Resources/MyShiftResource.php @@ -11,7 +11,7 @@ class MyShiftResource extends Resource { protected static ?string $model = Shift::class; - protected static ?string $label = 'My Shifts'; + protected static ?string $label = 'My'; protected static ?string $slug = 'my-shifts'; diff --git a/app/Resources/MyShiftResource/Pages/ListMyShift.php b/app/Resources/MyShiftResource/Pages/ListMyShift.php index 987163b..d836131 100644 --- a/app/Resources/MyShiftResource/Pages/ListMyShift.php +++ b/app/Resources/MyShiftResource/Pages/ListMyShift.php @@ -6,6 +6,7 @@ use App\Models\Shift; use App\Resources\MyShiftResource; use Filament\Resources\Pages\ListRecords; +use Illuminate\Contracts\Support\Htmlable; class ListMyShift extends ListRecords { @@ -27,4 +28,14 @@ protected function getHeaderWidgets(): array ]), ]; } + + public function getTitle(): string|Htmlable + { + return ''; + } + + public function getBreadcrumb(): string + { + return ''; + } } diff --git a/app/Resources/ShiftResource.php b/app/Resources/ShiftResource.php index 4a7b4e7..6598150 100644 --- a/app/Resources/ShiftResource.php +++ b/app/Resources/ShiftResource.php @@ -11,9 +11,9 @@ class ShiftResource extends Resource { protected static ?string $model = Shift::class; - protected static ?string $label = 'My Soldiers Shifts'; + protected static ?string $label = 'All'; - protected static ?string $slug = 'my-soldiers-shifts'; + protected static ?string $slug = 'all-shifts'; protected static ?int $navigationSort = 2; @@ -24,17 +24,12 @@ public static function getNavigationGroup(): string public static function getModelLabel(): string { - return __('My Soldiers Shift'); + return __('All soldiers shift'); } public static function getPluralModelLabel(): string { - return __('My Soldiers Shifts'); - } - - public static function canAccess(): bool - { - return auth()->user()->getRoleNames()->count() > 1; + return __('All soldiers shifts'); } public static function canCreate(): bool diff --git a/app/Resources/ShiftResource/Pages/ListShifts.php b/app/Resources/ShiftResource/Pages/ListShifts.php index dbf2005..e4a6015 100644 --- a/app/Resources/ShiftResource/Pages/ListShifts.php +++ b/app/Resources/ShiftResource/Pages/ListShifts.php @@ -6,6 +6,7 @@ use App\Models\Shift; use App\Resources\ShiftResource; use Filament\Resources\Pages\ListRecords; +use Illuminate\Contracts\Support\Htmlable; class ListShifts extends ListRecords { @@ -23,9 +24,19 @@ protected function getHeaderWidgets(): array 'end_date', 'task_color', ]), - 'type' => 'my_soldiers', + 'type' => 'soldiers', ]), ]; } + + public function getTitle(): string|Htmlable + { + return ''; + } + + public function getBreadcrumb(): string + { + return ''; + } } diff --git a/lang/he.json b/lang/he.json index 227bc05..e7bd3a6 100644 --- a/lang/he.json +++ b/lang/he.json @@ -36,6 +36,8 @@ "Alerts": "כוננים", "All": "כולם", "All soldiers":"כל החיילים", + "All soldiers shift":"כל המשמרות", + "All soldiers shifts":"כל המשמרות", "And": "ו", "August":"אוגוסט", "April":"אפריל", @@ -167,8 +169,6 @@ "My Shifts": "המשמרות שלי", "My Soldiers": "החיילים שלי", "My Soldiers Constraints": "החיילים שלי", - "My Soldiers Shift": "החיילים שלי", - "My Soldiers Shifts": "החיילים שלי", "Name": "שם", "New":"חדש", "New assignment":"הקצאה חדשה", From c91a73fc6e4d091ac971b43d7dae74eae51d7844 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 24 Jul 2025 10:04:55 +0300 Subject: [PATCH 234/259] last change --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Models/Shift.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 2b26ed9..bf6ebce 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_22 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_23 flavor: | latest=false tags: | diff --git a/app/Models/Shift.php b/app/Models/Shift.php index 2be8b52..216a6bf 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -120,7 +120,7 @@ function (?Shift $shift, Get $get) { fn (?Shift $record): bool => $record !== null && Carbon::parse($record->start_date)->isAfter(now()) && ! $record->soldier_id - && \Str::contains($_SERVER['HTTP_REFERER'], 'my-soldiers-shifts') + && \Str::contains($_SERVER['HTTP_REFERER'], 'all-shifts') && current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) ) ->hiddenOn('view'), From 5f4829f9b144b573484bccd197949e9e2a7f771f Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Tue, 29 Jul 2025 11:36:17 +0300 Subject: [PATCH 235/259] last change --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Resources/TeamResource.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index bf6ebce..9f344bb 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_23 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_24 flavor: | latest=false tags: | diff --git a/app/Resources/TeamResource.php b/app/Resources/TeamResource.php index 9f3d100..dbce04d 100644 --- a/app/Resources/TeamResource.php +++ b/app/Resources/TeamResource.php @@ -92,7 +92,7 @@ public static function form(Form $form): Form ->mapWithKeys(fn ($user) => [$user->userable_id => $user->displayName]) ) ->formatStateUsing(fn (?Team $team, string $operation) => $operation === 'edit' ? - collect($team->members)->map(fn (Soldier $soldier) => $soldier->id) : + collect($team->members)->map(fn (Soldier $soldier) => $soldier->id)->toArray() : null) ->live() ->optionsLimit(Soldier::count()) From 1e63f9f4295443270784afd2b399a41fc7fb625c Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Mon, 4 Aug 2025 14:57:47 +0300 Subject: [PATCH 236/259] version efrat --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 74 ++++++++----------- app/Models/Constraint.php | 14 ++-- .../ChartResource/Widgets/ChartFilter.php | 2 +- app/Traits/CommanderSoldier.php | 44 +++++++++++ 5 files changed, 83 insertions(+), 53 deletions(-) create mode 100644 app/Traits/CommanderSoldier.php diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 9f344bb..e3f24fe 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_24 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_25 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 421ad7d..f663c2b 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -133,26 +133,18 @@ protected function headerActions(): array return [$this->downloadAssignmentsAction()]; } } else { - if ($this->model !== Shift::class) { - if (in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray())) { - return [$this->createConstraintAction()]; - } - } + $actions = collect(); + if ($this->filter) { - return array_merge( - self::activeFilters(), - [ - self::resetFilters(), - $this->model::getFilters($this) - ->closeModalByClickingAway(false), - ] - ); + $actions->push(...self::activeFilters()); + $actions->push(self::resetFilters()); + } + $actions->push($this->model::getFilters($this)->closeModalByClickingAway(false)); + if ($this->model == Constraint::class) { + $actions->push($this->createConstraintAction()); } - return [ - $this->model::getFilters($this) - ->closeModalByClickingAway(false), - ]; + return $actions->toArray(); } } @@ -184,8 +176,7 @@ protected function createConstraintAction() $startDate = Carbon::parse($arguments['start'] ?? null); return $startDate->isBefore($today); - }) - ->hidden($this->model === Shift::class && $this->type === 'my' && ! array_intersect(auth()->user()->getRoleNames()->toArray(), ['manager', 'shifts-assignment', 'department-commander', 'team-commander'])); + }); } protected function downloadAssignmentsAction() @@ -256,7 +247,7 @@ protected function getBasicActions() ]) ->visible(function (Model $record, $arguments) { if ($record->start_date < now()) { - if (! empty($arguments['event']) && $arguments['type'] == 'drop') { + if (! empty($arguments) && $arguments['type'] == 'drop') { $this->refreshRecords(); } @@ -275,21 +266,24 @@ protected function getBasicActions() ->modalSubmitAction(false) ->closeModalByClickingAway(false) ->extraModalFooterActions(function (Action $action, array $arguments): array { - $canSave = empty($arguments) ? true : ( - $this->model === Constraint::class ? ( - isset($this->mountedActionsData[0]['constraint_type']) ? ( - $arguments['type'] === 'drop' ? - array_key_exists( - $this->mountedActionsData[0]['constraint_type'], - $this->model::getAvailableOptions($arguments['event']['start'], $arguments['event']['end'], false) - ) : - array_key_exists( + $canSave = (! empty($arguments) && $arguments == ['save' => true]) + ? ( + $this->model === Constraint::class + ? ( + isset($this->mountedActionsData[0]['constraint_type']) + ? array_key_exists( $this->mountedActionsData[0]['constraint_type'], - $this->model::getAvailableOptions($arguments['event']['start'], $arguments['event']['end']) + $this->model::getAvailableOptions( + $arguments['event']['start'] ?? null, + $arguments['event']['end'] ?? null, + ($arguments['type'] ?? null) != 'drop' + ) ) - ) : false - ) : true - ); + : false + ) + : true + ) + : true; if (! empty($arguments) && $this->model === Shift::class) { $oldDate = date('l', strtotime($this->mountedActionsArguments[0]['oldEvent']['start'])); $newDate = date('l', strtotime($this->mountedActionsData[0]['start_date'])); @@ -388,13 +382,8 @@ protected function viewAction(): Action ]) ->modalFooterActions( function (ViewAction $action, FullCalendarWidget $livewire) { - if ( - ($this->model == Shift::class && auth()->user()->getRoleNames()->count() === 1) || - ($this->model == Constraint::class && $this->type == 'soldiers' && ! auth()->user()->getRoleNames()->contains('shifts-assignment') && ! auth()->user()->getRoleNames()->contains('manager')) - ) { - return $this->model === Shift::class ? - [...$this->getChangeActions()] : - [$action->getModalCancelAction()]; + if ($this->model == Shift::class && auth()->user()->getRoleNames()->count() === 1) { + return [...$this->getChangeActions()]; } return [ @@ -417,10 +406,7 @@ function({ event, timeText, isStart, isEnd, isMirror, isPast, isFuture, isToday, public function onEventDrop(array $event, array $oldEvent, array $relatedEvents, array $delta, ?array $oldResource, ?array $newResource): bool { - if ( - ($this->model == Shift::class && $this->type == 'my' && auth()->user()->getRoleNames()->count() === 1) || - ($this->model == Constraint::class && $this->type == 'soldiers' && ! auth()->user()->getRoleNames()->contains('shifts-assignment') && ! auth()->user()->getRoleNames()->contains('manager')) - ) { + if ($this->model == Shift::class && $this->type == 'my' && auth()->user()->getRoleNames()->count() === 1) { $this->refreshRecords(); } else { if ($this->getModel()) { diff --git a/app/Models/Constraint.php b/app/Models/Constraint.php index 95197dd..502c5ee 100644 --- a/app/Models/Constraint.php +++ b/app/Models/Constraint.php @@ -3,6 +3,7 @@ namespace App\Models; use App\Enums\ConstraintType; +use App\Traits\CommanderSoldier; use App\Traits\EventsByRole; use Cache; use Carbon\Carbon; @@ -52,11 +53,10 @@ public static function getSchema(): array Select::make('soldier_id') ->label(__('Soldier')) ->hiddenOn('view') - ->visible(fn () => in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray()) - && \Str::contains($_SERVER['HTTP_REFERER'], 'my-soldiers-constraint')) - ->options(fn () => Cache::remember('users', 30 * 60, fn () => User::all() + ->visible(fn () => auth()->user()->getRoleNames()->count() > 1 + && \Str::contains($_SERVER['HTTP_REFERER'], 'my-soldiers-constraint') ) - ->mapWithKeys(fn ($user) => [$user->userable_id => $user->displayName])) + ->options(fn () => CommanderSoldier::getCommanderSoldier()) ->afterStateUpdated(fn ($state) => session()->put('soldier_id', $state)) ->required(), ToggleButtons::make('constraint_type') @@ -75,10 +75,11 @@ public static function getSchema(): array ->options(fn (Constraint $constraint) => [ $constraint->constraint_type->getLabel(), ]), - Hidden::make('start_date') + ->label(__('Start date')) ->required(), Hidden::make('end_date') + ->label(__('End date')) ->required(), Placeholder::make('') ->content(__('The constraint will only be approved after approval by the commander')) @@ -86,7 +87,6 @@ public static function getSchema(): array ->hiddenOn('view') ->extraAttributes(['style' => 'color: red; font-family: Arial, Helvetica, sans-serif; font-size: 20px']), Grid::make() - ->visible(fn ($get) => in_array($get('constraint_type'), ['Medical', 'Vacation', 'School', 'Not task', 'Low priority not task'])) ->schema([ DateTimePicker::make('start_date') ->label(__('Start date')) @@ -224,7 +224,7 @@ private static function availableOptions($startDate, $endDate, $withLimit = true unset($options[ConstraintType::NOT_THURSDAY_EVENING->value]); unset($options[ConstraintType::NOT_EVENING->value]); } - if ($withLimit && ! (in_array('shifts-assignment', auth()->user()->getRoleNames()->toArray()))) { + if ($withLimit && auth()->user()->getRoleNames()->count() == 1) { $usedCounts = self::getUsedCountsForCurrentMonth($startDate, $endDate); $limits = Soldier::where('id', auth()->user()->userable_id)->pluck('constraints_limit')->first() ?: ConstraintType::getLimit(); $constraintsWithinLimit = []; diff --git a/app/Resources/ChartResource/Widgets/ChartFilter.php b/app/Resources/ChartResource/Widgets/ChartFilter.php index 0ac63dd..d49a249 100644 --- a/app/Resources/ChartResource/Widgets/ChartFilter.php +++ b/app/Resources/ChartResource/Widgets/ChartFilter.php @@ -179,7 +179,7 @@ protected function deleteShifts($form) $startDate = // (Carbon::now()->format('m') == Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->format('m')) // ? Carbon::now()->addDay()->format('Y-m-d') - // : + // : Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->startOfMonth()->format('Y-m-d'); Shift::whereBetween('start_date', [$startDate, (Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->endOfMonth()->addDay())->format('Y-m-d')]) ->delete(); diff --git a/app/Traits/CommanderSoldier.php b/app/Traits/CommanderSoldier.php new file mode 100644 index 0000000..d002e0c --- /dev/null +++ b/app/Traits/CommanderSoldier.php @@ -0,0 +1,44 @@ +user()->userable_id; + $role = current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])); + $query = User::query(); + $query = match ($role) { + 'manager', 'shifts-assignment' => $query->where(function ($query) use ($currentUserId) { + $query->where('userable_id', '!=', $currentUserId); + }), + 'department-commander' => $query->where(function ($query) use ($currentUserId) { + $query->where('userable_id', '!=', $currentUserId) + ->where(function ($query) use ($currentUserId) { + $query + ->whereIn('userable_id', Department::whereHas('commander', function ($query) use ($currentUserId) { + $query->where('id', $currentUserId); + })->first()?->teams->flatMap(fn (Team $team) => $team->members->pluck('id'))->toArray() ?? collect([])) + ->orWhereIn('userable_id', Department::whereHas('commander', function ($query) use ($currentUserId) { + $query->where('id', $currentUserId); + })->first()?->teams->pluck('commander_id') ?? collect([])); + }); + }), + 'team-commander' => $query->where(function ($query) use ($currentUserId) { + $query->where('userable_id', '!=', $currentUserId) + ->where(function ($query) use ($currentUserId) { + $query->whereIn('userable_id', Team::whereHas('commander', function ($query) use ($currentUserId) { + $query->where('id', $currentUserId); + })->first()?->members->pluck('id') ?? collect([])); + }); + }), + }; + + return $query->get()->mapWithKeys(fn ($user) => [$user->userable_id => $user->displayName]); + } +} From f8f67d7552aa9da6a5e9bc64d20425b7ccbbada6 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 6 Aug 2025 11:54:23 +0300 Subject: [PATCH 237/259] version efrat --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 24 +++++++++++----------- app/Models/Shift.php | 2 +- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index e3f24fe..0972079 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_25 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_26 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index f663c2b..f3e4cec 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -246,18 +246,18 @@ protected function getBasicActions() 'end_date' => $arguments['event']['end'] ?? $record->end_date, ]) ->visible(function (Model $record, $arguments) { - if ($record->start_date < now()) { - if (! empty($arguments) && $arguments['type'] == 'drop') { - $this->refreshRecords(); - } - - return false; - } - if (! empty($arguments['event']) && $arguments['event']['start'] < now()) { - $this->refreshRecords(); - - return false; - } + // if ($record->start_date < now()) { + // if (! empty($arguments) && $arguments['type'] == 'drop') { + // $this->refreshRecords(); + // } + + // return false; + // } + // if (! empty($arguments['event']) && $arguments['event']['start'] < now()) { + // $this->refreshRecords(); + + // return false; + // } return true; }) diff --git a/app/Models/Shift.php b/app/Models/Shift.php index 216a6bf..9ffa07d 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -118,7 +118,7 @@ function (?Shift $shift, Get $get) { ]) ->visible( fn (?Shift $record): bool => $record !== null - && Carbon::parse($record->start_date)->isAfter(now()) + // && Carbon::parse($record->start_date)->isAfter(now()) && ! $record->soldier_id && \Str::contains($_SERVER['HTTP_REFERER'], 'all-shifts') && current(array_diff(collect(auth()->user()->getRoleNames())->toArray(), ['soldier'])) From fb1efa86d4c7cad47f2c24778ebe9b4e268b6232 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 6 Aug 2025 12:06:19 +0300 Subject: [PATCH 238/259] version efrat --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Models/Shift.php | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 0972079..33f7a41 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_26 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_27 flavor: | latest=false tags: | diff --git a/app/Models/Shift.php b/app/Models/Shift.php index 9ffa07d..eaf0910 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -104,6 +104,7 @@ function (?Shift $shift, Get $get) { return $manual_assignment->getSoldiers(); } ) + ->searchable() ->default(null) ->placeholder(fn (?Shift $shift, Get $get) => self::soldierIdPlaceholder($get('soldier_type'), $shift)) ->visible( From 118867eab17332b9472621d428f36450c93701bb Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 6 Aug 2025 12:17:11 +0300 Subject: [PATCH 239/259] version efrat --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 2 +- app/Models/Shift.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 33f7a41..f597b2f 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_27 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_28 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index f3e4cec..b3e1fcb 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -284,7 +284,7 @@ protected function getBasicActions() : true ) : true; - if (! empty($arguments) && $this->model === Shift::class) { + if (! empty($arguments) && $this->model === Shift::class && isset($this->mountedActionsArguments[0]['oldEvent'])) { $oldDate = date('l', strtotime($this->mountedActionsArguments[0]['oldEvent']['start'])); $newDate = date('l', strtotime($this->mountedActionsData[0]['start_date'])); $startOfWeek = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday']; diff --git a/app/Models/Shift.php b/app/Models/Shift.php index eaf0910..07d04ee 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -134,7 +134,7 @@ function (?Shift $shift, Get $get) { ->label(__('Parallel weight')), DateTimePicker::make('start_date') ->label(__('Start date')) - ->minDate(today()) + // ->minDate(today()) ->required(), DateTimePicker::make('end_date') ->label(__('End date')) From 04ad6db5ba51c31c6d2b3ae20d696d9bb0a64392 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 7 Aug 2025 12:31:09 +0300 Subject: [PATCH 240/259] version efrat --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Services/Course.php | 5 ++++- app/Services/Helpers.php | 13 ++++++------- app/Services/ManualAssignment.php | 8 ++++---- app/Services/NotPointedSchedule.php | 8 +++++--- app/Services/PointedSchedule.php | 12 ++++++++---- 6 files changed, 28 insertions(+), 20 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index f597b2f..950976f 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_28 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_29 flavor: | latest=false tags: | diff --git a/app/Services/Course.php b/app/Services/Course.php index 0fdcaf9..eeeaf95 100644 --- a/app/Services/Course.php +++ b/app/Services/Course.php @@ -11,6 +11,8 @@ class Course public $soldiers; public $hasGap; + + public $used; public function __construct($number, $max, $soldiers) { @@ -18,10 +20,11 @@ public function __construct($number, $max, $soldiers) $this->max = $max; $this->soldiers = collect($soldiers); $this->hasGap = false; + $this->used = 0; } public function remaining($max) { return collect($this->soldiers)->sum(fn (Soldier $soldier) => $soldier->{$max}->remaining()); } -} +} \ No newline at end of file diff --git a/app/Services/Helpers.php b/app/Services/Helpers.php index f39684d..5d5c2d2 100644 --- a/app/Services/Helpers.php +++ b/app/Services/Helpers.php @@ -47,7 +47,7 @@ public static function buildSoldier($soldier, $constraints, $shifts, array $capa $soldier->id, $soldier->course, new MaxData($soldier->capacity, $capacityHold['points'] ?? 0), - new MaxData($soldier->max_shifts, $capacityHold['count'] ?? 0), + new MaxData($soldier->max_shifts, $capacityHold['regular'] ?? 0), new MaxData($soldier->max_nights, $capacityHold['sumNights'] ?? 0), new MaxData($soldier->max_weekends, $capacityHold['sumWeekends'] ?? 0), new MaxData($soldier->max_alerts, $capacityHold['sumAlerts'] ?? 0), @@ -81,25 +81,24 @@ public static function capacityHold($shifts): array $points = 0; $nights = 0; $weekends = 0; - $count = 0; + $regular = 0; $alerts = 0; $inParallel = 0; collect($shifts) ->filter(fn (ShiftService $shift) => $shift->id != 0) - ->each(function (ShiftService $shift) use (&$count, &$points, &$nights, &$weekends, &$alerts, &$inParallel) { - $count++; + ->each(function (ShiftService $shift) use (&$regular, &$points, &$nights, &$weekends, &$alerts, &$inParallel) { $points += $shift->points; match ($shift->kind) { TaskKind::WEEKEND->value => $weekends += $shift->points, - TaskKind::NIGHT->value => $nights++, + TaskKind::NIGHT->value => [$nights++, $regular++], TaskKind::ALERT->value => $alerts++, TaskKind::INPARALLEL->value => $inParallel++, - TaskKind::REGULAR->value => null + TaskKind::REGULAR->value => $regular++, }; }); return [ - 'count' => $count, + 'regular' => $regular, 'points' => $points, 'sumWeekends' => $weekends, 'sumNights' => $nights, diff --git a/app/Services/ManualAssignment.php b/app/Services/ManualAssignment.php index 8b9b2bc..cccc492 100644 --- a/app/Services/ManualAssignment.php +++ b/app/Services/ManualAssignment.php @@ -112,10 +112,10 @@ function (Soldier $soldier) { $soldiersShifts->push(...Helpers::addShiftsSpaces($soldiersShifts)); - $capacityHold = Helpers::capacityHold($soldiersShifts); - $concurrentsShifts = $this->getSoldiersShifts($soldier->id, true); + $capacityHold = Helpers::capacityHold($soldiersShifts); + return Helpers::buildSoldier($soldier, $constraints, $soldiersShifts, $capacityHold, $concurrentsShifts); } ); @@ -129,9 +129,9 @@ public function amIAvailable(): bool $myShifts->push(...Helpers::addShiftsSpaces($myShifts)); - $capacityHold = Helpers::capacityHold($myShifts); - $concurrentsShifts = $this->getSoldiersShifts($me->id, true); + + $capacityHold = Helpers::capacityHold($myShifts); $soldier = Helpers::buildSoldier($me, $constraints, $myShifts, $capacityHold, $concurrentsShifts); diff --git a/app/Services/NotPointedSchedule.php b/app/Services/NotPointedSchedule.php index 446f089..b005048 100644 --- a/app/Services/NotPointedSchedule.php +++ b/app/Services/NotPointedSchedule.php @@ -197,8 +197,9 @@ protected function assignShiftsForCourse(Course $course) while ($course->remaining($this->maxName) > 0 && $courseGap < $this->allowedGap && $this->isUnassignedShiftsExist()) { $rotationResult = $this->rotation($course); if ($rotationResult == RotationResult::SUCCESS_WITH_GAP) { - $courseGap += 1; + $courseGap += 1; } + $course->used += 1; } } @@ -210,7 +211,8 @@ protected function isUnassignedShiftsExist(): bool protected function rotation(Course $course) { $isGapExists = false; - collect($course->soldiers)->each(function (Soldier $soldier) use (&$isGapExists) { + $soldiers = $course->soldiers->filter(fn(Soldier $soldier)=>$soldier->{$this->maxName}->used <= $course->used); + collect($soldiers)->each(function (Soldier $soldier) use (&$isGapExists) { $success = $this->assignRotationShiftToSoldier($soldier); if (! $success) { $isGapExists = true; @@ -243,4 +245,4 @@ protected function tryAssign(Soldier $soldier, bool $ignoreLowConsraint) return false; } -} +} \ No newline at end of file diff --git a/app/Services/PointedSchedule.php b/app/Services/PointedSchedule.php index 34b3d42..52ede1e 100644 --- a/app/Services/PointedSchedule.php +++ b/app/Services/PointedSchedule.php @@ -368,12 +368,16 @@ protected function assignShiftsForCourse(Course $course, $isSingleRotation) } } - protected function rotation($course, $rotationSize) + protected function rotation(Course $course, $rotationSize) { $hasGap = false; - foreach ($course->soldiers as $soldier) { + $maxAssigned = 0; + $soldiers = $course->soldiers->filter(fn(Soldier $soldier)=>$soldier->pointsMaxData->used <= $course->used); + foreach ($soldiers as $soldier) { $assignedPoints = $this->assignRotationShiftsToSoldier($soldier, $rotationSize); - + if($assignedPoints > $maxAssigned){ + $maxAssigned = $assignedPoints; + } $gap = $rotationSize - $assignedPoints; if ($gap > $this->allowedGap) { return false; @@ -385,7 +389,7 @@ protected function rotation($course, $rotationSize) if ($hasGap) { $course->hasGap = true; } - + $course->used += $maxAssigned; return true; } From c348e9c86276ae21cfd8d60dc55da46f63ecaf1a Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 14 Aug 2025 10:22:05 +0300 Subject: [PATCH 241/259] version efrat --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Resources/SoldierResource/Pages/ListSoldiers.php | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 950976f..96b744e 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_29 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_30 flavor: | latest=false tags: | diff --git a/app/Resources/SoldierResource/Pages/ListSoldiers.php b/app/Resources/SoldierResource/Pages/ListSoldiers.php index 4246b1f..84b18f0 100644 --- a/app/Resources/SoldierResource/Pages/ListSoldiers.php +++ b/app/Resources/SoldierResource/Pages/ListSoldiers.php @@ -102,8 +102,13 @@ protected function getHeaderActions(): array $soldiers->map(function ($soldier) use ($updateData) { collect($updateData)->map(function ($value, $key) use ($soldier) { if ($key == 'qualifications') { - $qualifications = collect($soldier->qualifications); - $qualifications->push(...$value); + $qualifications = collect($soldier->qualifications) ?? collect([]); + $newQualifications = $value ? collect($value) : collect([]); + collect($newQualifications)->each(function ($qualification) use (&$qualifications) { + if (! $qualifications->contains($qualification)) { + $qualifications->push($qualification); + } + }); $soldier->qualifications = $qualifications; } else { $soldier->{$key} = $value; From d728086a16dc2da3d50bf02da60e914b96815436 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 14 Aug 2025 16:17:58 +0300 Subject: [PATCH 242/259] push and deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Models/Soldier.php | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 96b744e..df09e30 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_30 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_31 flavor: | latest=false tags: | diff --git a/app/Models/Soldier.php b/app/Models/Soldier.php index 93e7c1c..b01df06 100644 --- a/app/Models/Soldier.php +++ b/app/Models/Soldier.php @@ -107,6 +107,8 @@ public static function boot() Shift::where('soldier_id', $record->id)->update(['soldier_id' => null]); Constraint::where('soldier_id', $record->id) ->delete(); + Team::where('commander_id', $record->id)->update(['commander_id' => null]); + Department::where('commander_id', $record->id)->update(['commander_id' => null]); }); } } From 2b29f6e970943ed2c0052f41a91a885812bb24bb Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 4 Sep 2025 13:31:39 +0300 Subject: [PATCH 243/259] push and deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index df09e30..ffe52e0 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_31 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_32 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index b3e1fcb..e54f767 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -167,8 +167,7 @@ protected function createConstraintAction() ->mountUsing( fn (Form $form, array $arguments) => $form->fill([ 'start_date' => $arguments['start'] ?? null, - 'end_date' => $arguments['end'] ?? null, - ]) + 'end_date' => $arguments['end'] ?? ($arguments['start'] ? Carbon::parse($arguments['start'])->addHour(): null), ]) ) ->label($this->model::getTitle().' '.__('New')) ->modalHeading(__('Create').' '.$this->model::getTitle()) From 2fc742c492a0f1358d4a998dd0d9525dd5a44aa3 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 4 Sep 2025 13:33:40 +0300 Subject: [PATCH 244/259] push and deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Models/Constraint.php | 14 ++++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index ffe52e0..8845882 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_32 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_33 flavor: | latest=false tags: | diff --git a/app/Models/Constraint.php b/app/Models/Constraint.php index 502c5ee..f935212 100644 --- a/app/Models/Constraint.php +++ b/app/Models/Constraint.php @@ -75,12 +75,12 @@ public static function getSchema(): array ->options(fn (Constraint $constraint) => [ $constraint->constraint_type->getLabel(), ]), - Hidden::make('start_date') - ->label(__('Start date')) - ->required(), - Hidden::make('end_date') - ->label(__('End date')) - ->required(), + // Hidden::make('start_date') + // ->label(__('Start date')) + // ->required(), + // Hidden::make('end_date') + // ->label(__('End date')) + // ->required(), Placeholder::make('') ->content(__('The constraint will only be approved after approval by the commander')) ->visible(fn () => auth()->user()->getRoleNames()->count() === 1) @@ -91,10 +91,12 @@ public static function getSchema(): array DateTimePicker::make('start_date') ->label(__('Start date')) ->minDate(today()) + ->native(true) ->required(), DateTimePicker::make('end_date') ->label(__('End date')) ->after('start_date') + ->native(true) ->required(), ]), ]; From 8d340b78bb06ca2abeb5d9533283dcd3448dde38 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 10 Sep 2025 10:14:33 +0300 Subject: [PATCH 245/259] push and deploy --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Services/Range.php | 45 ++++++++++++++-------- app/Services/Shift.php | 4 ++ 3 files changed, 35 insertions(+), 16 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 8845882..84253dd 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_33 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_34 flavor: | latest=false tags: | diff --git a/app/Services/Range.php b/app/Services/Range.php index 18ffcce..bbe679b 100644 --- a/app/Services/Range.php +++ b/app/Services/Range.php @@ -59,27 +59,42 @@ public function getNightSpaces() { $startHour = $this->start->hour; $endTomorrow = $this->end->copy()->addDay(); - if ($startHour >= '20' && $startHour <= '23') { - return [ - new Range(Carbon::create($this->start->year, $this->start->month, $this->start->day, 00, 00), $this->start), - new Range($this->end, Carbon::create($endTomorrow->year, $endTomorrow->month, $endTomorrow->day, 7, 59)), - ]; - } - if ($startHour >= '0' && $startHour <= '1') { - $startYesterday = $this->start->copy()->subDay(); - - return [ - new Range(Carbon::create($startYesterday->year, $startYesterday->month, $startYesterday->day, 00, 00), $this->start), - new Range($this->end, Carbon::create($endTomorrow->year, $endTomorrow->month, $endTomorrow->day, 7, 59)), - ]; - } + $startSpaceDay = ($startHour >= '0' && $startHour <= '3') ? + $this->start->copy()->subDay(): + $this->start->copy(); + return [ + new Range($startSpaceDay->setHour(00), $this->start), + new Range($this->end,$endTomorrow->setHour(7)->setminutes(59)), + ]; } public function getNightInWeekendSpaces() { + $startSpace = $this->start->englishDayOfWeek == DaysInWeek::THURSDAY->value ? + $this->start->copy()->setHour(00) : + $this->start->copy()->setHour(8)->setMinutes(30); + return [ - new Range($this->start->copy()->setHour(8)->setMinutes(30), $this->start->copy()), + new Range($startSpace, $this->start->copy()), new Range($this->end->copy(), $this->end->copy()->setHour(19)->setMinutes(59)), ]; } + + public function getAlertSpaces() + { + $startHour = $this->start->hour; + $endTomorrow = $this->end->copy()->addDay(); + $spaceStartDay = ($startHour >= '0' && $startHour <= '3') ? + $this->start->copy()->subDay(): + $this->start->copy(); + return [ + new Range($spaceStartDay->copy()->setHour(00), $this->start), + new Range($endTomorrow->copy()->setHour(00), $endTomorrow->copy()->setHour(7)->setMinutes(59)), + ]; + } + + public function getThursdaySpace() + { + return new Range($this->end, $this->end->copy()->next(Carbon::SUNDAY)->setHour(7)->setMinutes(59)); + } } diff --git a/app/Services/Shift.php b/app/Services/Shift.php index 17f0c69..fcfe93d 100644 --- a/app/Services/Shift.php +++ b/app/Services/Shift.php @@ -48,6 +48,7 @@ public function getShiftSpaces($shifts) return match ($this->kind) { TaskKind::WEEKEND->value => $this->getWeekendSpaces($shifts), TaskKind::NIGHT->value => $this->range->getNightSpaces(), + TaskKind::ALERT->value => $this->range->getAlertSpaces(), default => [] }; } @@ -58,6 +59,9 @@ protected function getWeekendSpaces($shifts) if ($this->isNight()) { $spaces->push(...$this->range->getNightInWeekendSpaces()); } + if($this->range->start->englishDayOfWeek == DaysInWeek::THURSDAY->value){ + $spaces->push($this->range->getThursdaySpace()); + } if ($this->isFullWeekend($shifts)) { $spaces->push($this->range->getDayAfterWeekend()); } From fb7f6a955ee68790ff19eb70df056938d3ecde79 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Tue, 16 Sep 2025 13:08:22 +0300 Subject: [PATCH 246/259] pushhhhhh --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Services/Charts.php | 22 +++++++++++++++++++--- app/Services/Schedule.php | 4 ++-- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 84253dd..6f6ef3a 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_34 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_35 flavor: | latest=false tags: | diff --git a/app/Services/Charts.php b/app/Services/Charts.php index d3f965d..c3ebae3 100644 --- a/app/Services/Charts.php +++ b/app/Services/Charts.php @@ -78,8 +78,24 @@ protected function getShifts() ->whereNull('is_weekend') ->orWhere('is_weekend', false); }) - ->whereHas('task', function ($subQuery) { - $subQuery->withTrashed()->where('kind', $this->kind); + ->where(function ($query) { + $query + ->when($this->kind == TaskKind::REGULAR->value, function ($query) { + $query + ->whereHas('task', function ($subQuery) { + $subQuery->withTrashed()->where(function ($query) { + $query + ->where('kind', $this->kind) + ->orWhere('kind', TaskKind::NIGHT->value); + }); + }); + }) + ->when($this->kind != TaskKind::REGULAR->value, function ($query) { + $query + ->whereHas('task', function ($subQuery) { + $subQuery->withTrashed()->where('kind', $this->kind); + }); + }); }); }); }) @@ -105,7 +121,7 @@ protected function howMuch($shifts) 'points' => $this->howMuchPoints($shifts), TaskKind::WEEKEND->value => $this->howMuchWeekends($shifts), TaskKind::NIGHT->value => $this->howMuchBy(TaskKind::NIGHT->value, $shifts), - TaskKind::REGULAR->value => $this->howMuchBy(TaskKind::REGULAR->value, $shifts), + TaskKind::REGULAR->value => $this->howMuchBy(TaskKind::REGULAR->value, $shifts) + $this->howMuchBy(TaskKind::NIGHT->value, $shifts), TaskKind::ALERT->value => $this->howMuchBy(TaskKind::ALERT->value, $shifts), TaskKind::INPARALLEL->value => $this->howMuchBy(TaskKind::INPARALLEL->value, $shifts), }; diff --git a/app/Services/Schedule.php b/app/Services/Schedule.php index 0e7e33a..d46661b 100644 --- a/app/Services/Schedule.php +++ b/app/Services/Schedule.php @@ -40,7 +40,7 @@ protected function assignNotPointedShifts() $taskKinds = collect([ TaskKind::NIGHT->value => 1, TaskKind::REGULAR->value => 3, - TaskKind::ALERT->value => 1, + TaskKind::ALERT->value => 2, ]); $taskKinds->each(function ($gap, $taskKind) { $shifts = $this->shifts->filter(fn (Shift $shift): bool => $shift->kind == $taskKind && @@ -55,4 +55,4 @@ protected function saveAssignments() { Helpers::updateShiftTable($this->assignments); } -} +} \ No newline at end of file From c365343036b4e8d944ad403355de5348873bdb77 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 17 Sep 2025 11:47:24 +0300 Subject: [PATCH 247/259] pushhhhhh --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Services/Soldier.php | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 6f6ef3a..668db31 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_35 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_36 flavor: | latest=false tags: | diff --git a/app/Services/Soldier.php b/app/Services/Soldier.php index f9c68df..1a0051a 100644 --- a/app/Services/Soldier.php +++ b/app/Services/Soldier.php @@ -102,10 +102,15 @@ public function isAvailableBySpaces($spaces): bool { if ($spaces) { foreach ($spaces as $space) { - return ! $this->shifts->contains(fn (Shift $shift) => $shift->id != 0 && + if ( + $this->shifts->contains( + fn(Shift $shift) => $shift->id != 0 && $shift->range->isConflict($space) - ) - && ! $this->concurrentsShifts->contains(fn (Shift $concurrentsShift) => $concurrentsShift->range->isConflict($space)); + ) + || $this->concurrentsShifts->contains(fn(Shift $concurrentsShift) => $concurrentsShift->range->isConflict($space)) + ) { + return false; + } } } From bd648fd5fcaa9ab6521fda51b864b2550c9449c7 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 17 Sep 2025 14:11:50 +0300 Subject: [PATCH 248/259] pushhhhhh --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Services/Algorithm.php | 2 +- app/Services/ChangeAssignment.php | 4 +++- app/Services/ConcurrentTasks.php | 2 +- app/Services/Helpers.php | 28 ++++++++++++++++++---- app/Services/ManualAssignment.php | 4 ++-- app/Services/Range.php | 12 +++++++--- 7 files changed, 41 insertions(+), 13 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 668db31..be4bfae 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_36 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_37 flavor: | latest=false tags: | diff --git a/app/Services/Algorithm.php b/app/Services/Algorithm.php index 359eb62..496d761 100644 --- a/app/Services/Algorithm.php +++ b/app/Services/Algorithm.php @@ -47,7 +47,7 @@ protected function getSoldiersDetails() $shifts = $this->getSoldiersShifts($soldier->id, false); - $shifts->push(...Helpers::addShiftsSpaces($shifts)); + $shifts->push(...Helpers::addPrevMonthSpaces($soldier->id, $this->date)); $capacityHold = Helpers::capacityHold($shifts); diff --git a/app/Services/ChangeAssignment.php b/app/Services/ChangeAssignment.php index 7631fb4..575eed7 100644 --- a/app/Services/ChangeAssignment.php +++ b/app/Services/ChangeAssignment.php @@ -25,8 +25,9 @@ protected function buildSoldier(): SoldierService $constraints = $this->getConstraints($soldier); $shifts = $this->getSoldiersShifts($soldier->id, false); $shifts->push(...Helpers::addShiftsSpaces($shifts)); + $shifts->push(...Helpers::addPrevMonthSpaces($soldier->id, $this->shift->range->start)); $concurrentsShifts = $this->getSoldiersShifts($soldier->id, true); - + $soldierShifts->push(...Helpers::addPrevMonthSpaces($soldier->id, $this->shift->range->start)); return Helpers::buildSoldier($soldier, $constraints, $shifts, [], $concurrentsShifts); } @@ -90,6 +91,7 @@ public function getMatchingShifts() $soldierShifts = $this->getSoldiersShifts($soldierDetails->id, false); $soldierShifts->push(...Helpers::addShiftsSpaces($soldierShifts)); $concurrentsShifts = $this->getSoldiersShifts($soldierDetails->id, true); + $soldierShifts->push(...Helpers::addPrevMonthSpaces($soldierDetails->id, $this->shift->range->start)); $soldier = Helpers::buildSoldier($soldierDetails, $constraints, $soldierShifts, [], $concurrentsShifts); if (! $soldier->isAvailableByConcurrentsShifts($this->shift)) { $data['soldiersWithConcurrents']->push($soldier_id); diff --git a/app/Services/ConcurrentTasks.php b/app/Services/ConcurrentTasks.php index 0268c86..b9c4a5d 100644 --- a/app/Services/ConcurrentTasks.php +++ b/app/Services/ConcurrentTasks.php @@ -66,7 +66,7 @@ protected function getSoldiersDetails() $constraints = Helpers::buildConstraints($soldier->constraints, new Range($this->date->copy()->startOfMonth(), $this->date->copy()->endOfMonth())); $shifts = $this->getSoldiersShifts($soldier->id, false); $concurrentsShifts = $this->getSoldiersShifts($soldier->id, true); - $shifts->push(...Helpers::addShiftsSpaces($shifts)); + $shifts->push(...Helpers::addPrevMonthSpaces($soldier->id, $this->date)); $capacityHold = Helpers::capacityHold($shifts); return Helpers::buildSoldier($soldier, $constraints, $shifts, $capacityHold, $concurrentsShifts); diff --git a/app/Services/Helpers.php b/app/Services/Helpers.php index 5d5c2d2..d1c805c 100644 --- a/app/Services/Helpers.php +++ b/app/Services/Helpers.php @@ -111,15 +111,13 @@ public static function addShiftsSpaces($shifts) { $allSpaces = collect([]); collect($shifts)->map(function (ShiftService $shift) use ($shifts, &$allSpaces) { - $spaces = ($shift->kind === TaskKind::WEEKEND->value || $shift->kind === TaskKind::NIGHT->value) ? $shift->getShiftSpaces($shifts) : null; + $spaces = $shift->getShiftSpaces($shifts); if (! empty($spaces)) { - collect($spaces)->map(fn (Range $space) => $allSpaces->push(new ShiftService(0, 0, '', $space->start, $space->end, 0, TaskKind::REGULAR->value, []))); - } + collect($spaces)->map(fn(Range $space) => $allSpaces->push(new ShiftService(0, 0, '', $space->start, $space->end, 0, TaskKind::REGULAR->value, []))); } }); return $allSpaces; } - public static function getSoldiersShifts($soldierId, $range, $inParallel) { return Shift::with('task') @@ -145,6 +143,28 @@ public static function getConstraintBy(int $soldierId, $newRange) return self::buildConstraints($constraints, $newRange); } + public static function addPrevMonthSpaces(int $soldierId, $date) + { + $lastDay = $date->copy()->startOfMonth()->subDay(); + $lastMonthShifts = self::getLastDayOfLastMonthShifts($soldierId, $lastDay); + return self::addShiftsSpaces($lastMonthShifts); + } + + protected static function getLastDayOfLastMonthShifts($soldierId, $lastDay) + { + return Shift::where('soldier_id', $soldierId) + ->whereHas('task', function ($query) { + $query->withTrashed()->where('kind', '!=', TaskKind::INPARALLEL->value); + }) + ->where(function ($query) use ($lastDay) { + $query->whereDate('start_date', $lastDay) + ->orWhereDate('end_date', $lastDay); + }) + ->get() + ->map(fn(Shift $shift): ShiftService => self::buildShift($shift)); + } + + public static function updateShiftTable($assignments) { if (empty($assignments)) { diff --git a/app/Services/ManualAssignment.php b/app/Services/ManualAssignment.php index cccc492..9585a81 100644 --- a/app/Services/ManualAssignment.php +++ b/app/Services/ManualAssignment.php @@ -113,7 +113,7 @@ function (Soldier $soldier) { $soldiersShifts->push(...Helpers::addShiftsSpaces($soldiersShifts)); $concurrentsShifts = $this->getSoldiersShifts($soldier->id, true); - + $soldiersShifts->push(...Helpers::addPrevMonthSpaces($soldier->id, $this->shift->range->start)); $capacityHold = Helpers::capacityHold($soldiersShifts); return Helpers::buildSoldier($soldier, $constraints, $soldiersShifts, $capacityHold, $concurrentsShifts); @@ -130,7 +130,7 @@ public function amIAvailable(): bool $myShifts->push(...Helpers::addShiftsSpaces($myShifts)); $concurrentsShifts = $this->getSoldiersShifts($me->id, true); - + $myShifts->push(...Helpers::addPrevMonthSpaces($me->id,$this->shift->range->start)); $capacityHold = Helpers::capacityHold($myShifts); $soldier = Helpers::buildSoldier($me, $constraints, $myShifts, $capacityHold, $concurrentsShifts); diff --git a/app/Services/Range.php b/app/Services/Range.php index bbe679b..1b9ea0f 100644 --- a/app/Services/Range.php +++ b/app/Services/Range.php @@ -71,7 +71,7 @@ public function getNightSpaces() public function getNightInWeekendSpaces() { $startSpace = $this->start->englishDayOfWeek == DaysInWeek::THURSDAY->value ? - $this->start->copy()->setHour(00) : + $this->start->copy()->setHour(00)->setMinutes(00) : $this->start->copy()->setHour(8)->setMinutes(30); return [ @@ -88,11 +88,17 @@ public function getAlertSpaces() $this->start->copy()->subDay(): $this->start->copy(); return [ - new Range($spaceStartDay->copy()->setHour(00), $this->start), - new Range($endTomorrow->copy()->setHour(00), $endTomorrow->copy()->setHour(7)->setMinutes(59)), + new Range($spaceStartDay->copy()->setHour(00)->setMinutes(00), $this->start), + new Range($endTomorrow->copy()->setHour(00)->setMinutes(00), $endTomorrow->copy()->setHour(7)->setMinutes(59)), ]; } + public function getThursdaySpace() + { + return new Range($this->end, $this->end->copy()->next(Carbon::SUNDAY)->setHour(7)->setMinutes(59)); + } + + public function getThursdaySpace() { return new Range($this->end, $this->end->copy()->next(Carbon::SUNDAY)->setHour(7)->setMinutes(59)); From 11e23898d986d564f5779479e9cb0ad21f37a639 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 17 Sep 2025 15:03:49 +0300 Subject: [PATCH 249/259] pushhhhhh --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Services/ChangeAssignment.php | 2 -- app/Services/Range.php | 5 ----- 3 files changed, 1 insertion(+), 8 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index be4bfae..9f0864e 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_37 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_38 flavor: | latest=false tags: | diff --git a/app/Services/ChangeAssignment.php b/app/Services/ChangeAssignment.php index 575eed7..63b2720 100644 --- a/app/Services/ChangeAssignment.php +++ b/app/Services/ChangeAssignment.php @@ -18,7 +18,6 @@ public function __construct($shift) $this->shift = Helpers::buildShift($shift); $this->soldier = $this->buildSoldier(); } - protected function buildSoldier(): SoldierService { $soldier = Soldier::find(Shift::find($this->shift->id)->soldier_id); @@ -27,7 +26,6 @@ protected function buildSoldier(): SoldierService $shifts->push(...Helpers::addShiftsSpaces($shifts)); $shifts->push(...Helpers::addPrevMonthSpaces($soldier->id, $this->shift->range->start)); $concurrentsShifts = $this->getSoldiersShifts($soldier->id, true); - $soldierShifts->push(...Helpers::addPrevMonthSpaces($soldier->id, $this->shift->range->start)); return Helpers::buildSoldier($soldier, $constraints, $shifts, [], $concurrentsShifts); } diff --git a/app/Services/Range.php b/app/Services/Range.php index 1b9ea0f..f5092a5 100644 --- a/app/Services/Range.php +++ b/app/Services/Range.php @@ -98,9 +98,4 @@ public function getThursdaySpace() return new Range($this->end, $this->end->copy()->next(Carbon::SUNDAY)->setHour(7)->setMinutes(59)); } - - public function getThursdaySpace() - { - return new Range($this->end, $this->end->copy()->next(Carbon::SUNDAY)->setHour(7)->setMinutes(59)); - } } From 2c4547765e3a03e32d8e031cd4df521765b5b617 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 21 Sep 2025 15:16:54 +0300 Subject: [PATCH 250/259] pushhhhhh --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Services/Algorithm.php | 2 +- app/Services/ConcurrentTasks.php | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 9f0864e..63ebb20 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_38 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_39 flavor: | latest=false tags: | diff --git a/app/Services/Algorithm.php b/app/Services/Algorithm.php index 496d761..50e2815 100644 --- a/app/Services/Algorithm.php +++ b/app/Services/Algorithm.php @@ -46,7 +46,7 @@ protected function getSoldiersDetails() $constraints = Helpers::buildConstraints($soldier->constraints, new Range($this->date->copy()->startOfMonth(), $this->date->copy()->endOfMonth())); $shifts = $this->getSoldiersShifts($soldier->id, false); - + $shifts->push(...Helpers::addShiftsSpaces($shifts)); $shifts->push(...Helpers::addPrevMonthSpaces($soldier->id, $this->date)); $capacityHold = Helpers::capacityHold($shifts); diff --git a/app/Services/ConcurrentTasks.php b/app/Services/ConcurrentTasks.php index b9c4a5d..c01a066 100644 --- a/app/Services/ConcurrentTasks.php +++ b/app/Services/ConcurrentTasks.php @@ -66,6 +66,7 @@ protected function getSoldiersDetails() $constraints = Helpers::buildConstraints($soldier->constraints, new Range($this->date->copy()->startOfMonth(), $this->date->copy()->endOfMonth())); $shifts = $this->getSoldiersShifts($soldier->id, false); $concurrentsShifts = $this->getSoldiersShifts($soldier->id, true); + $shifts->push(...Helpers::addShiftsSpaces($shifts)); $shifts->push(...Helpers::addPrevMonthSpaces($soldier->id, $this->date)); $capacityHold = Helpers::capacityHold($shifts); From b47239589f7a09bfe29723a53fe24ed017466bb3 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 21 Sep 2025 15:42:00 +0300 Subject: [PATCH 251/259] pushhhhhh --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 3 ++ app/Models/Shift.php | 2 + .../ChartResource/Widgets/ChartFilter.php | 51 +++++++++++++++---- .../TaskResource/Pages/CreateTask.php | 1 + app/Resources/TaskResource/Pages/EditTask.php | 3 +- database/factories/ShiftFactory.php | 1 + .../2024_05_30_104216_create_shift_table.php | 1 + lang/he.json | 6 ++- 9 files changed, 55 insertions(+), 15 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 63ebb20..b0aea37 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_39 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_40 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index e54f767..5b12d02 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -334,6 +334,9 @@ protected function getBasicActions() collect($filteredData)->map(function ($value, $key) use ($record) { $record->{$key} = $value; }); + if ($this->model == Shift::class) { + $record->manually_assigned = true; + } $record->save(); } method_exists($this->model, 'afterSave') && $this->model::afterSave($data, $record); diff --git a/app/Models/Shift.php b/app/Models/Shift.php index 07d04ee..b96340c 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -36,12 +36,14 @@ class Shift extends Model 'parallel_weight', 'start_date', 'end_date', + 'manually_assigned', ]; protected $casts = [ 'start_date' => 'datetime:Y-m-d H:i:s', 'end_date' => 'datetime:Y-m-d H:i:s', 'parallel_weight' => Integer::class, + 'manually_assigned' => 'boolean', ]; public function task(): BelongsTo diff --git a/app/Resources/ChartResource/Widgets/ChartFilter.php b/app/Resources/ChartResource/Widgets/ChartFilter.php index d49a249..bff43de 100644 --- a/app/Resources/ChartResource/Widgets/ChartFilter.php +++ b/app/Resources/ChartResource/Widgets/ChartFilter.php @@ -13,6 +13,7 @@ use Carbon\Carbon; use Filament\Forms\Components\Actions\Action; use Filament\Forms\Components\Section; +use Filament\Forms\Components\Radio; use Filament\Forms\Components\Select; use Filament\Forms\Concerns\InteractsWithForms; use Filament\Forms\Contracts\HasForms; @@ -21,6 +22,7 @@ use Filament\Widgets\Widget; use Maatwebsite\Excel\Facades\Excel; + class ChartFilter extends Widget implements HasForms { use InteractsWithForms; @@ -100,20 +102,35 @@ public function form(Form $form): Form 'month' => $form->getState()['year'].'-'.$form->getState()['month'], ]))) ->extraAttributes(['style' => 'color: white; background-color: #a0cddf']), - Action::make('Reset assignment') - ->action(fn () => $this->resetShifts($form)) - ->requiresConfirmation() - ->modalHeading(fn () => __('Reset assignment confirmation modal heading', [ + Action::make('Reset assignment') + ->color('danger') + ->label(__('Reset assignment')) + ->icon('heroicon-o-arrow-path') + ->after(fn () => $this->successNotification(__('The assignment has been reset', [ + 'month' => $form->getState()['year'].'-'.$form->getState()['month'], + ]))) + ->modalHeading(fn (): array|string|null => __('Reset assignment confirmation modal heading', [ 'month' => $form->getState()['year'].'-'.$form->getState()['month'], ])) ->modalDescription(__('Are you sure? This cannot be undone!')) ->modalSubmitActionLabel(__('Yes, reset it')) - ->after(fn () => $this->successNotification(__('The assignment has been reset', [ - 'month' => $form->getState()['year'].'-'.$form->getState()['month'], - ]))) - ->color('danger') - ->label(__('Reset assignment')) - ->icon('heroicon-o-arrow-path'), + ->form([ + Radio::make('reset_type') + ->label(__('Which assignment to reset?')) + ->options([ + 'automatic_assignment' => __('Automatic assignment'), + 'manual_assignment' => __('Manual assignment'), + 'all_assignment' => __('All assignment'), + ]) + ->required(), + ]) + ->action(function (array $data) use ($form): void { + match ($data['reset_type']) { + 'automatic_assignment' => $this->resetShiftsByCondition($form, false), + 'manual_assignment' => $this->resetShiftsByCondition($form, true), + 'all_assignment' => $this->resetShifts($form), + }; + }), Action::make('Delete shifts') ->color('danger') ->action(fn () => $this->deleteShifts($form)) @@ -163,6 +180,17 @@ protected function runAlgorithm($form) } protected function resetShifts($form) + { + $startDate = + // (Carbon::now()->format('m') == Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->format('m')) + // ? Carbon::now()->addDay()->format('Y-m-d') + // : + Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->startOfMonth()->format('Y-m-d'); Shift::whereNotNull('soldier_id') + ->whereBetween('start_date', [$startDate, (Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->endOfMonth()->addDay())->format('Y-m-d')]) + ->update(['soldier_id' => null, 'manually_assigned' => false]); + } + + protected function resetShiftsByCondition($form, $manual_assignment) { $startDate = // (Carbon::now()->format('m') == Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->format('m')) @@ -171,7 +199,8 @@ protected function resetShifts($form) Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->startOfMonth()->format('Y-m-d'); Shift::whereNotNull('soldier_id') ->whereBetween('start_date', [$startDate, (Carbon::parse($form->getState()['year'].'-'.$form->getState()['month'])->endOfMonth()->addDay())->format('Y-m-d')]) - ->update(['soldier_id' => null]); + ->where('manually_assigned', $manual_assignment) + ->update(['soldier_id' => null, 'manually_assigned' => false]); } protected function deleteShifts($form) diff --git a/app/Resources/TaskResource/Pages/CreateTask.php b/app/Resources/TaskResource/Pages/CreateTask.php index 4914de8..fed5d51 100644 --- a/app/Resources/TaskResource/Pages/CreateTask.php +++ b/app/Resources/TaskResource/Pages/CreateTask.php @@ -34,6 +34,7 @@ protected function afterCreate(): void $shift_for_assignment = Shift::latest()->first(); $soldierId = ($this->data['soldier_type'] === 'me') ? auth()->user()->userable_id : $this->data['soldier_id']; $shift_for_assignment->soldier_id = $soldierId; + $shift_for_assignment->manually_assigned = true; $shift_for_assignment->save(); } diff --git a/app/Resources/TaskResource/Pages/EditTask.php b/app/Resources/TaskResource/Pages/EditTask.php index 8db8c48..10fc275 100644 --- a/app/Resources/TaskResource/Pages/EditTask.php +++ b/app/Resources/TaskResource/Pages/EditTask.php @@ -41,7 +41,6 @@ protected function afterSave(): void return; } $soldierId = $this->data['soldier_type'] === 'me' ? auth()->user()->userable_id : $this->data['soldier_id']; - Shift::where('task_id', $this->data['id'])->update(['soldier_id' => $soldierId]); - } + Shift::where('task_id', $this->data['id'])->update(['soldier_id' => $soldierId, 'manually_assigned' => true]); } } } diff --git a/database/factories/ShiftFactory.php b/database/factories/ShiftFactory.php index 4ababef..5a9d7ea 100644 --- a/database/factories/ShiftFactory.php +++ b/database/factories/ShiftFactory.php @@ -18,6 +18,7 @@ public function definition(): array 'parallel_weight' => fake()->randomDigit(), 'start_date' => now(), 'end_date' => Carbon::now()->addDay(), + 'manually_assigned' => false, ]; } } diff --git a/database/migrations/2024_05_30_104216_create_shift_table.php b/database/migrations/2024_05_30_104216_create_shift_table.php index 8395d54..0d3171b 100644 --- a/database/migrations/2024_05_30_104216_create_shift_table.php +++ b/database/migrations/2024_05_30_104216_create_shift_table.php @@ -16,6 +16,7 @@ public function up(): void $table->integer('parallel_weight')->nullable(); $table->dateTime('start_date'); $table->dateTime('end_date'); + $table->boolean('manually_assigned')->default(false); $table->timestamps(); }); } diff --git a/lang/he.json b/lang/he.json index e7bd3a6..6742ead 100644 --- a/lang/he.json +++ b/lang/he.json @@ -336,5 +336,9 @@ "Commander approved edit constraint times":" שלום :soldierName!
בקשתך להזזת האילוץ :constraintName שלך
מ :startDate - :endDate
ל :toStartDate - :toEndDate
אושרה והשינוי בוצע .
המשך יום קסום!", "Commander approved edit constraint type": "שלום :soldierName!
בקשתך לעריכת האילוץ :constraintName שלך
ב :startDate - :endDate
לאילוץ :toConstraintName
ב :toStartDate - :toEndDate
אושרה והשינוי בוצע .
המשך יום קסום!", "Commander deny edit constraint times":" שלום :soldierName!
בקשתך להזזת האילוץ :constraintName שלך
מ :startDate - :endDate
ל :toStartDate - :toEndDate נדחתה.
המשך יום קסום!", - "Commander deny edit constraint type": "שלום :soldierName!
בקשתך לעריכת האילוץ :constraintName שלך
ב :startDate - :endDate
לאילוץ :toConstraintName
ב :toStartDate - :toEndDate נדחתה.
המשך יום קסום!" + "Commander deny edit constraint type": "שלום :soldierName!
בקשתך לעריכת האילוץ :constraintName שלך
ב :startDate - :endDate
לאילוץ :toConstraintName
ב :toStartDate - :toEndDate נדחתה.
המשך יום קסום!", + "Which assignment to reset?": "איזה שיבוץ לאפס?", + "Automatic assignment": "אוטומטי", + "Manual assignment": "ידני", + "All assignment": "הכל" } From 877c8e4b9d030de6643084e406710728073b24db Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Thu, 25 Sep 2025 14:40:36 +0300 Subject: [PATCH 252/259] pushhhhhh --- .github/workflows/php-build-and-deploy.yml | 2 +- ..._add_manually_assigned_to_shifts_table.php | 29 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 database/migrations/2025_09_25_142022_add_manually_assigned_to_shifts_table.php diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index b0aea37..c99c111 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_40 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_41 flavor: | latest=false tags: | diff --git a/database/migrations/2025_09_25_142022_add_manually_assigned_to_shifts_table.php b/database/migrations/2025_09_25_142022_add_manually_assigned_to_shifts_table.php new file mode 100644 index 0000000..16c69d6 --- /dev/null +++ b/database/migrations/2025_09_25_142022_add_manually_assigned_to_shifts_table.php @@ -0,0 +1,29 @@ +boolean('manually_assigned')->default(false); + }); + DB::table('shifts')->whereNull('manually_assigned')->update(['manually_assigned' => false]); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('shifts', function (Blueprint $table) { + $table->dropColumn('manually_assigned'); + }); + } +}; From d53677cefdecdc8f2e6d65b913d487fe008c634a Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Sun, 19 Oct 2025 16:01:52 +0300 Subject: [PATCH 253/259] Fix bug --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Filament/Widgets/CalendarWidget.php | 14 +++-- app/Models/Constraint.php | 2 +- app/Models/Shift.php | 10 ++- app/Resources/DepartmentResource.php | 2 +- app/Resources/TaskResource.php | 62 +++++++++---------- .../TaskResource/Pages/CreateTask.php | 25 ++++---- app/Resources/TeamResource.php | 6 +- lang/he.json | 1 + tests/Feature/DeleteTaskTest.php | 5 +- tests/Feature/EditTaskTest.php | 6 +- 11 files changed, 71 insertions(+), 64 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index c99c111..9b8e430 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_41 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_42 flavor: | latest=false tags: | diff --git a/app/Filament/Widgets/CalendarWidget.php b/app/Filament/Widgets/CalendarWidget.php index 5b12d02..0c28603 100644 --- a/app/Filament/Widgets/CalendarWidget.php +++ b/app/Filament/Widgets/CalendarWidget.php @@ -164,11 +164,15 @@ protected function createConstraintAction() ]); } }) - ->mountUsing( - fn (Form $form, array $arguments) => $form->fill([ - 'start_date' => $arguments['start'] ?? null, - 'end_date' => $arguments['end'] ?? ($arguments['start'] ? Carbon::parse($arguments['start'])->addHour(): null), ]) - ) + ->mountUsing(function (Form $form, array $arguments) { + $start = $arguments['start'] ?? null; + $end = $arguments['end'] ?? null; + + $form->fill([ + 'start_date' => $start, + 'end_date' => $end ?? ($start ? Carbon::parse($start)->addHour() : null), + ]); + }) ->label($this->model::getTitle().' '.__('New')) ->modalHeading(__('Create').' '.$this->model::getTitle()) ->disabled(function (array $arguments) use ($today) { diff --git a/app/Models/Constraint.php b/app/Models/Constraint.php index f935212..1733e89 100644 --- a/app/Models/Constraint.php +++ b/app/Models/Constraint.php @@ -356,7 +356,7 @@ public static function getFilters($calendar) ->form(fn () => [ Select::make('soldier_id') ->label(__('Soldier')) - ->options(fn (): array => Cache::remember('users', 30 * 60, fn () => User::all())->mapWithKeys(fn ($user) => [$user->userable_id => $user->displayName]) + ->options(fn (): array => Cache::remember('users', 30 * 60, fn () => User::all()->sortBy('first_name'))->mapWithKeys(fn ($user) => [$user->userable_id => $user->displayName]) ->toArray()) ->multiple(), Select::make('constraint_type') diff --git a/app/Models/Shift.php b/app/Models/Shift.php index b96340c..97291f5 100644 --- a/app/Models/Shift.php +++ b/app/Models/Shift.php @@ -98,7 +98,7 @@ public static function getSchema(): array ->options( function (?Shift $shift, Get $get) { if ($get('soldier_type') === 'all') { - return Cache::remember('users', 30 * 60, fn () => User::all()) + return Cache::remember('users', 30 * 60, fn () => User::all()->sortBy('first_name')) ->mapWithKeys(fn ($user) => [$user->userable_id => $user->displayName]); } $manual_assignment = new ManualAssignment($shift, $get('soldier_type')); @@ -149,8 +149,7 @@ function (?Shift $shift, Get $get) { protected static function soldierIdPlaceholder($soldierType, $shift) { if ($soldierType === 'all') { - return Cache::remember('users', 30 * 60, fn () => User::all())->count() > 0 ? __('Select a soldier') : __('No suitable soldiers'); - } + return Cache::remember('users', 30 * 60, fn () => User::all()->sortBy('first_name'))->count() > 0 ? __('Select a soldier') : __('No suitable soldiers'); } $manual_assignment = new ManualAssignment($shift, $soldierType); return @@ -533,7 +532,7 @@ function ($record) use (&$soldiers) { ->label(__('Soldier')) ->options( fn (Get $get) => match ($get('soldiers')) { - 'all' => Cache::remember('users', 30 * 60, fn () => User::all())->where('userable_id', '!=', $record->soldier_id) + 'all' => Cache::remember('users', 30 * 60, fn () => User::all()->sortBy('first_name'))->where('userable_id', '!=', $record->soldier_id) ->mapWithKeys(fn ($user) => [$user->userable_id => $user->displayName]), 'matching' => $changeAssignment->getMatchingSoldiers(), default => $changeAssignment->getMatchingSoldiers(), @@ -802,8 +801,7 @@ public static function getFilters($calendar) ]), Select::make('soldier_id') ->label(__('Soldier')) - ->options(fn (): array => Cache::remember('users', 30 * 60, fn () => User::all())->mapWithKeys(fn ($user) => [$user->userable_id => $user->displayName]) - ->toArray()) + ->options(fn (): array => Cache::remember('users', 30 * 60, fn () => User::all()->sortBy('first_name'))->mapWithKeys(fn ($user) => [$user->userable_id => $user->displayName]) ->toArray()) ->multiple() ->live() ->reactive() diff --git a/app/Resources/DepartmentResource.php b/app/Resources/DepartmentResource.php index c9cdcdc..acd0dd9 100644 --- a/app/Resources/DepartmentResource.php +++ b/app/Resources/DepartmentResource.php @@ -53,7 +53,7 @@ public static function form(Form $form): Form ->label(__('Commander')) ->relationship('commander', 'id') ->options( - fn () => Cache::remember('users', 30 * 60, fn () => User::all())->mapWithKeys(fn ($user) => [$user->userable_id => $user->displayName]) + fn () => Cache::remember('users', 30 * 60, fn () => User::all()->sortBy('first_name'))->mapWithKeys(fn ($user) => [$user->userable_id => $user->displayName]) ) ->placeholder(__('Select commander')) ->optionsLimit(Soldier::count()) diff --git a/app/Resources/TaskResource.php b/app/Resources/TaskResource.php index 69b527c..4f7838b 100644 --- a/app/Resources/TaskResource.php +++ b/app/Resources/TaskResource.php @@ -66,12 +66,7 @@ public static function form(Form $form): Form ->schema([ Section::make()->schema(self::getTaskDetails())->columns(), Section::make()->schema(self::getRecurring())->columns(), - Section::make()->schema(self::additionalDetails())->columns(), - Section::make()->schema(self::assignSoldier())->columns() - ->visible( - fn (Get $get) => $get('recurring.type') == 'One time' - && $get('recurring.date') - ), + Section::make()->schema(self::assignSoldier())->columns(), ]); } @@ -179,9 +174,10 @@ public static function table(Table $table): Table ->multiple() ->searchable() ->options(collect(RecurringType::cases())->mapWithKeys(fn ($type) => [$type->value => $type->getLabel()])) - ->query(fn (Builder $query, array $data) => collect($data['values'])->map(function ($type) use ($query) { - return $query->orWhereJsonContains('recurring', $type); - }) + ->query( + fn (Builder $query, array $data) => collect($data['values'])->map(function ($type) use ($query) { + return $query->orWhereJsonContains('recurring', $type); + }) ) ->default(null), NumberFilter::make('parallel_weight') @@ -263,6 +259,23 @@ public static function getTaskDetails(): array ->step(0.01) ->label(__('Duration')) ->required(), + Select::make('kind') + ->label(__('Kind')) + ->live() + ->required() + ->placeholder(fn () => __('Select task kind')) + ->options(collect(TaskKind::cases())->mapWithKeys(fn ($type) => [$type->value => $type->getLabel()])), + Select::make('concurrent_tasks') + ->label(__('Concurrent tasks')) + ->multiple() + ->placeholder(fn () => Task::count() > 0 ? __('Select concurrent tasks') : __('No tasks')) + ->options(Task::select('type') + ->distinct() + ->orderBy('type') + ->pluck('type', 'type') + ->all()) + ->visible(fn (Get $get) => $get('kind') === TaskKind::INPARALLEL->value), + ]; } @@ -348,29 +361,12 @@ public static function assignSoldier(): array ->extraAttributes(['style' => 'color: red; font-family: Arial, Helvetica, sans-serif; font-size: 20px']) ->live() ->visible(fn (Get $get) => $get('soldier_type') === 'all'), - ]), - ]; - } - - public static function additionalDetails(): array - { - return [ - Select::make('kind') - ->label(__('Kind')) - ->live() - ->required() - ->placeholder(fn () => __('Select task kind')) - ->options(collect(TaskKind::cases())->mapWithKeys(fn ($type) => [$type->value => $type->getLabel()])), - Select::make('concurrent_tasks') - ->label(__('Concurrent tasks')) - ->multiple() - ->placeholder(fn () => Task::count() > 0 ? __('Select concurrent tasks') : __('No tasks')) - ->options(Task::select('type') - ->distinct() - ->orderBy('type') - ->pluck('type', 'type') - ->all()) - ->visible(fn (Get $get) => $get('kind') === TaskKind::INPARALLEL->value), + ]) + ->visible( + fn (Get $get) => $get('recurring.type') == 'One time' + && $get('recurring.date') + && $get('kind') + ), ]; } @@ -417,7 +413,7 @@ protected static function getSoldiers(Get $get) return $manual_assignment->getSoldiers($get('department_name')); } - return Cache::remember('users', 30 * 60, fn () => User::all()) + return Cache::remember('users', 30 * 60, fn () => User::all()->sortBy('first_name')) ->mapWithKeys(fn ($user) => [$user->userable_id => $user->displayName]); } diff --git a/app/Resources/TaskResource/Pages/CreateTask.php b/app/Resources/TaskResource/Pages/CreateTask.php index fed5d51..f2ef39b 100644 --- a/app/Resources/TaskResource/Pages/CreateTask.php +++ b/app/Resources/TaskResource/Pages/CreateTask.php @@ -9,6 +9,7 @@ use Filament\Forms\Components\Section; use Filament\Forms\Components\Wizard\Step; use Filament\Forms\Get; +use Filament\Forms\Components\Placeholder; use Filament\Resources\Pages\CreateRecord; use Filament\Resources\Pages\CreateRecord\Concerns\HasWizard; @@ -64,20 +65,22 @@ public static function getSteps(): array ->schema([ Section::make()->schema(TaskResource::getRecurring())->columns(), ]), - Step::make('Additional_details') - ->label(__('Additional settings')) - ->schema([ - Section::make()->schema(TaskResource::additionalDetails())->columns(), - ]), Step::make('Assign_soldier') ->label(__('Soldier assignment')) ->schema([ - Section::make()->schema(TaskResource::assignSoldier())->columns(), - ]) - ->visible( - fn (Get $get) => $get('recurring.type') == 'One time' - && $get('recurring.date') - ), + Section::make() + ->schema(fn (Get $get) => ($get('recurring.type') == 'One time' + && $get('recurring.date') + && $get('kind')) + ? TaskResource::assignSoldier() + : [ + Placeholder::make('') + ->content(__('Assigning a soldier is only for a one-time task').'.'), + ] + ) + ->columns(), + ]), + ]; } } diff --git a/app/Resources/TeamResource.php b/app/Resources/TeamResource.php index dbce04d..732e4a8 100644 --- a/app/Resources/TeamResource.php +++ b/app/Resources/TeamResource.php @@ -55,7 +55,7 @@ public static function form(Form $form): Form ->label(__('Commander')) ->relationship('commander') ->options( - fn () => Cache::remember('users', 30 * 60, fn () => User::all())->mapWithKeys(fn ($user) => [$user->userable_id => $user->displayName]) + fn () => Cache::remember('users', 30 * 60, fn () => User::all()->sortBy('first_name'))->mapWithKeys(fn ($user) => [$user->userable_id => $user->displayName]) ) ->live() ->afterStateUpdated(function ($state, Get $get, Set $set) { @@ -85,7 +85,7 @@ public static function form(Form $form): Form Select::make('members') ->label(__('Members')) ->options( - fn (Get $get) => Cache::remember('users', 30 * 60, fn () => User::all()) + fn (Get $get) => Cache::remember('users', 30 * 60, fn () => User::all()->sortBy('first_name')) ->filter(function ($user) use ($get): bool { return $user->userable_id !== (int) $get('commander_id'); }) @@ -154,7 +154,7 @@ public static function table(Table $table): Table Select::make('members') ->label(__('Members')) ->options( - fn (Team $record) => Cache::remember('users', 30 * 60, fn () => User::all()) + fn (Team $record) => Cache::remember('users', 30 * 60, fn () => User::all()->sortBy('first_name')) ->filter(function ($user) use ($record) { return $record->commander_id !== $user->userable_id; }) diff --git a/lang/he.json b/lang/he.json index 6742ead..18842d5 100644 --- a/lang/he.json +++ b/lang/he.json @@ -337,6 +337,7 @@ "Commander approved edit constraint type": "שלום :soldierName!
בקשתך לעריכת האילוץ :constraintName שלך
ב :startDate - :endDate
לאילוץ :toConstraintName
ב :toStartDate - :toEndDate
אושרה והשינוי בוצע .
המשך יום קסום!", "Commander deny edit constraint times":" שלום :soldierName!
בקשתך להזזת האילוץ :constraintName שלך
מ :startDate - :endDate
ל :toStartDate - :toEndDate נדחתה.
המשך יום קסום!", "Commander deny edit constraint type": "שלום :soldierName!
בקשתך לעריכת האילוץ :constraintName שלך
ב :startDate - :endDate
לאילוץ :toConstraintName
ב :toStartDate - :toEndDate נדחתה.
המשך יום קסום!", + "Assigning a soldier is only for a one-time task": "הקצאת חייל ניתנת רק בהגדרת המשימה כחד פעמית", "Which assignment to reset?": "איזה שיבוץ לאפס?", "Automatic assignment": "אוטומטי", "Manual assignment": "ידני", diff --git a/tests/Feature/DeleteTaskTest.php b/tests/Feature/DeleteTaskTest.php index 91f81cd..176242e 100644 --- a/tests/Feature/DeleteTaskTest.php +++ b/tests/Feature/DeleteTaskTest.php @@ -1,6 +1,7 @@ create(); + $task = Task::factory()->create(['recurring' => ['type' => RecurringType::ONETIME->value]]); Shift::factory()->count(5)->create([ 'task_id' => $task->id, 'start_date' => now()->addDay(), @@ -31,7 +32,7 @@ }); it('should not delete the shifts of the same task type whose time have already expired', function () { - $task = Task::factory()->create(); + $task = Task::factory()->create(['recurring' => ['type' => RecurringType::ONETIME->value]]); Shift::factory()->count(3)->create([ 'task_id' => $task->id, 'start_date' => now()->addDay(), diff --git a/tests/Feature/EditTaskTest.php b/tests/Feature/EditTaskTest.php index 6432446..4b1aa19 100644 --- a/tests/Feature/EditTaskTest.php +++ b/tests/Feature/EditTaskTest.php @@ -15,7 +15,11 @@ }); it('should change the concurrent_tasks to empty array if the kind is not `in_parallel`', function () { - $task = Task::factory()->create(['kind' => TaskKind::INPARALLEL->value, 'concurrent_tasks' => ['go']]); + $task = Task::factory()->create([ + 'kind' => TaskKind::INPARALLEL->value, + 'concurrent_tasks' => ['go'], + 'recurring' => ['type' => RecurringType::DAILY->value], + ]); livewire(EditTask::class, [ 'record' => $task->id, From 18ea93319b9b0c3473f7d1c5147a51d80c21c9b8 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Mon, 20 Oct 2025 16:25:15 +0300 Subject: [PATCH 254/259] Fix bug --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Services/Algorithm.php | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 9b8e430..6d7c280 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_42 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_43 flavor: | latest=false tags: | diff --git a/app/Services/Algorithm.php b/app/Services/Algorithm.php index 50e2815..077cf4c 100644 --- a/app/Services/Algorithm.php +++ b/app/Services/Algorithm.php @@ -64,6 +64,7 @@ protected function getSoldiersShifts($soldierId, $inParallel) public function run() { + set_time_limit(0); $shifts = $this->getShiftWithTasks(); $soldiers = $this->getSoldiersDetails(); $scheduleAlgorithm = new Schedule($shifts, $soldiers); @@ -71,4 +72,4 @@ public function run() $concurrentTasks = new ConcurrentTasks($this->date); $concurrentTasks->run(); } -} +} From f6eeaad18db39b968e901bf77475be159facf536 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Mon, 20 Oct 2025 16:46:15 +0300 Subject: [PATCH 255/259] Fix bug --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Services/Algorithm.php | 2 +- app/Services/Helpers.php | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 6d7c280..6ac84a2 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_43 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_44 flavor: | latest=false tags: | diff --git a/app/Services/Algorithm.php b/app/Services/Algorithm.php index 077cf4c..a4ac70a 100644 --- a/app/Services/Algorithm.php +++ b/app/Services/Algorithm.php @@ -64,7 +64,7 @@ protected function getSoldiersShifts($soldierId, $inParallel) public function run() { - set_time_limit(0); + // set_time_limit(0); $shifts = $this->getShiftWithTasks(); $soldiers = $this->getSoldiersDetails(); $scheduleAlgorithm = new Schedule($shifts, $soldiers); diff --git a/app/Services/Helpers.php b/app/Services/Helpers.php index d1c805c..0781eee 100644 --- a/app/Services/Helpers.php +++ b/app/Services/Helpers.php @@ -167,6 +167,7 @@ protected static function getLastDayOfLastMonthShifts($soldierId, $lastDay) public static function updateShiftTable($assignments) { + set_time_limit(0); if (empty($assignments)) { return; } From 973cd151471bf51b371877a51a999db9f16dca17 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Tue, 28 Oct 2025 09:36:35 +0200 Subject: [PATCH 256/259] Fix bug --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Livewire/MyDatabaseNotifications.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 6ac84a2..7352f2d 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_44 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_45 flavor: | latest=false tags: | diff --git a/app/Livewire/MyDatabaseNotifications.php b/app/Livewire/MyDatabaseNotifications.php index 31df1fd..ac42b3e 100644 --- a/app/Livewire/MyDatabaseNotifications.php +++ b/app/Livewire/MyDatabaseNotifications.php @@ -93,7 +93,7 @@ protected function shiftAssignmentConfirmExchange($soldierAId, $soldierBId, $shi [], $soldierB->user ); - if ($requesterId != $soldierAId->user->id && $requesterId != $soldierBId->user->id) { + if ($requesterId != $soldierAId && $requesterId != $soldierBId) { $this->sendNotification( __('Exchange shift'), __( @@ -267,7 +267,7 @@ protected function shiftAssignmentDenyExchange($soldierAId, $soldierBId, $shiftA $soldierB->user ); } - if ($requesterId != $soldierAId->user->id && $requesterId != $soldierBId->user->id) { + if ($requesterId != $soldierAId && $requesterId != $soldierBId) { $this->sendNotification( __('Deny exchange shift request'), __( From 3e89677922eb185416d49ee076292fa009a5bb09 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 29 Oct 2025 10:05:49 +0200 Subject: [PATCH 257/259] Fix bug --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Exports/ShiftsExport.php | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 7352f2d..592e9bc 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_45 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_46 flavor: | latest=false tags: | diff --git a/app/Exports/ShiftsExport.php b/app/Exports/ShiftsExport.php index d68b912..2fbb112 100644 --- a/app/Exports/ShiftsExport.php +++ b/app/Exports/ShiftsExport.php @@ -22,6 +22,7 @@ public function __construct($month) public function sheets(): array { + set_time_limit(0); $tasksTypes = Task::select('type', 'color') ->get() ->groupBy('type') From 286fca3aa3bb395855f60df826c5a57f46bcea1b Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 29 Oct 2025 10:16:58 +0200 Subject: [PATCH 258/259] Fix bug --- .github/workflows/php-build-and-deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index 592e9bc..a479e9a 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/love_46 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/new_image_1 flavor: | latest=false tags: | From d09338bdbcea94696f51dba0e34e5eb5d1e8f165 Mon Sep 17 00:00:00 2001 From: MaliSharfer Date: Wed, 29 Oct 2025 10:39:23 +0200 Subject: [PATCH 259/259] Fix bug --- .github/workflows/php-build-and-deploy.yml | 2 +- app/Exports/CourceSheet.php | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/php-build-and-deploy.yml b/.github/workflows/php-build-and-deploy.yml index a479e9a..e75feed 100644 --- a/.github/workflows/php-build-and-deploy.yml +++ b/.github/workflows/php-build-and-deploy.yml @@ -35,7 +35,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/new_image_1 + images: ${{ secrets.REGISTRY_LOGIN_SERVER }}/new_image_2 flavor: | latest=false tags: | diff --git a/app/Exports/CourceSheet.php b/app/Exports/CourceSheet.php index 16eb0a0..4241ec1 100644 --- a/app/Exports/CourceSheet.php +++ b/app/Exports/CourceSheet.php @@ -29,6 +29,7 @@ class CourceSheet implements FromCollection, ShouldAutoSize, WithEvents, WithHea public function __construct($month, $course) { + set_time_limit(0); $this->month = $month; $this->course = $course; $this->shifts = Shift::whereNotNull('soldier_id')